summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2009-12-31 13:16:41 +0000
committerivan <ivan>2009-12-31 13:16:41 +0000
commitb4b0c7e72d7eaee2fbfc7022022c9698323203dd (patch)
treeba4cd21399e412c32fe3737eaa8478e3271509f9
parent2dfda73eeb3eae2d4f894099754794ef07d060dd (diff)
import rt 3.8.7
-rw-r--r--rt/Makefile377
-rw-r--r--rt/Makefile.in409
-rwxr-xr-xrt/README220
-rw-r--r--rt/README.Oracle66
-rw-r--r--rt/UPGRADING150
-rw-r--r--rt/UPGRADING.mysql85
-rw-r--r--rt/aclocal.m410
-rwxr-xr-xrt/bin/mason_handler.fcgi13
-rw-r--r--rt/bin/mason_handler.fcgi.in13
-rwxr-xr-xrt/bin/mason_handler.scgi12
-rw-r--r--rt/bin/mason_handler.scgi.in12
-rw-r--r--rt/bin/mason_handler.svc13
-rw-r--r--rt/bin/mason_handler.svc.in13
-rwxr-xr-xrt/bin/rt665
-rw-r--r--rt/bin/rt-crontool211
-rw-r--r--rt/bin/rt-crontool.in211
-rwxr-xr-xrt/bin/rt-mailgate164
-rw-r--r--rt/bin/rt-mailgate.in164
-rw-r--r--rt/bin/rt.in665
-rwxr-xr-xrt/bin/standalone_httpd141
-rwxr-xr-xrt/bin/standalone_httpd.in141
-rwxr-xr-xrt/bin/webmux.pl57
-rw-r--r--rt/bin/webmux.pl.in57
-rw-r--r--rt/config.layout37
-rw-r--r--rt/config.pld17
-rwxr-xr-xrt/config.status207
-rwxr-xr-xrt/configure1296
-rw-r--r--rt/configure.ac187
-rw-r--r--rt/docs/creating_external_custom_fields.pod97
-rwxr-xr-xrt/docs/design_docs/TransactionTypes.txt6
-rw-r--r--rt/docs/design_docs/gnupg_details_on_output_formats1253
-rw-r--r--rt/docs/design_docs/rql_parser_machine.graphviz3
-rw-r--r--rt/docs/design_docs/string-extraction-guide.txt6
-rw-r--r--rt/docs/extending_clickable_links.pod157
-rw-r--r--rt/docs/gnupg_integration.pod1
-rw-r--r--rt/docs/porting.windows24
-rw-r--r--rt/docs/queue_subject_tag.pod79
-rw-r--r--rt/docs/templates.pod60
-rw-r--r--rt/docs/using_forms_widgets.pod113
-rw-r--r--rt/etc/RT_Config.pm1728
-rw-r--r--rt/etc/RT_Config.pm.in1726
-rw-r--r--rt/etc/RT_SiteConfig.pm1
-rw-r--r--rt/etc/acl.Informix5
-rw-r--r--rt/etc/acl.Oracle12
-rwxr-xr-xrt/etc/acl.Pg113
-rw-r--r--rt/etc/acl.Sybase10
-rwxr-xr-xrt/etc/acl.mysql30
-rw-r--r--rt/etc/initialdata481
-rw-r--r--rt/etc/schema.Oracle3
-rwxr-xr-xrt/etc/schema.Pg5
-rw-r--r--rt/etc/schema.SQLite2
-rwxr-xr-xrt/etc/schema.mysql-4.0464
-rwxr-xr-xrt/etc/schema.mysql-4.1466
-rwxr-xr-xrt/etc/upgrade/3.1.0/acl.Pg2
-rw-r--r--rt/etc/upgrade/3.3.0/acl.Pg2
-rw-r--r--rt/etc/upgrade/3.5.1/content2
-rw-r--r--rt/etc/upgrade/3.7.1/content14
-rw-r--r--rt/etc/upgrade/3.7.10/content49
-rw-r--r--rt/etc/upgrade/3.7.15/content12
-rw-r--r--rt/etc/upgrade/3.7.19/content37
-rw-r--r--rt/etc/upgrade/3.7.3/schema.Oracle5
-rw-r--r--rt/etc/upgrade/3.7.3/schema.Pg1
-rw-r--r--rt/etc/upgrade/3.7.3/schema.mysql1
-rw-r--r--rt/etc/upgrade/3.7.81/schema.Oracle2
-rw-r--r--rt/etc/upgrade/3.7.81/schema.mysql2
-rw-r--r--rt/etc/upgrade/3.7.82/content13
-rw-r--r--rt/etc/upgrade/3.7.85/content11
-rw-r--r--rt/etc/upgrade/3.7.86/content23
-rw-r--r--rt/etc/upgrade/3.7.87/content28
-rwxr-xr-xrt/etc/upgrade/3.8-branded-queues-extension95
-rwxr-xr-xrt/etc/upgrade/3.8-branded-queues-extension.in95
-rwxr-xr-xrt/etc/upgrade/3.8-ical-extension96
-rw-r--r--rt/etc/upgrade/3.8-ical-extension.in96
-rw-r--r--rt/etc/upgrade/3.8.0/content22
-rw-r--r--rt/etc/upgrade/3.8.1/content24
-rw-r--r--rt/etc/upgrade/3.8.2/content186
-rw-r--r--rt/etc/upgrade/3.8.3/content91
-rw-r--r--rt/etc/upgrade/3.8.3/schema.Pg3
-rw-r--r--rt/etc/upgrade/3.8.4/content59
-rw-r--r--rt/etc/upgrade/3.8.6/content10
-rw-r--r--rt/etc/upgrade/shrink_cgm_table.pl72
-rwxr-xr-xrt/etc/upgrade/split-out-cf-categories171
-rw-r--r--rt/etc/upgrade/split-out-cf-categories.in171
-rwxr-xr-xrt/etc/upgrade/upgrade-mysql-schema.pl390
-rw-r--r--rt/install-sh676
-rw-r--r--rt/lib/RT.pm619
-rw-r--r--rt/lib/RT.pm.in611
-rwxr-xr-xrt/lib/RT/ACE.pm11
-rw-r--r--rt/lib/RT/ACE_Overlay.pm317
-rwxr-xr-xrt/lib/RT/ACL.pm10
-rw-r--r--rt/lib/RT/ACL_Overlay.pm15
-rwxr-xr-xrt/lib/RT/Action.pm227
-rw-r--r--rt/lib/RT/Action/AutoOpen.pm52
-rwxr-xr-xrt/lib/RT/Action/Autoreply.pm63
-rw-r--r--rt/lib/RT/Action/CreateTickets.pm265
-rw-r--r--rt/lib/RT/Action/EscalatePriority.pm11
-rw-r--r--rt/lib/RT/Action/ExtractSubjectTag.pm103
-rwxr-xr-xrt/lib/RT/Action/Generic.pm177
-rwxr-xr-xrt/lib/RT/Action/LinearEscalate.pm279
-rwxr-xr-xrt/lib/RT/Action/Notify.pm76
-rwxr-xr-xrt/lib/RT/Action/NotifyAsComment.pm10
-rw-r--r--rt/lib/RT/Action/NotifyGroup.pm209
-rw-r--r--rt/lib/RT/Action/NotifyGroupAsComment.pm91
-rw-r--r--rt/lib/RT/Action/RecordComment.pm9
-rw-r--r--rt/lib/RT/Action/RecordCorrespondence.pm9
-rw-r--r--rt/lib/RT/Action/ResolveMembers.pm9
-rwxr-xr-xrt/lib/RT/Action/SendEmail.pm1055
-rw-r--r--rt/lib/RT/Action/SetPriority.pm9
-rw-r--r--rt/lib/RT/Action/UserDefined.pm9
-rw-r--r--rt/lib/RT/Approval.pm74
-rw-r--r--rt/lib/RT/Approval/Rule.pm85
-rw-r--r--rt/lib/RT/Approval/Rule/Created.pm71
-rw-r--r--rt/lib/RT/Approval/Rule/NewPending.pm97
-rw-r--r--rt/lib/RT/Approval/Rule/Passed.pm110
-rw-r--r--rt/lib/RT/Approval/Rule/Rejected.pm114
-rwxr-xr-xrt/lib/RT/Attachment.pm5
-rw-r--r--rt/lib/RT/Attachment_Overlay.pm604
-rwxr-xr-xrt/lib/RT/Attachments.pm5
-rw-r--r--rt/lib/RT/Attachments_Overlay.pm195
-rw-r--r--rt/lib/RT/Attribute.pm5
-rw-r--r--rt/lib/RT/Attribute_Overlay.pm55
-rw-r--r--rt/lib/RT/Attributes.pm5
-rw-r--r--rt/lib/RT/Attributes_Overlay.pm43
-rw-r--r--rt/lib/RT/Base.pm15
-rw-r--r--rt/lib/RT/CachedGroupMember.pm5
-rw-r--r--rt/lib/RT/CachedGroupMember_Overlay.pm13
-rw-r--r--rt/lib/RT/CachedGroupMembers.pm5
-rw-r--r--rt/lib/RT/CachedGroupMembers_Overlay.pm10
-rwxr-xr-xrt/lib/RT/Condition.pm233
-rw-r--r--rt/lib/RT/Condition/AnyTransaction.pm9
-rw-r--r--rt/lib/RT/Condition/BeforeDue.pm10
-rw-r--r--rt/lib/RT/Condition/CloseTicket.pm84
-rwxr-xr-xrt/lib/RT/Condition/Generic.pm181
-rw-r--r--rt/lib/RT/Condition/Overdue.pm11
-rw-r--r--rt/lib/RT/Condition/OwnerChange.pm54
-rw-r--r--rt/lib/RT/Condition/PriorityChange.pm11
-rw-r--r--rt/lib/RT/Condition/PriorityExceeds.pm12
-rw-r--r--rt/lib/RT/Condition/QueueChange.pm12
-rw-r--r--rt/lib/RT/Condition/ReopenTicket.pm89
-rw-r--r--rt/lib/RT/Condition/StatusChange.pm11
-rw-r--r--rt/lib/RT/Condition/UserDefined.pm12
-rw-r--r--rt/lib/RT/Config.pm894
-rw-r--r--rt/lib/RT/Crypt/GnuPG.pm2450
-rwxr-xr-xrt/lib/RT/CurrentUser.pm326
-rw-r--r--rt/lib/RT/CustomField.pm19
-rw-r--r--rt/lib/RT/CustomFieldValue.pm5
-rw-r--r--rt/lib/RT/CustomFieldValue_Overlay.pm107
-rw-r--r--rt/lib/RT/CustomFieldValues.pm5
-rw-r--r--rt/lib/RT/CustomFieldValues/External.pm235
-rw-r--r--rt/lib/RT/CustomFieldValues/Groups.pm88
-rw-r--r--rt/lib/RT/CustomFieldValues_Overlay.pm16
-rw-r--r--rt/lib/RT/CustomField_Overlay.pm765
-rw-r--r--rt/lib/RT/CustomFields.pm5
-rw-r--r--rt/lib/RT/CustomFields_Overlay.pm55
-rw-r--r--rt/lib/RT/Dashboard.pm358
-rw-r--r--rt/lib/RT/Date.pm1026
-rw-r--r--rt/lib/RT/EmailParser.pm358
-rw-r--r--rt/lib/RT/Graph/Tickets.pm358
-rwxr-xr-xrt/lib/RT/Group.pm5
-rwxr-xr-xrt/lib/RT/GroupMember.pm5
-rw-r--r--rt/lib/RT/GroupMember_Overlay.pm20
-rwxr-xr-xrt/lib/RT/GroupMembers.pm5
-rw-r--r--rt/lib/RT/GroupMembers_Overlay.pm10
-rw-r--r--rt/lib/RT/Group_Overlay.pm339
-rwxr-xr-xrt/lib/RT/Groups.pm7
-rw-r--r--rt/lib/RT/Groups_Overlay.pm165
-rw-r--r--rt/lib/RT/Handle.pm1009
-rw-r--r--rt/lib/RT/I18N.pm91
-rw-r--r--rt/lib/RT/I18N/ar.po7509
-rw-r--r--rt/lib/RT/I18N/bg.po7461
-rw-r--r--rt/lib/RT/I18N/cs.pm5
-rw-r--r--rt/lib/RT/I18N/cs.po5473
-rw-r--r--rt/lib/RT/I18N/da.po6178
-rw-r--r--rt/lib/RT/I18N/de.po5690
-rw-r--r--rt/lib/RT/I18N/en.po92
-rw-r--r--rt/lib/RT/I18N/es.po5787
-rw-r--r--rt/lib/RT/I18N/fi.po6264
-rw-r--r--rt/lib/RT/I18N/fr.po5706
-rw-r--r--rt/lib/RT/I18N/he.po5333
-rw-r--r--rt/lib/RT/I18N/hr.po8617
-rw-r--r--rt/lib/RT/I18N/hu.po5421
-rw-r--r--rt/lib/RT/I18N/i_default.pm9
-rw-r--r--rt/lib/RT/I18N/id.po5326
-rw-r--r--rt/lib/RT/I18N/it.po5546
-rw-r--r--rt/lib/RT/I18N/ja.po7364
-rwxr-xr-xrt/lib/RT/I18N/nb.po9073
-rw-r--r--rt/lib/RT/I18N/nl.po5380
-rw-r--r--rt/lib/RT/I18N/pl.po5435
-rw-r--r--rt/lib/RT/I18N/pt.po7869
-rwxr-xr-xrt/lib/RT/I18N/pt_BR.po9249
-rw-r--r--rt/lib/RT/I18N/rt.pot7460
-rwxr-xr-xrt/lib/RT/I18N/ru.pm74
-rw-r--r--rt/lib/RT/I18N/ru.po6854
-rw-r--r--rt/lib/RT/I18N/sv.po6160
-rw-r--r--rt/lib/RT/I18N/tr.po5371
-rw-r--r--rt/lib/RT/I18N/zh_CN.po10953
-rw-r--r--rt/lib/RT/I18N/zh_TW.po10985
-rw-r--r--rt/lib/RT/Installer.pm340
-rw-r--r--rt/lib/RT/Interface/CLI.pm24
-rwxr-xr-xrt/lib/RT/Interface/Email.pm1205
-rwxr-xr-xrt/lib/RT/Interface/Email/Auth/GnuPG.pm211
-rw-r--r--rt/lib/RT/Interface/Email/Auth/MailFrom.pm99
-rw-r--r--rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm8
-rw-r--r--rt/lib/RT/Interface/REST.pm58
-rw-r--r--rt/lib/RT/Interface/Web.pm1849
-rw-r--r--rt/lib/RT/Interface/Web/Handler.pm78
-rw-r--r--rt/lib/RT/Interface/Web/Menu.pm5
-rw-r--r--rt/lib/RT/Interface/Web/Menu/Item.pm5
-rwxr-xr-xrt/lib/RT/Interface/Web/QueryBuilder.pm5
-rwxr-xr-xrt/lib/RT/Interface/Web/QueryBuilder/Tree.pm180
-rw-r--r--rt/lib/RT/Interface/Web/Request.pm207
-rw-r--r--rt/lib/RT/Interface/Web/Session.pm285
-rwxr-xr-xrt/lib/RT/Interface/Web/Standalone.pm49
-rw-r--r--rt/lib/RT/Interface/Web/Standalone/PreFork.pm103
-rw-r--r--rt/lib/RT/Link.pm5
-rw-r--r--rt/lib/RT/Link_Overlay.pm117
-rw-r--r--rt/lib/RT/Links.pm5
-rw-r--r--rt/lib/RT/Links_Overlay.pm14
-rw-r--r--rt/lib/RT/ObjectCustomField.pm5
-rw-r--r--rt/lib/RT/ObjectCustomFieldValue.pm5
-rw-r--r--rt/lib/RT/ObjectCustomFieldValue_Overlay.pm189
-rw-r--r--rt/lib/RT/ObjectCustomFieldValues.pm5
-rw-r--r--rt/lib/RT/ObjectCustomFieldValues_Overlay.pm81
-rw-r--r--rt/lib/RT/ObjectCustomField_Overlay.pm69
-rw-r--r--rt/lib/RT/ObjectCustomFields.pm5
-rw-r--r--rt/lib/RT/ObjectCustomFields_Overlay.pm29
-rw-r--r--rt/lib/RT/Plugin.pm141
-rw-r--r--rt/lib/RT/Principal.pm5
-rw-r--r--rt/lib/RT/Principal_Overlay.pm105
-rw-r--r--rt/lib/RT/Principals.pm5
-rw-r--r--rt/lib/RT/Principals_Overlay.pm10
-rwxr-xr-xrt/lib/RT/Queue.pm5
-rw-r--r--rt/lib/RT/Queue_Overlay.pm330
-rwxr-xr-xrt/lib/RT/Queues.pm5
-rw-r--r--rt/lib/RT/Queues_Overlay.pm10
-rwxr-xr-xrt/lib/RT/Record.pm545
-rw-r--r--rt/lib/RT/Reminders.pm10
-rw-r--r--rt/lib/RT/Report/Tickets.pm307
-rw-r--r--rt/lib/RT/Report/Tickets/Entry.pm14
-rw-r--r--rt/lib/RT/Rule.pm118
-rw-r--r--rt/lib/RT/Ruleset.pm94
-rw-r--r--rt/lib/RT/SQL.pm302
-rw-r--r--rt/lib/RT/SavedSearch.pm276
-rw-r--r--rt/lib/RT/SavedSearches.pm16
-rwxr-xr-xrt/lib/RT/Scrip.pm5
-rwxr-xr-xrt/lib/RT/ScripAction.pm5
-rw-r--r--rt/lib/RT/ScripAction_Overlay.pm10
-rwxr-xr-xrt/lib/RT/ScripActions.pm5
-rw-r--r--rt/lib/RT/ScripActions_Overlay.pm10
-rwxr-xr-xrt/lib/RT/ScripCondition.pm5
-rw-r--r--rt/lib/RT/ScripCondition_Overlay.pm10
-rwxr-xr-xrt/lib/RT/ScripConditions.pm5
-rw-r--r--rt/lib/RT/ScripConditions_Overlay.pm10
-rw-r--r--rt/lib/RT/Scrip_Overlay.pm71
-rwxr-xr-xrt/lib/RT/Scrips.pm5
-rw-r--r--rt/lib/RT/Scrips_Overlay.pm30
-rwxr-xr-xrt/lib/RT/Search.pm148
-rw-r--r--rt/lib/RT/Search/ActiveTicketsInQueue.pm12
-rw-r--r--rt/lib/RT/Search/FromSQL.pm12
-rw-r--r--rt/lib/RT/Search/Generic.pm98
-rw-r--r--rt/lib/RT/Search/Googleish.pm51
-rw-r--r--rt/lib/RT/SearchBuilder.pm94
-rw-r--r--rt/lib/RT/SharedSetting.pm458
-rw-r--r--rt/lib/RT/Shredder.pm868
-rw-r--r--rt/lib/RT/Shredder/ACE.pm101
-rw-r--r--rt/lib/RT/Shredder/Attachment.pm136
-rw-r--r--rt/lib/RT/Shredder/CachedGroupMember.pm151
-rw-r--r--rt/lib/RT/Shredder/Constants.pm141
-rw-r--r--rt/lib/RT/Shredder/CustomField.pm126
-rw-r--r--rt/lib/RT/Shredder/CustomFieldValue.pm94
-rw-r--r--rt/lib/RT/Shredder/Dependencies.pm149
-rw-r--r--rt/lib/RT/Shredder/Dependency.pm112
-rw-r--r--rt/lib/RT/Shredder/Exceptions.pm113
-rw-r--r--rt/lib/RT/Shredder/Group.pm185
-rw-r--r--rt/lib/RT/Shredder/GroupMember.pm183
-rw-r--r--rt/lib/RT/Shredder/Link.pm140
-rw-r--r--rt/lib/RT/Shredder/ObjectCustomFieldValue.pm116
-rw-r--r--rt/lib/RT/Shredder/POD.pm131
-rw-r--r--rt/lib/RT/Shredder/Plugin.pm249
-rw-r--r--rt/lib/RT/Shredder/Plugin/Attachments.pm141
-rw-r--r--rt/lib/RT/Shredder/Plugin/Base.pm188
-rw-r--r--rt/lib/RT/Shredder/Plugin/Base/Dump.pm70
-rw-r--r--rt/lib/RT/Shredder/Plugin/Base/Search.pm142
-rw-r--r--rt/lib/RT/Shredder/Plugin/Objects.pm107
-rw-r--r--rt/lib/RT/Shredder/Plugin/SQLDump.pm96
-rw-r--r--rt/lib/RT/Shredder/Plugin/Summary.pm188
-rw-r--r--rt/lib/RT/Shredder/Plugin/Tickets.pm153
-rw-r--r--rt/lib/RT/Shredder/Plugin/Users.pm260
-rw-r--r--rt/lib/RT/Shredder/Principal.pm127
-rw-r--r--rt/lib/RT/Shredder/Queue.pm106
-rw-r--r--rt/lib/RT/Shredder/Record.pm273
-rw-r--r--rt/lib/RT/Shredder/Scrip.pm130
-rw-r--r--rt/lib/RT/Shredder/ScripAction.pm100
-rw-r--r--rt/lib/RT/Shredder/ScripCondition.pm101
-rw-r--r--rt/lib/RT/Shredder/Template.pm120
-rw-r--r--rt/lib/RT/Shredder/Ticket.pm126
-rw-r--r--rt/lib/RT/Shredder/Transaction.pm115
-rw-r--r--rt/lib/RT/Shredder/User.pm191
-rw-r--r--rt/lib/RT/StyleGuide.pod24
-rw-r--r--rt/lib/RT/System.pm103
-rwxr-xr-xrt/lib/RT/Template.pm5
-rw-r--r--rt/lib/RT/Template_Overlay.pm289
-rwxr-xr-xrt/lib/RT/Templates.pm5
-rw-r--r--rt/lib/RT/Templates_Overlay.pm10
-rw-r--r--rt/lib/RT/Test.pm1293
-rw-r--r--rt/lib/RT/Test/Email.pm131
-rw-r--r--rt/lib/RT/Test/Web.pm192
-rwxr-xr-xrt/lib/RT/Ticket.pm67
-rw-r--r--rt/lib/RT/Ticket_Overlay.pm1412
-rwxr-xr-xrt/lib/RT/Tickets.pm5
-rw-r--r--rt/lib/RT/Tickets_Overlay.pm1133
-rw-r--r--rt/lib/RT/Tickets_Overlay_SQL.pm534
-rwxr-xr-xrt/lib/RT/Transaction.pm5
-rw-r--r--rt/lib/RT/Transaction_Overlay.pm482
-rwxr-xr-xrt/lib/RT/Transactions.pm5
-rw-r--r--rt/lib/RT/Transactions_Overlay.pm36
-rw-r--r--rt/lib/RT/URI.pm40
-rw-r--r--rt/lib/RT/URI/base.pm5
-rw-r--r--rt/lib/RT/URI/fsck_com_rt.pm39
-rw-r--r--rt/lib/RT/URI/t.pm22
-rwxr-xr-xrt/lib/RT/User.pm5
-rw-r--r--rt/lib/RT/User_Overlay.pm1050
-rwxr-xr-xrt/lib/RT/Users.pm5
-rw-r--r--rt/lib/RT/Users_Overlay.pm84
-rw-r--r--rt/lib/RT/Util.pm89
-rw-r--r--rt/m4/rt_layout.m45
-rw-r--r--rt/sbin/extract-message-catalog141
-rw-r--r--rt/sbin/factory17
-rw-r--r--rt/sbin/license_tag51
-rw-r--r--rt/sbin/merge-rosetta.pl102
-rwxr-xr-xrt/sbin/rt-attributes-viewer110
-rw-r--r--rt/sbin/rt-attributes-viewer.in110
-rwxr-xr-xrt/sbin/rt-clean-sessions190
-rw-r--r--rt/sbin/rt-clean-sessions.in190
-rwxr-xr-xrt/sbin/rt-dump-database32
-rwxr-xr-xrt/sbin/rt-dump-database.in32
-rwxr-xr-xrt/sbin/rt-email-dashboards568
-rw-r--r--rt/sbin/rt-email-dashboards.in568
-rwxr-xr-xrt/sbin/rt-email-digest337
-rw-r--r--rt/sbin/rt-email-digest.in337
-rwxr-xr-xrt/sbin/rt-email-group-admin508
-rwxr-xr-xrt/sbin/rt-email-group-admin.in508
-rwxr-xr-xrt/sbin/rt-server129
-rw-r--r--rt/sbin/rt-server.in129
-rw-r--r--rt/sbin/rt-setup-database861
-rw-r--r--rt/sbin/rt-setup-database.in861
-rwxr-xr-xrt/sbin/rt-shredder323
-rwxr-xr-xrt/sbin/rt-shredder.in323
-rw-r--r--rt/sbin/rt-test-dependencies273
-rw-r--r--rt/sbin/rt-test-dependencies.in273
-rwxr-xr-xrt/sbin/rt-validator1118
-rw-r--r--rt/sbin/rt-validator.in1118
-rw-r--r--rt/sbin/tweak-template-locstring55
-rw-r--r--rt/share/html/Admin/CustomFields/GroupRights.html114
-rw-r--r--rt/share/html/Admin/CustomFields/Modify.html249
-rw-r--r--rt/share/html/Admin/CustomFields/Objects.html153
-rw-r--r--rt/share/html/Admin/CustomFields/UserRights.html110
-rw-r--r--rt/share/html/Admin/CustomFields/index.html108
-rwxr-xr-xrt/share/html/Admin/Elements/AddCustomFieldValue86
-rw-r--r--rt/share/html/Admin/Elements/ConfigureMyRT82
-rwxr-xr-xrt/share/html/Admin/Elements/CreateUserCalled50
-rw-r--r--rt/share/html/Admin/Elements/CustomFieldTabs118
-rwxr-xr-xrt/share/html/Admin/Elements/EditCustomField159
-rwxr-xr-xrt/share/html/Admin/Elements/EditCustomFieldValues104
-rw-r--r--rt/share/html/Admin/Elements/EditCustomFieldValuesSource82
-rwxr-xr-xrt/share/html/Admin/Elements/EditCustomFields205
-rwxr-xr-xrt/share/html/Admin/Elements/EditQueueWatchers78
-rwxr-xr-xrt/share/html/Admin/Elements/EditScrip197
-rwxr-xr-xrt/share/html/Admin/Elements/EditScrips124
-rwxr-xr-xrt/share/html/Admin/Elements/EditTemplates127
-rwxr-xr-xrt/share/html/Admin/Elements/EditUserComments56
-rwxr-xr-xrt/share/html/Admin/Elements/GlobalCustomFieldTabs105
-rwxr-xr-xrt/share/html/Admin/Elements/GroupTabs102
-rwxr-xr-xrt/share/html/Admin/Elements/Header52
-rwxr-xr-xrt/share/html/Admin/Elements/ListGlobalCustomFields61
-rwxr-xr-xrt/share/html/Admin/Elements/ListGlobalScrips71
-rwxr-xr-xrt/share/html/Admin/Elements/ModifyTemplate84
-rw-r--r--rt/share/html/Admin/Elements/ObjectCustomFields111
-rw-r--r--rt/share/html/Admin/Elements/PickCustomFields98
-rw-r--r--rt/share/html/Admin/Elements/PickObjects81
-rwxr-xr-xrt/share/html/Admin/Elements/QueueRightsForUser64
-rwxr-xr-xrt/share/html/Admin/Elements/QueueTabs123
-rw-r--r--rt/share/html/Admin/Elements/SelectCustomField71
-rw-r--r--rt/share/html/Admin/Elements/SelectCustomFieldLookupType60
-rwxr-xr-xrt/share/html/Admin/Elements/SelectCustomFieldType60
-rwxr-xr-xrt/share/html/Admin/Elements/SelectGroups62
-rwxr-xr-xrt/share/html/Admin/Elements/SelectModifyGroup57
-rwxr-xr-xrt/share/html/Admin/Elements/SelectModifyQueue57
-rwxr-xr-xrt/share/html/Admin/Elements/SelectModifyUser73
-rwxr-xr-xrt/share/html/Admin/Elements/SelectNewGroupMembers108
-rwxr-xr-xrt/share/html/Admin/Elements/SelectRights121
-rwxr-xr-xrt/share/html/Admin/Elements/SelectScrip72
-rwxr-xr-xrt/share/html/Admin/Elements/SelectScripAction73
-rwxr-xr-xrt/share/html/Admin/Elements/SelectScripCondition72
-rwxr-xr-xrt/share/html/Admin/Elements/SelectSingleOrMultiple67
-rw-r--r--rt/share/html/Admin/Elements/SelectStage75
-rwxr-xr-xrt/share/html/Admin/Elements/SelectTemplate87
-rwxr-xr-xrt/share/html/Admin/Elements/SelectUsers66
-rw-r--r--rt/share/html/Admin/Elements/ShowKeyInfo91
-rwxr-xr-xrt/share/html/Admin/Elements/SystemTabs102
-rwxr-xr-xrt/share/html/Admin/Elements/Tabs95
-rwxr-xr-xrt/share/html/Admin/Elements/ToolTabs82
-rwxr-xr-xrt/share/html/Admin/Elements/UserTabs116
-rw-r--r--rt/share/html/Admin/Global/CustomFields/Groups.html58
-rwxr-xr-xrt/share/html/Admin/Global/CustomFields/Queue-Tickets.html58
-rwxr-xr-xrt/share/html/Admin/Global/CustomFields/Queue-Transactions.html58
-rw-r--r--rt/share/html/Admin/Global/CustomFields/Queues.html58
-rw-r--r--rt/share/html/Admin/Global/CustomFields/Users.html58
-rw-r--r--rt/share/html/Admin/Global/CustomFields/index.html99
-rwxr-xr-xrt/share/html/Admin/Global/GroupRights.html123
-rw-r--r--rt/share/html/Admin/Global/MyRT.html112
-rwxr-xr-xrt/share/html/Admin/Global/Scrip.html86
-rwxr-xr-xrt/share/html/Admin/Global/Scrips.html77
-rwxr-xr-xrt/share/html/Admin/Global/Template.html123
-rwxr-xr-xrt/share/html/Admin/Global/Templates.html77
-rwxr-xr-xrt/share/html/Admin/Global/UserRights.html99
-rwxr-xr-xrt/share/html/Admin/Global/index.html86
-rw-r--r--rt/share/html/Admin/Groups/CustomFields.html48
-rwxr-xr-xrt/share/html/Admin/Groups/GroupRights.html119
-rw-r--r--rt/share/html/Admin/Groups/History.html68
-rwxr-xr-xrt/share/html/Admin/Groups/Members.html159
-rwxr-xr-xrt/share/html/Admin/Groups/Modify.html178
-rwxr-xr-xrt/share/html/Admin/Groups/UserRights.html112
-rwxr-xr-xrt/share/html/Admin/Groups/index.html129
-rwxr-xr-xrt/share/html/Admin/Queues/CustomField.html87
-rwxr-xr-xrt/share/html/Admin/Queues/CustomFields.html72
-rwxr-xr-xrt/share/html/Admin/Queues/GroupRights.html134
-rw-r--r--rt/share/html/Admin/Queues/History.html68
-rwxr-xr-xrt/share/html/Admin/Queues/Modify.html214
-rwxr-xr-xrt/share/html/Admin/Queues/People.html215
-rwxr-xr-xrt/share/html/Admin/Queues/Scrip.html99
-rwxr-xr-xrt/share/html/Admin/Queues/Scrips.html87
-rwxr-xr-xrt/share/html/Admin/Queues/Template.html132
-rwxr-xr-xrt/share/html/Admin/Queues/Templates.html81
-rwxr-xr-xrt/share/html/Admin/Queues/UserRights.html112
-rwxr-xr-xrt/share/html/Admin/Queues/index.html126
-rw-r--r--rt/share/html/Admin/Tools/Configuration.html170
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Dumps/dhandler68
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink61
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights55
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage59
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment53
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket53
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User53
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox66
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments62
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp75
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects67
-rw-r--r--rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin73
-rw-r--r--rt/share/html/Admin/Tools/Shredder/autohandler60
-rw-r--r--rt/share/html/Admin/Tools/Shredder/index.html186
-rw-r--r--rt/share/html/Admin/Tools/index.html55
-rw-r--r--rt/share/html/Admin/Users/CustomFields.html71
-rw-r--r--rt/share/html/Admin/Users/GnuPG.html112
-rw-r--r--rt/share/html/Admin/Users/History.html68
-rw-r--r--rt/share/html/Admin/Users/Memberships.html143
-rwxr-xr-xrt/share/html/Admin/Users/Modify.html437
-rw-r--r--rt/share/html/Admin/Users/MyRT.html134
-rwxr-xr-xrt/share/html/Admin/Users/index.html135
-rw-r--r--rt/share/html/Admin/autohandler55
-rwxr-xr-xrt/share/html/Admin/index.html95
-rwxr-xr-xrt/share/html/Approvals/Display.html72
-rwxr-xr-xrt/share/html/Approvals/Elements/Approve94
-rwxr-xr-xrt/share/html/Approvals/Elements/PendingMyApproval111
-rwxr-xr-xrt/share/html/Approvals/Elements/ShowDependency109
-rwxr-xr-xrt/share/html/Approvals/Elements/Tabs58
-rw-r--r--rt/share/html/Approvals/autohandler53
-rwxr-xr-xrt/share/html/Approvals/index.html90
-rw-r--r--rt/share/html/Dashboards/Elements/DashboardsForObject81
-rw-r--r--rt/share/html/Dashboards/Elements/DashboardsForObjects81
-rw-r--r--rt/share/html/Dashboards/Elements/Deleted62
-rw-r--r--rt/share/html/Dashboards/Elements/HiddenSearches79
-rw-r--r--rt/share/html/Dashboards/Elements/ListOfDashboards19
-rw-r--r--rt/share/html/Dashboards/Elements/SelectPrivacy64
-rw-r--r--rt/share/html/Dashboards/Elements/ShowDashboards112
-rw-r--r--rt/share/html/Dashboards/Elements/ShowPortlet/component54
-rw-r--r--rt/share/html/Dashboards/Elements/ShowPortlet/dashboard89
-rw-r--r--rt/share/html/Dashboards/Elements/ShowPortlet/search63
-rw-r--r--rt/share/html/Dashboards/Elements/ShowSubscription75
-rwxr-xr-xrt/share/html/Dashboards/Elements/Tabs113
-rwxr-xr-xrt/share/html/Dashboards/Modify.html168
-rw-r--r--rt/share/html/Dashboards/Queries.html280
-rw-r--r--rt/share/html/Dashboards/Render.html143
-rw-r--r--rt/share/html/Dashboards/Subscription.html292
-rw-r--r--rt/share/html/Dashboards/dhandler56
-rw-r--r--rt/share/html/Dashboards/index.html107
-rw-r--r--rt/share/html/Download/CustomFieldValue/dhandler77
-rw-r--r--rt/share/html/Download/Tabular/dhandler76
-rwxr-xr-xrt/share/html/Elements/BevelBoxRaisedEnd50
-rwxr-xr-xrt/share/html/Elements/BevelBoxRaisedStart50
-rwxr-xr-xrt/share/html/Elements/Callback53
-rwxr-xr-xrt/share/html/Elements/Checkbox63
-rw-r--r--rt/share/html/Elements/CollectionAsTable/Header142
-rw-r--r--rt/share/html/Elements/CollectionAsTable/ParseFormat108
-rw-r--r--rt/share/html/Elements/CollectionAsTable/Row143
-rw-r--r--rt/share/html/Elements/CollectionList175
-rw-r--r--rt/share/html/Elements/CollectionListPaging108
-rw-r--r--rt/share/html/Elements/ColumnMap151
-rwxr-xr-xrt/share/html/Elements/CreateTicket50
-rw-r--r--rt/share/html/Elements/DashboardTabs52
-rw-r--r--rt/share/html/Elements/Dashboards66
-rw-r--r--rt/share/html/Elements/EditCustomField116
-rw-r--r--rt/share/html/Elements/EditCustomFieldAutocomplete88
-rw-r--r--rt/share/html/Elements/EditCustomFieldBinary62
-rw-r--r--rt/share/html/Elements/EditCustomFieldCombobox69
-rw-r--r--rt/share/html/Elements/EditCustomFieldFreeform71
-rw-r--r--rt/share/html/Elements/EditCustomFieldImage62
-rw-r--r--rt/share/html/Elements/EditCustomFieldSelect161
-rw-r--r--rt/share/html/Elements/EditCustomFieldText67
-rw-r--r--rt/share/html/Elements/EditCustomFieldWikitext67
-rwxr-xr-xrt/share/html/Elements/EditLinks178
-rw-r--r--rt/share/html/Elements/EditTimeValue65
-rw-r--r--rt/share/html/Elements/EmailInput53
-rwxr-xr-xrt/share/html/Elements/Error90
-rwxr-xr-xrt/share/html/Elements/Footer84
-rw-r--r--rt/share/html/Elements/GnuPG/KeyIssues92
-rw-r--r--rt/share/html/Elements/GnuPG/SelectKeyForEncryption81
-rw-r--r--rt/share/html/Elements/GnuPG/SelectKeyForSigning64
-rw-r--r--rt/share/html/Elements/GnuPG/SignEncryptWidget184
-rwxr-xr-xrt/share/html/Elements/GotoTicket50
-rwxr-xr-xrt/share/html/Elements/Header118
-rw-r--r--rt/share/html/Elements/HeaderJavascript122
-rwxr-xr-xrt/share/html/Elements/ListActions94
-rw-r--r--rt/share/html/Elements/ListMenu58
-rwxr-xr-xrt/share/html/Elements/Login139
-rw-r--r--rt/share/html/Elements/Logo66
-rw-r--r--rt/share/html/Elements/Logout65
-rw-r--r--rt/share/html/Elements/MakeClicky207
-rwxr-xr-xrt/share/html/Elements/Menu139
-rwxr-xr-xrt/share/html/Elements/MessageBox82
-rw-r--r--rt/share/html/Elements/MyAdminQueues54
-rw-r--r--rt/share/html/Elements/MyRT106
-rwxr-xr-xrt/share/html/Elements/MyReminders74
-rwxr-xr-xrt/share/html/Elements/MyRequests49
-rw-r--r--rt/share/html/Elements/MySupportQueues60
-rwxr-xr-xrt/share/html/Elements/MyTickets49
-rwxr-xr-xrt/share/html/Elements/PageLayout251
-rw-r--r--rt/share/html/Elements/PersonalQuickbar16
-rw-r--r--rt/share/html/Elements/QueryString64
-rw-r--r--rt/share/html/Elements/QueueSummary108
-rw-r--r--rt/share/html/Elements/QuickCreate77
-rwxr-xr-xrt/share/html/Elements/Quicksearch65
-rw-r--r--rt/share/html/Elements/RT__Group/ColumnMap92
-rw-r--r--rt/share/html/Elements/RT__Queue/ColumnMap115
-rw-r--r--rt/share/html/Elements/RT__Scrip/ColumnMap103
-rw-r--r--rt/share/html/Elements/RT__Template/ColumnMap76
-rw-r--r--rt/share/html/Elements/RT__Ticket/ColumnMap355
-rw-r--r--rt/share/html/Elements/RT__User/ColumnMap141
-rwxr-xr-xrt/share/html/Elements/Refresh69
-rw-r--r--rt/share/html/Elements/RefreshHomepage54
-rw-r--r--rt/share/html/Elements/ScrubHTML77
-rwxr-xr-xrt/share/html/Elements/Section51
-rwxr-xr-xrt/share/html/Elements/SelectAttachmentField56
-rwxr-xr-xrt/share/html/Elements/SelectBoolean71
-rwxr-xr-xrt/share/html/Elements/SelectCustomFieldOperator64
-rwxr-xr-xrt/share/html/Elements/SelectCustomFieldValue65
-rwxr-xr-xrt/share/html/Elements/SelectDate77
-rwxr-xr-xrt/share/html/Elements/SelectDateRelation60
-rwxr-xr-xrt/share/html/Elements/SelectDateType60
-rwxr-xr-xrt/share/html/Elements/SelectEqualityOperator64
-rwxr-xr-xrt/share/html/Elements/SelectGroups68
-rwxr-xr-xrt/share/html/Elements/SelectLang80
-rwxr-xr-xrt/share/html/Elements/SelectLinkType57
-rwxr-xr-xrt/share/html/Elements/SelectMatch82
-rwxr-xr-xrt/share/html/Elements/SelectNewTicketQueue50
-rwxr-xr-xrt/share/html/Elements/SelectOwner133
-rw-r--r--rt/share/html/Elements/SelectPriority8
-rwxr-xr-xrt/share/html/Elements/SelectQueue106
-rwxr-xr-xrt/share/html/Elements/SelectResultsPerPage68
-rwxr-xr-xrt/share/html/Elements/SelectSortOrder65
-rwxr-xr-xrt/share/html/Elements/SelectStatus67
-rwxr-xr-xrt/share/html/Elements/SelectTicketSortBy62
-rwxr-xr-xrt/share/html/Elements/SelectTicketTypes58
-rwxr-xr-xrt/share/html/Elements/SelectTimeUnits62
-rw-r--r--rt/share/html/Elements/SelectTimezone84
-rwxr-xr-xrt/share/html/Elements/SelectUsers68
-rwxr-xr-xrt/share/html/Elements/SelectWatcherType71
-rwxr-xr-xrt/share/html/Elements/SetupSessionCookie57
-rw-r--r--rt/share/html/Elements/ShowCustomFieldBinary51
-rw-r--r--rt/share/html/Elements/ShowCustomFieldImage53
-rw-r--r--rt/share/html/Elements/ShowCustomFieldText56
-rw-r--r--rt/share/html/Elements/ShowCustomFieldWikitext58
-rw-r--r--rt/share/html/Elements/ShowCustomFields123
-rw-r--r--rt/share/html/Elements/ShowLink69
-rwxr-xr-xrt/share/html/Elements/ShowLinks160
-rw-r--r--rt/share/html/Elements/ShowMemberships88
-rw-r--r--rt/share/html/Elements/ShowSearch151
-rw-r--r--rt/share/html/Elements/ShowUser69
-rw-r--r--rt/share/html/Elements/ShowUserConcise52
-rw-r--r--rt/share/html/Elements/ShowUserEmailFrequency56
-rw-r--r--rt/share/html/Elements/ShowUserVerbose73
-rwxr-xr-xrt/share/html/Elements/SimpleSearch53
-rwxr-xr-xrt/share/html/Elements/Submit103
-rwxr-xr-xrt/share/html/Elements/Tabs128
-rw-r--r--rt/share/html/Elements/TicketList70
-rw-r--r--rt/share/html/Elements/TitleBox51
-rw-r--r--rt/share/html/Elements/TitleBoxEnd51
-rw-r--r--rt/share/html/Elements/TitleBoxStart51
-rw-r--r--rt/share/html/Elements/ValidateCustomFields100
-rw-r--r--rt/share/html/Helpers/Autocomplete/CustomFieldValues81
-rw-r--r--rt/share/html/Helpers/CalPopup.html133
-rw-r--r--rt/share/html/Helpers/Toggle/TicketBookmark54
-rw-r--r--rt/share/html/Install/Basics.html104
-rw-r--r--rt/share/html/Install/DatabaseDetails.html201
-rw-r--r--rt/share/html/Install/DatabaseType.html90
-rw-r--r--rt/share/html/Install/Elements/Errors63
-rw-r--r--rt/share/html/Install/Elements/Wrapper66
-rw-r--r--rt/share/html/Install/Finish.html95
-rw-r--r--rt/share/html/Install/Global.html121
-rw-r--r--rt/share/html/Install/Initialize.html142
-rw-r--r--rt/share/html/Install/Sendmail.html107
-rw-r--r--rt/share/html/Install/autohandler67
-rw-r--r--rt/share/html/Install/index.html142
-rwxr-xr-xrt/share/html/NoAuth/Logout.html79
-rwxr-xr-xrt/share/html/NoAuth/Reminder.html50
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckcontextmenu.js223
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdataprocessor.js119
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_gecko.js53
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_ie.js58
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange.js935
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_gecko.js104
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_ie.js199
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrangeiterator.js327
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckeditingarea.js368
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckelementpath.js89
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckenterkey.js708
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckevents.js71
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckhtmliterator.js142
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckicon.js103
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckiecleanup.js68
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckimagepreloader.js64
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckkeystrokehandler.js141
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublock.js153
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublockpanel.js54
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenuitem.js161
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckpanel.js463
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckplugin.js56
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckspecialcombo.js376
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckstyle.js1500
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbar.js103
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_gecko.js36
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_ie.js38
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbutton.js81
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbuttonui.js198
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontformatcombo.js139
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontscombo.js98
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontsizecombo.js76
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarpanelbutton.js103
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarspecialcombo.js146
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarstylecombo.js200
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckw3crange.js451
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml.js108
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_gecko.js106
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_ie.js93
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fck_othercommands.js634
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckblockquotecommand.js281
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckcorestylecommand.js61
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js213
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckindentcommands.js282
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckjustifycommands.js173
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcklistcommands.js382
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcknamedcommand.js39
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js40
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpastewordcommand.js40
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckremoveformatcommand.js45
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckshowblocks.js94
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js49
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js72
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckstylecommand.js60
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktablecommand.js106
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktextcolorcommand.js201
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckconstants.js56
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckeditorapi.js179
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckjscoreextensions.js159
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckscriptloader.js122
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck.js1256
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_contextmenu.js345
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_gecko.js497
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_ie.js456
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckbrowserinfo.js61
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcodeformatter.js100
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcommands.js172
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckconfig.js237
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug.js59
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug_empty.js31
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdialog.js239
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdocumentprocessor.js270
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdomtools.js1057
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklanguagemanager.js165
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklisthandler.js152
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklistslib.js63
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckplugins.js46
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckregexlib.js100
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection.js42
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_gecko.js228
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_ie.js287
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckstyles.js381
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler.js863
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_gecko.js56
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_ie.js64
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbaritems.js124
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbarset.js399
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools.js749
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_gecko.js282
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_ie.js234
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckundo.js223
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckurlparams.js39
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_gecko.js114
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_ie.js213
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtmlentities.js357
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/disablehandles.htc15
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/showtableborders.htc36
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_editorarea.css110
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_internal.css199
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_showtableborders_gecko.css49
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_address.pngbin0 -> 288 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_blockquote.pngbin0 -> 293 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_div.pngbin0 -> 229 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h1.pngbin0 -> 218 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h2.pngbin0 -> 220 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h3.pngbin0 -> 219 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h4.pngbin0 -> 229 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h5.pngbin0 -> 236 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h6.pngbin0 -> 216 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_p.pngbin0 -> 205 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_pre.pngbin0 -> 223 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_anchor.gifbin0 -> 184 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_flashlogo.gifbin0 -> 599 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_hiddenfield.gifbin0 -> 105 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_pagebreak.gifbin0 -> 54 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_plugin.gifbin0 -> 1709 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.css85
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.js347
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/locked.gifbin0 -> 74 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/reset.gifbin0 -> 104 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/unlocked.gifbin0 -> 75 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about.html161
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fckeditor.gifbin0 -> 2044 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fredck.gifbin0 -> 920 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gifbin0 -> 1447 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_anchor.html220
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_button.html104
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_checkbox.html104
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_colorselector.html172
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_div.html396
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops.html600
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops/fck_document_preview.html113
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash.html152
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash.js300
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash_preview.html50
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_form.html109
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_hiddenfield.html115
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image.html258
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image.js512
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image_preview.html72
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link.html295
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link/fck_link.js893
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_listprop.html120
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_paste.html347
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_radiobutton.html104
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_replace.html650
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select.html180
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select/fck_select.js194
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_smiley.html111
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_source.html68
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_specialchar.html121
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages.html70
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html0
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js87
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html153
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm148
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php199
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl181
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js461
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html71
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css49
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js272
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_table.html439
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_tablecell.html293
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template.html242
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template1.gifbin0 -> 375 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template2.gifbin0 -> 333 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template3.gifbin0 -> 422 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textarea.html94
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textfield.html136
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_dtd_test.html41
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10strict.js116
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10transitional.js140
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdebug.html153
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdialog.html819
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.html317
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.original.html424
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/anchor.gifbin0 -> 184 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_ltr.gifbin0 -> 49 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_rtl.gifbin0 -> 49 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angel_smile.gifbin0 -> 445 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angry_smile.gifbin0 -> 453 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/broken_heart.gifbin0 -> 423 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cake.gifbin0 -> 453 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/confused_smile.gifbin0 -> 322 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cry_smile.gifbin0 -> 473 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/devil_smile.gifbin0 -> 444 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/embaressed_smile.gifbin0 -> 1077 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/envelope.gifbin0 -> 1030 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/heart.gifbin0 -> 1012 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/kiss.gifbin0 -> 978 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/lightbulb.gifbin0 -> 303 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/omg_smile.gifbin0 -> 342 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/regular_smile.gifbin0 -> 1036 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/sad_smile.gifbin0 -> 1039 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/shades_smile.gifbin0 -> 1059 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/teeth_smile.gifbin0 -> 1064 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_down.gifbin0 -> 992 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_up.gifbin0 -> 989 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/tounge_smile.gifbin0 -> 1055 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gifbin0 -> 1034 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/wink_smile.gifbin0 -> 1041 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/images/spacer.gifbin0 -> 43 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckadobeair.js176
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_gecko.js108
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_ie.js109
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/_translationstatus.txt79
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/af.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ar.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bg.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bn.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bs.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ca.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/cs.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/da.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/de.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/el.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-au.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-ca.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-uk.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eo.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/es.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/et.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eu.js535
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fa.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fi.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fo.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr-ca.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gl.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gu.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/he.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hi.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hr.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hu.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/is.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/it.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ja.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/km.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ko.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lt.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lv.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/mn.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ms.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nb.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nl.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/no.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pl.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt-br.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ro.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ru.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sk.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sl.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr-latn.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sv.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/th.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/tr.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/uk.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/vi.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh-cn.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh.js534
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/autogrow/fckplugin.js111
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.config.js26
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.html67
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/fckplugin.js123
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/dragresizetable/fckplugin.js529
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fck_placeholder.html105
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fckplugin.js187
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/de.js27
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/en.js27
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/es.js27
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/fr.js27
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/it.js27
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/pl.js27
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/placeholder.gifbin0 -> 96 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/simplecommands/fckplugin.js29
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/tablecommands/fckplugin.js33
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/_fckviewstrips.html121
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog.css402
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog_ie6.js110
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_editor.css464
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_strip.gifbin0 -> 5175 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.gifbin0 -> 48 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.pngbin0 -> 178 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.rtl.pngbin0 -> 181 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.gifbin0 -> 959 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.pngbin0 -> 3250 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.arrowright.gifbin0 -> 53 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gifbin0 -> 46 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.collapse.gifbin0 -> 152 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.end.gifbin0 -> 43 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.expand.gifbin0 -> 152 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.separator.gifbin0 -> 58 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.start.gifbin0 -> 105 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog.css402
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog_ie6.js110
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_editor.css476
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_strip.gifbin0 -> 9668 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.gifbin0 -> 48 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.pngbin0 -> 203 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.rtl.pngbin0 -> 205 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.gifbin0 -> 959 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.pngbin0 -> 3305 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.arrowright.gifbin0 -> 53 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.bg.gifbin0 -> 73 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.buttonarrow.gifbin0 -> 46 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.collapse.gifbin0 -> 152 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.end.gifbin0 -> 124 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.expand.gifbin0 -> 152 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.separator.gifbin0 -> 67 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.start.gifbin0 -> 99 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog.css402
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog_ie6.js110
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_editor.css473
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_strip.gifbin0 -> 5175 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.gifbin0 -> 48 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.pngbin0 -> 198 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.rtl.pngbin0 -> 200 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.gifbin0 -> 959 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.pngbin0 -> 3278 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.arrowright.gifbin0 -> 53 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonarrow.gifbin0 -> 46 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonbg.gifbin0 -> 829 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.collapse.gifbin0 -> 152 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.end.gifbin0 -> 43 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.expand.gifbin0 -> 152 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.separator.gifbin0 -> 58 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.start.gifbin0 -> 105 bytes
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/ciframe.html65
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/tmpFrameset.html67
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/w.html227
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/fckconfig.js327
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/fckeditor.js330
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/fckpackager.xml262
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/fckstyles.xml111
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/fcktemplates.xml103
-rw-r--r--rt/share/html/NoAuth/RichText/FCKeditor/license.txt1246
-rw-r--r--rt/share/html/NoAuth/RichText/dhandler69
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/body.css75
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/footer.css61
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/forms.css110
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/header.css88
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/login.css54
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/main.css75
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/misc.css78
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/nav.css106
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/quickbar.css82
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/ticket.css50
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/titlebox.css103
-rw-r--r--rt/share/html/NoAuth/css/3.4-compat/transactions.css83
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/approvals.css97
-rwxr-xr-xrt/share/html/NoAuth/css/3.5-default/body.css81
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/footer.css91
-rwxr-xr-xrt/share/html/NoAuth/css/3.5-default/forms.css148
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/header.css152
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/local.css50
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/login.css85
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/logo.css60
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/main.css67
-rwxr-xr-xrt/share/html/NoAuth/css/3.5-default/misc.css125
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/nav-left.css86
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/nav.css163
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/quickbar.css98
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/ticket-search.css86
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/ticket.css57
-rw-r--r--rt/share/html/NoAuth/css/3.5-default/titlebox.css162
-rwxr-xr-xrt/share/html/NoAuth/css/3.5-default/transactions.css146
-rw-r--r--rt/share/html/NoAuth/css/autohandler59
-rw-r--r--rt/share/html/NoAuth/css/dhandler77
-rw-r--r--rt/share/html/NoAuth/css/print.css94
-rw-r--r--rt/share/html/NoAuth/css/web2/InHeader54
-rw-r--r--rt/share/html/NoAuth/css/web2/admin.css60
-rw-r--r--rt/share/html/NoAuth/css/web2/base.css70
-rw-r--r--rt/share/html/NoAuth/css/web2/boxes.css192
-rwxr-xr-xrt/share/html/NoAuth/css/web2/forms.css242
-rw-r--r--rt/share/html/NoAuth/css/web2/images/dhandler8
-rw-r--r--rt/share/html/NoAuth/css/web2/images/source/background-gradient.pngbin0 -> 394 bytes
-rw-r--r--rt/share/html/NoAuth/css/web2/layout.css234
-rw-r--r--rt/share/html/NoAuth/css/web2/login.css82
-rw-r--r--rt/share/html/NoAuth/css/web2/main.css68
-rw-r--r--rt/share/html/NoAuth/css/web2/misc.css108
-rw-r--r--rt/share/html/NoAuth/css/web2/msie.css239
-rw-r--r--rt/share/html/NoAuth/css/web2/msie6.css88
-rw-r--r--rt/share/html/NoAuth/css/web2/nav.css203
-rw-r--r--rt/share/html/NoAuth/css/web2/portlets.css65
-rw-r--r--rt/share/html/NoAuth/css/web2/ticket-lists.css172
-rw-r--r--rt/share/html/NoAuth/css/web2/ticket-search.css199
-rw-r--r--rt/share/html/NoAuth/css/web2/ticket.css230
-rw-r--r--rt/share/html/NoAuth/css/web2/tools.css56
-rw-r--r--rt/share/html/NoAuth/css/web2/yui-fonts.css7
-rw-r--r--rt/share/html/NoAuth/iCal/dhandler122
-rw-r--r--rt/share/html/NoAuth/images/autohandler7
-rwxr-xr-xrt/share/html/NoAuth/images/bplogo.gifbin0 -> 755 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/cb-light.gifbin0 -> 186 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/cb.gifbin0 -> 163 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/cbr-b2g.gifbin0 -> 135 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/cbr-b2lb.gifbin0 -> 137 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/cbr-gray.gifbin0 -> 137 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/cbr-trans.gifbin0 -> 183 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/cbr.gifbin0 -> 188 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/ct-light.gifbin0 -> 162 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/ct.gifbin0 -> 162 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/ctr-b2g.gifbin0 -> 136 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/ctr-b2lb.gifbin0 -> 114 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/ctr-gray.gifbin0 -> 138 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/ctr-trans.gifbin0 -> 182 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/ctr.gifbin0 -> 188 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/dark-arrow-up.pngbin0 -> 346 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/dark-arrow.pngbin0 -> 337 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/fieldbg-autocomplete.gifbin0 -> 1164 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/light-arrow-up.pngbin0 -> 348 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/light-arrow.pngbin0 -> 340 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/rolldown-arrow.gifbin0 -> 83 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/rolldown-arrow.pngbin0 -> 259 bytes
-rw-r--r--rt/share/html/NoAuth/images/css/rollup-arrow.gifbin0 -> 82 bytes
-rw-r--r--rt/share/html/NoAuth/images/empty_star.gifbin0 -> 914 bytes
-rwxr-xr-xrt/share/html/NoAuth/images/favicon.pngbin0 -> 335 bytes
-rw-r--r--rt/share/html/NoAuth/images/star.gifbin0 -> 161 bytes
-rw-r--r--rt/share/html/NoAuth/images/test.png2
-rw-r--r--rt/share/html/NoAuth/js/IE7/IE7.js2
-rw-r--r--rt/share/html/NoAuth/js/IE7/IE8.js2
-rw-r--r--rt/share/html/NoAuth/js/IE7/blank.gifbin0 -> 48 bytes
-rw-r--r--rt/share/html/NoAuth/js/IE7/ie7-recalc.js2
-rw-r--r--rt/share/html/NoAuth/js/IE7/ie7-squish.js36
-rw-r--r--rt/share/html/NoAuth/js/ahah.js48
-rw-r--r--rt/share/html/NoAuth/js/autohandler61
-rw-r--r--rt/share/html/NoAuth/js/cascaded.js102
-rw-r--r--rt/share/html/NoAuth/js/class.js15
-rw-r--r--rt/share/html/NoAuth/js/combobox.js262
-rw-r--r--rt/share/html/NoAuth/js/list.js112
-rw-r--r--rt/share/html/NoAuth/js/prototype/prototype.js4320
-rw-r--r--rt/share/html/NoAuth/js/scriptaculous/controls.js971
-rw-r--r--rt/share/html/NoAuth/js/scriptaculous/effects.js1130
-rw-r--r--rt/share/html/NoAuth/js/scriptaculous/scriptaculous.js60
-rw-r--r--rt/share/html/NoAuth/js/titlebox-state.js83
-rw-r--r--rt/share/html/NoAuth/js/util.js317
-rw-r--r--rt/share/html/Prefs/Elements/Tabs76
-rw-r--r--rt/share/html/Prefs/MyRT.html157
-rw-r--r--rt/share/html/Prefs/Other.html111
-rw-r--r--rt/share/html/Prefs/Quicksearch.html97
-rw-r--r--rt/share/html/Prefs/Search.html111
-rw-r--r--rt/share/html/Prefs/SearchOptions.html111
-rw-r--r--rt/share/html/REST/1.0/Forms/attachment/default102
-rw-r--r--rt/share/html/REST/1.0/Forms/group/customfields96
-rw-r--r--rt/share/html/REST/1.0/Forms/group/default203
-rw-r--r--rt/share/html/REST/1.0/Forms/group/ns62
-rw-r--r--rt/share/html/REST/1.0/Forms/queue/customfields96
-rwxr-xr-xrt/share/html/REST/1.0/Forms/queue/default186
-rwxr-xr-xrt/share/html/REST/1.0/Forms/queue/ns62
-rw-r--r--rt/share/html/REST/1.0/Forms/queue/ticketcustomfields97
-rwxr-xr-xrt/share/html/REST/1.0/Forms/ticket/attachments135
-rwxr-xr-xrt/share/html/REST/1.0/Forms/ticket/comment152
-rwxr-xr-xrt/share/html/REST/1.0/Forms/ticket/default447
-rwxr-xr-xrt/share/html/REST/1.0/Forms/ticket/history205
-rwxr-xr-xrt/share/html/REST/1.0/Forms/ticket/links172
-rwxr-xr-xrt/share/html/REST/1.0/Forms/ticket/merge96
-rwxr-xr-xrt/share/html/REST/1.0/Forms/ticket/take135
-rw-r--r--rt/share/html/REST/1.0/Forms/transaction/default143
-rwxr-xr-xrt/share/html/REST/1.0/Forms/user/default188
-rwxr-xr-xrt/share/html/REST/1.0/Forms/user/ns65
-rwxr-xr-xrt/share/html/REST/1.0/NoAuth/mail-gateway84
-rwxr-xr-xrt/share/html/REST/1.0/autohandler56
-rwxr-xr-xrt/share/html/REST/1.0/dhandler326
-rwxr-xr-xrt/share/html/REST/1.0/logout51
-rwxr-xr-xrt/share/html/REST/1.0/search/dhandler56
-rwxr-xr-xrt/share/html/REST/1.0/search/ticket159
-rwxr-xr-xrt/share/html/REST/1.0/ticket/comment177
-rwxr-xr-xrt/share/html/REST/1.0/ticket/link123
-rwxr-xr-xrt/share/html/REST/1.0/ticket/merge102
-rw-r--r--rt/share/html/Search/Build.html323
-rwxr-xr-xrt/share/html/Search/Bulk.html446
-rw-r--r--rt/share/html/Search/Chart186
-rw-r--r--rt/share/html/Search/Chart.html98
-rwxr-xr-xrt/share/html/Search/Edit.html99
-rw-r--r--rt/share/html/Search/Elements/BuildFormatString250
-rw-r--r--rt/share/html/Search/Elements/Chart147
-rw-r--r--rt/share/html/Search/Elements/ConditionRow97
-rw-r--r--rt/share/html/Search/Elements/DisplayOptions134
-rw-r--r--rt/share/html/Search/Elements/EditFormat113
-rw-r--r--rt/share/html/Search/Elements/EditQuery243
-rw-r--r--rt/share/html/Search/Elements/EditSearches296
-rw-r--r--rt/share/html/Search/Elements/Graph50
-rw-r--r--rt/share/html/Search/Elements/NewListActions66
-rw-r--r--rt/share/html/Search/Elements/PickBasics214
-rw-r--r--rt/share/html/Search/Elements/PickCFs104
-rw-r--r--rt/share/html/Search/Elements/PickCriteria72
-rw-r--r--rt/share/html/Search/Elements/ResultViews80
-rw-r--r--rt/share/html/Search/Elements/SearchPrivacy55
-rw-r--r--rt/share/html/Search/Elements/SearchesForObject65
-rw-r--r--rt/share/html/Search/Elements/SelectAndOr53
-rw-r--r--rt/share/html/Search/Elements/SelectChartType58
-rw-r--r--rt/share/html/Search/Elements/SelectGroup67
-rw-r--r--rt/share/html/Search/Elements/SelectGroupBy63
-rw-r--r--rt/share/html/Search/Elements/SelectLinks66
-rw-r--r--rt/share/html/Search/Elements/SelectPersonType84
-rw-r--r--rt/share/html/Search/Elements/SelectSearchObject68
-rw-r--r--rt/share/html/Search/Elements/SelectSearchesForObjects69
-rw-r--r--rt/share/html/Search/Graph.html50
-rwxr-xr-xrt/share/html/Search/Results.html201
-rw-r--r--rt/share/html/Search/Results.rdf103
-rw-r--r--rt/share/html/Search/Results.tsv162
-rw-r--r--rt/share/html/Search/Simple.html106
-rwxr-xr-xrt/share/html/SelfService/Attachment/dhandler51
-rwxr-xr-xrt/share/html/SelfService/Closed.html60
-rwxr-xr-xrt/share/html/SelfService/Create.html149
-rwxr-xr-xrt/share/html/SelfService/CreateTicketInQueue.html63
-rwxr-xr-xrt/share/html/SelfService/Display.html233
-rwxr-xr-xrt/share/html/SelfService/Elements/GotoTicket50
-rwxr-xr-xrt/share/html/SelfService/Elements/Header49
-rwxr-xr-xrt/share/html/SelfService/Elements/MyRequests87
-rwxr-xr-xrt/share/html/SelfService/Elements/Tabs113
-rwxr-xr-xrt/share/html/SelfService/Error.html71
-rwxr-xr-xrt/share/html/SelfService/Prefs.html92
-rwxr-xr-xrt/share/html/SelfService/Update.html133
-rwxr-xr-xrt/share/html/SelfService/index.html57
-rw-r--r--rt/share/html/Ticket/Attachment/WithHeaders/dhandler80
-rwxr-xr-xrt/share/html/Ticket/Attachment/dhandler93
-rwxr-xr-xrt/share/html/Ticket/Create.html430
-rwxr-xr-xrt/share/html/Ticket/Display.html207
-rwxr-xr-xrt/share/html/Ticket/Elements/AddWatchers140
-rw-r--r--rt/share/html/Ticket/Elements/Bookmark93
-rwxr-xr-xrt/share/html/Ticket/Elements/BulkLinks195
-rwxr-xr-xrt/share/html/Ticket/Elements/EditBasics130
-rwxr-xr-xrt/share/html/Ticket/Elements/EditCustomFields108
-rwxr-xr-xrt/share/html/Ticket/Elements/EditDates77
-rwxr-xr-xrt/share/html/Ticket/Elements/EditPeople93
-rw-r--r--rt/share/html/Ticket/Elements/EditTransactionCustomFields81
-rwxr-xr-xrt/share/html/Ticket/Elements/EditWatchers79
-rw-r--r--rt/share/html/Ticket/Elements/FindAttachments95
-rw-r--r--rt/share/html/Ticket/Elements/LoadTextAttachments93
-rwxr-xr-xrt/share/html/Ticket/Elements/PreviewScrips235
-rw-r--r--rt/share/html/Ticket/Elements/Reminders178
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowAttachments104
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowBasics87
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowCustomFields51
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowDates91
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowDependencies65
-rw-r--r--rt/share/html/Ticket/Elements/ShowGnuPGStatus177
-rw-r--r--rt/share/html/Ticket/Elements/ShowGroupMembers65
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowHistory171
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowMembers69
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowMessageHeaders91
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowMessageStanza110
-rw-r--r--rt/share/html/Ticket/Elements/ShowParents63
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowPeople72
-rw-r--r--rt/share/html/Ticket/Elements/ShowPriority51
-rw-r--r--rt/share/html/Ticket/Elements/ShowQueue56
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowRequestor105
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowSummary117
-rw-r--r--rt/share/html/Ticket/Elements/ShowTime59
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowTransaction216
-rw-r--r--rt/share/html/Ticket/Elements/ShowTransactionAttachments252
-rw-r--r--rt/share/html/Ticket/Elements/ShowUpdateStatus64
-rw-r--r--rt/share/html/Ticket/Elements/ShowUserEntry56
-rwxr-xr-xrt/share/html/Ticket/Elements/Tabs341
-rw-r--r--rt/share/html/Ticket/Elements/UpdateCc80
-rw-r--r--rt/share/html/Ticket/Forward.html123
-rw-r--r--rt/share/html/Ticket/GnuPG.html104
-rw-r--r--rt/share/html/Ticket/Graphs/Elements/EditGraphProperties167
-rw-r--r--rt/share/html/Ticket/Graphs/Elements/ShowGraph71
-rw-r--r--rt/share/html/Ticket/Graphs/Elements/ShowLegends73
-rw-r--r--rt/share/html/Ticket/Graphs/dhandler80
-rw-r--r--rt/share/html/Ticket/Graphs/index.html114
-rwxr-xr-xrt/share/html/Ticket/History.html91
-rwxr-xr-xrt/share/html/Ticket/Modify.html95
-rwxr-xr-xrt/share/html/Ticket/ModifyAll.html255
-rwxr-xr-xrt/share/html/Ticket/ModifyDates.html79
-rwxr-xr-xrt/share/html/Ticket/ModifyLinks.html85
-rwxr-xr-xrt/share/html/Ticket/ModifyPeople.html94
-rwxr-xr-xrt/share/html/Ticket/Reminders.html74
-rw-r--r--rt/share/html/Ticket/ShowEmailRecord.html96
-rwxr-xr-xrt/share/html/Ticket/Update.html269
-rw-r--r--rt/share/html/Tools/Elements/Tabs90
-rw-r--r--rt/share/html/Tools/MyDay.html114
-rw-r--r--rt/share/html/Tools/Offline.html168
-rw-r--r--rt/share/html/Tools/Reports/CreatedByDates.html94
-rw-r--r--rt/share/html/Tools/Reports/Elements/Tabs89
-rw-r--r--rt/share/html/Tools/Reports/ResolvedByDates.html95
-rw-r--r--rt/share/html/Tools/Reports/ResolvedByOwner.html70
-rw-r--r--rt/share/html/Tools/Reports/index.html76
-rw-r--r--rt/share/html/Tools/index.html81
-rwxr-xr-xrt/share/html/User/Delegation.html107
-rwxr-xr-xrt/share/html/User/Elements/DelegateRights110
-rwxr-xr-xrt/share/html/User/Elements/GroupTabs84
-rwxr-xr-xrt/share/html/User/Elements/Tabs95
-rwxr-xr-xrt/share/html/User/Groups/Members.html160
-rwxr-xr-xrt/share/html/User/Groups/Modify.html157
-rwxr-xr-xrt/share/html/User/Groups/index.html67
-rwxr-xr-xrt/share/html/User/Prefs.html314
-rw-r--r--rt/share/html/Widgets/BulkEdit67
-rw-r--r--rt/share/html/Widgets/BulkProcess73
-rw-r--r--rt/share/html/Widgets/ComboBox77
-rw-r--r--rt/share/html/Widgets/FinalizeWidgetArguments64
-rw-r--r--rt/share/html/Widgets/Form/Boolean103
-rw-r--r--rt/share/html/Widgets/Form/Integer99
-rw-r--r--rt/share/html/Widgets/Form/Select165
-rw-r--r--rt/share/html/Widgets/Form/String108
-rw-r--r--rt/share/html/Widgets/SavedSearch189
-rw-r--r--rt/share/html/Widgets/SelectionBox254
-rw-r--r--rt/share/html/Widgets/TitleBox54
-rwxr-xr-xrt/share/html/Widgets/TitleBoxEnd59
-rwxr-xr-xrt/share/html/Widgets/TitleBoxStart97
-rwxr-xr-xrt/share/html/autohandler61
-rw-r--r--rt/share/html/dhandler54
-rwxr-xr-xrt/share/html/index.html143
-rwxr-xr-xrt/share/html/l52
-rw-r--r--rt/t/00-compile.t58
-rw-r--r--rt/t/00-mason-syntax.t44
-rw-r--r--rt/t/api/ace.t238
-rw-r--r--rt/t/api/action-createtickets.t240
-rw-r--r--rt/t/api/attachment.t45
-rw-r--r--rt/t/api/attribute-tests.t86
-rw-r--r--rt/t/api/attribute.t42
-rw-r--r--rt/t/api/cf.t224
-rw-r--r--rt/t/api/cf_combo_casacade.t46
-rw-r--r--rt/t/api/cf_external.t56
-rw-r--r--rt/t/api/cf_pattern.t53
-rw-r--r--rt/t/api/cf_single_values.t38
-rw-r--r--rt/t/api/cf_transaction.t60
-rw-r--r--rt/t/api/condition-ownerchange.t51
-rw-r--r--rt/t/api/condition-reject.t45
-rw-r--r--rt/t/api/currentuser.t32
-rw-r--r--rt/t/api/customfield.t74
-rw-r--r--rt/t/api/date.t564
-rw-r--r--rt/t/api/emailparser.t32
-rw-r--r--rt/t/api/group.t99
-rw-r--r--rt/t/api/groups.t139
-rw-r--r--rt/t/api/i18n.t30
-rw-r--r--rt/t/api/link.t24
-rw-r--r--rt/t/api/queue.t92
-rw-r--r--rt/t/api/record.t70
-rw-r--r--rt/t/api/reminders.t88
-rw-r--r--rt/t/api/rights.t142
-rw-r--r--rt/t/api/rt.t18
-rw-r--r--rt/t/api/scrip.t49
-rw-r--r--rt/t/api/scrip_order.t56
-rw-r--r--rt/t/api/searchbuilder.t40
-rw-r--r--rt/t/api/system.t33
-rw-r--r--rt/t/api/template-insert.t26
-rw-r--r--rt/t/api/template.t26
-rw-r--r--rt/t/api/ticket.t257
-rw-r--r--rt/t/api/tickets.t104
-rw-r--r--rt/t/api/tickets_overlay_sql.t73
-rw-r--r--rt/t/api/uri-fsck_com_rt.t28
-rw-r--r--rt/t/api/uri-t.t21
-rw-r--r--rt/t/api/user.t339
-rw-r--r--rt/t/api/users.t80
-rw-r--r--rt/t/approval/basic.t218
-rw-r--r--rt/t/clicky.t119
-rw-r--r--rt/t/cron.t90
-rw-r--r--rt/t/customfields/access_via_queue.t160
-rw-r--r--rt/t/customfields/sort_order.t92
-rw-r--r--rt/t/data/configs/apache2.2+fastcgi.conf44
-rw-r--r--rt/t/data/configs/apache2.2+fastcgi.conf.in44
-rw-r--r--rt/t/data/configs/apache2.2+mod_perl.conf40
-rw-r--r--rt/t/data/configs/apache2.2+mod_perl.conf.in40
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/dir356
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/msg136
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/msg236
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/msg335
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/msg435
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/msg535
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/msg635
-rwxr-xr-xrt/t/data/emails/8859-15-message-series/msg736
-rwxr-xr-xrt/t/data/emails/crashes-file-based-parser193
-rw-r--r--rt/t/data/emails/lorem-ipsum5
-rwxr-xr-xrt/t/data/emails/multipart-alternative-with-umlaut62
-rwxr-xr-xrt/t/data/emails/multipart-report66
-rwxr-xr-xrt/t/data/emails/nested-mime-sample396
-rwxr-xr-xrt/t/data/emails/nested-rfc-822253
-rwxr-xr-xrt/t/data/emails/new-ticket-from-iso-8859-131
-rwxr-xr-xrt/t/data/emails/new-ticket-from-iso-8859-1-full38
-rwxr-xr-xrt/t/data/emails/notes-uuencoded2368
-rw-r--r--rt/t/data/emails/rt-send-cc5
-rwxr-xr-xrt/t/data/emails/russian-subject-no-content-type42
-rw-r--r--rt/t/data/emails/subject-with-folding-ws10
-rwxr-xr-xrt/t/data/emails/text-html-in-russian87
-rwxr-xr-xrt/t/data/emails/text-html-with-umlaut35
-rw-r--r--rt/t/data/emails/very-long-subject12
-rw-r--r--rt/t/data/gnupg/emails/1-signed-MIME-plain.txt38
-rw-r--r--rt/t/data/gnupg/emails/10-encrypted-inline-plain.txt31
-rw-r--r--rt/t/data/gnupg/emails/11-encrypted-inline-attachment.txt80
-rw-r--r--rt/t/data/gnupg/emails/12-encrypted-inline-binary.txt86
-rw-r--r--rt/t/data/gnupg/emails/13-signed-encrypted-MIME-plain.txt49
-rw-r--r--rt/t/data/gnupg/emails/14-signed-encrypted-MIME-attachment.txt51
-rw-r--r--rt/t/data/gnupg/emails/15-signed-encrypted-MIME-binary.txt60
-rw-r--r--rt/t/data/gnupg/emails/16-signed-encrypted-inline-plain.txt33
-rw-r--r--rt/t/data/gnupg/emails/17-signed-encrypted-inline-attachment.txt84
-rw-r--r--rt/t/data/gnupg/emails/18-signed-encrypted-inline-binary.txt89
-rw-r--r--rt/t/data/gnupg/emails/19-signed-inline-plain-nested.txt34
-rwxr-xr-xrt/t/data/gnupg/emails/2-signed-MIME-plain-with-attachment.txt48
-rwxr-xr-xrt/t/data/gnupg/emails/3-signed-MIME-plain-with-binary.txt55
-rw-r--r--rt/t/data/gnupg/emails/4-signed-inline-plain.txt24
-rw-r--r--rt/t/data/gnupg/emails/5-signed-inline-with-attachment.txt48
-rw-r--r--rt/t/data/gnupg/emails/6-signed-inline-with-binary.txt55
-rw-r--r--rt/t/data/gnupg/emails/7-encrypted-MIME-plain.txt47
-rw-r--r--rt/t/data/gnupg/emails/8-encrypted-MIME-with-attachment.txt49
-rw-r--r--rt/t/data/gnupg/emails/9-encrypted-MIME-with-binary.txt57
-rw-r--r--rt/t/data/gnupg/emails/README28
-rw-r--r--rt/t/data/gnupg/keyrings/pubring.gpgbin0 -> 4651 bytes
-rw-r--r--rt/t/data/gnupg/keyrings/secring.gpgbin0 -> 5095 bytes
-rw-r--r--rt/t/data/gnupg/keyrings/signed_old_style_with_attachment.eml48
-rw-r--r--rt/t/data/gnupg/keyrings/trustdb.gpgbin0 -> 1520 bytes
-rw-r--r--rt/t/data/gnupg/keys/general-at-example.com.2.public.key30
-rw-r--r--rt/t/data/gnupg/keys/general-at-example.com.2.secret.key33
-rw-r--r--rt/t/data/gnupg/keys/general-at-example.com.public.key30
-rw-r--r--rt/t/data/gnupg/keys/general-at-example.com.secret.key31
-rw-r--r--rt/t/data/gnupg/keys/recipient-at-example.com.public.key30
-rw-r--r--rt/t/data/gnupg/keys/recipient-at-example.com.secret.key33
-rw-r--r--rt/t/data/gnupg/keys/rt-recipient-at-example.com.public.key30
-rw-r--r--rt/t/data/gnupg/keys/rt-recipient-at-example.com.secret.key33
-rw-r--r--rt/t/data/gnupg/keys/rt-test-at-example.com.2.public.key30
-rw-r--r--rt/t/data/gnupg/keys/rt-test-at-example.com.2.secret.key33
-rw-r--r--rt/t/data/gnupg/keys/rt-test-at-example.com.public.key30
-rw-r--r--rt/t/data/gnupg/keys/rt-test-at-example.com.secret.key33
-rw-r--r--rt/t/delegation/cleanup_stalled.t458
-rw-r--r--rt/t/delegation/revocation.t135
-rw-r--r--rt/t/i18n/default.t19
-rw-r--r--rt/t/mail/charsets-outgoing.t306
-rw-r--r--rt/t/mail/crypt-gnupg.t312
-rw-r--r--rt/t/mail/extractsubjecttag.t98
-rw-r--r--rt/t/mail/gateway.t802
-rw-r--r--rt/t/mail/gnupg-bad.t58
-rw-r--r--rt/t/mail/gnupg-incoming.t320
-rw-r--r--rt/t/mail/gnupg-realmail.t184
-rw-r--r--rt/t/mail/gnupg-reverification.t92
-rw-r--r--rt/t/mail/mime_decoding.t59
-rw-r--r--rt/t/mail/sendmail.t538
-rw-r--r--rt/t/mail/verp.t8
-rw-r--r--rt/t/maildigest/attributes.t168
-rw-r--r--rt/t/pod.t7
-rw-r--r--rt/t/rtname.t34
-rw-r--r--rt/t/savedsearch.t185
-rw-r--r--rt/t/shredder/00load.t29
-rw-r--r--rt/t/shredder/00skeleton.t25
-rw-r--r--rt/t/shredder/01basics.t32
-rw-r--r--rt/t/shredder/01ticket.t86
-rw-r--r--rt/t/shredder/02group_member.t103
-rw-r--r--rt/t/shredder/02queue.t125
-rw-r--r--rt/t/shredder/02template.t76
-rw-r--r--rt/t/shredder/02user.t62
-rw-r--r--rt/t/shredder/03plugin.t46
-rw-r--r--rt/t/shredder/03plugin_summary.t23
-rw-r--r--rt/t/shredder/03plugin_tickets.t150
-rw-r--r--rt/t/shredder/03plugin_users.t40
-rw-r--r--rt/t/shredder/utils.pl435
-rw-r--r--rt/t/ticket/action_linear_escalate.t100
-rw-r--r--rt/t/ticket/add-watchers.t167
-rw-r--r--rt/t/ticket/badlinks.t38
-rw-r--r--rt/t/ticket/batch-upload-csv.t48
-rw-r--r--rt/t/ticket/cfsort-freeform-multiple.t137
-rw-r--r--rt/t/ticket/cfsort-freeform-single.t191
-rw-r--r--rt/t/ticket/deferred_owner.t120
-rw-r--r--rt/t/ticket/link_search.t246
-rw-r--r--rt/t/ticket/linking.t385
-rw-r--r--rt/t/ticket/merge.t92
-rw-r--r--rt/t/ticket/quicksearch.t41
-rw-r--r--rt/t/ticket/requestor-order.t142
-rw-r--r--rt/t/ticket/scrips_batch.t100
-rw-r--r--rt/t/ticket/search.t278
-rw-r--r--rt/t/ticket/search_by_cf_freeform_multiple.t153
-rw-r--r--rt/t/ticket/search_by_cf_freeform_single.t142
-rw-r--r--rt/t/ticket/search_by_links.t132
-rw-r--r--rt/t/ticket/search_by_txn.t35
-rw-r--r--rt/t/ticket/search_by_watcher.t280
-rw-r--r--rt/t/ticket/search_long_cf_values.t79
-rw-r--r--rt/t/ticket/sort-by-custom-ownership.t103
-rw-r--r--rt/t/ticket/sort-by-queue.t100
-rw-r--r--rt/t/ticket/sort-by-user.t152
-rw-r--r--rt/t/ticket/sort_by_cf.t172
-rw-r--r--rt/t/validator/group_members.t178
-rw-r--r--rt/t/web/attachments.t47
-rw-r--r--rt/t/web/basic.t146
-rw-r--r--rt/t/web/cf_access.t191
-rw-r--r--rt/t/web/cf_onqueue.t66
-rw-r--r--rt/t/web/cf_select_one.t159
-rw-r--r--rt/t/web/command_line.t544
-rw-r--r--rt/t/web/command_line_with_unknown_field.t34
-rw-r--r--rt/t/web/compilation_errors.t68
-rw-r--r--rt/t/web/config_tab_right.t41
-rw-r--r--rt/t/web/crypt-gnupg.t446
-rw-r--r--rt/t/web/custom_frontpage.t61
-rw-r--r--rt/t/web/custom_search.t84
-rw-r--r--rt/t/web/dashboard_with_deleted_saved_search.t89
-rw-r--r--rt/t/web/dashboards-groups.t102
-rw-r--r--rt/t/web/dashboards-permissions.t38
-rw-r--r--rt/t/web/dashboards.t250
-rw-r--r--rt/t/web/gnupg-outgoing.t363
-rw-r--r--rt/t/web/gnupg-select-keys-on-create.t325
-rw-r--r--rt/t/web/gnupg-select-keys-on-update.t344
-rw-r--r--rt/t/web/offline_messages_utf8.t67
-rw-r--r--rt/t/web/offline_utf8.t54
-rw-r--r--rt/t/web/query_builder.t249
-rw-r--r--rt/t/web/quicksearch.t51
-rw-r--r--rt/t/web/rest-non-ascii-subject.t55
-rw-r--r--rt/t/web/rest.t71
-rw-r--r--rt/t/web/rights.t85
-rw-r--r--rt/t/web/rights1.t134
-rw-r--r--rt/t/web/saved_search_chart.t86
-rw-r--r--rt/t/web/saved_search_permissions.t34
-rw-r--r--rt/t/web/search_bulk_update_links.t147
-rw-r--r--rt/t/web/ticket-create-utf8.t83
-rw-r--r--rt/t/web/ticket_owner.t356
-rw-r--r--rt/t/web/ticket_seen.t80
-rw-r--r--rt/t/web/ticket_update_without_content.t52
-rw-r--r--rt/t/web/unlimited_search.t41
1425 files changed, 346998 insertions, 41215 deletions
diff --git a/rt/Makefile b/rt/Makefile
index 87d6fd7..e89a69a 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -51,19 +51,22 @@
#
-PERL = /usr/bin/perl
+PERL = /usr/bin/perl
+INSTALL = install-sh
+
+RT_LAYOUT = relative
CONFIG_FILE_PATH = /opt/rt3/etc
-CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm
-SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm
+CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm
+SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm
RT_VERSION_MAJOR = 3
-RT_VERSION_MINOR = 6
-RT_VERSION_PATCH = 10
+RT_VERSION_MINOR = 8
+RT_VERSION_PATCH = 7
-RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH)
-TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH)
+RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH)
+TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH)
# This is the group that all of the installed files will be chgrp'ed to.
@@ -88,11 +91,13 @@ APACHECTL = /usr/sbin/apachectl
# {{{ Files and directories
# DESTDIR allows you to specify that RT be installed somewhere other than
-# where it will eventually reside
+# where it will eventually reside. DESTDIR _must_ have a trailing slash
+# if it's defined.
DESTDIR =
+
RT_PATH = /opt/rt3
RT_ETC_PATH = /opt/rt3/etc
RT_BIN_PATH = /opt/rt3/bin
@@ -102,6 +107,7 @@ RT_MAN_PATH = /opt/rt3/man
RT_VAR_PATH = /opt/rt3/var
RT_DOC_PATH = /opt/rt3/share/doc
RT_LOCAL_PATH = /opt/rt3/local
+LOCAL_PLUGIN_PATH = /opt/rt3/local/plugins
LOCAL_ETC_PATH = /opt/rt3/local/etc
LOCAL_LIB_PATH = /opt/rt3/local/lib
LOCAL_LEXICON_PATH = /opt/rt3/local/po
@@ -109,7 +115,7 @@ MASON_HTML_PATH = /opt/rt3/share/html
MASON_LOCAL_HTML_PATH = /opt/rt3/local/html
MASON_DATA_PATH = /opt/rt3/var/mason_data
MASON_SESSION_PATH = /opt/rt3/var/session_data
-RT_LOG_PATH = /opt/rt3/var/log
+RT_LOG_PATH = /opt/rt3/var/log
# RT_READABLE_DIR_MODE is the mode of directories that are generally meant
# to be accessable
@@ -121,34 +127,69 @@ RT_READABLE_DIR_MODE = 0755
# {{{ all these define the places that RT's binaries should get installed
# RT_MODPERL_HANDLER is the mason handler script for mod_perl
-RT_MODPERL_HANDLER = $(RT_BIN_PATH)/webmux.pl
+RT_MODPERL_HANDLER = webmux.pl
# RT_STANDALONE_SERVER is a stand-alone HTTP server
-RT_STANDALONE_SERVER = $(RT_BIN_PATH)/standalone_httpd
+RT_STANDALONE_SERVER = standalone_httpd
# RT_SPEEDYCGI_HANDLER is the mason handler script for SpeedyCGI
-RT_SPEEDYCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.scgi
+RT_SPEEDYCGI_HANDLER = mason_handler.scgi
# RT_FASTCGI_HANDLER is the mason handler script for FastCGI
-RT_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.fcgi
+RT_FASTCGI_HANDLER = mason_handler.fcgi
# RT_WIN32_FASTCGI_HANDLER is the mason handler script for FastCGI
-RT_WIN32_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.svc
+RT_WIN32_FASTCGI_HANDLER = mason_handler.svc
# RT's CLI
-RT_CLI_BIN = $(RT_BIN_PATH)/rt
+RT_CLI_BIN = rt
# RT's mail gateway
-RT_MAILGATE_BIN = $(RT_BIN_PATH)/rt-mailgate
+RT_MAILGATE_BIN = rt-mailgate
# RT's cron tool
-RT_CRON_BIN = $(RT_BIN_PATH)/rt-crontool
+RT_CRON_BIN = rt-crontool
# }}}
-BINARIES = $(DESTDIR)/$(RT_MODPERL_HANDLER) \
- $(DESTDIR)/$(RT_MAILGATE_BIN) \
- $(DESTDIR)/$(RT_CLI_BIN) \
- $(DESTDIR)/$(RT_CRON_BIN) \
- $(DESTDIR)/$(RT_STANDALONE_SERVER) \
- $(DESTDIR)/$(RT_SPEEDYCGI_HANDLER) \
- $(DESTDIR)/$(RT_FASTCGI_HANDLER) \
- $(DESTDIR)/$(RT_WIN32_FASTCGI_HANDLER)
-SYSTEM_BINARIES = $(DESTDIR)/$(RT_SBIN_PATH)/
+BINARIES = $(RT_MODPERL_HANDLER) \
+ $(RT_MAILGATE_BIN) \
+ $(RT_CLI_BIN) \
+ $(RT_CRON_BIN) \
+ $(RT_STANDALONE_SERVER) \
+ $(RT_SPEEDYCGI_HANDLER) \
+ $(RT_FASTCGI_HANDLER) \
+ $(RT_WIN32_FASTCGI_HANDLER)
+
+
+
+
+
+SYSTEM_BINARIES = rt-dump-database \
+ rt-setup-database \
+ rt-email-digest \
+ rt-email-dashboards \
+ rt-email-group-admin \
+ rt-server \
+ rt-test-dependencies \
+ rt-clean-sessions \
+ rt-shredder \
+ rt-validator
+
+
+ETC_FILES = acl.Informix \
+ acl.Pg \
+ acl.Oracle \
+ acl.mysql \
+ acl.Sybase \
+ schema.Informix \
+ schema.Pg \
+ schema.Oracle \
+ schema.mysql-4.0 \
+ schema.mysql-4.1 \
+ schema.Sybase \
+ schema.SQLite \
+ initialdata
+
+# }}}
+
+# {{{ Web frontend
+
+WEB_HANDLER = standalone
# }}}
@@ -205,18 +246,21 @@ DB_RT_PASS = rt_pass
# }}}
+TEST_FILES = t/*.t t/*/*.t
+TEST_VERBOSE = 0
+
+
####################################################################
all: default
default:
- @echo "Please read RT's readme before installing. Not doing so could"
- @echo "be dangerous."
+ @echo "Please read RT's README before beginning your installation."
instruct:
- @echo "Congratulations. RT has been installed. "
+ @echo "Congratulations. RT is now installed."
@echo ""
@echo ""
@echo "You must now configure RT by editing $(SITE_CONFIG_FILE)."
@@ -230,244 +274,214 @@ instruct:
@echo "After that, you need to initialize RT's database by running"
@echo " 'make initialize-database'"
-# @echo " or by executing "
-# @echo " '$(RT_SBIN_PATH)/rt-setup-database --action init \ "
-# @echo " --dba $(DB_DBA) --prompt-for-dba-password'"
-
-
upgrade-instruct:
- @echo "Congratulations. RT has been upgraded. You should now check-over"
+ @echo "Congratulations. RT has been upgraded. You should now check over"
@echo "$(CONFIG_FILE) for any necessary site customization. Additionally,"
@echo "you should update RT's system database objects by running "
- @echo " ls etc/upgrade"
- @echo ""
- @echo "For each item in that directory whose name is greater than"
- @echo "your previously installed RT version, run:"
- @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action schema --datadir etc/upgrade/<version>"
- @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action acl --datadir etc/upgrade/<version>"
- @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action insert --datadir etc/upgrade/<version>"
+ @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action upgrade"
-upgrade: config-install dirs files-install fixperms upgrade-instruct
+upgrade: testdeps config-install dirs files-install fixperms upgrade-instruct
-upgrade-noclobber: config-install libs-install html-install bin-install local-install doc-install fixperms
+upgrade-noclobber: config-install dirs libs-install html-install bin-install local-install doc-install fixperms
# {{{ dependencies
+
+my_with_web_handlers= $(shell $(PERL) -e 'print join " ", map "--with-$$_", grep defined && length, split /,/, "$(WEB_HANDLER)"')
testdeps:
- $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE)
+ $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) $(my_with_web_handlers)
depends: fixdeps
fixdeps:
- $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE)
+ $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) $(my_with_web_handlers)
#}}}
# {{{ fixperms
fixperms:
# Make the libraries readable
- chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_PATH)
- chown -R $(LIBS_OWNER) $(DESTDIR)/$(RT_LIB_PATH)
- chgrp -R $(LIBS_GROUP) $(DESTDIR)/$(RT_LIB_PATH)
- chmod -R u+rwX,go-w,go+rX $(DESTDIR)/$(RT_LIB_PATH)
+ chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_PATH)
+ chown -R $(LIBS_OWNER) $(DESTDIR)$(RT_LIB_PATH)
+ chgrp -R $(LIBS_GROUP) $(DESTDIR)$(RT_LIB_PATH)
+ chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(RT_LIB_PATH)
- chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_BIN_PATH)
- chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_BIN_PATH)
+ chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH)
- chmod 0755 $(DESTDIR)/$(RT_ETC_PATH)
- chmod 0500 $(DESTDIR)/$(RT_ETC_PATH)/*
+ chmod 0755 $(DESTDIR)$(RT_ETC_PATH)
+ cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES)
#TODO: the config file should probably be able to have its
# owner set separately from the binaries.
- chown -R $(BIN_OWNER) $(DESTDIR)/$(RT_ETC_PATH)
- chgrp -R $(RTGROUP) $(DESTDIR)/$(RT_ETC_PATH)
+ chown -R $(BIN_OWNER) $(DESTDIR)$(RT_ETC_PATH)
+ chgrp -R $(RTGROUP) $(DESTDIR)$(RT_ETC_PATH)
+
+ chmod 0440 $(DESTDIR)$(CONFIG_FILE)
+ chmod 0640 $(DESTDIR)$(SITE_CONFIG_FILE)
- chmod 0550 $(DESTDIR)/$(CONFIG_FILE)
- chmod 0550 $(DESTDIR)/$(SITE_CONFIG_FILE)
+ # Make the system binaries
+ cd $(DESTDIR)$(RT_BIN_PATH) && ( chmod 0755 $(BINARIES) ; chown $(BIN_OWNER) $(BINARIES); chgrp $(RTGROUP) $(BINARIES))
- # Make the interfaces executable
- chown $(BIN_OWNER) $(BINARIES)
- chgrp $(RTGROUP) $(BINARIES)
- chmod 0755 $(BINARIES)
+ # 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 the web ui readable by all.
- chmod -R u+rwX,go-w,go+rX $(DESTDIR)/$(MASON_HTML_PATH) \
- $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) \
- $(DESTDIR)/$(LOCAL_LEXICON_PATH)
- chown -R $(LIBS_OWNER) $(DESTDIR)/$(MASON_HTML_PATH) \
- $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
- chgrp -R $(LIBS_GROUP) $(DESTDIR)/$(MASON_HTML_PATH) \
- $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
+ chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \
+ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \
+ $(DESTDIR)$(LOCAL_LEXICON_PATH)
+ chown -R $(LIBS_OWNER) $(DESTDIR)$(MASON_HTML_PATH) \
+ $(DESTDIR)$(MASON_LOCAL_HTML_PATH)
+ chgrp -R $(LIBS_GROUP) $(DESTDIR)$(MASON_HTML_PATH) \
+ $(DESTDIR)$(MASON_LOCAL_HTML_PATH)
# Make the web ui's data dir writable
- chmod 0770 $(DESTDIR)/$(MASON_DATA_PATH) \
- $(DESTDIR)/$(MASON_SESSION_PATH)
- chown -R $(WEB_USER) $(DESTDIR)/$(MASON_DATA_PATH) \
- $(DESTDIR)/$(MASON_SESSION_PATH)
- chgrp -R $(WEB_GROUP) $(DESTDIR)/$(MASON_DATA_PATH) \
- $(DESTDIR)/$(MASON_SESSION_PATH)
+ chmod 0770 $(DESTDIR)$(MASON_DATA_PATH) \
+ $(DESTDIR)$(MASON_SESSION_PATH)
+ chown -R $(WEB_USER) $(DESTDIR)$(MASON_DATA_PATH) \
+ $(DESTDIR)$(MASON_SESSION_PATH)
+ chgrp -R $(WEB_GROUP) $(DESTDIR)$(MASON_DATA_PATH) \
+ $(DESTDIR)$(MASON_SESSION_PATH)
# }}}
# {{{ dirs
dirs:
- mkdir -p $(DESTDIR)/$(RT_LOG_PATH)
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/cache
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/etc
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/obj
- mkdir -p $(DESTDIR)/$(MASON_SESSION_PATH)
- mkdir -p $(DESTDIR)/$(MASON_HTML_PATH)
- mkdir -p $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
- mkdir -p $(DESTDIR)/$(LOCAL_ETC_PATH)
- mkdir -p $(DESTDIR)/$(LOCAL_LIB_PATH)
- mkdir -p $(DESTDIR)/$(LOCAL_LEXICON_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH)
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/obj
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_SESSION_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_LOCAL_HTML_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_ETC_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH)
# }}}
-install: config-install dirs files-install fixperms instruct
+install: testdeps config-install dirs files-install fixperms instruct
-files-install: libs-install etc-install bin-install sbin-install html-install local-install doc-install
+files-install: libs-install etc-install config-install bin-install sbin-install html-install local-install doc-install
config-install:
- mkdir -p $(DESTDIR)/$(CONFIG_FILE_PATH)
- -cp etc/RT_Config.pm $(DESTDIR)/$(CONFIG_FILE)
- [ -f $(DESTDIR)/$(SITE_CONFIG_FILE) ] || cp etc/RT_SiteConfig.pm $(DESTDIR)/$(SITE_CONFIG_FILE)
-
- chgrp $(RTGROUP) $(DESTDIR)/$(CONFIG_FILE)
- chown $(BIN_OWNER) $(DESTDIR)/$(CONFIG_FILE)
-
- chgrp $(RTGROUP) $(DESTDIR)/$(SITE_CONFIG_FILE)
- chown $(BIN_OWNER) $(DESTDIR)/$(SITE_CONFIG_FILE)
-
- @echo "Installed configuration. about to install rt in $(RT_PATH)"
+ $(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH)
+ -$(INSTALL) -m 0440 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_Config.pm $(DESTDIR)$(CONFIG_FILE)
+ [ -f $(DESTDIR)$(SITE_CONFIG_FILE) ] || $(INSTALL) -m 0640 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_SiteConfig.pm $(DESTDIR)$(SITE_CONFIG_FILE)
+ @echo "Installed configuration. About to install RT in $(RT_PATH)"
test:
- $(PERL) -Ilib lib/t/00smoke.t
-
-regression-install: config-install
- $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)/$(CONFIG_FILE)
+ $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES)
-regression: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms apachectl run-regression
+parallel-test: test-parallel
-run-regression:
- prove -Ilib lib/t/setup_regression.t lib/t/autogen/ lib/t/regression/
-
-
-regression-noapache: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms start-httpd run-regression
-
-regression-quiet:
- $(PERL) sbin/regression_harness
-
-regression-instruct:
- @echo "About to wipe your database for a regression test. ABORT NOW with Control-C"
+test-parallel:
+ RT_TEST_PARALLEL=1 HARNESS_OPTIONS="j4" $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES)
+regression-install: config-install
+ $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)$(CONFIG_FILE)
# {{{ database-installation
-regression-reset-db:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' --force
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --dba-password ''
+regression-reset-db: force-dropdb
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba $(DB_DBA) --dba-password ''
initdb :: initialize-database
initialize-database:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --prompt-for-dba-password
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba $(DB_DBA) --prompt-for-dba-password
dropdb:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --prompt-for-dba-password
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba $(DB_DBA) --prompt-for-dba-password
+
+force-dropdb:
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' --force
-insert-approval-data:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/insert_approval_scrips
# }}}
# {{{ libs-install
libs-install:
- [ -d $(DESTDIR)/$(RT_LIB_PATH) ] || mkdir -p $(DESTDIR)/$(RT_LIB_PATH)
- -cp -rp lib/* $(DESTDIR)/$(RT_LIB_PATH)
+ [ -d $(DESTDIR)$(RT_LIB_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LIB_PATH)
+ -( cd lib && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_LIB_PATH)/$$dir" ; \
+ done
+ -( cd lib && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "lib/$$file" "$(DESTDIR)$(RT_LIB_PATH)/$$file" ; \
+ done
# }}}
# {{{ html-install
html-install:
- [ -d $(DESTDIR)/$(MASON_HTML_PATH) ] || mkdir -p $(DESTDIR)/$(MASON_HTML_PATH)
- -cp -rp ./html/* $(DESTDIR)/$(MASON_HTML_PATH)
+ [ -d $(DESTDIR)$(MASON_HTML_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH)
+ -( cd share/html && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_HTML_PATH)/$$dir" ; \
+ done
+ -( cd share/html && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \
+ done
# }}}
# {{{ doc-install
doc-install:
# RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir
- -[ -f $(DESTDIR)/$(RT_DOC_PATH) ] && rm $(DESTDIR)/$(RT_DOC_PATH)
- [ -d $(DESTDIR)/$(RT_DOC_PATH) ] || mkdir -p $(DESTDIR)/$(RT_DOC_PATH)
- -cp -rp ./README $(DESTDIR)/$(RT_DOC_PATH)
+ -[ -f $(DESTDIR)$(RT_DOC_PATH) ] && rm $(DESTDIR)$(RT_DOC_PATH)
+ [ -d $(DESTDIR)$(RT_DOC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_DOC_PATH)
+ -$(INSTALL) -m 0644 ./README $(DESTDIR)$(RT_DOC_PATH)/
# }}}
# {{{ etc-install
etc-install:
- mkdir -p $(DESTDIR)/$(RT_ETC_PATH)
- -cp -rp \
- etc/acl.* \
- etc/initialdata \
- etc/schema.* \
- $(DESTDIR)/$(RT_ETC_PATH)
+ [ -d $(DESTDIR)$(RT_ETC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)
+ for file in $(ETC_FILES) ; do \
+ $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(RT_ETC_PATH)/" ; \
+ done
# }}}
# {{{ sbin-install
sbin-install:
- mkdir -p $(DESTDIR)/$(RT_SBIN_PATH)
- chmod +x \
- sbin/rt-dump-database \
- sbin/rt-setup-database \
- sbin/rt-test-dependencies
- -cp -rp \
- sbin/rt-dump-database \
- sbin/rt-setup-database \
- sbin/rt-test-dependencies \
- $(DESTDIR)/$(RT_SBIN_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_SBIN_PATH)
+ for file in $(SYSTEM_BINARIES) ; do \
+ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "sbin/$$file" "$(DESTDIR)$(RT_SBIN_PATH)/" ; \
+ done
# }}}
# {{{ bin-install
bin-install:
- mkdir -p $(DESTDIR)/$(RT_BIN_PATH)
- chmod +x bin/rt-mailgate \
- bin/rt-crontool
- -cp -rp \
- bin/rt-mailgate \
- bin/mason_handler.fcgi \
- bin/mason_handler.scgi \
- bin/standalone_httpd \
- bin/mason_handler.svc \
- bin/rt \
- bin/webmux.pl \
- bin/rt-crontool \
- $(DESTDIR)/$(RT_BIN_PATH)
-# }}}
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_BIN_PATH)
+ for file in $(BINARIES) ; do \
+ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "bin/$$file" "$(DESTDIR)$(RT_BIN_PATH)/" ; \
+ done
# {{{ local-install
local-install:
- -cp -rp ./local/html/* $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
- -cp -rp ./local/po/* $(DESTDIR)/$(LOCAL_LEXICON_PATH)
- -cp -rp ./local/etc/* $(DESTDIR)/$(LOCAL_ETC_PATH)
+ -( cd local/html && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_LOCAL_HTML_PATH)/$$dir" ; \
+ done
+ -( cd local/html && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "local/html/$$file" "$(DESTDIR)$(MASON_LOCAL_HTML_PATH)/$$file" ; \
+ done
+ -( cd local/po && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(LOCAL_LEXICON_PATH)/$$dir" ; \
+ done
+ -( cd local/po && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "local/po/$$file" "$(DESTDIR)$(LOCAL_LEXICON_PATH)/$$file" ; \
+ done
+ -( cd local/etc && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(LOCAL_ETC_PATH)/$$dir" ; \
+ done
+ -( cd local/etc && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(LOCAL_ETC_PATH)/$$file" ; \
+ done
# }}}
# {{{ Best Practical Build targets -- no user servicable parts inside
-
-POD2TEST_EXE = sbin/extract_pod_tests
-
-testify-pods:
- [ -d lib/t/autogen ] || mkdir lib/t/autogen
- find lib -name \*pm | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE)
- find bin -type f | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE)
- find lib -name \*pm | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE)
- find bin -type f | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE)
-
-
-
regenerate-catalogs:
$(PERL) sbin/extract-message-catalog
@@ -486,9 +500,20 @@ reconfigure:
start-httpd:
$(PERL) bin/standalone_httpd &
+start-server:
+ $(PERL) sbin/rt-server &
+
apachectl:
$(APACHECTL) stop
sleep 10
$(APACHECTL) start
sleep 5
+
+SNAPSHOT=$(shell git describe --tags)
+snapshot:
+ git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf -
+ ( cd $(SNAPSHOT) && autoconf && ./configure )
+ tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/"
+ rm -fr "$(SNAPSHOT)/"
+
# }}}
diff --git a/rt/Makefile.in b/rt/Makefile.in
index 33a5dae..19a5f68 100644
--- a/rt/Makefile.in
+++ b/rt/Makefile.in
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -51,19 +51,22 @@
#
-PERL = @PERL@
+PERL = @PERL@
+INSTALL = @INSTALL@
+
+RT_LAYOUT = @rt_layout_name@
-CONFIG_FILE_PATH = @CONFIG_FILE_PATH@
-CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm
-SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm
+CONFIG_FILE_PATH = @CONFIG_FILE_PATH_R@
+CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm
+SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm
RT_VERSION_MAJOR = @RT_VERSION_MAJOR@
RT_VERSION_MINOR = @RT_VERSION_MINOR@
RT_VERSION_PATCH = @RT_VERSION_PATCH@
-RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH)
-TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH)
+RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH)
+TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH)
# This is the group that all of the installed files will be chgrp'ed to.
@@ -88,28 +91,31 @@ APACHECTL = @APACHECTL@
# {{{ Files and directories
# DESTDIR allows you to specify that RT be installed somewhere other than
-# where it will eventually reside
+# where it will eventually reside. DESTDIR _must_ have a trailing slash
+# if it's defined.
DESTDIR =
-RT_PATH = @RT_PATH@
-RT_ETC_PATH = @RT_ETC_PATH@
-RT_BIN_PATH = @RT_BIN_PATH@
-RT_SBIN_PATH = @RT_SBIN_PATH@
-RT_LIB_PATH = @RT_LIB_PATH@
-RT_MAN_PATH = @RT_MAN_PATH@
-RT_VAR_PATH = @RT_VAR_PATH@
-RT_DOC_PATH = @RT_DOC_PATH@
-RT_LOCAL_PATH = @RT_LOCAL_PATH@
-LOCAL_ETC_PATH = @LOCAL_ETC_PATH@
-LOCAL_LIB_PATH = @LOCAL_LIB_PATH@
-LOCAL_LEXICON_PATH = @LOCAL_LEXICON_PATH@
-MASON_HTML_PATH = @MASON_HTML_PATH@
-MASON_LOCAL_HTML_PATH = @MASON_LOCAL_HTML_PATH@
-MASON_DATA_PATH = @MASON_DATA_PATH@
-MASON_SESSION_PATH = @MASON_SESSION_PATH@
-RT_LOG_PATH = @RT_LOG_PATH@
+
+RT_PATH = @RT_PATH_R@
+RT_ETC_PATH = @RT_ETC_PATH_R@
+RT_BIN_PATH = @RT_BIN_PATH_R@
+RT_SBIN_PATH = @RT_SBIN_PATH_R@
+RT_LIB_PATH = @RT_LIB_PATH_R@
+RT_MAN_PATH = @RT_MAN_PATH_R@
+RT_VAR_PATH = @RT_VAR_PATH_R@
+RT_DOC_PATH = @RT_DOC_PATH_R@
+RT_LOCAL_PATH = @RT_LOCAL_PATH_R@
+LOCAL_PLUGIN_PATH = @RT_LOCAL_PATH_R@/plugins
+LOCAL_ETC_PATH = @LOCAL_ETC_PATH_R@
+LOCAL_LIB_PATH = @LOCAL_LIB_PATH_R@
+LOCAL_LEXICON_PATH = @LOCAL_LEXICON_PATH_R@
+MASON_HTML_PATH = @MASON_HTML_PATH_R@
+MASON_LOCAL_HTML_PATH = @MASON_LOCAL_HTML_PATH_R@
+MASON_DATA_PATH = @MASON_DATA_PATH_R@
+MASON_SESSION_PATH = @MASON_SESSION_PATH_R@
+RT_LOG_PATH = @RT_LOG_PATH_R@
# RT_READABLE_DIR_MODE is the mode of directories that are generally meant
# to be accessable
@@ -121,34 +127,69 @@ RT_READABLE_DIR_MODE = 0755
# {{{ all these define the places that RT's binaries should get installed
# RT_MODPERL_HANDLER is the mason handler script for mod_perl
-RT_MODPERL_HANDLER = $(RT_BIN_PATH)/webmux.pl
+RT_MODPERL_HANDLER = webmux.pl
# RT_STANDALONE_SERVER is a stand-alone HTTP server
-RT_STANDALONE_SERVER = $(RT_BIN_PATH)/standalone_httpd
+RT_STANDALONE_SERVER = standalone_httpd
# RT_SPEEDYCGI_HANDLER is the mason handler script for SpeedyCGI
-RT_SPEEDYCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.scgi
+RT_SPEEDYCGI_HANDLER = mason_handler.scgi
# RT_FASTCGI_HANDLER is the mason handler script for FastCGI
-RT_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.fcgi
+RT_FASTCGI_HANDLER = mason_handler.fcgi
# RT_WIN32_FASTCGI_HANDLER is the mason handler script for FastCGI
-RT_WIN32_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.svc
+RT_WIN32_FASTCGI_HANDLER = mason_handler.svc
# RT's CLI
-RT_CLI_BIN = $(RT_BIN_PATH)/rt
+RT_CLI_BIN = rt
# RT's mail gateway
-RT_MAILGATE_BIN = $(RT_BIN_PATH)/rt-mailgate
+RT_MAILGATE_BIN = rt-mailgate
# RT's cron tool
-RT_CRON_BIN = $(RT_BIN_PATH)/rt-crontool
+RT_CRON_BIN = rt-crontool
# }}}
-BINARIES = $(DESTDIR)/$(RT_MODPERL_HANDLER) \
- $(DESTDIR)/$(RT_MAILGATE_BIN) \
- $(DESTDIR)/$(RT_CLI_BIN) \
- $(DESTDIR)/$(RT_CRON_BIN) \
- $(DESTDIR)/$(RT_STANDALONE_SERVER) \
- $(DESTDIR)/$(RT_SPEEDYCGI_HANDLER) \
- $(DESTDIR)/$(RT_FASTCGI_HANDLER) \
- $(DESTDIR)/$(RT_WIN32_FASTCGI_HANDLER)
-SYSTEM_BINARIES = $(DESTDIR)/$(RT_SBIN_PATH)/
+BINARIES = $(RT_MODPERL_HANDLER) \
+ $(RT_MAILGATE_BIN) \
+ $(RT_CLI_BIN) \
+ $(RT_CRON_BIN) \
+ $(RT_STANDALONE_SERVER) \
+ $(RT_SPEEDYCGI_HANDLER) \
+ $(RT_FASTCGI_HANDLER) \
+ $(RT_WIN32_FASTCGI_HANDLER)
+
+
+
+
+
+SYSTEM_BINARIES = rt-dump-database \
+ rt-setup-database \
+ rt-email-digest \
+ rt-email-dashboards \
+ rt-email-group-admin \
+ rt-server \
+ rt-test-dependencies \
+ rt-clean-sessions \
+ rt-shredder \
+ rt-validator
+
+
+ETC_FILES = acl.Informix \
+ acl.Pg \
+ acl.Oracle \
+ acl.mysql \
+ acl.Sybase \
+ schema.Informix \
+ schema.Pg \
+ schema.Oracle \
+ schema.mysql-4.0 \
+ schema.mysql-4.1 \
+ schema.Sybase \
+ schema.SQLite \
+ initialdata
+
+# }}}
+
+# {{{ Web frontend
+
+WEB_HANDLER = @WEB_HANDLER@
# }}}
@@ -205,18 +246,21 @@ DB_RT_PASS = @DB_RT_PASS@
# }}}
+TEST_FILES = t/*.t t/*/*.t
+TEST_VERBOSE = 0
+
+
####################################################################
all: default
default:
- @echo "Please read RT's readme before installing. Not doing so could"
- @echo "be dangerous."
+ @echo "Please read RT's README before beginning your installation."
instruct:
- @echo "Congratulations. RT has been installed. "
+ @echo "Congratulations. RT is now installed."
@echo ""
@echo ""
@echo "You must now configure RT by editing $(SITE_CONFIG_FILE)."
@@ -230,244 +274,214 @@ instruct:
@echo "After that, you need to initialize RT's database by running"
@echo " 'make initialize-database'"
-# @echo " or by executing "
-# @echo " '$(RT_SBIN_PATH)/rt-setup-database --action init \ "
-# @echo " --dba $(DB_DBA) --prompt-for-dba-password'"
-
-
upgrade-instruct:
- @echo "Congratulations. RT has been upgraded. You should now check-over"
+ @echo "Congratulations. RT has been upgraded. You should now check over"
@echo "$(CONFIG_FILE) for any necessary site customization. Additionally,"
@echo "you should update RT's system database objects by running "
- @echo " ls etc/upgrade"
- @echo ""
- @echo "For each item in that directory whose name is greater than"
- @echo "your previously installed RT version, run:"
- @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action schema --datadir etc/upgrade/<version>"
- @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action acl --datadir etc/upgrade/<version>"
- @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action insert --datadir etc/upgrade/<version>"
+ @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action upgrade"
-upgrade: config-install dirs files-install fixperms upgrade-instruct
+upgrade: testdeps config-install dirs files-install fixperms upgrade-instruct
-upgrade-noclobber: config-install libs-install html-install bin-install local-install doc-install fixperms
+upgrade-noclobber: config-install dirs libs-install html-install bin-install local-install doc-install fixperms
# {{{ dependencies
+
+my_with_web_handlers= $(shell $(PERL) -e 'print join " ", map "--with-$$_", grep defined && length, split /,/, "$(WEB_HANDLER)"')
testdeps:
- $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE)
+ $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) $(my_with_web_handlers)
depends: fixdeps
fixdeps:
- $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE)
+ $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) $(my_with_web_handlers)
#}}}
# {{{ fixperms
fixperms:
# Make the libraries readable
- chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_PATH)
- chown -R $(LIBS_OWNER) $(DESTDIR)/$(RT_LIB_PATH)
- chgrp -R $(LIBS_GROUP) $(DESTDIR)/$(RT_LIB_PATH)
- chmod -R u+rwX,go-w,go+rX $(DESTDIR)/$(RT_LIB_PATH)
+ chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_PATH)
+ chown -R $(LIBS_OWNER) $(DESTDIR)$(RT_LIB_PATH)
+ chgrp -R $(LIBS_GROUP) $(DESTDIR)$(RT_LIB_PATH)
+ chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(RT_LIB_PATH)
- chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_BIN_PATH)
- chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_BIN_PATH)
+ chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH)
- chmod 0755 $(DESTDIR)/$(RT_ETC_PATH)
- chmod 0500 $(DESTDIR)/$(RT_ETC_PATH)/*
+ chmod 0755 $(DESTDIR)$(RT_ETC_PATH)
+ cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES)
#TODO: the config file should probably be able to have its
# owner set separately from the binaries.
- chown -R $(BIN_OWNER) $(DESTDIR)/$(RT_ETC_PATH)
- chgrp -R $(RTGROUP) $(DESTDIR)/$(RT_ETC_PATH)
+ chown -R $(BIN_OWNER) $(DESTDIR)$(RT_ETC_PATH)
+ chgrp -R $(RTGROUP) $(DESTDIR)$(RT_ETC_PATH)
+
+ chmod 0440 $(DESTDIR)$(CONFIG_FILE)
+ chmod 0640 $(DESTDIR)$(SITE_CONFIG_FILE)
- chmod 0550 $(DESTDIR)/$(CONFIG_FILE)
- chmod 0550 $(DESTDIR)/$(SITE_CONFIG_FILE)
+ # Make the system binaries
+ cd $(DESTDIR)$(RT_BIN_PATH) && ( chmod 0755 $(BINARIES) ; chown $(BIN_OWNER) $(BINARIES); chgrp $(RTGROUP) $(BINARIES))
- # Make the interfaces executable
- chown $(BIN_OWNER) $(BINARIES)
- chgrp $(RTGROUP) $(BINARIES)
- chmod 0755 $(BINARIES)
+ # 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 the web ui readable by all.
- chmod -R u+rwX,go-w,go+rX $(DESTDIR)/$(MASON_HTML_PATH) \
- $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) \
- $(DESTDIR)/$(LOCAL_LEXICON_PATH)
- chown -R $(LIBS_OWNER) $(DESTDIR)/$(MASON_HTML_PATH) \
- $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
- chgrp -R $(LIBS_GROUP) $(DESTDIR)/$(MASON_HTML_PATH) \
- $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
+ chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \
+ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \
+ $(DESTDIR)$(LOCAL_LEXICON_PATH)
+ chown -R $(LIBS_OWNER) $(DESTDIR)$(MASON_HTML_PATH) \
+ $(DESTDIR)$(MASON_LOCAL_HTML_PATH)
+ chgrp -R $(LIBS_GROUP) $(DESTDIR)$(MASON_HTML_PATH) \
+ $(DESTDIR)$(MASON_LOCAL_HTML_PATH)
# Make the web ui's data dir writable
- chmod 0770 $(DESTDIR)/$(MASON_DATA_PATH) \
- $(DESTDIR)/$(MASON_SESSION_PATH)
- chown -R $(WEB_USER) $(DESTDIR)/$(MASON_DATA_PATH) \
- $(DESTDIR)/$(MASON_SESSION_PATH)
- chgrp -R $(WEB_GROUP) $(DESTDIR)/$(MASON_DATA_PATH) \
- $(DESTDIR)/$(MASON_SESSION_PATH)
+ chmod 0770 $(DESTDIR)$(MASON_DATA_PATH) \
+ $(DESTDIR)$(MASON_SESSION_PATH)
+ chown -R $(WEB_USER) $(DESTDIR)$(MASON_DATA_PATH) \
+ $(DESTDIR)$(MASON_SESSION_PATH)
+ chgrp -R $(WEB_GROUP) $(DESTDIR)$(MASON_DATA_PATH) \
+ $(DESTDIR)$(MASON_SESSION_PATH)
# }}}
# {{{ dirs
dirs:
- mkdir -p $(DESTDIR)/$(RT_LOG_PATH)
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/cache
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/etc
- mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/obj
- mkdir -p $(DESTDIR)/$(MASON_SESSION_PATH)
- mkdir -p $(DESTDIR)/$(MASON_HTML_PATH)
- mkdir -p $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
- mkdir -p $(DESTDIR)/$(LOCAL_ETC_PATH)
- mkdir -p $(DESTDIR)/$(LOCAL_LIB_PATH)
- mkdir -p $(DESTDIR)/$(LOCAL_LEXICON_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH)
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/obj
+ $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_SESSION_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_LOCAL_HTML_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_ETC_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH)
+ $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH)
# }}}
-install: config-install dirs files-install fixperms instruct
+install: testdeps config-install dirs files-install fixperms instruct
-files-install: libs-install etc-install bin-install sbin-install html-install local-install doc-install
+files-install: libs-install etc-install config-install bin-install sbin-install html-install local-install doc-install
config-install:
- mkdir -p $(DESTDIR)/$(CONFIG_FILE_PATH)
- -cp etc/RT_Config.pm $(DESTDIR)/$(CONFIG_FILE)
- [ -f $(DESTDIR)/$(SITE_CONFIG_FILE) ] || cp etc/RT_SiteConfig.pm $(DESTDIR)/$(SITE_CONFIG_FILE)
-
- chgrp $(RTGROUP) $(DESTDIR)/$(CONFIG_FILE)
- chown $(BIN_OWNER) $(DESTDIR)/$(CONFIG_FILE)
-
- chgrp $(RTGROUP) $(DESTDIR)/$(SITE_CONFIG_FILE)
- chown $(BIN_OWNER) $(DESTDIR)/$(SITE_CONFIG_FILE)
-
- @echo "Installed configuration. about to install rt in $(RT_PATH)"
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH)
+@COMMENT_INPLACE_LAYOUT@ -$(INSTALL) -m 0440 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_Config.pm $(DESTDIR)$(CONFIG_FILE)
+@COMMENT_INPLACE_LAYOUT@ [ -f $(DESTDIR)$(SITE_CONFIG_FILE) ] || $(INSTALL) -m 0640 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_SiteConfig.pm $(DESTDIR)$(SITE_CONFIG_FILE)
+@COMMENT_INPLACE_LAYOUT@ @echo "Installed configuration. About to install RT in $(RT_PATH)"
test:
- $(PERL) -Ilib lib/t/00smoke.t
-
-regression-install: config-install
- $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)/$(CONFIG_FILE)
+ $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES)
-regression: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms apachectl run-regression
+parallel-test: test-parallel
-run-regression:
- prove -Ilib lib/t/setup_regression.t lib/t/autogen/ lib/t/regression/
-
-
-regression-noapache: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms start-httpd run-regression
-
-regression-quiet:
- $(PERL) sbin/regression_harness
-
-regression-instruct:
- @echo "About to wipe your database for a regression test. ABORT NOW with Control-C"
+test-parallel:
+ RT_TEST_PARALLEL=1 HARNESS_OPTIONS="j4" $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES)
+regression-install: config-install
+ $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)$(CONFIG_FILE)
# {{{ database-installation
-regression-reset-db:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' --force
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --dba-password ''
+regression-reset-db: force-dropdb
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba $(DB_DBA) --dba-password ''
initdb :: initialize-database
initialize-database:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --prompt-for-dba-password
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba $(DB_DBA) --prompt-for-dba-password
dropdb:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --prompt-for-dba-password
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba $(DB_DBA) --prompt-for-dba-password
+
+force-dropdb:
+ $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' --force
-insert-approval-data:
- $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/insert_approval_scrips
# }}}
# {{{ libs-install
libs-install:
- [ -d $(DESTDIR)/$(RT_LIB_PATH) ] || mkdir -p $(DESTDIR)/$(RT_LIB_PATH)
- -cp -rp lib/* $(DESTDIR)/$(RT_LIB_PATH)
+@COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_LIB_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LIB_PATH)
+@COMMENT_INPLACE_LAYOUT@ -( cd lib && find . -type d -print ) | while read dir ; do \
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_LIB_PATH)/$$dir" ; \
+@COMMENT_INPLACE_LAYOUT@ done
+@COMMENT_INPLACE_LAYOUT@ -( cd lib && find . -type f -print ) | while read file ; do \
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "lib/$$file" "$(DESTDIR)$(RT_LIB_PATH)/$$file" ; \
+@COMMENT_INPLACE_LAYOUT@ done
# }}}
# {{{ html-install
html-install:
- [ -d $(DESTDIR)/$(MASON_HTML_PATH) ] || mkdir -p $(DESTDIR)/$(MASON_HTML_PATH)
- -cp -rp ./html/* $(DESTDIR)/$(MASON_HTML_PATH)
+@COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(MASON_HTML_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH)
+@COMMENT_INPLACE_LAYOUT@ -( cd share/html && find . -type d -print ) | while read dir ; do \
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_HTML_PATH)/$$dir" ; \
+@COMMENT_INPLACE_LAYOUT@ done
+@COMMENT_INPLACE_LAYOUT@ -( cd share/html && find . -type f -print ) | while read file ; do \
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \
+@COMMENT_INPLACE_LAYOUT@ done
# }}}
# {{{ doc-install
doc-install:
- # RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir
- -[ -f $(DESTDIR)/$(RT_DOC_PATH) ] && rm $(DESTDIR)/$(RT_DOC_PATH)
- [ -d $(DESTDIR)/$(RT_DOC_PATH) ] || mkdir -p $(DESTDIR)/$(RT_DOC_PATH)
- -cp -rp ./README $(DESTDIR)/$(RT_DOC_PATH)
+@COMMENT_INPLACE_LAYOUT@ # RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir
+@COMMENT_INPLACE_LAYOUT@ -[ -f $(DESTDIR)$(RT_DOC_PATH) ] && rm $(DESTDIR)$(RT_DOC_PATH)
+@COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_DOC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_DOC_PATH)
+@COMMENT_INPLACE_LAYOUT@ -$(INSTALL) -m 0644 ./README $(DESTDIR)$(RT_DOC_PATH)/
# }}}
# {{{ etc-install
etc-install:
- mkdir -p $(DESTDIR)/$(RT_ETC_PATH)
- -cp -rp \
- etc/acl.* \
- etc/initialdata \
- etc/schema.* \
- $(DESTDIR)/$(RT_ETC_PATH)
+@COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_ETC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)
+@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
# }}}
# {{{ sbin-install
sbin-install:
- mkdir -p $(DESTDIR)/$(RT_SBIN_PATH)
- chmod +x \
- sbin/rt-dump-database \
- sbin/rt-setup-database \
- sbin/rt-test-dependencies
- -cp -rp \
- sbin/rt-dump-database \
- sbin/rt-setup-database \
- sbin/rt-test-dependencies \
- $(DESTDIR)/$(RT_SBIN_PATH)
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_SBIN_PATH)
+@COMMENT_INPLACE_LAYOUT@ for file in $(SYSTEM_BINARIES) ; do \
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "sbin/$$file" "$(DESTDIR)$(RT_SBIN_PATH)/" ; \
+@COMMENT_INPLACE_LAYOUT@ done
# }}}
# {{{ bin-install
bin-install:
- mkdir -p $(DESTDIR)/$(RT_BIN_PATH)
- chmod +x bin/rt-mailgate \
- bin/rt-crontool
- -cp -rp \
- bin/rt-mailgate \
- bin/mason_handler.fcgi \
- bin/mason_handler.scgi \
- bin/standalone_httpd \
- bin/mason_handler.svc \
- bin/rt \
- bin/webmux.pl \
- bin/rt-crontool \
- $(DESTDIR)/$(RT_BIN_PATH)
-# }}}
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_BIN_PATH)
+@COMMENT_INPLACE_LAYOUT@ for file in $(BINARIES) ; do \
+@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "bin/$$file" "$(DESTDIR)$(RT_BIN_PATH)/" ; \
+@COMMENT_INPLACE_LAYOUT@ done
# {{{ local-install
local-install:
- -cp -rp ./local/html/* $(DESTDIR)/$(MASON_LOCAL_HTML_PATH)
- -cp -rp ./local/po/* $(DESTDIR)/$(LOCAL_LEXICON_PATH)
- -cp -rp ./local/etc/* $(DESTDIR)/$(LOCAL_ETC_PATH)
+ -( cd local/html && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_LOCAL_HTML_PATH)/$$dir" ; \
+ done
+ -( cd local/html && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "local/html/$$file" "$(DESTDIR)$(MASON_LOCAL_HTML_PATH)/$$file" ; \
+ done
+ -( cd local/po && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(LOCAL_LEXICON_PATH)/$$dir" ; \
+ done
+ -( cd local/po && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "local/po/$$file" "$(DESTDIR)$(LOCAL_LEXICON_PATH)/$$file" ; \
+ done
+ -( cd local/etc && find . -type d -print ) | while read dir ; do \
+ $(INSTALL) -m 0755 -d "$(DESTDIR)$(LOCAL_ETC_PATH)/$$dir" ; \
+ done
+ -( cd local/etc && find . -type f -print ) | while read file ; do \
+ $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(LOCAL_ETC_PATH)/$$file" ; \
+ done
# }}}
# {{{ Best Practical Build targets -- no user servicable parts inside
-
-POD2TEST_EXE = sbin/extract_pod_tests
-
-testify-pods:
- [ -d lib/t/autogen ] || mkdir lib/t/autogen
- find lib -name \*pm | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE)
- find bin -type f | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE)
- find lib -name \*pm | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE)
- find bin -type f | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE)
-
-
-
regenerate-catalogs:
$(PERL) sbin/extract-message-catalog
@@ -486,9 +500,20 @@ reconfigure:
start-httpd:
$(PERL) bin/standalone_httpd &
+start-server:
+ $(PERL) sbin/rt-server &
+
apachectl:
$(APACHECTL) stop
sleep 10
$(APACHECTL) start
sleep 5
+
+SNAPSHOT=$(shell git describe --tags)
+snapshot:
+ git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf -
+ ( cd $(SNAPSHOT) && autoconf && ./configure )
+ tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/"
+ rm -fr "$(SNAPSHOT)/"
+
# }}}
diff --git a/rt/README b/rt/README
index 398d8c4..1f78515 100755
--- a/rt/README
+++ b/rt/README
@@ -15,14 +15,13 @@ us at sales@bestpractical.com.
March, 2005
-REQUIRED PACKAGES:
-------------------
+REQUIRED PACKAGES
+-----------------
-o Perl 5.8.3 or later (http://www.perl.com).
+o Perl 5.8.3 or later (http://www.perl.org).
- Perl versions prior to 5.8.3 contain bugs that could result
- in data corruption. We recommend strongly that you use 5.8.3
- or newer.
+ Perl versions prior to 5.8.3 contain bugs that could result
+ in data corruption. RT won't start on older versions.
o A supported SQL database
@@ -31,25 +30,21 @@ o A supported SQL database
Oracle 9iR2 or later.
SQLite 3.0. (Not recommended for production)
-o Apache version 1.3.x or 2.x (http://httpd.apache.org)
- with mod_perl -- (http://perl.apache.org )
- or a webserver with FastCGI support (www.fastcgi.com)
-
- Compiling mod_perl on Apache 1.3.x as a DSO has been known
- to have massive stability problems and is not recommended.
-
- mod_perl 1.x must be built with EVERYTHING=1
+o Apache version 1.3.x or 2.x (http://httpd.apache.org)
+ with mod_perl -- (http://perl.apache.org )
+ or with FastCGI -- (www.fastcgi.com)
+ or other webserver with FastCGI support
RT's FastCGI handler needs to access RT's configuration file.
-o Various and sundry perl modules
- A tool included with RT takes care of the installation of
- most of these automatically during the install process.
+o Various and sundry perl modules
+ A tool included with RT takes care of the installation of
+ most of these automatically during the install process.
- The tool supplied with RT uses Perl's CPAN system
- (http://www.cpan.org) to install modules. Some operating
- systems package all or some of the modules required, and
- you may be better off installing the modules that way.
+ The tool supplied with RT uses Perl's CPAN system
+ (http://www.cpan.org) to install modules. Some operating
+ systems package all or some of the modules required, and
+ you may be better off installing the modules that way.
GENERAL INSTALLATION
@@ -66,20 +61,27 @@ want to read a more comprehensive installation guide at:
tar xzvf rt.tar.gz -C /tmp
-2 Run the "configure" script.
+2 Run the "configure" script.
./configure --help to see the list of options
./configure (with the flags you want)
RT defaults to installing in /opt/rt3 with MySQL as its database. It
tries to guess which of www-data, www, apache or nobody your webserver
- will run as, but you can override that behavior.
+ will run as, but you can override that behavior. Note that the
+ default install directory in /opt/rt3 does not work under SELinux's
+ default configuration.
+
+ If you're upgrading RT then it worth to read UPGRADING document at this
+ moment. Some extension you're using may have been integrated into
+ core. It's recommended to use new clean directory when you're
+ upgrading to new major release (for example from 3.6.x to 3.8.x).
3 Make sure that RT has everything it needs to run.
Check for missing dependencies by running:
- make testdeps
+ make testdeps
4 If the script reports any missing dependencies, install them by hand
or run the following command as a user who has permission to install perl
@@ -87,65 +89,66 @@ want to read a more comprehensive installation guide at:
make fixdeps
+ Some modules require user input or environment variables to install correctly,
+ so it may be necessary to install them manually.
+
5 Check to make sure everything was installed properly.
-
+
make testdeps
It might sometimes be necessary to run "make fixdeps" several times
to install all necessary perl modules.
6 If this is a new installation:
-
+
As a user with permission to install RT in your chosen directory, type:
- make install
-
+ make install
+
Set up etc/RT_SiteConfig.pm in your RT installation directory.
- You'll need to add any values you need to change from the defaults
+ You'll need to add any values you need to change from the defaults
in etc/RT_Config.pm
As a user with permission to read RT's configuration file, type:
-
- make initialize-database
+
+ make initialize-database
If the make fails, type:
-
- make dropdb
+
+ make dropdb
and start over from step 6
7 If you're upgrading from RT 3.0 or newer:
- Read through the UPGRADING document included in this distribution.
-
+ Read through the UPGRADING document included in this distribution. If
+ you're using MySQL, read through UPGRADING.mysql as well.
+
It includes special upgrade instructions that will help you get this
new version of RT up and running smoothly.
As a user with permission to install RT in your chosen installation
- directory, type:
+ directory, type:
- make upgrade
+ make upgrade
This will install new binaries, config files and libraries without
- overwriting your RT database.
+ overwriting your RT database.
Update etc/RT_SiteConfig.pm in your RT installation directory.
- You'll need to add any new values you need to change from the defaults
+ You'll need to add any new values you need to change from the defaults
in etc/RT_Config.pm
- You may also need to update RT's database. To find out, type:
+ You may also need to update RT's database. You can do this with
+ the rt-setup-database tool. Replace root with the name of the dba
+ user on your database (root is the default for MySQL).
- ls etc/upgrade
+ You will be prompted for your previous version of RT (such as 3.6.4)
+ so that we can calculate which database updates to apply
- For each item in that directory whose name is greater than
- your previously installed RT version, run:
+ You should back up your database before running this command.
- /opt/rt3/sbin/rt-setup-database --action schema \
- --datadir etc/upgrade/<version>
- /opt/rt3/sbin/rt-setup-database --action acl \
- --datadir etc/upgrade/<version>
- /opt/rt3/sbin/rt-setup-database --action insert \
- --datadir etc/upgrade/<version>
+ /opt/rt3/sbin/rt-setup-database --dba root --prompt-for-dba-password --action upgrade
Clear mason cache dir:
@@ -156,57 +159,122 @@ want to read a more comprehensive installation guide at:
8 If you're upgrading from RT 2.0:
- Please upgrade from RT 2.0 to RT 3.2 and then follow the instructions
- for section 7.
+ Use the RT::Extension::RT2toRT3 module to upgrade to the current RT
+ release. You can download it from CPAN here:
+ http://search.cpan.org/dist/RT-Extension-RT2toRT3/
-9 Configure the email and web gateways, as described below.
+9 Configure the email and web gateways, as described below.
- NOTE: root's password for the web interface is "password"
+ NOTE: root's password for the web interface is "password"
(without the quotes). Not changing this is a SECURITY risk!
-
-10 Set up users, groups, queues, scrips and access control.
+
+10 Set up automated recurring tasks (cronjobs):
+
+ To generate email digest messages, you must arrange for the provided
+ utility to be run once daily, and once weekly. You may also want to
+ arrange for the rt-email-dashboards utility to be run hourly.
+ For example, if your task scheduler is cron, you can configure it as
+ follows:
+
+ crontab -e # as the RT administrator (probably root)
+ # insert the following lines:
+ 0 0 * * * /opt/rt3/sbin/rt-email-digest -m daily
+ 0 0 * * 0 /opt/rt3/sbin/rt-email-digest -m weekly
+ 0 * * * * /opt/rt3/sbin/rt-email-dashboards
+
+
+11 Set up users, groups, queues, scrips and access control.
Until you do this, RT will not be able to send or receive email,
nor will it be more than marginally functional. This is not an
optional step.
+
+
SETTING UP THE WEB INTERFACE
----------------------------
RT's web interface is based around HTML::Mason, which works well with
-the mod_perl perl interpreter within Apache httpd and FastCGI
+the mod_perl perl interpreter within Apache httpd and FastCGI.
+
+Once you've set up the web interface, consider setting up automatic
+logout for inactive sessions. For more information about how to do that,
+run
+ perldoc /path/to/rt/sbin/rt-clean-sessions
+
+
+mod_perl 1.xx
+-------------
+
+WARNING: mod_perl 1.99_xx is not supported.
-mod_perl
---------
+See below configuration instructions for mod_perl 2.x
-To install RT with mod_perl, you'll need to install the
-apache database connection cache. To make sure it's installed, run
+To install RT with mod_perl 1.x, you'll need to install the
+apache database connection cache. To make sure it's installed, run
the following command:
- perl -MCPAN -e'install Apache::DBI'
+ perl -MCPAN -e'install "Apache::DBI"'
-Next, add a few lines to your Apache configuration file, so that
+Next, add a few lines to your Apache 1.3.xx configuration file, so that
it knows where to find RT:
<VirtualHost your.ip.address>
ServerName your.rt.server.hostname
+
DocumentRoot /opt/rt3/share/html
AddDefaultCharset UTF-8
+ # optional apache logs for RT
+ # ErrorLog /opt/rt3/var/log/apache.error
+ # TransferLog /opt/rt3/var/log/apache.access
+
PerlModule Apache::DBI
PerlRequire /opt/rt3/bin/webmux.pl
+ <Location /NoAuth/images>
+ SetHandler default
+ </Location>
+ <Location />
+ SetHandler perl-script
+ PerlHandler RT::Mason
+ </Location>
+</VirtualHost>
+
+mod_perl 2.xx
+-------------
+
+WARNING: mod_perl 1.99_xx is not supported.
+
+Add a few lines to your Apache 2.xx configuration file, so that
+it knows where to find RT:
+
+<VirtualHost your.ip.address>
+ ServerName your.rt.server.hostname
+
+ DocumentRoot /opt/rt3/share/html
+ AddDefaultCharset UTF-8
+
+ # optional apache logs for RT
+ # ErrorLog /opt/rt3/var/log/apache2.error
+ # TransferLog /opt/rt3/var/log/apache2.access
+
+ PerlRequire "/opt/rt3/bin/webmux.pl"
+
+ <Location /NoAuth/images>
+ SetHandler default
+ </Location>
<Location />
- SetHandler perl-script
- PerlHandler RT::Mason
+ SetHandler perl-script
+ PerlResponseHandler RT::Mason
</Location>
</VirtualHost>
FastCGI
-------
-Installation with FastCGI is a little bit more complex and is documented
+Installation with FastCGI is a little bit more complex and is documented
in detail at http://wiki.bestpractical.com/index.cgi?FastCGIConfiguration
In the most basic configuration, you can set up your webserver to run
@@ -215,7 +283,7 @@ can read RT's configuration file. It's important to understand the security
implications of this configuration, which are discussed in the document
mentioned above.
-To install RT with FastCGI, you'll need to add a few lines to your
+To install RT with FastCGI, you'll need to add a few lines to your
Apache configuration file telling it about RT:
@@ -225,18 +293,18 @@ FastCgiIpcDir /tmp
FastCgiServer /opt/rt3/bin/mason_handler.fcgi -idle-timeout 120
<VirtualHost rt.example.com>
+ ServerName your.rt.server.hostname
# Pass through requests to display images
Alias /NoAuth/images/ /opt/rt3/share/html/NoAuth/images/
AddHandler fastcgi-script fcgi
ScriptAlias / /opt/rt3/bin/mason_handler.fcgi/
-
</VirtualHost>
-SETTING UP THE MAIL GATEWAY
+SETTING UP THE MAIL GATEWAY
---------------------------
To let email flow to your RT server, you need to add a few lines of
@@ -265,7 +333,7 @@ are available at http://www.bestpractical.com or by writing to
<sales@bestpractical.com>.
If you're interested in having RT extended or customized or would like more
-information about commercial support options, please send email to
+information about commercial support options, please send email to
<sales@bestpractical.com> to discuss rates and availability.
@@ -273,21 +341,21 @@ information about commercial support options, please send email to
RT WEBSITE
----------
-For current information about RT, check out the RT website at
- http://www.bestpractical.com/
+For current information about RT, check out the RT website at
+ http://www.bestpractical.com/
-You'll find screenshots, a pointer to the current version of RT, contributed
+You'll find screenshots, a pointer to the current version of RT, contributed
patches, and lots of other great stuff.
RT-USERS MAILING LIST
---------------------
+---------------------
To keep up to date on the latest RT tips, techniques and extensions,
you probably want to join the rt-users mailing list. Send a message to:
- rt-users-request@lists.bestpractical.com
+ rt-users-request@lists.bestpractical.com
with the body of the message consisting of only the word:
@@ -319,8 +387,8 @@ To report a bug, send email to rt-bugs@fsck.com.
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
diff --git a/rt/README.Oracle b/rt/README.Oracle
index 41bec82..9835b93 100644
--- a/rt/README.Oracle
+++ b/rt/README.Oracle
@@ -1,37 +1,41 @@
-In order to install RT with Oracle, the database must first be
-prepared. Ports of RT to other databases will automatically create
-the RT schema. This is not done for Oracle because most sites wishing
-to deploy RT on Oracle will have choose to make specific configuration
-of the RT user, for example to select the appropriate tablespace or to
-set up a resource profile. The RT user must have appropriate
-privileges similar to the resource and connect roles and must have the
-"query rewrite" system privilege.
- Here is an example of commands to create an RT user called "RT" with
-a password of "rt".
-
- create user rt identified by rt default tablespace users temporary
- tablespace temp;
- grant resource, connect, query rewrite to rt;
-
-
-RT should not run its schema creation as the Oracle DBA; instead the
-schema creation should be run as the RT user. To accomplish this set
-the --with-rt-dba configuration parameter to the RT user, not to the
-Oracle DBA. As an example, the following might be appropriate to
-configure RT for the example.com Oracle database.
-
- ./configure --prefix /usr/local/rt --with-db-type=Oracle \
- --with-db-dba=rt --with-db-database=example.com \
- --with-db-rt-user=rt \
- --with-db-rt-pass=rt
-
-
-As with all databases it is important to analyze the Schema and get
+Since RT 3.8.2 RT deployment on Oracle database has been simplified.
+
+You don't need to create anything beforehead. During installation
+an user is created and all RT's objects are created in his schema.
+User is created with the following parameters:
+
+ CREATE USER <DatabaseUser> IDENTIFIED BY <DatabasePassword>
+ DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP
+ QUOTA UNLIMITED ON USERS
+
+And as well granted with 'CONNECT' and 'RESOURCE'. It's up to you
+to do decide how to manage users, change quotas, table spaces and
+other.
+
+RT has option DatabaseName which is used to define SID of
+the Oracle database. You don't have to setup TWO_TASK environment
+variable or other helpers files for connection.
+
+Example:
+
+ ./configure \
+ --with-db-type=Oracle \
+ --with-db-database=XE \
+ --with-db-host=192.168.0.1 \
+ --with-db-dba=system \
+ --with-db-rt-user=rtdb1 \
+ --with-db-rt-pass=rtdb1secret \
+ ... other configure options ...
+
+This's all specifics of deployment on Oracle you should be aware
+of. To complete installation you must follow general instructions
+in the README file.
+
+As with all databases it is important to analyze the schema and get
current statistics after any significant dataset change. Oracle's
cost-based optimizer can provide particularly bad performance when the
schema statistics are significantly inaccurate. To analyze the schema
-of a user called rt, execute the following from withing Sqlplus.
+of a user called rt, execute the following from within sqlplus:
execute dbms_utility.analyze_schema( 'RT', 'estimate');
-
diff --git a/rt/UPGRADING b/rt/UPGRADING
index aca9bb0..1aaccdb 100644
--- a/rt/UPGRADING
+++ b/rt/UPGRADING
@@ -14,7 +14,149 @@ Before making any changes to your database, always ensure that you have a
complete current backup. If you don't have a current backup, you could
accidentally damage your database and lose data or worse.
+If you are using MySQL, please read the instructions in UPGRADING.mysql as
+well.
+
*******
+UPGRADING FROM 3.8.6 and earlier - Changes:
+
+For MySQL and Oracle users:
+If you upgraded from a version of RT earlier than 3.7.81 you should
+already have a CachedGroupMembers3 index on your CachedGroupMembers table.
+If you did a clean install of RT somewhere in the 3.8 release series, you
+most likely don't have this index. You can add it manually with
+
+ CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
+
+UPGRADING FROM 3.8.5 and earlier - Changes:
+
+You can now forward an entire Ticket history (in addition to specific transactions)
+but this requires a new Template called forward ticket. This template will be added
+when you run.
+
+/opt/rt3/sbin/rt-setup-database --dba root --prompt-for-dba-password --action upgrade
+
+Custom fields with categories can optionally be split out into
+hierarchical custom fields. If you wish to convert your old
+category-based custom fields, run:
+
+ perl etc/upgrade/split-out-cf-categories
+
+It will prompt you for each custom field with categories that it
+finds, and the name of the custom field to create to store the
+categories.
+
+If you were using the LocalizedDateTime RT::Date formatter from code
+and passing a DateFormat or TimeFormat argument, you need to switch from
+the strftime methods to the cldr methods (ie full_date_format becomes date_format_full)
+You may have done this from your RT_SiteConfig.pm by using
+Set($DateTimeFormat, { Format => 'LocalizedDateTime', DateFormat => 'medium_date_format' );
+
+UPGRADING FROM 3.8.3 and earlier - Changes:
+
+Arguments to the NotifyGroup Scrip Action need
+to be corrected in the database using
+
+/opt/rt3/sbin/rt-setup-database --dba root --prompt-for-dba-password --action upgrade
+
+
+UPGRADING FROM 3.8.2 and earlier - Changes:
+
+New scrip condition 'On Reject'.
+
+UPGRADING FROM 3.8.1 and earlier - Changes:
+
+= Oracle configuration =
+
+$DatabaseName is used as SID, so RT can connect without environment variables
+or tnsnames.ora file. Because of this change your RT instance may loose ability
+to connect to your DB, you have to update options and restart your web server.
+Example configuration:
+
+ Set($DatabaseType, 'Oracle');
+ Set($DatabaseHost, '192.168.0.1');
+ # undefined port => will try both 1526 and 1521
+ Set($DatabasePort, undef);
+ # ORACLE SID
+ Set($DatabaseName, 'XE');
+ # user for RT in Oracle, RT's tables in his schema
+ Set($DatabaseUser, 'test');
+ # above user's password
+ Set($DatabasePassword, 'test');
+
+= Rights changes =
+
+Now, if you want any user to be able to access the Approvals tools (a.k.a. the
+Approvals tab), you must grant that user the "ShowApprovalsTab" right.
+
+UPGRADING FROM 3.8.0 and earlier - Changes:
+
+Searches for bookmarked tickets have been reimplemented and syntax has
+been changed a little. Database upgrade script handles global 'Bookmarked Tickets'
+search only. New Ticket SQL "id = '__Bookmarked__'" is more flexible than
+old "__Bookmarks__". Old version is not valid Ticket SQL query, so people
+can not use it in the query builder and as well admins couldn't not edit
+format and other properties of the global saved search. Old version's been
+left for backwards compatibility.
+
+
+UPGRADING FROM 3.7.85 and earlier - Changes:
+
+We've proved that it's possible to delete pretty big set of records
+from CachedGroupMembers table without losing functionality. To delete
+record run the following script:
+
+ perl -I /opt/rt3/local/lib -I /opt/rt3/lib etc/upgrade/shrink_cgm_table.pl
+
+UPGRADING FROM 3.7.81 and earlier - Changes:
+
+RT::Extension::BrandedQueues has been integrated into core, so you MUST read
+upgrading instructions docs/queue_subject_tag.pod EVEN IF you have not used
+that extension.
+
+RT::Action::LinearEscalate extension has been integrated into core,
+so you MUST uninstall it before upgrading.
+
+RT::Extension::iCal has been integrated into core, so you MUST uninstall
+it before upgrading. In addition, you must run etc/upgrade/3.8-ical-extension
+script to convert old data.
+
+UPGRADING FROM 3.7.80 and earlier - Changes:
+
+Added indexes to CachedGroupMembers for MySQL and Oracle.
+If you have previously installed RTx-Shredder, you may already
+have these indexes. You can see the indexes by looking at
+etc/upgrade/3.7.81/schema.*
+
+These indexes may take a very long time to create.
+
+UPGRADING FROM 3.6.X and earlier - Changes:
+
+There are a lot of changes all over the code, so it's highly recommended to
+use fresh directory and then reinstalling your customizations.
+
+New schema for mysql 4.1 and greater, read more in UPGRADING.mysql.
+
+Config format has been made stricter. All options MUST be set using Set
+function, no more "@XXX = (...) unless @XXX;". Use "Set(@XXX, ...);" instead.
+
+RTx::Shredder extension has been integrated into core and features have been
+added, so you MUST uninstall it before upgrading or use a fresh directory for
+installation.
+
+New interface for making links in text clickable and doing other replacements
+has been integrated into RT.
+Read more in `perldoc docs/extending_clickable_links.pod`.
+
+New feature that allow users to forward messages. There is a new option in
+the config ($ForwardFromUser), new rights and a template.
+
+New global templates with "Error: " prefix in the name to make it possible
+to configure error messages sent to users.
+
+Read about GnuPG integration in `perldoc docs/gnupg_integration.pod`.
+
+New scrip conditions 'On Close' and 'On Reopen'.
UPGRADING FROM 3.5.7 and earlier - Changes:
@@ -65,7 +207,7 @@ UPGRADING FROM 3.0.x - Changes:
= Installation =
We recommend you move your existing /opt/rt3 tree completely out
-of the way before installating the newversion of RT, to make sure
+of the way before installing the new version of RT, to make sure
that you don't inadvertently leave old files hanging around.
= Rights changes =
@@ -85,7 +227,7 @@ It's worth checking out that resource if these instructions don't
work right for you
-RT 3.2 includes a signficant change to the FastCGI handler. It is
+RT 3.2 includes a significant change to the FastCGI handler. It is
no longer "setgid" to the RT group. Perl's setid support has been
deprecated for the last several releases and a number of platforms
don't bundle the "sperl" or "suidperl" executable by default.
@@ -220,3 +362,7 @@ Apache 1.3 on a Debian Linux server.
</VirtualHost>
+UPGRADING FROM 2.x:
+
+See http://search.cpan.org/dist/RT-Extension-RT2toRT3/
+
diff --git a/rt/UPGRADING.mysql b/rt/UPGRADING.mysql
new file mode 100644
index 0000000..accaa97
--- /dev/null
+++ b/rt/UPGRADING.mysql
@@ -0,0 +1,85 @@
+MySQL 4.1 and greater implemented changes in character set handling
+that may result in RT failures: multiple login requests, binary attachments
+breakage, image custom fields breakage and more.
+
+In order to resolve this issue we've changed our schema for MySQL 4.1 and
+greater versions.
+
+If you're installing a new RT then you can skip this file.
+
+If you're migrating from MySQL 4.0 to MySQL 4.1 and newer then you MUST follow
+instructions at the bottom of this file.
+
+If you're upgrading RT from versions prior to 3.8.0 then you MUST follow
+instructions below even if your old RT was installed on MySQL 4.1 or newer.
+
+=== Upgrading RT from versions prior to 3.8.0 ===
+
+1) Backup RT's database. Test that you can restore from this backup.
+
+2) Follow instructions in the README file to step 7.
+
+3) Apply changes described in step 7, but only up to version 3.7.87.
+
+4) Apply the RT 3.8 schema upgrades. Included in RT is the script
+etc/upgrade/upgrade-mysql-schema.pl that generates SQL queries to
+upgrade the database's schema. Run it:
+
+ perl etc/upgrade/upgrade-mysql-schema.pl db user pass > queries.sql
+
+If your mysql database is on a remote host, you can run the script
+like this instead
+
+ perl etc/upgrade/upgrade-mysql-schema.pl db:host user pass > queries.sql
+
+5) Check sanity of the SQL queries yourself or consult with your DBA.
+
+6) Apply the queries. Note that this step can take a while. It may require
+additional space on your hard drive comparable with size of your tables.
+
+ mysql -u root -p rt3 < queries.sql
+
+NOTE that 'rt3' is the default name of the RT database, change it in the
+command above if you're using a different name.
+
+This step should not produce any errors or warnings. If you see any, restore
+your database from the backup you made at step 1) and send a report to the
+rt-users@lists.bestpractical.com mailing list.
+
+7) Continue from step 7 in the README and apply other upgrades and
+follow the remaining steps.
+
+8) Test everything. The most important parts you have to test:
+* binary attachments, like docs, PDFs, and images
+* binary custom fields
+* everything that may contain characters other than ASCII
+
+=== Migrating from MySQL 4.0 to MySQL 4.1 and newer ===
+
+Upgrading both MySQL and RT at the same time is a bad idea. The process becomes
+more complicated, more time consuming, greater chance to fail, and much harder
+to debug.
+
+It's better to perform the upgrade in two steps. First upgrade MySQL from 4.0
+to 4.1 or newer. Remember the following:
+
+* Don't use utf8 as MySQL's character set. This is the default in some
+ Linux distributions.
+* import/export MySQL dumps using binary character set.
+
+When you're sure that everything is fine, you may upgrade RT using the
+instructions above.
+
+If you still want to upgrade MySQL and RT simultaneously, then you can
+do the following:
+
+1) Install a new RT on MySQL 4.1 or newer.
+2) Test that this new clean RT works on this new database.
+3) Dump the database from MySQL 4.0.
+4) Configure MySQL 4.1 and newer to use Latin1 as default character set
+ everywhere.
+5) Import the dump into the new MySQL server, replacing your empty database you
+ created at step 1.
+6) At this point you have RT 3.8.x code base using an old database. You can
+ upgrade RT using the instructions above.
+
diff --git a/rt/aclocal.m4 b/rt/aclocal.m4
index 9c6b641..0e041b6 100644
--- a/rt/aclocal.m4
+++ b/rt/aclocal.m4
@@ -26,11 +26,11 @@ dnl
AC_DEFUN([RT_ENABLE_LAYOUT],[
AC_ARG_ENABLE(layout,
AC_HELP_STRING([--enable-layout=LAYOUT],
- [Use a specific directory layout (Default: RT3)]),
+ [Use a specific directory layout (Default: relative)]),
LAYOUT=$enableval)
if test "x$LAYOUT" = "x"; then
- LAYOUT="RT3"
+ LAYOUT="relative"
fi
RT_LAYOUT($srcdir/config.layout, $LAYOUT)
AC_MSG_CHECKING(for chosen layout)
@@ -45,6 +45,11 @@ else
AC_SUBST(rt_layout_name)
AC_MSG_RESULT($rt_layout_name)
fi
+if test "x$rt_layout_name" != "xinplace" ; then
+ AC_SUBST([COMMENT_INPLACE_LAYOUT], [""])
+else
+ AC_SUBST([COMMENT_INPLACE_LAYOUT], [# ])
+fi
])
dnl
@@ -111,6 +116,7 @@ AC_DEFUN([RT_LAYOUT],[
RT_SUBST_EXPANDED_ARG(datadir)
RT_SUBST_EXPANDED_ARG(htmldir)
RT_SUBST_EXPANDED_ARG(manualdir)
+ RT_SUBST_EXPANDED_ARG(plugindir)
RT_SUBST_EXPANDED_ARG(localstatedir)
RT_SUBST_EXPANDED_ARG(logfiledir)
RT_SUBST_EXPANDED_ARG(masonstatedir)
diff --git a/rt/bin/mason_handler.fcgi b/rt/bin/mason_handler.fcgi
index 9bef9a8..4fe888a 100755
--- a/rt/bin/mason_handler.fcgi
+++ b/rt/bin/mason_handler.fcgi
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -51,12 +51,17 @@ package RT::Mason;
use strict;
use vars '$Handler';
use File::Basename;
-require ('/opt/rt3/bin/webmux.pl');
+
+require (dirname(__FILE__) . '/webmux.pl');
# Enter CGI::Fast mode, which should also work as a vanilla CGI script.
require CGI::Fast;
RT::Init();
+$Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+);
+
while ( my $cgi = CGI::Fast->new ) {
# the whole point of fastcgi requires the env to get reset here..
@@ -67,7 +72,7 @@ while ( my $cgi = CGI::Fast->new ) {
$ENV{'ENV'} = '' if defined $ENV{'ENV'};
$ENV{'IFS'} = '' if defined $ENV{'IFS'};
- Module::Refresh->refresh if $RT::DevelMode;
+ Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::ConnectToDatabase();
if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) )
diff --git a/rt/bin/mason_handler.fcgi.in b/rt/bin/mason_handler.fcgi.in
index 26842d3..48155f2 100644
--- a/rt/bin/mason_handler.fcgi.in
+++ b/rt/bin/mason_handler.fcgi.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -51,12 +51,17 @@ package RT::Mason;
use strict;
use vars '$Handler';
use File::Basename;
-require ('@RT_BIN_PATH@/webmux.pl');
+
+require (dirname(__FILE__) . '/webmux.pl');
# Enter CGI::Fast mode, which should also work as a vanilla CGI script.
require CGI::Fast;
RT::Init();
+$Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+);
+
while ( my $cgi = CGI::Fast->new ) {
# the whole point of fastcgi requires the env to get reset here..
@@ -67,7 +72,7 @@ while ( my $cgi = CGI::Fast->new ) {
$ENV{'ENV'} = '' if defined $ENV{'ENV'};
$ENV{'IFS'} = '' if defined $ENV{'IFS'};
- Module::Refresh->refresh if $RT::DevelMode;
+ Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::ConnectToDatabase();
if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) )
diff --git a/rt/bin/mason_handler.scgi b/rt/bin/mason_handler.scgi
index 6a3404e..248c57c 100755
--- a/rt/bin/mason_handler.scgi
+++ b/rt/bin/mason_handler.scgi
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -50,11 +50,17 @@ package RT::Mason;
use strict;
use vars '$Handler';
-require ('/opt/rt3/bin/webmux.pl');
+use File::Basename;
+
+require (dirname(__FILE__) . '/webmux.pl');
require CGI;
RT::Init();
+$Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+);
+
my $cgi = CGI->new;
if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) )
diff --git a/rt/bin/mason_handler.scgi.in b/rt/bin/mason_handler.scgi.in
index 2d77e8f..a853529 100644
--- a/rt/bin/mason_handler.scgi.in
+++ b/rt/bin/mason_handler.scgi.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -50,11 +50,17 @@ package RT::Mason;
use strict;
use vars '$Handler';
-require ('@RT_BIN_PATH@/webmux.pl');
+use File::Basename;
+
+require (dirname(__FILE__) . '/webmux.pl');
require CGI;
RT::Init();
+$Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+);
+
my $cgi = CGI->new;
if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) )
diff --git a/rt/bin/mason_handler.svc b/rt/bin/mason_handler.svc
index 86adfae..3cde20c 100644
--- a/rt/bin/mason_handler.svc
+++ b/rt/bin/mason_handler.svc
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -111,7 +111,7 @@ BEGIN {
$Win32::TieRegistry::Registry->{
'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\\'.
'W3SVC\Parameters\Virtual Roots\\'
- }->{$RT::WebPath || '/'} = "$path,,205";
+ }->{RT->Config->Get('WebPath') || '/'} = "$path,,205";
$Win32::TieRegistry::Registry->{
'HKEY_LOCAL_MACHINE\Software\FASTCGI\.html\\'
@@ -225,13 +225,18 @@ warn "Begin listening on $ENV{'FCGI_SOCKET_PATH'}\n";
require CGI::Fast;
RT::Init();
+$Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+);
+
# Response loop
while( my $cgi = CGI::Fast->new ) {
my $comp = $ENV{'PATH_INFO'};
$comp = $1 if ($comp =~ /^(.*)$/);
- $comp =~ s|^$RT::WebPath\b||i;
+ my $web_path = RT->Config->Get('WebPath');
+ $comp =~ s|^\Q$web_path\E\b||i;
$comp .= "index.html" if ($comp =~ /\/$/);
$comp =~ s/.pl$/.html/g;
diff --git a/rt/bin/mason_handler.svc.in b/rt/bin/mason_handler.svc.in
index 3bf851c..d7e68b3 100644
--- a/rt/bin/mason_handler.svc.in
+++ b/rt/bin/mason_handler.svc.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -111,7 +111,7 @@ BEGIN {
$Win32::TieRegistry::Registry->{
'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\\'.
'W3SVC\Parameters\Virtual Roots\\'
- }->{$RT::WebPath || '/'} = "$path,,205";
+ }->{RT->Config->Get('WebPath') || '/'} = "$path,,205";
$Win32::TieRegistry::Registry->{
'HKEY_LOCAL_MACHINE\Software\FASTCGI\.html\\'
@@ -225,13 +225,18 @@ warn "Begin listening on $ENV{'FCGI_SOCKET_PATH'}\n";
require CGI::Fast;
RT::Init();
+$Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+);
+
# Response loop
while( my $cgi = CGI::Fast->new ) {
my $comp = $ENV{'PATH_INFO'};
$comp = $1 if ($comp =~ /^(.*)$/);
- $comp =~ s|^$RT::WebPath\b||i;
+ my $web_path = RT->Config->Get('WebPath');
+ $comp =~ s|^\Q$web_path\E\b||i;
$comp .= "index.html" if ($comp =~ /\/$/);
$comp =~ s/.pl$/.html/g;
diff --git a/rt/bin/rt b/rt/bin/rt
index 3440d9e..9554a93 100755
--- a/rt/bin/rt
+++ b/rt/bin/rt
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -58,7 +58,19 @@ use Cwd;
use LWP;
use Text::ParseWords;
use HTTP::Request::Common;
+use HTTP::Headers;
use Term::ReadLine;
+use Time::Local; # used in prettyshow
+
+# strong (GSSAPI based) authentication is supported if the server does provide
+# it and the perl modules GSSAPI and LWP::Authen::Negotiate are installed
+# it can be suppressed by setting externalauth=0 (default is undef)
+eval { require GSSAPI };
+my $no_strong_auth = 'missing perl module GSSAPI';
+if ( ! $@ ) {
+ eval {require LWP::Authen::Negotiate};
+ $no_strong_auth = $@ ? 'missing perl module LWP::Authen::Negotiate' : 0;
+}
# We derive configuration information from hardwired defaults, dotfiles,
# and the RT* environment variables (in increasing order of precedence).
@@ -70,18 +82,27 @@ my $HOME = eval{(getpwuid($<))[7]}
|| ".";
my %config = (
(
- debug => 0,
- user => eval{(getpwuid($<))[0]} || $ENV{USER} || $ENV{USERNAME},
- passwd => undef,
- server => 'http://localhost/',
- query => undef,
- orderby => undef,
+ debug => 0,
+ user => eval{(getpwuid($<))[0]} || $ENV{USER} || $ENV{USERNAME},
+ passwd => undef,
+ server => 'http://localhost/',
+ query => "Status!='resolved' and Status!='rejected'",
+ orderby => 'id',
+ queue => undef,
+# to protect against unlimited searches a better choice would be
+# queue => 'Unknown_Queue',
+# setting externalauth => undef will try GSSAPI auth if the corresponding perl
+# modules are installed, externalauth => 0 is the backward compatible choice
+ externalauth => 0,
),
config_from_file($ENV{RTCONFIG} || ".rtrc"),
config_from_env()
);
my $session = new Session("$HOME/.rt_sessions");
my $REST = "$config{server}/REST/1.0";
+$no_strong_auth = 'switched off by externalauth=0'
+ if defined $config{externalauth};
+
my $prompt = 'rt> ';
@@ -91,11 +112,12 @@ sub DEBUG { warn @_ if $config{debug} >= shift }
# These regexes are used by command handlers to parse arguments.
# (XXX: Ask Autrijus how i18n changes these definitions.)
-my $name = '[\w.-]+';
-my $field = '(?:[a-zA-Z](?:[a-zA-Z0-9_-]|\s+)*)';
-my $label = '[a-zA-Z0-9@_.+-]+';
-my $labels = "(?:$label,)*$label";
-my $idlist = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+';
+my $name = '[\w.-]+';
+my $CF_name = '[\sa-z0-9_ :()/-]+';
+my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})';
+my $label = '[a-zA-Z0-9@_.+-]+';
+my $labels = "(?:$label,)*$label";
+my $idlist = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+';
# Our command line looks like this:
#
@@ -119,6 +141,8 @@ my %handlers = (
grant => ["grant", "revoke"],
take => ["take", "steal", "untake"],
quit => ["quit", "exit"],
+ setcommand => ["del", "delete", "give", "res", "resolve",
+ "subject"],
);
my %actions;
@@ -137,16 +161,16 @@ sub handler {
shift @ARGV if ($ARGV[0] eq 'rt'); # ignore a leading 'rt'
if (@ARGV && exists $actions{$ARGV[0]}) {
$action = shift @ARGV;
- $actions{$action}->($action);
+ return $actions{$action}->($action);
}
else {
print STDERR "rt: Unknown command '@ARGV'.\n";
print STDERR "rt: For help, run 'rt help'.\n";
+ return 1;
}
}
-handler();
-exit;
+exit handler();
# Handler functions.
# ------------------
@@ -166,10 +190,12 @@ sub shell {
sub version {
print "rt $VERSION\n";
+ return 0;
}
sub logout {
submit("$REST/logout") if defined $session->cookie;
+ return 0;
}
sub quit {
@@ -179,7 +205,8 @@ sub quit {
my %help;
sub help {
- my ($action, $type) = @_;
+ my ($action, $type, $rv) = @_;
+ $rv = defined $rv ? $rv : 0;
my $key;
# What help topics do we know about?
@@ -228,6 +255,7 @@ sub help {
}
print STDERR $help{$key}, "\n\n";
+ return $rv;
}
# Displays a list of objects that match some specified condition.
@@ -240,6 +268,9 @@ sub list {
$data{orderby} = $config{orderby};
}
my $bad = 0;
+ my $rawprint = 0;
+ my $reverse_sort = 0;
+ my $queue = $config{queue};
while (@ARGV) {
$_ = shift @ARGV;
@@ -255,6 +286,13 @@ sub list {
}
elsif (/^-([isl])$/) {
$data{format} = $1;
+ $rawprint = 1;
+ }
+ elsif (/^-q$/) {
+ $queue = shift @ARGV;
+ }
+ elsif (/^-r$/) {
+ $reverse_sort = 1;
}
elsif (/^-f$/) {
if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) {
@@ -262,6 +300,8 @@ sub list {
$bad = 1; last;
}
$data{fields} = shift @ARGV;
+ $data{format} = 's' if ! $data{format};
+ $rawprint = 1;
}
elsif (!defined $q && !/^-/) {
$q = $_;
@@ -272,10 +312,35 @@ sub list {
$bad = 1; last;
}
}
+ if ( ! $rawprint and ! exists $data{format} ) {
+ $data{format} = 'l';
+ }
+ if ( $reverse_sort and $data{orderby} =~ /^-/ ) {
+ $data{orderby} =~ s/^-/+/;
+ } elsif ($reverse_sort) {
+ $data{orderby} =~ s/^\+?(.*)/-$1/;
+ }
+
if (!defined $q) {
$q = $config{query};
}
+ $q =~ s/^#//; # get rid of leading hash
+ if ($q =~ /^\d+$/) {
+ # only digits, must be an id, formulate a correct query
+ $q = "id=$q" if $q =~ /^\d+$/;
+ } else {
+ # a string only, take it as an owner or requestor (quoting done later)
+ $q = "(Owner=$q or Requestor like $q) and $config{query}"
+ if $q =~ /^[\w\-]+$/;
+ # always add a query for a specific queue or (comma separated) queues
+ $queue =~ s/,/ or Queue=/g if $queue;
+ $q .= " and (Queue=$queue)" if $queue and $q and $q !~ /Queue\s*=/i
+ and $q !~ /id\s*=/i;
+ }
+ # correctly quote strings in a query
+ $q =~ s/(=|like\s)\s*([^'\d\s]\S*)\b/$1\'$2\'/g;
+
$type ||= "ticket";
unless ($type && defined $q) {
my $item = $type ? "query string" : "object type";
@@ -283,10 +348,17 @@ sub list {
$bad = 1;
}
#return help("list", $type) if $bad;
- return suggest_help("list", $type) if $bad;
+ return suggest_help("list", $type, $bad) if $bad;
+ print "Query:$q\n" if ! $rawprint;
my $r = submit("$REST/search/$type", { query => $q, %data });
- print $r->content;
+ if ( $rawprint ) {
+ print $r->content;
+ } else {
+ my $forms = Form::parse($r->content);
+ prettylist ($forms);
+ }
+ return 0;
}
# Displays selected information about a single object.
@@ -295,10 +367,12 @@ sub show {
my ($type, @objects, %data);
my $slurped = 0;
my $bad = 0;
+ my $rawprint = 0;
+ my $histspec;
while (@ARGV) {
$_ = shift @ARGV;
-
+ s/^#// if /^#\d+/; # get rid of leading hash
if (/^-t$/) {
$bad = 1, last unless defined($type = get_type_argument());
}
@@ -307,6 +381,7 @@ sub show {
}
elsif (/^-([isl])$/) {
$data{format} = $1;
+ $rawprint = 1;
}
elsif (/^-$/ && !$slurped) {
chomp(my @lines = <STDIN>);
@@ -325,9 +400,21 @@ sub show {
$bad = 1; last;
}
$data{fields} = shift @ARGV;
+ # option f requires short raw listing format
+ $data{format} = 's';
+ $rawprint = 1;
+ }
+ elsif (/^\d+$/ and my $spc2 = is_object_spec("ticket/$_", $type)) {
+ push @objects, $spc2;
+ $histspec = is_object_spec("ticket/$_/history", $type);
+ }
+ elsif (/^\d+\// and my $spc3 = is_object_spec("ticket/$_", $type)) {
+ push @objects, $spc3;
+ $rawprint = 1 if $_ =~ /\/content$/;
}
elsif (my $spec = is_object_spec($_, $type)) {
push @objects, $spec;
+ $rawprint = 1 if $_ =~ /\/content$/ or $_ !~ /^ticket/;
}
else {
my $datum = /^-/ ? "option" : "argument";
@@ -335,13 +422,17 @@ sub show {
$bad = 1; last;
}
}
+ if ( ! $rawprint ) {
+ push @objects, $histspec if $histspec;
+ $data{format} = 'l' if ! exists $data{format};
+ }
unless (@objects) {
whine "No objects specified.";
$bad = 1;
}
#return help("show", $type) if $bad;
- return suggest_help("show", $type) if $bad;
+ return suggest_help("show", $type, $bad) if $bad;
my $r = submit("$REST/show", { id => \@objects, %data });
my $c = $r->content;
@@ -350,8 +441,17 @@ sub show {
# show ticket/id/attachments/id/content > foo.tar.gz
if ($r->content_type !~ /^text\//) {
chomp($c);
+ $rawprint = 1;
+ }
+ if ( $rawprint ) {
+ print $c;
+ } else {
+ # I do not know how to get more than one form correctly returned
+ $c =~ s!^RT/[\d\.]+ 200 Ok$!--!mg;
+ my $forms = Form::parse($c);
+ prettyshow ($forms);
}
- print $c;
+ return 0;
}
# To create a new object, we ask the server for a form with the defaults
@@ -373,6 +473,7 @@ sub edit {
while (@ARGV) {
$_ = shift @ARGV;
+ s/^#// if /^#\d+/; # get rid of leading hash
if (/^-e$/) { $edit = 1 }
elsif (/^-i$/) { $input = 1 }
@@ -397,7 +498,7 @@ sub edit {
elsif (/^set$/i) {
my $vars = 0;
- while (@ARGV && $ARGV[0] =~ /^($field)([+-]?=)(.*)$/) {
+ while (@ARGV && $ARGV[0] =~ /^($field)([+-]?=)(.*)$/s) {
my ($key, $op, $val) = ($1, $2, $3);
my $hash = ($op eq '=') ? \%set : ($op =~ /^\+/) ? \%add : \%del;
@@ -415,7 +516,7 @@ sub edit {
my $vars = 0;
my $hash = ($_ eq "add") ? \%add : \%del;
- while (@ARGV && $ARGV[0] =~ /^($field)=(.*)$/) {
+ while (@ARGV && $ARGV[0] =~ /^($field)=(.*)$/s) {
my ($key, $val) = ($1, $2);
vpush($hash, lc $key, $val);
@@ -428,6 +529,9 @@ sub edit {
}
$cl = $vars;
}
+ elsif (/^\d+$/ and my $spc2 = is_object_spec("ticket/$_", $type)) {
+ push @objects, $spc2;
+ }
elsif (my $spec = is_object_spec($_, $type)) {
push @objects, $spec;
}
@@ -453,10 +557,10 @@ sub edit {
whine "What type of object do you want to create?";
$bad = 1;
}
- @objects = ("$type/new");
+ @objects = ("$type/new") if defined($type);
}
#return help($action, $type) if $bad;
- return suggest_help($action, $type) if $bad;
+ return suggest_help($action, $type, $bad) if $bad;
# We need a form to make changes to. We usually ask the server for
# one, but we can avoid that if we are fed one on STDIN, or if the
@@ -540,7 +644,7 @@ sub edit {
if ($output) {
print $text;
- return;
+ return 0;
}
my $synerr = 0;
@@ -566,11 +670,60 @@ EDIT:
}
else {
print $r->content;
- return;
+ return 0;
}
}
print $r->content;
}
+ return 0;
+}
+
+# handler for special edit commands. A valid edit command is constructed and
+# further work is delegated to the edit handler
+
+sub setcommand {
+ my ($action) = @_;
+ my ($id, $bad, $what);
+ if ( @ARGV ) {
+ $_ = shift @ARGV;
+ $id = $1 if (m|^(?:ticket/)?($idlist)$|);
+ }
+ if ( ! $id ) {
+ $bad = 1;
+ whine "No ticket number specified.";
+ }
+ if ( @ARGV ) {
+ if ($action eq 'subject') {
+ my $subject = '"'.join (" ", @ARGV).'"';
+ @ARGV = ();
+ $what = "subject=$subject";
+ } elsif ($action eq 'give') {
+ my $owner = shift @ARGV;
+ $what = "owner=$owner";
+ }
+ } else {
+ if ( $action eq 'delete' or $action eq 'del' ) {
+ $what = "status=deleted";
+ } elsif ($action eq 'resolve' or $action eq 'res' ) {
+ $what = "status=resolved";
+ } elsif ($action eq 'take' ) {
+ $what = "owner=$config{user}";
+ } elsif ($action eq 'untake') {
+ $what = "owner=Nobody";
+ }
+ }
+ if (@ARGV) {
+ $bad = 1;
+ whine "Extraneous arguments for action $action: @ARGV.";
+ }
+ if ( ! $what ) {
+ $bad = 1;
+ whine "unrecognized action $action.";
+ }
+ return help("edit", undef, $bad) if $bad;
+ @ARGV = ( $id, "set", $what );
+ print "Executing: rt edit @ARGV\n";
+ return edit("edit");
}
# We roll "comment" and "correspond" into the same handler.
@@ -595,7 +748,7 @@ sub comment {
if (/-a/) {
unless (-f $ARGV[0] && -r $ARGV[0]) {
whine "Cannot read attachment: '$ARGV[0]'.";
- return;
+ return 0;
}
push @files, shift @ARGV;
}
@@ -665,7 +818,7 @@ sub comment {
goto NEXT;
}
elsif (!@$o) {
- return;
+ return 0;
}
@files = @{ vsplit($k->{Attachment}) };
@@ -683,6 +836,7 @@ sub comment {
my $r = submit("$REST/ticket/$id/comment", \%data);
print $r->content;
+ return 0;
}
# Merge one ticket into another.
@@ -693,6 +847,7 @@ sub merge {
while (@ARGV) {
$_ = shift @ARGV;
+ s/^#// if /^#\d+/; # get rid of leading hash
if (/^\d+$/) {
push @id, $_;
@@ -709,16 +864,19 @@ sub merge {
$bad = 1;
}
#return help("merge", "ticket") if $bad;
- return suggest_help("merge", "ticket") if $bad;
+ return suggest_help("merge", "ticket", $bad) if $bad;
my $r = submit("$REST/ticket/$id[0]/merge/$id[1]");
print $r->content;
+ return 0;
}
# Link one ticket to another.
sub link {
my ($bad, $del, %data) = (0, 0, ());
+ my $type;
+
my %ltypes = map { lc $_ => $_ } qw(DependsOn DependedOnBy RefersTo
ReferredToBy HasMember MemberOf);
@@ -728,21 +886,26 @@ sub link {
if (/^-d$/) {
$del = 1;
}
+ elsif (/^-t$/) {
+ $bad = 1, last unless defined($type = get_type_argument());
+ }
else {
whine "Unrecognised option: '$_'.";
$bad = 1; last;
}
}
-
+
+ $type = "ticket" unless $type; # default type to tickets
+
if (@ARGV == 3) {
my ($from, $rel, $to) = @ARGV;
if ($from !~ /^\d+$/ || $to !~ /^\d+$/) {
my $bad = $from =~ /^\d+$/ ? $to : $from;
- whine "Invalid ticket ID '$bad' specified.";
+ whine "Invalid $type ID '$bad' specified.";
$bad = 1;
}
- unless (exists $ltypes{lc $rel}) {
- whine "Invalid link '$rel' specified.";
+ if (($type eq "ticket") && ( ! exists $ltypes{lc $rel})) {
+ whine "Invalid link '$rel' for type $type specified.";
$bad = 1;
}
%data = (id => $from, rel => $rel, to => $to, del => $del);
@@ -752,11 +915,11 @@ sub link {
whine "Too $bad arguments specified.";
$bad = 1;
}
- #return help("link", "ticket") if $bad;
- return suggest_help("link", "ticket") if $bad;
-
- my $r = submit("$REST/ticket/link", \%data);
+ return suggest_help("link", $type, $bad) if $bad;
+
+ my $r = submit("$REST/$type/link", \%data);
print $r->content;
+ return 0;
}
# Take/steal a ticket
@@ -791,10 +954,11 @@ sub take {
whine "Too $bad arguments specified.";
$bad = 1;
}
- return suggest_help("take", "ticket") if $bad;
+ return suggest_help("take", "ticket", $bad) if $bad;
my $r = submit("$REST/ticket/$id/take", \%data);
print $r->content;
+ return 0;
}
# Grant/revoke a user's rights.
@@ -807,6 +971,7 @@ sub grant {
}
$revoke = 1 if $cmd->{action} eq 'revoke';
+ return 0;
}
# Client <-> Server communication.
@@ -820,6 +985,7 @@ sub submit {
my ($uri, $content) = @_;
my ($req, $data);
my $ua = new LWP::UserAgent(agent => "RT/3.0b", env_proxy => 1);
+ my $h = HTTP::Headers->new;
# Did the caller specify any data to send with the request?
$data = [];
@@ -845,9 +1011,22 @@ sub submit {
}
# Should we send authentication information to start a new session?
- if (!defined $session->cookie) {
- push @$data, ( user => $config{user} );
- push @$data, ( pass => $config{passwd} || read_passwd() );
+ my $how = $config{server} =~ /^https/ ? 'over SSL' : 'unencrypted';
+ (my $server = $config{server}) =~ s/^.*\/\/([^\/]+)\/?/$1/;
+ if ($config{externalauth}) {
+ $h->authorization_basic($config{user}, $config{passwd} || read_passwd() );
+ print " Password will be sent to $server $how\n",
+ " Press CTRL-C now if you do not want to continue\n"
+ if ! $config{passwd};
+ } elsif ( $no_strong_auth ) {
+ if (!defined $session->cookie) {
+ print " Strong encryption not available, $no_strong_auth\n",
+ " Password will be sent to $server $how\n",
+ " Press CTRL-C now if you do not want to continue\n"
+ if ! $config{passwd};
+ push @$data, ( user => $config{user} );
+ push @$data, ( pass => $config{passwd} || read_passwd() );
+ }
}
# Now, we construct the request.
@@ -858,6 +1037,9 @@ sub submit {
$req = GET($uri);
}
$session->add_cookie_header($req);
+ if ($config{externalauth}) {
+ $req->header(%$h);
+ }
# Then we send the request and parse the response.
DEBUG(3, $req->as_string);
@@ -874,7 +1056,7 @@ sub submit {
$text =~ s/\n*$/\n/ if ($text);
# "RT/3.0.1 401 Credentials required"
- if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) {
+ if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) {
warn "rt: Malformed RT response from $config{server}.\n";
warn "(Rerun with RTDEBUG=3 for details.)\n" if $config{debug} < 3;
exit -1;
@@ -1043,7 +1225,7 @@ sub submit {
sub Form::parse {
my $state = 0;
my @forms = ();
- my @lines = split /\n/, $_[0];
+ my @lines = split /\n/, $_[0] if $_[0];
my ($c, $o, $k, $e) = ("", [], {}, "");
LINE:
@@ -1199,7 +1381,8 @@ sub Form::compose {
sub config_from_env {
my %env;
- foreach my $k ("DEBUG", "USER", "PASSWD", "SERVER", "QUERY", "ORDERBY") {
+ foreach my $k (qw(EXTERNALAUTH DEBUG USER PASSWD SERVER QUERY ORDERBY)) {
+
if (exists $ENV{"RT$k"}) {
$env{lc $k} = $ENV{"RT$k"};
}
@@ -1251,7 +1434,7 @@ sub parse_config_file {
chomp;
next if (/^#/ || /^\s*$/);
- if (/^(user|passwd|server|query|orderby)\s+(.*)\s?$/) {
+ if (/^(externalauth|user|passwd|server|query|orderby|queue)\s+(.*)\s?$/) {
$cfg{$1} = $2;
}
else {
@@ -1270,7 +1453,7 @@ sub whine {
my $sub = (caller(1))[3];
$sub =~ s/^main:://;
warn "rt: $sub: @_\n";
- return;
+ return 0;
}
sub read_passwd {
@@ -1331,7 +1514,37 @@ sub vsplit {
# XXX: This should become a real parser, à la Text::ParseWords.
$line =~ s/^\s+//;
$line =~ s/\s+$//;
- push @words, split /\s*,\s*/, $line;
+ my ( $a, $b ) = split /,/, $line, 2;
+
+ while ($a) {
+ no warnings 'uninitialized';
+ if ( $a =~ /^'/ ) {
+ my $s = $a;
+ while ( $a !~ /'$/ || ( $a !~ /(\\\\)+'$/
+ && $a =~ /(\\)+'$/ )) {
+ ( $a, $b ) = split /,/, $b, 2;
+ $s .= ',' . $a;
+ }
+ push @words, $s;
+ }
+ elsif ( $a =~ /^q{/ ) {
+ my $s = $a;
+ while ( $a !~ /}$/ ) {
+ ( $a, $b ) =
+ split /,/, $b, 2;
+ $s .= ',' . $a;
+ }
+ $s =~ s/^q{/'/;
+ $s =~ s/}/'/;
+ push @words, $s;
+ }
+ else {
+ push @words, $a;
+ }
+ ( $a, $b ) = split /,/, $b, 2;
+ }
+
+
}
return \@words;
@@ -1406,14 +1619,130 @@ sub is_object_spec {
$spec =~ s|^(?:$type/)?|$type/| if defined $type;
return $spec if ($spec =~ m{^$name/(?:$idlist|$labels)(?:/.*)?$}o);
- return;
+ return 0;
}
sub suggest_help {
- my ($action, $type) = @_;
+ my ($action, $type, $rv) = @_;
print STDERR "rt: For help, run 'rt help $action'.\n" if defined $action;
print STDERR "rt: For help, run 'rt help $type'.\n" if defined $type;
+ return $rv;
+}
+
+sub str2time {
+ # simplified procedure for parsing date, avoid loading Date::Parse
+ my %month = (Jan => 0, Feb => 1, Mar => 2, Apr => 3, May => 4, Jun => 5,
+ Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11);
+ $_ = shift;
+ my ($mon, $day, $hr, $min, $sec, $yr, $monstr);
+ if ( /(\w{3})\s+(\d\d?)\s+(\d\d):(\d\d):(\d\d)\s+(\d{4})/ ) {
+ ($monstr, $day, $hr, $min, $sec, $yr) = ($1, $2, $3, $4, $5, $6);
+ $mon = $month{$monstr} if exists $month{$monstr};
+ } elsif ( /(\d{4})-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)/ ) {
+ ($yr, $mon, $day, $hr, $min, $sec) = ($1, $2-1, $3, $4, $5, $6);
+ }
+ if ( $yr and defined $mon and $day and defined $hr and defined $sec ) {
+ return timelocal($sec,$min,$hr,$day,$mon,$yr);
+ } else {
+ print "Unknown date format in parsedate: $_\n";
+ return undef;
+ }
+}
+
+sub date_diff {
+ my ($old, $new) = @_;
+ $new = time() if ! $new;
+ $old = str2time($old) if $old !~ /^\d+$/;
+ $new = str2time($new) if $new !~ /^\d+$/;
+ return "???" if ! $old or ! $new;
+
+ my %seconds = (min => 60,
+ hr => 60*60,
+ day => 60*60*24,
+ wk => 60*60*24*7,
+ mth => 60*60*24*30,
+ yr => 60*60*24*365);
+
+ my $diff = $new - $old;
+ my $what = 'sec';
+ my $howmuch = $diff;
+ for ( sort {$seconds{$a} <=> $seconds{$b}} keys %seconds) {
+ last if $diff < $seconds{$_};
+ $what = $_;
+ $howmuch = int($diff/$seconds{$_});
+ }
+ return "$howmuch $what";
+}
+
+sub prettyshow {
+ my $forms = shift;
+ my ($form) = grep { exists $_->[2]->{Queue} } @$forms;
+ my $k = $form->[2];
+ # dates are in local time zone
+ if ( $k ) {
+ print "Date: $k->{Created}\n";
+ print "From: $k->{Requestors}\n";
+ print "Cc: $k->{Cc}\n" if $k->{Cc};
+ print "X-AdminCc: $k->{AdminCc}\n" if $k->{AdminCc};
+ print "X-Queue: $k->{Queue}\n";
+ print "Subject: [rt #$k->{id}] $k->{Subject}\n\n";
+ }
+ # dates in these attributes are in GMT and will be converted
+ foreach my $form (@$forms) {
+ my ($c, $o, $k, $e) = @$form;
+ next if ! $k->{id} or exists $k->{Queue};
+ if ( exists $k->{Created} ) {
+ my ($y,$m,$d,$hh,$mm,$ss) = ($k->{Created} =~ /(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/);
+ $m--;
+ my $created = localtime(timegm($ss,$mm,$hh,$d,$m,$y));
+ if ( exists $k->{Description} ) {
+ print "===> $k->{Description} on $created\n";
+ }
+ }
+ print "$k->{Content}\n" if exists $k->{Content} and
+ $k->{Content} !~ /to have no content$/ and
+ $k->{Type} ne 'EmailRecord';
+ print "$k->{Attachments}\n" if exists $k->{Attachments} and
+ $k->{Attachments};
+ }
+}
+
+sub prettylist {
+ my $forms = shift;
+ my $heading = "Ticket Owner Queue Age Told Status Requestor Subject\n";
+ $heading .= '-' x 80 . "\n";
+ my (@open, @me);
+ foreach my $form (@$forms) {
+ my ($c, $o, $k, $e) = @$form;
+ next if ! $k->{id};
+ print $heading if $heading;
+ $heading = '';
+ my $id = $k->{id};
+ $id =~ s!^ticket/!!;
+ my $owner = $k->{Owner} eq 'Nobody' ? '' : $k->{Owner};
+ $owner = substr($owner, 0, 5);
+ my $queue = substr($k->{Queue}, 0, 5);
+ my $subject = substr($k->{Subject}, 0, 30);
+ my $age = date_diff($k->{Created});
+ my $told = $k->{Told} eq 'Not set' ? '' : date_diff($k->{Told});
+ my $status = substr($k->{Status}, 0, 6);
+ my $requestor = substr($k->{Requestors}, 0, 9);
+ my $line = sprintf "%6s %5s %5s %6s %6s %-6s %-9s %-30s\n",
+ $id, $owner, $queue, $age, $told, $status, $requestor, $subject;
+ if ( $k->{Owner} eq 'Nobody' ) {
+ push @open, $line;
+ } elsif ($k->{Owner} eq $config{user} ) {
+ push @me, $line;
+ } else {
+ print $line;
+ }
+ }
+ print "No matches found\n" if $heading;
+ printf "========== my %2d open tickets ==========\n", scalar @me if @me;
+ print @me if @me;
+ printf "========== %2d unowned tickets ==========\n", scalar @open if @open;
+ print @open if @open;
}
__DATA__
@@ -1511,9 +1840,21 @@ Text:
- passwd <passwd> RT user's password.
- query <RT Query> Default RT Query for list action
- orderby <order> Default RT order for list action
+ - queue <queuename> Default RT Queue for list action
+ - externalauth <0|1> Use HTTP Basic authentication
+ explicitely setting externalauth to 0 inhibits also GSSAPI based
+ authentication, if LWP::Authen::Negotiate (and GSSAPI) is installed
Blank and #-commented lines are ignored.
+ Sample configuration file contents:
+
+ server https://rt.somewhere.com/
+ # more than one queue can be given (by adding a query expression)
+ queue helpdesk or queue=support
+ query Status != resolved and Owner=myaccount
+
+
Environment variables:
The following environment variables override any corresponding
@@ -1521,6 +1862,7 @@ Text:
- RTUSER
- RTPASSWD
+ - RTEXTERNALAUTH
- RTSERVER
- RTDEBUG Numeric debug level. (Set to 3 for full logs.)
- RTCONFIG Specifies a name other than ".rtrc" for the
@@ -1552,8 +1894,12 @@ Text:
"user/root,1-3,5,7-10,ams" is a list of ten users; the same list
can also be written as "user/ams,root,1,2,3,5,7,8-10".
+ If just a number is given as object specification it will be
+ interpreted as ticket/<number>
+
Examples:
+ 1 # the same as ticket/1
ticket/1
ticket/1/attachments
ticket/1/attachments/3
@@ -1591,6 +1937,22 @@ Text:
- rt help <action> (action-specific details)
- rt help types (a list of possible types)
+ The following actions on tickets are also possible:
+
+ - comment Add comments to a ticket
+ - correspond Add comments to a ticket
+ - merge Merge one ticket into another
+ - link Link one ticket to another
+ - take Take a ticket (steal and untake are possible as well)
+
+ For several edit set subcommands that are frequently used abbreviations
+ have been introduced. These abbreviations are:
+
+ - delete or del delete a ticket (edit set status=deleted)
+ - resolve or res resolve a ticket (edit set status=resolved)
+ - subject change subject of ticket (edit set subject=string)
+ - give give a ticket to somebody (edit set owner=user)
+
--
Title: types
@@ -1629,6 +1991,13 @@ Text:
- merge
- comment
- correspond
+ - take
+ - steal
+ - untake
+ - give
+ - resolve
+ - delete
+ - subject
Attributes:
@@ -1687,6 +2056,83 @@ Text:
--
+Title: subject
+Text:
+
+ Syntax:
+
+ rt subject <id> <new subject text>
+
+ Change the subject of a ticket whose ticket id is given.
+
+--
+
+Title: give
+Text:
+
+ Syntax:
+
+ rt give <id> <accountname>
+
+ Give a ticket whose ticket id is given to another user.
+
+--
+
+Title: steal
+Text:
+
+ rt steal <id>
+
+ Steal a ticket whose ticket id is given, i.e. set the owner to myself.
+
+--
+
+Title: take
+Text:
+
+ Syntax:
+
+ rt take <id>
+
+ Take a ticket whose ticket id is given, i.e. set the owner to myself.
+
+--
+
+Title: untake
+Text:
+
+ Syntax:
+
+ rt untake <id>
+
+ Untake a ticket whose ticket id is given, i.e. set the owner to Nobody.
+
+--
+
+Title: resolve
+Title: res
+Text:
+
+ Syntax:
+
+ rt resolve <id>
+
+ Resolves a ticket whose ticket id is given.
+
+--
+
+Title: delete
+Title: del
+Text:
+
+ Syntax:
+
+ rt delete <id>
+
+ Deletes a ticket whose ticket id is given.
+
+--
+
Title: logout
Text:
@@ -1725,24 +2171,30 @@ Text:
The following options control how much information is displayed
about each matching object:
- -i Numeric IDs only. (Useful for |rt edit -; see examples.)
- -s Short description.
- -l Longer description.
+ -i Numeric IDs only. (Useful for |rt edit -; see examples.)
+ -s Short description.
+ -l Longer description.
+ -f <field[s] Display only the fields listed and the ticket id
In addition,
- -o +/-<field> Orders the returned list by the specified field.
- -S var=val Submits the specified variable with the request.
- -t type Specifies the type of object to look for. (The
- default is "ticket".)
+ -o +/-<field> Orders the returned list by the specified field.
+ -r reversed order (useful if a default was given)
+ -q queue[s] restricts the query to the queue[s] given
+ multiple queues are separated by comma
+ -S var=val Submits the specified variable with the request.
+ -t type Specifies the type of object to look for. (The
+ default is "ticket".)
Examples:
- rt ls "Priority > 5 and Status='new'"
- rt ls -o +Subject "Priority > 5 and Status='new'"
- rt ls -o -Created "Priority > 5 and Status='new'"
+ rt ls "Priority > 5 and Status=new"
+ rt ls -o +Subject "Priority > 5 and Status=new"
+ rt ls -o -Created "Priority > 5 and Status=new"
rt ls -i "Priority > 5"|rt edit - set status=resolved
rt ls -t ticket "Subject like '[PATCH]%'"
+ rt ls -q systems
+ rt ls -f owner,subject
--
@@ -1760,16 +2212,28 @@ Text:
that refers to the links for tickets 1-3). Consult "rt help <type>"
and "rt help objects" for further details.
+ If only a number is given it will be interpreted as the objects
+ ticket/number and ticket/number/history
+
This command writes a set of forms representing the requested object
data to STDOUT.
Options:
+ The following options control how much information is displayed
+ about each matching object:
+
+ Without any formatting options prettyprinted output is generated.
+ Giving any of the two options below reverts to raw output.
+ -s Short description (history and attachments only).
+ -l Longer description (history and attachments only).
+
+ In addition,
- Read IDs from STDIN instead of the command-line.
-t type Specifies object type.
-f a,b,c Restrict the display to the specified fields.
-S var=val Submits the specified variable with the request.
- -v Verbose display
+
Examples:
rt show -t ticket -f id,subject,status 1-3
@@ -1777,8 +2241,9 @@ Text:
rt show ticket/3/attachments/29/content
rt show ticket/1-3/links
rt show ticket/3/history
- rt show -v ticket/3/history
+ rt show -l ticket/3/history
rt show -t user 2
+ rt show 2
--
@@ -1795,6 +2260,8 @@ Text:
Edits information corresponding to the specified objects.
+ A purely numeric object id nnn is translated into ticket/nnn
+
If, instead of "edit", an action of "new" or "create" is specified,
then a new object is created. In this case, no numeric object IDs
may be specified, but the syntax and behaviour remain otherwise
@@ -1834,7 +2301,7 @@ Text:
rt create -t ticket
# Non-interactive.
- rt edit ticket/1-3 add cc=foo@example.com set priority=3
+ rt edit ticket/1-3 add cc=foo@example.com set priority=3 due=tomorrow
rt ls -t tickets -i 'Priority > 5' | rt edit - set status=resolved
rt edit ticket/4 set priority=3 owner=bar@example.com \
add cc=foo@example.com bcc=quux@example.net
@@ -1930,6 +2397,35 @@ Text:
(XXX: I'm going to have to write it, aren't I?)
+ Until it exists here a short description of important constructs:
+
+ The two simple forms of query expressions are the constructs
+ Attribute like Value and
+ Attribute = Value or Attribute != Value
+
+ Whether attributes can be matched using like or using = is built into RT.
+ The attributes id, Queue, Owner Priority and Status require the = or !=
+ tests.
+
+ If Value is a string it must be quoted and may contain the wildcard
+ character %. If the string does not contain white space, the quoting
+ may however be omitted, it will be added automatically when parsing
+ the input.
+
+ Simple query expressions can be combined using and, or and parentheses
+ can be used to group expressions.
+
+ As a special case a standalone string (which would not form a correct
+ query) is transformed into (Owner='string' or Requestor like 'string%')
+ and added to the default query, i.e. the query is narrowed down.
+
+ If no Queue=name clause is contained in the query, a default clause
+ Queue=$config{queue} is added.
+
+ Examples:
+ Status!='resolved' and Status!='rejected'
+ (Owner='myaccount' or Requestor like 'myaccount%') and Status!='resolved'
+
--
Title: form
@@ -1984,10 +2480,43 @@ Title: example
Title: examples
Text:
- This section will be filled in with useful examples, once it becomes
- more clear what examples may be useful.
-
- For the moment, please consult examples provided with each action.
+ some useful examples
+
+ All the following list requests will be restricted to the default queue.
+ That can be changed by adding the option -q queuename
+
+ List all tickets that are not rejected/resolved
+ rt ls
+ List all tickets that are new and do not have an owner
+ rt ls "status=new and owner=nobody"
+ List all tickets which I have sent or of which I am the owner
+ rt ls myaccount
+ List all attributes for the ticket 6977 (ls -l instead of ls)
+ rt ls -l 6977
+ Show the content of ticket 6977
+ rt show 6977
+ Show all attributes in the ticket and in the history of the ticket
+ rt show -l 6977
+ Comment a ticket (mail is sent to all queue watchers, i.e. AdminCc's)
+ rt comment 6977
+ This will open an editor and lets you add text (attribute Text:)
+ Other attributes may be changed as well, but usually don't do that.
+ Correspond a ticket (like comment, but mail is also sent to requestors)
+ rt correspond 6977
+ Edit a ticket (generic change, interactive using the editor)
+ rt edit 6977
+ Change the owner of a ticket non interactively
+ rt edit 6977 set owner=myaccount
+ or
+ rt give 6977 account
+ or
+ rt take 6977
+ Change the status of a ticket
+ rt edit 6977 set status=resolved
+ or
+ rt resolve 6977
+ Change the status of all tickets I own to resolved !!!
+ rt ls -i owner=myaccount | rt edit - set status=resolved
--
diff --git a/rt/bin/rt-crontool b/rt/bin/rt-crontool
index 3171d11..563a272 100644
--- a/rt/bin/rt-crontool
+++ b/rt/bin/rt-crontool
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -49,9 +49,32 @@
use strict;
use Carp;
-use lib ("/opt/rt3/local/lib", "/opt/rt3/lib");
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
-package RT;
+}
+
+use RT;
use Getopt::Long;
@@ -62,54 +85,66 @@ use RT::Template;
#Clean out all the nasties from the environment
CleanEnv();
+my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg,
+ $template, $template_id, $transaction, $transaction_type, $help, $log, $verbose );
+GetOptions(
+ "search=s" => \$search,
+ "search-arg=s" => \$search_arg,
+ "condition=s" => \$condition,
+ "condition-arg=s" => \$condition_arg,
+ "action-arg=s" => \$action_arg,
+ "action=s" => \$action,
+ "template=s" => \$template,
+ "template-id=s" => \$template_id,
+ "transaction=s" => \$transaction,
+ "transaction-type=s" => \$transaction_type,
+ "log=s" => \$log,
+ "verbose|v" => \$verbose,
+ "help" => \$help,
+);
+
# Load the config file
RT::LoadConfig();
+# adjust logging to the screen according to options
+RT->Config->Set( LogToScreen => $log ) if $log;
+
#Connect to the database and get RT::SystemUser and RT::Nobody loaded
RT::Init();
#Get the current user all loaded
my $CurrentUser = GetCurrentUser();
+# show help even if there is no current user
+help() if $help;
+
unless ( $CurrentUser->Id ) {
print loc("No RT user found. Please consult your RT administrator.\n");
exit(1);
}
-my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg,
- $template_id, $transaction, $transaction_type, $help, $verbose );
-GetOptions( "search=s" => \$search,
- "search-arg=s" => \$search_arg,
- "condition=s" => \$condition,
- "condition-arg=s" => \$condition_arg,
- "action-arg=s" => \$action_arg,
- "action=s" => \$action,
- "template-id=s" => \$template_id,
- "transaction=s" => \$transaction,
- "transaction-type=s" => \$transaction_type,
- "help" => \$help,
- "verbose|v" => \$verbose );
-
-help() if $help or not $search or not $action;
-
-$transaction ||= 'first';
-unless ( $transaction =~ /^(first|last)$/i ) {
- print STDERR loc("--transaction argument could be only 'first' or 'last'");
+help() unless $search && $action;
+
+$transaction = lc( $transaction||'' );
+if ( $transaction && $transaction !~ /^(first|all|last)$/i ) {
+ print STDERR loc("--transaction argument could be only 'first', 'last' or 'all'");
+ exit 1;
+}
+
+if ( $template && $template_id ) {
+ print STDERR loc("--template-id is deprecated argument and can not be used with --template");
exit 1;
}
-$transaction = lc($transaction) eq 'first'? 'ASC': 'DESC';
+elsif ( $template_id ) {
+# don't warn
+ $template = $template_id;
+}
# We _must_ have a search object
load_module($search);
load_module($action) if ($action);
load_module($condition) if ($condition);
-# load template if specified
-my $template_obj;
-if ($template_id) {
- $template_obj = RT::Template->new($CurrentUser);
- $template_obj->Load($template_id);
-}
my $void_scrip = RT::Scrip->new( $CurrentUser );
my $void_scrip_action = RT::ScripAction->new( $CurrentUser );
@@ -132,9 +167,31 @@ my $tickets = $search->TicketsObj;
while ( my $ticket = $tickets->Next() ) {
print $ticket->Id() . ": " if ($verbose);
- my $transaction = get_transaction($ticket);
- print loc("Using transaction #[_1]...", $transaction->id)
- if $verbose && $transaction;
+ my $template_obj = get_template( $ticket );
+
+ if ( $transaction ) {
+ my $txns = get_transactions($ticket);
+ my $found = 0;
+ while ( my $txn = $txns->Next ) {
+ print loc("Using transaction #[_1]...", $txn->id)
+ if $verbose;
+ process($ticket, $txn, $template_obj);
+ $found = 1;
+ }
+ print loc("Couldn't find suitable transaction, skipping")
+ if $verbose && !$found;
+ } else {
+ print loc("Processing without transaction, some conditions and actions may fail. Consider using --transaction argument")
+ if $verbose;
+
+ process($ticket, undef, $template_obj);
+ }
+}
+
+sub process {
+ my $ticket = shift;
+ my $transaction = shift;
+ my $template_obj = shift;
# perform some more advanced check
if ($condition) {
@@ -149,8 +206,8 @@ while ( my $ticket = $tickets->Next() ) {
# if the condition doesn't apply, get out of here
- next unless ( $condition_obj->IsApplicable );
- print loc("Condition matches...") if ($verbose);
+ return unless $condition_obj->IsApplicable;
+ print loc("Condition matches...") if $verbose;
}
#prepare our action
@@ -165,34 +222,76 @@ while ( my $ticket = $tickets->Next() ) {
);
#if our preparation, move onto the next ticket
- next unless ( $action_obj->Prepare );
- print loc("Action prepared...") if ($verbose);
+ return unless $action_obj->Prepare;
+ print loc("Action prepared...") if $verbose;
#commit our action.
- next unless ( $action_obj->Commit );
- print loc("Action committed.\n") if ($verbose);
+ return unless $action_obj->Commit;
+ print loc("Action committed.\n") if $verbose;
}
-=head2 get_transaction
+=head2 get_transactions
-Takes ticket and returns its transaction acording to command
-line arguments C<--transaction> and <--transaction-type>.
+Takes ticket and returns L<RT::Transactions> object with transactions
+of the ticket according to command line arguments C<--transaction>
+and <--transaction-type>.
=cut
-sub get_transaction {
+sub get_transactions {
my $ticket = shift;
my $txns = $ticket->Transactions;
+ my $order = $transaction eq 'last'? 'DESC': 'ASC';
$txns->OrderByCols(
- { FIELD => 'Created', ORDER => $transaction },
- { FIELD => 'id', ORDER => $transaction },
+ { FIELD => 'Created', ORDER => $order },
+ { FIELD => 'id', ORDER => $order },
);
- $txns->Limit( FIELD => 'Type', VALUE => $transaction_type )
- if $transaction_type;
- $txns->RowsPerPage(1);
- return $txns->First;
+ if ( $transaction_type ) {
+ $transaction_type =~ s/^\s+//;
+ $transaction_type =~ s/\s+$//;
+ foreach my $type ( split /\s*,\s*/, $transaction_type ) {
+ $txns->Limit( FIELD => 'Type', VALUE => $type, ENTRYAGGREGATOR => 'OR' );
+ }
+ }
+ $txns->RowsPerPage(1) unless $transaction eq 'all';
+ return $txns;
}
+=head2 get_template
+
+Takes a ticket and returns a template according to command line options.
+
+=cut
+
+{ my $cache = undef;
+sub get_template {
+ my $ticket = shift;
+ return undef unless $template;
+
+ unless ( $template =~ /\D/ ) {
+ # by id
+ return $cache if $cache;
+
+ my $cache = RT::Template->new( $RT::SystemUser );
+ $cache->Load( $template );
+ die "Failed to load template '$template'"
+ unless $cache->id;
+ return $cache;
+ }
+
+ my $queue = $ticket->Queue;
+ return $cache->{ $queue } if $cache->{ $queue };
+
+ my $res = RT::Template->new( $RT::SystemUser );
+ $res->LoadQueueTemplate( Queue => $queue, Name => $template );
+ unless ( $res->id ) {
+ $res->LoadGlobalTemplate( $template );
+ die "Failed to load template '$template', either for queue #$queue or global"
+ unless $res->id;
+ }
+ return $cache->{ $queue } = $res;
+} }
+
# {{{ load_module
=head2 load_module
@@ -236,31 +335,33 @@ sub help {
. loc( "[_1] - Specify the search module you want to use", "--search" )
. "\n";
print " "
- . loc( "[_1] - An argument to pass to [_2]", "--search-argument", "--search" )
+ . loc( "[_1] - An argument to pass to [_2]", "--search-arg", "--search" )
. "\n";
print " "
. loc( "[_1] - Specify the condition module you want to use", "--condition" )
. "\n";
print " "
- . loc( "[_1] - An argument to pass to [_2]", "--condition-argument", "--condition" )
+ . loc( "[_1] - An argument to pass to [_2]", "--condition-arg", "--condition" )
. "\n";
print " "
. loc( "[_1] - Specify the action module you want to use", "--action" )
. "\n";
print " "
- . loc( "[_1] - An argument to pass to [_2]", "--action-argument", "--action" )
+ . loc( "[_1] - An argument to pass to [_2]", "--action-arg", "--action" )
. "\n";
print " "
- . loc( "[_1] - Specify id of the template you want to use", "--template-id" )
+ . loc( "[_1] - Specify name or id of template(s) you want to use", "--template" )
. "\n";
print " "
- . loc( "[_1] - Specify if you want to use either 'first' or 'last' transaction", "--transaction" )
+ . loc( "[_1] - Specify if you want to use either 'first', 'last' or 'all' transactions", "--transaction" )
. "\n";
print " "
- . loc( "[_1] - Specify the type of a transaction you want to use", "--transaction-type" )
+ . loc( "[_1] - Specify the comma separated list of transactions' types you want to use", "--transaction-type" )
. "\n";
print " "
+ . loc( "[_1] - Adjust LogToScreen config option", "--log" ) . "\n";
+ print " "
. loc( "[_1] - Output status updates to STDOUT", "--verbose" ) . "\n";
print "\n";
print "\n";
diff --git a/rt/bin/rt-crontool.in b/rt/bin/rt-crontool.in
index 07e7a8b..8401aca 100644
--- a/rt/bin/rt-crontool.in
+++ b/rt/bin/rt-crontool.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -49,9 +49,32 @@
use strict;
use Carp;
-use lib ("@LOCAL_LIB_PATH@", "@RT_LIB_PATH@");
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
-package RT;
+}
+
+use RT;
use Getopt::Long;
@@ -62,54 +85,66 @@ use RT::Template;
#Clean out all the nasties from the environment
CleanEnv();
+my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg,
+ $template, $template_id, $transaction, $transaction_type, $help, $log, $verbose );
+GetOptions(
+ "search=s" => \$search,
+ "search-arg=s" => \$search_arg,
+ "condition=s" => \$condition,
+ "condition-arg=s" => \$condition_arg,
+ "action-arg=s" => \$action_arg,
+ "action=s" => \$action,
+ "template=s" => \$template,
+ "template-id=s" => \$template_id,
+ "transaction=s" => \$transaction,
+ "transaction-type=s" => \$transaction_type,
+ "log=s" => \$log,
+ "verbose|v" => \$verbose,
+ "help" => \$help,
+);
+
# Load the config file
RT::LoadConfig();
+# adjust logging to the screen according to options
+RT->Config->Set( LogToScreen => $log ) if $log;
+
#Connect to the database and get RT::SystemUser and RT::Nobody loaded
RT::Init();
#Get the current user all loaded
my $CurrentUser = GetCurrentUser();
+# show help even if there is no current user
+help() if $help;
+
unless ( $CurrentUser->Id ) {
print loc("No RT user found. Please consult your RT administrator.\n");
exit(1);
}
-my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg,
- $template_id, $transaction, $transaction_type, $help, $verbose );
-GetOptions( "search=s" => \$search,
- "search-arg=s" => \$search_arg,
- "condition=s" => \$condition,
- "condition-arg=s" => \$condition_arg,
- "action-arg=s" => \$action_arg,
- "action=s" => \$action,
- "template-id=s" => \$template_id,
- "transaction=s" => \$transaction,
- "transaction-type=s" => \$transaction_type,
- "help" => \$help,
- "verbose|v" => \$verbose );
-
-help() if $help or not $search or not $action;
-
-$transaction ||= 'first';
-unless ( $transaction =~ /^(first|last)$/i ) {
- print STDERR loc("--transaction argument could be only 'first' or 'last'");
+help() unless $search && $action;
+
+$transaction = lc( $transaction||'' );
+if ( $transaction && $transaction !~ /^(first|all|last)$/i ) {
+ print STDERR loc("--transaction argument could be only 'first', 'last' or 'all'");
+ exit 1;
+}
+
+if ( $template && $template_id ) {
+ print STDERR loc("--template-id is deprecated argument and can not be used with --template");
exit 1;
}
-$transaction = lc($transaction) eq 'first'? 'ASC': 'DESC';
+elsif ( $template_id ) {
+# don't warn
+ $template = $template_id;
+}
# We _must_ have a search object
load_module($search);
load_module($action) if ($action);
load_module($condition) if ($condition);
-# load template if specified
-my $template_obj;
-if ($template_id) {
- $template_obj = RT::Template->new($CurrentUser);
- $template_obj->Load($template_id);
-}
my $void_scrip = RT::Scrip->new( $CurrentUser );
my $void_scrip_action = RT::ScripAction->new( $CurrentUser );
@@ -132,9 +167,31 @@ my $tickets = $search->TicketsObj;
while ( my $ticket = $tickets->Next() ) {
print $ticket->Id() . ": " if ($verbose);
- my $transaction = get_transaction($ticket);
- print loc("Using transaction #[_1]...", $transaction->id)
- if $verbose && $transaction;
+ my $template_obj = get_template( $ticket );
+
+ if ( $transaction ) {
+ my $txns = get_transactions($ticket);
+ my $found = 0;
+ while ( my $txn = $txns->Next ) {
+ print loc("Using transaction #[_1]...", $txn->id)
+ if $verbose;
+ process($ticket, $txn, $template_obj);
+ $found = 1;
+ }
+ print loc("Couldn't find suitable transaction, skipping")
+ if $verbose && !$found;
+ } else {
+ print loc("Processing without transaction, some conditions and actions may fail. Consider using --transaction argument")
+ if $verbose;
+
+ process($ticket, undef, $template_obj);
+ }
+}
+
+sub process {
+ my $ticket = shift;
+ my $transaction = shift;
+ my $template_obj = shift;
# perform some more advanced check
if ($condition) {
@@ -149,8 +206,8 @@ while ( my $ticket = $tickets->Next() ) {
# if the condition doesn't apply, get out of here
- next unless ( $condition_obj->IsApplicable );
- print loc("Condition matches...") if ($verbose);
+ return unless $condition_obj->IsApplicable;
+ print loc("Condition matches...") if $verbose;
}
#prepare our action
@@ -165,34 +222,76 @@ while ( my $ticket = $tickets->Next() ) {
);
#if our preparation, move onto the next ticket
- next unless ( $action_obj->Prepare );
- print loc("Action prepared...") if ($verbose);
+ return unless $action_obj->Prepare;
+ print loc("Action prepared...") if $verbose;
#commit our action.
- next unless ( $action_obj->Commit );
- print loc("Action committed.\n") if ($verbose);
+ return unless $action_obj->Commit;
+ print loc("Action committed.\n") if $verbose;
}
-=head2 get_transaction
+=head2 get_transactions
-Takes ticket and returns its transaction acording to command
-line arguments C<--transaction> and <--transaction-type>.
+Takes ticket and returns L<RT::Transactions> object with transactions
+of the ticket according to command line arguments C<--transaction>
+and <--transaction-type>.
=cut
-sub get_transaction {
+sub get_transactions {
my $ticket = shift;
my $txns = $ticket->Transactions;
+ my $order = $transaction eq 'last'? 'DESC': 'ASC';
$txns->OrderByCols(
- { FIELD => 'Created', ORDER => $transaction },
- { FIELD => 'id', ORDER => $transaction },
+ { FIELD => 'Created', ORDER => $order },
+ { FIELD => 'id', ORDER => $order },
);
- $txns->Limit( FIELD => 'Type', VALUE => $transaction_type )
- if $transaction_type;
- $txns->RowsPerPage(1);
- return $txns->First;
+ if ( $transaction_type ) {
+ $transaction_type =~ s/^\s+//;
+ $transaction_type =~ s/\s+$//;
+ foreach my $type ( split /\s*,\s*/, $transaction_type ) {
+ $txns->Limit( FIELD => 'Type', VALUE => $type, ENTRYAGGREGATOR => 'OR' );
+ }
+ }
+ $txns->RowsPerPage(1) unless $transaction eq 'all';
+ return $txns;
}
+=head2 get_template
+
+Takes a ticket and returns a template according to command line options.
+
+=cut
+
+{ my $cache = undef;
+sub get_template {
+ my $ticket = shift;
+ return undef unless $template;
+
+ unless ( $template =~ /\D/ ) {
+ # by id
+ return $cache if $cache;
+
+ my $cache = RT::Template->new( $RT::SystemUser );
+ $cache->Load( $template );
+ die "Failed to load template '$template'"
+ unless $cache->id;
+ return $cache;
+ }
+
+ my $queue = $ticket->Queue;
+ return $cache->{ $queue } if $cache->{ $queue };
+
+ my $res = RT::Template->new( $RT::SystemUser );
+ $res->LoadQueueTemplate( Queue => $queue, Name => $template );
+ unless ( $res->id ) {
+ $res->LoadGlobalTemplate( $template );
+ die "Failed to load template '$template', either for queue #$queue or global"
+ unless $res->id;
+ }
+ return $cache->{ $queue } = $res;
+} }
+
# {{{ load_module
=head2 load_module
@@ -236,31 +335,33 @@ sub help {
. loc( "[_1] - Specify the search module you want to use", "--search" )
. "\n";
print " "
- . loc( "[_1] - An argument to pass to [_2]", "--search-argument", "--search" )
+ . loc( "[_1] - An argument to pass to [_2]", "--search-arg", "--search" )
. "\n";
print " "
. loc( "[_1] - Specify the condition module you want to use", "--condition" )
. "\n";
print " "
- . loc( "[_1] - An argument to pass to [_2]", "--condition-argument", "--condition" )
+ . loc( "[_1] - An argument to pass to [_2]", "--condition-arg", "--condition" )
. "\n";
print " "
. loc( "[_1] - Specify the action module you want to use", "--action" )
. "\n";
print " "
- . loc( "[_1] - An argument to pass to [_2]", "--action-argument", "--action" )
+ . loc( "[_1] - An argument to pass to [_2]", "--action-arg", "--action" )
. "\n";
print " "
- . loc( "[_1] - Specify id of the template you want to use", "--template-id" )
+ . loc( "[_1] - Specify name or id of template(s) you want to use", "--template" )
. "\n";
print " "
- . loc( "[_1] - Specify if you want to use either 'first' or 'last' transaction", "--transaction" )
+ . loc( "[_1] - Specify if you want to use either 'first', 'last' or 'all' transactions", "--transaction" )
. "\n";
print " "
- . loc( "[_1] - Specify the type of a transaction you want to use", "--transaction-type" )
+ . loc( "[_1] - Specify the comma separated list of transactions' types you want to use", "--transaction-type" )
. "\n";
print " "
+ . loc( "[_1] - Adjust LogToScreen config option", "--log" ) . "\n";
+ print " "
. loc( "[_1] - Output status updates to STDOUT", "--verbose" ) . "\n";
print "\n";
print "\n";
diff --git a/rt/bin/rt-mailgate b/rt/bin/rt-mailgate
index a578b4b..abe7311 100755
--- a/rt/bin/rt-mailgate
+++ b/rt/bin/rt-mailgate
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -52,30 +52,34 @@ rt-mailgate - Mail interface to RT3.
=cut
-
use strict;
use warnings;
+
use Getopt::Long;
use LWP::UserAgent;
+use HTTP::Request::Common qw($DYNAMIC_FILE_UPLOAD);
+$DYNAMIC_FILE_UPLOAD = 1;
use constant EX_TEMPFAIL => 75;
+use constant BUFFER_SIZE => 8192;
my %opts;
GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s", "timeout=i" );
-if ( $opts{help} ) {
+if ( $opts{'help'} ) {
require Pod::Usage;
import Pod::Usage;
pod2usage("RT Mail Gateway\n");
exit 1; # Don't want to succeed if this is really an email!
}
-for (qw(url)) {
- die "$0 invoked improperly\n\nNo $_ provided to mail gateway!\n" unless $opts{$_};
+unless ( $opts{'url'} ) {
+ print STDERR "$0 invoked improperly\n\nNo 'url' provided to mail gateway!\n";
+ exit 1;
}
-my $ua = LWP::UserAgent->new();
-$ua->cookie_jar( { file => $opts{jar} } );
+my $ua = new LWP::UserAgent;
+$ua->cookie_jar( { file => $opts{'jar'} } ) if $opts{'jar'};
my %args = (
SessionType => 'REST', # Surpress login box
@@ -84,37 +88,54 @@ foreach ( qw(queue action) ) {
$args{$_} = $opts{$_} if defined $opts{$_};
};
-# Read the message in from STDIN
-$args{'message'} = do { local (@ARGV, $/); <> };
-
-unless ( $args{message} =~ /\S/ ) {
- print STDERR "$0: no message passed on STDIN!\n";
- exit 0;
+if ( ($opts{'extension'} || '') =~ /^(?:action|queue|ticket)$/i ) {
+ $args{ lc $opts{'extension'} } = $ENV{'EXTENSION'} || $opts{$opts{'extension'}};
+} elsif ( $opts{'extension'} && $ENV{'EXTENSION'} ) {
+ print STDERR "Value of the --extension argument is not action, queue or ticket"
+ .", but environment variable EXTENSION is also defined. The former is ignored.\n";
}
-if ($opts{'extension'}) {
- $args{$opts{'extension'}} = $ENV{'EXTENSION'};
+# add ENV{'EXTENSION'} as X-RT-MailExtension to the message header
+if ( my $value = ( $ENV{'EXTENSION'} || $opts{'extension'} ) ) {
+ # prepare value to avoid MIME format breakage
+ # strip trailing newline symbols
+ $value =~ s/(\r*\n)+$//;
+ # make a correct multiline header field,
+ # with tabs in the beginning of each line
+ $value =~ s/(\r*\n)/$1\t/g;
+ $opts{'headers'} .= "X-RT-Mail-Extension: $value\n";
}
-# Set up cookie here.
+# Read the message in from STDIN
+my %message = write_down_message();
+unless( $message{'filename'} ) {
+ $args{'message'} = [
+ undef, '',
+ 'Content-Type' => 'application/octet-stream',
+ Content => ${ $message{'content'} },
+ ];
+} else {
+ $args{'message'} = [
+ $message{'filename'}, '',
+ 'Content-Type' => 'application/octet-stream',
+ ];
+}
my $full_url = $opts{'url'}. "/REST/1.0/NoAuth/mail-gateway";
-warn "Connecting to $full_url" if $opts{'debug'};
+print STDERR "$0: connecting to $full_url\n" if $opts{'debug'};
-
-
-$ua->timeout(exists($opts{'timeout'}) ? $opts{'timeout'} : 180);
-my $r = $ua->post( $full_url, {%args} );
+$ua->timeout( exists( $opts{'timeout'} )? $opts{'timeout'}: 180 );
+my $r = $ua->post( $full_url, \%args, Content_Type => 'form-data' );
check_failure($r);
my $content = $r->content;
-warn $content if ($opts{debug});
+print STDERR $content ."\n" if $opts{'debug'};
if ( $content !~ /^(ok|not ok)/ ) {
# It's not the server's fault if the mail is bogus. We just want to know that
# *something* came out of the server.
- warn <<EOF;
+ print STDERR <<EOF;
RT server error.
The RT server which handled your email did not behave as expected. It
@@ -123,16 +144,19 @@ said:
$content
EOF
-exit EX_TEMPFAIL;
-
+ exit EX_TEMPFAIL;
}
exit;
+END {
+ unlink $message{'filename'} if $message{'filename'};
+}
+
sub check_failure {
my $r = shift;
- return if $r->is_success();
+ return if $r->is_success;
# This ordinarily oughtn't to be able to happen, suggests a bug in RT.
# So only load these heavy modules when they're needed.
@@ -140,17 +164,64 @@ sub check_failure {
require HTML::FormatText;
my $error = $r->error_as_HTML;
- my $tree = HTML::TreeBuilder->new->parse($error);
+ my $tree = HTML::TreeBuilder->new->parse( $error );
$tree->eof;
# It'll be a cold day in hell before RT sends out bounces in HTML
- my $formatter = HTML::FormatText->new( leftmargin => 0,
- rightmargin => 50 );
- warn $formatter->format($tree);
- warn "This is $0 exiting because of an undefined server error" if ($opts{debug});
+ my $formatter = HTML::FormatText->new(
+ leftmargin => 0,
+ rightmargin => 50,
+ );
+ print STDERR $formatter->format( $tree );
+ print STDERR "\n$0: undefined server error\n" if $opts{'debug'};
exit EX_TEMPFAIL;
}
+sub write_down_message {
+ use File::Temp qw(tempfile);
+
+ local $@;
+ my ($fh, $filename) = eval { tempfile() };
+ if ( !$fh || $@ ) {
+ print STDERR "$0: Couldn't create temp file, using memory\n";
+ print STDERR "error: $@\n" if $@;
+
+ my $message = \do { local (@ARGV, $/); <> };
+ unless ( $$message =~ /\S/ ) {
+ print STDERR "$0: no message passed on STDIN\n";
+ exit 0;
+ }
+ $$message = $opts{'headers'} . $$message if $opts{'headers'};
+ return ( content => $message );
+ }
+
+ binmode $fh;
+ binmode \*STDIN;
+
+ print $fh $opts{'headers'} if $opts{'headers'};
+
+ my $buf; my $empty = 1;
+ while(1) {
+ my $status = read \*STDIN, $buf, BUFFER_SIZE;
+ unless ( defined $status ) {
+ print STDERR "$0: couldn't read message: $!\n";
+ exit EX_TEMPFAIL;
+ } elsif ( !$status ) {
+ last;
+ }
+ $empty = 0 if $buf =~ /\S/;
+ print $fh $buf;
+ };
+ close $fh;
+
+ if ( $empty ) {
+ print STDERR "$0: no message passed on STDIN\n";
+ exit 0;
+ }
+ print STDERR "$0: temp file is '$filename'\n" if $opts{'debug'};
+ return (filename => $filename);
+}
+
=head1 SYNOPSIS
@@ -166,8 +237,6 @@ Usual invocation (from MTA):
-See C<man rt-mailgate> for more.
-
=head1 OPTIONS
=over 3
@@ -178,7 +247,7 @@ Specifies what happens to email sent to this alias. The avaliable
basic actions are: C<correspond>, C<comment>.
-If you've set the RT configuration variable B<$RT::UnsafeEmailCommands>,
+If you've set the RT configuration variable B<< C<UnsafeEmailCommands> >>,
C<take> and C<resolve> are also available. You can execute two or more
actions on a single message using a C<-> separated list. RT will execute
the actions in the listed order. For example you can use C<take-comment>,
@@ -259,13 +328,13 @@ there are situations in which you will want to authenticate users
before allowing them to communicate with the system. You can do this
via a plug-in mechanism in the RT configuration.
-You can set the array C<@RT::MailPlugins> to be a list of plugins. The
+You can set the array C<@MailPlugins> to be a list of plugins. The
default plugin, if this is not given, is C<Auth::MailFrom> - that is,
authentication of the person is done based on the C<From> header of the
email. If you have additional filters or authentication mechanisms, you
can list them here and they will be called in order:
- @RT::MailPlugins = (
+ Set( @MailPlugins =>
"Filter::SpamAssassin",
"Auth::LDAP",
# ...
@@ -273,12 +342,12 @@ can list them here and they will be called in order:
See the documentation for any additional plugins you have.
-You may also put Perl subroutines into the C<@RT::MailPlugins> array, if
+You may also put Perl subroutines into the C<@MailPlugins> array, if
they behave as described below.
=head1 WRITING PLUGINS
-What's actually going on in the above is that C<@RT::MailPlugins> is a
+What's actually going on in the above is that C<@MailPlugins> is a
list of Perl modules; RT prepends C<RT::Interface::Email::> to the name,
to form a package name, and then C<use>'s this module. The module is
expected to provide a C<GetCurrentUser> subroutine, which takes a hash of
@@ -319,5 +388,22 @@ the correspondent) or one, which is the normal mode of operation.
Additionally, if C<-1> is returned, then the processing of the plug-ins
stops immediately and the message is ignored.
+=head1 ENVIRONMENT
+
+=over 4
+
+=item EXTENSION
+
+Some MTAs will route mail sent to user-foo@host or user+foo@host to user@host
+and present "foo" in the environment variable C<EXTENSION>. Mailgate adds value
+of this variable to message in the C<X-RT-Mail-Extension> field of the message
+header.
+
+See also C<--extension> option. Note that value of the environment variable is
+always added to the message header when it's not empty even if C<--extension>
+option is not provided.
+
+=back 4
+
=cut
diff --git a/rt/bin/rt-mailgate.in b/rt/bin/rt-mailgate.in
index 49c4fac..b2343a0 100644
--- a/rt/bin/rt-mailgate.in
+++ b/rt/bin/rt-mailgate.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -52,30 +52,34 @@ rt-mailgate - Mail interface to RT3.
=cut
-
use strict;
use warnings;
+
use Getopt::Long;
use LWP::UserAgent;
+use HTTP::Request::Common qw($DYNAMIC_FILE_UPLOAD);
+$DYNAMIC_FILE_UPLOAD = 1;
use constant EX_TEMPFAIL => 75;
+use constant BUFFER_SIZE => 8192;
my %opts;
GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s", "timeout=i" );
-if ( $opts{help} ) {
+if ( $opts{'help'} ) {
require Pod::Usage;
import Pod::Usage;
pod2usage("RT Mail Gateway\n");
exit 1; # Don't want to succeed if this is really an email!
}
-for (qw(url)) {
- die "$0 invoked improperly\n\nNo $_ provided to mail gateway!\n" unless $opts{$_};
+unless ( $opts{'url'} ) {
+ print STDERR "$0 invoked improperly\n\nNo 'url' provided to mail gateway!\n";
+ exit 1;
}
-my $ua = LWP::UserAgent->new();
-$ua->cookie_jar( { file => $opts{jar} } );
+my $ua = new LWP::UserAgent;
+$ua->cookie_jar( { file => $opts{'jar'} } ) if $opts{'jar'};
my %args = (
SessionType => 'REST', # Surpress login box
@@ -84,37 +88,54 @@ foreach ( qw(queue action) ) {
$args{$_} = $opts{$_} if defined $opts{$_};
};
-# Read the message in from STDIN
-$args{'message'} = do { local (@ARGV, $/); <> };
-
-unless ( $args{message} =~ /\S/ ) {
- print STDERR "$0: no message passed on STDIN!\n";
- exit 0;
+if ( ($opts{'extension'} || '') =~ /^(?:action|queue|ticket)$/i ) {
+ $args{ lc $opts{'extension'} } = $ENV{'EXTENSION'} || $opts{$opts{'extension'}};
+} elsif ( $opts{'extension'} && $ENV{'EXTENSION'} ) {
+ print STDERR "Value of the --extension argument is not action, queue or ticket"
+ .", but environment variable EXTENSION is also defined. The former is ignored.\n";
}
-if ($opts{'extension'}) {
- $args{$opts{'extension'}} = $ENV{'EXTENSION'};
+# add ENV{'EXTENSION'} as X-RT-MailExtension to the message header
+if ( my $value = ( $ENV{'EXTENSION'} || $opts{'extension'} ) ) {
+ # prepare value to avoid MIME format breakage
+ # strip trailing newline symbols
+ $value =~ s/(\r*\n)+$//;
+ # make a correct multiline header field,
+ # with tabs in the beginning of each line
+ $value =~ s/(\r*\n)/$1\t/g;
+ $opts{'headers'} .= "X-RT-Mail-Extension: $value\n";
}
-# Set up cookie here.
+# Read the message in from STDIN
+my %message = write_down_message();
+unless( $message{'filename'} ) {
+ $args{'message'} = [
+ undef, '',
+ 'Content-Type' => 'application/octet-stream',
+ Content => ${ $message{'content'} },
+ ];
+} else {
+ $args{'message'} = [
+ $message{'filename'}, '',
+ 'Content-Type' => 'application/octet-stream',
+ ];
+}
my $full_url = $opts{'url'}. "/REST/1.0/NoAuth/mail-gateway";
-warn "Connecting to $full_url" if $opts{'debug'};
+print STDERR "$0: connecting to $full_url\n" if $opts{'debug'};
-
-
-$ua->timeout(exists($opts{'timeout'}) ? $opts{'timeout'} : 180);
-my $r = $ua->post( $full_url, {%args} );
+$ua->timeout( exists( $opts{'timeout'} )? $opts{'timeout'}: 180 );
+my $r = $ua->post( $full_url, \%args, Content_Type => 'form-data' );
check_failure($r);
my $content = $r->content;
-warn $content if ($opts{debug});
+print STDERR $content ."\n" if $opts{'debug'};
if ( $content !~ /^(ok|not ok)/ ) {
# It's not the server's fault if the mail is bogus. We just want to know that
# *something* came out of the server.
- warn <<EOF;
+ print STDERR <<EOF;
RT server error.
The RT server which handled your email did not behave as expected. It
@@ -123,16 +144,19 @@ said:
$content
EOF
-exit EX_TEMPFAIL;
-
+ exit EX_TEMPFAIL;
}
exit;
+END {
+ unlink $message{'filename'} if $message{'filename'};
+}
+
sub check_failure {
my $r = shift;
- return if $r->is_success();
+ return if $r->is_success;
# This ordinarily oughtn't to be able to happen, suggests a bug in RT.
# So only load these heavy modules when they're needed.
@@ -140,17 +164,64 @@ sub check_failure {
require HTML::FormatText;
my $error = $r->error_as_HTML;
- my $tree = HTML::TreeBuilder->new->parse($error);
+ my $tree = HTML::TreeBuilder->new->parse( $error );
$tree->eof;
# It'll be a cold day in hell before RT sends out bounces in HTML
- my $formatter = HTML::FormatText->new( leftmargin => 0,
- rightmargin => 50 );
- warn $formatter->format($tree);
- warn "This is $0 exiting because of an undefined server error" if ($opts{debug});
+ my $formatter = HTML::FormatText->new(
+ leftmargin => 0,
+ rightmargin => 50,
+ );
+ print STDERR $formatter->format( $tree );
+ print STDERR "\n$0: undefined server error\n" if $opts{'debug'};
exit EX_TEMPFAIL;
}
+sub write_down_message {
+ use File::Temp qw(tempfile);
+
+ local $@;
+ my ($fh, $filename) = eval { tempfile() };
+ if ( !$fh || $@ ) {
+ print STDERR "$0: Couldn't create temp file, using memory\n";
+ print STDERR "error: $@\n" if $@;
+
+ my $message = \do { local (@ARGV, $/); <> };
+ unless ( $$message =~ /\S/ ) {
+ print STDERR "$0: no message passed on STDIN\n";
+ exit 0;
+ }
+ $$message = $opts{'headers'} . $$message if $opts{'headers'};
+ return ( content => $message );
+ }
+
+ binmode $fh;
+ binmode \*STDIN;
+
+ print $fh $opts{'headers'} if $opts{'headers'};
+
+ my $buf; my $empty = 1;
+ while(1) {
+ my $status = read \*STDIN, $buf, BUFFER_SIZE;
+ unless ( defined $status ) {
+ print STDERR "$0: couldn't read message: $!\n";
+ exit EX_TEMPFAIL;
+ } elsif ( !$status ) {
+ last;
+ }
+ $empty = 0 if $buf =~ /\S/;
+ print $fh $buf;
+ };
+ close $fh;
+
+ if ( $empty ) {
+ print STDERR "$0: no message passed on STDIN\n";
+ exit 0;
+ }
+ print STDERR "$0: temp file is '$filename'\n" if $opts{'debug'};
+ return (filename => $filename);
+}
+
=head1 SYNOPSIS
@@ -166,8 +237,6 @@ Usual invocation (from MTA):
-See C<man rt-mailgate> for more.
-
=head1 OPTIONS
=over 3
@@ -178,7 +247,7 @@ Specifies what happens to email sent to this alias. The avaliable
basic actions are: C<correspond>, C<comment>.
-If you've set the RT configuration variable B<$RT::UnsafeEmailCommands>,
+If you've set the RT configuration variable B<< C<UnsafeEmailCommands> >>,
C<take> and C<resolve> are also available. You can execute two or more
actions on a single message using a C<-> separated list. RT will execute
the actions in the listed order. For example you can use C<take-comment>,
@@ -259,13 +328,13 @@ there are situations in which you will want to authenticate users
before allowing them to communicate with the system. You can do this
via a plug-in mechanism in the RT configuration.
-You can set the array C<@RT::MailPlugins> to be a list of plugins. The
+You can set the array C<@MailPlugins> to be a list of plugins. The
default plugin, if this is not given, is C<Auth::MailFrom> - that is,
authentication of the person is done based on the C<From> header of the
email. If you have additional filters or authentication mechanisms, you
can list them here and they will be called in order:
- @RT::MailPlugins = (
+ Set( @MailPlugins =>
"Filter::SpamAssassin",
"Auth::LDAP",
# ...
@@ -273,12 +342,12 @@ can list them here and they will be called in order:
See the documentation for any additional plugins you have.
-You may also put Perl subroutines into the C<@RT::MailPlugins> array, if
+You may also put Perl subroutines into the C<@MailPlugins> array, if
they behave as described below.
=head1 WRITING PLUGINS
-What's actually going on in the above is that C<@RT::MailPlugins> is a
+What's actually going on in the above is that C<@MailPlugins> is a
list of Perl modules; RT prepends C<RT::Interface::Email::> to the name,
to form a package name, and then C<use>'s this module. The module is
expected to provide a C<GetCurrentUser> subroutine, which takes a hash of
@@ -319,5 +388,22 @@ the correspondent) or one, which is the normal mode of operation.
Additionally, if C<-1> is returned, then the processing of the plug-ins
stops immediately and the message is ignored.
+=head1 ENVIRONMENT
+
+=over 4
+
+=item EXTENSION
+
+Some MTAs will route mail sent to user-foo@host or user+foo@host to user@host
+and present "foo" in the environment variable C<EXTENSION>. Mailgate adds value
+of this variable to message in the C<X-RT-Mail-Extension> field of the message
+header.
+
+See also C<--extension> option. Note that value of the environment variable is
+always added to the message header when it's not empty even if C<--extension>
+option is not provided.
+
+=back 4
+
=cut
diff --git a/rt/bin/rt.in b/rt/bin/rt.in
index 9731acf..aa3ac33 100644
--- a/rt/bin/rt.in
+++ b/rt/bin/rt.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -58,7 +58,19 @@ use Cwd;
use LWP;
use Text::ParseWords;
use HTTP::Request::Common;
+use HTTP::Headers;
use Term::ReadLine;
+use Time::Local; # used in prettyshow
+
+# strong (GSSAPI based) authentication is supported if the server does provide
+# it and the perl modules GSSAPI and LWP::Authen::Negotiate are installed
+# it can be suppressed by setting externalauth=0 (default is undef)
+eval { require GSSAPI };
+my $no_strong_auth = 'missing perl module GSSAPI';
+if ( ! $@ ) {
+ eval {require LWP::Authen::Negotiate};
+ $no_strong_auth = $@ ? 'missing perl module LWP::Authen::Negotiate' : 0;
+}
# We derive configuration information from hardwired defaults, dotfiles,
# and the RT* environment variables (in increasing order of precedence).
@@ -70,18 +82,27 @@ my $HOME = eval{(getpwuid($<))[7]}
|| ".";
my %config = (
(
- debug => 0,
- user => eval{(getpwuid($<))[0]} || $ENV{USER} || $ENV{USERNAME},
- passwd => undef,
- server => 'http://localhost/',
- query => undef,
- orderby => undef,
+ debug => 0,
+ user => eval{(getpwuid($<))[0]} || $ENV{USER} || $ENV{USERNAME},
+ passwd => undef,
+ server => 'http://localhost/',
+ query => "Status!='resolved' and Status!='rejected'",
+ orderby => 'id',
+ queue => undef,
+# to protect against unlimited searches a better choice would be
+# queue => 'Unknown_Queue',
+# setting externalauth => undef will try GSSAPI auth if the corresponding perl
+# modules are installed, externalauth => 0 is the backward compatible choice
+ externalauth => 0,
),
config_from_file($ENV{RTCONFIG} || ".rtrc"),
config_from_env()
);
my $session = new Session("$HOME/.rt_sessions");
my $REST = "$config{server}/REST/1.0";
+$no_strong_auth = 'switched off by externalauth=0'
+ if defined $config{externalauth};
+
my $prompt = 'rt> ';
@@ -91,11 +112,12 @@ sub DEBUG { warn @_ if $config{debug} >= shift }
# These regexes are used by command handlers to parse arguments.
# (XXX: Ask Autrijus how i18n changes these definitions.)
-my $name = '[\w.-]+';
-my $field = '(?:[a-zA-Z](?:[a-zA-Z0-9_-]|\s+)*)';
-my $label = '[a-zA-Z0-9@_.+-]+';
-my $labels = "(?:$label,)*$label";
-my $idlist = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+';
+my $name = '[\w.-]+';
+my $CF_name = '[\sa-z0-9_ :()/-]+';
+my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})';
+my $label = '[a-zA-Z0-9@_.+-]+';
+my $labels = "(?:$label,)*$label";
+my $idlist = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+';
# Our command line looks like this:
#
@@ -119,6 +141,8 @@ my %handlers = (
grant => ["grant", "revoke"],
take => ["take", "steal", "untake"],
quit => ["quit", "exit"],
+ setcommand => ["del", "delete", "give", "res", "resolve",
+ "subject"],
);
my %actions;
@@ -137,16 +161,16 @@ sub handler {
shift @ARGV if ($ARGV[0] eq 'rt'); # ignore a leading 'rt'
if (@ARGV && exists $actions{$ARGV[0]}) {
$action = shift @ARGV;
- $actions{$action}->($action);
+ return $actions{$action}->($action);
}
else {
print STDERR "rt: Unknown command '@ARGV'.\n";
print STDERR "rt: For help, run 'rt help'.\n";
+ return 1;
}
}
-handler();
-exit;
+exit handler();
# Handler functions.
# ------------------
@@ -166,10 +190,12 @@ sub shell {
sub version {
print "rt $VERSION\n";
+ return 0;
}
sub logout {
submit("$REST/logout") if defined $session->cookie;
+ return 0;
}
sub quit {
@@ -179,7 +205,8 @@ sub quit {
my %help;
sub help {
- my ($action, $type) = @_;
+ my ($action, $type, $rv) = @_;
+ $rv = defined $rv ? $rv : 0;
my $key;
# What help topics do we know about?
@@ -228,6 +255,7 @@ sub help {
}
print STDERR $help{$key}, "\n\n";
+ return $rv;
}
# Displays a list of objects that match some specified condition.
@@ -240,6 +268,9 @@ sub list {
$data{orderby} = $config{orderby};
}
my $bad = 0;
+ my $rawprint = 0;
+ my $reverse_sort = 0;
+ my $queue = $config{queue};
while (@ARGV) {
$_ = shift @ARGV;
@@ -255,6 +286,13 @@ sub list {
}
elsif (/^-([isl])$/) {
$data{format} = $1;
+ $rawprint = 1;
+ }
+ elsif (/^-q$/) {
+ $queue = shift @ARGV;
+ }
+ elsif (/^-r$/) {
+ $reverse_sort = 1;
}
elsif (/^-f$/) {
if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) {
@@ -262,6 +300,8 @@ sub list {
$bad = 1; last;
}
$data{fields} = shift @ARGV;
+ $data{format} = 's' if ! $data{format};
+ $rawprint = 1;
}
elsif (!defined $q && !/^-/) {
$q = $_;
@@ -272,10 +312,35 @@ sub list {
$bad = 1; last;
}
}
+ if ( ! $rawprint and ! exists $data{format} ) {
+ $data{format} = 'l';
+ }
+ if ( $reverse_sort and $data{orderby} =~ /^-/ ) {
+ $data{orderby} =~ s/^-/+/;
+ } elsif ($reverse_sort) {
+ $data{orderby} =~ s/^\+?(.*)/-$1/;
+ }
+
if (!defined $q) {
$q = $config{query};
}
+ $q =~ s/^#//; # get rid of leading hash
+ if ($q =~ /^\d+$/) {
+ # only digits, must be an id, formulate a correct query
+ $q = "id=$q" if $q =~ /^\d+$/;
+ } else {
+ # a string only, take it as an owner or requestor (quoting done later)
+ $q = "(Owner=$q or Requestor like $q) and $config{query}"
+ if $q =~ /^[\w\-]+$/;
+ # always add a query for a specific queue or (comma separated) queues
+ $queue =~ s/,/ or Queue=/g if $queue;
+ $q .= " and (Queue=$queue)" if $queue and $q and $q !~ /Queue\s*=/i
+ and $q !~ /id\s*=/i;
+ }
+ # correctly quote strings in a query
+ $q =~ s/(=|like\s)\s*([^'\d\s]\S*)\b/$1\'$2\'/g;
+
$type ||= "ticket";
unless ($type && defined $q) {
my $item = $type ? "query string" : "object type";
@@ -283,10 +348,17 @@ sub list {
$bad = 1;
}
#return help("list", $type) if $bad;
- return suggest_help("list", $type) if $bad;
+ return suggest_help("list", $type, $bad) if $bad;
+ print "Query:$q\n" if ! $rawprint;
my $r = submit("$REST/search/$type", { query => $q, %data });
- print $r->content;
+ if ( $rawprint ) {
+ print $r->content;
+ } else {
+ my $forms = Form::parse($r->content);
+ prettylist ($forms);
+ }
+ return 0;
}
# Displays selected information about a single object.
@@ -295,10 +367,12 @@ sub show {
my ($type, @objects, %data);
my $slurped = 0;
my $bad = 0;
+ my $rawprint = 0;
+ my $histspec;
while (@ARGV) {
$_ = shift @ARGV;
-
+ s/^#// if /^#\d+/; # get rid of leading hash
if (/^-t$/) {
$bad = 1, last unless defined($type = get_type_argument());
}
@@ -307,6 +381,7 @@ sub show {
}
elsif (/^-([isl])$/) {
$data{format} = $1;
+ $rawprint = 1;
}
elsif (/^-$/ && !$slurped) {
chomp(my @lines = <STDIN>);
@@ -325,9 +400,21 @@ sub show {
$bad = 1; last;
}
$data{fields} = shift @ARGV;
+ # option f requires short raw listing format
+ $data{format} = 's';
+ $rawprint = 1;
+ }
+ elsif (/^\d+$/ and my $spc2 = is_object_spec("ticket/$_", $type)) {
+ push @objects, $spc2;
+ $histspec = is_object_spec("ticket/$_/history", $type);
+ }
+ elsif (/^\d+\// and my $spc3 = is_object_spec("ticket/$_", $type)) {
+ push @objects, $spc3;
+ $rawprint = 1 if $_ =~ /\/content$/;
}
elsif (my $spec = is_object_spec($_, $type)) {
push @objects, $spec;
+ $rawprint = 1 if $_ =~ /\/content$/ or $_ !~ /^ticket/;
}
else {
my $datum = /^-/ ? "option" : "argument";
@@ -335,13 +422,17 @@ sub show {
$bad = 1; last;
}
}
+ if ( ! $rawprint ) {
+ push @objects, $histspec if $histspec;
+ $data{format} = 'l' if ! exists $data{format};
+ }
unless (@objects) {
whine "No objects specified.";
$bad = 1;
}
#return help("show", $type) if $bad;
- return suggest_help("show", $type) if $bad;
+ return suggest_help("show", $type, $bad) if $bad;
my $r = submit("$REST/show", { id => \@objects, %data });
my $c = $r->content;
@@ -350,8 +441,17 @@ sub show {
# show ticket/id/attachments/id/content > foo.tar.gz
if ($r->content_type !~ /^text\//) {
chomp($c);
+ $rawprint = 1;
+ }
+ if ( $rawprint ) {
+ print $c;
+ } else {
+ # I do not know how to get more than one form correctly returned
+ $c =~ s!^RT/[\d\.]+ 200 Ok$!--!mg;
+ my $forms = Form::parse($c);
+ prettyshow ($forms);
}
- print $c;
+ return 0;
}
# To create a new object, we ask the server for a form with the defaults
@@ -373,6 +473,7 @@ sub edit {
while (@ARGV) {
$_ = shift @ARGV;
+ s/^#// if /^#\d+/; # get rid of leading hash
if (/^-e$/) { $edit = 1 }
elsif (/^-i$/) { $input = 1 }
@@ -397,7 +498,7 @@ sub edit {
elsif (/^set$/i) {
my $vars = 0;
- while (@ARGV && $ARGV[0] =~ /^($field)([+-]?=)(.*)$/) {
+ while (@ARGV && $ARGV[0] =~ /^($field)([+-]?=)(.*)$/s) {
my ($key, $op, $val) = ($1, $2, $3);
my $hash = ($op eq '=') ? \%set : ($op =~ /^\+/) ? \%add : \%del;
@@ -415,7 +516,7 @@ sub edit {
my $vars = 0;
my $hash = ($_ eq "add") ? \%add : \%del;
- while (@ARGV && $ARGV[0] =~ /^($field)=(.*)$/) {
+ while (@ARGV && $ARGV[0] =~ /^($field)=(.*)$/s) {
my ($key, $val) = ($1, $2);
vpush($hash, lc $key, $val);
@@ -428,6 +529,9 @@ sub edit {
}
$cl = $vars;
}
+ elsif (/^\d+$/ and my $spc2 = is_object_spec("ticket/$_", $type)) {
+ push @objects, $spc2;
+ }
elsif (my $spec = is_object_spec($_, $type)) {
push @objects, $spec;
}
@@ -453,10 +557,10 @@ sub edit {
whine "What type of object do you want to create?";
$bad = 1;
}
- @objects = ("$type/new");
+ @objects = ("$type/new") if defined($type);
}
#return help($action, $type) if $bad;
- return suggest_help($action, $type) if $bad;
+ return suggest_help($action, $type, $bad) if $bad;
# We need a form to make changes to. We usually ask the server for
# one, but we can avoid that if we are fed one on STDIN, or if the
@@ -540,7 +644,7 @@ sub edit {
if ($output) {
print $text;
- return;
+ return 0;
}
my $synerr = 0;
@@ -566,11 +670,60 @@ EDIT:
}
else {
print $r->content;
- return;
+ return 0;
}
}
print $r->content;
}
+ return 0;
+}
+
+# handler for special edit commands. A valid edit command is constructed and
+# further work is delegated to the edit handler
+
+sub setcommand {
+ my ($action) = @_;
+ my ($id, $bad, $what);
+ if ( @ARGV ) {
+ $_ = shift @ARGV;
+ $id = $1 if (m|^(?:ticket/)?($idlist)$|);
+ }
+ if ( ! $id ) {
+ $bad = 1;
+ whine "No ticket number specified.";
+ }
+ if ( @ARGV ) {
+ if ($action eq 'subject') {
+ my $subject = '"'.join (" ", @ARGV).'"';
+ @ARGV = ();
+ $what = "subject=$subject";
+ } elsif ($action eq 'give') {
+ my $owner = shift @ARGV;
+ $what = "owner=$owner";
+ }
+ } else {
+ if ( $action eq 'delete' or $action eq 'del' ) {
+ $what = "status=deleted";
+ } elsif ($action eq 'resolve' or $action eq 'res' ) {
+ $what = "status=resolved";
+ } elsif ($action eq 'take' ) {
+ $what = "owner=$config{user}";
+ } elsif ($action eq 'untake') {
+ $what = "owner=Nobody";
+ }
+ }
+ if (@ARGV) {
+ $bad = 1;
+ whine "Extraneous arguments for action $action: @ARGV.";
+ }
+ if ( ! $what ) {
+ $bad = 1;
+ whine "unrecognized action $action.";
+ }
+ return help("edit", undef, $bad) if $bad;
+ @ARGV = ( $id, "set", $what );
+ print "Executing: rt edit @ARGV\n";
+ return edit("edit");
}
# We roll "comment" and "correspond" into the same handler.
@@ -595,7 +748,7 @@ sub comment {
if (/-a/) {
unless (-f $ARGV[0] && -r $ARGV[0]) {
whine "Cannot read attachment: '$ARGV[0]'.";
- return;
+ return 0;
}
push @files, shift @ARGV;
}
@@ -665,7 +818,7 @@ sub comment {
goto NEXT;
}
elsif (!@$o) {
- return;
+ return 0;
}
@files = @{ vsplit($k->{Attachment}) };
@@ -683,6 +836,7 @@ sub comment {
my $r = submit("$REST/ticket/$id/comment", \%data);
print $r->content;
+ return 0;
}
# Merge one ticket into another.
@@ -693,6 +847,7 @@ sub merge {
while (@ARGV) {
$_ = shift @ARGV;
+ s/^#// if /^#\d+/; # get rid of leading hash
if (/^\d+$/) {
push @id, $_;
@@ -709,16 +864,19 @@ sub merge {
$bad = 1;
}
#return help("merge", "ticket") if $bad;
- return suggest_help("merge", "ticket") if $bad;
+ return suggest_help("merge", "ticket", $bad) if $bad;
my $r = submit("$REST/ticket/$id[0]/merge/$id[1]");
print $r->content;
+ return 0;
}
# Link one ticket to another.
sub link {
my ($bad, $del, %data) = (0, 0, ());
+ my $type;
+
my %ltypes = map { lc $_ => $_ } qw(DependsOn DependedOnBy RefersTo
ReferredToBy HasMember MemberOf);
@@ -728,21 +886,26 @@ sub link {
if (/^-d$/) {
$del = 1;
}
+ elsif (/^-t$/) {
+ $bad = 1, last unless defined($type = get_type_argument());
+ }
else {
whine "Unrecognised option: '$_'.";
$bad = 1; last;
}
}
-
+
+ $type = "ticket" unless $type; # default type to tickets
+
if (@ARGV == 3) {
my ($from, $rel, $to) = @ARGV;
if ($from !~ /^\d+$/ || $to !~ /^\d+$/) {
my $bad = $from =~ /^\d+$/ ? $to : $from;
- whine "Invalid ticket ID '$bad' specified.";
+ whine "Invalid $type ID '$bad' specified.";
$bad = 1;
}
- unless (exists $ltypes{lc $rel}) {
- whine "Invalid link '$rel' specified.";
+ if (($type eq "ticket") && ( ! exists $ltypes{lc $rel})) {
+ whine "Invalid link '$rel' for type $type specified.";
$bad = 1;
}
%data = (id => $from, rel => $rel, to => $to, del => $del);
@@ -752,11 +915,11 @@ sub link {
whine "Too $bad arguments specified.";
$bad = 1;
}
- #return help("link", "ticket") if $bad;
- return suggest_help("link", "ticket") if $bad;
-
- my $r = submit("$REST/ticket/link", \%data);
+ return suggest_help("link", $type, $bad) if $bad;
+
+ my $r = submit("$REST/$type/link", \%data);
print $r->content;
+ return 0;
}
# Take/steal a ticket
@@ -791,10 +954,11 @@ sub take {
whine "Too $bad arguments specified.";
$bad = 1;
}
- return suggest_help("take", "ticket") if $bad;
+ return suggest_help("take", "ticket", $bad) if $bad;
my $r = submit("$REST/ticket/$id/take", \%data);
print $r->content;
+ return 0;
}
# Grant/revoke a user's rights.
@@ -807,6 +971,7 @@ sub grant {
}
$revoke = 1 if $cmd->{action} eq 'revoke';
+ return 0;
}
# Client <-> Server communication.
@@ -820,6 +985,7 @@ sub submit {
my ($uri, $content) = @_;
my ($req, $data);
my $ua = new LWP::UserAgent(agent => "RT/3.0b", env_proxy => 1);
+ my $h = HTTP::Headers->new;
# Did the caller specify any data to send with the request?
$data = [];
@@ -845,9 +1011,22 @@ sub submit {
}
# Should we send authentication information to start a new session?
- if (!defined $session->cookie) {
- push @$data, ( user => $config{user} );
- push @$data, ( pass => $config{passwd} || read_passwd() );
+ my $how = $config{server} =~ /^https/ ? 'over SSL' : 'unencrypted';
+ (my $server = $config{server}) =~ s/^.*\/\/([^\/]+)\/?/$1/;
+ if ($config{externalauth}) {
+ $h->authorization_basic($config{user}, $config{passwd} || read_passwd() );
+ print " Password will be sent to $server $how\n",
+ " Press CTRL-C now if you do not want to continue\n"
+ if ! $config{passwd};
+ } elsif ( $no_strong_auth ) {
+ if (!defined $session->cookie) {
+ print " Strong encryption not available, $no_strong_auth\n",
+ " Password will be sent to $server $how\n",
+ " Press CTRL-C now if you do not want to continue\n"
+ if ! $config{passwd};
+ push @$data, ( user => $config{user} );
+ push @$data, ( pass => $config{passwd} || read_passwd() );
+ }
}
# Now, we construct the request.
@@ -858,6 +1037,9 @@ sub submit {
$req = GET($uri);
}
$session->add_cookie_header($req);
+ if ($config{externalauth}) {
+ $req->header(%$h);
+ }
# Then we send the request and parse the response.
DEBUG(3, $req->as_string);
@@ -874,7 +1056,7 @@ sub submit {
$text =~ s/\n*$/\n/ if ($text);
# "RT/3.0.1 401 Credentials required"
- if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) {
+ if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) {
warn "rt: Malformed RT response from $config{server}.\n";
warn "(Rerun with RTDEBUG=3 for details.)\n" if $config{debug} < 3;
exit -1;
@@ -1043,7 +1225,7 @@ sub submit {
sub Form::parse {
my $state = 0;
my @forms = ();
- my @lines = split /\n/, $_[0];
+ my @lines = split /\n/, $_[0] if $_[0];
my ($c, $o, $k, $e) = ("", [], {}, "");
LINE:
@@ -1199,7 +1381,8 @@ sub Form::compose {
sub config_from_env {
my %env;
- foreach my $k ("DEBUG", "USER", "PASSWD", "SERVER", "QUERY", "ORDERBY") {
+ foreach my $k (qw(EXTERNALAUTH DEBUG USER PASSWD SERVER QUERY ORDERBY)) {
+
if (exists $ENV{"RT$k"}) {
$env{lc $k} = $ENV{"RT$k"};
}
@@ -1251,7 +1434,7 @@ sub parse_config_file {
chomp;
next if (/^#/ || /^\s*$/);
- if (/^(user|passwd|server|query|orderby)\s+(.*)\s?$/) {
+ if (/^(externalauth|user|passwd|server|query|orderby|queue)\s+(.*)\s?$/) {
$cfg{$1} = $2;
}
else {
@@ -1270,7 +1453,7 @@ sub whine {
my $sub = (caller(1))[3];
$sub =~ s/^main:://;
warn "rt: $sub: @_\n";
- return;
+ return 0;
}
sub read_passwd {
@@ -1331,7 +1514,37 @@ sub vsplit {
# XXX: This should become a real parser, à la Text::ParseWords.
$line =~ s/^\s+//;
$line =~ s/\s+$//;
- push @words, split /\s*,\s*/, $line;
+ my ( $a, $b ) = split /,/, $line, 2;
+
+ while ($a) {
+ no warnings 'uninitialized';
+ if ( $a =~ /^'/ ) {
+ my $s = $a;
+ while ( $a !~ /'$/ || ( $a !~ /(\\\\)+'$/
+ && $a =~ /(\\)+'$/ )) {
+ ( $a, $b ) = split /,/, $b, 2;
+ $s .= ',' . $a;
+ }
+ push @words, $s;
+ }
+ elsif ( $a =~ /^q{/ ) {
+ my $s = $a;
+ while ( $a !~ /}$/ ) {
+ ( $a, $b ) =
+ split /,/, $b, 2;
+ $s .= ',' . $a;
+ }
+ $s =~ s/^q{/'/;
+ $s =~ s/}/'/;
+ push @words, $s;
+ }
+ else {
+ push @words, $a;
+ }
+ ( $a, $b ) = split /,/, $b, 2;
+ }
+
+
}
return \@words;
@@ -1406,14 +1619,130 @@ sub is_object_spec {
$spec =~ s|^(?:$type/)?|$type/| if defined $type;
return $spec if ($spec =~ m{^$name/(?:$idlist|$labels)(?:/.*)?$}o);
- return;
+ return 0;
}
sub suggest_help {
- my ($action, $type) = @_;
+ my ($action, $type, $rv) = @_;
print STDERR "rt: For help, run 'rt help $action'.\n" if defined $action;
print STDERR "rt: For help, run 'rt help $type'.\n" if defined $type;
+ return $rv;
+}
+
+sub str2time {
+ # simplified procedure for parsing date, avoid loading Date::Parse
+ my %month = (Jan => 0, Feb => 1, Mar => 2, Apr => 3, May => 4, Jun => 5,
+ Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11);
+ $_ = shift;
+ my ($mon, $day, $hr, $min, $sec, $yr, $monstr);
+ if ( /(\w{3})\s+(\d\d?)\s+(\d\d):(\d\d):(\d\d)\s+(\d{4})/ ) {
+ ($monstr, $day, $hr, $min, $sec, $yr) = ($1, $2, $3, $4, $5, $6);
+ $mon = $month{$monstr} if exists $month{$monstr};
+ } elsif ( /(\d{4})-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)/ ) {
+ ($yr, $mon, $day, $hr, $min, $sec) = ($1, $2-1, $3, $4, $5, $6);
+ }
+ if ( $yr and defined $mon and $day and defined $hr and defined $sec ) {
+ return timelocal($sec,$min,$hr,$day,$mon,$yr);
+ } else {
+ print "Unknown date format in parsedate: $_\n";
+ return undef;
+ }
+}
+
+sub date_diff {
+ my ($old, $new) = @_;
+ $new = time() if ! $new;
+ $old = str2time($old) if $old !~ /^\d+$/;
+ $new = str2time($new) if $new !~ /^\d+$/;
+ return "???" if ! $old or ! $new;
+
+ my %seconds = (min => 60,
+ hr => 60*60,
+ day => 60*60*24,
+ wk => 60*60*24*7,
+ mth => 60*60*24*30,
+ yr => 60*60*24*365);
+
+ my $diff = $new - $old;
+ my $what = 'sec';
+ my $howmuch = $diff;
+ for ( sort {$seconds{$a} <=> $seconds{$b}} keys %seconds) {
+ last if $diff < $seconds{$_};
+ $what = $_;
+ $howmuch = int($diff/$seconds{$_});
+ }
+ return "$howmuch $what";
+}
+
+sub prettyshow {
+ my $forms = shift;
+ my ($form) = grep { exists $_->[2]->{Queue} } @$forms;
+ my $k = $form->[2];
+ # dates are in local time zone
+ if ( $k ) {
+ print "Date: $k->{Created}\n";
+ print "From: $k->{Requestors}\n";
+ print "Cc: $k->{Cc}\n" if $k->{Cc};
+ print "X-AdminCc: $k->{AdminCc}\n" if $k->{AdminCc};
+ print "X-Queue: $k->{Queue}\n";
+ print "Subject: [rt #$k->{id}] $k->{Subject}\n\n";
+ }
+ # dates in these attributes are in GMT and will be converted
+ foreach my $form (@$forms) {
+ my ($c, $o, $k, $e) = @$form;
+ next if ! $k->{id} or exists $k->{Queue};
+ if ( exists $k->{Created} ) {
+ my ($y,$m,$d,$hh,$mm,$ss) = ($k->{Created} =~ /(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/);
+ $m--;
+ my $created = localtime(timegm($ss,$mm,$hh,$d,$m,$y));
+ if ( exists $k->{Description} ) {
+ print "===> $k->{Description} on $created\n";
+ }
+ }
+ print "$k->{Content}\n" if exists $k->{Content} and
+ $k->{Content} !~ /to have no content$/ and
+ $k->{Type} ne 'EmailRecord';
+ print "$k->{Attachments}\n" if exists $k->{Attachments} and
+ $k->{Attachments};
+ }
+}
+
+sub prettylist {
+ my $forms = shift;
+ my $heading = "Ticket Owner Queue Age Told Status Requestor Subject\n";
+ $heading .= '-' x 80 . "\n";
+ my (@open, @me);
+ foreach my $form (@$forms) {
+ my ($c, $o, $k, $e) = @$form;
+ next if ! $k->{id};
+ print $heading if $heading;
+ $heading = '';
+ my $id = $k->{id};
+ $id =~ s!^ticket/!!;
+ my $owner = $k->{Owner} eq 'Nobody' ? '' : $k->{Owner};
+ $owner = substr($owner, 0, 5);
+ my $queue = substr($k->{Queue}, 0, 5);
+ my $subject = substr($k->{Subject}, 0, 30);
+ my $age = date_diff($k->{Created});
+ my $told = $k->{Told} eq 'Not set' ? '' : date_diff($k->{Told});
+ my $status = substr($k->{Status}, 0, 6);
+ my $requestor = substr($k->{Requestors}, 0, 9);
+ my $line = sprintf "%6s %5s %5s %6s %6s %-6s %-9s %-30s\n",
+ $id, $owner, $queue, $age, $told, $status, $requestor, $subject;
+ if ( $k->{Owner} eq 'Nobody' ) {
+ push @open, $line;
+ } elsif ($k->{Owner} eq $config{user} ) {
+ push @me, $line;
+ } else {
+ print $line;
+ }
+ }
+ print "No matches found\n" if $heading;
+ printf "========== my %2d open tickets ==========\n", scalar @me if @me;
+ print @me if @me;
+ printf "========== %2d unowned tickets ==========\n", scalar @open if @open;
+ print @open if @open;
}
__DATA__
@@ -1511,9 +1840,21 @@ Text:
- passwd <passwd> RT user's password.
- query <RT Query> Default RT Query for list action
- orderby <order> Default RT order for list action
+ - queue <queuename> Default RT Queue for list action
+ - externalauth <0|1> Use HTTP Basic authentication
+ explicitely setting externalauth to 0 inhibits also GSSAPI based
+ authentication, if LWP::Authen::Negotiate (and GSSAPI) is installed
Blank and #-commented lines are ignored.
+ Sample configuration file contents:
+
+ server https://rt.somewhere.com/
+ # more than one queue can be given (by adding a query expression)
+ queue helpdesk or queue=support
+ query Status != resolved and Owner=myaccount
+
+
Environment variables:
The following environment variables override any corresponding
@@ -1521,6 +1862,7 @@ Text:
- RTUSER
- RTPASSWD
+ - RTEXTERNALAUTH
- RTSERVER
- RTDEBUG Numeric debug level. (Set to 3 for full logs.)
- RTCONFIG Specifies a name other than ".rtrc" for the
@@ -1552,8 +1894,12 @@ Text:
"user/root,1-3,5,7-10,ams" is a list of ten users; the same list
can also be written as "user/ams,root,1,2,3,5,7,8-10".
+ If just a number is given as object specification it will be
+ interpreted as ticket/<number>
+
Examples:
+ 1 # the same as ticket/1
ticket/1
ticket/1/attachments
ticket/1/attachments/3
@@ -1591,6 +1937,22 @@ Text:
- rt help <action> (action-specific details)
- rt help types (a list of possible types)
+ The following actions on tickets are also possible:
+
+ - comment Add comments to a ticket
+ - correspond Add comments to a ticket
+ - merge Merge one ticket into another
+ - link Link one ticket to another
+ - take Take a ticket (steal and untake are possible as well)
+
+ For several edit set subcommands that are frequently used abbreviations
+ have been introduced. These abbreviations are:
+
+ - delete or del delete a ticket (edit set status=deleted)
+ - resolve or res resolve a ticket (edit set status=resolved)
+ - subject change subject of ticket (edit set subject=string)
+ - give give a ticket to somebody (edit set owner=user)
+
--
Title: types
@@ -1629,6 +1991,13 @@ Text:
- merge
- comment
- correspond
+ - take
+ - steal
+ - untake
+ - give
+ - resolve
+ - delete
+ - subject
Attributes:
@@ -1687,6 +2056,83 @@ Text:
--
+Title: subject
+Text:
+
+ Syntax:
+
+ rt subject <id> <new subject text>
+
+ Change the subject of a ticket whose ticket id is given.
+
+--
+
+Title: give
+Text:
+
+ Syntax:
+
+ rt give <id> <accountname>
+
+ Give a ticket whose ticket id is given to another user.
+
+--
+
+Title: steal
+Text:
+
+ rt steal <id>
+
+ Steal a ticket whose ticket id is given, i.e. set the owner to myself.
+
+--
+
+Title: take
+Text:
+
+ Syntax:
+
+ rt take <id>
+
+ Take a ticket whose ticket id is given, i.e. set the owner to myself.
+
+--
+
+Title: untake
+Text:
+
+ Syntax:
+
+ rt untake <id>
+
+ Untake a ticket whose ticket id is given, i.e. set the owner to Nobody.
+
+--
+
+Title: resolve
+Title: res
+Text:
+
+ Syntax:
+
+ rt resolve <id>
+
+ Resolves a ticket whose ticket id is given.
+
+--
+
+Title: delete
+Title: del
+Text:
+
+ Syntax:
+
+ rt delete <id>
+
+ Deletes a ticket whose ticket id is given.
+
+--
+
Title: logout
Text:
@@ -1725,24 +2171,30 @@ Text:
The following options control how much information is displayed
about each matching object:
- -i Numeric IDs only. (Useful for |rt edit -; see examples.)
- -s Short description.
- -l Longer description.
+ -i Numeric IDs only. (Useful for |rt edit -; see examples.)
+ -s Short description.
+ -l Longer description.
+ -f <field[s] Display only the fields listed and the ticket id
In addition,
- -o +/-<field> Orders the returned list by the specified field.
- -S var=val Submits the specified variable with the request.
- -t type Specifies the type of object to look for. (The
- default is "ticket".)
+ -o +/-<field> Orders the returned list by the specified field.
+ -r reversed order (useful if a default was given)
+ -q queue[s] restricts the query to the queue[s] given
+ multiple queues are separated by comma
+ -S var=val Submits the specified variable with the request.
+ -t type Specifies the type of object to look for. (The
+ default is "ticket".)
Examples:
- rt ls "Priority > 5 and Status='new'"
- rt ls -o +Subject "Priority > 5 and Status='new'"
- rt ls -o -Created "Priority > 5 and Status='new'"
+ rt ls "Priority > 5 and Status=new"
+ rt ls -o +Subject "Priority > 5 and Status=new"
+ rt ls -o -Created "Priority > 5 and Status=new"
rt ls -i "Priority > 5"|rt edit - set status=resolved
rt ls -t ticket "Subject like '[PATCH]%'"
+ rt ls -q systems
+ rt ls -f owner,subject
--
@@ -1760,16 +2212,28 @@ Text:
that refers to the links for tickets 1-3). Consult "rt help <type>"
and "rt help objects" for further details.
+ If only a number is given it will be interpreted as the objects
+ ticket/number and ticket/number/history
+
This command writes a set of forms representing the requested object
data to STDOUT.
Options:
+ The following options control how much information is displayed
+ about each matching object:
+
+ Without any formatting options prettyprinted output is generated.
+ Giving any of the two options below reverts to raw output.
+ -s Short description (history and attachments only).
+ -l Longer description (history and attachments only).
+
+ In addition,
- Read IDs from STDIN instead of the command-line.
-t type Specifies object type.
-f a,b,c Restrict the display to the specified fields.
-S var=val Submits the specified variable with the request.
- -v Verbose display
+
Examples:
rt show -t ticket -f id,subject,status 1-3
@@ -1777,8 +2241,9 @@ Text:
rt show ticket/3/attachments/29/content
rt show ticket/1-3/links
rt show ticket/3/history
- rt show -v ticket/3/history
+ rt show -l ticket/3/history
rt show -t user 2
+ rt show 2
--
@@ -1795,6 +2260,8 @@ Text:
Edits information corresponding to the specified objects.
+ A purely numeric object id nnn is translated into ticket/nnn
+
If, instead of "edit", an action of "new" or "create" is specified,
then a new object is created. In this case, no numeric object IDs
may be specified, but the syntax and behaviour remain otherwise
@@ -1834,7 +2301,7 @@ Text:
rt create -t ticket
# Non-interactive.
- rt edit ticket/1-3 add cc=foo@example.com set priority=3
+ rt edit ticket/1-3 add cc=foo@example.com set priority=3 due=tomorrow
rt ls -t tickets -i 'Priority > 5' | rt edit - set status=resolved
rt edit ticket/4 set priority=3 owner=bar@example.com \
add cc=foo@example.com bcc=quux@example.net
@@ -1930,6 +2397,35 @@ Text:
(XXX: I'm going to have to write it, aren't I?)
+ Until it exists here a short description of important constructs:
+
+ The two simple forms of query expressions are the constructs
+ Attribute like Value and
+ Attribute = Value or Attribute != Value
+
+ Whether attributes can be matched using like or using = is built into RT.
+ The attributes id, Queue, Owner Priority and Status require the = or !=
+ tests.
+
+ If Value is a string it must be quoted and may contain the wildcard
+ character %. If the string does not contain white space, the quoting
+ may however be omitted, it will be added automatically when parsing
+ the input.
+
+ Simple query expressions can be combined using and, or and parentheses
+ can be used to group expressions.
+
+ As a special case a standalone string (which would not form a correct
+ query) is transformed into (Owner='string' or Requestor like 'string%')
+ and added to the default query, i.e. the query is narrowed down.
+
+ If no Queue=name clause is contained in the query, a default clause
+ Queue=$config{queue} is added.
+
+ Examples:
+ Status!='resolved' and Status!='rejected'
+ (Owner='myaccount' or Requestor like 'myaccount%') and Status!='resolved'
+
--
Title: form
@@ -1984,10 +2480,43 @@ Title: example
Title: examples
Text:
- This section will be filled in with useful examples, once it becomes
- more clear what examples may be useful.
-
- For the moment, please consult examples provided with each action.
+ some useful examples
+
+ All the following list requests will be restricted to the default queue.
+ That can be changed by adding the option -q queuename
+
+ List all tickets that are not rejected/resolved
+ rt ls
+ List all tickets that are new and do not have an owner
+ rt ls "status=new and owner=nobody"
+ List all tickets which I have sent or of which I am the owner
+ rt ls myaccount
+ List all attributes for the ticket 6977 (ls -l instead of ls)
+ rt ls -l 6977
+ Show the content of ticket 6977
+ rt show 6977
+ Show all attributes in the ticket and in the history of the ticket
+ rt show -l 6977
+ Comment a ticket (mail is sent to all queue watchers, i.e. AdminCc's)
+ rt comment 6977
+ This will open an editor and lets you add text (attribute Text:)
+ Other attributes may be changed as well, but usually don't do that.
+ Correspond a ticket (like comment, but mail is also sent to requestors)
+ rt correspond 6977
+ Edit a ticket (generic change, interactive using the editor)
+ rt edit 6977
+ Change the owner of a ticket non interactively
+ rt edit 6977 set owner=myaccount
+ or
+ rt give 6977 account
+ or
+ rt take 6977
+ Change the status of a ticket
+ rt edit 6977 set status=resolved
+ or
+ rt resolve 6977
+ Change the status of all tickets I own to resolved !!!
+ rt ls -i owner=myaccount | rt edit - set status=resolved
--
diff --git a/rt/bin/standalone_httpd b/rt/bin/standalone_httpd
index 1057ce0..241af81 100755
--- a/rt/bin/standalone_httpd
+++ b/rt/bin/standalone_httpd
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -49,19 +49,138 @@
use warnings;
use strict;
+# fix lib paths, some may be relative
BEGIN {
- use lib( "/opt/rt3/local/lib", "/opt/rt3/lib");
- use RT;
- RT::LoadConfig();
- if ($RT::DevelMode) { require Module::Refresh; }
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
}
-RT::Init();
+use RT;
+RT::LoadConfig();
+RT->InitLogging();
+if (RT->Config->Get('DevelMode')) { require Module::Refresh; }
+
+RT::CheckPerlRequirements();
+RT->InitPluginPaths();
+
+my $explicit_port = shift @ARGV;
+my $port = $explicit_port || RT->Config->Get('WebPort') || '8080';
+
+
+require RT::Handle;
+my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity;
+
+unless ( $integrity ) {
+ print STDERR <<EOF;
+
+RT couldn't connect to the database where tickets are stored.
+If this is a new installation of RT, you should visit the URL below
+to configure RT and initialize your database.
+
+If this is an existing RT installation, this may indicate a database
+connectivity problem.
+
+The error RT got back when trying to connect to your database was:
+
+$msg
+
+EOF
+
+ require RT::Installer;
+ # don't enter install mode if the file exists but is unwritable
+ if (-e RT::Installer->ConfigFile && !-w _) {
+ die 'Since your configuration exists ('
+ . RT::Installer->ConfigFile
+ . ") but is not writable, I'm refusing to do anything.\n";
+ }
-my $port = shift @ARGV || $RT::WebPort || '8080';
-use RT::Interface::Web::Standalone;
+ RT->Config->Set( 'LexiconLanguages' => '*' );
+ RT::I18N->Init;
+
+ RT->InstallMode(1);
+} else {
+ RT->ConnectToDatabase();
+ RT->InitSystemObjects();
+ RT->InitClasses();
+ RT->InitPlugins();
+ RT->Config->PostLoadCheck();
+
+ my ($status, $msg) = RT::Handle->CheckCompatibility(
+ $RT::Handle->dbh, 'post'
+ );
+ unless ( $status ) {
+ print STDERR $msg, "\n\n";
+ exit -1;
+ }
+}
+
+require RT::Interface::Web::Standalone;
my $server = RT::Interface::Web::Standalone->new;
-$server->port($port);
-$server->run();
+run_server($port);
+exit 0;
+sub run_server {
+ my $port = shift;
+ $server->port($port);
+ eval { $server->run() };
+ if ( my $err = $@ ) {
+ handle_startup_error($err);
+ }
+}
+
+sub handle_startup_error {
+ my $err = shift;
+ if ( $err =~ /bind: Permission denied/ ) {
+ handle_bind_error();
+ } else {
+ die
+ "Something went wrong while trying to run RT's standalone web server:\n\t"
+ . $err;
+ }
+}
+
+
+sub handle_bind_error {
+
+ print STDERR <<EOF;
+WARNING: RT couldn't start up a web server on port @{[$port]}.
+This is often the case if you're running @{[$0]} as
+someone other than your system's "root" user.
+EOF
+
+ if ($explicit_port) {
+ print STDERR
+ "Please check your system configuration or choose another port\n\n";
+ } else {
+ print STDERR "\nFor now, RT has chosen an alternate port to run on.\n\n";
+ if ( !$integrity ) {
+ print STDERR <<EOF;
+You can use this server to configure and explore RT. While configuring
+RT, you'll have a chance to set a permanent port and URL for your
+server.
+
+EOF
+ }
+ run_server( 8000 + int( rand(1024) ) );
+ }
+}
diff --git a/rt/bin/standalone_httpd.in b/rt/bin/standalone_httpd.in
index 8aebdb8..b87a332 100755
--- a/rt/bin/standalone_httpd.in
+++ b/rt/bin/standalone_httpd.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -49,19 +49,138 @@
use warnings;
use strict;
+# fix lib paths, some may be relative
BEGIN {
- use lib( "@LOCAL_LIB_PATH@", "@RT_LIB_PATH@");
- use RT;
- RT::LoadConfig();
- if ($RT::DevelMode) { require Module::Refresh; }
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
}
-RT::Init();
+use RT;
+RT::LoadConfig();
+RT->InitLogging();
+if (RT->Config->Get('DevelMode')) { require Module::Refresh; }
+
+RT::CheckPerlRequirements();
+RT->InitPluginPaths();
+
+my $explicit_port = shift @ARGV;
+my $port = $explicit_port || RT->Config->Get('WebPort') || '8080';
+
+
+require RT::Handle;
+my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity;
+
+unless ( $integrity ) {
+ print STDERR <<EOF;
+
+RT couldn't connect to the database where tickets are stored.
+If this is a new installation of RT, you should visit the URL below
+to configure RT and initialize your database.
+
+If this is an existing RT installation, this may indicate a database
+connectivity problem.
+
+The error RT got back when trying to connect to your database was:
+
+$msg
+
+EOF
+
+ require RT::Installer;
+ # don't enter install mode if the file exists but is unwritable
+ if (-e RT::Installer->ConfigFile && !-w _) {
+ die 'Since your configuration exists ('
+ . RT::Installer->ConfigFile
+ . ") but is not writable, I'm refusing to do anything.\n";
+ }
-my $port = shift @ARGV || $RT::WebPort || '8080';
-use RT::Interface::Web::Standalone;
+ RT->Config->Set( 'LexiconLanguages' => '*' );
+ RT::I18N->Init;
+
+ RT->InstallMode(1);
+} else {
+ RT->ConnectToDatabase();
+ RT->InitSystemObjects();
+ RT->InitClasses();
+ RT->InitPlugins();
+ RT->Config->PostLoadCheck();
+
+ my ($status, $msg) = RT::Handle->CheckCompatibility(
+ $RT::Handle->dbh, 'post'
+ );
+ unless ( $status ) {
+ print STDERR $msg, "\n\n";
+ exit -1;
+ }
+}
+
+require RT::Interface::Web::Standalone;
my $server = RT::Interface::Web::Standalone->new;
-$server->port($port);
-$server->run();
+run_server($port);
+exit 0;
+sub run_server {
+ my $port = shift;
+ $server->port($port);
+ eval { $server->run() };
+ if ( my $err = $@ ) {
+ handle_startup_error($err);
+ }
+}
+
+sub handle_startup_error {
+ my $err = shift;
+ if ( $err =~ /bind: Permission denied/ ) {
+ handle_bind_error();
+ } else {
+ die
+ "Something went wrong while trying to run RT's standalone web server:\n\t"
+ . $err;
+ }
+}
+
+
+sub handle_bind_error {
+
+ print STDERR <<EOF;
+WARNING: RT couldn't start up a web server on port @{[$port]}.
+This is often the case if you're running @{[$0]} as
+someone other than your system's "root" user.
+EOF
+
+ if ($explicit_port) {
+ print STDERR
+ "Please check your system configuration or choose another port\n\n";
+ } else {
+ print STDERR "\nFor now, RT has chosen an alternate port to run on.\n\n";
+ if ( !$integrity ) {
+ print STDERR <<EOF;
+You can use this server to configure and explore RT. While configuring
+RT, you'll have a chance to set a permanent port and URL for your
+server.
+
+EOF
+ }
+ run_server( 8000 + int( rand(1024) ) );
+ }
+}
diff --git a/rt/bin/webmux.pl b/rt/bin/webmux.pl
index 02eb846..cb428ad 100755
--- a/rt/bin/webmux.pl
+++ b/rt/bin/webmux.pl
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -64,7 +64,30 @@ BEGIN {
}
-use lib ( "/opt/rt3/local/lib", "/opt/rt3/lib" );
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
use RT;
package RT::Mason;
@@ -74,21 +97,35 @@ use vars qw($Nobody $SystemUser $Handler $r);
#This drags in RT's config.pm
BEGIN {
RT::LoadConfig();
- if ($RT::DevelMode) { require Module::Refresh; }
+ if (RT->Config->Get('DevelMode')) { require Module::Refresh; }
+ RT->InitPluginPaths();
}
-
{
+ require RT::Handle;
+ my $dsn = RT::Handle->DSN;
+ my $user = RT->Config->Get('DatabaseUser');
+ my $pass = RT->Config->Get('DatabasePassword');
+
+ my $dbh = DBI->connect(
+ $dsn, $user, $pass,
+ { RaiseError => 0, PrintError => 0 },
+ );
+ if ( $dbh ) {
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'post' );
+ die $msg unless $status;
+ }
+}
+{
package HTML::Mason::Commands;
use vars qw(%session);
}
use RT::Interface::Web;
use RT::Interface::Web::Handler;
-$Handler = RT::Interface::Web::Handler->new(@RT::MasonParameters);
-if ($ENV{'MOD_PERL'} && !$RT::DevelMode) {
+if ($ENV{'MOD_PERL'} && !RT->Config->Get('DevelMode')) {
# Under static_source, we need to purge the component cache
# each time we restart, so newer components may be reloaded.
#
@@ -116,10 +153,14 @@ sub handler {
#$r->content_type !~ m!(^text/|\bxml\b)!i or return -1;
# }
- Module::Refresh->refresh if $RT::DevelMode;
+ Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::Init();
+ $Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+ );
+
my %session;
my $status;
eval { $status = $Handler->handle_request($r) };
diff --git a/rt/bin/webmux.pl.in b/rt/bin/webmux.pl.in
index b21d026..7e61b27 100644
--- a/rt/bin/webmux.pl.in
+++ b/rt/bin/webmux.pl.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -64,7 +64,30 @@ BEGIN {
}
-use lib ( "@LOCAL_LIB_PATH@", "@RT_LIB_PATH@" );
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
use RT;
package RT::Mason;
@@ -74,21 +97,35 @@ use vars qw($Nobody $SystemUser $Handler $r);
#This drags in RT's config.pm
BEGIN {
RT::LoadConfig();
- if ($RT::DevelMode) { require Module::Refresh; }
+ if (RT->Config->Get('DevelMode')) { require Module::Refresh; }
+ RT->InitPluginPaths();
}
-
{
+ require RT::Handle;
+ my $dsn = RT::Handle->DSN;
+ my $user = RT->Config->Get('DatabaseUser');
+ my $pass = RT->Config->Get('DatabasePassword');
+
+ my $dbh = DBI->connect(
+ $dsn, $user, $pass,
+ { RaiseError => 0, PrintError => 0 },
+ );
+ if ( $dbh ) {
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'post' );
+ die $msg unless $status;
+ }
+}
+{
package HTML::Mason::Commands;
use vars qw(%session);
}
use RT::Interface::Web;
use RT::Interface::Web::Handler;
-$Handler = RT::Interface::Web::Handler->new(@RT::MasonParameters);
-if ($ENV{'MOD_PERL'} && !$RT::DevelMode) {
+if ($ENV{'MOD_PERL'} && !RT->Config->Get('DevelMode')) {
# Under static_source, we need to purge the component cache
# each time we restart, so newer components may be reloaded.
#
@@ -116,10 +153,14 @@ sub handler {
#$r->content_type !~ m!(^text/|\bxml\b)!i or return -1;
# }
- Module::Refresh->refresh if $RT::DevelMode;
+ Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::Init();
+ $Handler ||= RT::Interface::Web::Handler->new(
+ RT->Config->Get('MasonParameters')
+ );
+
my %session;
my $status;
eval { $status = $Handler->handle_request($r) };
diff --git a/rt/config.layout b/rt/config.layout
index 1550111..52fcef1 100644
--- a/rt/config.layout
+++ b/rt/config.layout
@@ -23,6 +23,7 @@
sbindir: ${exec_prefix}/sbin
sysconfdir: ${prefix}/etc
mandir: ${prefix}/man
+ plugindir: ${prefix}/plugins
libdir: ${prefix}/lib
datadir: ${prefix}/share
htmldir: ${datadir}/html
@@ -38,15 +39,16 @@
customlibdir: ${customdir}/lib
</Layout>
<Layout inplace>
- prefix: `pwd`
+ prefix: .
exec_prefix: ${prefix}
bindir: ${exec_prefix}/bin
sbindir: ${exec_prefix}/sbin
sysconfdir: ${prefix}/etc
mandir: ${prefix}/man
+ plugindir: ${prefix}/plugins
libdir: ${prefix}/lib
datadir: ${prefix}/share
- htmldir: ${prefix}/html
+ htmldir: ${datadir}/html
manualdir: ${datadir}/doc
localstatedir: ${prefix}/var
logfiledir: ${localstatedir}/log
@@ -70,6 +72,7 @@
libdir: ${prefix}/lib
mandir: ${datadir}/man
# FIXME: no such directory in FHS; shouldn't go to somewhere in "${datadir}/rt/"?
+ plugindir: ${datadir}/plugins
htmldir: ${datadir}/html
manualdir: ${datadir}/doc
localstatedir: /var
@@ -91,6 +94,7 @@
sbindir: ${exec_prefix}/sbin
sysconfdir: ${prefix}/etc+
mandir: ${prefix}/man
+ plugindir: ${prefix}/plugins
libdir: ${prefix}/lib+
datadir: ${prefix}/share+
htmldir: ${datadir}/html
@@ -113,6 +117,7 @@
sbindir: ${exec_prefix}/sbin
sysconfdir: ${prefix}/etc
mandir: ${prefix}/man
+ plugindir: ${prefix}/plugins
libdir: ${prefix}/lib
datadir: ${prefix}
htmldir: ${datadir}/html
@@ -130,7 +135,7 @@
# RH path layout.
<Layout RH>
- prefix: /usr/
+ prefix: /usr
exec_prefix: ${prefix}
bindir: ${exec_prefix}/bin
sbindir: ${exec_prefix}/sbin
@@ -140,7 +145,8 @@
datadir: /var/rt
htmldir: ${datadir}/html
manualdir: ${datadir}/doc
- localstatedir: /var/
+ plugindir: ${datadir}/plugins
+ localstatedir: /var
logfiledir: ${localstatedir}/log/rt
masonstatedir: ${localstatedir}/rt/mason_data
sessionstatedir: ${localstatedir}/rt/session_data
@@ -150,3 +156,26 @@
customlexdir: ${customdir}/po
customlibdir: ${customdir}/lib
</Layout>
+
+<Layout relative>
+ prefix: /opt/rt3
+ exec_prefix: ${prefix}
+ bindir: bin
+ sbindir: sbin
+ sysconfdir: etc
+ mandir: man
+ plugindir: plugins
+ libdir: lib
+ datadir: share
+ htmldir: ${datadir}/html
+ manualdir: ${datadir}/doc
+ localstatedir: var
+ logfiledir: ${localstatedir}/log
+ masonstatedir: ${localstatedir}/mason_data
+ sessionstatedir: ${localstatedir}/session_data
+ customdir: local
+ custometcdir: ${customdir}/etc
+ customhtmldir: ${customdir}/html
+ customlexdir: ${customdir}/po
+ customlibdir: ${customdir}/lib
+</Layout>
diff --git a/rt/config.pld b/rt/config.pld
index 3d02027..c83c28f 100644
--- a/rt/config.pld
+++ b/rt/config.pld
@@ -1,18 +1,19 @@
(test "x$prefix" = "xNONE" || test "x$prefix" = "x") && prefix=/opt/rt3
(test "x$exec_prefix" = "xNONE" || test "x$exec_prefix" = "x") && exec_prefix=${prefix}
-bindir=${exec_prefix}/bin
-sbindir=${exec_prefix}/sbin
-sysconfdir=${prefix}/etc
-mandir=${prefix}/man
-libdir=${prefix}/lib
-datadir=${prefix}/share
+bindir=bin
+sbindir=sbin
+sysconfdir=etc
+mandir=man
+(test "x$plugindir" = "xNONE" || test "x$plugindir" = "x") && plugindir=plugins
+libdir=lib
+datadir=share
htmldir=${datadir}/html
(test "x$manualdir" = "xNONE" || test "x$manualdir" = "x") && manualdir=${datadir}/doc
-localstatedir=${prefix}/var
+localstatedir=var
(test "x$logfiledir" = "xNONE" || test "x$logfiledir" = "x") && logfiledir=${localstatedir}/log
(test "x$masonstatedir" = "xNONE" || test "x$masonstatedir" = "x") && masonstatedir=${localstatedir}/mason_data
(test "x$sessionstatedir" = "xNONE" || test "x$sessionstatedir" = "x") && sessionstatedir=${localstatedir}/session_data
-(test "x$customdir" = "xNONE" || test "x$customdir" = "x") && customdir=${prefix}/local
+(test "x$customdir" = "xNONE" || test "x$customdir" = "x") && customdir=local
(test "x$custometcdir" = "xNONE" || test "x$custometcdir" = "x") && custometcdir=${customdir}/etc
(test "x$customhtmldir" = "xNONE" || test "x$customhtmldir" = "x") && customhtmldir=${customdir}/html
(test "x$customlexdir" = "xNONE" || test "x$customlexdir" = "x") && customlexdir=${customdir}/po
diff --git a/rt/config.status b/rt/config.status
index c5d48d9..9c286b5 100755
--- a/rt/config.status
+++ b/rt/config.status
@@ -391,7 +391,7 @@ exec 6>&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 3.6.10, which was
+This file was extended by RT $as_me 3.8.7, which was
generated by GNU Autoconf 2.64. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -404,7 +404,7 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q`
"
# Files that config.status was made for.
-config_files=" sbin/rt-dump-database sbin/rt-setup-database sbin/rt-test-dependencies bin/mason_handler.fcgi bin/mason_handler.scgi bin/standalone_httpd bin/rt-crontool bin/rt-mailgate bin/rt Makefile etc/RT_Config.pm lib/RT.pm bin/mason_handler.svc bin/webmux.pl"
+config_files=" etc/upgrade/3.8-branded-queues-extension etc/upgrade/3.8-ical-extension etc/upgrade/split-out-cf-categories sbin/rt-attributes-viewer sbin/rt-dump-database sbin/rt-setup-database sbin/rt-test-dependencies sbin/rt-email-digest sbin/rt-email-dashboards sbin/rt-clean-sessions sbin/rt-shredder sbin/rt-validator sbin/rt-email-group-admin sbin/rt-server bin/mason_handler.fcgi bin/mason_handler.scgi bin/standalone_httpd bin/rt-crontool bin/rt-mailgate bin/rt Makefile etc/RT_Config.pm lib/RT.pm bin/mason_handler.svc bin/webmux.pl t/data/configs/apache2.2+mod_perl.conf t/data/configs/apache2.2+fastcgi.conf"
ac_cs_usage="\
\`$as_me' instantiates files and other configuration actions
@@ -428,15 +428,15 @@ $config_files
Report bugs to <rt-bugs@bestpractical.com>."
ac_cs_version="\
-RT config.status 3.6.10
+RT config.status 3.8.7
configured by ./configure, generated by GNU Autoconf 2.64,
- with options \"'--with-db-type=SQLite' 'PERL=/usr/bin/perl'\"
+ with options \"'--with-db-type=SQLite' '--enable-layout=relative' '--with-web-handler=standalone' 'PERL=/usr/bin/perl'\"
Copyright (C) 2009 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
-ac_pwd='/Users/falcone/work/rt/releases/rt-3.6.10'
+ac_pwd='/Users/falcone/work/rt/releases/rt-3.8.7'
srcdir='.'
INSTALL='install-sh'
AWK='gawk'
@@ -498,7 +498,7 @@ if $ac_cs_silent; then
fi
if $ac_cs_recheck; then
- set X '/bin/sh' './configure' '--with-db-type=SQLite' 'PERL=/usr/bin/perl' $ac_configure_extra_args --no-create --no-recursion
+ set X '/bin/sh' './configure' '--with-db-type=SQLite' '--enable-layout=relative' '--with-web-handler=standalone' 'PERL=/usr/bin/perl' $ac_configure_extra_args --no-create --no-recursion
shift
$as_echo "running CONFIG_SHELL=/bin/sh $*" >&6
CONFIG_SHELL='/bin/sh'
@@ -520,9 +520,20 @@ _ASBOX
for ac_config_target in $ac_config_targets
do
case $ac_config_target in
+ "etc/upgrade/3.8-branded-queues-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-branded-queues-extension" ;;
+ "etc/upgrade/3.8-ical-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-ical-extension" ;;
+ "etc/upgrade/split-out-cf-categories") CONFIG_FILES="$CONFIG_FILES etc/upgrade/split-out-cf-categories" ;;
+ "sbin/rt-attributes-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-attributes-viewer" ;;
"sbin/rt-dump-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-dump-database" ;;
"sbin/rt-setup-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-database" ;;
"sbin/rt-test-dependencies") CONFIG_FILES="$CONFIG_FILES sbin/rt-test-dependencies" ;;
+ "sbin/rt-email-digest") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-digest" ;;
+ "sbin/rt-email-dashboards") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-dashboards" ;;
+ "sbin/rt-clean-sessions") CONFIG_FILES="$CONFIG_FILES sbin/rt-clean-sessions" ;;
+ "sbin/rt-shredder") CONFIG_FILES="$CONFIG_FILES sbin/rt-shredder" ;;
+ "sbin/rt-validator") CONFIG_FILES="$CONFIG_FILES sbin/rt-validator" ;;
+ "sbin/rt-email-group-admin") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-group-admin" ;;
+ "sbin/rt-server") CONFIG_FILES="$CONFIG_FILES sbin/rt-server" ;;
"bin/mason_handler.fcgi") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.fcgi" ;;
"bin/mason_handler.scgi") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.scgi" ;;
"bin/standalone_httpd") CONFIG_FILES="$CONFIG_FILES bin/standalone_httpd" ;;
@@ -534,6 +545,8 @@ do
"lib/RT.pm") CONFIG_FILES="$CONFIG_FILES lib/RT.pm" ;;
"bin/mason_handler.svc") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.svc" ;;
"bin/webmux.pl") CONFIG_FILES="$CONFIG_FILES bin/webmux.pl" ;;
+ "t/data/configs/apache2.2+mod_perl.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+mod_perl.conf" ;;
+ "t/data/configs/apache2.2+fastcgi.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+fastcgi.conf" ;;
*) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
@@ -597,30 +610,58 @@ echo 'BEGIN {' >"$tmp/subs1.awk" &&
cat >>"$tmp/subs1.awk" <<\_ACAWK &&
S["LTLIBOBJS"]=""
S["LIBOBJS"]=""
-S["RT_LOG_PATH"]="/opt/rt3/var/log"
-S["DESTDIR"]="/opt/rt3"
-S["LOCAL_LIB_PATH"]="/opt/rt3/local/lib"
-S["LOCAL_LEXICON_PATH"]="/opt/rt3/local/po"
-S["MASON_LOCAL_HTML_PATH"]="/opt/rt3/local/html"
-S["LOCAL_ETC_PATH"]="/opt/rt3/local/etc"
-S["MASON_HTML_PATH"]="/opt/rt3/share/html"
-S["MASON_SESSION_PATH"]="/opt/rt3/var/session_data"
-S["MASON_DATA_PATH"]="/opt/rt3/var/mason_data"
-S["RT_MAN_PATH"]="/opt/rt3/man"
-S["RT_VAR_PATH"]="/opt/rt3/var"
-S["RT_SBIN_PATH"]="/opt/rt3/sbin"
-S["RT_BIN_PATH"]="/opt/rt3/bin"
-S["CONFIG_FILE_PATH"]="/opt/rt3/etc"
-S["RT_ETC_PATH"]="/opt/rt3/etc"
-S["RT_LIB_PATH"]="/opt/rt3/lib"
-S["RT_LOCAL_PATH"]="/opt/rt3/local"
-S["RT_DOC_PATH"]="/opt/rt3/share/doc"
+S["RT_LOG_PATH_R"]="/opt/rt3/var/log"
+S["LOCAL_LIB_PATH_R"]="/opt/rt3/local/lib"
+S["LOCAL_LEXICON_PATH_R"]="/opt/rt3/local/po"
+S["MASON_LOCAL_HTML_PATH_R"]="/opt/rt3/local/html"
+S["LOCAL_ETC_PATH_R"]="/opt/rt3/local/etc"
+S["MASON_HTML_PATH_R"]="/opt/rt3/share/html"
+S["MASON_SESSION_PATH_R"]="/opt/rt3/var/session_data"
+S["MASON_DATA_PATH_R"]="/opt/rt3/var/mason_data"
+S["RT_PLUGIN_PATH_R"]="/opt/rt3/plugins"
+S["RT_MAN_PATH_R"]="/opt/rt3/man"
+S["RT_VAR_PATH_R"]="/opt/rt3/var"
+S["RT_SBIN_PATH_R"]="/opt/rt3/sbin"
+S["RT_BIN_PATH_R"]="/opt/rt3/bin"
+S["CONFIG_FILE_PATH_R"]="/opt/rt3/etc"
+S["RT_ETC_PATH_R"]="/opt/rt3/etc"
+S["RT_LIB_PATH_R"]="/opt/rt3/lib"
+S["RT_LOCAL_PATH_R"]="/opt/rt3/local"
+S["RT_DOC_PATH_R"]="/opt/rt3/share/doc"
+S["RT_PATH_R"]="/opt/rt3"
+S["RT_LOG_PATH"]="var/log"
+S["LOCAL_LIB_PATH"]="local/lib"
+S["LOCAL_LEXICON_PATH"]="local/po"
+S["MASON_LOCAL_HTML_PATH"]="local/html"
+S["LOCAL_ETC_PATH"]="local/etc"
+S["MASON_HTML_PATH"]="share/html"
+S["MASON_SESSION_PATH"]="var/session_data"
+S["MASON_DATA_PATH"]="var/mason_data"
+S["RT_PLUGIN_PATH"]="plugins"
+S["RT_MAN_PATH"]="man"
+S["RT_VAR_PATH"]="var"
+S["RT_SBIN_PATH"]="sbin"
+S["RT_BIN_PATH"]="bin"
+S["CONFIG_FILE_PATH"]="etc"
+S["RT_ETC_PATH"]="etc"
+S["RT_LIB_PATH"]="lib"
+S["RT_LOCAL_PATH"]="local"
+S["RT_DOC_PATH"]="share/doc"
S["RT_PATH"]="/opt/rt3"
-S["RT_VERSION_PATCH"]="10"
-S["RT_VERSION_MINOR"]="6"
+S["RT_VERSION_PATCH"]="7"
+S["RT_VERSION_MINOR"]="8"
S["RT_VERSION_MAJOR"]="3"
+S["RT_GPG"]="1"
+S["RT_GD"]="1"
+S["RT_GRAPHVIZ"]="0"
+S["OBJEXT"]="o"
+S["EXEEXT"]=""
+S["ac_ct_CC"]="gcc"
+S["CPPFLAGS"]=""
+S["LDFLAGS"]=""
+S["CFLAGS"]="-g -O2"
+S["CC"]="gcc"
S["RT_DEVEL_MODE"]="0"
-S["RT_STANDALONE"]="0"
S["APACHECTL"]="/usr/sbin/apachectl"
S["RTGROUP"]="www"
S["WEB_GROUP"]="www"
@@ -637,43 +678,47 @@ S["DB_TYPE"]="SQLite"
S["LIBS_GROUP"]="bin"
S["LIBS_OWNER"]="root"
S["BIN_OWNER"]="root"
-S["rt_layout_name"]="RT3"
-S["exp_customlibdir"]="/opt/rt3/local/lib"
-S["customlibdir"]="/opt/rt3/local/lib"
-S["exp_customlexdir"]="/opt/rt3/local/po"
-S["customlexdir"]="/opt/rt3/local/po"
-S["exp_customhtmldir"]="/opt/rt3/local/html"
-S["customhtmldir"]="/opt/rt3/local/html"
-S["exp_custometcdir"]="/opt/rt3/local/etc"
-S["custometcdir"]="/opt/rt3/local/etc"
-S["exp_customdir"]="/opt/rt3/local"
-S["customdir"]="/opt/rt3/local"
-S["exp_sessionstatedir"]="/opt/rt3/var/session_data"
-S["sessionstatedir"]="/opt/rt3/var/session_data"
-S["exp_masonstatedir"]="/opt/rt3/var/mason_data"
-S["masonstatedir"]="/opt/rt3/var/mason_data"
-S["exp_logfiledir"]="/opt/rt3/var/log"
-S["logfiledir"]="/opt/rt3/var/log"
-S["exp_localstatedir"]="/opt/rt3/var"
-S["exp_manualdir"]="/opt/rt3/share/doc"
-S["manualdir"]="/opt/rt3/share/doc"
-S["exp_htmldir"]="/opt/rt3/share/html"
-S["exp_datadir"]="/opt/rt3/share"
-S["exp_libdir"]="/opt/rt3/lib"
-S["exp_mandir"]="/opt/rt3/man"
-S["exp_sysconfdir"]="/opt/rt3/etc"
-S["exp_sbindir"]="/opt/rt3/sbin"
-S["exp_bindir"]="/opt/rt3/bin"
+S["COMMENT_INPLACE_LAYOUT"]=""
+S["rt_layout_name"]="relative"
+S["exp_customlibdir"]="local/lib"
+S["customlibdir"]="local/lib"
+S["exp_customlexdir"]="local/po"
+S["customlexdir"]="local/po"
+S["exp_customhtmldir"]="local/html"
+S["customhtmldir"]="local/html"
+S["exp_custometcdir"]="local/etc"
+S["custometcdir"]="local/etc"
+S["exp_customdir"]="local"
+S["customdir"]="local"
+S["exp_sessionstatedir"]="var/session_data"
+S["sessionstatedir"]="var/session_data"
+S["exp_masonstatedir"]="var/mason_data"
+S["masonstatedir"]="var/mason_data"
+S["exp_logfiledir"]="var/log"
+S["logfiledir"]="var/log"
+S["exp_localstatedir"]="var"
+S["exp_plugindir"]="plugins"
+S["plugindir"]="plugins"
+S["exp_manualdir"]="share/doc"
+S["manualdir"]="share/doc"
+S["exp_htmldir"]="share/html"
+S["exp_datadir"]="share"
+S["exp_libdir"]="lib"
+S["exp_mandir"]="man"
+S["exp_sysconfdir"]="etc"
+S["exp_sbindir"]="sbin"
+S["exp_bindir"]="bin"
S["exp_exec_prefix"]="/opt/rt3"
S["exp_prefix"]="/opt/rt3"
S["SPEEDY_BIN"]="/usr/local/bin/speedy"
+S["WEB_HANDLER"]="standalone"
S["PERL"]="/usr/bin/perl"
S["AWK"]="gawk"
S["INSTALL_DATA"]="${INSTALL} -m 644"
S["INSTALL_SCRIPT"]="${INSTALL}"
S["INSTALL_PROGRAM"]="${INSTALL}"
-S["rt_version_patch"]="10"
-S["rt_version_minor"]="6"
+S["rt_version_patch"]="7"
+S["rt_version_minor"]="8"
S["rt_version_major"]="3"
S["target_alias"]=""
S["host_alias"]=""
@@ -682,34 +727,34 @@ S["LIBS"]=""
S["ECHO_T"]=""
S["ECHO_N"]=""
S["ECHO_C"]="\\c"
-S["DEFS"]="-DPACKAGE_NAME=\\\"RT\\\" -DPACKAGE_TARNAME=\\\"rt\\\" -DPACKAGE_VERSION=\\\"3.6.10\\\" -DPACKAGE_STRING=\\\"RT\\ 3.6.10\\\" -DPACKAGE_BUGREPORT=\\\"rt-bugs@bestpracti"\
-"cal.com\\\" -DPACKAGE_URL=\\\"\\\""
-S["mandir"]="/opt/rt3/man"
+S["DEFS"]="-DPACKAGE_NAME=\\\"RT\\\" -DPACKAGE_TARNAME=\\\"rt\\\" -DPACKAGE_VERSION=\\\"3.8.7\\\" -DPACKAGE_STRING=\\\"RT\\ 3.8.7\\\" -DPACKAGE_BUGREPORT=\\\"rt-bugs@bestpractica"\
+"l.com\\\" -DPACKAGE_URL=\\\"\\\""
+S["mandir"]="man"
S["localedir"]="${datarootdir}/locale"
-S["libdir"]="/opt/rt3/lib"
+S["libdir"]="lib"
S["psdir"]="${docdir}"
S["pdfdir"]="${docdir}"
S["dvidir"]="${docdir}"
-S["htmldir"]="/opt/rt3/share/html"
+S["htmldir"]="share/html"
S["infodir"]="${datarootdir}/info"
S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}"
S["oldincludedir"]="/usr/include"
S["includedir"]="${prefix}/include"
-S["localstatedir"]="/opt/rt3/var"
+S["localstatedir"]="var"
S["sharedstatedir"]="${prefix}/com"
-S["sysconfdir"]="/opt/rt3/etc"
-S["datadir"]="/opt/rt3/share"
+S["sysconfdir"]="etc"
+S["datadir"]="share"
S["datarootdir"]="${prefix}/share"
S["libexecdir"]="${exec_prefix}/libexec"
-S["sbindir"]="/opt/rt3/sbin"
-S["bindir"]="/opt/rt3/bin"
+S["sbindir"]="sbin"
+S["bindir"]="bin"
S["program_transform_name"]="s,x,x,"
S["prefix"]="/opt/rt3"
S["exec_prefix"]="/opt/rt3"
S["PACKAGE_URL"]=""
S["PACKAGE_BUGREPORT"]="rt-bugs@bestpractical.com"
-S["PACKAGE_STRING"]="RT 3.6.10"
-S["PACKAGE_VERSION"]="3.6.10"
+S["PACKAGE_STRING"]="RT 3.8.7"
+S["PACKAGE_VERSION"]="3.8.7"
S["PACKAGE_TARNAME"]="rt"
S["PACKAGE_NAME"]="RT"
S["PATH_SEPARATOR"]=":"
@@ -907,11 +952,11 @@ case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
ac_datarootdir_hack='
- s&@datadir@&/opt/rt3/share&g
+ s&@datadir@&share&g
s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
s&@infodir@&${datarootdir}/info&g
s&@localedir@&${datarootdir}/locale&g
- s&@mandir@&/opt/rt3/man&g
+ s&@mandir@&man&g
s&\${datarootdir}&${prefix}/share&g' ;;
esac
ac_sed_extra="/^[ ]*VPATH[ ]*=/{
@@ -963,12 +1008,34 @@ which seems to be undefined. Please make sure it is defined." >&2;}
case $ac_file$ac_mode in
+ "etc/upgrade/3.8-branded-queues-extension":F) chmod ug+x $ac_file
+ ;;
+ "etc/upgrade/3.8-ical-extension":F) chmod ug+x $ac_file
+ ;;
+ "etc/upgrade/split-out-cf-categories":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-attributes-viewer":F) chmod ug+x $ac_file
+ ;;
"sbin/rt-dump-database":F) chmod ug+x $ac_file
;;
"sbin/rt-setup-database":F) chmod ug+x $ac_file
;;
"sbin/rt-test-dependencies":F) chmod ug+x $ac_file
;;
+ "sbin/rt-email-digest":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-email-dashboards":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-clean-sessions":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-shredder":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-validator":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-email-group-admin":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-server":F) chmod ug+x $ac_file
+ ;;
"bin/mason_handler.fcgi":F) chmod ug+x $ac_file
;;
"bin/mason_handler.scgi":F) chmod ug+x $ac_file
diff --git a/rt/configure b/rt/configure
index 91b8655..27eb230 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.64 for RT 3.6.10.
+# Generated by GNU Autoconf 2.64 for RT 3.8.7.
#
# Report bugs to <rt-bugs@bestpractical.com>.
#
@@ -549,8 +549,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='RT'
PACKAGE_TARNAME='rt'
-PACKAGE_VERSION='3.6.10'
-PACKAGE_STRING='RT 3.6.10'
+PACKAGE_VERSION='3.8.7'
+PACKAGE_STRING='RT 3.8.7'
PACKAGE_BUGREPORT='rt-bugs@bestpractical.com'
PACKAGE_URL=''
@@ -558,8 +558,26 @@ ac_unique_file="lib/RT.pm.in"
ac_default_prefix=/opt/rt3
ac_subst_vars='LTLIBOBJS
LIBOBJS
+RT_LOG_PATH_R
+LOCAL_LIB_PATH_R
+LOCAL_LEXICON_PATH_R
+MASON_LOCAL_HTML_PATH_R
+LOCAL_ETC_PATH_R
+MASON_HTML_PATH_R
+MASON_SESSION_PATH_R
+MASON_DATA_PATH_R
+RT_PLUGIN_PATH_R
+RT_MAN_PATH_R
+RT_VAR_PATH_R
+RT_SBIN_PATH_R
+RT_BIN_PATH_R
+CONFIG_FILE_PATH_R
+RT_ETC_PATH_R
+RT_LIB_PATH_R
+RT_LOCAL_PATH_R
+RT_DOC_PATH_R
+RT_PATH_R
RT_LOG_PATH
-DESTDIR
LOCAL_LIB_PATH
LOCAL_LEXICON_PATH
MASON_LOCAL_HTML_PATH
@@ -567,6 +585,7 @@ LOCAL_ETC_PATH
MASON_HTML_PATH
MASON_SESSION_PATH
MASON_DATA_PATH
+RT_PLUGIN_PATH
RT_MAN_PATH
RT_VAR_PATH
RT_SBIN_PATH
@@ -580,8 +599,17 @@ RT_PATH
RT_VERSION_PATCH
RT_VERSION_MINOR
RT_VERSION_MAJOR
+RT_GPG
+RT_GD
+RT_GRAPHVIZ
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
RT_DEVEL_MODE
-RT_STANDALONE
APACHECTL
RTGROUP
WEB_GROUP
@@ -598,6 +626,7 @@ DB_TYPE
LIBS_GROUP
LIBS_OWNER
BIN_OWNER
+COMMENT_INPLACE_LAYOUT
rt_layout_name
exp_customlibdir
customlibdir
@@ -616,6 +645,8 @@ masonstatedir
exp_logfiledir
logfiledir
exp_localstatedir
+exp_plugindir
+plugindir
exp_manualdir
manualdir
exp_htmldir
@@ -628,6 +659,7 @@ exp_bindir
exp_exec_prefix
exp_prefix
SPEEDY_BIN
+WEB_HANDLER
PERL
AWK
INSTALL_DATA
@@ -677,6 +709,7 @@ SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
+with_web_handler
with_speedycgi
enable_layout
with_bin_owner
@@ -696,11 +729,22 @@ with_rt_group
with_my_user_group
with_apachectl
with_devel_mode
+enable_devel_mode
+with_graphviz
+enable_graphviz
+with_gd
+enable_gd
+enable_gpg
'
ac_precious_vars='build_alias
host_alias
target_alias
-PERL'
+PERL
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS'
# Initialize some variables set by options.
@@ -1242,7 +1286,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 3.6.10 to adapt to many kinds of systems.
+\`configure' configures RT 3.8.7 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1303,7 +1347,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of RT 3.6.10:";;
+ short | recursive ) echo "Configuration of RT 3.8.7:";;
esac
cat <<\_ACEOF
@@ -1311,18 +1355,27 @@ Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-layout=LAYOUT Use a specific directory layout (Default: RT3)
+ --enable-layout=LAYOUT Use a specific directory layout (Default: relative)
+ --enable-devel-mode Turn on development aids that might hurt you in
+ production
+ --enable-graphviz Turns on support for RT's GraphViz dependency charts
+ --enable-gd Turns on support for RT's GD pie and bar charts
+ --enable-gpg Turns on GNU Privacy Guard (GPG) support
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-web-handler=LIST comma separated list of web-handlers RT will be able
+ to use. Default is fastcgi when modperl1, modperl2,
+ fastcgi, standalone and speedycgi are valid. To
+ succefuly run RT you need only one.
--with-speedycgi=/path/to/speedy
path to your speedycgi binary, if it exists
--with-bin-owner=OWNER user that will own RT binaries (default root)
--with-libs-owner=OWNER user that will own RT libraries (default root)
--with-libs-group=GROUP group that will own RT binaries (default bin)
--with-db-type=TYPE sort of database RT will use (default: mysql)
- (mysql, Pg, Oracle, Informix and SQLite are valid)
+ (mysql, Pg, Oracle and SQLite are valid)
--with-db-host=HOSTNAME FQDN of database server (default: localhost)
--with-db-port=PORT port on which the database listens on
--with-db-rt-host=HOSTNAME
@@ -1341,12 +1394,17 @@ Optional Packages:
--with-rt-group=GROUP group to own all files (default: rt)
--with-my-user-group set all users and groups to current user/group
--with-apachectl instruct RT where to find your apachectl
- --with-standalone Install modules for pure perl standalone server
- --with-devel-mode Turn on development aids that might hurt you in
- production
+
Some influential environment variables:
PERL Perl interpreter command
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1414,7 +1472,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-RT configure 3.6.10
+RT configure 3.8.7
generated by GNU Autoconf 2.64
Copyright (C) 2009 Free Software Foundation, Inc.
@@ -1427,11 +1485,95 @@ fi
## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ return $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ return $ac_retval
+
+} # ac_fn_c_try_link
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 3.6.10, which was
+It was created by RT $as_me 3.8.7, which was
generated by GNU Autoconf 2.64. Invocation command line was
$ $0 $@
@@ -1782,9 +1924,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
rt_version_major=3
-rt_version_minor=6
+rt_version_minor=8
-rt_version_patch=10
+rt_version_patch=7
test "x$rt_version_major" = 'x' && rt_version_major=0
test "x$rt_version_minor" = 'x' && rt_version_minor=0
@@ -1996,6 +2138,20 @@ fi
+# Check whether --with-web-handler was given.
+if test "${with_web_handler+set}" = set; then :
+ withval=$with_web_handler; WEB_HANDLER=$withval
+else
+ WEB_HANDLER=fastcgi
+fi
+
+my_web_handler_test=$($PERL -e 'print "ok" unless grep $_ !~ /^(modperl12|fastcgi|speedycgi|standalone)$/i, grep defined && length, split /\s*,\s*/, "$WEB_HANDLER"')
+if test "$my_web_handler_test" != "ok"; then
+ as_fn_error "Only modperl1, modperl2, fastcgi, speedycgi and standalone are valid web-handlers" "$LINENO" 5
+fi
+
+
+
# Check whether --with-speedycgi was given.
if test "${with_speedycgi+set}" = set; then :
withval=$with_speedycgi; SPEEDY_BIN=$withval
@@ -2003,7 +2159,9 @@ else
SPEEDY_BIN=/usr/local/bin/speedy
fi
-
+if test "$WEB_HANDLER" = 'speedycgi' -a ! -x "$SPEEDY_BIN"; then
+ as_fn_error "cannot find speedycgi binary" "$LINENO" 5
+fi
@@ -2015,7 +2173,7 @@ fi
if test "x$LAYOUT" = "x"; then
- LAYOUT="RT3"
+ LAYOUT="relative"
fi
if test ! -f $srcdir/config.layout; then
@@ -2190,6 +2348,19 @@ $as_echo "$as_me: WARNING: Layout file $srcdir/config.layout not found" >&2;}
ap_last=''
+ ap_cur='$plugindir'
+ while test "x${ap_cur}" != "x${ap_last}"; do
+ ap_last="${ap_cur}"
+ ap_cur=`eval "echo ${ap_cur}"`
+ done
+ exp_plugindir="${ap_cur}"
+
+
+
+
+
+
+ ap_last=''
ap_cur='$localstatedir'
while test "x${ap_cur}" != "x${ap_last}"; do
ap_last="${ap_cur}"
@@ -2321,6 +2492,13 @@ else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rt_layout_name" >&5
$as_echo "$rt_layout_name" >&6; }
fi
+if test "x$rt_layout_name" != "xinplace" ; then
+ COMMENT_INPLACE_LAYOUT=""
+
+else
+ COMMENT_INPLACE_LAYOUT=#
+
+fi
@@ -2372,7 +2550,7 @@ else
fi
if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite' -a "$DB_TYPE" != 'Oracle' -a "$DB_TYPE" != 'Informix' -a "$DB_TYPE" != 'Sybase' ; then
- as_fn_error "Only Oracle, Informix, Pg, mysql and SQLite are valid db types" "$LINENO" 5
+ as_fn_error "Only Oracle, Pg, mysql and SQLite are valid db types" "$LINENO" 5
fi
@@ -2549,7 +2727,7 @@ fi
# Test for valid database names
-if test "$DB_TYPE" == "mysql" ; then :
+if test "$DB_TYPE" = "mysql" ; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if database name is valid" >&5
$as_echo_n "checking if database name is valid... " >&6; }
if echo $DB_DATABASE | $AWK '/-/ { exit 1 }' ; then :
@@ -2577,22 +2755,958 @@ fi
# Check whether --with-devel-mode was given.
if test "${with_devel_mode+set}" = set; then :
- withval=$with_devel_mode; RT_STANDALONE="1"
+ withval=$with_devel_mode; RT_DEVEL_MODE=$withval
else
- RT_STANDALONE="0"
+ RT_DEVEL_MODE="0"
fi
+# Check whether --enable-devel-mode was given.
+if test "${enable_devel_mode+set}" = set; then :
+ enableval=$enable_devel_mode; RT_DEVEL_MODE=$enableval
+else
+ RT_DEVEL_MODE=$RT_DEVEL_MODE
+fi
+if test "$RT_DEVEL_MODE" = yes; then
+ RT_DEVEL_MODE="1"
+else
+ RT_DEVEL_MODE="0"
+fi
-# Check whether --with-devel-mode was given.
-if test "${with_devel_mode+set}" = set; then :
- withval=$with_devel_mode; RT_DEVEL_MODE="1"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- RT_DEVEL_MODE="0"
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ rm -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then :
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "C compiler cannot create executables
+See \`config.log' for more details." "$LINENO" 5; }; }
+fi
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for aginitlib in -lgraph" >&5
+$as_echo_n "checking for aginitlib in -lgraph... " >&6; }
+if test "${ac_cv_lib_graph_aginitlib+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgraph $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char aginitlib ();
+int
+main ()
+{
+return aginitlib ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_graph_aginitlib=yes
+else
+ ac_cv_lib_graph_aginitlib=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_graph_aginitlib" >&5
+$as_echo "$ac_cv_lib_graph_aginitlib" >&6; }
+if test "x$ac_cv_lib_graph_aginitlib" = x""yes; then :
+ RT_GRAPHVIZ="1"
+fi
+
+
+# Check whether --with-graphviz was given.
+if test "${with_graphviz+set}" = set; then :
+ withval=$with_graphviz; RT_GRAPHVIZ=$withval
+fi
+
+# Check whether --enable-graphviz was given.
+if test "${enable_graphviz+set}" = set; then :
+ enableval=$enable_graphviz; RT_GRAPHVIZ=$enableval
+fi
+
+if test "$RT_GRAPHVIZ" = yes; then
+ RT_GRAPHVIZ="1"
+else
+ RT_GRAPHVIZ="0"
+fi
+
+
+# Extract the first word of "gdlib-config", so it can be a program name with args.
+set dummy gdlib-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RT_GD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RT_GD"; then
+ ac_cv_prog_RT_GD="$RT_GD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RT_GD=""yes""
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_RT_GD" && ac_cv_prog_RT_GD=""no""
+fi
+fi
+RT_GD=$ac_cv_prog_RT_GD
+if test -n "$RT_GD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RT_GD" >&5
+$as_echo "$RT_GD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Check whether --with-gd was given.
+if test "${with_gd+set}" = set; then :
+ withval=$with_gd; RT_GD=$withval
+fi
+
+# Check whether --enable-gd was given.
+if test "${enable_gd+set}" = set; then :
+ enableval=$enable_gd; RT_GD=$enableval
+fi
+
+if test "$RT_GD" = yes; then
+ RT_GD="1"
+else
+ RT_GD="0"
+fi
+
+
+# Extract the first word of "gpg", so it can be a program name with args.
+set dummy gpg; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RT_GPG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RT_GPG"; then
+ ac_cv_prog_RT_GPG="$RT_GPG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RT_GPG=""yes""
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_RT_GPG" && ac_cv_prog_RT_GPG=""no""
+fi
+fi
+RT_GPG=$ac_cv_prog_RT_GPG
+if test -n "$RT_GPG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RT_GPG" >&5
+$as_echo "$RT_GPG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Check whether --enable-gpg was given.
+if test "${enable_gpg+set}" = set; then :
+ enableval=$enable_gpg; RT_GPG=$enableval
+fi
+
+if test "$RT_GPG" = yes; then
+ RT_GPG="1"
+else
+ RT_GPG="0"
+fi
+
+
+
RT_VERSION_MAJOR=${rt_version_major}
@@ -2621,6 +3735,8 @@ RT_VAR_PATH=${exp_localstatedir}
RT_MAN_PATH=${exp_mandir}
+RT_PLUGIN_PATH=${exp_plugindir}
+
MASON_DATA_PATH=${exp_masonstatedir}
MASON_SESSION_PATH=${exp_sessionstatedir}
@@ -2635,16 +3751,95 @@ LOCAL_LEXICON_PATH=${exp_customlexdir}
LOCAL_LIB_PATH=${exp_customlibdir}
-DESTDIR=${exp_prefix}
-
RT_LOG_PATH=${exp_logfiledir}
+if test ${exp_sysconfdir} = "etc"; then
+RT_PATH_R=${exp_prefix}
+
+RT_DOC_PATH_R=${exp_prefix}/${exp_manualdir}
+
+RT_LOCAL_PATH_R=${exp_prefix}/${exp_customdir}
+
+RT_LIB_PATH_R=${exp_prefix}/${exp_libdir}
+
+RT_ETC_PATH_R=${exp_prefix}/${exp_sysconfdir}
+
+CONFIG_FILE_PATH_R=${exp_prefix}/${exp_sysconfdir}
+
+RT_BIN_PATH_R=${exp_prefix}/${exp_bindir}
+
+RT_SBIN_PATH_R=${exp_prefix}/${exp_sbindir}
+
+RT_VAR_PATH_R=${exp_prefix}/${exp_localstatedir}
+
+RT_MAN_PATH_R=${exp_prefix}/${exp_mandir}
+
+RT_PLUGIN_PATH_R=${exp_prefix}/${exp_plugindir}
+
+MASON_DATA_PATH_R=${exp_prefix}/${exp_masonstatedir}
+
+MASON_SESSION_PATH_R=${exp_prefix}/${exp_sessionstatedir}
+
+MASON_HTML_PATH_R=${exp_prefix}/${exp_htmldir}
+
+LOCAL_ETC_PATH_R=${exp_prefix}/${exp_custometcdir}
+
+MASON_LOCAL_HTML_PATH_R=${exp_prefix}/${exp_customhtmldir}
+
+LOCAL_LEXICON_PATH_R=${exp_prefix}/${exp_customlexdir}
+
+LOCAL_LIB_PATH_R=${exp_prefix}/${exp_customlibdir}
+
+RT_LOG_PATH_R=${exp_prefix}/${exp_logfiledir}
+
+else
+RT_PATH_R=${exp_prefix}
+
+RT_DOC_PATH_R=${exp_manualdir}
+
+RT_LOCAL_PATH_R=${exp_customdir}
+
+RT_LIB_PATH_R=${exp_libdir}
+
+RT_ETC_PATH_R=${exp_sysconfdir}
+
+RT_PLUGIN_PATH_R=${exp_plugindir}
+
+CONFIG_FILE_PATH_R=${exp_sysconfdir}
+
+RT_BIN_PATH_R=${exp_bindir}
+
+RT_SBIN_PATH_R=${exp_sbindir}
+
+RT_VAR_PATH_R=${exp_localstatedir}
+
+RT_MAN_PATH_R=${exp_mandir}
+
+MASON_DATA_PATH_R=${exp_masonstatedir}
+
+MASON_SESSION_PATH_R=${exp_sessionstatedir}
+
+MASON_HTML_PATH_R=${exp_htmldir}
+
+LOCAL_ETC_PATH_R=${exp_custometcdir}
+
+MASON_LOCAL_HTML_PATH_R=${exp_customhtmldir}
+
+LOCAL_LEXICON_PATH_R=${exp_customlexdir}
+
+LOCAL_LIB_PATH_R=${exp_customlibdir}
-ac_config_files="$ac_config_files sbin/rt-dump-database sbin/rt-setup-database sbin/rt-test-dependencies bin/mason_handler.fcgi bin/mason_handler.scgi bin/standalone_httpd bin/rt-crontool bin/rt-mailgate bin/rt"
+RT_LOG_PATH_R=${exp_logfiledir}
-ac_config_files="$ac_config_files Makefile etc/RT_Config.pm lib/RT.pm bin/mason_handler.svc bin/webmux.pl"
+fi
+
+
+ac_config_files="$ac_config_files etc/upgrade/3.8-branded-queues-extension etc/upgrade/3.8-ical-extension etc/upgrade/split-out-cf-categories sbin/rt-attributes-viewer sbin/rt-dump-database sbin/rt-setup-database sbin/rt-test-dependencies sbin/rt-email-digest sbin/rt-email-dashboards sbin/rt-clean-sessions sbin/rt-shredder sbin/rt-validator sbin/rt-email-group-admin sbin/rt-server bin/mason_handler.fcgi bin/mason_handler.scgi bin/standalone_httpd bin/rt-crontool bin/rt-mailgate bin/rt"
+
+
+ac_config_files="$ac_config_files Makefile etc/RT_Config.pm lib/RT.pm bin/mason_handler.svc bin/webmux.pl t/data/configs/apache2.2+mod_perl.conf t/data/configs/apache2.2+fastcgi.conf"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -3187,7 +4382,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 3.6.10, which was
+This file was extended by RT $as_me 3.8.7, which was
generated by GNU Autoconf 2.64. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -3238,7 +4433,7 @@ Report bugs to <rt-bugs@bestpractical.com>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-RT config.status 3.6.10
+RT config.status 3.8.7
configured by $0, generated by GNU Autoconf 2.64,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
@@ -3342,9 +4537,20 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
for ac_config_target in $ac_config_targets
do
case $ac_config_target in
+ "etc/upgrade/3.8-branded-queues-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-branded-queues-extension" ;;
+ "etc/upgrade/3.8-ical-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-ical-extension" ;;
+ "etc/upgrade/split-out-cf-categories") CONFIG_FILES="$CONFIG_FILES etc/upgrade/split-out-cf-categories" ;;
+ "sbin/rt-attributes-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-attributes-viewer" ;;
"sbin/rt-dump-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-dump-database" ;;
"sbin/rt-setup-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-database" ;;
"sbin/rt-test-dependencies") CONFIG_FILES="$CONFIG_FILES sbin/rt-test-dependencies" ;;
+ "sbin/rt-email-digest") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-digest" ;;
+ "sbin/rt-email-dashboards") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-dashboards" ;;
+ "sbin/rt-clean-sessions") CONFIG_FILES="$CONFIG_FILES sbin/rt-clean-sessions" ;;
+ "sbin/rt-shredder") CONFIG_FILES="$CONFIG_FILES sbin/rt-shredder" ;;
+ "sbin/rt-validator") CONFIG_FILES="$CONFIG_FILES sbin/rt-validator" ;;
+ "sbin/rt-email-group-admin") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-group-admin" ;;
+ "sbin/rt-server") CONFIG_FILES="$CONFIG_FILES sbin/rt-server" ;;
"bin/mason_handler.fcgi") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.fcgi" ;;
"bin/mason_handler.scgi") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.scgi" ;;
"bin/standalone_httpd") CONFIG_FILES="$CONFIG_FILES bin/standalone_httpd" ;;
@@ -3356,6 +4562,8 @@ do
"lib/RT.pm") CONFIG_FILES="$CONFIG_FILES lib/RT.pm" ;;
"bin/mason_handler.svc") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.svc" ;;
"bin/webmux.pl") CONFIG_FILES="$CONFIG_FILES bin/webmux.pl" ;;
+ "t/data/configs/apache2.2+mod_perl.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+mod_perl.conf" ;;
+ "t/data/configs/apache2.2+fastcgi.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+fastcgi.conf" ;;
*) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
@@ -3765,12 +4973,34 @@ which seems to be undefined. Please make sure it is defined." >&2;}
case $ac_file$ac_mode in
+ "etc/upgrade/3.8-branded-queues-extension":F) chmod ug+x $ac_file
+ ;;
+ "etc/upgrade/3.8-ical-extension":F) chmod ug+x $ac_file
+ ;;
+ "etc/upgrade/split-out-cf-categories":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-attributes-viewer":F) chmod ug+x $ac_file
+ ;;
"sbin/rt-dump-database":F) chmod ug+x $ac_file
;;
"sbin/rt-setup-database":F) chmod ug+x $ac_file
;;
"sbin/rt-test-dependencies":F) chmod ug+x $ac_file
;;
+ "sbin/rt-email-digest":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-email-dashboards":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-clean-sessions":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-shredder":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-validator":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-email-group-admin":F) chmod ug+x $ac_file
+ ;;
+ "sbin/rt-server":F) chmod ug+x $ac_file
+ ;;
"bin/mason_handler.fcgi":F) chmod ug+x $ac_file
;;
"bin/mason_handler.scgi":F) chmod ug+x $ac_file
diff --git a/rt/configure.ac b/rt/configure.ac
index 209744d..6f6b6f2 100644
--- a/rt/configure.ac
+++ b/rt/configure.ac
@@ -3,11 +3,11 @@ dnl
dnl Process this file with autoconf to produce a configure script
dnl
dnl Embed in generated ./configure script the following CVS info:
-AC_REVISION($Revision: 1.1.1.10 $)dnl
+AC_REVISION($Revision: 1.1.1.11 $)dnl
dnl Setup autoconf
-AC_PREREQ(2.53)
-AC_INIT(RT, [3.6.10], [rt-bugs@bestpractical.com])
+AC_PREREQ([2.53])
+AC_INIT(RT, 3.8.7, [rt-bugs@bestpractical.com])
AC_CONFIG_SRCDIR([lib/RT.pm.in])
dnl Extract RT version number components
@@ -31,15 +31,32 @@ if test "$PERL" = 'not found'; then
fi
+dnl WEB_HANDLER
+AC_ARG_WITH(web-handler,
+ AC_HELP_STRING([--with-web-handler=LIST],
+ [comma separated list of web-handlers RT will be able to use.
+ Default is fastcgi when modperl1, modperl2, fastcgi, standalone
+ and speedycgi are valid. To succefuly run RT you need only one.
+ ]),
+ WEB_HANDLER=$withval,
+ WEB_HANDLER=fastcgi)
+my_web_handler_test=$($PERL -e 'print "ok" unless grep $_ !~ /^(modperl[12]|fastcgi|speedycgi|standalone)$/i, grep defined && length, split /\s*,\s*/, "$WEB_HANDLER"')
+if test "$my_web_handler_test" != "ok"; then
+ AC_MSG_ERROR([Only modperl1, modperl2, fastcgi, speedycgi and standalone are valid web-handlers])
+fi
+AC_SUBST(WEB_HANDLER)
+
dnl SPEED_BIN
AC_ARG_WITH(speedycgi,
AC_HELP_STRING([--with-speedycgi=/path/to/speedy],
[path to your speedycgi binary, if it exists]),
SPEEDY_BIN=$withval,
SPEEDY_BIN=/usr/local/bin/speedy)
+if test "$WEB_HANDLER" = 'speedycgi' -a ! -x "$SPEEDY_BIN"; then
+ AC_MSG_ERROR([cannot find speedycgi binary])
+fi
AC_SUBST(SPEEDY_BIN)
-
dnl Defaults paths for installation
AC_PREFIX_DEFAULT([/opt/rt3])
RT_ENABLE_LAYOUT
@@ -99,11 +116,11 @@ AC_SUBST(LIBS_GROUP)
dnl DB_TYPE
AC_ARG_WITH(db-type,
AC_HELP_STRING([--with-db-type=TYPE],
- [sort of database RT will use (default: mysql) (mysql, Pg, Oracle, Informix and SQLite are valid)]),
+ [sort of database RT will use (default: mysql) (mysql, Pg, Oracle and SQLite are valid)]),
DB_TYPE=$withval,
DB_TYPE=mysql)
if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite' -a "$DB_TYPE" != 'Oracle' -a "$DB_TYPE" != 'Informix' -a "$DB_TYPE" != 'Sybase' ; then
- AC_MSG_ERROR([Only Oracle, Informix, Pg, mysql and SQLite are valid db types])
+ AC_MSG_ERROR([Only Oracle, Pg, mysql and SQLite are valid db types])
fi
AC_SUBST(DB_TYPE)
@@ -222,7 +239,7 @@ AC_ARG_WITH(my-user-group,
WEB_GROUP=$my_group)
# Test for valid database names
-AS_IF([ test "$DB_TYPE" == "mysql" ],
+AS_IF([ test "$DB_TYPE" = "mysql" ],
[ AC_MSG_CHECKING([if database name is valid])
AS_IF([ echo $DB_DATABASE | $AWK '/-/ { exit 1 }' ],
[ AC_MSG_RESULT([yes]) ],
@@ -236,28 +253,66 @@ dnl Set the value of apachectl
AC_ARG_WITH(apachectl,
AC_HELP_STRING([--with-apachectl],
[instruct RT where to find your apachectl]),
-
APACHECTL=$withval,
APACHECTL=`which apachectl`)
AC_SUBST(APACHECTL)
-dnl RT's standalone pure perl server
-AC_ARG_WITH(devel-mode,
- AC_HELP_STRING([--with-standalone],
- [Install modules for pure perl standalone server]),
-
- RT_STANDALONE="1",
- RT_STANDALONE="0")
-AC_SUBST(RT_STANDALONE)
-
dnl RT's "maintainer mode"
-AC_ARG_WITH(devel-mode,
- AC_HELP_STRING([--with-devel-mode],
+AC_ARG_WITH(devel-mode,[],RT_DEVEL_MODE=$withval,RT_DEVEL_MODE="0")
+AC_ARG_ENABLE(devel-mode,
+ AC_HELP_STRING([--enable-devel-mode],
[Turn on development aids that might hurt you in production]),
-
- RT_DEVEL_MODE="1",
- RT_DEVEL_MODE="0")
+ RT_DEVEL_MODE=$enableval,
+ RT_DEVEL_MODE=$RT_DEVEL_MODE)
+if test "$RT_DEVEL_MODE" = yes; then
+ RT_DEVEL_MODE="1"
+else
+ RT_DEVEL_MODE="0"
+fi
AC_SUBST(RT_DEVEL_MODE)
+
+dnl RT's GraphViz dependency charts
+AC_CHECK_LIB([graph],[aginitlib],RT_GRAPHVIZ="1")
+AC_ARG_WITH(graphviz,[],RT_GRAPHVIZ=$withval)
+AC_ARG_ENABLE(graphviz,
+ AC_HELP_STRING([--enable-graphviz],
+ [Turns on support for RT's GraphViz dependency charts]),
+ RT_GRAPHVIZ=$enableval)
+if test "$RT_GRAPHVIZ" = yes; then
+ RT_GRAPHVIZ="1"
+else
+ RT_GRAPHVIZ="0"
+fi
+AC_SUBST(RT_GRAPHVIZ)
+
+dnl RT's GD pie and bar charts
+AC_CHECK_PROG([RT_GD], [gdlib-config], "yes", "no")
+AC_ARG_WITH(gd,[],RT_GD=$withval)
+AC_ARG_ENABLE(gd,
+ AC_HELP_STRING([--enable-gd],
+ [Turns on support for RT's GD pie and bar charts]),
+ RT_GD=$enableval)
+if test "$RT_GD" = yes; then
+ RT_GD="1"
+else
+ RT_GD="0"
+fi
+AC_SUBST(RT_GD)
+
+dnl RT's GPG support
+AC_CHECK_PROG([RT_GPG], [gpg], "yes", "no")
+AC_ARG_ENABLE(gpg,
+ AC_HELP_STRING([--enable-gpg],
+ [Turns on GNU Privacy Guard (GPG) support]),
+ RT_GPG=$enableval)
+if test "$RT_GPG" = yes; then
+ RT_GPG="1"
+else
+ RT_GPG="0"
+fi
+AC_SUBST(RT_GPG)
+
+
dnl This section maps the variable names this script 'natively' generates
dnl to their existing names. They should be removed from here as the .in
dnl files are changed to use the new names.
@@ -278,6 +333,7 @@ AC_SUBST([RT_BIN_PATH], ${exp_bindir})
AC_SUBST([RT_SBIN_PATH], ${exp_sbindir})
AC_SUBST([RT_VAR_PATH], ${exp_localstatedir})
AC_SUBST([RT_MAN_PATH], ${exp_mandir})
+AC_SUBST([RT_PLUGIN_PATH], ${exp_plugindir})
AC_SUBST([MASON_DATA_PATH], ${exp_masonstatedir})
AC_SUBST([MASON_SESSION_PATH], ${exp_sessionstatedir})
AC_SUBST([MASON_HTML_PATH], ${exp_htmldir})
@@ -285,31 +341,86 @@ AC_SUBST([LOCAL_ETC_PATH], ${exp_custometcdir})
AC_SUBST([MASON_LOCAL_HTML_PATH], ${exp_customhtmldir})
AC_SUBST([LOCAL_LEXICON_PATH], ${exp_customlexdir})
AC_SUBST([LOCAL_LIB_PATH], ${exp_customlibdir})
-AC_SUBST([DESTDIR], ${exp_prefix})
AC_SUBST([RT_LOG_PATH], ${exp_logfiledir})
+if test ${exp_sysconfdir} = "etc"; then
+AC_SUBST([RT_PATH_R], ${exp_prefix})
+AC_SUBST([RT_DOC_PATH_R], ${exp_prefix}/${exp_manualdir})
+AC_SUBST([RT_LOCAL_PATH_R], ${exp_prefix}/${exp_customdir})
+AC_SUBST([RT_LIB_PATH_R], ${exp_prefix}/${exp_libdir})
+AC_SUBST([RT_ETC_PATH_R], ${exp_prefix}/${exp_sysconfdir})
+AC_SUBST([CONFIG_FILE_PATH_R], ${exp_prefix}/${exp_sysconfdir})
+AC_SUBST([RT_BIN_PATH_R], ${exp_prefix}/${exp_bindir})
+AC_SUBST([RT_SBIN_PATH_R], ${exp_prefix}/${exp_sbindir})
+AC_SUBST([RT_VAR_PATH_R], ${exp_prefix}/${exp_localstatedir})
+AC_SUBST([RT_MAN_PATH_R], ${exp_prefix}/${exp_mandir})
+AC_SUBST([RT_PLUGIN_PATH_R], ${exp_prefix}/${exp_plugindir})
+AC_SUBST([MASON_DATA_PATH_R], ${exp_prefix}/${exp_masonstatedir})
+AC_SUBST([MASON_SESSION_PATH_R], ${exp_prefix}/${exp_sessionstatedir})
+AC_SUBST([MASON_HTML_PATH_R], ${exp_prefix}/${exp_htmldir})
+AC_SUBST([LOCAL_ETC_PATH_R], ${exp_prefix}/${exp_custometcdir})
+AC_SUBST([MASON_LOCAL_HTML_PATH_R], ${exp_prefix}/${exp_customhtmldir})
+AC_SUBST([LOCAL_LEXICON_PATH_R], ${exp_prefix}/${exp_customlexdir})
+AC_SUBST([LOCAL_LIB_PATH_R], ${exp_prefix}/${exp_customlibdir})
+AC_SUBST([RT_LOG_PATH_R], ${exp_prefix}/${exp_logfiledir})
+else
+AC_SUBST([RT_PATH_R], ${exp_prefix})
+AC_SUBST([RT_DOC_PATH_R], ${exp_manualdir})
+AC_SUBST([RT_LOCAL_PATH_R], ${exp_customdir})
+AC_SUBST([RT_LIB_PATH_R], ${exp_libdir})
+AC_SUBST([RT_ETC_PATH_R], ${exp_sysconfdir})
+AC_SUBST([RT_PLUGIN_PATH_R], ${exp_plugindir})
+AC_SUBST([CONFIG_FILE_PATH_R], ${exp_sysconfdir})
+AC_SUBST([RT_BIN_PATH_R], ${exp_bindir})
+AC_SUBST([RT_SBIN_PATH_R], ${exp_sbindir})
+AC_SUBST([RT_VAR_PATH_R], ${exp_localstatedir})
+AC_SUBST([RT_MAN_PATH_R], ${exp_mandir})
+AC_SUBST([MASON_DATA_PATH_R], ${exp_masonstatedir})
+AC_SUBST([MASON_SESSION_PATH_R], ${exp_sessionstatedir})
+AC_SUBST([MASON_HTML_PATH_R], ${exp_htmldir})
+AC_SUBST([LOCAL_ETC_PATH_R], ${exp_custometcdir})
+AC_SUBST([MASON_LOCAL_HTML_PATH_R], ${exp_customhtmldir})
+AC_SUBST([LOCAL_LEXICON_PATH_R], ${exp_customlexdir})
+AC_SUBST([LOCAL_LIB_PATH_R], ${exp_customlibdir})
+AC_SUBST([RT_LOG_PATH_R], ${exp_logfiledir})
+
+fi
+
dnl Configure the output files, and generate them.
dnl Binaries that should be +x
AC_CONFIG_FILES([
- sbin/rt-dump-database
- sbin/rt-setup-database
- sbin/rt-test-dependencies
- bin/mason_handler.fcgi
- bin/mason_handler.scgi
- bin/standalone_httpd
- bin/rt-crontool
- bin/rt-mailgate
- bin/rt],
- [chmod ug+x $ac_file]
+ etc/upgrade/3.8-branded-queues-extension
+ etc/upgrade/3.8-ical-extension
+ etc/upgrade/split-out-cf-categories
+ sbin/rt-attributes-viewer
+ sbin/rt-dump-database
+ sbin/rt-setup-database
+ sbin/rt-test-dependencies
+ sbin/rt-email-digest
+ sbin/rt-email-dashboards
+ sbin/rt-clean-sessions
+ sbin/rt-shredder
+ sbin/rt-validator
+ sbin/rt-email-group-admin
+ sbin/rt-server
+ bin/mason_handler.fcgi
+ bin/mason_handler.scgi
+ bin/standalone_httpd
+ bin/rt-crontool
+ bin/rt-mailgate
+ bin/rt],
+ [chmod ug+x $ac_file]
)
dnl All other generated files
AC_CONFIG_FILES([
- Makefile
- etc/RT_Config.pm
- lib/RT.pm
- bin/mason_handler.svc
- bin/webmux.pl],
+ Makefile
+ etc/RT_Config.pm
+ lib/RT.pm
+ bin/mason_handler.svc
+ bin/webmux.pl
+ t/data/configs/apache2.2+mod_perl.conf
+ t/data/configs/apache2.2+fastcgi.conf],
)
AC_OUTPUT
diff --git a/rt/docs/creating_external_custom_fields.pod b/rt/docs/creating_external_custom_fields.pod
new file mode 100644
index 0000000..f8eca44
--- /dev/null
+++ b/rt/docs/creating_external_custom_fields.pod
@@ -0,0 +1,97 @@
+=head1 External custom fields
+
+=head2 Description
+
+C<External custom fields> is extension to custom fields that allow
+you to define CF with a dynamic list of values. Loading values into
+this custom fields requires writing a little Perl code to fetch the
+data from the external source; the code that we added to RT 3.7
+allows it to load data from arbitrary external sources.
+
+=head2 Introduction into writing source of values
+
+For each type of data source that you want, you'll need to put a file
+in F</opt/rt3/local/lib/RT/CustomFieldValues/> (or equivilent if you
+installed RT someplace other than F</opt/rt3>). To get a sense of the
+code that you'll need to write, take a look at the code in
+L</opt/rt3/lib/RT/CustomFieldValues/Groups.pm> for a simple example
+which just uses RT's API to pull in a list of RT's groups.
+
+Running C<perldoc /opt/rt3/lib/RT/CustomFieldValues/External.pm> will
+show you the documentation for the API that needs to be fulfilled, by
+copying and editing the C<Groups> example is probably a fine place to
+start.
+
+Later in this doc we'll describe the example a little bit more.
+
+=head2 Configuration
+
+After the custom code is written, you need to tell RT about its
+existence by adding something like following to your RT_SiteConfig.pm:
+Set(@CustomFieldValuesSources, "RT::CustomFieldValues::MySource");
+
+The value in quotes should be the name of the class that you created.
+
+Stop and start your web server to enable any config changes. Open the web interface with
+as an administrative user (such as root) create new custom field. In order to use
+a custom source of values, you should select a custom field type
+that lets users pick values from a list, for example it could be C<Select *>
+or a type with autocompletion. It shouldn't be C<Enter one value> type
+as this type doesn't allow user to choose values. Other types that
+don't have a defined list of values are also unacceptable.
+
+Save the changes, now you have ability to select a "source" for values.
+Choose the class you wrote from the list and save changes.
+
+=head2 How to write custom source
+
+You have to implement a subclass of L<RT::CustomFieldValues::External>.
+There are two main methods you want to override:
+
+=over 4
+
+=item SourceDescription
+
+This method should return a string describing the data source; this is
+the identifier which the adimistrator will see in the dropdown in the web
+interface. See L</Configuration>.
+
+=item ExternalValues
+
+This method should return an array reference of hash references. The
+hash references should contain keys for C<name>, C<description>, and
+C<sortorder>. C<name> is most important one. The others are optional
+
+=back
+
+Here's a simple static example:
+
+ package RT::CustomFieldValues::MySource;
+
+ # define class inheritance
+ use base qw(RT::CustomFieldValues::External);
+
+ # admin friendly description, the default valuse is the name of the class
+ sub SourceDescription {
+ return 'My Source';
+ }
+
+ # actual values provider method
+ sub ExternalValues {
+ # return reference to array ([])
+ return [
+ # each element of the array is a reference to hash that describe a value
+ # possible keys are name, description and sortorder
+ { name => 'value1', description => 'external value', sortorder => 1 },
+ { name => 'value2', description => 'another external value', sortorder => 2 },
+ # values without description are also valid, the default description is empty string
+ { name => 'value3', sortorder => 3 },
+ # you can skip sortorder too, but note that the default sortorder is 0 (zero)
+ { name => 'value3' },
+ ];
+ }
+
+ 1; # don't forget to return some true value
+
+That's all. Install and configure your class as described in the L</Configuration> section.
+
diff --git a/rt/docs/design_docs/TransactionTypes.txt b/rt/docs/design_docs/TransactionTypes.txt
index 942b723..6edc408 100755
--- a/rt/docs/design_docs/TransactionTypes.txt
+++ b/rt/docs/design_docs/TransactionTypes.txt
@@ -28,8 +28,8 @@ generalized methods for
when new transaction types are needed.
-$RT::TransactionTypes ...and...
-%RT::TransactionTypes
+RT->Config->Get('TransactionTypes') ...and...
+RT->Config->Get('TransactionTypes')
- global object which contains all TransactionTypes
- used by all UIs to create menues of possible (user) actions (one TransactionType is a user action)
@@ -37,7 +37,7 @@ The UIs should call sth like
$Ticket->AddTransaction($TransactionName), which should be equivalent
with i.e. $Ticket->Correspond when $TransactionName is 'Correspond'
(AUTOLOAD should call the do-sub if exists
-$RT::TransactionTypes{$TransactionName})
+RT->Config->Get('TransactionTypes')->{$TransactionName})
The RT::Ticket::AddTransaction will create a new transaction of the
right TransactionClass (maybe via a sub
diff --git a/rt/docs/design_docs/gnupg_details_on_output_formats b/rt/docs/design_docs/gnupg_details_on_output_formats
new file mode 100644
index 0000000..e2fc175
--- /dev/null
+++ b/rt/docs/design_docs/gnupg_details_on_output_formats
@@ -0,0 +1,1253 @@
+
+*NOTE* This file is a copy of doc/DETAILS file that comes
+with gnupg-1.9.94 distribution.
+
+Format of colon listings
+========================
+First an example:
+
+$ gpg --fixed-list-mode --with-colons --list-keys \
+ --with-fingerprint --with-fingerprint wk@gnupg.org
+
+pub:f:1024:17:6C7EE1B8621CC013:899817715:1055898235::m:::scESC:
+fpr:::::::::ECAF7590EB3443B5C7CF3ACB6C7EE1B8621CC013:
+uid:f::::::::Werner Koch <wk@g10code.com>:
+uid:f::::::::Werner Koch <wk@gnupg.org>:
+sub:f:1536:16:06AD222CADF6A6E1:919537416:1036177416:::::e:
+fpr:::::::::CF8BCC4B18DE08FCD8A1615906AD222CADF6A6E1:
+sub:r:1536:20:5CE086B5B5A18FF4:899817788:1025961788:::::esc:
+fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4:
+
+The double --with-fingerprint prints the fingerprint for the subkeys
+too, --fixed-list-mode is themodern listing way printing dates in
+seconds since Epoch and does not merge the first userID with the pub
+record.
+
+
+ 1. Field: Type of record
+ pub = public key
+ crt = X.509 certificate
+ crs = X.509 certificate and private key available
+ sub = subkey (secondary key)
+ sec = secret key
+ ssb = secret subkey (secondary key)
+ uid = user id (only field 10 is used).
+ uat = user attribute (same as user id except for field 10).
+ sig = signature
+ rev = revocation signature
+ fpr = fingerprint: (fingerprint is in field 10)
+ pkd = public key data (special field format, see below)
+ grp = reserved for gpgsm
+ rvk = revocation key
+ tru = trust database information
+ spk = signature subpacket
+
+ 2. Field: A letter describing the calculated trust. This is a single
+ letter, but be prepared that additional information may follow
+ in some future versions. (not used for secret keys)
+ o = Unknown (this key is new to the system)
+ i = The key is invalid (e.g. due to a missing self-signature)
+ d = The key has been disabled
+ (deprecated - use the 'D' in field 12 instead)
+ r = The key has been revoked
+ e = The key has expired
+ - = Unknown trust (i.e. no value assigned)
+ q = Undefined trust
+ '-' and 'q' may safely be treated as the same
+ value for most purposes
+ n = Don't trust this key at all
+ m = There is marginal trust in this key
+ f = The key is fully trusted
+ u = The key is ultimately trusted. This often means
+ that the secret key is available, but any key may
+ be marked as ultimately trusted.
+ 3. Field: length of key in bits.
+ 4. Field: Algorithm: 1 = RSA
+ 16 = Elgamal (encrypt only)
+ 17 = DSA (sometimes called DH, sign only)
+ 20 = Elgamal (sign and encrypt - don't use them!)
+ (for other id's see include/cipher.h)
+ 5. Field: KeyID
+ 6. Field: Creation Date (in UTC). For UID and UAT records, this is the
+ self-signature date. Note that the dae is usally printed
+ in seconds since epoch, however, we are migrating to an ISO
+ 8601 format (e.g. "19660205T091500"). This is currently
+ only relevant for X.509, A simple way to detect the format
+ is be scannning for the 'T'.
+ 7. Field: Key or user ID/user attribute expiration date or empty if none.
+ 8. Field: Used for serial number in crt records (used to be the Local-ID).
+ For UID and UAT records, this is a hash of the user ID contents
+ used to represent that exact user ID. For trust signatures,
+ this is the trust depth seperated by the trust value by a
+ space.
+ 9. Field: Ownertrust (primary public keys only)
+ This is a single letter, but be prepared that additional
+ information may follow in some future versions. For trust
+ signatures with a regular expression, this is the regular
+ expression value, quoted as in field 10.
+10. Field: User-ID. The value is quoted like a C string to avoid
+ control characters (the colon is quoted "\x3a").
+ This is not used with --fixed-list-mode in gpg.
+ A UAT record puts the attribute subpacket count here, a
+ space, and then the total attribute subpacket size.
+ In gpgsm the issuer name comes here
+ An FPR record stores the fingerprint here.
+ The fingerprint of an revocation key is stored here.
+11. Field: Signature class. This is a 2 digit hexnumber followed by
+ either the letter 'x' for an exportable signature or the
+ letter 'l' for a local-only signature.
+ The class byte of an revocation key is also given here,
+ 'x' and 'l' ist used the same way.
+12. Field: Key capabilities:
+ e = encrypt
+ s = sign
+ c = certify
+ a = authentication
+ A key may have any combination of them in any order. In
+ addition to these letters, the primary key has uppercase
+ versions of the letters to denote the _usable_
+ capabilities of the entire key, and a potential letter 'D'
+ to indicate a disabled key.
+13. Field: Used in FPR records for S/MIME keys to store the fingerprint of
+ the issuer certificate. This is useful to build the
+ certificate path based on certificates stored in the local
+ keyDB; it is only filled if the issue certificate is
+ available. The advantage of using this value is that it is
+ guaranteed to have been been build by the same lookup
+ algorithm as gpgsm uses.
+ For "uid" recods this lists the preferences n the sameway the
+ -edit menu does.
+ For "sig" records, this is the fingerprint of the key that
+ issued the signature. Note that this is only filled in if
+ the signature verified correctly. Note also that for
+ various technical reasons, this fingerprint is only
+ available if --no-sig-cache is used.
+
+14. Field Flag field used in the --edit menu output:
+
+15. Field Used in sec/sbb to print the serial number of a token
+ (internal protect mode 1002) or a '#' if that key is a
+ simple stub (internal protect mode 1001)
+
+All dates are displayed in the format yyyy-mm-dd unless you use the
+option --fixed-list-mode in which case they are displayed as seconds
+since Epoch. More fields may be added later, so parsers should be
+prepared for this. When parsing a number the parser should stop at the
+first non-number character so that additional information can later be
+added.
+
+If field 1 has the tag "pkd", a listing looks like this:
+pkd:0:1024:B665B1435F4C2 .... FF26ABB:
+ ! ! !-- the value
+ ! !------ for information number of bits in the value
+ !--------- index (eg. DSA goes from 0 to 3: p,q,g,y)
+
+
+The "tru" trust database records have the fields:
+
+ 2: Reason for staleness of trust. If this field is empty, then the
+ trustdb is not stale. This field may have multiple flags in it:
+
+ o: Trustdb is old
+ t: Trustdb was built with a different trust model than the one we
+ are using now.
+
+ 3: Trust model:
+ 0: Classic trust model, as used in PGP 2.x.
+ 1: PGP trust model, as used in PGP 6 and later. This is the same
+ as the classic trust model, except for the addition of trust
+ signatures.
+
+ GnuPG before version 1.4 used the classic trust model by default.
+ GnuPG 1.4 and later uses the PGP trust model by default.
+
+ 4: Date trustdb was created in seconds since 1/1/1970.
+ 5: Date trustdb will expire in seconds since 1/1/1970.
+
+The "spk" signature subpacket records have the fields:
+
+ 2: Subpacket number as per RFC-2440 and later.
+ 3: Flags in hex. Currently the only two bits assigned are 1, to
+ indicate that the subpacket came from the hashed part of the
+ signature, and 2, to indicate the subpacket was marked critical.
+ 4: Length of the subpacket. Note that this is the length of the
+ subpacket, and not the length of field 5 below. Due to the need
+ for %-encoding, the length of field 5 may be up to 3x this value.
+ 5: The subpacket data. Printable ASCII is shown as ASCII, but other
+ values are rendered as %XX where XX is the hex value for the byte.
+
+
+Format of the "--status-fd" output
+==================================
+Every line is prefixed with "[GNUPG:] ", followed by a keyword with
+the type of the status line and a some arguments depending on the
+type (maybe none); an application should always be prepared to see
+more arguments in future versions.
+
+
+ NEWSIG
+ May be issued right before a signature verification starts. This
+ is useful to define a context for parsing ERROR status
+ messages. No arguments are currently defined.
+
+ GOODSIG <long keyid> <username>
+ The signature with the keyid is good. For each signature only
+ one of the three codes GOODSIG, BADSIG or ERRSIG will be
+ emitted and they may be used as a marker for a new signature.
+ The username is the primary one encoded in UTF-8 and %XX
+ escaped.
+
+ EXPSIG <long keyid> <username>
+ The signature with the keyid is good, but the signature is
+ expired. The username is the primary one encoded in UTF-8 and
+ %XX escaped.
+
+ EXPKEYSIG <long keyid> <username>
+ The signature with the keyid is good, but the signature was
+ made by an expired key. The username is the primary one
+ encoded in UTF-8 and %XX escaped.
+
+ REVKEYSIG <long keyid> <username>
+ The signature with the keyid is good, but the signature was
+ made by a revoked key. The username is the primary one
+ encoded in UTF-8 and %XX escaped.
+
+ BADSIG <long keyid> <username>
+ The signature with the keyid has not been verified okay.
+ The username is the primary one encoded in UTF-8 and %XX
+ escaped.
+
+ ERRSIG <long keyid> <pubkey_algo> <hash_algo> \
+ <sig_class> <timestamp> <rc>
+ It was not possible to check the signature. This may be
+ caused by a missing public key or an unsupported algorithm.
+ A RC of 4 indicates unknown algorithm, a 9 indicates a missing
+ public key. The other fields give more information about
+ this signature. sig_class is a 2 byte hex-value.
+
+ Note, that TIMESTAMP may either be a number with seconds since
+ epoch or an ISO 8601 string which can be detected by the
+ presence of the letter 'T' inside.
+
+ VALIDSIG <fingerprint in hex> <sig_creation_date> <sig-timestamp>
+ <expire-timestamp> <sig-version> <reserved> <pubkey-algo>
+ <hash-algo> <sig-class> <primary-key-fpr>
+
+ The signature with the keyid is good. This is the same as
+ GOODSIG but has the fingerprint as the argument. Both status
+ lines are emitted for a good signature. All arguments here
+ are on one long line. sig-timestamp is the signature creation
+ time in seconds after the epoch. expire-timestamp is the
+ signature expiration time in seconds after the epoch (zero
+ means "does not expire"). sig-version, pubkey-algo, hash-algo,
+ and sig-class (a 2-byte hex value) are all straight from the
+ signature packet. PRIMARY-KEY-FPR is the fingerprint of the
+ primary key or identical to the first argument. This is
+ useful to get back to the primary key without running gpg
+ again for this purpose.
+
+ Note, that *-TIMESTAMP may either be a number with seconds
+ since epoch or an ISO 8601 string which can be detected by the
+ presence of the letter 'T' inside.
+
+ SIG_ID <radix64_string> <sig_creation_date> <sig-timestamp>
+ This is emitted only for signatures of class 0 or 1 which
+ have been verified okay. The string is a signature id
+ and may be used in applications to detect replay attacks
+ of signed messages. Note that only DLP algorithms give
+ unique ids - others may yield duplicated ones when they
+ have been created in the same second.
+
+ Note, that SIG-TIMESTAMP may either be a number with seconds
+ since epoch or an ISO 8601 string which can be detected by the
+ presence of the letter 'T' inside.
+
+
+ ENC_TO <long keyid> <keytype> <keylength>
+ The message is encrypted to this keyid.
+ keytype is the numerical value of the public key algorithm,
+ keylength is the length of the key or 0 if it is not known
+ (which is currently always the case).
+
+ NODATA <what>
+ No data has been found. Codes for what are:
+ 1 - No armored data.
+ 2 - Expected a packet but did not found one.
+ 3 - Invalid packet found, this may indicate a non OpenPGP
+ message.
+ 4 - signature expected but not found
+ You may see more than one of these status lines.
+
+ UNEXPECTED <what>
+ Unexpected data has been encountered
+ 0 - not further specified 1
+
+
+ TRUST_UNDEFINED <error token>
+ TRUST_NEVER <error token>
+ TRUST_MARGINAL
+ TRUST_FULLY
+ TRUST_ULTIMATE
+ For good signatures one of these status lines are emitted
+ to indicate how trustworthy the signature is. The error token
+ values are currently only emiited by gpgsm.
+
+ PKA_TRUST_GOOD <mailbox>
+ PKA_TRUST_BAD <mailbox>
+ Depending on the outcome of the PKA check one of the above
+ status codes is emitted in addition to a TRUST_* status.
+ Without PKA info available or
+
+ SIGEXPIRED
+ This is deprecated in favor of KEYEXPIRED.
+
+ KEYEXPIRED <expire-timestamp>
+ The key has expired. expire-timestamp is the expiration time
+ in seconds after the epoch.
+
+ Note, that TIMESTAMP may either be a number with seconds since
+ epoch or an ISO 8601 string which can be detected by the
+ presence of the letter 'T' inside.
+
+ KEYREVOKED
+ The used key has been revoked by its owner. No arguments yet.
+
+ BADARMOR
+ The ASCII armor is corrupted. No arguments yet.
+
+ RSA_OR_IDEA
+ The IDEA algorithms has been used in the data. A
+ program might want to fallback to another program to handle
+ the data if GnuPG failed. This status message used to be emitted
+ also for RSA but this has been dropped after the RSA patent expired.
+ However we can't change the name of the message.
+
+ SHM_INFO
+ SHM_GET
+ SHM_GET_BOOL
+ SHM_GET_HIDDEN
+
+ GET_BOOL
+ GET_LINE
+ GET_HIDDEN
+ GOT_IT
+
+ NEED_PASSPHRASE <long main keyid> <long keyid> <keytype> <keylength>
+ Issued whenever a passphrase is needed.
+ keytype is the numerical value of the public key algorithm
+ or 0 if this is not applicable, keylength is the length
+ of the key or 0 if it is not known (this is currently always the case).
+
+ NEED_PASSPHRASE_SYM <cipher_algo> <s2k_mode> <s2k_hash>
+ Issued whenever a passphrase for symmetric encryption is needed.
+
+ NEED_PASSPHRASE_PIN <card_type> <chvno> [<serialno>]
+ Issued whenever a PIN is requested to unlock a card.
+
+ MISSING_PASSPHRASE
+ No passphrase was supplied. An application which encounters this
+ message may want to stop parsing immediately because the next message
+ will probably be a BAD_PASSPHRASE. However, if the application
+ is a wrapper around the key edit menu functionality it might not
+ make sense to stop parsing but simply ignoring the following
+ BAD_PASSPHRASE.
+
+ BAD_PASSPHRASE <long keyid>
+ The supplied passphrase was wrong or not given. In the latter case
+ you may have seen a MISSING_PASSPHRASE.
+
+ GOOD_PASSPHRASE
+ The supplied passphrase was good and the secret key material
+ is therefore usable.
+
+ DECRYPTION_FAILED
+ The symmetric decryption failed - one reason could be a wrong
+ passphrase for a symmetrical encrypted message.
+
+ DECRYPTION_OKAY
+ The decryption process succeeded. This means, that either the
+ correct secret key has been used or the correct passphrase
+ for a conventional encrypted message was given. The program
+ itself may return an errorcode because it may not be possible to
+ verify a signature for some reasons.
+
+ NO_PUBKEY <long keyid>
+ NO_SECKEY <long keyid>
+ The key is not available
+
+ IMPORT_CHECK <long keyid> <fingerprint> <user ID>
+ This status is emitted in interactive mode right before
+ the "import.okay" prompt.
+
+ IMPORTED <long keyid> <username>
+ The keyid and name of the signature just imported
+
+ IMPORT_OK <reason> [<fingerprint>]
+ The key with the primary key's FINGERPRINT has been imported.
+ Reason flags:
+ 0 := Not actually changed
+ 1 := Entirely new key.
+ 2 := New user IDs
+ 4 := New signatures
+ 8 := New subkeys
+ 16 := Contains private key.
+ The flags may be ORed.
+
+ IMPORT_PROBLEM <reason> [<fingerprint>]
+ Issued for each import failure. Reason codes are:
+ 0 := "No specific reason given".
+ 1 := "Invalid Certificate".
+ 2 := "Issuer Certificate missing".
+ 3 := "Certificate Chain too long".
+ 4 := "Error storing certificate".
+
+ IMPORT_RES <count> <no_user_id> <imported> <imported_rsa> <unchanged>
+ <n_uids> <n_subk> <n_sigs> <n_revoc> <sec_read> <sec_imported> <sec_dups> <not_imported>
+ Final statistics on import process (this is one long line)
+
+ FILE_START <what> <filename>
+ Start processing a file <filename>. <what> indicates the performed
+ operation:
+ 1 - verify
+ 2 - encrypt
+ 3 - decrypt
+
+ FILE_DONE
+ Marks the end of a file processing which has been started
+ by FILE_START.
+
+ BEGIN_DECRYPTION
+ END_DECRYPTION
+ Mark the start and end of the actual decryption process. These
+ are also emitted when in --list-only mode.
+
+ BEGIN_ENCRYPTION <mdc_method> <sym_algo>
+ END_ENCRYPTION
+ Mark the start and end of the actual encryption process.
+
+ BEGIN_SIGNING
+ Mark the start of the actual signing process. This may be used
+ as an indication that all requested secret keys are ready for
+ use.
+
+ DELETE_PROBLEM reason_code
+ Deleting a key failed. Reason codes are:
+ 1 - No such key
+ 2 - Must delete secret key first
+ 3 - Ambigious specification
+
+ PROGRESS what char cur total
+ Used by the primegen and Public key functions to indicate progress.
+ "char" is the character displayed with no --status-fd enabled, with
+ the linefeed replaced by an 'X'. "cur" is the current amount
+ done and "total" is amount to be done; a "total" of 0 indicates that
+ the total amount is not known. 100/100 may be used to detect the
+ end of operation.
+ Well known values for WHAT:
+ "pk_dsa" - DSA key generation
+ "pk_elg" - Elgamal key generation
+ "primegen" - Prime generation
+ "need_entropy" - Waiting for new entropy in the RNG
+ "file:XXX" - processing file XXX
+ (note that current gpg versions leave out the
+ "file:" prefix).
+ "tick" - generic tick without any special meaning - useful
+ for letting clients know that the server is
+ still working.
+ "starting_agent" - A gpg-agent was started because it is not
+ running as a daemon.
+
+
+ SIG_CREATED <type> <pubkey algo> <hash algo> <class> <timestamp> <key fpr>
+ A signature has been created using these parameters.
+ type: 'D' = detached
+ 'C' = cleartext
+ 'S' = standard
+ (only the first character should be checked)
+ class: 2 hex digits with the signature class
+
+ Note, that TIMESTAMP may either be a number with seconds since
+ epoch or an ISO 8601 string which can be detected by the
+ presence of the letter 'T' inside.
+
+ KEY_CREATED <type> <fingerprint> [<handle>]
+ A key has been created
+ type: 'B' = primary and subkey
+ 'P' = primary
+ 'S' = subkey
+ The fingerprint is one of the primary key for type B and P and
+ the one of the subkey for S. Handle is an arbitrary
+ non-whitespace string used to match key parameters from batch
+ key creation run.
+
+ KEY_NOT_CREATED [<handle>]
+ The key from batch run has not been created due to errors.
+
+
+ SESSION_KEY <algo>:<hexdigits>
+ The session key used to decrypt the message. This message will
+ only be emitted when the special option --show-session-key
+ is used. The format is suitable to be passed to the option
+ --override-session-key
+
+ NOTATION_NAME <name>
+ NOTATION_DATA <string>
+ name and string are %XX escaped; the data may be splitted
+ among several notation_data lines.
+
+ USERID_HINT <long main keyid> <string>
+ Give a hint about the user ID for a certain keyID.
+
+ POLICY_URL <string>
+ string is %XX escaped
+
+ BEGIN_STREAM
+ END_STREAM
+ Issued by pipemode.
+
+ INV_RECP <reason> <requested_recipient>
+ Issued for each unusable recipient. The reasons codes
+ currently in use are:
+ 0 := "No specific reason given".
+ 1 := "Not Found"
+ 2 := "Ambigious specification"
+ 3 := "Wrong key usage"
+ 4 := "Key revoked"
+ 5 := "Key expired"
+ 6 := "No CRL known"
+ 7 := "CRL too old"
+ 8 := "Policy mismatch"
+ 9 := "Not a secret key"
+ 10 := "Key not trusted"
+
+ Note that this status is also used for gpgsm's SIGNER command
+ where it relates to signer's of course.
+
+ NO_RECP <reserved>
+ Issued when no recipients are usable.
+
+ ALREADY_SIGNED <long-keyid>
+ Warning: This is experimental and might be removed at any time.
+
+ TRUNCATED <maxno>
+ The output was truncated to MAXNO items. This status code is issued
+ for certain external requests
+
+ ERROR <error location> <error code>
+
+ This is a generic error status message, it might be followed
+ by error location specific data. <error token> and
+ <error_location> should not contain a space. The error code
+ is a either a string commencing with a letter or such string
+ prefix with a numerical error code and an underscore; e.g.:
+ "151011327_EOF"
+
+ ATTRIBUTE <fpr> <octets> <type> <index> <count>
+ <timestamp> <expiredate> <flags>
+ This is one long line issued for each attribute subpacket when
+ an attribute packet is seen during key listing. <fpr> is the
+ fingerprint of the key. <octets> is the length of the
+ attribute subpacket. <type> is the attribute type
+ (1==image). <index>/<count> indicates that this is the Nth
+ indexed subpacket of count total subpackets in this attribute
+ packet. <timestamp> and <expiredate> are from the
+ self-signature on the attribute packet. If the attribute
+ packet does not have a valid self-signature, then the
+ timestamp is 0. <flags> are a bitwise OR of:
+ 0x01 = this attribute packet is a primary uid
+ 0x02 = this attribute packet is revoked
+ 0x04 = this attribute packet is expired
+
+ CARDCTRL <what> [<serialno>]
+ This is used to control smartcard operations.
+ Defined values for WHAT are:
+ 1 = Request insertion of a card. Serialnumber may be given
+ to request a specific card.
+ 2 = Request removal of a card.
+ 3 = Card with serialnumber detected
+ 4 = No card available.
+ 5 = No card reader available
+
+
+ PLAINTEXT <format> <timestamp> <filename>
+ This indicates the format of the plaintext that is about to be
+ written. The format is a 1 byte hex code that shows the
+ format of the plaintext: 62 ('b') is binary data, 74 ('t') is
+ text data with no character set specified, and 75 ('u') is
+ text data encoded in the UTF-8 character set. The timestamp
+ is in seconds since the epoch. If a filename is available it
+ gets printed as the third argument, percent-escaped as usual.
+
+ PLAINTEXT_LENGTH <length>
+ This indicates the length of the plaintext that is about to be
+ written. Note that if the plaintext packet has partial length
+ encoding it is not possible to know the length ahead of time.
+ In that case, this status tag does not appear.
+
+ SIG_SUBPACKET <type> <flags> <len> <data>
+ This indicates that a signature subpacket was seen. The
+ format is the same as the "spk" record above.
+
+ SC_OP_FAILURE [<code>]
+ An operation on a smartcard definitely failed. Currently
+ there is no indication of the actual error code, but
+ application should be prepared to later accept more arguments.
+ Defined values for CODE are:
+ 0 - unspecified error (identically to a missing CODE)
+ 1 - canceled
+ 2 - bad PIN
+
+ SC_OP_SUCCESS
+ A smart card operaion succeeded. This status is only printed
+ for certain operation and is mostly useful to check whether a
+ PIN change really worked.
+
+ BACKUP_KEY_CREATED fingerprint fname
+ A backup key named FNAME has been created for the key with
+ KEYID.
+
+
+Format of the "--attribute-fd" output
+=====================================
+
+When --attribute-fd is set, during key listings (--list-keys,
+--list-secret-keys) GnuPG dumps each attribute packet to the file
+descriptor specified. --attribute-fd is intended for use with
+--status-fd as part of the required information is carried on the
+ATTRIBUTE status tag (see above).
+
+The contents of the attribute data is specified by 2440bis, but for
+convenience, here is the Photo ID format, as it is currently the only
+attribute defined:
+
+ Byte 0-1: The length of the image header. Due to a historical
+ accident (i.e. oops!) back in the NAI PGP days, this is
+ a little-endian number. Currently 16 (0x10 0x00).
+
+ Byte 2: The image header version. Currently 0x01.
+
+ Byte 3: Encoding format. 0x01 == JPEG.
+
+ Byte 4-15: Reserved, and currently unused.
+
+ All other data after this header is raw image (JPEG) data.
+
+
+Format of the "--list-config" output
+====================================
+
+--list-config outputs information about the GnuPG configuration for
+the benefit of frontends or other programs that call GnuPG. There are
+several list-config items, all colon delimited like the rest of the
+--with-colons output. The first field is always "cfg" to indicate
+configuration information. The second field is one of (with
+examples):
+
+version: the third field contains the version of GnuPG.
+
+ cfg:version:1.3.5
+
+pubkey: the third field contains the public key algorithmdcaiphers
+ this version of GnuPG supports, separated by semicolons. The
+ algorithm numbers are as specified in RFC-2440.
+
+ cfg:pubkey:1;2;3;16;17
+
+cipher: the third field contains the symmetric ciphers this version of
+ GnuPG supports, separated by semicolons. The cipher numbers
+ are as specified in RFC-2440.
+
+ cfg:cipher:2;3;4;7;8;9;10
+
+digest: the third field contains the digest (hash) algorithms this
+ version of GnuPG supports, separated by semicolons. The
+ digest numbers are as specified in RFC-2440.
+
+ cfg:digest:1;2;3;8;9;10
+
+compress: the third field contains the compression algorithms this
+ version of GnuPG supports, separated by semicolons. The
+ algorithm numbers are as specified in RFC-2440.
+
+ cfg:compress:0;1;2;3
+
+group: the third field contains the name of the group, and the fourth
+ field contains the values that the group expands to, separated
+ by semicolons.
+
+For example, a group of:
+ group mynames = paige 0x12345678 joe patti
+
+would result in:
+ cfg:group:mynames:patti;joe;0x12345678;paige
+
+
+Key generation
+==============
+ Key generation shows progress by printing different characters to
+ stderr:
+ "." Last 10 Miller-Rabin tests failed
+ "+" Miller-Rabin test succeeded
+ "!" Reloading the pool with fresh prime numbers
+ "^" Checking a new value for the generator
+ "<" Size of one factor decreased
+ ">" Size of one factor increased
+
+ The prime number for Elgamal is generated this way:
+
+ 1) Make a prime number q of 160, 200, 240 bits (depending on the keysize)
+ 2) Select the length of the other prime factors to be at least the size
+ of q and calculate the number of prime factors needed
+ 3) Make a pool of prime numbers, each of the length determined in step 2
+ 4) Get a new permutation out of the pool or continue with step 3
+ if we have tested all permutations.
+ 5) Calculate a candidate prime p = 2 * q * p[1] * ... * p[n] + 1
+ 6) Check that this prime has the correct length (this may change q if
+ it seems not to be possible to make a prime of the desired length)
+ 7) Check whether this is a prime using trial divisions and the
+ Miller-Rabin test.
+ 8) Continue with step 4 if we did not find a prime in step 7.
+ 9) Find a generator for that prime.
+
+ This algorithm is based on Lim and Lee's suggestion from the
+ Crypto '97 proceedings p. 260.
+
+
+Unattended key generation
+=========================
+This feature allows unattended generation of keys controlled by a
+parameter file. To use this feature, you use --gen-key together with
+--batch and feed the parameters either from stdin or from a file given
+on the commandline.
+
+The format of this file is as follows:
+ o Text only, line length is limited to about 1000 chars.
+ o You must use UTF-8 encoding to specify non-ascii characters.
+ o Empty lines are ignored.
+ o Leading and trailing spaces are ignored.
+ o A hash sign as the first non white space character indicates a comment line.
+ o Control statements are indicated by a leading percent sign, the
+ arguments are separated by white space from the keyword.
+ o Parameters are specified by a keyword, followed by a colon. Arguments
+ are separated by white space.
+ o The first parameter must be "Key-Type", control statements
+ may be placed anywhere.
+ o Key generation takes place when either the end of the parameter file
+ is reached, the next "Key-Type" parameter is encountered or at the
+ control statement "%commit"
+ o Control statements:
+ %echo <text>
+ Print <text>.
+ %dry-run
+ Suppress actual key generation (useful for syntax checking).
+ %commit
+ Perform the key generation. An implicit commit is done
+ at the next "Key-Type" parameter.
+ %pubring <filename>
+ %secring <filename>
+ Do not write the key to the default or commandline given
+ keyring but to <filename>. This must be given before the first
+ commit to take place, duplicate specification of the same filename
+ is ignored, the last filename before a commit is used.
+ The filename is used until a new filename is used (at commit points)
+ and all keys are written to that file. If a new filename is given,
+ this file is created (and overwrites an existing one).
+ Both control statements must be given.
+ o The order of the parameters does not matter except for "Key-Type"
+ which must be the first parameter. The parameters are only for the
+ generated keyblock and parameters from previous key generations are not
+ used. Some syntactically checks may be performed.
+ The currently defined parameters are:
+ Key-Type: <algo-number>|<algo-string>
+ Starts a new parameter block by giving the type of the
+ primary key. The algorithm must be capable of signing.
+ This is a required parameter.
+ Key-Length: <length-in-bits>
+ Length of the key in bits. Default is 1024.
+ Key-Usage: <usage-list>
+ Space or comma delimited list of key usage, allowed values are
+ "encrypt", "sign", and "auth". This is used to generate the
+ key flags. Please make sure that the algorithm is capable of
+ this usage. Note that OpenPGP requires that all primary keys
+ are capable of certification, so no matter what usage is given
+ here, the "cert" flag will be on. If no Key-Usage is
+ specified, all the allowed usages for that particular
+ algorithm are used.
+ Subkey-Type: <algo-number>|<algo-string>
+ This generates a secondary key. Currently only one subkey
+ can be handled.
+ Subkey-Length: <length-in-bits>
+ Length of the subkey in bits. Default is 1024.
+ Subkey-Usage: <usage-list>
+ Similar to Key-Usage.
+ Passphrase: <string>
+ If you want to specify a passphrase for the secret key,
+ enter it here. Default is not to use any passphrase.
+ Name-Real: <string>
+ Name-Comment: <string>
+ Name-Email: <string>
+ The 3 parts of a key. Remember to use UTF-8 here.
+ If you don't give any of them, no user ID is created.
+ Expire-Date: <iso-date>|(<number>[d|w|m|y])
+ Set the expiration date for the key (and the subkey). It
+ may either be entered in ISO date format (2000-08-15) or as
+ number of days, weeks, month or years. Without a letter days
+ are assumed.
+ Preferences: <string>
+ Set the cipher, hash, and compression preference values for
+ this key. This expects the same type of string as "setpref"
+ in the --edit menu.
+ Revoker: <algo>:<fpr> [sensitive]
+ Add a designated revoker to the generated key. Algo is the
+ public key algorithm of the designated revoker (i.e. RSA=1,
+ DSA=17, etc.) Fpr is the fingerprint of the designated
+ revoker. The optional "sensitive" flag marks the designated
+ revoker as sensitive information. Only v4 keys may be
+ designated revokers.
+ Handle: <string>
+ This is an optional parameter only used with the status lines
+ KEY_CREATED and KEY_NOT_CREATED. STRING may be up to 100
+ characters and should not contain spaces. It is useful for
+ batch key generation to associate a key parameter block with a
+ status line.
+ Keyserver: <string>
+ This is an optional parameter that specifies the preferred
+ keyserver URL for the key.
+
+
+Here is an example:
+$ cat >foo <<EOF
+ %echo Generating a standard key
+ Key-Type: DSA
+ Key-Length: 1024
+ Subkey-Type: ELG-E
+ Subkey-Length: 1024
+ Name-Real: Joe Tester
+ Name-Comment: with stupid passphrase
+ Name-Email: joe@foo.bar
+ Expire-Date: 0
+ Passphrase: abc
+ %pubring foo.pub
+ %secring foo.sec
+ # Do a commit here, so that we can later print "done" :-)
+ %commit
+ %echo done
+EOF
+$ gpg --batch --gen-key foo
+ [...]
+$ gpg --no-default-keyring --secret-keyring ./foo.sec \
+ --keyring ./foo.pub --list-secret-keys
+/home/wk/work/gnupg-stable/scratch/foo.sec
+------------------------------------------
+sec 1024D/915A878D 2000-03-09 Joe Tester (with stupid passphrase) <joe@foo.bar>
+ssb 1024g/8F70E2C0 2000-03-09
+
+
+
+Layout of the TrustDB
+=====================
+The TrustDB is built from fixed length records, where the first byte
+describes the record type. All numeric values are stored in network
+byte order. The length of each record is 40 bytes. The first record of
+the DB is always of type 1 and this is the only record of this type.
+
+FIXME: The layout changed, document it here.
+
+ Record type 0:
+ --------------
+ Unused record, can be reused for any purpose.
+
+ Record type 1:
+ --------------
+ Version information for this TrustDB. This is always the first
+ record of the DB and the only one with type 1.
+ 1 byte value 1
+ 3 bytes 'gpg' magic value
+ 1 byte Version of the TrustDB (2)
+ 1 byte marginals needed
+ 1 byte completes needed
+ 1 byte max_cert_depth
+ The three items are used to check whether the cached
+ validity value from the dir record can be used.
+ 1 u32 locked flags [not used]
+ 1 u32 timestamp of trustdb creation
+ 1 u32 timestamp of last modification which may affect the validity
+ of keys in the trustdb. This value is checked against the
+ validity timestamp in the dir records.
+ 1 u32 timestamp of last validation [currently not used]
+ (Used to keep track of the time, when this TrustDB was checked
+ against the pubring)
+ 1 u32 record number of keyhashtable [currently not used]
+ 1 u32 first free record
+ 1 u32 record number of shadow directory hash table [currently not used]
+ It does not make sense to combine this table with the key table
+ because the keyid is not in every case a part of the fingerprint.
+ 1 u32 record number of the trusthashtbale
+
+
+ Record type 2: (directory record)
+ --------------
+ Informations about a public key certificate.
+ These are static values which are never changed without user interaction.
+
+ 1 byte value 2
+ 1 byte reserved
+ 1 u32 LID . (This is simply the record number of this record.)
+ 1 u32 List of key-records (the first one is the primary key)
+ 1 u32 List of uid-records
+ 1 u32 cache record
+ 1 byte ownertrust
+ 1 byte dirflag
+ 1 byte maximum validity of all the user ids
+ 1 u32 time of last validity check.
+ 1 u32 Must check when this time has been reached.
+ (0 = no check required)
+
+
+ Record type 3: (key record)
+ --------------
+ Informations about a primary public key.
+ (This is mainly used to lookup a trust record)
+
+ 1 byte value 3
+ 1 byte reserved
+ 1 u32 LID
+ 1 u32 next - next key record
+ 7 bytes reserved
+ 1 byte keyflags
+ 1 byte pubkey algorithm
+ 1 byte length of the fingerprint (in bytes)
+ 20 bytes fingerprint of the public key
+ (This is the value we use to identify a key)
+
+ Record type 4: (uid record)
+ --------------
+ Informations about a userid
+ We do not store the userid but the hash value of the userid because that
+ is sufficient.
+
+ 1 byte value 4
+ 1 byte reserved
+ 1 u32 LID points to the directory record.
+ 1 u32 next next userid
+ 1 u32 pointer to preference record
+ 1 u32 siglist list of valid signatures
+ 1 byte uidflags
+ 1 byte validity of the key calculated over this user id
+ 20 bytes ripemd160 hash of the username.
+
+
+ Record type 5: (pref record)
+ --------------
+ This record type is not anymore used.
+
+ 1 byte value 5
+ 1 byte reserved
+ 1 u32 LID; points to the directory record (and not to the uid record!).
+ (or 0 for standard preference record)
+ 1 u32 next
+ 30 byte preference data
+
+ Record type 6 (sigrec)
+ -------------
+ Used to keep track of key signatures. Self-signatures are not
+ stored. If a public key is not in the DB, the signature points to
+ a shadow dir record, which in turn has a list of records which
+ might be interested in this key (and the signature record here
+ is one).
+
+ 1 byte value 6
+ 1 byte reserved
+ 1 u32 LID points back to the dir record
+ 1 u32 next next sigrec of this uid or 0 to indicate the
+ last sigrec.
+ 6 times
+ 1 u32 Local_id of signatures dir or shadow dir record
+ 1 byte Flag: Bit 0 = checked: Bit 1 is valid (we have a real
+ directory record for this)
+ 1 = valid is set (but may be revoked)
+
+
+
+ Record type 8: (shadow directory record)
+ --------------
+ This record is used to reserve a LID for a public key. We
+ need this to create the sig records of other keys, even if we
+ do not yet have the public key of the signature.
+ This record (the record number to be more precise) will be reused
+ as the dir record when we import the real public key.
+
+ 1 byte value 8
+ 1 byte reserved
+ 1 u32 LID (This is simply the record number of this record.)
+ 2 u32 keyid
+ 1 byte pubkey algorithm
+ 3 byte reserved
+ 1 u32 hintlist A list of records which have references to
+ this key. This is used for fast access to
+ signature records which are not yet checked.
+ Note, that this is only a hint and the actual records
+ may not anymore hold signature records for that key
+ but that the code cares about this.
+ 18 byte reserved
+
+
+
+ Record Type 10 (hash table)
+ --------------
+ Due to the fact that we use fingerprints to lookup keys, we can
+ implement quick access by some simple hash methods, and avoid
+ the overhead of gdbm. A property of fingerprints is that they can be
+ used directly as hash values. (They can be considered as strong
+ random numbers.)
+ What we use is a dynamic multilevel architecture, which combines
+ hashtables, record lists, and linked lists.
+
+ This record is a hashtable of 256 entries; a special property
+ is that all these records are stored consecutively to make one
+ big table. The hash value is simple the 1st, 2nd, ... byte of
+ the fingerprint (depending on the indirection level).
+
+ When used to hash shadow directory records, a different table is used
+ and indexed by the keyid.
+
+ 1 byte value 10
+ 1 byte reserved
+ n u32 recnum; n depends on the record length:
+ n = (reclen-2)/4 which yields 9 for the current record length
+ of 40 bytes.
+
+ the total number of such record which makes up the table is:
+ m = (256+n-1) / n
+ which is 29 for a record length of 40.
+
+ To look up a key we use the first byte of the fingerprint to get
+ the recnum from this hashtable and look up the addressed record:
+ - If this record is another hashtable, we use 2nd byte
+ to index this hash table and so on.
+ - if this record is a hashlist, we walk all entries
+ until we found one a matching one.
+ - if this record is a key record, we compare the
+ fingerprint and to decide whether it is the requested key;
+
+
+ Record type 11 (hash list)
+ --------------
+ see hash table for an explanation.
+ This is also used for other purposes.
+
+ 1 byte value 11
+ 1 byte reserved
+ 1 u32 next next hash list record
+ n times n = (reclen-5)/5
+ 1 u32 recnum
+
+ For the current record length of 40, n is 7
+
+
+
+ Record type 254 (free record)
+ ---------------
+ All these records form a linked list of unused records.
+ 1 byte value 254
+ 1 byte reserved (0)
+ 1 u32 next_free
+
+
+
+Packet Headers
+===============
+
+GNUPG uses PGP 2 packet headers and also understands OpenPGP packet header.
+There is one enhancement used with the old style packet headers:
+
+ CTB bits 10, the "packet-length length bits", have values listed in
+ the following table:
+
+ 00 - 1-byte packet-length field
+ 01 - 2-byte packet-length field
+ 10 - 4-byte packet-length field
+ 11 - no packet length supplied, unknown packet length
+
+ As indicated in this table, depending on the packet-length length
+ bits, the remaining 1, 2, 4, or 0 bytes of the packet structure field
+ are a "packet-length field". The packet-length field is a whole
+ number field. The value of the packet-length field is defined to be
+ the value of the whole number field.
+
+ A value of 11 is currently used in one place: on compressed data.
+ That is, a compressed data block currently looks like <A3 01 . . .>,
+ where <A3>, binary 10 1000 11, is an indefinite-length packet. The
+ proper interpretation is "until the end of the enclosing structure",
+ although it should never appear outermost (where the enclosing
+ structure is a file).
+
++ This will be changed with another version, where the new meaning of
++ the value 11 (see below) will also take place.
++
++ A value of 11 for other packets enables a special length encoding,
++ which is used in case, where the length of the following packet can
++ not be determined prior to writing the packet; especially this will
++ be used if large amounts of data are processed in filter mode.
++
++ It works like this: After the CTB (with a length field of 11) a
++ marker field is used, which gives the length of the following datablock.
++ This is a simple 2 byte field (MSB first) containing the amount of data
++ following this field, not including this length field. After this datablock
++ another length field follows, which gives the size of the next datablock.
++ A value of 0 indicates the end of the packet. The maximum size of a
++ data block is limited to 65534, thereby reserving a value of 0xffff for
++ future extensions. These length markers must be inserted into the data
++ stream just before writing the data out.
++
++ This 2 byte field is large enough, because the application must buffer
++ this amount of data to prepend the length marker before writing it out.
++ Data block sizes larger than about 32k doesn't make any sense. Note
++ that this may also be used for compressed data streams, but we must use
++ another packet version to tell the application that it can not assume,
++ that this is the last packet.
+
+
+GNU extensions to the S2K algorithm
+===================================
+S2K mode 101 is used to identify these extensions.
+After the hash algorithm the 3 bytes "GNU" are used to make
+clear that these are extensions for GNU, the next bytes gives the
+GNU protection mode - 1000. Defined modes are:
+ 1001 - do not store the secret part at all
+ 1002 - a stub to access smartcards (not used in 1.2.x)
+
+
+Pipemode
+========
+NOTE: This is deprecated and will be removed in future versions.
+
+This mode can be used to perform multiple operations with one call to
+gpg. It comes handy in cases where you have to verify a lot of
+signatures. Currently we support only detached signatures. This mode
+is a kludge to avoid running gpg n daemon mode and using Unix Domain
+Sockets to pass the data to it. There is no easy portable way to do
+this under Windows, so we use plain old pipes which do work well under
+Windows. Because there is no way to signal multiple EOFs in a pipe we
+have to embed control commands in the data stream: We distinguish
+between a data state and a control state. Initially the system is in
+data state but it won't accept any data. Instead it waits for
+transition to control state which is done by sending a single '@'
+character. While in control state the control command os expected and
+this command is just a single byte after which the system falls back
+to data state (but does not necesary accept data now). The simplest
+control command is a '@' which just inserts this character into the
+data stream.
+
+Here is the format we use for detached signatures:
+"@<" - Begin of new stream
+"@B" - Detached signature follows.
+ This emits a control packet (1,'B')
+<detached_signature>
+"@t" - Signed text follows.
+ This emits the control packet (2, 'B')
+<signed_text>
+"@." - End of operation. The final control packet forces signature
+ verification
+"@>" - End of stream
+
+
+
+
+
+
+Other Notes
+===========
+ * For packet version 3 we calculate the keyids this way:
+ RSA := low 64 bits of n
+ ELGAMAL := build a v3 pubkey packet (with CTB 0x99) and calculate
+ a rmd160 hash value from it. This is used as the
+ fingerprint and the low 64 bits are the keyid.
+
+ * Revocation certificates consist only of the signature packet;
+ "import" knows how to handle this. The rationale behind it is
+ to keep them small.
+
+
+
+
+
+
+
+Keyserver Message Format
+=========================
+
+The keyserver may be contacted by a Unix Domain socket or via TCP.
+
+The format of a request is:
+
+====
+command-tag
+"Content-length:" digits
+CRLF
+=======
+
+Where command-tag is
+
+NOOP
+GET <user-name>
+PUT
+DELETE <user-name>
+
+
+The format of a response is:
+
+======
+"GNUPG/1.0" status-code status-text
+"Content-length:" digits
+CRLF
+============
+followed by <digits> bytes of data
+
+
+Status codes are:
+
+ o 1xx: Informational - Request received, continuing process
+
+ o 2xx: Success - The action was successfully received, understood,
+ and accepted
+
+ o 4xx: Client Error - The request contains bad syntax or cannot be
+ fulfilled
+
+ o 5xx: Server Error - The server failed to fulfill an apparently
+ valid request
+
+
+
+Documentation on HKP (the http keyserver protocol):
+
+A minimalistic HTTP server on port 11371 recognizes a GET for /pks/lookup.
+The standard http URL encoded query parameters are this (always key=value):
+
+- op=index (like pgp -kv), op=vindex (like pgp -kvv) and op=get (like
+ pgp -kxa)
+
+- search=<stringlist>. This is a list of words that must occur in the key.
+ The words are delimited with space, points, @ and so on. The delimiters
+ are not searched for and the order of the words doesn't matter (but see
+ next option).
+
+- exact=on. This switch tells the hkp server to only report exact matching
+ keys back. In this case the order and the "delimiters" are important.
+
+- fingerprint=on. Also reports the fingerprints when used with 'index' or
+ 'vindex'
+
+The keyserver also recognizes http-POSTs to /pks/add. Use this to upload
+keys.
+
+
+A better way to do this would be a request like:
+
+ /pks/lookup/<gnupg_formatierte_user_id>?op=<operation>
+
+This can be implemented using Hurd's translator mechanism.
+However, I think the whole key server stuff has to be re-thought;
+I have some ideas and probably create a white paper.
+
diff --git a/rt/docs/design_docs/rql_parser_machine.graphviz b/rt/docs/design_docs/rql_parser_machine.graphviz
index 36463ec..93ea989 100644
--- a/rt/docs/design_docs/rql_parser_machine.graphviz
+++ b/rt/docs/design_docs/rql_parser_machine.graphviz
@@ -2,6 +2,9 @@
/* GraphViz graph representing the state diagram of the RQL parser.
*/
+/* XXX: It's not up to date anymore, we should delete it or update.
+*/
+
digraph G {
PAREN -> PAREN;
diff --git a/rt/docs/design_docs/string-extraction-guide.txt b/rt/docs/design_docs/string-extraction-guide.txt
index bd60a43..757a270 100644
--- a/rt/docs/design_docs/string-extraction-guide.txt
+++ b/rt/docs/design_docs/string-extraction-guide.txt
@@ -1,5 +1,5 @@
# $File: //depot/RT/rt-devel/docs/design_docs/string-extraction-guide.txt $ $Author: ivan $
-# $Revision: 1.1 $ $Change: 1431 $ $DateTime: 2002/10/15 17:24:45 $
+# $Revision: 1.1.1.2 $ $Change: 1431 $ $DateTime: 2002/10/15 17:24:45 $
Run 'p4 edit lib/RT/I18N/zh_tw.pm' and 'perl l10n.pl' to add new
extractions to the zh_tw.pm.
@@ -63,11 +63,11 @@ that this will genereate code which will not work in RT 2.1.3. I need
to add a bit of framework to make it work in 2.1.4
-The string <& /Elements/TitleBoxStart, width=> "40%", titleright => "RT $RT::VERSION for $RT::rtname", title => 'Login' &>
+The string <& /Elements/TitleBoxStart, width=> "40%", titleright => "RT $RT::VERSION for ". RT->Config->Get('rtname'), title => 'Login' &>
should become <& /Elements/TitleBoxStart,
width=> "40%",
- titleright => loc("RT [_1] for [_2]",$RT::VERSION, $RT::rtname),
+ titleright => loc("RT [_1] for [_2]",$RT::VERSION, RT->Config->Get('rtname')),
title => loc('Login'),
&>
diff --git a/rt/docs/extending_clickable_links.pod b/rt/docs/extending_clickable_links.pod
new file mode 100644
index 0000000..6432673
--- /dev/null
+++ b/rt/docs/extending_clickable_links.pod
@@ -0,0 +1,157 @@
+=head1 MakeClicky extension
+
+=head2 Description
+
+I<MakeClicky> detects various formats of data in headers and email
+messages, and extends them with supporting links.
+
+=head2 Configuration
+
+You can configure clicky actions from RT config with @Active_MakeClicky
+option. It's ordered of the actions you want to apply.
+
+By default, RT provides two actions:
+
+=over 4
+
+=item httpurl
+
+Detects http:// and https:// URLs and adds '[Open URL]' link after the URL.
+
+=item httpurl_overwrite
+
+Also detects URLs as 'httpurl' format, but replace URL with link
+and *adds spaces* into text if it's longer then 30 chars. This allow
+browser to wrap long URLs and avoid horizontal scrolling.
+
+=back
+
+RTIR is shipped with several actions you can use: 'ip', 'ipdecimal',
+'email', 'domain' and 'RIPE'.
+
+=head2 Order of clicky actions
+
+Order of actions is important in situations when you use actions that
+could match the same block of a text, in this case only the first matching
+action from the list would be applied. For example ot makes no sense to
+use C<httpurl> and C<httpurl_overwrite> at the same time as both actions
+always match the same piece of a text.
+
+=head2 How it works
+
+Each action consists of regular expression and function that do text replace.
+When you open history of a ticket RT search in the text with the regular expresion
+for matches. If some piece of the text matches it calls the function with the match
+as argument, then replace matched text with string returned by the function. So
+in two words this feature works like 'Search and Replace' with an active replacer.
+
+Text of tickets is plain, but actions could generate arbitrary HTML.
+
+=head2 Writing custom MakeClicky actions
+
+To extend the list of actions with your own types of data, use the callback. Create
+file F<local/html/Callbacks/MyCallbacks/Elements/MakeClicky/Default>.
+
+It will be provided with arguments:
+
+=over 4
+
+=item types
+
+An array reference of hash references. Modify this array
+reference to add your own types; the first matching type will be
+used. Each hashref should contain:
+
+=over 4
+
+=item name
+
+The name of the data format; this is used in the
+configuration file to enable the format.
+
+=item regex
+
+A regular expression to match against.
+
+=item action
+
+The name of the action to run (see "actions", below)
+
+=back
+
+=item actions
+
+A hash reference of 'actions'. Modify this hash reference to change or add
+action types. Values are subroutine references which will get called when needed.
+They should return the modified string. Note that subroutine B<must escape> HTML.
+
+=item handler
+
+A subroutine reference; modify it only if you have to. This can be used
+to add pre- or post-processing around all actions.
+
+=back
+
+=head2 Actions' arguments
+
+A hash is passed to action with two keys that always exist:
+
+=over 4
+
+=item value - full match of the regular expression, this block of text will be
+replaced with action's result.
+
+=item all_matches - array with all matches including groups defined in the
+regular expression, for example if your regexp is C<qr{ticket\s+#(\d+)}> then
+the first element will be full match ("ticket #XXX") the same as in 'value' key,
+but the second one element of the array will be id of a ticket (XXX), so you
+can avoid parsing value in the action. Only eight groups of your regexps are
+passed to actions.
+
+=back
+
+=head2 Custom MakeClicky action example
+
+Create a new file F</opt/rt3/local/html/Callbacks/MyCallbacks/Elements/MakeClicky/Default>
+with the content:
+
+ <%ARGS>
+ $types => []
+ $actions => {}
+ </%ARGS>
+ <%INIT>
+ my $web_path = RT->Config->Get('WebPath');
+
+ # action that takes ticket ID as argument and returns link to the ticket
+ $actions->{'link_ticket'} = sub {
+ my %args = @_;
+ my $id = $args{'all_matches'}[1];
+ return qq{<a href="$web_path/Ticket/Display.html?id=$id">$args{value}</a>};
+ };
+
+ # add action to the list
+ push @$types, {
+ # name, that should be used in config to activate action
+ name => 'short_ticket_link',
+ # regular expression that matches text 'ticket #xxx'
+ regex => qr{ticket\s+#(\d+)}i,
+ # name of the action that should be applied
+ action => 'link_ticket',
+ };
+ </%INIT>
+
+That's all. Add C<short_ticket_link> to C<@Active_MakeClicky> option in your C<RT_SiteConfig.pm>.
+Restart your server and create test ticket with 'ticket #1' text.
+
+=head2 Notes for custom clicky actions writers
+
+Note that an action B<must escape> illegal HTML characters with entities and/or
+arguments in URLs.
+
+Complex (slow) regular expressions could slow down RT as conversion is run each
+time user open a ticket.
+
+Try to match the shortest expression you need with your regular expression otherwise another action could miss its chance to match.
+
+Precalculate values, use closures for functions.
+
diff --git a/rt/docs/gnupg_integration.pod b/rt/docs/gnupg_integration.pod
new file mode 100644
index 0000000..805ed1b
--- /dev/null
+++ b/rt/docs/gnupg_integration.pod
@@ -0,0 +1 @@
+This topic is described better in `perldoc lib/RT/Crypt/GnuPG.pm`.
diff --git a/rt/docs/porting.windows b/rt/docs/porting.windows
new file mode 100644
index 0000000..44b412b
--- /dev/null
+++ b/rt/docs/porting.windows
@@ -0,0 +1,24 @@
+Currently, RT is not very greatly supported on windows,
+But we can really run RT now, though very basicly.
+
+Scary instructions( tested on windows xp ):
+1. Install stawberry perl 5.10 or later
+2. Install Bundle::libwin32
+3. Install all cpan modules in vessel except
+cpan-Module-Signature,cpan-GnuPG-Interface,cpan-GD,cpan-IO-Tty.
+
+If you have vessel, you can run the following cmd to install:
+perl bin\shipwright-builder --skip-test --noclean --make dmake --skip cpan-Module-Signature,cpan-GnuPG-Interface,cpan-GD,cpan-IO-Tty,perl,freetype,expat,fontconfig,ncurses,readline,gnupg,libjpeg,zlib,libpng,libgd,RT
+( If you install the modules to other place, e.g. with --install-base C:\test,
+remember to add C:/test/lib/perl5 to PERL5LIB env )
+
+Else, you can install them( the list is extracted from vessel ) by CPAN:
+
+$ perl -MCPAN -e "notest install Module::Build ExtUtils::MakeMaker Devel::Symdump Pod::Coverage Test::Pod::Coverage Regexp::Common Test::Portability::Files Pod::Readme Sub::Uplevel Test::Exception Tree::Simple URI::Escape Text::WikiFormat Locale::Maketext::Fuzzy Class::MethodMaker Devel::StackTrace Class::ReturnValue Carp::Assert Carp::Assert::More HTTP::Server::Simple Test::LongString HTML::Tagset HTML::Entities IO::Uncompress::Base Compress::Raw::Zlib IO::Uncompress::Gunzip Compress::Zlib Encode LWP::UserAgent WWW::Mechanize Test::WWW::Mechanize Text::Template HTML::TreeBuilder GD::Text Tree::DAG_Node Array::Compare Test::Warn Test::Tester Test::NoWarnings Class::Accessor Class::Accessor::Chained::Fast Text::vFile::asData Data::ICal Time::ParseDate Class::Data::Inheritable Exception::Class Params::Validate Class::Container Digest::SHA1 Error Cache::Cache HTML::Mason Test::More GD::Graph DBI XML::NamespaceSupport XML::SAX XML::Simple Cache::Simple::TimedExpiry Test::HTTP::Server::Simple Params::Util Class::Inspector File::ShareDir DBD::SQLite Clone Want DBIx::SearchBuilder PerlIO::eol Module::Refresh Text::Wrapper Log::Dispatch Log::Dispatch::Perl HTML::RewriteAttributes String::ShellQuote Email::Address FCGI Test::Deep Module::Versions::Report Text::Reform Text::Autoformat Text::Quoted Class::Singleton DateTime::TimeZone List::MoreUtils DateTime::Locale DateTime Calendar::Simple Apache::Session Term::ReadKey Hook::LexWrap HTTP::Server::Simple::Mason Net::Server IPC::Run3 DBD::mysql CSS::Squish HTML::Scrubber Expect Expect::Simple Test::Expect Locale::Maketext::Lexicon Font::AFM Pod::Escapes Pod::Simple HTML::FormatText Test::Pod MIME::Types CGI::Fast UNIVERSAL::require version DBD::Pg Date::Format Mail::Mailer IO::Stringy File::Temp MIME::Entity Test::Manifest XML::Parser DateTime::Format::W3CDTF DateTime::Format::Mail XML::RSS Time::Piece Test::MockTime"
+
+4. configure RT on unix box with inplace layout, copy the configured RT to the
+windows place you want, e.g. C:\RT
+
+5. cd to C:\RT, you can run RT now by the cmd:
+perl bin\standalone_httpd 8080
+
diff --git a/rt/docs/queue_subject_tag.pod b/rt/docs/queue_subject_tag.pod
new file mode 100644
index 0000000..084c813
--- /dev/null
+++ b/rt/docs/queue_subject_tag.pod
@@ -0,0 +1,79 @@
+=head1 INTRODUCTION
+
+This text is about 'Subject Tag' property of a queue. This
+property allows you to use different tags in subjects of
+RT's notifications, by default it's rtname option from
+the config file as it's been for a long time, now you can
+use different values for different queues.
+
+=head1 CONFIGURATION
+
+=head2 Setting subject tag
+
+Open RT's web UI, goto -E<gt> Configuration -E<gt> Queues
+-E<gt> select a queue -E<gt> set 'subject tag' -E<gt>
+save changes.
+
+=head2 Using tag in templates
+
+Usually you don't need to add some code into templates to
+make subject tags work. A tag will be added in the
+beginning of subject right before sending email out.
+
+If you want to subjects to be "prefix [tag] real subject" like
+in default autoreply then you can use the following code in
+templates to place subject tag whenever you want in a template:
+
+ [{ $Ticket->QueueObj->SubjectTag || $rtname } #{$Ticket->id()}]
+
+B<Note> that in the extension from the CPAN Tag method have
+been used when in 3.8 and newer it's SubjectTag, so you have to upgrade
+your templates. Read L</UPGRADING> below.
+
+=head1 This functionality vs. RT-Extension-BrandedQueues
+
+RT-Extension-BrandedQueues is extension that's available from
+the CPAN for older versions of RT. Starting from RT 3.8 it's
+been integrated into RT core. If you are B<UPGRADING> from
+older version and were using extension from the CPAN then you
+MUST read L</UPGRADING> below.
+
+=head1 UPGRADING
+
+=head2 For everyone who is upgrading
+
+You need to modify any of your email templates which use
+the $rtname variable. To edit your templates, log into RT
+as your administrative user, then click:
+
+Configuration -> Global -> Templates -> <Some template name>
+
+For example, RT's default "Autoreply" includes this line:
+
+ "There is no need to reply to this message right now. Your ticket has been
+ assigned an ID of [{$rtname} #{$Ticket->id()}]."
+
+Change this line to read:
+
+ "There is no need to reply to this message right now. Your ticket has been
+ assigned an ID of [{ $Ticket->QueueObj->SubjectTag || $rtname } #{$Ticket->id()}]."
+
+=head2 For users of RT-Extension-BrandedQueues
+
+1) You MUST uninstall RT-Extension-BrandedQueues before upgrade
+or use clean new dir for installation and reinstall your local
+customizations. The latter way is recommended as there are many
+changes in RT 3.8 and several extensions have been integrated
+into core.
+
+2) We expect that you have backup of your RT DB around during upgrade.
+
+3) After upgrade run perl script 'etc/upgrade/3.8-branded-queues-extension'.
+This script will convert data in the DB into new format.
+
+4) In templates where you were using Tag method (for example
+C<< $Ticket-E<gt>QueueObj-E<gt>Tag >>) replace it with
+C<< $Ticket-E<gt>QueueObj-E<gt>SubjectTag >>. Read more in
+L</"Using tag in templates">
+
+=cut
diff --git a/rt/docs/templates.pod b/rt/docs/templates.pod
new file mode 100644
index 0000000..76856d4
--- /dev/null
+++ b/rt/docs/templates.pod
@@ -0,0 +1,60 @@
+=head1 Templates
+
+Each template is split into two sections. A block of headers and a body. These
+sections are separated by a blank line.
+
+=head2 Headers
+
+Your template may specify arbitrary email headers. Each header is a name, a
+colon, then a value. So, for example, to specify a subject, you can use:
+
+ Subject: Thanks for your bug report.
+
+=head3 Special Headers
+
+=over
+
+=item Content-Type: text/html
+
+The special header "Content-Type: text/html" tells RT that the template should
+be parsed as HTML. RT will automatically make the outgoing message multipart.
+That way, recipients who can read only plaintext email will receive something
+readable, while users with clients which can display HTML will receive the full
+experience. Please be aware that HTML support in mail clients varies greatly,
+much more so than different web browsers.
+
+We welcome contributions of HTML-ization of builtin templates.
+
+=back
+
+=head2 Variables
+
+The variables that your templates may use include:
+
+=over 4
+
+=item C<$Transaction>
+
+The transaction object.
+
+=item C<$rtname>
+
+The value of the "rtname" config variable.
+
+=item C<$Ticket>
+
+The ticket object. This is only set during a ticket transaction.
+
+=item C<$Requestor>
+
+This is not an object, but the name of the first requestor on the ticket.
+If this is not what you need, inspect C<< $Ticket->Requestors >>.
+
+=item C<loc("text")>
+
+A localization function. See L<Locale::Maketext>.
+
+=back
+
+=cut
+
diff --git a/rt/docs/using_forms_widgets.pod b/rt/docs/using_forms_widgets.pod
new file mode 100644
index 0000000..8deb913
--- /dev/null
+++ b/rt/docs/using_forms_widgets.pod
@@ -0,0 +1,113 @@
+=head1 Using widgets F<html/Widgets/Form*>
+
+This widgets was implemented to address several common issues in handling
+request arguments and allow developers to avoid reinventing the wheel.
+
+=head2 General info
+
+Each component shows widget by default and has two methods: Process and
+InputOnly. The first one method process arguments and return new value
+of a parametr. The second one is helper that shows only form elements
+with minimum of required text labels.
+
+So you show a widget with:
+ <& /Widgets/Form/Integer,
+ Name => 'NameOfInputElement',
+ Description => 'Input integer',
+ &>
+
+You can show only C<input> box using:
+ <& /Widgets/Form/Integer:InputOnly,
+ Name => 'NameOfInputElement',
+ &>
+
+In such a simple case you even can avoid processing. Yeah, most probably
+you want to check if value is really integer, but these widgets don't
+do validation for you, but they are more about fetching values from
+hash of arguments, showing these values to user and preserving state
+of value between form reloads (see below).
+
+=head2 Processing
+
+Processing is required when you use L<extended features|/Extendent features>,
+such as Default, Multiple or Alternative.
+
+To process arguments of a request you have to do the following:
+ $ARGS{'NameOfInputElement'} = $m->comp(
+ '/Widgets/Form/Integer:Process',
+ Arguments => \%ARGS,
+ Name => 'NameOfInputElement',
+ );
+
+The method returns processed value in canonical form. For different widgets
+a canonical form is different and depends on activated features, so you must
+always activate the same features during showing a widget and processing
+results.
+
+=head2 Extendent features
+
+=head3 Default value
+
+If C<Default> argument is true then widgets expect that there is some
+default value for argument if user fills nothing. 'Nothing' in each
+widget is different, for example in select box it's special option
+which is always the first one, in integer box string '' means empty
+value, but boolean box uses radio buttons in this case with three
+options: Yes, No and Default.
+
+Each widget that supports C<Default> feature as well has C<DefaultLabel> and
+C<DefaultValue> arguments.
+
+=head4 Processing and showing with activated Default feature
+
+When this option is activated then C<Process> method returns undef
+value if user selected default value. So for integer box it's empty
+string and so on.
+
+As well when you show a widget you should pass undef as C<CurrentValue>
+to inform widget that the current value is default one.
+
+As all methods of a widget are consistent in this behaviour so you
+shouldn't care much about that, but this allows you to implement
+custom actions if processing returned undef, for example delete user's
+preference record instead of updating it (default value may change later to).
+
+=head4 C<DefaultValue> when C<Default> is not active
+
+DefaultValue argument is still actual in the Process method even if
+C<Default> is not true. This argument defines intial value. If value
+of a key in Arguments is not defined then it's treated as intial state
+and the method returns default value.
+
+=head3 Multiple and Alternative
+
+These options are only supported by the select widget.
+
+TODO: Add more info
+
+=head2 Implementation details
+
+=head3 Boolean widget
+
+This widget a little bit tricky. When you use Default option then
+things are simple and you see three radio buttons, but in other
+case we use a checkbox. But as you know browsers don't pass unchecked
+boxes to server, so arguments of a request has no entry for them.
+
+In the latter case it's hard to figure out case when user unselected
+value. Imagine form with a checkbox, you want show it checked by
+default and as well form is reloadable (like Reply forms that have
+"Add Another File" buttons). User uncheck the box and then upload
+file, in this case you want to show user's choice instead of default,
+but browser doesn't send any value and you can not figure out if
+it's initial state or page reload. To solve this problem we use magic
+hidden input field with the same name as the box and value equal to
+zero (0). Mason folds arguments with the same name into array refs, so
+we get 0 if box is unchecked and [0, 1] if box is checked. An array
+reference is true value and 0 is defined value so we know that it's
+not initial state and avoid switching back to default. As well this
+trick works good in a case when you want show a link to a page and
+define default choice for some boolean argument, you don't need
+to set argument twice, you just set it to true value (for ex. 1) and
+things just work.
+
diff --git a/rt/etc/RT_Config.pm b/rt/etc/RT_Config.pm
index 34a4243..823189b 100644
--- a/rt/etc/RT_Config.pm
+++ b/rt/etc/RT_Config.pm
@@ -1,7 +1,3 @@
-#
-# WARNING: NEVER EDIT RT_Config.pm. Instead, copy any sections you want to change to RT_SiteConfig.pm
-# and edit them there.
-#
package RT;
@@ -15,486 +11,1220 @@ use RT::Config;
=cut
-# {{{ Base Configuration
+=head1 WARNING
-# $rtname is the string that RT will look for in mail messages to
-# figure out what ticket a new piece of mail belongs to
+NEVER EDIT RT_Config.pm.
-# Your domain name is recommended, so as not to pollute the namespace.
-# once you start using a given tag, you should probably never change it.
-# (otherwise, mail for existing tickets won't get put in the right place
+Instead, copy any sections you want to change to F<RT_SiteConfig.pm> and edit them there.
+
+=cut
+
+=head1 Base Configuration
+
+=over 4
+
+=item C<$rtname>
+
+C<$rtname> is the string that RT will look for in mail messages to
+figure out what ticket a new piece of mail belongs to.
+
+Your domain name is recommended, so as not to pollute the namespace.
+once you start using a given tag, you should probably never change it.
+(otherwise, mail for existing tickets won't get put in the right place)
+
+=cut
Set($rtname , "example.com");
-# This regexp controls what subject tags RT recognizes as its own.
-# If you're not dealing with historical $rtname values, you'll likely
-# never have to enable this feature.
-#
-# Be VERY CAREFUL with it. Note that it overrides $rtname for subject
-# token matching and that you should use only "non-capturing" parenthesis
-# grouping. For example:
-#
-# Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/i );
-#
-# and NOT
-#
-# Set($EmailSubjectTagRegex, qr/(example.com|example.org)/i );
-#
-# This setting would make RT behave exactly as it does without the
-# setting enabled.
-#
-# Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i );
+=item C<$EmailSubjectTagRegex>
+
+This regexp controls what subject tags RT recognizes as its own.
+If you're not dealing with historical C<$rtname> values, you'll likely
+never have to enable this feature.
+
+Be VERY CAREFUL with it. Note that it overrides C<$rtname> for subject
+token matching and that you should use only "non-capturing" parenthesis
+grouping. For example:
+
+C<Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/i );>
+
+and NOT
+
+C<Set($EmailSubjectTagRegex, qr/(example.com|example.org)/i );>
+
+This setting would make RT behave exactly as it does without the
+setting enabled.
+
+=cut
+
+#Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i );
+
+=item C<$Organization>
-# You should set this to your organization's DNS domain. For example,
-# fsck.com or asylum.arkham.ma.us. It's used by the linking interface to
-# guarantee that ticket URIs are unique and easy to construct.
+You should set this to your organization's DNS domain. For example,
+I<fsck.com> or I<asylum.arkham.ma.us>. It's used by the linking interface to
+guarantee that ticket URIs are unique and easy to construct.
+
+=cut
Set($Organization , "example.com");
-# $user_passwd_min defines the minimum length for user passwords. Setting
-# it to 0 disables this check
+=item C<$MinimumPasswordLength>
+
+C<$MinimumPasswordLength> defines the minimum length for user
+passwords. Setting it to 0 disables this check.
+
+=cut
+
Set($MinimumPasswordLength , "5");
-# $Timezone is used to convert times entered by users into GMT and back again
-# It should be set to a timezone recognized by your local unix box.
+=item C<$Timezone>
+
+C<$Timezone> is used to convert times entered by users into GMT and back again
+It should be set to a timezone recognized by your local unix box.
+
+=cut
+
Set($Timezone , 'US/Eastern');
-# }}}
+=back
-# {{{ Database Configuration
+=head1 Database Configuration
-# Database driver beeing used. Case matters
-# Valid types are "mysql", "Oracle" and "Pg"
+=over 4
+
+=item C<$DatabaseType>
+
+Database driver being used; case matters.
+
+Valid types are "mysql", "Oracle" and "Pg"
+
+=cut
Set($DatabaseType , 'SQLite');
-# The domain name of your database server
-# If you're running mysql and it's on localhost,
-# leave it blank for enhanced performance
+=item C<$DatabaseHost>, C<$DatabaseRTHost>
+
+The domain name of your database server.
+
+If you're running mysql and it's on localhost,
+leave it blank for enhanced performance
+
+=cut
+
Set($DatabaseHost , 'localhost');
Set($DatabaseRTHost , 'localhost');
-# The port that your database server is running on. Ignored unless it's
-# a positive integer. It's usually safe to leave this blank
+=item C<$DatabasePort>
+
+The port that your database server is running on. Ignored unless it's
+a positive integer. It's usually safe to leave this blank
+
+=cut
+
Set($DatabasePort , '');
-#The name of the database user (inside the database)
+=item C<$DatabaseUser>
+
+The name of the database user (inside the database)
+
+=cut
+
Set($DatabaseUser , 'rt_user');
-# Password the DatabaseUser should use to access the database
+=item C<$DatabasePassword>
+
+Password the C<$DatabaseUser> should use to access the database
+
+=cut
+
Set($DatabasePassword , 'rt_pass');
-# The name of the RT's database on your database server
+=item C<$DatabaseName>
+
+The name of the RT's database on your database server. For Oracle
+it's SID, DB objects are created in L<$DatabaseUser>'s schema.
+
+=cut
+
Set($DatabaseName , 'rt3');
-# If you're using Postgres and have compiled in SSL support,
-# set DatabaseRequireSSL to 1 to turn on SSL communication
+=item C<$DatabaseRequireSSL>
+
+If you're using Postgres and have compiled in SSL support,
+set C<$DatabaseRequireSSL> to 1 to turn on SSL communication
+
+=cut
+
Set($DatabaseRequireSSL , undef);
-# }}}
+=item C<$UseSQLForACLChecks>
+
+In RT for ages ACL are checked after search what in some situtations
+result in empty search pages and wrong count of tickets.
+
+Set C<$UseSQLForACLChecks> to 1 to use SQL and get rid of these problems.
+
+However, this option is beta. In some cases it result in performance
+improvements, but some setups can not handle it.
+
+=cut
+
+Set($UseSQLForACLChecks, undef);
+
+=back
+
+=head1 Incoming Mail Gateway Configuration
-# {{{ Incoming mail gateway configuration
+=over 4
-# OwnerEmail is the address of a human who manages RT. RT will send
-# errors generated by the mail gateway to this address. This address
-# should _not_ be an address that's managed by your RT instance.
+=item C<$OwnerEmail>
+
+C<$OwnerEmail> is the address of a human who manages RT. RT will send
+errors generated by the mail gateway to this address. This address
+should _not_ be an address that's managed by your RT instance.
+
+=cut
Set($OwnerEmail , 'root');
-# If $LoopsToRTOwner is defined, RT will send mail that it believes
-# might be a loop to $RT::OwnerEmail
+=item C<$LoopsToRTOwner>
+
+If C<$LoopsToRTOwner> is defined, RT will send mail that it believes
+might be a loop to C<$OwnerEmail>
+
+=cut
Set($LoopsToRTOwner , 1);
-# If $StoreLoops is defined, RT will record messages that it believes
-# to be part of mail loops.
-# As it does this, it will try to be careful not to send mail to the
-# sender of these messages
+=item C<$StoreLoops>
+
+If C<$StoreLoops> is defined, RT will record messages that it believes
+to be part of mail loops.
+
+As it does this, it will try to be careful not to send mail to the
+sender of these messages
+
+=cut
Set($StoreLoops , undef);
-# $MaxAttachmentSize sets the maximum size (in bytes) of attachments stored
-# in the database.
+=item C<$MaxAttachmentSize>
+
+C<$MaxAttachmentSize> sets the maximum size (in bytes) of attachments stored
+in the database.
+
+For mysql and oracle, we set this size at 10 megabytes.
+If you're running a postgres version earlier than 7.1, you will need
+to drop this to 8192. (8k)
+
+=cut
-# For mysql and oracle, we set this size at 10 megabytes.
-# If you're running a postgres version earlier than 7.1, you will need
-# to drop this to 8192. (8k)
Set($MaxAttachmentSize , 10000000);
-# $TruncateLongAttachments: if this is set to a non-undef value,
-# RT will truncate attachments longer than MaxAttachmentSize.
+=item C<$TruncateLongAttachments>
+
+C<$TruncateLongAttachments>: if this is set to a non-undef value,
+RT will truncate attachments longer than C<$MaxAttachmentSize>.
+
+=cut
Set($TruncateLongAttachments , undef);
-# $DropLongAttachments: if this is set to a non-undef value,
-# RT will silently drop attachments longer than MaxAttachmentSize.
+=item C<$DropLongAttachments>
+
+C<$DropLongAttachments>: if this is set to a non-undef value,
+RT will silently drop attachments longer than C<MaxAttachmentSize>.
+
+=cut
Set($DropLongAttachments , undef);
-# If $ParseNewMessageForTicketCcs is true, RT will attempt to divine
-# Ticket 'Cc' watchers from the To and Cc lines of incoming messages
-# Be forewarned that if you have _any_ addresses which forward mail to
-# RT automatically and you enable this option without modifying
-# "RTAddressRegexp" below, you will get yourself into a heap of trouble.
+=item C<$ParseNewMessageForTicketCcs>
+
+If C<$ParseNewMessageForTicketCcs> is true, RT will attempt to divine
+Ticket 'Cc' watchers from the To and Cc lines of incoming messages
+Be forewarned that if you have _any_ addresses which forward mail to
+RT automatically and you enable this option without modifying
+C<$RTAddressRegexp> below, you will get yourself into a heap of trouble.
+
+=cut
Set($ParseNewMessageForTicketCcs , undef);
-# RTAddressRegexp is used to make sure RT doesn't add itself as a ticket CC if
-# the setting above is enabled.
+=item C<$RTAddressRegexp>
+
+C<$RTAddressRegexp> is used to make sure RT doesn't add itself as a ticket CC if
+the setting above is enabled. It is important that you set this to a
+regular expression that matches all addresses used by your RT. This lets RT
+avoid sending mail to itself. It will also hide RT addresses from the list of
+"One-time Cc" and Bcc lists on ticket reply.
+
+=cut
Set($RTAddressRegexp , '^rt\@example.com$');
-# RT provides functionality which allows the system to rewrite
-# incoming email addresses. In its simplest form,
-# you can substitute the value in CanonicalizeEmailAddressReplace
-# for the value in CanonicalizeEmailAddressMatch
-# (These values are passed to the CanonicalizeEmailAddress subroutine in RT/User.pm)
-# By default, that routine performs a s/$Match/$Replace/gi on any address passed to it
+=item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace>
+
+RT provides functionality which allows the system to rewrite
+incoming email addresses. In its simplest form,
+you can substitute the value in $<CanonicalizeEmailAddressReplace>
+for the value in $<CanonicalizeEmailAddressMatch>
+(These values are passed to the $<CanonicalizeEmailAddress> subroutine in
+ F<RT/User.pm>)
+
+By default, that routine performs a C<s/$Match/$Replace/gi> on any address
+passed to it.
+
+=cut
#Set($CanonicalizeEmailAddressMatch , '@subdomain\.example\.com$');
#Set($CanonicalizeEmailAddressReplace , '@example.com');
-# set this to true and the create new user page will use the values that you
-# enter in the form but use the function CanonicalizeUserInfo in User_Local.pm
-Set($CanonicalizeOnCreate , 0);
-
-# If $SenderMustExistInExternalDatabase is true, RT will refuse to
-# create non-privileged accounts for unknown users if you are using
-# the "LookupSenderInExternalDatabase" option.
-# Instead, an error message will be mailed and RT will forward the
-# message to $RTOwner.
-#
-# If you are not using $LookupSenderInExternalDatabase, this option
-# has no effect.
-#
-# If you define an AutoRejectRequest template, RT will use this
-# template for the rejection message.
+=item C<$CanonicalizeEmailAddressMatch>
+
+Set this to true and the create new user page will use the values that you
+enter in the form but use the function CanonicalizeUserInfo in
+F<RT/User_Local.pm>
+
+=cut
+
+Set($CanonicalizeOnCreate, 0);
+
+=item C<$SenderMustExistInExternalDatabase>
+
+If C<$SenderMustExistInExternalDatabase> is true, RT will refuse to
+create non-privileged accounts for unknown users if you are using
+the C<$LookupSenderInExternalDatabase> option.
+Instead, an error message will be mailed and RT will forward the
+message to C<$RTOwner>.
+
+If you are not using C<$LookupSenderInExternalDatabase>, this option
+has no effect.
+
+If you define an AutoRejectRequest template, RT will use this
+template for the rejection message.
+
+=cut
Set($SenderMustExistInExternalDatabase , undef);
-# }}}
+=item C<$ValidateUserEmailAddresses>
-# {{{ Outgoing mail configuration
+If C<$ValidateUserEmailAddresses> is true, RT will refuse to create users with
+an invalid email address (as specified in RFC 2822) or with an email address
+made of multiple email adresses.
-# RT is designed such that any mail which already has a ticket-id associated
-# with it will get to the right place automatically.
+=cut
-# $CorrespondAddress and $CommentAddress are the default addresses
-# that will be listed in From: and Reply-To: headers of correspondence
-# and comment mail tracked by RT, unless overridden by a queue-specific
-# address.
+Set($ValidateUserEmailAddresses, undef);
-Set($CorrespondAddress , 'RT_CorrespondAddressNotSet');
+=item C<@MailPlugins>
-Set($CommentAddress , 'RT_CommentAddressNotSet');
+C<@MailPlugins> is a list of auth plugins for L<RT::Interface::Email>
+to use; see L<rt-mailgate>
+
+=cut
+
+=item C<$UnsafeEmailCommands>
+
+C<$UnsafeEmailCommands>, if set to true, enables 'take' and 'resolve'
+as possible actions via the mail gateway. As its name implies, this
+is very unsafe, as it allows email with a forged sender to possibly
+resolve arbitrary tickets!
+
+=cut
-#Sendmail Configuration
+=item C<$ExtractSubjectTagMatch>, C<$ExtractSubjectTagNoMatch>
-# $MailCommand defines which method RT will use to try to send mail
-# We know that 'sendmailpipe' works fairly well.
-# If 'sendmailpipe' doesn't work well for you, try 'sendmail'
-#
-# Note that you should remove the '-t' from $SendmailArguments
-# if you use 'sendmail' rather than 'sendmailpipe'
+The default "extract remote tracking tags" scrip settings; these
+detect when your RT is talking to another RT, and adjusts the
+subject accordingly.
+
+=cut
+
+Set($ExtractSubjectTagMatch, qr/\[.+? #\d+\]/);
+Set($ExtractSubjectTagNoMatch, ( ${RT::EmailSubjectTagRegex}
+ ? qr/\[(?:${RT::EmailSubjectTagRegex}) #\d+\]/
+ : qr/\[\Q$RT::rtname\E #\d+\]/));
+
+=back
+
+=head1 Outgoing Mail Configuration
+
+=over 4
+
+=item C<$MailCommand>
+
+C<$MailCommand> defines which method RT will use to try to send mail.
+We know that 'sendmailpipe' works fairly well. If 'sendmailpipe'
+doesn't work well for you, try 'sendmail'. Other options are 'smtp'
+or 'qmail'.
+
+Note that you should remove the '-t' from C<$SendmailArguments>
+if you use 'sendmail' rather than 'sendmailpipe'
+
+=cut
Set($MailCommand , 'sendmailpipe');
-# $SendmailArguments defines what flags to pass to $Sendmail
-# assuming you picked 'sendmail' or 'sendmailpipe' as the $MailCommand above.
-# If you picked 'sendmailpipe', you MUST add a -t flag to $SendmailArguments
+=item C<$SetOutgoingMailFrom>
+
+C<$SetOutgoingMailFrom> tells RT to set the sender envelope with the 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.
+
+=cut
+
+Set($SetOutgoingMailFrom, 0);
+
+=item C<$OverrideOutgoingMailFrom>
+
+C<$OverrideOutgoingMailFrom> is used for overwriting the Correspond
+address of the queue. The option is a hash reference of queue name to
+email address.
+
+If there is no ticket involved, then the value of the C<Default> key will be
+used.
+
+=cut
+
+Set($OverrideOutgoingMailFrom, {
+# 'Default' => 'admin@rt.example.com',
+# 'General' => 'general@rt.example.com',
+});
+
+=back
+
+=head1 Sendmail Configuration
+
+These options only take effect if C<$MailCommand> is 'sendmail' or
+'sendmailpipe'
+
+=over 4
+
+=item C<$SendmailArguments>
+
+C<$SendmailArguments> defines what flags to pass to C<$SendmailPath>
+If you picked 'sendmailpipe', you MUST add a -t flag to C<$SendmailArguments>
+These options are good for most sendmail wrappers and workalikes
+
+These arguments are good for sendmail brand sendmail 8 and newer
+C<Set($SendmailArguments,"-oi -t -ODeliveryMode=b -OErrorMode=m");>
+
+=cut
-# These options are good for most sendmail wrappers and workalikes
Set($SendmailArguments , "-oi -t");
-# $SendmailBounceArguments defines what flags to pass to $Sendmail
-# assuming RT needs to send an error (ie. bounce).
+
+=item C<$SendmailBounceArguments>
+
+C<$SendmailBounceArguments> defines what flags to pass to C<$Sendmail>
+assuming RT needs to send an error (ie. bounce).
+
+=cut
Set($SendmailBounceArguments , '-f "<>"');
-# These arguments are good for sendmail brand sendmail 8 and newer
-#Set($SendmailArguments,"-oi -t -ODeliveryMode=b -OErrorMode=m");
+=item C<$SendmailPath>
+
+If you selected 'sendmailpipe' above, you MUST specify the path to
+your sendmail binary in C<$SendmailPath>.
+
+=cut
-# If you selected 'sendmailpipe' above, you MUST specify the path
-# to your sendmail binary in $SendmailPath.
-# !! If you did not # select 'sendmailpipe' above, this has no effect!!
Set($SendmailPath , "/usr/sbin/sendmail");
-# By default, RT sets the outgoing mail's "From:" header to
-# "SenderName via RT". Setting this option to 0 disables it.
-Set($UseFriendlyFromLine , 1);
+=back
+
+=head1 SMTP Configuration
+
+These options only take effect if C<$MailCommand> is 'smtp'
+
+=over 4
+
+=item C<$SMTPServer>
+
+C<$SMTPServer> should be set to the hostname of the SMTP server to use
+
+=cut
+
+Set($SMTPServer, undef);
+
+=item C<$SMTPFrom>
+
+C<$SMTPFrom> should be set to the 'From' address to use, if not the
+email's 'From'
+
+=cut
+
+Set($SMTPFrom, undef);
+
+=item C<$SMTPDebug>
+
+C<$SMTPDebug> should be set to true to debug SMTP mail sending
+
+=cut
+
+Set($SMTPDebug, 0);
+
+=back
+
+=head1 Other Mailer Configuration
+
+=over 4
+
+=item C<@MailParams>
+
+C<@MailParams> defines a list of options passed to $MailCommand if it
+is not 'sendmailpipe', 'sendmail', or 'smtp'
+
+=cut
+
+Set(@MailParams, ());
+
+=item C<$CorrespondAddress>, C<$CommentAddress>
+
+RT is designed such that any mail which already has a ticket-id associated
+with it will get to the right place automatically.
+
+C<$CorrespondAddress> and C<$CommentAddress> are the default addresses
+that will be listed in From: and Reply-To: headers of correspondence
+and comment mail tracked by RT, unless overridden by a queue-specific
+address.
+
+=cut
+
+Set($CorrespondAddress , '');
+
+Set($CommentAddress , '');
+
+=item C<$DashboardAddress>
+
+The email address from which RT will send dashboards. If none is set, then
+C<$OwnerEmail> will be used.
+
+=cut
+
+Set($DashboardAddress, '');
+
+=item C<$UseFriendlyFromLine>
+
+By default, RT sets the outgoing mail's "From:" header to
+"SenderName via RT". Setting C<$UseFriendlyFromLine> to 0 disables it.
+
+=cut
+
+Set($UseFriendlyFromLine, 1);
+
+=item C<$FriendlyFromLineFormat>
+
+C<sprintf()> format of the friendly 'From:' header; its arguments
+are SenderName and SenderEmailAddress.
+
+=cut
-# sprintf() format of the friendly 'From:' header; its arguments
-# are SenderName and SenderEmailAddress.
-Set($FriendlyFromLineFormat , "\"%s via RT\" <%s>");
+Set($FriendlyFromLineFormat, "\"%s via RT\" <%s>");
-# RT can optionally set a "Friendly" 'To:' header when sending messages to
-# Ccs or AdminCcs (rather than having a blank 'To:' header.
+=item C<$UseFriendlyToLine>
+
+RT can optionally set a "Friendly" 'To:' header when sending messages to
+Ccs or AdminCcs (rather than having a blank 'To:' header.
+
+This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL
+If you are using sendmail, rather than postfix, qmail, exim or some other MTA,
+you _must_ disable this option.
+
+=cut
+
+Set($UseFriendlyToLine, 0);
+
+=item C<$FriendlyToLineFormat>
+
+C<sprintf()> format of the friendly 'From:' header; its arguments
+are WatcherType and TicketId.
+
+=cut
-# This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL
-# If you are using sendmail, rather than postfix, qmail, exim or some other MTA,
-# you _must_ disable this option.
+Set($FriendlyToLineFormat, "\"%s of ". RT->Config->Get('rtname') ." Ticket #%s\":;");
-Set($UseFriendlyToLine , 0);
+=item C<$NotifyActor>
-# sprintf() format of the friendly 'From:' header; its arguments
-# are WatcherType and TicketId.
-Set($FriendlyToLineFormat, "\"%s of $RT::rtname Ticket #%s\":;");
+By default, RT doesn't notify the person who performs an update, as they
+already know what they've done. If you'd like to change this behaviour,
+Set C<$NotifyActor> to 1
-# By default, RT doesn't notify the person who performs an update, as they
-# already know what they've done. If you'd like to change this behaviour,
-# Set $NotifyActor to 1
+=cut
Set($NotifyActor, 0);
-# By default, RT records each message it sends out to its own internal database.# To change this behaviour, set $RecordOutgoingEmail to 0
+=item C<$RecordOutgoingEmail>
+
+By default, RT records each message it sends out to its own internal database.
+To change this behavior, set C<$RecordOutgoingEmail> to 0
+
+=cut
Set($RecordOutgoingEmail, 1);
-# VERP support (http://cr.yp.to/proto/verp.txt)
-# uncomment the following two directives to generate envelope senders
-# of the form ${VERPPrefix}${originaladdress}@${VERPDomain}
-# (i.e. rt-jesse=fsck.com@rt.example.com ) This currently only works
-# with sendmail and sendmailppie.
+=item C<$VERPPrefix>, C<$VERPPrefix>
+
+VERP support (http://cr.yp.to/proto/verp.txt)
+
+uncomment the following two directives to generate envelope senders
+of the form C<${VERPPrefix}${originaladdress}@${VERPDomain}>
+(i.e. rt-jesse=fsck.com@rt.example.com ).
+
+This currently only works with sendmail and sendmailppie.
+
+=cut
+
# Set($VERPPrefix, 'rt-');
# Set($VERPDomain, $RT::Organization);
-# }}}
-# {{{ Logging
+=item C<$ForwardFromUser>
-# Logging. The default is to log anything except debugging
-# information to syslog. Check the Log::Dispatch POD for
-# information about how to get things by syslog, mail or anything
-# else, get debugging info in the log, etc.
+By default, RT forwards a message using queue's address and adds RT's tag into
+subject of the outgoing message, so recipients' replies go into RT as correspondents.
+
+To change this behavior, set C<$ForwardFromUser> to true value and RT will use
+address of the current user and leave subject without RT's tag.
+
+=cut
+
+Set($ForwardFromUser, 0);
+
+=item C<$ShowBccHeader>
+
+By default RT hides from the web UI information about blind copies user sent on
+reply or comment.
+
+To change this set the following option to true value.
+
+=cut
-# It might generally make
-# sense to send error and higher by email to some administrator.
-# If you do this, be careful that this email isn't sent to this RT instance.
+Set($ShowBccHeader, 0);
-# the minimum level error that will be logged to the specific device.
-# levels from lowest to highest:
-# debug info notice warning error critical alert emergency
+=item C<$DashboardSubject>
+
+Lets you set the subject of dashboards. Arguments are the frequency (Daily,
+Weekly, Monthly) of the dashboard and the dashboard's name. [_1] for the name
+of the dashboard.
+
+=cut
+
+Set($DashboardSubject, '%s Dashboard: %s');
+
+=back
+
+=head1 GnuPG Configuration
+
+A full description of the (somewhat extensive) GnuPG integration can be found
+by running the command `perldoc L<RT::Crypt::GnuPG>` (or `perldoc
+ lib/RT/Crypt/GnuPG.pm` from your RT install directory).
+
+=over 4
+
+=item C<%GnuPG>
+
+Set C<OutgoingMessagesFormat> to 'inline' to use inline encryption and
+signatures instead of 'RFC' (GPG/MIME: RFC3156 and RFC1847) format.
+
+If you want to allow people to encrypt attachments inside the DB then
+set C<AllowEncryptDataInDB> to true
+
+Set C<RejectOnMissingPrivateKey> to false if you don't want to reject
+emails encrypted for key RT doesn't have and can not decrypt.
+
+Set C<RejectOnBadData> to false if you don't want to reject letters
+with incorrect GnuPG data.
+
+=cut
+
+Set( %GnuPG,
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC', # Inline
+ AllowEncryptDataInDB => 0,
+
+ RejectOnMissingPrivateKey => 1,
+ RejectOnBadData => 1,
+);
+
+=item C<%GnuPGOptions>
+
+Options of GnuPG program.
+
+If you override this in your RT_SiteConfig, you should be sure
+to include a homedir setting.
+
+NOTE that options with '-' character MUST be quoted.
+
+=cut
+
+Set(%GnuPGOptions,
+ homedir => 'var/data/gpg',
+
+# URL of a keyserver
+# keyserver => 'hkp://subkeys.pgp.net',
+
+# enables the automatic retrieving of keys when encrypting
+# 'auto-key-locate' => 'keyserver',
+
+# enables the automatic retrieving of keys when verifying signatures
+# 'auto-key-retrieve' => undef,
+);
+
+
+=back
+
+=head1 Logging Configuration
+
+The default is to log anything except debugging
+information to syslog. Check the L<Log::Dispatch> POD for
+information about how to get things by syslog, mail or anything
+else, get debugging info in the log, etc.
+
+It might generally make sense to send error and higher by email to
+some administrator. If you do this, be careful that this email
+isn't sent to this RT instance. Mail loops will generate a critical
+log message.
+
+=over 4
+
+=item C<$LogToSyslog>, C<$LogToScreen>
+
+The minimum level error that will be logged to the specific device.
+From lowest to highest priority, the levels are:
+ debug info notice warning error critical alert emergency
+
+=cut
+
+Set($LogToSyslog , 'info');
+Set($LogToScreen , 'info');
+
+=item C<$LogToFile>, C<$LogDir>, C<$LogToFileNamed>
+
+Logging to a standalone file is also possible, but note that the
+file should needs to both exist and be writable by all direct users
+of the RT API. This generally include the web server, whoever
+rt-crontool runs as. Note that as rt-mailgate and the RT CLI go
+through the webserver, so their users do not need to have write
+permissions to this file. If you expect to have multiple users of
+the direct API, Best Practical recommends using syslog instead of
+direct file logging.
+
+=cut
-# Mail loops will generate a critical log message.
-Set($LogToSyslog , 'debug');
-Set($LogToScreen , 'error');
Set($LogToFile , undef);
-Set($LogDir, '/opt/rt3/var/log');
+Set($LogDir, 'var/log');
Set($LogToFileNamed , "rt.log"); #log to rt.log
-# If true generates stack traces to file log or screen
-# never generates traces to syslog
+=item C<$LogStackTraces>
+
+If set to a log level then logging will include stack traces for
+messages with level equal to or greater than specified.
-Set($LogStackTraces , 0);
+NOTICE: Stack traces include parameters supplied to functions or
+methods. It is possible for stack trace logging to reveal sensitive
+information such as passwords or ticket content in your logs.
-# On Solaris or UnixWare, set to ( socket => 'inet' ). Options here
-# override any other options RT passes to Log::Dispatch::Syslog.
-# Other interesting flags include facility and logopt. (See the
-# Log::Dispatch::Syslog documentation for more information.) (Maybe
-# ident too, if you have multiple RT installations.)
+=cut
+
+Set($LogStackTraces, '');
+
+=item C<@LogToSyslogConf>
-@LogToSyslogConf = () unless (@LogToSyslogConf);
+On Solaris or UnixWare, set to ( socket => 'inet' ). Options here
+override any other options RT passes to L<Log::Dispatch::Syslog>.
+Other interesting flags include facility and logopt. (See the
+L<Log::Dispatch::Syslog> documentation for more information.) (Maybe
+ident too, if you have multiple RT installations.)
+
+=cut
+
+Set(@LogToSyslogConf, ());
+
+=item C<$StatementLog>,
+
+RT has rudimentary SQL statement logging support if you have
+DBIx-SearchBuilder 1.31_1 or higher; simply set C<$StatementLog> to be
+the level that you wish SQL statements to be logged at.
+
+=cut
-# RT has rudimentary SQL statement logging support if you have
-# DBIx-SearchBuilder 1.31_1 or higher; simply set $StatementLog to be
-# the level that you wish SQL statements to be logged at.
Set($StatementLog, undef);
-# }}}
+=back
+
+=head1 Web Interface Configuration
+
+=over 4
+
+=item C<$WebDefaultStylesheet>
+
+This determines the default stylesheet the RT web interface will use.
+RT ships with several themes by default:
+
+ web2 The totally new, default layout for RT 3.8
+ 3.5-default RT 3.5 and 3.6 original layout
+ 3.4-compat A 3.4 compatibility stylesheet to make RT look
+ (mostly) like 3.4
+
+This value actually specifies a directory in F<share/html/NoAuth/css/>
+from which RT will try to load the file main.css (which should
+@import any other files the stylesheet needs). This allows you to
+easily and cleanly create your own stylesheets to apply to RT. This
+option can be overridden by users in their preferences.
+
+=cut
+
+Set($WebDefaultStylesheet, 'web2');
+
+=item C<$UsernameFormat>
+
+This determines how user info is displayed. 'concise' will show one of
+either NickName, RealName, Name or EmailAddress, depending on what exists
+and whether the user is privileged or not. 'verbose' will show RealName and
+EmailAddress.
+
+=cut
+
+Set($UsernameFormat, 'concise');
+
+=item C<$WebDomain>
+
+Domain name of the RT server, eg 'www.example.com'. It should not contain
+anything else, but server name.
+
+=cut
+
+Set( $WebDomain, 'localhost' );
+
+=item C<$WebPort>
+
+If we're running as a superuser, run on port 80
+Otherwise, pick a high port for this user.
+
+443 is default port for https protocol.
-# {{{ Web interface configuration
+=cut
+
+Set($WebPort, 80);# + ($< * 7274) % 32766 + ($< && 1024));
+
+=item C<$WebPath>
+
+If you're putting the web ui somewhere other than at the root of
+your server, you should set C<$WebPath> to the path you'll be
+serving RT at.
+
+C<$WebPath> requires a leading / but no trailing /, or it can be blank.
+
+In most cases, you should leave C<$WebPath> set to '' (an empty value).
+
+=cut
+
+Set($WebPath, "");
+
+=item C<$WebBaseURL>, C<$WebURL>
-# This determines the default stylesheet the RT web interface will use.
-# RT ships with two valid values by default:
-#
-# 3.5-default The totally new, default layout for RT 3.5
-# 3.4-compat A 3.4 compatibility stylesheet to make RT 3.5 look
-# (mostly) like 3.4
-#
-# This value actually specifies a directory in share/html/NoAuth/css/
-# from which RT will try to load the file main.css (which should
-# @import any other files the stylesheet needs). This allows you to
-# easily and cleanly create your own stylesheets to apply to RT.
+Usually you don't want to set these options. The only obviouse reason is
+RT accessible via https protocol on non standard port, eg
+'https://rt.example.com:9999'. In all other cases these options are computed
+using C<$WebDomain>, C<$WebPort> and C<$WebPath>.
-Set($WebDefaultStylesheet, '3.5-default');
+C<$WebBaseURL> is the scheme, server and port (eg 'http://rt.example.com')
+for constructing urls to the web UI. C<$WebBaseURL> doesn't need a trailing /.
+
+C<$WebURL> is the C<$WebBaseURL>, C<$WebPath> and trailing /, for example:
+'http://www.example.com/rt/'.
+
+=cut
+
+my $port = RT->Config->Get('WebPort');
+Set($WebBaseURL,
+ ($port == 443? 'https': 'http') .'://'
+ . RT->Config->Get('WebDomain')
+ . ($port != 80 && $port != 443? ":$port" : '')
+);
+
+Set($WebURL, RT->Config->Get('WebBaseURL') . RT->Config->Get('WebPath') . "/");
+
+=item C<$WebImagesURL>
+
+C<$WebImagesURL> points to the base URL where RT can find its images.
+Define the directory name to be used for images in rt web
+documents.
+
+=cut
-# Define the directory name to be used for images in rt web
-# documents.
+Set($WebImagesURL, RT->Config->Get('WebPath') . "/NoAuth/images/");
-# If you're putting the web ui somewhere other than at the root of
-# your server, you should set $WebPath to the path you'll be
-# serving RT at.
-# $WebPath requires a leading / but no trailing /.
-#
-# In most cases, you should leave $WebPath set to '' (an empty value).
+=item C<$LogoURL>
-Set($WebPath , "");
+C<$LogoURL> points to the URL of the RT logo displayed in the web UI
-# If we're running as a superuser, run on port 80
-# Otherwise, pick a high port for this user.
+=cut
-Set($WebPort , 80);# + ($< * 7274) % 32766 + ($< && 1024));
+Set($LogoURL, RT->Config->Get('WebImagesURL') . "bplogo.gif");
-# This is the Scheme, server and port for constructing urls to webrt
-# $WebBaseURL doesn't need a trailing /
+=item C<$WebNoAuthRegex>
-Set($WebBaseURL , "http://localhost:$WebPort");
+What portion of RT's URL space should not require authentication.
-Set($WebURL , $WebBaseURL . $WebPath . "/");
+This is mostly for extension and doesn't mean RT will work without
+login if you change it.
-# $WebImagesURL points to the base URL where RT can find its images.
+=cut
-Set($WebImagesURL , $WebPath . "/NoAuth/images/");
+Set($WebNoAuthRegex, qr{^ (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
-# $LogoURL points to the URL of the RT logo displayed in the web UI
+=item C<$SelfServiceRegex>
-Set($LogoURL , $WebImagesURL . "bplogo.gif");
+What portion of RT's URLspace should be accessible to Unprivileged users
+This does not override the redirect from F</Ticket/Display.html> to
+F</SelfService/Display.html> when Unprivileged users attempt to access
+ticked displays
-# WebNoAuthRegex - What portion of RT's URLspace should not require
-# authentication.
-Set($WebNoAuthRegex, qr!^(?:/+NoAuth/|
- /+REST/\d+\.\d+/NoAuth/)!x );
+=cut
-# SelfServiceRegex - What portion of RT's URLspace should
-# be accessible to Unprivileged users
-# This does not override the redirect from /Ticket/Display.html
-# to /SelfService/Display.html when Unprivileged
-# users attempt to access ticked displays
Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
-# For message boxes, set the entry box width and what type of wrapping
-# to use.
-#
-# Default width: 72
-Set($MessageBoxWidth , 72);
+=item C<$MessageBoxWidth>, C<$MessageBoxHeight>
+
+For message boxes, set the entry box width, height and what type of
+wrapping to use. These options can be overridden by users in their
+preferences.
+
+Default width: 72, height: 15
+
+These settings only apply to the non-RichText message box.
+See below for Rich Text settings.
+
+=cut
+
+Set($MessageBoxWidth, 72);
+Set($MessageBoxHeight, 15);
+
+=item C<$MessageBoxWrap>
+
+Default wrapping: "HARD" (choices "SOFT", "HARD")
+
+Wrapping is disabled when using MessageBoxRichText because
+of a bad interaction between IE and wrapping with the Rich
+Text Editor.
+
+=cut
-# Default wrapping: "HARD" (choices "SOFT", "HARD")
Set($MessageBoxWrap, "HARD");
-# Support implicit links in WikiText custom fields? A true value
-# causes InterCapped or ALLCAPS words in WikiText fields to
-# automatically become links to searches for those words. If used on
-# RTFM articles, it links to the RTFM article with that name.
+=item C<$MessageBoxRichText>
+
+Should "rich text" editing be enabled? This option lets your users send html email messages from the web interface.
+
+=cut
+
+Set($MessageBoxRichText, 1);
+
+=item C<$MessageBoxRichTextHeight>
+
+Height of RichText javascript enabled editing boxes (in pixels)
+
+=cut
+
+Set($MessageBoxRichTextHeight, 200);
+
+=item C<$MessageBoxIncludeSignature>
+
+Should your user's signatures (from their Preferences page) be included in Comments and Replies
+
+=cut
+
+Set($MessageBoxIncludeSignature, 1);
+
+=item C<$WikiImplicitLinks>
+
+Support implicit links in WikiText custom fields? A true value
+causes InterCapped or ALLCAPS words in WikiText fields to
+automatically become links to searches for those words. If used on
+RTFM articles, it links to the RTFM article with that name.
+
+=cut
+
Set($WikiImplicitLinks, 0);
-# if TrustHTMLAttachments is not defined, we will display them
-# as text. This prevents malicious HTML and javascript from being
-# sent in a request (although there is probably more to it than that)
-Set($TrustHTMLAttachments , undef);
-
-# Should RT redistribute correspondence that it identifies as
-# machine generated? A true value will do so; setting this to '0'
-# will cause no such messages to be redistributed.
-# You can also use 'privileged' (the default), which will redistribute
-# only to privileged users. This helps to protect against malformed
-# bounces and loops caused by autocreated requestors with bogus addresses.
+=item C<$TrustHTMLAttachments>
+
+if C<TrustHTMLAttachments> is not defined, we will display them
+as text. This prevents malicious HTML and javascript from being
+sent in a request (although there is probably more to it than that)
+
+=cut
+
+Set($TrustHTMLAttachments, undef);
+
+=item C<$RedistributeAutoGeneratedMessages>
+
+Should RT redistribute correspondence that it identifies as
+machine generated? A true value will do so; setting this to '0'
+will cause no such messages to be redistributed.
+You can also use 'privileged' (the default), which will redistribute
+only to privileged users. This helps to protect against malformed
+bounces and loops caused by autocreated requestors with bogus addresses.
+
+=cut
+
Set($RedistributeAutoGeneratedMessages, 'privileged');
-# If PreferRichText is set to a true value, RT will show HTML/Rich text
-# messages in preference to their plaintext alternatives. RT "scrubs" the
-# html to show only a minimal subset of HTML to avoid possible contamination
-# by cross-site-scripting attacks.
+=item C<$PreferRichText>
+
+If C<$PreferRichText> is set to a true value, RT will show HTML/Rich text
+messages in preference to their plaintext alternatives. RT "scrubs" the
+html to show only a minimal subset of HTML to avoid possible contamination
+by cross-site-scripting attacks.
+
+=cut
+
Set($PreferRichText, undef);
-# If $WebExternalAuth is defined, RT will defer to the environment's
-# REMOTE_USER variable.
+=item C<$WebExternalAuth>
-Set($WebExternalAuth , undef);
+If C<$WebExternalAuth> is defined, RT will defer to the environment's
+REMOTE_USER variable.
+
+=cut
-# If $WebFallbackToInternalAuth is undefined, the user is allowed a chance
-# of fallback to the login screen, even if REMOTE_USER failed.
+Set($WebExternalAuth, undef);
+
+=item C<$WebExternalAuthContinuous>
+
+If C<$WebExternalAuthContinuous> is defined, RT will check for the
+REMOTE_USER on each access. If you would prefer this to only happen
+once (at initial login) set this to a false value. The default setting
+will help ensure that if your external auth system deauthenticates a
+user, RT notices as soon as possible.
+
+=cut
+
+Set($WebExternalAuthContinuous, 1);
+
+=item C<$WebFallbackToInternalAuth>
+
+If C<$WebFallbackToInternalAuth> is defined, the user is allowed a chance
+of fallback to the login screen, even if REMOTE_USER failed.
+
+=cut
Set($WebFallbackToInternalAuth , undef);
-# $WebExternalGecos means to match 'gecos' field as the user identity);
-# useful with mod_auth_pwcheck and IIS Integrated Windows logon.
+=item C<$WebExternalGecos>
+
+C<$WebExternalGecos> means to match 'gecos' field as the user identity);
+useful with mod_auth_pwcheck and IIS Integrated Windows logon.
+
+=cut
Set($WebExternalGecos , undef);
-# $WebExternalAuto will create users under the same name as REMOTE_USER
-# upon login, if it's missing in the Users table.
+=item C<$WebExternalAuto>
+
+C<$WebExternalAuto> will create users under the same name as REMOTE_USER
+upon login, if it's missing in the Users table.
+
+=cut
Set($WebExternalAuto , undef);
-# If $WebExternalAuto is true, this will be passed to User's
-# Create method. Use it to set defaults, such as creating
-# Unprivileged users with { Privileged => 0 }
-# Must be a hashref of arguments
+=item C<$AutoCreate>
+
+If C<$WebExternalAuto> is true, C<$AutoCreate> will be passed to User's
+Create method. Use it to set defaults, such as creating
+Unprivileged users with C<{ Privileged => 0 }>
+( Must be a hashref of arguments )
+
+=cut
Set($AutoCreate, undef);
-# $WebSessionClass is the class you wish to use for managing Sessions.
-# It defaults to use your SQL database, but if you are using MySQL 3.x and
-# plans to use non-ascii Queue names, uncomment and add this line to
-# RT_SiteConfig.pm will prevent session corruption.
+=item C<$WebSessionClass>
+
+C<$WebSessionClass> is the class you wish to use for managing Sessions.
+It defaults to use your SQL database, but if you are using MySQL 3.x and
+plans to use non-ascii Queue names, uncomment and add this line to
+F<RT_SiteConfig.pm> will prevent session corruption.
+
+=cut
# Set($WebSessionClass , 'Apache::Session::File');
+=item C<$AutoLogoff>
+
+By default, RT's user sessions persist until a user closes his or her
+browser. With the C<$AutoLogoff> option you can setup session lifetime in
+minutes. A user will be logged out if he or she doesn't send any requests
+to RT for the defined time.
+
+=cut
-# By default, RT's session cookie isn't marked as "secure" Some web browsers
-# will treat secure cookies more carefully than non-secure ones, being careful
-# not to write them to disk, only send them over an SSL secured connection
-# and so on. To enable this behaviour, set # $WebSecureCookies to a true value.
-# NOTE: You probably don't want to turn this on _unless_ users are only connecting
-# via SSL encrypted HTTP connections.
+Set($AutoLogoff, 0);
+
+=item C<$WebSecureCookies>
+
+By default, RT's session cookie isn't marked as "secure" Some web browsers
+will treat secure cookies more carefully than non-secure ones, being careful
+not to write them to disk, only send them over an SSL secured connection
+and so on. To enable this behaviour, set C<$WebSecureCookies> to a true value.
+NOTE: You probably don't want to turn this on _unless_ users are only connecting
+via SSL encrypted HTTP connections.
+
+=cut
Set($WebSecureCookies, 0);
+=item C<$WebFlushDbCacheEveryRequest>
-# By default, RT clears its database cache after every page view.
-# This ensures that you've always got the most current information
-# when working in a multi-process (mod_perl or FastCGI) Environment
-# Setting $WebFlushDbCacheEveryRequest to '0' will turn this off,
-# which will speed RT up a bit, at the expense of a tiny bit of data
-# accuracy.
+By default, RT clears its database cache after every page view.
+This ensures that you've always got the most current information
+when working in a multi-process (mod_perl or FastCGI) Environment
+Setting C<$WebFlushDbCacheEveryRequest> to '0' will turn this off,
+which will speed RT up a bit, at the expense of a tiny bit of data
+accuracy.
+
+=cut
Set($WebFlushDbCacheEveryRequest, '1');
-# $MaxInlineBody is the maximum attachment size that we want to see
-# inline when viewing a transaction. 13456 is a random sane-sounding
-# default.
+=item C<$MaxInlineBody>
+
+C<$MaxInlineBody> is the maximum attachment size that we want to see
+inline when viewing a transaction. RT will inline any text if value
+is undefined or 0. This option can be overridden by users in their
+preferences.
+
+=cut
+
+Set($MaxInlineBody, 12000);
+
+=item C<$DefaultSummaryRows>
-Set($MaxInlineBody, 13456);
+C<$DefaultSummaryRows> is default number of rows displayed in for search
+results on the frontpage.
-# $DefaultSummaryRows is default number of rows displayed in for search
-# results on the frontpage.
+=cut
Set($DefaultSummaryRows, 10);
-# By default, RT shows newest transactions at the bottom of the ticket
-# history page, if you want see them at the top set this to '0'.
+=item C<$HomePageRefreshInterval>
+
+C<$HomePageRefreshInterval> is default number of seconds to refresh the RT
+home page. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
+
+=cut
+
+Set($HomePageRefreshInterval, 0);
+
+=item C<$SearchResultsRefreshInterval>
+
+C<$SearchResultsRefreshInterval> is default number of seconds to refresh
+search results in RT. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
+
+=cut
+
+Set($SearchResultsRefreshInterval, 0);
+
+=item C<$OldestTransactionsFirst>
+
+By default, RT shows newest transactions at the bottom of the ticket
+history page, if you want see them at the top set this to '0'. This
+option can be overridden by users in their preferences.
+
+=cut
Set($OldestTransactionsFirst, '1');
-# By default, RT shows images attached to incoming (and outgoing) ticket updates
-# inline. Set this variable to 0 if you'd like to disable that behaviour
+=item C<$ShowTransactionImages>
+
+By default, RT shows images attached to incoming (and outgoing) ticket updates
+inline. Set this variable to 0 if you'd like to disable that behaviour
+
+=cut
Set($ShowTransactionImages, 1);
+=item C<$PlainTextPre>
+
+Normally plaintext attachments are displayed as HTML with line
+breaks preserved. This causes space- and tab-based formatting not
+to be displayed correctly. By setting $PlainTextPre they'll be
+displayed using <pre> instead so such formatting works, but they'll
+use a monospaced font, no matter what the value of C<$PlainTextMono> is.
+
+=cut
+
+Set($PlainTextPre, 0);
+
+
+=item C<$PlainTextMono>
+To display plaintext attachments,
+Set C<$PlainTextMono> to 1 to use monospaced font and preserve
+formatting, but unlike PlainTextPre, the text will wrap to fit into the
+UI.
+
+=cut
+
+Set($PlainTextMono, 0);
+
+=item C<$ShowUnreadMessageNotifications>
+
+By default, RT will prompt users when there are new, unread messages on
+tickets they are viewing.
+
+Set C<$ShowUnreadMessageNotifications> to a false value to disable this feature.
+
+=cut
-# $HomepageComponents is an arrayref of allowed components on a user's
-# customized homepage ("RT at a glance").
+Set($ShowUnreadMessageNotifications, 1);
-Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage)]);
-# @MasonParameters is the list of parameters for the constructor of
-# HTML::Mason's Apache or CGI Handler. This is normally only useful
-# for debugging, eg. profiling individual components with:
-# use MasonX::Profiler; # available on CPAN
-# @MasonParameters = (preamble => 'my $p = MasonX::Profiler->new($m, $r);');
+=item C<$HomepageComponents>
-@MasonParameters = () unless (@MasonParameters);
+C<$HomepageComponents> is an arrayref of allowed components on a user's
+customized homepage ("RT at a glance").
+
+=cut
+
+Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
+
+=item C<@MasonParameters>
+
+C<@MasonParameters> is the list of parameters for the constructor of
+HTML::Mason's Apache or CGI Handler. This is normally only useful
+for debugging, eg. profiling individual components with:
+
+ use MasonX::Profiler; # available on CPAN
+ Set(@MasonParameters, (preamble => 'my $p = MasonX::Profiler->new($m, $r);'));
+
+=cut
+
+Set(@MasonParameters, ());
+
+=item C<$DefaultSearchResultFormat>
+
+C<$DefaultSearchResultFormat> is the default format for RT search results
+
+=cut
-# $DefaultSearchResultFormat is the default format for RT search results
Set ($DefaultSearchResultFormat, qq{
- '<B><A HREF="$RT::WebPath/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#',
- '<B><A HREF="$RT::WebPath/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
+ '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#',
+ '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
Status,
QueueName,
OwnerName,
@@ -507,105 +1237,387 @@ Set ($DefaultSearchResultFormat, qq{
'<small>__LastUpdatedRelative__</small>',
'<small>__TimeLeft__</small>'});
-# If $SuppressInlineTextFiles is set to a true value, then uploaded
-# text files (text-type attachments with file names) are prevented
-# from being displayed in-line when viewing a ticket's history.
+=item C<$DefaultSelfServiceSearchResultFormat>
+
+C<$DefaultSelfServiceSearchResultFormat> is the default format of searches displayed in the
+SelfService interface.
+
+=cut
+
+Set($DefaultSelfServiceSearchResultFormat, qq{
+ '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__id__</a></B>/TITLE:#',
+ '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
+ Status,
+ Requestors,
+ OwnerName});
+
+=item C<$SuppressInlineTextFiles>
+
+If C<$SuppressInlineTextFiles> is set to a true value, then uploaded
+text files (text-type attachments with file names) are prevented
+from being displayed in-line when viewing a ticket's history.
+
+=cut
Set($SuppressInlineTextFiles, undef);
-# If $DontSearchFileAttachments is set to a true value, then uploaded
-# files (attachments with file names) are not searched during full-content
-# ticket searches.
+=item C<$DontSearchFileAttachments>
+
+If C<$DontSearchFileAttachments> is set to a true value, then uploaded
+files (attachments with file names) are not searched during full-content
+ticket searches.
+
+=cut
Set($DontSearchFileAttachments, undef);
-# The GD module (which RT uses for graphs) uses a builtin font that doesn't
-# have full Unicode support. You can use a particular TrueType font by setting
-# $ChartFont to the absolute path of that font. Your GD library must have
-# support for TrueType fonts to use this option.
+=item C<$ChartFont>
+
+The L<GD> module (which RT uses for graphs) uses a builtin font that doesn't
+have full Unicode support. You can use a particular TrueType font by setting
+$ChartFont to the absolute path of that font. Your GD library must have
+support for TrueType fonts to use this option.
+
+=cut
Set($ChartFont, undef);
-# }}}
+=item C<@Active_MakeClicky>
+
+MakeClicky detects various formats of data in headers and email
+messages, and extends them with supporting links. By default, RT
+provides two formats:
+
+* 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
+ link after the URL.
+
+* 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
+ replace URL with link and *adds spaces* into text if it's longer
+ then 30 chars. This allow browser to wrap long URLs and avoid
+ horizontal scrolling.
+
+See F<share/html/Elements/MakeClicky> for documentation on how to add your own.
+
+=cut
+
+Set(@Active_MakeClicky, qw());
+
+=item C<$DefaultQueue>
+
+Use this to select the default queue name that will be used for creating new
+tickets. You may use either the queue's name or its ID. This only affects the
+queue selection boxes on the web interface.
+
+=cut
+
+#Set($DefaultQueue, 'General');
+
+=item C<$DefaultTimeUnitsToHours>
+
+Use this to set the default units for time entry to hours instead of minutes.
+
+=cut
+
+Set($DefaultTimeUnitsToHours, 0);
+
+=back
+
+=head1 L<Net::Server> (rt-server) Configuration
+
+=over 4
+
+=item C<$StandaloneMinServers>, C<$StandaloneMaxServers>
+
+The absolute minimum and maximum number of servers that will be created to
+handle requests. Having multiple servers means that serving a slow page will
+affect other users less.
+
+=cut
+
+Set($StandaloneMinServers, 1);
+Set($StandaloneMaxServers, 1);
+
+=item C<$StandaloneMinSpareServers>, C<$StandaloneMaxSpareServers>
+
+These next two options can be used to scale up and down the number of servers
+to adjust to load. These two options will respect the C<$StandaloneMinServers
+> and C<$StandaloneMaxServers options>.
+
+=cut
+
+Set($StandaloneMinSpareServers, 0);
+Set($StandaloneMaxSpareServers, 0);
+
+=item C<$StandaloneMaxRequests>
+
+This sets the absolute maximum number of requests a single server will serve.
+Setting this would be useful if, for example, memory usage slowly crawls up
+every hit.
+
+=cut
+
+#Set($StandaloneMaxRequests, 50);
+
+=item C<%NetServerOptions>
+
+C<%NetServerOptions> is a hash of additional options to use for
+L<Net::Server/DEFAULT ARGUMENTS>. For example, you could set
+reverse_lookups to get the hostnames for all users with:
+
+C<Set(%NetServerOptions, (reverse_lookups => 1));>
+
+=cut
+
+Set(%NetServerOptions, ());
+
+=back
+
+
+=head1 UTF-8 Configuration
+
+=over 4
+
+=item C<@LexiconLanguages>
+
+An array that contains languages supported by RT's internationalization
+interface. Defaults to all *.po lexicons; setting it to C<qw(en ja)> will make
+RT bilingual instead of multilingual, but will save some memory.
-# {{{ RT UTF-8 Settings
+=cut
+
+Set(@LexiconLanguages, qw(*));
+
+=item C<@EmailInputEncodings>
+
+An array that contains default encodings used to guess which charset
+an attachment uses if not specified. Must be recognized by
+L<Encode::Guess>.
+
+=cut
+
+Set(@EmailInputEncodings, qw(utf-8 iso-8859-1 us-ascii));
+
+=item C<$EmailOutputEncoding>
-# An array that contains languages supported by RT's internationalization
-# interface. Defaults to all *.po lexicons; setting it to qw(en ja) will make
-# RT bilingual instead of multilingual, but will save some memory.
+The charset for localized email. Must be recognized by Encode.
+
+=cut
-@LexiconLanguages = qw(*) unless (@LexiconLanguages);
+Set($EmailOutputEncoding, 'utf-8');
-# An array that contains default encodings used to guess which charset
-# an attachment uses if not specified. Must be recognized by
-# Encode::Guess.
-@EmailInputEncodings = qw(utf-8 iso-8859-1 us-ascii) unless (@EmailInputEncodings);
+=back
-# The charset for localized email. Must be recognized by Encode.
+=head1 Date Handling Configuration
-Set($EmailOutputEncoding , 'utf-8');
+=over 4
-# }}}
+=item C<$DateTimeFormat>
-# {{{ RT Date Handling Options (for Time::ParseDate)
+You can choose date and time format. See "Output formatters"
+section in perldoc F<lib/RT/Date.pm> for more options. This option can
+be overridden by users in their preferences.
+Some examples:
-# Set this to 1 if your local date convention looks like "dd/mm/yy"
-# instead of "mm/dd/yy".
+C<Set($DateTimeFormat, 'LocalizedDateTime');>
+C<Set($DateTimeFormat, { Format => 'ISO', Seconds => 0 });>
+C<Set($DateTimeFormat, 'RFC2822');>
+C<Set($DateTimeFormat, { Format => 'RFC2822', Seconds => 0, DayOfWeek => 0 });>
+
+=cut
+
+Set($DateTimeFormat, 'DefaultFormat');
+
+# Next two options are for Time::ParseDate
+
+=item C<$DateDayBeforeMonth>
+
+Set this to 1 if your local date convention looks like "dd/mm/yy" instead of
+"mm/dd/yy". Used only for parsing, not for displaying dates.
+
+=cut
Set($DateDayBeforeMonth , 1);
-# Should an unspecified day or year in a date refer to a future or a
-# past value? For example, should a date of "Tuesday" default to mean
-# the date for next Tuesday or last Tuesday? Should the date "March 1"
-# default to the date for next March or last March?
-# Set to 0 for the next date or 1 for the last date.
+=item C<$AmbiguousDayInPast>, C<$AmbiguousDayInFuture>
-Set($AmbiguousDayInPast , 1);
+Should an unspecified day or year in a date refer to a future or a
+past value? For example, should a date of "Tuesday" default to mean
+the date for next Tuesday or last Tuesday? Should the date "March 1"
+default to the date for next March or last March?
-# }}}
+Set $<AmbiguousDayInPast> for the last date, or $<$AmbiguousDayInFuture> for the
+next date.
-# {{{ Miscellaneous RT Settings
+The default is usually good.
-# You can define new statuses and even reorder existing statuses here.
-# WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
-# will break horribly. The statuses you add must be no longer than
-# 10 characters.
+=cut
-@ActiveStatus = qw(new open stalled) unless @ActiveStatus;
-@InactiveStatus = qw(resolved rejected deleted) unless @InactiveStatus;
+Set($AmbiguousDayInPast, 0);
+Set($AmbiguousDayInFuture, 0);
-# Backward compatability setting. Add/Delete Link used to record one
-# transaction and run one scrip. Set this value to 1 if you want
-# only one of the link transactions to have scrips run.
-Set($LinkTransactionsRun1Scrip , 0);
+=back
+
+=head1 Approval Configuration
+
+Configration for the approvl system
+
+=over 4
+
+=item C<$ApprovalRejectionNotes>
+
+Should rejection notes be sent to the requestors? The default is true.
+
+=cut
+
+Set($ApprovalRejectionNotes, 1);
+
+
+=back
+
+=head1 Miscellaneous Configuration
+
+=over 4
+
+=item C<@ActiveStatus>, C<@InactiveStatus>
+
+You can define new statuses and even reorder existing statuses here.
+WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
+will break horribly. The statuses you add must be no longer than
+10 characters.
+
+=cut
+
+Set(@ActiveStatus, qw(new open stalled));
+Set(@InactiveStatus, qw(resolved rejected deleted));
+
+=item C<$LinkTransactionsRun1Scrip>
+
+RT-3.4 backward compatibility setting. Add/Delete Link used to record one
+transaction and run one scrip. Set this value to 1 if you want
+only one of the link transactions to have scrips run.
+
+=cut
+
+Set($LinkTransactionsRun1Scrip, 0);
+
+=item C<$StrictLinkACL>
+
+When this feature is enabled a user needs I<ModifyTicket> rights on both
+tickets to link them together, otherwise he can have rights on either of
+them.
+
+=cut
-# When this feature is enabled an user need ModifyTicket right on both
-# tickets to link them together, otherwise he can have right on any of
-# two.
Set($StrictLinkACL, 1);
-# }}}
+=item C<$PreviewScripMessages>
+
+Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket
+reply page should include the content of the messages to be sent.
+
+=cut
+Set($PreviewScripMessages, 0);
+
+=item C<$UseTransactionBatch>
+
+Set C<$UseTransactionBatch> to 1 to execute transactions in batches,
+such that a resolve and comment (for example) would happen
+simultaneously, instead of as two transactions, unaware of each
+others' existence.
+
+=cut
+
+Set($UseTransactionBatch, 1);
+
+=item C<@CustomFieldValuesSources>
+
+Set C<@CustomFieldValuesSources> to a list of class names which extend
+L<RT::CustomFieldValues::External>. This can be used to pull lists of
+custom field values from external sources at runtime.
+
+=cut
-# {{{ Development Mode
-#
-# RT comes with a "Development mode" setting.
-# This setting, as a convenience for developers, turns on
-# all sorts of development options that you most likely don't want in
-# production:
-#
-# * Turns off Mason's 'static_source' directive. By default, you can't
-# edit RT's web ui components on the fly and have RT magically pick up
-# your changes. (It's a big performance hit)
-#
-# * More to come
-#
+Set(@CustomFieldValuesSources, ());
+
+=item C<$CanonicalizeRedirectURLs>
+
+Set C<$CanonicalizeRedirectURLs> to 1 to use $C<WebURL> when redirecting rather
+than the one we get from C<%ENV>.
+
+If you use RT behind a reverse proxy, you almost certainly want to
+enable this option.
+
+=cut
+
+Set($CanonicalizeRedirectURLs, 0);
+=item C<$EnableReminders>
+
+Hide links/portlets related to Reminders by setting this to 0
+
+=cut
+
+Set($EnableReminders,1);
+
+
+=item C<@Plugins>
+
+Set C<@Plugins> to a list of external RT plugins that should be enabled (those
+plugins have to be previously downloaded and installed).
+Example:
+
+C<Set(@Plugins, (qw(Extension::QuickDelete RT::FM)));>
+
+=cut
+
+Set(@Plugins, ());
+
+=back
+
+=head1 Development Configuration
+
+=over 4
+
+=item C<$DevelMode>
+
+RT comes with a "Development mode" setting.
+This setting, as a convenience for developers, turns on
+all sorts of development options that you most likely don't want in
+production:
+
+* Turns off Mason's 'static_source' directive. By default, you can't
+ edit RT's web ui components on the fly and have RT magically pick up
+ your changes. (It's a big performance hit)
+
+ * More to come
+
+=cut
Set($DevelMode, '0');
-# }}}
+=back
+
+=head1 Deprecated Options
+
+=over 4
+
+=item C<$AlwaysUseBase64>
+
+Encode blobs as base64 in DB (?)
+
+=item C<$TicketBaseURI>
+
+Base URI to tickets in this system; used when loading (?)
+
+=item C<$UseCodeTickets>
+
+This option is exists for backwards compatibility. Don't use it.
+
+=back
+
+=cut
1;
diff --git a/rt/etc/RT_Config.pm.in b/rt/etc/RT_Config.pm.in
index 18d6919..5d28e71 100644
--- a/rt/etc/RT_Config.pm.in
+++ b/rt/etc/RT_Config.pm.in
@@ -1,7 +1,3 @@
-#
-# WARNING: NEVER EDIT RT_Config.pm. Instead, copy any sections you want to change to RT_SiteConfig.pm
-# and edit them there.
-#
package RT;
@@ -15,486 +11,1220 @@ use RT::Config;
=cut
-# {{{ Base Configuration
+=head1 WARNING
-# $rtname is the string that RT will look for in mail messages to
-# figure out what ticket a new piece of mail belongs to
+NEVER EDIT RT_Config.pm.
-# Your domain name is recommended, so as not to pollute the namespace.
-# once you start using a given tag, you should probably never change it.
-# (otherwise, mail for existing tickets won't get put in the right place
+Instead, copy any sections you want to change to F<RT_SiteConfig.pm> and edit them there.
+
+=cut
+
+=head1 Base Configuration
+
+=over 4
+
+=item C<$rtname>
+
+C<$rtname> is the string that RT will look for in mail messages to
+figure out what ticket a new piece of mail belongs to.
+
+Your domain name is recommended, so as not to pollute the namespace.
+once you start using a given tag, you should probably never change it.
+(otherwise, mail for existing tickets won't get put in the right place)
+
+=cut
Set($rtname , "example.com");
-# This regexp controls what subject tags RT recognizes as its own.
-# If you're not dealing with historical $rtname values, you'll likely
-# never have to enable this feature.
-#
-# Be VERY CAREFUL with it. Note that it overrides $rtname for subject
-# token matching and that you should use only "non-capturing" parenthesis
-# grouping. For example:
-#
-# Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/i );
-#
-# and NOT
-#
-# Set($EmailSubjectTagRegex, qr/(example.com|example.org)/i );
-#
-# This setting would make RT behave exactly as it does without the
-# setting enabled.
-#
-# Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i );
+=item C<$EmailSubjectTagRegex>
+
+This regexp controls what subject tags RT recognizes as its own.
+If you're not dealing with historical C<$rtname> values, you'll likely
+never have to enable this feature.
+
+Be VERY CAREFUL with it. Note that it overrides C<$rtname> for subject
+token matching and that you should use only "non-capturing" parenthesis
+grouping. For example:
+
+C<Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/i );>
+
+and NOT
+
+C<Set($EmailSubjectTagRegex, qr/(example.com|example.org)/i );>
+
+This setting would make RT behave exactly as it does without the
+setting enabled.
+
+=cut
+
+#Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i );
+
+=item C<$Organization>
-# You should set this to your organization's DNS domain. For example,
-# fsck.com or asylum.arkham.ma.us. It's used by the linking interface to
-# guarantee that ticket URIs are unique and easy to construct.
+You should set this to your organization's DNS domain. For example,
+I<fsck.com> or I<asylum.arkham.ma.us>. It's used by the linking interface to
+guarantee that ticket URIs are unique and easy to construct.
+
+=cut
Set($Organization , "example.com");
-# $user_passwd_min defines the minimum length for user passwords. Setting
-# it to 0 disables this check
+=item C<$MinimumPasswordLength>
+
+C<$MinimumPasswordLength> defines the minimum length for user
+passwords. Setting it to 0 disables this check.
+
+=cut
+
Set($MinimumPasswordLength , "5");
-# $Timezone is used to convert times entered by users into GMT and back again
-# It should be set to a timezone recognized by your local unix box.
+=item C<$Timezone>
+
+C<$Timezone> is used to convert times entered by users into GMT and back again
+It should be set to a timezone recognized by your local unix box.
+
+=cut
+
Set($Timezone , 'US/Eastern');
-# }}}
+=back
-# {{{ Database Configuration
+=head1 Database Configuration
-# Database driver beeing used. Case matters
-# Valid types are "mysql", "Oracle" and "Pg"
+=over 4
+
+=item C<$DatabaseType>
+
+Database driver being used; case matters.
+
+Valid types are "mysql", "Oracle" and "Pg"
+
+=cut
Set($DatabaseType , '@DB_TYPE@');
-# The domain name of your database server
-# If you're running mysql and it's on localhost,
-# leave it blank for enhanced performance
+=item C<$DatabaseHost>, C<$DatabaseRTHost>
+
+The domain name of your database server.
+
+If you're running mysql and it's on localhost,
+leave it blank for enhanced performance
+
+=cut
+
Set($DatabaseHost , '@DB_HOST@');
Set($DatabaseRTHost , '@DB_RT_HOST@');
-# The port that your database server is running on. Ignored unless it's
-# a positive integer. It's usually safe to leave this blank
+=item C<$DatabasePort>
+
+The port that your database server is running on. Ignored unless it's
+a positive integer. It's usually safe to leave this blank
+
+=cut
+
Set($DatabasePort , '@DB_PORT@');
-#The name of the database user (inside the database)
+=item C<$DatabaseUser>
+
+The name of the database user (inside the database)
+
+=cut
+
Set($DatabaseUser , '@DB_RT_USER@');
-# Password the DatabaseUser should use to access the database
+=item C<$DatabasePassword>
+
+Password the C<$DatabaseUser> should use to access the database
+
+=cut
+
Set($DatabasePassword , '@DB_RT_PASS@');
-# The name of the RT's database on your database server
+=item C<$DatabaseName>
+
+The name of the RT's database on your database server. For Oracle
+it's SID, DB objects are created in L<$DatabaseUser>'s schema.
+
+=cut
+
Set($DatabaseName , '@DB_DATABASE@');
-# If you're using Postgres and have compiled in SSL support,
-# set DatabaseRequireSSL to 1 to turn on SSL communication
+=item C<$DatabaseRequireSSL>
+
+If you're using Postgres and have compiled in SSL support,
+set C<$DatabaseRequireSSL> to 1 to turn on SSL communication
+
+=cut
+
Set($DatabaseRequireSSL , undef);
-# }}}
+=item C<$UseSQLForACLChecks>
+
+In RT for ages ACL are checked after search what in some situtations
+result in empty search pages and wrong count of tickets.
+
+Set C<$UseSQLForACLChecks> to 1 to use SQL and get rid of these problems.
+
+However, this option is beta. In some cases it result in performance
+improvements, but some setups can not handle it.
+
+=cut
+
+Set($UseSQLForACLChecks, undef);
+
+=back
+
+=head1 Incoming Mail Gateway Configuration
-# {{{ Incoming mail gateway configuration
+=over 4
-# OwnerEmail is the address of a human who manages RT. RT will send
-# errors generated by the mail gateway to this address. This address
-# should _not_ be an address that's managed by your RT instance.
+=item C<$OwnerEmail>
+
+C<$OwnerEmail> is the address of a human who manages RT. RT will send
+errors generated by the mail gateway to this address. This address
+should _not_ be an address that's managed by your RT instance.
+
+=cut
Set($OwnerEmail , 'root');
-# If $LoopsToRTOwner is defined, RT will send mail that it believes
-# might be a loop to $RT::OwnerEmail
+=item C<$LoopsToRTOwner>
+
+If C<$LoopsToRTOwner> is defined, RT will send mail that it believes
+might be a loop to C<$OwnerEmail>
+
+=cut
Set($LoopsToRTOwner , 1);
-# If $StoreLoops is defined, RT will record messages that it believes
-# to be part of mail loops.
-# As it does this, it will try to be careful not to send mail to the
-# sender of these messages
+=item C<$StoreLoops>
+
+If C<$StoreLoops> is defined, RT will record messages that it believes
+to be part of mail loops.
+
+As it does this, it will try to be careful not to send mail to the
+sender of these messages
+
+=cut
Set($StoreLoops , undef);
-# $MaxAttachmentSize sets the maximum size (in bytes) of attachments stored
-# in the database.
+=item C<$MaxAttachmentSize>
+
+C<$MaxAttachmentSize> sets the maximum size (in bytes) of attachments stored
+in the database.
+
+For mysql and oracle, we set this size at 10 megabytes.
+If you're running a postgres version earlier than 7.1, you will need
+to drop this to 8192. (8k)
+
+=cut
-# For mysql and oracle, we set this size at 10 megabytes.
-# If you're running a postgres version earlier than 7.1, you will need
-# to drop this to 8192. (8k)
Set($MaxAttachmentSize , 10000000);
-# $TruncateLongAttachments: if this is set to a non-undef value,
-# RT will truncate attachments longer than MaxAttachmentSize.
+=item C<$TruncateLongAttachments>
+
+C<$TruncateLongAttachments>: if this is set to a non-undef value,
+RT will truncate attachments longer than C<$MaxAttachmentSize>.
+
+=cut
Set($TruncateLongAttachments , undef);
-# $DropLongAttachments: if this is set to a non-undef value,
-# RT will silently drop attachments longer than MaxAttachmentSize.
+=item C<$DropLongAttachments>
+
+C<$DropLongAttachments>: if this is set to a non-undef value,
+RT will silently drop attachments longer than C<MaxAttachmentSize>.
+
+=cut
Set($DropLongAttachments , undef);
-# If $ParseNewMessageForTicketCcs is true, RT will attempt to divine
-# Ticket 'Cc' watchers from the To and Cc lines of incoming messages
-# Be forewarned that if you have _any_ addresses which forward mail to
-# RT automatically and you enable this option without modifying
-# "RTAddressRegexp" below, you will get yourself into a heap of trouble.
+=item C<$ParseNewMessageForTicketCcs>
+
+If C<$ParseNewMessageForTicketCcs> is true, RT will attempt to divine
+Ticket 'Cc' watchers from the To and Cc lines of incoming messages
+Be forewarned that if you have _any_ addresses which forward mail to
+RT automatically and you enable this option without modifying
+C<$RTAddressRegexp> below, you will get yourself into a heap of trouble.
+
+=cut
Set($ParseNewMessageForTicketCcs , undef);
-# RTAddressRegexp is used to make sure RT doesn't add itself as a ticket CC if
-# the setting above is enabled.
+=item C<$RTAddressRegexp>
+
+C<$RTAddressRegexp> is used to make sure RT doesn't add itself as a ticket CC if
+the setting above is enabled. It is important that you set this to a
+regular expression that matches all addresses used by your RT. This lets RT
+avoid sending mail to itself. It will also hide RT addresses from the list of
+"One-time Cc" and Bcc lists on ticket reply.
+
+=cut
Set($RTAddressRegexp , '^rt\@example.com$');
-# RT provides functionality which allows the system to rewrite
-# incoming email addresses. In its simplest form,
-# you can substitute the value in CanonicalizeEmailAddressReplace
-# for the value in CanonicalizeEmailAddressMatch
-# (These values are passed to the CanonicalizeEmailAddress subroutine in RT/User.pm)
-# By default, that routine performs a s/$Match/$Replace/gi on any address passed to it
+=item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace>
+
+RT provides functionality which allows the system to rewrite
+incoming email addresses. In its simplest form,
+you can substitute the value in $<CanonicalizeEmailAddressReplace>
+for the value in $<CanonicalizeEmailAddressMatch>
+(These values are passed to the $<CanonicalizeEmailAddress> subroutine in
+ F<RT/User.pm>)
+
+By default, that routine performs a C<s/$Match/$Replace/gi> on any address
+passed to it.
+
+=cut
#Set($CanonicalizeEmailAddressMatch , '@subdomain\.example\.com$');
#Set($CanonicalizeEmailAddressReplace , '@example.com');
-# set this to true and the create new user page will use the values that you
-# enter in the form but use the function CanonicalizeUserInfo in User_Local.pm
-Set($CanonicalizeOnCreate , 0);
-
-# If $SenderMustExistInExternalDatabase is true, RT will refuse to
-# create non-privileged accounts for unknown users if you are using
-# the "LookupSenderInExternalDatabase" option.
-# Instead, an error message will be mailed and RT will forward the
-# message to $RTOwner.
-#
-# If you are not using $LookupSenderInExternalDatabase, this option
-# has no effect.
-#
-# If you define an AutoRejectRequest template, RT will use this
-# template for the rejection message.
+=item C<$CanonicalizeEmailAddressMatch>
+
+Set this to true and the create new user page will use the values that you
+enter in the form but use the function CanonicalizeUserInfo in
+F<RT/User_Local.pm>
+
+=cut
+
+Set($CanonicalizeOnCreate, 0);
+
+=item C<$SenderMustExistInExternalDatabase>
+
+If C<$SenderMustExistInExternalDatabase> is true, RT will refuse to
+create non-privileged accounts for unknown users if you are using
+the C<$LookupSenderInExternalDatabase> option.
+Instead, an error message will be mailed and RT will forward the
+message to C<$RTOwner>.
+
+If you are not using C<$LookupSenderInExternalDatabase>, this option
+has no effect.
+
+If you define an AutoRejectRequest template, RT will use this
+template for the rejection message.
+
+=cut
Set($SenderMustExistInExternalDatabase , undef);
-# }}}
+=item C<$ValidateUserEmailAddresses>
-# {{{ Outgoing mail configuration
+If C<$ValidateUserEmailAddresses> is true, RT will refuse to create users with
+an invalid email address (as specified in RFC 2822) or with an email address
+made of multiple email adresses.
-# RT is designed such that any mail which already has a ticket-id associated
-# with it will get to the right place automatically.
+=cut
-# $CorrespondAddress and $CommentAddress are the default addresses
-# that will be listed in From: and Reply-To: headers of correspondence
-# and comment mail tracked by RT, unless overridden by a queue-specific
-# address.
+Set($ValidateUserEmailAddresses, undef);
-Set($CorrespondAddress , 'RT_CorrespondAddressNotSet');
+=item C<@MailPlugins>
-Set($CommentAddress , 'RT_CommentAddressNotSet');
+C<@MailPlugins> is a list of auth plugins for L<RT::Interface::Email>
+to use; see L<rt-mailgate>
+
+=cut
+
+=item C<$UnsafeEmailCommands>
+
+C<$UnsafeEmailCommands>, if set to true, enables 'take' and 'resolve'
+as possible actions via the mail gateway. As its name implies, this
+is very unsafe, as it allows email with a forged sender to possibly
+resolve arbitrary tickets!
+
+=cut
-#Sendmail Configuration
+=item C<$ExtractSubjectTagMatch>, C<$ExtractSubjectTagNoMatch>
-# $MailCommand defines which method RT will use to try to send mail
-# We know that 'sendmailpipe' works fairly well.
-# If 'sendmailpipe' doesn't work well for you, try 'sendmail'
-#
-# Note that you should remove the '-t' from $SendmailArguments
-# if you use 'sendmail' rather than 'sendmailpipe'
+The default "extract remote tracking tags" scrip settings; these
+detect when your RT is talking to another RT, and adjusts the
+subject accordingly.
+
+=cut
+
+Set($ExtractSubjectTagMatch, qr/\[.+? #\d+\]/);
+Set($ExtractSubjectTagNoMatch, ( ${RT::EmailSubjectTagRegex}
+ ? qr/\[(?:${RT::EmailSubjectTagRegex}) #\d+\]/
+ : qr/\[\Q$RT::rtname\E #\d+\]/));
+
+=back
+
+=head1 Outgoing Mail Configuration
+
+=over 4
+
+=item C<$MailCommand>
+
+C<$MailCommand> defines which method RT will use to try to send mail.
+We know that 'sendmailpipe' works fairly well. If 'sendmailpipe'
+doesn't work well for you, try 'sendmail'. Other options are 'smtp'
+or 'qmail'.
+
+Note that you should remove the '-t' from C<$SendmailArguments>
+if you use 'sendmail' rather than 'sendmailpipe'
+
+=cut
Set($MailCommand , 'sendmailpipe');
-# $SendmailArguments defines what flags to pass to $Sendmail
-# assuming you picked 'sendmail' or 'sendmailpipe' as the $MailCommand above.
-# If you picked 'sendmailpipe', you MUST add a -t flag to $SendmailArguments
+=item C<$SetOutgoingMailFrom>
+
+C<$SetOutgoingMailFrom> tells RT to set the sender envelope with the 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.
+
+=cut
+
+Set($SetOutgoingMailFrom, 0);
+
+=item C<$OverrideOutgoingMailFrom>
+
+C<$OverrideOutgoingMailFrom> is used for overwriting the Correspond
+address of the queue. The option is a hash reference of queue name to
+email address.
+
+If there is no ticket involved, then the value of the C<Default> key will be
+used.
+
+=cut
+
+Set($OverrideOutgoingMailFrom, {
+# 'Default' => 'admin@rt.example.com',
+# 'General' => 'general@rt.example.com',
+});
+
+=back
+
+=head1 Sendmail Configuration
+
+These options only take effect if C<$MailCommand> is 'sendmail' or
+'sendmailpipe'
+
+=over 4
+
+=item C<$SendmailArguments>
+
+C<$SendmailArguments> defines what flags to pass to C<$SendmailPath>
+If you picked 'sendmailpipe', you MUST add a -t flag to C<$SendmailArguments>
+These options are good for most sendmail wrappers and workalikes
+
+These arguments are good for sendmail brand sendmail 8 and newer
+C<Set($SendmailArguments,"-oi -t -ODeliveryMode=b -OErrorMode=m");>
+
+=cut
-# These options are good for most sendmail wrappers and workalikes
Set($SendmailArguments , "-oi -t");
-# $SendmailBounceArguments defines what flags to pass to $Sendmail
-# assuming RT needs to send an error (ie. bounce).
+
+=item C<$SendmailBounceArguments>
+
+C<$SendmailBounceArguments> defines what flags to pass to C<$Sendmail>
+assuming RT needs to send an error (ie. bounce).
+
+=cut
Set($SendmailBounceArguments , '-f "<>"');
-# These arguments are good for sendmail brand sendmail 8 and newer
-#Set($SendmailArguments,"-oi -t -ODeliveryMode=b -OErrorMode=m");
+=item C<$SendmailPath>
+
+If you selected 'sendmailpipe' above, you MUST specify the path to
+your sendmail binary in C<$SendmailPath>.
+
+=cut
-# If you selected 'sendmailpipe' above, you MUST specify the path
-# to your sendmail binary in $SendmailPath.
-# !! If you did not # select 'sendmailpipe' above, this has no effect!!
Set($SendmailPath , "/usr/sbin/sendmail");
-# By default, RT sets the outgoing mail's "From:" header to
-# "SenderName via RT". Setting this option to 0 disables it.
-Set($UseFriendlyFromLine , 1);
+=back
+
+=head1 SMTP Configuration
+
+These options only take effect if C<$MailCommand> is 'smtp'
+
+=over 4
+
+=item C<$SMTPServer>
+
+C<$SMTPServer> should be set to the hostname of the SMTP server to use
+
+=cut
+
+Set($SMTPServer, undef);
+
+=item C<$SMTPFrom>
+
+C<$SMTPFrom> should be set to the 'From' address to use, if not the
+email's 'From'
+
+=cut
+
+Set($SMTPFrom, undef);
+
+=item C<$SMTPDebug>
+
+C<$SMTPDebug> should be set to true to debug SMTP mail sending
+
+=cut
+
+Set($SMTPDebug, 0);
+
+=back
+
+=head1 Other Mailer Configuration
+
+=over 4
+
+=item C<@MailParams>
+
+C<@MailParams> defines a list of options passed to $MailCommand if it
+is not 'sendmailpipe', 'sendmail', or 'smtp'
+
+=cut
+
+Set(@MailParams, ());
+
+=item C<$CorrespondAddress>, C<$CommentAddress>
+
+RT is designed such that any mail which already has a ticket-id associated
+with it will get to the right place automatically.
+
+C<$CorrespondAddress> and C<$CommentAddress> are the default addresses
+that will be listed in From: and Reply-To: headers of correspondence
+and comment mail tracked by RT, unless overridden by a queue-specific
+address.
+
+=cut
+
+Set($CorrespondAddress , '');
+
+Set($CommentAddress , '');
+
+=item C<$DashboardAddress>
+
+The email address from which RT will send dashboards. If none is set, then
+C<$OwnerEmail> will be used.
+
+=cut
+
+Set($DashboardAddress, '');
+
+=item C<$UseFriendlyFromLine>
+
+By default, RT sets the outgoing mail's "From:" header to
+"SenderName via RT". Setting C<$UseFriendlyFromLine> to 0 disables it.
+
+=cut
+
+Set($UseFriendlyFromLine, 1);
+
+=item C<$FriendlyFromLineFormat>
+
+C<sprintf()> format of the friendly 'From:' header; its arguments
+are SenderName and SenderEmailAddress.
+
+=cut
-# sprintf() format of the friendly 'From:' header; its arguments
-# are SenderName and SenderEmailAddress.
-Set($FriendlyFromLineFormat , "\"%s via RT\" <%s>");
+Set($FriendlyFromLineFormat, "\"%s via RT\" <%s>");
-# RT can optionally set a "Friendly" 'To:' header when sending messages to
-# Ccs or AdminCcs (rather than having a blank 'To:' header.
+=item C<$UseFriendlyToLine>
+
+RT can optionally set a "Friendly" 'To:' header when sending messages to
+Ccs or AdminCcs (rather than having a blank 'To:' header.
+
+This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL
+If you are using sendmail, rather than postfix, qmail, exim or some other MTA,
+you _must_ disable this option.
+
+=cut
+
+Set($UseFriendlyToLine, 0);
+
+=item C<$FriendlyToLineFormat>
+
+C<sprintf()> format of the friendly 'From:' header; its arguments
+are WatcherType and TicketId.
+
+=cut
-# This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL
-# If you are using sendmail, rather than postfix, qmail, exim or some other MTA,
-# you _must_ disable this option.
+Set($FriendlyToLineFormat, "\"%s of ". RT->Config->Get('rtname') ." Ticket #%s\":;");
-Set($UseFriendlyToLine , 0);
+=item C<$NotifyActor>
-# sprintf() format of the friendly 'From:' header; its arguments
-# are WatcherType and TicketId.
-Set($FriendlyToLineFormat, "\"%s of $RT::rtname Ticket #%s\":;");
+By default, RT doesn't notify the person who performs an update, as they
+already know what they've done. If you'd like to change this behaviour,
+Set C<$NotifyActor> to 1
-# By default, RT doesn't notify the person who performs an update, as they
-# already know what they've done. If you'd like to change this behaviour,
-# Set $NotifyActor to 1
+=cut
Set($NotifyActor, 0);
-# By default, RT records each message it sends out to its own internal database.# To change this behaviour, set $RecordOutgoingEmail to 0
+=item C<$RecordOutgoingEmail>
+
+By default, RT records each message it sends out to its own internal database.
+To change this behavior, set C<$RecordOutgoingEmail> to 0
+
+=cut
Set($RecordOutgoingEmail, 1);
-# VERP support (http://cr.yp.to/proto/verp.txt)
-# uncomment the following two directives to generate envelope senders
-# of the form ${VERPPrefix}${originaladdress}@${VERPDomain}
-# (i.e. rt-jesse=fsck.com@rt.example.com ) This currently only works
-# with sendmail and sendmailppie.
+=item C<$VERPPrefix>, C<$VERPPrefix>
+
+VERP support (http://cr.yp.to/proto/verp.txt)
+
+uncomment the following two directives to generate envelope senders
+of the form C<${VERPPrefix}${originaladdress}@${VERPDomain}>
+(i.e. rt-jesse=fsck.com@rt.example.com ).
+
+This currently only works with sendmail and sendmailppie.
+
+=cut
+
# Set($VERPPrefix, 'rt-');
# Set($VERPDomain, $RT::Organization);
-# }}}
-# {{{ Logging
+=item C<$ForwardFromUser>
-# Logging. The default is to log anything except debugging
-# information to syslog. Check the Log::Dispatch POD for
-# information about how to get things by syslog, mail or anything
-# else, get debugging info in the log, etc.
+By default, RT forwards a message using queue's address and adds RT's tag into
+subject of the outgoing message, so recipients' replies go into RT as correspondents.
+
+To change this behavior, set C<$ForwardFromUser> to true value and RT will use
+address of the current user and leave subject without RT's tag.
+
+=cut
+
+Set($ForwardFromUser, 0);
+
+=item C<$ShowBccHeader>
+
+By default RT hides from the web UI information about blind copies user sent on
+reply or comment.
+
+To change this set the following option to true value.
+
+=cut
-# It might generally make
-# sense to send error and higher by email to some administrator.
-# If you do this, be careful that this email isn't sent to this RT instance.
+Set($ShowBccHeader, 0);
-# the minimum level error that will be logged to the specific device.
-# levels from lowest to highest:
-# debug info notice warning error critical alert emergency
+=item C<$DashboardSubject>
+
+Lets you set the subject of dashboards. Arguments are the frequency (Daily,
+Weekly, Monthly) of the dashboard and the dashboard's name. [_1] for the name
+of the dashboard.
+
+=cut
+
+Set($DashboardSubject, '%s Dashboard: %s');
+
+=back
+
+=head1 GnuPG Configuration
+
+A full description of the (somewhat extensive) GnuPG integration can be found
+by running the command `perldoc L<RT::Crypt::GnuPG>` (or `perldoc
+ lib/RT/Crypt/GnuPG.pm` from your RT install directory).
+
+=over 4
+
+=item C<%GnuPG>
+
+Set C<OutgoingMessagesFormat> to 'inline' to use inline encryption and
+signatures instead of 'RFC' (GPG/MIME: RFC3156 and RFC1847) format.
+
+If you want to allow people to encrypt attachments inside the DB then
+set C<AllowEncryptDataInDB> to true
+
+Set C<RejectOnMissingPrivateKey> to false if you don't want to reject
+emails encrypted for key RT doesn't have and can not decrypt.
+
+Set C<RejectOnBadData> to false if you don't want to reject letters
+with incorrect GnuPG data.
+
+=cut
+
+Set( %GnuPG,
+ Enable => @RT_GPG@,
+ OutgoingMessagesFormat => 'RFC', # Inline
+ AllowEncryptDataInDB => 0,
+
+ RejectOnMissingPrivateKey => 1,
+ RejectOnBadData => 1,
+);
+
+=item C<%GnuPGOptions>
+
+Options of GnuPG program.
+
+If you override this in your RT_SiteConfig, you should be sure
+to include a homedir setting.
+
+NOTE that options with '-' character MUST be quoted.
+
+=cut
+
+Set(%GnuPGOptions,
+ homedir => '@RT_VAR_PATH@/data/gpg',
+
+# URL of a keyserver
+# keyserver => 'hkp://subkeys.pgp.net',
+
+# enables the automatic retrieving of keys when encrypting
+# 'auto-key-locate' => 'keyserver',
+
+# enables the automatic retrieving of keys when verifying signatures
+# 'auto-key-retrieve' => undef,
+);
+
+
+=back
+
+=head1 Logging Configuration
+
+The default is to log anything except debugging
+information to syslog. Check the L<Log::Dispatch> POD for
+information about how to get things by syslog, mail or anything
+else, get debugging info in the log, etc.
+
+It might generally make sense to send error and higher by email to
+some administrator. If you do this, be careful that this email
+isn't sent to this RT instance. Mail loops will generate a critical
+log message.
+
+=over 4
+
+=item C<$LogToSyslog>, C<$LogToScreen>
+
+The minimum level error that will be logged to the specific device.
+From lowest to highest priority, the levels are:
+ debug info notice warning error critical alert emergency
+
+=cut
+
+Set($LogToSyslog , 'info');
+Set($LogToScreen , 'info');
+
+=item C<$LogToFile>, C<$LogDir>, C<$LogToFileNamed>
+
+Logging to a standalone file is also possible, but note that the
+file should needs to both exist and be writable by all direct users
+of the RT API. This generally include the web server, whoever
+rt-crontool runs as. Note that as rt-mailgate and the RT CLI go
+through the webserver, so their users do not need to have write
+permissions to this file. If you expect to have multiple users of
+the direct API, Best Practical recommends using syslog instead of
+direct file logging.
+
+=cut
-# Mail loops will generate a critical log message.
-Set($LogToSyslog , 'debug');
-Set($LogToScreen , 'error');
Set($LogToFile , undef);
Set($LogDir, '@RT_LOG_PATH@');
Set($LogToFileNamed , "rt.log"); #log to rt.log
-# If true generates stack traces to file log or screen
-# never generates traces to syslog
+=item C<$LogStackTraces>
+
+If set to a log level then logging will include stack traces for
+messages with level equal to or greater than specified.
-Set($LogStackTraces , 0);
+NOTICE: Stack traces include parameters supplied to functions or
+methods. It is possible for stack trace logging to reveal sensitive
+information such as passwords or ticket content in your logs.
-# On Solaris or UnixWare, set to ( socket => 'inet' ). Options here
-# override any other options RT passes to Log::Dispatch::Syslog.
-# Other interesting flags include facility and logopt. (See the
-# Log::Dispatch::Syslog documentation for more information.) (Maybe
-# ident too, if you have multiple RT installations.)
+=cut
+
+Set($LogStackTraces, '');
+
+=item C<@LogToSyslogConf>
-@LogToSyslogConf = () unless (@LogToSyslogConf);
+On Solaris or UnixWare, set to ( socket => 'inet' ). Options here
+override any other options RT passes to L<Log::Dispatch::Syslog>.
+Other interesting flags include facility and logopt. (See the
+L<Log::Dispatch::Syslog> documentation for more information.) (Maybe
+ident too, if you have multiple RT installations.)
+
+=cut
+
+Set(@LogToSyslogConf, ());
+
+=item C<$StatementLog>,
+
+RT has rudimentary SQL statement logging support if you have
+DBIx-SearchBuilder 1.31_1 or higher; simply set C<$StatementLog> to be
+the level that you wish SQL statements to be logged at.
+
+=cut
-# RT has rudimentary SQL statement logging support if you have
-# DBIx-SearchBuilder 1.31_1 or higher; simply set $StatementLog to be
-# the level that you wish SQL statements to be logged at.
Set($StatementLog, undef);
-# }}}
+=back
+
+=head1 Web Interface Configuration
+
+=over 4
+
+=item C<$WebDefaultStylesheet>
+
+This determines the default stylesheet the RT web interface will use.
+RT ships with several themes by default:
+
+ web2 The totally new, default layout for RT 3.8
+ 3.5-default RT 3.5 and 3.6 original layout
+ 3.4-compat A 3.4 compatibility stylesheet to make RT look
+ (mostly) like 3.4
+
+This value actually specifies a directory in F<share/html/NoAuth/css/>
+from which RT will try to load the file main.css (which should
+@import any other files the stylesheet needs). This allows you to
+easily and cleanly create your own stylesheets to apply to RT. This
+option can be overridden by users in their preferences.
+
+=cut
+
+Set($WebDefaultStylesheet, 'web2');
+
+=item C<$UsernameFormat>
+
+This determines how user info is displayed. 'concise' will show one of
+either NickName, RealName, Name or EmailAddress, depending on what exists
+and whether the user is privileged or not. 'verbose' will show RealName and
+EmailAddress.
+
+=cut
+
+Set($UsernameFormat, 'concise');
+
+=item C<$WebDomain>
+
+Domain name of the RT server, eg 'www.example.com'. It should not contain
+anything else, but server name.
+
+=cut
+
+Set( $WebDomain, 'localhost' );
+
+=item C<$WebPort>
+
+If we're running as a superuser, run on port 80
+Otherwise, pick a high port for this user.
+
+443 is default port for https protocol.
-# {{{ Web interface configuration
+=cut
+
+Set($WebPort, 80);# + ($< * 7274) % 32766 + ($< && 1024));
+
+=item C<$WebPath>
+
+If you're putting the web ui somewhere other than at the root of
+your server, you should set C<$WebPath> to the path you'll be
+serving RT at.
+
+C<$WebPath> requires a leading / but no trailing /, or it can be blank.
+
+In most cases, you should leave C<$WebPath> set to '' (an empty value).
+
+=cut
+
+Set($WebPath, "");
+
+=item C<$WebBaseURL>, C<$WebURL>
-# This determines the default stylesheet the RT web interface will use.
-# RT ships with two valid values by default:
-#
-# 3.5-default The totally new, default layout for RT 3.5
-# 3.4-compat A 3.4 compatibility stylesheet to make RT 3.5 look
-# (mostly) like 3.4
-#
-# This value actually specifies a directory in share/html/NoAuth/css/
-# from which RT will try to load the file main.css (which should
-# @import any other files the stylesheet needs). This allows you to
-# easily and cleanly create your own stylesheets to apply to RT.
+Usually you don't want to set these options. The only obviouse reason is
+RT accessible via https protocol on non standard port, eg
+'https://rt.example.com:9999'. In all other cases these options are computed
+using C<$WebDomain>, C<$WebPort> and C<$WebPath>.
-Set($WebDefaultStylesheet, '3.5-default');
+C<$WebBaseURL> is the scheme, server and port (eg 'http://rt.example.com')
+for constructing urls to the web UI. C<$WebBaseURL> doesn't need a trailing /.
+
+C<$WebURL> is the C<$WebBaseURL>, C<$WebPath> and trailing /, for example:
+'http://www.example.com/rt/'.
+
+=cut
+
+my $port = RT->Config->Get('WebPort');
+Set($WebBaseURL,
+ ($port == 443? 'https': 'http') .'://'
+ . RT->Config->Get('WebDomain')
+ . ($port != 80 && $port != 443? ":$port" : '')
+);
+
+Set($WebURL, RT->Config->Get('WebBaseURL') . RT->Config->Get('WebPath') . "/");
+
+=item C<$WebImagesURL>
+
+C<$WebImagesURL> points to the base URL where RT can find its images.
+Define the directory name to be used for images in rt web
+documents.
+
+=cut
-# Define the directory name to be used for images in rt web
-# documents.
+Set($WebImagesURL, RT->Config->Get('WebPath') . "/NoAuth/images/");
-# If you're putting the web ui somewhere other than at the root of
-# your server, you should set $WebPath to the path you'll be
-# serving RT at.
-# $WebPath requires a leading / but no trailing /.
-#
-# In most cases, you should leave $WebPath set to '' (an empty value).
+=item C<$LogoURL>
-Set($WebPath , "");
+C<$LogoURL> points to the URL of the RT logo displayed in the web UI
-# If we're running as a superuser, run on port 80
-# Otherwise, pick a high port for this user.
+=cut
-Set($WebPort , 80);# + ($< * 7274) % 32766 + ($< && 1024));
+Set($LogoURL, RT->Config->Get('WebImagesURL') . "bplogo.gif");
-# This is the Scheme, server and port for constructing urls to webrt
-# $WebBaseURL doesn't need a trailing /
+=item C<$WebNoAuthRegex>
-Set($WebBaseURL , "http://localhost:$WebPort");
+What portion of RT's URL space should not require authentication.
-Set($WebURL , $WebBaseURL . $WebPath . "/");
+This is mostly for extension and doesn't mean RT will work without
+login if you change it.
-# $WebImagesURL points to the base URL where RT can find its images.
+=cut
-Set($WebImagesURL , $WebPath . "/NoAuth/images/");
+Set($WebNoAuthRegex, qr{^ (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
-# $LogoURL points to the URL of the RT logo displayed in the web UI
+=item C<$SelfServiceRegex>
-Set($LogoURL , $WebImagesURL . "bplogo.gif");
+What portion of RT's URLspace should be accessible to Unprivileged users
+This does not override the redirect from F</Ticket/Display.html> to
+F</SelfService/Display.html> when Unprivileged users attempt to access
+ticked displays
-# WebNoAuthRegex - What portion of RT's URLspace should not require
-# authentication.
-Set($WebNoAuthRegex, qr!^(?:/+NoAuth/|
- /+REST/\d+\.\d+/NoAuth/)!x );
+=cut
-# SelfServiceRegex - What portion of RT's URLspace should
-# be accessible to Unprivileged users
-# This does not override the redirect from /Ticket/Display.html
-# to /SelfService/Display.html when Unprivileged
-# users attempt to access ticked displays
Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
-# For message boxes, set the entry box width and what type of wrapping
-# to use.
-#
-# Default width: 72
-Set($MessageBoxWidth , 72);
+=item C<$MessageBoxWidth>, C<$MessageBoxHeight>
+
+For message boxes, set the entry box width, height and what type of
+wrapping to use. These options can be overridden by users in their
+preferences.
+
+Default width: 72, height: 15
+
+These settings only apply to the non-RichText message box.
+See below for Rich Text settings.
+
+=cut
+
+Set($MessageBoxWidth, 72);
+Set($MessageBoxHeight, 15);
+
+=item C<$MessageBoxWrap>
+
+Default wrapping: "HARD" (choices "SOFT", "HARD")
+
+Wrapping is disabled when using MessageBoxRichText because
+of a bad interaction between IE and wrapping with the Rich
+Text Editor.
+
+=cut
-# Default wrapping: "HARD" (choices "SOFT", "HARD")
Set($MessageBoxWrap, "HARD");
-# Support implicit links in WikiText custom fields? A true value
-# causes InterCapped or ALLCAPS words in WikiText fields to
-# automatically become links to searches for those words. If used on
-# RTFM articles, it links to the RTFM article with that name.
+=item C<$MessageBoxRichText>
+
+Should "rich text" editing be enabled? This option lets your users send html email messages from the web interface.
+
+=cut
+
+Set($MessageBoxRichText, 1);
+
+=item C<$MessageBoxRichTextHeight>
+
+Height of RichText javascript enabled editing boxes (in pixels)
+
+=cut
+
+Set($MessageBoxRichTextHeight, 200);
+
+=item C<$MessageBoxIncludeSignature>
+
+Should your user's signatures (from their Preferences page) be included in Comments and Replies
+
+=cut
+
+Set($MessageBoxIncludeSignature, 1);
+
+=item C<$WikiImplicitLinks>
+
+Support implicit links in WikiText custom fields? A true value
+causes InterCapped or ALLCAPS words in WikiText fields to
+automatically become links to searches for those words. If used on
+RTFM articles, it links to the RTFM article with that name.
+
+=cut
+
Set($WikiImplicitLinks, 0);
-# if TrustHTMLAttachments is not defined, we will display them
-# as text. This prevents malicious HTML and javascript from being
-# sent in a request (although there is probably more to it than that)
-Set($TrustHTMLAttachments , undef);
-
-# Should RT redistribute correspondence that it identifies as
-# machine generated? A true value will do so; setting this to '0'
-# will cause no such messages to be redistributed.
-# You can also use 'privileged' (the default), which will redistribute
-# only to privileged users. This helps to protect against malformed
-# bounces and loops caused by autocreated requestors with bogus addresses.
+=item C<$TrustHTMLAttachments>
+
+if C<TrustHTMLAttachments> is not defined, we will display them
+as text. This prevents malicious HTML and javascript from being
+sent in a request (although there is probably more to it than that)
+
+=cut
+
+Set($TrustHTMLAttachments, undef);
+
+=item C<$RedistributeAutoGeneratedMessages>
+
+Should RT redistribute correspondence that it identifies as
+machine generated? A true value will do so; setting this to '0'
+will cause no such messages to be redistributed.
+You can also use 'privileged' (the default), which will redistribute
+only to privileged users. This helps to protect against malformed
+bounces and loops caused by autocreated requestors with bogus addresses.
+
+=cut
+
Set($RedistributeAutoGeneratedMessages, 'privileged');
-# If PreferRichText is set to a true value, RT will show HTML/Rich text
-# messages in preference to their plaintext alternatives. RT "scrubs" the
-# html to show only a minimal subset of HTML to avoid possible contamination
-# by cross-site-scripting attacks.
+=item C<$PreferRichText>
+
+If C<$PreferRichText> is set to a true value, RT will show HTML/Rich text
+messages in preference to their plaintext alternatives. RT "scrubs" the
+html to show only a minimal subset of HTML to avoid possible contamination
+by cross-site-scripting attacks.
+
+=cut
+
Set($PreferRichText, undef);
-# If $WebExternalAuth is defined, RT will defer to the environment's
-# REMOTE_USER variable.
+=item C<$WebExternalAuth>
-Set($WebExternalAuth , undef);
+If C<$WebExternalAuth> is defined, RT will defer to the environment's
+REMOTE_USER variable.
+
+=cut
-# If $WebFallbackToInternalAuth is undefined, the user is allowed a chance
-# of fallback to the login screen, even if REMOTE_USER failed.
+Set($WebExternalAuth, undef);
+
+=item C<$WebExternalAuthContinuous>
+
+If C<$WebExternalAuthContinuous> is defined, RT will check for the
+REMOTE_USER on each access. If you would prefer this to only happen
+once (at initial login) set this to a false value. The default setting
+will help ensure that if your external auth system deauthenticates a
+user, RT notices as soon as possible.
+
+=cut
+
+Set($WebExternalAuthContinuous, 1);
+
+=item C<$WebFallbackToInternalAuth>
+
+If C<$WebFallbackToInternalAuth> is defined, the user is allowed a chance
+of fallback to the login screen, even if REMOTE_USER failed.
+
+=cut
Set($WebFallbackToInternalAuth , undef);
-# $WebExternalGecos means to match 'gecos' field as the user identity);
-# useful with mod_auth_pwcheck and IIS Integrated Windows logon.
+=item C<$WebExternalGecos>
+
+C<$WebExternalGecos> means to match 'gecos' field as the user identity);
+useful with mod_auth_pwcheck and IIS Integrated Windows logon.
+
+=cut
Set($WebExternalGecos , undef);
-# $WebExternalAuto will create users under the same name as REMOTE_USER
-# upon login, if it's missing in the Users table.
+=item C<$WebExternalAuto>
+
+C<$WebExternalAuto> will create users under the same name as REMOTE_USER
+upon login, if it's missing in the Users table.
+
+=cut
Set($WebExternalAuto , undef);
-# If $WebExternalAuto is true, this will be passed to User's
-# Create method. Use it to set defaults, such as creating
-# Unprivileged users with { Privileged => 0 }
-# Must be a hashref of arguments
+=item C<$AutoCreate>
+
+If C<$WebExternalAuto> is true, C<$AutoCreate> will be passed to User's
+Create method. Use it to set defaults, such as creating
+Unprivileged users with C<{ Privileged => 0 }>
+( Must be a hashref of arguments )
+
+=cut
Set($AutoCreate, undef);
-# $WebSessionClass is the class you wish to use for managing Sessions.
-# It defaults to use your SQL database, but if you are using MySQL 3.x and
-# plans to use non-ascii Queue names, uncomment and add this line to
-# RT_SiteConfig.pm will prevent session corruption.
+=item C<$WebSessionClass>
+
+C<$WebSessionClass> is the class you wish to use for managing Sessions.
+It defaults to use your SQL database, but if you are using MySQL 3.x and
+plans to use non-ascii Queue names, uncomment and add this line to
+F<RT_SiteConfig.pm> will prevent session corruption.
+
+=cut
# Set($WebSessionClass , 'Apache::Session::File');
+=item C<$AutoLogoff>
+
+By default, RT's user sessions persist until a user closes his or her
+browser. With the C<$AutoLogoff> option you can setup session lifetime in
+minutes. A user will be logged out if he or she doesn't send any requests
+to RT for the defined time.
+
+=cut
-# By default, RT's session cookie isn't marked as "secure" Some web browsers
-# will treat secure cookies more carefully than non-secure ones, being careful
-# not to write them to disk, only send them over an SSL secured connection
-# and so on. To enable this behaviour, set # $WebSecureCookies to a true value.
-# NOTE: You probably don't want to turn this on _unless_ users are only connecting
-# via SSL encrypted HTTP connections.
+Set($AutoLogoff, 0);
+
+=item C<$WebSecureCookies>
+
+By default, RT's session cookie isn't marked as "secure" Some web browsers
+will treat secure cookies more carefully than non-secure ones, being careful
+not to write them to disk, only send them over an SSL secured connection
+and so on. To enable this behaviour, set C<$WebSecureCookies> to a true value.
+NOTE: You probably don't want to turn this on _unless_ users are only connecting
+via SSL encrypted HTTP connections.
+
+=cut
Set($WebSecureCookies, 0);
+=item C<$WebFlushDbCacheEveryRequest>
-# By default, RT clears its database cache after every page view.
-# This ensures that you've always got the most current information
-# when working in a multi-process (mod_perl or FastCGI) Environment
-# Setting $WebFlushDbCacheEveryRequest to '0' will turn this off,
-# which will speed RT up a bit, at the expense of a tiny bit of data
-# accuracy.
+By default, RT clears its database cache after every page view.
+This ensures that you've always got the most current information
+when working in a multi-process (mod_perl or FastCGI) Environment
+Setting C<$WebFlushDbCacheEveryRequest> to '0' will turn this off,
+which will speed RT up a bit, at the expense of a tiny bit of data
+accuracy.
+
+=cut
Set($WebFlushDbCacheEveryRequest, '1');
-# $MaxInlineBody is the maximum attachment size that we want to see
-# inline when viewing a transaction. 13456 is a random sane-sounding
-# default.
+=item C<$MaxInlineBody>
+
+C<$MaxInlineBody> is the maximum attachment size that we want to see
+inline when viewing a transaction. RT will inline any text if value
+is undefined or 0. This option can be overridden by users in their
+preferences.
+
+=cut
+
+Set($MaxInlineBody, 12000);
+
+=item C<$DefaultSummaryRows>
-Set($MaxInlineBody, 13456);
+C<$DefaultSummaryRows> is default number of rows displayed in for search
+results on the frontpage.
-# $DefaultSummaryRows is default number of rows displayed in for search
-# results on the frontpage.
+=cut
Set($DefaultSummaryRows, 10);
-# By default, RT shows newest transactions at the bottom of the ticket
-# history page, if you want see them at the top set this to '0'.
+=item C<$HomePageRefreshInterval>
+
+C<$HomePageRefreshInterval> is default number of seconds to refresh the RT
+home page. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
+
+=cut
+
+Set($HomePageRefreshInterval, 0);
+
+=item C<$SearchResultsRefreshInterval>
+
+C<$SearchResultsRefreshInterval> is default number of seconds to refresh
+search results in RT. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
+
+=cut
+
+Set($SearchResultsRefreshInterval, 0);
+
+=item C<$OldestTransactionsFirst>
+
+By default, RT shows newest transactions at the bottom of the ticket
+history page, if you want see them at the top set this to '0'. This
+option can be overridden by users in their preferences.
+
+=cut
Set($OldestTransactionsFirst, '1');
-# By default, RT shows images attached to incoming (and outgoing) ticket updates
-# inline. Set this variable to 0 if you'd like to disable that behaviour
+=item C<$ShowTransactionImages>
+
+By default, RT shows images attached to incoming (and outgoing) ticket updates
+inline. Set this variable to 0 if you'd like to disable that behaviour
+
+=cut
Set($ShowTransactionImages, 1);
+=item C<$PlainTextPre>
+
+Normally plaintext attachments are displayed as HTML with line
+breaks preserved. This causes space- and tab-based formatting not
+to be displayed correctly. By setting $PlainTextPre they'll be
+displayed using <pre> instead so such formatting works, but they'll
+use a monospaced font, no matter what the value of C<$PlainTextMono> is.
+
+=cut
+
+Set($PlainTextPre, 0);
+
+
+=item C<$PlainTextMono>
+To display plaintext attachments,
+Set C<$PlainTextMono> to 1 to use monospaced font and preserve
+formatting, but unlike PlainTextPre, the text will wrap to fit into the
+UI.
+
+=cut
+
+Set($PlainTextMono, 0);
+
+=item C<$ShowUnreadMessageNotifications>
+
+By default, RT will prompt users when there are new, unread messages on
+tickets they are viewing.
+
+Set C<$ShowUnreadMessageNotifications> to a false value to disable this feature.
+
+=cut
-# $HomepageComponents is an arrayref of allowed components on a user's
-# customized homepage ("RT at a glance").
+Set($ShowUnreadMessageNotifications, 1);
-Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage)]);
-# @MasonParameters is the list of parameters for the constructor of
-# HTML::Mason's Apache or CGI Handler. This is normally only useful
-# for debugging, eg. profiling individual components with:
-# use MasonX::Profiler; # available on CPAN
-# @MasonParameters = (preamble => 'my $p = MasonX::Profiler->new($m, $r);');
+=item C<$HomepageComponents>
-@MasonParameters = () unless (@MasonParameters);
+C<$HomepageComponents> is an arrayref of allowed components on a user's
+customized homepage ("RT at a glance").
+
+=cut
+
+Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
+
+=item C<@MasonParameters>
+
+C<@MasonParameters> is the list of parameters for the constructor of
+HTML::Mason's Apache or CGI Handler. This is normally only useful
+for debugging, eg. profiling individual components with:
+
+ use MasonX::Profiler; # available on CPAN
+ Set(@MasonParameters, (preamble => 'my $p = MasonX::Profiler->new($m, $r);'));
+
+=cut
+
+Set(@MasonParameters, ());
+
+=item C<$DefaultSearchResultFormat>
+
+C<$DefaultSearchResultFormat> is the default format for RT search results
+
+=cut
-# $DefaultSearchResultFormat is the default format for RT search results
Set ($DefaultSearchResultFormat, qq{
- '<B><A HREF="$RT::WebPath/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#',
- '<B><A HREF="$RT::WebPath/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
+ '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#',
+ '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
Status,
QueueName,
OwnerName,
@@ -507,105 +1237,387 @@ Set ($DefaultSearchResultFormat, qq{
'<small>__LastUpdatedRelative__</small>',
'<small>__TimeLeft__</small>'});
-# If $SuppressInlineTextFiles is set to a true value, then uploaded
-# text files (text-type attachments with file names) are prevented
-# from being displayed in-line when viewing a ticket's history.
+=item C<$DefaultSelfServiceSearchResultFormat>
+
+C<$DefaultSelfServiceSearchResultFormat> is the default format of searches displayed in the
+SelfService interface.
+
+=cut
+
+Set($DefaultSelfServiceSearchResultFormat, qq{
+ '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__id__</a></B>/TITLE:#',
+ '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
+ Status,
+ Requestors,
+ OwnerName});
+
+=item C<$SuppressInlineTextFiles>
+
+If C<$SuppressInlineTextFiles> is set to a true value, then uploaded
+text files (text-type attachments with file names) are prevented
+from being displayed in-line when viewing a ticket's history.
+
+=cut
Set($SuppressInlineTextFiles, undef);
-# If $DontSearchFileAttachments is set to a true value, then uploaded
-# files (attachments with file names) are not searched during full-content
-# ticket searches.
+=item C<$DontSearchFileAttachments>
+
+If C<$DontSearchFileAttachments> is set to a true value, then uploaded
+files (attachments with file names) are not searched during full-content
+ticket searches.
+
+=cut
Set($DontSearchFileAttachments, undef);
-# The GD module (which RT uses for graphs) uses a builtin font that doesn't
-# have full Unicode support. You can use a particular TrueType font by setting
-# $ChartFont to the absolute path of that font. Your GD library must have
-# support for TrueType fonts to use this option.
+=item C<$ChartFont>
+
+The L<GD> module (which RT uses for graphs) uses a builtin font that doesn't
+have full Unicode support. You can use a particular TrueType font by setting
+$ChartFont to the absolute path of that font. Your GD library must have
+support for TrueType fonts to use this option.
+
+=cut
Set($ChartFont, undef);
-# }}}
+=item C<@Active_MakeClicky>
+
+MakeClicky detects various formats of data in headers and email
+messages, and extends them with supporting links. By default, RT
+provides two formats:
+
+* 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
+ link after the URL.
+
+* 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
+ replace URL with link and *adds spaces* into text if it's longer
+ then 30 chars. This allow browser to wrap long URLs and avoid
+ horizontal scrolling.
+
+See F<share/html/Elements/MakeClicky> for documentation on how to add your own.
+
+=cut
+
+Set(@Active_MakeClicky, qw());
+
+=item C<$DefaultQueue>
+
+Use this to select the default queue name that will be used for creating new
+tickets. You may use either the queue's name or its ID. This only affects the
+queue selection boxes on the web interface.
+
+=cut
+
+#Set($DefaultQueue, 'General');
+
+=item C<$DefaultTimeUnitsToHours>
+
+Use this to set the default units for time entry to hours instead of minutes.
+
+=cut
+
+Set($DefaultTimeUnitsToHours, 0);
+
+=back
+
+=head1 L<Net::Server> (rt-server) Configuration
+
+=over 4
+
+=item C<$StandaloneMinServers>, C<$StandaloneMaxServers>
+
+The absolute minimum and maximum number of servers that will be created to
+handle requests. Having multiple servers means that serving a slow page will
+affect other users less.
+
+=cut
+
+Set($StandaloneMinServers, 1);
+Set($StandaloneMaxServers, 1);
+
+=item C<$StandaloneMinSpareServers>, C<$StandaloneMaxSpareServers>
+
+These next two options can be used to scale up and down the number of servers
+to adjust to load. These two options will respect the C<$StandaloneMinServers
+> and C<$StandaloneMaxServers options>.
+
+=cut
+
+Set($StandaloneMinSpareServers, 0);
+Set($StandaloneMaxSpareServers, 0);
+
+=item C<$StandaloneMaxRequests>
+
+This sets the absolute maximum number of requests a single server will serve.
+Setting this would be useful if, for example, memory usage slowly crawls up
+every hit.
+
+=cut
+
+#Set($StandaloneMaxRequests, 50);
+
+=item C<%NetServerOptions>
+
+C<%NetServerOptions> is a hash of additional options to use for
+L<Net::Server/DEFAULT ARGUMENTS>. For example, you could set
+reverse_lookups to get the hostnames for all users with:
+
+C<Set(%NetServerOptions, (reverse_lookups => 1));>
+
+=cut
+
+Set(%NetServerOptions, ());
+
+=back
+
+
+=head1 UTF-8 Configuration
+
+=over 4
+
+=item C<@LexiconLanguages>
+
+An array that contains languages supported by RT's internationalization
+interface. Defaults to all *.po lexicons; setting it to C<qw(en ja)> will make
+RT bilingual instead of multilingual, but will save some memory.
-# {{{ RT UTF-8 Settings
+=cut
+
+Set(@LexiconLanguages, qw(*));
+
+=item C<@EmailInputEncodings>
+
+An array that contains default encodings used to guess which charset
+an attachment uses if not specified. Must be recognized by
+L<Encode::Guess>.
+
+=cut
+
+Set(@EmailInputEncodings, qw(utf-8 iso-8859-1 us-ascii));
+
+=item C<$EmailOutputEncoding>
-# An array that contains languages supported by RT's internationalization
-# interface. Defaults to all *.po lexicons; setting it to qw(en ja) will make
-# RT bilingual instead of multilingual, but will save some memory.
+The charset for localized email. Must be recognized by Encode.
+
+=cut
-@LexiconLanguages = qw(*) unless (@LexiconLanguages);
+Set($EmailOutputEncoding, 'utf-8');
-# An array that contains default encodings used to guess which charset
-# an attachment uses if not specified. Must be recognized by
-# Encode::Guess.
-@EmailInputEncodings = qw(utf-8 iso-8859-1 us-ascii) unless (@EmailInputEncodings);
+=back
-# The charset for localized email. Must be recognized by Encode.
+=head1 Date Handling Configuration
-Set($EmailOutputEncoding , 'utf-8');
+=over 4
-# }}}
+=item C<$DateTimeFormat>
-# {{{ RT Date Handling Options (for Time::ParseDate)
+You can choose date and time format. See "Output formatters"
+section in perldoc F<lib/RT/Date.pm> for more options. This option can
+be overridden by users in their preferences.
+Some examples:
-# Set this to 1 if your local date convention looks like "dd/mm/yy"
-# instead of "mm/dd/yy".
+C<Set($DateTimeFormat, 'LocalizedDateTime');>
+C<Set($DateTimeFormat, { Format => 'ISO', Seconds => 0 });>
+C<Set($DateTimeFormat, 'RFC2822');>
+C<Set($DateTimeFormat, { Format => 'RFC2822', Seconds => 0, DayOfWeek => 0 });>
+
+=cut
+
+Set($DateTimeFormat, 'DefaultFormat');
+
+# Next two options are for Time::ParseDate
+
+=item C<$DateDayBeforeMonth>
+
+Set this to 1 if your local date convention looks like "dd/mm/yy" instead of
+"mm/dd/yy". Used only for parsing, not for displaying dates.
+
+=cut
Set($DateDayBeforeMonth , 1);
-# Should an unspecified day or year in a date refer to a future or a
-# past value? For example, should a date of "Tuesday" default to mean
-# the date for next Tuesday or last Tuesday? Should the date "March 1"
-# default to the date for next March or last March?
-# Set to 0 for the next date or 1 for the last date.
+=item C<$AmbiguousDayInPast>, C<$AmbiguousDayInFuture>
-Set($AmbiguousDayInPast , 1);
+Should an unspecified day or year in a date refer to a future or a
+past value? For example, should a date of "Tuesday" default to mean
+the date for next Tuesday or last Tuesday? Should the date "March 1"
+default to the date for next March or last March?
-# }}}
+Set $<AmbiguousDayInPast> for the last date, or $<$AmbiguousDayInFuture> for the
+next date.
-# {{{ Miscellaneous RT Settings
+The default is usually good.
-# You can define new statuses and even reorder existing statuses here.
-# WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
-# will break horribly. The statuses you add must be no longer than
-# 10 characters.
+=cut
-@ActiveStatus = qw(new open stalled) unless @ActiveStatus;
-@InactiveStatus = qw(resolved rejected deleted) unless @InactiveStatus;
+Set($AmbiguousDayInPast, 0);
+Set($AmbiguousDayInFuture, 0);
-# Backward compatability setting. Add/Delete Link used to record one
-# transaction and run one scrip. Set this value to 1 if you want
-# only one of the link transactions to have scrips run.
-Set($LinkTransactionsRun1Scrip , 0);
+=back
+
+=head1 Approval Configuration
+
+Configration for the approvl system
+
+=over 4
+
+=item C<$ApprovalRejectionNotes>
+
+Should rejection notes be sent to the requestors? The default is true.
+
+=cut
+
+Set($ApprovalRejectionNotes, 1);
+
+
+=back
+
+=head1 Miscellaneous Configuration
+
+=over 4
+
+=item C<@ActiveStatus>, C<@InactiveStatus>
+
+You can define new statuses and even reorder existing statuses here.
+WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
+will break horribly. The statuses you add must be no longer than
+10 characters.
+
+=cut
+
+Set(@ActiveStatus, qw(new open stalled));
+Set(@InactiveStatus, qw(resolved rejected deleted));
+
+=item C<$LinkTransactionsRun1Scrip>
+
+RT-3.4 backward compatibility setting. Add/Delete Link used to record one
+transaction and run one scrip. Set this value to 1 if you want
+only one of the link transactions to have scrips run.
+
+=cut
+
+Set($LinkTransactionsRun1Scrip, 0);
+
+=item C<$StrictLinkACL>
+
+When this feature is enabled a user needs I<ModifyTicket> rights on both
+tickets to link them together, otherwise he can have rights on either of
+them.
+
+=cut
-# When this feature is enabled an user need ModifyTicket right on both
-# tickets to link them together, otherwise he can have right on any of
-# two.
Set($StrictLinkACL, 1);
-# }}}
+=item C<$PreviewScripMessages>
+
+Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket
+reply page should include the content of the messages to be sent.
+
+=cut
+Set($PreviewScripMessages, 0);
+
+=item C<$UseTransactionBatch>
+
+Set C<$UseTransactionBatch> to 1 to execute transactions in batches,
+such that a resolve and comment (for example) would happen
+simultaneously, instead of as two transactions, unaware of each
+others' existence.
+
+=cut
+
+Set($UseTransactionBatch, 1);
+
+=item C<@CustomFieldValuesSources>
+
+Set C<@CustomFieldValuesSources> to a list of class names which extend
+L<RT::CustomFieldValues::External>. This can be used to pull lists of
+custom field values from external sources at runtime.
+
+=cut
-# {{{ Development Mode
-#
-# RT comes with a "Development mode" setting.
-# This setting, as a convenience for developers, turns on
-# all sorts of development options that you most likely don't want in
-# production:
-#
-# * Turns off Mason's 'static_source' directive. By default, you can't
-# edit RT's web ui components on the fly and have RT magically pick up
-# your changes. (It's a big performance hit)
-#
-# * More to come
-#
+Set(@CustomFieldValuesSources, ());
+
+=item C<$CanonicalizeRedirectURLs>
+
+Set C<$CanonicalizeRedirectURLs> to 1 to use $C<WebURL> when redirecting rather
+than the one we get from C<%ENV>.
+
+If you use RT behind a reverse proxy, you almost certainly want to
+enable this option.
+
+=cut
+
+Set($CanonicalizeRedirectURLs, 0);
+=item C<$EnableReminders>
+
+Hide links/portlets related to Reminders by setting this to 0
+
+=cut
+
+Set($EnableReminders,1);
+
+
+=item C<@Plugins>
+
+Set C<@Plugins> to a list of external RT plugins that should be enabled (those
+plugins have to be previously downloaded and installed).
+Example:
+
+C<Set(@Plugins, (qw(Extension::QuickDelete RT::FM)));>
+
+=cut
+
+Set(@Plugins, ());
+
+=back
+
+=head1 Development Configuration
+
+=over 4
+
+=item C<$DevelMode>
+
+RT comes with a "Development mode" setting.
+This setting, as a convenience for developers, turns on
+all sorts of development options that you most likely don't want in
+production:
+
+* Turns off Mason's 'static_source' directive. By default, you can't
+ edit RT's web ui components on the fly and have RT magically pick up
+ your changes. (It's a big performance hit)
+
+ * More to come
+
+=cut
Set($DevelMode, '@RT_DEVEL_MODE@');
-# }}}
+=back
+
+=head1 Deprecated Options
+
+=over 4
+
+=item C<$AlwaysUseBase64>
+
+Encode blobs as base64 in DB (?)
+
+=item C<$TicketBaseURI>
+
+Base URI to tickets in this system; used when loading (?)
+
+=item C<$UseCodeTickets>
+
+This option is exists for backwards compatibility. Don't use it.
+
+=back
+
+=cut
1;
diff --git a/rt/etc/RT_SiteConfig.pm b/rt/etc/RT_SiteConfig.pm
index f5cc298..1661e4d 100644
--- a/rt/etc/RT_SiteConfig.pm
+++ b/rt/etc/RT_SiteConfig.pm
@@ -15,4 +15,5 @@
# perl -c /path/to/your/etc/RT_SiteConfig.pm
Set( $rtname, 'example.com');
+#Set(@Plugins,(qw(Extension::QuickDelete RT::FM)));
1;
diff --git a/rt/etc/acl.Informix b/rt/etc/acl.Informix
index bca0408..eff232f 100644
--- a/rt/etc/acl.Informix
+++ b/rt/etc/acl.Informix
@@ -1,5 +1,6 @@
+
sub acl {
-return (
-"GRANT RESOURCE TO ${RT::DatabaseUser};");
+ return ("GRANT RESOURCE TO ". RT->Config->Get('DatabaseUser') .";");
}
+
1;
diff --git a/rt/etc/acl.Oracle b/rt/etc/acl.Oracle
index ac29215..9ca4122 100644
--- a/rt/etc/acl.Oracle
+++ b/rt/etc/acl.Oracle
@@ -1,10 +1,4 @@
-sub acl {
-return (
-"CREATE USER ${RT::DatabaseUser} identified by ${RT::DatabasePassword} ".
-"default tablespace USERS " .
-"temporary tablespace TEMP " .
-"quota unlimited on USERS" ,
-"grant connect, resource to ${RT::DatabaseUser}"
-);
-}
+
+sub acl { return () }
+
1;
diff --git a/rt/etc/acl.Pg b/rt/etc/acl.Pg
index fb62559..8a0d4f2 100755
--- a/rt/etc/acl.Pg
+++ b/rt/etc/acl.Pg
@@ -1,67 +1,76 @@
+
sub acl {
my $dbh = shift;
my @acls;
my @tables = qw (
-
- attachments_id_seq
- Attachments
- Attributes
- attributes_id_seq
- queues_id_seq
- Queues
- links_id_seq
- Links
- principals_id_seq
- Principals
- groups_id_seq
- Groups
- scripconditions_id_seq
- ScripConditions
- transactions_id_seq
- Transactions
- scrips_id_seq
- Scrips
- acl_id_seq
- ACL
- groupmembers_id_seq
- GroupMembers
- cachedgroupmembers_id_seq
- CachedGroupMembers
- users_id_seq
- Users
- tickets_id_seq
- Tickets
- scripactions_id_seq
- ScripActions
- templates_id_seq
- Templates
- objectcustomfieldvalues_id_s
- ObjectCustomFieldValues
- customfields_id_seq
- CustomFields
- objectcustomfields_id_s
- ObjectCustomFields
- customfieldvalues_id_seq
- CustomFieldValues
- sessions
+ attachments_id_seq
+ Attachments
+ Attributes
+ attributes_id_seq
+ queues_id_seq
+ Queues
+ links_id_seq
+ Links
+ principals_id_seq
+ Principals
+ groups_id_seq
+ Groups
+ scripconditions_id_seq
+ ScripConditions
+ transactions_id_seq
+ Transactions
+ scrips_id_seq
+ Scrips
+ acl_id_seq
+ ACL
+ groupmembers_id_seq
+ GroupMembers
+ cachedgroupmembers_id_seq
+ CachedGroupMembers
+ users_id_seq
+ Users
+ tickets_id_seq
+ Tickets
+ scripactions_id_seq
+ ScripActions
+ templates_id_seq
+ Templates
+ objectcustomfieldvalues_id_s
+ ObjectCustomFieldValues
+ customfields_id_seq
+ CustomFields
+ objectcustomfields_id_s
+ ObjectCustomFields
+ customfieldvalues_id_seq
+ CustomFieldValues
+ sessions
);
- # if there's already an rt_user, drop it.
- my @row =
- $dbh->selectrow_array( "select usename from pg_user where usename = '" . $RT::DatabaseUser."'" );
- if ( $row[0] ) {
- push @acls, "drop user ${RT::DatabaseUser};",;
+ my $db_user = RT->Config->Get('DatabaseUser');
+ my $db_pass = RT->Config->Get('DatabasePassword');
+
+ # if there's already an rt_user, use it.
+ my @row = $dbh->selectrow_array( "SELECT usename FROM pg_user WHERE usename = '$db_user'" );
+ unless ( $row[0] ) {
+ push @acls, "CREATE USER \"$db_user\" WITH PASSWORD '$db_pass' NOCREATEDB NOCREATEUSER;";
}
- push @acls, "create user ${RT::DatabaseUser} with password '${RT::DatabasePassword}' NOCREATEDB NOCREATEUSER;";
+ my $sequence_right
+ = ( $dbh->{pg_server_version} >= 80200 )
+ ? "USAGE, SELECT, UPDATE"
+ : "SELECT, UPDATE";
foreach my $table (@tables) {
- push @acls,
- "GRANT SELECT, INSERT, UPDATE, DELETE ON $table to "
- . $RT::DatabaseUser . ";";
-
+ if ( $table =~ /^[a-z]/ && $table ne 'sessions' ) {
+# table like objectcustomfields_id_s
+ push @acls, "GRANT $sequence_right ON $table TO \"$db_user\";"
+ }
+ else {
+ push @acls, "GRANT SELECT, INSERT, UPDATE, DELETE ON $table TO \"$db_user\";"
+ }
}
return (@acls);
}
+
1;
diff --git a/rt/etc/acl.Sybase b/rt/etc/acl.Sybase
index 6192b4e..7583c02 100644
--- a/rt/etc/acl.Sybase
+++ b/rt/etc/acl.Sybase
@@ -1,6 +1,10 @@
+
sub acl {
-return (
-"SP_ADDLOGIN ${RT::DatabaseUser}, ${RT::DatabasePassword}, ${RT::DatabaseName} ",
-);
+ my $db_name = RT->Config->Get('DatabaseName');
+ my $db_user = RT->Config->Get('DatabaseUser');
+ my $db_pass = RT->Config->Get('DatabasePassword');
+
+ return ("SP_ADDLOGIN $db_user, $db_pass, $db_name");
}
+
1;
diff --git a/rt/etc/acl.mysql b/rt/etc/acl.mysql
index 724c7f1..0982ca2 100755
--- a/rt/etc/acl.mysql
+++ b/rt/etc/acl.mysql
@@ -1,9 +1,27 @@
+
sub acl {
-return () if !$RT::DatabaseUser or $RT::DatabaseUser eq 'root';
-return (
-"USE mysql;",
-"DELETE FROM user WHERE user = '${RT::DatabaseUser}';",
-"DELETE FROM db where db = '${RT::DatabaseName}';",
-"GRANT SELECT,INSERT,CREATE,INDEX,UPDATE,DELETE ON ${RT::DatabaseName}.* TO '${RT::DatabaseUser}'\@'${RT::DatabaseRTHost}' IDENTIFIED BY '${RT::DatabasePassword}';");
+ my $db_name = RT->Config->Get('DatabaseName');
+ my $db_rthost = RT->Config->Get('DatabaseRTHost');
+ my $db_user = RT->Config->Get('DatabaseUser');
+ my $db_pass = RT->Config->Get('DatabasePassword');
+ unless ( $db_user ) {
+ print STDERR "DatabaseUser option is not defined or empty. Skipping...\n";
+ return;
+ }
+ if ( $db_user eq 'root' ) {
+ print STDERR "DatabaseUser is root. Skipping...\n";
+ return;
+ }
+ print "Granting access to $db_user\@'$db_rthost' on $db_name.\n";
+ return (
+ "USE mysql;",
+ "DELETE FROM user WHERE user = '$db_user';",
+ "DELETE FROM db where db = '$db_name';",
+ "GRANT SELECT,INSERT,CREATE,INDEX,UPDATE,DELETE
+ ON $db_name.*
+ TO '$db_user'\@'$db_rthost'
+ IDENTIFIED BY '$db_pass';",
+ );
}
+
1;
diff --git a/rt/etc/initialdata b/rt/etc/initialdata
index 54fa9d1..89db2cc 100644
--- a/rt/etc/initialdata
+++ b/rt/etc/initialdata
@@ -1,63 +1,18 @@
# Initial data for a fresh RT3 Installation.
@Users = (
- { Name => 'Nobody',
- RealName => 'Nobody in particular',
- Comments => 'Do not delete or modify this user. It is integral '
- . 'to RT\'s internal data structures',
- Privileged => '0', },
-
{ Name => 'root',
Gecos => 'root',
RealName => 'Enoch Root',
Password => 'password',
EmailAddress => "root\@localhost",
Comments => 'SuperUser',
- Privileged => '1', } );
+ Privileged => '1',
+ },
+);
@Groups = (
- { Name => '',
- Type => 'Everyone', # loc
- Domain => 'SystemInternal',
- Instance => '',
- Description => 'Pseudogroup for internal use', # loc
- },
- { Type => 'Privileged', # loc
- Domain => 'SystemInternal',
- Instance => '',
- Name => '',
- Description => 'Pseudogroup for internal use', # loc
- },
- { Name => '',
- Type => 'Unprivileged', # loc
- Domain => 'SystemInternal',
- Instance => '',
- Description => 'Pseudogroup for internal use', # loc
- },
- { Name => '',
- Type => 'Owner', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'SystemRolegroup for internal use', # loc
- },
- { Name => '',
- Type => 'Requestor', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'SystemRolegroup for internal use', # loc
- },
- { Name => '',
- Type => 'Cc', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'SystemRolegroup for internal use', # loc
- },
- { Name => '',
- Type => 'AdminCc', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'Pseudogroup for internal use', # loc
- }, );
+);
@Queues = ({ Name => 'General',
Description => 'The default queue',
@@ -113,12 +68,12 @@
ExecModule => 'Notify',
Argument => 'Requestor,Cc' },
- { Name => 'Notify Requestors, Ccs and AdminCcs as Comment', # loc
- Description => 'Send mail to all watchers as a "comment"', # loc
+ { Name => 'Notify Owner, Requestors, Ccs and AdminCcs as Comment', # loc
+ Description => 'Send mail to owner and all watchers as a "comment"', # loc
ExecModule => 'NotifyAsComment',
Argument => 'All' },
- { Name => 'Notify Requestors, Ccs and AdminCcs', # loc
- Description => 'Send mail to all watchers', # loc
+ { Name => 'Notify Owner, Requestors, Ccs and AdminCcs', # loc
+ Description => 'Send mail to owner and all watchers', # loc
ExecModule => 'Notify',
Argument => 'All' },
{ Name => 'Notify Other Recipients as Comment', # loc
@@ -139,6 +94,9 @@
{ Name => 'Open Tickets', # loc
Description => 'Open tickets on correspondence', # loc
ExecModule => 'AutoOpen' },
+ { Name => 'Extract Subject Tag', # loc
+ Description => 'Extract tags from a Transaction\'s subject and add them to the Ticket\'s subject.', # loc
+ ExecModule => 'ExtractSubjectTag' },
);
@ScripConditions = (
@@ -202,7 +160,13 @@
Argument => 'resolved'
},
+ { Name => 'On Reject', # loc
+ Description => 'Whenever a ticket is rejected', # loc
+ ApplicableTransTypes => 'Status',
+ ExecModule => 'StatusChange',
+ Argument => 'rejected'
+ },
{ Name => 'User Defined', # loc
Description => 'Whenever a user-defined condition occurs', # loc
ApplicableTransTypes => 'Any',
@@ -210,6 +174,17 @@
},
+ { Name => 'On Close', # loc
+ Description => 'Whenever a ticket is closed', # loc
+ ApplicableTransTypes => 'Status,Set',
+ ExecModule => 'CloseTicket',
+ },
+ { Name => 'On Reopen', # loc
+ Description => 'Whenever a ticket is reopened', # loc
+ ApplicableTransTypes => 'Status,Set',
+ ExecModule => 'ReopenTicket',
+ },
+
);
@Templates = (
@@ -231,11 +206,11 @@ creation of a trouble ticket regarding:
a summary of which appears below.
There is no need to reply to this message right now. Your ticket has been
-assigned an ID of [{$rtname} #{$Ticket->id()}].
+assigned an ID of [{$Ticket->QueueObj->SubjectTag || $rtname} #{$Ticket->id()}].
Please include the string:
- [{$rtname} #{$Ticket->id}]
+ [{$Ticket->QueueObj->SubjectTag || $rtname} #{$Ticket->id}]
in the subject line of all future correspondence about this issue. To do so,
you may reply to this message.
@@ -255,13 +230,13 @@ you may reply to this message.
{$Transaction->CreatedAsString}: Request {$Ticket->id} was acted upon.
-Transaction: {$Transaction->Description}
+ Transaction: {$Transaction->Description}
Queue: {$Ticket->QueueObj->Name}
Subject: {$Transaction->Subject || $Ticket->Subject || "(No subject given)"}
Owner: {$Ticket->OwnerObj->Name}
Requestors: {$Ticket->RequestorAddresses}
Status: {$Ticket->Status}
- Ticket <URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >
+ Ticket <URL: {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id} >
{$Transaction->Content()}
@@ -276,7 +251,7 @@ Transaction: {$Transaction->Description}
Content => 'RT-Attach-Message: yes
-<URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >
+<URL: {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id} >
{$Transaction->Content()}
'
@@ -295,10 +270,11 @@ Transaction: {$Transaction->Description}
Name => 'Admin Comment', # loc
Description => 'Default admin comment template', # loc
Content =>
-'Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject); $s =~ s/\\[Comment\\]//g; $comment =~ s/^Re//i; $s;}
+'Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject); $s =~ s/\\[Comment\\]//g; $s =~ s/^Re//i; $s;}
+RT-Attach-Message: yes
-{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}
+{RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id}
This is a comment. It is not sent to the Requestor(s):
{$Transaction->Content()}
@@ -311,7 +287,7 @@ This is a comment. It is not sent to the Requestor(s):
Content => 'Subject: Status Changed to: {$Transaction->NewValue}
-{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}
+{RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id}
{$Transaction->Content()}
'
@@ -339,8 +315,8 @@ Greetings,
There is a new item pending your approval: "{$Ticket->Subject()}",
a summary of which appears below.
-Please visit {$RT::WebURL}Approvals/Display.html?id={$Ticket->id}
-to approve or reject this ticket, or {$RT::WebURL}Approvals/ to
+Please visit {RT->Config->Get(\'WebURL\')}Approvals/Display.html?id={$Ticket->id}
+to approve or reject this ticket, or {RT->Config->Get(\'WebURL\')}Approvals/ to
batch-process all your pending approvals.
-------------------------------------------------------------------------
@@ -350,24 +326,29 @@ batch-process all your pending approvals.
{ Queue => '___Approvals',
Name => "Approval Passed", # loc
Description =>
- "Notify Owner of their ticket has been approved by some approver", # loc
+ "Notify Requestor of their ticket has been approved by some approver", # loc
Content => 'Subject: Ticket Approved: {$Ticket->Subject}
Greetings,
Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
Other approvals may be pending.
+
+Approver\'s notes: { $Notes }
'
},
{ Queue => '___Approvals',
Name => "All Approvals Passed", # loc
Description =>
- "Notify Owner of their ticket has been approved by all approvers", # loc
+ "Notify Requestor of their ticket has been approved by all approvers", # loc
Content => 'Subject: Ticket Approved: {$Ticket->Subject}
Greetings,
-Your ticket has been approved. Its Owner may now start to act on it.
+Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
+Its Owner may now start to act on it.
+
+Approver\'s notes: { $Notes }
'
},
{ Queue => '___Approvals',
@@ -379,211 +360,190 @@ Your ticket has been approved. Its Owner may now start to act on it.
Greetings,
Your ticket has been rejected by { eval { $Approval->OwnerObj->Name } }.
+
+Approver\'s notes: { $Notes }
+'
+ },
+ { Queue => '___Approvals',
+ Name => "Approval Ready for Owner", # loc
+ Description =>
+ "Notify Owner of their ticket has been approved and is ready to be acted on", # loc
+ Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+
+Greetings,
+
+The ticket has been approved, you may now start to act on it.
+
'
},
+ { Queue => 0,
+ Name => "Forward", # loc
+ Description => "Heading of a forwarded message", # loc
+ Content => q{
+This is a forward of transaction #{$Transaction->id} of ticket #{ $Ticket->id }
+}
+ },
+ { Queue => 0,
+ Name => "Forward Ticket", # loc
+ Description => "Heading of a forwarded Ticket", # loc
+ Content => q{
+
+This is a forward of ticket #{ $Ticket->id }
+}
+ },
+ { Queue => 0,
+ Name => "Error: public key", # loc
+ Description =>
+ "Inform user that he has problems with public key and couldn't recieve encrypted content", # loc
+ Content => q{Subject: We have no your public key or it's wrong
+
+You received this message as we have no your public PGP key or we have a problem with your key. Inform the administrator about the problem.
+}
+ },
+ { Queue => 0,
+ Name => "Error to RT owner: public key", # loc
+ Description =>
+ "Inform RT owner that user(s) have problems with public keys", # loc
+ Content => q{Subject: Some users have problems with public keys
+
+You received this message as RT has problems with public keys of the following user:
+{
+ foreach my $e ( @BadRecipients ) {
+ $OUT .= "* ". $e->{'Message'} ."\n";
+ }
+}}
+ },
+ { Queue => 0,
+ Name => "Error: no private key", # loc
+ Description =>
+ "Inform user that we received an encrypted email and we have no private keys to decrypt", # loc
+ Content => q{Subject: we received message we cannot decrypt
+
+You sent an encrypted message with subject '{ $Message->head->get('Subject') }',
+but we have no private key it's encrypted to.
+
+Please, check that you encrypt messages with correct keys
+or contact the system administrator.}
+ },
+ { Queue => 0,
+ Name => "Error: bad GnuPG data", # loc
+ Description =>
+ "Inform user that a message he sent has invalid GnuPG data", # loc
+ Content => q{Subject: We received a message we cannot handle
+
+You sent us a message that we cannot handle due to corrupted GnuPG signature or encrypted block. we get the following error(s):
+{ foreach my $msg ( @Messages ) {
+ $OUT .= "* $msg\n";
+ }
+}}
+ },
+ { Queue => 0,
+ Name => "PasswordChange", # loc
+ Description =>
+ "Inform user that his password has been reset", # loc
+ Content => q{Subject: [{RT->Config->Get('rtname')}] Password reset
+
+Greetings,
+
+Someone at {$ENV{'REMOTE_ADDR'}} requested a password reset for you on {RT->Config->Get('WebURL')}
+
+Your new password is:
+ {$NewPassword}
+}
+ },
+
+ { Queue => '0',
+ Name => 'Email Digest', # loc
+ Description => 'Email template for periodic notification digests', # loc
+ Content => q[Subject: RT Email Digest
+
+{ $Argument }
+],
+ },
+
+{
+ Queue => 0,
+ Name => "Error: Missing dashboard", # loc
+ Description =>
+ "Inform user that a dashboard he subscribed to is missing", # loc
+ Content => q{Subject: [{RT->Config->Get('rtname')}] Missing dashboard!
+
+Greetings,
+
+You are subscribed to a dashboard that is currently missing. Most likely, the dashboard was deleted.
+
+RT will remove this subscription as it is no longer useful. Here's the information RT had about your subscription:
+
+DashboardID: { $SubscriptionObj->SubValue('DashboardId') }
+Frequency: { $SubscriptionObj->SubValue('Frequency') }
+Hour: { $SubscriptionObj->SubValue('Hour') }
+{
+ $SubscriptionObj->SubValue('Frequency') eq 'weekly'
+ ? "Day of week: " . $SubscriptionObj->SubValue('Dow')
+ : $SubscriptionObj->SubValue('Frequency') eq 'monthly'
+ ? "Day of month: " . $SubscriptionObj->SubValue('Dom')
+ : ''
+}
+}
+},
);
# }}}
@Scrips = (
- { ScripCondition => 'On Correspond',
+ { Description => 'On Correspond Open Tickets',
+ ScripCondition => 'On Correspond',
ScripAction => 'Open Tickets',
Template => 'Blank' },
- { ScripCondition => 'On Owner Change',
+ { Description => 'On Owner Change Notify Owner',
+ ScripCondition => 'On Owner Change',
ScripAction => 'Notify Owner',
Template => 'Transaction' },
- { ScripCondition => 'On Create',
+ { Description => 'On Create Autoreply To Requestors',
+ ScripCondition => 'On Create',
ScripAction => 'AutoReply To Requestors',
Template => 'AutoReply' },
- { ScripCondition => 'On Create',
+ { Description => 'On Create Notify AdminCcs',
+ ScripCondition => 'On Create',
ScripAction => 'Notify AdminCcs',
Template => 'Transaction' },
- { ScripCondition => 'On Correspond',
+ { Description => 'On Correspond Notify AdminCcs',
+ ScripCondition => 'On Correspond',
ScripAction => 'Notify AdminCcs',
Template => 'Admin Correspondence' },
- { ScripCondition => 'On Correspond',
+ { Description => 'On Correspond Notify Requestors and Ccs',
+ ScripCondition => 'On Correspond',
ScripAction => 'Notify Requestors And Ccs',
Template => 'Correspondence' },
- { ScripCondition => 'On Correspond',
+ { Description => 'On Correspond Notify Other Recipients',
+ ScripCondition => 'On Correspond',
ScripAction => 'Notify Other Recipients',
Template => 'Correspondence' },
- { ScripCondition => 'On Comment',
+ { Description => 'On Comment Notify AdminCcs as Comment',
+ ScripCondition => 'On Comment',
ScripAction => 'Notify AdminCcs As Comment',
Template => 'Admin Comment' },
- { ScripCondition => 'On Comment',
+ { Description => 'On Comment Notify Other Recipients as Comment',
+ ScripCondition => 'On Comment',
ScripAction => 'Notify Other Recipients As Comment',
Template => 'Correspondence' },
- { ScripCondition => 'On Resolve',
+ { Description => 'On Resolve Notify Requestors',
+ ScripCondition => 'On Resolve',
ScripAction => 'Notify Requestors',
Template => 'Resolved' },
- { Description => "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval", # loc
- Queue => '___Approvals',
- ScripCondition => 'User Defined',
- CustomIsApplicableCode => q[
- $self->TicketObj->Type eq 'approval' and
- $self->TransactionObj->Field eq 'Status' and
- $self->TransactionObj->NewValue eq 'open' and
- eval { $T::Approving = ($self->TicketObj->AllDependedOnBy( Type => 'ticket' ))[0] }
- ],
- ScripAction => 'Notify Owner',
- Template => 'New Pending Approval' },
- { Description => "If an approval is rejected, reject the original and delete pending approvals", # loc
- Queue => '___Approvals',
- ScripCondition => 'On Status Change',
- ScripAction => 'User Defined',
- CustomPrepareCode => q[
-# ------------------------------------------------------------------- #
-return(0) unless ( lc($self->TransactionObj->NewValue) eq "rejected" or
- lc($self->TransactionObj->NewValue) eq "deleted" );
-
-my $rejected = 0;
-my $links = $self->TicketObj->DependedOnBy;
-foreach my $link (@{ $links->ItemsArrayRef }) {
- my $obj = $link->BaseObj;
- if ($obj->QueueObj->IsActiveStatus($obj->Status)) {
- if ($obj->Type eq 'ticket') {
- $obj->Comment(
- Content => $self->loc("Your request was rejected."),
- );
- $obj->SetStatus(
- Status => 'rejected',
- Force => 1,
- );
-
- $T::Approval = $self->TicketObj; # so we can access it inside templates
- $self->{TicketObj} = $obj; # we want the original id in the token line
- $rejected = 1;
- }
- else {
- $obj->SetStatus(
- Status => 'deleted',
- Force => 1,
- );
- }
- }
-}
-
-$links = $self->TicketObj->DependsOn;
-foreach my $link (@{ $links->ItemsArrayRef }) {
- my $obj = $link->TargetObj;
- if ($obj->QueueObj->IsActiveStatus($obj->Status)) {
- $obj->SetStatus(
- Status => 'deleted',
- Force => 1,
- );
- }
-}
-
-# Now magically turn myself into a Requestor Notify object...
-require RT::Action::Notify; bless($self, 'RT::Action::Notify');
-$self->{Argument} = 'Requestor'; $self->Prepare;
-
-return $rejected;
-# ------------------------------------------------------------------- #
- ],
- CustomCommitCode => '"never needed"',
- Template => 'Approval Rejected', },
- { Description => "When a ticket has been approved by any approver, add correspondence to the original ticket", # loc
- Queue => '___Approvals',
- ScripCondition => 'On Resolve',
- ScripAction => 'User Defined',
- CustomPrepareCode => q[
-# ------------------------------------------------------------------- #
-return(0) unless ($self->TicketObj->Type eq 'approval');
-
-my $note;
-my $t = $self->TicketObj->Transactions;
-while (my $o = $t->Next) {
- $note .= $o->Content . "\n" if $o->ContentObj
- and $o->Content !~ /Default Approval/;
-}
-
-foreach my $obj ($self->TicketObj->AllDependedOnBy( Type => 'ticket' )) {
- $obj->Comment(
- Content => $self->loc( "Your request has been approved by [_1]. Other approvals may still be pending.", # loc
- $self->TransactionObj->CreatorObj->Name,
- ) . "\n" . $self->loc( "Approver's notes: [_1]", # loc
- $note
- ),
- );
- $T::Approval = $self->TicketObj; # so we can access it inside templates
- $self->{TicketObj} = $obj; # we want the original id in the token line
-}
-
-# Now magically turn myself into a Requestor Notify object...
-require RT::Action::Notify; bless($self, 'RT::Action::Notify');
-$self->{Argument} = 'Requestor'; $self->Prepare;
-
-return 1;
-# ------------------------------------------------------------------- #
- ],
- CustomCommitCode => '"never needed"',
- Template => 'Approval Passed' },
- { Description => "When a ticket has been approved by all approvers, add correspondence to the original ticket", # loc
- Queue => '___Approvals',
- ScripCondition => 'On Resolve',
- ScripAction => 'User Defined',
- CustomPrepareCode => q[
-# ------------------------------------------------------------------- #
-# Find all the tickets that depend on this (that this is approving)
-
-my $Ticket = $self->TicketObj;
-my @TOP = $Ticket->AllDependedOnBy( Type => 'ticket' );
-my $links = $Ticket->DependedOnBy;
-my $passed = 0;
-
-while (my $link = $links->Next) {
- my $obj = $link->BaseObj;
- next if ($obj->HasUnresolvedDependencies( Type => 'approval' ));
-
- if ($obj->Type eq 'ticket') {
- $obj->Comment(
- Content => $self->loc("Your request has been approved."),
- );
- $T::Approval = $Ticket; # so we can access it inside templates
- $self->{TicketObj} = $obj; # we want the original id in the token line
- $passed = 1;
- }
- elsif ($obj->Type eq 'approval') {
- $obj->SetStatus( Status => 'open', Force => 1 );
- }
- elsif ($RT::UseCodeTickets and $obj->Type eq 'code') {
- my $code = $obj->Transactions->First->Content;
- my $rv;
-
- foreach my $TOP (@TOP) {
- local $@;
- $rv++ if eval $code;
- $RT::Logger->error("Cannot eval code: $@") if $@;
- }
-
- if ($rv or !@TOP) {
- $obj->SetStatus( Status => 'resolved', Force => 1,);
- }
- else {
- $obj->SetStatus( Status => 'rejected', Force => 1,);
- }
- }
-}
-
-# Now magically turn myself into a Requestor Notify object...
-require RT::Action::Notify; bless($self, 'RT::Action::Notify');
-$self->{Argument} = 'Requestor'; $self->Prepare;
-
-return 0; # ignore $passed;
-# ------------------------------------------------------------------- #
- ],
- CustomCommitCode => '"never needed"',
- Template => 'All Approvals Passed', },
-
+ { Description => "On transaction, add any tags in the transaction's subject to the ticket's subject",
+ ScripCondition => 'On Transaction',
+ ScripAction => 'Extract Subject Tag',
+ Template => 'Blank' },
);
@ACL = (
- { UserId => 'Nobody', # - principalId
- Right => 'OwnTicket', },
-
{ UserId => 'root', # - principalid
Right => 'SuperUser', },
+ { GroupDomain => 'SystemInternal',
+ GroupType => 'privileged',
+ Right => 'ShowApprovalsTab', },
+
);
# Predefined searches
@@ -592,34 +552,53 @@ return 0; # ignore $passed;
{ Name => 'Search - My Tickets',
Description => '[_1] highest priority tickets I own', # loc
Content =>
- { Format => "'<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', Priority, QueueName, ExtendedStatus",
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
+ . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
+ . q{Priority, QueueName, ExtendedStatus},
Query => " Owner = '__CurrentUser__' AND ( Status = 'new' OR Status = 'open')",
OrderBy => 'Priority',
- Order => 'DESC' },
+ Order => 'DESC'
+ },
},
{ Name => 'Search - Unowned Tickets',
Description => '[_1] newest unowned tickets', # loc
Content =>
# 'Take' #loc
- { Format => "'<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', QueueName, ExtendedStatus, CreatedRelative, '<A HREF=\"__WebPath__/Ticket/Display.html?Action=Take&id=__id__\">__loc(Take)__</a>/TITLE:&nbsp;' ",
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
+ . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
+ . q{QueueName, ExtendedStatus, CreatedRelative, }
+ . q{'<A HREF="__WebPath__/Ticket/Display.html?Action=Take&id=__id__">__loc(Take)__</a>/TITLE:NBSP'},
Query => " Owner = 'Nobody' AND ( Status = 'new' OR Status = 'open')",
OrderBy => 'Created',
+ Order => 'DESC'
+ },
+ },
+ { Name => 'Search - Bookmarked Tickets',
+ Description => 'Bookmarked Tickets', #loc
+ Content =>
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
+ . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
+ . q{Priority, QueueName, ExtendedStatus, Bookmark},
+ Query => "id = '__Bookmarked__'",
+ OrderBy => 'LastUpdated',
Order => 'DESC' },
},
{ Name => 'HomepageSettings',
Description => 'HomepageSettings',
Content =>
{ 'body' => # loc
- [ { type => 'system', name => 'My Tickets' },
- { type => 'system', name => 'Unowned Tickets' },
- { type => 'component', name => 'QuickCreate'},
- ],
+ [ { 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 => 'MyReminders' },
{ type => 'component', name => 'Quicksearch' },
- { type => 'component', name => 'RefreshHomepage' },
- ]
+ { type => 'component', name => 'Dashboards' },
+ { type => 'component', name => 'RefreshHomepage' },
+ ],
+ },
},
-}
);
diff --git a/rt/etc/schema.Oracle b/rt/etc/schema.Oracle
index 77efefa..693e75a 100644
--- a/rt/etc/schema.Oracle
+++ b/rt/etc/schema.Oracle
@@ -182,6 +182,7 @@ CREATE TABLE CachedGroupMembers (
);
CREATE INDEX DisGrouMem ON CachedGroupMembers (GroupId, MemberId, Disabled);
CREATE INDEX GrouMem ON CachedGroupMembers (GroupId, MemberId);
+CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
CREATE SEQUENCE USERS_seq;
@@ -341,7 +342,7 @@ CREATE TABLE CustomFields (
Name VARCHAR2(200),
Type VARCHAR2(200),
MaxValues NUMBER(11,0) DEFAULT 0 NOT NULL,
- Pattern VARCHAR2(255),
+ Pattern CLOB,
Repeated NUMBER(11,0) DEFAULT 0 NOT NULL,
Description VARCHAR2(255),
SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL,
diff --git a/rt/etc/schema.Pg b/rt/etc/schema.Pg
index 2d45a94..48525c8 100755
--- a/rt/etc/schema.Pg
+++ b/rt/etc/schema.Pg
@@ -283,6 +283,8 @@ CREATE TABLE GroupMembers (
);
+CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers(GroupId, MemberId);
+
-- }}}
-- {{{ GroupMembersCache
@@ -364,7 +366,6 @@ CREATE TABLE Users (
CREATE UNIQUE INDEX Users1 ON Users (Name) ;
-CREATE INDEX Users2 ON Users (Name);
CREATE INDEX Users3 ON Users (id, EmailAddress);
CREATE INDEX Users4 ON Users (EmailAddress);
@@ -528,7 +529,7 @@ CREATE TABLE CustomFields (
Type varchar(200) NULL ,
MaxValues integer NOT NULL DEFAULT 0 ,
Repeated integer NOT NULL DEFAULT 0 ,
- Pattern varchar(255) NULL ,
+ Pattern varchar(65536) NULL ,
LookupType varchar(255) NOT NULL ,
Description varchar(255) NULL ,
SortOrder integer NOT NULL DEFAULT 0 ,
diff --git a/rt/etc/schema.SQLite b/rt/etc/schema.SQLite
index 8791bb4..ce75ccc 100644
--- a/rt/etc/schema.SQLite
+++ b/rt/etc/schema.SQLite
@@ -367,7 +367,7 @@ CREATE TABLE CustomFields (
Name varchar(200) NULL ,
Type varchar(200) NULL , # Changed -- 'Single' and 'Multiple' is moved out
MaxValues integer, # New -- was 'Single'(1) and 'Multiple'(0)
- Pattern varchar(255) NULL , # New -- Must validate against this
+ Pattern varchar(65536) NULL , # New -- Must validate against this
Repeated int2 NOT NULL DEFAULT 0 , # New -- repeated table entry
Description varchar(255) NULL ,
SortOrder integer NOT NULL DEFAULT 0 ,
diff --git a/rt/etc/schema.mysql-4.0 b/rt/etc/schema.mysql-4.0
new file mode 100755
index 0000000..c4299d4
--- /dev/null
+++ b/rt/etc/schema.mysql-4.0
@@ -0,0 +1,464 @@
+# {{{ Attachments
+
+CREATE TABLE Attachments (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ TransactionId integer NOT NULL ,
+ Parent integer NOT NULL DEFAULT 0 ,
+ MessageId varchar(160) NULL ,
+ Subject varchar(255) NULL ,
+ Filename varchar(255) NULL ,
+ ContentType varchar(80) NULL ,
+ ContentEncoding varchar(80) NULL ,
+ Content LONGTEXT NULL ,
+ Headers LONGTEXT NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX Attachments2 ON Attachments (TransactionId) ;
+CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId) ;
+# }}}
+
+# {{{ Queues
+CREATE TABLE Queues (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NOT NULL ,
+ Description varchar(255) NULL ,
+ CorrespondAddress varchar(120) NULL ,
+ CommentAddress varchar(120) NULL ,
+ InitialPriority integer NOT NULL DEFAULT 0 ,
+ FinalPriority integer NOT NULL DEFAULT 0 ,
+ DefaultDueIn integer NOT NULL DEFAULT 0 ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+CREATE UNIQUE INDEX Queues1 ON Queues (Name) ;
+CREATE INDEX Queues2 ON Queues (Disabled) ;
+
+# }}}
+
+# {{{ Links
+
+CREATE TABLE Links (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Base varchar(240) NULL ,
+ Target varchar(240) NULL ,
+ Type varchar(20) NOT NULL ,
+ LocalTarget integer NOT NULL DEFAULT 0 ,
+ LocalBase integer NOT NULL DEFAULT 0 ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX Links2 ON Links (Base, Type) ;
+CREATE INDEX Links3 ON Links (Target, Type) ;
+CREATE INDEX Links4 ON Links (Type,LocalBase);
+
+# }}}
+
+# {{{ Principals
+
+CREATE TABLE Principals (
+ id INTEGER AUTO_INCREMENT not null,
+ PrincipalType VARCHAR(16) not null,
+ ObjectId integer, # foreign key to Users or Groups, depending
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX Principals2 ON Principals (ObjectId);
+
+# }}}
+
+# {{{ Groups
+
+CREATE TABLE Groups (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ Domain varchar(64),
+ Type varchar(64),
+ Instance integer,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX Groups1 ON Groups (Domain,Instance,Type,id);
+CREATE INDEX Groups2 On Groups (Type, Instance);
+
+# }}}
+
+# {{{ ScripConditions
+
+CREATE TABLE ScripConditions (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ ExecModule varchar(60) NULL ,
+ Argument varchar(255) NULL ,
+ ApplicableTransTypes varchar(60) NULL ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+# }}}
+
+# {{{ Transactions
+CREATE TABLE Transactions (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ ObjectType varchar(64) NOT NULL,
+ ObjectId integer NOT NULL DEFAULT 0 ,
+ TimeTaken integer NOT NULL DEFAULT 0 ,
+ Type varchar(20) NULL ,
+ Field varchar(40) NULL ,
+ OldValue varchar(255) NULL ,
+ NewValue varchar(255) NULL ,
+ ReferenceType varchar(255) NULL,
+ OldReference integer NULL ,
+ NewReference integer NULL ,
+ Data varchar(255) NULL ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId);
+
+# }}}
+
+# {{{ Scrips
+
+CREATE TABLE Scrips (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Description varchar(255),
+ ScripCondition integer NOT NULL DEFAULT 0 ,
+ ScripAction integer NOT NULL DEFAULT 0 ,
+ ConditionRules text NULL ,
+ ActionRules text NULL ,
+ CustomIsApplicableCode text NULL ,
+ CustomPrepareCode text NULL ,
+ CustomCommitCode text NULL ,
+ Stage varchar(32) NULL ,
+ Queue integer NOT NULL DEFAULT 0 ,
+ Template integer NOT NULL DEFAULT 0 ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+# }}}
+
+# {{{ ACL
+CREATE TABLE ACL (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ PrincipalType varchar(25) NOT NULL, #"User" "Group", "Owner", "Cc" "AdminCc", "Requestor", "Requestor"
+
+ PrincipalId integer NOT NULL , #Foreign key to principals
+ RightName varchar(25) NOT NULL ,
+ ObjectType varchar(25) NOT NULL ,
+ ObjectId integer NOT NULL default 0,
+ DelegatedBy integer NOT NULL default 0, #foreign key to principals with a userid
+ DelegatedFrom integer NOT NULL default 0, #foreign key to ACL
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX ACL1 on ACL(RightName, ObjectType, ObjectId,PrincipalType,PrincipalId);
+
+# }}}
+
+# {{{ GroupMembers
+
+CREATE TABLE GroupMembers (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ GroupId integer NOT NULL DEFAULT 0,
+ MemberId integer NOT NULL DEFAULT 0, #Foreign key to Principals
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+CREATE UNIQUE INDEX GroupMembers1 on GroupMembers (GroupId, MemberId);
+
+
+# }}}
+
+# {{{ GroupMembersCache
+
+create table CachedGroupMembers (
+ id int auto_increment,
+ GroupId int, # foreign key to Principals
+ MemberId int, # foreign key to Principals
+ Via int, #foreign key to CachedGroupMembers. (may point to $self->id)
+ ImmediateParentId int, #foreign key to prinicpals.
+ # this points to the group that the member is
+ # a member of, for ease of deletes.
+ Disabled int2 NOT NULL DEFAULT 0 , # if this cached group member is a member of this group by way of a disabled
+ # group or this group is disabled, this will be set to 1
+ # this allows us to not find members of disabled subgroups when listing off
+ # group members recursively.
+ # Also, this allows us to have the ACL system elide members of disabled groups
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX DisGrouMem on CachedGroupMembers (GroupId,MemberId,Disabled);
+CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
+
+# }}}
+
+# {{{ Users
+
+CREATE TABLE Users (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NOT NULL ,
+ Password varchar(40) NULL ,
+ Comments blob NULL ,
+ Signature blob NULL ,
+ EmailAddress varchar(120) NULL ,
+ FreeformContactInfo blob NULL ,
+ Organization varchar(200) NULL ,
+ RealName varchar(120) NULL ,
+ NickName varchar(16) NULL ,
+ Lang varchar(16) NULL ,
+ EmailEncoding varchar(16) NULL ,
+ WebEncoding varchar(16) NULL ,
+ ExternalContactInfoId varchar(100) NULL ,
+ ContactInfoSystem varchar(30) NULL ,
+ ExternalAuthId varchar(100) NULL ,
+ AuthSystem varchar(30) NULL ,
+ Gecos varchar(16) NULL ,
+ HomePhone varchar(30) NULL ,
+ WorkPhone varchar(30) NULL ,
+ MobilePhone varchar(30) NULL ,
+ PagerPhone varchar(30) NULL ,
+ Address1 varchar(200) NULL ,
+ Address2 varchar(200) NULL ,
+ City varchar(100) NULL ,
+ State varchar(100) NULL ,
+ Zip varchar(16) NULL ,
+ Country varchar(50) NULL ,
+ Timezone varchar(50) NULL ,
+ PGPKey text NULL,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+
+CREATE UNIQUE INDEX Users1 ON Users (Name) ;
+CREATE INDEX Users4 ON Users (EmailAddress);
+
+
+# }}}
+
+# {{{ Tickets
+
+CREATE TABLE Tickets (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ EffectiveId integer NOT NULL DEFAULT 0 ,
+ Queue integer NOT NULL DEFAULT 0 ,
+ Type varchar(16) NULL ,
+ IssueStatement integer NOT NULL DEFAULT 0 ,
+ Resolution integer NOT NULL DEFAULT 0 ,
+ Owner integer NOT NULL DEFAULT 0 ,
+ Subject varchar(200) NULL DEFAULT '[no subject]' ,
+ InitialPriority integer NOT NULL DEFAULT 0 ,
+ FinalPriority integer NOT NULL DEFAULT 0 ,
+ Priority integer NOT NULL DEFAULT 0 ,
+ TimeEstimated integer NOT NULL DEFAULT 0 ,
+ TimeWorked integer NOT NULL DEFAULT 0 ,
+ Status varchar(10) NULL ,
+ TimeLeft integer NOT NULL DEFAULT 0 ,
+ Told DATETIME NULL ,
+ Starts DATETIME NULL ,
+ Started DATETIME NULL ,
+ Due DATETIME NULL ,
+ Resolved DATETIME NULL ,
+
+
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX Tickets1 ON Tickets (Queue, Status) ;
+CREATE INDEX Tickets2 ON Tickets (Owner) ;
+CREATE INDEX Tickets6 ON Tickets (EffectiveId, Type) ;
+
+# }}}
+
+# {{{ ScripActions
+
+CREATE TABLE ScripActions (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ ExecModule varchar(60) NULL ,
+ Argument varchar(255) NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+# }}}
+
+# {{{ Templates
+
+CREATE TABLE Templates (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Queue integer NOT NULL DEFAULT 0 ,
+ Name varchar(200) NOT NULL ,
+ Description varchar(255) NULL ,
+ Type varchar(16) NULL ,
+ Language varchar(16) NULL ,
+ TranslationOf integer NOT NULL DEFAULT 0 ,
+ Content blob NULL ,
+ LastUpdated DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+# }}}
+
+# {{{ ObjectCustomFieldValues
+
+CREATE TABLE ObjectCustomFieldValues (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField int NOT NULL ,
+ ObjectType varchar(255) NOT NULL, # Final target of the Object
+ ObjectId int NOT NULL , # New -- Replaces Ticket
+ SortOrder integer NOT NULL DEFAULT 0 , # New -- ordering for multiple values
+
+ Content varchar(255) NULL ,
+ LargeContent LONGTEXT NULL, # New -- to hold 255+ strings
+ ContentType varchar(80) NULL, # New -- only text/* gets searched
+ ContentEncoding varchar(80) NULL , # New -- for binary Content
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 , # New -- whether the value was current
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX ObjectCustomFieldValues1 ON ObjectCustomFieldValues (Content);
+CREATE INDEX ObjectCustomFieldValues2 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId);
+
+# }}}
+
+# {{{ CustomFields
+
+CREATE TABLE CustomFields (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Type varchar(200) NULL , # Changed -- 'Single' and 'Multiple' is moved out
+ MaxValues integer, # New -- was 'Single'(1) and 'Multiple'(0)
+ Pattern TEXT NULL , # New -- Must validate against this
+ Repeated int2 NOT NULL DEFAULT 0 , # New -- repeated table entry
+ Description varchar(255) NULL ,
+ SortOrder integer NOT NULL DEFAULT 0 ,
+ LookupType varchar(255) NOT NULL,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+# }}}
+
+# {{{ ObjectCustomFields
+
+CREATE TABLE ObjectCustomFields (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField int NOT NULL ,
+ ObjectId integer NOT NULL,
+ SortOrder integer NOT NULL DEFAULT 0 ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+# }}}
+
+# {{{ CustomFieldValues
+
+CREATE TABLE CustomFieldValues (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField int NOT NULL ,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ SortOrder integer NOT NULL DEFAULT 0 ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField);
+
+# }}}
+
+
+# {{{ Attributes
+
+CREATE TABLE Attributes (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(255) NULL ,
+ Description varchar(255) NULL ,
+ Content text,
+ ContentType varchar(16),
+ ObjectType varchar(64),
+ ObjectId integer, # foreign key to anything
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB;
+
+CREATE INDEX Attributes1 on Attributes(Name);
+CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
+
+# }}}
+
+# {{{ Sessions
+
+# sessions is used by Apache::Session to keep sessions in the database.
+# We should have a reaper script somewhere.
+
+CREATE TABLE sessions (
+ id char(32) NOT NULL,
+ a_session LONGTEXT,
+ LastUpdated TIMESTAMP,
+ PRIMARY KEY (id)
+);
+
+# }}}
diff --git a/rt/etc/schema.mysql-4.1 b/rt/etc/schema.mysql-4.1
new file mode 100755
index 0000000..172e477
--- /dev/null
+++ b/rt/etc/schema.mysql-4.1
@@ -0,0 +1,466 @@
+# {{{ Attachments
+
+CREATE TABLE Attachments (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ TransactionId integer NOT NULL ,
+ Parent integer NOT NULL DEFAULT 0 ,
+ MessageId varchar(160) CHARACTER SET ascii NULL ,
+ Subject varchar(255) NULL ,
+ Filename varchar(255) NULL ,
+ ContentType varchar(80) CHARACTER SET ascii NULL ,
+ ContentEncoding varchar(80) CHARACTER SET ascii NULL ,
+ Content LONGBLOB NULL ,
+ Headers LONGTEXT NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX Attachments2 ON Attachments (TransactionId) ;
+CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId) ;
+# }}}
+
+# {{{ Queues
+CREATE TABLE Queues (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NOT NULL ,
+ Description varchar(255) NULL ,
+ CorrespondAddress varchar(120) CHARACTER SET ascii NULL,
+ CommentAddress varchar(120) CHARACTER SET ascii NULL,
+ InitialPriority integer NOT NULL DEFAULT 0 ,
+ FinalPriority integer NOT NULL DEFAULT 0 ,
+ DefaultDueIn integer NOT NULL DEFAULT 0 ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE UNIQUE INDEX Queues1 ON Queues (Name) ;
+CREATE INDEX Queues2 ON Queues (Disabled) ;
+
+# }}}
+
+# {{{ Links
+
+CREATE TABLE Links (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Base varchar(240) NULL,
+ Target varchar(240) NULL,
+ Type varchar(20) NOT NULL,
+ LocalTarget integer NOT NULL DEFAULT 0 ,
+ LocalBase integer NOT NULL DEFAULT 0 ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET ascii;
+
+CREATE INDEX Links2 ON Links (Base, Type) ;
+CREATE INDEX Links3 ON Links (Target, Type) ;
+CREATE INDEX Links4 ON Links (Type,LocalBase);
+
+# }}}
+
+# {{{ Principals
+
+CREATE TABLE Principals (
+ id INTEGER AUTO_INCREMENT not null,
+ PrincipalType VARCHAR(16) not null,
+ ObjectId integer, # foreign key to Users or Groups, depending
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET ascii;
+
+CREATE INDEX Principals2 ON Principals (ObjectId);
+
+# }}}
+
+# {{{ Groups
+
+CREATE TABLE Groups (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ Domain varchar(64) CHARACTER SET ascii NULL,
+ Type varchar(64) CHARACTER SET ascii NULL,
+ Instance integer,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX Groups1 ON Groups (Domain,Instance,Type,id);
+CREATE INDEX Groups2 On Groups (Type, Instance);
+
+# }}}
+
+# {{{ ScripConditions
+
+CREATE TABLE ScripConditions (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ ExecModule varchar(60) CHARACTER SET ascii NULL,
+ Argument VARBINARY(255) NULL ,
+ ApplicableTransTypes varchar(60) CHARACTER SET ascii NULL ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+# }}}
+
+# {{{ Transactions
+CREATE TABLE Transactions (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ ObjectType varchar(64) CHARACTER SET ascii NOT NULL,
+ ObjectId integer NOT NULL DEFAULT 0 ,
+ TimeTaken integer NOT NULL DEFAULT 0 ,
+ Type varchar(20) CHARACTER SET ascii NULL,
+ Field varchar(40) CHARACTER SET ascii NULL,
+ OldValue varchar(255) NULL ,
+ NewValue varchar(255) NULL ,
+ ReferenceType varchar(255) CHARACTER SET ascii NULL,
+ OldReference integer NULL ,
+ NewReference integer NULL ,
+ Data varchar(255) NULL ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId);
+
+# }}}
+
+# {{{ Scrips
+
+CREATE TABLE Scrips (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Description varchar(255),
+ ScripCondition integer NOT NULL DEFAULT 0 ,
+ ScripAction integer NOT NULL DEFAULT 0 ,
+ ConditionRules text NULL ,
+ ActionRules text NULL ,
+ CustomIsApplicableCode text NULL ,
+ CustomPrepareCode text NULL ,
+ CustomCommitCode text NULL ,
+ Stage varchar(32) CHARACTER SET ascii NULL ,
+ Queue integer NOT NULL DEFAULT 0 ,
+ Template integer NOT NULL DEFAULT 0 ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+# }}}
+
+# {{{ ACL
+CREATE TABLE ACL (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ PrincipalType varchar(25) CHARACTER SET ascii NOT NULL, #"User" "Group", "Owner", "Cc" "AdminCc", "Requestor"
+
+ PrincipalId integer NOT NULL , #Foreign key to principals
+ RightName varchar(25) CHARACTER SET ascii NOT NULL,
+ ObjectType varchar(25) CHARACTER SET ascii NOT NULL,
+ ObjectId integer NOT NULL default 0,
+ DelegatedBy integer NOT NULL default 0, #foreign key to principals with a userid
+ DelegatedFrom integer NOT NULL default 0, #foreign key to ACL
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX ACL1 on ACL(RightName, ObjectType, ObjectId,PrincipalType,PrincipalId);
+
+# }}}
+
+# {{{ GroupMembers
+
+CREATE TABLE GroupMembers (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ GroupId integer NOT NULL DEFAULT 0,
+ MemberId integer NOT NULL DEFAULT 0, #Foreign key to Principals
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+CREATE UNIQUE INDEX GroupMembers1 on GroupMembers (GroupId, MemberId);
+
+
+# }}}
+
+# {{{ GroupMembersCache
+
+create table CachedGroupMembers (
+ id int auto_increment,
+ GroupId int, # foreign key to Principals
+ MemberId int, # foreign key to Principals
+ Via int, #foreign key to CachedGroupMembers. (may point to $self->id)
+ ImmediateParentId int, #foreign key to prinicpals.
+ # this points to the group that the member is
+ # a member of, for ease of deletes.
+ Disabled int2 NOT NULL DEFAULT 0 , # if this cached group member is a member of this group by way of a disabled
+ # group or this group is disabled, this will be set to 1
+ # this allows us to not find members of disabled subgroups when listing off
+ # group members recursively.
+ # Also, this allows us to have the ACL system elide members of disabled groups
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX DisGrouMem on CachedGroupMembers (GroupId,MemberId,Disabled);
+CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
+
+# }}}
+
+# {{{ Users
+
+CREATE TABLE Users (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NOT NULL ,
+ Password VARBINARY(40) NULL ,
+ Comments TEXT NULL ,
+ Signature TEXT NULL ,
+ EmailAddress varchar(120) NULL ,
+ FreeformContactInfo TEXT NULL ,
+ Organization varchar(200) NULL ,
+ RealName varchar(120) NULL ,
+ NickName varchar(16) NULL ,
+ Lang varchar(16) NULL ,
+ EmailEncoding varchar(16) NULL ,
+ WebEncoding varchar(16) NULL ,
+ ExternalContactInfoId varchar(100) NULL ,
+ ContactInfoSystem varchar(30) NULL ,
+ ExternalAuthId varchar(100) NULL ,
+ AuthSystem varchar(30) NULL ,
+ Gecos varchar(16) NULL ,
+ HomePhone varchar(30) NULL ,
+ WorkPhone varchar(30) NULL ,
+ MobilePhone varchar(30) NULL ,
+ PagerPhone varchar(30) NULL ,
+ Address1 varchar(200) NULL ,
+ Address2 varchar(200) NULL ,
+ City varchar(100) NULL ,
+ State varchar(100) NULL ,
+ Zip varchar(16) NULL ,
+ Country varchar(50) NULL ,
+ Timezone varchar(50) NULL ,
+ PGPKey text NULL,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+
+CREATE UNIQUE INDEX Users1 ON Users (Name) ;
+CREATE INDEX Users4 ON Users (EmailAddress);
+
+
+# }}}
+
+# {{{ Tickets
+
+CREATE TABLE Tickets (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ EffectiveId integer NOT NULL DEFAULT 0 ,
+ Queue integer NOT NULL DEFAULT 0 ,
+ Type varchar(16) CHARACTER SET ascii NULL ,
+ IssueStatement integer NOT NULL DEFAULT 0 ,
+ Resolution integer NOT NULL DEFAULT 0 ,
+ Owner integer NOT NULL DEFAULT 0 ,
+ Subject varchar(200) NULL DEFAULT '[no subject]' ,
+ InitialPriority integer NOT NULL DEFAULT 0 ,
+ FinalPriority integer NOT NULL DEFAULT 0 ,
+ Priority integer NOT NULL DEFAULT 0 ,
+ TimeEstimated integer NOT NULL DEFAULT 0 ,
+ TimeWorked integer NOT NULL DEFAULT 0 ,
+ Status varchar(10) NULL ,
+ TimeLeft integer NOT NULL DEFAULT 0 ,
+ Told DATETIME NULL ,
+ Starts DATETIME NULL ,
+ Started DATETIME NULL ,
+ Due DATETIME NULL ,
+ Resolved DATETIME NULL ,
+
+
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX Tickets1 ON Tickets (Queue, Status) ;
+CREATE INDEX Tickets2 ON Tickets (Owner) ;
+CREATE INDEX Tickets6 ON Tickets (EffectiveId, Type) ;
+
+# }}}
+
+# {{{ ScripActions
+
+CREATE TABLE ScripActions (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ ExecModule varchar(60) CHARACTER SET ascii NULL,
+ Argument VARBINARY(255) NULL ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+# }}}
+
+# {{{ Templates
+
+CREATE TABLE Templates (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Queue integer NOT NULL DEFAULT 0 ,
+ Name varchar(200) NOT NULL ,
+ Description varchar(255) NULL ,
+ Type varchar(16) CHARACTER SET ascii NULL ,
+ Language varchar(16) CHARACTER SET ascii NULL ,
+ TranslationOf integer NOT NULL DEFAULT 0 ,
+ Content TEXT NULL ,
+ LastUpdated DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+# }}}
+
+# {{{ ObjectCustomFieldValues
+
+CREATE TABLE ObjectCustomFieldValues (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField int NOT NULL ,
+ ObjectType varchar(255) CHARACTER SET ascii NOT NULL, # Final target of the Object
+ ObjectId int NOT NULL , # New -- Replaces Ticket
+ SortOrder integer NOT NULL DEFAULT 0 , # New -- ordering for multiple values
+
+ Content varchar(255) NULL ,
+ LargeContent LONGBLOB NULL, # New -- to hold 255+ strings
+ ContentType varchar(80) CHARACTER SET ascii NULL, # New -- only text/* gets searched
+ ContentEncoding varchar(80) CHARACTER SET ascii NULL , # New -- for binary Content
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 , # New -- whether the value was current
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX ObjectCustomFieldValues1 ON ObjectCustomFieldValues (Content);
+CREATE INDEX ObjectCustomFieldValues2 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId);
+
+# }}}
+
+# {{{ CustomFields
+
+CREATE TABLE CustomFields (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Type varchar(200) CHARACTER SET ascii NULL , # Changed -- 'Single' and 'Multiple' is moved out
+ MaxValues integer, # New -- was 'Single'(1) and 'Multiple'(0)
+ Pattern TEXT NULL , # New -- Must validate against this
+ Repeated int2 NOT NULL DEFAULT 0 , # New -- repeated table entry
+ Description varchar(255) NULL ,
+ SortOrder integer NOT NULL DEFAULT 0 ,
+ LookupType varchar(255) CHARACTER SET ascii NOT NULL,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ Disabled int2 NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+# }}}
+
+# {{{ ObjectCustomFields
+
+CREATE TABLE ObjectCustomFields (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField integer NOT NULL ,
+ ObjectId integer NOT NULL,
+ SortOrder integer NOT NULL DEFAULT 0 ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+# }}}
+
+# {{{ CustomFieldValues
+
+CREATE TABLE CustomFieldValues (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField int NOT NULL ,
+ Name varchar(200) NULL ,
+ Description varchar(255) NULL ,
+ SortOrder integer NOT NULL DEFAULT 0 ,
+
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField);
+
+# }}}
+
+
+# {{{ Attributes
+
+CREATE TABLE Attributes (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(255) NULL ,
+ Description varchar(255) NULL ,
+ Content BLOB,
+ ContentType varchar(16) CHARACTER SET ascii,
+ ObjectType varchar(64) CHARACTER SET ascii,
+ ObjectId integer, # foreign key to anything
+ Creator integer NOT NULL DEFAULT 0 ,
+ Created DATETIME NULL ,
+ LastUpdatedBy integer NOT NULL DEFAULT 0 ,
+ LastUpdated DATETIME NULL ,
+ PRIMARY KEY (id)
+) TYPE=InnoDB CHARACTER SET utf8;
+
+CREATE INDEX Attributes1 on Attributes(Name);
+CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
+
+# }}}
+
+# {{{ Sessions
+
+# sessions is used by Apache::Session to keep sessions in the database.
+# We should have a reaper script somewhere.
+
+CREATE TABLE sessions (
+ id char(32) NOT NULL,
+ a_session LONGBLOB,
+ LastUpdated TIMESTAMP,
+ PRIMARY KEY (id)
+);
+
+# }}}
diff --git a/rt/etc/upgrade/3.1.0/acl.Pg b/rt/etc/upgrade/3.1.0/acl.Pg
index 809e99a..9c88782 100755
--- a/rt/etc/upgrade/3.1.0/acl.Pg
+++ b/rt/etc/upgrade/3.1.0/acl.Pg
@@ -11,7 +11,7 @@ sub acl {
foreach my $table (@tables) {
push @acls,
"GRANT SELECT, INSERT, UPDATE, DELETE ON $table to "
- . $RT::DatabaseUser . ";";
+ . RT->Config->Get('DatabaseUser') . ";";
}
return (@acls);
diff --git a/rt/etc/upgrade/3.3.0/acl.Pg b/rt/etc/upgrade/3.3.0/acl.Pg
index 2069a19..bd2e36c 100644
--- a/rt/etc/upgrade/3.3.0/acl.Pg
+++ b/rt/etc/upgrade/3.3.0/acl.Pg
@@ -12,7 +12,7 @@ sub acl {
foreach my $table (@tables) {
push @acls,
"GRANT SELECT, INSERT, UPDATE, DELETE ON $table to "
- . $RT::DatabaseUser . ";";
+ . RT->Config->Get('DatabaseUser') . ";";
}
return (@acls);
diff --git a/rt/etc/upgrade/3.5.1/content b/rt/etc/upgrade/3.5.1/content
index e3898a7..02d6a0c 100644
--- a/rt/etc/upgrade/3.5.1/content
+++ b/rt/etc/upgrade/3.5.1/content
@@ -2,7 +2,7 @@
{ Name => 'Search - My Tickets',
Description => '[_1] highest priority tickets I own',
Content =>
- { Format => "'<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', Priority, QueueName, ExtendedStatus",
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#', '<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject', Priority, QueueName, ExtendedStatus},
Query => " Owner = '__CurrentUser__' AND ( Status = 'new' OR Status = 'open')",
OrderBy => 'Priority',
Order => 'DESC' },
diff --git a/rt/etc/upgrade/3.7.1/content b/rt/etc/upgrade/3.7.1/content
new file mode 100644
index 0000000..fdd5061
--- /dev/null
+++ b/rt/etc/upgrade/3.7.1/content
@@ -0,0 +1,14 @@
+@ScripConditions = (
+ { Name => 'On Close', # loc
+ Description => 'Whenever a ticket is closed', # loc
+ ApplicableTransTypes => 'Status,Set',
+ ExecModule => 'CloseTicket',
+ },
+ { Name => 'On Reopen', # loc
+ Description => 'Whenever a ticket is reopened', # loc
+ ApplicableTransTypes => 'Status,Set',
+ ExecModule => 'ReopenTicket',
+ },
+);
+
+
diff --git a/rt/etc/upgrade/3.7.10/content b/rt/etc/upgrade/3.7.10/content
new file mode 100644
index 0000000..d19f9e6
--- /dev/null
+++ b/rt/etc/upgrade/3.7.10/content
@@ -0,0 +1,49 @@
+
+@Templates = (
+ { Queue => 0,
+ Name => "Error: public key", # loc
+ Description =>
+ "Inform user that he has problems with public key and couldn't recieve encrypted content", # loc
+ Content => q{Subject: We have no your public key or it's wrong
+
+You received this message as we have no your public PGP key or we have a problem with your key. Inform the administrator about the problem.
+}
+ },
+ { Queue => 0,
+ Name => "Error to RT owner: public key", # loc
+ Description =>
+ "Inform RT owner that user(s) have problems with public keys", # loc
+ Content => q{Subject: Some users have problems with public keys
+
+You received this message as RT has problems with public keys of the following user:
+{
+ foreach my $e ( @BadRecipients ) {
+ $OUT .= "* ". $e->{'Message'} ."\n";
+ }
+}}
+ },
+ { Queue => 0,
+ Name => "Error: no private key", # loc
+ Description =>
+ "Inform user that we received an encrypted email and we have no private keys to decrypt", # loc
+ Content => q{Subject: we received message we cannot decrypt
+
+You sent an encrypted message with subject '{ $Message->head->get('Subject') }',
+but we have no private key it's encrypted to.
+
+Please, check that you encrypt messages with correct keys
+or contact the system administrator.}
+ },
+ { Queue => 0,
+ Name => "Error: bad GnuPG data", # loc
+ Description =>
+ "Inform user that a message he sent has invalid GnuPG data", # loc
+ Content => q{Subject: We received a message we cannot handle
+
+You sent us a message that we cannot handle due to corrupted GnuPG signature or encrypted block. we get the following error(s):
+{ foreach my $msg ( @Messages ) {
+ $OUT .= "* $msg\n";
+ }
+}}
+ },
+);
diff --git a/rt/etc/upgrade/3.7.15/content b/rt/etc/upgrade/3.7.15/content
new file mode 100644
index 0000000..9d97c35
--- /dev/null
+++ b/rt/etc/upgrade/3.7.15/content
@@ -0,0 +1,12 @@
+
+@Templates = (
+ { Queue => 0,
+ Name => "Forward", # loc
+ Description => "Heading of a forwarded message", # loc
+ Content => q{
+
+This is forward of transaction #{ $Transaction->id } of a ticket #{ $Ticket->id }
+}
+ },
+);
+
diff --git a/rt/etc/upgrade/3.7.19/content b/rt/etc/upgrade/3.7.19/content
new file mode 100644
index 0000000..ac34ebe
--- /dev/null
+++ b/rt/etc/upgrade/3.7.19/content
@@ -0,0 +1,37 @@
+
+{ use strict;
+add_description_to_all_scrips();
+
+sub add_description_to_all_scrips {
+ require RT::Scrips;
+ my $scrips = RT::Scrips->new( $RT::SystemUser );
+ $scrips->Limit( FIELD => 'Description', OPERATOR => 'IS', VALUE => 'NULL' );
+ $scrips->Limit( FIELD => 'Description', VALUE => '' );
+ while ( my $scrip = $scrips->Next ) {
+ my $desc = $scrip->Description;
+ next if defined $desc && length $desc;
+
+ $desc = gen_scrip_description( $scrip );
+
+ my ($status, $msg) = $scrip->SetDescription( $desc );
+ unless ( $status ) {
+ print STDERR "Couldn't set description of a scrip: $msg";
+ } else {
+ print "Added description to scrip #". $scrip->id ."\n";
+ }
+ }
+}
+
+sub gen_scrip_description {
+ my $scrip = shift;
+ my $condition = $scrip->ConditionObj->Name
+ || $scrip->ConditionObj->Description
+ || ('On Condition #'. $scrip->Condition);
+ my $action = $scrip->ActionObj->Name
+ || $scrip->ActionObj->Description
+ || ('Run Action #'. $scrip->Action);
+ return join ' ', $condition, $action;
+}
+}
+
+1;
diff --git a/rt/etc/upgrade/3.7.3/schema.Oracle b/rt/etc/upgrade/3.7.3/schema.Oracle
new file mode 100644
index 0000000..6136efa
--- /dev/null
+++ b/rt/etc/upgrade/3.7.3/schema.Oracle
@@ -0,0 +1,5 @@
+alter table CustomFields add Pattern_TMP clob;
+update CustomFields set Pattern_TMP = Pattern;
+commit;
+alter table CustomFields drop column Pattern;
+alter table CustomFields rename column Pattern_TMP to Pattern;
diff --git a/rt/etc/upgrade/3.7.3/schema.Pg b/rt/etc/upgrade/3.7.3/schema.Pg
new file mode 100644
index 0000000..5d0312e
--- /dev/null
+++ b/rt/etc/upgrade/3.7.3/schema.Pg
@@ -0,0 +1 @@
+ALTER TABLE customfields ALTER COLUMN pattern TYPE VARCHAR(65536);
diff --git a/rt/etc/upgrade/3.7.3/schema.mysql b/rt/etc/upgrade/3.7.3/schema.mysql
new file mode 100644
index 0000000..51c376d
--- /dev/null
+++ b/rt/etc/upgrade/3.7.3/schema.mysql
@@ -0,0 +1 @@
+ALTER TABLE CustomFields CHANGE Pattern Pattern TEXT NULL;
diff --git a/rt/etc/upgrade/3.7.81/schema.Oracle b/rt/etc/upgrade/3.7.81/schema.Oracle
new file mode 100644
index 0000000..02da4ec
--- /dev/null
+++ b/rt/etc/upgrade/3.7.81/schema.Oracle
@@ -0,0 +1,2 @@
+CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
+
diff --git a/rt/etc/upgrade/3.7.81/schema.mysql b/rt/etc/upgrade/3.7.81/schema.mysql
new file mode 100644
index 0000000..02da4ec
--- /dev/null
+++ b/rt/etc/upgrade/3.7.81/schema.mysql
@@ -0,0 +1,2 @@
+CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
+
diff --git a/rt/etc/upgrade/3.7.82/content b/rt/etc/upgrade/3.7.82/content
new file mode 100644
index 0000000..a1c555f
--- /dev/null
+++ b/rt/etc/upgrade/3.7.82/content
@@ -0,0 +1,13 @@
+@Attributes = (
+ { Name => 'Search - Bookmarked Tickets',
+ Description => 'Bookmarked Tickets', #loc
+ Content =>
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
+ . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
+ . q{Priority, QueueName, ExtendedStatus, Bookmark},
+ Query => "__Bookmarks__",
+ OrderBy => 'LastUpdated',
+ Order => 'DESC' },
+ },
+);
+
diff --git a/rt/etc/upgrade/3.7.85/content b/rt/etc/upgrade/3.7.85/content
new file mode 100644
index 0000000..49ab286
--- /dev/null
+++ b/rt/etc/upgrade/3.7.85/content
@@ -0,0 +1,11 @@
+@Templates = (
+
+ { Queue => '0',
+ Name => 'Email Digest', # loc
+ Description => 'Email template for periodic notification digests', # loc
+ Content => q[Subject: RT Email Digest
+
+{ $Argument }
+],
+ },
+);
diff --git a/rt/etc/upgrade/3.7.86/content b/rt/etc/upgrade/3.7.86/content
new file mode 100644
index 0000000..da087ed
--- /dev/null
+++ b/rt/etc/upgrade/3.7.86/content
@@ -0,0 +1,23 @@
+@Final = (
+ sub {
+ $RT::Logger->debug("Adding search for bookmarked tickets to defaults");
+ my $sys = RT::System->new($RT::SystemUser);
+
+ my $attrs = RT::Attributes->new( $RT::SystemUser );
+ $attrs->LimitToObject( $sys );
+ my ($attr) = $attrs->Named( 'HomepageSettings' );
+ unless ($attr) {
+ $RT::Logger->error("You have no global home page settings");
+ return;
+ }
+ my $content = $attr->Content;
+ unshift @{ $content->{'body'} ||= [] },
+ { type => 'system', name => 'Bookmarked Tickets' };
+
+ my ($status, $msg) = $attr->SetContent( $content );
+ $RT::Logger->error($msg) unless $status;
+
+ $RT::Logger->debug("done.");
+ return 1;
+ },
+);
diff --git a/rt/etc/upgrade/3.7.87/content b/rt/etc/upgrade/3.7.87/content
new file mode 100644
index 0000000..0c677c4
--- /dev/null
+++ b/rt/etc/upgrade/3.7.87/content
@@ -0,0 +1,28 @@
+@Templates = (
+{
+ Queue => 0,
+ Name => "Error: Missing dashboard", # loc
+ Description =>
+ "Inform user that a dashboard he subscribed to is missing", # loc
+ Content => q{Subject: [{RT->Config->Get('rtname')}] Missing dashboard!
+
+Greetings,
+
+You are subscribed to a dashboard that is currently missing. Most likely, the dashboard was deleted.
+
+RT will remove this subscription as it is no longer useful. Here's the information RT had about your subscription:
+
+DashboardID: { $SubscriptionObj->SubValue('DashboardId') }
+Frequency: { $SubscriptionObj->SubValue('Frequency') }
+Hour: { $SubscriptionObj->SubValue('Hour') }
+{
+ $SubscriptionObj->SubValue('Frequency') eq 'weekly'
+ ? "Day of week: " . $SubscriptionObj->SubValue('Dow')
+ : $SubscriptionObj->SubValue('Frequency') eq 'monthly'
+ ? "Day of month: " . $SubscriptionObj->SubValue('Dom')
+ : ''
+}
+}
+},
+);
+
diff --git a/rt/etc/upgrade/3.8-branded-queues-extension b/rt/etc/upgrade/3.8-branded-queues-extension
new file mode 100755
index 0000000..6a0ea48
--- /dev/null
+++ b/rt/etc/upgrade/3.8-branded-queues-extension
@@ -0,0 +1,95 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+use lib "local/lib";
+use lib "lib";
+
+
+use RT;
+RT::LoadConfig();
+RT::Init();
+
+use RT::Queues;
+
+my $queues = RT::Queues->new( $RT::SystemUser );
+$queues->UnLimit();
+while ( my $queue = $queues->Next ) {
+ print "Processing queue ". ($queue->Name || $queue->id) ."...\n";
+ my $old_attr = $queue->FirstAttribute('BrandedSubjectTag');
+ unless ( $old_attr ) {
+ print "\thas no old-style subject tag. skipping\n";
+ next;
+ }
+ my $old_value = $old_attr->Content;
+ unless ( $old_value ) {
+ print "\thas empty old-style subject tag\n";
+ } else {
+ my ($status, $msg) = $queue->SetSubjectTag( $old_value );
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't set tag: $msg\n";
+ next;
+ } else {
+ print "\thave set new-style subject tag to '$old_value'\n";
+ }
+ }
+
+ my ($status, $msg) = $queue->DeleteAttribute('BrandedSubjectTag');
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't delete old-style tag: $msg\n";
+ next;
+ } else {
+ print "\tdeleted old-style tag entry\n";
+ }
+ print "\tDONE\n";
+}
+
+exit 0;
+
diff --git a/rt/etc/upgrade/3.8-branded-queues-extension.in b/rt/etc/upgrade/3.8-branded-queues-extension.in
new file mode 100755
index 0000000..2f07d6e
--- /dev/null
+++ b/rt/etc/upgrade/3.8-branded-queues-extension.in
@@ -0,0 +1,95 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+use lib "@LOCAL_LIB_PATH@";
+use lib "@RT_LIB_PATH@";
+
+
+use RT;
+RT::LoadConfig();
+RT::Init();
+
+use RT::Queues;
+
+my $queues = RT::Queues->new( $RT::SystemUser );
+$queues->UnLimit();
+while ( my $queue = $queues->Next ) {
+ print "Processing queue ". ($queue->Name || $queue->id) ."...\n";
+ my $old_attr = $queue->FirstAttribute('BrandedSubjectTag');
+ unless ( $old_attr ) {
+ print "\thas no old-style subject tag. skipping\n";
+ next;
+ }
+ my $old_value = $old_attr->Content;
+ unless ( $old_value ) {
+ print "\thas empty old-style subject tag\n";
+ } else {
+ my ($status, $msg) = $queue->SetSubjectTag( $old_value );
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't set tag: $msg\n";
+ next;
+ } else {
+ print "\thave set new-style subject tag to '$old_value'\n";
+ }
+ }
+
+ my ($status, $msg) = $queue->DeleteAttribute('BrandedSubjectTag');
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't delete old-style tag: $msg\n";
+ next;
+ } else {
+ print "\tdeleted old-style tag entry\n";
+ }
+ print "\tDONE\n";
+}
+
+exit 0;
+
diff --git a/rt/etc/upgrade/3.8-ical-extension b/rt/etc/upgrade/3.8-ical-extension
new file mode 100755
index 0000000..9561b97
--- /dev/null
+++ b/rt/etc/upgrade/3.8-ical-extension
@@ -0,0 +1,96 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+use lib "local/lib";
+use lib "lib";
+
+
+use RT;
+RT::LoadConfig();
+RT::Init();
+
+use RT::Attributes;
+my $attrs = RT::Attributes->new( $RT::SystemUser );
+$attrs->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => 'RT::User');
+$attrs->Limit(FIELD => 'Name', OPERATOR=> '=', VALUE => 'ical-auth-token');
+while ( my $attr = $attrs->Next ) {
+ my $uid = $attr->ObjectId;
+ print "Processing auth token of user #". $uid ."...\n";
+
+ my $user = RT::User->new( $RT::SystemUser );
+ $user->Load( $uid );
+ unless ( $user->id ) {
+ print STDERR "\tERROR. Couldn't load user record\n";
+ next;
+ }
+
+ my ($status, $msg);
+
+ ($status, $msg) = $user->DeleteAttribute('AuthToken')
+ if $user->FirstAttribute('AuthToken');
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't delete duplicated attribute: $msg\n";
+ next;
+ } else {
+ print "\tdeleted duplicate attribute\n";
+ }
+
+ ($status, $msg) = $attr->SetName('AuthToken');
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't rename attribute: $msg\n";
+ next;
+ } else {
+ print "\trenamed attribute\n";
+ }
+ print "\tDONE\n";
+}
+
+exit 0;
diff --git a/rt/etc/upgrade/3.8-ical-extension.in b/rt/etc/upgrade/3.8-ical-extension.in
new file mode 100644
index 0000000..510419c
--- /dev/null
+++ b/rt/etc/upgrade/3.8-ical-extension.in
@@ -0,0 +1,96 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+use lib "@LOCAL_LIB_PATH@";
+use lib "@RT_LIB_PATH@";
+
+
+use RT;
+RT::LoadConfig();
+RT::Init();
+
+use RT::Attributes;
+my $attrs = RT::Attributes->new( $RT::SystemUser );
+$attrs->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => 'RT::User');
+$attrs->Limit(FIELD => 'Name', OPERATOR=> '=', VALUE => 'ical-auth-token');
+while ( my $attr = $attrs->Next ) {
+ my $uid = $attr->ObjectId;
+ print "Processing auth token of user #". $uid ."...\n";
+
+ my $user = RT::User->new( $RT::SystemUser );
+ $user->Load( $uid );
+ unless ( $user->id ) {
+ print STDERR "\tERROR. Couldn't load user record\n";
+ next;
+ }
+
+ my ($status, $msg);
+
+ ($status, $msg) = $user->DeleteAttribute('AuthToken')
+ if $user->FirstAttribute('AuthToken');
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't delete duplicated attribute: $msg\n";
+ next;
+ } else {
+ print "\tdeleted duplicate attribute\n";
+ }
+
+ ($status, $msg) = $attr->SetName('AuthToken');
+ unless ( $status ) {
+ print STDERR "\tERROR. Couldn't rename attribute: $msg\n";
+ next;
+ } else {
+ print "\trenamed attribute\n";
+ }
+ print "\tDONE\n";
+}
+
+exit 0;
diff --git a/rt/etc/upgrade/3.8.0/content b/rt/etc/upgrade/3.8.0/content
new file mode 100644
index 0000000..f4e389b
--- /dev/null
+++ b/rt/etc/upgrade/3.8.0/content
@@ -0,0 +1,22 @@
+@Final = (
+ # by incident we've changed 'My Bookmarks' to 'Bookmarked Tickets' when
+ # 3.7.82 upgrade script still was creating 'My Bookmarks', try to fix it
+ sub {
+ $RT::Logger->debug("Going to rename 'My Bookmarks' to 'Bookmarked Tickets'");
+ my $sys = RT::System->new($RT::SystemUser);
+
+ my $attrs = RT::Attributes->new( $RT::SystemUser );
+ $attrs->LimitToObject( $sys );
+ my ($attr) = $attrs->Named( 'Search - My Bookmarks' );
+ unless ($attr) {
+ $RT::Logger->debug("You have no global search 'My Bookmarks'. Skipped.");
+ return 1;
+ }
+ my ($status, $msg) = $attr->SetName( 'Search - Bookmarked Tickets' );
+ $RT::Logger->error($msg) and return undef unless $status;
+
+ $RT::Logger->debug("Renamed.");
+ return 1;
+ },
+);
+
diff --git a/rt/etc/upgrade/3.8.1/content b/rt/etc/upgrade/3.8.1/content
new file mode 100644
index 0000000..89db596
--- /dev/null
+++ b/rt/etc/upgrade/3.8.1/content
@@ -0,0 +1,24 @@
+@Final = (
+ sub {
+ $RT::Logger->debug("Going to adjust 'Bookmarked Tickets'");
+ my $sys = RT::System->new($RT::SystemUser);
+
+ my $attrs = RT::Attributes->new( $RT::SystemUser );
+ $attrs->LimitToObject( $sys );
+ my ($attr) = $attrs->Named( 'Search - Bookmarked Tickets' );
+ unless ($attr) {
+ $RT::Logger->debug("You have no global search 'Bookmarked Tickets'. Skipped.");
+ return 1;
+ }
+ my $props = $attr->Content;
+ $props->{'Query'} =~ s/__Bookmarks__/id = '__Bookmarked__'/g;
+
+ my ($status, $msg) = $attr->SetContent( $props );
+ $RT::Logger->error($msg) and return undef unless $status;
+
+ $RT::Logger->debug("Fixed.");
+ return 1;
+ },
+);
+
+
diff --git a/rt/etc/upgrade/3.8.2/content b/rt/etc/upgrade/3.8.2/content
new file mode 100644
index 0000000..9bd92be
--- /dev/null
+++ b/rt/etc/upgrade/3.8.2/content
@@ -0,0 +1,186 @@
+@Initial = (
+ sub {
+ $RT::Logger->warning(
+ "Going to add [OLD] prefix to all temlates in approvals queue."
+ ." If you never used approvals then you can delete all these"
+ ." templates with [OLD] prefix. Leave new there may be you will"
+ ." want to use approvals some time."
+ );
+
+ my $approvals_q = RT::Queue->new( $RT::SystemUser );
+ $approvals_q->Load('___Approvals');
+ unless ( $approvals_q->id ) {
+ $RT::Logger->error("You have no approvals queue.");
+ return 1;
+ }
+
+ my $templates = RT::Templates->new( $RT::SystemUser );
+ $templates->LimitToQueue( $approvals_q->id );
+ while ( my $tmpl = $templates->Next ) {
+ my ($status, $msg) = $tmpl->SetName( "[OLD] ". $tmpl->Name );
+ unless ( $status ) {
+ $RT::Logger->error("Couldn't rename template #". $tmpl->id .": $msg");
+ }
+ }
+ return 1;
+ },
+);
+@ACL = (
+ { GroupDomain => 'SystemInternal',
+ GroupType => 'privileged',
+ Right => 'ShowApprovalsTab', },
+);
+
+@Templates = (
+ { Queue => '___Approvals',
+ Name => "New Pending Approval", # loc
+ Description =>
+ "Notify Owners and AdminCcs of new items pending their approval", # loc
+ Content => 'Subject: New Pending Approval: {$Ticket->Subject}
+
+Greetings,
+
+There is a new item pending your approval: "{$Ticket->Subject()}",
+a summary of which appears below.
+
+Please visit {RT->Config->Get(\'WebURL\')}Approvals/Display.html?id={$Ticket->id}
+to approve or reject this ticket, or {RT->Config->Get(\'WebURL\')}Approvals/ to
+batch-process all your pending approvals.
+
+-------------------------------------------------------------------------
+{$Transaction->Content()}
+'
+ },
+ { Queue => '___Approvals',
+ Name => "Approval Passed", # loc
+ Description =>
+ "Notify Requestor of their ticket has been approved by some approver", # loc
+ Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+
+Greetings,
+
+Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
+Other approvals may be pending.
+
+Approver\'s notes: { $Notes }
+'
+ },
+ { Queue => '___Approvals',
+ Name => "All Approvals Passed", # loc
+ Description =>
+ "Notify Requestor of their ticket has been approved by all approvers", # loc
+ Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+
+Greetings,
+
+Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
+Its Owner may now start to act on it.
+
+Approver\'s notes: { $Notes }
+'
+ },
+ { Queue => '___Approvals',
+ Name => "Approval Rejected", # loc
+ Description =>
+ "Notify Owner of their rejected ticket", # loc
+ Content => 'Subject: Ticket Rejected: {$Ticket->Subject}
+
+Greetings,
+
+Your ticket has been rejected by { eval { $Approval->OwnerObj->Name } }.
+
+Approver\'s notes: { $Notes }
+'
+ },
+ { Queue => '___Approvals',
+ Name => "Approval Ready for Owner", # loc
+ Description =>
+ "Notify Owner of their ticket has been approved and is ready to be acted on", # loc
+ Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+
+Greetings,
+
+The ticket has been approved, you may now start to act on it.
+
+'
+ },
+);
+
+@Final = (
+ sub {
+ $RT::Logger->debug("Going to adjust dashboards");
+ my $sys = RT::System->new($RT::SystemUser);
+
+ my $attrs = RT::Attributes->new( $RT::SystemUser );
+ $attrs->UnLimit;
+ my @dashboards = $attrs->Named('Dashboard');
+
+ if (@dashboards == 0) {
+ $RT::Logger->debug("You have no dashboards. Skipped.");
+ return 1;
+ }
+
+ for my $attr (@dashboards) {
+ my $props = $attr->Content;
+ if (exists $props->{Searches}) {
+ $props->{Panes} = {
+ body => [
+ map {
+ my ($privacy, $id, $desc) = @$_;
+
+ {
+ portlet_type => 'search',
+ privacy => $privacy,
+ id => $id,
+ description => $desc,
+ pane => 'body',
+ }
+ } @{ delete $props->{Searches} }
+ ],
+ };
+ }
+ my ($status, $msg) = $attr->SetContent( $props );
+ $RT::Logger->error($msg) unless $status;
+ }
+
+ $RT::Logger->debug("Fixed.");
+ return 1;
+ },
+ sub {
+ my $approvals_q = RT::Queue->new( $RT::SystemUser );
+ $approvals_q->Load('___Approvals');
+ unless ( $approvals_q->id ) {
+ $RT::Logger->error("You have no approvals queue.");
+ return 1;
+ }
+
+ require File::Temp;
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( 'rt-approvals-scrips-XXXX', CLEANUP => 0 );
+ unless ( $tmp_fh ) {
+ $RT::Logger->error("Couldn't create temporary file.");
+ return 0;
+ }
+
+ $RT::Logger->warning(
+ "IMPORTANT: We're going to delete all scrips in Approvals queue"
+ ." and save them in '$tmp_fn' file."
+ );
+
+ require Data::Dumper;
+
+ my $scrips = RT::Scrips->new( $RT::SystemUser );
+ $scrips->LimitToQueue( $approvals_q->id );
+ while ( my $scrip = $scrips->Next ) {
+ my %tmp =
+ map { $tmp->{ $_ } = $scrip->_Value( $_ ) }
+ $scrip->ReadableAttributes;
+
+ print $tmp_fh Data::Dumper::Dumper( \%tmp );
+
+ my ($status, $msg) = $scrip->Delete;
+ unless ( $status ) {
+ $RT::Logger->error( "Couldn't delete scrip: $msg");
+ }
+ }
+ },
+);
diff --git a/rt/etc/upgrade/3.8.3/content b/rt/etc/upgrade/3.8.3/content
new file mode 100644
index 0000000..8538e42
--- /dev/null
+++ b/rt/etc/upgrade/3.8.3/content
@@ -0,0 +1,91 @@
+@ScripConditions = (
+ { Name => 'On Reject', # loc
+ Description => 'Whenever a ticket is rejected', # loc
+ ApplicableTransTypes => 'Status',
+ ExecModule => 'StatusChange',
+ Argument => 'rejected'
+
+ },
+);
+
+@Final = (
+ sub {
+ $RT::Logger->debug("Going to correct descriptions of notify actions in the DB");
+
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'Notify',
+ );
+ $actions->Limit(
+ FIELD => 'Argument',
+ VALUE => 'All',
+ );
+ while ( my $action = $actions->Next ) {
+ my ($status, $msg) = $action->__Set( Field => 'Name', Value => 'Notify Owner, Requestors, Ccs and AdminCcs' );
+ $RT::Logger->warning( "Couldn't change action name: $msg" )
+ unless $status;
+
+ ($status, $msg) = $action->__Set( Field => 'Description', Value => 'Send mail to owner and all watchers' );
+ $RT::Logger->warning( "Couldn't change action description: $msg" )
+ unless $status;
+ }
+
+ $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyAsComment',
+ );
+ $actions->Limit(
+ FIELD => 'Argument',
+ VALUE => 'All',
+ );
+ while ( my $action = $actions->Next ) {
+ my ($status, $msg) = $action->__Set( Field => 'Name', Value => 'Notify Owner, Requestors, Ccs and AdminCcs as Comment' );
+ $RT::Logger->warning( "Couldn't change action name: $msg" )
+ unless $status;
+
+ ($status, $msg) = $action->__Set( Field => 'Description', Value => 'Send mail to owner and all watchers as a "comment"' );
+ $RT::Logger->warning( "Couldn't change action description: $msg" )
+ unless $status;
+ }
+
+ $RT::Logger->debug("Corrected descriptions of notify actions in the DB.");
+ return 1;
+ },
+);
+
+
+{
+$RT::Logger->debug("Going to add in Extract Subject Tag actions if they were missed during a previous upgrade");
+
+$actions = RT::ScripActions->new( $RT::SystemUser );
+$actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'ExtractSubjectTag',
+);
+my $extract_action = $actions->First;
+
+if ( $extract_action && $extract_action->Id ) {
+ $RT::Logger->debug("You appear to already have an Extract Subject Tag action, skipping");
+ return 1;
+} else {
+ $RT::Logger->debug("Didn't find an existing Extract Subject Tag action, adding it");
+ push @ScripActions, (
+ { Name => 'Extract Subject Tag', # loc
+ Description => 'Extract tags from a Transaction\'s subject and add them to the Ticket\'s subject.', # loc
+ ExecModule => 'ExtractSubjectTag'
+ },
+ );
+
+ $RT::Logger->debug("Adding Extract Subject Tag Scrip");
+ push @Scrips, (
+ { Description => "On transaction, add any tags in the transaction's subject to the ticket's subject",
+ ScripCondition => 'On Transaction',
+ ScripAction => 'Extract Subject Tag',
+ Template => 'Blank'
+ },
+ );
+}
+}
+
diff --git a/rt/etc/upgrade/3.8.3/schema.Pg b/rt/etc/upgrade/3.8.3/schema.Pg
new file mode 100644
index 0000000..bbe5536
--- /dev/null
+++ b/rt/etc/upgrade/3.8.3/schema.Pg
@@ -0,0 +1,3 @@
+
+CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers(GroupId, MemberId);
+
diff --git a/rt/etc/upgrade/3.8.4/content b/rt/etc/upgrade/3.8.4/content
new file mode 100644
index 0000000..be5a6bf
--- /dev/null
+++ b/rt/etc/upgrade/3.8.4/content
@@ -0,0 +1,59 @@
+
+@Final = (
+ sub {
+ $RT::Logger->debug("Going to correct arguments of NotifyGroup actions if you have any");
+ use strict;
+
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroup',
+ );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroupAsComment',
+ );
+
+ my $converter = sub {
+ my $arg = shift;
+ my @res;
+ foreach my $r ( @{ $arg } ) {
+ my $obj;
+ next unless $r->{'Type'};
+ if( lc $r->{'Type'} eq 'user' ) {
+ $obj = RT::User->new( $RT::SystemUser );
+ } elsif ( lc $r->{'Type'} eq 'group' ) {
+ $obj = RT::Group->new( $RT::SystemUser );
+ } else {
+ next;
+ }
+ $obj->Load( $r->{'Instance'} );
+ my $id = $obj->id;
+ next unless( $id );
+
+ push @res, $id;
+ }
+
+ return join ',', @res;
+ };
+
+ require Storable;
+ while ( my $action = $actions->Next ) {
+ my $argument = $action->Argument;
+ my $new = '';
+ local $@;
+ if ( my $struct = eval { Storable::thaw( $argument ) } ) {
+ $new = $converter->( $struct );
+ } else {
+ $new = join /, /, grep length, split /[^0-9]+/, $argument;
+ }
+ next if $new eq $argument;
+
+ my ($status, $msg) = $action->__Set( Field => 'Argument', Value => $new );
+ $RT::Logger->warning( "Couldn't change argument value of the action: $msg" )
+ unless $status;
+ }
+ },
+);
+
+
diff --git a/rt/etc/upgrade/3.8.6/content b/rt/etc/upgrade/3.8.6/content
new file mode 100644
index 0000000..a9793c6
--- /dev/null
+++ b/rt/etc/upgrade/3.8.6/content
@@ -0,0 +1,10 @@
+@Templates = (
+ { Queue => 0,
+ Name => "Forward Ticket", # loc
+ Description => "Heading of a forwarded Ticket", # loc
+ Content => q{
+
+This is a forward of ticket #{ $Ticket->id }
+}
+ },
+);
diff --git a/rt/etc/upgrade/shrink_cgm_table.pl b/rt/etc/upgrade/shrink_cgm_table.pl
new file mode 100644
index 0000000..3d153c7
--- /dev/null
+++ b/rt/etc/upgrade/shrink_cgm_table.pl
@@ -0,0 +1,72 @@
+#!/usr/bin/perl
+
+use 5.8.3;
+use strict;
+use warnings;
+
+use RT;
+RT::LoadConfig();
+RT->Config->Set('LogToScreen' => 'debug');
+RT::Init();
+
+use RT::CachedGroupMembers;
+my $cgms = RT::CachedGroupMembers->new( $RT::SystemUser );
+$cgms->Limit(
+ FIELD => 'id',
+ OPERATOR => '!=',
+ VALUE => 'main.Via',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+);
+$cgms->FindAllRows;
+
+my $alias = $cgms->Join(
+ TYPE => 'LEFT',
+ FIELD1 => 'Via',
+ TABLE2 => 'CachedGroupMembers',
+ FIELD2 => 'id',
+);
+$cgms->Limit(
+ ALIAS => $alias,
+ FIELD => 'MemberId',
+ OPERATOR => '=',
+ VALUE => $alias .'.GroupId',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+);
+$cgms->Limit(
+ ALIAS => $alias,
+ FIELD => 'id',
+ OPERATOR => '=',
+ VALUE => $alias .'.Via',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+);
+
+FetchNext( $cgms, 'init' );
+while ( my $rec = FetchNext( $cgms ) ) {
+ $RT::Handle->BeginTransaction;
+ my ($status) = $rec->Delete;
+ unless ($status) {
+ print STDERR "Couldn't delete CGM #". $rec->id;
+ exit 1;
+ }
+ $RT::Handle->Commit;
+}
+
+use constant PAGE_SIZE => 1000;
+sub FetchNext {
+ my ($objs, $init) = @_;
+ if ( $init ) {
+ $objs->RowsPerPage( PAGE_SIZE );
+ $objs->FirstPage;
+ return;
+ }
+
+ my $obj = $objs->Next;
+ return $obj if $obj;
+ $objs->RedoSearch;
+ $objs->FirstPage;
+ return $objs->Next;
+}
+
diff --git a/rt/etc/upgrade/split-out-cf-categories b/rt/etc/upgrade/split-out-cf-categories
new file mode 100755
index 0000000..d4077ce
--- /dev/null
+++ b/rt/etc/upgrade/split-out-cf-categories
@@ -0,0 +1,171 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+use lib "local/lib";
+use lib "lib";
+
+use RT;
+RT::LoadConfig();
+RT->Config->Set('LogToScreen' => 'debug');
+RT::Init();
+
+$| = 1;
+
+$RT::Handle->BeginTransaction();
+
+use RT::CustomFields;
+my $CFs = RT::CustomFields->new( $RT::SystemUser );
+$CFs->UnLimit;
+$CFs->Limit( FIELD => 'Type', VALUE => 'Select' );
+
+my $seen;
+while (my $cf = $CFs->Next ) {
+ next if $cf->BasedOnObj->Id;
+ my @categories;
+ my %mapping;
+ my $values = $cf->Values;
+ while (my $value = $values->Next) {
+ next unless defined $value->Category and length $value->Category;
+ push @categories, $value->Category unless grep {$_ eq $value->Category} @categories;
+ $mapping{$value->Name} = $value->Category;
+ }
+ next unless @categories;
+
+ $seen++;
+ print "Found CF '@{[$cf->Name]}' with categories:\n";
+ print " $_\n" for @categories;
+
+ print "Split this CF's categories into a hierarchical custom field (Y/n)? ";
+ my $dothis = <>;
+ next if $dothis =~ /n/i;
+
+ print "Enter name of CF to create as category ('@{[$cf->Name]} category'): ";
+ my $newname = <>;
+ chomp $newname;
+ $newname = $cf->Name . " category" unless length $newname;
+
+ # bump the CF's sort oder up by one
+ $cf->SetSortOrder( ($cf->SortOrder || 0) + 1 );
+
+ # ..and add a new CF before it
+ my $new = RT::CustomField->new( $RT::SystemUser );
+ my ($id, $msg) = $new->Create(
+ Name => $newname,
+ Type => 'Select',
+ MaxValues => 1,
+ LookupType => $cf->LookupType,
+ SortOrder => $cf->SortOrder - 1,
+ );
+ die "Can't create custom field '$newname': $msg" unless $id;
+
+ # Set the CF to be based on what we just made
+ $cf->SetBasedOn( $new->Id );
+
+ # Apply it to all of the same things
+ {
+ my $ocfs = RT::ObjectCustomFields->new( $RT::SystemUser );
+ $ocfs->LimitToCustomField( $cf->Id );
+ while (my $ocf = $ocfs->Next) {
+ my $newocf = RT::ObjectCustomField->new( $RT::SystemUser );
+ ($id, $msg) = $newocf->Create(
+ SortOrder => $ocf->SortOrder,
+ CustomField => $new->Id,
+ ObjectId => $ocf->ObjectId,
+ );
+ die "Can't create ObjectCustomField: $msg" unless $id;
+ }
+ }
+
+ # Copy over all of the rights
+ {
+ my $acl = RT::ACL->new( $RT::SystemUser );
+ $acl->LimitToObject( $cf );
+ while (my $ace = $acl->Next) {
+ my $newace = RT::ACE->new( $RT::SystemUser );
+ ($id, $msg) = $newace->Create(
+ PrincipalId => $ace->PrincipalId,
+ PrincipalType => $ace->PrincipalType,
+ RightName => $ace->RightName,
+ Object => $new,
+ );
+ die "Can't assign rights: $msg" unless $id;
+ }
+ }
+
+ # Add values for all of the categories
+ for my $i (0..$#categories) {
+ ($id, $msg) = $new->AddValue(
+ Name => $categories[$i],
+ SortOrder => $i + 1,
+ );
+ die "Can't create custom field value: $msg" unless $id;
+ }
+
+ # Grovel through all ObjectCustomFieldValues, and add the
+ # appropriate category
+ {
+ my $ocfvs = RT::ObjectCustomFieldValues->new( $RT::SystemUser );
+ $ocfvs->LimitToCustomField( $cf->Id );
+ while (my $ocfv = $ocfvs->Next) {
+ next unless exists $mapping{$ocfv->Content};
+ my $newocfv = RT::ObjectCustomFieldValue->new( $RT::SystemUser );
+ ($id, $msg) = $newocfv->Create(
+ CustomField => $new->Id,
+ ObjectType => $ocfv->ObjectType,
+ ObjectId => $ocfv->ObjectId,
+ Content => $mapping{$ocfv->Content},
+ );
+ }
+ }
+}
+
+$RT::Handle->Commit;
+print "No custom fields with categories found\n" unless $seen;
diff --git a/rt/etc/upgrade/split-out-cf-categories.in b/rt/etc/upgrade/split-out-cf-categories.in
new file mode 100644
index 0000000..f34a1b6
--- /dev/null
+++ b/rt/etc/upgrade/split-out-cf-categories.in
@@ -0,0 +1,171 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+use lib "@LOCAL_LIB_PATH@";
+use lib "@RT_LIB_PATH@";
+
+use RT;
+RT::LoadConfig();
+RT->Config->Set('LogToScreen' => 'debug');
+RT::Init();
+
+$| = 1;
+
+$RT::Handle->BeginTransaction();
+
+use RT::CustomFields;
+my $CFs = RT::CustomFields->new( $RT::SystemUser );
+$CFs->UnLimit;
+$CFs->Limit( FIELD => 'Type', VALUE => 'Select' );
+
+my $seen;
+while (my $cf = $CFs->Next ) {
+ next if $cf->BasedOnObj->Id;
+ my @categories;
+ my %mapping;
+ my $values = $cf->Values;
+ while (my $value = $values->Next) {
+ next unless defined $value->Category and length $value->Category;
+ push @categories, $value->Category unless grep {$_ eq $value->Category} @categories;
+ $mapping{$value->Name} = $value->Category;
+ }
+ next unless @categories;
+
+ $seen++;
+ print "Found CF '@{[$cf->Name]}' with categories:\n";
+ print " $_\n" for @categories;
+
+ print "Split this CF's categories into a hierarchical custom field (Y/n)? ";
+ my $dothis = <>;
+ next if $dothis =~ /n/i;
+
+ print "Enter name of CF to create as category ('@{[$cf->Name]} category'): ";
+ my $newname = <>;
+ chomp $newname;
+ $newname = $cf->Name . " category" unless length $newname;
+
+ # bump the CF's sort oder up by one
+ $cf->SetSortOrder( ($cf->SortOrder || 0) + 1 );
+
+ # ..and add a new CF before it
+ my $new = RT::CustomField->new( $RT::SystemUser );
+ my ($id, $msg) = $new->Create(
+ Name => $newname,
+ Type => 'Select',
+ MaxValues => 1,
+ LookupType => $cf->LookupType,
+ SortOrder => $cf->SortOrder - 1,
+ );
+ die "Can't create custom field '$newname': $msg" unless $id;
+
+ # Set the CF to be based on what we just made
+ $cf->SetBasedOn( $new->Id );
+
+ # Apply it to all of the same things
+ {
+ my $ocfs = RT::ObjectCustomFields->new( $RT::SystemUser );
+ $ocfs->LimitToCustomField( $cf->Id );
+ while (my $ocf = $ocfs->Next) {
+ my $newocf = RT::ObjectCustomField->new( $RT::SystemUser );
+ ($id, $msg) = $newocf->Create(
+ SortOrder => $ocf->SortOrder,
+ CustomField => $new->Id,
+ ObjectId => $ocf->ObjectId,
+ );
+ die "Can't create ObjectCustomField: $msg" unless $id;
+ }
+ }
+
+ # Copy over all of the rights
+ {
+ my $acl = RT::ACL->new( $RT::SystemUser );
+ $acl->LimitToObject( $cf );
+ while (my $ace = $acl->Next) {
+ my $newace = RT::ACE->new( $RT::SystemUser );
+ ($id, $msg) = $newace->Create(
+ PrincipalId => $ace->PrincipalId,
+ PrincipalType => $ace->PrincipalType,
+ RightName => $ace->RightName,
+ Object => $new,
+ );
+ die "Can't assign rights: $msg" unless $id;
+ }
+ }
+
+ # Add values for all of the categories
+ for my $i (0..$#categories) {
+ ($id, $msg) = $new->AddValue(
+ Name => $categories[$i],
+ SortOrder => $i + 1,
+ );
+ die "Can't create custom field value: $msg" unless $id;
+ }
+
+ # Grovel through all ObjectCustomFieldValues, and add the
+ # appropriate category
+ {
+ my $ocfvs = RT::ObjectCustomFieldValues->new( $RT::SystemUser );
+ $ocfvs->LimitToCustomField( $cf->Id );
+ while (my $ocfv = $ocfvs->Next) {
+ next unless exists $mapping{$ocfv->Content};
+ my $newocfv = RT::ObjectCustomFieldValue->new( $RT::SystemUser );
+ ($id, $msg) = $newocfv->Create(
+ CustomField => $new->Id,
+ ObjectType => $ocfv->ObjectType,
+ ObjectId => $ocfv->ObjectId,
+ Content => $mapping{$ocfv->Content},
+ );
+ }
+ }
+}
+
+$RT::Handle->Commit;
+print "No custom fields with categories found\n" unless $seen; \ No newline at end of file
diff --git a/rt/etc/upgrade/upgrade-mysql-schema.pl b/rt/etc/upgrade/upgrade-mysql-schema.pl
new file mode 100755
index 0000000..bc59c97
--- /dev/null
+++ b/rt/etc/upgrade/upgrade-mysql-schema.pl
@@ -0,0 +1,390 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use DBI;
+use DBD::mysql 4.002;
+
+unless (@ARGV) {
+ print STDERR "usage: $0 db_name[:server_name] db_user db_password\n";
+ exit 1;
+}
+
+# pretty correct support of charsets has been introduced in mysql 4.1
+# as RT doesn't use it may result in issues:
+# 1) data corruptions when default charset of mysql server has data restrictions like utf8
+# 2) wrong ordering (collations)
+
+# we have to define correct types for all columns. RT uses UTF-8, ascii and binary.
+# * ascii is subset of many mysql's charsets except may be one or two rare where some ascii
+# characters replaced with local
+# * for many charsets mysql allows us to store any octets sequences even when those are
+# invalid for this particula set, for example we can store UTF-8 data in latin1
+# column and fetch it as UTF-8, however sorting will be wrong
+
+# here is tricky algorithm to change column to desired charset:
+# * text to binary convertion is pretty straight forward except that text types
+# have length definitions in terms of characters and in some cases we must
+# use longer binary types to satisfy space requirements
+# * binary to text is much easier as we know that there is ascii or UTF-8 then
+# we just make convertion, also 32 chars are long enough to store 32 bytes, so
+# length changes is not required
+# * text to text convertion is trickier. no matter what is the current character set
+# of the column we know that there is either ascii or UTF-8, so we can not use
+# direct convertion, instead we do text to binary plus binary to text convertion
+# instead
+# * as well we add charset definition for all tables and for the DB as well,
+# so all new columns by default will be in UTF-8 charset
+
+my @tables = qw(
+ ACL
+ Attachments
+ Attributes
+ CustomFields
+ CustomFieldValues
+ GroupMembers
+ Groups
+ Links
+ ObjectCustomFields
+ ObjectCustomFieldValues
+ Principals
+ Queues
+ ScripActions
+ ScripConditions
+ Scrips
+ sessions
+ Templates
+ Tickets
+ Transactions
+ Users
+);
+
+my %charset = (
+ ACL => {
+ RightName => 'ascii',
+ ObjectType => 'ascii',
+ PrincipalType => 'ascii',
+ },
+ Attachments => {
+ MessageId => 'ascii',
+ Subject => 'utf8',
+ Filename => 'utf8',
+ ContentType => 'ascii',
+ ContentEncoding => 'ascii',
+ Content => 'binary',
+ Headers => 'utf8',
+ },
+ Attributes => {
+ Name => 'utf8',
+ Description => 'utf8',
+ Content => 'binary',
+ ContentType => 'ascii',
+ ObjectType => 'ascii',
+ },
+ CustomFields => {
+ Name => 'utf8',
+ Type => 'ascii',
+ Pattern => 'utf8',
+ Description => 'utf8',
+ LookupType => 'ascii',
+ },
+ CustomFieldValues => {
+ Name => 'utf8',
+ Description => 'utf8',
+ },
+ Groups => {
+ Name => 'utf8',
+ Description => 'utf8',
+ Domain => 'ascii',
+ Type => 'ascii',
+ },
+ Links => {
+ Base => 'ascii',
+ Target => 'ascii',
+ Type => 'ascii',
+ },
+ ObjectCustomFieldValues => {
+ ObjectType => 'ascii',
+ Content => 'utf8',
+ LargeContent => 'binary',
+ ContentType => 'ascii',
+ ContentEncoding => 'ascii',
+ },
+ Principals => {
+ PrincipalType => 'ascii',
+ },
+ Queues => {
+ Name => 'utf8',
+ Description => 'utf8',
+ CorrespondAddress => 'ascii',
+ CommentAddress => 'ascii',
+ },
+ ScripActions => {
+ Name => 'utf8',
+ Description => 'utf8',
+ ExecModule => 'ascii',
+ Argument => 'binary',
+ },
+ ScripConditions => {
+ Name => 'utf8',
+ Description => 'utf8',
+ ExecModule => 'ascii',
+ Argument => 'binary',
+ ApplicableTransTypes => 'ascii',
+ },
+ Scrips => {
+ Description => 'utf8',
+ ConditionRules => 'utf8',
+ ActionRules => 'utf8',
+ CustomIsApplicableCode => 'utf8',
+ CustomPrepareCode => 'utf8',
+ CustomCommitCode => 'utf8',
+ Stage => 'ascii',
+ },
+ sessions => {
+ id => 'binary', # ascii?
+ a_session => 'binary',
+ },
+ Templates => {
+ Name => 'utf8',
+ Description => 'utf8',
+ Type => 'ascii',
+ Language => 'ascii',
+ Content => 'utf8',
+ },
+ Tickets => {
+ Type => 'ascii',
+ Subject => 'utf8',
+ Status => 'ascii',
+ },
+ Transactions => {
+ ObjectType => 'ascii',
+ Type => 'ascii',
+ Field => 'ascii',
+ OldValue => 'utf8',
+ NewValue => 'utf8',
+ ReferenceType => 'ascii',
+ Data => 'utf8',
+ },
+ Users => {
+ Name => 'utf8',
+ Password => 'binary',
+ Comments => 'utf8',
+ Signature => 'utf8',
+ EmailAddress => 'ascii',
+ FreeformContactInfo => 'utf8',
+ Organization => 'utf8',
+ RealName => 'utf8',
+ NickName => 'utf8',
+ Lang => 'ascii',
+ EmailEncoding => 'ascii',
+ WebEncoding => 'ascii',
+ ExternalContactInfoId => 'utf8',
+ ContactInfoSystem => 'utf8',
+ ExternalAuthId => 'utf8',
+ AuthSystem => 'utf8',
+ Gecos => 'utf8',
+ HomePhone => 'utf8',
+ WorkPhone => 'utf8',
+ MobilePhone => 'utf8',
+ PagerPhone => 'utf8',
+ Address1 => 'utf8',
+ Address2 => 'utf8',
+ City => 'utf8',
+ State => 'utf8',
+ Zip => 'utf8',
+ Country => 'utf8',
+ Timezone => 'ascii',
+ PGPKey => 'binary',
+ },
+);
+
+my %max_type_length = (
+ char => int 1<<8,
+ varchar => int 1<<8,
+ tinytext => int 1<<8,
+ mediumtext => int 1<<16,
+ text => int 1<<24,
+ longtext => int 1<<32,
+);
+
+my @sql_commands;
+
+my ($db_datasource, $db_user, $db_pass) = (shift, shift, shift);
+my $dbh = DBI->connect("dbi:mysql:$db_datasource", $db_user, $db_pass, { RaiseError => 1 });
+my $db_name = $db_datasource;
+$db_name =~ s/:.*$//;
+
+my $version = ($dbh->selectrow_array("show variables like 'version'"))[1];
+($version) = $version =~ /^(\d+\.\d+)/;
+
+push @sql_commands, qq{ALTER DATABASE $db_name DEFAULT CHARACTER SET utf8};
+convert_table($_) foreach @tables;
+
+print join "\n", map(/;$/? $_ : "$_;", @sql_commands), "";
+my $use_p = $db_pass ? " -p" : '';
+print STDERR <<ENDREMINDER;
+-- ** NOTICE: No database changes have been made. **
+-- Please review the generated SQL, ensure you have a full backup of your database
+-- and apply it to your database using a command like:
+-- mysql -u ${db_user}${use_p} $db_name < queries.sql";
+ENDREMINDER
+exit 0;
+
+my %alter_aggregator;
+sub convert_table {
+ my $table = shift;
+ @alter_aggregator{'char_to_binary','binary_to_char'} = (['DEFAULT CHARACTER SET utf8'],[]);
+
+ my $sth = $dbh->column_info( undef, $db_name, $table, undef );
+ $sth->execute;
+ while ( my $info = $sth->fetchrow_hashref ) {
+ convert_column(%$info);
+ }
+ for my $conversiontype (qw(char_to_binary binary_to_char)) {
+ next unless @{$alter_aggregator{$conversiontype}};
+ push @sql_commands, qq{ALTER TABLE $table\n }.
+ join(",\n ",@{$alter_aggregator{$conversiontype}});
+ }
+}
+
+sub convert_column {
+ my %info = @_;
+ my $table = $info{'TABLE_NAME'};
+ my $column = $info{'COLUMN_NAME'};
+ my $type = $info{'TYPE_NAME'};
+ return unless $type =~ /(CHAR|TEXT|BLOB|BINARY)$/i;
+
+ my $required_charset = $charset{$table}{$column};
+ unless ( $required_charset ) {
+ print STDERR join(".", @info{'TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME'})
+ ." has type $type however mapping is missing.\n";
+ return;
+ }
+
+ my $collation = column_info($table, $column)->{'collation'};
+ # mysql 4.1 returns literal NULL instead of undef
+ my $current_charset = $collation && $collation ne 'NULL'? (split /_/, $collation)[0]: 'binary';
+ return if $required_charset eq $current_charset;
+
+ if ( $required_charset eq 'binary' ) {
+ char_to_binary(%info);
+ }
+ elsif ( $current_charset eq 'binary' ) {
+ binary_to_char( $required_charset, %info);
+ } else {
+ char_to_char( $required_charset, %info);
+ }
+}
+
+sub char_to_binary {
+ my %info = @_;
+
+ my $table = $info{'TABLE_NAME'};
+ my $column = $info{'COLUMN_NAME'};
+ my $new_type = calc_suitable_binary_type(%info);
+ push @{$alter_aggregator{char_to_binary}},
+ "MODIFY $column $new_type ".build_column_definition(%info);
+
+}
+
+sub binary_to_char {
+ my ($charset, %info) = @_;
+
+ my $table = $info{'TABLE_NAME'};
+ my $column = $info{'COLUMN_NAME'};
+ my $new_type = lc $info{'TYPE_NAME'};
+ if ( $new_type =~ /binary/ ) {
+ $new_type =~ s/binary/char/;
+ $new_type .= '('. $info{'COLUMN_SIZE'} .')';
+ } else {
+ $new_type =~ s/blob/text/;
+ }
+
+ push @{$alter_aggregator{binary_to_char}},
+ "MODIFY $column ". uc($new_type) ." CHARACTER SET ". $charset
+ ." ". build_column_definition(%info);
+}
+
+sub char_to_char {
+ my ($charset, %info) = @_;
+
+ my $table = $info{'TABLE_NAME'};
+ my $column = $info{'COLUMN_NAME'};
+ my $new_type = $info{'mysql_type_name'};
+
+ char_to_binary(%info);
+ push @{$alter_aggregator{binary_to_char}},
+ "MODIFY $column ". uc($new_type)." CHARACTER SET ". $charset
+ ." ". build_column_definition(%info);
+}
+
+sub calc_suitable_binary_type {
+ my %info = @_;
+ my $type = lc $info{'TYPE_NAME'};
+ return 'LONGBLOB' if $type eq 'longtext';
+
+ my $current_max_byte_length = column_byte_length(@info{qw(TABLE_NAME COLUMN_NAME)}) || 0;
+ if ( $max_type_length{ $type } > $current_max_byte_length ) {
+ if ( $type eq 'varchar' || $type eq 'char' ) {
+ my $new_type = $type;
+ $new_type =~ s/char/binary/;
+ $new_type .= $info{'COLUMN_SIZE'} >= $current_max_byte_length
+ ? '('. $info{'COLUMN_SIZE'} .')'
+ : '('. $current_max_byte_length .')';
+ return uc $new_type;
+ } else {
+ my $new_type = $type;
+ $new_type =~ s/text/blob/;
+ return uc $new_type;
+ }
+ } else {
+ my $new_type;
+ foreach ( sort { $max_type_length{$a} <=> $max_type_length{$b} } keys %max_type_length ) {
+ next if $max_type_length{ $_ } <= $current_max_byte_length;
+
+ $new_type = $_; last;
+ }
+ $new_type =~ s/text/blob/;
+ return uc $new_type;
+ }
+}
+
+sub build_column_definition {
+ my %info = @_;
+
+ my $res = '';
+ $res .= 'NOT ' unless $info{'NULLABLE'};
+ $res .= 'NULL';
+ my $default = column_info(@info{qw(TABLE_NAME COLUMN_NAME)})->{default};
+ if ( defined $default ) {
+ $res .= ' DEFAULT '. $dbh->quote($default);
+ } elsif ( $info{'NULLABLE'} ) {
+ $res .= ' DEFAULT NULL';
+ }
+ $res .= ' AUTO_INCREMENT' if $info{'mysql_is_auto_increment'};
+ return $res;
+}
+
+sub column_byte_length {
+ my ($table, $column) = @_;
+ if ( $version >= 5.0 ) {
+ my ($char, $octet) = @{ $dbh->selectrow_arrayref(
+ "SELECT CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH FROM information_schema.COLUMNS WHERE"
+ ." TABLE_SCHEMA = ". $dbh->quote($db_name)
+ ." AND TABLE_NAME = ". $dbh->quote($table)
+ ." AND COLUMN_NAME = ". $dbh->quote($column)
+ ) };
+ return $octet if $octet == $char;
+ }
+ return $dbh->selectrow_arrayref("SELECT MAX(LENGTH(". $dbh->quote_identifier($column) .")) FROM $table")->[0];
+}
+
+sub column_info {
+ my ($table, $column) = @_;
+ # XXX: DBD::mysql doesn't provide this info, may be will do in 4.0007 if I'll write a patch
+ local $dbh->{FetchHashKeyName} = 'NAME_lc';
+ return $dbh->selectrow_hashref("SHOW FULL COLUMNS FROM $table LIKE " . $dbh->quote($column));
+}
+
diff --git a/rt/install-sh b/rt/install-sh
index 11870f1..a5897de 100644
--- a/rt/install-sh
+++ b/rt/install-sh
@@ -1,251 +1,519 @@
#!/bin/sh
-#
# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
+
+scriptversion=2006-12-25.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-# Copyright 1991 by the Massachusetts Institute of Technology
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
+#
+# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
+# from scratch.
+nl='
+'
+IFS=" "" $nl"
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
else
- :
+ doit_exec=$doit
fi
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- chmodcmd=""
- else
- instcmd=$mkdirprog
- fi
-else
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
+src=
+dst=
+dir_arg=
+dst_arg=
- if [ -f "$src" ] || [ -d "$src" ]
- then
- :
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- :
- fi
+copy_on_change=false
+no_target_directory=
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- :
- fi
-fi
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
- '
-IFS="${IFS-${defaultIFS}}"
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
-pathcomp=''
+ -C) copy_on_change=true;;
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
+ -d) dir_arg=true;;
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- :
- fi
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
- pathcomp="${pathcomp}/"
-done
-fi
+ --help) echo "$usage"; exit $?;;
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
-else
+ -o) chowncmd="$chownprog $2"
+ shift;;
-# If we're going to rename the final executable, determine the name now.
+ -s) stripcmd=$stripprog;;
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
+ -t) dst_arg=$2
+ shift;;
-# don't allow the sed command to completely eliminate the filename
+ -T) no_target_directory=true;;
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- :
- fi
-
-# Make a temp file name in the proper directory.
+ --version) echo "$0 $scriptversion"; exit $?;;
- dsttmp=$dstdir/#inst.$$#
+ --) shift
+ break;;
-# Move or copy the file name to the temp name
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
+ *) break;;
+ esac
+ shift
+done
-# and set any options; do chmod last to preserve setuid bits
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ done
+fi
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
-# Now rename the file to the real destination.
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dst_arg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst;;
+ esac
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
-fi &&
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ -*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
-exit 0
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/rt/lib/RT.pm b/rt/lib/RT.pm
index 42c9ea2..3ed85af 100644
--- a/rt/lib/RT.pm
+++ b/rt/lib/RT.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,61 +45,79 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-package RT;
+
use strict;
-use RT::I18N;
-use RT::CurrentUser;
-use RT::System;
-
-use vars qw($VERSION $System $SystemUser $Nobody $Handle $Logger
- $CORE_CONFIG_FILE
- $SITE_CONFIG_FILE
- $BasePath
- $EtcPath
- $VarPath
- $LocalPath
- $LocalEtcPath
- $LocalLexiconPath
- $LogDir
- $BinPath
- $MasonComponentRoot
- $MasonLocalComponentRoot
- $MasonDataDir
- $MasonSessionDir
-);
-
-$VERSION = '3.6.10';
-$CORE_CONFIG_FILE = "/opt/rt3/etc/RT_Config.pm";
-$SITE_CONFIG_FILE = "/opt/rt3/etc/RT_SiteConfig.pm";
-
-
-
-$BasePath = '/opt/rt3';
-
-$EtcPath = '/opt/rt3/etc';
-$BinPath = '/opt/rt3/bin';
-$VarPath = '/opt/rt3/var';
-$LocalPath = '/opt/rt3/local';
-$LocalEtcPath = '/opt/rt3/local/etc';
-$LocalLexiconPath = '/opt/rt3/local/po';
+use warnings;
+
+package RT;
+
+
+use File::Spec ();
+use Cwd ();
+
+use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_INSTALL_MODE);
+
+our $VERSION = '3.8.7';
+
+
+
+our $BasePath = '/opt/rt3';
+our $EtcPath = 'etc';
+our $BinPath = 'bin';
+our $SbinPath = 'sbin';
+our $VarPath = 'var';
+our $PluginPath = 'plugins';
+our $LocalPath = 'local';
+our $LocalEtcPath = 'local/etc';
+our $LocalLibPath = 'local/lib';
+our $LocalLexiconPath = 'local/po';
+our $LocalPluginPath = $LocalPath."/plugins";
+
# $MasonComponentRoot is where your rt instance keeps its mason html files
-$MasonComponentRoot = '/opt/rt3/share/html';
+our $MasonComponentRoot = 'share/html';
# $MasonLocalComponentRoot is where your rt instance keeps its site-local
# mason html files.
-$MasonLocalComponentRoot = '/opt/rt3/local/html';
+our $MasonLocalComponentRoot = 'local/html';
# $MasonDataDir Where mason keeps its datafiles
-$MasonDataDir = '/opt/rt3/var/mason_data';
+our $MasonDataDir = 'var/mason_data';
# RT needs to put session data (for preserving state between connections
# via the web interface)
-$MasonSessionDir = '/opt/rt3/var/session_data';
+our $MasonSessionDir = 'var/session_data';
+
+unless ( File::Spec->file_name_is_absolute($EtcPath) ) {
+
+# if BasePath exists and is absolute, we won't infer it from $INC{'RT.pm'}.
+# otherwise RT.pm will make src dir(where we configure RT) be the BasePath
+# instead of the --prefix one
+ unless ( -d $BasePath && File::Spec->file_name_is_absolute($BasePath) ) {
+ my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1];
+ # need rel2abs here is to make sure path is absolute, since $INC{'RT.pm'}
+ # is not always absolute
+ $BasePath =
+ File::Spec->rel2abs(
+ File::Spec->catdir( $pm_path, File::Spec->updir ) );
+ }
+
+ $BasePath = Cwd::realpath( $BasePath );
+
+ for my $path ( qw/EtcPath BinPath SbinPath VarPath LocalPath LocalEtcPath
+ LocalLibPath LocalLexiconPath PluginPath LocalPluginPath
+ MasonComponentRoot MasonLocalComponentRoot MasonDataDir
+ MasonSessionDir/ ) {
+ no strict 'refs';
+ # just change relative ones
+ $$path = File::Spec->catfile( $BasePath, $$path )
+ unless File::Spec->file_name_is_absolute( $$path );
+ }
+}
=head1 NAME
@@ -112,12 +130,14 @@ A fully featured request tracker package
=head1 DESCRIPTION
+=head2 INITIALIZATION
+
=head2 LoadConfig
Load RT's config file. First, the site configuration file
-(C<RT_SiteConfig.pm>) is loaded, in order to establish overall site
+(F<RT_SiteConfig.pm>) is loaded, in order to establish overall site
settings like hostname and name of RT instance. Then, the core
-configuration file (C<RT_Config.pm>) is loaded to set fallback values
+configuration file (F<RT_Config.pm>) is loaded to set fallback values
for all settings; it bases some values on settings from the site
configuration file.
@@ -128,59 +148,33 @@ have not been set already.
=cut
sub LoadConfig {
- local *Set = sub { $_[0] = $_[1] unless defined $_[0] };
-
- my $username = getpwuid($>);
- my $group = getgrgid($();
- my $message = <<EOF;
-
-RT couldn't load RT config file %s as:
- user: $username
- group: $group
-
-The file is owned by user %s and group %s.
-
-This usually means that the user/group your webserver is running
-as cannot read the file. Be careful not to make the permissions
-on this file too liberal, because it contains database passwords.
-You may need to put the webserver user in the appropriate group
-(%s) or change permissions be able to run succesfully.
-EOF
-
-
- if ( -f "$SITE_CONFIG_FILE" ) {
- eval { require $SITE_CONFIG_FILE };
- if ($@) {
- my ($fileuid,$filegid) = (stat($SITE_CONFIG_FILE))[4,5];
- my $fileusername = getpwuid($fileuid);
- my $filegroup = getgrgid($filegid);
- my $errormessage = sprintf($message, $SITE_CONFIG_FILE,
- $fileusername, $filegroup, $filegroup);
- die ("$errormessage\n$@");
- }
- }
- eval { require $CORE_CONFIG_FILE };
- if ($@) {
- my ($fileuid,$filegid) = (stat($CORE_CONFIG_FILE))[4,5];
- my $fileusername = getpwuid($fileuid);
- my $filegroup = getgrgid($filegid);
- my $errormessage = sprintf($message, $CORE_CONFIG_FILE,
- $fileusername, $filegroup, $filegroup);
- die ("$errormessage\n$@")
- }
+ require RT::Config;
+ $Config = new RT::Config;
+ $Config->LoadConfigs;
+ require RT::I18N;
# RT::Essentials mistakenly recommends that WebPath be set to '/'.
# If the user does that, do what they mean.
$RT::WebPath = '' if ($RT::WebPath eq '/');
- $ENV{'TZ'} = $RT::Timezone if ($RT::Timezone);
+ # fix relative LogDir and GnuPG homedir
+ unless ( File::Spec->file_name_is_absolute( $Config->Get('LogDir') ) ) {
+ $Config->Set( LogDir =>
+ File::Spec->catfile( $BasePath, $Config->Get('LogDir') ) );
+ }
+ my $gpgopts = $Config->Get('GnuPGOptions');
+ unless ( File::Spec->file_name_is_absolute( $gpgopts->{homedir} ) ) {
+ $gpgopts->{homedir} = File::Spec->catfile( $BasePath, $gpgopts->{homedir} );
+ }
+
RT::I18N->Init;
}
=head2 Init
-Conenct to the database, set up logging.
+L<Connect to the database /ConnectToDatabase>, L<initilizes system objects /InitSystemObjects>,
+L<preloads classes /InitClasses> and L<set up logging /InitLogging>.
=cut
@@ -188,41 +182,34 @@ sub Init {
CheckPerlRequirements();
+ InitPluginPaths();
+
#Get a database connection
ConnectToDatabase();
-
- #RT's system user is a genuine database user. its id lives here
- $SystemUser = new RT::CurrentUser();
- $SystemUser->LoadByName('RT_System');
-
- #RT's "nobody user" is a genuine database user. its ID lives here.
- $Nobody = new RT::CurrentUser();
- $Nobody->LoadByName('Nobody');
-
- $System = RT::System->new();
-
+ InitSystemObjects();
InitClasses();
InitLogging();
-}
+ InitPlugins();
+ RT->Config->PostLoadCheck;
+}
=head2 ConnectToDatabase
-Get a database connection
+Get a database connection. See also </Handle>.
=cut
sub ConnectToDatabase {
require RT::Handle;
- unless ($Handle && $Handle->dbh && $Handle->dbh->ping) {
- $Handle = RT::Handle->new();
- }
- $Handle->Connect();
+ $Handle = new RT::Handle unless $Handle;
+ $Handle->Connect;
+ return $Handle;
}
=head2 InitLogging
-Create the RT::Logger object.
+Create the Logger object and set up signal handlers.
=cut
@@ -231,112 +218,141 @@ sub InitLogging {
# We have to set the record separator ($, man perlvar)
# or Log::Dispatch starts getting
# really pissy, as some other module we use unsets it.
-
$, = '';
use Log::Dispatch 1.6;
- unless ($RT::Logger) {
+ my %level_to_num = (
+ map( { $_ => } 0..7 ),
+ debug => 0,
+ info => 1,
+ notice => 2,
+ warning => 3,
+ error => 4, 'err' => 4,
+ critical => 5, crit => 5,
+ alert => 6,
+ emergency => 7, emerg => 7,
+ );
- $RT::Logger = Log::Dispatch->new();
+ unless ( $RT::Logger ) {
- my $simple_cb = sub {
- # if this code throw any warning we can get segfault
- no warnings;
+ $RT::Logger = Log::Dispatch->new;
- my %p = @_;
+ my $stack_from_level;
+ if ( $stack_from_level = RT->Config->Get('LogStackTraces') ) {
+ # if option has old style '\d'(true) value
+ $stack_from_level = 0 if $stack_from_level =~ /^\d+$/;
+ $stack_from_level = $level_to_num{ $stack_from_level } || 0;
+ } else {
+ $stack_from_level = 99; # don't log
+ }
- my $frame = 0; # stack frame index
- # skip Log::* stack frames
- $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ );
+ my $simple_cb = sub {
+ # if this code throw any warning we can get segfault
+ no warnings;
+ my %p = @_;
+
+ # skip Log::* stack frames
+ my $frame = 0;
+ $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
+ my ($package, $filename, $line) = caller($frame);
+
+ $p{'message'} =~ s/(?:\r*\n)+$//;
+ return "[". gmtime(time) ."] [". $p{'level'} ."]: "
+ . $p{'message'} ." ($filename:$line)\n";
+ };
+
+ my $syslog_cb = sub {
+ # if this code throw any warning we can get segfault
+ no warnings;
+ my %p = @_;
+
+ my $frame = 0; # stack frame index
+ # skip Log::* stack frames
+ $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
+ my ($package, $filename, $line) = caller($frame);
+
+ # syswrite() cannot take utf8; turn it off here.
+ Encode::_utf8_off($p{message});
+
+ $p{message} =~ s/(?:\r*\n)+$//;
+ if ($p{level} eq 'debug') {
+ return "$p{message}\n";
+ } else {
+ return "$p{message} ($filename:$line)\n";
+ }
+ };
- my ($package, $filename, $line) = caller($frame);
- $p{message} =~ s/(?:\r*\n)+$//;
- my $str = "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n";
+ my $stack_cb = sub {
+ no warnings;
+ my %p = @_;
+ return $p{'message'} unless $level_to_num{ $p{'level'} } >= $stack_from_level;
+
+ require Devel::StackTrace;
+ my $trace = Devel::StackTrace->new( ignore_class => [ 'Log::Dispatch', 'Log::Dispatch::Base' ] );
+ return $p{'message'} . $trace->as_string;
- if( $RT::LogStackTraces ) {
- $str .= "\nStack trace:\n";
# skip calling of the Log::* subroutins
- $frame++ while( caller($frame) && (caller($frame))[3] =~ /^Log::/ );
+ my $frame = 0;
+ $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
+ $frame++ while caller($frame) && (caller($frame))[3] =~ /^Log::/;
+
+ $p{'message'} .= "\nStack trace:\n";
while( my ($package, $filename, $line, $sub) = caller($frame++) ) {
- $str .= "\t". $sub ."() called at $filename:$line\n";
+ $p{'message'} .= "\t$sub(...) called at $filename:$line\n";
+ }
+ return $p{'message'};
+ };
+
+ if ( $Config->Get('LogToFile') ) {
+ my ($filename, $logdir) = (
+ $Config->Get('LogToFileNamed') || 'rt.log',
+ $Config->Get('LogDir') || File::Spec->catdir( $VarPath, 'log' ),
+ );
+ if ( $filename =~ m![/\\]! ) { # looks like an absolute path.
+ ($logdir) = $filename =~ m{^(.*[/\\])};
+ }
+ else {
+ $filename = File::Spec->catfile( $logdir, $filename );
}
- }
- return $str;
- };
-
- my $syslog_cb = sub {
- my %p = @_;
-
- my $frame = 0; # stack frame index
- # skip Log::* stack frames
- $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ );
- my ($package, $filename, $line) = caller($frame);
- # syswrite() cannot take utf8; turn it off here.
- Encode::_utf8_off($p{message});
+ unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) {
+ # localizing here would be hard when we don't have a current user yet
+ die "Log file '$filename' couldn't be written or created.\n RT can't run.";
+ }
- $p{message} =~ s/(?:\r*\n)+$//;
- if ($p{level} eq 'debug') {
- return "$p{message}\n"
- } else {
- return "$p{message} ($filename:$line)\n"
- }
- };
-
- if ($RT::LogToFile) {
- my ($filename, $logdir);
- if ($RT::LogToFileNamed =~ m![/\\]!) {
- # looks like an absolute path.
- $filename = $RT::LogToFileNamed;
- ($logdir) = $RT::LogToFileNamed =~ m!^(.*[/\\])!;
+ require Log::Dispatch::File;
+ $RT::Logger->add( Log::Dispatch::File->new
+ ( name=>'file',
+ min_level=> $Config->Get('LogToFile'),
+ filename=> $filename,
+ mode=>'append',
+ callbacks => [ $simple_cb, $stack_cb ],
+ ));
}
- else {
- $filename = "$RT::LogDir/$RT::LogToFileNamed";
- $logdir = $RT::LogDir;
+ if ( $Config->Get('LogToScreen') ) {
+ require Log::Dispatch::Screen;
+ $RT::Logger->add( Log::Dispatch::Screen->new
+ ( name => 'screen',
+ min_level => $Config->Get('LogToScreen'),
+ callbacks => [ $simple_cb, $stack_cb ],
+ stderr => 1,
+ ));
}
-
- unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) {
- # localizing here would be hard when we don't have a current user yet
- die "Log file $filename couldn't be written or created.\n RT can't run.";
+ if ( $Config->Get('LogToSyslog') ) {
+ require Log::Dispatch::Syslog;
+ $RT::Logger->add(Log::Dispatch::Syslog->new
+ ( name => 'syslog',
+ ident => 'RT',
+ min_level => $Config->Get('LogToSyslog'),
+ callbacks => [ $syslog_cb, $stack_cb ],
+ stderr => 1,
+ $Config->Get('LogToSyslogConf'),
+ ));
}
-
- package Log::Dispatch::File;
- require Log::Dispatch::File;
- $RT::Logger->add(Log::Dispatch::File->new
- ( name=>'rtlog',
- min_level=> $RT::LogToFile,
- filename=> $filename,
- mode=>'append',
- callbacks => $simple_cb,
- ));
- }
- if ($RT::LogToScreen) {
- package Log::Dispatch::Screen;
- require Log::Dispatch::Screen;
- $RT::Logger->add(Log::Dispatch::Screen->new
- ( name => 'screen',
- min_level => $RT::LogToScreen,
- callbacks => $simple_cb,
- stderr => 1,
- ));
- }
- if ($RT::LogToSyslog) {
- package Log::Dispatch::Syslog;
- require Log::Dispatch::Syslog;
- $RT::Logger->add(Log::Dispatch::Syslog->new
- ( name => 'syslog',
- ident => 'RT',
- min_level => $RT::LogToSyslog,
- callbacks => $syslog_cb,
- stderr => 1,
- @RT::LogToSyslogConf
- ));
- }
-
}
-# {{{ Signal handlers
+# Signal handlers
## This is the default handling of warnings and die'ings in the code
## (including other used modules - maybe except for errors catched by
## Mason). It will log all problems through the standard logging
@@ -355,16 +371,15 @@ sub InitLogging {
#When we call die, trap it and log->crit with the value of the die.
-$SIG{__DIE__} = sub {
- unless ($^S || !defined $^S ) {
- $RT::Handle->Rollback();
- $RT::Logger->crit("$_[0]");
- }
- die $_[0];
-};
-
-# }}}
-
+ $SIG{__DIE__} = sub {
+ # if we are not in eval and perl is not parsing code
+ # then rollback transactions and log RT error
+ unless ($^S || !defined $^S ) {
+ $RT::Handle->Rollback(1) if $RT::Handle;
+ $RT::Logger->crit("$_[0]") if $RT::Logger;
+ }
+ die $_[0];
+ };
}
@@ -400,10 +415,9 @@ EOF
}
}
-
=head2 InitClasses
-Load all modules that define base classes
+Load all modules that define base classes.
=cut
@@ -426,6 +440,8 @@ sub InitClasses {
require RT::ObjectCustomFields;
require RT::ObjectCustomFieldValues;
require RT::Attributes;
+ require RT::Dashboard;
+ require RT::Approval;
# on a cold server (just after restart) people could have an object
# in the session, as we deserialize it so we never call constructor
@@ -452,21 +468,196 @@ sub InitClasses {
);
}
-# }}}
+=head2 InitSystemObjects
+
+Initializes system objects: C<$RT::System>, C<$RT::SystemUser>
+and C<$RT::Nobody>.
+
+=cut
+
+sub InitSystemObjects {
+
+ #RT's system user is a genuine database user. its id lives here
+ require RT::CurrentUser;
+ $SystemUser = new RT::CurrentUser;
+ $SystemUser->LoadByName('RT_System');
+
+ #RT's "nobody user" is a genuine database user. its ID lives here.
+ $Nobody = new RT::CurrentUser;
+ $Nobody->LoadByName('Nobody');
+
+ require RT::System;
+ $System = RT::System->new( $SystemUser );
+}
+
+=head1 CLASS METHODS
+
+=head2 Config
+
+Returns the current L<config object RT::Config>, but note that
+you must L<load config /LoadConfig> first otherwise this method
+returns undef.
+
+Method can be called as class method.
+
+=cut
+
+sub Config { return $Config }
+
+=head2 DatabaseHandle
+
+Returns the current L<database handle object RT::Handle>.
+
+See also L</ConnectToDatabase>.
+
+=cut
+
+sub DatabaseHandle { return $Handle }
+
+=head2 Logger
+
+Returns the logger. See also L</InitLogging>.
+
+=cut
+
+sub Logger { return $Logger }
+
+=head2 System
+
+Returns the current L<system object RT::System>. See also
+L</InitSystemObjects>.
+
+=cut
+
+sub System { return $System }
+
+=head2 SystemUser
+
+Returns the system user's object, it's object of
+L<RT::CurrentUser> class that represents the system. See also
+L</InitSystemObjects>.
+
+=cut
+
+sub SystemUser { return $SystemUser }
+
+=head2 Nobody
+
+Returns object of Nobody. It's object of L<RT::CurrentUser> class
+that represents a user who can own ticket and nothing else. See
+also L</InitSystemObjects>.
+
+=cut
+
+sub Nobody { return $Nobody }
+
+=head2 Plugins
+
+Returns a listref of all Plugins currently configured for this RT instance.
+You can define plugins by adding them to the @Plugins list in your RT_SiteConfig
+
+=cut
+
+our @PLUGINS = ();
+sub Plugins {
+ my $self = shift;
+ unless (@PLUGINS) {
+ $self->InitPluginPaths;
+ @PLUGINS = $self->InitPlugins;
+ }
+ return \@PLUGINS;
+}
+
+=head2 PluginDirs
+
+Takes optional subdir (e.g. po, lib, etc.) and return plugins' dirs that exist.
+
+This code chacke plugins names or anything else and required when main config
+is loaded to load plugins' configs.
+
+=cut
+
+sub PluginDirs {
+ my $self = shift;
+ my $subdir = shift;
+
+ require RT::Plugin;
+
+ my @res;
+ foreach my $plugin (grep $_, RT->Config->Get('Plugins')) {
+ my $path = RT::Plugin->new( name => $plugin )->Path( $subdir );
+ next unless -d $path;
+ push @res, $path;
+ }
+ return @res;
+}
+
+=head2 InitPluginPaths
+
+Push plugins' lib paths into @INC right after F<local/lib>.
+In case F<local/lib> isn't in @INC, append them to @INC
+
+=cut
+
+sub InitPluginPaths {
+ my $self = shift || __PACKAGE__;
+
+ my @lib_dirs = $self->PluginDirs('lib');
+
+ my @tmp_inc;
+ my $added;
+ for (@INC) {
+ if ( Cwd::realpath($_) eq $RT::LocalLibPath) {
+ push @tmp_inc, $_, @lib_dirs;
+ $added = 1;
+ } else {
+ push @tmp_inc, $_;
+ }
+ }
+
+ # append @lib_dirs in case $RT::LocalLibPath isn't in @INC
+ push @tmp_inc, @lib_dirs unless $added;
+
+ my %seen;
+ @INC = grep !$seen{$_}++, @tmp_inc;
+}
+
+=head2 InitPlugins
+
+Initialze all Plugins found in the RT configuration file, setting up their lib and HTML::Mason component roots.
+=cut
+
+sub InitPlugins {
+ my $self = shift;
+ my @plugins;
+ require RT::Plugin;
+ foreach my $plugin (grep $_, RT->Config->Get('Plugins')) {
+ $plugin->require;
+ die $UNIVERSAL::require::ERROR if ($UNIVERSAL::require::ERROR);
+ push @plugins, RT::Plugin->new(name =>$plugin);
+ }
+ return @plugins;
+}
-sub SystemUser {
- return($SystemUser);
-}
-sub Nobody {
- return ($Nobody);
+sub InstallMode {
+ my $self = shift;
+ if (@_) {
+ $_INSTALL_MODE = shift;
+ if($_INSTALL_MODE) {
+ require RT::CurrentUser;
+ $SystemUser = RT::CurrentUser->new();
+ }
+ }
+ return $_INSTALL_MODE;
}
+
=head1 BUGS
-Please report them to rt-bugs@fsck.com, if you know what's broken and have at least
-some idea of what needs to be fixed.
+Please report them to rt-bugs@bestpractical.com, if you know what's
+broken and have at least some idea of what needs to be fixed.
If you're not sure what's going on, report them rt-devel@lists.bestpractical.com.
@@ -475,14 +666,6 @@ If you're not sure what's going on, report them rt-devel@lists.bestpractical.com
L<RT::StyleGuide>
L<DBIx::SearchBuilder>
-=begin testing
-
-ok ($RT::Nobody->Name() eq 'Nobody', "Nobody is nobody");
-ok ($RT::Nobody->Name() ne 'root', "Nobody isn't named root");
-ok ($RT::SystemUser->Name() eq 'RT_System', "The system user is RT_System");
-ok ($RT::SystemUser->Name() ne 'noname', "The system user isn't noname");
-
-=end testing
=cut
diff --git a/rt/lib/RT.pm.in b/rt/lib/RT.pm.in
index 1853110..f0e56e8 100644
--- a/rt/lib/RT.pm.in
+++ b/rt/lib/RT.pm.in
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,61 +45,79 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-package RT;
+
use strict;
-use RT::I18N;
-use RT::CurrentUser;
-use RT::System;
-
-use vars qw($VERSION $System $SystemUser $Nobody $Handle $Logger
- $CORE_CONFIG_FILE
- $SITE_CONFIG_FILE
- $BasePath
- $EtcPath
- $VarPath
- $LocalPath
- $LocalEtcPath
- $LocalLexiconPath
- $LogDir
- $BinPath
- $MasonComponentRoot
- $MasonLocalComponentRoot
- $MasonDataDir
- $MasonSessionDir
-);
-
-$VERSION = '@RT_VERSION_MAJOR@.@RT_VERSION_MINOR@.@RT_VERSION_PATCH@';
-$CORE_CONFIG_FILE = "@CONFIG_FILE_PATH@/RT_Config.pm";
-$SITE_CONFIG_FILE = "@CONFIG_FILE_PATH@/RT_SiteConfig.pm";
+use warnings;
+
+package RT;
+
+
+use File::Spec ();
+use Cwd ();
+
+use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_INSTALL_MODE);
+
+our $VERSION = '@RT_VERSION_MAJOR@.@RT_VERSION_MINOR@.@RT_VERSION_PATCH@';
@DATABASE_ENV_PREF@
-$BasePath = '@RT_PATH@';
+our $BasePath = '@RT_PATH@';
+our $EtcPath = '@RT_ETC_PATH@';
+our $BinPath = '@RT_BIN_PATH@';
+our $SbinPath = '@RT_SBIN_PATH@';
+our $VarPath = '@RT_VAR_PATH@';
+our $PluginPath = '@RT_PLUGIN_PATH@';
+our $LocalPath = '@RT_LOCAL_PATH@';
+our $LocalEtcPath = '@LOCAL_ETC_PATH@';
+our $LocalLibPath = '@LOCAL_LIB_PATH@';
+our $LocalLexiconPath = '@LOCAL_LEXICON_PATH@';
+our $LocalPluginPath = $LocalPath."/plugins";
-$EtcPath = '@RT_ETC_PATH@';
-$BinPath = '@RT_BIN_PATH@';
-$VarPath = '@RT_VAR_PATH@';
-$LocalPath = '@RT_LOCAL_PATH@';
-$LocalEtcPath = '@LOCAL_ETC_PATH@';
-$LocalLexiconPath = '@LOCAL_LEXICON_PATH@';
# $MasonComponentRoot is where your rt instance keeps its mason html files
-$MasonComponentRoot = '@MASON_HTML_PATH@';
+our $MasonComponentRoot = '@MASON_HTML_PATH@';
# $MasonLocalComponentRoot is where your rt instance keeps its site-local
# mason html files.
-$MasonLocalComponentRoot = '@MASON_LOCAL_HTML_PATH@';
+our $MasonLocalComponentRoot = '@MASON_LOCAL_HTML_PATH@';
# $MasonDataDir Where mason keeps its datafiles
-$MasonDataDir = '@MASON_DATA_PATH@';
+our $MasonDataDir = '@MASON_DATA_PATH@';
# RT needs to put session data (for preserving state between connections
# via the web interface)
-$MasonSessionDir = '@MASON_SESSION_PATH@';
+our $MasonSessionDir = '@MASON_SESSION_PATH@';
+
+unless ( File::Spec->file_name_is_absolute($EtcPath) ) {
+# if BasePath exists and is absolute, we won't infer it from $INC{'RT.pm'}.
+# otherwise RT.pm will make src dir(where we configure RT) be the BasePath
+# instead of the --prefix one
+ unless ( -d $BasePath && File::Spec->file_name_is_absolute($BasePath) ) {
+ my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1];
+
+ # need rel2abs here is to make sure path is absolute, since $INC{'RT.pm'}
+ # is not always absolute
+ $BasePath =
+ File::Spec->rel2abs(
+ File::Spec->catdir( $pm_path, File::Spec->updir ) );
+ }
+
+ $BasePath = Cwd::realpath( $BasePath );
+
+ for my $path ( qw/EtcPath BinPath SbinPath VarPath LocalPath LocalEtcPath
+ LocalLibPath LocalLexiconPath PluginPath LocalPluginPath
+ MasonComponentRoot MasonLocalComponentRoot MasonDataDir
+ MasonSessionDir/ ) {
+ no strict 'refs';
+ # just change relative ones
+ $$path = File::Spec->catfile( $BasePath, $$path )
+ unless File::Spec->file_name_is_absolute( $$path );
+ }
+}
=head1 NAME
@@ -112,12 +130,14 @@ A fully featured request tracker package
=head1 DESCRIPTION
+=head2 INITIALIZATION
+
=head2 LoadConfig
Load RT's config file. First, the site configuration file
-(C<RT_SiteConfig.pm>) is loaded, in order to establish overall site
+(F<RT_SiteConfig.pm>) is loaded, in order to establish overall site
settings like hostname and name of RT instance. Then, the core
-configuration file (C<RT_Config.pm>) is loaded to set fallback values
+configuration file (F<RT_Config.pm>) is loaded to set fallback values
for all settings; it bases some values on settings from the site
configuration file.
@@ -128,59 +148,33 @@ have not been set already.
=cut
sub LoadConfig {
- local *Set = sub { $_[0] = $_[1] unless defined $_[0] };
-
- my $username = getpwuid($>);
- my $group = getgrgid($();
- my $message = <<EOF;
-
-RT couldn't load RT config file %s as:
- user: $username
- group: $group
-
-The file is owned by user %s and group %s.
-
-This usually means that the user/group your webserver is running
-as cannot read the file. Be careful not to make the permissions
-on this file too liberal, because it contains database passwords.
-You may need to put the webserver user in the appropriate group
-(%s) or change permissions be able to run succesfully.
-EOF
-
-
- if ( -f "$SITE_CONFIG_FILE" ) {
- eval { require $SITE_CONFIG_FILE };
- if ($@) {
- my ($fileuid,$filegid) = (stat($SITE_CONFIG_FILE))[4,5];
- my $fileusername = getpwuid($fileuid);
- my $filegroup = getgrgid($filegid);
- my $errormessage = sprintf($message, $SITE_CONFIG_FILE,
- $fileusername, $filegroup, $filegroup);
- die ("$errormessage\n$@");
- }
- }
- eval { require $CORE_CONFIG_FILE };
- if ($@) {
- my ($fileuid,$filegid) = (stat($CORE_CONFIG_FILE))[4,5];
- my $fileusername = getpwuid($fileuid);
- my $filegroup = getgrgid($filegid);
- my $errormessage = sprintf($message, $CORE_CONFIG_FILE,
- $fileusername, $filegroup, $filegroup);
- die ("$errormessage\n$@")
- }
+ require RT::Config;
+ $Config = new RT::Config;
+ $Config->LoadConfigs;
+ require RT::I18N;
# RT::Essentials mistakenly recommends that WebPath be set to '/'.
# If the user does that, do what they mean.
$RT::WebPath = '' if ($RT::WebPath eq '/');
- $ENV{'TZ'} = $RT::Timezone if ($RT::Timezone);
+ # fix relative LogDir and GnuPG homedir
+ unless ( File::Spec->file_name_is_absolute( $Config->Get('LogDir') ) ) {
+ $Config->Set( LogDir =>
+ File::Spec->catfile( $BasePath, $Config->Get('LogDir') ) );
+ }
+ my $gpgopts = $Config->Get('GnuPGOptions');
+ unless ( File::Spec->file_name_is_absolute( $gpgopts->{homedir} ) ) {
+ $gpgopts->{homedir} = File::Spec->catfile( $BasePath, $gpgopts->{homedir} );
+ }
+
RT::I18N->Init;
}
=head2 Init
-Conenct to the database, set up logging.
+L<Connect to the database /ConnectToDatabase>, L<initilizes system objects /InitSystemObjects>,
+L<preloads classes /InitClasses> and L<set up logging /InitLogging>.
=cut
@@ -188,41 +182,34 @@ sub Init {
CheckPerlRequirements();
+ InitPluginPaths();
+
#Get a database connection
ConnectToDatabase();
-
- #RT's system user is a genuine database user. its id lives here
- $SystemUser = new RT::CurrentUser();
- $SystemUser->LoadByName('RT_System');
-
- #RT's "nobody user" is a genuine database user. its ID lives here.
- $Nobody = new RT::CurrentUser();
- $Nobody->LoadByName('Nobody');
-
- $System = RT::System->new();
-
+ InitSystemObjects();
InitClasses();
InitLogging();
-}
+ InitPlugins();
+ RT->Config->PostLoadCheck;
+}
=head2 ConnectToDatabase
-Get a database connection
+Get a database connection. See also </Handle>.
=cut
sub ConnectToDatabase {
require RT::Handle;
- unless ($Handle && $Handle->dbh && $Handle->dbh->ping) {
- $Handle = RT::Handle->new();
- }
- $Handle->Connect();
+ $Handle = new RT::Handle unless $Handle;
+ $Handle->Connect;
+ return $Handle;
}
=head2 InitLogging
-Create the RT::Logger object.
+Create the Logger object and set up signal handlers.
=cut
@@ -231,112 +218,141 @@ sub InitLogging {
# We have to set the record separator ($, man perlvar)
# or Log::Dispatch starts getting
# really pissy, as some other module we use unsets it.
-
$, = '';
use Log::Dispatch 1.6;
- unless ($RT::Logger) {
+ my %level_to_num = (
+ map( { $_ => } 0..7 ),
+ debug => 0,
+ info => 1,
+ notice => 2,
+ warning => 3,
+ error => 4, 'err' => 4,
+ critical => 5, crit => 5,
+ alert => 6,
+ emergency => 7, emerg => 7,
+ );
- $RT::Logger = Log::Dispatch->new();
+ unless ( $RT::Logger ) {
- my $simple_cb = sub {
- # if this code throw any warning we can get segfault
- no warnings;
+ $RT::Logger = Log::Dispatch->new;
- my %p = @_;
+ my $stack_from_level;
+ if ( $stack_from_level = RT->Config->Get('LogStackTraces') ) {
+ # if option has old style '\d'(true) value
+ $stack_from_level = 0 if $stack_from_level =~ /^\d+$/;
+ $stack_from_level = $level_to_num{ $stack_from_level } || 0;
+ } else {
+ $stack_from_level = 99; # don't log
+ }
- my $frame = 0; # stack frame index
- # skip Log::* stack frames
- $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ );
+ my $simple_cb = sub {
+ # if this code throw any warning we can get segfault
+ no warnings;
+ my %p = @_;
+
+ # skip Log::* stack frames
+ my $frame = 0;
+ $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
+ my ($package, $filename, $line) = caller($frame);
+
+ $p{'message'} =~ s/(?:\r*\n)+$//;
+ return "[". gmtime(time) ."] [". $p{'level'} ."]: "
+ . $p{'message'} ." ($filename:$line)\n";
+ };
+
+ my $syslog_cb = sub {
+ # if this code throw any warning we can get segfault
+ no warnings;
+ my %p = @_;
+
+ my $frame = 0; # stack frame index
+ # skip Log::* stack frames
+ $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
+ my ($package, $filename, $line) = caller($frame);
+
+ # syswrite() cannot take utf8; turn it off here.
+ Encode::_utf8_off($p{message});
+
+ $p{message} =~ s/(?:\r*\n)+$//;
+ if ($p{level} eq 'debug') {
+ return "$p{message}\n";
+ } else {
+ return "$p{message} ($filename:$line)\n";
+ }
+ };
- my ($package, $filename, $line) = caller($frame);
- $p{message} =~ s/(?:\r*\n)+$//;
- my $str = "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n";
+ my $stack_cb = sub {
+ no warnings;
+ my %p = @_;
+ return $p{'message'} unless $level_to_num{ $p{'level'} } >= $stack_from_level;
+
+ require Devel::StackTrace;
+ my $trace = Devel::StackTrace->new( ignore_class => [ 'Log::Dispatch', 'Log::Dispatch::Base' ] );
+ return $p{'message'} . $trace->as_string;
- if( $RT::LogStackTraces ) {
- $str .= "\nStack trace:\n";
# skip calling of the Log::* subroutins
- $frame++ while( caller($frame) && (caller($frame))[3] =~ /^Log::/ );
+ my $frame = 0;
+ $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
+ $frame++ while caller($frame) && (caller($frame))[3] =~ /^Log::/;
+
+ $p{'message'} .= "\nStack trace:\n";
while( my ($package, $filename, $line, $sub) = caller($frame++) ) {
- $str .= "\t". $sub ."() called at $filename:$line\n";
+ $p{'message'} .= "\t$sub(...) called at $filename:$line\n";
+ }
+ return $p{'message'};
+ };
+
+ if ( $Config->Get('LogToFile') ) {
+ my ($filename, $logdir) = (
+ $Config->Get('LogToFileNamed') || 'rt.log',
+ $Config->Get('LogDir') || File::Spec->catdir( $VarPath, 'log' ),
+ );
+ if ( $filename =~ m![/\\]! ) { # looks like an absolute path.
+ ($logdir) = $filename =~ m{^(.*[/\\])};
+ }
+ else {
+ $filename = File::Spec->catfile( $logdir, $filename );
}
- }
- return $str;
- };
-
- my $syslog_cb = sub {
- my %p = @_;
-
- my $frame = 0; # stack frame index
- # skip Log::* stack frames
- $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ );
- my ($package, $filename, $line) = caller($frame);
- # syswrite() cannot take utf8; turn it off here.
- Encode::_utf8_off($p{message});
+ unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) {
+ # localizing here would be hard when we don't have a current user yet
+ die "Log file '$filename' couldn't be written or created.\n RT can't run.";
+ }
- $p{message} =~ s/(?:\r*\n)+$//;
- if ($p{level} eq 'debug') {
- return "$p{message}\n"
- } else {
- return "$p{message} ($filename:$line)\n"
+ require Log::Dispatch::File;
+ $RT::Logger->add( Log::Dispatch::File->new
+ ( name=>'file',
+ min_level=> $Config->Get('LogToFile'),
+ filename=> $filename,
+ mode=>'append',
+ callbacks => [ $simple_cb, $stack_cb ],
+ ));
}
- };
-
- if ($RT::LogToFile) {
- my ($filename, $logdir);
- if ($RT::LogToFileNamed =~ m![/\\]!) {
- # looks like an absolute path.
- $filename = $RT::LogToFileNamed;
- ($logdir) = $RT::LogToFileNamed =~ m!^(.*[/\\])!;
+ if ( $Config->Get('LogToScreen') ) {
+ require Log::Dispatch::Screen;
+ $RT::Logger->add( Log::Dispatch::Screen->new
+ ( name => 'screen',
+ min_level => $Config->Get('LogToScreen'),
+ callbacks => [ $simple_cb, $stack_cb ],
+ stderr => 1,
+ ));
}
- else {
- $filename = "$RT::LogDir/$RT::LogToFileNamed";
- $logdir = $RT::LogDir;
- }
-
- unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) {
- # localizing here would be hard when we don't have a current user yet
- die "Log file $filename couldn't be written or created.\n RT can't run.";
+ if ( $Config->Get('LogToSyslog') ) {
+ require Log::Dispatch::Syslog;
+ $RT::Logger->add(Log::Dispatch::Syslog->new
+ ( name => 'syslog',
+ ident => 'RT',
+ min_level => $Config->Get('LogToSyslog'),
+ callbacks => [ $syslog_cb, $stack_cb ],
+ stderr => 1,
+ $Config->Get('LogToSyslogConf'),
+ ));
}
-
- package Log::Dispatch::File;
- require Log::Dispatch::File;
- $RT::Logger->add(Log::Dispatch::File->new
- ( name=>'rtlog',
- min_level=> $RT::LogToFile,
- filename=> $filename,
- mode=>'append',
- callbacks => $simple_cb,
- ));
- }
- if ($RT::LogToScreen) {
- package Log::Dispatch::Screen;
- require Log::Dispatch::Screen;
- $RT::Logger->add(Log::Dispatch::Screen->new
- ( name => 'screen',
- min_level => $RT::LogToScreen,
- callbacks => $simple_cb,
- stderr => 1,
- ));
- }
- if ($RT::LogToSyslog) {
- package Log::Dispatch::Syslog;
- require Log::Dispatch::Syslog;
- $RT::Logger->add(Log::Dispatch::Syslog->new
- ( name => 'syslog',
- ident => 'RT',
- min_level => $RT::LogToSyslog,
- callbacks => $syslog_cb,
- stderr => 1,
- @RT::LogToSyslogConf
- ));
- }
-
}
-# {{{ Signal handlers
+# Signal handlers
## This is the default handling of warnings and die'ings in the code
## (including other used modules - maybe except for errors catched by
## Mason). It will log all problems through the standard logging
@@ -355,16 +371,15 @@ sub InitLogging {
#When we call die, trap it and log->crit with the value of the die.
-$SIG{__DIE__} = sub {
- unless ($^S || !defined $^S ) {
- $RT::Handle->Rollback();
- $RT::Logger->crit("$_[0]");
- }
- die $_[0];
-};
-
-# }}}
-
+ $SIG{__DIE__} = sub {
+ # if we are not in eval and perl is not parsing code
+ # then rollback transactions and log RT error
+ unless ($^S || !defined $^S ) {
+ $RT::Handle->Rollback(1) if $RT::Handle;
+ $RT::Logger->crit("$_[0]") if $RT::Logger;
+ }
+ die $_[0];
+ };
}
@@ -400,10 +415,9 @@ EOF
}
}
-
=head2 InitClasses
-Load all modules that define base classes
+Load all modules that define base classes.
=cut
@@ -426,6 +440,8 @@ sub InitClasses {
require RT::ObjectCustomFields;
require RT::ObjectCustomFieldValues;
require RT::Attributes;
+ require RT::Dashboard;
+ require RT::Approval;
# on a cold server (just after restart) people could have an object
# in the session, as we deserialize it so we never call constructor
@@ -452,21 +468,196 @@ sub InitClasses {
);
}
-# }}}
+=head2 InitSystemObjects
+
+Initializes system objects: C<$RT::System>, C<$RT::SystemUser>
+and C<$RT::Nobody>.
+
+=cut
+
+sub InitSystemObjects {
+
+ #RT's system user is a genuine database user. its id lives here
+ require RT::CurrentUser;
+ $SystemUser = new RT::CurrentUser;
+ $SystemUser->LoadByName('RT_System');
+
+ #RT's "nobody user" is a genuine database user. its ID lives here.
+ $Nobody = new RT::CurrentUser;
+ $Nobody->LoadByName('Nobody');
+
+ require RT::System;
+ $System = RT::System->new( $SystemUser );
+}
+
+=head1 CLASS METHODS
+
+=head2 Config
+
+Returns the current L<config object RT::Config>, but note that
+you must L<load config /LoadConfig> first otherwise this method
+returns undef.
+
+Method can be called as class method.
+
+=cut
+
+sub Config { return $Config }
+
+=head2 DatabaseHandle
+
+Returns the current L<database handle object RT::Handle>.
+
+See also L</ConnectToDatabase>.
+
+=cut
+
+sub DatabaseHandle { return $Handle }
+
+=head2 Logger
+
+Returns the logger. See also L</InitLogging>.
+
+=cut
+
+sub Logger { return $Logger }
+
+=head2 System
+
+Returns the current L<system object RT::System>. See also
+L</InitSystemObjects>.
+
+=cut
+
+sub System { return $System }
+
+=head2 SystemUser
+
+Returns the system user's object, it's object of
+L<RT::CurrentUser> class that represents the system. See also
+L</InitSystemObjects>.
+
+=cut
+
+sub SystemUser { return $SystemUser }
+
+=head2 Nobody
+
+Returns object of Nobody. It's object of L<RT::CurrentUser> class
+that represents a user who can own ticket and nothing else. See
+also L</InitSystemObjects>.
+
+=cut
+
+sub Nobody { return $Nobody }
+
+=head2 Plugins
+
+Returns a listref of all Plugins currently configured for this RT instance.
+You can define plugins by adding them to the @Plugins list in your RT_SiteConfig
+
+=cut
+
+our @PLUGINS = ();
+sub Plugins {
+ my $self = shift;
+ unless (@PLUGINS) {
+ $self->InitPluginPaths;
+ @PLUGINS = $self->InitPlugins;
+ }
+ return \@PLUGINS;
+}
+
+=head2 PluginDirs
+
+Takes optional subdir (e.g. po, lib, etc.) and return plugins' dirs that exist.
+
+This code chacke plugins names or anything else and required when main config
+is loaded to load plugins' configs.
+
+=cut
+sub PluginDirs {
+ my $self = shift;
+ my $subdir = shift;
-sub SystemUser {
- return($SystemUser);
-}
+ require RT::Plugin;
-sub Nobody {
- return ($Nobody);
+ my @res;
+ foreach my $plugin (grep $_, RT->Config->Get('Plugins')) {
+ my $path = RT::Plugin->new( name => $plugin )->Path( $subdir );
+ next unless -d $path;
+ push @res, $path;
+ }
+ return @res;
}
+=head2 InitPluginPaths
+
+Push plugins' lib paths into @INC right after F<local/lib>.
+In case F<local/lib> isn't in @INC, append them to @INC
+
+=cut
+
+sub InitPluginPaths {
+ my $self = shift || __PACKAGE__;
+
+ my @lib_dirs = $self->PluginDirs('lib');
+
+ my @tmp_inc;
+ my $added;
+ for (@INC) {
+ if ( Cwd::realpath($_) eq $RT::LocalLibPath) {
+ push @tmp_inc, $_, @lib_dirs;
+ $added = 1;
+ } else {
+ push @tmp_inc, $_;
+ }
+ }
+
+ # append @lib_dirs in case $RT::LocalLibPath isn't in @INC
+ push @tmp_inc, @lib_dirs unless $added;
+
+ my %seen;
+ @INC = grep !$seen{$_}++, @tmp_inc;
+}
+
+=head2 InitPlugins
+
+Initialze all Plugins found in the RT configuration file, setting up their lib and HTML::Mason component roots.
+
+=cut
+
+sub InitPlugins {
+ my $self = shift;
+ my @plugins;
+ require RT::Plugin;
+ foreach my $plugin (grep $_, RT->Config->Get('Plugins')) {
+ $plugin->require;
+ die $UNIVERSAL::require::ERROR if ($UNIVERSAL::require::ERROR);
+ push @plugins, RT::Plugin->new(name =>$plugin);
+ }
+ return @plugins;
+}
+
+
+sub InstallMode {
+ my $self = shift;
+ if (@_) {
+ $_INSTALL_MODE = shift;
+ if($_INSTALL_MODE) {
+ require RT::CurrentUser;
+ $SystemUser = RT::CurrentUser->new();
+ }
+ }
+ return $_INSTALL_MODE;
+}
+
+
=head1 BUGS
-Please report them to rt-bugs@fsck.com, if you know what's broken and have at least
-some idea of what needs to be fixed.
+Please report them to rt-bugs@bestpractical.com, if you know what's
+broken and have at least some idea of what needs to be fixed.
If you're not sure what's going on, report them rt-devel@lists.bestpractical.com.
@@ -475,14 +666,6 @@ If you're not sure what's going on, report them rt-devel@lists.bestpractical.com
L<RT::StyleGuide>
L<DBIx::SearchBuilder>
-=begin testing
-
-ok ($RT::Nobody->Name() eq 'Nobody', "Nobody is nobody");
-ok ($RT::Nobody->Name() ne 'root', "Nobody isn't named root");
-ok ($RT::SystemUser->Name() eq 'RT_System', "The system user is RT_System");
-ok ($RT::SystemUser->Name() ne 'noname', "The system user isn't noname");
-
-=end testing
=cut
diff --git a/rt/lib/RT/ACE.pm b/rt/lib/RT/ACE.pm
index 0cd1217..7f21ba0 100755
--- a/rt/lib/RT/ACE.pm
+++ b/rt/lib/RT/ACE.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -68,11 +69,7 @@ RT::ACE
=cut
package RT::ACE;
-use RT::Record;
-
-
-use vars qw( @ISA );
-@ISA= qw( RT::Record );
+use base 'RT::Record';
sub _Init {
my $self = shift;
diff --git a/rt/lib/RT/ACE_Overlay.pm b/rt/lib/RT/ACE_Overlay.pm
index 1a245f3..f2a2efd 100644
--- a/rt/lib/RT/ACE_Overlay.pm
+++ b/rt/lib/RT/ACE_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 SYNOPSIS
use RT::ACE;
@@ -57,11 +58,6 @@
=head1 METHODS
-=begin testing
-
-ok(require RT::ACE);
-
-=end testing
=cut
@@ -89,15 +85,6 @@ use vars qw (
# to real people or groups
-=begin testing
-
-my $Queue = RT::Queue->new($RT::SystemUser);
-
-is ($Queue->AvailableRights->{'DeleteTicket'} , 'Delete tickets', "Found the delete ticket right");
-is ($RT::System->AvailableRights->{'SuperUser'}, 'Do anything and everything', "Found the superuser right");
-
-
-=end testing
=cut
@@ -149,6 +136,14 @@ sub LoadByValues {
ObjectType => undef,
@_ );
+ if ( $args{'RightName'} ) {
+ my $canonic_name = $self->CanonicalizeRightName( $args{'RightName'} );
+ unless ( $canonic_name ) {
+ return ( 0, $self->loc("Invalid right. Couldn't canonicalize right '[_1]'", $args{'RightName'}) );
+ }
+ $args{'RightName'} = $canonic_name;
+ }
+
my $princ_obj;
( $princ_obj, $args{'PrincipalType'} ) =
$self->_CanonicalizePrincipal( $args{'PrincipalId'},
@@ -216,11 +211,18 @@ PARAMS is a parameter hash with the following elements:
sub Create {
my $self = shift;
- my %args = ( PrincipalId => undef,
- PrincipalType => undef,
- RightName => undef,
- Object => undef,
- @_ );
+ my %args = (
+ PrincipalId => undef,
+ PrincipalType => undef,
+ RightName => undef,
+ Object => undef,
+ @_
+ );
+
+ unless ( $args{'RightName'} ) {
+ return ( 0, $self->loc('No right specified') );
+ }
+
#if we haven't specified any sort of right, we're talking about a global right
if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) {
$args{'Object'} = $RT::System;
@@ -262,37 +264,23 @@ sub Create {
# }}}
# {{{ Canonicalize and check the right name
- unless ( $args{'RightName'} ) {
- return ( 0, $self->loc('Invalid right') );
+ my $canonic_name = $self->CanonicalizeRightName( $args{'RightName'} );
+ unless ( $canonic_name ) {
+ return ( 0, $self->loc("Invalid right. Couldn't canonicalize right '[_1]'", $args{'RightName'}) );
}
-
- $args{'RightName'} = $self->CanonicalizeRightName( $args{'RightName'} );
+ $args{'RightName'} = $canonic_name;
#check if it's a valid RightName
- if ( ref ($args{'Object'} eq 'RT::Queue' )) {
- unless ( exists $args{'Object'}->AvailableRights->{ $args{'RightName'} } ) {
- $RT::Logger->warning("Couldn't validate right name". $args{'RightName'});
- return ( 0, $self->loc('Invalid right') );
- }
- }
- elsif ( ref ($args{'Object'} eq 'RT::Group' )) {
- unless ( exists $args{'Object'}->AvailableRights->{ $args{'RightName'} } ) {
- $RT::Logger->warning("Couldn't validate group right name". $args{'RightName'});
- return ( 0, $self->loc('Invalid right') );
- }
- }
- elsif ( ref ($args{'Object'} eq 'RT::System' )) {
- my $q = RT::Queue->new($self->CurrentUser);
- my $g = RT::Group->new($self->CurrentUser);
-
- unless (( exists $g->AvailableRights->{ $args{'RightName'} } )
- || ( exists $g->AvailableRights->{ $args{'RightName'} } )
- || ( exists $RT::System->AvailableRights->{ $args{'RightName'} } ) ) {
- $RT::Logger->warning("Couldn't validate system right name - ". $args{'RightName'});
+ if ( $args{'Object'}->can('AvailableRights') ) {
+ my $available = $args{'Object'}->AvailableRights;
+ unless ( grep $_ eq $args{'RightName'}, map $self->CanonicalizeRightName( $_ ), keys %$available ) {
+ $RT::Logger->warning(
+ "Couldn't validate right name '$args{'RightName'}'"
+ ." for object of ". ref( $args{'Object'} ) ." class"
+ );
return ( 0, $self->loc('Invalid right') );
}
}
-
# }}}
# Make sure the right doesn't already exist.
@@ -318,7 +306,7 @@ sub Create {
#Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space.
RT::Principal->InvalidateACLCache();
- if ( $id > 0 ) {
+ if ( $id ) {
return ( $id, $self->loc('Right Granted') );
}
else {
@@ -340,216 +328,6 @@ or doesn't have the right to delegate rights.
Always returns a tuple of (ReturnValue, Message)
-=begin testing
-
-use_ok(RT::User);
-my $user_a = RT::User->new($RT::SystemUser);
-$user_a->Create( Name => 'DelegationA', Privileged => 1);
-ok ($user_a->Id, "Created delegation user a");
-
-my $user_b = RT::User->new($RT::SystemUser);
-$user_b->Create( Name => 'DelegationB', Privileged => 1);
-ok ($user_b->Id, "Created delegation user b");
-
-
-use_ok(RT::Queue);
-my $q = RT::Queue->new($RT::SystemUser);
-$q->Create(Name =>'DelegationTest');
-ok ($q->Id, "Created a delegation test queue");
-
-
-#------ First, we test whether a user can delegate a right that's been granted to him personally
-my ($val, $msg) = $user_a->PrincipalObj->GrantRight(Object => $RT::System, Right => 'AdminOwnPersonalGroups');
-ok($val, $msg);
-
-($val, $msg) = $user_a->PrincipalObj->GrantRight(Object =>$q, Right => 'OwnTicket');
-ok($val, $msg);
-
-ok($user_a->HasRight( Object => $RT::System, Right => 'AdminOwnPersonalGroups') ,"user a has the right 'AdminOwnPersonalGroups' directly");
-
-my $a_delegates = RT::Group->new($user_a);
-$a_delegates->CreatePersonalGroup(Name => 'Delegates');
-ok( $a_delegates->Id ,"user a creates a personal group 'Delegates'");
-ok( $a_delegates->AddMember($user_b->PrincipalId) ,"user a adds user b to personal group 'delegates'");
-
-ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to OwnTicket' in queue 'DelegationTest'");
-ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to 'OwnTicket' in queue 'DelegationTest'");
-ok(!$user_a->HasRight( Object => $RT::System, Right => 'DelegateRights') ,"user a does not have the right 'delegate rights'");
-
-
-my $own_ticket_ace = RT::ACE->new($user_a);
-my $user_a_equiv_group = RT::Group->new($user_a);
-$user_a_equiv_group->LoadACLEquivalenceGroup($user_a->PrincipalObj);
-ok ($user_a_equiv_group->Id, "Loaded the user A acl equivalence group");
-my $user_b_equiv_group = RT::Group->new($user_b);
-$user_b_equiv_group->LoadACLEquivalenceGroup($user_b->PrincipalObj);
-ok ($user_b_equiv_group->Id, "Loaded the user B acl equivalence group");
-$own_ticket_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $user_a_equiv_group->PrincipalId, Object=>$q, RightName => 'OwnTicket');
-
-ok ($own_ticket_ace->Id, "Found the ACE we want to test with for now");
-
-
-($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ;
-ok( !$val ,"user a tries and fails to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
-
-
-($val, $msg) = $user_a->PrincipalObj->GrantRight( Right => 'DelegateRights');
-ok($val, "user a is granted the right to 'delegate rights' - $msg");
-
-ok($user_a->HasRight( Object => $RT::System, Right => 'DelegateRights') ,"user a has the right 'AdminOwnPersonalGroups' directly");
-
-($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ;
-
-ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
-ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
-my $delegated_ace = RT::ACE->new($user_a);
-$delegated_ace->LoadByValues ( Object => $q, RightName => 'OwnTicket', PrincipalType => 'Group',
-PrincipalId => $a_delegates->PrincipalId, DelegatedBy => $user_a->PrincipalId, DelegatedFrom => $own_ticket_ace->Id);
-ok ($delegated_ace->Id, "Found the delegated ACE");
-
-ok( $a_delegates->DeleteMember($user_b->PrincipalId) ,"user a removes b from pg 'delegates'");
-ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
-ok( $a_delegates->AddMember($user_b->PrincipalId) ,"user a adds user b to personal group 'delegates'");
-ok( $user_b->HasRight(Right => 'OwnTicket', Object=> $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
-ok( $delegated_ace->Delete ,"user a revokes pg 'delegates' right to 'OwnTickets' in queue 'DelegationTest'");
-ok( ! $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
-
-($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ;
-ok( $val ,"user a delegates pg 'delegates' right to 'OwnTickets' in queue 'DelegationTest' - $msg");
-
-ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'");
-
-($val, $msg) = $user_a->PrincipalObj->RevokeRight(Object=>$q, Right => 'OwnTicket');
-ok($val, "Revoked user a's right to own tickets in queue 'DelegationTest". $msg);
-
-ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'");
-
- ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
-
-($val, $msg) = $user_a->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket');
-ok($val, $msg);
-
- ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to own tickets in queue 'DelegationTest'");
-
- ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
-
-# {{{ get back to a known clean state
-($val, $msg) = $user_a->PrincipalObj->RevokeRight( Object => $q, Right => 'OwnTicket');
-ok($val, "Revoked user a's right to own tickets in queue 'DelegationTest -". $msg);
-ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"make sure that user a can't own tickets in queue 'DelegationTest'");
-# }}}
-
-
-# {{{ Set up some groups and membership
-my $del1 = RT::Group->new($RT::SystemUser);
-($val, $msg) = $del1->CreateUserDefinedGroup(Name => 'Del1');
-ok( $val ,"create a group del1 - $msg");
-
-my $del2 = RT::Group->new($RT::SystemUser);
-($val, $msg) = $del2->CreateUserDefinedGroup(Name => 'Del2');
-ok( $val ,"create a group del2 - $msg");
-($val, $msg) = $del1->AddMember($del2->PrincipalId);
-ok( $val,"make del2 a member of del1 - $msg");
-
-my $del2a = RT::Group->new($RT::SystemUser);
-($val, $msg) = $del2a->CreateUserDefinedGroup(Name => 'Del2a');
-ok( $val ,"create a group del2a - $msg");
-($val, $msg) = $del2->AddMember($del2a->PrincipalId);
-ok($val ,"make del2a a member of del2 - $msg");
-
-my $del2b = RT::Group->new($RT::SystemUser);
-($val, $msg) = $del2b->CreateUserDefinedGroup(Name => 'Del2b');
-ok( $val ,"create a group del2b - $msg");
-($val, $msg) = $del2->AddMember($del2b->PrincipalId);
-ok($val ,"make del2b a member of del2 - $msg");
-
-($val, $msg) = $del2->AddMember($user_a->PrincipalId) ;
-ok($val,"make 'user a' a member of del2 - $msg");
-
-($val, $msg) = $del2b->AddMember($user_a->PrincipalId) ;
-ok($val,"make 'user a' a member of del2b - $msg");
-
-# }}}
-
-# {{{ Grant a right to a group and make sure that a submember can delegate the right and that it does not get yanked
-# when a user is removed as a submember, when they're a sumember through another path
-($val, $msg) = $del1->PrincipalObj->GrantRight( Object=> $q, Right => 'OwnTicket');
-ok( $val ,"grant del1 the right to 'OwnTicket' in queue 'DelegationTest' - $msg");
-
-ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"make sure that user a can own tickets in queue 'DelegationTest'");
-
-my $group_ace= RT::ACE->new($user_a);
-$group_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $del1->PrincipalId, Object => $q, RightName => 'OwnTicket');
-
-ok ($group_ace->Id, "Found the ACE we want to test with for now");
-
-($val, $msg) = $group_ace->Delegate(PrincipalId => $a_delegates->PrincipalId);
-
-ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
-ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
-
-
-($val, $msg) = $del2b->DeleteMember($user_a->PrincipalId);
-ok( $val ,"remove user a from group del2b - $msg");
-ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to own tickets in queue 'DelegationTest'");
-ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
-
-# }}}
-
-# {{{ When a user is removed froom a group by the only path they're in there by, make sure the delegations go away
-($val, $msg) = $del2->DeleteMember($user_a->PrincipalId);
-ok( $val ,"remove user a from group del2 - $msg");
-ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest' ");
-ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest' ");
-# }}}
-
-($val, $msg) = $del2->AddMember($user_a->PrincipalId);
-ok( $val ,"make user a a member of group del2 - $msg");
-
-($val, $msg) = $del2->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket');
-ok($val, "grant the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg");
-
-my $del2_right = RT::ACE->new($user_a);
-$del2_right->LoadByValues( PrincipalId => $del2->PrincipalId, PrincipalType => 'Group', Object => $q, RightName => 'OwnTicket');
-ok ($del2_right->Id, "Found the right");
-
-($val, $msg) = $del2_right->Delegate(PrincipalId => $a_delegates->PrincipalId);
-ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' gotten via del2 to personal group 'delegates' - $msg");
-
-# They have it via del1 and del2
-ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
-
-
-($val, $msg) = $del2->PrincipalObj->RevokeRight(Object=>$q, Right => 'OwnTicket');
-ok($val, "revoke the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg");
-ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does has the right to own tickets in queue 'DelegationTest' via del1");
-ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
-
-($val, $msg) = $del2->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket');
-ok($val, "grant the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg");
-
-
-$group_ace= RT::ACE->new($user_a);
-$group_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $del1->PrincipalId, Object=>$q, RightName => 'OwnTicket');
-
-ok ($group_ace->Id, "Found the ACE we want to test with for now");
-
-($val, $msg) = $group_ace->Delegate(PrincipalId => $a_delegates->PrincipalId);
-
-ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
-
-ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
-
-($val, $msg) = $del2->DeleteMember($user_a->PrincipalId);
-ok( $val ,"remove user a from group del2 - $msg");
-
-ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'");
-
-ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
-
-
-
-=end testing
=cut
@@ -762,6 +540,20 @@ sub _BootstrapCreate {
# {{{ sub CanonicalizeRightName
+sub RightName {
+ my $self = shift;
+ my $val = $self->_Value('RightName');
+ return $val unless $val;
+
+ my $available = $self->Object->AvailableRights;
+ foreach my $right ( keys %$available ) {
+ return $right if $val eq $self->CanonicalizeRightName($right);
+ }
+
+ $RT::Logger->error("Invalid right. Couldn't canonicalize right '$val'");
+ return $val;
+}
+
=head2 CanonicalizeRightName <RIGHT>
Takes a queue or system right name in any case and returns it in
@@ -771,14 +563,7 @@ the correct case. If it's not found, will return undef.
sub CanonicalizeRightName {
my $self = shift;
- my $right = shift;
- $right = lc $right;
- if ( exists $LOWERCASERIGHTNAMES{"$right"} ) {
- return ( $LOWERCASERIGHTNAMES{"$right"} );
- }
- else {
- return (undef);
- }
+ return $LOWERCASERIGHTNAMES{ lc shift };
}
# }}}
@@ -899,7 +684,7 @@ Returns a tuple of (RT::Principal, PrincipalType) for the principal we really
sub _CanonicalizePrincipal {
my $self = shift;
my $princ_id = shift;
- my $princ_type = shift;
+ my $princ_type = shift || '';
my $princ_obj = RT::Principal->new($RT::SystemUser);
$princ_obj->Load($princ_id);
diff --git a/rt/lib/RT/ACL.pm b/rt/lib/RT/ACL.pm
index 9641292..1dc66e8 100755
--- a/rt/lib/RT/ACL.pm
+++ b/rt/lib/RT/ACL.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -71,12 +72,9 @@ use strict;
package RT::ACL;
-use RT::SearchBuilder;
+use base 'RT::SearchBuilder';
use RT::ACE;
-use vars qw( @ISA );
-@ISA= qw(RT::SearchBuilder);
-
sub _Init {
my $self = shift;
diff --git a/rt/lib/RT/ACL_Overlay.pm b/rt/lib/RT/ACL_Overlay.pm
index 1329df0..d645e40 100644
--- a/rt/lib/RT/ACL_Overlay.pm
+++ b/rt/lib/RT/ACL_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::ACL - collection of RT ACE objects
@@ -59,11 +60,6 @@ my $ACL = new RT::ACL($CurrentUser);
=head1 METHODS
-=begin testing
-
-ok(require RT::ACL);
-
-=end testing
=cut
@@ -318,7 +314,7 @@ sub _DoSearch {
my $self = shift;
# $RT::Logger->debug("Now in ".$self."->_DoSearch");
my $return = $self->SUPER::_DoSearch(@_);
- # $RT::Logger->debug("In $self ->_DoSearch. return from SUPER::_DoSearch was $return\n");
+ # $RT::Logger->debug("In $self ->_DoSearch. return from SUPER::_DoSearch was $return");
$self->_BuildHash();
return ($return);
}
@@ -329,7 +325,8 @@ sub _BuildHash {
my $self = shift;
while (my $entry = $self->Next) {
- my $hashkey = $entry->ObjectType . "-" . $entry->ObjectId . "-" . $entry->RightName . "-" . $entry->PrincipalId . "-" . $entry->PrincipalType;
+ my $hashkey = join '-', map $entry->__Value( $_ ),
+ qw(ObjectType ObjectId RightName PrincipalId PrincipalType);
$self->{'as_hash'}->{"$hashkey"} =1;
diff --git a/rt/lib/RT/Action.pm b/rt/lib/RT/Action.pm
new file mode 100755
index 0000000..1918a7e
--- /dev/null
+++ b/rt/lib/RT/Action.pm
@@ -0,0 +1,227 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+ RT::Action - a generic baseclass for RT Actions
+
+=head1 SYNOPSIS
+
+ use RT::Action;
+
+=head1 DESCRIPTION
+
+=head1 METHODS
+
+
+=cut
+
+package RT::Action;
+
+use strict;
+use Scalar::Util;
+
+use base qw/RT::Base/;
+
+# {{{ sub new
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->_Init(@_);
+ return $self;
+}
+# }}}
+
+# {{{ sub _Init
+sub _Init {
+ my $self = shift;
+ my %args = ( Argument => undef,
+ CurrentUser => undef,
+ ScripActionObj => undef,
+ ScripObj => undef,
+ TemplateObj => undef,
+ TicketObj => undef,
+ TransactionObj => undef,
+ Type => undef,
+
+ @_ );
+
+ $self->{'Argument'} = $args{'Argument'};
+ $self->CurrentUser( $args{'CurrentUser'});
+ $self->{'ScripActionObj'} = $args{'ScripActionObj'};
+ $self->{'ScripObj'} = $args{'ScripObj'};
+ $self->{'TemplateObj'} = $args{'TemplateObj'};
+ $self->{'TicketObj'} = $args{'TicketObj'};
+ $self->{'TransactionObj'} = $args{'TransactionObj'};
+ $self->{'Type'} = $args{'Type'};
+
+ Scalar::Util::weaken($self->{'ScripActionObj'});
+ Scalar::Util::weaken($self->{'ScripObj'});
+ Scalar::Util::weaken($self->{'TemplateObj'});
+ Scalar::Util::weaken($self->{'TicketObj'});
+ Scalar::Util::weaken($self->{'TransactionObj'});
+
+}
+# }}}
+
+# Access Scripwide data
+
+# {{{ sub Argument
+sub Argument {
+ my $self = shift;
+ return($self->{'Argument'});
+}
+# }}}
+
+# {{{ sub TicketObj
+sub TicketObj {
+ my $self = shift;
+ return($self->{'TicketObj'});
+}
+# }}}
+
+# {{{ sub TransactionObj
+sub TransactionObj {
+ my $self = shift;
+ return($self->{'TransactionObj'});
+}
+# }}}
+
+# {{{ sub TemplateObj
+sub TemplateObj {
+ my $self = shift;
+ return($self->{'TemplateObj'});
+}
+# }}}
+
+# {{{ sub ScripObj
+sub ScripObj {
+ my $self = shift;
+ return($self->{'ScripObj'});
+}
+# }}}
+
+# {{{ sub ScripActionObj
+sub ScripActionObj {
+ my $self = shift;
+ return($self->{'ScripActionObj'});
+}
+# }}}
+
+# {{{ sub Type
+sub Type {
+ my $self = shift;
+ return($self->{'Type'});
+}
+# }}}
+
+
+# Scrip methods
+
+#Do what we need to do and send it out.
+
+# {{{ sub Commit
+sub Commit {
+ my $self = shift;
+ return(0, $self->loc("Commit Stubbed"));
+}
+# }}}
+
+
+#What does this type of Action does
+
+# {{{ sub Describe
+sub Describe {
+ my $self = shift;
+ return $self->loc("No description for [_1]", ref $self);
+}
+# }}}
+
+
+#Parse the templates, get things ready to go.
+
+# {{{ sub Prepare
+sub Prepare {
+ my $self = shift;
+ return (0, $self->loc("Prepare Stubbed"));
+}
+# }}}
+
+
+#If this rule applies to this transaction, return true.
+
+# {{{ sub IsApplicable
+sub IsApplicable {
+ my $self = shift;
+ return(undef);
+}
+# }}}
+
+# {{{ sub DESTROY
+sub DESTROY {
+ my $self = shift;
+
+ # We need to clean up all the references that might maybe get
+ # oddly circular
+ $self->{'ScripActionObj'} = undef;
+ $self->{'ScripObj'} = undef;
+ $self->{'TemplateObj'} =undef
+ $self->{'TicketObj'} = undef;
+ $self->{'TransactionObj'} = undef;
+}
+
+# }}}
+
+eval "require RT::Action_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action_Vendor.pm});
+eval "require RT::Action_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Action/AutoOpen.pm b/rt/lib/RT/Action/AutoOpen.pm
index 004ed13..e1cf0ae 100644
--- a/rt/lib/RT/Action/AutoOpen.pm
+++ b/rt/lib/RT/Action/AutoOpen.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,28 +45,25 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-# This Action will open the BASE if a dependent is resolved.
+# This Action will open the BASE if a dependent is resolved.
package RT::Action::AutoOpen;
-require RT::Action::Generic;
use strict;
-use vars qw/@ISA/;
-@ISA=qw(RT::Action::Generic);
+use warnings;
-#Do what we need to do and send it out.
+use base qw(RT::Action);
-#What does this type of Action does
+=head1 DESCRIPTION
-# {{{ sub Describe
-sub Describe {
- my $self = shift;
- return (ref $self );
-}
-# }}}
+Opens a ticket unless it's allready open, but only unless transaction
+L<RT::Transaction/IsInbound is inbound>.
+Doesn't open a ticket if message's head has field C<RT-Control> with
+C<no-autoopen> substring.
+
+=cut
-# {{{ sub Prepare
sub Prepare {
my $self = shift;
@@ -83,22 +80,21 @@ sub Prepare {
return 1;
}
-# }}}
sub Commit {
my $self = shift;
- my $oldstatus = $self->TicketObj->Status();
- $self->TicketObj->__Set( Field => 'Status', Value => 'open' );
- $self->TicketObj->_NewTransaction(
- Type => 'Status',
- Field => 'Status',
- OldValue => $oldstatus,
- NewValue => 'open',
- Data => 'Ticket auto-opened on incoming correspondence'
- );
-
-
- return(1);
+
+ my $oldstatus = $self->TicketObj->Status;
+ $self->TicketObj->__Set( Field => 'Status', Value => 'open' );
+ $self->TicketObj->_NewTransaction(
+ Type => 'Status',
+ Field => 'Status',
+ OldValue => $oldstatus,
+ NewValue => 'open',
+ Data => 'Ticket auto-opened on incoming correspondence'
+ );
+
+ return 1;
}
eval "require RT::Action::AutoOpen_Vendor";
diff --git a/rt/lib/RT/Action/Autoreply.pm b/rt/lib/RT/Action/Autoreply.pm
index ea56b9f..3734d81 100755
--- a/rt/lib/RT/Action/Autoreply.pm
+++ b/rt/lib/RT/Action/Autoreply.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,12 +45,13 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Action::Autoreply;
-require RT::Action::SendEmail;
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::SendEmail);
+use warnings;
+
+use base qw(RT::Action::SendEmail);
=head2 Prepare
@@ -95,43 +96,37 @@ Set this message\'s return address to the apropriate queue address
sub SetReturnAddress {
my $self = shift;
- my %args = ( is_comment => 0,
- @_
- );
- my $replyto;
- if ($args{'is_comment'}) {
- $replyto = $self->TicketObj->QueueObj->CommentAddress ||
- $RT::CommentAddress;
- }
- else {
- $replyto = $self->TicketObj->QueueObj->CorrespondAddress ||
- $RT::CorrespondAddress;
- }
-
- unless ($self->TemplateObj->MIMEObj->head->get('From')) {
- if ($RT::UseFriendlyFromLine) {
- my $friendly_name = $self->TicketObj->QueueObj->Description ||
+ my $friendly_name;
+
+ if (RT->Config->Get('UseFriendlyFromLine')) {
+ $friendly_name = $self->TicketObj->QueueObj->Description ||
$self->TicketObj->QueueObj->Name;
- $friendly_name =~ s/"/\\"/g;
- $self->SetHeader( 'From',
- sprintf($RT::FriendlyFromLineFormat,
- $self->MIMEEncodeString( $friendly_name, $RT::EmailOutputEncoding ), $replyto),
- );
}
- else {
- $self->SetHeader( 'From', $replyto );
- }
- }
-
- unless ($self->TemplateObj->MIMEObj->head->get('Reply-To')) {
- $self->SetHeader('Reply-To', "$replyto");
- }
+
+ $self->SUPER::SetReturnAddress( @_, friendly_name => $friendly_name );
}
# }}}
+# {{{{ sub SetRTSpecialHeaders
+
+=head2 SetRTSpecialHeaders
+
+Set the C<Auto-Generated> header to C<auto-replied>, in accordance
+with RFC3834.
+
+=cut
+
+sub SetRTSpecialHeaders {
+ my $self = shift;
+ $self->SUPER::SetRTSpecialHeaders(@_);
+ $self->SetHeader( 'Auto-Submitted', 'auto-replied' );
+}
+
+# }}}
+
eval "require RT::Action::Autoreply_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Autoreply_Vendor.pm});
eval "require RT::Action::Autoreply_Local";
diff --git a/rt/lib/RT/Action/CreateTickets.pm b/rt/lib/RT/Action/CreateTickets.pm
index 40d18d3..4883ae3 100644
--- a/rt/lib/RT/Action/CreateTickets.pm
+++ b/rt/lib/RT/Action/CreateTickets.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,13 +45,12 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Action::CreateTickets;
-require RT::Action::Generic;
+use base 'RT::Action';
use strict;
use warnings;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::Generic);
use MIME::Entity;
@@ -106,10 +105,12 @@ 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. The hash is prepopulated with the ticket which triggered the
-ScripAction as $Tickets{'TOP'}; you can also access that ticket using the
-shorthand TOP.
+so as to be available during the creation of other tickets during the
+same ScripAction, using the key 'create-identifier', where
+C<identifier> is the id 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.
A simple example:
@@ -164,8 +165,9 @@ A convoluted example
ENDOFCONTENT
===Create-Ticket: two
Subject: Manager approval
+ Type: approval
Depended-On-By: TOP
- Refers-On: {$Tickets{"approval"}->Id}
+ Refers-To: {$Tickets{"create-approval"}->Id}
Queue: ___Approvals
Content-Type: text/plain
Content:
@@ -236,236 +238,6 @@ Refers-To, RefersTo, refersto, refers-to and r-e-f-er-s-tO will all
be treated as the same thing.
-=begin testing
-
-ok (require RT::Action::CreateTickets);
-use_ok(RT::Scrip);
-use_ok(RT::Template);
-use_ok(RT::ScripAction);
-use_ok(RT::ScripCondition);
-use_ok(RT::Ticket);
-
-my $approvalsq = RT::Queue->new($RT::SystemUser);
-$approvalsq->Create(Name => 'Approvals');
-ok ($approvalsq->Id, "Created Approvals test queue");
-
-
-my $approvals =
-'===Create-Ticket: approval
-Queue: ___Approvals
-Type: approval
-AdminCc: {join ("\nAdminCc: ",@admins) }
-Depended-On-By: {$Tickets{"TOP"}->Id}
-Refers-To: TOP
-Subject: Approval for ticket: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject}
-Due: {time + 86400}
-Content-Type: text/plain
-Content: Your approval is requested for the ticket {$Tickets{"TOP"}->Id}: {$Tickets{"TOP"}->Subject}
-Blah
-Blah
-ENDOFCONTENT
-===Create-Ticket: two
-Subject: Manager approval.
-Depended-On-By: approval
-Queue: ___Approvals
-Content-Type: text/plain
-Content:
-Your minion approved ticket {$Tickets{"TOP"}->Id}. you ok with that?
-ENDOFCONTENT
-';
-
-ok ($approvals =~ /Content/, "Read in the approvals template");
-
-my $apptemp = RT::Template->new($RT::SystemUser);
-$apptemp->Create( Content => $approvals, Name => "Approvals", Queue => "0");
-
-ok ($apptemp->Id);
-
-my $q = RT::Queue->new($RT::SystemUser);
-$q->Create(Name => 'WorkflowTest');
-ok ($q->Id, "Created workflow test queue");
-
-my $scrip = RT::Scrip->new($RT::SystemUser);
-my ($sval, $smsg) =$scrip->Create( ScripCondition => 'On Transaction',
- ScripAction => 'Create Tickets',
- Template => 'Approvals',
- Queue => $q->Id);
-ok ($sval, $smsg);
-ok ($scrip->Id, "Created the scrip");
-ok ($scrip->TemplateObj->Id, "Created the scrip template");
-ok ($scrip->ConditionObj->Id, "Created the scrip condition");
-ok ($scrip->ActionObj->Id, "Created the scrip action");
-
-my $t = RT::Ticket->new($RT::SystemUser);
-my($tid, $ttrans, $tmsg) = $t->Create(Subject => "Sample workflow test",
- Owner => "root",
- Queue => $q->Id);
-
-ok ($tid,$tmsg);
-
-my $deps = $t->DependsOn;
-is ($deps->Count, 1, "The ticket we created depends on one other ticket");
-my $dependson= $deps->First->TargetObj;
-ok ($dependson->Id, "It depends on a real ticket");
-unlike ($dependson->Subject, qr/{/, "The subject doesn't have braces in it. that means we're interpreting expressions");
-is ($t->ReferredToBy->Count,1, "It's only referred to by one other ticket");
-is ($t->ReferredToBy->First->BaseObj->Id,$t->DependsOn->First->TargetObj->Id, "The same ticket that depends on it refers to it.");
-use RT::Action::CreateTickets;
-my $action = RT::Action::CreateTickets->new( CurrentUser => $RT::SystemUser);;
-
-# comma-delimited templates
-my $commas = <<"EOF";
-id,Queue,Subject,Owner,Content
-ticket1,General,"foo, bar",root,blah
-ticket2,General,foo bar,root,blah
-ticket3,General,foo' bar,root,blah'boo
-ticket4,General,foo' bar,,blah'boo
-EOF
-
-
-# Comma delimited templates with missing data
-my $sparse_commas = <<"EOF";
-id,Queue,Subject,Owner,Requestor
-ticket14,General,,,bobby
-ticket15,General,,,tommy
-ticket16,General,,suzie,tommy
-ticket17,General,Foo "bar" baz,suzie,tommy
-ticket18,General,'Foo "bar" baz',suzie,tommy
-ticket19,General,'Foo bar' baz,suzie,tommy
-EOF
-
-
-# tab-delimited templates
-my $tabs = <<"EOF";
-id\tQueue\tSubject\tOwner\tContent
-ticket10\tGeneral\t"foo' bar"\troot\tblah'
-ticket11\tGeneral\tfoo, bar\troot\tblah
-ticket12\tGeneral\tfoo' bar\troot\tblah'boo
-ticket13\tGeneral\tfoo' bar\t\tblah'boo
-EOF
-
-my %expected;
-
-$expected{ticket1} = <<EOF;
-Queue: General
-Subject: foo, bar
-Owner: root
-Content: blah
-ENDOFCONTENT
-EOF
-
-$expected{ticket2} = <<EOF;
-Queue: General
-Subject: foo bar
-Owner: root
-Content: blah
-ENDOFCONTENT
-EOF
-
-$expected{ticket3} = <<EOF;
-Queue: General
-Subject: foo' bar
-Owner: root
-Content: blah'boo
-ENDOFCONTENT
-EOF
-
-$expected{ticket4} = <<EOF;
-Queue: General
-Subject: foo' bar
-Owner:
-Content: blah'boo
-ENDOFCONTENT
-EOF
-
-$expected{ticket10} = <<EOF;
-Queue: General
-Subject: foo' bar
-Owner: root
-Content: blah'
-ENDOFCONTENT
-EOF
-
-$expected{ticket11} = <<EOF;
-Queue: General
-Subject: foo, bar
-Owner: root
-Content: blah
-ENDOFCONTENT
-EOF
-
-$expected{ticket12} = <<EOF;
-Queue: General
-Subject: foo' bar
-Owner: root
-Content: blah'boo
-ENDOFCONTENT
-EOF
-
-$expected{ticket13} = <<EOF;
-Queue: General
-Subject: foo' bar
-Owner:
-Content: blah'boo
-ENDOFCONTENT
-EOF
-
-
-$expected{'ticket14'} = <<EOF;
-Queue: General
-Subject:
-Owner:
-Requestor: bobby
-EOF
-$expected{'ticket15'} = <<EOF;
-Queue: General
-Subject:
-Owner:
-Requestor: tommy
-EOF
-$expected{'ticket16'} = <<EOF;
-Queue: General
-Subject:
-Owner: suzie
-Requestor: tommy
-EOF
-$expected{'ticket17'} = <<EOF;
-Queue: General
-Subject: Foo "bar" baz
-Owner: suzie
-Requestor: tommy
-EOF
-$expected{'ticket18'} = <<EOF;
-Queue: General
-Subject: Foo "bar" baz
-Owner: suzie
-Requestor: tommy
-EOF
-$expected{'ticket19'} = <<EOF;
-Queue: General
-Subject: 'Foo bar' baz
-Owner: suzie
-Requestor: tommy
-EOF
-
-
-
-
-$action->Parse(Content =>$commas);
-$action->Parse(Content =>$sparse_commas);
-$action->Parse(Content => $tabs);
-
-my %got;
-foreach (@{ $action->{'create_tickets'} }) {
- $got{$_} = $action->{'templates'}->{$_};
-}
-
-foreach my $id ( sort keys %expected ) {
- ok(exists($got{"create-$id"}), "template exists for $id");
- is($got{"create-$id"}, $expected{$id}, "template is correct for $id");
-}
-
-=end testing
=head1 AUTHOR
@@ -541,16 +313,16 @@ sub Prepare {
my $self = shift;
unless ( $self->TemplateObj ) {
- $RT::Logger->warning("No template object handed to $self\n");
+ $RT::Logger->warning("No template object handed to $self");
}
unless ( $self->TransactionObj ) {
- $RT::Logger->warning("No transaction object handed to $self\n");
+ $RT::Logger->warning("No transaction object handed to $self");
}
unless ( $self->TicketObj ) {
- $RT::Logger->warning("No ticket object handed to $self\n");
+ $RT::Logger->warning("No ticket object handed to $self");
}
@@ -575,7 +347,6 @@ sub CreateByTemplate {
my @results;
# XXX: cargo cult programming that works. i'll be back.
- use bytes;
local %T::Tickets = %T::Tickets;
local $T::TOP = $T::TOP;
@@ -637,7 +408,6 @@ sub UpdateByTemplate {
my $top = shift;
# XXX: cargo cult programming that works. i'll be back.
- use bytes;
my @results;
local %T::Tickets = %T::Tickets;
@@ -894,7 +664,7 @@ sub ParseLines {
}
);
- $RT::Logger->debug("Workflow: yielding\n$content");
+ $RT::Logger->debug("Workflow: yielding $content");
if ($err) {
$RT::Logger->error( "Ticket creation failed: " . $err );
@@ -990,6 +760,7 @@ sub ParseLines {
TimeLeft => $args{'timeleft'},
InitialPriority => $args{'initialpriority'} || 0,
FinalPriority => $args{'finalpriority'} || 0,
+ SquelchMailTo => $args{'squelchmailto'},
Type => $args{'type'},
);
@@ -1223,7 +994,7 @@ sub GetUpdateTemplate {
my $mode = $LINKTYPEMAP{$type}->{Mode};
my $method = $LINKTYPEMAP{$type}->{Type};
- my $links;
+ my $links = '';
while ( my $link = $t->$method->Next ) {
$links .= ", " if $links;
diff --git a/rt/lib/RT/Action/EscalatePriority.pm b/rt/lib/RT/Action/EscalatePriority.pm
index 46635df..bf9de92 100644
--- a/rt/lib/RT/Action/EscalatePriority.pm
+++ b/rt/lib/RT/Action/EscalatePriority.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Action::EscalatePriority
@@ -71,11 +72,9 @@ as the ticket heads toward its due date.
package RT::Action::EscalatePriority;
-require RT::Action::Generic;
+use base 'RT::Action';
use strict;
-use vars qw/@ISA/;
-@ISA=qw(RT::Action::Generic);
#Do what we need to do and send it out.
@@ -155,7 +154,7 @@ sub Commit {
my ($val, $msg) = $self->TicketObj->SetPriority($self->{'prio'});
unless ($val) {
- $RT::Logger->debug($self . " $msg\n");
+ $RT::Logger->debug($self . " $msg");
}
}
diff --git a/rt/lib/RT/Action/ExtractSubjectTag.pm b/rt/lib/RT/Action/ExtractSubjectTag.pm
new file mode 100644
index 0000000..4a173ce
--- /dev/null
+++ b/rt/lib/RT/Action/ExtractSubjectTag.pm
@@ -0,0 +1,103 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Action::ExtractSubjectTag;
+use base 'RT::Action';
+use strict;
+
+sub Describe {
+ my $self = shift;
+ return ( ref $self );
+}
+
+sub Prepare {
+ return (1);
+}
+
+sub Commit {
+ my $self = shift;
+ my $Transaction = $self->TransactionObj;
+ my $FirstAttachment = $Transaction->Attachments->First;
+ return 1 unless ($FirstAttachment);
+
+ my $Ticket = $self->TicketObj;
+
+ my $TicketSubject = $self->TicketObj->Subject;
+ my $origTicketSubject = $TicketSubject;
+ my $TransactionSubject = $FirstAttachment->Subject;
+
+ my $match = RT->Config->Get('ExtractSubjectTagMatch');
+ my $nomatch = RT->Config->Get('ExtractSubjectTagNoMatch');
+ TAGLIST: while ( $TransactionSubject =~ /($match)/g ) {
+ my $tag = $1;
+ next if $tag =~ /$nomatch/;
+ foreach my $subject_tag ( RT->System->SubjectTag ) {
+ if ($tag =~ /\[\Q$subject_tag\E\s+\#(\d+)\s*\]/) {
+ next TAGLIST;
+ }
+ }
+ $TicketSubject .= " $tag" unless ( $TicketSubject =~ /\Q$tag\E/ );
+ }
+
+ $self->TicketObj->SetSubject($TicketSubject)
+ if ( $TicketSubject ne $origTicketSubject );
+
+ return (1);
+}
+
+eval "require RT::Action::ExtractSubjectTag_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Action/ExtractSubjectTag_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Action::ExtractSubjectTag_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Action/ExtractSubjectTag_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Action/Generic.pm b/rt/lib/RT/Action/Generic.pm
index 3232d48..5e8ef32 100755
--- a/rt/lib/RT/Action/Generic.pm
+++ b/rt/lib/RT/Action/Generic.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,9 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
- RT::Action::Generic - a generic baseclass for RT Actions
+ RT::Action::Generic - deprecated, see RT::Action
=head1 SYNOPSIS
@@ -55,177 +56,25 @@
=head1 DESCRIPTION
-=head1 METHODS
-
-=begin testing
+This module is provided only for backwards compatibility.
-ok (require RT::Action::Generic);
+=head1 METHODS
-=end testing
=cut
-package RT::Action::Generic;
-
use strict;
-use Scalar::Util;
-
-use base qw/RT::Base/;
-
-# {{{ sub new
-sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- bless ($self, $class);
- $self->_Init(@_);
- return $self;
-}
-# }}}
-
-# {{{ sub _Init
-sub _Init {
- my $self = shift;
- my %args = ( Argument => undef,
- CurrentUser => undef,
- ScripActionObj => undef,
- ScripObj => undef,
- TemplateObj => undef,
- TicketObj => undef,
- TransactionObj => undef,
- Type => undef,
-
- @_ );
-
- $self->{'Argument'} = $args{'Argument'};
- $self->CurrentUser( $args{'CurrentUser'});
- $self->{'ScripActionObj'} = $args{'ScripActionObj'};
- $self->{'ScripObj'} = $args{'ScripObj'};
- $self->{'TemplateObj'} = $args{'TemplateObj'};
- $self->{'TicketObj'} = $args{'TicketObj'};
- $self->{'TransactionObj'} = $args{'TransactionObj'};
- $self->{'Type'} = $args{'Type'};
-
- Scalar::Util::weaken($self->{'ScripActionObj'});
- Scalar::Util::weaken($self->{'ScripObj'});
- Scalar::Util::weaken($self->{'TemplateObj'});
- Scalar::Util::weaken($self->{'TicketObj'});
- Scalar::Util::weaken($self->{'TransactionObj'});
-
-}
-# }}}
-
-# Access Scripwide data
-
-# {{{ sub Argument
-sub Argument {
- my $self = shift;
- return($self->{'Argument'});
-}
-# }}}
-
-# {{{ sub TicketObj
-sub TicketObj {
- my $self = shift;
- return($self->{'TicketObj'});
-}
-# }}}
-
-# {{{ sub TransactionObj
-sub TransactionObj {
- my $self = shift;
- return($self->{'TransactionObj'});
-}
-# }}}
-
-# {{{ sub TemplateObj
-sub TemplateObj {
- my $self = shift;
- return($self->{'TemplateObj'});
-}
-# }}}
-
-# {{{ sub ScripObj
-sub ScripObj {
- my $self = shift;
- return($self->{'ScripObj'});
-}
-# }}}
-
-# {{{ sub ScripActionObj
-sub ScripActionObj {
- my $self = shift;
- return($self->{'ScripActionObj'});
-}
-# }}}
-
-# {{{ sub Type
-sub Type {
- my $self = shift;
- return($self->{'Type'});
-}
-# }}}
-
-
-# Scrip methods
-
-#Do what we need to do and send it out.
-
-# {{{ sub Commit
-sub Commit {
- my $self = shift;
- return(0, $self->loc("Commit Stubbed"));
-}
-# }}}
-
-
-#What does this type of Action does
-
-# {{{ sub Describe
-sub Describe {
- my $self = shift;
- return $self->loc("No description for [_1]", ref $self);
-}
-# }}}
-
-
-#Parse the templates, get things ready to go.
-
-# {{{ sub Prepare
-sub Prepare {
- my $self = shift;
- return (0, $self->loc("Prepare Stubbed"));
-}
-# }}}
-
-
-#If this rule applies to this transaction, return true.
-
-# {{{ sub IsApplicable
-sub IsApplicable {
- my $self = shift;
- return(undef);
-}
-# }}}
-
-# {{{ sub DESTROY
-sub DESTROY {
- my $self = shift;
-
- # We need to clean up all the references that might maybe get
- # oddly circular
- $self->{'ScripActionObj'} = undef;
- $self->{'ScripObj'} = undef;
- $self->{'TemplateObj'} =undef
- $self->{'TicketObj'} = undef;
- $self->{'TransactionObj'} = undef;
-}
-
-# }}}
+use warnings;
+package RT::Action::Generic;
+use base 'RT::Action';
eval "require RT::Action::Generic_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Generic_Vendor.pm});
+warn "RT::Action::Generic has become RT::Action. Please adjust your deprecated RT::Action::Generic_Vendor file at " . $INC{"RT/Action/Generic_Vendor.pm"} if !$@;
+
eval "require RT::Action::Generic_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Generic_Local.pm});
+warn "RT::Action::Generic has become RT::Action. Please adjust your deprecated RT::Action::Generic_Local file at " . $INC{"RT/Action/Generic_Local.pm"} if !$@;
1;
+
diff --git a/rt/lib/RT/Action/LinearEscalate.pm b/rt/lib/RT/Action/LinearEscalate.pm
new file mode 100755
index 0000000..9130f40
--- /dev/null
+++ b/rt/lib/RT/Action/LinearEscalate.pm
@@ -0,0 +1,279 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+RT::Action::LinearEscalate - will move a ticket's priority toward its final priority.
+
+=head1 This vs. RT::Action::EscalatePriority
+
+This action doesn't change priority if due date is not set.
+
+This action honor the Starts date.
+
+This action can apply changes silently.
+
+This action can replace EscalatePriority completly. If you want to tickets
+that have been created without Due date then you can add scrip that sets
+default due date. For example a week then priorities of your tickets will
+escalate linearly during the week from intial value towards final.
+
+=head1 This vs. LinearEscalate from the CPAN
+
+This action is an integration of the module from the CPAN into RT's core
+that's happened in RT 3.8. If you're upgrading from 3.6 and have been using
+module from the CPAN with old version of RT then you should uninstall it
+and use this one.
+
+However, this action doesn't support control over config. Read </CONFIGURATION>
+to find out ways to deal with it.
+
+=head1 DESCRIPTION
+
+LinearEscalate is a ScripAction that will move a ticket's priority
+from its initial priority to its final priority linearly as
+the ticket approaches its due date.
+
+It's intended to be called by an RT escalation tool. One such tool is called
+rt-crontool and is located in $RTHOME/bin (see C<rt-crontool -h> for more details).
+
+=head1 USAGE
+
+Once the ScripAction is installed, the following script in "cron"
+will get tickets to where they need to be:
+
+ rt-crontool --search RT::Search::FromSQL --search-arg \
+ "(Status='new' OR Status='open' OR Status = 'stalled')" \
+ --action RT::Action::LinearEscalate
+
+The Starts date is associated with intial ticket's priority or
+the Created field if the former is not set. End of interval is
+the Due date. Tickets without due date B<are not updated>.
+
+=head1 CONFIGURATION
+
+Initial and Final priorities are controlled by queue's options
+and can be defined using the web UI via Configuration tab. This
+action should handle correctly situations when initial priority
+is greater than final.
+
+LinearEscalate's behavior can be controlled by two options:
+
+=over 4
+
+=item RecordTransaction - defaults to false and if option is true then
+causes the tool to create a transaction on the ticket when it is escalated.
+
+=item UpdateLastUpdated - which defaults to true and updates the LastUpdated
+field when the ticket is escalated, otherwise don't touch anything.
+
+=back
+
+You cannot set "UpdateLastUpdated" to false unless "RecordTransaction"
+is also false. Well, you can, but we'll just ignore you.
+
+You can set this options using either in F<RT_SiteConfig.pm>, as action
+argument in call to the rt-crontool or in DB if you want to use the action
+in scrips.
+
+From a shell you can use the following command:
+
+ rt-crontool --search RT::Search::FromSQL --search-arg \
+ "(Status='new' OR Status='open' OR Status = 'stalled')" \
+ --action RT::Action::LinearEscalate \
+ --action-arg "RecordTransaction: 1"
+
+This ScripAction uses RT's internal _Set or __Set calls to set ticket
+priority without running scrips or recording a transaction on each
+update, if it's been said to.
+
+=cut
+
+package RT::Action::LinearEscalate;
+
+use strict;
+use warnings;
+use base qw(RT::Action);
+
+our $VERSION = '0.06';
+
+#Do what we need to do and send it out.
+
+#What does this type of Action does
+
+sub Describe {
+ my $self = shift;
+ my $class = ref($self) || $self;
+ return "$class will move a ticket's priority toward its final priority.";
+}
+
+sub Prepare {
+ my $self = shift;
+
+ my $ticket = $self->TicketObj;
+
+ my $due = $ticket->DueObj->Unix;
+ unless ( $due > 0 ) {
+ $RT::Logger->debug('Due is not set. Not escalating.');
+ return 1;
+ }
+
+ my $priority_range = ($ticket->FinalPriority ||0) - ($ticket->InitialPriority ||0);
+ unless ( $priority_range ) {
+ $RT::Logger->debug('Final and Initial priorities are equal. Not escalating.');
+ return 1;
+ }
+
+ if ( $ticket->Priority >= $ticket->FinalPriority && $priority_range > 0 ) {
+ $RT::Logger->debug('Current priority is greater than final. Not escalating.');
+ return 1;
+ }
+ elsif ( $ticket->Priority <= $ticket->FinalPriority && $priority_range < 0 ) {
+ $RT::Logger->debug('Current priority is lower than final. Not escalating.');
+ return 1;
+ }
+
+ # TODO: compute the number of business days until the ticket is due
+
+ # now we know we have a due date. for every day that passes,
+ # increment priority according to the formula
+
+ my $starts = $ticket->StartsObj->Unix;
+ $starts = $ticket->CreatedObj->Unix unless $starts > 0;
+ my $now = time;
+
+ # do nothing if we didn't reach starts or created date
+ if ( $starts > $now ) {
+ $RT::Logger->debug('Starts(Created) is in future. Not escalating.');
+ return 1;
+ }
+
+ $due = $starts + 1 if $due <= $starts; # +1 to avoid div by zero
+
+ my $percent_complete = ($now-$starts)/($due - $starts);
+
+ my $new_priority = int($percent_complete * $priority_range) + ($ticket->InitialPriority || 0);
+ $new_priority = $ticket->FinalPriority if $new_priority > $ticket->FinalPriority;
+ $self->{'new_priority'} = $new_priority;
+
+ return 1;
+}
+
+sub Commit {
+ my $self = shift;
+
+ my $new_value = $self->{'new_priority'};
+ return 1 unless defined $new_value;
+
+ my $ticket = $self->TicketObj;
+ # if the priority hasn't changed do nothing
+ return 1 if $ticket->Priority == $new_value;
+
+ # override defaults from argument
+ my ($record, $update) = (0, 1);
+ {
+ my $arg = $self->Argument || '';
+ if ( $arg =~ /RecordTransaction:\s*(\d+)/i ) {
+ $record = $1;
+ $RT::Logger->debug("Overrode RecordTransaction: $record");
+ }
+ if ( $arg =~ /UpdateLastUpdated:\s*(\d+)/i ) {
+ $update = $1;
+ $RT::Logger->debug("Overrode UpdateLastUpdated: $update");
+ }
+ $update = 1 if $record;
+ }
+
+ $RT::Logger->debug(
+ 'Linearly escalating priority of ticket #'. $ticket->Id
+ .' from '. $ticket->Priority .' to '. $new_value
+ .' and'. ($record? '': ' do not') .' record a transaction'
+ .' and'. ($update? '': ' do not') .' touch last updated field'
+ );
+
+ my ( $val, $msg );
+ unless ( $record ) {
+ unless ( $update ) {
+ ( $val, $msg ) = $ticket->__Set(
+ Field => 'Priority',
+ Value => $new_value,
+ );
+ }
+ else {
+ ( $val, $msg ) = $ticket->_Set(
+ Field => 'Priority',
+ Value => $new_value,
+ RecordTransaction => 0,
+ );
+ }
+ }
+ else {
+ ( $val, $msg ) = $ticket->SetPriority( $new_value );
+ }
+
+ unless ($val) {
+ $RT::Logger->error( "Couldn't set new priority value: $msg" );
+ return (0, $msg);
+ }
+ return 1;
+}
+
+eval "require RT::Action::LinearEscalate_Vendor";
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/LinearEscalate_Vendor.pm} );
+eval "require RT::Action::LinearEscalate_Local";
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/LinearEscalate_Local.pm} );
+
+1;
+
+=head1 AUTHORS
+
+Kevin Riggle E<lt>kevinr@bestpractical.comE<gt>
+
+Ruslan Zakirov E<lt>ruz@bestpractical.comE<gt>
+
+=cut
diff --git a/rt/lib/RT/Action/Notify.pm b/rt/lib/RT/Action/Notify.pm
index 82cad1e..30238fd 100755
--- a/rt/lib/RT/Action/Notify.pm
+++ b/rt/lib/RT/Action/Notify.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,14 +45,16 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
#
package RT::Action::Notify;
-require RT::Action::SendEmail;
-use Mail::Address;
+
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::SendEmail);
+use warnings;
+use base qw(RT::Action::SendEmail);
+
+use Email::Address;
=head2 Prepare
@@ -67,8 +69,6 @@ sub Prepare {
$self->SUPER::Prepare();
}
-# {{{ sub SetRecipients
-
=head2 SetRecipients
Sets the recipients of this meesage to Owner, Requestor, AdminCc, Cc or All.
@@ -79,73 +79,63 @@ Explicitly B<does not> notify the creator of the transaction by default
sub SetRecipients {
my $self = shift;
- my $arg = $self->Argument;
+ my $ticket = $self->TicketObj;
+ my $arg = $self->Argument;
$arg =~ s/\bAll\b/Owner,Requestor,AdminCc,Cc/;
my ( @To, @PseudoTo, @Cc, @Bcc );
if ( $arg =~ /\bOtherRecipients\b/ ) {
- if ( $self->TransactionObj->Attachments->First ) {
- my @cc_addresses = Mail::Address->parse($self->TransactionObj->Attachments->First->GetHeader('RT-Send-Cc'));
- foreach my $addr (@cc_addresses) {
- push @Cc, $addr->address;
- }
- my @bcc_addresses = Mail::Address->parse($self->TransactionObj->Attachments->First->GetHeader('RT-Send-Bcc'));
-
- foreach my $addr (@bcc_addresses) {
- push @Bcc, $addr->address;
- }
-
+ if ( my $attachment = $self->TransactionObj->Attachments->First ) {
+ push @Cc, map { $_->address } Email::Address->parse(
+ $attachment->GetHeader('RT-Send-Cc')
+ );
+ push @Bcc, map { $_->address } Email::Address->parse(
+ $attachment->GetHeader('RT-Send-Bcc')
+ );
}
}
if ( $arg =~ /\bRequestor\b/ ) {
- push ( @To, $self->TicketObj->Requestors->MemberEmailAddresses );
+ push @To, $ticket->Requestors->MemberEmailAddresses;
}
-
-
if ( $arg =~ /\bCc\b/ ) {
#If we have a To, make the Ccs, Ccs, otherwise, promote them to To
if (@To) {
- push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses );
- push ( @Cc, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses );
+ push ( @Cc, $ticket->Cc->MemberEmailAddresses );
+ push ( @Cc, $ticket->QueueObj->Cc->MemberEmailAddresses );
}
else {
- push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses );
- push ( @To, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses );
+ push ( @Cc, $ticket->Cc->MemberEmailAddresses );
+ push ( @To, $ticket->QueueObj->Cc->MemberEmailAddresses );
}
}
- if ( ( $arg =~ /\bOwner\b/ )
- && ( $self->TicketObj->OwnerObj->id != $RT::Nobody->id ) )
- {
-
- # If we're not sending to Ccs or requestors,
+ if ( $arg =~ /\bOwner\b/ && $ticket->OwnerObj->id != $RT::Nobody->id ) {
+ # If we're not sending to Ccs or requestors,
# then the Owner can be the To.
if (@To) {
- push ( @Bcc, $self->TicketObj->OwnerObj->EmailAddress );
+ push ( @Bcc, $ticket->OwnerObj->EmailAddress );
}
else {
- push ( @To, $self->TicketObj->OwnerObj->EmailAddress );
+ push ( @To, $ticket->OwnerObj->EmailAddress );
}
}
if ( $arg =~ /\bAdminCc\b/ ) {
- push ( @Bcc, $self->TicketObj->AdminCc->MemberEmailAddresses );
- push ( @Bcc, $self->TicketObj->QueueObj->AdminCc->MemberEmailAddresses );
+ push ( @Bcc, $ticket->AdminCc->MemberEmailAddresses );
+ push ( @Bcc, $ticket->QueueObj->AdminCc->MemberEmailAddresses );
}
- if ($RT::UseFriendlyToLine) {
+ if ( RT->Config->Get('UseFriendlyToLine') ) {
unless (@To) {
- push (
- @PseudoTo,
- sprintf($RT::FriendlyToLineFormat, $arg, $self->TicketObj->id),
- );
+ push @PseudoTo,
+ sprintf RT->Config->Get('FriendlyToLineFormat'), $arg, $ticket->id;
}
}
@@ -154,7 +144,7 @@ sub SetRecipients {
#Strip the sender out of the To, Cc and AdminCc and set the
# recipients fields used to build the message by the superclass.
# unless a flag is set
- if ($RT::NotifyActor) {
+ if (RT->Config->Get('NotifyActor')) {
@{ $self->{'To'} } = @To;
@{ $self->{'Cc'} } = @Cc;
@{ $self->{'Bcc'} } = @Bcc;
@@ -169,8 +159,6 @@ sub SetRecipients {
}
-# }}}
-
eval "require RT::Action::Notify_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Notify_Vendor.pm});
eval "require RT::Action::Notify_Local";
diff --git a/rt/lib/RT/Action/NotifyAsComment.pm b/rt/lib/RT/Action/NotifyAsComment.pm
index 215f453..b2eb5ac 100755
--- a/rt/lib/RT/Action/NotifyAsComment.pm
+++ b/rt/lib/RT/Action/NotifyAsComment.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,13 +45,13 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Action::NotifyAsComment;
require RT::Action::Notify;
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::Notify);
-
+use warnings;
+use base qw(RT::Action::Notify);
=head2 SetReturnAddress
diff --git a/rt/lib/RT/Action/NotifyGroup.pm b/rt/lib/RT/Action/NotifyGroup.pm
new file mode 100644
index 0000000..6b830cb
--- /dev/null
+++ b/rt/lib/RT/Action/NotifyGroup.pm
@@ -0,0 +1,209 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+RT::Action::NotifyGroup - RT Action that sends notifications to groups and/or users
+
+=head1 DESCRIPTION
+
+RT action module that allow you to notify particular groups and/or users.
+Distribution is shipped with C<rt-email-group-admin> script that
+is command line tool for managing NotifyGroup scrip actions. For more
+more info see its documentation.
+
+=cut
+
+package RT::Action::NotifyGroup;
+
+use strict;
+use warnings;
+use base qw(RT::Action::Notify);
+
+require RT::User;
+require RT::Group;
+
+=head1 METHODS
+
+=head2 SetRecipients
+
+Sets the recipients of this message to Groups and/or Users.
+
+=cut
+
+sub SetRecipients {
+ my $self = shift;
+
+ my $arg = $self->Argument;
+ foreach( $self->__SplitArg( $arg ) ) {
+ $self->_HandleArgument( $_ );
+ }
+
+ my $creator = $self->TransactionObj->CreatorObj->EmailAddress();
+ unless( $RT::NotifyActor ) {
+ @{ $self->{'To'} } = grep ( !/^\Q$creator\E$/, @{ $self->{'To'} } );
+ }
+
+ $self->{'seen_ueas'} = {};
+
+ return 1;
+}
+
+sub _HandleArgument {
+ my $self = shift;
+ my $instance = shift;
+
+ if ( $instance !~ /\D/ ) {
+ my $obj = RT::Principal->new( $self->CurrentUser );
+ $obj->Load( $instance );
+ return $self->_HandlePrincipal( $obj );
+ }
+
+ my $group = RT::Group->new( $self->CurrentUser );
+ $group->LoadUserDefinedGroup( $instance );
+ # to check disabled and so on
+ return $self->_HandlePrincipal( $group->PrincipalObj )
+ if $group->id;
+
+ require Email::Address;
+
+ my $user = RT::User->new( $self->CurrentUser );
+ if ( $instance =~ /^$Email::Address::addr_spec$/ ) {
+ $user->LoadByEmail( $instance );
+ return $self->__PushUserAddress( $instance )
+ unless $user->id;
+ } else {
+ $user->Load( $instance );
+ }
+ return $self->_HandlePrincipal( $user->PrincipalObj )
+ if $user->id;
+
+ $RT::Logger->error(
+ "'$instance' is not principal id, group name, user name,"
+ ." user email address or any email address"
+ );
+
+ return;
+}
+
+sub _HandlePrincipal {
+ my $self = shift;
+ my $obj = shift;
+ unless( $obj->id ) {
+ $RT::Logger->error( "Couldn't load principal #$obj" );
+ return;
+ }
+ if( $obj->Disabled ) {
+ $RT::Logger->info( "Principal #$obj is disabled => skip" );
+ return;
+ }
+ if( !$obj->PrincipalType ) {
+ $RT::Logger->crit( "Principal #$obj has empty type" );
+ } elsif( lc $obj->PrincipalType eq 'user' ) {
+ $self->__HandleUserArgument( $obj->Object );
+ } elsif( lc $obj->PrincipalType eq 'group' ) {
+ $self->__HandleGroupArgument( $obj->Object );
+ } else {
+ $RT::Logger->info( "Principal #$obj has unsupported type" );
+ }
+ return;
+}
+
+sub __HandleUserArgument {
+ my $self = shift;
+ my $obj = shift;
+
+ my $uea = $obj->EmailAddress;
+ unless( $uea ) {
+ $RT::Logger->warning( "User #". $obj->id ." has no email address" );
+ return;
+ }
+ $self->__PushUserAddress( $uea );
+}
+
+sub __HandleGroupArgument {
+ my $self = shift;
+ my $obj = shift;
+
+ my $members = $obj->UserMembersObj;
+ while( my $m = $members->Next ) {
+ $self->__HandleUserArgument( $m );
+ }
+}
+
+sub __SplitArg {
+ return grep length, map {s/^\s+//; s/\s+$//; $_} split /,/, $_[1];
+}
+
+sub __PushUserAddress {
+ my $self = shift;
+ my $uea = shift;
+ push @{ $self->{'To'} }, $uea unless $self->{'seen_ueas'}{ $uea }++;
+ return;
+}
+
+
+=head1 AUTHOR
+
+Ruslan U. Zakirov E<lt>ruz@bestpractical.comE<gt>
+
+L<RT::Action::NotifyGroupAsComment>, F<rt-email-group-admin>
+
+=cut
+
+eval "require RT::Action::NotifyGroup_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyGroup_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Action::NotifyGroup_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyGroup_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Action/NotifyGroupAsComment.pm b/rt/lib/RT/Action/NotifyGroupAsComment.pm
new file mode 100644
index 0000000..bee0a01
--- /dev/null
+++ b/rt/lib/RT/Action/NotifyGroupAsComment.pm
@@ -0,0 +1,91 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+RT::Action::NotifyGroupAsComment - RT Action that sends notifications to groups and/or users as comment
+
+=head1 DESCRIPTION
+
+This is subclass of L<RT::Action::NotifyGroup> that send comments instead of replies.
+See C<rt-email-group-admin> and L<RT::Action::NotifyGroup> docs for more info.
+
+=cut
+
+package RT::Action::NotifyGroupAsComment;
+
+use strict;
+use warnings;
+
+use RT::Action::NotifyGroup;
+
+use base qw(RT::Action::NotifyGroup);
+
+sub SetReturnAddress {
+ my $self = shift;
+ $self->{'comment'} = 1;
+ return $self->SUPER::SetReturnAddress( @_, is_comment => 1 );
+}
+
+=head1 AUTHOR
+
+Ruslan U. Zakirov E<lt>ruz@bestpractical.comE<gt>
+
+=cut
+
+eval "require RT::Action::NotifyGroupAsComment_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyGroupAsComment_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Action::NotifyGroupAsComment_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyGroupAsComment_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Action/RecordComment.pm b/rt/lib/RT/Action/RecordComment.pm
index c0256d6..bac17e9 100644
--- a/rt/lib/RT/Action/RecordComment.pm
+++ b/rt/lib/RT/Action/RecordComment.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,11 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Action::RecordComment;
-require RT::Action::Generic;
+use base 'RT::Action';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::Generic);
=head1 NAME
diff --git a/rt/lib/RT/Action/RecordCorrespondence.pm b/rt/lib/RT/Action/RecordCorrespondence.pm
index 10a890e..044893b 100644
--- a/rt/lib/RT/Action/RecordCorrespondence.pm
+++ b/rt/lib/RT/Action/RecordCorrespondence.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,11 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Action::RecordCorrespondence;
-require RT::Action::Generic;
+use base 'RT::Action';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::Generic);
=head1 NAME
diff --git a/rt/lib/RT/Action/ResolveMembers.pm b/rt/lib/RT/Action/ResolveMembers.pm
index fab049b..ff826cc 100644
--- a/rt/lib/RT/Action/ResolveMembers.pm
+++ b/rt/lib/RT/Action/ResolveMembers.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,15 +45,14 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# This Action will resolve all members of a resolved group ticket
package RT::Action::ResolveMembers;
-require RT::Action::Generic;
+use base 'RT::Action';
require RT::Links;
use strict;
-use vars qw/@ISA/;
-@ISA=qw(RT::Action::Generic);
#Do what we need to do and send it out.
diff --git a/rt/lib/RT/Action/SendEmail.pm b/rt/lib/RT/Action/SendEmail.pm
index ed5ec4f..a09bd3e 100755
--- a/rt/lib/RT/Action/SendEmail.pm
+++ b/rt/lib/RT/Action/SendEmail.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,20 +45,21 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Portions Copyright 2000 Tobias Brox <tobix@cpan.org>
package RT::Action::SendEmail;
-require RT::Action::Generic;
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::Generic);
+use warnings;
-use MIME::Words qw(encode_mimeword);
+use base qw(RT::Action);
use RT::EmailParser;
-use Mail::Address;
-use Date::Format qw(strftime);
+use RT::Interface::Email;
+use Email::Address;
+our @EMAIL_RECIPIENT_HEADERS = qw(To Cc Bcc);
+
=head1 NAME
@@ -68,53 +69,85 @@ RT::Action::AutoReply is a good example subclass.
=head1 SYNOPSIS
- require RT::Action::SendEmail;
- @ISA = qw(RT::Action::SendEmail);
-
+ use base 'RT::Action::SendEmail';
=head1 DESCRIPTION
Basically, you create another module RT::Action::YourAction which ISA
RT::Action::SendEmail.
-=begin testing
+=head1 METHODS
-ok (require RT::Action::SendEmail);
+=head2 CleanSlate
-=end testing
+Cleans class-wide options, like L</SquelchMailTo> or L</AttachTickets>.
+=cut
-=head1 AUTHOR
-
-Jesse Vincent <jesse@bestpractical.com> and Tobias Brox <tobix@cpan.org>
+sub CleanSlate {
+ my $self = shift;
+ $self->SquelchMailTo(undef);
+ $self->AttachTickets(undef);
+}
-=head1 SEE ALSO
+=head2 Commit
-perl(1).
+Sends the prepared message and writes outgoing record into DB if the feature is
+activated in the config.
=cut
-# {{{ Scrip methods (_Init, Commit, Prepare, IsApplicable)
+sub Commit {
+ my $self = shift;
+ $self->DeferDigestRecipients() if RT->Config->Get('RecordOutgoingEmail');
+ my $message = $self->TemplateObj->MIMEObj;
-# {{{ sub Commit
+ my $orig_message;
+ if ( RT->Config->Get('RecordOutgoingEmail')
+ && RT->Config->Get('GnuPG')->{'Enable'} )
+ {
-sub Commit {
- # DO NOT SHIFT @_ in this subroutine. It breaks Hook::LexWrap's
- # ability to pass @_ to a 'post' routine.
- my $self = $_[0];
+ # it's hacky, but we should know if we're going to crypt things
+ my $attachment = $self->TransactionObj->Attachments->First;
+
+ my %crypt;
+ foreach my $argument (qw(Sign Encrypt)) {
+ if ( $attachment
+ && defined $attachment->GetHeader("X-RT-$argument") )
+ {
+ $crypt{$argument} = $attachment->GetHeader("X-RT-$argument");
+ } else {
+ $crypt{$argument} = $self->TicketObj->QueueObj->$argument();
+ }
+ }
+ if ( $crypt{'Sign'} || $crypt{'Encrypt'} ) {
+ $orig_message = $message->dup;
+ }
+ }
- my ($ret) = $self->SendMessage( $self->TemplateObj->MIMEObj );
- if ( $ret > 0 ) {
- $self->RecordOutgoingMailTransaction( $self->TemplateObj->MIMEObj )
- if ($RT::RecordOutgoingEmail);
+ my ($ret) = $self->SendMessage($message);
+ if ( $ret > 0 && RT->Config->Get('RecordOutgoingEmail') ) {
+ if ($orig_message) {
+ $message->attach(
+ Type => 'application/x-rt-original-message',
+ Disposition => 'inline',
+ Data => $orig_message->as_string,
+ );
+ }
+ $self->RecordOutgoingMailTransaction($message);
+ $self->RecordDeferredRecipients();
}
- return (abs $ret);
+
+
+ return ( abs $ret );
}
-# }}}
+=head2 Prepare
+
+Builds an outgoing email we're going to send using scrip's template.
-# {{{ sub Prepare
+=cut
sub Prepare {
my $self = shift;
@@ -136,116 +169,116 @@ sub Prepare {
$self->RemoveInappropriateRecipients();
my %seen;
- foreach my $type qw(To Cc Bcc) {
- @{ $self->{ $type } } =
- grep defined && length && !$seen{ lc $_ }++,
- @{ $self->{ $type } };
+ foreach my $type (@EMAIL_RECIPIENT_HEADERS) {
+ @{ $self->{$type} }
+ = grep defined && length && !$seen{ lc $_ }++,
+ @{ $self->{$type} };
}
# Go add all the Tos, Ccs and Bccs that we need to to the message to
# make it happy, but only if we actually have values in those arrays.
- # TODO: We should be pulling the recipients out of the template and shove them into To, Cc and Bcc
+# TODO: We should be pulling the recipients out of the template and shove them into To, Cc and Bcc
- $self->SetHeader( 'To', join ( ', ', @{ $self->{'To'} } ) )
- if ( ! $MIMEObj->head->get('To') && $self->{'To'} && @{ $self->{'To'} } );
- $self->SetHeader( 'Cc', join ( ', ', @{ $self->{'Cc'} } ) )
- if ( !$MIMEObj->head->get('Cc') && $self->{'Cc'} && @{ $self->{'Cc'} } );
- $self->SetHeader( 'Bcc', join ( ', ', @{ $self->{'Bcc'} } ) )
- if ( !$MIMEObj->head->get('Bcc') && $self->{'Bcc'} && @{ $self->{'Bcc'} } );
+ for my $header (@EMAIL_RECIPIENT_HEADERS) {
- # PseudoTo (fake to headers) shouldn't get matched for message recipients.
+ $self->SetHeader( $header, join( ', ', @{ $self->{$header} } ) )
+ if ( !$MIMEObj->head->get($header)
+ && $self->{$header}
+ && @{ $self->{$header} } );
+}
+ # PseudoTo (fake to headers) shouldn't get matched for message recipients.
# If we don't have any 'To' header (but do have other recipients), drop in
# the pseudo-to header.
- $self->SetHeader( 'To', join ( ', ', @{ $self->{'PseudoTo'} } ) )
- if ( $self->{'PseudoTo'} && ( @{ $self->{'PseudoTo'} } )
- and ( !$MIMEObj->head->get('To') ) ) and ( $MIMEObj->head->get('Cc') or $MIMEObj->head->get('Bcc'));
+ $self->SetHeader( 'To', join( ', ', @{ $self->{'PseudoTo'} } ) )
+ if $self->{'PseudoTo'}
+ && @{ $self->{'PseudoTo'} }
+ && !$MIMEObj->head->get('To')
+ && ( $MIMEObj->head->get('Cc') or $MIMEObj->head->get('Bcc') );
# We should never have to set the MIME-Version header
$self->SetHeader( 'MIME-Version', '1.0' );
# fsck.com #5959: Since RT sends 8bit mail, we should say so.
- $self->SetHeader( 'Content-Transfer-Encoding','8bit');
+ $self->SetHeader( 'Content-Transfer-Encoding', '8bit' );
# For security reasons, we only send out textual mails.
- my @parts = $MIMEObj;
- while (my $part = shift @parts) {
- if ($part->is_multipart) {
- push @parts, $part->parts;
- }
- else {
- if ( RT::I18N::IsTextualContentType( $part->mime_type ) ) {
- $part->head->mime_attr( "Content-Type" => $part->mime_type )
- } else {
- $part->head->mime_attr( "Content-Type" => 'text/plain' );
- }
- $part->head->mime_attr( "Content-Type.charset" => 'utf-8' );
- }
+ foreach my $part ( grep !$_->is_multipart, $MIMEObj->parts_DFS ) {
+ my $type = $part->mime_type || 'text/plain';
+ $type = 'text/plain' unless RT::I18N::IsTextualContentType($type);
+ $part->head->mime_attr( "Content-Type" => $type );
+ $part->head->mime_attr( "Content-Type.charset" => 'utf-8' );
}
-
- RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, $RT::EmailOutputEncoding, 'mime_words_ok' );
+ RT::I18N::SetMIMEEntityToEncoding( $MIMEObj,
+ RT->Config->Get('EmailOutputEncoding'),
+ 'mime_words_ok', );
# Build up a MIME::Entity that looks like the original message.
- $self->AddAttachments() if ( $MIMEObj->head->get('RT-Attach-Message') );
+ $self->AddAttachments if ( $MIMEObj->head->get('RT-Attach-Message')
+ && ( $MIMEObj->head->get('RT-Attach-Message') !~ /^(n|no|0|off|false)$/i ) );
+
+ $self->AddTickets;
+
+ my $attachment = $self->TransactionObj->Attachments->First;
+ if ($attachment
+ && !(
+ $attachment->GetHeader('X-RT-Encrypt')
+ || $self->TicketObj->QueueObj->Encrypt
+ )
+ )
+ {
+ $attachment->SetHeader( 'X-RT-Encrypt' => 1 )
+ if ( $attachment->GetHeader("X-RT-Incoming-Encryption") || '' ) eq
+ 'Success';
+ }
return $result;
-
}
-# }}}
-
-# }}}
-
-
-
=head2 To
-Returns an array of Mail::Address objects containing all the To: recipients for this notification
+Returns an array of L<Email::Address> objects containing all the To: recipients for this notification
=cut
sub To {
my $self = shift;
- return ($self->_AddressesFromHeader('To'));
+ return ( $self->AddressesFromHeader('To') );
}
=head2 Cc
-Returns an array of Mail::Address objects containing all the Cc: recipients for this notification
+Returns an array of L<Email::Address> objects containing all the Cc: recipients for this notification
=cut
-sub Cc {
+sub Cc {
my $self = shift;
- return ($self->_AddressesFromHeader('Cc'));
+ return ( $self->AddressesFromHeader('Cc') );
}
=head2 Bcc
-Returns an array of Mail::Address objects containing all the Bcc: recipients for this notification
+Returns an array of L<Email::Address> objects containing all the Bcc: recipients for this notification
=cut
-
sub Bcc {
my $self = shift;
- return ($self->_AddressesFromHeader('Bcc'));
+ return ( $self->AddressesFromHeader('Bcc') );
}
-sub _AddressesFromHeader {
- my $self = shift;
- my $field = shift;
- my $header = $self->TemplateObj->MIMEObj->head->get($field);
- my @addresses = Mail::Address->parse($header);
+sub AddressesFromHeader {
+ my $self = shift;
+ my $field = shift;
+ my $header = $self->TemplateObj->MIMEObj->head->get($field);
+ my @addresses = Email::Address->parse($header);
return (@addresses);
}
-
-# {{{ SendMessage
-
=head2 SendMessage MIMEObj
sends the message using RT's preferred API.
@@ -254,6 +287,7 @@ TODO: Break this out to a separate module
=cut
sub SendMessage {
+
# DO NOT SHIFT @_ in this subroutine. It breaks Hook::LexWrap's
# ability to pass @_ to a 'post' routine.
my ( $self, $MIMEObj ) = @_;
@@ -262,36 +296,36 @@ sub SendMessage {
chomp $msgid;
$self->ScripActionObj->{_Message_ID}++;
-
- $RT::Logger->info( $msgid . " #"
- . $self->TicketObj->id . "/"
- . $self->TransactionObj->id
- . " - Scrip "
- . $self->ScripObj->id . " "
- . $self->ScripObj->Description );
-
- #If we don't have any recipients to send to, don't send a message;
- unless ( $MIMEObj->head->get('To')
- || $MIMEObj->head->get('Cc')
- || $MIMEObj->head->get('Bcc') )
- {
- $RT::Logger->info( $msgid . " No recipients found. Not sending.\n" );
- return (-1);
- }
- unless ($MIMEObj->head->get('Date')) {
- # We coerce localtime into an array since strftime has a flawed prototype that only accepts
- # a list
- $MIMEObj->head->replace(Date => strftime('%a, %d %b %Y %H:%M:%S %z', @{[localtime()]}));
- }
+ $RT::Logger->info( $msgid . " #"
+ . $self->TicketObj->id . "/"
+ . $self->TransactionObj->id
+ . " - Scrip "
+ . ($self->ScripObj->id || '#rule'). " "
+ . ( $self->ScripObj->Description || '' ) );
+
+ my $status = RT::Interface::Email::SendEmail(
+ Entity => $MIMEObj,
+ Ticket => $self->TicketObj,
+ Transaction => $self->TransactionObj,
+ );
- return (0) unless ($self->OutputMIMEObject($MIMEObj));
+
+ return $status unless ($status > 0 || exists $self->{'Deferred'});
my $success = $msgid . " sent ";
- foreach( qw(To Cc Bcc) ) {
+ foreach (@EMAIL_RECIPIENT_HEADERS) {
my $recipients = $MIMEObj->head->get($_);
- $success .= " $_: ". $recipients if $recipients;
+ $success .= " $_: " . $recipients if $recipients;
}
+
+ if( exists $self->{'Deferred'} ) {
+ for (qw(daily weekly susp)) {
+ $success .= "\nBatched email $_ for: ". join(", ", keys %{ $self->{'Deferred'}{ $_ } } )
+ if exists $self->{'Deferred'}{ $_ };
+ }
+ }
+
$success =~ s/\n//g;
$RT::Logger->info($success);
@@ -299,140 +333,166 @@ sub SendMessage {
return (1);
}
+=head2 AddAttachments
-=head2 OutputMIMEObject MIME::Entity
-
-Sends C<MIME::Entity> as an email message according to RT's mailer configuration.
-
-=cut
-
+Takes any attachments to this transaction and attaches them to the message
+we're building.
+=cut
-sub OutputMIMEObject {
+sub AddAttachments {
my $self = shift;
- my $MIMEObj = shift;
-
- my $msgid = $MIMEObj->head->get('Message-ID');
- chomp $msgid;
-
- my $SendmailArguments = $RT::SendmailArguments;
- if (defined $RT::VERPPrefix && defined $RT::VERPDomain) {
- my $EnvelopeFrom = $self->TransactionObj->CreatorObj->EmailAddress;
- $EnvelopeFrom =~ s/@/=/g;
- $EnvelopeFrom =~ s/\s//g;
- $SendmailArguments .= " -f ${RT::VERPPrefix}${EnvelopeFrom}\@${RT::VERPDomain}";
- }
-
- if ( $RT::MailCommand eq 'sendmailpipe' ) {
- eval {
- # don't ignore CHLD signal to get proper exit code
- local $SIG{'CHLD'} = 'DEFAULT';
+ my $MIMEObj = $self->TemplateObj->MIMEObj;
- my $mail;
- unless( open $mail, "|$RT::SendmailPath $SendmailArguments" ) {
- die "Couldn't run $RT::SendmailPath: $!";
- }
+ $MIMEObj->head->delete('RT-Attach-Message');
- # if something wrong with $mail->print we will get PIPE signal, handle it
- local $SIG{'PIPE'} = sub { die "$RT::SendmailPath closed pipe" };
- $MIMEObj->print($mail);
+ my $attachments = RT::Attachments->new($RT::SystemUser);
+ $attachments->Limit(
+ FIELD => 'TransactionId',
+ VALUE => $self->TransactionObj->Id
+ );
- unless ( close $mail ) {
- die "Close failed: $!" if $!; # system error
- # sendmail exit statuses mostly errors with data not software
- # TODO: status parsing: core dump, exit on signal or EX_*
- $RT::Logger->warning( "$RT::SendmailPath exitted with status $?" );
- }
- };
- if ($@) {
- $RT::Logger->crit( $msgid . "Could not send mail: " . $@ );
- return 0;
- }
- }
- else {
- my @mailer_args = ($RT::MailCommand);
- my $method = 'send';
+ # Don't attach anything blank
+ $attachments->LimitNotEmpty;
+ $attachments->OrderBy( FIELD => 'id' );
- local $ENV{MAILADDRESS};
+ # We want to make sure that we don't include the attachment that's
+ # being used as the "Content" of this message" unless that attachment's
+ # content type is not like text/...
+ my $transaction_content_obj = $self->TransactionObj->ContentObj;
- if ( $RT::MailCommand eq 'sendmail' ) {
- push @mailer_args, split(/\s+/, $SendmailArguments);
- }
- elsif ( $RT::MailCommand eq 'smtp' ) {
- $ENV{MAILADDRESS} = $RT::SMTPFrom || $MIMEObj->head->get('From');
- push @mailer_args, ( Host => $RT::SMTPServer );
- push @mailer_args, ( Debug => $RT::SMTPDebug );
- $method = 'smtpsend';
- }
- else {
- push @mailer_args, $RT::MailParams;
+ if ( $transaction_content_obj
+ && $transaction_content_obj->ContentType =~ m{text/}i )
+ {
+ # If this was part of a multipart/alternative, skip all of the kids
+ my $parent = $transaction_content_obj->ParentObj;
+ if ($parent and $parent->Id and $parent->ContentType eq "multipart/alternative") {
+ $attachments->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ FIELD => 'parent',
+ OPERATOR => '!=',
+ VALUE => $parent->Id,
+ );
+ } else {
+ $attachments->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ FIELD => 'id',
+ OPERATOR => '!=',
+ VALUE => $transaction_content_obj->Id,
+ );
}
+ }
- unless ( $MIMEObj->$method(@mailer_args) ) {
- $RT::Logger->crit( $msgid . "Could not send mail." );
- return (0);
+ # attach any of this transaction's attachments
+ my $seen_attachment = 0;
+ while ( my $attach = $attachments->Next ) {
+ if ( !$seen_attachment ) {
+ $MIMEObj->make_multipart( 'mixed', Force => 1 );
+ $seen_attachment = 1;
}
+ $self->AddAttachment($attach);
}
- return 1;
}
-# }}}
-
-# {{{ AddAttachments
+=head2 AddAttachment $attachment
-=head2 AddAttachments
-
-Takes any attachments to this transaction and attaches them to the message
+Takes one attachment object of L<RT::Attachmment> class and attaches it to the message
we're building.
=cut
+sub AddAttachment {
+ my $self = shift;
+ my $attach = shift;
+ my $MIMEObj = shift || $self->TemplateObj->MIMEObj;
+
+ $MIMEObj->attach(
+ Type => $attach->ContentType,
+ Charset => $attach->OriginalEncoding,
+ Data => $attach->OriginalContent,
+ Filename => $self->MIMEEncodeString( $attach->Filename ),
+ 'RT-Attachment:' => $self->TicketObj->Id . "/"
+ . $self->TransactionObj->Id . "/"
+ . $attach->id,
+ Encoding => '-SUGGEST',
+ );
+}
-sub AddAttachments {
- my $self = shift;
+=head2 AttachTickets [@IDs]
- my $MIMEObj = $self->TemplateObj->MIMEObj;
+Returns or set list of ticket's IDs that should be attached to an outgoing message.
- $MIMEObj->head->delete('RT-Attach-Message');
+B<Note> this method works as a class method and setup things global, so you have to
+clean list by passing undef as argument.
- my $attachments = RT::Attachments->new($RT::SystemUser);
- $attachments->Limit(
- FIELD => 'TransactionId',
- VALUE => $self->TransactionObj->Id
- );
- $attachments->OrderBy( FIELD => 'id');
-
- my $transaction_content_obj = $self->TransactionObj->ContentObj;
+=cut
- # attach any of this transaction's attachments
- while ( my $attach = $attachments->Next ) {
+{
+ my $list = [];
- # Don't attach anything blank
- next unless ( $attach->ContentLength );
-
-# We want to make sure that we don't include the attachment that's being used as the "Content" of this message.
- next
- if ( $transaction_content_obj
- && $transaction_content_obj->Id == $attach->Id
- && $transaction_content_obj->ContentType =~ qr{text/plain}i );
- $MIMEObj->make_multipart('mixed');
- $MIMEObj->attach(
- Type => $attach->ContentType,
- Charset => $attach->OriginalEncoding,
- Data => $attach->OriginalContent,
- Filename => $self->MIMEEncodeString( $attach->Filename,
- $RT::EmailOutputEncoding ),
- 'RT-Attachment:' => $self->TicketObj->Id."/".$self->TransactionObj->Id."/".$attach->id,
- Encoding => '-SUGGEST'
- );
+ sub AttachTickets {
+ my $self = shift;
+ $list = [ grep defined, @_ ] if @_;
+ return @$list;
}
+}
+
+=head2 AddTickets
+
+Attaches tickets to the current message, list of tickets' ids get from
+L</AttachTickets> method.
+=cut
+
+sub AddTickets {
+ my $self = shift;
+ $self->AddTicket($_) foreach $self->AttachTickets;
+ return;
}
-# }}}
+=head2 AddTicket $ID
-# {{{ RecordOutgoingMailTransaction
+Attaches a ticket with ID to the message.
+
+Each ticket is attached as multipart entity and all its messages and attachments
+are attached as sub entities in order of creation, but only if transaction type
+is Create or Correspond.
+
+=cut
+
+sub AddTicket {
+ my $self = shift;
+ my $tid = shift;
+
+ # XXX: we need a current user here, but who is current user?
+ my $attachs = RT::Attachments->new($RT::SystemUser);
+ my $txn_alias = $attachs->TransactionAlias;
+ $attachs->Limit( ALIAS => $txn_alias, FIELD => 'Type', VALUE => 'Create' );
+ $attachs->Limit(
+ ALIAS => $txn_alias,
+ FIELD => 'Type',
+ VALUE => 'Correspond'
+ );
+ $attachs->LimitByTicket($tid);
+ $attachs->LimitNotEmpty;
+ $attachs->OrderBy( FIELD => 'Created' );
+
+ my $ticket_mime = MIME::Entity->build(
+ Type => 'multipart/mixed',
+ Top => 0,
+ Description => "ticket #$tid",
+ );
+ while ( my $attachment = $attachs->Next ) {
+ $self->AddAttachment( $attachment, $ticket_mime );
+ }
+ if ( $ticket_mime->parts ) {
+ my $email_mime = $self->TemplateObj->MIMEObj;
+ $email_mime->make_multipart;
+ $email_mime->add_part($ticket_mime);
+ }
+ return;
+}
=head2 RecordOutgoingMailTransaction MIMEObj
@@ -440,12 +500,9 @@ Record a transaction in RT with this outgoing message for future record-keeping
=cut
-
-
sub RecordOutgoingMailTransaction {
- my $self = shift;
+ my $self = shift;
my $MIMEObj = shift;
-
my @parts = $MIMEObj->parts;
my @attachments;
@@ -453,26 +510,28 @@ sub RecordOutgoingMailTransaction {
foreach my $part (@parts) {
my $attach = $part->head->get('RT-Attachment');
if ($attach) {
- $RT::Logger->debug("We found an attachment. we want to not record it.");
+ $RT::Logger->debug(
+ "We found an attachment. we want to not record it.");
push @attachments, $attach;
} else {
$RT::Logger->debug("We found a part. we want to record it.");
push @keep, $part;
}
}
- $MIMEObj->parts(\@keep);
+ $MIMEObj->parts( \@keep );
foreach my $attachment (@attachments) {
- $MIMEObj->head->add('RT-Attachment', $attachment);
+ $MIMEObj->head->add( 'RT-Attachment', $attachment );
}
RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, 'utf-8', 'mime_words_ok' );
- my $transaction = RT::Transaction->new($self->TransactionObj->CurrentUser);
+ my $transaction
+ = RT::Transaction->new( $self->TransactionObj->CurrentUser );
- # XXX: TODO -> Record attachments as references to things in the attachments table, maybe.
+# XXX: TODO -> Record attachments as references to things in the attachments table, maybe.
my $type;
- if ($self->TransactionObj->Type eq 'Comment') {
+ if ( $self->TransactionObj->Type eq 'Comment' ) {
$type = 'CommentEmailRecord';
} else {
$type = 'EmailRecord';
@@ -489,19 +548,15 @@ sub RecordOutgoingMailTransaction {
ActivateScrips => 0
);
- if( $id ) {
- $self->{'OutgoingMailTransaction'} = $id;
+ if ($id) {
+ $self->{'OutgoingMailTransaction'} = $id;
} else {
- $RT::Logger->warning( "Could not record outgoing message transaction: $msg" );
+ $RT::Logger->warning(
+ "Could not record outgoing message transaction: $msg");
}
return $id;
}
-# }}}
-#
-
-# {{{ sub SetRTSpecialHeaders
-
=head2 SetRTSpecialHeaders
This routine adds all the random headers that RT wants in a mail message
@@ -514,161 +569,266 @@ sub SetRTSpecialHeaders {
$self->SetSubject();
$self->SetSubjectToken();
- $self->SetHeaderAsEncoding( 'Subject', $RT::EmailOutputEncoding )
- if ($RT::EmailOutputEncoding);
+ $self->SetHeaderAsEncoding( 'Subject',
+ RT->Config->Get('EmailOutputEncoding') )
+ if ( RT->Config->Get('EmailOutputEncoding') );
$self->SetReturnAddress();
$self->SetReferencesHeaders();
- unless ($self->TemplateObj->MIMEObj->head->get('Message-ID')) {
- # Get Message-ID for this txn
- my $msgid = "";
- $msgid = $self->TransactionObj->Message->First->GetHeader("RT-Message-ID")
- || $self->TransactionObj->Message->First->GetHeader("Message-ID")
- if $self->TransactionObj->Message && $self->TransactionObj->Message->First;
+ unless ( $self->TemplateObj->MIMEObj->head->get('Message-ID') ) {
- # If there is one, and we can parse it, then base our Message-ID on it
- if ($msgid
- and $msgid =~ s/<(rt-.*?-\d+-\d+)\.(\d+)-\d+-\d+\@\Q$RT::Organization\E>$/
+ # Get Message-ID for this txn
+ my $msgid = "";
+ if ( my $msg = $self->TransactionObj->Message->First ) {
+ $msgid = $msg->GetHeader("RT-Message-ID")
+ || $msg->GetHeader("Message-ID");
+ }
+
+ # If there is one, and we can parse it, then base our Message-ID on it
+ if ( $msgid
+ and $msgid
+ =~ s/<(rt-.*?-\d+-\d+)\.(\d+)-\d+-\d+\@\QRT->Config->Get('Organization')\E>$/
"<$1." . $self->TicketObj->id
. "-" . $self->ScripObj->id
. "-" . $self->ScripActionObj->{_Message_ID}
- . "@" . $RT::Organization . ">"/eg
- and $2 == $self->TicketObj->id) {
- $self->SetHeader( "Message-ID" => $msgid );
- } else {
- $self->SetHeader( 'Message-ID',
- "<rt-"
- . $RT::VERSION . "-"
- . $$ . "-"
- . CORE::time() . "-"
- . int(rand(2000)) . '.'
- . $self->TicketObj->id . "-"
- . $self->ScripObj->id . "-" # Scrip
- . $self->ScripActionObj->{_Message_ID} . "@" # Email sent
- . $RT::Organization
- . ">" );
- }
+ . "@" . RT->Config->Get('Organization') . ">"/eg
+ and $2 == $self->TicketObj->id
+ )
+ {
+ $self->SetHeader( "Message-ID" => $msgid );
+ } else {
+ $self->SetHeader(
+ 'Message-ID' => RT::Interface::Email::GenMessageId(
+ Ticket => $self->TicketObj,
+ Scrip => $self->ScripObj,
+ ScripAction => $self->ScripActionObj
+ ),
+ );
+ }
}
$self->SetHeader( 'Precedence', "bulk" )
- unless ( $self->TemplateObj->MIMEObj->head->get("Precedence") );
+ unless ( $self->TemplateObj->MIMEObj->head->get("Precedence") );
- $self->SetHeader( 'X-RT-Loop-Prevention', $RT::rtname );
+ $self->SetHeader( 'X-RT-Loop-Prevention', RT->Config->Get('rtname') );
$self->SetHeader( 'RT-Ticket',
- $RT::rtname . " #" . $self->TicketObj->id() );
+ RT->Config->Get('rtname') . " #" . $self->TicketObj->id() );
$self->SetHeader( 'Managed-by',
"RT $RT::VERSION (http://www.bestpractical.com/rt/)" );
- $self->SetHeader( 'RT-Originator',
- $self->TransactionObj->CreatorObj->EmailAddress );
+# XXX, TODO: use /ShowUser/ShowUserEntry(or something like that) when it would be
+# refactored into user's method.
+ if ( my $email = $self->TransactionObj->CreatorObj->EmailAddress ) {
+ $self->SetHeader( 'RT-Originator', $email );
+ }
}
-# }}}
+sub DeferDigestRecipients {
+ my $self = shift;
+ $RT::Logger->debug( "Calling SetRecipientDigests for transaction " . $self->TransactionObj . ", id " . $self->TransactionObj->id );
+
+ # The digest attribute will be an array of notifications that need to
+ # be sent for this transaction. The array will have the following
+ # format for its objects.
+ # $digest_hash -> {daily|weekly|susp} -> address -> {To|Cc|Bcc}
+ # -> sent -> {true|false}
+ # The "sent" flag will be used by the cron job to indicate that it has
+ # run on this transaction.
+ # In a perfect world we might move this hash construction to the
+ # extension module itself.
+ my $digest_hash = {};
+
+ foreach my $mailfield (@EMAIL_RECIPIENT_HEADERS) {
+ # If we have a "PseudoTo", the "To" contains it, so we don't need to access it
+ next if ( ( $self->{'PseudoTo'} && @{ $self->{'PseudoTo'} } ) && ( $mailfield eq 'To' ) );
+ $RT::Logger->debug( "Working on mailfield $mailfield; recipients are " . join( ',', @{ $self->{$mailfield} } ) );
+
+ # Store the 'daily digest' folk in an array.
+ my ( @send_now, @daily_digest, @weekly_digest, @suspended );
+
+ # Have to get the list of addresses directly from the MIME header
+ # at this point.
+ $RT::Logger->debug( $self->TemplateObj->MIMEObj->head->as_string );
+ foreach my $rcpt ( map { $_->address } $self->AddressesFromHeader($mailfield) ) {
+ next unless $rcpt;
+ my $user_obj = RT::User->new($RT::SystemUser);
+ $user_obj->LoadByEmail($rcpt);
+ if ( ! $user_obj->id ) {
+ # If there's an email address in here without an associated
+ # RT user, pass it on through.
+ $RT::Logger->debug( "User $rcpt is not associated with an RT user object. Send mail.");
+ push( @send_now, $rcpt );
+ next;
+ }
-# }}}
+ my $mailpref = RT->Config->Get( 'EmailFrequency', $user_obj ) || '';
+ $RT::Logger->debug( "Got user mail preference '$mailpref' for user $rcpt");
-# {{{ RemoveInappropriateRecipients
+ if ( $mailpref =~ /daily/i ) { push( @daily_digest, $rcpt ) }
+ elsif ( $mailpref =~ /weekly/i ) { push( @weekly_digest, $rcpt ) }
+ elsif ( $mailpref =~ /suspend/i ) { push( @suspended, $rcpt ) }
+ else { push( @send_now, $rcpt ) }
+ }
-=head2 RemoveInappropriateRecipients
+ # Reset the relevant mail field.
+ $RT::Logger->debug( "Removing deferred recipients from $mailfield: line");
+ if (@send_now) {
+ $self->SetHeader( $mailfield, join( ', ', @send_now ) );
+ } else { # No recipients! Remove the header.
+ $self->TemplateObj->MIMEObj->head->delete($mailfield);
+ }
-Remove addresses that are RT addresses or that are on this transaction's blacklist
+ # Push the deferred addresses into the appropriate field in
+ # our attribute hash, with the appropriate mail header.
+ $RT::Logger->debug(
+ "Setting deferred recipients for attribute creation");
+ $digest_hash->{'daily'}->{$_} = {'header' => $mailfield , _sent => 0} for (@daily_digest);
+ $digest_hash->{'weekly'}->{$_} ={'header' => $mailfield, _sent => 0} for (@weekly_digest);
+ $digest_hash->{'susp'}->{$_} = {'header' => $mailfield, _sent =>0 } for (@suspended);
+ }
-=cut
+ if ( scalar keys %$digest_hash ) {
-sub RemoveInappropriateRecipients {
+ # Save the hash so that we can add it as an attribute to the
+ # outgoing email transaction.
+ $self->{'Deferred'} = $digest_hash;
+ } else {
+ $RT::Logger->debug( "No recipients found for deferred delivery on "
+ . "transaction #"
+ . $self->TransactionObj->id );
+ }
+}
+
+
+
+sub RecordDeferredRecipients {
my $self = shift;
+ return unless exists $self->{'Deferred'};
+
+ my $txn_id = $self->{'OutgoingMailTransaction'};
+ return unless $txn_id;
- my $msgid = $self->TemplateObj->MIMEObj->head->get ('Message-Id');
+ my $txn_obj = RT::Transaction->new( $self->CurrentUser );
+ $txn_obj->Load( $txn_id );
+ my( $ret, $msg ) = $txn_obj->AddAttribute(
+ Name => 'DeferredRecipients',
+ Content => $self->{'Deferred'}
+ );
+ $RT::Logger->warning( "Unable to add deferred recipients to outgoing transaction: $msg" )
+ unless $ret;
+ return ($ret,$msg);
+}
+=head2 SquelchMailTo [@ADDRESSES]
- my @blacklist;
+Mark ADDRESSES to be removed from list of the recipients. Returns list of the addresses.
+To empty list pass undefined argument.
+
+B<Note> that this method can be called as class method and works globaly. Don't forget to
+clean this list when blocking is not required anymore, pass undef to do this.
+
+=cut
- my @types = qw/To Cc Bcc/;
+{
+ my $squelch = [];
- # Weed out any RT addresses. We really don't want to talk to ourselves!
- foreach my $type (@types) {
- @{ $self->{$type} } =
- RT::EmailParser::CullRTAddresses( "", @{ $self->{$type} } );
+ sub SquelchMailTo {
+ my $self = shift;
+ if (@_) {
+ $squelch = [ grep defined, @_ ];
+ }
+ return @$squelch;
}
+}
+
+=head2 RemoveInappropriateRecipients
+
+Remove addresses that are RT addresses or that are on this transaction's blacklist
+
+=cut
+
+sub RemoveInappropriateRecipients {
+ my $self = shift;
+
+ my @blacklist = ();
# If there are no recipients, don't try to send the message.
# If the transaction has content and has the header RT-Squelch-Replies-To
- if ( $self->TransactionObj->Attachments->First() ) {
- if (
- $self->TransactionObj->Attachments->First->GetHeader(
- 'RT-DetectedAutoGenerated')
- )
- {
+ my $msgid = $self->TemplateObj->MIMEObj->head->get('Message-Id');
+ if ( my $attachment = $self->TransactionObj->Attachments->First ) {
+
+ if ( $attachment->GetHeader('RT-DetectedAutoGenerated') ) {
# What do we want to do with this? It's probably (?) a bounce
# caused by one of the watcher addresses being broken.
# Default ("true") is to redistribute, for historical reasons.
- if ( !$RT::RedistributeAutoGeneratedMessages ) {
+ if ( !RT->Config->Get('RedistributeAutoGeneratedMessages') ) {
# Don't send to any watchers.
- @{ $self->{'To'} } = ();
- @{ $self->{'Cc'} } = ();
- @{ $self->{'Bcc'} } = ();
-
- $RT::Logger->info( $msgid . " The incoming message was autogenerated. Not redistributing this message based on site configuration.\n");
- }
- elsif ( $RT::RedistributeAutoGeneratedMessages eq 'privileged' ) {
+ @{ $self->{$_} } = () for (@EMAIL_RECIPIENT_HEADERS);
+ $RT::Logger->info( $msgid
+ . " The incoming message was autogenerated. "
+ . "Not redistributing this message based on site configuration."
+ );
+ } elsif ( RT->Config->Get('RedistributeAutoGeneratedMessages') eq
+ 'privileged' )
+ {
# Only send to "privileged" watchers.
- #
-
- foreach my $type (@types) {
-
+ foreach my $type (@EMAIL_RECIPIENT_HEADERS) {
foreach my $addr ( @{ $self->{$type} } ) {
my $user = RT::User->new($RT::SystemUser);
$user->LoadByEmail($addr);
- @{ $self->{$type} } =
- grep ( !/^\Q$addr\E$/, @{ $self->{$type} } )
- if ( !$user->Privileged );
-
+ push @blacklist, $addr if ( !$user->Privileged );
}
}
- $RT::Logger->info( $msgid . " The incoming message was autogenerated. Not redistributing this message to unprivileged users based on site configuration.\n");
-
+ $RT::Logger->info( $msgid
+ . " The incoming message was autogenerated. "
+ . "Not redistributing this message to unprivileged users based on site configuration."
+ );
}
-
}
- my $squelch =
- $self->TransactionObj->Attachments->First->GetHeader(
- 'RT-Squelch-Replies-To');
-
- if ($squelch) {
- @blacklist = split( /,/, $squelch );
+ if ( my $squelch = $attachment->GetHeader('RT-Squelch-Replies-To') ) {
+ push @blacklist, split( /,/, $squelch );
}
}
- # Let's grab the SquelchMailTo attribue and push those entries into the @blacklist
- my @non_recipients = $self->TicketObj->SquelchMailTo;
- foreach my $attribute (@non_recipients) {
- push @blacklist, $attribute->Content;
- }
+# Let's grab the SquelchMailTo attribue and push those entries into the @blacklist
+ push @blacklist, map $_->Content, $self->TicketObj->SquelchMailTo;
+ push @blacklist, $self->SquelchMailTo;
# Cycle through the people we're sending to and pull out anyone on the
# system blacklist
- foreach my $person_to_yank (@blacklist) {
- $person_to_yank =~ s/\s//g;
- foreach my $type (@types) {
- @{ $self->{$type} } =
- grep ( !/^\Q$person_to_yank\E$/, @{ $self->{$type} } );
+ # Trim leading and trailing spaces.
+ @blacklist = map { RT::User->CanonicalizeEmailAddress( $_->address ) } Email::Address->parse(join(', ', grep {defined} @blacklist));
+
+ foreach my $type (@EMAIL_RECIPIENT_HEADERS) {
+ my @addrs;
+ foreach my $addr ( @{ $self->{$type} } ) {
+
+ # Weed out any RT addresses. We really don't want to talk to ourselves!
+ # If we get a reply back, that means it's not an RT address
+ if ( !RT::EmailParser->CullRTAddresses($addr) ) {
+ $RT::Logger->info( $msgid . "$addr appears to point to this RT instance. Skipping" );
+ next;
+ }
+ if ( grep /^\Q$addr\E$/, @blacklist ) {
+ $RT::Logger->info( $msgid . "$addr was blacklisted for outbound mail on this transaction. Skipping");
+ next;
+ }
+ push @addrs, $addr;
}
+ @{ $self->{$type} } = @addrs;
}
}
-# }}}
-# {{{ sub SetReturnAddress
-
=head2 SetReturnAddress is_comment => BOOLEAN
Calculate and set From and Reply-To headers based on the is_comment flag.
@@ -680,6 +840,7 @@ sub SetReturnAddress {
my $self = shift;
my %args = (
is_comment => 0,
+ friendly_name => undef,
@_
);
@@ -689,33 +850,35 @@ sub SetReturnAddress {
if ( $args{'is_comment'} ) {
$replyto = $self->TicketObj->QueueObj->CommentAddress
- || $RT::CommentAddress;
- }
- else {
+ || RT->Config->Get('CommentAddress');
+ } else {
$replyto = $self->TicketObj->QueueObj->CorrespondAddress
- || $RT::CorrespondAddress;
+ || RT->Config->Get('CorrespondAddress');
}
unless ( $self->TemplateObj->MIMEObj->head->get('From') ) {
- if ($RT::UseFriendlyFromLine) {
- my $friendly_name = $self->TransactionObj->CreatorObj->RealName
- || $self->TransactionObj->CreatorObj->Name;
- if ( $friendly_name =~ /^"(.*)"$/ ) { # a quoted string
- $friendly_name = $1;
+ if ( RT->Config->Get('UseFriendlyFromLine') ) {
+ my $friendly_name = $args{friendly_name};
+
+ unless ( $friendly_name ) {
+ $friendly_name = $self->TransactionObj->CreatorObj->FriendlyName;
+ if ( $friendly_name =~ /^"(.*)"$/ ) { # a quoted string
+ $friendly_name = $1;
+ }
}
$friendly_name =~ s/"/\\"/g;
$self->SetHeader(
'From',
sprintf(
- $RT::FriendlyFromLineFormat,
- $self->MIMEEncodeString( $friendly_name,
- $RT::EmailOutputEncoding ),
+ RT->Config->Get('FriendlyFromLineFormat'),
+ $self->MIMEEncodeString(
+ $friendly_name, RT->Config->Get('EmailOutputEncoding')
+ ),
$replyto
),
);
- }
- else {
+ } else {
$self->SetHeader( 'From', $replyto );
}
}
@@ -726,10 +889,6 @@ sub SetReturnAddress {
}
-# }}}
-
-# {{{ sub SetHeader
-
=head2 SetHeader FIELD, VALUE
Set the FIELD of the current MIME object into VALUE.
@@ -743,20 +902,16 @@ sub SetHeader {
chomp $val;
chomp $field;
- $self->TemplateObj->MIMEObj->head->fold_length( $field, 10000 );
- $self->TemplateObj->MIMEObj->head->replace( $field, $val );
- return $self->TemplateObj->MIMEObj->head->get($field);
+ my $head = $self->TemplateObj->MIMEObj->head;
+ $head->fold_length( $field, 10000 );
+ $head->replace( $field, $val );
+ return $head->get($field);
}
-# }}}
-
-
-# {{{ sub SetSubject
-
=head2 SetSubject
-This routine sets the subject. it does not add the rt tag. that gets done elsewhere
-If $self->{'Subject'} is already defined, it uses that. otherwise, it tries to get
+This routine sets the subject. it does not add the rt tag. That gets done elsewhere
+If subject is already defined via template, it uses that. otherwise, it tries to get
the transaction's subject.
=cut
@@ -765,39 +920,29 @@ sub SetSubject {
my $self = shift;
my $subject;
- my $message = $self->TransactionObj->Attachments;
if ( $self->TemplateObj->MIMEObj->head->get('Subject') ) {
return ();
}
+
+ my $message = $self->TransactionObj->Attachments;
+ $message->RowsPerPage(1);
if ( $self->{'Subject'} ) {
$subject = $self->{'Subject'};
+ } elsif ( my $first = $message->First ) {
+ my $tmp = $first->GetHeader('Subject');
+ $subject = defined $tmp ? $tmp : $self->TicketObj->Subject;
+ } else {
+ $subject = $self->TicketObj->Subject;
}
- elsif ( ( $message->First() ) && ( $message->First->Headers ) ) {
- my $header = $message->First->Headers();
- $header =~ s/\n\s+/ /g;
- if ( $header =~ /^Subject: (.*?)$/m ) {
- $subject = $1;
- }
- else {
- $subject = $self->TicketObj->Subject();
- }
-
- }
- else {
- $subject = $self->TicketObj->Subject();
- }
+ $subject = '' unless defined $subject;
+ chomp $subject;
- $subject =~ s/(\r\n|\n|\s)/ /gi;
+ $subject =~ s/(\r\n|\n|\s)/ /g;
- chomp $subject;
$self->SetHeader( 'Subject', $subject );
}
-# }}}
-
-# {{{ sub SetSubjectToken
-
=head2 SetSubjectToken
This routine fixes the RT tag in the subject. It's unlikely that you want to overwrite this.
@@ -806,22 +951,16 @@ This routine fixes the RT tag in the subject. It's unlikely that you want to ove
sub SetSubjectToken {
my $self = shift;
- my $sub = $self->TemplateObj->MIMEObj->head->get('Subject');
- my $id = $self->TicketObj->id;
-
- my $token_re = $RT::EmailSubjectTagRegex;
- $token_re = qr/\Q$RT::rtname\E/o unless $token_re;
- return if $sub =~ /\[$token_re\s+#$id\]/;
- $sub =~ s/(\r\n|\n|\s)/ /gi;
- chomp $sub;
- $self->TemplateObj->MIMEObj->head->replace(
- Subject => "[$RT::rtname #$id] $sub",
+ my $head = $self->TemplateObj->MIMEObj->head;
+ $head->replace(
+ Subject => RT::Interface::Email::AddSubjectTag(
+ Encode::decode_utf8( $head->get('Subject') ),
+ $self->TicketObj,
+ ),
);
}
-# }}}
-
=head2 SetReferencesHeaders
Set References and In-Reply-To headers for this message.
@@ -829,18 +968,14 @@ Set References and In-Reply-To headers for this message.
=cut
sub SetReferencesHeaders {
-
my $self = shift;
my ( @in_reply_to, @references, @msgid );
- my $attachments = $self->TransactionObj->Message;
-
- if ( my $top = $attachments->First() ) {
- @in_reply_to = split(/\s+/m, $top->GetHeader('In-Reply-To') || '');
- @references = split(/\s+/m, $top->GetHeader('References') || '' );
- @msgid = split(/\s+/m, $top->GetHeader('Message-ID') || '');
- }
- else {
+ if ( my $top = $self->TransactionObj->Message->First ) {
+ @in_reply_to = split( /\s+/m, $top->GetHeader('In-Reply-To') || '' );
+ @references = split( /\s+/m, $top->GetHeader('References') || '' );
+ @msgid = split( /\s+/m, $top->GetHeader('Message-ID') || '' );
+ } else {
return (undef);
}
@@ -848,53 +983,54 @@ sub SetReferencesHeaders {
# the RT Web UI, and hence we want to *not* append its Message-ID
# to the References and In-Reply-To. OR it came from an outside
# source, and we should treat it as per the RFC
- if ( "@msgid" =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>/) {
+ my $org = RT->Config->Get('Organization');
+ if ( "@msgid" =~ /<(rt-.*?-\d+-\d+)\.(\d+)-0-0\@\Q$org\E>/ ) {
+
+ # Make all references which are internal be to version which we
+ # have sent out
- # Make all references which are internal be to version which we
- # have sent out
- for (@references, @in_reply_to) {
- s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>$/
+ for ( @references, @in_reply_to ) {
+ s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@\Q$org\E>$/
"<$1." . $self->TicketObj->id .
"-" . $self->ScripObj->id .
"-" . $self->ScripActionObj->{_Message_ID} .
- "@" . $RT::Organization . ">"/eg
- }
+ "@" . $org . ">"/eg
+ }
- # In reply to whatever the internal message was in reply to
- $self->SetHeader( 'In-Reply-To', join( " ", ( @in_reply_to )));
+ # In reply to whatever the internal message was in reply to
+ $self->SetHeader( 'In-Reply-To', join( " ", (@in_reply_to) ) );
- # Default the references to whatever we're in reply to
- @references = @in_reply_to unless @references;
+ # Default the references to whatever we're in reply to
+ @references = @in_reply_to unless @references;
- # References are unchanged from internal
+ # References are unchanged from internal
} else {
- # In reply to that message
- $self->SetHeader( 'In-Reply-To', join( " ", ( @msgid )));
- # Default the references to whatever we're in reply to
- @references = @in_reply_to unless @references;
+ # In reply to that message
+ $self->SetHeader( 'In-Reply-To', join( " ", (@msgid) ) );
- # Push that message onto the end of the references
- push @references, @msgid;
+ # Default the references to whatever we're in reply to
+ @references = @in_reply_to unless @references;
+
+ # Push that message onto the end of the references
+ push @references, @msgid;
}
# Push pseudo-ref to the front
my $pseudo_ref = $self->PseudoReference;
- @references = ($pseudo_ref, grep { $_ ne $pseudo_ref } @references);
+ @references = ( $pseudo_ref, grep { $_ ne $pseudo_ref } @references );
# If there are more than 10 references headers, remove all but the
# first four and the last six (Gotta keep this from growing
# forever)
- splice(@references, 4, -6) if ($#references >= 10);
+ splice( @references, 4, -6 ) if ( $#references >= 10 );
# Add on the references
- $self->SetHeader( 'References', join( " ", @references) );
+ $self->SetHeader( 'References', join( " ", @references ) );
$self->TemplateObj->MIMEObj->head->fold_length( 'References', 80 );
}
-# }}}
-
=head2 PseudoReference
Returns a fake Message-ID: header for the ticket to allow a base level of threading
@@ -904,13 +1040,13 @@ Returns a fake Message-ID: header for the ticket to allow a base level of thread
sub PseudoReference {
my $self = shift;
- my $pseudo_ref = '<RT-Ticket-'.$self->TicketObj->id .'@'.$RT::Organization .'>';
+ my $pseudo_ref
+ = '<RT-Ticket-'
+ . $self->TicketObj->id . '@'
+ . RT->Config->Get('Organization') . '>';
return $pseudo_ref;
}
-
-# {{{ SetHeadingAsEncoding
-
=head2 SetHeaderAsEncoding($field_name, $charset_encoding)
This routine converts the field into specified charset encoding.
@@ -921,86 +1057,37 @@ sub SetHeaderAsEncoding {
my $self = shift;
my ( $field, $enc ) = ( shift, shift );
- if ($field eq 'From' and $RT::SMTPFrom) {
- $self->TemplateObj->MIMEObj->head->replace( $field, $RT::SMTPFrom );
- return;
- }
-
- my $value = $self->TemplateObj->MIMEObj->head->get($field);
-
- $value = $self->MIMEEncodeString($value, $enc);
+ my $head = $self->TemplateObj->MIMEObj->head;
- $self->TemplateObj->MIMEObj->head->replace( $field, $value );
+ if ( lc($field) eq 'from' and RT->Config->Get('SMTPFrom') ) {
+ $head->replace( $field, RT->Config->Get('SMTPFrom') );
+ return;
+ }
+ my $value = $head->get( $field );
+ $value = $self->MIMEEncodeString( $value, $enc );
+ $head->replace( $field, $value );
-}
-# }}}
+}
-# {{{ MIMEEncodeString
+=head2 MIMEEncodeString
-=head2 MIMEEncodeString STRING ENCODING
+Takes a perl string and optional encoding pass it over
+L<RT::Interface::Email/EncodeToMIME>.
-Takes a string and a possible encoding and returns the string wrapped in MIME goo.
+Basicly encode a string using B encoding according to RFC2047.
=cut
sub MIMEEncodeString {
- my $self = shift;
- my $value = shift;
- # using RFC2047 notation, sec 2.
- # encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
- my $charset = shift;
- my $encoding = 'B';
- # An 'encoded-word' may not be more than 75 characters long
- #
- # MIME encoding increases 4/3*(number of bytes), and always in multiples
- # of 4. Thus we have to find the best available value of bytes available
- # for each chunk.
- #
- # First we get the integer max which max*4/3 would fit on space.
- # Then we find the greater multiple of 3 lower or equal than $max.
- my $max = int(((75-length('=?'.$charset.'?'.$encoding.'?'.'?='))*3)/4);
- $max = int($max/3)*3;
-
- chomp $value;
-
- if ( $max <= 0 ) {
- # gives an error...
- $RT::Logger->crit("Can't encode! Charset or encoding too big.\n");
- return ($value);
- }
-
- return ($value) unless $value =~ /[^\x20-\x7e]/;
-
- $value =~ s/\s*$//;
-
- # we need perl string to split thing char by char
- Encode::_utf8_on($value) unless Encode::is_utf8( $value );
-
- my ($tmp, @chunks) = ('', ());
- while ( length $value ) {
- my $char = substr($value, 0, 1, '');
- my $octets = Encode::encode( $charset, $char );
- if ( length($tmp) + length($octets) > $max ) {
- push @chunks, $tmp;
- $tmp = '';
- }
- $tmp .= $octets;
- }
- push @chunks, $tmp if length $tmp;
-
- # encode an join chuncks
- $value = join "\n ",
- map encode_mimeword( $_, $encoding, $charset ), @chunks ;
- return($value);
+ my $self = shift;
+ return RT::Interface::Email::EncodeToMIME( String => $_[0], Charset => $_[1] );
}
-# }}}
-
eval "require RT::Action::SendEmail_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SendEmail_Vendor.pm});
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/SendEmail_Vendor.pm} );
eval "require RT::Action::SendEmail_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SendEmail_Local.pm});
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/SendEmail_Local.pm} );
1;
diff --git a/rt/lib/RT/Action/SetPriority.pm b/rt/lib/RT/Action/SetPriority.pm
index b4c8ee1..9b08389 100644
--- a/rt/lib/RT/Action/SetPriority.pm
+++ b/rt/lib/RT/Action/SetPriority.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,12 +45,11 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Action::SetPriority;
-require RT::Action::Generic;
+use base 'RT::Action';
use strict;
-use vars qw/@ISA/;
-@ISA=qw(RT::Action::Generic);
#Do what we need to do and send it out.
diff --git a/rt/lib/RT/Action/UserDefined.pm b/rt/lib/RT/Action/UserDefined.pm
index 7bf6eee..80ef492 100644
--- a/rt/lib/RT/Action/UserDefined.pm
+++ b/rt/lib/RT/Action/UserDefined.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,14 +45,11 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
package RT::Action::UserDefined;
-use RT::Action::Generic;
+use base 'RT::Action';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Action::Generic);
=head2 Prepare
diff --git a/rt/lib/RT/Approval.pm b/rt/lib/RT/Approval.pm
new file mode 100644
index 0000000..c381ba1
--- /dev/null
+++ b/rt/lib/RT/Approval.pm
@@ -0,0 +1,74 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Approval;
+use strict;
+use warnings;
+
+use RT::Ruleset;
+
+RT::Ruleset->Add(
+ Name => 'Approval',
+ Rules => [
+ 'RT::Approval::Rule::NewPending',
+ 'RT::Approval::Rule::Rejected',
+ 'RT::Approval::Rule::Passed',
+ 'RT::Approval::Rule::Created',
+ ]);
+
+eval "require RT::Approval_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Approval_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Approval_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Approval_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Approval/Rule.pm b/rt/lib/RT/Approval/Rule.pm
new file mode 100644
index 0000000..37ca478
--- /dev/null
+++ b/rt/lib/RT/Approval/Rule.pm
@@ -0,0 +1,85 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Approval::Rule;
+use strict;
+use warnings;
+
+use base 'RT::Rule';
+
+use constant _Queue => '___Approvals';
+
+sub Prepare {
+ my $self = shift;
+ return unless $self->SUPER::Prepare();
+ $self->TicketObj->Type eq 'approval';
+}
+
+sub GetTemplate {
+ my ($self, $template_name, %args) = @_;
+ my $template = RT::Template->new($self->CurrentUser);
+ $template->Load($template_name) or return;
+ my ($result, $msg) = $template->Parse(%args);
+
+ # XXX: error handling
+
+ return $template;
+}
+
+eval "require RT::Approval::Rule_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Approval/Rule_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Approval::Rule_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Approval/Rule_Local.pm}) {
+ die $@;
+};
+
+1;
+
diff --git a/rt/lib/RT/Approval/Rule/Created.pm b/rt/lib/RT/Approval/Rule/Created.pm
new file mode 100644
index 0000000..73ba2db
--- /dev/null
+++ b/rt/lib/RT/Approval/Rule/Created.pm
@@ -0,0 +1,71 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Approval::Rule::Created;
+use strict;
+use warnings;
+use base 'RT::Approval::Rule';
+
+use constant _Stage => 'TransactionBatch';
+
+use constant Description => "Notify Owner of their ticket has been approved by some or all approvers"; # loc
+
+sub Prepare {
+ my $self = shift;
+ return unless $self->SUPER::Prepare();
+
+ $self->TransactionObj->Type eq 'Create' &&
+ !$self->TicketObj->HasUnresolvedDependencies( Type => 'approval' );
+}
+
+sub Commit {
+ my $self = shift;
+ $self->RunScripAction('Open Tickets' => 'Blank');
+}
+
+1;
diff --git a/rt/lib/RT/Approval/Rule/NewPending.pm b/rt/lib/RT/Approval/Rule/NewPending.pm
new file mode 100644
index 0000000..5a6f1ed
--- /dev/null
+++ b/rt/lib/RT/Approval/Rule/NewPending.pm
@@ -0,0 +1,97 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Approval::Rule::NewPending;
+use strict;
+use warnings;
+use base 'RT::Approval::Rule';
+
+use constant Description => "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"; # loc
+
+sub Prepare {
+ my $self = shift;
+ return unless $self->SUPER::Prepare();
+
+ $self->OnStatusChange('open') and
+ eval { $T::Approving = ($self->TicketObj->AllDependedOnBy( Type => 'ticket' ))[0] }
+}
+
+sub Commit {
+ my $self = shift;
+ my ($top) = $self->TicketObj->AllDependedOnBy( Type => 'ticket' );
+ my $t = $self->TicketObj->Transactions;
+ my $to;
+ while ( my $o = $t->Next ) {
+ $to = $o, last if $o->Type eq 'Create';
+ }
+
+ # XXX: this makes the owner incorrect so notify owner won't work
+ # local $self->{TicketObj} = $top;
+
+ # first txn entry of the approval ticket
+ local $self->{TransactionObj} = $to;
+ $self->RunScripAction('Notify Owner', 'New Pending Approval', @_);
+
+ return;
+
+ # this generates more correct content of the message, but not sure
+ # if ccmessageto is the right way to do this.
+ my $template = $self->GetTemplate('New Pending Approval',
+ TicketObj => $top,
+ TransactionObj => $to)
+ or return;
+
+ my ( $result, $msg ) = $template->Parse(
+ TicketObj => $top,
+ );
+ $self->TicketObj->Comment( CcMessageTo => $self->TicketObj->OwnerObj->EmailAddress,
+ MIMEObj => $template->MIMEObj );
+
+}
+
+1;
diff --git a/rt/lib/RT/Approval/Rule/Passed.pm b/rt/lib/RT/Approval/Rule/Passed.pm
new file mode 100644
index 0000000..3134019
--- /dev/null
+++ b/rt/lib/RT/Approval/Rule/Passed.pm
@@ -0,0 +1,110 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Approval::Rule::Passed;
+use strict;
+use warnings;
+use base 'RT::Approval::Rule';
+
+use constant Description => "Notify Owner of their ticket has been approved by some or all approvers"; # loc
+
+sub Prepare {
+ my $self = shift;
+ return unless $self->SUPER::Prepare();
+
+ $self->OnStatusChange('resolved');
+}
+
+sub Commit {
+ my $self = shift;
+ my $note;
+ my $t = $self->TicketObj->Transactions;
+
+ while ( my $o = $t->Next ) {
+ next unless $o->Type eq 'Correspond';
+ $note .= $o->Content . "\n" if $o->ContentObj;
+ }
+
+ my ($top) = $self->TicketObj->AllDependedOnBy( Type => 'ticket' );
+ my $links = $self->TicketObj->DependedOnBy;
+
+ while ( my $link = $links->Next ) {
+ my $obj = $link->BaseObj;
+ next unless $obj->Type eq 'approval';
+
+ for my $other ($obj->AllDependsOn( Type => 'approval' )) {
+ if ( $other->QueueObj->IsActiveStatus( $other->Status ) ) {
+ $other->__Set(
+ Field => 'Status',
+ Value => 'deleted',
+ );
+ }
+
+ }
+ $obj->SetStatus( Status => 'open', Force => 1 );
+ }
+
+ my $passed = !$top->HasUnresolvedDependencies( Type => 'approval' );
+ my $template = $self->GetTemplate(
+ $passed ? 'All Approvals Passed' : 'Approval Passed',
+ TicketObj => $top,
+ Approval => $self->TicketObj,
+ Notes => $note,
+ ) or die;
+
+ $top->Correspond( MIMEObj => $template->MIMEObj );
+
+ if ($passed) {
+ $self->RunScripAction('Notify Owner', 'Approval Ready for Owner',
+ TicketObj => $top);
+ }
+
+ return;
+}
+
+1;
diff --git a/rt/lib/RT/Approval/Rule/Rejected.pm b/rt/lib/RT/Approval/Rule/Rejected.pm
new file mode 100644
index 0000000..7353f63
--- /dev/null
+++ b/rt/lib/RT/Approval/Rule/Rejected.pm
@@ -0,0 +1,114 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Approval::Rule::Rejected;
+use strict;
+use warnings;
+use base 'RT::Approval::Rule';
+
+use constant Description => "If an approval is rejected, reject the original and delete pending approvals"; # loc
+
+sub Prepare {
+ my $self = shift;
+ return unless $self->SUPER::Prepare();
+
+ return (0)
+ unless $self->OnStatusChange('rejected') or $self->OnStatusChange('deleted')
+}
+
+sub Commit { # XXX: from custom prepare code
+ my $self = shift;
+ if ( my ($rejected) =
+ $self->TicketObj->AllDependedOnBy( Type => 'ticket' ) ) {
+ my $note = '';
+ if ( RT->Config->Get('ApprovalRejectionNotes') ) {
+ my $t = $self->TicketObj->Transactions;
+ while ( my $o = $t->Next ) {
+ next unless $o->Type eq 'Correspond';
+ $note .= $o->Content . "\n" if $o->ContentObj;
+ }
+ }
+
+ my $template = $self->GetTemplate('Approval Rejected',
+ TicketObj => $rejected,
+ Approval => $self->TicketObj,
+ Notes => $note);
+
+ $rejected->Correspond( MIMEObj => $template->MIMEObj );
+ $rejected->SetStatus(
+ Status => 'rejected',
+ Force => 1,
+ );
+ }
+ my $links = $self->TicketObj->DependedOnBy;
+ foreach my $link ( @{ $links->ItemsArrayRef } ) {
+ my $obj = $link->BaseObj;
+ if ( $obj->QueueObj->IsActiveStatus( $obj->Status ) ) {
+ if ( $obj->Type eq 'approval' ) {
+ $obj->SetStatus(
+ Status => 'deleted',
+ Force => 1,
+ );
+ }
+ }
+ }
+
+ $links = $self->TicketObj->DependsOn;
+ foreach my $link ( @{ $links->ItemsArrayRef } ) {
+ my $obj = $link->TargetObj;
+ if ( $obj->QueueObj->IsActiveStatus( $obj->Status ) ) {
+ $obj->SetStatus(
+ Status => 'deleted',
+ Force => 1,
+ );
+ }
+ }
+
+}
+
+1;
diff --git a/rt/lib/RT/Attachment.pm b/rt/lib/RT/Attachment.pm
index f0a1987..4327238 100755
--- a/rt/lib/RT/Attachment.pm
+++ b/rt/lib/RT/Attachment.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Attachment_Overlay.pm b/rt/lib/RT/Attachment_Overlay.pm
index 7ab6d0a..1d508c0 100644
--- a/rt/lib/RT/Attachment_Overlay.pm
+++ b/rt/lib/RT/Attachment_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,10 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-=head1 SYNOPSIS
- use RT::Attachment;
+=head1 SYNOPSIS
+ use RT::Attachment;
=head1 DESCRIPTION
@@ -56,15 +56,9 @@ This module should never be instantiated directly by client code. it's an intern
module which should only be instantiated through exported APIs in Ticket, Queue and other
similar objects.
-
=head1 METHODS
-=begin testing
-
-ok (require RT::Attachment);
-
-=end testing
=cut
@@ -74,13 +68,12 @@ package RT::Attachment;
use strict;
no warnings qw(redefine);
+use RT::Transaction;
use MIME::Base64;
use MIME::QuotedPrint;
-
-# {{{ sub _OverlayAccessible
sub _OverlayAccessible {
- {
+ {
TransactionId => { 'read'=>1, 'public'=>1, 'write' => 0 },
MessageId => { 'read'=>1, 'write' => 0 },
Parent => { 'read'=>1, 'write' => 0 },
@@ -94,32 +87,6 @@ sub _OverlayAccessible {
Created => { 'read'=>1, 'auto'=>1, },
};
}
-# }}}
-
-# {{{ sub TransactionObj
-
-=head2 TransactionObj
-
-Returns the transaction object asscoiated with this attachment.
-
-=cut
-
-sub TransactionObj {
- require RT::Transaction;
- my $self=shift;
- unless (exists $self->{_TransactionObj}) {
- $self->{_TransactionObj}=RT::Transaction->new($self->CurrentUser);
- $self->{_TransactionObj}->Load($self->TransactionId);
- }
- unless ($self->{_TransactionObj}->Id) {
- $RT::Logger->crit("Attachment ".$self->id." can't find transaction ".$self->TransactionId." which it is ostensibly part of. That's bad");
- }
- return $self->{_TransactionObj};
-}
-
-# }}}
-
-# {{{ sub Create
=head2 Create
@@ -139,20 +106,19 @@ sub Create {
Attachment => undef,
@_ );
- #For ease of reference
+ # For ease of reference
my $Attachment = $args{'Attachment'};
- #if we didn't specify a ticket, we need to bail
- if ( $args{'TransactionId'} == 0 ) {
- $RT::Logger->crit( "RT::Attachment->Create couldn't, as you didn't specify a transaction\n" );
+ # if we didn't specify a ticket, we need to bail
+ unless ( $args{'TransactionId'} ) {
+ $RT::Logger->crit( "RT::Attachment->Create couldn't, as you didn't specify a transaction" );
return (0);
-
}
- #If we possibly can, collapse it to a singlepart
+ # If we possibly can, collapse it to a singlepart
$Attachment->make_singlepart;
- #Get the subject
+ # Get the subject
my $Subject = $Attachment->head->get( 'subject', 0 );
defined($Subject) or $Subject = '';
chomp($Subject);
@@ -161,27 +127,30 @@ sub Create {
my $MessageId = $Attachment->head->get( 'Message-ID', 0 );
defined($MessageId) or $MessageId = '';
chomp ($MessageId);
- $MessageId =~ s/^<(.*)>$/$1/go;
-
+ $MessageId =~ s/^<(.*?)>$/$1/o;
#Get the filename
my $Filename = $Attachment->head->recommended_filename;
+ # MIME::Head doesn't support perl strings well and can return
+ # octets which later will be double encoded in low-level code
+ my $head = $Attachment->head->as_string;
+ utf8::decode( $head );
+
# If a message has no bodyhandle, that means that it has subparts (or appears to)
# and we should act accordingly.
unless ( defined $Attachment->bodyhandle ) {
-
- my $id = $self->SUPER::Create(
+ my ($id) = $self->SUPER::Create(
TransactionId => $args{'TransactionId'},
- Parent => 0,
+ Parent => $args{'Parent'},
ContentType => $Attachment->mime_type,
- Headers => $Attachment->head->as_string,
+ Headers => $head,
MessageId => $MessageId,
- Subject => $Subject
+ Subject => $Subject,
);
-
+
unless ($id) {
- $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr);
+ $RT::Logger->crit("Attachment insert failed - ". $RT::Handle->dbh->errstr);
}
foreach my $part ( $Attachment->parts ) {
@@ -192,7 +161,7 @@ sub Create {
Attachment => $part,
);
unless ($id) {
- $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr);
+ $RT::Logger->crit("Attachment insert failed: ". $RT::Handle->dbh->errstr);
}
}
return ($id);
@@ -201,69 +170,115 @@ sub Create {
#If it's not multipart
else {
- my ($ContentEncoding, $Body) = $self->_EncodeLOB( $Attachment->bodyhandle->as_string,
- $Attachment->mime_type
- );
+ my ($ContentEncoding, $Body) = $self->_EncodeLOB(
+ $Attachment->bodyhandle->as_string,
+ $Attachment->mime_type
+ );
+
my $id = $self->SUPER::Create(
TransactionId => $args{'TransactionId'},
ContentType => $Attachment->mime_type,
ContentEncoding => $ContentEncoding,
Parent => $args{'Parent'},
- Headers => $Attachment->head->as_string,
+ Headers => $head,
Subject => $Subject,
Content => $Body,
Filename => $Filename,
MessageId => $MessageId,
);
+
unless ($id) {
- $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr);
+ $RT::Logger->crit("Attachment insert failed: ". $RT::Handle->dbh->errstr);
}
-
- return ($id);
+ return $id;
}
}
-# }}}
-
-
=head2 Import
Create an attachment exactly as specified in the named parameters.
=cut
-
sub Import {
my $self = shift;
- my %args = ( ContentEncoding => 'none',
+ my %args = ( ContentEncoding => 'none', @_ );
- @_ );
+ ( $args{'ContentEncoding'}, $args{'Content'} ) =
+ $self->_EncodeLOB( $args{'Content'}, $args{'MimeType'} );
+ return ( $self->SUPER::Create(%args) );
+}
- ($args{'ContentEncoding'}, $args{'Content'}) = $self->_EncodeLOB($args{'Content'}, $args{'MimeType'});
+=head2 TransactionObj
- return($self->SUPER::Create(%args));
+Returns the transaction object asscoiated with this attachment.
+
+=cut
+
+sub TransactionObj {
+ my $self = shift;
+
+ unless ( $self->{_TransactionObj} ) {
+ $self->{_TransactionObj} = RT::Transaction->new( $self->CurrentUser );
+ $self->{_TransactionObj}->Load( $self->TransactionId );
+ }
+
+ unless ($self->{_TransactionObj}->Id) {
+ $RT::Logger->crit( "Attachment ". $self->id
+ ." can't find transaction ". $self->TransactionId
+ ." which it is ostensibly part of. That's bad");
+ }
+ return $self->{_TransactionObj};
}
-# {{{ sub Content
+=head2 ParentObj
-=head2 Content
+Returns a parent's L<RT::Attachment> object if this attachment
+has a parent, otherwise returns undef.
-Returns the attachment's content. if it's base64 encoded, decode it
-before returning it.
+=cut
+
+sub ParentObj {
+ my $self = shift;
+ return undef unless $self->Parent;
+
+ my $parent = RT::Attachment->new( $self->CurrentUser );
+ $parent->LoadById( $self->Parent );
+ return $parent;
+}
+
+=head2 Children
+
+Returns an L<RT::Attachments> object which is preloaded with
+all attachments objects with this attachment\'s Id as their
+C<Parent>.
=cut
-sub Content {
- my $self = shift;
- $self->_DecodeLOB($self->ContentType, $self->ContentEncoding, $self->_Value('Content', decode_utf8 => 0));
+sub Children {
+ my $self = shift;
+
+ my $kids = RT::Attachments->new( $self->CurrentUser );
+ $kids->ChildrenOf( $self->Id );
+ return($kids);
}
+=head2 Content
-# }}}
+Returns the attachment's content. if it's base64 encoded, decode it
+before returning it.
+=cut
-# {{{ sub OriginalContent
+sub Content {
+ my $self = shift;
+ return $self->_DecodeLOB(
+ $self->ContentType,
+ $self->ContentEncoding,
+ $self->_Value('Content', decode_utf8 => 0),
+ );
+}
=head2 OriginalContent
@@ -274,43 +289,37 @@ original encoding.
=cut
sub OriginalContent {
- my $self = shift;
-
- return $self->Content unless RT::I18N::IsTextualContentType($self->ContentType);
-
- my $enc = $self->OriginalEncoding;
-
- my $content;
- if ( $self->ContentEncoding eq 'none' || ! $self->ContentEncoding ) {
- $content = $self->_Value('Content', decode_utf8 => 0);
- } elsif ( $self->ContentEncoding eq 'base64' ) {
- $content = MIME::Base64::decode_base64($self->_Value('Content', decode_utf8 => 0));
- } elsif ( $self->ContentEncoding eq 'quoted-printable' ) {
- $content = MIME::QuotedPrint::decode($self->_Value('Content', decode_utf8 => 0));
- } else {
- return( $self->loc("Unknown ContentEncoding [_1]", $self->ContentEncoding));
- }
-
- # Turn *off* the SvUTF8 bits here so decode_utf8 and from_to below can work.
- local $@;
- Encode::_utf8_off($content);
-
- if (!$enc || $enc eq '' || $enc eq 'utf8' || $enc eq 'utf-8') {
- # If we somehow fail to do the decode, at least push out the raw bits
- eval {return( Encode::decode_utf8($content))} || return ($content);
- }
-
- eval { Encode::from_to($content, 'utf8' => $enc) } if $enc;
- if ($@) {
- $RT::Logger->error("Could not convert attachment from assumed utf8 to '$enc' :".$@);
- }
- return $content;
-}
+ my $self = shift;
-# }}}
+ return $self->Content unless RT::I18N::IsTextualContentType($self->ContentType);
+ my $enc = $self->OriginalEncoding;
+ my $content;
+ if ( !$self->ContentEncoding || $self->ContentEncoding eq 'none' ) {
+ $content = $self->_Value('Content', decode_utf8 => 0);
+ } elsif ( $self->ContentEncoding eq 'base64' ) {
+ $content = MIME::Base64::decode_base64($self->_Value('Content', decode_utf8 => 0));
+ } elsif ( $self->ContentEncoding eq 'quoted-printable' ) {
+ $content = MIME::QuotedPrint::decode($self->_Value('Content', decode_utf8 => 0));
+ } else {
+ return( $self->loc("Unknown ContentEncoding [_1]", $self->ContentEncoding));
+ }
+
+ # Turn *off* the SvUTF8 bits here so decode_utf8 and from_to below can work.
+ local $@;
+ Encode::_utf8_off($content);
-# {{{ sub OriginalEncoding
+ if (!$enc || $enc eq '' || $enc eq 'utf8' || $enc eq 'utf-8') {
+ # If we somehow fail to do the decode, at least push out the raw bits
+ eval { return( Encode::decode_utf8($content)) } || return ($content);
+ }
+
+ eval { Encode::from_to($content, 'utf8' => $enc) } if $enc;
+ if ($@) {
+ $RT::Logger->error("Could not convert attachment from assumed utf8 to '$enc' :".$@);
+ }
+ return $content;
+}
=head2 OriginalEncoding
@@ -319,35 +328,34 @@ Returns the attachment's original encoding.
=cut
sub OriginalEncoding {
- my $self = shift;
- return $self->GetHeader('X-RT-Original-Encoding');
+ my $self = shift;
+ return $self->GetHeader('X-RT-Original-Encoding');
}
-# }}}
-
-# {{{ sub Children
-
-=head2 Children
+=head2 ContentLength
- Returns an RT::Attachments object which is preloaded with all Attachments objects with this Attachment\'s Id as their 'Parent'
+Returns length of L</Content> in bytes.
=cut
-sub Children {
+sub ContentLength {
my $self = shift;
-
- my $kids = new RT::Attachments($self->CurrentUser);
- $kids->ChildrenOf($self->Id);
- return($kids);
-}
-
-# }}}
-# {{{ UTILITIES
+ return undef unless $self->TransactionObj->CurrentUserCanSee;
-# {{{ sub Quote
+ my $len = $self->GetHeader('Content-Length');
+ unless ( defined $len ) {
+ use bytes;
+ no warnings 'uninitialized';
+ $len = length($self->Content);
+ $self->SetHeader('Content-Length' => $len);
+ }
+ return $len;
+}
+=head2 Quote
+=cut
sub Quote {
my $self=shift;
@@ -399,9 +407,64 @@ sub Quote {
return (\$body, $max);
}
-# }}}
-# {{{ sub NiceHeaders - pulls out only the most relevant headers
+=head2 ContentAsMIME
+
+Returns MIME entity built from this attachment.
+
+=cut
+
+sub ContentAsMIME {
+ my $self = shift;
+
+ my $entity = new MIME::Entity;
+ foreach my $header ($self->SplitHeaders) {
+ my ($h_key, $h_val) = split /:/, $header, 2;
+ $entity->head->add( $h_key, RT::Interface::Email::EncodeToMIME( String => $h_val ) );
+ }
+
+ use MIME::Body;
+ $entity->bodyhandle(
+ MIME::Body::Scalar->new( $self->OriginalContent )
+ );
+
+ return $entity;
+}
+
+
+=head2 Addresses
+
+Returns a hashref of all addresses related to this attachment.
+The keys of the hash are C<From>, C<To>, C<Cc>, C<Bcc>, C<RT-Send-Cc>
+and C<RT-Send-Bcc>. The values are references to lists of
+L<Email::Address> objects.
+
+=cut
+
+sub Addresses {
+ my $self = shift;
+
+ my %data = ();
+ my $current_user_address = lc $self->CurrentUser->EmailAddress;
+ my $correspond = lc $self->TransactionObj->TicketObj->QueueObj->CorrespondAddress;
+ my $comment = lc $self->TransactionObj->TicketObj->QueueObj->CommentAddress;
+ foreach my $hdr (qw(From To Cc Bcc RT-Send-Cc RT-Send-Bcc)) {
+ my @Addresses;
+ my $line = $self->GetHeader($hdr);
+
+ foreach my $AddrObj ( Email::Address->parse( $line )) {
+ my $address = $AddrObj->address;
+ $address = lc RT::User->CanonicalizeEmailAddress($address);
+ next if ( $current_user_address eq $address );
+ next if ( $comment eq $address );
+ next if ( $correspond eq $address );
+ next if ( RT::EmailParser->IsRTAddress($address) );
+ push @Addresses, $AddrObj ;
+ }
+ $data{$hdr} = \@Addresses;
+ }
+ return \%data;
+}
=head2 NiceHeaders
@@ -420,34 +483,37 @@ sub NiceHeaders {
}
return $hdrs;
}
-# }}}
-
-# {{{ sub Headers
=head2 Headers
Returns this object's headers as a string. This method specifically
removes the RT-Send-Bcc: header, so as to never reveal to whom RT sent a Bcc.
We need to record the RT-Send-Cc and RT-Send-Bcc values so that we can actually send
-out mail. (The mailing rules are separated from the ticket update code by
-an abstraction barrier that makes it impossible to pass this data directly
+out mail. The mailing rules are separated from the ticket update code by
+an abstraction barrier that makes it impossible to pass this data directly.
=cut
sub Headers {
- my $self = shift;
- my $hdrs="";
- my @headers = grep { !/^RT-Send-Bcc/i } $self->_SplitHeaders;
- return join("\n",@headers);
-
+ return join("\n", $_[0]->SplitHeaders);
}
+=head2 EncodedHeaders
-# }}}
+Takes encoding as argument and returns the attachment's headers as octets in encoded
+using the encoding.
-# {{{ sub GetHeader
+This is not protection using quoted printable or base64 encoding.
-=head2 GetHeader ( 'Tag')
+=cut
+
+sub EncodedHeaders {
+ my $self = shift;
+ my $encoding = shift || 'utf8';
+ return Encode::encode( $encoding, $self->Headers );
+}
+
+=head2 GetHeader $TAG
Returns the value of the header Tag as a string. This bypasses the weeding out
done in Headers() above.
@@ -458,17 +524,52 @@ sub GetHeader {
my $self = shift;
my $tag = shift;
foreach my $line ($self->_SplitHeaders) {
- if ($line =~ /^\Q$tag\E:\s+(.*)$/si) { #if we find the header, return its value
- return ($1);
- }
+ next unless $line =~ /^\Q$tag\E:\s+(.*)$/si;
+
+ #if we find the header, return its value
+ return ($1);
}
# we found no header. return an empty string
return undef;
}
-# }}}
-# {{{ sub SetHeader
+=head2 DelHeader $TAG
+
+Delete a field from the attachment's headers.
+
+=cut
+
+sub DelHeader {
+ my $self = shift;
+ my $tag = shift;
+
+ my $newheader = '';
+ foreach my $line ($self->_SplitHeaders) {
+ next if $line =~ /^\Q$tag\E:\s+(.*)$/is;
+ $newheader .= "$line\n";
+ }
+ return $self->__Set( Field => 'Headers', Value => $newheader);
+}
+
+=head2 AddHeader $TAG, $VALUE, ...
+
+Add one or many fields to the attachment's headers.
+
+=cut
+
+sub AddHeader {
+ my $self = shift;
+
+ my $newheader = $self->__Value( 'Headers' );
+ while ( my ($tag, $value) = splice @_, 0, 2 ) {
+ $value = '' unless defined $value;
+ $value =~ s/\s+$//s;
+ $value =~ s/\r+\n/\n /g;
+ $newheader .= "$tag: $value\n";
+ }
+ return $self->__Set( Field => 'Headers', Value => $newheader);
+}
=head2 SetHeader ( 'Tag', 'Value' )
@@ -479,8 +580,8 @@ Replace or add a Header to the attachment's headers.
sub SetHeader {
my $self = shift;
my $tag = shift;
- my $newheader = '';
+ my $newheader = '';
foreach my $line ($self->_SplitHeaders) {
if (defined $tag and $line =~ /^\Q$tag\E:\s+(.*)$/i) {
$newheader .= "$tag: $_[0]\n";
@@ -494,80 +595,26 @@ sub SetHeader {
$newheader .= "$tag: $_[0]\n" if defined $tag;
$self->__Set( Field => 'Headers', Value => $newheader);
}
-# }}}
-# {{{ sub _Value
+=head2 SplitHeaders
-=head2 _Value
+Returns an array of this attachment object's headers, with one header
+per array entry. Multiple lines are folded.
-Takes the name of a table column.
-Returns its value as a string, if the user passes an ACL check
+B<Never> returns C<RT-Send-Bcc> field.
=cut
-sub _Value {
-
- my $self = shift;
- my $field = shift;
-
- #if the field is public, return it.
- if ( $self->_Accessible( $field, 'public' ) ) {
- return ( $self->__Value( $field, @_ ) );
- }
-
- #If it's a comment, we need to be extra special careful
- elsif ( $self->TransactionObj->Type =~ /^Comment/ ) {
- if ( $self->TransactionObj->CurrentUserHasRight('ShowTicketComments') )
- {
- return ( $self->__Value( $field, @_ ) );
- }
- }
- elsif ( $self->TransactionObj->CurrentUserHasRight('ShowTicket') ) {
- return ( $self->__Value( $field, @_ ) );
- }
-
- #if they ain't got rights to see, don't let em
- else {
- return (undef);
- }
-
+sub SplitHeaders {
+ my $self = shift;
+ return (grep !/^RT-Send-Bcc/i, $self->_SplitHeaders(@_) );
}
-# }}}
-
=head2 _SplitHeaders
Returns an array of this attachment object's headers, with one header
per array entry. multiple lines are folded.
-=begin testing
-
-my $test1 = "From: jesse";
-my @headers = RT::Attachment->_SplitHeaders($test1);
-is ($#headers, 0, $test1 );
-
-my $test2 = qq{From: jesse
-To: bobby
-Subject: foo
-};
-
-@headers = RT::Attachment->_SplitHeaders($test2);
-is ($#headers, 2, "testing a bunch of singline multiple headers" );
-
-
-my $test3 = qq{From: jesse
-To: bobby,
- Suzie,
- Sally,
- Joey: bizzy,
-Subject: foo
-};
-
-@headers = RT::Attachment->_SplitHeaders($test3);
-is ($#headers, 2, "testing a bunch of singline multiple headers" );
-
-
-=end testing
=cut
@@ -583,35 +630,130 @@ sub _SplitHeaders {
}
-sub ContentLength {
+sub Encrypt {
my $self = shift;
- unless ( (($self->TransactionObj->CurrentUserHasRight('ShowTicketComments')) and
- ($self->TransactionObj->Type eq 'Comment') ) or
- ($self->TransactionObj->CurrentUserHasRight('ShowTicket'))) {
- return undef;
+ my $txn = $self->TransactionObj;
+ return (0, $self->loc('Permission Denied')) unless $txn->CurrentUserCanSee;
+ return (0, $self->loc('Permission Denied'))
+ unless $txn->TicketObj->CurrentUserHasRight('ModifyTicket');
+ return (0, $self->loc('GnuPG integration is disabled'))
+ unless RT->Config->Get('GnuPG')->{'Enable'};
+ return (0, $self->loc('Attachments encryption is disabled'))
+ unless RT->Config->Get('GnuPG')->{'AllowEncryptDataInDB'};
+
+ require RT::Crypt::GnuPG;
+
+ my $type = $self->ContentType;
+ if ( $type =~ /^x-application-rt\/gpg-encrypted/i ) {
+ return (1, $self->loc('Already encrypted'));
+ } elsif ( $type =~ /^multipart\//i ) {
+ return (1, $self->loc('No need to encrypt'));
+ } else {
+ $type = qq{x-application-rt\/gpg-encrypted; original-type="$type"};
}
- if (my $len = $self->GetHeader('Content-Length')) {
- return $len;
+ my $queue = $txn->TicketObj->QueueObj;
+ my $encrypt_for;
+ foreach my $address ( grep $_,
+ $queue->CorrespondAddress,
+ $queue->CommentAddress,
+ RT->Config->Get('CorrespondAddress'),
+ RT->Config->Get('CommentAddress'),
+ ) {
+ my %res = RT::Crypt::GnuPG::GetKeysInfo( $address, 'private' );
+ next if $res{'exit_code'} || !$res{'info'};
+ %res = RT::Crypt::GnuPG::GetKeysForEncryption( $address );
+ next if $res{'exit_code'} || !$res{'info'};
+ $encrypt_for = $address;
+ }
+ unless ( $encrypt_for ) {
+ return (0, $self->loc('No key suitable for encryption'));
}
- {
- use bytes;
- my $len = length($self->Content);
- $self->SetHeader('Content-Length' => $len);
- return $len;
+ $self->__Set( Field => 'ContentType', Value => $type );
+ $self->SetHeader( 'Content-Type' => $type );
+
+ my $content = $self->Content;
+ my %res = RT::Crypt::GnuPG::SignEncryptContent(
+ Content => \$content,
+ Sign => 0,
+ Encrypt => 1,
+ Recipients => [ $encrypt_for ],
+ );
+ if ( $res{'exit_code'} ) {
+ return (0, $self->loc('GnuPG error. Contact with administrator'));
}
+
+ my ($status, $msg) = $self->__Set( Field => 'Content', Value => $content );
+ unless ( $status ) {
+ return ($status, $self->loc("Couldn't replace content with encrypted data: [_1]", $msg));
+ }
+ return (1, $self->loc('Successfuly encrypted data'));
}
-# }}}
+sub Decrypt {
+ my $self = shift;
+
+ my $txn = $self->TransactionObj;
+ return (0, $self->loc('Permission Denied')) unless $txn->CurrentUserCanSee;
+ return (0, $self->loc('Permission Denied'))
+ unless $txn->TicketObj->CurrentUserHasRight('ModifyTicket');
+ return (0, $self->loc('GnuPG integration is disabled'))
+ unless RT->Config->Get('GnuPG')->{'Enable'};
+
+ require RT::Crypt::GnuPG;
+
+ my $type = $self->ContentType;
+ if ( $type =~ /^x-application-rt\/gpg-encrypted/i ) {
+ ($type) = ($type =~ /original-type="(.*)"/i);
+ $type ||= 'application/octeat-stream';
+ } else {
+ return (1, $self->loc('Is not encrypted'));
+ }
+ $self->__Set( Field => 'ContentType', Value => $type );
+ $self->SetHeader( 'Content-Type' => $type );
+
+ my $content = $self->Content;
+ my %res = RT::Crypt::GnuPG::DecryptContent( Content => \$content, );
+ if ( $res{'exit_code'} ) {
+ return (0, $self->loc('GnuPG error. Contact with administrator'));
+ }
+
+ my ($status, $msg) = $self->__Set( Field => 'Content', Value => $content );
+ unless ( $status ) {
+ return ($status, $self->loc("Couldn't replace content with decrypted data: [_1]", $msg));
+ }
+ return (1, $self->loc('Successfuly decrypted data'));
+}
+
+=head2 _Value
+
+Takes the name of a table column.
+Returns its value as a string, if the user passes an ACL check
+
+=cut
+
+sub _Value {
+ my $self = shift;
+ my $field = shift;
+
+ #if the field is public, return it.
+ if ( $self->_Accessible( $field, 'public' ) ) {
+ return ( $self->__Value( $field, @_ ) );
+ }
+
+ return undef unless $self->TransactionObj->CurrentUserCanSee;
+ return $self->__Value( $field, @_ );
+}
-# Transactions don't change. by adding this cache congif directiove, we don't lose pathalogically on long tickets.
+# Transactions don't change. by adding this cache congif directiove,
+# we don't lose pathalogically on long tickets.
sub _CacheConfig {
{
- 'cache_p' => 1,
- 'fast_update_p' => 1,
- 'cache_for_sec' => 180,
+ 'cache_p' => 1,
+ 'fast_update_p' => 1,
+ 'cache_for_sec' => 180,
}
}
diff --git a/rt/lib/RT/Attachments.pm b/rt/lib/RT/Attachments.pm
index 4411549..416cde6 100755
--- a/rt/lib/RT/Attachments.pm
+++ b/rt/lib/RT/Attachments.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Attachments_Overlay.pm b/rt/lib/RT/Attachments_Overlay.pm
index cedceac..83cc96d 100644
--- a/rt/lib/RT/Attachments_Overlay.pm
+++ b/rt/lib/RT/Attachments_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Attachments - a collection of RT::Attachment objects
@@ -62,11 +63,6 @@ should only be accessed through exported APIs in Ticket, Queue and other similar
=head1 METHODS
-=begin testing
-
-ok (require RT::Attachments);
-
-=end testing
=cut
@@ -76,20 +72,48 @@ package RT::Attachments;
use strict;
no warnings qw(redefine);
-# {{{ sub _Init
+use RT::Attachment;
+
sub _Init {
- my $self = shift;
-
- $self->{'table'} = "Attachments";
- $self->{'primary_key'} = "id";
- $self->OrderBy ( FIELD => 'id',
- ORDER => 'ASC');
- return ( $self->SUPER::_Init(@_));
+ my $self = shift;
+ $self->{'table'} = "Attachments";
+ $self->{'primary_key'} = "id";
+ $self->OrderBy(
+ FIELD => 'id',
+ ORDER => 'ASC',
+ );
+ return $self->SUPER::_Init( @_ );
}
-# }}}
+sub CleanSlate {
+ my $self = shift;
+ delete $self->{_sql_transaction_alias};
+ return $self->SUPER::CleanSlate( @_ );
+}
+
+
+=head2 TransactionAlias
-# {{{ sub ContentType
+Returns alias for transactions table with applied join condition.
+Always return the same alias, so if you want to build some complex
+or recursive joining then you have to create new alias youself.
+
+=cut
+
+sub TransactionAlias {
+ my $self = shift;
+ return $self->{'_sql_transaction_alias'}
+ if $self->{'_sql_transaction_alias'};
+
+ my $res = $self->NewAlias('Transactions');
+ $self->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ FIELD => 'TransactionId',
+ VALUE => $res . '.id',
+ QUOTEVALUE => 0,
+ );
+ return $self->{'_sql_transaction_alias'} = $res;
+}
=head2 ContentType (VALUE => 'text/plain', ENTRYAGGREGATOR => 'OR', OPERATOR => '=' )
@@ -99,20 +123,16 @@ Limit result set to attachments of ContentType 'TYPE'...
sub ContentType {
- my $self = shift;
- my %args = ( VALUE => 'text/plain',
- OPERATOR => '=',
- ENTRYAGGREGATOR => 'OR',
- @_);
-
- $self->Limit ( FIELD => 'ContentType',
- VALUE => $args{'VALUE'},
- OPERATOR => $args{'OPERATOR'},
- ENTRYAGGREGATOR => $args{'ENTRYAGGREGATOR'});
+ my $self = shift;
+ my %args = (
+ VALUE => 'text/plain',
+ OPERATOR => '=',
+ ENTRYAGGREGATOR => 'OR',
+ @_
+ );
+
+ return $self->Limit ( %args, FIELD => 'ContentType' );
}
-# }}}
-
-# {{{ sub ChildrenOf
=head2 ChildrenOf ID
@@ -122,52 +142,101 @@ Limit result set to children of Attachment ID
sub ChildrenOf {
- my $self = shift;
- my $attachment = shift;
- $self->Limit ( FIELD => 'Parent',
- VALUE => $attachment);
+ my $self = shift;
+ my $attachment = shift;
+ return $self->Limit(
+ FIELD => 'Parent',
+ VALUE => $attachment
+ );
+}
+
+=head2 LimitNotEmpty
+
+Limit result set to attachments with not empty content.
+
+=cut
+
+sub LimitNotEmpty {
+ my $self = shift;
+ $self->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ FIELD => 'Content',
+ OPERATOR => 'IS NOT',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ );
+
+ # http://rt3.fsck.com/Ticket/Display.html?id=12483
+ if ( RT->Config->Get('DatabaseType') ne 'Oracle' ) {
+ $self->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ FIELD => 'Content',
+ OPERATOR => '!=',
+ VALUE => '',
+ );
+ }
+ return;
+}
+
+=head2 LimitByTicket $ticket_id
+
+Limit result set to attachments of a ticket.
+
+=cut
+
+sub LimitByTicket {
+ my $self = shift;
+ my $tid = shift;
+
+ my $transactions = $self->TransactionAlias;
+ $self->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ ALIAS => $transactions,
+ FIELD => 'ObjectType',
+ VALUE => 'RT::Ticket',
+ );
+
+ my $tickets = $self->NewAlias('Tickets');
+ $self->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ ALIAS => $tickets,
+ FIELD => 'id',
+ VALUE => $transactions . '.ObjectId',
+ QUOTEVALUE => 0,
+ );
+ $self->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ ALIAS => $tickets,
+ FIELD => 'EffectiveId',
+ VALUE => $tid,
+ );
+ return;
}
-# }}}
# {{{ sub NewItem
sub NewItem {
my $self = shift;
-
- use RT::Attachment;
- my $item = new RT::Attachment($self->CurrentUser);
- return($item);
+ return RT::Attachment->new( $self->CurrentUser );
}
# }}}
# {{{ sub Next
sub Next {
my $self = shift;
-
- my $Attachment = $self->SUPER::Next();
- if ((defined($Attachment)) and (ref($Attachment))) {
- if ($Attachment->TransactionObj->__Value('Type') =~ /^Comment/ &&
- $Attachment->TransactionObj->TicketObj->CurrentUserHasRight('ShowTicketComments')) {
- return($Attachment);
- } elsif ($Attachment->TransactionObj->__Value('Type') !~ /^Comment/ &&
- $Attachment->TransactionObj->TicketObj->CurrentUserHasRight('ShowTicket')) {
- return($Attachment);
- }
-
- #If the user doesn't have the right to show this ticket
- else {
- return($self->Next());
- }
+
+ my $Attachment = $self->SUPER::Next;
+ return $Attachment unless $Attachment;
+
+ my $txn = $Attachment->TransactionObj;
+ if ( $txn->__Value('Type') eq 'Comment' ) {
+ return $Attachment if $txn->CurrentUserHasRight('ShowTicketComments');
+ } elsif ( $txn->CurrentUserHasRight('ShowTicket') ) {
+ return $Attachment;
}
- #if there never was any ticket
- else {
- return(undef);
- }
+ # If the user doesn't have the right to show this ticket
+ return $self->Next;
}
# }}}
- 1;
-
-
-
-
+1;
diff --git a/rt/lib/RT/Attribute.pm b/rt/lib/RT/Attribute.pm
index e513c28..dcdfd7f 100644
--- a/rt/lib/RT/Attribute.pm
+++ b/rt/lib/RT/Attribute.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Attribute_Overlay.pm b/rt/lib/RT/Attribute_Overlay.pm
index 72071f5..4d201da 100644
--- a/rt/lib/RT/Attribute_Overlay.pm
+++ b/rt/lib/RT/Attribute_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Attribute;
use strict;
@@ -271,55 +272,23 @@ sub _SerializeContent {
sub SetContent {
my $self = shift;
my $content = shift;
-
+
# Call __Value to avoid ACL check.
- if ($self->__Value('ContentType') eq 'storable') {
- # We eval the serialization because it will lose on a coderef.
- eval {$content = $self->_SerializeContent($content); };
- if ($@) {
- $RT::Logger->error("For some reason, content couldn't be frozen");
- return(0, $@);
- }
+ if ( $self->__Value('ContentType') eq 'storable' ) {
+ # We eval the serialization because it will lose on a coderef.
+ $content = eval { $self->_SerializeContent($content) };
+ if ($@) {
+ $RT::Logger->error("Content couldn't be frozen: $@");
+ return(0, "Content couldn't be frozen");
+ }
}
- return ($self->SUPER::SetContent($content));
+ return $self->SUPER::SetContent( $content );
}
=head2 SubValue KEY
Returns the subvalue for $key.
-=begin testing
-
-my $user = $RT::SystemUser;
-my ($id, $msg) = $user->AddAttribute(Name => 'SavedSearch', Content => { Query => 'Foo'} );
-ok ($id, $msg);
-my $attr = RT::Attribute->new($RT::SystemUser);
-$attr->Load($id);
-ok($attr->Name eq 'SavedSearch');
-$attr->SetSubValues( Format => 'baz');
-
-my $format = $attr->SubValue('Format');
-is ($format , 'baz');
-
-$attr->SetSubValues( Format => 'bar');
-$format = $attr->SubValue('Format');
-is ($format , 'bar');
-
-$attr->DeleteAllSubValues();
-$format = $attr->SubValue('Format');
-is ($format, undef);
-
-$attr->SetSubValues(Format => 'This is a format');
-
-my $attr2 = RT::Attribute->new($RT::SystemUser);
-$attr2->Load($id);
-is ($attr2->SubValue('Format'), 'This is a format');
-$attr2->Delete;
-my $attr3 = RT::Attribute->new($RT::SystemUser);
-my ($id) = $attr3->Load($id);
-is ($id, 0);
-
-=end testing
=cut
diff --git a/rt/lib/RT/Attributes.pm b/rt/lib/RT/Attributes.pm
index 12f659f..b96b3e2 100644
--- a/rt/lib/RT/Attributes.pm
+++ b/rt/lib/RT/Attributes.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Attributes_Overlay.pm b/rt/lib/RT/Attributes_Overlay.pm
index e0c2f5a..ebe8c4c 100644
--- a/rt/lib/RT/Attributes_Overlay.pm
+++ b/rt/lib/RT/Attributes_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,14 +45,15 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
- RT::Attributes - collection of RT::Attribute objects
+RT::Attributes - collection of RT::Attribute objects
=head1 SYNOPSIS
- use RT::Attributes;
-my $Attributes = new RT::Attributes($CurrentUser);
+ use RT::Attributes;
+ my $Attributes = new RT::Attributes($CurrentUser);
=head1 DESCRIPTION
@@ -154,22 +155,28 @@ the matching name.
sub DeleteEntry {
my $self = shift;
- my %args = ( Name => undef,
- Content => undef,
- id => undef,
- @_);
+ my %args = (
+ Name => undef,
+ Content => undef,
+ id => undef,
+ @_
+ );
my $found = 0;
- foreach my $attr ($self->Named($args{'Name'})){
- if ((!defined $args{'id'} and !defined $args{'Content'})
- or (defined $args{'id'} and $attr->id eq $args{'id'})
- or (defined $args{'Content'} and $attr->Content eq $args{'Content'})) {
- my ($id, $msg) = $attr->Delete;
- return ($id, $msg) unless $id;
- $found = 1;
- }
+ foreach my $attr ( $self->Named( $args{'Name'} ) ) {
+ if ( ( !defined $args{'id'} and !defined $args{'Content'} )
+ or ( defined $args{'id'} and $attr->id eq $args{'id'} )
+ or ( defined $args{'Content'} and $attr->Content eq $args{'Content'} ) )
+ {
+ my ($id, $msg) = $attr->Delete;
+ return ($id, $msg) unless $id;
+ $found = 1;
+ }
}
return (0, "No entry found") unless $found;
- $self->_DoSearch();
+ $self->RedoSearch;
+ # XXX: above string must work but because of bug in DBIx::SB it doesn't,
+ # to reproduce delete string below and run t/api/attribute-tests.t
+ $self->_DoSearch;
return (1, $self->loc('Attribute Deleted'));
}
diff --git a/rt/lib/RT/Base.pm b/rt/lib/RT/Base.pm
index 9a3ab69..f276aa2 100644
--- a/rt/lib/RT/Base.pm
+++ b/rt/lib/RT/Base.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,9 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Base;
-use Carp;
-use Scalar::Util;
+use Carp ();
+use Scalar::Util ();
use strict;
use vars qw(@EXPORT);
@@ -101,8 +102,8 @@ sub CurrentUser {
unless ( ref $self->{'user'} && $self->{'user'}->isa('RT::CurrentUser') ) {
my $msg = "$self was created without a CurrentUser."
." Any RT object which is subclass of RT::Base must be created"
- ." with a RT::CurrentUser or a RT::User obejct as the first argument.";
- $msg .= "\n". Carp::cluck() if @_;
+ ." with a RT::CurrentUser or a RT::User object as the first argument.";
+ $msg .= "\n". Carp::longmess() if @_;
$RT::Logger->error( $msg );
return $self->{'user'} = undef;
@@ -146,7 +147,6 @@ sub loc {
return $user->loc(@_);
}
else {
- use Carp;
Carp::confess("No currentuser");
return ("Critical error:$self has no CurrentUser", $self);
}
@@ -158,7 +158,6 @@ sub loc_fuzzy {
return $user->loc_fuzzy(@_);
}
else {
- use Carp;
Carp::confess("No currentuser");
return ("Critical error:$self has no CurrentUser", $self);
}
diff --git a/rt/lib/RT/CachedGroupMember.pm b/rt/lib/RT/CachedGroupMember.pm
index 933c13b..1c9188f 100644
--- a/rt/lib/RT/CachedGroupMember.pm
+++ b/rt/lib/RT/CachedGroupMember.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/CachedGroupMember_Overlay.pm b/rt/lib/RT/CachedGroupMember_Overlay.pm
index ffbbc8d..a292afb 100644
--- a/rt/lib/RT/CachedGroupMember_Overlay.pm
+++ b/rt/lib/RT/CachedGroupMember_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::CachedGroupMember;
use strict;
@@ -148,6 +149,8 @@ sub Create {
}
}
+ return $id if $args{'Member'}->id == $args{'Group'}->id;
+
if ( $args{'Member'}->IsGroup() ) {
my $GroupMembers = $args{'Member'}->Object->MembersObj();
while ( my $member = $GroupMembers->Next() ) {
@@ -215,7 +218,7 @@ sub Delete {
# Unless $self->GroupObj still has the member recursively $self->MemberObj
# (Since we deleted the database row above, $self no longer counts)
- unless ( $self->GroupObj->Object->HasMemberRecursively( $self->MemberObj ) ) {
+ unless ( $self->GroupObj->Object->HasMemberRecursively( $self->MemberId ) ) {
# Find all ACEs granted to $self->GroupId
@@ -260,7 +263,7 @@ sub SetDisabled {
my $val = shift;
# if it's already disabled, we're good.
- return {1} if ($self->__Value('Disabled') == $val);
+ return (1) if ( $self->__Value('Disabled') == $val);
my $err = $self->SUPER::SetDisabled($val);
my ($retval, $msg) = $err->as_array();
unless ($retval) {
@@ -286,7 +289,7 @@ sub SetDisabled {
# Unless $self->GroupObj still has the member recursively $self->MemberObj
# (Since we SetDisabledd the database row above, $self no longer counts)
- unless ( $self->GroupObj->Object->HasMemberRecursively( $self->MemberObj ) ) {
+ unless ( $self->GroupObj->Object->HasMemberRecursively( $self->MemberId ) ) {
# Find all ACEs granted to $self->GroupId
my $acl = RT::ACL->new($RT::SystemUser);
$acl->LimitToPrincipal( Id => $self->GroupId );
diff --git a/rt/lib/RT/CachedGroupMembers.pm b/rt/lib/RT/CachedGroupMembers.pm
index a7448d1..992856c 100644
--- a/rt/lib/RT/CachedGroupMembers.pm
+++ b/rt/lib/RT/CachedGroupMembers.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/CachedGroupMembers_Overlay.pm b/rt/lib/RT/CachedGroupMembers_Overlay.pm
index c3b4fdd..9331553 100644
--- a/rt/lib/RT/CachedGroupMembers_Overlay.pm
+++ b/rt/lib/RT/CachedGroupMembers_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::CachedGroupMembers - a collection of RT::GroupMember objects
@@ -59,11 +60,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::CachedGroupMembers);
-
-=end testing
=cut
diff --git a/rt/lib/RT/Condition.pm b/rt/lib/RT/Condition.pm
new file mode 100755
index 0000000..be7c4c5
--- /dev/null
+++ b/rt/lib/RT/Condition.pm
@@ -0,0 +1,233 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+ RT::Condition - generic baseclass for scrip condition;
+
+=head1 SYNOPSIS
+
+ use RT::Condition;
+ my $foo = RT::Condition->new(
+ TransactionObj => $tr,
+ TicketObj => $ti,
+ ScripObj => $scr,
+ Argument => $arg,
+ Type => $type);
+
+ if ($foo->IsApplicable) {
+ # do something
+ }
+
+
+=head1 DESCRIPTION
+
+
+=head1 METHODS
+
+
+
+
+=cut
+
+package RT::Condition;
+
+use strict;
+use warnings;
+
+use base qw/RT::Base/;
+
+# {{{ sub new
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->_Init(@_);
+ return $self;
+}
+# }}}
+
+# {{{ sub _Init
+sub _Init {
+ my $self = shift;
+ my %args = ( TransactionObj => undef,
+ TicketObj => undef,
+ ScripObj => undef,
+ TemplateObj => undef,
+ Argument => undef,
+ ApplicableTransTypes => undef,
+ CurrentUser => undef,
+ @_ );
+
+ $self->{'Argument'} = $args{'Argument'};
+ $self->{'ScripObj'} = $args{'ScripObj'};
+ $self->{'TicketObj'} = $args{'TicketObj'};
+ $self->{'TransactionObj'} = $args{'TransactionObj'};
+ $self->{'ApplicableTransTypes'} = $args{'ApplicableTransTypes'};
+ $self->CurrentUser($args{'CurrentUser'});
+}
+# }}}
+
+# Access Scripwide data
+
+# {{{ sub Argument
+
+=head2 Argument
+
+Return the optional argument associated with this ScripCondition
+
+=cut
+
+sub Argument {
+ my $self = shift;
+ return($self->{'Argument'});
+}
+# }}}
+
+# {{{ sub TicketObj
+
+=head2 TicketObj
+
+Return the ticket object we're talking about
+
+=cut
+
+sub TicketObj {
+ my $self = shift;
+ return($self->{'TicketObj'});
+}
+# }}}
+
+# {{{ sub ScripObj
+
+=head2 ScripObj
+
+Return the Scrip object we're talking about
+
+=cut
+
+sub ScripObj {
+ my $self = shift;
+ return($self->{'ScripObj'});
+}
+# }}}
+# {{{ sub TransactionObj
+
+=head2 TransactionObj
+
+Return the transaction object we're talking about
+
+=cut
+
+sub TransactionObj {
+ my $self = shift;
+ return($self->{'TransactionObj'});
+}
+# }}}
+
+# {{{ sub Type
+
+=head2 Type
+
+
+
+=cut
+
+sub ApplicableTransTypes {
+ my $self = shift;
+ return($self->{'ApplicableTransTypes'});
+}
+# }}}
+
+
+# Scrip methods
+
+
+#What does this type of Action does
+
+# {{{ sub Describe
+sub Describe {
+ my $self = shift;
+ return ($self->loc("No description for [_1]", ref $self));
+}
+# }}}
+
+
+#Parse the templates, get things ready to go.
+
+#If this rule applies to this transaction, return true.
+
+# {{{ sub IsApplicable
+sub IsApplicable {
+ my $self = shift;
+ return(undef);
+}
+# }}}
+
+# {{{ sub DESTROY
+sub DESTROY {
+ my $self = shift;
+
+ # We need to clean up all the references that might maybe get
+ # oddly circular
+ $self->{'TemplateObj'} =undef
+ $self->{'TicketObj'} = undef;
+ $self->{'TransactionObj'} = undef;
+ $self->{'ScripObj'} = undef;
+
+}
+
+# }}}
+
+eval "require RT::Condition_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition_Vendor.pm});
+eval "require RT::Condition_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Condition/AnyTransaction.pm b/rt/lib/RT/Condition/AnyTransaction.pm
index 9b1bb8c..1b90aa5 100644
--- a/rt/lib/RT/Condition/AnyTransaction.pm
+++ b/rt/lib/RT/Condition/AnyTransaction.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,14 +45,11 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
package RT::Condition::AnyTransaction;
-require RT::Condition::Generic;
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
diff --git a/rt/lib/RT/Condition/BeforeDue.pm b/rt/lib/RT/Condition/BeforeDue.pm
index c42e07b..b392f38 100644
--- a/rt/lib/RT/Condition/BeforeDue.pm
+++ b/rt/lib/RT/Condition/BeforeDue.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,15 +45,13 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Condition::BeforeDue;
-require RT::Condition::Generic;
+use base 'RT::Condition';
use RT::Date;
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
-
sub IsApplicable {
my $self = shift;
diff --git a/rt/lib/RT/Condition/CloseTicket.pm b/rt/lib/RT/Condition/CloseTicket.pm
new file mode 100644
index 0000000..ded0448
--- /dev/null
+++ b/rt/lib/RT/Condition/CloseTicket.pm
@@ -0,0 +1,84 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Condition::CloseTicket;
+
+use strict;
+use warnings;
+
+use base 'RT::Condition';
+
+
+=head2 IsApplicable
+
+If the ticket was closed, ie status was changed from any active status to
+an inactive. See F<RT_Config.pm> for C<ActiveStatuses> and C<InactiveStatuses>
+options.
+
+=cut
+
+sub IsApplicable {
+ my $self = shift;
+
+ my $txn = $self->TransactionObj;
+ return 0 unless $txn->Type eq "Status" ||
+ ( $txn->Type eq "Set" && $txn->Field eq "Status" );
+
+ my $queue = $self->TicketObj->QueueObj;
+ return 0 unless $queue->IsActiveStatus( $txn->OldValue );
+ return 0 unless $queue->IsInactiveStatus( $txn->NewValue );
+
+ return 1;
+}
+
+eval "require RT::Condition::CloseTicket_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/CloseTicket_Vendor.pm});
+eval "require RT::Condition::CloseTicket_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/CloseTicket_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Condition/Generic.pm b/rt/lib/RT/Condition/Generic.pm
index da6ec47..08baeda 100755
--- a/rt/lib/RT/Condition/Generic.pm
+++ b/rt/lib/RT/Condition/Generic.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,191 +45,36 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
- RT::Condition::Generic - ;
+ RT::Condition::Generic - deprecated, see RT::Condition
=head1 SYNOPSIS
- use RT::Condition::Generic;
- my $foo = RT::Condition::Generic->new(
- TransactionObj => $tr,
- TicketObj => $ti,
- ScripObj => $scr,
- Argument => $arg,
- Type => $type);
-
- if ($foo->IsApplicable) {
- # do something
- }
-
+ use RT::Condition::Generic;
=head1 DESCRIPTION
+This module is provided only for backwards compatibility.
=head1 METHODS
-=begin testing
-
-ok (require RT::Condition::Generic);
-
-=end testing
-
-
=cut
-package RT::Condition::Generic;
-
use strict;
-use base qw/RT::Base/;
-
-# {{{ sub new
-sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- bless ($self, $class);
- $self->_Init(@_);
- return $self;
-}
-# }}}
-
-# {{{ sub _Init
-sub _Init {
- my $self = shift;
- my %args = ( TransactionObj => undef,
- TicketObj => undef,
- ScripObj => undef,
- TemplateObj => undef,
- Argument => undef,
- ApplicableTransTypes => undef,
- CurrentUser => undef,
- @_ );
-
- $self->{'Argument'} = $args{'Argument'};
- $self->{'ScripObj'} = $args{'ScripObj'};
- $self->{'TicketObj'} = $args{'TicketObj'};
- $self->{'TransactionObj'} = $args{'TransactionObj'};
- $self->{'ApplicableTransTypes'} = $args{'ApplicableTransTypes'};
- $self->CurrentUser($args{'CurrentUser'});
-}
-# }}}
-
-# Access Scripwide data
-
-# {{{ sub Argument
-
-=head2 Argument
-
-Return the optional argument associated with this ScripCondition
-
-=cut
-
-sub Argument {
- my $self = shift;
- return($self->{'Argument'});
-}
-# }}}
-
-# {{{ sub TicketObj
-
-=head2 TicketObj
-
-Return the ticket object we're talking about
-
-=cut
-
-sub TicketObj {
- my $self = shift;
- return($self->{'TicketObj'});
-}
-# }}}
-
-# {{{ sub ScripObj
-
-=head2 ScripObj
-
-Return the Scrip object we're talking about
-
-=cut
-
-sub ScripObj {
- my $self = shift;
- return($self->{'ScripObj'});
-}
-# }}}
-# {{{ sub TransactionObj
-
-=head2 TransactionObj
-
-Return the transaction object we're talking about
-
-=cut
-
-sub TransactionObj {
- my $self = shift;
- return($self->{'TransactionObj'});
-}
-# }}}
-
-# {{{ sub Type
-
-=head2 Type
-
-
-
-=cut
-
-sub ApplicableTransTypes {
- my $self = shift;
- return($self->{'ApplicableTransTypes'});
-}
-# }}}
-
-
-# Scrip methods
-
-
-#What does this type of Action does
-
-# {{{ sub Describe
-sub Describe {
- my $self = shift;
- return ($self->loc("No description for [_1]", ref $self));
-}
-# }}}
-
-
-#Parse the templates, get things ready to go.
-
-#If this rule applies to this transaction, return true.
-
-# {{{ sub IsApplicable
-sub IsApplicable {
- my $self = shift;
- return(undef);
-}
-# }}}
-
-# {{{ sub DESTROY
-sub DESTROY {
- my $self = shift;
-
- # We need to clean up all the references that might maybe get
- # oddly circular
- $self->{'TemplateObj'} =undef
- $self->{'TicketObj'} = undef;
- $self->{'TransactionObj'} = undef;
- $self->{'ScripObj'} = undef;
-
-}
-
-# }}}
+use warnings;
+package RT::Condition::Generic;
+use base 'RT::Condition';
eval "require RT::Condition::Generic_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Vendor.pm});
+warn "RT::Condition::Generic has become RT::Condition. Please adjust your RT::Condition::Generic_Vendor file at " . $INC{"RT/Condition/Generic_Vendor.pm"} if !$@;
+
eval "require RT::Condition::Generic_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Local.pm});
+warn "RT::Condition::Generic has become RT::Condition. Please adjust your RT::Condition::Generic_Local file at " . $INC{"RT/Condition/Generic_Local.pm"} if !$@;
1;
+
diff --git a/rt/lib/RT/Condition/Overdue.pm b/rt/lib/RT/Condition/Overdue.pm
index 4fb7f0d..44d5f22 100644
--- a/rt/lib/RT/Condition/Overdue.pm
+++ b/rt/lib/RT/Condition/Overdue.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,8 +45,6 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
-
=head1 NAME
@@ -59,11 +57,8 @@ Returns true if the ticket we're operating on is overdue
=cut
package RT::Condition::Overdue;
-require RT::Condition::Generic;
-
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
diff --git a/rt/lib/RT/Condition/OwnerChange.pm b/rt/lib/RT/Condition/OwnerChange.pm
index 2e10602..da90253 100644
--- a/rt/lib/RT/Condition/OwnerChange.pm
+++ b/rt/lib/RT/Condition/OwnerChange.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,69 +45,23 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
-
package RT::Condition::OwnerChange;
-require RT::Condition::Generic;
-
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
If we're changing the owner return true, otherwise return false
-=begin testing
-
-my $q = RT::Queue->new($RT::SystemUser);
-$q->Create(Name =>'ownerChangeTest');
-
-ok($q->Id, "Created a scriptest queue");
-
-my $s1 = RT::Scrip->new($RT::SystemUser);
-my ($val, $msg) =$s1->Create( Queue => $q->Id,
- ScripAction => 'User Defined',
- ScripCondition => 'On Owner Change',
- CustomIsApplicableCode => '',
- CustomPrepareCode => 'return 1',
- CustomCommitCode => '
- $self->TicketObj->SetPriority($self->TicketObj->Priority+1);
- return(1);
- ',
- Template => 'Blank'
- );
-ok($val,$msg);
-
-my $ticket = RT::Ticket->new($RT::SystemUser);
-my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id,
- Subject => "hair on fire",
- InitialPriority => '20'
- );
-ok($tv, $tm);
-ok($ticket->SetOwner('root'));
-is ($ticket->Priority , '21', "Ticket priority is set right");
-ok($ticket->Steal);
-is ($ticket->Priority , '22', "Ticket priority is set right");
-ok($ticket->Untake);
-is ($ticket->Priority , '23', "Ticket priority is set right");
-ok($ticket->Take);
-is ($ticket->Priority , '24', "Ticket priority is set right");
-
-
-
-
-
-=end testing
=cut
sub IsApplicable {
my $self = shift;
- if ($self->TransactionObj->Field eq 'Owner') {
+ if ( ( $self->TransactionObj->Field || '' ) eq 'Owner' ) {
return(1);
}
else {
diff --git a/rt/lib/RT/Condition/PriorityChange.pm b/rt/lib/RT/Condition/PriorityChange.pm
index 533cc4b..268587a 100644
--- a/rt/lib/RT/Condition/PriorityChange.pm
+++ b/rt/lib/RT/Condition/PriorityChange.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,15 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
-
package RT::Condition::PriorityChange;
-require RT::Condition::Generic;
-
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
diff --git a/rt/lib/RT/Condition/PriorityExceeds.pm b/rt/lib/RT/Condition/PriorityExceeds.pm
index 5f92957..20089db 100644
--- a/rt/lib/RT/Condition/PriorityExceeds.pm
+++ b/rt/lib/RT/Condition/PriorityExceeds.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,16 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
-
package RT::Condition::PriorityExceeds;
-require RT::Condition::Generic;
-
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
-
=head2 IsApplicable
diff --git a/rt/lib/RT/Condition/QueueChange.pm b/rt/lib/RT/Condition/QueueChange.pm
index d5fbeec..250a2de 100644
--- a/rt/lib/RT/Condition/QueueChange.pm
+++ b/rt/lib/RT/Condition/QueueChange.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,16 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
-
package RT::Condition::QueueChange;
-require RT::Condition::Generic;
-
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
-
=head2 IsApplicable
diff --git a/rt/lib/RT/Condition/ReopenTicket.pm b/rt/lib/RT/Condition/ReopenTicket.pm
new file mode 100644
index 0000000..1b62845
--- /dev/null
+++ b/rt/lib/RT/Condition/ReopenTicket.pm
@@ -0,0 +1,89 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Condition::ReopenTicket;
+
+use strict;
+use warnings;
+
+use base 'RT::Condition';
+
+
+=head2 IsApplicable
+
+If the ticket was repopened, ie status was changed from any inactive status to
+an active. See F<RT_Config.pm> for C<ActiveStatuses> and C<InactiveStatuses>
+options.
+
+=cut
+
+sub IsApplicable {
+ my $self = shift;
+
+ my $txn = $self->TransactionObj;
+ return 0 unless $txn->Type eq "Status" ||
+ ( $txn->Type eq "Set" && $txn->Field eq "Status" );
+
+ my $queue = $self->TicketObj->QueueObj;
+ return 0 unless $queue->IsInactiveStatus( $txn->OldValue );
+ return 0 unless $queue->IsActiveStatus( $txn->NewValue );
+
+ $RT::Logger->debug("Condition 'On Reopen' triggered "
+ ."for ticket #". $self->TicketObj->id
+ ." transaction #". $txn->id
+ );
+
+ return 1;
+}
+
+eval "require RT::Condition::ReopenTicket_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/ReopenTicket_Vendor.pm});
+eval "require RT::Condition::ReopenTicket_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/ReopenTicket_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Condition/StatusChange.pm b/rt/lib/RT/Condition/StatusChange.pm
index 20da9e7..285b71d 100644
--- a/rt/lib/RT/Condition/StatusChange.pm
+++ b/rt/lib/RT/Condition/StatusChange.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,15 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
-
package RT::Condition::StatusChange;
-require RT::Condition::Generic;
-
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
diff --git a/rt/lib/RT/Condition/UserDefined.pm b/rt/lib/RT/Condition/UserDefined.pm
index f4d2e27..f339e9a 100644
--- a/rt/lib/RT/Condition/UserDefined.pm
+++ b/rt/lib/RT/Condition/UserDefined.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,15 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-
package RT::Condition::UserDefined;
-
-use RT::Condition::Generic;
-
+use base 'RT::Condition';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
@@ -64,6 +59,7 @@ This happens on every transaction. it's always applicable
sub IsApplicable {
my $self = shift;
+ local $@;
my $retval = eval $self->ScripObj->CustomIsApplicableCode;
if ($@) {
$RT::Logger->error("Scrip ".$self->ScripObj->Id. " IsApplicable failed: ".$@);
diff --git a/rt/lib/RT/Config.pm b/rt/lib/RT/Config.pm
new file mode 100644
index 0000000..76c45dc
--- /dev/null
+++ b/rt/lib/RT/Config.pm
@@ -0,0 +1,894 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Config;
+
+use strict;
+use warnings;
+
+use File::Spec ();
+
+=head1 NAME
+
+ RT::Config - RT's config
+
+=head1 SYNOPSYS
+
+ # get config object
+ use RT::Config;
+ my $config = new RT::Config;
+ $config->LoadConfigs;
+
+ # get or set option
+ my $rt_web_path = $config->Get('WebPath');
+ $config->Set(EmailOutputEncoding => 'latin1');
+
+ # get config object from RT package
+ use RT;
+ RT->LoadConfig;
+ my $config = RT->Config;
+
+=head1 DESCRIPTION
+
+C<RT::Config> class provide access to RT's and RT extensions' config files.
+
+RT uses two files for site configuring:
+
+First file is F<RT_Config.pm> - core config file. This file is shipped
+with RT distribution and contains default values for all available options.
+B<You should never edit this file.>
+
+Second file is F<RT_SiteConfig.pm> - site config file. You can use it
+to customize your RT instance. In this file you can override any option
+listed in core config file.
+
+RT extensions could also provide thier config files. Extensions should
+use F<< <NAME>_Config.pm >> and F<< <NAME>_SiteConfig.pm >> names for
+config files, where <NAME> is extension name.
+
+B<NOTE>: All options from RT's config and extensions' configs are saved
+in one place and thus extension could override RT's options, but it is not
+recommended.
+
+=cut
+
+=head2 %META
+
+Hash of Config options that may be user overridable
+or may require more logic than should live in RT_*Config.pm
+
+Keyed by config name, there are several properties that
+can be set for each config optin:
+
+ Section - What header this option should be grouped
+ under on the user Settings page
+ Overridable - Can users change this option
+ SortOrder - Within a Section, how should the options be sorted
+ for display to the user
+ Widget - Mason component path to widget that should be used
+ to display this config option
+ WidgetArguments - An argument hash passed to the WIdget
+ Description - Friendly description to show the user
+ Values - Arrayref of options (for select Widget)
+ ValuesLabel - Hashref, key is the Value from the Values
+ list, value is a user friendly description
+ of the value
+ Callback - subref that receives no arguments. It returns
+ a hashref of items that are added to the rest
+ of the WidgetArguments
+ PostLoadCheck - subref passed the RT::Config object and the current
+ setting of the config option. Can make further checks
+ (such as seeing if a library is installed) and then change
+ the setting of this or other options in the Config using
+ the RT::Config option.
+
+=cut
+
+our %META = (
+ # General user overridable options
+ DefaultQueue => {
+ Section => 'General',
+ Overridable => 1,
+ SortOrder => 1,
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Default queue', #loc
+ Callback => sub {
+ my $ret = { Values => [], ValuesLabel => {}};
+ my $q = new RT::Queues($HTML::Mason::Commands::session{'CurrentUser'});
+ $q->UnLimit;
+ while (my $queue = $q->Next) {
+ next unless $queue->CurrentUserHasRight("CreateTicket");
+ push @{$ret->{Values}}, $queue->Id;
+ $ret->{ValuesLabel}{$queue->Id} = $queue->Name;
+ }
+ return $ret;
+ },
+ }
+ },
+ UsernameFormat => {
+ Section => 'General',
+ Overridable => 1,
+ SortOrder => 2,
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Username format', # loc
+ Values => [qw(concise verbose)],
+ ValuesLabel => {
+ concise => 'Short usernames', # loc_left_pair
+ verbose => 'Name and email address', # loc_left_pair
+ },
+ },
+ },
+ WebDefaultStylesheet => {
+ Section => 'General', #loc
+ Overridable => 1,
+ SortOrder => 3,
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Theme', #loc
+ # XXX: we need support for 'get values callback'
+ Values => [qw(3.5-default 3.4-compat web2)],
+ },
+ },
+ MessageBoxRichText => {
+ Section => 'General',
+ Overridable => 1,
+ SortOrder => 4,
+ Widget => '/Widgets/Form/Boolean',
+ WidgetArguments => {
+ Description => 'WYSIWYG message composer' # loc
+ }
+ },
+ MessageBoxRichTextHeight => {
+ Section => 'General',
+ Overridable => 1,
+ SortOrder => 5,
+ Widget => '/Widgets/Form/Integer',
+ WidgetArguments => {
+ Description => 'WYSIWYG composer height', # loc
+ }
+ },
+ MessageBoxWidth => {
+ Section => 'General',
+ Overridable => 1,
+ SortOrder => 6,
+ Widget => '/Widgets/Form/Integer',
+ WidgetArguments => {
+ Description => 'Message box width', #loc
+ },
+ },
+ MessageBoxHeight => {
+ Section => 'General',
+ Overridable => 1,
+ SortOrder => 7,
+ Widget => '/Widgets/Form/Integer',
+ WidgetArguments => {
+ Description => 'Message box height', #loc
+ },
+ },
+ SearchResultsRefreshInterval => {
+ Section => 'General', #loc
+ Overridable => 1,
+ SortOrder => 8,
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Search results refresh interval', #loc
+ Values => [qw(0 120 300 600 1200 3600 7200)],
+ ValuesLabel => {
+ 0 => "Don't refresh search results.", #loc
+ 120 => "Refresh search results every 2 minutes.", #loc
+ 300 => "Refresh search results every 5 minutes.", #loc
+ 600 => "Refresh search results every 10 minutes.", #loc
+ 1200 => "Refresh search results every 20 minutes.", #loc
+ 3600 => "Refresh search results every 60 minutes.", #loc
+ 7200 => "Refresh search results every 120 minutes.", #loc
+ },
+ },
+ },
+
+ # 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,
+ SortOrder => 2,
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Home page refresh interval', #loc
+ Values => [qw(0 120 300 600 1200 3600 7200)],
+ ValuesLabel => {
+ 0 => "Don't refresh home page.", #loc
+ 120 => "Refresh home page every 2 minutes.", #loc
+ 300 => "Refresh home page every 5 minutes.", #loc
+ 600 => "Refresh home page every 10 minutes.", #loc
+ 1200 => "Refresh home page every 20 minutes.", #loc
+ 3600 => "Refresh home page every 60 minutes.", #loc
+ 7200 => "Refresh home page every 120 minutes.", #loc
+ },
+ },
+ },
+
+ # User overridable options for Ticket displays
+ MaxInlineBody => {
+ Section => 'Ticket display', #loc
+ Overridable => 1,
+ SortOrder => 1,
+ Widget => '/Widgets/Form/Integer',
+ WidgetArguments => {
+ Description => 'Maximum inline message length', #loc
+ Hints =>
+ "Length in characters; Use '0' to show all messages inline, regardless of length" #loc
+ },
+ },
+ OldestTransactionsFirst => {
+ Section => 'Ticket display',
+ Overridable => 1,
+ SortOrder => 2,
+ Widget => '/Widgets/Form/Boolean',
+ WidgetArguments => {
+ Description => 'Show oldest history first', #loc
+ },
+ },
+ ShowUnreadMessageNotifications => {
+ Section => 'Ticket display',
+ Overridable => 1,
+ SortOrder => 3,
+ Widget => '/Widgets/Form/Boolean',
+ WidgetArguments => {
+ Description => 'Notify me of unread messages', #loc
+ },
+
+ },
+ PlainTextPre => {
+ Section => 'Ticket display',
+ Overridable => 1,
+ SortOrder => 4,
+ Widget => '/Widgets/Form/Boolean',
+ WidgetArguments => {
+ Description => 'add <pre> tag around plain text attachments', #loc
+ Hints => "Use this to protect the format of plain text" #loc
+ },
+ },
+ PlainTextMono => {
+ Section => 'Ticket display',
+ Overridable => 1,
+ SortOrder => 5,
+ Widget => '/Widgets/Form/Boolean',
+ WidgetArguments => {
+ Description => 'display wrapped and formatted plain text attachments', #loc
+ Hints => 'Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option', #loc
+ },
+ },
+
+ # User overridable locale options
+ DateTimeFormat => {
+ Section => 'Locale', #loc
+ Overridable => 1,
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Date format', #loc
+ Callback => sub { my $ret = { Values => [], ValuesLabel => {}};
+ my $date = new RT::Date($HTML::Mason::Commands::session{'CurrentUser'});
+ $date->Set;
+ foreach my $value ($date->Formatters) {
+ push @{$ret->{Values}}, $value;
+ $ret->{ValuesLabel}{$value} = $date->$value();
+ }
+ return $ret;
+ },
+ },
+ },
+
+ # User overridable mail options
+ EmailFrequency => {
+ Section => 'Mail', #loc
+ Overridable => 1,
+ Default => 'Individual messages',
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Email delivery', #loc
+ Values => [
+ 'Individual messages', #loc
+ 'Daily digest', #loc
+ 'Weekly digest', #loc
+ 'Suspended' #loc
+ ]
+ }
+ },
+
+ # this tends to break extensions that stash links in ticket update pages
+ Organization => {
+ Type => 'SCALAR',
+ PostLoadCheck => sub {
+ my ($self,$value) = @_;
+ $RT::Logger->error("your \$Organization setting ($value) appears to contain whitespace. Please fix this.")
+ if $value =~ /\s/;;
+ },
+ },
+
+ # Internal config options
+ DisableGraphViz => {
+ Type => 'SCALAR',
+ PostLoadCheck => sub {
+ my $self = shift;
+ my $value = shift;
+ return if $value;
+ return if $INC{'GraphViz.pm'};
+ local $@;
+ return if eval {require GraphViz; 1};
+ $RT::Logger->debug("You've enabled GraphViz, but we couldn't load the module: $@");
+ $self->Set( DisableGraphViz => 1 );
+ },
+ },
+ DisableGD => {
+ Type => 'SCALAR',
+ PostLoadCheck => sub {
+ my $self = shift;
+ my $value = shift;
+ return if $value;
+ return if $INC{'GD.pm'};
+ local $@;
+ return if eval {require GD; 1};
+ $RT::Logger->debug("You've enabled GD, but we couldn't load the module: $@");
+ $self->Set( DisableGD => 1 );
+ },
+ },
+ MailPlugins => { Type => 'ARRAY' },
+ Plugins => { Type => 'ARRAY' },
+ GnuPG => { Type => 'HASH' },
+ GnuPGOptions => { Type => 'HASH',
+ PostLoadCheck => sub {
+ my $self = shift;
+ my $gpg = $self->Get('GnuPG');
+ return unless $gpg->{'Enable'};
+ my $gpgopts = $self->Get('GnuPGOptions');
+ unless (-d $gpgopts->{homedir} && -r _ ) { # no homedir, no gpg
+ $RT::Logger->debug(
+ "RT's GnuPG libraries couldn't successfully read your".
+ " configured GnuPG home directory (".$gpgopts->{homedir}
+ ."). PGP support has been disabled");
+ $gpg->{'Enable'} = 0;
+ return;
+ }
+
+
+ require RT::Crypt::GnuPG;
+ unless (RT::Crypt::GnuPG->Probe()) {
+ $RT::Logger->debug(
+ "RT's GnuPG libraries couldn't successfully execute gpg.".
+ " PGP support has been disabled");
+ $gpg->{'Enable'} = 0;
+ }
+ }
+ },
+);
+my %OPTIONS = ();
+
+=head1 METHODS
+
+=head2 new
+
+Object constructor returns new object. Takes no arguments.
+
+=cut
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) ? ref($proto) : $proto;
+ my $self = bless {}, $class;
+ $self->_Init(@_);
+ return $self;
+}
+
+sub _Init {
+ return;
+}
+
+=head2 InitConfig
+
+Do nothin right now.
+
+=cut
+
+sub InitConfig {
+ my $self = shift;
+ my %args = ( File => '', @_ );
+ $args{'File'} =~ s/(?<=Config)(?=\.pm$)/Meta/;
+ return 1;
+}
+
+=head2 LoadConfigs
+
+Load all configs. First of all load RT's config then load
+extensions' config files in alphabetical order.
+Takes no arguments.
+
+=cut
+
+sub LoadConfigs {
+ my $self = shift;
+
+ $self->InitConfig( File => 'RT_Config.pm' );
+ $self->LoadConfig( File => 'RT_Config.pm' );
+
+ my @configs = $self->Configs;
+ $self->InitConfig( File => $_ ) foreach @configs;
+ $self->LoadConfig( File => $_ ) foreach @configs;
+ return;
+}
+
+=head1 LoadConfig
+
+Takes param hash with C<File> field.
+First, the site configuration file is loaded, in order to establish
+overall site settings like hostname and name of RT instance.
+Then, the core configuration file is loaded to set fallback values
+for all settings; it bases some values on settings from the site
+configuration file.
+
+B<Note> that core config file don't change options if site config
+has set them so to add value to some option instead of
+overriding you have to copy original value from core config file.
+
+=cut
+
+sub LoadConfig {
+ my $self = shift;
+ my %args = ( File => '', @_ );
+ $args{'File'} =~ s/(?<!Site)(?=Config\.pm$)/Site/;
+ if ( $args{'File'} eq 'RT_SiteConfig.pm'
+ and my $site_config = $ENV{RT_SITE_CONFIG} )
+ {
+ $self->_LoadConfig( %args, File => $site_config );
+ } else {
+ $self->_LoadConfig(%args);
+ }
+ $args{'File'} =~ s/Site(?=Config\.pm$)//;
+ $self->_LoadConfig(%args);
+ return 1;
+}
+
+sub _LoadConfig {
+ my $self = shift;
+ my %args = ( File => '', @_ );
+
+ my ($is_ext, $is_site);
+ if ( $args{'File'} eq ($ENV{RT_SITE_CONFIG}||'') ) {
+ ($is_ext, $is_site) = ('', 1);
+ } else {
+ $is_ext = $args{'File'} =~ /^(?!RT_)(?:(.*)_)(?:Site)?Config/ ? $1 : '';
+ $is_site = $args{'File'} =~ /SiteConfig/ ? 1 : 0;
+ }
+
+ eval {
+ package RT;
+ local *Set = sub(\[$@%]@) {
+ my ( $opt_ref, @args ) = @_;
+ my ( $pack, $file, $line ) = caller;
+ return $self->SetFromConfig(
+ Option => $opt_ref,
+ Value => [@args],
+ Package => $pack,
+ File => $file,
+ Line => $line,
+ SiteConfig => $is_site,
+ Extension => $is_ext,
+ );
+ };
+ my @etc_dirs = ($RT::LocalEtcPath);
+ push @etc_dirs, RT->PluginDirs('etc') if $is_ext;
+ push @etc_dirs, $RT::EtcPath, @INC;
+ local @INC = @etc_dirs;
+ require $args{'File'};
+ };
+ if ($@) {
+ return 1 if $is_site && $@ =~ qr{^Can't locate \Q$args{File}};
+ if ( $is_site || $@ !~ qr{^Can't locate \Q$args{File}} ) {
+ die qq{Couldn't load RT config file $args{'File'}:\n\n$@};
+ }
+
+ my $username = getpwuid($>);
+ my $group = getgrgid($();
+
+ my ( $file_path, $fileuid, $filegid );
+ foreach ( $RT::LocalEtcPath, $RT::EtcPath, @INC ) {
+ my $tmp = File::Spec->catfile( $_, $args{File} );
+ ( $fileuid, $filegid ) = ( stat($tmp) )[ 4, 5 ];
+ if ( defined $fileuid ) {
+ $file_path = $tmp;
+ last;
+ }
+ }
+ unless ($file_path) {
+ die
+ qq{Couldn't load RT config file $args{'File'} as user $username / group $group.\n}
+ . qq{The file couldn't be found in $RT::LocalEtcPath and $RT::EtcPath.\n$@};
+ }
+
+ my $message = <<EOF;
+
+RT couldn't load RT config file %s as:
+ user: $username
+ group: $group
+
+The file is owned by user %s and group %s.
+
+This usually means that the user/group your webserver is running
+as cannot read the file. Be careful not to make the permissions
+on this file too liberal, because it contains database passwords.
+You may need to put the webserver user in the appropriate group
+(%s) or change permissions be able to run succesfully.
+EOF
+
+ my $fileusername = getpwuid($fileuid);
+ my $filegroup = getgrgid($filegid);
+ my $errormessage = sprintf( $message,
+ $file_path, $fileusername, $filegroup, $filegroup );
+ die "$errormessage\n$@";
+ }
+ return 1;
+}
+
+sub PostLoadCheck {
+ my $self = shift;
+ foreach my $o ( grep $META{$_}{'PostLoadCheck'}, $self->Options( Overridable => undef ) ) {
+ $META{$o}->{'PostLoadCheck'}->( $self, $self->Get($o) );
+ }
+}
+
+=head2 Configs
+
+Returns list of config files found in local etc, plugins' etc
+and main etc directories.
+
+=cut
+
+sub Configs {
+ my $self = shift;
+
+ my @configs = ();
+ foreach my $path ( $RT::LocalEtcPath, RT->PluginDirs('etc'), $RT::EtcPath ) {
+ my $mask = File::Spec->catfile( $path, "*_Config.pm" );
+ my @files = glob $mask;
+ @files = grep !/^RT_Config\.pm$/,
+ grep $_ && /^\w+_Config\.pm$/,
+ map { s/^.*[\\\/]//; $_ } @files;
+ push @configs, sort @files;
+ }
+
+ my %seen;
+ @configs = grep !$seen{$_}++, @configs;
+ return @configs;
+}
+
+=head2 Get
+
+Takes name of the option as argument and returns its current value.
+
+In the case of a user-overridable option, first checks the user's
+preferences before looking for site-wide configuration.
+
+Returns values from RT_SiteConfig, RT_Config and then the %META hash
+of configuration variables's "Default" for this config variable,
+in that order.
+
+Returns different things in scalar and array contexts. For scalar
+options it's not that important, however for arrays and hash it's.
+In scalar context returns references to arrays and hashes.
+
+Use C<scalar> perl's op to force context, especially when you use
+C<(..., Argument => RT->Config->Get('ArrayOpt'), ...)>
+as perl's '=>' op doesn't change context of the right hand argument to
+scalar. Instead use C<(..., Argument => scalar RT->Config->Get('ArrayOpt'), ...)>.
+
+It's also important for options that have no default value(no default
+in F<etc/RT_Config.pm>). If you don't force scalar context then you'll
+get empty list and all your named args will be messed up. For example
+C<(arg1 => 1, arg2 => RT->Config->Get('OptionDoesNotExist'), arg3 => 3)>
+will result in C<(arg1 => 1, arg2 => 'arg3', 3)> what is most probably
+unexpected, or C<(arg1 => 1, arg2 => RT->Config->Get('ArrayOption'), arg3 => 3)>
+will result in C<(arg1 => 1, arg2 => 'element of option', 'another_one' => ..., 'arg3', 3)>.
+
+=cut
+
+sub Get {
+ my ( $self, $name, $user ) = @_;
+
+ my $res;
+ if ( $user && $user->id && $META{$name}->{'Overridable'} ) {
+ $user = $user->UserObj if $user->isa('RT::CurrentUser');
+ my $prefs = $user->Preferences($RT::System);
+ $res = $prefs->{$name} if $prefs;
+ }
+ $res = $OPTIONS{$name} unless defined $res;
+ $res = $META{$name}->{'Default'} unless defined $res;
+ return $self->_ReturnValue( $res, $META{$name}->{'Type'} || 'SCALAR' );
+}
+
+=head2 Set
+
+Set option's value to new value. Takes name of the option and new value.
+Returns old value.
+
+The new value should be scalar, array or hash depending on type of the option.
+If the option is not defined in meta or the default RT config then it is of
+scalar type.
+
+=cut
+
+sub Set {
+ my ( $self, $name ) = ( shift, shift );
+
+ my $old = $OPTIONS{$name};
+ my $type = $META{$name}->{'Type'} || 'SCALAR';
+ if ( $type eq 'ARRAY' ) {
+ $OPTIONS{$name} = [@_];
+ { no warnings 'once'; no strict 'refs'; @{"RT::$name"} = (@_); }
+ } elsif ( $type eq 'HASH' ) {
+ $OPTIONS{$name} = {@_};
+ { no warnings 'once'; no strict 'refs'; %{"RT::$name"} = (@_); }
+ } else {
+ $OPTIONS{$name} = shift;
+ {no warnings 'once'; no strict 'refs'; ${"RT::$name"} = $OPTIONS{$name}; }
+ }
+ $META{$name}->{'Type'} = $type;
+ return $self->_ReturnValue( $old, $type );
+}
+
+sub _ReturnValue {
+ my ( $self, $res, $type ) = @_;
+ return $res unless wantarray;
+
+ if ( $type eq 'ARRAY' ) {
+ return @{ $res || [] };
+ } elsif ( $type eq 'HASH' ) {
+ return %{ $res || {} };
+ }
+ return $res;
+}
+
+sub SetFromConfig {
+ my $self = shift;
+ my %args = (
+ Option => undef,
+ Value => [],
+ Package => 'RT',
+ File => '',
+ Line => 0,
+ SiteConfig => 1,
+ Extension => 0,
+ @_
+ );
+
+ unless ( $args{'File'} ) {
+ ( $args{'Package'}, $args{'File'}, $args{'Line'} ) = caller(1);
+ }
+
+ my $opt = $args{'Option'};
+
+ my $type;
+ my $name = $self->__GetNameByRef($opt);
+ if ($name) {
+ $type = ref $opt;
+ $name =~ s/.*:://;
+ } else {
+ $name = $$opt;
+ $type = $META{$name}->{'Type'} || 'SCALAR';
+ }
+
+ # if option is already set we have to check where
+ # it comes from and may be ignore it
+ if ( exists $OPTIONS{$name} ) {
+ if ( $args{'SiteConfig'} && $args{'Extension'} ) {
+ # if it's site config of an extension then it can only
+ # override options that came from its main config
+ if ( $args{'Extension'} ne $META{$name}->{'Source'}{'Extension'} ) {
+ my %source = %{ $META{$name}->{'Source'} };
+ warn
+ "Change of config option '$name' at $args{'File'} line $args{'Line'} has been ignored."
+ ." This option earlier has been set in $source{'File'} line $source{'Line'}."
+ ." To overide this option use ". ($source{'Extension'}||'RT')
+ ." site config."
+ ;
+ return 1;
+ }
+ } elsif ( !$args{'SiteConfig'} && $META{$name}->{'Source'}{'SiteConfig'} ) {
+ # if it's core config then we can override any option that came from another
+ # core config, but not site config
+
+ my %source = %{ $META{$name}->{'Source'} };
+ if ( $source{'Extension'} ne $args{'Extension'} ) {
+ # as a site config is loaded earlier then its base config
+ # then we warn only on different extensions, for example
+ # RTIR's options is set in main site config or RTFM's
+ warn
+ "Change of config option '$name' at $args{'File'} line $args{'Line'} has been ignored."
+ ." It's may be ok, but we want you to be aware."
+ ." This option earlier has been set in $source{'File'} line $source{'Line'}."
+ ;
+ }
+
+ return 1;
+ }
+ }
+
+ $META{$name}->{'Type'} = $type;
+ foreach (qw(Package File Line SiteConfig Extension)) {
+ $META{$name}->{'Source'}->{$_} = $args{$_};
+ }
+ $self->Set( $name, @{ $args{'Value'} } );
+
+ return 1;
+}
+
+{
+ my $last_pack = '';
+
+ sub __GetNameByRef {
+ my $self = shift;
+ my $ref = shift;
+ my $pack = shift;
+ if ( !$pack && $last_pack ) {
+ my $tmp = $self->__GetNameByRef( $ref, $last_pack );
+ return $tmp if $tmp;
+ }
+ $pack ||= 'main::';
+ $pack .= '::' unless substr( $pack, -2 ) eq '::';
+
+ my %ref_sym = (
+ SCALAR => '$',
+ ARRAY => '@',
+ HASH => '%',
+ CODE => '&',
+ );
+ no strict 'refs';
+ my $name = undef;
+
+ # scan $pack's nametable(hash)
+ foreach my $k ( keys %{$pack} ) {
+
+ # hash for main:: has reference on itself
+ next if $k eq 'main::';
+
+ # if entry has trailing '::' then
+ # it is link to other name space
+ if ( $k =~ /::$/ ) {
+ $name = $self->__GetNameByRef( $ref, $k );
+ return $name if $name;
+ }
+
+ # entry of the table with references to
+ # SCALAR, ARRAY... and other types with
+ # the same name
+ my $entry = ${$pack}{$k};
+ next unless $entry;
+
+ # get entry for type we are looking for
+ # XXX skip references to scalars or other references.
+ # Otherwie 5.10 goes boom. may be we should skip any
+ # reference
+ return if ref($entry) eq 'SCALAR' || ref($entry) eq 'REF';
+ my $entry_ref = *{$entry}{ ref($ref) };
+ next unless $entry_ref;
+
+ # if references are equal then we've found
+ if ( $entry_ref == $ref ) {
+ $last_pack = $pack;
+ return ( $ref_sym{ ref($ref) } || '*' ) . $pack . $k;
+ }
+ }
+ return '';
+ }
+}
+
+=head2 Metadata
+
+
+=head2 Meta
+
+=cut
+
+sub Meta {
+ return $META{ $_[1] };
+}
+
+sub Sections {
+ my $self = shift;
+ my %seen;
+ return sort
+ grep !$seen{$_}++,
+ map $_->{'Section'} || 'General',
+ values %META;
+}
+
+sub Options {
+ my $self = shift;
+ my %args = ( Section => undef, Overridable => 1, Sorted => 1, @_ );
+ my @res = keys %META;
+
+ @res = grep( ( $META{$_}->{'Section'} || 'General' ) eq $args{'Section'},
+ @res
+ ) if defined $args{'Section'};
+
+ if ( defined $args{'Overridable'} ) {
+ @res
+ = grep( ( $META{$_}->{'Overridable'} || 0 ) == $args{'Overridable'},
+ @res );
+ }
+
+ if ( $args{'Sorted'} ) {
+ @res = sort {
+ ($META{$a}->{SortOrder}||9999) <=> ($META{$b}->{SortOrder}||9999)
+ || $a cmp $b
+ } @res;
+ } else {
+ @res = sort { $a cmp $b } @res;
+ }
+ return @res;
+}
+
+eval "require RT::Config_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Config_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Config_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Config_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Crypt/GnuPG.pm b/rt/lib/RT/Crypt/GnuPG.pm
new file mode 100644
index 0000000..5581df1
--- /dev/null
+++ b/rt/lib/RT/Crypt/GnuPG.pm
@@ -0,0 +1,2450 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use strict;
+use warnings;
+
+package RT::Crypt::GnuPG;
+
+use IO::Handle;
+use GnuPG::Interface;
+use RT::EmailParser ();
+use RT::Util 'safe_run_child';
+
+=head1 NAME
+
+RT::Crypt::GnuPG - encrypt/decrypt and sign/verify email messages with the GNU Privacy Guard (GPG)
+
+=head1 DESCRIPTION
+
+This module provides support for encryption and signing of outgoing messages,
+as well as the decryption and verification of incoming email.
+
+=head1 CONFIGURATION
+
+You can control the configuration of this subsystem from RT's configuration file.
+Some options are available via the web interface, but to enable this functionality, you
+MUST start in the configuration file.
+
+There are two hashes, GnuPG and GnuPGOptions in the configuration file. The
+first one controls RT specific options. It enables you to enable/disable facility
+or change the format of messages. The second one is a hash with options for the
+'gnupg' utility. You can use it to define a keyserver, enable auto-retrieval keys
+and set almost any option 'gnupg' supports on your system.
+
+=head2 %GnuPG
+
+=head3 Enabling GnuPG
+
+Set to true value to enable this subsystem:
+
+ Set( %GnuPG,
+ Enable => 1,
+ ... other options ...
+ );
+
+However, note that you B<must> add the 'Auth::GnuPG' email filter to enable
+the handling of incoming encrypted/signed messages.
+
+=head3 Format of outgoing messages
+
+Format of outgoing messages can be controlled using the 'OutgoingMessagesFormat'
+option in the RT config:
+
+ Set( %GnuPG,
+ ... other options ...
+ OutgoingMessagesFormat => 'RFC',
+ ... other options ...
+ );
+
+or
+
+ Set( %GnuPG,
+ ... other options ...
+ OutgoingMessagesFormat => 'Inline',
+ ... other options ...
+ );
+
+This framework implements two formats of signing and encrypting of email messages:
+
+=over
+
+=item RFC
+
+This format is also known as GPG/MIME and described in RFC3156 and RFC1847.
+Technique described in these RFCs is well supported by many mail user
+agents (MUA), but some MUAs support only inline signatures and encryption,
+so it's possible to use inline format (see below).
+
+=item Inline
+
+This format doesn't take advantage of MIME, but some mail clients do
+not support GPG/MIME.
+
+We sign text parts using clear signatures. For each attachments another
+attachment with a signature is added with '.sig' extension.
+
+Encryption of text parts is implemented using inline format, other parts
+are replaced with attachments with the filename extension '.pgp'.
+
+This format is discouraged because modern mail clients typically don't support
+it well.
+
+=back
+
+=head3 Encrypting data in the database
+
+You can allow users to encrypt data in the database using
+option C<AllowEncryptDataInDB>. By default it's disabled.
+Users must have rights to see and modify tickets to use
+this feature.
+
+=head2 %GnuPGOptions
+
+Use this hash to set options of the 'gnupg' program. You can define almost any
+option you want which gnupg supports, but never try to set options which
+change output format or gnupg's commands, such as --sign (command),
+--list-options (option) and other.
+
+Some GnuPG options take arguments while others take none. (Such as --use-agent).
+For options without specific value use C<undef> as hash value.
+To disable these option just comment them out or delete them from the hash
+
+ Set(%GnuPGOptions,
+ 'option-with-value' => 'value',
+ 'enabled-option-without-value' => undef,
+ # 'commented-option' => 'value or undef',
+ );
+
+B<NOTE> that options may contain '-' character and such options B<MUST> be
+quoted, otherwise you can see quite cryptic error 'gpg: Invalid option "--0"'.
+
+=over
+
+=item --homedir
+
+The GnuPG home directory, by default it is set to F</opt/rt3/var/data/gpg>.
+
+You can manage this data with the 'gpg' commandline utility
+using the GNUPGHOME environment variable or --homedir option.
+Other utilities may be used as well.
+
+In a standard installation, access to this directory should be granted to
+the web server user which is running RT's web interface, but if you're running
+cronjobs or other utilities that access RT directly via API and may generate
+encrypted/signed notifications then the users you execute these scripts under
+must have access too.
+
+However, granting access to the dir to many users makes your setup less secure,
+some features, such as auto-import of keys, may not be available if you do not.
+To enable this features and suppress warnings about permissions on
+the dir use --no-permission-warning.
+
+=item --digest-algo
+
+This option is required in advance when RFC format for outgoing messages is
+used. We can not get default algorithm from gpg program so RT uses 'SHA1' by
+default. You may want to override it. You can use MD5, SHA1, RIPEMD160,
+SHA256 or other, however use `gpg --version` command to get information about
+supported algorithms by your gpg. These algorithms are listed as hash-functions.
+
+=item --use-agent
+
+This option lets you use GPG Agent to cache the passphrase of RT's key. See
+L<http://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html>
+for information about GPG Agent.
+
+=item --passphrase
+
+This option lets you set the passphrase of RT's key directly. This option is
+special in that it isn't passed directly to GPG, but is put into a file that
+GPG then reads (which is more secure). The downside is that anyone who has read
+access to your RT_SiteConfig.pm file can see the passphrase, thus we recommend
+the --use-agent option instead.
+
+=item other
+
+Read `man gpg` to get list of all options this program support.
+
+=back
+
+=head2 Per-queue options
+
+Using the web interface it's possible to enable signing and/or encrypting by
+default. As an administrative user of RT, open 'Configuration' then 'Queues',
+and select a queue. On the page you can see information about the queue's keys
+at the bottom and two checkboxes to choose default actions.
+
+As well, encryption is enabled for autoreplies and other notifications when
+an encypted message enters system via mailgate interface even if queue's
+option is disabled.
+
+=head2 Handling incoming messages
+
+To enable handling of encrypted and signed message in the RT you should add
+'Auth::GnuPG' mail plugin.
+
+ Set(@MailPlugins, 'Auth::MailFrom', 'Auth::GnuPG', ...other filter...);
+
+See also `perldoc lib/RT/Interface/Email/Auth/GnuPG.pm`.
+
+=head2 Errors handling
+
+There are several global templates created in the database by default. RT
+uses these templates to send error messages to users or RT's owner. These
+templates have 'Error:' or 'Error to RT owner:' prefix in the name. You can
+adjust the text of the messages using the web interface.
+
+Note that C<$TicketObj>, C<$TransactionObj> and other variable usually available
+in RT's templates are not available in these templates, but each template
+used for errors reporting has set of available data structures you can use to
+build better messages. See default templates and descriptions below.
+
+As well, you can disable particular notification by deleting content of
+a template. You can delete a template too, but in this case you'll see
+error messages in the logs when RT can not load template you've deleted.
+
+=head3 Problems with public keys
+
+Template 'Error: public key' is used to inform the user that RT has problems with
+his public key and won't be able to send him encrypted content. There are several
+reasons why RT can't use a key. However, the actual reason is not sent to the user,
+but sent to RT owner using 'Error to RT owner: public key'.
+
+The possible reasons: "Not Found", "Ambiguous specification", "Wrong
+key usage", "Key revoked", "Key expired", "No CRL known", "CRL too
+old", "Policy mismatch", "Not a secret key", "Key not trusted" or
+"No specific reason given".
+
+Due to limitations of GnuPG, it's impossible to encrypt to an untrusted key,
+unless 'always trust' mode is enabled.
+
+In the 'Error: public key' template there are a few additional variables available:
+
+=over 4
+
+=item $Message - user friendly error message
+
+=item $Reason - short reason as listed above
+
+=item $Recipient - recipient's identification
+
+=item $AddressObj - L<Email::Address> object containing recipient's email address
+
+=back
+
+A message can have several invalid recipients, to avoid sending many emails
+to the RT owner the system sends one message to the owner, grouped by
+recipient. In the 'Error to RT owner: public key' template a C<@BadRecipients>
+array is available where each element is a hash reference that describes one
+recipient using the same fields as described above. So it's something like:
+
+ @BadRecipients = (
+ { Message => '...', Reason => '...', Recipient => '...', ...},
+ { Message => '...', Reason => '...', Recipient => '...', ...},
+ ...
+ )
+
+=head3 Private key doesn't exist
+
+Template 'Error: no private key' is used to inform the user that
+he sent an encrypted email, but we have no private key to decrypt
+it.
+
+In this template C<$Message> object of L<MIME::Entity> class
+available. It's the message RT received.
+
+=head3 Invalid data
+
+Template 'Error: bad GnuPG data' used to inform the user that a
+message he sent has invalid data and can not be handled.
+
+There are several reasons for this error, but most of them are data
+corruption or absence of expected information.
+
+In this template C<@Messages> array is available and contains list
+of error messages.
+
+=head1 FOR DEVELOPERS
+
+=head2 Documentation and references
+
+* RFC1847 - Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted.
+Describes generic MIME security framework, "mulitpart/signed" and "multipart/encrypted"
+MIME types.
+
+* RFC3156 - MIME Security with Pretty Good Privacy (PGP),
+updates RFC2015.
+
+=cut
+
+# gnupg options supported by GnuPG::Interface
+# other otions should be handled via extra_args argument
+my %supported_opt = map { $_ => 1 } qw(
+ always_trust
+ armor
+ batch
+ comment
+ compress_algo
+ default_key
+ encrypt_to
+ extra_args
+ force_v3_sigs
+ homedir
+ logger_fd
+ no_greeting
+ no_options
+ no_verbose
+ openpgp
+ options
+ passphrase_fd
+ quiet
+ recipients
+ rfc1991
+ status_fd
+ textmode
+ verbose
+);
+
+# DEV WARNING: always pass all STD* handles to GnuPG interface even if we don't
+# need them, just pass 'new IO::Handle' and then close it after safe_run_child.
+# we don't want to leak anything into FCGI/Apache/MP handles, this break things.
+# So code should look like:
+# my $handles = GnuPG::Handles->new(
+# stdin => ($handle{'stdin'} = new IO::Handle),
+# stdout => ($handle{'stdout'} = new IO::Handle),
+# stderr => ($handle{'stderr'} = new IO::Handle),
+# ...
+# );
+
+=head2 SignEncrypt Entity => MIME::Entity, [ Encrypt => 1, Sign => 1, ... ]
+
+Signs and/or encrypts an email message with GnuPG utility.
+
+=over
+
+=item Signing
+
+During signing you can pass C<Signer> argument to set key we sign with this option
+overrides gnupg's C<default-key> option. If C<Signer> argument is not provided
+then address of a message sender is used.
+
+As well you can pass C<Passphrase>, but if value is undefined then L</GetPassphrase>
+called to get it.
+
+=item Encrypting
+
+During encryption you can pass a C<Recipients> array, otherwise C<To>, C<Cc> and
+C<Bcc> fields of the message are used to fetch the list.
+
+=back
+
+Returns a hash with the following keys:
+
+* exit_code
+* error
+* logger
+* status
+* message
+
+=cut
+
+sub SignEncrypt {
+ my %args = (@_);
+
+ my $entity = $args{'Entity'};
+ if ( $args{'Sign'} && !defined $args{'Signer'} ) {
+ $args{'Signer'} = UseKeyForSigning()
+ || (Email::Address->parse( $entity->head->get( 'From' ) ))[0]->address;
+ }
+ if ( $args{'Encrypt'} && !$args{'Recipients'} ) {
+ my %seen;
+ $args{'Recipients'} = [
+ grep $_ && !$seen{ $_ }++, map $_->address,
+ map Email::Address->parse( $entity->head->get( $_ ) ),
+ qw(To Cc Bcc)
+ ];
+ }
+
+ my $format = lc RT->Config->Get('GnuPG')->{'OutgoingMessagesFormat'} || 'RFC';
+ if ( $format eq 'inline' ) {
+ return SignEncryptInline( %args );
+ } else {
+ return SignEncryptRFC3156( %args );
+ }
+}
+
+sub SignEncryptRFC3156 {
+ my %args = (
+ Entity => undef,
+
+ Sign => 1,
+ Signer => undef,
+ Passphrase => undef,
+
+ Encrypt => 1,
+ Recipients => undef,
+
+ @_
+ );
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnuPGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined $args{'Passphrase'};
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $opt{'default_key'} = $args{'Signer'}
+ if $args{'Sign'} && $args{'Signer'};
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ armor => 1,
+ meta_interactive => 0,
+ );
+
+ my $entity = $args{'Entity'};
+
+ if ( $args{'Sign'} && !defined $args{'Passphrase'} ) {
+ $args{'Passphrase'} = GetPassphrase( Address => $args{'Signer'} );
+ }
+
+ my %res;
+ if ( $args{'Sign'} && !$args{'Encrypt'} ) {
+ # required by RFC3156(Ch. 5) and RFC1847(Ch. 2.1)
+ foreach ( grep !$_->is_multipart, $entity->parts_DFS ) {
+ my $tenc = $_->head->mime_encoding;
+ unless ( $tenc =~ m/^(?:7bit|quoted-printable|base64)$/i ) {
+ $_->head->mime_attr( 'Content-Transfer-Encoding'
+ => $_->effective_type =~ m{^text/}? 'quoted-printable': 'base64'
+ );
+ }
+ }
+
+ my ($handles, $handle_list) = _make_gpg_handles(stdin =>IO::Handle::CRLF->new );
+ my %handle = %$handle_list;
+
+ $gnupg->passphrase( $args{'Passphrase'} );
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $pid = safe_run_child { $gnupg->detach_sign( handles => $handles ) };
+ $entity->make_multipart( 'mixed', Force => 1 );
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $entity->parts(0)->print( $handle{'stdin'} );
+ close $handle{'stdin'};
+ }
+ waitpid $pid, 0;
+ };
+ my $err = $@;
+ my @signature = readline $handle{'stdout'};
+ close $handle{'stdout'};
+
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ return %res;
+ }
+
+ # setup RFC1847(Ch.2.1) requirements
+ my $protocol = 'application/pgp-signature';
+ $entity->head->mime_attr( 'Content-Type' => 'multipart/signed' );
+ $entity->head->mime_attr( 'Content-Type.protocol' => $protocol );
+ $entity->head->mime_attr( 'Content-Type.micalg' => 'pgp-'. lc $opt{'digest-algo'} );
+ $entity->attach(
+ Type => $protocol,
+ Disposition => 'inline',
+ Data => \@signature,
+ Encoding => '7bit',
+ );
+ }
+ if ( $args{'Encrypt'} ) {
+ my %seen;
+ $gnupg->options->push_recipients( $_ ) foreach
+ map UseKeyForEncryption($_) || $_,
+ grep !$seen{ $_ }++, map $_->address,
+ map Email::Address->parse( $entity->head->get( $_ ) ),
+ qw(To Cc Bcc);
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my ($handles, $handle_list) = _make_gpg_handles(stdout => $tmp_fh);
+ my %handle = %$handle_list;
+ $handles->options( 'stdout' )->{'direct'} = 1;
+ $gnupg->passphrase( $args{'Passphrase'} ) if $args{'Sign'};
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $pid = safe_run_child { $args{'Sign'}
+ ? $gnupg->sign_and_encrypt( handles => $handles )
+ : $gnupg->encrypt( handles => $handles ) };
+ $entity->make_multipart( 'mixed', Force => 1 );
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $entity->parts(0)->print( $handle{'stdin'} );
+ close $handle{'stdin'};
+ }
+ waitpid $pid, 0;
+ };
+
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $@ || $? ) {
+ $res{'message'} = $@? $@: "gpg exited with error code ". ($? >> 8);
+ return %res;
+ }
+
+ my $protocol = 'application/pgp-encrypted';
+ $entity->parts([]);
+ $entity->head->mime_attr( 'Content-Type' => 'multipart/encrypted' );
+ $entity->head->mime_attr( 'Content-Type.protocol' => $protocol );
+ $entity->attach(
+ Type => $protocol,
+ Disposition => 'inline',
+ Data => ['Version: 1',''],
+ Encoding => '7bit',
+ );
+ $entity->attach(
+ Type => 'application/octet-stream',
+ Disposition => 'inline',
+ Path => $tmp_fn,
+ Filename => '',
+ Encoding => '7bit',
+ );
+ $entity->parts(-1)->bodyhandle->{'_dirty_hack_to_save_a_ref_tmp_fh'} = $tmp_fh;
+ }
+ return %res;
+}
+
+sub SignEncryptInline {
+ my %args = ( @_ );
+
+ my $entity = $args{'Entity'};
+
+ my %res;
+ $entity->make_singlepart;
+ if ( $entity->is_multipart ) {
+ foreach ( $entity->parts ) {
+ %res = SignEncryptInline( @_, Entity => $_ );
+ return %res if $res{'exit_code'};
+ }
+ return %res;
+ }
+
+ return _SignEncryptTextInline( @_ )
+ if $entity->effective_type =~ /^text\//i;
+
+ return _SignEncryptAttachmentInline( @_ );
+}
+
+sub _SignEncryptTextInline {
+ my %args = (
+ Entity => undef,
+
+ Sign => 1,
+ Signer => undef,
+ Passphrase => undef,
+
+ Encrypt => 1,
+ Recipients => undef,
+
+ @_
+ );
+ return unless $args{'Sign'} || $args{'Encrypt'};
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnupGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined($args{'Passphrase'});
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $opt{'default_key'} = $args{'Signer'}
+ if $args{'Sign'} && $args{'Signer'};
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ armor => 1,
+ meta_interactive => 0,
+ );
+
+ if ( $args{'Sign'} && !defined $args{'Passphrase'} ) {
+ $args{'Passphrase'} = GetPassphrase( Address => $args{'Signer'} );
+ }
+
+ if ( $args{'Encrypt'} ) {
+ $gnupg->options->push_recipients( $_ ) foreach
+ map UseKeyForEncryption($_) || $_,
+ @{ $args{'Recipients'} || [] };
+ }
+
+ my %res;
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my ($handles, $handle_list) = _make_gpg_handles(stdout => $tmp_fh);
+ my %handle = %$handle_list;
+
+ $handles->options( 'stdout' )->{'direct'} = 1;
+ $gnupg->passphrase( $args{'Passphrase'} ) if $args{'Sign'};
+
+ my $entity = $args{'Entity'};
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $method = $args{'Sign'} && $args{'Encrypt'}
+ ? 'sign_and_encrypt'
+ : ($args{'Sign'}? 'clearsign': 'encrypt');
+ my $pid = safe_run_child { $gnupg->$method( handles => $handles ) };
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $entity->bodyhandle->print( $handle{'stdin'} );
+ close $handle{'stdin'};
+ }
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ my $err = $@;
+
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ return %res;
+ }
+
+ $entity->bodyhandle( new MIME::Body::File $tmp_fn );
+ $entity->{'__store_tmp_handle_to_avoid_early_cleanup'} = $tmp_fh;
+
+ return %res;
+}
+
+sub _SignEncryptAttachmentInline {
+ my %args = (
+ Entity => undef,
+
+ Sign => 1,
+ Signer => undef,
+ Passphrase => undef,
+
+ Encrypt => 1,
+ Recipients => undef,
+
+ @_
+ );
+ return unless $args{'Sign'} || $args{'Encrypt'};
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnupGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined($args{'Passphrase'});
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $opt{'default_key'} = $args{'Signer'}
+ if $args{'Sign'} && $args{'Signer'};
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ armor => 1,
+ meta_interactive => 0,
+ );
+
+ if ( $args{'Sign'} && !defined $args{'Passphrase'} ) {
+ $args{'Passphrase'} = GetPassphrase( Address => $args{'Signer'} );
+ }
+
+ my $entity = $args{'Entity'};
+ if ( $args{'Encrypt'} ) {
+ $gnupg->options->push_recipients( $_ ) foreach
+ map UseKeyForEncryption($_) || $_,
+ @{ $args{'Recipients'} || [] };
+ }
+
+ my %res;
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my ($handles, $handle_list) = _make_gpg_handles(stdout => $tmp_fh);
+ my %handle = %$handle_list;
+ $handles->options( 'stdout' )->{'direct'} = 1;
+ $gnupg->passphrase( $args{'Passphrase'} ) if $args{'Sign'};
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $method = $args{'Sign'} && $args{'Encrypt'}
+ ? 'sign_and_encrypt'
+ : ($args{'Sign'}? 'detach_sign': 'encrypt');
+ my $pid = safe_run_child { $gnupg->$method( handles => $handles ) };
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $entity->bodyhandle->print( $handle{'stdin'} );
+ close $handle{'stdin'};
+ }
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ my $err = $@;
+
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ return %res;
+ }
+
+ my $filename = $entity->head->recommended_filename || 'no_name';
+ if ( $args{'Sign'} && !$args{'Encrypt'} ) {
+ $entity->make_multipart;
+ $entity->attach(
+ Type => 'application/octet-stream',
+ Path => $tmp_fn,
+ Filename => "$filename.sig",
+ Disposition => 'attachment',
+ );
+ } else {
+ $entity->bodyhandle( new MIME::Body::File $tmp_fn );
+ $entity->effective_type('application/octet-stream');
+ $entity->head->mime_attr( $_ => "$filename.pgp" )
+ foreach (qw(Content-Type.name Content-Disposition.filename));
+
+ }
+ $entity->{'__store_tmp_handle_to_avoid_early_cleanup'} = $tmp_fh;
+
+ return %res;
+}
+
+sub SignEncryptContent {
+ my %args = (
+ Content => undef,
+
+ Sign => 1,
+ Signer => undef,
+ Passphrase => undef,
+
+ Encrypt => 1,
+ Recipients => undef,
+
+ @_
+ );
+ return unless $args{'Sign'} || $args{'Encrypt'};
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnupGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined($args{'Passphrase'});
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $opt{'default_key'} = $args{'Signer'}
+ if $args{'Sign'} && $args{'Signer'};
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ armor => 1,
+ meta_interactive => 0,
+ );
+
+ if ( $args{'Sign'} && !defined $args{'Passphrase'} ) {
+ $args{'Passphrase'} = GetPassphrase( Address => $args{'Signer'} );
+ }
+
+ if ( $args{'Encrypt'} ) {
+ $gnupg->options->push_recipients( $_ ) foreach
+ map UseKeyForEncryption($_) || $_,
+ @{ $args{'Recipients'} || [] };
+ }
+
+ my %res;
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my ($handles, $handle_list) = _make_gpg_handles(stdout => $tmp_fh);
+ my %handle = %$handle_list;
+ $handles->options( 'stdout' )->{'direct'} = 1;
+ $gnupg->passphrase( $args{'Passphrase'} ) if $args{'Sign'};
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $method = $args{'Sign'} && $args{'Encrypt'}
+ ? 'sign_and_encrypt'
+ : ($args{'Sign'}? 'clearsign': 'encrypt');
+ my $pid = safe_run_child { $gnupg->$method( handles => $handles ) };
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $handle{'stdin'}->print( ${ $args{'Content'} } );
+ close $handle{'stdin'};
+ }
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ my $err = $@;
+
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ return %res;
+ }
+
+ ${ $args{'Content'} } = '';
+ seek $tmp_fh, 0, 0;
+ while (1) {
+ my $status = read $tmp_fh, my $buf, 4*1024;
+ unless ( defined $status ) {
+ $RT::Logger->crit( "couldn't read message: $!" );
+ } elsif ( !$status ) {
+ last;
+ }
+ ${ $args{'Content'} } .= $buf;
+ }
+
+ return %res;
+}
+
+sub FindProtectedParts {
+ my %args = ( Entity => undef, CheckBody => 1, @_ );
+ my $entity = $args{'Entity'};
+
+ # inline PGP block, only in singlepart
+ unless ( $entity->is_multipart ) {
+ my $io = $entity->open('r');
+ unless ( $io ) {
+ $RT::Logger->warning( "Entity of type ". $entity->effective_type ." has no body" );
+ return ();
+ }
+ while ( defined($_ = $io->getline) ) {
+ next unless /^-----BEGIN PGP (SIGNED )?MESSAGE-----/;
+ my $type = $1? 'signed': 'encrypted';
+ $RT::Logger->debug("Found $type inline part");
+ return {
+ Type => $type,
+ Format => 'Inline',
+ Data => $entity,
+ };
+ }
+ $io->close;
+ return ();
+ }
+
+ # RFC3156, multipart/{signed,encrypted}
+ if ( ( my $type = $entity->effective_type ) =~ /^multipart\/(?:encrypted|signed)$/ ) {
+ unless ( $entity->parts == 2 ) {
+ $RT::Logger->error( "Encrypted or signed entity must has two subparts. Skipped" );
+ return ();
+ }
+
+ my $protocol = $entity->head->mime_attr( 'Content-Type.protocol' );
+ unless ( $protocol ) {
+ $RT::Logger->error( "Entity is '$type', but has no protocol defined. Skipped" );
+ return ();
+ }
+
+ if ( $type eq 'multipart/encrypted' ) {
+ unless ( $protocol eq 'application/pgp-encrypted' ) {
+ $RT::Logger->info( "Skipping protocol '$protocol', only 'application/pgp-encrypted' is supported" );
+ return ();
+ }
+ $RT::Logger->debug("Found encrypted according to RFC3156 part");
+ return {
+ Type => 'encrypted',
+ Format => 'RFC3156',
+ Top => $entity,
+ Data => $entity->parts(1),
+ Info => $entity->parts(0),
+ };
+ } else {
+ unless ( $protocol eq 'application/pgp-signature' ) {
+ $RT::Logger->info( "Skipping protocol '$protocol', only 'application/pgp-signature' is supported" );
+ return ();
+ }
+ $RT::Logger->debug("Found signed according to RFC3156 part");
+ return {
+ Type => 'signed',
+ Format => 'RFC3156',
+ Top => $entity,
+ Data => $entity->parts(0),
+ Signature => $entity->parts(1),
+ };
+ }
+ }
+
+ # attachments signed with signature in another part
+ my @file_indices;
+ foreach my $i ( 0 .. $entity->parts - 1 ) {
+ my $part = $entity->parts($i);
+
+ # we can not associate a signature within an attachment
+ # without file names
+ my $fname = $part->head->recommended_filename;
+ next unless $fname;
+
+ if ( $part->effective_type eq 'application/pgp-signature' ) {
+ push @file_indices, $i;
+ }
+ elsif ( $fname =~ /\.sig$/i && $part->effective_type eq 'application/octet-stream' ) {
+ push @file_indices, $i;
+ }
+ }
+
+ my (@res, %skip);
+ foreach my $i ( @file_indices ) {
+ my $sig_part = $entity->parts($i);
+ $skip{"$sig_part"}++;
+ my $sig_name = $sig_part->head->recommended_filename;
+ my ($file_name) = $sig_name =~ /^(.*?)(?:\.sig)?$/;
+
+ my ($data_part_idx) =
+ grep $file_name eq ($entity->parts($_)->head->recommended_filename||''),
+ grep $sig_part ne $entity->parts($_),
+ 0 .. $entity->parts - 1;
+ unless ( defined $data_part_idx ) {
+ $RT::Logger->error("Found $sig_name attachment, but didn't find $file_name");
+ next;
+ }
+ my $data_part_in = $entity->parts($data_part_idx);
+
+ $skip{"$data_part_in"}++;
+ $RT::Logger->debug("Found signature (in '$sig_name') of attachment '$file_name'");
+ push @res, {
+ Type => 'signed',
+ Format => 'Attachment',
+ Top => $entity,
+ Data => $data_part_in,
+ Signature => $sig_part,
+ };
+ }
+
+ # attachments with inline encryption
+ my @encrypted_indices =
+ grep {($entity->parts($_)->head->recommended_filename || '') =~ /\.pgp$/}
+ 0 .. $entity->parts - 1;
+
+ foreach my $i ( @encrypted_indices ) {
+ my $part = $entity->parts($i);
+ $skip{"$part"}++;
+ $RT::Logger->debug("Found encrypted attachment '". $part->head->recommended_filename ."'");
+ push @res, {
+ Type => 'encrypted',
+ Format => 'Attachment',
+ Top => $entity,
+ Data => $part,
+ };
+ }
+
+ push @res, FindProtectedParts( Entity => $_ )
+ foreach grep !$skip{"$_"}, $entity->parts;
+
+ return @res;
+}
+
+=head2 VerifyDecrypt Entity => undef, [ Detach => 1, Passphrase => undef, SetStatus => 1 ]
+
+=cut
+
+sub VerifyDecrypt {
+ my %args = ( Entity => undef, Detach => 1, SetStatus => 1, @_ );
+ my @protected = FindProtectedParts( Entity => $args{'Entity'} );
+ my @res;
+ # XXX: detaching may brake nested signatures
+ foreach my $item( grep $_->{'Type'} eq 'signed', @protected ) {
+ if ( $item->{'Format'} eq 'RFC3156' ) {
+ push @res, { VerifyRFC3156( %$item, SetStatus => $args{'SetStatus'} ) };
+ if ( $args{'Detach'} ) {
+ $item->{'Top'}->parts( [ $item->{'Data'} ] );
+ $item->{'Top'}->make_singlepart;
+ }
+ $item->{'Top'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
+ if $args{'SetStatus'};
+ } elsif ( $item->{'Format'} eq 'Inline' ) {
+ push @res, { VerifyInline( %$item ) };
+ $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
+ if $args{'SetStatus'};
+ } elsif ( $item->{'Format'} eq 'Attachment' ) {
+ push @res, { VerifyAttachment( %$item ) };
+ if ( $args{'Detach'} ) {
+ $item->{'Top'}->parts( [ grep "$_" ne $item->{'Signature'}, $item->{'Top'}->parts ] );
+ $item->{'Top'}->make_singlepart;
+ }
+ $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
+ if $args{'SetStatus'};
+ }
+ }
+ foreach my $item( grep $_->{'Type'} eq 'encrypted', @protected ) {
+ if ( $item->{'Format'} eq 'RFC3156' ) {
+ push @res, { DecryptRFC3156( %$item ) };
+ $item->{'Top'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
+ if $args{'SetStatus'};
+ } elsif ( $item->{'Format'} eq 'Inline' ) {
+ push @res, { DecryptInline( %$item ) };
+ $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
+ if $args{'SetStatus'};
+ } elsif ( $item->{'Format'} eq 'Attachment' ) {
+ push @res, { DecryptAttachment( %$item ) };
+ $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
+ if $args{'SetStatus'};
+ }
+ }
+ return @res;
+}
+
+sub VerifyInline { return DecryptInline( @_ ) }
+
+sub VerifyAttachment {
+ my %args = ( Data => undef, Signature => undef, Top => undef, @_ );
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $opt{'digest-algo'} ||= 'SHA1';
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ foreach ( $args{'Data'}, $args{'Signature'} ) {
+ next unless $_->bodyhandle->is_encoded;
+
+ require RT::EmailParser;
+ RT::EmailParser->_DecodeBody($_);
+ }
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+ $args{'Data'}->bodyhandle->print( $tmp_fh );
+ $tmp_fh->flush;
+
+ my ($handles, $handle_list) = _make_gpg_handles();
+ my %handle = %$handle_list;
+
+ my %res;
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $pid = safe_run_child { $gnupg->verify(
+ handles => $handles, command_args => [ '-', $tmp_fn ]
+ ) };
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $args{'Signature'}->bodyhandle->print( $handle{'stdin'} );
+ close $handle{'stdin'};
+ }
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $@ || $? ) {
+ $res{'message'} = $@? $@: "gpg exitted with error code ". ($? >> 8);
+ }
+ return %res;
+}
+
+sub VerifyRFC3156 {
+ my %args = ( Data => undef, Signature => undef, Top => undef, @_ );
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $opt{'digest-algo'} ||= 'SHA1';
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw:eol(CRLF?)';
+ $args{'Data'}->print( $tmp_fh );
+ $tmp_fh->flush;
+
+ my ($handles, $handle_list) = _make_gpg_handles();
+ my %handle = %$handle_list;
+
+ my %res;
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $pid = safe_run_child { $gnupg->verify(
+ handles => $handles, command_args => [ '-', $tmp_fn ]
+ ) };
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $args{'Signature'}->bodyhandle->print( $handle{'stdin'} );
+ close $handle{'stdin'};
+ }
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $@ || $? ) {
+ $res{'message'} = $@? $@: "gpg exitted with error code ". ($? >> 8);
+ }
+ return %res;
+}
+
+sub DecryptRFC3156 {
+ my %args = (
+ Data => undef,
+ Info => undef,
+ Top => undef,
+ Passphrase => undef,
+ @_
+ );
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnupGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined($args{'Passphrase'});
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ if ( $args{'Data'}->bodyhandle->is_encoded ) {
+ require RT::EmailParser;
+ RT::EmailParser->_DecodeBody($args{'Data'});
+ }
+
+ $args{'Passphrase'} = GetPassphrase()
+ unless defined $args{'Passphrase'};
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my ($handles, $handle_list) = _make_gpg_handles(stdout => $tmp_fh);
+ my %handle = %$handle_list;
+ $handles->options( 'stdout' )->{'direct'} = 1;
+
+ my %res;
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ $gnupg->passphrase( $args{'Passphrase'} );
+ my $pid = safe_run_child { $gnupg->decrypt( handles => $handles ) };
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ $args{'Data'}->bodyhandle->print( $handle{'stdin'} );
+ close $handle{'stdin'}
+ }
+
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+
+ # if the decryption is fine but the signature is bad, then without this
+ # status check we lose the decrypted text
+ # XXX: add argument to the function to control this check
+ if ( $res{'status'} !~ /DECRYPTION_OKAY/ ) {
+ if ( $@ || $? ) {
+ $res{'message'} = $@? $@: "gpg exitted with error code ". ($? >> 8);
+ return %res;
+ }
+ }
+
+ seek $tmp_fh, 0, 0;
+ my $parser = new RT::EmailParser;
+ my $decrypted = $parser->ParseMIMEEntityFromFileHandle( $tmp_fh, 0 );
+ $decrypted->{'__store_link_to_object_to_avoid_early_cleanup'} = $parser;
+ $args{'Top'}->parts( [] );
+ $args{'Top'}->add_part( $decrypted );
+ $args{'Top'}->make_singlepart;
+ return %res;
+}
+
+sub DecryptInline {
+ my %args = (
+ Data => undef,
+ Passphrase => undef,
+ @_
+ );
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnuPGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined($args{'Passphrase'});
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ if ( $args{'Data'}->bodyhandle->is_encoded ) {
+ require RT::EmailParser;
+ RT::EmailParser->_DecodeBody($args{'Data'});
+ }
+
+ $args{'Passphrase'} = GetPassphrase()
+ unless defined $args{'Passphrase'};
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my $io = $args{'Data'}->open('r');
+ unless ( $io ) {
+ die "Entity has no body, never should happen";
+ }
+
+ my ($had_literal, $in_block) = ('', 0);
+ my ($block_fh, $block_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $block_fh, ':raw';
+
+ my %res;
+ while ( defined(my $str = $io->getline) ) {
+ if ( $in_block && $str =~ /^-----END PGP (?:MESSAGE|SIGNATURE)-----/ ) {
+ print $block_fh $str;
+ $in_block--;
+ next if $in_block > 0;
+
+ seek $block_fh, 0, 0;
+
+ my ($res_fh, $res_fn);
+ ($res_fh, $res_fn, %res) = _DecryptInlineBlock(
+ %args,
+ GnuPG => $gnupg,
+ BlockHandle => $block_fh,
+ );
+ return %res unless $res_fh;
+
+ print $tmp_fh "-----BEGIN OF PGP PROTECTED PART-----\n" if $had_literal;
+ while (my $buf = <$res_fh> ) {
+ print $tmp_fh $buf;
+ }
+ print $tmp_fh "-----END OF PART-----\n" if $had_literal;
+
+ ($block_fh, $block_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $block_fh, ':raw';
+ $in_block = 0;
+ }
+ elsif ( $str =~ /^-----BEGIN PGP (SIGNED )?MESSAGE-----/ ) {
+ $in_block++;
+ print $block_fh $str;
+ }
+ elsif ( $in_block ) {
+ print $block_fh $str;
+ }
+ else {
+ print $tmp_fh $str;
+ $had_literal = 1 if /\S/s;
+ }
+ }
+ $io->close;
+
+ seek $tmp_fh, 0, 0;
+ $args{'Data'}->bodyhandle( new MIME::Body::File $tmp_fn );
+ $args{'Data'}->{'__store_tmp_handle_to_avoid_early_cleanup'} = $tmp_fh;
+ return %res;
+}
+
+sub _DecryptInlineBlock {
+ my %args = (
+ GnuPG => undef,
+ BlockHandle => undef,
+ Passphrase => undef,
+ @_
+ );
+ my $gnupg = $args{'GnuPG'};
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my ($handles, $handle_list) = _make_gpg_handles(
+ stdin => $args{'BlockHandle'},
+ stdout => $tmp_fh);
+ my %handle = %$handle_list;
+ $handles->options( 'stdout' )->{'direct'} = 1;
+ $handles->options( 'stdin' )->{'direct'} = 1;
+
+ my %res;
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ $gnupg->passphrase( $args{'Passphrase'} );
+ my $pid = safe_run_child { $gnupg->decrypt( handles => $handles ) };
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+
+ # if the decryption is fine but the signature is bad, then without this
+ # status check we lose the decrypted text
+ # XXX: add argument to the function to control this check
+ if ( $res{'status'} !~ /DECRYPTION_OKAY/ ) {
+ if ( $@ || $? ) {
+ $res{'message'} = $@? $@: "gpg exitted with error code ". ($? >> 8);
+ return (undef, undef, %res);
+ }
+ }
+
+ seek $tmp_fh, 0, 0;
+ return ($tmp_fh, $tmp_fn, %res);
+}
+
+sub DecryptAttachment {
+ my %args = (
+ Top => undef,
+ Data => undef,
+ Passphrase => undef,
+ @_
+ );
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnuPGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined($args{'Passphrase'});
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ if ( $args{'Data'}->bodyhandle->is_encoded ) {
+ require RT::EmailParser;
+ RT::EmailParser->_DecodeBody($args{'Data'});
+ }
+
+ $args{'Passphrase'} = GetPassphrase()
+ unless defined $args{'Passphrase'};
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+ $args{'Data'}->bodyhandle->print( $tmp_fh );
+ seek $tmp_fh, 0, 0;
+
+ my ($res_fh, $res_fn, %res) = _DecryptInlineBlock(
+ %args,
+ GnuPG => $gnupg,
+ BlockHandle => $tmp_fh,
+ );
+ return %res unless $res_fh;
+
+ $args{'Data'}->bodyhandle( new MIME::Body::File $res_fn );
+ $args{'Data'}->{'__store_tmp_handle_to_avoid_early_cleanup'} = $res_fh;
+
+ my $filename = $args{'Data'}->head->recommended_filename;
+ $filename =~ s/\.pgp$//i;
+ $args{'Data'}->head->mime_attr( $_ => $filename )
+ foreach (qw(Content-Type.name Content-Disposition.filename));
+
+ return %res;
+}
+
+sub DecryptContent {
+ my %args = (
+ Content => undef,
+ Passphrase => undef,
+ @_
+ );
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+
+ # handling passphrase in GnupGOptions
+ $args{'Passphrase'} = delete $opt{'passphrase'}
+ if !defined($args{'Passphrase'});
+
+ $opt{'digest-algo'} ||= 'SHA1';
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ $args{'Passphrase'} = GetPassphrase()
+ unless defined $args{'Passphrase'};
+
+ my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( UNLINK => 1 );
+ binmode $tmp_fh, ':raw';
+
+ my ($handles, $handle_list) = _make_gpg_handles(
+ stdout => $tmp_fh);
+ my %handle = %$handle_list;
+ $handles->options( 'stdout' )->{'direct'} = 1;
+
+ my %res;
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ $gnupg->passphrase( $args{'Passphrase'} );
+ my $pid = safe_run_child { $gnupg->decrypt( handles => $handles ) };
+ {
+ local $SIG{'PIPE'} = 'IGNORE';
+ print { $handle{'stdin'} } ${ $args{'Content'} };
+ close $handle{'stdin'};
+ }
+
+ waitpid $pid, 0;
+ };
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+
+ # if the decryption is fine but the signature is bad, then without this
+ # status check we lose the decrypted text
+ # XXX: add argument to the function to control this check
+ if ( $res{'status'} !~ /DECRYPTION_OKAY/ ) {
+ if ( $@ || $? ) {
+ $res{'message'} = $@? $@: "gpg exitted with error code ". ($? >> 8);
+ return %res;
+ }
+ }
+
+ ${ $args{'Content'} } = '';
+ seek $tmp_fh, 0, 0;
+ while (1) {
+ my $status = read $tmp_fh, my $buf, 4*1024;
+ unless ( defined $status ) {
+ $RT::Logger->crit( "couldn't read message: $!" );
+ } elsif ( !$status ) {
+ last;
+ }
+ ${ $args{'Content'} } .= $buf;
+ }
+
+ return %res;
+}
+
+=head2 GetPassphrase [ Address => undef ]
+
+Returns passphrase, called whenever it's required with Address as a named argument.
+
+=cut
+
+sub GetPassphrase {
+ my %args = ( Address => undef, @_ );
+ return 'test';
+}
+
+=head2 ParseStatus
+
+Takes a string containing output of gnupg status stream. Parses it and returns
+array of hashes. Each element of array is a hash ref and represents line or
+group of lines in the status message.
+
+All hashes have Operation, Status and Message elements.
+
+=over
+
+=item Operation
+
+Classification of operations gnupg performs. Now we have support
+for Sign, Encrypt, Decrypt, Verify, PassphraseCheck, RecipientsCheck and Data
+values.
+
+=item Status
+
+Informs about success. Value is 'DONE' on success, other values means that
+an operation failed, for example 'ERROR', 'BAD', 'MISSING' and may be other.
+
+=item Message
+
+User friendly message.
+
+=back
+
+This parser is based on information from GnuPG distribution, see also
+F<docs/design_docs/gnupg_details_on_output_formats> in the RT distribution.
+
+=cut
+
+my %REASON_CODE_TO_TEXT = (
+ NODATA => {
+ 1 => "No armored data",
+ 2 => "Expected a packet, but did not found one",
+ 3 => "Invalid packet found",
+ 4 => "Signature expected, but not found",
+ },
+ INV_RECP => {
+ 0 => "No specific reason given",
+ 1 => "Not Found",
+ 2 => "Ambigious specification",
+ 3 => "Wrong key usage",
+ 4 => "Key revoked",
+ 5 => "Key expired",
+ 6 => "No CRL known",
+ 7 => "CRL too old",
+ 8 => "Policy mismatch",
+ 9 => "Not a secret key",
+ 10 => "Key not trusted",
+ },
+ ERRSIG => {
+ 0 => 'not specified',
+ 4 => 'unknown algorithm',
+ 9 => 'missing public key',
+ },
+);
+
+sub ReasonCodeToText {
+ my $keyword = shift;
+ my $code = shift;
+ return $REASON_CODE_TO_TEXT{ $keyword }{ $code }
+ if exists $REASON_CODE_TO_TEXT{ $keyword }{ $code };
+ return 'unknown';
+}
+
+my %simple_keyword = (
+ NO_RECP => {
+ Operation => 'RecipientsCheck',
+ Status => 'ERROR',
+ Message => 'No recipients',
+ },
+ UNEXPECTED => {
+ Operation => 'Data',
+ Status => 'ERROR',
+ Message => 'Unexpected data has been encountered',
+ },
+ BADARMOR => {
+ Operation => 'Data',
+ Status => 'ERROR',
+ Message => 'The ASCII armor is corrupted',
+ },
+);
+
+# keywords we parse
+my %parse_keyword = map { $_ => 1 } qw(
+ USERID_HINT
+ SIG_CREATED GOODSIG BADSIG ERRSIG
+ END_ENCRYPTION
+ DECRYPTION_FAILED DECRYPTION_OKAY
+ BAD_PASSPHRASE GOOD_PASSPHRASE
+ NO_SECKEY NO_PUBKEY
+ NO_RECP INV_RECP NODATA UNEXPECTED
+);
+
+# keywords we ignore without any messages as we parse them using other
+# keywords as starting point or just ignore as they are useless for us
+my %ignore_keyword = map { $_ => 1 } qw(
+ NEED_PASSPHRASE MISSING_PASSPHRASE BEGIN_SIGNING PLAINTEXT PLAINTEXT_LENGTH
+ BEGIN_ENCRYPTION SIG_ID VALIDSIG
+ ENC_TO BEGIN_DECRYPTION END_DECRYPTION GOODMDC
+ TRUST_UNDEFINED TRUST_NEVER TRUST_MARGINAL TRUST_FULLY TRUST_ULTIMATE
+);
+
+sub ParseStatus {
+ my $status = shift;
+ return () unless $status;
+
+ my @status;
+ while ( $status =~ /\[GNUPG:\]\s*(.*?)(?=\[GNUPG:\]|\z)/igms ) {
+ push @status, $1; $status[-1] =~ s/\s+/ /g; $status[-1] =~ s/\s+$//;
+ }
+ $status = join "\n", @status;
+ study $status;
+
+ my @res;
+ my (%user_hint, $latest_user_main_key);
+ for ( my $i = 0; $i < @status; $i++ ) {
+ my $line = $status[$i];
+ my ($keyword, $args) = ($line =~ /^(\S+)\s*(.*)$/s);
+ if ( $simple_keyword{ $keyword } ) {
+ push @res, $simple_keyword{ $keyword };
+ $res[-1]->{'Keyword'} = $keyword;
+ next;
+ }
+ unless ( $parse_keyword{ $keyword } ) {
+ $RT::Logger->warning("Skipped $keyword") unless $ignore_keyword{ $keyword };
+ next;
+ }
+
+ if ( $keyword eq 'USERID_HINT' ) {
+ my %tmp = _ParseUserHint($status, $line);
+ $latest_user_main_key = $tmp{'MainKey'};
+ if ( $user_hint{ $tmp{'MainKey'} } ) {
+ while ( my ($k, $v) = each %tmp ) {
+ $user_hint{ $tmp{'MainKey'} }->{$k} = $v;
+ }
+ } else {
+ $user_hint{ $tmp{'MainKey'} } = \%tmp;
+ }
+ next;
+ }
+ elsif ( $keyword eq 'BAD_PASSPHRASE' || $keyword eq 'GOOD_PASSPHRASE' ) {
+ my $key_id = $args;
+ my %res = (
+ Operation => 'PassphraseCheck',
+ Status => $keyword eq 'BAD_PASSPHRASE'? 'BAD' : 'DONE',
+ Key => $key_id,
+ );
+ $res{'Status'} = 'MISSING' if $status[ $i - 1 ] =~ /^MISSING_PASSPHRASE/;
+ foreach my $line ( reverse @status[ 0 .. $i-1 ] ) {
+ next unless $line =~ /^NEED_PASSPHRASE\s+(\S+)\s+(\S+)\s+(\S+)/;
+ next if $key_id && $2 ne $key_id;
+ @res{'MainKey', 'Key', 'KeyType'} = ($1, $2, $3);
+ last;
+ }
+ $res{'Message'} = ucfirst( lc( $res{'Status'} eq 'DONE'? 'GOOD': $res{'Status'} ) ) .' passphrase';
+ $res{'User'} = ( $user_hint{ $res{'MainKey'} } ||= {} ) if $res{'MainKey'};
+ if ( exists $res{'User'}->{'EmailAddress'} ) {
+ $res{'Message'} .= ' for '. $res{'User'}->{'EmailAddress'};
+ } else {
+ $res{'Message'} .= " for '0x$key_id'";
+ }
+ push @res, \%res;
+ }
+ elsif ( $keyword eq 'END_ENCRYPTION' ) {
+ my %res = (
+ Operation => 'Encrypt',
+ Status => 'DONE',
+ Message => 'Data has been encrypted',
+ );
+ foreach my $line ( reverse @status[ 0 .. $i-1 ] ) {
+ next unless $line =~ /^BEGIN_ENCRYPTION\s+(\S+)\s+(\S+)/;
+ @res{'MdcMethod', 'SymAlgo'} = ($1, $2);
+ last;
+ }
+ push @res, \%res;
+ }
+ elsif ( $keyword eq 'DECRYPTION_FAILED' || $keyword eq 'DECRYPTION_OKAY' ) {
+ my %res = ( Operation => 'Decrypt' );
+ @res{'Status', 'Message'} =
+ $keyword eq 'DECRYPTION_FAILED'
+ ? ('ERROR', 'Decryption failed')
+ : ('DONE', 'Decryption process succeeded');
+
+ foreach my $line ( reverse @status[ 0 .. $i-1 ] ) {
+ next unless $line =~ /^ENC_TO\s+(\S+)\s+(\S+)\s+(\S+)/;
+ my ($key, $alg, $key_length) = ($1, $2, $3);
+
+ my %encrypted_to = (
+ Message => "The message is encrypted to '0x$key'",
+ User => ( $user_hint{ $key } ||= {} ),
+ Key => $key,
+ KeyLength => $key_length,
+ Algorithm => $alg,
+ );
+
+ push @{ $res{'EncryptedTo'} ||= [] }, \%encrypted_to;
+ }
+
+ push @res, \%res;
+ }
+ elsif ( $keyword eq 'NO_SECKEY' || $keyword eq 'NO_PUBKEY' ) {
+ my ($key) = split /\s+/, $args;
+ my $type = $keyword eq 'NO_SECKEY'? 'secret': 'public';
+ my %res = (
+ Operation => 'KeyCheck',
+ Status => 'MISSING',
+ Message => ucfirst( $type ) ." key '0x$key' is not available",
+ Key => $key,
+ KeyType => $type,
+ );
+ $res{'User'} = ( $user_hint{ $key } ||= {} );
+ $res{'User'}{ ucfirst( $type ). 'KeyMissing' } = 1;
+ push @res, \%res;
+ }
+ # GOODSIG, BADSIG, VALIDSIG, TRUST_*
+ elsif ( $keyword eq 'GOODSIG' ) {
+ my %res = (
+ Operation => 'Verify',
+ Status => 'DONE',
+ Message => 'The signature is good',
+ );
+ @res{qw(Key UserString)} = split /\s+/, $args, 2;
+ $res{'Message'} .= ', signed by '. $res{'UserString'};
+
+ foreach my $line ( @status[ $i .. $#status ] ) {
+ next unless $line =~ /^TRUST_(\S+)/;
+ $res{'Trust'} = $1;
+ last;
+ }
+ $res{'Message'} .= ', trust level is '. lc( $res{'Trust'} || 'unknown');
+
+ foreach my $line ( @status[ $i .. $#status ] ) {
+ next unless $line =~ /^VALIDSIG\s+(.*)/;
+ @res{ qw(
+ Fingerprint
+ CreationDate
+ Timestamp
+ ExpireTimestamp
+ Version
+ Reserved
+ PubkeyAlgo
+ HashAlgo
+ Class
+ PKFingerprint
+ Other
+ ) } = split /\s+/, $1, 10;
+ last;
+ }
+ push @res, \%res;
+ }
+ elsif ( $keyword eq 'BADSIG' ) {
+ my %res = (
+ Operation => 'Verify',
+ Status => 'BAD',
+ Message => 'The signature has not been verified okay',
+ );
+ @res{qw(Key UserString)} = split /\s+/, $args, 2;
+ push @res, \%res;
+ }
+ elsif ( $keyword eq 'ERRSIG' ) {
+ my %res = (
+ Operation => 'Verify',
+ Status => 'ERROR',
+ Message => 'Not possible to check the signature',
+ );
+ @res{qw(Key PubkeyAlgo HashAlgo Class Timestamp ReasonCode Other)}
+ = split /\s+/, $args, 7;
+
+ $res{'Reason'} = ReasonCodeToText( $keyword, $res{'ReasonCode'} );
+ $res{'Message'} .= ", the reason is ". $res{'Reason'};
+
+ push @res, \%res;
+ }
+ elsif ( $keyword eq 'SIG_CREATED' ) {
+ # SIG_CREATED <type> <pubkey algo> <hash algo> <class> <timestamp> <key fpr>
+ my @props = split /\s+/, $args;
+ push @res, {
+ Operation => 'Sign',
+ Status => 'DONE',
+ Message => "Signed message",
+ Type => $props[0],
+ PubKeyAlgo => $props[1],
+ HashKeyAlgo => $props[2],
+ Class => $props[3],
+ Timestamp => $props[4],
+ KeyFingerprint => $props[5],
+ User => $user_hint{ $latest_user_main_key },
+ };
+ $res[-1]->{Message} .= ' by '. $user_hint{ $latest_user_main_key }->{'EmailAddress'}
+ if $user_hint{ $latest_user_main_key };
+ }
+ elsif ( $keyword eq 'INV_RECP' ) {
+ my ($rcode, $recipient) = split /\s+/, $args, 2;
+ my $reason = ReasonCodeToText( $keyword, $rcode );
+ push @res, {
+ Operation => 'RecipientsCheck',
+ Status => 'ERROR',
+ Message => "Recipient '$recipient' is unusable, the reason is '$reason'",
+ Recipient => $recipient,
+ ReasonCode => $rcode,
+ Reason => $reason,
+ };
+ }
+ elsif ( $keyword eq 'NODATA' ) {
+ my $rcode = (split /\s+/, $args)[0];
+ my $reason = ReasonCodeToText( $keyword, $rcode );
+ push @res, {
+ Operation => 'Data',
+ Status => 'ERROR',
+ Message => "No data has been found. The reason is '$reason'",
+ ReasonCode => $rcode,
+ Reason => $reason,
+ };
+ }
+ else {
+ $RT::Logger->warning("Keyword $keyword is unknown");
+ next;
+ }
+ $res[-1]{'Keyword'} = $keyword if @res && !$res[-1]{'Keyword'};
+ }
+ return @res;
+}
+
+sub _ParseUserHint {
+ my ($status, $hint) = (@_);
+ my ($main_key_id, $user_str) = ($hint =~ /^USERID_HINT\s+(\S+)\s+(.*)$/);
+ return () unless $main_key_id;
+ return (
+ MainKey => $main_key_id,
+ String => $user_str,
+ EmailAddress => (map $_->address, Email::Address->parse( $user_str ))[0],
+ );
+}
+
+sub _PrepareGnuPGOptions {
+ my %opt = @_;
+ my %res = map { lc $_ => $opt{ $_ } } grep $supported_opt{ lc $_ }, keys %opt;
+ $res{'extra_args'} ||= [];
+ foreach my $o ( grep !$supported_opt{ lc $_ }, keys %opt ) {
+ push @{ $res{'extra_args'} }, '--'. lc $o;
+ push @{ $res{'extra_args'} }, $opt{ $o }
+ if defined $opt{ $o };
+ }
+ return %res;
+}
+
+{ my %key;
+# no args -> clear
+# one arg -> return preferred key
+# many -> set
+sub UseKeyForEncryption {
+ unless ( @_ ) {
+ %key = ();
+ } elsif ( @_ > 1 ) {
+ %key = (%key, @_);
+ $key{ lc($_) } = delete $key{ $_ } foreach grep lc ne $_, keys %key;
+ } else {
+ return $key{ $_[0] };
+ }
+ return ();
+} }
+
+=head2 UseKeyForSigning
+
+Returns or sets identifier of the key that should be used for signing.
+
+Returns the current value when called without arguments.
+
+Sets new value when called with one argument and unsets if it's undef.
+
+=cut
+
+{ my $key;
+sub UseKeyForSigning {
+ if ( @_ ) {
+ $key = $_[0];
+ }
+ return $key;
+} }
+
+=head2 GetKeysForEncryption
+
+Takes identifier and returns keys suitable for encryption.
+
+B<Note> that keys for which trust level is not set are
+also listed.
+
+=cut
+
+sub GetKeysForEncryption {
+ my $key_id = shift;
+ my %res = GetKeysInfo( $key_id, 'public', @_ );
+ return %res if $res{'exit_code'};
+ return %res unless $res{'info'};
+
+ foreach my $key ( splice @{ $res{'info'} } ) {
+ # skip disabled keys
+ next if $key->{'Capabilities'} =~ /D/;
+ # skip keys not suitable for encryption
+ next unless $key->{'Capabilities'} =~ /e/i;
+ # skip disabled, expired, revoke and keys with no trust,
+ # but leave keys with unknown trust level
+ next if $key->{'TrustLevel'} < 0;
+
+ push @{ $res{'info'} }, $key;
+ }
+ delete $res{'info'} unless @{ $res{'info'} };
+ return %res;
+}
+
+sub GetKeysForSigning {
+ my $key_id = shift;
+ return GetKeysInfo( $key_id, 'private', @_ );
+}
+
+sub CheckRecipients {
+ my @recipients = (@_);
+
+ my ($status, @issues) = (1, ());
+
+ my %seen;
+ foreach my $address ( grep !$seen{ lc $_ }++, map $_->address, @recipients ) {
+ my %res = GetKeysForEncryption( $address );
+ if ( $res{'info'} && @{ $res{'info'} } == 1 && $res{'info'}[0]{'TrustLevel'} > 0 ) {
+ # good, one suitable and trusted key
+ next;
+ }
+ my $user = RT::User->new( $RT::SystemUser );
+ $user->LoadByEmail( $address );
+ # it's possible that we have no User record with the email
+ $user = undef unless $user->id;
+
+ if ( my $fpr = UseKeyForEncryption( $address ) ) {
+ if ( $res{'info'} && @{ $res{'info'} } ) {
+ next if
+ grep lc $_->{'Fingerprint'} eq lc $fpr,
+ grep $_->{'TrustLevel'} > 0,
+ @{ $res{'info'} };
+ }
+
+ $status = 0;
+ my %issue = (
+ EmailAddress => $address,
+ $user? (User => $user) : (),
+ Keys => undef,
+ );
+ $issue{'Message'} = "Selected key either is not trusted or doesn't exist anymore."; #loc
+ push @issues, \%issue;
+ next;
+ }
+
+ my $prefered_key;
+ $prefered_key = $user->PreferredKey if $user;
+ #XXX: prefered key is not yet implemented...
+
+ # classify errors
+ $status = 0;
+ my %issue = (
+ EmailAddress => $address,
+ $user? (User => $user) : (),
+ Keys => undef,
+ );
+
+ unless ( $res{'info'} && @{ $res{'info'} } ) {
+ # no key
+ $issue{'Message'} = "There is no key suitable for encryption."; #loc
+ }
+ elsif ( @{ $res{'info'} } == 1 && !$res{'info'}[0]{'TrustLevel'} ) {
+ # trust is not set
+ $issue{'Message'} = "There is one suitable key, but trust level is not set."; #loc
+ }
+ else {
+ # multiple keys
+ $issue{'Message'} = "There are several keys suitable for encryption."; #loc
+ }
+ push @issues, \%issue;
+ }
+ return ($status, @issues);
+}
+
+sub GetPublicKeyInfo {
+ return GetKeyInfo( shift, 'public', @_ );
+}
+
+sub GetPrivateKeyInfo {
+ return GetKeyInfo( shift, 'private', @_ );
+}
+
+sub GetKeyInfo {
+ my %res = GetKeysInfo(@_);
+ $res{'info'} = $res{'info'}->[0];
+ return %res;
+}
+
+sub GetKeysInfo {
+ my $email = shift;
+ my $type = shift || 'public';
+ my $force = shift;
+
+ unless ( $email ) {
+ return (exit_code => 0) unless $force;
+ }
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $opt{'digest-algo'} ||= 'SHA1';
+ $opt{'with-colons'} = undef; # parseable format
+ $opt{'fingerprint'} = undef; # show fingerprint
+ $opt{'fixed-list-mode'} = undef; # don't merge uid with keys
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ armor => 1,
+ meta_interactive => 0,
+ );
+
+ my %res;
+
+ my ($handles, $handle_list) = _make_gpg_handles();
+ my %handle = %$handle_list;
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $method = $type eq 'private'? 'list_secret_keys': 'list_public_keys';
+ my $pid = safe_run_child { $gnupg->$method( handles => $handles, $email? (command_args => $email) : () ) };
+ close $handle{'stdin'};
+ waitpid $pid, 0;
+ };
+
+ my @info = readline $handle{'stdout'};
+ close $handle{'stdout'};
+
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $@ || $? ) {
+ $res{'message'} = $@? $@: "gpg exitted with error code ". ($? >> 8);
+ return %res;
+ }
+
+ @info = ParseKeysInfo( @info );
+ $res{'info'} = \@info;
+ return %res;
+}
+
+sub ParseKeysInfo {
+ my @lines = @_;
+
+ my %gpg_opt = RT->Config->Get('GnuPGOptions');
+
+ my @res = ();
+ foreach my $line( @lines ) {
+ chomp $line;
+ my $tag;
+ ($tag, $line) = split /:/, $line, 2;
+ if ( $tag eq 'pub' ) {
+ my %info;
+ @info{ qw(
+ TrustChar KeyLength Algorithm Key
+ Created Expire Empty OwnerTrustChar
+ Empty Empty Capabilities Other
+ ) } = split /:/, $line, 12;
+
+ # workaround gnupg's wierd behaviour, --list-keys command report calculated trust levels
+ # for any model except 'always', so you can change models and see changes, but not for 'always'
+ # we try to handle it in a simple way - we set ultimate trust for any key with trust
+ # level >= 0 if trust model is 'always'
+ my $always_trust;
+ $always_trust = 1 if exists $gpg_opt{'always-trust'};
+ $always_trust = 1 if exists $gpg_opt{'trust-model'} && $gpg_opt{'trust-model'} eq 'always';
+ @info{qw(Trust TrustTerse TrustLevel)} =
+ _ConvertTrustChar( $info{'TrustChar'} );
+ if ( $always_trust && $info{'TrustLevel'} >= 0 ) {
+ @info{qw(Trust TrustTerse TrustLevel)} =
+ _ConvertTrustChar( 'u' );
+ }
+
+ @info{qw(OwnerTrust OwnerTrustTerse OwnerTrustLevel)} =
+ _ConvertTrustChar( $info{'OwnerTrustChar'} );
+ $info{ $_ } = _ParseDate( $info{ $_ } )
+ foreach qw(Created Expire);
+ push @res, \%info;
+ }
+ elsif ( $tag eq 'sec' ) {
+ my %info;
+ @info{ qw(
+ Empty KeyLength Algorithm Key
+ Created Expire Empty OwnerTrustChar
+ Empty Empty Capabilities Other
+ ) } = split /:/, $line, 12;
+ @info{qw(OwnerTrust OwnerTrustTerse OwnerTrustLevel)} =
+ _ConvertTrustChar( $info{'OwnerTrustChar'} );
+ $info{ $_ } = _ParseDate( $info{ $_ } )
+ foreach qw(Created Expire);
+ push @res, \%info;
+ }
+ elsif ( $tag eq 'uid' ) {
+ my %info;
+ @info{ qw(Trust Created Expire String) }
+ = (split /:/, $line)[0,4,5,8];
+ $info{ $_ } = _ParseDate( $info{ $_ } )
+ foreach qw(Created Expire);
+ push @{ $res[-1]{'User'} ||= [] }, \%info;
+ }
+ elsif ( $tag eq 'fpr' ) {
+ $res[-1]{'Fingerprint'} = (split /:/, $line, 10)[8];
+ }
+ }
+ return @res;
+}
+
+{
+ my %verbose = (
+ # deprecated
+ d => [
+ "The key has been disabled", #loc
+ "key disabled", #loc
+ "-2"
+ ],
+
+ r => [
+ "The key has been revoked", #loc
+ "key revoked", #loc
+ -3,
+ ],
+
+ e => [ "The key has expired", #loc
+ "key expired", #loc
+ '-4',
+ ],
+
+ n => [ "Don't trust this key at all", #loc
+ 'none', #loc
+ -1,
+ ],
+
+ #gpupg docs says that '-' and 'q' may safely be treated as the same value
+ '-' => [
+ 'Unknown (no trust value assigned)', #loc
+ 'not set',
+ 0,
+ ],
+ q => [
+ 'Unknown (no trust value assigned)', #loc
+ 'not set',
+ 0,
+ ],
+ o => [
+ 'Unknown (this value is new to the system)', #loc
+ 'unknown',
+ 0,
+ ],
+
+ m => [
+ "There is marginal trust in this key", #loc
+ 'marginal', #loc
+ 1,
+ ],
+ f => [
+ "The key is fully trusted", #loc
+ 'full', #loc
+ 2,
+ ],
+ u => [
+ "The key is ultimately trusted", #loc
+ 'ultimate', #loc
+ 3,
+ ],
+ );
+
+ sub _ConvertTrustChar {
+ my $value = shift;
+ return @{ $verbose{'-'} } unless $value;
+ $value = substr $value, 0, 1;
+ return @{ $verbose{ $value } || $verbose{'o'} };
+ }
+}
+
+sub _ParseDate {
+ my $value = shift;
+ # never
+ return $value unless $value;
+
+ require RT::Date;
+ my $obj = RT::Date->new( $RT::SystemUser );
+ # unix time
+ if ( $value =~ /^\d+$/ ) {
+ $obj->Set( Value => $value );
+ } else {
+ $obj->Set( Format => 'unknown', Value => $value, Timezone => 'utc' );
+ }
+ return $obj;
+}
+
+sub DeleteKey {
+ my $key = shift;
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ my ($handles, $handle_list) = _make_gpg_handles();
+ my %handle = %$handle_list;
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ local @ENV{'LANG', 'LC_ALL'} = ('C', 'C');
+ my $pid = safe_run_child { $gnupg->wrap_call(
+ handles => $handles,
+ commands => ['--delete-secret-and-public-key'],
+ command_args => [$key],
+ ) };
+ close $handle{'stdin'};
+ while ( my $str = readline $handle{'status'} ) {
+ if ( $str =~ /^\[GNUPG:\]\s*GET_BOOL delete_key\..*/ ) {
+ print { $handle{'command'} } "y\n";
+ }
+ }
+ waitpid $pid, 0;
+ };
+ my $err = $@;
+ close $handle{'stdout'};
+
+ my %res;
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ }
+ return %res;
+}
+
+sub ImportKey {
+ my $key = shift;
+
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ my ($handles, $handle_list) = _make_gpg_handles();
+ my %handle = %$handle_list;
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ local @ENV{'LANG', 'LC_ALL'} = ('C', 'C');
+ my $pid = safe_run_child { $gnupg->wrap_call(
+ handles => $handles,
+ commands => ['--import'],
+ ) };
+ print { $handle{'stdin'} } $key;
+ close $handle{'stdin'};
+ waitpid $pid, 0;
+ };
+ my $err = $@;
+ close $handle{'stdout'};
+
+ my %res;
+ $res{'exit_code'} = $?;
+ foreach ( qw(stderr logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'stderr'} ) if $res{'stderr'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ }
+ return %res;
+}
+
+=head2 KEY
+
+Signs a small message with the key, to make sure the key exists and
+we have a useable passphrase. The first argument MUST be a key identifier
+of the signer: either email address, key id or finger print.
+
+Returns a true value if all went well.
+
+=cut
+
+sub DrySign {
+ my $from = shift;
+
+ my $mime = MIME::Entity->build(
+ Type => "text/plain",
+ From => 'nobody@localhost',
+ To => 'nobody@localhost',
+ Subject => "dry sign",
+ Data => ['t'],
+ );
+
+ my %res = SignEncrypt(
+ Sign => 1,
+ Encrypt => 0,
+ Entity => $mime,
+ Signer => $from,
+ );
+
+ return $res{exit_code} == 0;
+}
+
+1;
+
+=head2 Probe
+
+This routine returns true if RT's GnuPG support is configured and working
+properly (and false otherwise).
+
+
+=cut
+
+
+sub Probe {
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $gnupg->options->hash_init(
+ _PrepareGnuPGOptions( %opt ),
+ armor => 1,
+ meta_interactive => 0,
+ );
+
+ my ($handles, $handle_list) = _make_gpg_handles();
+ my %handle = %$handle_list;
+
+ local $@;
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ my $pid = safe_run_child { $gnupg->wrap_call( commands => ['--version' ], handles => $handles ) };
+ close $handle{'stdin'};
+ waitpid $pid, 0;
+ };
+ if ( $@ ) {
+ $RT::Logger->debug(
+ "Probe for GPG failed."
+ ." Couldn't run `gpg --version`: ". $@
+ );
+ return 0;
+ }
+
+# on some systems gpg exits with code 2, but still 100% functional,
+# it's general error system error or incorrect command, command is correct,
+# but there is no way to get actuall error
+ if ( $? && ($? >> 8) != 2 ) {
+ $RT::Logger->debug(
+ "Probe for GPG failed."
+ ." Process exitted with code ". ($? >> 8)
+ . ($? & 127 ? (" as recieved signal ". ($? & 127)) : '')
+ );
+ return 0;
+ }
+ return 1;
+}
+
+
+sub _make_gpg_handles {
+ my %handle_map = (
+ stdin => IO::Handle->new(),
+ stdout => IO::Handle->new(),
+ stderr => IO::Handle->new(),
+ logger => IO::Handle->new(),
+ status => IO::Handle->new(),
+ command => IO::Handle->new(),
+
+
+ @_);
+
+ my $handles = GnuPG::Handles->new(%handle_map);
+ return ($handles, \%handle_map);
+}
+
+eval "require RT::Crypt::GnuPG_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Crypt/GnuPG_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Crypt::GnuPG_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Crypt/GnuPG_Local.pm}) {
+ die $@;
+};
+
+# helper package to avoid using temp file
+package IO::Handle::CRLF;
+
+use base qw(IO::Handle);
+
+sub print {
+ my ($self, @args) = (@_);
+ s/\r*\n/\x0D\x0A/g foreach @args;
+ return $self->SUPER::print( @args );
+}
+
+1;
diff --git a/rt/lib/RT/CurrentUser.pm b/rt/lib/RT/CurrentUser.pm
index 3193034..b674d4e 100755
--- a/rt/lib/RT/CurrentUser.pm
+++ b/rt/lib/RT/CurrentUser.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,39 +45,55 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::CurrentUser - an RT object representing the current user
=head1 SYNOPSIS
- use RT::CurrentUser
+ use RT::CurrentUser;
+
+ # laod
+ my $current_user = new RT::CurrentUser;
+ $current_user->Load(...);
+ # or
+ my $current_user = RT::CurrentUser->new( $user_obj );
+ # or
+ my $current_user = RT::CurrentUser->new( $address || $name || $id );
+
+ # manipulation
+ $current_user->UserObj->SetName('new_name');
=head1 DESCRIPTION
+B<Read-only> subclass of L<RT::User> class. Used to define the current
+user. You should pass an instance of this class to constructors of
+many RT classes, then the instance used to check ACLs and localize
+strings.
=head1 METHODS
+See also L<RT::User> for a list of methods this class has.
-=begin testing
+=head2 new
-ok (require RT::CurrentUser);
-
-=end testing
+Returns new CurrentUser object. Unlike all other classes of RT it takes
+either subclass of C<RT::User> class object or scalar value that is
+passed to Load method.
=cut
package RT::CurrentUser;
-use RT::Record;
use RT::I18N;
use strict;
-use base qw/RT::Record/;
+use warnings;
-# {{{ sub _Init
+use base qw/RT::User/;
#The basic idea here is that $self->CurrentUser is always supposed
# to be a CurrentUser object. but that's hard to do when we're trying to load
@@ -89,107 +105,69 @@ sub _Init {
$self->{'table'} = "Users";
- if ( defined($User) ) {
-
- if ( UNIVERSAL::isa( $User, 'RT::User' )
- || UNIVERSAL::isa( $User, 'RT::CurrentUser' ) )
- {
- $self->Load( $User->id );
+ if ( defined $User ) {
+ if ( UNIVERSAL::isa( $User, 'RT::User' ) ) {
+ $self->LoadById( $User->id );
}
- elsif ( ref($User) ) {
+ elsif ( ref $User ) {
$RT::Logger->crit(
"RT::CurrentUser->new() called with a bogus argument: $User");
}
else {
- $self->Load($User);
+ $self->Load( $User );
}
}
- $self->_BuildTableAttributes();
+ $self->_BuildTableAttributes;
}
-# }}}
-# {{{ sub Create
+=head2 Create, Delete and Set*
+
+As stated above it's a subclass of L<RT::User>, but this class is read-only
+and calls to these methods are illegal. Return 'permission denied' message
+and log an error.
+
+=cut
sub Create {
my $self = shift;
+ $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation');
return (0, $self->loc('Permission Denied'));
}
-# }}}
-
-# {{{ sub Delete
-
sub Delete {
my $self = shift;
+ $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation');
return (0, $self->loc('Permission Denied'));
}
-# }}}
-
-# {{{ sub UserObj
-
-=head2 UserObj
-
- Returns the RT::User object associated with this CurrentUser object.
-
-=cut
-
-sub UserObj {
+sub _Set {
my $self = shift;
-
- use RT::User;
- my $user = RT::User->new($self);
-
- unless ($user->Load($self->Id)) {
- $RT::Logger->err($self->loc("Couldn't load [_1] from the users database.\n", $self->Id));
- }
- return ($user);
+ $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation');
+ return (0, $self->loc('Permission Denied'));
}
-# }}}
-
-# {{{ sub PrincipalObj
-=head2 PrincipalObj
+=head2 UserObj
- Returns this user's principal object. this is just a helper routine for
- $self->UserObj->PrincipalObj
+Returns the L<RT::User> object associated with this CurrentUser object.
=cut
-sub PrincipalObj {
+sub UserObj {
my $self = shift;
- return($self->UserObj->PrincipalObj);
-}
-
-# }}}
-
-
-# {{{ sub PrincipalId
-
-=head2 PrincipalId
-
- Returns this user's principal Id. this is just a helper routine for
- $self->UserObj->PrincipalId
-
-=cut
-
-sub PrincipalId {
- my $self = shift;
- return($self->UserObj->PrincipalId);
+ my $user = RT::User->new( $self );
+ unless ( $user->LoadById( $self->Id ) ) {
+ $RT::Logger->error(
+ $self->loc("Couldn't load [_1] from the users database.\n", $self->Id)
+ );
+ }
+ return $user;
}
-
-# }}}
-
-
-# {{{ sub _Accessible
-
-
- sub _CoreAccessible {
+sub _CoreAccessible {
{
Name => { 'read' => 1 },
Gecos => { 'read' => 1 },
@@ -200,29 +178,6 @@ sub PrincipalId {
};
}
-# }}}
-
-# {{{ sub LoadByEmail
-
-=head2 LoadByEmail
-
-Loads a User into this CurrentUser object.
-Takes the email address of the user to load.
-
-=cut
-
-sub LoadByEmail {
- my $self = shift;
- my $identifier = shift;
-
- $identifier = RT::User::CanonicalizeEmailAddress(undef, $identifier);
-
- $self->LoadByCol("EmailAddress",$identifier);
-
-}
-# }}}
-
-# {{{ sub LoadByGecos
=head2 LoadByGecos
@@ -233,14 +188,8 @@ Takes a unix username as its only argument.
sub LoadByGecos {
my $self = shift;
- my $identifier = shift;
-
- $self->LoadByCol("Gecos",$identifier);
-
+ return $self->LoadByCol( "Gecos", shift );
}
-# }}}
-
-# {{{ sub LoadByName
=head2 LoadByName
@@ -251,154 +200,50 @@ Takes a Name.
sub LoadByName {
my $self = shift;
- my $identifier = shift;
- $self->LoadByCol("Name",$identifier);
-
-}
-# }}}
-
-# {{{ sub Load
-
-=head2 Load
-
-Loads a User into this CurrentUser object.
-Takes either an integer (users id column reference) or a Name
-The latter is deprecated. Instead, you should use LoadByName.
-Formerly, this routine also took email addresses.
-
-=cut
-
-sub Load {
- my $self = shift;
- my $identifier = shift;
-
- #if it's an int, load by id. otherwise, load by name.
- if ($identifier !~ /\D/) {
- $self->SUPER::LoadById($identifier);
- }
-
- elsif (UNIVERSAL::isa($identifier,"RT::User")) {
- # DWIM if they pass a user in
- $self->SUPER::LoadById($identifier->Id);
- }
- else {
- # This is a bit dangerous, we might get false authen if somebody
- # uses ambigous userids or real names:
- $self->LoadByCol("Name",$identifier);
- }
-}
-
-# }}}
-
-# {{{ sub IsPassword
-
-=head2 IsPassword
-
-Takes a password as a string. Passes it off to IsPassword in this
-user's UserObj. If it is the user's password and the user isn't
-disabled, returns 1.
-
-Otherwise, returns undef.
-
-=cut
-
-sub IsPassword {
- my $self = shift;
- my $value = shift;
-
- return ($self->UserObj->IsPassword($value));
-}
-
-# }}}
-
-# {{{ sub Privileged
-
-=head2 Privileged
-
-Returns true if the current user can be granted rights and be
-a member of groups.
-
-=cut
-
-sub Privileged {
- my $self = shift;
- return ($self->UserObj->Privileged());
-}
-
-# }}}
-
-
-# {{{ sub HasRight
-
-=head2 HasRight
-
-calls $self->UserObj->HasRight with the arguments passed in
-
-=cut
-
-sub HasRight {
- my $self = shift;
- return ($self->UserObj->HasRight(@_));
+ return $self->LoadByCol( "Name", shift );
}
-# }}}
-
-# {{{ Localization
-
=head2 LanguageHandle
Returns this current user's langauge handle. Should take a language
specification. but currently doesn't
-=begin testing
-
-ok (my $cu = RT::CurrentUser->new('root'));
-ok (my $lh = $cu->LanguageHandle('en-us'));
-ok (defined $lh);
-ok ($lh->isa('Locale::Maketext'));
-is ($cu->loc('TEST_STRING'), "Concrete Mixer", "Localized TEST_STRING into English");
-ok ($lh = $cu->LanguageHandle('fr'));
-SKIP: {
- skip "fr locale is not loaded", 1 unless grep $_ eq 'fr', @RT::LexiconLanguages;
- is ($cu->loc('Before'), "Avant", "Localized TEST_STRING into Frenc");
-}
-
-=end testing
-
=cut
sub LanguageHandle {
my $self = shift;
- if ( ( !defined $self->{'LangHandle'} )
- || ( !UNIVERSAL::can( $self->{'LangHandle'}, 'maketext' ) )
- || (@_) ) {
- if ( !$RT::SystemUser or ($self->id || 0) == $RT::SystemUser->id() ) {
- @_ = qw(en-US);
+ if ( !defined $self->{'LangHandle'}
+ || !UNIVERSAL::can( $self->{'LangHandle'}, 'maketext' )
+ || @_ )
+ {
+ if ( my $lang = $self->Lang ) {
+ push @_, $lang;
}
-
- elsif ( $self->Lang ) {
- push @_, $self->Lang;
+ elsif ( $self->id && ($self->id == ($RT::SystemUser->id||0) || $self->id == ($RT::Nobody->id||0)) ) {
+ # don't use ENV magic for system users
+ push @_, 'en';
}
+
$self->{'LangHandle'} = RT::I18N->get_handle(@_);
}
# Fall back to english.
unless ( $self->{'LangHandle'} ) {
- die "We couldn't get a dictionary. Nye mogu naidti slovar. No puedo encontrar dictionario.";
+ die "We couldn't get a dictionary. Ne mogu naidti slovar. No puedo encontrar dictionario.";
}
- return ( $self->{'LangHandle'} );
+ return $self->{'LangHandle'};
}
sub loc {
my $self = shift;
- return '' if $_[0] eq '';
+ return '' if !defined $_[0] || $_[0] eq '';
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 };
+ # 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 };
}
return $handle->maketext(@_);
@@ -406,20 +251,17 @@ sub loc {
sub loc_fuzzy {
my $self = shift;
- return '' if (!$_[0] || $_[0] eq '');
+ return '' if !defined $_[0] || $_[0] eq '';
# XXX: work around perl's deficiency when matching utf8 data
return $_[0] if Encode::is_utf8($_[0]);
- my $result = $self->LanguageHandle->maketext_fuzzy(@_);
- return($result);
+ return $self->LanguageHandle->maketext_fuzzy( @_ );
}
-# }}}
-
=head2 CurrentUser
-Return the current currentuser object
+Return the current currentuser object
=cut
@@ -437,9 +279,9 @@ representing whether the authentication succeeded.
If both $nonce and $created are specified, validate $password against:
encode_base64(sha1(
- $nonce .
- $created .
- sha1_hex( "$username:$realm:$server_pass" )
+ $nonce .
+ $created .
+ sha1_hex( "$username:$realm:$server_pass" )
))
where $server_pass is the md5_hex(password) digest stored in the
@@ -458,9 +300,9 @@ sub Authenticate {
my $username = $self->UserObj->Name or return;
my $server_pass = $self->UserObj->__Value('Password') or return;
my $auth_digest = MIME::Base64::encode_base64(Digest::SHA1::sha1(
- $nonce .
- $created .
- Digest::MD5::md5_hex("$username:$realm:$server_pass")
+ $nonce .
+ $created .
+ Digest::MD5::md5_hex("$username:$realm:$server_pass")
));
chomp($password);
@@ -469,13 +311,9 @@ sub Authenticate {
return ($password eq $auth_digest);
}
-# }}}
-
-
eval "require RT::CurrentUser_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/CurrentUser_Vendor.pm});
eval "require RT::CurrentUser_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/CurrentUser_Local.pm});
1;
-
diff --git a/rt/lib/RT/CustomField.pm b/rt/lib/RT/CustomField.pm
index ba51d5b..995728f 100644
--- a/rt/lib/RT/CustomField.pm
+++ b/rt/lib/RT/CustomField.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -92,7 +93,7 @@ Create takes a hash of values and creates a row in the database:
varchar(200) 'Name'.
varchar(200) 'Type'.
int(11) 'MaxValues'.
- varchar(255) 'Pattern'.
+ longtext 'Pattern'.
smallint(6) 'Repeated'.
varchar(255) 'Description'.
int(11) 'SortOrder'.
@@ -119,8 +120,10 @@ sub Create {
SortOrder => '0',
LookupType => '',
Disabled => '0',
+ LinkToValue => '',
+ IncludeContentForValue => '',
- @_);
+ @_);
$self->SUPER::Create(
Name => $args{'Name'},
Type => $args{'Type'},
@@ -131,6 +134,8 @@ sub Create {
SortOrder => $args{'SortOrder'},
LookupType => $args{'LookupType'},
Disabled => $args{'Disabled'},
+ LinkToValue => $args{'LinkToValue'},
+ IncludeContentForValue => $args{'IncludeContentForValue'}
);
}
@@ -203,7 +208,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=head2 Pattern
Returns the current value of Pattern.
-(In the database, Pattern is stored as varchar(255).)
+(In the database, Pattern is stored as longtext.)
@@ -212,7 +217,7 @@ Returns the current value of Pattern.
Set Pattern to VALUE.
Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, Pattern will be stored as a varchar(255).)
+(In the database, Pattern will be stored as a longtext.)
=cut
@@ -357,7 +362,7 @@ sub _CoreAccessible {
MaxValues =>
{read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
Pattern =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''},
Repeated =>
{read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'},
Description =>
diff --git a/rt/lib/RT/CustomFieldValue.pm b/rt/lib/RT/CustomFieldValue.pm
index 3a08176..59edee3 100644
--- a/rt/lib/RT/CustomFieldValue.pm
+++ b/rt/lib/RT/CustomFieldValue.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/CustomFieldValue_Overlay.pm b/rt/lib/RT/CustomFieldValue_Overlay.pm
index be1070d..5511e52 100644
--- a/rt/lib/RT/CustomFieldValue_Overlay.pm
+++ b/rt/lib/RT/CustomFieldValue_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
use warnings;
use strict;
@@ -62,36 +63,114 @@ from being integers.
sub Create {
my $self = shift;
- my %args = @_;
- (defined $args{$_} or delete $args{$_}) for keys %args;
- %args = ((CustomField => '0',
- Name => '',
- Description => '',
- SortOrder => '0',
- Category => ''), %args);
+ my %args = (
+ CustomField => 0,
+ Name => '',
+ Description => '',
+ SortOrder => 0,
+ Category => '',
+ @_,
+ );
+
+ my $cf_id = ref $args{'CustomField'}? $args{'CustomField'}->id: $args{'CustomField'};
+
+ my $cf = RT::CustomField->new( $self->CurrentUser );
+ $cf->Load( $cf_id );
+ unless ( $cf->id ) {
+ return (0, $self->loc("Couldn't load Custom Field #[_1]", $cf_id));
+ }
+ unless ( $cf->CurrentUserHasRight('AdminCustomField') ) {
+ return (0, $self->loc('Permission Denied'));
+ }
my ($id, $msg) = $self->SUPER::Create(
- map {$_ => $args{$_}} qw(CustomField Name Description SortOrder)
+ CustomField => $cf_id,
+ map { $_ => $args{$_} } qw(Name Description SortOrder)
);
- if ($id and length $args{Category}) {
+ return ($id, $msg) unless $id;
+
+ if ( defined $args{'Category'} && length $args{'Category'} ) {
# $self would be loaded at this stage
- $self->SetCategory($args{Category});
+ my ($status, $msg) = $self->SetCategory( $args{'Category'} );
+ unless ( $status ) {
+ $RT::Logger->error("Couldn't set category: $msg");
+ }
}
+
return ($id, $msg);
}
+=head2 Category
+
+Returns the Category assigned to this Value
+Returns udef if there is no Category
+
+=cut
+
sub Category {
my $self = shift;
my $attr = $self->FirstAttribute('Category') or return undef;
return $attr->Content;
}
+=head2 SetCategory Category
+
+Takes a string Category and stores it as an attribute of this CustomFieldValue
+
+=cut
+
sub SetCategory {
my $self = shift;
my $category = shift;
- $self->SetAttribute(Name => 'Category', Content => $category);
+ if ( defined $category && length $category ) {
+ return $self->SetAttribute(
+ Name => 'Category',
+ Content => $category,
+ );
+ }
+ else {
+ my ($status, $msg) = $self->DeleteAttribute( 'Category' );
+ unless ( $status ) {
+ $RT::Logger->warning("Couldn't delete atribute: $msg");
+ }
+ # return true even if there was no category
+ return (1, $self->loc('Category unset'));
+ }
}
-sub ValidateName { 1 };
+sub ValidateName {
+ return defined $_[1] && length $_[1];
+};
+
+=head2 DeleteCategory
+
+Deletes the category associated with this value
+Returns -1 if there is no Category
+
+=cut
+
+sub DeleteCategory {
+ my $self = shift;
+ my $attr = $self->FirstAttribute('Category') or return (-1,'No Category Set');
+ return $attr->Delete;
+}
+
+=head2 Delete
+
+Make sure we delete our Category when we're deleted
+
+=cut
+
+sub Delete {
+ my $self = shift;
+
+ my ($result, $msg) = $self->DeleteCategory;
+
+ unless ($result) {
+ return ($result, $msg);
+ }
+
+ return $self->SUPER::Delete(@_);
+}
1;
diff --git a/rt/lib/RT/CustomFieldValues.pm b/rt/lib/RT/CustomFieldValues.pm
index 32ab860..3539a80 100644
--- a/rt/lib/RT/CustomFieldValues.pm
+++ b/rt/lib/RT/CustomFieldValues.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/CustomFieldValues/External.pm b/rt/lib/RT/CustomFieldValues/External.pm
new file mode 100644
index 0000000..645f136
--- /dev/null
+++ b/rt/lib/RT/CustomFieldValues/External.pm
@@ -0,0 +1,235 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::CustomFieldValues::External;
+
+use strict;
+use warnings;
+
+use base qw(RT::CustomFieldValues);
+
+=head1 NAME
+
+RT::CustomFieldValues::External - Pull possible values for a custom
+field from an arbitrary external data source.
+
+=head1 SYNOPSIS
+
+Custom field value lists can be produced by creating a class that
+inherits from C<RT::CustomFieldValues::External>, and overloading
+C<SourceDescription> and C<ExternalValues>. See
+L<RT::CustomFieldValues::Groups> for a simple example.
+
+=head1 DESCRIPTION
+
+Subclasses should implement the following methods:
+
+=head2 SourceDescription
+
+This method should return a string describing the data source; this is
+the identifier by which the user will see the dropdown.
+
+=head2 ExternalValues
+
+This method should return an array reference of hash references. The
+hash references should contain keys for C<name>, C<description>, and
+C<sortorder>.
+
+=head1 SEE ALSO
+
+L<docs/creating_external_custom_fields.pod>
+
+=cut
+
+sub _Init {
+ my $self = shift;
+ $self->Table( '' );
+ return ( $self->SUPER::_Init(@_) );
+}
+
+sub CleanSlate {
+ my $self = shift;
+ delete $self->{ $_ } foreach qw(
+ __external_cf
+ __external_cf_limits
+ );
+ return $self->SUPER::CleanSlate(@_);
+}
+
+sub _ClonedAttributes {
+ my $self = shift;
+ return qw(
+ __external_cf
+ __external_cf_limits
+ ), $self->SUPER::_ClonedAttributes;
+}
+
+sub Limit {
+ my $self = shift;
+ my %args = (@_);
+ push @{ $self->{'__external_cf_limits'} ||= [] }, {
+ %args,
+ CALLBACK => $self->__BuildLimitCheck( %args ),
+ };
+ return $self->SUPER::Limit( %args );
+}
+
+sub __BuildLimitCheck {
+ my ($self, %args) = (@_);
+ return undef unless $args{'FIELD'} =~ /^(?:Name|Description)$/;
+
+ $args{'OPERATOR'} ||= '=';
+ my $quoted_value = $args{'VALUE'};
+ if ( $quoted_value ) {
+ $quoted_value =~ s/'/\\'/g;
+ $quoted_value = "'$quoted_value'";
+ }
+
+ my $code = <<END;
+my \$record = shift;
+my \$value = \$record->$args{'FIELD'};
+my \$condition = $quoted_value;
+END
+
+ if ( $args{'OPERATOR'} =~ /^(?:=|!=|<>)$/ ) {
+ $code .= 'return 0 unless defined $value;';
+ my %h = ( '=' => ' eq ', '!=' => ' ne ', '<>' => ' ne ' );
+ $code .= 'return 0 unless $value'. $h{ $args{'OPERATOR'} } .'$condition;';
+ $code .= 'return 1;'
+ }
+ elsif ( $args{'OPERATOR'} =~ /^(?:LIKE|NOT LIKE)$/i ) {
+ $code .= 'return 0 unless defined $value;';
+ my %h = ( 'LIKE' => ' =~ ', 'NOT LIKE' => ' !~ ' );
+ $code .= 'return 0 unless $value'. $h{ uc $args{'OPERATOR'} } .'/\Q$condition/i;';
+ $code .= 'return 1;'
+ }
+ else {
+ $code .= 'return 0;'
+ }
+ $code = "sub {$code}";
+ my $cb = eval "$code";
+ $RT::Logger->error( "Couldn't build callback '$code': $@" ) if $@;
+ return $cb;
+}
+
+sub __BuildAggregatorsCheck {
+ my $self = shift;
+
+ my %h = ( OR => ' || ', AND => ' && ' );
+
+ my $code = '';
+ for( my $i = 0; $i < @{ $self->{'__external_cf_limits'} }; $i++ ) {
+ next unless $self->{'__external_cf_limits'}->[$i]->{'CALLBACK'};
+ $code .= $h{ uc($self->{'__external_cf_limits'}->[$i]->{'ENTRYAGGREGATOR'} || 'OR') } if $code;
+ $code .= '$sb->{\'__external_cf_limits\'}->['. $i .']->{\'CALLBACK\'}->($record)';
+ }
+ return unless $code;
+
+ $code = "sub { my (\$sb,\$record) = (\@_); return $code }";
+ my $cb = eval "$code";
+ $RT::Logger->error( "Couldn't build callback '$code': $@" ) if $@;
+ return $cb;
+}
+
+sub _DoSearch {
+ my $self = shift;
+
+ delete $self->{'items'};
+
+ my %defaults = (
+ id => 1,
+ name => '',
+ customfield => $self->{'__external_cf'},
+ sortorder => 0,
+ description => '',
+ creator => $RT::SystemUser->id,
+ created => undef,
+ lastupdatedby => $RT::SystemUser->id,
+ lastupdated => undef,
+ );
+
+ my $i = 0;
+
+ my $check = $self->__BuildAggregatorsCheck;
+ foreach( @{ $self->ExternalValues } ) {
+ my $value = $self->NewItem;
+ $value->LoadFromHash( { %defaults, %$_ } );
+ next if $check && !$check->( $self, $value );
+ $self->AddRecord( $value );
+ }
+ $self->{'must_redo_search'} = 0;
+ return $self->_RecordCount;
+}
+
+sub _DoCount {
+ my $self = shift;
+
+ my $count;
+ $count = $self->_DoSearch if $self->{'must_redo_search'};
+ $count = $self->_RecordCount unless defined $count;
+
+ return $self->{'count_all'} = $self->{'raw_rows'} = $count;
+}
+
+sub LimitToCustomField {
+ my $self = shift;
+ $self->{'__external_cf'} = $_[0];
+ return $self->SUPER::LimitToCustomField( @_ );
+}
+
+eval "require RT::CustomFieldValues::External_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValues/External_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::CustomFieldValues::External_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValues/External_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/CustomFieldValues/Groups.pm b/rt/lib/RT/CustomFieldValues/Groups.pm
new file mode 100644
index 0000000..5d40c77
--- /dev/null
+++ b/rt/lib/RT/CustomFieldValues/Groups.pm
@@ -0,0 +1,88 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::CustomFieldValues::Groups;
+
+use strict;
+use warnings;
+
+use base qw(RT::CustomFieldValues::External);
+
+sub SourceDescription {
+ return 'RT user defined groups';
+}
+
+sub ExternalValues {
+ my $self = shift;
+
+ my @res;
+ my $i = 0;
+ my $groups = RT::Groups->new( $self->CurrentUser );
+ $groups->LimitToUserDefinedGroups;
+ $groups->OrderByCols( { FIELD => 'Name' } );
+ while( my $group = $groups->Next ) {
+ push @res, {
+ name => $group->Name,
+ description => $group->Description,
+ sortorder => $i++,
+ };
+ }
+ return \@res;
+}
+
+eval "require RT::CustomFieldValues::Groups_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValues/Groups_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::CustomFieldValues::Groups_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValues/Groups_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/CustomFieldValues_Overlay.pm b/rt/lib/RT/CustomFieldValues_Overlay.pm
index 543a986..4c6d7f8 100644
--- a/rt/lib/RT/CustomFieldValues_Overlay.pm
+++ b/rt/lib/RT/CustomFieldValues_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,9 +45,11 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::CustomFieldValues;
use strict;
+use warnings;
no warnings qw(redefine);
# {{{ sub LimitToCustomField
@@ -61,13 +63,13 @@ Limits the returned set to values for the custom field with Id FIELD
sub LimitToCustomField {
my $self = shift;
my $cf = shift;
- return ($self->Limit( FIELD => 'CustomField',
- VALUE => $cf,
- OPERATOR => '='));
-
+ return $self->Limit(
+ FIELD => 'CustomField',
+ VALUE => $cf,
+ OPERATOR => '=',
+ );
}
# }}}
1;
-
diff --git a/rt/lib/RT/CustomField_Overlay.pm b/rt/lib/RT/CustomField_Overlay.pm
index 2bb42ed..9286d7a 100644
--- a/rt/lib/RT/CustomField_Overlay.pm
+++ b/rt/lib/RT/CustomField_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,69 +45,73 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::CustomField;
use strict;
no warnings qw(redefine);
-use vars qw(%FieldTypes $RIGHTS %FRIENDLY_OBJECT_TYPES);
-
use RT::CustomFieldValues;
use RT::ObjectCustomFieldValues;
-%FieldTypes = (
+our %FieldTypes = (
Select => [
- 'Select multiple values', # loc
- 'Select one value', # loc
- 'Select up to [_1] values', # loc
+ 'Select multiple values', # loc
+ 'Select one value', # loc
+ 'Select up to [_1] values', # loc
],
Freeform => [
- 'Enter multiple values', # loc
- 'Enter one value', # loc
- 'Enter up to [_1] values', # loc
+ 'Enter multiple values', # loc
+ 'Enter one value', # loc
+ 'Enter up to [_1] values', # loc
],
Text => [
- 'Fill in multiple text areas', # loc
- 'Fill in one text area', # loc
+ 'Fill in multiple text areas', # loc
+ 'Fill in one text area', # loc
'Fill in up to [_1] text areas',# loc
],
Wikitext => [
- 'Fill in multiple wikitext areas', # loc
- 'Fill in one wikitext area', # loc
+ 'Fill in multiple wikitext areas', # loc
+ 'Fill in one wikitext area', # loc
'Fill in up to [_1] wikitext areas',# loc
],
Image => [
- 'Upload multiple images', # loc
- 'Upload one image', # loc
- 'Upload up to [_1] images', # loc
+ 'Upload multiple images', # loc
+ 'Upload one image', # loc
+ 'Upload up to [_1] images', # loc
],
Binary => [
- 'Upload multiple files', # loc
- 'Upload one file', # loc
- 'Upload up to [_1] files', # loc
+ 'Upload multiple files', # loc
+ 'Upload one file', # loc
+ 'Upload up to [_1] files', # loc
],
Combobox => [
- 'Combobox: Select or enter multiple values', # loc
- 'Combobox: Select or enter one value', # loc
- 'Combobox: Select or enter up to [_1] values', # loc
+ 'Combobox: Select or enter multiple values', # loc
+ 'Combobox: Select or enter one value', # loc
+ 'Combobox: Select or enter up to [_1] values', # loc
+ ],
+ Autocomplete => [
+ 'Enter multiple values with autocompletion', # loc
+ 'Enter one value with autocompletion', # loc
+ 'Enter up to [_1] values with autocompletion', # loc
],
);
-%FRIENDLY_OBJECT_TYPES = ();
+our %FRIENDLY_OBJECT_TYPES = ();
RT::CustomField->_ForObjectType( 'RT::Queue-RT::Ticket' => "Tickets", ); #loc
RT::CustomField->_ForObjectType(
'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", ); #loc
RT::CustomField->_ForObjectType( 'RT::User' => "Users", ); #loc
+RT::CustomField->_ForObjectType( 'RT::Queue' => "Queues", ); #loc
RT::CustomField->_ForObjectType( 'RT::Group' => "Groups", ); #loc
-$RIGHTS = {
+our $RIGHTS = {
SeeCustomField => 'See custom fields', # loc_pair
AdminCustomField => 'Create, delete and modify custom fields', # loc_pair
ModifyCustomField => 'Add, delete and modify custom field values for objects' #loc_pair
-
};
# Tell RT::ACE that this sort of object can get acls granted
@@ -117,23 +121,34 @@ foreach my $right ( keys %{$RIGHTS} ) {
$RT::ACE::LOWERCASERIGHTNAMES{ lc $right } = $right;
}
+=head2 AddRights C<RIGHT>, C<DESCRIPTION> [, ...]
+
+Adds the given rights to the list of possible rights. This method
+should be called during server startup, not at runtime.
+
+=cut
+
+sub AddRights {
+ my $self = shift;
+ my %new = @_;
+ $RIGHTS = { %$RIGHTS, %new };
+ %RT::ACE::LOWERCASERIGHTNAMES = ( %RT::ACE::LOWERCASERIGHTNAMES,
+ map { lc($_) => $_ } keys %new);
+}
+
sub AvailableRights {
my $self = shift;
- return($RIGHTS);
+ return $RIGHTS;
}
=head1 NAME
- RT::CustomField_Overlay
+ RT::CustomField_Overlay - overlay for RT::CustomField
=head1 DESCRIPTION
=head1 'CORE' METHODS
-=cut
-
-
-
=head2 Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -148,49 +163,48 @@ Create takes a hash of values and creates a row in the database:
varchar(255) 'LookupType'.
smallint(6) 'Disabled'.
- 'LookupType' is generally the result of either
- RT::Ticket->CustomFieldLookupType or RT::Transaction->CustomFieldLookupType
+C<LookupType> is generally the result of either
+C<RT::Ticket->CustomFieldLookupType> or C<RT::Transaction->CustomFieldLookupType>.
=cut
-
-
-
sub Create {
my $self = shift;
- my %args = (
- Name => '',
- Type => '',
- MaxValues => '0',
- Pattern => '',
- Description => '',
- Disabled => '0',
- LookupType => '',
- Repeated => '0',
-
- @_);
-
- unless ($self->CurrentUser->HasRight(Object => $RT::System, Right => 'AdminCustomField')) {
+ my %args = (
+ Name => '',
+ Type => '',
+ MaxValues => 0,
+ Pattern => '',
+ Description => '',
+ Disabled => 0,
+ LookupType => '',
+ Repeated => 0,
+ LinkValueTo => '',
+ IncludeContentForValue => '',
+ @_,
+ );
+
+ unless ( $self->CurrentUser->HasRight(Object => $RT::System, Right => 'AdminCustomField') ) {
return (0, $self->loc('Permission Denied'));
}
-
- if ($args{TypeComposite}) {
- @args{'Type', 'MaxValues'} = split(/-/, $args{TypeComposite}, 2);
+ if ( $args{TypeComposite} ) {
+ @args{'Type', 'MaxValues'} = split(/-/, $args{TypeComposite}, 2);
}
- elsif ($args{Type} =~ s/(?:(Single)|Multiple)$//) {
- # old style Type string
- $args{'MaxValues'} = $1 ? 1 : 0;
+ elsif ( $args{Type} =~ s/(?:(Single)|Multiple)$// ) {
+ # old style Type string
+ $args{'MaxValues'} = $1 ? 1 : 0;
}
-
+ $args{'MaxValues'} = int $args{'MaxValues'};
+
if ( !exists $args{'Queue'}) {
- # do nothing -- things below are strictly backward compat
+ # do nothing -- things below are strictly backward compat
}
elsif ( ! $args{'Queue'} ) {
unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'AssignCustomFields') ) {
return ( 0, $self->loc('Permission Denied') );
}
- $args{'LookupType'} = 'RT::Queue-RT::Ticket';
+ $args{'LookupType'} = 'RT::Queue-RT::Ticket';
}
else {
my $queue = RT::Queue->new($self->CurrentUser);
@@ -205,32 +219,51 @@ sub Create {
$args{'Queue'} = $queue->Id;
}
- my ($ok, $msg) = $self->_IsValidRegex($args{'Pattern'});
- if (!$ok) {
- return (0, $self->loc("Invalid pattern: [_1]", $msg));
+ my ($ok, $msg) = $self->_IsValidRegex( $args{'Pattern'} );
+ return (0, $self->loc("Invalid pattern: [_1]", $msg)) unless $ok;
+
+ if ( $args{'MaxValues'} != 1 && $args{'Type'} =~ /(text|combobox)$/i ) {
+ $RT::Logger->warning("Support for 'multiple' Texts or Comboboxes is not implemented");
+ $args{'MaxValues'} = 1;
}
- my $rv = $self->SUPER::Create(
- Name => $args{'Name'},
- Type => $args{'Type'},
- MaxValues => $args{'MaxValues'},
- Pattern => $args{'Pattern'},
- Description => $args{'Description'},
- Disabled => $args{'Disabled'},
- LookupType => $args{'LookupType'},
- Repeated => $args{'Repeated'},
-);
+ (my $rv, $msg) = $self->SUPER::Create(
+ Name => $args{'Name'},
+ Type => $args{'Type'},
+ MaxValues => $args{'MaxValues'},
+ Pattern => $args{'Pattern'},
+ Description => $args{'Description'},
+ Disabled => $args{'Disabled'},
+ LookupType => $args{'LookupType'},
+ Repeated => $args{'Repeated'},
+ );
+
+ if ( exists $args{'LinkValueTo'}) {
+ $self->SetLinkValueTo($args{'LinkValueTo'});
+ }
+
+ if ( exists $args{'IncludeContentForValue'}) {
+ $self->SetIncludeContentForValue($args{'IncludeContentForValue'});
+ }
+
+ if ( exists $args{'ValuesClass'} ) {
+ $self->SetValuesClass( $args{'ValuesClass'} );
+ }
- return $rv unless exists $args{'Queue'};
+ if ( exists $args{'BasedOn'} ) {
+ $self->SetBasedOn( $args{'BasedOn'} );
+ }
+
+ return ($rv, $msg) unless exists $args{'Queue'};
# Compat code -- create a new ObjectCustomField mapping
- my $OCF = RT::ObjectCustomField->new($self->CurrentUser);
+ my $OCF = RT::ObjectCustomField->new( $self->CurrentUser );
$OCF->Create(
- CustomField => $self->Id,
- ObjectId => $args{'Queue'},
+ CustomField => $self->Id,
+ ObjectId => $args{'Queue'},
);
- return $rv;
+ return ($rv, $msg);
}
=head2 Load ID/NAME
@@ -239,22 +272,21 @@ Load a custom field. If the value handed in is an integer, load by custom field
=cut
-
sub Load {
my $self = shift;
- my $id = shift;
+ my $id = shift || '';
- if ($id =~ /^\d+$/) {
- return ($self->SUPER::Load($id));
+ if ( $id =~ /^\d+$/ ) {
+ return $self->SUPER::Load( $id );
} else {
- return($self->LoadByName(Name => $id));
+ return $self->LoadByName( Name => $id );
}
}
# {{{ sub LoadByName
-=head2 LoadByName (Queue => QUEUEID, Name => NAME)
+=head2 LoadByName (Queue => QUEUEID, Name => NAME)
Loads the Custom field named NAME.
@@ -284,91 +316,82 @@ sub LoadByName {
@_,
);
+ unless ( defined $args{'Name'} && length $args{'Name'} ) {
+ $RT::Logger->error("Couldn't load Custom Field without Name");
+ return wantarray ? (0, $self->loc("No name provided")) : 0;
+ }
+
# if we're looking for a queue by name, make it a number
- if (defined $args{'Queue'} && $args{'Queue'} !~ /^\d+$/) {
- my $QueueObj = RT::Queue->new($self->CurrentUser);
- $QueueObj->Load($args{'Queue'});
- $args{'Queue'} = $QueueObj->Id;
+ if ( defined $args{'Queue'} && $args{'Queue'} =~ /\D/ ) {
+ my $QueueObj = RT::Queue->new( $self->CurrentUser );
+ $QueueObj->Load( $args{'Queue'} );
+ $args{'Queue'} = $QueueObj->Id;
}
# XXX - really naive implementation. Slow. - not really. still just one query
- my $CFs = RT::CustomFields->new($self->CurrentUser);
-
- $CFs->Limit( FIELD => 'Name', VALUE => $args{'Name'}, CASESENSITIVE => 0);
+ my $CFs = RT::CustomFields->new( $self->CurrentUser );
+ $CFs->SetContextObject( $self->ContextObject );
+ my $field = $args{'Name'} =~ /\D/? 'Name' : 'id';
+ $CFs->Limit( FIELD => $field, VALUE => $args{'Name'}, CASESENSITIVE => 0);
# Don't limit to queue if queue is 0. Trying to do so breaks
# RT::Group type CFs.
- if (defined $args{'Queue'}) {
- $CFs->LimitToQueue( $args{'Queue'} );
+ if ( defined $args{'Queue'} ) {
+ $CFs->LimitToQueue( $args{'Queue'} );
}
- # When loading by name, it's ok if they're disabled. That's not a big deal.
+ # When loading by name, we _can_ load disabled fields, but prefer
+ # non-disabled fields.
$CFs->{'find_disabled_rows'}=1;
+ $CFs->OrderByCols(
+ { FIELD => "Disabled", ORDER => 'ASC' },
+ );
# We only want one entry.
$CFs->RowsPerPage(1);
- unless ($CFs->First) {
- return(0);
- }
- return($self->Load($CFs->First->id));
+ # version before 3.8 just returns 0, so we need to test if wantarray to be
+ # backward compatible.
+ return wantarray ? (0, $self->loc("Not found")) : 0 unless my $first = $CFs->First;
+
+ return $self->LoadById( $first->id );
}
# }}}
# {{{ Dealing with custom field values
-=begin testing
-
-use_ok(RT::CustomField);
-ok(my $cf = RT::CustomField->new($RT::SystemUser));
-ok(my ($id, $msg)= $cf->Create( Name => 'TestingCF',
- Queue => '0',
- SortOrder => '1',
- Description => 'A Testing custom field',
- Type=> 'SelectSingle'), 'Created a global CustomField');
-ok($id != 0, 'Global custom field correctly created');
-ok ($cf->SingleValue);
-is($cf->Type, 'Select');
-is($cf->MaxValues, 1);
-
-my ($val, $msg) = $cf->SetMaxValues('0');
-ok($val, $msg);
-is($cf->Type, 'Select');
-is($cf->MaxValues, 0);
-ok(!$cf->SingleValue );
-ok(my ($bogus_val, $bogus_msg) = $cf->SetType('BogusType') , "Trying to set a custom field's type to a bogus type");
-ok($bogus_val == 0, "Unable to set a custom field's type to a bogus type");
-
-ok(my $bad_cf = RT::CustomField->new($RT::SystemUser));
-ok(my ($bad_id, $bad_msg)= $cf->Create( Name => 'TestingCF-bad',
- Queue => '0',
- SortOrder => '1',
- Description => 'A Testing custom field with a bogus Type',
- Type=> 'SelectSingleton'), 'Created a global CustomField with a bogus type');
-ok($bad_id == 0, 'Global custom field correctly decided to not create a cf with a bogus type ');
-
-=end testing
+
+=head2 Custom field values
+
+=head3 Values FIELD
+
+Return a object (collection) of all acceptable values for this Custom Field.
+Class of the object can vary and depends on the return value
+of the C<ValuesClass> method.
=cut
-# {{{ AddValue
+*ValuesObj = \&Values;
-=head2 AddValue HASH
+sub Values {
+ my $self = shift;
-Create a new value for this CustomField. Takes a paramhash containing the elements Name, Description and SortOrder
+ my $class = $self->ValuesClass || 'RT::CustomFieldValues';
+ eval "require $class" or die "$@";
+ my $cf_values = $class->new( $self->CurrentUser );
+ # if the user has no rights, return an empty object
+ if ( $self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) {
+ $cf_values->LimitToCustomField( $self->Id );
+ }
+ return ($cf_values);
+}
-=begin testing
+# {{{ AddValue
-ok(my $cf = RT::CustomField->new($RT::SystemUser));
-$cf->Load(1);
-ok($cf->Id == 1);
-ok(my ($val,$msg) = $cf->AddValue(Name => 'foo' , Description => 'TestCFValue', SortOrder => '6'));
-ok($val != 0);
-ok (my ($delval, $delmsg) = $cf->DeleteValue($val));
-ok ($delval,"Deleting a cf value: $delmsg");
+=head3 AddValue HASH
-=end testing
+Create a new value for this CustomField. Takes a paramhash containing the elements Name, Description and SortOrder
=cut
@@ -382,11 +405,11 @@ sub AddValue {
# allow zero value
if ( !defined $args{'Name'} || $args{'Name'} eq '' ) {
- return(0, $self->loc("Can't add a custom field value without a name"));
+ return (0, $self->loc("Can't add a custom field value without a name"));
}
- my $newval = RT::CustomFieldValue->new($self->CurrentUser);
- return($newval->Create(%args, CustomField => $self->Id));
+ my $newval = RT::CustomFieldValue->new( $self->CurrentUser );
+ return $newval->Create( %args, CustomField => $self->Id );
}
@@ -394,147 +417,38 @@ sub AddValue {
# {{{ DeleteValue
-=head2 DeleteValue ID
+=head3 DeleteValue ID
-Deletes a value from this custom field by id.
+Deletes a value from this custom field by id.
-Does not remove this value for any article which has had it selected
+Does not remove this value for any article which has had it selected
=cut
sub DeleteValue {
- my $self = shift;
+ my $self = shift;
my $id = shift;
- unless ($self->CurrentUserHasRight('AdminCustomField')) {
+ unless ( $self->CurrentUserHasRight('AdminCustomField') ) {
return (0, $self->loc('Permission Denied'));
}
- my $val_to_del = RT::CustomFieldValue->new($self->CurrentUser);
- $val_to_del->Load($id);
- unless ($val_to_del->Id) {
- return (0, $self->loc("Couldn't find that value"));
- }
- unless ($val_to_del->CustomField == $self->Id) {
- return (0, $self->loc("That is not a value for this custom field"));
- }
-
- my $retval = $val_to_del->Delete();
- if ($retval) {
- return ($retval, $self->loc("Custom field value deleted"));
- } else {
- return(0, $self->loc("Custom field value could not be deleted"));
+ my $val_to_del = RT::CustomFieldValue->new( $self->CurrentUser );
+ $val_to_del->Load( $id );
+ unless ( $val_to_del->Id ) {
+ return (0, $self->loc("Couldn't find that value"));
}
-}
-
-# }}}
-
-# {{{ Values
-
-=head2 Values FIELD
-
-Return a CustomFieldeValues object of all acceptable values for this Custom Field.
-
-
-=cut
-
-*ValuesObj = \&Values;
-
-sub Values {
- my $self = shift;
-
- my $cf_values = RT::CustomFieldValues->new($self->CurrentUser);
- # if the user has no rights, return an empty object
- if ($self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) {
- $cf_values->LimitToCustomField($self->Id);
+ unless ( $val_to_del->CustomField == $self->Id ) {
+ return (0, $self->loc("That is not a value for this custom field"));
}
- return ($cf_values);
-}
-
-# }}}
-
-# }}}
-
-# {{{ Ticket related routines
-
-# {{{ ValuesForTicket
-
-=head2 ValuesForTicket TICKET
-
-Returns a RT::ObjectCustomFieldValues object of this Field's values for TICKET.
-TICKET is a ticket id.
-
-This is deprecated -- use ValuesForObject instead.
-
-
-=cut
-
-sub ValuesForTicket {
- my $self = shift;
- my $ticket_id = shift;
-
- $RT::Logger->debug( ref($self) . " -> ValuesForTicket deprecated in favor of ValuesForObject at (". join(":",caller).")");
- my $ticket = RT::Ticket->new($self->CurrentUser);
- $ticket->Load($ticket_id);
-
- return $self->ValuesForObject($ticket);
-}
-
-# }}}
-
-# {{{ AddValueForTicket
-
-=head2 AddValueForTicket HASH
-
-Adds a custom field value for a ticket. Takes a param hash of Ticket and Content
-
-This is deprecated -- use AddValueForObject instead.
-
-=cut
-
-sub AddValueForTicket {
- my $self = shift;
- my %args = ( Ticket => undef,
- Content => undef,
- @_ );
- $RT::Logger->debug( ref($self) . " -> AddValueForTicket deprecated in favor of AddValueForObject at (". join(":",caller).")");
-
-
- my $ticket = RT::Ticket->new($self->CurrentUser);
- $ticket->Load($args{'Ticket'});
- return($self->AddValueForObject(Content => $args{'Content'}, Object => $ticket,@_));
-
-}
-
-
-# }}}
-
-# {{{ DeleteValueForTicket
-
-=head2 DeleteValueForTicket HASH
-
-Adds a custom field value for a ticket. Takes a param hash of Ticket and Content
-
-This is deprecated -- use DeleteValueForObject instead.
-
-=cut
-
-sub DeleteValueForTicket {
- my $self = shift;
- my %args = ( Ticket => undef,
- Content => undef,
- @_ );
-
- $RT::Logger->debug( ref($self) . " -> DeleteValueForTicket deprecated in favor of DeleteValueForObject at (". join(":",caller).")");
-
-
- my $ticket = RT::Ticket->new($self->CurrentUser);
- $ticket->load($args{'Ticket'});
- return ($self->DeleteValueForObject(Object => $ticket, Content => $args{'Content'}, @_));
+ my $retval = $val_to_del->Delete;
+ unless ( $retval ) {
+ return (0, $self->loc("Custom field value could not be deleted"));
+ }
+ return ($retval, $self->loc("Custom field value deleted"));
}
# }}}
-# }}}
=head2 ValidateQueue Queue
@@ -547,18 +461,14 @@ sub ValidateQueue {
my $self = shift;
my $id = shift;
- if ($id eq '0') { # 0 means "Global" null would _not_ be ok.
- return (1);
- }
-
- my $q = RT::Queue->new($RT::SystemUser);
- $q->Load($id);
- unless ($q->id) {
- return undef;
- }
- return (1);
-
+ return undef unless defined $id;
+ # 0 means "Global" null would _not_ be ok.
+ return 1 if $id eq '0';
+ my $q = RT::Queue->new( $RT::SystemUser );
+ $q->Load( $id );
+ return undef unless $q->id;
+ return 1;
}
@@ -571,13 +481,13 @@ Retuns an array of the types of CustomField that are supported
=cut
sub Types {
- return (keys %FieldTypes);
+ return (keys %FieldTypes);
}
# }}}
# {{{ IsSelectionType
-
+
=head2 IsSelectionType
Retuns a boolean value indicating whether the C<Values> method makes sense
@@ -587,12 +497,49 @@ to this Custom Field.
sub IsSelectionType {
my $self = shift;
- $self->Type =~ /(?:Select|Combobox)/;
+ my $type = @_? shift : $self->Type;
+ return undef unless $type;
+
+ $type =~ /(?:Select|Combobox|Autocomplete)/;
}
# }}}
+=head2 IsExternalValues
+
+=cut
+
+sub IsExternalValues {
+ my $self = shift;
+ my $selectable = $self->IsSelectionType( @_ );
+ return $selectable unless $selectable;
+
+ my $class = $self->ValuesClass;
+ return 0 if $class eq 'RT::CustomFieldValues';
+ return 1;
+}
+
+sub ValuesClass {
+ my $self = shift;
+ return '' unless $self->IsSelectionType;
+
+ my $class = $self->FirstAttribute( 'ValuesClass' );
+ $class = $class->Content if $class;
+ return $class || 'RT::CustomFieldValues';
+}
+
+sub SetValuesClass {
+ my $self = shift;
+ my $class = shift || 'RT::CustomFieldValues';
+
+ if( $class eq 'RT::CustomFieldValues' ) {
+ return $self->DeleteAttribute( 'ValuesClass' );
+ }
+ return $self->SetAttribute( Name => 'ValuesClass', Content => $class );
+}
+
+
=head2 FriendlyType [TYPE, MAX_VALUES]
Returns a localized human-readable version of the custom field type.
@@ -605,9 +552,10 @@ sub FriendlyType {
my $type = @_ ? shift : $self->Type;
my $max = @_ ? shift : $self->MaxValues;
+ $max = 0 unless $max;
if (my $friendly_type = $FieldTypes{$type}[$max>2 ? 2 : $max]) {
- return ( $self->loc( $friendly_type, $max ) );
+ return ( $self->loc( $friendly_type, $max ) );
}
else {
return ( $self->loc( $type ) );
@@ -626,14 +574,6 @@ sub FriendlyTypeComposite {
Takes a single string. returns true if that string is a value
type of custom field
-=begin testing
-
-ok(my $cf = RT::CustomField->new($RT::SystemUser));
-ok($cf->ValidateType('SelectSingle'));
-ok($cf->ValidateType('SelectMultiple'));
-ok(!$cf->ValidateType('SelectFooMultiple'));
-
-=end testing
=cut
@@ -641,12 +581,12 @@ sub ValidateType {
my $self = shift;
my $type = shift;
- if ($type =~ s/(?:Single|Multiple)$//) {
- $RT::Logger->warning( "Prefix 'Single' and 'Multiple' to Type deprecated, use MaxValues instead at (". join(":",caller).")");
+ if ( $type =~ s/(?:Single|Multiple)$// ) {
+ $RT::Logger->warning( "Prefix 'Single' and 'Multiple' to Type deprecated, use MaxValues instead at (". join(":",caller).")");
}
- if( $FieldTypes{$type}) {
- return(1);
+ if ( $FieldTypes{$type} ) {
+ return 1;
}
else {
return undef;
@@ -658,8 +598,8 @@ sub SetType {
my $self = shift;
my $type = shift;
if ($type =~ s/(?:(Single)|Multiple)$//) {
- $RT::Logger->warning("'Single' and 'Multiple' on SetType deprecated, use SetMaxValues instead at (". join(":",caller).")");
- $self->SetMaxValues($1 ? 1 : 0);
+ $RT::Logger->warning("'Single' and 'Multiple' on SetType deprecated, use SetMaxValues instead at (". join(":",caller).")");
+ $self->SetMaxValues($1 ? 1 : 0);
}
$self->SUPER::SetType($type);
}
@@ -696,8 +636,8 @@ sub _IsValidRegex {
my $regex = shift or return (1, 'valid');
local $^W; local $@;
- $SIG{__DIE__} = sub { 1 };
- $SIG{__WARN__} = sub { 1 };
+ local $SIG{__DIE__} = sub { 1 };
+ local $SIG{__WARN__} = sub { 1 };
if (eval { qr/$regex/; 1 }) {
return (1, 'valid');
@@ -720,7 +660,7 @@ Returns false if it accepts multiple values
sub SingleValue {
my $self = shift;
- if ($self->MaxValues == 1) {
+ if (($self->MaxValues||0) == 1) {
return 1;
}
else {
@@ -730,7 +670,7 @@ sub SingleValue {
sub UnlimitedValues {
my $self = shift;
- if ($self->MaxValues == 0) {
+ if (($self->MaxValues||0) == 0) {
return 1;
}
else {
@@ -740,8 +680,6 @@ sub UnlimitedValues {
# }}}
-# {{{ sub CurrentUserHasRight
-
=head2 CurrentUserHasRight RIGHT
Helper function to call the custom field's queue's CurrentUserHasRight with the passed in args.
@@ -753,13 +691,44 @@ sub CurrentUserHasRight {
my $right = shift;
return $self->CurrentUser->HasRight(
- Object => $self,
- Right => $right,
+ Object => $self,
+ Right => $right,
);
}
-# }}}
+=head2 ACLEquivalenceObjects
+
+Returns list of objects via which users can get rights on this custom field. For custom fields
+these objects can be set using L<ContextObject|/"ContextObject and SetContextObject">.
+=cut
+
+sub ACLEquivalenceObjects {
+ my $self = shift;
+
+ my $ctx = $self->ContextObject
+ or return;
+ return ($ctx, $ctx->ACLEquivalenceObjects);
+}
+
+=head2 ContextObject and SetContextObject
+
+Set or get a context for this object. It can be ticket, queue or another object
+this CF applies to. Used for ACL control, for example SeeCustomField can be granted on
+queue level to allow people to see all fields applied to the queue.
+
+=cut
+
+sub SetContextObject {
+ my $self = shift;
+ return $self->{'context_object'} = shift;
+}
+
+sub ContextObject {
+ my $self = shift;
+ return $self->{'context_object'};
+}
+
# {{{ sub _Set
sub _Set {
@@ -768,7 +737,7 @@ sub _Set {
unless ( $self->CurrentUserHasRight('AdminCustomField') ) {
return ( 0, $self->loc('Permission Denied') );
}
- return ( $self->SUPER::_Set(@_) );
+ return $self->SUPER::_Set( @_ );
}
@@ -784,16 +753,18 @@ Returns its value as a string, if the user passes an ACL check
=cut
sub _Value {
-
my $self = shift;
- my $field = shift;
+ return undef unless $self->id;
# we need to do the rights check
- unless ( $self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) {
- return (undef);
+ unless ( $self->CurrentUserHasRight('SeeCustomField') ) {
+ $RT::Logger->debug(
+ "Permission denied. User #". $self->CurrentUser->id
+ ." has no SeeCustomField right on CF #". $self->id
+ );
+ return (undef);
}
- return ( $self->__Value($field) );
-
+ return $self->__Value( @_ );
}
# }}}
@@ -802,44 +773,39 @@ sub _Value {
=head2 SetDisabled
Takes a boolean.
-1 will cause this custom field to no longer be avaialble for tickets.
-0 will re-enable this queue
+1 will cause this custom field to no longer be avaialble for objects.
+0 will re-enable this field.
=cut
# }}}
-sub Queue {
- $RT::Logger->debug( ref($_[0]) . " -> Queue deprecated at (". join(":",caller).")");
-
- return 0;
-}
-
-sub SetQueue {
- $RT::Logger->debug( ref($_[0]) . " -> SetQueue deprecated at (". join(":",caller).")");
-
- return 0;
-}
-
-sub QueueObj {
- $RT::Logger->debug( ref($_[0]) . " -> QueueObj deprecated at (". join(":",caller).")");
-
- return undef;
-}
-
=head2 SetTypeComposite
Set this custom field's type and maximum values as a composite value
-
=cut
sub SetTypeComposite {
my $self = shift;
my $composite = shift;
+
+ my $old = $self->TypeComposite;
+
my ($type, $max_values) = split(/-/, $composite, 2);
- $self->SetType($type);
- $self->SetMaxValues($max_values);
+ if ( $type ne $self->Type ) {
+ my ($status, $msg) = $self->SetType( $type );
+ return ($status, $msg) unless $status;
+ }
+ if ( ($max_values || 0) != ($self->MaxValues || 0) ) {
+ my ($status, $msg) = $self->SetMaxValues( $max_values );
+ return ($status, $msg) unless $status;
+ }
+ return 1, $self->loc(
+ "Type changed from '[_1]' to '[_2]'",
+ $self->FriendlyTypeComposite( $old ),
+ $self->FriendlyTypeComposite( $composite ),
+ );
}
=head2 SetLookupType
@@ -851,13 +817,13 @@ Autrijus: care to doc how LookupTypes work?
sub SetLookupType {
my $self = shift;
my $lookup = shift;
- if ($lookup ne $self->LookupType) {
- # Okay... We need to invalidate our existing relationships
- my $ObjectCustomFields = RT::ObjectCustomFields->new($self->CurrentUser);
- $ObjectCustomFields->LimitToCustomField($self->Id);
- $_->Delete foreach @{$ObjectCustomFields->ItemsArrayRef};
+ if ( $lookup ne $self->LookupType ) {
+ # Okay... We need to invalidate our existing relationships
+ my $ObjectCustomFields = RT::ObjectCustomFields->new($self->CurrentUser);
+ $ObjectCustomFields->LimitToCustomField($self->Id);
+ $_->Delete foreach @{$ObjectCustomFields->ItemsArrayRef};
}
- $self->SUPER::SetLookupType($lookup);
+ return $self->SUPER::SetLookupType($lookup);
}
=head2 TypeComposite
@@ -869,7 +835,7 @@ Returns a composite value composed of this object's type and maximum values
sub TypeComposite {
my $self = shift;
- join('-', $self->Type, $self->MaxValues);
+ return join '-', ($self->Type || ''), ($self->MaxValues || 0);
}
=head2 TypeComposites
@@ -896,13 +862,15 @@ sub LookupTypes {
}
my @FriendlyObjectTypes = (
- "[_1] objects", # loc
- "[_1]'s [_2] objects", # loc
+ "[_1] objects", # loc
+ "[_1]'s [_2] objects", # loc
"[_1]'s [_2]'s [_3] objects", # loc
);
=head2 FriendlyTypeLookup
+Returns a localized description of the type of this custom field
+
=cut
sub FriendlyLookupType {
@@ -910,7 +878,7 @@ sub FriendlyLookupType {
my $lookup = shift || $self->LookupType;
return ($self->loc( $FRIENDLY_OBJECT_TYPES{$lookup} ))
- if (defined $FRIENDLY_OBJECT_TYPES{$lookup} );
+ if (defined $FRIENDLY_OBJECT_TYPES{$lookup} );
my @types = map { s/^RT::// ? $self->loc($_) : $_ }
grep { defined and length }
@@ -935,7 +903,7 @@ sub AddToObject {
my $id = $object->Id || 0;
unless (index($self->LookupType, ref($object)) == 0) {
- return ( 0, $self->loc('Lookup type mismatch') );
+ return ( 0, $self->loc('Lookup type mismatch') );
}
unless ( $object->CurrentUserHasRight('AssignCustomFields') ) {
@@ -943,7 +911,6 @@ sub AddToObject {
}
my $ObjectCF = RT::ObjectCustomField->new( $self->CurrentUser );
-
$ObjectCF->LoadByCols( ObjectId => $id, CustomField => $self->Id );
if ( $ObjectCF->Id ) {
return ( 0, $self->loc("That is already the current value") );
@@ -970,7 +937,7 @@ sub RemoveFromObject {
my $id = $object->Id || 0;
unless (index($self->LookupType, ref($object)) == 0) {
- return ( 0, $self->loc('Object type mismatch') );
+ return ( 0, $self->loc('Object type mismatch') );
}
unless ( $object->CurrentUserHasRight('AssignCustomFields') ) {
@@ -978,7 +945,6 @@ sub RemoveFromObject {
}
my $ObjectCF = RT::ObjectCustomField->new( $self->CurrentUser );
-
$ObjectCF->LoadByCols( ObjectId => $id, CustomField => $self->Id );
unless ( $ObjectCF->Id ) {
return ( 0, $self->loc("This custom field does not apply to that object") );
@@ -1017,21 +983,20 @@ sub AddValueForObject {
ContentType => undef,
@_
);
- my $obj = $args{'Object'} or return;
+ my $obj = $args{'Object'} or return ( 0, $self->loc('Invalid object') );
unless ( $self->CurrentUserHasRight('ModifyCustomField') ) {
return ( 0, $self->loc('Permission Denied') );
}
- unless ( $self->MatchPattern($args{Content}) ) {
+ unless ( $self->MatchPattern($args{'Content'}) ) {
return ( 0, $self->loc('Input must match [_1]', $self->FriendlyPattern) );
}
$RT::Handle->BeginTransaction;
- my $current_values = $self->ValuesForObject($obj);
-
if ( $self->MaxValues ) {
+ my $current_values = $self->ValuesForObject($obj);
my $extra_values = ( $current_values->Count + 1 ) - $self->MaxValues;
# (The +1 is for the new value we're adding)
@@ -1042,17 +1007,14 @@ sub AddValueForObject {
while ($extra_values) {
my $extra_item = $current_values->Next;
-
unless ( $extra_item->id ) {
- $RT::Logger->crit(
-"We were just asked to delete a custom fieldvalue that doesn't exist!"
- );
+ $RT::Logger->crit( "We were just asked to delete "
+ ."a custom field value that doesn't exist!" );
$RT::Handle->Rollback();
return (undef);
}
$extra_item->Delete;
$extra_values--;
-
}
}
my $newval = RT::ObjectCustomFieldValue->new( $self->CurrentUser );
@@ -1067,7 +1029,7 @@ sub AddValueForObject {
unless ($val) {
$RT::Handle->Rollback();
- return ($val);
+ return ($val, $self->loc("Couldn't create record"));
}
$RT::Handle->Commit();
@@ -1088,10 +1050,9 @@ and returns a boolean; returns true if the Pattern is empty.
sub MatchPattern {
my $self = shift;
- my $regex = $self->Pattern;
+ my $regex = $self->Pattern or return 1;
- return 1 if !length($regex);
- return ($_[0] =~ $regex);
+ return (( defined $_[0] ? $_[0] : '') =~ $regex);
}
@@ -1110,8 +1071,8 @@ sub FriendlyPattern {
my $self = shift;
my $regex = $self->Pattern;
- return '' if !length($regex);
- if ($regex =~ /\(\?#([^)]*)\)/) {
+ return '' unless length $regex;
+ if ( $regex =~ /\(\?#([^)]*)\)/ ) {
return '[' . $self->loc($1) . ']';
}
else {
@@ -1137,7 +1098,7 @@ sub DeleteValueForObject {
my %args = ( Object => undef,
Content => undef,
Id => undef,
- @_ );
+ @_ );
unless ($self->CurrentUserHasRight('ModifyCustomField')) {
@@ -1147,14 +1108,14 @@ sub DeleteValueForObject {
my $oldval = RT::ObjectCustomFieldValue->new($self->CurrentUser);
if (my $id = $args{'Id'}) {
- $oldval->Load($id);
+ $oldval->Load($id);
}
unless ($oldval->id) {
- $oldval->LoadByObjectContentAndCustomField(
- Object => $args{'Object'},
- Content => $args{'Content'},
- CustomField => $self->Id,
- );
+ $oldval->LoadByObjectContentAndCustomField(
+ Object => $args{'Object'},
+ Content => $args{'Content'},
+ CustomField => $self->Id,
+ );
}
@@ -1180,26 +1141,26 @@ sub DeleteValueForObject {
=head2 ValuesForObject OBJECT
-Return an RT::ObjectCustomFieldValues object containing all of this custom field's values for OBJECT
+Return an L<RT::ObjectCustomFieldValues> object containing all of this custom field's values for OBJECT
=cut
sub ValuesForObject {
- my $self = shift;
+ my $self = shift;
my $object = shift;
- my $values = new RT::ObjectCustomFieldValues($self->CurrentUser);
- unless ($self->CurrentUserHasRight('SeeCustomField')) {
+ my $values = new RT::ObjectCustomFieldValues($self->CurrentUser);
+ unless ($self->CurrentUserHasRight('SeeCustomField')) {
# Return an empty object if they have no rights to see
return ($values);
}
-
-
- $values->LimitToCustomField($self->Id);
- $values->LimitToEnabled();
+
+
+ $values->LimitToCustomField($self->Id);
+ $values->LimitToEnabled();
$values->LimitToObject($object);
- return ($values);
+ return ($values);
}
@@ -1209,10 +1170,10 @@ Tell RT that a certain object accepts custom fields
Examples:
- 'RT::Queue-RT::Ticket' => "Tickets", # loc
- 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", # loc
- 'RT::User' => "Users", # loc
- 'RT::Group' => "Groups", # loc
+ 'RT::Queue-RT::Ticket' => "Tickets", # loc
+ 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", # loc
+ 'RT::User' => "Users", # loc
+ 'RT::Group' => "Groups", # loc
This is a class method.
@@ -1275,8 +1236,6 @@ With two arguments, attemptes to set the relevant template value.
=cut
-
-
sub _URLTemplate {
my $self = shift;
my $template_name = shift;
@@ -1300,4 +1259,34 @@ sub _URLTemplate {
}
}
+
+sub SetBasedOn {
+ my $self = shift;
+ my $value = shift;
+
+ return $self->DeleteAttribute( "BasedOn" )
+ unless defined $value and length $value;
+
+ my $cf = RT::CustomField->new( $self->CurrentUser );
+ $cf->Load( ref $value ? $value->Id : $value );
+
+ return (0, "Permission denied")
+ unless $cf->Id && $cf->CurrentUserHasRight('SeeCustomField');
+
+ return $self->AddAttribute(
+ Name => "BasedOn",
+ Description => "Custom field whose CF we depend on",
+ Content => $cf->Id,
+ );
+}
+
+sub BasedOnObj {
+ my $self = shift;
+ my $obj = RT::CustomField->new( $self->CurrentUser );
+
+ my $attribute = $self->FirstAttribute("BasedOn");
+ $obj->Load($attribute->Content) if defined $attribute;
+ return $obj;
+}
+
1;
diff --git a/rt/lib/RT/CustomFields.pm b/rt/lib/RT/CustomFields.pm
index 7ac18fb..27867e8 100644
--- a/rt/lib/RT/CustomFields.pm
+++ b/rt/lib/RT/CustomFields.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/CustomFields_Overlay.pm b/rt/lib/RT/CustomFields_Overlay.pm
index b9f3787..0f117c6 100644
--- a/rt/lib/RT/CustomFields_Overlay.pm
+++ b/rt/lib/RT/CustomFields_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::CustomFields - a collection of RT CustomField objects
@@ -58,11 +59,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::CustomFields);
-
-=end testing
=cut
@@ -186,25 +182,32 @@ Returns the next custom field that this user can see.
sub Next {
my $self = shift;
-
my $CF = $self->SUPER::Next();
- if ((defined($CF)) and (ref($CF))) {
-
- if ($CF->CurrentUserHasRight('SeeCustomField')) {
- return($CF);
- }
-
- #If the user doesn't have the right to show this queue
- else {
- return($self->Next());
- }
- }
- #if there never was any queue
- else {
- return(undef);
- }
-
+ return $CF unless $CF;
+
+ $CF->SetContextOject( $self->ContextObject );
+
+ return $self->Next unless $CF->CurrentUserHasRight('SeeCustomField');
+ return $CF;
}
+
+sub SetContextObject {
+ my $self = shift;
+ return $self->{'context_object'} = shift;
+}
+
+sub ContextObject {
+ my $self = shift;
+ return $self->{'context_object'};
+}
+
+sub NewItem {
+ my $self = shift;
+ my $res = RT::CustomField->new($self->CurrentUser);
+ $res->SetContextObject($self->ContextObject);
+ return $res;
+}
+
# }}}
sub LimitToLookupType {
@@ -251,7 +254,7 @@ sub LimitToGlobalOrObjectId {
ENTRYAGGREGATOR => 'OR' ) unless $global_only;
$self->OrderByCols(
- { ALIAS => $self->_OCFAlias, FIELD => 'ObjectId' },
+ { ALIAS => $self->_OCFAlias, FIELD => 'ObjectId', ORDER => 'DESC' },
{ ALIAS => $self->_OCFAlias, FIELD => 'SortOrder' },
);
@@ -259,6 +262,6 @@ sub LimitToGlobalOrObjectId {
#$self->OrderBy( ALIAS => $class_cfs , FIELD => "SortOrder", ORDER => 'ASC');
}
-
+
1;
diff --git a/rt/lib/RT/Dashboard.pm b/rt/lib/RT/Dashboard.pm
new file mode 100644
index 0000000..c0531c4
--- /dev/null
+++ b/rt/lib/RT/Dashboard.pm
@@ -0,0 +1,358 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+ RT::Dashboard - an API for saving and retrieving dashboards
+
+=head1 SYNOPSIS
+
+ use RT::Dashboard
+
+=head1 DESCRIPTION
+
+ Dashboard is an object that can belong to either an RT::User or an
+ RT::Group. It consists of an ID, a name, and a number of
+ saved searches and portlets.
+
+=head1 METHODS
+
+
+=cut
+
+package RT::Dashboard;
+
+use RT::SavedSearch;
+
+use strict;
+use warnings;
+use base qw/RT::SharedSetting/;
+
+use RT::System;
+RT::System::AddRights(
+ SubscribeDashboard => 'Subscribe to dashboards', #loc_pair
+
+ SeeDashboard => 'View system dashboards', #loc_pair
+ CreateDashboard => 'Create system dashboards', #loc_pair
+ ModifyDashboard => 'Modify system dashboards', #loc_pair
+ DeleteDashboard => 'Delete system dashboards', #loc_pair
+
+ SeeOwnDashboard => 'View personal dashboards', #loc_pair
+ CreateOwnDashboard => 'Create personal dashboards', #loc_pair
+ ModifyOwnDashboard => 'Modify personal dashboards', #loc_pair
+ DeleteOwnDashboard => 'Delete personal dashboards', #loc_pair
+);
+
+
+=head2 ObjectName
+
+An object of this class is called "dashboard"
+
+=cut
+
+sub ObjectName { "dashboard" }
+
+sub SaveAttribute {
+ my $self = shift;
+ my $object = shift;
+ my $args = shift;
+
+ return $object->AddAttribute(
+ 'Name' => 'Dashboard',
+ 'Description' => $args->{'Name'},
+ 'Content' => {Panes => $args->{'Panes'}},
+ );
+}
+
+sub UpdateAttribute {
+ my $self = shift;
+ my $args = shift;
+
+ my ($status, $msg) = (1, undef);
+ if (defined $args->{'Panes'}) {
+ ($status, $msg) = $self->{'Attribute'}->SetSubValues(
+ Panes => $args->{'Panes'},
+ );
+ }
+
+ if ($status && $args->{'Name'}) {
+ ($status, $msg) = $self->{'Attribute'}->SetDescription($args->{'Name'})
+ unless $self->Name eq $args->{'Name'};
+ }
+
+ if ($status && $args->{'Privacy'}) {
+ my ($new_obj_type, $new_obj_id) = split /-/, $args->{'Privacy'};
+ my ($obj_type, $obj_id) = split /-/, $self->Privacy;
+
+ my $attr = $self->{'Attribute'};
+ if ($new_obj_type ne $obj_type) {
+ ($status, $msg) = $attr->SetObjectType($new_obj_type);
+ }
+ if ($status && $new_obj_id != $obj_id ) {
+ ($status, $msg) = $attr->SetObjectId($new_obj_id);
+ }
+ $self->{'Privacy'} = $args->{'Privacy'} if $status;
+ }
+
+ return ($status, $msg);
+}
+
+=head2 Panes
+
+Returns a hashref of pane name to portlets
+
+=cut
+
+sub Panes {
+ my $self = shift;
+ return unless ref($self->{'Attribute'}) eq 'RT::Attribute';
+ return $self->{'Attribute'}->SubValue('Panes') || {};
+}
+
+=head2 Portlets
+
+Returns the list of this dashboard's portlets, each a hashref with key
+C<portlet_type> being C<search> or C<component>.
+
+=cut
+
+sub Portlets {
+ my $self = shift;
+ return map { @$_ } values %{ $self->Panes };
+}
+
+=head2 Dashboards
+
+Returns a list of loaded sub-dashboards
+
+=cut
+
+sub Dashboards {
+ my $self = shift;
+ return map {
+ my $search = RT::Dashboard->new($self->CurrentUser);
+ $search->LoadById($_->{id});
+ $search
+ } grep { $_->{portlet_type} eq 'dashboard' } $self->Portlets;
+}
+
+=head2 Searches
+
+Returns a list of loaded saved searches
+
+=cut
+
+sub Searches {
+ my $self = shift;
+ return map {
+ my $search = RT::SavedSearch->new($self->CurrentUser);
+ $search->Load($_->{privacy}, $_->{id});
+ $search
+ } grep { $_->{portlet_type} eq 'search' } $self->Portlets;
+}
+
+=head2 ShowSearchName Portlet
+
+Returns an array for one saved search, suitable for passing to
+/Elements/ShowSearch.
+
+=cut
+
+sub ShowSearchName {
+ my $self = shift;
+ my $portlet = shift;
+
+ if ($portlet->{privacy} eq 'RT::System') {
+ return Name => $portlet->{description};
+ }
+
+ return SavedSearch => join('-', $portlet->{privacy}, 'SavedSearch', $portlet->{id});
+}
+
+=head2 PossibleHiddenSearches
+
+This will return a list of saved searches that are potentially not visible by
+all users for whom the dashboard is visible. You may pass in a privacy to
+use instead of the dashboard's privacy.
+
+=cut
+
+sub PossibleHiddenSearches {
+ my $self = shift;
+ my $privacy = shift || $self->Privacy;
+
+ return grep { !$_->IsVisibleTo($privacy) } $self->Searches, $self->Dashboards;
+}
+
+# _PrivacyObjects: returns a list of objects that can be used to load
+# dashboards from. If the Modify parameter is true, then check modify rights.
+# If the Create parameter is true, then check create rights. Otherwise, check
+# read rights.
+
+sub _PrivacyObjects {
+ my $self = shift;
+ my %args = @_;
+
+ my $CurrentUser = $self->CurrentUser;
+ my @objects;
+
+ my $prefix = $args{Modify} ? "Modify"
+ : $args{Create} ? "Create"
+ : "See";
+
+ push @objects, $CurrentUser->UserObj
+ if $self->CurrentUser->HasRight(
+ Right => "${prefix}OwnDashboard",
+ Object => $RT::System,
+ );
+
+ my $groups = RT::Groups->new($CurrentUser);
+ $groups->LimitToUserDefinedGroups;
+ $groups->WithMember( PrincipalId => $CurrentUser->Id,
+ Recursively => 1 );
+
+ push @objects, grep {
+ $self->CurrentUser->HasRight(
+ Right => "${prefix}GroupDashboard",
+ Object => $_,
+ )
+ } @{ $groups->ItemsArrayRef };
+
+ push @objects, RT::System->new($CurrentUser)
+ if $CurrentUser->HasRight(
+ Right => "${prefix}Dashboard",
+ Object => $RT::System,
+ );
+
+ return @objects;
+}
+
+# ACLs
+
+sub _CurrentUserCan {
+ my $self = shift;
+ my $privacy = shift || $self->Privacy;
+ my %args = @_;
+
+ if (!defined($privacy)) {
+ $RT::Logger->debug("No privacy provided to $self->_CurrentUserCan");
+ return 0;
+ }
+
+ my $object = $self->_GetObject($privacy);
+ return 0 unless $object;
+
+ my $level;
+
+ if ($object->isa('RT::User')) { $level = 'Own' }
+ elsif ($object->isa('RT::Group')) { $level = 'Group' }
+ elsif ($object->isa('RT::System')) { $level = '' }
+ else {
+ $RT::Logger->error("Unknown object $object from privacy $privacy");
+ return 0;
+ }
+
+ # users are mildly special-cased, since we actually have to check that
+ # the user is operating on himself
+ if ($object->isa('RT::User')) {
+ return 0 unless $object->Id == $self->CurrentUser->Id;
+ }
+
+ my $right = $args{FullRight}
+ || join('', $args{Right}, $level, 'Dashboard');
+
+ # all rights, except group rights, are global
+ $object = $RT::System unless $object->isa('RT::Group');
+
+ return $self->CurrentUser->HasRight(
+ Right => $right,
+ Object => $object,
+ );
+}
+
+sub CurrentUserCanSee {
+ my $self = shift;
+ my $privacy = shift;
+
+ $self->_CurrentUserCan($privacy, Right => 'See');
+}
+
+sub CurrentUserCanCreate {
+ my $self = shift;
+ my $privacy = shift;
+
+ $self->_CurrentUserCan($privacy, Right => 'Create');
+}
+
+sub CurrentUserCanModify {
+ my $self = shift;
+ my $privacy = shift;
+
+ $self->_CurrentUserCan($privacy, Right => 'Modify');
+}
+
+sub CurrentUserCanDelete {
+ my $self = shift;
+ my $privacy = shift;
+
+ $self->_CurrentUserCan($privacy, Right => 'Delete');
+}
+
+sub CurrentUserCanSubscribe {
+ my $self = shift;
+ my $privacy = shift;
+
+ $self->_CurrentUserCan($privacy, FullRight => 'SubscribeDashboard');
+}
+
+eval "require RT::Dashboard_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Dashboard_Vendor.pm});
+eval "require RT::Dashboard_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Dashboard_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Date.pm b/rt/lib/RT/Date.pm
index 8e9383f..fc4c43c 100644
--- a/rt/lib/RT/Date.pm
+++ b/rt/lib/RT/Date.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Date - a simple Object Oriented date.
@@ -59,11 +60,6 @@ RT Date is a simple Date Object designed to be speedy and easy for RT to use
The fact that it assumes that a time of 0 means "never" is probably a bug.
-=begin testing
-
-ok (require RT::Date);
-
-=end testing
=head1 METHODS
@@ -73,12 +69,11 @@ ok (require RT::Date);
package RT::Date;
use Time::Local;
-
-use RT::Base;
+use POSIX qw(tzset);
use strict;
-use vars qw/@ISA/;
-@ISA = qw/RT::Base/;
+use warnings;
+use base qw/RT::Base/;
use vars qw($MINUTE $HOUR $DAY $WEEK $MONTH $YEAR);
@@ -86,30 +81,68 @@ $MINUTE = 60;
$HOUR = 60 * $MINUTE;
$DAY = 24 * $HOUR;
$WEEK = 7 * $DAY;
-$MONTH = 4 * $WEEK;
-$YEAR = 365 * $DAY;
-
-# {{{ sub new
-
-sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- bless ($self, $class);
- $self->CurrentUser(@_);
- $self->Unix(0);
- return $self;
+$MONTH = 30.4375 * $DAY;
+$YEAR = 365.25 * $DAY;
+
+our @MONTHS = (
+ 'Jan', # loc
+ 'Feb', # loc
+ 'Mar', # loc
+ 'Apr', # loc
+ 'May', # loc
+ 'Jun', # loc
+ 'Jul', # loc
+ 'Aug', # loc
+ 'Sep', # loc
+ 'Oct', # loc
+ 'Nov', # loc
+ 'Dec', # loc
+);
+
+our @DAYS_OF_WEEK = (
+ 'Sun', # loc
+ 'Mon', # loc
+ 'Tue', # loc
+ 'Wed', # loc
+ 'Thu', # loc
+ 'Fri', # loc
+ 'Sat', # loc
+);
+
+our @FORMATTERS = (
+ 'DefaultFormat', # loc
+ 'ISO', # loc
+ 'W3CDTF', # loc
+ 'RFC2822', # loc
+ 'RFC2616', # loc
+ 'iCal', # loc
+);
+if ( eval 'use DateTime qw(); 1;' && eval 'use DateTime::Locale qw(); 1;' &&
+ DateTime->can('format_cldr') && DateTime::Locale::root->can('date_format_full') ) {
+ push @FORMATTERS, 'LocalizedDateTime'; # loc
}
-# }}}
+=head2 new
+
+Object constructor takes one argument C<RT::CurrentUser> object.
-# {{{ sub Set
+=cut
-=head2 sub Set
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->CurrentUser(@_);
+ $self->Unix(0);
+ return $self;
+}
-takes a param hash with the fields 'Format' and 'Value'
+=head2 Set
-if $args->{'Format'} is 'unix', takes the number of seconds since the epoch
+Takes a param hash with the fields C<Format>, C<Value> and C<Timezone>.
+
+If $args->{'Format'} is 'unix', takes the number of seconds since the epoch.
If $args->{'Format'} is ISO, tries to parse an ISO date.
@@ -118,114 +151,100 @@ things out. This is a heavyweight operation that should never be called from
within RT's core. But it's really useful for something like the textbox date
entry where we let the user do whatever they want.
-If $args->{'Value'} is 0, assumes you mean never.
-
-=begin testing
-
-use_ok(RT::Date);
-my $date = RT::Date->new($RT::SystemUser);
-$date->Set(Format => 'unix', Value => '0');
-ok ($date->ISO eq '1970-01-01 00:00:00', "Set a date to midnight 1/1/1970 GMT");
-
-=end testing
+If $args->{'Value'} is 0, assumes you mean never.
=cut
sub Set {
my $self = shift;
- my %args = ( Format => 'unix',
- Value => time,
- @_ );
- if ( !$args{'Value'}
- || ( ( $args{'Value'} =~ /^\d*$/ ) and ( $args{'Value'} == 0 ) ) ) {
- $self->Unix(-1);
- return ( $self->Unix() );
- }
+ my %args = (
+ Format => 'unix',
+ Value => time,
+ Timezone => 'user',
+ @_
+ );
+
+ return $self->Unix(0) unless $args{'Value'};
if ( $args{'Format'} =~ /^unix$/i ) {
- $self->Unix( $args{'Value'} );
+ return $self->Unix( $args{'Value'} );
}
-
elsif ( $args{'Format'} =~ /^(sql|datemanip|iso)$/i ) {
- $args{'Value'} =~ s!/!-!g;
-
- if (( $args{'Value'} =~ /^(\d{4}?)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/ )
- || ( $args{'Value'} =~
- /^(\d{4}?)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)$/ )
- || ( $args{'Value'} =~
- /^(\d{4}?)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)\+00$/ )
- || ($args{'Value'} =~ /^(\d{4}?)(\d\d)(\d\d)(\d\d):(\d\d):(\d\d)$/ )
+ $args{'Value'} =~ s!/!-!g;
+
+ if ( ( $args{'Value'} =~ /^(\d{4})?(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/ )
+ || ( $args{'Value'} =~ /^(\d{4})?(\d\d)(\d\d)(\d\d):(\d\d):(\d\d)$/ )
+ || ( $args{'Value'} =~ /^(?:(\d{4})-)?(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)$/ )
+ || ( $args{'Value'} =~ /^(?:(\d{4})-)?(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)\+00$/ )
) {
- my $year = $1;
- my $mon = $2;
- my $mday = $3;
- my $hours = $4;
- my $min = $5;
- my $sec = $6;
+ my ($year, $mon, $mday, $hours, $min, $sec) = ($1, $2, $3, $4, $5, $6);
+
+ # use current year if string has no value
+ $year ||= (localtime time)[5] + 1900;
#timegm expects month as 0->11
$mon--;
- #now that we've parsed it, deal with the case where everything
- #was 0
- if ( $mon == -1 ) {
- $self->Unix(-1);
- }
- else {
-
- #Dateamnip strings aren't in GMT.
- if ( $args{'Format'} =~ /^datemanip$/i ) {
- $self->Unix(
- timelocal( $sec, $min, $hours, $mday, $mon, $year ) );
- }
-
- #ISO and SQL dates are in GMT
- else {
- $self->Unix(
- timegm( $sec, $min, $hours, $mday, $mon, $year ) );
- }
-
- $self->Unix(-1) unless $self->Unix;
- }
+ #now that we've parsed it, deal with the case where everything was 0
+ return $self->Unix(0) if $mon < 0 || $mon > 11;
+
+ my $tz = lc $args{'Format'} eq 'datemanip'? 'user': 'utc';
+ $self->Unix( $self->Timelocal( $tz, $sec, $min, $hours, $mday, $mon, $year ) );
+
+ $self->Unix(0) unless $self->Unix > 0;
}
else {
- use Carp;
- Carp::cluck;
- $RT::Logger->debug(
- "Couldn't parse date $args{'Value'} as a $args{'Format'}");
-
+ $RT::Logger->warning(
+ "Couldn't parse date '$args{'Value'}' as a $args{'Format'} format"
+ );
+ return $self->Unix(0);
}
}
elsif ( $args{'Format'} =~ /^unknown$/i ) {
require Time::ParseDate;
-
- #Convert it to an ISO format string
-
- my $date = Time::ParseDate::parsedate($args{'Value'},
- UK => $RT::DateDayBeforeMonth,
- PREFER_PAST => $RT::AmbiguousDayInPast,
- PREFER_FUTURE => !($RT::AmbiguousDayInPast));
-
- #This date has now been set to a date in the _local_ timezone.
- #since ISO dates are known to be in GMT (for RT's purposes);
-
- $RT::Logger->debug( "RT::Date used date::parse to make "
- . $args{'Value'}
- . " $date\n" );
-
- return ( $self->Set( Format => 'unix', Value => "$date" ) );
+ # the module supports only legacy timezones like PDT or EST...
+ # so we parse date as GMT and later apply offset, this only
+ # should be applied to absolute times, so compensate shift in NOW
+ my $now = time;
+ $now += ($self->Localtime( $args{Timezone}, $now ))[9];
+ my $date = Time::ParseDate::parsedate(
+ $args{'Value'},
+ GMT => 1,
+ NOW => $now,
+ UK => RT->Config->Get('DateDayBeforeMonth'),
+ PREFER_PAST => RT->Config->Get('AmbiguousDayInPast'),
+ PREFER_FUTURE => RT->Config->Get('AmbiguousDayInFuture'),
+ );
+ # apply timezone offset
+ $date -= ($self->Localtime( $args{Timezone}, $date ))[9];
+
+ $RT::Logger->debug(
+ "RT::Date used Time::ParseDate to make '$args{'Value'}' $date\n"
+ );
+
+ return $self->Set( Format => 'unix', Value => $date);
}
else {
- die "Unknown Date format: " . $args{'Format'} . "\n";
+ $RT::Logger->error(
+ "Unknown Date format: $args{'Format'}\n"
+ );
+ return $self->Unix(0);
}
- return ( $self->Unix() );
+ return $self->Unix;
}
-# }}}
+=head2 SetToNow
-# {{{ sub SetToMidnight
+Set the object's time to the current time. Takes no arguments
+and returns unix time.
+
+=cut
+
+sub SetToNow {
+ return $_[0]->Unix(time);
+}
=head2 SetToMidnight [Timezone => 'utc']
@@ -236,131 +255,114 @@ Arguments:
=over 4
-=item Timezone - Timezone context C<server> or C<UTC>
+=item Timezone
+
+Timezone context C<user>, C<server> or C<UTC>. See also L</Timezone>.
+
+=back
=cut
sub SetToMidnight {
my $self = shift;
- my %args = ( Timezone => 'UTC', @_ );
- if ( lc $args{'Timezone'} eq 'server' ) {
- $self->Unix( Time::Local::timelocal( 0,0,0,(localtime $self->Unix)[3..7] ) );
- } else {
- $self->Unix( Time::Local::timegm( 0,0,0,(gmtime $self->Unix)[3..7] ) );
- }
- return ($self->Unix);
-}
-
-
-# }}}
-
-# {{{ sub SetToNow
-sub SetToNow {
- my $self = shift;
- return($self->Set(Format => 'unix', Value => time))
+ my %args = ( Timezone => '', @_ );
+ my $new = $self->Timelocal(
+ $args{'Timezone'},
+ 0,0,0,($self->Localtime( $args{'Timezone'} ))[3..9]
+ );
+ return $self->Unix( $new );
}
-# }}}
-
-# {{{ sub Diff
=head2 Diff
-Takes either an RT::Date object or the date in unixtime format as a string
+Takes either an C<RT::Date> object or the date in unixtime format as a string,
+if nothing is specified uses the current time.
-Returns the differnce between $self and that time as a number of seconds
+Returns the differnce between the time in the current object and that time
+as a number of seconds. Returns C<undef> if any of two compared values is
+incorrect or not set.
=cut
sub Diff {
my $self = shift;
my $other = shift;
-
- if (ref($other) eq 'RT::Date') {
- $other=$other->Unix;
+ $other = time unless defined $other;
+ if ( UNIVERSAL::isa( $other, 'RT::Date' ) ) {
+ $other = $other->Unix;
}
- return ($self->Unix - $other);
-}
-# }}}
+ return undef unless $other=~ /^\d+$/ && $other > 0;
-# {{{ sub DiffAsString
+ my $unix = $self->Unix;
+ return undef unless $unix > 0;
-=head2 sub DiffAsString
+ return $unix - $other;
+}
+
+=head2 DiffAsString
-Takes either an RT::Date object or the date in unixtime format as a string
+Takes either an C<RT::Date> object or the date in unixtime format as a string,
+if nothing is specified uses the current time.
-Returns the differnce between $self and that time as a number of seconds as
-as string fit for human consumption
+Returns the differnce between C<$self> and that time as a number of seconds as
+a localized string fit for human consumption. Returns empty string if any of
+two compared values is incorrect or not set.
=cut
sub DiffAsString {
my $self = shift;
- my $other = shift;
-
-
- if ($other < 1) {
- return ("");
- }
- if ($self->Unix < 1) {
- return("");
- }
- my $diff = $self->Diff($other);
+ my $diff = $self->Diff( @_ );
+ return '' unless defined $diff;
- return ($self->DurationAsString($diff));
+ return $self->DurationAsString( $diff );
}
-# }}}
-
-# {{{ sub DurationAsString
-
=head2 DurationAsString
-Takes a number of seconds. returns a string describing that duration
+Takes a number of seconds. Returns a localized string describing
+that duration.
=cut
sub DurationAsString {
-
my $self = shift;
- my $duration = shift;
-
- my ( $negative, $s );
+ my $duration = int shift;
- $negative = 1 if ( $duration < 0 );
+ my ( $negative, $s, $time_unit );
+ $negative = 1 if $duration < 0;
+ $duration = abs $duration;
- $duration = abs($duration);
-
- my $time_unit;
if ( $duration < $MINUTE ) {
$s = $duration;
$time_unit = $self->loc("sec");
}
elsif ( $duration < ( 2 * $HOUR ) ) {
- $s = int( $duration / $MINUTE );
+ $s = int( $duration / $MINUTE + 0.5 );
$time_unit = $self->loc("min");
}
elsif ( $duration < ( 2 * $DAY ) ) {
- $s = int( $duration / $HOUR );
+ $s = int( $duration / $HOUR + 0.5 );
$time_unit = $self->loc("hours");
}
elsif ( $duration < ( 2 * $WEEK ) ) {
- $s = int( $duration / $DAY );
+ $s = int( $duration / $DAY + 0.5 );
$time_unit = $self->loc("days");
}
elsif ( $duration < ( 2 * $MONTH ) ) {
- $s = int( $duration / $WEEK );
+ $s = int( $duration / $WEEK + 0.5 );
$time_unit = $self->loc("weeks");
}
elsif ( $duration < $YEAR ) {
- $s = int( $duration / $MONTH );
+ $s = int( $duration / $MONTH + 0.5 );
$time_unit = $self->loc("months");
}
else {
- $s = int( $duration / $YEAR );
+ $s = int( $duration / $YEAR + 0.5 );
$time_unit = $self->loc("years");
}
- if ($negative) {
+ if ( $negative ) {
return $self->loc( "[_1] [_2] ago", $s, $time_unit );
}
else {
@@ -368,47 +370,46 @@ sub DurationAsString {
}
}
-# }}}
+=head2 AgeAsString
-# {{{ sub AgeAsString
+Takes nothing. Returns a string that's the differnce between the
+time in the object and now.
-=head2 sub AgeAsString
+=cut
-Takes nothing
+sub AgeAsString { return $_[0]->DiffAsString }
-Returns a string that's the differnce between the time in the object and now
-=cut
-sub AgeAsString {
- my $self = shift;
- return ($self->DiffAsString(time));
- }
-# }}}
+=head2 AsString
-# {{{ sub AsString
+Returns the object's time as a localized string with curent user's prefered
+format and timezone.
-=head2 sub AsString
-
-Returns the object\'s time as a string with the current timezone.
+If the current user didn't choose prefered format then system wide setting is
+used or L</DefaultFormat> if the latter is not specified. See config option
+C<DateTimeFormat>.
=cut
sub AsString {
my $self = shift;
- return ($self->loc("Not set")) if ($self->Unix <= 0);
+ my %args = (@_);
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($self->Unix);
+ return $self->loc("Not set") unless $self->Unix > 0;
- return $self->loc("[_1] [_2] [_3] [_4]:[_5]:[_6] [_7]", $self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900));
-}
-# }}}
+ my $format = RT->Config->Get( 'DateTimeFormat', $self->CurrentUser ) || 'DefaultFormat';
+ $format = { Format => $format } unless ref $format;
+ %args = (%$format, %args);
-# {{{ GetWeekday
+ return $self->Get( Timezone => 'user', %args );
+}
=head2 GetWeekday DAY
-Takes an integer day of week and returns a localized string for that day of week
+Takes an integer day of week and returns a localized string for
+that day of week. Valid values are from range 0-6, Note that B<0
+is sunday>.
=cut
@@ -416,227 +417,628 @@ sub GetWeekday {
my $self = shift;
my $dow = shift;
- return $self->loc('Mon.') if ($dow == 1);
- return $self->loc('Tue.') if ($dow == 2);
- return $self->loc('Wed.') if ($dow == 3);
- return $self->loc('Thu.') if ($dow == 4);
- return $self->loc('Fri.') if ($dow == 5);
- return $self->loc('Sat.') if ($dow == 6);
- return $self->loc('Sun.') if ($dow == 0);
+ return $self->loc($DAYS_OF_WEEK[$dow])
+ if $DAYS_OF_WEEK[$dow];
+ return '';
}
-# }}}
-
-# {{{ GetMonth
-
-=head2 GetMonth DAY
+=head2 GetMonth MONTH
-Takes an integer month and returns a localized string for that month
+Takes an integer month and returns a localized string for that month.
+Valid values are from from range 0-11.
=cut
sub GetMonth {
my $self = shift;
- my $mon = shift;
-
- # We do this rather than an array so that we don't call localize 12x what we need to
- return $self->loc('Jan.') if ($mon == 0);
- return $self->loc('Feb.') if ($mon == 1);
- return $self->loc('Mar.') if ($mon == 2);
- return $self->loc('Apr.') if ($mon == 3);
- return $self->loc('May.') if ($mon == 4);
- return $self->loc('Jun.') if ($mon == 5);
- return $self->loc('Jul.') if ($mon == 6);
- return $self->loc('Aug.') if ($mon == 7);
- return $self->loc('Sep.') if ($mon == 8);
- return $self->loc('Oct.') if ($mon == 9);
- return $self->loc('Nov.') if ($mon == 10);
- return $self->loc('Dec.') if ($mon == 11);
-}
-
-# }}}
+ my $mon = shift;
-# {{{ sub AddSeconds
+ return $self->loc($MONTHS[$mon])
+ if $MONTHS[$mon];
+ return '';
+}
-=head2 sub AddSeconds
+=head2 AddSeconds SECONDS
-Takes a number of seconds as a string
+Takes a number of seconds and returns the new unix time.
-Returns the new time
+Negative value can be used to substract seconds.
=cut
sub AddSeconds {
my $self = shift;
- my $delta = shift;
+ my $delta = shift or return $self->Unix;
$self->Set(Format => 'unix', Value => ($self->Unix + $delta));
-
+
return ($self->Unix);
-
+}
+
+=head2 AddDays [DAYS]
+Adds C<24 hours * DAYS> to the current time. Adds one day when
+no argument is specified. Negative value can be used to substract
+days.
+
+Returns new unix time.
+
+=cut
+
+sub AddDays {
+ my $self = shift;
+ my $days = shift || 1;
+ return $self->AddSeconds( $days * $DAY );
}
-# }}}
+=head2 AddDay
+
+Adds 24 hours to the current time. Returns new unix time.
-# {{{ sub AddDays
+=cut
-=head2 AddDays $DAYS
+sub AddDay { return $_[0]->AddSeconds($DAY) }
-Adds 24 hours * $DAYS to the current time
+=head2 Unix [unixtime]
+
+Optionally takes a date in unix seconds since the epoch format.
+Returns the number of seconds since the epoch
=cut
-sub AddDays {
+sub Unix {
+ my $self = shift;
+ $self->{'time'} = int(shift || 0) if @_;
+ return $self->{'time'};
+}
+
+=head2 DateTime
+
+Alias for L</Get> method. Arguments C<Date> and <Time>
+are fixed to true values, other arguments could be used
+as described in L</Get>.
+
+=cut
+
+sub DateTime {
my $self = shift;
- my $days = shift;
- $self->AddSeconds($days * $DAY);
-
+ unless (defined $self) {
+ use Carp; Carp::confess("undefined $self");
+ }
+ return $self->Get( @_, Date => 1, Time => 1 );
}
-# }}}
+=head2 Date
+
+Takes Format argument which allows you choose date formatter.
+Pass throught other arguments to the formatter method.
-# {{{ sub AddDay
+Returns the object's formatted date. Default formatter is ISO.
-=head2 AddDay
+=cut
+
+sub Date {
+ my $self = shift;
+ return $self->Get( @_, Date => 1, Time => 0 );
+}
+
+=head2 Time
-Adds 24 hours to the current time
=cut
-sub AddDay {
+sub Time {
my $self = shift;
- $self->AddSeconds($DAY);
-
+ return $self->Get( @_, Date => 0, Time => 1 );
}
-# }}}
+=head2 Get
-# {{{ sub Unix
+Returnsa a formatted and localized string that represets time of
+the current object.
-=head2 sub Unix [unixtime]
-Optionally takes a date in unix seconds since the epoch format.
-Returns the number of seconds since the epoch
+=cut
+
+sub Get
+{
+ my $self = shift;
+ my %args = (Format => 'ISO', @_);
+ my $formatter = $args{'Format'};
+ $formatter = 'ISO' unless $self->can($formatter);
+ return $self->$formatter( %args );
+}
+
+=head2 Output formatters
+
+Fomatter is a method that returns date and time in different configurable
+format.
+
+Each method takes several arguments:
+
+=over 1
+
+=item Date
+
+=item Time
+
+=item Timezone - Timezone context C<server>, C<user> or C<UTC>
+
+=back
+
+Formatters may also add own arguments to the list, for example
+in RFC2822 format day of time in output is optional so it
+understand boolean argument C<DayOfTime>.
+
+=head3 Formatters
+
+Returns an array of available formatters.
=cut
-sub Unix {
+sub Formatters
+{
my $self = shift;
+
+ return @FORMATTERS;
+}
+
+=head3 DefaultFormat
+
+=cut
+
+sub DefaultFormat
+{
+ my $self = shift;
+ my %args = ( Date => 1,
+ Time => 1,
+ Timezone => '',
+ Seconds => 1,
+ @_,
+ );
- $self->{'time'} = shift if (@_);
-
- return ($self->{'time'});
+ # 0 1 2 3 4 5 6 7 8 9
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime($args{'Timezone'});
+ $wday = $self->GetWeekday($wday);
+ $mon = $self->GetMonth($mon);
+ ($mday, $hour, $min, $sec) = map { sprintf "%02d", $_ } ($mday, $hour, $min, $sec);
+
+ if( $args{'Date'} && !$args{'Time'} ) {
+ return $self->loc('[_1] [_2] [_3] [_4]',
+ $wday,$mon,$mday,$year);
+ } elsif( !$args{'Date'} && $args{'Time'} ) {
+ if( $args{'Seconds'} ) {
+ return $self->loc('[_1]:[_2]:[_3]',
+ $hour,$min,$sec);
+ } else {
+ return $self->loc('[_1]:[_2]',
+ $hour,$min);
+ }
+ } else {
+ if( $args{'Seconds'} ) {
+ return $self->loc('[_1] [_2] [_3] [_4]:[_5]:[_6] [_7]',
+ $wday,$mon,$mday,$hour,$min,$sec,$year);
+ } else {
+ return $self->loc('[_1] [_2] [_3] [_4]:[_5] [_6]',
+ $wday,$mon,$mday,$hour,$min,$year);
+ }
+ }
}
-# }}}
-# {{{ sub ISO
+=head3 LocalizedDateTime
-=head2 ISO
+Returns date and time as string, with user localization.
-Takes nothing
+Supports arguments: C<DateFormat> and C<TimeFormat> which may contains date and
+time format as specified in DateTime::Locale (default to full_date_format and
+medium_time_format), C<AbbrDay> and C<AbbrMonth> which may be set to 0 if
+you want full Day/Month names instead of abbreviated ones.
-Returns the object's date in ISO format
+Require optionnal DateTime::Locale module.
=cut
-sub ISO {
- my $self=shift;
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst, $date) ;
+sub LocalizedDateTime
+{
+ my $self = shift;
+ my %args = ( Date => 1,
+ Time => 1,
+ Timezone => '',
+ DateFormat => 'date_format_full',
+ TimeFormat => 'time_format_medium',
+ AbbrDay => 1,
+ AbbrMonth => 1,
+ @_,
+ );
+
+ return $self->loc("DateTime module missing") unless ( eval 'use DateTime qw(); 1;' );
+ return $self->loc("DateTime::Locale module missing") unless ( eval 'use DateTime::Locale qw(); 1;' );
+ return $self->loc("DateTime doesn't support format_cldr, you must upgrade to use this feature")
+ unless can DateTime::('format_cldr');
+
+
+ my $date_format = $args{'DateFormat'};
+ my $time_format = $args{'TimeFormat'};
+
+ my $lang = $self->CurrentUser->UserObj->Lang;
+ unless ($lang) {
+ require I18N::LangTags::Detect;
+ $lang = ( I18N::LangTags::Detect::detect(), 'en' )[0];
+ }
- return ('1970-01-01 00:00:00') if ($self->Unix == -1);
- # 0 1 2 3 4 5 6 7 8
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($self->Unix);
- #make the year YYYY
- $year+=1900;
+ my $formatter = DateTime::Locale->load($lang);
+ return $self->loc("DateTime::Locale doesn't support date_format_full, you must upgrade to use this feature")
+ unless $formatter->can('date_format_full');
+ $date_format = $formatter->$date_format;
+ $time_format = $formatter->$time_format;
+ $date_format =~ s/EEEE/EEE/g if ( $args{'AbbrDay'} );
+ $date_format =~ s/MMMM/MMM/g if ( $args{'AbbrMonth'} );
+
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime($args{'Timezone'});
+ $mon++;
+ my $tz = $self->Timezone($args{'Timezone'});
+
+ # FIXME : another way to call this module without conflict with local
+ # DateTime method?
+ my $dt = new DateTime::( locale => $lang,
+ time_zone => $tz,
+ year => $year,
+ month => $mon,
+ day => $mday,
+ hour => $hour,
+ minute => $min,
+ second => $sec,
+ nanosecond => 0,
+ );
+
+ if ( $args{'Date'} && !$args{'Time'} ) {
+ return $dt->format_cldr($date_format);
+ } elsif ( !$args{'Date'} && $args{'Time'} ) {
+ return $dt->format_cldr($time_format);
+ } else {
+ return $dt->format_cldr($date_format) . " " . $dt->format_cldr($time_format);
+ }
+}
+
+=head3 ISO
+
+Returns the object's date in ISO format C<YYYY-MM-DD mm:hh:ss>.
+ISO format is locale independant, but adding timezone offset info
+is not implemented yet.
+
+Supports arguments: C<Timezone>, C<Date>, C<Time> and C<Seconds>.
+See </Output formatters> for description of arguments.
+
+=cut
+
+sub ISO {
+ my $self = shift;
+ my %args = ( Date => 1,
+ Time => 1,
+ Timezone => '',
+ Seconds => 1,
+ @_,
+ );
+ # 0 1 2 3 4 5 6 7 8 9
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime($args{'Timezone'});
#the month needs incrementing, as gmtime returns 0-11
$mon++;
-
- $date = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year,$mon,$mday, $hour,$min,$sec);
-
- return ($date);
+
+ my $res = '';
+ $res .= sprintf("%04d-%02d-%02d", $year, $mon, $mday) if $args{'Date'};
+ $res .= sprintf(' %02d:%02d', $hour, $min) if $args{'Time'};
+ $res .= sprintf(':%02d', $sec, $min) if $args{'Time'} && $args{'Seconds'};
+ $res =~ s/^\s+//;
+
+ return $res;
}
-# }}}
+=head3 W3CDTF
-# {{{ sub Date
+Returns the object's date and time in W3C date time format
+(L<http://www.w3.org/TR/NOTE-datetime>).
+
+Format is locale independand and is close enought to ISO, but
+note that date part is B<not optional> and output string
+has timezone offset mark in C<[+-]hh:mm> format.
+
+Supports arguments: C<Timezone>, C<Time> and C<Seconds>.
+See </Output formatters> for description of arguments.
+
+=cut
+
+sub W3CDTF {
+ my $self = shift;
+ my %args = (
+ Time => 1,
+ Timezone => '',
+ Seconds => 1,
+ @_,
+ Date => 1,
+ );
+ # 0 1 2 3 4 5 6 7 8 9
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime( $args{'Timezone'} );
+
+ #the month needs incrementing, as gmtime returns 0-11
+ $mon++;
+
+ my $res = '';
+ $res .= sprintf("%04d-%02d-%02d", $year, $mon, $mday);
+ if ( $args{'Time'} ) {
+ $res .= sprintf('T%02d:%02d', $hour, $min);
+ $res .= sprintf(':%02d', $sec, $min) if $args{'Seconds'};
+ if ( $offset ) {
+ $res .= sprintf "%s%02d:%02d", $self->_SplitOffset( $offset );
+ } else {
+ $res .= 'Z';
+ }
+ }
+
+ return $res;
+};
-=head2 Date
-Takes nothing
+=head3 RFC2822 (MIME)
-Returns the object's date in yyyy-mm-dd format; this is the same as
-the ISO format without the time
+Returns the object's date and time in RFC2822 format,
+for example C<Sun, 06 Nov 1994 08:49:37 +0000>.
+Format is locale independand as required by RFC. Time
+part always has timezone offset in digits with sign prefix.
+
+Supports arguments: C<Timezone>, C<Date>, C<Time>, C<DayOfWeek>
+and C<Seconds>. See </Output formatters> for description of
+arguments.
=cut
-sub Date {
+sub RFC2822 {
my $self = shift;
- my ($date, $time) = split ' ', $self->ISO;
- return $date;
+ my %args = ( Date => 1,
+ Time => 1,
+ Timezone => '',
+ DayOfWeek => 1,
+ Seconds => 1,
+ @_,
+ );
+
+ # 0 1 2 3 4 5 6 7 8 9
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime($args{'Timezone'});
+
+ my ($date, $time) = ('','');
+ $date .= "$DAYS_OF_WEEK[$wday], " if $args{'DayOfWeek'} && $args{'Date'};
+ $date .= "$mday $MONTHS[$mon] $year" if $args{'Date'};
+
+ if ( $args{'Time'} ) {
+ $time .= sprintf("%02d:%02d", $hour, $min);
+ $time .= sprintf(":%02d", $sec) if $args{'Seconds'};
+ $time .= sprintf " %s%02d%02d", $self->_SplitOffset( $offset );
+ }
+
+ return join ' ', grep $_, ($date, $time);
}
-# }}}}
+=head3 RFC2616 (HTTP)
-# {{{ sub Time
+Returns the object's date and time in RFC2616 (HTTP/1.1) format,
+for example C<Sun, 06 Nov 1994 08:49:37 GMT>. While the RFC describes
+version 1.1 of HTTP, but the same form date can be used in version 1.0.
-=head2 Time
+Format is fixed length, locale independand and always represented in GMT
+what makes it quite useless for users, but any date in HTTP transfers
+must be presented using this format.
-Takes nothing
+ HTTP-date = rfc1123 | ...
+ rfc1123 = wkday "," SP date SP time SP "GMT"
+ date = 2DIGIT SP month SP 4DIGIT
+ ; day month year (e.g., 02 Jun 1982)
+ time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
+ ; 00:00:00 - 23:59:59
+ wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"
+ month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun"
+ | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"
-Returns the object's time in hh:mm:ss format; this is the same as
-the ISO format without the date
+Supports arguments: C<Date> and C<Time>, but you should use them only for
+some personal reasons, RFC2616 doesn't define any optional parts.
+See </Output formatters> for description of arguments.
=cut
-sub Time {
+sub RFC2616 {
+ my $self = shift;
+ my %args = ( Date => 1, Time => 1,
+ @_,
+ Timezone => 'utc',
+ Seconds => 1, DayOfWeek => 1,
+ );
+
+ my $res = $self->RFC2822( @_ );
+ $res =~ s/\s*[+-]\d\d\d\d$/ GMT/ if $args{'Time'};
+ return $res;
+}
+
+=head4 iCal
+
+Returns the object's date and time in iCalendar format,
+
+Supports arguments: C<Date> and C<Time>.
+See </Output formatters> for description of arguments.
+
+=cut
+
+sub iCal {
my $self = shift;
- my ($date, $time) = split ' ', $self->ISO;
- return $time;
+ my %args = (
+ Date => 1, Time => 1,
+ @_,
+ );
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime( 'utc' );
+
+ #the month needs incrementing, as gmtime returns 0-11
+ $mon++;
+
+ my $res;
+ if ( $args{'Date'} && !$args{'Time'} ) {
+ $res = sprintf( '%04d%02d%02d', $year, $mon, $mday );
+ }
+ elsif ( !$args{'Date'} && $args{'Time'} ) {
+ $res = sprintf( 'T%02d%02d%02dZ', $hour, $min, $sec );
+ }
+ else {
+ $res = sprintf( '%04d%02d%02dT%02d%02d%02dZ', $year, $mon, $mday, $hour, $min, $sec );
+ }
+ return $res;
+}
+
+# it's been added by mistake in 3.8.0
+sub iCalDate { return (shift)->iCal( Time => 0, @_ ) }
+
+sub _SplitOffset {
+ my ($self, $offset) = @_;
+ my $sign = $offset < 0? '-': '+';
+ $offset = int( (abs $offset) / 60 + 0.001 );
+ my $mins = $offset % 60;
+ my $hours = int( $offset/60 + 0.001 );
+ return $sign, $hours, $mins;
}
-# }}}}
+=head2 Timezones handling
-# {{{ sub W3CDTF
+=head3 Localtime $context [$time]
-=head2 W3CDTF
+Takes one mandatory argument C<$context>, which determines whether
+we want "user local", "system" or "UTC" time. Also, takes optional
+argument unix C<$time>, default value is the current unix time.
-Takes nothing
+Returns object's date and time in the format provided by perl's
+builtin functions C<localtime> and C<gmtime> with two exceptions:
-Returns the object's date in W3C DTF format
+1) "Year" is a four-digit year, rather than "years since 1900"
+
+2) The last element of the array returned is C<offset>, which
+represents timezone offset against C<UTC> in seconds.
=cut
-sub W3CDTF {
+sub Localtime
+{
my $self = shift;
- my $date = $self->ISO . 'Z';
- $date =~ s/ /T/;
- return $date;
-};
+ my $tz = $self->Timezone(shift);
-# }}}
+ my $unix = shift || $self->Unix;
+ $unix = 0 unless $unix >= 0;
+
+ my @local;
+ if ($tz eq 'UTC') {
+ @local = gmtime($unix);
+ } else {
+ {
+ local $ENV{'TZ'} = $tz;
+ ## Using POSIX::tzset fixes a bug where the TZ environment variable
+ ## is cached.
+ POSIX::tzset();
+ @local = localtime($unix);
+ }
+ POSIX::tzset(); # return back previouse value
+ }
+ $local[5] += 1900; # change year to 4+ digits format
+ my $offset = Time::Local::timegm_nocheck(@local) - $unix;
+ return @local, $offset;
+}
+
+=head3 Timelocal $context @time
+
+Takes argument C<$context>, which determines whether we should
+treat C<@time> as "user local", "system" or "UTC" time.
+
+C<@time> is array returned by L<Localtime> functions. Only first
+six elements are mandatory - $sec, $min, $hour, $mday, $mon and $year.
+You may pass $wday, $yday and $isdst, these are ignored.
+
+If you pass C<$offset> as ninth argument, it's used instead of
+C<$context>. It's done such way as code
+C<$self->Timelocal('utc', $self->Localtime('server'))> doesn't
+makes much sense and most probably would produce unexpected
+result, so the method ignore 'utc' context and uses offset
+returned by L<Localtime> method.
+
+=cut
+
+sub Timelocal {
+ my $self = shift;
+ my $tz = shift;
+ if ( defined $_[9] ) {
+ return timegm(@_[0..5]) - $_[9];
+ } else {
+ $tz = $self->Timezone( $tz );
+ if ( $tz eq 'UTC' ) {
+ return Time::Local::timegm(@_[0..5]);
+ } else {
+ my $rv;
+ {
+ local $ENV{'TZ'} = $tz;
+ ## Using POSIX::tzset fixes a bug where the TZ environment variable
+ ## is cached.
+ POSIX::tzset();
+ $rv = Time::Local::timelocal(@_[0..5]);
+ };
+ POSIX::tzset(); # switch back to previouse value
+ return $rv;
+ }
+ }
+}
+
+
+=head3 Timezone $context
+
+Returns the timezone name.
+
+Takes one argument, C<$context> argument which could be C<user>, C<server> or C<utc>.
-# {{{ sub LocalTimezone
+=over
-=head2 LocalTimezone
+=item user
- Returns the current timezone. For now, draws off a system timezone, RT::Timezone. Eventually, this may
-pull from a 'Timezone' attribute of the CurrentUser
+Default value is C<user> that mean it returns current user's Timezone value.
+
+=item server
+
+If context is C<server> it returns value of the C<Timezone> RT config option.
+
+=item utc
+
+If both server's and user's timezone names are undefined returns 'UTC'.
+
+=back
=cut
-sub LocalTimezone {
+sub Timezone {
my $self = shift;
+ my $context = lc(shift);
- return $self->CurrentUser->Timezone
- if $self->CurrentUser and $self->CurrentUser->can('Timezone');
+ $context = 'utc' unless $context =~ /^(?:utc|server|user)$/i;
- return ($RT::Timezone);
+ my $tz;
+ if( $context eq 'user' ) {
+ $tz = $self->CurrentUser->UserObj->Timezone;
+ } elsif( $context eq 'server') {
+ $tz = RT->Config->Get('Timezone');
+ } else {
+ $tz = 'UTC';
+ }
+ $tz ||= RT->Config->Get('Timezone') || 'UTC';
+ $tz = 'UTC' if lc $tz eq 'gmt';
+ return $tz;
}
-# }}}
eval "require RT::Date_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Date_Vendor.pm});
diff --git a/rt/lib/RT/EmailParser.pm b/rt/lib/RT/EmailParser.pm
index b272020..7890f49 100644
--- a/rt/lib/RT/EmailParser.pm
+++ b/rt/lib/RT/EmailParser.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,13 +45,16 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::EmailParser;
use base qw/RT::Base/;
use strict;
-use Mail::Address;
+use warnings;
+
+use Email::Address;
use MIME::Entity;
use MIME::Head;
use MIME::Parser;
@@ -68,11 +71,6 @@ use File::Temp qw/tempdir/;
=head1 DESCRIPTION
-=begin testing
-
-ok(require RT::EmailParser);
-
-=end testing
=head1 METHODS
@@ -92,21 +90,18 @@ sub new {
}
-# {{{ sub SmartParseMIMEEntityFromScalar
-
-=head2 SmartParseMIMEEntityFromScalar { Message => SCALAR_REF, Decode => BOOL }
+=head2 SmartParseMIMEEntityFromScalar Message => SCALAR_REF [, Decode => BOOL, Exact => BOOL ] }
-Parse a message stored in a scalar from scalar_ref
+Parse a message stored in a scalar from scalar_ref.
=cut
sub SmartParseMIMEEntityFromScalar {
my $self = shift;
- my %args = ( Message => undef, Decode => 1, @_ );
+ my %args = ( Message => undef, Decode => 1, Exact => 0, @_ );
- my ( $fh, $temp_file );
eval {
-
+ my ( $fh, $temp_file );
for ( 1 .. 10 ) {
# on NFS and NTFS, it is possible that tempfile() conflicts
@@ -128,8 +123,9 @@ sub SmartParseMIMEEntityFromScalar {
# We have to trust the temp file's name -- untaint it
$temp_file =~ /(.*)/;
- $self->ParseMIMEEntityFromFile( $1, $args{'Decode'} );
+ my $entity = $self->ParseMIMEEntityFromFile( $1, $args{'Decode'}, $args{'Exact'} );
unlink($1);
+ return $entity;
}
}
};
@@ -137,14 +133,11 @@ sub SmartParseMIMEEntityFromScalar {
#If for some reason we weren't able to parse the message using a temp file
# try it with a scalar
if ( $@ || !$self->Entity ) {
- $self->ParseMIMEEntityFromScalar( $args{'Message'}, $args{'Decode'} );
+ return $self->ParseMIMEEntityFromScalar( $args{'Message'}, $args{'Decode'}, $args{'Exact'} );
}
}
-# }}}
-
-# {{{ sub ParseMIMEEntityFromSTDIN
=head2 ParseMIMEEntityFromSTDIN
@@ -154,17 +147,12 @@ Parse a message from standard input
sub ParseMIMEEntityFromSTDIN {
my $self = shift;
- my $postprocess = (@_ ? shift : 1);
- return $self->ParseMIMEEntityFromFileHandle(\*STDIN, $postprocess);
+ return $self->ParseMIMEEntityFromFileHandle(\*STDIN, @_);
}
-# }}}
-
-# {{{ ParseMIMEEntityFromScalar
-
=head2 ParseMIMEEntityFromScalar $message
-Takes either a scalar or a reference to a scalr which contains a stringified MIME message.
+Takes either a scalar or a reference to a scalar which contains a stringified MIME message.
Parses it.
Returns true if it wins.
@@ -174,15 +162,9 @@ Returns false if it loses.
sub ParseMIMEEntityFromScalar {
my $self = shift;
- my $message = shift;
- my $postprocess = (@_ ? shift : 1);
- $self->_ParseMIMEEntity($message,'parse_data', $postprocess);
+ return $self->_ParseMIMEEntity( shift, 'parse_data', @_ );
}
-# }}}
-
-# {{{ ParseMIMEEntityFromFilehandle *FH
-
=head2 ParseMIMEEntityFromFilehandle *FH
Parses a mime entity from a filehandle passed in as an argument
@@ -191,15 +173,9 @@ Parses a mime entity from a filehandle passed in as an argument
sub ParseMIMEEntityFromFileHandle {
my $self = shift;
- my $filehandle = shift;
- my $postprocess = (@_ ? shift : 1);
- $self->_ParseMIMEEntity($filehandle,'parse', $postprocess);
+ return $self->_ParseMIMEEntity( shift, 'parse', @_ );
}
-# }}}
-
-# {{{ ParseMIMEEntityFromFile
-
=head2 ParseMIMEEntityFromFile
Parses a mime entity from a filename passed in as an argument
@@ -208,24 +184,21 @@ Parses a mime entity from a filename passed in as an argument
sub ParseMIMEEntityFromFile {
my $self = shift;
- my $file = shift;
- my $postprocess = (@_ ? shift : 1);
- $self->_ParseMIMEEntity($file,'parse_open',$postprocess);
+ return $self->_ParseMIMEEntity( shift, 'parse_open', @_ );
}
-# }}}
-# {{{ _ParseMIMEEntity
sub _ParseMIMEEntity {
my $self = shift;
my $message = shift;
my $method = shift;
- my $postprocess = shift;
- # Create a new parser object:
+ my $postprocess = (@_ ? shift : 1);
+ my $exact = shift;
+ # Create a new parser object:
my $parser = MIME::Parser->new();
$self->_SetupMIMEParser($parser);
-
+ $parser->decode_bodies(0) if $exact;
# TODO: XXX 3.0 we really need to wrap this in an eval { }
unless ( $self->{'entity'} = $parser->$method($message) ) {
@@ -237,15 +210,54 @@ sub _ParseMIMEEntity {
return ( undef);
}
}
- if ($postprocess) {
- $self->_PostProcessNewEntity() ;
- }
+ $self->_PostProcessNewEntity if $postprocess;
+
+ return $self->{'entity'};
}
-# }}}
+sub _DecodeBodies {
+ my $self = shift;
+ return unless $self->{'entity'};
+
+ my @parts = $self->{'entity'}->parts_DFS;
+ $self->_DecodeBody($_) foreach @parts;
+}
-# {{{ _PostProcessNewEntity
+sub _DecodeBody {
+ my $self = shift;
+ my $entity = shift;
+
+ my $old = $entity->bodyhandle or return;
+ return unless $old->is_encoded;
+
+ require MIME::Decoder;
+ my $encoding = $entity->head->mime_encoding;
+ my $decoder = new MIME::Decoder $encoding;
+ unless ( $decoder ) {
+ $RT::Logger->error("Couldn't find decoder for '$encoding', switching to binary");
+ $old->is_encoded(0);
+ return;
+ }
+
+ require MIME::Body;
+ # XXX: use InCore for now, but later must switch to files
+ my $new = new MIME::Body::InCore;
+ $new->binmode(1);
+ $new->is_encoded(0);
+
+ my $source = $old->open('r') or die "couldn't open body: $!";
+ my $destination = $new->open('w') or die "couldn't open body: $!";
+ {
+ local $@;
+ eval { $decoder->decode($source, $destination) };
+ $RT::Logger->error($@) if $@;
+ }
+ $source->close or die "can't close: $!";
+ $destination->close or die "can't close: $!";
+
+ $entity->bodyhandle( $new );
+}
=head2 _PostProcessNewEntity
@@ -261,42 +273,18 @@ sub _PostProcessNewEntity {
# Unfold headers that are have embedded newlines
# Better do this before conversion or it will break
# with multiline encoded Subject (RFC2047) (fsck.com #5594)
-
$self->Head->unfold;
-
# try to convert text parts into utf-8 charset
RT::I18N::SetMIMEEntityToEncoding($self->{'entity'}, 'utf-8');
-
-
-
-
}
-# }}}
-
-# {{{ sub ParseTicketId
-
-sub ParseTicketId {
- my $self = shift;
- $RT::Logger->warnings("RT::EmailParser->ParseTicketId deprecated. You should be using RT::Interface::Email at (". join(":",caller).")");
-
- require RT::Interface::Email;
- RT::Interface::Email::ParseTicketId(@_);
-}
-
-# }}}
-
-
-
-# {{{ ParseCcAddressesFromHead
-
=head2 ParseCcAddressesFromHead HASHREF
Takes a hashref object containing QueueObj, Head and CurrentUser objects.
Returns a list of all email addresses in the To and Cc
headers b<except> the current Queue\'s email addresses, the CurrentUser\'s
-email address and anything that the $RTAddressRegexp matches.
+email address and anything that the RT->Config->Get('RTAddressRegexp') matches.
=cut
@@ -312,8 +300,8 @@ sub ParseCcAddressesFromHead {
my (@Addresses);
- my @ToObjs = Mail::Address->parse( $self->Head->get('To') );
- my @CcObjs = Mail::Address->parse( $self->Head->get('Cc') );
+ my @ToObjs = Email::Address->parse( $self->Head->get('To') );
+ my @CcObjs = Email::Address->parse( $self->Head->get('Cc') );
foreach my $AddrObj ( @ToObjs, @CcObjs ) {
my $Address = $AddrObj->address;
@@ -329,104 +317,15 @@ sub ParseCcAddressesFromHead {
return (@Addresses);
}
-# }}}
-
-# {{{ ParseSenderAdddressFromHead
-
-=head2 ParseSenderAddressFromHead
-
-Takes a MIME::Header object. Returns a tuple: (user@host, friendly name)
-of the From (evaluated in order of Reply-To:, From:, Sender)
-
-=cut
-
-sub ParseSenderAddressFromHead {
- my $self = shift;
-
- #Figure out who's sending this message.
- my $From = $self->Head->get('Reply-To')
- || $self->Head->get('From')
- || $self->Head->get('Sender');
- return ( $self->ParseAddressFromHeader($From) );
-}
-
-# }}}
-
-# {{{ ParseErrorsToAdddressFromHead
-
-=head2 ParseErrorsToAddressFromHead
-
-Takes a MIME::Header object. Return a single value : user@host
-of the From (evaluated in order of Errors-To:,Reply-To:, From:, Sender)
-
-=cut
-
-sub ParseErrorsToAddressFromHead {
- my $self = shift;
-
- #Figure out who's sending this message.
-
- foreach my $header ( 'Errors-To', 'Reply-To', 'From', 'Sender' ) {
-
- # If there's a header of that name
- my $headerobj = $self->Head->get($header);
- if ($headerobj) {
- my ( $addr, $name ) = $self->ParseAddressFromHeader($headerobj);
-
- # If it's got actual useful content...
- return ($addr) if ($addr);
- }
- }
-}
-
-# }}}
-
-# {{{ ParseAddressFromHeader
-
-=head2 ParseAddressFromHeader ADDRESS
-Takes an address from $self->Head->get('Line') and returns a tuple: user@host, friendly name
-
-=cut
-
-sub ParseAddressFromHeader {
- my $self = shift;
- my $Addr = shift;
- # Perl 5.8.0 breaks when doing regex matches on utf8
- Encode::_utf8_off($Addr) if $] == 5.008;
- my @Addresses = Mail::Address->parse($Addr);
-
- my $AddrObj = $Addresses[0];
-
- unless ( ref($AddrObj) ) {
- return ( undef, undef );
- }
-
- my $Name = ( $AddrObj->phrase || $AddrObj->comment || $AddrObj->address );
-
- #Lets take the from and load a user object.
- my $Address = $AddrObj->address;
-
- return ( $Address, $Name );
-}
-
-# }}}
-
-# {{{ IsRTAddress
=head2 IsRTaddress ADDRESS
Takes a single parameter, an email address.
-Returns true if that address matches the $RTAddressRegexp.
+Returns true if that address matches the C<RTAddressRegexp> config option.
Returns false, otherwise.
-=begin testing
-
-is(RT::EmailParser::IsRTAddress("","rt\@example.com"),1, "Regexp matched rt address" );
-is(RT::EmailParser::IsRTAddress("","frt\@example.com"),undef, "Regexp didn't match non-rt address" );
-
-=end testing
=cut
@@ -436,31 +335,21 @@ sub IsRTAddress {
# Example: the following rule would tell RT not to Cc
# "tickets@noc.example.com"
- if ( defined($RT::RTAddressRegexp) &&
- $address =~ /$RT::RTAddressRegexp/i ) {
- return(1);
- } else {
- return (undef);
+ my $address_re = RT->Config->Get('RTAddressRegexp');
+ if ( defined $address_re && $address =~ /$address_re/i ) {
+ return 1;
}
+ return undef;
}
-# }}}
-# {{{ CullRTAddresses
=head2 CullRTAddresses ARRAY
Takes a single argument, an array of email addresses.
Returns the same array with any IsRTAddress()es weeded out.
-=begin testing
-
-@before = ("rt\@example.com", "frt\@example.com");
-@after = ("frt\@example.com");
-ok(eq_array(RT::EmailParser::CullRTAddresses("",@before),@after), "CullRTAddresses only culls RT addresses");
-
-=end testing
=cut
@@ -478,10 +367,8 @@ sub CullRTAddresses {
return (@addrlist);
}
-# }}}
-# {{{ LookupExternalUserInfo
# LookupExternalUserInfo is a site-definable method for synchronizing
@@ -543,10 +430,6 @@ sub LookupExternalUserInfo {
return ($FoundInExternalDatabase, %params);
}
-# }}}
-
-# {{{ Accessor methods for parsed email messages
-
=head2 Head
Return the parsed head from this message
@@ -569,9 +452,7 @@ sub Entity {
return $self->{'entity'};
}
-# }}}
-# {{{ _SetupMIMEParser
=head2 _SetupMIMEParser $parser
@@ -591,39 +472,92 @@ sub _SetupMIMEParser {
my $self = shift;
my $parser = shift;
- # Set up output directory for files:
-
- my $tmpdir = File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 );
- push ( @{ $self->{'AttachmentDirs'} }, $tmpdir );
- $parser->output_dir($tmpdir);
- $parser->filer->ignore_filename(1);
+ # Set up output directory for files; we use $RT::VarPath instead
+ # of File::Spec->tmpdir (e.g., /tmp) beacuse it isn't always
+ # writable.
+ my $tmpdir;
+ if ( -w $RT::VarPath ) {
+ $tmpdir = File::Temp::tempdir( DIR => $RT::VarPath, CLEANUP => 1 );
+ } elsif (-w File::Spec->tmpdir) {
+ $tmpdir = File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 );
+ } else {
+ $RT::Logger->crit("Neither the RT var directory ($RT::VarPath) nor the system tmpdir (@{[File::Spec->tmpdir]}) are writable; falling back to in-memory parsing!");
+ }
#If someone includes a message, extract it
$parser->extract_nested_messages(1);
-
$parser->extract_uuencode(1); ### default is false
- # Set up the prefix for files with auto-generated names:
- $parser->output_prefix("part");
+ if ($tmpdir) {
+ # If we got a writable tmpdir, write to disk
+ push ( @{ $self->{'AttachmentDirs'} ||= [] }, $tmpdir );
+ $parser->output_dir($tmpdir);
+ $parser->filer->ignore_filename(1);
- # do _not_ store each msg as in-core scalar;
+ # Set up the prefix for files with auto-generated names:
+ $parser->output_prefix("part");
- $parser->output_to_core(0);
+ # From the MIME::Parser docs:
+ # "Normally, tmpfiles are created when needed during parsing, and destroyed automatically when they go out of scope"
+ # Turns out that the default is to recycle tempfiles
+ # Temp files should never be recycled, especially when running under perl taint checking
- # From the MIME::Parser docs:
- # "Normally, tmpfiles are created when needed during parsing, and destroyed automatically when they go out of scope"
- # Turns out that the default is to recycle tempfiles
- # Temp files should never be recycled, especially when running under perl taint checking
-
- $parser->tmp_recycling(0) if $parser->can('tmp_recycling');
+ $parser->tmp_recycling(0) if $parser->can('tmp_recycling');
+ } else {
+ # Otherwise, fall back to storing it in memory
+ $parser->output_to_core(1);
+ $parser->tmp_to_core(1);
+ $parser->use_inner_files(1);
+ }
+
+}
+
+=head2 ParseEmailAddress string
+
+Returns a list of Email::Address objects
+Works around the bug that Email::Address 1.889 and earlier
+doesn't handle local-only email addresses (when users pass
+in just usernames on the RT system in fields that expect
+Email Addresses)
+
+We don't handle the case of
+bob, fred@bestpractical.com
+because we don't want to fail parsing
+bob, "Falcone, Fred" <fred@bestpractical.com>
+The next release of Email::Address will have a new method
+we can use that removes the bandaid
+
+=cut
+
+sub ParseEmailAddress {
+ my $self = shift;
+ my $address_string = shift;
+
+ $address_string =~ s/^\s+|\s+$//g;
+
+ my @addresses;
+ # if it looks like a username / local only email
+ if ($address_string !~ /@/ && $address_string =~ /^\w+$/) {
+ my $user = RT::User->new( $RT::SystemUser );
+ my ($id, $msg) = $user->Load($address_string);
+ if ($id) {
+ push @addresses, Email::Address->new($user->Name,$user->EmailAddress);
+ } else {
+ $RT::Logger->error("Unable to parse an email address from $address_string: $msg");
+ }
+ } else {
+ @addresses = Email::Address->parse($address_string);
+ }
+
+ return @addresses;
}
-# }}}
sub DESTROY {
my $self = shift;
- File::Path::rmtree([@{$self->{'AttachmentDirs'}}],0,1);
+ File::Path::rmtree([@{$self->{'AttachmentDirs'}}],0,1)
+ if $self->{'AttachmentDirs'};
}
diff --git a/rt/lib/RT/Graph/Tickets.pm b/rt/lib/RT/Graph/Tickets.pm
new file mode 100644
index 0000000..77a0ce5
--- /dev/null
+++ b/rt/lib/RT/Graph/Tickets.pm
@@ -0,0 +1,358 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Graph::Tickets;
+
+use strict;
+use warnings;
+
+=head1 NAME
+
+RT::Graph::Tickets - view relations between tickets as graphs
+
+=cut
+
+unless ($RT::DisableGraphViz) {
+ require IPC::Run;
+ IPC::Run->import;
+ require IPC::Run::SafeHandles;
+ IPC::Run::SafeHandles->import;
+ require GraphViz;
+ GraphViz->import;
+}
+
+our %ticket_status_style = (
+ new => { fontcolor => '#FF0000', fontsize => 10 },
+ open => { fontcolor => '#000000', fontsize => 10 },
+ stalled => { fontcolor => '#DAA520', fontsize => 10 },
+ resolved => { fontcolor => '#00FF00', fontsize => 10 },
+ rejected => { fontcolor => '#808080', fontsize => 10 },
+ deleted => { fontcolor => '#A9A9A9', fontsize => 10 },
+);
+
+our %link_style = (
+ MemberOf => { style => 'solid' },
+ DependsOn => { style => 'dashed' },
+ RefersTo => { style => 'dotted' },
+);
+
+# We don't use qw() because perl complains about "possible attempt to put comments in qw() list"
+our @fill_colors = split ' ',<<EOT;
+ #0000FF #8A2BE2 #A52A2A #DEB887 #5F9EA0 #7FFF00 #D2691E #FF7F50
+ #6495ED #FFF8DC #DC143C #00FFFF #00008B #008B8B #B8860B #A9A9A9
+ #A9A9A9 #006400 #BDB76B #8B008B #556B2F #FF8C00 #9932CC #8B0000
+ #E9967A #8FBC8F #483D8B #2F4F4F #2F4F4F #00CED1 #9400D3 #FF1493
+ #00BFFF #696969 #696969 #1E90FF #B22222 #FFFAF0 #228B22 #FF00FF
+ #DCDCDC #F8F8FF #FFD700 #DAA520 #808080 #808080 #008000 #ADFF2F
+ #F0FFF0 #FF69B4 #CD5C5C #4B0082 #FFFFF0 #F0E68C #E6E6FA #FFF0F5
+ #7CFC00 #FFFACD #ADD8E6 #F08080 #E0FFFF #FAFAD2 #D3D3D3 #D3D3D3
+ #90EE90 #FFB6C1 #FFA07A #20B2AA #87CEFA #778899 #778899 #B0C4DE
+ #FFFFE0 #00FF00 #32CD32 #FAF0E6 #FF00FF #800000 #66CDAA #0000CD
+ #BA55D3 #9370D8 #3CB371 #7B68EE #00FA9A #48D1CC #C71585 #191970
+ #F5FFFA #FFE4E1 #FFE4B5 #FFDEAD #000080 #FDF5E6 #808000 #6B8E23
+ #FFA500 #FF4500 #DA70D6 #EEE8AA #98FB98 #AFEEEE #D87093 #FFEFD5
+ #FFDAB9 #CD853F #FFC0CB #DDA0DD #B0E0E6 #800080 #FF0000 #BC8F8F
+ #4169E1 #8B4513 #FA8072 #F4A460 #2E8B57 #FFF5EE #A0522D #C0C0C0
+ #87CEEB #6A5ACD #708090 #708090 #FFFAFA #00FF7F #4682B4 #D2B48C
+ #008080 #D8BFD8 #FF6347 #40E0D0 #EE82EE #F5DEB3 #FFFF00 #9ACD32
+EOT
+
+sub gv_escape($) {
+ my $value = shift;
+ $value =~ s{(?=")}{\\}g;
+ return $value;
+}
+
+our (%fill_cache, @available_colors) = ();
+
+our %property_cb = (
+ Queue => sub { return $_[0]->QueueObj->Name || $_[0]->Queue },
+ CF => sub {
+ my $values = $_[0]->CustomFieldValues( $_[1] );
+ return join ', ', map $_->Content, @{ $values->ItemsArrayRef };
+ },
+);
+foreach my $field (qw(Subject Status TimeLeft TimeWorked TimeEstimated)) {
+ $property_cb{ $field } = sub { return $_[0]->$field },
+}
+foreach my $field (qw(Creator LastUpdatedBy Owner)) {
+ $property_cb{ $field } = sub {
+ my $method = $field .'Obj';
+ return $_[0]->$method->Name;
+ };
+}
+foreach my $field (qw(Requestor Cc AdminCc)) {
+ $property_cb{ $field."s" } = sub {
+ my $method = $field .'Addresses';
+ return $_[0]->$method;
+ };
+}
+foreach my $field (qw(Told Starts Started Due Resolved LastUpdated Created)) {
+ $property_cb{ $field } = sub {
+ my $method = $field .'Obj';
+ return $_[0]->$method->AsString;
+ };
+}
+foreach my $field (qw(Members DependedOnBy ReferredToBy)) {
+ $property_cb{ $field } = sub {
+ return join ', ', map $_->BaseObj->id, @{ $_[0]->$field->ItemsArrayRef };
+ };
+}
+foreach my $field (qw(MemberOf DependsOn RefersTo)) {
+ $property_cb{ $field } = sub {
+ return join ', ', map $_->TargetObj->id, @{ $_[0]->$field->ItemsArrayRef };
+ };
+}
+
+
+sub TicketProperties {
+ my $self = shift;
+ my $user = shift;
+ my @res = (
+ Basics => [qw(Subject Status Queue TimeLeft TimeWorked TimeEstimated)], # loc_qw
+ People => [qw(Owner Requestors Ccs AdminCcs Creator LastUpdatedBy)], # loc_qw
+ Dates => [qw(Created Starts Started Due Resolved Told LastUpdated)], # loc_qw
+ Links => [qw(MemberOf Members DependsOn DependedOnBy RefersTo ReferredToBy)], # loc_qw
+ );
+ my $cfs = RT::CustomFields->new( $user );
+ $cfs->LimitToLookupType('RT::Queue-RT::Ticket');
+ $cfs->OrderBy( FIELD => 'Name' );
+ my ($first, %seen) = (1);
+ while ( my $cf = $cfs->Next ) {
+ next if $seen{ lc $cf->Name }++;
+ next if $cf->Type eq 'Image';
+ if ( $first ) {
+ push @res, 'CustomFields', [];
+ $first = 0;
+ }
+ push @{ $res[-1] }, 'CF.{'. $cf->Name .'}';
+ }
+ return @res;
+}
+
+sub _SplitProperty {
+ my $self = shift;
+ my $property = shift;
+ my ($key, @subkeys) = split /\./, $property;
+ foreach ( grep /^{.*}$/, @subkeys ) {
+ s/^{//;
+ s/}$//;
+ }
+ return $key, @subkeys;
+}
+
+sub _PropertiesToFields {
+ my $self = shift;
+ my %args = (
+ Ticket => undef,
+ Graph => undef,
+ CurrentDepth => 1,
+ @_
+ );
+
+ my @properties;
+ if ( my $tmp = $args{ 'Level-'. $args{'CurrentDepth'} .'-Properties' } ) {
+ @properties = ref $tmp? @$tmp : ($tmp);
+ }
+
+ my @fields;
+ foreach my $property( @properties ) {
+ my ($key, @subkeys) = $self->_SplitProperty( $property );
+ unless ( $property_cb{ $key } ) {
+ $RT::Logger->error("Couldn't find property handler for '$key' and '@subkeys' subkeys");
+ next;
+ }
+ push @fields, ($subkeys[0] || $key) .': '. $property_cb{ $key }->( $args{'Ticket'}, @subkeys );
+ }
+
+ return @fields;
+}
+
+sub AddTicket {
+ my $self = shift;
+ my %args = (
+ Ticket => undef,
+ Properties => [],
+ Graph => undef,
+ CurrentDepth => 1,
+ @_
+ );
+
+ my %node_style = (
+ style => 'filled,rounded',
+ %{ $ticket_status_style{ $args{'Ticket'}->Status } || {} },
+ URL => $RT::WebPath .'/Ticket/Display.html?id='. $args{'Ticket'}->id,
+ tooltip => gv_escape( $args{'Ticket'}->Subject || '#'. $args{'Ticket'}->id ),
+ );
+
+ my @fields = $self->_PropertiesToFields( %args );
+ if ( @fields ) {
+ unshift @fields, $args{'Ticket'}->id;
+ my $label = join ' | ', map { s/(?=[{}|])/\\/g; $_ } @fields;
+ $label = "{ $label }" if ($args{'Direction'} || 'TB') =~ /^(?:TB|BT)$/;
+ $node_style{'label'} = gv_escape( $label );
+ $node_style{'shape'} = 'record';
+ }
+
+ if ( $args{'FillUsing'} ) {
+ my ($key, @subkeys) = $self->_SplitProperty( $args{'FillUsing'} );
+ my $value;
+ if ( $property_cb{ $key } ) {
+ $value = $property_cb{ $key }->( $args{'Ticket'}, @subkeys );
+ } else {
+ $RT::Logger->error("Couldn't find property callback for '$key'");
+ }
+ if ( defined $value && length $value && $value =~ /\S/ ) {
+ my $fill = $fill_cache{ $value };
+ $fill = $fill_cache{ $value } = shift @available_colors
+ unless $fill;
+ if ( $fill ) {
+ $node_style{'fillcolor'} = $fill;
+ $node_style{'style'} ||= '';
+ $node_style{'style'} = join ',', split( ',', $node_style{'style'} ), 'filled'
+ unless $node_style{'style'} =~ /\bfilled\b/;
+ }
+ }
+ }
+
+ $args{'Graph'}->add_node( $args{'Ticket'}->id, %node_style );
+}
+
+sub TicketLinks {
+ my $self = shift;
+ my %args = (
+ Ticket => undef,
+
+ Graph => undef,
+ Direction => 'TB',
+ Seen => undef,
+ SeenEdge => undef,
+
+ LeadingLink => 'Members',
+ ShowLinks => [],
+
+ MaxDepth => 0,
+ CurrentDepth => 1,
+
+ ShowLinkDescriptions => 0,
+ @_
+ );
+ unless ( $args{'Graph'} ) {
+ $args{'Graph'} = GraphViz->new(
+ name => 'ticket_links_'. $args{'Ticket'}->id,
+ bgcolor => "transparent",
+# TODO: patch GraphViz to support all posible RDs
+ rankdir => ($args{'Direction'} || "TB") eq "LR",
+ node => { shape => 'box', style => 'filled,rounded', fillcolor => 'white' },
+ );
+ %fill_cache = ();
+ @available_colors = @fill_colors;
+ }
+
+ $args{'Seen'} ||= {};
+ return $args{'Graph'} if $args{'Seen'}{ $args{'Ticket'}->id }++;
+
+ $self->AddTicket( %args );
+
+ return $args{'Graph'} if $args{'MaxDepth'} && $args{'CurrentDepth'} >= $args{'MaxDepth'};
+
+ $args{'SeenEdge'} ||= {};
+
+ my $show_link_descriptions = $args{'ShowLinkDescriptions'}
+ && RT::Link->can('Description');
+
+ foreach my $type ( $args{'LeadingLink'}, @{ $args{'ShowLinks'} } ) {
+ my $links = $args{'Ticket'}->$type();
+ $links->GotoFirstItem;
+ while ( my $link = $links->Next ) {
+ next if $args{'SeenEdge'}{ $link->id }++;
+
+ my $target = $link->TargetObj;
+ next unless $target && $target->isa('RT::Ticket');
+
+ my $base = $link->BaseObj;
+ next unless $base && $base->isa('RT::Ticket');
+
+ my $next = $target->id == $args{'Ticket'}->id? $base : $target;
+
+ $self->TicketLinks(
+ %args,
+ Ticket => $next,
+ $type eq $args{'LeadingLink'}
+ ? ( CurrentDepth => $args{'CurrentDepth'} + 1 )
+ : ( MaxDepth => $args{'CurrentDepth'} + 1,
+ CurrentDepth => $args{'CurrentDepth'} + 1 ),
+ );
+
+ my $desc;
+ $desc = $link->Description if $show_link_descriptions;
+ $args{'Graph'}->add_edge(
+ # we revers order of member links to get better layout
+ $link->Type eq 'MemberOf'
+ ? ($target->id => $base->id, dir => 'back')
+ : ($base->id => $target->id),
+ %{ $link_style{ $link->Type } || {} },
+ $desc? (label => gv_escape $desc): (),
+ );
+ }
+ }
+
+ return $args{'Graph'};
+}
+
+eval "require RT::Graph::Tickets_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Graph/Tickets_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Graph::Tickets_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Graph/Tickets_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Group.pm b/rt/lib/RT/Group.pm
index 53aa326..17444b0 100755
--- a/rt/lib/RT/Group.pm
+++ b/rt/lib/RT/Group.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/GroupMember.pm b/rt/lib/RT/GroupMember.pm
index f943bd9..f7fa73e 100755
--- a/rt/lib/RT/GroupMember.pm
+++ b/rt/lib/RT/GroupMember.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/GroupMember_Overlay.pm b/rt/lib/RT/GroupMember_Overlay.pm
index ac4f9da..d3ba9b8 100644
--- a/rt/lib/RT/GroupMember_Overlay.pm
+++ b/rt/lib/RT/GroupMember_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::GroupMember - a member of an RT Group
@@ -65,11 +66,6 @@ doing something wrong.
=head1 METHODS
-=begin testing
-
-ok (require RT::GroupMember);
-
-=end testing
=cut
@@ -138,10 +134,12 @@ sub Create {
my $member_object = $args{'Member'}->Object;
if ($member_object->HasMemberRecursively($args{'Group'})) {
$RT::Logger->debug("Adding that group would create a loop");
+ $RT::Handle->Rollback() unless ($args{'InsideTransaction'});
return(undef);
}
elsif ( $args{'Member'}->Id == $args{'Group'}->Id) {
$RT::Logger->debug("Can't add a group to itself");
+ $RT::Handle->Rollback() unless ($args{'InsideTransaction'});
return(undef);
}
}
@@ -174,6 +172,14 @@ sub Create {
# find things which have the current group as a member.
# $group is an RT::Principal for the group.
$cgm->LimitToGroupsWithMember( $args{'Group'}->Id );
+ $cgm->Limit(
+ SUBCLAUSE => 'filter', # dont't mess up with prev condition
+ FIELD => 'MemberId',
+ OPERATOR => '!=',
+ VALUE => 'main.GroupId',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+ );
while ( my $parent_member = $cgm->Next ) {
my $parent_id = $parent_member->MemberId;
diff --git a/rt/lib/RT/GroupMembers.pm b/rt/lib/RT/GroupMembers.pm
index 8c43133..0e7514d 100755
--- a/rt/lib/RT/GroupMembers.pm
+++ b/rt/lib/RT/GroupMembers.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/GroupMembers_Overlay.pm b/rt/lib/RT/GroupMembers_Overlay.pm
index fab341d..a77d83f 100644
--- a/rt/lib/RT/GroupMembers_Overlay.pm
+++ b/rt/lib/RT/GroupMembers_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::GroupMembers - a collection of RT::GroupMember objects
@@ -59,11 +60,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::GroupMembers);
-
-=end testing
=cut
diff --git a/rt/lib/RT/Group_Overlay.pm b/rt/lib/RT/Group_Overlay.pm
index eabeab0..5bf5f7c 100644
--- a/rt/lib/RT/Group_Overlay.pm
+++ b/rt/lib/RT/Group_Overlay.pm
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -46,6 +46,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Released under the terms of version 2 of the GNU Public License
=head1 NAME
@@ -64,85 +65,6 @@ An RT group object.
=head1 METHODS
-=begin testing
-
-# {{{ Tests
-ok (require RT::Group);
-
-ok (my $group = RT::Group->new($RT::SystemUser), "instantiated a group object");
-ok (my ($id, $msg) = $group->CreateUserDefinedGroup( Name => 'TestGroup', Description => 'A test group',
- ), 'Created a new group');
-ok ($id != 0, "Group id is $id");
-ok ($group->Name eq 'TestGroup', "The group's name is 'TestGroup'");
-my $ng = RT::Group->new($RT::SystemUser);
-
-ok($ng->LoadUserDefinedGroup('TestGroup'), "Loaded testgroup");
-ok(($ng->id == $group->id), "Loaded the right group");
-
-
-ok (($id,$msg) = $ng->AddMember('1'), "Added a member to the group");
-ok($id, $msg);
-ok (($id,$msg) = $ng->AddMember('2' ), "Added a member to the group");
-ok($id, $msg);
-ok (($id,$msg) = $ng->AddMember('3' ), "Added a member to the group");
-ok($id, $msg);
-
-# Group 1 now has members 1, 2 ,3
-
-my $group_2 = RT::Group->new($RT::SystemUser);
-ok (my ($id_2, $msg_2) = $group_2->CreateUserDefinedGroup( Name => 'TestGroup2', Description => 'A second test group'), , 'Created a new group');
-ok ($id_2 != 0, "Created group 2 ok- $msg_2 ");
-ok (($id,$msg) = $group_2->AddMember($ng->PrincipalId), "Made TestGroup a member of testgroup2");
-ok($id, $msg);
-ok (($id,$msg) = $group_2->AddMember('1' ), "Added member RT_System to the group TestGroup2");
-ok($id, $msg);
-
-# Group 2 how has 1, g1->{1, 2,3}
-
-my $group_3 = RT::Group->new($RT::SystemUser);
-ok (($id_3, $msg) = $group_3->CreateUserDefinedGroup( Name => 'TestGroup3', Description => 'A second test group'), 'Created a new group');
-ok ($id_3 != 0, "Created group 3 ok - $msg");
-ok (($id,$msg) =$group_3->AddMember($group_2->PrincipalId), "Made TestGroup a member of testgroup2");
-ok($id, $msg);
-
-# g3 now has g2->{1, g1->{1,2,3}}
-
-my $principal_1 = RT::Principal->new($RT::SystemUser);
-$principal_1->Load('1');
-
-my $principal_2 = RT::Principal->new($RT::SystemUser);
-$principal_2->Load('2');
-
-ok (($id,$msg) = $group_3->AddMember('1' ), "Added member RT_System to the group TestGroup2");
-ok($id, $msg);
-
-# g3 now has 1, g2->{1, g1->{1,2,3}}
-
-ok($group_3->HasMember($principal_2) == undef, "group 3 doesn't have member 2");
-ok($group_3->HasMemberRecursively($principal_2), "group 3 has member 2 recursively");
-ok($ng->HasMember($principal_2) , "group ".$ng->Id." has member 2");
-my ($delid , $delmsg) =$ng->DeleteMember($principal_2->Id);
-ok ($delid !=0, "Sucessfully deleted it-".$delid."-".$delmsg);
-
-#Gotta reload the group objects, since we've been messing with various internals.
-# we shouldn't need to do this.
-#$ng->LoadUserDefinedGroup('TestGroup');
-#$group_2->LoadUserDefinedGroup('TestGroup2');
-#$group_3->LoadUserDefinedGroup('TestGroup');
-
-# G1 now has 1, 3
-# Group 2 how has 1, g1->{1, 3}
-# g3 now has 1, g2->{1, g1->{1, 3}}
-
-ok(!$ng->HasMember($principal_2) , "group ".$ng->Id." no longer has member 2");
-ok($group_3->HasMemberRecursively($principal_2) == undef, "group 3 doesn't have member 2");
-ok($group_2->HasMemberRecursively($principal_2) == undef, "group 2 doesn't have member 2");
-ok($ng->HasMember($principal_2) == undef, "group 1 doesn't have member 2");;
-ok($group_3->HasMemberRecursively($principal_2) == undef, "group 3 has member 2 recursively");
-
-# }}}
-
-=end testing
@@ -165,10 +87,17 @@ $RIGHTS = {
AdminGroup => 'Modify group metadata or delete group', # loc_pair
AdminGroupMembership =>
'Modify membership roster for this group', # loc_pair
+ DelegateRights =>
+ "Delegate specific rights which have been granted to you.", # loc_pair
ModifyOwnMembership => 'Join or leave this group', # loc_pair
EditSavedSearches => 'Edit saved searches for this group', # loc_pair
ShowSavedSearches => 'Display saved searches for this group', # loc_pair
SeeGroup => 'Make this group visible to user', # loc_pair
+
+ SeeGroupDashboard => 'View dashboards for this group', #loc_pair
+ CreateGroupDashboard => 'Create dashboards for this group', #loc_pair
+ ModifyGroupDashboard => 'Modify dashboards for this group', #loc_pair
+ DeleteGroupDashboard => 'Delete dashboards for this group', #loc_pair
};
# Tell RT::ACE that this sort of object can get acls granted
@@ -184,6 +113,20 @@ foreach my $right ( keys %{$RIGHTS} ) {
$RT::ACE::LOWERCASERIGHTNAMES{ lc $right } = $right;
}
+=head2 AddRights C<RIGHT>, C<DESCRIPTION> [, ...]
+
+Adds the given rights to the list of possible rights. This method
+should be called during server startup, not at runtime.
+
+=cut
+
+sub AddRights {
+ my $self = shift;
+ my %new = @_;
+ $RIGHTS = { %$RIGHTS, %new };
+ %RT::ACE::LOWERCASERIGHTNAMES = ( %RT::ACE::LOWERCASERIGHTNAMES,
+ map { lc($_) => $_ } keys %new);
+}
=head2 AvailableRights
@@ -255,7 +198,6 @@ sub Load {
my $self = shift;
my $identifier = shift || return undef;
- #if it's an int, load by id. otherwise, load by name.
if ( $identifier !~ /\D/ ) {
$self->SUPER::LoadById($identifier);
}
@@ -281,34 +223,44 @@ sub LoadUserDefinedGroup {
my $self = shift;
my $identifier = shift;
- $self->LoadByCols( "Domain" => 'UserDefined',
- "Name" => $identifier );
+ if ( $identifier =~ /^\d+$/ ) {
+ return $self->LoadByCols(
+ Domain => 'UserDefined',
+ id => $identifier,
+ );
+ } else {
+ return $self->LoadByCols(
+ Domain => 'UserDefined',
+ Name => $identifier,
+ );
+ }
}
# }}}
# {{{ sub LoadACLEquivalenceGroup
-=head2 LoadACLEquivalenceGroup PRINCIPAL
+=head2 LoadACLEquivalenceGroup PRINCIPAL
-Loads a user's acl equivalence group. Takes a principal object.
+Loads a user's acl equivalence group. Takes a principal object or its ID.
ACL equivalnce groups are used to simplify the acl system. Each user
has one group that only he is a member of. Rights granted to the user
are actually granted to that group. This greatly simplifies ACL checks.
While this results in a somewhat more complex setup when creating users
and granting ACLs, it _greatly_ simplifies acl checks.
-
-
=cut
sub LoadACLEquivalenceGroup {
- my $self = shift;
- my $princ = shift;
+ my $self = shift;
+ my $principal = shift;
+ $principal = $principal->id if ref $principal;
- $self->LoadByCols( "Domain" => 'ACLEquivalence',
- "Type" => 'UserEquiv',
- "Instance" => $princ->Id);
+ return $self->LoadByCols(
+ Domain => 'ACLEquivalence',
+ Type => 'UserEquiv',
+ Instance => $principal,
+ );
}
# }}}
@@ -349,8 +301,10 @@ sub LoadSystemInternalGroup {
my $self = shift;
my $identifier = shift;
- $self->LoadByCols( "Domain" => 'SystemInternal',
- "Type" => $identifier );
+ return $self->LoadByCols(
+ Domain => 'SystemInternal',
+ Type => $identifier,
+ );
}
# }}}
@@ -493,6 +447,7 @@ sub _Create {
);
my $id = $self->Id;
unless ($id) {
+ $RT::Handle->Rollback() unless ($args{'InsideTransaction'});
return ( 0, $self->loc('Could not create group') );
}
@@ -515,7 +470,7 @@ sub _Create {
if ( $args{'_RecordTransaction'} ) {
- $self->_NewTransaction( Type => "Create" );
+ $self->_NewTransaction( Type => "Create" );
}
$RT::Handle->Commit() unless ($args{'InsideTransaction'});
@@ -772,8 +727,14 @@ This routine finds all the cached group members that are members of this group
}
}
+ $self->_NewTransaction( Type => ($val == 1) ? "Disabled" : "Enabled" );
+
$RT::Handle->Commit();
- return (1, $self->loc("Succeeded"));
+ if ( $val == 1 ) {
+ return (1, $self->loc("Group disabled"));
+ } else {
+ return (1, $self->loc("Group enabled"));
+ }
}
@@ -810,55 +771,108 @@ sub DeepMembersObj {
# }}}
-# {{{ UserMembersObj
+# {{{ MembersObj
-=head2 UserMembersObj
+=head2 MembersObj
-Returns an RT::Users object of this group's members, including
-all members of subgroups
+Returns an RT::GroupMembers object of this group's direct members.
=cut
-sub UserMembersObj {
+sub MembersObj {
my $self = shift;
-
- my $users = RT::Users->new($self->CurrentUser);
+ my $members_obj = RT::GroupMembers->new( $self->CurrentUser );
#If we don't have rights, don't include any results
# TODO XXX WHY IS THERE NO ACL CHECK HERE?
+ $members_obj->LimitToMembersOfGroup( $self->PrincipalId );
- my $cached_members = $users->NewAlias('CachedGroupMembers');
- $users->Join(ALIAS1 => $cached_members, FIELD1 => 'MemberId',
- ALIAS2 => $users->PrincipalsAlias, FIELD2 => 'id');
- $users->Limit(ALIAS => $cached_members,
- FIELD => 'GroupId',
- OPERATOR => '=',
- VALUE => $self->PrincipalId);
+ return ( $members_obj );
- return ( $users);
+}
+
+# }}}
+
+# {{{ GroupMembersObj
+
+=head2 GroupMembersObj [Recursively => 1]
+
+Returns an L<RT::Groups> object of this group's members.
+By default returns groups including all subgroups, but
+could be changed with C<Recursively> named argument.
+B<Note> that groups are not filtered by type and result
+may contain as well system groups, personal and other.
+
+=cut
+
+sub GroupMembersObj {
+ my $self = shift;
+ my %args = ( Recursively => 1, @_ );
+
+ my $groups = RT::Groups->new( $self->CurrentUser );
+ my $members_table = $args{'Recursively'}?
+ 'CachedGroupMembers': 'GroupMembers';
+
+ my $members_alias = $groups->NewAlias( $members_table );
+ $groups->Join(
+ ALIAS1 => $members_alias, FIELD1 => 'MemberId',
+ ALIAS2 => $groups->PrincipalsAlias, FIELD2 => 'id',
+ );
+ $groups->Limit(
+ ALIAS => $members_alias,
+ FIELD => 'GroupId',
+ VALUE => $self->PrincipalId,
+ );
+ $groups->Limit(
+ ALIAS => $members_alias,
+ FIELD => 'Disabled',
+ VALUE => 0,
+ ) if $args{'Recursively'};
+
+ return $groups;
}
# }}}
-# {{{ MembersObj
+# {{{ UserMembersObj
-=head2 MembersObj
+=head2 UserMembersObj
-Returns an RT::GroupMembers object of this group's direct members.
+Returns an L<RT::Users> object of this group's members, by default
+returns users including all members of subgroups, but could be
+changed with C<Recursively> named argument.
=cut
-sub MembersObj {
+sub UserMembersObj {
my $self = shift;
- my $members_obj = RT::GroupMembers->new( $self->CurrentUser );
+ my %args = ( Recursively => 1, @_ );
#If we don't have rights, don't include any results
# TODO XXX WHY IS THERE NO ACL CHECK HERE?
- $members_obj->LimitToMembersOfGroup( $self->PrincipalId );
- return ( $members_obj );
+ my $members_table = $args{'Recursively'}?
+ 'CachedGroupMembers': 'GroupMembers';
+ my $users = RT::Users->new($self->CurrentUser);
+ my $members_alias = $users->NewAlias( $members_table );
+ $users->Join(
+ ALIAS1 => $members_alias, FIELD1 => 'MemberId',
+ ALIAS2 => $users->PrincipalsAlias, FIELD2 => 'id',
+ );
+ $users->Limit(
+ ALIAS => $members_alias,
+ FIELD => 'GroupId',
+ VALUE => $self->PrincipalId,
+ );
+ $users->Limit(
+ ALIAS => $members_alias,
+ FIELD => 'Disabled',
+ VALUE => 0,
+ ) if $args{'Recursively'};
+
+ return ( $users);
}
# }}}
@@ -982,7 +996,7 @@ sub _AddMember {
if ( $self->HasMember( $new_member_obj ) ) {
#User is already a member of this group. no need to add it
- return ( 0, $self->loc("Group already has member") );
+ return ( 0, $self->loc("Group already has member: [_1]", $new_member_obj->Object->Name) );
}
if ( $new_member_obj->IsGroup &&
$new_member_obj->Object->HasMemberRecursively($self->PrincipalObj) ) {
@@ -999,7 +1013,7 @@ sub _AddMember {
InsideTransaction => $args{'InsideTransaction'}
);
if ($id) {
- return ( 1, $self->loc("Member added") );
+ return ( 1, $self->loc("Member added: [_1]", $new_member_obj->Object->Name) );
}
else {
return(0, $self->loc("Couldn't add member to group"));
@@ -1009,9 +1023,9 @@ sub _AddMember {
# {{{ HasMember
-=head2 HasMember RT::Principal
+=head2 HasMember RT::Principal|id
-Takes an RT::Principal object returns a GroupMember Id if that user is a
+Takes an L<RT::Principal> object or its id returns a GroupMember Id if that user is a
member of this group.
Returns undef if the user isn't a member of the group or if the current
user doesn't have permission to find out. Arguably, it should differentiate
@@ -1023,29 +1037,28 @@ sub HasMember {
my $self = shift;
my $principal = shift;
-
- unless (UNIVERSAL::isa($principal,'RT::Principal')) {
- $RT::Logger->crit("Group::HasMember was called with an argument that".
- "isn't an RT::Principal. It's $principal");
- return(undef);
- }
-
- unless ($principal->Id) {
+ my $id;
+ if ( UNIVERSAL::isa($principal,'RT::Principal') ) {
+ $id = $principal->id;
+ } elsif ( $principal =~ /^\d+$/ ) {
+ $id = $principal;
+ } else {
+ $RT::Logger->error("Group::HasMember was called with an argument that".
+ " isn't an RT::Principal or id. It's ".($principal||'(undefined)'));
return(undef);
}
+ return undef unless $id;
my $member_obj = RT::GroupMember->new( $self->CurrentUser );
- $member_obj->LoadByCols( MemberId => $principal->id,
- GroupId => $self->PrincipalId );
+ $member_obj->LoadByCols(
+ MemberId => $id,
+ GroupId => $self->PrincipalId
+ );
- #If we have a member object
- if ( defined $member_obj->id ) {
- return ( $member_obj->id );
+ if ( my $member_id = $member_obj->id ) {
+ return $member_id;
}
-
- #If Load returns no objects, we have an undef id.
else {
- #$RT::Logger->debug($self." does not contain principal ".$principal->id);
return (undef);
}
}
@@ -1054,9 +1067,9 @@ sub HasMember {
# {{{ HasMemberRecursively
-=head2 HasMemberRecursively RT::Principal
+=head2 HasMemberRecursively RT::Principal|id
-Takes an RT::Principal object and returns true if that user is a member of
+Takes an L<RT::Principal> object or its id and returns true if that user is a member of
this group.
Returns undef if the user isn't a member of the group or if the current
user doesn't have permission to find out. Arguably, it should differentiate
@@ -1068,23 +1081,27 @@ sub HasMemberRecursively {
my $self = shift;
my $principal = shift;
- unless (UNIVERSAL::isa($principal,'RT::Principal')) {
- $RT::Logger->crit("Group::HasMemberRecursively was called with an argument that".
- "isn't an RT::Principal. It's $principal");
+ my $id;
+ if ( UNIVERSAL::isa($principal,'RT::Principal') ) {
+ $id = $principal->id;
+ } elsif ( $principal =~ /^\d+$/ ) {
+ $id = $principal;
+ } else {
+ $RT::Logger->error("Group::HasMemberRecursively was called with an argument that".
+ " isn't an RT::Principal or id. It's $principal");
return(undef);
}
+ return undef unless $id;
+
my $member_obj = RT::CachedGroupMember->new( $self->CurrentUser );
- $member_obj->LoadByCols( MemberId => $principal->Id,
- GroupId => $self->PrincipalId ,
- Disabled => 0
- );
-
- #If we have a member object
- if ( defined $member_obj->id ) {
- return ( 1);
- }
+ $member_obj->LoadByCols(
+ MemberId => $id,
+ GroupId => $self->PrincipalId
+ );
- #If Load returns no objects, we have an undef id.
+ if ( my $member_id = $member_obj->id ) {
+ return $member_id;
+ }
else {
return (undef);
}
@@ -1325,23 +1342,17 @@ Returns the principal object for this user. returns an empty RT::Principal
if there's no principal object matching this user.
The response is cached. PrincipalObj should never ever change.
-=begin testing
-
-ok(my $u = RT::Group->new($RT::SystemUser));
-ok($u->Load(4), "Loaded the first user");
-ok($u->PrincipalObj->ObjectId == 4, "user 4 is the fourth principal");
-ok($u->PrincipalObj->PrincipalType eq 'Group' , "Principal 4 is a group");
-
-=end testing
=cut
sub PrincipalObj {
my $self = shift;
- unless ($self->{'PrincipalObj'} &&
+ unless ( defined $self->{'PrincipalObj'} &&
+ defined $self->{'PrincipalObj'}->ObjectId &&
($self->{'PrincipalObj'}->ObjectId == $self->Id) &&
- ($self->{'PrincipalObj'}->PrincipalType eq 'Group')) {
+ (defined $self->{'PrincipalObj'}->PrincipalType &&
+ $self->{'PrincipalObj'}->PrincipalType eq 'Group')) {
$self->{'PrincipalObj'} = RT::Principal->new($self->CurrentUser);
$self->{'PrincipalObj'}->LoadByCols('ObjectId' => $self->Id,
diff --git a/rt/lib/RT/Groups.pm b/rt/lib/RT/Groups.pm
index 8522aa5..f8dac13 100755
--- a/rt/lib/RT/Groups.pm
+++ b/rt/lib/RT/Groups.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -115,8 +116,6 @@ sub NewItem {
};
-
-
=head1 SEE ALSO
This class allows "overlay" methods to be placed
diff --git a/rt/lib/RT/Groups_Overlay.pm b/rt/lib/RT/Groups_Overlay.pm
index 0cbebec..8d09755 100644
--- a/rt/lib/RT/Groups_Overlay.pm
+++ b/rt/lib/RT/Groups_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Groups - a collection of RT::Group objects
@@ -52,7 +53,7 @@
=head1 SYNOPSIS
use RT::Groups;
- my $groups = $RT::Groups->new($CurrentUser);
+ my $groups = RT::Groups->new($CurrentUser);
$groups->UnLimit();
while (my $group = $groups->Next()) {
print $group->Id ." is a group id\n";
@@ -64,11 +65,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Groups);
-
-=end testing
=cut
@@ -88,24 +84,6 @@ use RT::Users;
# {{{ sub _Init
-=begin testing
-
-# next had bugs
-# Groups->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => xx );
-my $g = RT::Group->new($RT::SystemUser);
-my ($id, $msg) = $g->CreateUserDefinedGroup(Name => 'GroupsNotEqualTest');
-ok ($id, "created group #". $g->id) or diag("error: $msg");
-
-my $groups = RT::Groups->new($RT::SystemUser);
-$groups->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $g->id );
-$groups->LimitToUserDefinedGroups();
-my $bug = grep $_->id == $g->id, @{$groups->ItemsArrayRef};
-ok (!$bug, "didn't find group");
-
-=end testing
-
-=cut
-
sub _Init {
my $self = shift;
$self->{'table'} = "Groups";
@@ -172,7 +150,7 @@ sub LimitToSystemInternalGroups {
# {{{ LimiToUserDefinedGroups
-=head2 LimitToUserDefined Groups
+=head2 LimitToUserDefinedGroups
Return only UserDefined Groups
@@ -189,7 +167,7 @@ sub LimitToUserDefinedGroups {
# }}}
-# {{{ LimiToPersonalGroups
+# {{{ LimiToPersonalGroupsFor
=head2 LimitToPersonalGroupsFor PRINCIPAL_ID
@@ -265,27 +243,6 @@ sub LimitToRolesForSystem {
Limits the set of groups returned to groups which have
Principal PRINCIPAL_ID as a member
-
-=begin testing
-
-my $u = RT::User->new($RT::SystemUser);
-$u->Create(Name => 'Membertests');
-my $g = RT::Group->new($RT::SystemUser);
-my ($id, $msg) = $g->CreateUserDefinedGroup(Name => 'Membertests');
-ok ($id, $msg);
-
-my ($aid, $amsg) =$g->AddMember($u->id);
-ok ($aid, $amsg);
-ok($g->HasMember($u->PrincipalObj),"G has member u");
-
-my $groups = RT::Groups->new($RT::SystemUser);
-$groups->LimitToUserDefinedGroups();
-$groups->WithMember(PrincipalId => $u->id);
-ok ($groups->Count == 1,"found the 1 group - " . $groups->Count);
-ok ($groups->First->Id == $g->Id, "it's the right one");
-
-=end testing
-
=cut
@@ -307,92 +264,42 @@ sub WithMember {
$self->Limit(ALIAS => $members, FIELD => 'MemberId', OPERATOR => '=', VALUE => $args{'PrincipalId'});
}
+sub WithoutMember {
+ my $self = shift;
+ my %args = (
+ PrincipalId => undef,
+ Recursively => undef,
+ @_
+ );
+
+ my $members = $args{'Recursively'} ? 'CachedGroupMembers' : 'GroupMembers';
+ my $members_alias = $self->Join(
+ TYPE => 'LEFT',
+ FIELD1 => 'id',
+ TABLE2 => $members,
+ FIELD2 => 'GroupId',
+ );
+ $self->Limit(
+ LEFTJOIN => $members_alias,
+ ALIAS => $members_alias,
+ FIELD => 'MemberId',
+ OPERATOR => '=',
+ VALUE => $args{'PrincipalId'},
+ );
+ $self->Limit(
+ ALIAS => $members_alias,
+ FIELD => 'MemberId',
+ OPERATOR => 'IS',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ );
+}
=head2 WithRight { Right => RIGHTNAME, Object => RT::Record, IncludeSystemRights => 1, IncludeSuperusers => 0, EquivObjects => [ ] }
Find all groups which have RIGHTNAME for RT::Record. Optionally include global rights and superusers. By default, include the global rights, but not the superusers.
-=begin testing
-
-my $q = RT::Queue->new($RT::SystemUser);
-my ($id, $msg) =$q->Create( Name => 'GlobalACLTest');
-ok ($id, $msg);
-
-my $testuser = RT::User->new($RT::SystemUser);
-($id,$msg) = $testuser->Create(Name => 'JustAnAdminCc');
-ok ($id,$msg);
-
-my $global_admin_cc = RT::Group->new($RT::SystemUser);
-$global_admin_cc->LoadSystemRoleGroup('AdminCc');
-ok($global_admin_cc->id, "Found the global admincc group");
-my $groups = RT::Groups->new($RT::SystemUser);
-$groups->WithRight(Right => 'OwnTicket', Object => $q);
-is($groups->Count, 1);
-($id, $msg) = $global_admin_cc->PrincipalObj->GrantRight(Right =>'OwnTicket', Object=> $RT::System);
-ok ($id,$msg);
-ok (!$testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does not have the right to own tickets in the test queue");
-($id, $msg) = $q->AddWatcher(Type => 'AdminCc', PrincipalId => $testuser->id);
-ok($id,$msg);
-ok ($testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does have the right to own tickets now. thank god.");
-
-$groups = RT::Groups->new($RT::SystemUser);
-$groups->WithRight(Right => 'OwnTicket', Object => $q);
-ok ($id,$msg);
-is($groups->Count, 3);
-
-my $RTxGroup = RT::Group->new($RT::SystemUser);
-($id, $msg) = $RTxGroup->CreateUserDefinedGroup( Name => 'RTxGroup', Description => "RTx extension group");
-ok ($id,$msg);
-
-my $RTxSysObj = {};
-bless $RTxSysObj, 'RTx::System';
-*RTx::System::Id = sub { 1; };
-*RTx::System::id = *RTx::System::Id;
-my $ace = RT::Record->new($RT::SystemUser);
-$ace->Table('ACL');
-$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)});
-($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System', ObjectId => 1);
-ok ($id, "ACL for RTxSysObj created");
-
-my $RTxObj = {};
-bless $RTxObj, 'RTx::System::Record';
-*RTx::System::Record::Id = sub { 4; };
-*RTx::System::Record::id = *RTx::System::Record::Id;
-
-$groups = RT::Groups->new($RT::SystemUser);
-$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxSysObj);
-is($groups->Count, 1, "RTxGroupRight found for RTxSysObj");
-
-$groups = RT::Groups->new($RT::SystemUser);
-$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj);
-is($groups->Count, 0, "RTxGroupRight not found for RTxObj");
-
-$groups = RT::Groups->new($RT::SystemUser);
-$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]);
-is($groups->Count, 1, "RTxGroupRight found for RTxObj using EquivObjects");
-
-$ace = RT::Record->new($RT::SystemUser);
-$ace->Table('ACL');
-$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)});
-($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System::Record', ObjectId => 5 );
-ok ($id, "ACL for RTxObj created");
-
-my $RTxObj2 = {};
-bless $RTxObj2, 'RTx::System::Record';
-*RTx::System::Record::Id = sub { 5; };
-
-$groups = RT::Groups->new($RT::SystemUser);
-$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2);
-is($groups->Count, 1, "RTxGroupRight found for RTxObj2");
-
-$groups = RT::Groups->new($RT::SystemUser);
-$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]);
-is($groups->Count, 1, "RTxGroupRight found for RTxObj2");
-
-
-
-=end testing
=cut
diff --git a/rt/lib/RT/Handle.pm b/rt/lib/RT/Handle.pm
index b5f94d8..46070ce 100644
--- a/rt/lib/RT/Handle.pm
+++ b/rt/lib/RT/Handle.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,96 +45,1017 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
- RT::Handle - RT's database handle
+RT::Handle - RT's database handle
=head1 SYNOPSIS
- use RT::Handle;
+ use RT;
+ BEGIN { RT::LoadConfig() };
+ use RT::Handle;
=head1 DESCRIPTION
-=begin testing
-
-ok(require RT::Handle);
-
-=end testing
-
-=head1 METHODS
+C<RT::Handle> is RT specific wrapper over one of L<DBIx::SearchBuilder::Handle>
+classes. As RT works with different types of DBs we subclass repsective handler
+from L<DBIx::SerachBuilder>. Type of the DB is defined by C<DatabasseType> RT's
+config option. You B<must> load this module only when the configs have been
+loaded.
=cut
package RT::Handle;
use strict;
+use warnings;
use vars qw/@ISA/;
-eval "use DBIx::SearchBuilder::Handle::$RT::DatabaseType;
-\@ISA= qw(DBIx::SearchBuilder::Handle::$RT::DatabaseType);";
+=head1 METHODS
+
+=head2 FinalizeDatabaseType
-if ($@) {
- die "Unable to load DBIx::SearchBuilder database handle for '$RT::DatabaseType'.".
- "\n".
- "Perhaps you've picked an invalid database type or spelled it incorrectly.".
- "\n". $@;
+Sets RT::Handle's superclass to the correct subclass of
+L<DBIx::SearchBuilder::Handle>, using the C<DatabaseType> configuration.
+
+=cut
+
+sub FinalizeDatabaseType {
+ eval "use DBIx::SearchBuilder::Handle::". RT->Config->Get('DatabaseType') .";
+ \@ISA= qw(DBIx::SearchBuilder::Handle::". RT->Config->Get('DatabaseType') .");";
+
+ if ($@) {
+ die "Unable to load DBIx::SearchBuilder database handle for '". RT->Config->Get('DatabaseType') ."'.\n".
+ "Perhaps you've picked an invalid database type or spelled it incorrectly.\n".
+ $@;
+ }
}
=head2 Connect
-Connects to RT's database handle.
-Takes nothing. Calls SUPER::Connect with the needed args
+Connects to RT's database using credentials and options from the RT config.
+Takes nothing.
=cut
sub Connect {
my $self = shift;
- if ($RT::DatabaseType eq 'Oracle') {
+ my $db_type = RT->Config->Get('DatabaseType');
+ if ( $db_type eq 'Oracle' ) {
$ENV{'NLS_LANG'} = "AMERICAN_AMERICA.AL32UTF8";
$ENV{'NLS_NCHAR'} = "AL32UTF8";
-
}
$self->SUPER::Connect(
- User => $RT::DatabaseUser,
- Password => $RT::DatabasePassword,
- );
+ User => RT->Config->Get('DatabaseUser'),
+ Password => RT->Config->Get('DatabasePassword'),
+ );
+
+ if ( $db_type eq 'mysql' ) {
+ my $version = $self->DatabaseVersion;
+ ($version) = $version =~ /^(\d+\.\d+)/;
+ $self->dbh->do("SET NAMES 'utf8'") if $version >= 4.1;
+ }
- $self->dbh->{LongReadLen} = $RT::MaxAttachmentSize;
-
+ $self->dbh->{'LongReadLen'} = RT->Config->Get('MaxAttachmentSize');
}
=head2 BuildDSN
-Build the DSN for the RT database. doesn't take any parameters, draws all that
-from the config file.
+Build the DSN for the RT database. Doesn't take any parameters, draws all that
+from the config.
=cut
-use File::Spec;
+require File::Spec;
sub BuildDSN {
my $self = shift;
-# Unless the database port is a positive integer, we really don't want to pass it.
-$RT::DatabasePort = undef unless (defined $RT::DatabasePort && $RT::DatabasePort =~ /^(\d+)$/);
-$RT::DatabaseHost = undef unless (defined $RT::DatabaseHost && $RT::DatabaseHost ne '');
-$RT::DatabaseName = File::Spec->catfile($RT::VarPath, $RT::DatabaseName)
- if ($RT::DatabaseType eq 'SQLite') and
- not File::Spec->file_name_is_absolute($RT::DatabaseName);
+ # Unless the database port is a positive integer, we really don't want to pass it.
+ my $db_port = RT->Config->Get('DatabasePort');
+ $db_port = undef unless (defined $db_port && $db_port =~ /^(\d+)$/);
+ my $db_host = RT->Config->Get('DatabaseHost');
+ $db_host = undef unless $db_host;
+ my $db_name = RT->Config->Get('DatabaseName');
+ my $db_type = RT->Config->Get('DatabaseType');
+ $db_name = File::Spec->catfile($RT::VarPath, $db_name)
+ if $db_type eq 'SQLite' && !File::Spec->file_name_is_absolute($db_name);
+
+ my %args = (
+ Host => $db_host,
+ Database => $db_name,
+ Port => $db_port,
+ Driver => $db_type,
+ RequireSSL => RT->Config->Get('DatabaseRequireSSL'),
+ DisconnectHandleOnDestroy => 1,
+ );
+ if ( $db_type eq 'Oracle' && $db_host ) {
+ $args{'SID'} = delete $args{'Database'};
+ }
+ $self->SUPER::BuildDSN( %args );
+}
+
+=head2 DSN
+
+Returns the DSN for this handle. In order to get correct value you must
+build DSN first, see L</BuildDSN>.
+
+This is method can be called as class method, in this case creates
+temporary handle object, L</BuildDSN builds DSN> and returns it.
+
+=cut
+
+sub DSN {
+ my $self = shift;
+ return $self->SUPER::DSN if ref $self;
+
+ my $handle = $self->new;
+ $handle->BuildDSN;
+ return $handle->DSN;
+}
+
+=head2 SystemDSN
+
+Returns a DSN suitable for database creates and drops
+and user creates and drops.
+
+Gets RT's DSN first (see L<DSN>) and then change it according
+to requirements of a database system RT's using.
+
+=cut
+
+sub SystemDSN {
+ my $self = shift;
+
+ my $db_name = RT->Config->Get('DatabaseName');
+ my $db_type = RT->Config->Get('DatabaseType');
+
+ my $dsn = $self->DSN;
+ if ( $db_type eq 'mysql' ) {
+ # with mysql, you want to connect sans database to funge things
+ $dsn =~ s/dbname=\Q$db_name//;
+ }
+ elsif ( $db_type eq 'Pg' ) {
+ # with postgres, you want to connect to template1 database
+ $dsn =~ s/dbname=\Q$db_name/dbname=template1/;
+ }
+ elsif ( $db_type eq 'Informix' ) {
+ # with Informix, you want to connect sans database:
+ $dsn =~ s/Informix:\Q$db_name/Informix:/;
+ }
+ return $dsn;
+}
+
+=head2 Database compatibility and integrity checks
+
+
+
+=cut
+
+sub CheckIntegrity {
+ my $self = shift;
+
+ my $dsn = $self->DSN;
+ my $user = RT->Config->Get('DatabaseUser');
+ my $pass = RT->Config->Get('DatabasePassword');
+
+ my $dbh = DBI->connect(
+ $dsn, $user, $pass,
+ { RaiseError => 0, PrintError => 0 },
+ );
+ unless ( $dbh ) {
+ return (0, 'no connection', "Failed to connect to $dsn as user '$user': ". $DBI::errstr);
+ }
+
+ RT::ConnectToDatabase();
+ RT::InitLogging();
+
+ require RT::CurrentUser;
+ my $test_user = new RT::CurrentUser;
+ $test_user->Load('RT_System');
+ unless ( $test_user->id ) {
+ return (0, 'no system user', "Couldn't find RT_System user in the DB '$dsn'");
+ }
+
+ $test_user = new RT::CurrentUser;
+ $test_user->Load('Nobody');
+ unless ( $test_user->id ) {
+ return (0, 'no nobody user', "Couldn't find Nobody user in the DB '$dsn'");
+ }
+
+ return $dbh;
+}
+
+sub CheckCompatibility {
+ my $self = shift;
+ my $dbh = shift;
+ my $state = shift || 'post';
+
+ my $db_type = RT->Config->Get('DatabaseType');
+ if ( $db_type eq "mysql" ) {
+ # Check which version we're running
+ my $version = ($dbh->selectrow_array("show variables like 'version'"))[1];
+ return (0, "couldn't get version of the mysql server")
+ unless $version;
+
+ ($version) = $version =~ /^(\d+\.\d+)/;
+ return (0, "RT is unsupported on MySQL versions before 4.0.x, it's $version")
+ if $version < 4;
+
+ # MySQL must have InnoDB support
+ my $innodb = ($dbh->selectrow_array("show variables like 'have_innodb'"))[1];
+ if ( lc $innodb eq "no" ) {
+ return (0, "RT requires that MySQL be compiled with InnoDB table support.\n".
+ "See http://dev.mysql.com/doc/mysql/en/InnoDB.html");
+ } elsif ( lc $innodb eq "disabled" ) {
+ return (0, "RT requires that MySQL InnoDB table support be enabled.\n".
+ "Remove the 'skip-innodb' line from your my.cnf file, restart MySQL, and try again.\n");
+ }
+
+ if ( $state eq 'post' ) {
+ my $create_table = $dbh->selectrow_arrayref("SHOW CREATE TABLE Tickets")->[1];
+ unless ( $create_table =~ /(?:ENGINE|TYPE)\s*=\s*InnoDB/i ) {
+ return (0, "RT requires that all its tables be of InnoDB type. Upgrade RT tables.");
+ }
+ }
+ if ( $version >= 4.1 && $state eq 'post' ) {
+ my $create_table = $dbh->selectrow_arrayref("SHOW CREATE TABLE Attachments")->[1];
+ unless ( $create_table =~ /\bContent\b[^,]*BLOB/i ) {
+ return (0, "RT since version 3.8 has new schema for MySQL versions after 4.1.0\n"
+ ."Follow instructions in the UPGRADING.mysql file.");
+ }
+ }
+ }
+ return (1)
+}
+
+=head2 Database maintanance
+
+=head3 CreateDatabase $DBH
+
+Creates a new database. This method can be used as class method.
+
+Takes DBI handle. Many database systems require special handle to
+allow you to create a new database, so you have to use L<SystemDSN>
+method during connection.
+
+Fetches type and name of the DB from the config.
+
+=cut
+
+sub CreateDatabase {
+ my $self = shift;
+ my $dbh = shift or return (0, "No DBI handle provided");
+ my $db_type = RT->Config->Get('DatabaseType');
+ my $db_name = RT->Config->Get('DatabaseName');
+
+ my $status;
+ if ( $db_type eq 'SQLite' ) {
+ return (1, 'Skipped as SQLite doesn\'t need any action');
+ }
+ elsif ( $db_type eq 'Oracle' ) {
+ my $db_user = RT->Config->Get('DatabaseUser');
+ my $db_pass = RT->Config->Get('DatabasePassword');
+ $status = $dbh->do(
+ "CREATE USER $db_user IDENTIFIED BY $db_pass"
+ ." default tablespace USERS"
+ ." temporary tablespace TEMP"
+ ." quota unlimited on USERS"
+ );
+ unless ( $status ) {
+ return $status, "Couldn't create user $db_user identified by $db_pass."
+ ."\nError: ". $dbh->errstr;
+ }
+ $status = $dbh->do( "GRANT connect, resource TO $db_user" );
+ unless ( $status ) {
+ return $status, "Couldn't grant connect and resource to $db_user."
+ ."\nError: ". $dbh->errstr;
+ }
+ return (1, "Created user $db_user. All RT's objects should be in his schema.");
+ }
+ elsif ( $db_type eq 'Pg' ) {
+ # XXX: as we get external DBH we don't know if RaiseError or PrintError
+ # are enabled, so we have to setup it here and restore them back
+ $status = $dbh->do("CREATE DATABASE $db_name WITH ENCODING='UNICODE' TEMPLATE template0")
+ || $dbh->do("CREATE DATABASE $db_name TEMPLATE template0");
+ }
+ elsif ( $db_type eq 'Informix' ) {
+ local $ENV{'DB_LOCALE'} = 'en_us.utf8';
+ $status = $dbh->do("CREATE DATABASE $db_name WITH BUFFERED LOG");
+ }
+ else {
+ $status = $dbh->do("CREATE DATABASE $db_name");
+ }
+ return ($status, $DBI::errstr);
+}
+
+=head3 DropDatabase $DBH [Force => 0]
+
+Drops RT's database. This method can be used as class method.
+
+Takes DBI handle as first argument. Many database systems require
+special handle to allow you to create a new database, so you have
+to use L<SystemDSN> method during connection.
+
+Fetches type and name of the DB from the config.
+
+=cut
+
+sub DropDatabase {
+ my $self = shift;
+ my $dbh = shift or return (0, "No DBI handle provided");
+
+ my $db_type = RT->Config->Get('DatabaseType');
+ my $db_name = RT->Config->Get('DatabaseName');
+
+ if ( $db_type eq 'Oracle' || $db_type eq 'Informix' ) {
+ my $db_user = RT->Config->Get('DatabaseUser');
+ my $status = $dbh->do( "DROP USER $db_user CASCADE" );
+ unless ( $status ) {
+ return 0, "Couldn't drop user $db_user."
+ ."\nError: ". $dbh->errstr;
+ }
+ return (1, "Successfully dropped user '$db_user' with his schema.");
+ }
+ elsif ( $db_type eq 'SQLite' ) {
+ my $path = $db_name;
+ $path = "$RT::VarPath/$path" unless substr($path, 0, 1) eq '/';
+ unlink $path or return (0, "Couldn't remove '$path': $!");
+ return (1);
+ } else {
+ $dbh->do("DROP DATABASE ". $db_name)
+ or return (0, $DBI::errstr);
+ }
+ return (1);
+}
+
+=head2 InsertACL
+
+=cut
+
+sub InsertACL {
+ my $self = shift;
+ my $dbh = shift;
+ my $base_path = shift || $RT::EtcPath;
+
+ my $db_type = RT->Config->Get('DatabaseType');
+ return (1) if $db_type eq 'SQLite';
+
+ $dbh = $self->dbh if !$dbh && ref $self;
+ return (0, "No DBI handle provided") unless $dbh;
+
+ return (0, "'$base_path' doesn't exist") unless -e $base_path;
+
+ my $path;
+ if ( -d $base_path ) {
+ $path = File::Spec->catfile( $base_path, "acl.$db_type");
+ $path = $self->GetVersionFile($dbh, $path);
+
+ $path = File::Spec->catfile( $base_path, "acl")
+ unless $path && -e $path;
+ return (0, "Couldn't find ACLs for $db_type")
+ unless -e $path;
+ } else {
+ $path = $base_path;
+ }
+
+ local *acl;
+ do $path || return (0, "Couldn't load ACLs: " . $@);
+ my @acl = acl($dbh);
+ foreach my $statement (@acl) {
+ my $sth = $dbh->prepare($statement)
+ or return (0, "Couldn't prepare SQL query:\n $statement\n\nERROR: ". $dbh->errstr);
+ unless ( $sth->execute ) {
+ return (0, "Couldn't run SQL query:\n $statement\n\nERROR: ". $sth->errstr);
+ }
+ }
+ return (1);
+}
+
+=head2 InsertSchema
+
+=cut
+
+sub InsertSchema {
+ my $self = shift;
+ my $dbh = shift;
+ my $base_path = (shift || $RT::EtcPath);
+
+ $dbh = $self->dbh if !$dbh && ref $self;
+ return (0, "No DBI handle provided") unless $dbh;
+
+ my $db_type = RT->Config->Get('DatabaseType');
+
+ my $file;
+ if ( -d $base_path ) {
+ $file = $base_path . "/schema." . $db_type;
+ } else {
+ $file = $base_path;
+ }
+
+ $file = $self->GetVersionFile( $dbh, $file );
+ unless ( $file ) {
+ return (0, "Couldn't find schema file(s) '$file*'");
+ }
+ unless ( -f $file && -r $file ) {
+ return (0, "File '$file' doesn't exist or couldn't be read");
+ }
+
+ my (@schema);
+
+ open my $fh_schema, "<$file";
+
+ my $has_local = 0;
+ open my $fh_schema_local, "<" . $self->GetVersionFile( $dbh, $RT::LocalEtcPath . "/schema." . $db_type )
+ and $has_local = 1;
+
+ my $statement = "";
+ foreach my $line ( <$fh_schema>, ($_ = ';;'), $has_local? <$fh_schema_local>: () ) {
+ $line =~ s/\#.*//g;
+ $line =~ s/--.*//g;
+ $statement .= $line;
+ if ( $line =~ /;(\s*)$/ ) {
+ $statement =~ s/;(\s*)$//g;
+ push @schema, $statement;
+ $statement = "";
+ }
+ }
+ close $fh_schema; close $fh_schema_local;
+
+ if ( $db_type eq 'Oracle' ) {
+ my $db_user = RT->Config->Get('DatabaseUser');
+ my $status = $dbh->do( "ALTER SESSION SET CURRENT_SCHEMA=$db_user" );
+ unless ( $status ) {
+ return $status, "Couldn't set current schema to $db_user."
+ ."\nError: ". $dbh->errstr;
+ }
+ }
+
+ local $SIG{__WARN__} = sub {};
+ my $is_local = 0;
+ $dbh->begin_work or return (0, "Couldn't begin transaction: ". $dbh->errstr);
+ foreach my $statement (@schema) {
+ if ( $statement =~ /^\s*;$/ ) {
+ $is_local = 1; next;
+ }
+
+ my $sth = $dbh->prepare($statement)
+ or return (0, "Couldn't prepare SQL query:\n$statement\n\nERROR: ". $dbh->errstr);
+ unless ( $sth->execute or $is_local ) {
+ return (0, "Couldn't run SQL query:\n$statement\n\nERROR: ". $sth->errstr);
+ }
+ }
+ $dbh->commit or return (0, "Couldn't commit transaction: ". $dbh->errstr);
+ return (1);
+}
+
+=head1 GetVersionFile
+
+Takes base name of the file as argument, scans for <base name>-<version> named
+files and returns file name with closest version to the version of the RT DB.
+
+=cut
+
+sub GetVersionFile {
+ my $self = shift;
+ my $dbh = shift;
+ my $base_name = shift;
+ my $db_version = ref $self
+ ? $self->DatabaseVersion
+ : do {
+ my $tmp = RT::Handle->new;
+ $tmp->dbh($dbh);
+ $tmp->DatabaseVersion;
+ };
- $self->SUPER::BuildDSN(Host => $RT::DatabaseHost,
- Database => $RT::DatabaseName,
- Port => $RT::DatabasePort,
- Driver => $RT::DatabaseType,
- RequireSSL => $RT::DatabaseRequireSSL,
- DisconnectHandleOnDestroy => 1
- );
-
+ require File::Glob;
+ my @files = File::Glob::bsd_glob("$base_name*");
+ return '' unless @files;
+ my %version = map { $_ =~ /\.\w+-([-\w\.]+)$/; ($1||0) => $_ } @files;
+ my $version;
+ foreach ( reverse sort cmp_version keys %version ) {
+ if ( cmp_version( $db_version, $_ ) >= 0 ) {
+ $version = $_;
+ last;
+ }
+ }
+
+ return defined $version? $version{ $version } : undef;
}
+sub cmp_version($$) {
+ my ($a, $b) = (@_);
+ $b =~ s/HEAD$/9999/;
+ my @a = split /[^0-9]+/, $a;
+ my @b = split /[^0-9]+/, $b;
+ for ( my $i = 0; $i < @a; $i++ ) {
+ return 1 unless defined $b[$i];
+ return $a[$i] <=> $b[$i] if $a[$i] <=> $b[$i];
+ }
+ return 0 if @a == @b;
+ return -1;
+}
+
+
+=head2 InsertInitialData
+
+Inserts system objects into RT's DB, like system user or 'nobody',
+internal groups and other records required. However, this method
+doesn't insert any real users like 'root' and you have to use
+InsertData or another way to do that.
+
+Takes no arguments. Returns status and message tuple.
+
+It's safe to call this method even if those objects already exist.
+
+=cut
+
+sub InsertInitialData {
+ my $self = shift;
+
+ my @warns;
+
+ # create RT_System user and grant him rights
+ {
+ require RT::CurrentUser;
+
+ my $test_user = RT::User->new( new RT::CurrentUser );
+ $test_user->Load('RT_System');
+ if ( $test_user->id ) {
+ push @warns, "Found system user in the DB.";
+ }
+ else {
+ my $user = RT::User->new( new RT::CurrentUser );
+ my ( $val, $msg ) = $user->_BootstrapCreate(
+ Name => 'RT_System',
+ RealName => 'The RT System itself',
+ Comments => 'Do not delete or modify this user. '
+ . 'It is integral to RT\'s internal database structures',
+ Creator => '1',
+ LastUpdatedBy => '1',
+ );
+ return ($val, $msg) unless $val;
+ }
+ DBIx::SearchBuilder::Record::Cachable->FlushCache;
+ }
+
+ # init RT::SystemUser and RT::System objects
+ RT::InitSystemObjects();
+ unless ( $RT::SystemUser->id ) {
+ return (0, "Couldn't load system user");
+ }
+
+ # grant SuperUser right to system user
+ {
+ my $test_ace = RT::ACE->new( $RT::SystemUser );
+ $test_ace->LoadByCols(
+ PrincipalId => ACLEquivGroupId( $RT::SystemUser->Id ),
+ PrincipalType => 'Group',
+ RightName => 'SuperUser',
+ ObjectType => 'RT::System',
+ ObjectId => 1,
+ );
+ if ( $test_ace->id ) {
+ push @warns, "System user has global SuperUser right.";
+ } else {
+ my $ace = RT::ACE->new( $RT::SystemUser );
+ my ( $val, $msg ) = $ace->_BootstrapCreate(
+ PrincipalId => ACLEquivGroupId( $RT::SystemUser->Id ),
+ PrincipalType => 'Group',
+ RightName => 'SuperUser',
+ ObjectType => 'RT::System',
+ ObjectId => 1,
+ );
+ return ($val, $msg) unless $val;
+ }
+ DBIx::SearchBuilder::Record::Cachable->FlushCache;
+ }
+
+ # system groups
+ # $self->loc('Everyone'); # For the string extractor to get a string to localize
+ # $self->loc('Privileged'); # For the string extractor to get a string to localize
+ # $self->loc('Unprivileged'); # For the string extractor to get a string to localize
+ foreach my $name (qw(Everyone Privileged Unprivileged)) {
+ my $group = RT::Group->new( $RT::SystemUser );
+ $group->LoadSystemInternalGroup( $name );
+ if ( $group->id ) {
+ push @warns, "System group '$name' already exists.";
+ next;
+ }
+
+ $group = RT::Group->new( $RT::SystemUser );
+ my ( $val, $msg ) = $group->_Create(
+ Type => $name,
+ Domain => 'SystemInternal',
+ Description => 'Pseudogroup for internal use', # loc
+ Name => '',
+ Instance => '',
+ );
+ return ($val, $msg) unless $val;
+ }
+
+ # nobody
+ {
+ my $user = RT::User->new( $RT::SystemUser );
+ $user->Load('Nobody');
+ if ( $user->id ) {
+ push @warns, "Found 'Nobody' user in the DB.";
+ }
+ else {
+ my ( $val, $msg ) = $user->Create(
+ Name => 'Nobody',
+ RealName => 'Nobody in particular',
+ Comments => 'Do not delete or modify this user. It is integral '
+ .'to RT\'s internal data structures',
+ Privileged => 0,
+ );
+ return ($val, $msg) unless $val;
+ }
+
+ if ( $user->HasRight( Right => 'OwnTicket', Object => $RT::System ) ) {
+ push @warns, "User 'Nobody' has global OwnTicket right.";
+ } else {
+ my ( $val, $msg ) = $user->PrincipalObj->GrantRight(
+ Right => 'OwnTicket',
+ Object => $RT::System,
+ );
+ return ($val, $msg) unless $val;
+ }
+ }
+
+ # rerun to get init Nobody as well
+ RT::InitSystemObjects();
+
+ # system role groups
+ foreach my $name (qw(Owner Requestor Cc AdminCc)) {
+ my $group = RT::Group->new( $RT::SystemUser );
+ $group->LoadSystemRoleGroup( $name );
+ if ( $group->id ) {
+ push @warns, "System role '$name' already exists.";
+ next;
+ }
+
+ $group = RT::Group->new( $RT::SystemUser );
+ my ( $val, $msg ) = $group->_Create(
+ Type => $name,
+ Domain => 'RT::System-Role',
+ Description => 'SystemRolegroup for internal use', # loc
+ Name => '',
+ Instance => '',
+ );
+ return ($val, $msg) unless $val;
+ }
+
+ push @warns, "You appear to have a functional RT database."
+ if @warns;
+
+ return (1, join "\n", @warns);
+}
+
+=head2 InsertData
+
+Load some sort of data into the database, takes path to a file.
+
+=cut
+
+sub InsertData {
+ my $self = shift;
+ my $datafile = shift;
+
+ # Slurp in stuff to insert from the datafile. Possible things to go in here:-
+ our (@Groups, @Users, @ACL, @Queues, @ScripActions, @ScripConditions,
+ @Templates, @CustomFields, @Scrips, @Attributes, @Initial, @Final);
+ local (@Groups, @Users, @ACL, @Queues, @ScripActions, @ScripConditions,
+ @Templates, @CustomFields, @Scrips, @Attributes, @Initial, @Final);
+
+ local $@;
+ $RT::Logger->debug("Going to load '$datafile' data file");
+ eval { require $datafile }
+ or return (0, "Couldn't load data from '$datafile' for import:\n\nERROR:". $@);
+
+ if ( @Initial ) {
+ $RT::Logger->debug("Running initial actions...");
+ foreach ( @Initial ) {
+ local $@;
+ eval { $_->(); 1 } or return (0, "One of initial functions failed: $@");
+ }
+ $RT::Logger->debug("Done.");
+ }
+ if ( @Groups ) {
+ $RT::Logger->debug("Creating groups...");
+ foreach my $item (@Groups) {
+ my $new_entry = RT::Group->new( $RT::SystemUser );
+ my $member_of = delete $item->{'MemberOf'};
+ my ( $return, $msg ) = $new_entry->_Create(%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ next;
+ } else {
+ $RT::Logger->debug($return .".");
+ }
+ if ( $member_of ) {
+ $member_of = [ $member_of ] unless ref $member_of eq 'ARRAY';
+ foreach( @$member_of ) {
+ my $parent = RT::Group->new($RT::SystemUser);
+ if ( ref $_ eq 'HASH' ) {
+ $parent->LoadByCols( %$_ );
+ }
+ elsif ( !ref $_ ) {
+ $parent->LoadUserDefinedGroup( $_ );
+ }
+ else {
+ $RT::Logger->error(
+ "(Error: wrong format of MemberOf field."
+ ." Should be name of user defined group or"
+ ." hash reference with 'column => value' pairs."
+ ." Use array reference to add to multiple groups)"
+ );
+ next;
+ }
+ unless ( $parent->Id ) {
+ $RT::Logger->error("(Error: couldn't load group to add member)");
+ next;
+ }
+ my ( $return, $msg ) = $parent->AddMember( $new_entry->Id );
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ } else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+ if ( @Users ) {
+ $RT::Logger->debug("Creating users...");
+ foreach my $item (@Users) {
+ my $new_entry = new RT::User( $RT::SystemUser );
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ } else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+ if ( @Queues ) {
+ $RT::Logger->debug("Creating queues...");
+ for my $item (@Queues) {
+ my $new_entry = new RT::Queue($RT::SystemUser);
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ } else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+ if ( @CustomFields ) {
+ $RT::Logger->debug("Creating custom fields...");
+ for my $item ( @CustomFields ) {
+ my $new_entry = new RT::CustomField( $RT::SystemUser );
+ my $values = delete $item->{'Values'};
+
+ my @queues;
+ # if ref then it's list of queues, so we do things ourself
+ if ( exists $item->{'Queue'} && ref $item->{'Queue'} ) {
+ $item->{'LookupType'} = 'RT::Queue-RT::Ticket';
+ @queues = @{ delete $item->{'Queue'} };
+ }
+
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ unless( $return ) {
+ $RT::Logger->error( $msg );
+ next;
+ }
+
+ foreach my $value ( @{$values} ) {
+ my ( $return, $msg ) = $new_entry->AddValue(%$value);
+ $RT::Logger->error( $msg ) unless $return;
+ }
+
+ # apply by default
+ if ( !@queues && !exists $item->{'Queue'} && $item->{LookupType} ) {
+ my $ocf = RT::ObjectCustomField->new($RT::SystemUser);
+ $ocf->Create( CustomField => $new_entry->Id );
+ }
+
+ for my $q (@queues) {
+ my $q_obj = RT::Queue->new($RT::SystemUser);
+ $q_obj->Load($q);
+ unless ( $q_obj->Id ) {
+ $RT::Logger->error("Could not find queue ". $q );
+ next;
+ }
+ my $OCF = RT::ObjectCustomField->new($RT::SystemUser);
+ ( $return, $msg ) = $OCF->Create(
+ CustomField => $new_entry->Id,
+ ObjectId => $q_obj->Id,
+ );
+ $RT::Logger->error( $msg ) unless $return and $OCF->Id;
+ }
+ }
+
+ $RT::Logger->debug("done.");
+ }
+ if ( @ACL ) {
+ $RT::Logger->debug("Creating ACL...");
+ for my $item (@ACL) {
+
+ my ($princ, $object);
+
+ # Global rights or Queue rights?
+ if ( $item->{'CF'} ) {
+ $object = RT::CustomField->new( $RT::SystemUser );
+ my @columns = ( Name => $item->{'CF'} );
+ push @columns, Queue => $item->{'Queue'} if $item->{'Queue'} and not ref $item->{'Queue'};
+ $object->LoadByName( @columns );
+ } elsif ( $item->{'Queue'} ) {
+ $object = RT::Queue->new($RT::SystemUser);
+ $object->Load( $item->{'Queue'} );
+ } else {
+ $object = $RT::System;
+ }
+
+ $RT::Logger->error("Couldn't load object") and next unless $object and $object->Id;
+
+ # Group rights or user rights?
+ if ( $item->{'GroupDomain'} ) {
+ $princ = RT::Group->new($RT::SystemUser);
+ if ( $item->{'GroupDomain'} eq 'UserDefined' ) {
+ $princ->LoadUserDefinedGroup( $item->{'GroupId'} );
+ } elsif ( $item->{'GroupDomain'} eq 'SystemInternal' ) {
+ $princ->LoadSystemInternalGroup( $item->{'GroupType'} );
+ } elsif ( $item->{'GroupDomain'} eq 'RT::System-Role' ) {
+ $princ->LoadSystemRoleGroup( $item->{'GroupType'} );
+ } elsif ( $item->{'GroupDomain'} eq 'RT::Queue-Role' &&
+ $item->{'Queue'} )
+ {
+ $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'},
+ Queue => $object->id);
+ } else {
+ $princ->Load( $item->{'GroupId'} );
+ }
+ } else {
+ $princ = RT::User->new($RT::SystemUser);
+ $princ->Load( $item->{'UserId'} );
+ }
+
+ # Grant it
+ my ( $return, $msg ) = $princ->PrincipalObj->GrantRight(
+ Right => $item->{'Right'},
+ Object => $object
+ );
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ }
+ else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+
+ if ( @ScripActions ) {
+ $RT::Logger->debug("Creating ScripActions...");
+
+ for my $item (@ScripActions) {
+ my $new_entry = RT::ScripAction->new($RT::SystemUser);
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ }
+ else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+
+ $RT::Logger->debug("done.");
+ }
+
+ if ( @ScripConditions ) {
+ $RT::Logger->debug("Creating ScripConditions...");
+
+ for my $item (@ScripConditions) {
+ my $new_entry = RT::ScripCondition->new($RT::SystemUser);
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ }
+ else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+
+ $RT::Logger->debug("done.");
+ }
+
+ if ( @Templates ) {
+ $RT::Logger->debug("Creating templates...");
+
+ for my $item (@Templates) {
+ my $new_entry = new RT::Template($RT::SystemUser);
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ }
+ else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+ if ( @Scrips ) {
+ $RT::Logger->debug("Creating scrips...");
+
+ for my $item (@Scrips) {
+ my $new_entry = new RT::Scrip($RT::SystemUser);
+
+ my @queues = ref $item->{'Queue'} eq 'ARRAY'? @{ $item->{'Queue'} }: $item->{'Queue'} || 0;
+ push @queues, 0 unless @queues; # add global queue at least
+
+ foreach my $q ( @queues ) {
+ my ( $return, $msg ) = $new_entry->Create( %$item, Queue => $q );
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ }
+ else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+ if ( @Attributes ) {
+ $RT::Logger->debug("Creating predefined searches...");
+ my $sys = RT::System->new($RT::SystemUser);
+
+ for my $item (@Attributes) {
+ my $obj = delete $item->{Object}; # XXX: make this something loadable
+ $obj ||= $sys;
+ my ( $return, $msg ) = $obj->AddAttribute (%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ }
+ else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+ if ( @Final ) {
+ $RT::Logger->debug("Running final actions...");
+ for ( @Final ) {
+ local $@;
+ eval { $_->(); };
+ $RT::Logger->error( "Failed to run one of final actions: $@" )
+ if $@;
+ }
+ $RT::Logger->debug("done.");
+ }
+
+ my $db_type = RT->Config->Get('DatabaseType');
+ $RT::Handle->Disconnect() unless $db_type eq 'SQLite';
+
+ $RT::Logger->debug("Done setting up database content.");
+
+# TODO is it ok to return 1 here? If so, the previous codes in this sub
+# should return (0, $msg) if error happens instead of just warning.
+# anyway, we need to return something here to tell if everything is ok
+ return( 1, 'Done inserting data' );
+}
+
+=head2 ACLEquivGroupId
+
+Given a userid, return that user's acl equivalence group
+
+=cut
+
+sub ACLEquivGroupId {
+ my $id = shift;
+
+ my $cu = $RT::SystemUser;
+ unless ( $cu ) {
+ require RT::CurrentUser;
+ $cu = new RT::CurrentUser;
+ $cu->LoadByName('RT_System');
+ warn "Couldn't load RT_System user" unless $cu->id;
+ }
+
+ my $equiv_group = RT::Group->new( $cu );
+ $equiv_group->LoadACLEquivalenceGroup( $id );
+ return $equiv_group->Id;
+}
+
+__PACKAGE__->FinalizeDatabaseType;
+
eval "require RT::Handle_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Handle_Vendor.pm});
eval "require RT::Handle_Local";
diff --git a/rt/lib/RT/I18N.pm b/rt/lib/RT/I18N.pm
index 28dcac7..ac41b2c 100644
--- a/rt/lib/RT/I18N.pm
+++ b/rt/lib/RT/I18N.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::I18N - a base class for localization of RT
@@ -86,41 +87,43 @@ our %Lexicon = (
Initializes the lexicons used for localization.
-=begin testing
-
-use_ok (RT::I18N);
-ok(RT::I18N->Init);
-
-=end testing
=cut
sub Init {
require File::Glob;
+ my @lang = RT->Config->Get('LexiconLanguages');
+ @lang = ('*') unless @lang;
+
+ # load default functions
+ require substr(__FILE__, 0, -3) . '/i_default.pm';
+
# Load language-specific functions
- foreach my $language ( File::Glob::bsd_glob(substr(__FILE__, 0, -3) . "/*.pm")) {
- if ($language =~ /^([-\w\s.\/\\~:]+)$/) {
- require $1;
+ foreach my $file ( File::Glob::bsd_glob(substr(__FILE__, 0, -3) . "/*.pm") ) {
+ unless ( $file =~ /^([-\w\s\.\/\\~:]+)$/ ) {
+ warn("$file is tainted. not loading");
+ next;
}
- else {
- warn("$language is tainted. not loading");
- }
+ $file = $1;
+
+ my ($lang) = ($file =~ /([^\\\/]+?)\.pm$/);
+ next unless grep $_ eq '*' || $_ eq $lang, @lang;
+ require $file;
}
- my @lang = @RT::LexiconLanguages;
- @lang = ('*') unless @lang;
+ my %import;
+ foreach my $l ( @lang ) {
+ $import{$l} = [
+ Gettext => (substr(__FILE__, 0, -3) . "/$l.po"),
+ Gettext => "$RT::LocalLexiconPath/*/$l.po",
+ Gettext => "$RT::LocalLexiconPath/$l.po",
+ ];
+ push @{ $import{$l} }, map {(Gettext => "$_/$l.po")} RT->PluginDirs('po');
+ }
# Acquire all .po files and iterate them into lexicons
- Locale::Maketext::Lexicon->import({
- _decode => 1, map {
- $_ => [
- Gettext => (substr(__FILE__, 0, -3) . "/$_.po"),
- Gettext => "$RT::LocalLexiconPath/*/$_.po",
- Gettext => "$RT::LocalLexiconPath/$_.po",
- ],
- } @lang
- });
+ Locale::Maketext::Lexicon->import({ _decode => 1, %import });
return 1;
}
@@ -130,18 +133,6 @@ sub Init {
Returns the encoding of the current lexicon, as yanked out of __ContentType's "charset" field.
If it can't find anything, it returns 'ISO-8859-1'
-=begin testing
-
-ok(my $chinese = RT::I18N->get_handle('zh_tw'));
-ok(UNIVERSAL::can($chinese, 'maketext'));
-ok($chinese->maketext('__Content-Type') =~ /utf-8/i, "Found the utf-8 charset for traditional chinese in the string ".$chinese->maketext('__Content-Type'));
-ok($chinese->encoding eq 'utf-8', "The encoding is 'utf-8' -".$chinese->encoding);
-
-ok(my $en = RT::I18N->get_handle('en'));
-ok(UNIVERSAL::can($en, 'maketext'));
-ok($en->encoding eq 'utf-8', "The encoding ".$en->encoding." is 'utf-8'");
-
-=end testing
=cut
@@ -351,7 +342,11 @@ sub DecodeMIMEWordsToEncoding {
# until this is fixed, we must escape any string containing a comma or semicolon
# this is only a bandaid
- $enc_str = qq{"$enc_str"} if ($enc_str =~ /[,;]/);
+ # Some _other_ MUAs encode quotes _already_, and double quotes
+ # confuse us a lot, so only quote it if it isn't quoted
+ # already.
+ $enc_str = qq{"$enc_str"} if $enc_str =~ /[,;]/ and $enc_str !~ /^".*"$/;
+
$str .= $prefix . $enc_str . $trailing;
}
@@ -405,10 +400,14 @@ use Encode::Guess to try to figure it out the string's encoding.
sub _GuessCharset {
my $fallback = 'iso-8859-1';
- my $charset;
- if ( @RT::EmailInputEncodings and eval { require Encode::Guess; 1 } ) {
- Encode::Guess->set_suspects(@RT::EmailInputEncodings);
+ # if $_[0] is null/empty, we don't guess its encoding
+ return $fallback unless defined $_[0] && length $_[0];
+
+ my $charset;
+ my @encodings = RT->Config->Get('EmailInputEncodings');
+ if ( @encodings and eval { require Encode::Guess; 1 } ) {
+ Encode::Guess->set_suspects( @encodings );
my $decoder = Encode::Guess->guess( $_[0] );
if ( defined($decoder) ) {
@@ -421,7 +420,7 @@ sub _GuessCharset {
my %matched = map { $_ => 1 } split(/ or /, $1);
return 'utf-8' if $matched{'utf8'}; # one and only normalization
- foreach my $suspect (@RT::EmailInputEncodings) {
+ foreach my $suspect (RT->Config->Get('EmailInputEncodings')) {
next unless $matched{$suspect};
$RT::Logger->debug("Encode::Guess ambiguous ($decoder); using $suspect");
$charset = $suspect;
@@ -436,11 +435,13 @@ sub _GuessCharset {
$RT::Logger->warning("Encode::Guess failed: decoder is undefined; fallback to $fallback");
}
}
- else {
- $RT::Logger->warning("Cannot Encode::Guess; fallback to $fallback");
+ elsif ( @encodings && $@ ) {
+ $RT::Logger->error("You have set EmailInputEncodings, but we couldn't load Encode::Guess: $@");
+ } else {
+ $RT::Logger->warning("No EmailInputEncodings set, fallback to $fallback");
}
- return($charset || $fallback);
+ return ($charset || $fallback);
}
# }}}
diff --git a/rt/lib/RT/I18N/ar.po b/rt/lib/RT/I18N/ar.po
new file mode 100644
index 0000000..a7e6d2b
--- /dev/null
+++ b/rt/lib/RT/I18N/ar.po
@@ -0,0 +1,7509 @@
+# Arabic translation for rt
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# This file is distributed under the same license as the rt package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: rt\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-07 21:00+0000\n"
+"Last-Translator: Ehab A.Elghariani <ehab517@gmail.com>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " لا يوجد pubkey!"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (غير موثوق!)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr "#%1: %2"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr "%1 #%2"
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1 %2 %3 %4:%5:%6 %7"
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr "%1 %2 أضيÙت"
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr "منذ 1% 2%"
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr "%1 %2 تغيرت إلى 3%"
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr "تم مسح 1% 2%"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "تم مسح 1% 2%"
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "تم تغيير اسم 1% 2% الى %3"
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "تم Ø­Ùظ1% 2%"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr "%1 %2 مع القالب 3%"
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr "%1 (%2) بواسطة %3"
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr "%1 (لم تتغير)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr ""
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr ""
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr ""
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr ""
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr ""
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr ""
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "لوحة مؤشرات %1"
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr ""
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr "%1 بواسطة %2"
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr ""
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr "نسخ 1%"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr "تم إنشاء %1"
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr "تم مسح %1"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 غير موجود"
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "ال%1 بطاقات الأكثر أولوية التي تخصني"
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr ""
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr ""
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr ""
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr "آخر %1 بطاقات بدون مالك"
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "تحديث %1 %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr ""
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr ""
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "لوحة قرائات %1"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr ""
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr "%1b"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr "%1k"
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr ""
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr "(أدخل أرقام تعري٠البطاقات أو عناوينها Ù…Ùصولة بمساÙØ©)"
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr "(لا يوجد حقول مخصصة)"
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr "(لا يوجد أعضاء)"
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr "(لا يوجد قوالب"
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr "لا شيء"
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(إرسال نسخة من آخر تحديث إلى قائمة من عناوين البريد الإلكتروني الإدارية Ù…Ùصول بينها بÙاصلة, سيستقبل المعنيون أي تحديث ÙÙŠ المستقبل)"
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(إرسال نسخة من آخر تحديث إلى قائمة من عناوين البريد الإلكتروني Ù…Ùصول بينها بÙاصلة, سيستقبل المعنيون أي تحديث ÙÙŠ المستقبل)"
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr ""
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr "(لن يتم إرسال بريد له)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "أيّ"
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr "(خالي)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(لا يوجد pubkey)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr "(لا يوجد قيمة)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr "(لا يوجد قيم)"
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr "(بطاقة واحدة Ùقط)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr "(ÙÙŠ إنتظار التصديق)"
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr "(ضروري)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr "(بدون عنوان)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(غير موثوق!)"
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr "-"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr ""
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"بطاقة جديدة تحت\" />&nbsp;%1"
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"بطاقة جديدة تحت\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr "قالب Ùارغ"
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr "لا يوجد كلمة سر بعد, لذا لا يستطيع المستخدون تسجيل الدخول بعد."
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr "Ùˆ"
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr "عن Ù†Ùسى"
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr "تحكم بالوصول"
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr "إجراء"
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr "تم التنÙيذ.\\n"
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr ""
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr "أض٠نسخة إدارية"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "أض٠إشارة مرجعية"
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr "أض٠نسخة"
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr "إضاÙØ© أعمدة"
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr ""
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr "أض٠المزيد من الملÙات"
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr "أض٠قيمة"
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr "أض٠تعليق أو رد"
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr "أض٠أعضاء"
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr "أض٠مشاهدين جدد"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "أض٠هذه المصطلحات"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "أض٠هذه المصطلحات و إبدأ البحث"
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr "أض٠قيم"
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "عنوان"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr "عنوان 1"
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr "عنوان 2"
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr "نسخة إدارية"
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr "تهميشة إداري"
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr "إدارة تصنيÙات"
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr ""
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr ""
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr ""
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr "متقدم"
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr ""
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr "أو/و"
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr "تنطبق على"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr "تطبيق"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr "طبق التغييرات"
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr "إعتماد"
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr "إعتماد #%1: %2"
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr ""
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr ""
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr ""
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr ""
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "ابريل"
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr "تصاعدي"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr "تصاعدي"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr ""
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr "إلحاق"
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr "إلحاق ملÙ"
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr "إلحاق ملÙ"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "ملحق"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr "ملحقات"
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr ""
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "اغسطس"
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr "رد آلي"
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr "متوÙر"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "إلى الخلÙ"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "البيانات الأساسية"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr ""
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr ""
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr "Ùارغ"
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "الجسم"
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "عريض"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "بطاقات معلمة"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr "ترويسات مختصرة"
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr "تحديث جماعي"
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr ""
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr ""
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "لا يمكن إنشاء بطاقات ÙÙŠ تصني٠معطل."
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr "Ùئة"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr "نسخة إلى"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "تغيير"
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr "غير كلمة السر"
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr "حدد الكلّ"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr ""
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr "البطاقات الأسÙÙ„"
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr "المدينة"
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Ø£Ùرغ"
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr "تÙريغ الكل"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "غلق النّاÙذة"
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr "مغلقة"
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr "البطاقات المغلقة"
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr "تعليق"
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr ""
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr "علق على البطاقة"
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "تهميشات"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr "تهميشات (لاترسل للطالب)"
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr "تهميشات (لاترسل للطالب)"
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr ""
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr "شرط"
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr "التعديلات"
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr "تأكيد"
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr "المحتويات"
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr "Content-Type"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr ""
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr ""
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr ""
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr ""
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr ""
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr "البلد"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr "إنشاء"
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr "أنشئ مجموعة جديدة"
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr ""
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr "إنشاء بطاقة جديدة"
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr "أنشئ مستخدم جديد"
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr ""
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr "إنشاء بطاقة جديدة"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr "إنشاء بطاقة جديدة"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr ""
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr ""
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr ""
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr "البحث الجاري"
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr ""
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr ""
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr ""
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr "خصّص"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "لوحة القرائات"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "اسم قاعدة البيانات"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "نسق التاريخ"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr "التواريخ"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Dec"
+
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "ديسمبر"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr ""
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr ""
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr ""
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr ""
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr ""
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr ""
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr ""
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "الاÙتراضي: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr ""
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr "مسح"
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr ""
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "مسحت %1"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr "منع"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr "معتمد عليها لـ"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr "تعتمد على"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr "تنازلي"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr "تنازلي"
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr "إشرح المسألة بالأسÙÙ„"
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr "الوصÙ"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "الإتجاه"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "معطّل"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr "عرض"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr "أعرض الأعمدة"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr ""
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr ""
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "اسم النطاق"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr "لا تحدث هذه الصÙحة"
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr "تحميل"
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr "ÙÙŠ غضون"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "خطأ: %1"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr "تحرير"
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr ""
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr "تحرير البحث"
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr ""
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr "البريد الإلكتروني"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr ""
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Ù…Ùعّل"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr ""
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr "عطل"
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr ""
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr "الوقت المتوقع"
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr ""
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Ùشل تحميل %1 %2"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Ùشل تحميل %1 %2: %3"
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr ""
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Ùبراير"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "إسم الملÙ"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr "إسم الملÙ"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr "أقصى أولوية"
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr "أقصى أولوية"
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr ""
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr ""
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr ""
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr ""
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr "تنسيق"
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "أمام"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr ""
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr ""
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "عام"
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr ""
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr ""
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr ""
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "إنطلق"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "أنطلق"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "مجموعة"
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr "المجموعات"
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr ""
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr "المحÙوظات"
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr "الرئيسية"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "السّاعة"
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr "ساعات"
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr ""
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr "تعريÙ"
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr "الهوية"
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr ""
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr ""
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr ""
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr ""
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr ""
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr ""
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr ""
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr "خطأ داخلي"
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr "خطأ داخلي: %1"
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr ""
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "كائن خاطيء"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr ""
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr ""
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr ""
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr "مائل"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "يناير"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr ""
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "يوليو"
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr ""
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "يونيو"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr "اللغة"
+
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "اللغة"
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr "كبير"
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr "الأخيرة"
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr ""
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr "على اليسار"
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr ""
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr "رابط"
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr ""
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr ""
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr ""
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr ""
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr "روابط"
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr "تحميل"
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "الموقع"
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr "%1 تسجيل الدخول بإسم"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr "تسجيل الدخول"
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr "تسجيل الخروج"
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr ""
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "البريد إلكتروني"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr ""
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr ""
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr ""
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr ""
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr ""
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr ""
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr ""
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr ""
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr ""
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr ""
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr ""
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr ""
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr ""
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr ""
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr ""
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "مارس"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "مايو"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr ""
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr ""
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr "رسالة"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr ""
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr ""
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr "دقائق"
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr ""
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr ""
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr ""
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr ""
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr ""
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr "حرّك إلى الأسÙÙ„"
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr "حرّك إلى الأعلى"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr ""
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr ""
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr ""
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr "الإسم"
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr ""
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr "أبداً"
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "جديدة"
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr "كلمة سر جديدة"
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr "بحث جديد"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr "مجموعة جديدة"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr "كلمة سر جديدة"
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr ""
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr ""
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr "بطاقة جديدة"
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr ""
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr "التالي"
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "الاسم المستعار"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr "الاسم المستعار"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "لا"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr ""
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr ""
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr ""
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr ""
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr ""
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr ""
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr ""
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr ""
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr "لا أحد"
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "لا شيء"
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr ""
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "غير موجود"
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr ""
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr ""
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr "ملاحظات"
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr ""
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr ""
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr ""
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr ""
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr ""
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr ""
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr ""
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr ""
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr ""
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr ""
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr ""
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr ""
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr ""
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "نوÙمبر"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr "أو"
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr ""
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr ""
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr ""
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Oct"
+
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "أكتوبر"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr ""
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr ""
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr ""
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr "علق على البطاقة"
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr ""
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr ""
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr ""
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr ""
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr ""
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr ""
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr ""
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr ""
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr ""
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Ùتح الرابط"
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr ""
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr "الخيارات"
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr "حسب"
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr "المنظّمة"
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr "إمتلك البطاقات"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr "المالك"
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "صÙحة"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "عدد الصÙÙˆÙ ÙÙŠ الصÙحة"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr "بيجر"
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr "البطاقة الأعلى"
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr "كلمة السر"
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr "لقد تم تغيير كلمة المرور"
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr ""
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr "كلمة السر: %1"
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr ""
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr "كلمتا المرور لا تتطابقان."
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr ""
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr ""
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr "رÙÙض التّصريح"
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr "رÙÙض التّصريح"
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr ""
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr "التÙضيلات"
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "السابق"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr ""
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr "الأولوية"
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr ""
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "إستعلام"
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr "إستعلام"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr "التصنيÙ"
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr ""
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr ""
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr ""
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr ""
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr "بحث سريع"
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr "إنشاء سريع لبطاقة"
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr ""
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr ""
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr ""
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr "لمحة سريعة"
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr "لمحة سريعة للمستخدم %1"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr ""
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr ""
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr ""
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr ""
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr "مشار إليها ÙÙŠ"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr "إشارة إلى"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "تحديث"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr "قم بتحديث الصÙحة كل %1 دقيقة"
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr ""
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr "تذكير"
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr ""
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "إزالة الإشارة المرجعية"
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr ""
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr ""
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr "الطالب"
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr ""
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr ""
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr "إعادة تعيين"
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr "إعادة الضبط للإÙتراض"
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr ""
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr ""
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr "إكتملت"
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr "استرجاع"
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr ""
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "سطور"
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr "عدد الصÙÙˆÙ ÙÙŠ الصÙحة"
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr "Ø­Ùظ"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr "Ø­Ùظ التّغييرات"
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr ""
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr "بحث"
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr ""
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr "بحث عن بطاقات"
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr ""
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr ""
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr ""
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr "أمن"
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr "راجع كذلك:"
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "إنتقاء"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr ""
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr "انتقي مستخدم"
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr ""
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr ""
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr ""
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr ""
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr ""
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr ""
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr ""
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr ""
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "سبتمبر"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "الإعدادات"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr "عرض"
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr "أعرض الأعمدة"
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr "أعرض البيانات الأساسية"
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr ""
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr "أعرض التÙاصيل"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr "بحث بسيط"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr ""
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr "الحجم"
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr ""
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "صغير"
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr "رتب"
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "ترتيب"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "أوراق عمل ممتدة"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr "تبدأ"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr "الولاية"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr "الحالة"
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr "الشكل"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr "الموضوع"
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "الأحد"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr ""
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr ""
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Ø¥Ùتراضي النظام"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr ""
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr "أدوات النّظام"
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr ""
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr "قالب"
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr "قالب #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr ""
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr "البيانات الأساسية"
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr ""
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr ""
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "السÙمة"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr ""
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr ""
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr ""
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "بطاقة"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr ""
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr "البطاقة #%1: %2"
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr "البطاقة %1"
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr ""
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr "البطاقة %1 %2"
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr ""
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr ""
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr ""
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr ""
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr ""
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr ""
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr "البطاقات"
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "البطاقات %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr "الوقت المتوقع"
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr "الوقت المتبقي"
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr "وقت العمل"
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr ""
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "المنطقة الزمنية"
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr "عنوان"
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "إلى"
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr "أدوات"
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr "الإجمالي"
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr "النوع"
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr ""
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr "غير محدود"
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr ""
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr "تحديث"
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr ""
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr ""
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "تحديث تنسيق و بحث"
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr ""
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr ""
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "الاستخدام: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "استخدم الاÙتراضي (%1)"
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "المستخدم"
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr "معَرّ٠من طر٠المستخدم"
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr "أسم المستخدم"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr "المستخدمون"
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr ""
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr ""
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr ""
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr ""
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr ""
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr ""
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr ""
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr ""
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr ""
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr ""
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr ""
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr ""
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr ""
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr "وقت العمل"
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "نعم"
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr ""
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr ""
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr "Zip"
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[لاشيء]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "شريط"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "من أسÙÙ„ إلى أعلى"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr "مقÙÙ„"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr "أيّام"
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr "ممسوحة"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "تنزيل"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr "يساوي"
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "ممتلئ"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr "أكبر من"
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr "مجموعة '%1'"
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr "ساعات"
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr "تعريÙ"
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr ""
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "من اليسار إلى اليمين"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr "أقل من"
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr "مطابق"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "دقائق"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "أبداً"
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr "جديدة"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "لا"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr "بدون اسم"
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr "لا شيء"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr "لا يساوي"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "ﻻ شئ"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "على"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr "Ù…Ùتوحة"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "أخرى..."
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr "التصني٠%1 %2"
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr "مرÙوضة"
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr "إكتملت"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "من اليمين إلى اليسار"
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr "متوقÙØ©"
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr "نظام %1"
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr ""
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr ""
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr "البطاقة #%1 %2"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "من أعلى إلى أسÙÙ„"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr "المستخدم %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "Ù…Ùصل"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "اسبوعياً"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "اسبوعياً (ÙÙŠ 1%) عند 2%"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr "أسابيع"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "ما هو المنÙØ° الذي يعمل به خادم الويب لديك، مثال المنÙØ° 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "مع التÙاصيل"
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "سنوات"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "نعم"
+
diff --git a/rt/lib/RT/I18N/bg.po b/rt/lib/RT/I18N/bg.po
new file mode 100644
index 0000000..a61d4b9
--- /dev/null
+++ b/rt/lib/RT/I18N/bg.po
@@ -0,0 +1,7461 @@
+# Bulgarian translation for rt
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# This file is distributed under the same license as the rt package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: rt\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-02-26 09:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Bulgarian <bg@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr ""
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr ""
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr ""
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr ""
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr ""
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr ""
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr ""
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr ""
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr ""
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr ""
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr ""
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr ""
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr ""
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr ""
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr ""
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr ""
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr ""
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr ""
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr ""
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr ""
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr ""
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr ""
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr ""
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr ""
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr ""
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr ""
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr ""
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr ""
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr ""
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr ""
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr ""
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr ""
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr ""
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr ""
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr ""
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr ""
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr ""
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr ""
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr ""
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr ""
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr ""
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr ""
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr ""
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr ""
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr ""
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr ""
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr ""
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr ""
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr ""
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr ""
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr ""
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr ""
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr ""
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr ""
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr ""
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr ""
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr ""
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr ""
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr ""
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr ""
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr ""
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr ""
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr ""
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr ""
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr ""
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr ""
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr ""
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr ""
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr ""
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr ""
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr ""
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr ""
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr ""
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr ""
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr ""
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr ""
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr ""
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr ""
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr ""
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr ""
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr ""
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr ""
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr ""
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr ""
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr ""
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr ""
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr ""
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr ""
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr ""
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr ""
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr ""
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr ""
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr ""
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr ""
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr ""
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr ""
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr ""
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr ""
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr ""
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr ""
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr ""
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr ""
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr ""
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr ""
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr ""
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr ""
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr ""
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr ""
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr ""
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr ""
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr ""
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr ""
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr ""
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr ""
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr ""
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr ""
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr ""
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr ""
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr ""
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr ""
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr ""
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr ""
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr ""
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr ""
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr ""
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr ""
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr ""
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr ""
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr ""
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr ""
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr ""
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr ""
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr ""
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr ""
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr ""
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr ""
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr ""
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr ""
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr ""
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr ""
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr ""
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr ""
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr ""
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr ""
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr ""
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr ""
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr ""
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr ""
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr ""
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr ""
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr ""
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr ""
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr ""
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr ""
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr ""
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr ""
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr ""
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr ""
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr ""
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr ""
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr ""
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr ""
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr ""
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr ""
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr ""
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr ""
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr ""
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr ""
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr ""
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr ""
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr ""
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr ""
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr ""
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr ""
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr ""
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr ""
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr ""
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr ""
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr ""
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr ""
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr ""
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr ""
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr ""
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr ""
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr ""
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr ""
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr ""
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr ""
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr ""
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr ""
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr ""
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr ""
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr ""
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr ""
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr ""
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr ""
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr ""
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr ""
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr ""
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr ""
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr ""
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr ""
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr ""
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr ""
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr ""
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr ""
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr ""
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr ""
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr ""
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr ""
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr ""
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr ""
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr ""
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr ""
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr ""
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr ""
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr ""
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr ""
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr ""
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr ""
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr ""
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr ""
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr ""
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr ""
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr ""
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr ""
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr ""
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr ""
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr ""
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr ""
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr ""
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr ""
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr ""
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr ""
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr ""
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr ""
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr ""
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr ""
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr ""
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr ""
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr ""
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr ""
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr ""
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr ""
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr ""
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr ""
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr ""
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr ""
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr ""
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr ""
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr ""
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr ""
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr ""
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr ""
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr ""
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr ""
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr ""
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr ""
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr ""
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr ""
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr ""
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr ""
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr ""
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr ""
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr ""
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr ""
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr ""
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr ""
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr ""
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr ""
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr ""
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr ""
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr ""
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr ""
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr ""
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr ""
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr ""
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr ""
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr ""
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr ""
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr ""
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr ""
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr ""
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr ""
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr ""
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr ""
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr ""
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr ""
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr ""
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr ""
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr ""
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr ""
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr ""
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr ""
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr ""
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr ""
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr ""
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr ""
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr ""
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr ""
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr ""
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr ""
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr ""
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr ""
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr ""
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr ""
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr ""
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr ""
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr ""
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr ""
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr ""
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr ""
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr ""
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr ""
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr ""
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr ""
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr ""
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr ""
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr ""
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr ""
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr ""
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr ""
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr ""
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr ""
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr ""
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr ""
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr ""
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr ""
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr ""
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr ""
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr ""
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr ""
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr ""
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr ""
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr ""
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr ""
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr ""
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr ""
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr ""
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr ""
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr ""
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr ""
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/cs.pm b/rt/lib/RT/I18N/cs.pm
index f4157f5..ff8b0e1 100644
--- a/rt/lib/RT/I18N/cs.pm
+++ b/rt/lib/RT/I18N/cs.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::I18N::cs;
# # CZECH TRANSLATORS COMMENTS see Locale::Maketext::TPJ13
diff --git a/rt/lib/RT/I18N/cs.po b/rt/lib/RT/I18N/cs.po
index 4ef1f15..0f66719 100644
--- a/rt/lib/RT/I18N/cs.po
+++ b/rt/lib/RT/I18N/cs.po
@@ -1,686 +1,833 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.6.x\n"
-"POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2008-03-27 19:75+0200\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-07 20:28+0000\n"
"Last-Translator: Daniel Kastner <kastner@mediso-art.cz>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:117
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr "%1 smazán."
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr ""
-#: html/Widgets/SavedSearch:94
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr "%1 přejmenován na %2."
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr ""
-#: html/Widgets/SavedSearch:107
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr "%1 uložen."
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
-#: html/Approvals/Elements/Approve:50 html/Approvals/Elements/ShowDependency:73 html/SelfService/Display.html:48 html/Ticket/Display.html:49 html/Ticket/Display.html:53
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
#. ($TicketObj->Id, $TicketObj->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:116
-msgid "$1"
-msgstr "$1"
-
-#: lib/RT/Record.pm:957
-#. ($label)
-msgid "$prefix %1"
-msgstr "$prefix %1"
-
-#: lib/RT/URI/fsck_com_rt.pm:258
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr "%1 #%2"
-#: lib/RT/Date.pm:367
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: lib/RT/Date.pm:403
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %3.%2.%4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %3.%2.%7 %4:%5:%6"
-#: lib/RT/Record.pm:1707 lib/RT/Transaction_Overlay.pm:668 lib/RT/Transaction_Overlay.pm:711
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 přidán"
-#: lib/RT/Date.pm:364
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "- %1 %2"
-#: lib/RT/Record.pm:1714 lib/RT/Transaction_Overlay.pm:675
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 změněno na %3"
-#: lib/RT/Record.pm:1711 lib/RT/Transaction_Overlay.pm:671 lib/RT/Transaction_Overlay.pm:717
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 smazán"
-#: html/Admin/Elements/EditScrips:67 html/Admin/Elements/ListGlobalScrips:65 html/Ticket/Elements/PreviewScrips:105
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 smazán."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 přejmenován na %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 uložen."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 se vzorem %3"
-#: html/Ticket/Elements/ShowAttachments:74
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) vytvořil %3"
-#: html/SelfService/Update.html:62 html/Ticket/Elements/EditBasics:110 html/Ticket/Update.html:63 html/Ticket/Update.html:65 html/Tools/MyDay.html:71
-#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
-#. (loc($DefaultStatus))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (Nezměněn)"
-#: bin/rt-crontool:239 bin/rt-crontool:246 bin/rt-crontool:252
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - argument k předání %2"
-#: bin/rt-crontool:264
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Výstupní stav jde do STDOUT"
-#: bin/rt-crontool:255
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
msgstr "%1 - Zadejte id vzoru, který chcete použít"
-#: bin/rt-crontool:258
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' transaction"
-msgstr "%1 - Zadejte, zda chcete použít transakci 'first' nebo 'last'"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Zadejte, zda chcete použít transakci 'first', 'last' nebo 'all'"
-#: bin/rt-crontool:249
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Jaký akÄní modul chcete použít"
-#: bin/rt-crontool:243
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Zadejte Äárkami oddÄ›lený seznam typů transakcí, které chcete použít"
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Jaký podmínkový modul chcete použít"
-#: bin/rt-crontool:236
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Jaký vyhledávací modul chcete použít"
-#: bin/rt-crontool:261
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr "%1 - Zadejte typ transakce, kterou chcete použít"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "Řídící panely patřící %1"
-#: html/Elements/Footer:58
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT %2 Copyright 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:152
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "ScripAction %1 nahrána"
-#: lib/RT/Record.pm:1744
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 přidáno jako hodnota pro %2"
-#: lib/RT/Link_Overlay.pm:146 lib/RT/Link_Overlay.pm:153
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 již existuje a má tabulky RT na svém místÄ›, ale neobsahuje metadata RT. PozdÄ›jší krok 'Inicializovat databázi' umí vložit metadata do této existující databáze. Je-li to pÅ™ijatelné, kliknÄ›te níže na 'Úprava základních údajů' pro pokraÄování v úpravÄ› RT."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 již existuje, ale neobsahuje tabulky RT ani metadata. PozdÄ›jší krok 'Inicializovat databázi' umí vložit tabulky a metadata do této existující databáze. Je-li to pÅ™ijatelné, kliknÄ›te níže na 'Úprava základních údajů' pro pokraÄování v úpravÄ› RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 vypadá jako lokální objekt, ale není v databázi"
-#: html/Ticket/Elements/ShowDates:75 lib/RT/Transaction_Overlay.pm:552
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 se zdá být plnÄ› inicializována. Nebudeme potÅ™ebovat vytvoÅ™it žádné tabulky ani vložit metadata, ale můžete pokraÄovat v úpravÄ› RT kliknutím níže na 'Úprava základních údajů'"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 uživatelem %2"
-#: lib/RT/Transaction_Overlay.pm:809 lib/RT/Transaction_Overlay.pm:818 lib/RT/Transaction_Overlay.pm:821
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 změněno z %2 na %3"
-#: html/Search/Build.html:215
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%1 graf podle %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "kopie %1"
-#: lib/RT/Record.pm:961
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 nemůže být nastaveno na %2."
-#: lib/RT/Transaction_Overlay.pm:592
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr "%1 nemůže nastavit stav na vyřešen. Databáze RT je možná nekonzistentní."
+
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 vytvořen"
-#: lib/RT/Transaction_Overlay.pm:597
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 smazán"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 neexistuje."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "%1 nejdůležitějších požadavků, které vlastním"
-#: bin/rt-crontool:231
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr "%1 je nástroj zpracující požadavky z vnějšího plánovacího nástroje jako je cron"
+msgstr "%1 je nástroj zpracující požadavky z vnějšího plánovacího nástroje jako je cron."
-#: lib/RT/Queue_Overlay.pm:865
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 již není %2 této fronty."
-#: html/Ticket/Elements/ShowTime:49 html/Ticket/Elements/ShowTime:51
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 již není %2 tohoto požadavku."
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 již není hodnotou uživatelské položky %2"
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 %quant(%1,minuta,minuty,minut,minut)"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "%1 nejnovějších nevlastněných požadavků"
-#: lib/RT/CustomField_Overlay.pm:896
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 objekty"
-#: html/User/Elements/DelegateRights:99
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr "práva %1"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 aktualizace: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 aktualizace: beze změny"
-#: lib/RT/Action/ResolveMembers.pm:65
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 aktualizován"
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 vyÅ™eší vÅ¡echny Äleny skupiny vyÅ™eÅ¡eného požadavku."
-#: lib/RT/CustomField_Overlay.pm:897
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:898
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr ""
-#: html/Search/Elements/SearchPrivacy:54 html/Search/Elements/SelectSearchObject:57 html/Search/Elements/SelectSearchesForObjects:59
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "Řídící panely patřící %1"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
#. ($object->Name)
msgid "%1's saved searches"
msgstr "Uložené dotazy patřící %1"
-#: lib/RT/Transaction_Overlay.pm:502
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: neudána příloha"
-#: html/Ticket/Elements/ShowTransactionAttachments:80
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1 B"
-#: html/Ticket/Elements/ShowTransactionAttachments:77
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1 kB"
-#: html/Ticket/Elements/ShowTime:51
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr "%quant(%1,hodina,hodiny,hodin)"
-#: lib/RT/Ticket_Overlay.pm:1144
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "%1 je neplatnou hodnotou pro stav"
-#: html/Admin/Elements/EditCustomFieldValues:52 html/Admin/Elements/EditQueueWatchers:52 html/Admin/Elements/EditScrips:58 html/Admin/Elements/EditTemplates:59 html/Admin/Groups/Members.html:75 html/Elements/EditLinks:56 html/Ticket/Elements/EditPeople:69 html/User/Groups/Members.html:78
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Zatrhněte pro smazání)"
-#: html/Ticket/Elements/PreviewScrips:101
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Zatrhněte pro zakázání upozorňování uvedených příjemců)"
-#: html/Ticket/Elements/PreviewScrips:125
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Zatrhněte pro povolení upozorňování uvedených příjemců)"
-#: html/Ticket/Create.html:220
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Zadejte identifikátory Äi URL požadavku, oddÄ›lené mezerami)"
-#: html/Admin/Queues/Modify.html:77 html/Admin/Queues/Modify.html:83
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Pro prázdné pole se použije %1)"
-#: html/Admin/Elements/EditCustomFields:76 html/Admin/Elements/ListGlobalCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Žádné uživatelské položky)"
-#: html/Admin/Groups/Members.html:73 html/User/Groups/Members.html:76
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Žádní Älenové)"
-#: html/Admin/Elements/EditScrips:55 html/Admin/Elements/ListGlobalScrips:50
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Žádné scripy)"
-#: html/Admin/Elements/EditTemplates:54
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Žádné vzory)"
-#: html/Admin/Elements/PickCustomFields:49 html/Admin/Elements/PickObjects:49
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Žádné)"
-#: html/Ticket/Update.html:92
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(ZaÅ¡le skrytou kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. <strong>Neovlivňuje</strong> příjemce budoucích aktualizací.)"
-
-#: html/Ticket/Create.html:105
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(ZaÅ¡le kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. Tito lidé <strong>budou</strong> dostávat budoucí aktualizace.)"
-#: html/Ticket/Update.html:88
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(ZaÅ¡le kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. <strong>Neovlivňuje</strong> příjemce budoucích aktualizací.)"
-
-#: html/Ticket/Create.html:95
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(ZaÅ¡le kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. Tito lidé <strong>budou</strong> dostávat budoucí aktualizace.)"
-#: html/Admin/Elements/EditScrip:98
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Použijte tyto položky, pokud jste v podmínce nebo akci vybrali hodnotu 'Uživatelem definované')"
-#: html/Ticket/Elements/EditWatchers:62 html/Ticket/Elements/ShowUserEntry:55
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr "(Nebude odeslán email)"
-#: html/Tools/MyDay.html:53
-#. ($session{'CurrentUser'}->Name)
-msgid "(displaying new and open tickets for %1)"
-msgstr "(zobrazeny nové a otevřené požadavky pro %1)"
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(vše)"
-#: html/Admin/Groups/index.html:59 html/User/Groups/index.html:56
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(prázdná)"
-#: html/Admin/Users/index.html:62
-msgid "(no name listed)"
-msgstr "(žádné jméno nebylo vypsáno)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
-#: html/Admin/Elements/SelectRights:74 html/Elements/EditCustomFieldSelect:71 html/Elements/SelectCustomFieldValue:53 html/Elements/ShowCustomFields:56 html/Search/Chart:134 html/Search/Elements/Chart:78 lib/RT/Transaction_Overlay.pm:612
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(bez hodnoty)"
-#: html/Admin/Elements/EditCustomFieldValues:49
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(bez hodnot)"
-#: html/Elements/EditLinks:133 html/Ticket/Elements/BulkLinks:51
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(jen jeden požadavek)"
-#: html/Elements/RT__Ticket/ColumnMap:151
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(oÄekávájící schválení)"
-#: html/Elements/RT__Ticket/ColumnMap:154
-msgid "(pending other Collection)"
-msgstr "(probíhá jiná Sbírka)"
-
-#: html/Admin/Users/Modify.html:73
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(povinné)"
-#: html/Ticket/Elements/ShowTransactionAttachments:84
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(nepojmenováno)"
-#: html/Ticket/Elements/Reminders:135
-msgid "(yyyy/mm/dd)"
-msgstr "(yyyy/mm/dd)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
-#: html/Elements/EditCustomFieldSelect:59
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr "-"
-#: bin/rt-crontool:97
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr "--parametrem požadavku může být pouze 'first' nebo 'last'"
-
-#: html/Ticket/Elements/ShowBasics:55
-msgid "<% $Ticket->Status%>"
-msgstr "<% $Ticket->Status%>"
-
-#: html/Elements/SelectTicketTypes:50
-msgid "<% $_ %>"
-msgstr "<% $_ %>"
-
-#: html/Search/Elements/SelectLinks:50
-msgid "<%$_%>"
-msgstr "<%$_%>"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
-#: html/Search/Elements/DisplayOptions:75
-msgid "<%$field%>"
-msgstr "<%$field%>"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "--parametrem požadavku může být pouze 'first', 'last' nebo 'all'"
-#: html/Elements/CreateTicket:49
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr "<input type=\"submit\" class=\"button\" value=\"Nový požadavek v\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:785
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Nový požadavek v\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Prázdný vzor"
-#: html/Admin/Users/Modify.html:375
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Heslo nebylo nastaveno, uživatel se nebude moci přihlásit."
-#: lib/RT/ACE_Overlay.pm:176 lib/RT/Principal_Overlay.pm:221
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE nenalezeno"
-#: lib/RT/ACE_Overlay.pm:855
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE mohou být pouze vytvářeny nebo rušeny."
-#: html/Search/Elements/SelectAndOr:48
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "AND"
-#: html/User/Elements/Tabs:55
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "O mnÄ›"
-#: html/Admin/Users/Modify.html:108
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Řízení přístupu"
-#: html/Admin/Elements/EditScrip:67
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Akce"
-#: lib/RT/Scrip_Overlay.pm:174
+#: lib/RT/Scrip_Overlay.pm:136
#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "Akce %1 nenalezena"
+msgid "Action '%1' not found"
+msgstr "Akce '%1' nenalezena"
-#: bin/rt-crontool:173
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Akce provedena.\\n"
-#: lib/RT/Scrip_Overlay.pm:170
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr "Akce je povinným parametrem"
-#: bin/rt-crontool:169
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Akce připravena..."
-#: html/Search/Build.html:87
-msgid "Add"
-msgstr "Přidat"
-
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Přidat AdminCc"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Přidat záložku"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Přidat Cc"
-#: html/Search/Elements/EditFormat:51
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Přidat sloupce"
-#: html/Search/Elements/PickCriteria:48
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Přidat podmínku"
-#: html/Ticket/Create.html:149 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Přidat další soubory"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Přidat žadatele"
-#: html/Admin/Elements/AddCustomFieldValue:48
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Přidat hodnotu"
-#: html/Admin/Global/Scrip.html:85
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Přidat scrip platný ve všech frontách"
-#: html/Search/Build.html:111 html/Search/Build.html:96
-msgid "Add and Search"
-msgstr "Přidat a vyhledat"
-
-#: html/Search/Bulk.html:126
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "PÅ™idat komentáře Äi odpovÄ›di k vybraným požadavkům"
-#: html/Admin/Groups/Members.html:65 html/User/Groups/Members.html:62
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "PÅ™idat Äleny"
-#: html/Admin/Queues/People.html:89 html/Ticket/Elements/AddWatchers:51
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Přidat nové pozorovatele"
-#: html/Search/Build.html:87
-msgid "Add these terms to your search"
-msgstr "Přidat tyto podmínky k dotazu"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Přidat tyto podmínky"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Přidat tyto podmínky a hledat"
-#: html/Search/Bulk.html:160
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "Přidat hodnoty"
-#: lib/RT/CustomField_Overlay.pm:110
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Přidat, smazat nebo upravit hodnoty uživatelských položek pro objekty"
-#: lib/RT/Queue_Overlay.pm:765
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Uživatel přidán do této fronty jako %1"
-#: lib/RT/Ticket_Overlay.pm:1457
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Uživatel přidán k tomuto požadavku jako %1"
-#: html/Admin/Users/Modify.html:149 html/User/Prefs.html:135
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Adresa"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adresa1"
-#: html/Admin/Users/Modify.html:154 html/User/Prefs.html:139
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adresa2"
-#: html/Ticket/Create.html:100
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Administrativní komentář"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Administrativní korespondence"
-#: html/Admin/Queues/index.html:48 html/Admin/Queues/index.html:51
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Správa front"
-#: html/Admin/Global/index.html:49 html/Admin/Global/index.html:51
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Správa/Globální konfigurace"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:62 lib/RT/ACE_Overlay.pm:115
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "Spravovat uživatelskou položku"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "Spravovat skupinu"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "Spravovat Älenství ve skupinách"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "Spravovat vlastní osobní skupiny"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:92
msgid "AdminQueue"
msgstr "Spravovat frontu"
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "Spravovat uživatele"
-#: html/Admin/Queues/People.html:71 html/Ticket/Elements/EditPeople:77
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Administrativní Cc"
-#: html/Ticket/Elements/Tabs:218
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Administrativní heslo"
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "PokroÄilé"
-#: html/Elements/SelectDateRelation:59
-msgid "After"
-msgstr "Po"
-
-#: html/Search/Elements/PickCriteria:54
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Operátor"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Všechna schvalování prošla"
-#: html/Admin/Queues/index.html:77
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "VÅ¡echny fronty"
-#: html/Search/Elements/EditQuery:58
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Již je zašifrováno"
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "And/Or"
-#: html/Admin/CustomFields/Modify.html:75 html/Admin/Elements/CustomFieldTabs:85
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "Vztahuje se na"
-#: html/Search/Edit.html:66
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Provést"
-#: html/Search/Edit.html:66
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Provést změny"
-#: html/Elements/Tabs:80
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Schvalování"
-#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:65 html/Approvals/index.html:88
-#. ($ticket->id, $msg)
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Schválení #%1: $2"
-#: html/Approvals/index.html:77
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Schválení #%1: Poznámky neuloženy kvůli systémové chybě"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Schválení #%1: Poznámky uloženy"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Schvalování prošlo"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Schvalování připraveno pro vlastníka"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Schvalování odmítnuto"
-#: html/Approvals/Elements/Approve:71
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Schválit"
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr "Poznámky schvalovatele: %1"
-
-#: lib/RT/Date.pm:446
-msgid "Apr."
+#: lib/RT/Date.pm:91
+msgid "Apr"
msgstr "dub"
-#: html/Search/Elements/DisplayOptions:83
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "Duben"
+
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr "VzestupnÄ›"
-#: html/Elements/SelectSortOrder:58
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "VzestupnÄ›"
@@ -692,513 +839,779 @@ msgstr "Přidělit a odebrat uživatelské položky"
msgid "AssignCustomFields"
msgstr "Přidělit uživatelské položky"
-#: html/Search/Bulk.html:144 html/SelfService/Update.html:89 html/Ticket/ModifyAll.html:117 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Přiložit"
-#: html/SelfService/Create.html:94 html/Ticket/Create.html:145
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Připojit soubor"
-#: html/SelfService/Update.html:77 html/Ticket/Create.html:133 html/Ticket/Update.html:96
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Připojený soubor"
-#: html/Ticket/ShowEmailRecord.html:54 html/Ticket/ShowEmailRecord.html:58 html/Ticket/ShowEmailRecord.html:61
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Příloha"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Příloha '%1' nemůže být nahrána"
-#: lib/RT/Transaction_Overlay.pm:510
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Příloha vytvořena"
-#: lib/RT/Tickets_Overlay.pm:2061
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Jméno souboru přílohy"
-#: html/Ticket/Elements/ShowAttachments:49
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Přílohy"
-#: lib/RT/Attributes_Overlay.pm:173
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Šifrování příloh je zakázáno"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Atribut smazán"
-#: lib/RT/Date.pm:450
-msgid "Aug."
+#: lib/RT/Date.pm:95
+msgid "Aug"
msgstr "srp"
-#: etc/initialdata:221
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "Srpen"
+
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Automatická odpovÄ›Ä"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Automaticky odpověz žadatelům"
-#: html/Widgets/SelectionBox:191
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Dostupné"
-#: html/Admin/Elements/CustomFieldTabs:67 html/Admin/Elements/GroupTabs:62 html/Admin/Elements/QueueTabs:62 html/Admin/Elements/UserTabs:60 html/Ticket/Elements/Tabs:115 html/User/Elements/GroupTabs:61
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "BCc"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Zpět"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Základní údaje"
-#: html/Ticket/Update.html:90
-msgid "Bcc"
-msgstr "Bcc"
-
-#: html/Admin/CustomFields/GroupRights.html:93 html/Admin/CustomFields/UserRights.html:76 html/Admin/Elements/EditScrip:91
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Nezapomeňte uložit své změny"
-#: html/Elements/SelectDateRelation:57 lib/RT/CurrentUser.pm:363
-msgid "Before"
-msgstr "Před"
-
-#: html/Elements/Logo:49
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Best Practical Solutions, LLC corporate logo"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Prázdný"
-#: html/Search/Elements/EditFormat:86
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "TuÄné"
-#: html/Search/Results.html:81
-msgid "Bookmarkable link"
-msgstr "Uložitelný odkaz"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Záložka"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Záložky"
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:71
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Zkrácené hlaviÄky"
-#: html/Ticket/Elements/Tabs:228
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Hromadná úprava"
-#: lib/RT/User_Overlay.pm:1855
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Koupit podporu"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "RT implicitnÄ› použije Äasové pásmo vaÅ¡eho systému. To vám dovolí nastavit globální implicitní hodnotu pro zobrazení datumů a Äasů v RT. VaÅ¡i uživatelé si mohou ve svém nastavení zvolit odliÅ¡né Äasové pásmo."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Nelze měnit systémové uživatele"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:91
msgid "Can this principal see this queue"
msgstr "Může tento uživatel vidět tuto frontu"
-#: lib/RT/CustomField_Overlay.pm:382
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Uživatelské položce nelze přidat hodnotu beze jména"
-#: html/Admin/CustomFields/Objects.html:88
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "Nelze nalézt třídu collection pro '%1'"
-#: html/Search/Build.html:288
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Nelze nalézt uložený dotaz ke zpracování"
-#: lib/RT/Link_Overlay.pm:161
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Požadavek nelze svázat se sebou samým"
-#: html/Widgets/SavedSearch:110
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr "Nelze uložit %1"
-#: html/Search/Build.html:292
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Tento dotaz nelze uložit"
-#: lib/RT/Record.pm:1304 lib/RT/Record.pm:1380
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Nelze zadat zároveň zdroj i cíl"
-#: html/autohandler:206
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Nelze vytvářet požadavky v zablokované frontě."
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Nelze vytvořit uživatele: %1"
-#: html/Admin/Elements/AddCustomFieldValue:64 html/Admin/Elements/EditCustomFieldValues:60
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Kategorie"
-#: etc/initialdata:50 html/Admin/Queues/People.html:67 html/SelfService/Create.html:73 html/Ticket/Create.html:90 html/Ticket/Elements/EditPeople:74 html/Ticket/Elements/ShowPeople:58 html/Ticket/Update.html:85 lib/RT/ACE_Overlay.pm:114
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:54
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Změnit"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Změna hesla"
-#: html/Elements/Submit:80
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "OznaÄ vÅ¡e"
-#: html/SelfService/Update.html:80 html/Ticket/Create.html:136 html/Ticket/Update.html:99
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Kontrola připojení k databázi"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Zašrtnutím odstraníte"
-#: html/Admin/Elements/SelectRights:57
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Zatrhněte k odebrání práva"
-#: html/Elements/EditLinks:149 html/Elements/EditLinks:86 html/Elements/ShowLinks:80 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:66
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Kontrola přihlašovacích údajů k databázi"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Potomci"
-#: html/NoAuth/js/util.js:203
-msgid "Choose a date"
-msgstr "Vybrat datum"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Výběr databázového stroje"
-#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:143
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Město"
-#: html/Tools/MyDay.html:76 html/Widgets/SelectionBox:214
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
msgid "Clear"
msgstr "Vymazat"
-#: html/Elements/Submit:82
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "OdznaÄ vÅ¡e"
-#: html/Helpers/CalPopup.html:53
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "KliknÄ›te níže na \"DokonÄit instalaci\" pro dokonÄení průvodce."
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Klikněte na \"Inicializovat databázi\" pro vytvoření databází RT a vložení výchozích metadat. Může to trvat nějakou chvíli"
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Zavřít okno"
-#: html/Ticket/Elements/ShowDates:70
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Uzavřen"
-#: html/SelfService/Closed.html:48 html/SelfService/Elements/Tabs:81
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Uzavřené požadavky"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Combobox: Vybrat nebo zadat více hodnot"
-#: lib/RT/CustomField_Overlay.pm:92
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Combobox: Vybrat nebo zadat jednu hodnotu"
-#: lib/RT/CustomField_Overlay.pm:93
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Combobox: Vybrat nebo zadat nejvýše %1 %quant(%1,hodnotu,hodnoty,hodnot)"
-#: html/Ticket/Elements/ShowTransaction:193 html/Ticket/Elements/Tabs:187
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Komentovat"
-#: html/Admin/Queues/Modify.html:81
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Adresa pro komentáře"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Adresa pro komentáře"
+
#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Komentovat požadavky"
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "Adresa pro komentáře"
+
#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "Komentovat požadavky"
-#: html/Tools/MyDay.html:67
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Poznámky"
-#: html/Ticket/ModifyAll.html:93 html/Ticket/Update.html:77
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Komentář (Neposílá se žadatelům)"
-#: html/Search/Bulk.html:130
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Komentář (nepošle se žadatelům)"
-#: html/Admin/Users/Modify.html:229 html/Ticket/Elements/ShowRequestor:69
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Poznámky o tomto uživateli"
-#: lib/RT/Transaction_Overlay.pm:655
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Komentáře přidány"
-#: lib/RT/Action/Generic.pm:177
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Commit v zárodku"
-#: html/Admin/Elements/EditScrip:61
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Podmínka"
-#: lib/RT/Scrip_Overlay.pm:186
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Podmínka '%1' nenalezena"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr "Podmínka je povinným parametrem"
-#: bin/rt-crontool:153
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Podmínky splněny..."
-#: lib/RT/Scrip_Overlay.pm:190
-msgid "Condition not found"
-msgstr "Podmínka nenalezena"
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Podmínka, akce a vzor"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "KonfiguraÄní soubor %1 je uzamÄen"
-#: html/Elements/Tabs:87
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Správa"
-#: html/SelfService/Prefs.html:56
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Potvrzení"
-#: html/Admin/Elements/ModifyTemplate:67 html/Elements/SelectAttachmentField:50 html/Ticket/ModifyAll.html:121
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Spojení úspěšně navázáno"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Obsah"
-#: html/Elements/SelectAttachmentField:51
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Content-Type"
-#: html/Search/Elements/EditSearches:67
-msgid "Copy"
-msgstr "Kopírovat"
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "ContentType"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "Adresa pro odpovědi"
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr "Adresa pro odpovědi"
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Korespondence"
-#: lib/RT/Transaction_Overlay.pm:651
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Korespondence zaznamenána"
-#: lib/RT/Record.pm:1682 lib/RT/Record.pm:1729
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
#. ($value_msg)
+#. ($msg)
msgid "Could not add new custom field value: %1"
msgstr "Nelze přidat novou hodnotu uživatelské položky: %1"
-#: lib/RT/Ticket_Overlay.pm:3071 lib/RT/Ticket_Overlay.pm:3079 lib/RT/Ticket_Overlay.pm:3096
-msgid "Could not change owner. "
-msgstr "Nelze změnit vlastníka. "
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Nelze změnit vlastníka: %1"
-#: html/Admin/CustomFields/Modify.html:163
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Nelze vytvořit uživatelskou položku"
-#: html/Admin/Elements/EditCustomField:115
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "Nelze vytvořit uživatelskou položku: %1"
-#: html/User/Groups/Modify.html:100 lib/RT/Group_Overlay.pm:496 lib/RT/Group_Overlay.pm:503
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Nelze vytvořit skupinu"
-#: html/Admin/Global/Template.html:94 html/Admin/Queues/Template.html:95
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Nelze vytvořit vzor: %1"
-#: lib/RT/Ticket_Overlay.pm:1077 lib/RT/Ticket_Overlay.pm:409
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Nelze vytvořit požadavek v zablokované frontě \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Nelze vytvořit požadavek. Nenastavena fronta"
-#: lib/RT/User_Overlay.pm:257 lib/RT/User_Overlay.pm:271 lib/RT/User_Overlay.pm:280 lib/RT/User_Overlay.pm:289 lib/RT/User_Overlay.pm:298 lib/RT/User_Overlay.pm:312 lib/RT/User_Overlay.pm:322 lib/RT/User_Overlay.pm:498
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Nelze vytvořit uživatele"
-#: lib/RT/Queue_Overlay.pm:743 lib/RT/Ticket_Overlay.pm:1425
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Tohoto uživatele nelze nalézt nebo vytvořit"
-#: lib/RT/Queue_Overlay.pm:804 lib/RT/Ticket_Overlay.pm:1506
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Nelze naléze tohoto uživatele"
-#: html/Admin/CustomFields/Objects.html:71
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Nelze nahrát atribut %1"
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Nelze nahrát uživatelskou položku %1"
-#: html/Admin/Groups/Members.html:114 html/User/Groups/Members.html:113 html/User/Groups/Modify.html:105
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Nelze naÄíst skupinu"
-#: lib/RT/SavedSearch.pm:121
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "Nelze nahrát objekt pro %1"
-#: lib/RT/SavedSearch.pm:199
-msgid "Could not load search attribute"
-msgstr "Nelze nahrát atribut dotazu"
-
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Tento uživatel nemůže být %1 této fronty"
-#: lib/RT/Ticket_Overlay.pm:1446
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Tento uživatel nemůže být %1 tohoto požadavku"
-#: lib/RT/Queue_Overlay.pm:862
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Tento uživatel nemůže být odstraněn jako %1 této fronty"
-#: lib/RT/User_Overlay.pm:193
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr "Tento uživatel nemůže být odstraněn jako %1 tohoto požadavku"
+
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Nelze nastavit uživatelské informace"
-#: lib/RT/Transaction_Overlay.pm:161
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr "Nelze přidat přílohu"
-#: lib/RT/Group_Overlay.pm:1005
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Do skupiny nelze pÅ™idat Älena"
-#: lib/RT/Record.pm:1741 lib/RT/Record.pm:1793
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Nelze vytvořit transakci: %1"
-#: lib/RT/Record.pm:970
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Nelze vytvořit záznam"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Nelze smazat řídící panel %1: %2"
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Nemohu nalézt řádek"
-#: lib/RT/Group_Overlay.pm:979
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Tohoto uživatele nelze nalézt"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Tuto hodnotu nelze nalézt"
-#: lib/RT/CurrentUser.pm:147
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Z databáze uživatelů nelze naÄíst %1.\\n"
-#: html/Admin/CustomFields/UserRights.html:151
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "Nelze naÄíst třídu %1"
-#: html/Admin/CustomFields/GroupRights.html:109
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Nelze naÄíst uživatelskou položku #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "Nelze naÄíst uživatelskou položku %1"
-#: lib/RT/Ticket_Overlay.pm:2018
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr "Nelze naÄíst kopii požadavku #%1."
-#: html/Admin/Groups/GroupRights.html:111 html/Admin/Groups/UserRights.html:98
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Nelze naÄíst řídící panel %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Nelze naÄíst řídící panel %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Nelze naÄíst skupinu #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Skupinu %1 nelze naÄíst"
-#: lib/RT/Link_Overlay.pm:204 lib/RT/Link_Overlay.pm:213 lib/RT/Link_Overlay.pm:240
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Vazbu nelze naÄíst"
-#: html/Admin/Elements/ObjectCustomFields:85 html/Admin/Queues/CustomFields.html:61 html/Admin/Users/CustomFields.html:61
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Nelze nahrát objekt %1"
-#: html/Admin/Queues/People.html:144
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Nelze naÄíst nebo vytvoÅ™it uživatele: %1"
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Frontu nelze naÄíst"
-#: html/Admin/Queues/GroupRights.html:124 html/Admin/Queues/UserRights.html:95
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Nelze naÄíst frontu #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "Frontu %1 nelze naÄíst"
-#: html/Admin/Elements/EditScrip:128 html/Admin/Elements/EditScrip:169
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Frontu '%1' nelze naÄíst"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr "Nelze naÄíst scrip #%1"
-#: html/SelfService/Display.html:160 lib/RT/Action/CreateTickets.pm:682
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Nelze naÄíst vzor #%1"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "Požadavek '%1' nelze naÄíst"
-#: lib/RT/Ticket_Overlay.pm:2646
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Nelze naÄíst uživatele #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Z řetězce '%1' nelze zjistit adresu"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Nelze nahradit obsah dešifrovanými daty: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Nelze nahradit obsah zašifrovanými daty: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
msgstr "Nelze přeložit '%1' do URI."
-#: html/Admin/Users/Modify.html:176 html/User/Prefs.html:155
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr "Nelze přeložit zdroj '%1' do URI."
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr "Nelze přeložit cíl '%1' do URI."
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Nelze odeslat mail"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "ZemÄ›"
-#: html/Admin/Elements/CreateUserCalled:49 html/Admin/Elements/EditCustomField:86 html/Admin/Elements/EditScrip:135 html/Admin/Global/Template.html:67 html/Admin/Queues/Template.html:68 html/Elements/QuickCreate:67 html/Ticket/Create.html:170 html/Ticket/Create.html:237
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Vytvořit"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Vytvořit požadavky"
-#: html/Admin/CustomFields/Modify.html:152 html/Admin/Elements/EditCustomField:98
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Vytvořit uživatelskou položku"
-#: html/Admin/Queues/CustomField.html:71
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Vytvoření uživatelské položky pro frontu %1"
-#: html/Admin/Groups/Modify.html:105 html/Admin/Groups/Modify.html:131
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Vytvořit nový řídící panel"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Vytvořit novou skupinu"
-#: html/User/Groups/Modify.html:115 html/User/Groups/Modify.html:90
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Vytvořit novou vlastní skupinu"
-#: html/Ticket/Create.html:49 html/Ticket/Create.html:53 html/Ticket/Create.html:62
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Vytvoření nového požadavku"
-#: html/Admin/Users/Modify.html:256 html/Admin/Users/Modify.html:318
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Vytvořit nového uživatele"
-#: html/Admin/Queues/Modify.html:127
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Vytvořit frontu"
-#: html/Admin/Queues/Scrip.html:91
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Vytvořit scrips pro frontu %1"
-#: html/Admin/Global/Template.html:87 html/Admin/Queues/Template.html:88
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Vytvořit vzor"
-#: html/SelfService/Create.html:48 html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Vytvořit požadavek"
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Vytvořit řídící panely této skupiny"
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Vytvářet požadavky podle tohoto vzoru scripu"
-#: html/SelfService/Create.html:107
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Vytvořit osobní řídící panely"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Vytvořit systémové řídící panely"
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Vytvořit požadavek"
@@ -1206,23 +1619,43 @@ msgstr "Vytvořit požadavek"
msgid "Create tickets in this queue"
msgstr "Vytvářet požadavky v této frontě"
-#: lib/RT/CustomField_Overlay.pm:108
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Vytvoření požadavků offline"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Vytvářet, mazat a měnit uživatelem definované položky"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:92
msgid "Create, delete and modify queues"
msgstr "Vytvářet, mazat a měnit fronty"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Vytvářet, mazat a mÄ›nit Äleny osobních skupin"
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Vytvářet, mazat a měnit uživatele"
-#: lib/RT/System.pm:89
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "Vytvořit řídící panel"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "Vytvořit řídící panel skupiny"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "Vytvořit vlastní řídící panel"
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr "Vytvořit uložený dotaz"
@@ -1230,1216 +1663,2016 @@ msgstr "Vytvořit uložený dotaz"
msgid "CreateTicket"
msgstr "Vytvořit požadavek"
-#: html/Elements/SelectDateType:49 html/Ticket/Elements/ShowDates:50 lib/RT/Ticket_Overlay.pm:1171
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Vytvořeno"
-#: html/Admin/CustomFields/Modify.html:165 html/Admin/Elements/EditCustomField:119
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Kým vytvořeno"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Uživatelská položka %1 vytvořena"
-#: html/Tools/Reports/Elements/Tabs:65
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr "Vytvořené za období"
-#: html/Tools/Reports/CreatedByDates.html:54
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Vytvořené požadavky za období, seskupené dle stavu"
-#: html/Search/Elements/PickBasics:104
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "Kým vytvořeno"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Tvůrce"
-#: html/Elements/EditLinks:51
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Šifrování"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Aktuální relace"
-#: html/Admin/Elements/EditScrips:53
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Aktuální scripy"
-#: html/Admin/Groups/Members.html:62 html/User/Groups/Members.html:65
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Aktuální Älenové"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Aktuální práva"
-#: html/Search/Elements/EditQuery:49
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Aktuální dotaz"
-#: html/Admin/Queues/People.html:64 html/Ticket/Elements/EditPeople:68
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Aktuální pozorovatelé"
-#: html/Admin/Elements/SystemTabs:63 html/Admin/Elements/Tabs:64 html/Admin/Global/index.html:73 html/Admin/Users/Modify.html:209 html/Admin/index.html:79 html/Ticket/Elements/ShowSummary:58
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Uživatelské položky"
-#: html/Admin/CustomFields/index.html:62
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Uživatelské položky pro %1"
-#: html/Admin/Elements/EditScrip:109
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Čistící kód uživatelské akce"
-#: html/Admin/Elements/EditScrip:105
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Přípravný kód uživatelské akce"
-#: html/Admin/Elements/EditScrip:101
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Uživatelská podmínka"
-#: lib/RT/Tickets_Overlay.pm:2540
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "Uživatelská položka %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "Uživatelská položka %1 se nevztahuje k tomuto objektu"
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Uživatelská položka %1 má hodnotu."
-#: lib/RT/Tickets_Overlay.pm:2536
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Uživatelská položka %1 nemá hodnotu."
-#: lib/RT/Record.pm:1614 lib/RT/Record.pm:1776
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Uživatelská položka %1 nenalezena"
-#: lib/RT/Report/Tickets.pm:120 lib/RT/Report/Tickets.pm:123
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
msgstr "Uživatelská položka '%1'"
-#: lib/RT/CustomField_Overlay.pm:1160
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Hodnota %1 nemůže být nalezena v uživatelské položce %2"
-#: lib/RT/CustomField_Overlay.pm:422
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Hodnota uživatelské položky nemůže být smazána"
-#: lib/RT/CustomField_Overlay.pm:1172
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Hodnota uživatelské položky nemůže být nalezena"
-#: lib/RT/CustomField_Overlay.pm:1174 lib/RT/CustomField_Overlay.pm:420
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Hodnota uživatelské položky smazána"
-#: html/Elements/SelectGroups:53 html/Elements/SelectUsers:53 lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "Uživatelská položka"
-#: html/Prefs/MyRT.html:80 html/Prefs/Quicksearch.html:72 html/Prefs/Search.html:77
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "Hodnota uživatelské položky"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "Upravit"
-#: html/SelfService/Display.html:63 html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:91 html/Ticket/Elements/Tabs:118 html/Ticket/ModifyAll.html:67
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Úprava základních údajů"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "Úprava detailů databáze"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Úprava emailových adres"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Úprava konfigurace emailu"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "Úprava globálních implicitních hodnot"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global Defaults"
+msgstr "Úprava globálních implicitních hodnot"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "Heslo DBA"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "Uživatelské jméno DBA"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Denní přehled"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Řídící panel"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Řídící panel nemůže být vytvořen: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Řídící panel nemůže být aktualizován: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Řídící panel aktualizován"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Řídící panely"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Adresa databázového serveru"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Jméno databáze"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Databázové heslo pro RT"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Port databázového serveru"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Typ databáze"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Databázové uživatelské jméno pro RT"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Formát datumu"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Datumy"
-#: lib/RT/Date.pm:454
-msgid "Dec."
+#: lib/RT/Date.pm:99
+msgid "Dec"
msgstr "pro"
-#: etc/initialdata:222
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "Prosinec"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Dešifrovat"
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Implicitní vzor automatické odpovědi"
-#: html/Tools/Offline.html:63
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Implicitní fronta"
-#: html/Tools/Offline.html:72
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Implicitní žadatel"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Implicitní vzor administrativního komentáře"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Implicitní vzor administrativní korespondence"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Implicitní korespondenÄní vzor"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Implicitní fronta"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Implicitní transakÄní vzor"
-#: html/User/Delegation.html:48 html/User/Delegation.html:51
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "ImplicitnÄ›: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Delegovat práva"
-#: lib/RT/System.pm:86
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Delegovat specifická práva, která vám byla poskytnuta."
-#: lib/RT/System.pm:86
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "Delegovat práva"
-#: html/User/Elements/Tabs:61
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Pověření"
-#: html/Admin/Elements/EditScrips:77 html/Search/Elements/EditFormat:105 html/Search/Elements/EditQuery:59 html/Search/Elements/EditSearches:65 html/Widgets/SelectionBox:212
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Smazat"
-#: html/Admin/Elements/EditTemplates:81
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Smazat vzor"
-#: lib/RT/SavedSearch.pm:222
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Smazat řídící panely této skupiny"
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Nelze smazat: %1"
-#: html/Admin/Elements/EditScrips:76
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Smazat osobní řídící panely"
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Smazat vybrané scripy"
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Smazat systémové řídící panely"
+
#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Smazat požadavky"
-#: html/Search/Bulk.html:161
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr "Smazat hodnoty"
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "Smazat řídící panel"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "Smazat řídící panel skupiny"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "Smazat vlastní řídící panel"
+
#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "Smazat požadavek"
-#: lib/RT/SavedSearch.pm:220
-msgid "Deleted search"
-msgstr "Dotaz smazán"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Smazán řídící panel %1"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
-#: lib/RT/Queue_Overlay.pm:396
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Smazaný uložený dotaz"
+
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Smazání tohoto objektu by mohlo poruÅ¡it referenÄní integritu"
-#: lib/RT/User_Overlay.pm:514
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Smazání tohoto objektu by mohlo naruÅ¡it referenÄní integritu"
-#: html/Approvals/Elements/Approve:75
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Zamítnout"
-#: html/Elements/EditLinks:141 html/Elements/EditLinks:68 html/Elements/ShowLinks:60 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:58 html/Ticket/Elements/ShowDependencies:55
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "Je rekvizitou pro"
-#: lib/RT/Transaction_Overlay.pm:739
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Přidána závislost %1"
-#: lib/RT/Transaction_Overlay.pm:779
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Závislost %1 smazána"
-#: lib/RT/Transaction_Overlay.pm:736
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Přidána závislost na %1"
-#: lib/RT/Transaction_Overlay.pm:776
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "Závislost na %1 smazána"
-#: html/Elements/EditLinks:137 html/Elements/EditLinks:59 html/Elements/SelectLinkType:50 html/Elements/ShowLinks:50 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:54 html/Ticket/Elements/ShowDependencies:48
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Závisející na"
-#: html/Search/Elements/DisplayOptions:88
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "Závisející na"
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "SestupnÄ›"
-#: html/Elements/SelectSortOrder:58
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "SestupnÄ›"
-#: html/SelfService/Create.html:102 html/Ticket/Create.html:154
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Popište případ níže"
-#: html/Admin/CustomFields/Modify.html:63 html/Admin/Elements/AddCustomFieldValue:59 html/Admin/Elements/EditCustomField:62 html/Admin/Elements/EditCustomFieldValues:58 html/Admin/Elements/EditScrip:57 html/Admin/Elements/ModifyTemplate:59 html/Admin/Groups/Modify.html:73 html/Admin/Queues/Modify.html:71 html/Search/Elements/EditSearches:58 html/User/Groups/Modify.html:72
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Popis"
-#: html/Search/Elements/EditFormat:73 html/Ticket/Elements/Tabs:110
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Směr"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Zakázáno"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Zobrazit"
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:93
msgid "Display Access Control List"
msgstr "Zobrazit přístupová práva"
-#: html/Search/Elements/DisplayOptions:48
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Zobrazované položky"
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Zobrazovat vzory scripů pro tuto frontu"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Zobrazovat scripy pro tuto frontu"
-#: html/Ticket/Elements/ShowHistory:61
-msgid "Display mode"
-msgstr "Režim zobrazení"
-
-#: lib/RT/Group_Overlay.pm:170
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Zobraz uložené dotazy pro tuto skupinu"
-#: html/Elements/Footer:63
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Šířeno pod verzí 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> GNU GPL.</a>"
-#: lib/RT/System.pm:77
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Dělat cokoli a všechno"
-#: html/Elements/Refresh:53
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Doménové jméno"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Nesmí obsahovat http://, ale pouze něco jako 'localhost', 'rt.example.com'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
-msgstr "NeobÄerstvovat tuto stránku."
+msgstr "Neobnovovat tuto stránku."
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
-#: html/Ticket/Elements/ShowTransactionAttachments:84
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Stáhnout"
-#: html/Admin/Groups/index.html:63 html/Admin/Users/index.html:66
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Stáhnout jako soubor oddělený tabelátory"
-#: html/Elements/SelectDateType:55 html/Ticket/Create.html:211 html/Ticket/Elements/EditDates:68 html/Ticket/Elements/Reminders:135 html/Ticket/Elements/ShowDates:66 lib/RT/Ticket_Overlay.pm:1175
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Stáhnout dumpfile"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Termín dokonÄení"
-#: html/Elements/Quicksearch:50 html/Elements/ShowSearch:51 html/index.html:109
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "CHYBA: %1"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Jednoduchá úprava vašich otevřených požadavků"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Upravit"
-#: html/Search/Bulk.html:151
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr "Upravit uživatelské položky"
-#: html/Admin/Elements/ObjectCustomFields:94 html/Admin/Queues/CustomFields.html:66 html/Admin/Users/CustomFields.html:66
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Upravit uživatelské položky pro %1"
-#: html/Admin/Global/CustomFields/Groups.html:56
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Upravit uživatelské položky pro všechny skupiny"
-#: html/Admin/Global/CustomFields/Users.html:56
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Upravit uživatelské položky pro všechny fronty"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Upravit uživatelské položky pro všechny uživatele"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:56 html/Admin/Global/CustomFields/Queue-Transactions.html:56
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Upravit uživatelské položky pro požadavky ve všech frontách"
-#: html/Search/Bulk.html:190 html/Ticket/ModifyLinks.html:59
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Upravit vazby"
-#: html/Search/Edit.html:70
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Upravit dotaz"
-#: html/Ticket/Elements/Tabs:216
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Úprava dotazu"
-#: html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Upravit vzory pro frontu %1"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Upravit uložené dotazy pro tuto skupinu"
-#: html/Admin/Elements/GlobalCustomFieldTabs:62 html/Admin/Global/index.html:69
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Úprava systémových vzorů"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "Upravovat uložené dotazy"
-#: html/Admin/Queues/Modify.html:142
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Editovatelný text"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Úprava konfigurace pro frontu %1"
-#: html/Admin/CustomFields/Modify.html:169 html/Admin/Elements/EditCustomField:122
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Úprava uživatelské položky %1"
-#: html/Admin/Groups/Members.html:57
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Úprava Älenství ve skupinÄ› %1"
-#: html/User/Groups/Members.html:152
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Úprava Älenství ve vlastní skupinÄ› %1"
-#: lib/RT/Record.pm:1317 lib/RT/Record.pm:1394 lib/RT/Ticket_Overlay.pm:2521 lib/RT/Ticket_Overlay.pm:2611
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Zdroj Äi cíl musí být zadán"
-#: html/Admin/Users/Modify.html:76 html/Ticket/Elements/AddWatchers:79 html/User/Prefs.html:67
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "BuÄ nemáte oprávnÄ›ní pro zobrazení uloženého dotazu %1 nebo je identifikátor nesprávný"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "Email"
-#: lib/RT/User_Overlay.pm:237
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Nastavení emailu"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Emailový přehled"
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "Emailová adresa je použita"
-#: html/Admin/CustomFields/Modify.html:100 html/Admin/Elements/EditCustomField:74
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "DoruÄování zpráv"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "Email"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Povoleno"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Povolena (zrušením zatrhnutí zablokujete tuto uživatelskou položky)"
-#: html/Admin/Groups/Modify.html:89 html/User/Groups/Modify.html:76
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Povolena (zrušením zatrhnutí zablokujete tuto skupinu)"
-#: html/Admin/Queues/Modify.html:107
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Povoleno (zrušení zatrhnutí zablokuje tuto frontu)"
-#: html/Admin/Queues/index.html:80
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Povolené fronty"
-#: html/Admin/Elements/EditCustomField:138 html/Admin/Groups/Modify.html:156 html/Admin/Users/Modify.html:354 html/User/Groups/Modify.html:140
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Povolen stav %1"
-#: html/Admin/CustomFields/Modify.html:187 html/Admin/Queues/Modify.html:164
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
-msgstr "Povolen stav: 1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Å ifrovat"
-#: lib/RT/CustomField_Overlay.pm:66
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "ImplicitnÄ› Å¡ifrovat"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Šifrovat/Dešifrovat"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Šifrovat/Dešifrovat transakci #%1 požadavku #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Šifrování zakázáno"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Šifrování povoleno"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Vyplnit více hodnot"
-#: html/Elements/EditLinks:127
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "Vyplnit více hodnot s automatickým doplňováním"
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Zadejte objekty Äi URI k provázání. Více položek oddÄ›lujte mezerami."
-#: lib/RT/CustomField_Overlay.pm:67
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Vyplnit jednu hodnotu"
-#: html/Elements/EditLinks:124
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "Vyplnit jednu hodnotu s automatických doplňováním"
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Zadejte fronty Äi URI k provázání. Více položek oddÄ›lujte mezerami."
-#: html/Elements/EditLinks:120 html/Search/Bulk.html:191
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Zadejte požadavky Äi URI k provázání. Více položek oddÄ›lujte mezerami."
-#: lib/RT/CustomField_Overlay.pm:68
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Zadejte nejvýše %1 %quant(%1,hodnotu,hodnoty,hodnot)"
-#: html/Elements/Login:78 html/SelfService/Error.html:48 html/SelfService/Error.html:49
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Vyplnit nejvýše %1 %quant(%1,hodnotu,hodnoty,hodnot) s automatickým doplňováním"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Chyba"
-#: lib/RT/Queue_Overlay.pm:674
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Chyba v parametrech do Queue->AddWatcher"
-#: lib/RT/Queue_Overlay.pm:835
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Chyba v parametrech do Queue->DeleteWatcher"
-#: lib/RT/Ticket_Overlay.pm:1374
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Chyba v parametrech do Ticket->AddWatcher"
-#: lib/RT/Ticket_Overlay.pm:1540
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Chyba v parametrech do Ticket->DeleteWatcher"
-#: bin/rt-crontool:287
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Chyba: chybějící řídící panel"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Chyba: špatná data GnuPG"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Chyba: žádný soukromý klíÄ"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Chyba: veÅ™ejný klíÄ"
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Eskalovat požadavky"
-#: html/Ticket/Elements/ShowBasics:59
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Odhadovaný"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
-msgstr "Kdokoli"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Zkoumat požadavky vytvořené ve frontě mezi dvěma dny"
-#: bin/rt-crontool:273
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Zkoumat požadavky vyřešené ve frontě mezi dvěma dny"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Zkoumat požadavky vyřešené ve frontě, seskupené podle vlastníka"
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Příklad:"
-#: html/Admin/Users/Modify.html:101
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Doplňkové údaje"
-#: lib/RT/SavedSearch.pm:179
-msgid "Failed to create search attribute"
-msgstr "Nelze vytvořit atribut dotazu"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
-#: lib/RT/User_Overlay.pm:378
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Nelze se připojit k databázi: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Nelze vytvořit atribut %1"
+
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Nenalezena pseudoskupina uživatelů 'Privilegovaný'."
-#: lib/RT/User_Overlay.pm:385
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Nenalezena pseudoskupina uživatelů 'Neprivilegovaný'"
-#: bin/rt-crontool:208
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Nelze naÄíst %1 %2"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Nelze naÄíst %1 %1: %3"
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Nelze naÄíst modul %1. (%2)"
-#: lib/RT/SavedSearch.pm:154
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "Nelze naÄíst objekt pro %1"
-#: lib/RT/Date.pm:444
-msgid "Feb."
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Nelze naÄíst vzor"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "Nelze urÄit vzor"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
msgstr "úno"
-#: html/Elements/SelectAttachmentField:52
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Únor"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Zdroj hodnot položky:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "Název souboru"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Název souboru"
-#: lib/RT/CustomField_Overlay.pm:71
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Vyplnit více textových oblastí"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Vyplnit více wiki textových oblastí"
-#: lib/RT/CustomField_Overlay.pm:72
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Vyplnit jednu textovou oblast"
-#: lib/RT/CustomField_Overlay.pm:77
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Vyplnit jednu wiki textovou oblast"
-#: html/Admin/CustomFields/Modify.html:109 html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Do této položky zadejte URL."
-#: lib/RT/CustomField_Overlay.pm:73
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Vyplnit nejvýše %1 %quant(%1,textovou oblast,textové oblasti,textových oblastí)"
-#: lib/RT/CustomField_Overlay.pm:78
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Vyplnit nejvýše %1 wiki %quant(%1,textovou oblast,textové oblasti,textových oblastí)"
-#: html/Search/Elements/PickBasics:151 html/Ticket/Create.html:184 html/Ticket/Elements/EditBasics:99 lib/RT/Tickets_Overlay.pm:1957
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Koncová priorita"
-#: lib/RT/Ticket_Overlay.pm:1166
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "Koncová priorita"
-#: html/Admin/Groups/index.html:74 html/Admin/Queues/People.html:84 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Najdi všechny uživatele jejichž"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Najít skupiny jejichž"
-#: html/Admin/Queues/People.html:80 html/Admin/Users/index.html:72 html/Ticket/Elements/EditPeople:53
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Najít osoby, jejichž"
-#: html/Search/Results.html:149
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Nalézt požadavky"
-#: html/Ticket/Elements/Tabs:83
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "DokonÄit"
+
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "První"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:764
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:755
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Foo!"
-#: html/Search/Bulk.html:85
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Vynutit změnu"
-#: html/Search/Elements/EditFormat:54
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Formát"
-#: html/Search/Results.html:147
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Předání"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Předat zprávu"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Předat zprávu a zpět"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Předat zprávu"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Předat zprávy třetí osobě"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "Předat zprávu"
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "Nalezen%quant(%1,,y,o) %numf(%1) %quant(%1,požadavek,požadavky,požadavků)"
-#: lib/RT/Record.pm:973
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Nalezen objekt"
-#: lib/RT/Date.pm:423
-msgid "Fri."
-msgstr "pá"
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Pá"
-#: html/Ticket/Elements/ShowHistory:68 html/Ticket/Elements/ShowHistory:74
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Pátek"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Celé hlaviÄky"
-#: html/Tools/Offline.html:87
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Obecné"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Vzít vzor ze souboru"
-#: lib/RT/Transaction_Overlay.pm:705
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Úvod"
+
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Předáno %1"
-#: html/Admin/Elements/Tabs:67 html/Admin/index.html:84
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Globální"
-#: html/Admin/Elements/EditCustomFields:57
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Globální uživatelské položky"
-#: html/Admin/Global/CustomFields/index.html:61
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Globální konfigurace uživatelských položek"
-#: html/Admin/Global/MyRT.html:95
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr "Globální portlet %1 uložen."
-#: html/Admin/Elements/SelectTemplate:61
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Globální vzor: %1"
-#: html/Admin/CustomFields/index.html:82 html/Admin/Groups/index.html:69 html/Admin/Groups/index.html:75 html/Admin/Queues/People.html:82 html/Admin/Queues/People.html:86 html/Admin/Queues/index.html:68 html/Admin/Users/index.html:75 html/Approvals/index.html:54 html/Elements/RefreshHomepage:50 html/Search/Results.html:76 html/Search/Results.html:92 html/Ticket/Elements/EditPeople:55 html/Ticket/Elements/EditPeople:59 html/Tools/Offline.html:91
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "Chyba GnuPG. Kontaktujte administrátora"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "Integrace GnuPG je zakázána"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "GnuPG soukromý klíÄ(e) pro %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "GnuPg veÅ™ejný klíÄ(e) pro %1"
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "Spusť"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Spusť!"
-#: html/Elements/GotoTicket:48 html/SelfService/Elements/GotoTicket:48
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Přejít na požadavek"
-#: html/Ticket/Elements/AddWatchers:69 html/Ticket/Elements/ShowGroupMembers:57 html/User/Elements/DelegateRights:101
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Diagram"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Vlastnosti diagramu"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "Grafické grafy nejsou dostupné."
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Skupina"
-#: html/Admin/Elements/CustomFieldTabs:70 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:84 html/Admin/Elements/SystemTabs:67 html/Admin/Global/index.html:78
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Práva skupiny"
-#: lib/RT/Group_Overlay.pm:985
-msgid "Group already has member"
-msgstr "Skupina již má Älena"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Skupina již má Älena: %1"
-#: html/Admin/Groups/Modify.html:115
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Skupina nemůže být založena: %1"
-#: lib/RT/Group_Overlay.pm:523
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Skupina vytvořena"
-#: lib/RT/Group_Overlay.pm:1157
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Skupina zakázána"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Skupina povolena"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Skupina nemá takového Älena"
-#: lib/RT/Group_Overlay.pm:965 lib/RT/Queue_Overlay.pm:750 lib/RT/Queue_Overlay.pm:810 lib/RT/Ticket_Overlay.pm:1432 lib/RT/Ticket_Overlay.pm:1512
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Skupina nenalezena"
-#: html/Admin/Elements/GlobalCustomFieldTabs:61 html/Admin/Elements/SelectNewGroupMembers:59 html/Admin/Elements/Tabs:58 html/Admin/Global/CustomFields/index.html:71 html/Admin/Groups/Members.html:88 html/Admin/Queues/People.html:106 html/Admin/Users/Memberships.html:55 html/Admin/index.html:69 html/User/Groups/Members.html:90 lib/RT/CustomField_Overlay.pm:1213
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Práva skupiny"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Skupiny"
-#: lib/RT/Group_Overlay.pm:991
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Skupiny nemohou být svými Äleny"
-#: html/Admin/Groups/index.html:88
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Skupiny splňující vyhledávací podmínku"
-#: html/Ticket/Elements/ShowRequestor:79
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Skupiny, jejichž je uživatel Älenem (zatrhnÄ›te pro smazání)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Skupiny, jejichž není uživatel Älenem (zatrhnÄ›te pro pÅ™idání)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Skupiny, do nichž uživatel patří"
-#: lib/RT/Interface/CLI.pm:96 lib/RT/Interface/CLI.pm:96
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr "Záhlaví předané zprávy"
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Ahoj!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:771
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Ahoj, %1"
-#: html/Admin/Elements/GroupTabs:72 html/Admin/Elements/UserTabs:66 html/Ticket/Elements/ShowHistory:55 html/Ticket/Elements/Tabs:113
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "Pomožte nám nastavit nÄ›které užiteÄné implicitní hodnoty pro RT."
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historie"
-#: html/Admin/Groups/History.html:64
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "Historie skupiny %1"
-#: html/Admin/Users/History.html:64
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "Historie uživatele %1"
-#: html/Elements/Tabs:68
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "Telefon domů"
+
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Domovská stránka"
-#: html/Elements/SelectTimeUnits:50
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Hodin"
-#: lib/RT/Base.pm:135
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "Mám %quant(%1,míchaÄku,míchaÄky,míchaÄek)"
-#: html/Search/Build.html:466 lib/RT/Report/Tickets.pm:417
-msgid "I'm lost"
-msgstr "Jsem ztracen"
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
-#msgstr "Mám [quant,_1,MíchaÄku na beton,MíchaÄky na beton,MíchaÄek na beton]."
-#: html/Ticket/Elements/ShowBasics:50 lib/RT/Tickets_Overlay.pm:1882
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Identifikátor"
-#: html/Admin/Users/Modify.html:67 html/User/Prefs.html:62
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identita"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Odmítni původce a zruš stávající schválení, bylo-li zamítnuto schválení"
-#: html/Tools/Offline.html:76
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Nebyl-li zadán Žadatel, vytvářejte požadavky jako tento žadatel."
-#: html/Tools/Offline.html:67
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Nebyla-li zadána fronta, vytvářejte požadavky v této frontě"
-#: bin/rt-crontool:269
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Pokud by byl tento nástroj setgid, místní uživatel by jej mohl použit k získaní administrativního přístupu k RT"
-#: html/Admin/Queues/People.html:128 html/Ticket/Modify.html:62 html/Ticket/ModifyAll.html:130 html/Ticket/ModifyPeople.html:62
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr "Pokud již máte funkÄní RT server i databázi, mÄ›li byste využít této příležitosti k ověření, že váš databázový server běží a že se s ním RT server může spojit. Až to udÄ›láte, zastavte a znovu spusÅ¥te RT server.</p>"
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "Pokud jste změnili port, na kterém RT běží, tak budete potřebovat restartovat server, abyste se mohli přihlásit."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Pokud jste změnili cokoli nahoře, nezapomeňte"
-#: lib/RT/Record.pm:964
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr "Pokud vámi upÅ™ednostňovaná databáze není uvedena v rozbalovacím menu níže, tak to znamená, že RT nenaÅ¡el její lokálnÄ› nainstalovaný <i>databázový ovladaÄ</i>. MÄ›li byste bých schopni to napravit za použití %1 stažením a instalací DBD::MySQL, DBD::Oracle nebo DBD::Pg."
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Neplatná hodnota pro %1"
-#: lib/RT/Record.pm:967
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Neměnná položka"
-#: html/Admin/Groups/index.html:67
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "Zahrnout blokované uživatelské položky do výpisu."
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
-msgstr "Zahrnout blokované skupiny ve výpisu."
+msgstr "Zahrnout blokované skupiny do výpisu."
-#: html/Admin/Queues/index.html:67
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Zahrnout blokované fronty do výpisu."
-#: html/Admin/Users/index.html:73
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Zahrnout blokované uživatele do vyhledávání."
-#: html/Admin/CustomFields/Modify.html:115
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr "Zahrnout stránku"
-#: html/Search/Build.html:492 lib/RT/Report/Tickets.pm:443
-msgid "Incomplete Query"
-msgstr "Neúplný dotaz"
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Jednotlivé zprávy"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informovat vlastníka RT, že uživatel(é) má problémy s veÅ™ejnými klíÄi"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Informovat uživatele, že zpráva, kterou odeslal, má neplatná GnuPG data"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Informovat uživatele, že má problémy s veÅ™ejným klíÄem a nemůže pÅ™ijímat zaÅ¡ifrovaný obsah"
-#: html/Search/Build.html:489 lib/RT/Report/Tickets.pm:440
-msgid "Incomplete query"
-msgstr "Neúplný dotaz"
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Informovat uživatele, že jeho heslo bylo obnoveno"
-#: html/Search/Elements/PickBasics:150 lib/RT/Tickets_Overlay.pm:1932
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Informovat uživatele, že jsme obdrželi zaÅ¡ifrovaný email a nemáme soukromé klíÄe pro jeho deÅ¡ifrování"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "PoÄáteÄní priorita"
-#: lib/RT/Ticket_Overlay.pm:1165 lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "PoÄáteÄní priorita"
-#: lib/RT/ScripAction_Overlay.pm:135
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Inicializovat databázi"
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Chyba na vstupu"
-#: html/Elements/ValidateCustomFields:70 lib/RT/CustomField_Overlay.pm:1024 lib/RT/CustomField_Overlay.pm:1165
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "Vstup musí odpovídat %1"
-#: lib/RT/Ticket_Overlay.pm:3531
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "Instalovat RT"
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Vnitřní chyba"
-#: lib/RT/Record.pm:315
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Vnitřní chyba: %1"
-#: lib/RT/Group_Overlay.pm:670
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "Neplatná %1: '%2' nevypadá jako emailová adresa"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "Neplatný %1: mÄ›lo by to být Äíslo"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "Neplatný %1: nevypadá jako emailová adresa"
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Neplatný typ skupiny"
-#: lib/RT/Principal_Overlay.pm:163
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Neplatné právo"
-#: lib/RT/Record.pm:969
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Neplatná data"
-#: lib/RT/CustomField_Overlay.pm:210 lib/RT/CustomField_Overlay.pm:681
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Neplatný objekt"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Neplatný vlastník objektu"
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr "Neplatný vzor: %1"
-#: lib/RT/Scrip_Overlay.pm:159 lib/RT/Template_Overlay.pm:246
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Neplatná fronta"
-#: lib/RT/ACE_Overlay.pm:266 lib/RT/ACE_Overlay.pm:275 lib/RT/ACE_Overlay.pm:281 lib/RT/ACE_Overlay.pm:292
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Neplatné právo"
-#: lib/RT/Record.pm:290
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Neplatná hodnota pro %1"
-#: lib/RT/Record.pm:1632
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Neplatná hodnota pro uživatelskou položku"
-#: lib/RT/Ticket_Overlay.pm:426
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Neplatná hodnota pro stav"
-#: bin/rt-crontool:270
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "Není zašifrováno"
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Je nesmírně důležité, aby neprivilegovaní uživatelé nemohli spustit tento nástroj."
-#: bin/rt-crontool:271
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Pro spuÅ¡tÄ›ní tohoto nástroje se doporuÄuje založení neprivilegovaného UNIXového uživatele se správným skupinovým Älenstvím a přístupem do RT."
-#: bin/rt-crontool:233
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Používá několik parametrů:"
-#: html/Search/Elements/EditFormat:87
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Kurzíva"
-#: lib/RT/Date.pm:443
-msgid "Jan."
+#: lib/RT/Date.pm:88
+msgid "Jan"
msgstr "led"
-#: lib/RT/Group_Overlay.pm:168
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "Leden"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "PÅ™idat se Äi odebrat z této skupiny"
-#: lib/RT/Date.pm:449
-msgid "Jul."
+#: lib/RT/Date.pm:94
+msgid "Jul"
msgstr "Äec"
-#: html/Ticket/Elements/Tabs:127
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "ÄŒervenec"
+
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Maxi"
-#: lib/RT/Date.pm:448
-msgid "Jun."
+#: lib/RT/Date.pm:93
+msgid "Jun"
msgstr "Äen"
-#: html/Admin/Users/Modify.html:96 html/User/Prefs.html:78
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "ÄŒerven"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "Pokud si nejste jisti, nechejte 'localhost'. Nechejte nevyplněné, pokud se chcete připojit lokálně přes soket"
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Jazyk"
-#: html/Search/Elements/EditFormat:81
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Jazyk"
+
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Velké"
-#: html/Ticket/Elements/Tabs:98
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Poslední"
-#: html/Ticket/Elements/EditDates:61 html/Ticket/Elements/ShowDates:62
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Poslední kontakt"
-#: html/Elements/SelectDateType:52
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Naposledy kontaktován"
-#: html/Elements/SelectDateType:53
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Naposledy aktualizován"
-#: html/Search/Elements/PickBasics:105
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "Naposledy aktualizoval(a)"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Naposledy aktualizoval(a)"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "Naposledy aktualizován"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "Naposledy aktualizoval(a)"
-#: html/Ticket/Elements/ShowBasics:70
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr "Nechejte nevyplnÄ›né pro odeslání na vaÅ¡i souÄasnou emailovou adresu (%1)"
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Nechejte prázdné, pokud chcete použít implicitní hodnotu vaší databáze"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr "Nechte být, pokud chcete použít implicitní uživatelské jméno DBA pro váš typ databáze"
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Zbývá"
-#: html/Admin/Users/Modify.html:111
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr "Vysvětlivky"
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Délka ve znacích; Použijte '0' pro zobrazení celé vložené zprávy bez ohledu na její délku"
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Umožnit tomuto uživateli přístup k RT"
-#: html/Admin/Users/Modify.html:115
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Umožnit dávat tomuto uživateli práva"
-#: html/Search/Elements/EditFormat:70
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "PokraÄovat"
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "Odkaz"
-#: lib/RT/Record.pm:1328
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Vazba již existuje"
-#: lib/RT/Record.pm:1342
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Vazba nemůže být vytvořena"
-#: lib/RT/Record.pm:1348
-#. ($TransString)
-msgid "Link created (%1)"
-msgstr "Vazba vytvořena (%1)"
-
-#: lib/RT/Record.pm:1409
-#. ($TransString)
-msgid "Link deleted (%1)"
-msgstr "Vazba zrušena (%1)"
-
-#: lib/RT/Record.pm:1415
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Vazba nenalezena"
-#: html/Ticket/ModifyLinks.html:48 html/Ticket/ModifyLinks.html:52
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Svázat požadavek #%1"
-#: html/Admin/CustomFields/Modify.html:104
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "Odkazuje na"
-#: lib/RT/Ticket_Overlay.pm:702
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr "Spojování. Přístup nepovolen"
-#: html/Ticket/Create.html:218 html/Ticket/Elements/ShowSummary:97 html/Ticket/Elements/Tabs:122 html/Ticket/ModifyAll.html:80
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Vazby"
-#: html/Search/Elements/EditSearches:77
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "NaÄíst"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "NaÄíst uložený dotaz:"
-#: lib/RT/System.pm:88
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "NaÄíst uložený dotaz"
-#: html/Admin/Tools/Configuration.html:66
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "NaÄten %1 %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "NaÄten původní \"%1\" uložený dotaz"
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "NaÄtené perlovské moduly"
-#: lib/RT/SavedSearch.pm:113
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr "NaÄtený dotaz %1"
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "NaÄten uložený dotaz \"%1\""
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:128
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Místní"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Umístění"
-#: html/Elements/Header:93
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Přihlášen jako %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:102 html/Elements/Login:70 html/Elements/Login:86 lib/RT/StyleGuide.pod:795
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Odhlášení"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
-msgstr "Přihlásit"
+msgstr "Přihlášení"
-#: html/Elements/Header:103
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
-msgstr "Odhlásit"
+msgstr "Odhlásit se"
-#: lib/RT/CustomField_Overlay.pm:935
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Nevhodný typ vyhledávání"
-#: html/Search/Bulk.html:84
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Email"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Nastavit vlastníka"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Nastavit stav"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Nastavit datum termínu dokonÄení"
-#: html/Search/Bulk.html:118
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Nastavit datum vyřešení"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Nastavit datum, kdy zaÄal"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Nastavit datum, kdy zaÄne"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Nastavit datum posledního kontaktu"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Nastavit prioritu"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Nastavit frontu"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Nastavit předmět"
-#: lib/RT/Group_Overlay.pm:171
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Zviditelnit tuto skupinu uživateli"
-#: html/Admin/index.html:80
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Správa uživatelských položek a jejich hodnot"
-#: html/Admin/index.html:71
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Správa skupin a Älenství v nich"
-#: html/Admin/index.html:87
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Správa vlastností a konfigurace platné pro všechny fronty"
-#: html/Admin/index.html:76
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Správa front a jim příslušných vlastností"
-#: html/Admin/index.html:66
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Správa uložených diagramů"
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Správa uživatelů a hesel"
-#: lib/RT/Date.pm:445
-msgid "Mar."
+#: lib/RT/Date.pm:90
+msgid "Mar"
msgstr "bře"
-#: lib/RT/Date.pm:447
-msgid "May."
-msgstr "kvÄ›"
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "Březen"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "OznaÄeny vÅ¡echny zprávy jako pÅ™eÄtené"
-#: lib/RT/Transaction_Overlay.pm:752
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "Maximální délka vložené zprávy"
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "Květen"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "ÄŒlen"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Člen %1 přidán"
-#: lib/RT/Transaction_Overlay.pm:792
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Člen %1 odebrán"
-#: lib/RT/Group_Overlay.pm:1002
-msgid "Member added"
-msgstr "Člen přidán"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Člen přidán: %1"
-#: lib/RT/Group_Overlay.pm:1164
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Člen odebrán"
-#: lib/RT/Group_Overlay.pm:1168
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Člen neodebrán"
-#: html/Elements/SelectLinkType:49
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "ÄŒlen"
-#: html/Admin/Elements/GroupTabs:65 html/User/Elements/GroupTabs:65
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "ÄŒlen"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Členové"
-#: lib/RT/Transaction_Overlay.pm:749
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "Členství v %1 přidáno"
-#: lib/RT/Transaction_Overlay.pm:789
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "Členství v %1 zrušeno"
-#: html/Admin/Elements/UserTabs:63
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Členství"
-#: html/Admin/Users/Memberships.html:62
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "Členství uživatele %1"
-#: lib/RT/Ticket_Overlay.pm:2905
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "SlouÄení úspěšné"
-#: lib/RT/Ticket_Overlay.pm:2783
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "SlouÄení se nepodaÅ™ilo. Nelze nastavit EffectiveId"
-#: lib/RT/Ticket_Overlay.pm:2800
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "SlouÄení se nepodaÅ™ilo. Nelze nastavit Status"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:50
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "SlouÄit do"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "SlouÄen do %1"
-#: html/Search/Bulk.html:145 html/Ticket/Update.html:120
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Zpráva"
-#: html/Ticket/Elements/ShowTransactionAttachments:166
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Tělo zprávy nezobrazeno, protože je příliš velké nebo nejde o holý text."
-#: lib/RT/Ticket_Overlay.pm:2454
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Výška pole zprávy"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Šířka pole zprávy"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Zpráva nemůže být zaznamenána"
-#: lib/RT/Ticket_Overlay.pm:2457
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Zpráva pro uživatele"
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Zpráva zaznamenána"
-#: html/Ticket/Elements/PreviewScrips:124
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Zprávy o tomto požadavku NEBUDOU zaslány na..."
-#: html/Elements/SelectTimeUnits:49
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Minimální délka hesla"
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minut"
-#: html/Search/Build.html:496 lib/RT/Report/Tickets.pm:447
-msgid "Mismatched parentheses"
-msgstr "Nevhodné závorky"
-
-#: lib/RT/Record.pm:971
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Chybí primární klíÄ?: %1"
-#: html/Admin/Users/Modify.html:196 html/User/Prefs.html:94
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Mobilní telefon"
-#: lib/RT/Queue_Overlay.pm:96
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "Mobil"
+
+#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr "Upravovat seznam přístupových práv"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Upravit uživatelské položky, platné pro %1, pro všechny %2"
-#: html/Admin/Elements/ObjectCustomFields:100
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Upravit uživatelské položky platné pro všechny %1"
-#: html/Admin/Global/GroupRights.html:108 html/Admin/Groups/GroupRights.html:96 html/Admin/Queues/GroupRights.html:109
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Úprava skupinových práv"
-#: html/Admin/Groups/Members.html:107 html/User/Groups/Members.html:103
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Upravit Äleny"
-#: html/User/Delegation.html:60
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
-msgstr "Upravit práva"
+msgstr "Úprava práv"
#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
@@ -2449,139 +3682,170 @@ msgstr "Upravovat vzory scripů této fronty"
msgid "Modify Scrips for this queue"
msgstr "Upravovat scripy této fronty"
-#: html/Admin/Global/UserRights.html:76 html/Admin/Groups/UserRights.html:78 html/Admin/Queues/UserRights.html:77
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Upravit práva uživatelů"
-#: html/Admin/Queues/CustomField.html:68
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Upravovat uživatelskou položku pro frontu %1"
-#: html/Admin/Queues/Scrip.html:84
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Upravovat scrip pro frontu %1"
-#: html/Admin/Global/Scrip.html:77
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Upravovat scrip platný pro všechny fronty"
-#: html/Admin/CustomFields/Objects.html:92
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Upravovat přiřazené objekty k %1"
-#: html/Ticket/ModifyDates.html:48 html/Ticket/ModifyDates.html:52
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Upravovat řídící panely této skupiny"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Upravit datumy pro #%1"
-#: html/Ticket/ModifyDates.html:59
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Úprava datumů pro požadavek # %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:67 html/Admin/Global/index.html:74
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Úprava globálních uživatelských položek"
-#: html/Admin/Elements/GlobalCustomFieldTabs:72 html/Admin/Global/GroupRights.html:48 html/Admin/Global/GroupRights.html:51 html/Admin/Global/index.html:79
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Úprava globálních skupinových práv"
-#: html/Admin/Global/GroupRights.html:56
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Úprava globálních skupinových práv."
-#: html/Admin/Global/UserRights.html:48 html/Admin/Global/UserRights.html:51 html/Admin/Global/index.html:83
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Úprava globálních uživatelských práv"
-#: html/Admin/Global/UserRights.html:56
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Úprava globálních uživatelských práv."
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Upravovat metadata skupiny nebo smazat skupinu"
-#: html/Admin/CustomFields/GroupRights.html:113
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Úprava skupinových práv pro uživatelskou položku %1"
-#: html/Admin/Groups/GroupRights.html:48 html/Admin/Groups/GroupRights.html:52 html/Admin/Groups/GroupRights.html:58
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Úprava skupinových práv pro %1"
-#: html/Admin/Queues/GroupRights.html:48 html/Admin/Queues/GroupRights.html:52
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Úprava skupinových práv pro frontu %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Upravovat seznam Älenů pro tuto skupinu"
-#: lib/RT/System.pm:84
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Upravovat vlastní RT úÄet"
-#: html/Admin/Queues/People.html:48 html/Admin/Queues/People.html:52
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Úprava uživatelů fronty %1"
-#: html/Ticket/ModifyPeople.html:48 html/Ticket/ModifyPeople.html:52 html/Ticket/ModifyPeople.html:59
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Úprava uživatelů souvisejících s požadavkem #%1"
-#: html/Admin/Queues/Scrips.html:69
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Upravovat osobní řídící panely"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Úprava scripů pro frontu %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:58 html/Admin/Global/Scrips.html:67 html/Admin/Global/index.html:65
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Úprava scripů platných ve všech frontách"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:101
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Upravovat systémové řídící panely"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
msgid "Modify template %1"
msgstr "Úprava vzoru %1"
-#: html/Admin/Global/Templates.html:67
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Upravit vzory pro všechny fronty"
-#: html/Admin/Global/index.html:87
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Úprava řídícího panelu %1"
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr "Úprava výchozího vzhledu stránky \"Přehled RT\""
-#: html/Admin/Groups/Modify.html:125 html/User/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Úprava skupiny %1"
-#: lib/RT/Queue_Overlay.pm:97
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Úprava dotazů pro řídící panel %1"
+
+#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Upravovat pozorovatele fronty"
-#: html/Admin/Users/Modify.html:313
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Úprava uživatele %1"
-#: html/Ticket/ModifyAll.html:60
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Úprava požadavku # %1"
-#: html/Ticket/Modify.html:48 html/Ticket/Modify.html:51 html/Ticket/Modify.html:57
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Úprava požadavku #%1"
@@ -2590,34 +3854,46 @@ msgstr "Úprava požadavku #%1"
msgid "Modify tickets"
msgstr "Upravovat požadavky"
-#: html/Admin/CustomFields/UserRights.html:159
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Upravit práva uživatelů k uživatelské položce %1"
-#: html/Admin/Groups/UserRights.html:48 html/Admin/Groups/UserRights.html:52 html/Admin/Groups/UserRights.html:58
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Úprava práv uživatelů ke skupině %1"
-#: html/Admin/Queues/UserRights.html:48 html/Admin/Queues/UserRights.html:52
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Úprava práv uživatelů k frontě %1"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:94
msgid "ModifyACL"
msgstr "Upravovat seznam přístupových práv"
-#: lib/RT/CustomField_Overlay.pm:110
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "Upravovat uživatelskou položku"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "Upravovat řídící panel"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "Upravovat řídící panel skupiny"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "Upravovat vlastní řídící panel"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "Upravovat Älenství ve skupinÄ›"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:95
msgid "ModifyQueueWatchers"
msgstr "Upravovat pozorovale fronty"
@@ -2625,7 +3901,7 @@ msgstr "Upravovat pozorovale fronty"
msgid "ModifyScrips"
msgstr "Upravovat scripy"
-#: lib/RT/System.pm:84
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "Upravovat sebe"
@@ -2637,533 +3913,683 @@ msgstr "Upravovat vzor"
msgid "ModifyTicket"
msgstr "Upravovat požadavek"
-#: lib/RT/Date.pm:419
-msgid "Mon."
-msgstr "po"
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Po"
-#: html/Ticket/Elements/ShowRequestor:63
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Pondělí"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Více o %1"
-#: html/Admin/Elements/PickCustomFields:85
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Dát níže"
-#: html/Admin/Elements/PickCustomFields:77
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Dát výše"
-#: html/Admin/Elements/SelectSingleOrMultiple:50
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Vícenásobná"
-#: lib/RT/User_Overlay.pm:228
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Nutno zadat atribut 'Jméno'"
-#: html/SelfService/Elements/MyRequests:79
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
-msgstr "Mé požadavky ve stavu %1"
+msgstr "Moje požadavky ve stavu %1"
-#: html/Tools/Elements/Tabs:65
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Můj den"
-#: html/Approvals/index.html:48 html/Approvals/index.html:49
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Mnou schválené"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Moje řídící panely"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
-msgstr "Mé uložené dotazy"
+msgstr "Moje uložené dotazy"
-#: html/Admin/CustomFields/Modify.html:60 html/Admin/Elements/AddCustomFieldValue:55 html/Admin/Elements/EditCustomField:57 html/Admin/Elements/EditCustomFieldValues:57 html/Admin/Elements/ModifyTemplate:51 html/Admin/Groups/Modify.html:67 html/Search/Bulk.html:159 html/User/Groups/Modify.html:67
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "NOVà ŘÃDEK"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Jméno"
-#: lib/RT/User_Overlay.pm:235
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Jméno je použito"
-#: html/Ticket/Elements/ShowDates:75
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr "Pojmenovaná sdílená sbírka portletů"
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Nikdy"
-#: html/Elements/EditLinks:118
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "Nové"
+
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nové vazby"
-#: html/Admin/Users/Modify.html:121 html/User/Prefs.html:111
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Nové heslo"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Nová probíhající schválení"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Nové vyhledávání"
-#: html/Admin/Elements/CustomFieldTabs:95 html/Admin/Queues/CustomField.html:75
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Nové a otevřené požadavky pro %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Vytvořit uživatelskou položku"
-#: html/Admin/Elements/GroupTabs:79 html/User/Elements/GroupTabs:75
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Nový řídící panel"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Založit skupinu"
-#: html/SelfService/Prefs.html:55
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Nové zprávy"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Nové heslo"
-#: lib/RT/User_Overlay.pm:818
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Oznámení o novém hesle zasláno"
-#: html/Admin/Elements/QueueTabs:97
-msgid "New queue"
-msgstr "Vytvoření fronty"
-
-#: html/Ticket/Elements/Reminders:120
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Nová upomínka:"
-#: html/Admin/Elements/SelectRights:67
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nová práva"
-#: html/Admin/Global/Scrip.html:65 html/Admin/Global/Scrips.html:62 html/Admin/Queues/Scrip.html:73 html/Admin/Queues/Scrips.html:78
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Vytvoření scripu"
-#: html/Admin/Global/Template.html:80 html/Admin/Global/Templates.html:62 html/Admin/Queues/Template.html:81 html/Admin/Queues/Templates.html:73
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Vytvořit vzor"
-#: html/SelfService/Elements/Tabs:87 html/SelfService/Elements/Tabs:91
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Nový požadavek"
-#: lib/RT/Ticket_Overlay.pm:2760
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Nový požadavek neexistuje"
-#: html/Admin/Elements/UserTabs:83
-msgid "New user"
-msgstr "Vytvořit uživatele"
-
-#: html/Admin/Elements/CreateUserCalled:49
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Nový uživatel jména"
-#: html/Admin/Queues/People.html:78 html/Ticket/Elements/EditPeople:52
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nový pozorovatel"
-#: html/Helpers/CalPopup.html:60 html/Ticket/Elements/Tabs:94
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Další"
-#: html/Elements/TicketList:108
-msgid "Next Page"
-msgstr "Další stránka"
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "Přezdívka"
-#: html/Admin/Users/Modify.html:86 html/User/Prefs.html:74
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Přezdívka"
-#: html/Admin/CustomFields/UserRights.html:147
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Ne"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "Žádný %1 nenaÄten"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Nedefinována žádná třída"
-#: html/Admin/CustomFields/Modify.html:168 html/Admin/Elements/EditCustomField:121
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Žádná uživatelská položka"
-#: html/Admin/CustomFields/GroupRights.html:105
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Nedefinována žádná uživatelská položka"
-#: html/Admin/Groups/GroupRights.html:107 html/Admin/Groups/UserRights.html:94
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Nedefinována žádná skupina"
-#: lib/RT/Tickets_Overlay_SQL.pm:484
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Prázdný dotaz"
-#: html/Admin/Queues/GroupRights.html:120 html/Admin/Queues/UserRights.html:91
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Nedefinována žádná fronta"
-#: bin/rt-crontool:75
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Žádný uživatel RT nenalezen. Prosím poraÄte se se správcem RT.\\n"
-#: html/Admin/Global/Template.html:98 html/Admin/Queues/Template.html:99
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Žádný předmět"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Žádný vzor"
-#: html/Approvals/Elements/Approve:79
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
-msgstr "bez akce"
+msgstr "Bez akce"
-#: lib/RT/Record.pm:966
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Neudán sloupec"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Poznámky k tomuto uživateli neudány"
-#: lib/RT/Action/Generic.pm:187 lib/RT/Condition/Generic.pm:199 lib/RT/Search/ActiveTicketsInQueue.pm:79 lib/RT/Search/Generic.pm:136 lib/RT/Search/Googleish.pm:90
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Žádné řídící panely."
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Pro %1 není popis"
-#: lib/RT/Users_Overlay.pm:192
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Neudána skupina"
-#: html/Admin/Groups/index.html:54
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Žádná skupina neodpovídá vyhledávací podmínce."
-#: lib/RT/Ticket_Overlay.pm:2395
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Žádný klÃ­Ä není vhodný pro Å¡ifrování"
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Žádné klíÄe pro tuto adresu"
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Zpráva nepřipojena"
-#: lib/RT/User_Overlay.pm:1036
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Není potřeba šifrovat"
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Heslo nenastaveno"
-#: lib/RT/Queue_Overlay.pm:363
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Nedostatek práv k vytváření front"
-#: lib/RT/Ticket_Overlay.pm:422
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Nedostatek práv k vytváření požadavků ve frontě '%1'"
-#: lib/RT/User_Overlay.pm:188
-msgid "No permission to create users"
-msgstr "Nedostatek práv k vytváření uživatelů"
-
-#: html/SelfService/Display.html:210
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Nedostatek práv k zobrazení tohoto požadavku"
-#: lib/RT/SavedSearch.pm:158
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr "Nedostatek práv k uložení dotazů pro celý systém"
-#: html/SelfService/Update.html:119
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Nedostatek práv ke změně nastavení"
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Nedostatek práv k zobrazení aktualizace požadavku"
-#: lib/RT/Queue_Overlay.pm:797 lib/RT/Ticket_Overlay.pm:1491
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Nezadán uživatel"
-#: html/Admin/Queues/People.html:177 html/Admin/Queues/People.html:187
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Nevybráni uživatelé."
-#: html/Admin/Queues/index.html:59
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Žádný soukromý klíÄ"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Nenalezeny žádné fronty odpovídající vyhledávací podmínce."
-#: html/Admin/Elements/SelectRights:108
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Právo nezadáno"
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Práva nenalezena"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Nepřidělena žádná práva."
-#: lib/RT/SavedSearch.pm:198
-msgid "No search loaded"
-msgstr "Dotaz nenaÄten"
-
-#: html/Search/Bulk.html:234
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Bez vyhledání nelze pracovat."
-#: html/Elements/RT__Ticket/ColumnMap:139 html/Search/Results.rdf:80
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Žádný předmět"
-#: html/Search/Chart:101
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Žádný klÃ­Ä nebo klÃ­Ä není vhodný k podpisu"
+
+#: share/html/Search/Chart:98
msgid "No tickets found."
msgstr "Nenalezen žádný požadavek."
-#: lib/RT/Transaction_Overlay.pm:549 lib/RT/Transaction_Overlay.pm:586
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Neudán typ transakce"
-#: html/Admin/Users/index.html:57
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Žádné použitelné klíÄe."
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Nenalezeni žádní uživatelé odpovídající vyhledávací podmínce."
-#: lib/RT/Record.pm:963
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Žádná z hodnot nanastavena na _Set!\\n"
-#: html/Elements/QuickCreate:61
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Nikdo"
-#: lib/RT/Record.pm:968
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Neexistující položka?"
-#: html/Search/Chart:149 html/Search/Elements/Chart:90
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr "Nenastaven"
-#: html/Elements/Header:98
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Nenalezen"
+
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Nepřihlášen."
-#: lib/RT/Date.pm:399
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Nenastaven"
-#: html/NoAuth/Reminder.html:50
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Zatím neimplementováno."
-#: html/Approvals/Elements/Approve:83
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Poznámky"
-#: lib/RT/User_Overlay.pm:821
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Upozornění nemůže být zasláno"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Zaslat všem AdminCc"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Zaslat všem AdminCc jako komentář"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Upozornit všechny Cc"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Upozornit všechny Cc jako komentář"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Zaslat ostatním příjemcům"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Zaslat ostatním příjemcům jako komentář"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Zaslat vlastníkovi"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Zaslat vlastníkovi jako komentář"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Upozornění vlastníka o zamítnutí požadavku"
-#: etc/initialdata:365
-msgid "Notify Owner of their ticket has been approved by all approvers"
-msgstr "Upozornění vlastníka, že požadavek byl všemi schválen"
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
-#: etc/initialdata:353
-msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr "Upozornění vlastníka, že požadavek byl někým schválen"
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
-#: etc/initialdata:334
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Zaslat vlastníkům a vÅ¡em AdminCc nové případy oÄekávající jejich schválení"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Zaslat žadatelům"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Zaslat žadatelům a všem Cc"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Zaslat žadatelům a všem Cc jako komentář"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Zaslat žadatelům, všem Cc a všem AdminCc"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Zaslat žadatelům, vÄem Cc a vÄem AdminCc jako komentář"
-#: lib/RT/Date.pm:453
-msgid "Nov."
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "Informuj mne o nepÅ™eÄtených zprávách"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
msgstr "lis"
-#: html/Search/Elements/SelectAndOr:49
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "Listopad"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "PoÄet výsledků hledání"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "OR"
-#: lib/RT/Record.pm:329
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Objekt nemůže být vytvořen"
-#: lib/RT/Record.pm:130
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Objekt nemůže být smazán"
-#: lib/RT/Record.pm:348
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Objekt vytvořen"
-#: lib/RT/Record.pm:127
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objekt smazán"
-#: html/Admin/CustomFields/Objects.html:74 html/Admin/Elements/ObjectCustomFields:65
-#. ($LookupType)
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
+#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Objektu typu %1 nemohou být přiděleny uživatelské položky"
-#: lib/RT/CustomField_Overlay.pm:970
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Nevhodný typ objektu"
-#: lib/RT/Date.pm:452
-msgid "Oct."
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr "Seznam objektů je prázdný"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
msgstr "říj"
-#: html/Tools/Elements/Tabs:57
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "Říjen"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Off-line"
-#: html/Tools/Offline.html:51
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Úpravy off-line"
-#: html/Tools/Offline.html:48
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Off-line naÄtení"
-#: html/Elements/SelectDateRelation:58
-msgid "On"
-msgstr "Dne"
-
-#: lib/RT/Transaction_Overlay.pm:349
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr "Dne %1, %2 napsal(a):"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "Při uzavření"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Při komentáři"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Při korespondenci"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Při založení"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Při změně vlastníka"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Při změně priority"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Při změně fronty"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Při znovuotevření"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Při vyřešení"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Při změně stavu"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Při transakci"
-#: html/Approvals/Elements/PendingMyApproval:72
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "Jednorázové Bcc"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "Jednorázové Cc"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Zobrazit jen schvalování pro požadavky založené po %1"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Zobrazit jen schvalování pro požadavky založení před %1"
-#: html/Admin/CustomFields/index.html:77
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Zobrazit jen uživatelské položky pro:"
-#: etc/initialdata:139
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Otevřené požadavky"
-#: html/Ticket/Elements/Tabs:162
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Otevřít URL"
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Otevřít"
-#: html/SelfService/Elements/Tabs:78 html/SelfService/index.html:48
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Otevřené požadavky"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Otevřít požadavky při korespondenci"
-#: html/Prefs/MyRT.html:72
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Volby"
-#: html/Search/Elements/DisplayOptions:61
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Řadit podle"
-#: html/Admin/Users/Modify.html:144 html/User/Prefs.html:131
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organizace"
-#: html/Approvals/Elements/Approve:55
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Původní požadavek: #%1"
-#: lib/RT/Transaction_Overlay.pm:643
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Odchozí zpráva o komentáři zaznamenána"
-#: lib/RT/Transaction_Overlay.pm:647
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Odchozí zpráva zaznamenána"
-#: html/Admin/Queues/Modify.html:92
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Časem se priorita posouvá k"
@@ -3175,382 +4601,648 @@ msgstr "Vlastnit požadavky"
msgid "OwnTicket"
msgstr "Vlastnit požadavek"
-#: etc/initialdata:38 html/Elements/QuickCreate:58 html/Search/Elements/PickBasics:103 html/Ticket/Create.html:74 html/Ticket/Elements/EditBasics:63 html/Ticket/Elements/EditPeople:66 html/Ticket/Elements/EditPeople:67 html/Ticket/Elements/Reminders:131 html/Ticket/Elements/ShowPeople:50 html/Ticket/Update.html:64 lib/RT/ACE_Overlay.pm:112 lib/RT/Tickets_Overlay.pm:2122
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Vlastník"
-#: lib/RT/Ticket_Overlay.pm:507
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr "Vlastník '%1' nemá práva k držení tohoto požadavku."
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "Vlastník změněn z %1 na %2"
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "Vlastník nemůže být nastaven."
-#: lib/RT/Transaction_Overlay.pm:693
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Vlastník nuceně změněn z %1 na %2"
-#: html/Elements/TicketList:82
-#. ($Page, $pages)
-msgid "Page %1 of %2"
-msgstr "Stránka %1 z %2"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "Jméno vlastníka"
-#: html/Admin/Users/Modify.html:201 html/User/Prefs.html:98
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Stránka"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Stránka 1 z 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Stránka nenalezena"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Pager"
-#: html/Elements/EditLinks:145 html/Elements/EditLinks:77 html/Elements/ShowLinks:70 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:62
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "Pager"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "RodiÄe"
-#: html/Elements/Login:97 html/User/Prefs.html:107
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Heslo"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "PÅ™ipomínaÄ hesel"
-#: lib/RT/Transaction_Overlay.pm:802 lib/RT/User_Overlay.pm:1047
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Heslo změněno"
-#: lib/RT/User_Overlay.pm:1039 lib/RT/User_Overlay.pm:216
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Heslo musí být dlouhé nejméně %1 %quant(%1,znak,znaky,znaků)"
-#: lib/RT/User_Overlay.pm:1046
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Heslo je nastaveno"
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Heslo: %1"
-#: lib/RT/User_Overlay.pm:1032
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Heslo: Přístup odmítnut"
-#: html/Admin/Users/Modify.html:368
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "Změna hesla"
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Hesla nesouhlasí."
-#: html/User/Prefs.html:244
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Hesla nesouhlasí. Vaše heslo nebylo změněno"
-#: html/Ticket/Elements/ShowSummary:64 html/Ticket/Elements/Tabs:121 html/Ticket/ModifyAll.html:74
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "Cesta k sendmailu"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Uživatelé"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Provedení uživatelem definované akce"
-#: html/Admin/Tools/Configuration.html:96
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr "Perl Include Paths (@INC)"
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Konfigurace Perlu"
-#: lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:582 lib/RT/ACE_Overlay.pm:592 lib/RT/ACE_Overlay.pm:602 lib/RT/ACE_Overlay.pm:667 lib/RT/Attribute_Overlay.pm:160 lib/RT/Attribute_Overlay.pm:166 lib/RT/Attribute_Overlay.pm:407 lib/RT/Attribute_Overlay.pm:416 lib/RT/Attribute_Overlay.pm:429 lib/RT/CurrentUser.pm:118 lib/RT/CurrentUser.pm:127 lib/RT/CustomField_Overlay.pm:1020 lib/RT/CustomField_Overlay.pm:1141 lib/RT/CustomField_Overlay.pm:1284 lib/RT/CustomField_Overlay.pm:174 lib/RT/CustomField_Overlay.pm:191 lib/RT/CustomField_Overlay.pm:202 lib/RT/CustomField_Overlay.pm:377 lib/RT/CustomField_Overlay.pm:406 lib/RT/CustomField_Overlay.pm:766 lib/RT/CustomField_Overlay.pm:939 lib/RT/CustomField_Overlay.pm:974 lib/RT/Group_Overlay.pm:1119 lib/RT/Group_Overlay.pm:1123 lib/RT/Group_Overlay.pm:1132 lib/RT/Group_Overlay.pm:1242 lib/RT/Group_Overlay.pm:1246 lib/RT/Group_Overlay.pm:1252 lib/RT/Group_Overlay.pm:447 lib/RT/Group_Overlay.pm:544 lib/RT/Group_Overlay.pm:622 lib/RT/Group_Overlay.pm:630 lib/RT/Group_Overlay.pm:728 lib/RT/Group_Overlay.pm:732 lib/RT/Group_Overlay.pm:738 lib/RT/Group_Overlay.pm:924 lib/RT/Group_Overlay.pm:928 lib/RT/Group_Overlay.pm:941 lib/RT/Queue_Overlay.pm:1056 lib/RT/Queue_Overlay.pm:142 lib/RT/Queue_Overlay.pm:160 lib/RT/Queue_Overlay.pm:659 lib/RT/Queue_Overlay.pm:669 lib/RT/Queue_Overlay.pm:683 lib/RT/Queue_Overlay.pm:821 lib/RT/Queue_Overlay.pm:830 lib/RT/Queue_Overlay.pm:843 lib/RT/Scrip_Overlay.pm:151 lib/RT/Scrip_Overlay.pm:162 lib/RT/Scrip_Overlay.pm:226 lib/RT/Scrip_Overlay.pm:540 lib/RT/Template_Overlay.pm:110 lib/RT/Template_Overlay.pm:279 lib/RT/Ticket_Overlay.pm:1359 lib/RT/Ticket_Overlay.pm:1369 lib/RT/Ticket_Overlay.pm:1383 lib/RT/Ticket_Overlay.pm:1524 lib/RT/Ticket_Overlay.pm:1534 lib/RT/Ticket_Overlay.pm:1548 lib/RT/Ticket_Overlay.pm:1665 lib/RT/Ticket_Overlay.pm:1985 lib/RT/Ticket_Overlay.pm:2128 lib/RT/Ticket_Overlay.pm:2298 lib/RT/Ticket_Overlay.pm:2348 lib/RT/Ticket_Overlay.pm:2528 lib/RT/Ticket_Overlay.pm:2541 lib/RT/Ticket_Overlay.pm:2617 lib/RT/Ticket_Overlay.pm:2630 lib/RT/Ticket_Overlay.pm:2751 lib/RT/Ticket_Overlay.pm:2765 lib/RT/Ticket_Overlay.pm:3016 lib/RT/Ticket_Overlay.pm:3027 lib/RT/Ticket_Overlay.pm:3033 lib/RT/Ticket_Overlay.pm:3250 lib/RT/Ticket_Overlay.pm:3254 lib/RT/Ticket_Overlay.pm:3397 lib/RT/Ticket_Overlay.pm:3525 lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:544 lib/RT/Transaction_Overlay.pm:572 lib/RT/Transaction_Overlay.pm:579 lib/RT/User_Overlay.pm:1178 lib/RT/User_Overlay.pm:1858 lib/RT/User_Overlay.pm:371 lib/RT/User_Overlay.pm:737 lib/RT/User_Overlay.pm:776
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Přístup nepovolen"
-#: lib/RT/Template_Overlay.pm:240 lib/RT/Template_Overlay.pm:249
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr "Přístup nepovolen"
-#: lib/RT/Template_Overlay.pm:379
-msgid "Permissions denied"
-msgstr "Přístupy nepovoleny"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "Osobní řídící panely"
-#: html/User/Elements/Tabs:58
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Osobní skupiny"
-#: html/User/Groups/index.html:53 html/User/Groups/index.html:63
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Vlastní skupiny"
-#: html/User/Elements/DelegateRights:60
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Vlastní skupiny:"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:83
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Čísla telefonů"
-#: html/Elements/Header:95 html/Elements/Tabs:94 html/SelfService/Elements/Tabs:98 html/SelfService/Prefs.html:48 html/User/Prefs.html:48 html/User/Prefs.html:51
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Zkontrolujte prosím URL a zkuste to znovu."
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr "Možné skryté dotazy"
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Nastavení"
-#: html/Admin/Users/MyRT.html:122
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
+msgid "Preferences %1 for user %2."
msgstr "Nastavení %1 uživatele %2."
-#: html/Prefs/MyRT.html:143
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr "Nastavení pro %1 uloženo."
-#: lib/RT/Action/Generic.pm:197
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "Nastavení pro uživatele %1 uloženo."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "Nastavení uloženo."
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Preferovaný klíÄ: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Preferovaný klíÄ"
+
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr ""
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:86
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Předchozí"
-#: html/Elements/TicketList:105
-msgid "Previous Page"
-msgstr "Předchozí stránka"
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Předchozí"
-#: lib/RT/ACE_Overlay.pm:159 lib/RT/ACE_Overlay.pm:241 lib/RT/ACE_Overlay.pm:571
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Uživatel %1 nenalezen."
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:94 html/Ticket/Elements/ShowBasics:74 lib/RT/Tickets_Overlay.pm:1906
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr "VypiÅ¡ výsledné zprávy s pÅ™ehledy na STDOUT; neposílej je mailem. NeoznaÄ je za odeslané"
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Tisk této zprávy"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Priorita"
-#: html/Admin/Queues/Modify.html:88
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Priorita zaÄíná na"
-#: html/Search/Elements/EditSearches:52
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Soukromí"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
-msgstr "Vlastní:"
+msgstr "Soukromí:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Soukromý klíÄ"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
-msgstr "Privilegovaný"
+msgstr ""
-#: html/Admin/Users/Modify.html:346 html/User/Prefs.html:233
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Privilegovaný stav: %1"
-#: html/Admin/Users/index.html:104
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Privilegovaní uživatelé"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudoskupina pro vnitřní použití"
-#: html/Search/Build.html:123
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "VeÅ™ejný klÃ­Ä '0x%1' je nutný k ověření podpisu"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Dotazy"
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "Dotaz"
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Tvůrce dotazu"
-#: html/Search/Elements/Chart:103
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "Dotaz:"
-#: html/Elements/QueueSummary:50 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:73 html/SelfService/Create.html:56 html/Ticket/Create.html:64 html/Ticket/Elements/EditBasics:59 html/Ticket/Elements/ShowBasics:78 html/Tools/Reports/CreatedByDates.html:87 html/Tools/Reports/ResolvedByDates.html:88 html/Tools/Reports/ResolvedByOwner.html:68 html/User/Elements/DelegateRights:103 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Fronta"
-#: html/Admin/Queues/CustomField.html:65 html/Admin/Queues/Scrip.html:63 html/Admin/Queues/Scrips.html:71 html/Admin/Queues/Templates.html:67
-#. ($id)
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
+#. ($id)
msgid "Queue %1 not found"
msgstr "Fronta %1 nenalezena"
-#: html/Admin/Queues/Modify.html:66
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Název fronty"
-#: lib/RT/Queue_Overlay.pm:367
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Fronta již existuje"
-#: lib/RT/Queue_Overlay.pm:376 lib/RT/Queue_Overlay.pm:382
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Fronta nemůže být vytvořena"
-#: html/Ticket/Create.html:318 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Fronta nemůže být naÄtena."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:386 lib/RT/StyleGuide.pod:807
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Fronta vytvořena"
-#: html/SelfService/Display.html:128 lib/RT/CustomField_Overlay.pm:199
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "ID fronty"
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Fronta nenalezena"
-#: html/Admin/Elements/Tabs:61 html/Admin/index.html:74
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "Práva fronty"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "KlÃ­Ä fronty"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "Název fronty"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Fronty"
-#: html/Elements/MyAdminQueues:48
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Fronty mnou spravované"
-#: html/Elements/MySupportQueues:48
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Fronty v nichž jsem AdminCc"
-#: html/Elements/Quicksearch:49 html/Prefs/Elements/Tabs:60 html/Prefs/Quicksearch.html:72
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Rychlé hledání"
-#: html/Elements/QuickCreate:49
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Rychlé založení požadavku"
-#: html/Search/Results.html:83
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:794
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 pro %2"
-#: html/Admin/index.html:48 html/Admin/index.html:49
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "Správa RT"
-#: html/Elements/Error:65 html/SelfService/Error.html:64
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "Email na administrátora RT"
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "Konfigurace RT"
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "Chyba RT"
-#: html/SelfService/Elements/Tabs:72 html/SelfService/Elements/Tabs:74
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
msgid "RT Self Service"
msgstr "RT Samoobsluha"
-#: html/Admin/Tools/Configuration.html:75
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "Proměnné RT"
-#: html/Admin/Elements/SystemTabs:73 html/Admin/Elements/UserTabs:69 html/Admin/Global/MyRT.html:48 html/Admin/Global/MyRT.html:51 html/Admin/Global/MyRT.html:59 html/Admin/Global/index.html:86 html/Admin/Users/MyRT.html:68 html/Prefs/MyRT.html:68 html/Prefs/MyRT.html:80 html/User/Elements/Tabs:67 html/index.html:1 html/index.html:77
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "Přehled RT"
-#: html/Admin/Users/MyRT.html:77
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr "Přehled RT pro uživatele %1"
-#: html/Admin/CustomFields/Modify.html:119
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr "RT může informovat vaše uživatele o nových požadavcích nebo o nové korespondenci u požadavků. Řekněte nám, kde je umístěn sendmail (nebo se sendmailem kompatibilní binární soubor jako např. ten, který je dodáván s postfixem). RT také potřebuje vědět, koho má informovat, když někdo pošle chybný email. Nesmí to být ale adresa, která směřuje zpátky do RT."
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr "RT může vÄlenit obsah jiné webové stránky pÅ™i zobrazení této uživatelské položky."
-#: html/Admin/CustomFields/Modify.html:108
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "RT může z hodnoty této uživatelské položky vytvořit odkaz na jinou stránku."
-#: html/Elements/SetupSessionCookie:102
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT nemůže uložit vaše sezení."
-#: html/Elements/Logo:51 html/Elements/PageLayout:176
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT pro %1"
-#: html/Search/Simple.html:62
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT se připojí k databázi pod tímto uživatelem. Bude pro vás založen."
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT vytvoří uživatele \"root\" a nastaví jeho heslo na tuto hodnotu"
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "Vše ostatní, co zadáte, bude RT hledat v předmětech požadavků."
-#: html/Admin/CustomFields/Modify.html:110 html/Admin/CustomFields/Modify.html:121
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr "RT nahradí <tt>__id__</tt> a <tt>__CustomField__</tt> identifikátorem záznamu a hodnotou uživatelské položky (v uvedeném pořadí)"
-#: html/Admin/Users/Modify.html:81 html/User/Prefs.html:71
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr "RT použije tento Å™etÄ›zec k jednoznaÄné identifikaci vaší instalace a hledá ho v pÅ™edmÄ›tech emailů, aby urÄil, kterého požadavku se zpráva týká. DoporuÄujeme vám zadat vaÅ¡i internetovou doménu. (napÅ™. example.com)"
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr "RT pracuje s několika různými databázemi. Podporované jsou <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> a <b>SQLite</b>."
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr "RT/Správa/Úprava skupiny %1"
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "SkuteÄné jméno"
-#: html/Tools/MyDay.html:76
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "SkuteÄné jméno"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Příjemce"
+
+#: share/html/Tools/MyDay.html:73
msgid "Record all updates"
msgstr "Uložit všechny změny"
-#: lib/RT/Transaction_Overlay.pm:746
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr "Rekurzivní Älen"
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "Přidán odkaz z %1"
-#: lib/RT/Transaction_Overlay.pm:786
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "Smazán odkaz z %1"
-#: lib/RT/Transaction_Overlay.pm:743
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "Přidán odkaz na %1"
-#: lib/RT/Transaction_Overlay.pm:783
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "Smazán odkaz na %1"
-#: html/Elements/EditLinks:104 html/Elements/EditLinks:157 html/Elements/ShowLinks:94 html/Ticket/Create.html:227 html/Ticket/Elements/BulkLinks:74
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Je odkazem z"
-#: html/Elements/EditLinks:153 html/Elements/EditLinks:95 html/Elements/SelectLinkType:51 html/Elements/ShowLinks:84 html/Ticket/Create.html:226 html/Ticket/Elements/BulkLinks:70
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Odkazuje na"
-#: html/Elements/Refresh:59
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Obnova"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Obnovit tuto stránku %quant(%1,každou,každé,každých) %numf(%1) %quant(%1,minutu,minuty,minut)."
-#: lib/RT/Transaction_Overlay.pm:832
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr "Upomínka '%1' přidána"
-#: lib/RT/Transaction_Overlay.pm:845
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr "Upomínka '%1' ukonÄena"
-#: lib/RT/Transaction_Overlay.pm:838
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr "Upomínka '%1' znovuotevřena"
-#: html/Ticket/Reminders.html:48
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr "Upomínka požadavku #%1"
-#: html/Elements/MyReminders:50 html/Ticket/Elements/ShowSummary:77 html/Ticket/Elements/Tabs:124 html/Ticket/Reminders.html:54
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "Upomínky"
-#: html/Ticket/Reminders.html:52
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr "Upomínky pro požadavek #%1"
-#: html/Search/Bulk.html:96
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Odstranit AdminCc"
-#: html/Search/Bulk.html:92
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Odstranit záložku"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Odstranit Cc"
-#: html/Search/Bulk.html:88
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Odstranit žadatele"
-#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:149
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Odpovědět"
-#: html/Admin/Queues/Modify.html:74
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
-msgstr "Adresa pro odpovÄ›Ä"
+msgstr "Adresa pro odpovÄ›Äi"
-#: html/Search/Bulk.html:131 html/Ticket/ModifyAll.html:96 html/Ticket/Update.html:80
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "OdpovÄ›Ä Å¾adatelům"
@@ -3562,240 +5254,287 @@ msgstr "Odpovědět na požadavky"
msgid "ReplyToTicket"
msgstr "Odpovídat na požadavky"
-#: html/Tools/Elements/Tabs:61 html/Tools/Reports/index.html:48 html/Tools/Reports/index.html:49
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Sestavy"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Žadatel"
-#: html/SelfService/Create.html:65 html/Ticket/Create.html:82 html/Ticket/Elements/EditPeople:71 html/Ticket/Elements/ShowPeople:54
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Žadatelé"
-#: html/Admin/Queues/Modify.html:98
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Požadavky mají být vyřešeny do"
-#: lib/RT/Attribute_Overlay.pm:148
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Povinný parametr '%1' nezadán"
-#: html/Elements/Submit:85
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Vymazat"
-#: html/Admin/Users/MyRT.html:62 html/Prefs/MyRT.html:62
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr "Obnovit výchozí"
-#: html/Admin/Users/Modify.html:186 html/User/Prefs.html:86
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Bydliště"
-#: html/Ticket/Elements/Tabs:158
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Vyřešit"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Vyřešení požadavku #%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:51 lib/RT/Ticket_Overlay.pm:1174
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Vyřešen"
-#: html/Tools/Reports/Elements/Tabs:57
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Vyřešené vlastníkem"
-#: html/Tools/Reports/Elements/Tabs:61
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Vyřešené za období"
-#: html/Tools/Reports/ResolvedByDates.html:54
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Vyřešené požadavky za období, seskupené dle vlastníka"
-#: html/Tools/Reports/ResolvedByOwner.html:52
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Vyřešené požadavky, seskupené dle vlastníka"
-#: html/Elements/ListActions:48 html/Search/Elements/NewListActions:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Výsledky"
-#: html/Admin/Users/Modify.html:128 html/User/Prefs.html:118
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Návrat zpět k požadavku"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Zopakujte heslo"
-#: html/Search/Elements/EditSearches:63
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Vrátit"
-#: lib/RT/ACE_Overlay.pm:632
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Právo delegováno"
-#: lib/RT/ACE_Overlay.pm:322
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Právo přidáno"
-#: lib/RT/ACE_Overlay.pm:180
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Právo naÄteno"
-#: lib/RT/ACE_Overlay.pm:697 lib/RT/ACE_Overlay.pm:718
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Právo nemůže být odebráno"
-#: html/User/Delegation.html:87
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Právo nenalezeno"
-#: lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:657
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Právo nenaÄteno."
-#: lib/RT/ACE_Overlay.pm:714
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Právo odebráno"
-#: html/Admin/Elements/UserTabs:72
-msgid "Rights"
-msgstr "Práva"
-
-#: lib/RT/Interface/Web.pm:987
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Práva pro %1 nemohou být přidělena"
-#: lib/RT/Interface/Web.pm:1016
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr "Práva nemohou být %1 odebrána"
-
-#: html/Admin/Global/GroupRights.html:74 html/Admin/Queues/GroupRights.html:76
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Pravidla"
-#: html/Prefs/MyRT.html:74
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Řádky"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Řádků na oddíl"
-#: html/Search/Elements/DisplayOptions:95
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Řádků na stránku"
-#: lib/RT/Date.pm:424
-msgid "Sat."
-msgstr "so"
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr "SQLite je databáze, která nepotÅ™ebuje server ani konfiguraci jakéhokoli druhu. AutoÅ™i RT ji doporuÄují pÅ™i testování, pÅ™edvádÄ›ní a vývoji, ale není úplnÄ› vhodná pro velký produkÄní RT server."
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "So"
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Sobota"
-#: html/Prefs/MyRT.html:74 html/Prefs/Quicksearch.html:66 html/Prefs/Search.html:71 html/Prefs/Search.html:71 html/Search/Elements/EditSearches:72 html/Widgets/SelectionBox:222
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Uložit"
-#: html/Admin/Groups/Modify.html:94 html/Admin/Queues/Modify.html:113 html/Admin/Queues/People.html:128 html/Admin/Users/Modify.html:243 html/Prefs/Quicksearch.html:66 html/Prefs/SearchOptions.html:65 html/SelfService/Prefs.html:60 html/Ticket/Modify.html:62 html/Ticket/ModifyAll.html:129 html/Ticket/ModifyDates.html:62 html/Ticket/ModifyLinks.html:63 html/Ticket/ModifyPeople.html:62 html/User/Groups/Modify.html:79
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Uložit změny"
-#: html/User/Prefs.html:183
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Uložit nastavení"
-#: html/Ticket/Elements/PreviewScrips:133
-msgid "Save changes"
-msgstr "Nezapomeňte uložit změny - "
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Uložit jako nový"
-#: lib/RT/SavedSearch.pm:175
-#. ($name)
-msgid "Saved search %1"
-msgstr "Uložený dotaz %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Uložen %1 %2"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Uložený dotaz %1 nenalezen"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr "Uložené grafy"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr "Uložené dotazy"
-#: html/Admin/Elements/ListGlobalScrips:62 html/Admin/Global/Scrip.html:79 html/Admin/Queues/Scrip.html:86
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
-#. ($scrip->Id)
msgid "Scrip #%1"
msgstr "Scrip #%1"
-#: lib/RT/Scrip_Overlay.pm:205
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip vytvořen"
-#: html/Admin/Elements/EditScrip:54
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Položky scripu"
-#: html/Admin/Elements/EditScrips:111
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip smazán"
-#: html/Admin/Elements/QueueTabs:69 html/Admin/Elements/SystemTabs:56 html/Admin/Global/index.html:64
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scripy"
-#: html/Admin/Queues/Scrips.html:57
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Scripy a příjemci"
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Scripy platné ve všech frontách"
-#: html/Elements/SimpleSearch:50 html/Search/Simple.html:67
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Vyhledat"
-#: html/Prefs/SearchOptions.html:49 html/Prefs/SearchOptions.html:52
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Nastavení hledání"
-#: lib/RT/SavedSearch.pm:117
-msgid "Search attribute load failure"
-msgstr "Chyba pÅ™i naÄítání atributu dotazu"
-
-#: html/Approvals/Elements/PendingMyApproval:61
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Vyhledávání schvalování"
-#: html/Search/Simple.html:77
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Hledat požadavky"
-#: html/Search/Simple.html:59
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
-msgstr "Pro vyhledání požadavků zadejte buÄ <strong>identifikátor</strong> Äíslem nebo <strong>frontu</strong> jménem nebo vlastníka <strong>jménem uživatele</strong> nebo žadatele <strong>emailovou adresou</strong>. VÅ¡e ostatní, co zadáte, bude RT hledat v textech požadavků a jejich přílohách."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Hledat požadavky. Zadejte <strong>id</strong> Äíslem, <strong>fronty</strong> jménem, vlastníky <strong>uživatelským jménem</strong> a žadatele <strong>mailovou adresou</strong>."
-#: html/User/Elements/Tabs:64
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Volby pro hledání"
-#: html/Search/Chart.html:58
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Výsledky hledání seskupit podle %1"
-#: lib/RT/SavedSearch.pm:205
-#. ($msg)
-msgid "Search update: %1"
-msgstr "Aktualizovat dotaz: %1"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
-#: html/Search/Simple.html:61
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "Fulltextové vyhledávání nad všemi požadavky může trvat dlouho, ale pokud to potřebujete, můžete hledat libovolné slovo v celé historii požadavku zadáním <b>fulltext:<i>slovo</i></b>."
-#: bin/rt-crontool:267
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "ZabezpeÄní:"
-#: html/Elements/ShowCustomFields:102
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Viz také:"
-#: lib/RT/CustomField_Overlay.pm:107
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Vidět uživatelské položky"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Vidět přesnou odchozí zprávu a její příjemce"
@@ -3807,211 +5546,276 @@ msgstr "Vidět soukromé komentáře požadavku"
msgid "See ticket summaries"
msgstr "Vidět sumárně požadavek"
-#: lib/RT/CustomField_Overlay.pm:107
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "Vidět uživatelskou položku"
-#: lib/RT/Group_Overlay.pm:171
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "Vidět řídící panel"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "Vidět skupinu"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "Vidět řídící panel skupiny"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "Vidět vlastní řídící panel"
+
+#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "Vidět frontu"
-#: html/Admin/CustomFields/index.html:48 html/Admin/CustomFields/index.html:51
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "Výběr"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Výběr typu databáze"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Výběr uživatelské položky"
-#: html/Admin/Groups/index.html:80
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Výběr skupiny"
-#: html/Admin/Queues/index.html:56
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Výběr fronty"
-#: html/SelfService/CreateTicketInQueue.html:50
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Výběr fronty pro váš nový požadavek"
-#: html/Admin/Users/index.html:48 html/Admin/Users/index.html:51 html/Admin/Users/index.html:54
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Výběr uživatele"
-#: html/Admin/Elements/CustomFieldTabs:92
-msgid "Select custom field"
-msgstr "Vybrat uživatelskou položku"
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Vyberte jiný jazyk"
-#: html/Admin/Global/CustomFields/index.html:72
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Vybrat uživatelské položky pro všechny fronty"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Vybrat uživatelské položky pro všechny skupiny uživatelů"
-#: html/Admin/Global/CustomFields/index.html:67
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Vybrat uživatelské položky pro všechny uživatele"
-#: html/Admin/Global/CustomFields/index.html:78
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Vybrat uživatelské položky pro požadavky ve všech frontách"
-#: html/Admin/Global/CustomFields/index.html:85
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Vybrat uživatelské položky pro transakce s požadavky ve všech frontách"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Vybrat řídící panel"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Vybrat skupinu"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Vybrat více hodnot"
-#: lib/RT/CustomField_Overlay.pm:62
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Vybrat jednu hodnotu"
-#: html/Admin/Elements/QueueTabs:94
-msgid "Select queue"
-msgstr "Výběr fronty"
-
-#: html/Prefs/Quicksearch.html:55
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Výběr front, které budou zobrazeny na stránce \"Přehled RT\""
-#: html/Admin/Global/Scrip.html:61 html/Admin/Global/Scrips.html:59 html/Admin/Queues/Scrip.html:69 html/Admin/Queues/Scrips.html:75
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Výběr scripu"
-#: html/Admin/Global/Template.html:77 html/Admin/Global/Templates.html:59 html/Admin/Queues/Template.html:78 html/Admin/Queues/Templates.html:70
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Vybrat vzor"
-#: lib/RT/CustomField_Overlay.pm:63
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Výběr nejvýše %1 %quant(%1,hodnoty,hodnot,hodnot)"
-#: html/Admin/Elements/UserTabs:80
-msgid "Select user"
-msgstr "Výběr uživatele"
-
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Vybrané uživatelské položky"
-#: html/Admin/CustomFields/Objects.html:61
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "Vybraný klÃ­Ä buÄ není důvÄ›ryhodný nebo již neexistuje."
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Vybrané objekty"
-#: html/Widgets/SelectionBox:220
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Výběr upraven. Prosím uložte si své změny"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Email byl úspěšně odeslán"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Zaslat e-mail všem pozorovatelům"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Zaslat e-mail všem pozorovatelům jako \"komentář\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Zaslat e-mail žadatelům a všem Cc"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Zaslat e-mail žadatelům a všem Ccs jako komentář"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Posílá zprávu žadatelům"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Posílá e-mail všem přesně vyjmenovaným Cc a Bcc"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Posílá e-mail všem Cc"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Posílá e-mail všem Cc jako komentář"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Posílá e-mail všem administrativním Cc"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Posílá e-mail všem administrativním Cc jako komentář"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Posílá e-mail vlastníkovi"
-#: lib/RT/Date.pm:451
-msgid "Sep."
+#: lib/RT/Date.pm:96
+msgid "Sep"
msgstr "zář"
-#: html/Ticket/Elements/ShowTransaction:161
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "Září"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Nastavení"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Zobrazit"
-#: html/Search/Elements/EditFormat:58
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Zobrazit sloupce"
-#: html/Ticket/Elements/Tabs:222
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Zobrazit výsledky"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Zobrazit schválené požadavky"
-#: html/Ticket/Create.html:390
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Zobrazit základní údaje"
-#: html/Approvals/Elements/PendingMyApproval:67
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Zobrazit odepřené požadavky"
-#: html/Ticket/Create.html:393
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Zobrazit podrobnosti"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr "Zobrazit historii vzestupnÄ›"
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Zobrazit trvající požadavky"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
-msgstr "Zobrazit požadavky Äekající na jejich schválení"
+msgstr "Zobrazit požadavky Äekající na další schválení"
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:93
msgid "ShowACL"
msgstr "Zobrazovat seznam přístupových práv"
-#: lib/RT/System.pm:87
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr "Zobrazit záložku Schvalování"
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "Zobrazit záložku Správa"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "Zobrazit odchozí e-mail"
-#: lib/RT/Group_Overlay.pm:170
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "Zobrazit uložené dotazy"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "Zobrazit scripy"
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "Zobrazit vzor"
@@ -4023,6 +5827,27 @@ msgstr "Zobrazit požadavek"
msgid "ShowTicketComments"
msgstr "Zobrazit komentáře požadavku"
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Být žadatelem Äi Cc požadavku nebo fronty"
@@ -4031,150 +5856,258 @@ msgstr "Být žadatelem Äi Cc požadavku nebo fronty"
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Být AdminCc požadavku nebo fronty"
-#: html/Admin/Users/Modify.html:234 html/User/Prefs.html:170
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Podpis"
-#: html/Elements/Tabs:71
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Podepsání zakázáno"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "Podepsání povoleno"
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Jednoduché vyhledávání"
-#: html/Admin/Elements/SelectSingleOrMultiple:49
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Jednoduchá"
-#: html/Search/Elements/EditFormat:77
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Jméno serveru"
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Velikost"
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "PÅ™eskoÄit menu"
-#: html/Search/Elements/EditFormat:80
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr "Přeskakuji zakázaného uživatele"
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Malé"
-#: html/Admin/CustomFields/Modify.html:122
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "NÄ›které prohlížeÄe mohou nahrát obsah pouze ze stejné domény jako je váš RT server."
-#: html/Admin/Elements/AddCustomFieldValue:51 html/Admin/Elements/EditCustomFieldValues:56
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Pořadí"
-#: html/Admin/Elements/EditScrip:80
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Třídění"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Upřesněte, zda jde o denní nebo týdenní spuštění."
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Tabulka"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Fáze"
-#: html/Elements/SelectDateType:50 html/Ticket/Elements/EditDates:55 html/Ticket/Elements/ShowDates:58
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "ZapoÄato"
-#: html/Elements/SelectDateType:54 html/Ticket/Create.html:210 html/Ticket/Elements/EditDates:50 html/Ticket/Elements/ShowDates:54
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "ZaÄíná"
-#: html/Admin/Users/Modify.html:165 html/User/Prefs.html:147
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Stát"
-#: html/Search/Elements/PickBasics:89 html/SelfService/Update.html:59 html/Ticket/Create.html:68 html/Ticket/Elements/EditBasics:55 html/Ticket/Elements/ShowBasics:54 html/Ticket/Update.html:61 html/Tools/MyDay.html:70 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1767
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Stav"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Změna stavu"
-#: html/Ticket/Elements/Tabs:180
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr "Stav změněn z %1 na %2"
+
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Převzít"
-#: lib/RT/Queue_Overlay.pm:119
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Převzít požadavky"
-#: lib/RT/Queue_Overlay.pm:119
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "Převzít požadavek"
-#: lib/RT/Transaction_Overlay.pm:699
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Krok %1 z %2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Převzato od %1"
-#: html/Search/Elements/EditFormat:83
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Styl"
-#: html/Elements/QuickCreate:54 html/Elements/SelectAttachmentField:49 html/Search/Bulk.html:134 html/SelfService/Create.html:81 html/SelfService/Update.html:67 html/Ticket/Create.html:110 html/Ticket/Elements/EditBasics:50 html/Ticket/Elements/Reminders:127 html/Ticket/ModifyAll.html:102 html/Ticket/Update.html:84 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:1849
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Předmět"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:813 lib/RT/Transaction_Overlay.pm:721
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Předmět změněn na %1"
-#: html/Elements/Submit:77
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Odeslat"
-#: lib/RT/Group_Overlay.pm:776
-msgid "Succeeded"
-msgstr "Úspěšné"
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
-#: lib/RT/Date.pm:425
-msgid "Sun."
-msgstr "ne"
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
-#: lib/RT/System.pm:77
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Úspěšně dešifrovaná data"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Úspěšně zašifrovaná data"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Ne"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Neděle"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "Super uživatel"
-#: html/User/Elements/DelegateRights:100
-msgid "System"
-msgstr "Systém"
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Pozastaveno"
-#: html/Admin/Elements/ToolTabs:56 html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Systémová konfigurace"
-#: html/Admin/CustomFields/UserRights.html:100 html/Admin/CustomFields/UserRights.html:130 html/Admin/Elements/SelectRights:108 lib/RT/ACE_Overlay.pm:586 lib/RT/Interface/Web.pm:1015 lib/RT/Interface/Web.pm:986
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "Systémové řídící panely"
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Nastavení systému"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Systémová chyba"
-#: lib/RT/Transaction_Overlay.pm:226 lib/RT/Transaction_Overlay.pm:232
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr "Systémová chyba: %1"
-#: html/Admin/Tools/index.html:49
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Systémové nástroje"
-#: lib/RT/ACE_Overlay.pm:635
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Systémová chyba. Právo nedelegováno."
-#: lib/RT/ACE_Overlay.pm:165 lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:325
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Systémová chyba. Právo nepřiděleno."
-#: html/Admin/CustomFields/GroupRights.html:60 html/Admin/Global/GroupRights.html:58 html/Admin/Groups/GroupRights.html:60 html/Admin/Queues/GroupRights.html:59
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Systémové skupiny"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "Práva systému"
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "Skupina systémovýh pravidel pro vnitřní použití"
-#: lib/RT/CurrentUser.pm:359
-msgid "TEST_STRING"
-msgstr "MíchaÄka na beton"
-
-#: etc/initialdata:603 html/Search/Elements/EditFormat:74 html/Ticket/Elements/Tabs:172
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Vzít"
@@ -4186,535 +6119,850 @@ msgstr "Vzít požadavky"
msgid "TakeTicket"
msgstr "Vzít požadavek"
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Vzal"
-#: html/Admin/Elements/EditScrip:73 html/Tools/Offline.html:80
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr "Řekněte nám něco málo o tom, jak máme najít databázi, kterou bude RT používat"
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Vzor"
-#: html/Admin/Global/Template.html:110 html/Admin/Queues/Template.html:115
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Vzor #%1"
-#: html/Admin/Elements/EditTemplates:112
-msgid "Template deleted"
-msgstr "Vzor smazán"
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Vzor #%1 smazán"
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Vzor '%1' nenalezen"
-#: lib/RT/Scrip_Overlay.pm:178
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Vzor je prázdný"
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr "Vzor je povinným parametrem"
-#: lib/RT/Scrip_Overlay.pm:182
-msgid "Template not found"
-msgstr "Vzor nenalezen"
-
-#: lib/RT/Template_Overlay.pm:346
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Vzor rozpoznán"
-#: lib/RT/Template_Overlay.pm:398
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Chyba při rozpoznávání vzoru"
-#: html/Admin/Elements/QueueTabs:72 html/Admin/Elements/SystemTabs:59 html/Admin/Global/index.html:68
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Vzory"
-#: lib/RT/CustomField_Overlay.pm:946 lib/RT/Record.pm:962
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Toto je již aktuální hodnota"
-#: lib/RT/CustomField_Overlay.pm:415
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Toto není hodnota pro tuto uživatelskou položku"
-#: lib/RT/Ticket_Overlay.pm:1996
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Toto je shodná hodnota"
-#: lib/RT/ACE_Overlay.pm:307 lib/RT/ACE_Overlay.pm:616
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Tento uživatel již toto práva má"
-#: lib/RT/Queue_Overlay.pm:755
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Tento uživatel je již v této frontě %1"
-#: lib/RT/Ticket_Overlay.pm:1437
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Tento uživatel je již u tohoto požadavku %1"
-#: lib/RT/Queue_Overlay.pm:854
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Tento uživatel není v této frontě %1"
-#: lib/RT/Ticket_Overlay.pm:1992
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr "Tento uživatel není %1 tohoto požadavku"
+
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Tato fronta neexistuje"
-#: lib/RT/Ticket_Overlay.pm:3259
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Tento požadavek má nevyřešené závislosti"
-#: lib/RT/Action/CreateTickets.pm:712 lib/RT/Ticket_Overlay.pm:3062
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Tento uživatel již tento požadavek vlastní"
-#: lib/RT/Ticket_Overlay.pm:3005
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Tento uživatel neexistuje"
-#: lib/RT/User_Overlay.pm:391
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Tento uživatel je již privilegován"
-#: lib/RT/User_Overlay.pm:412
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Tento uživatel je již neprivilegován"
-#: lib/RT/User_Overlay.pm:404
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Uživatel je nyní privilegován"
-#: lib/RT/User_Overlay.pm:425
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Uživatel je nyní neprivilegován"
-#: lib/RT/Ticket_Overlay.pm:3055
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "V této frontě nemůže tento uživatel vlastnit požadavky"
-#: lib/RT/Link_Overlay.pm:235
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Toto není Äíselný identifikátor"
-#: html/SelfService/Display.html:55 html/Ticket/Create.html:179 html/Ticket/Elements/ShowSummary:51
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Základní údaje"
-#: lib/RT/ACE_Overlay.pm:114
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "Cc požadavku"
-#: lib/RT/ACE_Overlay.pm:115
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "Heslo DBA k databázi"
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "Administrativní Cc požadavku"
-#: bin/rt-crontool:277
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "Doménové jméno vašeho databázového serveru (např. 'db.example.com')."
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Následující příkaz najde všechny aktivní požadavky ve frontě 'general' a nastaví jejich prioritu na 99, pokud nebyly tknuty poslední 4 hodiny:"
-#: lib/RT/Record.pm:965
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr "Následující dotazy nemohou být viditelné všem uživatelům, kteří vidí tento řídící panel."
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "KlÃ­Ä byl zakázán"
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "KlÃ­Ä byl odebrán"
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "KlíÄi vyprÅ¡ela platnost"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr "KlÃ­Ä je zcela důvÄ›ryhodný"
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr "KlÃ­Ä je skuteÄnÄ› důvÄ›ryhodný"
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Nová hodnota nastavena."
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "Vlastník požadavku"
-#: lib/RT/ACE_Overlay.pm:113
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "Stránka, o kterou žádáte, nebyla nalezena"
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Žadatel požadavku"
-#: html/Admin/Elements/EditUserComments:49
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr "Nastavení, která jste zadali, jsou uložena v %1."
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Motiv"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "Více klíÄů je vhodných pro Å¡ifrování."
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "U požadavku jsou nepÅ™eÄtené zprávy."
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "Žádný klÃ­Ä není vhodný pro Å¡ifrování."
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Tyto komentáře nejsou běžně viditelné uživateli"
-#: lib/RT/CustomField_Overlay.pm:981
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr "Tyto volby nastavení zahrnují některé základní údaje potřebné k provozu RT. Potřebujeme znát jméno vaší instalace RT a doménové jméno, kde RT poběží. Také budete potřebovat zadat heslo vašeho implicitního administrativního uživatele."
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Tato uživatelská položka se nevztahuje k tomuto objektu"
-#: html/Admin/Tools/Configuration.html:52
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Tato funkce je dostupná jen správcům systému"
-#: html/Ticket/Elements/PreviewScrips:98
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr "Může to znamenat, že adresář '%1' není přístupný pro zápis nebo že tabulka databáze chybí nebo je poškozená."
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Tato zpráva BUDE poslána na..."
-#: bin/rt-crontool:268
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Tento nástroj umožňuje uživateli spustit libovolné perl moduly z RT."
-#: lib/RT/Transaction_Overlay.pm:327
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Tato transakce vypadá, že nemá obsah"
-#: html/Ticket/Elements/ShowRequestor:72
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "%1 nejdůležitější%quant(%1, požadavek,požadavky,ch požadavků) tohoto uživatele"
-#: lib/RT/Date.pm:422
-msgid "Thu."
-msgstr "Ät"
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "ÄŒt"
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "ÄŒtvrtek"
-#: html/Ticket/ModifyAll.html:48 html/Ticket/ModifyAll.html:52
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Požadavek"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Požadavek #%1 Maxi aktualizace: %2"
-#: html/Approvals/Elements/ShowDependency:69
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Požadavek #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1352 lib/RT/Action/CreateTickets.pm:1361 lib/RT/Action/CreateTickets.pm:607 lib/RT/Action/CreateTickets.pm:731 lib/RT/Action/CreateTickets.pm:743
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "Požadavek %1"
-#: lib/RT/Ticket_Overlay.pm:757 lib/RT/Ticket_Overlay.pm:777
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Požadavek %1 vytvořen ve frontě '%2'"
-#: html/Search/Bulk.html:379 html/Tools/MyDay.html:103 html/Tools/MyDay.html:94 html/Tools/MyDay.html:97
-#. ($Ticket->Id, $_)
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
#. ($id, $msg)
+#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Požadavek %1: %2"
-#: html/Admin/Elements/QueueTabs:76
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Uživatelské položky požadavků"
-#: html/Ticket/History.html:48 html/Ticket/History.html:51
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Historie požadavku # %1 %2"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Požadavek vyřešen"
-#: html/Admin/Elements/GlobalCustomFieldTabs:71 html/Admin/Global/CustomFields/index.html:83 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Hledání požadavku"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Transakce s požadavky"
-#: lib/RT/Tickets_Overlay.pm:2036
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Obsah požadavku"
-#: lib/RT/Tickets_Overlay.pm:2085
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Content type požadavku"
-#: lib/RT/Ticket_Overlay.pm:605 lib/RT/Ticket_Overlay.pm:619 lib/RT/Ticket_Overlay.pm:630 lib/RT/Ticket_Overlay.pm:765
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Požadaven nemůže být vytvořen pro vnitřní chybu"
-#: html/Ticket/Create.html:246
+#: share/html/Ticket/Create.html:255
msgid "Ticket could not be loaded"
msgstr "Požadavek nemůže být nahrán"
-#: html/Ticket/Display.html:57
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Zobrazení požadavku"
+
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Metadata požadavku"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Stav požadavku změněn"
-#: lib/RT/Search/FromSQL.pm:84
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "TicketSQL vyhledávací modul"
-#: html/Admin/Elements/GlobalCustomFieldTabs:66 html/Admin/Global/CustomFields/index.html:77 html/Elements/Tabs:74 html/Search/Chart:113 html/Search/Elements/Chart:111 lib/RT/CustomField_Overlay.pm:1209
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Požadavky"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Požadavky %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Požadavky vytvořené po"
-#: html/Tools/Reports/CreatedByDates.html:90
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Požadavky vytvořené před"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Požadavky vyřešené po"
-#: html/Tools/Reports/ResolvedByDates.html:91
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Požadavky vyřešené před"
-#: html/Approvals/Elements/ShowDependency:50
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Požadavky, které záleží na tomto schválení:"
-#: html/Search/Elements/PickBasics:136 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:74
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "PÅ™edpokládaný Äas"
-#: html/Search/Elements/PickBasics:137 html/Ticket/Create.html:198 html/Ticket/Elements/EditBasics:87 lib/RT/Tickets_Overlay.pm:2007
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Zbývající Äas"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:191 html/Ticket/Elements/EditBasics:80 lib/RT/Tickets_Overlay.pm:1982
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Čas práce"
-#: html/Elements/Footer:53
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Čas k zobrazení"
-#: lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "Odhadovaný Äas"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "UbÄ›hlý Äas"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "Čas práce"
-#: html/Search/Elements/EditFormat:76
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Časové pásmo"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Nadpis"
-#: html/Elements/Footer:64
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "Komu"
+
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "K získání informací o podpoÅ™e, tréninku, zákaznických úpravách Äi licencování kontaktujte prosím %1."
-#: lib/RT/Ticket_Overlay.pm:1172
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Poslední kontakt"
-#: html/Admin/Elements/Tabs:70 html/Admin/index.html:90 html/Elements/Tabs:77 html/Tools/index.html:48 html/Tools/index.html:51
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Nástroje"
-#: html/Search/Elements/Chart:132
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Celkem"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transakce"
-#: lib/RT/Transaction_Overlay.pm:826
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Transakce %1 vymazána"
-#: lib/RT/Transaction_Overlay.pm:185
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transakce vytvořena"
-#: html/Admin/Elements/QueueTabs:80
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Uživatelské položky transakcí"
-#: lib/RT/Transaction_Overlay.pm:130
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Bez udání typu objektu a id nelze volat Transaction->Create"
-#: lib/RT/Transaction_Overlay.pm:891
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Transakce jsou neměnné"
-#: lib/RT/Date.pm:420
-msgid "Tue."
-msgstr "út"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Út"
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Úterý"
-#: html/Admin/CustomFields/Modify.html:68 html/Admin/Elements/EditCustomField:67 html/Ticket/Elements/AddWatchers:56 html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/AddWatchers:77 lib/RT/Ticket_Overlay.pm:1170 lib/RT/Tickets_Overlay.pm:1821
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Typ"
-#: lib/RT/ScripCondition_Overlay.pm:130
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Typ změněn z '%1' na '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr "Nelze urÄit typ objektu nebo id"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Neimplementováno"
-#: html/Admin/Users/Modify.html:91
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unixový login"
-#: lib/RT/Attachment_Overlay.pm:291 lib/RT/Record.pm:863
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Neznámé kódování obsahu %1"
-#: html/Search/Build.html:461 lib/RT/Report/Tickets.pm:412
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
#. ($key)
msgid "Unknown field: %1"
msgstr "Neznámé pole: %1"
-#: html/Elements/SelectResultsPerPage:60
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "NeomezenÄ›"
-#: html/Search/Elements/SelectSearchesForObjects:66
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Nepojmenovaný dotaz"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
-msgstr "Neprivilegovaný"
+msgstr ""
-#: html/Admin/Elements/EditCustomFields:62
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Nevybrané uživatelské položky"
-#: html/Admin/CustomFields/Objects.html:63
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Nevybrané objekty"
-#: lib/RT/Transaction_Overlay.pm:680
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Vrácen"
-#: html/Admin/Elements/EditScrip:130 html/Elements/RT__Ticket/ColumnMap:304 html/Search/Bulk.html:195 html/Search/Bulk.html:77
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Aktualizace"
-#: html/Ticket/Update.html:137
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Aktualizovat diagram"
+
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Aktualizovat požadavek"
-#: html/Search/Bulk.html:128 html/Ticket/ModifyAll.html:89 html/Ticket/Update.html:74
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Typ aktualizace"
-#: html/Search/Bulk.html:202 html/Search/Results.html:80
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Aktualizovat formátování a hledat"
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Aktualizovat hromadně požadavky"
-#: lib/RT/Action/CreateTickets.pm:752 lib/RT/Interface/Web.pm:606
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Aktualizace nezaznamenána"
-#: html/Ticket/ModifyAll.html:86
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Aktualizace požadavku"
-#: html/SelfService/Update.html:114 html/SelfService/Update.html:49
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Aktualizace požadavku #%1"
-#: html/Ticket/Update.html:160
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Aktualizace požadavku #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:605
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Typ aktualizace nebyl ani korespondence ani komentář."
-#: html/Elements/SelectDateType:56 html/Ticket/Elements/ShowDates:74 lib/RT/CustomField_Overlay.pm:1287 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Aktualizováno"
-#: html/Tools/Offline.html:95
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "Uložený dotaz \"%1\" byl aktualizován"
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Odeslat"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Odeslat více souborů"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Odeslat více obrázků"
-#: lib/RT/CustomField_Overlay.pm:87
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Odeslat jeden soubor"
-#: lib/RT/CustomField_Overlay.pm:82
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Odeslat jeden obrázek"
-#: lib/RT/CustomField_Overlay.pm:88
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Odeslat nejvýše %1 %quant(%1,soubor,soubory,souborů)"
-#: lib/RT/CustomField_Overlay.pm:83
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Odeslat nejvýše %1 %quant(%1,obrázek,obrázky,obrázků)"
-#: html/Tools/Offline.html:95
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "NaÄíst vaÅ¡e zmÄ›ny"
-#: html/Admin/index.html:92
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Použití: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "Použít SSL?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "Použít implicitní (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Use fixed-width font to display plaintext messages"
+msgstr "Použije font s pevnou šířkou pro zobrazení zpráv typu plaintext"
+
+#: NOT FOUND IN SOURCE
+msgid "Use monospace font"
+msgstr "Použít neproporcionální font"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Další administrativní nástroje RT"
-#: lib/RT/Ticket_Overlay.pm:508
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "Použít nastavení systému (%1)"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Uživatel"
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "Uživatel '%1' nemůže být nalezen"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Uživatelem definované"
-#: html/Admin/Elements/EditScrip:95
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Uživatelem definované podmínky a akce"
-#: html/Admin/Elements/CustomFieldTabs:74 html/Admin/Elements/GroupTabs:70 html/Admin/Elements/QueueTabs:87 html/Admin/Elements/SystemTabs:70 html/Admin/Global/index.html:82
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Práva uživatele"
-#: html/Admin/Users/Modify.html:305
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Uživatel nemůže být vytvořen: %1"
-#: lib/RT/User_Overlay.pm:332
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Uživatel vytvořen"
-#: html/Admin/CustomFields/GroupRights.html:76 html/Admin/Global/GroupRights.html:90 html/Admin/Groups/GroupRights.html:77 html/Admin/Queues/GroupRights.html:92
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Uživatelem definované skupiny"
-#: lib/RT/User_Overlay.pm:594 lib/RT/User_Overlay.pm:614
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "Uživatel má prázdnou emailovou adresu"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Uživatel naÄten"
-#: html/Admin/Groups/index.html:105
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Uživatelovy GnuPG klíÄe"
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Uživatelem definované skupiny"
-#: html/Admin/Users/Modify.html:71 html/Elements/Login:92 html/Ticket/Elements/AddWatchers:58
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Uživatelské jméno"
-#: html/Admin/Elements/GlobalCustomFieldTabs:57 html/Admin/Elements/SelectNewGroupMembers:49 html/Admin/Elements/Tabs:55 html/Admin/Global/CustomFields/index.html:66 html/Admin/Groups/Members.html:78 html/Admin/Queues/People.html:91 html/Admin/index.html:64 html/User/Groups/Members.html:81 lib/RT/CustomField_Overlay.pm:1211
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Formát uživatelského jména"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Uživatelé"
-#: html/Admin/Users/index.html:87
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Uživatelé odpovídající vyhledávací podmínce"
-#: bin/rt-crontool:136
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr "Používám transakci #%1..."
-#: lib/RT/Tickets_Overlay_SQL.pm:530
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Platný dotaz"
-#: html/Admin/CustomFields/Modify.html:82
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Validace"
-#: html/Admin/CustomFields/Modify.html:132 html/Admin/Elements/EditCustomField:80
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Hodnoty"
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Různé sestavy RT"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Zobrazit řídící panely této skupiny"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Zobrazit osobní řídící panely"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "Zobrazit systémové řídící panely"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "W3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr "Výška WYSIWYG tvůrce"
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "WYSIWYG tvůrce zpráv"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Upozornění! Není podepsáno!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Být pozorovatelem"
@@ -4723,368 +6971,623 @@ msgstr "Být pozorovatelem"
msgid "WatchAsAdminCc"
msgstr "Být AdminCc pozorovatelem"
-#: html/Admin/Elements/QueueTabs:65
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Pozorovatelé"
-#: lib/RT/Date.pm:421
-msgid "Wed."
-msgstr "st"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "Jsme schopni nalézt vaÅ¡i databázi a pÅ™ipojit se jako DBA. Pro pokraÄování v úpravách RT kliknÄ›te na 'Úprava základních údajů.'"
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr "PotÅ™ebujeme znát jméno databáze, kterou bude RT používat a kde ji lze nalézt. Také potÅ™ebujeme znát uživatelské jméno a heslo uživatele, které má RT používat. RT může databázi a uživatele vytvoÅ™it za vás, což je také důvodem, proÄ se ptáme na uživatelské jméno a heslo uživatele s administrátorskými oprávnÄ›ními k databázi. BÄ›hem kroku 6 instalaÄního procesu použijeme tyto informace k vytvoÅ™ení a inicializaci databáze RT."
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Web port"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "St"
-#: html/Tools/MyDay.html:80
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Středa"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "Týdenní přehled"
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Vítejte v RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr "Dnes jsem udělal"
-#: etc/initialdata:521
-msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
-msgstr "Přidat korespondenci k původnímu požadavku, pokud byl požadavek schválen všemi"
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Co je to RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr "Když RT nebude moci zpracovat emailovou zprávu, kam má být přeposlána?"
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr "Přidat korespondenci k původnímu požadavku, pokud byl požadavek kýmkoli schválen"
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr "Když RT posílá email, nastaví hlaviÄky From: a Reply-To: tak, že se uživatelé mohou zapojit do konverzace pouhým stiskem na OdpovÄ›dÄ›t ve svých emailových klientech. RT používá různé adresy pro OdpovÄ›di a pro Komentáře. Ty mohou být zmÄ›nÄ›ny pro každou z vaÅ¡ich front. Tyto adresy bude potÅ™eba nakonfigurovat, aby se mohl používat program <tt>rt-mailgate</tt>."
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Když je požadavek vytvořen"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Upozornit vlastníka a vÅ¡echny AdminCc, jejichž schválení se oÄekává, pÅ™i vytvoÅ™ení schvalovaného požadavku"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Stane-li se cokoli"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr "Když kliknete na 'Kontrola připojení k databázi', tak může nastat malé zpoždění, během kterého se RT snaží připojit k vaší databázi"
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "Je-li uzavřen požadavek"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Je-li znovuotevřen požadavek"
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Je-li vyřešen požadavek"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Změní-li se vlastník požadavku"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Při změně priority požadavku"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Změní-li se fronta požadavku"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Změní-li se stav požadavku"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Splní-li se uživatelská podmínka"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Přijde-li komentář"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Přijde-li korespondence"
-#: html/Admin/Users/Modify.html:191 html/User/Prefs.html:90
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "Kde je umístěn váš program sendmail."
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr "Vymazat"
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Zaměstnání"
-#: html/Search/Results.html:84
-msgid "Work offline"
-msgstr "Pracovat off-line"
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "Telefon do práce"
-#: html/Ticket/Elements/ShowBasics:65 html/Ticket/Update.html:66 html/Tools/MyDay.html:65
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Odpracováno"
-#: lib/RT/Ticket_Overlay.pm:3166
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Ano"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Požadavek již vlastníte"
-#: html/autohandler:216 html/autohandler:224
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr "Chystáte se zaÅ¡ifrovat odchozí emailové zprávy, ale s veÅ™ejnými klíÄi příjemce jsou problémy. Musíte odstranit problémy s klíÄi, zakázat posílání zpráv příjemcům s problémovými klíÄi nebo zakázat Å¡ifrování."
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr "Chystáte se zaÅ¡ifrovat odchozí emailové zprávy, ale s veÅ™ejným klíÄem příjemce je problém. Musíte odstranit problém s klíÄem, zakázat posílání zpráv tomuto příjemci nebo zakázat Å¡ifrování."
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Nejste autorizovaný uživatel"
-#: html/Prefs/Search.html:58
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Můžete <a href=\"%1\">pÅ™ejít na první nepÅ™eÄtenou zprávu</a> nebo <a href=\"%2\">pÅ™ejít na první nepÅ™eÄtenou zprávu a oznaÄit vÅ¡echny zprávy jako pÅ™eÄtené</a>."
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
-msgstr "Můžeti si také upravit předvolený dotaz"
+msgstr "Můžete si také upravit předvolený dotaz"
-#: lib/RT/Ticket_Overlay.pm:3048
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Můžete přidělit pouze požadavky, které jsou vaše nebo nejsou vlastněny"
-#: lib/RT/Ticket_Overlay.pm:3044
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr "Můžete vzít pouze požadavky, které nikdo nevlastní"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:778
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "Nemáte práva uživatele <b>SuperUser</b>."
+
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "Nalezl jste %1 požadavků ve frontě %2"
-#??? quant
-#: html/NoAuth/Logout.html:54
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
-msgstr "Byl jste odhlášen od RT."
+msgstr "Byl jste odhlášen z RT."
-#: html/SelfService/Display.html:135
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "V této frontě nemáte práva vytvářet požadavky."
-#: lib/RT/Ticket_Overlay.pm:2005
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "V této frontě nemůžete vytvářet požadavky."
-#: html/NoAuth/Logout.html:58
-msgid "You're welcome to login again"
-msgstr "Jste vítáni k dalšímu přihlášení"
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Musíte zadat administrativní heslo"
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr "Váš požadavek byl schválen uživatelem %1. Další schválení mohou být jeÅ¡tÄ› oÄekávána."
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr "Měli byste být přesměrováni na přihlašovací stránku. Budete schopni se přihlásit uživatelským jménem <tt>root</tt> a heslem, které jste dříve zadali."
-#: etc/initialdata:540
-msgid "Your request has been approved."
-msgstr "Váš požadavek byl schválen."
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr "Měli byste vybrat databázi, se kterou jste vy nebo váš místní databázový správce nejvíce obeznámeni."
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr "Váš požadavek byl odmítnut."
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr "Tuto obrazovku vidíte proto, že jste spustili RT server bez fungující databáze. Velmi pravdÄ›podobnÄ› jste spustili RT poprvé. Pokud kliknete níže na <i>PokraÄovat</i> , RT vás provede nastavením RT serveru a databáze."
-#: html/autohandler:253
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "Jste vítáni k dalšímu přihlášení"
+
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
-msgstr "VaÅ¡e uživatelské jméno Äi heslo je nesprávné"
+msgstr "Vaše uživatelské jméno nebo heslo je nesprávné"
-#: html/Admin/Users/Modify.html:171 html/User/Prefs.html:151
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "PSČ"
-#: html/Search/Elements/DisplayOptions:67
+#: share/html/Search/Elements/DisplayOptions:62
msgid "[none]"
msgstr "[nezadáno]"
-#: lib/RT/System.pm:89
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "po"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "umožnit vytváření uložených dotazů"
-#: lib/RT/System.pm:88
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "umožnit naÄítání uložených dotazů"
-#: html/User/Elements/DelegateRights:82
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "jak je dovoleno %1"
-#: html/Search/Results.html:85
-msgid "chart"
-msgstr "graf"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "sloupcový"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "před"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
-#: html/SelfService/Closed.html:51
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "uzavřen"
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:57
-msgid "contains"
-msgstr "obsahuje"
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
-#: html/Admin/Queues/Modify.html:100 lib/RT/Date.pm:348
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "dnů"
-#: lib/RT/Queue_Overlay.pm:89
+#: lib/RT/Queue_Overlay.pm:87
msgid "deleted"
msgstr "smazán"
-#: html/Search/Elements/PickBasics:63
-msgid "does not match"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
msgstr "neodpovídá"
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:58
-msgid "doesn't contain"
-msgstr "neobsahuje"
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "stáhnout"
-#: html/Elements/SelectEqualityOperator:61
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "je rovno"
-#: html/Search/Build.html:553
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "chyba: nelze přesunout dolů"
-#: html/Search/Build.html:575
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "chyba: nelze přesunout doleva"
-#: html/Search/Build.html:534
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "chyba: nelze přesunout nahorů"
-#: html/Search/Build.html:618
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "chyba: není co smazat"
-#: html/Search/Build.html:539 html/Search/Build.html:558 html/Search/Build.html:580 html/Search/Build.html:609
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "chyba: není co přesunout"
-#: html/Search/Build.html:636
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "chyba: není co přepnout"
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr "plugin byl úspěšně spuštěn"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "větší než"
-#: lib/RT/Group_Overlay.pm:216
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "skupina '%1'"
-#: html/Search/Results.html:90
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr "seskupit podle %1"
-
-#: lib/RT/Date.pm:344
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "hodin"
-#: html/Search/Elements/PickBasics:50
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "Identifikátor"
-#: html/Elements/SelectBoolean:55 html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:59 html/Search/Elements/PickBasics:164 html/Search/Elements/PickBasics:76 html/Search/Elements/PickBasics:92 html/Search/Elements/PickCFs:55
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "je"
-#: html/Elements/SelectBoolean:59 html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:60 html/Search/Elements/PickBasics:165 html/Search/Elements/PickBasics:77 html/Search/Elements/PickBasics:93 html/Search/Elements/PickCFs:56
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "není"
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "klÃ­Ä zakázán"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "klÃ­Ä vyprÅ¡el"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "klÃ­Ä odebrán"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "zleva doprava"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "menší než"
-#: html/Search/Elements/PickBasics:62
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "odpovídá"
-#: lib/RT/Date.pm:340
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "maximální hloubka"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min"
-#: html/Tools/MyDay.html:65
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minut"
-#: lib/RT/Date.pm:356
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "měsíců"
-#: lib/RT/Queue_Overlay.pm:84
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "nový"
-#: html/Admin/Elements/PickCustomFields:66 html/Admin/Elements/PickObjects:67
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "ne"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "bez jména"
-#: html/Admin/Elements/EditScrips:66
-msgid "no value"
-msgstr "bez hodnoty"
-
-#: html/Admin/Elements/EditQueueWatchers:50 html/Ticket/Elements/EditWatchers:51
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "žádný"
-#: html/Elements/SelectEqualityOperator:61
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "není rovno"
-#: html/SelfService/Elements/MyRequests:78 lib/RT/Queue_Overlay.pm:85
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "objekty byly úspěšně odstraněny"
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "dne"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "otevřený"
-#: lib/RT/Group_Overlay.pm:221
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "otevření/zavření"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "další..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "vlastní skupina '%1' pro uživatele '%2'"
-#: lib/RT/Group_Overlay.pm:229
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "koláÄový"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "plugin vrátil prázdný seznam"
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "fronta %1 %2"
-#: lib/RT/Queue_Overlay.pm:88
+#: lib/RT/Queue_Overlay.pm:86
msgid "rejected"
msgstr "zamítnutý"
-#: lib/RT/Queue_Overlay.pm:87
+#: lib/RT/Queue_Overlay.pm:85
msgid "resolved"
msgstr "vyřešený"
-#: lib/RT/Date.pm:336
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "zprava doleva"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sek"
-#: lib/RT/System.pm:87
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr "zobrazit záložku Schvalování"
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "zobrazit záložku Správa"
-#: html/Search/Results.html:82
-msgid "spreadsheet"
-msgstr "tabulka"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
-#: lib/RT/Queue_Overlay.pm:86
+#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "odložený"
-#: html/Search/Results.html:91
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr "styl: %1"
-
-#: html/Prefs/MyRT.html:95
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr "poÄet řádků"
-#: lib/RT/Group_Overlay.pm:224
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "systém %1"
-#: lib/RT/Group_Overlay.pm:235
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "systémová skupina '%1'"
-#: html/Elements/Error:66 html/SelfService/Error.html:65
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "volající komponenta neudala důvod"
-#: lib/RT/Group_Overlay.pm:232
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "implicitní adresy, které budou uvedeny v hlaviÄkách From: a Reply-To: emailu s komentářem."
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "implicitní adresy, které budou uvedeny v hlaviÄkách From: a Reply-To: emailu s korespondencí."
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "požadavek #%1 %2"
-#: lib/RT/Group_Overlay.pm:238
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "nepopsaná skupina %1"
-#: lib/RT/Group_Overlay.pm:213
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "uživatel %1"
-#: lib/RT/Date.pm:352
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "týdnů"
-#: lib/RT/Date.pm:360
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "Na kterém portu bude poslouchat váš webový server, např. 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "vÄetnÄ› hlaviÄek"
+
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "roků"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "ano"
+
diff --git a/rt/lib/RT/I18N/da.po b/rt/lib/RT/I18N/da.po
index 4f14ef2..582c7f5 100644
--- a/rt/lib/RT/I18N/da.po
+++ b/rt/lib/RT/I18N/da.po
@@ -1,30 +1,38 @@
msgid ""
msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2007-03-16 13:02+0100\n"
-"Last-Translator: Heidi Senderovitz\n"
-"Language-Team: rt-devel <rt-devel@lists.fsck.com>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-06-12 13:58+0000\n"
+"Last-Translator: Monster <Unknown>\n"
+"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#. ($self->{CurrentSearch}{Object}->Description)
-#: html/Widgets/SavedSearch:70
+#: NOT FOUND IN SOURCE
msgid " %1 deleted."
msgstr " %1 slettet."
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-#: html/Widgets/SavedSearch:47
+#: NOT FOUND IN SOURCE
msgid " %1 renamed to %2."
msgstr " %1 omdøbt til %2."
-#. ($args->{Description})
-#: html/Widgets/SavedSearch:60
+#: NOT FOUND IN SOURCE
msgid " %1 saved."
msgstr " %1 gemt."
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (ingen offentlig nøgle!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
msgstr "#"
@@ -32,80 +40,95 @@ msgstr "#"
msgid "#%1"
msgstr "#%1"
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
#. ($TicketObj->Id, $TicketObj->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#: html/Approvals/Elements/Approve:48
-#: html/Approvals/Elements/ShowDependency:71
-#: html/SelfService/Display.html:46
-#: html/Ticket/Display.html:47
-#: html/Ticket/Display.html:51
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:104
+#: NOT FOUND IN SOURCE
msgid "$1"
msgstr "$1"
-#. ($label)
-#: lib/RT/Record.pm:940
+#: NOT FOUND IN SOURCE
msgid "$prefix %1"
msgstr "$præfiks %1"
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
-#: lib/RT/URI/fsck_com_rt.pm:256
msgid "%1 #%2"
msgstr "%1 #%2"
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
-#: lib/RT/Date.pm:365
msgid "%1 %2"
msgstr "%1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
-#: lib/RT/Date.pm:401
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr "%1 %2 %3 %4:%5 %6"
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%2 %1 %3 %4:%5:%6 %7"
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
-#: lib/RT/Record.pm:1685
-#: lib/RT/Transaction_Overlay.pm:647
-#: lib/RT/Transaction_Overlay.pm:690
msgid "%1 %2 added"
msgstr "%1 %2 tilføjet"
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
-#: lib/RT/Date.pm:362
msgid "%1 %2 ago"
msgstr "%1 %2 siden"
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
-#: lib/RT/Record.pm:1692
-#: lib/RT/Transaction_Overlay.pm:654
msgid "%1 %2 changed to %3"
msgstr "%1 %2 ændret til %3"
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
-#: lib/RT/Record.pm:1689
-#: lib/RT/Transaction_Overlay.pm:650
-#: lib/RT/Transaction_Overlay.pm:696
msgid "%1 %2 deleted"
msgstr "%1 %2 slettet"
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 slettet."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 omnavngivet til %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 gemt."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
-#: html/Admin/Elements/EditScrips:65
-#: html/Admin/Elements/ListGlobalScrips:63
-#: html/Ticket/Elements/PreviewScrips:103
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 med skabelon %3"
@@ -113,83 +136,104 @@ msgstr "%1 %2 med skabelon %3"
msgid "%1 (%2) %3 this ticket\\n"
msgstr "%1 (%2) %3 denne sag\\n"
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
-#: html/Ticket/Elements/ShowAttachments:72
msgid "%1 (%2) by %3"
msgstr "%1 (%2) af %3"
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
-#. (loc($DefaultStatus))
-#: html/SelfService/Update.html:60
-#: html/Ticket/Elements/EditBasics:108
-#: html/Ticket/Update.html:61
-#: html/Ticket/Update.html:63
-#: html/Tools/MyDay.html:66
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (Uændret)"
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr "%1 (fra rude %2)"
+
#: NOT FOUND IN SOURCE
msgid "%1 - %2 shown"
msgstr "%1 - %2 vist"
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
-#: bin/rt-crontool:237
-#: bin/rt-crontool:244
-#: bin/rt-crontool:250
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr "%1 - Juster LogToScreen konfigurations option"
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - En parameter til afsendelse til %2"
+#: bin/rt-crontool:365
#. ("--verbose")
-#: bin/rt-crontool:262
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Send statusopdateringer til STDOUT"
-#. ("--template-id")
-#: bin/rt-crontool:253
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
msgstr "%1 - Angiv ID på den skabelon, du vil bruge"
-#. ("--transaction")
-#: bin/rt-crontool:256
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
msgstr "%1 - Angiv om du vil bruge enten 'første' eller 'sidste' transaktion"
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Specificer om du ønsker at bruge enten første ('first), sidste ('last') eller alle ('all') transaktioner"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
#. ("--action")
-#: bin/rt-crontool:247
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Angiv det handlingsmodul, du vil bruge"
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Angiv den komma separerede liste af transaktionstyper du ønsker at bruge"
+
+#: bin/rt-crontool:342
#. ("--condition")
-#: bin/rt-crontool:241
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Angiv det betingelsesmodul, du vil bruge"
+#: bin/rt-crontool:335
#. ("--search")
-#: bin/rt-crontool:234
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Angiv det søgemodul, du vil bruge"
-#. ("--transaction-type")
-#: bin/rt-crontool:259
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify the type of a transaction you want to use"
msgstr "%1 - Angiv typen på den transaktion, du vil bruge"
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
-#: html/Elements/Footer:56
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "%1 Instrument panel"
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT %2 Copyright 1996-%3 %4."
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
-#: lib/RT/ScripAction_Overlay.pm:150
msgid "%1 ScripAction loaded"
msgstr "%1 Scrip-handling indlæst"
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
-#: lib/RT/Record.pm:1722
msgid "%1 added as a value for %2"
msgstr "%1 tilføjet som en værdi til %2"
@@ -201,35 +245,59 @@ msgstr "et %1 alias skal tilknyttes et sagsnummer"
msgid "%1 aliases require a TicketId to work on (from %2) %3"
msgstr "et %1 alias skal tilknyttes et sagsnummer (fra %2) %3"
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 eksisterer allerede og indeholder RT's tabeller, men indeholder ikke RT's metadata. 'Initialiser database' trinnet senere i dette forløb can indsætte omtalte metadata i den eksisterende database, hvis dette er en acceptabel løsning, klik da på 'Grundlæggende tilpasning' nedenfor for at fortsætte med at tilpasse RT."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 eksisterer allerede men indeholder ikke RT's tabeller eller metadata. 'Initialiser database' trinnet senere i dette forløb can indsætte omtalte tabekller og metadata i den eksisterende database, hvis dette er en acceptabel løsning, klik da på 'Grundlæggende tilpasning' nedenfor for at fortsætte med at tilpasse RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
-#: lib/RT/Link_Overlay.pm:144
-#: lib/RT/Link_Overlay.pm:151
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 er tilsyneladende et lokalt objekt, men eksisterer ikke i databasen"
-#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 ser ud til at være fuldt initialiseret. Vi behøver ikke at indsætte nogen tabeller eller metadata, men du kan fortsætte med at tilpasse RT ved at klikke 'Grundlæggende tilpasning' nedenfor"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
-#: html/Ticket/Elements/ShowDates:73
-#: lib/RT/Transaction_Overlay.pm:531
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 af %2"
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
-#: lib/RT/Transaction_Overlay.pm:788
-#: lib/RT/Transaction_Overlay.pm:797
-#: lib/RT/Transaction_Overlay.pm:800
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 ændret fra %2 til %3"
-#. ($Description)
-#: html/Search/Build.html:213
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%1 diagram på grundlag af %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "%1 kopi"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 kunne ikke sættes til %2"
@@ -237,22 +305,37 @@ msgstr "%1 kunne ikke sættes til %2"
msgid "%1 couldn't init a transaction (%2)\\n"
msgstr "%1 kunne ikke igangsætte en handling (%2)\\n"
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
-#: lib/RT/Ticket_Overlay.pm:2787
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 kunne ikke sætte status til afsluttet. Der er muligvis inkonsekvens i RT-databasen."
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
-#: lib/RT/Transaction_Overlay.pm:571
msgid "%1 created"
msgstr "%1 oprettet"
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
-#: lib/RT/Transaction_Overlay.pm:576
msgid "%1 deleted"
msgstr "%1 slettet"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "%1 deaktiveret"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 eksisterer ikke."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "%1 aktiveret"
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "Mine %1 højest prioriterede sager"
@@ -264,21 +347,28 @@ msgstr "Mine %1 højest prioriterede sager..."
msgid "%1 highest priority tickets I requested..."
msgstr "De %1 højest prioriterede sager, jeg har rekvireret"
+#: bin/rt-crontool:330
#. ($0)
-#: bin/rt-crontool:229
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 er et værktøj, der arbejder med sager fra et bestemt planlægningsværktøj som f.eks. cron."
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
-#: lib/RT/Queue_Overlay.pm:863
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 er ikke længere en %2 til denne kø."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
msgstr "%1 er ikke længere en %2 til denne sag."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 er ikke længere en værdi til ekstrafelt %2"
@@ -286,13 +376,12 @@ msgstr "%1 er ikke længere en værdi til ekstrafelt %2"
msgid "%1 isn't a valid Queue id."
msgstr "%1 er ikke et lovligt kø-ID."
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
-#: html/Ticket/Elements/ShowTime:47
-#: html/Ticket/Elements/ShowTime:49
msgid "%1 min"
msgstr "%1 min."
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "%1 nyeste sager uden ejer"
@@ -300,29 +389,39 @@ msgstr "%1 nyeste sager uden ejer"
msgid "%1 not shown"
msgstr "%1 ikke vist"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 objekter"
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-#: html/User/Elements/DelegateRights:97
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 rettigheder"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr "%1 site konfiguration"
+
#: NOT FOUND IN SOURCE
msgid "%1 succeeded\\n"
msgstr "%1 lykkedes"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 type ukendt for $MessageId"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 opdatering: %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 type ukendt for %2"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 opdatering: Intet ændret"
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 opdateret"
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
-#: lib/RT/Action/ResolveMembers.pm:63
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 vil løse alle medlemmer af en løst gruppesag."
@@ -330,44 +429,58 @@ msgstr "%1 vil løse alle medlemmer af en løst gruppesag."
msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
msgstr "%1 vil sætte en [lokal] BASE i bero, hvis den er afhængig [eller medlem] af en tilknyttet sag."
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1's %2 objekter"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1's %2's %3 objekter"
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1's instrument paneler"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
#. ($object->Name)
-#: html/Search/Elements/SearchPrivacy:52
-#: html/Search/Elements/SelectSearchObject:55
-#: html/Search/Elements/SelectSearchesForObjects:57
msgid "%1's saved searches"
msgstr "%1's gemte søgninger"
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
-#: lib/RT/Transaction_Overlay.pm:481
msgid "%1: no attachment specified"
msgstr "%1: ingen vedhæftet fil er angivet"
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
-#: html/Ticket/Elements/ShowTransactionAttachments:78
msgid "%1b"
msgstr "%1b"
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
-#: html/Ticket/Elements/ShowTransactionAttachments:75
msgid "%1k"
msgstr "%1k"
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
-#: html/Ticket/Elements/ShowTime:49
msgid "%quant(%1,hour)"
msgstr "%quant(%1,time)"
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
-#: lib/RT/Ticket_Overlay.pm:1142
msgid "'%1' is an invalid value for status"
msgstr "'%1' er ikke en gyldig statusværdi"
@@ -379,57 +492,45 @@ msgstr "'%1' er ikke en anerkendt handling. "
msgid "(Check box to delete scrip)"
msgstr "(Markér for at slette scrip)"
-#: html/Admin/Elements/EditCustomFieldValues:50
-#: html/Admin/Elements/EditQueueWatchers:50
-#: html/Admin/Elements/EditScrips:56
-#: html/Admin/Elements/EditTemplates:57
-#: html/Admin/Groups/Members.html:73
-#: html/Elements/EditLinks:54
-#: html/Ticket/Elements/EditPeople:67
-#: html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Markér for at slette)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Markér for at fravælge besked til de angive modtagere)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Markér for at tilvælge besked til de angivne modtagere)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Indtast sagsnummer eller URL'er, adskilt af mellemrum)"
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
-#: html/Admin/Queues/Modify.html:75
-#: html/Admin/Queues/Modify.html:81
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Hvis intet angives, vil det som standard være %1)"
-#: html/Admin/Elements/EditCustomFields:74
-#: html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Ingen ekstrafelter)"
-#: html/Admin/Groups/Members.html:71
-#: html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Ingen medlemmer)"
-#: html/Admin/Elements/EditScrips:53
-#: html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Ingen scrips)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Ingen skabeloner)"
-#: html/Admin/Elements/PickCustomFields:47
-#: html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Ingen)"
@@ -441,7 +542,7 @@ msgstr "(Sender en blind kopi af denne opdatering til en kommasepareret liste af
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Sender en blind kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer <b>ikke</b>, hvem der vil modtage fremtidige opdateringer)."
-#: html/Ticket/Update.html:90
+#: NOT FOUND IN SOURCE
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Sender en blind kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer <strong>ikke</strong> hvem der vil modtage fremtidige opdateringer)."
@@ -449,7 +550,7 @@ msgstr "(Sender en blind kopi af denne opdatering til en kommasepareret liste af
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af administrative e-mail-adresser. Disse personer <b>vil</b> modtage fremtidige opdateringer)."
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af administrative e-mail-adresser. Disse personer <strong>vil</strong> modtage fremtidige opdateringer)."
@@ -461,7 +562,7 @@ msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mai
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer <b>IKKE</b>, hvem der vil modtage fremtidige opdateringer)."
-#: html/Ticket/Update.html:86
+#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer <strong>ikke</strong> hvem der vil modtage fremtidige opdateringer)."
@@ -469,56 +570,60 @@ msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mai
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Disse personer <b>vil</b> modtage fremtidige opdateringer)."
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Disse personer <strong>vil</strong> modtage fremtidige opdateringer)."
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Brug disse felter, når du vælger 'brugerdefineret' som betingelse eller handling)"
-#: html/Ticket/Elements/EditWatchers:60
-#: html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr "(E-mail vil ikke blive sendt)"
-#: html/Admin/Groups/index.html:57
-#: html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(vilkårlig)"
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(tom)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(intet navn angivet)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(ingen offentlig nøgle!)"
+
#: NOT FOUND IN SOURCE
msgid "(no subject)"
msgstr "(intet emne)"
-#: html/Admin/Elements/SelectRights:72
-#: html/Elements/EditCustomFieldSelect:69
-#: html/Elements/SelectCustomFieldValue:51
-#: html/Elements/ShowCustomFields:54
-#: html/Search/Chart:56
-#: html/Search/Elements/Chart:76
-#: lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(ingen værdi)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(ingen værdier)"
-#: html/Elements/EditLinks:132
-#: html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(kun én sag)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "afventer %quant(%1,anden sag)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(afventer godkendelse)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(afventer anden gruppe)"
@@ -526,26 +631,43 @@ msgstr "(afventer anden gruppe)"
msgid "(pending other tickets)"
msgstr "(afventer andre sager)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(obligatorisk)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "troværdig: %1"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(uden titel)"
-#: html/Ticket/Elements/Reminders:133
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(uden troværdighed!)"
+
+#: NOT FOUND IN SOURCE
msgid "(yyyy/mm/dd)"
msgstr "(åååå/mm/dd)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr "-"
-#: bin/rt-crontool:95
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "--transaction argument could be only 'first' or 'last'"
msgstr "--transaktionsparameter kan kun være 'først' eller 'sidst'"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "argumentet --transaction skal være 'first', 'last' eller 'all'"
+
#: NOT FOUND IN SOURCE
msgid "25 highest priority tickets I own..."
msgstr "Mine 25 højest prioriterede sager..."
@@ -554,51 +676,53 @@ msgstr "Mine 25 højest prioriterede sager..."
msgid "25 highest priority tickets I requested..."
msgstr "De 25 højest prioriterede sager, jeg rekvirerede..."
-#: html/Ticket/Elements/ShowBasics:53
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Ticket->Status%>"
-#: html/Elements/SelectTicketTypes:48
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:48
+#: NOT FOUND IN SOURCE
msgid "<%$_%>"
msgstr "<%$_%>"
-#: html/Search/Elements/DisplayOptions:73
+#: NOT FOUND IN SOURCE
msgid "<%$field%>"
msgstr "<%$field%>"
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-#: html/Elements/CreateTicket:47
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"Ny sag kommet\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Ny sag i\" />&nbsp;%1"
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-#: docs/design_docs/string-extraction-guide.txt:54
-#: lib/RT/StyleGuide.pod:787
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"Ny sag kommet\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"Ny sag i\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Alle iCal feeds indholder en hemmelig token med det formål at verificere din identitet. Hvis en af dine iCal feeds' URL er blevet eksponeret for omverdenen kan du få en ny token, <b>med det resultat at alle forudgående iCal feeds ophører med at fungere</b>.</p>"
-#: etc/initialdata:218
+#: etc/initialdata:193
msgid "A blank template"
msgstr "En tom skabelon"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Adgangskode er ikke blevet tildelt, så brugeren kan ikke logge ind."
-#: lib/RT/ACE_Overlay.pm:174
-#: lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE ikke fundet"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE'er kan kun oprettes og slettes."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "OG"
@@ -606,69 +730,76 @@ msgstr "OG"
msgid "Aborting to avoid unintended ticket modifications.\\n"
msgstr "Afbryder for at undgå utilsigtede sagsændringer.\\n"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Om mig"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Adgangskontrol"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Handling"
-#. ($args{'ScripAction'})
-#: lib/RT/Scrip_Overlay.pm:172
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Handling %1 ikke fundet"
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Handling '%1' findes ikke"
+
#: NOT FOUND IN SOURCE
msgid "Action committed."
msgstr "Handling igangsat."
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Handling igangsat.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr "Handlingen er en obligatorisk parameter"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Handling forberedt..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Tilføj"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Tilføj AdminCc"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Tilføj bogmærke"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Tilføj Cc"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Tilføj kolonner"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Tilføj kriterier"
-#: html/Ticket/Create.html:147
-#: html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Tilføj flere filer"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Tilføj rekvirent"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Tilføj værdi"
@@ -680,7 +811,7 @@ msgstr "Tilføj en ny global scrip"
msgid "Add a scrip to this queue"
msgstr "Tilføj en scrip til denne kø"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Tilføj en scrip, som vil gælde for alle køer"
@@ -688,34 +819,39 @@ msgstr "Tilføj en scrip, som vil gælde for alle køer"
msgid "Add additional criteria"
msgstr "Tilføj yderligere kriterier"
-#: html/Search/Build.html:109
-#: html/Search/Build.html:94
+#: NOT FOUND IN SOURCE
msgid "Add and Search"
msgstr "Tilføj og søg"
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Tilføj kommentarer til eller svar på de udvalgte sager"
-#: html/Admin/Groups/Members.html:63
-#: html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Tilføj medlemmer"
-#: html/Admin/Queues/People.html:87
-#: html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Tilføj nye observatører"
-#: html/Search/Build.html:85
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Tilføj disse kriterier"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Tilføj disse kriterier og søg"
+
+#: NOT FOUND IN SOURCE
msgid "Add these terms to your search"
msgstr "Tilføj disse ord til din søgning"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "Tilføj værdier"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Tilføj, slet og rediger ekstrafeltværdier for objekter"
@@ -723,40 +859,41 @@ msgstr "Tilføj, slet og rediger ekstrafeltværdier for objekter"
msgid "AddNextState"
msgstr "TilføjNæsteStatus"
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:763
msgid "Added principal as a %1 for this queue"
msgstr "Tilføjede principal som %1 for denne kø"
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1455
msgid "Added principal as a %1 for this ticket"
msgstr "Tilføjede principal som %1 for denne sag"
-#: html/Admin/Users/Modify.html:146
-#: html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Adresse"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adresse1"
-#: html/Admin/Users/Modify.html:151
-#: html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adresse2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Admin kommentar"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Admin korrespondance"
-#: html/Admin/Queues/index.html:46
-#: html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Admin køer"
@@ -764,8 +901,7 @@ msgstr "Admin køer"
msgid "Admin users"
msgstr "Admin brugere"
-#: html/Admin/Global/index.html:47
-#: html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Amin/Global konfiguration"
@@ -777,16 +913,22 @@ msgstr "Admin/Grupper"
msgid "Admin/Queue/Basics"
msgstr "Admin/Køer/Stamdata"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "AdminAllPersonalGroups"
msgstr "AdminAllePersonligeGrupper"
-#: etc/initialdata:56
-#: html/Ticket/Elements/ShowPeople:60
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "AdminCCGruppe"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCc'er"
+
#: NOT FOUND IN SOURCE
msgid "AdminComment"
msgstr "AdminKommentar"
@@ -795,7 +937,7 @@ msgstr "AdminKommentar"
msgid "AdminCorrespondence"
msgstr "AdminKorrespondance"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "AdminEkstrafelt"
@@ -803,15 +945,15 @@ msgstr "AdminEkstrafelt"
msgid "AdminCustomFields"
msgstr "AdminEkstrafelter"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "AdminGruppe"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "AdminGruppeMedlemskab"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "AdminEgnePersonligeGrupper"
@@ -819,16 +961,19 @@ msgstr "AdminEgnePersonligeGrupper"
msgid "AdminQueue"
msgstr "AdminKø"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "AdminBrugere"
-#: html/Admin/Queues/People.html:69
-#: html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Administrativ Cc"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Administrativt password"
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Avanceret"
@@ -836,19 +981,15 @@ msgstr "Avanceret"
msgid "Advanced Search"
msgstr "Avanceret søgning"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Efter"
-
#: NOT FOUND IN SOURCE
msgid "Age"
msgstr "Alder"
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Aggregator"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Alle godkendelser accepteret"
@@ -856,51 +997,52 @@ msgstr "Alle godkendelser accepteret"
msgid "All Custom Fields"
msgstr "Alle ekstrafelter"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Alle køer"
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Allerede krypteret"
+
#: NOT FOUND IN SOURCE
msgid "Always sends a message to the requestors independent of message sender"
msgstr "Sender altid en besked til rekvirenten uafhængigt af beskedens afsender"
-#: html/Search/Elements/EditQuery:56
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "Og/eller"
-#: html/Admin/CustomFields/Modify.html:73
-#: html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "Gælder for"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Anvend"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Anvend dine ændringer"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Godkendelse"
-#. ($ticket->id, $msg)
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#: html/Approvals/Display.html:65
-#: html/Approvals/Elements/ShowDependency:63
-#: html/Approvals/index.html:86
msgid "Approval #%1: %2"
msgstr "Godkendelse #%1: %2"
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
-#: html/Approvals/index.html:75
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Godkendelse #%1: Noter ikke gemt på grund af en systemfejl"
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
-#: html/Approvals/index.html:73
msgid "Approval #%1: Notes recorded"
msgstr "Godkendelse #%1: Noter blev gemt"
@@ -908,11 +1050,15 @@ msgstr "Godkendelse #%1: Noter blev gemt"
msgid "Approval Details"
msgstr "Godkendelsesdetaljer"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Godkendelse accepteret"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Godkendelse Klar til Ejer"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Godkendelse afvist"
@@ -920,88 +1066,104 @@ msgstr "Godkendelse afvist"
msgid "Approval diagram"
msgstr "Godkendelsesdiagram"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Godkend"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Godkenderens noter: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Apr"
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Apr."
-#: html/Search/Elements/DisplayOptions:81
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "April"
+
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr "Stigende"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Stigende"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Tilknyt og slet ekstrafelter"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "TilknytEkstrafelter"
-#: html/Search/Bulk.html:142
-#: html/SelfService/Update.html:87
-#: html/Ticket/ModifyAll.html:115
-#: html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Vedhæft"
-#: html/SelfService/Create.html:92
-#: html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Vedhæft fil"
-#: html/SelfService/Update.html:75
-#: html/Ticket/Create.html:131
-#: html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Vedhæftet fil"
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Vedhæftet fil"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
-#: html/Ticket/ShowEmailRecord.html:52
-#: html/Ticket/ShowEmailRecord.html:56
-#: html/Ticket/ShowEmailRecord.html:59
msgid "Attachment '%1' could not be loaded"
msgstr "Vedhæftede fil '%1' kunne ikke indlæses"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Vedhæftet fil oprettet"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Navn på vedhæftet fil"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Vedhæftede filer"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Kryptering af vedhæftede filer er slået fra"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Egenskab slettet"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Aug"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Aug."
#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "August"
+
+#: NOT FOUND IN SOURCE
msgid "AuthSystem"
msgstr "AuthSystem"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Autosvar"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Autosvar til rekvirenter"
@@ -1009,10 +1171,18 @@ msgstr "Autosvar til rekvirenter"
msgid "AutoreplyToRequestors"
msgstr "AutoSvarTilRekvirenter"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Tilgængelig"
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "BCc"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Tilbage"
+
#: NOT FOUND IN SOURCE
msgid "Bad PGP Signature: %1\\n"
msgstr "Ubrugelig PGP-signatur: %1\\n"
@@ -1025,41 +1195,32 @@ msgstr "Ubrugelig vedhæftnings-ID. Kunne ikke finde vedhæftet fil '%1'\\n"
msgid "Bad data in %1"
msgstr "Ubrugelige data i %1"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Bad transaction number for attachment. %1 should be %2\\n"
-msgstr ""
-"Ubrugeligt transaktionsnummer for vedhæftet fil. %1 skulle være %2\\n"
-"."
-
-#: html/Admin/Elements/CustomFieldTabs:65
-#: html/Admin/Elements/GroupTabs:60
-#: html/Admin/Elements/QueueTabs:60
-#: html/Admin/Elements/UserTabs:58
-#: html/Ticket/Elements/Tabs:113
-#: html/User/Elements/GroupTabs:59
+msgstr "Ubrugeligt transaktionsnummer for vedhæftet fil. %1 skulle være %2\\n."
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Stamdata"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Bcc"
-#: html/Admin/CustomFields/GroupRights.html:91
-#: html/Admin/CustomFields/UserRights.html:74
-#: html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Sørg for at gemme dine ændringer"
-#: html/Elements/SelectDateRelation:55
-#: lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "Før"
-
#: NOT FOUND IN SOURCE
msgid "Begin Approval"
msgstr "PÃ¥begynd godkendelse"
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Best Practical Solutions, LLC firmalogo"
@@ -1067,28 +1228,39 @@ msgstr "Best Practical Solutions, LLC firmalogo"
msgid "Binary"
msgstr "Binær"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Tom"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Brødtekst"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Fed"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Bogmærke"
+
#: NOT FOUND IN SOURCE
msgid "Bookmarkable URL for this search"
msgstr "URL for denne søgning kan bogmærkes"
-#: html/Search/Results.html:79
+#: NOT FOUND IN SOURCE
msgid "Bookmarkable link"
msgstr "Reference kan bogmærkes"
-#: html/Ticket/Elements/ShowHistory:64
-#: html/Ticket/Elements/ShowHistory:69
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Bogmærket Sager"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Korte overskrifter"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Masseopdatering"
@@ -1096,7 +1268,23 @@ msgstr "Masseopdatering"
msgid "Bulk ticket update"
msgstr "Masse-sagsopdatering"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Køb support"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Pr. default bruger RT den samme tidszone som den server RT er installeret på. Dette felt tillader dig at sætte en global værdi for hvordan dato og tid vises i RT. Dine brugere kan vælge en anden tidszone i deres præferencer."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "CcGruppe"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr "BF"
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Kan ikke rette systembrugere"
@@ -1104,20 +1292,20 @@ msgstr "Kan ikke rette systembrugere"
msgid "Can this principal see this queue"
msgstr "Kan denne principal se denne kø"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Kan ikke tilføje ekstrafeltværdier uden navn"
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
-#: html/Admin/CustomFields/Objects.html:86
msgid "Can't find a collection class for '%1'"
msgstr "Kan ikke finde gruppeklasse for '%1'"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Kan ikke finde en gemt søgning at arbejde med"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Kan ikke referere en sag til sig selv"
@@ -1125,85 +1313,113 @@ msgstr "Kan ikke referere en sag til sig selv"
msgid "Can't merge into a merged ticket. You should never get this error"
msgstr "Kan ikke føjes ind i en sammenføjet sag. Denne fejl skulle aldrig opstå."
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
-#: html/Widgets/SavedSearch:63
msgid "Can't save %1"
msgstr "Kan ikke gemme %1"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Kan ikke gemme denne søgning"
-#: lib/RT/Record.pm:1282
-#: lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Kan ikke angive både kilde og destination"
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Kan ikke oprette sager i en nedlagt kø."
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
-#: html/autohandler:204
msgid "Cannot create user: %1"
msgstr "Kan ikke oprette bruger: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62
-#: html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Kategori"
-#: etc/initialdata:50
-#: html/Admin/Queues/People.html:65
-#: html/SelfService/Create.html:71
-#: html/Ticket/Create.html:88
-#: html/Ticket/Elements/EditPeople:72
-#: html/Ticket/Elements/ShowPeople:56
-#: html/Ticket/Update.html:83
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Af-kategoriseret"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Cc'er"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Ændring"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Skift adgangskode"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Vælg alle"
-#: html/SelfService/Update.html:78
-#: html/Ticket/Create.html:134
-#: html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Kontroller database adgang"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr "Kontroller database brugernavn/password"
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Markér for at slette"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Markér for at inddrage rettighed"
-#: html/Elements/EditLinks:148
-#: html/Elements/EditLinks:85
-#: html/Elements/ShowLinks:78
-#: html/Ticket/Create.html:223
-#: html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Børn"
-#: html/NoAuth/js/util.js:201
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr "Vælg database type"
+
+#: NOT FOUND IN SOURCE
msgid "Choose a date"
msgstr "Vælg en dato"
-#: html/Admin/Users/Modify.html:156
-#: html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "By"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Ryd"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Fravælg alle"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Tryk \"Afslut installation\" nedenfor for at afslutte guiden"
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Klik på \"Initialiser Database\" for at oprette RT's database og indsætte oprindelige metadata. Dette kan tage et øjeblik"
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Luk vindue"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Lukket"
@@ -1215,20 +1431,19 @@ msgstr "Lukkede sager"
msgid "Closed requests"
msgstr "Lukkede sager"
-#: html/SelfService/Closed.html:46
-#: html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Lukkede sager"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Combobox: Vælg eller indtast flere værdier"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Combobox: Vælg eller indtast en værdi"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Combobox: Vælg eller indtast op til %1 værdier"
@@ -1236,37 +1451,43 @@ msgstr "Combobox: Vælg eller indtast op til %1 værdier"
msgid "Command not understood!\\n"
msgstr "Kommando ikke forstået!\\n"
-#: html/Ticket/Elements/ShowTransaction:190
-#: html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Kommentar"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Kommentar - adresse"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Kommentar adresse"
+
#: NOT FOUND IN SOURCE
msgid "Comment not recorded"
msgstr "Kommentar ikke gemt"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Kommentar på sager"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "KommentarAdresse"
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "KommentarPÃ¥Sag"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Kommentarer"
-#: html/Ticket/ModifyAll.html:91
-#: html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Kommentarer (ikke sendt til rekvirenter)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Kommentarer (ikke sendt til rekvirenter)"
@@ -1274,16 +1495,15 @@ msgstr "Kommentarer (ikke sendt til rekvirenter)"
msgid "Comments about %1"
msgstr "Kommentarer om %1"
-#: html/Admin/Users/Modify.html:225
-#: html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Kommentarer om denne bruger"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Kommentarer tilføjet"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Commit tømt"
@@ -1291,30 +1511,48 @@ msgstr "Commit tømt"
msgid "Compile Restrictions"
msgstr "Kompilere afgrænsninger"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Betingelse"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Betingelse '%1' ikke fundet"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr "Betingelsen er en obligatorisk parameter"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Betingelser stemmer overens..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Betingelse ikke fundet"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Konfigurationsfil %1 er låst"
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Konfiguration"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Bekræft"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Forbindelse Lykkedes"
+
#: NOT FOUND IN SOURCE
msgid "ContactInfoSystem"
msgstr "KontaktInfoSystem"
@@ -1323,21 +1561,31 @@ msgstr "KontaktInfoSystem"
msgid "Contacted date '%1' could not be parsed"
msgstr "Dato kontaktet '%1' kunne ikke fortolkes"
-#: html/Admin/Elements/ModifyTemplate:65
-#: html/Elements/SelectAttachmentField:48
-#: html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Indhold"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Indhold-Type"
-#: html/Search/Elements/EditSearches:65
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "IndholdsType"
+
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Kopi"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Korrespondance"
@@ -1345,7 +1593,7 @@ msgstr "Korrespondance"
msgid "Correspondence Address"
msgstr "Korrespondanceadresse"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Korrespondance tilføjet"
@@ -1355,58 +1603,61 @@ msgstr "Korrespondance ikke gemt"
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. "
-msgstr "Kunne ikke tilføje ny ekstrafeltværdi til sag."
+msgstr "Kunne ikke tilføje ny ekstrafeltværdi til sag. "
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
-msgstr "Kunne ikke tilføje ny ekstrafeltværdi."
+msgstr "Kunne ikke tilføje ny ekstrafeltværdi. "
-#. (, $value_msg)
-#: lib/RT/Record.pm:1660
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
-msgstr "Kunne ikke tilføje ny ekstrafeltværdi. %1"
+msgstr "Kunne ikke tilføje ny ekstrafeltværdi. %1 "
-#: lib/RT/Ticket_Overlay.pm:3048
-#: lib/RT/Ticket_Overlay.pm:3056
-#: lib/RT/Ticket_Overlay.pm:3073
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "Kunne ikke tilføje følgende ny værdi til brugerdefineret felt: %1"
+
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
-msgstr "Kunne ikke at skifte ejer."
+msgstr "Kunne ikke at skifte ejer. "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Kunne ikke ændre ejer: %1"
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
-#: html/Admin/CustomFields/Modify.html:161
msgid "Could not create CustomField"
msgstr "Kunne ikke oprette ekstrafelt"
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
-#: html/Admin/Elements/EditCustomField:113
msgid "Could not create CustomField: %1"
msgstr "Kunne ikke oprette ekstrafelt: %1"
-#: html/User/Groups/Modify.html:98
-#: lib/RT/Group_Overlay.pm:494
-#: lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Kunne ikke oprette gruppe"
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
-#: html/Admin/Global/Template.html:96
-#: html/Admin/Queues/Template.html:93
msgid "Could not create template: %1"
msgstr "Kunne ikke oprette skabelon: %1"
-#: lib/RT/Ticket_Overlay.pm:1075
-#: lib/RT/Ticket_Overlay.pm:407
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Kunne ikke oprette sag i nedlagt kø \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Kunne ikke at oprette sag. Kø ikke sat."
-#: lib/RT/User_Overlay.pm:255
-#: lib/RT/User_Overlay.pm:269
-#: lib/RT/User_Overlay.pm:278
-#: lib/RT/User_Overlay.pm:287
-#: lib/RT/User_Overlay.pm:296
-#: lib/RT/User_Overlay.pm:310
-#: lib/RT/User_Overlay.pm:320
-#: lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Kunne ikke oprette bruger"
@@ -1418,13 +1669,11 @@ msgstr "Kunne ikke finde sag med ID %1"
msgid "Could not find group %1."
msgstr "Kunne ikke finde gruppe %1."
-#: lib/RT/Queue_Overlay.pm:741
-#: lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Kunne ikke finde eller oprette den bruger"
-#: lib/RT/Queue_Overlay.pm:802
-#: lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Kunne ikke finde den principal"
@@ -1432,62 +1681,75 @@ msgstr "Kunne ikke finde den principal"
msgid "Could not find user %1."
msgstr "Kunne ikke finde bruger %1."
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Kunne ikke indlæse %1 attribut"
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Kunne ikke indlæse ekstrafelt %1"
-#: html/Admin/Groups/Members.html:112
-#: html/User/Groups/Members.html:111
-#: html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Kunne ikke indlæse gruppe"
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
-#: lib/RT/SavedSearch.pm:119
msgid "Could not load object for %1"
msgstr "Kunne ikke indlæse objekt til %1"
-#: lib/RT/SavedSearch.pm:197
+#: NOT FOUND IN SOURCE
msgid "Could not load search attribute"
msgstr "Kunne ikke indlæse søgeegenskab"
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:761
msgid "Could not make that principal a %1 for this queue"
msgstr "Kunne ikke gøre den principal til %1 for denne kø"
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1444
msgid "Could not make that principal a %1 for this ticket"
msgstr "Kunne ikke gøre den prinicipal til %1 for denne sag"
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:860
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Kunne ikke slette den principal som %1 for denne kø"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
msgstr "Kunne ikke slette den principal som %1 for denne sag"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Kunne ikke angive brugerinfo"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr "Kunne ikke tilføje fil"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Kunne ikke tilføje medlem til gruppe"
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
-#: lib/RT/Record.pm:1719
-#: lib/RT/Record.pm:1771
msgid "Couldn't create a transaction: %1"
msgstr "Kunne ikke oprette en transaktion: %1"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Kunne ikke slette instrument panel %1: %2"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't figure out what to do from gpg's reply\\n"
msgstr "Kunne ikke afgøre, hvad der skulle foretages ud fra GPG's svar\\n"
@@ -1496,15 +1758,19 @@ msgstr "Kunne ikke afgøre, hvad der skulle foretages ud fra GPG's svar\\n"
msgid "Couldn't find group\\n"
msgstr "Kunne ikke finde gruppe\\n"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Kunne ikke finde række"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Kunne ikke finde passende transaktion, springer over"
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Kunne ikke finde den principal"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Kunne ikke finde den værdi"
@@ -1512,18 +1778,23 @@ msgstr "Kunne ikke finde den værdi"
msgid "Couldn't find user\\n"
msgstr "Kunne ikke finde bruger\\n"
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
-#: lib/RT/CurrentUser.pm:145
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Kunne ikke indlæse %1 fra brugerdatabase.\\n"
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
-#: html/Admin/CustomFields/UserRights.html:149
msgid "Couldn't load Class %1"
msgstr "Kunne ikke indlæse klasse %1"
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Kunne ikke indlæse Custom Field #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
-#: html/Admin/CustomFields/GroupRights.html:107
msgid "Couldn't load CustomField %1"
msgstr "Kunne ikke indlæse ekstrafelt %1"
@@ -1535,48 +1806,71 @@ msgstr "Kunne ikke indlæse RT-konfigurationsfil '%1' %2"
msgid "Couldn't load Scrips."
msgstr "Kunne ikke indlæse scrips."
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
-#: lib/RT/Ticket_Overlay.pm:2016
msgid "Couldn't load copy of ticket #%1."
msgstr "Kunne ikke indlæse kopi af sag #%1."
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Kunne ikke indlæse instrument panel %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Kunne ikke indlæse instrument panel %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Kunne ikke indlæse gruppe #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
-#: html/Admin/Groups/GroupRights.html:109
-#: html/Admin/Groups/UserRights.html:96
msgid "Couldn't load group %1"
msgstr "Kunne ikke indlæse gruppe %1"
-#: lib/RT/Link_Overlay.pm:202
-#: lib/RT/Link_Overlay.pm:211
-#: lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Kunne ikke indlæse reference"
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
-#: html/Admin/Elements/ObjectCustomFields:83
-#: html/Admin/Queues/CustomFields.html:59
-#: html/Admin/Users/CustomFields.html:59
msgid "Couldn't load object %1"
msgstr "Kunne ikke indlæse objekt %1"
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Kunne ikke indlæse eller oprette bruger: %1"
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
-#: html/Admin/Queues/People.html:142
msgid "Couldn't load queue"
msgstr "Kunne ikke indlæse kø"
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Kunne ikke indlæse kø #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
-#: html/Admin/Queues/GroupRights.html:122
-#: html/Admin/Queues/UserRights.html:93
msgid "Couldn't load queue %1"
msgstr "Kunne ikke indlæse kø %1"
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Kunne ikke indlæse kø '%1'"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load scrip"
msgstr "Kunne ikke indlæse scrip"
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
-#: html/Admin/Elements/EditScrip:126
-#: html/Admin/Elements/EditScrip:167
msgid "Couldn't load scrip #%1"
msgstr "Kunne ikke indlæse scrip #%1"
@@ -1584,47 +1878,110 @@ msgstr "Kunne ikke indlæse scrip #%1"
msgid "Couldn't load template"
msgstr "Kunne ikke indlæse skabelon"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Kunne ikke indlæse skabelon #%1"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load that user (%1)"
msgstr "Kunne ikke indlæse den bruger (%1)"
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
-#: html/SelfService/Display.html:158
-#: lib/RT/Action/CreateTickets.pm:680
msgid "Couldn't load ticket '%1'"
msgstr "Kunne ikke indlæse sag '%1'"
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "Kunne ikke indlæse transaktion #%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Kunne ikke indlæse bruger #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Kunne ikke fortolke adresse fra strengen '%1'"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Kunne ikke erstatte indhold med dekrypteret data: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Kunne ikke erstatte indhold med krypteret data: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
-#: lib/RT/Ticket_Overlay.pm:2643
msgid "Couldn't resolve '%1' into a URI."
msgstr "Kunne ikke konvertere '%1' til en URL."
-#: html/Admin/Users/Modify.html:173
-#: html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Kunne ikke sende email"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "Kunne ikke sætte %1 observatør: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "kunne ikke sætte privat nøgle"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Kunne ikke nulstille private nøgle"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Land"
-#: html/Admin/Elements/CreateUserCalled:47
-#: html/Admin/Elements/EditCustomField:84
-#: html/Admin/Elements/EditScrip:133
-#: html/Admin/Queues/Template.html:66
-#: html/Elements/QuickCreate:65
-#: html/Ticket/Create.html:168
-#: html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Opret"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Opret sager"
-#: html/Admin/CustomFields/Modify.html:150
-#: html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Opret et ekstrafelt"
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
-#: html/Admin/Queues/CustomField.html:69
msgid "Create a CustomField for queue %1"
msgstr "Opret et ekstrafelt til kø %1"
@@ -1636,17 +1993,19 @@ msgstr "Opret et ekstrafelt, der gælder for alle køer"
msgid "Create a new Custom Field"
msgstr "Opret et nyt ekstrafelt"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Opret nyt instrument panel"
+
#: NOT FOUND IN SOURCE
msgid "Create a new global scrip"
msgstr "Opret en ny global scrip"
-#: html/Admin/Groups/Modify.html:125
-#: html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Opret en ny gruppe"
-#: html/User/Groups/Modify.html:113
-#: html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Opret en ny personlig gruppe"
@@ -1662,18 +2021,15 @@ msgstr "Opret en ny scrip"
msgid "Create a new template"
msgstr "Opret en ny skabelon"
-#: html/Ticket/Create.html:47
-#: html/Ticket/Create.html:51
-#: html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Opret en ny sag"
-#: html/Admin/Users/Modify.html:252
-#: html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Opret en ny bruger"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Opret en ny kø"
@@ -1685,34 +2041,48 @@ msgstr "Opret en kø med ved navn"
msgid "Create a request"
msgstr "Opret en sag"
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrip.html:89
msgid "Create a scrip for queue %1"
msgstr "Opret en scrip for kø %1"
-#: html/Admin/Global/Template.html:90
-#: html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Opret en skabelon"
-#: html/SelfService/Create.html:46
-#: html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Opret en sag"
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Opret instrument panel til denne gruppe"
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Opret en ny sag baseret på denne scrips skabelon"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Opret personligt instrument panel"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Opret system instrument panel"
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Opret sag"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Opret sager i denne kø"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Opret sager offline"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Opret, slet og rediger ekstrafelter"
@@ -1720,39 +2090,53 @@ msgstr "Opret, slet og rediger ekstrafelter"
msgid "Create, delete and modify queues"
msgstr "Opret, slet og rediger køer"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "Create, delete and modify the members of any user's personal groups"
msgstr "Opret, slet og rediger medlemmerne af hvilken som helst brugers personlige grupper"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Opret, slet og rediger medlemmernes personlige grupper"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Opret, slet og rediger brugere"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "OpretInstrumentPanel"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "OpretGruppeInstrumentPanel"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "OpretEgetInstrumentPanel"
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr "OpretGemtSøgning"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "OpretSag"
-#: html/Elements/SelectDateType:47
-#: html/Ticket/Elements/ShowDates:48
-#: lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Oprettet"
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Oprettet af"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
-#: html/Admin/CustomFields/Modify.html:163
-#: html/Admin/Elements/EditCustomField:117
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Ekstrafelt %1 oprettet"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr "Oprettet i et datointerval"
@@ -1760,32 +2144,43 @@ msgstr "Oprettet i et datointerval"
msgid "Created template %1"
msgstr "Skabelon %1 oprettet"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Sager oprettet i en periode, fordelt pr. status"
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "OprettetAf"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr "OprettetRelativt"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Opretter"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Kryptografi"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Aktuelle referencer"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Aktuelle scrips"
-#: html/Admin/Groups/Members.html:60
-#: html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Aktuelle medlemmer"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Aktuelle rettigheder"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Aktiv søgning"
@@ -1793,8 +2188,7 @@ msgstr "Aktiv søgning"
msgid "Current search criteria"
msgstr "Aktuelle søgekriterier"
-#: html/Admin/Queues/People.html:62
-#: html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Aktuelle observatører"
@@ -1802,56 +2196,55 @@ msgstr "Aktuelle observatører"
msgid "Custom Field #%1"
msgstr "Ekstrafelt #%1"
-#: html/Admin/Elements/SystemTabs:61
-#: html/Admin/Elements/Tabs:62
-#: html/Admin/Global/index.html:71
-#: html/Admin/Users/Modify.html:205
-#: html/Admin/index.html:77
-#: html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Ekstrafelter"
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
-#: html/Admin/CustomFields/index.html:60
msgid "Custom Fields for %1"
msgstr "Ekstrafelter for %1"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Oprydningskode for specialtilpasset handling"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Ekstrahandling til forberedelseskode"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Ekstra betingelse"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Ekstrafelt %1 %2 %3"
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "Brugerdefineret felt %1 er ikke gyldigt for dette element"
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
-#: lib/RT/Tickets_Overlay.pm:2424
msgid "Custom field %1 has a value."
msgstr "Ekstrafelt %1 har en værdi."
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
-#: lib/RT/Tickets_Overlay.pm:2420
msgid "Custom field %1 has no value."
msgstr "Ekstrafelt %1 har ingen værdi."
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
-#: lib/RT/Record.pm:1592
-#: lib/RT/Record.pm:1754
msgid "Custom field %1 not found"
msgstr "Ekstrafelt %1 ikke fundet"
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
-#: lib/RT/Report/Tickets.pm:118
-#: lib/RT/Report/Tickets.pm:121
msgid "Custom field '%1'"
msgstr "Ekstrafelt '%1'"
@@ -1863,8 +2256,8 @@ msgstr "Ekstrafelt slettet"
msgid "Custom field not found"
msgstr "Ekstrafelt ikke fundet"
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
-#: lib/RT/CustomField_Overlay.pm:1157
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Ekstrafeltværdi %1 kunne ikke findes til ekstrafelt %2"
@@ -1872,130 +2265,274 @@ msgstr "Ekstrafeltværdi %1 kunne ikke findes til ekstrafelt %2"
msgid "Custom field value changed from %1 to %2"
msgstr "Ekstrafeltværdi ændret fra %1 til %2"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Ekstrafeltværdi kunne ikke slettes"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Ekstrafeltværdi kunne ikke findes"
-#: lib/RT/CustomField_Overlay.pm:1171
-#: lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Ekstrafeltværdi slettet"
-#: html/Elements/SelectGroups:51
-#: html/Elements/SelectUsers:51
-#: lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "Ekstrafelt"
-#: html/Prefs/MyRT.html:78
-#: html/Prefs/Quicksearch.html:70
-#: html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "BrugerdefineretFeltVærdi"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "Tilpas"
-#: html/SelfService/Display.html:61
-#: html/Ticket/Create.html:203
-#: html/Ticket/Elements/ShowSummary:83
-#: html/Ticket/Elements/Tabs:116
-#: html/Ticket/ModifyAll.html:65
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Grundlæggende tilpasning"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Tilpas Email Adresser"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Tilpas Email Konfiguration"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "DBa kodeord"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "DBA brugernavn"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Instrument panel"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Instrument panel kunne ikke oprettes: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Instrument panel kunne ikke opdateres: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Instrument panel opdateret"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Instrument paneler"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Database vært"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Database navn"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "RT's database password"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Database port"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Database type"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "RT's database brugernavn"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Dato format"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr "Modulet DateTime mangler"
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr "Modulet DateTime::Locale mangler"
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Datoer"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Dec"
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Dec."
#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "December"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Dekrypter"
+
+#: NOT FOUND IN SOURCE
msgid "Default Autoresponse Template"
msgstr "Standard Autosvarskabelon"
-#: etc/initialdata:222
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Standard Autosvarskabelon"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Standard kø"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Standard rekvirent"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Standard administrator kommentarskabelon"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Standard administrator korrespondanceskabelon"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Standard korrespondanceskabelon"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Standard kø"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Standard transaktionsskabelon"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Standard: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Standard: %1/%2 ændret fra %3 til %4"
-#: html/User/Delegation.html:46
-#: html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr "StandardForfaldenOm"
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr "StandardFormat"
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Overdrag rettigheder"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Overdrag specifikke rettigheder, som er blevet tildelt til dig."
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "OverdragRettigheder"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Overdragelse"
-#: html/Admin/Elements/EditScrips:75
-#: html/Search/Elements/EditFormat:103
-#: html/Search/Elements/EditQuery:57
-#: html/Search/Elements/EditSearches:63
-#: html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Slet"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Slet skabelon"
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Slet instrument paneler for denne gruppe"
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
-#: lib/RT/SavedSearch.pm:220
msgid "Delete failed: %1"
msgstr "Sletning mislykkedes: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Slet personlige instrument paneler"
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Slet valgte scrips"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Slet system instrument paneler"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Slet sager"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr "Slet værdier"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "SletDashboard"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "SletGruppeDashboard"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "SletejetDashboard"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "SletSag"
-#: lib/RT/SavedSearch.pm:218
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "Slettet %1"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Slettede instrument panel %1"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr "Slettet Forespørgelser"
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Slettet gemt søgning"
+
+#: NOT FOUND IN SOURCE
msgid "Deleted search"
msgstr "Søgning slettet"
@@ -2003,84 +2540,75 @@ msgstr "Søgning slettet"
msgid "Deleting this object could break referential integrity"
msgstr "Sletning af dette objekt kan ødelægge referentiel integritet"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Sletning af dette objekt vil ødelægge referentiel integritet"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Sletning af dette objekt vil stride mod referentiel integritet"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Afvis"
-#: html/Elements/EditLinks:140
-#: html/Elements/EditLinks:66
-#: html/Elements/ShowLinks:58
-#: html/Ticket/Create.html:221
-#: html/Ticket/Elements/BulkLinks:56
-#: html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "Afhængighed til"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr "Afhængighedsforhold til"
+
#: NOT FOUND IN SOURCE
msgid "Dependencies: \\n"
msgstr "Afhængigheder: \\n"
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:718
msgid "Dependency by %1 added"
msgstr "Afhængighed til %1 tilføjet"
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:758
msgid "Dependency by %1 deleted"
msgstr "Afhængighed til %1 slettet"
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:715
msgid "Dependency on %1 added"
msgstr "Afhængighed af %1 tilføjet"
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:755
msgid "Dependency on %1 deleted"
msgstr "Afhængighed af %1 slettet"
-#: html/Elements/EditLinks:136
-#: html/Elements/EditLinks:57
-#: html/Elements/SelectLinkType:48
-#: html/Elements/ShowLinks:48
-#: html/Ticket/Create.html:220
-#: html/Ticket/Elements/BulkLinks:52
-#: html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr "AfhængigAf"
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Afhængig af"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "AfhængigAf"
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "Faldende"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Faldende"
-#: html/SelfService/Create.html:100
-#: html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Beskriv problemet nedenfor"
-#: html/Admin/CustomFields/Modify.html:61
-#: html/Admin/Elements/AddCustomFieldValue:57
-#: html/Admin/Elements/EditCustomField:60
-#: html/Admin/Elements/EditCustomFieldValues:56
-#: html/Admin/Elements/EditScrip:55
-#: html/Admin/Elements/ModifyTemplate:57
-#: html/Admin/Groups/Modify.html:71
-#: html/Admin/Queues/Modify.html:69
-#: html/Search/Elements/EditSearches:56
-#: html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Beskrivelse"
@@ -2088,8 +2616,15 @@ msgstr "Beskrivelse"
msgid "Details"
msgstr "Detaljer"
-#: html/Search/Elements/EditFormat:71
-#: html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Retning"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Deaktiveret"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Vis"
@@ -2097,23 +2632,23 @@ msgstr "Vis"
msgid "Display Access Control List"
msgstr "Vis adgangskontrolliste"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Vis kolonner"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Vis scrip-skabeloner for denne kø"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Vis scrips for denne kø"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Vis tilstand"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Vis gemte søgninger for denne gruppe"
@@ -2121,11 +2656,11 @@ msgstr "Vis gemte søgninger for denne gruppe"
msgid "Display ticket #%1"
msgstr "Vis sag #%1"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Distribueret under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> af GNU GPL'en.</a>"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Gør hvad som helst"
@@ -2133,7 +2668,23 @@ msgstr "Gør hvad som helst"
msgid "Do the Search"
msgstr "Udfør søgningen"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Domæne navn"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Undlad at inkludere 'http://', skriv noget lignende 'localhost' eller 'rt.example.com'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Opdater ikke denne side."
@@ -2141,21 +2692,23 @@ msgstr "Opdater ikke denne side."
msgid "Don't show search results"
msgstr "Vis ikke søgeresultater"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Undlad helt at stole på denne nøgle"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Download"
-#: html/Admin/Groups/index.html:61
-#: html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Download som en tabulatoropdelt fil"
-#: html/Elements/SelectDateType:53
-#: html/Ticket/Create.html:209
-#: html/Ticket/Elements/EditDates:66
-#: html/Ticket/Elements/Reminders:133
-#: html/Ticket/Elements/ShowDates:64
-#: lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Download dumpfil"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Forfalden"
@@ -2163,59 +2716,70 @@ msgstr "Forfalden"
msgid "Due date '%1' could not be parsed"
msgstr "Forfaldsdato '%1' kunne ikke fortolkes"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr "ForfaldenRelativt"
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "FEJL: %1"
+
#: NOT FOUND IN SOURCE
msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
msgstr "FEJL: Kunne ikke indlæse sag '%1': %2.\\n"
-#: html/Elements/Quicksearch:48
-#: html/Elements/ShowSearch:49
-#: html/index.html:107
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Nem opdatering af dine åbne sager"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Rediger"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr "Rediger ekstrafelter"
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
-#: html/Admin/Elements/ObjectCustomFields:92
-#: html/Admin/Queues/CustomFields.html:64
-#: html/Admin/Users/CustomFields.html:64
msgid "Edit Custom Fields for %1"
msgstr "Rediger ekstrafelter for %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Rediger ekstrafelter for alle grupper"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Rediger Custom Fields for alle køer"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Rediger ekstrafelter for alle brugere"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54
-#: html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Rediger ekstrafelter for sager i alle køer"
-#: html/Search/Bulk.html:188
-#: html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Rediger referencer"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Rediger søgning"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Rediger søgning"
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
-#: html/Admin/Queues/Templates.html:63
msgid "Edit Templates for queue %1"
msgstr "Rediger skabeloner for kø %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Rediger gemte søgninger for denne gruppe"
@@ -2223,8 +2787,7 @@ msgstr "Rediger gemte søgninger for denne gruppe"
msgid "Edit scrips"
msgstr "Rediger scrips"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60
-#: html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Rediger systemskabeloner"
@@ -2232,12 +2795,16 @@ msgstr "Rediger systemskabeloner"
msgid "Edit templates for %1"
msgstr "Rediger skabeloner for %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "RedigerGemteSøgninger"
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Redigerbar tekst"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
-#: html/Admin/Queues/Modify.html:140
msgid "Editing Configuration for queue %1"
msgstr "Redigerer konfiguration for kø %1"
@@ -2245,19 +2812,19 @@ msgstr "Redigerer konfiguration for kø %1"
msgid "Editing Configuration for user %1"
msgstr "Redigerer konfiguration for bruger %1"
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
-#: html/Admin/CustomFields/Modify.html:167
-#: html/Admin/Elements/EditCustomField:120
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Redigerer ekstrafelt %1"
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
-#: html/Admin/Groups/Members.html:53
msgid "Editing membership for group %1"
msgstr "Redigerer medlemskab for gruppe %1"
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
-#: html/User/Groups/Members.html:150
msgid "Editing membership for personal group %1"
msgstr "Redigerer medlemskab for personlig gruppe %1"
@@ -2265,24 +2832,40 @@ msgstr "Redigerer medlemskab for personlig gruppe %1"
msgid "Editing template %1"
msgstr "Redigerer skabelon %1"
-#: lib/RT/Record.pm:1295
-#: lib/RT/Record.pm:1372
-#: lib/RT/Ticket_Overlay.pm:2518
-#: lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr "EffektivId"
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Enten kilde eller destination skal angives"
-#: html/Admin/Users/Modify.html:74
-#: html/Ticket/Elements/AddWatchers:77
-#: html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Enten har du ikke rettigheder til at se den gemte søgning %1 eller den angivne identifikator er ikke korrekt"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "E-mail"
-#: lib/RT/User_Overlay.pm:235
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "E-mail-adresse i brug"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "Email leverance"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "E-mailAdresse"
@@ -2290,17 +2873,19 @@ msgstr "E-mailAdresse"
msgid "EmailEncoding"
msgstr "E-mailKodning"
-#: html/Admin/CustomFields/Modify.html:98
-#: html/Admin/Elements/EditCustomField:72
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Aktiveret"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Aktiveret (fravalg af denne boks deaktiverer dette ekstrafelt)"
-#: html/Admin/Groups/Modify.html:84
-#: html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Aktiveret (fravalg af denne boks deaktiverer denne gruppe)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Aktiveret (fravalg af denne boks deaktiverer denne kø)"
@@ -2308,56 +2893,85 @@ msgstr "Aktiveret (fravalg af denne boks deaktiverer denne kø)"
msgid "Enabled Custom Fields"
msgstr "Aktiverede ekstrafelter"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Aktiverede køer"
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
-#: html/Admin/Elements/EditCustomField:136
-#: html/Admin/Groups/Modify.html:150
-#: html/Admin/Users/Modify.html:350
-#: html/User/Groups/Modify.html:138
msgid "Enabled status %1"
msgstr "Aktiveret status %1"
-#. (loc_fuzzy($msg))
-#: html/Admin/CustomFields/Modify.html:185
-#: html/Admin/Queues/Modify.html:162
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "Aktiveret status: %1"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Krypter"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Krypter som standard"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Kryptér/dekryptér"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Kryptér/dekryptér transaktion #%1 i sag #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Kryptering slået fra"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Kryptering slået til"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Indtast flere værdier"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "tilføj flere værdier for autokomplettering"
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Angiv objekter eller URL'er til tilknytning af objekter. Flere indtastninger adskilles med mellemrum."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Indtast en værdi"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "tilføj en værdi for autokomplettering"
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Angiv køer eller URL'er til tilknytning af køer. Flere indtastninger adskilles med mellemrum."
-#: html/Elements/EditLinks:119
-#: html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Angiv sager eller URL'er til tilknytning af sager. Flere værdier adskilles med mellemrum."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Angiv op til %1 værdier"
-#: html/Elements/Login:76
-#: html/SelfService/Error.html:46
-#: html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Indtast op til %1 værdier med autofuldførelse"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Fejl"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Fejl i parametre til Kø->TilføjObservatør"
@@ -2365,11 +2979,11 @@ msgstr "Fejl i parametre til Kø->TilføjObservatør"
msgid "Error in parameters to Queue->DelWatcher"
msgstr "Fejl i parametre til Kø->SletObservatør"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Fejl i parametre til Kø->SletObservatør"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Fejl i parametre til Sag->TilføjObservatør"
@@ -2377,26 +2991,66 @@ msgstr "Fejl i parametre til Sag->TilføjObservatør"
msgid "Error in parameters to Ticket->DelWatcher"
msgstr "Fejl i parametre til Sag->SletObservatør"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Fejl i parametre til Sag->SletObservatør"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Fejl til RT ejer: Offentlig nøgle"
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Fejl: Manglende instrument panel"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Fejl: ugyldig GnuPG data"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Fejl: ingen privat nøgle"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Fejl: Offentlig nøgle"
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Opprioriter sager"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Estimeret"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Alle"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Undersøg sager oprettet i en kø imellem to givne datoer"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "undersøger sager løste i en kø imellem to givne datoer"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Undersøg sager løst i en kø, sorteret efter ejer"
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Eksempel:"
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Udløber"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "UdvidStatus"
+
#: NOT FOUND IN SOURCE
msgid "ExternalAuthId"
msgstr "EksternAuthID"
@@ -2405,66 +3059,125 @@ msgstr "EksternAuthID"
msgid "ExternalContactInfoId"
msgstr "EksternKontaktInfoID"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Ekstra information"
-#: lib/RT/SavedSearch.pm:177
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr "Udtræk emnemærke"
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr "Udtræk mærker fra en transaktions emne og tilføj dem til sagens emne linie."
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Kunne ikke få kontakt til database: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Kunne ikke oprettet %1 attibutten"
+
+#: NOT FOUND IN SOURCE
msgid "Failed to create search attribute"
msgstr "Kunne ikke oprette søgeegenskab"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Kunne ikke finde 'privilegerede' brugeres pseudogruppe."
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Kunne ikke finde 'uprivilegerede' brugeres pseudogruppe."
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "kunne ikke indlæse %1 %2"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Kunne ikke indlæse %1 %2: %3"
+
+#: bin/rt-crontool:307
#. ($modname, $@)
-#: bin/rt-crontool:206
msgid "Failed to load module %1. (%2)"
msgstr "Kunne ikke indlæse modul %1. (%2)"
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
-#: lib/RT/SavedSearch.pm:152
msgid "Failed to load object for %1"
msgstr "Kunne ikke indlæse objekt for %1"
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Kunne ikke indlæse skabelon"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "kunne ikke fortolke skabelon"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Feb"
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Feb."
-#: html/Elements/SelectAttachmentField:50
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Februar"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Kilde til feltets værdier:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "FilNavn"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Filnavn"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Udfyld flere tekstområder"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Udfyld flere wikitekst-områder"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Udfyld et tekstområde"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Udfyld et wikitekst-område"
-#: html/Admin/CustomFields/Modify.html:107
-#: html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Udfyld dette felt med en URL."
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Udfyld op til %1 tekstområder"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Udfyld op til %1 wikitekst-områder"
@@ -2472,24 +3185,23 @@ msgstr "Udfyld op til %1 wikitekst-områder"
msgid "Fin"
msgstr "Slut"
-#: html/Search/Elements/PickBasics:149
-#: html/Ticket/Create.html:182
-#: html/Ticket/Elements/EditBasics:97
-#: lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Endelig prioritet"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "EndeligPrioritet"
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Find alle brugere hvis"
+
#: NOT FOUND IN SOURCE
msgid "Find group whose"
msgstr "Find gruppe hvis"
-#: html/Admin/Groups/index.html:72
-#: html/Admin/Queues/People.html:82
-#: html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Find grupper hvis"
@@ -2497,21 +3209,23 @@ msgstr "Find grupper hvis"
msgid "Find new/open tickets"
msgstr "Find nye/Ã¥bne sager"
-#: html/Admin/Queues/People.html:78
-#: html/Admin/Users/index.html:70
-#: html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Find personer hvis"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Find sager"
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Udfør"
+
#: NOT FOUND IN SOURCE
msgid "Finish Approval"
msgstr "Afslut godkendelse"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Første"
@@ -2519,30 +3233,66 @@ msgstr "Første"
msgid "First page"
msgstr "Første side"
-#: docs/design_docs/string-extraction-guide.txt:33
-#: lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24
-#: lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Foo!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Gennemtving ændring"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Format"
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Videresend"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Videresend Besked"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Videresend Besked og Returner"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Videresend besked"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Videresend besked til trediepart(er)"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "VideresendBesked"
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
-#: html/Search/Results.html:145
msgid "Found %quant(%1,ticket)"
msgstr "Fandt %quant(%1,ticket)"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Object fundet"
@@ -2562,34 +3312,52 @@ msgstr "FrihåndMange"
msgid "FreeformSingle"
msgstr "FrihåndEnkelt"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Frekvens"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Fre"
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Fre."
-#: html/Ticket/Elements/ShowHistory:66
-#: html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Fredag"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Hele overskrifter"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Generelt"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Hent skabelon fra fil"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Kom godt igang"
+
#: NOT FOUND IN SOURCE
msgid "Getting the current user from a pgp sig\\n"
msgstr "Henter den aktuelle bruger fra en PGP-signatur\\n"
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
-#: lib/RT/Transaction_Overlay.pm:684
msgid "Given to %1"
msgstr "Givet til %1"
-#: html/Admin/Elements/Tabs:65
-#: html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Global"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Globale ekstrafelter"
@@ -2597,36 +3365,51 @@ msgstr "Globale ekstrafelter"
msgid "Global Scrips"
msgstr "Globale scrips"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Global ekstrafelt-konfiguration"
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
-#: html/Admin/Global/MyRT.html:48
msgid "Global portlet %1 saved."
msgstr "Global portlet %1 gemt."
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
-#: html/Admin/Elements/SelectTemplate:59
msgid "Global template: %1"
msgstr "Global skabelon: %1"
-#: html/Admin/CustomFields/index.html:80
-#: html/Search/Results.html:90
-#: html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "GnuPG fejl. Contact med administrator"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "GnuPG integration er slået fra"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr "GnuPG problemer"
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "GnuPG private nøgle(r) til %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "GnuPG offentlig nøgle(r) til %1"
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Start"
-#: html/Admin/Groups/index.html:67
-#: html/Admin/Groups/index.html:73
-#: html/Admin/Queues/People.html:80
-#: html/Admin/Queues/People.html:84
-#: html/Admin/Queues/index.html:66
-#: html/Admin/Users/index.html:73
-#: html/Elements/RefreshHomepage:48
-#: html/Search/Results.html:74
-#: html/Ticket/Elements/EditPeople:53
-#: html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Start!"
@@ -2638,14 +3421,23 @@ msgstr "Brugbar PGP-signatur fra %1\\n"
msgid "Goto page"
msgstr "GÃ¥ til side"
-#: html/Elements/GotoTicket:46
-#: html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "GÃ¥ til sag"
-#: html/Ticket/Elements/AddWatchers:67
-#: html/Ticket/Elements/ShowGroupMembers:55
-#: html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Graf"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Graf egenskaber"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "grafiske diagrammer er ikke tilgænglige"
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Gruppe"
@@ -2653,36 +3445,37 @@ msgstr "Gruppe"
msgid "Group %1 %2: %3"
msgstr "Gruppe %1 %2: %3"
-#: html/Admin/Elements/CustomFieldTabs:68
-#: html/Admin/Elements/GroupTabs:66
-#: html/Admin/Elements/QueueTabs:82
-#: html/Admin/Elements/SystemTabs:65
-#: html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Grupperettigheder"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Gruppe har allerede medlem"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Gruppe har allerede medlem: %1"
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
-#: html/Admin/Groups/Modify.html:109
msgid "Group could not be created: %1"
msgstr "Gruppe kunne ikke oprettes: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Gruppe oprettet"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Gruppe deaktiveret"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Gruppe aktiveret"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Gruppen har ikke et sådant medlem"
-#: lib/RT/Group_Overlay.pm:963
-#: lib/RT/Queue_Overlay.pm:748
-#: lib/RT/Queue_Overlay.pm:808
-#: lib/RT/Ticket_Overlay.pm:1430
-#: lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Gruppe ikke fundet"
@@ -2694,72 +3487,104 @@ msgstr "Gruppe ikke fundet.\\n"
msgid "Group not specified.\\n"
msgstr "Gruppe ikke angivet.\\n"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59
-#: html/Admin/Elements/SelectNewGroupMembers:57
-#: html/Admin/Elements/Tabs:56
-#: html/Admin/Global/CustomFields/index.html:69
-#: html/Admin/Groups/Members.html:86
-#: html/Admin/Queues/People.html:104
-#: html/Admin/Users/Memberships.html:53
-#: html/Admin/index.html:67
-#: html/User/Groups/Members.html:88
-#: lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Gruppe rettigheder"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Grupper"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Grupper kan ikke være medlem af deres medlemmer"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Grupper som opfylder søgekriterier"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Grupper som brugeren er medlem af(sæt kryds i gruppen for at slette)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Grupper som brugeren ikke er medlem af(sæt kryds i gruppen for at tilføje)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Grupper denne bruger hører til"
-#: lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr "HarMedlem"
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Hej!"
+#: lib/RT/StyleGuide.pod:765
#. ($name)
-#: docs/design_docs/string-extraction-guide.txt:40
-#: lib/RT/StyleGuide.pod:773
msgid "Hello, %1"
msgstr "Hej, %1"
-#: html/Admin/Elements/GroupTabs:70
-#: html/Admin/Elements/UserTabs:64
-#: html/Ticket/Elements/ShowHistory:53
-#: html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "Hjælp os med at få lavet nogle nyttige defaults for RT."
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historik"
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
-#: html/Admin/Groups/History.html:62
msgid "History of the group %1"
msgstr "Historik for gruppen %1"
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr "Kø historik %1"
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
-#: html/Admin/Users/History.html:62
msgid "History of the user %1"
msgstr "Historik for brugeren %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "Hjem"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "Hjemmeside opdateringsinterval"
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "Telefon hjemme"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Forside"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Time"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Timer"
+#: lib/RT/Base.pm:136
#. (6)
-#: lib/RT/Base.pm:119
msgid "I have %quant(%1,concrete mixer)."
msgstr "Jeg har %quant(%1,concrete mixer)."
@@ -2767,45 +3592,56 @@ msgstr "Jeg har %quant(%1,concrete mixer)."
msgid "I have [quant,_1,concrete mixer]."
msgstr "Jeg har [quant,_1,concrete mixer]."
-#: html/Search/Build.html:460
-#: lib/RT/Report/Tickets.pm:415
+#: NOT FOUND IN SOURCE
msgid "I'm lost"
msgstr "Jeg er faret vild"
-#: html/Ticket/Elements/ShowBasics:48
-#: lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "ID"
-#: html/Admin/Users/Modify.html:65
-#: html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identitet"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Hvis en godkendelse bliver afvist, afvis den oprindelige og slet afventende godkendelser"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Hvis ingen rekvirent er angivet, opret sager med denne rekvirent."
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Hvis ingen kø er oprettet, opret sager i denne kø."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Hvis dette værktøj var \"setgid\", kunne en fjendtlig bruger benytte det til at opnå administratoradgang til RT."
-#: html/Admin/Queues/People.html:126
-#: html/Ticket/Modify.html:60
-#: html/Ticket/ModifyAll.html:128
-#: html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr "Hvis du allerede har en fungerende RT server og database, bør du bruge denne lejlighed til at sikre dig at din database server kører og at RT serveren kan få forbindelse til den. Når du har gjort det, bør du starte og stoppe RT serveren.</p>"
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "hvis du har ændret porten som RT bruger, skal du genstarte serveren før du kan logge ind."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Hvis du har foretaget opdateringer ovenfor, sørg for at..."
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr "Hvis din foretrukne database ikke er i rullemenuen nedenfor, betyder det at RT ikke kunne finde en <i>database driver</i> installeret lokalt. Du kan muligvis afhjælpe dette ved hjælp af %1 for at downloade og installere DBD::MySQL, DBD::Oracle or DBD::Pg."
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Ulovlig værdi for %1"
@@ -2813,131 +3649,188 @@ msgstr "Ulovlig værdi for %1"
msgid "Image"
msgstr "Billede"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Felt kan ikke ændres"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/CustomFields/index.html:86
msgid "Include disabled custom fields in listing."
msgstr "Medtag deaktiverede ekstrafelter på liste."
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Medtag deaktiverede grupper på denne liste."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Medtag deaktiverede køer på liste."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Medtag deaktiverede brugere i søgning."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr "Medtag side"
-#: html/Search/Build.html:486
-#: lib/RT/Report/Tickets.pm:441
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Ufuldstændig søgning"
-#: html/Search/Build.html:483
-#: lib/RT/Report/Tickets.pm:438
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "Ufuldstændig søgning"
-#: html/Search/Elements/PickBasics:148
-#: lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "individuelle beskeder"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informer RT ejeren om at en eller flere brugere har problemer med offentlige nøgler"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Informer bruger om at det instrument panel brugeren abonnerede på, ikke findes"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Infromer brugeren om at en afsendt besked indeholder ugyldig GnuPG data"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Informer brugeren om at han/hun har problemer med sin offentlige nøgle og derfor ikke var i stand til at modtage krypteret indhold"
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "informer brugeren at hans kodeord er blevet nulstillet"
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Informer brugeren om at vi modtog en krypteret email og ikke havde nogen privat nøgle til at dekryptere"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Første prioritet"
-#: lib/RT/Ticket_Overlay.pm:1163
-#: lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "FørstePrioritet"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "initialisere Databasen"
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Inputfejl"
-#. ($CF->FriendlyPattern)
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
-#: html/Elements/ValidateCustomFields:68
-#: lib/RT/CustomField_Overlay.pm:1021
-#: lib/RT/CustomField_Overlay.pm:1162
+#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "Input skal stemme overens med %1"
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "Installér RT"
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Intern fejl"
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
-#: lib/RT/Record.pm:308
msgid "Internal Error: %1"
msgstr "Intern fejl: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "Ugyldigt %1: '%2' ligner ikke en email adresse"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "Ugyldigt %1: burde være et tal"
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Ugyldig gruppetype"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Ugyldig rettighed"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Ugyldige data"
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Ugyldtigt objekt"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Ugyldig ejer objekt"
+
#: NOT FOUND IN SOURCE
msgid "Invalid owner. Defaulting to 'nobody'."
msgstr "Ugyldig ejer, sætter standard til 'ingen'"
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
-#: lib/RT/CustomField_Overlay.pm:207
-#: lib/RT/CustomField_Overlay.pm:678
msgid "Invalid pattern: %1"
msgstr "Ugyldigt mønster: %1"
-#: lib/RT/Scrip_Overlay.pm:157
-#: lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Ugyldig kø"
-#: lib/RT/ACE_Overlay.pm:264
-#: lib/RT/ACE_Overlay.pm:273
-#: lib/RT/ACE_Overlay.pm:279
-#: lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Ugyldig rettighed"
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr "Ugyld syntax for email adresse"
+
+#: lib/RT/Record.pm:269
#. ($key)
-#: lib/RT/Record.pm:283
msgid "Invalid value for %1"
msgstr "Ugyldig værdi for %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Ugyldig værdi for ekstrafelt"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Ugyldig værdi for status"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "Er ikke krypteret"
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Det er yderst vigtigt, at ikke-privilegerede brugere ikke får adgang til at bruge dette værktøj."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Det anbefales, at du opretter en ikke-privilegeret Unix-bruger med det korrekte gruppemedlemskab og RT-adgang for at benytte dette værktøj."
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Flere parametre er nødvendige:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Kursiv"
@@ -2945,27 +3838,55 @@ msgstr "Kursiv"
msgid "Items pending my approval"
msgstr "Punkter, der afventer min godkendelse"
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Jan"
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Jan."
-#: lib/RT/Group_Overlay.pm:166
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "Januar"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Tilmeld dig eller forlad denne gruppe"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Jul"
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Jul."
-#: html/Ticket/Elements/Tabs:125
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "Juli"
+
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Jumbo"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Jun"
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Jun."
#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "juni"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "Behold 'localhost' hvis du ikke er sikker. Efterlad blank for at oprette forbindelse lokalt over en sokkel"
+
+#: NOT FOUND IN SOURCE
msgid "Keyword"
msgstr "Nøgleord"
@@ -2973,25 +3894,23 @@ msgstr "Nøgleord"
msgid "Lang"
msgstr "Sprog"
-#: html/Admin/Users/Modify.html:94
-#: html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Sprog"
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Stor"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Sidste"
-#: html/Ticket/Elements/EditDates:59
-#: html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Sidste kontakt"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Sidst kontaktet"
@@ -2999,26 +3918,67 @@ msgstr "Sidst kontaktet"
msgid "Last Notified"
msgstr "Sidst notificeret"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Sidst opdateret"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "Sidst Opdateret af"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Sidst opdateret af"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "SidstOpdateret"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "SidstOpdateretAf"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr "SidstOpdateretSlægtning"
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr "Undlad at udfylde dette felt for at sende til din nuværende email adresse (%1)"
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Efterlad tom for at bruge standard værdien for din database"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr "Undlad at ændre dette felt hvis du vil bruge standard databaseadministrator brugernavn, for den databasetype du anvender"
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Tilbage"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Længde talt i bogstaver; Brug '0' for at få vist alle beskeder, uanset længden"
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Lad denne bruger få adgang til RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Lad denne bruger få rettigheder"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "Lad os komme igang!"
+
#: NOT FOUND IN SOURCE
msgid "Limiting owner to %1 %2"
msgstr "Begrænser ejer til %1 %2"
@@ -3027,292 +3987,375 @@ msgstr "Begrænser ejer til %1 %2"
msgid "Limiting queue to %1 %2"
msgstr "Begrænser kø til %1 %2"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "Reference"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Reference eksisterer allerede"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Reference kunne ikke oprettes"
-#. ($TransString)
-#: lib/RT/Record.pm:1326
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Reference oprettet (%1)"
-#. ($TransString)
-#: lib/RT/Record.pm:1387
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Reference slettet (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Reference ikke fundet"
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
-#: html/Ticket/ModifyLinks.html:46
-#: html/Ticket/ModifyLinks.html:50
msgid "Link ticket #%1"
msgstr "Referér sag #%1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "Referér værdier til"
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "Refereret"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr "RefereretTilAf"
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "RefereretTil"
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr "Reference - adgang nægtet."
-#: html/Ticket/Create.html:216
-#: html/Ticket/Elements/ShowSummary:89
-#: html/Ticket/Elements/Tabs:120
-#: html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Referencer"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Indlæs"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Indlæs gemt søgning:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "IndlæsGemtSøgning"
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "Indlæste %1 %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "Indlæste den originale \"%1\" gemte søgning"
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Indlæste Perl-moduler"
-#. ($self->Name)
-#: lib/RT/SavedSearch.pm:111
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "Indlæste gemte søgning \"%1\""
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Søgning %1 indlæst"
-#: html/Admin/Users/Modify.html:138
-#: html/User/Prefs.html:126
-msgid "Location"
-msgstr "Lokation"
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Lokalitet"
-#: NOT FOUND IN SOURCE
-msgid ""
-"Log directory %1 not found or couldn't be written.\\n"
-" RT can't run."
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
msgstr ""
-"Mappe til logfiler %1 kunne ikke findes eller skrives til.\\n"
-" RT kan ikke køre."
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "Lokation"
+
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
-#: html/Elements/Header:91
msgid "Logged in as %1"
msgstr "Logget ind som %1"
-#: docs/design_docs/string-extraction-guide.txt:71
-#: html/Elements/Login:100
-#: html/Elements/Login:68
-#: html/Elements/Login:84
-#: lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Logget ud"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Log ind"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Log ud"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Opslagstype mismatch"
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Sæt ejer"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Sæt status"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Sæt forfaldsdato"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Sæt løsningsdato"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Sæt startdato"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Sæt datostart"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Sæt dato meddelt"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Sæt prioritet"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Sæt kø"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Sæt emne"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Gør denne gruppe synlig for bruger"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Administrer ekstrafelter og ekstrafeltværdier"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Administrer grupper og gruppemedlemskab"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Administrer egenskaber og konfiguration som gælder for alle køer"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Administrer køer og kø-specifikke egenskaber"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Administrer brugere og adgangskoder"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mar."
-#: lib/RT/Date.pm:445
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "Marts"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Markerede alle beskeder som set"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "Maksimal længde for integreret besked"
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "Maj"
+
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Maj."
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Medlem"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:731
msgid "Member %1 added"
msgstr "Medlem %1 tilføjet"
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:771
msgid "Member %1 deleted"
msgstr "Medlem %1 slettet"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Medlem tilføjet"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Medlem tilføjet: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Medlem slettet"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Medlem ikke slettet"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Medlem af"
-#: html/Admin/Elements/GroupTabs:63
-#: html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "MedlemAf"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Medlemmer"
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:728
msgid "Membership in %1 added"
msgstr "Medlemskab af %1 tilføjet"
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:768
msgid "Membership in %1 deleted"
msgstr "Medlemskab af %1 slettet"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Medlemskaber"
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
-#: html/Admin/Users/Memberships.html:60
msgid "Memberships of the user %1"
msgstr "Medlemskaber for brugeren %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Sammenføjning udført med succes"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Sammenføjning lykkedes ikke. Kunne ikke sætte EffektivID."
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Sammenføjning lykkedes ikke. Kunne ikke sætte status."
-#: html/Elements/EditLinks:131
-#: html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Føj ind i"
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:734
msgid "Merged into %1"
msgstr "Føjet ind i %1"
-#: html/Search/Bulk.html:143
-#: html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Besked"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr "Beskedens brødtekst er ikke vist fordi afsenderen ikke ønskede at integrere den."
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr "Beskedens indhold blev ikke vist fordi den ikke er klar tekst."
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Meddelelsens indhold er ikke vist, fordi meddelelsen er for stor, eller fordi den ikke er i almindelig tekst."
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr "Beskedens indhold blev ikke vist fordi den er for stor."
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Besked feltets højde"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Besked feltets bredde"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Besked kunne ikke gemmes"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Besked til bruger"
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Besked gemt"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Beskeder angående denne sag vil ikke blive sendt til..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Minimum password længde"
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minutter"
-#: html/Search/Build.html:490
-#: lib/RT/Report/Tickets.pm:445
+#: NOT FOUND IN SOURCE
msgid "Mismatched parentheses"
msgstr "Ikke-matchende parenteser"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Mangler en primærnøgle?: %1"
-#: html/Admin/Users/Modify.html:193
-#: html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Mobil"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "Mobiltelefon"
@@ -3324,13 +4367,13 @@ msgstr "Rediger adgangskontrolliste"
msgid "Modify Custom Field %1"
msgstr "Rediger ekstrafelt %1"
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
-#: html/Admin/Elements/ObjectCustomFields:96
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Rediger ekstrafelter, der gælder for %1 for alle %2"
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
-#: html/Admin/Elements/ObjectCustomFields:98
msgid "Modify Custom Fields which apply to all %1"
msgstr "Rediger ekstrafelter, der gælder for alle %1"
@@ -3338,26 +4381,23 @@ msgstr "Rediger ekstrafelter, der gælder for alle %1"
msgid "Modify Custom Fields which apply to all queues"
msgstr "Rediger ekstrafelter, der gælder for alle køer"
-#: html/Admin/Global/GroupRights.html:106
-#: html/Admin/Groups/GroupRights.html:94
-#: html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Rediger grupperettigheder"
-#: html/Admin/Groups/Members.html:105
-#: html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Rediger medlemmer"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Rediger rettigheder"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Rediger scrip-skabeloner for denne kø"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Rediger scrips for denne kø"
@@ -3365,14 +4405,12 @@ msgstr "Rediger scrips for denne kø"
msgid "Modify Template %1"
msgstr "Rediger skabelon %1"
-#: html/Admin/Global/UserRights.html:75
-#: html/Admin/Groups/UserRights.html:76
-#: html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Rediger brugerrettigheder"
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
-#: html/Admin/Queues/CustomField.html:66
msgid "Modify a CustomField for queue %1"
msgstr "Rediger et ekstrafelt for kø %1"
@@ -3380,44 +4418,47 @@ msgstr "Rediger et ekstrafelt for kø %1"
msgid "Modify a CustomField that applies to all queues"
msgstr "Rediger et ekstrafelt, der gælder for alle køer"
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrip.html:82
msgid "Modify a scrip for queue %1"
msgstr "Rediger et scrip for kø %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Rediger et scrip, der gælder for alle køer"
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
-#: html/Admin/CustomFields/Objects.html:90
msgid "Modify associated objects for %1"
msgstr "Rediger tilhørende objekter til %1"
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr "Modificer det brugerdefinerede felts værdier"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Modificer denne gruppes instrument paneler"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
-#: html/Ticket/ModifyDates.html:46
-#: html/Ticket/ModifyDates.html:50
msgid "Modify dates for #%1"
msgstr "Rediger datoer for #%1"
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
-#: html/Ticket/ModifyDates.html:57
msgid "Modify dates for ticket # %1"
msgstr "Rediger datoer for sag # %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65
-#: html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Rediger globale ekstrafelter"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70
-#: html/Admin/Global/GroupRights.html:46
-#: html/Admin/Global/GroupRights.html:49
-#: html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Rediger globale grupperettigheder"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Rediger globale grupperettigheder."
@@ -3425,134 +4466,137 @@ msgstr "Rediger globale grupperettigheder."
msgid "Modify global scrips"
msgstr "Rediger globale scrips"
-#: html/Admin/Global/UserRights.html:46
-#: html/Admin/Global/UserRights.html:49
-#: html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Rediger globale brugerrettigheder"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Rediger globale brugerrettigheder."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Rediger gruppemetadata eller slet gruppe"
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
-#: html/Admin/CustomFields/GroupRights.html:164
msgid "Modify group rights for custom field %1"
msgstr "Rediger grupperettigheder for ekstrafelter %1"
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
-#: html/Admin/Groups/GroupRights.html:46
-#: html/Admin/Groups/GroupRights.html:50
-#: html/Admin/Groups/GroupRights.html:56
msgid "Modify group rights for group %1"
msgstr "Rediger grupperettigheder for gruppe %1"
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/GroupRights.html:46
-#: html/Admin/Queues/GroupRights.html:50
msgid "Modify group rights for queue %1"
msgstr "Rediger grupperettigheder for kø %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Rediger medlemskabsliste for denne gruppe"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Rediger din egen RT-konto"
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/People.html:46
-#: html/Admin/Queues/People.html:50
msgid "Modify people related to queue %1"
msgstr "Rediger personer, der tilhører kø %1"
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
-#: html/Ticket/ModifyPeople.html:46
-#: html/Ticket/ModifyPeople.html:50
-#: html/Ticket/ModifyPeople.html:57
msgid "Modify people related to ticket #%1"
msgstr "Rediger personer, der tilhører sag #%1"
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Modificer personlige instrument paneler"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrips.html:67
msgid "Modify scrips for queue %1"
msgstr "Rediger scrips for kø %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56
-#: html/Admin/Global/Scrips.html:65
-#: html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Rediger scrips, der gælder for alle køer"
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Modificer system instrument paneler"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-#: html/Admin/Global/Template.html:102
-#: html/Admin/Global/Template.html:46
-#: html/Admin/Global/Template.html:51
-#: html/Admin/Queues/Template.html:99
msgid "Modify template %1"
msgstr "Rediger skabelon %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Rediger skabeloner, der gælder for alle køer"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Modificer instrument panelet %1"
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr "Tilpas standardvisningen af \"RT set fra oven\""
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
-#: html/Admin/Groups/Modify.html:119
-#: html/User/Groups/Modify.html:107
msgid "Modify the group %1"
msgstr "Rediger gruppen %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Modificer søgninger i instrument panel %1"
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Rediger observatører for køen"
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Modificer abonnement på instrument panel %1"
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
-#: html/Admin/Users/Modify.html:309
msgid "Modify the user %1"
msgstr "Rediger brugeren %1"
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
-#: html/Ticket/ModifyAll.html:58
msgid "Modify ticket # %1"
msgstr "Rediger sag # %1"
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
-#: html/Ticket/Modify.html:46
-#: html/Ticket/Modify.html:49
-#: html/Ticket/Modify.html:55
msgid "Modify ticket #%1"
msgstr "Rediger sag #%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Rediger sager"
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
-#: html/Admin/CustomFields/UserRights.html:157
msgid "Modify user rights for custom field %1"
msgstr "Rediger brugerrettigheder for ekstrafelter %1"
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
-#: html/Admin/Groups/UserRights.html:46
-#: html/Admin/Groups/UserRights.html:50
-#: html/Admin/Groups/UserRights.html:56
msgid "Modify user rights for group %1"
msgstr "Rediger brugerrettigheder for gruppe %1"
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/UserRights.html:46
-#: html/Admin/Queues/UserRights.html:50
msgid "Modify user rights for queue %1"
msgstr "Rediger brugerrettigheder for kø %1"
@@ -3564,11 +4608,23 @@ msgstr "Rediger observatører for kø '%1'"
msgid "ModifyACL"
msgstr "RedigerACL"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "RedigerEkstrafelt"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "ModificerInstrumentPanel"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "ModificerGruppeInstrmentPanel"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "ModificerEgetInstrumentPanel"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "RedigeretEgetMedlemskab"
@@ -3576,49 +4632,65 @@ msgstr "RedigeretEgetMedlemskab"
msgid "ModifyQueueWatchers"
msgstr "RedigerKøObservatører"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "RedigerScrips"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "RedigerSelv"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "RedigerSkabelon"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "RedigerSag"
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Man"
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Man."
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Mandag"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr "Mandag til fredag"
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "Mere"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
-#: html/Ticket/Elements/ShowRequestor:61
msgid "More about %1"
msgstr "Mere om %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Flyt ned"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Flyt op"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Flere"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Egenskab 'Navn' skal angives"
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
-#: html/SelfService/Elements/MyRequests:57
msgid "My %1 tickets"
msgstr "Mine %1 sager"
@@ -3626,58 +4698,63 @@ msgstr "Mine %1 sager"
msgid "My Approvals"
msgstr "Mine godkendelser"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Min dag"
-#: html/Approvals/index.html:46
-#: html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Mine godkendelser"
-#: html/Search/Elements/SearchPrivacy:50
-#: html/Search/Elements/SelectSearchObject:53
-#: html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Mine instrument paneler"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Mine gemte søgninger"
-#: html/Admin/CustomFields/Modify.html:58
-#: html/Admin/Elements/AddCustomFieldValue:53
-#: html/Admin/Elements/EditCustomField:55
-#: html/Admin/Elements/EditCustomFieldValues:55
-#: html/Admin/Elements/ModifyTemplate:49
-#: html/Admin/Groups/Modify.html:65
-#: html/Search/Bulk.html:157
-#: html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "NYLINIE"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Navn"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Navn i brug"
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Need approval from system administrator"
msgstr "Kræver godkendelse af systemadministrator"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Aldrig"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Ny"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nye referencer"
-#: html/Admin/Users/Modify.html:119
-#: html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Ny adgangskode"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Ny afventende godkendelse"
@@ -3685,33 +4762,44 @@ msgstr "Ny afventende godkendelse"
msgid "New Query"
msgstr "Ny søgning"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Ny søgning"
-#: html/Admin/Elements/CustomFieldTabs:93
-#: html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Nye og åbne sager tilhørende %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Nyt ekstrafelt"
-#: html/Admin/Elements/GroupTabs:77
-#: html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Nyt instrument panel"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Ny gruppe"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Nye beskeder"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Ny adgangskode"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Ny meddelelse om adgangskode sendt"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Ny kø"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Ny påmindelse:"
@@ -3719,14 +4807,11 @@ msgstr "Ny påmindelse:"
msgid "New request"
msgstr "Ny sag"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nye rettigheder"
-#: html/Admin/Global/Scrip.html:63
-#: html/Admin/Global/Scrips.html:60
-#: html/Admin/Queues/Scrip.html:71
-#: html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Ny scrip"
@@ -3734,32 +4819,27 @@ msgstr "Ny scrip"
msgid "New search"
msgstr "Ny søgning"
-#: html/Admin/Global/Template.html:81
-#: html/Admin/Global/Templates.html:60
-#: html/Admin/Queues/Template.html:79
-#: html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Ny skabelon"
-#: html/SelfService/Elements/Tabs:84
-#: html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Ny sag"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Ny sag eksisterer ikke"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Ny bruger"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Ny bruger ved navn"
-#: html/Admin/Queues/People.html:76
-#: html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nye observatører"
@@ -3767,12 +4847,11 @@ msgstr "Nye observatører"
msgid "New window setting"
msgstr "Ny indstilling for vindue"
-#: html/Helpers/CalPopup.html:58
-#: html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Næste"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Næste side"
@@ -3780,68 +4859,68 @@ msgstr "Næste side"
msgid "Next page"
msgstr "Næste side"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "KaldeNavn"
-#: html/Admin/Users/Modify.html:84
-#: html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Kaldenavn"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Nej"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "Ingen %1 indlæst"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Ingen klasse defineret"
-#: html/Admin/CustomFields/Modify.html:166
-#: html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Intet ekstrafelt"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Intet ekstrafelt defineret"
-#: html/Admin/Groups/GroupRights.html:105
-#: html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Ingen gruppe defineret"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Ingen søgning"
-#: html/Admin/Queues/GroupRights.html:118
-#: html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Ingen kø defineret"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Ingen RT-bruger fundet. Kontakt venligst din RT-administrator.\\n"
-#: html/Admin/Global/Template.html:100
-#: html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Intet emne"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Ingen skabelon"
#: NOT FOUND IN SOURCE
msgid "No Ticket specified. Aborting ticket "
-msgstr "Ingen sag angivet. Afbryder sag."
-
-#: NOT FOUND IN SOURCE
-msgid ""
-"No Ticket specified. Aborting ticket modifications\\n"
-"\\n"
-msgstr ""
-"Ingen sag angivet. Afbryder sagsændringer\\n"
-"\\n"
+msgstr "Ingen sag angivet. Afbryder sag. "
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Ingen handling"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Ingen kolonne angivet"
@@ -3849,7 +4928,7 @@ msgstr "Ingen kolonne angivet"
msgid "No command found\\n"
msgstr "Ingen kommando fundet\\n"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Ingen kommentar indtastet for denne bruger"
@@ -3857,101 +4936,137 @@ msgstr "Ingen kommentar indtastet for denne bruger"
msgid "No correspondence attached"
msgstr "Ingen korrespondance vedhæftet"
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Ingen instrument paneler."
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
-#: lib/RT/Action/Generic.pm:185
-#: lib/RT/Condition/Generic.pm:197
-#: lib/RT/Search/ActiveTicketsInQueue.pm:77
-#: lib/RT/Search/Generic.pm:134
-#: lib/RT/Search/Googleish.pm:78
msgid "No description for %1"
msgstr "Ingen beskrivelse af %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Ingen gruppe angivet"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Ingen grupper fundet, der opfylder søgekriterier"
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Ingen nøgle egnet til kryptering"
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Ingen nøgler til denne adresse"
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Ingen meddelelse vedhæftet"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Ingen grund til kryptering"
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Ingen adgangskode sat"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Ingen adgang til at oprette køer"
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
-#: lib/RT/Ticket_Overlay.pm:420
msgid "No permission to create tickets in the queue '%1'"
msgstr "Ingen adgang til at oprette sager i denne kø '%1'"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Ingen adgang til at oprette brugere"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Ingen adgang til at vise denne sag"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr "Ingen tilladelse til at gemme søgninger for hele systemet"
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Ingen tilladelse til at ændre indstillinger"
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Ingen adgang til at se opdater sag"
-#: lib/RT/Queue_Overlay.pm:795
-#: lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Ingen principal angivet"
-#: html/Admin/Queues/People.html:175
-#: html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Ingen principaler valgt."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Ingen privat nøgle"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Ingen køer fundet, der opfylder søgekriterier."
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Ingen rettigheder specificeret"
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Ingen rettigheder fundet"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Ingen rettigheder tildelt."
-#: lib/RT/SavedSearch.pm:196
+#: NOT FOUND IN SOURCE
msgid "No search loaded"
msgstr "Ingen søgning indlæst"
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Ingen søgning at arbejde med."
-#: html/Elements/RT__Ticket/ColumnMap:137
-#: html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Intet emne"
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Angivne nøgle findes ikke eller er ikke egnet til signering"
+
#: NOT FOUND IN SOURCE
msgid "No ticket id specified"
msgstr "Intet sagsnummer angivet"
-#: lib/RT/Transaction_Overlay.pm:528
-#: lib/RT/Transaction_Overlay.pm:565
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "Ingen sager fundet."
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Ingen transaktionstype angivet"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Ingen brugbare nøgler."
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Ingen brugere fundet, der opfylder søgekriterier"
@@ -3959,36 +5074,43 @@ msgstr "Ingen brugere fundet, der opfylder søgekriterier"
msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
msgstr "Ingen gyldig RT-bruger fundet. RT CVS-administrator frakoblet. Kontakt venligst din RT-administrator.\\n"
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Ingen værdi sendt til _Set!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Ingen"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Ingen"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Ikke-eksisterende felt?"
-#: html/Search/Chart:71
-#: html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr "Ikke sat"
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Ikke fundet"
+
#: NOT FOUND IN SOURCE
msgid "Not logged in"
msgstr "Ikke logget ind"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Ikke logget ind."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Ikke sat"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Endnu ikke implementeret."
@@ -3996,192 +5118,256 @@ msgstr "Endnu ikke implementeret."
msgid "Not yet implemented...."
msgstr "Endnu ikke implementeret..."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Noter"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Besked kunne ikke sendes"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Giv besked til AdminCc'ere"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Giv besked til AdminCc'ere som kommentar"
-#: etc/initialdata:93
-#: etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Giv besked til Cc'ere"
-#: etc/initialdata:89
-#: etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Giv besked til Cc'ere som kommentarer"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Giv besked til andre modtagere"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Giv besked til andre modtagere som kommentar"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Giv besked til ejer"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Giv besked til ejer som kommentar"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Giv besked til ejer om deres afviste sag"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr "Notificer ejer om at deres sag er godkendt og er klar til at blive arbjedet videre på"
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Giv besked til ejere om, at deres sag er blevet godkendt af alle godkendere"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Giv besked til ejere om, at deres sag er blevet godkendt af nogle godkendere"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr "Notificer ejer om at deres sag er blevet godkendt af nogle eller alle godkendere"
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr "Notificer ejere, rekvirenter Cc'er og AdminCc'er"
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr "Notificer ejere, rekvirenter, Cc'er og AdminCc'er"
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Giv besked til ejere og AdminCc'ere om nye emner, som afventer deres godkendelse"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr "Notificer rekvirent om at deres sag er blevet godkendt af alle godkendere"
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr "Notificer rekvirent om at deres sag er blevet godkendt af en godkender"
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Giv besked til rekvirenter"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Giv besked til rekvirenter og Cc'ere"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Giv besked til rekvirenter og Cc'ere som kommentar"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Giv besked til rekvirenter, Cc'ere og AdminCc'ere"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Giv besked til rekvirenter, Cc'ere og AdminCc'ere som kommentar"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "Gør mig opmærksom på ulæste beskedder"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "Nov"
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Nov."
-#: html/Search/Elements/SelectAndOr:47
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "November"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Antal søgeresultater"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "ELLER"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Objekt kunne ikke oprettes"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Objekt kunne ikke slettes"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Objekt oprettet"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objekt slettet"
-#. ($LookupType)
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
-#: html/Admin/CustomFields/Objects.html:72
-#: html/Admin/Elements/ObjectCustomFields:63
+#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Objekt af typen %1 kan ikke håndtere ekstrafelter"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Objekttype mismatch"
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr "Element listen er tom"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Okt"
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Okt."
-#: html/Tools/Elements/Tabs:55
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "Oktober"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Off-line"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Off-line redigeringer"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Off-line dataoverførsel"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "Ved"
-
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-#: lib/RT/Transaction_Overlay.pm:326
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr "PÃ¥ %1, skrev %2:"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "Ved Lukning"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Ved kommentar"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Ved korrespondance"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Ved oprettelse"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Ved ændring af ejer"
-#: etc/initialdata:177
-#: etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Ved ændring af prioritet"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Ved ændring af kø"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr "Ved Afvisning"
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Ved Genåbning"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Ved løsning"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Ved statusændring"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Ved transaktion"
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "Engangs Bcc"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "Engangs Cc"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
-#: html/Approvals/Elements/PendingMyApproval:70
msgid "Only show approvals for requests created after %1"
msgstr "Vis kun godkendelser for sager oprettet efter %1"
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
-#: html/Approvals/Elements/PendingMyApproval:68
msgid "Only show approvals for requests created before %1"
msgstr "Vis kun godkendelser for sager oprettet før %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Vis kun ekstrafelter for:"
@@ -4189,11 +5375,15 @@ msgstr "Vis kun ekstrafelter for:"
msgid "Open"
msgstr "Ã…ben"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Ã…bne sager"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Ã…bn URL"
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Ã…bn den"
@@ -4201,7 +5391,7 @@ msgstr "Ã…bn den"
msgid "Open requests"
msgstr "Ã…bne sager"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Ã…bne sager"
@@ -4213,15 +5403,19 @@ msgstr "Ã…bn sager (fra liste) i et nyt vindue"
msgid "Open tickets (from listing) in another window"
msgstr "Ã…bn sager (fra liste) i et andet vindue"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Ã…bn sager ved korrespondance"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Valgmuligheder"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Sorteret efter"
@@ -4229,61 +5423,55 @@ msgstr "Sorteret efter"
msgid "Ordering and sorting"
msgstr "Sortering"
-#: html/Admin/Users/Modify.html:141
-#: html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organisation"
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
-#: html/Approvals/Elements/Approve:53
msgid "Originating ticket: #%1"
msgstr "Oprindelig sag: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Udgående e-mail omkring en kommentar er gemt"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Udgående e-mail gemt"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Tid overskredet, prioritet går mod"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Egne sager"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "EgenSag"
-#: etc/initialdata:38
-#: html/Elements/QuickCreate:56
-#: html/Search/Elements/PickBasics:101
-#: html/Ticket/Create.html:72
-#: html/Ticket/Elements/EditBasics:61
-#: html/Ticket/Elements/EditPeople:64
-#: html/Ticket/Elements/EditPeople:65
-#: html/Ticket/Elements/Reminders:129
-#: html/Ticket/Elements/ShowPeople:48
-#: html/Ticket/Update.html:62
-#: lib/RT/ACE_Overlay.pm:110
-#: lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Ejer"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr "Ejer '%1' har ikke rettigheder til at eje denne sag."
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
msgstr "Ejer ændret fra %1 til %2"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "Ejer kunne ikke defineres."
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
-#: lib/RT/Transaction_Overlay.pm:672
msgid "Owner forcibly changed from %1 to %2"
msgstr "Ejer tvungent ændret fra %1 til %2"
@@ -4291,53 +5479,60 @@ msgstr "Ejer tvungent ændret fra %1 til %2"
msgid "Owner is"
msgstr "Ejer er"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "EjerNavn"
+
#: NOT FOUND IN SOURCE
msgid "PVCS Files"
msgstr "PVCS-filer"
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-#: html/Elements/TicketList:78
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Side"
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Side %1 af %2"
-#: html/Admin/Users/Modify.html:198
-#: html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Side 1 af 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Side ikke fundet"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Personsøger"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
msgstr "Personsøgertelefon"
-#: html/Elements/EditLinks:144
-#: html/Elements/EditLinks:76
-#: html/Elements/ShowLinks:68
-#: html/Ticket/Create.html:222
-#: html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Forældre"
-#: html/Elements/Login:95
-#: html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Adgangskode"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Adgangskodepåmindelse"
-#: lib/RT/Transaction_Overlay.pm:781
-#: lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Adgangskode ændret"
-#. ($RT::MinimumPasswordLength)
-#: lib/RT/User_Overlay.pm:1037
-#: lib/RT/User_Overlay.pm:214
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Adgangskode skal være på mindst %1 karakterer"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Adgangskode sat"
@@ -4345,152 +5540,76 @@ msgstr "Adgangskode sat"
msgid "Password too short"
msgstr "Adgangskode for kort"
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
-#: html/User/Prefs.html:240
msgid "Password: %1"
msgstr "Adgangskode: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Adgangskode: Adgang afvist"
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "KodeordsÆndring"
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Adgangskoder stemmer ikke overens."
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Adgangskoder stemmer ikke overens. Din adgangskode er ikke blevet ændret."
-#: html/Ticket/Elements/ShowSummary:62
-#: html/Ticket/Elements/Tabs:119
-#: html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "Sti til sendmail"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Personer"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Udfør en brugerdefineret handling"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr "Perl Include stier (@INC)"
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Perl-konfiguration"
-#: lib/RT/ACE_Overlay.pm:251
-#: lib/RT/ACE_Overlay.pm:257
-#: lib/RT/ACE_Overlay.pm:580
-#: lib/RT/ACE_Overlay.pm:590
-#: lib/RT/ACE_Overlay.pm:600
-#: lib/RT/ACE_Overlay.pm:665
-#: lib/RT/Attribute_Overlay.pm:158
-#: lib/RT/Attribute_Overlay.pm:164
-#: lib/RT/Attribute_Overlay.pm:405
-#: lib/RT/Attribute_Overlay.pm:414
-#: lib/RT/Attribute_Overlay.pm:427
-#: lib/RT/CurrentUser.pm:116
-#: lib/RT/CurrentUser.pm:125
-#: lib/RT/CustomField_Overlay.pm:1017
-#: lib/RT/CustomField_Overlay.pm:1138
-#: lib/RT/CustomField_Overlay.pm:1281
-#: lib/RT/CustomField_Overlay.pm:172
-#: lib/RT/CustomField_Overlay.pm:189
-#: lib/RT/CustomField_Overlay.pm:200
-#: lib/RT/CustomField_Overlay.pm:374
-#: lib/RT/CustomField_Overlay.pm:403
-#: lib/RT/CustomField_Overlay.pm:763
-#: lib/RT/CustomField_Overlay.pm:936
-#: lib/RT/CustomField_Overlay.pm:971
-#: lib/RT/Group_Overlay.pm:1117
-#: lib/RT/Group_Overlay.pm:1121
-#: lib/RT/Group_Overlay.pm:1130
-#: lib/RT/Group_Overlay.pm:1240
-#: lib/RT/Group_Overlay.pm:1244
-#: lib/RT/Group_Overlay.pm:1250
-#: lib/RT/Group_Overlay.pm:445
-#: lib/RT/Group_Overlay.pm:542
-#: lib/RT/Group_Overlay.pm:620
-#: lib/RT/Group_Overlay.pm:628
-#: lib/RT/Group_Overlay.pm:726
-#: lib/RT/Group_Overlay.pm:730
-#: lib/RT/Group_Overlay.pm:736
-#: lib/RT/Group_Overlay.pm:922
-#: lib/RT/Group_Overlay.pm:926
-#: lib/RT/Group_Overlay.pm:939
-#: lib/RT/Queue_Overlay.pm:1054
-#: lib/RT/Queue_Overlay.pm:140
-#: lib/RT/Queue_Overlay.pm:158
-#: lib/RT/Queue_Overlay.pm:657
-#: lib/RT/Queue_Overlay.pm:667
-#: lib/RT/Queue_Overlay.pm:681
-#: lib/RT/Queue_Overlay.pm:819
-#: lib/RT/Queue_Overlay.pm:828
-#: lib/RT/Queue_Overlay.pm:841
-#: lib/RT/Scrip_Overlay.pm:149
-#: lib/RT/Scrip_Overlay.pm:160
-#: lib/RT/Scrip_Overlay.pm:224
-#: lib/RT/Scrip_Overlay.pm:538
-#: lib/RT/Template_Overlay.pm:108
-#: lib/RT/Template_Overlay.pm:277
-#: lib/RT/Ticket_Overlay.pm:1357
-#: lib/RT/Ticket_Overlay.pm:1367
-#: lib/RT/Ticket_Overlay.pm:1381
-#: lib/RT/Ticket_Overlay.pm:1522
-#: lib/RT/Ticket_Overlay.pm:1532
-#: lib/RT/Ticket_Overlay.pm:1546
-#: lib/RT/Ticket_Overlay.pm:1663
-#: lib/RT/Ticket_Overlay.pm:1983
-#: lib/RT/Ticket_Overlay.pm:2126
-#: lib/RT/Ticket_Overlay.pm:2296
-#: lib/RT/Ticket_Overlay.pm:2346
-#: lib/RT/Ticket_Overlay.pm:2525
-#: lib/RT/Ticket_Overlay.pm:2538
-#: lib/RT/Ticket_Overlay.pm:2614
-#: lib/RT/Ticket_Overlay.pm:2627
-#: lib/RT/Ticket_Overlay.pm:2748
-#: lib/RT/Ticket_Overlay.pm:2762
-#: lib/RT/Ticket_Overlay.pm:2990
-#: lib/RT/Ticket_Overlay.pm:3000
-#: lib/RT/Ticket_Overlay.pm:3005
-#: lib/RT/Ticket_Overlay.pm:3224
-#: lib/RT/Ticket_Overlay.pm:3228
-#: lib/RT/Ticket_Overlay.pm:3371
-#: lib/RT/Ticket_Overlay.pm:3497
-#: lib/RT/Transaction_Overlay.pm:516
-#: lib/RT/Transaction_Overlay.pm:523
-#: lib/RT/Transaction_Overlay.pm:551
-#: lib/RT/Transaction_Overlay.pm:558
-#: lib/RT/User_Overlay.pm:1176
-#: lib/RT/User_Overlay.pm:1856
-#: lib/RT/User_Overlay.pm:369
-#: lib/RT/User_Overlay.pm:735
-#: lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Adgang afvist"
-#: lib/RT/Template_Overlay.pm:238
-#: lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr "Adgang afvist"
-#: lib/RT/Template_Overlay.pm:372
+#: NOT FOUND IN SOURCE
msgid "Permissions denied"
msgstr "Tilladelser ikke givet"
-#: html/User/Elements/Tabs:56
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "Personlige instrument paneler"
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Personlige grupper"
-#: html/User/Groups/index.html:51
-#: html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Personlige grupper"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Personlige grupper:"
-#: html/Admin/Users/Modify.html:180
-#: html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Telefonnumre"
@@ -4498,39 +5617,72 @@ msgstr "Telefonnumre"
msgid "Placeholder"
msgstr "Placeholder"
-#: html/Elements/Header:93
-#: html/Elements/Tabs:91
-#: html/SelfService/Elements/Tabs:95
-#: html/SelfService/Prefs.html:46
-#: html/User/Prefs.html:46
-#: html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Tjek venligst URL igen."
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr "Mulige skjulte søgninger"
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Præferencer"
-#. ($pane, $UserObj->Name)
-#: html/Admin/Users/MyRT.html:75
+#: NOT FOUND IN SOURCE
msgid "Preferences %1 for user %2 ."
msgstr "Præferencer %1 for bruger %2 ."
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr "Præferencer %1 for bruger %2."
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
-#: html/Prefs/MyRT.html:141
msgid "Preferences saved for %1."
msgstr "Præferencer gemt for %1."
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "Præferencer for bruger %1 gemt."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "Indstillinger gemt."
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Foretrukne nøgle: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Foretrukket nøgle"
+
#: NOT FOUND IN SOURCE
msgid "Prefs"
msgstr "Præferencer"
-#: lib/RT/Action/Generic.pm:195
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Forbered tømning"
-#: html/Helpers/CalPopup.html:56
-#: html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Forr."
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Forrige"
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Forrige side"
@@ -4542,87 +5694,92 @@ msgstr "Forrige side"
msgid "Pri"
msgstr "Pri"
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
-#: lib/RT/ACE_Overlay.pm:157
-#: lib/RT/ACE_Overlay.pm:239
-#: lib/RT/ACE_Overlay.pm:569
msgid "Principal %1 not found."
msgstr "Principal %1 ikke fundet."
-#: html/Search/Elements/PickBasics:147
-#: html/Ticket/Create.html:181
-#: html/Ticket/Elements/EditBasics:92
-#: html/Ticket/Elements/ShowBasics:72
-#: lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Udskriv denne besked"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Prioritet"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Prioritet starter ved"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Privat"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Privat:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Privat nøgle"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Privilegeret"
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
-#: html/Admin/Users/Modify.html:342
-#: html/User/Prefs.html:231
msgid "Privileged status: %1"
msgstr "Privilegeret status: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Privilegerede brugere"
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Product area"
msgstr "Produktområde"
-#: etc/initialdata:23
-#: etc/initialdata:29
-#: etc/initialdata:35
-#: etc/initialdata:59
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudogruppe til internt brug"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "Offentlig nøgle '0x%1' er påkrævet for at kunne verificere signatur"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Forespørgsler"
+
+#: share/html/Search/Edit.html:64
msgid "Query"
msgstr "Søgning"
-#: html/Search/Build.html:121
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Søgedefinition"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "Søgning:"
-#: html/Elements/QueueSummary:48
-#: html/Elements/QuickCreate:54
-#: html/Search/Elements/PickBasics:71
-#: html/SelfService/Create.html:54
-#: html/Ticket/Create.html:62
-#: html/Ticket/Elements/EditBasics:57
-#: html/Ticket/Elements/ShowBasics:76
-#: html/Tools/Reports/CreatedByDates.html:85
-#: html/Tools/Reports/ResolvedByDates.html:86
-#: html/Tools/Reports/ResolvedByOwner.html:66
-#: html/User/Elements/DelegateRights:101
-#: lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Kø"
-#. ($id)
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
-#: html/Admin/Queues/CustomField.html:63
-#: html/Admin/Queues/Scrip.html:61
-#: html/Admin/Queues/Scrips.html:69
-#: html/Admin/Queues/Templates.html:65
+#. ($id)
msgid "Queue %1 not found"
msgstr "Kø %1 ikke fundet"
@@ -4630,7 +5787,7 @@ msgstr "Kø %1 ikke fundet"
msgid "Queue '%1' not found\\n"
msgstr "Kø '%1' ikke fundet\\n"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Navn på kø"
@@ -4638,59 +5795,95 @@ msgstr "Navn på kø"
msgid "Queue Scrips"
msgstr "Kø-scrips"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Kø eksisterer allerede"
-#: lib/RT/Queue_Overlay.pm:374
-#: lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Kø kunne ikke oprettes"
-#: html/Ticket/Create.html:244
-#: lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Kø kunne ikke indlæses."
-#: docs/design_docs/string-extraction-guide.txt:83
-#: lib/RT/Queue_Overlay.pm:384
-#: lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Kø oprettet"
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr "Kø deaktiveret"
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr "Kø aktiveret"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Kø id"
+
#: NOT FOUND IN SOURCE
msgid "Queue is not specified."
msgstr "Kø ikke angivet."
-#: html/SelfService/Display.html:126
-#: lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Kø ikke fundet"
-#: html/Admin/Elements/Tabs:59
-#: html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "kø rettigheder"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "Køs nøgle"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr "KøAdminCc"
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr "KøCc"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "KøNavn"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr "KøObservatør"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Køer"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Køer som jeg administrerer"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Køer: Jeg er en AdminCc for"
-#: html/Elements/Quicksearch:47
-#: html/Prefs/Elements/Tabs:58
-#: html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Hurtigsøgning"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Hurtigoprettelse af sager"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr "RFC2616"
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
@@ -4698,9 +5891,8 @@ msgstr "RSS"
msgid "RT %1"
msgstr "RT %1"
-#. ($RT::VERSION, $RT::rtname)
-#: docs/design_docs/string-extraction-guide.txt:70
-#: lib/RT/StyleGuide.pod:796
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 for %2"
@@ -4712,11 +5904,14 @@ msgstr "RT %1 fra <a href=\"http://bestpractical.com\">Best Practical Solutions,
msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-#: html/Admin/index.html:46
-#: html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "RT-administration"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "RT Administrator Email"
+
#: NOT FOUND IN SOURCE
msgid "RT Authentication error."
msgstr "RT-godkendelsesfejl."
@@ -4725,6 +5920,10 @@ msgstr "RT-godkendelsesfejl."
msgid "RT Bounce: %1"
msgstr "RT-afvisning: %1"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT Configuration error"
msgstr "RT-konfigurationsfejl"
@@ -4733,8 +5932,7 @@ msgstr "RT-konfigurationsfejl"
msgid "RT Critical error. Message not recorded!"
msgstr "RT kritisk fejl. Meddelelse ikke gemt!"
-#: html/Elements/Error:63
-#: html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "RT-fejl"
@@ -4742,39 +5940,40 @@ msgstr "RT-fejl"
msgid "RT Received mail (%1) from itself."
msgstr "RT modtog e-mail (%1) fra sig selv"
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT Self Service / Closed Tickets"
msgstr "RT selvbetjening / lukkede sager"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr "RT størrelse"
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "RT variable faktorer"
-#: html/Admin/Elements/SystemTabs:71
-#: html/Admin/Elements/UserTabs:67
-#: html/Admin/Global/MyRT.html:1
-#: html/Admin/Global/MyRT.html:12
-#: html/Admin/Global/MyRT.html:4
-#: html/Admin/Global/index.html:84
-#: html/Admin/Users/MyRT.html:21
-#: html/Prefs/MyRT.html:66
-#: html/Prefs/MyRT.html:78
-#: html/User/Elements/Tabs:65
-#: html/index.html:1
-#: html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "Request Tracker - hurtigt overblik"
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
-#: html/Admin/Users/MyRT.html:30
msgid "RT at a glance for the user %1"
msgstr "Request Tracker - hurtigt overblik for bruger %1"
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr "RT kan informere dine brugere om nye sager eller nye svar på eksisterende sager. Fortæl os hvor sendmail (eller et sendmail kompatibelt binært program, såsom postfix) kan findes. RT skal også vide hvem der skal kontaktes hvis den modtager en ugyldig email, den email addresse der angives til dette formål må ikke være en der peger tilbage ind i RT."
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr "RT kan medtage indhold fra en anden web-service, når dette ekstrafelt vises."
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "RT kan gøre dette ekstrafelts værdier til hyperlinks til en anden tjeneste."
@@ -4790,7 +5989,7 @@ msgstr "RT kunne ikke finde rekvirent via sit eksterne databaseopslag"
msgid "RT couldn't find the queue: %1"
msgstr "RT kunne ikke finde køen: %1"
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT kunne ikke gemme din session."
@@ -4798,9 +5997,8 @@ msgstr "RT kunne ikke gemme din session."
msgid "RT couldn't validate this PGP signature. \\n"
msgstr "RT kunne ikke validere denne PGP-signatur. \\n"
-#. ($RT::rtname)
-#: html/Elements/Logo:49
-#: html/Elements/PageLayout:172
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT for %1"
@@ -4816,11 +6014,27 @@ msgstr "RT har behandlet dine kommandoer"
msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
msgstr "RT er &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. Bliver distribueret under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 af 'GNU General Public License'.</a>"
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr "RT bliver brugt af firmaer der figurerer på Fortune 100-listen, enmands firmaer, statslige organer, undervisnings institutioner, hospitaler, ikke statsstyrede organisationer (NGO), biblioteker, open source projekter og alle mulige andre typer af organisationer på alle syv kontinenter."
+
#: NOT FOUND IN SOURCE
msgid "RT thinks this message may be a bounce"
msgstr "RT tror, at denne besked er en afvisning"
-#: html/Search/Simple.html:60
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT vil oprette forbindelse til databasen ved hjælp af denne bruger. Den vil blive oprettet for dig."
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT vil oprette en bruger kaldet \"root\" og anvende dette som brugerens password"
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "RT vil kigge efter alt andet, som du indtaster i sagsemnerne."
@@ -4828,61 +6042,83 @@ msgstr "RT vil kigge efter alt andet, som du indtaster i sagsemnerne."
msgid "RT will process this message as if it were unsigned.\\n"
msgstr "RT vil behandle denne besked, som om den ikke var underskrevet.\\n"
-#: html/Admin/CustomFields/Modify.html:108
-#: html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr "RT vil erstatte <tt>__ID__</tt> og <tt>__EkstraFelt__</tt> med henholdsvis sagsnummer og ekstrafeltværdi"
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr "RT anvender denne streng til at identificere præcis denne instans af RT, den vil søge i emne felterne i indkomne mails efter denne streng for at bestemme hvilken sag en given mail hører til. Vi anbefaler at du indtaster dit internet domæne i dette felt. (F.eks. eksempel.dk)"
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr "RT kan samarbejde med et antal forskellige databaser. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> og <b>SQLite</b> er alle understøttede."
+
#: NOT FOUND IN SOURCE
msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
msgstr "RT's e-mail-kommandotilstand kræver PGP-verificering. Enten har du ikke underskrevet din besked, eller også kunne din signatur ikke verificeres."
-#: html/Admin/Users/Modify.html:79
-#: html/User/Prefs.html:69
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Fulde navn"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "FuldeNavn"
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Modtager"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr "Rekursivt medlem"
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:725
msgid "Reference by %1 added"
msgstr "Reference fra %1 tilføjet"
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:765
msgid "Reference by %1 deleted"
msgstr "Reference fra %1 slettet"
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:722
msgid "Reference to %1 added"
msgstr "Reference til %1 tilføjet"
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:762
msgid "Reference to %1 deleted"
msgstr "Reference til %1 slettet"
-#: html/Elements/EditLinks:103
-#: html/Elements/EditLinks:156
-#: html/Elements/ShowLinks:92
-#: html/Ticket/Create.html:225
-#: html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Refereret til af"
-#: html/Elements/EditLinks:152
-#: html/Elements/EditLinks:94
-#: html/Elements/SelectLinkType:49
-#: html/Elements/ShowLinks:82
-#: html/Ticket/Create.html:224
-#: html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr "RefereretTilAf"
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Refererer til"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr "ReferererTil"
+
#: NOT FOUND IN SOURCE
msgid "Refine"
msgstr "Præciser"
@@ -4891,86 +6127,133 @@ msgstr "Præciser"
msgid "Refine search"
msgstr "Præciser søgning"
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Genopfrisk"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
-#: html/Elements/Refresh:57
msgid "Refresh this page every %1 minutes."
msgstr "Opdater denne side hver %1 minut."
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:811
msgid "Reminder '%1' added"
msgstr "Påmindelse '%1' tilføjet"
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:824
msgid "Reminder '%1' completed"
msgstr "PÃ¥mindelse '%1' afsluttet"
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:817
msgid "Reminder '%1' reopened"
msgstr "Påmindelse '%1' genåbnet"
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
-#: html/Ticket/Reminders.html:46
msgid "Reminder ticket #%1"
msgstr "PÃ¥mindelse for sag #%1"
-#: html/Elements/MyReminders:48
-#: html/Ticket/Elements/ShowSummary:75
-#: html/Ticket/Elements/Tabs:122
-#: html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "PÃ¥mindelser"
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
-#: html/Ticket/Reminders.html:50
msgid "Reminders for ticket #%1"
msgstr "PÃ¥mindelser for sag #%1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Fjern AdminCc"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Fjern bogmærker"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Fjern Cc"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Fjern rekvirent"
-#: html/Ticket/Elements/ShowTransaction:179
-#: html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Svar"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Svaradresse"
-#: html/Search/Bulk.html:129
-#: html/Ticket/ModifyAll.html:94
-#: html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Svar til rekvirenter"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Svar på sager"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "SvarPÃ¥Sag"
-#: html/Tools/Elements/Tabs:59
-#: html/Tools/Reports/index.html:46
-#: html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Rapporter"
-#: etc/initialdata:44
-#: lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Rekvirent"
@@ -4982,73 +6265,81 @@ msgstr "Rekvirent e-mail-adresse"
msgid "Requestor(s)"
msgstr "Rekvirent(er)"
-#: html/SelfService/Create.html:63
-#: html/Ticket/Create.html:80
-#: html/Ticket/Elements/EditPeople:69
-#: html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr "RekvirentGruppe"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Rekvirenter"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Sager skulle være forfaldne om"
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
-#: lib/RT/Attribute_Overlay.pm:146
msgid "Required parameter '%1' not specified"
msgstr "Påkrævet parameter '%1' ikke angivet"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Nulstil"
-#: html/Admin/Users/MyRT.html:15
-#: html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr "Nulstil hemmelig autentificering token"
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr "Sæt tilbage til standard"
-#: html/Admin/Users/Modify.html:183
-#: html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Hjemme"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Løs"
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
-#: html/Ticket/Update.html:156
msgid "Resolve ticket #%1 (%2)"
msgstr "Løs sag #%1 (%2)"
-#: etc/initialdata:323
-#: html/Elements/SelectDateType:49
-#: lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Løst"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Løst af ejer"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Løst i datorækkefølge"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Sager løst i en periode, fordelt pr. ejer"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Sager løst, fordelt pr. ejer"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr "LøstRelativt"
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr "Svar"
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "Svar til rekvirenter"
-#: html/Elements/ListActions:46
-#: html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Resultater"
@@ -5056,12 +6347,15 @@ msgstr "Resultater"
msgid "Results per page"
msgstr "Resultater pr. side"
-#: html/Admin/Users/Modify.html:126
-#: html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Vend tilbage til sagen"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Gentag adgangskoden"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "GÃ¥ tilbage"
@@ -5069,54 +6363,48 @@ msgstr "GÃ¥ tilbage"
msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
msgstr "Rettighed %1 ikke fundet for %2 %3 i område %4 (%5)\\n"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Rettighed overdraget"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Rettighed tildelt"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Rettighed indlæst"
-#: lib/RT/ACE_Overlay.pm:695
-#: lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Rettighed kunne ikke inddrages"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Rettighed ikke fundet"
-#: lib/RT/ACE_Overlay.pm:560
-#: lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Rettighed ikke indlæst."
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Rettighed inddraget"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Rettigheder"
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
-#: html/Admin/CustomFields/GroupRights.html:129
-#: lib/RT/Interface/Web.pm:961
msgid "Rights could not be granted for %1"
msgstr "Rettigheder kunne ikke tildeles %1"
-#. ($object_type)
-#: html/Admin/CustomFields/GroupRights.html:156
-#: lib/RT/Interface/Web.pm:990
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "Rettigheder kunne ikke inddrages for %1"
-#: html/Admin/Global/GroupRights.html:72
-#: html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Roller"
@@ -5124,96 +6412,115 @@ msgstr "Roller"
msgid "RootApproval"
msgstr "RodGodkendelse"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Rækker"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Rækker pr. boks"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Rækker pr. side"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr "SQLite er en database der udmærker sig ved ikke at have behov for en selvstændig server eller nogen form for konfiguration. RT's udviklere anbefaler denne database til test, demo og udviklingsformål, men ikke til høj-volumen produktions systemer."
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Lør"
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Lør."
-#: html/Prefs/MyRT.html:72
-#: html/Prefs/Quicksearch.html:64
-#: html/Prefs/Search.html:69
-#: html/Search/Elements/EditSearches:70
-#: html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Lørdag"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Gem"
-#: html/Admin/Global/Template.html:67
-#: html/Admin/Groups/Modify.html:88
-#: html/Admin/Queues/Modify.html:111
-#: html/Admin/Queues/People.html:126
-#: html/Admin/Users/Modify.html:239
-#: html/Prefs/Quicksearch.html:64
-#: html/Prefs/SearchOptions.html:63
-#: html/SelfService/Prefs.html:58
-#: html/Ticket/Modify.html:60
-#: html/Ticket/ModifyAll.html:127
-#: html/Ticket/ModifyDates.html:60
-#: html/Ticket/ModifyLinks.html:61
-#: html/Ticket/ModifyPeople.html:60
-#: html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Gem ændringer"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Gem præferencer"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Gem som ny"
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Gem ændringer"
-#. ($name)
-#: lib/RT/SavedSearch.pm:173
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Gemte %1 %2"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Gemt søgning %1 kunne ikke findes"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr "Gemte diagrammer"
+
+#: NOT FOUND IN SOURCE
msgid "Saved search %1"
msgstr "Gemt søgning %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Gemte søgninger"
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
-#. ($scrip->Id)
-#: html/Admin/Elements/ListGlobalScrips:60
-#: html/Admin/Global/Scrip.html:77
-#: html/Admin/Queues/Scrip.html:84
msgid "Scrip #%1"
msgstr "Scrip #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip oprettet"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Scrip-felter"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip slettet"
-#: html/Admin/Elements/QueueTabs:67
-#: html/Admin/Elements/SystemTabs:54
-#: html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrips"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Scrips og modtagere"
+
#: NOT FOUND IN SOURCE
msgid "Scrips for %1\\n"
msgstr "Scrip for %1\\n"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Scrips der gælder for alle køer"
-#: html/Elements/SimpleSearch:48
-#: html/Search/Simple.html:65
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Søg"
@@ -5221,168 +6528,200 @@ msgstr "Søg"
msgid "Search Criteria"
msgstr "Søgekriterier"
-#: html/Prefs/SearchOptions.html:47
-#: html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Søgepræferencer"
-#: lib/RT/SavedSearch.pm:115
+#: NOT FOUND IN SOURCE
msgid "Search attribute load failure"
msgstr "Indlæsningsfejl på søgeegenskab"
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Søg efter godkendelser"
-#: html/Search/Simple.html:69
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Søg efter sager"
-#: html/Search/Simple.html:57
+#: NOT FOUND IN SOURCE
msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name"
msgstr "Søg efter sager. Indtast <strong>ID</strong>-numre, <strong>køer</strong> inddelt efter navn."
-#: html/User/Elements/Tabs:62
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Søg efter sager. Angiv <strong>id</strong> numre, <strong>køer</strong> ved navn, ejere ved <strong>brugernavn</strong> og rekvirenter ved <strong>email adresser</strong>."
+
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Søgemuligheder"
-#. ($PrimaryGroupBy)
-#: html/Search/Chart.html:56
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Søgeresultater fordelt pr. %1"
-#. ($msg)
-#: lib/RT/SavedSearch.pm:203
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr "Interval mellem genopfriskning af søgeresultater"
+
+#: NOT FOUND IN SOURCE
msgid "Search update: %1"
msgstr "Søgeopdatering: %1"
-#: html/Search/Simple.html:59
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "Det kan tage lang tid at søge på den fulde tekst i hver sag, men hvis det er nødvendigt at gøre det, kan du søge efter hvilket som helst ord i den komplette sagshistorik ved at taste <b>fulltext:<i>ord</i></b>."
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Sikkerhed:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Se også:"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr "Se værdier for det brugerdefinerede felt"
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Se ekstrafelter"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Se udgående e-mail-beskeder og deres modtagere"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Se private kommentarer for sager"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Se resumé af sager"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "SeEkstrafelt"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "SeInstrumentPanel"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "SeGruppe"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "SeGruppeInstrumentPanel"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "SeEgetInstrumentPanel"
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "SeKø"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
msgid "Select"
msgstr "Vælg"
-#: html/Admin/CustomFields/index.html:46
-#: html/Admin/CustomFields/index.html:49
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Vælg databasetype"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Vælg et ekstrafelt"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Vælg en gruppe"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Vælg en kø"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Vælg en kø til din nye sag"
-#: html/Admin/Users/index.html:46
-#: html/Admin/Users/index.html:49
-#: html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Vælg en bruger"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Vælg et andet sprog"
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Vælg ekstrafelt"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Vælg brugerdefinerede feltet til alle køer"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Vælg ekstrafelter for alle brugergrupper"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Vælg ekstrafelter for alle brugere"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Vælg ekstrafelter for sager i alle køer"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Vælg ekstrafelter for transaktioner på sager i alle køer"
-#: html/Admin/Elements/GroupTabs:75
-#: html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Vælg instrument panel"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Vælg gruppe"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Vælg flere værdier"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Vælg en værdi"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Vælg kø"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Vælg køer, der skal vises på siden \"Request Tracker - hurtigt overblik\""
-#: html/Admin/Global/Scrip.html:59
-#: html/Admin/Global/Scrips.html:57
-#: html/Admin/Queues/Scrip.html:67
-#: html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Vælg scrip"
-#: html/Admin/Global/Template.html:78
-#: html/Admin/Global/Templates.html:57
-#: html/Admin/Queues/Template.html:76
-#: html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Vælg skabelon"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Vælg op til %1 værdier"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Vælg bruger"
@@ -5394,15 +6733,19 @@ msgstr "VælgFlere"
msgid "SelectSingle"
msgstr "VælgEnkelt"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Valgte ekstrafelter"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "Den valgte nøgle har enten ingen troværdighed eller den eksisterer ikke længere."
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Valgte objekter"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Det udvalgte er ændret. Gem dine ændringer."
@@ -5410,95 +6753,132 @@ msgstr "Det udvalgte er ændret. Gem dine ændringer."
msgid "Self Service"
msgstr "Selvbetjening"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Email afsendt"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Send e-mail til alle observatører"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Send e-mail til alle observatører som en \"kommentar\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr "Send mail til ejer og alle rekvirenter"
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr "Send mail til ejer og alle rekvirenter i form af en kommentar"
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Send e-mail til rekvirenter og Cc'ere"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Send e-mail til rekvirent og Cc'ere som en kommentar"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Sender en besked til rekvirenterne"
-#: etc/initialdata:125
-#: etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Sender e-mail til synligt angivne Cc'ere og Bcc'ere"
-#: etc/initialdata:94
-#: etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Sender e-mail til Cc'erne"
-#: etc/initialdata:90
-#: etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Sender e-mail to Cc'ere som en kommentar"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Sender e-mail til de administrative Cc'ere"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Sender e-mail til de administrative Cc'ere som en kommentar"
-#: etc/initialdata:82
-#: etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Sender e-mail til ejeren"
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Sep"
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Sep."
-#: html/Ticket/Elements/ShowTransaction:158
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "September"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Indstillinger"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Vis"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Vis godkendelser"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Vis kolonner"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Vis resultater"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr "Vis egenskaber for sager på %1 niveau"
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Vis godkendte sager"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "Vis også"
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Vis stamdata"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Vis afviste sager"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Vis detaljer"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Vis henvisningsbeskrivelser"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr "Vis den ældste historie først"
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Vis afventende sager"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Vis sager, som afventer andre godkendelser"
@@ -5514,44 +6894,68 @@ msgstr "Vis resumé for sager"
msgid "ShowACL"
msgstr "VisACL"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr "VisGodkendelserFane"
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "VisKonfigTab"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "VisUdgåendeEmail"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "VisGemteSøgninger"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "VisScrips"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "VisSkabelon"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "VisSag"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "VisSagKommentarer"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "Makulator"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr "Der skal eksistere et katalog som makulatoren kan skrive dumps i. Du bedes venligst verificere at kataloget <span class=\"file-path\">%1</span> findes og at din webserver har rettigheder til at skrive i det."
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "Underskriv"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "Underskriv som standard"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Tilmeld som sagsrekvirent, sag eller kø-Cc"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Tilmeld som sag eller kø-AdminCc"
-#: html/Admin/Users/Modify.html:230
-#: html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Signatur"
@@ -5559,32 +6963,47 @@ msgstr "Signatur"
msgid "Signed in as %1"
msgstr "Logget ind som %1"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Underskrivning slået fra"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "Underskrivning slået til"
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Enkel søgning"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Enkelt"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Størrelse"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Spring menu over"
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr "Springer over bruger som er slået fra"
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Lille"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "Nogle browsere indlæser kun indhold fra det samme domæne som din RT-server."
-#: html/Admin/Elements/AddCustomFieldValue:49
-#: html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Sorter"
@@ -5600,7 +7019,19 @@ msgstr "Sorter resultat efter"
msgid "SortOrder"
msgstr "SorteringsRækkefølge"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Sortering"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Specificer om dette er en daglig eller ugentlig kørsel."
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Regneark"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Trin"
@@ -5612,9 +7043,7 @@ msgstr "Sat i bero"
msgid "Start page"
msgstr "Startside"
-#: html/Elements/SelectDateType:48
-#: html/Ticket/Elements/EditDates:53
-#: html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Startet"
@@ -5622,10 +7051,11 @@ msgstr "Startet"
msgid "Started date '%1' could not be parsed"
msgstr "Startdato '%1' kunne ikke fortolkes"
-#: html/Elements/SelectDateType:52
-#: html/Ticket/Create.html:208
-#: html/Ticket/Elements/EditDates:48
-#: html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr "StartetRelativt"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Starter"
@@ -5637,27 +7067,24 @@ msgstr "Starter den"
msgid "Starts date '%1' could not be parsed"
msgstr "Startdato '%1' kunne ikke fortolkes"
-#: html/Admin/Users/Modify.html:162
-#: html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr "StarterRelativt"
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Stat"
-#: html/Search/Elements/PickBasics:87
-#: html/SelfService/Update.html:57
-#: html/Ticket/Create.html:66
-#: html/Ticket/Elements/EditBasics:53
-#: html/Ticket/Elements/ShowBasics:52
-#: html/Ticket/Update.html:59
-#: lib/RT/Ticket_Overlay.pm:1166
-#: lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Status"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Statusændring"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Status ændret fra %1 til %2"
@@ -5665,50 +7092,57 @@ msgstr "Status ændret fra %1 til %2"
msgid "StatusChange"
msgstr "StatusÆndring"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Stjæl"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Stjæl sager"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "StjælSag"
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Trin %1 af %2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
-#: lib/RT/Transaction_Overlay.pm:678
msgid "Stolen from %1"
msgstr "Stjålet fra %1"
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Stil"
-#: html/Elements/QuickCreate:52
-#: html/Elements/SelectAttachmentField:47
-#: html/Search/Bulk.html:132
-#: html/SelfService/Create.html:79
-#: html/SelfService/Update.html:65
-#: html/Ticket/Create.html:108
-#: html/Ticket/Elements/EditBasics:48
-#: html/Ticket/Elements/Reminders:125
-#: html/Ticket/ModifyAll.html:100
-#: html/Ticket/Update.html:82
-#: lib/RT/Ticket_Overlay.pm:1162
-#: lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Emne"
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr "Emne mærke"
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
-#: docs/design_docs/string-extraction-guide.txt:89
-#: lib/RT/StyleGuide.pod:815
-#: lib/RT/Transaction_Overlay.pm:700
msgid "Subject changed to %1"
msgstr "Emne ændret til %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr "Emnemærke ændret til %1"
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Indsend"
@@ -5716,114 +7150,174 @@ msgstr "Indsend"
msgid "Submit Workflow"
msgstr "Godkend arbejdsgang"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "Abonner"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "Abonner på instrument panel %1"
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "Abonner på instrument paneler"
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "AbonnerInstrumentPanel"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "Abonner på instrument panel %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "Abonnement"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr "Abonnement kunne ikke oprettes"
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Lykkedes"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Data dekrypteret uden problemer"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Data krypteret uden problemer"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Søn"
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Søn."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Søndag"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "Superbruger"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Suspenderet"
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "System"
-#: html/Admin/Elements/ToolTabs:54
-#: html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Systemkonfiguration"
-#: html/Admin/CustomFields/GroupRights.html:128
-#: html/Admin/CustomFields/GroupRights.html:155
-#: html/Admin/CustomFields/UserRights.html:128
-#: html/Admin/CustomFields/UserRights.html:98
-#: html/Admin/Elements/SelectRights:106
-#: lib/RT/ACE_Overlay.pm:584
-#: lib/RT/Interface/Web.pm:960
-#: lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "System instrument paneler"
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Systemforvalg"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Systemfejl"
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
-#: lib/RT/Transaction_Overlay.pm:224
-#: lib/RT/Transaction_Overlay.pm:230
msgid "System Error: %1"
msgstr "Systemfejl: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Systemværktøjer"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Systemfejl. Rettighed ikke overdraget."
-#: lib/RT/ACE_Overlay.pm:163
-#: lib/RT/ACE_Overlay.pm:228
-#: lib/RT/ACE_Overlay.pm:323
-#: lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Systemfejl. Rettighed ikke tildelt."
-#: html/Admin/CustomFields/GroupRights.html:58
-#: html/Admin/Global/GroupRights.html:56
-#: html/Admin/Groups/GroupRights.html:58
-#: html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Systemgrupper"
-#: etc/initialdata:41
-#: etc/initialdata:47
-#: etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "System rettigheder"
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "SystemRolleGruppe til internt brug"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TEST_STRENG"
-#: etc/initialdata:603
-#: html/Search/Elements/EditFormat:72
-#: html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Tag"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Tag sager"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "TagSag"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Taget"
-#: html/Admin/Elements/EditScrip:71
-#: html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr "Fortæl os lidt om hvordan vi finder den database RT kommer til at bruge"
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Skabelon"
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
-#: html/Admin/Global/Template.html:112
-#: html/Admin/Queues/Template.html:113
msgid "Template #%1"
msgstr "Skabelon #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Skabelon %1 slettet"
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Skabelon '%1' kunne ikke findes"
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Skabelon slettet"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Skabelonen er tom"
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr "Skabelonen er en obligatorisk parameter"
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Skabelon ikke fundet"
@@ -5831,17 +7325,15 @@ msgstr "Skabelon ikke fundet"
msgid "Template not found\\n"
msgstr "Skabelon ikke fundet\\n"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Skabelon fortolket"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Skabelonfortolkningsfejl"
-#: html/Admin/Elements/QueueTabs:70
-#: html/Admin/Elements/SystemTabs:57
-#: html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Skabeloner"
@@ -5853,48 +7345,51 @@ msgstr "Skabeloner til %1\\n"
msgid "Text"
msgstr "Tekst"
-#: lib/RT/CustomField_Overlay.pm:943
-#: lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr "Indholdet af tekst filen bliver ikke vist fordi dette er slået fra i præferencer."
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Det er allerede den nuværende værdi"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Det er ikke værdi for dette ekstrafelt"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Det er den samme værdi"
-#: lib/RT/ACE_Overlay.pm:305
-#: lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Den principal har allerede den rettighed"
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:753
msgid "That principal is already a %1 for this queue"
msgstr "Den principal er allerede en %1 for denne kø"
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1435
msgid "That principal is already a %1 for this ticket"
msgstr "Den principal er allerede en %1 for denne sag"
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:852
msgid "That principal is not a %1 for this queue"
msgstr "Den principal er ikke en %1 for denne kø"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
msgstr "Den principal er ikke en %1 for denne sag"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Den kø eksisterer ikke"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Denne sag har uløste afhængigheder"
@@ -5902,50 +7397,51 @@ msgstr "Denne sag har uløste afhængigheder"
msgid "That user already has that right"
msgstr "Den bruger har allerede den rettighed"
-#: lib/RT/Action/CreateTickets.pm:710
-#: lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Brugeren ejer allerede den sag"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Brugeren eksisterer ikke"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Brugeren er allerede privilegeret"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Brugeren er allerede uprivilegeret"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Brugeren er nu privilegeret"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Brugeren er nu uprivilegeret"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Den bruger må ikke eje sager i den kø"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Dette er ikke et numerisk ID"
-#: html/SelfService/Display.html:53
-#: html/Ticket/Create.html:177
-#: html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Stamdata"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "En sags CC"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "Database administratorens database password"
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "En sags administrative CC"
@@ -5953,43 +7449,114 @@ msgstr "En sags administrative CC"
msgid "The comment has been recorded"
msgstr "Kommentaren er gemt"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "Din database servers domæne navn (F.eks. 'database.eksempel.dk')."
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Den følgende kommando vil finde alle aktive sager i køen 'generel' og vil sætte deres prioritet til 99, hvis de ikke er blevet rørt i 4 timer:"
-#: NOT FOUND IN SOURCE
-msgid ""
-"The following commands were not proccessed:\\n"
-"\\n"
-msgstr ""
-"Følgende kommandoer blev ikke behandlet:\\n"
-"\\n"
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr "Følgende søgninger er blevet slettet og hver enkelt vil blive fjernet fra instrument panelet næste gang det opdateres."
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr "Følgende søgninger er muligvis ikke synlige, for alle brugere der kan se dette instrument panel."
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "Nøglen er slået fra"
-#: lib/RT/Record.pm:948
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "Nøglen er blevet trukket tilbage"
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "Nøglen er udløbet"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr "Nøglen har fuld troværdighed"
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr "Nøglen har ultimativ troværdighed"
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Den nye værdi er sat."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "Sagens ejer"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "Kunne ikke finde den ønskede side"
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Sagens rekvirent"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr "De valgte indstillinger er gemt i %1."
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr "Systemet er ikek i stand til at signere udgående email beskeder. Dette indikere normalt at løsenet ikke blev sat korrekt eller at GPG Agent er nede. Du bedes venligst informere din system administrator om dette øjeblikkeligt. De problemramte adresser er:"
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Tema"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "Adskillige af de tilgængelige nøgler er passende at bruge til kryptering."
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "Der er ulæste beskeder i denne sag."
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr "Denne nøgle har marginal troværdighed."
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "Der er ingen tilgængelige nøgler som er passende at bruge til kryptering."
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr "Der er en enkelt passende nøgle, men dens troværdighedsniveau er ikke defineret."
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Disse kommentarer er normalt ikke synlige for brugeren"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr "Disse konfigurationsmuligheder dækker nogle af de grundlæggende informationer RT behøver for at fungere. Vi skal kende navnet på din RT installation og domænenavnet hvor RT bor. Du skal også definere et løsen til din administrative bruger."
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Dette ekstrafelt gælder ikke for dette objekt"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Denne funktion er kun tilgængelig for systemadministratorer"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr "Dette kan betyde at kataloget '%1' ikke er skrivbart eller at en tabel i databasen enten mangler eller er korrumperet."
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Denne besked vil blive sendt til..."
@@ -5997,16 +7564,16 @@ msgstr "Denne besked vil blive sendt til..."
msgid "This ticket %1 %2 (%3)\\n"
msgstr "Denne sag %1 %2 (%3)\\n"
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Dette værktøj tillader brugeren at benytte vilkårlige Perl-moduler inde fra RT."
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Denne transaktion har tilsyneladende ikke noget indhold"
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
-#: html/Ticket/Elements/ShowRequestor:70
msgid "This user's %1 highest priority tickets"
msgstr "Denne brugers %1 højest prioriterede sager"
@@ -6014,39 +7581,50 @@ msgstr "Denne brugers %1 højest prioriterede sager"
msgid "This user's 25 highest priority tickets"
msgstr "Denne bruger 25 højest prioriterede sager"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Tor"
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Tors."
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Torsdag"
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Sag"
+
#: NOT FOUND IN SOURCE
msgid "Ticket # %1 %2"
msgstr "Sag # %1 %2"
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
-#: html/Ticket/ModifyAll.html:46
-#: html/Ticket/ModifyAll.html:50
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Sag #%1 Jumbo-opdatering: %2"
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "Forholdsdiagram for sag #%1"
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#: html/Approvals/Elements/ShowDependency:67
msgid "Ticket #%1: %2"
msgstr "Sag #%1: %2"
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
-#: lib/RT/Action/CreateTickets.pm:1350
-#: lib/RT/Action/CreateTickets.pm:1359
-#: lib/RT/Action/CreateTickets.pm:605
-#: lib/RT/Action/CreateTickets.pm:729
-#: lib/RT/Action/CreateTickets.pm:741
msgid "Ticket %1"
msgstr "Sag %1"
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
-#: lib/RT/Ticket_Overlay.pm:755
-#: lib/RT/Ticket_Overlay.pm:775
msgid "Ticket %1 created in queue '%2'"
msgstr "Sag %1 oprettet i kø '%2'"
@@ -6054,18 +7632,18 @@ msgstr "Sag %1 oprettet i kø '%2'"
msgid "Ticket %1 loaded\\n"
msgstr "Sag %1 indlæst\\n"
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
-#: html/Search/Bulk.html:377
msgid "Ticket %1: %2"
msgstr "Sag %1 : %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Sagens ekstrafelter"
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
-#: html/Ticket/History.html:46
-#: html/Ticket/History.html:49
msgid "Ticket History # %1 %2"
msgstr "Sagshistorik # %1 %2"
@@ -6073,13 +7651,15 @@ msgstr "Sagshistorik # %1 %2"
msgid "Ticket Id"
msgstr "Sagsnummer"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Sag løst"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69
-#: html/Admin/Global/CustomFields/index.html:81
-#: lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Søgning efter sager"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Sagstransaktioner"
@@ -6087,21 +7667,22 @@ msgstr "Sagstransaktioner"
msgid "Ticket attachment"
msgstr "Vedhæftet fil til sag"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Sagsindhold"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Sagsindholdstype"
-#: lib/RT/Ticket_Overlay.pm:603
-#: lib/RT/Ticket_Overlay.pm:617
-#: lib/RT/Ticket_Overlay.pm:628
-#: lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Sag kunne ikke oprettes på grund af en intern fejl"
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "Sagen kunne ikke indlæses"
+
#: NOT FOUND IN SOURCE
msgid "Ticket created"
msgstr "Sag oprettet"
@@ -6114,11 +7695,15 @@ msgstr "Oprettelse af sag mislykkedes"
msgid "Ticket deleted"
msgstr "Sag slettet"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Sagsvisning"
+
#: NOT FOUND IN SOURCE
msgid "Ticket id not found"
msgstr "Sagsnummer ikke fundet"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Sagens metadata"
@@ -6126,7 +7711,7 @@ msgstr "Sagens metadata"
msgid "Ticket not found"
msgstr "Sag ikke fundet"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Satsstatus ændret"
@@ -6134,32 +7719,30 @@ msgstr "Satsstatus ændret"
msgid "Ticket watchers"
msgstr "Sagsobservatører"
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
-#: lib/RT/Search/FromSQL.pm:82
msgid "TicketSQL search module"
msgstr "SagSQL søgemodul"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64
-#: html/Admin/Global/CustomFields/index.html:75
-#: html/Elements/Tabs:71
-#: html/Search/Elements/Chart:109
-#: lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Sager"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
msgid "Tickets %1 %2"
msgstr "Sager %1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "Sager %1 af %2"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Sager oprettet efter"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Sager oprettet før"
@@ -6167,56 +7750,66 @@ msgstr "Sager oprettet før"
msgid "Tickets from %1"
msgstr "Sager fra %1"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Sager løst efter"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Sager løst før"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Sager som afhænger af denne godkendelse:"
-#: html/Search/Elements/PickBasics:134
-#: html/Ticket/Create.html:183
-#: html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Anslået tid"
-#: html/Search/Elements/PickBasics:135
-#: html/Ticket/Create.html:196
-#: html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Resterende tid"
-#: html/Search/Elements/PickBasics:133
-#: html/Ticket/Create.html:189
-#: html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Tid brugt"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Resterende tid"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Tid for sidevisning"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Tid brugt"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "EstimeretTidsforbrug"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "TidTilbage"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "TidBrugt"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Tidszone"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Titel"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "Til"
+
#: NOT FOUND IN SOURCE
msgid "To generate a diff of this commit:"
msgstr "For at generere en difference af denne beslutning:"
@@ -6225,41 +7818,41 @@ msgstr "For at generere en difference af denne beslutning:"
msgid "To generate a diff of this commit:\\n"
msgstr "For at generere en difference af denne beslutning:\\n"
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
-#: html/Elements/Footer:62
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Ved forespørgsel om support, undervisning, specialudvikling eller licenser, kontakt venligst %1."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Meddelt"
-#: html/Admin/Elements/Tabs:68
-#: html/Admin/index.html:88
-#: html/Elements/Tabs:74
-#: html/Tools/index.html:46
-#: html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Værktøjer"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Total"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transaktion"
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
-#: lib/RT/Transaction_Overlay.pm:805
msgid "Transaction %1 purged"
msgstr "Transaktion %1 tømt"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transaktion oprettet"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Transaktions-ekstrafelter"
@@ -6267,37 +7860,61 @@ msgstr "Transaktions-ekstrafelter"
msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
msgstr "Transaktion->Kunne ikke oprette, fordi du ikke angav et sagsnummer"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaktion->Kunne ikke oprette, fordi ikke angav en objekttype og et ID"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr "TransaktionsDato"
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Transaktioner kan ikke ændres"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Troværdighed"
+
#: NOT FOUND IN SOURCE
msgid "Trying to delete a right: %1"
msgstr "Forsøger at slette en rettighed: %1"
-#: lib/RT/Date.pm:418
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Tir"
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Tirs."
-#: html/Admin/CustomFields/Modify.html:66
-#: html/Admin/Elements/EditCustomField:65
-#: html/Ticket/Elements/AddWatchers:54
-#: html/Ticket/Elements/AddWatchers:65
-#: html/Ticket/Elements/AddWatchers:75
-#: lib/RT/Ticket_Overlay.pm:1168
-#: lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Tirsdag"
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Type"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Type ændret fra '%1' til '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr "Var ikke i stand til at afgøre elementets type eller id"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "Det er ikke muligt at abonnere på instrument panel %1: Utilstrækkelige tilladelser"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Ikke implementeret"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unix log-ind"
@@ -6305,46 +7922,62 @@ msgstr "Unix log-ind"
msgid "UnixUsername"
msgstr "UnixBrugernavn"
-#. ($ContentEncoding)
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr "Ukendt (ingen troværdighedsværdi tildelt)"
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr "Ukendt (denne værdi er ny for systemet)"
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
-#: lib/RT/Attachment_Overlay.pm:289
-#: lib/RT/Record.pm:861
+#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Ukendt IndholdsKodning %1"
-#: html/Search/Build.html:455
-#: lib/RT/Report/Tickets.pm:410
+#: NOT FOUND IN SOURCE
msgid "Unknown field: $key"
msgstr "Ukendt felt: $key"
-#: html/Elements/SelectResultsPerPage:58
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "Ukendt felt: %1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Ubegrænset"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Unavngiven søgning"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Uprivilegeret"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Ikke-valgte ekstrafelter"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Ikke-valgte objekter"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr "Fjern privat nøgle"
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Ikke taget"
-#: html/Admin/Elements/EditScrip:128
-#: html/Elements/RT__Ticket/ColumnMap:302
-#: html/Search/Bulk.html:193
-#: html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Opdater"
@@ -6352,17 +7985,19 @@ msgstr "Opdater"
msgid "Update All"
msgstr "Opdater alle"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Opdater graf"
+
#: NOT FOUND IN SOURCE
msgid "Update ID"
msgstr "Opdater ID"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Opdater sag"
-#: html/Search/Bulk.html:126
-#: html/Ticket/ModifyAll.html:87
-#: html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Opdater type"
@@ -6374,8 +8009,11 @@ msgstr "Opdater alle disse sager på en gang"
msgid "Update email"
msgstr "Opdater e-mail"
-#: html/Search/Bulk.html:200
-#: html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Opdater formattering og udfør søgning"
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Opdater flere sager"
@@ -6383,8 +8021,7 @@ msgstr "Opdater flere sager"
msgid "Update name"
msgstr "Opdater navn"
-#: lib/RT/Action/CreateTickets.pm:750
-#: lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Opdatering ikke registreret."
@@ -6396,7 +8033,7 @@ msgstr "Opdater valgte sager"
msgid "Update signature"
msgstr "Opdater signatur"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Opdater sag"
@@ -6404,65 +8041,103 @@ msgstr "Opdater sag"
msgid "Update ticket # %1"
msgstr "Opdater sag # %1"
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
-#: html/SelfService/Update.html:112
-#: html/SelfService/Update.html:47
msgid "Update ticket #%1"
msgstr "Opdater sag #%1"
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
-#: html/Ticket/Update.html:158
msgid "Update ticket #%1 (%2)"
msgstr "Opdater sag #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748
-#: lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Opdateringstype var hverken korrespondance eller kommentar"
-#: html/Elements/SelectDateType:54
-#: html/Ticket/Elements/ShowDates:72
-#: lib/RT/CustomField_Overlay.pm:1284
-#: lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr "OpdaterStatus"
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Opdateret"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "Opdaterede den gemte søgning ved navn \"%1\""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Overfør"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Overfør flere filer"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Overfør flere billeder"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Overfør en fil"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Overfør et billede"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Overfør op til %1 filer"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Overfør op til %1 billeder"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Overfør dine ændringer"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Brug: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "Brug SSL?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "Brug standard (% 1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Use fixed-width font to display plaintext messages"
+msgstr "Brug en fast-bredde font til at vise beskeder der kun indeholder tekst"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Brug andre RT-administrative værktøjer"
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "Brug systemstandard (% 1)"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Bruger"
+
#: NOT FOUND IN SOURCE
msgid "User %1 %2: %3\\n"
msgstr "Bruger %1 %2: %3\\n"
@@ -6471,8 +8146,8 @@ msgstr "Bruger %1 %2: %3\\n"
msgid "User %1 Password: %2\\n"
msgstr "Bruger %1 adgangskode: %2\\n"
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
-#: lib/RT/Ticket_Overlay.pm:506
msgid "User '%1' could not be found."
msgstr "Bruger '%1' kunne ikke findes"
@@ -6484,12 +8159,15 @@ msgstr "Bruger '%1' ikke fundet"
msgid "User '%1' not found\\n"
msgstr "Bruger '%1' ikke fundet\\n"
-#: etc/initialdata:132
-#: etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr "Bruger (oprettet - udløber)"
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Brugerdefineret"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Brugerdefinerede betingelser og handlinger"
@@ -6501,36 +8179,41 @@ msgstr "Bruger-ID"
msgid "User Id"
msgstr "Bruger-ID"
-#: html/Admin/Elements/CustomFieldTabs:72
-#: html/Admin/Elements/GroupTabs:68
-#: html/Admin/Elements/QueueTabs:85
-#: html/Admin/Elements/SystemTabs:68
-#: html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Brugerrettigheder"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "Bruger bad om en ukendt opdateringstype for ekstrafelt %1 til %1 objekt #%3"
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
-#: html/Admin/Users/Modify.html:301
msgid "User could not be created: %1"
msgstr "Bruger kunne ikke oprettes: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Bruger oprettet"
-#: html/Admin/CustomFields/GroupRights.html:74
-#: html/Admin/Global/GroupRights.html:88
-#: html/Admin/Groups/GroupRights.html:75
-#: html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Brugerdefinerede grupper"
-#: lib/RT/User_Overlay.pm:592
-#: lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr "Bruger deaktiveret"
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr "Bruger aktiveret"
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "Brugeren har en tom email adresse"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Bruger indlæst"
@@ -6542,42 +8225,40 @@ msgstr "Sendt besked til bruger"
msgid "User view"
msgstr "Brugervisning"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Brugers GnuPG nøgle"
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Brugerdefinerede grupper"
-#: html/Admin/Users/Modify.html:69
-#: html/Elements/Login:90
-#: html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Brugernavn"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55
-#: html/Admin/Elements/SelectNewGroupMembers:47
-#: html/Admin/Elements/Tabs:53
-#: html/Admin/Global/CustomFields/index.html:64
-#: html/Admin/Groups/Members.html:76
-#: html/Admin/Queues/People.html:89
-#: html/Admin/index.html:62
-#: html/User/Groups/Members.html:79
-#: lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Format på brugernavn"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Brugere"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Brugere som opfylder søgekriterier"
-#. ($transaction->id)
-#: bin/rt-crontool:134
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr "Bruger transaktion #%1..."
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Gyldig søgning"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Validering"
@@ -6585,150 +8266,289 @@ msgstr "Validering"
msgid "ValueOfQueue"
msgstr "KøVærdi"
-#: html/Admin/CustomFields/Modify.html:130
-#: html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Værdier"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Diverse RT rapporter"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Se denne gruppes instrument paneler"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Se personlige instrument paneler"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "Se system instrument paneler"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "W3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr "Højden på HDSEHDF skriveværktøjet"
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "HDSEHDF skriveværktøj"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Advarsel! Beskeden er IKKE signeret!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Advarsel: Du har ikke angivet nogen email adresse, du vil ikke modtage dette instrument panel før du har angivet en email adresse"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Observer"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "ObserverSomAdminCC"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Observatør"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "ObservatørGruppe"
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Observatører"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "Den angivne database kunne findes og der er oprettet forbindelse som database administrator. Du kan klikke på 'Grundlæggende tilpasning' for at fortsætte med at tilpasse RT."
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Web port"
+
#: NOT FOUND IN SOURCE
msgid "WebEncoding"
msgstr "WebKodning"
-#: lib/RT/Date.pm:419
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Ons"
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Ons."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Onsdag"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Velkommen til RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr "Hvad lavede jeg i dag"
-#: etc/initialdata:521
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Hvad er RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr "Når RT ikke kan håndtere en email, hvor skal den da sendes hen?"
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Når en sag er blevet godkendt af alle godkendere, tilføj korrespondance til den oprindelige sag"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "Når en sag er blevet godkendt af hvilken som helst godkender, tilføj korrespondance til den oprindelige sag"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "NÃ¥r en sag oprettes"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "NÃ¥r en godkendelsessag oprettes, giv besked til ejeren og AdminCc om det punkt, der afventer deres godkendelse"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "NÃ¥r der sker noget som helst"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "NÃ¥r en sag bliver lukket"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr "NÃ¥r en sag bliver afvist"
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Når en sag er blevet løst"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Når en sags ejer ændres"
-#: etc/initialdata:178
-#: etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Når en sags prioritet ændres"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Når en sags kø ændres"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Når en sags status ændres"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "NÃ¥r en brugerdefineret betingelse forekommer"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "NÃ¥r kommentarer kommer ind"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "NÃ¥r korrespondance kommer ind"
-#: html/Admin/Users/Modify.html:188
-#: html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "Angiv hvor et sendmail binært-kompatibelt program kan findes."
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Arbejde"
-#: html/Search/Results.html:82
+#: NOT FOUND IN SOURCE
msgid "Work offline"
msgstr "Arbejde off-line"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "Arbejdstelefon"
-#: html/Ticket/Elements/ShowBasics:63
-#: html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Arbejdet"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Ja"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Du ejer allerede denne sag"
-#: html/autohandler:214
-#: html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Du er ikke en autoriseret bruger"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Du kan <a href=\"%1\">hoppe videre til den første ulæste besked</a> eller <a href=\"%2\">hoppe videre til den første ulæste besked samtidig med at du markerer alle beskeder som læste</a>."
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr "Du kan også redigere selve den foruddefinerede søgning"
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Du kan kun videretildele sager, som du ejer, eller som ikke har en ejer"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr "Du kan kun tage sager uden ejer"
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "Du har ikke <b>SuperBruger</b> rettigheder."
+
#: NOT FOUND IN SOURCE
msgid "You don't have permission to view that ticket.\\n"
msgstr "Du har ikke tilladelse til at se den sag.\\n"
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
-#: docs/design_docs/string-extraction-guide.txt:47
-#: lib/RT/StyleGuide.pod:780
msgid "You found %1 tickets in queue %2"
msgstr "Du fandt %1 sager i kø %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Du er blevet logget ud af RT."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Du har ikke tilladelse til at oprette sager i den kø."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Du må ikke oprette sager i den kø."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Du skal indtaste en administrativ adgangskode"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr "Du bør vælge den database du eller din lokale database administrator er mest fortrolig med."
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Du er velkommen til at logge ind igen"
@@ -6740,11 +8560,11 @@ msgstr "Dine %1 sager"
msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
msgstr "Din RT-administrator har ikke konfigureret de mail-alias'er, der starter RT, korrekt"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Din sag er blevet godkendt af %1. Andre godkendelser afventer muligvis stadigvæk."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Din sag er blevet godkendt."
@@ -6752,46 +8572,76 @@ msgstr "Din sag er blevet godkendt."
msgid "Your request was rejected"
msgstr "Din sag blev afvist."
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Din sag blev afvist."
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Dit brugernavn eller din adgangskode er forkert."
-#: html/Admin/Users/Modify.html:168
-#: html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Postnummer"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[ingen]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Efter"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "tillad oprettelse af gemte søgninger"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "tillad indlæsning af gemte søgninger"
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
-#: html/User/Elements/DelegateRights:80
msgid "as granted to %1"
msgstr "som givet til %1"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "søjle"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Før"
+
#: NOT FOUND IN SOURCE
msgid "belongs to"
msgstr "tilhører"
-#: html/Search/Results.html:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "bund til top"
+
+#: NOT FOUND IN SOURCE
msgid "chart"
msgstr "diagram"
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr "klik for at markere/afmarkere alle elementer på en gang"
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "lukket"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "indeholder"
@@ -6803,6 +8653,10 @@ msgstr "indhold"
msgid "content-type"
msgstr "indholdstype"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "correspondence (probably) not sent"
msgstr "korrespondance (sandsynligvis) ikke sendt"
@@ -6811,12 +8665,22 @@ msgstr "korrespondance (sandsynligvis) ikke sendt"
msgid "correspondence sent"
msgstr "korrespondance sendt"
-#: NOT FOUND IN SOURCE
-msgid "current: $current, want $want, Error near ->$val<- expecting a "
-msgstr "aktuel: $current, vil have $want, Fejl nær ->$val<- forventer "
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr "brugerdefineret felt '%1'"
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "dagligt"
-#: html/Admin/Queues/Modify.html:98
-#: lib/RT/Date.pm:346
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "dagligt kl. %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "dage"
@@ -6828,164 +8692,235 @@ msgstr "slet"
msgid "deleted"
msgstr "slettet"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "does not belong to"
msgstr "tilhører ikke"
-#: html/Search/Elements/PickBasics:61
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "stemmer ikke overens"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "indeholder ikke"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "stemmer ikke"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "download"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "lig med"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "fejl: kan ikke flytte ned"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "fejl: kan ikke flytte til venstre"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "fejl: kan ikke flytte op"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "fejl: intet at slette"
-#: html/Search/Build.html:533
-#: html/Search/Build.html:552
-#: html/Search/Build.html:574
-#: html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "fejl: intet at flytte"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "fejl: intet at skifte"
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "hver"
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr "afviklede udvidelsesmodul problemfrit"
+
#: NOT FOUND IN SOURCE
msgid "filename"
msgstr "filnavn"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "fuld"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "større end"
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
-#: lib/RT/Group_Overlay.pm:214
msgid "group '%1'"
msgstr "gruppe '%1'"
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-#: html/Search/Results.html:88
+#: NOT FOUND IN SOURCE
msgid "grouped by %1"
msgstr "fordelt pr. %1"
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "timer"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "ID"
-#: html/Elements/SelectBoolean:53
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:57
-#: html/Search/Elements/PickBasics:162
-#: html/Search/Elements/PickBasics:74
-#: html/Search/Elements/PickBasics:90
-#: html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "er"
-#: html/Elements/SelectBoolean:57
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:58
-#: html/Search/Elements/PickBasics:163
-#: html/Search/Elements/PickBasics:75
-#: html/Search/Elements/PickBasics:91
-#: html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "er ikke"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "nøgle deaktiveret"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "nøgle udløbet"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "nøgle tilbagekaldt"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "venstre til højre"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "mindre end"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "marginal"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "stemmer overens"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "maksimal dybde"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min."
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minutter"
-#: NOT FOUND IN SOURCE
-msgid ""
-"modifications\\n"
-"\\n"
-msgstr ""
-"ændringer\\n"
-"\\n"
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "månedligt"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "månedligt (dag nummer %1) kl. %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "måneder"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "aldrig"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "ny"
-#: html/Admin/Elements/PickCustomFields:64
-#: html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "nej"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "intet navn"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "ingen værdi"
-#: html/Admin/Elements/EditQueueWatchers:48
-#: html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "ingen"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "ikke lig med"
-#: lib/RT/Queue_Local.pm:2
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "ingenting"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "elementer blev fjernet uden problemer"
+
+#: NOT FOUND IN SOURCE
msgid "offer"
msgstr "tilbud"
-#: html/SelfService/Elements/MyRequests:82
-#: lib/RT/Queue_Overlay.pm:83
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Ved"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "Ã¥ben"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "Ã¥ben/luk"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "anden..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
-#: lib/RT/Group_Overlay.pm:219
msgid "personal group '%1' for user '%2'"
msgstr "personlig gruppe '%1' for bruger '%2'"
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "tærte"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "udvidelsesmodul returnerede en tom liste"
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
-#: lib/RT/Group_Overlay.pm:227
msgid "queue %1 %2"
msgstr "kø %1 %2"
@@ -6997,15 +8932,31 @@ msgstr "afvist"
msgid "resolved"
msgstr "løst"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "højre til venstre"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sek."
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr "se elementlisten nedenfor"
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr "vis godkendelsesfanen"
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "vis konfigurationsfane"
-#: html/Search/Results.html:80
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "spreadsheet"
msgstr "regneark"
@@ -7013,41 +8964,55 @@ msgstr "regneark"
msgid "stalled"
msgstr "sat i bero"
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-#: html/Search/Results.html:89
+#: NOT FOUND IN SOURCE
msgid "style: %1"
msgstr "stil: %1"
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr "oversigtsrækker"
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
-#: lib/RT/Group_Overlay.pm:222
msgid "system %1"
msgstr "system %1"
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
-#: lib/RT/Group_Overlay.pm:233
msgid "system group '%1'"
msgstr "systemgruppe '%1'"
-#: html/Elements/Error:64
-#: html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "den kaldende komponent angav ikke hvorfor"
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "standard adresserne der vil blive vist i From: og Reply-To: hovederne i en korrespondance mail."
+
#: NOT FOUND IN SOURCE
msgid "ticket #%1"
msgstr "sag #%1"
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
-#: lib/RT/Group_Overlay.pm:230
msgid "ticket #%1 %2"
msgstr "sag #%1 %2"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "top til bund"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "ultimativ"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
-#: lib/RT/Group_Overlay.pm:236
msgid "undescribed group %1"
msgstr "ubeskrevet gruppe %1"
@@ -7055,20 +9020,45 @@ msgstr "ubeskrevet gruppe %1"
msgid "undescripbed group %1"
msgstr "ubeskrevet gruppe %1"
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
-#: lib/RT/Group_Overlay.pm:211
msgid "user %1"
msgstr "bruger %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "udførlig"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "ugentlig"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "ugentligt (på en %1) kl. %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "uger"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "hvilken port din webserver vil lytte på, f.eks. 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "med brevhoved"
+
#: NOT FOUND IN SOURCE
msgid "with template %1"
msgstr "med skabelon %1"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "Ã¥r"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "ja"
+
diff --git a/rt/lib/RT/I18N/de.po b/rt/lib/RT/I18N/de.po
index dd599dd..aa7d119 100644
--- a/rt/lib/RT/I18N/de.po
+++ b/rt/lib/RT/I18N/de.po
@@ -1,506 +1,725 @@
msgid ""
msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2006-12-20 15:50+0100\n"
-"Last-Translator: Torsten Brumm <tob@brummix.de>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-07-19 19:49+0000\n"
+"Last-Translator: Lukas Bögelein <lukas.boegelein@online.de>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
+#: NOT FOUND IN SOURCE
msgid " %1 deleted."
-msgstr ""
+msgstr " %1 gelöscht"
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 renamed to %2."
-msgstr ""
+msgstr " %1 umbenannt nach %2."
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 saved."
-msgstr ""
+msgstr " %1 gespeichert."
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (kein öffentlicher Schlüssel!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (unzuverlässig!)"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:105
+#: NOT FOUND IN SOURCE
msgid "$1"
msgstr "$1"
-#: lib/RT/Record.pm:940
-#. ($label)
+#: NOT FOUND IN SOURCE
msgid "$prefix %1"
msgstr "$prefix %1"
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: NOT FOUND IN SOURCE
+msgid "$x"
+msgstr "$x"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr "%1 #%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %3.%2.%4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %3. %2 %7, %4:%5:%6"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 hinzugefügt"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "vor %1 %2"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 geändert in %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 gelöscht"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 gelöscht."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 umbenannt in %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 gespeichert."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 mit der Vorlage %3"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) von %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (Unverändert)"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: NOT FOUND IN SOURCE
+msgid "%1 (day %2) at %3"
+msgstr "%1 (Tag %2) bei %3"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (on %2) at %3"
+msgstr "%1 (von %2) bei %3"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - Ein Argument zur Ãœbergabe an %2"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Statusausgabe auf STDOUT"
-#: bin/rt-crontool:253
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
-msgstr ""
+msgstr "%1 - Bitte die ID der Vorlage angeben die benutzt werden soll"
-#: bin/rt-crontool:256
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Möchtest Du die 'erste', 'letzte' oder 'alle' Transaktionen nutzen"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Gibt an, welches Action-Modul benutzt werden soll"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Gib eine Komma separierte Liste der Transaktionen an, die du nutzen willst"
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Gibt an, welches Condition-Modul benutzt werden soll"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Gibt an, welches Search-Modul benutzt werden soll"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
msgstr ""
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: NOT FOUND IN SOURCE
+msgid "%1 Dashboards"
+msgstr "%1 Anzeigetafeln"
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT %2 Alle Rechte vorbehalten 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "ScripAction %1 geladen"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 als Wert für %2 hinzugefügt"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 konnte nicht in der Datenbank gefunden werden obwohl es ein lokales Objekt zu sein scheint"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "%1 at %2"
+msgstr "%1 um %2"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 von %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 von %2 in %3 geändert"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%1 Diagramm von %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "%1 kopieren"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 konnte nicht auf %2 gesetzt werden."
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 konnte den Status nicht auf erledigt setzen. Die RT-Datenbank könnte inkonsistent sein."
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 erstellt"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 gelöscht"
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 existiert nicht."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "%1 grouped by %2"
msgstr "%1 gruppiert durch %2"
-#: etc/initialdata:593
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "Ihre %1 Anfragen höchster Priorität"
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 ist ein Tool um mit Tickets von externen Programmen zu arbeiten, wie zum Beispiel cron."
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 ist ein Dienstprogramm, welches aus CRON gestartet werden soll. Es sendet alle aufgeschobenen RT Benachrichtigungen als benutzer definierten Auszug"
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 ist kein %2 dieses Bereichs mehr."
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 ist kein %2 mehr von dieser Anfrage"
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 ist kein Wert mehr für das benutzer definierte Feld %2"
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 Min"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "Die %1 neusten Anfragen ohne Besitzer"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 Objekte"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 Rechte"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 aktualisiert: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 aktualisiert: Nichts verändert"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 geändert"
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
-msgstr "%1 wird alle Mitglieder eines erledigten Gruppentickets anführen."
+msgstr "%1 wird alle Anfragen schliessen, die in Beziehung zu diesem Ticket stehen."
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1's %2 Objekte"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1's %2's %3 Objekte"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1's Anzeigetafeln"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "%1's gespeicherte Suchanfragen"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
-msgstr "%1: kein Anhang angegeben"
+msgstr "%1: keine Anlage angegeben"
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1b"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
-msgstr ""
+msgstr "%quant(%1, Stunde, Stunden)"
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
-msgstr ""
+msgstr "'%1' ist ein ungültiger Wert für Status"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Auswahl wird gelöscht)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Benachrichtigung der markierten Empfänger wird unterdrückt)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Benachrichtigungen an markierte Empfänger aktivieren)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Geben Sie die Anfrage IDs oder URLs getrennt durch Leerzeichen ein)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
-msgstr "(Standardwert: %1)"
+msgstr "(Wenn das Feld leer bleibt, dann wird der Standardwert: %1 verwendet)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Keine benutzerdefinierten Felder)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Keine Mitglieder)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Keine Scrips)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Keine Vorlagen)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Nichts)"
-#: html/Ticket/Update.html:90
+#: NOT FOUND IN SOURCE
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(Sendet ein Blind Carbon Copy - BCC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden <strong>nicht</strong> übermittelt.)"
+msgstr "(Sendet ein Blind Carbon Copy - BCC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Updates werden <strong>nicht</strong> übermittelt.)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update <strong>werden</strong> ebenfalls übermittelt.)"
+msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Updates <strong>werden</strong> ebenfalls übermittelt.)"
-#: html/Ticket/Update.html:86
+#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden <strong>nicht</strong> übermittelt.)"
+msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Updates werden <strong>nicht</strong> übermittelt.)"
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update <strong>werden</strong> ebenfalls übermittelt.)"
+msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Updates <strong>werden</strong> ebenfalls übermittelt.)"
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Benutze diese Felder, für 'Benutzer definierte' Bedingungen oder Aktionen)"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
-msgstr ""
+msgstr "(Erhält keine E-Mails)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(jeder)"
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(leer)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
-msgstr "(kein Name gelistet)"
+msgstr "(kein Name aufgeführt)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(kein öffentlicher Schlüssel!)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(kein Wert)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(keine Werte)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(nur eine Anfrage)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(abhängig von %quant(%1, anderen Abfrage, anderen Abfragen))"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(wartet auf Freigabe)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(wartet auf andere Sammlung)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(notwendig)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(vertrauen: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(unbenannt)"
-#: html/Ticket/Elements/Reminders:133
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "(yyyy/mm/dd)"
msgstr "(jjjj/mm/tt)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
-msgstr ""
+msgstr "-"
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:53
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "--Transaktions Argument kann nur 'erstes', 'letztes' oder 'alle' sein"
+
+#: NOT FOUND IN SOURCE
+msgid "1995-11-25 21:59:12"
+msgstr "1995-11-25 21:59:12"
+
+#: NOT FOUND IN SOURCE
+msgid "1995-11-25T21:59:12Z"
+msgstr "1995-11-25T21:59:12Z"
+
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Ticket->Status%>"
-#: html/Elements/SelectTicketTypes:48
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:48
+#: NOT FOUND IN SOURCE
msgid "<%$_%>"
msgstr "<%$_%>"
-#: html/Search/Elements/DisplayOptions:73
+#: NOT FOUND IN SOURCE
msgid "<%$field%>"
msgstr "<%$field%>"
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr "<input type=\"submit\" class=\"button\" value=\"Neues Ticket in\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"Neue Anfrage in\">&nbsp;%1"
+msgstr "<input type=\"übermitteln\" value=\"Neue Anfrage in\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Jeder iCal Feed enthält eine geheimes Kürzel, welches Dich authorisiert. Falls die URL deines iCal Feeds in falsche Hände gekommen ist, kannst Du hier ein neues geheimes Kürzel erstellen, <b>welches alle bestehenden iCal Feeds unbrauchbar macht</b></p>"
-#: etc/initialdata:218
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Eine leere Vorlage"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
-msgstr "Es wurde kein Passwort gesetzt, der User wird sich nicht anmelden können!"
+msgstr "Es wurde kein Passwort gesetzt, der Benutzer wird sich nicht anmelden können!"
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE nicht gefunden"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACEs können nur erstellt und gelöscht werden."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "UND"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Ãœber mich"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Zugriffskontrolle"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Aktion"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Aktion %1 nicht gefunden"
-#: bin/rt-crontool:171
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Aktion '%1' nicht gefunden"
+
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Aktion durchgeführt.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
-msgstr ""
+msgstr "Aktion ist ein Pflichtfeld"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Aktion vorbereitet..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Hinzufügen"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "AdminCC hinzufügen"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Lesezeichen hinzufügen"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "CC hinzufügen"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Spalten hinzufügen"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Kriterium hinzufügen"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Weitere Dateien anhängen"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Klient hinzufügen"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Wert hinzufügen"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Scrip erstellen, das auf alle Bereiche angewendet wird"
@@ -508,89 +727,113 @@ msgstr "Scrip erstellen, das auf alle Bereiche angewendet wird"
msgid "Add additional criteria"
msgstr "zusätzliches Kriterium hinzufügen"
-#: html/Search/Build.html:109 html/Search/Build.html:94
+#: NOT FOUND IN SOURCE
msgid "Add and Search"
msgstr "Hinzufügen und Suchen"
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Füge den ausgewählten Anfragen Kommentare oder Antworten hinzu"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Mitglieder hinzufügen"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Neue Beobachter hinzufügen"
-#: html/Search/Build.html:85
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Diese Werte hinzufügen"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Diese Werte hinzufügen und Suche starten"
+
+#: NOT FOUND IN SOURCE
msgid "Add these terms to your search"
msgstr "Diese Bedingungen zur Suche hinzufügen"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "Werte hinzufügen"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Hinzufügen, Löschen und Ändern von Werten benutzerdefinierter Felder von Objekten"
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Rolle wurde als %1 für diesen Bereich hinzugefügt"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Rolle wurde als %1 für diese Anfrage hinzugefügt"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Adresse"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adresse 1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adresse 2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin CC"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Admin Kommentar"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Admin Korrespondenz"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
-msgstr "Admin Bereiche"
+msgstr "Bereiche administrieren"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Admin/Globale Einstellungen"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "AdminCC Gruppe"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCcs"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "AdminBenutzerdefiniertesFeld"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "AdminGruppe"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "AdminGruppenZugehörigkeit"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "AdminEigenePersönlicheGruppen"
@@ -598,173 +841,214 @@ msgstr "AdminEigenePersönlicheGruppen"
msgid "AdminQueue"
msgstr "AdminBereich"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "AdminBenutzer"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
-msgstr "Administrative CC"
+msgstr "Administrativer CC"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Administrator Password"
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Erweitert"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "nach dem"
-
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Operator"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Alle Freigaben genehmigt"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Alle Bereiche"
-#: html/Search/Elements/EditQuery:56
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Bereits verschlüsselt"
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "Und/Oder"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
-msgstr "gilt für"
+msgstr "Gilt für"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
-msgstr "anwenden"
+msgstr "Anwenden"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Änderungen anwenden"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Freigabe"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Freigabe #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Freigabe #%1: Notiz wurde aufgrund eines Systemfehlers nicht gespeichert"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Freigabe #%1: Notiz gespeichert"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Freigabe genehmigt"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Freigabe bereit für Besitzer"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Freigabe abgelehnt"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Freigeben"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Notizen des Freigebenden: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Apr"
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Apr."
-#: html/Search/Elements/DisplayOptions:81
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "April"
+
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
-msgstr ""
+msgstr "aufsteigend"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "aufsteigend"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Zuweisen und Entfernen von benutzerdefinierten Feldern"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "BenutzerdefiniertesFeldZuweisen"
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Anhängen"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Datei anhängen"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Dateianhang"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Anhang"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Anhang '%1' konnte nicht geladen werden"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Anhang erstellt"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Dateiname des Anhangs"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
-msgstr "Anhänge"
+msgstr "Anlagen"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Anhang Verschlüsselung ist deaktiviert"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Attribut gelöscht"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Aug"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Aug."
-#: etc/initialdata:221
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "August"
+
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Automatische Antwort"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Automatische Antwort an Klienten"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Verfügbar"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "BCc"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Zurück"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr "Schlechte Privatsphähre für Eigenschaft %1"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Grundlagen"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "BCC"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Änderungen speichern"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "vor dem"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Best Practical Solutions, LLC Firmen Logo"
@@ -772,23 +1056,35 @@ msgstr "Best Practical Solutions, LLC Firmen Logo"
msgid "Binary"
msgstr "Binär"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Leer"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Nachrichtentext"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Fett"
-#: html/Search/Results.html:79
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Lesezeichen"
+
+#: NOT FOUND IN SOURCE
msgid "Bookmarkable link"
msgstr "Speicherbarer Link"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Markierte Tickets"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Kurze Kopfzeilen"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Massen Update"
@@ -796,7 +1092,27 @@ msgstr "Massen Update"
msgid "Bulk ticket update"
msgstr "Massen Anfrageaktualisierung"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Support kaufen"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Als Standard nutzt RT die Zeitzone des System. Damit wird ein Standard für die Anzeige von Datum und Uhrzeit gesetzt. Benutzer können in ihren Einstellungen eine andere Zeitzone wählen."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "CC Gruppe"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr "CF"
+
+#: NOT FOUND IN SOURCE
+msgid "Calendar"
+msgstr "Kalender"
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Kann Systembenutzer nicht ändern"
@@ -804,428 +1120,681 @@ msgstr "Kann Systembenutzer nicht ändern"
msgid "Can this principal see this queue"
msgstr "Kann diese Rolle diesen Bereich sehen"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Kann kein benutzerdefiniertes Feld ohne Namen hinzufügen"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "Es wurde keine Kollektion gefunden für '%1'"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Kann keine gespeicherte Suche finden"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Kann kein Anfrage auf sich selbst verweisen lassen!"
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
-msgstr ""
+msgstr "Konnte %1 nicht speichern"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Kann diese Suche nicht speichern"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
-msgstr "Sie können Basis und Ziel nicht gleichzeitig angeben"
+msgstr "Sie können Quelle und Ziel nicht gleichzeitig angeben"
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "In einem deaktivierten Bereich können keine Ticktes erstellt werden."
-#: html/autohandler:204
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Kann Benutzer nicht anlegen: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Kategorie"
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Kategorie nicht gesetzt"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
-msgstr "CC"
+msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Ccs"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Ändern"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Passwort ändern"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Alle auswählen"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Überprüfe Datenbank Verbindung"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Zum Löschen anwählen"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Zum Entziehen einer Berechtigung anwählen"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Überprüfe Datenbank Berechtigungen"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Kinder"
-#: html/NoAuth/js/util.js:201
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Wähle einen Datenbank Typ"
+
+#: NOT FOUND IN SOURCE
msgid "Choose a date"
msgstr "Datum auswählen"
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Stadt"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Säubern"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Alles löschen"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Klicke \"Finish Installation\" um den Assistenten zu beenden."
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Klicke \"Initialize Database\" um die RT Datenbank zu erzeugen und mit Metadaten zu füllen. Dies kann einen Moment dauern."
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Fenster schliessen"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Geschlossen"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Geschlossene Anfragen"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Combobox: Selektiere oder gebe mehrere Werte ein"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Combobox: Selektiere oder gib einen Wert ein"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Combobox: Selektiere oder gib bis zu %1 Werte ein"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Kommentar"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
-msgstr "Kommentaradresse"
+msgstr "Kommentar Adresse"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Kommentar Adresse"
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Kommentiere Anfragen"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "Kommentar Adresse"
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "AnfrageKommentieren"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "Kommentare"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Kommentare (werden nicht an Klienten geschickt)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Kommentare (werden nicht an Klienten geschickt)"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
-msgstr "Kommentare zu diesem Benutzer"
+msgstr "Kommentare über diesem Benutzer"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Kommentar hinzugefügt"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Commit Stumpf ausgeführt"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Bedingung"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Bedingung '%1' nicht gefunden"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
-msgstr ""
+msgstr "Bedingung ist ein Pflichtfeld"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Bedingung trifft zu..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Bedingung nicht gefunden"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Bedingung, Aktion und Vorlage"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Konfig Datei %1 ist gesperrt"
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Konfiguration"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Bestätigen"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Verbindung erfolgreich"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Inhalt"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Inhaltstyp"
-#: html/Search/Elements/EditSearches:65
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "Inhaltstyp"
+
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Kopie"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "Antwort Adresse"
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr "Antwort Adresse"
+
+#: etc/initialdata:261
msgid "Correspondence"
-msgstr "Korrespondenz"
+msgstr "Antwort"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
-msgstr "Korrespondenz hinzugefügt"
+msgstr "Antwort hinzugefügt"
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
-msgstr "Konnte keinen neuen benutzerdefinierten Wert hinzufügen"
+msgstr "Konnte keinen neuen benutzerdefinierten Wert hinzufügen "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
msgstr "Konnte kein neuen benutzerdefinierten Wert hinzufügen. %1 "
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "Konnte den Wert: %1 nicht zu dem benutzerdefinierten Feld hinzufügen"
+
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "Konnte den Besitzer nicht ändern. "
-#: html/Admin/CustomFields/Modify.html:161
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Konnte Besitzer nicht ändern: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen: %1"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Konnte Gruppe nicht anlegen"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Konnte Vorlage nicht anlegen: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Konnte Anfrage nicht in deaktivierter Queue \"%1\" erstellen"
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Konnte Anfrage nicht anlegen. Bereich nicht angegeben"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Konnte Benutzer nicht anlegen"
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Konnte diesen Benutzer nicht finden oder anlegen"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Konnte diese Rolle nicht finden"
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Konnte Attribut %1 nicht laden"
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Konnte benutzerdefiniertes Feld %1 nicht laden"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Konnte die Gruppe nicht laden"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "Kann Objekt für %1 nicht laden"
-#: lib/RT/SavedSearch.pm:197
+#: NOT FOUND IN SOURCE
msgid "Could not load search attribute"
msgstr "Kann Such Attribut nicht laden"
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Konnte diese Rolle nicht zu einen %1 dieses Bereichs machen"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Konnte diese Rolle nicht zu einem %1 dieses Anfragen machen"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Konnte diese Rolle nicht als %1 dieses Bereichs entfernen"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr "Konnte diese Rolle nicht als %1 dieser Anfrage entfernen"
+
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Konnte Benutzerinformation nicht speichern"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
-msgstr ""
+msgstr "Anlage konnte nicht zugefügt werden"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Konnte Benutzer nicht der Gruppe hinzufügen"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Konnte die Transaktion nicht anlegen: %1"
-#: lib/RT/Record.pm:953
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Eintrag konnte nicht erstellt werden"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Anzeigetafel %1: %2 konnte nicht gelöscht werden"
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Konnte Zeile nicht finden"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Keine passende Transaktion gefunden, übersprungen"
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Konnte diese Rolle nicht finden"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Konnte diesen Wert nicht finden"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Konnte %1 nicht aus der Benutzerdatenbank laden.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "Konnte die Klasse %1 nicht laden"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Konnte benutzerdefiniertes Feld #%1 nicht laden"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
-msgstr "Konnte das benutzerdefinierte Feld %1 nicht laden"
+msgstr "Konnte benutzerdefiniertes Feld %1 nicht laden"
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
-msgstr ""
+msgstr "Konnte Kopie der Anfrage #%1 nicht laden"
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Anzeigetafel %1: %2 konnte nicht geladen werden"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Anzeigetafel %1: %2 konnte nicht geladen werden"
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Konnte Gruppe #%1 nicht laden"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Konnte Gruppe %1 nicht laden"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Konnte den Verweis nicht laden"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Konnte Objekt %1 nicht laden"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Konnte Benutzer %1 nicht laden oder erstellen"
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Konnte den Bereich nicht laden"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Konnte Bereich #%1 nicht laden"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "Konnte den Bereich %1 nicht laden"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Konnte Bereich '%1' nicht laden"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
-msgstr ""
+msgstr "Konnte Skript #%1 nicht laden"
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Konnte Vorlage #%1 nicht laden"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
-msgstr "Konnte das Anfrage '%1' nicht laden"
+msgstr "Konnte Anfrage '%1' nicht laden"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "Konnte Transaktion #%1 nicht laden"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Benutzer #%1 konnte nicht geladen werden"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Konnte Adresse nicht aus '%1' Zeichenkette auslesen"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Konnte Inhalt nicht durch entschlüsselte Daten ersetzen: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Konnte Inhalt nicht durch entschlüsselte Daten ersetzen: %1"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
-msgstr ""
+msgstr "Konnte '%1' nicht als URI auflösen"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
msgid "Couldn't resolve base '%1' into a URI."
msgstr "Basis '%1' kann nicht zu einer URI aufgelöst werden."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
msgid "Couldn't resolve target '%1' into a URI."
msgstr "Ziel '%1' kann nicht zu einer URI aufgelöst werden."
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Konnte Email nicht senden"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "Konnte nicht %1 Beobachter: %2 setzen"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "Konnte privaten Schlüssel nicht setzen"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Konnte privaten Schlüssel nicht zurücksetzen"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Land"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Erstellen"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Erstelle Anfragen"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Erstelle ein benutzerdefiniertes Feld"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Erstelle ein benutzerdefiniertes Feld für den Bereich %1"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Neue Anzeigetafel erstellen"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Erstelle eine neue Gruppe"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Erstelle eine neue persönliche Gruppe"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Erstelle eine neue Anfrage"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Erstelle einen neuen Benutzer"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Erstelle einen Bereich"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Erstelle ein Scrip für den Bereich %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Erstelle eine Vorlage"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
-msgstr "Neue Anfrage"
+msgstr "Neue Anfrage erstellen"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Erstelle Anzeigetafeln für diese Gruppe"
-#: etc/initialdata:137
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Erstelle neue Anfragen basierend auf der Vorlage dieses Scrips"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Erstelle private Anzeigetafeln"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Erstelle System Anzeigetafeln"
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Anfrage erzeugen"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Erstelle Anfragen in diesem Bereich"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Erstelle Anfragen offline"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Erstellen, löschen und modifizieren von benutzerdefinierten Felder"
@@ -1233,224 +1802,437 @@ msgstr "Erstellen, löschen und modifizieren von benutzerdefinierten Felder"
msgid "Create, delete and modify queues"
msgstr "Erstelle, lösche und modifiziere Bereich"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Erstellen, löschen und modifizieren von Mitgliedern persönlicher Gruppen"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Erstellen, löschen und modifizieren von Benutzern"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "ErstelleAnzeigetafeln"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "ErstelleGruppenAnzeigetafeln"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "ErstelleEigeneAnzeigetafeln"
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr "GespeicherteSucheErstellen"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "AnfrageErstellen"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
-msgstr "Angelegt"
+msgstr "Erstellt"
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Erstellt von"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Erstelle ein benutzerdefiniertes Feld %1"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr "Erstellt in einem Zeitraum"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Erstellte Tickets einer Periode, sortiert nach Status"
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "Erstellt von"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr "Erstellt Relativ"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Ersteller"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Verschlüsselung"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Momentane Beziehungen"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Aktuelle Scrips"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Aktuelle Mitglieder"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Aktuelle Rechte"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Aktuelle Suche"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Aktuelle Beobachter"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Benutzerdefinierte Felder"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Benutzerdefinierte Felder für %1"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Benutzerdefinierter Aktions-Aufräum-Code"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Benutzerdefinierter Aktions-Vorbereitungs-Code"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Benutzerdefinierte Bedingung"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "Benutzerdefiniertes Feld %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "Benutzerdefiniertes Feld %1 gilt nicht für dieses Objekt"
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Benutzerdefiniertes Feld %1 hat einen Wert."
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Benutzerdefiniertes Feld %1 hat keinen Wert."
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Benutzerdefiniertes Feld %1 nicht gefunden"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
-msgstr ""
+msgstr "Benutzerdefiniertes Feld '%1'"
#: NOT FOUND IN SOURCE
msgid "Custom field not found"
msgstr "Benutzerdefiniertes Feld nicht gefunden"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Wert %1 des benutzerdefinierten Feldes %2 konnte nicht gefunden werden"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Wert des benutzerdefinierten Felds konnte nicht gelöscht werden"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Wert des benutzerdefinierten Feldes konnte nicht gefunden werden"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Wert des benutzerdefinierten Feldes gelöscht"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "BenutzerdefiniertesFeld"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "Anpassen"
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Grundlagen anpassen"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "Datenbank Details anpassen"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "E-Mail Adressen anpassen"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "E-Mail Konfiguration anpassen"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "Allgemeines anpassen"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global Defaults"
+msgstr "Allgemeine Standardwerte anpassen"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "DBA Passwort"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "DBA Benutzername"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Tägliche Zusammenfassung"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Anzeigetafel"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Anzeigetafel konnte nicht erstellet werden: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Anzeigetafel konnte nicht aktualisiert werden: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Anzeigetafel aktualisiert"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Anzeigetafeln"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Datenbank Host"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Datenbankname"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Datenbank Password für RT"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Datenbank Port"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Datenbanktyp"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Datenbank Benutzername für RT"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Datumsformat"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Datumsangaben"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Dez"
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Dez."
-#: etc/initialdata:222
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "Dezember"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Entschlüsseln"
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Standard Vorlage für automatische Antworten"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Standard Bereich"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Standard Klient"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Standard Vorlage für Admin-Kommentar"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Standard Vorlage für Admin-Korrespondenz"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Standard Vorlage für Korrespondenz"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Standard Bereich"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Standard Vorlage für Transaktion"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Standard: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Standard: %1/%2 von \"%3\" auf \"%4\" geändert."
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr "Standard Fällig in"
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Rechte weitergeben"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Ihnen gewährte Rechte weitergeben"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "RechteWeitergabe"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Rechteweitergabe"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Löschen"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Vorlage löschen"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Lösche Anzeigetafel für diese Gruppe"
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Löschen fehlgeshlagen: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Lösche private Anzeigetafel"
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Ausgewähltes Script löschen"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Lösche System Anzeigetafeln"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Anfragen löschen"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr "Werte löschen"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "LöscheAnzeigetafel"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "LöscheGruppenAnzeigetafel"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "LöscheEigeneAnzeigetafel"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "AnfrageLöschen"
-#: lib/RT/SavedSearch.pm:218
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "Gelöscht %1"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Gelöschte Anzeigetafel %1"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Gelöschte gespeicherte Suche"
+
+#: NOT FOUND IN SOURCE
msgid "Deleted search"
msgstr "Suche löschen"
@@ -1459,95 +2241,115 @@ msgstr "Suche löschen"
msgid "Deleting this object could break referential integrity"
msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Ablehnen"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
-msgstr "Ist Voraussetzung von"
+msgstr "Wird vorausgesetzt von"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Als Voraussetzung von %1 hinzugefügt"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Als Voraussetzung von %1 gelöscht"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Setzt jetzt %1 voraus"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
-msgstr "Setzt %1 nicht mehr voraus "
+msgstr "Setzt %1 nicht mehr voraus"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
-msgstr "Voraussetzungen"
+msgstr "Voraussetzung von"
-#: html/Search/Elements/DisplayOptions:86
-msgid "Desc"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr "absteigend"
+
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "absteigend"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Beschreiben Sie hier das Problem"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Beschreibung"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Richtung"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Anzeige"
#: lib/RT/Queue_Overlay.pm:93
msgid "Display Access Control List"
-msgstr "Zeige Zugriffskontrollliste (ACL) an"
+msgstr "Zeige Zugriffskontroll Liste (ACL) an"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
-msgstr "Spalten anzeigen"
+msgstr "Spalten Anzeige"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Zeige Scrip-Vorlagen für diesen Bereich"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Zeige Scrips für diesen Bereich"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Anzeigemodus"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Gespeicherte Suchanfragen für diese Gruppe anzeigen"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Herausgegeben unter version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> der GNU GPL.</a>"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Mache irgend etwas und alles"
@@ -1555,305 +2357,566 @@ msgstr "Mache irgend etwas und alles"
msgid "Do the Search"
msgstr "Suche durchführen"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Domänenname"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Nicht 'http://' mit angeben, nur z.B. 'localhost' oder 'rt.example.com'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Diese Seite nicht aktualisieren."
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Diesem Schlüssel überhaupt nicht vertrauen"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Herunterladen"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Als Tabulator separierte Datei speichern"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Export Datei runterladen"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Fällig"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr "Fällig Relative"
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "Fehler: %1"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Leichtes aktualisieren deiner offenen Anfragen"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Ändere"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr "Benutzerdefinierte Felder verändern"
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Bearbeite benutzerdefinierte Felder für %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
-msgstr "Benutzerdefinierte Felder für alle Gruppen verändern"
+msgstr "Benutzerdefinierte Felder für alle Gruppen ändern"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Benutzerdefinierte Felder für alle Bereiche ändern"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
-msgstr "Benutzerdefinierte Felder für alle Benutzer verändern"
+msgstr "Benutzerdefinierte Felder für alle Benutzer ändern"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
-msgstr "Benutzerdefinierte Felder von Tickets in allen Stapeln verändern"
+msgstr "Benutzerdefinierte Felder von Anfragen in allen Bereichen ändern"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Bearbeite Beziehungen"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Bearbeite Suche"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Suche editieren"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Bearbeite Vorlagen für den Bereich %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Bearbeite gespeicherte Suchanfragen für diese Gruppe"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Bearbeite Systemvorlagen"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "GespeicherteSucheEditieren"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Veränderbarer Text"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Bearbeite Konfiguration für den Bereich %1"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Bearbeite benutzerdefiniertes Feld %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Bearbeite Mitgliedschaft für die Gruppe %1"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Bearbeite Mitgliedschaft der persönlichen Gruppe %1"
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
-msgstr "Es muss entweder eine Basis oder ein Ziel angegeben werden"
+msgstr "Es muss entweder eine Quelle oder ein Ziel angegeben werden"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Entweder hast du keine Rechte die gespeicherte Suche %1 anzuzeigen oder die Bezeichnung ist falsch"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
-msgstr "E-Mail"
+msgstr "Email"
+
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "E-Mail Konfiguration"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Email Zusammenfassung"
-#: lib/RT/User_Overlay.pm:235
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
-msgstr "E-Mail-Adresse bereits in Gebrauch"
+msgstr "Email Adresse bereits in Gebrauch"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "Email Zustellung"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr "Email Vorlage für periodische Nachrichten Zusammenfassungen"
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "E-Mail"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Aktiviert"
# ## muss das überhaupt übersetzt werden???
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Aktiviert (Abwählen deaktiviert dieses benutzerdefinierte Feld)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Aktiviert (Abwählen deaktiviert diese Gruppe)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Aktiviert (Abwählen deaktiviert diesen Bereich)"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Aktivierte Bereiche"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Status aktiviert: %1"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "Status aktiviert: %1"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Verschlüsseln"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Verschlüsseln als Standard"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Entschlüsseln/Verschlüsseln"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Verschlüsselte/Entschlüsselte Transaktion #%1 von Anfrage #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Verschlüsselung deaktiviert"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Verschlüsselung aktiviert"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Mehrere Werte eingeben"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "Mehrere Werte eingeben mit automatischer Vervollständigung"
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Gib Objekte oder URI's ein um zu anderen Objekten zu verlinken. Trenne mehrere Einträge mit Leerzeichen."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Einen Wert eingeben"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "Einen Wert eingeben mit automatischer Vervollständigung"
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Gib Stapel oder URI's ein um zu anderen Stapeln zu verlinken. Trenne mehrere Einträge mit Leerzeichen."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Gib Anfragen oder URI's ein um zu anderen Anfragen zu verlinken. Trenne mehrere Einträge mit Leerzeichen."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Gib bis zu %1 Werte ein"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Gib bis zu %1 Werte ein mit automatischer Vervollständigung"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Fehler"
# Queue->AddWatcher ist ein Code-Teil, nicht übersetzen
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Fehler in den Parametern zu Queue->AddWatcher"
# Queue->DeleteWatcher ist ein Code-Teil, nicht übersetzen
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Fehler in den Parametern zu Queue->DeleteWatcher"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Fehler in den Parametern zu Ticket->AddWatcher"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Fehler in den Parametern zu Ticket->DeleteWatcher"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Fehler zu RT Besitzer: öffentlicher Schlüssel"
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Fehler: Fehlende Anzeigetafel"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Fehler: falsche GnuPG Daten"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Fehler: kein privater Schlüssel"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Fehler: öffentlicher Schlüssel"
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Anfragen eskalieren"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Geschätzt"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Jeder"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Betrachte neu erstellte Anfragen eines Bereiches zwischen zwei Daten"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Betrachte gelöste Anfragen eines Bereiches zwischen zwei Daten"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Betrachte gelöste Anfragen eines Bereichs, gruppiert nach Besitzer"
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Beispiel:"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Ablaufdatum"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "Erweiterter Status"
+
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Zusatzinformationen"
-#: lib/RT/SavedSearch.pm:177
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr "Extrahiere Betreffs Etikett"
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr "Extrahiere Etiketten eines Transaktionsbetreffs und füge diese dem Betreff der Anfrage zu"
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Verbindung zur Datenbank fehlgeschlagen: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Konnte Attribut %1 nicht erstellen"
+
+#: NOT FOUND IN SOURCE
msgid "Failed to create search attribute"
msgstr "Such Attribut konnte nicht erstellt werden"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Konnte die Pseudogruppe 'Privileged' nicht finden."
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Konnte die Pseudogruppe 'Unprivileged' nicht finden."
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Konnte %1 %2 nicht laden"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Konnte %1 %2: %3 nicht laden"
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Konnte Modul %1 nicht laden. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "Objekt %1 konnte nicht geladen werden"
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Konnte Vorlage nicht laden"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "Konnte Vorlage nicht analysieren"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Feb"
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Feb."
-#: html/Elements/SelectAttachmentField:50
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Februar"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Quelle des Feldwertes:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "Datei Name"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Dateiname"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Mehrere Textfelder füllen"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Schreibe mehrere Wikitext Bereiche"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Ein Textfeld füllen"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Schreibe einen Wikitext Bereich"
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
-msgstr ""
+msgstr "Fülle dieses Feld mit einer URL."
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "%1 Textfelder füllen"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Schreibe bis zu %1 Wikitext Bereiche"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
-msgstr "Endpriorität"
+msgstr "Höchste Priorität"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "EndPriorität"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Finde alle Benutzer, deren"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
-msgstr "Finde Gruppen dessen"
+msgstr "Finde Gruppen, deren"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
-msgstr "Finde Leute deren"
+msgstr "Finde Leute, deren"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
-msgstr "Anfragen suchen"
+msgstr "Anfragen finden"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Fertig"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Erste"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Foo!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Änderung erzwingen"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Format"
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Weiterleiten"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Nachricht weiterleiten"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Nachricht weiterleiten und zurückkehren"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Nachricht weiterleiten"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Nachricht weiterleiten an dritte Person(en)"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "Nachricht weiterleiten"
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
-msgstr "%1 Anfrage(n) gefunden"
+msgstr "%quant(%1, Anfrage, Anfragen) gefunden"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Objekt gefunden"
@@ -1861,171 +2924,304 @@ msgstr "Objekt gefunden"
msgid "Freeform"
msgstr "Freie Eingabe"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Häufigkeit"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Fr"
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Fr."
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Freitag"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Alle Kopfzeilen"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Allgemein"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
-msgstr "Vorlage von Datei nehmen"
+msgstr "Vorlage von Datei übernehmen"
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Erste Schritte"
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "An %1 übergeben"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Global"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Globale benutzerdefinierte Felder"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Konfiguration globaler benutzerdefinierter Felder"
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
-msgstr ""
+msgstr "Globales Portlet %1 gespeichert"
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Globale Vorlage: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "GnuPG Fehler. Administrator kontaktieren"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "GnuPG Inegration ist deaktiviert"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr "GnuPG Belange"
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "GnuPG private Schlüssel für %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "GnuPG öffentliche Schlüssel für %1"
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
-msgstr "Start"
+msgstr "Los"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Los!"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Zeige Anfrage"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Diagramm"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Diagramm Eigenschaften"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "Grafische Diagramme sind nicht verfügbar"
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Gruppe"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Gruppenrechte"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Gruppe hat bereits Mitglieder"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Gruppe hat bereits Mitglieder: %1"
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Gruppe konnte nicht erstellt werden: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Gruppe angelegt"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Gruppe deaktiviert"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Gruppe aktiviert"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Gruppe hat kein solches Mitglied"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Gruppe nicht gefunden"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Gruppen Rechte"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Gruppen"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Gruppen können nicht Mitglied eines ihrer Mitglieder sein"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Gruppen auf die das Suchkriterium passt"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Gruppen in denen der Benutzer Mitglied ist (markieren zum Entfernen)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Gruppen in denen der Benutzer kein Mitglied ist (markieren zum Hinzufügen)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Gruppen zu denen der Benutzer gehört"
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr "hat Mitglieder"
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr "Kopf einer weitergeleiteten Nachricht"
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Hallo!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Hallo %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Verlauf"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "Verlauf der Gruppe %1"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "Verlauf des Benutzers %1"
-#: html/Elements/Tabs:65
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "Zuhause"
+
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Startseite"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Stunde"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Stunden"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "Ich habe %quant(%1, Betonmischer)"
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
+#: NOT FOUND IN SOURCE
msgid "I'm lost"
msgstr "Ich bin verwirrt"
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
-msgstr "Nr."
+msgstr "Id"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identität"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Wenn eine Freigabe abgewiesen wird, weise das Original ab und lösche wartende Freigaben"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Wenn kein Klient spezifiziert ist, dann generiere Anfragen mit diesem Klienten"
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
-msgstr "Wenn kein Bereich spezifiziert ist, dann generiere das Anfrage in diesem Bereich"
+msgstr "Wenn kein Bereich spezifiziert ist, dann generiere die Anfrage in diesem Bereich"
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Wenn dieses Programm setgid ist, könnte ein böswilliger lokaler Nutzer Administrator Rechte auf dem RT bekommen."
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Wenn Sie etwas aktualisiert haben, denken Sie daran hier zu speichern"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Unerlaubter Wert für %1"
@@ -2033,625 +3229,913 @@ msgstr "Unerlaubter Wert für %1"
msgid "Image"
msgstr "Bild"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Unveränderbares Feld"
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "Zeige auch deaktivierte benutzerdefinierte Felder an"
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Zeige auch deaktivierte Gruppen an."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Zeige auch deaktivierte Bereiche an."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Zeige deaktivierte Benutzer auch in der Suche an."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
-msgstr ""
+msgstr "Seite einbinden"
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Unvollständige Suche"
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "Unvollständige Anfrage"
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Individuelle Nachricht"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informiere den RT Besitzer, das Benutzer probleme mit öffentlichen Schlüsseln haben"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Informiere Benutzer das eine bestellte Anzeigetafel vermisst wird"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Informiere Benutzer das seine gesendete Nachricht ungültige GnuPG Daten enthält"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Informiere Benutzer über Probleme mit seinem öffentlichen Schlüssel. Es kann kein verschlüsselter Inhalt empfangen werden"
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Informiere Benutzer über sein zurückgesetztes Passwort"
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Informiere Benutzer über eine empfange verschlüsselte Email and diese nicht entschlüsselt werden kann, da der private Schlüssel fehlt"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Anfängliche Priorität"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "AnfänglichePriorität"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Initialisiere Datenbank"
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Eingabefehler"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "Eingabe muss mit %1 übereinstimmen"
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "RT Installieren"
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Interner Fehler"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Interner Fehler: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "%1 ungültig: %2 sieht nicht wie eine E-Mail Adresse aus"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "%1 ungültig: es sollte eine Zahl sein"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "%1 ungültig: das sieht nicht wie eine E-Mail Adresse aus"
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Ungültige Gruppenart"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Ungültiges Recht"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Ungültige Daten"
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Ungültiges Objekt"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Ungültiges Benutzer Objekt"
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr "Ungültiges Muster: %1"
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Ungültiger Bereich"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Ungültiges Recht"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr "Ungültiges Recht. Konnte das Recht '%1' nicht anerkennen"
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Ungültiger Wert für %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Ungültiger Wert für das benutzerdefinierte Feld"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Ungültiger Statuswert"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "Ist nicht verschlüsselt"
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Es ist wichtig, dass nicht authorisierte Benutzer dieses Programm nicht starten können."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Es wird empfohlen einen nicht priviligierten Unix User mit korrekten Gruppenrechten anzulegen um dieses Programm zu nutzen."
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Es verarbeitet verschiedene Parameter:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
-msgstr "kursiv"
+msgstr "Kursiv"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Jan"
-#: lib/RT/Date.pm:441
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Jan."
-#: lib/RT/Group_Overlay.pm:166
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "Januar"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Betrete oder verlasse diese Gruppe"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Jul"
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Jul."
-#: html/Ticket/Elements/Tabs:125
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "Juli"
+
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Alles"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Jun"
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Jun."
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "Juni"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "Lassen Sie 'localhost' wenn Sie nicht sicher sind. Leer lassen um über einen Socket zu verbinden."
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Sprache"
-#: html/Search/Elements/EditFormat:79
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Sprache"
+
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Groß"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
-msgstr "Letzter Kontakt"
+msgstr "Letzter"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Letzter Kontakt"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Zuletzt Kontaktiert"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Zuletzt Aktualisiert"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "Zuletzt geändert von"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Zuletzt geändert von"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "Zuletzt geändert am"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "ZuletztBearbeitetVon"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr "Zuletzt Aktualisiert Relativ"
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr "Leer lassen um an die aktuelle E-Mail Adresse (%1) zu senden"
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Leer lassen um den Standard Wert für Ihre Datenbank zu benutzen"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Links"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr "Legenden"
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Länge in Zeichen; Nutze '0' um alle Nachrichten inline darzustellen unabhängig von der Länge"
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Diesem Benutzer RT-Zugriff gewähren"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Diesem Benutzer Rechte zuweisen lassen"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "Los geht's!"
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
-msgstr "Link"
+msgstr "Verknüpfung"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Beziehung existiert bereits"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Beziehung konnte nicht erstellt werden"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Beziehung erstellt (%1)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Beziehung gelöscht (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Beziehung nicht gefunden"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Verweise auf Anfrage #%1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
-msgstr ""
+msgstr "Verknüpfe Werte mit"
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "Verknüpft"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr "verknüpft von"
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "verknüpft zu"
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
-msgstr ""
+msgstr "Beziehung nicht erstellt: Zugriff verweigert"
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Beziehungen"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Laden"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Gespeicherte Suchanfragen laden"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "GespeicherteSucheLaden"
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "Geladen %1 %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "Original gespeicherte Suche \"%1\" geladen"
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Geladene Perl Module"
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "Gespeicherte Suche \"%1\" geladen"
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Geladene Suche %1"
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Lokalisierung"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Adresse"
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Angemeldet als %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Abgemeldet"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Anmelden"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Abmelden"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Suchtyp unpassend"
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "E-Mail"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr "Hauptsächliche Beziehungstypen"
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Besitzer festlegen"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Status festlegen"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Fälligkeitsdatum festlegen"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Erledigungsdatum festlegen"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Anfangsdatum festlegen"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Startdatum festlegen"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Eingangsdatum festlegen"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Priorität festlegen"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Bereich festlegen"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Betreff festlegen"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Diese Gruppe dem Benutzer anzeigen"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Verwalte benutzerdefinierte Felder und Werte"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Gruppen und Gruppenmitglieder verwalten"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Eigenschaften und Einstellungen für alle Bereiche verwalten"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Bereich und bereichspezifische Einstellungen verwalten"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Verwalte gespeicherte Diagramme"
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Benutzer und Passworte verwalten"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mär"
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mär."
-#: lib/RT/Date.pm:445
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "März"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Alle Nachrichten als gelesen markieren"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "Maximale interne Nachrichten Länge"
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "Mai"
+
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Mai"
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Mitglied"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Mitglied %1 hinzugefügt"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Mitglied %1 gelöscht"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Mitglied hinzugefügt"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Mitglied hinzugefügt: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Mitglied gelöscht"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Mitglied nicht gelöscht"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Mitglied von"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "Mitglied von"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Mitglieder"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "Mitgliedschaft in %1 hinzugefügt"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "Mitgliedschaft in %1 gelöscht"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Mitgliedschaft"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "Mitgliedschaft des Benutzers %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Vereinigung erfolgreich"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Vereinigung fehlgeschlagen. Konnte EffectiveId nicht setzen"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Vereinigung fehlgeschlagen. Konnte Status nicht setzen"
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Vereinigen mit"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Vereinigt mit %1"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Nachricht"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
+msgstr "Nachricht nicht angezeigt da zu lang oder kein Text"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2451
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Nachrichten Fenster Höhe"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Nachrichten Fenster Breite"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Nachricht konnte nicht gespeichert werden"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Nachricht für Benutzer"
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Nachricht gespeichert"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Nachrichten über diese Anfrage werden nicht an diese Empfänger gesendet:"
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Minimale Passwortlänge"
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minuten"
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
+#: NOT FOUND IN SOURCE
msgid "Mismatched parentheses"
msgstr "Unausgeglichene Klammerung"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "%1: Fehlt ein Primärschlüssel?"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Handy"
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "Handy"
+
#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr "Ändere Zugriffskontrollliste (ACL)"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Alle benutzerdefinierten Felder %2, die zu %1 gehören, ändern"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Alle benutzerdefinierten Felder, die zu %1 gehören, ändern"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Gruppenrechte ändern"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Mitglieder ändern"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Rechte ändern"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Ändere Scrip-Vorlagen für diesen Bereich"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Ändere Scrips für diesen Bereich"
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Ändern der Benutzerrechte"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Ändere ein benutzerdefiniertes Feld für den Bereich %1"
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Ändere ein Scrip für den Bereich %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Ändere ein globales benutzerdefiniertes Feld"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Ändern der assoziierte Objekte von %1"
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Ändere Anzeigetafeln dieser Gruppe"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Ändere Datumsangaben für #%1"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Ändere Datumsangaben für Anfrage #%1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Ändern der globalen benutzerdefinierten Felder"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Ändere globale Gruppenrechte"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Ändere globale Gruppenrechte."
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Ändere globale Benutzerrechte"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Ändere globale Benutzerrechte."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Ändere Gruppen-Metadaten oder lösche die Gruppe"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Ändere Gruppenrechte für das benutzerdefinierte Feld %1"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Ändere die Gruppenrechte der Gruppe %1"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Ändere Gruppenrechte für den Bereich %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Ändere Mitgliedsverzeichnis dieser Gruppe"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Ändert den eigenen RT-Zugang"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Ändere Personen im Zusammenhang mit diesem Bereich %1"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Ändere Personen der Anfragen #%1"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Ändere eigene Anzeigetafeln"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Ändere Scrips für den Bereich %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Ändere auf alle Bereiche angewandte Scrips"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Ändere System Anzeigetafeln"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Ändere Vorlage %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Ändere globale Vorlagen"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Ändere die Anzeigetafel %1"
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
-msgstr ""
+msgstr "Ändere die standard \"RT auf einen Blick\" Ansicht"
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Ändere Gruppe %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Ändere die Suchen der Anzeigetafel %1"
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Ändere die Bereichsbeobachter"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Ändere das Abonnement der Anzeigetafel %1"
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Ändere Benutzer %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Ändere Anfrage #%1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Ändere Anfrage #%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Ändere Anfragen"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Ändere Benutzerrechte für benutzerdefinierte Felder von %1"
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Ändere Benutzerrechte für die Gruppe %1"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Ändere Benutzerrechte für den Bereich %1"
@@ -2660,11 +4144,23 @@ msgstr "Ändere Benutzerrechte für den Bereich %1"
msgid "ModifyACL"
msgstr "ACLBearbeiten"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "BenutzerdefiniertesFeldBearbeiten"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "ÄndereAnzeigetafel"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "ÄndereGruppenAnzeigetafel"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "ÄndereEigeneAnzeigetafel"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "EigeneMitgliedschaftBearbeiten"
@@ -2672,89 +4168,129 @@ msgstr "EigeneMitgliedschaftBearbeiten"
msgid "ModifyQueueWatchers"
msgstr "BereichsBeobachterBearbeiten"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "ScripsBearbeiten"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "SelbstBearbeiten"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "VorlageBearbeiten"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "AnfrageBearbeiten"
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Mo"
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Mo."
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Montag"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Mehr über %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Hinunter verschieben"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Hinauf verschieben"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Mehrere"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Sie müssen eine Angabe bei 'Name' machen"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "Meine %1 Anfragen"
-#: html/Tools/Elements/Tabs:63
+#: NOT FOUND IN SOURCE
+msgid "My Bookmarks"
+msgstr "Meine Markierungen"
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Mein Tag"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Meine Freigaben"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Meine Anzeigetafeln"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Meine gespeicherten Suchanfragen"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "neue Zeile"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Name"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Benutzername ist bereits in Gebrauch"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Named, shared collection of saved searches"
+msgstr "Namen gemeinsamer Sammlungen von gespeicherten Suchen"
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Niemals"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Neu"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Neue Beziehungen"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Neues Passwort"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Neue wartende Freigaben"
@@ -2762,418 +4298,572 @@ msgstr "Neue wartende Freigaben"
msgid "New Query"
msgstr "Neue Suche"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Neue Suche"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Neue und offene Anfragen für %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Neues benutzerdefiniertes Feld"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Neue Anzeigetafel"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Neue Gruppe"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Neue Nachrichten"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Neues Passwort"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Neue Passworterinnerung wurde verschickt"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Neuer Bereich"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Neue Wiedervorlage"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Neue Rechte"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Neues Scrip"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Neue Vorlage"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Neue Anfrage"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Neue Anfrage existiert nicht"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Neuer Benutzer"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Neuer Benutzer aufgerufen"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Neue Beobachter"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Nächste"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Nächste Seite"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: NOT FOUND IN SOURCE
+msgid "Next: "
+msgstr "Nächste: "
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "Spitzname"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Spitzname"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Nein"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "No: %1 geladen"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Keine Klasse definiert"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Kein benutzerdefiniertes Feld"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Kein benutzerdefiniertes Feld definiert"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Keine Gruppe definiert"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Keine Suche"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Kein Bereich vorhanden"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Kein RT-Benutzer gefunden. Bitte kontaktiere Sie Ihren RT-Administrator.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Kein Betreff"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Keine Vorlage"
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Keine Aktion"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Keine Spalte angegeben"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Kein Kommentar zu diesem Benutzer angegeben"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Keine Anzeigetafeln"
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Keine Beschreibung für %1 vorhanden"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Keine Gruppe angegeben"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Keine Gruppe mit diesen Kriterien gefunden"
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Kein passender Schlüssel für Verschlüsselung"
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Keine Schlüssel für diese Adresse"
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Keine Nachricht angefügt"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Verschlüsselung nicht benötigt"
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Kein Passwort gesetzt"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Keine Erlaubnis Bereiche anzulegen"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Kein Erlaubnis um Anfragen im Bereich '%1' anzulegen"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Kein Recht Benutzer anzulegen"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Kein Recht dieses Anfrage anzuzeigen"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
-msgstr ""
+msgstr "Keine Berechtigung um System weite Suchen zu speichern"
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Keine Berechtigung um Einstellungen zu speichern"
-#: html/SelfService/Update.html:117
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Kein Recht dieses Anfrage zu aktualisieren"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Keine Rolle angegeben"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Keine Rolle ausgewählt."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Kein privater Schlüssel"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Keine den Suchkriterien entsprechenden Bereiche gefunden"
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Kein Recht angegeben"
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Keine Rechte gefunden"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Keine Rechte gewährt."
-#: lib/RT/SavedSearch.pm:196
+#: NOT FOUND IN SOURCE
msgid "No search loaded"
msgstr "Keine Suche geladen"
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Keine Suche zu bearbeiten."
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Kein Betreff"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Kein oder unbrauchbarer Schlüssel für Unterzeichnung"
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "Keine Anfragen gefunden"
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Kein Transaktionstyp angegeben"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Keine brauchbaren Schlüssel"
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Keine auf die Suchkriterien passende Benutzer gefunden"
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Kein Wert an _Set geschickt!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Niemand"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Keine"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Nichtexistierendes Feld?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
-msgstr ""
+msgstr "Nicht gesetzt"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Nicht gefunden"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Nicht angemeldet."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Nicht angegeben"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Noch nicht implementiert."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Bemerkungen"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Benachrichtigung konnte nicht verschickt werden"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Benachrichtige AdminCCs"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Benachrichtige AdminCCs als Kommentar"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Benachrichtige CCs"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Benachrichtige CCs als Kommentar"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Benachrichtige andere Empfänger"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Benachrichtige andere Empfänger als Kommentar"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Benachrichtige Besitzer"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Benachrichtige Besitzer als Kommentar"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Besitzer über ihre abgewiesene Anfrage informieren"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Benachrichtige Besitzer, dass sein Anfrage von allen Entscheidungsträgern freigegeben wurde"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Benachrichtige Besitzer, dass sein Anfrage von einigen Entscheidungsträgern freigegeben wurde"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Benachrichtige Besitzer und AdminCCs neuer auf Freigabe wartende Anfragen"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Benachrichtige die Klienten"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Benachrichtige die Klienten und CCs"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Benachrichtige die Klienten und CCs als Kommentar"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Benachrichtige die Klienten, CCs und AdminCCs"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Benachrichtige die Klienten, CCs und AdminCCs als Kommentar"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "Benachrichtige mich über ungelesene Nachrichten"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "Nov"
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Nov."
-#: html/Search/Elements/SelectAndOr:47
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "November"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Anzahl der Suchergebnisse"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
-msgstr "Oder"
+msgstr "ODER"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Objekt konnte nicht erstellt werden"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Objekt konnte nicht gelöscht werden"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Objekt erstellt"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objekt gelöscht"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Objekt vom Typ %1 kann keine benutzerdefinierten Felder haben"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Objekt Typ passt nicht"
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr "Objekt Liste ist leer"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Okt"
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Okt."
-#: html/Tools/Elements/Tabs:55
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "Oktober"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Offline"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Offline Bearbeitung"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Offline Upload"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "am"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
-msgstr ""
+msgstr "Am %1, %2 schrieb:"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "Beim Schliessen"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Bei Kommentar"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Bei Korrespondenz"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Bei Erstellen"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Bei Besitzerwechsel"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Bei Änderung der Priorität"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Bei Änderung des Bereichs"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Beim Erneut Öffnen"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Beim Erledigen"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Beim Ändern des Status"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Bei einer Transaktion"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "Einmaliger Bcc"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "Einmaliger Cc"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Zeige nur Freigaben für nach dem %1 erstelle Anfragen"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Zeige nur Freigaben für vor dem %1 erstellte Anfragen"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Nur Benutzerdefinierte Felder anzeigen für:"
@@ -3181,103 +4871,140 @@ msgstr "Nur Benutzerdefinierte Felder anzeigen für:"
msgid "Open"
msgstr "Offen"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
-msgstr ""
+msgstr "Öffne Anfragen"
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "URL öffnen"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Öffnen"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Offene Anfragen"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Öffne Anfragen bei Korrespondenz"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Optionen"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Sortiert nach"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organisation"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Ursprüngliche Anfrage: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Ausgehende Mail eines Kommentars gespeichert"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Ausgehende Mail gespeichert"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Mit der Zeit steigt die Priorität auf"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Eigene Anfragen"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "EigeneAnfrage"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Besitzer"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr "Besitzer '%1' hat keine Rechte die Anfrage zu besitzen"
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "Besitzer wurde von %1 zu %2 geändert"
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "Besitzer konnte nicht gesetzt werden"
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Besitzer mit Gewalt von %1 in %2 geändert"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "Besitzer Name"
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Seite"
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Seite %1 von %2"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Seite 1 von 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Seite nicht gefunden"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Pager"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "Pager"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Eltern"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Passwort"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Passworterinnerung"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Passwort geändert"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Das Passwort muss mindestens %1 Zeichen lang sein"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Passwort erstellt"
@@ -3285,190 +5012,310 @@ msgstr "Passwort erstellt"
msgid "Password too short"
msgstr "Passwort ist zu kurz"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Passwort: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Passwort: Zugriff verweigert"
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "PasswortÄnderung"
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Passwörter verschieden"
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Passwörter verschieden, keine Änderung"
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "Pfad zu sendmail"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Personen"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Führe eine benutzerdefinierte Aktion aus"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Perl Konfiguration"
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Zugriff verweigert"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
-msgstr ""
+msgstr "Zugriff verweigert"
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
msgstr ""
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Persönliche Gruppen"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Persönliche Gruppen"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Persönliche Gruppen:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Telefonnummern"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Bitte die URL überprüfen und erneut versuchen"
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Voreinstellungen"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr ""
+msgid "Preferences %1 for user %2."
+msgstr "Voreinstellung %1 für Benutzer %2"
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
-msgstr ""
+msgstr "Voreinstellung für %1 gespeichert"
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "Voreinstellung für Benutzer %1 gespeichert"
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "Voreinstellung gespeichert"
-#: lib/RT/Action/Generic.pm:195
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Bevorzugter Schlüssel: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Bevorzugter Schlüssel"
+
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Prepare Stumpf ausgeführt"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
-msgstr "Vorherige"
+msgstr "Zurück"
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Zurück"
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Vorherige Seite"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Rolle %1 nicht gefunden."
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr "Drucke das Ergebnis der zusammengefassten Nachrichten nach STDOUT; nicht per Email versenden. Nicht als versendet markieren"
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Diese Nachricht drucken"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Priorität"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Priorität beginnt bei"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Datenschutz"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Privatsphäre:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Privater Schlüssel"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Privilegiert"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Privilegierungsstatus: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Privilegierte Benutzer"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr "Bearbeitung ohne Transaktion, einige Bedinungen and Aktionen könnten nicht funktionieren. Erwäge die Nutzung des --transaction Argumentes"
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudogruppe für internen Gebrauch"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "Öffentlicher Schlüssel '0x%1' wird benötigt um die Signatur zu prüfen"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Abfragen"
+
+#: share/html/Search/Edit.html:64
msgid "Query"
msgstr "Suche"
-#: html/Search/Build.html:121
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Suche erstellen"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
-msgstr ""
+msgstr "Abfrage:"
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Bereich"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
msgstr "Bereich %2 nicht gefunden"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Name des Bereichs"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Bereich existiert bereits"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Bereich konnte nicht angelegt werden"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Bereich konnte nicht geladen werden"
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Bereich angelegt"
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Bereich Id"
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Bereich nicht gefunden"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "Bereich Rechte"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "Bereichsschlüssel"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr "Bereich AdminCc"
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr "Bereich Cc"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "Bereich Name"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Bereiche"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Stapel die ich verwalte"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Stapel in denen ich AdminCc bin"
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Schnellsuche"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Schnelle Anfrageerstellung"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
@@ -3476,359 +5323,552 @@ msgstr "RSS"
msgid "RT %1"
msgstr "RT %1"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 für %2"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "RT Administration"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "RT Administrator E-Mail"
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "RT Konfiguration"
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "RT Fehler"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "RT Selbstbedienung"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "RT Variablen"
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "RT auf einen Blick"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
+msgstr "RT Übersicht für Benutzer %1"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
-msgstr ""
+msgstr "RT kann Inhalte anderer Webservices anzeigen in diesem benutzerdefinierten Feld"
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
-msgstr ""
+msgstr "RT kann die Inhalte dieser benutzerdefinierten Felder in Hyperlinks zu anderen Diensten umwandeln."
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT konnte die Session nicht speichern"
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT für %1"
-#: html/Search/Simple.html:58
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT wird für die Verbindung zur Datenbank diesen Benutzer verwenden. Er wird für Sie erstellt."
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT wird einen Benutzer \"root\" erstellen und diesem dieses Password geben"
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "RT wird nach allem suchen was in einem Anfragen Betreff steht."
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr "RT wird <tt>__id__</tt> und <tt>__CustomField__</tt> mit der Record ID und dem Wert des benutzerdefinierten Feldes ersetzen."
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
msgstr ""
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr "RT arbeitet mit verschiedenen Datenbanken zusammen. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> und <b>SQLite</b> werden alle unterstützt."
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Echter Name"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "Vollständiger Name"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Empfänger"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr "Speichere alle Aktualisierungen"
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "Referenz von %1 hinzugefügt"
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "Referenz von %1 gelöscht"
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "Referenz auf %1 hinzugefügt"
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "Referenz auf %1 gelöscht"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Referenziert von"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Bezieht sich auf"
-#: html/Elements/Refresh:57
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Aktualisieren"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Seite alle %1 Minuten aktualisieren."
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr "Wiedervorlage '%1' zugefügt"
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr "Wiedervorlage '%1' abgeschlossen"
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr "Wiedervorlage '%1' erneut geöffnet"
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr "Wiedervorlage Anfrage #%1"
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "Wiedervorlage"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr "Wiedervorlage für Anfrage #%1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Entferne AdminCC"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Lesezeichen entfernen"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Entferne CC"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Entferne Klient"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Antworten"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Antwort Adresse"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Antwort an Klienten"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Antworte auf Anfragen"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "AnfrageBeantwortung"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Auswertungen"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Klient"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Klienten"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
-msgstr "Anfragen sollten erlegt werden innerhalb"
+msgstr "Anfragen sollten erledigt werden innerhalb von"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Benötigter Parameter '%1' nicht angegeben"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Zurücksetzen"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr "Geheimen Authentifikationstoken zurück setzen"
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
-msgstr ""
+msgstr "Zurücksetzen"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Zuhause"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Erledigen"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Erledige Anfrage #%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Erledigt"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Gelöst durch Besitzer"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Gelöst in Zeitraum"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Erledigte Tickets in einer Zeitspanne, gruppiert nach Besitzer"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Erledigte Tickets, sortiert nach Besitzer"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr "Erledigt Relativ"
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Ergebnisse"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Zur Anfrage zurückkehren"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Passwort wiederholen"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Zurücksetzen"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Recht weitergegeben"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Recht erteilt"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Recht geladen"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Recht konnte nicht zurückgezogen werden"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Recht nicht gefunden"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Recht nicht gefunden."
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Recht zurückgezogen"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Rechte"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Rechte für %1 konnten nicht gewährt werden"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "Rechte für %1 konnten nicht entzogen werden"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Rollen"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Zeilen"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Reihen pro Fenster"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Zeilen pro Seite"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Sa"
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Sa."
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Samstag"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Speichern"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Änderungen Sichern"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Einstellungen speichern"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Als neu speichern"
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Änderungen Sichern"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Gespeichert %1 %2"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Gespeicherte Suche %1 nicht gefunden"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr "Gespeicherte Grafiken"
+
+#: NOT FOUND IN SOURCE
msgid "Saved search %1"
msgstr "Gespeicherte Suche %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Gespeicherte Suchanfragen"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Scrip #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip angelegt"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Scrip Felder"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip gelöscht"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrips"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Skripte und Empfänger"
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Auf alle Bereiche angewandte Scrips"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Suchen"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
-msgstr "Such Einstellungen"
+msgstr "Sucheinstellungen"
-#: lib/RT/SavedSearch.pm:115
+#: NOT FOUND IN SOURCE
msgid "Search attribute load failure"
msgstr "Suchattribut lade Fehler"
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Suche nach Freigaben"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Suche nach Anfragen"
-#: html/Search/Simple.html:55
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Suche nach Anfragen. Gib Anfrage <strong>id's</strong>, <strong>Bereichsnamen</strong>, <strong>Benutzernamen</strong> und Klienten <strong>Email Adressen</strong> ein."
+
+#: NOT FOUND IN SOURCE
msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
msgstr "Suche nach Tickets. Eingabe <strong>id</strong> Nummer, <strong>Stapel</strong> nach Name, Besitzer nach <strong>Benutzername</strong> und Klienten nach <strong>Email Adresse</strong>. RT wird nach Deiner Eingabe in Tickets und Anhängen suchen."
@@ -3836,237 +5876,321 @@ msgstr "Suche nach Tickets. Eingabe <strong>id</strong> Nummer, <strong>Stapel</
msgid "Search for tickets. Enter <strong>id</strong> numbers,<strong>queues</strong> by name"
msgstr "Suche nach Tickets. Eingabe <strong>id</strong> Nummer,<strong>Stapel</strong> nach Name"
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Such Optionen"
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Suchergebnis gruppiert nach %1"
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Search update: %1"
msgstr "Suche erneuern: %1"
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "Die Suche nach Volltexten in jedem Ticket kann sehr lange dauern, aber wenn Du es benötigst, kannst Du nach jedem Wort in jedem Ticketverlauf suchen indem Du <b>fulltext:<i>Wort</i></b> eingibst."
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr "Geheimer Authentifikationstoken"
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Sicherheit:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Siehe auch:"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Benutzerdefinierte Felder anzeigen"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Anzeigen der gesendeten Nachricht und deren Empfänger"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Anzeigen von anfrage-privaten Kommentaren"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Anfrage Zusammenfassungen anzeigen"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "Benutzerdefiniertes Feld anzeigen"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "Anzeigetafel anzeigen"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "GruppeAnzeigen"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "Gruppen Anzeigetafel anzeigen"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "Eigene Anzeigetafel anzeigen"
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "BereichAnzeigen"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
msgid "Select"
msgstr "Auswahl"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Datenbank Typ wählen"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Wählen Sie ein benutzerdefiniertes Feld aus"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Wählen Sie eine Gruppe aus"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Stapel auswählen"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Wählen Sie einen Bereich für Ihre neue Anfrage"
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Wählen Sie einen Benutzer aus"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Andere Sprache wählen"
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Wählen Sie ein benutzerdefiniertes Feld"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Benutzerdefinierte Felder für alle Bereiche auswählen"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzergruppen aus"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzer aus"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Wählen Sie benutzerdefinierte Felder für alle Anfragen in allen Bereichen aus"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
-msgstr "Wählen Sie benutzerdefinierte Felder für Transaktionen mit Anfragen in allen Bereichen aus "
+msgstr "Wählen Sie benutzerdefinierte Felder für Transaktionen mit Anfragen in allen Bereichen aus"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Anzeigetafel auswählen"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Wählen Sie eine Gruppe aus"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Wählen Sie mehrere Werte aus"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Wählen Sie einen Wert aus"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Wählen Sie einen Bereich aus"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Wähle Stapel aus, welche auf der \"RT at a glance\" Seite angezeigt werden"
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Wählen Sie ein Scrip aus"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Wählen Sie eine Vorlage aus"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Wählen Sie bis zu %1 Werte aus"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Wählen Sie einen Benutzer aus"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Ausgewählte Benutzerdefinierte Felder"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "Ausgewählter Schlüssel ist nicht vertrauenswürdig oder existiert nicht mehr."
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Ausgewählte Objekte"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
-msgstr "Auswahl wurde geändert. Bitte speichere Deine Änderungen"
+msgstr "Auswahl wurde geändert. Bitte speichere deine Änderungen"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Email erfolgreich versendet"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Schickt eine Nachricht an alle Beobachter"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Schickt einen Kommentar an alle Beobachter"
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Schickt eine Nachricht an die Klienten und CCs"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Schickt einen Kommentar an die Klienten und CCs"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Schickt eine Nachricht an die Klienten"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Schickt eine Nachricht an die direkt angegebenen CCs und BCCs"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Schickt eine Nachricht an alle CCs"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
-msgstr "Schickt einen Kommentar an alle CCs "
+msgstr "Schickt einen Kommentar an alle CCs"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Schickt eine Nachricht an die administrativen CCs"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Schickt einen Kommentar an die administrativen CCs"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Schickt eine Nachricht an den Besitzer"
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Sep"
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Sep."
-#: html/Ticket/Elements/ShowTransaction:158
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "September"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Zeige"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Zeige Freigaben"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Zeige Spalten"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Zeige Ergebnisse"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr "Zeige Anfrage Eigenschaften der %1 Ebene"
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Zeige freigegebene Anfragen"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "Zeige auch"
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Zeige Grundlagen"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Zeige abgelehnte Anfragen"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Zeige Details"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Zeige Verknüpfung Beschreibungen"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr "Zeige ältesten Eintrag zuerst"
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Zeige anhängige Anfragen"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Zeige auf andere Freigaben wartende Anfragen"
@@ -4074,235 +6198,402 @@ msgstr "Zeige auf andere Freigaben wartende Anfragen"
msgid "ShowACL"
msgstr "ACLAnzeigen"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "KonfigurationsMenüAnzeigen"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "AusgehendeNachrichtenAnzeigen"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "GespeicherteSuchanfragenAnzeigen"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "ScripsAnzeigen"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "VorlagenAnzeigen"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "AnfragenAnzeigen"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "AnfrageKommentareAnzeigen"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "Reißwolf"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr "Shredder benötigt ein Verzeichnis für Export Dateien. Bitte prüfen Sie das <span class=\"file-path\">%1</span> vorhanden ist und für den Webserver beschreibbar ist."
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Seitenleiste"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "Signieren"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "Standardmässig unterzeichnen"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Als Klient einer Anfrage oder Anfrage- bzw. Bereichs-CC eintragen"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Als Anfrage- oder Bereichs-AdminCC eintragen"
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "E-Mail-Signatur"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Unterzeichnung deaktiviert"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "Unterzeichung aktiviert"
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Vereinfachte Suche"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
-msgstr "Einzel"
+msgstr "Einzelne"
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Name der Website"
-#: html/Search/Elements/EditFormat:75
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Grösse"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Überspringe Menü"
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr "Ãœberspringe deaktivierten Benutzer"
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Klein"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
-msgstr ""
+msgstr "Einige Browser können evtl. nur Inhalte der gleichen Domain wie die des RT Server anzeigen."
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Sortieren"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Sortierung"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Gib an ob dieses ein täglicher oder wöchentlicher Durchlauf ist"
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Tabellenkalkulation"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Phase"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Begonnen"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr "Begonnen Relativ"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Beginnt"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr "Beginnt Relativ"
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Staat"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Status"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Statusänderung"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Status von %1 auf %2 geändert"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
-msgstr "Ãœbernehmen"
+msgstr "Stehlen"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
-msgstr "Anfragen übernehmen"
+msgstr "Anfragen stehlen"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
-msgstr "AnfrageÃœbernehmen"
-
-#: lib/RT/Transaction_Overlay.pm:678
+msgstr "AnfrageStehlen"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Schritt %1 von %2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Gestohlen von %1"
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Darstellung"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Betreff"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr "Betreffskennzeichnung"
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Betreff wurde auf %1 geändert"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr "Betreffskennzeichung geändert zu: %1"
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Ãœbermitteln"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "Abonnieren"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "Abonniere Anzeigetafel %1"
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Subscribe to email dashboards"
+msgstr "Abonniere Email Anzeigetafeln"
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "Abonniere Anzeigetafel"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "Anzeigetafel %1 abonniert"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "Abonnement"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr "Abonnement konnte nicht erstellt werden: %1"
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Gelungen"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Erfolgreich entschlüsselte Daten"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Erfolgreich verschlüsselte Daten"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "So"
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "So."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "SuperBenutzer"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Eingestellt"
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "System"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "System Konfiguration"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Systemvorgabe"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Systemfehler"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr "System Fehlerr: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "System Werkzeuge"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Systemfehler. Recht nicht delegiert."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Systemfehler. Recht nicht gewährt."
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Systemgruppen"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "System Rechte"
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "SystemRolegroup für internen Gebrauch"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TEST_STRING"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Ãœbernehmen"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Anfragen übernehmen"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "AnfrageÃœbernehmen"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Ãœbernommen"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Vorlage"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Vorlage #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Vorlage #%1 gelöscht"
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Vorlage '%1' nicht gefunden"
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Vorlage gelöscht"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Vorlage ist leer"
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
-msgstr ""
+msgstr "Vorlage ist zwingend erforderlich"
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Vorlage nicht gefunden"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Vorlagen eingelesen"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
-msgstr ""
+msgstr "Vorlagen Analyse Fehler"
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Vorlagen"
@@ -4310,356 +6601,567 @@ msgstr "Vorlagen"
msgid "Text"
msgstr "Text"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Das ist bereits der aktuelle Wert"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Dies ist kein gültiger Wert für dieses benutzerdefinierte Feld"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Das ist der gleiche Wert"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Diese Rolle hat dieses Recht bereits"
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Diese Rolle ist bereits ein %1 dieses Bereichs"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Diese Rolle ist bereits ein %1 dieser Anfrage"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
-msgstr "Diese Rolle ist nicht ein %1 dieses Bereichs"
+msgstr "Diese Rolle ist kein %1 dieses Bereichs"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr "Diese Rolle ist kein %1 dieser Anfrage"
+
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Dieser Bereich existiert nicht"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Diese Anfrage hat ungelöste Abhängigkeiten"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Diese Anfrage gehört bereits diesem Benutzer"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Dieser Benutzer existiert nicht"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Dieser Benutzer ist bereits privilegiert"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Dieser Benutzer ist bereits unprivilegiert"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Dieser Benutzer ist jetzt privilegiert"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Dieser Benutzer ist jetzt unprivilegiert"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Diesem Benutzer dürfen keine Anfragen aus diesen Bereich gehören"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Dies ist keine numerische ID"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Grundlagen"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "Der CC einer Anfrage"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "DBA Datenbank Password"
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "Der administrative CC einer Anfrage"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "Der Domain-Name des Datenbank Server (z.B. 'db.example.com')."
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Das nachfolgende Kommando findet alle aktiven Tickets in dem Stapel 'General' und setzt deren Priorität auf 99 wenn die seit 4 Stunden nicht bearbeitet wurden:"
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "Der Schlüssel wurde deaktiviert"
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "Der Schlüssel wurde entfernt"
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "Der Schlüssel ist abgelaufen"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr "Der Schlüssel ist voll vertrauenswürdig"
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr "Der Schlüssel ist ulitmativ vertrauenswürdig"
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Der neue Wert wurde gesetzt."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "Der Besitzer einer Anfrage"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "Die angefragte Seite konnte nicht gefunden werden"
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Der Klient einer Anfrage"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr "Die von Ihnen gewählten Einstellungen wurden in %1 gespeichert."
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr "Das System kann keine ausgehenden Nachrichten unterzeichnen. Normalerweise ist das ein Hinweis auf ein falsches Passwort oder der GPG Agent läuft nicht. Bitte alarmiere deinen System Administrator umgehend. Die Adressen mit Problemen sind:"
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Design"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "Es sind mehrere Schlüssel für die Verschlüsselung vorhanden"
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "Da sind ungelesene Nachrichten für diese Anfrage"
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr "Dem Schlüssel kann nur geringfügig getraut werden"
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "Es wurde kein passender Schlüssel für die Verschlüsselung gefunden"
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr "Es wurde ein Schlüssel gefunden aber ohne Vertrauensstellung"
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Diese Kommentare sind generell nicht für den Benutzer sichtbar"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Dieses benutzerdefinierte Feld passt nicht zum Objekt"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Dieses Feature ist nur für Systemadministratoren verfügbar"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr "Dieses könnte heissen, dass das Verzeichnis '%1' ist nicht schreibbar oder eine Datenbank Tabelle wird vermisst oder ist defekt."
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Diese Nachricht wird an folgende Empfänger gesendet:"
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Dieses Werkzeug erlaubt es Benutzern beliebige Perl-Module von RT aus aufzurufen."
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Diese Transaktion scheint keinen Inhalt zu haben"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "Die %1 dringensten Anfragen dieses Benutzers"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Do"
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Do."
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Anfrage"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Anfrage #%1 Alles aktualisieren: %2"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "Anfrage #%1 Verbindungsdiagramm"
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Anfrage #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "Anfrage %1"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Anfrage %1 wurde im Bereich '%2' angelegt"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Anfrage %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Benutzerdefinierte Anfrage Felder"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Geschichte von Anfrage #%1 %2"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Anfrage erledigt"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Anfragen suchen"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Anfrage Transaktion"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Inhalt der Anfrage"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Art des Inhalts der Anfrage"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Anfrage konnte aufgrund eines internen Fehlers nicht angelegt werden"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "Anfrage konnte nicht geladen werden"
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Anfragen Anzeige"
+
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Anfrage Metadaten"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Status der Anfrage geändert"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "TicketSQL Suchmodul"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Anfragen"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Anfragen %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr "Anfragen %1 von %2"
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Anfragen erstellt nach"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Anfragen erstellt vor"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Anfragen gelöst nach"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Anfragen gelöst vor"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Anfragen, die von dieser Freigabe abhängen:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Geschätzte Zeit"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Verbleibende Zeit"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
-msgstr "Arbeitszeit"
+msgstr "Gearbeitete Zeit"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Verbleibende Zeit"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Zeit zum anzeigen"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Gearbeitete Zeit"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
-msgstr "Arbeitszeit"
+msgstr "Gearbeitete Zeit"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Zeitzone"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
-msgstr "Titel"
+msgstr "Spaltenüberschrift"
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "An"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
-msgstr "Füri Hilfe, Schulung, angepasste Entwicklungen oder Lizensierung, kontaktiere bitte %1."
+msgstr "Für Hilfe, Schulung, angepasste Entwicklungen oder Lizensierung, kontaktiere bitte %1."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Eingegangen"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Werkzeuge"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Summe"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transaktion"
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Transaktion %1 eliminiert"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transaktion erstellt"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Benutzerdefinierte Felder bei Transaktionen"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaction->Create fehlgeschlagen, da Objekttyp und ID nicht angegeben wurden"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr "Verlauf Datum"
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Transaktionen sind unveränderbar"
-#: lib/RT/Date.pm:418
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Vertrauen"
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Di"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue Dec 25 21:59:12 1995"
+msgstr "Di Dezember 25 21:59:12 1995"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue, 25 Dec 1995 21:59:12 -0300"
+msgstr "Di, 25 Dezember 1995 21:59:12 -0300"
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Di."
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Typ"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Typ geändert von '%1' nach '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr "Konnte Objekt Typ oder Id nicht feststellen"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "Konnte Anzeigetafel %1 nicht abonnieren: Zugriff verweigert"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Nicht implementiert"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unix Login"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr "Unbekannt (kein Vertrauenswert zugewiesen)"
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr "Unbekannt (dieser Wert ist neu für das System)"
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Unbekannte Inhaltskodierung (Content-Encoding) %1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
+#: NOT FOUND IN SOURCE
msgid "Unknown field: $key"
msgstr "Unbekanntes Feld: $key"
-#: html/Elements/SelectResultsPerPage:58
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "Unbekanntes Feld: %1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr "nicht begrenzt"
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "unbegrenzt"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Unbenannte Suche"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Unprivilegiert"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Nichtausgewähltes benutzerdefiniertes Feld"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
-msgstr "Nichtausgewähltes Objekte"
+msgstr "Nicht ausgewählte Objekte"
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr "Privaten Schlüssel zurück setzen"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Zurückgegeben"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Aktualisieren"
@@ -4667,19 +7169,27 @@ msgstr "Aktualisieren"
msgid "Update All"
msgstr "Alles aktualisieren"
-#: html/Ticket/Update.html:135
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Diagramm aktualisieren"
+
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Anfrage Aktualisieren"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Aktualisierungtyp"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Formatierung aktualisieren und Suche starten"
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Mehrere Anfragen aktualisieren"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Aktualisierung nicht gespeichert."
@@ -4687,310 +7197,574 @@ msgstr "Aktualisierung nicht gespeichert."
msgid "Update selected tickets"
msgstr "Aktualisiere ausgewählte Anfragen"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Aktualisiere Anfrage"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Aktualisiere Anfrage #%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Aktualisiere Anfrage #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Aktualisierungstyp war weder Korrespondenz noch Kommentar."
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr "Aktualisiere Status"
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Aktualisiert"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "Gespeicherte Suche \"%1\" aktualisiert"
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Hochladen"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Hochladen mehrerer Dateien"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Hochladen mehrerer Bilder"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Hochladen einer Datei"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Hochladen eines Bildes"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Hochladen von bis zu %1 Dateien"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Hochladen von bis zu %1 Bildern"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Änderungen hochladen"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Benutzung: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "SSL benutzen?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "Benutze Standard (%1)"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Benutze andere administrative RT Tools"
-#: lib/RT/Ticket_Overlay.pm:506
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "Benutze System Standard (%1)"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Benutzer"
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "Benutzer '%1' konnte nicht gefunden werden"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr "Benutzer (Angelegt - abgelaufen)"
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Benutzerdefiniert"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Benutzerdefinierte Konditionen und Aktionen"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Benutzerrechte"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "Benutzer hat einen unbekannten Aktualisierungstyp für das benutzerdefinierte Feld %1 bei %2-Objekt #%3 verlangt"
-#: html/Admin/Users/Modify.html:301
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Benutzer konnte nicht angelegt werden: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Benutzer angelegt"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Benutzerdefinierte Gruppe"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "Benutzer hat eine leere Email Adresse"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Benutzer geladen"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "GnuPG Schlüssel des Benutzers"
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Benutzerdefinierte Gruppe"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Benutzername"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Benutzernamen Format"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Benutzer"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Auf diese Kriterien zutreffende Benutzer"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
-msgstr ""
+msgstr "Benutze Transaktion #%1..."
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Gültige Suche"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Validierung"
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Werte"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Verschiedene RT Berichte"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Anzeigetafel dieser Gruppe anzeigen"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Eigene Anzeigetafeln anzeigen"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "System Anzeigetafel anzeigen"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "W3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr "WYSIWYG Editor Höhe"
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "WYSIWYG Nachrichten Verfasser"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Warnung! Dies ist NICHT signiert!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Warnung: Du hast keine Email Adresse eingetragen, Du wirst keine Nachricht bekomme von dieser Anzeigentagel bis du eine vergeben hast"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Beobachte"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "BeobachteAlsAdminCc"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Beobachter"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "Beobachter Gruppe"
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Beobachter"
-#: lib/RT/Date.pm:419
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Web Port"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Mi"
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Mi."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "Wochenübersicht"
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Willkommen im RT"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
-msgstr "Was ich heute tat"
+msgstr "Was ich heute gemacht habe"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Was ist RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr "Wenn RT eine E-Mail nicht bearbeiten kann, wohin soll sie Weitergeleitet werden?"
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
-#: etc/initialdata:521
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Wenn das Ticket freigegeben wurde von allen involvierten Personen, füge die Korrespondenz dem original Ticket hinzu"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "Wenn das Ticket freigegeben wurde von einer involvierten Personen, füge die Korrespondenz dem original Ticket hinzu"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Wenn eine Anfrage erstellt wird"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Wenn ein freizugebendes Ticket erstellt wurde, informiere den Besitzer und den AdminCc des Tickets über die anstehende Freigabe"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Wenn irgendetwas passiert"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "Immer wenn ein Ticket geschlossen wird"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Immer wenn ein Ticket erneut geöffnet wird"
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Immer wenn eine Anfrage erledigt wird"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Immer wenn der Besitzer einer Anfrage wechselt"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Immer wenn sich die Priorität eines Anfragen ändert"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Immer wenn eine Anfrage den Bereich wechselt"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Immer wenn sich der Status einer Anfrage ändert"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Immer wenn eine benutzerdefinierte Bedingung auftritt"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Immer wenn ein neuer Kommentar eingeht"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Immer wenn neue Korrespondenz eingeht"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr "rauslöschen"
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Arbeit"
-#: html/Search/Results.html:82
+#: NOT FOUND IN SOURCE
msgid "Work offline"
msgstr "Offline arbeiten"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "Arbeit"
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Gearbeitet"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Ja"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Sie sind bereits Besitzer dieser Anfrage"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr "Du willst ausgehende Nachrichten verschlüsseln, aber es gibt Probleme mit den öffentlichen Schlüsseln der Empfänger. Du musst das Problem mit den Schlüsseln beheben, deaktiviere das Senden von Nachrichten an Empfänger mit Schlüssel Problemen oder deaktiviere Verschlüsselung."
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr "Du willst ausgehende Nachrichten verschlüsseln, aber es gibt Probleme mit dem öffentlichen Schlüssel des Empfängers. Du musst das Problem mit den Schlüsseln beheben, deaktiviere das Senden von Nachrichten an den Empfänger mit Schlüssel Problemen oder deaktiviere Verschlüsselung."
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Sie sind kein autorisierter Benutzer"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Du kannst zur <a href=\"%1\"> ungelesenen Nachricht springen oder springe zur <a href=\"%2\"> ungelesenen Nachricht und markiere alle Nachrichten als gelesen</a>."
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
-msgstr "Du kannst die vordefinierte Such auch selbst editieren"
+msgstr "Du kannst die vordefinierte Suche auch selbst editieren"
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
-msgstr "Sie können nur Anfragen ohne Besitzer zuweisen"
+msgstr "Sie können nur Anfragen zuweisen, die keinen Besitzer haben"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
-msgstr ""
+msgstr "Sie können nur Tickets übernehmen die keinen Besitzer haben"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "Sie haben keine b>SuperUser</b> Rechte."
+
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "Sie haben %1 Anfragen im Bereich %2 gefunden"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Sie wurden von RT abgemeldet."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Sie haben kein Recht, Anfragen in diesem Bereich anzulegen."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Sie dürfen in diesem Bereich keine Anfragen erstellen"
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Sie müssen ein Administrator Password eingeben"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Sie können sich gerne wieder anmelden"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Ihre Anfrage wurde von %1 freigegeben. Andere Freigaben können noch ausstehen."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Ihre Anfrage wurde freigegeben."
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Ihre Anfrage wurde abgewiesen"
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Ihr Benutzername oder Passwort ist falsch"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "PLZ"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[keine]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "nach dem"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "Erlaube Erstellung von gespeicherten Suchabfragen"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "Erlaube das Laden von gespeicherten Suchabfragen"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "wie an %1 gewährt"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "Balken"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "vor dem"
+
#: NOT FOUND IN SOURCE
msgid "belongs to"
msgstr "gehört zu"
-#: html/Search/Results.html:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "unten nach oben"
+
+#: NOT FOUND IN SOURCE
msgid "chart"
msgstr "Diagramm"
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr "Klicken zum markieren/demarkieren aller Objekte auf einmal"
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "geschlossen"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "enthält"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "täglich"
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "täglich um %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "Tage"
@@ -4998,126 +7772,226 @@ msgstr "Tage"
msgid "deleted"
msgstr "gelöscht"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "does not belong to"
msgstr "gehört nicht zu"
-#: html/Search/Elements/PickBasics:61
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "enthält nicht"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "enthält nicht"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "enthält nicht"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "Herunterladen"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "gleich"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
-msgstr "Fehler: Kann nicht hinunter bewegen"
+msgstr "Fehler: Kann nicht hinunter verschieben"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
-msgstr "Fehler: Kann nicht nach links bewegen"
+msgstr "Fehler: Kann nicht nach links verschieben"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
-msgstr "Fehler: Kann nicht hinauf bewegen"
+msgstr "Fehler: Kann nicht hinauf verschieben"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "Fehler: Nichts zu löschen"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
-msgstr "Fehler: Nichts zu bewegen"
+msgstr "Fehler: Nichts zu verschieben"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "Fehler: Nichts zum Umschalten"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "alle"
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr "Plugin erfolgreich ausgeführt"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "voll"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "größer als"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "Gruppe '%1'"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+#: NOT FOUND IN SOURCE
msgid "grouped by %1"
msgstr "sortiert nach %1"
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "Stunden"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "ID"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "ist"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "ist nicht"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "Schlüssel deaktiviert"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "Schlüssel abgelaufen"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "Schlüssel zurückgezogen"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "links nach rechts"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "kleiner als"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "geringfügig"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "enthält"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "max. Tiefe"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "Min"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "Minuten"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "monatlich"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "monatlich (%1. Tag) um %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "Monate"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "niemals"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "neu"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "nein"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "kein Name"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "kein Wert"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "keine"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "ungleich"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "nichts"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "Objekte wurden erfolgreich entfernt"
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "am"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "offen"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "Öffnen/Schliessen"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "andere..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "persönliche Gruppe '%1' für Benutzer '%2'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "Torte"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "Plugin lieferte eine leere Liste zurück"
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "Bereich %1 %2"
@@ -5130,15 +8004,31 @@ msgstr "abgewiesen"
msgid "resolved"
msgstr "erledigt"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "rechts nach links"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "Sek"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr "Siehe nachstehende Objekt Liste"
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr "Zeige Freigabe Tab"
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "Zeige Konfigurationsmenü"
-#: html/Search/Results.html:80
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "spreadsheet"
msgstr "Tabellenkalkulation"
@@ -5146,49 +8036,89 @@ msgstr "Tabellenkalkulation"
msgid "stalled"
msgstr "zurückgestellt"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
+#: NOT FOUND IN SOURCE
msgid "style: %1"
msgstr "Darstellung: %1"
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr "Ergebnisreihen"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "System %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "Systemgruppe '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "die aufrufende Komponente gab nicht an warum"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "Die Standard Adresse die in From: und Reply-To: Kopfzeilen von Kommentar Mails eingetragen wird."
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "Die Standard Adresse die in From: und Reply-To: Kopfzeilen von Antwort Mails eingetragen wird."
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "Anfrage #%1 %2"
-#: lib/RT/Group_Overlay.pm:236
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "oben nach unten"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "uneingeschränkt"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "unbeschriebene Gruppe %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "Benutzer %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "Detaillierte Informationen"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "wöchentlich"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "wöchentlich (am %1) um %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "Wochen"
-#: lib/RT/Date.pm:358
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "Der Port des Webserver, z.B. 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "mit Kopfzeilen"
+
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "Jahre"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "ja"
+
diff --git a/rt/lib/RT/I18N/en.po b/rt/lib/RT/I18N/en.po
index ddc58f8..7d260d4 100644
--- a/rt/lib/RT/I18N/en.po
+++ b/rt/lib/RT/I18N/en.po
@@ -1,99 +1,27 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"PO-Revision-Date: 2005-10-03 13:44-0400\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-07 19:56+0000\n"
+"Last-Translator: Kevin Falcone <Unknown>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: lib/RT/Date.pm:444
-msgid "Apr."
-msgstr "Apr"
-
-#: lib/RT/Date.pm:448
-msgid "Aug."
-msgstr "Aug"
-
-#: lib/RT/Date.pm:452
-msgid "Dec."
-msgstr "Dec"
-
-#: lib/RT/Date.pm:442
-msgid "Feb."
-msgstr "Feb"
-
-#: lib/RT/Date.pm:421
-msgid "Fri."
-msgstr "Fri"
-
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Home"
-#: lib/RT/Date.pm:441
-msgid "Jan."
-msgstr "Jan"
-
-#: lib/RT/Date.pm:447
-msgid "Jul."
-msgstr "Jul"
-
-#: lib/RT/Date.pm:446
-msgid "Jun."
-msgstr "Jun"
-
-#: lib/RT/Date.pm:443
-msgid "Mar."
-msgstr "Mar"
-
-#: lib/RT/Date.pm:445
-msgid "May."
-msgstr "May"
-
-#: lib/RT/Date.pm:417
-msgid "Mon."
-msgstr "Mon"
-
-#: lib/RT/Date.pm:451
-msgid "Nov."
-msgstr "Nov"
-
-#: lib/RT/Date.pm:450
-msgid "Oct."
-msgstr "Oct"
-
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Open"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Home"
-#: lib/RT/Date.pm:422
-msgid "Sat."
-msgstr "Sat"
-
-#: lib/RT/Date.pm:449
-msgid "Sep."
-msgstr "Sep"
-
-#: lib/RT/Date.pm:423
-msgid "Sun."
-msgstr "Sun"
-
-#: lib/RT/Date.pm:420
-msgid "Thu."
-msgstr "Thu"
-
-#: lib/RT/Date.pm:418
-msgid "Tue."
-msgstr "Tue"
-
-#: lib/RT/Date.pm:419
-msgid "Wed."
-msgstr "Wed"
-
diff --git a/rt/lib/RT/I18N/es.po b/rt/lib/RT/I18N/es.po
index 3c23453..05fa4b2 100644
--- a/rt/lib/RT/I18N/es.po
+++ b/rt/lib/RT/I18N/es.po
@@ -1,31 +1,27 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2005-10-03 14:25-0400\n"
-"Last-Translator: Tomàs Núñez Lirola <tomasnl@dsl.upc.es>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-09-02 17:46+0000\n"
+"Last-Translator: Paco Molinero <paco@byasl.com>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " no existe la clave pública!"
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " no confiable!"
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
-
-#: NOT FOUND IN SOURCE
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
msgstr "#"
@@ -33,69 +29,87 @@ msgstr "#"
msgid "#%1"
msgstr "#%1"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
-
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
-msgstr ""
+msgstr "%1 #%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr "%1 %2 %3 %4:%5 %6"
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %2 %3 %4:%5:%6 %7"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "Añadido %1 %2"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "Hace %1 %2"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 ha cambiado a %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 borrado"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 eliminado."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 renombrado a %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 guardado."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 con la plantilla %3"
@@ -103,117 +117,164 @@ msgstr "%1 %2 con la plantilla %3"
msgid "%1 (%2) %3 this ticket\\n"
msgstr "%1 (%2) %3 este caso\\n"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
-msgstr ""
+msgstr "%1 (%2) por %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (Sin cambios)"
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr "%1 (del panel %2)"
+
#: NOT FOUND IN SOURCE
msgid "%1 - %2 shown"
msgstr "%1 - %2 mostrados"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - Un parámetro para pasar a %2"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - El estado de la salida actualiza STDOUT"
-#: bin/rt-crontool:253
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
-msgstr ""
+msgstr "%1 - Especifique el id del patrón/template que desea usar"
-#: bin/rt-crontool:256
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Especifique si desea usar 'primera','última' o 'todas' las transacciones"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Especifica el modulo de acción que quieres usar"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Especifique la lista de tipos de transaciones separados por coma que desea usar"
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Especifica el modulo de condición que quieres usar"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Especifica el modulo de búsqueda que quieres usar"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr ""
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "%1 Tableros de Instrumentos"
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "%1 ScripAction cargado"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "$1 añadido como un valor de %2"
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on"
-msgstr "%1 alias requieren un TicketId en el que trabajar"
+msgstr "%1 alias requieren un identificador de caso en el que trabajar"
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on "
-msgstr "%1 alias requieren un TicketId en el que trabajar "
+msgstr "%1 alias requieren un identificador de caso en el que trabajar "
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on (from %2) %3"
-msgstr "%1 alias requieren un TicketId en el que trabajar (de %2) %3"
+msgstr "%1 alias requieren un identificador de caso en el que trabajar (de %2) %3"
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 ya existe y tiene las tablas de RT en sus puestos, pero no contienen los metadatos de RT. El paso de 'Initializar la base de datos' mas adelante puede insertar los metadatos adentro de este base de datos ya existente. Si es aceptable esto, presione 'Personalizar lo Basico' abajo para seguir en personalizar RT."
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 ya existe, pero no contiene las tablas ni los metadatos de RT. El paso de 'Initializar la base de datos' mas adelante puede insertar los metadatos adentro de este base de datos ya existente. Si es aceptable esto, presione 'Personalizar lo Basico' abajo para seguir en personalizar RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 parece ser un objeto local, pero no se encuentra en la base de datos"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 parece estar ya personalizado. No tenemos que crear las tablas ni los metadatos de RT, pero puede seguir en personalizar RT por presionar 'Personalizar lo Basico' abajo."
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 por %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 ha cambiado de %2 a %3"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "diagrama %1 por %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "%1 copiar"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr "%1 más configuraciones"
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 no se ha podido fijar a %2"
@@ -221,26 +282,41 @@ msgstr "%1 no se ha podido fijar a %2"
msgid "%1 couldn't init a transaction (%2)\\n"
msgstr "%1 no pudo iniciar una transacción (%2)\\n"
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 no pudo fijar el estado a resuelto. La base de datos de RT podría ser inconsistente."
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 creado"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 borrado"
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "%1 deshabilitado"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 no existe"
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "%1 habilitado"
+
#: NOT FOUND IN SOURCE
msgid "%1 grouped by %2"
msgstr "%1 agrupado por %2"
-#: etc/initialdata:593
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "%1 casos de mayor prioridad que poseo"
@@ -250,23 +326,30 @@ msgstr "Los %1 tickets de mayor prioridad que poseo..."
#: NOT FOUND IN SOURCE
msgid "%1 highest priority tickets I requested..."
-msgstr "Los %1 tickets de mayor prioridad que he pedido"
+msgstr "Los %1 casos de mayor prioridad que he pedido"
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr "$1 es una herramienta para actuar sobre los tickets con una herramienta de planificación externa, como crom"
+msgstr "$1 es una herramienta para actuar sobre los tickets con una herramienta de planificación externa, como cron."
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 es una utilidad, que pretende ser ejecutada a partir de cron, que despacha todos las notificaciones diferidas de RT como un resumen per-user"
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 ha dejado de ser un %2 para esta cola."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1 ha dejado de ser un %2 para este ticket."
+msgstr "%1 ha dejado de ser un %2 para este pedido."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 ha dejado de ser un valor para campo personalizable %2"
@@ -274,88 +357,114 @@ msgstr "%1 ha dejado de ser un valor para campo personalizable %2"
msgid "%1 isn't a valid Queue id."
msgstr "%1 no es un identificador de Cola válido."
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 min"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
-msgstr "%1 más nuevos casos sin propietario"
+msgstr "Los %1 pedidos más recientes sin propietario"
#: NOT FOUND IN SOURCE
msgid "%1 not shown"
msgstr "%1 no mostrado"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 ibjetos"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 privilegios"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr "%1 configuración del sitio"
+
#: NOT FOUND IN SOURCE
msgid "%1 succeeded\\n"
msgstr "%1 exitoso\\n"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 tipo desconocido para $MessageId"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 actualizado: %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 tipo desconocido para %2"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 actualizado: Sin cambios"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 actualizado"
#: NOT FOUND IN SOURCE
msgid "%1 was created without a CurrentUser\\n"
msgstr "%1 se creó sin CurrentUser\\n"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
-msgstr "%1 resolverá todos los miembros de un grupo de tickets resueltos."
+msgstr "%1 resolverá todos los miembros de un grupo de pedidos resueltos."
#: NOT FOUND IN SOURCE
msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
msgstr "%1 pondrá como pendiente una BASE [local] si es dependiente [o miembro] de una solicitud ligada."
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1's %2 objetos"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1's %2's %3 objetos"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "Los tableros de instrumentos de %1"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "búsquedas guardadas de %1"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: ningún archivo adjunto especificado"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1b"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
-msgstr ""
+msgstr "%quant(%1, hora)"
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' es un valor inválido para el estado"
@@ -370,9 +479,9 @@ msgstr "(Marque la caja para borrar al miembro del grupo)"
#: NOT FOUND IN SOURCE
msgid "(Check box to delete scrip)"
-msgstr "(Marque la caja para borrar el scrip)"
+msgstr "(Marque la caja para borrar la acción)"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Marque la caja para borrar)"
@@ -380,45 +489,45 @@ msgstr "(Marque la caja para borrar)"
msgid "(Check boxes to delete)"
msgstr "(Marque las cajas para borrar)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Marque las cajas para deshabilitar notificaciones a los receptores listados)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Marque las cajas para habilitar notificaciones a los receptores listados)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
-msgstr "(Entrar ids o URLs de casos, separados por espacios)"
+msgstr "(Ingresar los numeros id o los URL de los pedidos, separados por espacios)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
-msgstr "(Si se deja vacio, pasara por defecto a %1)"
+msgstr "(Si se deja vacío, pasará por omisión a %1)"
#: NOT FOUND IN SOURCE
msgid "(No Value)"
msgstr "(Sin Valor)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(No hay campos custom)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Sin miembros)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
-msgstr "(Sin scrips)"
+msgstr "(Sin acciones)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Sin plantillas)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Ninguno)"
@@ -430,7 +539,7 @@ msgstr "(Envía una copia oculta de esta actualización a una lista delimitada p
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Envía una copia oculta de esta actualización a una lista de direcciones de correo delimitada por comas. <b>No</b> cambia a quien recibirá futuras actualizaciones.)"
-#: html/Ticket/Update.html:90
+#: NOT FOUND IN SOURCE
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Envía una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email. <strong>No</strong> cambia quien recibirá futuras actualizaciones.)"
@@ -438,7 +547,7 @@ msgstr "(Envía una copia oculta de esta actualización a una lista delimitada p
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Envía una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email administrativas. Estas personas <b>recibirán</b> las futuras actualizaciones.)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Envía una copia de esta actualización a una lista delimitada por comas de direcciones de email administrativas. Estas personas <strong>recibirán</strong> futuras actualizaciones.)"
@@ -450,7 +559,7 @@ msgstr "(Envía una copia oculta de esta actualización a una lista delimitada p
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. <b>No</b> cambia quien recibirá futuras actualizaciones.)"
-#: html/Ticket/Update.html:86
+#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. <strong>No</strong> cambia quien recibirá futuras actualizaciones.)"
@@ -458,113 +567,131 @@ msgstr "(Envía una copia de esta actualización a una lista de direcciones de c
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. Estas personas <b>recibirán</b> actualizaciones futuras."
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. Estas personas <strong>recibirán</strong> futuras actualizaciones."
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Usar estos campos cuando se selecciona 'Definido por el usuario' para una condición o acción)"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
-msgstr ""
+msgstr "(No se enviará un correo)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(cualquiera)"
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(vacío)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(no hay nombres listados)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(¡no hay clave pública!)"
+
#: NOT FOUND IN SOURCE
msgid "(no subject)"
msgstr "(sin asunto)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(sin valor)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(sin valores)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
-msgstr "(solo un ticket)"
+msgstr "(solo un pedido)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(pendiente de aprobación)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(pendiente de otra Recopilación)"
#: NOT FOUND IN SOURCE
msgid "(pending other tickets)"
-msgstr "(pendiente de otros tickets)"
+msgstr "(pendiente de otros casos)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(requerido)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(confianza: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(sin titulo)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(no confiable!)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
+msgstr "-"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "25 highest priority tickets I own..."
-msgstr "Los 25 tickets de mayor prioridad que poseo..."
+msgstr "Los 25 casos de mayor prioridad que poseo..."
#: NOT FOUND IN SOURCE
msgid "25 highest priority tickets I requested..."
-msgstr "Los 25 tickets de mayor prioridad que he solicitado..."
+msgstr "Los 25 casos de mayor prioridad que he solicitado..."
-#: html/Ticket/Elements/ShowBasics:53
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Ticket->Status%>"
-#: html/Elements/SelectTicketTypes:48
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr ""
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"Nuevo caso en\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Nuevo pedido en\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"Nuevo ticket en\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"Nuevo pedido en\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
-#: etc/initialdata:218
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Una plantilla en blanco"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Una contraseña no fue establecida, por lo tanto el usuario no podrá logearse."
@@ -584,84 +711,92 @@ msgstr "ACE no se pudo borrar"
msgid "ACE could not be found"
msgstr "ACE no se encontró"
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE no encontrado"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACEs solo pueden ser creadas o borradas."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "Y"
#: NOT FOUND IN SOURCE
msgid "Aborting to avoid unintended ticket modifications.\\n"
-msgstr "Abortando para prevenir modificaciones no intencionadas al ticket\\n"
+msgstr "Abortando para prevenir modificaciones no intencionadas al caso\\n"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Sobre mi"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Control de acceso"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Acción"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Acción %1 no encontrada"
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "No se encuentra la acción '%1'"
+
#: NOT FOUND IN SOURCE
msgid "Action committed."
msgstr "Acción realizada."
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Acción realizada.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
-msgstr ""
+msgstr "La acción es un argumento obligatorio"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Acción preparada..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Añadir"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Añadir AdminCc"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Añadir marcador"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Añadir Cc"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Añadir Columnas"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Añadir Criterio"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Añadir más archivos"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Añadir solicitante"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Añadir Valor"
@@ -671,41 +806,49 @@ msgstr "Añadir una seleccion de palabra clave a esta cola"
#: NOT FOUND IN SOURCE
msgid "Add a new a global scrip"
-msgstr "Añadir un nuevo scrip global"
+msgstr "Añadir una nueva acción global"
#: NOT FOUND IN SOURCE
msgid "Add a scrip to this queue"
-msgstr "Añadir un scrip a esta cola"
+msgstr "Añadir una acción a esta cola"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
-msgstr "Añadir un scrip que se aplicará a todas las colas"
+msgstr "Añadir una acción que se aplicará a todas las colas"
-#: html/Search/Build.html:109 html/Search/Build.html:94
+#: NOT FOUND IN SOURCE
msgid "Add and Search"
msgstr "Añadir y Buscar"
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
-msgstr "Añadir comentarios o respuestas a los tickets seleccionados"
+msgstr "Añadir comentarios o respuestas a los pedidos seleccionados"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Añadir miembro"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Añadir nuevos observadores"
-#: html/Search/Build.html:85
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Agregar estos términos"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Agregar estos términos y Buscar"
+
+#: NOT FOUND IN SOURCE
msgid "Add these terms to your search"
msgstr "Añadir estos términos a tu búsqueda"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
-msgstr ""
+msgstr "Agregar valores"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Añadir, borrar y modificar campo personalizo para objetos"
@@ -713,37 +856,41 @@ msgstr "Añadir, borrar y modificar campo personalizo para objetos"
msgid "AddNextState"
msgstr "AddNextState"
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Principal ha sido añadido como %1 para esta cola"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
-msgstr "Principal ha sido añadido como %1 para este ticket"
+msgstr "Principal ha sido añadido como %1 para este pedido"
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Dirección"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Dirección 1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Dirección 2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Admin Comment"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Admin Correspondence"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Administración de colas"
@@ -751,7 +898,7 @@ msgstr "Administración de colas"
msgid "Admin users"
msgstr "Administración de usuarios"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Adminsitración de la configuración global"
@@ -763,14 +910,22 @@ msgstr "Administración de Grupos"
msgid "Admin/Queue/Basics"
msgstr "Administración de una cola"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "AdminAllPersonalGroups"
msgstr "AdminAllPersonalGroups"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "AdminCCGroup"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCcs"
+
#: NOT FOUND IN SOURCE
msgid "AdminComment"
msgstr "AdminComment"
@@ -779,23 +934,23 @@ msgstr "AdminComment"
msgid "AdminCorrespondence"
msgstr "AdminCorrespondence"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
-msgstr ""
+msgstr "AdminCustomField"
#: NOT FOUND IN SOURCE
msgid "AdminCustomFields"
msgstr "AdminCustomFields"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "AdminGroup"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "AdminGroupMembership"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "AdminOwnPersonalGroups"
@@ -803,15 +958,19 @@ msgstr "AdminOwnPersonalGroups"
msgid "AdminQueue"
msgstr "AdminQueue"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "AdminUsers"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Cc Administrativa"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Contraseña administrativa"
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Avanzado"
@@ -819,19 +978,15 @@ msgstr "Avanzado"
msgid "Advanced Search"
msgstr "Búsqueda avanzada"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Después"
-
#: NOT FOUND IN SOURCE
msgid "Age"
msgstr "Edad"
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Agregador"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Todas las Aprobaciones Superadas"
@@ -839,47 +994,51 @@ msgstr "Todas las Aprobaciones Superadas"
msgid "All Custom Fields"
msgstr "Todos los Campos Personalizados"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Todas las colas"
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Ya encriptado"
+
#: NOT FOUND IN SOURCE
msgid "Always sends a message to the requestors independent of message sender"
msgstr "Siempre envía un mensaje a los solicitantes independientemente del remitente del mensaje"
-#: html/Search/Elements/EditQuery:56
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "Y/O"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "Aplica a"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Aplicar"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Aplicar cambios"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Aprobación"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Aprobación #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Aprobación #%1: No se han guardado las notas debido a un error del sistema"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Aprobación #%1: Notas guardadas"
@@ -888,11 +1047,15 @@ msgstr "Aprobación #%1: Notas guardadas"
msgid "Approval Details"
msgstr "Detalles de la aprobación"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Aprobación superada"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Aprobación lista para el dueño"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Aprobación rechazada"
@@ -900,15 +1063,19 @@ msgstr "Aprobación rechazada"
msgid "Approval diagram"
msgstr "Diagrama de la aprobación"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Aprobar"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Notas del aprobador: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Abr"
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Abr."
@@ -916,56 +1083,68 @@ msgstr "Abr."
msgid "April"
msgstr "Abril"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
-msgstr ""
+msgstr "Asc"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Ascendente"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Asignar y borrar campos personalizados"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
-msgstr ""
+msgstr "AsignarCamposPersonalizados"
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Adjunto"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Adjuntar archivo"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Archivo adjunto"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Adjunto"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Archivo adjunto '%1' no pudo ser cargado"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Archivo adjunto creado"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Nombre del archivo adjunto"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Archivos adjuntos"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "La encriptación de adjuntos está deshablitada"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Atributo borrado"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Ago"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Ago."
@@ -977,11 +1156,11 @@ msgstr "Agosto"
msgid "AuthSystem"
msgstr "Sistema de autenticación"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Autorespuesta"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Autorespuesta a los solicitantes"
@@ -989,9 +1168,17 @@ msgstr "Autorespuesta a los solicitantes"
msgid "AutoreplyToRequestors"
msgstr "AutoreplyToRequestors"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
-msgstr ""
+msgstr "Disponible"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "BCC"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Atrás"
#: NOT FOUND IN SOURCE
msgid "Bad PGP Signature: %1\\n"
@@ -1005,55 +1192,64 @@ msgstr "Identificador de archivo adjunto erróneo. No se puede encontrar el arch
msgid "Bad data in %1"
msgstr "Datos incorrectos en %1"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr "Mal atributo para %1"
+
#: NOT FOUND IN SOURCE
msgid "Bad transaction number for attachment. %1 should be %2\\n"
msgstr "Número de transacción incorrecta para el archivo adjunto. %1 debe ser %2\\n"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Basicos"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Bcc"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Asegúrese de salvar sus cambios"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "Antes"
-
#: NOT FOUND IN SOURCE
msgid "Begin Approval"
msgstr "Begin Approval"
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
+msgstr "Best Practical Solutions, LLC corporate logo"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Vacio"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Cuerpo"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
-msgstr ""
+msgstr "Negrita"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Marcador"
#: NOT FOUND IN SOURCE
msgid "Bookmarkable URL for this search"
msgstr "URL para guardar esta búsqueda en sus marcadores"
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
-msgstr ""
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Pedidos marcados (bookmarked)"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Encabezados breves"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Actualización en bloque"
@@ -1061,7 +1257,23 @@ msgstr "Actualización en bloque"
msgid "Bulk ticket update"
msgstr "Actualización de varios tickets en bloque"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Comprar soporte"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Por defecto, RT usará la zona horaria de sus sistema. Esto le permite establecer un valor por defecto al modo en que se muestran las fechas y horas en RT. Sus usuarios pueden elegir una zona horaria diferente en sus preferencias."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "CCGroup"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr "CF"
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "No se pueden modificar los usuarios del sistema"
@@ -1069,90 +1281,142 @@ msgstr "No se pueden modificar los usuarios del sistema"
msgid "Can this principal see this queue"
msgstr "Can this principal see this queue"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "No se puede agregar un campo personalizable si no tiene un nombre"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "No se puede encontrar una clase de recopilación para '%1'"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "No se puede encontrar una búsqueda guardada para trabajar"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
-msgstr "No se puede ligar un ticket a sí mismo"
+msgstr "No se puede ligar un pedido a sí mismo"
#: NOT FOUND IN SOURCE
msgid "Can't merge into a merged ticket. You should never get this error"
msgstr "No se puede fusionar dentro de un caso ya fusionado. Nunca deberia recibir este error"
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
-msgstr ""
+msgstr "No se puede grabar esta búsqueda"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "No se puede grabar esta búsqueda"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "No se puede especificar origen y destino al mismo tiempo"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "No es posible crear pedidos en una cola deshabilitada"
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "No se puede crear el usuario: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Categoria"
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Categoría no seteada"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Ccs"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Cambiar"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Cambiar contraseña"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Seleccionar Todo"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Verifique la conectividad de la base de datos"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr "Verificar las credenciales de la Base de Datos"
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Selecciona la casilla para borrar"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Seleccione la caja para quitar el permiso"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Verifique las credenciales de la base de datos"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Hijo"
-#: html/NoAuth/js/util.js:201
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr "Elija motor de base de datos"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Elija un motor de base de datos"
+
+#: NOT FOUND IN SOURCE
msgid "Choose a date"
msgstr "Elije una fecha"
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Ciudad"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Limpiar"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Borrar Todo"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Haga click en \"Finalizar instalación\" debajo para terminar este asistente"
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Haga click en \"Inicializar base de datos\" para crear la base de datos del RT e insertar los metadatos originales. Esto tomará sólo un momento"
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
-msgstr ""
+msgstr "Cerrar ventana"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Cerrado"
@@ -1160,55 +1424,63 @@ msgstr "Cerrado"
msgid "Closed requests"
msgstr "Solicitudes cerradas"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
-msgstr "Casos cerrados"
+msgstr "pedidos cerrados"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
-msgstr ""
+msgstr "Combobox: Seleccione o ingrese múltiples valores"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
-msgstr ""
+msgstr "Combobox: Seleccione o ingrese un valor"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
-msgstr ""
+msgstr "Combobox: Seleccione o ingrese hasta %1 valores"
#: NOT FOUND IN SOURCE
msgid "Command not understood!\\n"
msgstr "No se entendió el comando!\\n"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Comentario"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Dirección de comentario"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Comentar dirección"
+
#: NOT FOUND IN SOURCE
msgid "Comment not recorded"
msgstr "Comentario no grabado"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
-msgstr "Comentario sobre los tickets"
+msgstr "Comentar sobre los pedidos"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "CommentOnTicket"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Comentarios"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Comentarios (no se envían a los solicitantes)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Comentarios (no se envían a los solicitantes)"
@@ -1216,15 +1488,15 @@ msgstr "Comentarios (no se envían a los solicitantes)"
msgid "Comments about %1"
msgstr "Comentarios acerca de %1"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Comentarios acerca de este usuario"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Comentarios añadidos"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Acción realizada"
@@ -1232,30 +1504,48 @@ msgstr "Acción realizada"
msgid "Compile Restrictions"
msgstr "Compilar restricciones"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Condición"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Condición '%1' no encontrada"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
-msgstr ""
+msgstr "Condición es un argumento obligatorio"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "La condición coincide..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Condición no encontrada"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Condición, Acción y Plantilla"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "El archivo de configuración %1 está bloqueado"
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Configuración"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Confirmar"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Conexión exitosa"
+
#: NOT FOUND IN SOURCE
msgid "ContactInfoSystem"
msgstr "Información de contacto"
@@ -1264,23 +1554,35 @@ msgstr "Información de contacto"
msgid "Contacted date '%1' could not be parsed"
msgstr "Fecha de contacto '%1' no pudo ser leida"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Contenido"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
-msgstr ""
+msgstr "Tipo de contenido"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "Tipo de contenidp"
#: NOT FOUND IN SOURCE
msgid "Coould not create group"
msgstr "No se pudo crear grupo"
-#: html/Search/Elements/EditSearches:65
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Copiar"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Correspondencia"
@@ -1288,7 +1590,7 @@ msgstr "Correspondencia"
msgid "Correspondence Address"
msgstr "Dirección de corresponencia"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Correspondencia agregada"
@@ -1298,49 +1600,65 @@ msgstr "Correspondencia no guardada"
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. "
-msgstr "No se pudo añadir un nuevo valor de campo personalizable para el ticket. "
+msgstr "No se pudo añadir un nuevo valor de campo personalizable para el caso. "
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. %1 "
-msgstr "No se pudo añadir un nuevo valor de campo personalizable para el ticket. %1 "
+msgstr "No se pudo añadir un nuevo valor de campo personalizable para el caso. %1 "
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
-msgstr "No se pudo añadir nuevo valor de campo personalizado."
+msgstr "No se pudo añadir nuevo valor de campo personalizado. "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
msgstr "No se pudo añadir nuevo valor de campo personalizado. %1 "
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "No fue posible agregar el valor del campo personalizado: %1"
+
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "No se pudo cambiar el propietario. "
-#: html/Admin/CustomFields/Modify.html:161
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "No fue posible cambiar el dueño: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "No se puede crear un CampoPersonalizable"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "No se pudo crear CustomField: %1"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "No se pudo crear el grupo"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "No se pudo crear la plantilla: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "No fue posible crear un pedido en la cola deshabilitada \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
-msgstr "No se pudo crear el ticket. Cola no seleccionada"
+msgstr "No se pudo crear el pedido. Cola no seleccionada"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "No se pudo crear el usuario"
@@ -1350,17 +1668,17 @@ msgstr "No se pudo crear un observador para el solicitante"
#: NOT FOUND IN SOURCE
msgid "Could not find a ticket with id %1"
-msgstr "No se pudo encontrar un ticket con identificador $1"
+msgstr "No se pudo encontrar un caso con identificador %1"
#: NOT FOUND IN SOURCE
msgid "Could not find group %1."
msgstr "No se pudo encontrar el grupo %1."
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "No se pudo encontrar o crear el usuario"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "No se pudo encontrar ese principal"
@@ -1368,59 +1686,75 @@ msgstr "No se pudo encontrar ese principal"
msgid "Could not find user %1."
msgstr "No se pudo encontrar el usuario %1."
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "No fue posible cargar el atributo %1"
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "No se pudo cargar CustomField %1"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "No se puede cargar el grupo"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "No se pudo cargar objeto para %1"
-#: lib/RT/SavedSearch.pm:197
+#: NOT FOUND IN SOURCE
msgid "Could not load search attribute"
msgstr "No se pudo cargar atributo de búsqueda"
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "No se pudo hacer ese principal un %1 para esta cola"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
-msgstr "No se pudo hacer ese principal un %1 para este ticket"
+msgstr "No se pudo hacer ese principal un %1 para este pedido"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "No se pudo quitar ese principal como un %1 para esta cola"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
-msgstr "No se pudo quitar ese principal como un %1 para este ticket"
+msgstr "No se pudo quitar ese principal como un %1 para este pedido"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "No se pudo establecer la información del usuario"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
-msgstr ""
+msgstr "No fue posible agregar adjunto"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "No se pudo agregar el miembro al grupo"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "No se pudo crear la transacción: %1"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "No se pudo crear el registro"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "No fue posible borrar tablero de instrumentos %1: %2"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't figure out what to do from gpg's reply\\n"
msgstr "No se pudo averiguar que hacer a partir de la firma gpg de la respuesta"
@@ -1429,15 +1763,19 @@ msgstr "No se pudo averiguar que hacer a partir de la firma gpg de la respuesta"
msgid "Couldn't find group\\n"
msgstr "No se pudo encontrar el grupo\\n"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "No se pudo encontrar la fila"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "No pudo enconcontrar ese principal"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "No se pudo encontrar ese valor"
@@ -1449,17 +1787,22 @@ msgstr "No se pudo encontrar ese observador"
msgid "Couldn't find user\\n"
msgstr "No se pudo encontrar el usuario\\n"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "No se pudo cargar %1 desde la base de datos de usuarios.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "No se pudo cargar Class %1"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "No fue posible cargar el campo personalizado #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "No se pudo cargar CustomField %1"
@@ -1474,81 +1817,183 @@ msgstr "No se pudo cargar el archivo de configuración de RT '%1' %2"
#: NOT FOUND IN SOURCE
msgid "Couldn't load Scrips."
-msgstr "No se pudieron cargar los Scrips."
+msgstr "No se pudieron cargar las acciones."
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
-msgstr ""
+msgstr "No fue posible cargar la copia del pedido #%1."
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "no fue posible cargar el tablero de instrumentos %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "no fue posible cargar el tablero de instrumentos %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "No fue posible cargar el grupo #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "No se pudo cargar el grupo %1"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "No se puedo cargar el enlace"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "No se pudo cargar objeto %1"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "No se pudo cargar o crear al usuario: %1"
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "No se pudo cargar la cola"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "No fue posible cargar la cola #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "No se pudo cargar la cola %1"
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "No fue posible cargar la cola '%1'"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load scrip"
-msgstr "No se pudo cargar el scrip"
+msgstr "No se pudo cargar la acción"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
-msgstr ""
+msgstr "No fue posible cargar el scrip #%1"
#: NOT FOUND IN SOURCE
msgid "Couldn't load template"
msgstr "No se pudo cargar la plantilla"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "No fue posible cargar la plantilla #%1"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load that user (%1)"
msgstr "No se pudo cargar ese usuario (%1)"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
-msgstr "No se pudo cargar el ticket '%1'"
+msgstr "No se pudo cargar el pedido '%1'"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "No fue posible cargar la transacción #%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "No fue posible cargar al usuario #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "No fue posible reemplazar el contenido con la información desencriptada: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "No fue posible reemplazar el contenido con la información encriptada: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
+msgstr "No se pudo resolver base '%1' en una URI."
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
msgstr ""
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "No se pudo enviar el correo electrónico"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "No se pudo establecer %1 observador: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "No se pudo establecer clave privada"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "País"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Crear"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
-msgstr "Crear Tickets"
+msgstr "Crear Pedidos"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Crear CampoPersonalizable"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Crear un campo personalizables para la cola %1"
@@ -1561,15 +2006,19 @@ msgstr "Crear un campo personalizable que se aplique a todas las colas"
msgid "Create a new Custom Field"
msgstr "Crear un nuevo campo personalizable"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Crear un nuevo tablero de instrumentos"
+
#: NOT FOUND IN SOURCE
msgid "Create a new global scrip"
-msgstr "Crear un nuevo scrip global"
+msgstr "Crear un nueva acción global"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
-msgstr "Creat un nuevo grupo"
+msgstr "Crear un nuevo grupo"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Crear un nuevo grupo personal"
@@ -1579,44 +2028,48 @@ msgstr "Crear una nueva cola"
#: NOT FOUND IN SOURCE
msgid "Create a new scrip"
-msgstr "Crear un nuevo scrip"
+msgstr "Crear una nueva acción"
#: NOT FOUND IN SOURCE
msgid "Create a new template"
msgstr "Crear una nueva plantilla"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
-msgstr "Crear un nuevo ticket"
+msgstr "Crear un nuevo pedido"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Crear un nuevo usuario"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Crear una cola"
#: NOT FOUND IN SOURCE
msgid "Create a queue called"
-msgstr "Crear una cola llamada "
+msgstr "Crear una cola llamada"
#: NOT FOUND IN SOURCE
msgid "Create a request"
msgstr "Crear una solicitud"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
-msgstr "Crear un scrip para la cola %1"
+msgstr "Crear una acción para la cola %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Crear una plantilla"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
-msgstr "Crear un ticket"
+msgstr "Crear un pedido"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Crear tableros de instrumentos para este grupo"
#: NOT FOUND IN SOURCE
msgid "Create failed: %1 / %2 / %3 "
@@ -1624,90 +2077,131 @@ msgstr "Creación fallida: %1 / %2 / %3 "
#: NOT FOUND IN SOURCE
msgid "Create failed: %1/%2/%3"
-msgstr "Creación fallida: %1 / %2 / %3 "
+msgstr "Creación fallida: %1 / %2 / %3"
-#: etc/initialdata:137
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
-msgstr "Crear nuevos tickets basados en esta plantilla de scrip"
+msgstr "Crear nuevos pedidos basados en esta plantilla de scrip"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Crear tableros de instrumentos personales"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Crear tableros de instrumentos del sistema"
-#: html/SelfService/Create.html:105
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
-msgstr "Crear ticket"
+msgstr "Crear pedido"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
-msgstr "Crear tickets en esta cola"
+msgstr "Crear pedidos en esta cola"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Crear pedidos fuera de línea"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
-msgstr "Crear, borrar y modifical campos personalizables"
+msgstr "Crear, borrar y modificar campos personalizables"
#: lib/RT/Queue_Overlay.pm:92
msgid "Create, delete and modify queues"
msgstr "Crear, borrar y modificar colas"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "Create, delete and modify the members of any user's personal groups"
msgstr "Crear, borrar y modificar los miembros de cualquier grupo personal de usuario"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Crear, borrar y modificar los miembros de los grupos personales"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Crear, borrar y modificar usuarios"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "CrearTableroDeInstrumentos"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "CrearTableroDeInstrumentosDelGrupo"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "CrearTableroDeInstrumentosPersonal"
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
-msgstr ""
+msgstr "CrearRespaldodeBusqueda"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
-msgstr "CreateTicket"
+msgstr "CrearPedido"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Creado"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Creado por"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "CampoPersonalizable %1 creado"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
-msgstr ""
+msgstr "Creados en rango de fechas"
#: NOT FOUND IN SOURCE
msgid "Created template %1"
msgstr "Plantilla %1 creada"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
+msgstr "Pedidos creados en el período, agrupados por estado"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "CreadoPor"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
msgstr ""
-#: html/Search/Elements/PickBasics:102
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Creador"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Criptografía"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Relaciones actuales"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
-msgstr "Scrips actuales"
+msgstr "Acciones actuales"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Miembros actuales"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Permisos actuales"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Búsqueda actual"
@@ -1715,7 +2209,7 @@ msgstr "Búsqueda actual"
msgid "Current search criteria"
msgstr "Criterio de búsqueda actual"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Observadores actuales"
@@ -1723,51 +2217,57 @@ msgstr "Observadores actuales"
msgid "Custom Field #%1"
msgstr "Campo personalizable #%1"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Campos personalizables"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Campos Personalizados para %1"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Código de limpieza de acción personalizable"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Código de preparación de acción personalizable"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Condición personalizable"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Campo personalizado %1 %2 %3"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "El campo personalizable %1 no se aplica a este objeto"
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Campo personalizado %1 tiene un valor."
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Campo personalizado %1 no tiene un valor."
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Campo personalizado %1 no encontrado"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
-msgstr ""
+msgstr "Campo personalizable '%1'"
#: NOT FOUND IN SOURCE
msgid "Custom field deleted"
@@ -1777,7 +2277,7 @@ msgstr "Campo personalizable borrado"
msgid "Custom field not found"
msgstr "Campo personalizado no encontrado"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "El valor del campo %1 no pudo ser encontrado para el campo %2"
@@ -1786,35 +2286,129 @@ msgstr "El valor del campo %1 no pudo ser encontrado para el campo %2"
msgid "Custom field value changed from %1 to %2"
msgstr "Valor del campo cambiado de %1 a %2"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "El valor del campo no pudo ser borrado"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "El valor del campo no pudo se encontrado"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Valor del campo borrado"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "CustomField"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
-msgid "Customize"
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
msgstr ""
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr "Personalizar"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Personalizar lo Basico"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "Personalizar detalles de la base de datos"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Personalizar dirección de correo electrónico"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Configurar correo electrónico"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "contraseña del administrador de la base de datos"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "Nombre del usuario para el Administrador de la Base de Datos"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Resumen diario"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Tablero De Instrumentos"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "No fue posible crear Tablero De Instrumentos: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "No fue posible actualizar Tablero De Instrumentos: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Tablero De Instrumentos actualizado"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Tableros De Instrumentos"
+
#: NOT FOUND IN SOURCE
msgid "Data error"
msgstr "Error de datos"
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Host de la base de datos"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Nombre de base de datos"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Contraseña de la base de datos para RT"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Puerto de la base de datos"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Tipo de base de datos"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Usuario de la base de datos para RT"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Formato de fecha"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr "Falta el módulo de fecha y hora"
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Fechas"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Dic"
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Dic."
@@ -1822,88 +2416,152 @@ msgstr "Dic."
msgid "December"
msgstr "Diciembre"
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Desencriptar"
+
#: NOT FOUND IN SOURCE
msgid "Default Autoresponse Template"
-msgstr "Plantilla de autorespuesta por defecto"
+msgstr "Plantilla de autorespuesta predeterminada"
-#: etc/initialdata:222
+#: etc/initialdata:197
msgid "Default Autoresponse template"
-msgstr "Plantilla de autorespuesta por defect"
+msgstr "Plantilla de autorespuesta predeterminada"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
-msgstr "Cola por Defecto"
+msgstr "Cola predeterminada"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
-msgstr "Solicitante por Defecto"
+msgstr "Solicitante predeterminado"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
-msgstr "Plantilla de comentario de admin por defecto"
+msgstr "Plantilla de comentario de admin predeterminada"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
-msgstr "Plantilla de correspondencia de admin por defecto"
+msgstr "Plantilla de correspondencia de admin predeterminada"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
-msgstr "Plantilla de correspondencia por defecto"
+msgstr "Plantilla de correspondencia predeterminada"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Cola por defecto"
+
+#: etc/initialdata:228
msgid "Default transaction template"
-msgstr "Plantilla de trasacciones por defecto"
+msgstr "Plantilla de trasacciones predeterminada"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Predeterminado: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
-msgstr "Por defecto: %1/%2 ha cambiado de %3 a %4"
+msgstr "Por omisión: %1/%2 ha cambiado de %3 a %4"
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Delegar derechos"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Delegar derechos especificos que te han sido concedidos"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "DelegateRights"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Delegar"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Borrar"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Borrar Plantilla"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Borrar tableros de instrumentos de este grupo"
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Borrado fallido: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Borrar tableros de instrumentos personales"
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Borrar scripts seleccionados"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Borrar tableros de instrumentos del sistema"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
-msgstr "Borrar tickets"
+msgstr "Borrar pedidos"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
-msgstr ""
+msgstr "Borrar valores"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "BorrarTableroDeInstrumentos"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "BorrarTableroDeInstrumentosDelGrupo"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "BorrarTableroDeInstrumentosPersonal"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
-msgstr "DeleteTicket"
+msgstr "BorrarPedido"
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "Eliminado %1"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "tablero de instrumentos %1 fue borrado"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr "Consultas borradas"
-#: lib/RT/SavedSearch.pm:218
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Borrar búsqueda guardada"
+
+#: NOT FOUND IN SOURCE
msgid "Deleted search"
msgstr "Búsqueda borrada"
@@ -1911,11 +2569,11 @@ msgstr "Búsqueda borrada"
msgid "Deleting this object could break referential integrity"
msgstr "Al borrar este objeto, se puede romper la integridad referencial"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Al borrar este objeto, se romperá la integridad referencial"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Al borrar este objeto, se violará la integridad referencial"
@@ -1927,59 +2585,67 @@ msgstr "Al borrar este objeto, se violará la integridad referencial."
msgid "Deleting this object would violate referential integrity. That's bad."
msgstr "Al borrar este objeto, se violará la integridad referencial. Eso es malo."
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Denegar"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
-msgstr "Dependen de este ticket"
+msgstr "Dependen de este pedido"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "Dependencies: \\n"
msgstr "Dependencias: \\n"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Dependencia para %1 añadida"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Dependencia para %1 borrada"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Dependencia en %1 añadida"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "Dependencia en %1 borrada"
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Depende de"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "DependsOn"
msgstr "DependsOn"
-#: html/Search/Elements/DisplayOptions:86
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
-msgstr ""
+msgstr "Desc"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Descendiente"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Describa el problema debajo"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Descripción"
@@ -1987,7 +2653,15 @@ msgstr "Descripción"
msgid "Details"
msgstr "Detalles"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Dirección"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Deshabilitado"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Despliegue"
@@ -1995,39 +2669,55 @@ msgstr "Despliegue"
msgid "Display Access Control List"
msgstr "Mostrar Lista de Control de Acceso"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Mostrar Columnas"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
-msgstr "Mostrar plantillas de scrip para esta cola"
+msgstr "Mostrar plantillas de acciones para esta cola"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
-msgstr "Mostrar scrips para esta cola"
+msgstr "Mostrar acciones para esta cola"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Modo de despliegue"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Mostrar búsquedas guardadas para este grupo"
#: NOT FOUND IN SOURCE
msgid "Display ticket #%1"
-msgstr "Despliega ticket #%1"
+msgstr "Despliega caso #%1"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-msgstr ""
+msgstr "Distribuído bajo la versión 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> de GNU GPL.</a>"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Hacer cualquier cosa y todo"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Nombre de dominio"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "No recargar esta página"
@@ -2035,15 +2725,23 @@ msgstr "No recargar esta página"
msgid "Don't show search results"
msgstr "No mostrar los resultados de la búsqueda"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "No confiar nunca en esta llave"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Descargar"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Descargar como fichero delimitado por tabuladores"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Esperado"
@@ -2051,48 +2749,65 @@ msgstr "Esperado"
msgid "Due date '%1' could not be parsed"
msgstr "La fecha esperada '%1' no pudo ser leída"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "ERROR: %1"
+
#: NOT FOUND IN SOURCE
msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
-msgstr "ERROR: No se pudo cargar el ticket '%1': %2.\\n"
+msgstr "ERROR: No se pudo cargar el caso '%1': %2.\\n"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Actualice de un modo simple sus pedidos abiertos"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Editar"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
-msgstr ""
+msgstr "Editar campos personalizados"
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Editar campos personalizados para %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Editar Campos Personalizados para todos los grupos"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Editar campos personalizados para todas las colas"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Editar Campos Personalizados para todos los usuarios"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
-msgstr "Editar Campos Personalizados para casos en todas las colas"
+msgstr "Editar Campos Personalizados para pedidos en todas las colas"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Editar relaciones"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Editar Consulta"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Editar Búsqueda"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Editar plantillas para la cola %1"
@@ -2101,7 +2816,7 @@ msgstr "Editar plantillas para la cola %1"
msgid "Edit keywords"
msgstr "Editar palabras clave"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Editar búsquedas guardadas para este grupo"
@@ -2109,7 +2824,7 @@ msgstr "Editar búsquedas guardadas para este grupo"
msgid "Edit scrips"
msgstr "Editar acciones"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Editar plantillas del sistema"
@@ -2117,11 +2832,15 @@ msgstr "Editar plantillas del sistema"
msgid "Edit templates for %1"
msgstr "Editar plantillas para %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr ""
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Texto editable"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Editando configuración para la cola %1"
@@ -2130,17 +2849,18 @@ msgstr "Editando configuración para la cola %1"
msgid "Editing Configuration for user %1"
msgstr "Editando configuración para el usuario %1"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Editando campo %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Editando los miembros del grupo %1"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Editando los miembros para el grupo personal %1"
@@ -2149,19 +2869,44 @@ msgstr "Editando los miembros para el grupo personal %1"
msgid "Editing template %1"
msgstr "Editando plantilla %1"
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "La base o el destinatario deben ser especificados"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Usted no tiene los permisos necesarios para ver la búqueda guardada %1 o el identificador es incorrecto"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "Correo"
-#: lib/RT/User_Overlay.pm:235
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Configuración de correo electrónico"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Resumen por e-mail"
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "La dirección de correo ya está en uso"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "Envío por e-mail"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr "Plantilla para notificaciones periódicas por e-mail"
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "Correo Electrónico"
@@ -2169,15 +2914,19 @@ msgstr "Correo Electrónico"
msgid "EmailEncoding"
msgstr "Codificación para el correo"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Habilitado (Desmarcar esta caja deshabilita este campo personalizable)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Habilitado (Desmarcar esta caja deshabilita este campo personalizable)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Habilitado (Desmarcar esta caja, deshabilita esta cola)"
@@ -2185,46 +2934,81 @@ msgstr "Habilitado (Desmarcar esta caja, deshabilita esta cola)"
msgid "Enabled Custom Fields"
msgstr "Campos Personalizables Habilitados"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Colas habilitadas"
-
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Estado %1 habilitado"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "Estado habilitado: %1"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Codificar"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Codificar por preconfiguración"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Codificar/Decodificar"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Codificar/Descodificar transacción #%1 del pedido #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Codificar no está habilitado"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Codificar está habilitado"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Introducir multiples valores"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Entrar objetos o URIs para linkar a los objetos. Separar múltiples entradas con espacios."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Introducir un valor"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Entrar colas o URIs para linkar a las colas. Separar múltiples entradas con espacios."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
-msgstr "Ingrese los números de ticket o las URL que llevan hacia el ticket. Separe multiples entradas con espacios"
+msgstr "Ingrese los números de otros pedidos o unos URL para vincular a los pedidos. Separe multiples entradas con espacios"
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Entrar hasta %1 valor/es"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Error"
@@ -2232,7 +3016,7 @@ msgstr "Error"
msgid "Error adding watcher"
msgstr "Error añadiendo observador"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Error en los parámetros para Queue->AddWatcher"
@@ -2240,11 +3024,11 @@ msgstr "Error en los parámetros para Queue->AddWatcher"
msgid "Error in parameters to Queue->DelWatcher"
msgstr "Error en los parámetros para Queue->DelWatcher"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Error en los parámetros para Queue->DeleteWatcher"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Error en los parámetros para Queue->AddWatcher"
@@ -2252,25 +3036,65 @@ msgstr "Error en los parámetros para Queue->AddWatcher"
msgid "Error in parameters to Ticket->DelWatcher"
msgstr "Error en los parámetros para Queue->DelWatcher"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Error en los parámetros para Ticket->DeleteWatcher"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Error en propietario de RT: clave pública"
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Error: tablero de instrumentos extraviado"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Error: datos GNUPG erróneos"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Error: no hay clave privada"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Error: clave pública"
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
-msgstr "Escalar tickets"
+msgstr "subir de prioridad pedidos"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Estimado"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Todos"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Examinar pedidos creados en una cola entre dos fechas"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Examinar pedidos resueltos en una cola entre dos fechas"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Examinar tickets resueltos en una cola, agrupados por propietario"
+
+#: bin/rt-crontool:374
msgid "Example:"
-msgstr "Ejemplo"
+msgstr "Ejemplo:"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Expirar"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "ExternalAuthId"
@@ -2280,33 +3104,73 @@ msgstr "ExternalAuthId"
msgid "ExternalContactInfoId"
msgstr "ExternalContactInfoId"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Información extra"
-#: lib/RT/SavedSearch.pm:177
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr "Extraer Etiqueta del Tema"
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr "Extraer etiquetas del tema de una transacción y añadirlas al tema del pedido."
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Falló la creación del atributo %1"
+
+#: NOT FOUND IN SOURCE
msgid "Failed to create search attribute"
msgstr "Fallado en crear atributo de búsqueda"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Problema para encontrar el pseudogrupo de usuarios 'Privileged'"
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Problema para encontrar el pseudogrupo de usuarios 'Unprivileged'"
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Error al cargar el modulo %1. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "Error al cargar objeto para %1"
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "feb"
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Feb."
@@ -2314,35 +3178,51 @@ msgstr "Feb."
msgid "February"
msgstr "Febrero"
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Origen del valor del campo:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Nombre de fichero"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr "Rellenar cajas con color usando"
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Rellenar en multiples areas de texto"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Rellenar en multiples areas wikitext"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Rellenar en un area de texto"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Rellenar en un area wikitext"
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
-msgstr ""
+msgstr "Completar este campo con una URL"
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Rellenar en hasta %1 areas de texto"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Rellenar en hasta %1 areas wikitext"
@@ -2350,39 +3230,47 @@ msgstr "Rellenar en hasta %1 areas wikitext"
msgid "Fin"
msgstr "Fin"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Prioridad Final"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "FinalPriority"
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Encontrar todos los usuarios cuyo"
+
#: NOT FOUND IN SOURCE
msgid "Find group whose"
msgstr "Encontrar grupo que"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Encontrar grupos cuyo"
#: NOT FOUND IN SOURCE
msgid "Find new/open tickets"
-msgstr "Encontrar tickets nuevos/abiertos"
+msgstr "Encontrar casos nuevos/abiertos"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Encontrar gente que"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
-msgstr "Encontrar tickets"
+msgstr "Encontrar pedidos"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Terminar"
#: NOT FOUND IN SOURCE
msgid "Finish Approval"
msgstr "Aprobación final"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Primero"
@@ -2390,28 +3278,66 @@ msgstr "Primero"
msgid "First page"
msgstr "Primera página"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Foo!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Forzar cambio"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Formato"
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Reenviar"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Reenviar mensaje"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Reenviar mensaje y retornar"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Reenviar mensaje"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Reenviar mensaje a tercera(s) persona(s)"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
-msgstr "Encontrado %quant(%1,ticket)"
+msgstr "Mostrando %quant(%1,caso)"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Objeto encontrado"
@@ -2427,32 +3353,52 @@ msgstr "FreeformMultiple"
msgid "FreeformSingle"
msgstr "FreeformSingle"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Vie"
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Vie."
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Viernes"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Encabezados completos"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "General"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Obtener plantilla de fichero"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Cómo empezar"
+
#: NOT FOUND IN SOURCE
msgid "Getting the current user from a pgp sig\\n"
msgstr "Obteniendo el usuario de la firma pgp"
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Given to %1"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Global"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Campos Personalizados Globales"
@@ -2464,25 +3410,51 @@ msgstr "Selección de palabras clave globales"
msgid "Global Scrips"
msgstr "Acciones Globales"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Configuración de Campos Personalizados Globales"
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr ""
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Plantilla global: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "GnuPG error. Contacte al administrador"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "Integration GnuPG está deshabilitada"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr "Asuntos GnuPG"
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "Clave(s) privada(s) GnuPG para %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "Clave(s) privada(s) GnuPG para %1"
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Ir"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "¡Ir!"
@@ -2494,11 +3466,23 @@ msgstr "Firma pgp correcta de %1\\n"
msgid "Goto page"
msgstr "Ir a página"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
-msgstr "Ir a ticket"
+msgstr "Ir al pedido"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Gráfico"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Propiedades de gráfico"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Grupo"
@@ -2506,32 +3490,41 @@ msgstr "Grupo"
msgid "Group %1 %2: %3"
msgstr "Grupo %1 %2: %3"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Derechos del grupo"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "El grupo ya tiene miembros"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "El grupo ya tiene miembros: %1"
#: NOT FOUND IN SOURCE
msgid "Group could not be created."
msgstr "El grupo no se pudo crear"
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "El grupo no se pudo crear: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Grupo creado"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Grupo deshabilitado"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Grupo habilitado"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "El grupo no tiene este miembro"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Grupo no encontrado"
@@ -2543,58 +3536,103 @@ msgstr "Grupo no entontrado\\n"
msgid "Group not specified.\\n"
msgstr "Grupo no especificado\\n"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Permisos del grupo"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Grupos"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Los grupos no pueden ser miembros de sus propios miembros"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Grupos coincidentes con el criterio de búsqueda"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Grupos a los que este usuario pertenece"
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Hola!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Hola, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historial"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "Historico del grupo %1"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "Historico del usuario %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "Inicio"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "Intervalo de refresco de la página de inicio"
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "Tel Casa"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Inicio"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Hora"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
-msgstr ""
+msgstr "Horas"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "Tengo %quant(%1,concrete mixer)."
@@ -2603,110 +3641,178 @@ msgstr "Tengo %quant(%1,concrete mixer)."
msgid "I have [quant,_1,concrete mixer]."
msgstr "Tengo [quant,_1,concrete mixer]."
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
+#: NOT FOUND IN SOURCE
msgid "I'm lost"
msgstr "Estoy perdido"
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Id"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identidad"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Si una aprobación es rechazada, rechazar la original y borrar las aprobaciones pendientes"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr "Si no se especifica ningún Solicitante, crear casos con este solicitante."
+msgstr "Si no se especifica ningún Solicitante, crear pedidos con este solicitante."
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
-msgstr "Si no se especifica ninguna cola, crear casos en esta cola."
+msgstr "Si no se especifica ninguna cola, crear pedidos en esta cola."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Si esta herramienta estaba setgid, un usuario hostil local podría usar esta herramienta para conseguir acceso administrativo a RT."
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Si ha actualizado algo más arriba, no olvide"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Valor ilegal para %1"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Campo inmutable"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/CustomFields/index.html:86
msgid "Include disabled custom fields in listing."
msgstr "Incluir campos personalizables deshabilitados en el listado."
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Incluir grupos deshabilitados en el listado."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Incluir colas deshabilitadas en el listado"
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Incluir usuarios deshabilitados en la búsqueda"
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr "Incluir pagina"
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Consulta Incompleta"
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "Consulta incompleta"
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Mensajes individuales"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informar al propietario RT que el(los) usuario(s) tiene(n) problemas con las claves públicas"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Informarle al usuario que se extravió el tablero de instrumentos al que había suscrito"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Informarle al usuario que su contraseña ya fue reinicializado"
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Prioridad inicial"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "InitialPriority"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Initializar la Base de Datos"
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Error de entrada"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "Entrada debe coincidir con %1"
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "Instalar RT"
+
#: NOT FOUND IN SOURCE
msgid "Interest noted"
msgstr "Interest noted"
-#: lib/RT/Ticket_Overlay.pm:3503
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Error interno"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Error interno: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "Invalido %1: '%2' no parece una dirección de e-mail"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "Inválido %1: se espera un número"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "Inválido %1: no parece una dirección de e-mail"
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Tipo de grupo inválido"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Derechos inválidos"
@@ -2714,53 +3820,74 @@ msgstr "Derechos inválidos"
msgid "Invalid Type"
msgstr "Tipo inválido"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Datos no válidos"
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Objeto no válido"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "propietario del objecto no válido."
+
#: NOT FOUND IN SOURCE
msgid "Invalid owner. Defaulting to 'nobody'."
msgstr "Propietario inválido. Estableciéndolo a 'nobody'."
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr "Patron inválido: $1"
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Ãrea inválida"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Permiso inválido"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Valor inválido para %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Valor inválido para el campo personalizable"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Valor inválido para el estado"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "No está encriptado"
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Es increiblemente importante que los usuarios sin privilegios no puedan ejecutar esta herramienta"
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Es recomendable crear un usuario unix sin privilegios que pertenezca al grupo correcto y que tenga aceso a ejecutar esta herramienta"
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Tiene varios parámetros:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Italica"
@@ -2768,7 +3895,11 @@ msgstr "Italica"
msgid "Items pending my approval"
msgstr "Items pendientes de mi aprobación"
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Ene"
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Ene."
@@ -2776,11 +3907,15 @@ msgstr "Ene."
msgid "January"
msgstr "Enero"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Unirse o abandonar este grupo"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Jul"
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Jul."
@@ -2788,11 +3923,15 @@ msgstr "Jul."
msgid "July"
msgstr "Julio"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Todo"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Jun"
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Jun."
@@ -2800,6 +3939,10 @@ msgstr "Jun."
msgid "June"
msgstr "Junio"
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Keyword"
msgstr "Palabras clave"
@@ -2808,23 +3951,27 @@ msgstr "Palabras clave"
msgid "Lang"
msgstr "Leng"
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Lenguaje"
-#: html/Search/Elements/EditFormat:79
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Idioma"
+
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Grande"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Último"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Último contacto"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Último contactado"
@@ -2832,30 +3979,67 @@ msgstr "Último contactado"
msgid "Last Notified"
msgstr "Se le notifico por ultima vez"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Actualizado por ultima vez"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "Última Actualización Por"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Última actualización por"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdated"
msgstr "LastUpdated"
-#: html/Search/Elements/PickBasics:103
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Dejar vacío para usar el valor por defecto para su base de datos"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Queda"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr "Leyendas"
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Permitir a este usuario acceder al RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Permitir que este usuario tenga privilegios adicionales"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "¡Vamanos!"
+
#: NOT FOUND IN SOURCE
msgid "Limiting owner to %1 %2"
msgstr "Limitando propietario a %1 %2"
@@ -2864,75 +4048,107 @@ msgstr "Limitando propietario a %1 %2"
msgid "Limiting queue to %1 %2"
msgstr "Limitando cola a %1 %2"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
-msgstr ""
+msgstr "Enlace"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "El vínculo ya existe"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "El vínculo no pudo ser creado"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Vínculo creado (%2)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Vínculo borrado (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Vínculo no encontrado"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Vincular caso #%1"
#: NOT FOUND IN SOURCE
msgid "Link ticket %1"
-msgstr "Enlazar ticket %1"
+msgstr "Enlazar caso %1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
+msgstr "Vincular valores a"
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "Enlazado"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:700
-msgid "Linking. Permission denied"
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
msgstr ""
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr "Enlace. Permiso denegado"
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Enlaces"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Cargar"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Cargar búsqueda guardada:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr ""
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "Cargado %1 %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Modulos perl cargados"
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Búsqueda cargada %1"
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Local"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Dirección"
@@ -2940,88 +4156,108 @@ msgstr "Dirección"
msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
msgstr "El directorio del log %1 no pudo ser encontrado o no se pudo escribir en él.\\n RT no puede ejecutarse."
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Autenticado como %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Desconectado"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Entrar"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Salir"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr ""
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Correo electrónico"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr "Tipo principal de vínculos"
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Hacer propietario a"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Establecer estatus"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Establecer fecha de plazo"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Establecer fecha de resolución"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Establecer fecha de inicio"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Establecer fecha de inicio"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Establecer fecha de último cambio"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Establecer prioridad"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Establecer cola"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Establecer título"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Hacer este grupo visible al usuario"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Gestionar campos personalizados y valores de campos personalizados"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Administrar grupos y miembros"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Administrar propiedades y configuración que se aplique a todas las colas"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Administrar colas y propiedades especificas"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Gestionar gráficos guardados"
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Administrar usuarios y contraseñas"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mar."
@@ -3029,125 +4265,166 @@ msgstr "Mar."
msgid "March"
msgstr "Marzo"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
msgid "May"
msgstr "Mayo"
-#: lib/RT/Date.pm:445
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "May."
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Miembro"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Miembro %1 añadido"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Miembro %1 borrado"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Miembro añadido"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Miembro añadido: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Miembro borrado"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Miembro no borrado"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Miembro de"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "MemberOf"
msgstr "MemberOf"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Miembros"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "Pertenencia a %1 añadida"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "Pertenencia a %1 borrada"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Pertenencias"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "Pertenencias del usuario %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Fusión exitosa"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Fusión fallida. No se pudo establecer el EffectiveId"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Unión fallida. No se pudo establecer el Estado"
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Fusionar dentro de"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Unido en %1"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Mensaje"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Cuerpo del mensaje no mostrado porque es muy largo o no es texto plano."
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Altura del cuadro de texto"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Ancho del cuadro de texto"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Mensaje no puedo ser grabado"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Mensaje al usuario"
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Mensaje grabado"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Mensajes acerca de este caso no serán enviados a..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Longitud minima de la contraseña"
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minutos"
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
+#: NOT FOUND IN SOURCE
msgid "Mismatched parentheses"
msgstr "Parentesis no coincidentes"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Falta una clave primaria?: %1"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Movil"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "Telefono Movil"
@@ -3159,12 +4436,12 @@ msgstr "Modificar lista de control de acceso"
msgid "Modify Custom Field %1"
msgstr "Modificar el campo personalizable %1"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Modificar Campos Personalizados que aplican a %1 para todo %2"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Modificar Campos Personalizados que aplican a todo %1"
@@ -3173,25 +4450,25 @@ msgstr "Modificar Campos Personalizados que aplican a todo %1"
msgid "Modify Custom Fields which apply to all queues"
msgstr "Modificar los campos personalizables que se apliquen a todas las colas"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Modificar Derechos de Grupo"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Modificar Miembros"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Modificar Derechos"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
-msgstr "Modificar plantillas Sript para esta cola"
+msgstr "Modificar plantillas de acciones para esta cola"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
-msgstr "Modificar Scrips para esta cola"
+msgstr "Modificar acciones para esta cola"
#: NOT FOUND IN SOURCE
msgid "Modify System ACLS"
@@ -3201,11 +4478,11 @@ msgstr "Modificar ACLs de sistema"
msgid "Modify Template %1"
msgstr "Modificar plantilla %1"
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Modificar Derechos del Usuario"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Modificar un campo personalizable para la cola %1"
@@ -3214,43 +4491,51 @@ msgstr "Modificar un campo personalizable para la cola %1"
msgid "Modify a CustomField that applies to all queues"
msgstr "Modificar un campo personalizable que se aplique a todas las colas"
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
-msgstr "Modificar un scrip para la cola %1"
+msgstr "Modificar una acción para la cola %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Modificar un scrip que se aplique a todas las colas"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Modificar objetos asociados para %1"
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Modificar los tableros de instrumentos para este grupo"
+
#: NOT FOUND IN SOURCE
msgid "Modify dates for # %1"
msgstr "Modificar fechas para # %1"
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Modificar fechas para #%1"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
-msgstr "Modificar fechas para ticket # %1"
+msgstr "Modificar fechas para caso # %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Modificar campos personalizados globales"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Modificar privilegios globales de grupo"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Modificar privilegios globales de grupo."
@@ -3266,114 +4551,136 @@ msgstr "Modificar privilegios globales para usuarios"
msgid "Modify global scrips"
msgstr "Modificar acciones globales"
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Modificar derechos globales de usuario"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Modificar privilegios globales de usuario"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Modificar metadatos del grupo o borrar grupo"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Modificar derechos de grupo para campos personalizados %1"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Modificar privilegios de grupo para %1"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Modificar privilegios de grupo para la cola %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Modificar miembros de este grupo"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Modificar la propia cuenta RT"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Modificar personas relacionadas con la cola %1"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Modificar personas relacionadas con el ticket #%1"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Modificar los tableros de instrumentos personales"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Modificar acciones para la cola %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
-msgstr "Modificar scrips que se aplican a todas las colas"
+msgstr "Modificar acciones que se aplican a todas las colas"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Modificar los tableros de instrumentos del sistema"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Modificar plantilla %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Modificar plantillas que se aplican a todas las colas"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Modificar el tablero de instrumentos %1"
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr ""
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Modificar el grupo %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Modificar los observadores de la cola"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Modificar la suscripción al tablero de instrumentos %1"
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Modificar el usuario %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
-msgstr "Modificar el ticket # %1"
+msgstr "Modificar el caso # %1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
-msgstr "Modificar el ticket #%1"
+msgstr "Modificar el caso #%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
-msgstr "Modificar tickets"
+msgstr "Modificar casos"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Modificar derechos de usuario para campos personalizados %1"
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Modificar privilegios de usuario para el grupo %1"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Modificar derechos de usuario para la cola %1"
@@ -3386,11 +4693,23 @@ msgstr "Modificar observadores para la cola '%1'"
msgid "ModifyACL"
msgstr "ModifyACL"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "ModificarTableroDeInstrumentos"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "ModificarTableroDeInstrumentosDelGrupo"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "ModificarTableroDeInstrumentosPersonal"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "ModifyOwnMembership"
@@ -3398,125 +4717,170 @@ msgstr "ModifyOwnMembership"
msgid "ModifyQueueWatchers"
msgstr "ModifyQueueWatchers"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "ModifyScrips"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "ModifySelf"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "ModifyTemplate"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "ModifyTicket"
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Lun"
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Lun."
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Lunes"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "Más"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Más acerca de %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Mover hacia abajo"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Move hacia arriba"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Múltiple"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Se debe especificar un nombre"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
-msgstr "Mis %1 casos"
+msgstr "Mis casos %1s"
#: NOT FOUND IN SOURCE
msgid "My Approvals"
msgstr "Mis aprobaciones"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
-msgstr ""
+msgstr "Mi día"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Mis aprobaciones"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Mis tableros de instrumentos"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Mis búsquedas salvadas"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Nombre"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Nombre en uso"
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Need approval from system administrator"
msgstr "Se necesita aprobación del administrador del sistema"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Nunca"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Nuevo"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nuevas relaciones"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Nueva contraseña"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Nueva pendiente de aprobación"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Nueva búsqueda"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Tickets nuevos y abiertos de %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Nuevo campo personalizable"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Nuevo tablero de instrumentos"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Nuevo grupo"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Nuevos mensajes"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Nueva contraseña"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Notificación de nueva contraseña enviada"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Nueva cola"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Nuevo recordatorio:"
@@ -3524,51 +4888,51 @@ msgstr "Nuevo recordatorio:"
msgid "New request"
msgstr "Nueva solicitud"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nuevos privilegios"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
-msgstr "Nuevo scrip"
+msgstr "Nueva Acción"
#: NOT FOUND IN SOURCE
msgid "New search"
msgstr "Nueva búsqueda"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Nueva plantilla"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Nuevo caso"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
-msgstr "El ticket nuevo no existe"
+msgstr "El caso nuevo no existe"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Nuevo usuario"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Nuevo usuario llamado"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nuevo observador"
#: NOT FOUND IN SOURCE
msgid "New window setting"
-msgstr "Establecer nueva ventana "
+msgstr "Establecer nueva ventana"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Siguiente"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Siguiente Página"
@@ -3576,59 +4940,72 @@ msgstr "Siguiente Página"
msgid "Next page"
msgstr "Siguiente página"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "Alias"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Alias"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "No"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "%1 no cargado"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "No existe Class definida"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "No hay campo personalizable"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "No existe CustomField definido"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "No hay grupo definido"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "No existe Consulta"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "No hay cola definida"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "No se encontró el usuario. Por favor consulte al administrador.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Sin asunto"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "No hay plantilla"
#: NOT FOUND IN SOURCE
msgid "No Ticket specified. Aborting ticket "
-msgstr "No se especificó el ticket. Abortada la transacción"
+msgstr "No se especificó el ticket. Abortada la transacción "
#: NOT FOUND IN SOURCE
msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
-msgstr "No se especificó ticket. Abortando las modificaciones al ticket\\n\\n"
+msgstr "No se especificó el caso. Abortando las modificaciones al caso\\n\\n"
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "No acción"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "No se ha especificado ninguna columna"
@@ -3636,7 +5013,7 @@ msgstr "No se ha especificado ninguna columna"
msgid "No command found\\n"
msgstr "Comando no encontrado\\n"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "No hay comentarios sobre este usuario"
@@ -3644,97 +5021,141 @@ msgstr "No hay comentarios sobre este usuario"
msgid "No correspondence attached"
msgstr "No hay ningún archivo adjunto"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "No hay tableros de instrumentos"
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "No hay descripción para %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "No hay grupo especificado"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "No existen grupos que coincidan con el criterio de búsqueda."
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Mensaje no adjuntado"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "No es necesario encriptar"
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "No hay contraseña definida"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "No tiene privilegios para crear colas"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
-msgstr "No tiene privilegios para crear tickets en la cola '%1'"
+msgstr "No tiene privilegios para crear casos en la cola '%1'"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "No tiene privilegios para crear usuarios"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
-msgstr "No tiene privilegios para mostrar el ticket"
+msgstr "No tiene privilegios para ver el caso"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
-msgstr ""
+msgstr "Sin autorización para grabar búsquedas a través del sistema."
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Sin autorización para establecer preferencias"
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
-msgstr "Sin permiso para ver la actualización del ticket"
+msgstr "No tiene privilegios para ver la actualización del caso"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "No hay un principal especificado"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "No hay principales seleccionados"
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Sin clave privada"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "No hay colas que concuerden con los criterios de búsqueda"
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "No se especifican permisos"
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "No se encontraron derechos"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Sin privilegios concedidos"
-#: lib/RT/SavedSearch.pm:196
+#: NOT FOUND IN SOURCE
msgid "No search loaded"
msgstr "No hay búsqueda cargada"
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "No hay búsqueda sobre la que operar"
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Sin asunto"
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Clave inexistente o no es apropiada para firmar"
+
#: NOT FOUND IN SOURCE
msgid "No ticket id specified"
-msgstr "No se especificó el identificador del ticket"
+msgstr "No se especificó el identificador del caso"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "No se encontraron tickets"
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "No se especificó el tipo de transacción"
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Sin claves utilizables."
+
#: NOT FOUND IN SOURCE
msgid "No user or email address specified"
msgstr "No se especificó email o usuario"
-#: html/Admin/Users/index.html:55
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "No se encontraron usuarios que concuerden con los criterios de búsqueda"
@@ -3742,35 +5163,43 @@ msgstr "No se encontraron usuarios que concuerden con los criterios de búsqueda
msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
msgstr "Usuario no encontrado. El manejador cvs está deshabilitado. Por favor consulte a su administrador.\\n"
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "No se envió ningun valor a _Set!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Nadie"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Ninguno"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Campo no existente?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
-msgstr ""
+msgstr "No establecido"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "No encontrado"
#: NOT FOUND IN SOURCE
msgid "Not logged in"
msgstr "No autenticado"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "No autenticado."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "No establecido"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "No se ha implementado."
@@ -3778,83 +5207,115 @@ msgstr "No se ha implementado."
msgid "Not yet implemented...."
msgstr "No está implementado..."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Notas"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "La notificación no se pudo enviar"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Notificar AdminCcs"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Notificar AdminCcs como comentario"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Notificar Ccs"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Notificar Ccs como Comentarios"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Notificar otros destinatarios"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Notificar otros destinatarios como comentario"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Notificar al propietario"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Notificar al propietario como comentario"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Notificar al Propietario de su caso rechazado"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr "Notificar el Propietario que su pedido ha sido aprobado y está listo para que actuen en ello"
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Notificar al Propietario de que su caso ha sido aprobado por todos los aprobadores"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Notificar al Propietario de que su caso ha sido aprobado por algún aprobador"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr "Notificar el Propietario que su pedido ha sido aprobado por algunos o todos los que aprueban."
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
-msgstr "Notificar propietarios y AdminCcs de nuevos items pendientes de aprobación"
+msgstr "Notificar los Propietarios y Administradors que reciben copias que tienen items esperando su aprobación"
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
-#: etc/initialdata:77
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Notificar solicitantes"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Notificar solicitantes y Ccs"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Notificar solicitantes y Ccs como comentario"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Notificar solicitantes, Ccs y AdminCcs"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Notificar solicitantes, Ccs y AdminCcs como comentario"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "Notifiqueme si hay mensajes no leídos"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "Nov"
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Nov."
@@ -3862,37 +5323,49 @@ msgstr "Nov."
msgid "November"
msgstr "Noviembre"
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Número de resultados de búsqueda"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "O"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "No se pudo crear el objeto"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Objeto no pudo ser borrado"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Objeto creado"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objeto borrado"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Objeto de tipo %1 no puede llevar campos personalizados"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
+msgstr "Tipos de objetos no compatibles"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
msgstr ""
-#: lib/RT/Date.pm:450
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Oct"
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Oct."
@@ -3900,74 +5373,90 @@ msgstr "Oct."
msgid "October"
msgstr "Octubre"
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
-msgstr ""
+msgstr "Desconectado"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
-msgstr ""
+msgstr "Ediciones fuera de línea"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
-msgstr ""
+msgstr "Carga fuera de línea"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "en "
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
-msgstr ""
+msgstr "El %1, %2 escribió:"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "Al cerrar"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Al comentar"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "On Correspond"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Al crear"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Al cambiar de propietario"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Al cambiar de prioridad"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Al cambiar de cola"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Al reabrir"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Al resolver"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Al cambiar de status"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Al hacer transacción"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "BCC una vez"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "CC una vez"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
-msgstr "Solo muestra aprobaciones para solicitudes creadas despues de %1"
+msgstr "Mostrar sólo aprobaciones para solicitudes creadas despues de %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
-msgstr "Solo muestra aprobaciones para solicitudes creadas antes de %1"
+msgstr "Mostrar sólo aprobaciones para solicitudes creadas antes de %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Solo mostrar campos personalizados para:"
@@ -3975,11 +5464,15 @@ msgstr "Solo mostrar campos personalizados para:"
msgid "Open"
msgstr "Abierto"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
-msgstr ""
+msgstr "Tickets Abiertos"
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Abrir URL"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Abrirlo"
@@ -3987,27 +5480,31 @@ msgstr "Abrirlo"
msgid "Open requests"
msgstr "Solicitudes abiertas"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Casos abiertos"
#: NOT FOUND IN SOURCE
msgid "Open tickets (from listing) in a new window"
-msgstr "Tickets abiertos (del listado) en una nueva ventana"
+msgstr "Abrir casos (del listado) en una nueva ventana"
#: NOT FOUND IN SOURCE
msgid "Open tickets (from listing) in another window"
-msgstr "Tickets abiertos (del listado) en otra ventana"
+msgstr "Abrir casos (del listado) en otra ventana"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
-msgstr "Open tickets on correspondence"
+msgstr "Abrir casos al corresponder"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Opciones"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Ordenar por"
@@ -4015,48 +5512,54 @@ msgstr "Ordenar por"
msgid "Ordering and sorting"
msgstr "Ordenación y clasificación"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organización"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
-msgstr "Ticket originario: #%1"
+msgstr "Caso originario: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Email saliente acerca de un comentario grabado"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Email saliente grabado"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
-msgstr "Pasada la fecha de gracia, la prioridad se mueve a"
+msgstr "Pasado el tiempo, la prioridad se mueve a"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
-msgstr "Tickets poseidos"
+msgstr "Casos propios"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "OwnTicket"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Propietario"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr "El propietario '%1' no posee permisos para poseer este ticket"
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
msgstr "Propietario cambiado de %1 a %2"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "El Propietario no pudo ser establecido."
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Propietario cambiado forzosamente de %1 a %2"
@@ -4065,41 +5568,56 @@ msgstr "Propietario cambiado forzosamente de %1 a %2"
msgid "Owner is"
msgstr "El propietario es"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "Nombre_del_Propietario"
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Página"
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Pagina %1 de %2"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Página 1 of 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Página no encontrada"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Buscapersonas"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
msgstr "Buscapersonas Tel."
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Padres"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Contraseña"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Recordatorio de contraseña"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Contraseña cambiado"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "La Contraseña necesita ser al menos de %1 caracteres de longitud"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Contraseña establecida"
@@ -4107,60 +5625,76 @@ msgstr "Contraseña establecida"
msgid "Password too short"
msgstr "Contraseña demasiado corta"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Contraseña: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Contraseña: Permiso Denegado"
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Las Contraseña no coinciden"
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Las Contraseña no coinciden. Contraseña no cambiada"
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Personas"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Realizar una acción definida por el usuario"
-#: html/Admin/Tools/Configuration.html:94
-msgid "Perl configuration"
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr "Configuración de Perl"
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Permiso denegado"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr "Permiso denegado"
-#: lib/RT/Template_Overlay.pm:372
+#: NOT FOUND IN SOURCE
msgid "Permissions denied"
msgstr "Permisos denegados"
-#: html/User/Elements/Tabs:56
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "Tableros De Instrumentos Personales"
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Grupos personales"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Grupos personales"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Grupos personales:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Números de teléfono"
@@ -4168,33 +5702,68 @@ msgstr "Números de teléfono"
msgid "Placeholder"
msgstr "Placeholder"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Por favor, verifique la URL e intente nuevamente."
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr "Búsquedas posiblemente ocultas"
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Preferencias"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr ""
+msgid "Preferences %1 for user %2."
+msgstr "Preferencias %1 para el usuario %2."
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
-msgstr ""
+msgstr "Preferencias guardadas por %1."
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "Preferencias guaraddas para el usuario %1."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "Preferencias guardadas"
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Llave preferida: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Llave preferida"
#: NOT FOUND IN SOURCE
msgid "Prefs"
msgstr "Prefs"
-#: lib/RT/Action/Generic.pm:195
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Preparación cortada"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Prev"
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Anterior"
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Página Anterior"
@@ -4206,53 +5775,86 @@ msgstr "Página anterior"
msgid "Pri"
msgstr "Pri"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "No se encontró el principal %1"
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr "Imprimir los mensajes resumidos a STDOUT, no enviarlos por mail. No marcarlos como enviados"
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Imprimir este mensaje"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Prioridad"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "La prioridad empieza en"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Privacidad"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Privadas:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Clave Privada"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Privilegiado"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Estado privilegiado: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Usuarios privilegiados:"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr "Procesando sin transacción, algunas condiciones y acciones podrían fallar. Considere usar --argumento de transacción"
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudogrupo para uso interno"
-#: html/Search/Build.html:121
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "La clave pública '0x%1' es necesaria para verificar la firma"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Consultas"
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "Consulta"
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Constructor de Consulta"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
-msgstr ""
+msgstr "Consulta:"
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Cola"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
@@ -4266,7 +5868,7 @@ msgstr "Cola '%1' no encontrada\\n"
msgid "Queue Keyword Selections"
msgstr "Selecciones de palabras clave de la cola"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Nombre de la cola"
@@ -4274,60 +5876,104 @@ msgstr "Nombre de la cola"
msgid "Queue Scrips"
msgstr "Acciones de la cola"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "La cola ya existe"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "La cola no se pudo crear"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "La cola no se pudo cargar"
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Cola creada"
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr "Cola desactivada"
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr "Cola activada"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Id Cola"
+
#: NOT FOUND IN SOURCE
msgid "Queue is not specified."
msgstr "No se especifico ninguna cola"
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Cola no encontrada"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "Permisos de cola"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "Clave de la cola"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Colas"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Colas que YO administro"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Colas en las que YO soy AdminCc"
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Búsqueda rápida"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Creación rápida de caso"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr "RFC2616"
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
-msgstr ""
+msgstr "RSS"
#: NOT FOUND IN SOURCE
msgid "RT %1"
msgstr "RT %1"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 para %2"
@@ -4339,10 +5985,14 @@ msgstr "RT %1 de <a href=\"http://bestpractical.com\">Best Practical Solutions,
msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgstr "RT %1. Derechos reservados 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "Administración del RT"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "E-mail del administrador de RT"
+
#: NOT FOUND IN SOURCE
msgid "RT Authentication error."
msgstr "Error de autenticación en RT"
@@ -4351,6 +6001,10 @@ msgstr "Error de autenticación en RT"
msgid "RT Bounce: %1"
msgstr "Rechazo del RT: %1"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "Configuración RT"
+
#: NOT FOUND IN SOURCE
msgid "RT Configuration error"
msgstr "Error de configuración del RT"
@@ -4359,7 +6013,7 @@ msgstr "Error de configuración del RT"
msgid "RT Critical error. Message not recorded!"
msgstr "Error crítico en RT. El mensaje no fue grabado!"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "Error del RT"
@@ -4371,30 +6025,42 @@ msgstr "RT recibió correo (%1) de sí mismo."
msgid "RT Recieved mail (%1) from itself."
msgstr "RT recibió correo (%1) de sí mismo."
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "Autoservicio RT"
+
#: NOT FOUND IN SOURCE
msgid "RT Self Service / Closed Tickets"
-msgstr "RT AutoServicio / Tickets cerrados"
+msgstr "RT AutoServicio / Casos cerrados"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr ""
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "RT en un vistazo"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
+msgstr "RT de un vistazo para el usuario %1"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
-msgstr ""
+msgstr "RT puede incluir contenido de otro servicio web al mostrar este campo personalizable."
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
-msgstr ""
+msgstr "RT puede convertir los valores de este campo personalizable a hipervínculos a otro servicio."
#: NOT FOUND IN SOURCE
msgid "RT couldn't authenticate you"
@@ -4408,7 +6074,7 @@ msgstr "RT no pudo encontrar el solicitante a través de una búsqueda a la base
msgid "RT couldn't find the queue: %1"
msgstr "RT no pudo encontrar la cola: %1"
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT no pudo almacenar tu sesión."
@@ -4416,8 +6082,8 @@ msgstr "RT no pudo almacenar tu sesión."
msgid "RT couldn't validate this PGP signature. \\n"
msgstr "RT no pudo validar esta firma PGP. \\n"
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT para %1"
@@ -4433,11 +6099,27 @@ msgstr "RT ha procesado tus comandos"
msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
msgstr "RT es &copy; Copyright 1996-%1 de Jesse Vincent &lt;jesse@bestpractical.com&gt;. Es distrbuido bajo <a href=\"http://www.gnu.org/copyleft/gpl.html\">la version 2 de la licencia GNU GPL (General Public License)</a>."
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT thinks this message may be a bounce"
msgstr "RT cree que este mensaje puede ser un mensaje rebotado"
-#: html/Search/Simple.html:58
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT se conectará a la base de datos con este usuario. Será creado para usted."
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT creará un usuario llamado \"root\" y establecerá esto como su contraseña"
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "RT buscará por cualquier otra cosa en los asuntos de los casos."
@@ -4445,51 +6127,80 @@ msgstr "RT buscará por cualquier otra cosa en los asuntos de los casos."
msgid "RT will process this message as if it were unsigned.\\n"
msgstr "RT procesará este mensaje como si fuera uno no firmado\\n"
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr ""
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
msgstr "El modo de comandos por correo de RT requiere autenticación PGP. Ya sea que no haya firmado su mensaje, o que su firma no pueda ser verificada."
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Nombre real"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "Nombre real"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Destinatario"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr "Grabar todos los cambios"
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr "Miembro recursivo"
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "Referencia para %1 añadida"
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "Referencia para %1 borrada"
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "Referencia para %1 añadida"
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "Referencia para %1 borrada"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Referenciado por"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Hace referencia a"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "RefersTo"
msgstr "RefersTo"
@@ -4501,77 +6212,133 @@ msgstr "Refinar"
msgid "Refine search"
msgstr "Refinar la búsqueda"
-#: html/Elements/Refresh:57
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Recargar"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Refrescar esta página cada %1 minutos"
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr "Recordario '%1' añadida"
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr "Recordatorio '%1' completado"
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr "Recordatorio '%1' reabierto"
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr "Recordatorio caso #%1"
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "Recordatorios"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr "Recordatorios para caso #%1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Quitar AdminCc"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Eliminar marcador"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Quitar Cc"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Quitar solicitante"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Responder"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Direccion de Respuesta"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Responder a solicitantes"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
-msgstr "Responder a los tickets"
+msgstr "Responder a los casos"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "ReplyToTicket"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Informes"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Solicitante"
@@ -4587,65 +6354,81 @@ msgstr "Solicitante(s)"
msgid "RequestorAddresses"
msgstr "RequestorAddresses"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Solicitantes"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Las solicitudes entran en vencimiento en"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Requerido parámetro '%1' no especificado"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Borrar"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr "Resetear token de autenticación secreto"
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
-msgstr ""
+msgstr "Restaurar a valores por defecto"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Residencia"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Resolver"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
-msgstr "Resolver ticket #%1 (%2)"
+msgstr "Resolver caso #%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Resuelto"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Resuelto por propietario"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Resuelto en rango de fechas"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Casos resueltos en el período, agrupado por propietario"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Casos resueltos, agrupados por propietario"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr "Responder"
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "Responder a los solicitantes"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Resultados"
@@ -4653,11 +6436,15 @@ msgstr "Resultados"
msgid "Results per page"
msgstr "Resultados por página"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Confirmar contraseña"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Revertir"
@@ -4665,49 +6452,48 @@ msgstr "Revertir"
msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
msgstr "Privilegio %1 no encontrado para %2 %3 referente a %4 (%5)\\n"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Privilegio delegado"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Privilegio otorgado"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Privilegio cargado"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Privilegio no pudo ser revocado"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Privilegio no encontrado"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Privilegio no cargado"
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Privilegio revocado"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Privilegios"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "No se pudieron conceder los privilegios a %1"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "No se pudieron revocar los privilegios de %1"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Roles"
@@ -4715,74 +6501,115 @@ msgstr "Roles"
msgid "RootApproval"
msgstr "RootApproval"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Filas"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Filas por caja"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Filas por página"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Sab"
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Sab."
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Sabado"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Guardar"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Guardar Cambios"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Guardar Preferencias"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Guardar como Nuevo"
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Guardar cambios"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Guardado %1 %2"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "No se encontró la búsqueda guardada %1"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Saved search %1"
msgstr "Búsquedas guardadas %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Búsquedas guardadas"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
-msgstr "Scrip #%1"
+msgstr "Acción #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Acción creada"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Campos de Acción"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Acción borrada"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Acciones"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Scrips and Destinatarios"
+
#: NOT FOUND IN SOURCE
msgid "Scrips for %1\\n"
msgstr "Acciones para %1\\n"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Acciones que se aplican a todas las colas"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Búsqueda"
@@ -4790,157 +6617,200 @@ msgstr "Búsqueda"
msgid "Search Criteria"
msgstr "Criterios de búsqueda"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Preferencias de Búsqueda"
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr ""
-
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Buscar aprobaciones"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Búsqueda de casos"
-#: html/Search/Simple.html:55
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Búsqueda de casos. Ingrese número de <strong>id</strong>, nombre de <strong>colas</strong>, Dueños por <strong>Nombre de usuario</strong> y solicitantes por <strong>dirección de correo electrónico</strong>."
+
+#: NOT FOUND IN SOURCE
msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
msgstr "Búsqueda de casos. Entrar números <strong>id</strong>, <strong>colas</strong> por nombre, Propietarios por <strong>usuario</strong> y Solicitantes por <strong>dirección email</strong>. RT buscará por cualquier otra cosa que entres en cuerpos y adjuntos de casos."
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Opciones de búsqueda"
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Resultados de búsqueda agrupados por %1"
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Search update: %1"
msgstr "Búsqueda actualizada: %1"
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "Las busquedas por texto completo en cada caso puede llevar mucho tiempo, pero si necesita hacerlo, puede buscar por cualquier palabra en el histórico completo de casos para cualquier palabra escribiendo: <b>fulltext:<i>palabra</i></b>."
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr "Token de autenticación secreto"
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Seguridad:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
-msgstr ""
+msgstr "Vea también:"
#: NOT FOUND IN SOURCE
msgid "See also: %1"
msgstr "Ver tambien: %1"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr "Ver valores de los campos personalizados"
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Ver campos personalizados"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Ver mensajes email salientes exactos y sus receptores"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Ver comentario privado de caso"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Ver sumarios de caso"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "VerCamposPersonalizados"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "VerTableroDeInstrumentos"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "VerGrupo"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "VerTableroDeInstrumentosDelGrupo"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "VerTableroDeInstrumentosPersonal"
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "VerCola"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "Elegir"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Seleccione tipo de base de datos"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Seleccionar un Campo Personalizado"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Seleccione un grupo"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Seleccione una cola"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Seleccionar una cola para tu nuevo caso"
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Seleccione un usuario"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Elegir otro idioma"
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Seleccionar un campo personalizable"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Selecciones campos personalizados para todas las colas"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Seleccionar campos personalizables para todos los grupos de usuarios"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Seleccionar campos personalizables para todos los usuarios"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Seleccionar campos personalizables para casos en todas las colas"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Seleccionar campos personalizables para transacciones de casos en todas las colas"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Elegir tablero de instrumentos"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Seleccionar grupo"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Seleccionar valores múltiples"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Seleccionar un valor"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Seleccionar cola"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Seleccionar colas para ser mostradas en la pagina \"RT en un vistazo\""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Seleccionar accion"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Selecionar plantilla"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Seleccionar hasta %1 valores"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Seleccionar usuario"
@@ -4952,15 +6822,19 @@ msgstr "SelectMultiple"
msgid "SelectSingle"
msgstr "SelectSingle"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Campos Personalizados Seleccionados"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "La clave elegida no es de confianza o ya no existe"
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Objetos Seleccionados"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Selecciones modificadas. Por favor graba tus cambios"
@@ -4968,51 +6842,67 @@ msgstr "Selecciones modificadas. Por favor graba tus cambios"
msgid "Self Service"
msgstr "Autoservicio"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Correo enviado correctamente"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Enviar mail a todos los observadores"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Enviar mail a todos los observadores como comentario"
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Enviar mail a los solicitantes y Ccs"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Enviar mail a los solicitantes y Ccs como comentario"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Envia un mesaje a los solicitantes"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Enviar mail a los Ccs y Bccs listados explicitamente"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Enviar correo a los Ccs"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Enviar correo a los Ccs como comentario"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Envia mail a los Ccs administrativos"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Envia mail a los Ccs administrativos como comentario"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
-msgstr "Enviar mail al propietario"
+msgstr "Enviar correo al propietario"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Sep"
-#: lib/RT/Date.pm:449
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Sep."
@@ -5020,95 +6910,141 @@ msgstr "Sep."
msgid "September"
msgstr "Septiembre"
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Configuración"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Mostrar"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Mostrar Aprobaciones"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Mostrar Columnas"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Mostrar resultados"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Mostrar peticiones aprobadas"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "También mostrar"
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Mostrar lo básico"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Mostrar solicitudes denegadas"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Mostrar detalles"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Mostrar solicitudes pendientes"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Mostrar solicitudes esperando otras aprobaciones"
#: NOT FOUND IN SOURCE
msgid "Show ticket private commentary"
-msgstr "Mostrar ticket en un comentario privado"
+msgstr "Mostrar caso en un comentario privado"
#: NOT FOUND IN SOURCE
msgid "Show ticket summaries"
-msgstr "Mostrar resumen del ticket"
+msgstr "Mostrar resumen del caso"
#: lib/RT/Queue_Overlay.pm:93
msgid "ShowACL"
msgstr "ShowACL"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr ""
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "ShowScrips"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "ShowTemplate"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "ShowTicket"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "ShowTicketComments"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Barra lateral"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "Firmar"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "Firmar por preconfiguración"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
-msgstr "Validarse como solicitante de ticket o ticket o cola Cc"
+msgstr "Validarse como solicitante de caso o CC del caso o cola"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
-msgstr "Validarse como ticket o cola AdminCc"
+msgstr "Validarse como AdminCc del caso o cola"
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Firma"
@@ -5116,31 +7052,47 @@ msgstr "Firma"
msgid "Signed in as %1"
msgstr "Validado como %1"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Búsqueda simple"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Sencillo"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Nombre del sitio"
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Tamaño"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Saltar Menu"
-#: html/Search/Elements/EditFormat:78
-msgid "Small"
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "Pequeño/a"
+
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
-msgstr ""
+msgstr "Algunos navegadores solamente podrán cargar contenido del mismo dominio que su servidor RT."
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Ordenar"
@@ -5156,9 +7108,21 @@ msgstr "Ordenar resultados por"
msgid "SortOrder"
msgstr "Ordenamiento"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Orden"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Especifique si se ejecutará diaria o semanalmente."
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Hoja de cálculo"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
-msgstr ""
+msgstr "Fase"
#: NOT FOUND IN SOURCE
msgid "Stalled"
@@ -5168,7 +7132,7 @@ msgstr "Pendiente"
msgid "Start page"
msgstr "Página de inicio"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Comenzado"
@@ -5176,7 +7140,11 @@ msgstr "Comenzado"
msgid "Started date '%1' could not be parsed"
msgstr "La fecha de inicio '%1' no se pudo leer"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Comienzo"
@@ -5188,19 +7156,24 @@ msgstr "Comenzado por"
msgid "Starts date '%1' could not be parsed"
msgstr "La fecha de inicio '%1' no se pudo ser leer"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Estado"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Estado"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Cambio de status"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Estado cambiado de %1 a %2"
@@ -5208,37 +7181,57 @@ msgstr "Estado cambiado de %1 a %2"
msgid "StatusChange"
msgstr "StatusChange"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Robar"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Robar casos"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "RobarCaso"
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Paso %1 de %2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Robado de %1"
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Estilo"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Asunto"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Asunto cambiado a %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Enviar"
@@ -5246,27 +7239,86 @@ msgstr "Enviar"
msgid "Submit Workflow"
msgstr "Submit Workflow"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "Suscribir"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "Suscribir al tablero de instrumentos %1"
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "Suscribir a los tableros de instrumentos"
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "SuscribirTableroDeInstrumentos"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "Suscrito al tablero de instrumentos %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "Suscripción"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr "La suscripción no pudo crearse: %1"
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Completado"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Datos exitosamente desencriptados"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Datos exitosamente encriptados"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Dom"
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Dom."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Domingo"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "Superusuario"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Suspendido"
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Sistema"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Configuración del Sistema"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "Tableros De Instrumentos del Sistema"
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Predeterminado del Sistema"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Error del sistema"
@@ -5278,20 +7330,20 @@ msgstr "Error de sistema. Derecho no concedido"
msgid "System Error. right not granted"
msgstr "Error de sistema. Derecho no concedido"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
-msgstr ""
+msgstr "Error del sistema: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Herramientas del Sistema"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Error del sistema. Privilegio no delegado."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Error del sistema. Privilegio no otorgado"
@@ -5299,52 +7351,74 @@ msgstr "Error del sistema. Privilegio no otorgado"
msgid "System error. Unable to grant rights."
msgstr "Error de sistema. Incapaz de conceder permisos"
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Grupos del sistema"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "Permisos del sistema"
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "SystemRolegroup for internal use"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TEST_STRING"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
-msgstr "Coger"
+msgstr "Tomar"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Coger casos"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "CogerCaso"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
-msgstr "Cogido"
+msgstr "Tomado"
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Plantilla"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Plantilla #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Plantilla #%1 eliminada"
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "No se encontró la plantilla '%1'"
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Plantilla borrada"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "La plantilla está vacía"
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
-msgstr ""
+msgstr "La plantilla es un argumento obligatorio"
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Plantilla no encontrada"
@@ -5352,15 +7426,15 @@ msgstr "Plantilla no encontrada"
msgid "Template not found\\n"
msgstr "Plantilla no encontrada\\n"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Plantilla procesada"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Error sintactico de Plantilla"
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Plantillas"
@@ -5368,74 +7442,79 @@ msgstr "Plantillas"
msgid "Templates for %1\\n"
msgstr "Plantillas de %1\\n"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Ese es el valor actual"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Ese no es un valor para este campo personalizable"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Este es el mismo valor"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Ese principal ya tiene ese derecho"
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Ese principal ya es un %1 para esta cola"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
-msgstr "Ese principal ya es un %1 para este ticket"
+msgstr "Ese principal ya es un %1 para este caso"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Ese principal no es un %1 para esta cola"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
-msgstr "Ese principal no es un %1 para este ticket"
+msgstr "Ese principal no es un %1 para este caso"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Esa cola no existe"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
-msgstr "Ese ticket tiene dependencias sin resolver"
+msgstr "Ese caso tiene dependencias sin resolver"
#: NOT FOUND IN SOURCE
msgid "That user already has that right"
msgstr "Ese usuario ya tiene ese privilegio"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
-msgstr "Ese usuario ya posee ese ticket"
+msgstr "Ese usuario ya posee ese caso"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Ese usuario no existe"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Ese usuario ya tiene privilegios"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Ese usuario ya está sin privilegios"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Ese usuario ahora tiene privilegios"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Ese usuario ya no tiene privilegios"
@@ -5443,166 +7522,275 @@ msgstr "Ese usuario ya no tiene privilegios"
msgid "That user is now unprivilegedileged"
msgstr "Este usuario ya no tiene privilegios"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
-msgstr "Ese usuario puede no poseer tickets en esa cola"
+msgstr "Ese usuario puede no poseer casos en esa cola"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Ese no es un identificador numérico"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Lo básico"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
-msgstr "El CC de un ticket"
+msgstr "El CC de un caso"
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "La contraseña del administrador de la base de datos para la base de datos"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
-msgstr "El CC administrativo de un ticket"
+msgstr "El CC administrativo de un caso"
#: NOT FOUND IN SOURCE
msgid "The comment has been recorded"
msgstr "El comentario ha sido grabado"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "El nombre del dominio de su servidor de la base de datos (como 'db.example.com')."
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
-msgstr "El siguiente comando encontrará todos los tickets activos en la cola 'general' y pondra su prioridad a 99 si no han sido tocados en 4 horas:"
+msgstr "El siguiente comando encontrará todos los casos activos en la cola 'general' y pondrá su prioridad a 99 si no han sido tocados en 4 horas:"
#: NOT FOUND IN SOURCE
msgid "The following commands were not proccessed:\\n\\n"
msgstr "Los siguientes comandos no han sido procesados:\\n\\n"
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "La clave ha sido deshabilitada"
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "La clave ha sido revocada"
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "La clave ha expirado"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Ha sido establecido el nuevo valor"
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
-msgstr "El propietario de un ticket"
+msgstr "El propietario del pedido"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "La página solicitada no se encuentra"
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
-msgstr "El solicitante de un ticket"
+msgstr "El solicitante de un caso"
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
-#: html/Admin/Elements/EditUserComments:47
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Tema"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "Existen varias claves adecuadas para encriptación."
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "Hay mensajes sin leer sobre este caso"
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "No hay claves disponibles para cifrado."
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Estos comentarios generalmente no están visibles para el usuario"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Este campo personalizado no se aplica a este objeto"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Esta caracteristica esta solo disponible para administradores del sistema"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Este mensaje sera enviado a..."
#: NOT FOUND IN SOURCE
msgid "This ticket %1 %2 (%3)\\n"
-msgstr "Este ticket %1 %2 (%3)"
+msgstr "Este caso %1 %2 (%3)\\n"
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Esta herramiento permite al usuario ejectutar modulos perl arbitrarios desde dentro de RT"
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Parece que esta transacción no tiene contenido"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
-msgstr "Los %1 tickets de mayor prioridad de este usuario"
+msgstr "Los %1 casos de mayor prioridad de este usuario"
#: NOT FOUND IN SOURCE
msgid "This user's 25 highest priority tickets"
msgstr "Los 25 casos de mayor prioridad de este usuario"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Jue"
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Jue."
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Jueves"
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Caso/Ticket"
+
#: NOT FOUND IN SOURCE
msgid "Ticket # %1 %2"
-msgstr "Ticket # %1 %2"
+msgstr "Caso # %1 %2"
#: NOT FOUND IN SOURCE
msgid "Ticket # %1 Jumbo update: %2"
msgstr "Actualización Jumbo para el ticket # %1: %2"
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
-msgstr "Actualización Jumbo para el ticket #%1: %2"
+msgstr "Actualización Jumbo para el caso #%1: %2"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "Grafo de relaciones del caso #%1"
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
-msgstr "Ticket #%1: %2"
+msgstr "Caso #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
-msgstr ""
+msgstr "Caso %1"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
-msgstr "Ticket %1 creado en la cola '%2'"
+msgstr "Caso %1 creado en la cola '%2'"
#: NOT FOUND IN SOURCE
msgid "Ticket %1 loaded\\n"
-msgstr "Ticket %1 cargado\\n"
+msgstr "Caso %1 cargado\\n"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
-msgstr "Ticket %1: %2"
+msgstr "Caso %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Campos Personalizables de Caso"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
-msgstr "Historial del ticket # %1 %2"
+msgstr "Historial del caso # %1 %2"
#: NOT FOUND IN SOURCE
msgid "Ticket Id"
-msgstr "Id del ticket:"
+msgstr "Id del caso:"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
-msgstr "Ticket resuelto"
+msgstr "Caso resuelto"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Búsqueda de casos"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Transacciones del Caso"
#: NOT FOUND IN SOURCE
msgid "Ticket attachment"
-msgstr "Archivos adjuntos del ticket"
+msgstr "Archivos adjuntos del caso"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
-msgstr "Contenido del ticket"
+msgstr "Contenido del caso"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
-msgstr "Tipo de contenido del ticket"
+msgstr "Tipo de contenido del caso"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
-msgstr "No se pudo crear el ticket debido a un error interno"
+msgstr "No se pudo crear el caso debido a un error interno"
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "El caso no pudo ser cargado"
#: NOT FOUND IN SOURCE
msgid "Ticket created"
@@ -5610,21 +7798,25 @@ msgstr "Caso creado"
#: NOT FOUND IN SOURCE
msgid "Ticket creation failed"
-msgstr "Creación del ticket fallida"
+msgstr "Falló la creación del caso"
#: NOT FOUND IN SOURCE
msgid "Ticket deleted"
msgstr "Caso borrado"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Visualizar caso"
+
#: NOT FOUND IN SOURCE
msgid "Ticket id not found"
-msgstr "Id de ticket no encontrada"
+msgstr "Id de caso no encontrada"
#: NOT FOUND IN SOURCE
msgid "Ticket killed"
msgstr "Caso eliminado"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Metadata de casos"
@@ -5632,36 +7824,38 @@ msgstr "Metadata de casos"
msgid "Ticket not found"
msgstr "Caso no encontrado"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
-msgstr "Estado del ticket cambiado"
+msgstr "Estado del caso modificado"
#: NOT FOUND IN SOURCE
msgid "Ticket watchers"
msgstr "Observadores del caso"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "Modulo de búsqueda TicketSQL"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Casos"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
msgid "Tickets %1 %2"
msgstr "Casos %1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "Casos %1 por %2"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Casos creados despues del"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Casos creados antes del"
@@ -5669,54 +7863,66 @@ msgstr "Casos creados antes del"
msgid "Tickets from %1"
msgstr "Casos de %1"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Casos resueltos despues del"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Casos resueltos antes del"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Casos que dependen de esta aprobación:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Tiempo Estimado"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Tiempo Restante"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Tiempo Trabajado"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Tiempo restante"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Tiempo para mostrar"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Tiempo trabajado"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "TiempoEstimado"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
msgid "TimeLeft"
msgstr "TimeLeft"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "TimeWorked"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Zona horaria"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Título"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "Para"
+
#: NOT FOUND IN SOURCE
msgid "To generate a diff of this commit:"
msgstr "Para generar una comparación de este cometido:"
@@ -5725,37 +7931,41 @@ msgstr "Para generar una comparación de este cometido:"
msgid "To generate a diff of this commit:\\n"
msgstr "Para generar una comparación de este cometido:\\n"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Última actualización"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Herramientas"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
-msgstr ""
+msgstr "Total"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transacción"
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Transacción %1 limpiada"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transacción creada"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Campos personalizables de Transacción"
@@ -5763,31 +7973,61 @@ msgstr "Campos personalizables de Transacción"
msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
msgstr "Transaction->Create no pudo, ya que no especificó un ID de ticket"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaction->Create no pudo, ya que no especificó un tipo de objeto e ID"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Las transacciones son inmutables"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Confianza"
+
#: NOT FOUND IN SOURCE
msgid "Trying to delete a right: %1"
msgstr "Intentando borrar el privilegio: %1"
-#: lib/RT/Date.pm:418
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Mar."
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Martes"
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Tipo"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "No es posible suscribir al tablero de instrumentos %1: Permiso negado"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "No implementado"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Usuario en Unix"
@@ -5795,53 +8035,78 @@ msgstr "Usuario en Unix"
msgid "UnixUsername"
msgstr "Usuario en Unix"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr "Desconocido (no hay valor de confianza asignado)"
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr "Desconocido (este valor es nuevo para el sistema)"
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Codificación de contenido desconocida: %1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
+#: NOT FOUND IN SOURCE
msgid "Unknown field: $key"
msgstr "Campo desconocido: $key"
-#: html/Elements/SelectResultsPerPage:58
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "Campo desconocido: %1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr "Quitar el limite"
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Ilimitado"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Búsqueda sin nombre"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "No privilegiado"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Campos Personalizados No Seleccionados"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Objetos No Seleccionados"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "No cogido"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Actualizar"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Actualizar gráfico"
+
#: NOT FOUND IN SOURCE
msgid "Update ID"
msgstr "Id de actualización"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Actualizar Caso"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Tipo de actualización"
@@ -5853,7 +8118,11 @@ msgstr "Actualizar todos estos casos al mismo tiempo"
msgid "Update email"
msgstr "Actualizar correo"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Actualizar formato y buscar"
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Actualizar múltiples casos"
@@ -5861,80 +8130,123 @@ msgstr "Actualizar múltiples casos"
msgid "Update name"
msgstr "Actualizar nombre"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Actualización no grabada."
#: NOT FOUND IN SOURCE
msgid "Update selected tickets"
-msgstr "Actualizar tickets seleccionados"
+msgstr "Actualizar casos seleccionados"
#: NOT FOUND IN SOURCE
msgid "Update signature"
msgstr "Actualizar firma"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
-msgstr "Actualizar ticket"
+msgstr "Actualizar caso"
#: NOT FOUND IN SOURCE
msgid "Update ticket # %1"
-msgstr "Actualización de ticket # %1"
+msgstr "Actualizar caso # %1"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
-msgstr "Actualizar ticket #%1"
+msgstr "Actualizar caso #%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
-msgstr "Actualizar ticket #%1 (%2)"
+msgstr "Actualizar caso #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "El tipo de actualización no fue ni respuesta ni comentario"
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Actualizado"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "búsqueda guardada actualizada \"%1\""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Subir"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Subir multiples ficheros"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Subir multiples imagenes"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Subir un fichero"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Subir una imagen"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Subir hasta %1 ficheros"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Subir hasta %1 imagenes"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Subir cambios"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Modo de empleo: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "Usar SSL?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "Usar predeterminado (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Use monospace font"
+msgstr "Usar fuente monoespaciada"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Usar otras herramientas administrativas de RT"
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Usuario"
+
#: NOT FOUND IN SOURCE
msgid "User %1 %2: %3\\n"
msgstr "Usuario %1 %2: %3\\n"
@@ -5943,7 +8255,7 @@ msgstr "Usuario %1 %2: %3\\n"
msgid "User %1 Password: %2\\n"
msgstr "Usuario %1 Contraseña: %2\\n"
-#: lib/RT/Ticket_Overlay.pm:506
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "No se encontro el Usuario '%1'"
@@ -5956,11 +8268,15 @@ msgstr "Usuario '%1' no encontrado"
msgid "User '%1' not found\\n"
msgstr "Usuario '%1' no encontrado\\n"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr "Usuario (Creado - expira)"
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Definido por el usuario"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Condiciones y acciones Definidas por el Usuario"
@@ -5972,24 +8288,41 @@ msgstr "ID de usuario"
msgid "User Id"
msgstr "Id de usuario"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Privilegios de usuario"
-#: html/Admin/Users/Modify.html:301
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "El usuario no pudo ser creado: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Usuario creado"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Grupos definidos por el usuario"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr "Usuario desactivado"
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr "Usuario activado"
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "El usuario tiene la dirección de e-mail vacía"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Usuario cargado"
@@ -6001,181 +8334,330 @@ msgstr "Usuario notificado"
msgid "User view"
msgstr "Vista de usuario"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Claves GnuPG de usuario"
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Grupos definidos por el usuario"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Nombre de usuario"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "formato para el nombre del usuario"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Usuarios"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Usuarios que concuerdan con los criterios de búsqueda"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
-msgstr ""
+msgstr "Usando transacción #%1..."
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Consulta Valida"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
-msgstr ""
+msgstr "Validación"
#: NOT FOUND IN SOURCE
msgid "ValueOfQueue"
msgstr "Valor de la cola"
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Valores"
-#: lib/RT/Queue_Overlay.pm:107
-msgid "Watch"
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Ver tableros de instrumentos de este grupo"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Ver tableros de instrumentos personales"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "Ver tableros de instrumentos del sistema"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "W3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "Editor de mensajes WYSIWYG"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Atención! NO tiene signo!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Aviso: usted no tiene registrado una dirección de correo electronico. No recibirá este tablero de instrumentos hasta que esté registrado."
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr "Watch"
+
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "WatchAsAdminCc"
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Observador"
+
#: NOT FOUND IN SOURCE
msgid "Watcher loaded"
msgstr "Observador cargado"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Observadores"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "Pudimos encontrar su base de datos y conectarnos como el adminstrador de la base de datos. Usted puede seguir en personalizar RT por presionar 'Personalizar lo Basico' abajo."
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Puerto Web"
+
#: NOT FOUND IN SOURCE
msgid "WebEncoding"
msgstr "Codificación de Web"
-#: lib/RT/Date.pm:419
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Mie"
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Mie."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Miercoles"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "Resumen semanal"
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Bienvenido a RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
+msgstr "Qué hice hoy"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Qué es RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
msgstr ""
-#: etc/initialdata:521
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
-msgstr "Cuando un ticket ha sido aprobado por todos los aprobadores, añadir correspondencia al ticket original"
+msgstr "Cuando un caso ha sido aprobado por todos los aprobadores, añadir correspondencia al caso original"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr "Cuando un ticket ha sido aprobado por cualquier aprobador, añadir correspondencia al ticket original"
+msgstr "Cuando un caso ha sido aprobado por cualquier aprobador, añadir correspondencia al caso original"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
-msgstr "Cuando un ticket se crea"
+msgstr "Al crear un caso"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
-msgstr "Cuando una aprobación de ticket se crea, notifica al propietario y AdminCC del item que espera su aprobación"
+msgstr "Cuando una aprobación del pedido se crea, notifique al propietario y Administrador que recibe copia del item que espera su aprobación"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Cuando pasa cualquier cosa"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "Cuando un ticket está cerrado"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Cuando un ticket es vuelto a abrir"
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
-msgstr "Siempre que un ticket este sin resolver"
+msgstr "Al resolver un caso"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
-msgstr "Siempre que el propietario de un ticket cambie"
+msgstr "Siempre que el propietario de un pedido cambie"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Siempre que la prioridad de un ticket cambie"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
-msgstr "Siempre que la cola de un ticket cambie"
+msgstr "Al cambiar la cola de un caso"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
-msgstr "Siempre que el estado de un ticket cambie"
+msgstr "Al cambiar el estado de un caso"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Siempre que ocurra una condición definida por el usuario"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Siempre que venga algún comentario"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
-msgstr "Siempre que venga correspondencia"
+msgstr "Al recibir correspondencia"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
-msgid "Work"
-msgstr "Trabajo"
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "Donde encontrar el programa sendmail"
-#: html/Search/Results.html:82
-msgid "Work offline"
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "Trabajo"
+
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "Tel Trabajo"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Trabajado"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Sí"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Usted ya es propietario de este caso"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Usted no es un usuario autorizado"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Usted solo puede reasignar casos que posee o que no posee nadie³"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
+msgstr "Sólo puede tomar tickets que no tienen propietario."
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
msgstr ""
#: NOT FOUND IN SOURCE
msgid "You don't have permission to view that ticket.\\n"
-msgstr "No tiene permiso para ver ese ticket.\\n"
+msgstr "No tiene permiso para ver ese caso.\\n"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "Usted encontró %1 casos en la cola %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Se ha desconectado del sistema RT"
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
-msgstr "No tiene permiso para crear tickets en esa cola."
+msgstr "No tiene permiso para crear casos en esa cola."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "No puede crear solicitudes en esa cola."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Debe ingresar una contraseña administrativa"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr "Será redirigido a la página de ingreso. Podrá loguearse con el usuario de <tt>root</tt> y la contraseña establecida previamente."
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Es bienvenido a regresar en cualquier momento."
@@ -6187,11 +8669,11 @@ msgstr "Sus solicitudes %1"
msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
msgstr "Su administrador del RT ha desconfigurado el alias de correo que invoca el RT"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Su petición ha sido aprobada por %1. Otras aprobaciones pueden estar pendientes todavia"
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Su petición ha sido aprobada."
@@ -6199,15 +8681,15 @@ msgstr "Su petición ha sido aprobada."
msgid "Your request was rejected"
msgstr "Su petición ha sido rechazada"
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Su petición ha sido rechazada"
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Nombre o contraseña de usuario incorrectos"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Código Postal"
@@ -6215,28 +8697,60 @@ msgstr "Código Postal"
msgid "[no subject]"
msgstr "[sin asunto]"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[ninguno/a]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Después"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "permitir la creación de búsquedas guardadas"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "permitir la carga de búsquedas guardadas"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "como priviligiado para %1"
-#: html/Search/Results.html:83
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "barra"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Antes"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "de abajo a arriba"
+
+#: NOT FOUND IN SOURCE
msgid "chart"
msgstr "tabla"
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "cerrado"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "contiene"
@@ -6248,6 +8762,10 @@ msgstr "contenido"
msgid "content-type"
msgstr "content-type"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "correspondence (probably) not sent"
msgstr "Respuesta (probablemente) no enviada"
@@ -6256,7 +8774,22 @@ msgstr "Respuesta (probablemente) no enviada"
msgid "correspondence sent"
msgstr "Correspondencia enviada"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "diariamente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "diaramente a las %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "días"
@@ -6272,42 +8805,62 @@ msgstr "borrar"
msgid "deleted"
msgstr "borrado"
-#: html/Search/Elements/PickBasics:61
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "no coincide"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "no contiene"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "no concuerdan"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "descargar"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "igual a"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "error: no se puede mover abajo"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "error: no se puede mover a la izquierda"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "error: no se puede mover arriba"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "error: nada a borrar"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "error: nada a mover"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr ""
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "cada"
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "false"
msgstr "falso"
@@ -6316,49 +8869,80 @@ msgstr "falso"
msgid "filename"
msgstr "nombre de archivo"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "completo"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "mayor que"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "grupo '%1'"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+#: NOT FOUND IN SOURCE
msgid "grouped by %1"
msgstr "agrupado por %1"
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "horas"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "id"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "es"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "no es"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "clave deshabilitada"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "la clave caducó"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "clave revocada"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "de izquierda a derecha"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "menor que"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "marginal"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "contiene"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "profundidad máxima"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minutos"
@@ -6366,44 +8950,93 @@ msgstr "minutos"
msgid "modifications\\n\\n"
msgstr "modificaciones\\n\\n"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "mensualmente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "mensualmente (día %1) a las %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "meses"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "nunca"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "nuevo"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "no"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "sin nombre"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "sin valor"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "ninguno"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "no igual a"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "nada"
+
#: NOT FOUND IN SOURCE
msgid "notlike"
msgstr "notlike"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "en"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "abierto"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "abrir/cerrar"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "otro/a..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "grupo personal '%1' para usuario '%2'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "Cola %1 %2"
@@ -6416,55 +9049,82 @@ msgstr "rechazado"
msgid "resolved"
msgstr "resuelto"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "de derecha a izquierda"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sec"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "mostrar etiqueta de Configuración"
-#: html/Search/Results.html:80
-msgid "spreadsheet"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
msgstr ""
#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "pendiente"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
+#: NOT FOUND IN SOURCE
msgid "style: %1"
msgstr "estilo: %1"
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
-msgstr ""
+msgstr "columnas resumen"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "sistema %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "grupo del sistema '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "el componente que llama no especifica por qué"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
-msgstr "ticket #%1 %2"
+msgstr "caso #%1 %2"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "de arriba a abajo"
#: NOT FOUND IN SOURCE
msgid "true"
msgstr "verdadero"
-#: lib/RT/Group_Overlay.pm:236
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "último"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "grupo sin descripción %1"
@@ -6473,20 +9133,45 @@ msgstr "grupo sin descripción %1"
msgid "undescripbed group %1"
msgstr "grupo sin descripción %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "usuario %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "verboso"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "semanalmente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "semanalmente (el %1) a las %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "semanas"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "con encabezados"
+
#: NOT FOUND IN SOURCE
msgid "with template %1"
msgstr "con plantilla %1"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "años"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "sí"
+
diff --git a/rt/lib/RT/I18N/fi.po b/rt/lib/RT/I18N/fi.po
index a12dd4a..46de828 100644
--- a/rt/lib/RT/I18N/fi.po
+++ b/rt/lib/RT/I18N/fi.po
@@ -2,169 +2,210 @@
# First Author: Janne Pirkkanen <jp@oppipoika.net>, Jul 2002
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: 2002-07-08 17:41+0200\n"
-"PO-Revision-Date: 2005-10-03 13:45-0400\n"
-"Last-Translator: Tuukka Vainio <tuukka.vainio@utu.fi>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-12 21:40+0000\n"
+"Last-Translator: Juzna <juho.ylikorpi@nodnet.fi>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (ei julkista avainta)"
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (ei luotettu)"
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
-msgstr ""
-
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
+msgstr "Tiketti #%1: %2"
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
-msgstr ""
+msgstr "%1 #%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
msgstr ""
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %3.%2 %7 %4:%5:%6"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 lisätty"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "%1 %2 sitten"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1: %2 muutettu arvoon %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 poistettu"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 postettu."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 uudelleenimetty muotoon %3"
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 tallennettu."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
-msgstr "%1 %2 pohjalla %3"
+msgstr "%1 %2 mallia %3"
#: NOT FOUND IN SOURCE
msgid "%1 (%2) %3 this ticket\\n"
msgstr "%1 (%2) %3 tässä tapauksessa\\n"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
-msgstr ""
+msgstr "%1 (%2) lähettäjä %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
+msgstr "%1 (Ei muutoksia)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "%1 - %2 shown"
msgstr "näkyvillä %1 - %2"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
-msgid "%1 - An argument to pass to %2"
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
msgstr ""
-#: bin/rt-crontool:262
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr "%1 - Argumentti %2"
+
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
-msgstr ""
+msgstr "%1 - Tulosta tilan muutokset STDOUT:iin"
-#: bin/rt-crontool:253
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
-msgstr ""
+msgstr "%1 - Määrittele haluamasi mallin id-numero"
-#: bin/rt-crontool:256
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 Määrittele haluatko käyttää 'first','last' vai 'all' tapahtumia"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
-msgstr ""
+msgstr "%1 - Määrittele toimintomoduli jota haluat käyttää"
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Määrittele lista toimintojen tyypeistä joita haluat käyttää (pilkulla erotettuna)"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
-msgstr ""
+msgstr "%1 - Määrittele ehto-moduli jota haluat käyttää"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
-msgstr ""
+msgstr "%1 Määrittele hakumoduli jota haluat käyttää"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr ""
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "%1 Työtilat"
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
-msgstr "ScriptAction %1 ladattu"
+msgstr "Automaattitoiminto %1 ladattu"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
-msgstr "%1 lisätty arvoksi %2lle"
+msgstr "%1 lisätty %2 arvoksi"
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on"
@@ -178,57 +219,100 @@ msgstr "%1 aliakset vaativat tapauksen id:n "
msgid "%1 aliases require a TicketId to work on (from %2) %3"
msgstr "%1 aliakset vaativat tapauksen id:n (osoite %2) %3"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 on jo olemassa ja sisältää RT:n taulut mutta tauluissa ei ole RT:n metatiedot. 'Alusta tietokanta' askel voi lisätä metatiedot olemassa olevaan tietokantaan. Jos hyväksytte tämän klikatkaa 'Muokkaa perustietoja' valintaa alapuolella jatkaaksenne RT:n kustomointia."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 on jo olemassa mutta ei sisällä RT:n tauluja tai metatietoja. 'Alusta tietokanta' askel voi lisätä taulut ja metatiedot tietokantaan. Jos hyväksytte tämän klikatkaa 'Muokkaa perustietoja'-valintaa alapuolella jatkaaksenne RT:n kustomointia."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
-msgstr ""
+msgstr "%1 on paikallinen objekti mutta sitä ei löydy tietokannasta"
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 on alustettu. Tauluja ei tarvitse luoda uudestaan eikä metatietoja tarvitse lisätä, voit jatkaa RT:n kustomointia klikkaamalla 'Muokkaa perustietoja'-valintaa alapuolella"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 - %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 muutettu arvosta %2 arvoon %3"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "% kaavio %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
+msgstr "%1 kopio"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
msgstr ""
-#: lib/RT/Record.pm:944
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
-msgstr "Arvoa %1 ei voitu asettaa arvoksi %2"
+msgstr "%1 arvoa ei voitu asettaa arvoksi %2."
#: NOT FOUND IN SOURCE
msgid "%1 couldn't init a transaction (%2)\\n"
msgstr "%1 ei voinut suorittaa tapahtumaa (%2)\\n"
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 ei voinut asettaa tilaa päätetyksi. RT:n tietokanta saattaa olla vioittunut."
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
-msgstr ""
+msgstr "%1 luotu"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
+msgstr "%1 poistettu"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
msgstr ""
-#: etc/initialdata:593
-msgid "%1 highest priority tickets I own"
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 ei ole olemassa."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
msgstr ""
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "%1 tärkeintä minun tikettiä"
+
#: NOT FOUND IN SOURCE
msgid "%1 highest priority tickets I own..."
msgstr "%1 tärkeintä omistamaani tapausta..."
@@ -237,21 +321,28 @@ msgstr "%1 tärkeintä omistamaani tapausta..."
msgid "%1 highest priority tickets I requested..."
msgstr "%1 tärkeintä tilaamaani tapausta..."
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr ""
+msgstr "%1 on työkalu joka reagoi tiketteihin ulkoisista ajastusohjelmista kuten cron-palvelusta."
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 on apuohjelma joka on tarkoitettu ajettavaksi cron-palvelusta, joka lähettää kaikki lykätyt RT:n ilmoitukset lyhennelminä."
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
-msgstr "%1 ei ole enää %2 tälle työjonolle"
+msgstr "%1 ei ole enää %2 tälle jonolle."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1 ei ole enää %2 tälle tapaukselle"
+msgstr "%1 ei ole enää %2 tälle tiketille."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 ei ole enää kentän %2 arvo"
@@ -259,91 +350,113 @@ msgstr "%1 ei ole enää kentän %2 arvo"
msgid "%1 isn't a valid Queue id."
msgstr "%1 ei ole kelvollinen työjonon id"
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
-msgstr "%1 min"
+msgstr "%1 minuuttia"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
-msgstr ""
+msgstr "%1 uusinta osoittamatonta tikettiä"
#: NOT FOUND IN SOURCE
msgid "%1 not shown"
msgstr "%1 ei näy"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
-msgstr ""
+msgstr "%1 objektia"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "%1 succeeded\\n"
msgstr "%1 onnistui\\n"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 tyyppi tuntematon viestille $MessageId"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 päivitys: %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 tyyppi tuntematon viestille %2"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 päivitys: Ei muutoksia"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 päivitetty"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
-msgstr "%1 päättää kaikki päätetyn ryhmän jäsentapaukset."
+msgstr "%1 ratkaisee kaikki tikettiryhmän tapaukset."
#: NOT FOUND IN SOURCE
msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
msgstr "%1 jäädyttää [paikallisen] BASE jos se riippuu linkitetystä tapauksesta [tai on sen jäsen]."
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
-msgstr ""
+msgstr "%1:n %2 objektia"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
-msgstr ""
+msgstr "%1:n %2:n %3 objektia"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1:n työtilat"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
-msgstr ""
+msgstr "%1:n tallennettua hakua"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: liitetiedostoa ei ole määritelty"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
-msgstr ""
+msgstr "%1t"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
-msgstr ""
+msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
-msgstr ""
+msgstr "%quant(%1,hour)"
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' ei kelpaa tilan arvoksi"
#: NOT FOUND IN SOURCE
msgid "'%1' not a recognized action. "
-msgstr "'%1' ei ole tunnettu tapahtuma."
+msgstr "'%1' ei ole tunnettu tapahtuma. "
#: NOT FOUND IN SOURCE
msgid "(Check box to delete group member)"
@@ -353,55 +466,55 @@ msgstr "(Rastita laatikko poistaaksesi ryhmän jäsenen)"
msgid "(Check box to delete scrip)"
msgstr "(Rastita laatikko poistaaksesi toiminnon)"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
-msgstr "(Rastita laatikko poistaaksesi)"
+msgstr "(Valitse poistettavat)"
#: NOT FOUND IN SOURCE
msgid "(Check boxes to delete)"
msgstr "(Rastita laatikko poistaaksesi)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr ""
+msgstr "(Valitse vastaanottajat joille ei lähetetä ilmoituksia)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr ""
+msgstr "(Valitse vastaanottajat joille lähetetään ilmoituksia)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
-msgstr "(Syötä tapausten numerot tai www-osoitteet, välilyönneillä erotettuina)"
+msgstr "(Kirjoita tikettin id-numerot tai www-osoitteet, välilyönneillä erotettuna)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
-msgstr "(Jos jätetään tyhjäksi, palaa arvoon %1)"
+msgstr "(Jos tyhjä, muutetaan arvoon %1)"
#: NOT FOUND IN SOURCE
msgid "(No Value)"
msgstr "(Ei arvoa)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Ei kenttiä)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Ei jäseniä)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
-msgstr "(Ei toimintoja)"
+msgstr "(Ei komentosarjoja)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
-msgstr "(Ei pohjia)"
+msgstr "(Ei malleja)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
-msgstr ""
+msgstr "(Ei mitään)"
#: NOT FOUND IN SOURCE
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
@@ -411,17 +524,13 @@ msgstr "(Lähettää piilokopion vain tästä päivityksestä pilkulla erotettui
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Lähettää piilokopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei lisää</b> pysyviksi vastaanottajiksi.)"
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Lähettää kopion tästä päivityksestä pilkulla erotettuihin hallinnollisiin sähköpostiosoitteisiin. <b>Lisää</b> pysyviksi vastaanottajiksi.)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr ""
+msgstr "(Lähetä vedos tästä muutoksesta pääkäyttäjien sähköpostiosoitteisiin. Osoitteet tulee olla pilkulla erotettuna. Nämä henkilöt vastaanottavat tulevasuudessa tapahtuvat päivityskset.)"
#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
@@ -431,82 +540,96 @@ msgstr "(Lähettää kopion vain tästä päivityksestä pilkulla erotettuihin s
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Lähettää kopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei lisää</b> pysyviksi vastaanottajiksi.)"
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Lähettää kopion tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Lisää</b> pysyviksi vastaanottajiksi.)"
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr ""
+msgstr "(Lähetä vedot tästä muutoksesta pääkäyttäjien sähköpostiosoitteisiin. Osoitteet tulee olla pilkulla erotettuna. Nämä henkilöt vastaanottavat tulevasuudessa tapahtuvat päivityskset.)"
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
-msgstr ""
+msgstr "(Käytä näitä kenttiä kun valitsette 'Käyttäjän määrittelemä' ehdoksi tai toiminnoksi)"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
-msgstr ""
+msgstr "(Ei lähetetä sähköpostia)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(mikä tahansa)"
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(tyhjä)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(ei nimiä listattuna)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(ei julkista avainta!)"
+
#: NOT FOUND IN SOURCE
msgid "(no subject)"
msgstr "(ei otsikkoa)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(ei arvoa)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
-msgstr ""
+msgstr "(ei arvoja)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
-msgstr "(vain yksi tapaus)"
+msgstr "(vain yksi tiketti)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(%quant(%1,muuta tikettiä) odottaa)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(odottaa hyväksyntää)"
-#: html/Elements/RT__Ticket/ColumnMap:152
-msgid "(pending other Collection)"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "(pending other tickets)"
msgstr "(odottaa toisia tapauksia)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(pakollinen)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(luota: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(nimetön)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(epäluotettu!)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
-msgstr ""
+msgstr "-"
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "--tapahtuman argumentti voi olla vain 'first', 'last' tai 'all'"
+
#: NOT FOUND IN SOURCE
msgid "25 highest priority tickets I own..."
msgstr "25 tärkeintä omistamaani tapausta..."
@@ -515,116 +638,108 @@ msgstr "25 tärkeintä omistamaani tapausta..."
msgid "25 highest priority tickets I requested..."
msgstr "25 tärkeintä tilaamaani tapausta..."
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr ""
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
-msgstr ""
-
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr ""
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr ""
+msgstr "<input type=\"submit\" class=\"button\" value=\"Uusi tiketti\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"Uusi tapaus\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"Uusi tiketti\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Kaikki iCal syötteet sisältävät salaisen tunnisteen. Jos jonkin iCal syötteen osoite paljastuu kolmansille osapuolille voit hankkia uuden tunnisteen.</p>"
+
+#: etc/initialdata:193
msgid "A blank template"
-msgstr "Tyhjä pohja"
+msgstr "Tyhjä malli"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
-msgstr ""
+msgstr "Koska salasanaa ei asetettu, käyttäjä ei pysty kirjautumaan järjestelmään."
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE ei löytynyt"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE:ja voi vain luoda ja poistaa."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
-msgstr ""
+msgstr "JA"
#: NOT FOUND IN SOURCE
msgid "Aborting to avoid unintended ticket modifications.\\n"
msgstr "Peruutetaan tarkoittamattomien tapausmuutosten välttämiseksi.\\n"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Omat asetukset"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Pääsynvalvonta"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Tapahtuma"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Tapahtumaa %1 ei löydetty"
-#: bin/rt-crontool:171
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Toiminto '%1' ei löydy"
+
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
-msgstr ""
+msgstr "Toiminto kommentoitu.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
-msgstr ""
+msgstr "Toiminto on välttämätön argumentti"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
-msgstr ""
-
-#: html/Search/Build.html:85
-msgid "Add"
-msgstr ""
+msgstr "Toiminto valmisteltu..."
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Lisää kopio ylläpidolle"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Lisää suosikkeihin"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Lisää kopio"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
-msgstr ""
+msgstr "Lisää rivejä"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
-msgstr ""
+msgstr "Lisää ehto"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
-msgstr "Lisää useampi tiedosto"
+msgstr "Liitä"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Lisää tilaaja"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
-msgstr ""
+msgstr "Lisää arvo"
#: NOT FOUND IN SOURCE
msgid "Add a new a global scrip"
@@ -634,77 +749,81 @@ msgstr "Lisää uusi yleinen toiminto"
msgid "Add a scrip to this queue"
msgstr "Lisää toiminto tähän työjonoon"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
-msgstr "Lisää kaikille työjonoille yhteinen toiminto"
+msgstr "Lisää kaikille jonoille yhteinen toiminto"
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr ""
-
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
-msgstr "Lisää kommentteja tai vastauksia valituille tapauksille"
+msgstr "Lisää kommentteja tai vastauksia valituille tiketeille"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Lisää jäseniä"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
-msgstr "Lisää uusia tarkkailijoita"
+msgstr "Lisää uusia valvojia"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
-msgstr ""
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Lisää nämä ehdot"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Lisää nämä ehdot ja hae"
+
+#: share/html/Search/Bulk.html:181
msgid "Add values"
-msgstr ""
+msgstr "Lisää arvoja"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
-msgstr ""
+msgstr "Lisää, poista tai muokkaa erikoiskentän arvoja objektille"
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
-msgstr "Lisätty toimeksiantaja %1:ksi tähän työjonoon"
+msgstr "Lisätty toimeksiantaja %1:ksi tähän jonoon"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
-msgstr "Lisätty toimeksiantaja %1:ksi tälle tapaukselle"
+msgstr "Lisätty ehto %1 tälle tiketille"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Osoite"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Osoite1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Osoite2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Kopio ylläpidolle"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
-msgstr ""
+msgstr "Ylläpidon kommentti"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
-msgstr ""
+msgstr "Ylläpidon vastaus"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
-msgstr "Työjonojen ylläpito"
+msgstr "Jonojen ylläpito"
#: NOT FOUND IN SOURCE
msgid "Admin users"
msgstr "Käyttäjien ylläpito"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Ylläpito/Yleiset asetukset"
@@ -716,128 +835,152 @@ msgstr "Ylläpito/Ryhmät"
msgid "Admin/Queue/Basics"
msgstr "Ylläpito/Työjono/Perustiedot"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "AdminCCGroup"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "Kopio ylläpidolle"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCcs"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
-msgstr ""
+msgstr "AdminCustomField"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
-msgstr ""
+msgstr "AdminGroup"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
-msgstr ""
+msgstr "AdminGroupMembership"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
-msgstr ""
+msgstr "AdminOwnPersonalGroups"
#: lib/RT/Queue_Overlay.pm:92
msgid "AdminQueue"
-msgstr ""
+msgstr "AdminQueue"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
-msgstr ""
+msgstr "AdminUsers"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Kopio ylläpidolle"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Hallintasalasana"
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
-msgstr ""
+msgstr "Lisäasetukset"
#: NOT FOUND IN SOURCE
msgid "Advanced Search"
msgstr "Tarkennettu haku"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Jälkeen"
-
#: NOT FOUND IN SOURCE
msgid "Age"
msgstr "Ikä"
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
-msgstr ""
+msgstr "Yhdistäjä"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
-msgstr ""
+msgstr "Kaikki hyväksynnät saatu"
#: NOT FOUND IN SOURCE
msgid "All Custom Fields"
msgstr "Kaikki kentät"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
-msgstr "Kaikki työjonot"
+msgstr "Kaikki jonot"
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Salattu"
-#: html/Search/Elements/EditQuery:56
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
-msgstr ""
+msgstr "Ja/Tai"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
-msgstr ""
+msgstr "Pätee"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
-msgstr ""
+msgstr "Käytä"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
-msgstr ""
+msgstr "Käytä"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Hyväksyntä"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
-msgstr ""
+msgstr "Hyväksyntä #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr ""
+msgstr "Hyväksyntä #%1: Merkintöjä ei tallennettu järjestelmävirheen takia"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
-msgstr ""
+msgstr "Hyväksyntä #%1: Merkinnät tallennettu"
#: NOT FOUND IN SOURCE
msgid "Approval Details"
msgstr "Hyväksynnän lisätiedot"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
-msgstr ""
+msgstr "Hyväksytty"
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Hyväksyntä valmiina yhteyshenkilölle"
-#: etc/initialdata:374
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
-msgstr ""
+msgstr "Hylätty"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Hyväksy"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Hyväksyjän merkintöjä: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "huhti"
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "huhti"
@@ -845,56 +988,68 @@ msgstr "huhti"
msgid "April"
msgstr "huhtikuu"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
-msgstr ""
+msgstr "Asc"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Nouseva"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
-msgstr ""
+msgstr "Määritä ja poista erikoiskentät"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
-msgstr ""
+msgstr "AssignCustomFields"
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
-msgstr "Liitä"
+msgstr "Liitetiedosto"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
-msgstr "Liitä tiedosto"
+msgstr "Lisää tiedosto"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
-msgstr "Liitä tiedosto"
+msgstr "Liitetiedostot"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Liite"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Liitteen '%1' lataaminen ei onnistunut"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Liitetiedosto luotu"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Liitetiedoston nimi"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Liitetiedostot"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Liitteiden salaus on pois käytöstä"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
-msgstr ""
+msgstr "Määrite poistettu"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "elokuu"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "elo"
@@ -902,17 +1057,25 @@ msgstr "elo"
msgid "August"
msgstr "elokuu"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
-msgstr ""
+msgstr "Automaattivastaus"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Automaattivastaus tilaajille"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
-msgstr ""
+msgstr "Käytettävissä"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "Piilokopio"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Takaisin"
#: NOT FOUND IN SOURCE
msgid "Bad PGP Signature: %1\\n"
@@ -926,206 +1089,287 @@ msgstr "Virheellinen liitteen numero. Liitetiedostoa '%1' ei löytynyt\\n"
msgid "Bad data in %1"
msgstr "Virheellistä dataa kentässä %1"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr "Huono yksitysisyysmäärite %1"
+
#: NOT FOUND IN SOURCE
msgid "Bad transaction number for attachment. %1 should be %2\\n"
msgstr "Virheellinen tapahtuman numero liitetiedostolle. %1 pitäisi olla %2\\n"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Perustiedot"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Piilokopio"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Muista tallentaa muutokset"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "ennen"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
+msgstr "Best Practical Solutions, LLC yrityksen logo"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Tyhjä"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Sisältö"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
-msgstr ""
+msgstr "Lihavoitu"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Suosikki"
#: NOT FOUND IN SOURCE
msgid "Bookmarkable URL for this search"
msgstr "Osoite tähän kyselyyn (selaimen kirjanmerkkeihin)"
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
-msgstr ""
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Suosikit"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
-msgstr "Lyhyet otsikot"
+msgstr "Normaali"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
-msgstr ""
+msgstr "Tikettien päivitys"
#: NOT FOUND IN SOURCE
msgid "Bulk ticket update"
msgstr "Tapausten ryhmäpäivitys"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Osta tuki"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Tikettijärjestelmä käyttää oletuksena järjestelmäsi aikavyöhykettä. Tämä mahdollistaa järjestelmänlaajuisen oletuksen päivämäärien ja ajan näyttämiselle. Käyttäjät voivat vaihtaa aikavyöhykettä omista asetuksistaan."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "Kopio-ryhmä"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr "CF"
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Järjestelmäkäyttäjien muokkaus ei ole sallittua"
#: lib/RT/Queue_Overlay.pm:91
msgid "Can this principal see this queue"
-msgstr "Näkeekö toimeksiantaja tämän työjonon"
+msgstr "Näkeekö toimeksiantaja tämän jonon"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Kentän lisääminen ilman nimeä ei onnistu"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
-msgstr ""
+msgstr "Kokoelmaa luokalle '%1' ei löydy"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
-msgstr ""
+msgstr "Tallennettuja hakuja ei löydy"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
-msgstr "Tapausta ei voi linkittää itseensä"
+msgstr "Tiketti ei voi viitata itseensä"
#: NOT FOUND IN SOURCE
msgid "Can't merge into a merged ticket. You should never get this error"
msgstr "Et voi yhdistää jo yhdistettyyn tapaukseen. Sinun ei pitäisi saada tätä virhettä koskaan."
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
-msgstr ""
+msgstr "Ei voida tallentaa %1"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
-msgstr ""
+msgstr "Ei voida tallentaa tätä hakua"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Sekä juuren ja kohteen määritteleminen samalla ei ole mahdollista"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Ei voitu luoda tikettejä passiiviseen ryhmään."
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Käyttäjää ei voitu luoda: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
-msgid "Category"
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
msgstr ""
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr "Luokka"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Luokittelu poistettu"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Kopio"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Kopio"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Muuta"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
-msgstr "Muuta salasana"
+msgstr "Vaihda salasanaa"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
+msgstr "Valitse kaikki"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Tarkista tietokantayhteys"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
msgstr ""
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Valitse laatikko poistaaksesi"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Valitse laatikko peruaksesi oikeuden"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Tarkista tietokannan oikeudet"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
-msgstr "Lapset"
+msgstr "Johdannaiset"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
msgstr ""
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Valitse tietokantamoottori"
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Kaupunki"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Tyhjennä"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
-msgstr ""
+msgstr "Tyhjennä kaikki"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Valitse \"Valmistele asennus\" alapuolelta lopettaaksesi automaattisen toiminnon."
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Valitse \"Alusta tietokanta\" luodaksesi tikettijärjestelmän tietokanta ja lisätäksesi metatiedot. Tämä voi kestää hetken"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
-msgstr ""
+msgstr "Sulje ikkuna"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
-msgstr "Suljettu"
+msgstr "Valmistunut"
#: NOT FOUND IN SOURCE
msgid "Closed requests"
msgstr "Suljetut tapaukset"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
-msgstr ""
+msgstr "Suljetut tiketit"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
-msgstr ""
+msgstr "Monivalinta: Valitse tai lisää vaihtoehtoja"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
-msgstr ""
+msgstr "Monivalinta: Valitse tai lisää yksi arvo"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
-msgstr ""
+msgstr "Monivalinta: Valitse tai lisää %1 arvo"
#: NOT FOUND IN SOURCE
msgid "Command not understood!\\n"
msgstr "Komentoa ei ymmärretty!\\n"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Kommentoi"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Kommenttien osoite"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Kommenttiosoite"
+
#: NOT FOUND IN SOURCE
msgid "Comment not recorded"
msgstr "Kommenttia ei tallennettu"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
-msgstr "Kommentoi tapauksia"
+msgstr "Kommentoi tikettejä"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "CommentAddress"
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
-msgstr ""
+msgstr "CommentOnTicket"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Kommentit"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Kommentti (ei lähetetä tilaajille)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Kommentti (ei lähetetä tilaajille)"
@@ -1133,15 +1377,15 @@ msgstr "Kommentti (ei lähetetä tilaajille)"
msgid "Comments about %1"
msgstr "Kommentit kohteesta %1"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Kommentit tästä käyttäjästä"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
-msgstr "Kommentit lisätty"
+msgstr "Kommentti lisätty"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Suorita tumppi"
@@ -1149,30 +1393,48 @@ msgstr "Suorita tumppi"
msgid "Compile Restrictions"
msgstr "Kokoa rajoitukset"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Ehto"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Ehtoa '%1' ei löydy"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
-msgstr ""
+msgstr "Tila on pakollinen määrite"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
-msgstr ""
+msgstr "Ehto täsmää..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Ehtoa ei löydetty"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Ehto, Toiminto ja Malli"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Asetustiedosto %1 on lukittu"
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Ylläpito"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Vahvista"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Yhteys muodostettu"
+
#: NOT FOUND IN SOURCE
msgid "ContactInfoSystem"
msgstr "Yhteystietojärjestelmä"
@@ -1181,27 +1443,35 @@ msgstr "Yhteystietojärjestelmä"
msgid "Contacted date '%1' could not be parsed"
msgstr "Järjestelmä ei ymmärrä päivää '%1'"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Sisältö"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
-msgstr ""
+msgstr "Sisällön tyyppi"
-#: html/Search/Elements/EditSearches:65
-msgid "Copy"
-msgstr ""
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "ContentType"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "Tilaajan osoite"
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr "CorrespondAddress"
+
+#: etc/initialdata:261
msgid "Correspondence"
-msgstr ""
+msgstr "Vastaus"
#: NOT FOUND IN SOURCE
msgid "Correspondence Address"
msgstr "Kirjeenvaihdon osoite"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Kirjeenvaihto lisätty"
@@ -1211,49 +1481,57 @@ msgstr "Vastausta ei tallennettu"
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. "
-msgstr "Uuden tiedon lisääminen kenttään epäonnistui"
+msgstr "Uuden tiedon lisääminen kenttään epäonnistui "
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. %1 "
msgstr "Uuden kentän lisäys tapaukselle epäonnistui. %1 "
-#: lib/RT/Record.pm:1707
-msgid "Could not add new custom field value. "
-msgstr ""
-
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
-msgid "Could not add new custom field value. %1 "
-msgstr ""
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "Ei voitu lisätä uutta erikoiskentän arvoa: %1"
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
-msgstr "Omistajaa ei voitu vaihtaa."
+msgstr "Omistajaa ei voitu vaihtaa. "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Ei voida vaihtaa yhteyshenkilöä: %1"
-#: html/Admin/CustomFields/Modify.html:161
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Uuden kentän lisääminen epäonnistui"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
-msgstr ""
+msgstr "Ei voitu luoda erikoiskenttää: %1"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Ryhmän luominen epäonnistui"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
-msgstr "Pohjan luonti epäonnistui: %1"
+msgstr "Mallin luonti epäonnistui: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Ei voitu luoda tikettiä passiiviseen jonoon \"%1\""
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
-msgstr "Tapauksen luonti epäonnistui. Työjonoa ei ole asetettu"
+msgstr "Tiketin luonti epäonnistui. Jonoa ei ole asetettu"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Käyttäjän luonti epäonnistui"
@@ -1265,11 +1543,11 @@ msgstr "Tapausta numerolla %1 ei löytynyt."
msgid "Could not find group %1."
msgstr "Ryhmää %1 ei löytynyt."
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Käyttäjää ei löydetty eikä pystytty luomaan"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Tätä toimeksiantajaa ei löytynyt"
@@ -1277,59 +1555,71 @@ msgstr "Tätä toimeksiantajaa ei löytynyt"
msgid "Could not find user %1."
msgstr "Käyttäjää %1 ei löytynyt."
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Ei voitu ladata %1 määritettä"
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
-msgstr ""
+msgstr "Ei voitu ladata erikoiskenttää %1"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Ryhmän lataaminen ei onnistunut"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:197
-msgid "Could not load search attribute"
-msgstr ""
+msgstr "Ei voitu ladata objektia %1"
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
-msgstr "Ei voinut tehdä toimeksiantajaa %1:ksi tälle työjonolle"
+msgstr "Ei voinut tehdä toimeksiantajaa %1:ksi tälle jonolle"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
-msgstr "Ei voinut tehdä toimeksiantajaa tälle tapaukselle: %1"
+msgstr "Ei voitu lisätä ehtoa %1 tälle tiketille"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
-msgstr "Toimeksiantajaa ei voitu poistaa tältä työjonolta: %1"
+msgstr "Toimeksiantajaa ei voitu poistaa tältä jonolta: %1"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
-msgstr "Toimeksiantajaa ei voitu poistaa tältä tapaukselta: %1"
+msgstr "Ehtoa ei voitu poistaa tästä tiketistä: %1"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
-msgstr ""
+msgstr "Ei voitu asettaa käyttäjätietoa"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
-msgstr ""
+msgstr "Ei voitu lisätä liitetiedostoa"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Jäsenen lisääminen ryhmään ei onnistunut"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Tapahtuman luominen ei onnistunut: %1"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Ei voitu luoda merkintää"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Ei voitu poistaa työtilaa %1: %2"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't figure out what to do from gpg's reply\\n"
msgstr "Järjestelmä ei gpg:n vastauksesta ymmärtänyt mitä tehdä\\n"
@@ -1338,15 +1628,19 @@ msgstr "Järjestelmä ei gpg:n vastauksesta ymmärtänyt mitä tehdä\\n"
msgid "Couldn't find group\\n"
msgstr "Ryhmää ei löytynyt\\n"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Riviä ei löytynyt"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Sopivaa tapahtumaa ei löydy, hypätään yli"
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Toimeksiantajaa ei löytynyt"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Arvoa ei löytynyt"
@@ -1358,20 +1652,25 @@ msgstr "Tarkkailijaa ei löytynyt"
msgid "Couldn't find user\\n"
msgstr "Käyttäjää ei löytynyt\\n"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Ei onnistuttu lataamaan käyttäjää %1 tietokannasta.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
-msgstr ""
+msgstr "Ei voitu ladata luokkaa %1"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Ei voitu ladata erikoiskenttää #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
-msgstr ""
+msgstr "Ei voitu ladata erikoiskenttää #%1"
#: NOT FOUND IN SOURCE
msgid "Couldn't load RT config file '%1' %2"
@@ -1381,82 +1680,184 @@ msgstr "RT-asetustiedoston lataaminen ei onnistunut:'%1' %2"
msgid "Couldn't load Scrips."
msgstr "Toimintojen lataaminen ei onnistunut."
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
-msgstr ""
+msgstr "Ei voitu ladata tiketin #%1 kopiota"
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Ei voitu ladata työtilaa %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Ei voitu ladata työtilaa %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Ei voitu ladata ryhmää #%1"
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Ryhmän %1 lataaminen ei onnistunut"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Linkin lataaminen ei onnistunut"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
-msgstr ""
+msgstr "Ei voitu ladata objektia %1"
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Ei voitu ladata tai luoda käyttäjää: %1"
-#: html/Admin/Queues/People.html:142
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
-msgstr "Työjonon lataaminen ei onnistunut"
+msgstr "Jonon lataaminen ei onnistunut"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Ei voitu ladata jonoa #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
-msgstr "Työjonon %1 lataaminen ei onnistunut"
+msgstr "Jonon %1 lataaminen ei onnistunut"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Ei voitu ladata jonoa '%1'"
#: NOT FOUND IN SOURCE
msgid "Couldn't load scrip"
msgstr "Toiminnon lataaminen ei onnistunut"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
-msgstr ""
+msgstr "Ei voitu ladata automaattitoimintoa #%1"
#: NOT FOUND IN SOURCE
msgid "Couldn't load template"
msgstr "Pohjan lataaminen ei onnistunut"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Ei voitu ladata mallia #%1"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load that user (%1)"
msgstr "Tämän käyttäjän lataaminen ei onnistunut (%1)"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
-msgstr "Tapauksen '%1' lataaminen ei onnistunut"
+msgstr "Tiketin '%1' lataaminen ei onnistunut"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "Ei voitu ladata toimintoa #%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Ei voitu ladata käyttäjää #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Ei voitu muodostaa osoitetta merkkijonosta '%1'"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Ei voitu korvata sisältöä salaamattomalla tiedolla: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Ei voitu korvata sisältöä salatulla tiedolla: %1"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
-msgstr ""
+msgstr "Ei voitu muodostaa '%1' osoitteeksi."
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr "Ei voitu selvittää '%1' osoitteeksi."
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr "Ei voitu selvittää kohdetta '%1' osoitteeksi."
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Ei voitu lähettää sähköpostia"
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "Ei voitu asettaa %1 valvojaa: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "Ei voitu asettaa henkilökohtaista avainta"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Ei voitu poistaa henkilökohtaista avainta"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Maa"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Luo"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
-msgstr "Luo tapauksia"
+msgstr "Luo tikettejä"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Luo kenttä"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
-msgstr "Luo kenttä työjonolle %1"
+msgstr "Luo kenttä jonolle %1"
#: NOT FOUND IN SOURCE
msgid "Create a CustomField that applies to all queues"
@@ -1466,15 +1867,19 @@ msgstr "Luo kenttä, jota sovelletaan kaikkiin työjonoihin"
msgid "Create a new Custom Field"
msgstr "Luo uusi kenttä"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Luo uusi työtila"
+
#: NOT FOUND IN SOURCE
msgid "Create a new global scrip"
msgstr "Luo uusi yleinen toiminto"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Luo uusi ryhmä"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Luo uusi henkilökohtainen ryhmä"
@@ -1490,17 +1895,17 @@ msgstr "Luo uusi toiminto"
msgid "Create a new template"
msgstr "Luo uusi pohja"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
-msgstr "Luo uusi tapaus"
+msgstr "Luo uusi tiketti"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Luo uusi käyttäjä"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
-msgstr "Luo uusi työjono"
+msgstr "Luo uusi jono"
#: NOT FOUND IN SOURCE
msgid "Create a queue called"
@@ -1510,18 +1915,22 @@ msgstr "Luo työjono nimeltään"
msgid "Create a request"
msgstr "Luo tapaus"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
-msgstr "Luo toiminto työjonolle %1"
+msgstr "Luo toiminto jonolle %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
-msgstr "Luo pohja"
+msgstr "Luo malli"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
-msgstr ""
+msgstr "Luo tiketti"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Luo uusi työtila tälle ryhmälle"
#: NOT FOUND IN SOURCE
msgid "Create failed: %1 / %2 / %3 "
@@ -1531,144 +1940,191 @@ msgstr "Luonti epäonnistui %1 / %2 / %3 "
msgid "Create failed: %1/%2/%3"
msgstr "Luonti epäonnistui: %1/%2/%3"
-#: etc/initialdata:137
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
-msgstr "Luo uusia tapauksia tämän toiminnon pohjalta"
+msgstr "Luo uusia tikettejä tämän automaattitoiminnon perusteella"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Luo henkilökohtaisia työtiloja"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Luo järjestelmän työtiloja"
-#: html/SelfService/Create.html:105
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
-msgstr "Luo tapaus"
+msgstr "Luo tiketti"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
-msgstr "Luo tapauksia tähän työjonoon"
+msgstr "Luo tikettejä tähän jonoon"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Luo tikettejä yhteydettömässä tilassa"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Luo, muokkaa ja poista kenttiä"
#: lib/RT/Queue_Overlay.pm:92
msgid "Create, delete and modify queues"
-msgstr "Luo, poista ja muokkaa työjonoja"
+msgstr "Luo, poista ja muokkaa jonoja"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "Create, delete and modify the members of any user's personal groups"
msgstr "Luo, poista ja muokkaa kenen tahansa henkilökohtaisten ryhmien jäseniä"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Luo, poista ja muokkaa henkilökohtaisten ryhmien jäseniä"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Luo, poista ja muokkaa käyttäjiä"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "Luo työtila"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "Luo ryhmän työtila"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "Luo oma työtila"
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
-msgstr ""
+msgstr "Luo tallennettu haku"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
-msgstr ""
+msgstr "CreateTicket"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Luotu"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Tekijä"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Luotu kenttä %1"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
-msgstr ""
+msgstr "Luotu ajanjaksolla"
#: NOT FOUND IN SOURCE
msgid "Created template %1"
msgstr "Luotu pohja %1"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
-msgstr ""
+msgstr "Luotu tikettejä ajanjaksolla, ryhmitelty tilan mukaan"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "CreatedBy"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr "CreatedRelative"
-#: html/Search/Elements/PickBasics:102
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
-msgstr ""
+msgstr "Luoja"
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Kryptografia"
-#: html/Elements/EditLinks:49
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
-msgstr "Tämänhetkiset suhteet"
+msgstr "Viittaukset"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Tämänhetkinen toiminto"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Tämänhetkiset jäsenet"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Tämänhetkiset oikeudet"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
-msgstr ""
+msgstr "Nykyinen haku"
#: NOT FOUND IN SOURCE
msgid "Current search criteria"
msgstr "Tämänhetkiset hakumääritteet"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
-msgstr "Tämänhetkiset tarkkailijat"
+msgstr "Nykyiset valvojat"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Kentät"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
-msgstr ""
+msgstr "Erikoiskentät %1 varten"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
-msgstr ""
+msgstr "Erikoistoiminto cleanup-koodille"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
-msgstr ""
+msgstr "Erikoistoiminto valmistelukoodille"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
-msgstr ""
+msgstr "Erikoisehto"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Kenttä %1 %2 %3"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "Erikoiskenttä %1 ei vastaa tätä objektia"
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Kentällä %1 on arvo"
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Kentällä %1 ei ole arvoa"
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
-msgstr "Kenttää %1 ei löytynyt"
+msgstr "Erikoistkenttää %1 ei löydy"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
-msgstr ""
+msgstr "Erikoiskenttä '%1'"
#: NOT FOUND IN SOURCE
msgid "Custom field deleted"
@@ -1678,7 +2134,7 @@ msgstr "Kenttä poistettu"
msgid "Custom field not found"
msgstr "Kenttää ei löytynyt"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Kentän arvoa %1 ei löytynyt kentälle %2"
@@ -1687,31 +2143,133 @@ msgstr "Kentän arvoa %1 ei löytynyt kentälle %2"
msgid "Custom field value changed from %1 to %2"
msgstr "Kentän arvo muutettu arvosta %1 arvoon"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Kentän arvoa ei pystytty poistamaan"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Kentän arvoa ei löydetty"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Kentän arvo poistettu"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
-msgstr ""
+msgstr "CustomField"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "CustomFieldValue"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
+msgstr "Mukauta"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Muokkaa perustietoja"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "Muokkaa tietokannan tietoja"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Muokkaa sähköpostiosoitetta"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Muokkaa sähköpostiasetuksia"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "Muokkaa järjestelmän laajuisesti"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global Defaults"
+msgstr "Muokkaa järjestelmän vakioasetuksia"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "DBA salasana"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "DBA käyttäjätunnus"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Päivän luetuimmat"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Työtila"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Työtilaa ei voitu luoda: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Työtilaa ei voitu päivittää: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Työtila päivitetty"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Työtilat"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Tietokantapalvelin"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Tietokannan nimi"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Tikettijärjestelmän tietokannan salasana"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Tietokannan portti"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Tietokannan tyyppi"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Tietokannan käyttäjänimi"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Päivämäärän muoto"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
msgstr ""
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
-msgstr "Päivät"
+msgstr "Päivämäärät"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "joulukuu"
-#: lib/RT/Date.pm:452
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "joulu"
@@ -1719,148 +2277,220 @@ msgstr "joulu"
msgid "December"
msgstr "joulukuu"
-#: etc/initialdata:222
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Pura salaus"
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
-msgstr ""
+msgstr "Vakio automaattivastausmalli"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
-msgstr ""
+msgstr "Oletus jono"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
-msgstr ""
+msgstr "Vakio tilaaja"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
-msgstr ""
+msgstr "Vakio pääkäyttäjän kommentin malli"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
-msgstr ""
+msgstr "Pääkäyttäjän vakiovastauksen malli"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
-msgstr ""
+msgstr "Vakiovastauksen malli"
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Oletus jono"
-#: etc/initialdata:253
+#: etc/initialdata:228
msgid "Default transaction template"
-msgstr "Oletustapahtumapohja"
+msgstr "Oletustapahtumamalli"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Oletus: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Oletus: %1/%2 muutettu arvosta %3 arvoon %4"
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr "DefaultDueIn"
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Delegoi oikeuksia"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
-msgstr ""
+msgstr "Delegoi erikoisoikeuksia jotka on myönnetty sinulle."
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
-msgstr ""
+msgstr "DelegateRights"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
-msgstr ""
+msgstr "Delegointi"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Poista"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
-msgstr ""
+msgstr "Poista malli"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Poista tämän ryhmän työtilat"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
-msgstr ""
+msgstr "Poistaminen epäonnistui: %1"
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Poista henkilökohtaiset työtilat"
-#: html/Admin/Elements/EditScrips:74
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
-msgstr ""
+msgstr "Poista valitut automaattitoiminnot"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Poista järjestelmän työtilat"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
-msgstr "Poista tapaukset"
+msgstr "Poista tiketit"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
-msgstr ""
+msgstr "Poista arvot"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "Poista työtila"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "Poista ryhmän työtila"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "Poista oma työtila"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
-msgstr ""
+msgstr "DeleteTicket"
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "Poistettu %1"
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Poista työtila %1"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
msgstr ""
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Poista tallennettu haku"
+
#: NOT FOUND IN SOURCE
msgid "Deleting this object could break referential integrity"
msgstr "Tämän objektin poistaminen saattaa rikkoa tietokannan viitteet"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Tämän objektin poistaminen rikkoo tietokannan viitteet"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Tämän objektin poistaminen rikkoo tietokannan viitteet"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
-msgstr ""
+msgstr "Estä"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
-msgstr "Tästä tapauksesta riippuu"
+msgstr "Riippuvuus tähän tikettiin"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr "DependedOnBy"
#: NOT FOUND IN SOURCE
msgid "Dependencies: \\n"
msgstr "Riippuvuudet: \\n"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
-msgstr ""
+msgstr "Riippuvuus %1 lisätty"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
-msgstr ""
+msgstr "Riippuvuus %1 poistettu"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
-msgstr ""
+msgstr "Riippuvuus %1 lisätty"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
-msgstr ""
+msgstr "Riippuvuus %1 poistettu"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr "DependentOn"
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
-msgstr "Riippuu tapauksesta"
+msgstr "Riippuvuus tiketistä"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "DependsOn"
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
-msgstr ""
+msgstr "Kuvaus"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Laskeva"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
-msgstr "Kuvaa tapausta"
+msgstr "Kuvaus"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Kuvaus"
@@ -1868,7 +2498,15 @@ msgstr "Kuvaus"
msgid "Details"
msgstr "Yksityiskohdat"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Suunta"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Poistettu käytöstä"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Näytä"
@@ -1876,39 +2514,55 @@ msgstr "Näytä"
msgid "Display Access Control List"
msgstr "Näytä käyttöoikeuslista"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
-msgstr ""
+msgstr "Näytä rivit"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
-msgstr "Näytä työjonon toimintopohjat"
+msgstr "Näytä jonon automaattisien toimintojen mallit"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
-msgstr "Näytä työjonon toiminnot"
+msgstr "Näytä jonon toiminnot"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Näkymä"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
-msgstr ""
+msgstr "Näytä tallennetut haut tälle ryhmälle"
#: NOT FOUND IN SOURCE
msgid "Display ticket #%1"
msgstr "Näytä tapaus #%1"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-msgstr ""
+msgstr "Julkaistu <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU GPL v.2</a> lisenssin alla."
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Tee mitä tahansa ja kaikki"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Domainnimi"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Älä lisää http://, vain 'localhost', 'rt.example.com' tms."
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Älä päivitä tätä sivua"
@@ -1916,81 +2570,106 @@ msgstr "Älä päivitä tätä sivua"
msgid "Don't show search results"
msgstr "Älä näytä hakutuloksia"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Älä luota tähän avaimeen"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Lataa"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
-msgstr ""
+msgstr "Lataa sarkaimilla erotettu tiedosto"
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Lataa dump-tiedosto"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
-msgstr "Erääntyy"
+msgstr "Määräaika"
#: NOT FOUND IN SOURCE
msgid "Due date '%1' could not be parsed"
msgstr "Erääntymispäivää '%1' ei onnistuttu tulkkaamaan järjestelmälle."
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr "DueRelative"
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "VIRHE: %1"
+
#: NOT FOUND IN SOURCE
msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
msgstr "VIRHE: Tapauksen '%1' lataaminen ei onnistunut: %2.\\n"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Avoimien tikettien helppo muokkaus"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Muokkaa"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
-msgstr ""
+msgstr "Muokkaa erikoiskenttiä"
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
-msgstr "Muokkaa työjonon %1 kenttiä"
+msgstr "Muokkaa jonon %1 kenttiä"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
-msgstr ""
+msgstr "Muokkaa erikoiskenttiä kaikille ryhmille"
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Muokkaa erikoiskenttiä kaikille jonoille"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
-msgstr ""
+msgstr "Muokkaa erikoiskenttiä kaikille käyttäjille"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
-msgstr ""
+msgstr "Muokkaa erikoiskenttiä kaikille tiketeille, kaikissa jonoissa"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
-msgstr "Muokkaa suhteita"
+msgstr "Muokkaa viittauksia"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
-msgstr ""
+msgstr "Muokkaa kyselyä"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
-msgstr ""
+msgstr "Muokkaa hakua"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
-msgstr "Muokkaa työjonon %1 pohjia"
+msgstr "Muokkaa jonon %1 malleja"
#: NOT FOUND IN SOURCE
msgid "Edit keywords"
msgstr "Muokkaa avainsanoja"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
-msgstr ""
+msgstr "Muokkaa tämän ryhmän hakuja"
#: NOT FOUND IN SOURCE
msgid "Edit scrips"
msgstr "Muokkaa toimintoja"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Muokkaa järjestelmäpohjia"
@@ -1998,30 +2677,35 @@ msgstr "Muokkaa järjestelmäpohjia"
msgid "Edit templates for %1"
msgstr "Muokkaa työjonon %1 pohjia"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
-msgstr ""
+msgstr "Muokkaa tallennettuja hakuja"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Muokattava teksti"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
-msgstr "Muokataan työjonon %1 asetuksia"
+msgstr "Muokataan jonon %1 asetuksia"
#: NOT FOUND IN SOURCE
msgid "Editing Configuration for user %1"
msgstr "Muokataan käyttäjän %1 asetuksia"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Muokataan kenttää %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Muokataan ryhmän %1 jäseniä"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Muokataan henkilökohtaisen ryhmän %1 jäseniä"
@@ -2030,19 +2714,44 @@ msgstr "Muokataan henkilökohtaisen ryhmän %1 jäseniä"
msgid "Editing template %1"
msgstr "Muokataan pohjaa %1"
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr "EffectiveId"
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Joko juuri tai kohde täytyy olla määritelty"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Sinulla ei ole oikeuksia katsella tallennettua hakua %1 tai tunniste on väärä"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "Sähköposti"
-#: lib/RT/User_Overlay.pm:235
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Sähköpostiasetukset"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Sähköpostin tiivistelmä"
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "Sähköpostiosoite on jo käytössä"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "Sähköpostin lähetys"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr "Sähköpostimalli säännöllisille huomautusviesteille"
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "Sähköpostiosoite"
@@ -2050,61 +2759,97 @@ msgstr "Sähköpostiosoite"
msgid "EmailEncoding"
msgstr "Sähköpostin koodaus"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Käytössä"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Aktiivinen (rastin poistaminen passivoi kentän)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Aktiivinen (rastin poistaminen passivoi ryhmän)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
-msgstr "Aktiivinen (rastin poistaminen passivoi työjonon)"
+msgstr "Aktiivinen (valinnan poistaminen passivoi jonon)"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
-msgstr "Aktiiviset työjonot"
+msgstr "Aktiiviset jonot"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Aktivoitu tila %1"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
-msgstr ""
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Salaa"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Salaa oletuksena"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Salaa/Pura salaus"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Salaa/Pura salaus tapahtumalle #%1 tiketissä #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Salaus poistettu käytöstä"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Salaus käytössä"
-#: lib/RT/CustomField_Overlay.pm:64
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Anna useampi arvo"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "Anna monta arvoa automaattitäydennykselle"
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
-msgstr ""
+msgstr "Kirjoita objektit tai verkko-osoitteet joihin haluat linkittää objekteja (erota tiedot välilyönnillä)."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Anna yksi arvo"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "Anna arvo automaattitäydennyksen kera"
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
-msgstr ""
+msgstr "Kirjoita jonot tai verkko-osoitteet linkittääksesi jonoja (erota tiedot välilyönnillä)."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
-msgstr "Lisää tapausten numerot tai www-linkit. Erota useammat välilyönneillä."
+msgstr "Kirjoita tikettien numerot tai www-osoitteet (erota tiedot välilyönnillä)."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
-msgstr ""
+msgstr "Anna %1 arvoa"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Anna %1 arvoa automaattitäydennyksien kera"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Virhe"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Virhe parametreissa: Queue->AddWatcher"
@@ -2112,11 +2857,11 @@ msgstr "Virhe parametreissa: Queue->AddWatcher"
msgid "Error in parameters to Queue->DelWatcher"
msgstr "Virhe parametreissa: Queue->DelWatcher"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
-msgstr ""
+msgstr "Virhe parametrissa Queue->DeleteWatcher"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Virhe parametreissa: Ticket->AddWatcher"
@@ -2124,24 +2869,64 @@ msgstr "Virhe parametreissa: Ticket->AddWatcher"
msgid "Error in parameters to Ticket->DelWatcher"
msgstr "Virhe parametreissa: Ticket->DelWatcher"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
-msgstr ""
+msgstr "Virhe parametrissa Ticket->DeleteWatcher"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Virhe: Julkinen avain virheellinen"
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Virhe: Työtilaa ei löydy"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Virhe: viallinen GnuPG tieto"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Virhe: ei julkista avainta"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Virhe: julkinen avain"
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr ""
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Kaikki"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Tarkastele tikettejä jotka on luotu tietyllä ajanjaksolla"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Tarkastele valmistuneita tikettejä jonossa tietyllä, ajanjaksolla"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Tarkastele valmistuneita tikettejä jonossa, luokiteltuna käyttäjän mukaan"
+
+#: bin/rt-crontool:374
msgid "Example:"
+msgstr "Esimerkki:"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
msgstr ""
#: NOT FOUND IN SOURCE
@@ -2152,33 +2937,69 @@ msgstr "Ulkoinen autentikointitunnus"
msgid "ExternalContactInfoId"
msgstr "Ulkoinen yhteystietotunnus"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Lisätieto"
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
msgstr ""
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "'Erioikeutettu'-valeryhmää ei löytynyt"
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "'Erioikeudeton'-valeryhmää ei löytynyt"
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr ""
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr ""
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Ei voitu ladata mallia"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "Ei voitu muodostaa mallia"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "helmi"
@@ -2186,35 +3007,51 @@ msgstr "helmi"
msgid "February"
msgstr "helmikuu"
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
+msgstr "Tiedostonimi"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:69
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr ""
@@ -2222,19 +3059,23 @@ msgstr ""
msgid "Fin"
msgstr "Fin"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Loppuprioriteetti"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr ""
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Find group whose"
msgstr "Etsi ryhmä, jonka"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr ""
@@ -2242,15 +3083,19 @@ msgstr ""
msgid "Find new/open tickets"
msgstr "Etsi uudet/avoimet tapaukset"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Etsi käyttäjät, joiden"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
-msgstr "Hae tapauksia"
+msgstr "Hae tikettejä"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Valmis"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Ensimmäinen"
@@ -2258,57 +3103,115 @@ msgstr "Ensimmäinen"
msgid "First page"
msgstr "Viimeinen sivu"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr ""
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Pakota muutos"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
+msgstr "Ulkoasu"
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
msgstr ""
-#: html/Search/Results.html:145
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Lähetä eteenpäin"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Lähetä eteenpäin ja palaa"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Lähetä eteenpäin"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
-msgstr ""
+msgstr "Löytyi %1 tikettiä"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
-msgstr ""
+msgstr "Objekti löytyi"
#: NOT FOUND IN SOURCE
msgid "FreeformContactInfo"
msgstr "Vapaamuotoiset yhteystiedot"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Pe"
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Perjantai"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
-msgstr "Kokonaiset otsikot"
+msgstr "Otsikkotiedot"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Yleiset"
-#: html/Tools/Offline.html:85
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
+msgstr "Hae malli tiedostosta"
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Annettu käyttäjälle %1"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Yleiset"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr ""
@@ -2316,25 +3219,51 @@ msgstr ""
msgid "Global Scrips"
msgstr "Yleiset toiminnot"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr ""
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr ""
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
-msgstr "Yleinen pohja: %1"
+msgstr "Yleinen malli: %1"
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "GnuPG virhe. Ota yhteyttä ylläpitäjään."
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr ""
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Ok!"
@@ -2346,11 +3275,23 @@ msgstr "Hyvä PGP-allekirjoitus käyttäjältä %1\\n"
msgid "Goto page"
msgstr "Siirry sivulle"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
-msgstr "Siirry tapaukseen"
+msgstr "Siirry tikettiin"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Ryhmä"
@@ -2358,34 +3299,43 @@ msgstr "Ryhmä"
msgid "Group %1 %2: %3"
msgstr "Ryhmä %1 %2: %3"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Ryhmän oikeudet"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Ryhmässä on jo jäsen"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Ryhmässä on jo jäsen: %1"
#: NOT FOUND IN SOURCE
msgid "Group could not be created."
msgstr "Ryhmää ei voitu luoda."
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Ryhmää ei voitu luoda: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Ryhmä luotu"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Ryhmä poistettu käytöstä"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Ryhmä käytössä"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Ryhmässä ei ole sellaista jäsentä"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
-msgstr "Ryhmää ei löydetty"
+msgstr "Ryhmää ei löydy"
#: NOT FOUND IN SOURCE
msgid "Group not found.\\n"
@@ -2395,162 +3345,259 @@ msgstr "Ryhmää ei löydetty.\\n"
msgid "Group not specified.\\n"
msgstr "Ryhmää ei määritelty.\\n"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Ryhmän oikeudet"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Ryhmät"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Ryhmät eivät voi olla jäsentensä jäseniä"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr ""
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
+msgstr "Ryhmät joihin tämä käyttäjä kuuluu"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
msgstr ""
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Hei!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Hei, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historia"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
+msgstr "Ryhmän %1 historia"
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
msgstr ""
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
+msgstr "Käyttäjän %1 historia"
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "Kotipuhelin"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
-msgstr "Kotisivu"
+msgstr "Etusivu"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "tunti"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
-msgstr ""
+msgstr "tuntia"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr ""
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
+#: lib/RT/Date.pm:114
+msgid "ISO"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Numero"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identiteetti"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Jos hyväksyntä hylätään, hylkää alkuperäinen ja poista siitä riippuvat hyväksynnät"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr ""
+msgstr "Jos tilaajaa ei ole määritelty, luo tiketit tälle tilaajalle."
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
-msgstr ""
+msgstr "Jos jonoa ei ole määritelty, luo tiketit tähän jonoon."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr ""
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "Jos muutat tietoliikenneporttia jossa RT on käynnissä sinun täytyy käynnistää palvelin uudelleen kirjautuaksesi."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Jos olet muuttanut tietoja, muista tallentaa"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Kelpaamaton arvo %1"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Muuttumaton kenttä"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/CustomFields/index.html:86
msgid "Include disabled custom fields in listing."
msgstr "Sisällytä passiiviset kentät listaukseen"
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr ""
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
-msgstr "Sisällytä listaukseen myös passiiviset työjonot."
+msgstr "Sisällytä listaukseen myös passiiviset jonot."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Sisällytä listaukseen myös passiiviset käyttäjät."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr ""
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
msgstr ""
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Ota yhteys ylläpitoon: käyttäjällä on ongelmia julkisten avaimien kanssa"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Ilmoita työtilan käyttäjille että sitä ei löydy"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Tiedota käyttäjälle että viestin GnuPG-data on virheellinen"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Tiedota käyttäjää että hänen salasanansa on resetoitu"
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
msgstr ""
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Alkuprioriteetti"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr ""
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Virhe syötteessä"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Sisäinen virhe"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Sisäinen virhe: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Ryhmän tyyppi ei kelpaa"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Kelpaamaton oikeus"
@@ -2558,57 +3605,82 @@ msgstr "Kelpaamaton oikeus"
msgid "Invalid Type"
msgstr "Kelpaamaton tyyppi"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Kelpaamatonta dataa"
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Invalid owner. Defaulting to 'nobody'."
msgstr "Omistaja ei kelpaa. Asetetaan oletusasetusten mukaan 'ei kukaan'"
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
-msgstr "Kelpaamaton työjono"
+msgstr "Kelpaamaton jono"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Kelpaamaton oikeus"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Kelpaamaton arvo kohteelle %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Kelpaamaton arvo kentälle"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Kelpaamaton arvo tilalle"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr ""
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr ""
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr ""
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr ""
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Tammi"
@@ -2616,11 +3688,15 @@ msgstr "Tammi"
msgid "January"
msgstr "tammikuu"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Liity tai jätä ryhmä"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Heinä"
@@ -2628,11 +3704,15 @@ msgstr "Heinä"
msgid "July"
msgstr "Heinäkuu"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
-msgstr "Jätti"
+msgstr "Muokkaa"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "kesä"
@@ -2640,6 +3720,10 @@ msgstr "kesä"
msgid "June"
msgstr "kesäkuu"
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Keyword"
msgstr "Avainsana"
@@ -2648,23 +3732,27 @@ msgstr "Avainsana"
msgid "Lang"
msgstr "Kieli"
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
-msgstr ""
+msgstr "Kieli"
+
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Kieli."
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr ""
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Viimeinen"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
-msgstr "Viimeinen yhteydenotto"
+msgstr "Viimeinen viesti"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Viimeksi otettu yhteyttä"
@@ -2672,26 +3760,67 @@ msgstr "Viimeksi otettu yhteyttä"
msgid "Last Notified"
msgstr "Viimeksi huomautettu"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Viimeksi päivitetty"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Jäljellä"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Päästä tämä käyttäjä sisään RT:iin"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Tälle käyttäjälle voidaan antaa oikeuksia"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "Okei, aloitetaan!"
+
#: NOT FOUND IN SOURCE
msgid "Limiting owner to %1 %2"
msgstr "Rajoitetaan omistajaa %1 %2"
@@ -2700,75 +3829,99 @@ msgstr "Rajoitetaan omistajaa %1 %2"
msgid "Limiting queue to %1 %2"
msgstr "Rajoitetaan työjonoa %1 %2"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr ""
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Linkki on jo olemassa"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Linkkiä ei voitu luoda"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Linkki luotu (%1)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Linkki poistettu (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
-msgstr "Linkkiä ei löydetty"
+msgstr "Linkkiä ei löydy"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
-msgstr "Linkitä tapaus #%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Link ticket %1"
-msgstr "Linkitä tapaus #%1"
+msgstr "Lisää viittaus"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr ""
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
-msgstr "Linkit"
+msgstr "Viittaukset"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr ""
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr ""
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr ""
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
+msgstr "Perl-moodulit ladattu"
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
msgstr ""
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
-msgid "Loaded search %1"
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Maa-asetukset"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
msgstr ""
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Sijainti"
@@ -2776,88 +3929,108 @@ msgstr "Sijainti"
msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
msgstr "Lokihakemistoa %1 ei löytynyt tai kirjoittaminen ei onnistunut.\\n RT ei voi toimia."
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
-msgstr "Olet kirjautunut sisään tunnuksella %1"
+msgstr "Käyttäjä: <strong>%1</strong>"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Kirjauduttu ulos"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Kirjaudu sisään"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Kirjaudu ulos"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr ""
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Sähköposti"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
-msgstr "Aseta omistaja"
+msgstr "Aseta yhteyshenkilö"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Aseta tila"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Aseta erääntymisaika"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Aseta päätösaika"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Aseta aloitusaika"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Aseta alkuaika"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
-msgstr "Aseta oltu yhteydessä -aika"
+msgstr "Aseta viimeisen viestin lähetysaika"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Aseta prioriteetti"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
-msgstr "Aseta työjono"
+msgstr "Aseta jono"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Aseta otsikko"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr ""
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr ""
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Hallinnoi ryhmiä ja jäsenyyksiä"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
-msgstr "Hallinnoi yleisiä asetuksia, jotka vaikuttavat kaikkiin työjonoihin"
+msgstr "Hallinnoi yleisiä asetuksia, jotka vaikuttavat kaikkiin jonoihin"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
-msgstr "Hallinnoi työjonoja ja työjonokohtaisia asetuksia"
+msgstr "Hallinnoi jonoja ja työjonokohtaisia asetuksia"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Hallinnoi käyttäjiä ja salasanoja"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Maalis"
@@ -2865,121 +4038,158 @@ msgstr "Maalis"
msgid "March"
msgstr "Maaliskuu"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Kaikki viestit merkitty luetuiksi"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
msgid "May"
msgstr "Toukokuu"
-#: lib/RT/Date.pm:445
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Touko"
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Jäsen"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
-msgstr ""
+msgstr "Jäsen %1 lisätty"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
-msgstr ""
+msgstr "Jäsen %1 poistettu"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Jäsen lisätty"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Jäsen lisätty: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Jäsen poistettu"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Jäsentä ei poistettu"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Jäsen:"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Jäsenet"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr ""
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
-msgstr ""
+msgstr "Jäsenyydet"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
-msgstr ""
+msgstr "Käyttäjän %1 jäsenyydet"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Yhdistäminen onnistui"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Yhdistäminen epäonnistui. EffectiveId:n arvoa ei pystytty asettamaan"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr ""
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Yhdistä"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr ""
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Viesti"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2451
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Viestikentän korkeus"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Viestikentän leveys"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Viesti käyttäjälle"
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
-msgstr ""
+msgstr "Viesti tallennettu"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
-msgstr ""
+msgstr "Viestiä ei lähetetä seuraaville käyttäjille"
-#: html/Elements/SelectTimeUnits:47
-msgid "Minutes"
-msgstr ""
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Salasanan minimipituus"
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr ""
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr "Minuuttia"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr ""
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Kännykkä"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "Kännykkä"
@@ -2991,12 +4201,12 @@ msgstr "Muokkaa käyttöoikeusluetteloa"
msgid "Modify Custom Field %1"
msgstr "Muokkaa kenttää %1"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr ""
@@ -3005,76 +4215,80 @@ msgstr ""
msgid "Modify Custom Fields which apply to all queues"
msgstr "Muokkaa kaikkia työjonoja koskevia kenttiä"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr ""
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr ""
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
-msgstr "Muokkaa tämän työjonon toimintopohjia"
+msgstr "Muokkaa tämän jonon toimintopohjia"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
-msgstr "Muokkaa tämän työjonon toimintoja"
+msgstr "Muokkaa tämän jonon toimintoja"
#: NOT FOUND IN SOURCE
msgid "Modify System ACLS"
msgstr "Muokkaa järjestelmän käyttöoikeusluetteloa"
-#: NOT FOUND IN SOURCE
-msgid "Modify Template %1"
-msgstr "Muokkaa pohjaa %1"
-
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr ""
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr ""
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
-msgstr "Muokkaa työjonon %1 toimintoa"
+msgstr "Muokkaa jonon %1 toimintoa"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
-msgstr "Muokkaa toimintoa, jota sovelletaan kaikkiin työjonoihin"
+msgstr "Muokkaa toimintoa, jota sovelletaan kaikkiin jonoihin"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr ""
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Muokkaa tämän ryhmän työtiloja"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
-msgstr "Muokkaa tapauksen #%1 päiviä"
+msgstr "Muokkaa tiketin #%1 päivämääriä"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
-msgstr "Muokkaa tapauksen #%1 päiviä"
+msgstr "Muokkaa tiketin #%1 päivämääriä"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Muokkaa ryhmien yleisiä oikeuksia"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Muokkaa ryhmien yleisiä oikeuksia."
@@ -3082,117 +4296,139 @@ msgstr "Muokkaa ryhmien yleisiä oikeuksia."
msgid "Modify global scrips"
msgstr "Muokkaa yleisiä toimintoja"
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Muokkaa yleisiä käyttäjien oikeuksia"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Muokkaa käyttäjien yleisiä oikeuksia."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Muokkaa ryhmän metatietoja tai poista ryhmä"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr ""
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Muokkaa ryhmän %1 oikeuksia."
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
-msgstr "Muokkaa ryhmän oikeuksia työjonossa %1"
+msgstr "Muokkaa ryhmän oikeuksia jonossa %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Muokkaa tämän ryhmän jäsenlistaa"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Muokkaa omaa RT-tunnustasi"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
-msgstr "Muokkaa työjonoon %1 liittyviä käyttäjiä"
+msgstr "Muokkaa jonoon %1 liittyviä käyttäjiä"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
-msgstr "Muokkaa tapaukseen %1 liittyviä käyttäjiä"
+msgstr "Muokkaa tiketin #%1 käyttäjiä"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Muokkaa henkilökohtaisia työtiloja"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
-msgstr "Muokkaa työjonoon %1 liittyviä toimintoja"
+msgstr "Muokkaa jonoon %1 liittyviä toimintoja"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
-msgstr "Muokkaa toimintoja, joita sovelletaan kaikkiin työjonoihin"
+msgstr "Muokkaa toimintoja, joita sovelletaan kaikkiin jonoihin"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Muokkaa järjestelmän työtiloja"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
-msgstr "Muokkaa pohjaa %1"
+msgstr "Muokkaa mallia %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
-msgstr "Muokkaaa pohjia, joita sovelletaan kaikkiin työjonoihin"
+msgstr "Muokkaaa pohjia, joita sovelletaan kaikkiin jonoihin"
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Muokkaa työtilaa %1"
-#: html/Admin/Global/index.html:85
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr ""
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Muokkaa ryhmää %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Muokkaa työtilan kyselyitä"
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
-msgstr "Muokkaa työjonon tarkkailjoita"
+msgstr "Muokkaa jonon valvojia"
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Muokkaa työtilan %1 tilauksia"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Muokkaa käyttäjää %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
-msgstr "Muokkaa tapausta #%1"
+msgstr "Muokkaa tikettiä #%1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
-msgstr "Muokkaa tapausta #%1"
+msgstr "Muokkaa tikettiä #%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
-msgstr "Muokkaa tapauksia"
+msgstr "Muokkaa tikettejä"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr ""
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Muokkaa ryhmän %1 käyttäjien oikeuksia"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
-msgstr "Muokkaa työjonoon %1 liittyviä käyttäjien oikeuksia"
+msgstr "Muokkaa jonoon %1 liittyviä käyttäjien oikeuksia"
#: NOT FOUND IN SOURCE
msgid "Modify watchers for queue '%1'"
@@ -3202,11 +4438,23 @@ msgstr "Muokkaa tapauksen %1 seuraajia"
msgid "ModifyACL"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "Muokkaa työtilaa"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "Myökkaa ryhmän työtilaa"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "Muokkaa omaa työtilaa"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr ""
@@ -3214,223 +4462,273 @@ msgstr ""
msgid "ModifyQueueWatchers"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
-msgstr ""
+msgstr "MuokkaaMallia"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr ""
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Ma"
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Lisätietoa: %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Siirrä alas"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Siirrä ylös"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Monta"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "'Nimi' täytyy määritellä"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
-msgstr ""
+msgstr "Minun %1 tiketit"
#: NOT FOUND IN SOURCE
msgid "My Approvals"
msgstr "Hyväksyntäni"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
-msgstr ""
+msgstr "Päivänäkymä"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Hyväksyntäni"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Omat työtilat"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Nimi"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Nimi on käytössä"
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Need approval from system administrator"
msgstr "Tarvitsee järjestelmän ylläpitäjän hyväksynnän"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Ei ikinä"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Uusi"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
-msgstr "Uusi linkki"
+msgstr "Uusi viittaus"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Uusi salasana"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr ""
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Uusi haku"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Käyttäjän %1 uudet ja käsittelemättömät tiketit"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr ""
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Uusi työtila"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Uusi ryhmä"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Uudet viestit"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Uusi salasana"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Uusi salasana"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Uusi työjono"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
-msgstr ""
+msgstr "Uusi muistutus:"
#: NOT FOUND IN SOURCE
msgid "New request"
msgstr "Uusi tapaus"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Uudet oikeudet"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Uusi toiminto"
-#: NOT FOUND IN SOURCE
-msgid "New search"
-msgstr "Uusi haku"
-
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
-msgstr "Uusi pohja"
+msgstr "Uusi malli"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
-msgstr ""
+msgstr "Uusi tiketti"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
-msgstr "Uutta tapausta ei löydy"
+msgstr "Uutta tikettiä ei ole olemassa"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Uusi käyttäjä"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Uusi käyttäjä pyydetty"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
-msgstr "Uusi tarkkailija"
+msgstr "Uusi valvoja"
#: NOT FOUND IN SOURCE
msgid "New window setting"
msgstr "Uusi ikkunan asetus"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Seuraava"
-#: html/Elements/TicketList:104
-msgid "Next Page"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "Next page"
msgstr "Seuraava sivu"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "Lempinimi"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Lempinimi"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Ei"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Ei kenttiä"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr ""
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Ryhmää ei ole määritelty"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr ""
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
-msgstr "Työjonoa ei ole määritelty"
+msgstr "Jonoa ei ole määritelty"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
-msgstr "Käyttäjää ei löydy. Ole hyvä ja ota yhteyttä RT:n ylläpitäjään.\\n"
+msgstr "Käyttäjää ei löydy. Ole hyvä ja ota yhteyttä tikettijärjestelmän ylläpitäjään.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Ei otsikkoa"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
-msgstr "Ei pohjaa"
+msgstr "Ei mallia"
#: NOT FOUND IN SOURCE
msgid "No Ticket specified. Aborting ticket "
@@ -3440,11 +4738,11 @@ msgstr "Tapausta ei määritelty. Perutaan tapaus "
msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
msgstr "Tapausta ei määritelty. Poistutaan tapauksen muokkauksesta\\n\\n"
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
-msgstr ""
+msgstr "Ei toimintoa"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr ""
@@ -3452,7 +4750,7 @@ msgstr ""
msgid "No command found\\n"
msgstr "Komentoa ei löytynyt\\n"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Käyttäjälle ei ole annettu kommentteja"
@@ -3460,133 +4758,181 @@ msgstr "Käyttäjälle ei ole annettu kommentteja"
msgid "No correspondence attached"
msgstr "Ei kirjeenvaihtoa liitettynä"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Ei työtiloja."
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Ei kuvausta kohteelle %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Ryhmää ei ole määritelty"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
+msgstr "Ryhmää ei löydy."
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2393
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Ei avaimia tälle osoitteelle"
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
+msgstr "Ei liitettyä viestiä"
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
msgstr ""
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Salasanaa ei ole asetettu"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
-msgstr "Ei oikeutta luoda työjonoja"
+msgstr "Ei oikeutta luoda jonoja"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
-msgstr "Ei oikeutta luoda tapauksia työjonoon '%1'"
+msgstr "Ei oikeutta luoda tikettejä jonoon '%1'"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Ei oikeutta luoda käyttäjiä"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
-msgstr "Ei oikeutta tarkastella tätä tapausta"
+msgstr "Ei oikeutta tarkastella tätä tikettiä"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr ""
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
-msgstr "Ei oikeutta päivittää tätä tapausta"
+msgstr "Ei oikeutta nähdä tikettiä"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Toimeksiantajaa ei ole määritelty"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Toimeksiantajia ei ole valittu."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Ei henkilökohtaista avainta"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
-msgstr "Yhtään hakukriteerit täyttävää tapausta ei löytynyt."
+msgstr "Yhtään tikettiä ei löytynyt."
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
-msgstr "Oikeuksia ei löytynyt"
+msgstr "Oikeuksia ei ole"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Ei myönnettyjä oikeuksia."
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr ""
-
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Ei työstettävää hakua"
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
+msgstr "Ei otsikkoa"
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "No ticket id specified"
msgstr "Tapauksen numeroa ei ole määritelty"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "Tikettejä ei löydy."
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Tapahtuman tyyppiä ei ole määritelty"
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Ei käyttökelpoisia avaimia."
+
#: NOT FOUND IN SOURCE
msgid "No user or email address specified"
msgstr "Käyttäjää tai sähköpostiosoitetta ei ole määritelty"
-#: html/Admin/Users/index.html:55
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
-msgstr "Yhtään hakukriteerit täyttävää käyttäjää ei löytynyt."
+msgstr "Yhtään käyttäjää ei löydy."
#: NOT FOUND IN SOURCE
msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
msgstr "Ei kelpaa RT-käyttäjäksi. RT:n cvs-käsittelijä irrottautuu. Ole hyvä ja ota yhteyttä RT:n ylläpitäjään.\\n"
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr ""
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Ei kukaan"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Olematon kenttä?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr ""
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Ei tuloksia"
+
#: NOT FOUND IN SOURCE
msgid "Not logged in"
msgstr "Sisäänkirjautumaton"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Et ole kirjautunut järjestelmään"
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Ei asetettu"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Ei vielä toteutettu."
@@ -3594,83 +4940,99 @@ msgstr "Ei vielä toteutettu."
msgid "Not yet implemented...."
msgstr "Ei vielä toteutettu..."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Merkintöjä"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Ilmoitusta ei pystytty lähettämään"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr ""
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr ""
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr ""
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr ""
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr ""
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr ""
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr ""
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr ""
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr ""
-#: etc/initialdata:365
-msgid "Notify Owner of their ticket has been approved by all approvers"
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
msgstr ""
-#: etc/initialdata:353
-msgid "Notify Owner of their ticket has been approved by some approver"
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
msgstr ""
-#: etc/initialdata:334
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr ""
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr ""
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr ""
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr ""
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
msgstr ""
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+#: lib/RT/Date.pm:98
+msgid "Nov"
msgstr ""
-#: lib/RT/Date.pm:451
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Marras"
@@ -3678,37 +5040,49 @@ msgstr "Marras"
msgid "November"
msgstr "marraskuu"
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Hakutulosten lukumäärä"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
-msgstr ""
+msgstr "TAI"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
-msgstr ""
+msgstr "Objektia ei voitu luoda"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
-msgstr ""
+msgstr "Objektia ei voitu poistaa"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
-msgstr ""
+msgstr "Objekti luotu"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
-msgstr ""
+msgstr "Objekti poistettu"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr ""
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Loka"
@@ -3716,74 +5090,90 @@ msgstr "Loka"
msgid "October"
msgstr "lokakuu"
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
-msgstr ""
+msgstr "Yhteydetön tila"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
-msgstr ""
+msgstr "Yhteydetön tila - muokkaus"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
-msgstr ""
-
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "-"
+msgstr "Yhteydetön tila - tietojen lisäys"
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr ""
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr ""
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr ""
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr ""
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
-msgstr ""
+msgstr "Yhteyshenkilön vaihtuessa"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
-msgstr ""
+msgstr "Prioriteetin muuttuessa"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
+msgstr "Jonon muuttuessa"
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
msgstr ""
-#: etc/initialdata:198
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Uudelleenavauksen yhteydessä"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr ""
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
-msgstr ""
+msgstr "Tilan muuttuessa"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr ""
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "Piilokopio"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "Kopio"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Näytä vain pyynnöt, jotka on luotu jälkeen %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Näytä vain pyynnöt, jotka on luotu ennen %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr ""
@@ -3791,11 +5181,15 @@ msgstr ""
msgid "Open"
msgstr "Avoin"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
-msgstr ""
+msgstr "Avoimet tiketit"
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Avaa osoite"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Avaa"
@@ -3803,9 +5197,9 @@ msgstr "Avaa"
msgid "Open requests"
msgstr "Avoimet tapaukset"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
-msgstr ""
+msgstr "Avaa tikettejä"
#: NOT FOUND IN SOURCE
msgid "Open tickets (from listing) in a new window"
@@ -3815,15 +5209,19 @@ msgstr "Avoimet tapaukset (listasta) uudessa ikkunassa"
msgid "Open tickets (from listing) in another window"
msgstr "Avoimet tapaukset (listasta) toisessa ikkunassa"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
-msgstr "Avaa tapaukset, kun esiintyy kirjeenvaihtoa"
+msgstr "Avaa tiketit kun esiintyy kirjeenvaihtoa"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr ""
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr ""
@@ -3831,152 +5229,177 @@ msgstr ""
msgid "Ordering and sorting"
msgstr "Järjestäminen"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Laitos"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
-msgstr "Alkuperäinen tapaus: #%1"
+msgstr "Alkuperäinen tiketti: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
-msgstr ""
+msgstr "Lähtevä sähköposti lisätty"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
-msgstr ""
+msgstr "Lähtevä sähköposti lisätty"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Ajan kuluessa prioriteetti muuttuu kohti"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
-msgstr "Omat tapaukset"
+msgstr "Omat tiketit"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr ""
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
-msgstr "Omistaja"
+msgstr "Yhteyshenkilö"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
-msgstr "Omistaja vaihdettu tunnuksesta %1 tunnukseen %2"
+msgstr "Yhteyshenkilöksi vaihdettu %2"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
-msgstr ""
+msgstr "Yhteyshenkilöä ei voitu asettaa."
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
-msgstr "Omistaja pakolla vaihdettu tunnuksesta %1 tunnukseen %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Owner is"
-msgstr "Omistaja"
+msgstr "Yhteyshenkilöksi vaihdettu %2"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-msgid "Page %1 of %2"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
msgstr ""
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Sivu"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Sivu 1/1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Sivua ei löydy"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Hakulaite"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
msgstr "Hakulaite-puhelin"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
-msgstr "Isät"
+msgstr "Vanhemmat"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Salasana"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Salasanan muistutus"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
-msgstr ""
+msgstr "Salasana vaihdettu"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
-msgstr ""
+msgstr "Salasanan tulee olla vähintään %1 merkkiä pitkä"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
-msgstr ""
+msgstr "Salasana asetettu"
#: NOT FOUND IN SOURCE
msgid "Password too short"
msgstr "Salasana liian lyhyt"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Salasana: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr ""
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "Salasanan vaihto"
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
-msgstr ""
+msgstr "Salasanat eivät täsmää."
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
+msgstr "Salasanat eivät täsmää. Salasanaasi ei vaihdettu"
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
msgstr ""
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Käyttäjät"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr ""
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Pääsy kielletty"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
-msgstr ""
+msgstr "Pääsy evätty"
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
-msgstr ""
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "Henkilökohtaiset työtilat"
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Omat ryhmät"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Omat ryhmät"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Omat ryhmät:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Puhelinnumerot"
@@ -3984,35 +5407,66 @@ msgstr "Puhelinnumerot"
msgid "Placeholder"
msgstr "Paikanpitäjä"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Asetukset"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
+msgid "Preferences %1 for user %2."
msgstr ""
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr ""
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Prefs"
msgstr "Asetukset"
-#: lib/RT/Action/Generic.pm:195
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Valmistele tumppi"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Edellinen"
-#: html/Elements/TicketList:101
-msgid "Previous Page"
-msgstr ""
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Edellinen"
#: NOT FOUND IN SOURCE
msgid "Previous page"
@@ -4022,120 +5476,197 @@ msgstr "Edellinen sivu"
msgid "Pri"
msgstr "Pri"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
-msgstr "Toimeksiantajaa %1 ei löytynyt"
+msgstr "Toimeksiantajaa %1 ei löydy"
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Tulosta tämä viesti"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Prioriteetti"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Prioriteetti alkaa arvosta"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Yksityisyys"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
+msgstr "Yksityisyys:"
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
msgstr ""
-#: etc/initialdata:25
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Erioikeutettu"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Erioikeutuksen tila: &1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Erioikeutetut käyttäjät"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Valeryhmä sisäiseen käyttöön"
-#: html/Search/Build.html:121
-msgid "Query Builder"
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
msgstr ""
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "Tietokantakysely"
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr "Tietokantahaku"
+
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr ""
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
-msgstr "Työjono"
+msgstr "Jono"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
-msgstr "Työjonoa %1 ei löytynyt"
+msgstr "Jonoa %1 ei löydy"
#: NOT FOUND IN SOURCE
msgid "Queue '%1' not found\\n"
msgstr "Työjonoa '%1' ei löytynyt"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
-msgstr "Työjonon nimi"
+msgstr "Jonon nimi"
#: NOT FOUND IN SOURCE
msgid "Queue Scrips"
msgstr "Työjonon toiminnot"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
-msgstr "Työjono on jo olemassa"
+msgstr "Jono on jo olemassa"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
-msgstr "Työjonoa ei voitu luoda"
+msgstr "Jonoa ei voitu luoda"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
-msgstr "Työjonoa ei voitu ladata."
+msgstr "Jonoa ei voitu ladata."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
-msgstr "Työjono luotu"
+msgstr "Jono luotu"
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "Queue is not specified."
msgstr "Työjonoa ei määritelty"
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
-msgstr "Työjonoa ei löytynyt"
+msgstr "Jonoa ei löydy"
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr "Jonon valvoja"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
-msgstr "Työjonot"
+msgstr "Jonot"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr ""
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr ""
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
-msgstr ""
+msgstr "Tila"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
+msgstr "Tiketin pika-avaus"
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
msgstr ""
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
-msgstr ""
+msgstr "RSS"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 - %2"
@@ -4147,10 +5678,14 @@ msgstr "RT %1, tekijä: <a href=\"http://bestpractical.com\">Best Practical Solu
msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "RT Ylläpito"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "Tikettijärjestelmän ylläpitäjän sähköposti"
+
#: NOT FOUND IN SOURCE
msgid "RT Authentication error."
msgstr "RT Virhe tunnistamisessa"
@@ -4159,6 +5694,10 @@ msgstr "RT Virhe tunnistamisessa"
msgid "RT Bounce: %1"
msgstr "RT palautus: %1"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT Configuration error"
msgstr "RT Konfiguraatiovirhe"
@@ -4167,7 +5706,7 @@ msgstr "RT Konfiguraatiovirhe"
msgid "RT Critical error. Message not recorded!"
msgstr "RT Kriittinen virhe. Viestiä ei tallennettu!"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "RT Virhe"
@@ -4175,28 +5714,40 @@ msgstr "RT Virhe"
msgid "RT Received mail (%1) from itself."
msgstr "RT Sai sähköpostin (%1) itseltään."
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT Self Service / Closed Tickets"
msgstr "RT Itsepalvelu / Suljetut tapaukset"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr ""
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
-msgstr "RT yhdellä silmäyksellä"
+msgstr "Tikettijärjestelmä"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr ""
@@ -4212,16 +5763,16 @@ msgstr "RT ei löytänyt tilaajaa ulkopuolisesta tietokannasta"
msgid "RT couldn't find the queue: %1"
msgstr "RT ei löytänyt työjonoa: %1"
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
-msgstr ""
+msgstr "Tikettijärjestelmä ei voinut tallentaa istuntoasi."
#: NOT FOUND IN SOURCE
msgid "RT couldn't validate this PGP signature. \\n"
msgstr "RT ei pystynyt tarkistamaan tätä PGP allekirjoitusta.\\n"
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "%1: RT"
@@ -4233,61 +5784,110 @@ msgstr "RT on prosessoinut antamasi komennot"
msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
msgstr "RT on tekijänoikeuslain alainen, &copy; 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. Se on jakelussa seuraavalla lisenssillä: <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT thinks this message may be a bounce"
msgstr "RT luulee että tämä viesti on palautus"
-#: html/Search/Simple.html:58
-msgid "RT will look for anything else you enter in ticket subjects."
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
msgstr ""
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr "Voit hakea myös viestien otsikoista haluamallasi hakusanalla."
+
#: NOT FOUND IN SOURCE
msgid "RT will process this message as if it were unsigned.\\n"
msgstr "RT prosessoi tämän viestin kuten se olisi allekirjoittamaton."
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr ""
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
msgstr "RT:n sähköpostiohjaustila vaatii PGP-tunnistamista. Et allekirjoittanut (PGP) viestiä tai allekirjoitustasi ei pystytty vahvistamaan."
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Oikea nimi"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "Oikea nimi"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Vastaanottaja"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr "Tallenna kaikki päivitykset"
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr ""
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
-msgstr "Viitattu jostakin"
+msgstr "Viittaus tähän tikettiin"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
-msgstr "Viittaus johonkin"
+msgstr "Viittaus toiseen tikettiin"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "Refine"
@@ -4297,77 +5897,133 @@ msgstr "Päivitä"
msgid "Refine search"
msgstr "Päivitä haku"
-#: html/Elements/Refresh:57
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Päivitä"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Päivitä tämä sivu %1 minuutin välein"
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
-msgstr ""
+msgstr "Muistutus '%1' lisätty"
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr ""
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
-msgstr ""
+msgstr "Muistutustiketti #%1"
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
-msgstr ""
+msgstr "Muistutukset"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
-msgstr ""
+msgstr "Muistutukset tiketistä #%1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Poista kopio ylläpidolle"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Poista kopio"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Poista tilaaja"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Vastaa"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr ""
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
-msgstr "Vastaa tapauksiin"
+msgstr "Vastaa tiketteihin"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr ""
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
-msgstr ""
+msgstr "Raportit"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Tilaaja"
@@ -4375,81 +6031,97 @@ msgstr "Tilaaja"
msgid "Requestor email address"
msgstr "Tilaajan sähköpostiosoite"
-#: NOT FOUND IN SOURCE
-msgid "Requestor(s)"
-msgstr "Tilaajat"
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
-msgstr "Tilaajat"
+msgstr "Tilaaja"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
-msgstr "Tapaus tulisi suorittaa mennessä"
+msgstr "Pyynnöt suoritettava mennessä"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr ""
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Palauta"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
-msgid "Reset to default"
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
msgstr ""
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr "Palauta oletus"
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Koti"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Päätä"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
-msgstr "Ratkaise tapaus #%1 (%2)"
+msgstr "Ratkaise tiketti #%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
-msgstr "Päätetty"
+msgstr "Valmis"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
-msgstr ""
+msgstr "Käyttäjän mukaan"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
-msgstr ""
+msgstr "Valmistunut ajanjaksolla"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr ""
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr ""
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "Vastaus tilaajille"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Tulokset"
#: NOT FOUND IN SOURCE
msgid "Results per page"
-msgstr "Tuloksia sivulle: "
+msgstr "Tuloksia sivulle:"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Palaa tikettiin"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Vahvista salasana"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr ""
@@ -4457,116 +6129,156 @@ msgstr ""
msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
msgstr "Oikeutta %1 ei löydetty %2 %3 laajuudessa %4 (%5)\\n"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Oikeus delegoitu"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Oikeus myönnetty"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Oikeus ladattu"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Oikeutta ei voitu perua"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
-msgstr "Oikeutta ei löydetty"
+msgstr "Oikeutta ei löydy"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Oikeutta ei ladattu"
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Oikeus peruttu"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Oikeudet"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Oikeuksia ei voitu myöntää: %1"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "Oikeuksia ei voitu perua: %1"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Roolit"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr ""
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr ""
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "La"
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Lauantai"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
-msgstr ""
+msgstr "Tallenna"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Tallenna muutokset"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Tallenna muutokset"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Tallennettu %1 %2"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Tallennettua hakua %1 ei löydy"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
msgstr ""
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr "Tallennetut haut"
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Toiminto #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Toiminto luotu"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr ""
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Toiminto poistettu"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Toiminnot"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Automaattitoiminnot ja vastaanottajat"
+
#: NOT FOUND IN SOURCE
msgid "Scrips for %1\\n"
msgstr "Toiminnot työjonolle %1\\n"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
-msgstr "Toiminnot, joita sovelletaan kaikkiin työjonoihin"
+msgstr "Toiminnot, joita sovelletaan kaikkiin jonoihin"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Hae"
@@ -4574,217 +6286,268 @@ msgstr "Hae"
msgid "Search Criteria"
msgstr "Hakukriteerit"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr ""
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr ""
-
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr ""
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
-msgstr ""
+msgstr "Haku"
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
-msgstr ""
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Hae tikettejä kirjoittamalla <strong>id</strong>-numero , <strong>jonot</strong>, <strong>käyttäjänimi</strong> ja <strong>lähettäjän sähköpostiosoite</strong>."
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr ""
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
msgstr ""
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr "Voit etsiä myös tiketin sisällön perusteella kirjoittamalla hakukenttään <strong>fulltext:hakusana</strong>. HUOM! Tämä voi kestää jonkin aikaa joten odota ole hyvä."
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
msgstr ""
-#: bin/rt-crontool:265
+#: bin/rt-crontool:368
msgid "Security:"
msgstr ""
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
+msgstr "Katso myös:"
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "Esikatsele työtilaa"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr ""
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "Esikatsele ryhmän työtilaa"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "Esikatsele omaa työtilaa"
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr ""
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "Valitse"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Valitse tietokannan tyyppi"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr ""
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Valitse ryhmä"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
-msgstr "Valitse työjono"
+msgstr "Valitse jono"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr ""
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Valitse käyttäjä"
-#: html/Admin/Elements/CustomFieldTabs:90
-msgid "Select custom field"
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Vaihda kieli"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr ""
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Valitse työtila"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Valitse ryhmä"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Valitse useita arvoja"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Valitse yksi arvo"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Valitse työjono"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr ""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Valitse toiminto"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
-msgstr "Valitse pohja"
+msgstr "Valitse malli"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr ""
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Valitse käyttäjä"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:59
-msgid "Selected objects"
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
msgstr ""
-#: html/Widgets/SelectionBox:209
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr "Valitut objektit"
+
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
-msgstr ""
+msgstr "Valintaa muokattu. Muista tallentaa muutokset"
#: NOT FOUND IN SOURCE
msgid "Self Service"
msgstr "Itsepalvelu"
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
msgstr ""
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "Lähetä sähköposti kaikille valvojille"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
+msgstr "Lähetä sähköposti kaikille valvojille kommenttina"
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
msgstr ""
-#: etc/initialdata:112
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr ""
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr ""
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr ""
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr ""
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr ""
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr ""
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr ""
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr ""
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
-msgstr "Lähettää postia omistajalle"
+msgstr "Lähetä postia yhteyshenkilölle"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
-#: lib/RT/Date.pm:449
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Syys"
@@ -4792,43 +6555,60 @@ msgstr "Syys"
msgid "September"
msgstr "syyskuu"
-#: html/Ticket/Elements/ShowTransaction:158
-msgid "Show"
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
msgstr ""
-#: html/Approvals/index.html:52
-msgid "Show Approvals"
-msgstr ""
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr "Näytä"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr ""
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Näytä tulokset"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr ""
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "Näytä myös"
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Näytä perustiedot"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr ""
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Näytä yksityiskohdat"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Näytä linkkien kuvaukset"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr ""
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr ""
@@ -4844,73 +6624,114 @@ msgstr "Näytä tapausten yhteenvedot"
msgid "ShowACL"
msgstr ""
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr ""
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
-msgstr ""
+msgstr "NäytäMalli"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "Silppuri"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Sivupalkki"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr ""
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Allekirjoitus"
-#: html/Elements/Tabs:68
-msgid "Simple Search"
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
msgstr ""
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr "Haku"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Yksittäinen"
-#: html/Search/Elements/EditFormat:75
-msgid "Size"
+#: lib/RT/Installer.pm:139
+msgid "Site name"
msgstr ""
-#: html/Elements/Header:89
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr "Koko"
+
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr ""
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr ""
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
-msgstr ""
+msgstr "Järjestä"
#: NOT FOUND IN SOURCE
msgid "Sort key"
@@ -4924,7 +6745,19 @@ msgstr "Järjestä tulokset"
msgid "SortOrder"
msgstr "Lajittelujärjestys"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr ""
@@ -4936,17 +6769,21 @@ msgstr "Jäädytetty"
msgid "Start page"
msgstr "Etusivu"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
-msgstr "Aloitettu"
+msgstr "Työ aloitettu"
#: NOT FOUND IN SOURCE
msgid "Started date '%1' could not be parsed"
msgstr "Aloittamisaikaa '%1' ei pystytty tulkitsemaan"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
-msgstr "Alkaa"
+msgstr "Työn aloitus"
#: NOT FOUND IN SOURCE
msgid "Starts By"
@@ -4956,143 +6793,249 @@ msgstr "Alkaa mennessä"
msgid "Starts date '%1' could not be parsed"
msgstr "Alkamisaikaa '%1' ei pystytty tulkitsemaan"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Tila"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Tila"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
-msgstr ""
+msgstr "Tilan muuttuminen"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Tila muutettu arvosta %1 arvoon %2"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Kaappaa"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Vaihe %1/%2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Kaapattu käyttäjältä %1"
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
-msgstr ""
+msgstr "Tyyli"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Otsikko"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
-msgstr "Otsikko vaihdettu: %1"
+msgstr "Aihe muutettu: %1"
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr "Aihe-tagi muutettu %1"
-#: html/Elements/Submit:75
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Lähetä"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "Tilaa työtila %1"
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "Tilaa työtiloja"
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "Tilaa työtila"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "Tilattu työtila %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Onnistui"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Su"
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr ""
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Järjestelmä"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "Järjestelmän työtilat"
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Järjestelmän oletus"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Järjestelmävirhe"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
-msgstr ""
+msgstr "Järjestelmävirhe: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
-msgstr ""
+msgstr "Järjestelmätyökalut"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Järjestelmävirhe. Oikeutta ei delegoitu."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Järjestelmävirhe. Oikeutta ei luovutettu."
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Järjestelmäryhmät"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr ""
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TESTIMERKKIJONO"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Ota itselle"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Otettu"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
-msgstr "Pohja"
+msgstr "Malli"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
-msgstr "Pohja #%1"
+msgstr "Malli #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Malli #%1 poistettu"
-#: html/Admin/Elements/EditTemplates:110
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Mallia '%1' ei löydy"
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Pohja poistettu"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Malli on tyhjä"
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
-msgstr ""
+msgstr "Malli on välttämätön argumentti"
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Pohjaa ei löydetty"
@@ -5100,110 +7043,119 @@ msgstr "Pohjaa ei löydetty"
msgid "Template not found\\n"
msgstr "Pohjaa ei löydetty\\n"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
-msgstr "Pohja tulkittu"
+msgstr "Malli muodostettu"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
-msgstr ""
+msgstr "Mallin muodostamisessa on ongelma"
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
-msgstr "Pohjat"
+msgstr "Mallit"
#: NOT FOUND IN SOURCE
msgid "Templates for %1\\n"
msgstr "Pohjat työjonolle %1\\n"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Ei ole arvo tälle kentälle"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Tämä on sama arvo"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
-msgstr "Toimeksiantaja on jo %1 tälle työjonolle"
+msgstr "Toimeksiantaja on jo %1 tälle jonolle"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
-msgstr "Toimeksiantaja on jo %1 tälle tapaukselle"
+msgstr "Ehto %1 on jo tälle tiketille"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
-msgstr "Toimeksiantaja ei ole %1 tälle työjonolle"
+msgstr "Toimeksiantaja ei ole %1 tälle jonolle"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
-msgstr "Toimeksiantaja ei ole %1 tälle tapaukselle"
+msgstr "Toimeksiantaja ei ole %1 tälle tiketille"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
-msgstr "Työjonoa ei ole olemassa"
+msgstr "Jonoa ei ole olemassa"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
-msgstr "Tapaus sisältää päättämättömiä riippuvuuksia"
+msgstr "Tiketti sisältää keskeneräisiä riippuvuuksia"
#: NOT FOUND IN SOURCE
msgid "That user already has that right"
msgstr "Käyttäjällä on jo tuo oikeus"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
-msgstr "Käyttäjä omistaa jo tämän tapauksen"
+msgstr "Käyttäjä omistaa jo tämän tiketin"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Käyttäjää ei ole olemassa"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Käyttäjä on jo erioikeutettu"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Käyttäjä on jo erioikeudeton"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Käyttäjä on nyt erioikeutettu"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Käyttäjä on nyt erioikeudeton"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
-msgstr "Käyttäjä ei voi omistaa tapauksia tuossa työjonossa"
+msgstr "Käyttäjä ei voi omistaa tikettejä jonossa"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Ei ole numero"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Perustiedot"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr ""
@@ -5211,120 +7163,221 @@ msgstr ""
msgid "The comment has been recorded"
msgstr "Kommentti on tallennettu"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "Tietokantapalvelimesi domainnimi (esim. 'db.esimerkki.com')"
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
-msgstr ""
+msgstr "Seuraava komento etsii kaikki aktiiviset tiketit jonosta 'yleiset' ja asettaa niiden prioriteetin 99:si jos niihin ei ole koskettu viimeiseen neljään tuntiin:"
#: NOT FOUND IN SOURCE
msgid "The following commands were not proccessed:\\n\\n"
msgstr "Seuraavia komentoja ei suoritettu:\\n\\n"
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr "Seuraavat kyselyt eivät ehkä ole mahdollisia kaikille käyttäjille jotka voivat nähdä tämän työtilan."
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "Avain on vanhentunut"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Uusi arvo asetettu."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
-msgstr "Tapauksen omistaja"
+msgstr "Tiketin yhteyshenkilö"
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "Sivua ei löydy"
-#: lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
-msgstr "Tapauksen tilaaja"
+msgstr "Tiketin tilaaja"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Teema"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "Sinulla on lukemattomia viestejä tässä tiketissä."
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
-msgstr "Nämä kommentit eivät ole yleisesti näkyvillä käyttäjälle"
+msgstr "Nämä viestit eivät ole yleisesti näkyvillä käyttäjille"
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
-#: lib/RT/CustomField_Overlay.pm:978
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr ""
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:96
-msgid "This message will be sent to..."
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
msgstr ""
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr "Tämä viesti lähetetään"
+
#: NOT FOUND IN SOURCE
msgid "This ticket %1 %2 (%3)\\n"
msgstr "Tämä tapaus %1 %2 (%3)\\n"
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Tämä tapahtuma ei näytä sisältävän mitään"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
-msgstr "Käyttäjän %1 tärkeintä tapausta"
+msgstr "Käyttäjän %1 tärkeintä tikettiä"
#: NOT FOUND IN SOURCE
msgid "This user's 25 highest priority tickets"
msgstr "Käyttäjän 25 tärkeintä tapausta"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "To"
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Tiketti"
+
#: NOT FOUND IN SOURCE
msgid "Ticket # %1 %2"
msgstr "Tapaus # %1 %2"
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
-msgstr "Tapauksen #%1 jättipäivitys: %2"
+msgstr "Tiketti #%1: %2"
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
-msgstr "Tapaus #%1: %2"
+msgstr "Tiketti #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
-msgstr "Tapaus %1 luotu työjonoon '%2'"
+msgstr "Tiketti %1 luotu jonoon '%2'"
#: NOT FOUND IN SOURCE
msgid "Ticket %1 loaded\\n"
msgstr "Tapaus %1 ladattu\\n"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
-msgstr "Tapaus %1: %2"
+msgstr "Tiketti %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr ""
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
-msgstr "Tapauksen historia # %1 %2"
+msgstr "Tiketti #%1: %2"
#: NOT FOUND IN SOURCE
msgid "Ticket Id"
msgstr "Tapauksen numero"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr ""
@@ -5332,17 +7385,21 @@ msgstr ""
msgid "Ticket attachment"
msgstr "Tapauksen liitteen"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
-msgstr "Tapauksen sisältö"
+msgstr "Tiketin sisältö"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
-msgstr "Tapauksen sisällön tyyppi"
+msgstr "Tiketin sisällön tyyppi"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
-msgstr "Tapausta ei voitu luoda sisäisestä virheestä johtuen"
+msgstr "Tikettiä ei voitu luoda sisäisen virheen takia"
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "Tikettiä ei voitu ladata"
#: NOT FOUND IN SOURCE
msgid "Ticket created"
@@ -5356,91 +7413,121 @@ msgstr "Tapauksen luonti epäonnistui"
msgid "Ticket deleted"
msgstr "Tapaus poistettu"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Tikettinäkymä"
+
#: NOT FOUND IN SOURCE
msgid "Ticket id not found"
msgstr "Tapauksen numeroa ei löytynyt"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
-msgstr ""
+msgstr "Tiketin tiedot"
#: NOT FOUND IN SOURCE
msgid "Ticket not found"
msgstr "Tapausta ei löydy"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
-msgstr "Tapauksen tila vaihdettu"
+msgstr "Tiketin tila muutettu"
#: NOT FOUND IN SOURCE
msgid "Ticket watchers"
msgstr "Tapauksen tarkkailijat"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
-msgstr "Tapaukset"
+msgstr "Tietokantahaku"
-#: html/Tools/Reports/CreatedByDates.html:86
-msgid "Tickets created after"
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Tiketit %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr "Alkamisaika"
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
-msgstr ""
+msgstr "Päättymisaika"
#: NOT FOUND IN SOURCE
msgid "Tickets from %1"
msgstr "Tapaukset %1"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
-msgstr ""
+msgstr "Alkamisaika"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
-msgstr ""
+msgstr "Päättymisaika"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr ""
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
-msgstr ""
+msgstr "Arvioitu työaika"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
-msgstr "Aikaa jäljellä"
+msgstr "SLA"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
-msgstr "Aikaa käytetty"
+msgstr "Työaikaa käytetty"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Aikaa jäljellä"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Aika"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Aikaa käytetty"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr ""
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Aikavyöhyke"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr ""
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "To generate a diff of this commit:"
msgstr "Luodaksesi diffin tästä käskystä:"
@@ -5449,65 +7536,99 @@ msgstr "Luodaksesi diffin tästä käskystä:"
msgid "To generate a diff of this commit:\\n"
msgstr "To generate a diff of this commit:\\n"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
-msgstr "Oltu yhteydessä"
+msgstr "Viimeinen viesti"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
-msgid "Tools"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
msgstr ""
-#: html/Search/Elements/Chart:130
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr "Työkalut"
+
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr ""
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Tapahtuma %1 puhdistettu"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Tapahtuma luotu"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Tapahtumat ovat muuttumattomia"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Trying to delete a right: %1"
msgstr "Yritetään poistaa oikeus: %1"
-#: lib/RT/Date.pm:418
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Ti"
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Tyyppi"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Tyyppi muutettu '%1' -> '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "Ei voitu tilata työtilaa %1: Pääsy estetty"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Toteuttamaton"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unix login"
@@ -5515,53 +7636,74 @@ msgstr "Unix login"
msgid "UnixUsername"
msgstr "Käyttäjän Unix-tunnus"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Tuntematon sisällön koodaus %1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: $key"
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
msgstr ""
-#: html/Elements/SelectResultsPerPage:58
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Rajoittamaton"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr ""
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Erioikeudeton"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Ottamaton"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Päivitä"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Update ID"
msgstr "Päivitä numero"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
-msgstr ""
+msgstr "Tallenna muutokset"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Päivitä tyyppi"
@@ -5573,15 +7715,19 @@ msgstr "Päivitä kaikki nämä tapaukset kerralla"
msgid "Update email"
msgstr "Päivitä sähköposti"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Päivitä ja Hae"
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
-msgstr ""
+msgstr "Päivitä useita tikettejä"
#: NOT FOUND IN SOURCE
msgid "Update name"
msgstr "Päivitä nimi"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Päivitystä ei tallennettu"
@@ -5593,68 +7739,111 @@ msgstr "Päivitä valitut tapaukset"
msgid "Update signature"
msgstr "Päivitä allekirjoitus"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
-msgstr "Päivitä tapaus"
+msgstr "Muokkaa tikettiä"
#: NOT FOUND IN SOURCE
msgid "Update ticket # %1"
msgstr "Päivitä tapaus # %1"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
-msgstr "Päivitä tapaus #%1"
+msgstr "Muokkaa tikettiä #%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
-msgstr "Päivitä tapaus #%1 (%2)"
+msgstr "Muokkaa tikettiä #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Päivityksen tyyppi ei ollut kirjeenvaihto eikä kommentti."
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Päivitetty"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr ""
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
+msgstr "Lähetä muutokset"
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
msgstr ""
-#: html/Admin/index.html:90
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Use monospace font"
+msgstr "Käytä monospace-fonttia"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
+msgstr "Käytä muita RT:n hallinnointityökaluja"
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
msgstr ""
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Käyttäjä"
+
#: NOT FOUND IN SOURCE
msgid "User %1 %2: %3\\n"
msgstr "Käyttäjä %1 %2: %3\\n"
@@ -5663,10 +7852,10 @@ msgstr "Käyttäjä %1 %2: %3\\n"
msgid "User %1 Password: %2\\n"
msgstr "Käyttäjä %1 Salasana: %2\\n"
-#: lib/RT/Ticket_Overlay.pm:506
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
-msgstr ""
+msgstr "Käyttäjää '%1' ei löydy."
#: NOT FOUND IN SOURCE
msgid "User '%1' not found"
@@ -5676,11 +7865,15 @@ msgstr "Käyttäjää '%1' ei löydetty"
msgid "User '%1' not found\\n"
msgstr "Käyttäjää '%1' ei löydetty\\n"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr ""
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr ""
@@ -5692,24 +7885,41 @@ msgstr "Käyttäjätunnus"
msgid "User Id"
msgstr "Käyttäjätunnus"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Käyttäjän oikeudet"
-#: html/Admin/Users/Modify.html:301
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Käyttäjää ei voitu luoda: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Käyttäjä luotu"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Käyttäjän luomat ryhmät"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "Käyttäjällä on tyhjä sähköpostiosoite"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr ""
@@ -5721,32 +7931,40 @@ msgstr "Käyttäjää informoitu"
msgid "User view"
msgstr "Käyttäjän näkymä"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Käyttäjän GnuPG-avaimet"
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr ""
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Käyttäjätunnus"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Käyttäjänimen esitystapa"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Käyttäjät"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Hakua vastaavat käyttäjät"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr ""
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr ""
@@ -5754,146 +7972,279 @@ msgstr ""
msgid "ValueOfQueue"
msgstr "Tapauksen arvo"
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Arvot"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Tikettijärjestelmän luomat raportit"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Katsele tämän ryhmän työtiloja"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Katsele omia työtiloja"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "Katsele järjestelmän työtiloja"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr "WYSIWYG editorin korkeus"
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "Käytä WYSIWYG viestieditoria"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Varoitus: et ole asettanut sähköpostiosoitetta joten et voi vastaanottaa tätä työtilaa"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr ""
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Valvoja"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "Valvontaryhmä"
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
-msgstr "Tarkkailijat"
+msgstr "Valvoja"
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "WebEncoding"
msgstr "Web-koodaus"
-#: lib/RT/Date.pm:419
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Ke"
-#: html/Tools/MyDay.html:75
-msgid "What I did today"
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
msgstr ""
-#: etc/initialdata:521
-msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
msgstr ""
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
msgstr ""
-#: etc/initialdata:146
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr "Päivänäkymä"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Mikä on RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr "Kun RT llähettää sähköpostia asetetaan Lähettäjä: ja Vastaus: kentät niin että käyttä voi lisätä keskustelua suoraan klikkaamalla Vastaa sähköpostiohjelmasta. Se käyttää eri osoitteita Vastauksille ja Kommenteille. Näitä voidaan muuokata jokaiselle jonolle erikseen. Nämä osoitteet täytyy konfiguroida käyttämään <tt>rt-mailgate</tt> ohjelmaa."
+
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr ""
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr ""
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr ""
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Aina kun tiketti avataan uudelleen"
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr ""
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
-msgstr ""
+msgstr "Aina kun tiketin yhteyshenkilö muuttuu"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
-msgstr ""
+msgstr "Aina kun tiketin prioriteetti muuttuu"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
-msgstr ""
+msgstr "Aina kun tiketin jono muuttuu"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
-msgstr ""
+msgstr "Aina kun tiketin tila muuttuu"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr ""
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr ""
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr ""
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
-msgid "Work"
-msgstr "Työ"
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
-#: html/Search/Results.html:82
-msgid "Work offline"
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "Työ"
+
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "Työpuhelin"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
-msgstr "Tehty"
+msgstr "Työaika"
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Kyllä"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
-msgstr "Omistat jo tämän tapauksen"
+msgstr "Omistat jo tämän tiketin"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Et ole valtuutettu käyttäjä"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Voit <a href=\"%1\">hypätä ensimmäiseen uuteen viestiin</a> tai <a href=\"%2\">hypätä ensimmäiseen viestiin ja merkitä kaikki viestit luetuiksi</a>."
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
-msgstr "Voit palauttaa vain tapauksia, jotka omistat itse tai jotka ovat ilman omistajaa"
+msgstr "Voit vaihtaa yhteyshenkilöä vain jos tikettiä ei ole osoitettu tai se on osoitettu sinulle"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr ""
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "Sinulla ei ole <b>pääkäyttäjän</b> oikeuksia."
+
#: NOT FOUND IN SOURCE
msgid "You don't have permission to view that ticket.\\n"
msgstr "Sinulla ei ole valtuuksia tarkastella tätä tapausta.\\n"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
-msgstr "Löysit %1 tapausta työjonosta %2"
+msgstr "Löytyi %1 tikettiä jonosta %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
-msgstr "Olet kirjautunut ulos RT:stä"
+msgstr "Olet kirjautunut ulos tikettijärjestelmästä"
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
-msgstr "Sinulla ei ole valtuuksia luoda tapauksia tähän työjonoon."
+msgstr "Sinulla ei ole valtuuksia luoda tikettejä tähän jonoon."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
-msgstr "Et voi luoda tapauksia tuohon työjonoon."
+msgstr "Et voi luoda tikettejä jonoon."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
-msgstr "Tervetuloa kirjautumaan järjestelmään uudelleen"
+msgstr "Tervetuloa uudelleen"
#: NOT FOUND IN SOURCE
msgid "Your %1 requests"
@@ -5903,48 +8254,64 @@ msgstr "Sinun %1 tapaustasi"
msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
msgstr "RT:n ylläpitäjä on konfiguroinut RT:n käynnisävät sähköpostialiakset väärin."
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr ""
-
-#: etc/initialdata:540
-msgid "Your request has been approved."
-msgstr ""
-
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr ""
-
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Käyttäjätunnuksesi tai salasanasi on väärä"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Postinumero"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Jälkeen"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr ""
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr ""
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "sallittu käyttäjälle %1"
-#: html/Search/Results.html:83
-msgid "chart"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "ennen"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
msgstr ""
-#: html/SelfService/Closed.html:49
+#: share/html/SelfService/Closed.html:53
msgid "closed"
+msgstr "valmis"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
msgstr ""
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "sisältää"
@@ -5956,6 +8323,10 @@ msgstr "sisältö"
msgid "content-type"
msgstr "sisällön tyyppi"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "correspondence (probably) not sent"
msgstr "kirjeenvaihtoa (luultavasti) ei ole lähetetty"
@@ -5964,7 +8335,22 @@ msgstr "kirjeenvaihtoa (luultavasti) ei ole lähetetty"
msgid "correspondence sent"
msgstr "kirjeenvaihto lähetetty"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "päivittäin"
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "päivää"
@@ -5974,91 +8360,138 @@ msgstr "poista"
#: lib/RT/Queue_Overlay.pm:87
msgid "deleted"
-msgstr "poistettu"
+msgstr "Poistettu"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
-#: html/Search/Elements/PickBasics:61
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "ei sisällä"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "ei sisällä"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "ei täsmää"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "lataa"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "on yhtäsuuri"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr ""
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr ""
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr ""
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr ""
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr ""
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr ""
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "filename"
msgstr "tiedostonimi"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "on suurempi kuin"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "ryhmä %1"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr ""
-
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "tuntia"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "numero"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "on"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "ei ole"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "on pienempi kuin"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "sisältää"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minuuttia"
@@ -6066,101 +8499,169 @@ msgstr "minuuttia"
msgid "modifications\\n\\n"
msgstr "muokkaukset\\n\\n"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "kuukausia"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "ei koskaan"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
-msgstr "uusi"
+msgstr "Uusi"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
-msgid "no name"
-msgstr ""
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "ei"
-#: html/Admin/Elements/EditScrips:64
-msgid "no value"
-msgstr ""
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr "ei nimeä"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "ei mitään"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "on erisuuri kuin"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "ei mitään"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "kohteet poistettiin onnistuneesti"
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "-"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr "päivänä"
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
-msgstr "avoin"
+msgstr "Käsittelyssä"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "avaa/sulje"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "muu"
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "oma ryhmä '%1' käyttäjälle '%2'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "lisäosa palautti tyhjän listan"
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
-msgstr "työjono %1 %2"
+msgstr "jono %1 %2"
#: lib/RT/Queue_Overlay.pm:86
msgid "rejected"
-msgstr "hylätty"
+msgstr "Hylätty"
#: lib/RT/Queue_Overlay.pm:85
msgid "resolved"
-msgstr "päätetty"
+msgstr "Valmis"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "oikealta vasemmalle"
-#: lib/RT/Date.pm:334
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sec"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr "objektit"
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr "näytä Hyväksynnät-välilehti"
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
-msgstr ""
+msgstr "näytä Asetukset-välilehti"
-#: html/Search/Results.html:80
-msgid "spreadsheet"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
msgstr ""
#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
-msgstr "jäädytetty"
+msgstr "Odottaa"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
-msgstr ""
+msgstr "yhteenveto"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "järjestelmä %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "järjestelmäryhmä '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "kutsuva komponentti ei eritellyt syytä"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "vakio-osoitteet jotka listataan Lähettäjä: ja Reply-To: kentissä viestien otsikkotiedoissa"
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "vakio-osoitteet jotka listataan Lähettäjä: ja Reply-To: kentissä viestien otsikkotiedoissa"
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
-msgstr "tapaus #%1 %2"
+msgstr "tiketti #%1 %2"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "ylhäältä alas"
#: NOT FOUND IN SOURCE
msgid "true"
msgstr "tosi"
-#: lib/RT/Group_Overlay.pm:236
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "äärimmäinen"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "kuvailematon ryhmä %1"
@@ -6169,20 +8670,45 @@ msgstr "kuvailematon ryhmä %1"
msgid "undescripbed group %1"
msgstr "kuvailematon ryhmä %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "käyttäjä %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "monisanainen"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "viikoittain"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "viikoittain (%1) klo %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "viikkoa"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "mitä porttia WWW-palvelimesi kuuntelee, esim. 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "otsikkotietojen kanssa"
+
#: NOT FOUND IN SOURCE
msgid "with template %1"
msgstr "pohjalla %1"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "vuosia"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "kyllä"
+
diff --git a/rt/lib/RT/I18N/fr.po b/rt/lib/RT/I18N/fr.po
index d51938a..94ea412 100644
--- a/rt/lib/RT/I18N/fr.po
+++ b/rt/lib/RT/I18N/fr.po
@@ -1,724 +1,901 @@
-# translation of fr.po to
# Copyright (c) 2002 Jesse Vincent <jesse@bestpractical.com>
-# valid as of 3.5-TESTING r3738
+# valid as of 3.8-TESTING
# jfenal <jfenal@gmail.com>, 2005.
# jfenal <jfenal@free.fr>, 2005.
# Emmanuel Lacour <elacour@easter-eggs.com>, 2008.
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2008-04-04 17:17+0200\n"
-"Last-Translator: Emmanuel Lacour <elacour@easter-eggs.com>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-08-19 13:50+0000\n"
+"Last-Translator: Emmanuel Lacour <Unknown>\n"
+"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.10.2\n"
-"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:117
-#. ($self->{CurrentSearch}{Object}->Description)
+#: NOT FOUND IN SOURCE
msgid " %1 deleted."
msgstr " %1 effacé."
-#: html/Widgets/SavedSearch:94
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 renamed to %2."
msgstr " %1 renommé en %2."
-#: html/Widgets/SavedSearch:107
-#. ($args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 saved."
msgstr " %1 sauvé."
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (pas de clef publique !)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (non vérifié !)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
msgstr "n°"
-#: html/Approvals/Elements/Approve:50 html/Approvals/Elements/ShowDependency:73 html/SelfService/Display.html:48 html/Ticket/Display.html:49 html/Ticket/Display.html:53
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "n°%1 : %2"
-#: html/Elements/ShowSearch:116
+#: NOT FOUND IN SOURCE
msgid "$1"
msgstr "$1"
-#: lib/RT/Record.pm:957
-#. ($label)
+#: NOT FOUND IN SOURCE
+msgid "$DAYS_OF_WEEK[$dow]."
+msgstr "$DAYS_OF_WEEK[$dow]."
+
+#: NOT FOUND IN SOURCE
+msgid "$MONTHS[$mon]."
+msgstr "$MONTHS[$mon]."
+
+#: NOT FOUND IN SOURCE
msgid "$prefix %1"
msgstr "$prefix %1"
-#: lib/RT/URI/fsck_com_rt.pm:258
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr "%1 n°%2"
-#: lib/RT/Date.pm:367
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: lib/RT/Tickets_Overlay.pm:1621
+#: lib/RT/Tickets_Overlay.pm:1696
#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#: lib/RT/Date.pm:403
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %3 %2 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr "%1 %3 %2 %4:%5 %6"
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1 %3 %2 %7 %4:%5:%6"
-#: lib/RT/Record.pm:1707 lib/RT/Transaction_Overlay.pm:668 lib/RT/Transaction_Overlay.pm:711
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 ajouté"
-#: lib/RT/Date.pm:364
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "il y a %1 %2"
-#: lib/RT/Record.pm:1714 lib/RT/Transaction_Overlay.pm:675
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 changé en %3"
-#: lib/RT/Record.pm:1711 lib/RT/Transaction_Overlay.pm:671 lib/RT/Transaction_Overlay.pm:717
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 supprimé"
-#: html/Admin/Elements/EditScrips:67 html/Admin/Elements/ListGlobalScrips:65 html/Ticket/Elements/PreviewScrips:105
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 supprimés"
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 renommés en %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 sauvés."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 avec le modèle %3"
-#: html/Ticket/Elements/ShowAttachments:74
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) par %3"
-#: html/SelfService/Update.html:62 html/Ticket/Elements/EditBasics:110 html/Ticket/Update.html:63 html/Ticket/Update.html:65 html/Tools/MyDay.html:71
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (inchangé)"
-#: bin/rt-crontool:239 bin/rt-crontool:246 bin/rt-crontool:252
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr "%1 (du panneau %2)"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr "%1 - Ajustez l'option de configuration LogToScreen"
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - Un paramètre à passer à %2"
-#: bin/rt-crontool:264
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Écrit les mises à jour de statuts sur STDOUT"
-#: bin/rt-crontool:255
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
msgstr "%1 - Précisez l'identifiant du modèle que vous souhaitez utiliser"
-#: bin/rt-crontool:258
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' transaction"
-msgstr "%1 - Précisez si vous souhaitez utiliser la première ou la dernière transaction"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Précisez si vous souhaitez utiliser la première (first), la dernière (last) ou toutes (all) les transactions"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
-#: bin/rt-crontool:249
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Précisez l'action que vous voulez utiliser"
-#: bin/rt-crontool:243
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Précisez par une liste séparée par des virgules, les types de transactions que vous souhaitez utiliser"
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Précisez la condition que vous voulez utiliser"
-#: bin/rt-crontool:236
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Précisez la recherche que vous voulez utiliser"
-#: bin/rt-crontool:261
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr "%1 - Précisez le type de transaction que vous souhaitez utiliser"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "%1 Tableaux de bord"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 Dashboards"
+msgstr "%1 tableaux de bord"
-#: html/Elements/Footer:58
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT %2 Copyright 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:152
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "ScripAction %1 chargée"
-#: lib/RT/Record.pm:1744
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 ajouté(e) comme valeur de %2"
-#: lib/RT/Link_Overlay.pm:146 lib/RT/Link_Overlay.pm:153
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 existe déjà et contient des tables RT mais ne contient pas les métadonnées RT. L'étape 'Initialiser la base de données' pourra insérer ces données dans cette base. Si cette solution vous convient, cliquez sur 'Personnalisation de base' ci-dessous pour continuer la configuration de RT."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 existe déjà mais ne contient pas de tables RT. L'étape 'Initialiser la base de données' pourra insérer ces tables et les données initiales dans cette base. Si cette solution vous convient, cliquez sur 'Personnalisation de base' ci-dessous pour continuer la configuration de RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 semble être un objet local, mais est introuvable dans la base de données"
-#: html/Ticket/Elements/ShowDates:75 lib/RT/Transaction_Overlay.pm:552
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 semble être complètement initialisé(e). Il ne sera pas nécessaire de créer des tables ou d'insérer les données de bases mais vous pouvez continuer à personnaliser RT en cliquant 'Personnalisation de base' ci-dessous"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 par %2"
-#: lib/RT/Record.pm:534 lib/RT/Transaction_Overlay.pm:619 lib/RT/Transaction_Overlay.pm:809 lib/RT/Transaction_Overlay.pm:818 lib/RT/Transaction_Overlay.pm:821
-#. ($args{'Field'}, ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 changé(e) de %2 à %3"
-#: html/Search/Build.html:215
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "graphique %1 par %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "copie de %1"
-#: lib/RT/Record.pm:961
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr "Configuration centrale %1"
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 n'a pas pu être positionné à %2."
-#: lib/RT/Ticket_Overlay.pm:2789
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 ne peut pas mettre le statut à résolu. La base de données RT est peut être incohérente."
-#: lib/RT/Transaction_Overlay.pm:592
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 créé(e)"
-#: lib/RT/Transaction_Overlay.pm:597
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 supprimé(e)"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "%1 désactivé(e)"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 n'existe pas."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "%1 activé(e)"
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "Mes %1 tickets de plus haute priorité"
-#: bin/rt-crontool:231
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 est un outil agissant sur les tickets depuis un ordonnanceur externe tel que cron."
-#: lib/RT/Queue_Overlay.pm:867
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 est un utilitaire, destiné a être lancé via cron, qui envoi une compilation par utilisateur des notifications RT en attente."
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 n'est plus un %2 pour cette file."
-#: lib/RT/Ticket_Overlay.pm:1576
+#: lib/RT/Ticket_Overlay.pm:1274
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
msgstr "%1 n'est plus un %2 pour ce ticket."
-#: lib/RT/Record.pm:1801
+#: lib/RT/Record.pm:1807
#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 n'est plus une valeur pour le champs personnalisé %2"
-#: html/Ticket/Elements/ShowTime:49 html/Ticket/Elements/ShowTime:51
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 min"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
-msgstr "Les %1 derniers tickets sans propriétaire"
+msgstr "Les %1 derniers tickets sans intervenant"
-#: lib/RT/CustomField_Overlay.pm:896
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 objets"
-#: html/User/Elements/DelegateRights:99
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "droits de %1"
-#: lib/RT/Action/ResolveMembers.pm:65
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr "Configuration de site %1"
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 mise à jour: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 mise à jour: Aucun changement"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 mis à jour"
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 résoudra tous les membres d'un ticket groupé résolu."
-#: lib/RT/CustomField_Overlay.pm:897
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1 de %2 objets"
-#: lib/RT/CustomField_Overlay.pm:898
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1 de %2 de %3 objets"
-#: html/Search/Elements/SearchPrivacy:54 html/Search/Elements/SelectSearchObject:57 html/Search/Elements/SelectSearchesForObjects:59
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "Tableaux de bord de %1"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "Recherches sauvées de %1"
-#: lib/RT/Transaction_Overlay.pm:502
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1 : pas d'attachement spécifié"
-#: html/Ticket/Elements/ShowTransactionAttachments:80
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1o"
-#: html/Ticket/Elements/ShowTransactionAttachments:77
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:51
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr "%quant(%1,heure)"
-#: lib/RT/Ticket_Overlay.pm:1144
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' est un statut invalide"
-#: html/Admin/Elements/EditCustomFieldValues:52 html/Admin/Elements/EditQueueWatchers:52 html/Admin/Elements/EditScrips:58 html/Admin/Elements/EditTemplates:59 html/Admin/Groups/Members.html:75 html/Elements/EditLinks:56 html/Ticket/Elements/EditPeople:69 html/User/Groups/Members.html:78
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Cocher la case pour supprimer)"
-#: html/Ticket/Elements/PreviewScrips:101
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Cocher les cases pour désactiver les notifications aux destinataires listés)"
-#: html/Ticket/Elements/PreviewScrips:125
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Cocher les cases pour activer les notifications aux destinataires listés)"
-#: html/Ticket/Create.html:221
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Entrer le numéro du ticket ou son URL, séparés par des espaces)"
-#: html/Admin/Queues/Modify.html:77 html/Admin/Queues/Modify.html:83
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
-msgstr "(Si à laissé blanc, le défaut sera %1)"
+msgstr "(Si vide, le défaut sera %1)"
-#: html/Admin/Elements/EditCustomFields:76 html/Admin/Elements/ListGlobalCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Pas de champ personnalisé)"
-#: html/Admin/Groups/Members.html:73 html/User/Groups/Members.html:76
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Aucun membre)"
-#: html/Admin/Elements/EditScrips:55 html/Admin/Elements/ListGlobalScrips:50
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Aucun Scrip)"
-#: html/Admin/Elements/EditTemplates:54
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Aucun modèle)"
-#: html/Admin/Elements/PickCustomFields:49 html/Admin/Elements/PickObjects:49
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Aucun)"
-#: html/Ticket/Update.html:92
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(Transmettre une copie cachée de cette mise à jour à une liste d'adresse mail séparée par des virgules. Cela ne modifie <strong>pas</strong> ceux qui recevront les mises à jour futures.)"
-
-#: html/Ticket/Create.html:105
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(Transmettre une copie de cette mise à jour à une liste d'adresses mail séparées par des virgules. Ces personnes <strong>recevront</strong> les mises à jour suivantes.)"
+msgstr "(Transmettre une copie de cette mise à jour à une liste d'adresses courriel administratives séparées par des virgules. Ces personnes <strong>recevront</strong> les mises à jour suivantes.)"
-#: html/Ticket/Update.html:88
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(Transmettre une copie de cette mise à jour à une liste d'adresses mail séparées par des virgules. Ceci <b>ne changera pas</b> les destinataires des mises à jour suivantes.)"
-
-#: html/Ticket/Create.html:95
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(Transmettre une copie de cette mise à jour à une liste d'adresses mail séparées par des virgules. Ces personnes <strong>recevront</strong> les mises à jour suivantes.)"
+msgstr "(Transmettre une copie de cette mise à jour à une liste d'adresses courriel séparées par des virgules. Ces personnes <strong>recevront</strong> les mises à jour suivantes.)"
-#: html/Admin/Elements/EditScrip:98
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Utilisez ces champs lorsque vous sélectionnez « Défini par l'utilisateur » pour une condition ou une action)"
-#: html/Ticket/Elements/EditWatchers:62 html/Ticket/Elements/ShowUserEntry:55
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
-msgstr "(Ne sera pas envoyé par email)"
+msgstr "(Ne sera pas envoyé par courriel)"
-#: html/Tools/MyDay.html:53
-#. ($session{'CurrentUser'}->Name)
-msgid "(displaying new and open tickets for %1)"
-msgstr "(affichage des tickets nouveaux et ouverts pour %1)"
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(tous)"
-#: html/Admin/Groups/index.html:59 html/User/Groups/index.html:56
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(vide)"
-#: html/Admin/Users/index.html:62
-msgid "(no name listed)"
-msgstr "(aucun nom)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(pas de clé publique!)"
-#: html/Admin/Elements/SelectRights:74 html/Elements/EditCustomFieldSelect:71 html/Elements/SelectCustomFieldValue:53 html/Elements/ShowCustomFields:56 html/Search/Chart:134 html/Search/Elements/Chart:78 lib/RT/Transaction_Overlay.pm:612
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(sans information)"
-#: html/Admin/Elements/EditCustomFieldValues:49
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(aucune valeur)"
-#: html/Elements/EditLinks:133 html/Ticket/Elements/BulkLinks:51
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(un seul ticket)"
-#: html/Elements/RT__Ticket/ColumnMap:151
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(attente de %quant(%1, autres tickets))"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(en attente d'approbation)"
-#: html/Elements/RT__Ticket/ColumnMap:154
-msgid "(pending other Collection)"
-msgstr "(en attente d'autres Collection)"
-
-#: html/Admin/Users/Modify.html:73
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(exigé)"
-#: html/Ticket/Elements/ShowTransactionAttachments:84
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(confiance: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(sans titre)"
-#: html/Ticket/Elements/Reminders:135
-msgid "(yyyy/mm/dd)"
-msgstr "(yyyy/mm/dd)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(n'est pas de confiance !)"
-#: html/Elements/EditCustomFieldSelect:59
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr "-"
-#: bin/rt-crontool:97
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr "l'argument pour --transaction ne peut être que 'first' ou 'last'"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "l'argument pour --transaction ne peut être que 'first', 'last' ou 'all'"
-#: html/Ticket/Elements/ShowBasics:55
+#: NOT FOUND IN SOURCE
+msgid "1995-11-25 21:59:12"
+msgstr "1995-11-25 21:59:12"
+
+#: NOT FOUND IN SOURCE
+msgid "1995-11-25T21:59:12Z"
+msgstr "1995-11-25T21:59:12Z"
+
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Ticket->Statut%>"
-#: html/Elements/SelectTicketTypes:50
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:50
+#: NOT FOUND IN SOURCE
msgid "<%$_%>"
msgstr "<%$_%>"
-#: html/Search/Elements/DisplayOptions:75
+#: NOT FOUND IN SOURCE
msgid "<%$field%>"
msgstr "<%$field%>"
-#: html/Elements/CreateTicket:49
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr "<input type=\"submit\" class=\"button\" value=\"Créer un ticket dans\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:785
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Créer un ticket dans\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Tous les flux iCal contiennent un code secret qui vous autorise à y accéder. Si une des URLs de vos flux iCal ont a été révélé à des personnes non souhaitées, vous pouvez obtenir un nouveau code, <b> ceci rendra inaccessibles tous les flux iCal existants</b> ci-dessous.</p>"
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Un modèle vide"
-#: html/Admin/Users/Modify.html:375
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Pas de mot de passe spécifié, l'utilisateur ne pourra donc pas se connecter."
-#: lib/RT/ACE_Overlay.pm:176 lib/RT/Principal_Overlay.pm:221
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE non trouvé"
-#: lib/RT/ACE_Overlay.pm:855
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "Les ACE peuvent seulement être créés et effacés."
-#: html/Search/Elements/SelectAndOr:48
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "ET"
-#: html/User/Elements/Tabs:55
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "A propos"
-#: html/Admin/Users/Modify.html:108
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "contrôle d'accès"
-#: html/Admin/Elements/EditScrip:67
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Action"
-#: lib/RT/Scrip_Overlay.pm:174
+#: lib/RT/Scrip_Overlay.pm:136
#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "Action %1 non trouvée"
+msgid "Action '%1' not found"
+msgstr "Action '%1' non trouvée"
-#: bin/rt-crontool:173
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Action validée.\\n"
-#: lib/RT/Scrip_Overlay.pm:170
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr "L'argument 'Action' est obligatoire"
-#: bin/rt-crontool:169
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Action préparée..."
-#: html/Search/Build.html:87
-msgid "Add"
-msgstr "Ajouter"
-
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Ajouter AdminCC"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Ajouter un signet"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Ajouter CC"
-#: html/Search/Elements/EditFormat:51
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Ajouter des colonnes"
-#: html/Search/Elements/PickCriteria:48
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Ajouter un critère"
-#: html/Ticket/Create.html:149 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Ajouter d'autres fichiers"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Ajouter Demandeur"
-#: html/Admin/Elements/AddCustomFieldValue:48
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Ajouter une valeur"
-#: html/Admin/Global/Scrip.html:85
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Ajouter un scrip qui s'applique à toutes les files"
-#: html/Search/Build.html:111 html/Search/Build.html:96
-msgid "Add and Search"
-msgstr "Ajouter et rechercher"
-
-#: html/Search/Bulk.html:126
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Ajouter des commentaires ou des réponses aux tickets sélectionnés"
-#: html/Admin/Groups/Members.html:65 html/User/Groups/Members.html:62
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Ajouter des membres"
-#: html/Admin/Queues/People.html:89 html/Ticket/Elements/AddWatchers:51
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Ajouter de nouveaux observateurs"
-#: html/Search/Build.html:87
-msgid "Add these terms to your search"
-msgstr "Ajouter ces termes à la recherche"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Ajouter ces termes"
-#: html/Search/Bulk.html:160
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Ajouter ces termes et rechercher"
+
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "Ajouter les valeurs"
-#: lib/RT/CustomField_Overlay.pm:110
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Ajouter, retirer et modifier des champs personnalisés pour les objets"
-#: lib/RT/Queue_Overlay.pm:758
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Ajout groupe/utilisateur comme %1 pour cette file"
-#: lib/RT/Ticket_Overlay.pm:1448
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Ajout groupe/utilisateur comme %1 pour ce ticket"
-#: html/Admin/Users/Modify.html:149 html/User/Prefs.html:135
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Adresse"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adresse1"
-#: html/Admin/Users/Modify.html:154 html/User/Prefs.html:139
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adresse2"
-#: html/Ticket/Create.html:100
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Commentaire Admin"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
-msgstr "Correspondance Admin "
+msgstr "Correspondance Admin"
-#: html/Admin/Queues/index.html:48 html/Admin/Queues/index.html:51
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Administrateurs de files"
-#: html/Admin/Global/index.html:49 html/Admin/Global/index.html:51
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Configuration globale / administration"
-#: NOT FOUND IN SOURCE
-#. FIXME: loc_pair: lib/RT/System.pm:78
+#: lib/RT/System.pm:81
msgid "AdminAllPersonalGroups"
-msgstr "GérerGroupesPersonnels"
+msgstr ""
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:62 lib/RT/ACE_Overlay.pm:115
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "AdminCCGroup"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCcs"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "GérerChampPersonnalisé"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "GérerGroupes"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "GérerAppartenanceGroupes"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "GérerGroupesPersonnelsPropres"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:92
msgid "AdminQueue"
msgstr "GérerFile"
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "GérerUtilisateurs"
-#: html/Admin/Queues/People.html:71 html/Ticket/Elements/EditPeople:77
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Cc Administratif"
-#: html/Ticket/Elements/Tabs:218
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Mot de passe administrateur"
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Avancé"
-#: html/Elements/SelectDateRelation:59
-msgid "After"
-msgstr "Après"
-
-#: html/Search/Elements/PickCriteria:54
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Aggrégateur"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Toutes les approbations obtenues"
-#: html/Admin/Queues/index.html:77
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Toutes les files"
-#: html/Search/Elements/EditQuery:58
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Déjà chiffré"
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "Et/Ou"
-#: html/Admin/CustomFields/Modify.html:75 html/Admin/Elements/CustomFieldTabs:85
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "S'applique à"
-#: html/Search/Edit.html:66
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Appliquer"
-#: html/Search/Edit.html:66
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Appliquer vos changements"
-#: html/Elements/Tabs:80
+#: share/html/Elements/Tabs:98
msgid "Approval"
-msgstr "Approbations"
+msgstr "Approbation"
-#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:65 html/Approvals/index.html:88
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Approbation #%1 : %2"
-#: html/Approvals/index.html:77
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Approbation #%1 : Notes non enregistrées à cause d'une erreur système"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Approbation #%1 : Notes enregistrées"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
-msgstr "Approbations obtenues"
+msgstr "Approbation obtenue"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Approbation prête pour l'intervenant"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
-msgstr "Approbations refusées"
+msgstr "Approbation refusée"
-#: html/Approvals/Elements/Approve:71
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Approuver"
-#: etc/initialdata:504 etc/initialdata:506
-#. (# loc $note)
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Notes de l'approbateur : %1"
-#: lib/RT/Date.pm:446
-msgid "Apr."
-msgstr "Avr."
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Avr"
+
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "Avril"
-#: html/Search/Elements/DisplayOptions:83
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr "Asc"
-#: html/Elements/SelectSortOrder:58
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Croissant"
@@ -730,528 +907,823 @@ msgstr "Fixer et supprimer les champs personnalisés"
msgid "AssignCustomFields"
msgstr "FixerChampsPersonnalisés"
-#: html/Search/Bulk.html:144 html/SelfService/Update.html:89 html/Ticket/ModifyAll.html:117 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Attaché"
-#: html/SelfService/Create.html:94 html/Ticket/Create.html:145
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Attacher un fichier"
-#: html/SelfService/Update.html:77 html/Ticket/Create.html:133 html/Ticket/Update.html:96
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Fichier attaché"
-#: html/Ticket/ShowEmailRecord.html:54 html/Ticket/ShowEmailRecord.html:58 html/Ticket/ShowEmailRecord.html:61
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Attachement"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Attachement '%1' ne peut pas être chargé"
-#: lib/RT/Transaction_Overlay.pm:510
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Attachement créé"
-#: lib/RT/Tickets_Overlay.pm:2071
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Nom de fichier de l'attachement"
-#: html/Ticket/Elements/ShowAttachments:49
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Attachements"
-#: lib/RT/Attributes_Overlay.pm:173
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Le chiffrement des attachements est désactivé"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Attribut supprimé"
-#: lib/RT/Date.pm:450
-msgid "Aug."
-msgstr "Aoû."
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Aoû"
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "Août"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "RéponseAuto"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Réponse automatique aux demandeurs"
-#: html/Widgets/SelectionBox:191
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Disponible"
-#: html/Admin/Elements/CustomFieldTabs:67 html/Admin/Elements/GroupTabs:62 html/Admin/Elements/QueueTabs:62 html/Admin/Elements/UserTabs:60 html/Ticket/Elements/Tabs:115 html/User/Elements/GroupTabs:61
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "Copie cachée"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Retour"
+
+#: NOT FOUND IN SOURCE
+msgid "Back: "
+msgstr "Retour: "
+
+#: NOT FOUND IN SOURCE
+msgid "Back: Customize Basics"
+msgstr "Retour: Configuration initiale"
+
+#: NOT FOUND IN SOURCE
+msgid "Back: Customize Database Details"
+msgstr "Retour: Configuration de la base de données"
+
+#: NOT FOUND IN SOURCE
+msgid "Back: Customize Email Addresses"
+msgstr "Retour: Configuration des adresses de courriel"
+
+#: NOT FOUND IN SOURCE
+msgid "Back: Customize Password for Users in RT"
+msgstr "Retour: Configuration des mots de passe des utilisateurs dans RT"
+
+#: NOT FOUND IN SOURCE
+msgid "Back: Customize Sendmail"
+msgstr "Retour: Configurer Sendmail"
+
+#: NOT FOUND IN SOURCE
+msgid "Back: Select Database Type"
+msgstr "Retour: Choix de la base de données"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr "Mauvaise sécurité pour l'attribut %1"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Essentiel"
-#: html/Ticket/Update.html:90
-msgid "Bcc"
-msgstr "Bcc"
-
-#: html/Admin/CustomFields/GroupRights.html:93 html/Admin/CustomFields/UserRights.html:76 html/Admin/Elements/EditScrip:91
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Assurez-vous de sauvegarder vos modifications"
-#: html/Elements/SelectDateRelation:57 lib/RT/CurrentUser.pm:363
-msgid "Before"
-msgstr "Avant"
-
-#: html/Elements/Logo:49
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Logo d'entreprise de Best Practical Solutions, LLC"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Vide"
-#: html/Search/Elements/EditFormat:86
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Corps"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Gras"
-#: html/Search/Results.html:81
-msgid "Bookmarkable link"
-msgstr "Lien prédéfini"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Signet"
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:71
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Tickets favoris"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "En-têtes courts"
-#: html/Ticket/Elements/Tabs:228
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Màj en masse"
-#: lib/RT/User_Overlay.pm:1855
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Support commercial"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Par défaut, RT utilisera le fuseau horaire configuré au sur votre système. Vous pouvez configurer une valeur par défaut pour l'affichage des dates et heures dans RT. Vos utilisateurs pourront choisir un fuseau différent dans leurs préférences."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "CCGroup"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr "CF"
+
+#: NOT FOUND IN SOURCE
+msgid "Calendar"
+msgstr "Calendrier"
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Les utilisateurs système ne peuvent être modifiés"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:91
msgid "Can this principal see this queue"
msgstr "Le groupe/utilisateur peut-il voir cette file"
-#: lib/RT/CustomField_Overlay.pm:382
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Impossible d'ajouter une valeur de champ personnalisé sans un nom"
-#: html/Admin/CustomFields/Objects.html:88
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "Impossible de trouver une collection pour la classe '%1'"
-#: html/Search/Build.html:288
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Impossible de trouver une recherche sauvée et de l'utiliser"
-#: lib/RT/Link_Overlay.pm:161
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Un ticket ne peut être lié à lui même"
-#: html/Widgets/SavedSearch:110
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr "Impossible de sauvegarder %1"
-#: html/Search/Build.html:292
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Impossible de sauver cette recherche"
-#: lib/RT/Record.pm:1304 lib/RT/Record.pm:1380
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Impossible de spécifier à la fois la base et la cible"
-#: html/autohandler:206
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Impossible de créer des tickets dans une file désactivée."
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Impossible de créer l'utilisateur : %1"
-#: html/Admin/Elements/AddCustomFieldValue:64 html/Admin/Elements/EditCustomFieldValues:60
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Catégorie"
-#: etc/initialdata:50 html/Admin/Queues/People.html:67 html/SelfService/Create.html:73 html/Ticket/Create.html:90 html/Ticket/Elements/EditPeople:74 html/Ticket/Elements/ShowPeople:58 html/Ticket/Update.html:85 lib/RT/ACE_Overlay.pm:114
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Catégorie non sélectionnée"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:54
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Ccs"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Changer"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Changer le mot de passe"
-#: html/Elements/Submit:80
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Tout cocher"
-#: html/SelfService/Update.html:80 html/Ticket/Create.html:136 html/Ticket/Update.html:99
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Contrôler la connection à la base de données"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr "Vérifie les Identifiants sur la Base"
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Cocher la case pour supprimer"
-#: html/Admin/Elements/SelectRights:57
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Cocher la case pour retirer le droit"
-#: html/Elements/EditLinks:149 html/Elements/EditLinks:86 html/Elements/ShowLinks:80 html/Ticket/Create.html:226 html/Ticket/Elements/BulkLinks:66
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Contrôler vos identifiants de base de données"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Fils"
-#: html/NoAuth/js/util.js:203
-msgid "Choose a date"
-msgstr "Choisissez une date"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr "Choisissez le moteur de base de données"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Choisir un moteur de base de données"
-#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:143
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Ville"
-#: html/Tools/MyDay.html:76 html/Widgets/SelectionBox:214
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
msgid "Clear"
msgstr "Effacer"
-#: html/Elements/Submit:82
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Tout effacer"
-#: html/Helpers/CalPopup.html:53
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Cliquer \"Terminer l'installation\" pour terminer."
+
+#: NOT FOUND IN SOURCE
+msgid "Click \"Initialize Database\" to begin creating the database. This may take a few moments"
+msgstr "Cliquer \"Initialiser la base de données\" pour commencer la création de la base. Cela peu durer quelques instants"
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Cliquer \"Initialiser la base de données\" pour créer la base de données RT et insérer les éléments de base. Cela peu durer quelques instants"
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Fermer la fenêtre"
-#: html/Ticket/Elements/ShowDates:70
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Fermé"
-#: html/SelfService/Closed.html:48 html/SelfService/Elements/Tabs:81
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Tickets fermés"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Boîte combo : Sélectionnez ou saisissez plusieurs valeurs"
-#: lib/RT/CustomField_Overlay.pm:92
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Boîte combo : Sélectionnez ou saisissez une valeur"
-#: lib/RT/CustomField_Overlay.pm:93
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Boîte combo : Sélectionner ou saisir au plus %1 valeurs"
-#: html/Ticket/Elements/ShowTransaction:193 html/Ticket/Elements/Tabs:187
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Commenter"
-#: html/Admin/Queues/Modify.html:81
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Adresse de commentaire"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Adresse de commentaire"
+
#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Commentaire sur le ticket"
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "Adresse de commentaire"
+
#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "CommenterTicket"
-#: html/Tools/MyDay.html:67
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Commentaires"
-#: html/Ticket/ModifyAll.html:93 html/Ticket/Update.html:77
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Commentaires (non envoyés aux demandeurs)"
-#: html/Search/Bulk.html:130
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Commentaires (non envoyés aux demandeurs)"
-#: html/Admin/Users/Modify.html:229 html/Ticket/Elements/ShowRequestor:69
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Commentaires sur cet utilisateur"
-#: lib/RT/Transaction_Overlay.pm:655
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Commentaires ajoutés"
-#: lib/RT/Action/Generic.pm:177
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "tr(Commit Stubbed)"
-#: html/Admin/Elements/EditScrip:61
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Condition"
-#: lib/RT/Scrip_Overlay.pm:186
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Condition '%1' non trouvée"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr "L'argument condition est obligatoire"
-#: bin/rt-crontool:153
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "La condition satisfait..."
-#: lib/RT/Scrip_Overlay.pm:190
-msgid "Condition not found"
-msgstr "Condition non trouvée"
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Condition, Action et Modèle"
-#: html/Elements/Tabs:87
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Le fichier de configuration %1 est blocké"
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Configuration"
-#: html/SelfService/Prefs.html:56
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Confirmer"
-#: html/Admin/Elements/ModifyTemplate:67 html/Elements/SelectAttachmentField:50 html/Ticket/ModifyAll.html:121
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Connexion réussie"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Contenu"
-#: html/Elements/SelectAttachmentField:51
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Type de contenu"
-#: html/Search/Elements/EditSearches:67
-msgid "Copy"
-msgstr "Copier"
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "TypeDeContenu"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "Adresse de réponse"
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr "Addresse de réponse"
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Courrier"
-#: lib/RT/Transaction_Overlay.pm:651
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Courrier ajouté"
-#: lib/RT/Record.pm:1682 lib/RT/Record.pm:1729
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
#. ($value_msg)
+#. ($msg)
msgid "Could not add new custom field value: %1"
msgstr "Impossible d'ajouter la nouvelle valeur de champ personnalisé: %1"
-#: lib/RT/Ticket_Overlay.pm:3062 lib/RT/Ticket_Overlay.pm:3070 lib/RT/Ticket_Overlay.pm:3087
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "Impossible de changer l'intervenant. "
-#: html/Admin/CustomFields/Modify.html:163
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Impossible de changer l'ntervenant : %1"
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Impossible de créer le champ personnalisé"
-#: html/Admin/Elements/EditCustomField:115
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "Impossible de créer le champ personnalisé : %1"
-#: html/User/Groups/Modify.html:100 lib/RT/Group_Overlay.pm:496 lib/RT/Group_Overlay.pm:503
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Impossible de créer un groupe"
-#: html/Admin/Global/Template.html:94 html/Admin/Queues/Template.html:95
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Impossible de créer le modèle : %1"
-#: lib/RT/Ticket_Overlay.pm:1077 lib/RT/Ticket_Overlay.pm:409
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Impossible de créer le ticket dans la file désactivée \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Impossible de créer un ticket. File non indiquée"
-#: lib/RT/User_Overlay.pm:257 lib/RT/User_Overlay.pm:271 lib/RT/User_Overlay.pm:280 lib/RT/User_Overlay.pm:289 lib/RT/User_Overlay.pm:298 lib/RT/User_Overlay.pm:312 lib/RT/User_Overlay.pm:322 lib/RT/User_Overlay.pm:498
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Impossible de créer l'utilisateur"
-#: lib/RT/Queue_Overlay.pm:737 lib/RT/Ticket_Overlay.pm:1416
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Impossible de trouver ou créer cet utilisateur"
-#: lib/RT/Queue_Overlay.pm:804 lib/RT/Ticket_Overlay.pm:1497
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Impossible de trouver ce groupe ou utilisateur"
-#: html/Admin/CustomFields/Objects.html:71
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Impossible de charger l'attribut %1"
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Impossible de charger le champ personnalisé %1"
-#: html/Admin/Groups/Members.html:114 html/User/Groups/Members.html:113 html/User/Groups/Modify.html:105
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Impossible de charger ce groupe"
-#: lib/RT/SavedSearch.pm:121
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "Impossible de charger l'objet pour %1"
-#: lib/RT/SavedSearch.pm:199
-msgid "Could not load search attribute"
-msgstr "Impossible de charger l'attribut de recherche"
-
-#: lib/RT/Queue_Overlay.pm:756
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour cette file"
-#: lib/RT/Ticket_Overlay.pm:1437
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour ce ticket"
-#: lib/RT/Queue_Overlay.pm:864
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Impossible de supprimer ce groupe/utilisateur comme un %1 pour cette file"
-#: lib/RT/Ticket_Overlay.pm:1564
+#: lib/RT/Ticket_Overlay.pm:1262
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
msgstr "Impossible de supprimer ce groupe/utilisateur comme un %1 pour ce ticket"
-#: lib/RT/User_Overlay.pm:193
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Impossible de sauver les informations utilisateur"
-#: lib/RT/Transaction_Overlay.pm:161
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr "Impossible d'ajouter la pièce jointe"
-#: lib/RT/Group_Overlay.pm:1005
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Impossible d'ajouter un membre à ce groupe"
-#: lib/RT/Record.pm:1741 lib/RT/Record.pm:1793
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Impossible de créer une transaction : %1"
-#: lib/RT/Record.pm:970
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Impossible de créer l'enregistrement"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Impossible de supprimer le tableau de bord %1: %2"
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Colonne introuvable"
-#: lib/RT/Group_Overlay.pm:979
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Impossible de trouver une transaction adaptée, ignoré"
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Groupe/utilisateur introuvable"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Valeur introuvable"
-#: lib/RT/CurrentUser.pm:147
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Impossible de charger %1 depuis la base des utilisateurs.\\n"
-#: html/Admin/CustomFields/UserRights.html:151
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "Impossible de charger la classe %1"
-#: html/Admin/CustomFields/GroupRights.html:109
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Impossible de charger le champs personnalisé #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "Impossible de charger le champ personnalisé %1"
-#: lib/RT/Ticket_Overlay.pm:2009
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr "Impossible de charger une copie du ticket #%1."
-#: html/Admin/Groups/GroupRights.html:111 html/Admin/Groups/UserRights.html:98
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Impossible de charger le tableau de bord %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Impossible de charger le tableau de bord %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Impossible de charger le groupe #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Impossible de charger le groupe %1"
-#: lib/RT/Link_Overlay.pm:204 lib/RT/Link_Overlay.pm:213 lib/RT/Link_Overlay.pm:240
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Impossible de charger le lien"
-#: html/Admin/Elements/ObjectCustomFields:85 html/Admin/Queues/CustomFields.html:61 html/Admin/Users/CustomFields.html:61
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Impossible de charger l'objet %1"
-#: html/Admin/Queues/People.html:144
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Impossible de charger ou de créer l'utilisateur: %1"
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Impossible de charger la file"
-#: html/Admin/Queues/GroupRights.html:124 html/Admin/Queues/UserRights.html:95
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Impossible de charger la file #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "Impossible de charger la file %1"
-#: html/Admin/Elements/EditScrip:128 html/Admin/Elements/EditScrip:169
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Impossible de charger la file '%1'"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr "Impossible de charger le scrip #%1"
-#: html/SelfService/Display.html:160 lib/RT/Action/CreateTickets.pm:682
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Impossible de charger le modèle #%1"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "Impossible de charger le ticket '%1'"
-#: lib/RT/Ticket_Overlay.pm:2637
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "Impossible de charger la transaction #%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Impossible de charger l'utilisateur #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Impossible d'analyser l'adresse de la chaîne de caractère '%1'"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Impossible de remplacer le contenu avec des données déchiffrées: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Impossible de remplacer le contenu par des données chiffrées: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
msgstr "Impossible de convertir '%1' en URI."
-#: lib/RT/Link_Overlay.pm:113
+#: lib/RT/Link_Overlay.pm:100
#. ($args{'Base'})
msgid "Couldn't resolve base '%1' into a URI."
msgstr "Impossible de résoudre la base '%1' en URI."
-#: lib/RT/Link_Overlay.pm:128
+#: lib/RT/Link_Overlay.pm:115
#. ($args{'Target'})
msgid "Couldn't resolve target '%1' into a URI."
msgstr "Impossible de résoudre la cible '%1' en URI."
-#: html/Admin/Users/Modify.html:176 html/User/Prefs.html:155
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Impossible d'envoyer le courriel"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "Impossible de mettre %1 observateur: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "Impossible de sélectionner la clefs privée"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Impossible de désélectionner la clefs privée"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Pays"
-#: html/Admin/Elements/CreateUserCalled:49 html/Admin/Elements/EditCustomField:86 html/Admin/Elements/EditScrip:135 html/Admin/Global/Template.html:67 html/Admin/Queues/Template.html:68 html/Elements/QuickCreate:67 html/Ticket/Create.html:171 html/Ticket/Create.html:238
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Ajouter"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Ajouter des tickets"
-#: html/Admin/CustomFields/Modify.html:152 html/Admin/Elements/EditCustomField:98
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Ajouter un Champ Personnalisé"
-#: html/Admin/Queues/CustomField.html:71
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Ajouter un champ personnalisé pour la file %1"
-#: html/Admin/Groups/Modify.html:105 html/Admin/Groups/Modify.html:131
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Créer un nouveau tableau de bord"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Ajouter un nouveau groupe"
-#: html/User/Groups/Modify.html:115 html/User/Groups/Modify.html:90
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Ajouter un nouveau groupe personnel"
-#: html/Ticket/Create.html:49 html/Ticket/Create.html:53 html/Ticket/Create.html:62
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Ajouter un nouveau ticket"
-#: html/Admin/Users/Modify.html:256 html/Admin/Users/Modify.html:318
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Ajouter un nouvel utilisateur"
-#: html/Admin/Queues/Modify.html:127
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Ajouter une file"
-#: html/Admin/Queues/Scrip.html:91
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Ajouter un scrip pour la file %1"
-#: html/Admin/Global/Template.html:87 html/Admin/Queues/Template.html:88
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Ajouter un modèle"
-#: html/SelfService/Create.html:48 html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Ajouter un ticket"
-#: etc/initialdata:137
+#: NOT FOUND IN SOURCE
+msgid "Create and modify dashboards"
+msgstr "Créer et modifier les tableaux de bord"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Créer des tableaux de bord pour ce groupe"
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Ajouter de nouveaux tickets basés sur le modèle de ce scrip"
-#: html/SelfService/Create.html:107
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Créer des tableaux de bord personnels"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Créer des tableaux de bord systèmes"
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Ajouter un ticket"
@@ -1259,23 +1731,43 @@ msgstr "Ajouter un ticket"
msgid "Create tickets in this queue"
msgstr "Ajouter des tickets dans cette file"
-#: lib/RT/CustomField_Overlay.pm:108
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Créer des tickets hors-ligne"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Ajouter, supprimer et modifier des champs personnalisés"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:92
msgid "Create, delete and modify queues"
msgstr "Ajouter, supprimer et modifier les files"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Ajouter, supprimer et modifier les membres d'un groupe personnel"
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Ajouter, supprimer et modifier les utilisateurs"
-#: lib/RT/System.pm:89
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "CréerTableauDeBord"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "CréerTableauDeBordDeGroupe"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "CréerTableauDeBordPersonnel"
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr "CréerRechercheSauvée"
@@ -1283,1238 +1775,2054 @@ msgstr "CréerRechercheSauvée"
msgid "CreateTicket"
msgstr "CréerTicket"
-#: html/Elements/SelectDateType:49 html/Ticket/Elements/ShowDates:50 lib/RT/Ticket_Overlay.pm:1171
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Créé"
-#: html/Admin/CustomFields/Modify.html:165 html/Admin/Elements/EditCustomField:119
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Créé Par"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Champ Personnalisé %1 créé"
-#: html/Tools/Reports/Elements/Tabs:65
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr "Créé dans une période"
-#: html/Tools/Reports/CreatedByDates.html:54
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Tickets créés dans une période, groupés par l'état"
-#: html/Search/Elements/PickBasics:104
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "CrééPar"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr "CrééDepuis"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Créateur"
-#: html/Elements/EditLinks:51
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Chiffrement"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Liens courants"
-#: html/Admin/Elements/EditScrips:53
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Scrips actuels"
-#: html/Admin/Groups/Members.html:62 html/User/Groups/Members.html:65
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Membres actuels"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Droits actuels"
-#: html/Search/Elements/EditQuery:49
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Recherche courante"
-#: html/Admin/Queues/People.html:64 html/Ticket/Elements/EditPeople:68
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Observateurs actuels"
-#: html/Admin/Elements/SystemTabs:63 html/Admin/Elements/Tabs:64 html/Admin/Global/index.html:73 html/Admin/Users/Modify.html:209 html/Admin/index.html:79 html/Ticket/Elements/ShowSummary:58
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Champs personnalisés"
-#: html/Admin/CustomFields/index.html:62
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Champs personnalisés pour %1"
-#: html/Admin/Elements/EditScrip:109
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Programme de nettoyage d'action personnalisé"
-#: html/Admin/Elements/EditScrip:105
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
-msgstr "Programme de préparation d'action personnalisé "
+msgstr "Programme de préparation d'action personnalisé"
-#: html/Admin/Elements/EditScrip:101
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Condition personnalisée"
-#: lib/RT/Tickets_Overlay.pm:2556
+#: lib/RT/Tickets_Overlay.pm:2610
#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Champs personnalisé %1 %2 %3"
-#: lib/RT/Record.pm:1625
+#: lib/RT/Record.pm:1609
#. ($args{'Field'})
msgid "Custom field %1 does not apply to this object"
msgstr "Le champs personnalisé %1 ne s'applique pas à cet objet"
-#: lib/RT/Tickets_Overlay.pm:2550
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Le champ personnalisé %1 a une valeur."
-#: lib/RT/Tickets_Overlay.pm:2546
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Le champ personnalisé %1 n'a pas de valeur."
-#: lib/RT/Record.pm:1614 lib/RT/Record.pm:1776
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Le champ personnalisé %1 est introuvable"
-#: lib/RT/Report/Tickets.pm:120 lib/RT/Report/Tickets.pm:123
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
msgstr "Champs personnalisé '%1'"
-#: lib/RT/CustomField_Overlay.pm:1160
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "La valeur du champ personnalisé %1 ne peut pas être trouvée pour le champ personnalisé %2"
-#: lib/RT/CustomField_Overlay.pm:422
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "La valeur du champ personnalisé ne peut pas être effacée"
-#: lib/RT/CustomField_Overlay.pm:1172
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "La valeur du champ personnalisé ne peut par être trouvée"
-#: lib/RT/CustomField_Overlay.pm:1174 lib/RT/CustomField_Overlay.pm:420
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "La valeur du champ personnalisé est effacée"
-#: html/Elements/SelectGroups:53 html/Elements/SelectUsers:53 lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "ChampPersonnalisé"
-#: html/Prefs/MyRT.html:80 html/Prefs/Quicksearch.html:72 html/Prefs/Search.html:77
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "ValeurDeChampPersonnalisé"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "Personnaliser"
-#: html/SelfService/Display.html:63 html/Ticket/Create.html:206 html/Ticket/Elements/ShowSummary:91 html/Ticket/Elements/Tabs:118 html/Ticket/ModifyAll.html:67
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Personnalisation de base"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "Configurer la base de données"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Personnaliser les adresses de courriel"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Configurer l'envoi des courriels"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "COnfiguration globale"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global Defaults"
+msgstr "Configurer les paramêtres par défaut"
+
+#: NOT FOUND IN SOURCE
+msgid "DBA of the database"
+msgstr "Administrateur de la base de données"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "Mot de passe de l'administrateur"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "Identifiant DBA"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Compilation quotidienne"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Tableau de bord"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Le tableau de bord n'a pas pu être créé: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Le tableau de bord n'a pas pu être mis à jour: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Tableau de bord mis à jour"
+
+#: NOT FOUND IN SOURCE
+msgid "DashboardSubject"
+msgstr "RT [_2] Tableau de bord: [_1]"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Tableaux de bord"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Nom d'hôte de la base de données"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Nom de la base de données"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Mot de passe de la base de données pour RT"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Port de connexion à la base"
+
+#: NOT FOUND IN SOURCE
+msgid "Database port number"
+msgstr "Port de connexion à la base"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Type de base de données"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Nom d'utilisateur de la base de données pour RT"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Format de date"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr "Le module DateTime est manquant"
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr "Le module DateTime::Locale est manquant"
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Dates"
-#: lib/RT/Date.pm:454
-msgid "Dec."
-msgstr "Déc."
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Déc"
+
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "Décembre"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Déchiffrer"
-#: etc/initialdata:222
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Modèle de réponse automatique par défaut"
-#: html/Tools/Offline.html:63
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "File par défaut"
-#: html/Tools/Offline.html:72
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Demandeur par défaut"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Modèle de commentaire administrateur par défaut"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Modèle de courrier administrateur par défaut"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Modèle de courrier par défaut"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "File par défaut"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Modèle de transaction par défaut"
-#: lib/RT/Transaction_Overlay.pm:637
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Valeur par défaut: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Valeur par défaut: %1/%2 changée de %3 en %4"
-#: html/User/Delegation.html:48 html/User/Delegation.html:51
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr "DefaultFormat"
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Déléguer les droits"
-#: lib/RT/System.pm:86
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Déléguer des droits spécifiques qui vous ont été accordés."
-#: lib/RT/System.pm:86
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "DéléguerDroits"
-#: html/User/Elements/Tabs:61
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Délégation"
-#: html/Admin/Elements/EditScrips:77 html/Search/Elements/EditFormat:105 html/Search/Elements/EditQuery:59 html/Search/Elements/EditSearches:65 html/Widgets/SelectionBox:212
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Supprimer"
-#: html/Admin/Elements/EditTemplates:81
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Détruire le modèle"
-#: lib/RT/SavedSearch.pm:222
+#: NOT FOUND IN SOURCE
+msgid "Delete dashboards"
+msgstr "Supprimer les tableaux de bords"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Supprimer les tableaux de bord pour ce groupe"
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Échec de la destruction : %1"
-#: html/Admin/Elements/EditScrips:76
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Supprimer les tableaux de bord personnels"
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Supprimer les scrips sélectionnés"
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Supprimer les tableaux de bord systèmes"
+
#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Supprimer les tickets"
-#: html/Search/Bulk.html:161
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr "Supprimer les valeurs"
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "SupprimerTableauDeBord"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "SupprimerTableauDeBordDeGroupe"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "SupprimerTableauDeBordPersonnel"
+
#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "SupprimerTicket"
-#: lib/RT/SavedSearch.pm:220
-msgid "Deleted search"
-msgstr "Recherche détruite"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "%1 effacé"
-#: lib/RT/Queue_Overlay.pm:396
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Tableau de bord %1 supprimé"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr "Requêtes supprimées"
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Recherche sauvée effacée"
+
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Effacer cet objet briserait l'intégrité référentielle"
-#: lib/RT/User_Overlay.pm:514
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Effacer cet objet violerait l'intégrité référentielle"
-#: html/Approvals/Elements/Approve:75
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Refuser"
-#: html/Elements/EditLinks:141 html/Elements/EditLinks:68 html/Elements/ShowLinks:60 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:58 html/Ticket/Elements/ShowDependencies:55
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "En dépend"
-#: lib/RT/Transaction_Overlay.pm:739
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr "EnDépend"
+
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Ajout de la dépendance par %1"
-#: lib/RT/Transaction_Overlay.pm:779
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Suppression de la dépendance par %1"
-#: lib/RT/Transaction_Overlay.pm:736
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Ajout de la dépendance de %1"
-#: lib/RT/Transaction_Overlay.pm:776
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "Suppression de la dépendance de %1"
-#: html/Elements/EditLinks:137 html/Elements/EditLinks:59 html/Elements/SelectLinkType:50 html/Elements/ShowLinks:50 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:54 html/Ticket/Elements/ShowDependencies:48
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr "DépendantDe"
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Dépend de"
-#: html/Search/Elements/DisplayOptions:88
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "DépendDe"
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "Desc"
-#: html/Elements/SelectSortOrder:58
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Décroissant"
-#: html/SelfService/Create.html:102 html/Ticket/Create.html:154
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Décrivez la situation ci-dessous"
-#: html/Admin/CustomFields/Modify.html:63 html/Admin/Elements/AddCustomFieldValue:59 html/Admin/Elements/EditCustomField:62 html/Admin/Elements/EditCustomFieldValues:58 html/Admin/Elements/EditScrip:57 html/Admin/Elements/ModifyTemplate:59 html/Admin/Groups/Modify.html:73 html/Admin/Queues/Modify.html:71 html/Search/Elements/EditSearches:58 html/User/Groups/Modify.html:72
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Description"
-#: html/Search/Elements/EditFormat:73 html/Ticket/Elements/Tabs:110
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Orientation"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Afficher"
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:93
msgid "Display Access Control List"
msgstr "Afficher la liste des droits"
-#: html/Search/Elements/DisplayOptions:48
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Afficher les colonnes"
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Afficher les modèles de Scrips pour cette file"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Afficher les Scrips pour cette file"
-#: html/Ticket/Elements/ShowHistory:61
-msgid "Display mode"
-msgstr "Mode d'affichage"
-
-#: lib/RT/Group_Overlay.pm:170
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Afficher les recherches sauvegardées de ce groupe"
-#: html/Elements/Footer:63
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Distribué selon les termes de la version 2 de la <a href=\"http://www.gnu.org/copyleft/gpl.html\">licence GNU GPL.</a>"
-#: lib/RT/System.pm:77
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Faire tout et n'importe quoi"
-#: html/Elements/Refresh:53
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Nom de domaine"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Ne pas inclure http://, juste quelquechose comme 'localhost', 'rt.example.com'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
-msgstr "Ne pas rafraîchir cette page."
+msgstr "Ne pas actualiser cette page."
-#: html/Ticket/Elements/ShowTransactionAttachments:84
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Ne pas du tout faire confiance à cette clefs"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Télécharger"
-#: html/Admin/Groups/index.html:63 html/Admin/Users/index.html:66
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Télécharger en tant que fichier délimité par tabulations"
-#: html/Elements/SelectDateType:55 html/Ticket/Create.html:212 html/Ticket/Elements/EditDates:68 html/Ticket/Elements/Reminders:135 html/Ticket/Elements/ShowDates:66 lib/RT/Ticket_Overlay.pm:1175
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Télécharger le fichier dump"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Échéance"
-#: html/Elements/Quicksearch:50 html/Elements/ShowSearch:51 html/index.html:109
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr "ÉchéanceDepuis"
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "ERREUR: %1"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Mise à jour facile de vos tickets ouverts"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Modifier"
-#: html/Search/Bulk.html:151
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr "Modifier les champs personnalisés"
-#: html/Admin/Elements/ObjectCustomFields:94 html/Admin/Queues/CustomFields.html:66 html/Admin/Users/CustomFields.html:66
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Modifier les champs personnalisés pour %1"
-#: html/Admin/Global/CustomFields/Groups.html:56
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Modifier les champs personnalisés pour tous les groupes"
-#: html/Admin/Global/CustomFields/Users.html:56
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Modifier les champs personnalisés pour toutes les files"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Modifier les champs personnalisés pour tous les utilisateurs"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:56 html/Admin/Global/CustomFields/Queue-Transactions.html:56
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Modifier les champs personnalisés pour les tickets de toutes les files"
-#: html/Search/Bulk.html:190 html/Ticket/ModifyLinks.html:59
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Modifier les liens"
-#: html/Search/Edit.html:70
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Modifier la requête"
-#: html/Ticket/Elements/Tabs:216
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Mod. recherche"
-#: html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Modifier les modèles pour la file %1"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Modifier les recherches sauvées du groupe"
-#: html/Admin/Elements/GlobalCustomFieldTabs:62 html/Admin/Global/index.html:69
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Modifier les modèles système"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
-msgstr "ModifierRecherchesSaugardées"
+msgstr "ModifierRecherchesSauvegardées"
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Texte modifiable"
-#: html/Admin/Queues/Modify.html:142
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Modifier la configuration de la file %1"
-#: html/Admin/CustomFields/Modify.html:169 html/Admin/Elements/EditCustomField:122
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Modifier le champ personnalisé %1"
-#: html/Admin/Groups/Members.html:57
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Modifier les membres du groupe %1"
-#: html/User/Groups/Members.html:152
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Modifier les membres du groupe personnel %1"
-#: lib/RT/Record.pm:1317 lib/RT/Record.pm:1394 lib/RT/Ticket_Overlay.pm:2512 lib/RT/Ticket_Overlay.pm:2602
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr "IdEffectif"
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "La base ou la cible doivent être spécifiées"
-#: html/Admin/Users/Modify.html:76 html/Ticket/Elements/AddWatchers:79 html/User/Prefs.html:67
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Soit vous n'avez pas les droits pour voire la recherche sauvée %1, soit votre identifiant est incorrect"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
-msgstr "Email"
+msgstr "Courriel"
+
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Configuration de l'envoi de courriels"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Compilation de courriels"
-#: lib/RT/User_Overlay.pm:237
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
-msgstr "Adresse email utilisée"
+msgstr "Adresse de courriel utilisée"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "Distribution des courriels"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr "Modèle de courriel pour les envois périodiques (compilation) des notifications"
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "Adresse de courriel"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Activé"
-#: html/Admin/CustomFields/Modify.html:100 html/Admin/Elements/EditCustomField:74
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Activé (Décocher cette case désactive ce champ personnalisé)"
-#: html/Admin/Groups/Modify.html:89 html/User/Groups/Modify.html:76
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Activé (Décocher cette case désactive ce groupe)"
-#: html/Admin/Queues/Modify.html:107
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Activé (Décocher cette case désactive cette file)"
-#: html/Admin/Queues/index.html:80
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Files actives"
-#: html/Admin/Elements/EditCustomField:138 html/Admin/Groups/Modify.html:156 html/Admin/Users/Modify.html:354 html/User/Groups/Modify.html:140
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "État %1 activé"
-#: html/Admin/CustomFields/Modify.html:187 html/Admin/Queues/Modify.html:164
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
-msgstr "État actif : %1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Chiffrer"
-#: lib/RT/CustomField_Overlay.pm:66
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Chiffrer par défaut"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Chiffrer/Déchiffrer"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Chiffrer/Déchiffrer la transaction #%1 du ticket #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Chiffrement désactivé"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Chiffrement activé"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Saisir plusieurs valeurs"
-#: html/Elements/EditLinks:127
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "Saisir plusieurs valeurs avec complétion automatique"
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Saisir les objets ou les URI pour y lier les objets. Séparer les saisies par des espaces."
-#: lib/RT/CustomField_Overlay.pm:67
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Saisir une seule valeur"
-#: html/Elements/EditLinks:124
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "Saisir une valeur avec complétion automatique"
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Saisir des noms de files ou des URI pour lier aux files. Séparer les saisies avec des espaces."
-#: html/Elements/EditLinks:120 html/Search/Bulk.html:191
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Saisir des n° de tickets ou des URI pour lier aux tickets. Séparer les saisies par des espaces."
-#: lib/RT/CustomField_Overlay.pm:68
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Saisir au plus %1 valeurs"
-#: html/Elements/Login:78 html/SelfService/Error.html:48 html/SelfService/Error.html:49
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Saisir jusqu'à %1 valeurs avec complétion automatique"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Erreur"
-#: lib/RT/Queue_Overlay.pm:681
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Erreur de paramètres pour Queue->AddWatcher"
-#: lib/RT/Queue_Overlay.pm:837
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Erreur dans les paramètre de Queue->DeleteWatcher"
-#: lib/RT/Ticket_Overlay.pm:1376
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Erreur de paramètres pour Ticket->AddWatcher"
-#: lib/RT/Ticket_Overlay.pm:1531
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Erreur dans les paramètres de Ticket->DeleteWatcher"
-#: html/Search/Build.html:390
-#. ($val, $token, $string)
-msgid "Error near ->%1<- expecting a %2 in '%3'"
-msgstr "Erreur près de ->%1<- %2 est attendu en '%3'"
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Erreur au propriétaire RT: clef publique"
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Erreur: tableau de bord manquant"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Erreur: mauvaises données GnuPG"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Erreur: pas de clefs privée"
-#: bin/rt-crontool:287
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Erreur: clefs publique"
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Échelonner les tickets"
-#: html/Ticket/Elements/ShowBasics:59
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Estimé"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Tout le monde"
-#: bin/rt-crontool:273
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Éxaminer les tickets créés dans une file entre deux dates"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Éxaminer les tickets résolus dans une file entre deux dates"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Éxaminer les tickets résolus dans une file, groupés par intervenant"
+
+#: bin/rt-crontool:374
msgid "Example:"
-msgstr "Exemple : "
+msgstr "Exemple :"
-#: html/Admin/Users/Modify.html:101
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Expire"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "StatutÉtendu"
+
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Info supplémentaire"
-#: lib/RT/SavedSearch.pm:179
-msgid "Failed to create search attribute"
-msgstr "Impossible de créer l'attribut de recherche"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr "Extraire la marque de sujet"
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr "Extraire la marque du sujet d'une transaction et l'ajouter au sujet tu ticket."
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Échec lors de la connexion à la base de données: %1"
-#: lib/RT/User_Overlay.pm:378
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Impossible de créer l'attribut %1"
+
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Recherche du pseudo groupe d'utilisateurs 'Privilégiés' infructueuse."
-#: lib/RT/User_Overlay.pm:385
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Recherche du pseudo groupe d'utilisateurs 'non-privilégiés' infructueuse"
-#: bin/rt-crontool:208
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Échec pour charger %1 %2"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Échec pour charger %1 %2: %3"
+
+#: NOT FOUND IN SOURCE
+msgid "Failed to load attribute %1"
+msgstr "Impossible de charger l'attribut %1"
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Impossible de charger le module %1. (%2)"
-#: lib/RT/SavedSearch.pm:154
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "Impossible de charger l'objet pour %1"
-#: lib/RT/Date.pm:444
-msgid "Feb."
-msgstr "Fév."
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Impossible de charger le modèle"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "Impossible d'analyser le modèle"
-#: html/Elements/SelectAttachmentField:52
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Fév"
+
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Février"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Source pour les valeurs de ce champs:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "Nom de fichier"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "NomFichier"
-#: lib/RT/CustomField_Overlay.pm:71
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr "Remplissez les champs"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr "Utiliser une couleur de fond par"
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Saisir dans plusieurs champs de type texte"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Saisir plusieurs champs de type wiki"
-#: lib/RT/CustomField_Overlay.pm:72
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Saisir dans un champ de type texte"
-#: lib/RT/CustomField_Overlay.pm:77
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Saisir un champ de type wiki"
-#: html/Admin/CustomFields/Modify.html:109 html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Saisir une URL."
-#: lib/RT/CustomField_Overlay.pm:73
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Saisir au plus %1 champs de type texte"
-#: lib/RT/CustomField_Overlay.pm:78
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Saisir au plus %1 champs de type wiki"
-#: html/Search/Elements/PickBasics:151 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:99 lib/RT/Tickets_Overlay.pm:1967
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Priorité finale"
-#: lib/RT/Ticket_Overlay.pm:1166
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "PrioritéFinale"
-#: html/Admin/Groups/index.html:74 html/Admin/Queues/People.html:84 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Trouver tous les utilisateurs dont"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Trouver les groupes dont"
-#: html/Admin/Queues/People.html:80 html/Admin/Users/index.html:72 html/Ticket/Elements/EditPeople:53
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Trouver les gens dont"
-#: html/Search/Results.html:149
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Rechercher des tickets"
-#: html/Ticket/Elements/Tabs:83
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Terminer"
+
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Premier"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:764
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:755
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
-msgstr "Foo ! "
+msgstr "Foo !"
-#: html/Search/Bulk.html:85
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Forcer la modification"
-#: html/Search/Elements/EditFormat:54
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Format"
-#: html/Search/Results.html:147
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Transfert"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Transférer le message"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Transférer le message et revenir"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Transférer un message"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Transférer les messages à des personnes externes"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "TransférerUnMessage"
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "Trouvé %quant(%1,ticket)"
-#: lib/RT/Record.pm:973
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Objet trouvé"
-#: lib/RT/Date.pm:423
-msgid "Fri."
-msgstr "Ven."
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Fréquence"
-#: html/Ticket/Elements/ShowHistory:68 html/Ticket/Elements/ShowHistory:74
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Ven"
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Vendredi"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "En-têtes complets"
-#: html/Tools/Offline.html:87
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Général"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Obtenir le modèle à partir d'un fichier"
-#: lib/RT/Transaction_Overlay.pm:705
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Pour commencer"
+
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Donné à %1"
-#: html/Admin/Elements/Tabs:67 html/Admin/index.html:84
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Global"
-#: html/Admin/Elements/EditCustomFields:57
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Champs personnalisés globaux"
-#: html/Admin/Global/CustomFields/index.html:61
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Configuration globale des champs personnalisés"
-#: html/Admin/Global/MyRT.html:95
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr "Portlet global %1 sauvé."
-#: html/Admin/Elements/SelectTemplate:61
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Modèle global : %1"
-#: html/Admin/CustomFields/index.html:82 html/Admin/Groups/index.html:69 html/Admin/Groups/index.html:75 html/Admin/Queues/People.html:82 html/Admin/Queues/People.html:86 html/Admin/Queues/index.html:68 html/Admin/Users/index.html:75 html/Approvals/index.html:54 html/Elements/RefreshHomepage:50 html/Search/Results.html:76 html/Search/Results.html:92 html/Ticket/Elements/EditPeople:55 html/Ticket/Elements/EditPeople:59 html/Tools/Offline.html:91
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "Erreur GnuPG. Contactez votre administrateur"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "Support GnuPG désactivé"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr "Problèmes GnuPG"
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "Clefs privée(s) GnuPG pour %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "Clefs publiques GnuPG pour %1"
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "Go"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Go !"
-#: html/Elements/GotoTicket:48 html/SelfService/Elements/GotoTicket:48
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Aller au ticket"
-#: html/Ticket/Elements/AddWatchers:69 html/Ticket/Elements/ShowGroupMembers:57 html/User/Elements/DelegateRights:101
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Graphique"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Propriétés du graphique"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "Les graphiques ne sont pas disponibles."
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Groupe"
-#: html/Admin/Elements/CustomFieldTabs:70 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:84 html/Admin/Elements/SystemTabs:67 html/Admin/Global/index.html:78
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Droits de groupe"
-#: lib/RT/Group_Overlay.pm:985
-msgid "Group already has member"
-msgstr "Le groupe a déjà un membre"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Le groupe à déjà le membre: %1"
-#: html/Admin/Groups/Modify.html:115
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Le groupe %1 ne peut être créé"
-#: lib/RT/Group_Overlay.pm:523
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Groupe ajouté"
-#: lib/RT/Group_Overlay.pm:1157
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Groupe désactivé"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Groupe activé"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Un tel membre n'appartient pas au groupe"
-#: lib/RT/Group_Overlay.pm:965 lib/RT/Queue_Overlay.pm:743 lib/RT/Queue_Overlay.pm:810 lib/RT/Ticket_Overlay.pm:1423 lib/RT/Ticket_Overlay.pm:1503
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Groupe introuvable"
-#: html/Admin/Elements/GlobalCustomFieldTabs:61 html/Admin/Elements/SelectNewGroupMembers:59 html/Admin/Elements/Tabs:58 html/Admin/Global/CustomFields/index.html:71 html/Admin/Groups/Members.html:88 html/Admin/Queues/People.html:106 html/Admin/Users/Memberships.html:55 html/Admin/index.html:69 html/User/Groups/Members.html:90 lib/RT/CustomField_Overlay.pm:1213
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Droits du groupe"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Groupes"
-#: lib/RT/Group_Overlay.pm:991
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Les groupes ne peuvent pas être membres de leurs membres"
-#: html/Admin/Groups/index.html:88
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Groupes correspondant au critère de recherche"
-#: html/Ticket/Elements/ShowRequestor:79
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Groupes dont cet utilisateur est membre (cocher pour supprimer)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Groupes dont cet utilisateur n'est pas membre (cocher pour ajouter)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
-msgstr "Cette utilisateur appartient aux groupes"
+msgstr "Cet utilisateur appartient aux groupes"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr "ÀCommeMembre"
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
-#: lib/RT/Interface/CLI.pm:96 lib/RT/Interface/CLI.pm:96
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr "En-tête d'un message Transféré"
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Bonjour !"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:771
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Bonjour, %1"
-#: html/Admin/Elements/GroupTabs:72 html/Admin/Elements/UserTabs:66 html/Ticket/Elements/ShowHistory:55 html/Ticket/Elements/Tabs:113
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "Aidez-nous à mettre en place une liste de valeurs par défaut pour RT."
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historique"
-#: html/Admin/Groups/History.html:64
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "Historique du groupe %1"
-#: html/Admin/Users/History.html:64
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr "Historique de la file %1"
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "Historique de l'utilisateur %1"
-#: html/Elements/Tabs:68
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "Accueil"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "Intervalle d'actualisation de la page d'accueil"
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "Téléphone personnel"
+
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Accueil"
-#: html/Elements/SelectTimeUnits:50
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Heure"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Heures"
-#: lib/RT/Base.pm:135
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "J'ai %quant(%1, toupie à béton)."
-#: html/Search/Build.html:466 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
-msgstr "Je suis perdu"
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
-#: html/Ticket/Elements/ShowBasics:50 lib/RT/Tickets_Overlay.pm:1892
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Identifiant"
-#: html/Admin/Users/Modify.html:67 html/User/Prefs.html:62
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identité"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Si une approbation est refusée, rejette l'original et supprime les approbations en attente"
-#: html/Tools/Offline.html:76
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr "SI aucun demandeur n'est spécifié, créer les tickets pour ce demandeur."
+msgstr "Si aucun demandeur n'est spécifié, créer les tickets pour ce demandeur."
-#: html/Tools/Offline.html:67
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Si aucune file n'est spécifiée, créer les tickets dans cette file."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Si cet outil était setgid, un utilisateur local mal intentionné pourrait l'utiliser pour obtenir un accès administrateur à RT."
-#: html/Admin/Queues/People.html:128 html/Ticket/Modify.html:62 html/Ticket/ModifyAll.html:130 html/Ticket/ModifyPeople.html:62
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr "Si vous avez déjà un serveur et une base de données RT fonctionnelle, vous devriez saisir cette opportunité pour être certain que votre serveur de base de données est en fonctionnement et que le serveur RT peut s'y connecter. Une fois ceci fait, arrêtez et redémarrez le serveur RT.</p>"
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "Si vous avez changez le port sur lequel RT est lancé, vous devez redémarrer le serveur pour pouvoir vous connecter."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Si vous avez fait une modification, assurez vous de"
-#: lib/RT/Record.pm:964
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr "Si votre base de données préférées n'est pas listée ci-dessous, celà signifie que RT ne peut pas trouver un <i>pilote de base de données</i> installé pour celle-ci. Vous pouvez remédier à ceci en utilisant %1 pour télécharger et installer DBD::MySQL, DBD::Oracle ou DBD::Pg."
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Valeur incorrecte pour %1"
-#: lib/RT/Record.pm:967
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Champ non modifiable"
-#: html/Admin/Groups/index.html:67
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "Inclure les champs personnalisés désactivés dans la liste."
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Inclure les groupes inactifs dans le listage."
-#: html/Admin/Queues/index.html:67
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Afficher les files inactives."
-#: html/Admin/Users/index.html:73
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Inclure les utilisateurs désactivés dans le résultat."
-#: html/Admin/CustomFields/Modify.html:115
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
-msgstr "Requête incomplète"
+msgstr "Inclure la page"
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Messages individuels"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informer le propriétaire RT que les utilisateurs ont un problème avec les clefs publiques"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Informer l'utilisateur que le tableau de bord souscrit est manquant"
-#: html/Search/Build.html:492 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
-msgstr "Requête incomplète"
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Informer l'utilisateur qu'un message qu'il a envoyé contient des données GnuPG invalides"
-#: html/Search/Build.html:489 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
-msgstr "Requête incomplète"
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Informer un utilisateur qu'il a des problèmes avec sa clefs publique et qu'il ne peut recevoir de documents chiffrés"
-#: html/Search/Elements/PickBasics:150 lib/RT/Tickets_Overlay.pm:1942
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Informer l'utilisateur que sont mot de passe a été réinitialisé"
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Informer l'utilisateur qu'il a reçu un courriel chiffré et que nous n'avons pas de clefs privées pour déchiffrer"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Priorité initiale"
-#: lib/RT/Ticket_Overlay.pm:1165 lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "PrioritéInitiale"
-#: lib/RT/ScripAction_Overlay.pm:135
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Initialisation de la base"
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Erreur à l'entrée"
-#: html/Elements/ValidateCustomFields:70 lib/RT/CustomField_Overlay.pm:1024 lib/RT/CustomField_Overlay.pm:1165
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "La valeur saisie doit correspondre à %1"
-#: lib/RT/Ticket_Overlay.pm:3522
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "Installer RT"
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Erreur interne"
-#: lib/RT/Record.pm:315
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Erreur interne : %1"
-#: lib/RT/Group_Overlay.pm:670
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "%1 invalide: '%2' ne semble pas être une adresse de courriel"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "%1 invalide: ceci devrait être un nombre"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "%1 invalide: ceci ne semble pas être une adresse de courriel"
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Type de groupe invalide"
-#: lib/RT/Principal_Overlay.pm:163
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Droit invalide"
-#: lib/RT/Record.pm:969
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Données invalides"
-#: lib/RT/CustomField_Overlay.pm:210 lib/RT/CustomField_Overlay.pm:681
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Objet invalide"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Objet intervenant invalide"
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr "Motif invalide : %1"
-#: lib/RT/Scrip_Overlay.pm:159 lib/RT/Template_Overlay.pm:246
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "File invalide"
-#: lib/RT/ACE_Overlay.pm:266 lib/RT/ACE_Overlay.pm:275 lib/RT/ACE_Overlay.pm:281 lib/RT/ACE_Overlay.pm:292
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Droit invalide"
-#: lib/RT/Record.pm:290
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr "Permission invalide. Impossible de résoudre la permission '%1'"
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr "Syntaxe invalide de l'adresse de courriel"
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "File invalide pour %1"
-#: lib/RT/Record.pm:1632
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Valeur incorrecte pour le champ personnalisé"
-#: lib/RT/Ticket_Overlay.pm:426
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Valeur de statut invalide"
-#: bin/rt-crontool:270
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "N'est pas chiffré"
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Il est extrêmement important que les utilisateurs non autorisés n'aient pas accès à cet outil."
-#: bin/rt-crontool:271
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Il est suggéré de créer un utilisateur Unix non privilégié appartenant au bon groupe et ayant accès à RT pour utiliser cet outil."
-#: bin/rt-crontool:233
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
-msgstr "Il faut plusieurs paramètres : "
+msgstr "Il faut plusieurs paramètres :"
-#: html/Search/Elements/EditFormat:87
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Italique"
-#: lib/RT/Date.pm:443
-msgid "Jan."
-msgstr "Jan."
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Jan"
+
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "Janvier"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Rejoignez ou quittez ce groupe"
-#: lib/RT/Date.pm:449
-msgid "Jul."
-msgstr "Jul."
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Jui"
-#: html/Ticket/Elements/Tabs:127
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "Juillet"
+
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Tout"
-#: lib/RT/Date.pm:448
-msgid "Jun."
-msgstr "Jun."
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Juin"
+
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "Juin"
-#: html/Admin/Users/Modify.html:96 html/User/Prefs.html:78
+#: NOT FOUND IN SOURCE
+msgid "Keep 'localhost' if you're not sure"
+msgstr "Conservez 'localhost' si vous n'êtes pas sûr"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "Garder 'localhost' si vous n'êtes pas sûr. Laissez vide pour vous connecter localement via un socket."
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Langue"
-#: html/Search/Elements/EditFormat:81
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Langue."
+
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Grande"
-#: html/Ticket/Elements/Tabs:98
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Dernier"
-#: html/Ticket/Elements/EditDates:61 html/Ticket/Elements/ShowDates:62
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Dernier contact"
-#: html/Elements/SelectDateType:52
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Date dernier contact"
-#: html/Elements/SelectDateType:53
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Date dernière MAJ"
-#: NOT FOUND IN SOURCE
-#. FIXME: title in ColumnMap, html/Elements/RT__Ticket/ColumnMap:278
+#: share/html/Elements/ColumnMap:91
msgid "Last Updated By"
+msgstr "Dernière MAJ Par"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
msgstr "Dernière MAJ par"
-#: html/Search/Elements/PickBasics:105
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "DateDernièreMAJ"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "DernièreMAJPar"
-#: html/Ticket/Elements/ShowBasics:70
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr "DernièreMAJDepuis"
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr "Laisser vide pour envoyer à votre adresse courriel courante (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Leave empty to use default value of the RDBMS"
+msgstr "Laisser vide pour utiliser la valeur par défaut du serveur"
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Laisser vide pour utiliser la valeur par défaut pour votre base de données"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr "Laisser ceci pour utiliser l'identifiant dba par defaut pour votre type de base de données"
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Restant"
-#: html/Admin/Users/Modify.html:111
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr "Légendes"
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Longueur en caractères; Utiliser '0' pour voir tous les messages dans la page, quelle que soit leur longueur"
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Donner accès à RT à cet utilisateur"
-#: html/Admin/Users/Modify.html:115
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Autoriser cet utilisateur à recevoir des droits"
-#: html/Search/Elements/EditFormat:70
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "C'est parti!"
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "Relation"
-#: lib/RT/Record.pm:1328
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Le lien existe déjà"
-#: lib/RT/Record.pm:1342
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Le lien ne peut être ajouté"
-#: lib/RT/Record.pm:1348
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Le lien est ajouté (%1)"
-#: lib/RT/Record.pm:1409
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Le lien est effacé (%1)"
-#: lib/RT/Record.pm:1415
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Lien introuvable"
-#: html/Ticket/ModifyLinks.html:48 html/Ticket/ModifyLinks.html:52
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Lier le ticket n°%1"
-#: html/Admin/CustomFields/Modify.html:104
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "Lier les valeurs à"
-#: lib/RT/Ticket_Overlay.pm:702
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "Lié"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr "LiéDepuis"
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "LiéVers"
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr "Relation. autorisation refusée"
-#: html/Ticket/Create.html:219 html/Ticket/Elements/ShowSummary:97 html/Ticket/Elements/Tabs:122 html/Ticket/ModifyAll.html:80
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Relations"
-#: html/Search/Elements/EditSearches:77
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Charger"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Charger les recherches sauvées :"
-#: lib/RT/System.pm:88
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "ChargerRechercheSauvée"
-#: html/Admin/Tools/Configuration.html:66
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "%1 %2 chargé"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "Recherche originale \"%1\" chargée"
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Modules perl chargés"
-#: lib/RT/SavedSearch.pm:113
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr "Recherche %1 chargée"
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "Recherche sauvée \"%1\" chargée"
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Langage"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:128
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr "LocalizedDateTime"
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Localisation"
-#: html/Elements/Header:93
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Connecté en tant que %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:102 html/Elements/Login:70 html/Elements/Login:86 lib/RT/StyleGuide.pod:795
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Déconnecté"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Connexion"
-#: html/Elements/Header:103
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Déconnexion"
-#: lib/RT/CustomField_Overlay.pm:935
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Faire attention aux types différents"
-#: html/Search/Bulk.html:84
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Courriel"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr "Type de liens principal"
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Attribuer"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Appliquer Statut"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Appliquer date d'échéance"
-#: html/Search/Bulk.html:118
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Appliquer date de résolution"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
-msgstr "Appliquer date de début"
+msgstr "Appliquer date d'ouverture"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
-msgstr "Appliquer date d'ouverture"
+msgstr "Appliquer date de début"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
-msgstr "Appliquer Age"
+msgstr "Appliquer Âge"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Appliquer priorité"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Appliquer file"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Changer le sujet"
-#: lib/RT/Group_Overlay.pm:171
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Malkovich Malkovich Malkovich Malkovich"
-#: html/Admin/index.html:80
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Gérer les champs personnalisés et leurs valeurs"
-#: html/Admin/index.html:71
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Gérer les groupes et leurs membres"
-#: html/Admin/index.html:87
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Gérer les propriétés et configurations générales des files"
-#: html/Admin/index.html:76
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Gérer les files et leurs propriétés individuelles"
-#: html/Admin/index.html:66
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Gérer les graphiques sauvés"
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Gérer les utilisateurs et mots de passe"
-#: lib/RT/Date.pm:445
-msgid "Mar."
-msgstr "Mar."
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "Mars"
-#: lib/RT/Date.pm:447
-msgid "May."
-msgstr "Mai."
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Marquer tous les messages comme lus"
-#: lib/RT/Transaction_Overlay.pm:752
+#: NOT FOUND IN SOURCE
+msgid "Max attachment size( in bytes )"
+msgstr "Taille maximum pour les pièces jointes (en bytes)"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "Longueur maximum pour les messages en-ligne"
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "Mai"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Membre"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Membre %1 ajouté"
-#: lib/RT/Transaction_Overlay.pm:792
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Membre %1 supprimé"
-#: lib/RT/Group_Overlay.pm:1002
-msgid "Member added"
-msgstr "Membre ajouté"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Membre ajouté: %1"
-#: lib/RT/Group_Overlay.pm:1164
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Membre supprimé"
-#: lib/RT/Group_Overlay.pm:1168
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Membre non supprimé"
-#: html/Elements/SelectLinkType:49
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Membre de"
-#: html/Admin/Elements/GroupTabs:65 html/User/Elements/GroupTabs:65
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "MembreDe"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Membres"
-#: lib/RT/Transaction_Overlay.pm:749
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "Appartenance à %1 ajoutée"
-#: lib/RT/Transaction_Overlay.pm:789
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "Appartenance à %1 supprimée"
-#: html/Admin/Elements/UserTabs:63
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Affiliations"
-#: html/Admin/Users/Memberships.html:62
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "Affiliations de l'utilisateur %1"
-#: lib/RT/Ticket_Overlay.pm:2896
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Fusion réussie"
-#: lib/RT/Ticket_Overlay.pm:2774
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Échec de fusion. Ne peut appliquer EffectiveId"
-#: lib/RT/Ticket_Overlay.pm:2791
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Échec de fusion. Ne peut appliquer Statut"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:50
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Fusionner dans"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Fusionné avec %1"
-#: html/Search/Bulk.html:145 html/Ticket/Update.html:120
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Message"
-#: html/Ticket/Elements/ShowTransactionAttachments:166
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr "Le corps du message ne s'affiche pas parce que l'expéditeur a demandé de ne pas le mettre en ligne."
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr "Le corps du message ne s'affiche pas parce qu'il n'est pas en texte plat."
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Corps du message non affiché car il est trop important ou n'est pas au format texte."
-#: lib/RT/Ticket_Overlay.pm:2445
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr "Le corps du message ne s'affiche pas parce qu'il est trop grand"
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Hauteur des boîtes de dialogue"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Largeur des boîtes de dialogue"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Le message ne peut être sauvegardé"
-#: lib/RT/Ticket_Overlay.pm:2448
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Message pour l'utilisateur"
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Message sauvegardé"
-#: html/Ticket/Elements/PreviewScrips:124
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Les messages relatifs à ce ticket ne seront pas envoyés à..."
-#: html/Elements/SelectTimeUnits:49
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Longueur minimum des mots de passe"
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minutes"
-#: html/Search/Build.html:496 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr "Parenthèses non correspondantes"
-
-#: lib/RT/Record.pm:971
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Clé primaire manquante ? : %1"
-#: html/Admin/Users/Modify.html:196 html/User/Prefs.html:94
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Mobile"
-#: lib/RT/Queue_Overlay.pm:96
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "Téléphone mobile"
+
+#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr "Modifier la liste de droits"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Modifier les champs personnalisés s'appliquant à %1 pour tous les %2"
-#: html/Admin/Elements/ObjectCustomFields:100
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Modifier les champs personnalisés s'appliquant à tous les %1"
-#: html/Admin/Global/GroupRights.html:108 html/Admin/Groups/GroupRights.html:96 html/Admin/Queues/GroupRights.html:109
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Modifier les droits du groupe"
-#: html/Admin/Groups/Members.html:107 html/User/Groups/Members.html:103
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Modifier les membres"
-#: html/User/Delegation.html:60
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Modifier les droits"
@@ -2526,139 +3834,170 @@ msgstr "Modifier les modèles de Scrips pour cette file"
msgid "Modify Scrips for this queue"
msgstr "Modifier les Scrips pour cette file"
-#: html/Admin/Global/UserRights.html:76 html/Admin/Groups/UserRights.html:78 html/Admin/Queues/UserRights.html:77
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Modifier les droits des usagers"
-#: html/Admin/Queues/CustomField.html:68
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Modifier un champ personnalisé pour la file %1"
-#: html/Admin/Queues/Scrip.html:84
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Modifier le scrip pour la file %1"
-#: html/Admin/Global/Scrip.html:77
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Modifier le scrip qui s'applique à toutes les files"
-#: html/Admin/CustomFields/Objects.html:92
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Modifier les objets associés à %1"
-#: html/Ticket/ModifyDates.html:48 html/Ticket/ModifyDates.html:52
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr "Modifier les valeurs des champs personnalisés"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Modifier les tableaux de bord pour ce groupe"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Modifier les dates pour n°%1"
-#: html/Ticket/ModifyDates.html:59
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Modifier les dates pour le ticket n°%1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:67 html/Admin/Global/index.html:74
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Modifier globalement les champs personnalisés"
-#: html/Admin/Elements/GlobalCustomFieldTabs:72 html/Admin/Global/GroupRights.html:48 html/Admin/Global/GroupRights.html:51 html/Admin/Global/index.html:79
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Modifier les droits de groupe globaux"
-#: html/Admin/Global/GroupRights.html:56
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Modifier les droits de groupe globaux."
-#: html/Admin/Global/UserRights.html:48 html/Admin/Global/UserRights.html:51 html/Admin/Global/index.html:83
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Modifier les droits utilisateurs globaux"
-#: html/Admin/Global/UserRights.html:56
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Modifier les droits utilisateurs globaux."
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
-msgstr "Modifier les métadonnées ou supprimer le groupe"
+msgstr "Modifier les méta-données ou supprimer le groupe"
-#: html/Admin/CustomFields/GroupRights.html:113
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Modifier les droits de groupe pour le champ personnalisé %1"
-#: html/Admin/Groups/GroupRights.html:48 html/Admin/Groups/GroupRights.html:52 html/Admin/Groups/GroupRights.html:58
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Modifier les droits de groupes du groupe %1"
-#: html/Admin/Queues/GroupRights.html:48 html/Admin/Queues/GroupRights.html:52
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Modifier les droits de groupe pour la file %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Modifier la liste des membres pour ce groupe"
-#: lib/RT/System.pm:84
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Modifier son propre profil RT"
-#: html/Admin/Queues/People.html:48 html/Admin/Queues/People.html:52
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Modifier les utilisateurs de la file %1"
-#: html/Ticket/ModifyPeople.html:48 html/Ticket/ModifyPeople.html:52 html/Ticket/ModifyPeople.html:59
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Modifier les utilisateurs du ticket n°%1"
-#: html/Admin/Queues/Scrips.html:69
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Modifier les tableaux de bord personnels"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Modifier les scrips de la file %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:58 html/Admin/Global/Scrips.html:67 html/Admin/Global/index.html:65
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Modifier les scrips s'appliquant à toutes les files"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:101
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Modifier les tableaux de bord systèmes"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
msgid "Modify template %1"
msgstr "Modifier le modèle %1"
-#: html/Admin/Global/Templates.html:67
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Modifier les modèles globaux"
-#: html/Admin/Global/index.html:87
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Modifier le tableau de bord %1"
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr "Modifier la vue \"RT en un coup d'œil\" par défaut"
-#: html/Admin/Groups/Modify.html:125 html/User/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Modifier le groupe %1"
-#: lib/RT/Queue_Overlay.pm:97
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Modifier les requêtes du tableau de bord %1"
+
+#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Modifier les observateurs de la file"
-#: html/Admin/Users/Modify.html:313
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Modifier l'inscription au tableau de bord %1"
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Modifier l'utilisateur %1"
-#: html/Ticket/ModifyAll.html:60
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Modifier le ticket n°%1"
-#: html/Ticket/Modify.html:48 html/Ticket/Modify.html:51 html/Ticket/Modify.html:57
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Modifier le ticket n°%1"
@@ -2667,34 +4006,46 @@ msgstr "Modifier le ticket n°%1"
msgid "Modify tickets"
msgstr "Modifier les tickets"
-#: html/Admin/CustomFields/UserRights.html:159
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Modifier les droits utilisateurs pour le champ personnalisé %1"
-#: html/Admin/Groups/UserRights.html:48 html/Admin/Groups/UserRights.html:52 html/Admin/Groups/UserRights.html:58
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Modifier les droits utilisateurs pour le groupe %1"
-#: html/Admin/Queues/UserRights.html:48 html/Admin/Queues/UserRights.html:52
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Modifier les droits utilisateurs pour la file %1"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:94
msgid "ModifyACL"
msgstr "ModifierACL"
-#: lib/RT/CustomField_Overlay.pm:110
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "ModifierChampPersonnalisé"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "ModifierTableauDeBord"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "ModifierTableauDeBordDeGroupe"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "ModifierTableauDeBordPersonnel"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "ModifierPropresAppartenances"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:95
msgid "ModifyQueueWatchers"
msgstr "ModifierObservateurs"
@@ -2702,7 +4053,7 @@ msgstr "ModifierObservateurs"
msgid "ModifyScrips"
msgstr "ModifierScrips"
-#: lib/RT/System.pm:84
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "ModifierDonnéesPerso"
@@ -2714,533 +4065,727 @@ msgstr "ModifierModèle"
msgid "ModifyTicket"
msgstr "ModifierTicket"
-#: lib/RT/Date.pm:419
-msgid "Mon."
-msgstr "Lun."
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Lun"
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Lundi"
-#: html/Ticket/Elements/ShowRequestor:63
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr "Du lundi au vendredi"
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "Plus"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Plus d'informations sur %1"
-#: html/Admin/Elements/PickCustomFields:85
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Aller en bas"
-#: html/Admin/Elements/PickCustomFields:77
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Aller en haut"
-#: html/Admin/Elements/SelectSingleOrMultiple:50
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Multiple"
-#: lib/RT/User_Overlay.pm:228
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Attribut 'Nom' obligatoire"
-#: html/SelfService/Elements/MyRequests:79
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "Mes tickets %1s"
-#: html/Tools/Elements/Tabs:65
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Ma journée"
-#: html/Approvals/index.html:48 html/Approvals/index.html:49
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Mes approbations"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Mes tableaux de bord"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Mes recherches"
-#: html/Admin/CustomFields/Modify.html:60 html/Admin/Elements/AddCustomFieldValue:55 html/Admin/Elements/EditCustomField:57 html/Admin/Elements/EditCustomFieldValues:57 html/Admin/Elements/ModifyTemplate:51 html/Admin/Groups/Modify.html:67 html/Search/Bulk.html:159 html/User/Groups/Modify.html:67
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "LIGNEVIDE"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Nom"
-#: lib/RT/User_Overlay.pm:235
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Nom utilisé"
-#: html/Ticket/Elements/ShowDates:75
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr "Collection de portlets nommée et partagée"
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Jamais"
-#: html/Elements/EditLinks:118
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "Nouveau"
+
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nouveaux liens"
-#: html/Admin/Users/Modify.html:121 html/User/Prefs.html:111
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Nouveau mot de passe"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
-msgstr "Nouvelles approbations en attente"
+msgstr "Nouvelle approbation en attente"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Nouv. recherche"
-#: html/Admin/Elements/CustomFieldTabs:95 html/Admin/Queues/CustomField.html:75
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Tickets nouveaux et ouverts pour %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Nouveau champ personnalisé"
-#: html/Admin/Elements/GroupTabs:79 html/User/Elements/GroupTabs:75
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Nouveau tableau de bord"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Nouveau groupe"
-#: html/SelfService/Prefs.html:55
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Nouveaux messages"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Nouveau mot de passe"
-#: lib/RT/User_Overlay.pm:818
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Notification de nouveau mot de passe envoyée"
-#: html/Admin/Elements/QueueTabs:97
-msgid "New queue"
-msgstr "Nouvelle file"
-
-#: html/Ticket/Elements/Reminders:120
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Nouveau rappel :"
-#: html/Admin/Elements/SelectRights:67
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nouveaux droits"
-#: html/Admin/Global/Scrip.html:65 html/Admin/Global/Scrips.html:62 html/Admin/Queues/Scrip.html:73 html/Admin/Queues/Scrips.html:78
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Nouveau scrip"
-#: html/Admin/Global/Template.html:80 html/Admin/Global/Templates.html:62 html/Admin/Queues/Template.html:81 html/Admin/Queues/Templates.html:73
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Nouveau modèle"
-#: html/SelfService/Elements/Tabs:87 html/SelfService/Elements/Tabs:91
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Nouveau ticket"
-#: lib/RT/Ticket_Overlay.pm:2751
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Nouveau ticket inconnu"
-#: html/Admin/Elements/UserTabs:83
-msgid "New user"
-msgstr "Nouvel utilisateur"
-
-#: html/Admin/Elements/CreateUserCalled:49
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Nouvel utilisateur appelé"
-#: html/Admin/Queues/People.html:78 html/Ticket/Elements/EditPeople:52
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nouveaux observateurs"
-#: html/Helpers/CalPopup.html:60 html/Ticket/Elements/Tabs:94
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Suivant"
-#: html/Elements/TicketList:108
-msgid "Next Page"
-msgstr "Page suivante"
+#: NOT FOUND IN SOURCE
+msgid "Next: "
+msgstr "Suivant: "
+
+#: NOT FOUND IN SOURCE
+msgid "Next: Check your database credentials"
+msgstr "Suivant: contrôle des identifiant de la base"
+
+#: NOT FOUND IN SOURCE
+msgid "Next: Customize Basics"
+msgstr "Suivant: réglages de base"
+
+#: NOT FOUND IN SOURCE
+msgid "Next: Customize Email Addresses"
+msgstr "Suivant: Configurer les adresses de courriel"
+
+#: NOT FOUND IN SOURCE
+msgid "Next: Customize Password for Users in RT"
+msgstr "Suivant: Configurer les mots de passe des utilisateurs RT"
+
+#: NOT FOUND IN SOURCE
+msgid "Next: Email Configuration"
+msgstr "Suivant: Configuration de la messagerie"
+
+#: NOT FOUND IN SOURCE
+msgid "Next: Finish"
+msgstr "Suifant: fin"
+
+#: NOT FOUND IN SOURCE
+msgid "Next: Initialize Database"
+msgstr "Suivant: initialisation de la base"
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "Surnom"
-#: html/Admin/Users/Modify.html:86 html/User/Prefs.html:74
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Surnom"
-#: html/Admin/CustomFields/UserRights.html:147
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Non"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "Pas de %1 chargé"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Aucune classe définie"
-#: html/Admin/CustomFields/Modify.html:168 html/Admin/Elements/EditCustomField:121
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Aucun champ personnalisé"
-#: html/Admin/CustomFields/GroupRights.html:105
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Aucun champ personnalisé défini"
-#: html/Admin/Groups/GroupRights.html:107 html/Admin/Groups/UserRights.html:94
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Aucun groupe défini"
-#: lib/RT/Tickets_Overlay_SQL.pm:484
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Aucune requête"
-#: html/Admin/Queues/GroupRights.html:120 html/Admin/Queues/UserRights.html:91
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Aucune file définie"
-#: bin/rt-crontool:75
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Pas d'utilisateur RT trouvé. Merci de consulter votre administrateur RT.\\n"
-#: html/Admin/Global/Template.html:98 html/Admin/Queues/Template.html:99
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Pas de sujet"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Pas de modèle"
-#: html/Approvals/Elements/Approve:79
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Pas d'action"
-#: lib/RT/Record.pm:966
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Aucune colonne spécifiée"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Pas de commentaires concernant cet utilisateur"
-#: lib/RT/Action/Generic.pm:187 lib/RT/Condition/Generic.pm:199 lib/RT/Search/ActiveTicketsInQueue.pm:79 lib/RT/Search/Generic.pm:136 lib/RT/Search/Googleish.pm:90
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Pas de tableaux de bord."
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Aucune description disponible pour %1"
-#: lib/RT/Users_Overlay.pm:192
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Aucun groupe spécifié"
-#: html/Admin/Groups/index.html:54
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Aucun groupe trouvé d'après le critère de recherche."
-#: lib/RT/Ticket_Overlay.pm:2386
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Pas de clefs adapté pour le chiffrement"
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Pas de clefs pour cette adresse"
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Aucun messages attachés"
-#: lib/RT/User_Overlay.pm:1036
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Chiffrement non nécessaire"
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Pas de mot de passe configuré"
-#: lib/RT/Queue_Overlay.pm:363
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Permission refusée pour la création de file"
-#: lib/RT/Ticket_Overlay.pm:1090 lib/RT/Ticket_Overlay.pm:422
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Vous n'êtes pas autorisé à créer un ticket dans cette file '%1'"
-#: lib/RT/User_Overlay.pm:188
-msgid "No permission to create users"
-msgstr "Permission refusée pour la création d'utilisateurs"
-
-#: html/SelfService/Display.html:210
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Pas de permission pour afficher ce ticket"
-#: lib/RT/SavedSearch.pm:158
+#: NOT FOUND IN SOURCE
+msgid "No permission to save system-wide %1"
+msgstr "Pas de permission pour effectuer une sauvegarde système de %1"
+
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr "Pas de permission pour sauvegarder des recherches systèmes"
-#: html/SelfService/Update.html:119
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Pas de permission pour modifier les préférences"
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Pas de permission pour afficher le ticket mis à jour"
-#: lib/RT/Ticket_Overlay.pm:1482
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Aucun groupe/utilisateur spécifié"
-#: html/Admin/Queues/People.html:177 html/Admin/Queues/People.html:187
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Aucun groupe/utilisateur sélectionné."
-#: html/Admin/Queues/index.html:59
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Pas de clefs privée"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Pas de file correspondant aux critères de recherche."
-#: html/Admin/Elements/SelectRights:108
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Pas de permissions spécifiées"
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Aucun droit trouvé"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Aucun droit accordé."
-#: lib/RT/SavedSearch.pm:198
-msgid "No search loaded"
-msgstr "Pas de recherche chargée"
-
-#: html/Search/Bulk.html:234
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Pas de critère de recherche."
-#: html/Elements/RT__Ticket/ColumnMap:139 html/Search/Results.rdf:80
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Pas de sujet"
-#: html/Search/Chart:101
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Clefs non trouvée ou non adapté pour les signatures"
+
+#: share/html/Search/Chart:98
msgid "No tickets found."
msgstr "Aucun ticket trouvé"
-#: lib/RT/Transaction_Overlay.pm:549 lib/RT/Transaction_Overlay.pm:586
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Aucun type de transaction spécifié"
-#: html/Admin/Users/index.html:57
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Pas de clefs utilisable."
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Aucun utilisateur ne correspond aux critères de recherche."
-#: lib/RT/Record.pm:963
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Pas de valeur à positionner  \\n"
-#: html/Elements/QuickCreate:61
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Personne"
-#: lib/RT/Record.pm:968
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Aucune"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
-msgstr "Champ inexistant ? "
+msgstr "Champ inexistant ?"
-#: html/Search/Chart:149 html/Search/Elements/Chart:90
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr "Non renseigné"
-#: html/Elements/Header:98
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Non trouvé"
+
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Non connecté."
-#: lib/RT/Date.pm:399
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Non renseigné"
-#: html/NoAuth/Reminder.html:50
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Fonction pas encore disponible."
-#: html/Approvals/Elements/Approve:83
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Notes"
-#: lib/RT/User_Overlay.pm:821
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Impossible d'envoyer la notification"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Avertir les AdminCCs"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Avertir les AdminCCs par un commentaire"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
-msgstr "Aviser par cc"
+msgstr "Avertir les Ccs"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
-msgstr "Aviser par cc pour commentaires"
+msgstr "Avertir les Ccs par un commentaire"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Avertir les autres destinataires"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Avertir les autres destinataires par un commentaire"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Avertir l'intervenant"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Avertir l'intervenant par un commentaire"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Avertir l'intervenant du rejet de son ticket"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr "Avertir l'intervenant que son ticket a été approuvé et est prêt à être traité"
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Avertir l'intervenant de l'approbation de son ticket par tous les approbateurs"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Avertir l'intervenant de l'approbation de son ticket par un des approbateurs"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr "Avertir l'intervenant que son ticket a été approuvé par un ou tous les approbateurs"
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr "Avertir l'intervenant, les demandeurs, Ccs et AdminCcs"
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr "Avertir l'intervenant, les demandeurs, Ccs et AdminCcs par un commentaire"
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Avertir les intervenants et les AdminCCs de nouveaux éléments attendant leur approbation"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr "Avertir le Demandeur que son ticket a été approuvé par tous les approbateurs"
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr "Avertir le Demandeur que son ticket a été approuvé par certains approbateurs"
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Avertir les demandeurs"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Avertir les demandeurs et les Ccs"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Avertir les demandeurs et les CC par un commentaire"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Avertir les demandeurs, CCs et AdminCCs"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Avertir les demandeurs, CCs et AdminCCs par un commentaire"
-#: lib/RT/Date.pm:453
-msgid "Nov."
-msgstr "Nov."
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "Me notifier les messages non-lus"
-#: html/Search/Elements/SelectAndOr:49
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "Nov"
+
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "Novembre"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Nombre de résultats de recherche"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "OU"
-#: lib/RT/Record.pm:329
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "L'objet n'a pas pu être ajouté"
-#: lib/RT/Record.pm:130
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Impossible d'effacer l'objet"
-#: lib/RT/Record.pm:348
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Objet ajouté"
-#: lib/RT/Record.pm:127
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objet effacé"
-#: html/Admin/CustomFields/Objects.html:74 html/Admin/Elements/ObjectCustomFields:65
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Les objets de type %1 ne peuvent avoir de champs personnalisés"
-#: lib/RT/CustomField_Overlay.pm:970
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Le type d'objet ne correspond pas"
-#: lib/RT/Date.pm:452
-msgid "Oct."
-msgstr "Oct."
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr "La liste d'objets est vide"
-#: html/Tools/Elements/Tabs:57
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Oct"
+
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "Octobre"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Déconnecté"
-#: html/Tools/Offline.html:51
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Édition hors ligne"
-#: html/Tools/Offline.html:48
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Téléchargement hors ligne"
-#: html/Elements/SelectDateRelation:58
-msgid "On"
-msgstr "Le"
-
-#: lib/RT/Transaction_Overlay.pm:349
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr "Le %1, %2 a écrit :"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "Lors de la fermeture"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Lors d'un commentaire"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Lors d'un courrier"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Lors d'une création"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Lors d'un changement d'intervenant"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Lors d'un changement de priorité"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Lors d'un changement de file"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr "Lors d'un rejet"
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Lors de la réouverture"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Lors de la résolution/clôture"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Lors d'un changement de statut"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Lors d'une transaction"
-#: html/Approvals/Elements/PendingMyApproval:72
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "Copie cachée (pour ce message)"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "Copie (pour ce message)"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Ne montrer que les approbations pour les demandes créées après %1"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Ne montrer que les approbations pour les demandes créées avant %1"
-#: html/Admin/CustomFields/index.html:77
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Ne montrer que les champs personnalisés pour :"
-#: etc/initialdata:139
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Tickets ouverts"
-#: html/Ticket/Elements/Tabs:162
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Ouvrir l'URL"
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Ouvrir"
-#: html/SelfService/Elements/Tabs:78 html/SelfService/index.html:48
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Tickets ouverts"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Ouvrir les tickets lors d'une correspondance"
-#: html/Prefs/MyRT.html:72
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Options"
-#: html/Search/Elements/DisplayOptions:61
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Trier par"
-#: html/Admin/Users/Modify.html:144 html/User/Prefs.html:131
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organisation"
-#: html/Approvals/Elements/Approve:55
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Ticket source : n°%1"
-#: lib/RT/Transaction_Overlay.pm:643
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
-msgstr "Mail sortant suite à l'enregistrement d'un commentaire"
+msgstr "Courriel sortant suite à l'enregistrement d'un commentaire"
-#: lib/RT/Transaction_Overlay.pm:647
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
-msgstr "Mail sortant enregistré"
+msgstr "Courriel sortant enregistré"
-#: html/Admin/Queues/Modify.html:92
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Temps dépassé, priorité augmentée"
@@ -3250,394 +4795,666 @@ msgstr "Tickets propres"
#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
-msgstr "PrendreTicket"
+msgstr "GérerTicket"
-#: etc/initialdata:38 html/Elements/QuickCreate:58 html/Search/Elements/PickBasics:103 html/Ticket/Create.html:74 html/Ticket/Elements/EditBasics:63 html/Ticket/Elements/EditPeople:66 html/Ticket/Elements/EditPeople:67 html/Ticket/Elements/Reminders:131 html/Ticket/Elements/ShowPeople:50 html/Ticket/Update.html:64 lib/RT/ACE_Overlay.pm:112 lib/RT/Tickets_Overlay.pm:2132
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Intervenant"
-#: lib/RT/Ticket_Overlay.pm:539
-#. ($Owner->Name)
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
msgid "Owner '%1' does not have rights to own this ticket."
-msgstr "Le propriétaire '%1' n'a pas les droits pour s'approprier ce ticket."
+msgstr "L'intervenant '%1' n'a pas les droits pour s'approprier ce ticket."
-#: lib/RT/Ticket_Overlay.pm:3100
+#: lib/RT/Ticket_Overlay.pm:2841
#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
-msgstr "Propriétaire changé de %1 en %2"
+msgstr "Intervenant changé de %1 à %2"
-#: lib/RT/Ticket_Overlay.pm:507
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
-msgstr "Le propriétaire ne peut être sauvé."
+msgstr "L'intervenant ne peut être sauvé."
-#: lib/RT/Transaction_Overlay.pm:693
+#: NOT FOUND IN SOURCE
+msgid "Owner email"
+msgstr "Courriel du propriétaire"
+
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Intervenant forcé de %1 à %2"
-#: html/Elements/TicketList:82
-#. ($Page, $pages)
-msgid "Page %1 of %2"
-msgstr "Page %1 sur %2"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "NomIntervenant"
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Page"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Page 1 sur 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Page non trouvée"
-#: html/Admin/Users/Modify.html:201 html/User/Prefs.html:98
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Bipeur"
-#: html/Elements/EditLinks:145 html/Elements/EditLinks:77 html/Elements/ShowLinks:70 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:62
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "Téléphone de pager"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Parents"
-#: html/Elements/Login:97 html/User/Prefs.html:107
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Mot de passe"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Pense-bête pour votre mot de passe"
-#: lib/RT/Transaction_Overlay.pm:802 lib/RT/User_Overlay.pm:1047
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Mot de passe changé"
-#: lib/RT/User_Overlay.pm:1039 lib/RT/User_Overlay.pm:216
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Le mot de passe doit comporter au moins %1 caractères"
-#: lib/RT/User_Overlay.pm:1046
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Mot de passe défini"
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Mot de passe : %1"
-#: lib/RT/User_Overlay.pm:1032
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Mot de passe : non autorisé"
-#: html/Admin/Users/Modify.html:368
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "ChangementDeMotDePasse"
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Les mots de passe sont différents."
-#: html/User/Prefs.html:244
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Les mots de passe sont différents. Votre mot de passe n'a pas été modifié"
-#: html/Ticket/Elements/ShowSummary:64 html/Ticket/Elements/Tabs:121 html/Ticket/ModifyAll.html:74
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "Chemin pour sendmail"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Personnes"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Réaliser une action définie par l'utilisateur"
-#: html/Admin/Tools/Configuration.html:96
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr "Chemin d'inclusion Perl (@INC)"
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Configuration de Perl"
-#: lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:582 lib/RT/ACE_Overlay.pm:592 lib/RT/ACE_Overlay.pm:602 lib/RT/ACE_Overlay.pm:667 lib/RT/Attribute_Overlay.pm:160 lib/RT/Attribute_Overlay.pm:166 lib/RT/Attribute_Overlay.pm:407 lib/RT/Attribute_Overlay.pm:416 lib/RT/Attribute_Overlay.pm:429 lib/RT/CurrentUser.pm:118 lib/RT/CurrentUser.pm:127 lib/RT/CustomField_Overlay.pm:1020 lib/RT/CustomField_Overlay.pm:1141 lib/RT/CustomField_Overlay.pm:1284 lib/RT/CustomField_Overlay.pm:174 lib/RT/CustomField_Overlay.pm:191 lib/RT/CustomField_Overlay.pm:202 lib/RT/CustomField_Overlay.pm:377 lib/RT/CustomField_Overlay.pm:406 lib/RT/CustomField_Overlay.pm:766 lib/RT/CustomField_Overlay.pm:939 lib/RT/CustomField_Overlay.pm:974 lib/RT/Group_Overlay.pm:1119 lib/RT/Group_Overlay.pm:1123 lib/RT/Group_Overlay.pm:1132 lib/RT/Group_Overlay.pm:1242 lib/RT/Group_Overlay.pm:1246 lib/RT/Group_Overlay.pm:1252 lib/RT/Group_Overlay.pm:447 lib/RT/Group_Overlay.pm:544 lib/RT/Group_Overlay.pm:622 lib/RT/Group_Overlay.pm:630 lib/RT/Group_Overlay.pm:728 lib/RT/Group_Overlay.pm:732 lib/RT/Group_Overlay.pm:738 lib/RT/Group_Overlay.pm:924 lib/RT/Group_Overlay.pm:928 lib/RT/Group_Overlay.pm:941 lib/RT/Queue_Overlay.pm:1058 lib/RT/Queue_Overlay.pm:142 lib/RT/Queue_Overlay.pm:160 lib/RT/Queue_Overlay.pm:685 lib/RT/Queue_Overlay.pm:823 lib/RT/Queue_Overlay.pm:832 lib/RT/Queue_Overlay.pm:845 lib/RT/Scrip_Overlay.pm:151 lib/RT/Scrip_Overlay.pm:162 lib/RT/Scrip_Overlay.pm:226 lib/RT/Scrip_Overlay.pm:540 lib/RT/Template_Overlay.pm:110 lib/RT/Template_Overlay.pm:279 lib/RT/Ticket_Overlay.pm:1380 lib/RT/Ticket_Overlay.pm:1515 lib/RT/Ticket_Overlay.pm:1525 lib/RT/Ticket_Overlay.pm:1539 lib/RT/Ticket_Overlay.pm:1656 lib/RT/Ticket_Overlay.pm:1976 lib/RT/Ticket_Overlay.pm:2119 lib/RT/Ticket_Overlay.pm:2289 lib/RT/Ticket_Overlay.pm:2339 lib/RT/Ticket_Overlay.pm:2519 lib/RT/Ticket_Overlay.pm:2532 lib/RT/Ticket_Overlay.pm:2608 lib/RT/Ticket_Overlay.pm:2621 lib/RT/Ticket_Overlay.pm:2742 lib/RT/Ticket_Overlay.pm:2756 lib/RT/Ticket_Overlay.pm:3007 lib/RT/Ticket_Overlay.pm:3018 lib/RT/Ticket_Overlay.pm:3024 lib/RT/Ticket_Overlay.pm:3241 lib/RT/Ticket_Overlay.pm:3245 lib/RT/Ticket_Overlay.pm:3388 lib/RT/Ticket_Overlay.pm:3516 lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:544 lib/RT/Transaction_Overlay.pm:572 lib/RT/Transaction_Overlay.pm:579 lib/RT/User_Overlay.pm:1178 lib/RT/User_Overlay.pm:1858 lib/RT/User_Overlay.pm:371 lib/RT/User_Overlay.pm:737 lib/RT/User_Overlay.pm:776
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Accès refusé"
-#: lib/RT/Template_Overlay.pm:240 lib/RT/Template_Overlay.pm:249
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr "Accès refusé"
-#: lib/RT/Template_Overlay.pm:379
-msgid "Permissions denied"
-msgstr "Accès refusé"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "Tableaux de bord personnels"
-#: html/User/Elements/Tabs:58
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Groupes personnels"
-#: html/User/Groups/index.html:53 html/User/Groups/index.html:63
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Groupes personnels"
-#: html/User/Elements/DelegateRights:60
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Groupes personnels :"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:83
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Numéros de téléphone"
-#: html/Elements/Header:95 html/Elements/Tabs:94 html/SelfService/Elements/Tabs:98 html/SelfService/Prefs.html:48 html/User/Prefs.html:48 html/User/Prefs.html:51
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Vérifiez l'adresse et réessayez."
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr "Recherches possible cachées"
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Préférences"
-#: html/Admin/Users/MyRT.html:122
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr "Préférence %1 pour l'utilisateur %2 ."
+msgid "Preferences %1 for user %2."
+msgstr "Préférences %1 pour l'utilisateur %2."
-#: html/Prefs/MyRT.html:143
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr "Préférences sauvées pour %1."
-#: lib/RT/Action/Generic.pm:197
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "Préférences sauvées pour l'utilisateur %1."
+
+#: NOT FOUND IN SOURCE
+msgid "Preferences saved for user %2."
+msgstr "Préférences sauvées pour l'utilisateur %2."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "Préférences sauvées."
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Clefs préférée: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Clefs préférée"
+
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Préparation interrompue"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:86
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Précédent"
-#: html/Elements/TicketList:105
-msgid "Previous Page"
-msgstr "Page précédente"
+#: NOT FOUND IN SOURCE
+msgid "Preview"
+msgstr "Prévisualisation"
-#: lib/RT/ACE_Overlay.pm:159 lib/RT/ACE_Overlay.pm:241 lib/RT/ACE_Overlay.pm:571
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Précédent"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Personne/groupe %1 non trouvé(e)."
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:184 html/Ticket/Elements/EditBasics:94 html/Ticket/Elements/ShowBasics:74 lib/RT/Tickets_Overlay.pm:1916
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr "Afficher la compilation des messages sur la sortie standard (STDOUT); ne pas les envoyer. Ne pas les marquer comme \"envoyés\""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Imprimer ce message"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Priorité"
-#: html/Admin/Queues/Modify.html:88
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
-msgstr "La priorité débute à "
+msgstr "La priorité débute à"
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Confidentialité"
-#: html/Search/Elements/EditSearches:52
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Confidentialité :"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Clefs privée"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Privilégié"
-#: html/Admin/Users/Modify.html:346 html/User/Prefs.html:233
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Statut privilégiés :  %1"
-#: html/Admin/Users/index.html:104
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Utilisateurs privilégiés"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr "Exécution sans transactions, certaines conditions ou actions risquent d'échouer. Vous devriez essayer d'utiliser l'option \"--transaction\""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudo groupe pour usage interne"
-#: html/Search/Build.html:123
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "La clefs publique '0x%1' est nécessaire pour vérifier la signature"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Requêtes"
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "Requête"
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Constructeur de requête"
-#: html/Search/Elements/Chart:103
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "Requête:"
-#: html/Elements/QueueSummary:50 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:73 html/SelfService/Create.html:56 html/Ticket/Create.html:64 html/Ticket/Elements/EditBasics:59 html/Ticket/Elements/ShowBasics:78 html/Tools/Reports/CreatedByDates.html:87 html/Tools/Reports/ResolvedByDates.html:88 html/Tools/Reports/ResolvedByOwner.html:68 html/User/Elements/DelegateRights:103 lib/RT/Tickets_Overlay.pm:1743
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "File"
-#: html/Admin/Queues/CustomField.html:65 html/Admin/Queues/Scrip.html:63 html/Admin/Queues/Scrips.html:71 html/Admin/Queues/Templates.html:67
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
msgstr "File %1 non trouvée"
-#: html/Admin/Queues/Modify.html:66
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Nom de la file"
-#: lib/RT/Queue_Overlay.pm:367
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "File déjà créée"
-#: lib/RT/Queue_Overlay.pm:376 lib/RT/Queue_Overlay.pm:382
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Impossible de créer la file"
-#: html/Ticket/Create.html:319 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "File ne pouvant être chargée."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:386 lib/RT/StyleGuide.pod:807
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "File créée"
-#: html/SelfService/Display.html:128 lib/RT/CustomField_Overlay.pm:199
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr "File désactivée"
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr "File activée"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Id. file"
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "File inconnue"
-#: html/Admin/Elements/Tabs:61 html/Admin/index.html:74
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "Droits de la file"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "Clefs pour la file"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr "AdminCcFile"
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr "CcFile"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "NomFile"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr "ObservateurFile"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Files"
-#: html/Elements/MyAdminQueues:48
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Files I administrer"
-#: html/Elements/MySupportQueues:48
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Les files pour lesquelles je suis observateur AdminCc"
-#: html/Elements/Quicksearch:49 html/Prefs/Elements/Tabs:60 html/Prefs/Quicksearch.html:72
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Recherche rapide"
-#: html/Elements/QuickCreate:49
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Création rapide de ticket"
-#: html/Search/Results.html:83
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr "Copy text \t\r\nRFC2616"
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:794
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 pour %2"
-#: html/Admin/index.html:48 html/Admin/index.html:49
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "Administration RT"
-#: html/Elements/Error:65 html/SelfService/Error.html:64
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "Courriel de l'administrateur RT"
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "Config. RT"
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "Erreur RT"
-#: html/SelfService/Elements/Tabs:72 html/SelfService/Elements/Tabs:74
+#: NOT FOUND IN SOURCE
+msgid "RT Name"
+msgstr "Nom RT"
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
msgid "RT Self Service"
msgstr "Self Service RT"
-#: html/Admin/Tools/Configuration.html:75
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr "Taille de RT"
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "Variables de RT"
-#: html/Admin/Elements/SystemTabs:73 html/Admin/Elements/UserTabs:69 html/Admin/Global/MyRT.html:48 html/Admin/Global/MyRT.html:51 html/Admin/Global/MyRT.html:59 html/Admin/Global/index.html:86 html/Admin/Users/MyRT.html:68 html/Prefs/MyRT.html:68 html/Prefs/MyRT.html:80 html/User/Elements/Tabs:67 html/index.html:1 html/index.html:77
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "RT en un coup d'Å“il"
-#: html/Admin/Users/MyRT.html:77
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr "RT en un coup d'Å“il pour l'utilisateur %1"
-#: html/Admin/CustomFields/Modify.html:119
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr "RT peut communiquer avec vos utilisateurs au sujet des nouveaux ticket ou des nouveaux échanges. Indiquez où il est possible de trouver sendmail (ou un exécutable compatible sendmail comme celui fourni par postfix). RT nécessite également une adresse où envoyer les courriels invalides. Cette adresse ne doit pas être une adresse redirigée vers RT."
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr "RT peut inclure le contenu d'un autre service web lorsque ce champs personnalisé est affiché."
-#: html/Admin/CustomFields/Modify.html:108
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "RT peu convertir les valeurs de ce champs personnalisé en liens vers un autre service."
-#: html/Elements/SetupSessionCookie:102
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT ne peut enregistrer votre session."
-#: html/Elements/Logo:51 html/Elements/PageLayout:176
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT pour %1"
-#: html/Search/Simple.html:62
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr "RT est un outil de gestion d'incidents de niveau professionnel, destiné à vous permettre de gérer de manière intelligente et efficace les tâches, les problèmes, les demandes, les incidents ou n'importe quoi d'autre qui nécessite une action."
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr "RT est utilisé par plus de 100 sociétées, entreprises unipersonnelles, organismes publics, facultés, hopitaux, associations, ONGs, bibliothèques, projets de logiciels libres, et toute sorte d'autre organisation sur les septs continents. (Oui, même en Antarctique.)"
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT se connectera à la base de données avec cet identifiant. Il sera automatiquement créé."
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT va créer un utilisateur nommé \"root\" et lui assigner ce mot de passe"
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
-msgstr "RT va rechercher dans tout ce que vous pouvez saisir d'autre dans les sujets des tickets."
+msgstr "RT va rechercher pour tout ce que vous pouvez saisir d'autre, dans les sujets des tickets."
-#: html/Admin/CustomFields/Modify.html:110 html/Admin/CustomFields/Modify.html:121
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr "RT remplacera respectivement <tt>__id__</tt> et <tt>__CustomField__</tt> avec l'identifiant et la valeur du champs personnalisé"
-#: html/Admin/Users/Modify.html:81 html/User/Prefs.html:71
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr "RT utilisera cette chaine de caractère pour identifier de manière unique votre installation et la chercher dans le sujet des courriels pour décider à quel ticket chaque message s'applique. Nous recommandons que vous utilisiez votre nom de domaine internet. (ex: example.com)"
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr "RT fonctionne avec différentes bases de données. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> sont supportées."
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr "RT/Admin/Edit le groupe %1"
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
-msgstr "Nom"
+msgstr "Nom Entier"
-#: html/Tools/MyDay.html:76
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "NomEntier"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Destinataire"
+
+#: share/html/Tools/MyDay.html:73
msgid "Record all updates"
msgstr "Tout enregistrer"
-#: lib/RT/Transaction_Overlay.pm:746
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr "Membre récursif"
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "Ajout d'une référence par %1"
-#: lib/RT/Transaction_Overlay.pm:786
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "Suppression de la référence par %1"
-#: lib/RT/Transaction_Overlay.pm:743
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "Ajout d'une référence à %1"
-#: lib/RT/Transaction_Overlay.pm:783
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "Suppression d'une référence à %1"
-#: html/Elements/EditLinks:104 html/Elements/EditLinks:157 html/Elements/ShowLinks:94 html/Ticket/Create.html:228 html/Ticket/Elements/BulkLinks:74
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Mentionné par"
-#: html/Elements/EditLinks:153 html/Elements/EditLinks:95 html/Elements/SelectLinkType:51 html/Elements/ShowLinks:84 html/Ticket/Create.html:227 html/Ticket/Elements/BulkLinks:70
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr "MentionnéPar"
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Se rapporte à"
-#: html/Elements/Refresh:59
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr "SeRapporteÀ"
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Actualiser"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
-msgstr "Rafraîchir cette page toutes les %1 minute(s)."
+msgstr "Actualiser cette page toutes les %1 minute(s)."
-#: lib/RT/Transaction_Overlay.pm:832
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr "Rappel '%1' ajouté"
-#: lib/RT/Transaction_Overlay.pm:845
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr "Rappel '%1' terminé"
-#: lib/RT/Transaction_Overlay.pm:838
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
-msgstr "Rappel '%1' réouvert"
+msgstr "Rappel '%1' ré-ouvert"
-#: html/Ticket/Reminders.html:48
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr "Ticket de rappel n°%1"
-#: html/Elements/MyReminders:50 html/Ticket/Elements/ShowSummary:77 html/Ticket/Elements/Tabs:124 html/Ticket/Reminders.html:54
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "Rappels"
-#: html/Ticket/Reminders.html:52
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr "Rappels pour le ticket n°%1"
-#: html/Search/Bulk.html:96
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Enlever AdminCc"
-#: html/Search/Bulk.html:92
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Supprimer le favori"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Enlever Cc"
-#: html/Search/Bulk.html:88
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Enlever Demandeur"
-#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:149
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Répondre"
-#: html/Admin/Queues/Modify.html:74
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Adresse de réponse"
-#: html/Search/Bulk.html:131 html/Ticket/ModifyAll.html:96 html/Ticket/Update.html:80
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Répondre aux demandeurs"
@@ -3649,246 +5466,289 @@ msgstr "Répondre aux tickets"
msgid "ReplyToTicket"
msgstr "RépondreTicket"
-#: html/Tools/Elements/Tabs:61 html/Tools/Reports/index.html:48 html/Tools/Reports/index.html:49
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Rapports"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Demandeur"
-#: html/SelfService/Create.html:65 html/Ticket/Create.html:82 html/Ticket/Elements/EditPeople:71 html/Ticket/Elements/ShowPeople:54
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr "GroupeDemandeur"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Demandeurs"
-#: html/Admin/Queues/Modify.html:98
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Le demande doit être résolue dans"
-#: lib/RT/Attribute_Overlay.pm:148
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Le paramètre requis '%1' n'est pas spécifié"
-#: html/Elements/Submit:85
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Remise à zéro"
-#: html/Admin/Users/MyRT.html:62 html/Prefs/MyRT.html:62
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr "Réinitialiser le jeton d'authentification"
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr "Réinitialiser avec les valeurs par défaut"
-#: html/Admin/Users/Modify.html:186 html/User/Prefs.html:86
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Domicile"
-#: html/Ticket/Elements/Tabs:158
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Résoudre"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Résoudre le ticket n°%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:51 lib/RT/Ticket_Overlay.pm:1174
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Résolu"
-#: html/Tools/Reports/Elements/Tabs:57
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Résolus par intervenant"
-#: html/Tools/Reports/Elements/Tabs:61
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Résolus dans la période de temps"
-#: html/Tools/Reports/ResolvedByDates.html:54
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Tickets résolus dans la période, groupés par intervenant"
-#: html/Tools/Reports/ResolvedByOwner.html:52
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Tickets résolus, groupés par intervenant"
-#: html/Elements/ListActions:48 html/Search/Elements/NewListActions:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr "RésoluDepuis"
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr "Répondre"
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Résultats"
-#: html/Admin/Users/Modify.html:128 html/User/Prefs.html:118
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Retourner au ticket"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Saisissez à nouveau votre mot de passe"
-#: html/Search/Elements/EditSearches:63
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Annuler"
-#: lib/RT/ACE_Overlay.pm:632
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Droit délégué"
-#: lib/RT/ACE_Overlay.pm:322
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Droit accordé"
-#: lib/RT/ACE_Overlay.pm:180
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Droit activé"
-#: lib/RT/ACE_Overlay.pm:697 lib/RT/ACE_Overlay.pm:718
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Droit irrévocable"
-#: html/User/Delegation.html:87
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Droit inconnu"
-#: lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:657
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Droit non activé."
-#: lib/RT/ACE_Overlay.pm:714
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Droit révoqué"
-#: html/Admin/Elements/UserTabs:72
-msgid "Rights"
-msgstr "Droits"
-
-#: html/Admin/CustomFields/UserRights.html:102 lib/RT/Interface/Web.pm:987
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Les droits n'ont pas pu être attribués à %1"
-#: html/Admin/CustomFields/UserRights.html:132 lib/RT/Interface/Web.pm:1016
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr "Les droits n'ont pas pu être révoqués pour %1"
-
-#: html/Admin/Global/GroupRights.html:74 html/Admin/Queues/GroupRights.html:76
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Rôles"
-#: html/Prefs/MyRT.html:74
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Lignes"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Lignes par boîte"
-#: html/Search/Elements/DisplayOptions:95
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Lignes par pages"
-#: lib/RT/Date.pm:424
-msgid "Sat."
-msgstr "Sam."
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr "SQLite est une base de données qui ne nécessite pas de serveur ou de configuration spécifique. Les auteurs de RT la recommande pour les tests, démonstrations ou développements, mais ce n'est pas adaptés à une utilisation intensive d'un serveur RT en production."
-#: html/Prefs/MyRT.html:74 html/Prefs/Quicksearch.html:66 html/Prefs/Search.html:71 html/Prefs/Search.html:71 html/Search/Elements/EditSearches:72 html/Widgets/SelectionBox:222
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Sam"
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Samedi"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Sauver"
-#: html/Admin/Groups/Modify.html:94 html/Admin/Queues/Modify.html:113 html/Admin/Queues/People.html:128 html/Admin/Users/Modify.html:243 html/Prefs/Quicksearch.html:66 html/Prefs/SearchOptions.html:65 html/SelfService/Prefs.html:60 html/Ticket/Modify.html:62 html/Ticket/ModifyAll.html:129 html/Ticket/ModifyDates.html:62 html/Ticket/ModifyLinks.html:63 html/Ticket/ModifyPeople.html:62 html/User/Groups/Modify.html:79
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Enregistrer les modifications"
-#: html/User/Prefs.html:183
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Sauvegarder les préférences"
-#: html/Ticket/Elements/PreviewScrips:133
-msgid "Save changes"
-msgstr "Enregistrer les modifications"
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Enregistrer sous"
-#: lib/RT/SavedSearch.pm:175
-#. ($name)
-msgid "Saved search %1"
-msgstr "Recherche %1 sauvée"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "%1 %2 sauvé"
-#: html/Search/Elements/EditSearches:102 html/Widgets/SavedSearch:154
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Recherche sauvée %1 non trouvée"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr "Graphiques sauvés"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Recherches sauvées"
-#: html/Admin/Elements/ListGlobalScrips:62 html/Admin/Global/Scrip.html:79 html/Admin/Queues/Scrip.html:86
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Scrip n°%1"
-#: lib/RT/Scrip_Overlay.pm:205
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip ajouté"
-#: html/Admin/Elements/EditScrip:54
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Champs de scrip"
-#: html/Admin/Elements/EditScrips:111
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip supprimé"
-#: html/Admin/Elements/QueueTabs:69 html/Admin/Elements/SystemTabs:56 html/Admin/Global/index.html:64
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrips"
-#: html/Admin/Queues/Scrips.html:57
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Scrips et destinataires"
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Scrips s'appliquant à toutes les files"
-#: html/Elements/SimpleSearch:50 html/Search/Simple.html:67
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Rechercher"
-#: html/Prefs/SearchOptions.html:49 html/Prefs/SearchOptions.html:52
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Préférences de recherche"
-#: lib/RT/SavedSearch.pm:117
-msgid "Search attribute load failure"
-msgstr "Impossible de charger les attributs de recherche"
-
-#: html/Approvals/Elements/PendingMyApproval:61
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Rechercher des approbations"
-#: html/Search/Simple.html:77
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Rechercher des tickets"
-#: html/Search/Simple.html:59
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
-msgstr "Rechercher des tickets. Saisissez un numéro d'<strong>identifiant</strong>, un <strong>nom de file</strong>, les intervenants par <strong>nom</strong> et les demandeurs par <strong>adresse mail</strong>. RT recherchera tout ce qui peut se trouver dans le corps des tickets et les attachements."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Rechercher des tickets. Saisissez un numéro d'<strong>identifiant</strong>, un <strong>nom de file</strong>, les intervenants par <strong>nom</strong> et les demandeurs par <strong>adresse courriel</strong>."
-#: html/User/Elements/Tabs:64
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Options de recherche"
-#: html/Search/Chart.html:58
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Résultats groupés par %1"
-#: lib/RT/SavedSearch.pm:205
-#. ($msg)
-msgid "Search update: %1"
-msgstr "Mise à jour de la recherche %1"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr "Intervalle d'actualisation des résultats de recherche"
-#: html/Search/Simple.html:61
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "La recherche en texte intégral (<em>full text</em>) sur chacun des tickets peut prendre un long moment, mais si vous le nécessitez, vous pouvez rechercher n'importe quel mot dans les historiques de tickets en tapant <b>fulltext:<i>mot</i></b>."
-#: bin/rt-crontool:267
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr "Jeton d'authentification"
+
+#: bin/rt-crontool:368
msgid "Security:"
-msgstr "Sécurité : "
+msgstr "Sécurité :"
-#: html/Elements/ShowCustomFields:102
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Voir également:"
-#: lib/RT/CustomField_Overlay.pm:107
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr "Afficher les valeurs de champ personnalisé"
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Voir les champs personnalisés"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
-msgstr "Voir les mails sortant et leurs destinataires"
+msgstr "Voir les courriels sortant et leurs destinataires"
#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
@@ -3898,211 +5758,284 @@ msgstr "Voir les commentaires privés du ticket"
msgid "See ticket summaries"
msgstr "Vue récapitulative des tickets"
-#: lib/RT/CustomField_Overlay.pm:107
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "VoirChampPersonnalisé"
-#: lib/RT/Group_Overlay.pm:171
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "VoirTableauDeBord"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "VoirGroupe"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "VoirTableauDeBordDeGroupe"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "VoirTableauDeBordPersonnel"
+
+#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "VoirFile"
-#: html/Admin/CustomFields/index.html:48 html/Admin/CustomFields/index.html:51
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "Choisir"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Choisissez un type de base de données"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Choisissez un champ personnalisé"
-#: html/Admin/Groups/index.html:80
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Choisir un groupe"
-#: html/Admin/Queues/index.html:56
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Choisir une file"
-#: html/SelfService/CreateTicketInQueue.html:50
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Choisir une file pour votre nouveau ticket"
-#: html/Admin/Users/index.html:48 html/Admin/Users/index.html:51 html/Admin/Users/index.html:54
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Choisir un utilisateur"
-#: html/Admin/Elements/CustomFieldTabs:92
-msgid "Select custom field"
-msgstr "Choisir le champ personnalisé"
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Séléctionner une autre langue"
-#: html/Admin/Global/CustomFields/index.html:72
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Sélectionner les champs personnalisés pour toutes les files"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Choisir des champs personnalisés pour tous les groupes d'utilisateurs"
-#: html/Admin/Global/CustomFields/index.html:67
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Choisir des champs personnalisés pour tous les utilisateurs"
-#: html/Admin/Global/CustomFields/index.html:78
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Choisir des champs personnalisés pour toutes les files"
-#: html/Admin/Global/CustomFields/index.html:85
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Choisir des champs personnalisés pour les opération sur les tickets de toutes les files"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Sélectionner le tableau de bord"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Choisir le groupe"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Choisir plusieurs valeurs"
-#: lib/RT/CustomField_Overlay.pm:62
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Choisir une valeur"
-#: html/Admin/Elements/QueueTabs:94
-msgid "Select queue"
-msgstr "Choisir la file"
-
-#: html/Prefs/Quicksearch.html:55
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
-msgstr "Sélectionnez les files à afficher dans la page \"RT en un coup d'œil\" page"
+msgstr "Sélectionnez les files à afficher dans la page \"RT en un coup d'œil\""
-#: html/Admin/Global/Scrip.html:61 html/Admin/Global/Scrips.html:59 html/Admin/Queues/Scrip.html:69 html/Admin/Queues/Scrips.html:75
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Choisir le scrip"
-#: html/Admin/Global/Template.html:77 html/Admin/Global/Templates.html:59 html/Admin/Queues/Template.html:78 html/Admin/Queues/Templates.html:70
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Choisir le modèle"
-#: lib/RT/CustomField_Overlay.pm:63
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Choisir au plus %1 valeurs"
-#: html/Admin/Elements/UserTabs:80
-msgid "Select user"
-msgstr "Choisir l'utilisateur"
-
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Champs personnalisés sélectionnés"
-#: html/Admin/CustomFields/Objects.html:61
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "La clefs sélectionnée n'est pas de confiance ou n'existe plus."
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Objets sélectionnés"
-#: html/Widgets/SelectionBox:220
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Sélections modifiées. Merci de sauver vos modifications"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Courriel envoyé avec succès"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Envoyer un courrier à tous les observateurs"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Envoyer un mail de commentaire à tous les observateurs"
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr "Envoyer un courriel aux intervenants et observateurs"
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr "Envoyer un courriel à l'intervenants et aux observateurs en \"commentaire\""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Envoyer un courrier aux demandeurs et aux CCs"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Envoyer un courrier aux demandeurs et aux CCs en tant que commentaire"
-#: etc/initialdata:78
+#: NOT FOUND IN SOURCE
+msgid "Sendmail arguments"
+msgstr "Arguments sendmail"
+
+#: NOT FOUND IN SOURCE
+msgid "Sendmail bounce arguments"
+msgstr "Arguments de rejet (bounce) pour Sendmail"
+
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Envoyer un courrier aux demandeurs"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Envoyer un courrier aux CCs et Bccs explicitement indiqués"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Envoyer un courriel en cc"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Envoyer un courriel en cc pour commentaires"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Envoyer un mail aux AdminCCs"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Envoyer un mail aux AdminCCs en tant que commentaire"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Envoyer un courrier à l'intervenant"
-#: lib/RT/Date.pm:451
-msgid "Sep."
-msgstr "Sep."
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Sep"
-#: html/Ticket/Elements/ShowTransaction:161
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "Septembre"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Réglages"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Afficher"
-#: html/Search/Elements/EditFormat:58
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Afficher les colonnes"
-#: html/Ticket/Elements/Tabs:222
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Aff. résultats"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr "Afficher les propriétés des tickets de niveau %1"
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Afficher les requêtes approuvées"
-#: html/Ticket/Create.html:391
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "Voir également"
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Affichage court"
-#: html/Approvals/Elements/PendingMyApproval:67
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Afficher les requêtes refusées"
-#: html/Ticket/Create.html:394
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Affichage long"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Afficher la description des liens"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr "Afficher le message le plus ancien en premier"
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Afficher les requêtes en attente"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Afficher les requêtes attendant d'autres approbations"
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:93
msgid "ShowACL"
msgstr "AfficherACL"
-#: lib/RT/System.pm:87
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr "VoirOngletApprobations"
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "VoirOngletConfiguration"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
-msgstr "AfficherEmailSortant"
+msgstr "AfficherCourrielSortant"
-#: lib/RT/Group_Overlay.pm:170
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "AfficherRecherchesSauvées"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "AfficherScrips"
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "AfficherModèle"
@@ -4114,6 +6047,27 @@ msgstr "AfficherTicket"
msgid "ShowTicketComments"
msgstr "AfficherCommentairesTickets"
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "Shredder"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr "Le Shredder a besoin d'un répertoire afin d'écrire ses \"dumps\". Veuillez vérifier que <span class=\"file-path\">%1</span> existe et est en écriture pour votre serveur web."
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Barre latérale"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "Signer"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "Signer par défaut"
+
#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "S'identifier en tant que demandeur ou CC de file ou de ticket"
@@ -4122,155 +6076,270 @@ msgstr "S'identifier en tant que demandeur ou CC de file ou de ticket"
msgid "Sign up as a ticket or queue AdminCc"
msgstr "S'identifier en tant qu'AdminCC de ticket ou de file"
-#: html/Admin/Users/Modify.html:234 html/User/Prefs.html:170
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Signature"
-#: html/Elements/Tabs:71
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Signature désactivée"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "Signature activée"
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Recherche rapide"
-#: html/Admin/Elements/SelectSingleOrMultiple:49
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Unique"
-#: html/Search/Elements/EditFormat:77
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Nom du site"
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Taille"
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Passer le menu"
-#: html/Search/Elements/EditFormat:80
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr "Sauter les utilisateurs désactivés"
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Petite"
-#: html/Admin/CustomFields/Modify.html:122
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "Certains navigateurs peuvent restreindre le chargement du contenu au domaine du serveur RT."
-#: html/Admin/Elements/AddCustomFieldValue:51 html/Admin/Elements/EditCustomFieldValues:56
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Trier"
-#: html/Admin/Elements/EditScrip:80
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Tri"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Spécifie si le lancement et quotidien ou hebdomadaire."
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Tableur"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Étape"
-#: html/Elements/SelectDateType:50 html/Ticket/Elements/EditDates:55 html/Ticket/Elements/ShowDates:58
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Ouvert le"
-#: html/Elements/SelectDateType:54 html/Ticket/Create.html:211 html/Ticket/Elements/EditDates:50 html/Ticket/Elements/ShowDates:54
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr "OuvertDepuis"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Débute"
-#: html/Admin/Users/Modify.html:165 html/User/Prefs.html:147
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr "DébuteDepuis"
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "État"
-#: html/Search/Elements/PickBasics:89 html/SelfService/Update.html:59 html/Ticket/Create.html:68 html/Ticket/Elements/EditBasics:55 html/Ticket/Elements/ShowBasics:54 html/Ticket/Update.html:61 html/Tools/MyDay.html:70 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1777
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Statut"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Changement de statut"
-#: lib/RT/Transaction_Overlay.pm:605
+#: lib/RT/Transaction_Overlay.pm:641
#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Statut changé de %1 à %2"
-#: html/Ticket/Elements/Tabs:180
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Voler"
-#: lib/RT/Queue_Overlay.pm:119
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
-msgstr "Voler les tickets "
+msgstr "Voler les tickets"
-#: lib/RT/Queue_Overlay.pm:119
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "VolerTicket"
-#: lib/RT/Transaction_Overlay.pm:699
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Étape %1 sur %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Step %1 of %2: "
+msgstr "Étape %1 sur %2: "
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Volé à %1"
-#: html/Search/Elements/EditFormat:83
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Style"
-#: html/Elements/QuickCreate:54 html/Elements/SelectAttachmentField:49 html/Search/Bulk.html:134 html/SelfService/Create.html:81 html/SelfService/Update.html:67 html/Ticket/Create.html:110 html/Ticket/Elements/EditBasics:50 html/Ticket/Elements/Reminders:127 html/Ticket/ModifyAll.html:102 html/Ticket/Update.html:84 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:1859
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Sujet"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:813 lib/RT/Transaction_Overlay.pm:721
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr "Marque de sujet"
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Sujet modifié en %1"
-#: html/Elements/Submit:77
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr "Marque de sujet changé en %1"
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Valider"
-#: lib/RT/Group_Overlay.pm:776
-msgid "Succeeded"
-msgstr "Réussi"
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "S'abonner"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "S'abonner au tableau de bord %1"
-#: lib/RT/Date.pm:425
-msgid "Sun."
-msgstr "Dim."
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "S'abonner aux tableaux de bord"
-#: lib/RT/System.pm:77
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "SabonnerAUnTableauDeBord"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "S'abonner au tableau de bord %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "Abonnement"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr "L'abonnement n'a pas pu être créé: %1"
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Donnée déchiffrées sans erreur"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Données chiffrées sans erreur"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Dim"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Dimanche"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "SuperUtilisateur"
-#: html/User/Elements/DelegateRights:100
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Suspendu"
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Système"
-#: html/Admin/Elements/ToolTabs:56 html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Configuration système"
-#: html/Admin/CustomFields/UserRights.html:100 html/Admin/CustomFields/UserRights.html:130 html/Admin/Elements/SelectRights:108 lib/RT/ACE_Overlay.pm:586 lib/RT/Interface/Web.pm:1015 lib/RT/Interface/Web.pm:986
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "Tableaux de bord système"
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Valeur par défaut du système"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Erreur système"
-#: lib/RT/Transaction_Overlay.pm:226 lib/RT/Transaction_Overlay.pm:232
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr "Erreur système :  %1"
-#: html/Admin/Tools/index.html:49
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Outils système"
-#: lib/RT/ACE_Overlay.pm:635
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Erreur système. Droit non délégué."
-#: lib/RT/ACE_Overlay.pm:165 lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:325
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Erreur système. Droit non accordé."
-#: html/Admin/CustomFields/GroupRights.html:60 html/Admin/Global/GroupRights.html:58 html/Admin/Groups/GroupRights.html:60 html/Admin/Queues/GroupRights.html:59
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Groupes systèmes"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "Droits système"
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "SystemRolegroup à usage interne"
-#: lib/RT/CurrentUser.pm:359
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "Chaîne_de_test"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:74 html/Ticket/Elements/Tabs:172
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Prendre"
@@ -4282,560 +6351,882 @@ msgstr "Prendre les tickets"
msgid "TakeTicket"
msgstr "PrendreTicket"
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Pris"
-#: html/Admin/Elements/EditScrip:73 html/Tools/Offline.html:80
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr "Donnez nous quelques information pour trouver la base de données que RT utilisera"
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Modèle"
-#: html/Admin/Global/Template.html:110 html/Admin/Queues/Template.html:115
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Modèle n°%1"
-#: html/Admin/Elements/EditTemplates:112
-msgid "Template deleted"
-msgstr "Modèle supprimé"
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Modèle #%1 effacé"
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Modèle '#%1' non trouvé"
-#: lib/RT/Scrip_Overlay.pm:178
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Le modèle est vide"
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr "Modèle est un argument obligatoire"
-#: lib/RT/Scrip_Overlay.pm:182
-msgid "Template not found"
-msgstr "Modèle inconnu"
-
-#: lib/RT/Template_Overlay.pm:346
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Modèle analysé"
-#: lib/RT/Template_Overlay.pm:398
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Erreur d'analyse du modèle"
-#: html/Admin/Elements/QueueTabs:72 html/Admin/Elements/SystemTabs:59 html/Admin/Global/index.html:68
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Modèles"
-#: lib/RT/CustomField_Overlay.pm:946 lib/RT/Record.pm:962
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr "Le fichier texte n'est pas affiché car désactivé dans les préférences."
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Ceci est déjà la valeur actuelle"
-#: lib/RT/CustomField_Overlay.pm:415
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Valeur incorrecte pour ce champ personnalisé"
-#: lib/RT/Ticket_Overlay.pm:1987
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Valeur identique"
-#: lib/RT/ACE_Overlay.pm:307 lib/RT/ACE_Overlay.pm:616
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Ce groupe/utilisateur dispose déjà de ce droit"
-#: lib/RT/Queue_Overlay.pm:748
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Ce groupe/utilisateur est déjà un %1 pour cette file"
-#: lib/RT/Ticket_Overlay.pm:1428
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Ce groupe/utilisateur est déjà un %1 pour ce ticket"
-#: lib/RT/Queue_Overlay.pm:856
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Ce groupe/utilisateur n'est pas un %1 pour cette file"
-#: lib/RT/Ticket_Overlay.pm:1550
+#: lib/RT/Ticket_Overlay.pm:1248
#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
msgstr "Ce groupe/utilisateur n'est pas un %1 pour ce ticket"
-#: lib/RT/Ticket_Overlay.pm:1983
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "File inconnue"
-#: lib/RT/Ticket_Overlay.pm:3250
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Ticket ayant des tickets fils ou dépendants non résolus"
-#: lib/RT/Action/CreateTickets.pm:712 lib/RT/Ticket_Overlay.pm:3053
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Cet utilisateur possède déjà ce ticket"
-#: lib/RT/Ticket_Overlay.pm:2996
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Utilisateur inconnu"
-#: lib/RT/User_Overlay.pm:391
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Utilisateur possédant déjà un statut privilégié"
-#: lib/RT/User_Overlay.pm:412
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
-msgstr "Utilisateur déjà sans privilèges"
+msgstr "Utilisateur déjà non-privilégié"
-#: lib/RT/User_Overlay.pm:404
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Utilisateur bénéficiant à présent du statut privilégié"
-#: lib/RT/User_Overlay.pm:425
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Cet utilisateur est maintenant non privilégié"
-#: lib/RT/Ticket_Overlay.pm:3046
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Cet utilisateur ne peut pas posséder de ticket dans cette file"
-#: lib/RT/Link_Overlay.pm:235
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Identifiant non numérique"
-#: html/SelfService/Display.html:55 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:51
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Éléments de base"
-#: lib/RT/ACE_Overlay.pm:114
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "Le CC d'un ticket"
-#: lib/RT/ACE_Overlay.pm:115
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "Le mot de passe du DBA de la base de données"
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "L'AdminCC d'un ticket"
-#: bin/rt-crontool:277
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "Le nom de domaine de votre serveur de base de données (ex: 'db.example.com')."
+
+#: NOT FOUND IN SOURCE
+msgid "The domain name of your database server (like 'db.int.example.com')"
+msgstr "Nom d'hôte du serveur de base de données (exemple 'bd.int.exemple.fr')"
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Cette commande trouve tous les tickets actifs de la file 'general' et positionne leur priorité à 99 s'ils n'ont pas été touchés depuis quatre heures :"
-#: lib/RT/Record.pm:965
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr "Les requêtes suivantes ont été supprimées et chacune sera enlevée du tableau de bord quand son panneau sera mis à jour."
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr "Les requêtes suivantes ne sont pas forcément visibles à tous les utilisateurs de ce tableau de bord."
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "La clefs a été désactivée"
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "La clefs a été révoquée"
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "La clefs a expiré"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr "Entière confiance pour cette clefs"
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr "Confiance ultime pour cette clefs"
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "La nouvelle valeur est enregistrée."
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "L'intervenant d'un ticket"
-#: lib/RT/ACE_Overlay.pm:113
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "La page que vous avez demandé n'a pas pu être trouvée"
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Le demandeur d'un ticket"
-#: html/Admin/Elements/EditUserComments:49
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr "La configuration choisie est stockée dans %1."
+
+#: NOT FOUND IN SOURCE
+msgid "The settings you've chosen are stored in %1. You can edit this file to refine your configuration further. You can prevent this installation wizard from being shown again by running `<tt>chmod -w '%1'</tt>`."
+msgstr "Les paramêtres que vous avez choisis sont stockés dans %1. Vous pouvez éditer ce fichier pour affiner votre configuration. Vous pouvez stopper le démarrage de cet outil d'installation en lancant la commande `<tt>chmod -< '%1'</tt>`."
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr "Le système n'est pas capable de signer les messages courriels sortants. Ceci indique généralement que la passphrase a été mal saisie, ou que l'agent GPG est arrêté. Prévenez s'il-vous plait votre administrateur système immédiatement. Les adresses avec problème sont:"
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Thème"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "Il y a plusieurs clefs disponibles pour le chiffrement."
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "Il y a des messages non lu dans ce ticket."
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr "Confiance marginale pour cette clefs"
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "Il n'y a pas de clefs disponible pour le chiffrement."
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr "Il y a une clefs disponible, mais le niveau de confiance n'est pas configuré."
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Ces commentaires ne sont généralement pas accessibles par l'utilisateur"
-#: lib/RT/CustomField_Overlay.pm:981
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr "Ces options de configurations concernent les éléments de base pour obtenir un RT fonctionnel. Nous avons besoin de connaître le nom de votre installation RT et le nom de domaines lui correspondant. Vous devrez également définir un mot de passe pour l'administrateur par défaut."
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Ce champ personnalisé ne s'applique pas à cet objet"
-#: html/Admin/Tools/Configuration.html:52
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Cet possibilité n'est offerte qu'aux administrateurs systèmes"
-#: html/Elements/SetupSessionCookie:106
+#: lib/RT/Interface/Web/Session.pm:277
#. ($RT::MasonSessionDir)
msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
msgstr "Ceci peut indiquer que l'on ne peut pas écrire dans le répertoire '%1' ou qu'une table de la base de données et manquante ou corrompue."
-#: html/Ticket/Elements/PreviewScrips:98
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Ce message va être envoyé à..."
-#: bin/rt-crontool:268
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Cet outil permet à l'utilisateur de lancer un module perl quelconque depuis RT."
-#: lib/RT/Transaction_Overlay.pm:327
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Cette opération semble ne pas avoir de contenu"
-#: html/Ticket/Elements/ShowRequestor:72
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "Les %1 tickets prioritaires de cet utilisateur"
-#: lib/RT/Date.pm:422
-msgid "Thu."
-msgstr "Jeu."
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Jeu"
-#: html/Ticket/ModifyAll.html:48 html/Ticket/ModifyAll.html:52
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Jeudi"
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Ticket"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Ticket n°%1 mise à jour globale : %2"
-#: html/Approvals/Elements/ShowDependency:69
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "Graphique des relations pour le ticket n° %1"
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Ticket n°%1 : %2"
-#: lib/RT/Action/CreateTickets.pm:1352 lib/RT/Action/CreateTickets.pm:1361 lib/RT/Action/CreateTickets.pm:607 lib/RT/Action/CreateTickets.pm:731 lib/RT/Action/CreateTickets.pm:743
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "Ticket %1"
-#: lib/RT/Ticket_Overlay.pm:757 lib/RT/Ticket_Overlay.pm:777
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Ticket %1 créé dans la file '%2'"
-#: html/Search/Bulk.html:379 html/Tools/MyDay.html:103 html/Tools/MyDay.html:94 html/Tools/MyDay.html:97
-#. ($Ticket->Id, $_)
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
#. ($id, $msg)
+#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Ticket %1 :  %2"
-#: html/Admin/Elements/QueueTabs:76
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Champs personnalisés du ticket"
-#: html/Ticket/History.html:48 html/Ticket/History.html:51
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Historique du ticket n°%1 %2"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Ticket résolu"
-#: html/Admin/Elements/GlobalCustomFieldTabs:71 html/Admin/Global/CustomFields/index.html:83 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Recherche de ticket"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Transactions du ticket"
-#: lib/RT/Tickets_Overlay.pm:2046
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Contenu du ticket"
-#: lib/RT/Tickets_Overlay.pm:2095
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Type du contenu du ticket"
-#: lib/RT/Ticket_Overlay.pm:605 lib/RT/Ticket_Overlay.pm:619 lib/RT/Ticket_Overlay.pm:630 lib/RT/Ticket_Overlay.pm:765
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Une erreur interne a empêché l'ajout du ticket"
-#: html/Ticket/Create.html:247
+#: share/html/Ticket/Create.html:255
msgid "Ticket could not be loaded"
msgstr "Le ticket n'a pas pu être chargé"
-#: html/Ticket/Display.html:57
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Affichage des tickets"
+
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Méta-données du ticket"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Statut de ticket modifié"
-#: lib/RT/Search/FromSQL.pm:84
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "Module de recherche TicketSQL"
-#: html/Admin/Elements/GlobalCustomFieldTabs:66 html/Admin/Global/CustomFields/index.html:77 html/Elements/Tabs:74 html/Search/Chart:113 html/Search/Elements/Chart:111 lib/RT/CustomField_Overlay.pm:1209
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Tickets"
-#: lib/RT/Tickets_Overlay.pm:2287
-#. ($self->loc( $args{'TYPE'} ), ( $args{'BASE'} || $args{'TICKET'} ))
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
msgid "Tickets %1 %2"
msgstr "Tickets %1 %2"
-#: lib/RT/Tickets_Overlay.pm:2239
-#. ($self->loc( $args{'TYPE'} ), ( $args{'TARGET'} || $args{'TICKET'} ))
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "Tickets %1 sur %2"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Tickets créés après"
-#: html/Tools/Reports/CreatedByDates.html:90
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Tickets créés avant"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Tickets résolus après"
-#: html/Tools/Reports/ResolvedByDates.html:91
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Tickets résolus avant"
-#: html/Approvals/Elements/ShowDependency:50
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Tickets dépendant de cette approbation :"
-#: html/Search/Elements/PickBasics:136 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:74
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Temps estimé"
-#: html/Search/Elements/PickBasics:137 html/Ticket/Create.html:199 html/Ticket/Elements/EditBasics:87 lib/RT/Tickets_Overlay.pm:2017
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Temps restant"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:192 html/Ticket/Elements/EditBasics:80 lib/RT/Tickets_Overlay.pm:1992
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Temps passé"
-#: html/Elements/Footer:53
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Temps de calcul"
-#: lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "TempsEstimé"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "TempsRestant"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "TempsPassé"
-#: html/Search/Elements/EditFormat:76
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Fuseau horaire"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Titre"
-#: html/Elements/Footer:64
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "À"
+
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Pour vous renseigner au sujet du support, de la formation, des développements spécifiques ou au sujet de la licence, merci de contacter en anglais %1."
-#: lib/RT/Ticket_Overlay.pm:1172
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Annoncé"
-#: html/Admin/Elements/Tabs:70 html/Admin/index.html:90 html/Elements/Tabs:77 html/Tools/index.html:48 html/Tools/index.html:51
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr "AnnoncéDepuis"
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Outils"
-#: html/Search/Elements/Chart:132
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Total"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transaction"
-#: lib/RT/Transaction_Overlay.pm:826
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "La transaction %1 est supprimée"
-#: lib/RT/Transaction_Overlay.pm:185
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transaction ajoutée"
-#: html/Admin/Elements/QueueTabs:80
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Champs personnalisées de la transaction"
-#: lib/RT/Transaction_Overlay.pm:130
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaction->Create a échoué car vous n'avez pas spécifié de type d'objet et d'id"
-#: lib/RT/Transaction_Overlay.pm:891
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr "DateDeTransaction"
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Les transactions ne peuvent être transférées"
-#: lib/RT/Date.pm:420
-msgid "Tue."
-msgstr "Mar."
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Confiance"
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue Dec 25 21:59:12 1995"
+msgstr "Mar Déc 25 21:59:12 1995"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue, 25 Dec 1995 21:59:12 -0300"
+msgstr "Mar, 25 Déc 1995 21:59:12 -0300"
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Mardi"
-#: html/Admin/CustomFields/Modify.html:68 html/Admin/Elements/EditCustomField:67 html/Ticket/Elements/AddWatchers:56 html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/AddWatchers:77 lib/RT/Ticket_Overlay.pm:1170 lib/RT/Tickets_Overlay.pm:1831
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Type"
-#: lib/RT/ScripCondition_Overlay.pm:130
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Type changé de '%1' à '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr "Impossible de déterminer le type ou l'identifiant de l'objet"
+
+#: NOT FOUND IN SOURCE
+msgid "Unable to load dashboard %1 of subscription %2 for user %3"
+msgstr "Impossible de charger le tableau de bord %1 de l'abonnement %2 pour l'utilisateur %3"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "Impossible de s'abonner au tableau de bord %1: permissions refusée"
+
+#: NOT FOUND IN SOURCE
+msgid "Unable to unsubscribe to dashboard %1"
+msgstr "Impossible de s'abonner au tableau de bord %1"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Fonction non disponible"
-#: html/Admin/Users/Modify.html:91
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Identifiant Unix"
-#: lib/RT/Attachment_Overlay.pm:291 lib/RT/Record.pm:863
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr "Inconnu (pas de niveau de confiance assigné)"
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr "Inconnu (ceci est une nouvelle valeur pour le système)"
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Type d'encodage de courrier inconnu : %1"
-#: html/Search/Build.html:461 lib/RT/Report/Tickets.pm:410
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
#. ($key)
msgid "Unknown field: %1"
msgstr "Champ inconnu: %1"
-#: html/Elements/SelectResultsPerPage:60
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr "Pas de limite"
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Illimité"
-#: html/Search/Elements/SelectSearchesForObjects:66
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Recherche non nommée"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
-msgstr "Non privilégié"
+msgstr ""
-#: html/Admin/Elements/EditCustomFields:62
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Champs personnalisés non sélectionnés"
-#: html/Admin/CustomFields/Objects.html:63
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Objets non sélectionnés"
-#: lib/RT/Transaction_Overlay.pm:680
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr "Désélectionner la clefs privée"
+
+#: NOT FOUND IN SOURCE
+msgid "Unsubscribe"
+msgstr "Se désabonner"
+
+#: NOT FOUND IN SOURCE
+msgid "Unsubscribed to dashboard %1"
+msgstr "Se désabonner du tableau de bord %1"
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Non pris"
-#: html/Admin/Elements/EditScrip:130 html/Elements/RT__Ticket/ColumnMap:304 html/Search/Bulk.html:195 html/Search/Bulk.html:77
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Mettre à jour"
-#: html/Ticket/Update.html:137
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Mettre à jour le graphique"
+
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Mettre à jour le ticket"
-#: html/Search/Bulk.html:128 html/Ticket/ModifyAll.html:89 html/Ticket/Update.html:74
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Mettre à jour le type"
-#: html/Search/Bulk.html:202 html/Search/Results.html:80
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Mettre à jour le format et rechercher"
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Mettre à jour plusieurs tickets"
-#: lib/RT/Action/CreateTickets.pm:752 lib/RT/Interface/Web.pm:606
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Mise à jour non enregistrée."
-#: html/Ticket/ModifyAll.html:86
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Mettre à jour le ticket"
-#: html/SelfService/Update.html:114 html/SelfService/Update.html:49
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Mettre à jour le ticket n°%1"
-#: html/Ticket/Update.html:160
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Mettre à jour le ticket n°%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:605
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Le type de mise à jour n'était ni un commentaire ni un courrier."
-#: html/Elements/SelectDateType:56 html/Ticket/Elements/ShowDates:74 lib/RT/CustomField_Overlay.pm:1287 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr "Statut de mise à jour"
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Mis(e) à jour"
-#: html/Tools/Offline.html:95
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "Recherche sauvée \"%1\" mise à jour"
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
-msgstr "Uploader"
+msgstr "Envoyer"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Télécharger plusieurs fichiers"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Télécharger plusieurs images"
-#: lib/RT/CustomField_Overlay.pm:87
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Télécharger un fichier"
-#: lib/RT/CustomField_Overlay.pm:82
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Télécharger une image"
-#: lib/RT/CustomField_Overlay.pm:88
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Télécharger un maximum de %1 fichiers"
-#: lib/RT/CustomField_Overlay.pm:83
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Télécharger au plus %1 images"
-#: html/Tools/Offline.html:95
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
-msgstr "Télécharger vos changements"
+msgstr "Envoyer vos changements"
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Utilisation: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "Utiliser SSL?"
-#: html/Admin/index.html:92
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "Utiliser la valeur par défaut (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Use fixed-width font to display plaintext messages"
+msgstr "Utiliser une police à chasse fixe pour afficher les message en texte brut"
+
+#: NOT FOUND IN SOURCE
+msgid "Use monospace font"
+msgstr "Utiliser une police de caractères à espacement fixe"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Utiliser les autres outils d'administration de RT"
-#: lib/RT/Ticket_Overlay.pm:508
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "Utiliser la valeur système par défaut (%1)"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Utilisateur"
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "L'utilisateur %1 ne peut être trouvé."
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr "Utilisateur (créé - expire)"
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Défini par l'utilisateur"
-#: html/Admin/Elements/EditScrip:95
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Conditions et actions définies par l'utilisateur"
-#: html/Admin/Elements/CustomFieldTabs:74 html/Admin/Elements/GroupTabs:70 html/Admin/Elements/QueueTabs:87 html/Admin/Elements/SystemTabs:70 html/Admin/Global/index.html:82
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Droits utilisateurs"
-#: lib/RT/Interface/Web.pm:1387
-#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "L'utilisateur a demandé un type de mise à jour non connu pour le champ personnalisé %1 de l'objet %2 n°%3"
-#: html/Admin/Users/Modify.html:305
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "L'utilisateur ne peut être créé : %1"
-#: lib/RT/User_Overlay.pm:332
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Utilisateur créé"
-#: html/Admin/CustomFields/GroupRights.html:76 html/Admin/Global/GroupRights.html:90 html/Admin/Groups/GroupRights.html:77 html/Admin/Queues/GroupRights.html:92
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Groupes définis par l'utilisateur"
-#: lib/RT/User_Overlay.pm:594 lib/RT/User_Overlay.pm:614
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr "Utilisateur désactivé"
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr "Utilisateur activé"
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "L'adresse de courriel de l'utilisateur est vide"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Utilisateur chargé"
-#: html/Admin/Groups/index.html:105
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Clefs GnuPG de l'utilisateur"
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Groupe définis par l'utilisateur"
-#: html/Admin/Users/Modify.html:71 html/Elements/Login:92 html/Ticket/Elements/AddWatchers:58
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Nom d'utilisateur"
-#: html/Admin/Elements/GlobalCustomFieldTabs:57 html/Admin/Elements/SelectNewGroupMembers:49 html/Admin/Elements/Tabs:55 html/Admin/Global/CustomFields/index.html:66 html/Admin/Groups/Members.html:78 html/Admin/Queues/People.html:91 html/Admin/index.html:64 html/User/Groups/Members.html:81 lib/RT/CustomField_Overlay.pm:1211
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Format de nom d'utilisateur"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Utilisateurs"
-#: html/Admin/Users/index.html:87
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Utilisateurs correspondants aux critères de recherche"
-#: bin/rt-crontool:136
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr "Utilisation de la transaction #%1..."
-#: lib/RT/Tickets_Overlay_SQL.pm:530
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Valider la requête"
-#: html/Admin/CustomFields/Modify.html:82
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Validation"
-#: html/Admin/CustomFields/Modify.html:132 html/Admin/Elements/EditCustomField:80
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Valeurs"
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Rapports divers RT"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Voir les tableaux de bord pour ce groupe"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Voir les tableaux de bord personnels"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "Voir les tableaux de bord systèmes"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "Copy text \t\r\nW3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr "Hauteur de l'éditeur WYSIWYG"
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "Editeur de messages WYSIWYG"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Attention! Ceci n'est pas signé!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Attention: vous n'avez pas d'adresse de courriel paramétrée, vous ne recevrez donc pas ce tableau de bord tant qu'elle n'est pas renseignée"
+
#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Observer"
@@ -4844,372 +7235,663 @@ msgstr "Observer"
msgid "WatchAsAdminCc"
msgstr "ObserverCommeAdminCC"
-#: html/Admin/Elements/QueueTabs:65
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Observateur"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "GroupeObservateur"
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Observateurs"
-#: lib/RT/Date.pm:421
-msgid "Wed."
-msgstr "Mer."
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "Nous sommes capables de trouver votre base de données et de s'y connecter en DBA. Vous pouvez cliquer sur \"Personnalisation de base\" pour continuer à personnaliser RT."
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr "Nous avons besoin de connaître le nom de la base de données qui sera utilisée par RT ainsi que sa localisation. Nous avons également besoin de connaître le nom d'utilisateur et le mot de passe que RT doit utiliser. RT peut créer la base de donnée et l'utilisateur pour vous, c'est pourquoi, l'identifiant et le mot de passe d'un utilisateur avec des privilèges DBA sont demandés. Pendant l'étape 6 du processus d'installation nous utiliseront cette information pour créer et initialiser la base de données RT."
+
+#: NOT FOUND IN SOURCE
+msgid "We were able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "Nous n'avons pas été capable de trouver votre base de données et de nous connecter en DBA. Vous pouvez cliquer sur 'Configuration de base' pour continuer à configurer RT."
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Port web"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Mer"
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Mercredi"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "Compilation hebdomadaire"
-#: html/Tools/MyDay.html:80
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Bienvenue dans RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr "Ce que j'ai fait aujourd'hui"
-#: etc/initialdata:521
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Qu'est-ce que RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr "Lorsque RT ne peut gérer un courriel, où doit-il être envoyé?"
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr "Quand RT envoi un courriel, il positionne les champs expéditeur et Reply-To afin que les utilisateurs puissent participer à la conversation en cliquant simplement sur Répondre dans leur client de courriel. Une adresse différente est utilisée pour les réponses et les commentaires. Celles-ci peuvent-être définies pour chaque file. Ces adresses devront être configurées pour utiliser le programme <tt>rt-mailgate</tt>."
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Quand un ticket a été approuvé par tous les approbateurs, ajoute le courrier au ticket source"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr "Quand un ticket a été approuvé par au moins un approbateur, ajoute le courrier au ticket source "
+msgstr "Quand un ticket a été approuvé par au moins un approbateur, ajoute le courrier au ticket source"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Quand un ticket est créé"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Quand un ticket d'approbation est créé, informer l'intervenant et l'AdminCC de l'élément attendant leur approbation"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Quand quelque chose arrive"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr "Lorsque vous cliquez sur 'Tester la connexion à la base de données' il peut y avoir un peu d'attente le temps que RT se connecte à votre base de données."
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "Quand un ticket et fermé(désactivé)"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr "Quand un ticket est rejeté"
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Quand un ticket est ré-ouvert(activé)"
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Lorsqu'un ticket quelconque est résolu/clos"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Lorsqu'un ticket quelconque change d'intervenant"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Lorsqu'un ticket change de priorité"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Lorsqu'un ticket quelconque change de file"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Lorsqu'un ticket quelconque change de statut"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Lorsqu'une condition définie par l'utilisateur est satisfaite"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Lorsque un commentaire arrive"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Lorsque un courrier arrive"
-#: html/Admin/Users/Modify.html:191 html/User/Prefs.html:90
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "Où trouver l'exécutable sendmail."
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr "Supprimer définitivement"
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Travail"
-#: html/Search/Results.html:84
-msgid "Work offline"
-msgstr "Travail hors ligne"
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "Téléphone professionel"
-#: html/Ticket/Elements/ShowBasics:65 html/Ticket/Update.html:66 html/Tools/MyDay.html:65
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Travaillé"
-#: lib/RT/Ticket_Overlay.pm:3157
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Oui"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Vous êtes déjà intervenant de ce ticket"
-#: html/autohandler:216 html/autohandler:224
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr "Vous êtes sur le point de chiffrer les messages courriels sortants, mais il y a des problèmes avec les clefs publiques des destinataires. Vous devez corriger ce problème, désactiver l'envoi de message aux destinataires ayant un problème de clefs, ou désactiver le chiffrement."
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr "Vous êtes sur le point de chiffrer les messages courriels sortants, mais il y a des problèmes avec la clefs publique d'un destinataire. Vous devez corriger ce problème, désactiver l'envoi de message pour ce destinataire, ou désactiver le chiffrement."
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Vous n'êtes pas un utilisateur autorisé"
-#: html/Prefs/Search.html:58
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Vous pouvez <a href=\"%1\">aller au premier message non-lu</a> ou <a href=\"%2\">aller au premier message non-lu et marquer tous les messages comme lus</a>."
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr "Vous pouvez aussi modifier la recherche prédéfinie elle-même"
-#: lib/RT/Ticket_Overlay.pm:3039
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Vous pouvez seulement réaffecter vos ticket ou ceux qui ne sont pas affectés"
-#: lib/RT/Ticket_Overlay.pm:3035
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
-msgstr "Vous pouvez uniquement prendre des tickets sans propriétaire"
+msgstr "Vous pouvez uniquement prendre des tickets sans intervenant"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:778
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "Vous n'avez pas les droits <b>SuperUtilisateur</b>."
+
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "%1 tickets trouvés dans la file %2"
-#: html/NoAuth/Logout.html:54
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Vous avez été déconnecté de RT."
-#: html/SelfService/Display.html:135
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Vous n'avez pas l'autorisation de créer des tickets dans cette file."
-#: lib/RT/Ticket_Overlay.pm:1996
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Vous ne pouvez pas créer de demandes dans cette file."
-#: html/NoAuth/Logout.html:58
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Vous devez saisir un mot de passe Administrateur"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr "Vous devriez être redirigé vers la page de connection. Vous pourrez vous identifier avec l'identifiant <tt>root</tt> et le mot de passe configuré précédemment."
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr "Vous devez choisir la base de données que vous ou votre administrateur de base de données maîtrisez le mieux."
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr "Vous voyez cet écran car vous avez démarré RT sans base de données fonctionnelle. C'est probablement la première fois que vous lancez RT. Si vous cliques <i>C'est parti!</i> ci-dessous, RT vous guidera pour configurer votre serveur RT et votre base de données."
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Vous êtes invité à vous identifier à nouveau"
-#: etc/initialdata:502 etc/initialdata:504
-#. (# loc $self->TransactionObj->CreatorObj->Name,)
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Votre demande a été approuvée par %1. D'autres approbations sont peut être toujours en attente."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Votre demande a été approuvée."
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Votre demande a été rejetée."
-#: html/autohandler:253
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Votre nom d'utilisateur ou votre mot de passe est incorrect"
-#: html/Admin/Users/Modify.html:171 html/User/Prefs.html:151
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Code Postal"
-#: html/Search/Elements/DisplayOptions:67
+#: share/html/Search/Elements/DisplayOptions:62
msgid "[none]"
msgstr "[aucun]"
-#: lib/RT/System.pm:89
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "après"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "autorise la création de recherches sauvées"
-#: lib/RT/System.pm:88
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "autorise le chargement de recherches sauvées"
-#: html/User/Elements/DelegateRights:82
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "comme accordé à %1"
-#: html/Search/Results.html:85
-msgid "chart"
-msgstr "graphique"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "barres"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "avant"
-#: html/SelfService/Closed.html:51
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "de bas en haut"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr "cliquer pour sélectionner/désélectionner tous les objets en une fois"
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "fermé"
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:57
-msgid "contains"
-msgstr "contient"
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr "Configuration centrale"
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr "Champ personnalisé '%1'"
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "quotidien"
-#: lib/RT/Report/Tickets.pm:347
-msgid "current: $current, want $want, Error near ->$val<- expecting a $token in '$string'\\n"
-msgstr "actuellement: $current, souhaité $want, Erreur près de ->$val<- il manque un $token dans '$string'\\n"
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "tous les jours à %1"
-#: html/Admin/Queues/Modify.html:100 lib/RT/Date.pm:348
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "jours"
-#: lib/RT/Queue_Overlay.pm:89
+#: lib/RT/Queue_Overlay.pm:87
msgid "deleted"
msgstr "effacé"
-#: html/Search/Elements/PickBasics:63
-msgid "does not match"
-msgstr "ne correspond pas"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:58
-msgid "doesn't contain"
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
msgstr "ne contient pas"
-#: html/Elements/SelectEqualityOperator:61
+#: NOT FOUND IN SOURCE
+msgid "domain name"
+msgstr "nom de domaine"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "télécharger"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "égal à"
-#: html/Search/Build.html:553
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "erreur : ne peut aller plus bas"
-#: html/Search/Build.html:575
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "erreur : ne peut aller à gauche"
-#: html/Search/Build.html:534
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "erreur : ne peut aller plus haut"
-#: html/Search/Build.html:618
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "erreur : rien à effacer"
-#: html/Search/Build.html:539 html/Search/Build.html:558 html/Search/Build.html:580 html/Search/Build.html:609
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "erreur : rien à déplacer"
-#: html/Search/Build.html:636
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "erreur : rien à commuter"
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "tous les"
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr "greffons exécuté avec succès"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "entière"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "supérieur à"
-#: lib/RT/Group_Overlay.pm:216
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "groupe '%1'"
-#: html/Search/Results.html:90
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr "groupés par %1"
-
-#: lib/RT/Date.pm:344
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "heures"
-#: html/Search/Elements/PickBasics:50
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "n°"
-#: html/Elements/SelectBoolean:55 html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:59 html/Search/Elements/PickBasics:164 html/Search/Elements/PickBasics:76 html/Search/Elements/PickBasics:92 html/Search/Elements/PickCFs:55
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "est"
-#: html/Elements/SelectBoolean:59 html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:60 html/Search/Elements/PickBasics:165 html/Search/Elements/PickBasics:77 html/Search/Elements/PickBasics:93 html/Search/Elements/PickCFs:56
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "n'est pas"
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "clefs désactivée"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "clefs expirée"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "clefs révoquée"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "de gauche à droite"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "inférieur à"
-#: html/Search/Elements/PickBasics:62
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "marginale"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
-msgstr "correspond"
+msgstr "contient"
-#: lib/RT/Date.pm:340
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "Profondeur maximale"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min"
-#: html/Tools/MyDay.html:65
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minutes"
-#: lib/RT/Date.pm:356
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "mensuel"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "tous les mois (jour %1) à %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "mois"
-#: lib/RT/Queue_Overlay.pm:84
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "jamais"
+
+#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "nouveau"
-#: html/Admin/Elements/PickCustomFields:66 html/Admin/Elements/PickObjects:67
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "non"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "sans nom"
-#: html/Admin/Elements/EditScrips:66
-msgid "no value"
-msgstr "non renseigné"
-
-#: html/Admin/Elements/EditQueueWatchers:50 html/Ticket/Elements/EditWatchers:51
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "aucun"
-#: html/Elements/SelectEqualityOperator:61
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "différent de"
-#: html/SelfService/Elements/MyRequests:78 lib/RT/Queue_Overlay.pm:85
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "aucun"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "les objets ont été supprimés avec succès"
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Le"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr "le jour"
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "ouvert"
-#: lib/RT/Group_Overlay.pm:221
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "ouvrir/fermer"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "autre..."
+
+#: NOT FOUND IN SOURCE
+msgid "password of the user root in RT"
+msgstr "mot de passe du compte root RT"
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "groupe personnel '%1' pour l'utilisateur '%2'"
-#: lib/RT/Group_Overlay.pm:229
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "camembert"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "le greffon a retourné une liste vide"
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "file %1 %2"
-#: lib/RT/Queue_Overlay.pm:88
+#: lib/RT/Queue_Overlay.pm:86
msgid "rejected"
msgstr "rejeté"
-#: lib/RT/Queue_Overlay.pm:87
+#: lib/RT/Queue_Overlay.pm:85
msgid "resolved"
msgstr "résolu"
-#: lib/RT/Date.pm:336
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "de droite à gauche"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sec"
-#: lib/RT/System.pm:87
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr "voir la liste d'objets ci-dessous"
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr "montrer l'onglet Approbations"
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "montrer l'onglet de configuration"
-#: html/Search/Results.html:82
-msgid "spreadsheet"
-msgstr "feuille de calcul"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
-#: lib/RT/Queue_Overlay.pm:86
+#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "stagnant"
-#: html/Search/Results.html:91
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr "style : %1"
-
-#: html/Prefs/MyRT.html:95
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr "lignes de sommaire"
-#: lib/RT/Group_Overlay.pm:224
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "système %1"
-#: lib/RT/Group_Overlay.pm:235
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "groupe système '%1'"
-#: html/Elements/Error:66 html/SelfService/Error.html:65
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "le composant appelant n'a pas spécifié pourquoi"
-#: lib/RT/Group_Overlay.pm:232
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "les adresses par défaut qui seront listée dans les en-têtes de l'émetteur et Reply-To: d'un courriel de commentaire."
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "les adresses par défaut qui seront listée dans les en-têtes de l'émetteur et Reply-To: d'un courriel de réponse."
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "ticket n°%1 %2"
-#: lib/RT/Group_Overlay.pm:238
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "de haut en bas"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "ultime"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "groupe %1 non décrit"
-#: lib/RT/Group_Overlay.pm:213
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "utilisateur %1"
-#: lib/RT/Date.pm:352
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "verbeux"
+
+#: NOT FOUND IN SOURCE
+msgid "web port"
+msgstr "port du serveur web"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "Hebdomadaire"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "toutes les semaines (le %1) à %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "semaines"
-#: lib/RT/Date.pm:360
+#: NOT FOUND IN SOURCE
+msgid "where is sendmail command"
+msgstr "où se trouve la commande sendmail"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "sur quel port votre serveurweb est-il en écoute, ex: 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "avec en-têtes"
+
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "années"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "oui"
+
diff --git a/rt/lib/RT/I18N/he.po b/rt/lib/RT/I18N/he.po
index 76e2db6..26c8c30 100644
--- a/rt/lib/RT/I18N/he.po
+++ b/rt/lib/RT/I18N/he.po
@@ -1,209 +1,290 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"PO-Revision-Date: 2005-10-03 13:47-0400\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-10-06 07:22+0000\n"
+"Last-Translator: kulight <Unknown>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (×ין מפתח ציבורי!)"
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
msgstr ""
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr ""
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
-
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr ""
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr ""
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr ""
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr ""
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr ""
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
-msgstr ""
+msgstr "לפני %1 %2"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
-msgstr ""
+msgstr "%1 %2 שונה ל%3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
+msgstr "%1 %2 נמחק"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 נמחק."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
msgstr ""
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 נשמר."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr ""
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr ""
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
+msgstr "%1 (×œ× ×”×©×ª× ×”)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "%1 - %2 shown"
msgstr "%1 - %2 מוצגי×"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr ""
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr ""
-#: bin/rt-crontool:253
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
msgstr ""
-#: bin/rt-crontool:256
-#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr ""
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr ""
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr ""
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
msgstr ""
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr ""
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr ""
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr ""
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr ""
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
+msgstr "%1 שונה מ%2 ל%3"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
msgstr ""
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
+msgstr "העתק של%1"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
msgstr ""
-#: lib/RT/Record.pm:944
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
-msgstr ""
+msgstr "×œ× ×”×ª×פשר לשנות ×ת %1 ל%2"
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
-msgstr ""
+msgstr "%1 נוצר"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
+msgstr "%1 נמחק"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
msgstr ""
-#: etc/initialdata:593
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 ×ינו קיי×."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr ""
@@ -215,74 +296,123 @@ msgstr "%1 הפניות ×¢× ×”×¢×“×™×¤×•×ª הגבוהה ביותר בטיפול
msgid "%1 highest priority tickets I requested..."
msgstr "%1 הפניות ×¢× ×”×¢×“×™×¤×•×ª הגבוהה ביותר ש×× ×™ פתחתי..."
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr ""
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr ""
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr ""
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr ""
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr ""
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "זכויות"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr ""
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr ""
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr ""
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr ""
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr ""
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr ""
@@ -295,7 +425,7 @@ msgstr "(סמן תיבה כדי למחוק חבר בקבוצה)"
msgid "(Check box to delete scrip)"
msgstr "(סמן תיבה כדי למחוק סקריפ)"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(סמן תיבה כדי למחוק)"
@@ -303,310 +433,320 @@ msgstr "(סמן תיבה כדי למחוק)"
msgid "(Check boxes to delete)"
msgstr "(סמן תיבות כדי למחוק)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr ""
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr ""
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr ""
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr ""
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr ""
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr ""
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr ""
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr ""
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr ""
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr ""
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr ""
-#: html/Admin/Users/index.html:60
-msgid "(no name listed)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
msgstr ""
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr ""
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr ""
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(רק פנייה ×חת)"
-#: html/Elements/RT__Ticket/ColumnMap:149
-msgid "(pending approval)"
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
msgstr ""
-#: html/Elements/RT__Ticket/ColumnMap:152
-msgid "(pending other Collection)"
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
msgstr ""
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr ""
-#: html/Ticket/Elements/ShowTransactionAttachments:82
-msgid "(untitled)"
-msgstr ""
-
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
msgstr ""
-#: html/Elements/EditCustomFieldSelect:57
-msgid "-"
-msgstr ""
-
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
msgstr ""
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
msgstr ""
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
msgstr ""
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"פנייה חדשה ב\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr ""
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr ""
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr ""
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "מידע ×ודותי"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr ""
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:172
+#: lib/RT/Scrip_Overlay.pm:136
#. ($args{'ScripAction'})
-msgid "Action %1 not found"
+msgid "Action '%1' not found"
msgstr ""
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr ""
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr ""
-#: html/Search/Build.html:85
-msgid "Add"
-msgstr ""
-
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "הוסף העתק ניהולי"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "הוסף העתק"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr ""
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr ""
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "הוסף עוד קבצי×"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "הוסף מבקש"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr ""
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr ""
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr ""
-
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "הוסף הערות ×ו תגובות לפניות הנבחרות"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr ""
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "הוסף ×¦×•×¤×™× ×—×“×©×™×"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
msgstr ""
-#: html/Search/Bulk.html:158
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr ""
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "כתובת1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "כתובת2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr ""
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr ""
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr ""
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr ""
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr ""
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "העתק ניהולי"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr ""
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr ""
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr ""
@@ -614,88 +754,96 @@ msgstr ""
msgid "AdminQueue"
msgstr ""
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr ""
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "העתק ניהולי"
-#: html/Ticket/Elements/Tabs:216
-msgid "Advanced"
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
msgstr ""
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "×חרי"
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr ""
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr ""
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr ""
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr ""
-#: html/Search/Elements/EditQuery:56
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr ""
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr ""
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr ""
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "×ישור"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr ""
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr ""
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr ""
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr ""
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr ""
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr ""
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
+#: lib/RT/Date.pm:91
+msgid "Apr"
msgstr ""
-#: lib/RT/Date.pm:444
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "×פריל"
@@ -703,56 +851,68 @@ msgstr "×פריל"
msgid "April"
msgstr "×פריל"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "עולה"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr ""
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "צרף"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr ""
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "קובץ מצורף"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "קובץ צורף"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "×©× ×§×•×‘×¥ מצורף"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "×§×‘×¦×™× ×ž×¦×•×¨×¤×™×"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr ""
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "×וגוסט"
@@ -760,59 +920,72 @@ msgstr "×וגוסט"
msgid "August"
msgstr "×וגוסט"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr ""
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr ""
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr ""
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
-msgid "Basics"
-msgstr "בסיסי"
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
-#: html/Ticket/Update.html:88
-msgid "Bcc"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "בסיסי"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "×ל תשכח לשמור ×ת השינויי×"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "לפני"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr ""
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr ""
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr ""
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Bookmarkable URL for this search"
msgstr "הוסף כתובת זו לספר הכתובות כדי לחזור על ×ותו חיפוש"
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
msgstr ""
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "תקציר כותרי×"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr ""
@@ -820,7 +993,23 @@ msgstr ""
msgid "Bulk ticket update"
msgstr "עדכון פניות מרוכז"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr ""
@@ -828,126 +1017,178 @@ msgstr ""
msgid "Can this principal see this queue"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr ""
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr ""
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr ""
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr ""
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr ""
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr ""
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr ""
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr ""
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "העתק"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr ""
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr ""
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "סמן תיבה כדי למחוק"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "סמן תיבה כדי לבטל זכות"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "ילדי×"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
msgstr ""
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "עיר"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr ""
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr ""
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "נסגר"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr ""
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "הערה"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr ""
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "הערות (×œ× × ×©×œ×—×•×ª ×ל המבקשי×)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "הערות (×œ× × ×©×œ×—×•×ª ×ל המבקשי×)"
@@ -955,256 +1196,409 @@ msgstr "הערות (×œ× × ×©×œ×—×•×ª ×ל המבקשי×)"
msgid "Comments about %1"
msgstr "הערות לגבי %1"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "הערות לגבי משתמש זה"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "הערות נוספו"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr ""
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr ""
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:188
-msgid "Condition not found"
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
msgstr ""
-#: html/Elements/Tabs:84
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "הגדרות"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr ""
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "תוכן"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr ""
-#: html/Search/Elements/EditSearches:65
-msgid "Copy"
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
msgstr ""
-#: etc/initialdata:286
-msgid "Correspondence"
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:630
-msgid "Correspondence added"
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
msgstr ""
-#: lib/RT/Record.pm:1707
-msgid "Could not add new custom field value. "
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
msgstr ""
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
-msgid "Could not add new custom field value. %1 "
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
-msgid "Could not change owner. "
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:161
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr ""
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr ""
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr ""
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr ""
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr ""
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr ""
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:197
-msgid "Could not load search attribute"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr ""
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr ""
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr ""
-#: lib/RT/Record.pm:953
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr ""
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr ""
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr ""
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr ""
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr ""
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr ""
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr ""
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr ""
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr ""
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
msgstr ""
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "×רץ"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "צור"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "צור פניות"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr ""
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr ""
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr ""
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "צור קבוצה פרטית חדשה"
@@ -1220,15 +1614,15 @@ msgstr "צור סקריפ חדש"
msgid "Create a new template"
msgstr "צור תבנית חדשה"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "צור פנייה חדשה"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "צור משתמש חדש"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "צור תור חדש"
@@ -1240,32 +1634,48 @@ msgstr "צור תור שנקר×"
msgid "Create a request"
msgstr "צור בקשה"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr ""
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr ""
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr ""
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr ""
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr ""
@@ -1273,60 +1683,93 @@ msgstr ""
msgid "Create, delete and modify queues"
msgstr ""
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr ""
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr ""
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr ""
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "נוצר"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr ""
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr ""
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr ""
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "×™×—×¡×™× × ×•×›×—×™×™×"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr ""
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr ""
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr ""
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr ""
@@ -1334,82 +1777,182 @@ msgstr ""
msgid "Current search criteria"
msgstr "קריטריוני החיפוש הנוכחיי×"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "×¦×•×¤×™× × ×•×›×—×™×™×"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr ""
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr ""
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr ""
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr ""
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr ""
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr ""
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr ""
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr ""
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr ""
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr ""
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr ""
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "ת×ריכי×"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "דצמבר"
@@ -1417,136 +1960,212 @@ msgstr "דצמבר"
msgid "December"
msgstr "דצמבר"
-#: etc/initialdata:222
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr ""
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr ""
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr ""
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr ""
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr ""
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr ""
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr ""
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr ""
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr ""
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr ""
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "דלגציות"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "מחק"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr ""
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr ""
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr ""
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr ""
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:394
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr ""
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr ""
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr ""
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "×ª×œ×•×™×™× ×‘×•"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr ""
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "תלוי ב"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "יורד"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "תי×ור"
@@ -1554,7 +2173,15 @@ msgstr "תי×ור"
msgid "Details"
msgstr "פרטי×"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "הצג"
@@ -1562,23 +2189,23 @@ msgstr "הצג"
msgid "Display Access Control List"
msgstr ""
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr ""
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "מצב תצוגה"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr ""
@@ -1586,15 +2213,31 @@ msgstr ""
msgid "Display ticket #%1"
msgstr "הצג פנייה #%1"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr ""
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr ""
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "×ל תרענן דף ×–×”."
@@ -1602,217 +2245,384 @@ msgstr "×ל תרענן דף ×–×”."
msgid "Don't show search results"
msgstr "×ל תר××” ×ת תוצ×ות החיפוש"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "הורד"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr ""
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "ת×ריך יעד"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr ""
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr ""
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr ""
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr ""
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr ""
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr ""
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr ""
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr ""
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr ""
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr ""
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr ""
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr ""
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr ""
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "××™-מייל"
-#: lib/RT/User_Overlay.pm:235
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr ""
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "מופעל (מחיקת סימון תיבה זו מבטלת ×ת קבוצה זו)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr ""
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr ""
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:64
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr ""
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr ""
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr ""
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "הכנס פניות ×ו כתובות כדי לקשר פניות ×ליהן. הפרד ×¢×¨×›×™× ×¨×‘×™× ×‘×מצעות רווחי×."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr ""
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr ""
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr ""
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr ""
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr ""
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr ""
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
msgstr ""
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr ""
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr ""
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr ""
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr ""
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "פברו×ר"
@@ -1820,59 +2630,83 @@ msgstr "פברו×ר"
msgid "February"
msgstr "פברו×ר"
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr ""
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "עדיפות סופית"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr ""
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr ""
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "×ž×¦× ×× ×©×™× ×©"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "×ž×¦× ×¤× ×™×•×ª"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr ""
@@ -1880,83 +2714,175 @@ msgstr ""
msgid "First page"
msgstr "עמוד ר×שון"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr ""
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "הכרח שינוי"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr ""
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "נמצ×ו %1 פניות"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr ""
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "שישי"
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "×›×•×ª×¨×™× ×ž×œ××™×"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:684
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr ""
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "גלוב×לי"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr ""
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr ""
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr ""
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr ""
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "חפש"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr ""
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "קבוצה"
@@ -1964,229 +2890,364 @@ msgstr "קבוצה"
msgid "Group %1 %2: %3"
msgstr "קבוצה %1 %2: %3"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "זכויות קבוצה"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
msgstr ""
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr ""
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "קבוצות"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr ""
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr ""
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr ""
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr ""
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "הסטוריה"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr ""
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr ""
-#: html/Elements/Tabs:65
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "דף הבית"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr ""
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr ""
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
+#: lib/RT/Date.pm:114
+msgid "ISO"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr ""
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "זהות"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr ""
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr ""
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr ""
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr ""
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "×× ×¢×“×›× ×ª משהו לעיל, ×ל תשכח ל"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr ""
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr ""
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr ""
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr ""
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr ""
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
msgstr ""
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
msgstr ""
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr ""
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr ""
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr ""
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:668
-msgid "Invalid Group Type"
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
msgstr ""
-#: lib/RT/Principal_Overlay.pm:161
-msgid "Invalid Right"
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
msgstr ""
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr ""
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr ""
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr ""
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr ""
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr ""
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr ""
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr ""
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "ינו×ר"
@@ -2194,11 +3255,15 @@ msgstr "ינו×ר"
msgid "January"
msgstr "ינו×ר"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr ""
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "יולי"
@@ -2206,11 +3271,15 @@ msgstr "יולי"
msgid "July"
msgstr "יולי"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "ג'מבו"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "יוני"
@@ -2218,23 +3287,27 @@ msgstr "יוני"
msgid "June"
msgstr "יוני"
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr ""
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr ""
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr ""
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "מגע ×חרון"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "קשר ×חרון"
@@ -2242,176 +3315,257 @@ msgstr "קשר ×חרון"
msgid "Last Notified"
msgstr "נודע ל×חרונה"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "עדכון ×חרון"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "נותרה"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "תן למשתמש זה לגשת ל R"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "תן ×פשרות להעניק זכויות למשתמש ×–×”"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr ""
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr ""
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr ""
-#: lib/RT/Record.pm:1326
-#. ($TransString)
-msgid "Link created (%1)"
-msgstr ""
-
-#: lib/RT/Record.pm:1387
-#. ($TransString)
-msgid "Link deleted (%1)"
-msgstr ""
-
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr ""
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr ""
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "קישורי×"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr ""
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr ""
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr ""
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr ""
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
-msgid "Loaded search %1"
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
msgstr ""
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "מיקו×"
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "מחובר כ %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "כניסה"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "יצי××”"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr ""
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "שנה בעלות ל"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "שנה סטטוס"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "שנה ת×ריך יעד"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "שנה ת×ריך פתרון"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "שנה ת×ריך 'הותחל'"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "שנה ת×ריך התחלה"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "שנע ת×ריך מגע ×חרון"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "שנה עדיפות"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "שנה תור"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "שנה נוש×"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr ""
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr ""
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "נהל קבוצות וחברות בקבוצות"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "נהל מ××¤×™×™× ×™× ×•×”×’×“×¨×•×ª ×©×ª×§×¤×™× ×œ×›×œ התורות"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "נהל תורות ומ××¤×™×™× ×™× ×¡×¤×¦×™×¤×™×™× ×œ×ª×•×¨×•×ª"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "נהל ×ž×©×ª×ž×©×™× ×•×¡×¤×¨×™×•×ª"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "מרץ"
@@ -2419,121 +3573,158 @@ msgstr "מרץ"
msgid "March"
msgstr "מרץ"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
msgid "May"
msgstr "מ××™"
-#: lib/RT/Date.pm:445
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "מ××™"
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "חבר הוסף"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "חבר הוסף: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "חבר נמחק"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "חבר ×œ× × ×ž×—×§"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "חבר ב"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "חברי×"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr ""
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr ""
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "מיזוג הצליח"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "מיזוג נכשל. ×œ× ×™×›×•×œ×ª×™ להגדיר מזהה ×פקטיבי"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr ""
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "מזג לתוך"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr ""
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "הודעה"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2451
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr ""
-#: html/Elements/SelectTimeUnits:47
-msgid "Minutes"
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
msgstr ""
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
msgstr ""
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "חסר מפתח ר×שי?: %1"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "נייד"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "טלפון נייד"
@@ -2541,189 +3732,219 @@ msgstr "טלפון נייד"
msgid "Modify Access Control List"
msgstr "שנה רשימת בקרת גישה"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr ""
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr ""
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr ""
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr ""
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr ""
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr ""
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr ""
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr ""
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr ""
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr ""
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr ""
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr ""
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr ""
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr ""
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr ""
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr ""
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr ""
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr ""
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr ""
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr ""
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr ""
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr ""
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr ""
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr ""
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr ""
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "שנה פנייה מספר %1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "שינוי פנוייה מספר %1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "שינוי פניות"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr ""
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr ""
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr ""
@@ -2732,11 +3953,23 @@ msgstr ""
msgid "ModifyACL"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr ""
@@ -2744,48 +3977,64 @@ msgstr ""
msgid "ModifyQueueWatchers"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr ""
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "שני"
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "עוד לגבי %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr ""
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr ""
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr ""
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr ""
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr ""
@@ -2794,71 +4043,96 @@ msgstr ""
msgid "My Approvals"
msgstr "×”××™×©×•×¨×™× ×©×œ×™"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr ""
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "×”××™×©×•×¨×™× ×©×œ×™"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "ש×"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "×©× ×‘×©×™×ž×•×©"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "חדש"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "×™×—×¡×™× ×—×“×©×™×"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "×¡×™×¡×ž× ×—×“×©×”"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr ""
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "חיפוש חדש"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr ""
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "קבוצה חדשה"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "×¡×™×¡×ž× ×—×“×©×”"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr ""
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "תור חדש"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr ""
@@ -2866,11 +4140,11 @@ msgstr ""
msgid "New request"
msgstr "בקשה חדשה"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "זכויות חדשות"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "סקריפ חדש"
@@ -2878,289 +4152,358 @@ msgstr "סקריפ חדש"
msgid "New search"
msgstr "חיפוש חדש"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "תבנית חדשה"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "פנייה חדשה"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "פנייה חדשה ×œ× ×§×™×™×ž×ª"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "משתמש חדש"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "משתמש חדש שנקר×"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "×¦×•×¤×™× ×—×“×©×™×"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "הב×"
-#: html/Elements/TicketList:104
-msgid "Next Page"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "Next page"
msgstr "דף הב×"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "כינוי"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "כינוי"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr ""
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr ""
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr ""
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr ""
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr ""
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr ""
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr ""
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr ""
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr ""
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr ""
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr ""
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr ""
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr ""
-#: lib/RT/User_Overlay.pm:186
-msgid "No permission to create users"
-msgstr ""
-
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr ""
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr ""
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr ""
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr ""
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr ""
-#: html/Admin/Elements/SelectRights:106
-msgid "No rights found"
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
msgstr ""
-#: html/Admin/Elements/SelectRights:53
-msgid "No rights granted."
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
msgstr ""
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
msgstr ""
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr ""
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr ""
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr ""
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr ""
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "××£ ×חד"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr ""
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr ""
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Not logged in"
msgstr "×œ× ×‘×ª×•×š המערכת"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "×œ× ×‘×ª×•×š המערכת."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "×œ× ×”×•×–×Ÿ"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr ""
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr ""
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr ""
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr ""
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr ""
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr ""
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr ""
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr ""
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr ""
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr ""
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr ""
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr ""
-#: etc/initialdata:365
-msgid "Notify Owner of their ticket has been approved by all approvers"
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
msgstr ""
-#: etc/initialdata:353
-msgid "Notify Owner of their ticket has been approved by some approver"
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
msgstr ""
-#: etc/initialdata:334
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr ""
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr ""
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr ""
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr ""
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
msgstr ""
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+#: lib/RT/Date.pm:98
+msgid "Nov"
msgstr ""
-#: lib/RT/Date.pm:451
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "נובמבר"
@@ -3168,37 +4511,49 @@ msgstr "נובמבר"
msgid "November"
msgstr "נובמבר"
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr ""
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr ""
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr ""
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr ""
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr ""
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "×וקטובר"
@@ -3206,74 +4561,90 @@ msgstr "×וקטובר"
msgid "October"
msgstr "×וקטובר"
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr ""
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr ""
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr ""
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "ב"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr ""
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr ""
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr ""
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr ""
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr ""
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr ""
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr ""
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr ""
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr ""
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr ""
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "הצג רק ××™×©×•×¨×™× ×¢×‘×•×¨ בקשות שנוצרו ×חרי %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "הצג רק ××™×©×•×¨×™× ×¢×‘×•×¨ בקשות שנוצרו לפני %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr ""
@@ -3281,27 +4652,35 @@ msgstr ""
msgid "Open"
msgstr "פתוח"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr ""
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "פתח"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr ""
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr ""
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr ""
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr ""
@@ -3309,44 +4688,54 @@ msgstr ""
msgid "Ordering and sorting"
msgstr "סידור ומיון"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "×רגון"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr ""
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr ""
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "בעלי×"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr ""
@@ -3355,37 +4744,52 @@ msgstr ""
msgid "Owner is"
msgstr "הבעלי×"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-msgid "Page %1 of %2"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
msgstr ""
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "ביפר"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "הורי×"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "סיסמ×"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "מזכיר סיסמ×"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr ""
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr ""
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr ""
@@ -3393,355 +4797,600 @@ msgstr ""
msgid "Password too short"
msgstr "×¡×™×¡×ž× ×§×¦×¨×” מדי"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "סיסמ×: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr ""
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "הסיסמ×ות ×ינן תו×מות"
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr ""
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "×נשי×"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr ""
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr ""
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr ""
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
msgstr ""
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "קבוצות ×ישיות"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "קבוצות ×ישיות"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "קבוצות ×ישיות"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "מספרי טלפון"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
-msgstr "מ×פייני×"
+msgstr "העדפות"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr ""
+msgid "Preferences %1 for user %2."
+msgstr "העדפות %1 עבור המשתמש %2."
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
-msgstr ""
+msgstr "ההעדפות עבור %1 נשמרו."
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "ההעדפות עבור המשתמש %1 נשמרו."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "ההעדפות נשמרו."
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "המפתח המועדף: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "מפתח מועדף"
-#: lib/RT/Action/Generic.pm:195
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr ""
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "הקוד×"
-#: html/Elements/TicketList:101
-msgid "Previous Page"
-msgstr ""
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "הקוד×"
#: NOT FOUND IN SOURCE
msgid "Previous page"
msgstr "דף קוד×"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
+msgstr "העקרון %1 ×œ× × ×ž×¦×."
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
msgstr ""
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "הדפס הודעה זו"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "עדיפות"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr ""
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr ""
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr ""
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr ""
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr ""
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr ""
-#: html/Search/Build.html:121
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr ""
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr ""
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "תור"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
msgstr ""
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr ""
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr ""
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr ""
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "תורי×"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr ""
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr ""
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "חיפוש מהיר"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr ""
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr ""
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "ניהול RT"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr ""
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr ""
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "RT ממבט כולל"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr ""
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr ""
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT / %1"
-#: html/Search/Simple.html:58
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr ""
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "×©× ×מיתי"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "×©× ×מיתי"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr ""
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "×ž×ª×™×™×—×¡×™× ×ליו"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "מתייחס ל"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Refine search"
msgstr "חדד ×ת החיפוש"
-#: html/Elements/Refresh:57
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "רענן דף זה כל %1 דקות."
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr ""
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr ""
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr ""
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr ""
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "הסר העתק ניהולי"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "הסר העתק"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "הסר מבקש"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "הגב"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr ""
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "מענה לפנייה"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr ""
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "מבקש"
@@ -3757,65 +5406,81 @@ msgstr "מבקש(×™×)"
msgid "RequestorAddresses"
msgstr "כתובת הפונה"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "מבקשי×"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr ""
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr ""
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "×פס נתוני×"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr ""
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "בית"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "פתור"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "פתור פנייה #%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "נפתר"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr ""
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr ""
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr ""
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "תגובה למבקשי×"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "תוצ×ות"
@@ -3823,330 +5488,397 @@ msgstr "תוצ×ות"
msgid "Results per page"
msgstr "תוצ×ות לעמוד"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "הקלד שנית:"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr ""
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr ""
-#: html/Admin/Elements/UserTabs:70
-msgid "Rights"
-msgstr ""
-
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
msgstr ""
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
-msgid "Roles"
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
msgstr ""
-#: html/Prefs/MyRT.html:72
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr ""
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr ""
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "שבת"
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr ""
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "שמור שינויי×"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "שמור שינויי×"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
msgstr ""
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr ""
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr ""
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr ""
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr ""
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr ""
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "חיפוש"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr ""
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr ""
-
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr ""
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr ""
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
msgstr ""
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr ""
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
msgstr ""
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr ""
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr ""
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr ""
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr ""
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr ""
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr ""
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr ""
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr ""
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr ""
-#: html/Admin/Elements/CustomFieldTabs:90
-msgid "Select custom field"
+#: share/html/Install/index.html:59
+msgid "Select another language"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr ""
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "בחר קבוצה"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr ""
-#: html/Admin/Elements/QueueTabs:92
-msgid "Select queue"
-msgstr ""
-
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr ""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr ""
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr ""
-#: html/Admin/Elements/UserTabs:78
-msgid "Select user"
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
msgstr ""
-#: html/Admin/Elements/EditCustomFields:58
-msgid "Selected Custom Fields"
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
msgstr ""
-#: html/Admin/CustomFields/Objects.html:59
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr ""
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr ""
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
msgstr ""
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
msgstr ""
-#: etc/initialdata:112
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr ""
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr ""
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr ""
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr ""
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr ""
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr ""
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr ""
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr ""
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr ""
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "ספטמבר"
@@ -4154,43 +5886,60 @@ msgstr "ספטמבר"
msgid "September"
msgstr "ספטמבר"
-#: html/Ticket/Elements/ShowTransaction:158
-msgid "Show"
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
msgstr ""
-#: html/Approvals/index.html:52
-msgid "Show Approvals"
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
msgstr ""
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr ""
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr ""
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "הצג בקשות ש×ושרו"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr ""
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "הצג בקשות שנדחו"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr ""
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "הצג בקשות ממתינות"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "הצג בקשות שממתינות ל××™×©×•×¨×™× ×חרי×"
@@ -4198,71 +5947,112 @@ msgstr "הצג בקשות שממתינות ל××™×©×•×¨×™× ×חרי×"
msgid "ShowACL"
msgstr ""
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr ""
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr ""
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "חתימה"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr ""
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr ""
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr ""
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr ""
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr ""
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr ""
@@ -4270,7 +6060,19 @@ msgstr ""
msgid "Sort results by"
msgstr "סדר תוצ×ות על פי"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr ""
@@ -4278,39 +6080,63 @@ msgstr ""
msgid "Stalled"
msgstr "מושהה"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "התחיל"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "מתחיל ב"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "מדינה"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "מצב"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr ""
-#: html/Ticket/Elements/Tabs:178
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "גנוב"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "נגנב מ %1"
@@ -4319,306 +6145,494 @@ msgstr "נגנב מ %1"
msgid "Stolen from %1 "
msgstr "נגנב מ %1 "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr ""
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "נוש×"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "× ×•×©× ×©×•× ×” ל %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "שלח"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "הצליח"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "ר×שון"
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "סופר-משתמש"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "מערכת"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr ""
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr ""
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
msgstr ""
-#: lib/RT/CurrentUser.pm:357
-msgid "TEST_STRING"
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
msgstr ""
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "קח"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "נלקחה"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr ""
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr ""
-#: html/Admin/Elements/EditTemplates:110
-msgid "Template deleted"
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:176
-msgid "Template is mandatory argument"
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:180
-msgid "Template not found"
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
msgstr ""
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr ""
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr ""
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr ""
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr ""
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr ""
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr ""
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr ""
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr ""
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr ""
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "מידע בסיסי"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr ""
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr ""
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr ""
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr ""
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr ""
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr ""
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr ""
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "חמישי"
-#: NOT FOUND IN SOURCE
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
msgid "Ticket"
-msgstr "פנייה"
+msgstr "כרטיס"
#: NOT FOUND IN SOURCE
msgid "Ticket # %1 Jumbo update: %2"
msgstr "פנייה מספר %1 עדכון ג'מבו: %2"
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
-msgstr "פנייה מספר %1 עדכון ג'מבו: %2"
+msgstr "כרטיס מספר %1 עדכון Jumbo: %2"
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "כרטיס #%1 גרף יחסי×"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
-msgstr ""
+msgstr "כרטיס #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr ""
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr ""
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr ""
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr ""
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr ""
@@ -4626,18 +6640,22 @@ msgstr ""
msgid "Ticket attachment"
msgstr "מצורף לפנייה"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr ""
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr ""
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Ticket created"
msgstr "פנייה נוצרה"
@@ -4646,6 +6664,10 @@ msgstr "פנייה נוצרה"
msgid "Ticket deleted"
msgstr "פנייה נמחקה"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Ticket id not found"
msgstr "מזהה פנייה ×œ× × ×ž×¦×"
@@ -4654,7 +6676,7 @@ msgstr "מזהה פנייה ×œ× × ×ž×¦×"
msgid "Ticket killed"
msgstr "פנייה נמחקה"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr ""
@@ -4662,7 +6684,7 @@ msgstr ""
msgid "Ticket not found"
msgstr "פנייה ×œ× × ×ž×¦××”"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "סטטוס פנייה שונה"
@@ -4670,168 +6692,249 @@ msgstr "סטטוס פנייה שונה"
msgid "Ticket watchers"
msgstr "צופי הפנייה"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "פניות"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr ""
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr ""
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr ""
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "זמן נותר"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "זמן עבודה"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "זמן נותר"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "זמן להציג"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "זמן עבודה"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr ""
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr ""
-#: html/Elements/Footer:62
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr ""
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr ""
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr ""
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr ""
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr ""
-#: lib/RT/Date.pm:418
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "שלישי"
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "סוג"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "×œ× ×ž×™×™×•×©×"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr ""
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr ""
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: $key"
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
msgstr ""
-#: html/Elements/SelectResultsPerPage:58
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "×œ× ×ž×•×’×‘×œ"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr ""
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr ""
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr ""
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "עדכן"
-#: html/Ticket/Update.html:135
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr ""
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "סוג עדכון"
@@ -4843,7 +6946,11 @@ msgstr "עדכן ×ת כל הפניות לעיל בבת ×חת"
msgid "Update email"
msgstr "עדכן ××™-מייל"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr ""
@@ -4851,7 +6958,7 @@ msgstr ""
msgid "Update name"
msgstr "עדכן ש×"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr ""
@@ -4863,74 +6970,117 @@ msgstr "עדכן פניות נבחרות"
msgid "Update signature"
msgstr "עדכן חתימה"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "עדכן פנייה"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr ""
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr ""
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr ""
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "עודכן"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr ""
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr ""
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:506
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr ""
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr ""
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr ""
@@ -4942,190 +7092,348 @@ msgstr "מזהה המשתמש"
msgid "User Id"
msgstr "מזהה המשתמש"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "זכויות המשתמש"
-#: html/Admin/Users/Modify.html:301
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr ""
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr ""
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr ""
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr ""
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "×©× ×ž×©×ª×ž×©"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "משתמשי×"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr ""
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr ""
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr ""
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr ""
-#: lib/RT/Date.pm:419
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "רביעי"
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr ""
-#: etc/initialdata:521
-msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+#: share/html/Install/index.html:67
+msgid "What is RT?"
msgstr ""
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
msgstr ""
-#: etc/initialdata:146
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr ""
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr ""
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "בכל ×¤×¢× ×©×“×‘×¨ ×›×œ×©×”×•× ×§×•×¨×”"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "בכל ×¤×¢× ×©×¤× ×™×™×” נסגרת"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "בכל ×¤×¢× ×©×‘×¢×œ×™ הפנייה משתנה"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr ""
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "בכל מצב שתור הפנייה משתנה"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "בכל ×¤×¢× ×©×ž×¦×‘ הפנייה משתנה"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "בכל ×¤×¢× ×©×ž×¦×‘ מוגדר על ידי משתמש קורה"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "בכל ×¤×¢× ×©×”×¢×¨×” מגיעה ב"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "בכל ×¤×¢× ×©×ª×›×ª×•×‘×ª מגיעה ב"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
-msgid "Work"
-msgstr "עבודה"
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "היכן נמצ×ת תוכנת sendmail"
-#: html/Search/Results.html:82
-msgid "Work offline"
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "עבודה"
+
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "טלפון בעבודה"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "זמן טיפול"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "כן"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "×תה כבר ×”×‘×¢×œ×™× ×©×œ פנייה זו"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "×ינך משתמש מורשה"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "×תה יכול להציב פניה רק ×× ×תה ×”×‘×¢×œ×™× ×©×œ×”, ×ו ש×ין לה בעלי×"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr ""
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "You don't have permission to view that ticket.\\n"
msgstr "×ין לך הרש××” כדי לר×ות ×ת פנייה זו.\\n"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "מצ×ת %1 פניות בתור %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "התנתקת מהמערכת."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "×ין לך הרש×ות ליצור פניות בתור ×–×”."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "×ינך מורשה ליצור פניות בתור ×–×”."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "הנך מוזמן להיכנס שנית"
@@ -5137,11 +7445,11 @@ msgstr "%1 הבקשות שלך"
msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
msgstr "מנהל המערכת ×œ× ×”×’×“×™×¨ ×ת כתובות הדו×ר שמפעילות ×ת התוכנה כמו שצריך"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "בקשתך ×ושרה על ידי %1. ייתכן ש××™×©×•×¨×™× × ×•×¡×¤×™× ×¢×“×™×™×Ÿ ממתיני×."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "בקשתך ×ושרה."
@@ -5149,15 +7457,15 @@ msgstr "בקשתך ×ושרה."
msgid "Your request was rejected"
msgstr "בקשתך נדחתה"
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "בקשתך נדחתה."
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "×©× ×”×ž×©×ª×ž×© ו/×ו ×”×¡×™×¡×ž× ××™× × × ×›×•× ×™×"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "מיקוד"
@@ -5165,28 +7473,56 @@ msgstr "מיקוד"
msgid "[no subject]"
msgstr "[×œ×œ× × ×•×©×]"
-#: lib/RT/System.pm:87
-msgid "allow creation of saved searches"
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[לל×]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
msgstr ""
-#: lib/RT/System.pm:86
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "×חרי"
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr "×פשר יצירת ×—×™×¤×•×©×™× ×©×ž×•×¨×™×"
+
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
-msgstr ""
+msgstr "×פשר טעינת ×—×™×¤×•×©×™× ×©×ž×•×¨×™×"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "שהוענק ל%1"
-#: html/Search/Results.html:83
-msgid "chart"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
msgstr ""
-#: html/SelfService/Closed.html:49
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "לפני"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "סגור"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "מכיל"
@@ -5198,6 +7534,10 @@ msgstr "תוכן"
msgid "content-type"
msgstr "סוג התוכן"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "correspondence (probably) not sent"
msgstr "התכתבות (כנר××”) ×œ× × ×©×œ×—×”"
@@ -5206,7 +7546,22 @@ msgstr "התכתבות (כנר××”) ×œ× × ×©×œ×—×”"
msgid "correspondence sent"
msgstr "התכתבות נשלחה"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "יומי בשעה %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "ימי×"
@@ -5218,129 +7573,225 @@ msgstr "מחק"
msgid "deleted"
msgstr "מחוק"
-#: html/Search/Elements/PickBasics:61
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "×œ× ×ž×›×™×œ"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "×œ× ×ž×›×™×œ"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "×œ× ×ª×•××"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "הורדה"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "שווה ל"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
-msgstr ""
+msgstr "שגי××”: ×œ× × ×™×ª×Ÿ להזיז למטה"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
-msgstr ""
+msgstr "שגי××”: ×œ× × ×™×ª×Ÿ להזיז שמ×לה"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
-msgstr ""
+msgstr "שגי××”: ×œ× × ×™×ª×Ÿ להזיז למעלה"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
-msgstr ""
+msgstr "שגי××”: ×ין מה למחוק"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
-msgstr ""
+msgstr "שגי××”: ×ין מה להזיז"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr ""
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "filename"
msgstr "×©× ×§×•×‘×¥"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "מל×"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "גדול מ"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "קבוצה %1"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr ""
-
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "שעות"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "מזהה"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "הו×"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "×”×•× ×œ×"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "מפתח מבוטל"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "מפתח ×שר פג תוקפו"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "שמ×ל לימין"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "פחות מ"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "שולי"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "מכיל"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "עומק מרבי"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "דקות"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "דקות"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "חודשי (×‘×™×•× %1) בשעה %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "חודשי×"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "××£ פע×"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "חדש"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "ל×"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
-msgstr ""
+msgstr "×ין ש×"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "×ין ערך"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "×ין"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "×œ× ×©×•×•×” ל"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "ב"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "פתוח"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "×חר..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
+msgstr "קבוצה ×ישית '%1' למשתמש '%2'"
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
msgstr ""
-#: lib/RT/Group_Overlay.pm:227
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
-msgstr ""
+msgstr "תור %1 %2"
#: lib/RT/Queue_Overlay.pm:86
msgid "rejected"
@@ -5350,65 +7801,113 @@ msgstr "נדחה"
msgid "resolved"
msgstr "פתור"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "ימין לשמ×ל"
+
+#: lib/RT/Date.pm:337
msgid "sec"
+msgstr "שניות"
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
msgstr ""
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr ""
-#: html/Search/Results.html:80
-msgid "spreadsheet"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
msgstr ""
#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "מושהה"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
-msgstr ""
+msgstr "שורות סיכו×"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
-msgstr ""
+msgstr "מערכת %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
-msgstr ""
+msgstr "קבוצת מערכת '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
-msgstr ""
+msgstr "הרכיב ×”×§×•×¨× ×œ× ×”×¡×‘×™×¨ מדוע"
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "כתובות ברירת המחדל ×שר יופיעו בשדות ×”\"From\" ו\"Reply-To\" בדו×ל תגובות."
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "כתובות ברירת המחדל ×שר יופיעו בשדות ×”\"From\" ו\"Reply-To\" בדו×ל תכתובת."
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr ""
-#: lib/RT/Group_Overlay.pm:236
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
-msgstr ""
+msgstr "קבוצה ×œ×œ× ×ª×ור %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
+msgstr "משתמש %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
msgstr ""
-#: lib/RT/Date.pm:350
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "שבועי (×‘×™×•× %1) בשעה %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
+msgstr "שבועות"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
msgstr ""
-#: lib/RT/Date.pm:358
-msgid "years"
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
msgstr ""
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "שני×"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "כן"
+
diff --git a/rt/lib/RT/I18N/hr.po b/rt/lib/RT/I18N/hr.po
new file mode 100644
index 0000000..315cb90
--- /dev/null
+++ b/rt/lib/RT/I18N/hr.po
@@ -0,0 +1,8617 @@
+# Croatian localization catalog for Request Tracker (RT)
+# Created by Nebojsa Tomic, CARNet
+# Revised by Josip Rodin, CARNet
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-07 20:16+0000\n"
+"Last-Translator: Kevin Falcone <Unknown>\n"
+"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr "#%1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "$prefix %1"
+msgstr "$prefix %1"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr "%1 #%2"
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1 %3. %2 %7, %4:%5:%6"
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr "%1 %2 dodano"
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr "prije %1 %2"
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr "%1 %2 promijenjeno u %3"
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr "%1 %2 obrisano"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr "%1 %2 s predloškom %3"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (%2) %3 this ticket\\n"
+msgstr "%1 (%2) %3 ovaj zahtjev\\n"
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr "%1 (%2) od %3"
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr "%1 (nepromijenjeno)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - %2 shown"
+msgstr "%1 - %2 prikazano"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr "%1 - Argument za prosljeđivanje na %2"
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr "%1 - Status prikaza se nadograđuje na STDOUT"
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr ""
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr "%1 - Navedi koji će se modul rada koristiti"
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr "%1 - Navedi koji će se modul uvjetovanja koristiti"
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr "%1 - Navedi koji će se modul pretraživanja koristiti"
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr "ScripAction %1 uÄitano"
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr "%1 dodano kao vrijednost za %2"
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr "%1 nije pronađen u datoteci iako izgleda da je lokalni objekt"
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr "%1 od %2"
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr "%1 promijenjeno iz %2 u %3"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr "%1 kopirati"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr "%1 nije moguće postaviti na %2."
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr "%1 nije moguće promijeniti status u rijeÅ¡eno. RT baza podataka bi mogla biti neujednaÄena."
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr "%1 napravljen"
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr "%1 obrisan"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "%1 zahtjeva najvišeg prioriteta koje posjedujem"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I own..."
+msgstr "%1 meni dodijeljenih zahtjeva najvišeg prioriteta..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I requested..."
+msgstr "%1 zahtjeva najvišeg prioriteta koje sam zatražio/la..."
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr "%1 je alat za obradu zahtjeva preko vanjskog radnog alata poput crona"
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr "%1 više nije %2 u ovoj kategoriji."
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 više nije %2 ovog zahtjeva."
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 više nije vrijednost za vlastito polje %2"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 isn't a valid Queue id."
+msgstr "%1 nije valjan ID za kategoriju."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 matches"
+msgstr "%1 sadrži"
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr "%1 min"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 most recently updated articles"
+msgstr "%1 zadnji nadograÄ‘eni Älanci"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 newest articles"
+msgstr "%1 najnoviji Älanci"
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr "%1 najnovijih zahtjeva bez rješavatelja"
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr "%1 objekti"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 rights"
+msgstr "%1 ovlasti"
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr ""
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr "%1 će rijeÅ¡iti sve Älanove rijeÅ¡enog grupnog zahtjeva."
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr "%1's %2 objekti"
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr "%1's %2's %3 objekti"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr "%1's pohranjene pretrage"
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr "%1: privitak nije naveden"
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr "%1b"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr "%1k"
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr "'%1' nije valjana vrijednost za status"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete scrip)"
+msgstr "(OznaÄiti za brisanje natuknice)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr "(OznaÄiti za brisanje)"
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr "(Odaberite za deaktivaciju obavijesti primateljima s popisa)"
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr "(Odaberite za aktivaciju obavijesti primateljima s popisa)"
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr "(Unesite id-e zahtjeva ili URL-ove odvojene razmakom)"
+
+#: NOT FOUND IN SOURCE
+msgid "(If left blank, will default to %1"
+msgstr "(Pri izostavljanju, automatski na %1"
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr "(Nema vlastitih polja)"
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr "(Nema Älanova)"
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr "(Nema natuknica)"
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr "(Nema predložaka)"
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr "(Ništa)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(Šalje \"slijepu\" kopiju ove nadopune grupi e-mail adresa odvojenih zarezom. <b>Ne</b> mijenja tko će primati buduće nadopune.)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(Šalje kopiju ove nadopune grupi administrativnih e-mail adresa odvojenih zarezom. Ovi primatelji <b>će primati</b> buduće nadopune.)"
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(Šalje kopiju ovoe nadopune grupi e-mail adresa odvojenih zarezom. <b>Ne</b> mijenja tko će primati buduće nadopune.)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(Šalje kopiju ove nadopune grupi e-mail adresa odvojenih zarezom. Ovi primatelji <b>će primati</b> buduće nadopune.)"
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr "(Koristite ova polja kad odabirete \"user defined\" za uvjet ili radnju)"
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr "(prazno)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no Summary)"
+msgstr "(nema sažetka)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no name listed)"
+msgstr "(nema imena na listi)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no name)"
+msgstr "(nema imena)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "(no subject)"
+msgstr "(nema reference)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr "(nema vrijednosti)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr "(nema vrijednosti)"
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr "(samo jedan zahtjev)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr "(Äeka dopuÅ¡tenje)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other Collection)"
+msgstr "(Äeka sastavljanje)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other tickets)"
+msgstr "(Äeka druge zahtjeve)"
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr "(potrebno)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr "(bez naslova)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr ""
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr ""
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"Novi zahtjev u\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr "Prazan predložak"
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr "ACE nije pronađeno"
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr "ACEs se mogu samo praviti i brisati."
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr "I"
+
+#: NOT FOUND IN SOURCE
+msgid "Aborting to avoid unintended ticket modifications.\\n"
+msgstr "Prekid da bi se izbjegle neželjene promjene na zahtjevu.\\n"
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr "O meni"
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr "Kontrola pristupa"
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr "Radnja"
+
+#: NOT FOUND IN SOURCE
+msgid "Action %1 not found"
+msgstr "Radnja %1 nije pronađena"
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Action committed."
+msgstr "Radnja izvršena."
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr "Radnja izvršena.\\n"
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr "Radnja u pripremi..."
+
+#: NOT FOUND IN SOURCE
+msgid "Add"
+msgstr "Dodati"
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr "Dodati AdminCC"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr "Dodati Cc"
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr "Dodati stupce"
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr "Dodati kriterij"
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr "Dodati više datoteka"
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr "Dodati prijavitelja"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr "Dodati vrijednost"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a new a global scrip"
+msgstr "Dodaj novu globalnu natuknicu"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a scrip to this queue"
+msgstr "Dodaj natuknicu na ovu kategoriju"
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr "Dodaj natuknicu koja će se primijeniti na sve kategorije"
+
+#: NOT FOUND IN SOURCE
+msgid "Add additional criteria"
+msgstr "Dodaj dodatne kriterije"
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr "Dodaj komentare ili odgovore odabranim zahtjevima"
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr "Dodati Älanove"
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr "Dodati nove promatraÄe"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr "Dodati, brisati i mijenjati vrijednosti vlastitih polja za objekte"
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr "Dodan glavni parametar kao %1 za ovu kategoriju"
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr "Dodan glavni parametar kao %1 za ovaj zahtjev"
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr "Adresa 1"
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr "Adresa 2"
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr "Admin CC"
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr "Admin komentar"
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr "Admin korespondencija"
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr "Admin kategorije"
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr "Admin/Globalne postavke"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Queue/Basics"
+msgstr "Admin/Kategorije/Osnovno"
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr "AdminCc"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr "AdminVlastitihPolja"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr "AdminGrupa"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr "AdminGrupnogÄŒlanstva"
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr "AdminVlastitihOsobnihGrupa"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr "AdminKategorija"
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr "AdminKorisnika"
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr "Administrativni CC"
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr "Napredno"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search"
+msgstr "Napredna pretraga"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search Criteria"
+msgstr "Kriteriji napredne pretrage"
+
+#: NOT FOUND IN SOURCE
+msgid "Age"
+msgstr "Dob"
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr "Agregator"
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr "Odobrena sve dozvole"
+
+#: NOT FOUND IN SOURCE
+msgid "All Classes"
+msgstr "Sve klase"
+
+#: NOT FOUND IN SOURCE
+msgid "All Custom Fields"
+msgstr "Sva vlastita polja"
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr "Sve kategorije"
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr "I/ili"
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr "Odnosi se na"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr "Primijeniti"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr "Primijeniti promjene"
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr "Odobrenja"
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr "Odobrenje #%1: %2"
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr "Odobrenje #%1: Nema zabilješki zbog sistemske greške"
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr "Odobrenje #%1: Zabilježene napomene"
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr "Odobrenje prošlo"
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr "Odobrenje odbijeno"
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr "Odobriti"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver's notes: %1"
+msgstr "Zabilješke odobrenja: %1"
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Apr."
+msgstr "Apr"
+
+#: NOT FOUND IN SOURCE
+msgid "Are you sure you want to delete this article?"
+msgstr "Jeste li sigurni da zelite obrisati ovaj Älanak?"
+
+#: NOT FOUND IN SOURCE
+msgid "Article #%1 deleted"
+msgstr "ÄŒlanak #%1 obrisan"
+
+#: NOT FOUND IN SOURCE
+msgid "Article #%1: %2"
+msgstr "ÄŒlanak #%1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Article not found"
+msgstr "Članak nije pronađen"
+
+#: NOT FOUND IN SOURCE
+msgid "Articles"
+msgstr "ÄŒlanci"
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr "Rastuce"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr "Dodijeliti i odstraniti vlastita polja"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr "DodijelitiVlastitaPolja"
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr "Priložiti"
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr "Priložiti datoteku"
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr "Priložena datoteka"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr "Datoteka '%1' se nije mogla uÄitati"
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr "Prilog napravljen"
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr "Ime datoteke u prilogu"
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr "Prilozi"
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr "Atribut obrisan"
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Aug."
+msgstr "Aug"
+
+#: NOT FOUND IN SOURCE
+msgid "AuthSystem"
+msgstr "AutorizacijskiSistem"
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr "Automatski odgovor"
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr "Automatski odgovor prijaviteljima"
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bad PGP Signature: %1\\n"
+msgstr "PGP-Signatura s greskama: %1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
+msgstr "Id priloga sadrži greske. Prilog '%1' nije pronađen\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad data in %1"
+msgstr "Podaci s greskama u %1"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bad transaction number for attachment. %1 should be %2\\n"
+msgstr "Pogresan broj transakcije za prilog. %1 bi trebao biti %2 \\n"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "Osnovno"
+
+#: NOT FOUND IN SOURCE
+msgid "Bcc"
+msgstr "BCC"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr "Sjeti se spremiti promjene"
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Binary"
+msgstr "Binarno"
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr "Prazno"
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "Podebljano"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable URL for this search"
+msgstr "Spremiv URL za ovu pretragu"
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable link"
+msgstr "Spremiv link"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr "Kratka zaglavlja"
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bulk ticket update"
+msgstr "Nadopuna skupnih zahtjeva"
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr "Sistemski korisnici se ne mogu promijeniti"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr "Može li glavni parametar vidjeti ovu kategoriju"
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr "Vrijednost za vlastito polje se ne može dodati bez imena"
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr "Nije pronađena spremljena pretraga"
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr "Zahtjev se ne može povezati na sebe!"
+
+#: NOT FOUND IN SOURCE
+msgid "Can't merge into a merged ticket. You should never get this error"
+msgstr "Zahtjev se ne može spojiti sa sjedinjenim zahtjevom. Ovu grešku nikad ne biste smjeli dobiti"
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr "Ne može se spremiti ova pretraga"
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr "Ne mogu se navesti istovremeno osnova i cilj"
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr "Ne može se napraviti korisnik: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr ""
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr "CC"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr "Promijeniti lozinku"
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr "Odabrati sve"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr "OznaÄiti za brisanje"
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr "OznaÄiti za poniÅ¡tenje ovlasti"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr "Djeca"
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr "Grad"
+
+#: NOT FOUND IN SOURCE
+msgid "Class"
+msgstr "Klasa"
+
+#: NOT FOUND IN SOURCE
+msgid "Class Name"
+msgstr "Ime klase"
+
+#: NOT FOUND IN SOURCE
+msgid "Class is"
+msgstr "Klasa je"
+
+#: NOT FOUND IN SOURCE
+msgid "Classes"
+msgstr "Klase"
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr "Isprazniti sve"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr "Zatvoreno"
+
+#: NOT FOUND IN SOURCE
+msgid "Closed Tickets"
+msgstr "Zatvoreni zahtjevi"
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr "Zatvoreni zahtjevi"
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr "Komentar"
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr "Adresa komentara"
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr "Komentiraj zahtjeve"
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr "KomentarNaZahtjev"
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "Komentari"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr "Komentar (ne Å¡alje se prijaviteljima)"
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr "Komentar (ne Å¡alje se prijaviteljima)"
+
+#: NOT FOUND IN SOURCE
+msgid "Comments about %1"
+msgstr "Komentar o %1"
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr "Komentar o ovom korisniku"
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr "Komentar dodan"
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr "Predaja odrezanaÄ`Âśbergabe abgehakt"
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr "Uvjet"
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr "Uvjet se podudara s..."
+
+#: NOT FOUND IN SOURCE
+msgid "Condition not found"
+msgstr "Uvjet nije pronađen"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr "Postavke"
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr "Potvrditi"
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr "Sadržaj"
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr "Tip sadržaja"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Copy"
+msgstr "Kopija"
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr "Korespondencija"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence Address"
+msgstr "Adresa korespondencije"
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr "Korespondencija dodana"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. "
+msgstr "Zahtjevu se nije mogla dodati nova vrijednost vlastitog polja. "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. "
+msgstr "Nije se mogla dodati nova vrijednost vlastitog polja "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. %1 "
+msgstr "Nije se mogla dodati nova vrijednost vlastitog polja. %1 "
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Could not change owner. "
+msgstr "Rješavatelj nije mogao biti promijenjen. "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr "Vlastito polje nije moglo biti napravljeno"
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr "Vlastito polje: %1 nije moglo biti napravljeno"
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr "Ne može se napraviti grupa"
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr "Predložak: %1 nije mogao biti napravljen"
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr "Zahtjev nije mogao biti napravljen. Kategorija nije određena"
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr "Korisnik nije mogao biti napravljen"
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr "Ovaj korisnik nije mogao biti pronađen ili napravljen"
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr "Ovaj glavni parametar nije mogao biti pronađen"
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr "Vlastito polje %1 nije se moglo uÄitati"
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr "Grupa se nije mogla uÄitati"
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr "Taj glavni parametar nije mogao biti postavljen kao %1 za ovu kategoriju"
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr "Taj glavni parametar nije mogao biti postavljen kao %1 za ovaj zahtjev"
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr "Taj glavni parametar se nije mogao ukloniti kao %1 za ovu kategoriju"
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr "Taj glavni parametar se nije mogao ukloniti kao %1 za ovaj zahtjev"
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr "Informacije o korisniku se nisu mogle dodati"
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr "ÄŒlan se nije mogao dodati grupi"
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr "Transakcija: %1 se nije mogla napraviti"
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr "Red nije pronađen"
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr "Taj glavni parametar nije pronađen"
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr "Ova vrijednost nije pronađena"
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr "%1 se nije mogao uÄitati iz korisniÄke datoteke.\\n"
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr "Klasa %1 se nije mogla uÄitati"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr "Vlastito polje %1 nije se moglo uÄitati"
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr "Grupa %1 se nije mogla uÄitati"
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr "Link se nije mogao uÄitati"
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr "Objekt %1 se nije mogao uÄitati"
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr "Kategorija se nije mogla uÄitati"
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr "Kategorija %1 se nije mogla uÄitati"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load that user (%1)"
+msgstr "Taj korisnik (%1) nije mogao biti uÄitan"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr "Zahtjev '%1' se nije mogao uÄitati"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr "Drzava"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr "Napravi"
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr "Napravi zahtjeve"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a Class"
+msgstr "Napravi klasu"
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr "Napravi vlastito polje"
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr "Napravi vlastito polje za kategoriju %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a CustomField which applies to all queues"
+msgstr "Napravi vlastito polje primjenjivo na sve kategorije"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new article"
+msgstr "Napravi novi Älanak"
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr "Napravi novu grupu"
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr "Napravi novu osobnu grupu"
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr "Napravi novi zahtjev"
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr "Napravi novog korisnika"
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr "Napravi kategoriju"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a request"
+msgstr "Napravi zahtjev"
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr "Napravi natuknicu za kategoriju %1"
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr "Napravi predložak"
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr "Napravi novi zahtjev"
+
+#: NOT FOUND IN SOURCE
+msgid "Create an article"
+msgstr "Napravi Älanak"
+
+#: NOT FOUND IN SOURCE
+msgid "Create an article in class..."
+msgstr "Napravi Älanak u klasi..."
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr "Napravi nove zahtjeve temeljene na ovoj natuknici"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr "Pošalji zahtjev"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr "Napravi zahtjeve u ovoj kategoriji"
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr "Praviti, brisati i mijenjati vlastita polja"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr "Praviti, brisati i mijenjati kategorije"
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr "Praviti, brisati i mijenjati Älanove osobnih grupa"
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr "Praviti, brisati i mijenjati korisnike"
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr "NapraviSpremljenuPretragu"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr "NapraviZahtjev"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr "Napravljeno"
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr "Napravi vlastito polje %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Created by"
+msgstr "Napravljeno od"
+
+#: NOT FOUND IN SOURCE
+msgid "Created during"
+msgstr "Napravljeno tijekom"
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr "Kreator"
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr "Trenutni linkovi"
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr "Trenutne natuknice"
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr "Trenutni Älanovi"
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr "Trenutne ovlasti"
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Current search criteria"
+msgstr "Trenutni kriteriji pretrage"
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr "Trenutni promatraci"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom Field #%1"
+msgstr "Deinirano polje #%1"
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr "Vlastita polja"
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr "Vlastita polja za %1"
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr "Definirani kod cišcenja"
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr "Definirani kod pripreme"
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr "Definirani uvjet"
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "Definirano polje %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr "Definirano polje %1 ima vrijednost."
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr "Definirano polje %1 nema vrijednost."
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr "Definirano polje %1 nije pronađeno"
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field deleted"
+msgstr "Definirano polje obrisano"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field not found"
+msgstr "Definirano polje nije pronađeno"
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr "Vrijednost %1 vlastitog polja %2 nije moglo biti pronađeno"
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr "Vrijednost vlastitog polja se nije mogla obrisati"
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr "Vrijednost vlastitog polja nije mogla biti pronađena"
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr "Vrijednost vlastitog polja obrisana"
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr "DefiniranoPolje"
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr "Datumi"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Dec."
+msgstr "Pro"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr "Standardni predložak automatskog odgovora"
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr "Standardna kategorija"
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr "Standardni tražitelj"
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr "Standardni predložak adminskog komentara"
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr "Standardni predložak adminske korespondencije"
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr "Standardni predložak korespondencije"
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr "Standardni predložak transakcije"
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr "Standard: %1/%2 iz \"%3\" u \"%4\" promijenjen."
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr "Proslijediti ovlasti"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr "Proslijediti ovlasti koje su vam dodijeljene"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr "ProsljeđivanjeOvlasti"
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr "ProsljeđivanjeOvlasti"
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr "Brisati"
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr "Obrisati predložak"
+
+#: NOT FOUND IN SOURCE
+msgid "Delete article #%1"
+msgstr "Obrisati Älanak #%1"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr "Obrisati odabrane natuknice"
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr "Obrisati zahtjeve"
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr "ObrisatiZahtjev"
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object could break referential integrity"
+msgstr "Brisanje ovog objekta može ugroziti referencijalni integritet"
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr "Brisanje ovog objekta bi ugrozilo referencijalni integritet"
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr "Brisanje ovog objekta bi povrijedilo referencijalni integritet"
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr "Odbiti"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr "Druge stvari koje ovise o ovome"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr "Dodana ovisnost od strane %1"
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr "Obrisana ovisnost od strane %1"
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr "Dodana ovisnost o %1"
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr "Obrisana ovisnost o %1"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr "Ovisi o"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr "Padajuce"
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr "Opiši problem ispod"
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr "Opis"
+
+#: NOT FOUND IN SOURCE
+msgid "Details"
+msgstr "Detalji"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr "Prikazati"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr "Prikaži listu konrole pristupa"
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr "Prikaži stupce"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr "Prikaži predloške natuknica za ovu kategoriju"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr "Prikaži natuknice za ovu kategoriju"
+
+#: NOT FOUND IN SOURCE
+msgid "Display mode"
+msgstr "NaÄin prikaza"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr "Prikaži spemljene pretrage za ovu grupu"
+
+#: NOT FOUND IN SOURCE
+msgid "Display ticket #%1"
+msgstr "Prikaži zahtjev br. %1"
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr "Ucini bilo sto i sve"
+
+#: NOT FOUND IN SOURCE
+msgid "Do the Search"
+msgstr "Pretražiti"
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr "Ne osvježavaj ovu stranicu."
+
+#: NOT FOUND IN SOURCE
+msgid "Don't show search results"
+msgstr "Ne prikazuj rezultate pretrage"
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr "Download"
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr "Spremiti kao tabom odvojenu datoteku"
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr "Riješiti do"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
+msgstr "GREÅ KA: Zahtjev '%1' se nije mogao uÄitati: %2.\\n"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr ""
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr "Uredi vlastita polja za %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Custom Fields for Class %1"
+msgstr "Uredi vlastita polja za klasu %1"
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr "Uredi linkove"
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr "Uredi upit"
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr ""
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr "Uredi predloške za kategoriju %1"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr "Uredi spremljene potrage za ovu grupu"
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr "Uredi sistemske predloške"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr "UrediSpremljenePotrage"
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Editing Configuration for Class %1"
+msgstr "Uređivanje postavki za klasu %1"
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr "Uređivanje postavki za kategoriju %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing Configuration for user %1"
+msgstr "Uređivanje postavki za korisnika %1"
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr "Uređivanje vlastita polja %1"
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr "UreÄ‘ivanje Älanstva za grupu %1"
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr "UreÄ‘ivanje Älanstva za osobnu grupu %1"
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr "Ili baza ili cilj mora biti definiran"
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr "E-Mail"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr "E-Mail adresa se vec koristi"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "E-Mail adresa"
+
+#: NOT FOUND IN SOURCE
+msgid "EmailEncoding"
+msgstr "E-MailKodiranje"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled (Unchecking this box disables this Class)"
+msgstr "Aktivirano (Uklanjanje oznake deaktivira ovu klasu)"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr "Aktivirano (Uklanjanje oznake deaktivira ovo vlastito polje)"
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr "Aktivirano (Uklanjanje oznake deaktivira ovu grupu)"
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr "Aktivirano (Uklanjanje oznake deaktivira ovu kategoriju)"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Classes"
+msgstr "Aktivirane klase"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Custom Fields"
+msgstr "Aktivirana vlastita polja"
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr "Aktivirane kategorije"
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr "Status %1 aktiviran"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled status: %1"
+msgstr "Status %1 aktiviran"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Enter Articles or URIs to link Articles to. Seperate multiple entries with spaces."
+msgstr "Unesi Älanke ili URI-je na koje se Älanci vezu. Visestruke unose razdvoji razmacima."
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr "Unesi vise vrijednosti"
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr "Unesi objekte ili URI-je na koje se objekti vezu. Visestruke unose razdvoji razmacima."
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr "Unesi jednu vrijednost"
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr "Unesi kategorije ili URI-je na koje se kategorije vezu. Visestruke unose razdvoji razmacima."
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr "Unesi zahtjeve ili URI-je na koje se zahtjevi vezu. Visestruke unose razdvoji razmacima."
+
+#: NOT FOUND IN SOURCE
+msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces."
+msgstr "Unesi zahtjeve ili URI-je na koje se zahtjevi vezu. Visestruke unose razdvoji razmacima."
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr "Unesi do %1 vriednosti"
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr "Greška"
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr "GreÅ¡ka u parametrima za Kategorija->DodajPromatraÄa"
+
+#: NOT FOUND IN SOURCE
+msgid "Error in parameters to Queue->DelWatcher"
+msgstr "GreÅ¡ka u parametrima za Kategorija->BriÅ¡iPromatraÄa"
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr "GreÅ¡ka u parametrima za Kategorija->BriÅ¡iPromatraÄa"
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr "GreÅ¡ka u parametrima za Zahtjev->DodajPromatraÄa"
+
+#: NOT FOUND IN SOURCE
+msgid "Error in parameters to Ticket->DelWatcher"
+msgstr "GreÅ¡ka u parametrima za Zahtjev->BriÅ¡iPromatraÄa"
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr "GreÅ¡ka u parametrima za Zahtjev->BriÅ¡iPromatraÄa"
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr "Eskalirati zahtjeve"
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr "Ocekivano"
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr "Svatko"
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr "Primjer:"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalAuthId"
+msgstr "EksterniAutorizacijskiId"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalContactInfoId"
+msgstr "EksterniKontaktInfoId"
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr "Dodatne informacije"
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Extract article from ticket #%1"
+msgstr "Izvadi Älanak iz zahtjeva br. %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Extract article from ticket #%1 into class %2"
+msgstr "Izvadi Älanak iz zahtjeva br. %1 u klasu %2"
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr "Pseudogrupa 'Privilegirani' korisnici nije pronađena."
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr "Pseudogrupa 'Neprivilegirani' korisnici nije pronađena"
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr "Modul %1 nije mogao biti uÄitan. (%2)"
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr ""
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Feb."
+msgstr "Velj"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr "Ime datoteke"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr "Ispuniti vise polja u tekstu"
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr "Ispuniti jedno polje u tekstu"
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr "Ispuniti do %1 polja u tekstu"
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr "Krajnji prioritet"
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr "Krajnji prioritet"
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Find group whose"
+msgstr "PronaÄ‘i grupu Äije"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr "PronaÄ‘i grupe Äije"
+
+#: NOT FOUND IN SOURCE
+msgid "Find new/open tickets"
+msgstr "Pronađi nove/otvorene zahtjeve"
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr "PronaÄ‘i ljude Äije"
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr "Pronađi zahtjeve"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr "Prvo"
+
+#: NOT FOUND IN SOURCE
+msgid "First page"
+msgstr "Prva stranica"
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr "Foo Bar Baz"
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr "Foo!"
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr "Prisili na promjenu"
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr ""
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr "Pronađeno %quant(%1,ticket)"
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr "Pronađen objekt"
+
+#: NOT FOUND IN SOURCE
+msgid "Freeform"
+msgstr "Slobodan unos"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformContactInfo"
+msgstr "SlobodanKontaktInfo"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformMultiple"
+msgstr "SlobodanVišestrukiIzbor"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformSingle"
+msgstr "SlobodanPojedinacniIzbor"
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Fri."
+msgstr "Pet"
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr "Sva zaglavlja"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr "Preuzmi predložak iz datoteke"
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr "Dano %1"
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr "Globalno"
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr "Globalna vlastita polja"
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr "Postavke globalnih vlastitih polja"
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr ""
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr "Globalni predložak: %1"
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "Pocni"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "Idi!"
+
+#: NOT FOUND IN SOURCE
+msgid "Goto page"
+msgstr "Idi na stranicu"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr "Pokaži zahtjev"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "Grupa"
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr "Grupne ovlasti"
+
+#: NOT FOUND IN SOURCE
+msgid "Group already has member"
+msgstr "Grupa vec ima Älanove"
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr "Grupa nije mogla biti napravljena: %1"
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr "Grupa napravljena"
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr "Grupa ne sadrži takvog Älana"
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr "Grupa nije pronađena"
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr "Grupe"
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr "Grupe ne mogu biti Älanovi svojih Älanova"
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr "Grupe koje odgovaraju kriterijima pretrage"
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr "Grupe kojima pripada ovaj korisnik"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr "Pozdrav!"
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr "Pozdrav %1"
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr "Povijest"
+
+#: NOT FOUND IN SOURCE
+msgid "History for article #%1"
+msgstr "Povijest za Älanak #%1"
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr "Povijest grupe %1"
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr "Povijest korisnika %1"
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "KucniTelefon"
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr "PoÄetna stranica"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr ""
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "I'm lost"
+msgstr "Izgubljen sam"
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr "Br."
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr "Identitet"
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr "Ako je odobrenje odbijeno, odbij original i pobriÅ¡i odobrenja na Äekanju"
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr "Ako kreator nije određen, napravi zahtjeve s ovim prijavitelj"
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr "Ako kategorija nije određena, napravi zahtjeve u ovoj kategoriji"
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr "Ako je ovaj alat 'setgid', neprijateljski lokalni korisnik bi mogao koristiti ovaj alat za dobivanje administratorskog pristupa RT-u."
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr "Ako ste išta mijenjali iznad, ne zaboravite kliknuti ovdje"
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr "Nedopustena vrijednost za %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Image"
+msgstr "Slika"
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr "Nepromjenjivo polje"
+
+#: NOT FOUND IN SOURCE
+msgid "Include disabled classes in listing."
+msgstr "Prikaži i deaktivirane klase."
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "Prikaži i deaktivirana vlastita polja."
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr "Prikaži i deaktivirane grupe"
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr "Prikaži i deaktivirane kategorije."
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr "Ukljuci deaktivirane korisnike u pretragu."
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete Query"
+msgstr "Nepotpun upit"
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete query"
+msgstr "Nepotpun upit"
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr "Pocetni prioritet"
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr "Pocetni prioritet"
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr "Greška pri unosu"
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr "Interna greška"
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr "Interna greška: %1"
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr "Nevažeća vrsta grupe"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Right"
+msgstr "Nevažeća ovlast"
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr "Nevažeći podaci"
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid owner. Defaulting to 'nobody'."
+msgstr "Nevažeći rješavatelj. Postavljeno na 'nobody'."
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr "Nevažeća kategorija"
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr "Nevažeća ovlast"
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr "Nevažeća vijednost za %1"
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr "Nevažeća vrijednost za vlastito polje"
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr "Nevažeća vrijednost za status"
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr "Vrlo je vazno da neprivilegiranim korisnicima nije dopušteno koristiti ovaj alat."
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr "Preporucljivo je napraviti neprivilegiranog unix korisnika s ispravnim Älanstvom u grupi i RT pristupom za koristenje ovog alata."
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr "Potrebno je nekoliko parametara:"
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr "Kurziv"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Jan."
+msgstr "Sij"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr "Pridruži se ili napusti ovu grupu"
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Jul."
+msgstr "Srp"
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr "Sve"
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Jun."
+msgstr "Lip"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Lang"
+msgstr "Jezik"
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr "Jezik"
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr "Veliko"
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr "Zadnji kontakt"
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr "Zadnji kontakt"
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr "Posljednji kontaktiran"
+
+#: NOT FOUND IN SOURCE
+msgid "Last Notified"
+msgstr "Posljednji obaviješten"
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr "Posljednje osvježavano"
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr "PosljednjeOsvježavanoOd"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr "Preostalo"
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr "Dopustiti pristup RT-u ovom korisniku"
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr "Dodijeliti više ovlasti ovom korisniku"
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr ""
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr "Link vec postoji"
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr "Link nije mogao biti napravljen"
+
+#: NOT FOUND IN SOURCE
+msgid "Link created (%1)"
+msgstr "Link napravljen (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Link deleted (%1)"
+msgstr "Link obrisan (%1)"
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr "Link nije pronađen"
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr "Linkaj na zahtjev br. %1"
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr ""
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr "Linkovi"
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr "UÄitati"
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr "UÄitati spremljenu pretragu"
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr "UÄitatiSpremljenuPretragu"
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr "UÄitani perl moduli"
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "Adresa"
+
+#: NOT FOUND IN SOURCE
+msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
+msgstr "Popis prijavljivanja %1 nije pronađen ili nije mogao biti ispisan.\\n RT se ne može pokrenuti."
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr "Prijavljen kao %1"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr "Prijavi se"
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr "Odjava"
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr "Nepodudarajuci tip pretrage"
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr "Napravi rješavatelja"
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr "Napravi status"
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr "Napravi datum"
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr "Napravi datum rješavanja"
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr "Napravi datum poÄetka"
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr "Napravi datum poÄinjanja"
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr "Napravi datum ulaza"
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr "Napravi prioritet"
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr "Napravi kategoriju"
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr "Napravi temu"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr "Ucini ovu grupu vidljivom korisniku"
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr "Upravljanje vlastitim poljima i njihovim vrijednostima"
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr "Upravljanje grupama i Älanstvom u grupama"
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr "Upravljanje svojstvima i postavkama koji se primjenjuju na sve kategorije"
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr "Upravljanje kategorijama i svojstvima specifiÄnima za kategorije"
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr "Upravljanje korisnicima i lozinkama"
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Mar."
+msgstr "Ozu"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "May."
+msgstr "Svi"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr "Dodan Älan %1"
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr "Obrisan Älan %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Member added"
+msgstr "Dodan Älan"
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr "Obrisan Älan"
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr "ÄŒlan nije obrisan"
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr "ÄŒlan od"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr "ÄŒlanovi"
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr "Dodano Älanstvo u %1"
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr "Obrisano Älanstvo u %1"
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr "ÄŒlanstva"
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr "ÄŒlanstvo korisnika %1"
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr "Spajanje uspjesno"
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr "Spajanje neuspjesno. EfectiveId se nije mogao postaviti"
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr "Spajanje neuspjesno. Status se nije mogao postaviti"
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr "Spojiti u"
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr "Spojiti u %1"
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr "Poruka"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr "Poruku nije bilo moguće zabilježiti"
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr "Poruka zabilježena"
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr "Poruke o ovom zahtjevu neće biti poslane..."
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Mismatched parentheses"
+msgstr "Pogrešne zagrade"
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr "%1: Nedostaje primarni kljuÄ?"
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr "Mobil"
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "MobilniTelefon"
+
+#: NOT FOUND IN SOURCE
+msgid "Modified"
+msgstr "Promijenjeno"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify"
+msgstr "Promijeniti"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr "Promijeni listu kontrole pristupa"
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr "Promijeni vlastita polja koja se primjenjuju na %1 za sve %2"
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr "Promijeni vlastita polja koja se primjenjuju na sve %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Custom Fields which apply to all queues"
+msgstr "Promijeni vlastita polja koja se primjenjuju na sve kategorije"
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr "Promijeni grupne ovlasti"
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr "Promijeni Älanove"
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr "Promijeni ovlasti"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr "Promijeni predloške natuknica za ovu kategoriju"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr "Promijeni natuknice za ovu kategoriju"
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr "Promijeni korisniÄke ovlasti"
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr "Promijeni vlastito polje za kategoriju %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify a CustomField which applies to all queues"
+msgstr "Promijeni vlastito polje koje se primjenjuje na sve kategorije"
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr "Promijeni natuknicu za kategoriju %1"
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Modify a scrip which applies to all queues"
+msgstr "Promijeni natuknice koji se primjenjuje na sve kategorije"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify article #%1"
+msgstr "Promijeni Älanak #%1"
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr "Promijeni povezane objekte za %1"
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr "Promijeni datume za #%1"
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Modify dates for ticket #%1"
+msgstr "Promijeni datume za zahtjev br. %1"
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr "Promijeni globalna vlastita polja"
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr "Promijeni globalne grupne ovlasti"
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr "Promijeni globalne grupne ovlasti."
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr "Promijeni globalne korisniÄke ovlasti"
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr "Promijeni globalne korisniÄke ovlasti."
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr "Promijeni grupne metapodatke ili obriši grupu"
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr "Promijeni grupne ovlasti za vlastito polje %1"
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr "Promijeni grupne ovlasti za grupu %1"
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr "Promijeni grupne ovlasti za kategoriju %1"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr "Promijeni popis Älanstva za ovu grupu"
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr "Promijeni neciji vlastiti RT pristup"
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr "Promijeni ljude koji se odnose na kategoriju %1"
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr "Promijeni ljude koji se odnose na zahtjev br. %1"
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr "Promijeni natuknice za kategoriju %1"
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr "Promijeni natuknice koji se primjenjuju na sve kategorije"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr "Promijeni predložak %1"
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr "Promijeni predloške koji se primjenjuju na sve kategorije"
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr "Promijeni grupu %1"
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr "Promijeni promatraÄe kategorije"
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr "Promijeni korisnika %1"
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr "Promijeni zahtjev br. %1"
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr "Promijeni zahtjev br. %1"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr "Promijeni zahtjeve"
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr "Promijeni korisniÄke ovlasti za vlastito polje %1"
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr "Promijeni korisniÄke ovlasti za grupu %1"
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr "Promijeni korisniÄke ovlasti za kategoriju %1"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr "PromijeniACL"
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr "PromijeniDefiniranoPolje"
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr "PromijeniVlastitoÄŒlanstvo"
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr "PromijeniPromatraÄeKategorije"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr "PromijeniNatuknice"
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr "PromijeniSebe"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr "PromijeniPredložak"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr "PromijeniZahtjev"
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Mon."
+msgstr "Pon"
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr "Više o %1"
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr "Pomaknuti dolje"
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr "Pomakni gore"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr "Visestruki"
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr "Potrebno je navesti svojstvo za 'Name'"
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr "Moji %1 zahtjevi"
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr ""
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr "Moja odobrenja"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr "Moje spremljene pretrage"
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr "Ime"
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr "KorisniÄko ime se vec koristi"
+
+#: NOT FOUND IN SOURCE
+msgid "Name matches"
+msgstr "Ime sadrži"
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr "Nikad"
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "Novo"
+
+#: NOT FOUND IN SOURCE
+msgid "New Article"
+msgstr "Novi Älanak"
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr "Novi linkovi"
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr "Nova lozinka"
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr "Nova odobrenja na Äekanju"
+
+#: NOT FOUND IN SOURCE
+msgid "New Query"
+msgstr "Novi upit"
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr "Nova pretraga"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "New class"
+msgstr "Nova klasa"
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr "Novo vlastito polje"
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr "Nova grupa"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr "Nova lozinka"
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr "Poslan novi podsjetnik na novu lozinku"
+
+#: NOT FOUND IN SOURCE
+msgid "New queue"
+msgstr "Nova kategorija"
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr "Nove ovlasti"
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr "Nova natuknica"
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr "Novi predložak"
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr "Novi zahtjev"
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr "Novi zahtjev ne postoji"
+
+#: NOT FOUND IN SOURCE
+msgid "New user"
+msgstr "Novi korisnik"
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr "Pozvan novi korisnik"
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr "Novi promatraci"
+
+#: NOT FOUND IN SOURCE
+msgid "New window setting"
+msgstr "Nove postavke prozora"
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr "Sljedeće"
+
+#: NOT FOUND IN SOURCE
+msgid "Next Page"
+msgstr "Sljedeća stranica"
+
+#: NOT FOUND IN SOURCE
+msgid "Next page"
+msgstr "Sljedeća stranica"
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "Nadimak"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr "Nadimak"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Ne"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr "Nema definirane klase"
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr "Nema vlastitog polja"
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr "Nema definiranog vlastitog polja"
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr "Nema definirane grupe"
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr "Nema upita"
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr "Nema kategorije"
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr "Nije pronađen RT korisnik. Kontaktirajte svojeg RT administratora.\\n"
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr "Nema predloška"
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket "
+msgstr "Zahtjev nije specificiran. Prekidam "
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr "Nema radnji"
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr "Nema definiranog stupca"
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr "Nema unesenih komentara za ovog korisnika"
+
+#: NOT FOUND IN SOURCE
+msgid "No correspondence attached"
+msgstr "Nije prikazana korespondencija"
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr "Nema opisa za %1"
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr "Nema definirane grupe"
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr "Nema grupa koje odgovaraju kriterijima pretrage"
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr "Nema poruke u prilogu"
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr "Lozinka nije postavljena"
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr "Nemate ovlasti za pravljenje kategorije"
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr "Nemate ovlasti za pravljenje zahtjeva u kategoriji '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "No permission to create users"
+msgstr "Nemate ovlasti za pravljenje korisnika"
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr "Nemate ovlasti za prikazivanje tog zahtjeva"
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr "Nemate ovlasti za ažuriranje zahtjeva"
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr "Nema definiranog glavnog parametra"
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr "Nema odabranih glavnih parametara."
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr "Nisu pronađene kategorije koji odgovaraju kriterijima pretrage"
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr "Ovlasti nisu pronađene"
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr "Nema dodijeljenih ovlasti."
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr "Nema pretrage za obradu."
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr "Nema naslova"
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr "Nije naveden tip transakcije"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr "Nisu pronađeni korisnici koji odgovaraju kriterijima pretrage"
+
+#: NOT FOUND IN SOURCE
+msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
+msgstr "Nije pronajden valjan RT korisnik. RT CVS-handler iskljucen. Kontaktirajte svojeg RT-administratora.\\n"
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr "Nije poslana vrijednost na _Set!\\n"
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr "Nitko"
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr "Nepostojeće polje?"
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr "Niste prijavljeni."
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr "Nije postavljeno"
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr "Nije još implementirano."
+
+#: NOT FOUND IN SOURCE
+msgid "Not yet implemented...."
+msgstr "Nije još implementirano..."
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr "Bilješke"
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr "Obavijest nije mogla biti poslana"
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr "Obavijesti AdminCC-ove"
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr "obavijesti AdminCC-ove u obliku komentara"
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr "Obavijesti Cc-ove"
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr "Obavijesti Cc-ove u obliku komentara"
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr "Obavijesti ostale primatelje"
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr "Obavijesti ostale primatelje u obliku komentara"
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr "Obavijesti rješavatelja"
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr "Obavijesti rješavatelja u obliku komentara"
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr "Obavijesti rješavatelja o odbijenim zahtjevima"
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by all approvers"
+msgstr "Obavijesti rješavatelja da su svi odobrili zahtjev"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by some approver"
+msgstr "Obavijesti rješavatelja da su neki odobrili zahtjev"
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr "Obavijesti rjeÅ¡avatelje i AdminCc-ove o odobrenjima na Äekanju"
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr "Obavijesti prijavitelje"
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr "Obavijesti prijavitelje i CC-ove"
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr "Obavijesti prijavitelje i CC-ove u obliku komentara"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs"
+msgstr "Obavijesti prijavitelje, CC-ove i AdminCc-ove"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+msgstr "Obavijesti prijavitelje, CC-ove i AdminCC-ove u obliku komentara"
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Nov."
+msgstr "Stu"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr "Ili"
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr "Objekt nije bilo moguće napraviti"
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr "Objekt nije bilo moguće obrisati"
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr "Objekt napravljen"
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr "Objekt obrisan"
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr "Objekt tipa %1 ne može imati vlastita polja"
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr "Tip objekta nije odgovarajuc"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Oct."
+msgstr "Lis"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr "Offline"
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr "Offline uređivanje"
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr "Offline upload"
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr ""
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr "Pri komentaru"
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr "Pri korespondenciji"
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr "Pri pravljenju"
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr "Pri promjeni rješavatelja"
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr "Pri promjeni prioriteta"
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr "Pri promjeni kategorije"
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr "Pri rješavanju"
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr "Pri promjeni statusa"
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr "Pri transakciji"
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr "Prikaži samo odobrenja za zahtjeve napravljene nakon %1"
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr "Prikaži samo odobrenja za zahtjeve napravljene prije %1"
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Open"
+msgstr "Otvoreno"
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr ""
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr "Otvori"
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr "Otvoreni zahtjevi"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in a new window"
+msgstr "Otvori zahtjeve (s liste) u novom prozoru"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in another window"
+msgstr "Otvori zahtjeve (s liste) u drugom prozoru"
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr "Otvori zahtjeve pri korespondenciji"
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr ""
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr "Sortirano prema"
+
+#: NOT FOUND IN SOURCE
+msgid "Ordering and sorting"
+msgstr "Redoslijed i sortiranje"
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr "Organizacija"
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr "Izvorni zahtjev: #%1"
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr "Zabilježena odlazna pošta o komentaru"
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr "Zabilježena odlazna pošta"
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr "S vremenom prioritet raste"
+
+#: NOT FOUND IN SOURCE
+msgid "Overview"
+msgstr "Pregled"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr "Vlastiti zahtjevi"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr "VlastitiZahtjev"
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr "Rješavatelj"
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "Promjena rješavatelja od %1 u %2"
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr "Nije moguće postaviti rješavatelja"
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr "Vlasnik silom promijenjen od %1 u %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Owner is"
+msgstr "Rješavatelj je"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Page %1 of %2"
+msgstr "Stranica %1 od %2"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr "Pager"
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "PagerTelefon"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr "Roditelji"
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr "Lozinka"
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr "Podsjetnik na lozinku"
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr "Lozinka promijenjena"
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Password too short"
+msgstr "Lozinka je prekratka"
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr "Lozinka: %1"
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr ""
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr "Lozinke se ne podudaraju"
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr "Lozinke se ne podudaraju. Lozinka nije promijenjena."
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr "Osobe"
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr "Izvedi radnju definiranu od korisnika"
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr "Perl Postavke"
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr "nije dozvoljeno"
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr ""
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr "Osobne grupe"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups"
+msgstr "Osobne grupe"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups:"
+msgstr "Osobne grupe:"
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr "Brojevi telefona"
+
+#: NOT FOUND IN SOURCE
+msgid "Placeholder"
+msgstr "ÄŒuvar mjesta"
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr "Osobne postavke"
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr "Priprema presjecena"
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr "Prethodno"
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Previous Page"
+msgstr "Prethodna stranica"
+
+#: NOT FOUND IN SOURCE
+msgid "Previous page"
+msgstr "Prethodna stranica"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr "Glavni parametar %1 nije pronađen."
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr "Prioritet"
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr "Prioritet pocinje pri"
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr "Privatnost"
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr "Privilegirani"
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr "Privilegirani status: %1"
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr "Privilegirani korisnici"
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr "Pseudogrupa za internu uporabu"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "Upit"
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr "Kreiranje upita"
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr "Kategorija"
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr "Kategorija %1 nije pronađena"
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr "Ime kategorije"
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr "Kategorija vec postoji"
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr "Kategoriju nije moguće napraviti"
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr "Kategorija se ne može uÄitati"
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr "Kategorija napravljena"
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr "Kategorija nije pronađena"
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr "Kategorije"
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr ""
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr ""
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr "Brza pretraga"
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr "Brzo pravljenje zahtjeva"
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr "RSS"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1"
+msgstr "RT %1"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr "RT %1 za %2"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
+msgstr "RT %1 od <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr "RT administracija"
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr "RT greška"
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "RT samoposluga"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr "RT varijable"
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr "Request Tracker - glavni pogled"
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr ""
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr "Request Tracker za %1"
+
+#: NOT FOUND IN SOURCE
+msgid "RT has proccessed your commands"
+msgstr "RT je obradio vaše naredbe"
+
+#: NOT FOUND IN SOURCE
+msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+msgstr "RT je vlasništvo &copy; 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. Distribuira se pod <a href=\"http://www.gnu.org/copyleft/gpl.html\">Verzijom 2 GNU Opće Javne Licence.</a>"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr ""
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RTFM Error"
+msgstr "RTFM greška"
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr "Pravo ime"
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "PravoIme"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr "Dodana referenca od strane %1"
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr "Obrisana referenca od strane %1"
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr "Dodana referenca za %1"
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr "Referenca za %1 obrisana"
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr "Druge stvari koje se odnose na ovo"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr "Odnosi se na"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Refine search"
+msgstr "Poboljšati pretragu"
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr "Osvježi stranicu svakih %1 minuta."
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr ""
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr "Ukloni AdminCc"
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr "Ukloni CC"
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr "Ukloni prijavitelja"
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr "Odgovori"
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr "Adresa odgovora"
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr "Odgovor prijaviteljima"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr "Odgovor na zahtjeve"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr "OdgovorNaZahtjev"
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr "Prijavitelj"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor email address"
+msgstr "E-mail adresa prijavitelja"
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr "Prijavitelji"
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr "Zahtjevi trebaju biti odrađeni u"
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr "Trazeni parametar '%1' nije naveden"
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr "Vratiti na prijašnje"
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr "Doma"
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr "Riješi"
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr "Riješi zahtjev br. %1 (%2)"
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr "Riješeno"
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Response to requestors"
+msgstr "Odgovori svim prijaviteljima"
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr "Rezultati"
+
+#: NOT FOUND IN SOURCE
+msgid "Results per page"
+msgstr "Rezultati po stranici"
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr "Ponoviti lozinku"
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr "Vratiti"
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr "Ovlast delegirana"
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr "Ovlast dodijeljena"
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr "Ovlast uÄitana"
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr "Ovlasti nisu mogle biti poništene"
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr "Ovlast nije pronađena"
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr "Ovlast nije uÄitana."
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr "Ovlast poništena"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights"
+msgstr "Ovlasti"
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr "Ovlasti nisu mogle biti odobrene za %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights could not be revoked for %1"
+msgstr "Ovlasti nisu mogle biti poništene za %1"
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr "Uloge"
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr "Redova po stranici"
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sat."
+msgstr "Sub."
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr "Spremiti"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr "Spremiti promjene"
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr "Spremiti osobne postavke"
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Save changes"
+msgstr "Spremiti promjene"
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr "Spremljene pretrage"
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr "Natuknica #%1"
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr "Natuknica napravljena"
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr "Polja natuknice"
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr "Natuknica obrisana"
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr "Natuknice"
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Scrips for %1\\n"
+msgstr "Natuknice za %1\\n"
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr "Natuknice koji se primjenjuju na sve kategorije"
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr "Traži"
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr "Traži odobrenja"
+
+#: NOT FOUND IN SOURCE
+msgid "Search for articles"
+msgstr "Traži Älanke"
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr ""
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr ""
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr ""
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr ""
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr "Sigurnost:"
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr "Pogledaj vlastita polja"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr "Pogledaj odlazne e-mail poruke i njohove primatelje"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr "Pogledaj privatne komentare zahtjeva"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr "Pogledaj sažetke zahtjeva"
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr "PogledajDefiniranoPolje"
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr "PogledajGrupu"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr "PogledajKategoriju"
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "Odabir"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Select a Class"
+msgstr "Odaberi klasu"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr "Odaberi vlastito polje"
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr "Odaberi grupu"
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr ""
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr "Odaberi kategoriju za novi zahtjev"
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr "Odaberi korisnika"
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Select class"
+msgstr "Odaberi klasu"
+
+#: NOT FOUND IN SOURCE
+msgid "Select custom field"
+msgstr "Odaberi vlastito polje"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr "Odaberi vlastita polja za sve korisniÄke grupe"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr "Odaberi vlastita polja za sve korisnike"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr "Odaberi vlastitaa polja za zahtjeve u svim kategorijama"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr "Odaberi vlastitaa polja za transakcije u zahtjevima u svim kategorijama"
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr "Odaberi grupu"
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr "Odaberi više vrijednosti"
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr "Odaberi jednu vrijednost"
+
+#: NOT FOUND IN SOURCE
+msgid "Select queue"
+msgstr "Odaberi kategoriju"
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr "Odaberi natuknicu"
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr "Odaberi predložak"
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr "Odaberi do %1 vrijednosti"
+
+#: NOT FOUND IN SOURCE
+msgid "Select user"
+msgstr "Odaberi korisnika"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectMultiple"
+msgstr "VisestrukiIzbor"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectSingle"
+msgstr "PojedinacanIzbor"
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr "Odabrana vlastita polja"
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr "Odaberi objekte"
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Self Service"
+msgstr "Samousluga"
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "Pošalji mail svim promatracima"
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers as a \"comment\""
+msgstr "Pošalji mail svim promatracima kao \"Kommentar\""
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr "Pošalji mail prijaviteljima i CC-ovima"
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr "Pošalji mail prijaviteljima i CC-ovima kao komentar"
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr "Å alje poruku prijaviteljima"
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr "Å alje mail CC-ovima i BCC-ovima s ovog popisa"
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr "Å alje mail CC-ovima"
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr "Å alje mail CC-ovima kao komentar"
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr "Å alje mail administrativnim CC-ovima"
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr "Å alje mail administrativnim CC-ovima kao komentar"
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr "Šalje mail rješavatelju"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sep."
+msgstr "Ruj"
+
+#: NOT FOUND IN SOURCE
+msgid "Seperate multiple URLs with spaces"
+msgstr "Razdvoji razlicite URL-ove razmacima"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr "Pokaži"
+
+#: NOT FOUND IN SOURCE
+msgid "Show Approvals"
+msgstr "Pokaži odobrenja"
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr "Pokaži stupce"
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr "Pokaži rezultate"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Show advanced search options..."
+msgstr "Pokaži opcije za naprednu pretragu..."
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr "Pokaži odobrene zahtjeve"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr "Pokaži osnove"
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr "Pokaži odbijene zahtjeve"
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr "Pokaži detalje"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr "Pokaži zahtjeve na Äekanju"
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr "Pokaži zahtjeve koji cekaju druga odobrenja"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket private commentary"
+msgstr "Pokaži privatne komentare za zahtjev"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket summaries"
+msgstr "Pokaži sazetke zahtjeva"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr "PokažiACL-ove"
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr "PokažiTabPostavki"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr "PokažiOdlaznuPoštu"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr "PokažiSpremljenePretrage"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr "PokažiNatuknice"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr "PokažiPredloške"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr "PokažiZahtjev"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr "PokažiKomentareZahtjeva"
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr "Prijavi se kao prijavitelj zahtjeva ili Cc za zahtjev ili kategoriju"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr "Prijavi se kao AdminCc za zahtjev ili kategoriju"
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr "E-mail potpis"
+
+#: NOT FOUND IN SOURCE
+msgid "Signed in as %1"
+msgstr "Prijavljen kao %1"
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr "PojedinaÄni"
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr "Preskoci izbornik"
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "Malo"
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr "Sortirati"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort Order"
+msgstr "Redoslijed sortiranja"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort key"
+msgstr "Kljuc sortiranja"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort results by"
+msgstr "Sortiraj rezultate prema"
+
+#: NOT FOUND IN SOURCE
+msgid "SortOrder"
+msgstr "RedoslijedSortiranja"
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr "Stadij"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr "ZapoÄeto"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr "PoÄinje"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr "Država"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr "Status"
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr "Promjena statusa"
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr "Status se promijenio iz %1 u %2"
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr "Ukrasti"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr "Ukrasti zahtjeve"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr "UkrastiZahtjev"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Stolen from %1 "
+msgstr "Ukradeno od %1 "
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr "Naslov"
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr "Naslov promijenjen u %1"
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr "Pošalji"
+
+#: NOT FOUND IN SOURCE
+msgid "Submit Query"
+msgstr "Traži"
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Succeeded"
+msgstr "Uspješno"
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Summary"
+msgstr "Sazetak"
+
+#: NOT FOUND IN SOURCE
+msgid "Summary matches"
+msgstr "Sažetak sadrži"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sun."
+msgstr "Ned"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr "Superkorisnik"
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "System"
+msgstr "Sistem"
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr "Postavke sistema"
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr "Greška sistema"
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr ""
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr "Sistemski alati"
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr "Greška sistema. Ovlast nije dodijeljena."
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr "Greška sistema. Ovlast nije odobrena."
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr "Sistemske grupe"
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr "Sistemska uloga grupe za internu uporabu"
+
+#: NOT FOUND IN SOURCE
+msgid "TEST_STRING"
+msgstr "TEST_STRING"
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr "Preuzmi"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr "Preuzmi zahtjeve"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr "PreuzmiZahtjev"
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr "Preuzeti"
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr "Predložak"
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr "Predložak #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Template deleted"
+msgstr "Predložak obrisan"
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found"
+msgstr "Predložak nije pronađen"
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr "Predložak analiziran"
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr "Predlošci"
+
+#: NOT FOUND IN SOURCE
+msgid "Templates for %1\\n"
+msgstr "Predlošci za %1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Text"
+msgstr "Tekst"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr "To je trenutna vrijednost"
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr "To nije valjana vrijednost za ovo vlastito polje"
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr "To je ista vrijednost"
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr "Taj glavni parametar vec ima tu ovlast"
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr "Taj glavni parametar je vec %1 za ovu kategoriju"
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr "Taj glavni parametar je vec %1 za ovaj zahtjev"
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr "Taj glavni parametar nije %1 za ovu kategoriju"
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr "Taj glavni parametar nije %1 za ovaj zahtjev"
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr "Ta kategorija ne postoji"
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr "Taj zahtjev ima neriješene ovisnosti"
+
+#: NOT FOUND IN SOURCE
+msgid "That user already has that right"
+msgstr "Taj korisnik vec ima tu ovlast"
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr "Taj korisnik vec posjeduje taj zahtjev"
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr "Taj korisnik ne postoji"
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr "Taj korisnik je vec privilegiran"
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr "Taj korisnik je vec neprivilegiran"
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr "Taj korisnik je sada privilegiran"
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr "Taj korisnik je sada neprivilegiran"
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr "Ovom korisniku mozda ne pripadaju zahtjevi u toj kategoriji"
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr "To nije numeriÄki Id"
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr "Osnove"
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr "CC zahtjeva"
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr "Administrativni CC zahtjeva"
+
+#: NOT FOUND IN SOURCE
+msgid "The comment has been recorded"
+msgstr "Komentar je zabilježen"
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr "Sljedeca naredba će pronaci sve aktivne zahtjeve u kategoriji 'Opcenito' i postaviti njihov prioritet na 99 ako u zadnja 4 sata nije rađeno na njima:"
+
+#: NOT FOUND IN SOURCE
+msgid "The following commands were not proccessed:\\n\\n"
+msgstr "Sljedeće naredbe nisu odrađene:\\n\\n"
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr "Nova vrijednost je postavljena."
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr "Rješavatelj zahtjeva"
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr "Prijavitelj zahtjeva"
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr "Ovi kmentari nisu opcenito vidljivi korisnicima"
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr "Ovo vlastito polje se ne primjenjuje za taj objekt"
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr "Ova karakteristika je dostupna samo administratorima sistema"
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr "Ova poruka će se poslati..."
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr "Ovaj alat dopušta korisniku rad s proizvoljnim perl modulima iz RT-a."
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr "Ova transakcija vjerojatno nema sadržaja"
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr "%1 Zahtjevi najvišeg prioriteta ovog korisnika"
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Thu."
+msgstr "Cet"
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr "Zahtjev br. %1 sve ažurirati: %2"
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr "Zahtjev br. %1: %2"
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr "Zahtjev %1"
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr "Zahtjev %1 napravljen u kategoriji '%2'"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket %1 loaded\\n"
+msgstr "Zahtjev %1 uvitan\\n"
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr "Zahtjev %1: %2"
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr "Vlastita polja zahtjeva"
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr "Tijek zahtjeva Br. %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Id"
+msgstr "Broj zahtjeva"
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr "Zahtjev riješen"
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr "Transakcije zahtjeva"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket attachment"
+msgstr "Prilog zahtjevu"
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr "Sadzaj zahtjeva"
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr "Tip sadržaja zahtjeva"
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr "Zahtjev nije mogao biti napravljen zbog interne greške"
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket created"
+msgstr "Zahtjev napravljen"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket deleted"
+msgstr "Zahtjev obrisan"
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket id not found"
+msgstr "Broj zahtjeva nije pronađen"
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr "Metapodaci zahtjeva"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket not found"
+msgstr "Zahtjev nije pronađen"
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr "Status zahtjeva promijenjen"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket watchers"
+msgstr "PromatraÄi zahtjeva"
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr "TicketSQL pretraživaÄki modul"
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr "Zahtjevi"
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Zahtjevi %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr "Zahtjevi %2 od %2"
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets from %1"
+msgstr "Zahtjevi od %1"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr "Zahtjevi koji ovise o ovom odobrenju:"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr "Procijenjeno vrijeme"
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr "Preostalo vrijeme"
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr "Vrijeme rada"
+
+#: NOT FOUND IN SOURCE
+msgid "Time left"
+msgstr "Preostalo vrijeme"
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr "Vrijeme za prikaz"
+
+#: NOT FOUND IN SOURCE
+msgid "Time worked"
+msgstr "Vrijeme rada"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr "VrijemeRada"
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:"
+msgstr "Za kreiranje 'diffa' ove predaje:"
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:\\n"
+msgstr "Za kreiranje 'diffa' ove predaje:\\n"
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr "Za pitanja o podrsci, edukaciji, razvoju kao i licencama, molimo kontaktirajte %1"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr "Uneseno"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr "Alati"
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr ""
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr "Transakcija"
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr "Transakcija %1 proÄišćena"
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr "Transakcija napravljena"
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr "Transakcija vlastita polja"
+
+#: NOT FOUND IN SOURCE
+msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
+msgstr "Transakcija->Napraviti nije izvršeno jer nije naveden broj zahtjeva"
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr "Transakcija->Napraviti nije izvršeno jer nisu navedeni tip i id objekta"
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr "Transakcije su nepromjenjive"
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Tue."
+msgstr "Uto"
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr "Tip"
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Unable to load article"
+msgstr "ÄŒlanak nije moguće uÄitati"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr "Nije implementirano"
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr "Unix prijava"
+
+#: NOT FOUND IN SOURCE
+msgid "UnixUsername"
+msgstr "UnixKorisniÄkoIme"
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr "Nepoznato kodiranje sadržaja %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Unknown field: $key"
+msgstr "Nepoznato polje: $key"
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr "NeograniÄeno"
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr "Nepoznata pretraga"
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr "Neprivilegirani"
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr "Neodabrana vlastita polja"
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr "Neodabrani objekti"
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr "Vraćeno"
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr "Ažuriraj"
+
+#: NOT FOUND IN SOURCE
+msgid "Update All"
+msgstr "Ažuriraj sve"
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Update ID"
+msgstr "ID ažuriranja"
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr "Ažuriraj zahtjev"
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr "Tip ažuriranja"
+
+#: NOT FOUND IN SOURCE
+msgid "Update all these tickets at once"
+msgstr "Ažuriraj sve ove zahtjeve ođednom"
+
+#: NOT FOUND IN SOURCE
+msgid "Update email"
+msgstr "Ažuriraj email"
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr "Ažuriraj više zahtjeva"
+
+#: NOT FOUND IN SOURCE
+msgid "Update name"
+msgstr "Ažuriraj ime"
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr "Ažuriranje nije zabilježeno."
+
+#: NOT FOUND IN SOURCE
+msgid "Update selected tickets"
+msgstr "Ažuriraj odabrane zahtjeve"
+
+#: NOT FOUND IN SOURCE
+msgid "Update signature"
+msgstr "Ažuriraj potpis"
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr "Ažuriraj zahtjev"
+
+#: NOT FOUND IN SOURCE
+msgid "Update ticket # %1"
+msgstr "Ažuriraj zahtjev br. %1"
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr "Ažuriraj zahtjev br. %1"
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr "Ažuriraj zahtjev br. %1 (%2)"
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr "Tip ažuriranja nije bio ni korespondencija ni komentar."
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr "Ažurirano"
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr "UÄitaj s racunala"
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr "UÄitaj nekoliko datoteka s racunala"
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr "UÄitaj nekoliko slika s racunala"
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr "UÄitaj jednu datoteku s racunala"
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr "UÄitaj jednu sliku s racunala"
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr "UÄitaj do %1 Datoteka s racunala"
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr "UÄitaj do %1 slika s racunala"
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr "UÄitaj promjene"
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Use the dropdown menus to select which transactions you want to extract into a new RTFM article"
+msgstr "Koristi padajuće izbornike za odabir transakcija koje zeliÅ¡ ekstrahirati u novi RTFM Älanak"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr "Korisnik '%1' nije pronađen."
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr "Definirano od strane korisnika"
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr "Uvjeti i radnje definirani od korisnika"
+
+#: NOT FOUND IN SOURCE
+msgid "User ID"
+msgstr "KorisniÄki ID"
+
+#: NOT FOUND IN SOURCE
+msgid "User Id"
+msgstr "KorisniÄki ID"
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr "KorisniÄke ovlasti"
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr "Korisnik upitan o nepoznatom tipu updatea za vlastito polje %1 za %2 objekt #%3"
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr "Korisnika nije bilo moguće napraviti: %1"
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr "Korisnik napravljen"
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr "Grupe definirane od korisnika"
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr "korisnik uÄitan"
+
+#: NOT FOUND IN SOURCE
+msgid "User view"
+msgstr "korisniÄki pregled"
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr "Grupe definirane od korisnika"
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr "KorisniÄko ime"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr "Korisnici"
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr "Korisnici koji se podudaraju s kriterijima pretrage"
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr "Valjani upit"
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ValueOfQueue"
+msgstr "VrijednostKategorije"
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr "Vrijednosti"
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr "Promatraj"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr "PromatrajKaoAdminCc"
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr "PromatraÄi"
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "WebEncoding"
+msgstr "WebKodiranje"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Wed."
+msgstr "Sri"
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr ""
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+msgstr "Kada svi odobre zahtjev, dodaj korespondenciju originalnom zahtjevu"
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+msgstr "Kada jedan odobri zahtjev, dodaj korespondenciju originalnom zahtjevu"
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr "Kad je zahtjev napravljen"
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr "Kad je zahtjev napravljen, obavijesti rješavatelja i adminCc o predmetu koji ceka njihovo odobrenje"
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr "Kad se bilo Å¡to dogodi"
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr "Uvijek kad se riješi zahtjev"
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr "Uvijek kad se promijeni rješavatelj zahtjeva"
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr "Uvijek kad se promijeni prioritet zahtjeva"
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr "Uvijek kad se promijeni kategorija zahtjeva"
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr "Uvijek kad se promijeni status zahtjeva"
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr "Uvijek kad se pojavi uvjet definiran od korisnika"
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr "Uvijek kad uđu komentari"
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr "Uvijek kad uđe korespondencija"
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Which are referred to by "
+msgstr "Na koje se odnosi "
+
+#: NOT FOUND IN SOURCE
+msgid "Which refer to"
+msgstr "Koji se odnose na"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "Rad"
+
+#: NOT FOUND IN SOURCE
+msgid "Work offline"
+msgstr "Radi offline"
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "SluzbeniTelefon"
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr "Vrijeme rada"
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Da"
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr "Vec posjedujete ovaj zahtjev"
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr "Niste ovlasteni korisnik"
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr "Možete samo dodjeljivati zahtjeve koje posjedujete ili koji nemaju rješavatelja"
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr "Našli ste %1 zahtjeva u kategoriji %2"
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr "Odjavljeni ste iz RT-a."
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr "Nemate dopuštenje za pravljenje zahtjeva u toj kategoriji."
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr "U ovoj kategoriji ne smijete praviti zahtjeve."
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "Možete se ponovno prijaviti"
+
+#: NOT FOUND IN SOURCE
+msgid "Your %1 requests"
+msgstr "Mojih %1 zahtjeva"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved by %1. Other approvals may still be pending."
+msgstr "VaÅ¡ zahtjev je odobren od %1. Druga dopuÅ¡tenja bi mogla joÅ¡ biti na Äekanju."
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved."
+msgstr "Vaš zahtjev je odobren."
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected."
+msgstr "Vaš zahtjev je odbijen"
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr "VaÅ¡e korisniÄko ime ili lozinka je neispravno"
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr "Poštanski broj"
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Nakon"
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr "Dopusti pravljenje spremljenih pretraga"
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr "Dopusti uÄitavanje spremljenih pretraga"
+
+#: NOT FOUND IN SOURCE
+msgid "and is not"
+msgstr "i nije"
+
+#: NOT FOUND IN SOURCE
+msgid "and not"
+msgstr "a ne"
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr "kao odobreno za %1"
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Prije"
+
+#: NOT FOUND IN SOURCE
+msgid "belongs to"
+msgstr "pripada"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr "zatvoreni"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "contains"
+msgstr "sadrži"
+
+#: NOT FOUND IN SOURCE
+msgid "content"
+msgstr "sadržaj"
+
+#: NOT FOUND IN SOURCE
+msgid "content-type"
+msgstr "vrsta sadržaja"
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence (probably) not sent"
+msgstr "korespondencija (vjerojatno) nije poslana"
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence sent"
+msgstr "korespondencija poslana"
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+# this is genitive, not nominative! -joy
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr "dana"
+
+#: NOT FOUND IN SOURCE
+msgid "delete"
+msgstr "brisati"
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr "obrisano"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "does not belong to"
+msgstr "ne pripada"
+
+#: NOT FOUND IN SOURCE
+msgid "does not match"
+msgstr "ne podudara se s"
+
+#: NOT FOUND IN SOURCE
+msgid "doesn't contain"
+msgstr "ne sadrži"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr "jednako je"
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr "greška: ne može se pomicati dolje"
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr "greška: ne može se pomicati ulijevo"
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr "greška: ne može se pomicati gore"
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr "greška: nema nicega za obrisati"
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr "greška: nema nicega za pomicati"
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr "greška: nema nicega za prebaciti"
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "filename"
+msgstr "ime datoteke"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr "veće od"
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr "grupa '%1'"
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr "sati"
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr "id"
+
+#: NOT FOUND IN SOURCE
+msgid "in class %1"
+msgstr "u klasi %1"
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr "je"
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr "nije"
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr "manje od"
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr "podudara se s"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr "min"
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "minute"
+
+#: NOT FOUND IN SOURCE
+msgid "modifications\\n\\n"
+msgstr "promjene\\n\\n"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr "mjeseci"
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr "novo"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr "nema imena"
+
+#: NOT FOUND IN SOURCE
+msgid "no value"
+msgstr "nema vrijednosti"
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr "nijedan"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr "nije jednako"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Pri"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr "otvoreni"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr "osobna grupa '%1' za korisnika '%2'"
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr "kategorija %1 %2"
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr "odbijeno"
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr "riješeno"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr "sek"
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr "Pokaži tab postavki"
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "spreadsheet"
+msgstr "tabliÄno raÄunanje"
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr "zaustavljeno"
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr "sistem %1"
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr "sistemska grupa '%1'"
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr "komponenta zvanja nije navela zašto"
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr "zahtjev br. %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "till"
+msgstr "do"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr "neopisana grupa %1"
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr "korisnik %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr "tjedana"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "godine"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/hu.po b/rt/lib/RT/I18N/hu.po
index 709736c..ef6b6a8 100644
--- a/rt/lib/RT/I18N/hu.po
+++ b/rt/lib/RT/I18N/hu.po
@@ -1,510 +1,638 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: 2002-06-22 06:06+0200\n"
-"PO-Revision-Date: 2005-10-03 13:48-0400\n"
-"Last-Translator: Attila K. Mergl <mergl@astron.hu>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-09-21 16:02+0000\n"
+"Last-Translator: wolfee77 <hack.the.planet@freemail.hu>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (nincs publikus kulcs!)"
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (nem megbizhato!)"
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
-
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
-msgstr ""
+msgstr "%1 #%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %7. %2 %3 %4:%5:%6"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "[%1] mezõbe '%2' érték felvétele"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "%1 %2"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 változtatása: '%2' --> '%3'"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 törölve"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 a %3 sablonnal"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr ""
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (változatlan)"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - %2-nek átadandó argumentum"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Státuszfrissítés kiíratása a STDOUT-ra"
-#: bin/rt-crontool:253
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
msgstr ""
-#: bin/rt-crontool:256
-#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
-# msgstr "%1 - Schreibe Statusupdates nach STDOUT"
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Adja meg a használandó akciómodult!"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Adja meg a használandó kondiciómodult!"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Adja meg a használandó keres?modult!"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
msgstr ""
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "ScripAction %1 betöltve"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 értéke hozzáadva %2 höz"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 már létezik, de nem tartalmazza az RT tábláit vagy metaadatait. Későbbiekben az 'Adatbázis Inicializálása' lépéssel beilleszthet táblákat és metaadatokat a létező adatbázisba. Ha ezt elfogadja, kattintson az 'Alapbeállitások' alá az RT testreszabásának folytatásához."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 nem találhato az adatbázisban, pedig helyi objektumnak látszik"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 (%2)"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 változtatása: '%2' --> '%3'"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr ""
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 nem állítható %2 re."
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr ""
-"%1 nem tudta a státuszt lezártra állítani. Az RT adatbázisa talán "
-"inkonzisztens."
+msgstr "%1 nem tudta a státuszt lezártra állítani. Az RT adatbázisa talán inkonzisztens."
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 létrehozva"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 törölve"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "A %1 nekem kiosztott, legsürgõsebb probléma..."
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr ""
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "Ennek a sornak %1 már nem %2-je."
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr ""
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 perc"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "%1 legújabb gazdátlan probléma"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr ""
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 jogok"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr ""
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr ""
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
-msgstr ""
+msgstr "%1 elmentett keresései"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: Nincs melléklet megadva!"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1b"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' nem lehet státusz érték"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Törléshez kiválasztandó!)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr ""
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Szóközökkel elválasztva adható meg a problémák sorszáma vagy URL-je.)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Ha üresen marad: %1)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Nincs egyéni mezõ)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Nincsenek tagok)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Nincs Scrip)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Nincs sablon)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(nincs név)"
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr ""
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr ""
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(üres)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(Nincs név a listában)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(nincs adat)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(nincs adat)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "<br>(Csak egy probléma adható meg!)"
-#: html/Elements/RT__Ticket/ColumnMap:149
-msgid "(pending approval)"
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
msgstr ""
-#: html/Elements/RT__Ticket/ColumnMap:152
-msgid "(pending other Collection)"
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
msgstr ""
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(szükséges)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(névtelen)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
msgstr ""
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr ""
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr ""
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
msgstr ""
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr ""
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr ""
+msgstr "<input type=\"submit\" class=\"button\" value=\"Új probléma:\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Új probléma\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Ãœres sablon"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE nem található"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE-k csak létrehozhatók és törölhetõk."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "ÉS"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Magamról"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Hozzáférés ellenõrzése"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Akció"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "%1 akció nem található"
-#: bin/rt-crontool:171
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Akció végrehajtva.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr ""
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Akció elõkészítve..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Hozzáad"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Adminisztratív tájékotatást kapó hozzáadása"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Tájékotatást kapó hozzáadása"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Mezõk hozzáadása"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Bõvített keresési feltételek"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "További fájlok csatolása"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Beküldõ hozáadása"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Értékek hozzáadása"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Minden sorra vonatkozó Scrip hozzáadása"
@@ -512,89 +640,105 @@ msgstr "Minden sorra vonatkozó Scrip hozzáadása"
msgid "Add additional criteria"
msgstr "További feltételek hozzáadása"
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr ""
-
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "A kiválasztott problémákhoz válasz vagy kiegészítés hozzáadása"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Tagfelvétel"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Új résztvevõk hozzáadása"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
msgstr ""
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Egyéni mezõk lehetséges értékeinek létrehozása, módosítása, törlése"
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Hozzendelt egy vezetõt mint %1 ehhez a sorhoz"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Hozzárendelt egy vezetõt mint %1 ehhez a problémához"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Utca, házszám"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Postafiók"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Adminisztratív tájékoztatást kap"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Adminisztratív megjegyzés"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr ""
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Válasszon sort!"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Konfiguráció / Ãltalános beállítások"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "Adminisztratív tájékoztatást kap"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr ""
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr ""
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr ""
@@ -602,203 +746,262 @@ msgstr ""
msgid "AdminQueue"
msgstr ""
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr ""
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Adminisztratív tájékoztatást kap"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Kézi lekérdezés"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "után"
-
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr ""
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr ""
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Minden sor"
-#: html/Search/Elements/EditQuery:56
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Már titkosítva"
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "ÉS/VAGY"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr ""
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Mentés"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "A változtatás mentése"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Lezárás"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Engedélyezés #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Engedélyezés #%1: A megjegyzés rendszerhiba miatt nem rögzíthetõ"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Engedélyezés #%1: Megjegyzés rögzítve"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Lezárás rendben"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Lezárás visszautasítva"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Lezár"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Az engedélyezõ megjegyzése: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "ápr."
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "növekvõ"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Egyéni mezõ hozzárendelése vagy törlése"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr ""
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Csatol"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Fájl csatolása"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Csatolt fájl"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Csatolmány"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "A csatolt '%1' nem betölthetõ"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Csatolt fájl létrehozva"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Csatolt fájl neve"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Csatolt fájlok"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr ""
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Aug"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "aug."
-#: etc/initialdata:221
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "Agusztus"
+
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Automatikus válasz"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Automatikus válasz a beküldõnek"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr ""
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Vissza"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Alapadatok módosítása"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "BCC"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
-msgstr ""
-"Ha valamit módosított ne felejtsen el ide kattintani, hogy megtörténjen a"
+msgstr "Ha valamit módosított ne felejtsen el ide kattintani, hogy megtörténjen a"
-# ## wieder - Duzen???
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "elõtt"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
+msgstr "Best Practical Solutions, LLC vállalati logo"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Ãœres"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Félkövér"
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Könyvjelző"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
msgstr ""
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Tömör fejléc"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
-msgstr ""
+msgstr "Tömeges frissítis"
#: NOT FOUND IN SOURCE
msgid "Bulk ticket update"
msgstr "Tömeges problémafrissítés"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Rendszerfelhasználó nem módosítható"
@@ -806,420 +1009,661 @@ msgstr "Rendszerfelhasználó nem módosítható"
msgid "Can this principal see this queue"
msgstr "Ez a vezetõ nem láthatja ezt a sort"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Egyéni mehzõ név nélkül nem hozzáadható"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr ""
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr ""
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "A problémát nem lehet önmagához kapcsolni!"
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr ""
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Ezt a lekérdezést nem lehet lementeni"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Nem adhat meg egyszerre bázist és célt"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "A felhasználó nem hozható létre: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr ""
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Tájékoztatást kap"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Jelszó-változtatás"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr ""
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Törléshez bejelölni"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Jog megvonásához megjelölni"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Leszármazottak"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
msgstr ""
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Város"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr ""
-#: html/Helpers/CalPopup.html:51
-msgid "Close window"
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
msgstr ""
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "Ablak bezárása"
+
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Lezárva"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Lezárt problémák"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
-msgstr ""
+msgstr "Cobobox: válasszon ki vagy adjon meg akár több értéket"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
-msgstr ""
+msgstr "Cobobox: válasszon ki vagy adjon meg egy értéket"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
-msgstr ""
+msgstr "Cobobox: válasszon ki vagy adjon maximum %1 db értéket"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Kiegészít"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Kiegészitõcím"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr ""
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Kiegészítés (a beküldõ nem kapja meg!))"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Kiegészítés (a beküldõ nem kapja meg!)"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Kiegészítés ehhez a felhasználóhoz"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Kiegészítés hozzáfûzése"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr ""
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Feltétel"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr ""
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "A feltétel nem található"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Konfiguráció"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Igazolás"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Tartalom"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr ""
-#: html/Search/Elements/EditSearches:65
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Másol"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Válasz"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Válasz hozzáfûzése"
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
-msgstr "Az egyéni mezõt nem sikerült hozzáadni."
+msgstr "Az egyéni mezõt nem sikerült hozzáadni. "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
-msgstr "Az egyéni mezõértéket nem sikerült hozzáadni a #%1 problémához"
+msgstr "Az egyéni mezõértéket nem sikerült hozzáadni a #%1 problémához "
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "Nem sikerült a tulajdonost megváltoztatni! "
-#: html/Admin/CustomFields/Modify.html:161
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Nem sikerült létrehozni az egyéni mezõt"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "Nem sikerült létrehozni a(z) %1 egyéni mezõt"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Nem sikerült létrehozni a csoportot"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "A sablom nem jött létre: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Nem jött létre a probléma. A sor nincs meghatározva"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "A felhasználó nem jött létre"
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "A felhasználót nem sikerült megtalálni vagy létrehozni"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "A vezetõ nem található"
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "A(z) %1 egyéni mezõ nem betölthetõ"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "A csoport nem betölthetõ"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:197
-msgid "Could not load search attribute"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "A vezetõ nem lehet %1-e a sornak"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "A vezetõ nem lehet %1-e a problémának"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "A vezetõt nem lehet mint a sor %1-ét eltávolítani"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "A felhasználó adatait nem sikerült elmenteni"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "A tagot nem lehet a csoporthoz adni"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "A tanzakció nem létrehozható: %1"
-#: lib/RT/Record.pm:953
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "A sor nem található"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "A csoport/felhasználó nem található"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Az érték nem található"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr ""
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "A(z) %1 egyéni mezõ nem betölthetõ"
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr ""
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "%1 csoport nem betölthetõ"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "%1 objektum nem betölthetõ"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "A sor nem betölthetõ"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "%1 sor nem betölthetõ"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr ""
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "A(z) '%1' nem betölthetõ"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
msgstr ""
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Privát kulcs feloldása sikertelen."
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Ország"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Felvesz"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Probléma megadása"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Hozzon létre egy új egyéni mezõt!"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Hozzon létre egy egyéni mezõt a(z) %1 sorhoz"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
-msgstr "Hozzon létre új csoportot!"
+msgstr "Új csoport létrehozása"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Hozzon létre egy új saját csoportot!"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Új probléma felvétele"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Hozzon létre egy új felhasználót!"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Hozzon létre egy sort!"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Hozzon létre egy scrip-et a(z) %1 sorhoz!"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Hozzon létre egy sablont!"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Új probléma"
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Hozzon létre egy új problémát ennek a sablonnak scripjeire alapozva"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Személyes dashboard létrehozása"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Rendszer dashboard létrehozása"
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Létrehozás"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Hozzon létre problémákat ebben a sorban!"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Egyéni mezõk létrehozása, módosítása, törlése"
@@ -1227,108 +1671,147 @@ msgstr "Egyéni mezõk létrehozása, módosítása, törlése"
msgid "Create, delete and modify queues"
msgstr "Sor létrehozása, módosítása, törlése"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr ""
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Felhasználók létrehozása, módosítása, törlése"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr ""
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Felvéve"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr ""
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr ""
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Létrehozó"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Jelenlegi kapcsolatok"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Jelenlegi Scripek"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Jelenlegi tagok"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Jelenlegi jogok"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr ""
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Jelenlegi résztvevõk"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Egyéni mezõk"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "%1 egyéni mezõi"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Az akcióhoz rendelt egyéni lezáró kód"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Az akcióhoz rendelt egyéni elõkészítõ kód"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Egyéni feltétel"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Egyéni mezõ %1 %2 %3"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "[%1] egyéni mezõnek van értéke."
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "[%1] egyéni mezõnek nincs értéke."
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "[%1] egyéni mezõ nem található"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
@@ -1338,173 +1821,347 @@ msgstr ""
msgid "Custom field not found"
msgstr "Egyéni mezõ nem található"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "A(z) %2 egyéni mezõ %1értéke nem található"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Az egyéni mezõ értéke nem található"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Az egyéni mezõ értéke nem található"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Az egyéni mezõ értéke törölve"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr ""
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr ""
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Idõpontok"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "dec."
-#: etc/initialdata:222
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr ""
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Alapértlemezett sor"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Alapértelmezett beküldõ"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr ""
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr ""
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr ""
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr ""
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Jogok továbbadása"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr ""
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr ""
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Jogok továbbadása"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Töröl"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Sablon törlése"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr ""
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Kiválasztott Scrip törlése"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Problémák törlése"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr ""
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:394
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr ""
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr ""
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Elutasítva"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "Ettõl függnek"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr ""
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "A következõktõl függ"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "csökkenõ"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "A probléma szabatos leírása"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Leírás"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Mutat"
@@ -1512,31 +2169,31 @@ msgstr "Mutat"
msgid "Display Access Control List"
msgstr ""
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Mezõk kiválasztása"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Láthatóak legyenek az ehhez a sorhoz tartozó scrip sablonok"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Láthatóak legyen a sorhoz tartozó scripek"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Megjelenítési mód"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr ""
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-msgstr ""
+msgstr "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr ""
@@ -1544,472 +2201,853 @@ msgstr ""
msgid "Do the Search"
msgstr "Keresés indítása"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Ne frissítse ezt az oldalt."
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Letölt"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr ""
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Határidõ"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
-msgid "Edit"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
msgstr ""
-#: html/Search/Bulk.html:149
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "ERROR: %1"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr "Szerkesztés"
+
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Módosítsa %1 egyéni mezõit!"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr ""
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr ""
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Kapcsolatok módosítása"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Lekérdezés szerkesztése kézzel"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
-msgstr ""
+msgstr "Keresés szerkesztése"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Módosítsa a(z) %1 sor sablonjait!"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Módosítsa a rendszersablonokat!"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr ""
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Szerkeszthető szöveg"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
-msgstr ""
+msgstr "'%1' egyéni mező szerkesztése"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Módosítsa a(z) %1 csoport tagságát!"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr ""
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Meg kell adni a bázist vagy a célt"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "E-mail cím"
-#: lib/RT/User_Overlay.pm:235
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Email konfigurálása"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "E-Mail-cím már foglalt"
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Engedélyezve"
+
# ## muss das überhaupt übersetzt werden???
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Aktivált (kiválasztása letiltja ezt az egyéni mezõt)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Aktivált (Kiválasztása letiltja ezt a csoportot)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Aktivált (Kiválasztása letiltja ezt a sort)"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Aktív sorok"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Status %1 aktiviert"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Titkosítás"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Titkosítás kikapcsolva"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Titkosítás bekapcsolva"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Adjon meg több értéket!"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Objektum vagy URI. Szóközzel elválasztva több is megadható"
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Adjon meg egy értéket!"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Sor vagy URI. Szóközzel elválasztva több is megadható"
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Probléma szám vagy URI. Szóközzel elválasztva több is megadható"
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Adjon meg egy értéket!"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Hiba"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Hiba a sor paraméterezésében ->AddWatcher"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Hiba a sor paraméterezésében->DelWatcher"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Hiba a probléma paraméterezésében -> AddWatcher"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Hiba a probléma paraméterezésében->DelWatcher"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Becsült"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Mindenki"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Például:"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Lejárt"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Kiegészítõ információk"
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
msgstr ""
-#: lib/RT/User_Overlay.pm:376
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr ""
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr ""
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "A %1 Modul nem betölthetõ. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr ""
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Feb"
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "feb."
-#: html/Elements/SelectAttachmentField:50
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Február"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "fájlnév"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr ""
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Végsõ prioritás"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr ""
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Találjon olyan csoportot, amelyiknél a"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Találj olyan embereket, akiknél a"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Problémák keresése"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Elsõ"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr ""
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "A változtatás kikényszerítése"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr ""
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Üzenet továbbküldése"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Üzenet továbbküldése és visszalépés"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Üzenet továbbküldése"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Üzenet továbbküldése harmadik személy(ek)nek"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "%quant(%1) problémát találtam"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr ""
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "P"
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Teljes fejléc"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:684
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "%1 felhasználónak adva"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Ãltalános"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Globális egyéni mezõ"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Egyéni mezõk általános beállításai"
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr ""
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Ãltalános probléma: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "GnuPG hiba. Lépjen kapcsolatba az Adminisztrátorral."
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "GnuPG integráció letiltva."
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "%1 GnuPG privát kulcsa(i)"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "%1 GnuPG publikuskulcsa(i)"
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Hajrá!"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Hajrá!"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Mutassa a problémát"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Csoport"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Csoportjogok"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Csoportnak már vannak tagjai"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Csoportnak már vannak tagjai: %1"
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "A csoportot nem lehetett létrehozni: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Csoport létrehozva"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Csoport letiltva"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Csoport engedélyezve"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "A csoportnak már van ilyen tagja"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Csoport nem található"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Csoport jogosultsága(i)"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Csoportok"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Csoportok nem lehetnek a saját tagjaik tagjai!"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "A keresési feltételeknek megfeleõ csoportok"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Csoport(ok) melynek a felhasználó tagja (pipálja ki melyeket megszüntetni kiván)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Csoport(ok) melynek a felhasználó nem tagja (pipálja ki melyekhez kivánja hozzáadni)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr ""
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr "Továbbküldött üzenet fejléce"
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Hallo!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Hallo %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Részletes történet"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "A %1 csoport története"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "%1 felhasználó története"
-#: html/Elements/Tabs:65
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Kezdõlap"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Óra"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
-msgstr ""
+msgstr "Órák"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr ""
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
-msgstr ""
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Sorszám"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Személy"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr ""
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Ha a beküldõ ismeretlen, ezzel legyen az új probléma beküldõje"
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Ha nincs megadva sor, ebbe a sorba kerüljenek az új problémák"
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr ""
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
+msgstr "Ha valamit módosított, ne felejtsen el ide kattintani, hogy megtörténjen a"
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
msgstr ""
-"Ha valamit módosított, ne felejtsen el ide kattintani, hogy megtörténjen a"
-#: lib/RT/Record.pm:947
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Érvénytelen érték %1-nek"
@@ -2017,630 +3055,877 @@ msgstr "Érvénytelen érték %1-nek"
msgid "Image"
msgstr "Kép"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Nem változtatható mezõ"
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Láthatóak legyenek a letiltott sorok is."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Láthatóak legyenek a letiltott sorok is."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Keresés a letiltott felhasználók között is."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr ""
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
msgstr ""
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
msgstr ""
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Kezdõ prioritás"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr ""
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Input hiba"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Belsõ hiba"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Belsõ hiba: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Érvénytelen csoportfajta"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Érvénytelen jog"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Érvénytelen dátum"
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Érvénytelen sor"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Érvénytelen jog"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Érvénytelen érték %1-nek"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Érvénytelen érték az egyéni mezõhöz"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Érvénytelen státuszérték"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr ""
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr ""
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr ""
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr ""
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "jan."
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr ""
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "júl."
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Minden módosítása"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "jún."
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Nyelv"
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Nagy"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Utolsó"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Utolsó kapcsolat"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Utoljára foglalkoztak vele"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Utoljára aktualizálva"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "Utoljára aktualizálta"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr ""
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Felhasználónak RT-hozzáférés engedélyezése"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Felhasználónak több jog engedélyezése"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr ""
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Kapcsolat már létezik"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Kapcsolat nem hozható létre"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Kapcsolat létrehozva (%1)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Kapcsolat törölve (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Kapcsolat nem található"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "%1. számú probléma kapcsolatainak módosítása"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr ""
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Kapcsolatok módosítása"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr ""
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Lekérdezés betöltése"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr ""
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr ""
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Cím"
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Cím"
#: NOT FOUND IN SOURCE
msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
-msgstr ""
-"Log-könyvtár %1 nem található, vagy nincs írási joga.\\n Az RT tud elindulni."
+msgstr "Log-könyvtár %1 nem található, vagy nincs írási joga.\\n Az RT tud elindulni."
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "%1-ként van bejelentkezve"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Bejelentkezés"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Kijelentkezés"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr ""
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Legyen a tulajdonos"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Státusz változtatása"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Határidõ változtatása"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Megoldási dátum változtatása"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Hozzáfogás dátumának változtatása"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Kiosztás dátumának változtatása"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Bejelentés dátumának változtatása"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Prioritás állítása"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Sor változtatása"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Tárgy változtatása"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr ""
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr ""
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Csoportok és tagjaik kezelése"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Minden sorra vonatkozó tulajdonságok és beállítások kezelése"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Sorok és a sorokra jellemzõ beállítások kezelése"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Felhasználók és jelszavaik kezelése"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "már."
-#: lib/RT/Date.pm:445
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "máj."
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Tag hozzáadva"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Tag törölve"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Tag hozzáadva"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Tag hozzáadva: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Tag törölve"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Tag nincs törölve"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Tagja a"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Tagok"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "%1 tag hozzáadva"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "%1-beli tagság törölve"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Tagságok"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "%1 felhasználó tagságai"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Beolvasztás sikeres"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Beolvasztás sikertelen Konnte EffectiveId nicht setztn"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Beolvasztás sikertelen Konnte EffectiveId nicht setztn"
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Beolvasztani ebbe"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Beolvasztva %1-be"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Üzenet szövege"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2451
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "A sor nem hozható létre"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Üzenet rögzítve"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr ""
-#: html/Elements/SelectTimeUnits:47
-msgid "Minutes"
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
msgstr ""
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
msgstr ""
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr ""
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Mobil"
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Változtassa meg a %1-re vonatkozó egyéni mezõket!"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Csoportjogok módosítása"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Tagok módosítása"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Jogok módosítása"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr ""
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Felhasználói jogok módosítása"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Változtassa meg a(z) %1 sor egyéni mezõjét!"
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr ""
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr ""
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "%1. számú probléma idõadatainak módosítása"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "%1. számú probléma idõadatainak módosítása"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Változtassa meg az általános csoportjogokat!"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Változtassa meg az általános csoportjogokat!"
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Változtassa meg az általános felhasználói jogokat!"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Változtassa meg az általános felhasználói jogokat!"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Változztassa meg a(z) %1 sor csoportjogait!"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Módosítsa a(z) %1 csoport jogait"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Változtassa meg a %1 sor csoportjogait!"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr ""
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Változtassa meg a %1 sorhoz tarozó részvevõket!"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "A %1. számú problémában érintett személyek változtatása"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Változtassa meg a(z) %1 sor Scripjeit"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Változtassa meg a minden sorra vonatkozó scripeket!"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Hozzon létre egy sablont!"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Változtassa meg az általános sablonokat!"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr ""
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "A %1 csoport módosítása"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr ""
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "%1 felhasználó módosítása"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "%1. számú probléma adatainak módosítása"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "%1. számú probléma alapadatainak módosítása"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr ""
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr ""
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Változtassa meg a(z) %1 csoport jogait!"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Változtassa meg a(z) %1 sor felhasználói jogait!"
@@ -2649,11 +3934,23 @@ msgstr "Változtassa meg a(z) %1 sor felhasználói jogait!"
msgid "ModifyACL"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr ""
@@ -2661,89 +3958,121 @@ msgstr ""
msgid "ModifyQueueWatchers"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr ""
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Hétf"
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "H"
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Hétfő"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "További részletek %1 felhasználóról"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Lefelé mozgatni"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Felfelé mozgatni"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr ""
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr ""
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "%1 problémáim"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr ""
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Lezárás"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Saját lekérdezések"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "ÚJSOR"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Név"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "A felhasználói név már foglalt"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Soha"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Új"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Új kapcsolatok"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Új jelszó"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr ""
@@ -2751,421 +4080,548 @@ msgstr ""
msgid "New Query"
msgstr "Új lekérdezés"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
+msgstr "Új keresés"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
msgstr ""
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Új egyéni mezõ"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Új dashboard"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Új csoport"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Új üzenetek"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Új jelszó"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
-msgstr ""
+msgstr "Új jelszó értesítő lett elküldve"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Új sor"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
-msgstr ""
+msgstr "Új emlékeztető:"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Új jogok"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Új Scrip"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Új sablon"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Új probléma"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Az új probléma nem létezik"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Új felhasználó"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr ""
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Új résztvevõk"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Következõ"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Következõ oldal"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Becenév"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Nincs egyéni mezõ"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Nincs egyéni mezõ meghatározva"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Nincs csoport meghatározva"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr ""
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Nincs sor meghatározva"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr "RT-felhasználó nem található. Vegyew fel a kapcsolatot az RT-adminisztrátorral.\\n"
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
msgstr ""
-"RT-felhasználó nem található. Vegyew fel a kapcsolatot az RT-"
-"adminisztrátorral.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Nincs sablon"
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr ""
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Nincs <b>sor</b> megadva!"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Nincs kiegészítés tárolva"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Nincs leírás a(z) %1-hez"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Nincs <b>csoport</b> megadva!"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Nincs a keresési feltételeknek megfeleõ csoport."
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr ""
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Nincs jelszó megadva"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Nincs joga sort létrehozni"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Nincs joga a(z) '%1' sorban problémát létrehozni"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Nincs joga felhasználót létrehozni"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
-msgstr ""
+msgstr "Nincs jogosultsága az adott probléma megtekintésére"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr ""
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Nincs joga ezt a problémát aktualizálni"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Nincs <b>felelõs</b> megadva!"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Nincs vezetõ kiválasztva."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Nem található a keresési fletételeknek megfelelõ sor"
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Nem találhatók jogok"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Nincsenek jogok engedélyezve."
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr ""
-
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Nincs feldolgozható keresési lista."
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "(nincs tárgy)"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Nincs <b>értesítési típus</b> megadva!"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Nincs a keresési feltételeknek megfeleõ felhasználó."
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr ""
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Senki"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Nem létezõ mezõ?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr ""
-#: html/Elements/Header:96
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Nincs bejelentkezve."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Nincs megadva"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr ""
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Megjegyzések"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Értesítést nem sikerült elküldeni."
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "AdminCCs értesítése"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "AdminCCs értesítése kiegészítésként"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr ""
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr ""
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Más címzettek értesítése"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Más címzettek értesítése kiegészítésként"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "A tulajdonos értesítése"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "A tulajdonos értesítése kiegészítésként"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr ""
-#: etc/initialdata:365
-msgid "Notify Owner of their ticket has been approved by all approvers"
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
msgstr ""
-#: etc/initialdata:353
-msgid "Notify Owner of their ticket has been approved by some approver"
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
msgstr ""
-#: etc/initialdata:334
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr ""
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Beküldõ értesítése"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "A beküldõ és a tájékoztatást kapó értesítése"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "A beküldõ és a tájékoztatást kapó értesítése kiegészítésként"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Minden résztvevõ tájékozatatása"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Minden résztvevõ értesítése kiegészítésként"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "nov."
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "VAGY"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Objekum nem hozható létre"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Az objekumot nem sikerült törölni"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Objektum létehozva"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objektum törölve"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr ""
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "okt."
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr ""
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr ""
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr ""
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "e napon"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr ""
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Kiegészítéskor"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Válaszoláskor"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Létrehozáskor"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Tulajdonos változásakor"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Prioritás változásakor"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Sor megváltozásakor"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Megoldáskor"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Státusz megváltozásakor"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Tranzakciónál"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Csak a(z) %1 után létrejött poblémák engedélyezései legyenek láthatóak"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
-msgstr ""
-"Csak a(z) %1 elõtt létrejött problémák engedélyezései legyenek láthatóak"
+msgstr "Csak a(z) %1 elõtt létrejött problémák engedélyezései legyenek láthatóak"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr ""
@@ -3173,103 +4629,140 @@ msgstr ""
msgid "Open"
msgstr "Nyitott"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr ""
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Megnyit"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Nyitott problémák"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr ""
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr ""
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Rendezés"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Cég, szervezet"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr ""
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Prioritás idõvel emelkedik"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Saját problémák"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr ""
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Tulajdonos"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Erõszakos tulajdonosváltás: %1 --> %2"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "%1/%2 oldal"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr ""
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Felmenõk"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Jelszó"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Jelszó-emlékeztetõ"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Jelszó megváltoztatva"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr ""
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr ""
@@ -3277,190 +4770,310 @@ msgstr ""
msgid "Password too short"
msgstr "A jelszó túl rövid!"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Jelszó: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr ""
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "A jelszavak nem egyeznek."
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr ""
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Résztvevõk"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr ""
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Perl konfiguráció"
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Hozzáférés visszautasítva"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr ""
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
msgstr ""
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Saját Csoportok"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Saját csoportok"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Saját csoportok:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Telefonszámok"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Beállításaim"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
+msgid "Preferences %1 for user %2."
msgstr ""
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr ""
-#: lib/RT/Action/Generic.pm:195
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr ""
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Elõzõ"
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Elõzõ oldal"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "%1 vezetõ nem található."
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Prioritás"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Prioritás kezdõ értéke"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr ""
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Kiemelt"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr ""
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Kiemelt felhasználók:"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
msgid "Query"
msgstr "Lekérdezés"
-#: html/Search/Build.html:121
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Lekérdezésszerkesztõ"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr ""
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Sor"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
msgstr "%2 sor nem található"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "A sor neve"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Sor már létezik"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "A sor nem hozható létre"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "a sor nem tölthetõ be."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "A sor létrehozva"
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "A sor nem található"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Sorok"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr ""
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr ""
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Gyors lekérdezés"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Probléma felvétele (gyors)"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr ""
@@ -3468,589 +5081,854 @@ msgstr ""
msgid "RT %1"
msgstr "RT %1"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 %2-nek"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "Konfiguráció"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "RT Hiba"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr ""
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "Ãttekintés"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr ""
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr ""
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
-msgstr " %1 -- Request Tracker "
+msgstr "%1 -- Request Tracker"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
-#: html/Search/Simple.html:58
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr ""
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Valódi név"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "%1 hivatkozás törölve"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "A következõk kapcsolódnak hozzá"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "A következõkhöz kapcsolódik"
-#: html/Elements/Refresh:57
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "%1 percenként frissítse ezt az oldalt."
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr ""
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr ""
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr ""
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr ""
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Adminisztratív tájékoztatást kapó eltávolítása"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Tájékoztatást kapó eltávolítása"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Beküldõ eltávolítása"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Válaszol"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Válaszcím"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Válasz a beküldõknek"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Válasz a problémákra"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr ""
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr ""
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Beküldõ"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Beküldõ"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "A problémát meg kell oldani"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr ""
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Visszaállít"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr ""
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Otthoni"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Megold"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "%1. (%2) probléma lezárása"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Megoldva"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr ""
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr ""
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr ""
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Változtatások eredménye"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Jelszó megismételve"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "A jog megosztva"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "A jog betöltve"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "A jog nem vonnható vissza"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "A jog nem található"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "A jog nem található."
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Jog visszavonva"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Jogok"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
-msgstr " %1 jogai nem vonhatók vissza"
+msgstr "%1 jogai nem vonhatók vissza"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Szerepek"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr ""
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Sorok száma oldalanként"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Szo"
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Mentés"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Változtatások mentése"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Beállítások mentése"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Változtatások mentése"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Elmentett lekérdezés"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip létrehozva"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Scrip mezök"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip törölve"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrips"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Minden sorhoz érvényes Scripek"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Keresés"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr ""
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr ""
-
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Engedélyezések keresése"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr ""
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
msgstr ""
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr ""
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
msgstr ""
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr ""
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Biztonság:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Eyéni mezõk"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr ""
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr ""
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Válasszon egy egyéni mezõt!"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Válasszon csoportot!"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr ""
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr ""
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Válasszon felhasználót!"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Válasszon egy egyéni mezõt!"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Válasszon egy egyéni mezõt!"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr ""
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Dashboard kiválasztása"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Válasszon csoportot!"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Válasszon több értéket!"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Válasszon értéket!"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Válasszon sort!"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr ""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Válasszon Scripet!"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Válasszon sablont!"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Válasszon (legfeljebb %1) értéket!"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Válasszon felhasználót"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Kiválasztott egy egyéni mezõk"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Kiválasztott problémák"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr ""
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
msgstr ""
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "Email küldése minden nézőnek"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
+msgstr "Email küldése minden nézőnek mint hozzászolás"
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
msgstr ""
-#: etc/initialdata:112
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr ""
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr ""
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr ""
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr ""
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr ""
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr ""
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr ""
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr ""
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr ""
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Szept"
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "szep."
-#: html/Ticket/Elements/ShowTransaction:158
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "Szeptember"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Beállítások"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr ""
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Lezárások"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Látható mezõk"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Lekérdezés eredménye"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Láthatóak legyenek a felszabadított problémák"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Problémaleírás"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "láthatóak legyenek az elutasított problémák"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Attribútumok"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Linkleírások megjelenítése"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Láthatóak legyenek a folyamatban levõ problémák"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Láthatóak legyenek a mások engedélyezésére váró problémák"
@@ -4058,115 +5936,188 @@ msgstr "Láthatóak legyenek a mások engedélyezésére váró problémák"
msgid "ShowACL"
msgstr ""
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr ""
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr ""
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Aláírás (e-mail-hez)"
-#: html/Elements/Tabs:68
-msgid "Simple Search"
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
msgstr ""
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr "Egyszerű keresés"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr ""
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr ""
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr ""
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Kicsi"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr ""
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Rendezés"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr ""
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Elkezdve"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Kiosztva"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Ãllam"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Státusz"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Státusz változtatása: '%1' --> '%2'"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Elcsen"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Problémák elcsenése"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Probléma elcsenése %1 tulajdonostól"
@@ -4175,122 +6126,208 @@ msgstr "Probléma elcsenése %1 tulajdonostól"
msgid "Stolen from %1 "
msgstr "Probléma elcsenése %1 tulajdonostól "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr ""
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Tárgy"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr ""
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Mentés"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Sikerült"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "V"
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr ""
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Rendszer"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Rendszerkonfiguráció"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Rendszerhiba"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr ""
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Rendszerkonfiguráció"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Rendszerhiba. Jog nem delegálható ."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Rendszerhiba. Jog nem adható."
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Rendszercsoportok"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
msgstr ""
-#: lib/RT/CurrentUser.pm:357
-msgid "TEST_STRING"
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
msgstr ""
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Atvesz"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Problémák átvétele"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Ãtvéve"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Sablon"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Sablon #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Sablon törölve"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Sablon nem található"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Sablon beolvasva"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr ""
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Sablonok"
@@ -4298,356 +6335,555 @@ msgstr "Sablonok"
msgid "Text"
msgstr "Szöveg"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Már ez az aktuális érték"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Egyéni mezõhöz érvénytelen értek"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Ez ugyanaz az érték"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "A felhasználónak/csoportnak mát van ilyen joga"
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "A vezetõ már %1-a a sornak"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "A vezetõ már %1-a a problémának"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "A vezetõ már nem %1-a a sornak"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Ez a sor nem létezik"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr ""
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Már ez a felhasználó a tulajdonos!"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Ilyen felhasználó nem létezik"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "A felhasználó már kiemelt"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "A felhasználó már nem kiemelt"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "A felhasználó mostantól kiemelt"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "A felhasználó mostantól nem kiemelt"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "a felhasználóhoz nem tartozhatnak problémák ebbõl a sorból"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr ""
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Alapadatok"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr ""
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr ""
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr ""
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr ""
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:96
-msgid "This message will be sent to..."
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
msgstr ""
-#: bin/rt-crontool:266
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr "Üzenet a következőknek lesz elküldve.."
+
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Diese Transaktion scheint keinen Inhalt zu haben"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "A felhasználó által felvetett %1 legsürgõsebb probléma"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Cs"
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Probléma"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "%1. számú (%2) probléma jellemzõinek módosítása"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Probléma. %1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "%1. probléma"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
-msgstr ""
+msgstr "A %1 számú probléma létre lett hozva a következő soron: '%2'"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Probléma %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Probléma egyéni mezõi"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr ""
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Pobléma megoldva"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Probléma keresése"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Probléma tranzakciói"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "A probléma tartalma"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr ""
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Probléma metadata"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
-msgstr ""
+msgstr "A probléma állapota megváltozott"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Problémák"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr ""
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
-msgstr ""
+msgstr "Erre a jóváhagyásra váró problémák:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
-msgstr ""
+msgstr "Becsült idő"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Maradék idõ"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Ráfordított munkaidõ"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Maradék idõ"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr ""
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Munkaidõ"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "Ráfordított munkaidõ"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr ""
-#: html/Elements/Footer:62
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Beérkezett"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Eszközök"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr ""
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr ""
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Tranzakció egyéni mezõi"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr ""
-#: lib/RT/Date.pm:418
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "K"
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Típus"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr ""
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr ""
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr ""
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: $key"
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
msgstr ""
-#: html/Elements/SelectResultsPerPage:58
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "korlátlan"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Névtelen lekérdezés"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Nem kiemelt"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Inaktív egyéni mezõk"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Inaktív objektumok"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Probléma visszaadása"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Frissít"
@@ -4655,19 +6891,27 @@ msgstr "Frissít"
msgid "Update All"
msgstr "Mindet frissíti"
-#: html/Ticket/Update.html:135
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Probléma frissítése"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Frissítés típusa"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "A kiválasztott problémák frissítése"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr ""
@@ -4675,302 +6919,551 @@ msgstr ""
msgid "Update selected tickets"
msgstr "A kiválasztott problémák frissítése"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr ""
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr ""
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "%1. számú (%2) probléma aktualizálása"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr ""
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Frissítve"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Feltöltés"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Több fájl feltöltése egyszerre"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Több kép feltöltése egyszerre"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Egy fájl feltöltése"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Egy kép feltöltése"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr ""
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Módosítások feltöltése"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:506
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "'%1' felhasználó nem található"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Felhasználó által meghatározott"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr ""
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Felhasználói jogok"
-#: html/Admin/Users/Modify.html:301
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr ""
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Felhasználó létrehozva"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Felhasználó által definiált csoport"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Felhasználó betöltve"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Felhasználó által definiált csoportok"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Felhasználó"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Felhasználók"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr ""
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr ""
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Értékek"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr ""
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Résztvevõk"
-#: lib/RT/Date.pm:419
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Sze"
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr ""
-#: etc/initialdata:521
-msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
msgstr ""
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
msgstr ""
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr ""
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr ""
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr ""
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr ""
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr ""
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr ""
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr ""
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr ""
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr ""
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr ""
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr ""
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Munkahelyi"
-#: html/Search/Results.html:82
-msgid "Work offline"
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Munkaidõ"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Már az öné ez a probléma"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr ""
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "%1 Problémát talált a %2 sorban"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Kilépett a Request Tracker programból."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Nincs joga létrehozni problémákat ebben a sorban"
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Nem hozhat létre problémákat ebben a sorban"
-#: html/NoAuth/Logout.html:56
-msgid "You're welcome to login again"
-msgstr "Itt ismét bejelentkezhetsz!"
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
msgstr ""
-#: etc/initialdata:540
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "Itt ismét bejelentkezhetsz!"
+
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "A problémája engedélyezve."
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "A problémája elutasítva."
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "A begépelt felhasználói név vagy jelszó hibás!"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Irányítószám"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "után"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "létrehozhat saját lekérdezéseket"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "betölthet saját lekérdezéseket"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "%1nak engedélyezve"
-#: html/Search/Results.html:83
-msgid "chart"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+# ## wieder - Duzen???
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "elõtt"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
msgstr ""
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "Lezárt"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "tartalmazza"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "napi"
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "naponta % órakor"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "napja"
@@ -4978,122 +7471,218 @@ msgstr "napja"
msgid "deleted"
msgstr "törölve"
-#: html/Search/Elements/PickBasics:61
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "nem"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "nem tartalmazza"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "nem egyezik"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "letöltés"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "egyenlõ"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr ""
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr ""
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr ""
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "hiba: nincs mit törölni"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr ""
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr ""
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "nagyobb mint"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
-msgstr " '%1' csopot"
-
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr ""
+msgstr "'%1' csopot"
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "órája"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "Sorszám"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
-msgstr " == "
+msgstr "=="
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
-msgstr " nem "
+msgstr "nem"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "kulcs letiltva"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "kulcs lejárt"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "kulcs visszavonásra került"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "balról jobbra"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "kisebb mint"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "=="
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "perce"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "perc"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "havi"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "havonta (% napon) %2 órakor"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "hónapja"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "soha"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "új"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "(nincs név)"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "Nincs érték"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "senki"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "nem egyenlõ"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "e napon"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr "napon"
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "Nyitott"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr ""
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "torta"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "Stapel %1 %2"
@@ -5106,65 +7695,113 @@ msgstr "elutasítva"
msgid "resolved"
msgstr "megoldva"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "jobbról balra"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sec"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr ""
-#: html/Search/Results.html:80
-msgid "spreadsheet"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
msgstr ""
#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "várakozik"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
-msgstr ""
+msgstr "Összesítő sorok"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "rendszer %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr ""
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr ""
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "probléma #%1 %2"
-#: lib/RT/Group_Overlay.pm:236
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "felhasználó %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "heti"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "hetente (%1 napon) %2-kor"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "hete"
-#: lib/RT/Date.pm:358
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "az a port melyen a web szervere figyel (pl 8080)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "fejlécekkel"
+
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "éve"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "igen"
+
diff --git a/rt/lib/RT/I18N/i_default.pm b/rt/lib/RT/I18N/i_default.pm
index 4e00f82..0472a18 100644
--- a/rt/lib/RT/I18N/i_default.pm
+++ b/rt/lib/RT/I18N/i_default.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,11 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-package RT::I18N::i_default;
+package RT::I18N::i_default;
+use base 'RT::I18N';
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::I18N);
eval "require RT::I18N::i_default_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/I18N/i_default_Vendor.pm});
diff --git a/rt/lib/RT/I18N/id.po b/rt/lib/RT/I18N/id.po
index 1e2e05e..63cefbf 100644
--- a/rt/lib/RT/I18N/id.po
+++ b/rt/lib/RT/I18N/id.po
@@ -2,210 +2,290 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2005-10-03 13:48-0400\n"
-"Last-Translator: James <james@actionmessage.com>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-06-09 23:44+0000\n"
+"Last-Translator: tunggul arif siswoyo <tunggul@gmail.com>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=US-ASCII\n"
-"Content-Transfer-Encoding: 7bit\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (tidak ada kunci publik!)"
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (tak terpercaya!)"
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
+#: NOT FOUND IN SOURCE
msgid "$prefix %1"
msgstr "$Awalan %1"
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr "%1 #%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %2 %3 %4:%5:%6 %7"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 sudah ditambah"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "%1 %2 yang lalu"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 diganti menjadi %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 sudah dihapus"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 gunakan template %3"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) oleh %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "(Belum diubah)"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr "%1 - Sesuaikan opsi konfig LogToScreen"
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
-msgstr "%1 - Sebuah penjelasan untuk dilewati ke %2"
+msgstr "%1 - Argumen untuk diumpankan ke %2"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
-msgstr "%1 - status Output diperbaharui menjadi STDOUT"
+msgstr "%1 - Status Output diperbarui ke STDOUT"
-#: bin/rt-crontool:253
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
-msgstr ""
-
-#: bin/rt-crontool:256
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Pilih apakah anda ingin menggunakan transaksi 'pertama', 'terakhir' atau 'semua'"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - menetapkan modul aksi yang ingin digunakan oleh anda"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - menetapkan moduk kondisi yang ingin digunakan oleh anda"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - menetapkan modul pencarian yang ingin digunakan oleh anda"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
msgstr ""
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT %2 Hak Cipta 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
-msgstr "%1 Memanggil AksiScrip"
+msgstr "%1 ScripAction telah dimuat"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 ditambahkan sebagai nilai untuk %2"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 telah ada dan memiliki tabel RT di tempatnya, namun tidak berisi metadata RT. Langkah 'Inisialisasi Basis data' yang dilakukan selanjutnya dapat menyisipkan metadata kedalam basis data ini. Jika anda setuju dengan hal ini, klik tombol 'Customize Basics' dibawah untuk melanjutkan mengkustomisasi RT."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 telah ada dan memiliki tabel RT di tempatnya, namun tidak berisi metadata RT. Langkah 'Inisialisasi Basis data' yang dilakukan selanjutnya dapat menyisipkan metadata kedalam basis data ini. Jika anda setuju dengan hal ini, klik tombol 'Customize Basics' dibawah untuk melanjutkan mengkustomisasi RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
-msgstr "%1 ditampilkan sebagai objek lokal, tetapi tidak dapat ditemukan di dalam database"
+msgstr "%1 merupakan objek lokal, namun tidak dapat ditemukan dalam basis data"
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 oleh %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 sudah diganti dari %2 ke %3"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "%1 ditiru"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 tidak bisa diatur ke %2."
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 tidak dapat mengatur status untuk diselesaikan. Database RT's mungkin tidak konsisten."
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 sudah dibuat"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 sudah dihapus"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "%1 dinonaktifkan"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 tidak tersedia"
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "%1 diaktifkan"
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "%1 Tiket dengan prioritas paling tinggi yang saya miliki"
@@ -213,26 +293,37 @@ msgstr "%1 Tiket dengan prioritas paling tinggi yang saya miliki"
msgid "%1 highest priority tickets I requested..."
msgstr "%1 Tiket dengan prioritas paling tinggi yang saya minta..."
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 adalah sebuah alat yang berfungsi pada tiket dari alat penjadwalan eksternal, seperti Cron."
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 tidak lagi menjadi %2 untuk antrian ini."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr ""
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 tidak lagi menjadi nilai untuk kolom kustom %2"
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 menit"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "%1 tiket terbaru yang belum dimiliki"
@@ -240,72 +331,106 @@ msgstr "%1 tiket terbaru yang belum dimiliki"
msgid "%1 newest unowned tickets..."
msgstr "%1 tiket terbaru yang belum dimiliki..."
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 objek"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "hak-hak %1"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 diperbarui: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 diperbarui: Tak ada yang berubah"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 telah diperbarui"
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 akan memecahkan semua anggota dari grup tiket yang dipecahkan."
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1's %2 objek"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1's %2's %3 objek"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "%1's pencarian disimpan"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: tidak ada lampiran yang ditentukan"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1b"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' adalah nilai yang tidak valid untuk status"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
-msgstr "(Klik kotak ini untuk hapus)"
+msgstr "Contreng untuk menghapus"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Klik kotak ini untuk menon-aktifkan pemberitahuan kepada penerima yang sudah terdaftar)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Klik kotak ini untuk mengaktifkan pemberitahuan kepada penerima yang sudah terdaftar)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Masukkan ID Tiket atau URL, dipisahkan dengan spasi)"
@@ -313,29 +438,29 @@ msgstr "(Masukkan ID Tiket atau URL, dipisahkan dengan spasi)"
msgid "(If left blank, will default to %1"
msgstr "(Jika ditinggalkan kosong, default akan diatur menjadi %1"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Jika ditinggalkan kosong, default akan menjadi %1)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Tidak ada kolom kustom)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Tidak ada anggota)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Tidak ada scrip)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Tidak ada template)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Tidak satu pun)"
@@ -343,15 +468,11 @@ msgstr "(Tidak satu pun)"
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
msgstr "(Kirim salinan tembusan untuk memperbaharui daftar alamat email yang dibatasi dengan koma. <b>Tidak</b> akan mengubah siapakah yang akan menerima pembaharuan di masa datang.)"
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Kirim salinan tembusan untuk memperbaharui daftar alamat administrasi email. Orang-orang ini <b>akan</b> menerima pembaharuan di masa datang.)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
@@ -359,117 +480,139 @@ msgstr ""
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
msgstr "(Kirim salinan tembusan untuk memperbaharui daftar alamat email. <b>Tidak</b> akan mengubah siapakah yang akan menerima pembaharuan di masa datang.)"
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Kirim salinan tembusan untuk memperbaharui daftar alamat email. Orang-orang ini <b>akan</b> menerima pembaharuan di masa datang.)"
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "Gunakan kolom ini ketika anda memilih 'Definisikan Pengguna' untuk sebuah kondisi atau aksi"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr ""
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(kosong)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(tidak ada nama yang terdaftar)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(Tidak ada nilai)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(Tidak ada nilai-nilai)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(hanya satu Tiket)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(izin ditunda)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(Koleksi yang lain ditunda)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(diperlukan)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(tidak ada judul)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
msgstr ""
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr ""
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:53
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Tiket->Status%>"
-#: html/Elements/SelectTicketTypes:48
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:48
+#: NOT FOUND IN SOURCE
msgid "<%$_%>"
msgstr "<%$_%>"
-#: html/Search/Elements/DisplayOptions:73
+#: NOT FOUND IN SOURCE
msgid "<%$field%>"
msgstr "<%$kolom%>"
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<Tipe input=\"submit\" nilai=\"Tiket Baru di dalam \">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Template kosong"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE tidak ditemukan"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE hanya dapat dibuat dan dihapus."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "DAN"
@@ -477,72 +620,80 @@ msgstr "DAN"
msgid "Aborting to avoid unintended ticket modifications.\\n"
msgstr "Dibatalkan untuk menghindari modifikasi tiket yang tidak diharapkan.\\n"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Tentang Aku"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Kontrol Akses"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Aksi"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Aksi %1 tidak ditemukan"
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Action committed."
msgstr "Aksi dijalankan."
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Aksi dijalankan."
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr ""
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Aksi disiapkan..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Tambah"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Tambah AdminCc"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Tambah Cc"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Tambah Kolom"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Tambah Kriteria"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Tambah File Lagi"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Tambah Pemohon"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Tambah Nilai"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Tambah scrip yang akan digunakan di semua antrian"
@@ -550,89 +701,105 @@ msgstr "Tambah scrip yang akan digunakan di semua antrian"
msgid "Add additional criteria"
msgstr "Tambahkan kriteria tambahan"
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr ""
-
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Tambah Komentar atau balas ke tiket yang sudah dipilih"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Tambah Anggota"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Tambah Pengamat Baru"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
msgstr ""
-#: html/Search/Bulk.html:158
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Tambah, hapus dan ubah nilai kolom kustom untuk objek"
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Tambahkan prinsipal sebagai %1 untuk antrian ini"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Tambahkan prinsipal sebagai %1 untuk Tiket ini"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Alamat1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Alamat2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Komentar Admin"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Korespondensi Admin"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Antrian Admin"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Konfigurasi Admin/Global"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "Kolom Kustom Admin"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "Grup Admin"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "Keanggotaan Grup Admin"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "Milik Grup Pribadi Admin"
@@ -640,141 +807,165 @@ msgstr "Milik Grup Pribadi Admin"
msgid "AdminQueue"
msgstr "Antrian Admin"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "Pengguna Admin"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Cc Administrasi"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Lanjutan"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Setelah"
-
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Kumpulan"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Semua Izin terlewati"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Semua Antrian"
-#: html/Search/Elements/EditQuery:56
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "Dan/Atau"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "Digunakan untuk"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Digunakan"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Digunakan untuk perubahan anda"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Izin"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Izin #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Izin #%1: Catatan yang tidak dicatat karena kesalahan sistem"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Izin #%1: Catatan yang dicatat"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Izin dilewati"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Izin ditolak"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Disetujui"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Catatan Pemberi Persetujuan: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Apr."
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Naik"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Menentukan dan memindahkan kolom kustom"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "Menentukan Kolom Kustom"
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Melampirkan"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Melampirkan file"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "File dilampirkan"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Lampiran '%1' tidak dapat dipanggil"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Lampiran dibuat"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Nama File Lampiran"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Lampiran-lampiran"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Attribut sudah dihapus"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Agst."
@@ -782,43 +973,52 @@ msgstr "Agst."
msgid "AuthSystem"
msgstr "Sistem Otorisasi"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Balas Otomatis"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Balas Otomatis ke Pemohon"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "Available Columns"
-msgstr "Kolom Tersedia "
+msgstr "Kolom Tersedia"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "Bad data in %1"
msgstr "Data buruk di dalam %1"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Dasar-dasar"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Bcc"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Pastikanlah untuk menyimpan setiap perubahan anda"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "Sebelum"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Pemecahan Praktis yang terbaik, Logo bisnis LLC"
@@ -826,23 +1026,35 @@ msgstr "Pemecahan Praktis yang terbaik, Logo bisnis LLC"
msgid "Binary"
msgstr "Binary"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Kosong"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Diberi huruf tebal"
-#: html/Search/Results.html:79
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Bookmarkable link"
msgstr "Menyimpan penunjuk link"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Catatan Atas Singkat"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr ""
@@ -850,7 +1062,23 @@ msgstr ""
msgid "Bulk ticket update"
msgstr "Memperbaharui tiket dengan jumlah banyak pada waktu yang sama"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Tidak dapat mengubah sistem pengguna"
@@ -858,20 +1086,20 @@ msgstr "Tidak dapat mengubah sistem pengguna"
msgid "Can this principal see this queue"
msgstr "Dapatkah prinsipal melihat antrian ini"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Tidak dapat menambah nilai kolom kustom tanpa nama"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "Tidak dapat menemukan kelas koleksi untuk '%'"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Tidak dapat menemukan pencarian yang disimpan untuk bekerja dengan"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Tidak dapat menghubungkan tiket tersebut dengan dirinya sendiri"
@@ -879,113 +1107,161 @@ msgstr "Tidak dapat menghubungkan tiket tersebut dengan dirinya sendiri"
msgid "Can't merge into a merged ticket. You should never get this error"
msgstr "Tidak dapat digabungkan ke dalam tiket gabungan. Anda seharusnya tidak pernah mendapatkan kesalahan ini."
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr ""
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Tidak dapat menyimpan pencarian ini"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Tidak dapat menentukan baik dasar dan sasaran"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Tidak dapat membuat pengguna: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr ""
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Ubah Sandi"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Periksa Semua"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Klik kotak ini untuk hapus"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Klik kotak ini untuk menghilangkan hak-hak"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Anak"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
msgstr ""
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Kota"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Hapus Semua"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr ""
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Ditutup"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Tiket sudah ditutup"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr ""
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Komentar"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Alamat Komentar"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Komentar pada Tiket"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "Komentar Pada Tiket"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Komentar"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Komentar (Tidak dikirim ke pemohon)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Komentar (tidak dikirim ke pemohon)"
@@ -993,309 +1269,502 @@ msgstr "Komentar (tidak dikirim ke pemohon)"
msgid "Comments about %1"
msgstr "Komentar mengenai %1"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Komentar tentang pengguna ini"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Komentar sudah ditambahkan"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Potongan Tiket Dijalankan"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Kondisi"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr ""
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Kondisi sesuai dengan ..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Kondisi tidak ditemukan"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Konfigurasi"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Konfirmasi"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ContactInfoSystem"
msgstr "Hubungi Sistem Info"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Isi"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Tipe - Isi"
-#: html/Search/Elements/EditSearches:65
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Tiru"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Korespondensi"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Korespondensi sudah ditambah"
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. "
-msgstr "Tidak dapat menambah nilai kolom kustom baru untuk tiket."
+msgstr "Tidak dapat menambah nilai kolom kustom baru untuk tiket. "
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
-msgstr "Tidak dapat menambah nilai kolom kustom baru"
+msgstr "Tidak dapat menambah nilai kolom kustom baru "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
-msgstr "Tidak dapat menambah nilai kolom kustom baru"
+msgstr "Tidak dapat menambah nilai kolom kustom baru "
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "Tidak dapat mengubah pemilik tiket. "
-#: html/Admin/CustomFields/Modify.html:161
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Tidak dapat membuat Kolom Kustom"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
-msgstr "Tidak dapat membuat Kolom Kustom:%1 "
+msgstr "Tidak dapat membuat Kolom Kustom:%1"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Tidak dapat membuat grup"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Tidak dapat membuat template: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Tidak dapat membuat tiket. Antrian tidak dapat diatur"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Tidak dapat membuat pengguna"
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Tidak dapat menemukan atau membuat pengguna tersebut"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Tidak dapat menemukan prinsipal tersebut"
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Tidak dapat memanggil KolomKustom %1"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Tidak dapat memanggil grup"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "Tidak dapat memanggil objek untuk %1"
-#: lib/RT/SavedSearch.pm:197
+#: NOT FOUND IN SOURCE
msgid "Could not load search attribute"
msgstr "Tidak dapat memanggil attribut pencarian"
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Tidak dapat membuat prinsipal tersebut %1 untuk antrian ini"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Tidak dapat membuat prinsipal tersebut %1 untuk Tiket ini"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Tidak dapat menghapus prinsipal tersebut sebagai %1 untuk antrian ini"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Tidak dapat mengatur informasi pengguna"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Tidak dapat menambah anggota ke grup"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Tidak dapat membuat transaksi: %1"
-#: lib/RT/Record.pm:953
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Tidak dapat menemukan baris"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Tidak dapat menemukan prinsipal tersebut"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Tidak dapat menemukan nilai tersebut"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Tidak dapat memanggil %1 dari database pengguna.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "Tidak dapat memanggil Kelas %1"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "Tidak dapat memanggil Kolom Kustom %1"
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr ""
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Tidak dapat memanggil grup %1"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Tidak dapat memanggil link"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Tidak dapat memanggil objek %1"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Tidak dapat memanggil antrian"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "Tidak dapat memanggil antrian %1"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr ""
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load that user (%1)"
msgstr "Tidak dapat memanggil pengguna tersebut (%1)"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "Tidak dapat memanggil Tiket '%1'"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
msgstr ""
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Negara"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Dibuat"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Buat Tiket"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Buat Kolom Kustom"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Buat Kolom Kustom untuk antrian %1"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Buat grup baru"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Buat grup pribadi baru"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Buat tiket baru"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Buat pengguna baru"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Buat antrian"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Buat scrip untuk antrian %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Buat template"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Buat Tiket"
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Buat Tiket baru berdasarkan pada template scrip ini"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Buat Tiket"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Buat tiket untuk antrian ini"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Buat, hapus dan ubah kolom kustom"
@@ -1303,44 +1772,77 @@ msgstr "Buat, hapus dan ubah kolom kustom"
msgid "Create, delete and modify queues"
msgstr "Buat, hapus dan ubah antrian"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Buat, hapus dan ubah anggota dari grup pribadi"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Buat, hapus dan ubah pengguna"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr "Buat Pencarian yang Disimpan"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "Buat Tiket"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "sudah Dibuat"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Kolom Kustom sudah dibuat %1"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr ""
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Pencipta"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Link yang sekarang"
@@ -1348,19 +1850,19 @@ msgstr "Link yang sekarang"
msgid "Current Relationships"
msgstr "Hubungan Sekarang"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
-msgstr "Scrips Sekarang "
+msgstr "Scrips Sekarang"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Anggota Sekarang"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Hak-hak Sekarang"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr ""
@@ -1368,55 +1870,57 @@ msgstr ""
msgid "Current search criteria"
msgstr "Kriteria pencarian sekarang"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Pengamat sekarang"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Kolom Kustom"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Kolom Kustom untuk %1"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Aksi kustom membersihkan kode"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Aksi kustom menyiapkan kode"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Kondisi kustom"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Kolom kustom %1 %2 %3"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
msgid "Custom field %1 does not apply to this object"
msgstr "Kolom kustom %1 tidak dapat digunakan untuk objek ini"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Kolom kustom %1 memiliki nilai."
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Kolom kustom %1 tidak memiliki nilai."
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Kolom kustom %1 tidak ditemukan"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
@@ -1426,92 +1930,204 @@ msgstr ""
msgid "Custom field not found"
msgstr "Kolom kustom tidak ditemukan"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Nilai kolom kustom %1 tidak dapat ditemukan untuk kolom kustom %2"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Nilai kolom kustom tidak dapat dihapus"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Nilai kolom kustom tidak dapat ditemukan"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Nilai kolom kustom sudah dihapus"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "Kolom kustom"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr ""
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Tanggal"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Des."
-#: etc/initialdata:222
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Default template Balas Otomatis"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Default Antrian"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Default Pemohon"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Default template komentar admin"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Default template korespondensi admin"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Default template korespondensi"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Default template transaksi"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Default: %1/%2 diganti dari %3 ke %4"
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Hak-hak Utusan"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Hak-hak spesifik utusan yang sudah diberikan kepada anda."
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "Hak-hak Utusan"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Delegasi"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Hapus"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Hapus Template"
@@ -1519,28 +2135,70 @@ msgstr "Hapus Template"
msgid "Delete article #%1"
msgstr "Hapus artikel #%1"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Gagal dihapus: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Hapus scrip yang sudah dipilih"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Hapus tiket"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "Hapus tiket"
-#: lib/RT/SavedSearch.pm:218
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Deleted search"
msgstr "Pencarian dihapus"
@@ -1548,63 +2206,83 @@ msgstr "Pencarian dihapus"
msgid "Deleting this object could break referential integrity"
msgstr "Menghapuskan objek ini dapat memutuskan integrasi referensial"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Menghapuskan objek ini dapat memutuskan integrasi referensial"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Menghapuskan objek ini dapat melanggar integrasi referensial"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Ditolak"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "Bergantung oleh"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Ketergantungan oleh %1 sudah ditambah"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Ketergantungan oleh %1 sudah dihapus"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Ketergantungan oleh %1 sudah dihapus"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "Ketergantungan oleh %1 sudah dihapus"
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Bergantung pada"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Turun"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Gambarkan persoalan dibawah ini"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Deskripsi"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Tampilkan"
@@ -1612,31 +2290,31 @@ msgstr "Tampilkan"
msgid "Display Access Control List"
msgstr "Tampilkan Daftar Kontrol Akses"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Tampilkan Kolom"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Tampilkan template Scrip untuk antrian ini"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Tampilkan Scrip untuk antrian ini"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Tampilkan mode"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Tampilkan pencarian yang disimpan untuk grup ini"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Didistribusikan dibawah versi 2 dari <a href=\"http://www.gnu.org/copyleft/gpl.html\"> GNU GPL.</a>"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Lakukan apa saja dan semuanya"
@@ -1644,7 +2322,23 @@ msgstr "Lakukan apa saja dan semuanya"
msgid "Do the Search"
msgstr "Lakukan Pencarian"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Jangan refresh halaman ini."
@@ -1652,52 +2346,77 @@ msgstr "Jangan refresh halaman ini."
msgid "Don't show search results"
msgstr "Jangan tampilkan hasil pencarian"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Download"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Download sebagai file yang dibatasi dengan tab"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Batas Waktu"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
msgstr "KESALAHAN: Tidak dapat memanggil Tiket '%1': %2.\\n"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Ubah"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Ubah Kolom Kustom untuk %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Ubah Kolom Kustom untuk semua grup"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Ubah Kolom Kustom untuk semua pengguna"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Ubah Kolom Kustom untuk tiket di dalam semua antrian"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Ubah Link"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Ubah Query"
@@ -1705,28 +2424,32 @@ msgstr "Ubah Query"
msgid "Edit Relationships"
msgstr "Ubah Hubungan"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr ""
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Ubah Templates untuk antrian %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Ubah pencarian yang disimpan untuk grup ini"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Ubah template sistem"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "Ubah Pencarian yang Disimpan"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Mengubah Konfigurasi untuk antrian %1"
@@ -1735,34 +2458,56 @@ msgstr "Mengubah Konfigurasi untuk antrian %1"
msgid "Editing Configuration for user %1"
msgstr "Mengubah Konfigurasi untuk pengguna %1"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Mengubah Kolom Kustom %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Mengubah keanggotaan untuk grup ini %1"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Mengubah keanggotaan untuk grup pribadi %1"
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Baik dasar ataupun sasaran harus ditentukan"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "Email"
-#: lib/RT/User_Overlay.pm:235
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "Alamat Email yang digunakan"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "Alamat Email"
@@ -1770,49 +2515,85 @@ msgstr "Alamat Email"
msgid "EmailEncoding"
msgstr "Set Karakter Email"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan kolom kustom)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan grup ini)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan antrian ini)"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Mengaktifkan Antrian"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Mengaktifkan status %1"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "Mengaktifkan status: %1"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Masukkan beberapa nilai"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Masukan objek atau URI untuk menghubungkan object tersebut. Pisahkan beberapa input tersebut dengan spasi."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Masukkan satu nilai"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Masukkan antrian atau URIs untuk menghubungkan antrian tersebut. Pisahkan beberapa input dengan spasi."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Masukkan tiket atau URIs untuk menghubungkan Tiket tersebut. Pisahkan beberapa input dengan spasi."
@@ -1820,15 +2601,19 @@ msgstr "Masukkan tiket atau URIs untuk menghubungkan Tiket tersebut. Pisahkan be
msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces."
msgstr "Masukkan tiket atau URIs untuk menghubungkan Tiket tersebut. Pisahkan beberapa input dengan spasi."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Masukkan sampai %1 nilai"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Kesalahan"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Kesalahan di dalam parameter ke Antrian->Tambah Pengamat"
@@ -1836,11 +2621,11 @@ msgstr "Kesalahan di dalam parameter ke Antrian->Tambah Pengamat"
msgid "Error in parameters to Queue->DelWatcher"
msgstr "Kesalahan di dalam parameter Ke Antrian->Hapus Pengamat"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Kesalahan di dalam parameter ke Antrian->Hapus Pengamat"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Kesalahan di dalam parameter ke Tiket->Tambah Pengamat"
@@ -1848,11 +2633,31 @@ msgstr "Kesalahan di dalam parameter ke Tiket->Tambah Pengamat"
msgid "Error in parameters to Ticket->DelWatcher"
msgstr "Kesalahan di dalam parameter ke Tiket->Hapus Pengamat"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Kesalahan di dalam parameter ke Ticket->Hapus Pengamat"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Meningkatkan Prioritas Tiket"
@@ -1860,134 +2665,252 @@ msgstr "Meningkatkan Prioritas Tiket"
msgid "Estimate"
msgstr "Perkiraan"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Diperkirakan"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Setiap Orang"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Contoh:"
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ExternalAuthId"
msgstr "AuthID Eksternal"
#: NOT FOUND IN SOURCE
msgid "ExternalContactInfoId"
-msgstr " Kontak Info ID Eksternal"
+msgstr "Kontak Info ID Eksternal"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Info Tambahan"
-#: lib/RT/SavedSearch.pm:177
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Failed to create search attribute"
msgstr "Gagal untuk membuat atribut pencarian"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Gagal untuk menemukan pengguna pseudogroup yang memiliki 'Hak-hak Istimewa'."
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Gagal untuk menemukan pengguna pseudogroup yang tidak memiliki 'Hak-Hak Istimewa.'"
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Gagal untuk memanggil modul %1. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "Gagal memanggil objek untuk %1"
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Feb."
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Nama File"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Isilah di dalam beberapa area teks"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Isilah di dalam beberapa area wikiteks"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Isilah di dalam satu area teks"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Isilah di dalam satu area wikiteks"
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Isilah sampai %1 area teks"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Isilah sampai %1 area wikiteks"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Prioritas Akhir"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "Prioritas Akhir"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Cari grup yang"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Cari orang yang"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Cari tiket"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Pertama"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Foo!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Diubah dengan paksa"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Format"
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "Ditemukan % quant(%1,tiket)"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Objek ditemukan"
@@ -1999,175 +2922,304 @@ msgstr "Freeform"
msgid "FreeformContactInfo"
msgstr "FreeformContactInfo"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Jum."
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Catatan Atas Lengkap"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Ambil template dari file"
-#: lib/RT/Transaction_Overlay.pm:684
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Berikan ke %1"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Global"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Kolom Kustom Global"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Konfigurasi kolom kustom global"
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr ""
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Template Global: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Ambil"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Ambil!"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Ambil tiket"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Grup"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Hak Grup"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Grup sudah memiliki anggota"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Grup sudah memiliki anggota: %1"
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Grup tidak dapat dibuat: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Grup sudah dibuat"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Grup tidak memiliki anggota terseperti ini"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Grup tidak ditemukan"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Grup"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Grup tidak bisa menjadi anggota dari mereka"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Grup sesuai dengan kriteria pencarian"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Pengguna ini milik grup"
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Halo!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Halo, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historis"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "Historis grup %1"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "Historis pengguna %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "Telepon Rumah"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Homepage"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr ""
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "Saya memiliki %quant (%1,concrete mixer)."
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
+#: NOT FOUND IN SOURCE
msgid "I'm lost"
msgstr "Saya tersesat"
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Id"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identitas"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Jika izin ditolak, tolak izin yang asli dan hapus izin yang masih ditunda"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Jika tidak ada pemohon yang ditentukan, buat tiket dengan pemohon ini."
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Jika tidak ada antrian yang ditentukan, buat tiket untuk antrian ini."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Jika alat ini adalah setgid, hostile local user dapat menggunakan alat ini untuk mendapatkan akses administrasi ke RT."
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Jika anda memperbaharui apapun diatas, pastikanlah untuk"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Nilai Ilegal untuk %1"
@@ -2175,156 +3227,244 @@ msgstr "Nilai Ilegal untuk %1"
msgid "Image"
msgstr "Gambar"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Kolom yang tetap"
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Termasuk menon-aktifkan grup di dalam daftar."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Termasuk menon-aktifkan antrian di dalam daftar."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Termasuk menon-aktifkan pengguna di dalam pencarian."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr ""
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Query tidak lengkap"
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "query tidak lengkap"
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Prioritas Awal"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "Prioritas Awal"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Kesalahan Input"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Kesalahan Internal"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Kesalahan Internal: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Tipe Grup tidak valid"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Hak-hak tidak valid"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Data tidak valid"
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Antrian tidak valid"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Hak tidak valid"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Nilai tidak valid untuk %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Nilai tidak valid untuk kolom kustom"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Nilai tidak valid untuk status"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Hal ini sangat penting bahwa pengguna yang tidak memiliki hak-hak istimewa tidak dapat diizinkan untuk menjalankan program ini."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Sangat disarankan bahwa anda membuat pengguna unix yang tidak memiliki hak-hak istimewa dengan keanggotaan grup yang benar dan akses RT untuk menjalankan alat ini."
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Hal ini memerlukan beberapa penjelasan:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Diberi huruf miring"
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Jan."
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Bergabung atau tinggalkan grup ini"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Jul."
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Jumbo"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Jun."
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Lang"
msgstr "Bhs"
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Bahasa"
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Besar"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Akhir"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Kontak Terakhir"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Kontak Terakhir"
@@ -2332,91 +3472,164 @@ msgstr "Kontak Terakhir"
msgid "Last Notified"
msgstr "Pemberitahuan Terakhir"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Pembaharuan Terakhir"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "Pembaharuan Terakhir Oleh"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Kirim"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Biarkan pengguna ini mengakses RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Biarlah pengguna ini diberi hak-hak"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "Link"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Link sudah ada"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Link tidak dapat dibuat"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Link sudah dibuat (%1)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Link sudah dihapus (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Link tidak ditemukan"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Link tiket #%1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr ""
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Link-link"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Memanggil"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Memanggil pencarian yang disimpan:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "Memanggil pencarian yang disimpan"
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Memanggil modul perl"
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Memanggil pencarian %1"
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Lokasi"
@@ -2424,202 +3637,267 @@ msgstr "Lokasi"
msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
msgstr "Direktori Log %1 tidak ditemukan atau tidak dapat ditulis.\\n RT tidak dapat dijalankan."
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Masuk sebagai %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Login"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Logout"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Mencari tipe yang tidak sesuai (mismatch)"
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Buat Pemilik"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Buat Status"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Buat Tanggal Batas Waktu"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Buat Tanggal Penyelesaian"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Buat Tanggal Mulai"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Buat Tanggal Mulai"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Buat Tanggal Pemberitahuan"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Buat prioritas"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Buat antrian"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Buat subjek"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Buat agar grup ini terlihat pada sisi pengguna"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Mengatur kolom kustom dan nilai kolom kustom"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Mengatur grup dan keanggotaan grup"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Mengatur propertis dan konfigurasi yang akan digunakan di setiap antrian"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Mengatur antrian dan propertis antrian tertentu"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Mengatur pengguna dan sandi"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mar."
-#: lib/RT/Date.pm:445
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Mei."
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Anggota %1 sudah ditambah"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Anggota %1 sudah dihapus"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Anggota sudah ditambah"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Anggota sudah ditambah: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Anggota sudah dihapus"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Anggota tidak dihapus"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Anggota dari"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Anggota-anggota"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "Keanggotaan di dalam %1 sudah ditambah"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "Keanggotaan di dalam %1 sudah dihapus"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Keanggotaan"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "Keanggotaan dari pengguna %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Penggabungan Berhasil"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Penggabungan gagal. Tidak dapat mengatur EffectiveId"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Penggabungan gagal. Tidak dapat mengatur Status"
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Bergabung ke dalam"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Bergabung ke dalam %1"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Pesan"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Pesan tidak dapat dicatat"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Pesan sudah dicatat"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Pesan mengenai Tiket ini tidak akan dikirim ke..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr ""
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
+#: NOT FOUND IN SOURCE
msgid "Mismatched parentheses"
msgstr "tanda kurung tidak sama"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Kunci utama tidak ditemukan?: %1"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Hp"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "Handphone"
@@ -2627,12 +3905,12 @@ msgstr "Handphone"
msgid "Modify Access Control List"
msgstr "Mengubah Daftar Kontrol Akses"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Ubah Kolom Kustom yang digunakan untuk %1 untuk semua %2"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Mengatur Kolom Kustom yang dapat digunakan untuk seluruh %1"
@@ -2641,179 +3919,209 @@ msgstr "Mengatur Kolom Kustom yang dapat digunakan untuk seluruh %1"
msgid "Modify Custom Fields which apply to all queues"
msgstr "Mengatur Kolom Kustom yang dapat digunakan di seluruh antrian"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Ubah Hak Grup"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Ubah Anggota"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Ubah Hak-hak"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Mengubah template Scrip untuk antrian ini"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Mengubah Scrip untuk antrian ini"
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Ubah Hak Pengguna"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Mengubah Kolom Kustom untuk antrian %1"
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Mengubah scrip untuk antrian %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Mengubah scrip yang dapat digunakan di seluruh antrian"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Mengubah objek-objek yang berhubungan untuk %1"
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Mengubah tanggal untuk #%1"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Mengubah tanggal untuk tiket # %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Mengubah kolom kustom global"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Mengubah hak grup global"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Mengubah hak grup global."
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Mengubah hak pengguna global"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Mengubah hak pengguna global."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Mengubah grup metadata atau menghapus grup"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Mengubah hak grup untuk kolom kustom %1"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Mengubah hak grup untuk grup %1"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Mengubah hak grup untuk antrian %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Mengubah daftar nama keanggotaan untuk grup ini"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Mengubah pemilik account RT"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Mengubah orang-orang yang berhubungan dengan antrian %1"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Mengubah orang-orang yang berhubungan dengan tiket #%1"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Mengubah scrip untuk antrian %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Mengubah scrip yang dapat digunakan di seluruh antrian"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Mengubah template %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Mengubah template yang dapat digunakan di seluruh antrian"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr ""
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Mengubah grup %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Mengubah pengamat antrian"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Mengubah pengguna %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Mengubah tiket # %1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Mengubah tiket #%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Mengubah tiket-tiket"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Mengubah hak pengguna untuk kolom kustom %1"
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Mengubah hak pengguna untuk grup %1"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Mengubah hak pengguna untuk antrian %1"
@@ -2822,11 +4130,23 @@ msgstr "Mengubah hak pengguna untuk antrian %1"
msgid "ModifyACL"
msgstr "Mengubah ACL"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "Mengubah Kolom Kustom"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "Mengubah Milik Keanggotaan"
@@ -2834,27 +4154,43 @@ msgstr "Mengubah Milik Keanggotaan"
msgid "ModifyQueueWatchers"
msgstr "Mengubah Pengamat Antrian"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "Mengubah Scrip"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "Mengubah Sendiri"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "Mengubah Template"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "Mengubah Tiket"
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Sen."
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Lebih mengenai %1"
@@ -2863,64 +4199,80 @@ msgstr "Lebih mengenai %1"
msgid "Move"
msgstr "Pindah"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Pindah ke bawah"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Pindah ke atas"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Beberapa"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Harus menentukan 'Nama' attribut"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "%1 tiketku"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr ""
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Izinku"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Pencarian yang kusimpan"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Nama"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Nama yang digunakan"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Tidak pernah"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Baru"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Link Baru"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Sandi Baru"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Izin Baru yang Ditunda"
@@ -2932,63 +4284,72 @@ msgstr "Query Baru"
msgid "New Relationships"
msgstr "Hubungan Baru"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr ""
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Kolom Kustom Baru"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Grup Baru"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Sandi Baru"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Kirim Pemberitahuan Sandi Baru"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Antrian Baru"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr ""
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Hak-hak Baru"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Scrip Baru"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Template Baru"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Tiket Baru"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Tidak ada Tiket baru"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Pengguna Baru"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Pengguna Baru disebut"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Pengamat Baru"
@@ -2996,51 +4357,64 @@ msgstr "Pengamat Baru"
msgid "New window setting"
msgstr "Setting Window Baru"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Berikutnya"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Halaman Berikutnya"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "Nama Panggilan"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Nama Panggilan"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Tidak ada Kelas yang didefinisikan"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Tidak ada Kolom Kustom"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Tidak ada Kolom Kustom yang didefinisikan"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Tidak ada Grup yang didefinisikan"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Tidak ada Query"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Tidak ada Antrian yang didefinisikan"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Tidak ada pengguna RT yang ditemukan. Silakan berkonsultasi dengan administrator RT anda.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Tidak ada Template"
@@ -3048,101 +4422,145 @@ msgstr "Tidak ada Template"
msgid "No Ticket specified. Aborting ticket "
msgstr "Tidak ada Tiket yang ditentukan. Batalkan tiket "
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Tidak ada aksi"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Tidak ada kolom yang ditentukan"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Tidak ada komentar yang dimasukkan mengenai pengguna ini"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Tidak ada deskripsi untuk %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Tidak ada grup yang ditentukan"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Grup yang sesuai dengan kriteria pencarian tidak ditemukan."
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Tidak ada pesan yang dilampirkan"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Tidak ada pengaturan Sandi"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Tidak ada izin untuk membuat antrian"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Tidak ada izin untuk membuat tiket ini di dalam antrian '%1'"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Tidak ada izin untuk membuat pengguna"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Tidak ada izin untuk menampilkan tiket tersebut"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr ""
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Tidak ada izin untuk menampilkan tiket yang sudah diperbaharui"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Tidak ada prinsipal yang ditentukan"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Tidak ada prinsipal yang dipilih."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Antrian yang sesuai dengan kriteria pencarian tidak ditemukan."
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Tidak ada hak-hak yang ditemukan"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Tidak ada hak-hak yang diberikan."
-#: lib/RT/SavedSearch.pm:196
+#: NOT FOUND IN SOURCE
msgid "No search loaded"
msgstr "Tidak ada pencarian yang dipanggil"
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Tidak ada pencarian untuk dijalankan di."
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Tidak ada subjek"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Tidak ada tipe transaksi yang ditentukan"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Pengguna yang sesuai dengan kriteria pencarian tidak ditemukan."
@@ -3150,216 +4568,284 @@ msgstr "Pengguna yang sesuai dengan kriteria pencarian tidak ditemukan."
msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
msgstr "Tidak ada pengguna RT yang valid ditemukan. RT cvs handler dilepaskan. Silakan berkonsultasi dengan administrator RT anda.\\n"
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Tidak ada nilai yang dikirim ke _Set!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Tidak seorangpun"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Kolom kosong?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr ""
-#: html/Elements/Header:96
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Belum log in"
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Belum diatur"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Belum diimplementasikan."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Catatan"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Pemberitahuan tidak dapat dikirimkan"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Beritahu AdminCcs"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Beritahu AdminCcs dengan komentar"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Beritahu Ccs"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Beritahu Ccs dengan komentar"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Beritahu Penerima Lain"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Beritahu Penerima Lain dengan komentar"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Beritahu Pemilik"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Beritahu Pemilik dengan komentar"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Beritahu pemilik bahwa tiketnya ditolak"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Beritahu Pemilik bahwa tiketnya sudah disetujui oleh seluruh pemberi persetujuan"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Beritahu Pemilik bahwa tiketnya sudah disetujui oleh beberapa pemberi persetujuan"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Beritahu Pemilik dan AdminCcs mengenai izin item baru yang ditunda"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Beritahu Pemohon"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Beritahu Pemohon dan Ccs"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Beritahu Pemohon dan Ccs dengan komentar"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Beritahu Pemohon, Ccs dan AdminCcs"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Beritahu Pemohon, Ccs dan AdminCcs dengan komentar"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Nop."
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "ATAU"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Objek tidak dapat dibuat"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Objek tidak dapat dihapus"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Object sudah dibuat"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objek sudah dihapus"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Tipe Objek %1 tidak dapat mengambil kolom kustom"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Tipe Objek tidak sesuai (mismatch)"
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Okt."
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Offline"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Ubah Offline"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Upload Offline"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "Pada"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr ""
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Pada Komentar"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Pada Hubungan"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Pada Pembuatan"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Pada Perubahan Pemilik"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Pada Perubahan Prioritas"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Pada Perubahan Antrian"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Pada Penyelesaian"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Pada Perubahan Status"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Pada Transaksi"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Hanya menampilkan izin untuk permintaan yang dibuat sesudah %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Hanya menampilkan izin untuk permintaan yang dibuat sebelum %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr ""
@@ -3367,15 +4853,19 @@ msgstr ""
msgid "Open"
msgstr "Buka"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr ""
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Buka ini"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Buka tiket"
@@ -3387,15 +4877,19 @@ msgstr "Buka tiket (dari daftar) di window yang baru"
msgid "Open tickets (from listing) in another window"
msgstr "Buka tiket (dari daftar) di window yang lain"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Buka tiket pada korespondensi"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr ""
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Diurutkan sesuai"
@@ -3403,44 +4897,54 @@ msgstr "Diurutkan sesuai"
msgid "Ordering and sorting"
msgstr "Diurutkan dan disortir"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organisasi"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Tiket Awal: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Email yang keluar mengenai komentar yang dicatat"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Email keluar yang dicatat"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Lewat Batas waktu, prioritas pindah ke arah"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Memiliki tiket-tiket"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "Memiliki tiket"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Pemilik"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "Pemilik tidak dapat diatur."
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Pemilik secara paksa digantikan dari %1 ke %2"
@@ -3449,41 +4953,56 @@ msgstr "Pemilik secara paksa digantikan dari %1 ke %2"
msgid "Owner is"
msgstr "Pemilik adalah"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Halaman %1 dari %2"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Pager"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
msgstr "Pager"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
-msgstr "Induk "
+msgstr "Induk"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Sandi"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Pengingat Sandi"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Sandi sudah diubah"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Minimal sandi memerlukan paling sedikit %1 karakter"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr ""
@@ -3491,194 +5010,314 @@ msgstr ""
msgid "Password too short"
msgstr "Sandi terlalu singkat"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Sandi: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr ""
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Sandi tidak sesuai."
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Sandi tidak sesuai. Sandi anda belum diganti"
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Orang-Orang"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Menampilkan aksi pengguna yang belum didefinisikan"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Konfigurasi Perl"
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Izin ditolak"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr ""
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
msgstr ""
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Grup Pribadi"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Grup pribadi"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Grup pribadi:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Nomor Telepon"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Pilihan"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
+msgid "Preferences %1 for user %2."
msgstr ""
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr ""
-#: lib/RT/Action/Generic.pm:195
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Siapkan Potongan Tiket"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Sebelumnya"
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Halaman Sebelumnya"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Prinsipal %1 tidak ditemukan."
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Prioritas"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Prioritas dimulai pada"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Pribadi:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Hak-hak Istimewa"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Status Hak-hak Istimewa: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Pengguna Hak-hak Istimewa"
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Projects"
msgstr "Proyek-Proyek"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudogroup digunakan untuk internal"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
msgid "Query"
msgstr "Query"
-#: html/Search/Build.html:121
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Pembuat Query"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr ""
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Antrian"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
msgstr "Antrian %1 tidak ditemukan"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Nama Antrian"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Antrian sudah ada"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Antrian tidak dapat dibuat"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Antrian tidak dapat dipanggil."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Antrian sudah dibuat"
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Antrian tidak dapat ditemukan"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Antrian-antrian"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr ""
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr ""
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Pencarian Cepat"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Pembuatan Tiket Cepat"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
@@ -3686,98 +5325,219 @@ msgstr "RSS"
msgid "RT %1"
msgstr "RT %1"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 untuk %2"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "Administrasi RT"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "Kesalahan RT"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
-msgstr "Variable RT "
+msgstr "Variable RT"
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "Sekilas RT"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr ""
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT tidak dapat menyimpan sesi anda"
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT untuk %1"
-#: html/Search/Simple.html:58
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr ""
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Nama Asli"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "Nama Asli"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "Referensi oleh %1 sudah ditambah"
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "Referensi oleh %1 sudah dihapus"
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "Referensi ke %1 sudah ditambah"
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "Referensi ke %1 sudah dihapus"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Diserahkan oleh"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Diserahkan ke"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Refine search"
msgstr "Membersihkan pencarian"
-#: html/Elements/Refresh:57
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Refresh halaman ini setiap %1 menit."
@@ -3786,134 +5546,154 @@ msgstr "Refresh halaman ini setiap %1 menit."
msgid "Relationships"
msgstr "Hubungan"
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr ""
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr ""
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr ""
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr ""
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Hapus AdminCc"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Hapus Cc"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Hapus Pemohon"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Balas"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Balas ke Alamat"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Balas ke Pemohon"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Balas ke tiket"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "Balas ke Tiket"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr ""
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Pemohon"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Pemohon"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "permintaan akan melewati batas waktu dalam"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Parameter yang diperlukan '%1' tidak didefinisikan"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Ulangi"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr ""
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Tempat Tinggal"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Penyelesaian"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Penyelesaian tiket #%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Sudah Diselesaikan"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr ""
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr ""
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr ""
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "Balas ke pemohon"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Hasil"
@@ -3921,158 +5701,205 @@ msgstr "Hasil"
msgid "Results per page"
msgstr "Hasil per halaman"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Ketik Ulang Sandi"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Kembali pada"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Hak-hak Utusan"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Memberikan Hak-hak"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Memanggil Hak-hak"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Hak-hak tidak dapat dihilangkan"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Hak-hak tidak ditemukan"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Hak-hak tidak dapat dipanggil."
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Hak-hak tidak dapat dihilangkan"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Hak-hak"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Hak-hak tidak dapat diberikan untuk %1"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "Hak-hak tidak dapat dihilangkan untuk %1"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Aturan"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr ""
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Baris per halaman"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Sab."
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Simpan"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Simpan Perubahan"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Simpan Pilihan"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Simpan perubahaan"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Saved search %1"
msgstr "Simpan pencarian %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Simpan pencarian"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Scrip #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip sudah dibuat"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Kolom Scrip"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip sudah dihapus"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrip"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Scrip yang digunakan di seluruh antrian"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Pencarian"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr ""
-#: lib/RT/SavedSearch.pm:115
+#: NOT FOUND IN SOURCE
msgid "Search attribute load failure"
msgstr "Gagal memanggil atribut pencarian"
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Pencarian untuk izin"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr ""
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
msgstr ""
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr ""
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Search update: %1"
msgstr "Perbaharui Pencarian: %1"
@@ -4080,223 +5907,296 @@ msgstr "Perbaharui Pencarian: %1"
msgid "Searches can't be associated with that kind of object"
msgstr "Pencarian tidak dapat dihubungkan dengan objek yang seperti ini"
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr ""
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Keamanan:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Lihat kolom kustom"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Lihat pesan email yang keluar dan semua penerimanya dengan tepat"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Lihat Penjelasan Tiket Pribadi"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Lihat Ringkasan Tiket"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "Lihat Kolom Kustom"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "Lihat Grup"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "Lihat Antrian"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
msgid "Select"
msgstr "Pilih"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Pilih Kolom Kustom"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Pilih grup"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Pilih antrian"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Pilih antrian untuk tiket baru anda"
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Pilih Pengguna"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Pilih kolom kustom"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Pilih kolom kustom untuk seluruh grup pengguna"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Pilih kolom kustom untuk seluruh pengguna"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Pilih kolom kustom untuk tiket di seluruh antrian"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Pilih kolom kustom untuk transaksi pada tiket di dalam seluruh antrian"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Pilih grup"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Pilih beberapa nilai"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Pilih satu nilai"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Pilih antrian"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr ""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Pilih scrip"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Pilih template"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Pilih sampai %1 nilai"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Pilih pengguna"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Kolom Kustom yang dipilih"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Objek yang dipilih"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr ""
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Kirim pesan ke seluruh pengamat"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Kirim pesan ke seluruh pengamat dengan \"komentar\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Kirim pesan ke pemohon dan Ccs"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Kirim pesan ke pemohon dan Ccs dengan komentar"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Kirim pesan ke pemohon"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Kirim pesan ke Ccs and Bccs yang terdaftar dengan jelas"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Kirim pesan ke Ccs"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Kirim pesan ke Ccs dengan komentar"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Kirim pesan ke Ccs administrasi"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Kirim pesan ke Ccs administrasi dengan komentar"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Kirim pesan ke pemilik"
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Sep."
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Tampilkan"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Tampilkan Izin"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Tampilkan Kolom"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Tampilkan Hasil"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Tamplikan permintaan yang disetujui"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Tampilkan dasar-dasar"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Tampilkan permintaan yang ditolak"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Tampilkan detil"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Tampilkan permintaan yang ditunda"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Tampilkan permintaan izin lain yang ditunggu"
@@ -4304,71 +6204,112 @@ msgstr "Tampilkan permintaan izin lain yang ditunggu"
msgid "ShowACL"
msgstr "Tampilkan ACL"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "Tampilkan Tab Config"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "Tampilkan Email yang Keluar"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "Tampilkan Pencarian yang Disimpan"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "Tampilkan Scrip"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "Tampilkan Template"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "Tampilkan Tiket"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "Tampilkan Komentar Tiket"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Daftar sebagai pemohon tiket atau tiket atau antrian Cc"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Daftar sebagai tiket atau antrian AdminCc"
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Tanda Tangan"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr ""
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Tunggal"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Ukuran"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Lewati Menu"
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Kecil"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr ""
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Sortir"
@@ -4376,47 +6317,79 @@ msgstr "Sortir"
msgid "Sort results by"
msgstr "Sortir hasil dengan"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Tingkat"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Sudah dimulai"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Mulai"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Negara"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Status"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Status Diubah"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Status diubah dari %1 ke %2"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Curi"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Curi tiket"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "Curi Tiket"
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Dicuri dari %1"
@@ -4425,89 +6398,161 @@ msgstr "Dicuri dari %1"
msgid "Stolen from %1 "
msgstr "Dicuri dari %1 "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Gaya"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Subjek"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Subjek diganti menjadi %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Submit"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Berhasil"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Min."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "PenggunaSuper"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Sistem"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Konfigurasi Sistem"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Kesalahan Sistem"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr "Kesalahan sistem: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Peralatan Sistem"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Kesalahan sistem. Hak-hak tidak dapat diserahkan."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Kesalahan sistem. Hak-hak tidak dapat diberikan."
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Grup Sistem"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
-msgstr " GrupAturanSistem yang digunakan untuk internal"
+msgstr "GrupAturanSistem yang digunakan untuk internal"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TES_STRING"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Ambil"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Ambil tiket"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "Ambil Tiket"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Diambil"
@@ -4515,36 +6560,54 @@ msgstr "Diambil"
msgid "Task"
msgstr "Tugas"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Template"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Template #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Template sudah dihapus"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Template tidak ditemukan"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Template parsed"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr ""
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Template-template"
@@ -4552,90 +6615,107 @@ msgstr "Template-template"
msgid "Text"
msgstr "Teks"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Ini adalah nilai yang sekarang"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Ini bukan nilai untuk kolom kustom ini"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Ini adalah nilai yang sama"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Prinsipal ini sudah memiliki hak-hak tersebut"
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Prinsipal ini sudah %1 untuk antrian ini"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Prinsipal ini sudah %1 untuk tiket ini"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Prinsipal ini bukan %1 untuk antrian ini"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Antrian ini tidak ada"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Tiket ini mempunyai ketergantungan yang belum dapat diselesaikan"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Pengguna ini sudah memiliki tiket tersebut"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Pengguna ini tidak ada"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Pengguna ini sudah memiliki hak-hak istimewa"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Pengguna ini sudah tidak memiliki hak-hak istimewa"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Pengguna tersebut sekarang memiliki hak-hak istimewa"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Pengguna tersebut sekarang tidak memiliki hak-hak istimewa"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Pengguna tersebut mungkin tidak memiliki tiket di dalam antrian tersebut"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Ini bukan menurut angka ID"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Dasar-dasar"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "CC tiket"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "CC tiket administrasi"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Perintah berikut ini akan menemukan seluruh tiket yang aktif di dalam antrian 'umum' dan mengatur prioritas mereka ke 99 jika mereka tidak digunakan dalam waktu 4 jam:"
@@ -4643,69 +6723,161 @@ msgstr "Perintah berikut ini akan menemukan seluruh tiket yang aktif di dalam an
msgid "The following commands were not proccessed:\\n\\n"
msgstr "Perintah berikut ini tidak akan dijalankan:\\n\\n"
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Nilai baru sudah diatur."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "Pemilik tiket"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Pemohon tiket"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Komentar ini umumnya tidak jelas bagi pengguna"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Kolom kustom ini tidak dapat digunakan pada objek tersebut"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Fitur ini hanya tersedia untuk sistem administrator"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Pesan ini akan dikirim ke..."
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Alat ini mengijinkan pengguna untuk menjalankan modul perl yang berubah-ubah dari dalam RT."
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Transaksi ini tampaknya tidak memiliki isi"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "Pengguna ini memiliki %1 tiket dengan prioritas tertinggi"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Kms."
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Tiket #%1 Perbaharui Jumbo: %2"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Tiket #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "Tiket %1"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Tiket %1 sudah dibuat di dalam antrian '%2'"
@@ -4714,25 +6886,30 @@ msgstr "Tiket %1 sudah dibuat di dalam antrian '%2'"
msgid "Ticket %1 loaded\\n"
msgstr "Tiket %1 sudah dipanggil\\n"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Tiket %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Tiket Kolom Kustom"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Historis Tiket # %1 %2"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Tiket sudah diselesaikan"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Transaksi Tiket"
@@ -4740,48 +6917,58 @@ msgstr "Transaksi Tiket"
msgid "Ticket attachment"
msgstr "Lampiran Tiket"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Isi Tiket"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Tipe isi Tiket"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Tiket tidak dapat dibuat karena ada kesalahan internal"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Metadata Tiket"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Status tiket sudah diubah"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "Pencarian modul Tiket SQL"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Tiket-tiket"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
msgid "Tickets %1 %2"
msgstr "Tiket %1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "Tiket %1 oleh %2"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr ""
@@ -4789,50 +6976,66 @@ msgstr ""
msgid "Tickets from %1"
msgstr "Tiket dari %1"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr ""
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Tiket yang bergantung dengan izin ini:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Perkiraan Waktu"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Sisa Waktu"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Waktu Kerja"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Sisa waktu"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Waktu untuk ditampilkan"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Waktu kerja"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "Waktu Kerja"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Judul"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "To generate a diff of this commit:"
msgstr "To generate a diff of this commit:"
@@ -4841,61 +7044,95 @@ msgstr "To generate a diff of this commit:"
msgid "To generate a diff of this commit:\\n"
msgstr "To generate a diff of this commit:\\n"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Untuk menanyakan tentang bantuan, latihan, perkembangan kustom atau izin, silakan hubungi %1."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Memberitahukan"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "alat-alat"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr ""
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transaksi"
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Transaksi %1 sudah dibersihkan"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transaksi sudah dibuat"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Kolom Kustom Transaksi"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaksi->Tidak dapat dibuat, karena anda tidak menentukan tipe objek dan id"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Transaksi yang tetap"
-#: lib/RT/Date.pm:418
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Sel."
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Tipe"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Belum diimplementasikan"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Login Unix"
@@ -4903,37 +7140,58 @@ msgstr "Login Unix"
msgid "UnixUsername"
msgstr "Nama Pengguna Unix"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Content Encoding tidak dikenali%1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
+#: NOT FOUND IN SOURCE
msgid "Unknown field: $key"
msgstr "Kolom tidak dikenali: $key"
-#: html/Elements/SelectResultsPerPage:58
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Tidak terbatas"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Pencarian tidak dikenal"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Tidak memiliki hak-hak istimewa"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Kolom Kustom tidak dipilih"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Objek tidak dipilih"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Belum diambil"
@@ -4941,7 +7199,7 @@ msgstr "Belum diambil"
msgid "Untitled search"
msgstr "Pencarian yang tidak memiliki judul"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Perbaharui"
@@ -4949,15 +7207,19 @@ msgstr "Perbaharui"
msgid "Update All"
msgstr "Perbahurui Semua"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Update ID"
msgstr "Perbaharui ID"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Perbaharui Tiket"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Perbaharui Tipe"
@@ -4969,7 +7231,11 @@ msgstr "Perbaharui seluruh tiket ini pada saat yang sama"
msgid "Update email"
msgstr "Perbaharui email"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Perbaharui beberapa tiket"
@@ -4977,7 +7243,7 @@ msgstr "Perbaharui beberapa tiket"
msgid "Update name"
msgstr "Perbaharui nama"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Perbaharui tidak dicatat."
@@ -4989,74 +7255,117 @@ msgstr "Perbaharui tiket yang terpilih"
msgid "Update signature"
msgstr "Perbaharui tanda tangan"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Perbaharui tiket"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Perbaharui tiket #%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Perbaharui tiket #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
-msgstr " Memperbarui tipe baik korespondensi ataupun penjelasan."
+msgstr "Memperbarui tipe baik korespondensi ataupun penjelasan."
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Sudah diperbaharui"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Upload"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Upload beberapa file"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Upload beberapa gambar"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Upload satu file"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Upload satu gambar"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Upload sampai %1 file"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Upload sampai %1 gambar"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Upload perubahan anda"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Gunakan alat administrative RT yang lain"
-#: lib/RT/Ticket_Overlay.pm:506
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "Pengguna '%1' tidak dapat ditemukan."
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Pengguna didefinisikan"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Pengguna mendefinisikan kondisi dan aksi"
@@ -5064,28 +7373,41 @@ msgstr "Pengguna mendefinisikan kondisi dan aksi"
msgid "User ID"
msgstr "ID Pengguna"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Hak Pengguna"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "Pengguna akan ditanya mengenai tipe pembaharuan yang tidak dikenal untuk kolom kustom %1 untuk %2 objek #%3"
-#: html/Admin/Users/Modify.html:301
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Pengguna tidak dapat dibuat: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Pengguna sudah dibuat"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Pengguna mendefinisikan grup"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Pengguna sudah dipanggil"
@@ -5093,222 +7415,422 @@ msgstr "Pengguna sudah dipanggil"
msgid "User view"
msgstr "Lihat Pengguna"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Definisi Grup Pengguna"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Nama Pengguna"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Pengguna"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Pengguna sesuai dengan kriteria pencarian"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr ""
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Query yang valid"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Nilai-nilai"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Amati"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "Amati Sebagai AdminCc"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Pengamat"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "WebEncoding"
msgstr "WebEncoding"
-#: lib/RT/Date.pm:419
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Rabu."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr ""
-#: etc/initialdata:521
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Kalau tiket sudah disetujui oleh semua pemberi persetujuan, tambahkan korespondesi ke tiket yang asli"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "Kalau tiket sudah disetujui oleh beberapa pemberi persetujuan, tambahkan korespondensi ke tiket yang asli"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Kalau tiket sudah dibuat"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Kalau tiket persetujuan sudah dibuat, beritahukan pemilik dan AdminCc dari item yang sedang ditunggu persetujuannya"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Kalau sesuatu terjadi"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Setiap saat tiket dapat diselesaikan"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Setiap saat pemilik tiket dapat diubah"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Setiap saat prioritas tiket dapat diubah"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Setiap saat antrian tiket dapat diubah"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Setiap saat status tiket dapat diubah"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Setiap saat kondisi yang didefinisikan oleh pengguna terjadi"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Setiap saat komentar dapat masuk"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Setiap saat korespondensi dapat masuk"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Bekerja"
-#: html/Search/Results.html:82
+#: NOT FOUND IN SOURCE
msgid "Work offline"
msgstr "Bekerja offline"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "Telepon Kantor"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Sedang Bekerja"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Anda sudah memiliki tiket ini"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Anda bukanlah pengguna yang sah"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Anda hanya bisa menugaskan kembali tiket yang anda miliki atau yang belum anda miliki"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "Anda menemukan %1 tiket di dalam antrian ini %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Anda sudah log out dari RT."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Anda tidak memiliki izin untuk membuat tiket di dalam antrian tersebut."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Anda mungkin tidak akan membuat permintaan di dalam antrian ini."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Anda dapat login kembali"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Permintaan anda sudah disetujui oleh. Persetujuan yang lain mungkin masih ditunda."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Permintaan anda sudah disetujui."
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Permintaan anda sudah ditolak."
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Nama pengguna dan sandi anda tidak sama"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Zip"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Setelah"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "mengijinkan pembuatan pencarian yang disimpan"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "mengijinkan memanggil pencarian yang disimpan"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "sudah diberikan ke %1"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Sebelum"
+
#: NOT FOUND IN SOURCE
msgid "belongs to"
msgstr "Milik"
-#: html/Search/Results.html:83
-msgid "chart"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
msgstr ""
-#: html/SelfService/Closed.html:49
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "sudah ditutup"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "berisi"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "hari"
@@ -5316,93 +7838,140 @@ msgstr "hari"
msgid "deleted"
msgstr "sudah dihapus"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "does not belong to"
msgstr "Bukan milik"
-#: html/Search/Elements/PickBasics:61
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "tidak sama"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "tidak berisi"
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "email address"
msgstr "alamat email"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "sama dengan"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "kesalahan: tidak dapat dipindahkan ke bawah"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "kesalahan: tidak dapat dipindahkan ke kiri"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "kesalahan: tidak dapat dipindahkan ke atas"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "kesalahan: tidak ada apapun yang dapat dihapus"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "kesalahan: tidak ada apapun yang dapat dipindahkan"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "kesalahan: tidak ada apapun yang dapat dihubungkan"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "lebih dari"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "grup '%1'"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr ""
-
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "jam"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "id"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "adalah"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "tidak"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "kurang dari"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "sama"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "mnt"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "menit"
@@ -5410,40 +7979,89 @@ msgstr "menit"
msgid "modifications\\n\\n"
msgstr "perubahan\\n\\n"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "bulan"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "baru"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "tidak ada nama"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "tidak ada nilai"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "tidak satupun"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "tidak sama dengan"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Pada"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "buka"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "grup pribadi '%1' untuk pengguna '%2'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "antrian %1 %2"
@@ -5456,15 +8074,31 @@ msgstr "sudah ditolak"
msgid "resolved"
msgstr "sudah diselesaikan"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "dtk"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "tampilkan tab konfigurasi"
-#: html/Search/Results.html:80
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "spreadsheet"
msgstr "lembar kerja"
@@ -5472,49 +8106,85 @@ msgstr "lembar kerja"
msgid "stalled"
msgstr "alasan"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr ""
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "sistem %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "grup sistem '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "Pemanggilan komponent tidak menetapkan mengapa"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "tiket #%1 %2"
-#: lib/RT/Group_Overlay.pm:236
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "grup yang belum dijelaskan %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "pengguna %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "minggu"
-#: lib/RT/Date.pm:358
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "tahun"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/it.po b/rt/lib/RT/I18N/it.po
index fd9fc49..cc704de 100644
--- a/rt/lib/RT/I18N/it.po
+++ b/rt/lib/RT/I18N/it.po
@@ -1,31 +1,39 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2008-01-17 13:48-0400\n"
-"Last-Translator: Nicola Murino <nicola.murino@gmail.com>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-28 16:46+0000\n"
+"Last-Translator: Michele <superceu@gmail.com>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
+#: NOT FOUND IN SOURCE
msgid " %1 deleted."
msgstr " %1 cancellato."
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 renamed to %2."
msgstr " %1 rinominato a %2"
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 saved."
msgstr " %1 salvato"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (nessuna chiave pubblica!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (non affidabile!)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
msgstr "n°"
@@ -33,73 +41,91 @@ msgstr "n°"
msgid "#%1"
msgstr "n°%1"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "n°%1: %2"
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
-
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr "%1 n°%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %3 %2 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr "(%1 %3 %2 %6 %4:%5)"
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %3 %2 %7 %4:%5:%6"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "Aggiunto %1 %2"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "%1 %2 fa"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 cambiato in %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 eliminato"
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 eliminato."
+
#: NOT FOUND IN SOURCE
msgid "%1 %2 of group %3"
msgstr "%1 %2 del gruppo %3"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 rinominato %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 salvato."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 con il modello %3"
@@ -107,76 +133,95 @@ msgstr "%1 %2 con il modello %3"
msgid "%1 (%2) %3 this ticket\\n"
msgstr "%1 (%2) %3 questo ticket\\n"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) da %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (invariato)"
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr "%1 (dal riquadro %2)"
+
#: NOT FOUND IN SOURCE
msgid "%1 - %2 shown"
msgstr "Mostrati da %1 a %2"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr "%1 - Regola l'opzione LogToScreen"
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - Un parametro da passare a %2"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Visualizza aggiornamenti dello stato su STDOUT"
-#: bin/rt-crontool:253
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
-msgstr "%1 - Specificare l'id del template che vuoi usare"
+msgstr "%1 - Specificare l'id del modello da usare"
-#: bin/rt-crontool:256
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
-msgstr "%1 - Specificare se si vuole usare la prima o l'ultima transazione"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Specificare se si vuole usare la prima (first), l'ultima (last) o tutte (all) le transazioni"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
-msgstr "%1 - Specificare l'azione che si vuole eseguire"
+msgstr "%1 - Specificare l'azione da eseguire"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Specificare la lista dei tipi di transazione da utilizzare, separati da virgole"
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
-msgstr "%1 - Specificare la condizione che si vuole utilizzare"
+msgstr "%1 - Specificare la condizione da utilizzare"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
-msgstr "%1 - Specificare la ricerca che si vuole utilizzare"
+msgstr "%1 - Specificare la ricerca da utilizzare"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr "%1 - Specificare il tipo di transazione che si vuole utilizzare"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "Cruscotti del gruppo %1"
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "ScripAction %1 caricato"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 aggiunto come valore di %2"
@@ -187,37 +232,65 @@ msgstr "gli alias %1 necessitano di un TicketId su cui lavorare"
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on "
-msgstr "gli alias %1 necessitano di un TicketId su cui lavorare"
+msgstr "gli alias %1 necessitano di un TicketId su cui lavorare "
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on (from %2) %3"
msgstr "gli alias %1 necessitano di un TicketId per lavorare con (da %2) %3"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "Il database %1 esiste già e contiene le tabelle di RT, ma non contiene i metadati di sistema. Il passo 'Inizializza Database' può inserire i metadati mancanti all'interno del database esistente. Clicca 'Configurazione di base' qui sotto se vuoi continuare la configurazione."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "Il database %1 esiste già, ma non contiene le tabelle di RT e i necessari metadati di sistema. Il passo 'Inizializza Database' può creare le tabelle e inserire i metadati mancanti all'interno del database esistente. Clicca 'Modifica dati base' qui sotto se vuoi continuare la configurazione."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 sembra essere un oggetto locale, ma non è presente nel database"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "Il database %1 appare già correttamente inizializzato. Non è necessario creare tabelle o inserire metadati di sistema, ma puoi ugualmente cliccare 'Configurazione di base' qui sotto per completare la configurazione."
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 da %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 cambiato da %2 a %3"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "grafico %1 ordinato per %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "copia di %1"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr "configurazione base %1"
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 non può essere impostato a %2"
@@ -225,22 +298,37 @@ msgstr "%1 non può essere impostato a %2"
msgid "%1 couldn't init a transaction (%2)\\n"
msgstr "%1 non ha potuto iniziare una transazione (%2)\\n"
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr "%1 non ho potuto mettere lo stato a risolto. Il database RT potrebbe essere corrotto."
+msgstr "%1 non è stato possibile impostare lo stato a risolto. Il database RT potrebbe essere corrotto."
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "creato %1"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "eliminato %1"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "disabilitato %1"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 non esiste."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "abilitato %1"
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "I %1 ticket a maggior priorità che ho in carico"
@@ -248,25 +336,28 @@ msgstr "I %1 ticket a maggior priorità che ho in carico"
msgid "%1 highest priority tickets I own..."
msgstr "I %1 ticket a maggior priorità che ho in carico..."
-#: NOT FOUND IN SOURCE
-msgid "%1 highest priority tickets I requested..."
-msgstr "I %1 ticket a maggior priorità che ho richiesto..."
-
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 è uno strumento per agire sui ticket da uno schedulatore esterno, per esempio cron."
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 è uno strumento pensato per essere lanciato da cron, che spedisce le notifiche pendenti condensandole in un singolo messaggio riassuntivo per ogni utente."
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
-msgstr "%1 non è più un %2 per questa coda."
+msgstr "%1 non è più %2 per questa coda."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1 non è più un %2 per questo ticket."
+msgstr "%1 non è più %2 per questo ticket."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 non è più un valore per il campo personalizzato %2"
@@ -274,12 +365,12 @@ msgstr "%1 non è più un valore per il campo personalizzato %2"
msgid "%1 isn't a valid Queue id."
msgstr "%1 non è un identificativo di coda valido"
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 min"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "I %1 ticket più recenti non ancora assegnati"
@@ -287,75 +378,101 @@ msgstr "I %1 ticket più recenti non ancora assegnati"
msgid "%1 not shown"
msgstr "%1 non mostrato"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 oggetti"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "Diritti su %1"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr "Configurazione locale %1"
+
#: NOT FOUND IN SOURCE
msgid "%1 succeeded\\n"
msgstr "%1 riuscito\\n"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "Tipo %1 sconosciuto per $MessageId"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "aggiornamento di %1: %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "Tipo %1 sconosciuto per %2"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "aggiornamento di %1: nessuna modifica"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "aggiornato %1"
#: NOT FOUND IN SOURCE
msgid "%1 was created without a CurrentUser\\n"
msgstr "%1 è stato creato senza un CurrentUser\\n"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
-msgstr "%1 risolverà tutti i membri di un gruppo di ticket risolto."
+msgstr "%1 risolverà tutti gli appartenenti a un gruppo di ticket risolto."
#: NOT FOUND IN SOURCE
msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
msgstr "%1 bloccherà una BASE [locale] se dipende da [o è membro di] una richiesta collegata."
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
-msgstr "%2 oggetti di %1"
+msgstr "oggetti %2 di %1"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
-msgstr "%3 oggetti di %2 di %1"
+msgstr "oggetti %3 di %2 di %1"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "Cuscotti di %1"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "ricerche salvate di %1"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: nessun allegato specificato"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1b"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
-msgstr ""
+msgstr "%1 ore"
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' è uno stato non valido"
@@ -372,7 +489,7 @@ msgstr "(spunta la casella per rimuovere un appartenente dal gruppo)"
msgid "(Check box to delete scrip)"
msgstr "(spunta la casella per cancellare uno scrip)"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(spunta la casella per cancellare)"
@@ -380,125 +497,106 @@ msgstr "(spunta la casella per cancellare)"
msgid "(Check boxes to delete)"
msgstr "(spunta le caselle per cancellare)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(i destinatari con la casella spuntata non ricevono la notifica)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(solo i destinatari con la casella spuntata ricevono la notifica)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(inserire i numeri o gli URL dei ticket, separati da spazi)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
-msgstr "(Se non specificato usa: %1)"
+msgstr "(Se non specificato userà: %1)"
#: NOT FOUND IN SOURCE
msgid "(No Value)"
msgstr "(nessun valore)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(nessun campo personalizzato)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(nessun appartenente)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(nessuno Scrip)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(nessun modello)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(nessuno)"
-#: NOT FOUND IN SOURCE
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
-msgstr "(invia copia silente di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà</b> i destinatari dei successivi aggiornamenti.)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
-msgstr "(invia copia silente di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierò</b> i destinatari dei successivi aggiornamenti.)"
-
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "invia copia silente di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà</b> i destinatari dei successivi aggiornamenti."
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
-msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email amministrativi separati da virgole. Queste persone <b>riceveranno</b> i successivi aggiornamenti.)"
-
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "invia copia di questo aggiornamento ad una lista di indirizzi email amministrativi separati da virgole. Questi destinatari <b>riceveranno</b> i successivi aggiornamenti."
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
-msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà</b> i destinatari dei successivi aggiornamenti.)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
-msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà</b> i destinatari dei successivi aggiornamenti.)"
+msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email amministrativi, separati da virgole. Questi destinatari <strong>riceveranno</strong> eventuali successivi aggiornamenti.)"
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "invia copia di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà</b> i destinatari dei successivi aggiornamenti."
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
-msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Queste persone <b>riceveranno</b> i successivi aggiornamenti.)"
-
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Queste persone <b>riceveranno</b> i successivi aggiornamenti.)"
+msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email, separati da virgole. Questi destinatari <strong>riceveranno</strong> eventuali successivi aggiornamenti.)"
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(usa questi campi se si sceglie 'Definito dall'utente' come condizione o azione)"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
-msgstr "(Non sarà inviata la mail)"
+msgstr "(Non riceverà mail)"
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(qualsiasi)"
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(vuoto)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(nessun nome in elenco)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(nessuna chiave pubblica!)"
+
#: NOT FOUND IN SOURCE
msgid "(no subject)"
msgstr "(nessun oggetto)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(nessun valore)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(nessun valore)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(un solo ticket)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(%1 altri ticket in sospeso)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(in attesa di approvazione)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(in attesa di un'altra Raccolta)"
@@ -510,24 +608,37 @@ msgstr "(in attesa di altri ticket)"
msgid "(requestor's group)"
msgstr "(gruppo del richiedente)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
-msgstr "(richiesto)"
+msgstr "(obbligatorio)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(affidabilità: %1)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
-msgstr "messaggio"
+msgstr "(senza titolo)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr "(aaaa/mm/gg)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(non fidato!)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr "-"
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "il parametro --transaction può valere solo 'first', 'last' o 'all'"
+
+#: NOT FOUND IN SOURCE
+msgid "1995-11-25 21:59:12"
msgstr "-- l'argomento della transazione può essere solo 'primo' o 'ultimo'"
#: NOT FOUND IN SOURCE
@@ -538,37 +649,25 @@ msgstr "I 25 ticket con priorità più alta che ho in carico..."
msgid "25 highest priority tickets I requested..."
msgstr "I 25 ticket con priorità più alta da me richiesti..."
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr ""
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
-msgstr ""
-
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr ""
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"Nuovo ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Crea un ticket in\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Crea un ticket in\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Tutti i feed iCal includono un token segreto di autorizzazione. Se l'URL di un tuo feed iCal è stato reso pubblico per errore, è meglio generare un nuovo token segreto qui sotto, <b>invalidando tutti i feed iCal precedenti</b>.</p>"
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Un modello vuoto"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "La password non è stata impostata, l'utente non potrà accedere."
@@ -588,76 +687,80 @@ msgstr "impossibile eliminare l'ACE"
msgid "ACE could not be found"
msgstr "impossibile trovare l'ACE"
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE non trovata"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "Le ACE possono essere solo create e cancellate."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Aborting to avoid unintended ticket modifications.\\n"
-msgstr "Interruzione per evitare modifiche di ticket involontarie.\\n"
+msgstr "AND"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Informazioni personali"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Controllo di Accesso"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Azione"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Azione %1 non trovata"
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Azione '%1' non trovata"
+
#: NOT FOUND IN SOURCE
msgid "Action committed."
msgstr "Azione eseguita."
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Azione eseguita.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr "L'azione è un argomento obbligatorio"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Azione preparata..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Aggiungi"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Aggiungi AdminCc"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Aggiungi a preferiti"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Aggiungi Cc"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Aggiungi colonne"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Aggiungi criterio"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Aggiungi altri file"
@@ -665,11 +768,11 @@ msgstr "Aggiungi altri file"
msgid "Add Next State"
msgstr "Aggiungi prossimo stato"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
-msgstr "Aggiungi il richiedente"
+msgstr "Aggiungi un richiedente"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Aggiungi un valore"
@@ -685,7 +788,7 @@ msgstr "Aggiungi un nuovo scrip globale"
msgid "Add a scrip to this queue"
msgstr "Aggiungi uno scrip a questa coda"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Aggiungi uno scrip da applicare a tutte le code"
@@ -693,69 +796,69 @@ msgstr "Aggiungi uno scrip da applicare a tutte le code"
msgid "Add additional criteria"
msgstr "Aggiungi criteri addizionali"
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr "Aggiungi e cerca"
-
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Aggiungere commenti o repliche ai ticket selezionati"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Aggiungi appartenenti"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Aggiungi nuovi osservatori"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
msgstr "Aggiungi questi termini alla ricerca"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Aggiungi questi termini ed esegui la ricerca"
+
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "Aggiungi valori"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Aggiungi, cancella o modifica il valore dei campi personalizzati per gli oggetti"
-#: NOT FOUND IN SOURCE
-msgid "AddNextState"
-msgstr "Aggiungi Prossimo Stato"
-
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Aggiunto gruppo/utente come %1 per questa coda"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Aggiunto gruppo/utente come %1 per questo ticket"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Indirizzo"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Indirizzo1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Indirizzo2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Cc amministrativo"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Commento Amministrativo"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Corrispondenza Amministrativa"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Gestione delle code"
@@ -763,7 +866,7 @@ msgstr "Gestione delle code"
msgid "Admin users"
msgstr "Gestione degli utenti"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Amministra/Configurazione globale"
@@ -775,14 +878,22 @@ msgstr "Gestione/Gruppi"
msgid "Admin/Queue/Basics"
msgstr "Gestione/Code/Base"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "AdminAllPersonalGroups"
msgstr "GestisciTuttiGruppiPersonali"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "GruppoDiAdminCc"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCc"
+
#: NOT FOUND IN SOURCE
msgid "AdminComment"
msgstr "GestisciCommenti"
@@ -791,23 +902,19 @@ msgstr "GestisciCommenti"
msgid "AdminCorrespondence"
msgstr "GestisciCorrispondenza"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "GestisciCampoPers."
-#: NOT FOUND IN SOURCE
-msgid "AdminCustomFields"
-msgstr "GestisciCampiPers."
-
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "GestisciGruppo"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "GestisciAppartenenzaGruppo"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "GestisciGruppiPersonali"
@@ -815,19 +922,23 @@ msgstr "GestisciGruppiPersonali"
msgid "AdminQueue"
msgstr "GestisciCoda"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "GestisciUtenti"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
-msgstr "AdminCc"
+msgstr "Cc Amministrativo"
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Password di amministrazione"
#: NOT FOUND IN SOURCE
msgid "Admins"
msgstr "Amministratori"
-#: html/Ticket/Elements/Tabs:216
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Avanzata"
@@ -835,15 +946,11 @@ msgstr "Avanzata"
msgid "Advanced Search"
msgstr "Ricerca avanzata"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "dopo il"
-
#: NOT FOUND IN SOURCE
msgid "Age"
msgstr "Età"
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Aggregatore"
@@ -851,7 +958,7 @@ msgstr "Aggregatore"
msgid "Alias for"
msgstr "Alias per"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Ottenute tutte le approvazioni"
@@ -859,47 +966,51 @@ msgstr "Ottenute tutte le approvazioni"
msgid "All Custom Fields"
msgstr "Tutti i campi personalizzati"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Tutte le code"
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Già crittografato"
+
#: NOT FOUND IN SOURCE
msgid "Always sends a message to the requestors independent of message sender"
msgstr "Invia comunque un messaggio al richiedente, anche se è lui stesso il mittente"
-#: html/Search/Elements/EditQuery:56
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
-msgstr ""
+msgstr "And/Or"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "Si applica a"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Applica"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Applica modifiche"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Approvazione"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Approvazione n°%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Approvazione n°%1: Note non registrate a causa di un errore di sistema"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Approvazione n°%1: Note registrate"
@@ -908,11 +1019,15 @@ msgstr "Approvazione n°%1: Note registrate"
msgid "Approval Details"
msgstr "Dettagli dell'approvazione"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Approvazione ottenuta"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Approvazione pronta per l'Incaricato"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Approvazione rifiutata"
@@ -920,15 +1035,19 @@ msgstr "Approvazione rifiutata"
msgid "Approval diagram"
msgstr "Diagramma dell'approvazione"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Approva"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Note dell'approvatore: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Apr"
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Apr."
@@ -936,56 +1055,68 @@ msgstr "Apr."
msgid "April"
msgstr "Aprile"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
-msgstr ""
+msgstr "Cresc"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Crescente"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Assegna e rimuovi campi personalizzati"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "AssegnaCampiPers."
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Allega"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Allega un file"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "File allegato"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Allegato"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Impossibile caricare l'allegato '%1'"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Allegato creato"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Nome file dell'allegato"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Allegati"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "La crittografia per gli allegati è disabilitata"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Attributo cancellato"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Ago"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Ago."
@@ -997,11 +1128,11 @@ msgstr "Agosto"
msgid "AuthSystem"
msgstr "SistemaAutorizzazioni"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
-msgstr "RispostaAutomatica"
+msgstr "Risposta automatica"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Risposta automatica ai richiedenti"
@@ -1009,13 +1140,17 @@ msgstr "Risposta automatica ai richiedenti"
msgid "AutoreplyToRequestors"
msgstr "RispostaAutomaticaAiRichiedenti"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Disponibile"
-#: NOT FOUND IN SOURCE
-msgid "Bad PGP Signature: %1\\n"
-msgstr "Firma PGP invalida: %1\\n"
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "CCn"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Indietro"
#: NOT FOUND IN SOURCE
msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
@@ -1025,31 +1160,32 @@ msgstr "Identificativo allegato errato. Impossibile trovare l'allegato '%1'\\n"
msgid "Bad data in %1"
msgstr "Dati incorretti in %1"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr "Privacy dell'attributo %1 incorretta"
+
#: NOT FOUND IN SOURCE
msgid "Bad transaction number for attachment. %1 should be %2\\n"
msgstr "Numero di transazione incorretto per l'allegato. %1 dovrebbe essere %2\\n"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Dati base"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Bcc"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Se hai aggiornato qualche impostazione, assicurati di premere"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "prima del"
-
#: NOT FOUND IN SOURCE
msgid "Begin Approval"
msgstr "Inizia approvazione"
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Logo Best Practical Solutions, LLC"
@@ -1057,27 +1193,39 @@ msgstr "Logo Best Practical Solutions, LLC"
msgid "Binary"
msgstr "Binario"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Vuoto"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Testo"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Grassetto"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Preferiti"
+
#: NOT FOUND IN SOURCE
msgid "Bookmarkable URL for this search"
msgstr "URL assoluto per questa ricerca"
-#: html/Search/Results.html:79
+#: NOT FOUND IN SOURCE
msgid "Bookmarkable link"
msgstr "Link assoluto"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Ticket preferiti"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
-msgstr "Intestazione breve"
+msgstr "Intestazioni abbreviate"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Aggiornamenti multipli"
@@ -1085,7 +1233,23 @@ msgstr "Aggiornamenti multipli"
msgid "Bulk ticket update"
msgstr "Modifica di ticket in blocco"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Acquista assistenza"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "In mancanza di una scelta esplicita, RT utilizza le informazioni di fuso orario del server. Questo permette di avere un'impostazione predefinita per la visualizzazione delle date. Ogni utente, nelle proprie preferenze, può scegliere un'impostazione diversa per il fuso orario."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "GruppoDiCc"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr "CP"
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Gli utenti di sistema non possono essere modificati"
@@ -1093,20 +1257,20 @@ msgstr "Gli utenti di sistema non possono essere modificati"
msgid "Can this principal see this queue"
msgstr "Può il gruppo/utente vedere questa coda"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Impossibile aggiungere un valore di campo personalizzato senza un nome"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "Impossibile trovare una classe collection per '%1'"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Impossibile trovare una ricerca salvata su cui lavorare"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Non è possibile collegare un ticket a se stesso"
@@ -1114,69 +1278,117 @@ msgstr "Non è possibile collegare un ticket a se stesso"
msgid "Can't merge into a merged ticket. You should never get this error"
msgstr "Impossibile unire un ticket ad un ticket già unito. Questo errore non dovrebbe mai verificarsi"
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr "Impossibile salvare %1"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Impossibile salvare questa ricerca"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Impossibile specificare sia la base che il target"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Impossibile creare ticket in una coda disabilitata."
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Impossibile creare l'utente: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Categoria"
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Categoria non impostata"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Cc"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Cambia"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Cambia la password"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Spunta tutte le caselle"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Controlla connessione al database"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr "Verifica le credenziali di accesso al database"
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Spunta la casella per cancellare"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Spunta la casella per revocare i diritti"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Controlla le credenziali per l'accesso al database"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Derivati"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
-msgstr "Scegli una data"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr "Scegli un tipo di database"
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Scegli un tipo di server database"
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Città"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Azzera"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Azzera"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Premi \"Completa installazione\" qui sotto per concludere l'installazione guidata."
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Premi \"Inizializza database\" per creare il database di RT e inserire i dati di sistema. L'operazione potrebbe richiedere qualche tempo"
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Chiudi finestra"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Chiuso"
@@ -1188,19 +1400,19 @@ msgstr "Ticket chiusi"
msgid "Closed requests"
msgstr "Richieste chiuse"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Ticket chiusi"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Combobox: seleziona o inserisci valori multipli"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Combobox: seleziona o inserisci un valore"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Combobox: seleziona o inserisci fino a %1 valori"
@@ -1208,35 +1420,43 @@ msgstr "Combobox: seleziona o inserisci fino a %1 valori"
msgid "Command not understood!\\n"
msgstr "Comando non riconosciuto!\\n"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Commento"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
-msgstr "Indirizzo per i commenti"
+msgstr "Indirizzo email per i commenti"
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Indirizzo email per i commenti"
#: NOT FOUND IN SOURCE
msgid "Comment not recorded"
msgstr "Commento non registrato"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
-msgstr "Aggiunta di commenti ai ticket"
+msgstr "Aggiungere commenti ai ticket"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "EmailCommenti"
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "AggiungiCommentiAlTicket"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Commenti"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Commenti (non inviati ai richiedenti)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Commenti (non inviati ai richiedenti)"
@@ -1244,71 +1464,97 @@ msgstr "Commenti (non inviati ai richiedenti)"
msgid "Comments about %1"
msgstr "Commenti su %1"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Commenti su questo utente"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
-msgstr "Aggiunto commento"
+msgstr "Aggiunti commenti"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
-msgstr ""
+msgstr "Esecuzione saltata"
#: NOT FOUND IN SOURCE
msgid "Compile Restrictions"
msgstr "Restrizioni di compilazione"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Condizione"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Condizione '%1' non trovata"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr "La condizione è un campo obbligatorio"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "La condizione è soddisfatta..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Condizione non trovata"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Condizione, azione e modello"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Il file di configurazione %1 è bloccato"
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Configurazione"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Conferma"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Connessione completata"
+
#: NOT FOUND IN SOURCE
msgid "ContactInfoSystem"
msgstr "ContactInfoSystem"
-#: NOT FOUND IN SOURCE
-msgid "Contacted date '%1' could not be parsed"
-msgstr "Impossibile interpretare la data di contatto '%1'"
-
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Contenuto"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
-msgstr ""
+msgstr "Content-Type"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "TipoDiContenuto"
#: NOT FOUND IN SOURCE
msgid "Coould not create group"
msgstr "Impossibile creare il gruppo"
-#: html/Search/Elements/EditSearches:65
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Copia"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "Indirizzo di corrispondenza"
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr "EmailCorrispondenza"
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Corrispondenza"
@@ -1316,7 +1562,7 @@ msgstr "Corrispondenza"
msgid "Correspondence Address"
msgstr "Inidirizzo di corrispondenza"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Aggiunta corrispondenza"
@@ -1332,43 +1578,59 @@ msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato al ticket
msgid "Could not add new custom field value for ticket. %1 "
msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato al ticket. %1 "
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato. "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato. %1 "
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato: %1"
+
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "Impossibile cambiare l'incaricato. "
-#: html/Admin/CustomFields/Modify.html:161
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Impossibile cambiare l'incaricato: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Impossibile creare il campo personalizzato"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "Impossibile creare il campo personalizzato: %1"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Impossibile creare il gruppo"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Impossibile creare il modello: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Impossibile creare un ticket nella coda disabilitata \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Impossibile creare il ticket. Queue non impostata"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Impossibile creare l'utente"
@@ -1384,11 +1646,11 @@ msgstr "Impossibile trovare il ticket numero %1"
msgid "Could not find group %1."
msgstr "Impossibile trovare il gruppo %1."
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Impossibile trovare o creare questo utente"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Impossibile trovare questo gruppo/utente"
@@ -1396,59 +1658,75 @@ msgstr "Impossibile trovare questo gruppo/utente"
msgid "Could not find user %1."
msgstr "Impossibile trovare l'utente %1."
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Impossibile caricare l'attributo %1"
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Impossibile caricare il campo personalizzato %1"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
-msgstr "Impossibile caricare questo gruppo"
+msgstr "Impossibile caricare il gruppo"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "Impossibile caricare l'oggetto per %1"
-#: lib/RT/SavedSearch.pm:197
+#: NOT FOUND IN SOURCE
msgid "Could not load search attribute"
msgstr "Impossibile caricare un attributo della ricerca"
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
-msgstr "Impossibile rendere questo gruppo/utente un %1 per questa coda"
+msgstr "Impossibile rendere questo gruppo/utente %1 per questa coda"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
-msgstr "Impossibile rendere questo gruppo/utente un %1 per questo ticket"
+msgstr "Impossibile rendere questo gruppo/utente %1 per questo ticket"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
-msgstr "Impossibile rimuovere questo gruppo/utente come un %1 per questa coda"
+msgstr "Impossibile rimuovere questo gruppo/utente da %1 per questa coda"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
-msgstr "Impossibile rimuovere questo gruppo/utente come un %1 per questo ticket"
+msgstr "Impossibile rimuovere questo gruppo/utente da %1 per questo ticket"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Impossibile impostare le informazioni dell'utente"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr "Impossibile aggiugere l'allegato"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Impossibile aggiungere un appartenente al gruppo"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Impossibile creare una transazione: %1"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Impossibile creare il record"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Impossibile cancellare il cruscotto %1: %2"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't figure out what to do from gpg's reply\\n"
msgstr "Impossibile capire che cosa fare con questa risposta gpg\\n"
@@ -1457,15 +1735,19 @@ msgstr "Impossibile capire che cosa fare con questa risposta gpg\\n"
msgid "Couldn't find group\\n"
msgstr "Impossibile trovare il gruppo\\n"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Impossibile trovare la riga"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Impossibile trovare una transazione adatta, procedo oltre"
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Impossibile trovare questo gruppo/utente"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Impossibile trovare questo valore"
@@ -1477,20 +1759,25 @@ msgstr "Impossibile trovare questo osservatore"
msgid "Couldn't find user\\n"
msgstr "Impossibile trovare l'utente\\n"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Impossibile caricare %1 dal database degli utenti.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "Impossibile caricare la classe %1"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Impossibile caricare il campo personalizzato n°%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
-msgstr "Impossibile caricare ilcampo personalizzato %1"
+msgstr "Impossibile caricare il campo personalizzato %1"
#: NOT FOUND IN SOURCE
msgid "Couldn't load KeywordSelects."
@@ -1500,83 +1787,181 @@ msgstr "Impossibile caricare KeywordSelects"
msgid "Couldn't load RT config file '%1' %2"
msgstr "Impossibile caricare il file di configurazione RT '%1' %2"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load Scrips."
-msgstr "Impossibile caricare gli Scrips"
-
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
-msgstr "Impossibile caricare la copia del ticket #%1."
+msgstr "Impossibile caricare una copia del ticket n°%1."
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Impossibile caricare il cruscotto %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Impossibile caricare il cruscotto %1: %2"
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Impossibile caricare il gruppo n°%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Impossibile caricare il gruppo %1"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Impossibile caricare il collegamento"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Impossibile caricare l'oggetto %1"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Impossibile caricare o creare l'utente: %1"
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Impossibile caricare la coda"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Impossibile caricare la coda n°%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "Impossibile caricare la coda %1"
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Impossibile caricare la coda '%1'"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load scrip"
msgstr "Impossibile caricare lo Scrip"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
-msgstr "Impossibile caricare lo Scrip #%1"
+msgstr "Impossibile caricare lo Scrip n°%1"
#: NOT FOUND IN SOURCE
msgid "Couldn't load template"
msgstr "Impossibile caricare il modello"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Impossibile caricare il modello n°%1"
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load that user (%1)"
msgstr "Impossibile caricare questo utente (%1)"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "Impossibile caricare il ticket '%1'"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "Impossibile caricare la transazione n°%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Impossibile caricare l'utente n°%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Impossibile recuperare un indirizzo email dal valore '%1'"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Impossibile rimpiazzare il contenuto con i dati decrittografati: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Impossibile rimpiazzare il contenuto con i dati crittografati: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
-msgstr "Impossibile convertire %1 in un URI."
+msgstr "Impossibile convertire '%1' in un URI."
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr "Impossibile convertire la base '%1' in un URI."
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr "Impossibile convertire la destinazione '%1' in un URI."
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Impossibile inviare email"
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "Impossibile impostare l' osservatore %1: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "Impossibile impostare la chiave privata"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Impossibile annullare la chiave privata"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Nazione"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Crea"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Crea ticket"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Crea un campo Personalizzato"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Crea un campo personalizzato per la coda %1"
@@ -1589,15 +1974,19 @@ msgstr "Crea un campo personalizzato valido per tutte le code"
msgid "Create a new Custom Field"
msgstr "Crea un nuovo campo personalizzato"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Crea nuovo cruscotto"
+
#: NOT FOUND IN SOURCE
msgid "Create a new global scrip"
msgstr "Crea un nuovo scrip globale"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Crea un nuovo gruppo"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Crea un nuovo gruppo personale"
@@ -1613,15 +2002,15 @@ msgstr "Crea un nuovo scrip"
msgid "Create a new template"
msgstr "Crea un nuovo modello"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Crea un nuovo ticket"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Crea un nuovo utente"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Crea una coda"
@@ -1633,40 +2022,56 @@ msgstr "Crea una nuova coda di nome"
msgid "Create a request"
msgstr "Crea una richiesta"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Crea uno scrip per la coda %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Crea un modello"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Nuovo ticket"
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Crea cruscotto per questo gruppo"
+
#: NOT FOUND IN SOURCE
msgid "Create failed: %1 / %2 / %3 "
-msgstr "Creazione fallita: %1 / %2 / %3"
+msgstr "Creazione fallita: %1 / %2 / %3 "
#: NOT FOUND IN SOURCE
msgid "Create failed: %1/%2/%3"
msgstr "Creazione fallita: %1/%2/%3"
-#: etc/initialdata:137
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
-msgstr "Creare nuovi ticket basati su questo modello di scrip"
+msgstr "Creare nuovi ticket basati sul modello di questo scrip"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Crea cruscotti personali"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Crea cruscotti di sistema"
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Crea il ticket"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Crea nuovi ticket in questa coda"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Crea ticket fuori-linea"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Crea, elimina e modifica campi personalizzati"
@@ -1674,80 +2079,97 @@ msgstr "Crea, elimina e modifica campi personalizzati"
msgid "Create, delete and modify queues"
msgstr "Crea, elimina e modifica le code"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "Create, delete and modify the members of any user's personal groups"
msgstr "Crea, elimina e modifica gli appartenenti ai gruppi personali di un qualunque utente"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
-msgstr "Crea, elimina e modifica gli appartenenti ai gruppi personali "
+msgstr "Crea, elimina e modifica gli appartenenti ai gruppi personali"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Crea, elimina e modifica gli utenti"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "CreaCruscotto"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "CreaDashboardPerGruppo"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "CreaDashboardPersonali"
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr "CreaRichiestaSalvata"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "CreaTicket"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Creato"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/ColumnMap:76
msgid "Created By"
msgstr "Creato da"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Campo personalizzato %1 creato"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
-msgstr "Creato in un range di date"
+msgstr "Creato in un intervallo di date"
#: NOT FOUND IN SOURCE
msgid "Created template %1"
msgstr "Modello %1 creato"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Ticket creati in un periodo, raggruppati per stato"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "CreatedBy"
msgstr "CreatoDa"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "CreatedRelative"
msgstr "TempoDaCreazione"
-#: html/Search/Elements/PickBasics:102
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "CreatoDa"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Crittografia"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Collegamenti attuali"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Scrips attuali"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Appartenenti attuali"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Diritti attuali"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Ricerca attuale"
@@ -1755,7 +2177,7 @@ msgstr "Ricerca attuale"
msgid "Current search criteria"
msgstr "Criterio di ricerca attuale"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Osservatori attuali"
@@ -1763,47 +2185,53 @@ msgstr "Osservatori attuali"
msgid "Custom Field #%1"
msgstr "Campo personalizzato n°%1"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Campi personalizzati"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Campi personalizzati per %1"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Programma di pulizia dell'azione personalizzata"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Programma di preparazione dell'azione personalizzata"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Condizione personalizzata"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
-msgstr "Campi personalizzati %1 %2 %3"
+msgstr "Campo personalizzato %1 %2 %3"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "L'oggetto non ammette il campo personalizzato %1"
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Il campo personalizzato %1 ha un valore."
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Il campo personalizzato %1 non ha valore."
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Campo personalizzato %1 non trovato"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
@@ -1817,7 +2245,7 @@ msgstr "Campo personalizzato cancellato"
msgid "Custom field not found"
msgstr "Campo personalizzato %1 non trovato"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Impossibile trovare il valore %1 per il campo personalizzato %2"
@@ -1826,35 +2254,137 @@ msgstr "Impossibile trovare il valore %1 per il campo personalizzato %2"
msgid "Custom field value changed from %1 to %2"
msgstr "Valore del campo personalizzato cambiato da %1 a %2"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Impossibile cancellare il valore del campo personalizzato"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Valore del campo personalizzato non trovato"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Il valore del vampo personalizzato è stato eliminato"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "CampoPersonalizzato"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "ValoreCampoPersonalizzato"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "Personalizza"
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Configurazione di base"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "Modifica dettagli database"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Modifica indirizzi email"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Modifica configurazione email"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "Modifica impostazioni globali"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global Defaults"
+msgstr "Modifica impostazioni predefinite"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "Password per amministrazione"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "Username per amministrazione"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Riassunto giornaliero"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Cruscotto"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Impossibile creare il cruscotto: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Impossibile aggiornare il cruscotto: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Cruscotto aggiornato"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Cruscotti"
+
#: NOT FOUND IN SOURCE
msgid "Data error"
msgstr "Errore nei dati"
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Server database"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Nome database"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Password per accesso al database da parte di RT"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Porta del database"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Tipo di database"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Username per accesso al database da parte di RT"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Formato data"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr "Manca il modulo DateTime"
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr "Manca il modulo DateTime::Locale"
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Date"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Dic"
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Dic."
@@ -1862,88 +2392,152 @@ msgstr "Dic."
msgid "December"
msgstr "Dicembre"
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Decifra"
+
#: NOT FOUND IN SOURCE
msgid "Default Autoresponse Template"
msgstr "Modello di default per la risposta automatica"
-#: etc/initialdata:222
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Modello di default per la risposta automatica"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Coda di default"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Richiedente di default"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Modello di default per il commento amministrativo"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Modello di default per la corrispondenza amministrativa"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Modello di default per la corrispondenza"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Coda di default"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Modello di default per la transazione"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Default: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Default: %1/%2 modificato da %3 a %4"
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr "RisolvereEntroPredefinito"
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr "FormatoPredefinito"
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Delega i diritti"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Delega diritti specifici tra quelli che ti sono stati accordati"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "DelegaDiritti"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Delega"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Cancella"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Cancella modello"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Cancella cruscotto per questo gruppo"
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Cancellazione fallita: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Cancella cruscotti personali"
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Cancella gli scrips selezionati"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Cancella cruscotto di sistema"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Cancella ticket"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr "Cancella valori"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "CancellaCruscotto"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "CancellaCruscottoDiGruppo"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "CancellaProprioCruscotto"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "CancellaTicket"
-#: lib/RT/SavedSearch.pm:218
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "Cancellato %1"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Cruscotto %1 cancellato"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr "Ricerche cancellate"
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Ricerca cancellata"
+
+#: NOT FOUND IN SOURCE
msgid "Deleted search"
msgstr "Ricerca cancellata"
@@ -1951,11 +2545,11 @@ msgstr "Ricerca cancellata"
msgid "Deleting this object could break referential integrity"
msgstr "La cancellazione di quest'oggetto può danneggiare l'integrità referenziale"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "La cancellazione di quest'oggetto danneggerebbe l'integrità referenziale"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale"
@@ -1967,15 +2561,15 @@ msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale"
msgid "Deleting this object would violate referential integrity. That's bad."
msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale. Ciò è male!"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Nega"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "È una dipendenza per"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "DependedOnBy"
msgstr "DipendenzaPer"
@@ -1983,47 +2577,51 @@ msgstr "DipendenzaPer"
msgid "Dependencies: \\n"
msgstr "Dipendenze: \\n"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Aggiunta dipendenza da parte di %1"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Cancellata dipendenza da parte di %1"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Aggiunta dipendenza da %1"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "Cancellata dipendenza da %1"
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr "DipendenteDa"
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Dipende da"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "DependsOn"
msgstr "DipendeDa"
-#: html/Search/Elements/DisplayOptions:86
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
-msgstr ""
+msgstr "Disc"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Decrescente"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Descrivi il problema qui sotto"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Descrizione"
@@ -2031,7 +2629,15 @@ msgstr "Descrizione"
msgid "Details"
msgstr "Dettagli"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Direzione"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Disabilitato"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Visualizza"
@@ -2039,35 +2645,31 @@ msgstr "Visualizza"
msgid "Display Access Control List"
msgstr "Visualizza la Lista Controllo Accessi (ACL)"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Visualizza colonne"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Visualizza i modelli di Scrips per questa coda"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Visualizza gli Scrips per questa coda"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Modalità visualizzazione"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Visualizza le ricerche salvate per questo gruppo"
-#: NOT FOUND IN SOURCE
-msgid "Display ticket #%1"
-msgstr "Visualizza il ticket n°%1"
-
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Distribuito in accordo con la versione 2 della <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU GPL</a>."
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Fai di tutto e di più"
@@ -2075,7 +2677,23 @@ msgstr "Fai di tutto e di più"
msgid "Do the Search"
msgstr "Esegui la ricerca"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Nome DNS"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Non scrivere anche http://, è sufficiente un nome tipo 'localhost' o 'rt.azienda.it'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Non aggiornare questa pagina."
@@ -2083,15 +2701,23 @@ msgstr "Non aggiornare questa pagina."
msgid "Don't show search results"
msgstr "Non mostrare i risultati della ricerca"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Questa chiave non è assolutamente affidbile"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Visualizza"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Scarica come file separato da TAB"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Download archivio oggetti eliminati"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Scadenza"
@@ -2099,15 +2725,24 @@ msgstr "Scadenza"
msgid "Due date '%1' could not be parsed"
msgstr "Impossibile interpretare la data di scadenza '%1'"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "DueRelative"
msgstr "TempoDaScadenza"
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "ERRORE: %1"
+
#: NOT FOUND IN SOURCE
msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
msgstr "ERRORE: impossibile caricare il ticket '%1' : %2.\\n"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Aggiornamento facilitatao dei ticket aperti che hai in carico"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Modifica"
@@ -2115,24 +2750,28 @@ msgstr "Modifica"
msgid "Edit Conditions"
msgstr "Modifica condizioni"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr "Modifica campi personalizzati"
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Modifica i campi personalizzati per %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Modifica i campi personalizzati per tutti i gruppi"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Modifica i campi personalizzati per tutte le code"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Modifica i campi personalizzati per tutti gli utenti"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Modifica i campi personalizzati per tutte le code"
@@ -2140,19 +2779,19 @@ msgstr "Modifica i campi personalizzati per tutte le code"
msgid "Edit Custom Fields for transactions on tickets in all queues"
msgstr "Modifica i campi personalizzati per le transazioni sui ticket in tutte le code"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Modifica collegamenti"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Modifica query"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Modifica ricerca"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Modifica i modelli per la coda %1"
@@ -2161,7 +2800,7 @@ msgstr "Modifica i modelli per la coda %1"
msgid "Edit keywords"
msgstr "Modifica parole chiave"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Modifica ricerche salvate per questo gruppo"
@@ -2169,7 +2808,7 @@ msgstr "Modifica ricerche salvate per questo gruppo"
msgid "Edit scrips"
msgstr "Modifica scrips"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Modifca i modelli di sistema"
@@ -2177,11 +2816,15 @@ msgstr "Modifca i modelli di sistema"
msgid "Edit templates for %1"
msgstr "Modifica i modelli per %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "ModificaRicercheSalvate"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Testo modificabile"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Modifica della configurazione per la coda %1"
@@ -2190,17 +2833,18 @@ msgstr "Modifica della configurazione per la coda %1"
msgid "Editing Configuration for user %1"
msgstr "Modifica della configurazione per l'utente %1"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Modifica del campo personalizzato %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Modifica degli appartenenti al gruppo %1"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Modifica degli appartenenti al gruppo personale %1"
@@ -2209,19 +2853,44 @@ msgstr "Modifica degli appartenenti al gruppo personale %1"
msgid "Editing template %1"
msgstr "Modifica del modello %1"
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr "IdEffettivo"
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "È necessario specificare base o target"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Non hai il permesso di visualizzare la ricerca salvata %1, o l'identificativo non è corretto"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "Email"
-#: lib/RT/User_Overlay.pm:235
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Configurazione Email"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Riassunto dei messaggi"
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "Inidirizzo email in uso"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "Invio email"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr "Modello da usare per i messaggi riassuntivi periodici"
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "IndirizzoEmail"
@@ -2229,15 +2898,19 @@ msgstr "IndirizzoEmail"
msgid "EmailEncoding"
msgstr "CodificaEmail"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Abilitato"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Abilitato (togliere il segno di spunta per disabilitare questo campo personalizzato)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Abilitato (togliere il segno di spunta per disabilitare questo gruppo)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Abilitato (togliere il segno di spunta per disabilitare questa coda)"
@@ -2245,49 +2918,81 @@ msgstr "Abilitato (togliere il segno di spunta per disabilitare questa coda)"
msgid "Enabled Custom Fields"
msgstr "Campi personalizzati abilitati"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Code abilitate"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Stato %1 abilitato"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "Stato abilitato: %1"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Crittografa"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Crittografia sempre attiva"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Crittografa/Decrittografa"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Crittografa/Decrittografa la transazione n°%1 del ticket n°2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Crittografia disabilitata"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Crittografia abilitata"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Valori multipli"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "Inserisci valori multipli, con autocompletamento"
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Inserire, separati da spazio, gli oggetti (o URI di oggetti) da collegare."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Valore singolo"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "Inserisci valore singolo, con autocompletamento"
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Inserire, separati da spazio, le code (o URI di code) da collegare."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Inserire, separati da spazio, i ticket (o URI di ticket) da collegare."
-#: NOT FOUND IN SOURCE
-msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces."
-msgstr "Inserire, separati da spazio, i ticket (o URI di ticket) da collegare."
-
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Inserimento di un massimo di %1 valori"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Inserisci un massimo di %1 valori, con autocompletamento"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Errore"
@@ -2295,7 +3000,7 @@ msgstr "Errore"
msgid "Error adding watcher"
msgstr "Errore durante l'aggiunta di un osservatore"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Errore nei parametri passati a Queue->AddWatcher"
@@ -2303,11 +3008,11 @@ msgstr "Errore nei parametri passati a Queue->AddWatcher"
msgid "Error in parameters to Queue->DelWatcher"
msgstr "Errore nei parametri passati a Queue->DelWatcher"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Errore nei parametri passati a Queue->DeleteWatcher"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Errore nei parametri passati a Ticket->AddWatcher"
@@ -2315,27 +3020,63 @@ msgstr "Errore nei parametri passati a Ticket->AddWatcher"
msgid "Error in parameters to Ticket->DelWatcher"
msgstr "Errore nei parametri passati a Ticket->DelWatcher"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Errore nei parametri passati a Ticket->DeleteWatcher"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Errore per l'amministratore di RT: chiave pubblica"
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Errore: cruscotto mancante"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Errore: dati GnuPG non validi"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Errore: nessuna chiave privata"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Errore: chiave pubblica"
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Propaga ticket"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Stima"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Chiunque"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Esamina i ticket creati in una coda tra due date"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Esamina i ticket risolti in una coda tra due date"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Esamina i ticket risolti in una coda, raggruppati per incaricato"
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Esempio:"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Scadenza"
+
+#: share/html/Search/Elements/BuildFormatString:99
msgid "ExtendedStatus"
msgstr "StatoAggiuntivo"
@@ -2347,33 +3088,73 @@ msgstr "IdAutorizEsterno"
msgid "ExternalContactInfoId"
msgstr "IdContattoEsterno"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Informazioni aggiuntive"
-#: lib/RT/SavedSearch.pm:177
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr "Estrazione di parte dell'oggetto del messaggio"
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr "Estrae parti dell'oggetto del messaggio e le mette nell'oggetto del ticket."
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Connessione al database fallita: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Creazione dell'attributo %1 fallita"
+
+#: NOT FOUND IN SOURCE
msgid "Failed to create search attribute"
msgstr "Impossibile creare un attributo della ricerca"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Impossibile trovare il pseudogruppo di utenti 'Privilegiato'."
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Impossibile trovare il pseudogruppo di utenti 'Non Privilegiato'."
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Caricamento %1 %2 non andato a buon fine"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Caricamento %1 %2 non andato a buon fine: %3"
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Errore nel caricamento del modulo %1. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "Impossibile caricare un oggetto per %1"
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Caricamento del modello non andato a buon fine"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "Interpretazione del modello non andata a buon fine"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Feb"
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Feb."
@@ -2381,35 +3162,51 @@ msgstr "Feb."
msgid "February"
msgstr "Febbraio"
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Origine dei valori del campo:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "NomeFile"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Nome file"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr "Specifica i seguenti parametri"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr "Colora i riquadri usando"
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Testi multipli"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Testi WIKI multipli"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Testo singolo"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Testo WIKI singolo"
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Riempi questo campo con un URL."
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Testi multipli (max. %1)"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Testi WIKI multipli (max. %1)"
@@ -2417,19 +3214,23 @@ msgstr "Testi WIKI multipli (max. %1)"
msgid "Fin"
msgstr "Fin"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Priorità finale"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "PrioritaFinale"
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Trova tutti gli utenti il cui"
+
#: NOT FOUND IN SOURCE
msgid "Find group whose"
msgstr "Cerca il gruppo in cui"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Cerca i gruppi in cui"
@@ -2437,19 +3238,23 @@ msgstr "Cerca i gruppi in cui"
msgid "Find new/open tickets"
msgstr "Cerca ticket nuovi/aperti"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Cerca le persone in cui"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Ricerca ticket"
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Fine"
+
#: NOT FOUND IN SOURCE
msgid "Finish Approval"
msgstr "Completa approvazione"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Primo"
@@ -2457,28 +3262,66 @@ msgstr "Primo"
msgid "First page"
msgstr "Prima pagina"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Tizio Caio Sempronio"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Tizio!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Forza la modifica"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Opzioni colonna"
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Avanti"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Inoltra messaggio"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Inoltra messaggio e ritorna"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Inoltra messaggio"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Inoltra messaggi ad altre persone"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "InoltraMessaggio"
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "Trovati %quant(%1,ticket)"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Trovato Oggetto"
@@ -2498,32 +3341,52 @@ msgstr "FreeformMultiple"
msgid "FreeformSingle"
msgstr "FreeformSingle"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Frequenza"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Ven"
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Ven."
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Venerdì"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Intestazione completa"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Generale"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Carica da file un modello compilato"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Per cominciare"
+
#: NOT FOUND IN SOURCE
msgid "Getting the current user from a pgp sig\\n"
msgstr "Sto individuando l'utente corrente da una firma pgp\\n"
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Assegnato a %1"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Globale"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Campi personalizzati globali"
@@ -2535,25 +3398,51 @@ msgstr "Selezione globale delle parole chiave"
msgid "Global Scrips"
msgstr "Scrips globali"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Configurazione globale campi personalizzati"
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
-msgstr ""
+msgstr "Salvato il portlet globale %1"
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Modello globale: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "Errore GnuPG. Contatta l'amministratore del sistema"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "Integrazione con GnuPG disabilitata"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr "Problemi relativi a GnuPG"
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "Chiavi private GnuPG per %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "Chiavi pubbliche GnuPG per %1"
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Vai"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Vai!"
@@ -2565,7 +3454,7 @@ msgstr "Firma pgp valida da %1\\n"
msgid "Goto page"
msgstr "Vai a pagina"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Vai al ticket"
@@ -2573,7 +3462,19 @@ msgstr "Vai al ticket"
msgid "Grand"
msgstr "Grand"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Grafico"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Proprierà del grafico"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "Mappe grafiche non disponibili."
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Gruppo"
@@ -2581,32 +3482,41 @@ msgstr "Gruppo"
msgid "Group %1 %2: %3"
msgstr "Gruppo %1 %2: %3"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Diritti di gruppo"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Appartiene già al gruppo"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Appartiene già al gruppo: %1"
#: NOT FOUND IN SOURCE
msgid "Group could not be created."
msgstr "Impossibile creare il gruppo."
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Impossibile creare il gruppo: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Gruppo creato"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Disabilitato il gruppo"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Abilitato il gruppo"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Non appartiene al gruppo"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Gruppo non trovato"
@@ -2618,62 +3528,103 @@ msgstr "Gruppo non trovato.\\n"
msgid "Group not specified.\\n"
msgstr "Gruppo non specificato.\\n"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Permessi di gruppo"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Gruppi"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "I gruppi non possono appartenere a gruppi che sono già loro appartenenti"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Gruppi che corrispondono ai criteri di ricerca"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Gruppi ai quale l'utente appartiene (spuntare quelli da cui cancellare l'appartenenza)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Gruppi ai quale l'utente non appartiene (spuntare quelli a cui deve appartenere)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "L'utente appartiene ai gruppi"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:114
msgid "HasMember"
msgstr "HaUnAppartenente"
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr "Intestazione di un messaggio inoltrato"
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Ciao!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Ciao, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "Serve il tuo aiuto per impostare alcune impostazioni predefinite per RT."
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Cronologia"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "Cronologia del gruppo %1"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr "Cronologia della coda %1"
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "Cronologia dell'utente %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "Home"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "Intervallo di caricamento automatico per la Home Page"
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "TelefonoCasa"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Homepage"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Ora"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Ore"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "Ho %quant(%1,concrete mixer)."
@@ -2682,39 +3633,56 @@ msgstr "Ho %quant(%1,concrete mixer)."
msgid "I have [quant,_1,concrete mixer]."
msgstr "Ho [quant,_1,concrete mixer]."
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
+#: NOT FOUND IN SOURCE
msgid "I'm lost"
msgstr "Mi sono perso..."
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Id"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identità"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Se un'approvazione viene negata, respingi l'originale e elimina le approvazioni accodate"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "(per i nuovi ticket in cui non viene specificato un richiedente)"
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "(per i nuovi ticket in cui non viene specificata una coda)"
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Se questo strumento viene ha il flag setgid, un utente locale malintenzionato potrebbe usarlo per ottenere accesso amministrativo a RT."
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr "Se hai già un server RT e un database funzionanti, assicurati che il server database sia attivo, e che le connessioni provenienti dal server RT vadano a buon fine. Quando sei sicuro di questo, riavvia il server RT.</p>"
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "Se cambi la porta su cui RT accetta le connessioni, devi riavviare il server prima di poter accedere."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Se hai aggiornato qualche impostazione, assicurati di premere"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr "Se il tuo database preferito non è presente nell'elenco sottostante, significa che RT non ha trovato un <i>driver database</i> adatto installato sul server. Puoi rimediare usando %1 per scaricare e installare i moduli DBD::MySQL, DBD::Oracle o DBD::Pg."
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Valore non valido per %1"
@@ -2722,74 +3690,125 @@ msgstr "Valore non valido per %1"
msgid "Image"
msgstr "Immagine"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Campo immutabile"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/CustomFields/index.html:86
msgid "Include disabled custom fields in listing."
msgstr "Elenca anche i campi personalizzati disabilitati."
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Elenca anche i gruppi disabilitati."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Elenca anche le code disabilitate."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Includi nella ricerca gli utenti disabilitati."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
-msgstr ""
+msgstr "Allega pagina"
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Query incompleta"
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "Query incompleta"
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Messaggi singoli"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informa l'amministratore del server RT che alcuni utenti hanno problemi di chiave pubblica"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Informa l'utente che un cruscotto a cui si è abbonato è mancante"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Informa l'utente che un messaggio da lui inviato contiene dati GnuPG non validi"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Informa l'utente che ci sono problemi con la sua chiave pubblica, per i quali non può ricevere messaggi crittografati"
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Informa l'utente che la sua password è stata resettata."
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Informa l'utente che è stata ricevuta email crittografata ma non esiste nessuna chiave privata con cui decifrarla"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Priorità iniziale"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "PrioritaIniziale"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Inizializzazione database"
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Errore in input"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "L'Input deve corrispondere con %1"
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "Installazione di RT"
+
#: NOT FOUND IN SOURCE
msgid "Interest noted"
msgstr "Interesse annotato"
-#: lib/RT/Ticket_Overlay.pm:3503
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Errore interno"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Errore interno: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "Valore %1 non valido: '%2' non sembra un indirizzo email"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "Valore non valido (%1): deve essere un numero intero"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "Valore %1 non valido: non sembra un indirizzo email"
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Tipo di gruppo non valido"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Diritto non valido"
@@ -2797,53 +3816,74 @@ msgstr "Diritto non valido"
msgid "Invalid Type"
msgstr "Tipo non valido"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Dati non validi"
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Oggetto non valido"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Incaricato non valido"
+
#: NOT FOUND IN SOURCE
msgid "Invalid owner. Defaulting to 'nobody'."
msgstr "Incaricato non valido. Uso il default 'nessuno'."
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
-msgstr ""
+msgstr "%1: pattern non valido"
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Coda non valida"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Diritto non valido"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr "Diritto non valido. Impossibile rendere in forma canonica il diritto '%1'"
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr "Sintassi non valida per un indirizzo email"
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Valore non valido per %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Valore non valido per il campo personalizzato"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Valore non valido per lo stato"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "Non è crittografato"
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "È estremamente importante che agli utenti non previlegiati non sia consentita l'esecuzione di questo strumento."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Per eseguire questo strumento, si suggerisce di creare un utente unix non privilegiato appartenente al gruppo corretto e con i necessari diritti in RT."
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Accetta svariati argomenti:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Corsivo"
@@ -2851,7 +3891,11 @@ msgstr "Corsivo"
msgid "Items pending my approval"
msgstr "Oggetti in attesa della mia approvazione"
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Gen"
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Gen."
@@ -2859,11 +3903,15 @@ msgstr "Gen."
msgid "January"
msgstr "Gennaio"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Cambia appartenenza a questo gruppo"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Lug"
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Lug."
@@ -2871,11 +3919,15 @@ msgstr "Lug."
msgid "July"
msgstr "Luglio"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Azioni"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Giu"
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Giu."
@@ -2884,6 +3936,14 @@ msgid "June"
msgstr "Giugno"
#: NOT FOUND IN SOURCE
+msgid "Keep 'localhost' if you're not sure"
+msgstr "Mantieni 'locahost' in caso di dubbi"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "Se sei indeciso, lascia 'localhost'. Lascia il campo vuoto per connettere il DB usando un socket locale"
+
+#: NOT FOUND IN SOURCE
msgid "Keyword"
msgstr "Parola chiave"
@@ -2891,23 +3951,27 @@ msgstr "Parola chiave"
msgid "Lang"
msgstr "Lingua"
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Lingua"
-#: html/Search/Elements/EditFormat:79
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Lingua."
+
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Grande"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Ultimo"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Ultima comunicazione a richiedenti"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Ultima comunicazione a richiedenti"
@@ -2915,38 +3979,67 @@ msgstr "Ultima comunicazione a richiedenti"
msgid "Last Notified"
msgstr "Ultima notifica"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Ultima modifica"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/ColumnMap:91
msgid "Last Updated By"
msgstr "Modificato Da"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Ultimo aggiornamento da parte di"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdated"
msgstr "UltimaModifica"
-#: html/Search/Elements/PickBasics:103
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "ModificatoPerUltimoDa"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedRelative"
msgstr "TempoDaUltimoAggiornamento"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr "Lascaire vuoto per inviare al proprio indirizzo email (%1)"
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Se non specificato, verrà usato il valore predefinito dal tuo database"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr "Se non specificato, verrà usato username amministrativo predefinito dal tuo database"
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Rimasti"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr "Legenda"
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Lunghezza in caratteri; Usa '0' per mostrare i messaggi completi, indipendentemente dalla loro lunghezza"
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Consenti a questo utente di accedere a RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Consenti la concessione di diritti espliciti a questo utente"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "Iniziamo!"
+
#: NOT FOUND IN SOURCE
msgid "Limiting owner to %1 %2"
msgstr "Limitare l'incaricato a %1 %2"
@@ -2955,33 +4048,31 @@ msgstr "Limitare l'incaricato a %1 %2"
msgid "Limiting queue to %1 %2"
msgstr "Limitare la coda a %1 %2"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "Collegamento"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Il collegamento esiste già"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Il collegamento non può essere creato"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Collegamento creato (%1)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Collegamento cancellato (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Collegamento non trovato"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Collega ticket n°%1"
@@ -2990,44 +4081,74 @@ msgstr "Collega ticket n°%1"
msgid "Link ticket %1"
msgstr "Collega ticket %1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "Collega valori a"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "Collegato"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr "CollegatoDa"
+
+#: lib/RT/Tickets_Overlay.pm:109
msgid "LinkedTo"
msgstr "CollegatoA"
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr "Collegamento. Permesso negato"
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Collegamenti"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Carica"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Carica ricerca salvata:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "CaricaRicercheSalvate"
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "%1 caricato %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "La ricerca salvata originaria \"%1\" è stata caricata"
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Moduli perl caricati"
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "La ricerca salvata \"%1\" è stata caricata"
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Caricata ricerca %1"
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Impostazioni nazionali"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr "DataOraInFormatoLocale"
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Domicilio"
@@ -3035,88 +4156,108 @@ msgstr "Domicilio"
msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
msgstr "Impossibile trovare la directory di log %1 (oppure mancano i permessi di scrittura).\\n RT non può essere eseguito."
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Accesso effettuato come %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Disconnesso"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Accedi"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Esci"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Tipo di ricerca sbagliato"
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Mail"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr "Tipi principali di collegamento"
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Nuovo incaricato"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Nuovo stato"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Nuova data scadenza"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Nuova data risoluzione"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Nuova data iniziato"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Nuova data inizio previsto"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Nuova data ultimo contatto"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Nuova priorità"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Nuova coda"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Nuovo oggetto"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Rendi questo gruppo visibile all'utente"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Gestione campi personalizzati e relativi valori"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Gestione di gruppi e appartenenze"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Gestione di proprietà e configurazioni che si applicano a tutte le code"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Gestione delle code e delle propietà specifiche delle code"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Gestione grafi salvati"
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Gestione di utenti e password"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mar."
@@ -3124,125 +4265,166 @@ msgstr "Mar."
msgid "March"
msgstr "Marzo"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Tutti i messaggi marcati come 'letti'"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "Lunghezza massima dei messaggi inline"
+
+#: lib/RT/Date.pm:92
msgid "May"
msgstr "Maggio"
-#: lib/RT/Date.pm:445
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Mag."
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Appartenente"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Aggiunto appartenente %1"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Rimosso appartenente %1"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Aggiunto appartenente"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Aggiunto appartenente: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Rimosso appartenente"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Appartenente non rimosso"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Appartenente a"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "MemberOf"
msgstr "AppartenteA"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Appartenenti"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "Aggiunta appartenenza al gruppo %1"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "Rimossa appartenenza al gruppo %1"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Appartenenza a gruppi"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "Appartenenza a gruppi per l'utente %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Unione avvenuta con Successo"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Unione fallita. Impossibile impostare EffectiveId"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Unione fallita. Impossibile impostare Stato"
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Unisci a"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Unito a %1"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Messaggio"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr "Il corpo del messaggio non è mostrato su richiesta del mittente."
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr "Il corpo del messaggio non viene mostrato perché non è testo semplice."
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Il corpo del messaggio non viene mostrato perchè troppo grande o non in formato testo."
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr "Il corpo del messaggio non viene mostrato perché supera la dimensione massima consentita."
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Altezza del riquadro messaggi"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Larghezza del riquadro messaggi"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Impossibile registrare il messaggio"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Messaggio per l'utente"
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Messaggio registrato"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "I messaggi riguardanti questo ticket non saranno inviati a..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Lunghezza minima per le password"
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minuti"
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
+#: NOT FOUND IN SOURCE
msgid "Mismatched parentheses"
msgstr "Parentesi non bilanciate"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Manca una chiave primaria?: %1"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Cellulare"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "TelefonoCellulare"
@@ -3254,12 +4436,12 @@ msgstr "Modifica la Lista Controllo Accessi (ACL)"
msgid "Modify Custom Field %1"
msgstr "Modifica il campo personalizzato %1"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Modifica campi personalizzati applicabili a %1 per ogni %2"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Modifica i campi personalizzati applicabili a tutti %1"
@@ -3268,23 +4450,23 @@ msgstr "Modifica i campi personalizzati applicabili a tutti %1"
msgid "Modify Custom Fields which apply to all queues"
msgstr "Modifica i Campi Personalizzati validi per tutte le code"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Modifica diritti del gruppo"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Modifica appartenenti al gruppo"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Modifica diritti"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Modifica i modelli di Scrips per questa coda"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Modifica gli Scrips per questa coda"
@@ -3296,11 +4478,11 @@ msgstr "Modifica le ACL di Sistema"
msgid "Modify Template %1"
msgstr "Modifica il modello %1"
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Modifica diritti utente"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Modifica un campo personalizzato per la coda %1"
@@ -3309,43 +4491,55 @@ msgstr "Modifica un campo personalizzato per la coda %1"
msgid "Modify a CustomField which applies to all queues"
msgstr "Modifica un campo personalizzato valido per tutte le code"
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Modifica uno scrip per la coda %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr "Modifica uno Scrip che riguarda tutte le code"
+
+#: NOT FOUND IN SOURCE
msgid "Modify a scrip which applies to all queues"
msgstr "Modifica uno scrip valido per tutte le code"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Modifica oggetti associati a %1"
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr "Modifica i valori dei campi personalizzati"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Modifica i cruscotti per questo gruppo"
+
#: NOT FOUND IN SOURCE
msgid "Modify dates for # %1"
msgstr "Modifica le date per n° %1"
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Modifica le date per n°%1"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Modifica le date per il ticket n° %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Modifica campi personalizzati globali"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Modifica i diritti di gruppo globali"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Modifica i diritti di gruppo globali."
@@ -3361,114 +4555,136 @@ msgstr "Modifica i diritti globali per gli utenti"
msgid "Modify global scrips"
msgstr "Modifica gli scrips globali"
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Modifica i diritti globali per gli utenti"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Modifica i diritti globali per gli utenti."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Modifica i metadati del gruppo o elimina un gruppo"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Modifica i diritti di gruppo per il campo personalizzato %1"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Modifica i diritti di gruppo per il gruppo %1"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Modifica i diritti di gruppo per la coda %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Modifica gli appartenenti a questo gruppo"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Modifica il proprio account RT"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Modifica le persone collegate alla coda %1"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Modifica le persone collegate al ticket n°%1"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Modifica i cruscotti personali"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Modifica gli scrips per la coda %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Modifica gli scrips validi per tutte le code"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Modifica i cruscotti di sistema"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Modifica modello %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Modifica i modelli validi per tutte le code"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Modifica il cruscotto %1"
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr "Modifca il quadro di insieme di default"
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Modifica il gruppo %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Modifica le ricerche che compongono il cruscotto %1"
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Modifica gli osservatori della coda"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Modifica l'abbonamento al cruscotto %1"
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Modifica l'utente %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Modifica il ticket n° %1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Modifica il ticket n°%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Modifica i ticket"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Modifica i diritti utente per il il campo personalizzato %1"
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Modifica i diritti utente per il gruppo %1"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Modifica i diritti utente per la coda %1"
@@ -3481,11 +4697,23 @@ msgstr "Modifica gli osservatori per la coda '%1'"
msgid "ModifyACL"
msgstr "ModificaACL"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "ModificaCampoPers."
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "ModificaCruscotto"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "ModificaCruscottoDiGruppo"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "ModificaCruscottoPersonale"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "ModificaPropriaAppartenenzaAlGruppo"
@@ -3493,48 +4721,64 @@ msgstr "ModificaPropriaAppartenenzaAlGruppo"
msgid "ModifyQueueWatchers"
msgstr "ModificaOsservatoriDellaCoda"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "ModificaScrips"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "ModificaSuoiDati"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "ModificaModello"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "ModificaTicket"
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Lun"
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Lun."
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Lunedì"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr "Da lunedì a venerdì"
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "Altro"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Maggiori informazioni su %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Sposta in basso"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Sposta in alto"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Multiplo"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "L'attributo 'name' deve essere specificato"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "I miei ticket in stato: %1"
@@ -3543,47 +4787,63 @@ msgstr "I miei ticket in stato: %1"
msgid "My Approvals"
msgstr "Le mie richieste di approvazione"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Giornata"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Le mie richieste di approvazione"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "I miei cruscotti"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Le mie ricerche salvate"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "A_CAPO"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Nome"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Nome già usato"
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr "Insieme di portlet condiviso, identificato da un nome"
+
#: NOT FOUND IN SOURCE
-msgid "Need approval from system administrator"
-msgstr "È richiesta l'approvazione da parte del system administrator"
+msgid "Named, shared collection of saved searches"
+msgstr "Collezione di ricerche salvate, identificata da nome, condivisibile con altri"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Mai"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Nuovo"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nuovi collegamenti"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Nuova Password"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Nuove approvazioni pendenti"
@@ -3591,31 +4851,44 @@ msgstr "Nuove approvazioni pendenti"
msgid "New Query"
msgstr "Nuova query"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Nuova Ricerca"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Elenco ticket in stato 'nuovo' e 'aperto' per %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Nuovo campo personalizzato"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Nuovo cruscotto"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Nuovo gruppo"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Nuovi messaggi"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Nuova password"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Inviata notifica della nuova password"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Nuova coda"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Nuovo promemoria"
@@ -3623,11 +4896,11 @@ msgstr "Nuovo promemoria"
msgid "New request"
msgstr "Nuova richiesta"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nuovi diritti"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Nuovo scrip"
@@ -3635,27 +4908,27 @@ msgstr "Nuovo scrip"
msgid "New search"
msgstr "Nuova ricerca"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Nuovo modello"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Nuovo ticket"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Il nuovo ticket non esiste"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Nuovo utente"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Nuovo utente di nome"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nuovo osservatore"
@@ -3663,11 +4936,11 @@ msgstr "Nuovo osservatore"
msgid "New window setting"
msgstr "Impostazioni nuova finestra"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Seguente"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Pagina seguente"
@@ -3675,55 +4948,68 @@ msgstr "Pagina seguente"
msgid "Next page"
msgstr "Pagina seguente"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "Nomignolo"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Nomignolo"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "No"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "Nessun %1 caricato"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Nessuna classe definita"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Nessun campo personalizzato"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Nessun campo personalizzato definito"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Nessun gruppo definito"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Nessuna query"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Nessuna coda definita"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Nessun utente RT trovato. Consulta il tuo amministratore di RT.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Senza oggetto"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Nessun Modello"
#: NOT FOUND IN SOURCE
msgid "No Ticket specified. Aborting ticket "
-msgstr "Nessun ticket specificato. Annullo il ticket"
+msgstr "Nessun ticket specificato. Annullo il ticket "
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Nessuna azione"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Nessuna colonna specificata"
@@ -3731,7 +5017,7 @@ msgstr "Nessuna colonna specificata"
msgid "No command found\\n"
msgstr "Nessun comando trovato\\n"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Nessun commento su questo utente"
@@ -3739,97 +5025,141 @@ msgstr "Nessun commento su questo utente"
msgid "No correspondence attached"
msgstr "Nessuna corrispondenza allegata"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Nessun cruscotto."
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Nessuna descrizione per %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Nessun gruppo specificato"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Nessun gruppo corrisponde ai criteri di ricerca."
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Nessuna chiave adatta per la crittografia"
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Nessuna chiave per questi indirizzi"
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Nessun messaggio allegato"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Crittografia non necessaria"
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Nessuna password impostata"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Manca il permesso per creare code"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Manca il permesso per creare ticket nella coda '%1'"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Manca il permesso per creare utenti"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Manca il permesso per visualizzare il ticket"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr "Manca il permesso per salvare ricerche a livello di sistema"
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Non autorizzato a impostare le preferenze"
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Manca il permesso per aggiornare il ticket"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Nessun utente/gruppo specificato"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Nessun utente/gruppo selezionato."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Nessuna chiave privata"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Nessuna coda soddisfa i criteri di ricerca."
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Nessun diritto specificato"
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Nessun diritto trovato"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Nessun diritto concesso."
-#: lib/RT/SavedSearch.pm:196
+#: NOT FOUND IN SOURCE
msgid "No search loaded"
msgstr "Nessuna ricerca caricata"
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Nessuna ricerca su cui operare."
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Senza oggetto"
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Questa chiave non esiste, o non è adatta per la firma"
+
#: NOT FOUND IN SOURCE
msgid "No ticket id specified"
msgstr "Nessun identificativo di ticket specificato"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "Nessun ticket trovato."
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Nessun tipo transazione specificato"
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Nessuna chiave utilizzabile."
+
#: NOT FOUND IN SOURCE
msgid "No user or email address specified"
msgstr "Nessun utente o indirizzo email specificato"
-#: html/Admin/Users/index.html:55
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Nessuna utente soddisfa i criteri di ricerca."
@@ -3837,35 +5167,43 @@ msgstr "Nessuna utente soddisfa i criteri di ricerca."
msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
msgstr "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Nessun valore inviato a _Set!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Nessuno"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Nessuno"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Campo inesistente?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr "Non impostato"
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Non trovato"
+
#: NOT FOUND IN SOURCE
msgid "Not logged in"
msgstr "Accesso non effettuato"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Accesso non effettuato."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Non impostato"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Non ancora implementato."
@@ -3873,83 +5211,115 @@ msgstr "Non ancora implementato."
msgid "Not yet implemented...."
msgstr "Non ancora implementato...."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Note"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Impossibile inviare la notifica"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "invia notifica agli AdminCc"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "invia notifica agli AdminCc come commento"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "invia notifica ai Cc"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "invia notifica ai Cc come commento"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "invia notifica agli altri destinatari"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "invia notifica agli altri destinatari come commento"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "invia notifica all'incaricato"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "invia notifica all'incaricato come commento"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "invia notifica all'incaricato del ticket respinto"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr "Notifica all'Incaricato l'approvazione del ticket, che ora può seguire il suo corso"
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "invia notifica all'incaricato del ticket che tutte le approvazioni sono state concesse"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "invia notifica all'incaricato del ticket che alcune approvazioni sono state concesse"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr "Notifica all'Incaricato l'approvazione del ticket parziale o completa"
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr "Invia notifica a: incaricato, richiedenti, Cc e Cc amministrativi"
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr "Invia notifica come commento a: incaricato, richiedenti, Cc e Cc amministrativi"
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "invia notifica agli incaricati e AdminCc quando è necessario richiedere nuove approvazione"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr "Notifica al Richiedente il completamento dell'approvazione del ticket"
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr "Notifica al Richiedente l'approvazione parziale del ticket"
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "invia notifica al richiedente"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "invia notifica ai richiedenti e ai Cc"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "invia notifica ai richiedenti e ai Cc come commento"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "invia notifica ai richiedenti, Cc e AdminCc"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "invia notifica ai richiedenti, Cc a AdminCc come commento"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "Notifica messaggi da leggere"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "Nov"
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Nov."
@@ -3957,37 +5327,49 @@ msgstr "Nov."
msgid "November"
msgstr "Novembre"
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Numero di risultati per la ricerca"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "OR"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "L'oggetto non può essere creato"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "L'oggetto non può essere cancellato"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Oggetto creato"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Oggetto cancellato"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Oggetto di tipo %1 non accetta campi personalizzati"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Tipo oggetto non corrisponde"
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr "La lista oggetti è vuota"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Ott"
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Oct."
@@ -3995,74 +5377,90 @@ msgstr "Oct."
msgid "October"
msgstr "Ottobre"
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Offline"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Modifiche offline"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Upload richiesta offline"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "il"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
-msgstr ""
+msgstr "Il %1, %2 ha scritto:"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "Alla chiusura"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "All'arrivo di un commento"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "All'arrivo di una corrispondenza"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Alla creazione"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Al cambio dell'incaricato"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Al cambio della priorità"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Al cambio di coda"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr "Se respinto"
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Alla riapertura"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Alla risoluzione"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Al cambio di stato"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Ad ogni transazione"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "Ccn una tantum"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "Cc una-tantum"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Mostra le approvazioni solo per le richieste create dopo il %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Mostra le approvazioni solo per le richieste create prima del %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Mostra campi personalizzati solo per:"
@@ -4070,11 +5468,15 @@ msgstr "Mostra campi personalizzati solo per:"
msgid "Open"
msgstr "Aperto"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Ticket aperti"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Apri URL"
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Apri"
@@ -4086,7 +5488,7 @@ msgstr "Richieste aperte"
msgid "Open ticket"
msgstr "Apri ticket"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Ticket aperti"
@@ -4098,15 +5500,19 @@ msgstr "Apre ticket (dalla lista) in una nuova finestra"
msgid "Open tickets (from listing) in another window"
msgstr "Apre ticket (dalla lista) in un'altra finestra"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Apri i ticket all'arrivo di corrispondenza"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Opzioni"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Ordina per"
@@ -4114,48 +5520,54 @@ msgstr "Ordina per"
msgid "Ordering and sorting"
msgstr "Ordinamento"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Azienda"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Ticket originario: n°%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Registrata email in uscita riguardante un commento"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Registrata email in uscita"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Al passare del tempo, la priorità cresce fino a"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Prende in carico ticket"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "PrendeInCaricoTicket"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Incaricato"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr "'%1' non può prendere in carico questo ticket per carenza di autorizzazioni."
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
msgstr "Cambiato incaricato da %1 a %2"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "L'incaricato non può essere impostato."
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Cambiato forzatamente l'incaricato da %1 a %2"
@@ -4164,45 +5576,56 @@ msgstr "Cambiato forzatamente l'incaricato da %1 a %2"
msgid "Owner is"
msgstr "In carico a"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "OwnerName"
msgstr "NomeIncaricato"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Pagina"
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Pagina %1 di %2"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Pagina 1 di 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Pagina non trovata"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Cercapersone"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
msgstr "Cercapersone"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "DerivaDa"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Password"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Promemoria password"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Password cambiata"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "La password deve essere lunga almeno %1 caratteri"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Password impostata"
@@ -4210,60 +5633,72 @@ msgstr "Password impostata"
msgid "Password too short"
msgstr "Password troppo corta"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Password: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Password: permesso negato"
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "CambioPassword"
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Le passwords non corrispondono."
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Le password non corrispondono. La password non è stata cambiata"
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "Path di sendmail"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Persone"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Esegui un'azione personalizzata"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr "Path di include per Perl (@INC)"
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Configurazione perl"
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Operazione non consentita"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
-msgstr ""
+msgstr "Permesso negato"
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
-msgstr "Permessi negati"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "Dashboard Personale"
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Gruppi personali"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Gruppi personali"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Gruppi personali:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Numeri telefonici"
@@ -4271,33 +5706,68 @@ msgstr "Numeri telefonici"
msgid "Placeholder"
msgstr "Segnaposto"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Controlla l'URL e riprova."
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr "Possibili ricerche nascoste"
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Preferenze"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
+msgid "Preferences %1 for user %2."
msgstr "Preferenze %1 per l'utente %2 ."
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr "Preferenze salvate per %1."
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "Salvate preferenze dell'utente %1."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "Preferenze salvate."
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Chiave preferita: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Chiave preferita"
+
#: NOT FOUND IN SOURCE
msgid "Prefs"
msgstr "Prefs"
-#: lib/RT/Action/Generic.pm:195
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Preparazione non necessaria"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Precedente"
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Precedente"
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Pagina precedente"
@@ -4309,57 +5779,86 @@ msgstr "Pagina precedente"
msgid "Pri"
msgstr "Pri"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Utente/gruppo %1 not trovato."
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr "Invia i messaggi riassuntivi a STDOUT; non inviare email; non marcare i messaggi come inviati"
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Stampa questo messaggio"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
-msgstr "Tempo trascorso (gg)"
+msgstr "Priorità"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "La priorità inizia da"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Riservatezza"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Riservatezza:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Chiave privata"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Privilegiato"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Stato previlegiato: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Utenti privilegiati"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr "Nell'elaborazione senza transazioni, qualche condizione o azione potrebbe fallire. Si prega di notare l'esistenza del parametro --transaction"
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudogruppo per uso interno"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "E' richiesta la chiave pubblica '0x%1' per verificare la firma"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Ricerche"
+
+#: share/html/Search/Edit.html:64
msgid "Query"
msgstr "Query"
-#: html/Search/Build.html:121
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Costruttore di query"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "Query:"
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Coda"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
@@ -4373,7 +5872,7 @@ msgstr "Coda '%1' non trovata\\n"
msgid "Queue Keyword Selections"
msgstr "Selezione delle parole chiave per la coda"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Nome della coda"
@@ -4381,55 +5880,95 @@ msgstr "Nome della coda"
msgid "Queue Scrips"
msgstr "Scrips della coda"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "La coda esiste già"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Impossibile creare la coda"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Impossibile caricare la coda."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Coda creata"
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr "Coda disabilitata"
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr "Coda abilitata"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Id della coda"
+
#: NOT FOUND IN SOURCE
msgid "Queue is not specified."
msgstr "Coda non specificata."
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Coda non trovata"
-#: NOT FOUND IN SOURCE
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "Permessi sulla coda"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "Chiave della coda"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr "AdminCcDellaCoda"
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr "CcDellaCoda"
+
+#: share/html/Search/Elements/BuildFormatString:99
msgid "QueueName"
msgstr "NomeCoda"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr "OsservatoreCoda"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Code"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Le mie code"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Le code per cui sono AdminCc"
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Ricerca veloce"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Creazione veloce di un ticket"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr "RFC2616"
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
@@ -4437,8 +5976,8 @@ msgstr "RSS"
msgid "RT %1"
msgstr "RT %1"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 per %2"
@@ -4454,10 +5993,14 @@ msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgstr "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "Amministrazione di RT"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "Email dell'amministratore di sistema"
+
#: NOT FOUND IN SOURCE
msgid "RT Authentication error."
msgstr "Errore di autenticazione RT."
@@ -4466,6 +6009,10 @@ msgstr "Errore di autenticazione RT."
msgid "RT Bounce: %1"
msgstr "RT Bounce: %1"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "Configurazione RT"
+
#: NOT FOUND IN SOURCE
msgid "RT Configuration error"
msgstr "Errore nella configurazione di RT"
@@ -4474,7 +6021,7 @@ msgstr "Errore nella configurazione di RT"
msgid "RT Critical error. Message not recorded!"
msgstr "Errore critico. Messaggio not registrato!"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "Errore RT"
@@ -4486,28 +6033,40 @@ msgstr "RT ha ricevuto email (%1) da se stesso."
msgid "RT Recieved mail (%1) from itself."
msgstr "RT ha ricevuto email (%1) da se stesso."
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "Self Service di RT"
+
#: NOT FOUND IN SOURCE
msgid "RT Self Service / Closed Tickets"
msgstr "RT Self Service / Ticket chiusi"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr "Dimensione di RT"
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "Variabili RT"
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "Quadro di insieme"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr "Quadro di insieme per l'utente %1"
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr "RT comunica con gli utenti segnalando nuovi ticket o nuova corrispondenza sui ticket esistenti. Per fare ciò deve sapere dove trovare sendmail (o un programma compatibile con sendmail tipo quello fornito da postfix). È anche necessario specificare un indirizzo da notificare in caso di ricezione di email non valide. Deve essere un indirizzo di una mailbox, non uno usato a sua volta per scrivere a RT."
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
-msgstr ""
+msgstr "Quando viene visualizzato questo campo personalizzato, RT può includere il contenuto fornito da un altro web service."
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "E' possibile creare questo valore del campo personalizzato come un collegamento ad un altro servizio"
@@ -4523,7 +6082,7 @@ msgstr "RT non è riuscito a trovare il richiedente consultando in database este
msgid "RT couldn't find the queue: %1"
msgstr "RT non ha trovato la coda: %1"
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT non può memorizzare la tua sessione"
@@ -4531,8 +6090,8 @@ msgstr "RT non può memorizzare la tua sessione"
msgid "RT couldn't validate this PGP signature. \\n"
msgstr "RT non può verificare questa firma PGP. \\n"
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT / %1"
@@ -4552,67 +6111,96 @@ msgstr "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com
msgid "RT is &copy; Copyright 1996-2002 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
msgstr "RT is &copy; Copyright 1996-2002 Jesse Vincent &lt;jesse@bestpractical.com&gt;. RT viene distribuito con la <a href=\"http://www.gnu.org/copyleft/gpl.html\">Versione 2 della GNU General Public License.</a>"
-#: NOT FOUND IN SOURCE
-msgid "RT thinks this message may be a bounce"
-msgstr "RT thinks this message may be a bounce"
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr "RT è un sistema di gestione delle richieste, progettato per gestire intelligentemente e efficientemente attività, problemi, richieste, difetti o qualunque altra evento che richieda una azione di risposta."
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr "RT è usato nelle aziende più importanti così come in ditte individuali, pubbliche amministrazioni, istituti scolastici, ospedali, associazioni senza scopo di lucro, biblioteche, progetti open-source e in qualsiasi altro tipo di ente in tutti e sette i continenti (sì, anche l'antartide)."
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT userà questo utente per connettersi al database. Verrà creato se non esiste."
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT crea un utente di nome \"root\", usando questa come password."
-#: html/Search/Simple.html:58
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "Il sistema cercherà qualunque altra cosa inserita nel soggetto dei ticket"
-#: NOT FOUND IN SOURCE
-msgid "RT will process this message as if it were unsigned.\\n"
-msgstr "RT will process this message as if it were unsigned.\\n"
-
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
-msgstr ""
+msgstr "RT sostituirà <tt>__id__</tt> e <tt>__CustomField__</tt> rispettivamente con l'id del record e il valore del campo personalizzato"
-#: NOT FOUND IN SOURCE
-msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
-msgstr "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr "RT userà questa stringa per identificare univocamente questa installazione, e verificherà che esista nell'oggetto di ogni messaggio email ricevuto per decidere a quale ticket questo deve essere abbinato. E' consigliabile impostare la stringa al nome del dominio internet (es: dominio.it)."
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr "Con RT è possibile usare i database <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> e <b>SQLite</b>."
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr "RT/Admin/Modifica il gruppo %1"
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Nome reale"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "NomeReale"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Destinatario"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr "Registra tutti gli aggiornamenti"
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr "Numero ricorsivo"
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "Aggiunto riferimento da %1"
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "Cancellato riferimento da %1"
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "Aggiunto riferimento a %1"
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "Cancellato riferimento a %1"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "È un riferimento per"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "ReferredToBy"
msgstr "RiferimentoPer"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Fa riferimento a"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "RefersTo"
msgstr "FaRiferimentoA"
@@ -4624,77 +6212,133 @@ msgstr "Rifinisci"
msgid "Refine search"
msgstr "Rifinisci la ricerca"
-#: html/Elements/Refresh:57
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Aggiorna"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Aggiorna questa pagina ogni %1 minuti."
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr "Promemoria '%1' aggiunto"
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr "Promemoria '%1' completato"
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr "Promemoria '%1' riaperto"
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr "Promemoria ticket #%1"
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "Promemoria"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr "Promemoria per ticket #%1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Rimuovi AdminCc"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Elimina preferito"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Rimuovi Cc"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Rimuovi richiedente"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Risposta"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Indirizzo a cui indirizzare le risposte"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Rispondi ai richiedenti"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Rispondi ai ticket"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "RispondiAlTicket"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Rapporti"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Richiedente"
@@ -4706,73 +6350,81 @@ msgstr "Indirizzo email del richiedente"
msgid "Requestor(s)"
msgstr "Richiedente(i)"
-#: NOT FOUND IN SOURCE
-msgid "RequestorAddresses"
-msgstr "IndirizzoRichiedente"
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr "GruppoDiRichiedenti"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Richiedenti"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Le richieste devono essere soddisfatte entro"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Il parametro obbligatorio '%1' non è stato specificato"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Azzera"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr "Reimposta codice segreto di autenticazione"
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr "Reimposta ai valori di default"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Casa"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Risolvi"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Risolvi il ticket n°%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Risolto"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
-msgstr "Risolto per proprietario"
+msgstr "Risolto dall'incaricato"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Risolto in un periodo temporale"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
-msgstr "Ticket risolti in un periodo temporale, raggruppati per proprietario"
+msgstr "Ticket risolti in un periodo temporale, raggruppati per incaricato"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
-msgstr "Ticket risolti, raggruppati per proprietario"
+msgstr "Ticket risolti, raggruppati per incaricato"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "ResolvedRelative"
msgstr "TempoDaRisoluzione"
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr "Rispondi"
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "Risposta ai richiedenti"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Risultati"
@@ -4780,11 +6432,15 @@ msgstr "Risultati"
msgid "Results per page"
msgstr "Risultati per pagina"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Torna al ticket"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Ridigita Password"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Annulla modifiche"
@@ -4792,49 +6448,48 @@ msgstr "Annulla modifiche"
msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
msgstr "Diritto %1 non trovato per %2 %3 limitatamente a %4 (%5)\\n"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Diritto delegato"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Diritto concesso"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Diritto caricato"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Il diritto non può essere revocato"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Diritto non trovato"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Diritto non caricato."
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Diritto revocato"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Diritti"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "I diritti per %1 non possono essere concessi"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "I diritti per %1 non possono essere revocati"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Ruoli"
@@ -4842,74 +6497,115 @@ msgstr "Ruoli"
msgid "RootApproval"
msgstr "ApprovazioneAmministratore"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Righe"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
-msgstr ""
+msgstr "Righe per riquadro"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Righe per pagina"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr "SQLite è una database che non richiede un server o qualsiasi tipo di configurazione esterna. Gli sviluppatori di RT lo raccomandano per prove, demo o sviluppo, ma non è certamente adatto per un server di produzione con un certo traffico."
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Sab"
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Sab."
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Sabato"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Salva"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Salva modifiche"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Salva preferenze"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Salva come nuovo"
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Salva modifiche"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "%1 %2 salvato"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Ricerca salvata %1 non trovata"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr "Grafici salvati"
+
+#: NOT FOUND IN SOURCE
msgid "Saved search %1"
msgstr "Ricerca %1 salvata"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Ricerche salvate"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Scrip n°%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip creato"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Campi dello scrip"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip eliminato"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrips"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Scrip e destinatari"
+
#: NOT FOUND IN SOURCE
msgid "Scrips for %1\\n"
msgstr "Scrips per %1\\n"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Scrips che si applicano a tutte le code"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Ricerca"
@@ -4917,157 +6613,196 @@ msgstr "Ricerca"
msgid "Search Criteria"
msgstr "Criteri di ricerca"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Preferenze per la ricerca"
-#: lib/RT/SavedSearch.pm:115
+#: NOT FOUND IN SOURCE
msgid "Search attribute load failure"
msgstr "Errore nel caricamento degli attributi della ricerca"
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Ricerca le richieste di approvazione"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Ricerca ticket"
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
-msgstr "Ricerca di ticket. Inserire l'<strong>id</strong>, il nome della <strong>coda</strong>, lo <strong>username</strong> del proprietario e l'<strong>indirizzo email</strong> del richiedente. Il sistema cercherà ogni altra cosa inserita nel corpo e negli allegati del ticket."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Ricerca di ticket. Inserire l'<strong>id</strong> per il ticket, il nome per la <strong>coda</strong>, lo <strong>username</strong> per l'incaricato o l'<strong>indirizzo email</strong> per il richiedente. Ogni termine verrà cercato nel corpo e negli allegati del ticket."
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Opzioni di ricerca"
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Risultati della ricerca ordinati per %1"
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr "Intervallo di rinfresco dei risultati della ricerca"
+
+#: NOT FOUND IN SOURCE
msgid "Search update: %1"
msgstr "Aggiornamento della ricerca: %1"
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "E' possibile effettuare ricerche a testo libero per ogni parola nella storia completa del ticket scrivendo <b>fulltext:<i>parola</i></b>. Attenzione la ricerca a testo libero può richiedere molto tempo."
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr "Codice di autenticazione segreto"
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Protezione:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Vedi anche:"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr "Vedi i valori per i campi personalizzati"
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Vedi campi personalizzati"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Vedi letteralmente i messaggi in uscita e i loro destinatari"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Vedi commenti privati del ticket"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Vedi riassunto dei ticket"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "VediCampoPers."
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "VedeCruscotti"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "VediGruppo"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "VedeCruscottiDiGruppo"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "VedePropriCruscotti"
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "VediCoda"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
msgid "Select"
msgstr "Seleziona"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Scegli il tipo di database"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Scegli un campo personalizzato"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Seleziona un gruppo"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Seleziona una coda"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Scegli una coda per il nuovo ticket"
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Seleziona un utente"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Scegli un'altra lingua"
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Seleziona un campo personalizzato"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Scegli i campi personalizzati validi per tutte le code"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Seleziona i campi personalizzati per tutti i gruppi degli utenti"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Seleziona i campi personalizzati per tutti gli utenti"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Seleziona i campi personalizzati per i ticket in tutte le code"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Seleziona i campi personalizzati per le transazioni relative ai ticket in tutte le code"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Seleziona il cruscotto"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Seleziona il gruppo"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Elenco a selezione multipla"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Elenco a selezione singola"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Seleziona la coda"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Seleziona le code da visualizzare nella pagina \"Quadro di insieme\""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Seleziona lo scrip"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Seleziona il modello"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Seleziona un massimo di %1 valori"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Seleziona l'utente"
@@ -5079,15 +6814,19 @@ msgstr "SelezioneMultipla"
msgid "SelectSingle"
msgstr "SelezioneSingola"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Campi personalizzati selezionati"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "La chiave selezionata non è più ritenuta affidabile, o non esiste più"
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Oggetti selezionati"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Selezioni modificate. Per favore salva i tuoi cambiamenti"
@@ -5095,51 +6834,67 @@ msgstr "Selezioni modificate. Per favore salva i tuoi cambiamenti"
msgid "Self Service"
msgstr "Self Service"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Email inviata"
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Invia una mail a tutti gli osservatori"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Invia una mail atutti gli osservatori come \"commento\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr "Invia email all'incaricato e a tutti gli osservatori"
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr "Invia messaggio come commento all'incaricato e a tutti gli osservatori"
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Invia mail ai richiedenti e Ccs"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Invia mail come commento a richiedenti e Cc"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Invia un messaggio ai richiedenti"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Invia mail a Cc e Bcc esplicitamente elencati"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Invia mail ai Cc"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Invia mail ai Cc come commento"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Invia mail ai Cc amministrativi"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Invia mail ai Cc amministrativi come commento"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Invia mail all'incaricato"
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Set"
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Set."
@@ -5147,43 +6902,64 @@ msgstr "Set."
msgid "September"
msgstr "Settembre"
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Mostra"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Mostra richieste di approvazione"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Mostra colonne"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Mostra i risultati"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr "Mostra le proprietà dei ticket al livello %1"
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Mostra le richieste approvate"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "Mostra anche"
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Mostra info di base"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Mostra le richieste negate"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Mostra i dettagli"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Mostra le descrizioni del collegamento"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr "Mostra la storia partendo dal passato"
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Mostra le richieste in attesa"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Mostra le richieste in attesa di altre approvazioni"
@@ -5199,43 +6975,68 @@ msgstr "Mostra riassunto dei ticket"
msgid "ShowACL"
msgstr "MostraACL"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr "MostraPannelloApprovazione"
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "MostraTabConfigurazione"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "MostraEmailUscente"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "MostraRicercheSalvate"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "MostraScrips"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "MostraModello"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "MostraTicket"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "MostraCommentiAlTicket"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "Distruttore di ticket"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr "Lo Shredder necessita di una cartella sul disco del server per archiviare gli oggetti eliminati dal database. Verifica che la cartella <span class=\"file-path\">%1</span> esista, e che sia scrivibile dall'utente impersonato dal server web."
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Barra laterale"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "Firma"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "Firma se non diversamente specificato"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Registra come richiede o come Cc del ticket o della coda"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Registra come AdminCc del ticket o della coda"
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Firma"
@@ -5243,31 +7044,47 @@ msgstr "Firma"
msgid "Signed in as %1"
msgstr "Accesso effettuato come %1"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Firma disabilitata"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "Firma abilitata"
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Ricerca Semplice"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Singolo"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Nome del sito"
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Carattere"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Salta menu"
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr "Salto gli utente disabilitati"
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Piccolo"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "Alcuni browser possono solo visualizzare dallo stesso dominio del server su cui è installato RT"
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Ordinamento"
@@ -5283,9 +7100,21 @@ msgstr "Ordina i risultati per"
msgid "SortOrder"
msgstr "Ordinamento"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Ordinamento"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Specificare se viene eseguito settimanalmente o giornalmente."
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Foglio di calcolo"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
-msgstr ""
+msgstr "Tappa"
#: NOT FOUND IN SOURCE
msgid "Stalled"
@@ -5295,7 +7124,7 @@ msgstr "In stallo"
msgid "Start page"
msgstr "Pagina iniziale"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Iniziato"
@@ -5303,11 +7132,11 @@ msgstr "Iniziato"
msgid "Started date '%1' could not be parsed"
msgstr "Impossibile interpretare data inizio '%1'"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "StartedRelative"
msgstr "TempoDaInizio"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "InizioPrevisto"
@@ -5319,23 +7148,24 @@ msgstr "Inizio previsto il"
msgid "Starts date '%1' could not be parsed"
msgstr "Impossibile interpretare data inizio previsto '%1'"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "StartsRelative"
msgstr "TempoDaInizioPrevisto"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Provincia"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Stato"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Cambiamento di stato"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Cambiato lo stato da %1 a %2"
@@ -5343,19 +7173,30 @@ msgstr "Cambiato lo stato da %1 a %2"
msgid "StatusChange"
msgstr "CambiamentoStato"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Sottrai"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Sottrae ticket"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "SottraeTicket"
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Passo %1 di %2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Sottratto da %1"
@@ -5364,20 +7205,29 @@ msgstr "Sottratto da %1"
msgid "Stolen from %1 "
msgstr "Sottratto da %1 "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Stile"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Oggetto"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr "Marcatore da aggiungere al campo 'Oggetto'"
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "L'oggetto diventa %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr "SubjectTag impostato a %1"
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Invia"
@@ -5385,27 +7235,86 @@ msgstr "Invia"
msgid "Submit Workflow"
msgstr "Imposta workflow"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "Abbonati"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "Abbonati al cruscotto %1"
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "Abbonati ai cruscotti"
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "AbbonatiAlCruscotto"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "Abbonati al cruscotto %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "Abbonamento"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr "Impossibile creare l'abbonamento: %1"
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Completato con successo"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Dati decrittografati correttamente"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Dati crittografati correttamente"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Dom"
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Dom."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Domenica"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "SuperUtente"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Sospeso"
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Sistema"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Configurazione del sistema"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "Dashboard Sistema"
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Predefinito di sistema"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Errore di sistema"
@@ -5417,20 +7326,20 @@ msgstr "Errore di sistema. Diritto non concesso."
msgid "System Error. right not granted"
msgstr "Errore di sistema. Diritto non concesso"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr "Errore di sistema: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Strumenti di sistema"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Errore di sistema. Diritto non delegato."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Errore di sistema. Diritto non concesso."
@@ -5438,52 +7347,74 @@ msgstr "Errore di sistema. Diritto non concesso."
msgid "System error. Unable to grant rights."
msgstr "Errore di sistema. Impossibile concedere i diritti."
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Gruppi di sistema"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "Permessi di sistema"
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "SystemRolegroup per uso interno"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TEST_STRING"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Prendi in carico"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Prendi in carico ticket"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "PrendiInCaricoTicket"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Preso in carico"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr "Serve un po' di informazioni sulla localizzazione del database che RT utilizzerà"
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Modello"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Modello n°%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Aggiunto il modello n°%1"
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Impossibile trovare il modello '%1'"
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Modello eliminato"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Il modello è vuoto"
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr "Il Template è un argomento obbligatorio"
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Modello non trovato"
@@ -5491,15 +7422,15 @@ msgstr "Modello non trovato"
msgid "Template not found\\n"
msgstr "Modello non trovato\\n"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Modello elaborato"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Errore nell'elaborazione del modello"
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Modelli"
@@ -5511,46 +7442,51 @@ msgstr "Modelli per %1\\n"
msgid "Text"
msgstr "Testo"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr "Il file di test non è visualizzato perché disabilitato nelle preferenze."
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Il valore attuale è già questo"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Questo campo personalizzato non ammette questo valore"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Il valore è lo stesso"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Questo utente/gruppo ha già questo diritto"
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Questo utente/gruppo è già %1 per questa coda"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Questo utente/gruppo è già %1 per questo ticket"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Questo utente/gruppo non è %1 per questa coda"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
msgstr "Questo utente/gruppo non è %1 per questo ticket"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "La coda non esiste"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Il ticket ha dipendenze non risolte"
@@ -5558,27 +7494,27 @@ msgstr "Il ticket ha dipendenze non risolte"
msgid "That user already has that right"
msgstr "L'utente ha già questo diritto"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "L'utente ha già il ticket in carico"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "L'utente non esiste"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "L'utente è già previlegiato"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "L'utente è già non previlegiato"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Ora l'utente è previlegiato"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Ora l'utente è non previlegiato"
@@ -5586,23 +7522,27 @@ msgstr "Ora l'utente è non previlegiato"
msgid "That user is now unprivilegedileged"
msgstr "Ora l'utente è non previlegiato"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "L'utente non può prendere in carico ticket da questa coda"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Non è un identificativo numerico"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Dati di base"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "Il Cc di un ticket"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "Password dell'amministratore del database"
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "Il Cc amministrativo di un ticket"
@@ -5610,35 +7550,118 @@ msgstr "Il Cc amministrativo di un ticket"
msgid "The comment has been recorded"
msgstr "Il commento è stato registrato"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "Il nome DNS del tuo server database (es 'db.reteaziendale.local')"
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Il comando seguente troverà tutti i ticket attivi nella coda 'general' e ne imposterà la priorità a 99 se nessuno li ha toccati nelle ultime 4 ore:"
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr "Le ricerche seguenti sono state cancellate e saranno rimosse dal cruscotto appena il relativo riquadro verrà aggiornato."
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr "Le seguenti ricerche potrebbero non essere visibili a tutti gli utenti che possono vedere questo cruscotto"
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "La chiave è stata disabilitata"
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "La chiave è stata revocata"
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "La chiave è scaduta"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr "L'affidabilità della chiava è completa"
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr "La chiave è considerata affidabile"
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Il nuovo valore è stato impostato."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "L'incaricato del ticket"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "La pagina richiesta non è disponibile"
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Il richiedente del ticket"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr "Le impostazioni scelte sono salvate in %1"
+
+#: NOT FOUND IN SOURCE
+msgid "The settings you've chosen are stored in %1. You can edit this file to refine your configuration further. You can prevent this installation wizard from being shown again by running `<tt>chmod -w '%1'</tt>`."
+msgstr "Le impostazioni scelte sono state salvate nel file %1. Puoi editare quel file per ritoccare la configurazione di RT. Per evitare che al prossimo accesso la procedura di installazione guidata sia visualizzata di nuovo, esegui il comando `<tt>chmod -w '%1'</tt>`."
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr "Il sistema non può firmare i meggaggi email in uscita. Normalmente significa che la passphrase non è impostata correttamente, o che l'agente GPG non sta funzionando. Avvisa immediatamente l'amministratore di sistema. Gli indirizzi email che evidenziano il problema sono:"
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Tema"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "Sono disponibili varie chiavi crittografiche"
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "Questo ticket contiene messaggi non letti"
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr "Il livello di affidabilità di questa chiave è limitato"
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "Nessuna chiave crittografica disponibile"
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr "È disponibile una chiave crittografica, ma il livello di affidabilità non è impostato."
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Questi commenti non vengono normalmente mostrati all'utente"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr "Le seguenti opzioni di configurazione sono il minimo necessario per consentire a RT di funzionare. È richiesto l'inserimento del nome di questa installazione di RT, e il nome DNS che verrà usato per raggiungerla. È anche necessario fornire una password da usare per l'amministratore di sistema."
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "L'oggetto non ammette questo campo personalizzato"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Questa funzionalità è riservata agli amministratori di sistema"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr "Potrebbe significare che la directory '%1' non è scrivibile, oppure che una tabella del database è mancante o corrotta."
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Il messaggio sarà inviato a..."
@@ -5646,15 +7669,15 @@ msgstr "Il messaggio sarà inviato a..."
msgid "This ticket %1 %2 (%3)\\n"
msgstr "Il ticket %1 %2 (%3)\\n"
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Questo strumento permette di eseguire qualsiasi modulo perl da dentro RT."
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "La transazione sembra non avere alcun contenuto"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "I %1 ticket a maggior priorità richiesti da questo utente"
@@ -5663,10 +7686,22 @@ msgstr "I %1 ticket a maggior priorità richiesti da questo utente"
msgid "This user's 25 highest priority tickets"
msgstr "I 25 ticket a maggior priorità richiesti da questo utente"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Gio"
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Gio."
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Giovedì"
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Ticket"
+
#: NOT FOUND IN SOURCE
msgid "Ticket # %1 %2"
msgstr "Ticket n° %1 %2"
@@ -5675,24 +7710,29 @@ msgstr "Ticket n° %1 %2"
msgid "Ticket # %1 Jumbo update: %2"
msgstr "Ticket n° %1 aggiornamento Jumbo: %2"
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Ticket n°%1 aggiornamento Jumbo: %2"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "Grafico delle relazioni del ticket n°%1"
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Ticket n°%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
-msgstr ""
+msgstr "Ticket %1"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Creato ticket %1 nella coda '%2'"
@@ -5701,16 +7741,17 @@ msgstr "Creato ticket %1 nella coda '%2'"
msgid "Ticket %1 loaded\\n"
msgstr "Caricato ticket %1\\n"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Ticket %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Campi personalizzati del ticket"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Cronologia del ticket n° %1 %2"
@@ -5719,11 +7760,15 @@ msgstr "Cronologia del ticket n° %1 %2"
msgid "Ticket Id"
msgstr "Identificativo ticket"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Ticket risolto"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Ricerca ticket"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Transazioni sul ticket"
@@ -5731,18 +7776,22 @@ msgstr "Transazioni sul ticket"
msgid "Ticket attachment"
msgstr "Allegato al ticket"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Contenuto del ticket"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Tipo del contenuto del ticket"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "A causa di un errore interno non è stato possibile creare il ticket"
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "Impossibile caricare il ticket"
+
#: NOT FOUND IN SOURCE
msgid "Ticket created"
msgstr "Ticket creato"
@@ -5755,6 +7804,10 @@ msgstr "Creazione del ticket fallita"
msgid "Ticket deleted"
msgstr "Ticket eliminato"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Visualizzazione ticket"
+
#: NOT FOUND IN SOURCE
msgid "Ticket id not found"
msgstr "Identificativo del ticket non trovato"
@@ -5763,7 +7816,7 @@ msgstr "Identificativo del ticket non trovato"
msgid "Ticket killed"
msgstr "Ticket eliminato"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Metadati del ticket"
@@ -5771,7 +7824,7 @@ msgstr "Metadati del ticket"
msgid "Ticket not found"
msgstr "Ticket non trovato"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Stato del ticket cambiato"
@@ -5779,24 +7832,30 @@ msgstr "Stato del ticket cambiato"
msgid "Ticket watchers"
msgstr "Osservatori del ticket"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "Modulo di ricerca TicketSQL"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Ticket"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Ticket %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "Ticket %1 da %2"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Ticket creati dopo"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Ticket creati prima"
@@ -5804,58 +7863,66 @@ msgstr "Ticket creati prima"
msgid "Tickets from %1"
msgstr "Ticket da %1"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Ticket risolti dopo"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Ticket risolti prima"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Ticket che dipendono da questa approvazione:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Tempo stimato"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Tempo rimasto"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Tempo lavorato"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Tempo rimanente"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Tempo impiegato per l'elaborazione"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Tempo impiegato"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
msgid "TimeEstimated"
msgstr "Tempo Stimato"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
msgid "TimeLeft"
msgstr "Tempo Rimanente"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "Tempo Impiegato"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Fuso orario"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Titolo"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "A"
+
#: NOT FOUND IN SOURCE
msgid "To generate a diff of this commit:"
msgstr "Per generare una diff dopo il commit:"
@@ -5864,115 +7931,158 @@ msgstr "Per generare una diff dopo il commit:"
msgid "To generate a diff of this commit:\\n"
msgstr "Per generare una diff dopo il commit:\\n"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Per richieste di supporto, formazione, personalizzazioni o acquisto di licenze, si prega di contattare %1."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Ultima Comunicazione a Richiedenti"
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Elements/BuildFormatString:99
msgid "ToldRelative"
msgstr "Tempo Da Ultimo Contatto Richiedente"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Strumenti"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Totale"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transazioni"
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Transazione %1 ripulita"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transazione creata"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Campi personalizzati della transazione"
-#: NOT FOUND IN SOURCE
-msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
-msgstr "Transaction->Create fallita, devi specificare l'identificativo dell'oggetto"
-
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaction->Create fallita, devi specificare il tipo e l'identificativo dell'oggetto"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr "DataTransazione"
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Le transazioni sono immutabili"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Affidabilità"
+
#: NOT FOUND IN SOURCE
msgid "Trying to delete a right: %1"
msgstr "Provo a eliminare un diritto: %1"
-#: lib/RT/Date.pm:418
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Mar."
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Martedì"
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Tipo"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Il tipo è cambiato da '%1' a '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr "Impossibile determinare il tipo o l'id dell'oggetto"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "Impossibile abbonarsi al cruscotto %1: permesso negato"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Non Implementato"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Username unix"
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "Username Unix"
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr "Sconosciuto (nessun valore di affidabilità assegnato)"
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr "Sconosciuto (questo valore è nuovo per il sistema)"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "ContentEncoding sconosciuto %1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
+#: NOT FOUND IN SOURCE
msgid "Unknown field: $key"
msgstr "Campo sconosciuto: $key"
-#: html/Elements/SelectResultsPerPage:58
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "Campo sconosciuto: %1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr "TogliLimiti"
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Illimitato"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Ricerca senza nome"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Non Privilegiato"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Campi personalizzati non selezionati"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Oggetti non selezionati"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr "Annulla chiave privata"
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Non Preso"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Aggiornamento"
@@ -5980,15 +8090,19 @@ msgstr "Aggiornamento"
msgid "Update All"
msgstr "Aggiorna tutti"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Aggiorna grafico"
+
#: NOT FOUND IN SOURCE
msgid "Update ID"
msgstr "Identificativo aggiornamento"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Aggiorna ticket"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Tipo aggiornamento"
@@ -6000,7 +8114,11 @@ msgstr "Aggiorna tutti questi ticket contemporaneamente"
msgid "Update email"
msgstr "Aggiorna email"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Aggiorna formato e avvia ricerca"
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Aggiorna ticket multipli"
@@ -6008,7 +8126,7 @@ msgstr "Aggiorna ticket multipli"
msgid "Update name"
msgstr "Aggiorna nome"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Aggiornamento non registrato."
@@ -6020,7 +8138,7 @@ msgstr "Aggiorna i ticket selezionati"
msgid "Update signature"
msgstr "Aggiorna la firma"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Aggiorna il ticket"
@@ -6028,60 +8146,107 @@ msgstr "Aggiorna il ticket"
msgid "Update ticket # %1"
msgstr "Aggiorna il ticket n° %1"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Aggiorna il ticket n°%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Aggiorna il ticket n°%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Il tipo aggiornamento non era ne' corrispondenza ne' commento."
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr "AggiornaStato"
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Aggiornato"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "Ricerca salvata \"%1\" aggiornata"
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Upload"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Upload file multipli"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Upload immagini multiple"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Upload file singolo"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Upload immagine singola"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Upload fino a %1 file"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Upload fino a %1 immagini"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Upload delle modifiche"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Utilizzo: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "Usa SSL?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "Usa il valore predefinito (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Use fixed-width font to display plaintext messages"
+msgstr "Usa un font a spaziatura fissa per mostrare i messaggi contenenti solo testo"
+
+#: NOT FOUND IN SOURCE
+msgid "Use monospace font"
+msgstr "Usa un font a spaziatura fissa"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Usa altri strumenti di amministrazione di RT"
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "Usa il valore predefinito dal sistema (%1)"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Utente"
+
#: NOT FOUND IN SOURCE
msgid "User %1 %2: %3\\n"
msgstr "Utente %1 %2: %3\\n"
@@ -6090,7 +8255,7 @@ msgstr "Utente %1 %2: %3\\n"
msgid "User %1 Password: %2\\n"
msgstr "Utente %1 Password: %2\\n"
-#: lib/RT/Ticket_Overlay.pm:506
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "Impossibile trovare l'utente '%1'"
@@ -6103,11 +8268,15 @@ msgstr "Utente '%1' non trovato"
msgid "User '%1' not found\\n"
msgstr "Utente '%1' non trovato\\n"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr "Utente (creato - scadenza)"
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Definito dall'utente"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Condizioni e azioni definite dall'utente"
@@ -6119,28 +8288,41 @@ msgstr "Username"
msgid "User Id"
msgstr "Username"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Diritti dell'utente"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "L'utente ha richiesto un aggiornamento di tipo sconosciuto sul campo personalizzato %1 per %2 l'oggetto n°%3"
-#: html/Admin/Users/Modify.html:301
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Impossibile creare l'utente: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Utente creato"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Gruppi definiti dall'utente"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr "Utente disabilitato"
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr "Utente abilitato"
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "L'utente non ha un indirizzo email"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Utente caricato"
@@ -6152,32 +8334,40 @@ msgstr "Utente notificato"
msgid "User view"
msgstr "User view"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Chiavi GnuPG dell'utente"
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Gruppi definiti dall'utente"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Username"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Formato Nome Utente"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Utenti"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Utenti che soddisfano il criterio di ricerca"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
-msgstr ""
+msgstr "Uso la transazione n°%1"
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Query valida"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Validazione"
@@ -6185,19 +8375,55 @@ msgstr "Validazione"
msgid "ValueOfQueue"
msgstr "ValoreDellaCoda"
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Valori"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Vari report di RT"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Visualizza i cruscotti per questo gruppo"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Visualizza i cruscotti personali"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "Visualizza i cruscotti di sistema"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "W3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr "altezza dell'editor WYSIWYG"
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "Editor visuale di messaggi (WYSIWYG)"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Attenzione! NON è firmato!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Attenzione: nel tuo profilo non hai impostato un indirizzo email, non riceverai questo cruscotto finché non l'avrai fatto"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Osserva"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "OsservaComeAdminCc"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:134
msgid "Watcher"
msgstr "Osservatore"
@@ -6205,132 +8431,241 @@ msgstr "Osservatore"
msgid "Watcher loaded"
msgstr "Osservatore caricato"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "GruppoOsservatori"
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Osservatori"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "La connessione al database come amministratore è stata verificata con successo. Ora puoi cliccare 'Configurazione di base' per continuare la configurazione di RT."
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr "E' necessario specificare il nome del database da usare per RT e dove è situato. Servono anche username e password che RT userà per accedere al DB. Le credenziali di amministratore verranno usate solo per creare il database e le tabelle se necessario. Durante il passo 6 dell'installazione guidata, con queste informazioni sarà possibile creare e inizializzare il database di RT."
+
+#: NOT FOUND IN SOURCE
+msgid "We were able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "Il database è operativo e accetta normalmente le connessioni amministrative. Clicca 'Imposta sistema' per continuare la configurazione."
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Porta web"
+
#: NOT FOUND IN SOURCE
msgid "WebEncoding"
msgstr "WebEncoding"
-#: lib/RT/Date.pm:419
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Mer"
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Mer."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Mercoledì"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "Riassunto settimanale"
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Benvenuto a RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr "Cosa ho fatto oggi"
-#: etc/initialdata:521
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Cos'è RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr "Quando RT non può elaborare un messaggio, a chi deve essere inoltrato?"
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr "Quando RT invia un email, imposta il mittente e l'indirizzo di risposta in modo che un utente possa aggiungere contenuti al ticket semplicemente usando la funzione 'Rispondi al mittente' del programma di posta elettronica. RT usa indirizzi email diversi per le normali risposte e per i commenti interni. Questi indirizzi email possono essere diversi per ogni coda, e devono essere configurati per poter usare il programma <tt>rt-mailgate</tt>."
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Quando un ticket ha ricevuto tutte le approvazioni richieste, aggiungi una corrispondenza al ticket originale"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "Quando un ticket riceve una qualsiasi delle approvazioni richieste, aggiungi una corrispondenza al ticket originale"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Quando viene creato un ticket"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Quando una richiesta di approvazione viene creata, notifica chi ha in carico il ticket e gli AdminCc che devono approvarlo"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Quando succede qualsiasi cosa"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr "Quando clicchi 'Verifica connessione al database' potresti sperimentare un certo ritardo mentre RT prova ad effettuare una connessione al server DB."
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "Quando un ticket viene chiuso"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr "Ogni volta che un ticket viene respinto"
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Quando un ticket viene riaperto"
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Quando un ticket viene risolto"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Quando cambia colui che ha in carico il ticket"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Quando cambia la priorità di un ticket"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Quando il ticket si sposta in un'altra coda"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Quando cambia lo stato di un ticket"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Quando si verifica una condizione definita dall'utente"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Quando arrivano commenti"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Quando arrivano corrispondenze"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "Dove si trova il programma sendmail sul tuo server"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr "Azzerare"
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Lavoro"
-#: html/Search/Results.html:82
+#: NOT FOUND IN SOURCE
msgid "Work offline"
msgstr "Lavoro offline"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "TelefonoLavoro"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Impiegato"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Sì"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Hai già in carico questo ticket"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr "E' stato scelto di crittografare i messaggi email in uscita, ma ci sono problemi con le chiavi pubbliche di alcuni destinatari. Per continuare è necessario risolvere i problemi con le chiavi pubbliche, disabilitare l'invio dell'email ai destinatari con problemi di chiave pubblica, oppure disabilitare la crittografia."
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr "E' stato scelto di crittografare i messaggi email in uscita, ma ci sono problemi con la chiave pubblica di un destinatario. Per continuare è necessario risolvere il problemi con la chiave, disabilitare l'invio dell'email al destinatario con problemi di chiave pubblica, oppure disabilitare la crittografia."
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Non sei un utente autorizzato"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Puoi <a href=\"%1\">andare al primo messaggio non letto</a> oppure <a href=\"%2\">andare al primo messaggio non letto e marcare tutti i messaggi come visti</a>."
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr "E' possibile anche modificare la ricerca predefinta stessa"
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Puoi solo riassegnare ticket che hai in carico, o che non sono ancora assegnati"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr "E' possibile prendere in carico solo i ticket non assegnati"
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "Non hai diritti di <b>Super Utente</b>"
+
#: NOT FOUND IN SOURCE
msgid "You don't have permission to view that ticket.\\n"
msgstr "Non hai i permessi per visualizzare questo ticket.\\n"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "Hai trovato %1 ticket nella coda %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Ti sei scollegato da RT."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Non hai l'autorizzazione per creare ticket in questa coda."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Non puoi creare ticket in questa coda."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Devi fornire una password di amministratore"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr "Verrai indirizzato direttamente alla pagina di accesso. Potrai accedere usando <tt>root</tt> come username, e la password specificata precedentemente."
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr "Scegli il database che tu, o che il tuo amministratore di sistema, preferite usare."
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr "Questa pagina viene visualizzata quando il server RT è stato avviato senza un database attivo. Con tutta probabilità questa è la prima volta che provi ad avviare RT. Clicca <i>Iniziamo!</i> qui sotto per eseguire la configurazione guidata del server e del database."
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Collegati di nuovo"
@@ -6342,27 +8677,23 @@ msgstr "Le tue %1 richieste"
msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
msgstr "L'amministratore RT non ha configurato correttamente l'alias di email che invoca RT"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "La tua richiesta è stata approvata da %1. Potrebbero essere necessarie altre approvazioni."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "La tua richiesta è stata approvata."
#: NOT FOUND IN SOURCE
-msgid "Your request was rejected"
-msgstr "La tua richiesta è stata respinte"
-
-#: etc/initialdata:445
msgid "Your request was rejected."
msgstr "La tua richiesta è stata respinta."
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Il tuo username o la tua password non sono corretti"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "CAP"
@@ -6370,32 +8701,60 @@ msgstr "CAP"
msgid "[no subject]"
msgstr "[senza oggetto]"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[nessuno]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "dopo il"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "permetti la creazione di ricerche salvate"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "permetti il caricamento di ricerche salvate"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "come concesso a %1"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "barra"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "prima del"
+
#: NOT FOUND IN SOURCE
msgid "belongs to"
msgstr "appartiene a"
-#: html/Search/Results.html:83
-msgid "chart"
-msgstr "grafico"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "dal basso verso l'alto"
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr "clicca per selezionare/deselezionare tutti gli oggetti in una sola volta"
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "chiuso"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "contiene"
@@ -6407,6 +8766,10 @@ msgstr "contenuto"
msgid "content-type"
msgstr "content-type"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr "configurazione base"
+
#: NOT FOUND IN SOURCE
msgid "correspondence (probably) not sent"
msgstr "corrispondenza (probabilmente) non inviata"
@@ -6415,11 +8778,22 @@ msgstr "corrispondenza (probabilmente) non inviata"
msgid "correspondence sent"
msgstr "corrispondenza inviata"
-#: NOT FOUND IN SOURCE
-msgid "current: $current, want $want, Error near ->$val<- expecting a "
-msgstr "attuale: $current, richiesto $want, Errore vicino a ->$val<- mi aspettavo "
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr "campo personalizzato '%1'"
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "quotidianamente"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "quotidianamente alle %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "giorni"
@@ -6435,46 +8809,66 @@ msgstr "cancella"
msgid "deleted"
msgstr "cancellato"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "does not belong to"
msgstr "non appartiene a"
-#: html/Search/Elements/PickBasics:61
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "non corrisponde a"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "non contiene"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "non corrisponde"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "scarica"
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "uguale a"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "errore: impossibile spostare in basso"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "errore: impossibile spostare a sinistra"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "errore: impossibile spostare in alto"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "errore: niente da cancellare"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "errore: niente da spostare"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "errore: niente da invertire"
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "ogni"
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr "plugin eseguito con successo"
+
#: NOT FOUND IN SOURCE
msgid "false"
msgstr "falso"
@@ -6483,90 +8877,162 @@ msgstr "falso"
msgid "filename"
msgstr "nome file"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "completo"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "maggiore di"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "gruppo '%1'"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr "raggruppati per %1"
-
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "ore"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "Codice"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "uguale a"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "diverso da"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "chiave disabilitata"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "chiave scaduta"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "chiave revocata"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "da sinistra a destra"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "minore di"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "marginale"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "corrisponde a"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "profondità massima"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minuti"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "mensilmente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "mensilmente (il %1 del mese) alle %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "mesi"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "mai"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "nuovo"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "no"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "nessun nome"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "nessun valore"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "nessuno"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "diverso da"
-#: NOT FOUND IN SOURCE
-msgid "notlike"
-msgstr "diverso da"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "nulla"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "oggetti rimossi con successo"
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "il"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr "al giorno"
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "aperto"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "apri/chiudi"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "altro..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "Gruppo personale '%1' per l'utente '%2'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "torta"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "il plugin ha restituito una lista vuota"
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "coda %1 %2"
@@ -6579,15 +9045,31 @@ msgstr "respinto"
msgid "resolved"
msgstr "risolto"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "da destra a sinistra"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sec"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr "vedi lista oggetti sottostante"
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr "Mostra pannello approvazione"
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "Mostra configurazione"
-#: html/Search/Results.html:80
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr "configurazione locale"
+
+#: NOT FOUND IN SOURCE
msgid "spreadsheet"
msgstr "foglio di calcolo"
@@ -6595,39 +9077,50 @@ msgstr "foglio di calcolo"
msgid "stalled"
msgstr "in stallo"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr "stile: %1"
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
-msgstr ""
+msgstr "righe riepilogative"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "sistema %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "gruppo di sistema '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "il componente chiamante non ha specificato il perché"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "l'indirizzo email che verrà usato per default come mittente e Reply-To nei messaggi riguardanti i commenti"
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "l'indirizzo email che verrà usato per default come mittente e Reply-To nei messaggi riguardanti la corrispondenza"
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "ticket n°%1 %2"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "dall'alto verso il basso"
+
#: NOT FOUND IN SOURCE
msgid "true"
msgstr "vero"
-#: lib/RT/Group_Overlay.pm:236
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "definitivo"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "gruppo %1 senza descrizione"
@@ -6636,20 +9129,45 @@ msgstr "gruppo %1 senza descrizione"
msgid "undescripbed group %1"
msgstr "gruppo %1 senza descrizione"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "utente %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "prolisso"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "settimanalmente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "settimanalmente (il %1) alle %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "settimane"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "numero della porta sulla quale il server riceverà le connessioni, es. 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "comprese le intestazioni"
+
#: NOT FOUND IN SOURCE
msgid "with template %1"
msgstr "con il modello %1"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "anni"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "sì"
+
diff --git a/rt/lib/RT/I18N/ja.po b/rt/lib/RT/I18N/ja.po
index 691eb10..a5d55f4 100644
--- a/rt/lib/RT/I18N/ja.po
+++ b/rt/lib/RT/I18N/ja.po
@@ -1,1011 +1,1025 @@
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.6.x\n"
-"POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2007-11-30 01:18+0900\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-06-12 23:40+0000\n"
"Last-Translator: Shinji R. Yamane <s-yamane@computer.org>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: JAPAN\n"
+"X-Poedit-SearchPath-0: \n"
+"X-Poedit-Basepath: /usr/local/share/request-tracker3.8/\n"
-#. ($self->{CurrentSearch}{Object}->Description)
-#: html/Widgets/SavedSearch:70
+#: NOT FOUND IN SOURCE
msgid " %1 deleted."
-msgstr "%1 を削除ã—ã¾ã—ãŸ"
+msgstr " %1 を削除ã—ã¾ã—ãŸã€‚"
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-#: html/Widgets/SavedSearch:47
+#: NOT FOUND IN SOURCE
msgid " %1 renamed to %2."
-msgstr "%1 ã‚’ %2 ã«å¤‰æ›´ã—ã¾ã—ãŸ"
+msgstr " %1 ã‚’ %2 ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚"
-#. ($args->{Description})
-#: html/Widgets/SavedSearch:60
+#: NOT FOUND IN SOURCE
msgid " %1 saved."
-msgstr "%1 ã‚’ä¿å­˜ã—ã¾ã—ãŸ"
+msgstr " %1 ã‚’ä¿å­˜ã—ã¾ã—ãŸã€‚"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (公開éµãŒã‚ã‚Šã¾ã›ã‚“!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
msgstr "#"
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
-#: html/Approvals/Elements/Approve:48
-#: html/Approvals/Elements/ShowDependency:71
-#: html/SelfService/Display.html:46
-#: html/Ticket/Display.html:47
-#: html/Ticket/Display.html:51
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
-msgstr ""
+msgstr "#%1: %2"
-#: html/Elements/ShowSearch:105
+#: NOT FOUND IN SOURCE
msgid "$1"
-msgstr ""
+msgstr "$1"
-#. ($label)
-#: lib/RT/Record.pm:940
-msgid "$prefix %1"
-msgstr ""
+#: NOT FOUND IN SOURCE
+msgid "$DAYS_OF_WEEK[$dow]."
+msgstr "$DAYS_OF_WEEK[$dow]."
+#: NOT FOUND IN SOURCE
+msgid "$MONTHS[$mon]."
+msgstr "$MONTHS[$mon]."
+
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
-#: lib/RT/URI/fsck_com_rt.pm:256
msgid "%1 #%2"
-msgstr ""
+msgstr "%1 #%2"
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
-#: lib/RT/Date.pm:365
msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
msgstr ""
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
-#: lib/RT/Date.pm:401
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%7-%2-%3 %1 %4:%5:%6"
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
-#: lib/RT/Record.pm:1685
-#: lib/RT/Transaction_Overlay.pm:647
-#: lib/RT/Transaction_Overlay.pm:690
msgid "%1 %2 added"
msgstr ""
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
-#: lib/RT/Date.pm:362
msgid "%1 %2 ago"
msgstr "%1 %2 å‰"
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
-#: lib/RT/Record.pm:1692
-#: lib/RT/Transaction_Overlay.pm:654
msgid "%1 %2 changed to %3"
-msgstr "%3ã«å¤‰æ›´ã•ã‚ŒãŸ%1 %2 "
+msgstr "%1 %2 㯠%3 ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
-#: lib/RT/Record.pm:1689
-#: lib/RT/Transaction_Overlay.pm:650
-#: lib/RT/Transaction_Overlay.pm:696
msgid "%1 %2 deleted"
+msgstr "%1 を削除ã—ã¾ã—ãŸ"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
msgstr ""
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
-#: html/Admin/Elements/EditScrips:65
-#: html/Admin/Elements/ListGlobalScrips:63
-#: html/Ticket/Elements/PreviewScrips:103
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 (%2) %3 this ticket\\n"
-msgstr "%1 (%2) %3 ã“ã®ãƒã‚±ãƒƒãƒˆ\\n"
-
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
-#: html/Ticket/Elements/ShowAttachments:72
msgid "%1 (%2) by %3"
-msgstr ""
+msgstr "%1 (%2) - %3"
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
-#: html/SelfService/Update.html:60
-#: html/Ticket/Elements/EditBasics:108
-#: html/Ticket/Update.html:61
-#: html/Ticket/Update.html:63
-#: html/Tools/MyDay.html:66
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (変更ãªã—)"
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
-#: bin/rt-crontool:237
-#: bin/rt-crontool:244
-#: bin/rt-crontool:250
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr ""
+#: bin/rt-crontool:365
#. ("--verbose")
-#: bin/rt-crontool:262
msgid "%1 - Output status updates to STDOUT"
msgstr ""
-#. ("--template-id")
-#: bin/rt-crontool:253
-msgid "%1 - Specify id of the template you want to use"
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
msgstr ""
-#. ("--transaction")
-#: bin/rt-crontool:256
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
+#: bin/rt-crontool:348
#. ("--action")
-#: bin/rt-crontool:247
msgid "%1 - Specify the action module you want to use"
msgstr ""
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
#. ("--condition")
-#: bin/rt-crontool:241
msgid "%1 - Specify the condition module you want to use"
msgstr ""
+#: bin/rt-crontool:335
#. ("--search")
-#: bin/rt-crontool:234
msgid "%1 - Specify the search module you want to use"
msgstr ""
-#. ("--transaction-type")
-#: bin/rt-crontool:259
-msgid "%1 - Specify the type of a transaction you want to use"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
msgstr ""
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
-#: html/Elements/Footer:56
+#: NOT FOUND IN SOURCE
+msgid "%1 Dashboards"
+msgstr "%1ã®ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰"
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
-#: lib/RT/ScripAction_Overlay.pm:150
msgid "%1 ScripAction loaded"
-msgstr "%1スクリプトアクションロードã—ã¾ã—ãŸ"
+msgstr "%1 ScripActionを読ã¿è¾¼ã¿ã¾ã—ãŸ"
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
-#: lib/RT/Record.pm:1722
msgid "%1 added as a value for %2"
msgstr "%2ã®å€¤ã«%1ãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "%1 aliases require a TicketId to work on"
-msgstr "%1aliasesã‚’å‹•ã‹ã™ãŸã‚ã«ãƒã‚±ãƒƒãƒˆIDãŒå¿…è¦ã§ã™"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 aliases require a TicketId to work on "
-msgstr "%1aliasesã‚’å‹•ã‹ã™ãŸã‚ã«ãƒã‚±ãƒƒãƒˆIDãŒå¿…è¦ã§ã™ "
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 aliases require a TicketId to work on (from %2) %3"
-msgstr "%1aliasesã‚’å‹•ã‹ã™ãŸã‚ã«ãƒã‚±ãƒƒãƒˆIDãŒå¿…è¦ã§ã™(%2ã‹ã‚‰) %3"
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
-#: lib/RT/Link_Overlay.pm:144
-#: lib/RT/Link_Overlay.pm:151
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr ""
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
-#: html/Ticket/Elements/ShowDates:73
-#: lib/RT/Transaction_Overlay.pm:531
msgid "%1 by %2"
msgstr "%1 (%2)"
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
-#: lib/RT/Transaction_Overlay.pm:788
-#: lib/RT/Transaction_Overlay.pm:797
-#: lib/RT/Transaction_Overlay.pm:800
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
-msgstr "%1ã¯%2ã‹ã‚‰%3ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+msgstr "%1ã¯ã€Œ%2ã€ã‹ã‚‰ã€Œ%3ã€ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%2ã®%1グラフã§è¡¨ç¤º"
-#. ($Description)
-#: html/Search/Build.html:213
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr ""
-#: lib/RT/Record.pm:944
-msgid "%1 could not be set to %2."
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 couldn't init a transaction (%2)\\n"
-msgstr "%1ã¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’開始ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ(%2)\\n"
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr ""
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
-#: lib/RT/Ticket_Overlay.pm:2787
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr "%1を解決状態ã«è¨­å®šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚RTã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¸€è²«æ€§ãŒãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
+msgstr "%1を解決ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚RTã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¸€è²«æ€§ãŒãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
-#: lib/RT/Transaction_Overlay.pm:571
msgid "%1 created"
-msgstr ""
+msgstr "%1 作æˆ"
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
-#: lib/RT/Transaction_Overlay.pm:576
msgid "%1 deleted"
+msgstr "%1 を削除ã—ã¾ã—ãŸ"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 grouped by %2"
-msgstr "優先度ã®é«˜ã„ãƒã‚±ãƒƒãƒˆ%1件"
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
-#: etc/initialdata:593
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
-msgstr "優先度ã®é«˜ã„ãƒã‚±ãƒƒãƒˆ%1件"
+msgstr "担当ãƒã‚±ãƒƒãƒˆã®æœ€å„ªå…ˆ%1件"
+#: bin/rt-crontool:330
#. ($0)
-#: bin/rt-crontool:229
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr ""
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
-#: lib/RT/Queue_Overlay.pm:863
msgid "%1 is no longer a %2 for this queue."
-msgstr "%1ã¯ã“ã®ã‚­ãƒ¥ãƒ¼ã§ã¯%2ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "%1ã¯ã‚‚ã†ã“ã®ã‚­ãƒ¥ãƒ¼ã®%2ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1ã¯ã“ã®ãƒã‚±ãƒƒãƒˆã§ã¯%2ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "%1ã¯ã‚‚ã†ã“ã®ãƒã‚±ãƒƒãƒˆã®%2ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1ã¯ã‚‚ã†ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰%2ã®å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "%1 isn't a valid Queue id."
-msgstr "%1ã¯æœ‰åŠ¹ãªã‚­ãƒ¥ãƒ¼IDã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
-#: html/Ticket/Elements/ShowTime:47
-#: html/Ticket/Elements/ShowTime:49
msgid "%1 min"
msgstr "%1分"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "担当者ãªã—ãƒã‚±ãƒƒãƒˆ%1件"
-#: NOT FOUND IN SOURCE
-msgid "%1 not shown"
-msgstr "%1表示ã•ã‚Œã¾ã›ã‚“"
-
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr ""
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-#: html/User/Elements/DelegateRights:97
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
+msgstr "%1ã®æ¨©é™"
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 succeeded\\n"
-msgstr "%1 æˆåŠŸã—ã¾ã—ãŸ\\n"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "æ›´æ–°"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 タイプ㯠$MessageIdID ã§ã¯ä¸æ˜Žã§ã™"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 タイプã¯%2ã§ã¯ä¸æ˜Žã§ã™"
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 最終更新"
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
-#: lib/RT/Action/ResolveMembers.pm:63
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1ã¯ã‚°ãƒ«ãƒ¼ãƒ—ãƒã‚±ãƒƒãƒˆã®ã™ã¹ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’解決状態ã«ã—ã¾ã™ã€‚"
-#: NOT FOUND IN SOURCE
-msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
-msgstr "%1ãŒã‚‚ã—リンクã•ã‚ŒãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ä¾å­˜ã™ã‚‹ï¼ˆã‚‚ã—ãã¯ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚る)場åˆã€[ローカル]ベースãŒã¨ãŽã‚Œã¾ã™ã€‚"
-
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr ""
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1ã®ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
-#: html/Search/Elements/SearchPrivacy:52
-#: html/Search/Elements/SelectSearchObject:55
-#: html/Search/Elements/SelectSearchesForObjects:57
+#. ($object->Name)
msgid "%1's saved searches"
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
-#: lib/RT/Transaction_Overlay.pm:481
msgid "%1: no attachment specified"
msgstr "%1:アタッãƒãƒ¡ãƒ³ãƒˆãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
-#: html/Ticket/Elements/ShowTransactionAttachments:78
msgid "%1b"
-msgstr ""
+msgstr "%1b"
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
-#: html/Ticket/Elements/ShowTransactionAttachments:75
msgid "%1k"
-msgstr ""
+msgstr "%1k"
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
-#: html/Ticket/Elements/ShowTime:49
msgid "%quant(%1,hour)"
msgstr ""
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
-#: lib/RT/Ticket_Overlay.pm:1142
msgid "'%1' is an invalid value for status"
-msgstr "%1'ã¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã«ç„¡åŠ¹ãªå€¤ã§ã™"
-
-#: NOT FOUND IN SOURCE
-msgid "'%1' not a recognized action. "
-msgstr "%1' アクションをèªè­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+msgstr "%1'ã¯ç„¡åŠ¹ãªã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã§ã™"
-#: NOT FOUND IN SOURCE
-msgid "(Check box to delete scrip)"
-msgstr "(ボックスã®ãƒã‚§ãƒƒã‚¯ã§ã‚¹ã‚¯ãƒªãƒ—トを削除)"
-
-#: html/Admin/Elements/EditCustomFieldValues:50
-#: html/Admin/Elements/EditQueueWatchers:50
-#: html/Admin/Elements/EditScrips:56
-#: html/Admin/Elements/EditTemplates:57
-#: html/Admin/Groups/Members.html:73
-#: html/Elements/EditLinks:54
-#: html/Ticket/Elements/EditPeople:67
-#: html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
-msgstr "(ボックスã®ãƒã‚§ãƒƒã‚¯ã§å‰Šé™¤)"
+msgstr "(削除ã™ã‚‹ã«ã¯ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(ボックスã®ãƒã‚§ãƒƒã‚¯ã§å‘ŠçŸ¥å—ã‘å–り先リストã‹ã‚‰å‰Šé™¤)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(ボックスã®ãƒã‚§ãƒƒã‚¯ã§å‘ŠçŸ¥å—ã‘å–り先リストã«è¿½åŠ )"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(ãƒã‚±ãƒƒãƒˆIDã¾ãŸã¯URLを空白文字ã§åŒºåˆ‡ã£ã¦å…¥åŠ›ã—ã¦ãã ã•ã„)"
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
-#: html/Admin/Queues/Modify.html:75
-#: html/Admin/Queues/Modify.html:81
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(空白ã®å ´åˆã€%1を指定ã—ã¾ã™)"
-#: html/Admin/Elements/EditCustomFields:74
-#: html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr ""
-#: html/Admin/Groups/Members.html:71
-#: html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
-msgstr "(メンãƒãƒ¼ãªã—)"
+msgstr "(メンãƒãƒ¼ãªã—)"
-#: html/Admin/Elements/EditScrips:53
-#: html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
-msgstr "(スクリプトãªã—)"
+msgstr ""
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr ""
-#: html/Admin/Elements/PickCustomFields:47
-#: html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
-msgstr "(コンマã§åŒºåˆ‡ã£ãŸEメールアドレスã«ã“ã®æ›´æ–°æƒ…å ±ã®Bccã‚’é€ã‚Šã¾ã™ã€‚ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«ã¯<strong>追加ã•ã‚Œã¾ã›ã‚“</strong>。)"
-
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(コンマã§åŒºåˆ‡ã£ãŸEメールアドレスã«ã“ã®æ›´æ–°æƒ…å ±ã®Bccã‚’é€ã‚Šã¾ã™ã€‚å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«ã¯<strong>追加ã•ã‚Œã¾ã›ã‚“</strong>。)"
+msgstr "(ãªã—)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(コンマã§åŒºåˆ‡ã£ãŸç®¡ç†ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã“ã®æ›´æ–°æƒ…å ±ã®Ccã‚’é€ã‚Šã¾ã™ã€‚ãã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«<strong>追加ã•ã‚Œã¾ã™</strong>。)"
+msgstr "(コンマã§åŒºåˆ‡ã£ãŸç®¡ç†emailアドレスã«ã“ã®æ›´æ–°æƒ…å ±ã®Ccã‚’é€ã‚Šã¾ã™ã€‚emailアドレスã¯å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«<strong>追加ã•ã‚Œã¾ã™</strong>。)"
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
-msgstr "(コンマã§åŒºåˆ‡ã£ãŸEメールアドレスã«ã“ã®æ›´æ–°æƒ…å ±ã®Ccã‚’é€ã‚Šã¾ã™ã€‚ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«ã¯<strong>追加ã•ã‚Œã¾ã›ã‚“</strong>。)"
-
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(コンマã§åŒºåˆ‡ã£ãŸEメールアドレスã«ã“ã®æ›´æ–°æƒ…å ±ã®Ccã‚’é€ã‚Šã¾ã™ã€‚å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«ã¯<strong>追加ã•ã‚Œã¾ã›ã‚“</strong>。)"
-
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(コンマã§åŒºåˆ‡ã£ãŸEメールアドレスã«ã“ã®æ›´æ–°æƒ…å ±ã®Ccã‚’é€ã‚Šã¾ã™ã€‚ãã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«<strong>追加ã•ã‚Œã¾ã™</strong>。)"
+msgstr "(コンマã§åŒºåˆ‡ã£ãŸemailアドレスã«ã“ã®æ›´æ–°æƒ…å ±ã®Ccã‚’é€ã‚Šã¾ã™ã€‚emailアドレスã¯å°†æ¥ã®æ›´æ–°æƒ…å ±ã®é€ã‚Šå…ˆã«<strong>追加ã•ã‚Œã¾ã™</strong>。)"
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr ""
-#: html/Ticket/Elements/EditWatchers:60
-#: html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr "(メールをé€ã‚Šã¾ã›ã‚“)"
-#: html/Admin/Groups/index.html:57
-#: html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(空)"
-#: html/Admin/Users/index.html:60
-msgid "(no name listed)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "(no subject)"
-msgstr "(件åãªã—)"
-
-#: html/Admin/Elements/SelectRights:72
-#: html/Elements/EditCustomFieldSelect:69
-#: html/Elements/SelectCustomFieldValue:51
-#: html/Elements/ShowCustomFields:54
-#: html/Search/Chart:56
-#: html/Search/Elements/Chart:76
-#: lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(値ãªã—)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr ""
-#: html/Elements/EditLinks:132
-#: html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(ã²ã¨ã¤ã®ãƒã‚±ãƒƒãƒˆã®ã¿)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(ãƒã‚±ãƒƒãƒˆ%1件 解決待ã¡)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(承èªå¾…ã¡)"
-#: html/Elements/RT__Ticket/ColumnMap:152
-msgid "(pending other Collection)"
-msgstr "(ä»–ã®ä½œæ¥­å¾…ã¡)"
-
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(必須項目ã§ã™)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(件åãªã—)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
msgstr ""
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
+msgstr "-"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
msgstr ""
#: NOT FOUND IN SOURCE
-msgid "25 highest priority tickets I own..."
-msgstr "ç§ãŒæ‰€æœ‰ã—ã¦ã„る最優先ãƒã‚±ãƒƒãƒˆ25件"
+msgid "1995-11-25 21:59:12"
+msgstr "1995-11-25 21:59:12"
#: NOT FOUND IN SOURCE
-msgid "25 highest priority tickets I requested..."
-msgstr "ç§ãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã—ãŸæœ€å„ªå…ˆãƒã‚±ãƒƒãƒˆ25件"
-
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr ""
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
-msgstr ""
-
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr ""
+msgid "1995-11-25T21:59:12Z"
+msgstr "1995-11-25T21:59:12Z"
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-#: html/Elements/CreateTicket:47
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"æ–°è¦ãƒã‚±ãƒƒãƒˆä½œæˆ:\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"ãƒã‚±ãƒƒãƒˆç™»éŒ²:\" />&nbsp;%1"
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-#: docs/design_docs/string-extraction-guide.txt:54
-#: lib/RT/StyleGuide.pod:787
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"æ–°è¦ä½œæˆ\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr ""
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:174
-#: lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
-msgstr "ACEã¯ã¿ã¤ã‹ã‚Šã¾ã›ã‚“"
+msgstr "ACEãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
-msgstr "ACEã¯ä½œæˆã€å‰Šé™¤ã®ã¿ã§ã™ã€‚"
+msgstr "ACEã¯ä½œæˆã¾ãŸã¯å‰Šé™¤ã®ã¿å¯èƒ½ã§ã™ã€‚"
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Aborting to avoid unintended ticket modifications.\\n"
-msgstr "æ„図的ã§ãªã„ãƒã‚±ãƒƒãƒˆã®ä¿®æ­£ã‚’防ããŸã‚ã«å¼·åˆ¶çµ‚了ã—ã¾ã™ã€‚\\n"
-
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "個人情報"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "アクセスコントロール"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "アクション"
+#: lib/RT/Scrip_Overlay.pm:136
#. ($args{'ScripAction'})
-#: lib/RT/Scrip_Overlay.pm:172
-msgid "Action %1 not found"
-msgstr "アクション%1ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+msgid "Action '%1' not found"
+msgstr "アクション「%1ã€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr ""
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr ""
-#: html/Search/Build.html:85
-msgid "Add"
-msgstr "追加ã™ã‚‹"
-
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "管ç†Ccを追加ã™ã‚‹"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Ccを追加ã™ã‚‹"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "コラムを追加"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr ""
-#: html/Ticket/Create.html:147
-#: html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "ã•ã‚‰ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "作æˆè€…を追加ã™ã‚‹"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Add a new a global scrip"
-msgstr "æ–°ã—ã„グローãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—トを追加ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Add a scrip to this queue"
-msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã«ã‚¹ã‚¯ãƒªãƒ—トを追加ã™ã‚‹"
-
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
-msgstr "ã™ã¹ã¦ã®ã‚­ãƒ¥ãƒ¼ã«é©ç”¨ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トを追加ã™ã‚‹"
-
-#: html/Search/Build.html:109
-#: html/Search/Build.html:94
-msgid "Add and Search"
-msgstr "追加ã—ã¦æ¤œç´¢"
+msgstr ""
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
-msgstr "é¸æŠžã•ã‚ŒãŸãƒã‚±ãƒƒãƒˆã¸ã®ã‚³ãƒ¡ãƒ³ãƒˆã¾ãŸã¯è¿”事を追加ã™ã‚‹"
+msgstr "é¸æŠžã—ãŸãƒã‚±ãƒƒãƒˆã«ã‚³ãƒ¡ãƒ³ãƒˆã¾ãŸã¯è¿”ä¿¡ã™ã‚‹"
-#: html/Admin/Groups/Members.html:63
-#: html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "メンãƒãƒ¼ã‚’追加ã™ã‚‹"
-#: html/Admin/Queues/People.html:87
-#: html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
-msgstr "æ–°ã—ã„ウォッãƒãƒ£ãƒ¼ã‚’追加ã™ã‚‹"
+msgstr "æ–°ã—ã„ウォッãƒãƒ£ãƒ¼ã«è¿½åŠ ã™ã‚‹"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "上記ã®æ¤œç´¢èªžã‚’追加"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
-msgstr "ã“れらã®æ¤œç´¢æ¡ä»¶ã‚’追加"
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "上記ã®æ¤œç´¢èªžã‚’追加ã—ã¦æ¤œç´¢å®Ÿè¡Œ"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr ""
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:763
msgid "Added principal as a %1 for this queue"
msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã«%1ã®è²¬ä»»è€…を追加ã—ã¾ã—ãŸ"
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1455
msgid "Added principal as a %1 for this ticket"
msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã«%1ã®è²¬ä»»è€…を追加ã—ã¾ã—ãŸ"
-#: html/Admin/Users/Modify.html:146
-#: html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "ä½æ‰€1"
-#: html/Admin/Users/Modify.html:151
-#: html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "ä½æ‰€2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "管ç†Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr ""
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr ""
-#: html/Admin/Queues/index.html:46
-#: html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
-msgstr "管ç†ã‚­ãƒ¥ãƒ¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin users"
-msgstr "管ç†ãƒ¦ãƒ¼ã‚¶ãƒ¼"
+msgstr ""
-#: html/Admin/Global/index.html:47
-#: html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "管ç†/グローãƒãƒ«è¨­å®š"
-#: NOT FOUND IN SOURCE
-msgid "Admin/Groups"
-msgstr "管ç†/グループ"
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Admin/Queue/Basics"
-msgstr "管ç†/キュー/基本"
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
-#: etc/initialdata:56
-#: html/Ticket/Elements/ShowPeople:60
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "管ç†Cc"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
-msgstr "管ç†ã‚°ãƒ«ãƒ¼ãƒ—"
+msgstr ""
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
-msgstr "管ç†ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼"
+msgstr ""
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr ""
#: lib/RT/Queue_Overlay.pm:92
msgid "AdminQueue"
-msgstr "管ç†ã‚­ãƒ¥ãƒ¼"
+msgstr ""
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
-msgstr "管ç†ãƒ¦ãƒ¼ã‚¶ãƒ¼"
+msgstr ""
-#: html/Admin/Queues/People.html:69
-#: html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "管ç†è€…Cc"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "詳細"
-#: NOT FOUND IN SOURCE
-msgid "Advanced Search"
-msgstr "絞込ã¿æ¤œç´¢"
-
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "ãŒä»¥ä¸‹ã‚ˆã‚Šå¾Œã§ã‚ã‚‹"
-
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr ""
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr ""
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "ã™ã¹ã¦ã®ã‚­ãƒ¥ãƒ¼"
-#: html/Search/Elements/EditQuery:56
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:73
-#: html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr ""
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr ""
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr ""
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "承èªçŠ¶æ³"
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#: html/Approvals/Display.html:65
-#: html/Approvals/Elements/ShowDependency:63
-#: html/Approvals/index.html:86
msgid "Approval #%1: %2"
-msgstr ""
+msgstr "承èªçŠ¶æ³"
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
-#: html/Approvals/index.html:75
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr ""
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
-#: html/Approvals/index.html:73
msgid "Approval #%1: Notes recorded"
msgstr ""
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr ""
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr ""
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "承èª"
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr ""
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "4月"
-#: lib/RT/Date.pm:444
+#: NOT FOUND IN SOURCE
msgid "Apr."
+msgstr "4"
+
+#: NOT FOUND IN SOURCE
+msgid "April"
msgstr "4月"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "昇順"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr ""
-#: html/Search/Bulk.html:142
-#: html/SelfService/Update.html:87
-#: html/Ticket/ModifyAll.html:115
-#: html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "添付"
-#: html/SelfService/Create.html:92
-#: html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "添付ファイル"
-#: html/SelfService/Update.html:75
-#: html/Ticket/Create.html:131
-#: html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr ""
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
-#: html/Ticket/ShowEmailRecord.html:52
-#: html/Ticket/ShowEmailRecord.html:56
-#: html/Ticket/ShowEmailRecord.html:59
msgid "Attachment '%1' could not be loaded"
msgstr "添付ファイル%1ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "添付ファイルãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "添付ファイルå"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "添付ファイル"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr ""
-#: lib/RT/Date.pm:448
-msgid "Aug."
+#: lib/RT/Date.pm:95
+msgid "Aug"
msgstr "8月"
#: NOT FOUND IN SOURCE
-msgid "AuthSystem"
-msgstr "èªè¨¼ã‚·ã‚¹ãƒ†ãƒ "
+msgid "Aug."
+msgstr "8"
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "8月"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr ""
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
-msgstr "リクエストã—ãŸäººã«è‡ªå‹•è¿”ä¿¡"
+msgstr "リクエストを作æˆã—ãŸäººã«è‡ªå‹•è¿”ä¿¡"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Bad PGP Signature: %1\\n"
-msgstr "ä¸æ­£ãªPGPç½²å: %1\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
-msgstr "ä¸æ­£ãªæ·»ä»˜IDã§ã™ã€‚添付ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“'%1'\\n"
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "BCc"
-#: NOT FOUND IN SOURCE
-msgid "Bad data in %1"
-msgstr "%1ã®ä¸æ­£ãƒ‡ãƒ¼ã‚¿ã§ã™"
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Bad transaction number for attachment. %1 should be %2\\n"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
msgstr ""
-"添付ファイルã«ã¨ã£ã¦ä¸æ­£ãªãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãƒŠãƒ³ãƒãƒ¼ã§ã™ã€‚%1ã¯%2\\n"
-"ã®ã¯ãšã§ã™"
-#: html/Admin/Elements/CustomFieldTabs:65
-#: html/Admin/Elements/GroupTabs:60
-#: html/Admin/Elements/QueueTabs:60
-#: html/Admin/Elements/UserTabs:58
-#: html/Ticket/Elements/Tabs:113
-#: html/User/Elements/GroupTabs:59
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "基本項目"
-#: html/Ticket/Update.html:88
-msgid "Bcc"
-msgstr "Bcc"
-
-#: html/Admin/CustomFields/GroupRights.html:91
-#: html/Admin/CustomFields/UserRights.html:74
-#: html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
-msgstr "本当ã«å¤‰æ›´ã‚’ä¿å­˜ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹"
-
-#: html/Elements/SelectDateRelation:55
-#: lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "ãŒä»¥ä¸‹ã‚ˆã‚Šå‰ã§ã‚ã‚‹"
+msgstr "本当ã«å¤‰æ›´ã‚’ä¿å­˜ã—ã¾ã™ã‹"
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr ""
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr ""
-#: html/Search/Elements/EditFormat:84
-msgid "Bold"
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Bookmarkable URL for this search"
-msgstr "ã“ã®æ¤œç´¢ã«ãƒ–ックマークã®ã§ãã‚‹URLã§ã™"
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "ボールド"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
msgstr ""
-#: html/Ticket/Elements/ShowHistory:64
-#: html/Ticket/Elements/ShowHistory:69
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
-msgstr "短ã„ヘッダー"
+msgstr "簡略ヘッダー"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "ã¾ã¨ã‚ã¦æ›´æ–°"
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
#: NOT FOUND IN SOURCE
-msgid "Bulk ticket update"
-msgstr "ãƒã‚±ãƒƒãƒˆã‚’一括ã—ã¦æ›´æ–°"
+msgid "Calendar"
+msgstr "カレンダ"
-#: lib/RT/User_Overlay.pm:1853
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "システムユーザーを修正ã§ãã¾ã›ã‚“"
@@ -1013,611 +1027,645 @@ msgstr "システムユーザーを修正ã§ãã¾ã›ã‚“"
msgid "Can this principal see this queue"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "åå‰ãªã—ã«ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãƒãƒªãƒ¥ãƒ¼ã®è¿½åŠ ã¯ã§ãã¾ã›ã‚“"
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
-#: html/Admin/CustomFields/Objects.html:86
msgid "Can't find a collection class for '%1'"
msgstr ""
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr ""
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "ãƒã‚±ãƒƒãƒˆè‡ªä½“ã«ã¯ãƒªãƒ³ã‚¯ã§ãã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "Can't merge into a merged ticket. You should never get this error"
-msgstr "ã™ã§ã«çµåˆã—ãŸãƒã‚±ãƒƒãƒˆã«ã¯çµåˆã§ãã¾ã›ã‚“。ã“ã®ã‚¨ãƒ©ãƒ¼ã¯æ±ºã—ã¦å‡ºã•ãªã„ã§ãã ã•ã„"
-
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
-#: html/Widgets/SavedSearch:63
msgid "Can't save %1"
msgstr ""
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr ""
-#: lib/RT/Record.pm:1282
-#: lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "ベースã¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¸¡æ–¹ã‚’指定ã™ã‚‹äº‹ã¯ã§ãã¾ã›ã‚“"
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
-#: html/autohandler:204
msgid "Cannot create user: %1"
msgstr "ユーザー: %1を作æˆã§ãã¾ã›ã‚“"
-#: html/Admin/Elements/AddCustomFieldValue:62
-#: html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr ""
-#: etc/initialdata:50
-#: html/Admin/Queues/People.html:65
-#: html/SelfService/Create.html:71
-#: html/Ticket/Create.html:88
-#: html/Ticket/Elements/EditPeople:72
-#: html/Ticket/Elements/ShowPeople:56
-#: html/Ticket/Update.html:83
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "変更"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "パスワードを変更ã™ã‚‹"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
+msgstr "ã™ã¹ã¦ã‚’ãƒã‚§ãƒƒã‚¯"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
msgstr ""
-#: html/SelfService/Update.html:78
-#: html/Ticket/Create.html:134
-#: html/Ticket/Update.html:97
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "ボックスã®ãƒã‚§ãƒƒã‚¯ã§å‰Šé™¤"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
-msgstr "ボックスã®ãƒã‚§ãƒƒã‚¯ã§æ¨©åˆ©ã‚’剥脱"
+msgstr "ボックスã®ãƒã‚§ãƒƒã‚¯ã§æ¨©é™ã‚’剥脱"
-#: html/Elements/EditLinks:148
-#: html/Elements/EditLinks:85
-#: html/Elements/ShowLinks:78
-#: html/Ticket/Create.html:223
-#: html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "下ä½ãƒã‚±ãƒƒãƒˆ"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
-msgstr "カレンダーã‹ã‚‰é¸æŠž"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
-#: html/Admin/Users/Modify.html:156
-#: html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "市町æ‘"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "クリア"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
+msgstr "ã™ã¹ã¦ã‚¯ãƒªã‚¢"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
msgstr ""
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "ウィンドウを閉ã˜ã‚‹"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
-msgstr "解決日時"
-
-#: NOT FOUND IN SOURCE
-msgid "Closed requests"
-msgstr "終了ã—ãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™"
+msgstr "解決日"
-#: html/SelfService/Closed.html:46
-#: html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Command not understood!\\n"
-msgstr "ç†è§£ã—ã¦ã„ãªã„コマンド!\\n"
-
-#: html/Ticket/Elements/ShowTransaction:190
-#: html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "コメント"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "コメントアドレス"
-#: NOT FOUND IN SOURCE
-msgid "Comment not recorded"
-msgstr "記録ã•ã‚Œã¦ã„ãªã„コメント"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "コメントアドレス"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "コメント"
-#: html/Ticket/ModifyAll.html:91
-#: html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
-msgstr "コメント(リクエストã—ãŸäººã«ã¯é€ä¿¡ã•ã‚Œã¾ã›ã‚“)"
+msgstr "コメント(作æˆè€…ã«ã¯é€ä¿¡ã•ã‚Œã¾ã›ã‚“)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
-msgstr "コメント(リクエストã—ãŸäººã«ã¯é€ä¿¡ã•ã‚Œã¾ã›ã‚“)"
+msgstr "コメント(作æˆè€…ã«ã¯é€ä¿¡ã•ã‚Œã¾ã›ã‚“)"
-#: NOT FOUND IN SOURCE
-msgid "Comments about %1"
-msgstr "%1ã«ã¤ã„ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆ"
-
-#: html/Admin/Users/Modify.html:225
-#: html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
-msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¤ã„ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆ"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¤ã„ã¦ã®èª¬æ˜Ž"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "コメントãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸ"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "コメントãŒçŸ­ãã•ã‚Œã¾ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Compile Restrictions"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "æ¡ä»¶"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "æ¡ä»¶ã€Œ%1ã€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr ""
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:188
-msgid "Condition not found"
-msgstr "æ¡ä»¶ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
-#: html/Elements/Tabs:84
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "システム設定"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "確èª"
-#: NOT FOUND IN SOURCE
-msgid "ContactInfoSystem"
-msgstr "コンタクト情報"
-
-#: NOT FOUND IN SOURCE
-msgid "Contacted date '%1' could not be parsed"
-msgstr "コンタクトã•ã‚ŒãŸæ—¥ã«ã¡'%1'を解æžã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
-#: html/Admin/Elements/ModifyTemplate:65
-#: html/Elements/SelectAttachmentField:48
-#: html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
-msgstr "コンテント"
+msgstr "内容"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
+msgstr "Content-Type"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
msgstr ""
-#: html/Search/Elements/EditSearches:65
-msgid "Copy"
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
msgstr ""
-#: etc/initialdata:286
-msgid "Correspondence"
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Correspondence Address"
-msgstr "メールアドレス"
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr ""
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
-msgstr "通信ãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "Correspondence not recorded"
-msgstr "記録ã•ã‚Œã¦ã„ãªã„通信"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not add new custom field value for ticket. "
-msgstr "ãƒã‚±ãƒƒãƒˆã®æ–°ã—ã„カスタムフィールドãƒãƒªãƒ¥ãƒ¼ã‚’追加ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-
-#: lib/RT/Record.pm:1707
-msgid "Could not add new custom field value. "
msgstr ""
-#. (, $value_msg)
-#: lib/RT/Record.pm:1660
-msgid "Could not add new custom field value. %1 "
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3048
-#: lib/RT/Ticket_Overlay.pm:3056
-#: lib/RT/Ticket_Overlay.pm:3073
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
-msgstr "担当者変更ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "担当者変更ãŒã§ãã¾ã›ã‚“ã§ã—㟠"
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
-#: html/Admin/CustomFields/Modify.html:161
msgid "Could not create CustomField"
-msgstr "カスタムフィールドã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "カスタムフィールドを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
-#: html/Admin/Elements/EditCustomField:113
msgid "Could not create CustomField: %1"
-msgstr ""
+msgstr "カスタムフィールド %1 を作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: html/User/Groups/Modify.html:98
-#: lib/RT/Group_Overlay.pm:494
-#: lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
-msgstr "グループã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "グループを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
-#: html/Admin/Global/Template.html:96
-#: html/Admin/Queues/Template.html:93
msgid "Could not create template: %1"
-msgstr "テンプレート: %1ã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "テンプレート %1 を作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/Ticket_Overlay.pm:1075
-#: lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
-msgstr "ãƒã‚±ãƒƒãƒˆã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚キューãŒã‚»ãƒƒãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#: lib/RT/User_Overlay.pm:255
-#: lib/RT/User_Overlay.pm:269
-#: lib/RT/User_Overlay.pm:278
-#: lib/RT/User_Overlay.pm:287
-#: lib/RT/User_Overlay.pm:296
-#: lib/RT/User_Overlay.pm:310
-#: lib/RT/User_Overlay.pm:320
-#: lib/RT/User_Overlay.pm:496
-msgid "Could not create user"
-msgstr "ユーザーã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ãƒã‚±ãƒƒãƒˆã‚’作æˆã§ãã¾ã›ã‚“。キューãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "Could not find a ticket with id %1"
-msgstr "ãƒã‚±ãƒƒãƒˆã¨ãã®ID%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not find group %1."
-msgstr "グループ %1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr "ユーザーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/Queue_Overlay.pm:741
-#: lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
-msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’作æˆã¾ãŸã¯è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "該当ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’作æˆã¾ãŸã¯è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/Queue_Overlay.pm:802
-#: lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
-msgstr "ãã®è²¬ä»»è€…を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "該当ã™ã‚‹è²¬ä»»è€…を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Could not find user %1."
-msgstr "ユーザー%1を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
-#: html/Admin/CustomFields/Objects.html:69
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr ""
-#: html/Admin/Groups/Members.html:112
-#: html/User/Groups/Members.html:111
-#: html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
-msgstr "グループをロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "グループを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
-#: lib/RT/SavedSearch.pm:119
msgid "Could not load object for %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:197
-msgid "Could not load search attribute"
-msgstr ""
-
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:761
msgid "Could not make that principal a %1 for this queue"
-msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã§ãã®è²¬ä»»è€…ã‚’%1ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®è²¬ä»»è€…ã‚’%1ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1444
msgid "Could not make that principal a %1 for this ticket"
-msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã§ãã®è²¬ä»»è€…ã‚’%1ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã®è²¬ä»»è€…ã‚’%1ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:860
msgid "Could not remove that principal as a %1 for this queue"
-msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã§ãã®è²¬ä»»è€…ã‚’%1ã¨ã—ã¦å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®è²¬ä»»è€…%1を削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
-msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã§ãã®è²¬ä»»è€…ã‚’%1ã¨ã—ã¦å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã®è²¬ä»»è€…%1を削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
-msgstr "グループã«ãƒ¡ãƒ³ãƒãƒ¼ã®è¿½åŠ ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "グループã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’追加ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
-#: lib/RT/Record.pm:1719
-#: lib/RT/Record.pm:1771
msgid "Couldn't create a transaction: %1"
-msgstr "トランザクション: %1ã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "トランザクション %1 を作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't figure out what to do from gpg's reply\\n"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
msgstr ""
-"GPGã®è¿”事\\n"
-"ã‹ã‚‰ä½•ã‚’è¡Œã£ãŸã‚‰ã‚ˆã„ã®ã‹ã‚ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't find group\\n"
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
msgstr ""
-"グループ\\n"
-"ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr ""
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "責任者ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "ãã®å€¤ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't find user\\n"
-msgstr ""
-"ユーザー\\n"
-"ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
-#: lib/RT/CurrentUser.pm:145
msgid "Couldn't load %1 from the users database.\\n"
-msgstr ""
-"ユーザーデータベース\\n"
-"ã‹ã‚‰%1をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ユーザーデータベースã‹ã‚‰ %1 をロードã§ãã¾ã›ã‚“ã§ã—ãŸã€‚\\n"
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
-#: html/Admin/CustomFields/UserRights.html:149
msgid "Couldn't load Class %1"
msgstr ""
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
-#: html/Admin/CustomFields/GroupRights.html:107
msgid "Couldn't load CustomField %1"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load RT config file '%1' %2"
-msgstr "RT設定ファイル'%1' %2をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load Scrips."
-msgstr "スクリプトをロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
-
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
-#: lib/RT/Ticket_Overlay.pm:2016
msgid "Couldn't load copy of ticket #%1."
msgstr ""
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "グループ#%1 をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
-#: html/Admin/Groups/GroupRights.html:109
-#: html/Admin/Groups/UserRights.html:96
msgid "Couldn't load group %1"
-msgstr "グループ%1をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "グループ %1 を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/Link_Overlay.pm:202
-#: lib/RT/Link_Overlay.pm:211
-#: lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
-msgstr "リンクをロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "リンクを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
-#: html/Admin/Elements/ObjectCustomFields:83
-#: html/Admin/Queues/CustomFields.html:59
-#: html/Admin/Users/CustomFields.html:59
msgid "Couldn't load object %1"
msgstr ""
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
-#: html/Admin/Queues/People.html:142
msgid "Couldn't load queue"
-msgstr "キューをロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "キューを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "キュー#%1をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
-#: html/Admin/Queues/GroupRights.html:122
-#: html/Admin/Queues/UserRights.html:93
msgid "Couldn't load queue %1"
-msgstr "キュー%1をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "キュー%1を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load scrip"
-msgstr "スクリプトをロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "キュー「%1ã€ã‚’ロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
-#: html/Admin/Elements/EditScrip:126
-#: html/Admin/Elements/EditScrip:167
msgid "Couldn't load scrip #%1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load template"
-msgstr "テンプレートをロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "scrip#%1をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load that user (%1)"
-msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼ˆ%1)をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "テンプレート#%1をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
-#: html/SelfService/Display.html:158
-#: lib/RT/Action/CreateTickets.pm:680
msgid "Couldn't load ticket '%1'"
-msgstr "ãƒã‚±ãƒƒãƒˆ'%1'をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ãƒã‚±ãƒƒãƒˆ'%1'を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
-#: lib/RT/Ticket_Overlay.pm:2643
msgid "Couldn't resolve '%1' into a URI."
msgstr ""
-#: html/Admin/Users/Modify.html:173
-#: html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "国"
-#: html/Admin/Elements/CreateUserCalled:47
-#: html/Admin/Elements/EditCustomField:84
-#: html/Admin/Elements/EditScrip:133
-#: html/Admin/Queues/Template.html:66
-#: html/Elements/QuickCreate:65
-#: html/Ticket/Create.html:168
-#: html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "作æˆ"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:150
-#: html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "カスタムフィールドã®ä½œæˆ"
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
-#: html/Admin/Queues/CustomField.html:69
msgid "Create a CustomField for queue %1"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Create a new Custom Field"
-msgstr "æ–°ã—ã„カスタムフィールドã®ä½œæˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new global scrip"
-msgstr "æ–°ã—ã„グローãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—トã®ä½œæˆ"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "ダッシュボードã®æ–°è¦ä½œæˆ"
-#: html/Admin/Groups/Modify.html:125
-#: html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
-msgstr "æ–°ã—ã„グループã®ä½œæˆ"
+msgstr "グループã®æ–°è¦ä½œæˆ"
-#: html/User/Groups/Modify.html:113
-#: html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
-msgstr "æ–°ã—ã„個人グループã®ä½œæˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new queue"
-msgstr "æ–°ã—ã„キューã®ä½œæˆ"
+msgstr "個人グループã®æ–°è¦ä½œæˆ"
-#: NOT FOUND IN SOURCE
-msgid "Create a new template"
-msgstr "æ–°ã—ã„テンプレートã®ä½œæˆ"
-
-#: html/Ticket/Create.html:47
-#: html/Ticket/Create.html:51
-#: html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
-msgstr "æ–°è¦ãƒã‚±ãƒƒãƒˆä½œæˆ"
+msgstr "ãƒã‚±ãƒƒãƒˆã®æ–°è¦ä½œæˆ"
-#: html/Admin/Users/Modify.html:252
-#: html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
-msgstr "æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ä½œæˆ"
+msgstr "ユーザーã®æ–°è¦ä½œæˆ"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "キューã®ä½œæˆ"
-#: NOT FOUND IN SOURCE
-msgid "Create a queue called"
-msgstr "呼ã³å‡ºã•ã‚ŒãŸã‚­ãƒ¥ãƒ¼ã®ä½œæˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a request"
-msgstr "リクエストã®ä½œæˆ"
-
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrip.html:89
msgid "Create a scrip for queue %1"
msgstr ""
-#: html/Admin/Global/Template.html:90
-#: html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "テンプレートã®ä½œæˆ"
-#: html/SelfService/Create.html:46
-#: html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
+msgstr "ãƒã‚±ãƒƒãƒˆä½œæˆ"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
msgstr ""
-#: etc/initialdata:137
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr ""
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "ãƒã‚±ãƒƒãƒˆã®ä½œæˆ"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr ""
@@ -1625,352 +1673,497 @@ msgstr ""
msgid "Create, delete and modify queues"
msgstr ""
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr ""
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr ""
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr ""
-#: html/Elements/SelectDateType:47
-#: html/Ticket/Elements/ShowDates:48
-#: lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
-msgstr "作æˆæ—¥æ™‚"
+msgstr "作æˆæ—¥"
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
-#: html/Admin/CustomFields/Modify.html:163
-#: html/Admin/Elements/EditCustomField:117
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
-msgstr "カスタムフィールド%1を作æˆã—ã¾ã—ãŸ"
+msgstr ""
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
-msgstr "作æˆã•ã‚ŒãŸå…¨ãƒã‚±ãƒƒãƒˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "Created template %1"
-msgstr "テンプレート%1を作æˆã—ã¾ã—ãŸ"
+msgstr "期間中ã«ä½œæˆã•ã‚ŒãŸã‚‚ã®"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr ""
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "作æˆè€…"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "æš—å·æŠ€è¡“"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "ç¾åœ¨ã®ãƒªãƒ³ã‚¯"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr ""
-#: html/Admin/Groups/Members.html:60
-#: html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "ç¾åœ¨ã®ãƒ¡ãƒ³ãƒãƒ¼"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
-msgstr "ç¾åœ¨ã®æ¨©åˆ©"
+msgstr "ç¾åœ¨ã®æ¨©é™"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "ç¾åœ¨ã®æ¤œç´¢å¼"
-#: html/Admin/Queues/People.html:62
-#: html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "ç¾åœ¨ã®ã‚¦ã‚©ãƒƒãƒãƒ£ãƒ¼"
-#: html/Admin/Elements/SystemTabs:61
-#: html/Admin/Elements/Tabs:62
-#: html/Admin/Global/index.html:71
-#: html/Admin/Users/Modify.html:205
-#: html/Admin/index.html:77
-#: html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "カスタムフィールド"
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
-#: html/Admin/CustomFields/index.html:60
msgid "Custom Fields for %1"
msgstr ""
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr ""
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr ""
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
-msgstr "カスタムフィールド%1 %2 %3"
+msgstr "カスタムフィールド %1 %2 %3"
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
-#: lib/RT/Tickets_Overlay.pm:2424
msgid "Custom field %1 has a value."
-msgstr "カスタムフィールド%1ã¯å€¤ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™"
+msgstr "カスタムフィールド%1ã¯å€¤ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
-#: lib/RT/Tickets_Overlay.pm:2420
msgid "Custom field %1 has no value."
-msgstr "カスタムフィールド%1ã¯å€¤ãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr "カスタムフィールド%1ã¯å€¤ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
-#: lib/RT/Record.pm:1592
-#: lib/RT/Record.pm:1754
msgid "Custom field %1 not found"
msgstr "カスタムフィールド%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
-#: lib/RT/Report/Tickets.pm:118
-#: lib/RT/Report/Tickets.pm:121
msgid "Custom field '%1'"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field not found"
-msgstr "カスタムフィールドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+msgstr "カスタムフィールド「%1ã€"
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
-#: lib/RT/CustomField_Overlay.pm:1157
msgid "Custom field value %1 could not be found for custom field %2"
-msgstr "カスタムフィールド%2ã®ãŸã‚ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãƒãƒªãƒ¥ãƒ¼%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field value changed from %1 to %2"
-msgstr "カスタムフィールドãŒ%1ã‹ã‚‰%2ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+msgstr "カスタムフィールド%2ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãƒãƒªãƒ¥ãƒ¼%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "カスタムフィールドãƒãƒªãƒ¥ãƒ¼ã¯å‰Šé™¤ã•ã‚Œã¾ã›ã‚“"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "カスタムフィールドãƒãƒªãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: lib/RT/CustomField_Overlay.pm:1171
-#: lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "カスタムフィールドãƒãƒªãƒ¥ãƒ¼ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
-#: html/Elements/SelectGroups:51
-#: html/Elements/SelectUsers:51
-#: lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr ""
-#: html/Prefs/MyRT.html:78
-#: html/Prefs/Quicksearch.html:70
-#: html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
-msgstr "カスタマイズ: "
+msgstr "カスタマイズ"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "ダッシュボード"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "ダッシュボード"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
-#: html/SelfService/Display.html:61
-#: html/Ticket/Create.html:203
-#: html/Ticket/Elements/ShowSummary:83
-#: html/Ticket/Elements/Tabs:116
-#: html/Ticket/ModifyAll.html:65
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "日付"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "12月"
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
+msgstr "12"
+
+#: NOT FOUND IN SOURCE
+msgid "December"
msgstr "12月"
-#: etc/initialdata:222
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr ""
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
-msgstr ""
+msgstr "デフォルトã®ã‚­ãƒ¥ãƒ¼"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
-msgstr ""
+msgstr "デフォルトã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆä½œæˆè€…"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr ""
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr ""
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr ""
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "デフォルトã®ã‚­ãƒ¥ãƒ¼"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr ""
-#: html/User/Delegation.html:46
-#: html/User/Delegation.html:49
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "デフォルト: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
-msgstr "代表者ã®æ¨©åˆ©"
+msgstr "権é™ã®è¨­å®š"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr ""
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr ""
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
-msgstr ""
+msgstr "権é™å§”è­²"
-#: html/Admin/Elements/EditScrips:75
-#: html/Search/Elements/EditFormat:103
-#: html/Search/Elements/EditQuery:57
-#: html/Search/Elements/EditSearches:63
-#: html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "削除"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
+msgstr "テンプレートã®å‰Šé™¤"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
msgstr ""
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
-#: lib/RT/SavedSearch.pm:220
msgid "Delete failed: %1"
msgstr ""
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
-msgid "Delete tickets"
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
msgstr ""
-#: html/Search/Bulk.html:159
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr "ãƒã‚±ãƒƒãƒˆã®å‰Šé™¤"
+
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
+msgstr "値ã®å‰Šé™¤"
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr ""
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "%1 を削除ã—ã¾ã—ãŸ"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object could break referential integrity"
-msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒããšã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™"
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
-#: lib/RT/Queue_Overlay.pm:394
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "ä¿å­˜ã—ãŸæ¤œç´¢ã®å‰Šé™¤"
+
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
-msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒããšã•ã‚Œã¾ã™"
+msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒããšã‚Œã¾ã™"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
-msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒå¦¨å®³ã•ã‚Œã¾ã™"
+msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒæãªã‚ã‚Œã¾ã™"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
-msgstr ""
+msgstr "æ‹’å¦"
-#: html/Elements/EditLinks:140
-#: html/Elements/EditLinks:66
-#: html/Elements/ShowLinks:58
-#: html/Ticket/Create.html:221
-#: html/Ticket/Elements/BulkLinks:56
-#: html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
-msgstr "ä¾å­˜ã•ã‚Œã¦ã„ã‚‹ãƒã‚±ãƒƒãƒˆ"
+msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã¸ã®ä¾å­˜"
-#: NOT FOUND IN SOURCE
-msgid "Dependencies: \\n"
-msgstr "従属ãƒã‚±ãƒƒãƒˆ: \\n"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:718
msgid "Dependency by %1 added"
-msgstr ""
+msgstr "%1 ã®ä¾å­˜ã‚’追加"
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:758
msgid "Dependency by %1 deleted"
-msgstr ""
+msgstr "%1 ã®ä¾å­˜ã‚’削除"
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:715
msgid "Dependency on %1 added"
-msgstr ""
+msgstr "%1 ã¸ã®ä¾å­˜ã‚’追加"
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:755
msgid "Dependency on %1 deleted"
+msgstr "%1 ã¸ã®ä¾å­˜ã‚’削除"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
msgstr ""
-#: html/Elements/EditLinks:136
-#: html/Elements/EditLinks:57
-#: html/Elements/SelectLinkType:48
-#: html/Elements/ShowLinks:48
-#: html/Ticket/Create.html:220
-#: html/Ticket/Elements/BulkLinks:52
-#: html/Ticket/Elements/ShowDependencies:46
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "ä¾å­˜ã—ã¦ã„ã‚‹ãƒã‚±ãƒƒãƒˆ"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "詳細"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "é™é †"
-#: html/SelfService/Create.html:100
-#: html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "ãƒã‚±ãƒƒãƒˆã®æœ¬æ–‡ã‚’以下ã«æ›¸ã込んã§ãã ã•ã„"
-#: html/Admin/CustomFields/Modify.html:61
-#: html/Admin/Elements/AddCustomFieldValue:57
-#: html/Admin/Elements/EditCustomField:60
-#: html/Admin/Elements/EditCustomFieldValues:56
-#: html/Admin/Elements/EditScrip:55
-#: html/Admin/Elements/ModifyTemplate:57
-#: html/Admin/Groups/Modify.html:71
-#: html/Admin/Queues/Modify.html:69
-#: html/Search/Elements/EditSearches:56
-#: html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "詳細"
-#: NOT FOUND IN SOURCE
-msgid "Details"
-msgstr "詳細"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
-#: html/Search/Elements/EditFormat:71
-#: html/Ticket/Elements/Tabs:108
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "表示"
@@ -1978,1422 +2171,1767 @@ msgstr "表示"
msgid "Display Access Control List"
msgstr ""
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "コラム表示"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr ""
-#: html/Ticket/Elements/ShowHistory:59
-msgid "Display mode"
-msgstr "モード切替"
-
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Display ticket #%1"
-msgstr "ãƒã‚±ãƒƒãƒˆ#%1を表示"
-
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-msgstr "<a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU GPL</a> version 2 ã«ã‚‚ã¨ã¥ã„ã¦é…布"
+msgstr "<a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU GPL</a> version 2 ã«ã¦é…布"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr ""
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "ページを定期的ã«æ›´æ–°ã—ãªã„"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "ダウンロード"
-#: html/Admin/Groups/index.html:61
-#: html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr ""
-#: html/Elements/SelectDateType:53
-#: html/Ticket/Create.html:209
-#: html/Ticket/Elements/EditDates:66
-#: html/Ticket/Elements/Reminders:133
-#: html/Ticket/Elements/ShowDates:64
-#: lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
-msgstr "終了予定日時"
+msgstr "終了予定日"
-#: NOT FOUND IN SOURCE
-msgid "Due date '%1' could not be parsed"
-msgstr "期é™ãŒåˆ‡ã‚Œã‚‹æ—¥'%1'ã¯è§£æžã•ã‚Œã¾ã›ã‚“"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
msgstr ""
-"ERROR: ãƒã‚±ãƒƒãƒˆ '%1': %2.\\n"
-"をロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: html/Elements/Quicksearch:48
-#: html/Elements/ShowSearch:49
-#: html/index.html:107
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "編集"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr ""
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
-#: html/Admin/Elements/ObjectCustomFields:92
-#: html/Admin/Queues/CustomFields.html:64
-#: html/Admin/Users/CustomFields.html:64
msgid "Edit Custom Fields for %1"
msgstr "%1ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’編集ã™ã‚‹"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr ""
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54
-#: html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr ""
-#: html/Search/Bulk.html:188
-#: html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "リンク関係を編集ã™ã‚‹"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "クエリã®ç›´æŽ¥ç·¨é›†"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
-msgstr "検索を編集"
+msgstr "検索ã®ç·¨é›†"
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
-#: html/Admin/Queues/Templates.html:63
msgid "Edit Templates for queue %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Edit scrips"
-msgstr "スクリプトを編集ã™ã‚‹"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:60
-#: html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
-msgstr "システムテンプレートを編集ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit templates for %1"
-msgstr "%1ã®ãƒ†ãƒ³ãƒ—レートを編集ã™ã‚‹"
+msgstr "システムテンプレートã®ç·¨é›†"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr ""
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "テキスト形å¼"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
-#: html/Admin/Queues/Modify.html:140
msgid "Editing Configuration for queue %1"
-msgstr "キュー%1ã®è¨­å®šã‚’編集ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Editing Configuration for user %1"
-msgstr "ユーザー%1ã®è¨­å®šã‚’編集ã™ã‚‹"
+msgstr "キュー%1ã®è¨­å®šç·¨é›†"
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
-#: html/Admin/CustomFields/Modify.html:167
-#: html/Admin/Elements/EditCustomField:120
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
-msgstr "カスタムフィールド%1を編集ã™ã‚‹"
+msgstr "カスタムフィールド%1ã®ç·¨é›†"
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
-#: html/Admin/Groups/Members.html:53
msgid "Editing membership for group %1"
-msgstr "グループ%1ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’編集ã™ã‚‹"
+msgstr "グループ%1ã®ãƒ¡ãƒ³ãƒãƒ¼ç·¨é›†"
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
-#: html/User/Groups/Members.html:150
msgid "Editing membership for personal group %1"
-msgstr "個人グループ%1ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’編集ã™ã‚‹"
+msgstr "個人用グループ%1ã®ãƒ¡ãƒ³ãƒãƒ¼ç·¨é›†"
-#: NOT FOUND IN SOURCE
-msgid "Editing template %1"
-msgstr "テンプレート%1を編集ã™ã‚‹"
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
-#: lib/RT/Record.pm:1295
-#: lib/RT/Record.pm:1372
-#: lib/RT/Ticket_Overlay.pm:2518
-#: lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
-msgstr "ベースもã—ãã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’指定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+msgstr "ベースもã—ãã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’指定ã—ã¦ãã ã•ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
-#: html/Admin/Users/Modify.html:74
-#: html/Ticket/Elements/AddWatchers:77
-#: html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
-msgstr "Eメール"
+msgstr ""
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
-#: lib/RT/User_Overlay.pm:235
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
-msgstr "ãŠä½¿ã„ã®Eメールアドレス"
+msgstr "ãŠä½¿ã„ã®emailアドレス"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
-msgstr "Eメールアドレス"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "EmailEncoding"
-msgstr "Eメールエンコーディング"
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
-#: html/Admin/CustomFields/Modify.html:98
-#: html/Admin/Elements/EditCustomField:72
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr ""
+msgstr "有効(ã“ã®ãƒœãƒƒã‚¯ã‚¹ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã“ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ï¼‰"
-#: html/Admin/Groups/Modify.html:84
-#: html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
-msgstr ""
+msgstr "有効(ã“ã®ãƒœãƒƒã‚¯ã‚¹ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ï¼‰"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
-msgstr "有効ã«ãªã‚Šã¾ã—ãŸï¼ˆã‚‚ã†ä¸€åº¦ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã“ã®ã‚­ãƒ¥ãƒ¼ã¯æœ‰åŠ¹ã§ãªããªã‚Šã¾ã™ï¼‰"
+msgstr "有効(ã“ã®ãƒœãƒƒã‚¯ã‚¹ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã“ã®ã‚­ãƒ¥ãƒ¼ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ï¼‰"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
-msgstr "有効ãªã‚­ãƒ¥ãƒ¼"
+msgstr ""
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
-#: html/Admin/Elements/EditCustomField:136
-#: html/Admin/Groups/Modify.html:150
-#: html/Admin/Users/Modify.html:350
-#: html/User/Groups/Modify.html:138
msgid "Enabled status %1"
-msgstr "有効ãªã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹%1"
+msgstr ""
-#. (loc_fuzzy($msg))
-#: html/Admin/CustomFields/Modify.html:185
-#: html/Admin/Queues/Modify.html:162
-msgid "Enabled status: %1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr ""
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr ""
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr ""
-#: html/Elements/EditLinks:119
-#: html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
-msgstr "ãƒã‚±ãƒƒãƒˆã‚’リンクã™ã‚‹ãƒã‚±ãƒƒãƒˆã¾ãŸã¯URLsを入力ã—ã¦ãã ã•ã„。入力ã™ã‚‹é …ç›®ãŒã„ãã¤ã‹ã‚ã‚‹å ´åˆã«ã¯ã‚¹ãƒšãƒ¼ã‚¹ã§åŒºåˆ‡ã£ã¦ãã ã•ã„。"
+msgstr "リンクã—ãŸã„ãƒã‚±ãƒƒãƒˆã¾ãŸã¯URIを入力ã—ã¦ãã ã•ã„。入力ã™ã‚‹é …ç›®ãŒã„ãã¤ã‹ã‚ã‚‹å ´åˆã«ã¯ã‚¹ãƒšãƒ¼ã‚¹ã§åŒºåˆ‡ã£ã¦ãã ã•ã„。"
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr ""
-#: html/Elements/Login:76
-#: html/SelfService/Error.html:46
-#: html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "エラー"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
-msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Queue->AddWatcher"
-
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Queue->DelWatcher"
-msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Queue->DelWatcher"
+msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼ Queue->AddWatcher"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
-msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Ticket->AddWatcher"
-
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Ticket->DelWatcher"
-msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Ticket->DelWatcher"
+msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼ Ticket->AddWatcher"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr ""
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr ""
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr ""
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "ExternalAuthId"
-msgstr "外部ã®èªè¨¼ID"
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "ExternalContactInfoId"
-msgstr "外部ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆæƒ…å ±ID"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "ãã®ä»–ã®æƒ…å ±"
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
msgstr ""
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "'特権ã®ã‚ã‚‹'ユーザーã®æ“¬ä¼¼ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¤œç´¢ãŒå¤±æ•—ã—ã¾ã—ãŸ"
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "'特権ã®ãªã„'ユーザーã®æ“¬ä¼¼ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¤œç´¢ãŒå¤±æ•—ã—ã¾ã—ãŸ"
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
-#: bin/rt-crontool:206
msgid "Failed to load module %1. (%2)"
msgstr ""
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
-#: lib/RT/SavedSearch.pm:152
msgid "Failed to load object for %1"
msgstr ""
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "2月"
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
+msgstr "2"
+
+#: NOT FOUND IN SOURCE
+msgid "February"
msgstr "2月"
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
+msgstr "ファイルå"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:69
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:107
-#: html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Fin"
-msgstr "終了"
-
-#: html/Search/Elements/PickBasics:149
-#: html/Ticket/Create.html:182
-#: html/Ticket/Elements/EditBasics:97
-#: lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
-msgstr "最終優先順ä½"
+msgstr "最終優先度"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr ""
-#: html/Admin/Groups/index.html:72
-#: html/Admin/Queues/People.html:82
-#: html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "グループをã•ãŒã™:"
-#: NOT FOUND IN SOURCE
-msgid "Find new/open tickets"
-msgstr "æ–°ã—ã„/é–‹ããƒã‚±ãƒƒãƒˆã‚’見ã¤ã‘ã‚‹"
-
-#: html/Admin/Queues/People.html:78
-#: html/Admin/Users/index.html:70
-#: html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
-msgstr "個人をã•ãŒã™:"
+msgstr "関与者をã•ãŒã™"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr ""
-#: html/Ticket/Elements/Tabs:81
-msgid "First"
-msgstr "最åˆã®"
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "First page"
-msgstr "最åˆã®ãƒšãƒ¼ã‚¸"
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr "先頭"
-#: docs/design_docs/string-extraction-guide.txt:33
-#: lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24
-#: lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
-msgstr "ã°ã‹ï¼"
+msgstr "Foo!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
-msgstr "変更を強制ã—ã¾ã™"
+msgstr "変更を上書ãã—ã¾ã™"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "表示フォーマット"
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
-#: html/Search/Results.html:145
msgid "Found %quant(%1,ticket)"
-msgstr ""
+msgstr "%1件ã®ãƒã‚±ãƒƒãƒˆã‚’発見"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "FreeformContactInfo"
-msgstr "コンタクト情報(書å¼è‡ªç”±)"
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
-#: lib/RT/Date.pm:421
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "金"
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
-msgstr "金曜日"
+msgstr "金"
-#: html/Ticket/Elements/ShowHistory:66
-#: html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
-msgstr "フルヘッダー"
+msgstr "ã™ã¹ã¦ã®ãƒ˜ãƒƒãƒ€ãƒ¼"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "General"
-#: html/Tools/Offline.html:85
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Getting the current user from a pgp sig\\n"
-msgstr "PGPç½²åã‹ã‚‰ç¾åœ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å¾—ã‚‹\\n"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
-#: lib/RT/Transaction_Overlay.pm:684
msgid "Given to %1"
msgstr "担当者変更: %1"
-#: html/Admin/Elements/Tabs:65
-#: html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "グローãƒãƒ«"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Global Scrips"
-msgstr "グローãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—ト"
-
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr ""
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
-#: html/Admin/Global/MyRT.html:48
msgid "Global portlet %1 saved."
msgstr ""
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
-#: html/Admin/Elements/SelectTemplate:59
msgid "Global template: %1"
msgstr ""
-#: html/Admin/CustomFields/index.html:80
-#: html/Search/Results.html:90
-#: html/Tools/Offline.html:89
-msgid "Go"
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
msgstr ""
-#: html/Admin/Groups/index.html:67
-#: html/Admin/Groups/index.html:73
-#: html/Admin/Queues/People.html:80
-#: html/Admin/Queues/People.html:84
-#: html/Admin/Queues/index.html:66
-#: html/Admin/Users/index.html:73
-#: html/Elements/RefreshHomepage:48
-#: html/Search/Results.html:74
-#: html/Ticket/Elements/EditPeople:53
-#: html/Ticket/Elements/EditPeople:57
-msgid "Go!"
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Good pgp sig from %1\\n"
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
msgstr ""
-"%1\\n"
-"ã‹ã‚‰ã®æ­£ã—ã„PGPç½²å"
-#: NOT FOUND IN SOURCE
-msgid "Goto page"
-msgstr "ページã¸ç§»å‹•"
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "Go"
-#: html/Elements/GotoTicket:46
-#: html/SelfService/Elements/GotoTicket:46
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "Go!"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "ãƒã‚±ãƒƒãƒˆã«ç§»å‹•"
-#: html/Ticket/Elements/AddWatchers:67
-#: html/Ticket/Elements/ShowGroupMembers:55
-#: html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "グラフ表示"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "グラフ設定"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "グラフã¯è¡¨ç¤ºã§ãã¾ã›ã‚“。"
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
-msgstr ""
+msgstr "グループ"
-#: NOT FOUND IN SOURCE
-msgid "Group %1 %2: %3"
-msgstr "グループ%1 %2: %3"
-
-#: html/Admin/Elements/CustomFieldTabs:68
-#: html/Admin/Elements/GroupTabs:66
-#: html/Admin/Elements/QueueTabs:82
-#: html/Admin/Elements/SystemTabs:65
-#: html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
-msgstr "グループ権利"
+msgstr "グループã§ã®æ¨©é™"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "グループã«ã¯ã™ã§ã«ãƒ¡ãƒ³ãƒãƒ¼ãŒã„ã¾ã™"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "グループã«ã¯ã™ã§ã«ãƒ¡ãƒ³ãƒãƒ¼ãŒã„ã¾ã™: %1"
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
-#: html/Admin/Groups/Modify.html:109
msgid "Group could not be created: %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "グループãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr ""
-#: lib/RT/Group_Overlay.pm:963
-#: lib/RT/Queue_Overlay.pm:748
-#: lib/RT/Queue_Overlay.pm:808
-#: lib/RT/Ticket_Overlay.pm:1430
-#: lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "Group not found.\\n"
-msgstr "グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。\\n"
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Group not specified.\\n"
-msgstr "グループãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。\\n"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:59
-#: html/Admin/Elements/SelectNewGroupMembers:57
-#: html/Admin/Elements/Tabs:56
-#: html/Admin/Global/CustomFields/index.html:69
-#: html/Admin/Groups/Members.html:86
-#: html/Admin/Queues/People.html:104
-#: html/Admin/Users/Memberships.html:53
-#: html/Admin/index.html:67
-#: html/User/Groups/Members.html:88
-#: lib/RT/CustomField_Overlay.pm:1210
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "グループ"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "グループã¯å½¼ã‚‰ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã¯ãªã‚Œã¾ã›ã‚“"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr ""
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å«ã‚€ã‚°ãƒ«ãƒ¼ãƒ—"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
msgstr ""
-#: lib/RT/Interface/CLI.pm:94
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "ã“ã‚“ã«ã¡ã¯ï¼"
+#: lib/RT/StyleGuide.pod:765
#. ($name)
-#: docs/design_docs/string-extraction-guide.txt:40
-#: lib/RT/StyleGuide.pod:773
msgid "Hello, %1"
msgstr "ã“ã‚“ã«ã¡ã¯ã€%1ã•ã‚“"
-#: html/Admin/Elements/GroupTabs:70
-#: html/Admin/Elements/UserTabs:64
-#: html/Ticket/Elements/ShowHistory:53
-#: html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "更新履歴"
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
-#: html/Admin/Groups/History.html:62
msgid "History of the group %1"
+msgstr "グループ%1ã®å±¥æ­´"
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
msgstr ""
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
-#: html/Admin/Users/History.html:62
msgid "History of the user %1"
-msgstr ""
+msgstr "ユーザー%1ã®å±¥æ­´"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "ホーム"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "ホームページã®å†èª­ã¿è¾¼ã¿é–“éš”"
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
-msgstr "電話(自宅)"
+msgstr "自宅電話"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
-msgstr "ホーム"
+msgstr "ホームページ"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "時間"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "時間"
+#: lib/RT/Base.pm:136
#. (6)
-#: lib/RT/Base.pm:119
msgid "I have %quant(%1,concrete mixer)."
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "I have [quant,_1,concrete mixer]."
-msgstr "ç§ã¯[quant,_1,concrete mixer]ãŒã‚ã‚Šã¾ã™ã€‚"
-
-#: html/Search/Build.html:460
-#: lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
+#: lib/RT/Date.pm:114
+msgid "ISO"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:48
-#: lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "ID"
-#: html/Admin/Users/Modify.html:65
-#: html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "個人識別情報"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr ""
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr ""
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr ""
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr ""
-#: html/Admin/Queues/People.html:126
-#: html/Ticket/Modify.html:60
-#: html/Ticket/ModifyAll.html:128
-#: html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "変更をå映ã™ã‚‹ã«ã¯ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr ""
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr ""
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr ""
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "利用åœæ­¢ã—ãŸã‚­ãƒ¥ãƒ¼ã‚‚リストã«å«ã‚ã‚‹"
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "利用åœæ­¢ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚検索ã«å«ã‚ã‚‹"
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr ""
-#: html/Search/Build.html:486
-#: lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
msgstr ""
-#: html/Search/Build.html:483
-#: lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
msgstr ""
-#: html/Search/Elements/PickBasics:148
-#: lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
-msgstr "最åˆã®å„ªå…ˆæ¨©"
+msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1163
-#: lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr ""
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "入力エラー"
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
-#: html/Elements/ValidateCustomFields:68
-#: lib/RT/CustomField_Overlay.pm:1021
-#: lib/RT/CustomField_Overlay.pm:1162
msgid "Input must match %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "RTã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«"
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr ""
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
-#: lib/RT/Record.pm:308
msgid "Internal Error: %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "無効ãªã‚°ãƒ«ãƒ¼ãƒ—タイプã§ã™"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
-msgstr ""
+msgstr "権é™ãŒã‚ã‚Šã¾ã›ã‚“"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Invalid owner. Defaulting to 'nobody'."
-msgstr "無効ãªæ‹…当者ã§ã™ã€‚ 'nobody'ã«è¨­å®šã—ã¾ã™."
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
-#: lib/RT/CustomField_Overlay.pm:207
-#: lib/RT/CustomField_Overlay.pm:678
msgid "Invalid pattern: %1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:157
-#: lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "無効ãªã‚­ãƒ¥ãƒ¼ã§ã™"
-#: lib/RT/ACE_Overlay.pm:264
-#: lib/RT/ACE_Overlay.pm:273
-#: lib/RT/ACE_Overlay.pm:279
-#: lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
-msgstr "無効ãªæ¨©åˆ©ã§ã™"
+msgstr "権é™ãŒç„¡åŠ¹ã§ã™"
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
-#: lib/RT/Record.pm:283
msgid "Invalid value for %1"
-msgstr "%1ã¯ç„¡åŠ¹ãªå€¤ã§ã™"
+msgstr "%1 ã«ã¯ç„¡åŠ¹ãªå€¤ã§ã™"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "カスタムフィールドã«ç„¡åŠ¹ãªå€¤ã§ã™"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "ステータスã«ã¯ç„¡åŠ¹ãªå€¤ã§ã™"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr ""
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr ""
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr ""
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
-msgstr ""
+msgstr "イタリック"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "1月"
-#: lib/RT/Date.pm:441
+#: NOT FOUND IN SOURCE
msgid "Jan."
+msgstr "1"
+
+#: NOT FOUND IN SOURCE
+msgid "January"
msgstr "1月"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr ""
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "7月"
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
+msgstr "7"
+
+#: NOT FOUND IN SOURCE
+msgid "July"
msgstr "7月"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "ç·åˆãƒ“ュー"
-#: lib/RT/Date.pm:446
-msgid "Jun."
+#: lib/RT/Date.pm:93
+msgid "Jun"
msgstr "6月"
#: NOT FOUND IN SOURCE
-msgid "Keyword"
-msgstr "キーワード"
+msgid "Jun."
+msgstr "6"
#: NOT FOUND IN SOURCE
-msgid "Lang"
-msgstr "言語"
+msgid "June"
+msgstr "6月"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
-#: html/Admin/Users/Modify.html:94
-#: html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "言語"
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr ""
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
-msgstr ""
+msgstr "最後"
-#: html/Ticket/Elements/EditDates:59
-#: html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "最終コンタクト"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "最終コンタクト"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
-msgstr "最終更新日時"
+msgstr "最終更新日"
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
-#: html/Search/Elements/PickBasics:103
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "残り時間"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’RTã«ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã«ã—ã¾ã™"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
-msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©åˆ©ã‚’èªã‚ã¾ã™"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©é™ã‚’承èªã—ã¾ã™"
-#: NOT FOUND IN SOURCE
-msgid "Limiting owner to %1 %2"
-msgstr "担当者を%1 %2ã«åˆ¶é™ã—ã¾ã™"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "Let's go!"
-#: NOT FOUND IN SOURCE
-msgid "Limiting queue to %1 %2"
-msgstr "キューを%1 %2ã«åˆ¶é™ã—ã¾ã™"
-
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "リンク"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "ã™ã§ã«ãƒªãƒ³ã‚¯ã—ã¦ã„ã¾ã™"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "リンクãŒä½œæˆã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
-#. ($TransString)
-#: lib/RT/Record.pm:1326
-msgid "Link created (%1)"
-msgstr "リンクãŒä½œæˆã•ã‚Œã¾ã—ãŸï¼ˆ%1)"
-
-#. ($TransString)
-#: lib/RT/Record.pm:1387
-msgid "Link deleted (%1)"
-msgstr "リンクãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸï¼ˆ%1)"
-
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "リンクãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
-#: html/Ticket/ModifyLinks.html:46
-#: html/Ticket/ModifyLinks.html:50
msgid "Link ticket #%1"
-msgstr "リンクãƒã‚±ãƒƒãƒˆ#%1"
+msgstr "リンクãƒã‚±ãƒƒãƒˆ #%1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr ""
-#: html/Ticket/Create.html:216
-#: html/Ticket/Elements/ShowSummary:89
-#: html/Ticket/Elements/Tabs:120
-#: html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "リンク"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "読ã¿è¾¼ã¿"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr ""
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr ""
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
-msgstr "ロードã•ã‚ŒãŸPerlモジュール"
+msgstr "ロードã—ã¦ã„ã‚‹perlモジュール"
-#. ($self->Name)
-#: lib/RT/SavedSearch.pm:111
-msgid "Loaded search %1"
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
msgstr ""
-#: html/Admin/Users/Modify.html:138
-#: html/User/Prefs.html:126
-msgid "Location"
-msgstr "ä½æ‰€"
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid ""
-"Log directory %1 not found or couldn't be written.\\n"
-" RT can't run."
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
msgstr ""
-"ログディレクトリー%1ãŒè¦‹ã¤ã‹ã‚‰ãªã„ã€ã¾ãŸã¯æ›¸ã出ã›ã¾ã›ã‚“。\\n"
-" RTãŒå‹•ãã¾ã›ã‚“"
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "ä½æ‰€"
+
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
-#: html/Elements/Header:91
msgid "Logged in as %1"
msgstr "\"%1\"ã§ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã™"
-#: docs/design_docs/string-extraction-guide.txt:71
-#: html/Elements/Login:100
-#: html/Elements/Login:68
-#: html/Elements/Login:84
-#: lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "ログアウトã—ã¾ã—ãŸ"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "ログイン"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "ログアウト"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr ""
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
-msgstr "担当者を決ã‚ã‚‹"
+msgstr "担当者を設定"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
-msgstr "ステータスを決ã‚ã‚‹"
+msgstr "ステータスを設定"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
-msgstr "期é™æœŸæ—¥ã‚’決ã‚ã‚‹"
+msgstr "期é™æ—¥ã‚’設定"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
-msgstr "解決期日を決ã‚ã‚‹"
+msgstr "解決ã—ãŸæ—¥ã‚’設定"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
-msgstr "開始日を決ã‚ã‚‹"
+msgstr "開始ã—ãŸæ—¥ã‚’設定"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
-msgstr "開始日を決ã‚ã‚‹"
+msgstr "開始ã™ã‚‹æ—¥ã‚’設定"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
-msgstr "言ã‚ã‚ŒãŸæ—¥ã‚’決ã‚ã‚‹"
+msgstr "指示ã—ãŸæ—¥ã‚’設定"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
-msgstr "優先順ä½ã‚’決ã‚ã‚‹"
+msgstr "優先度を決ã‚ã‚‹"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
-msgstr "キューを決ã‚ã‚‹"
+msgstr "キューを設定"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
-msgstr "サブジェクトを決ã‚ã‚‹"
+msgstr "件åを設定"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr ""
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr ""
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
-msgstr ""
+msgstr "グループã¨ãƒ¡ãƒ³ãƒãƒ¼ã®ç®¡ç†"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr ""
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr ""
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "ä¿å­˜ã•ã‚ŒãŸã‚°ãƒ©ãƒ•ã®ç®¡ç†"
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr ""
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "3月"
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
+msgstr "3"
+
+#: NOT FOUND IN SOURCE
+msgid "March"
msgstr "3月"
-#: lib/RT/Date.pm:445
-msgid "May."
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
msgstr "5月"
+#: NOT FOUND IN SOURCE
+msgid "May."
+msgstr "5"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:731
msgid "Member %1 added"
-msgstr ""
+msgstr "メンãƒãƒ¼ %1 を追加ã—ã¾ã—ãŸ"
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:771
msgid "Member %1 deleted"
-msgstr ""
+msgstr "メンãƒãƒ¼ %1 を削除ã—ã¾ã—ãŸ"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "メンãƒãƒ¼ãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸ"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "追加メンãƒãƒ¼: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
-msgstr "メンãƒãƒ¼ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
+msgstr "削除メンãƒãƒ¼"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
-msgstr "メンãƒãƒ¼ãŒå‰Šé™¤ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+msgstr "削除ã•ã‚Œãªã‹ã£ãŸãƒ¡ãƒ³ãƒãƒ¼"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "メンãƒãƒ¼:"
-#: html/Admin/Elements/GroupTabs:63
-#: html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "メンãƒãƒ¼"
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:728
msgid "Membership in %1 added"
-msgstr ""
+msgstr "%1 ã®ãƒ¡ãƒ³ãƒãƒ¼è¿½åŠ "
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:768
msgid "Membership in %1 deleted"
-msgstr ""
+msgstr "%1 ã®ãƒ¡ãƒ³ãƒãƒ¼å‰Šé™¤"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
-msgstr ""
+msgstr "メンãƒãƒ¼æ‰€å±ž"
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
-#: html/Admin/Users/Memberships.html:60
msgid "Memberships of the user %1"
-msgstr ""
+msgstr "ユーザ %1 ã®æ‰€å±ž"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "çµåˆãŒæˆåŠŸã—ã¾ã—ãŸ"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "çµåˆãŒå¤±æ•—ã—ã¾ã—ãŸã€‚有効ãªIDãŒè¨­å®šã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr ""
-#: html/Elements/EditLinks:131
-#: html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "次ã®ãƒã‚±ãƒƒãƒˆã«çµåˆ"
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:734
msgid "Merged into %1"
msgstr ""
-#: html/Search/Bulk.html:143
-#: html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
+msgstr "本文"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
msgstr ""
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "メッセージボックスã®é«˜ã•"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "メッセージボックスã®æ¨ªå¹…"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ä»¥ä¸‹ã®å®›å…ˆã«ã¯é€ä¿¡ã•ã‚Œãªããªã‚Šã¾ã™:"
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "分"
-#: html/Search/Build.html:490
-#: lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr ""
-
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr ""
-#: html/Admin/Users/Modify.html:193
-#: html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "æºå¸¯"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
-msgstr "æºå¸¯é›»è©±"
+msgstr ""
#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Modify Custom Field %1"
-msgstr "カスタムフィールド%1を修正ã™ã‚‹"
-
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
-#: html/Admin/Elements/ObjectCustomFields:96
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr ""
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
-#: html/Admin/Elements/ObjectCustomFields:98
msgid "Modify Custom Fields which apply to all %1"
msgstr ""
-#: html/Admin/Global/GroupRights.html:106
-#: html/Admin/Groups/GroupRights.html:94
-#: html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr ""
-#: html/Admin/Groups/Members.html:105
-#: html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
-msgstr ""
+msgstr "メンãƒãƒ¼æ›´æ–°"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
-msgstr ""
+msgstr "権é™ã‚’変更"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr ""
-#: html/Admin/Global/UserRights.html:75
-#: html/Admin/Groups/UserRights.html:76
-#: html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr ""
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
-#: html/Admin/Queues/CustomField.html:66
msgid "Modify a CustomField for queue %1"
msgstr ""
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrip.html:82
msgid "Modify a scrip for queue %1"
msgstr ""
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr ""
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
-#: html/Admin/CustomFields/Objects.html:90
msgid "Modify associated objects for %1"
msgstr ""
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
-#: html/Ticket/ModifyDates.html:46
-#: html/Ticket/ModifyDates.html:50
msgid "Modify dates for #%1"
-msgstr "#%1ã®æœŸæ—¥ã‚’修正ã™ã‚‹"
+msgstr "#%1ã®æœŸæ—¥ã‚’変更"
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
-#: html/Ticket/ModifyDates.html:57
msgid "Modify dates for ticket # %1"
-msgstr "ãƒã‚±ãƒƒãƒˆ#%1ã®æœŸæ—¥ã‚’修正ã™ã‚‹"
+msgstr "ãƒã‚±ãƒƒãƒˆ#%1ã®æœŸæ—¥ã‚’変更"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65
-#: html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:70
-#: html/Admin/Global/GroupRights.html:46
-#: html/Admin/Global/GroupRights.html:49
-#: html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
-msgstr "グローãƒãƒ«ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©åˆ©ã‚’修正ã™ã‚‹"
+msgstr "グローãƒãƒ«ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©é™ã‚’変更"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
-msgstr "グローãƒãƒ«ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©åˆ©ã‚’修正ã™ã‚‹"
+msgstr "グローãƒãƒ«ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©é™ã‚’変更"
-#: NOT FOUND IN SOURCE
-msgid "Modify global scrips"
-msgstr "グローãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—トを修正ã™ã‚‹"
-
-#: html/Admin/Global/UserRights.html:46
-#: html/Admin/Global/UserRights.html:49
-#: html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
-msgstr ""
+msgstr "グローãƒãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©é™ã‚’変更"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
-msgstr "グローãƒãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©åˆ©ã‚’修正ã™ã‚‹"
+msgstr "グローãƒãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©é™ã‚’変更"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr ""
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
-#: html/Admin/CustomFields/GroupRights.html:164
msgid "Modify group rights for custom field %1"
msgstr ""
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
-#: html/Admin/Groups/GroupRights.html:46
-#: html/Admin/Groups/GroupRights.html:50
-#: html/Admin/Groups/GroupRights.html:56
msgid "Modify group rights for group %1"
-msgstr "%1ã®ã‚°ãƒ«ãƒ¼ãƒ—権利を修正ã™ã‚‹"
+msgstr "%1ã®ã‚°ãƒ«ãƒ¼ãƒ—権é™ã‚’修正"
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/GroupRights.html:46
-#: html/Admin/Queues/GroupRights.html:50
msgid "Modify group rights for queue %1"
-msgstr "キュー%1ã®ã‚°ãƒ«ãƒ¼ãƒ—権利を修正ã™ã‚‹"
+msgstr "キュー%1ã®ã‚°ãƒ«ãƒ¼ãƒ—権é™ã‚’修正"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr ""
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/People.html:46
-#: html/Admin/Queues/People.html:50
msgid "Modify people related to queue %1"
-msgstr "キュー%1ã®é–¢ä¸Žè€…を修正ã™ã‚‹"
+msgstr "キュー%1ã®é–¢ä¸Žè€…を変更"
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
-#: html/Ticket/ModifyPeople.html:46
-#: html/Ticket/ModifyPeople.html:50
-#: html/Ticket/ModifyPeople.html:57
msgid "Modify people related to ticket #%1"
-msgstr "ãƒã‚±ãƒƒãƒˆ#%1ã®é–¢ä¸Žè€…を修正ã™ã‚‹"
+msgstr "ãƒã‚±ãƒƒãƒˆ#%1ã®é–¢ä¸Žè€…を変更"
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrips.html:67
msgid "Modify scrips for queue %1"
-msgstr "キュー%1ã®ã‚¹ã‚¯ãƒªãƒ—トを修正ã™ã‚‹"
+msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:56
-#: html/Admin/Global/Scrips.html:65
-#: html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr ""
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-#: html/Admin/Global/Template.html:102
-#: html/Admin/Global/Template.html:46
-#: html/Admin/Global/Template.html:51
-#: html/Admin/Queues/Template.html:99
msgid "Modify template %1"
-msgstr "テンプレート%1を修正ã™ã‚‹"
+msgstr "テンプレート%1を変更"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr ""
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr ""
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
-#: html/Admin/Groups/Modify.html:119
-#: html/User/Groups/Modify.html:107
msgid "Modify the group %1"
-msgstr "グループ%1を修正ã™ã‚‹"
+msgstr "グループ%1を変更"
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr ""
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
-#: html/Admin/Users/Modify.html:309
msgid "Modify the user %1"
-msgstr "ユーザー%1を修正ã™ã‚‹"
+msgstr "ユーザー%1を変更"
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
-#: html/Ticket/ModifyAll.html:58
msgid "Modify ticket # %1"
-msgstr "ãƒã‚±ãƒƒãƒˆ# %1を修正ã™ã‚‹"
+msgstr "ãƒã‚±ãƒƒãƒˆ# %1を変更"
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
-#: html/Ticket/Modify.html:46
-#: html/Ticket/Modify.html:49
-#: html/Ticket/Modify.html:55
msgid "Modify ticket #%1"
-msgstr "ãƒã‚±ãƒƒãƒˆ#%1を修正ã™ã‚‹"
+msgstr "ãƒã‚±ãƒƒãƒˆ#%1を変更"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr ""
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
-#: html/Admin/CustomFields/UserRights.html:157
msgid "Modify user rights for custom field %1"
msgstr ""
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
-#: html/Admin/Groups/UserRights.html:46
-#: html/Admin/Groups/UserRights.html:50
-#: html/Admin/Groups/UserRights.html:56
msgid "Modify user rights for group %1"
-msgstr "グループ%1ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©åˆ©ã‚’修正ã™ã‚‹"
+msgstr "グループ%1ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©é™ã‚’変更"
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/UserRights.html:46
-#: html/Admin/Queues/UserRights.html:50
msgid "Modify user rights for queue %1"
-msgstr "キュー%1ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©åˆ©ã‚’修正ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify watchers for queue '%1'"
-msgstr "キュー'%1'ã®ã‚¦ã‚©ãƒƒãƒãƒ£ãƒ¼ã‚’修正ã™ã‚‹"
+msgstr "キュー%1ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©é™ã‚’変更"
#: lib/RT/Queue_Overlay.pm:94
msgid "ModifyACL"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr ""
@@ -3401,3270 +3939,3615 @@ msgstr ""
msgid "ModifyQueueWatchers"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr ""
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "月"
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
-msgstr "月曜日"
+msgstr "月"
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
-#: html/Ticket/Elements/ShowRequestor:61
msgid "More about %1"
-msgstr "ã•ã‚‰ã«%1ã«ã¤ã„ã¦"
+msgstr "%1 ã«ã¤ã„ã¦"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr ""
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr ""
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
-msgstr "多ãã®"
+msgstr ""
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "'åå‰'ã®å±žæ€§ã‚’指定ã—ã¦ãã ã•ã„"
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
-#: html/SelfService/Elements/MyRequests:57
msgid "My %1 tickets"
msgstr ""
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
-msgstr ""
+msgstr "ç§ã®ä¸€æ—¥"
-#: html/Approvals/index.html:46
-#: html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "担当ãƒã‚±ãƒƒãƒˆã®æ‰¿èªçŠ¶æ³"
-#: html/Search/Elements/SearchPrivacy:50
-#: html/Search/Elements/SelectSearchObject:53
-#: html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "ç§ã®ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
+msgstr "ä¿å­˜ã—ãŸç§ã®æ¤œç´¢"
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:58
-#: html/Admin/Elements/AddCustomFieldValue:53
-#: html/Admin/Elements/EditCustomField:55
-#: html/Admin/Elements/EditCustomFieldValues:55
-#: html/Admin/Elements/ModifyTemplate:49
-#: html/Admin/Groups/Modify.html:65
-#: html/Search/Bulk.html:157
-#: html/User/Groups/Modify.html:65
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "åå‰"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
-msgstr "ç¾åœ¨ãŠä½¿ã„ã®åå‰"
+msgstr "ç¾åœ¨ä½¿ã£ã¦ã„ã‚‹åå‰"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "æ–°è¦"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "æ–°ã—ã„リンク"
-#: html/Admin/Users/Modify.html:119
-#: html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "æ–°è¦ãƒ‘スワード"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr ""
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "æ–°è¦æ¤œç´¢"
-#: html/Admin/Elements/CustomFieldTabs:93
-#: html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "%1 ã®æ–°è¦ãƒ»ç€æ‰‹ãƒã‚±ãƒƒãƒˆ"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr ""
-#: html/Admin/Elements/GroupTabs:77
-#: html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "æ–°è¦ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
+msgstr "æ–°è¦ã‚°ãƒ«ãƒ¼ãƒ—"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
msgstr ""
-#: html/SelfService/Prefs.html:53
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "æ–°è¦ãƒ‘スワード"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "æ–°ã—ã„パスワード情報ãŒé€ã‚‰ã‚Œã¾ã—ãŸ"
-#: html/Admin/Elements/QueueTabs:95
-msgid "New queue"
-msgstr ""
-
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "æ–°è¦ãƒªãƒžã‚¤ãƒ³ãƒ€ä½œæˆ:"
-#: NOT FOUND IN SOURCE
-msgid "New request"
-msgstr "æ–°è¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆ"
-
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
-msgstr "æ–°ã—ã„権利"
+msgstr "æ–°ã—ã„権é™"
-#: html/Admin/Global/Scrip.html:63
-#: html/Admin/Global/Scrips.html:60
-#: html/Admin/Queues/Scrip.html:71
-#: html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "New search"
-msgstr "æ–°è¦æ¤œç´¢"
-
-#: html/Admin/Global/Template.html:81
-#: html/Admin/Global/Templates.html:60
-#: html/Admin/Queues/Template.html:79
-#: html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr ""
-#: html/SelfService/Elements/Tabs:84
-#: html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "æ–°è¦ãƒã‚±ãƒƒãƒˆ"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "æ–°ã—ã„ãƒã‚±ãƒƒãƒˆã¯ã‚ã‚Šã¾ã›ã‚“"
-#: html/Admin/Elements/UserTabs:81
-msgid "New user"
-msgstr "æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼"
-
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "æ–°è¦ã«è¿½åŠ ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼"
-#: html/Admin/Queues/People.html:76
-#: html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "æ–°è¦ã‚¦ã‚©ãƒƒãƒãƒ£ãƒ¼"
-#: NOT FOUND IN SOURCE
-msgid "New window setting"
-msgstr "æ–°ã—ã„ウインドウ設定"
-
-#: html/Helpers/CalPopup.html:58
-#: html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
-msgstr "次ã¸"
+msgstr "次"
-#: html/Elements/TicketList:104
-msgid "Next Page"
-msgstr "次ã®ãƒšãƒ¼ã‚¸"
-
-#: NOT FOUND IN SOURCE
-msgid "Next page"
-msgstr "次ã®ãƒšãƒ¼ã‚¸"
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr ""
-#: html/Admin/Users/Modify.html:84
-#: html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "ニックãƒãƒ¼ãƒ "
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "ã„ã„ãˆ"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:166
-#: html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "カスタムフィールドãŒã‚ã‚Šã¾ã›ã‚“"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr ""
-#: html/Admin/Groups/GroupRights.html:105
-#: html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "グループãŒå®šç¾©ã•ã‚Œã¾ã›ã‚“"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr ""
-#: html/Admin/Queues/GroupRights.html:118
-#: html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "キューãŒå®šç¾©ã•ã‚Œã¾ã›ã‚“"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "RTユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。RT管ç†è€…ã«ç›¸è«‡ã—ã¦ãã ã•ã„。\\n"
-#: html/Admin/Global/Template.html:100
-#: html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "テンプレートãŒã‚ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "No Ticket specified. Aborting ticket "
-msgstr "ãƒã‚±ãƒƒãƒˆãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#: NOT FOUND IN SOURCE
-msgid ""
-"No Ticket specified. Aborting ticket modifications\\n"
-"\\n"
-msgstr ""
-"ãƒã‚±ãƒƒãƒˆãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。ãƒã‚±ãƒƒãƒˆã®ä¿®æ­£ã‚’終了ã—ã¾ã™\\n"
-"\\n"
-
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr ""
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "No command found\\n"
-msgstr "コマンドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\\n"
-
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
-msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢ã—ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆã¯å…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¤ã„ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "No correspondence attached"
-msgstr "メールã®æ·»ä»˜ã¯ã‚ã‚Šã¾ã›ã‚“"
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "ダッシュボードã¯ã‚ã‚Šã¾ã›ã‚“"
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
-#: lib/RT/Action/Generic.pm:185
-#: lib/RT/Condition/Generic.pm:197
-#: lib/RT/Search/ActiveTicketsInQueue.pm:77
-#: lib/RT/Search/Generic.pm:134
-#: lib/RT/Search/Googleish.pm:78
msgid "No description for %1"
msgstr "%1 詳細情報ãŒã‚ã‚Šã¾ã›ã‚“"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "グループãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr ""
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "パスワードãŒè¨­å®šã•ã‚Œã¾ã›ã‚“"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "キューを作æˆã™ã‚‹è¨±å¯ãŒã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
-#: lib/RT/Ticket_Overlay.pm:420
msgid "No permission to create tickets in the queue '%1'"
msgstr ""
-#: lib/RT/User_Overlay.pm:186
-msgid "No permission to create users"
-msgstr "ユーザーを作æˆã™ã‚‹è¨±å¯ãŒã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "ãã®ãƒã‚±ãƒƒãƒˆã‚’表示ã™ã‚‹è¨±å¯ãŒã‚ã‚Šã¾ã›ã‚“"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr ""
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "æ›´æ–°ã•ã‚ŒãŸãƒã‚±ãƒƒãƒˆã‚’見る許å¯ãŒã‚ã‚Šã¾ã›ã‚“"
-#: lib/RT/Queue_Overlay.pm:795
-#: lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "責任者ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: html/Admin/Queues/People.html:175
-#: html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "責任者ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "検索基準ã«ã‚ã£ãŸã‚­ãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr ""
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
-msgstr "権利ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+msgstr "権é™ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr ""
-
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "æ“作ã®ãŸã‚ã®æ¤œç´¢ãŒã§ãã¾ã›ã‚“"
-#: html/Elements/RT__Ticket/ColumnMap:137
-#: html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
+msgstr "件åãªã—"
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "No ticket id specified"
-msgstr "ãƒã‚±ãƒƒãƒˆIDãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "ãƒã‚±ãƒƒãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: lib/RT/Transaction_Overlay.pm:528
-#: lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "トランザクションタイプãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "検索基準ã«ã‚ã£ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
-msgstr "有効ãªRTユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。RT cvcãƒãƒ³ãƒ‰ãƒ©ãŒåˆ†é›¢ã—ã¦ã„ã¾ã™ã€‚RT管ç†è€…ã«ç›¸è«‡ã—ã¦ãã ã•ã„。\\n"
-
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr ""
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr ""
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "ãªã—"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr ""
-#: html/Search/Chart:71
-#: html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
+msgstr "未指定"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
msgstr ""
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "ログインã—ã¦ã„ã¾ã›ã‚“"
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "未指定"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "未実装"
-#: NOT FOUND IN SOURCE
-msgid "Not yet implemented...."
-msgstr "未実装..."
-
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "付記"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "ãŠçŸ¥ã‚‰ã›ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr ""
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr ""
-#: etc/initialdata:93
-#: etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr ""
-#: etc/initialdata:89
-#: etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr ""
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
-msgstr ""
+msgstr "ä»–ã®å®›å…ˆã«é€šçŸ¥"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
-msgstr ""
+msgstr "ä»–ã®å®›å…ˆã«ã‚³ãƒ¡ãƒ³ãƒˆå½¢å¼ã§é€šçŸ¥"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr ""
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr ""
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr ""
-#: etc/initialdata:365
-msgid "Notify Owner of their ticket has been approved by all approvers"
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
msgstr ""
-#: etc/initialdata:353
-msgid "Notify Owner of their ticket has been approved by some approver"
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
msgstr ""
-#: etc/initialdata:334
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr ""
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr ""
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr ""
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr ""
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
msgstr ""
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
-msgstr ""
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "11月"
-#: lib/RT/Date.pm:451
+#: NOT FOUND IN SOURCE
msgid "Nov."
+msgstr "11"
+
+#: NOT FOUND IN SOURCE
+msgid "November"
msgstr "11月"
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr ""
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr ""
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr ""
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr ""
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr ""
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
-#: html/Admin/CustomFields/Objects.html:72
-#: html/Admin/Elements/ObjectCustomFields:63
msgid "Object of type %1 cannot take custom fields"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr ""
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "10月"
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
+msgstr "10"
+
+#: NOT FOUND IN SOURCE
+msgid "October"
msgstr "10月"
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "オフライン"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "オフライン編集"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "オフラインã‹ã‚‰ã‚¢ãƒƒãƒ—ロード"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "ãŒä»¥ä¸‹ã§ã‚ã‚‹"
-
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-#: lib/RT/Transaction_Overlay.pm:326
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr ""
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr ""
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr ""
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr ""
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr ""
-#: etc/initialdata:177
-#: etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr ""
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr ""
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr ""
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr ""
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr ""
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "今回ã®ã¿ Bcc"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "今回ã®ã¿ Cc"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
-#: html/Approvals/Elements/PendingMyApproval:70
msgid "Only show approvals for requests created after %1"
-msgstr "%1 以後ã«ä½œæˆã•ã‚ŒãŸæ‰¿èªã®ã¿è¡¨ç¤º"
+msgstr "ã“ã®æ—¥ã‚ˆã‚Šã‚‚後ã«ä½œæˆã•ã‚ŒãŸæ‰¿èªã®ã¿è¡¨ç¤º %1"
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
-#: html/Approvals/Elements/PendingMyApproval:68
msgid "Only show approvals for requests created before %1"
-msgstr "%1 以å‰ã«ä½œæˆã•ã‚ŒãŸæ‰¿èªã®ã¿è¡¨ç¤º"
+msgstr "ã“ã®æ—¥ã‚ˆã‚Šã‚‚å‰ã«ä½œæˆã•ã‚ŒãŸæ‰¿èªã®ã¿è¡¨ç¤º %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Open"
-msgstr "ç€æ‰‹æ¸ˆã¿"
-
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
-msgstr ""
+msgstr "ãƒã‚±ãƒƒãƒˆç€æ‰‹"
-#: html/Ticket/Elements/Tabs:160
-msgid "Open it"
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Open requests"
-msgstr "リクエストを開ã"
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr "ç€æ‰‹ã™ã‚‹"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Open tickets (from listing) in a new window"
-msgstr "ãƒã‚±ãƒƒãƒˆã‚’(リストã‹ã‚‰ï¼‰æ–°ã—ã„ウインドウã‹ã‚‰é–‹ã"
+msgstr "ãƒã‚±ãƒƒãƒˆç€æ‰‹"
-#: NOT FOUND IN SOURCE
-msgid "Open tickets (from listing) in another window"
-msgstr "ãƒã‚±ãƒƒãƒˆã‚’(リストã‹ã‚‰ï¼‰ã»ã‹ã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‹ã‚‰é–‹ã"
-
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr ""
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "オプション"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "並ã³ã‹ãˆé †ç•ª"
-#: NOT FOUND IN SOURCE
-msgid "Ordering and sorting"
-msgstr "整列ã¨ä¸¦ã³æ›¿ãˆ"
-
-#: html/Admin/Users/Modify.html:141
-#: html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "組織"
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
-#: html/Approvals/Elements/Approve:53
msgid "Originating ticket: #%1"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "コメントã«ã¤ã„ã¦ã®ãƒ¡ãƒ¼ãƒ«é€ä¿¡ã‚’記録ã—ã¾ã—ãŸ"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "メールé€ä¿¡ã‚’記録ã—ã¾ã—ãŸ"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
-msgstr "時間切れã§ã™ã€å„ªå…ˆé †ä½ãŒã†ã¤ã‚Šã¾ã—ãŸ"
+msgstr "時間ãŒéŽãŽãŸã‚‰ã€å„ªå…ˆåº¦ã‚’以下ã«å¤‰æ›´"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr ""
-#: etc/initialdata:38
-#: html/Elements/QuickCreate:56
-#: html/Search/Elements/PickBasics:101
-#: html/Ticket/Create.html:72
-#: html/Ticket/Elements/EditBasics:61
-#: html/Ticket/Elements/EditPeople:64
-#: html/Ticket/Elements/EditPeople:65
-#: html/Ticket/Elements/Reminders:129
-#: html/Ticket/Elements/ShowPeople:48
-#: html/Ticket/Update.html:62
-#: lib/RT/ACE_Overlay.pm:110
-#: lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "担当者"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
-#: lib/RT/Transaction_Overlay.pm:672
msgid "Owner forcibly changed from %1 to %2"
-msgstr "担当者ã¯å¼·åˆ¶çš„ã«%1ã‹ã‚‰%2を変更ã—ã¾ã—ãŸ"
+msgstr "担当者ã¯å¼·åˆ¶çš„ã«%1ã‹ã‚‰%2ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Owner is"
-msgstr "担当者ã¯"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "ページ"
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-#: html/Elements/TicketList:78
-msgid "Page %1 of %2"
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
msgstr ""
-#: html/Admin/Users/Modify.html:198
-#: html/User/Prefs.html:96
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "ãƒã‚±ãƒƒãƒˆãƒ™ãƒ«"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
-msgstr "ãƒã‚±ãƒƒãƒˆãƒ™ãƒ«é›»è©±"
+msgstr ""
-#: html/Elements/EditLinks:144
-#: html/Elements/EditLinks:76
-#: html/Elements/ShowLinks:68
-#: html/Ticket/Create.html:222
-#: html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "上ä½ãƒã‚±ãƒƒãƒˆ"
-#: html/Elements/Login:95
-#: html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "パスワード"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
-msgstr "パスワードã®ãŠçŸ¥ã‚‰ã›"
+msgstr "パスワード通知"
-#: lib/RT/Transaction_Overlay.pm:781
-#: lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr ""
-#. ($RT::MinimumPasswordLength)
-#: lib/RT/User_Overlay.pm:1037
-#: lib/RT/User_Overlay.pm:214
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr ""
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Password too short"
-msgstr "パスワードãŒçŸ­ã™ãŽã¾ã™"
-
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
-#: html/User/Prefs.html:240
msgid "Password: %1"
msgstr "パスワード: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr ""
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr ""
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr ""
-#: html/Ticket/Elements/ShowSummary:62
-#: html/Ticket/Elements/Tabs:119
-#: html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
-msgstr "担当者等"
+msgstr "関与者"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr ""
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Perlã®è¨­å®šæƒ…å ±"
-#: lib/RT/ACE_Overlay.pm:251
-#: lib/RT/ACE_Overlay.pm:257
-#: lib/RT/ACE_Overlay.pm:580
-#: lib/RT/ACE_Overlay.pm:590
-#: lib/RT/ACE_Overlay.pm:600
-#: lib/RT/ACE_Overlay.pm:665
-#: lib/RT/Attribute_Overlay.pm:158
-#: lib/RT/Attribute_Overlay.pm:164
-#: lib/RT/Attribute_Overlay.pm:405
-#: lib/RT/Attribute_Overlay.pm:414
-#: lib/RT/Attribute_Overlay.pm:427
-#: lib/RT/CurrentUser.pm:116
-#: lib/RT/CurrentUser.pm:125
-#: lib/RT/CustomField_Overlay.pm:1017
-#: lib/RT/CustomField_Overlay.pm:1138
-#: lib/RT/CustomField_Overlay.pm:1281
-#: lib/RT/CustomField_Overlay.pm:172
-#: lib/RT/CustomField_Overlay.pm:189
-#: lib/RT/CustomField_Overlay.pm:200
-#: lib/RT/CustomField_Overlay.pm:374
-#: lib/RT/CustomField_Overlay.pm:403
-#: lib/RT/CustomField_Overlay.pm:763
-#: lib/RT/CustomField_Overlay.pm:936
-#: lib/RT/CustomField_Overlay.pm:971
-#: lib/RT/Group_Overlay.pm:1117
-#: lib/RT/Group_Overlay.pm:1121
-#: lib/RT/Group_Overlay.pm:1130
-#: lib/RT/Group_Overlay.pm:1240
-#: lib/RT/Group_Overlay.pm:1244
-#: lib/RT/Group_Overlay.pm:1250
-#: lib/RT/Group_Overlay.pm:445
-#: lib/RT/Group_Overlay.pm:542
-#: lib/RT/Group_Overlay.pm:620
-#: lib/RT/Group_Overlay.pm:628
-#: lib/RT/Group_Overlay.pm:726
-#: lib/RT/Group_Overlay.pm:730
-#: lib/RT/Group_Overlay.pm:736
-#: lib/RT/Group_Overlay.pm:922
-#: lib/RT/Group_Overlay.pm:926
-#: lib/RT/Group_Overlay.pm:939
-#: lib/RT/Queue_Overlay.pm:1054
-#: lib/RT/Queue_Overlay.pm:140
-#: lib/RT/Queue_Overlay.pm:158
-#: lib/RT/Queue_Overlay.pm:657
-#: lib/RT/Queue_Overlay.pm:667
-#: lib/RT/Queue_Overlay.pm:681
-#: lib/RT/Queue_Overlay.pm:819
-#: lib/RT/Queue_Overlay.pm:828
-#: lib/RT/Queue_Overlay.pm:841
-#: lib/RT/Scrip_Overlay.pm:149
-#: lib/RT/Scrip_Overlay.pm:160
-#: lib/RT/Scrip_Overlay.pm:224
-#: lib/RT/Scrip_Overlay.pm:538
-#: lib/RT/Template_Overlay.pm:108
-#: lib/RT/Template_Overlay.pm:277
-#: lib/RT/Ticket_Overlay.pm:1357
-#: lib/RT/Ticket_Overlay.pm:1367
-#: lib/RT/Ticket_Overlay.pm:1381
-#: lib/RT/Ticket_Overlay.pm:1522
-#: lib/RT/Ticket_Overlay.pm:1532
-#: lib/RT/Ticket_Overlay.pm:1546
-#: lib/RT/Ticket_Overlay.pm:1663
-#: lib/RT/Ticket_Overlay.pm:1983
-#: lib/RT/Ticket_Overlay.pm:2126
-#: lib/RT/Ticket_Overlay.pm:2296
-#: lib/RT/Ticket_Overlay.pm:2346
-#: lib/RT/Ticket_Overlay.pm:2525
-#: lib/RT/Ticket_Overlay.pm:2538
-#: lib/RT/Ticket_Overlay.pm:2614
-#: lib/RT/Ticket_Overlay.pm:2627
-#: lib/RT/Ticket_Overlay.pm:2748
-#: lib/RT/Ticket_Overlay.pm:2762
-#: lib/RT/Ticket_Overlay.pm:2990
-#: lib/RT/Ticket_Overlay.pm:3000
-#: lib/RT/Ticket_Overlay.pm:3005
-#: lib/RT/Ticket_Overlay.pm:3224
-#: lib/RT/Ticket_Overlay.pm:3228
-#: lib/RT/Ticket_Overlay.pm:3371
-#: lib/RT/Ticket_Overlay.pm:3497
-#: lib/RT/Transaction_Overlay.pm:516
-#: lib/RT/Transaction_Overlay.pm:523
-#: lib/RT/Transaction_Overlay.pm:551
-#: lib/RT/Transaction_Overlay.pm:558
-#: lib/RT/User_Overlay.pm:1176
-#: lib/RT/User_Overlay.pm:1856
-#: lib/RT/User_Overlay.pm:369
-#: lib/RT/User_Overlay.pm:735
-#: lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "許å¯ãŒä¸‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/Template_Overlay.pm:238
-#: lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr ""
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
msgstr ""
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
-msgstr ""
+msgstr "個人グループ"
-#: html/User/Groups/index.html:51
-#: html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "個人グループ"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "個人グループ:"
-#: html/Admin/Users/Modify.html:180
-#: html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "電話番å·"
-#: NOT FOUND IN SOURCE
-msgid "Placeholder"
-msgstr "代替物"
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Pref"
-msgstr "設定"
-
-#: html/Elements/Header:93
-#: html/Elements/Tabs:91
-#: html/SelfService/Elements/Tabs:95
-#: html/SelfService/Prefs.html:46
-#: html/User/Prefs.html:46
-#: html/User/Prefs.html:49
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
-msgstr "個人設定"
+msgstr "プレファレンス"
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-#: html/Admin/Users/MyRT.html:75
-msgid "Preferences %1 for user %2 ."
+msgid "Preferences %1 for user %2."
msgstr ""
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
-#: html/Prefs/MyRT.html:141
msgid "Preferences saved for %1."
msgstr ""
-#: lib/RT/Action/Generic.pm:195
-msgid "Prepare Stubbed"
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
msgstr ""
-#: html/Helpers/CalPopup.html:56
-#: html/Ticket/Elements/Tabs:84
-msgid "Prev"
-msgstr "å‰ã®"
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "設定をä¿å­˜ã—ã¾ã—ãŸã€‚"
-#: html/Elements/TicketList:101
-msgid "Previous Page"
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Previous page"
-msgstr "å‰ã®ãƒšãƒ¼ã‚¸"
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Pri"
-msgstr "優先度"
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr "å‰"
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
-#: lib/RT/ACE_Overlay.pm:157
-#: lib/RT/ACE_Overlay.pm:239
-#: lib/RT/ACE_Overlay.pm:569
msgid "Principal %1 not found."
msgstr ""
-#: html/Search/Elements/PickBasics:147
-#: html/Ticket/Create.html:181
-#: html/Ticket/Elements/EditBasics:92
-#: html/Ticket/Elements/ShowBasics:72
-#: lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "優先度"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
-msgstr "優先順ä½ã¯æ¬¡ã®ã‚ˆã†ã«å§‹ã¾ã‚Šã¾ã™"
+msgstr ""
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "プライãƒã‚·ãƒ¼æƒ…å ±"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
-msgstr ""
+msgstr "プライãƒã‚·ãƒ¼æƒ…å ±:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "秘密éµ"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr ""
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
-#: html/Admin/Users/Modify.html:342
-#: html/User/Prefs.html:231
msgid "Privileged status: %1"
msgstr "特権ステータス: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "特権ã®ã‚るユーザー"
-#: etc/initialdata:23
-#: etc/initialdata:29
-#: etc/initialdata:35
-#: etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr ""
-#: html/Search/Build.html:121
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "クエリ"
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "クエリ"
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "クエリ作æˆ"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "クエリ:"
-#: html/Elements/QueueSummary:48
-#: html/Elements/QuickCreate:54
-#: html/Search/Elements/PickBasics:71
-#: html/SelfService/Create.html:54
-#: html/Ticket/Create.html:62
-#: html/Ticket/Elements/EditBasics:57
-#: html/Ticket/Elements/ShowBasics:76
-#: html/Tools/Reports/CreatedByDates.html:85
-#: html/Tools/Reports/ResolvedByDates.html:86
-#: html/Tools/Reports/ResolvedByOwner.html:66
-#: html/User/Elements/DelegateRights:101
-#: lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "キュー"
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
-#: html/Admin/Queues/CustomField.html:63
-#: html/Admin/Queues/Scrip.html:61
-#: html/Admin/Queues/Scrips.html:69
-#: html/Admin/Queues/Templates.html:65
msgid "Queue %1 not found"
msgstr "キュー %1 ã¯ã¿ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
-msgid "Queue '%1' not found\\n"
-msgstr "キュー'%1'ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ\\n"
-
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "キューã®åå‰"
-#: NOT FOUND IN SOURCE
-msgid "Queue Scrips"
-msgstr "キュースクリプト"
-
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "キューã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™"
-#: lib/RT/Queue_Overlay.pm:374
-#: lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
-msgstr "キューã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "キューを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: html/Ticket/Create.html:244
-#: lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
-msgstr "キューã®ãƒ­ãƒ¼ãƒ‰ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "キューを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ"
-#: docs/design_docs/string-extraction-guide.txt:83
-#: lib/RT/Queue_Overlay.pm:384
-#: lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "キューãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
-#: html/SelfService/Display.html:126
-#: lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "キューãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: html/Admin/Elements/Tabs:59
-#: html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "キュー"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "担当キュー情報"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
-msgstr "ãƒã‚±ãƒƒãƒˆæ–°è¦ä½œæˆ"
+msgstr "管ç†Ccã®ã‚­ãƒ¥ãƒ¼"
-#: html/Elements/Quicksearch:47
-#: html/Prefs/Elements/Tabs:58
-#: html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
-msgstr "簡易検索"
+msgstr "ã‹ã‚“ãŸã‚“検索"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "ãƒã‚±ãƒƒãƒˆæ–°è¦ä½œæˆ"
-#: html/Search/Results.html:81
-msgid "RSS"
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
msgstr ""
-#. ($RT::VERSION, $RT::rtname)
-#: docs/design_docs/string-extraction-guide.txt:70
-#: lib/RT/StyleGuide.pod:796
-msgid "RT %1 for %2"
-msgstr "%2ã®RT %1"
-
-#: NOT FOUND IN SOURCE
-msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr "RSS"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr "%2ã®RT %1"
-#: html/Admin/index.html:46
-#: html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "RT管ç†"
-#: NOT FOUND IN SOURCE
-msgid "RT Authentication error."
-msgstr "RTèªè¨¼ã‚¨ãƒ©ãƒ¼"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Bounce: %1"
-msgstr "RTãƒã‚¦ãƒ³ã‚¹ï¼š%1"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Configuration error"
-msgstr "RT設定エラー"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT Critical error. Message not recorded!"
-msgstr "RTé‡å¤§ãªã‚¨ãƒ©ãƒ¼ã€‚メッセージãŒè¨˜éŒ²ã•ã‚Œã¾ã›ã‚“"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "RTã®è¨­å®š"
-#: html/Elements/Error:63
-#: html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
-msgstr "RTエラー"
+msgstr "RT エラー"
-#: NOT FOUND IN SOURCE
-msgid "RT Received mail (%1) from itself."
-msgstr "RTå—信メール(%1)自身ã‹ã‚‰ã®ãƒ¡ãƒ¼ãƒ« "
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT Self Service / Closed Tickets"
-msgstr "RTセルフサービス/クローズã•ã‚ŒãŸãƒã‚±ãƒƒãƒˆ"
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "RTã®å„種変数"
-#: html/Admin/Elements/SystemTabs:71
-#: html/Admin/Elements/UserTabs:67
-#: html/Admin/Global/MyRT.html:1
-#: html/Admin/Global/MyRT.html:12
-#: html/Admin/Global/MyRT.html:4
-#: html/Admin/Global/index.html:84
-#: html/Admin/Users/MyRT.html:21
-#: html/Prefs/MyRT.html:66
-#: html/Prefs/MyRT.html:78
-#: html/User/Elements/Tabs:65
-#: html/index.html:1
-#: html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr ""
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
-#: html/Admin/Users/MyRT.html:30
msgid "RT at a glance for the user %1"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't authenticate you"
-msgstr "RTã§ã¯ã€ãŸã ã„ã¾ãŠä½¿ã„ã®æ–¹ã®èªè¨¼ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't find requestor via its external database lookup"
-msgstr "RTã¯å¤–部ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—を使ã£ã¦ä½œæˆè€…を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't find the queue: %1"
-msgstr "RTã¯ã‚­ãƒ¥ãƒ¼: %1を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't validate this PGP signature. \\n"
-msgstr "RTã¯ã“ã®PGPç½²åを有効ã ã¨å‡¦ç†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚\\n"
-
-#. ($RT::rtname)
-#: html/Elements/Logo:49
-#: html/Elements/PageLayout:172
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
+msgstr "RT for %1"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT has proccessed your commands"
-msgstr "RTã¯ã‚ãªãŸã®ã‚³ãƒžãƒ³ãƒ‰ã‚’処ç†ã—ã¾ã—ãŸ"
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
-msgstr "RT&copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;。RTã¯<a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU一般公衆利用許諾契約書ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³2ã«ã‚‚ã¨ã¥ã„ã¦é…布ã•ã‚Œã¦ã„ã¾ã™ã€‚</a>"
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT thinks this message may be a bounce"
-msgstr "RTã«ã‚ˆã‚‹ã¨ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ãƒã‚¦ãƒ³ã‚¹ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™"
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
-#: html/Search/Simple.html:58
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã§ã¯ã‚ãªãŸãŒãƒã‚±ãƒƒãƒˆã«ã¤ã‘ãŸä»¶åã¯æ¤œç´¢ã•ã‚Œã¾ã›ã‚“."
-#: NOT FOUND IN SOURCE
-msgid "RT will process this message as if it were unsigned.\\n"
-msgstr "RTã¯ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé›»å­ç½²åã•ã‚Œã¦ã„ãªã„ã‚‚ã®ã¨ã—ã¦å‡¦ç†ã—ã¾ã™ã€‚\\n"
-
-#: html/Admin/CustomFields/Modify.html:108
-#: html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
-msgstr "RTã®Eメールコマンドモードã§ã¯PGPèªè¨¼ãŒå¿…è¦ã§ã™ã€‚メッセージã«é›»å­ç½²åãŒãªã„ã‹ã€ç„¡åŠ¹ãªé›»å­ç½²åã§ã™ã€‚"
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
-#: html/Admin/Users/Modify.html:79
-#: html/User/Prefs.html:69
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
-msgstr "本å"
+msgstr "実å"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
-msgstr "本å"
+msgstr "åå‰"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "å—å–å…ˆ"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:725
msgid "Reference by %1 added"
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:765
msgid "Reference by %1 deleted"
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:722
msgid "Reference to %1 added"
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:762
msgid "Reference to %1 deleted"
msgstr ""
-#: html/Elements/EditLinks:103
-#: html/Elements/EditLinks:156
-#: html/Elements/ShowLinks:92
-#: html/Ticket/Create.html:225
-#: html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãƒã‚±ãƒƒãƒˆ"
-#: html/Elements/EditLinks:152
-#: html/Elements/EditLinks:94
-#: html/Elements/SelectLinkType:49
-#: html/Elements/ShowLinks:82
-#: html/Ticket/Create.html:224
-#: html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "å‚ç…§ã—ã¦ã„ã‚‹ãƒã‚±ãƒƒãƒˆ"
-#: NOT FOUND IN SOURCE
-msgid "Refine"
-msgstr "絞り込む"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Refine search"
-msgstr "絞込ã¿æ¤œç´¢"
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "表示ã®æ›´æ–°"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+#: share/html/Elements/Refresh:59
#. ($value/60)
-#: html/Elements/Refresh:57
msgid "Refresh this page every %1 minutes."
msgstr "ページを%1分ãŠãã«æ›´æ–°ã™ã‚‹"
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:811
msgid "Reminder '%1' added"
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:824
msgid "Reminder '%1' completed"
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:817
msgid "Reminder '%1' reopened"
msgstr ""
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
-#: html/Ticket/Reminders.html:46
msgid "Reminder ticket #%1"
msgstr ""
-#: html/Elements/MyReminders:48
-#: html/Ticket/Elements/ShowSummary:75
-#: html/Ticket/Elements/Tabs:122
-#: html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "リマインダ通知"
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
-#: html/Ticket/Reminders.html:50
msgid "Reminders for ticket #%1"
msgstr ""
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "管ç†Ccを削除ã™ã‚‹"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Ccを削除ã™ã‚‹"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "作æˆè€…を削除ã™ã‚‹"
-#: html/Ticket/Elements/ShowTransaction:179
-#: html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "返信"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "返信アドレス"
-#: html/Search/Bulk.html:129
-#: html/Ticket/ModifyAll.html:94
-#: html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
-msgstr "リクエストã—ãŸäººã«è¿”ä¿¡"
+msgstr "リクエストを作æˆã—ãŸäººã«è¿”ä¿¡"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr ""
-#: html/Tools/Elements/Tabs:59
-#: html/Tools/Reports/index.html:46
-#: html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "レãƒãƒ¼ãƒˆä½œæˆ"
-#: etc/initialdata:44
-#: lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "作æˆè€…"
-#: NOT FOUND IN SOURCE
-msgid "Requestor email address"
-msgstr "作æˆè€…ã®Eメールアドレス"
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
-#: html/SelfService/Create.html:63
-#: html/Ticket/Create.html:80
-#: html/Ticket/Elements/EditPeople:69
-#: html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "作æˆè€…"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
-msgstr "リクエストã¯æ¬¡ã®æ—¥ã¾ã§ã«è¡Œã‚ã‚Œãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+msgstr ""
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
-#: lib/RT/Attribute_Overlay.pm:146
msgid "Required parameter '%1' not specified"
msgstr ""
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "リセット"
-#: html/Admin/Users/MyRT.html:15
-#: html/Prefs/MyRT.html:60
-msgid "Reset to default"
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
msgstr ""
-#: html/Admin/Users/Modify.html:183
-#: html/User/Prefs.html:84
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr "デフォルトã®è¨­å®šã«æˆ»ã™"
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "ä½æ‰€"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "解決済ã¿ã«ã™ã‚‹"
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
-#: html/Ticket/Update.html:156
msgid "Resolve ticket #%1 (%2)"
msgstr ""
-#: etc/initialdata:323
-#: html/Elements/SelectDateType:49
-#: lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "解決済ã¿"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "解決済ã¿ï¼ˆæ‰€æœ‰è€…別)"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "解決済ã¿ï¼ˆæœŸé–“)"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
-msgstr ""
+msgstr "期間中ã®è§£æ±ºæ¸ˆã¿ãƒã‚±ãƒƒãƒˆ(所有者別)"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
+msgstr "解決済ã¿ãƒã‚±ãƒƒãƒˆ(所有者別)"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Response to requestors"
-msgstr "作æˆè€…ã«è¿”ç­”ã™ã‚‹"
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
-#: html/Elements/ListActions:46
-#: html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "çµæžœ"
-#: NOT FOUND IN SOURCE
-msgid "Results per page"
-msgstr "一度ã«è¡¨ç¤ºã™ã‚‹å‡ºåŠ›æ•°"
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
-#: html/Admin/Users/Modify.html:126
-#: html/User/Prefs.html:116
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "パスワードã®å†å…¥åŠ›"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
-msgstr ""
-"%2 %3ã®æ¨©åˆ©%1ãŒé ˜åŸŸ%4 %5\\n"
-"ã§è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
-msgstr "権利ãŒå§”託ã•ã‚Œã¾ã—ãŸ"
+msgstr "権é™ãŒå§”託ã•ã‚Œã¾ã—ãŸ"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
-msgstr "権利ãŒè¨±å¯ã•ã‚Œã¾ã—ãŸ"
+msgstr "権é™ãŒå§”è­²ã•ã‚Œã¾ã—ãŸ"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
-msgstr "権利ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸ"
+msgstr "権é™ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸ"
-#: lib/RT/ACE_Overlay.pm:695
-#: lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
-msgstr "権利を無効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "権é™ã‚’無効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
-msgstr "権利ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "権é™ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/ACE_Overlay.pm:560
-#: lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
-msgstr "権利ãŒãƒ­ãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "権é™ãŒãƒ­ãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
-msgstr "権利ãŒç„¡åŠ¹ã«ãªã‚Šã¾ã—ãŸ"
-
-#: html/Admin/Elements/UserTabs:70
-msgid "Rights"
-msgstr "権利"
+msgstr "権é™ãŒç„¡åŠ¹ã«ãªã‚Šã¾ã—ãŸ"
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
-#: html/Admin/CustomFields/GroupRights.html:129
-#: lib/RT/Interface/Web.pm:961
msgid "Rights could not be granted for %1"
msgstr ""
-#. ($object_type)
-#: html/Admin/CustomFields/GroupRights.html:156
-#: lib/RT/Interface/Web.pm:990
-msgid "Rights could not be revoked for %1"
-msgstr ""
-
-#: html/Admin/Global/GroupRights.html:72
-#: html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "役割"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "æž ã®ä¸­ã«è¡¨ç¤ºã™ã‚‹è¡Œæ•°"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "一度ã«è¡¨ç¤ºã™ã‚‹è¡Œæ•°"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "土"
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
-msgstr "土曜日"
+msgstr "土"
-#: html/Prefs/MyRT.html:72
-#: html/Prefs/Quicksearch.html:64
-#: html/Prefs/Search.html:69
-#: html/Search/Elements/EditSearches:70
-#: html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "ä¿å­˜ã™ã‚‹"
-#: html/Admin/Global/Template.html:67
-#: html/Admin/Groups/Modify.html:88
-#: html/Admin/Queues/Modify.html:111
-#: html/Admin/Queues/People.html:126
-#: html/Admin/Users/Modify.html:239
-#: html/Prefs/Quicksearch.html:64
-#: html/Prefs/SearchOptions.html:63
-#: html/SelfService/Prefs.html:58
-#: html/Ticket/Modify.html:60
-#: html/Ticket/ModifyAll.html:127
-#: html/Ticket/ModifyDates.html:60
-#: html/Ticket/ModifyLinks.html:61
-#: html/Ticket/ModifyPeople.html:60
-#: html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
-msgstr "変更をä¿å­˜ã™ã‚‹"
+msgstr "変更をä¿å­˜"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
-msgstr "変更をä¿å­˜ã™ã‚‹"
+msgstr "設定をä¿å­˜"
-#: html/Ticket/Elements/PreviewScrips:131
-msgid "Save changes"
-msgstr "変更をä¿å­˜ã™ã‚‹"
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
-#. ($name)
-#: lib/RT/SavedSearch.pm:173
-msgid "Saved search %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "%1 ã‚’ä¿å­˜ã—ã¾ã—ãŸ"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr "ä¿å­˜ã—ãŸã‚°ãƒ©ãƒ•"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
msgstr ""
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
-#: html/Admin/Elements/ListGlobalScrips:60
-#: html/Admin/Global/Scrip.html:77
-#: html/Admin/Queues/Scrip.html:84
msgid "Scrip #%1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
-msgstr "スクリプトãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
+msgstr ""
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr ""
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr ""
-#: html/Admin/Elements/QueueTabs:67
-#: html/Admin/Elements/SystemTabs:54
-#: html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
-msgstr "スクリプト"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Scrips for %1\\n"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
msgstr ""
-"%1\\n"
-"ã®ã‚¹ã‚¯ãƒªãƒ—ト"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr ""
-#: html/Elements/SimpleSearch:48
-#: html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "検索"
-#: NOT FOUND IN SOURCE
-msgid "Search Criteria"
-msgstr "検索基準"
-
-#: html/Prefs/SearchOptions.html:47
-#: html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "検索設定"
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr ""
-
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "承èªçŠ¶æ³ã®æ¤œç´¢"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "ãƒã‚±ãƒƒãƒˆã®æ¤œç´¢"
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
-msgstr "ãƒã‚±ãƒƒãƒˆã‚’検索ã™ã‚‹ã«ã¯ã€ãƒã‚±ãƒƒãƒˆã®<strong>id</strong>番å·, <strong>キュー</strong>ã®å称, 所有者ã®<strong>ユーザーå</strong>, リクエスト元ã®<strong>Eメールアドレス</strong>を入力ã—ã¦ãã ã•ã„. RT ã¯ãƒã‚±ãƒƒãƒˆã®æœ¬æ–‡ã‚„添付ファイル以外ã®é …目を検索ã—ã¾ã™."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "ãƒã‚±ãƒƒãƒˆã‚’検索ã™ã‚‹ã«ã¯ã€ãƒã‚±ãƒƒãƒˆã®<strong>id</strong>番å·, <strong>キュー</strong>ã®å称, 所有者ã®<strong>ユーザå</strong>, リクエスト作æˆè€…ã®<strong>emailアドレス</strong>を入力ã—ã¦ãã ã•ã„."
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "検索オプション"
-#. ($PrimaryGroupBy)
-#: html/Search/Chart.html:56
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
-msgstr ""
+msgstr "%1 ã®æ¤œç´¢çµæžœ"
-#. ($msg)
-#: lib/RT/SavedSearch.pm:203
-msgid "Search update: %1"
-msgstr ""
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr "検索çµæžœã®å†èª­ã¿è¾¼ã¿é–“éš”"
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "ãƒã‚±ãƒƒãƒˆã®å…¨æ–‡æ¤œç´¢ã¯æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ãŒã€ã‚‚ã—ã‚‚å¿…è¦ãªå ´åˆã¯ã€ <b>fulltext:<i>検索語</i></b> ã¨è¨˜è¿°ã—ã¦ãã ã•ã„。"
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr ""
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr ""
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr ""
-#: html/Admin/CustomFields/index.html:46
-#: html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "é¸æŠž"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr ""
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "グループã®é¸æŠž"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "キューã®é¸æŠž"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr ""
-#: html/Admin/Users/index.html:46
-#: html/Admin/Users/index.html:49
-#: html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "ユーザーã®é¸æŠž"
-#: html/Admin/Elements/CustomFieldTabs:90
-msgid "Select custom field"
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr ""
-#: html/Admin/Elements/GroupTabs:75
-#: html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "ダッシュボードã®é¸æŠž"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
-msgstr ""
+msgstr "グループã®é¸æŠž"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr ""
-#: html/Admin/Elements/QueueTabs:92
-msgid "Select queue"
-msgstr ""
-
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
-msgstr ""
+msgstr "\"RT at a glance\" ã«è¡¨ç¤ºã™ã‚‹ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„"
-#: html/Admin/Global/Scrip.html:59
-#: html/Admin/Global/Scrips.html:57
-#: html/Admin/Queues/Scrip.html:67
-#: html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr ""
-#: html/Admin/Global/Template.html:78
-#: html/Admin/Global/Templates.html:57
-#: html/Admin/Queues/Template.html:76
-#: html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr ""
-#: html/Admin/Elements/UserTabs:78
-msgid "Select user"
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
msgstr ""
-#: html/Admin/Elements/EditCustomFields:58
-msgid "Selected Custom Fields"
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
msgstr ""
-#: html/Admin/CustomFields/Objects.html:59
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr ""
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Self Service"
-msgstr "セルフサービス"
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
msgstr ""
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
msgstr ""
-#: etc/initialdata:112
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr ""
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr ""
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr ""
-#: etc/initialdata:125
-#: etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr ""
-#: etc/initialdata:94
-#: etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr ""
-#: etc/initialdata:90
-#: etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr ""
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr ""
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr ""
-#: etc/initialdata:82
-#: etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr ""
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "9月"
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
+msgstr "9"
+
+#: NOT FOUND IN SOURCE
+msgid "September"
msgstr "9月"
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "基本設定"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "表示ã™ã‚‹"
-#: html/Approvals/index.html:52
-msgid "Show Approvals"
-msgstr "承èªçŠ¶æ³ã‚’表示"
-
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "コラム表示"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "çµæžœã‚’見る"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "承èªã•ã‚ŒãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’表示ã™ã‚‹"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
-msgstr "基本情報を見る"
+msgstr "基本項目"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "æ‹’å¦ã•ã‚ŒãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’表示ã™ã‚‹"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
-msgstr "詳細を見る"
+msgstr "詳細情報"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
-#: html/Approvals/Elements/PendingMyApproval:63
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "ä¿ç•™ã—ã¦ã„るリクエストを表示ã™ã‚‹"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
-msgstr "ä»–ã‹ã‚‰ã®æ‰¿èªå¾…ã¡ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’表示ã™ã‚‹"
+msgstr "ä»–ã®æ‰¿èªå¾…ã¡ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’表示ã™ã‚‹"
#: lib/RT/Queue_Overlay.pm:93
msgid "ShowACL"
msgstr ""
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr ""
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "シュレッダー"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "サイドãƒãƒ¼"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr ""
-#: html/Admin/Users/Modify.html:230
-#: html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "ç½²å"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "シンプル検索"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
-msgstr "ã²ã¨ã¤ã®"
+msgstr ""
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "サイズ"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr ""
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr ""
-#: html/Admin/Elements/AddCustomFieldValue:49
-#: html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
-msgstr "並ã³æ›¿ãˆ"
+msgstr "並ã³ã‹ãˆ"
-#: NOT FOUND IN SOURCE
-msgid "Sort key"
-msgstr "並ã¹æ›¿ãˆã®ã‚­ãƒ¼"
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "並ã³ã‹ãˆ"
-#: NOT FOUND IN SOURCE
-msgid "Sort results by"
-msgstr "次ã®é …ç›®ã”ã¨ã®ä¸¦ã³æ›¿ãˆ"
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "SortOrder"
-msgstr "並ã³é †"
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "表形å¼"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Stalled"
-msgstr "åœæ­¢ã—ã¦ã„ã¾ã™"
-
-#: NOT FOUND IN SOURCE
-msgid "Start page"
-msgstr "開始ページ"
-
-#: html/Elements/SelectDateType:48
-#: html/Ticket/Elements/EditDates:53
-#: html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
-msgstr "開始ã—ãŸæ—¥æ™‚"
+msgstr "開始ã—ãŸæ—¥"
-#: NOT FOUND IN SOURCE
-msgid "Started date '%1' could not be parsed"
-msgstr "開始日'%1'ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
-#: html/Elements/SelectDateType:52
-#: html/Ticket/Create.html:208
-#: html/Ticket/Elements/EditDates:48
-#: html/Ticket/Elements/ShowDates:52
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
-msgstr "開始予定日時"
+msgstr "開始予定日"
-#: NOT FOUND IN SOURCE
-msgid "Starts By"
-msgstr "次ã®æ—¥æ™‚ã¾ã§ã«é–‹å§‹ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Starts date '%1' could not be parsed"
-msgstr "開始日'%1'を解æžã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
-#: html/Admin/Users/Modify.html:162
-#: html/User/Prefs.html:145
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "都é“府県"
-#: html/Search/Elements/PickBasics:87
-#: html/SelfService/Update.html:57
-#: html/Ticket/Create.html:66
-#: html/Ticket/Elements/EditBasics:53
-#: html/Ticket/Elements/ShowBasics:52
-#: html/Ticket/Update.html:59
-#: lib/RT/Ticket_Overlay.pm:1166
-#: lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "ステータス"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "ステータスãŒ%1ã‹ã‚‰%2ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "担当者変更"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr ""
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
-#: lib/RT/Transaction_Overlay.pm:678
msgid "Stolen from %1"
msgstr "%1ã‹ã‚‰æ‹…当者を変更ã—ã¾ã—ãŸ"
#: NOT FOUND IN SOURCE
msgid "Stolen from %1 "
-msgstr "%1ã‹ã‚‰ç›—用ã—㟠"
+msgstr "%1ã‹ã‚‰æ‹…当者を変更ã—ã¾ã—㟠"
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "表示スタイル"
-#: html/Elements/QuickCreate:52
-#: html/Elements/SelectAttachmentField:47
-#: html/Search/Bulk.html:132
-#: html/SelfService/Create.html:79
-#: html/SelfService/Update.html:65
-#: html/Ticket/Create.html:108
-#: html/Ticket/Elements/EditBasics:48
-#: html/Ticket/Elements/Reminders:125
-#: html/Ticket/ModifyAll.html:100
-#: html/Ticket/Update.html:82
-#: lib/RT/Ticket_Overlay.pm:1162
-#: lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "件å"
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
-#: docs/design_docs/string-extraction-guide.txt:89
-#: lib/RT/StyleGuide.pod:815
-#: lib/RT/Transaction_Overlay.pm:700
msgid "Subject changed to %1"
msgstr ""
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
+msgstr "Submit"
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
msgstr ""
-#: lib/RT/Group_Overlay.pm:774
-msgid "Succeeded"
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
msgstr ""
-#: lib/RT/Date.pm:423
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "æ—¥"
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
-msgstr "日曜日"
+msgstr "æ—¥"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr ""
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "システム"
-#: html/Admin/Elements/ToolTabs:54
-#: html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "システムã®è¨­å®šæƒ…å ±"
-#: html/Admin/CustomFields/GroupRights.html:128
-#: html/Admin/CustomFields/GroupRights.html:155
-#: html/Admin/CustomFields/UserRights.html:128
-#: html/Admin/CustomFields/UserRights.html:98
-#: html/Admin/Elements/SelectRights:106
-#: lib/RT/ACE_Overlay.pm:584
-#: lib/RT/Interface/Web.pm:960
-#: lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "システムエラー"
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
-#: lib/RT/Transaction_Overlay.pm:224
-#: lib/RT/Transaction_Overlay.pm:230
msgid "System Error: %1"
-msgstr ""
+msgstr "システムエラー: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "システムツール"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
-msgstr "システムエラー。権利ãŒå§”ä»»ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+msgstr "システムエラーã§ã™ã€‚権é™ãŒå§”ä»»ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: lib/RT/ACE_Overlay.pm:163
-#: lib/RT/ACE_Overlay.pm:228
-#: lib/RT/ACE_Overlay.pm:323
-#: lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
-msgstr "システムエラー。権利ãŒèªå¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+msgstr "システムエラーã§ã™ã€‚権é™ãŒæŽˆä¸Žã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: html/Admin/CustomFields/GroupRights.html:58
-#: html/Admin/Global/GroupRights.html:56
-#: html/Admin/Groups/GroupRights.html:58
-#: html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "システムグループ"
-#: etc/initialdata:41
-#: etc/initialdata:47
-#: etc/initialdata:53
-msgid "SystemRolegroup for internal use"
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
msgstr ""
-#: lib/RT/CurrentUser.pm:357
-msgid "TEST_STRING"
-msgstr "テスト_ストリング"
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr ""
-#: etc/initialdata:603
-#: html/Search/Elements/EditFormat:72
-#: html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "担当ã™ã‚‹"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
-msgstr ""
+msgstr "ãƒã‚±ãƒƒãƒˆã‚’担当ã™ã‚‹"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
-msgstr "担当済ã¿"
+msgstr "担当"
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
-#: html/Admin/Elements/EditScrip:71
-#: html/Tools/Offline.html:78
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "テンプレート"
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
-#: html/Admin/Global/Template.html:112
-#: html/Admin/Queues/Template.html:113
msgid "Template #%1"
+msgstr "テンプレート #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
msgstr ""
-#: html/Admin/Elements/EditTemplates:110
-msgid "Template deleted"
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "テンプレート「%1ã€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:180
-msgid "Template not found"
-msgstr "テンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-
-#: NOT FOUND IN SOURCE
-msgid "Template not found\\n"
-msgstr "テンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\\n"
-
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "テンプレートを解æžã—ã¾ã—ãŸ"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr ""
-#: html/Admin/Elements/QueueTabs:70
-#: html/Admin/Elements/SystemTabs:57
-#: html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "テンプレート"
-#: NOT FOUND IN SOURCE
-msgid "Templates for %1\\n"
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
msgstr ""
-"%1\\n"
-"ã®ãƒ†ãƒ³ãƒ—レート"
-#: lib/RT/CustomField_Overlay.pm:943
-#: lib/RT/Record.pm:945
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "ã“ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ãã®å€¤ã‚’ã†ã‘ã¤ã‘ã¾ã›ã‚“"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "åŒã˜å€¤ã§ã™"
-#: lib/RT/ACE_Overlay.pm:305
-#: lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr ""
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:753
msgid "That principal is already a %1 for this queue"
-msgstr "ãã®è²¬ä»»è€…ã¯ã™ã§ã«ã“ã®ã‚­ãƒ¥ãƒ¼ã®%1ã§ã™"
+msgstr ""
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1435
msgid "That principal is already a %1 for this ticket"
-msgstr "ãã®è²¬ä»»è€…ã¯ã™ã§ã«ã“ã®ãƒã‚±ãƒƒãƒˆã®%1ã§ã™"
+msgstr ""
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:852
msgid "That principal is not a %1 for this queue"
-msgstr "ãã®è²¬ä»»è€…ã¯ã“ã®ã‚­ãƒ¥ãƒ¼ã®%1ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®è²¬ä»»è€…ã¯%1ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
-msgstr "ãã®è²¬ä»»è€…ã¯ã“ã®ãƒã‚±ãƒƒãƒˆã®%1ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã®è²¬ä»»è€…ã¯%1ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
-msgstr "ãã®ã‚­ãƒ¥ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "ãã®ã‚­ãƒ¥ãƒ¼ã¯å­˜åœ¨ã—ã¾ã›ã‚“"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "未解決ã®ä¾å­˜é–¢ä¿‚ãŒå­˜åœ¨ã—ã¾ã™"
-#: NOT FOUND IN SOURCE
-msgid "That user already has that right"
-msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã™ã§ã«æ¨©åˆ©ãŒã‚ã‚Šã¾ã™"
-
-#: lib/RT/Action/CreateTickets.pm:710
-#: lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã™ã§ã«ãƒã‚±ãƒƒãƒˆã‚’所有ã—ã¦ã„ã¾ã™"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å­˜åœ¨ã—ã¾ã›ã‚“"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã™ã§ã«ç‰¹æ¨©ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã™"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ã™ã§ã«ç‰¹æ¨©ãŒã‚ã‚Šã¾ã›ã‚“"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä»Šç‰¹æ¨©ã‚’与ãˆã‚‰ã‚Œã¾ã—ãŸ"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä»Šç‰¹æ¨©ã‚’失ã„ã¾ã—ãŸ"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã“ã®ã‚­ãƒ¥ãƒ¼ã§ã¯ãƒã‚±ãƒƒãƒˆã‚’所有ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "ãã‚Œã¯æ•°å­—ã®IDã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: html/SelfService/Display.html:53
-#: html/Ticket/Create.html:177
-#: html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
-msgstr "基本"
+msgstr "基本項目"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "The comment has been recorded"
-msgstr "コメントã¯è¨˜éŒ²ã•ã‚Œã¾ã—ãŸ"
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
-#: bin/rt-crontool:275
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid ""
-"The following commands were not proccessed:\\n"
-"\\n"
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
msgstr ""
-"次ã®ã‚³ãƒžãƒ³ãƒ‰ã¯å‡¦ç†ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ:\\n"
-"\\n"
-#: lib/RT/Record.pm:948
-msgid "The new value has been set."
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "æš—å·éµã¯æœŸé™åˆ‡ã‚Œã§ã™"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr "æ–°ã—ã„値ãŒè¨­å®šã•ã‚Œã¾ã—ãŸã€‚"
+
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr ""
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr ""
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "テーマ"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "ãれらã®ã‚³ãƒ¡ãƒ³ãƒˆã¯å®Ÿéš›ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr ""
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr ""
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ä»¥ä¸‹ã®å®›å…ˆã«é€ä¿¡ã•ã‚Œã¾ã™:"
-#: NOT FOUND IN SOURCE
-msgid "This ticket %1 %2 (%3)\\n"
-msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆ%1 %2 (%3)\\n"
-
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "ã“ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒã‚ã‚Šã¾ã›ã‚“"
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
-#: html/Ticket/Elements/ShowRequestor:70
msgid "This user's %1 highest priority tickets"
-msgstr ""
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æœ€å„ªå…ˆãƒã‚±ãƒƒãƒˆ%1件"
-#: NOT FOUND IN SOURCE
-msgid "This user's 25 highest priority tickets"
-msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®25ã®ã‚‚ã£ã¨ã‚‚高ã„優先ãƒã‚±ãƒƒãƒˆ"
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "木"
-#: lib/RT/Date.pm:420
+#: NOT FOUND IN SOURCE
msgid "Thu."
-msgstr "木曜日"
+msgstr "木"
-#: NOT FOUND IN SOURCE
-msgid "Ticket # %1 %2"
-msgstr "ãƒã‚±ãƒƒãƒˆ# %1 %2"
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
-#: html/Ticket/ModifyAll.html:46
-#: html/Ticket/ModifyAll.html:50
msgid "Ticket #%1 Jumbo update: %2"
msgstr "ãƒã‚±ãƒƒãƒˆã€€#%1 更新(ç·åˆãƒ“ュー): %2"
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#: html/Approvals/Elements/ShowDependency:67
msgid "Ticket #%1: %2"
-msgstr ""
+msgstr "ãƒã‚±ãƒƒãƒˆ #%1 %2"
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
-#: lib/RT/Action/CreateTickets.pm:1350
-#: lib/RT/Action/CreateTickets.pm:1359
-#: lib/RT/Action/CreateTickets.pm:605
-#: lib/RT/Action/CreateTickets.pm:729
-#: lib/RT/Action/CreateTickets.pm:741
msgid "Ticket %1"
-msgstr ""
+msgstr "ãƒã‚±ãƒƒãƒˆ#%1"
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
-#: lib/RT/Ticket_Overlay.pm:755
-#: lib/RT/Ticket_Overlay.pm:775
msgid "Ticket %1 created in queue '%2'"
msgstr "ãƒã‚±ãƒƒãƒˆ %1ãŒã‚­ãƒ¥ãƒ¼ '%2'ã§ä½œæˆã•ã‚Œã¾ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Ticket %1 loaded\\n"
-msgstr "ãƒã‚±ãƒƒãƒˆ%1ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸ\\n"
-
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
-#: html/Search/Bulk.html:377
msgid "Ticket %1: %2"
msgstr "ãƒã‚±ãƒƒãƒˆã€€%1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr ""
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
-#: html/Ticket/History.html:46
-#: html/Ticket/History.html:49
msgid "Ticket History # %1 %2"
msgstr "ãƒã‚±ãƒƒãƒˆãƒ’ストリー # %1 %2"
-#: NOT FOUND IN SOURCE
-msgid "Ticket Id"
-msgstr "ãƒã‚±ãƒƒãƒˆID"
-
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:69
-#: html/Admin/Global/CustomFields/index.html:81
-#: lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "ãƒã‚±ãƒƒãƒˆæ¤œç´¢"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Ticket attachment"
-msgstr "ãƒã‚±ãƒƒãƒˆæ·»ä»˜"
-
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "ãƒã‚±ãƒƒãƒˆã‚³ãƒ³ãƒ†ãƒ³ãƒ„"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "ãƒã‚±ãƒƒãƒˆã‚³ãƒ³ãƒ†ãƒ³ãƒ„タイプ"
-#: lib/RT/Ticket_Overlay.pm:603
-#: lib/RT/Ticket_Overlay.pm:617
-#: lib/RT/Ticket_Overlay.pm:628
-#: lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Ticket created"
-msgstr "ãƒã‚±ãƒƒãƒˆãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket creation failed"
-msgstr "ãƒã‚±ãƒƒãƒˆã®ä½œæˆãŒå¤±æ•—ã—ã¾ã—ãŸ"
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Ticket deleted"
-msgstr "ãƒã‚±ãƒƒãƒˆãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "ãƒã‚±ãƒƒãƒˆè¡¨ç¤º"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "ãƒã‚±ãƒƒãƒˆæƒ…å ±"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Ticket watchers"
-msgstr "ãƒã‚±ãƒƒãƒˆã‚¦ã‚©ãƒƒãƒãƒ£ãƒ¼"
-
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
-#: lib/RT/Search/FromSQL.pm:82
msgid "TicketSQL search module"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:64
-#: html/Admin/Global/CustomFields/index.html:75
-#: html/Elements/Tabs:71
-#: html/Search/Elements/Chart:109
-#: lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "ãƒã‚±ãƒƒãƒˆ"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "ãƒã‚±ãƒƒãƒˆ %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Tickets from %1"
-msgstr "%1ã‹ã‚‰ã®ãƒã‚±ãƒƒãƒˆ"
-
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr ""
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr ""
-#: html/Search/Elements/PickBasics:134
-#: html/Ticket/Create.html:183
-#: html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "所è¦æ™‚間(予想)"
-#: html/Search/Elements/PickBasics:135
-#: html/Ticket/Create.html:196
-#: html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "残り時間"
-#: html/Search/Elements/PickBasics:133
-#: html/Ticket/Create.html:189
-#: html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "作業時間"
-#: lib/RT/Tickets_Overlay.pm:1891
-msgid "Time left"
-msgstr "残り時間"
-
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
-msgstr "表示ã™ã‚‹æ™‚é–“"
+msgstr "表示時間"
-#: lib/RT/Tickets_Overlay.pm:1866
-msgid "Time worked"
-msgstr "使ã£ãŸæ™‚é–“"
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "使ã£ãŸæ™‚é–“"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "タイムゾーン"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "タイトル"
-#: NOT FOUND IN SOURCE
-msgid "To generate a diff of this commit:"
-msgstr "ã“ã®ã‚³ãƒŸãƒƒãƒˆã®ãƒ‡ã‚£ãƒ•ã‚’ã¤ãã‚‹ãŸã‚ã«:"
-
-#: NOT FOUND IN SOURCE
-msgid "To generate a diff of this commit:\\n"
-msgstr "ã“ã®ã‚³ãƒŸãƒƒãƒˆã®ãƒ‡ã‚£ãƒ•ã‚’ã¤ãã‚‹ãŸã‚ã«:\\n"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
-#: html/Elements/Footer:62
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "サãƒãƒ¼ãƒˆã€ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã€ã‚«ã‚¹ã‚¿ãƒ é–‹ç™ºã¾ãŸã¯ãƒ©ã‚¤ã‚»ãƒ³ã‚¹å–å¾—ã«ã¤ã„ã¦ã¯ã€%1ã¾ã§ãŠå•ã„åˆã‚ã›ãã ã•ã„"
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr ""
-#: html/Admin/Elements/Tabs:68
-#: html/Admin/index.html:88
-#: html/Elements/Tabs:74
-#: html/Tools/index.html:46
-#: html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "表示ツール"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "åˆè¨ˆ"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr ""
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
-#: lib/RT/Transaction_Overlay.pm:805
msgid "Transaction %1 purged"
msgstr "トランザクション%1ãŒæ¶ˆåŽ»ã•ã‚Œã¾ã—ãŸ"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "トランザクションãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "トランザクションã¯å¤‰æ›´ã•ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "ç«"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue Dec 25 21:59:12 1995"
+msgstr "Tue Dec 25 21:59:12 1995"
+
#: NOT FOUND IN SOURCE
-msgid "Trying to delete a right: %1"
-msgstr "権利: %1を削除ã—ã¦ã„ã¾ã™"
+msgid "Tue, 25 Dec 1995 21:59:12 -0300"
+msgstr "Tue, 25 Dec 1995 21:59:12 -0300"
-#: lib/RT/Date.pm:418
+#: NOT FOUND IN SOURCE
msgid "Tue."
-msgstr "ç«æ›œæ—¥"
-
-#: html/Admin/CustomFields/Modify.html:66
-#: html/Admin/Elements/EditCustomField:65
-#: html/Ticket/Elements/AddWatchers:54
-#: html/Ticket/Elements/AddWatchers:65
-#: html/Ticket/Elements/AddWatchers:75
-#: lib/RT/Ticket_Overlay.pm:1168
-#: lib/RT/Tickets_Overlay.pm:1705
+msgstr "ç«"
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "タイプ"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
-msgstr "å°Žå…¥ã•ã‚Œã¦ã„ãªã„"
+msgstr ""
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unixログイン"
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "Unixユーザーãƒãƒ¼ãƒ "
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
-#: lib/RT/Attachment_Overlay.pm:289
-#: lib/RT/Record.pm:861
msgid "Unknown ContentEncoding %1"
-msgstr "ä¸æ˜Žãªã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°%1"
+msgstr "ä¸æ˜Žãªã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚° %1"
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
-#: html/Search/Build.html:455
-#: lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: $key"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
msgstr ""
-#: html/Elements/SelectResultsPerPage:58
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "無制é™"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
-msgstr "検索ã«ãƒžãƒƒãƒã—ã¾ã›ã‚“ã§ã—ãŸ"
+msgstr ""
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr ""
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
-msgstr "ã¨ã‚‰ã‚Œã¦ã„ãªã„"
+msgstr "担当者未定"
-#: html/Admin/Elements/EditScrip:128
-#: html/Elements/RT__Ticket/ColumnMap:302
-#: html/Search/Bulk.html:193
-#: html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "æ›´æ–°"
-#: NOT FOUND IN SOURCE
-msgid "Update ID"
-msgstr "IDã‚’æ›´æ–°"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "グラフã®æ›´æ–°"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "ãƒã‚±ãƒƒãƒˆã®æ›´æ–°"
-#: html/Search/Bulk.html:126
-#: html/Ticket/ModifyAll.html:87
-#: html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "タイプã®æ›´æ–°"
-#: NOT FOUND IN SOURCE
-msgid "Update all these tickets at once"
-msgstr "ã™ã¹ã¦ã®ãƒã‚±ãƒƒãƒˆã‚’一度ã«æ›´æ–°ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Update email"
-msgstr "Eメールを更新"
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "フォーマットを更新ã—ã¦æ¤œç´¢"
-#: html/Search/Bulk.html:200
-#: html/Search/Results.html:78
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "複数ã®ãƒã‚±ãƒƒãƒˆã‚’æ›´æ–°"
-#: NOT FOUND IN SOURCE
-msgid "Update name"
-msgstr "åå‰ã‚’æ›´æ–°"
-
-#: lib/RT/Action/CreateTickets.pm:750
-#: lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "更新内容ã¯è¨˜éŒ²ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
-#: NOT FOUND IN SOURCE
-msgid "Update selected tickets"
-msgstr "é¸æŠžã•ã‚ŒãŸãƒã‚±ãƒƒãƒˆã‚’æ›´æ–°ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Update signature"
-msgstr "ç½²åã‚’æ›´æ–°ã™ã‚‹"
-
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "ãƒã‚±ãƒƒãƒˆã‚’æ›´æ–°ã™ã‚‹"
-#: NOT FOUND IN SOURCE
-msgid "Update ticket # %1"
-msgstr "ãƒã‚±ãƒƒãƒˆ # %1 ã‚’æ›´æ–°"
-
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
-#: html/SelfService/Update.html:112
-#: html/SelfService/Update.html:47
msgid "Update ticket #%1"
msgstr "ãƒã‚±ãƒƒãƒˆ #%1 ã‚’æ›´æ–°"
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
-#: html/Ticket/Update.html:158
msgid "Update ticket #%1 (%2)"
-msgstr ""
+msgstr "ãƒã‚±ãƒƒãƒˆæ›´æ–° #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748
-#: lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr ""
-#: html/Elements/SelectDateType:54
-#: html/Ticket/Elements/ShowDates:72
-#: lib/RT/CustomField_Overlay.pm:1284
-#: lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "最終更新日時"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "アップロード"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr ""
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
+msgstr "変更を行ã†"
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
msgstr ""
-#: html/Admin/index.html:90
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "デフォルト設定を使ã†"
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "User %1 %2: %3\\n"
-msgstr "ユーザー%1 %2: %3\\n"
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "デフォルト設定(%1)"
-#: NOT FOUND IN SOURCE
-msgid "User %1 Password: %2\\n"
-msgstr "ユーザー%1パスワード: %2\\n"
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
-#: lib/RT/Ticket_Overlay.pm:506
msgid "User '%1' could not be found."
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "User '%1' not found"
-msgstr "ユーザー'%1'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-
-#: NOT FOUND IN SOURCE
-msgid "User '%1' not found\\n"
-msgstr "ユーザー'%1'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\\n"
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
-#: etc/initialdata:132
-#: etc/initialdata:206
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr ""
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "User ID"
-msgstr "ユーザーID"
-
-#: NOT FOUND IN SOURCE
-msgid "User Id"
-msgstr "ユーザーID"
-
-#: html/Admin/Elements/CustomFieldTabs:72
-#: html/Admin/Elements/GroupTabs:68
-#: html/Admin/Elements/QueueTabs:85
-#: html/Admin/Elements/SystemTabs:68
-#: html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
-msgstr "ユーザー権利"
+msgstr "ユーザー権é™"
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
-#: html/Admin/Users/Modify.html:301
msgid "User could not be created: %1"
msgstr "ユーザーを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "ユーザーãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
-#: html/Admin/CustomFields/GroupRights.html:74
-#: html/Admin/Global/GroupRights.html:88
-#: html/Admin/Groups/GroupRights.html:75
-#: html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
-msgstr "ユーザーãŒã‚°ãƒ«ãƒ¼ãƒ—を決定ã—ã¾ã—ãŸ"
+msgstr "ユーザー定義グループ"
-#: lib/RT/User_Overlay.pm:592
-#: lib/RT/User_Overlay.pm:612
-msgid "User loaded"
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "User notified"
-msgstr "ユーザーã«é€šå‘Šã•ã‚Œã¾ã—ãŸ"
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "User view"
-msgstr "ユーザービュー"
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
-#: html/Admin/Groups/index.html:103
-msgid "User-defined groups"
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
msgstr ""
-#: html/Admin/Users/Modify.html:69
-#: html/Elements/Login:90
-#: html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr "ユーザ定義グループ"
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
-msgstr "ユーザーå"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:55
-#: html/Admin/Elements/SelectNewGroupMembers:47
-#: html/Admin/Elements/Tabs:53
-#: html/Admin/Global/CustomFields/index.html:64
-#: html/Admin/Groups/Members.html:76
-#: html/Admin/Queues/People.html:89
-#: html/Admin/index.html:62
-#: html/User/Groups/Members.html:79
-#: lib/RT/CustomField_Overlay.pm:1208
+msgstr "åå‰"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "ユーザー"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
-msgstr "ユーザーãŒæ¤œç´¢åŸºæº–ã«ã‚ã£ã¦ã„ã¾ã™"
+msgstr ""
-#. ($transaction->id)
-#: bin/rt-crontool:134
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr ""
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "ValueOfQueue"
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:130
-#: html/Admin/Elements/EditCustomField:78
-msgid "Values"
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:107
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "WYSIWYG メッセージ作æˆ"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr ""
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "ウォッãƒãƒ£ãƒ¼"
-#: NOT FOUND IN SOURCE
-msgid "WebEncoding"
-msgstr "ウェブエンコーディング"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
-#: lib/RT/Date.pm:419
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "æ°´"
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
-msgstr "水曜日"
+msgstr "æ°´"
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "週間ダイジェスト"
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "RT ã¸ã‚ˆã†ã“ã!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
+msgstr "今日行ã£ãŸä½œæ¥­"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
msgstr ""
-#: etc/initialdata:521
-msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
msgstr ""
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
msgstr ""
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr ""
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr ""
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr ""
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr ""
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr ""
-#: etc/initialdata:178
-#: etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr ""
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr ""
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr ""
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr ""
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr ""
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr ""
-#: html/Admin/Users/Modify.html:188
-#: html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr "抹消"
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "仕事"
-#: html/Search/Results.html:82
-msgid "Work offline"
-msgstr "オフラインã§ä½œæ¥­ã™ã‚‹"
-
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
-msgstr "電話(仕事)"
+msgstr ""
-#: html/Ticket/Elements/ShowBasics:63
-#: html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "ç´¯ç©ä½œæ¥­æ™‚é–“"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "ã¯ã„"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "ã™ã§ã«ã“ã®ãƒã‚±ãƒƒãƒˆã‚’担当ã—ã¦ã„ã¾ã™"
-#: html/autohandler:214
-#: html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "èªè¨¼ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
-msgstr "自分ãŒæ‹…当ã—ã¦ã„ã‚‹ãƒã‚±ãƒƒãƒˆã‹ã€æ‹…当者ã®ã„ãªã„ãƒã‚±ãƒƒãƒˆã—ã‹å¤‰æ›´ã™ã‚‹äº‹ãŒã§ãã¾ã›ã‚“。"
+msgstr "変更ã§ãã‚‹ã®ã¯è‡ªåˆ†ãŒæ‹…当ã—ã¦ã„ã‚‹ãƒã‚±ãƒƒãƒˆã‹æ‹…当者ã®ã„ãªã„ãƒã‚±ãƒƒãƒˆã ã‘ã§ã™ã€‚"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
-msgstr ""
+msgstr "担当者ãªã—ã®ãƒã‚±ãƒƒãƒˆã‚’担当ã—ã¦ãã ã•ã„"
-#: NOT FOUND IN SOURCE
-msgid "You don't have permission to view that ticket.\\n"
-msgstr "ã‚ãªãŸã¯ãã®ãƒã‚±ãƒƒãƒˆã‚’見る許å¯ãŒã‚ã‚Šã¾ã›ã‚“。\\n"
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
-#: docs/design_docs/string-extraction-guide.txt:47
-#: lib/RT/StyleGuide.pod:780
msgid "You found %1 tickets in queue %2"
msgstr "キュー%2ã§%1件ã®ãƒã‚±ãƒƒãƒˆãŒãƒ’ットã—ã¾ã—ãŸ"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "RTã‹ã‚‰ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "指定ã®ã‚­ãƒ¥ãƒ¼ã§ãƒã‚±ãƒƒãƒˆä½œæˆã®è¨±å¯ãŒã‚ã‚Šã¾ã›ã‚“"
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "指定ã®ã‚­ãƒ¥ãƒ¼ã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ä½œæˆãŒã§ãã¾ã›ã‚“"
-#: html/NoAuth/Logout.html:56
-msgid "You're welcome to login again"
-msgstr "トップページ"
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Your %1 requests"
-msgstr "ã‚ãªãŸã®%1ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ"
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
-msgstr "ã‚ãªãŸã®RT管ç†è€…ã¯RTを呼ã³å‡ºã™ãƒ¡ãƒ¼ãƒ«aliasesを設定ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
msgstr ""
-#: etc/initialdata:540
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "ã¾ãŸã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’ãŠå¾…ã¡ã—ã¦ã„ã¾ã™"
+
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
-msgstr "ã‚ãªãŸã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æ‰¿èªã•ã‚Œã¾ã—ãŸ"
+msgstr "ã‚ãªãŸã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æ‰¿èªã•ã‚Œã¾ã—ãŸã€‚"
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
-msgstr "ã‚ãªãŸã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æ‹’å¦ã•ã‚Œã¾ã—ãŸ"
+msgstr "ã‚ãªãŸã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚"
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
-msgstr "ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードãŒé–“é•ã£ã¦ã„ã¾ã™"
+msgstr "ã‚ãªãŸã®åå‰ã¾ãŸã¯ãƒ‘スワードãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: html/Admin/Users/Modify.html:168
-#: html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "郵便番å·"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[ãªã—]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "ãŒä»¥ä¸‹ã‚ˆã‚Šå¾Œã§ã‚ã‚‹"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr ""
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr ""
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
-#: html/User/Elements/DelegateRights:80
msgid "as granted to %1"
-msgstr "%1ã¸ã®è¨±å¯"
+msgstr "%1ã«æ¨©é™å§”è­²"
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "棒"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "ãŒä»¥ä¸‹ã‚ˆã‚Šå‰ã§ã‚ã‚‹"
-#: html/Search/Results.html:83
-msgid "chart"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
msgstr ""
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr "ã™ã¹ã¦ã‚’ãƒã‚§ãƒƒã‚¯/ãƒã‚§ãƒƒã‚¯è§£é™¤ã™ã‚‹"
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
+msgstr "解決"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
msgstr ""
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:55
-msgid "contains"
-msgstr "ãŒä»¥ä¸‹ã‚’å«ã‚€"
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "correspondence (probably) not sent"
-msgstr "通知ã¯ï¼ˆãŠãらã)é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "correspondence sent"
-msgstr "通知ãŒé€ä¿¡ã•ã‚Œã¾ã—ãŸ"
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
-#: html/Admin/Queues/Modify.html:98
-#: lib/RT/Date.pm:346
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "æ—¥"
-#: NOT FOUND IN SOURCE
-msgid "delete"
-msgstr "削除"
-
#: lib/RT/Queue_Overlay.pm:87
msgid "deleted"
msgstr "削除"
-#: html/Search/Elements/PickBasics:61
-msgid "does not match"
-msgstr "ã‚ã„ã¾ã›ã‚“"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "å«ã¾ãªã„"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:56
-msgid "doesn't contain"
-msgstr "ãŒä»¥ä¸‹ã‚’å«ã¾ãªã„"
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "ダウンロード"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "ç­‰ã—ã„"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr ""
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr ""
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr ""
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr ""
-#: html/Search/Build.html:533
-#: html/Search/Build.html:552
-#: html/Search/Build.html:574
-#: html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr ""
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr ""
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "より大ãã„"
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
-#: lib/RT/Group_Overlay.pm:214
msgid "group '%1'"
msgstr "グループ'%1'"
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-#: html/Search/Results.html:88
-msgid "grouped by %1"
-msgstr ""
-
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "時間"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "ID"
-#: html/Elements/SelectBoolean:53
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:57
-#: html/Search/Elements/PickBasics:162
-#: html/Search/Elements/PickBasics:74
-#: html/Search/Elements/PickBasics:90
-#: html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
-msgstr "ãŒä»¥ä¸‹ã§ã‚ã‚‹"
+msgstr "一致ã™ã‚‹"
-#: html/Elements/SelectBoolean:57
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:58
-#: html/Search/Elements/PickBasics:163
-#: html/Search/Elements/PickBasics:75
-#: html/Search/Elements/PickBasics:91
-#: html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
-msgstr "ãŒä»¥ä¸‹ã§ã¯ãªã„"
+msgstr "一致ã—ãªã„"
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "よりå°ã•ã„"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
-msgstr "åˆã†"
+msgstr "å«ã‚€"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
-#: lib/RT/Date.pm:338
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "分"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "分"
-#: NOT FOUND IN SOURCE
-msgid ""
-"modifications\\n"
-"\\n"
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
msgstr ""
-"修正\\n"
-"\\n"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "月"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "æ–°è¦"
-#: html/Admin/Elements/PickCustomFields:64
-#: html/Admin/Elements/PickObjects:65
-msgid "no name"
-msgstr ""
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "ã„ã„ãˆ"
-#: html/Admin/Elements/EditScrips:64
-msgid "no value"
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
msgstr ""
-#: html/Admin/Elements/EditQueueWatchers:48
-#: html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "ãªã—"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "ç­‰ã—ããªã„"
-#: html/SelfService/Elements/MyRequests:82
-#: lib/RT/Queue_Overlay.pm:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "ãŒä»¥ä¸‹ã§ã‚ã‚‹"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "ç€æ‰‹"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
-#: lib/RT/Group_Overlay.pm:219
msgid "personal group '%1' for user '%2'"
-msgstr "ユーザー '%2' ã®ãƒ‘ーソナルグループ '%1' "
+msgstr "ユーザー '%2' ã®ãƒ‘ーソナルグループ '%1'"
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "円"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
-#: lib/RT/Group_Overlay.pm:227
msgid "queue %1 %2"
msgstr "キュー %1 %2"
@@ -6676,74 +7559,113 @@ msgstr "æ‹’å¦"
msgid "resolved"
msgstr "解決済ã¿"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "秒"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr ""
-#: html/Search/Results.html:80
-msgid "spreadsheet"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
msgstr ""
#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "ä¿ç•™"
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-#: html/Search/Results.html:89
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr ""
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
-#: lib/RT/Group_Overlay.pm:222
msgid "system %1"
msgstr "システム %1"
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
-#: lib/RT/Group_Overlay.pm:233
msgid "system group '%1'"
msgstr "システムグループ '%1'"
-#: html/Elements/Error:64
-#: html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "呼ã³å‡ºã—ã¦ã„るコンãƒãƒ¼ãƒãƒ³ãƒˆã¯ãªãœæ¬¡ã®ã‚ˆã†ãªã“ã¨ãŒèµ·ã“ã‚‹ã®ã‹ç‰¹å®šã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
-#: lib/RT/Group_Overlay.pm:230
msgid "ticket #%1 %2"
msgstr "ãƒã‚±ãƒƒãƒˆã€€#%1 %2"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
-#: lib/RT/Group_Overlay.pm:236
msgid "undescribed group %1"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "undescripbed group %1"
-msgstr "表示ã•ã‚Œãªã„グループ %1"
-
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
-#: lib/RT/Group_Overlay.pm:211
msgid "user %1"
-msgstr "ユーザー %1"
+msgstr "ユーザー %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
-#: lib/RT/Date.pm:350
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "週間"
-#: NOT FOUND IN SOURCE
-msgid "with template %1"
-msgstr "テンプレート %1ã¨"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "ヘッダーã¤ã"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "å¹´"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "ã¯ã„"
+
diff --git a/rt/lib/RT/I18N/nb.po b/rt/lib/RT/I18N/nb.po
new file mode 100755
index 0000000..9b2cc84
--- /dev/null
+++ b/rt/lib/RT/I18N/nb.po
@@ -0,0 +1,9073 @@
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-09-16 15:06+0000\n"
+"Last-Translator: Lars Ã…ge Kamfjord <lars-launchpad@kamfjord.org>\n"
+"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (ingen offentlig nøkkel!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (ikke sikker!)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: NOT FOUND IN SOURCE
+msgid "#%1"
+msgstr "#%1"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr "#%1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "$1"
+msgstr "$1"
+
+#: NOT FOUND IN SOURCE
+msgid "$prefix %1"
+msgstr "$prefix %1"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr "%1 #%2"
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr "%1 %2 %3 %4:%5 %6"
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1 %3. %2 %7 %4:%5:%6"
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr "%1 %2 lagt til"
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr "%1 %2 siden"
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr "%1 %2 ble endret til %3"
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr "%1 %2 slettet"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 slettet."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 %2 of group %3"
+msgstr "%1 %2 av gruppen %3"
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 endret navn til %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 lagret."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr "%1 %2 med mal %3"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (%2) %3 this ticket\\n"
+msgstr "%1 (%2) %3 denne saken\\n"
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr "%1 (%2) av %3"
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr "%1 (Uendret)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr "%1 (fra vindu %2)"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - %2 shown"
+msgstr "%1 - %2 vist"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr "%1 - Tilpass LogTilVindu konfigurasjons mulighet"
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr "%1 - Et parameter til %2"
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr "%1 - Viser statusoppdateringer til STDOUT"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify id of the template you want to use"
+msgstr "%1 - Spesifiser id på malen du ønsker å bruke"
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Spesifiser om du vil bruke enten 'første', 'siste' eller 'alle' transaksjoner"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr "%1 - Oppgi kommandomodulen du ønsker å bruke"
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Spesifiser den kommaseparerte listen med transaksjonstyper du vil bruke"
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr "%1 - Oppgi betingelsesmodulen du ønsker å bruke"
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr "%1 - Oppgi søkemodulen du ønsker å bruke"
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "%1 DashBoards"
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr "%1 KommandoScript lastet"
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr "%1 ble lagt til som verdi for %2"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on"
+msgstr "%1 alias trenger en ReferanseId å jobbe mot"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on "
+msgstr "%1 alias trenger en saksnummer å jobbe mot "
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on (from %2) %3"
+msgstr "%1 alias trenger et saksnummer å jobbe mot (fra %2) %3"
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 eksisterer allerede og har RT sine tabeller på plass, men inneholder ikke RT sine metadata. Steget \"Initialiser Database\" som kommer senere, kan sette inn metadata i denne eksisterendes databasen. Hvis det er OK, klikk på \"Endre detaljer\" under for å endre RT."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 eksisterer allerede og har RT sine tabeller på plass, men inneholder ikke RT sine metadata. Steget \"Initialiser Database\" som kommer senere, kan sette inn metadata i denne eksisterendes databasen. Hvis det er OK, klikk på \"Endre detaljer\" under for å endre RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr "%1 ser ut til å være et lokalt objekt, men kan ikke finnes i databasen"
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 ser ut til å være fullt ut initialisert. Vi trenger ikke å lage flere tabeller eller å sette inn nye metadata. Du kan fortsette med å tilpasse RT ved å klikke på \"Endre detaljer\" under"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr "%1 av %2"
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr "%1 ble endret fra %2 til %3"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%1 tabell %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr "%1 kopi"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr "%1 kjerne konfigurasjon"
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr "%1 kunne ikke settes til %2."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 couldn't init a transaction (%2)\\n"
+msgstr "%1 kunne ikke starte en transaksjon (%2)\\n"
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr "%1 kunne ikke sette status til løst. RT-basen kan være inkonsistent."
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr "%1 opprettet"
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr "%1 slettet"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "%1 deaktivert"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 eksisterer ikke."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "%1 aktivert"
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "%1 høyest prioriterte saker som jeg eier"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I own..."
+msgstr "Mine %1 høyst prioriterte saker..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I requested..."
+msgstr "Mine %1 høyst prioriterte forespørsler..."
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr "%1 er et verktøy for å behandle saker fra eksterne verktøy, slik som cron."
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 er et verktøy, ment for å blir kjørt via cron, som sender alle avviste RT påminnelser som en per-bruker bolk."
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr "%1 er ikke lenger en %2 for denne køen."
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 er ikke lenger en %2 for denne saken."
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 er ikke lenger en verdi for fleksifeltet %2"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 isn't a valid Queue id."
+msgstr "%1 er ikke et gyldig saksnummer."
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr "%1 min"
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr "%1 nyeste saker uten eier"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 not shown"
+msgstr "%1 vises ikke"
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr "%1 objekter"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 rights"
+msgstr "%1 rettigheter"
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr "%1 nettsted konfigurasjon"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 succeeded\\n"
+msgstr "%1 var velykket\\n"
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 oppdatering: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 oppdatering: Ingenting er endret"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 oppdatert"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 was created without a CurrentUser\\n"
+msgstr "%1 ble opprettet uten en aktiv bruker\\n"
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr "%1 vil løse alle medlemmer av en løst gruppesak."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
+msgstr "%1 vil stoppe en [lokal] BASE hvis den er avhengig av/medlem av en tilkoblet sak."
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr "%1's %2 objekter"
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr "%1's %2's %3 objekter"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1's dashboard"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr "%1's lagrede søk"
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr "%1: ingen vedlegg oppgitt"
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr "%1b"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr "%1k"
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr "%quant(%1,time)"
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr "'%1' er en ugyldig statusverdi"
+
+#: NOT FOUND IN SOURCE
+msgid "'%1' not a recognized action. "
+msgstr "'%1' er ikke en kjent handling "
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete group member)"
+msgstr "(Merk for å slette gruppemedlem)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete scrip)"
+msgstr "(Merk for å slette Scrip)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr "(Merk for å slette)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check boxes to delete)"
+msgstr "(Merk boksene for å slette)"
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr "(Kryss av i boksene for å slå av varsling til mottakerene i listen)"
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr "(Kryss av i boksene for å slå på varsling til mottakerene i listen)"
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr "(Skriv inn referansenummer eller URler, separert med mellomrom)"
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr "(Settes til standard %1 hvis blank)"
+
+#: NOT FOUND IN SOURCE
+msgid "(No Value)"
+msgstr "(Ingen Verdi)"
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr "(Ingen fleksifelt)"
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr "(Ingen medlemmer)"
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr "(Ingen scrips)"
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr "(Ingen maler)"
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr "(Ingen)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epostaddresser. Endrer <b>ikke</b> hvem som vil motta fremtidige oppdatreinger.)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
+msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epostaddresser. Endrer <b>ikke</b> hvem som vil motta fremtidige oppdateringer.)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste av administrative epostaddresser. Disse vil <b>vil</b> motta fremtidige oppdateringer.)"
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Sender en tro kopi av denne oppdateringen til en komma-separert liste av administrative epost adresser. Disse personene <strong>vill</strong> motta fremtidige oppdateringer.)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(Sender en kopi av denne oppdateringen til en komma-separert liste av epostaddresser. Endrer <b>ikke</b> hvem som vil motta fremtidige oppdateringer.)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
+msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epost-addresser. Endrer <b->ikke</b> hvem som vi motta fremtige utfordrer dere nå."
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(Sender en kopi av dette oppdateringen til en kommaseparert liste med epostaddresser. Disse <b>vill</b> motta fremtidige oppdateringer.)"
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Sender en tro kopi av denne oppdateringen til en komma-separert liste av epost adresser. Disse personene <strong>vill</strong> motta fremtidige oppdateringer.)"
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr "(Bruk disse feltene når du velger 'Brukerdefinert' for en status eller hendelse)"
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr "(E-post vil ikke bli sendt)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(hva som helst)"
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr "(tom)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no name listed)"
+msgstr "(navn ikke oppgitt)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "ingen offentlig nøkkel"
+
+#: NOT FOUND IN SOURCE
+msgid "(no subject)"
+msgstr "(ingen overskrift)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr "(ingen verdi)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr "(ingen verdier)"
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr "(bare en sak)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr "(Venter på godkjenning)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other tickets)"
+msgstr "(venter på andre saker)"
+
+#: NOT FOUND IN SOURCE
+msgid "(requestor's group)"
+msgstr "(kundens gruppe)"
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr "(nødvendig)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr "(ingen tittel)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr "−"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "argumentet til --transaction kan kun være 'first', 'last' eller 'all'"
+
+#: NOT FOUND IN SOURCE
+msgid "25 highest priority tickets I own..."
+msgstr "Mine 25 høyst prioriterte saker..."
+
+#: NOT FOUND IN SOURCE
+msgid "25 highest priority tickets I requested..."
+msgstr "Mine 25 høyst priorterte forespørsler..."
+
+#: NOT FOUND IN SOURCE
+msgid "<% $Ticket->Status%>"
+msgstr "<% $Ticket-:Status%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<% $_ %>"
+msgstr "<% $_ %>"
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Ny sak i\" />&nbsp;%1"
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"Ny sak i\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "??????"
+msgstr "??????"
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr "En tom mal"
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr "Et passord var ikke satt, så brukeren kan ikke logge inn"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Deleted"
+msgstr "ACE slettet"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Loaded"
+msgstr "ACE lastet"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be deleted"
+msgstr "ACE kunne ikke slettes"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be found"
+msgstr "fant ikke ACE"
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr "ACE ikke funnet"
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr "ACEr kan bare opprettes og slettes."
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr "OG"
+
+#: NOT FOUND IN SOURCE
+msgid "Aborting to avoid unintended ticket modifications.\\n"
+msgstr "Avbryter for å ungå uånsket saksendring"
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr "Om meg"
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr "Aksesskontroll"
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr "Handling"
+
+#: NOT FOUND IN SOURCE
+msgid "Action %1 not found"
+msgstr "Handling %1 finnes ikke"
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Handling '%1' ikke funnet"
+
+#: NOT FOUND IN SOURCE
+msgid "Action committed."
+msgstr "Handling skrevet."
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr "Handling forberedt"
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr "Legg til AdminCc"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Legg til bokmerke"
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr "Legg til Cc"
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr "Legg till kolonner"
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr "Legg til kriterier"
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr "Legg til flere filer"
+
+#: NOT FOUND IN SOURCE
+msgid "Add Next State"
+msgstr "Legg til neste status"
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr "Legg til kunde"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr "Legg til verdi"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip to this queue"
+msgstr "Legg til Scrip i denne køen"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip which will apply to all queues"
+msgstr "Legg til et Scrip som gjelder for alle køer"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a keyword selection to this queue"
+msgstr "Legg til et nøkkelordvalg på denne køen"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a new a global scrip"
+msgstr "Legg til et globalt Scrip"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a scrip to this queue"
+msgstr "Legg til et Scrip til denne køen"
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr "Legg til et Scrip som vil gjelde for alle køer"
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr "Legg til kommentarer eller svar til denne saken"
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr "Legg til medlemmer"
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr "Legg til overvåkere"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr "Legg til verdier"
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr "Legg til, slett og endre egendefinerte feltverdier for objekter"
+
+#: NOT FOUND IN SOURCE
+msgid "AddNextState"
+msgstr "AddNextState"
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr "La til primær som en %1 for denne køen"
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr "La til primær som en %1 for denne saken"
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Adresse"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr "Adresse1"
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr "Adresse2"
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr "Admin Cc"
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr "Admin Kommentar"
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr "Admin-korrespondanse"
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr "Adminkøer"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin users"
+msgstr "Adminbrukere"
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr "Admin/Global konfigurasjon"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Groups"
+msgstr "Admin/Grupper"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Queue/Basics"
+msgstr "Admin/Køer/Grunnleggende"
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr "AdminAllePersonalGrupper"
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr "AdminCc"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "AdminComment"
+msgstr "AdminKommentar"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCorrespondence"
+msgstr "AdminKorrespondanse"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCustomFields"
+msgstr "AdminFleksifelt"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr "AdminGruppe"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr "AdminGruppeMedlemskap"
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr "AdminEgnePersonligeGrupper"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr "AdminKø"
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr "AdminBrukere"
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr "Administrativ Cc"
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Administratorpassord"
+
+#: NOT FOUND IN SOURCE
+msgid "Admins"
+msgstr "Admin"
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr "Avansert"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search"
+msgstr "Avansert Søk"
+
+#: NOT FOUND IN SOURCE
+msgid "Age"
+msgstr "Alder"
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Alias"
+msgstr "Alias"
+
+#: NOT FOUND IN SOURCE
+msgid "Alias for"
+msgstr "Alias for"
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "All Custom Fields"
+msgstr "Alle Fleksifelt"
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr "Alle køer"
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Allerede kryptert"
+
+#: NOT FOUND IN SOURCE
+msgid "Always sends a message to the requestors independent of message sender"
+msgstr "Send alltid en melding til kunden uavhengig av meldingssender"
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr "Og/eller"
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr ""
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr "Bruk"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr "Aktiver dine endringer"
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr "Godkjennelse"
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr "Godkjennelse #%1: %2"
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr "Godkjenning # %1: Notater kunne ikke lagres pga. systemfeil"
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr "Godkjenning #%1: Notater lagret"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Details"
+msgstr "Godkjenning - Detaljer"
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr ""
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Godkjenning klar for eier"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Approval diagram"
+msgstr "Godkjenningsdiagram"
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr "Godkjenn"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver's notes: %1"
+msgstr "Godkjenners notater: %1"
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "april"
+
+#: NOT FOUND IN SOURCE
+msgid "Apr."
+msgstr "Apr."
+
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "April"
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr "Stigende"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr ""
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr "Legg Ved"
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr "Legg ved fil"
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr "Vedlagt fil"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Vedlegg"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr "Vedlegg '%1' kunne ikke lastes"
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr "Vedlegg opprettet"
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr "Vedleggsnavn"
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr "Vedlegg"
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Kryptering av vedlegg er slått av"
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr ""
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "aug."
+
+#: NOT FOUND IN SOURCE
+msgid "Aug."
+msgstr "Aug."
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "August"
+
+#: NOT FOUND IN SOURCE
+msgid "AuthSystem"
+msgstr "AutSystem"
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr "Autosvar"
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr "Autosvar Til Kunde"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoreplyToRequestors"
+msgstr "AutosvarTilKunde"
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr "Tilgjengelig"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Tilbake"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad PGP Signature: %1\\n"
+msgstr "Ugyldig PGP-signatur: %1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
+msgstr "Ugyldig vedleggsid. Kunne ikke finne vedlegg '%1'\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad data in %1"
+msgstr "Ugyldig data i %1"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bad transaction number for attachment. %1 should be %2\\n"
+msgstr "Ugyldig transaksjonsnummer for vedlegg. %1 skulle vært %2\\n"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "Detaljer"
+
+#: NOT FOUND IN SOURCE
+msgid "Bcc"
+msgstr "Bcc"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr "Sørg for å lagre endringene dine"
+
+#: NOT FOUND IN SOURCE
+msgid "Begin Approval"
+msgstr "Begynn Godkjenning"
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr "Best Practical Solutions, LLC bedriftslogo"
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr "Blank"
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "Halvfet"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Bokmerke"
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable URL for this search"
+msgstr "URL som kan brukes som bokmerke for dette søket"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr "Begrens headere"
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr "Masseoppdater"
+
+#: NOT FOUND IN SOURCE
+msgid "Bulk ticket update"
+msgstr "Masseoppdatering av saker"
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Kjøp support"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Som standard vil RT bruke tidssonen for ditt system. Dette lar deg sette en global standard for visning av datoer og tider i RT. Dine brukere kan velge å bruke en annen tidssone i innstillingene sine."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr "Kan ikke endre systembrukere"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr "Kan denne primæren se denne køen"
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr "Kan ikke legge til en verdi for et fleksifelt uten navn"
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr "Kan ikke finne et lagret søk å jobbe med"
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr "Kan ikke koble en sak til seg selv"
+
+#: NOT FOUND IN SOURCE
+msgid "Can't merge into a merged ticket. You should never get this error"
+msgstr "Kan ikke flette inn i en flettet sak. Denne meldingen bør ikke forekomme"
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr "Kan ikke lagre %1"
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr "Kan ikke lagre dette søket"
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr "Kan ikke spesifisere både base og mål."
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Kan ikke lage saker i en deaktivert kø"
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr "Kunne ikke oprette bruker: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr "Kategori"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr "Cc"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Endre"
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr "Endre passord"
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr "Merk alle"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr "Sjekk databaseautentisering"
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr "Merk for å slette"
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr "Merk for å trekke tilbake rettighet"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr "Barn"
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr "By"
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Tøm"
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr "Tøm alle"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "Lukk vindu"
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr "Lukket"
+
+#: NOT FOUND IN SOURCE
+msgid "Closed Tickets"
+msgstr "Lukkede Saker"
+
+#: NOT FOUND IN SOURCE
+msgid "Closed requests"
+msgstr "Lukkede forespørsler"
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr "Lukkede saker"
+
+#: NOT FOUND IN SOURCE
+msgid "Code"
+msgstr "Kode"
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Command not understood!\\n"
+msgstr "Kunne ikke tolke kommando!\\n"
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr "Kommenter"
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr "Kommentaraddresse"
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Comment not recorded"
+msgstr "Kommentaren ble ikke lagret"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr "Kommenter saker"
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr "KommenterSak"
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "Kommentarer"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr "Kommentarer (Ikke send til kunder)"
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr "Kommentarer (ikke sendt til kunder)"
+
+#: NOT FOUND IN SOURCE
+msgid "Comments about %1"
+msgstr "Kommentarer til %1"
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr "Kommentarer om denne brukeren"
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr "La til kommentarer"
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr "Lagring forkortet"
+
+#: NOT FOUND IN SOURCE
+msgid "Compile Restrictions"
+msgstr "Kompilatorrestriksjoner"
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr "Forutsetning"
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr "Forutsetning gjelder..."
+
+#: NOT FOUND IN SOURCE
+msgid "Condition not found"
+msgstr "Forutsetning ikke funnet"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr "Konfigurasjon"
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr "Bekreft"
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ContactInfoSystem"
+msgstr "KontaktInfoSystem"
+
+#: NOT FOUND IN SOURCE
+msgid "Contacted date '%1' could not be parsed"
+msgstr "Kontatdato '%1' kunne ikke tolkes"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr "Innhold"
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Coould not create group"
+msgstr "Kunne ikke opprette gruppen"
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr "Korrespondanse"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence Address"
+msgstr "Korrespondanseaddresse"
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr "Korrespondanse lagt til"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence not recorded"
+msgstr "Korrespondansen ble ikke lagret"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. "
+msgstr "Kunne ikke legge til nye fleksifeltverdier for saken. "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. %1 "
+msgstr "Kunne ikke legge til nye fleksifeltverdier for saken. %1 "
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Could not change owner. "
+msgstr "Kunne ikke endre eier. "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr "Kunne ikke opprette fleksifelt"
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr "Kunne ikke opprette gruppe"
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr "Kunne ikke opprette mal: %1"
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr "Kunne ikke opprette sak. Kø ikke satt"
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr "Kunne ikke opprette bruker"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create watcher for requestor"
+msgstr "Kunne ikke opprette overvåker for kunde"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find a ticket with id %1"
+msgstr "Kunne ikke finne en sak med id %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find group %1."
+msgstr "Kunne ikke finne gruppen %1."
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr "Kunne ikke finne eller lage den brukeren"
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr "Kunne ikke finne den primæren"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find user %1."
+msgstr "Kunne ikke finne brukeren %1."
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr "Kunne ikke hente gruppen"
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr "Kunne ikke sette den primæren som %1 for denne køen"
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr "Kunne ikke sette den primæren som %1 for denne saken"
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr "Kunne ikke fjerne den primæren som %1 for denne køen"
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr "Knne ikke fjære den primæren som %1 for denne saken"
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr "Kunne ikke legge til medlemmmer i gruppen"
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr "Kunne ikke opprette en transaksjon: %1"
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't figure out what to do from gpg's reply\\n"
+msgstr "Kunne ikke tolke gpgs svar\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find group\\n"
+msgstr "Kunne ikke finne gruppen\\n"
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr "Kunne ikke finne raden"
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr "Kunne ikke finne primæren"
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr "Kunne ikke finne verdien"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find that watcher"
+msgstr "Kunne ikke finne den overvåkern"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find user\\n"
+msgstr "Kunne ikke finne bruker\\n"
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr "Kunne ikke laste %1 fra brukerdatabasen.\\n"
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr ""
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load KeywordSelects."
+msgstr "Kunne ikke laste NøkkelordValg."
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load RT config file '%1' %2"
+msgstr "Kunne ikke laste RTs konfigurasjonsfil '%1' %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load Scrips."
+msgstr "Kunne ikke laste Scripsene."
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr "Kunne ikke laste gruppen %1"
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr "Kunne ikke laste linken"
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr "Kunne ikke laste køen"
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr "Kunne ikke laste køen %1"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load scrip"
+msgstr "Kunne ikke laste scripet"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load template"
+msgstr "Kunne ikke finne mal"
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load that user (%1)"
+msgstr "Kunne ikke laste den brukeren (%1)"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr "Kunne ikke laste saken '%1'"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr "Land"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr "Opprett"
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr "Opprett Saker"
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr "Oprett et fleksifelt"
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr "Opprett et fleksifelt for køen %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a CustomField that applies to all queues"
+msgstr "Opprett et fleksifelt for alle køer"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new Custom Field"
+msgstr "Opprett et nytt fleksifelt"
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global Scrip"
+msgstr "Opprett et globalt Scrip"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global scrip"
+msgstr "Opprett et nytt globalt scrip"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr "Opprett en ny gruppe"
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr "Opprett en ny personlig gruppe"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new queue"
+msgstr "Opprett en ny kø"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new scrip"
+msgstr "Opprett et nytt scrip"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new template"
+msgstr "Opprett en ny mal"
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr "Opprett en ny sak"
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr "Opprett en ny bruker"
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr "Opprett en ny kø"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a queue called"
+msgstr "Opprett en kø kalt"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a request"
+msgstr "Opprett en forespørsel"
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr "Opprett et scrip for køen %1"
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr "Opprett en mal"
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr "Opprett en sak"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1 / %2 / %3 "
+msgstr "Opprettelse feilet: %1 / %2 / %3 "
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1/%2/%3"
+msgstr "Opprettelse feilet: %1/%2/%3"
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr "Opprett nye saker basert på dette scripets mal"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr "Opprett sak"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr "Opprett saker i denne køen"
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr "Opprett, slett og modifiser fleksifelt"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr "Opprett, slett og endre køer"
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr "Opprett, slett og modifiser medlemmene av en brukers personlige grupper"
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr "Opprett, slett og modifiser medlemmene av personlige grupper"
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr "Opprett, slett og modifiser brukere"
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr "OpprettSak"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr "Opprettet"
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr "Opprettet Fleksifelt %1"
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Created template %1"
+msgstr "Opprettet malen %1"
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr ""
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr "Eksisterende Forhold"
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr "Eksisterende Scrips"
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr "Eksisterende medlemmer"
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr "Eksisterende rettigheter"
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Current search criteria"
+msgstr "Eksisterende søkekriterier"
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr "Eksisterende overvåkere"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom Field #%1"
+msgstr "Fleksifeltet #%1"
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr "Fleksifelt"
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr "Avsluttningskode"
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr "Forberedelseskode"
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr "Forutsetning"
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "Fleksifeltet %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr "Fleksifeltet %1 har en verdi."
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr "Fleksifeltet %1 har ingen verdi."
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr "Fleksifeltet %1 kunne ikke finnes"
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field deleted"
+msgstr "Fleksifeltet slettet"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field not found"
+msgstr "Fleksifeltet kunne ikke finnes"
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr "Verdien %1 for fleksifeltet %2 kunne ikke finnes"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field value changed from %1 to %2"
+msgstr "Fleksifeltets verdi endret fra %1 til %2"
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr "Fleksifeltets verdi kunne ikke slettes"
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr "Fleksifeltets verdi kunne ikke finnes"
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr "Fleksifeltverdi slettet"
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr "FleksiFelt"
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Data error"
+msgstr "Datafeil"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr "Datoer"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "des."
+
+#: NOT FOUND IN SOURCE
+msgid "Dec."
+msgstr "Des."
+
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "desember"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Default Autoresponse Template"
+msgstr "Standard Autosvarmal"
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr "Standard Autosvarmal"
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr ""
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr ""
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr "Standard Adminkommentarmal"
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr "Standard Adminkorrespondensemal"
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr "Standard korrespondensemal"
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr "Standard transaksjonsmal"
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr "Standard: %1/%2 endret seg fra %3 til %4"
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr "Deleger rettigheter"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr "Deleger spesifikke rettigheter som har blitt gitt til deg."
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr "DelegerRettigheter"
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr "Delegering"
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr "Slett"
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr "Slett saker"
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr "SlettSak"
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object could break referential integrity"
+msgstr "Sletting av dette objektet kan føre til inkonsistens"
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr "Sletting av dette objektet vil føre til inkonsistens"
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr "Sletting av dette objektet ville føre til inkonsistens"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity."
+msgstr "Sletting av dette objektet ville føre til inkonsisistens."
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity. That's bad."
+msgstr "Sletting av dette objektet ville føre til inkonsistens. Det er uheldig."
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr "Nekt"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr "Avhengighet fra"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Dependencies: \\n"
+msgstr "Avhengigheter: \\n"
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr "Avhengig av"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "AvhengigAv"
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr "Synkende"
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr "Beskriv problemet under"
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: NOT FOUND IN SOURCE
+msgid "Details"
+msgstr "Detaljer"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr "Vis"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr "Vis Rettigheter"
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr "Vis Scrip-maler for denne køen"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr "Vis Scrip-maler for denne køen"
+
+#: NOT FOUND IN SOURCE
+msgid "Display mode"
+msgstr "Visningsmodus"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Display ticket #%1"
+msgstr "Vis saken #%1"
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr "Gjør hva som helst"
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr "Ikke last denne siden på nytt"
+
+#: NOT FOUND IN SOURCE
+msgid "Don't show search results"
+msgstr "Ikke vis søkeresultat"
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr "Last ned"
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr "Innen"
+
+#: NOT FOUND IN SOURCE
+msgid "Due date '%1' could not be parsed"
+msgstr "Innendato '%1' kunne ikke tolkes"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
+msgstr "FEIL: Kunne ikke laste sak '%1': %2.\\n"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr "Rediger"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Conditions"
+msgstr "Rediger Forhold"
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr "Rediger fleksifelt for %1"
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr "Rediger Forhold"
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr ""
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr "Rediger Maler for køen %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit keywords"
+msgstr "Rediger nøkkelord"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Edit scrips"
+msgstr "Rediger scrips"
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr "Rediger systemmal"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit templates for %1"
+msgstr "Rediger maler for %1"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr "Rediger Konfigurasjon for køen %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing Configuration for user %1"
+msgstr "Redigerer Konfigurasjonen av brukern %1"
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr "Redigerer Fleksifeltet %1"
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr "Redigerer medlemsskap for gruppen %1"
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr "Redigerer medlemsskap for den personlige gruppen %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing template %1"
+msgstr "Redigerer malen %1"
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr "Enten base eller mål må oppgis"
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr "Epost"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr "Epostaddresse i bruk"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "EpostAddresse"
+
+#: NOT FOUND IN SOURCE
+msgid "EmailEncoding"
+msgstr "EpostFormat"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr "Aktivt (Fjern merkingen for å deaktivere dette fleksifeltet)"
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr "Aktiv (Fjern merkingen for å deaktivere denne gruppen)"
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr "Aktiv (Fjern merkingen for å deaktivere denne køen)"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Custom Fields"
+msgstr "Aktive Fleksifelt"
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr "Aktive Køer"
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr "Aktiv status %1"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr "Skriv multiple verdier"
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr "Skriv en verdi"
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr ""
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr "Skriv saker og/eller URIer som det skal linkes til. Separer dem med mellomrom"
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr "Feil"
+
+#: NOT FOUND IN SOURCE
+msgid "Error adding watcher"
+msgstr "Feilet ved opprettelse av Overvåker"
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr "Feil i parameterne til Queue->AddWatcher"
+
+#: NOT FOUND IN SOURCE
+msgid "Error in parameters to Queue->DelWatcher"
+msgstr "Feil i parameterne til Queue->DelWatcher"
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr "Feil i parameterne til Ticket->AddWatcher"
+
+#: NOT FOUND IN SOURCE
+msgid "Error in parameters to Ticket->DelWatcher"
+msgstr "Feil i parameterne til Ticket->DelWatcher"
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr ""
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr ""
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr "Alle"
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr "Eksempel:"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalAuthId"
+msgstr "EksternAutId"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalContactInfoId"
+msgstr "EksternKontaktInfoId"
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr "Ekstra info"
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr "Kunne ikke finne pseudogruppen 'Privilgerte' brukere."
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr "Kunne ikke finne 'pseudogruppen 'Upriviligerte' brukere"
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr "Kunne ikke laste modulen %1. (%2)"
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr ""
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "feb."
+
+#: NOT FOUND IN SOURCE
+msgid "Feb."
+msgstr "Feb."
+
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "februar"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Fin"
+msgstr "End"
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr "Endelig Prioritet"
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr "EndeligPrioritet"
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Find group whose"
+msgstr "Finn grupper hvor"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Find new/open tickets"
+msgstr "Finn nye/Ã¥pne saker"
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr "Finn folk hvor"
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr "Finn saker"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Finish Approval"
+msgstr "Fullfør godkjennelse"
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr "Først"
+
+#: NOT FOUND IN SOURCE
+msgid "First page"
+msgstr "Første side"
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr "Foo Bar Baz"
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr "Foo!"
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr "Tving gjennom endring"
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr ""
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr "Fant %quant(%1) sak(er)"
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr "Fant Objektet"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformContactInfo"
+msgstr "FriforkKontaktInfo"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformMultiple"
+msgstr "FriformMultipel"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformSingle"
+msgstr "FriformSingel"
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Fri."
+msgstr "Fre."
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr "Fulle headere"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr ""
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Getting the current user from a pgp sig\\n"
+msgstr "Henter brukerinfo fra pgp signatur\\n"
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr "Gitt til %1"
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr "Global"
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Global Keyword Selections"
+msgstr "Globale Nøkkelordvalg"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Scrips"
+msgstr "Globale Scrip"
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr ""
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr ""
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr "Globale maler: %1"
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "Start!"
+
+#: NOT FOUND IN SOURCE
+msgid "Good pgp sig from %1\\n"
+msgstr "Gyldig pgp sig fra %1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Goto page"
+msgstr "GÃ¥ til siden"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr "GÃ¥ til saken"
+
+#: NOT FOUND IN SOURCE
+msgid "Grand"
+msgstr "Stor"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "Gruppe"
+
+#: NOT FOUND IN SOURCE
+msgid "Group %1 %2: %3"
+msgstr "Gruppen %1 %2: %3"
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr "Grupperettigheter"
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Alt medlem av gruppen: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Group could not be created."
+msgstr "Gruppen kunne ikke lastes."
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr "Gruppen kunne ikke opprettes: %1"
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr "Gruppen opprettet"
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr "Gruppen har ikke det medlemmet"
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr "Fant ikke gruppen"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not found.\\n"
+msgstr "Fant ikke gruppen.\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not specified.\\n"
+msgstr "Ikke spesifisert gruppe.\\n"
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr "Grupper"
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr "Grupper kan ikke være medlemmer av sine medlemmer"
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr "Hallo!"
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr "Hallo, %1"
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr "Historikk"
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "HjemmeTelefon"
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr "Hjemmeside"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr ""
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr "Jeg har %quant(%1, sementblandere)."
+
+#: NOT FOUND IN SOURCE
+msgid "I have [quant,_1,concrete mixer]."
+msgstr "Jeg har [quant,_1,sementblandere]."
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr "Id"
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr "Identitet"
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr "Hvis en godkjenner blir avvist, avvis orginalen, og slett ventende godkjenninger"
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr ""
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr ""
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr "Hvis dette verktøyet var setgid kunne en fiendtlig lokal bruker bruke dette verktøyet for å oppnå administrativ tilgang til RT."
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr "Hvis du har oppdatert noe over, sørg for at"
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr "Ugyldig verdig for %1"
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr "LÃ¥st felt"
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "Inkluder deaktiverte fleksifelt i listen."
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr "Inkluder deaktiverte køer i listen."
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr "Inkluder deaktiverte brukere i søket."
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr ""
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr "Startprioritet"
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr "StartPrioritet"
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr "Feil i inntasting"
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Interest noted"
+msgstr "Interesse registrert"
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr "Intern Feil"
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr "Intern Feil: %1"
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr "Ugyldig gruppetype"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Right"
+msgstr "Ugyldige rettigheter"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Type"
+msgstr "Ugyldig Type"
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr "Ugyldig data"
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid owner. Defaulting to 'nobody'."
+msgstr "Ugydlig eier. Setter til 'nobody'."
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr "Ugyldig kø"
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr "Ugyldige rettigheter"
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr "Ugyldig verdi for %1"
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr "Ugyldig verdi for fleksifeltet."
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr "Ugyldig verdi for status"
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr "Det er ekstremt viktig at ikkepriviligerte brukere ikke har tilgang til dette verktøyet."
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr "Det er anbefalt at du oppretter en upriviligert unixbruker med korrekt gruppemedlemsskap og tilgang til RT for  kjøre dette verktøyet."
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr "Det tar flere parametere:"
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Items pending my approval"
+msgstr "Ting som venter på min godkjenning"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "jan."
+
+#: NOT FOUND IN SOURCE
+msgid "Jan."
+msgstr "Jan."
+
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "januar"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr "Bli med i eller forlat denne gruppen"
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "juli"
+
+#: NOT FOUND IN SOURCE
+msgid "Jul."
+msgstr "Jul."
+
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "juli"
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr "Total"
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "juni"
+
+#: NOT FOUND IN SOURCE
+msgid "Jun."
+msgstr "Jun."
+
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "juni"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Keyword"
+msgstr "Nøkkelord"
+
+#: NOT FOUND IN SOURCE
+msgid "Lang"
+msgstr "Språk"
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr "Siste"
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr "Siste Kontakt"
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr "Sist kontaktet"
+
+#: NOT FOUND IN SOURCE
+msgid "Last Notified"
+msgstr "Sist Informert"
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr "Sist Oppdatert"
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "SistOppdatert"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr "Igjen"
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr "La denne brukeren få tilgang til RT"
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr "La denne brukeren få rettigheter"
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting owner to %1 %2"
+msgstr "Begrenser eier til %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting queue to %1 %2"
+msgstr "Begrenser køen til %1 %2"
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr ""
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr "Lenke finnes alt"
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr "Lenke kunne ikke opprettes"
+
+#: NOT FOUND IN SOURCE
+msgid "Link created (%1)"
+msgstr "Lenke opprettet (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Link deleted (%1)"
+msgstr "Lenke slettet (%1)"
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr "Lenke ble ikke funnet"
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr "Knytt sak #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Link ticket %1"
+msgstr "Knytt sak %1"
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr ""
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr "Lenker"
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "Lokasjon"
+
+#: NOT FOUND IN SOURCE
+msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
+msgstr "Logkatalogen %1 ble ikke funnet eller kunne ikke skrives til.\\nRT kan ikke kjøre."
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr "Logget inn som %1"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr "Innlogging"
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr "Logg av"
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr ""
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr "Sett Eier"
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr "Sett Status"
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr "Sett tidsfrist"
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr "Sett løsningsdato"
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr "Sett startdato"
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr "Sett startdato"
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr "Sett informert dato"
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr "Sett prioritet"
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr "Sett Kø"
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr "Sett Emne"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr ""
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr ""
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr "Sett grupper og gruppemedlemsskap"
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr "Rediger egenskaper og konfigurasjon som gjelder for alle køer"
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr "Rediger køer og kø-spesifike egenskaper"
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr "Rediger brukere og passord"
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "mar."
+
+#: NOT FOUND IN SOURCE
+msgid "Mar."
+msgstr "Mar."
+
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "mars"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "mai"
+
+#: NOT FOUND IN SOURCE
+msgid "May."
+msgstr "Mai."
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Medlem lagt til: %1"
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr "Medlem slettet"
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr "Medlem ikke slettet"
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr "Medlem av"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "MedlemAv"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr "Medlemmer"
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr "Fletting vellykket"
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr "Fletting feilet. Kunne ikke sette EffektivId"
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr ""
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr "Flett inn i"
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr "Melding"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr ""
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr ""
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr ""
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr "Mangler en primærnøkkel?: %1"
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr "Mobil"
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "MobilTelefon"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr "Endre Tilgangslister"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Custom Field %1"
+msgstr "Endre Fleksifeltet %1"
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Custom Fields which apply to all queues"
+msgstr "Endre Fleksifelt som gjelder for alle køer"
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr ""
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr "Endre Scripmaler for denne køen"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr "Endre Scrips for denne køen"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify System ACLS"
+msgstr "Endre SystemACLer"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Template %1"
+msgstr "Endre Malen %1"
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr "Endre et fleksifelt for køen %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify a CustomField that applies to all queues"
+msgstr "Endre et fleksifelt som gjelder for alle køer"
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr "Endre et scrip for køen %1"
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr "Endre et scrip som gjelder for alle køer"
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Modify dates for # %1"
+msgstr "Endre datoer for # %1"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr "Endre datoer for #%1"
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr "Endre datoer for sak # %1"
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr "Endre globale grupperettigheter"
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr "Endre globale grupperettigheter"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for groups"
+msgstr "Endre globale rettigheter for grupper"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for users"
+msgstr "Endre globale rettigheter for brukere"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global scrips"
+msgstr "Endre globale scrips"
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr "Endre globale brukerrettigheter"
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr "Endre globale brukerrettigheter"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr "Endre gruppens metadata eller slette gruppen"
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr "Endre grupperettigheter for %1 gruppen"
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr "Endre grupperettigheter %1 køen"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr "Endre medlemsliste for denne gruppen"
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr "Endre sin egen RT konto"
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr "Endre hvem som er relatert til %1 køen"
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr "Endre hvem som er relater til sak #%1"
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr "Endre scrips for %1 køen"
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr "Endre scrips som gjelder alle køer"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr "Endre mal %1"
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr "Endre maler som gjelder for alle køer"
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr "Endre gruppen %1"
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr "Endre overvåkere for køen"
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr "Endre brukeren %1"
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr "Endre sak # %1"
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr "Endre sak #%1"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr "Endre saker"
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr "Endre brukerrettigheter for %1 gruppen"
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr "Endre brukerrettigheter for %1 køen"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify watchers for queue '%1'"
+msgstr "Endre overvåkere for '%1' køen"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr "EndreACL"
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr "EndreEgetMedlemskap"
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr "EndreKøOvervåkere"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr "EndreScrips"
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr "EndreSegSelv"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr "EndreMal"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr "EndreSak"
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Mon."
+msgstr "Man."
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr "Mer om %1"
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr "Flytt ned"
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr "Flytt opp"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr "Flere"
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr "MÃ¥ spesifisere attributten 'Navn'"
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr "Mine %1 saker"
+
+#: NOT FOUND IN SOURCE
+msgid "My Approvals"
+msgstr "Mine saker til godkjenning"
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr ""
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr "Mine saker til godkjenning"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr "Navn"
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr "Navnet er i bruk"
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Need approval from system administrator"
+msgstr "Trenger godkjennelse fra systemadministrator"
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr "Aldri"
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "Ny"
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr "Nye forhold"
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr "Nytt Passord"
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr "Ny, Venter på Godkjennelse"
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr "Nytt Søk"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr "Nytt fleksifelt"
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr "Ny gruppe"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr "Nytt passord"
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr "Melding om nytt passord sendt"
+
+#: NOT FOUND IN SOURCE
+msgid "New queue"
+msgstr "Ny kø"
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "New request"
+msgstr "Ny forespørsel"
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr "Nye rettigheter"
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr "Nytt scrip"
+
+#: NOT FOUND IN SOURCE
+msgid "New search"
+msgstr "Nytt søk"
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr "Ny mal"
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr "Ny sak"
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr "Ny sak eksistere ikke"
+
+#: NOT FOUND IN SOURCE
+msgid "New user"
+msgstr "Ny bruker"
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr "Ny bruker kalt"
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr "Ny overvåker"
+
+#: NOT FOUND IN SOURCE
+msgid "New window setting"
+msgstr "Instillinger for nytt vindu"
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr "Neste"
+
+#: NOT FOUND IN SOURCE
+msgid "Next page"
+msgstr "Neste side"
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "KalleNavn"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr "Kallenavn"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr "Ingen FleksiFelt"
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr "Ingen grupper definert"
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr "Ingen kø definert"
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr "Ingen RT bruker funnet. Vennligst referer til manualen.\\n"
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr "Ingen Mal"
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket "
+msgstr "Ingen sak oppgitt. Avbryter sak "
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
+msgstr "Ingen Sak oppgitt. Avbryter saksendring\\n\\n"
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr "Ingen handling"
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr "Ingen kolonne spesifisert"
+
+#: NOT FOUND IN SOURCE
+msgid "No command found\\n"
+msgstr "Ingen kommando funnet\\n"
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr "Ingen kommentar skrevet om denne brukeren"
+
+#: NOT FOUND IN SOURCE
+msgid "No correspondence attached"
+msgstr "Ingen korrespondanse vedlagt"
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr "Ingen beskrivelse for %1"
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr "Ingen gruppe spesifisert"
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr "Passordet er ikke satt"
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr "Ingen tilgang til å opprette køer"
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr "Ikke tilgang til å opprette saker for køen '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "No permission to create users"
+msgstr "Ikke tilgang til å opprette brukere"
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr "Ikke tilgang til å vise den saken"
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr "Ingen tilgang til å se oppdatering av saken"
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr "Ingen primær spesifisert"
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr "Ingen primære spesifisert"
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr "Det er ingen køer som matcher søkekriteriet"
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr "Ingen rettigheter funnet"
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr "Ingen rettigheter tildelt"
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr "Ingen søk å behandle"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "No ticket id specified"
+msgstr "Ingen saksid oppgitt"
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr "Transaksjonstype ikke spesifisert"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "No user or email address specified"
+msgstr "Ingen bruker eller epostaddresse oppgitt"
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr "Fant ingen brukere som treffer søkekriteriene."
+
+#: NOT FOUND IN SOURCE
+msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
+msgstr "Fant ingen gyldig RT bruker. RT cvs handler avstengt. Kontakt din RT administrator.\\n"
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr "Ingen verdi sendt til _Set!\\n"
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr "Ingen"
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr "Ukjent felt?"
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Not logged in"
+msgstr "Ikke logget inn"
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr "Ikke logget inn."
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr "Ikke satt"
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr "Ikke implementert enda."
+
+#: NOT FOUND IN SOURCE
+msgid "Not yet implemented...."
+msgstr "Ikke implementert enda...."
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr "Notater"
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr "Melding kunne ikke sendes"
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr "Raporter til AdminCc"
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr "Rapporter til AdminCc som kommentar"
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr ""
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr ""
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr "Rapporter til andre mottakere"
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr "Rapporter til andre mottakere som kommentar"
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr "Rapporter til eier"
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr "Rapportert til eier som kommentar"
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr ""
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr "Rapporter til Eiere og AdminCc om nye ting som venter på godkjenning"
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr "Rapporter til kunde"
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr "Rapporter til Kunder og Cc"
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr "Rapporter til Kunder og Cc som kommentar"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs"
+msgstr "Rapporter til Kunder Cc og AdminCc"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+msgstr "Rapporter til Kunder Cc og AdminCc som Kommentar"
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Nov."
+msgstr "Nov."
+
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "November"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr ""
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr "Objekter kunne ikke opprettes"
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr ""
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr "Objektet ble opprettet"
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Oct."
+msgstr "Okt."
+
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "Oktober"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr ""
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr ""
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr ""
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr "Ved Kommentar"
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr "Ved Korrespondanse"
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr "Ved Opprettelse"
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr "Ved Eierskifte"
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr ""
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr "Ved Køendring"
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr "Ved Løsning"
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr "Ved statusendring"
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr "Ved Transaksjon"
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr "Vis kun godkjennelse for saker opprettet etter %1"
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr "Bare vis godkjennelse for saker opprettet før %1"
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Open"
+msgstr "Ã…pne"
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr ""
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr "Ã…pne den"
+
+#: NOT FOUND IN SOURCE
+msgid "Open requests"
+msgstr "Åpne forespørsler"
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr "Ã…pne saker"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in a new window"
+msgstr "Ã…pne saker (fra utlisting) i et nytt vindu"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in another window"
+msgstr "Ã…pne saker (fra utlisting) it et annet vinud"
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr "Ã…pne saker ved korrespondanse"
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr ""
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ordering and sorting"
+msgstr "Rekkefølge og sortering"
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr "Organisasjon"
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr "Opprinnelig sak: #%1"
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr "Over tid beveger prioriteten seg mot"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr "Eie saker"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr "EieSak"
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr "Eier"
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "Eier endret fra %1 til %2"
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr "Eier ble tvunget til å endres fra %1 til %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Owner is"
+msgstr "Eier er"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr "Personsøker"
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "PersonSøker"
+
+#: NOT FOUND IN SOURCE
+msgid "Parent"
+msgstr "Forelder"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr "Foreldre"
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr "Passord"
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr "Passordhint"
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Password too short"
+msgstr "For kort passord"
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr "Passord: %1"
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr ""
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr "Passordene stemmer ikke overens."
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr "Passordene stemmer ikke overrens. Passordet ble ikke endret"
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr "Personer"
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr "Kjør en brukerdefinert handling"
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr "Ingen Tilgang"
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr ""
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr "Personlige Grupper"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups"
+msgstr "Personlige grupper"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups:"
+msgstr "Personlige grupper:"
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr "Telefonnummer"
+
+#: NOT FOUND IN SOURCE
+msgid "Placeholder"
+msgstr "Stedholder"
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Pref"
+msgstr "Pref"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr "Instillinger"
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Prefs"
+msgstr "Pref"
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr "Klargjør Forkortet"
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr "Forrige"
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Previous page"
+msgstr "Forrige side"
+
+#: NOT FOUND IN SOURCE
+msgid "Pri"
+msgstr "Pri"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr "Primær %1 ikke funnet."
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr "Prioritet"
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr "Prioritet starter på"
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr "Priviligert"
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr "Priviligert status: %1"
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr "Priviligerte brukere"
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr "Pseduogruppe for intern bruk"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr "Kø"
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr "Køen %1 kunne ikke finnes"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue '%1' not found\\n"
+msgstr "Køen '%1' ikke funnet\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Keyword Selections"
+msgstr "Nøkkelordvalg for kø"
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr "Kønavn"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Scrips"
+msgstr "Køscrip"
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr "Køen eksisterer allerede"
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr "Køen kunne ikke opprettes"
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr "Køen kunne ikke lastes."
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr "Køen opprettet"
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Queue is not specified."
+msgstr "Køen er ikke oppgitt."
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr "Køen ikke funnet"
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr "Køer"
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr ""
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr ""
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr "Raskt søk"
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr ""
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1"
+msgstr "RT %1"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr "RT %1 for %2"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
+msgstr "RT %1 fra <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr "RT-administrasjon"
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT Authentication error."
+msgstr "RT Autentiseringsfeil."
+
+#: NOT FOUND IN SOURCE
+msgid "RT Bounce: %1"
+msgstr "RT Avvisning: %1"
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT Configuration error"
+msgstr "RT Konfigurasjonsfeil"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Critical error. Message not recorded!"
+msgstr "Kritisk RT feil. Meldingen ble ikke lagret!"
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr "RT Feil"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Received mail (%1) from itself."
+msgstr "RT Mottok mail (%1) fra seg selv."
+
+#: NOT FOUND IN SOURCE
+msgid "RT Recieved mail (%1) from itself."
+msgstr "RT Mottok mail (%1) fra seg selv."
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT Self Service / Closed Tickets"
+msgstr "RT Selvbetjening / Lukkede Saker"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr ""
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr "RT oversikt"
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't authenticate you"
+msgstr "RT kunne ikke autentisere deg"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find requestor via its external database lookup"
+msgstr "RT kunne ikke finne kunde via sitt eksterne databaseoppslag"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find the queue: %1"
+msgstr "RT kunne ikke finne køen: %1"
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't validate this PGP signature. \\n"
+msgstr "RT kunne ikke validere denne PGP signaturen. \\n"
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr "RT for %1"
+
+#: NOT FOUND IN SOURCE
+msgid "RT for %1: %2"
+msgstr "RT for %1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "RT has proccessed your commands"
+msgstr "RT har behandlet dine kommandoer"
+
+#: NOT FOUND IN SOURCE
+msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+msgstr "RT er &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. Den er distribuert under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+
+#: NOT FOUND IN SOURCE
+msgid "RT is &copy; Copyright 1996-2002 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+msgstr "RT er &copy; Copyright 1996-2002 Jesse Vincent &lt;jesse@bestpractical.com&gt;. Den er distribuert under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT thinks this message may be a bounce"
+msgstr "RT tror denne meldingen kan være en returmail"
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT will process this message as if it were unsigned.\\n"
+msgstr "RT vil behandle denne meldingen som om den var usignert"
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr ""
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
+msgstr "RT's epost kommandomodus krever PGP autentisering. Meldingen din var enten ikke signert, eller signaturen din kunne ikke bekreftes."
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr "Ekte Navn"
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "EkteNavn"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr ""
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr "Referert til av"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr "Refererer til"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr "RefererTil"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine"
+msgstr "Redefiner"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine search"
+msgstr "Redefiner søket"
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr "Last siden på nytt hvert %1 minutt."
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr ""
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr "Fjern AdminCc"
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Fjern bokmerke"
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr "Fjern Cc"
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr "Fjern Kunde"
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr "Svar"
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr ""
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr "Svar på sak"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr "SvarPÃ¥Sak"
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr "Kunde"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor email address"
+msgstr "Kundens epostaddresse"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor(s)"
+msgstr "Kunde(r)"
+
+#: NOT FOUND IN SOURCE
+msgid "RequestorAddresses"
+msgstr "KundeAddresser"
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr "Kunder"
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr "Forespørsler skal være behandlet innen"
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr ""
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr "Reset"
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr "Hjemme"
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr "Løs"
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr "Løs saknr #%1 (%2)"
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr "Løst"
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Response to requestors"
+msgstr "Svar til kunder"
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr "Resultater"
+
+#: NOT FOUND IN SOURCE
+msgid "Results per page"
+msgstr "Resultater per side"
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr "Skriv Passord igjen"
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
+msgstr "Rettighet %1 kunne ikke finnes for %2 %3 in scope %4 (%5)\\n"
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr "Rettighet Deligert"
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr "Rettighet Tildelt"
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr "Rettighet lastet"
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr "Rettigheten kunne ikke trekkes tilbake"
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr "Rettighet ikke funnet"
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr "Rettighet ikke lastet."
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr "Rettighet fjernet"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights"
+msgstr "Rettigheter"
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr "Rettigheter kunne ikke tildeles for %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights could not be revoked for %1"
+msgstr "Rettigheter kunne ikke trekkes tilbake for %1"
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr "Roller"
+
+#: NOT FOUND IN SOURCE
+msgid "RootApproval"
+msgstr "RootGodkjenning"
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr ""
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sat."
+msgstr "Lør."
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr "Lagre Endringer"
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Save changes"
+msgstr "Lage endringer"
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr "Scrip #%1"
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr "Scrip Opprettet"
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr "Scrip slettet"
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr "Scrip"
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Scrips for %1\\n"
+msgstr "Scrip for %1\\n"
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr "Scrip som gjelder for alle køer"
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr "Søk"
+
+#: NOT FOUND IN SOURCE
+msgid "Search Criteria"
+msgstr "Søkekriteria"
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr "Søk etter godkjenninger"
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr ""
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr ""
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr ""
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr ""
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr "Sikkerhet:"
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr "SeKø"
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr "Velg en gruppe"
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr "Velg en kø"
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr "Velg en bruker"
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Select custom field"
+msgstr "Velg fleksifelt"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr "Velg gruppe"
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr "Velg flere verdier"
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr "Velg en verdi"
+
+#: NOT FOUND IN SOURCE
+msgid "Select queue"
+msgstr "Velg kø"
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr "Velg scrip"
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr "Velg mal"
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Select user"
+msgstr "Velg bruker"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectMultiple"
+msgstr "VelgFlere"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectSingle"
+msgstr "VelgEnkelt"
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Self Service"
+msgstr "Selvbetjening"
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "Send epost til alle overvåkere"
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers as a \"comment\""
+msgstr "Send epost til alle overvåkere som \"kommentar\""
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr "Send epost til kunder og Cc"
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr "Send epost til kunder og Cc som kommentar"
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr "Sender en melding til kundene"
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr "Send epost til eksplisit oppgitte Ccer og Bccer"
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr ""
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr "Send epost til Administrative Ccer"
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr "Sender epost til de administrative Ccene som kommentar"
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr "Sender epost til eieren"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sep."
+msgstr "Sep."
+
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "September"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr "Vis Resultater"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr "Vis godkjente forespørsler"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr "Vis basisinfo"
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr "Vis avviste forespørsler"
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr "Vis detaljer"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr "Vis ventende forespørsler"
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr "Vis forespørsler som venter på andre godkjenninger"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket private commentary"
+msgstr "Vis sakens private kommentarer"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket summaries"
+msgstr "Vis sakssammendrag"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr "VisACL"
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr "VisScrip"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr "VisMal"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr "VisSak"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr "VisSaksKommentarer"
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr "Meld deg på som saksforespørrer eller sak/kø Cc"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr "Meld deg på som sak/kø AdminCc"
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr "Signatur"
+
+#: NOT FOUND IN SOURCE
+msgid "Signed in as %1"
+msgstr "Logget inn som %1"
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr "Enkel"
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr "Dropp Meny"
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr "Sorter"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort key"
+msgstr "Sorter nøkkel"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort results by"
+msgstr "Sorter resultater etter"
+
+#: NOT FOUND IN SOURCE
+msgid "SortOrder"
+msgstr "SorteringsRekkefølge"
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Stalled"
+msgstr "Pauset"
+
+#: NOT FOUND IN SOURCE
+msgid "Start page"
+msgstr "Startside"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr "Startet"
+
+#: NOT FOUND IN SOURCE
+msgid "Started date '%1' could not be parsed"
+msgstr "Startdato '%1' kunne ikke tolkes"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr "Starter"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts By"
+msgstr "Starter Etter"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts date '%1' could not be parsed"
+msgstr "Startdato '%1' kunne ikke tolkes"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr "Stat"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr "Status"
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr "Statusendring"
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr "Status endret fra %1 til %2"
+
+#: NOT FOUND IN SOURCE
+msgid "StatusChange"
+msgstr "EndreStatus"
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr "Stjel"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr "Stjålet fra %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Stolen from %1 "
+msgstr "Stjålet fra %1 "
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr "Emne"
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr "Endre emne til %1"
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr "Oppdater"
+
+#: NOT FOUND IN SOURCE
+msgid "Submit Workflow"
+msgstr "Send Arbeidsflyt"
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Succeeded"
+msgstr "Lykkes"
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sun."
+msgstr "Søn."
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr "SuperBruker"
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "System"
+msgstr "System"
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr ""
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr "Systemfeil"
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. Right not granted."
+msgstr "Systemfeil. Rettighet ikke tildelt."
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. right not granted"
+msgstr "Systemfeil. rettigheter ikke tildelt"
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr ""
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr "Systemfeil. Rettighet ikke tildelt."
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr "Systemfeil. Rettighet ikke tildelt."
+
+#: NOT FOUND IN SOURCE
+msgid "System error. Unable to grant rights."
+msgstr "Systemfeil. Kunne ikke tildele rettigheter."
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr "Systemgrupper"
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr "SystemRollegruppe for intern bruk"
+
+#: NOT FOUND IN SOURCE
+msgid "TEST_STRING"
+msgstr "TEST_STRENG"
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr "Ta"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr "Tatt"
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr "Mal"
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr "Mal #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Template deleted"
+msgstr "Mal slettet"
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found"
+msgstr "Kunne ikke finne mal"
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found\\n"
+msgstr "Kunne ikke finne mal\\n"
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr "Mal tolket"
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr "Maler"
+
+#: NOT FOUND IN SOURCE
+msgid "Templates for %1\\n"
+msgstr "Maler for %1\\n"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr "Verdien er allerede satt"
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr "Det er ikke en verdi for dette fleksifeltet"
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr "Det er den samme verdien"
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr "Den primæren har allerede den rettigheten"
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr "Den primæren er allerede en %1 for denne køen"
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr "Den primæren er allerede en %1 for denne køen"
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr "Den primæren er ikke en %1 for denne køen"
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr "Den primæren er ikke en %1 for denne saken"
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr "Den køen eksisterer ikke"
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr "Denne saken har uløste avhengigheter"
+
+#: NOT FOUND IN SOURCE
+msgid "That user already has that right"
+msgstr "Den brukeren har allerede den rettigheten"
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr "Den brukeren eier allerede den saken"
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr "Den brukeren finnes ikke"
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr "Den brukeren er allerede priviligert"
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr "Den brukeren er allerede upriviligert"
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr "Denne brukeren er nå priviligert"
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr "Dette brukeren er nå upriviligert"
+
+#: NOT FOUND IN SOURCE
+msgid "That user is now unprivilegedileged"
+msgstr "Den brukeren er allerede upriviligert"
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr "Den brukeren kan ikke eie saker i den køen"
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr "Dette er ikke en numerisk id"
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr "Detaljer"
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr "CCen til en sak"
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr "Administrative CCer for en sak"
+
+#: NOT FOUND IN SOURCE
+msgid "The comment has been recorded"
+msgstr "Kommentarer er lagret"
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr "De følgende kommandoene vil finne alle aktive saker i køen 'general' og sette deres prioritet til 99 hvis de ikke har blitt rørt de siste 4 timene:"
+
+#: NOT FOUND IN SOURCE
+msgid "The following commands were not proccessed:\\n\\n"
+msgstr "De følgende kommandoene ble ikke behandlet:\\n\\n"
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr "Den nye verdien har blitt satt."
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr "Eieren av en sak"
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr "Forespørren av en sak"
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr "Disse kommentarene er generelt ikke synlig for brukeren"
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "This ticket %1 %2 (%3)\\n"
+msgstr "Denne saken %1 %2 (%3)\\n"
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr "Dette verktøyet tillater brukeren å kjøre perlmoduler fra inni RT."
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr "Denne transaksjonen ser ikke ut til å ha noe innhold"
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr "Denne brukerens %1 høyst prioriterte saker"
+
+#: NOT FOUND IN SOURCE
+msgid "This user's 25 highest priority tickets"
+msgstr "Denne brukerens 23 høys prioriterte saker"
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Thu."
+msgstr "Tor."
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Sak"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 %2"
+msgstr "Sak # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 Jumbo update: %2"
+msgstr "Sak $ %1 Jumbo oppdater: %2"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr "Sak #%1 Jumbo oppdatering: %2"
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr "Sak #%1: %2"
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr "Sak %1 opprettet i '%2' køen"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket %1 loaded\\n"
+msgstr "Sak %1 lastet\\n"
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr "Sak %1: %2"
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr ""
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr "Sakshistorikk # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Id"
+msgstr "SaksId"
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr "Løst Sak"
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket attachment"
+msgstr "Saks-vedlegg"
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr "Saks-innhold"
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr "Sakens innholdstype"
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr "Saken kunne ikke opprettes på grunn av en intern feil"
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket created"
+msgstr "Sak opprettet"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket creation failed"
+msgstr "Saksopprettelse feilet"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket deleted"
+msgstr "Sak slettet"
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket id not found"
+msgstr "Saksid ikke funnet"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket killed"
+msgstr "Sak drept"
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket not found"
+msgstr "Sak ikke funnet"
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr "Saksstatus endret"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket watchers"
+msgstr "Saksovervåkere"
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr "Saker"
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Saker %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr "Saker %1 av %2"
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets from %1"
+msgstr "Saker fra %1"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr "Saker som er avhengige av denne godkjennelsen:"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr "Tid Igjen"
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr "Arbeidstid"
+
+#: NOT FOUND IN SOURCE
+msgid "Time left"
+msgstr "Tid igjen"
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr "Tid å vise"
+
+#: NOT FOUND IN SOURCE
+msgid "Time worked"
+msgstr "Arbeidstid"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "TidIgjen"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr "ArbeidsTid"
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:"
+msgstr "For å generere en diff av denne bekreftelsen:"
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:\\n"
+msgstr "For å genere en diff av denne bekreftelsen"
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr "Fortalt"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr ""
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr "Transaksjon"
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr "Transaksjon %1 slettet"
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr "Transaksjon Opprettet"
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
+msgstr "Transaction->Create kunne ikke, siden du ikke spesifiserte en saksid"
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr "Transaksjoner er låst"
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Trying to delete a right: %1"
+msgstr "Prøver å slette en rettighet: %1"
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Tue."
+msgstr "Tir."
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr "Type"
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr "Uimplementert"
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr "Unix login"
+
+#: NOT FOUND IN SOURCE
+msgid "UnixUsername"
+msgstr "UnixBrukerNavn"
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr "Ukjent InnholdsFormatering %1"
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr "Ubegrenset"
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr ""
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr "Upriviligert"
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr "Ikke tatt"
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr "Oppdater"
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Update ID"
+msgstr "Oppdater ID"
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr ""
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr "Oppdater Type"
+
+#: NOT FOUND IN SOURCE
+msgid "Update all these tickets at once"
+msgstr "Oppdater alle disse sakene samtidig"
+
+#: NOT FOUND IN SOURCE
+msgid "Update email"
+msgstr "Oppdater epost"
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Update name"
+msgstr "Oppdater navn"
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr "Oppdatering ikke lagret."
+
+#: NOT FOUND IN SOURCE
+msgid "Update selected tickets"
+msgstr "Oppdater valgte saker"
+
+#: NOT FOUND IN SOURCE
+msgid "Update signature"
+msgstr "Oppdater signatur"
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr "Oppdater sak"
+
+#: NOT FOUND IN SOURCE
+msgid "Update ticket # %1"
+msgstr "Ooppdater sak # %1"
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr "Oppdater sak #%1"
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr "Oppdater sak #%1 (%2)"
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr "Oppdateringstype var verken korrespondanse eller kommentar."
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr "Oppdatert"
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr ""
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 %2: %3\\n"
+msgstr "Bruker %1 %2: %3\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 Password: %2\\n"
+msgstr "Bruker %1 Passord: %2\\n"
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found"
+msgstr "Brukeren '%1' ble ikke funnet"
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found\\n"
+msgstr "Brukeren '%1' ble ikke funnet"
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr "Bruker Definert"
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "User ID"
+msgstr "BrukerID"
+
+#: NOT FOUND IN SOURCE
+msgid "User Id"
+msgstr "BrukerId"
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr "Brukerrettigheter"
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr "Bruker kunne ikke opprettes: %1"
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr "Bruker opprettet"
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr "Brukerdefinerte grupper"
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "User notified"
+msgstr "Bruker informert"
+
+#: NOT FOUND IN SOURCE
+msgid "User view"
+msgstr "Brukervisning"
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr "Brukernavn"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr "Brukere"
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr "Brukere som treffer søkekriteria"
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ValueOfQueue"
+msgstr "KøVerdi"
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr "Verdier"
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "VrijevormEnkele"
+msgstr "VrijevormEnkele"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr "Overvåk"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr "OvervåkSomAdminCc"
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Watcher loaded"
+msgstr "Overvåker lastet"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr "Overvåkere"
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "WebEncoding"
+msgstr "WebFormatering"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Wed."
+msgstr "Ons."
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr ""
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+msgstr "NÃ¥r en sak har blitt godkjent av alle godkjennere, legg til korrespondanse for den opprinnelige saken"
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+msgstr "NÃ¥r en sak har blitt godkjent av en godkjenner, legg til korrespondanse til den orginale saken"
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr "NÃ¥r er sak er opprettet"
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr "Når er godkjennelsessak blir opprettet, gi melding til Eier og AdminCc om saken som venter på deres godkjenning"
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr "NÃ¥r noe skjer"
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr "Når en sak er løst"
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr "Når en sak får ny eier"
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr ""
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr "Når en sak flyttes til en ny kø"
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr "NÃ¥r en saks status endres"
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr "NÃ¥r brukerdefinerte forhold intreffer"
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr "NÃ¥r kommentarer kommer inn"
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr "NÃ¥r korrespondanse kommer inn"
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "Arbeid"
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "ArbeidsTelefon"
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr "Arbeidet"
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr "Du eier allerede denne saken"
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr "Du er ikke en autorisert bruker"
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr "Du kan bare omfordele saker som du eier eller som ikke har en eier"
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "You don't have permission to view that ticket.\\n"
+msgstr "Du har ikke tilgang til å se den saken.\\n"
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr "Du fant %1 saker i %2 køen"
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr ""
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr "Du har ikke tilgang til å opprette saker i den køen."
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr "Du kan ikke opprette forespørsler i den køen."
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "Velkommen tilbake"
+
+#: NOT FOUND IN SOURCE
+msgid "Your %1 requests"
+msgstr "Dine %1 forespørsler"
+
+#: NOT FOUND IN SOURCE
+msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
+msgstr "Din RT administrastor har feilkonfigurert mail aliasene som kaller RT"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved by %1. Other approvals may still be pending."
+msgstr "Din forespørsel har blitt godkjent av %1. Andre godkjennelser avventer kanskje fortsatt"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved."
+msgstr "Din forespørsel ble godkjent."
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected"
+msgstr "Din forespørsel ble avvist"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected."
+msgstr "Din forespørsel ble avvist"
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr "Ditt brukernavn/passord er ugyldig"
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr "Zip"
+
+#: NOT FOUND IN SOURCE
+msgid "[no subject]"
+msgstr "[ikke noe emne]"
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Etter"
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr "som tildelt til %1"
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Før"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr "lukket"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "contains"
+msgstr "inneholder"
+
+#: NOT FOUND IN SOURCE
+msgid "content"
+msgstr "innhold"
+
+#: NOT FOUND IN SOURCE
+msgid "content-type"
+msgstr "innholdstype"
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence (probably) not sent"
+msgstr "korrespondanse (sansynligvis) ikke sendt"
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence sent"
+msgstr "korrespondanse sendt"
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr "dager"
+
+#: NOT FOUND IN SOURCE
+msgid "dead"
+msgstr "død"
+
+#: NOT FOUND IN SOURCE
+msgid "delete"
+msgstr "slett"
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr "slettet"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "does not match"
+msgstr "treffer ikke"
+
+#: NOT FOUND IN SOURCE
+msgid "doesn't contain"
+msgstr "inneholder ikke"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr "lik som"
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "false"
+msgstr "usant"
+
+#: NOT FOUND IN SOURCE
+msgid "filename"
+msgstr "filnavn"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr "større enn"
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr "gruppe '%1'"
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr "timer"
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr "id"
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr "er"
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr "er ikke"
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr "mindre enn"
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr "treffer"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr "min"
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "minutter"
+
+#: NOT FOUND IN SOURCE
+msgid "modifications\\n\\n"
+msgstr "endringer\\n\\n"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr "måneder"
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr "ny"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "no value"
+msgstr "ingen verdi"
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr "ingen"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr "ikke lik som"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "notlike"
+msgstr "ikkelik"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Ved"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr "Ã¥pen"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr "personlig gruppe '%1' for bruker '%2'"
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr "kø %1 %2"
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr "avvist"
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr "løst"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr "sek"
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr "pauset"
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr "system %1"
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr "systemgruppe '%1'"
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr "den kallende komponenten oppga ikke hvorfor"
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr "sak #%1 %2"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "true"
+msgstr "sant"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr "ubeskrevet gruppe %1"
+
+#: NOT FOUND IN SOURCE
+msgid "undescripbed group %1"
+msgstr "ubeskrevet gruppe %1"
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr "bruker %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr "uker"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "with template %1"
+msgstr "med malen %1"
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "Ã¥r"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/nl.po b/rt/lib/RT/I18N/nl.po
index 2f9eb0c..6ff9d8f 100644
--- a/rt/lib/RT/I18N/nl.po
+++ b/rt/lib/RT/I18N/nl.po
@@ -1,85 +1,115 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"PO-Revision-Date: 2005-10-03 13:50-0400\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-07 20:38+0000\n"
+"Last-Translator: Kevin Falcone <Unknown>\n"
"Language-Team: rt-devel <rt-devel@lists.fsck.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (geen pub.sleutel!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (niet vertrouwd)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
msgstr "#"
#: NOT FOUND IN SOURCE
msgid "#%1"
-msgstr "msgstr "" "
+msgstr "msgstr"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:86
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:941
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
-
-#: lib/RT/URI/fsck_com_rt.pm:257
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr ""
-#: lib/RT/Date.pm:361
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#: lib/RT/Date.pm:397
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %3 %2 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1 %3 %2 %7 %4:%5:%6"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:634 lib/RT/Transaction_Overlay.pm:677
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 toegevoegd"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "%1 %2 geleden"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:641
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 veranderd naar %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:637 lib/RT/Transaction_Overlay.pm:683
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 verwijderd"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:64 html/Ticket/Elements/PreviewScrips:99
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 verwijderd"
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 hernoemd naar %3"
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 bewaard"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 met sjabloon %3"
@@ -87,57 +117,87 @@ msgstr "%1 %2 met sjabloon %3"
msgid "%1 (%2) %3 this ticket\\n"
msgstr "%1 (%2) %3 dit ticket\\n"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
-msgstr ""
+msgstr "% (%2) door %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:104 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:65
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
+msgstr "%1 (ongewijzigd)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
msgstr ""
-#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - Een argument om door te geven aan %2"
-#: bin/rt-crontool:210
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Uitvoer status herzieningen naar STDOUT"
-#: bin/rt-crontool:204
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr ""
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Specificeer de actie module die u wenst te gebruiken"
-#: bin/rt-crontool:198
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Specificeer de conditie module die u wenst te gebruiken"
-#: bin/rt-crontool:191
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Specificeer de zoek module die u wenst te gebruiken"
-#: html/Elements/Footer:57
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2005', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr ""
-#: lib/RT/ScripAction_Overlay.pm:151
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "%1 ScripAction geladen"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 toegevoegd als waarde voor %2"
@@ -148,37 +208,65 @@ msgstr "%1 aliassen hebben een TicketId nodig om mee te werken"
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on "
-msgstr "%1 aliassen hebben een TicketId nodig om mee te werken"
+msgstr "%1 aliassen hebben een TicketId nodig om mee te werken "
#: NOT FOUND IN SOURCE
msgid "%1 aliases require a TicketId to work on (from %2) %3"
msgstr "%1 aliassen hebben een TicketId nodig om mee te werken (van %2) %3"
-#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 lijkt een lokaal object te zijn maar kan niet gelokaliseerd worden in de database"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:518
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 door %2"
-#: lib/RT/Transaction_Overlay.pm:775 lib/RT/Transaction_Overlay.pm:784 lib/RT/Transaction_Overlay.pm:787
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 veranderd van %2 naar %3"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr ""
-#: lib/RT/Record.pm:945
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 kon niet veranderd worden naar %2"
@@ -186,27 +274,37 @@ msgstr "%1 kon niet veranderd worden naar %2"
msgid "%1 couldn't init a transaction (%2)\\n"
msgstr "%1 kon geen transactie initiëren (%2)"
-#: lib/RT/Ticket_Overlay.pm:2732
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 kon status niet veranderen naar opgelost. RT's Database zou inconsistent kunnen zijn"
-#: lib/RT/Transaction_Overlay.pm:558
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 aangemaakt"
-#: lib/RT/Transaction_Overlay.pm:563
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 verwijderd"
-#: html/Search/Chart:71
-#. ($Query, $PrimaryGroupBy)
-msgid "%1 grouped by %2"
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
msgstr ""
-#: etc/initialdata:593
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 bestaat niet"
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "De %1 hoogste prioriteit tickets die ik bezit"
@@ -218,21 +316,28 @@ msgstr "De %1 hoogste prioriteit tickets die ik bezit..."
msgid "%1 highest priority tickets I requested..."
msgstr "De %1 hoogste prioriteit tickets waar ik om verzocht heb..."
-#: bin/rt-crontool:186
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 is een gereedschap om te reageren op tickets van een extern rooster programma, zoals cron"
-#: lib/RT/Queue_Overlay.pm:864
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 is niet langer een %2 voor deze queue"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
msgstr "%1 is niet langer een %2 voor dit ticket"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 is niet langer een waarde voor custom field %2"
@@ -240,12 +345,12 @@ msgstr "%1 is niet langer een waarde voor custom field %2"
msgid "%1 isn't a valid Queue id."
msgstr "%1 is niet een geldig queue id"
-#: html/Ticket/Elements/ShowTime:2 html/Ticket/Elements/ShowTime:4
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 min"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "De %1 nieuwste tickets die van niemand zijn"
@@ -253,67 +358,93 @@ msgstr "De %1 nieuwste tickets die van niemand zijn"
msgid "%1 not shown"
msgstr "%1 niet afgebeeld"
-#: lib/RT/CustomField_Overlay.pm:892
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 objecten"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 rechten"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "%1 succeeded\\n"
msgstr "%1 gelukt\\n"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 type onbekend voor $MessageId"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 type onbekend voor %2"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 bijgewerkt"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 zal alle leden van een opgelost groep ticket omzetten."
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr ""
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "%1's opgeslagen zoekopdrachten"
-#: lib/RT/Transaction_Overlay.pm:468
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: geen attachment gespecificeerd"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1b"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:4
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1119
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1 is een ongeldige waarde voor status"
@@ -322,25 +453,25 @@ msgstr "'%1 is een ongeldige waarde voor status"
msgid "'%1' not a recognized action. "
msgstr "'%1' onherkende actie. "
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Vink hokje af om te verwijderen)"
-#: html/Ticket/Elements/PreviewScrips:94
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Markeer hokje om notificaties voor de genoemde ontvangers uit te zetten)"
-#: html/Ticket/Elements/PreviewScrips:118
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Markeer hokje om notificaties voor de genoemde ontvangers aan te zetten)"
-#: html/Ticket/Create.html:217
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Voer ticket ids of URLs in, gescheiden door spaties)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Indien leeggelaten, wordt voorzien van %1)"
@@ -348,23 +479,23 @@ msgstr "(Indien leeggelaten, wordt voorzien van %1)"
msgid "(No Value)"
msgstr "(Geen Waarde)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Geen eigen velden)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Geen Leden)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Geen scrips)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Geen slablonen)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Geen)"
@@ -372,11 +503,11 @@ msgstr "(Geen)"
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Stuur een BCC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates <b>niet</b> ontvangen.)"
-#: html/Ticket/Update.html:90
+#: NOT FOUND IN SOURCE
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Stuur een BCC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates <strong>niet</strong> ontvangen. )"
-#: html/Ticket/Create.html:102
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van administratieve e-mail adressen. Deze personen zullen toekomstige updates <strong>wel</strong> ontvangen. )"
@@ -384,7 +515,7 @@ msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates <b>niet</b> ontvangen.)"
-#: html/Ticket/Update.html:86
+#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates <strong>niet</strong> ontvangen. )"
@@ -392,43 +523,60 @@ msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail-adressen. Deze personen zullen toekomstige updates <b>wel</b> ontvangen.)"
-#: html/Ticket/Create.html:92
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail-adressen. Deze personen zullen toekomstige updates <stong>wel</stong> ontvangen.)"
-#: html/Admin/Elements/EditScrip:102
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Gebruik deze velden wanneer U kiest voor 'User Defined' in een conditie of actie)"
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(leeg)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(geen naam weergegeven)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "(no subject)"
msgstr "(geen onderwerp)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:70 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:86 lib/RT/Transaction_Overlay.pm:578
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(geen waarde)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(geen waarden)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(slechts één ticket)"
-#: html/Elements/RT__Ticket/ColumnMap:147
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(wacht op goedkeuring)"
-#: html/Elements/RT__Ticket/ColumnMap:150
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(wacht op andere Collection)"
@@ -436,53 +584,62 @@ msgstr "(wacht op andere Collection)"
msgid "(pending other tickets)"
msgstr "(wacht op andere tickets)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(verplicht)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(zonder titel)"
-#: html/Ticket/Elements/Reminders:88
-msgid "(yyyy/mm/dd)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
msgstr ""
-#: html/Elements/EditCustomFieldSelect:58
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:53
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Ticket->Status%>"
-#: html/Elements/SelectTicketTypes:48
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr ""
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr "<input type=\"submit\" class=\"button\" value=\"Nieuw ticket in\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Nieuw ticket in\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Een leeg sjabloon"
-#: html/Admin/Users/Modify.html:360
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Omdat er geen wachtwoord gezet is, kunt u niet inloggen"
@@ -494,15 +651,15 @@ msgstr "ACE Verwijderd"
msgid "ACE Loaded"
msgstr "ACE Geladen"
-#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE niet gevonden"
-#: lib/RT/ACE_Overlay.pm:854
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACEs kunnen allen gecreëerd of verwijderd worden."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr ""
@@ -510,64 +667,76 @@ msgstr ""
msgid "Aborting to avoid unintended ticket modifications.\\n"
msgstr "Afbraak om ongewenste ticket aanpassing te voorkomen.\\n"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Over mijzelf"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Toegangscontrole"
-#: html/Admin/Elements/EditScrip:71
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Actie"
-#: lib/RT/Scrip_Overlay.pm:173
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Actie %1 niet gevonden"
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Action committed."
msgstr "Actie uitgevoerd."
-#: bin/rt-crontool:148
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr ""
-#: bin/rt-crontool:144
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Actie voorbereid..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Voeg toe"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Voeg AdminCc toe"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Voeg Cc toe"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Voeg kolommen toe"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Criterium toevoegen"
-#: html/Ticket/Create.html:146 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Voeg Meer Bestanden Toe"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Voeg aanvrager Toe"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr ""
@@ -575,35 +744,43 @@ msgstr ""
msgid "Add a Scrip to this queue"
msgstr "Voeg een Scrip toe aan deze queue"
-#: html/Admin/Global/Scrip.html:76
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Voeg een scrip toe dat voor alle queues zal gelden"
-#: html/Search/Build.html:109 html/Search/Build.html:94
+#: NOT FOUND IN SOURCE
msgid "Add and Search"
msgstr "Toevoegen en zoeken"
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Voeg commentaar of reacties toe aan geselecteerde tickets"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Voeg leden toe"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Voeg nieuwe toeschouwers toe"
-#: html/Search/Build.html:85
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Add these terms to your search"
msgstr "Voeg dit criterium toe aan de zoekopdracht"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr ""
@@ -611,37 +788,41 @@ msgstr ""
msgid "AddNextState"
msgstr "VoegVolgendeStaatToe"
-#: lib/RT/Queue_Overlay.pm:764
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Hoofdgebruiker toegevoegd als %1 voor deze queue"
-#: lib/RT/Ticket_Overlay.pm:1426
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Hoofdgebruiker toegevoegd als %1 voor dit ticket"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Adres"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adres1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adres2"
-#: html/Ticket/Create.html:97
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Beheerder Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
-msgstr ""
+msgstr "Beheerder Commentaar"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr ""
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Beheerder queues"
@@ -649,7 +830,7 @@ msgstr "Beheerder queues"
msgid "Admin users"
msgstr "Beheerdergebruikers"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Beheerder/Globale configuratie"
@@ -661,10 +842,22 @@ msgstr "Beheerder/Groepen"
msgid "Admin/Queue/Basics"
msgstr "Beheerder/Queue/Basis"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "BeheerderCCGroep"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "BeheerderCc"
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "BeheerderCCs"
+
#: NOT FOUND IN SOURCE
msgid "AdminComment"
msgstr "BeheerderCommentaar"
@@ -673,7 +866,7 @@ msgstr "BeheerderCommentaar"
msgid "AdminCorrespondence"
msgstr "BeheerderCorrespondentie"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "Beheerder custom field"
@@ -681,31 +874,35 @@ msgstr "Beheerder custom field"
msgid "AdminCustomFields"
msgstr "BeheerderSpecifiekeVelden"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "BeheerderGroep"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "BeheerderGroepLidmaatschap"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "BeheerderBezitPersoonlijkeGroepen"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:92
msgid "AdminQueue"
msgstr "Beheerder queue"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "BeheerderGebruikers"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Administratieve Cc"
-#: html/Ticket/Elements/Tabs:209
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Geavanceerd"
@@ -713,63 +910,63 @@ msgstr "Geavanceerd"
msgid "Advanced Search"
msgstr "Uitgebreid Zoeken"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Na"
-
#: NOT FOUND IN SOURCE
msgid "Age"
msgstr "Leeftijd"
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr ""
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Alle Gegeven Goedkeuringen"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Alle queues"
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Reeds versleuteld"
+
#: NOT FOUND IN SOURCE
msgid "Always sends a message to the requestors independent of message sender"
msgstr "Stuurt altijd een bericht naar de aanvrager ongeacht de verzender van het bericht"
-#: html/Search/Elements/EditQuery:56
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "Heeft betrekking op"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Doorvoeren"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Doorvoeren van de wijzigingen"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Autorisatie"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Goedkeuring #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Goedkeuring #%1: Notities niet bewaard vanwege een systeem fout"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Goedkeuring #%1: Notities bewaard"
@@ -778,11 +975,15 @@ msgstr "Goedkeuring #%1: Notities bewaard"
msgid "Approval Details"
msgstr "Goedkeuring Details"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr ""
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr ""
@@ -790,15 +991,19 @@ msgstr ""
msgid "Approval diagram"
msgstr "Goedkeuring diagram"
-#: html/Approvals/Elements/Approve:65
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Goedkeuring"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Notities van de goedkeurer: %1"
-#: lib/RT/Date.pm:440
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Apr"
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Ggk."
@@ -806,56 +1011,68 @@ msgstr "Ggk."
msgid "April"
msgstr "April"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr "Oplopend"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Oplopend"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "WijsSpecifiekeVeldenToe"
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Toevoegen"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:142
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Hecht bestand aan"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:130 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Aangehecht bestand"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Attachment '%1' kon niet geladen worden"
-#: lib/RT/Transaction_Overlay.pm:476
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Attachment gecreëerd"
-#: lib/RT/Tickets_Overlay.pm:1932
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Attachment bestandsnaam"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Attachments"
-#: lib/RT/Attributes_Overlay.pm:172
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Attribuut Verwijderd"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Aug"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Aug."
@@ -867,11 +1084,11 @@ msgstr "Augustus"
msgid "AuthSystem"
msgstr "AuthenticatieSysteem"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Automatisch-antwoord"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Automatisch-antwoord aan aanvragers"
@@ -879,7 +1096,7 @@ msgstr "Automatisch-antwoord aan aanvragers"
msgid "AutoreplyToRequestors"
msgstr "Automatisch-antwoord aan aanvragers"
-#: html/Widgets/SelectionBox:186
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Beschikbaar"
@@ -887,6 +1104,14 @@ msgstr "Beschikbaar"
msgid "Available Columns"
msgstr "Beschikbare Kolommen"
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Bad PGP Signature: %1\\n"
msgstr "Ongeldige PGP Signature: %1\\n"
@@ -899,55 +1124,64 @@ msgstr "Ongeldig attachment id. Kan attachment '%1' niet vinden\\n"
msgid "Bad data in %1"
msgstr "Ongeldige data in %1"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Bad transaction number for attachment. %1 should be %2\\n"
msgstr "Ongeldig transactienummer voor attachment. %1 zou %2 moeten zijn\\n"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Basis"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Bcc"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:95
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Zorg ervoor dat u uw veranderingen bewaard"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360
-msgid "Before"
-msgstr "Voor"
-
#: NOT FOUND IN SOURCE
msgid "Begin Approval"
msgstr "Begin Goedkeuring"
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr ""
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Blanco"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr ""
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Bookmarkable URL for this search"
msgstr "URL voor deze zoekopdracht, geschikt als bookmark"
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
msgstr ""
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Korte koppen"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Bulk update"
@@ -955,28 +1189,44 @@ msgstr "Bulk update"
msgid "Bulk ticket update"
msgstr "Bulk ticketherziening"
-#: lib/RT/User_Overlay.pm:1790
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Kan systeemgebruikers niet wijzigen"
-#: lib/RT/Queue_Overlay.pm:92
+#: lib/RT/Queue_Overlay.pm:91
msgid "Can this principal see this queue"
msgstr "Kan deze hoofdgebruiker deze queue zien"
-#: lib/RT/CustomField_Overlay.pm:378
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Kan geen custom field toevoegen zonder een naam"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "Kan geen bewaarde zoekopdracht vinden om mee te werken"
-#: html/Search/Build.html:745
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Kan geen bewaarde zoekopdracht vinden om mee te werken"
-#: lib/RT/Link_Overlay.pm:160
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Kan een ticket niet koppelen aan zichzelf"
@@ -984,64 +1234,113 @@ msgstr "Kan een ticket niet koppelen aan zichzelf"
msgid "Can't merge into a merged ticket. You should never get this error"
msgstr "Kan niet samenvoegen met een reeds samengevoegd ticket. U zou deze boodschap nooit mogen krijgen"
-#: html/Search/Build.html:751
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Kan deze zoekopdracht niet opslaan"
-#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1359
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Kan niet zowel basis als doel specificeren"
-#: html/autohandler:193
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Kan gebruiker %1 niet aanmaken"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr ""
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:87 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Wijzig wachtwoord"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Allemaal markeren"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:133 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Vink hokje om te verwijderen"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Vink hokje om de rechten te verwijderen"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Afstammelingen"
-#: html/NoAuth/js/util.js:157
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Choose a date"
msgstr "Kies een datum"
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Stad"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Allemaal wissen"
-#: html/Helpers/CalPopup.html:6
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Sluit window"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Gesloten"
@@ -1049,19 +1348,19 @@ msgstr "Gesloten"
msgid "Closed requests"
msgstr "Gesloten verzoeken"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Combobox: Selecteer of voer meerdere waardes in"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Combobox: Selecteer of voer één waarde in"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Combobox: Selecteer of voer tot %1 waarden in"
@@ -1069,35 +1368,43 @@ msgstr "Combobox: Selecteer of voer tot %1 waarden in"
msgid "Command not understood!\\n"
msgstr "Commando niet begrepen!\\n"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:178
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Commentaar"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Commentaar Adres"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Comment not recorded"
msgstr "Commentaar niet bewaard"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Commentaar op tickets"
-#: lib/RT/Queue_Overlay.pm:112
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "Commentaar op ticket"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Commentaar"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Commentaar (Wordt niet verstuurd aan aanvragers)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Commentaar (Wordt niet verstuurd aan aanvragers)"
@@ -1105,15 +1412,15 @@ msgstr "Commentaar (Wordt niet verstuurd aan aanvragers)"
msgid "Comments about %1"
msgstr "Commentaar over %1"
-#: html/Admin/Users/Modify.html:221 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Opmerkingen over deze gebruiker"
-#: lib/RT/Transaction_Overlay.pm:621
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Commentaar toegevoegd"
-#: lib/RT/Action/Generic.pm:176
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr ""
@@ -1121,26 +1428,48 @@ msgstr ""
msgid "Compile Restrictions"
msgstr "Compilatie Restricties"
-#: html/Admin/Elements/EditScrip:63
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Voorwaarde"
-#: bin/rt-crontool:131
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Voorwaarde komt overeen..."
-#: lib/RT/Scrip_Overlay.pm:189
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Voorwaarde niet gevonden"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Configuratie"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Bevestig"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ContactInfoSystem"
msgstr "ContactInfoSysteem"
@@ -1149,19 +1478,27 @@ msgstr "ContactInfoSysteem"
msgid "Contacted date '%1' could not be parsed"
msgstr "Contact datum '%1' kon niet ontleed worden"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Inhoud"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr ""
-#: html/Search/Elements/EditSearches:64
-msgid "Copy"
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
msgstr ""
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Correspondentie"
@@ -1169,7 +1506,7 @@ msgstr "Correspondentie"
msgid "Correspondence Address"
msgstr "Correspondentieadres"
-#: lib/RT/Transaction_Overlay.pm:617
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Correspondentie toegevoegd"
@@ -1183,45 +1520,57 @@ msgstr "Kan het nieuw custom field niet toevoegen voor dit ticket. "
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. %1 "
-msgstr "Kan het nieuw custom field niet toevoegen voor dit ticket. %1"
+msgstr "Kan het nieuw custom field niet toevoegen voor dit ticket. %1 "
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
-msgstr "Kan de nieuwe waarde voor dit custom field niet toevoegen"
+msgstr "Kan de nieuwe waarde voor dit custom field niet toevoegen "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
msgstr "Kan het nieuwe custom field niet toevoegen. %1 "
-#: lib/RT/Ticket_Overlay.pm:2993 lib/RT/Ticket_Overlay.pm:3001 lib/RT/Ticket_Overlay.pm:3018
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "Kan de eigenaar niet wijzigen. "
-#: html/Admin/CustomFields/Modify.html:161
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Kan custom field niet creëren"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr ""
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Kan de groep niet creëren"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Kan het sjabloon niet creëren: %1"
-#: lib/RT/Ticket_Overlay.pm:1052 lib/RT/Ticket_Overlay.pm:397
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Kan het ticket niet creëren. Queue niet ingesteld"
-#: lib/RT/User_Overlay.pm:256 lib/RT/User_Overlay.pm:270 lib/RT/User_Overlay.pm:279 lib/RT/User_Overlay.pm:288 lib/RT/User_Overlay.pm:297 lib/RT/User_Overlay.pm:311 lib/RT/User_Overlay.pm:321 lib/RT/User_Overlay.pm:497
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Kan de gebruiker niet creëren"
@@ -1235,13 +1584,13 @@ msgstr "Kan geen ticket vinden met id %1"
#: NOT FOUND IN SOURCE
msgid "Could not find group %1."
-msgstr "Kan groep %1 niet vinden. "
+msgstr "Kan groep %1 niet vinden."
-#: lib/RT/Queue_Overlay.pm:742 lib/RT/Ticket_Overlay.pm:1394
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Kan deze gebruiker niet vinden of creëren"
-#: lib/RT/Queue_Overlay.pm:803 lib/RT/Ticket_Overlay.pm:1475
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Kan deze hoofdgebruiker niet vinden"
@@ -1249,55 +1598,71 @@ msgstr "Kan deze hoofdgebruiker niet vinden"
msgid "Could not find user %1."
msgstr "Kan gebruiker %1 niet vinden."
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Kan custom field %1 niet laden"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Kan groep niet laden"
-#: lib/RT/SavedSearch.pm:120
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:188
-msgid "Could not load search attribute"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:762
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Kan deze hoofdgebruiker geen %1 maken voor deze queue"
-#: lib/RT/Ticket_Overlay.pm:1415
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Kan deze hoofdgebruiker geen %1 maken voor dit ticket"
-#: lib/RT/Queue_Overlay.pm:861
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Kan deze hoofdgebruiker niet verwijderen als %1 voor deze queue"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
msgstr "Kan deze hoofdgebruiker niet verwijderen als %1 voor dit ticket"
-#: lib/RT/User_Overlay.pm:192
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Kan gebruikersinformatie niet toewijzen"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Kan gebruiker niet toevoegen aan groep"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Kan geen transactie creëren: %1"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Couldn't figure out what to do from gpg's reply\\n"
msgstr "Kan niet bepalen welke actie te ondernemen aan de hand van gpg's antwoord\\n"
@@ -1306,15 +1671,19 @@ msgstr "Kan niet bepalen welke actie te ondernemen aan de hand van gpg's antwoor
msgid "Couldn't find group\\n"
msgstr "Kan de groep niet vinden\\n"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Kan de rij niet vinden"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Kan deze hoofdgebruiker niet vinden"
-#: lib/RT/CustomField_Overlay.pm:408
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Kan die waarde niet vinden"
@@ -1326,17 +1695,22 @@ msgstr "Kan die toeschouwer niet vinden"
msgid "Couldn't find user\\n"
msgstr "Kan gebruiker niet vinden\\n"
-#: lib/RT/CurrentUser.pm:146
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Kan %1 niet laden uit de gebruikersdatabase.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr ""
@@ -1353,74 +1727,181 @@ msgstr "Kan het RT configuratie bestand niet laden '%1' %2"
msgid "Couldn't load Scrips."
msgstr "Kan de scrips niet laden"
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Kan de groep %1 niet laden"
-#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Kan de link niet laden"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Kan het object %1 niet laden"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Kan de queue niet laden"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
-msgstr "Kan de queue %1 niet laden "
+msgstr "Kan de queue %1 niet laden"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "Couldn't load scrip"
msgstr "Kan het scrip niet laden"
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load template"
msgstr "Kan het sjabloon niet laden"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load that user (%1)"
msgstr "Kan de gebruiker (%1) niet laden"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "Kan ticket '%1' niet laden"
-#: lib/RT/Ticket_Overlay.pm:2590
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:100
#. ($args{'Base'})
msgid "Couldn't resolve base '%1' into a URI."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2589
+#: lib/RT/Link_Overlay.pm:115
#. ($args{'Target'})
msgid "Couldn't resolve target '%1' into a URI."
msgstr ""
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Land"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:132 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:167 html/Ticket/Create.html:234
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Creëer"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Creëer Tickets"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Creëer een custom field"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr ""
@@ -1429,15 +1910,19 @@ msgstr ""
msgid "Create a new Custom Field"
msgstr "Creëer een niuew Specifiek Veld"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Create a new global Scrip"
msgstr "Creëer een nieuw globaal Scrip"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Creëer een nieuwe groep"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Creëer een nieuwe persoonlijke groep"
@@ -1453,15 +1938,15 @@ msgstr "Creëer een nieuw scrip"
msgid "Create a new template"
msgstr "Creëer een nieuw template"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:59
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Creëer een nieuw ticket"
-#: html/Admin/Users/Modify.html:248 html/Admin/Users/Modify.html:303
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Creëer een nieuwe gebruiker"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Creëer een queue"
@@ -1473,69 +1958,106 @@ msgstr "Creëer een queue genaamd"
msgid "Create a request"
msgstr "Creëer een verzoek"
-#: html/Admin/Queues/Scrip.html:80
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Creëer een scrip voor queue %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Creëer een sjabloon"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Maak een ticket aan"
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Create failed: %1 / %2 / %3 "
msgstr "Creatie mislukt: %1 / %2 / %3 "
-#: etc/initialdata:137
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Creëer nieuwe tickets gebaseerd op het sjabloon van dit scrip"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Creëer ticket"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Creëer tickets in deze queue"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Creëer, verwijder en wijzig custom fields"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:92
msgid "Create, delete and modify queues"
msgstr "Creëer, verwijder en wijzig queues"
#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Creëer, verwijder en wijzig de leden van persoonlijke groepen"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Creëer, verwijder en wijzig gebruikers"
-#: lib/RT/System.pm:88
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "Creëer ticket"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1146
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Gecreëerd"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Custom field %1 gecreëerd"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr "Aangemaakt in een tijdvenster"
@@ -1543,31 +2065,43 @@ msgstr "Aangemaakt in een tijdvenster"
msgid "Created template %1"
msgstr "Sjabloon %1 Gecreëerd"
-#: html/Tools/Reports/CreatedByDates.html:7
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr ""
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Aanvrager"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Huidige Relaties"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Huidige Scrips"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Huidige leden"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Huidige rechten"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr ""
@@ -1575,59 +2109,67 @@ msgstr ""
msgid "Current search criteria"
msgstr "Huidige zoekcriteria"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Huidige toeschouwers"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Custom fields"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Custom fields voor %1"
-#: html/Admin/Elements/EditScrip:123
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Specifieke actie opruim code"
-#: html/Admin/Elements/EditScrip:115
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Specifieke actie voorbereidings code"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Specifieke voorwaarde"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Specifiek veld %1 %2 %3"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
msgid "Custom field %1 does not apply to this object"
msgstr "Specifiek Veld %1 is niet van toepassing op dit object"
-#: lib/RT/Tickets_Overlay.pm:2411
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Specifiek veld %1 heeft een waarde."
-#: lib/RT/Tickets_Overlay.pm:2407
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Specifiek veld %1 heeft geen waarde."
-#: lib/RT/Record.pm:1593 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Specifiek veld %1 niet gevonden"
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Custom field not found"
msgstr "Specifiek veld niet gevonden"
-#: lib/RT/CustomField_Overlay.pm:1155
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Specifiek veld waarde %1 kon niet gevonden worden voor custom field %2"
@@ -1636,35 +2178,125 @@ msgstr "Specifiek veld waarde %1 kon niet gevonden worden voor custom field %2"
msgid "Custom field value changed from %1 to %2"
msgstr "Specifiek veld waarde veranderd van %1 naar %2"
-#: lib/RT/CustomField_Overlay.pm:418
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Specifiek veld waarde kon niet verwijderd worden"
-#: lib/RT/CustomField_Overlay.pm:1167
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Specifiek veld waarde kon niet gevonden worden"
-#: lib/RT/CustomField_Overlay.pm:1169 lib/RT/CustomField_Overlay.pm:416
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Specifiek veld waarde verwijderd"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:625
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "Custom field"
-#: html/Prefs/MyRT.html:70 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr ""
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Data error"
msgstr "Data fout"
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:202 html/Ticket/Elements/ShowSummary:81 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Data"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Dec."
@@ -1672,100 +2304,160 @@ msgstr "Dec."
msgid "December"
msgstr "December"
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Default Autoresponse Template"
msgstr "Standaard Auto-antwoord Sjabloon"
-#: etc/initialdata:222
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr ""
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Standaard queue"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Standaard aanvrager"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Standaard admin commentaar sjabloon"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Standaard admin correspondentie sjabloon"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Standaard correspondentie sjabloon"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Standaard transactie sjabloon"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Standaard: %1/%2 verandered van %3 naar %4"
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Delegeer rechten"
-#: lib/RT/System.pm:85
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Delegeer specifieke rechten die aan u verleend zijn."
-#: lib/RT/System.pm:85
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "DelegeerRechten"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Delegeren"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:205
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Verwijderen"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr ""
-#: lib/RT/SavedSearch.pm:211
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr ""
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Verwijder tickets"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "VerwijderTicket"
-#: lib/RT/SavedSearch.pm:209
-msgid "Deleted search"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "Deleting this object could break referential integrity"
msgstr "Het verwijderen van dit object zou de referentiële integriteit kunnen ondermijnen"
-#: lib/RT/Queue_Overlay.pm:395
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen"
-#: lib/RT/User_Overlay.pm:513
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen"
@@ -1773,55 +2465,67 @@ msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermij
msgid "Deleting this object would violate referential integrity."
msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Wijs af"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "Afhankelijkheid van"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr "Afhankelijkheid voor"
+
#: NOT FOUND IN SOURCE
msgid "Dependencies: \\n"
msgstr "Afhankelijkheden: \\n"
-#: lib/RT/Transaction_Overlay.pm:705
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:745
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:702
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:742
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr ""
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:219 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Is afhankelijk van"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "Afhankelijk van"
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "Aflopend"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Aflopend"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:151
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Omschrijf onderstaande kwestie"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:56 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Omschrijving"
@@ -1829,15 +2533,23 @@ msgstr "Omschrijving"
msgid "Details"
msgstr "Details"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Toon"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:93
msgid "Display Access Control List"
msgstr "Toon de toegangscontrole lijst"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Toon de kolommen"
@@ -1849,11 +2561,11 @@ msgstr "Toon de scrip template voor deze queue"
msgid "Display Scrips for this queue"
msgstr "Toon de scrips voor deze queue"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Toon de modus"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Toon de bewaarde zoekopdrachten voor deze groep"
@@ -1861,15 +2573,31 @@ msgstr "Toon de bewaarde zoekopdrachten voor deze groep"
msgid "Display ticket #%1"
msgstr "Toon ticket #%1"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Gedistribueerd onder versie 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> van de GNU GPL.<a/>"
-#: lib/RT/System.pm:76
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Doe iets en alles"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Ververs deze pagina niet"
@@ -1877,15 +2605,23 @@ msgstr "Ververs deze pagina niet"
msgid "Don't show search results"
msgstr "Toon zoekresultaten niet"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Download"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Download als een met tabs gescheiden bestand"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:88 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1150
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Verwacht"
@@ -1893,57 +2629,74 @@ msgstr "Verwacht"
msgid "Due date '%1' could not be parsed"
msgstr "Verwachte datum '%1' kon niet ontleed worden"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
msgstr "FOUT: Kan ticket '%1' niet laden: %2.\\n"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Wijzig"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Wijzig custom fields voor %1"
-#: html/Admin/Global/CustomFields/Groups.html:9
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr ""
-#: html/Admin/Global/CustomFields/Users.html:9
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:9 html/Admin/Global/CustomFields/Queue-Transactions.html:9
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr ""
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Wijzig Relaties"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Wijzig Zoekopdracht"
-#: html/Ticket/Elements/Tabs:207
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Wijzig zoekopdracht"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Wijzig systeem sjablonen"
@@ -1951,11 +2704,15 @@ msgstr "Wijzig systeem sjablonen"
msgid "Edit templates for %1"
msgstr "Wijzig sjablonen voor %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "WijzigOpgeslagenZoekopdrachten"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Bezig met wijzigen van de configuratie voor queue %1"
@@ -1964,17 +2721,18 @@ msgstr "Bezig met wijzigen van de configuratie voor queue %1"
msgid "Editing Configuration for user %1"
msgstr "Bezit met het wijzigen van de configuratie voor gebruiker %1"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Bezit met het wijzigen van custom field %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Bezit met het wijzigen van lidmaatschap voor groep %1"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Bezit met het wijzigen van lidmaatschap voor persoonlijke groep %1"
@@ -1983,19 +2741,40 @@ msgstr "Bezit met het wijzigen van lidmaatschap voor persoonlijke groep %1"
msgid "Editing template %1"
msgstr "Bezit met het wijzigen van sjabloon %1"
-#: lib/RT/Record.pm:1296 lib/RT/Record.pm:1373
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Of basis of doel moeten gespecificeerd zijn"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "E-mail"
-#: lib/RT/User_Overlay.pm:236
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "E-mailadres in gebruik"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "E-mail adres"
@@ -2003,61 +2782,97 @@ msgstr "E-mail adres"
msgid "EmailEncoding"
msgstr "E-mailCodering"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Actief (Het uitzetten van dit vinkje deactiveert dit custom field)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Actief (Het uitzetten van dit vinkje deactiveert deze groep)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Actief (Het uitzetten van dit vinkje deactiveert deze queue)"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Actieve queues"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:339 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Actieve status %1"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Voer meerdere waarden in"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Voer één waarde in"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr ""
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Vul tickets of URIs in om deze tickets aan te koppelen. Scheidt meerdere elementen met spaties."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr ""
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Fout"
-#: lib/RT/Queue_Overlay.pm:673
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Fout in paramaters naar Queue->AddWatcher"
@@ -2065,11 +2880,11 @@ msgstr "Fout in paramaters naar Queue->AddWatcher"
msgid "Error in parameters to Queue->DelWatcher"
msgstr "Fout in paramaters naar Queue->DelWatcher"
-#: lib/RT/Queue_Overlay.pm:834
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1343
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Fout in paramaters naar Ticket->AddWatcher"
@@ -2077,26 +2892,66 @@ msgstr "Fout in paramaters naar Ticket->AddWatcher"
msgid "Error in parameters to Ticket->DelWatcher"
msgstr "Fout in paramaters naar Ticket->DelWatcher"
-#: lib/RT/Ticket_Overlay.pm:1509
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr ""
-#: bin/rt-crontool:233
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr ""
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Iedereen"
-#: bin/rt-crontool:219
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Voorbeeld:"
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "Uitgebreide status"
+
#: NOT FOUND IN SOURCE
msgid "ExternalAuthId"
msgstr "ExternAuteurId"
@@ -2105,77 +2960,133 @@ msgstr "ExternAuteurId"
msgid "ExternalContactInfoId"
msgstr "ExternContactInfoId"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Extra informatie"
-#: lib/RT/SavedSearch.pm:165
-msgid "Failed to create search attribute"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
msgstr ""
-#: lib/RT/User_Overlay.pm:377
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Kan de gebruikers pseudogroep 'Privileged' niet vinden."
-#: lib/RT/User_Overlay.pm:384
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Kan de gebruikers pseudogroep 'Unprivileged' niet vinden."
-#: bin/rt-crontool:163
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Kan module %1 niet laden. (%2)"
-#: lib/RT/SavedSearch.pm:168
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr ""
-#: lib/RT/Date.pm:438
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Feb."
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Bestandsnaam"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Vul meerdere tekst velden"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Vul meerdere wikitekst velden"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Vul één tekst veld"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Vul één wiki tekst veld"
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Vul dit veld met een URL"
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Vul tot %1 tekst velden"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Vul tot %1 wiki tekst velden"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 lib/RT/Tickets_Overlay.pm:1828
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Uiteindelijke prioriteit"
-#: lib/RT/Ticket_Overlay.pm:1141
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "Uiteindelijke prioriteit"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Zoek groepen waarvan"
@@ -2183,19 +3094,23 @@ msgstr "Zoek groepen waarvan"
msgid "Find new/open tickets"
msgstr "Zoek nieuwe/open tickets"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Zoek mensen waarvan"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Zoek tickets"
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Finish Approval"
msgstr "Beëindig Goedkeuring"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Eerste"
@@ -2203,28 +3118,62 @@ msgstr "Eerste"
msgid "First page"
msgstr "Eerste pagina"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Aap Noot Mies"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Aap!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr ""
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Formaat"
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr ""
-#: lib/RT/Record.pm:957
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Gevonden Object"
@@ -2240,49 +3189,100 @@ msgstr "Vrije vorm contact informatie"
msgid "FreeformMultiple"
msgstr "VrijevormMeerdere"
-#: lib/RT/Date.pm:417
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Vr."
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Volledige Kop"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Vul sjabloon vanuit bestand"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Getting the current user from a pgp sig\\n"
msgstr "Bezig met het ophalen van de huidige gebruiker middels een pgp handtekening"
-#: lib/RT/Transaction_Overlay.pm:671
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Aan %1 gegeven"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Globaal"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Globaal custom fields"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr ""
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr ""
+
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Globaal sjabloon: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Ga"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Ga!"
@@ -2294,11 +3294,23 @@ msgstr "Goede pgp handtekening van %1\\n"
msgid "Goto page"
msgstr "Ga naar pagina"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Ga naar ticket"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Groep"
@@ -2306,28 +3318,37 @@ msgstr "Groep"
msgid "Group %1 %2: %3"
msgstr "Groep %1 %2: %3"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Groeps rechten"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Groep heeft al een lid"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Groep heeft al een lid: %1"
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Groep kon niet gecreërd worden: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Groep gecreërd"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Groep heeft geen lid onder die naam"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:749 lib/RT/Queue_Overlay.pm:809 lib/RT/Ticket_Overlay.pm:1401 lib/RT/Ticket_Overlay.pm:1481
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Groep niet gevonden"
@@ -2339,95 +3360,153 @@ msgstr "Groep niet gevonden.\\n"
msgid "Group not specified.\\n"
msgstr "Groep niet gespecificeerd.\\n"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1208
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Groepen"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Groepen kunnen geen leden zijn van hun leden"
-#: html/Admin/Groups/index.html:82
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr ""
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Groepen waar deze gebruiker deel van uitmaakt"
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr "Bevat lid"
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Hallo!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Hallo, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Geschiedenis"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr ""
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "ThuisNummer"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Startpagina"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Uren"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "Ik heb %quant(%1,betonmixer)."
-#: html/Search/Build.html:400
-msgid "I'm lost"
+#: lib/RT/Date.pm:114
+msgid "ISO"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1753
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Id"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identiteit"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Als een goedkeuring afgewezen is, wijs het origineel af en verwijder goedkeuringen die in behandeling zijn"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Indien geen aanvrager is gespecificeerd, maak dan de tickets aan met deze aanvrager"
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Creëer tickets in deze queue indien geen queue is opgegeven."
-#: bin/rt-crontool:215
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Als dit gereedschap setgid zou zijn, zou een kwaadwillende lokale gebruiker dit gereedschap kunnen gebruiken om administratieve toegang te verkrijgen tot RT"
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Als u een van de bovenstaande elemented ververst heeft, zorg dan dat u"
-#: lib/RT/Record.pm:948
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Illegale waarde voor %1"
@@ -2435,66 +3514,117 @@ msgstr "Illegale waarde voor %1"
msgid "Image"
msgstr "Afbeelding"
-#: lib/RT/Record.pm:951
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Niet-wijzigbaar veld"
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Neem inactieve groepen op in de weergave."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Neem inactieve queues op in de weergave."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Neem inactieve gebruikers op in de zoek opdracht"
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr "Pagina toevoegen"
-#: html/Search/Build.html:426
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Incomplete query"
-#: html/Search/Build.html:423
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "Incomplete query"
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1803
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Initiële prioriteit"
-#: lib/RT/Ticket_Overlay.pm:1140 lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "Initiële prioriteit"
-#: lib/RT/ScripAction_Overlay.pm:134
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Invoer fout"
-#: html/Elements/ValidateCustomFields:23 lib/RT/CustomField_Overlay.pm:1019 lib/RT/CustomField_Overlay.pm:1160
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3448
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Interne Fout"
-#: lib/RT/Record.pm:309
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Interne Fout: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Ongeldig Groep Type"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Ongeldig Recht"
@@ -2502,53 +3632,74 @@ msgstr "Ongeldig Recht"
msgid "Invalid Type"
msgstr "Ongeldig Type"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Ongeldige data"
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Invalid owner. Defaulting to 'nobody'."
msgstr "Ongeldige eigenaar. Val terug op 'nobody'."
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:677
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr "Ongeldig patroon: %1"
-#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Ongeldige queue"
-#: lib/RT/ACE_Overlay.pm:265 lib/RT/ACE_Overlay.pm:274 lib/RT/ACE_Overlay.pm:280 lib/RT/ACE_Overlay.pm:291
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Ongeldige recht"
-#: lib/RT/Record.pm:284
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Ongeldige waarde voor %1"
-#: lib/RT/Record.pm:1611
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Ongeldige waarde voor custom field"
-#: lib/RT/Ticket_Overlay.pm:414
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Ongeldige waarde voor status"
-#: bin/rt-crontool:216
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Het is ontzettend belangrijk dat onbevoorrechtigde gebruikers geen toestemming hebben om dit gereedschap te gebruiken."
-#: bin/rt-crontool:217
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "We stellen voor dat u een onbevoorrechtigde unix gebruiker aanmaakt met het juiste groep lidmaatschap en RT toegang om dit gereedschap te gebruiken."
-#: bin/rt-crontool:188
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Het accepteerd meerdere argumenten:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr ""
@@ -2556,7 +3707,11 @@ msgstr ""
msgid "Items pending my approval"
msgstr "Zaken die wachten op mijn goedkeuring"
-#: lib/RT/Date.pm:437
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Jan."
@@ -2564,22 +3719,34 @@ msgstr "Jan."
msgid "January"
msgstr "Januari"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Sluit u aan of verlaat deze groep"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Jul."
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Jumbo"
-#: lib/RT/Date.pm:442
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Jun."
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Keyword"
msgstr "Sleutelwoord"
@@ -2588,23 +3755,23 @@ msgstr "Sleutelwoord"
msgid "Lang"
msgstr "Taal"
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Taal"
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr ""
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Laatste"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Laatste Contact"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Laatste contact"
@@ -2612,26 +3779,67 @@ msgstr "Laatste contact"
msgid "Last Notified"
msgstr "Laatste bericht"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Laatste aanpassing"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "Laatste aangepast door"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Over"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Geef deze gebruiker toegang tot RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Geef deze gebruiker rechten"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Limiting owner to %1 %2"
msgstr "Eigenaar wordt gelimieteerd tot %1 %2"
@@ -2640,67 +3848,103 @@ msgstr "Eigenaar wordt gelimieteerd tot %1 %2"
msgid "Limiting queue to %1 %2"
msgstr "Queue wordt gelimiteerd tot %1 %2"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr ""
-#: lib/RT/Record.pm:1307
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Koppeling bestaat al"
-#: lib/RT/Record.pm:1321
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Koppeling kon niet gecreëerd worden"
-#: lib/RT/Record.pm:1327
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Koppeling gecreëerd (%1)"
-#: lib/RT/Record.pm:1388
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Koppelink verwijderd (%1)"
-#: lib/RT/Record.pm:1394
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Koppeling niet gevonden"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Koppel ticket #%1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "Link waarden aan"
-#: html/Ticket/Create.html:215 html/Ticket/Elements/ShowSummary:87 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "Gekoppeld aan"
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr ""
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Koppelingen"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Laden"
-#: html/Search/Elements/EditSearches:71
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Laad opgeslagen zoekopdracht:"
-#: lib/RT/System.pm:87
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "Laad opgeslagen zoekopdracht"
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Laad perl modules"
-#: lib/RT/SavedSearch.pm:112
-#. ($self->Name)
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Geladen zoekopdracht %1"
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Locatie"
@@ -2708,88 +3952,108 @@ msgstr "Locatie"
msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
msgstr "Log folder %1 niet gevonden of niet toegankelijk.\\n RT kan niet starten."
-#: html/Elements/Header:86
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Aangemeld als %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Aanmelden"
-#: html/Elements/Header:96
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Afmelden"
-#: lib/RT/CustomField_Overlay.pm:931
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Lookup type komt niet overeen"
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Maak Eigenaar"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Maak Status"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Maak verwachtingsdatum"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Make oplossingsdatum"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Maak startdatum"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Maak datum gestart"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Maak datum gemeld"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Maak prioriteit"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Maak queue"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Maak onderwerp"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr ""
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Beheer van custom fields"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Beheer van groepen"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Beheer van eigenschappen en configuraties die betrekking hebben op alle queues"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Beheer van queues"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Beheer van gebruikers"
-#: lib/RT/Date.pm:439
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Maa."
@@ -2797,147 +4061,166 @@ msgstr "Maa."
msgid "March"
msgstr "Maart"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
msgid "May"
msgstr "Mei"
-#: lib/RT/Date.pm:441
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Mei."
-#: lib/RT/Transaction_Overlay.pm:718
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Lid toegevoegd"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Lid toegevoegd: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Lid verwijderd"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Lid niet verwijderd"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Lid van"
-#: NOT FOUND IN SOURCE
-msgid "HasMember"
-msgstr "Bevat lid"
-
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "MemberOf"
msgstr "Lid van"
-msgid "DependedOnBy"
-msgstr "Afhankelijkheid voor"
-
-msgid "DependsOn"
-msgstr "Afhankelijk van"
-
-msgid "RefersTo"
-msgstr "Verwijst naar"
-
-msgid "ReferredToBy"
-msgstr "Verwezen vanaf"
-
-msgid "LinkedTo"
-msgstr "Gekoppeld aan"
-
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Leden"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr ""
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr ""
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2838
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Samenvoeging Succesvol"
-#: lib/RT/Ticket_Overlay.pm:2725
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Samenvoeging mislukt. Kan EffectiefId niet instellen"
-#: lib/RT/Ticket_Overlay.pm:2733
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr ""
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Voeg samen in"
-#: lib/RT/Transaction_Overlay.pm:721
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Samengevoegd tot %1"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Bericht"
-#: html/Ticket/Elements/ShowTransactionAttachments:163
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Bericht inhoud niet weergegeven omdat het te groot is of niet in platte tekst"
-#: lib/RT/Ticket_Overlay.pm:2416
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "bericht kon niet opgeslagen worden"
-#: lib/RT/Ticket_Overlay.pm:2419
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Bericht opgeslagen"
-#: html/Ticket/Elements/PreviewScrips:117
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Berichten over dit ticket worden niet verzonden aan..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minuten"
-#: html/Search/Build.html:430
-msgid "Mismatched parentheses"
-msgstr ""
-
-#: lib/RT/Record.pm:955
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Mist primaire sleutel?: %1"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Mobiel"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "MobieleTelefoon"
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr "Wijzig Toegangs Controle Lijst"
@@ -2945,33 +4228,33 @@ msgstr "Wijzig Toegangs Controle Lijst"
msgid "Modify Custom Field %1"
msgstr "Wijzig Specifiek Veld %1"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Wijzig custom fields die betrekking hebben op %1 voor alle %2"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Wijzig custom fields die betrekking hebben op alle %1"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Wijzig groep rechten"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Wijzig leden"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Wijzig rechten"
-#: lib/RT/Queue_Overlay.pm:98
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Wijzit Scrip sjabloon voor deze queue"
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Wijzig Scrips voor deze queue"
@@ -2979,159 +4262,193 @@ msgstr "Wijzig Scrips voor deze queue"
msgid "Modify Template %1"
msgstr "Wijzig Sjabloon %1"
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr ""
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Wijzig een Specifiek Veld voor deze queue %1"
-#: html/Admin/Queues/Scrip.html:75
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Wijzig een scrip voor deze queue %1"
-#: html/Admin/Global/Scrip.html:69
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Wijzig een scrip die betrekking heeft op alle queues"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Wijzig objecten geassocieerd aan %1"
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Modify dates for # %1"
msgstr "Wijzig data voor # %1"
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Wijzig data voor #%1"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Wijzig data voor ticket # %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Wijzig globale groepsrechten"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Wijzig globale groepsrechten"
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Wijzig globale gebruikersrechten"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Wijzig globale gebruikersrechten"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Wijzig groepsmetadata of verwijder groep"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Wijzig groepsrechten voor custom field %1"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Wijzig groepsrechten voor groep %1"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Wijzig groepsrechten voor queue %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Wijzig lidmaatschap rooster voor dze groep"
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
-msgstr "Wijzig uw eigen RT "
+msgstr "Wijzig uw eigen RT"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Wijzig mensen gekoppeld aan queue %1"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Wijzig mensen gekoppeld aan ticket #%1"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Wijzig scrips voor queue %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Wijzig scrips die betrekking hebben op alle queues"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Wijzig sjabloon %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Wijzig sjablonen die van toepassing zijn op alle queues"
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Wijzig de groep %1"
-#: lib/RT/Queue_Overlay.pm:96
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Wijzig de toeschouwers van de queue"
-#: html/Admin/Users/Modify.html:298
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Wijzig de gebruiker %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Wijzig ticket # %1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Wijzig ticket #%1"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Wijzig tickets"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Wijzig gebruikersrechten voor custom field %1"
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Wijzig gebruikersrechten voor groep %1"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Wijzig gebruikersrechten voor queue %1"
@@ -3140,64 +4457,92 @@ msgstr "Wijzig gebruikersrechten voor queue %1"
msgid "Modify watchers for queue '%1'"
msgstr "Wijzig toeschouwers voor queue '%1'"
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:94
msgid "ModifyACL"
msgstr "WijzigACL"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "WijzigEigenLidmaatschap"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:95
msgid "ModifyQueueWatchers"
msgstr "Wijzig queue toeschouwers"
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "Wijzig scrips"
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "WijzigZelf"
-#: lib/RT/Queue_Overlay.pm:98
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "WijzigSjabloon"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "WijzigTicket"
-#: lib/RT/Date.pm:413
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Ma."
-#: html/Ticket/Elements/ShowRequestor:62
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Meer over %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr ""
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr ""
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Meerdere"
-#: lib/RT/User_Overlay.pm:227
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Specificeren van 'Naam' attribuut verplicht"
-#: html/SelfService/Elements/MyRequests:69
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "Mijn %1 tickets"
@@ -3206,43 +4551,63 @@ msgstr "Mijn %1 tickets"
msgid "My Approvals"
msgstr "Mijn Goedkeuringen"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr ""
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Mijn goedkeuringen"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Mijn bewaarde zoekopdrachten"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Naam"
-#: lib/RT/User_Overlay.pm:234
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Naam in gebruik"
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Need approval from system administrator"
msgstr "Goedkeuring benodigd van de systeem beheerder"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Nooit"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Nieuw"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nieuwe Relaties"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Nieuw wachtwoord"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Nieuwe wachtende goedkeuring"
@@ -3250,31 +4615,40 @@ msgstr "Nieuwe wachtende goedkeuring"
msgid "New Query"
msgstr "Nieuwe zoekopdracht"
-#: html/Ticket/Elements/Tabs:205
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Nieuwe zoekopdracht"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Nieuw custom field"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Nieuwe group"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Nieuw wachtwoord"
-#: lib/RT/User_Overlay.pm:817
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Bericht voor nieuw wachtwoord verzonden"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Nieuwe queue"
-#: html/Ticket/Elements/Reminders:73
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr ""
@@ -3282,11 +4656,11 @@ msgstr ""
msgid "New request"
msgstr "Nieuw verzoek"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nieuwe rechten"
-#: html/Admin/Global/Scrip.html:61 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:64 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Nieuw scrip"
@@ -3294,27 +4668,27 @@ msgstr "Nieuw scrip"
msgid "New search"
msgstr "Nieuwe zoekopdracht"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Nieuw sjabloon"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Nieuw ticket"
-#: lib/RT/Ticket_Overlay.pm:2702
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Nieuw ticket bestaat niet"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Nieuwe gebruiker"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Nieuwe gebruiker genaamd"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nieuwe toeschouwers"
@@ -3322,11 +4696,11 @@ msgstr "Nieuwe toeschouwers"
msgid "New window setting"
msgstr "Nieuwe venster instelling"
-#: html/Helpers/CalPopup.html:13 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Volgende"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Volgende pagina"
@@ -3334,43 +4708,56 @@ msgstr "Volgende pagina"
msgid "Next page"
msgstr "Volgende pagina"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "Bijnaam"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Bijnaam"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Geen Klasse gedefinieerd"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Geen custom field"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Geen custom field gedefinieerd"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Geen Groep gedefinieerd"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Geen Zoekopdracht"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Geen queue gedefinieerd"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Geen RT-gebruiker gevonden. Raadpleeg uw RT-beheerder.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Geen Sjabloon"
@@ -3382,11 +4769,11 @@ msgstr "Geen ticket gespecificeerd. Ticket afgebroken "
msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
msgstr "Geen ticket gespecificeerd. Ticket wijzigingen afgebroken\\n\\n"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Geen actie"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Geen kolom gespecificeerd"
@@ -3394,7 +4781,7 @@ msgstr "Geen kolom gespecificeerd"
msgid "No command found\\n"
msgstr "Geen commando gevonden\\n"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Geen commentaar ingevuld over deze gebruiker"
@@ -3402,93 +4789,137 @@ msgstr "Geen commentaar ingevuld over deze gebruiker"
msgid "No correspondence attached"
msgstr "Geen correspondentie aangehecht"
-#: lib/RT/Action/Generic.pm:186 lib/RT/Condition/Generic.pm:198 lib/RT/Search/ActiveTicketsInQueue.pm:78 lib/RT/Search/Generic.pm:135 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Geen omschrijving voor %1"
-#: lib/RT/Users_Overlay.pm:191
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Geen groep gespecificeerd"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Er zijn geen groepen gevonden die voldoen aan het zoek criterium."
-#: lib/RT/Ticket_Overlay.pm:2359
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Geen bericht toegevoegd"
-#: lib/RT/User_Overlay.pm:1035
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Geen wachtwoord ingesteld"
-#: lib/RT/Queue_Overlay.pm:362
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Geen rechten om queues te creëren"
-#: lib/RT/Ticket_Overlay.pm:410
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Geen rechten om tickets te creëren in de queue '%1'"
-#: lib/RT/User_Overlay.pm:187
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Geen rechten om gebruikers te creëren"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Geen rechten om dat ticket te tonen"
-#: html/SelfService/Update.html:117
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Geen rechten om verversing ticket te bekijken"
-#: lib/RT/Queue_Overlay.pm:796 lib/RT/Ticket_Overlay.pm:1460
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Geen hoofdgebruiker gespecificeerd"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Geen hoofdgebruikers geselecteerd"
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Geen queues gevonden die aan de zoekcriteria voldoen"
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Geen rechten gevonden"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Geen rechten toegekend"
-#: lib/RT/SavedSearch.pm:187
-msgid "No search loaded"
-msgstr ""
-
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Geen zoek opdracht om uit te voeren."
-#: html/Elements/RT__Ticket/ColumnMap:135 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Geen onderwerp"
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "No ticket id specified"
msgstr "Geen ticket id gespecificeerd"
-#: lib/RT/Transaction_Overlay.pm:515 lib/RT/Transaction_Overlay.pm:552
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Geen transactie type gespecificeerd"
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "No user or email address specified"
msgstr "Geen gebruiker of email-adres gespecificeerd"
-#: html/Admin/Users/index.html:55
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Geen gebruikers gevonden die aan de zoekcriteria voldoen"
@@ -3496,27 +4927,39 @@ msgstr "Geen gebruikers gevonden die aan de zoekcriteria voldoen"
msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
msgstr "Geen geldige RT gebruiker gevonden. RT cvs behandelaar losgemaakt. Neemt u alstublieft contact op met uw RT beheerder.\\n"
-#: lib/RT/Record.pm:947
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Geen waarde gestuurd naar _Set!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Niemand"
-#: lib/RT/Record.pm:952
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Nietbestaand veld?"
-#: html/Elements/Header:91
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Niet aangemeld."
-#: lib/RT/Date.pm:393
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Niet gezet"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Nog niet geïmplementeerd."
@@ -3524,188 +4967,248 @@ msgstr "Nog niet geïmplementeerd."
msgid "Not yet implemented...."
msgstr "Nog niet geïmplementeerd...."
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Notities"
-#: lib/RT/User_Overlay.pm:820
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Bericht kon niet verstuurd worden"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Informeer AdminCcs"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Informeer AdminCcs als Commentaar"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Informeer Ccs"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Informeer Ccs als CC"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Bericht Andere Ontvangers"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Bericht Andere Ontvangers als Commentaar"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Bericht Eigenaar"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Bericht Eigenaar als Commentaar"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Informeer de eigenaar over hun geweigerde ticket"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Informeer de eigenaar als hun ticket is geautoriseerd door de approvers"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Informeer de eigenaar als hun ticket is geautoriseerd door een aprover"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Informeer Eigenaars en AdminCcs over nieuwe zaken welke wachten op hun goedkeuring"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Informeer aanvragers"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Informeer aanvragers en Ccs"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Informeer aanvragers en Ccs als CC"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Informeer aanvragers, Ccs en AdminCcs"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Informeer aanvragers, Ccs en AdminCcs als CC"
-#: lib/RT/Date.pm:447
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Nov."
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr ""
-#: lib/RT/Record.pm:323
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Object kon niet gecreëerd worden"
-#: lib/RT/Record.pm:124
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr ""
-#: lib/RT/Record.pm:342
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Object gecreëerd"
-#: lib/RT/Record.pm:121
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:966
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr ""
-#: lib/RT/Date.pm:446
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Okt."
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr ""
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr ""
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr ""
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "Op"
-
-#: lib/RT/Transaction_Overlay.pm:313
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr ""
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Bij Commentaar"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Bij Overeenkomst"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Bij Creatie"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Bij Eigenaarwijziging"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr ""
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Bij queue wijziging"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Bij Oplossing"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Bij Statuswijziging"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Bij Transactie"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Toon alleen goedkeuringen voor verzoeken gecreëerd na %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Toon alleen goedkeuringen voor verzoeken gecreëerd voor %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Toon alleen de custom fields voor:"
@@ -3713,7 +5216,15 @@ msgstr "Toon alleen de custom fields voor:"
msgid "Open"
msgstr "Open"
-#: html/Ticket/Elements/Tabs:161
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr ""
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Open"
@@ -3721,7 +5232,7 @@ msgstr "Open"
msgid "Open requests"
msgstr "Open verzoeken"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr ""
@@ -3733,15 +5244,19 @@ msgstr "Open tickets (van lijst) in een nieuw venster"
msgid "Open tickets (from listing) in another window"
msgstr "Open tickets (van lijst) in een ander venster"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Open ticket bij correspondentie"
-#: html/Prefs/MyRT.html:62
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Opties"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Sorteer op"
@@ -3749,48 +5264,54 @@ msgstr "Sorteer op"
msgid "Ordering and sorting"
msgstr "Ordening en sortering"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organisatie"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Voortgekomen uit ticket: #%1"
-#: lib/RT/Transaction_Overlay.pm:609
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:613
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr ""
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Naar mate de tijd vordert, verschuift de prioriteit richting"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Eigen tickets"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "EigenTicket"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/SelfService/Elements/MyRequests:51 html/Ticket/Create.html:71 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:84 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:111 lib/RT/Tickets_Overlay.pm:1993
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Eigenaar"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
msgstr "Eigenaar veranderd van %1 naar %2"
-#: lib/RT/Ticket_Overlay.pm:496
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Eigenaar gedwongen veranderd van %1 naar %2"
@@ -3799,41 +5320,56 @@ msgstr "Eigenaar gedwongen veranderd van %1 naar %2"
msgid "Owner is"
msgstr "Eigenaar is"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "Naam van de eigenaar"
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Pagina %1 van %2"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Pieper"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
msgstr "Pieper"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Ouders"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Wachtwoord"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Wachtwoord Herinnering"
-#: lib/RT/Transaction_Overlay.pm:768 lib/RT/User_Overlay.pm:1046
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr ""
-#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr ""
-#: lib/RT/User_Overlay.pm:1045
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr ""
@@ -3841,60 +5377,72 @@ msgstr ""
msgid "Password too short"
msgstr "Wachtwoord te kort"
-#: html/User/Prefs.html:239
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Wachtwoord: %1"
-#: lib/RT/User_Overlay.pm:1031
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr ""
-#: html/Admin/Users/Modify.html:353
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr ""
-#: html/User/Prefs.html:241
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr ""
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Mensen"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Verricht een gebruiker gedefiniëerde actie"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Perl-configuratie"
-#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:117 lib/RT/CurrentUser.pm:126 lib/RT/CustomField_Overlay.pm:1015 lib/RT/CustomField_Overlay.pm:1136 lib/RT/CustomField_Overlay.pm:1279 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:402 lib/RT/CustomField_Overlay.pm:762 lib/RT/CustomField_Overlay.pm:935 lib/RT/CustomField_Overlay.pm:970 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1055 lib/RT/Queue_Overlay.pm:141 lib/RT/Queue_Overlay.pm:159 lib/RT/Queue_Overlay.pm:658 lib/RT/Queue_Overlay.pm:668 lib/RT/Queue_Overlay.pm:682 lib/RT/Queue_Overlay.pm:820 lib/RT/Queue_Overlay.pm:829 lib/RT/Queue_Overlay.pm:842 lib/RT/Scrip_Overlay.pm:150 lib/RT/Scrip_Overlay.pm:161 lib/RT/Scrip_Overlay.pm:226 lib/RT/Scrip_Overlay.pm:540 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1328 lib/RT/Ticket_Overlay.pm:1338 lib/RT/Ticket_Overlay.pm:1352 lib/RT/Ticket_Overlay.pm:1493 lib/RT/Ticket_Overlay.pm:1503 lib/RT/Ticket_Overlay.pm:1517 lib/RT/Ticket_Overlay.pm:1634 lib/RT/Ticket_Overlay.pm:1954 lib/RT/Ticket_Overlay.pm:2092 lib/RT/Ticket_Overlay.pm:2262 lib/RT/Ticket_Overlay.pm:2312 lib/RT/Ticket_Overlay.pm:2484 lib/RT/Ticket_Overlay.pm:2555 lib/RT/Ticket_Overlay.pm:2603 lib/RT/Ticket_Overlay.pm:2693 lib/RT/Ticket_Overlay.pm:2707 lib/RT/Ticket_Overlay.pm:2931 lib/RT/Ticket_Overlay.pm:2941 lib/RT/Ticket_Overlay.pm:2946 lib/RT/Ticket_Overlay.pm:3169 lib/RT/Ticket_Overlay.pm:3173 lib/RT/Ticket_Overlay.pm:3316 lib/RT/Ticket_Overlay.pm:3442 lib/RT/Transaction_Overlay.pm:503 lib/RT/Transaction_Overlay.pm:510 lib/RT/Transaction_Overlay.pm:538 lib/RT/Transaction_Overlay.pm:545 lib/RT/User_Overlay.pm:1184 lib/RT/User_Overlay.pm:1793 lib/RT/User_Overlay.pm:370 lib/RT/User_Overlay.pm:736 lib/RT/User_Overlay.pm:775
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Toestemming Geweigerd"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr ""
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
msgstr ""
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Persoonlijke Groepen"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Persoonlijke groepen"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Persoonlijke groepen:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Telefoonnummers"
@@ -3902,24 +5450,65 @@ msgstr "Telefoonnummers"
msgid "Placeholder"
msgstr "Plaatshouder"
-#: html/Elements/Header:88 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Instelingen"
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Prefs"
msgstr "Voorkeuren"
-#: lib/RT/Action/Generic.pm:196
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Bereid Plaatshouder Voor"
-#: html/Helpers/CalPopup.html:11 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Vorige"
-#: html/Elements/TicketList:101
-msgid "Previous Page"
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
msgstr ""
#: NOT FOUND IN SOURCE
@@ -3930,53 +5519,90 @@ msgstr "Vorige pagina"
msgid "Pri"
msgstr "Pri"
-#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Hoofd %1 niet gevonden."
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:180 html/Ticket/Elements/EditBasics:87 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1777
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Prioriteit"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Prioriteit begint bij"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Privacy:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Gerechtigd"
-#: html/Admin/Users/Modify.html:331 html/User/Prefs.html:230
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Gerechtigde status: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Gerechtigde gebruikers"
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Projects"
msgstr "Projecten"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudogroep voor intern gebruik"
-#: html/Search/Build.html:121
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Zoek criteria"
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:61 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:40 html/Tools/Reports/ResolvedByDates.html:41 html/Tools/Reports/ResolvedByOwner.html:21 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1604
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Queue"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
@@ -3986,7 +5612,7 @@ msgstr "Queue %1 niet gevonden"
msgid "Queue '%1' not found\\n"
msgstr "Queue '%1' niet gevonden\\n"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Queue Naam"
@@ -3994,51 +5620,95 @@ msgstr "Queue Naam"
msgid "Queue Scrips"
msgstr "Queue Scrips"
-#: lib/RT/Queue_Overlay.pm:366
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Queue bestaat al"
-#: lib/RT/Queue_Overlay.pm:375 lib/RT/Queue_Overlay.pm:381
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Queue kon niet aangemaakt worden"
-#: html/Ticket/Create.html:243 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Queue kon niet geladen worden."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:385 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Queue aangemaakt"
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Queue is not specified."
msgstr "Queue is niet gespecificeerd"
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Queue niet gevonden"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "Naam van de queue"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Queues"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Queues die ik beheer"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Queues waarvan in een AdminCC ben"
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Snel zoeken"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Snel een ticket aanmaken"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
@@ -4046,8 +5716,8 @@ msgstr "RSS"
msgid "RT %1"
msgstr "RT %1"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 voor %2"
@@ -4059,10 +5729,14 @@ msgstr "RT %1 van <a href=\"http://bestpractical.com/\">Best Practical Solutions
msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "RT Beheer"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT Authentication error."
msgstr "RT Authenticatie fout"
@@ -4071,6 +5745,10 @@ msgstr "RT Authenticatie fout"
msgid "RT Bounce: %1"
msgstr "RT Doorgestuurd: %1"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT Configuration error"
msgstr "RT Configuratie fout"
@@ -4079,7 +5757,7 @@ msgstr "RT Configuratie fout"
msgid "RT Critical error. Message not recorded!"
msgstr "RT Kritieke fout: Bericht niet bewaard!"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "RT Fout"
@@ -4087,23 +5765,40 @@ msgstr "RT Fout"
msgid "RT Received mail (%1) from itself."
msgstr "RT Ontving mail (%1) van zichzelf."
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT Self Service / Closed Tickets"
msgstr "RT Zelfbediening / Afgesloten Tickets"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "RT Variabelen"
-#: html/Prefs/MyRT.html:58 html/Prefs/MyRT.html:70 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "RT in een oogopslag"
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr "RT kan content van een andere webpagina toevoegen wanneer dit custom field wordt weergegeven."
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "RT kan deze custom field waarden omzetten in hyperlinks naar andere services."
@@ -4119,7 +5814,7 @@ msgstr "RT kan de aanvrager niet vinden in zijn interne database"
msgid "RT couldn't find the queue: %1"
msgstr "RT kon de queue %1 niet vinden"
-#: html/Elements/SetupSessionCookie:90
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr ""
@@ -4127,8 +5822,8 @@ msgstr ""
msgid "RT couldn't validate this PGP signature. \\n"
msgstr "RT kon deze PGP signatuur niet valideren. \\n"
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT voor %1"
@@ -4144,11 +5839,27 @@ msgstr "RT heeft uw commando's verwerkt"
msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
msgstr "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. Het is gedistribueerd onder <a href=\"http://www.gnu.org/copyleft/gpl.html\">Versie 2 van de GNU General Public License.</a>"
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT thinks this message may be a bounce"
msgstr "RT denkt dat dit bericht onbestelbaar zou kunnen zijn"
-#: html/Search/Simple.html:60
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "Standaard zoekt RT in de ticket onderwerpen"
@@ -4156,50 +5867,83 @@ msgstr "Standaard zoekt RT in de ticket onderwerpen"
msgid "RT will process this message as if it were unsigned.\\n"
msgstr "RT zal dit bericht verwerken als of het ongesigneerd is.\\n"
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr "RT zal <tt>__id__</tt> en <tt>__CustomField__</tt> vervangen met het record id respectievelijk de custom field waarde"
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
msgstr "RT's email commando modus vereist PGP authenticatie. Of u heeft uw bericht niet gesigneerd, of uw signatuur kon niet geverifieerd worden."
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Echte Naam"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "EchteNaam"
-#: lib/RT/Transaction_Overlay.pm:712
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:752
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:709
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:749
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr ""
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Naar gerefeerd door"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr "Verwezen vanaf"
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Refereert aan"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr "Verwijst naar"
+
#: NOT FOUND IN SOURCE
msgid "Refine"
msgstr "Verfijn"
@@ -4208,77 +5952,133 @@ msgstr "Verfijn"
msgid "Refine search"
msgstr "Verfijn Zoekopdracht"
-#: html/Elements/Refresh:57
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Ververs deze pagina elke %1 minuten."
-#: lib/RT/Transaction_Overlay.pm:798
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:804
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr ""
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr ""
-#: html/Elements/MyReminders:49 html/Ticket/Elements/ShowSummary:73 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "Herinneringen"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr ""
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Verwijder AdminCc"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Verwijder Cc"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Verwijder aanvrager"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Antwoord"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Antwoord naar adres"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Antwoord naar aanvragers"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Antwoord op tickets"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "Antwoord op ticket"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:1 html/Tools/Reports/index.html:2
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Rapportage"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Aanvrager"
@@ -4290,61 +6090,81 @@ msgstr "Aanvrager email adres"
msgid "Requestor(s)"
msgstr "Aanvrager(s)"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:79 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Aanvragers"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Verzoek is terug verwacht"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Verplichte parameter '%1' ontbreekt"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Herstel"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Woonplaats"
-#: html/Ticket/Elements/Tabs:157
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Los op"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Los ticket #%1 (%2) op"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1149
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Opgelost"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Opgeloste incidenten per eigenaar"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Opgelost in het tijdvenster"
-#: html/Tools/Reports/ResolvedByDates.html:7
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr ""
-#: html/Tools/Reports/ResolvedByOwner.html:5
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr ""
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "Antwoord aan aanvragers"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Resultaten"
@@ -4352,11 +6172,15 @@ msgstr "Resultaten"
msgid "Results per page"
msgstr "Resultaten per pagina"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Herhaal het wachtwoord"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Herstel"
@@ -4364,49 +6188,44 @@ msgstr "Herstel"
msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
msgstr "Recht %1 niet gevonden voor %2 %3 in bereik %4 (%5)\\n"
-#: lib/RT/ACE_Overlay.pm:631
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Recht Gedelegeerd"
-#: lib/RT/ACE_Overlay.pm:321
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Recht Toegekend"
-#: lib/RT/ACE_Overlay.pm:179
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Recht geladen"
-#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Recht kon niet afgenomen worden"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Recht niet gevonden"
-#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Recht niet geladen"
-#: lib/RT/ACE_Overlay.pm:713
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Recht ingetrokken"
-#: html/Admin/Elements/UserTabs:67
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Rechten"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr ""
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr ""
-
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Rollen"
@@ -4414,75 +6233,111 @@ msgstr "Rollen"
msgid "RootApproval"
msgstr "RootGoedkeuring"
-#: html/Prefs/MyRT.html:64
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Rijen per box"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Rijen per pagina"
-#: lib/RT/Date.pm:418
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Za."
-#: html/Prefs/MyRT.html:64 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:68 html/Widgets/SelectionBox:212
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Bewaren"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:235 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Bewaar wijzigingen"
-#: html/User/Prefs.html:180
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Bewaar instellingen"
-#: html/Ticket/Elements/PreviewScrips:126
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Bewaar wijzigingen"
-#: lib/RT/SavedSearch.pm:162
-#. ($name)
-msgid "Saved search %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
msgstr ""
-#: html/Search/Elements/EditSearches:46
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Opgeslagen zoekopdrachten"
-#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
-#. ($ARGS{'id'})
msgid "Scrip #%1"
msgstr "Scrip #%1"
-#: lib/RT/Scrip_Overlay.pm:205
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip aangemaakt"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr ""
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Script verwijderd"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrips"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Scrips for %1\\n"
msgstr "Scrips voor %1\\n"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Scrips die betrekking hebben op alle queues"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:65
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Zoek"
@@ -4490,58 +6345,68 @@ msgstr "Zoek"
msgid "Search Criteria"
msgstr "Zoek Criteria"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr ""
-#: lib/RT/SavedSearch.pm:116
-msgid "Search attribute load failure"
-msgstr ""
-
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Zoeken naar autorisaties"
-#: html/Search/Simple.html:69
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Zoeken naar tickets"
-#: html/Search/Simple.html:55
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
msgstr "Zoeken naar tickets. Voer het <strong>id nummer</strong>, de <strong>queue naam</strong>, de <strong>naam</strong> van de eigenaar of het <strong>e-mail adres</strong> van de aanvrager in. RT zal zoeken in de ticket inhoud en attachments."
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Zoek opties"
-#: html/Search/Chart.html:7
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:194
-#. ($msg)
-msgid "Search update: %1"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
msgstr ""
#: NOT FOUND IN SOURCE
msgid "Searches can't be associated with that kind of object"
msgstr "Zoekopdrachten kunnen niet met dat type object geassocieerd worden"
-#: html/Search/Simple.html:59
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "Het doorzoeken van de gehele tekst van alle tickets kan lang duren, maar als dit nodig is, dan kun je ieder woord in de volledige ticket history opzoeken door het typen van <b>fulltext:<i>woord</i></b>."
-#: bin/rt-crontool:213
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Veiligheid"
-#: html/Elements/ShowCustomFields:76
-#. ('<a href="'.$Value->IncludeContentForValue.'">' . $Value->IncludeContentForValue."</a>")
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "See also: %1"
msgstr "Bekijk ook: %1"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Bekijk custom fields"
@@ -4549,99 +6414,127 @@ msgstr "Bekijk custom fields"
msgid "See exact outgoing email messages and their recipeients"
msgstr "Bekijk de uitgaande mail en haar ontvangers"
-#: lib/RT/Queue_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
-msgstr "Bekijk ticket "
+msgstr "Bekijk ticket"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Bekijk ticket samenvatting"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "Bekijk custom field"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "Bekijk groep"
-#: lib/RT/Queue_Overlay.pm:92
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "Bekijk queue"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Selecteer een custom field"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Selecteer een groep"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Selecteer een queue"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Selecteer een queue voor je nieuwe ticket"
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Selecteer een gebruiker"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Selecteer custom field"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Selecteer custom fields voor alle gebruikers groepen"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Selecteer custom fields voor alle gebruikers"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Selecteer custom fields voor tickets in alle queues"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Selecteer custom fields for transacties op tickets in alle queues"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Selecteer de groep"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Selecteer meerdere waarden"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Selecteer één waarde"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Selecteer de queue"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Selecteer de queues die weergegeven worden op de \"RT in een oogopslag\" pagina"
-#: html/Admin/Global/Scrip.html:58 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Selecteer het scrip"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Selecteer de template"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Selecteer tot %1 waarden"
-#: html/Admin/Elements/UserTabs:75
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Selecteer de gebruiker"
@@ -4653,15 +6546,19 @@ msgstr "SelecteerMeerdere"
msgid "SelectSingle"
msgstr "SelecteerEnkele"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr ""
-#: html/Widgets/SelectionBox:210
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr ""
@@ -4669,91 +6566,128 @@ msgstr ""
msgid "Self Service"
msgstr "Zelfbediening"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Stuurt mail naar alle toeschouwers"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Stuurt mail naar alle toeschouwers als een \"commentaar\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Stuurt mail naar alle aanvragers en Ccs"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Stuurt mail naar alle aanvragers en Ccs als een \"commentaar\""
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Stuurt een bericht aan de aanvragers"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Stuurt mail aan expliciet genoemde Ccs en Bccs"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr ""
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr ""
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Stuurt mail aan de administratieve Ccs"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Stuurt mail aan de administratieve Ccs als een \"commentaar\""
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Stuurt mail aan de eigenaar"
-#: lib/RT/Date.pm:445
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Sep."
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Toon"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Toon autorisaties"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Toon kolommen"
-#: html/Ticket/Elements/Tabs:213
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Toon Resultaten"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Toon goedgekeurde verzoeken"
-#: html/Ticket/Create.html:315
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Toon beginselen"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Toon afgewezen verzoeken"
-#: html/Ticket/Create.html:318
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Toon details"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Toon verzoeken die in behandeling zijn"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Toon verzoeken die wachten op andere goedkeuringen"
@@ -4765,11 +6699,15 @@ msgstr "Toon ticket privé commentaar"
msgid "Show ticket summaries"
msgstr "Toon ticket samenvattingen"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:93
msgid "ShowACL"
msgstr "ToonACL"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
@@ -4777,7 +6715,7 @@ msgstr ""
msgid "ShowOutgoingEmail"
msgstr "ToonUitgaandeEmail"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "ToonOpgeslagenZoekopdrachten"
@@ -4789,51 +6727,88 @@ msgstr "Toon scrips"
msgid "ShowTemplate"
msgstr "Toon sjabloon"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "Toon ticket"
-#: lib/RT/Queue_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "Toon ticket commentaar"
-#: lib/RT/Queue_Overlay.pm:108
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Schrijf in als een ticket aanvrager of ticket of queue Cc"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Schrijf in als een ticket of queue AdminCc"
-#: html/Admin/Users/Modify.html:226 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Ondertekening"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Zoeken"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Enkel"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Omvang"
-#: html/Elements/Header:84
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr ""
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "Sommige browser laden alleen content als het afkomstig is uit hetzelfde domain als de RT server."
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Sorteren"
@@ -4849,7 +6824,19 @@ msgstr "Sorteer resultaten op"
msgid "SortOrder"
msgstr "SorteerVolgorde"
-#: html/Admin/Elements/EditScrip:87
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Stadium"
@@ -4861,7 +6848,7 @@ msgstr "Is blijven steken"
msgid "Start page"
msgstr "Start pagina"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Gestart"
@@ -4869,7 +6856,11 @@ msgstr "Gestart"
msgid "Started date '%1' could not be parsed"
msgstr "Startum '%1' kon niet ontleed worden"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:207 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Begint"
@@ -4881,19 +6872,24 @@ msgstr "Begint op"
msgid "Starts date '%1' could not be parsed"
msgstr "Begindatum '%1' kon niet ontleed worden"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Provincie"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Elements/MyRequests:50 html/SelfService/Update.html:57 html/Ticket/Create.html:65 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1143 lib/RT/Tickets_Overlay.pm:1638
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Status"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Status veranderd van %1 naar %2"
@@ -4901,7 +6897,7 @@ msgstr "Status veranderd van %1 naar %2"
msgid "StatusChange"
msgstr "StatusVerandering"
-#: html/Ticket/Elements/Tabs:172
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Steel"
@@ -4913,7 +6909,18 @@ msgstr "Steel ticket"
msgid "StealTicket"
msgstr "SteelTicket"
-#: lib/RT/Transaction_Overlay.pm:665
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Gestolen van %1"
@@ -4922,20 +6929,29 @@ msgstr "Gestolen van %1"
msgid "Stolen from %1 "
msgstr "Gestolen van %1 "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Stijl"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Elements/MyRequests:49 html/SelfService/Update.html:65 html/Ticket/Create.html:107 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:80 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1139 lib/RT/Tickets_Overlay.pm:1720
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Onderwerp"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:687
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Onderwerp veranderd naar %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Uitvoeren"
@@ -4943,74 +6959,103 @@ msgstr "Uitvoeren"
msgid "Submit Workflow"
msgstr "Registreer Workflow"
-msgid "ExtendedStatus"
-msgstr "Uitgebreide status"
-
-msgid "QueueName"
-msgstr "Naam van de queue"
-
-msgid "OwnerName"
-msgstr "Naam van de eigenaar"
-
-msgid "CreatedRelative"
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
msgstr ""
-msgid "ToldRelative"
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
msgstr ""
-msgid "LastUpdatedRelative"
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
msgstr ""
-msgid "DueRelative"
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
msgstr ""
-msgid "ResolvedRelative"
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
msgstr ""
-msgid "LastUpdated"
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
msgstr ""
-msgid "StartedRelative"
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
msgstr ""
-#: lib/RT/Group_Overlay.pm:774
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Gelukt"
-#: lib/RT/Date.pm:419
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Zo."
-#: lib/RT/System.pm:76
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "Super gebruiker"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Systeem"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Systeem configuratie"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:585 lib/RT/Interface/Web.pm:900 lib/RT/Interface/Web.pm:929
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Systeem Fout"
-#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr ""
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Systeem tools"
-#: lib/RT/ACE_Overlay.pm:634
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Systeem fout. Recht niet gedelegeerd."
-#: lib/RT/ACE_Overlay.pm:164 lib/RT/ACE_Overlay.pm:229 lib/RT/ACE_Overlay.pm:324 lib/RT/ACE_Overlay.pm:921
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Systeem fout. Recht niet toegekend."
@@ -5018,31 +7063,35 @@ msgstr "Systeem fout. Recht niet toegekend."
msgid "System error. Unable to grant rights."
msgstr "Systeem fout. Niet mogelijk om rechten toe te kennen"
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Systeem groepen"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "SysteemRolgroep voor intern gebruik"
-#: lib/RT/CurrentUser.pm:358
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TEST_STRING"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:168
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Neem"
-#: lib/RT/Queue_Overlay.pm:116
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Neem ticket"
-#: lib/RT/Queue_Overlay.pm:116
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "NeemTicket"
-#: lib/RT/Transaction_Overlay.pm:650
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Genomen"
@@ -5050,20 +7099,42 @@ msgstr "Genomen"
msgid "Task"
msgstr "Taak"
-#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Sjabloon"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr ""
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Sjabloon verwijderd"
-#: lib/RT/Scrip_Overlay.pm:181
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Sjabloon niet gevonden"
@@ -5071,15 +7142,15 @@ msgstr "Sjabloon niet gevonden"
msgid "Template not found\\n"
msgstr "Sjabloon niet gevonden\\n"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Sjabloon ontleed"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr ""
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Sjablonen"
@@ -5091,46 +7162,51 @@ msgstr "Sjablonen voor %1\\n"
msgid "Text"
msgstr "Tekst"
-#: lib/RT/CustomField_Overlay.pm:942 lib/RT/Record.pm:946
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Dat is al de huidige waarde"
-#: lib/RT/CustomField_Overlay.pm:411
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Dat is geen waarde voor dit custom field"
-#: lib/RT/Ticket_Overlay.pm:1965
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Dat is de zelfde waarde"
-#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Deze hoofdgebruiker heeft reeds dat recht"
-#: lib/RT/Queue_Overlay.pm:754
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Deze hoofdgebruiker is reeds een %1 voor deze queue"
-#: lib/RT/Ticket_Overlay.pm:1406
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Deze hoofdgebruiker is reeds een %1 voor dit ticket"
-#: lib/RT/Queue_Overlay.pm:853
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Deze hoofdgebruiker is geen %1 voor deze queue"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
msgstr "Dexe hoofdgebruiker is geen %1 voor dit ticket"
-#: lib/RT/Ticket_Overlay.pm:1961
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Die queue bestaat niet"
-#: lib/RT/Ticket_Overlay.pm:3178
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Dat ticket heeft onopgeloste afhankelijkheden"
@@ -5138,47 +7214,51 @@ msgstr "Dat ticket heeft onopgeloste afhankelijkheden"
msgid "That user already has that right"
msgstr "Die gebruiker heeft dat recht reeds"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:2982
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Die gebruiker is al eigenaar van dat ticket"
-#: lib/RT/Ticket_Overlay.pm:2954
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Die gebruiker bestaat niet"
-#: lib/RT/User_Overlay.pm:390
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Die gebruiker is al gerechtigd"
-#: lib/RT/User_Overlay.pm:411
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Die gebruiker is reeds ontrechtigd"
-#: lib/RT/User_Overlay.pm:403
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Die gebruiker is nu gerechtigd"
-#: lib/RT/User_Overlay.pm:424
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Die gebruiker is nu ontrechtigd"
-#: lib/RT/Ticket_Overlay.pm:2975
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Die gebruiker mag geen eigenaar zijn van tickets in die queue"
-#: lib/RT/Link_Overlay.pm:234
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Dat is niet een numeriek ID"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:176 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "De Beginselen"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "De CC van een ticket"
-#: lib/RT/ACE_Overlay.pm:114
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "De administratieve CC van een ticket"
@@ -5186,7 +7266,11 @@ msgstr "De administratieve CC van een ticket"
msgid "The comment has been recorded"
msgstr "Het commentaar is bewaard"
-#: bin/rt-crontool:223
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Het volgende commando zal alle actieve tickets in de queue 'general' vinden en hun prioriteit op 99 zetten als ze meer dan 4 uur niet aangeraakt zijn:"
@@ -5194,31 +7278,106 @@ msgstr "Het volgende commando zal alle actieve tickets in de queue 'general' vin
msgid "The following commands were not proccessed:\\n\\n"
msgstr "De volgende commando's zijn niet verwerkt:\\n\\n"
-#: lib/RT/Record.pm:949
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "De waarde is gezet."
-#: lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "De eigenaar van een ticket"
-#: lib/RT/ACE_Overlay.pm:112
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "De aanvrager van een ticket"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Dit commentaar is gewoonlijk niet zichtbaar voor de gebruiker"
-#: lib/RT/CustomField_Overlay.pm:977
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Dit custom field is niet van toepassing op dat object"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Dit onderdeel is alleen beschikbaar voor systeembeheerders"
-#: html/Ticket/Elements/PreviewScrips:93
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Dit bericht zal verstuurd worden aan..."
@@ -5226,15 +7385,15 @@ msgstr "Dit bericht zal verstuurd worden aan..."
msgid "This ticket %1 %2 (%3)\\n"
msgstr "Dit ticket %1 %2 (%3)\\n"
-#: bin/rt-crontool:214
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Dit gereedschap stelt de gebruiker in staat arbitraire perl modules te gebruiken vanuit RT"
-#: lib/RT/Transaction_Overlay.pm:288
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Het lijkt erop alsof deze transactie geen inhoud heeft"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "De %1 tickets met hoogste prioriteit van deze gebruiker"
@@ -5243,28 +7402,45 @@ msgstr "De %1 tickets met hoogste prioriteit van deze gebruiker"
msgid "This user's 25 highest priority tickets"
msgstr "De 25 hoogste prioriteit tickets van deze gebruiker"
-#: lib/RT/Date.pm:416
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Do."
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Ticket #%1 Jumbo actualisering: %2"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Ticket #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "Ticket %1"
-#: lib/RT/Ticket_Overlay.pm:732 lib/RT/Ticket_Overlay.pm:752
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Ticket %1 aangemaakt in queue '%2'"
@@ -5273,16 +7449,17 @@ msgstr "Ticket %1 aangemaakt in queue '%2'"
msgid "Ticket %1 loaded\\n"
msgstr "Toclet %1 geladen\\n"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Ticket %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Ticket custom fields"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Ticket Historie # %1 %2"
@@ -5291,11 +7468,15 @@ msgstr "Ticket Historie # %1 %2"
msgid "Ticket Id"
msgstr "Ticket Id"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Ticket Opgelost"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1205
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Ticket Transacties"
@@ -5303,18 +7484,22 @@ msgstr "Ticket Transacties"
msgid "Ticket attachment"
msgstr "Ticket attachment"
-#: lib/RT/Tickets_Overlay.pm:1907
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Ticket inhoud"
-#: lib/RT/Tickets_Overlay.pm:1956
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Ticket inhoud type"
-#: lib/RT/Ticket_Overlay.pm:594 lib/RT/Ticket_Overlay.pm:608 lib/RT/Ticket_Overlay.pm:619 lib/RT/Ticket_Overlay.pm:740
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Ticket kong niet aangemaakt worden vanwege een interne fout"
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Ticket created"
msgstr "Ticket aangemaakt"
@@ -5327,11 +7512,15 @@ msgstr "Ticket aanmaken gefaald"
msgid "Ticket deleted"
msgstr "Ticket verwijderd"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Ticket id not found"
msgstr "Ticket id niet gevonden"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Ticket metagegevens"
@@ -5339,7 +7528,7 @@ msgstr "Ticket metagegevens"
msgid "Ticket not found"
msgstr "Ticket niet gevonden"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Ticket status gewijzigd"
@@ -5347,28 +7536,30 @@ msgstr "Ticket status gewijzigd"
msgid "Ticket watchers"
msgstr "Ticket toeschouwers"
-#: lib/RT/Search/FromSQL.pm:83
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:52 lib/RT/CustomField_Overlay.pm:1204
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Tickets"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
msgid "Tickets %1 %2"
msgstr "Tickets %1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "Tickets %1 door %2"
-#: html/Tools/Reports/CreatedByDates.html:41
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr ""
-#: html/Tools/Reports/CreatedByDates.html:43
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr ""
@@ -5376,54 +7567,66 @@ msgstr ""
msgid "Tickets from %1"
msgstr "Tickets van %1"
-#: html/Tools/Reports/ResolvedByDates.html:42
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Tickets afgesloten na"
-#: html/Tools/Reports/ResolvedByDates.html:44
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Tickets afgesloten voor"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Tickets welke afhankelijk zijn van deze goedkeuring"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:67
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Geschatte Tijd"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:195 html/Ticket/Elements/EditBasics:80
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Resterende tijd"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:188 html/Ticket/Elements/EditBasics:73
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Gewerkte tijd"
-#: lib/RT/Tickets_Overlay.pm:1878
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Resterende tijd"
-#: html/Elements/Footer:52
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Tijd om te tonen"
-#: lib/RT/Tickets_Overlay.pm:1853
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Gewerkte tijd"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
msgid "TimeLeft"
msgstr "Resterende tijd"
-#: lib/RT/Ticket_Overlay.pm:1144
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "Gewerkte tijd"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Titel"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "To generate a diff of this commit:"
msgstr "Om een verschil van deze uitvoering te genereren:"
@@ -5432,37 +7635,41 @@ msgstr "Om een verschil van deze uitvoering te genereren:"
msgid "To generate a diff of this commit:\\n"
msgstr "Om een verschil van deze uitvoering te genereren:\\n"
-#: html/Elements/Footer:63
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Voor vragen over support, training, bedrijfsspecifieke software-ontwikkeling of licentieovereenkomsten, gelieve contact op te nemen met %1."
-#: lib/RT/Ticket_Overlay.pm:1147
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Verteld"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Tools"
-#: html/Search/Elements/Chart:73
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Totaal"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transactie"
-#: lib/RT/Transaction_Overlay.pm:792
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Transactie %1 gezuiverd"
-#: lib/RT/Transaction_Overlay.pm:174
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transactie Gecreëerd"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Transactie custom fields"
@@ -5470,31 +7677,61 @@ msgstr "Transactie custom fields"
msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
msgstr "Transactie->Creëer kon niet, aangezien u geen ticket id gespecificeerd heeft"
-#: lib/RT/Transaction_Overlay.pm:125
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transactie->Creëer kon niet,aangezien er geen objectttype en -id gespecificeerd is"
-#: lib/RT/Transaction_Overlay.pm:857
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Transacties zijn onwijzigbaar"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Trying to delete a right: %1"
msgstr "Tracht een recht te verwijderen: %1"
-#: lib/RT/Date.pm:414
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Di."
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1145 lib/RT/Tickets_Overlay.pm:1692
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Type"
-#: lib/RT/ScripCondition_Overlay.pm:129
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Niet geïmplementeerd"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unix login"
@@ -5502,37 +7739,54 @@ msgstr "Unix login"
msgid "UnixUsername"
msgstr "UnixGebruikersnaam"
-#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:862
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Onbekende InhoudCodering %1"
-#: html/Search/Build.html:395
-msgid "Unknown field: $key"
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
msgstr ""
-#: html/Elements/SelectResultsPerPage:58
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Ongelimiteerd"
-#: html/Search/Elements/SelectSearchesForObjects:63
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Onbenoemde zoekopdracht"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Ongerechtigd"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:646
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Vrij"
@@ -5540,19 +7794,23 @@ msgstr "Vrij"
msgid "Untitled search"
msgstr "Naamloze zoekopdracht"
-#: html/Elements/RT__Ticket/ColumnMap:300 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Ververs"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Update ID"
msgstr "Ververs ID"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr ""
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Ververs Type"
@@ -5564,7 +7822,11 @@ msgstr "Ververs al deze tickets in eens"
msgid "Update email"
msgstr "Ververs email"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Ververs meer dan één ticket"
@@ -5572,7 +7834,7 @@ msgstr "Ververs meer dan één ticket"
msgid "Update name"
msgstr "Ververs naam"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:524
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Verversing niet opgeslagen."
@@ -5584,7 +7846,7 @@ msgstr "Ververs geselecteerde tickets"
msgid "Update signature"
msgstr "Ververs signatuur"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Ververs ticket"
@@ -5592,60 +7854,99 @@ msgstr "Ververs ticket"
msgid "Update ticket # %1"
msgstr "Ververs ticket # %1"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Ververs ticket #%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Ververs ticket #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:523
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Verversingstype was noch correspondentie, noch commentaar"
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1282 lib/RT/Ticket_Overlay.pm:1148
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Ververst"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr ""
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr ""
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Gebruik andere administratieve RT tools"
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "User %1 %2: %3\\n"
msgstr "Gebruiker %1 %2: %3\\n"
@@ -5654,7 +7955,7 @@ msgstr "Gebruiker %1 %2: %3\\n"
msgid "User %1 Password: %2\\n"
msgstr "Gebruiker %1 Wachtwoord: %2\\n"
-#: lib/RT/Ticket_Overlay.pm:497
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr ""
@@ -5667,11 +7968,15 @@ msgstr "Gebruiker '%1' niet gevonden"
msgid "User '%1' not found\\n"
msgstr "Gebruiker '%1' niet gevonden\\n"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Gebruiker Gedifiniëerd"
-#: html/Admin/Elements/EditScrip:98
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr ""
@@ -5683,29 +7988,41 @@ msgstr "GebruikersID"
msgid "User Id"
msgstr "Gebruiker Id"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Gebruikersrechten"
-#: lib/RT/Interface/Web.pm:1284
-#. ($CustomFieldObj->Name, $class, $Object->id)
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "De gebruiker vroeg om een onbekende aanpassing van custom field %1 voor %2 object #%3"
-#: html/Admin/Users/Modify.html:290
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Gebruiker kon niet aangemaakt worden: %1"
-#: lib/RT/User_Overlay.pm:331
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Gebruiker aangemaakt"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Door gebruiker gedefiniëerde groepen"
-#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Gebruiker opgehaald"
@@ -5717,27 +8034,40 @@ msgstr "Gebruiker verwittigd"
msgid "User view"
msgstr "Gebruikers aanzicht"
-#: html/Admin/Groups/index.html:99
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Door gebruiker gedefinieerde groepen"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Gebruikersnaam"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Gebruikers"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Gebruikers die voldoen aan de zoek criteria"
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Geldige Zoekopdracht"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Validatie"
@@ -5745,140 +8075,289 @@ msgstr "Validatie"
msgid "ValueOfQueue"
msgstr "Waarde van queue"
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Waarden"
-#: lib/RT/Queue_Overlay.pm:108
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Schouw toe"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "SchouwToeAlsAdminCc"
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Watcher loaded"
msgstr "Toeschouwer geladen"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Toeschouwers"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "WebEncoding"
msgstr "WebCodering"
-#: lib/RT/Date.pm:415
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Wo."
-#: etc/initialdata:521
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr ""
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Wanneer een ticket goedgekeurd is door alle goedkeurders, voeg correspondentie toe aan het orginele ticket"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "Wanneer een ticket goedgekeurd is door een goedkeurder, voeg correspondentie toe aan het orginele ticket"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Wanneer een ticket is aangemaakt"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Wanneer een goedkeuringsticket is aangemaakts, verwittig de Eigenaar en de AdminCc van het onderwerp dat op hun goedkeuring wacht"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Wanneer iets gebeurt"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Wanneer een ticket is opgelost"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Wanneer de eigenaar van een ticket verandert"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr ""
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Wanneer de queue van een ticket verandert"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Wanneer de status van een ticket verandert"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Wanneer een door de gebruiker gedifiniëerde voorwaarde gebeurt"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Wanneer commentaar binnenkomt"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Wanneer correspondentie binnenkomt"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
-msgid "Work"
-msgstr "Werk"
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
-#: html/Search/Results.html:82
-msgid "Work offline"
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "Werk"
+
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "WerkTelefoon"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Gewerkt"
-#: lib/RT/Ticket_Overlay.pm:3085
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "U bent al eigenaar van dit ticket"
-#: html/autohandler:203 html/autohandler:211
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "U bent geen geauthorizeerde gebruiker"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2967
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "U kunt alleen tickets opnieuw toebedelen die van u zijn, of van niemand"
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "You don't have permission to view that ticket.\\n"
msgstr "U heeft geen toestemming om dat ticket te bekijken"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "U vond %1 tickets in queue %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "U bent afgemeld bij RT"
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "U heeft geen toestemming om tickets aan te maken in die queue."
-#: lib/RT/Ticket_Overlay.pm:1974
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "U mag geen verzoeken aanmaken in die queue"
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "U mag zich weer aanmelden"
@@ -5890,48 +8369,80 @@ msgstr "Uw %1 verzoeken"
msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
msgstr "Uw RT beheerder heeft de mail-aliasses welke RT aanroepen verkeerd geconfigureerd"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Uw verzoek is goedgekeurd door %1. Er zijn wellicht nog andere goedkeuringen in behandeling."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Uw verzoek is goedgekeurd."
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Uw verzoek was geweigerd."
-#: html/autohandler:240
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Uw gebruikersnaam of wachtwoord zijn onjuist"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Postcode"
-#: lib/RT/System.pm:88
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Na"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr ""
-#: lib/RT/System.pm:87
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr ""
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "zoals gegeven aan %1"
-#: html/Search/Results.html:83
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Voor"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "chart"
msgstr "grafiek"
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "gesloten"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "bevat"
@@ -5943,6 +8454,10 @@ msgstr "inhoud"
msgid "content-type"
msgstr "inhoud-type"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "correspondence (probably) not sent"
msgstr "correspondentie (waarschijnlijk) niet verstuurd"
@@ -5951,7 +8466,22 @@ msgstr "correspondentie (waarschijnlijk) niet verstuurd"
msgid "correspondence sent"
msgstr "correspondentie verstuurd"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "dagen"
@@ -5963,93 +8493,144 @@ msgstr "dood"
msgid "delete"
msgstr "verwijder"
-#: lib/RT/Queue_Overlay.pm:88
+#: lib/RT/Queue_Overlay.pm:87
msgid "deleted"
msgstr "verwijderd"
-#: html/Search/Elements/PickBasics:61
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "voldoet niet aan"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "bevat niet"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "gelijk aan"
-#: html/Search/Build.html:481
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr ""
-#: html/Search/Build.html:503
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr ""
-#: html/Search/Build.html:462
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr ""
-#: html/Search/Build.html:546
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr ""
-#: html/Search/Build.html:467 html/Search/Build.html:486 html/Search/Build.html:508 html/Search/Build.html:537
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr ""
-#: html/Search/Build.html:564
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr ""
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "filename"
msgstr "bestandsnaam"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "groter dan"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "groep '%1'"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy'))
+#: NOT FOUND IN SOURCE
msgid "grouped by %1"
msgstr "opgedeeld in"
-#: lib/RT/Date.pm:338
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "uren"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "id"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "is"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "is niet"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "minder dan"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "voldoet aan"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minuten"
@@ -6057,115 +8638,208 @@ msgstr "minuten"
msgid "modifications\\n\\n"
msgstr "wijzigingen\\n\\n"
-#: lib/RT/Date.pm:350
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "maanden"
-#: lib/RT/Queue_Overlay.pm:83
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "nieuw"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
-msgid "no name"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
msgstr ""
-#: html/Admin/Elements/EditScrips:64
-msgid "no value"
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
msgstr ""
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "geen"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "niet gelijk aan"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:84
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Op"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "open"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "persoonlijke groep '%1' voor gebruiker '%2'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "queue %1 %2"
-#: lib/RT/Queue_Overlay.pm:87
+#: lib/RT/Queue_Overlay.pm:86
msgid "rejected"
msgstr "geweigerd"
-#: lib/RT/Queue_Overlay.pm:86
+#: lib/RT/Queue_Overlay.pm:85
msgid "resolved"
msgstr "opgelost"
-#: lib/RT/Date.pm:330
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sec"
-#: lib/RT/System.pm:86
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr ""
-#: html/Search/Results.html:80
-msgid "spreadsheet"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:85
+#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "geparkeerd"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:80
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr ""
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "systeem %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "systeem groep '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "het aanroepende component specificeerde niet waarom"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "ticket #%1 %2"
-#: lib/RT/Group_Overlay.pm:236
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "onbeschreven groep %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "gebruiker %1"
-#: lib/RT/Date.pm:346
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "weken"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "with template %1"
msgstr "met sjabloon %1"
-#: lib/RT/Date.pm:354
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "jaren"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/pl.po b/rt/lib/RT/I18N/pl.po
index 2175f69..a570fb2 100644
--- a/rt/lib/RT/I18N/pl.po
+++ b/rt/lib/RT/I18N/pl.po
@@ -2,101 +2,115 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: 2007-01-18 11:36+0800\n"
-"PO-Revision-Date: 2005-10-03 14:26-0400\n"
-"Last-Translator: Piotr Åšliwa <piotr.sliwa@comarch.pl>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-06 21:19+0000\n"
+"Last-Translator: Alex Vandiver <Unknown>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr ""
-
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (brak klucza publicznego!)"
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (niezaufany!)"
-#: NOT FOUND IN SOURCE
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
msgstr "Nr"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
-
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr "%1 nr%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr "%1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
msgid "%1 %2 %3"
msgstr "%1 %2 %3"
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %3 %2 %7, %4:%5:%6"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 zostały dodane"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "przed %1 %2"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 zostało zamienione na %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 zostało usunięte"
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 zostało usunięte."
+
#: NOT FOUND IN SOURCE
msgid "%1 %2 of group %3"
msgstr "%1 %2 z groupy %3"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 zmieniono na %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 zapisano."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 wg szablonu %3"
@@ -104,76 +118,95 @@ msgstr "%1 %2 wg szablonu %3"
msgid "%1 (%2) %3 this ticket\\n"
msgstr "%1 (%2) %3 tego zgłoszenia\\n"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) przez %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (Niezmienione)"
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "%1 - %2 shown"
msgstr "wyświetlone %1 - %2"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - warunek przejścia na %2"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Status wyjściowy zaktualizowany na STDOUT"
-#: bin/rt-crontool:253
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
-msgstr ""
+msgstr "%1 - Podaj id szablonu, który ma być użyty"
-#: bin/rt-crontool:256
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Określ moduł działań, którego chcesz użyć"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Określ moduł warunków, którego chcesz użyć"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Określ moduł wyszukiwania, którego chcesz użyć"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
msgstr ""
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT %2 Wszelkie prawa zastrzeżone 1996-%3 %4"
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "Skrypt %1 został załadowany"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "dodano %1 jako wartość dla %2"
@@ -190,32 +223,59 @@ msgstr "do określenia aliasów dla %1 wymagany numer zgłoszenia "
msgid "%1 aliases require a TicketId to work on (from %2) %3"
msgstr "do określenia aliasów dla %1 wymagany numer zgłoszenia (od %2) %3"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "Wydaje się, że %1 to obiekt lokalny, ale nie udało się wyszukać go w bazie danych"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 przez %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 zmieniło się z %2 na %3"
-# Nie jestem pewien!
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%1 wykres przez %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "kopia %1"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "nie udało się ustawić %1 na %2"
@@ -223,22 +283,37 @@ msgstr "nie udało się ustawić %1 na %2"
msgid "%1 couldn't init a transaction (%2)\\n"
msgstr "%1 nie udało się rozpocząć transakcji (%2)\\n"
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 nie udało się ustawić statusu na zamknięty. Baza danych RT może być niespójna"
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
-msgstr ""
+msgstr "%1 utworzono"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
+msgstr "%1 usunięto"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 nie istnieje."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
msgstr ""
-#: etc/initialdata:593
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "%1 zgłoszeń o najwyższym priorytecie, których jestem właścicielem"
@@ -250,21 +325,28 @@ msgstr "%1 zgÅ‚oszeÅ„ o najwyższym priorytecie, których wÅ‚aÅ›cicielem jest uÅ
msgid "%1 highest priority tickets I requested..."
msgstr "%1 zgłoszeń o najwyższym priorytecie zarejestrowanych przez użytkownika..."
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 jest narzędziem umożliwiającym obsługę zgłoszeń z zewnętrznej aplikacji do sporządzania wykazów, takiej jak cron."
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 nie jest już %2 dla tej kolejki"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
msgstr "%1 nie jest już %2 dla tego zgłoszenia"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 nie jest już wartością pola %2"
@@ -276,7 +358,7 @@ msgstr "%1 nie jest aktualnie obowiÄ…zujÄ…cym Id kolejki"
msgid "%1 matches"
msgstr "%1 pasuje"
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 min."
@@ -289,7 +371,7 @@ msgstr "%1 ostatnio zaktualizowanych artykułów"
msgid "%1 newest articles"
msgstr "%1 najnowszych artykułów"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "%1 zgłoszeń bez właściciela"
@@ -297,28 +379,38 @@ msgstr "%1 zgłoszeń bez właściciela"
msgid "%1 not shown"
msgstr "%1 nie zostało wyświetlone"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 objets"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 - uprawnienia"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "%1 succeeded\\n"
msgstr "%1 udało się"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 to nieznany typ Id wiadomości ($MessageId)"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 aktualizacja: %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 to nieznany typ dla %2"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "Aktualizacja %1: Bez dokonanych zmian"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 zaktualizowano"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 zamknie wszystkie części zamykanego zgłoszenia grupowego."
@@ -327,41 +419,57 @@ msgstr "%1 zamknie wszystkie części zamykanego zgłoszenia grupowego."
msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
msgstr "%1 zamknie bazę lokalną, jeśli jest powiązana z podłączonym zgłoszeniem (lub jest jego częścią)"
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr ""
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "Zapisane zapytania %1"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: nie określono załącznika"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1b"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1k"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' to nieprawidłowa wartość statusu"
@@ -378,7 +486,7 @@ msgstr "(Zaznacz pole, aby usunąć element z grupy)"
msgid "(Check box to delete scrip)"
msgstr "(Zaznacz pole, aby usunąć skrypt)"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Zaznacz pole, aby usunąć)"
@@ -386,15 +494,15 @@ msgstr "(Zaznacz pole, aby usunąć)"
msgid "(Check boxes to delete)"
msgstr "(Zaznacz pola, aby usunąć)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Zaznacz pola przy odbiorcach na liście, aby zablokować wysyłanie powiadomień)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Zaznacz pola przy odbiorcach na liście, aby uruchomić wysyłanie powiadomień)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Wprowadź numery lub adresy URL zgłoszeń, oddzielone spacjami)"
@@ -402,29 +510,29 @@ msgstr "(Wprowadź numery lub adresy URL zgłoszeń, oddzielone spacjami)"
msgid "(Enter ticket ids or URLs, seperated with spaces)"
msgstr "(Wprowadź numery lub adresy URL zgłoszeń, oddzielone spacjami)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Jeśli pozostawisz puste, domyślnie zostanie ustawione na %1)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Brak pól definiowanych przez użytkownika)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Brak członków grupy)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Brak skryptów)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Brak szablonów)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Brak)"
@@ -436,15 +544,11 @@ msgstr "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych pr
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami, umieszczonych w polu BCC. <b>Nie zmienia</b> tego, kto będzie otrzymywał informacje o stanie zgłoszenia)"
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Wysyła kopię zgłoszenia na listę administracyjnych adresów mailowych oddzielonych przecinkami. Te osoby <b> będą</b> otrzymywać informacje o stanie zgłoszenia)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
@@ -456,27 +560,27 @@ msgstr "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych pr
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
msgstr "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami. <b>Nie</b> zmienia tego, kto będzie otrzymywał informacje o stanie zgłoszenia)"
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr ""
-
#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
msgstr "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami. Te osoby <b>będą</b> otrzymywać informacje o stanie zgłoszenia)"
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr ""
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Skorzystaj z tych pól jeśli wybrano 'Definiowany przez użytkownika' w atrybutach warunku lub operacji)"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr ""
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(pusta)"
@@ -484,7 +588,7 @@ msgstr "(pusta)"
msgid "(no Summary)"
msgstr "(brak streszczenia)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(brak listy użytkowników)"
@@ -492,27 +596,36 @@ msgstr "(brak listy użytkowników)"
msgid "(no name)"
msgstr "(brak nazwy)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(brak klucza publicznego!)"
+
#: NOT FOUND IN SOURCE
msgid "(no subject)"
msgstr "(brak tematu)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(brak wartości)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(aucune valeur)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(tylko jedno zgłoszenie)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(oczekuje na zatwierdzenie)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(oczekuje na innÄ… KolekcjÄ™)"
@@ -524,24 +637,33 @@ msgstr "(oczekuje na inne zgłoszenia)"
msgid "(requestor's group)"
msgstr "(groupe du demandeur)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(wymagana)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(nienazwany)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr ""
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(niezaufany!)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr ""
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
msgstr ""
#: NOT FOUND IN SOURCE
@@ -552,118 +674,122 @@ msgstr "25 zgÅ‚oszeÅ„ o najwyższym priorytecie, których wÅ‚aÅ›cicielem jest uÅ
msgid "25 highest priority tickets I requested..."
msgstr "25 zgłoszeń o najwyższym priorytecie zarejestrowanych przez użytkownika..."
-#: html/Ticket/Elements/ShowBasics:53
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Ticket->Status%>"
-#: html/Elements/SelectTicketTypes:48
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr ""
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr ""
+msgstr "<input type=\"submit\" class=\"button\" value=\"Nowe zgłoszenie w\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Nowe zgłoszenie w\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "Pusty szablon"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr ""
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "Nie udało się odnaleźć ACE"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE mogą być tylko utworzone lub usunięte."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
-msgstr ""
+msgstr "I"
#: NOT FOUND IN SOURCE
msgid "Aborting to avoid unintended ticket modifications.\\n"
msgstr "Przerwanie operacji, aby uniknąć niezamierzonych modyfikacji zgłoszenia.\\n"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Użytkownika"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Kontrola dostępu"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Operacja"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Operacja %1 nie została odnaleziona"
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Action committed."
msgstr "Operacja została zatwierdzona"
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr ""
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Operacja została przygotowana..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Dodaj"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Dodaj AdminCc"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Dodaj Cc"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr ""
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Dodaj kryterium"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Dodaj więcej plików"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Dodaj zgłaszającego"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Dodaj wartość"
@@ -675,7 +801,7 @@ msgstr "Dodaj nowy skrypt globalny"
msgid "Add a scrip to this queue"
msgstr "Dodaj skrypt dla tej kolejki"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Dodaj skrypt, który będzie dotyczył wszystkich kolejek"
@@ -683,31 +809,31 @@ msgstr "Dodaj skrypt, który będzie dotyczył wszystkich kolejek"
msgid "Add additional criteria"
msgstr "Dodaj kolejne kryterium"
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr ""
-
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Dodaj komentarze lub odpowiedzi do wybranych zgłoszeń"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Dodaj członków grupy"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Dodaj nowych obserwatorów"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
msgstr ""
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr ""
@@ -715,37 +841,41 @@ msgstr ""
msgid "AddNextState"
msgstr "Dodaj następny status"
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Został dodany zarządzający %1 dla tej kolejki"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Został dodany zarządzający %1 dla tego zgłoszenia"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adres 1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adres 2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin Cc"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Administracja komentarzami"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Administracja korespondencjÄ…"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Administracja kolejkami"
@@ -753,7 +883,7 @@ msgstr "Administracja kolejkami"
msgid "Admin users"
msgstr "Administracja użytkownikami"
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Globalna konfiguracja - administracja"
@@ -765,14 +895,22 @@ msgstr "Grupy - administracja"
msgid "Admin/Queue/Basics"
msgstr "Administracja kolejkami . podstawowe informacje"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "AdminAllPersonalGroups"
msgstr "AdminAllPersonalGroups"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "AdminCc"
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "AdminComment"
msgstr "AdminComment"
@@ -781,7 +919,7 @@ msgstr "AdminComment"
msgid "AdminCorrespondence"
msgstr "AdminCorrespondence"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "AdminPolamiUżytk"
@@ -789,15 +927,15 @@ msgstr "AdminPolamiUżytk"
msgid "AdminCustomFields"
msgstr "AdminCustomFields"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "AdminGroup"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "AdminGroupMembership"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "AdminOwnPersonalGroups"
@@ -805,19 +943,23 @@ msgstr "AdminOwnPersonalGroups"
msgid "AdminQueue"
msgstr "AdminQueue"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "AdminUsers"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Administracyjne Cc"
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Admins"
msgstr "Administrateurs"
-#: html/Ticket/Elements/Tabs:216
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Zaawansowane"
@@ -829,15 +971,11 @@ msgstr "Wyszukiwanie zaawansowane"
msgid "Advanced Search Criteria"
msgstr "Kryteria wyszukiwania zaawansowanego"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "po"
-
#: NOT FOUND IN SOURCE
msgid "Age"
msgstr "Wiek"
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr ""
@@ -845,7 +983,7 @@ msgstr ""
msgid "Alias for"
msgstr "Alias pour"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Wszystkie warunki poprawności spełnione"
@@ -857,47 +995,51 @@ msgstr "Wszystkie klasy"
msgid "All Custom Fields"
msgstr "Wszystkie pola definiowane przez użytkownika"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Wszystkie kolejki"
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Always sends a message to the requestors independent of message sender"
msgstr "Zawsze wysyła wiadomość do zgłaszających niezależnie od nadawcy wiadomości"
-#: html/Search/Elements/EditQuery:56
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "I/Lub"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
-msgstr "Zastosuj do: "
+msgstr "Zastosuj do:"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Zastosuj"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Zastosuj zmiany"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Potwierdzenia"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Potwierdzenie #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Potwierdzenie #%1: Uwagi nie zostały zapisane z powodu błędu systemu"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Potwierdzenie #%1: Uwagi zostały zapisane"
@@ -906,11 +1048,15 @@ msgstr "Potwierdzenie #%1: Uwagi zostały zapisane"
msgid "Approval Details"
msgstr "Szczegóły zatwierdzenia"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Zatwierdzone"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Odrzucone"
@@ -918,15 +1064,19 @@ msgstr "Odrzucone"
msgid "Approval diagram"
msgstr "Diagram potwierdzenia"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Zatwierdź"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Uwagi zatwierdzajÄ…cego: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Kwi."
@@ -954,56 +1104,68 @@ msgstr "Artykuł nie został odnaleziony"
msgid "Articles"
msgstr "Artykuły"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "RosnÄ…co"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr ""
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Załączniki"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Załącz plik"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Plik został załączony"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Załącznik"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Nie udało się dodać załącznika '%1'"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Załącznik został utworzony"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Nazwa pliku załącznika"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Załączniki"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Atrybut usunięty"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Sie."
@@ -1015,11 +1177,11 @@ msgstr "Sierpień"
msgid "AuthSystem"
msgstr "AuthSystem"
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Automatyczna odpowiedź"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Automatyczna odpowiedź wysyłana do zgłaszających"
@@ -1027,14 +1189,22 @@ msgstr "Automatyczna odpowiedź wysyłana do zgłaszających"
msgid "AutoreplyToRequestors"
msgstr "Automatyczna odpowiedź wysyłana do zgłaszających"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
-msgstr ""
+msgstr "Dostępne"
#: NOT FOUND IN SOURCE
msgid "Available Columns"
msgstr "Dostępne kolumny"
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Wstecz"
+
#: NOT FOUND IN SOURCE
msgid "Bad PGP Signature: %1\\n"
msgstr "Niewłaściwy podpis PGP: %1\\n"
@@ -1047,31 +1217,32 @@ msgstr "Niewłaściwy numer id załącznika. Nie udało się wyszukać załączn
msgid "Bad data in %1"
msgstr "Niewłaściwe dane w %1"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Bad transaction number for attachment. %1 should be %2\\n"
msgstr "Niewłaściwy numer transakcji dla załącznika. %1 należy zastąpić przez %2\\n"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Podst. informacje"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Bcc"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Pamiętaj, aby zapisać zmiany"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "przed"
-
#: NOT FOUND IN SOURCE
msgid "Begin Approval"
msgstr "Rozpocznij zatwierdzanie"
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr ""
@@ -1079,35 +1250,63 @@ msgstr ""
msgid "Binary"
msgstr "Binaire"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Pusty"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Treść"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
-msgstr ""
+msgstr "Pogrubienie"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Zakładka"
#: NOT FOUND IN SOURCE
msgid "Bookmarkable URL for this search"
msgstr "Adres URL do zapamiętania dla tego wyszukiwania"
-#: html/Search/Results.html:79
+#: NOT FOUND IN SOURCE
msgid "Bookmarkable link"
msgstr "URL do zapamiętania"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Zgłoszenia zapisane w zakładkach"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Krótkie nagłówki"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
-msgstr ""
+msgstr "Hurtowa Aktualizacja"
#: NOT FOUND IN SOURCE
msgid "Bulk ticket update"
msgstr "Hurtowa aktualizacja zgłoszeń"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Wykup wsparcie"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Nie można zmienić użytkowników systemu"
@@ -1115,20 +1314,20 @@ msgstr "Nie można zmienić użytkowników systemu"
msgid "Can this principal see this queue"
msgstr "Czy ten zarzÄ…dzajÄ…cy widzi tÄ™ kolejkÄ™"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Nie można wprowadzić wartości pola bez nazwy"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr ""
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr ""
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Nie można połączyć zgłoszenia z tym samym zgłoszeniem"
@@ -1136,57 +1335,89 @@ msgstr "Nie można połączyć zgłoszenia z tym samym zgłoszeniem"
msgid "Can't merge into a merged ticket. You should never get this error"
msgstr "Niemożliwe połączenie w jedno zgłoszenie"
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr ""
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Niemożliwe jest zapisanie tego zapytania"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Niemożliwe określenie jednocześnie podstaw i celu"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Niemożliwe utworzenie użytkownika: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
+msgstr "Kategoria"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
msgstr ""
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Cc"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Zmodyfikuj"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Zmień hasło"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Zaznacz wszystko"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Zaznacz pole, aby usunąć"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Zaznacz pole, aby odebrać uprawnienie"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Zgłoszenia podrzędne"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
msgstr ""
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Wybierz silnik bazy danych"
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Miasto"
@@ -1206,15 +1437,27 @@ msgstr "KlasÄ… jest"
msgid "Classes"
msgstr "Klasy"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Wyczyść"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Odznacz wszystko"
-#: html/Helpers/CalPopup.html:51
-msgid "Close window"
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
msgstr ""
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "Zamknij okno"
+
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Zamknięte"
@@ -1226,19 +1469,19 @@ msgstr "Zamknięte zgłoszenia"
msgid "Closed requests"
msgstr "Demandes closes"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Zamknięte zgłoszenia"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr ""
@@ -1246,35 +1489,43 @@ msgstr ""
msgid "Command not understood!\\n"
msgstr "Niezrozumiałe polecenie!\\n"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Komentuj"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Adres komentarza"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Comment not recorded"
msgstr "Komentarz nie został zapisany"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Komentarz do zgłoszeń"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "CommentOnTicket"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Komentarze"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Komentarze (które nie zostaną wysłane zgłaszającym)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Komentarze (które nie zostały wysłane zgłaszającym)"
@@ -1282,15 +1533,15 @@ msgstr "Komentarze (które nie zostały wysłane zgłaszającym)"
msgid "Comments about %1"
msgstr "Komentarze dotyczÄ…ce %1"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Uwagi dotyczące użytkownika"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Komentarze zostały dodane"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Potwierdzenie wysłane do zgłaszającego"
@@ -1298,30 +1549,48 @@ msgstr "Potwierdzenie wysłane do zgłaszającego"
msgid "Compile Restrictions"
msgstr "Ograniczenia kompilacji"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Warunek"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr ""
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Warunek zgadza siÄ™ z ..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Warunek nie został odnaleziony"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Konfiguracja"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Potwierdź"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ContactInfoSystem"
msgstr "ContactInfoSystem"
@@ -1330,19 +1599,31 @@ msgstr "ContactInfoSystem"
msgid "Contacted date '%1' could not be parsed"
msgstr "Nie udało się rozpoznać daty modyfikacji'%1'"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Zawartość"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Typ zawartości"
-#: html/Search/Elements/EditSearches:65
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Kopiuj"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Korespondencja"
@@ -1350,7 +1631,7 @@ msgstr "Korespondencja"
msgid "Correspondence Address"
msgstr "Adres korespondencyjny"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Korespondencja została dodana"
@@ -1360,45 +1641,49 @@ msgstr "Korespondencja nie została zapisana"
#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value for ticket. "
-msgstr "Nie udało się wprowadzić nowej wartości pola dla zgłoszenia."
-
-#: lib/RT/Record.pm:1707
-msgid "Could not add new custom field value. "
-msgstr ""
+msgstr "Nie udało się wprowadzić nowej wartości pola dla zgłoszenia. "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
-msgid "Could not add new custom field value. %1 "
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
-msgstr "Nie udało się zmienić właściciela."
+msgstr "Nie udało się zmienić właściciela. "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
-#: html/Admin/CustomFields/Modify.html:161
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Nie udało się utworzyć pola definiowanego przez użytkownika"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr ""
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Nie udało się utworzyć grupy"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Nie udało się utworzyć szablonu: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Nie udało się utworzyć zgłoszenia. Nie określono kolejki"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Nie udało się utworzyć użytkownika"
@@ -1410,11 +1695,11 @@ msgstr "Nie udało się wyszukać zgłoszenia o numerze %1"
msgid "Could not find group %1."
msgstr "Nie udało się wyszukać grupy %1."
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Nie udało się wyszukać ani utworzyć tego użytkownika"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Nie udało się wyszukać tego zarządzającego"
@@ -1422,59 +1707,71 @@ msgstr "Nie udało się wyszukać tego zarządzającego"
msgid "Could not find user %1."
msgstr "Nie udało się wyszukać użytkownika %1."
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr ""
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Nie udało się załadować grupy"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:197
-msgid "Could not load search attribute"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Nie udało się przypisać tego zarządzającego jako %1 dla tej kolejki"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Nie udało się przypisać tego zarządzającego jako %1 dla tego zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Nie udało się usunąć tego zarządzającego jako %1 dla tej kolejki"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
msgstr "Nie udało się usunąć tego zarządzającego jako %1 dla tego zgłoszenia"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Niemożliwe było zapisanie danych użytkownika"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr ""
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Nie udało się dodać nowego członka grupy"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Nie udało się utworzyć transakcji: %1"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Couldn't figure out what to do from gpg's reply\\n"
msgstr "Nie udało się ustalić, co zrobić na podstawie odpowiedzi z gpg\\n"
@@ -1483,15 +1780,19 @@ msgstr "Nie udało się ustalić, co zrobić na podstawie odpowiedzi z gpg\\n"
msgid "Couldn't find group\\n"
msgstr "Nie udało się wyszukać grupy\\n"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Nie udało się wyszukać wiersza"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Nie udało się wyszukać tego zarządzającego"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Nie udało się wyszukać tej wartości"
@@ -1499,17 +1800,22 @@ msgstr "Nie udało się wyszukać tej wartości"
msgid "Couldn't find user\\n"
msgstr "Nie udało się wyszukać użytkownika\\n"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Nie udało się załadować %1 z bazy użytkowników.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "Nie udało się załadować klasy %1"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "Nie udało się załadować pola %1"
@@ -1522,40 +1828,70 @@ msgstr "Nie udało się załadować pliku konfiguracji RT '%1' %2"
msgid "Couldn't load Scrips."
msgstr "Nie udało się załadować skryptów"
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr ""
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Nie udało się załadować grupy %1"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Nie udało się załadować połączenia"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Impossible de charger l'objet %1"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Nie udało się załadować kolejki"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
-msgstr " Nie udało się załadować kolejki %1"
+msgstr "Nie udało się załadować kolejki %1"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "Couldn't load scrip"
msgstr "Nie udało się załadować skryptu"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr ""
@@ -1564,29 +1900,101 @@ msgstr ""
msgid "Couldn't load template"
msgstr "Nie udało się załadować szablonu"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Couldn't load that user (%1)"
msgstr "Nie udało się załadować użytkownika (%1)"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "Nie udało się załadować zgłoszenia '%1'"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
msgstr ""
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Kraj"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Utwórz"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Utwórz zgłoszenia"
@@ -1594,11 +2002,11 @@ msgstr "Utwórz zgłoszenia"
msgid "Create a Class"
msgstr "Utwórz klasę"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Utwórz pole definiowane przez użytkownika"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "Utwórz pole dla kolejki %1"
@@ -1615,15 +2023,19 @@ msgstr "Utwórz nowe pole definiowane przez użytkownika"
msgid "Create a new article"
msgstr "Utwórz nowy artykuł"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Create a new global scrip"
msgstr "Utwórz nowy skrypt globalny"
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Utwórz nową grupę"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Utwórz nową grupę prywatną"
@@ -1639,15 +2051,15 @@ msgstr "Utwórz nowy skrypt"
msgid "Create a new template"
msgstr "Utwórz nowy szablon"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Utwórz nowe zgłoszenie"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Utwórz nowego użytkownika"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Utwórz kolejkę"
@@ -1659,16 +2071,16 @@ msgstr "Utwórz kolejkę nazwaną"
msgid "Create a request"
msgstr "Utwórz zgłoszenie"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Utwórz skrypt dla kolejki %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Utwórz szablon"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Utwórz zgłoszenie"
@@ -1680,19 +2092,35 @@ msgstr "Utwórz artykuł"
msgid "Create an article in class..."
msgstr "Utwórz artykuł w ramach klasy..."
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Utwórz nowe zgłoszenia na podstawie szablonu tego skryptu"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Utwórz zgłoszenie"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Utwórz zgłoszenia w tej kolejce"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Utwórz, usuń i zmodyfikuj pola def. przez użytkownika"
@@ -1700,32 +2128,49 @@ msgstr "Utwórz, usuń i zmodyfikuj pola def. przez użytkownika"
msgid "Create, delete and modify queues"
msgstr "Utwórz, usuń i zmodyfikuj kolejki"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "Create, delete and modify the members of any user's personal groups"
msgstr "Utwórz, usuń i zmodyfikuj członków którejś z prywatnych grup użytkownika"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
-msgstr " Utwórz, usuń i zmodyfikuj członków prywatnych grup"
+msgstr "Utwórz, usuń i zmodyfikuj członków prywatnych grup"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Utwórz, usuń i zmodyfikuj użytkowników"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "CreateTicket"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Zarejestrowane"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Utworzono przez"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Pole %1 zostało utworzone"
@@ -1737,7 +2182,7 @@ msgstr "Utworzony przez"
msgid "Created during"
msgstr "Utworzony podczas"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr ""
@@ -1745,15 +2190,27 @@ msgstr ""
msgid "Created template %1"
msgstr "Szablon %1 został utworzony"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr ""
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Zgłaszający"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Kryptografia"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Aktualne powiÄ…zania"
@@ -1761,27 +2218,27 @@ msgstr "Aktualne powiÄ…zania"
msgid "Current Relationships"
msgstr "Aktualne powiÄ…zania"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Aktualne skrypty"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Aktualni członkowie"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Aktualne uprawnienia"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
-msgstr ""
+msgstr "Aktualne wyszukiwanie"
#: NOT FOUND IN SOURCE
msgid "Current search criteria"
msgstr "Aktualne kryteria wyszukiwania"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Aktualni obserwatorzy"
@@ -1789,47 +2246,53 @@ msgstr "Aktualni obserwatorzy"
msgid "Custom Field #%1"
msgstr "Pole def. przez użytkownika #%1"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Pola def. przez użytkownika"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr ""
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Treść procedury czyszczenia definiowana przez użytkownika"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Treść procedury definiowana przez użytkownika"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Warunek definiowany przez użytkownika"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Pole definiowane przez użytkownika %1 %2 %3"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Pole %1 definiowane przez użytkownika ma wartość."
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Brak wartości w polu %1 definiowanym przez użytkownika."
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Nie udało się wyszukać pola %1 definiowanego przez użytkownika"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
@@ -1843,7 +2306,7 @@ msgstr "Pole definiowane przez użytkownika zostało usunięte"
msgid "Custom field not found"
msgstr "Nie udało się wyszukać pola definiowanego przez użytkownika"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Nie udało się wyszukać wartości %1 dla pola %2"
@@ -1852,31 +2315,121 @@ msgstr "Nie udało się wyszukać wartości %1 dla pola %2"
msgid "Custom field value changed from %1 to %2"
msgstr "Wartość pola zmieniła się z %1 na %2"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Nie można usunąć wartości pola"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Nie udało się wyszukać wartości pola"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Wartość pola została usunięta"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "Pole"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
+msgstr "Dostosuj"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Nazwa bazy danych"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Typ bazy danych"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Format daty"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
msgstr ""
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Daty"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Gru"
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Gru."
@@ -1884,63 +2437,85 @@ msgstr "Gru."
msgid "December"
msgstr "Grudzień"
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Odszyfrowanie"
+
#: NOT FOUND IN SOURCE
msgid "Default Autoresponse Template"
msgstr "Domyślnie wybierany szablon odpowiedzi wysyłanej automatycznie"
-#: etc/initialdata:222
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Domyślnie wybierany szablon odpowiedzi wysyłanej automatycznie"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Domyślna kolejka"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Domyślny zgłaszający"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Domyślnie wybierany szablon komentarza administratora"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Domyślnie wybierany szablon korespondencji administratora"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Domyślnie wybierany szablon korespondencji"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Domyślna kolejka"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Domyślnie wybierany szablon transakcji"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Domyślnie: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Domyślnie: %1/%2 zmieniane z \"%3\" na \"%4\""
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Przekaż uprawnienia"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Przekaż specyficzne uprawnienia, które zostały Ci przyznane"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "DelegateRights"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Przekazywanie uprawnień"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Usuń"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Usuń szablon"
@@ -1948,96 +2523,142 @@ msgstr "Usuń szablon"
msgid "Delete article #%1"
msgstr "Usuń artykuł #%1"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr ""
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Usuń zaznaczone skrypty"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Usuń zgłoszenia"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "DeleteTicket"
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "Usunięto %1"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
msgstr ""
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Usunięto zapisane wyszukiwanie"
+
#: NOT FOUND IN SOURCE
msgid "Deleting this object could break referential integrity"
msgstr "Usunięcie tego obiektu mogło spowodować brak spójności"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Usunięcie tego obiektu spowoduje brak spójności"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Usunięcie tego obiektu naruszy spójność"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Odrzucić"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "Zgłoszenia zależne"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Dependencies: \\n"
msgstr "Zależności"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Zależność %1 dodana"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Zależność %1 usunięta"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Zależność od %1 dodana"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "Zależność od %1 usunięta"
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Zależy od"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "DependsOn"
msgstr "ZależyOd"
-#: html/Search/Elements/DisplayOptions:86
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr ""
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "MalejÄ…co"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Opis zgłoszenia"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Opis"
@@ -2045,7 +2666,15 @@ msgstr "Opis"
msgid "Details"
msgstr "Szczegóły"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Nieaktywne"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Wyświetl"
@@ -2053,23 +2682,23 @@ msgstr "Wyświetl"
msgid "Display Access Control List"
msgstr "Wyświetl Listę Praw Dostępu"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Wybierz kolumny"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Wyświetl szablony skryptów dla tej kolejki"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Wyświetl skrypty dla tej kolejki"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Tryb wyświetlania"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr ""
@@ -2077,15 +2706,31 @@ msgstr ""
msgid "Display ticket #%1"
msgstr "Wyświetl zgłoszenie #%1"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Rozpowszechniane na mocy wersji 2 licencji GNU GPL <a href=\"http://www.gnu.org/copyleft/gpl.html\">."
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Zrób cokolwiek i wszystko"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Nazwa domeny"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Nie odświeżaj tej strony."
@@ -2093,15 +2738,23 @@ msgstr "Nie odświeżaj tej strony."
msgid "Don't show search results"
msgstr "Nie wyświetlaj wyników wyszukiwania"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
-msgstr "Pobierz "
+msgstr "Pobierz"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Pobierz jako listę [dane każdego użytkownika/grupy w jednej linii, odzielone tabulatorem]"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Termin realizacji"
@@ -2109,11 +2762,24 @@ msgstr "Termin realizacji"
msgid "Due date '%1' could not be parsed"
msgstr "Termin realizacji '%1' nie może być rozpoznany"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "BÅÄ„D: %1"
+
#: NOT FOUND IN SOURCE
msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
msgstr "BÅÄ„D: Nie udaÅ‚o siÄ™ zaÅ‚adować zgÅ‚oszenia: '%1': %2.\\n"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Edytuj"
@@ -2121,11 +2787,11 @@ msgstr "Edytuj"
msgid "Edit Conditions"
msgstr "Modifier les conditions"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "Edytuj pola dla kolejki %1"
@@ -2134,23 +2800,27 @@ msgstr "Edytuj pola dla kolejki %1"
msgid "Edit Custom Fields for Class %1"
msgstr "Edytuj pola dla klasy %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr ""
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Edycja zdefiniowanych przez użytkownia pól dla zgłoszeń we wszystkich kolejkach"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Edytuj powiÄ…zania"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Zmodyfikuj zapytanie"
@@ -2158,16 +2828,16 @@ msgstr "Zmodyfikuj zapytanie"
msgid "Edit Relationships"
msgstr "Edytuj powiÄ…zania"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
-msgstr ""
+msgstr "Modyfikacja wyszukiwania"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Edytuj szablony kolejki %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr ""
@@ -2175,7 +2845,7 @@ msgstr ""
msgid "Edit scrips"
msgstr "Edytuj skrypty"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Edytuj szablony systemowe"
@@ -2183,15 +2853,19 @@ msgstr "Edytuj szablony systemowe"
msgid "Edit templates for %1"
msgstr "Edytuj szablony dla %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "EdytujZapisaneZapytania"
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Editing Configuration for Class %1"
msgstr "Edytuj konfiguracjÄ™ klasy %1"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Edytuj konfiguracjÄ™ kolejki %1"
@@ -2200,17 +2874,18 @@ msgstr "Edytuj konfiguracjÄ™ kolejki %1"
msgid "Editing Configuration for user %1"
msgstr "Edytuj konfigurację użytkownika %1"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Edytuj pole %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Edytuj listę członków grupy %1"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Edytuj listę członków prywatnej grupy %1"
@@ -2219,19 +2894,44 @@ msgstr "Edytuj listę członków prywatnej grupy %1"
msgid "Editing template %1"
msgstr "Edytuj szablon %1"
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Podstawy lub cel muszą być określone"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "e-mail"
-#: lib/RT/User_Overlay.pm:235
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Konfiguracja Poczty"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
-msgstr "Używany adres e-mail "
+msgstr "Używany adres e-mail"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "adres e-mail"
@@ -2239,19 +2939,23 @@ msgstr "adres e-mail"
msgid "EmailEncoding"
msgstr "kodowanie e-maila"
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "WÅ‚Ä…czone"
+
#: NOT FOUND IN SOURCE
msgid "Enabled (Unchecking this box disables this Class)"
msgstr "Udostępniona (nieoznaczenie tego pola spowoduje, że klasa będzie niedostępna)"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Udostępnione (nieoznaczenie tego pola spowoduje, że pole będzie niedostępne)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Udostępniona (nieoznaczenie tego pola spowoduje, że grupa będzie niedostępna)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Udostępniona (nieoznaczenie tego pola spowoduje, że kolejka będzie niedostępna)"
@@ -2263,41 +2967,73 @@ msgstr "Dostępne klasy"
msgid "Enabled Custom Fields"
msgstr "Dostępne pola definiowane przez użytkownika"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Dostępne kolejki"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
-msgstr "Dostępny status %1"
+msgstr "Aktywny status %1"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "Statut actif: %1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Zaszyfruj"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Enter Articles or URIs to link Articles to. Seperate multiple entries with spaces."
msgstr "Aby powiązać artykuły, wprowadź artykuły lub URI oddzielone spacjami."
-#: lib/RT/CustomField_Overlay.pm:64
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Wprowadzanie wielu wartości"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Aby powiązać obiekty, wprowadź URI obiektów oddzielone spacjami."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Wprowadzanie jednej wartości"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Aby powiązać kolejki, wprowadź URI kolejek oddzielone spacjamii."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Aby powiązać zgłoszenia, wprowadź numery zgłoszeń lub URI oddzielone spacjami."
@@ -2305,15 +3041,19 @@ msgstr "Aby powiązać zgłoszenia, wprowadź numery zgłoszeń lub URI oddzielo
msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces."
msgstr "Aby powiązać zgłoszenia, wprowadź numery zgłoszeń lub URI oddzielone spacjami."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
-msgstr "Saisir %1 valeurs maximum"
+msgstr "Wprowadź wartości aż do %1"
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "BÅ‚Ä…d"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Błąd w określeniu parametrów kolejki->Dodaj Obserwatora"
@@ -2321,23 +3061,43 @@ msgstr "Błąd w określeniu parametrów kolejki->Dodaj Obserwatora"
msgid "Error in parameters to Queue->DelWatcher"
msgstr "Błąd w określeniu parametrów kolejki -> Usuń Obserwatora"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Błąd w określeniu parametrów kolejki -> Usuń Obserwatora"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Błąd w określeniu parametrów zgłoszenia -> Dodaj Obserwatora"
#: NOT FOUND IN SOURCE
msgid "Error in parameters to Ticket->DelWatcher"
-msgstr " Błąd w określeniu parametrów zgłoszenia -> Usuń Obserwatora"
+msgstr "Błąd w określeniu parametrów zgłoszenia -> Usuń Obserwatora"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Błąd w określeniu parametrów Zgłoszenia-> Usuń Obserwatora"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Eskaluj zgłoszenia"
@@ -2345,18 +3105,38 @@ msgstr "Eskaluj zgłoszenia"
msgid "Estimate"
msgstr "Estimer"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Szacowane"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Wszyscy"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Przykład:"
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ExternalAuthId"
msgstr "Zewnętrzne AuthId"
@@ -2365,10 +3145,14 @@ msgstr "Zewnętrzne AuthId"
msgid "ExternalContactInfoId"
msgstr "ExternalContactInfoId"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Informacje dodatkowe"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Extract article from ticket #%1"
msgstr "Wydziel artykuł ze zgłoszenia #%1"
@@ -2377,29 +3161,61 @@ msgstr "Wydziel artykuł ze zgłoszenia #%1"
msgid "Extract article from ticket #%1 into class %2"
msgstr "Wydziel artykuł ze zgłoszenia #%1 w klasie %2"
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
msgstr ""
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Nie udało się wyszukać członków grupy 'Uprawnieni'"
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Nie udało się wyszukać członków grupy 'Nieuprawnieni'"
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Nie udało się załadować modułu %1. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr ""
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Lut"
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Lut."
@@ -2407,36 +3223,52 @@ msgstr "Lut."
msgid "February"
msgstr "Luty"
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
# Nie jestem pewien: jedno słowo!
-#: html/Elements/SelectAttachmentField:50
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Nazwa pliku"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr "Podaj argumenty"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
-msgstr "Saisir dans plusieurs champs de type texte"
+msgstr "Wypełń pola tekstowe"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
-msgstr "Saisir dans un champ de type texte"
+msgstr "Wypełń jedno pole tekstowe"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Saisir dans %1 champs de type texte maximum"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr ""
@@ -2444,19 +3276,23 @@ msgstr ""
msgid "Fin"
msgstr "Koniec"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Końcowy priorytet"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "Końcowy priorytet"
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Find group whose"
msgstr "Wyszukaj grupę, której"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Wyszukaj grupy, których:"
@@ -2464,19 +3300,23 @@ msgstr "Wyszukaj grupy, których:"
msgid "Find new/open tickets"
msgstr "Wyszykaj nowe/otwarte zgłoszenia"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Wyszukaj użytkowników, których"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Wyszukaj zgłoszenia"
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Finish Approval"
msgstr "Zakończ zatwierdzanie"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Pierwsze"
@@ -2484,28 +3324,66 @@ msgstr "Pierwsze"
msgid "First page"
msgstr "Pierwsza strona"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Ble ble"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "ble ble"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "WymuÅ› zmianÄ™"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
+msgstr "Format"
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Przekaż"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Przekaż wiadomość"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Przekaż Wiadomość i Powróć"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Przekaż wiadomość"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Przekaż wiadomości do trzecich osób"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
msgstr ""
-#: html/Search/Results.html:145
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "PrzekażWiadomość"
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "Wyszukano %1 zgłoszeń"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Wyszukany obiekt"
@@ -2525,32 +3403,52 @@ msgstr "FreeformMultiple"
msgid "FreeformSingle"
msgstr "FreeformSingle"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Częstotliwość"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Pt"
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Pt."
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "PiÄ…tek"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Pełne nagłówki"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Ogólne"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Pobierz szablon z pliku"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Getting the current user from a pgp sig\\n"
msgstr "Uzyskanie aktualnego użytkownika na podstawie podpisu pgp\\n"
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Nadany dla %1"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Globalna"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr ""
@@ -2558,37 +3456,63 @@ msgstr ""
msgid "Global Scrips"
msgstr "Skrypty globalne"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr ""
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr ""
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Szablon globalny: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Pobierz"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Start!"
#: NOT FOUND IN SOURCE
msgid "Good pgp sig from %1\\n"
-msgstr "Poprawny podpis pgp dla %1\\n "
+msgstr "Poprawny podpis pgp dla %1\\n"
#: NOT FOUND IN SOURCE
msgid "Goto page"
msgstr "Przejdź do strony"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Przejdź do zgłoszenia"
@@ -2596,7 +3520,19 @@ msgstr "Przejdź do zgłoszenia"
msgid "Grand"
msgstr "Accorder"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Wykres"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Grupa"
@@ -2604,28 +3540,37 @@ msgstr "Grupa"
msgid "Group %1 %2: %3"
msgstr "Grupa %1 %2: %3"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Uprawnienia grupowe"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Grupa ma już członka"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Grupa ma już członka: %1"
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Nie udało się utworzyć grupy: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Grupa została utworzona"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Nie ma takiego członka grupy"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Nie udało się wyszukać grupy"
@@ -2637,32 +3582,60 @@ msgstr "Nie udało się wyszukać grupy.\\n"
msgid "Group not specified.\\n"
msgstr "Grupa nie została określona.\\n"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Uprawnienia grupowe"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Grupy"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Nie można przypisac grup jako członków tych grup"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr ""
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
+msgstr "Grupy do których należy ten użytkownik"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
msgstr ""
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Witaj!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Witaj, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historia"
@@ -2670,29 +3643,46 @@ msgstr "Historia"
msgid "History for article #%1"
msgstr "Historia artykułu #%1"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "Historique du groupe %1"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "Historique de l'utilisateur %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "Tel. domowy"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
-msgstr "Start"
+msgstr "Strona domowa"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Godzina"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
-msgstr ""
+msgstr "Godziny"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "Posiadam %quant(%1,concrete mixer)."
@@ -2701,39 +3691,52 @@ msgstr "Posiadam %quant(%1,concrete mixer)."
msgid "I have [quant,_1,concrete mixer]."
msgstr "I have [quant,_1,concrete mixer]."
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
+#: lib/RT/Date.pm:114
+msgid "ISO"
msgstr ""
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
-msgstr "Nr "
+msgstr "Nr"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identyfikacja użytkownika"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Jeśli potwierdzenie zostało odrzucone, odrzuć oryginał i usuń oczekujące potwierdzenia"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Jeśli zgłaszający nie został określony, twórz zgłoszenia dla tego użytkownika."
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Jeśli kolejka nie została określona, twórz zgłoszenia w tej kolejce."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Jeśli ta aplikacja została zachwiana, obcy lokalny użytkownik mógł używać tej aplikacji, aby uzyskać do RT dostęp na prawach administratora"
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Jeśli zmodyfikowałeś coś powyżej"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Niedopuszczalna wartość dla %1"
@@ -2741,7 +3744,7 @@ msgstr "Niedopuszczalna wartość dla %1"
msgid "Image"
msgstr "Image"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Pole, które nie może być powielane"
@@ -2749,66 +3752,105 @@ msgstr "Pole, które nie może być powielane"
msgid "Include disabled classes in listing."
msgstr "Uwzględnij na liście nieaktywne klasy"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/CustomFields/index.html:86
msgid "Include disabled custom fields in listing."
msgstr "Uwzględnij na liście nieaktywne pola."
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Uwzględnij na liście nieaktywne grupy."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Uwzględnij na liście nieaktywne kolejki."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Uwzględnij w wyszukiwaniu nieaktywnych użytkowników."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr ""
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
msgstr ""
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
msgstr ""
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "PoczÄ…tkowy priorytet"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "PoczÄ…tkowy priorytet"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Błąd na wejściu"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Błąd wewnętrzny"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "Błąd wewnętrzny: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Nieprawidłowy typ grupy"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Nieprawidłowe uprawnienie"
@@ -2816,61 +3858,86 @@ msgstr "Nieprawidłowe uprawnienie"
msgid "Invalid Type"
msgstr "Type invalide"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Nieprawidłowe dane"
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Niepoprawny obiekt"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Invalid owner. Defaulting to 'nobody'."
msgstr "Nieprawidłowy właściciel. Domyślnie 'nikt'"
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Nieprawidłowa kolejka"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Nieprawidłowe uprawnienie"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "Nieprawidłowa wartość dla %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Nieprawidłowa wartość pola"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Nieprawidłowy status"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Bardzo ważne, aby nieuprawnieni użytkownicy nie posiadali uprawnień do uruchomienia tej aplikacji."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Sugeruje się, aby utworzyć nieuprawnionego użytkownika w odpowiedniej grupie o odpowiednim dostępie do RT, aby uruchomić tę aplikację"
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Wymaga kilku argumentów:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
-msgstr ""
+msgstr "Kursywa"
#: NOT FOUND IN SOURCE
msgid "Items pending my approval"
msgstr "Pozycje oczekujÄ…ce na moje zatwierdzenie"
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Sty"
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Sty."
@@ -2878,11 +3945,15 @@ msgstr "Sty."
msgid "January"
msgstr "Styczeń"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Dołącz albo opuść tę grupę"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Lip"
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Lip."
@@ -2890,11 +3961,15 @@ msgstr "Lip."
msgid "July"
msgstr "Lipiec"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Wszystko"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Cze"
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Cze."
@@ -2902,6 +3977,10 @@ msgstr "Cze."
msgid "June"
msgstr "Czerwiec"
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Keyword"
msgstr "SÅ‚owo kluczowe"
@@ -2910,23 +3989,27 @@ msgstr "SÅ‚owo kluczowe"
msgid "Lang"
msgstr "Język"
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Język"
-#: html/Search/Elements/EditFormat:79
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Język."
+
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
-msgstr ""
+msgstr "Duże"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Ostatnie"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Ostatnia modyfikacja"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Ostatnio modyfikowane"
@@ -2934,30 +4017,67 @@ msgstr "Ostatnio modyfikowane"
msgid "Last Notified"
msgstr "Ostatnio powiadomiony"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Ostatnio zaktualizowane"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "Ostatnio zaktualizowane przez"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Ostatnio zaktualizowane przez"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdated"
msgstr "OstAktualiz"
-#: html/Search/Elements/PickBasics:103
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "OstAktPrzez"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Pozostały"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Udostępnij temu użytkownikowi RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Przydziel uprawnienia temu użytkownikowi"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Limiting owner to %1 %2"
msgstr "Ograniczenie właściciela do %1 %2"
@@ -2966,33 +4086,31 @@ msgstr "Ograniczenie właściciela do %1 %2"
msgid "Limiting queue to %1 %2"
msgstr "Ograniczenie kolejki do %1 %2"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
-msgstr ""
+msgstr "ÅÄ…cze"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Połączenie już istnieje"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Nie udało się utworzyć połączenia"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Połączenie zostało utworzone (%1)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Połączenie zostało usunięte (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Połączenie nie zostało odnalezione"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Powiąż zgłoszenie #%1"
@@ -3001,40 +4119,70 @@ msgstr "Powiąż zgłoszenie #%1"
msgid "Link ticket %1"
msgstr "Lier au ticket %1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "PowiÄ…zane"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr ""
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "PowiÄ…zania"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Załaduj"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Załaduj zapisane zapytanie:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr ""
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "Załadowano %1 %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Załadowane moduły PERL"
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
-msgid "Loaded search %1"
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
msgstr ""
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Ustawienia regionalne"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Lokalizacja"
@@ -3042,88 +4190,108 @@ msgstr "Lokalizacja"
msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
msgstr "Ścieżka logowania %1 nie została odnaleziona lub nie mógła być zapisana.\\n Nie udało się uruchomić RT"
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "Zalogowano jako %1"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Wylogowano"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Zaloguj siÄ™"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Wyloguj siÄ™"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr ""
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Poczta"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Wprowadź właściciela"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Wprowadź status"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Wprowadź termin realizacji"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Wprowadź datę zamknięcia"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Wprowadź datę rozpoczęcia realizacji"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Wprowadź datę rozpoczęcia realizacji"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Wprowadź datę wpływu"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Wprowadź priorytet"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Wprowadź kolejkę"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Wprowadź temat"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr ""
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
-msgstr "Administracja polami zdefiniowanymi przez użytkownika "
+msgstr "Administracja polami zdefiniowanymi przez użytkownika"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Administracja grupami i członkami grup"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Administracja właściwościami i konfiguracją, które dotyczą wszystkich kolejek"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Administracja kolejkami i specyficznymi właściwościami kolejek"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Administracja użytkownikami i hasłami"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mar."
@@ -3131,125 +4299,158 @@ msgstr "Mar."
msgid "March"
msgstr "Marzec"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Zaznaczono wszystkie wiadomości jako przeczytane"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
msgid "May"
msgstr "Maj"
-#: lib/RT/Date.pm:445
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Maj"
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Członek"
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Członek %1 dodany"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Członek %1 usunięty"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Członek grupy został dodany"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Członek grupy został dodany: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Członek grupy został usunięty"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Członek grupy nie został usunięty"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Członek grupy"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "MemberOf"
msgstr "CzłonekGrupy"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Członkowie grup"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "Członkowstwo w %1 dodane"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "Członkowstwo w %1 usunięte"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
-msgstr "Affiliations"
+msgstr "Członkostwo"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
-msgstr "Affiliations de l'utilisateur %1"
+msgstr "Członkostwo użytkownika %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Udało się połączyć"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Nie udało się połączyć. Nie udało się ustawić efektywnego Id"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr ""
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Połączyć w"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Połączono z %1"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Wiadomość"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2451
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Wiadomość nie mogła zostać zapisana"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Wiadomość zapisana"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Powiadomienie o tym zgłoszeniu nie zostanie wysłane do..."
-#: html/Elements/SelectTimeUnits:47
-msgid "Minutes"
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
msgstr ""
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr ""
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr "Minuty"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Brakujący klucz główny?: %1:"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Tel. komórkowy"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
msgstr "Tel. komórkowy"
@@ -3269,12 +4470,12 @@ msgstr "Modyfikuj Listę Praw Dostępu"
msgid "Modify Custom Field %1"
msgstr "Modyfikuj pole %1"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr ""
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr ""
@@ -3283,23 +4484,23 @@ msgstr ""
msgid "Modify Custom Fields which apply to all queues"
msgstr "Modyfikuj pola, które dotyczą wszystkich kolejek"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Zmodyfikuj uprawnienia grup"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Modyfikuj Członków"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Zapisz uprawnienia"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Modyfikuj szablony skryptów dla tej kolejki"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Modyfikuj skrypty dla tej kolejki"
@@ -3307,11 +4508,11 @@ msgstr "Modyfikuj skrypty dla tej kolejki"
msgid "Modify Template %1"
msgstr "Modyfikuj szablon %1"
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Zmodyfikuj uprawnienia użytkowników"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Modyfikuj pole dla kolejki %1"
@@ -3320,12 +4521,12 @@ msgstr "Modyfikuj pole dla kolejki %1"
msgid "Modify a CustomField that applies to all queues"
msgstr "Modyfikuj pole, które dotyczy wszystkich kolejek"
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Modyfikuj skrypt dla kolejki %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Modyfikuj skrypt, który dotyczy wszystkich kolejek"
@@ -3333,30 +4534,38 @@ msgstr "Modyfikuj skrypt, który dotyczy wszystkich kolejek"
msgid "Modify article #%1"
msgstr "Modyfikuj artykuł #%1"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr ""
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Modyfikuj daty dla #%1"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Modyfikuj daty dla zgłoszenia # %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Modyfikuj globalne pola definiowane przez użytkownika"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Modyfikuj globalne uprawnienia grupowe"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Modyfikuj globalne uprawnienia grupowe"
@@ -3372,114 +4581,136 @@ msgstr "Modifier les droits globaux des utilisateurs"
msgid "Modify global scrips"
msgstr "Modyfikuj globalne skrypty"
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Modyfikuj globalne uprawnienia użytkowników"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Modyfikuj globalne uprawnienia użytkowników."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Modyfikuj grupowe dane pośrednie lub usuń grupę"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Modyfikuj uprawnienia grupowe dla pola %1"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Modyfikuj uprawnienia grupowe dla grupy %1"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Modyfikuj uprawnienia grupowe dla kolejki %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Modyfikuj listę członków tej grupy"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Modyfikuj konto w RT"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Modyfikuj użytkowników powiązanych z kolejką %1"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Modyfikuj użytkowników powiązanych ze zgłoszeniem %1"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Modyfikuj skrypty dla kolejki %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Modyfikuj skrypty, które dotyczą wszystkich kolejek"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Edytuj szablon %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Modyfikuj szablony, które dotyczą wszystkich kolejek"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr ""
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Modyfikuj grupÄ™ %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Modyfikuj obserwatorów kolejki"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Modyfikuj użytkownika %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Modyfikuj zgłoszenie %1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Modyfikuj zgłoszenie %1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Modyfikuj zgłoszenia"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr ""
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Modyfikuj uprawnienia użytkowników dla grupy %1"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Modyfikuj uprawnienia użytkowników dla kolejki %1"
@@ -3492,11 +4723,23 @@ msgstr "Modyfikuj obserwatorów kolejki %1"
msgid "ModifyACL"
msgstr "ModifyACL"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "ModifyOwnMembership"
@@ -3504,48 +4747,64 @@ msgstr "ModifyOwnMembership"
msgid "ModifyQueueWatchers"
msgstr "ModifyQueueWatchers"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "ModifyScrips"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "ModifySelf"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "ModifyTemplate"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "ModifyTicket"
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Pon"
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Pon."
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Poniedziałek"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Więcej o %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Przesuń w dół"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Przesuń w górę"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Wielokrotny"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Należy określić atrybut 'Nazwa'"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "%1 moich zgłoszeń"
@@ -3554,23 +4813,35 @@ msgstr "%1 moich zgłoszeń"
msgid "My Approvals"
msgstr "Moje potwierdzenia"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
-msgstr ""
+msgstr "Mój dzień"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Moje potwierdzenia"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Moje zapytania"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Nazwa"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Używana nazwa"
@@ -3578,15 +4849,19 @@ msgstr "Używana nazwa"
msgid "Name matches"
msgstr "Nazwa zgadza siÄ™ z"
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Need approval from system administrator"
msgstr "Wymagane potwierdzenie od administratora systemu"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Nigdy"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Nowe"
@@ -3594,15 +4869,15 @@ msgstr "Nowe"
msgid "New Article"
msgstr "Nowy artykuł"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nowe powiÄ…zania"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Nowe hasło"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Nowe zgłoszenie oczekujące na zatwierdzenie"
@@ -3614,47 +4889,52 @@ msgstr "Nowe zapytanie"
msgid "New Relationships"
msgstr "Nowe powiÄ…zania"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Nowe wyszukiwanie"
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "New class"
msgstr "Nowa klasa"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Nowe pole def. przez użytkownika"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Nowa grupa"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Nowe wiadomości"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Nowe hasło"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Nowe hasło zostało wysłane"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Nowa kolejka"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "New request"
-msgstr "Nouvelle demande"
+msgstr "Nowe przypomnienie:"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nowe uprawnienia"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Nowy skrypt"
@@ -3662,27 +4942,27 @@ msgstr "Nowy skrypt"
msgid "New search"
msgstr "Nowe wyszukiwanie"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Nowy szablon"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Nowe zgłoszenie"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Nowe zgłoszenie nie istnieje"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Nowy użytkownik"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Nowy użytkownik został nazwany"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nowi obserwatorzy"
@@ -3690,11 +4970,11 @@ msgstr "Nowi obserwatorzy"
msgid "New window setting"
msgstr "Nowe ustawienia okna"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Następne"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Następna strona"
@@ -3702,63 +4982,72 @@ msgstr "Następna strona"
msgid "Next page"
msgstr "Następna strona"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "Pseudonim"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Pseudonim"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
msgid "No"
msgstr "Nie"
-#: html/Admin/CustomFields/UserRights.html:145
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Nie zdefiniowano klasy"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Brak pola definiowanego przez użytkownika"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Nie zdefiniowano pola def. przez użytkownika"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Nie zdefiniowano grupy"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Brak zapytania"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Nie zdefiniowano kolejki"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Nie odnaleziono użytkownika RT. Proszę skontaktować się z administratorem RT.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Brak tematu"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Brak szablonu"
#: NOT FOUND IN SOURCE
msgid "No Ticket specified. Aborting ticket "
-msgstr "Nie określono zgłoszenia. Odrzucenie zgłoszenia"
+msgstr "Nie określono zgłoszenia. Odrzucenie zgłoszenia "
#: NOT FOUND IN SOURCE
msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
msgstr "Nie określono zgłoszenia. Odrzucenie modyfikacji zgłoszenia\\n\\n"
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Zawieszenie operacji"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Nie określono kolumny"
@@ -3766,7 +5055,7 @@ msgstr "Nie określono kolumny"
msgid "No command found\\n"
msgstr "Nie udało się wyszukać polecenia\\n"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Nie wprowadzono komentarza dotyczącego tego użytkownika"
@@ -3774,93 +5063,133 @@ msgstr "Nie wprowadzono komentarza dotyczącego tego użytkownika"
msgid "No correspondence attached"
msgstr "Nie załączono korespondencji"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Brak opisu dla %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Nie określono grupy"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Brak załączonej wiadomości"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Nie ustawiono hasła"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Brak uprawnień do tworzenia kolejek"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Brak uprawnień do tworzenia zgłoszeń w kolejce '%1'"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Brak uprawnień do tworzenia użytkowników"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Brak uprawnień do wyświetlenia tego zgłoszenia"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr ""
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Brak uprawnień do przeglądania aktualizacji zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Nie określono zarządzającego"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Nie wybrano zarzÄ…dzajÄ…cych."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Brak klucza prywatnego"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Brak kolejek odpowiadajÄ…cych kryteriom wyszukiwania"
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Nie udało się wyszukać uprawnień"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Nie przyznano uprawnień."
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr ""
-
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Brak kryteriów wyszukiwania"
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Brak tematu"
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "No ticket id specified"
msgstr "Nie określono numeru zgłoszenia"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "Nie znaleziono zgłoszeń."
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Nie określono typu transakcji"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Nie znaleziono używalnych kluczy."
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Brak użytkowników odpowiadających kryteriom wyszukiwania"
@@ -3868,35 +5197,43 @@ msgstr "Brak użytkowników odpowiadających kryteriom wyszukiwania"
msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
msgstr "Brak aktualnego użytkownika RT. Proszę skontaktować się z administratorem RT.\\n"
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Nie wysłano wartości do zestawu!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Nikt"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Brak"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "NieistniejÄ…ce pole?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
-msgstr ""
+msgstr "Nie ustawiono"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Nie znaleziono"
#: NOT FOUND IN SOURCE
msgid "Not logged in"
msgstr "Nie udało się zalogować"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Nie udało się zalogować."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Nie ustawiona"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Jeszcze nie zaimplementowane."
@@ -3904,83 +5241,115 @@ msgstr "Jeszcze nie zaimplementowane."
msgid "Not yet implemented...."
msgstr "Jeszcze nie zaimplementowane..."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Uwagi"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Powiadomienie nie może zostać wysłane"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Wyślij powiadomienie do osób o uprawnieniach AdminCc"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Wyślij powiadomienie do osób o uprawnieniach AdminCc jako komentarz"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Wyślij powiadomienia do osób o uprawnieniach Cc"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Wyślij powiadomienia do osób o uprawnieniach Cc jako komentarz"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Wyślij powiadomienie do innych odbiorców"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Wyślij powiadomienie do innych odbiorców jako komentarz"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Wyślij powiadomienie do właściciela"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Wyślij powiadomienie do właściciela jako komentarz"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Powiadom Właściciela o odrzuceniu jego zgłoszenia"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Powiadom Zgłaszającego o zatwierdzeniu jego zgłoszenia przez wszystkich zatwierdzających"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Powiadom Zgłaszającego o zatwierdzeniu jego zgłoszenia przez niektórych zatwierdzających"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Wyślij powiadomienie do właścicieli i osób o uprawnieniach AdminCc o nowych pozycjach oczekujących na zatwierdzenie przez nich"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Wyślij powiadomienie do zgłaszających"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Wyślij powiadomienie do zgłaszających i osób o uprawnieniach Cc"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Wyślij powiadomienie do zgłaszających i osób o uprawnieniach Cc jako komentarz"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Wyślij powiadomienie do zgłaszających oraz osób o uprawnieniach Cc i AdminCc"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Wyślij powiadomienie do zgłaszających oraz osób o uprawnieniach Cc i AdminCC jako komentarz"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "Lis"
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Lis."
@@ -3988,37 +5357,49 @@ msgstr "Lis."
msgid "November"
msgstr "Listopad"
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Liczba rezultatów wyszukiwania"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr ""
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Nie udało się utworzyć obiektu"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr ""
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Obiekt został utworzony"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr ""
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Le type d'objet ne correspond pas"
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Paź"
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Paź."
@@ -4026,74 +5407,90 @@ msgstr "Paź."
msgid "October"
msgstr "Październik"
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Praca zdalna"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Zdalne modyfikacje"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Załaduj modyfikowane zdalnie"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "dnia"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr ""
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "w przypadku zamknięcia"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "w przypadku komentarza"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "w przypadku korespondencji"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "w przypadku rejestracji zgłoszeń"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "w przypadku zmiany właściciela"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "w przypadku zmiany priorytetu"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "w przypadku zmiany kolejki"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "w przypadku ponownego otwarcia"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "w przypadku zamykania zgłoszeń"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "w przypadku zmiany statusu"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "w przypadku transakcji"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Wyświetl tylko potwierdzenia dotyczące zgłoszeń zarejestrowanych po %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Wyświetl tylko potwierdzenia dotyczące zgłoszeń zarejestrowanych przed %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr ""
@@ -4101,11 +5498,15 @@ msgstr ""
msgid "Open"
msgstr "Otwarte"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Otwórz zgłoszenia"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Otwórz URL"
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Otwórz"
@@ -4113,7 +5514,7 @@ msgstr "Otwórz"
msgid "Open requests"
msgstr "Ouvrir les demandes"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Otwórz zgłoszenia"
@@ -4125,15 +5526,19 @@ msgstr "Otwórz zgłoszenia (z listy) w nowym oknie"
msgid "Open tickets (from listing) in another window"
msgstr "Otwórz zgłoszenia (z listy) w innym oknie"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Otwórz zgłoszenia, które są w trakcie ustalania (wymiany korespondencji)"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
+msgstr "Ustawienia"
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
msgstr ""
-#: html/Search/Elements/DisplayOptions:59
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "UporzÄ…dkuj wg"
@@ -4141,24 +5546,24 @@ msgstr "UporzÄ…dkuj wg"
msgid "Ordering and sorting"
msgstr "PorzÄ…dkowanie i sortowanie"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Firma"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Zgłoszenie źródłowe: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Zarejestrowano wychodzącą wiadomość o komentarzu"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Zarejestrowano wiadomość wychodzącą"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Z upływem czasu priorytet wzrasta do"
@@ -4166,27 +5571,33 @@ msgstr "Z upływem czasu priorytet wzrasta do"
msgid "Overview"
msgstr "PrzeglÄ…d"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Moje zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "OwnTicket"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Właściciel"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
-msgstr "Właściciel zmienił się z %1 na %2"
+msgstr "Zmieniono właściciela z %1 na %2"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "Właściciel nie mógł być ustanowiony."
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Wymuszono zmianę właściciela z %1 na %2"
@@ -4195,102 +5606,129 @@ msgstr "Wymuszono zmianę właściciela z %1 na %2"
msgid "Owner is"
msgstr "Właścicielem"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Strona"
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Strona %1 z %2"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Strona 1 z 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Strona nie została znaleziona"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Pager"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
msgstr "Nr pager'a"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Zgłoszenia nadrzędne"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Hasło"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Przypomnienie o haśle"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
-msgstr ""
+msgstr "Hasło zostało zmienione"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr ""
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
-msgstr ""
+msgstr "Hasło ustawione"
#: NOT FOUND IN SOURCE
msgid "Password too short"
msgstr "Hasło jest zbyt krótkie"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Hasło: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr ""
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Hasła są różne."
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Hasła są różne. Twoje hasło nie zostało zmienione."
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Osoby"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Wykonaj operację zdefiniowaną przez użytkownika"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Konfiguracja PERL"
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Odmowa dostępu"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
-msgstr ""
+msgstr "Odmowa dostępu"
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
msgstr ""
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Grupy prywatne"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Grupy prywatne"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Grupy prywatne:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Numery tel."
@@ -4298,33 +5736,68 @@ msgstr "Numery tel."
msgid "Placeholder"
msgstr "Placeholder"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Właściwości"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
+msgid "Preferences %1 for user %2."
msgstr ""
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr ""
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Prefs"
msgstr "Właściwości"
-#: lib/RT/Action/Generic.pm:195
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Informacja o przygotowaniu została wysłana do zgłaszającego"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Poprzednie"
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Poprzednie"
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Poprzednia strona"
@@ -4336,61 +5809,90 @@ msgstr "Poprzednia strona"
msgid "Pri"
msgstr "Poprzedni"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Nie udało się wyszukać zarządzającego %1."
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Drukuj wiadomość"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Priorytet"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Priorytet rozpoczyna siÄ™ od"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Prywatność"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Prywatne:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Klucz prywatny"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Uprawnieni"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Uprawniony status: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Uprawnieni użytkownicy"
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Projects"
msgstr "Projets"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Grupa do użytku wewnętrznego"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Zapytania"
+
+#: share/html/Search/Edit.html:64
msgid "Query"
msgstr "Zapytanie"
-#: html/Search/Build.html:121
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Kreator zapytań"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
-msgstr ""
+msgstr "Zapytanie:"
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
-msgstr "Kolejka "
+msgstr "Kolejka"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
@@ -4400,7 +5902,7 @@ msgstr "Nie udało się wyszukać kolejki %1"
msgid "Queue '%1' not found\\n"
msgstr "Nie udało się wyszukać kolejki '%1 '\\n"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Nazwa kolejki"
@@ -4408,60 +5910,104 @@ msgstr "Nazwa kolejki"
msgid "Queue Scrips"
msgstr "Skrypty kolejki"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Kolejka już istnieje"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Nie udało się utworzyć kolejki"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Nie udało się załadować kolejki"
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Kolejka została utworzona"
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Id kolejki"
+
#: NOT FOUND IN SOURCE
msgid "Queue is not specified."
msgstr "Kolejka nie została określona."
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Nie udało się wyszukać kolejki"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Kolejki"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr ""
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr ""
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Szybkie wyszukiwanie"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Szybkie tworzenie zgłoszeń"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
-msgstr "RSS (XML)"
+msgstr "RSS"
#: NOT FOUND IN SOURCE
msgid "RT %1"
msgstr "RT %1"
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 dla %2"
@@ -4477,10 +6023,14 @@ msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
msgstr "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "Administracja RT"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "Adres poczty elektronicznej administratora RT"
+
#: NOT FOUND IN SOURCE
msgid "RT Authentication error."
msgstr "BÅ‚Ä…d autoryzacji w RT"
@@ -4489,6 +6039,10 @@ msgstr "BÅ‚Ä…d autoryzacji w RT"
msgid "RT Bounce: %1"
msgstr "Odbicie zgłoszenia przez RT: %1"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "Konfiguracja RT"
+
#: NOT FOUND IN SOURCE
msgid "RT Configuration error"
msgstr "BÅ‚Ä…d konfiguracji RT"
@@ -4497,7 +6051,7 @@ msgstr "BÅ‚Ä…d konfiguracji RT"
msgid "RT Critical error. Message not recorded!"
msgstr "Błąd krytyczny RT. Nie udało się zapisać wiadomości!"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "BÅ‚Ä…d RT"
@@ -4505,28 +6059,36 @@ msgstr "BÅ‚Ä…d RT"
msgid "RT Received mail (%1) from itself."
msgstr "RT otrzymał e-mail (%1) z RT"
-#: NOT FOUND IN SOURCE
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
msgid "RT Self Service"
msgstr "Samoobsługa RT"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "Zmienne RT"
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "RT - przeglÄ…d podstawowych informacji"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
+msgstr "RT - przegląd podstawowych informacji dla użytkownika %1"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr ""
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr ""
@@ -4542,7 +6104,7 @@ msgstr "Nie udało się wyszukać zgłaszającego przez przejrzenie zewnętrznej
msgid "RT couldn't find the queue: %1"
msgstr "Nie udało się wyszukać kolejki: %1"
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr ""
@@ -4550,8 +6112,8 @@ msgstr ""
msgid "RT couldn't validate this PGP signature. \\n"
msgstr "Nie udało się zatwierdzić tego podpisu PGP.\\n"
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT dla %1"
@@ -4567,11 +6129,27 @@ msgstr "RT wykonał twoje polecenia"
msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
msgstr "RT &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. Jest dystrybuowane jako <a href=\"http://www.gnu.org/copyleft/gpl.html\">Wersja 2 GNU General Public License.</a>"
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT thinks this message may be a bounce"
msgstr "Wg RT ta wiadomość może być informacją odbitą"
-#: html/Search/Simple.html:58
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr ""
@@ -4579,55 +6157,84 @@ msgstr ""
msgid "RT will process this message as if it were unsigned.\\n"
msgstr "RT będzie postępował z tą wiadomością tak, jakby była niepodpisana.\\n"
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr ""
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
msgstr "Email w RT wymaga autoryzacji podpisu PGP. Albo nie podpisałeś wiadomości, albo Twój podpis nie może być zweryfikowany."
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "RTFM Error"
msgstr "BÅ‚Ä…d RTFM"
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "ImiÄ™ i nazwisko"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
msgstr "RealName"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Adresat"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "PowiÄ…zanie %1 dodane"
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "Powiązanie %1 usunięte"
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "PowiÄ…zanie z %1 dodane"
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "Powiązanie z %1 usunięte"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Zgłoszenia powiązane"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "PowiÄ…zane z"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "RefersTo"
msgstr "PowiÄ…zaneZ"
@@ -4639,7 +6246,59 @@ msgstr "Popraw"
msgid "Refine search"
msgstr "Wprowadź szczegółowe kryteria wyszukiwania"
-#: html/Elements/Refresh:57
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Odśwież"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Odświeżaj tę stronę co %1 minut."
@@ -4648,72 +6307,76 @@ msgstr "Odświeżaj tę stronę co %1 minut."
msgid "Relationships"
msgstr "PowiÄ…zania"
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
-msgstr ""
+msgstr "Dodano przypomnienie '%1'"
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr ""
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr ""
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
-msgstr ""
+msgstr "Przypomnienia"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
-msgstr ""
+msgstr "Przypomnienia dla zgłoszenia nr %1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Usuń AdminCc"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Usuń zakładkę"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Usuń Cc"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Usuń zgłaszającego"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Odpowiedz"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Adres odpowiedzi"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Odpowiedz zgłaszającym"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Odpowiedz na zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "ReplyToTicket"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
-msgstr ""
+msgstr "Raporty"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Zgłaszający"
@@ -4729,65 +6392,81 @@ msgstr "Zgłaszający"
msgid "RequestorAddresses"
msgstr "AdresZgłaszającego"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Zgłaszający"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Zgłoszenia powinny być zrealizowane w ciągu"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Wymagany atrybut '%1' nie został określony"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Zresetuj"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr ""
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Tel. domowy"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Zamknij"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Zamknij zgłoszenie nr %1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Zamknięte"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
-msgstr ""
+msgstr "Zamknięte przez właściciela"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr ""
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr ""
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr ""
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Response to requestors"
msgstr "Odpowiedź dla zgłaszających"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Wyniki"
@@ -4795,11 +6474,15 @@ msgstr "Wyniki"
msgid "Results per page"
msgstr "Wyniki - liczba na stronÄ™"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Powróć do zgłoszenia"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Wpisz ponownie hasło"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Przywróć"
@@ -4807,49 +6490,48 @@ msgstr "Przywróć"
msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
msgstr "Uprawnienie %1 nie zostało wyszukane dla %2 %3 w zakresie %4 (%5)\\n"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Uprawnienie zostało przekazane"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Uprawnienie zostało przyznane"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Uprawnienie zostało załadowane"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Uprawnienie nie może być odebrane"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Nie udało się wyszukać uprawnienia"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Nie udało się załadować uprawnienia"
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Uprawnienie zostało odebrane"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Uprawnienia"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Nie udało się przydzielić uprawnień dla %1"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "Nie udało się odebrać uprawnień dla %1"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Role"
@@ -4857,74 +6539,111 @@ msgstr "Role"
msgid "RootApproval"
msgstr "RootApproval"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Wiersze"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr ""
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Linii na stronie"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Sob"
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Sob."
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Sobota"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Zapisz"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Zapisz zmiany"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Zapisz"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Zapisz jako Nowe"
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Zapisz zmiany"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Zapisano %1 %2"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
msgstr ""
-#: NOT FOUND IN SOURCE
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
msgstr "Zapisane zapytania"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Skrypt #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Skrypt został utworzony"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Atrybuty skryptu"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Skrypt został usunięty"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Skrypty"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Skrypty i Adresaci"
+
#: NOT FOUND IN SOURCE
msgid "Scrips for %1\\n"
msgstr "Skrypty dla %1\\n"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Skrypty, które dotyczą wszystkich kolejek"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Wyszukaj"
@@ -4932,16 +6651,12 @@ msgstr "Wyszukaj"
msgid "Search Criteria"
msgstr "Kryteria wyszukiwania"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr ""
+msgstr "Preferencje wyszukiwania"
# nie jestem pewien!
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Wyszukaj oczekujÄ…ce potwierdzenia"
@@ -4949,77 +6664,100 @@ msgstr "Wyszukaj oczekujÄ…ce potwierdzenia"
msgid "Search for articles"
msgstr "Wyszukaj artykuły"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
-msgstr ""
+msgstr "Wyszukiwanie zgłoszeń"
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
msgstr ""
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
-msgstr ""
+msgstr "Opcje wyszukiwań"
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr ""
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
msgstr ""
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr ""
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Zabezpieczenie:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
+msgstr "Zobacz też:"
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Zobacz dosłowne wiadomości wychodzące i ich odbiorców"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Zobacz prywatne komentarze do zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Zobacz podsumowania zgłoszeń"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "DostDoPólUżytk"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr ""
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "SeeQueue"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
msgid "Select"
-msgstr "Selectionner"
+msgstr "Wybierz"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
#: NOT FOUND IN SOURCE
msgid "Select a Class"
msgstr "Wybierz klasÄ™"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Wybierz pole definiowane przez użytkownika"
@@ -5027,79 +6765,87 @@ msgstr "Wybierz pole definiowane przez użytkownika"
msgid "Select a Custom Fields"
msgstr "Wybierz pole definiowane przez użytkownika"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Wybierz grupÄ™"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Wybierz kolejkÄ™"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr ""
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Wybierz użytkownika"
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Select class"
msgstr "Wybierz klasÄ™"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Wybierz pole"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr ""
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Wybór pól zdefiniowanych przez użytkownika dla zgłoszeń we wszystkich kolejkach"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Wybierz grupÄ™"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Wybór wielu wartości"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Wybór jednej wartości"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Wybierz kolejkÄ™"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr ""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Wybierz skrypt"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Wybierz szablon"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
-msgstr "Choisir un maximum de %1 valeurs "
+msgstr "Wybierz maksymalnie %1 wartości"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Wybierz użytkownika"
@@ -5111,15 +6857,19 @@ msgstr "Wybór wielu wartości"
msgid "SelectSingle"
msgstr "Wybór jednej wartości"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Zaznaczone pola"
-#: html/Admin/CustomFields/Objects.html:59
-msgid "Selected objects"
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
msgstr ""
-#: html/Widgets/SelectionBox:209
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr "Zaznaczone obiekty"
+
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr ""
@@ -5127,51 +6877,67 @@ msgstr ""
msgid "Self Service"
msgstr "Samoobsługa"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Wyślij e-mail do wszystkich obserwatorów"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Wyślij e-mail do wszystkich obserwatorów jako \"komentarz\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Wyślij e-mail do zgłaszających i osób o uprawnieniach Cc"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Wyślij e-mail do zgłaszających i osób o uprawnieniach Cc jako komentarz"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Wysyła wiadomość do zgłaszających"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
-msgstr "Wysyła e-mail do osób wymienionych w Cc i Bcc "
+msgstr "Wysyła e-mail do osób wymienionych w Cc i Bcc"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Wysyła e-mail do użytkowników o uprawnieniach CC"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Wysyła e-mail jako komentarz do użytkowników o uprawnieniach CC"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Wysyła e-mail do osób wymienionych w administracyjnym Cc"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Wysyła e-mail do osób wymienionych w administracyjnym Cc jako komentarz"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Wysyła e-mail do właściciela"
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Wrz"
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Wrz."
@@ -5183,47 +6949,68 @@ msgstr "Oddziel spacjami adresy URL"
msgid "September"
msgstr "Wrzesień"
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Ustawienia"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Pokaż"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Pokazuj potwierdzenia"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Wyświetlane kolumny"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Wyświetl wyniki"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Show advanced search options..."
msgstr "Wyświetl zaawansowane opcje wyszukiwania..."
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Wyświetl zatwierdzone zgłoszenia"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Wyświetl podstawowe informacje"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Wyświetl odrzucone zgłoszenia"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Wyświetl szczegóły"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Wyświetl zgłoszenia oczekujące na zatwierdzenie"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Wyświetl zgłoszenia oczekujące na pozostałe zatwierdzenia"
@@ -5239,43 +7026,68 @@ msgstr "Wyświetl streszczenia zgłoszeń"
msgid "ShowACL"
msgstr "ShowACL"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "PodglÄ…dPocztyWychodz"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "PodglądZapytańZapis"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "ShowScrips"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "ShowTemplate"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "ShowTicket"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "ShowTicketComments"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "Niszczarka"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Panel boczny"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "Podpisz"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "Domyślnie podpisuj"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Podpisz jako zgłaszający lub osoba o uprawnieniach Cc dla zgłoszenia lub kolejki"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Podpisz jako osoba o uprawnieniach AdminCc dla zgłoszenia lub kolejki"
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Podpis"
@@ -5283,31 +7095,47 @@ msgstr "Podpis"
msgid "Signed in as %1"
msgstr "Wpisany jako %1"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Podpisywanie nieaktywne"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "Podpisywanie aktywne"
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
-msgstr ""
+msgstr "Proste wyszukiwanie"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Pojedynczy"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Nazwa strony"
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
-msgstr ""
+msgstr "Rozmiar"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Pomiń menu"
-#: html/Search/Elements/EditFormat:78
-msgid "Small"
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
msgstr ""
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "Małe"
+
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr ""
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Sortuj"
@@ -5327,7 +7155,19 @@ msgstr "Sortuj wyniki wg"
msgid "SortOrder"
msgstr "SortOrder"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Sortowanie"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Arkusz kalkulacyjny"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Etap"
@@ -5339,7 +7179,7 @@ msgstr "Zamrożone"
msgid "Start page"
msgstr "Strona powitalna"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Realizacja rozpoczęta"
@@ -5347,7 +7187,11 @@ msgstr "Realizacja rozpoczęta"
msgid "Started date '%1' could not be parsed"
msgstr "Data rozpoczęcia realizacji '%1' nie może być rozpoznana"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "PoczÄ…tek realizacji"
@@ -5359,19 +7203,24 @@ msgstr "PoczÄ…tek realizacji od"
msgid "Starts date '%1' could not be parsed"
msgstr "Data rozpoczęcia realizacji '%1' nie może być rozpoznana"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Województwo"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
-msgstr "Status "
+msgstr "Status"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Zmiana statusu"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Status zmieniony z %1 na %2"
@@ -5379,19 +7228,30 @@ msgstr "Status zmieniony z %1 na %2"
msgid "StatusChange"
msgstr "Zmiana statusu"
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Przejmij"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Przejmij zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "PrzejecieZgloszen"
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Krok %1 z %2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "Przejęte od %1"
@@ -5400,20 +7260,29 @@ msgstr "Przejęte od %1"
msgid "Stolen from %1 "
msgstr "Przejęte od %1 "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
-msgstr ""
+msgstr "Styl"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Temat"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Temat został zmieniony na %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Zastosuj"
@@ -5425,10 +7294,49 @@ msgstr "Wykonaj zapytanie"
msgid "Submit Workflow"
msgstr "Wprowadź obieg (Workflow)"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "Subskrybuj"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "Subskrypcja"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Powiodło się"
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Summary"
msgstr "Streszczenie"
@@ -5437,89 +7345,131 @@ msgstr "Streszczenie"
msgid "Summary matches"
msgstr "Streszczenie zgadza siÄ™ z"
-#: lib/RT/Date.pm:423
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Nd"
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Nie."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Niedziela"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "SuperUser"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Zawieszony"
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "System"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Konfiguracja systemu"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Domyślne ustawienie systemu"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "BÅ‚Ä…d systemowy"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr ""
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Narzędzia systemowe"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Błąd systemowy. Uprawnienie nie zostało przekazane"
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Błąd systemowy. Uprawnienie nie zostało przydzielone"
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Grupy systemowe"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "Grupa ról systemowych do użytku wewnętrznego"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TEST_STRING"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Przyjmij"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Przyjmij zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "PrzyjęcieZgłoszeń"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Przyjęty"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Szablon"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Szablon #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Szablon został usunięty"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr ""
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Nie udało się wyszukać szablonu"
@@ -5527,15 +7477,15 @@ msgstr "Nie udało się wyszukać szablonu"
msgid "Template not found\\n"
msgstr "Nie udało się wyszukać szablonu\\n"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Szablon nie został rozpoznany"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr ""
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Szablony"
@@ -5547,46 +7497,51 @@ msgstr "Szablony dla %1\\n"
msgid "Text"
msgstr "Texte"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "To już jest aktualna wartość"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "To nie jest wartość tego pola"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "To jest ta sama wartość"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Ten użytkownik/ grupa już dysponują tym prawem"
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Ten zarządzający jest już %1 dla tej kolejki"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Ten zarządzający jest już %1 dla tego zgłoszenia"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Ten zarzÄ…dzajÄ…cy nie jest %1 dla tej kolejki"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
msgstr "Ten zarządzający nie jest %1 dla tego zgłoszenia"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Ta kolejka nie istnieje"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "To zgłoszenie ma niewykonane zgłoszenia zależne"
@@ -5594,27 +7549,27 @@ msgstr "To zgłoszenie ma niewykonane zgłoszenia zależne"
msgid "That user already has that right"
msgstr "Ten użytkownik już posiada to uprawnienie"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Ten użytkownik już jest właścicielem tego zgłoszenia"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Taki użytkownik nie istnieje"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Ten użytkownik już posiada to uprawnienie"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Ten użytkownik nie jest uprawniony"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Ten użytkownik jest już uprawniony"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Ten użytkownik jest teraz nieuprawniony"
@@ -5622,23 +7577,27 @@ msgstr "Ten użytkownik jest teraz nieuprawniony"
msgid "That user is now unprivilegedileged"
msgstr "Cet utilisateur a perdu ses droits"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Ten użytkownik może nie posiadać zgłoszeń w tej kolejce"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "To nie jest id typu liczbowego"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Podstawowe informacje"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "CC zgłoszenia"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "Administracyjne CC zgłoszenia"
@@ -5646,7 +7605,11 @@ msgstr "Administracyjne CC zgłoszenia"
msgid "The comment has been recorded"
msgstr "Komentarz został zapisany"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Następujące polecenie wyszuka wszystkie aktywne zgłoszenia w kolejce głównej i ustawi ich priorytet na 99, jeśli nie zostały zmodyfikowane w ciągu ostatnich 4 godzin:"
@@ -5654,31 +7617,106 @@ msgstr "Następujące polecenie wyszuka wszystkie aktywne zgłoszenia w kolejce
msgid "The following commands were not proccessed:\\n\\n"
msgstr "Następujące polecenia nie zostały wykonane:\\n\\n"
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Ustawiono nową wartość."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "Właściciel zgłoszenia"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Zgłaszający"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Motyw"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "To zgłoszenie zawiera nieprzeczytane wiadomości."
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Te komentarze nie są generalnie widoczne dla użytkownika"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr ""
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Ta funkcja jest dostępna tylko dla administratora systemu"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Ta wiadomość zostanie wysłana do..."
@@ -5686,15 +7724,15 @@ msgstr "Ta wiadomość zostanie wysłana do..."
msgid "This ticket %1 %2 (%3)\\n"
msgstr "To zgłoszenie %1 %2 (%3)\\n"
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Ta aplikacja pozwala użytkownikowi na przypadkowe uruchomienie tzw. perl modułów z RT"
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Nie określono zawartości tej transakcji"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "%1 zgłoszeń tego użytkownika o najwyższym priorytecie"
@@ -5703,10 +7741,22 @@ msgstr "%1 zgłoszeń tego użytkownika o najwyższym priorytecie"
msgid "This user's 25 highest priority tickets"
msgstr "25 zgłoszeń tego użytkownika o najwyższym priorytecie"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Czw"
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Czw."
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Czwartek"
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Zgłoszenie"
+
#: NOT FOUND IN SOURCE
msgid "Ticket # %1 %2"
msgstr "Zgłoszenie nr %1 %2"
@@ -5715,24 +7765,29 @@ msgstr "Zgłoszenie nr %1 %2"
msgid "Ticket # %1 Jumbo update: %2"
msgstr "Ticket n°%1 Jumbo update: %2"
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Pełna aktualizacja: %2 zgłoszenia nr %1"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Zgłoszenie nr %1 %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "Zgłoszenie %1"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Zgłoszenie %1 zostało utworzone w kolejce '%2'"
@@ -5741,16 +7796,17 @@ msgstr "Zgłoszenie %1 zostało utworzone w kolejce '%2'"
msgid "Ticket %1 loaded\\n"
msgstr "Zgłoszenie %1 zostało załadowane\\n"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Zgłoszenie %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr ""
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Historia zgłoszenia nr %1 %2"
@@ -5759,11 +7815,15 @@ msgstr "Historia zgłoszenia nr %1 %2"
msgid "Ticket Id"
msgstr "Nr zgłoszenia"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Zgłoszenie zamknięte"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Wyszukiwanie zgłoszeń"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr ""
@@ -5771,18 +7831,22 @@ msgstr ""
msgid "Ticket attachment"
msgstr "Załącznik do zgłoszenia, którego"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Zawartość zgłoszenia"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Typ zawartości zgłoszenia"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Nie udało się utworzyć zgłoszenia z powodu wewnętrznego błędu"
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "Zgłoszenie nie mogło być załadowane"
+
#: NOT FOUND IN SOURCE
msgid "Ticket created"
msgstr "Zgłoszenie zostało utworzone"
@@ -5795,11 +7859,15 @@ msgstr "Nie udało się utworzyć zgłoszenia"
msgid "Ticket deleted"
msgstr "Zgłoszenie zostało usunięte"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Ticket id not found"
msgstr "Nie udało się wyszukać numeru zgłoszenia"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Meta-dane zgłoszenia"
@@ -5807,7 +7875,7 @@ msgstr "Meta-dane zgłoszenia"
msgid "Ticket not found"
msgstr "Nie udało się wyszukać zgłoszenia"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Zmienił się status zgłoszenia"
@@ -5815,82 +7883,96 @@ msgstr "Zmienił się status zgłoszenia"
msgid "Ticket watchers"
msgstr "Obserwatorzy zgłoszenia"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr ""
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Zgłoszenia"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
msgid "Tickets %1 %2"
msgstr "Zgłoszenia %1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "Zgłoszenia %1 do %2"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
-msgstr ""
+msgstr "Zgłoszenia utworzone po"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
-msgstr ""
+msgstr "Zgłoszenia utworzone przed"
#: NOT FOUND IN SOURCE
msgid "Tickets from %1"
msgstr "Zgłoszenia od %1"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
-msgstr ""
+msgstr "Zgłoszenia zamknięte po"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
-msgstr ""
+msgstr "Zgłoszenia zamknięte przed"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Zgłoszenia, które zależą od tego zatwierdzenia:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Szacowany czas"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Pozostały czas"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Czas realizacji"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Pozostały czas"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Wyświetlany czas"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Czas realizacji"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
msgid "TimeLeft"
msgstr "PozostałyCzas"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "Czas realizacji"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Strefa czasowa"
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
-msgstr ""
+msgstr "Tytuł"
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "Do"
#: NOT FOUND IN SOURCE
msgid "To generate a diff of this commit:"
@@ -5900,37 +7982,41 @@ msgstr "Aby wygenerować różnice tego zatwierdzenia:"
msgid "To generate a diff of this commit:\\n"
msgstr "Aby wygenerować różnice tego zatwierdzenia:\\n"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Więcej o wsparciu, szkoleniach, rozwoju i licencjonowaniu dostępne jest w %1."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Wpłynęło"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Narzędzia"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
-msgstr ""
+msgstr "ÅÄ…cznie"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transakcja"
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Transakcja %1 została wyczyszczona"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transakcja została utworzona"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr ""
@@ -5938,73 +8024,120 @@ msgstr ""
msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
msgstr "Transakcja-> Nie udało się utworzyć, ponieważ nie określono numeru zgłoszenia"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Transakcje nie są możliwe do powielenia"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Zaufanie"
+
#: NOT FOUND IN SOURCE
msgid "Trying to delete a right: %1"
msgstr "Próba usunięcia uprawnienia: %1"
-#: lib/RT/Date.pm:418
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Wt"
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Wto."
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Wtorek"
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Typ"
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Unable to load article"
msgstr "Nie udało się załadować artykułu"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Niezaimplementowane"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
-msgstr " Unix login"
+msgstr "Unix login"
#: NOT FOUND IN SOURCE
msgid "UnixUsername"
msgstr "Nazwa użytkownika typu 'unix'"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Nieznany Typ Zawartości %1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: $key"
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
msgstr ""
-#: html/Elements/SelectResultsPerPage:58
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Nieograniczona"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Zapytanie bezimienne"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Nieuprawnieni"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Niezaznaczone Pola"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Niepobrany"
@@ -6012,7 +8145,7 @@ msgstr "Niepobrany"
msgid "Untitled search"
msgstr "Recherche sans titre"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Zaktualizuj"
@@ -6020,15 +8153,19 @@ msgstr "Zaktualizuj"
msgid "Update All"
msgstr "Zaktualizuj wszystko"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Update ID"
msgstr "Zaktualizuj ID"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Zaktualizuj zgłoszenie"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Zaktualizuj typ"
@@ -6040,7 +8177,11 @@ msgstr "Zaktualizuj wszystkie te zgłoszenia jednocześnie"
msgid "Update email"
msgstr "Zaktualizuj e-mail"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Zaktualizuj wiele zgłoszeń jednocześnie"
@@ -6048,7 +8189,7 @@ msgstr "Zaktualizuj wiele zgłoszeń jednocześnie"
msgid "Update name"
msgstr "Zaktualizuj nazwÄ™"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Aktualizacja nie została zapisana."
@@ -6060,7 +8201,7 @@ msgstr "Zaktualizuj wybrane zgłoszenia"
msgid "Update signature"
msgstr "Zaktualizuj podpis"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Zaktualizuj zgłoszenie"
@@ -6068,64 +8209,103 @@ msgstr "Zaktualizuj zgłoszenie"
msgid "Update ticket # %1"
msgstr "Zaktualizuj zgłoszenie nr %1"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Zaktualizuj zgłoszenie nr %1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Zaktualizuj zgłoszenie nr %1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Aktualizacja nie dotyczyła korespondencji ani komentarza."
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Zaktualizowane"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Zapisz"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
-msgstr "Uploader plusieurs fichiers"
+msgstr "Wyślij wiele plików"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
-msgstr "Uploader plusieurs images"
+msgstr "Wyślij wiele obrazków"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
-msgstr "Uploader un fichier"
+msgstr "Wyślij jeden plik"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
-msgstr "Uploader une image"
+msgstr "Wyślij jeden obrazek"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
-msgstr "Uploader un maximum de %1 fichiers"
+msgstr "Wyślij aż do %1 plików"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
-msgstr "Uploader un maximum de %1 images"
+msgstr "Wyślij aż do %1 obrazków"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Zapisz swoje zmiany"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Użycie: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "Używać SSL?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr ""
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Use the dropdown menus to select which transactions you want to extract into a new RTFM article"
msgstr "Użyj rozwijalnych list, aby wybrać transakcje, z których chcesz utworzyć nowy artykuł RTFM"
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Użytkownik"
+
#: NOT FOUND IN SOURCE
msgid "User %1 %2: %3\\n"
msgstr "Użytkownik %1 %2: %3 \\n"
@@ -6134,7 +8314,7 @@ msgstr "Użytkownik %1 %2: %3 \\n"
msgid "User %1 Password: %2\\n"
msgstr "Hasło użytkownika %1: %2\\n"
-#: lib/RT/Ticket_Overlay.pm:506
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "Nie można znaleźć użytkownika %1."
@@ -6147,11 +8327,15 @@ msgstr "Nie udało się wyszukać użytkownika '%1'"
msgid "User '%1' not found\\n"
msgstr "Nie udało się wyszukać użytkownika '%1'\\n"
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Definiowany przez użytkownika"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Warunki i operacje zdefiniowane przez użytkownika"
@@ -6163,24 +8347,41 @@ msgstr "Id"
msgid "User Id"
msgstr "Id"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Uprawnienia użytkowników"
-#: html/Admin/Users/Modify.html:301
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Nie udało się utworzyć użytkownika: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Użytkownik został utworzony"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Grupy def. przez użytkownika"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "Użytkownik ma pusty adres poczty elektronicznej"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Użytkownik załadowany"
@@ -6192,32 +8393,40 @@ msgstr "Użytkownik został powiadomiony"
msgid "User view"
msgstr "Widok użytkownika"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Grupy zdefiniowane przez użytkownika"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Nazwa"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Format nazwy użytkownika"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Użytkownicy"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Użytkownicy odpowiadający kryteriom wyszukiwania"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr ""
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Sprawdź zapytanie"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr ""
@@ -6225,107 +8434,215 @@ msgstr ""
msgid "ValueOfQueue"
msgstr "Wartość kolejki"
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Wartości"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Obserwuj"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "WatchAsAdminCc"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Obserwator"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Obserwatorzy"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "WebEncoding"
msgstr "Web-kodowanie"
-#: lib/RT/Date.pm:419
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Åšr"
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Åšro."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Åšroda"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Witaj w RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
+msgstr "Co dziś zrobiłem"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Czym jest RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
msgstr ""
-#: etc/initialdata:521
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Po zatwierdzeniu zgłoszenia przez wszystkich zatwierdzających, dodaj korespondencję do oryginalnego zgłoszenia"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "Po zatwierdzeniu zgłoszenia przez któregokolwiek z zatwierdzających, dodaj korespondencję do oryginalnego zgłoszenia"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Po utworzeniu zgłoszenia"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Po utworzeniu zgłoszenia podlegającego zatwierdzeniu, powiadom właściciela i osoby o uprawnieniach AdminCc o zadaniu oczekującym zatwierdzenie przez nich"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Jeśli cokolwiek się wydarzy"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Zawsze gdy zgłoszenie będzie zamykane"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Zawsze gdy zmieni się właściciel zgłoszenia"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Zawsze gdy zmieni się priorytet zgłoszenia"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Zawsze gdy zmieni się kolejka zgłoszenia"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Zawsze gdy zmieni się status zgłoszenia"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Zawsze gdy wystąpi warunek definiowany przez użytkownika"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Zawsze gdy wystÄ…piÄ… komentarze"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Zawsze gdy wpłynie korespondencja"
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "Which are referred to by "
-msgstr "Które są zgłoszeniami powiązanymi"
+msgstr "Które są zgłoszeniami powiązanymi "
#: NOT FOUND IN SOURCE
msgid "Which refer to"
msgstr "Które dotyczą"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Praca"
-#: html/Search/Results.html:82
+#: NOT FOUND IN SOURCE
msgid "Work offline"
msgstr "Praca zdalna"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
msgstr "Tel. do pracy"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Czas pracy"
@@ -6333,52 +8650,85 @@ msgstr "Czas pracy"
msgid "XXX CHANGEME You are not an authorized user"
msgstr "XXX CHANGEME Nie jesteś użytkownikiem z uprawnieniami"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Boolean:77
msgid "Yes"
msgstr "Tak"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Jesteś już właścicielem tego zgłoszenia"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Nie jesteś autoryzowanym użytkownikiem"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Możesz ponownie przydzielić tylko te zgłoszenia, których jesteś właścicielem lub te, które nie mają właściciela"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr ""
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "You don't have permission to view that ticket.\\n"
msgstr "Nie masz uprawnień do przeglądania tego zgłoszenia.\\n"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "Wyszukałeś zgłoszenia %1 w kolejce %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
-msgstr "Zostałeś wylogowany z RT"
+msgstr "Zostałeś wylogowany z RT."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Nie masz uprawnień do rejestrowania zgłoszeń w tej kolejce."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Nie możesz rejestrować zgłoszeń w tej kolejce."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Proszę zalogować się ponownie"
@@ -6390,11 +8740,11 @@ msgstr "Twoje zgłoszenia %1"
msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
msgstr "Administrator RT niewłaściwie skonfigurował aliasy maila, które wywołują RT"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Twoje zgłoszenie zostało zatwierdzone przez %1. Może nadal oczekiwać na inne zatwierdzenia."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Twoje zgłoszenie zostało zatwierdzone."
@@ -6402,15 +8752,15 @@ msgstr "Twoje zgłoszenie zostało zatwierdzone."
msgid "Your request was rejected"
msgstr "Twoje zgłoszenie zostało odrzucone"
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Twoje zgłoszenie zostało odrzucone"
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Nazwa użytkownika lub hasło jest nieprawidłowe"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Kod pocztowy"
@@ -6418,11 +8768,23 @@ msgstr "Kod pocztowy"
msgid "[no subject]"
msgstr "[Pas de sujet]"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[brak]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "po"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr ""
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr ""
@@ -6434,20 +8796,36 @@ msgstr "i nie jest"
msgid "and not"
msgstr "i nie"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "tak jak przydzielone dla %1"
-#: html/Search/Results.html:83
-msgid "chart"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "pasek"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "przed"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "od dołu do góry"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
msgstr ""
-#: html/SelfService/Closed.html:49
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "zamknięte"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "zawiera"
@@ -6459,6 +8837,10 @@ msgstr "zawartość"
msgid "content-type"
msgstr "typ zawartości"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "correspondence (probably) not sent"
msgstr "korespondencja (prawdopodobnie) nie została wysłana"
@@ -6467,7 +8849,22 @@ msgstr "korespondencja (prawdopodobnie) nie została wysłana"
msgid "correspondence sent"
msgstr "korespondencja została wysłana"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "dzienna"
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "co dzień o %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "dniami"
@@ -6479,46 +8876,66 @@ msgstr "usuń"
msgid "deleted"
msgstr "usunięte"
-#: html/Search/Elements/PickBasics:61
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "nie zgadza siÄ™ z"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "nie zawiera"
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "nie pasuje"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "pobierz"
+
#: NOT FOUND IN SOURCE
msgid "email address"
msgstr "adresse email"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "równy"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr ""
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr ""
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr ""
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr ""
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr ""
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr ""
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "co"
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "false"
msgstr "faux"
@@ -6527,25 +8944,28 @@ msgstr "faux"
msgid "filename"
msgstr "nazwa pliku"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "pełne"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "większy od"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "grupy '%1'"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr ""
-
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "godz."
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "Numer"
@@ -6553,27 +8973,51 @@ msgstr "Numer"
msgid "in class %1"
msgstr "w ramach klasy %1"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "jest"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "nie jest"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "klucz wygasł"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "od lewej do prawej"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "mniejszy od"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "marginalne"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "zgadza siÄ™ z"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min."
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "minuty"
@@ -6581,44 +9025,93 @@ msgstr "minuty"
msgid "modifications\\n\\n"
msgstr "modyfikacje\\n\\n"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "miesięcznie"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "miesięcznie (dzień %1) o %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "miesiÄ…cami"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "nigdy"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "nowe"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "nie"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "bez nazwy"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "brak wartości"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "żaden"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "różny od"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "nic"
+
#: NOT FOUND IN SOURCE
msgid "notlike"
msgstr "necontientpas"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "dnia"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr "w dniu"
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "otwarte"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "otwórz/zamknij"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "inne..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "prywatna grupa '%1' użytkownika '%2'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "kołowy"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "kolejka %1 %2"
@@ -6631,15 +9124,31 @@ msgstr "odrzucone"
msgid "resolved"
msgstr "zamknięte"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "od prawej do lewej"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sek."
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr ""
-#: html/Search/Results.html:80
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "spreadsheet"
msgstr "Arkusz kalk."
@@ -6647,34 +9156,37 @@ msgstr "Arkusz kalk."
msgid "stalled"
msgstr "zamrożone"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr ""
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "system %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "grupy systemowej '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "przywoływany komponent nie określił powodu"
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
#: NOT FOUND IN SOURCE
msgid "ticket #%1"
msgstr "ticket n°%1"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "zgłoszenie #%1 %2"
@@ -6683,11 +9195,19 @@ msgstr "zgłoszenie #%1 %2"
msgid "till"
msgstr "do"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "od góry do dołu"
+
#: NOT FOUND IN SOURCE
msgid "true"
msgstr "vrai"
-#: lib/RT/Group_Overlay.pm:236
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "absolutne"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "nieopisana grupa %1"
@@ -6696,20 +9216,45 @@ msgstr "nieopisana grupa %1"
msgid "undescripbed group %1"
msgstr "nieopisana grupa %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "użytkownika %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "z dodatkowymi informacjami"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "tygodniowo"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "tygodniami"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "z nagłówkami"
+
#: NOT FOUND IN SOURCE
msgid "with template %1"
msgstr "wg szablonu %1"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "rokiem/latami"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "tak"
+
diff --git a/rt/lib/RT/I18N/pt.po b/rt/lib/RT/I18N/pt.po
new file mode 100644
index 0000000..80c42c3
--- /dev/null
+++ b/rt/lib/RT/I18N/pt.po
@@ -0,0 +1,7869 @@
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: RT 3.5.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-08-09 15:17+0000\n"
+"Last-Translator: Tiago Silva <Unknown>\n"
+"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 deleted."
+msgstr " %1 apagado"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 renamed to %2."
+msgstr " %1 alterado para %2."
+
+#: NOT FOUND IN SOURCE
+msgid " %1 saved."
+msgstr " %1 gravado"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (sem chave pública)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (não confiável)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr "#%1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "$1"
+msgstr "$1"
+
+#: NOT FOUND IN SOURCE
+msgid "$prefix %1"
+msgstr "$prefix %1"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr "%1 #%2"
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr "%1 %2 %3 %4:%5 %6"
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1 %2 %3 %4:%5:%6 %7"
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr "%1 %2 adicionado"
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr "há %1 %2"
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr "%1 %2 alterado para %3"
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr "%1 %2 apagado"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 apagado."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 renomeado para %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 gravado."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr "%1 %2 com modelo %3"
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr "%1 (%2) por %3"
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr "%1 (inalterado)"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (day %2) at %3"
+msgstr "%1 (dia %2) em %3"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr "%1 (do painel %2)"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (on %2) at %3"
+msgstr "%1 (em %2) às %3"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr "%1 - Ajustar opção de configuração LogToScreen"
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr "%1 - Um argumento a passar a %2"
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr "%1 - Actualização do estado dos Output para STDOUT"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify id of the template you want to use"
+msgstr "%1 - Especificar id do template que quer usar"
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Epecificar se quer utilizar 'primeira', 'ultima' ou 'todas' as transações"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr "%1 - Especificar o modulo de acção que quer usar"
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Especificar a lista de tipos de transacções, separada por virgulas, que quer usar"
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr "%1 - Especificar o modulo de condições que quer usar"
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr "%1 - Especifique o módulo de pesquisa a utilizar"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify the type of a transaction you want to use"
+msgstr "%1 - Especifique o tipo de transacção que quer usar"
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "%1 Paineis"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 Dashboards"
+msgstr "%1 Painéis de controle"
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr "%1 RT %2 Copyright 1996-%3 %4."
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr "%1 ScripAction carregado"
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr "%1 adicionado como valor para %2"
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 já existe e tem as tabelas do RT, mas não contém os metadados. O passo 'Initialize Database' a executar posteriormente pode inserir os metadados nesta tabela. Se é aceitável, clique em 'Customize Basics' abaixo para continuar a customizar o RT."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 já existe, mas não contem as tabelas do RT, nem contém os metadados. O passo 'Initialize Database' a executar posteriormente pode inserir os metadados e tabelas nesta tabela. Se é aceitável, clique em 'Customize Basics' abaixo para continuar a customizar o RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr "%1 parece ser um objecto local, mas não está na base de dados"
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 parece estar totalmente inicializado. Não é necessario criar tabelas ou inserir metadados, mas pode continuar a personalizar o RT clicando 'Personalização base' abaixo"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 at %2"
+msgstr "%1 em %2"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr "%1 por %2"
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr "%1 alterado de %2 para %3"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%1 gráfico por %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr "cópia %1"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr "%1 configuração de raiz"
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr "%1 não pôde ser definido para %2."
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr "%1 estado não foi mudado para resolvido. RT's Database pode estar inconsistente."
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr "%1 criado"
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr "%1 apagado"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "%1 desactivo"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 não existe"
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "%1 activo"
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "%1 tickets com maior prioridade da minha responsabilidade"
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr "%1 é uma ferramenta para manipular tickets através de uma ferramenta externa, como por exemplo o cron."
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 é um utilitário, para ser corrigo num cron, envia todas as notificações RT por utilizador."
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr "%1 já não é um %2 para esta queue."
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 já não é um %2 para este ticket."
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 já não é um valor para campo personalizado %2"
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr "%1 min"
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr "%1 tickets mais recentes sem responsável atribuído"
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr "%1 objectos"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 rights"
+msgstr "%1 direitos"
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr "%1 configuração do site"
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 actualizado: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 actualizado: nenhumas alterações"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 actualizado"
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr "%1 Resolverá todos os membros de ticket de grupo resolvido."
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr "objectos %2 de %1"
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr "objectos %1's %2's %3"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1's paineis"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr "Pesquisas gravadas de %1"
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr "%1: anexo não especificado"
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr "%1b"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr "%1k"
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr "%quant(%1,hora)"
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr "%1 é um valor inválido para o estado"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr "(Seleccione caixa para apagar)"
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr "(Seleccione caixas para desactivar notificações para os destinatários listados)"
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr "(Seleccione caixas para activar notificações para os destinatários listados)"
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr "(Insira identificadores de tickets, separados por espaços)"
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr "(Por omissão será %1)"
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr "(Sem campos personalizados)"
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr "(Sem membros)"
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr "(Sem scrips)"
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr "(Sem templates)"
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr "(Nenhum)"
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Envia uma fotocopia desta actualização para uma lista separada por virgulas de endereços de email . Estas pessoas <strong>will</strong> passam a receber futuras actualizações.)"
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Envia uma fotocopia desta actualização para uma lista separada por virgulas de endereços de email . Estas pessoas <strong>will</strong> passam a receber futuras actualizações.)"
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr "(Use estes campos quando escolher'Definido pelo Utilizador' para uma condição ou Acção)"
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr "(Não vai ser enviado email)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(qualquer)"
+
+#: NOT FOUND IN SOURCE
+msgid "(displaying new and open tickets for %1)"
+msgstr "(mostrar tickets novos e abertos de %1)"
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr "(vazio)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no name listed)"
+msgstr "(sem nome)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(Sem pubkey!)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr "(sem valor)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr "(sem valores)"
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr "(apenas um ticket)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(pendente %quant(%1,outros ticket))"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr "(aprovação pendente)"
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr "(obrigatório)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(confiar: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr "(sem título)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(não confiavel!)"
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr "-"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "--argumento da transação apenas pode ser 'first', 'last' or 'all'"
+
+#: NOT FOUND IN SOURCE
+msgid "<% $Ticket->Status%>"
+msgstr "<% $Ticket->Status%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<% $_ %>"
+msgstr "<% $_ %>"
+
+#: NOT FOUND IN SOURCE
+msgid "<%$_%>"
+msgstr "<%$_%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<%$field%>"
+msgstr "<%$field%>"
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Novo Pedido em\" />&nbsp;%1"
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"Novo Pedido em\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Todas as feeds iCal embebem um token privado que o autorizam. Se o URL de um dos seus feeds iCal foi exposto ao exterior, pode ter um novo token privado ao <b>quebrar as feeds existentes</b>.</p>"
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr "Template em branco"
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr "Password não foi definida, portanto o utilizador não vai conseguir efectuar login."
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr "ACE não encontrado"
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr "Os ACEs apenas podem ser criados e eliminados"
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr "E"
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr "Sobre mim"
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr "Controle de Acesso"
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr "Acção"
+
+#: NOT FOUND IN SOURCE
+msgid "Action %1 not found"
+msgstr "Acção %1 não encontrada"
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Acção '%1' não encontrada"
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr "Acção executada.\\n"
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr "Acção é argumento obrigatório"
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr "Acção preparada..."
+
+#: NOT FOUND IN SOURCE
+msgid "Add"
+msgstr "Adicionar"
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr "Adicionar AdminCc"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Adicionar Bookmark"
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr "Adicionar Cc"
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr "Adicionar colunas"
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr "Adicionar critérios"
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr "Adicionar mais ficheiros"
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr "Adicionar Requerente"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr "Adicionar Valor"
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr "Adicionar uma scrip que se aplica a todas as queues"
+
+#: NOT FOUND IN SOURCE
+msgid "Add and Search"
+msgstr "Adicionar e pesquisar"
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr "Adicionar comentários ou respostas aos tickets seleccionados"
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr "Adicionar membros"
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr "Adicionar novos watchers"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Adicionar estes termos"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Adicionar estes termos e Pesquisar"
+
+#: NOT FOUND IN SOURCE
+msgid "Add these terms to your search"
+msgstr "Adicionar estes termos à sua pesquisa"
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr "Adicionar valores"
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr "Adicione, elimine e modifique os valores dos campos personalizados para os objectos"
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr "%1 adicionado como principal para esta queue"
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr "%1 adicionado como principal para esta tarefa"
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Endereço"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr "Endereço (1)"
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr "Endereço (2)"
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr "Admin Cc"
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr "Comentário de Admin"
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr "Correspondência Admin"
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr "Queues do Administrador"
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr "Configurações do Administrador/Globais"
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "AdminCCGroup"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr "AdminCc"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCcs"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr "AdminCampoPerson"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr "AdminGroupo"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr "AdminMembrosGrupo"
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr "AdminGruposPessoais"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr ""
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr "AdminUtilizadores"
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr ""
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Palavra-Chave Administrativa"
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr "Avançado"
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr "Agregador"
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr "Todas as aprovações tratadas"
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr "Todas as Queues"
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Já cifrado"
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr "E/Ou"
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr "Aplica-se a"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr "Aplicar"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr "Aplicar as alterações"
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr "Aprovação"
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr "Aprovação #%1: %2"
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr "Aprovação #%1: Notas não guardadas devido a um erro no sistema"
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr "Aprovação #%1: Notas guardadas"
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr ""
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Aprovação pronta para o dono"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr "Aprovação rejeitada"
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr "Aprove"
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Abr"
+
+#: NOT FOUND IN SOURCE
+msgid "Apr."
+msgstr "Apr."
+
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "Abril"
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr "Asc"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr "Ascendente"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr "Atribuir e remover campos pré-definidos"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr "AtribuirCamposPerson"
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr "Anexar"
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr "Anexar ficheiro"
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr "Ficheiro anexo"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Anexo"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr "Anexo '%1' não foi carregado"
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr "Anexo criado"
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr "Nome do anexo"
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr "Anexos"
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "A encriptação dos anexos está inactiva"
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr "Atributo eliminado"
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Ago"
+
+#: NOT FOUND IN SOURCE
+msgid "Aug."
+msgstr "Aug."
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "Agosto"
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr "Resposta automática"
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr "Resposta automática para utilizadores"
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr "Disponível"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "BCc"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Back"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr "Privacidade incorrecta para atributo %1"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "Informação básica"
+
+#: NOT FOUND IN SOURCE
+msgid "Bcc"
+msgstr "Bcc"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr "Grave as alterações"
+
+#: NOT FOUND IN SOURCE
+msgid "Before"
+msgstr "Antes"
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr "Best Practical Solutions, LLC logo corporativo"
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr "Branco"
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Corpo"
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "Negrito"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Marcador"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Tarefas marcadas"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr "Actualização em bloco"
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Compre suporte"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Por predefinição, o RT usa o fuso horário do seu sistema. Isto permite que defina as predefinições globais para a apresentação de datas e horas no RT. Os utilizadores podem definir fusos horários diferentes nas suas Preferências."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "CCGroupo"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Calendar"
+msgstr "Calendário"
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr "Não é possível alterar utilizadores de sistema"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr "Não se pode adicionar um campo personalizado sem designação"
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr "Não foi encontrado uma colecção de classes para '%1'"
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr "Impossível encontrar a pesquisa gravada definida"
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr "Não é possível ligar um ticket a si próprio"
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr "Não consigo gravar %1"
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr "Não é possível gravar esta pesquisa"
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr "Não se consegue especificar a base nem o alvo"
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Não se pode criar tarefas numa queue inactiva"
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr "Não é possível criar utilizador: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr "Categoria"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Categoria não definida"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr "Cc"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Ccs"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Alterar"
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr "Alterar senha"
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr "Seleccionar Todos"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Testar Conectividade com BD"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr "Verifique as credenciais da base de dados"
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr "Seleccione caixa para apagar"
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr "Assinale para revogar direitos"
+
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Verifique credenciais da base de dados"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr "Filhos"
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr "Seleccione o motor da base de dados"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Escolher um motor de BD"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a date"
+msgstr "Escolha uma data"
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr "Cidade"
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Limpar"
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr "Limpar todos"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Clique em \"Finalizar instalação\" para completar este assistente"
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Clique em \"Iniciar base de dados\" para criar a base de dados do RT e inserir os metadados iniciais. Pode demorar alguns minutos."
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "Fechar janela"
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr "Fechado"
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr "Tickets fechados"
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr "Seleccione ou insira valores múltiplos"
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr "Seleccione ou insira um valor"
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr "Seleccione ou insira até %1 valores"
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr "Comentário"
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr "Morada de Comentário"
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Endereço do comentário"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr "Comentar tickets"
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr "ComentarNaTarefa"
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "Comentários"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr "Comentários (não so enviados para utilizadores)"
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr "Comentários (não so enviados para utilizadores)"
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr "Comentários sobre este utilizador"
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr "Comentários adicionados"
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr "Condição"
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Condição '%1' não encontrada"
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr "Condição é argumento obrigatório"
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Condição, Acção e Modelo"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Ficheiro de configuração %1 está trancado"
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr "Configuração"
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Ligação efectuada com sucesso"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr "Conteúdo"
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr "Tipo de Conteúdo"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "TipoConteudo"
+
+#: NOT FOUND IN SOURCE
+msgid "Copy"
+msgstr "Copiar"
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr "Correspondência"
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr "Correspondência adicionada"
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "Não foi adicionado o valor do campo personalizado: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not change owner. "
+msgstr "Não foi possível alterar responsável "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Não foi alterado o dono: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr "Não foi criado o campo personalizado"
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr "Não foi criado o campo personalizado: %1"
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr "Não foi possível criar o grupo"
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr "Não foi possível criar template: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Não foi criada tarefa em queue inactiva \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr "Não é possível criar pedido. Especifique uma fila."
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr "Não foi possível criar utilizador"
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr "Não foi possível criar ou encontrar esse utilizador"
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Não foi carregado o atributo %1"
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr "Não foi carregado o campo personalizado %1"
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr "Grupo não foi carregado"
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr "Não doi carregado o objecto para %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not load search attribute"
+msgstr "Não é possível carregar o atributo da pesquisa"
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr "Não consegui definir informações de utilizador"
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr "Não foi possível adicionar anexo"
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr "Não foi possível adicionar membro a grupo"
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr "Não foi possível criar uma transacção: %1"
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Não foi criado o registo"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Não foi criado o painel %1: %2"
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr "Linha não encontrada"
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Não foi encontrada a transacção adequada, continuar"
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr "Não foi encontrado o valor"
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr "%1 não foi carregado da base de dados de utilizadores.\\n"
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr "Não foi carregada a classe %1"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Não foi carregado o campo personalizado #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr "Não foi carregado o campo personalizado %1"
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr "Não foi carregada a cópia da tarefa #%1."
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Não foi carregado o painel %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Não foi carregado o painel %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Não foi carregado o grupo #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr "Não foi carregado o grupo %1"
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr "Não foi carregado o link"
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr "Não foi carregado o objecto %1"
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Não foi carregado nem adicionado o utilizador: %1"
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr "A queue não foi carregada"
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "A queue #%1 não foi carregada"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr "A queue %1 não foi carregada"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "A queue '%1' não foi carregada"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr "O script #%1 não foi carregado"
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "O modelo #%1 não foi carregado"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr "A tarefa '%1' não foi carregada"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "A transacção #%1 não foi carregada"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "O utilizador #%1 não foi carregado"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Não foi substituído o conteúdo com dados desencriptados"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Não foi substituído o conteúdo com dados encriptados"
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Não consegui enviar email"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr "País"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr "Criar"
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr "Criar tickets"
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr "Criar um campo personalizado"
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr "Criar um campo personalizado para a queue %1"
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Criar um novo painel"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr "Criar novo grupo"
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr "Criar um novo grupo pessoal"
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr "Criar novo ticket"
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr "Criar novo utilizador"
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr "Criar queue"
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr "Criar um srcipt para a queue %1"
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr "Criar template"
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr "Criar ticket"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Criar paineis para este grupo"
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr "Criar novo pedido baseado num modelo existente"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Criar paineis pessoais"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Criar paineis de sistema"
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr "Criar ticket"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr "Criar tickets nesta queue"
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Criar tarefas offline (modo desligado)"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr "Criar, eliminar e modificar campos personalizados"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr "Criar, eliminar e modificar queues"
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr "Criar, eliminar e modificar membros de grupos pessoais"
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr "Criar, apagar e alterar utilizadores"
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr "Criar Tarefa"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr "Criado"
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Criado por"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr "Campo Personalisado %1 criado"
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr "Criado num intervalo de datas"
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr "Pedidos criados dentro de um periodo de tempo, agrupados por estado"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr "Autor"
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Criptografia"
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr "Links actuais"
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr "Scrips Actuais"
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr "Membros actuais"
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr "Direitos actuais"
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr "Pesquisa actual"
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr ""
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr "Campos Personalizados"
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr "Campos Personalizados para %1"
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr "Condição personalizada"
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "Campo personalizado %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "O campo personalizado %1 não se aplica a este objecto"
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr "Campo personalizado %1 tem um valor."
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr "Campo personalizado %1 não tem valores"
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr "Campo personalizado %1 não encontrado"
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr "Campo personalizado '%1'"
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr "O valor do campo personalizado %1 não foi encontrado para o campo personalizado %2"
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr "O valor do campo personalizado não pode ser eliminado"
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr "O valor do campo personalizado não foi encontrado"
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr "O valor do campo personalizado foi eliminado"
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr "Personalizar"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Personalizar Básico"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Personalizar endereços de email"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Personalizar configurações de email"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "Palavra-Chave do DBA (Administrador da Base de Dados)"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "Nome de utilizador do DBA (Administrador da Base de Dados)"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Painel"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Painel não pode ser criado: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Painel não pode ser actualizado: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Painel actualizado"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Painéis"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Anfitrião do painel"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Nome da Base de Dados"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Palavra-Chave da Base de Dados para o RT"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Porta da Base de Dados"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Tipo da Base de Dados"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Nome do utilizador da Base de Dados para o RT"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Formato da data"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr "Módulo DateTime em falta"
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr "Datas"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Dez"
+
+#: NOT FOUND IN SOURCE
+msgid "Dec."
+msgstr "Dec"
+
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "Dezembro"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Desencriptar"
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr "Modelo de resposta automática predefinido"
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr "Queue por omissão"
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr "Requerente Predefinido"
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr "Modelo de comentário de administração predefinido"
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr "Modelo de correspondência de administração predefinido"
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr "Modelo de correspondência predefinido"
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Queue predefinida"
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr "Modelo de transacção predefinido"
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Predefinição: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr "Predefinição: %1/%2 alterado para %3 to %4"
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr "Delegar direitos"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr "Delegar direitos específicos que lhe foram atribuídos"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr ""
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr "Delegação"
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr "Apagar"
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr "Apagar template"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Apagar painéis para este grupo"
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr "Eliminação falhou: %1"
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Eliminar painéis pessoais"
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr "Elimiar scripts seleccionados"
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Eliminar painéis de sistema"
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr "Apagar tickets"
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr "Apagar valores"
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "%1 Eliminado"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Eliminar painel %1"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr "Eliminar consultas"
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Eliminar pesquisa guardada"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleted search"
+msgstr "Pesquisa apagada"
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr "A eliminação deste objecto irá quebrar a integridade referencial"
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr "A eliminação deste objecto irá violar a integridade referencial"
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr "Negar"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr "Dependência por %1 adicionada"
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr "Dependência por %1 eliminada"
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr "Dependência de %1 adicionada"
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr "Dependência de %1 eliminada"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr "Depende de"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr "Desc"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr "Descendente"
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr "Descreva o pedido, abaixo"
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr "Descrição"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Direcção"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Inactivo"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr "Mostrar"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr "Visualizar lista de controlo de acessos"
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr "Visualizar Colunas"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr "Visualizar modelos de Script para esta queue"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr "Visualizar Scripts para esta queue"
+
+#: NOT FOUND IN SOURCE
+msgid "Display mode"
+msgstr "Modo de visualização"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr "Visualizar pesquisas guardadas para este grupo"
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr ""
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Nome do domínio"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Não incluir http://, apenas algo como 'localhost', 'rt.example.com'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr "Não actualizar (refrescar) esta página"
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Não confiar nesta chave"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr "Descarregar"
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr "Descarregar num ficheiro separado por tabs"
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr "Prazo"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "ERRO: %1"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Actualização simples das suas tarefas abertas"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr "Editar"
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr "Editar Campos Personalizados"
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr "Editar Campos Personalizados de %1"
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr "Editar Campos Personalizados para todos os grupos"
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Editar Campos Personalizados para todas as queues"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr "Editar Campos Personalizados para todos os utilizadores"
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr "Editar \"Campos Personalizados\" para todos os pedidos"
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr "Editar ligações"
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr "Editar Consulta"
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr "Editar Pesquisa"
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr "Editar modelos para a queue %1"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr "Editar Pesquisas para este grupo"
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr "Editar modelos de sistema"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Texto editável"
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr "A editar configurações para a queue %1"
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr "A editar campo personalizado %1"
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr "A editar membros para o grupo %1"
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr "A editar membros para o grupo pessoal %1"
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr "Base ou alvo devem ser especificados"
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Ou não tem direitos para visualizar a pesquisa guardada %1 ou o identificador está incorrecto"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr "Correio Electrónico"
+
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Configuração de Correio Electrónico"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr "Endereço de email já utilizado"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Activo"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr "Activo (remover selecção desta caixa desactiva este campo)"
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr "Activo (remover selecção desta caixa desactiva este grupo)"
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr "Activo (remover selecção desta caixa desactiva esta queue)"
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr "Queues activas"
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr "Estado activo %1"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Enciptar"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Enciptar por predefinição"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Encriptar/Desencriptar"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Encriptar/Desencriptar transacção #%1 de tarefa #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Encriptação inactiva"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Encriptação activa"
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr "Introduzir múltiplos valores"
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr "Introduzir objectos ou URLs para ligar os objectos. Separar as entradas múltiplas com espaços."
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr "Inserir um valor"
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr "Escreva as filas ou URIs para ligar as filas. Separe várias entradas com espaços."
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr "Escreva o número dos pedidos ou URIs para ligar os pedidos. Separe várias entradas com espaços."
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr "Inserir até %1 valores"
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr "Erro"
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr ""
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Erro: Painel em falta"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Erro: Dados GnuPG errados"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Erro: Não existe chave privada"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Erro: Chave Pública"
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr "Estimado"
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr "Todos"
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Analisar tarefas criadas numa queue entre duas datas"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Analisar tarefas resolvidas numa queue entre duas datas"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Analisar tarefas resolvidas numa queue, agrupadas por dono"
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr "Exemplo:"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Expirar"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr "Informação adicional"
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Falta ao ligar a base de dados: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Falta ao criar atributo %1"
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr "Não foi encontrado peseudogrupo dos utilizadores \"Privilegiados\""
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr "Não foi encontrado peseudogrupo dos utilizadores \"Não Privilegiados\""
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Falha ao carregar %1 %2"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Falha ao carregar %1 %2: %3"
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr "Falta ao carregar módulo %1. (%2)"
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr "Falha ao carregar objecto para %1"
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Falta ao carregar modelo"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Fev"
+
+#: NOT FOUND IN SOURCE
+msgid "Feb."
+msgstr "Feb"
+
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Fevereiro"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Fonte dos valores do campo"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr "Ficheiro"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr "Preencher argumentos"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr "Preencher múltiplas áreas de texto"
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr "Preencher uma área de texto"
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr "Preencha este campo com um URL"
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr "Preencha até %1 áreas de texto"
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr "Prioridade final"
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Procurar todos os utilizadores cujo"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr "Encontrar grupos cujo"
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr "Encontrar pessoas cujo"
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr "Encontrar tickets"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Terminar"
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr "Primeiro"
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr ""
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr "Forçar alteraçao"
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr "Formato"
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Encaminhar"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Encaminhar Mensagem"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Encaminhar Mensagem e Voltar"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Encaminhar Mensagem"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Encaminhar mensagem para terceira(s) pessoa(s)"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr ""
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr "Objecto Encontrado"
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Frequência"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Sex"
+
+#: NOT FOUND IN SOURCE
+msgid "Fri."
+msgstr "Fri"
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Sexta"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr "Cabeçalhos completos"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Geral"
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr "Obter modelo a partir de ficheiro"
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr "Atribuído a %1"
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr "Global"
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr "Campos Personalizados Globais"
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr "Configuração gloval dos campos personalizados"
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr "Portlet global %1 guardado"
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr "Modelo Global: %1"
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "Erro GnuPG. Contacte o Administrador"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "Integração GnuPG inactiva"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "Chave(s)-Privada(s) GnuPG para %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "Chave(s)-Pública(s) GnuPG para %1"
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "Ir"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "Ir!"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr "Ir para ticket"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Gráfico"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Propriedades do Gráfico"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "Gráficos não estão disponíveis"
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "Grupo"
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr "Direitos do grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Group already has member"
+msgstr "Grupo já tem membro"
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "O grupo já tem um membro: %1"
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr "Grupo não pôde ser criado: %1"
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr "Grupo criado"
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Grupo inactivo"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Grupo activo"
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr "O grupo não tem esse membro"
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr "Grupo não encontrado"
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Direitos do grupo"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr "Grupos"
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr "Grupos não podem ser membros dos seus membros"
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr "Grupos que preenchem critérios"
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Grupos em que o utilizador é membro (seleccione caixa para eliminar)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Grupos em que o utilizador não é membro (seleccione caixa para adicionar)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr "Grupos a que este utilizador pertence"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr "Olá!"
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr "Olá, %1"
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "Ajude-nos a definir predefinições úteis para o RT"
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr "Histórico"
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr "Histórico do grupo %1"
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr "Histórico da queue %1"
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr "Histórico do utilizador %1"
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "Início"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "Intervalo de actualização da página de ínicio"
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr "Home"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Hora"
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr "Horas"
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "I'm lost"
+msgstr "Estou perdido"
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr "Id"
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr "Identidade"
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr "Se uma aprovação é rejeitada, rejeite a original e elimine aprovações pendentes"
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr "Se nenhum Requerente for especificado, criar um pedido sem Requerente."
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr "Se nenhuma queue foi definida, criar tickets nesta queue"
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr "Se esta ferramenta fosse setgid, um utilizador local hostil poderia usá-la para ter acesso de administrador ao RT."
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr "Se já tem um servidor RT e base de dados funcionais, deveria aproveitar a oportunidade para se assegurar que o seu servidor de base de dados está a correr e que o servidor do RT consegue-se ligar a ele. Depois disto, pare e inicie o servidor do RT. </p>"
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "Se alterar a porta em que corre o RT, vai precisar de reiniciar o servidor de forma a poder iniciar sessão."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr "Se actualizou algo acima, certifique-se que"
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr "Se a sua base de dados escolhida não está listada abaixo, significa que o RT não conseguiu encontrar um <i>driver /i> para a mesma instalada localmente. Pode contornar este problema ao usar %1 para descarregar e instalar DBD::MySQL, DBD::Oracle ou DBD::Pg."
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr "Valor ilegal para %1"
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr "Campo imutável"
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "Incluir campos personalizados inactivos na listagem."
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr "Incluir grupos desactivados na listagem"
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr "Incluir queues desactivadas na listagem"
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr "Incluir utilizadores desactivados na listagem"
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr "Incluir página"
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete Query"
+msgstr "Query incompleta"
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete query"
+msgstr "Query incompleta"
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Mensagens individuais"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informar dono do RT que utilizadores estão com problemas com chaves públicas"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Informar utilizador que o painel que ele subscreveu está em falta"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Informar utilizador que a mensagem que ele enviou tem dados GnuPG inválidos"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Informar utilizador que ele está com problemas relacionados com a chave pública e não consegue receber conteúdo encriptado"
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Informar utilizador que a sua password foi redefinida"
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Informar utilizador que recebemos um email encriptado e que não temos chaves provadas para o desencriptar"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr "Prioridade Inicial"
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr ""
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Iniciar Base de Dados"
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr "Erro de entrada"
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "Instalar RT"
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr "Erro interno"
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr "Erro interno: %1"
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "%1 Inválido: '%2' não parece um enderço de email"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "%1 Inválido: deveria ser numérico"
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr "Tipo de Grupo Inválido"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Right"
+msgstr "Direito Inválido"
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr "Dados Inválidos"
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Objecto Inválido"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Dono de Objecto Inválido"
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr "Padrão inválido: %1"
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr "Queue inválida"
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr "Direito inválido"
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr "Sintaxe inválido para endereço de e-mail"
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr "Valor inválido para %1"
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr "Valor inválido para campo personalizado"
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr "Valor inválido para estado"
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "Não está encriptado"
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr "É muito importante que os utilizadores não privilegiados não possam executar esta ferramenta."
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr "É sugerido que crie um utilizador não privilegiado com o grupo correcto e acesso ao RT para utilizar esta ferramenta."
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr "Necessários vários argumentos:"
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr "Itálico"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Jan"
+
+#: NOT FOUND IN SOURCE
+msgid "Jan."
+msgstr "Jan"
+
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "Janeiro"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr ""
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Jul"
+
+#: NOT FOUND IN SOURCE
+msgid "Jul."
+msgstr "Jul"
+
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "Julho"
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr ""
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Jun"
+
+#: NOT FOUND IN SOURCE
+msgid "Jun."
+msgstr "Jun"
+
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "Junho"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "Mantenha 'localhost' se não tiver a certeza. Deixe em branco para ligar localmente sobre um socket"
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr "Idioma"
+
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Idioma."
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr "Grande"
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr "Último"
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr "Último Contacto"
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr "Última actualização"
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "Útima Actualização Por"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Útima actualização por"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr "Deixar em branco para enviar para o seu endereço de email actual (%1)"
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Deixar em branco para usar o valor predefinido para a sua base de dados"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr "Restante"
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Tamanho em caracteres; Use '0' para mostrar todas as mensagens, independentemente do tamanho"
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr "Permitir que este utilizador aceda ao RT"
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr "Permitir que este utilizador tenha direitos"
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr "Ligação"
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr "Ligação já existe"
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr "Ligação não pôde ser criada"
+
+#: NOT FOUND IN SOURCE
+msgid "Link created (%1)"
+msgstr "Ligação criada (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Link deleted (%1)"
+msgstr "Ligação apagada (%1)"
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr "Ligação não encontrada"
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr "Ligar ticket #%1"
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr "Ligar valores a"
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "Ligado"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr "Ligação. Permissão negada"
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr "Ligações"
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr "Carregar"
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr "Carregar pesquisa gravada:"
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "Carregado %1 %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "Carregada pesquisa guardada \"%1\" original"
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr "Módulos perl carregados"
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "Carregada pesquisa guardada \"%1\""
+
+#: NOT FOUND IN SOURCE
+msgid "Loaded search %1"
+msgstr "Pesquisa %1 carregada"
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "Localização"
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr "Ligado como %1"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Desligado"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr "Entrar"
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr "Sair"
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr ""
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Correio"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr "Definir Proprietário"
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr "Definir estado"
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr "Definir data como prazo"
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr ""
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr ""
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr ""
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr ""
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr "Definir prioridade"
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr ""
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr "Definir assunto"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr "Tornar este grupo visível ao utilizador"
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr "Gerir campos personalizados e valores dos campos personalizados"
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr "Gerir grupos e membros de grupos"
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr "Gerir propriedades e configuração que se aplica a todas as queues"
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr "Gerir queues e propriedades específicas das queues"
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Gerir grafícos guardados"
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr "Gerir utilizadores e passwords"
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
+msgid "Mar."
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "Março"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Marcar todas as mensagens como lidas"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "Tamanho máximo da mensagem inline"
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "Maio"
+
+#: NOT FOUND IN SOURCE
+msgid "May."
+msgstr "May"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Membro"
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr "Membro %1 adicionado"
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr "Membro %1 apagado"
+
+#: NOT FOUND IN SOURCE
+msgid "Member added"
+msgstr "Membro adicionado"
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Membro adicionado: %1"
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr "Membro apagado"
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr "Membro não apagado"
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr "Membro de"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr "Membros"
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr ""
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr "Mensagem"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr "Corpo da mensagem não visível por não ser texto"
+
+#: NOT FOUND IN SOURCE
+msgid "Message body not shown because it is too large or is not plain text."
+msgstr "Corpo da mensagem não apresentado porque é grande demais ou não é texto"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr "Corpo da mensagem não visível por ser demasiado grande"
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Altura da caixa de mensagem"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Largura da caixa de mensagem"
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr "Mensagem não pôde ser gravada"
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Mensagem para o utilizador"
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr "Mensagem gravada"
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr "Mensagens sobre este ticket não serão enviadas a..."
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Tamanho mínimo da password"
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr "Minutos"
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr "Chave primária em falta?: %1"
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr "Telemóvel"
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr "Alterar Lista de Controle de Acessos"
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr "Modificar Campos Personalizados que se aplicam a %1 para todos os %2"
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr "Modificar todos os Campos Personalizados que se aplicam a todos os %1"
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr "Alterar Direitos de Grupo"
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr "Alterar Membros"
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr "Alterar Direitos"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr "Alterar templates dos Scrips para esta queue"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr "Alterar Scrips para esta queue"
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr "Alterar Direitos de Utilizadores"
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr "Modificar um Campo Personalizado para a queue %1"
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr "Alterar uma scrip da queue %1"
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr "Alterar uma scrip que se aplica a todas as queues"
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr "Mofificar objectos associados para %1"
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr "Modificar valores dos campos personalizados"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr "Alterar datas de #%1"
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr "Alterar datas do ticket # %1"
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr "Modificar campos personalizados globais"
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr "Alterar direitos de grupo globais"
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr "Alterar direitos de grupo globais"
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr "Alterar direitos de utilizador globais"
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr "Alterar direitos de utilizador globais"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr "Modificar metadados do grupo ou eliminar grupo"
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr "Modificar direitos do grupo para campo personalizado %1"
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr "Alterar direitos de grupo para o grupo %1"
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr "Alterar direitos de grupo para a queue %1"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr "Alterar pessoas relacionadas com a queue %1"
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr "Alterar pessoas relacionadas com o ticket %1"
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr "Alterar scrips da queue %1"
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr "Alterar scrips que se aplicam a todas as queues"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr "Alterar template %1"
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr "Alterar templates que se aplicam a todas as queues"
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr "Alterar a página principal"
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr "Alterar o grupo %1"
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr "Alterar o utilizador %1"
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr "Alterar o ticket # %1"
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr "Alterar ticket # %1"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr "Alterar tickets"
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr "Modificar direitos de utilizador para campo personalizado %1"
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr "Alterar direitos de utilizadores para o grupo %1"
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr "Alterar direitos de utilizador para a queue %1"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr ""
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Seg"
+
+#: NOT FOUND IN SOURCE
+msgid "Mon."
+msgstr "Mon"
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Segunda-Feira"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr "De Segunda a Sexta"
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "Mais"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr "Mais sobre %1"
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr "Mover para baixo"
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr "Mover para cima"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr "Múltiplo"
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr "Deve espedificar atributo \"Nome\""
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr "Os meus %1 tickets"
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr "O Meu Dia"
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr "As minhas aprovações"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr "As minhas pesquisas guardadas"
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "Nova linha"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr "Nome"
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr "Nome em utilização"
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr "Nunca"
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "Novo"
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr "Novas Ligações"
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr "Nova Password"
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr "Novas aprovações pendentes"
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr "Nova Pesquisa"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Tickets novos e abertos para %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr "Novo campo personalizado"
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr "Novo grupo"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Novas mensagens"
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr "Nova password"
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr "Notificação de nova password enviada"
+
+#: NOT FOUND IN SOURCE
+msgid "New queue"
+msgstr "Nova queue"
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr "Nova Nota"
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr "Novos direitos"
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr "Novo scrip"
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr "Novo template"
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr "Novo ticket"
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr "Novo ticket não existe"
+
+#: NOT FOUND IN SOURCE
+msgid "New user"
+msgstr "Novo utilizador"
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr "Novo utilizador chamado"
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr "Próximo"
+
+#: NOT FOUND IN SOURCE
+msgid "Next Page"
+msgstr "Próxima Página"
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "Alcunha"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr "Nick"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Não"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr "Sem Grupo definido"
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr ""
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr ""
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Sem Assunto"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr "Sem Modelo"
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr "Sem acção"
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr "Sem coluna especificada"
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr "Sem descrição para %1"
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr "Grupo não especificado"
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr "Nenhum grupo verificou o critério de pesquisa especificado."
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Sem chave adequada para encriptação"
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Sem chaves para este endereço"
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr "Sem mensagem anexada"
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Sem necessidade de encriptação"
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr "Password não definida"
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr "Sem permissão para criar queues"
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr "Sem permissão para criar tickets na queue '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "No permission to create users"
+msgstr "Sem permissão para criar utilizadores"
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr "Sem permissão para ver esse ticket"
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr "Não tem permissão para gravar uma pesquisa de sistema"
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Sem permissões para definir preferências"
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr "Sem permissão para ver ou actualizar esse ticket"
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Sem chave privada"
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr "Nenhuma fila verificou os critérios de pesquisa especificados"
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Sem direito especificado"
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr "Não foram encontrados direitos"
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr "Sem direitos atribuídos"
+
+#: NOT FOUND IN SOURCE
+msgid "No search loaded"
+msgstr "Nenhuma pesquisa carregada"
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr "Nenhuma pesquisa possível"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr "Sem assunto"
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Chave inexistente ou inadequada para assinatura"
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "Tickets não encontrados"
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr "Sem tipo de transacção especificado"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Sem chaves utilizáveis."
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr "Nenhum proprietário verificou o critério de pesquisa."
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr "Sem valor enviado para _Set!\\n"
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr "Nobody"
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Nenhum"
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr "Campo inexistente?"
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr "Não definido"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Não encontrado"
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr "Desligado"
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr "Não definido"
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr "Ainda não foi implementado."
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr "Observações"
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr "Notificação não pôde ser enviada"
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr ""
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr "Notificar AdminCCS como Comentário"
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr ""
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr "Notificar CCs como Comentário"
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr ""
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr "Notificar outros recipientes como comentário"
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr "Notificar Proprietário"
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr "Notificar Proprietário como comentário"
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr "Notificar Dono do seu ticket rejeitado"
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr "Notificar Dono que o seu ticket foi aprovado e está pronto para que tomem uma acção sobre o mesmo"
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr "Notificar Dono que o seu ticket foi aprovado por alguém ou por todos os aprovadores"
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr "Notidicar Dono, Requerentes, Ccs e AdminCcs"
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr "Notidicar Dono, Requerentes, Ccs e AdminCcs como Comentário"
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr "Notificar Donos e AdminCcs de novos itens com aprovação pendente"
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr "Notificar requerente que o seu ticket foi aprovado por todos os aprovadores"
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr "Notificar Requerentes"
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr "Notificar Requerentes e CCs"
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr "Notificar Requerentes e CCs como comentário"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs"
+msgstr "Notificar Requerentes, CCs e AdminCCs"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+msgstr "Notificar Requerentes, CCs e AdminCCs como comentário"
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Nov."
+msgstr "Nov"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr "OU"
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr ""
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr ""
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr ""
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr "Objecto apagado"
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Oct."
+msgstr "Oct"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr "Offline"
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr ""
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "On"
+msgstr "Em"
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr ""
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr "Em comentário"
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr "Em Resposta"
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr "Em Criação"
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr "Em Alteração de Dono"
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr "Em Alteração de Prioridade"
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr "Em Alteração de Queue"
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr "Em Resolução"
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr "Em Alteração de Estado"
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr "Em Transacção"
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr ""
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr "Tickets Abertos"
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr "Abrir"
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr "Tickets Abertos"
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr "Abrir Tickets em resposta"
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr "Opções"
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr "Ordenar por"
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr "Organização"
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr "Registado email sobre um comentário"
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr "Registado email"
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr "Com o passar do tempo, a prioridade altera-se para"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr "Próprios tickets"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr "Dono"
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "Dono alterado de %1 para %2"
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr "Dono não pôde ser definido."
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr "Proprietário forçado de %1 para %2"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Page %1 of %2"
+msgstr "Página %1 de %2"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr ""
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr "Password"
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr "Password alterada"
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr "A Password tem de ter pelo menos %1 caracteres"
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr "Password definida"
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr "Password: %1"
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr "Password: Permissão Negada"
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr "As passwords não coincidem."
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr "As passwords não coincidem. A sua password não foi alterada"
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr "Pessoas"
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr "Permissão Negada"
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr "Permissão Negada"
+
+#: NOT FOUND IN SOURCE
+msgid "Permissions denied"
+msgstr "Permissão Negada"
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr "Grupos Pessoais"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups"
+msgstr "Grupos Pessoais"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups:"
+msgstr "Grupos Pessoais:"
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr "Números de telefone"
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr "Preferências"
+
+#: NOT FOUND IN SOURCE
+msgid "Preferences %1 for user %2 ."
+msgstr "Preferências %1 para utilizador %2 ."
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr "Preferências gravadas para %1."
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Previous Page"
+msgstr "Página Anterior"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr ""
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr "Prioridade"
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr "Prioridade começa em"
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr "Privacidade:"
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr "Privilegiados"
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr "Utilizadores privilegiados"
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr "Construtor de Pesquisas"
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr "Pesquisa"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr "Queue"
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr "Queue %1 não encontrada"
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr "Nome da Queue"
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr "Essa Queue já existe"
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr "A Queue não pôde ser criada"
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr "Queue criada"
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr "Queue não encontrada"
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr "Queues"
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr ""
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr ""
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr "Pesquisa rápida"
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr "Criação de tickets rápida"
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr "RSS"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr "RT %1 para %2"
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr "Administração RT"
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr "Erro RT"
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "RT Self Service"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr ""
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr "RT no geral"
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr "\"RT no geral\" do utilizador %1"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr ""
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr "RT para %1"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr ""
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr "Nome"
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr "Gravar todas as actualizações"
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr ""
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr "Referido por"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr "Refere-se a"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr "Refrescar esta pagina de %1 em %1 minutos."
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr ""
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr "Lembretes"
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr "Notas para o pedido #%1"
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr ""
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr ""
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr "Responder"
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr "Endereço de Resposta"
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr "Responder aos Requerentes"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr "Resposta a tickets"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr "Relatórios"
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr "Requerentes"
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr ""
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr ""
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr ""
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr "Residência"
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr "Resolver"
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr "Resolver ticket #%1 (%2)"
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr "Resolvido"
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr "Resolvido pelo dono"
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr "Resolvido dentro do intervalo de datas"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr "Tickets resolvidos no período, agrupados por dono"
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr "Tickets resolvidos, agrupados por dono"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr "Resultados"
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr "Repita Password"
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr "Direito concedido"
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr ""
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr "Direito não encontrado"
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Rights"
+msgstr "Direitos"
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr "Perfis"
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr "Linhas por caixa"
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr "Linhas por página"
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sat."
+msgstr "Sat"
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr "Gravar"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr "Gravar Alterações"
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr "Gravar Preferências"
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Save changes"
+msgstr "Gravar alterações"
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Saved search %1"
+msgstr "Pesquisa gravada %1"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr ""
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr "Procurar"
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr "Preferências de pesquisa"
+
+#: NOT FOUND IN SOURCE
+msgid "Search attribute load failure"
+msgstr "Erro a carregar o atributo de pesquisa"
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr "Procurar nas aprovações"
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr "Procurar tickets"
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr "Opções de pesquisa"
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr "Resultados de pesquisa agrupados por %1"
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Search update: %1"
+msgstr "Actualização de pesquisa: %1"
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr "Procurar com o texto completo pode levar muito tempo a realizar, mas se for realmente necessário, pode efectuar uma pesquisa por qualquer palavra no historial do pedido ao especificar <b>fulltext:<i>palavra</i></b>."
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr "Segurança:"
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr "Escolha um grupo"
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr "Escolha uma queue"
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr "Escolha uma queue para o novo ticket"
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr "Escolha um utilizador"
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr "Seleccioned os \"Campos Personalizados\" para os pedidos em todas as filas"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr "Escolha grupo"
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr "Escolha múltiplos valores"
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr "Escolha um valor"
+
+#: NOT FOUND IN SOURCE
+msgid "Select queue"
+msgstr "Escolha a queue"
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr "Escolha queues para apresentação na página principal"
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr ""
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr "Escolha template"
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Select user"
+msgstr "Escolha utilizador"
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "Enviar email para todos os watchers"
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers as a \"comment\""
+msgstr "Enviar email para todos os watchers como um comentário"
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr ""
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr ""
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr ""
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr ""
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr ""
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr "Enviar email para o dono"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sep."
+msgstr "Sep"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr "Mostrar"
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr "Mostrar Resultados"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr "Mostrar informação básica"
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr ""
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr "Mostrar detalhes"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr "Mostrar pedidos pendentes"
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr "Assinatura"
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr "Pesquisa Simples"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr ""
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr "Tamanho"
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr ""
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "Pequeno"
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr "Ordenar"
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr "Iniciado"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr "Começa"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr "Estado"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr "Estado"
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr "Alteração de Estado"
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr "Alteração de estado de %1 para %2"
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr "Roubar"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr "Roubar tickets"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr "Roubado de %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Stolen from %1 "
+msgstr "Roubado de %1 "
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr "Assunto"
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr "Assunto alterado para %1"
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr "Enviar"
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sun."
+msgstr "Sun"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr ""
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr "Configuração de Sistema"
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr ""
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr "Ferramentas de Sistema"
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr "Grupos de sistema"
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr ""
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr "Tomar"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr "Tomar pedidos"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr "Template"
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr "Template $%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Template deleted"
+msgstr "Template apagado"
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr "Templates"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr "Essa queue não existe"
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr "Esse utilizador já é dono desse ticket"
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr "Esse utilizador não existe"
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr "Esse utilizador não pode ser dono de tickets nessa queue"
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr ""
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr "O Básico"
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr "O dono de um ticket"
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr ""
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr ""
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr "Esta funcionalidade está disponível apenas para os administradores do sistema"
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr "Esta mensagem será enviada para..."
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr "Esta transacção não parece ter conteúdo"
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr "%1 tickets deste utilizador com maior prioridade"
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Thu."
+msgstr "Thu"
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr ""
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr "Ticket #%1: %2"
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr "Ticket %1"
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr "Ticket %1 criado na queue '%2'"
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr "Ticket %1: %2"
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr ""
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr "Histórico do ticket # %1 %2"
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr "Ticket Resolvido"
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr "Transacções do ticket"
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr "Conteúdo do ticket"
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr ""
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr ""
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr "Estado do ticket alterado"
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr "Tickets"
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Tickets %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr "Tickets %1 por %2"
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr "Tickets criados depois de"
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr "Tickets criados antes de"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr "Tickets resolvidos depois de"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr "Tickets resolvidos antes de"
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr "Pedidos que dependem desta aprovação"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr "Tempo previsto"
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr "Tempo disponível"
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr "Tempo de trabalho"
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr "Tempo usado para disponibilizar página"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr ""
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr "Ferramentas"
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr "Total"
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr "Transacção"
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr "Transacção Criada"
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Tue."
+msgstr "Tue"
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr "Tipo"
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr ""
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr ""
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr "Procura sem nome"
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr "Actualizar"
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr "Actualizar Ticket"
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr "Tipo de actualização"
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr "Actualizar múltiplos tickets"
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr "Actualizar ticket"
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr "Actualizar ticket #%1"
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr "Actualizar ticket #%1 (%2)"
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr "Actualizado"
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr "Carregar"
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr "Carregar múltiplos ficheiros"
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr "Carregar múltiplas imagens"
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr "Carregar um ficheiro"
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr "Carregar uma imagem"
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr "Carregar até %1 ficheiros"
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr "Carregar até %1 imagens"
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr ""
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr "Utilizar outras ferramentas administrativas do RT"
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr "Utilizador '%1' não encontrado"
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr "Direitos de utilizador"
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr "Utilizador não criado: %1"
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr "Utilizador criado"
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr "Utilizador carregado"
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr "Grupos definidos por utilizadores"
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr "Username"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr "Utilizadores"
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr "Utilizadores que verificam o critério de pesquisa"
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr "Query válida"
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr "Valores"
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Wed."
+msgstr "Wed"
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr ""
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr "Quando um ticket é criado"
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr ""
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr "Quando algo acontece"
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr "Quando um ticket é resolvido"
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr ""
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr ""
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr ""
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr ""
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr ""
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr ""
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr ""
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr "Este ticket já é seu"
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr "Também pode editar a própria procura personalizada"
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr "Só pode atribuir um pedido que seja seu ou que não proprietário"
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr "Só pode responsabilizar-se por tickets que não têm dono"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr "Encontrou %1 tickets na queue %2"
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr "Saiu do RT"
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr "Não tem permissão para criar tickets nessa queue."
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr "Não pode criar pedidos nessa queue"
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr "Login ou password errados"
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr "Código Postal"
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr "fechado"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "contains"
+msgstr "contém"
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr "dias"
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr "apagado"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "doesn't contain"
+msgstr "não contém"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr "igual a"
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr "maior do que"
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr "grupo '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "grouped by %1"
+msgstr "agrupado por %1"
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr "horas"
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr "id"
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr "é"
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr "não é"
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr "menos do que"
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr "coincide"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "minutos"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr "meses"
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr "novo"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr "sem nome"
+
+#: NOT FOUND IN SOURCE
+msgid "no value"
+msgstr "sem valor"
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr "nenhum"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr "diferente de"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr "aberto"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr "queue %1 %2"
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr "rejeitado"
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr "resolvido"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr "pendente"
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr "linhas de sumário"
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr ""
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr ""
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr "ticket #%1 %2"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr "grupo indefinido %1"
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr "utilizador %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr "semanas"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "anos"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/pt_BR.po b/rt/lib/RT/I18N/pt_BR.po
new file mode 100755
index 0000000..ad757d0
--- /dev/null
+++ b/rt/lib/RT/I18N/pt_BR.po
@@ -0,0 +1,9249 @@
+# translation of pt_br.po to Portugues Brasileiro
+# Header entry was created by KBabel!
+#
+# Fernando Frota Machado de Morais <frota@cecom.ufmg.br>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-06-17 18:30+0000\n"
+"Last-Translator: Ronald Moretto <Unknown>\n"
+"Language-Team: Portugues Brasileiro <pt@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+"X-Poedit-Country: BRAZIL\n"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 deleted."
+msgstr " %1 removido."
+
+#: NOT FOUND IN SOURCE
+msgid " %1 renamed to %2."
+msgstr " %1 renomeado para %2."
+
+#: NOT FOUND IN SOURCE
+msgid " %1 saved."
+msgstr " %1 salvo."
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (sem chave pública!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (não confiável!)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr "#%1: %2"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr "%1 #%2"
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr "%1 %2 %3 %4:%5 %6"
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1 %2 %3 %4:%5:%6 %7"
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr "%1 %2 adicionado"
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr "%1 %2 atrás"
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr "%1 %2 alterado para %3"
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr "%1 %2 removido"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 deletados."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 %2 of group %3"
+msgstr "%1 %2 do grupo %3"
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 renomeado para %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 salvo."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr "%1 %2 com modelo %3"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (%2) %3 this ticket\\n"
+msgstr "%1 (%2) %3 este tíquete\\n"
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr "%1 (%2) por %3"
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr "%1 (Sem alteração)"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (day %2) at %3"
+msgstr "%1 (dia %2) em %3"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr "%1 (from pane %2)"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (on %2) at %3"
+msgstr "%1 (no %2) em %3"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - %2 shown"
+msgstr "%1 - %2 apresentados"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr "%1 - Ajustar opção de configuração LogParaTela"
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr "%1 - Um argumento para passar para %2"
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr "%1 - Exibe atualizações de estado no STDOUT"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify id of the template you want to use"
+msgstr "%1 - Especifique o id do modelo que você quer usar"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify if you want to use either 'first' or 'last' transaction"
+msgstr "%1 - Especifique se você quer usar a 'primeira' ou a 'última' transação"
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Especifique se você quer usar a 'primeira' , a 'última' ou 'todas' as transações"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr "%1 - Especifique o módulo de ação que você quer usar"
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Especifique a lista, separada por vírgulas, dos tipos de transação que você pretende usar"
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr "%1 - Especifique o módulo de condição que você quer usar"
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr "%1 - Especifique o módulo de busca que você quer usar"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify the type of a transaction you want to use"
+msgstr "%1 - Especifique o tipo de transação você quer usar"
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr "%1 Painéis"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 Dashboards"
+msgstr "%1 Painéis de Indicadores"
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr "%1 RT %2 Direitos Reservados 1996-%3 %4."
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr "ScripAction %1 carregado"
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr "%1 adicionado como um valor de %2"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on"
+msgstr "Aliases %1 requerem um TicketId no qual trabalhar"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on "
+msgstr "Aliases %1 requerem um TicketId no qual trabalhar "
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on (from %2) %3"
+msgstr "Aliases %1 requerem um TicketId no qual trabalhar (de %2) %3"
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 já existe e contém as tabelas do RT, mas não contém os metadados. O passo posterior 'Iniciar Banco de Dados' pode inserir os metadados no banco de dados existente. Se isto for aceitável, pressione `Personalizar Básicos` abaixo para continuar a personalizar RT."
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 já existe mas não contém as tabelas do RT nem os metadados. O passo posterior 'Iniciar Banco de Dados' pode criar as tabelas e inserir os metadados no banco de dados existente. Se isto for aceitável, pressione `Personalizar Básicos` abaixo para continuar a personalizar RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr "%1 parece ser um objeto local, mas não pode ser encontrado no banco de dados"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customez RT by clicking 'Customize Basics' below"
+msgstr "%1 parece estar completamente iniciado. Nós não precisamos criar nenhuma tela ou inserir metadados, mas você pode continuar a personalizar RT pressionando 'Personalizar Básicos' abaixo."
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 parece estar completamente iniciado. Não precisamos criar tabelas ou inserir metadados, mas você pode continuar a personalizar RT presisionando 'Personalizar Básicos' abaixo"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 at %2"
+msgstr "%1 em %2"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr "%1 por %2"
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr "%1 alterado de %2 para %3"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "Gráfico de %1 por %2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr "%1 copiado"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr "%1 configuração do núcleo"
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr "%1 não pôde ser alterado para %2"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 couldn't init a transaction (%2)\\n"
+msgstr "%1 não pôde iniciar uma transação (%2)\\n"
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr "%1 não pôde definir o estado como resolvido. O banco de dados do RT pode estar inconsistente."
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr "%1 criado"
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr "%1 removido"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr "%1 desabilitado"
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 não existe."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr "%1 habilitado"
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "%1 tíquetes de mais alta prioridade que eu possuo"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I own..."
+msgstr "%1 tíquetes de mais alta prioridade que eu possuo..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I requested..."
+msgstr "%1 tíquetes de mais alta prioridade que eu requeri..."
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr "%1 é uma ferramenta que age sobre os tíquetes a partir de uma ferramenta externa de agendamento, como cron."
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 é um utilitário, significando que pode ser executado a partir do cron, que envia todas as notificações adiadas como uma resenha por usuário."
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr "%1 não é mais um %2 desta fila."
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 não é mais um %2 deste tíquete."
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 não é mais um valor para o campo personalizado %2"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 isn't a valid Queue id."
+msgstr "%1 não é um identificador de fila válido."
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr "%1 min"
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr "%1 tíquetes mais recentes sem proprietário"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 not shown"
+msgstr "%1 não apresentado"
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr "%1 objetos"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 rights"
+msgstr "%1 direitos"
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr "%1 configuração do site"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 succeeded\\n"
+msgstr "%1 teve sucesso\\n"
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 atualizado: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "Atualização %1: Nada alterado"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 atualizado"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 was created without a CurrentUser\\n"
+msgstr "%1 foi criado sem um UsuárioAtual\\n"
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr "%1 resolverá todos os membros de um grupo de tíquetes resolvidos."
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr "%1's %2 objetos"
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr "%1's %2's %3 objetos"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "Painéis de indicadores de %1"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr "Primeiras %1 buscas salvas"
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr "%1: nenhum anexo especificado"
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr "%1b"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr "%1k"
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr "%quant(%1,hora)"
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr "'%1' é um valor inválido para estado"
+
+#: NOT FOUND IN SOURCE
+msgid "'%1' not a recognized action. "
+msgstr "'%1' não é uma ação reconhecida. "
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete group member)"
+msgstr "(Marque caixa para remover o membro do grupo)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete scrip)"
+msgstr "(Marque caixa para remover o scrip)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr "(Marque caixa para remover)"
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr "(Marque caixas para desativar notificações para os destinatários listados)"
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr "(Marque caixas para ativar notificações para os destinatários listados)"
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr "(Informe identificação de tíquetes ou URLs, separadas por espaço)"
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr "(Se deixado em branco, será entendido como %1)"
+
+#: NOT FOUND IN SOURCE
+msgid "(No Value)"
+msgstr "(Sem Valor)"
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr "(Sem campo personalizado)"
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr "(Sem membros)"
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr "(Sem scrips)"
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr "(Sem models)"
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr "(Nenhum)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(Envia uma cópia oculta desta atualização para uma lista de endereços de e-mails separados por ví­rgula.<strong>Não</strong> altera quem vai receber atualizações futuras.)"
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Envia uma cópia desta atualização para uma lista de endereços de e-mails administrativos separados por ví­rgula. Estas pessoas <strong>vão</strong> receber atualizações futuras.)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(Envia uma cópia desta atualização para uma lista de endereços de e-mails separados por ví­rgula.<strong>Não</strong> altera quem vai receber atualizações futuras.)"
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Envia uma cópia desta atualização para uma lista de endereços de separados por ví­rgula. Estas pessoas <strong>vão</strong> receber atualizações futuras.)"
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr "(Use estes campos quando você escolhar 'Definido pelo Usuário' para uma condição ou ação)"
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr "(Não enviará e-mail)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(qualquer)"
+
+#: NOT FOUND IN SOURCE
+msgid "(displaying new and open tickets for %1)"
+msgstr "(exibindo tíquetes novos e abertos pra %1)"
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr "(vazio)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no name listed)"
+msgstr "(sem nome listado)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(sem chave pública)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no subject)"
+msgstr "(Sem assunto)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr "(sem valor)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr "(sem valores)"
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr "(somente um tíquete)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(pendente %quant(%1,outro tíquete))"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr "(aprovação pendente)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other Collection)"
+msgstr "(outra Coleta pendente)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other tickets)"
+msgstr "(aguardando outros tíquetes)"
+
+#: NOT FOUND IN SOURCE
+msgid "(requestor's group)"
+msgstr "(grupo do requisitante)"
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr "(requerido)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(confiança: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr "(sem título)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(não confiável!)"
+
+#: NOT FOUND IN SOURCE
+msgid "(yyyy/mm/dd)"
+msgstr "(aaaa/mm/dd)"
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr "-"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "--transaction argument could be only 'first' or 'last'"
+msgstr "argumento --transaction só pode ser 'first' (primeiro) ou 'last' (último)"
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "argumento --transaction só pode ser 'first' (primeiro), 'last' (último) or 'all' (todos)"
+
+#: NOT FOUND IN SOURCE
+msgid "25 highest priority tickets I own..."
+msgstr "25 tíquetes mais prioritários que possuo..."
+
+#: NOT FOUND IN SOURCE
+msgid "25 highest priority tickets I requested..."
+msgstr "25 tíquetes mais prioritários que requisitei..."
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Novo tíquete em\" />&nbsp;%1"
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"Novo tíquete em\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Todos feeds iCal tem embutido uma chave secreta que autoriza você. Se a URL de um dos seus feeds iCal, for exposta externamente, você recebe uma nova chave, <b>quebrando todos feeds iCal existentes</b> abaixo</b> below.</p>"
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr "Um modelo vazio"
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr "Não foi definida uma senha, o usuário não estará apto a usar o sistema."
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Deleted"
+msgstr "ACE Removida"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Loaded"
+msgstr "ACE Carregada"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be deleted"
+msgstr "ACE não pode ser removida"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be found"
+msgstr "ACE não pode ser encontrada"
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr "ACE não encontrada"
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr "ACEs só podem ser criadas e removidas."
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr "E"
+
+#: NOT FOUND IN SOURCE
+msgid "Aborting to avoid unintended ticket modifications.\\n"
+msgstr "Abortando para evitar modificações indesejadas no tíquete.\\n"
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr "Sobre mim"
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr "Controle de acesso"
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr "Ação"
+
+#: NOT FOUND IN SOURCE
+msgid "Action %1 not found"
+msgstr "Ação %1 não encontrada"
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Ação '%1' não encontrada"
+
+#: NOT FOUND IN SOURCE
+msgid "Action committed."
+msgstr "Ação executada."
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr "Ação executada.\\n"
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr "Ação é um argumento obrigatório."
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr "Ação preparada..."
+
+#: NOT FOUND IN SOURCE
+msgid "Add"
+msgstr "Adicionar"
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr "Adicionar AdminCc"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Adicionar Favorito"
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr "Adicionar Cc"
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr "Adicionar Colunas"
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr "Adicionar Critério"
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr "Adicionar Mais Arquivos"
+
+#: NOT FOUND IN SOURCE
+msgid "Add Next State"
+msgstr "Adicionar Próximo Estado"
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr "Adicionar Requisitante"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr "Adicionar Valor"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip to this queue"
+msgstr "Adicionar um Scrip a esta fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip which will apply to all queues"
+msgstr "Adicionar um Scrip que será aplicado a todas as filas"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a keyword selection to this queue"
+msgstr "Adicionar uma seleção de palavra-chave a esta fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a new a global scrip"
+msgstr "Adicionar um novo scrip global"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a scrip to this queue"
+msgstr "Adicionar um scrip a esta fila"
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr "Adicionar um scrip que se aplicará a todas as filas"
+
+#: NOT FOUND IN SOURCE
+msgid "Add and Search"
+msgstr "Adicionar e Buscar"
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr "Adicionar comentários ou respostas aos tíquetes selecionados"
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr "Adicionar membros"
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr "Adicionar novos observadores"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Adicionar estes termos"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Adicionar estes termos e Buscar"
+
+#: NOT FOUND IN SOURCE
+msgid "Add these terms to your search"
+msgstr "Adicionar estes termos à sua busca"
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr "Adicionar valores"
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr "Adicionar, remover e modificar valores de campos personalizados para objetos"
+
+#: NOT FOUND IN SOURCE
+msgid "AddNextState"
+msgstr "AdicionarPróximoEstado"
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr "Usuário/Grupo adicionado como um %1 desta fila"
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr "Usuário/Grupo adicionado como um %1 deste tíquete"
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Endereço"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr "Endereço1"
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr "Endereço2"
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr "Admin Cc"
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr "Comentário do Administrador"
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr "Correspondência do Administrador"
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr "Administração de filas"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin users"
+msgstr "Administração de usuários"
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr "Administração da configuração global"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Groups"
+msgstr "Administração de Grupos"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Queue/Basics"
+msgstr "Administração de fila/Básicos"
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr "AdministrarTodosGruposPessoais"
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "AdminCCGroup"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr "AdminCc"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "AdminCcs"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminComment"
+msgstr "ComentarioAdministrador"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCorrespondence"
+msgstr "CorrespondenciaAdministrador"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr "AdministrarCampoPersonalizado"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCustomFields"
+msgstr "AdministrarCamposPersonalizados"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr "AdministrarGrupo"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr "AdministrarAfiliacaoGrupo"
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr "AdministrarGruposPessoaisPróprios"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr "AdministrarFila"
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr "AdministrarUsuários"
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr "Cc Administrativo"
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Senha administrativa"
+
+#: NOT FOUND IN SOURCE
+msgid "Admins"
+msgstr "Administradores"
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr "Avançado"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search"
+msgstr "Busca avançada"
+
+#: NOT FOUND IN SOURCE
+msgid "Age"
+msgstr "Idade"
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr "Agregador"
+
+#: NOT FOUND IN SOURCE
+msgid "Alias for"
+msgstr "Aliás para"
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr "Todas as Aprovações Concedidas"
+
+#: NOT FOUND IN SOURCE
+msgid "All Custom Fields"
+msgstr "Todos os Campos Personalizados"
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr "Todas as filas"
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Já encriptado"
+
+#: NOT FOUND IN SOURCE
+msgid "Always sends a message to the requestors independent of message sender"
+msgstr "Sempre envia uma mensagem para os requisitantes independentemente do remetente"
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr "E/Ou"
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr "Aplica-se a"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr "Aplicar"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr "Aplicar suas alterações"
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr "Aprovação"
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr "Aprovação #%1: %2"
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr "Aprovação #%1: Anotações não registradas devido a um erro de sistema"
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr "Aprovação #%1: Anotações registradas"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Details"
+msgstr "Detalhes da Aprovação"
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr "Aprovação Concedida"
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr "Aprovação pronta pelo Dono"
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr "Aprovação Rejeitada"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval diagram"
+msgstr "Diagrama da aprovação"
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr "Aprovar"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver's notes: %1"
+msgstr "Anotações do aprovador: %1"
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Abr"
+
+#: NOT FOUND IN SOURCE
+msgid "Apr."
+msgstr "Abr."
+
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "Abril"
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr "Asc"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr "Ascendente"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr "Definir e remover campos personalizados"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr "DefinirCamposPersonalizados"
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr "Anexar"
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr "Anexar arquivo"
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr "Arquivo anexado"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Anexo"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr "Anexo '%1' não pode ser carregado"
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr "Anexo criado"
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr "Nome do arquivo anexo"
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr "Anexos"
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Encriptação de anexos está desativada"
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr "Atributo Removido"
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Ago"
+
+#: NOT FOUND IN SOURCE
+msgid "Aug."
+msgstr "Ago."
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "Agosto"
+
+#: NOT FOUND IN SOURCE
+msgid "AuthSystem"
+msgstr "SistemaDeAutenticação"
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr "RespostaAutomatica"
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr "Responder Automaticamente para Requisitantes"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoreplyToRequestors"
+msgstr "RespostaAutomaticaParaRequisitantes"
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr "Disponível"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "Cópia Oculta"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Voltar"
+
+#: NOT FOUND IN SOURCE
+msgid "Back: "
+msgstr "Voltar "
+
+#: NOT FOUND IN SOURCE
+msgid "Bad PGP Signature: %1\\n"
+msgstr "Assinatura PGP inválida: %1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
+msgstr "Identificador de anexo inválido. Não foi possível encontrar o anexo '%1'\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad data in %1"
+msgstr "Dados inválidos em %1"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr "Privacidade inválida para atributo %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad transaction number for attachment. %1 should be %2\\n"
+msgstr "Número inválido de transação para o anexo. %1 deveria ser %2\\n"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "Básicos"
+
+#: NOT FOUND IN SOURCE
+msgid "Bcc"
+msgstr "Cópia oculta"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr "Não se esqueça de salvar suas alterações"
+
+#: NOT FOUND IN SOURCE
+msgid "Begin Approval"
+msgstr "Incício da Aprovação"
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr "Best Practical Solutions, LLC corporate logo"
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr "Vazio"
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Conteúdo"
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "Negrito"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Favorito"
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable URL for this search"
+msgstr "URL para guardar esta busca em Favoritos"
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable link"
+msgstr "Atalho para Favoritos"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Tíquetes em Favoritos"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr "Cabeçalhos resumidos"
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr "Atualização em Massa"
+
+#: NOT FOUND IN SOURCE
+msgid "Bulk ticket update"
+msgstr "Atualização de tíquetes em lote"
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Compre Suporte"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Por padrão, RT vai usar o fuso horáro de seu sistema. Isto permite a você definir um padrão global para exibição de datas e horários no RT. Seus usuários podem escolher um fuso horário diferente em suas preferências."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "CCGroup"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr "CF"
+
+#: NOT FOUND IN SOURCE
+msgid "Calendar"
+msgstr "Calendário"
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr "Não é possível modificar usuários do sistema"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr "Este Usuário/Grupo pode ver esta fila"
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr "Não é possível adicionar um valor de campo personalizado sem um nome"
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr "Não é possível uma classe de coleta para '%1'"
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr "Não é possível encontrar uma busca salva para ser trabalhada"
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr "Não é possível vincular um tíquete a ele mesmo"
+
+#: NOT FOUND IN SOURCE
+msgid "Can't merge into a merged ticket. You should never get this error"
+msgstr "Não é possível unir a um tíquete já unido. Você nunca deve obter este erro"
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr "Não é possível salvar %1"
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr "Não é possível salvar esta busca"
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr "Não é possível especificar origem e destino simultaneamente"
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Não é possível criar tíquetes numa fila desativada."
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr "Não é possível criar o usuário: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr "Categoria"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "Categoria não definida"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr "Cópia para"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "Ccs"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Alterar"
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr "Alterar a senha"
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr "Marque Tudo"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Verificar Conectividade do Banco de Dados"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr "Verifique as Credencias do Banco de Dados"
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr "Marque caixa para remover"
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr "Marque caixa para revogar o direito de acesso"
+
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Verificar as credenciais de seu banco de dados"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr "Filhos"
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr "Selecione o mecanismo SQL"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Selecione um motor de banco de dados"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a date"
+msgstr "Escolha uma data"
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr "Cidade"
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "Limpar"
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr "Limpar Tudo"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Pressione \"Terminar Instalação\" abaixo para completar este assistente."
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Pressione \"Iniciar Banco de Dados\" para criar o banco de dados do RT e inserir os metadados iniciais. Isto pode demorar um pouco"
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "Fechar janela"
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr "Fechado"
+
+#: NOT FOUND IN SOURCE
+msgid "Closed requests"
+msgstr "Requisições fechadas"
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr "Tíquetes fechados"
+
+#: NOT FOUND IN SOURCE
+msgid "Code"
+msgstr "Código"
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr "CaixaCombinada: Selecionar ou informar múltiplos valores"
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr "CaixaCombinada: Selecionar ou informar um valor"
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr "CaixaCombinada: Selecionar ou informar até %1 valores"
+
+#: NOT FOUND IN SOURCE
+msgid "Command not understood!\\n"
+msgstr "Comando não entendido!\\n"
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr "Comentar"
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr "Endereço de Comentário"
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Endereço de comentário"
+
+#: NOT FOUND IN SOURCE
+msgid "Comment not recorded"
+msgstr "Comentário não registrado"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr "Comentário nos tíquetes"
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "EndereçodeComentario"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr "ComentarioNoTiquete"
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "Comentários"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr "Comentários (Não enviados aos requisitantes)"
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr "Comentários (não enviados aos requisitantes)"
+
+#: NOT FOUND IN SOURCE
+msgid "Comments about %1"
+msgstr "Comentários sobre %1"
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr "Comentários sobre este usuário"
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr "Comentários adicionados"
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr "Execução Abortada"
+
+#: NOT FOUND IN SOURCE
+msgid "Compile Restrictions"
+msgstr "Compilar restrições"
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr "Condição"
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "Condição '%1' não encontrada"
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr "Condição é um argumento obrigatório"
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr "Condição satisfeita..."
+
+#: NOT FOUND IN SOURCE
+msgid "Condition not found"
+msgstr "Condição não encontrada"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "Condição, Ação e Modelo"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Arquivo de configuração %1 está bloqueado"
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr "Configuração"
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Conexão efetuada com sucesso"
+
+#: NOT FOUND IN SOURCE
+msgid "ContactInfoSystem"
+msgstr "Informação de contato"
+
+#: NOT FOUND IN SOURCE
+msgid "Contacted date '%1' could not be parsed"
+msgstr "Data de contato '%1' não pôde ser entendida"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr "Conteúdo"
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr "Tipo-de-Conteúdo"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "ContentType"
+
+#: NOT FOUND IN SOURCE
+msgid "Coould not create group"
+msgstr "Não foi possível criar o grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Copy"
+msgstr "Copiar"
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "Endereço de correspondência"
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr "EndereçodeCorrespondência"
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr "Correspondência"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence Address"
+msgstr "Endereço de correspondência"
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr "Correspondência adicionada"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence not recorded"
+msgstr "Correspondência não registrada"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. "
+msgstr "Não foi possível adicionar novo valor de campo personalizado para o tíquete. "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. %1 "
+msgstr "Não foi possível adicionar novo valor de campo personalizado para o tíquete. %1 "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. "
+msgstr "Não foi possível adicionar novo valor do campo personalizado. "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. %1 "
+msgstr "Não foi possível adicionar novo valor do campo personalizado. %1 "
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "Não foi possível adicionar novo valor do campo personalizado: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not change owner. "
+msgstr "Não foi possível alterar o proprietário. "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Impossível alterar proprietário: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr "Não foi possível criar CampoPersonalizado"
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr "Não foi possível criar CampoPersonalizado: %1"
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr "Não foi possível criar o grupo"
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr "Não foi possível criar o modelo: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Não é possível criar tíquetes em fila desativada \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr "Não foi possível criar o tíquete. Fila não definida"
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr "Não foi possível criar o usuário"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create watcher for requestor"
+msgstr "Não foi possível criar um observador para o requisitante"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find a ticket with id %1"
+msgstr "Não foi possível encontrar um tíquete com identificador %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find group %1."
+msgstr "Não foi possível encontrar o grupo %1."
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr "Não foi possível encontrar ou criar este usuário"
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr "Não foi possível encontrar este usuário/grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find user %1."
+msgstr "Não foi possível encontrar o usuário %1."
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Não foi possível carregar atributo %1"
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr "Não foi possível caarregar CampoPersonalizado %1"
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr "Não foi possível carregar o grupo"
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr "Não foi possível carregar objeto para %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not load search attribute"
+msgstr "Não foi possível carregar atributo de busca"
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr "Não foi possível fazer deste usuário/grupo um %1 desta fila"
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr "Não foi possível fazer deste usuário/grupo um %1 deste tíquete"
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr "Não foi possível remover este usuário/grupo como um %1 desta fila"
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr "Não foi possível remover este usuário/grupo como um %1 deste tíquete"
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr "Não foi possível definir informações sobre usuário"
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr "Não foi possível adicionar anexo"
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr "Não foi possível adicionar o membro ao grupo"
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr "Não foi possível criar uma transação: %1"
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Não foi possível criar o registro"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Não foi possível remover painel de indicadores %1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't figure out what to do from gpg's reply\\n"
+msgstr "Não sei o que fazer com a resposta do gpg\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find group\\n"
+msgstr "Não foi possível encontrar grupo\\n"
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr "Não foi possível encontrar o registro"
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Não foi possível encontrar uma transação aceitável, pulando"
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr "Não foi possível encontrar este usuário/grupo"
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr "Não foi possível encontrar este valor"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find that watcher"
+msgstr "Não foi possível encontrar este observador"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find user\\n"
+msgstr "Não foi possível encontrar o usuário\\n"
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr "Não foi possível carregar %1 do banco de dados de usuários.\\n"
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr "Não foi possível carregar Classe %1"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Não foi possível carregar Campo Personalizado #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr "Não foi possível carregar CampoPersonalizado %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load KeywordSelects."
+msgstr "Não foi possível carregar as SelecoesdePalavrasChave."
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load RT config file '%1' %2"
+msgstr "Não foi possível carregar o arquivo de configuração do RT '%1' %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load Scrips."
+msgstr "Não foi possível carregar os Scrips."
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr "Não foi possível carregar cópia do tíquete #%1."
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Não foi possível carregar painel de indicadores %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Não foi possível carregar painel de indicadores %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Não foi possível carregar grupo #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr "Não foi possível carregar grupo %1"
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr "Não foi possível carregar vínculo"
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr "Não foi possível carregar objeto %1"
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Não foi possível carregar ou criar o usuário: %1"
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr "Não foi possível carregar a fila"
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Não foi possível carregar a fila #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr "Não foi possível carregar a fila %1"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Não foi possível carregar a fila '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load scrip"
+msgstr "Não foi possível carregar o scrip"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr "Não foi possível carregar scrip #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load template"
+msgstr "Não foi possível carregar o modelo"
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Não foi possível carregar modelo #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load that user (%1)"
+msgstr "Não foi possível carregar este usuário (%1)"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr "Não foi possível carregar tíquete '%1'"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "Não foi possível carregar transação #%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Não foi possível carregar usuário #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Não foi possível extrair endereço da sequência de caracteres '%1'"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Não foi possível substituir o conteúdo com dado decriptado: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Não foi possível substituir o conteúdo com dado encriptado: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr "Não foi possível resolver '%1' dentro de uma URI."
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr "Não é possível determinar a origem '%1' em uma URI."
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr "Não é possível determinar o destino '%1' em uma URI."
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Não foi possível enviar email"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "Não foi possível definir observador %1: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "Não foi possível definir chave privada"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Náo foi possível excluir definição da chave privada"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr "País"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr "Criar"
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr "Criar Tíquetes"
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr "Criar um CampoPersonalizado"
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr "Criar um CampoPersonalizado para a fila %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a CustomField that applies to all queues"
+msgstr "Criar um CampoPersonalizado que se aplica a todas as filas"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new Custom Field"
+msgstr "Criar um novo Campo Personalizado"
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Criar um novo painel de indicadores"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global Scrip"
+msgstr "Criar um novo Scrip global"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global scrip"
+msgstr "Criar um novo scrip global"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr "Criar um novo grupo"
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr "Criar um novo grupo pessoal"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new queue"
+msgstr "Criar uma nova fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new scrip"
+msgstr "Criar um novo scrip"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new template"
+msgstr "Criar um novo modelo"
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr "Criar um novo tíquete"
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr "Criar um novo usuário"
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr "Criar uma fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a queue called"
+msgstr "Criar uma fila chamada"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a request"
+msgstr "Criar uma requisição"
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr "Criar um scrip para a fila %1"
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr "Criar um modelo"
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr "Criar um tíquete"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Criar painéis de indicadores para este grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1 / %2 / %3 "
+msgstr "Criação falhou: %1 / %2 / %3 "
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1/%2/%3"
+msgstr "Criação falhou: %1/%2/%3"
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr "Criar novos tíquetes baseados no modelo deste scrip"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Criar painel de indicadores pessoal"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Criar painéis de indicadores do sistema"
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr "Criar tíquete"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr "Criar tíquetes nesta fila"
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Criar tíquetes offline"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr "Criar, remover e modificar campos personalizados"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr "Criar, remover e modificar filas"
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr "Criar, remover e modificar os membros dos grupos pessoais de qualquer usuário"
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr "Criar, remover e modificar os membros de grupos pessoais"
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr "Criar, remover e modificar usuários"
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "CriarPaineldeIndicadores"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "CriarPaineldeIndicadoresdeGrupo"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "CriarPaineldeIndicadoresProprio"
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr "CriarBuscaSalva"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr "CriarTiquete"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr "Criado"
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Criado Por"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr "CampoPersonalizado %1 criado"
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr "Criados em um intervalo de datas"
+
+#: NOT FOUND IN SOURCE
+msgid "Created template %1"
+msgstr "Modelo %1 criado"
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr "Tíquetes criados no período, agrupados por estado"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "CriadoPor"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr "CreatedRelative"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr "Criador"
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "Criptografia"
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr "Vínculos Atuais"
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr "Scrips Atuais"
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr "Membros atuais"
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr "Direitos de acesso atuais"
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr "Busca atual"
+
+#: NOT FOUND IN SOURCE
+msgid "Current search criteria"
+msgstr "Critério de busca atual"
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr "Observadores atuais"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom Field #%1"
+msgstr "Campo Personalizado #%1"
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr "Campos Personalizados"
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr "Campos Personalizados para %1"
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr "Código de finalização de ação personalizada"
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr "Código de preparação de ação personalizada"
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr "Condição personalizada"
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "Campo personalizado %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "Campo personalizado %1 não se aplica a este objeto"
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr "Campo personalizado %1 tem um valor."
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr "Campo personalizado %1 não tem valor."
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr "Campo personalizado %1 não encontrado"
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr "Campo personalizado '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field deleted"
+msgstr "Campo personalizado removido"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field not found"
+msgstr "Campo personalizado não encontrado"
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr "Valor de campo personalizado %1 não pôde ser encontrado para campo personalizado %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field value changed from %1 to %2"
+msgstr "Valor do campo personalizado alterado de %1 para %2"
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr "Valor do campo personalizado não pôde ser removido"
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr "Valor de campo personalizado não pôde ser encontrado"
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr "Valor do campo personalizado removido"
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr "CampoPersonalizado"
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "CustomFieldValue"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr "Personalizar"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Personalizar Básicos"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "Personalizar Detalhes do Banco de Dados"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Personalizar Endereços de Email"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Personalizar Configuração de Email"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "Personalizar Global"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global Defaults"
+msgstr "Personalizar Padrões Globais"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "Senha do DBA"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "Nome de usuário do DBA"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Resenha diária"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Painel de Indicadores"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Painel de Indicadores não pôde ser criado: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Painel de indicadores não pôde ser atualizado: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Painel de indicadores atualizado"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Painéis de Indicadores"
+
+#: NOT FOUND IN SOURCE
+msgid "Data error"
+msgstr "Erro de dado"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Servidor do banco de dados"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Nome do banco de dados"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Senha do banco de dados para RT"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Porta do banco de dados"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Tipo do banco de dados"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Nome do usuário do banco de dados para RT"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Formato de Data"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr "Faltando módulo DateTime"
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr "Faltando módulo DateTime::Locale"
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr "Datas"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Dez"
+
+#: NOT FOUND IN SOURCE
+msgid "Dec."
+msgstr "Dez."
+
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "Dezembro"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Decriptar"
+
+#: NOT FOUND IN SOURCE
+msgid "Default Autoresponse Template"
+msgstr "Modelo Padrão de Resposta Automática"
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr "Modelo Padrão de Resposta automática"
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr "Fila Padrão"
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr "Requisitante Padrão"
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr "Modelo padrão de comentário administrativo"
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr "Modelo padrão de correspondência administrativa"
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr "Modelo padrão de correspondência"
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Fila padrão"
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr "Modelo padrão de transação"
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "Padrão: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr "Padrão: %1/%2 alterado de %3 para %4"
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr "PadrãodeVencimento"
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr "DefaultFormat"
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr "Delegar direitos de acesso"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr "Delegar direitos específicos que foram outorgados a você."
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr "DelegarDireitos"
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr "Delegação"
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr "Remover"
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr "Remover Modelo"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "Remover painéis de indicadores para este grupo"
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr "Remoção falhou: %1"
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "Remover painéis de indicadores pessoais"
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr "Remover scrips selecionados"
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "Remover painéis de indicadores do sistema"
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr "Remover tíquetes"
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr "Remover valores"
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "RemoverPaineldeIndicadores"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "RemoverPaineldeIndicadoresdeGrupo"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "RemoverPaineldeIndicadoresProprio"
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr "RemoverTicket"
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "%1 removido"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Painel de indicadores %1 removido"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr "Consultas Excluidas"
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Busca salva removida"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleted search"
+msgstr "Busca removida"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object could break referential integrity"
+msgstr "Remoção deste objeto pode quebrar a integridade referencial"
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr "Remoção deste objeto causaria quebra da integridade referencial"
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr "Remoção deste objeto violaria a integridade referencial"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity."
+msgstr "Remoção deste objeto violaria a integridade referencial"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity. That's bad."
+msgstr "Remoção dste objeto violaria a integridade referencial. Isto é mau."
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr "Negar"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr "Dependem deste tíquete"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr "DependedOnBy"
+
+#: NOT FOUND IN SOURCE
+msgid "Dependencies: \\n"
+msgstr "Dependências: \\n"
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr "Dependência por %1 adicionada"
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr "Dependência por %1 removida"
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr "Dependência de %1 adicionada"
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr "Dependência de %1 removida"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr "DependentOn"
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr "Depende de"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "DependeDe"
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr "Desc"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr "Descendente"
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr "Descreva o problema abaixo"
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr "Descrição"
+
+#: NOT FOUND IN SOURCE
+msgid "Details"
+msgstr "Detalhes"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Direção"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Desativado"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr "Exibir"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr "Exibir Lista de Controle de Acesso"
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr "Exibir Colunas"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr "Exibir os modelos de Scrip desta fila"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr "Exibir os Scrips desta fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Display mode"
+msgstr "Modo de apresentação"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr "Exibir buscas salvas deste grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Display ticket #%1"
+msgstr "Exibir tíquete #%1"
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr "Distribuido sob a versão 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> da GNU GPL.</a>"
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr "Fazer qualquer coisa"
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Nome do domínio"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Não inclua http://, apenas alguma coisa como 'localhost', 'rt.example.com'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr "Não recarregar esta página."
+
+#: NOT FOUND IN SOURCE
+msgid "Don't show search results"
+msgstr "Não apresentar resultados da busca"
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Chave não confiável de maneira alguma"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr "Baixar"
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr "Baixar como um arquivo com campos delimitados por tabulação"
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Baixar arquivo de dump"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr "Vencimento"
+
+#: NOT FOUND IN SOURCE
+msgid "Due date '%1' could not be parsed"
+msgstr "A data de vencimento '%1' não pôde ser entendida"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr "DueRelative"
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "ERRO: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
+msgstr "ERRO: Não foi possível carregar tíquete '%1': %2.\\n"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "Atualização fácil de seus tíquetes abertos"
+
+#: NOT FOUND IN SOURCE
+msgid "Ecnrypt/Decrypt"
+msgstr "Encriptar/Decriptar"
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr "Editar"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Conditions"
+msgstr "Editar Condições"
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr "Editar Campos Personalizados"
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr "Editar Campos Personalizados para %1"
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr "Editar Campos Personalizados para todos os grupos"
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Editar Campos Personalizados para todas as filas"
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr "Editar Campos Personalizados para todos os usuários"
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr "Editar Campos Personalizados para tíquetes em todas as filas"
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr "Editar Vínculos"
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr "Editar Consulta"
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr "Editar Busca"
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr "Editar Modelos para a fila %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit keywords"
+msgstr "Editar palavras chave"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr "Editar buscas salvas deste grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit scrips"
+msgstr "Editar scrips"
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr "Editar modelos do sistema"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit templates for %1"
+msgstr "Editar os modelos para %1"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr "EditarBuscasSalvas"
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Texto editável"
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr "Editando Configuração para fila %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing Configuration for user %1"
+msgstr "Editando Configuração para usuário %1"
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr "Editando CampoPersonalizado %1"
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr "Editando afiliados do grupo %1"
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr "Editando afiliados do grupo pessoal %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing template %1"
+msgstr "Editando modelo %1"
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr "EffectiveId"
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr "Ou origem ou destino deve ser especificado"
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "Ou você não tem direito de ver a busca salva %1 ou o identificador está incorreto"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr "Mensagem"
+
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "Configuração de Email"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Resenha de Email"
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr "Endereço de e-mail já está em uso"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "Envio de email"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr "Modelo de email para notificação periódica de resenhas"
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "Correio Eletrônico"
+
+#: NOT FOUND IN SOURCE
+msgid "EmailEncoding"
+msgstr "CodificaçãoDeEmail"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "Ativado"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr "Ativo (Desmarcar esta caixa desativa este campo personalizado)"
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr "Ativo (Desmarcar esta caixa desativa este grupo)"
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr "Ativa (Desmarcar esta caixa desativa esta fila)"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Custom Fields"
+msgstr "Campos Personalizados Ativos"
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr "Filas Ativas"
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr "Estado %1 ativado"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled status: %1"
+msgstr "Ativado estado: %1"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Encriptar"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Encriptar por padrão"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Encriptar/Decriptar"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Encriptar/Decriptar transação #%1 do tíquete #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Encriptação desativada"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Encriptação ativada"
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr "Informar valores múltiplos"
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "Informar múltiplos valores com autocomplemento"
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr "Informar objetos ou URIs para vincular aos objetos. Separar entradas múltiplas com espaço."
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr "Informar um valor"
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "Informar um valor com autocomplemento"
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr "Informar filas ou URIs para vincular às filas. Separar entradas múltiplas com espaço."
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr "Informar identificadores de tíquete ou URIs para vincular ao tíquete. Separar entradas múltiplas com espaço."
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr "Informar até %1 valores"
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Informar até %1 valores com autocomplemento"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr "Erro"
+
+#: NOT FOUND IN SOURCE
+msgid "Error adding watcher"
+msgstr "Erro ao adicionar um observador"
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr "Erro nos parâmetros para Fila->AdicionarObservador"
+
+#: NOT FOUND IN SOURCE
+msgid "Error in parameters to Queue->DelWatcher"
+msgstr "Erro nos parâmetros para Fila->RemoverObservador"
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr "Erro em parâmetros para Fila->RemoverObservador"
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr "Erro nos parâmetros para Tíquete->AdicionarObservador"
+
+#: NOT FOUND IN SOURCE
+msgid "Error in parameters to Ticket->DelWatcher"
+msgstr "Erro nos parâmetros para Tíquete->RemoverObservador"
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr "Erro em parâmetros para Tíquete->RemoverObservador"
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Erro proprietário RT: chave pública"
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Erro: Falta painel de indicadores"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Erro: dado GnuPG inválido"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Erro: sem chave privada"
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Erro: chave pública"
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr "Escalonar tíquetes"
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr "Estimado"
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr "Todos"
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "Examinar os tíquetes criados em uma fila entre duas datas"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "Examinar os tíquetes resolvidos em uma fila entre duas datas"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "Examinar os tíquetes resolvidos em uma fila, agrupados por proprietário"
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr "Exemplo:"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "Expira em"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "ExtendedStatus"
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr "Informação adicional"
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr "Extrair Tag Assunto"
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr "Extrair tags de um Assunto de transação e adicioná-la ao Assunto de ticket."
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Falhar ao conectar ao banco de dados: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Falha ao criar atributo %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Failed to create search attribute"
+msgstr "Falha ao criar atributo de busca"
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr "Falha ao procurar o pseudogrupo de usuários 'Privilegiado'."
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr "Falha ao procurar o pseudogrupo de usuários 'Sem Privilégio'"
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Falha ao carregar %1 %2"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Falha ao carregar %1 %2: %3"
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr "Falha ao carregar o módulo %1. (%2)"
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr "Falha ao carregar objeto para %1"
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Falha ao carregar modelo"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "Falha em entender modelo"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Fev"
+
+#: NOT FOUND IN SOURCE
+msgid "Feb."
+msgstr "Fev."
+
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "Fevereiro"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "Fonte de valores de campo:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "FileName"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr "Nome de arquivo"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr "Forneça argumentos"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr "Preencha os campos usando a cor"
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr "Preencher múltiplas áreas de texto"
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr "Preencher múltiplas áreas de texto wiki"
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr "Preencher uma única área de texto"
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr "Preencher uma única área de texto wiki"
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr "Preencher este campo com uma URL."
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr "Preencher até %1 áreas de texto"
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr "Preencher até %1 áreas de texto wiki"
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr "Prioridade Final"
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr "PrioridadeFinal"
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Encontrar todos os usuários em que"
+
+#: NOT FOUND IN SOURCE
+msgid "Find group whose"
+msgstr "Encontrar grupo em que"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr "Encontrar grupos em que"
+
+#: NOT FOUND IN SOURCE
+msgid "Find new/open tickets"
+msgstr "Encontrar tíquetes novos/abertos"
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr "Encontrar pessoas em que"
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr "Encontrar tíquetes"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Terminar"
+
+#: NOT FOUND IN SOURCE
+msgid "Finish Approval"
+msgstr "Terminar Aprovação"
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr "Primeiro"
+
+#: NOT FOUND IN SOURCE
+msgid "First page"
+msgstr "Primeira página"
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr "Foo Bar Baz"
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr ""
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr "Forçar alteração"
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr "Formato"
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "Reencaminhar"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "Reencaminhar Mensagem"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "Reencaminhar Mensagem e Voltar"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "Reencaminhar mensagem"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "Reencaminhar mensagens para terceira(s) pessoa(s)"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "ReencaminharMensagem"
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr "Encontrado(s) %quant(%1,tíquete(s)"
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr "Objeto Encontrado"
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "Frequência"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Sex"
+
+#: NOT FOUND IN SOURCE
+msgid "Fri."
+msgstr "Sex."
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "Sexta"
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr "Cabeçalhos completos"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Geral"
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr "Pegar modelo no arquivo"
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Iniciando"
+
+#: NOT FOUND IN SOURCE
+msgid "Getting the current user from a pgp sig\\n"
+msgstr "Obtendo o usuário atual a partir de uma assinatura pgp\\n"
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr "Dado a %1"
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr "Global"
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr "Campos Personalizados Globais"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Keyword Selections"
+msgstr "Seleções de Palavras Chave Globais"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Scrips"
+msgstr "Scrips Globais"
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr "Configuração de campos personalizados globais"
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr "Portlet global %1 salvo."
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr "Modelo global: %1"
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "Erro GnuPG. Entre em contato com o administrador."
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "Integração GnuPG está desativada"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr "Problemas GnuPG"
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "Chave(s) privada(s) GnuPG para %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "Chave(s) pública(s) GnuPG para %1"
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "Ir"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "Ir!"
+
+#: NOT FOUND IN SOURCE
+msgid "Good pgp sig from %1\\n"
+msgstr "Assinatura pgp válida de %1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Goto page"
+msgstr "Ir para a página"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr "Ir para o tíquete"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "Gráfico"
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "Propriedades do Gráfico"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "Gráficos não estão disponíveis."
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "Grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Group %1 %2: %3"
+msgstr "Grupo %1 %2: %3"
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr "Direitos de Acesso do Grupo"
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Grupo já tem um membro: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Group could not be created."
+msgstr "Grupo não pôde ser criado."
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr "Grupo não pôde ser criado: %1"
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr "Grupo criado"
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Grupo desativado"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Grupo ativado"
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr "Grupo não contém este membro"
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr "Grupo não encontrado"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not found.\\n"
+msgstr "Grupo não encontrado.\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not specified.\\n"
+msgstr "Grupo não especificado.\\n"
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Direitos de Grupo"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr "Grupos"
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr "Grupos não podem ser membros de seus próprios membros"
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr "Grupos que satisfazem ao critério de busca"
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "Grupos aos quais o usuário pertence (marque caixa para remover)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "Grupos aos quais o usuário não pertence (marque caixa para adicionar)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr "Grupos a que este usuário pertence"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr "TemMembros"
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr "Olá!"
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr "Olá, %1"
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "Ajude-nos a atribuir alguns valores padrão úteis para RT."
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr "Histórico"
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr "Histórico do grupo %1"
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr "Histórico da fila %1"
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr "Histórico do usuário %1"
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "Página Inicial"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "Intervalo para recarregar Página Inicial"
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "Telefone Residencial"
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr "Início"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "Hora"
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr "Horas"
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr "Eu tenho %quant(%1,concrete mixer)."
+
+#: NOT FOUND IN SOURCE
+msgid "I have [quant,_1,concrete mixer]."
+msgstr "Eu tenho [quant,_1,concrete mixer]."
+
+#: NOT FOUND IN SOURCE
+msgid "I'm lost"
+msgstr "Estou perdido"
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ISO"
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr "Identificador"
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr "Identidade"
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr "Se uma aprovação não é concedida, rejeitar o original e remover aprovações pendentes"
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr "Se nenhum Requisitante for especificado, criar tíquetes com este requisitante."
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr "Se nenhuma fila for especificada, criar tíquetes nesta fila."
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr "Se esta ferramenta estiver com setgid, um usuário local mal-intencionado pode conseguir acesso administrativo sobre o RT."
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr "Se você já tem um servidor RT ativo e o banco de dados, você pode aproveitar estar oportunidade para ter certeza de que seu servidor de banco de dados está rodando e que o servidor RT pode se conectar a ele. Uma vez você tenha feito isto, pare e inicie o servidor RT.</p>"
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "Se você alterou a Porta na qual RT executa, você vai ter que reiniciar o servidor para poder entrar novamente no sistema."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr "Se você alterou qualquer coisa acima, não se esqueça de"
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr "Se seu banco de dados preferido não estiver listado abaixo, isto significa que RT não pode encontrar um <i>driver de banco de dados</i> para ele instalado localmente. Você pode consertar isto usando %1 para baixar e instalar DBD::MySQL, DBD::Oracle ou DBD::Pg."
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr "Valor ilegal para %1"
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr "Campo imutável"
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "Incluir campos personalizados desativados na listagem."
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr "Incluir grupos desativados na listagem."
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr "Incluir filas desativadas na listagem."
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr "Incluir usuários desativados na busca."
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr "Incluir página"
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete Query"
+msgstr "Consulta Incompleta"
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete query"
+msgstr "Consulta incompleta"
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Mensagens individuais"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Informar proprietário de RT que usuário(s) tem problemas com chaves públicas"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Informar usu[ario que um painel de indicadores subscrito por ele está faltando"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Informar usuário que uma mensagem enviada por ele tem dado GnuPG inválido"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Informar ao usuário que ele tem problemas com a chave pública e náo pode receber conteúdo encriptado"
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Informar ao usuário que sua senha foi apagada"
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Informar ao usuário que recebemos um email encriptado e não temos chaves privadas para decriptar"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr "Prioridade Inicial"
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr "PrioridadeInicial"
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Iniciar Banco de Dados"
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr "Erro de entrada"
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr "Entrada precisa satisfazer %1"
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "Instalar RT"
+
+#: NOT FOUND IN SOURCE
+msgid "Interest noted"
+msgstr "Interesse anotado"
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr "Erro Interno"
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr "Erro Interno: %1"
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "%1 inválido: '%2' não parece com um endereço de email"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "%1 inválido: ele deve ser um número"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "%1 inválido: isto não parece com um endereço de email"
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr "Tipo Inválido de Grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Right"
+msgstr "Direito Inválido"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Type"
+msgstr "Tipo Inválido"
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr "Dado inválido"
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Objeto inválido"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Dono de objeto inválido"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid owner. Defaulting to 'nobody'."
+msgstr "Proprietário inválido. Usando 'nobody'."
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr "Padrão inválido: %1"
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr "Fila inválida"
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr "Direito de acesso inválido"
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr "Direito inválido. Não é possível aceitar direito '%1'"
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr "Sintaxe inválida para endereço de email"
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr "Valor inválido para %1"
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr "Valor inválido para campo personalizado"
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr "Valor inválido para estado"
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "Não está encriptado"
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr "É muito importante que usuários não privilegiados não tenham permissão para utilizar esta ferramenta."
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr "Sugere-se a criação de um usuário Unix não privilegiado com a correta filiação a grupo e com acesso ao RT para executar utilizar esta ferramenta."
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr "Requer vários argumentos:"
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr "Itálico"
+
+#: NOT FOUND IN SOURCE
+msgid "Items pending my approval"
+msgstr "Itens requerendo minha aprovação"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Jan"
+
+#: NOT FOUND IN SOURCE
+msgid "Jan."
+msgstr "Jan."
+
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "Janeiro"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr "Entrar ou deixar este grupo"
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Jul"
+
+#: NOT FOUND IN SOURCE
+msgid "Jul."
+msgstr "Jul."
+
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "Julho"
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr "Jumbo"
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Jun"
+
+#: NOT FOUND IN SOURCE
+msgid "Jun."
+msgstr "Jun."
+
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "Junho"
+
+#: NOT FOUND IN SOURCE
+msgid "Keep 'localhost' if you're not sure"
+msgstr "Mantenha 'localhost' se você não tem certeza"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "Deixe 'localhost' se não tiver certeza. Deixe em branco para conectar localmente através de um socket"
+
+#: NOT FOUND IN SOURCE
+msgid "Keyword"
+msgstr "Palavra-chave"
+
+#: NOT FOUND IN SOURCE
+msgid "Lang"
+msgstr "Líng"
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr "Língua"
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr "Grande"
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr "Último"
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr "Último Contato"
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr "Contactado em"
+
+#: NOT FOUND IN SOURCE
+msgid "Last Notified"
+msgstr "Notificado em"
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr "Atualizado em"
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "Última atualização por"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "Última atualização por"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "UltimaAtualizacao"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr "UltimaAtualizacaoPor"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "Mantenha vazio para usar os valores padrões para seu banco de dados"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr "Deixe em branco para usar o nome de usuário dba padrão para seu tipo de banco de dados"
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr "Resta(m)"
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr "Legendas"
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Tamanho em caracteres; Use '0' para mostrar todas as mensagens incorporadas, apesar de seu tamanho"
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr "Deixar este usuário acessar RT"
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr "Deixar este usuário receber direitos de acesso adicionais"
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "Vamos!"
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting owner to %1 %2"
+msgstr "Limitando proprietário a %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting queue to %1 %2"
+msgstr "Limitando fila a %1 %2"
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr "Vínculo"
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr "Vínculo já existe"
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr "Vínculo não pôde ser criado"
+
+#: NOT FOUND IN SOURCE
+msgid "Link created (%1)"
+msgstr "Vínculo criado (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Link deleted (%1)"
+msgstr "Vínculo removido (%1)"
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr "Vínculo não encontrado"
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr "Vincular o tíquete #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Link ticket %1"
+msgstr "Vincular o tíquete %1"
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr "Vincular valores a"
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "Conectado"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "VinculadoCom"
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr "Vinculando. Permissão negada"
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr "Vínculos"
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr "Carregar"
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr "Carregar buscas salvas:"
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr "CarregarBuscaSalva"
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "%1 %2 carregado"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "Busca salva original \"%1\" carregada"
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr "Módulos perl carregados"
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "Busca salva \"%1\" carregada"
+
+#: NOT FOUND IN SOURCE
+msgid "Loaded search %1"
+msgstr "Busca %1 carregada"
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Localização"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "Local"
+
+#: NOT FOUND IN SOURCE
+msgid "Log directory %1 not found or couldn't be written. RT can't run."
+msgstr "Diretório de log %1 não foi encontrado ou não pôde ser alterado. RT não pode ser executado."
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr "Entrou como %1"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Saiu"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr "Entrar"
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr "Sair"
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr "Tipo de consulta não corresponde"
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Mail"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr "Tipos principais de vínculos"
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr "Definir Proprietário"
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr "Definir o estado"
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr "Definir data de Vencimento"
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr "Definir data de Resolução"
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr "Definir data de Iniciado"
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr "Definir data de início"
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr "Definir data de última alteração"
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr "Definir prioridade"
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr "Definir fila"
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr "Definir assunto"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr "Tornar este grupo visível para o usuário"
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr "Gerenciar campos personalizados e valores de campos personalizados"
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr "Administrar grupos e afiliações"
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr "Administrar propriedades e configurações aplicáveis a todas as filas"
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr "Administrar filas e suas propriedades específicas"
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Gerenciar gráficos salvos"
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr "Administrar usuários e senhas"
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Mar"
+
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "Março"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Todas as mensagens marcadas como lidas"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "Comprimento máximo de mensagem incorporada"
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "Maio"
+
+#: NOT FOUND IN SOURCE
+msgid "May."
+msgstr "Mai."
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "Membro"
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr "Membro %1 adicionado"
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr "Membro %1 removido"
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Membro adicionado: %1"
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr "Membro removido"
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr "Membro não removido"
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr "Membro de"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "MembroDe"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr "Membros"
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr "Filiação em %1 adicionada"
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr "Filiação em %1 removida"
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr "Filiações"
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr "Filiações do usuário %1"
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr "União bem sucedida"
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr "União falhou. Não foi possível definir o EffectiveId"
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr "Fusão falhou. Não foi possível definir Estado."
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr "Unir a"
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr "Unido a %1"
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr "Mensagem"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr "O corpo da mensagem não é mostrado porque o remetente solicitou não apresentá-lo."
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr "O corpo da mensagem não é mostrador porque não é texto puro."
+
+#: NOT FOUND IN SOURCE
+msgid "Message body not shown because it is too large or is not plain text."
+msgstr "Corpo da mensagem não apresentado porque é muito grande ou não é um texto plano."
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr "O corpo da mensagem não é mostrador porque é muito grande."
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Altura da caixa de mensagem"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Largura da caixa de mensagem"
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr "Mensagem não pode ser registrada"
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Mensagem para usuário"
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr "Mensagem registrada"
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr "Mensagens sobre este tíquete não serão enviadas para..."
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "Comprimento mínimo de senha"
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr "Minutos"
+
+#: NOT FOUND IN SOURCE
+msgid "Mismatched parentheses"
+msgstr "Parênteses sem correspondente"
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr "Faltando uma chave primária?: %1"
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr "Móvel"
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "Celular"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr "Modificar Lista de Controle de Acesso"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Custom Field %1"
+msgstr "Modificar o campo personalizado %1"
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr "Modificar Campos Personalizados que se aplicam a %1 para todos %2"
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr "Modificar Campos Personalizados que se aplicam a todos %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Custom Fields which apply to all queues"
+msgstr "Modificar Campos Personalizados que se aplicam a todas as filas"
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr "Modificar Direitos de Grupo"
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr "Modificar Membros"
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr "Modificar Direitos"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr "Modificar modelos de Scrip desta fila"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr "Modificar Scrips desta fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify System ACLS"
+msgstr "Modificar ACLs do Sistema"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Template %1"
+msgstr "Modificar Esquema %1"
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr "Modificar Direitos de Usuário"
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr "Modificar um Campo Personalizado para a fila %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify a CustomField that applies to all queues"
+msgstr "Modificar um Campo Personalizado que se aplica a todas as filas"
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr "Modificar um scrip para a fila %1"
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr "Modificar um scrip aplicável a todas as filas"
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr "Modificar objetos associados a %1"
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr "Modificar valores de campos personalizados"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "Modificar painéis de indicadores para este grupo"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify dates for # %1"
+msgstr "Modificar datas para # %1"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr "Modificar as datas para #%1"
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr "Modificar as datas para o tíquete # %1"
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr "Modificar campos personalizados globais"
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr "Modificar direitos de acesso globais de grupo"
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr "Modificar direitos de acesso globais de grupo."
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for groups"
+msgstr "Modificar direitos globais para grupos"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for users"
+msgstr "Modificar direitos globais para usuários"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global scrips"
+msgstr "Modificar scrips globais"
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr "Modificar direitos de acesso globais de usuário"
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr "Modificar direitos de acesso globais de usuário."
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr "Modificar metadados do grupo ou removê-lo"
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr "Modificar direitos de grupo para campo personalizado %1"
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr "Modificar os direitos de acesso do grupo %1"
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr "Modificar os direitos de acesso de grupo para a fila %1"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr "Modificar afiliados deste grupo"
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr "Modificar sua própria conta RT"
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr "Modificar as pessoas relacionadas à fila %1"
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr "Modificar as pessoas relacionadas ao tíquete #%1"
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "Modificar painéis de indicadores pessoais"
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr "Modificar os scrips da fila %1"
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr "Modificar scrips aplicáveis a todas as filas"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "Modificar painéis de indicadores do sistema"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr "Modificar o modelo %1"
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr "Modificar modelos que se aplicam a todas as filas"
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Modificar painel de indicadores %1"
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr "Modificar \"RT por alto\" padrão"
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr "Modificar o grupo %1"
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Modificar as pesquisas do painel de indicadores %1"
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr "Modificar os observadores da fila"
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Modificar a subscrição para o painel de indicadores %1"
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr "Modificar o usuário %1"
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr "Modificar o tíquete # %1"
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr "Modificar o tíquete #%1"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr "Modificar tíquetes"
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr "Modificar direitos de usuário para campo customizado %1"
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr "Modificar os direitos de acesso de usuário para o grupo %1"
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr "Modificar os direitos de acesso de usuário para a fila %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify watchers for queue '%1'"
+msgstr "Modificar os observadores para a fila '%1'"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr "ModificarACL"
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr "ModificarCampoPersonalizado"
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "ModificarPaineldeIndicadores"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "ModificarPaineldeIndicadoresdeGrupo"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "ModificarPaineldeIndicadoresProprio"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr "ModificarFiliaçãoPrópria"
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr "ModificarObservadoresdaFila"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr "ModificarScrips"
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr "AutoModificar-se"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr "ModificarModelo"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr "ModificarTiquete"
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Seg"
+
+#: NOT FOUND IN SOURCE
+msgid "Mon."
+msgstr "Seg."
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Segunda"
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr "Segunda até Sexta"
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "Mais"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr "Mais sobre %1"
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr "Descer"
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr "Subir"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr "Múltiplo"
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr "Necessário especificar atributo 'Nome'"
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr "Meus %1 primeiros tíquetes"
+
+#: NOT FOUND IN SOURCE
+msgid "My Approvals"
+msgstr "Minhas Aprovações"
+
+#: NOT FOUND IN SOURCE
+msgid "My Bookmarks"
+msgstr "Meus Favoritos"
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr "Meu Dia"
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr "Minhas aprovações"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Meus painéis de indicadores"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr "Minhas buscas salvas"
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "NOVALINHA"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr "Nome"
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr "Nome em uso"
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Named, shared collection of saved searches"
+msgstr "Nomeada, coleção compartilhada de buscas salvas"
+
+#: NOT FOUND IN SOURCE
+msgid "Need approval from system administrator"
+msgstr "Precisa de aprovação do administrador do sistema"
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr "Nunca"
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "Novo"
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr "Novos Vínculos"
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr "Nova Senha"
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr "Nova Aprovação Pendente"
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr "Nova busca"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Tíquetes novos e abertos para %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr "Novo campo personalizado"
+
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "Novo painel de indicadores"
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr "Novo grupo"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Novas mensagens"
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr "Nova senha"
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr "Notificação de nova senha enviada"
+
+#: NOT FOUND IN SOURCE
+msgid "New queue"
+msgstr "Nova fila"
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr "Novo lembrete:"
+
+#: NOT FOUND IN SOURCE
+msgid "New request"
+msgstr "Nova requisição"
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr "Novos direitos de acesso"
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr "Novo scrip"
+
+#: NOT FOUND IN SOURCE
+msgid "New search"
+msgstr "Nova busca"
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr "Novo modelo"
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr "Novo tíquete"
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr "O novo tíquete não existe"
+
+#: NOT FOUND IN SOURCE
+msgid "New user"
+msgstr "Novo usuário"
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr "Novo usuário chamado"
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr "Novos observadores"
+
+#: NOT FOUND IN SOURCE
+msgid "New window setting"
+msgstr "Abrir nova janela"
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr "Próximo"
+
+#: NOT FOUND IN SOURCE
+msgid "Next Page"
+msgstr "Próxima Página"
+
+#: NOT FOUND IN SOURCE
+msgid "Next page"
+msgstr "Próxima página"
+
+#: NOT FOUND IN SOURCE
+msgid "Next: "
+msgstr "Próximo: "
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "Apelido"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr "Apelido"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "Não"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "Nenhum %1 carregado"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr "Nenhuma Classe definida"
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr "Nenhum Campo Personalizado"
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr "Nenhum Campo Personalizado definido"
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr "Nenhum Grupo definido"
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr "Nenhuma Consulta"
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr "Nenhuma Fila definida"
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr "Nenhum usuário RT foi encontrado. Favor consultar o administrador do RT.\\n"
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Nenhum Assunto"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr "Nenhum Modelo"
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket "
+msgstr "Nenhum Tíquete especificado. Abortando o tíquete "
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket modifications"
+msgstr "Nenhum Tíquete especificado. Abortando modificações no tíquete"
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr "Nenhuma ação"
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr "Nenhuma coluna especificada"
+
+#: NOT FOUND IN SOURCE
+msgid "No command found\\n"
+msgstr "Nenhum comando encontrado\\n"
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr "Não há comentário sobre este usuário"
+
+#: NOT FOUND IN SOURCE
+msgid "No correspondence attached"
+msgstr "Nenhum arquivo anexado"
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Nenhum painel de indicadores."
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr "Nenhuma descrição para %1"
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr "Nenhum grupo especificado"
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr "Nenhum grupo satisfaz o critério de busca."
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Nenhuma chave aceitável para encriptação"
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Nenhuma chave para este endereço"
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr "Nenhuma mensagem anexada"
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Não há necessidade de encriptar"
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr "Nenhuma senha especificada"
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr "Sem permissão para criar filas"
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr "Sem permissão para criar tíquetes na fila '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "No permission to create users"
+msgstr "Sem permissão para criar usuários"
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr "Sem permissão para exibir o tíquete"
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr "Sem permissão para salvar buscas com abrangência em todo sistema"
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Sem permissão para definir preferências"
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr "sem permissão para ver modificar o tíquete"
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr "Nenhum usuário/grupo especificado"
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr "Nenhum usuário/grupo selecionado."
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Sem chave privada"
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr "Nenhuma fila satisfaz o critério de busca."
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Nenhum direito especificado"
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr "Nenhum direito encontrado"
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr "Nenhum direito outorgado."
+
+#: NOT FOUND IN SOURCE
+msgid "No search loaded"
+msgstr "Nenhuma busca carregada"
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr "Não há busca a realizar"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr "Sem assunto"
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Chave não existe ou não é aceitável para assinatura"
+
+#: NOT FOUND IN SOURCE
+msgid "No ticket id specified"
+msgstr "Nenhum identificador de tíquete especificado"
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "Nenhum tíquete encontrado."
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr "Nenhum tipo de transação especificado"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Nenhuma chave usável."
+
+#: NOT FOUND IN SOURCE
+msgid "No user or email address specified"
+msgstr "Nenhum usuário ou endereço de e-mail especificado"
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr "Nenhum usuário satisfaz o critério de busca."
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr "Nenhum valor enviado a _Set!\\n"
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr "Ninguém"
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Nenhum"
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr "Campo inexistente?"
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr "Nao Definido"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Não encontrado"
+
+#: NOT FOUND IN SOURCE
+msgid "Not logged in"
+msgstr "Não registrado"
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr "Não registrado."
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr "Não definido"
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr "Ainda não implementado."
+
+#: NOT FOUND IN SOURCE
+msgid "Not yet implemented...."
+msgstr "Ainda não implementado..."
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr "Anotações"
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr "A notificação não pôde ser enviada"
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr "Notificar AdminCcs"
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr "Notificar AdminCcs como Comentário"
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr "Notificar Ccs"
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr "Notificar Ccs como Comentário"
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr "Notificar Outros Destinatários"
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr "Notificar Outros Destinatários como Comentário"
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr "Notificar Proprietário"
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr "Notificar Proprietário como Comentário"
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr "Notificar Proprietário sobre seus tíquetes rejeitados"
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr "Notificar Proprietário que seu chamado foi aprovado e está pronto para ser desenvolvido."
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by all approvers"
+msgstr "Notificar Proprietário que todas as aprovações foram concedidas a seu tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by some approver"
+msgstr "Notificar Proprietário que seu alguma aprovação foi concedida a seu tíquete"
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr "Notificar Proprietário, Requisitante, Ccs e AdminCcs como comentário"
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr "Notificar Proprietários e AdminCcs sobre novos itens dependendo de suas aprovações"
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr "Notificar Requisitantes"
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr "Notificar Requisitantes e Ccs"
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr "Notificar Requisitantes e Ccs como Comentário"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs"
+msgstr "Notificar Requisitantes, Ccs e AdminCcs"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+msgstr "Notificar Requisitantes, Ccs e AdminCcs como Comentário"
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "Avisar-me sobre mensagens não lidas"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "Nov"
+
+#: NOT FOUND IN SOURCE
+msgid "Nov."
+msgstr "Nov."
+
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "Novembro"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "Número de resultados de uma busca"
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr "OU"
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr "Objeto não pôde ser criado"
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr "Objeto não pode ser removido"
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr "Objeto criado"
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr "Objeto removido"
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr "Objeto do tipo %1 não aceitam campos customizados"
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr "Tipo de objeto não corresponde"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr "A lista de objetos está vazia"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Out"
+
+#: NOT FOUND IN SOURCE
+msgid "Oct."
+msgstr "Out."
+
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "Outubro"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr "Offline"
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr "Edições offline"
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr "Envio offline"
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr "Em %1, %2 escreveu:"
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "No Encerramento"
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr "Num Comentário"
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr "Numa Correspondência"
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr "Na Criação"
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr "Na Alteração de Proprietário"
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr "Na Alteração de Prioridade"
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr "Na Alteração de Fila"
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr "Quando Rejeitado"
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "Na Reabertura"
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr "Na Resolução"
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr "Na Alteração de Estado"
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr "Numa Transação"
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "Cópia Oculta Única"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "Cópia Única"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr "Só apresentar aprovações para requisições criadas depois de %1"
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr "Só apresentar aprovações para requisições criadas antes de %1"
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr "Somente apresentar campos personalizados para:"
+
+#: NOT FOUND IN SOURCE
+msgid "Open"
+msgstr "Aberto"
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr "Abrir Tíquetes"
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Abrir URL"
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr "Abrir"
+
+#: NOT FOUND IN SOURCE
+msgid "Open requests"
+msgstr "Requisições abertas"
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr "Abrir tíquetes"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in a new window"
+msgstr "Abrir tíquetes (da listagem) em uma nova janela"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in another window"
+msgstr "Abrir tíquetes (da listagem) em outra janela"
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr "Abrir tíquetes na correspondência"
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr "Opções"
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr "Ordenado por"
+
+#: NOT FOUND IN SOURCE
+msgid "Ordering and sorting"
+msgstr "Requisitando e ordenando"
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr "Organização"
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr "Tíquete originador: #%1"
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr "E-mail de saida sobre um comentário registrado"
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr "E-mail de saida registrado"
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr "Após a data, a prioridade tende a"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr "Próprios tíquetes"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr "OwnTicket"
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr "Proprietário"
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr "Proprietário '%1' não tem direito de ter este tíquete."
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "Proprietário alterado de %1 para %2"
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr "Proprietário não pode ser definido."
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr "Proprietário alterado à força de %1 para %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Owner is"
+msgstr "O proprietário é"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "Nome Proprietário"
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Página"
+
+#: NOT FOUND IN SOURCE
+msgid "Page %1 of %2"
+msgstr "Página %1 de %2"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Página 1 de 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Página não encontrada"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr "Pager"
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "Telefone do Pager"
+
+#: NOT FOUND IN SOURCE
+msgid "Parent"
+msgstr "Pai"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr "Pais"
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr "Senha"
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr "Lembrete de Senha"
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr "Senha trocada"
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr "Senhas precisam ter no mínimo %1 caracteres"
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr "Senha definida"
+
+#: NOT FOUND IN SOURCE
+msgid "Password too short"
+msgstr "Senha muito curta"
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr "Senha: %1"
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr "Senha: Permissão Negada"
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "TrocadeSenha"
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr "Senhas não coincidem."
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr "Senhas não coincidem. Sua senha não foi alterada"
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "Caminho para sendmail"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr "Pessoas"
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr "Realizar uma ação definida pelo usuário"
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr "Configuração perl"
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr "Permissão Negada"
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr "Permissão negada"
+
+#: NOT FOUND IN SOURCE
+msgid "Permissions denied"
+msgstr "Permissões negadas"
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "Dashboards Pessoal"
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr "Grupos Pessoais"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups"
+msgstr "Grupos pessoais"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups:"
+msgstr "Grupos pessoais:"
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr "Telefones"
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Por favor verifique a URL e tente novamente."
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr "Possíveis buscas escondidas"
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr "Preferências"
+
+#: NOT FOUND IN SOURCE
+msgid "Preferences %1 for user %2 ."
+msgstr "Preferências %1 para usuário %2."
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr "Preferências %1 para usuário %2."
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr "Preferências salvas para %1."
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "Preferências salvas para usuário %1."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "Preferências salvas."
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Chave referencial: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Chave preferencial"
+
+#: NOT FOUND IN SOURCE
+msgid "Prefs"
+msgstr "Prefs"
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr "Preparação Abortada"
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr "Ant"
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "Anterior"
+
+#: NOT FOUND IN SOURCE
+msgid "Previous Page"
+msgstr "Página Anterior"
+
+#: NOT FOUND IN SOURCE
+msgid "Previous page"
+msgstr "Página anterior"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr "Usuário/Grupo %1 não encontrado."
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr "Mostre a resenha final de mensagens em STDOUT; não envie por email. Nâo as marque como enviadas"
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "Imprimir esta mensagem"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr "Prioridade"
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr "Prioridade inicia em"
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "Privacidade"
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr "Privacidade:"
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Chave Privada"
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr "Privilegiado"
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr "Estado privilegiado: %1"
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr "Usuários privilegiados"
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr "Processando sem transação, algumas condições e ações podem falhar. Considere usar o argumento --transaction"
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr "Falso-grupo para uso interno"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "Chave pública '0x%1' é necessária para verificar a assinatura"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Consultas"
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "Consulta"
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr "Construtor de Consulta"
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr "Consulta:"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr "Fila"
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr "Fila %1 não encontrada"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue '%1' not found\\n"
+msgstr "Fila '%1' não foi encontrada\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Keyword Selections"
+msgstr "Seleções de Palavras-chave da Fila"
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr "Nome da Fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Scrips"
+msgstr "Scrips da Fila"
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr "A fila já existe"
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr "A fila não pôde ser criada"
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr "A fila não pôde ser carregada"
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr "Fila criada"
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr "Fila desabilitada"
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr "Fila habilitada"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Id da fila"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue is not specified."
+msgstr "Fila não foi especificada."
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr "Fila não encontrada"
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "Direitos da fila"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "Chave da fila"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "NomeFila"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr "ObservadorFila"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr "Filas"
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr "Filas que eu administro"
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr "Filas nas quais sou AdminCc"
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr "Busca rápida"
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr "Criação rápida de tíquete"
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr "RFC2822"
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr "RSS"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr "RT %1 para %2"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1. Direitos reservados 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1. Direitos reservados 1996-2002 Jesse Vincent <jesse\\\\@bestpractical.com>\\\\n"
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr "Administração do RT"
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "Email do Administrador RT"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Authentication error."
+msgstr "Erro de autenticação no RT."
+
+#: NOT FOUND IN SOURCE
+msgid "RT Bounce: %1"
+msgstr "Ricochete do RT: %1"
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "Configuração RT"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Configuration error"
+msgstr "Erro de configuração do RT"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Critical error. Message not recorded!"
+msgstr "Erro crítico no RT. A mensagem não foi registrada!"
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr "Erro no RT"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Received mail (%1) from itself."
+msgstr "O RT recebeu e-mail (%1) dele mesmo."
+
+#: NOT FOUND IN SOURCE
+msgid "RT Recieved mail (%1) from itself."
+msgstr "O RT recebeu e-mail (%1) dele mesmo."
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "Auto-Serviço RT"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Self Service / Closed Tickets"
+msgstr "Auto-serviço do RT / Tíquetes Fechados"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr "Tamanho RT"
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr "Variáveis RT"
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr "RT por alto"
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr "RT por alto para o usuário %1"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr "RT pode se comunicar com seus usuários sobre novos tíquetes ou novas correspondências nos tíquetes. Diga-nos onde encontrar o sendmail (ou um programa compatível com sendmail, como postfix). RT també necessita saber a quem avisar quando alguém envia uma mensagem inválida. Este endereço não pode ser uma conta que devolva a mensagem para RT."
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr "RT pode incluir o conteúdo de algum outro serviço web quando estiver apresentando este campo personalizado."
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr "RT pode transformar estes valores de campo customizado em hiperlinks para outro serviço."
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't authenticate you"
+msgstr "O RT não pôde autenticá-lo"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find requestor via its external database lookup"
+msgstr "O RT não pôde encontrar o requisitante através de consulta ao banco de dados externo"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find the queue: %1"
+msgstr "O RT não pôde encontrar a fila: %1"
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr "RT não pode armazenar sua sessão."
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't validate this PGP signature. \\n"
+msgstr "O RT não pôde validar esta assinatura PGP. \\n"
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr "RT para %1"
+
+#: NOT FOUND IN SOURCE
+msgid "RT for %1: %2"
+msgstr "RT para %1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "RT has proccessed your commands"
+msgstr "O RT processou seus comandos"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr "RT é um sistema de classe empresarial para monitoramento de problemas, desenhado para deixar você gerenciar tarefas, problemas, requisições, defeitos ou qualquer outra coisa que se pareça com um \"item de ação\" de maneira inteligente e eficiente."
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr "RT é utilizado pelas 100 empresas listadas pela Fortune, por empresas individuais,agências governamentais, instituições de ensino, hospitais, entidades sem fins lucrativos, ONGs, bibliotecas, projetos de código aberto e todo tipo imaginável de organização nos sete continentes (Sim, inclusive Antártica)."
+
+#: NOT FOUND IN SOURCE
+msgid "RT thinks this message may be a bounce"
+msgstr "O RT crê que esta mensagem seja um ricochete"
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT vai se conectar ao banco de dados usando esta conta de usuário. Ela vai ser criada para você."
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT vai criar um usuário chamado \"root\" e associar esta senha a ele"
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr "RT vai procurar por qualquer outra coisa que você informar nos assuntos dos tíquetes."
+
+#: NOT FOUND IN SOURCE
+msgid "RT will process this message as if it were unsigned.\\n"
+msgstr "O RT vai processar esta mensagem como se não fosse assinada.\\n"
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr "RT vai substituir <tt>__id__</tt> e <tt>__CustomField__</tt> respectivamente com o id do registro e o valor do campo personalizado"
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr "RT vai usar esta sequência de caracteres unicamente para identificar sua instalação e procurar por ela no assunto de emails, para decidir a qual tíquete a mensagem se refere. Nós recomendamos que você utilize o seu domínio internet (ex: example.com)"
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr "RT trabalha com diferentes bancos de dados. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> são suportados."
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr "RT/Admin/Edit o grupo %1"
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr "Nome real"
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "NomeReal"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Destinatário"
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr "Registrar todas as atualizações"
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr "Membro recursivo"
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr "Referenciado por %1 adicionado"
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr "Referenciado por %1 removido"
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr "Referência a %1 adicionada"
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr "Referência a %1 removida"
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr "Referenciado por"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr "Faz referência a"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr "FazReferenciaA"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine"
+msgstr "Refinar"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine search"
+msgstr "Refinar a busca"
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "Atualizar"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr "Recarregar esta página a cada %1 minutos."
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr "Lembrete '%1' adicionado"
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr "Lembrete '%1' completado"
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr "Lembrete '%1' reaberto"
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr "Lembrete tíquete #%1"
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr "Lembretes"
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr "Lembretes para tíquete #%1"
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr "Remover AdminCc"
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Remover Favorito"
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr "Remover Cc"
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr "Remover Requisitante"
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr "Responder"
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr "Endereço para Resposta"
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr "Responder para requisitantes"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr "Responder aos tíquetes"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr "ReplyToTicket"
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr "Relatórios"
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr "Requisitante"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor email address"
+msgstr "Endereço eletrônico do requisitante"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor(s)"
+msgstr "Requisitante(s)"
+
+#: NOT FOUND IN SOURCE
+msgid "RequestorAddresses"
+msgstr "RequestorAddresses"
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr "Requisitantes"
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr "A requisições vencem em"
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr "Parâmetro '%1' requerido e não especificado"
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr "Apagar"
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr "Apagar token de autenticação secreto"
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr "Restaurar valor padrão"
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr "Residência"
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr "Resolver"
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr "Resolver tíquete #%1 (%2)"
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr "Resolvido"
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr "Resolvidos por proprietário"
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr "Resolvidos num intervalo de datas"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr "Tíquetes resolvidos no período, agrupados por proprietário"
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr "Tíquetes resolvidos, agrupados por proprietário"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Response to requestors"
+msgstr "Resposta aos requisitantes"
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr "Resultados"
+
+#: NOT FOUND IN SOURCE
+msgid "Results per page"
+msgstr "Resultados por página"
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Voltar to tíquete"
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr "Confirmar a Senha"
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr "Reverter"
+
+#: NOT FOUND IN SOURCE
+msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
+msgstr "Direito de acesso %1 não encontrado para %2 %3 referente a %4 (%5)\\n"
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr "Direito de Acesso Delegado"
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr "Direito de Acesso Outorgado"
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr "Direito de Acesso Carregado"
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr "Direito de acesso não pôde ser revogado"
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr "Direito de acesso não encontrado"
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr "Direito de acesso não carregado."
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr "Direito de acesso revogado"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights"
+msgstr "Direitos de Acesso"
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr "Direitos de acesso não puderam ser outorgados a %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights could not be revoked for %1"
+msgstr "Direitos de acesso não puderam ser revogados de %1"
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr "Papéis"
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Linhas"
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr "Linhas por caixa"
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr "Linhas por página"
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr "SQLite é um banco de dados que não precisa de um servidor ou qualquer configuração. Os autores de RT o recomendam para teste, demonstração e desenvolvimento, mas ele não é adequado para um servidor RT em produção."
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Sab"
+
+#: NOT FOUND IN SOURCE
+msgid "Sat."
+msgstr "Sáb."
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Sábado"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr "Salvar"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr "Salvar as Alterações"
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr "Salvar Preferências"
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Salvar como Novo"
+
+#: NOT FOUND IN SOURCE
+msgid "Save changes"
+msgstr "Salvar as alterações"
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Salvo %1 %2"
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Busca Salva %1 não encontrada"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Saved search %1"
+msgstr "Busca salva %1"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr "Buscas salvas"
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr "Scrip #%1"
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr "Scrip Criado"
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr "Campos de Scrip"
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr "Scrip removido"
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr "Scrips"
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Scrips e Destinatários"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrips for %1\\n"
+msgstr "Scrips para %1\\n"
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr "Scrips aplicáveis a todas as filas"
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr "Buscar"
+
+#: NOT FOUND IN SOURCE
+msgid "Search Criteria"
+msgstr "Critérios de Busca"
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr "Buscar Preferências"
+
+#: NOT FOUND IN SOURCE
+msgid "Search attribute load failure"
+msgstr "Falha na carga de atributos de busca"
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr "Buscar por aprovações"
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr "Busca por tíquetes"
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr "Busca por tí­quetes. Informar <strong>id</strong> por número, <strong>filas</strong> por nome, Proprietários por <strong>nome de usuário</strong> e Requisitantes por <strong>endereço de e-email</strong>."
+
+#: NOT FOUND IN SOURCE
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+msgstr "Busca por tí­quetes. Informar <strong>id</strong> por número, <strong>filas</strong> por nome, Proprietários por <strong>nome de usuário</strong> e Requisitantes por <strong>endereço de e-email</strong>. RT vai procurar por qualquer outra coisa no corpo e anexos dos tí­quetes."
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr "Opções de busca"
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr "Resultados da busca agrupado por %1"
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr "Intervalo para recarregar resultados de buscas"
+
+#: NOT FOUND IN SOURCE
+msgid "Search update: %1"
+msgstr "Busca atualizada: %1"
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr "Pesquisar o texto completo de todos os tí­quetes pode gastar muito tempo, mas se você precisa disto, é possível procurar por qualquer palavra no histórico completo do tíquete teclando <b>fulltext:<i>palavra</i></b>."
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr "Token de autenticaço secreto"
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr "Segurança:"
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr "Ver também:"
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr "Observar valores de campos personalizados"
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr "Ver campos personalizados"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr "Ver mensagens de saída e destinatários"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr "Ver comentários privados do tíquete"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr "Ver sumários de tíquetes"
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr "VerCampoPersonalizado"
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "VerPaineldeIndicadores"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr "VerGrupo"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "VerIndicadoresdeGrupo"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "VerIndicadoresPessoais"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr "VerFila"
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "Selecionar"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Seleciontar Tipo de Banco de Dados"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr "Selecionar um Campo Personalizado"
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr "Selecionar um grupo"
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr "Selecionar uma fila"
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr "Selecionar uma fila para seu novo tíquete"
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr "Selecionar um usuário"
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Selecione outra linguagem"
+
+#: NOT FOUND IN SOURCE
+msgid "Select custom field"
+msgstr "Selecionar um campo personalizado"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Selecionar campos personalizados para todas filas"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr "Selecionar campos personalizados para todos grupos de usuário"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr "Selecionar campos personalizados para todos usuários"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr "Selecionar campos personalizados para todas filas"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr "Selecionar campos personalizados para transações em tíquetes de todas as filas"
+
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Selecionar indicadores"
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr "Selecionar um grupo"
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr "Selecionar valores múltiplos"
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr "Selecionar um valor"
+
+#: NOT FOUND IN SOURCE
+msgid "Select queue"
+msgstr "Selecionar uma fila"
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr "Selecionar filas a serem exibidas na página \"RT por alto\""
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr "Selecionar um scrip"
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr "Selecionar um modelo"
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr "Selecionar até %1 valores"
+
+#: NOT FOUND IN SOURCE
+msgid "Select user"
+msgstr "Selecionar um usuário"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectMultiple"
+msgstr "SelectMultiple"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectSingle"
+msgstr "SelectSingle"
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr "Selecionar Campos Personalizados"
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "Chave selecionada não é confiãvel ou não existe mais."
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr "Selecionar Objetos"
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr "Seleções alteradas.Por favor, salve suas alterações"
+
+#: NOT FOUND IN SOURCE
+msgid "Self Service"
+msgstr "Auto-serviço"
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Email enviado com sucesso"
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "Enviar mensagem a todos os observadores"
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers as a \"comment\""
+msgstr "Enviar mensagem a todos os observadores como um \"comentário\""
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr "Enviar mensagem com proprietário e todos os observadores"
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr "Mandar mensagem para proprietário e todos os observadores como \"comentário\""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr "Enviar mensagem aos requisitantes e Ccs"
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr "Enviar mensagem aos requisitantes e Ccs como um comentário"
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr "Envia uma mensagem aos requisitantes"
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr "Envia uma mensagem aos Ccs e Bccs explicitamente listados"
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr "Envie mail para os Ccs"
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr "Envie mail para os Ccs como um comentário"
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr "Envia uma mensagem aos Ccs administrativos"
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr "Envia uma mensagem aos Ccs administrativos como um comentário"
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr "Envia uma mensagem ao proprietário"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Set"
+
+#: NOT FOUND IN SOURCE
+msgid "Sep."
+msgstr "Set."
+
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "Setembro"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "Definições"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr "Apresentar"
+
+#: NOT FOUND IN SOURCE
+msgid "Show Approvals"
+msgstr "Apresentar Aprovações"
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr "Apresentar Colunas"
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr "Apresentar Resultados"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr "Mostrar Propriedades do Chamado no %1 nível"
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr "Apresentar requisições aprovadas"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "Mostrar também"
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr "Apresentar o sumário"
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr "Apresentar requisições negadas"
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr "Apresentar os detalhes"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Mostrar descrições do link"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr "Exibir histórico mais antigo primeiro"
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr "Apresentar requisições pendentes"
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr "Apresentar requisições aguardando outras aprovações"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket private commentary"
+msgstr "Apresentar comentário privado do tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket summaries"
+msgstr "Apresentar sumários do tíquete"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr "ApresentarACL"
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr "MostarAbaDeConfiguracao"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr "ApresentarE-maildeSaida"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr "ApresentarBuscasSalvas"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr "ApresentarScrips"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr "ApresentarModelo"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr "ApresentarTiquete"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr "ApresentarComentariosdeTiquete"
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Barra Lateral"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "Assinar"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "Assinar por padrão"
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr "Cadastrar como um Requisitante de tíquete ou um Cc de tíquete ou fila"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr "Cadastrar como um AdminCC de tíquete ou fila"
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr "Assinatura"
+
+#: NOT FOUND IN SOURCE
+msgid "Signed in as %1"
+msgstr "Entrou como %1"
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Assinatura desativada"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "Assinatura ativada"
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr "Busca Simples"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr "Único"
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Nome do sítio"
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr "Tamanho"
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr "Saltar Menu"
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr "Pulando usuário desativado"
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "Pequeno"
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr "Alguns navegadores somente carregam conteúdo do mesmo domínio que seu servidor RT."
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr "Ordenar"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort key"
+msgstr "Chave de ordenação"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort results by"
+msgstr "Ordenar os resultados por"
+
+#: NOT FOUND IN SOURCE
+msgid "SortOrder"
+msgstr "Ordenação"
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Ordenando"
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Especificar quando esta execução é diária ou semanal"
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Planilha"
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr "Estágio"
+
+#: NOT FOUND IN SOURCE
+msgid "Stalled"
+msgstr "Pendente"
+
+#: NOT FOUND IN SOURCE
+msgid "Start page"
+msgstr "Página inicial"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr "Iniciado"
+
+#: NOT FOUND IN SOURCE
+msgid "Started date '%1' could not be parsed"
+msgstr "A data de iníciado '%1' não pôde ser compreendida"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr "Inicia"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts By"
+msgstr "Inicia Por"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts date '%1' could not be parsed"
+msgstr "A data de início '%1' não pôde ser compreendida"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr "Estado"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr "Estado"
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr "Alteração de Estado"
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr "Estado alterado de %1 para %2"
+
+#: NOT FOUND IN SOURCE
+msgid "StatusChange"
+msgstr "AlteracaodeEstado"
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr "Roubar"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr "Roubar tíquetes"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr "RoubarTiquete"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Etapa %1 de %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Step %1 of %2: "
+msgstr "Passo %1 de %2: "
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr "Roubado de %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Stolen from %1 "
+msgstr "Roubado de %1 "
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr "Estilo"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr "Assunto"
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr "Assunto alterado para %1"
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr "Submeter"
+
+#: NOT FOUND IN SOURCE
+msgid "Submit Workflow"
+msgstr "Submeter FluxodeTrabalho"
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "Subscrever"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "Subscrever painel de indicadores %1"
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "Registrar-se nos Painéis"
+
+#: NOT FOUND IN SOURCE
+msgid "Subscribe to email dashboards"
+msgstr "Subscrever email com painéis de indicadores"
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "SubscreverPaineldeIndicadores"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "Subscrever painel de indicadores %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "Subscrição"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr "Subscrição não pode ser criada: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Succeeded"
+msgstr "Deu certo"
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Dado decriptado com sucesso"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Dado encriptado com sucesso"
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Dom"
+
+#: NOT FOUND IN SOURCE
+msgid "Sun."
+msgstr "Dom."
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "Domigo"
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr "SuperUsuário"
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "Suspenso"
+
+#: NOT FOUND IN SOURCE
+msgid "System"
+msgstr "Sistema"
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr "Configuração do Sistema"
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "Painel do Sistema"
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "Padrão do Sistema"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr "Erro do Sistema"
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. Right not granted."
+msgstr "Erro de sistema. Direito não outorgado."
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. right not granted"
+msgstr "Erro de sistema. direito não outorgado"
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr "Erro do Sistema: %1"
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr "Ferramentas do Sistema"
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr "Erro do sistema. Direito de acesso não delegado."
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr "Erro do sistema. Direito de acesso não outorgado."
+
+#: NOT FOUND IN SOURCE
+msgid "System error. Unable to grant rights."
+msgstr "Erro de sistema. Não é possível outorgar direitos de acesso."
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr "Grupos do sistema"
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "Direitos no sistema"
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr "SystemRolegroup para uso interno"
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr "Tomar"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr "Tomar tíquetes"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr "TomarTiquete"
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr "Tomado"
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr "Diga-nos um pouco sobre como encontrar o banco de dados que vai ser usado pelo RT"
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr "Modelo"
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr "Modelo #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Modelo #%1 removido"
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Modelo '%1' não encontrado"
+
+#: NOT FOUND IN SOURCE
+msgid "Template deleted"
+msgstr "Modelo removido"
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Modelo está vazio"
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr "Modelo é um argumento obrigatório"
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found"
+msgstr "Modelo não encontrado"
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found\\n"
+msgstr "Modelo não encontrado\\n"
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr "Modelo processado"
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr "Erro de análise gramatical do modelo"
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr "Modelos"
+
+#: NOT FOUND IN SOURCE
+msgid "Templates for %1\\n"
+msgstr "Modelos de %1\\n"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr "O arquivo de texto não é mostrador porque foi desabilitado nas preferências."
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr "Este já é o valor atual"
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr "Este não é um valor para este campo personalizado"
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr "Este é o mesmo valor"
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr "Este usuário/grupo já tem este direito."
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr "Este usuário/grupo já é um %1 desta fila"
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr "Este usuário/grupo já é um %1 deste tíquete"
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr "Este usuário/grupo não é um %1 desta fila"
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr "Este principal não é um %1 deste tíquete"
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr "Esta fila não existe"
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr "Este tíquete tem dependências não resolvidas"
+
+#: NOT FOUND IN SOURCE
+msgid "That user already has that right"
+msgstr "Este usuário já tem este direito de acesso"
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr "Este usuário já possui este tíquete"
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr "Este usuário não existe"
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr "Este usuário já tem privilégios"
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr "Este usuário já não tem privilégios"
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr "Este usuário agora tem privilégios"
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr "Este usuário agora não tem privilégios"
+
+#: NOT FOUND IN SOURCE
+msgid "That user is now unprivilegedileged"
+msgstr "Este usuário agora é não privilegiado"
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr "Este usuário não pode possuir tíquetes nesta fila"
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr "Este não é um identificador numérico"
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr "Sumário"
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr "O CC de um tíquete"
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "A senha do DBA do banco de dados"
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr "O CC administrativo de um tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "The comment has been recorded"
+msgstr "O comentário foi registrado"
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "O domínio de seu servidor de banco de dados (como 'db.example.com')."
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr "O seguinte comando procurará por todos os tíquetes ativos na fila 'geral' e alterar sua prioridade para 99 se eles não tiverem sido alterados há 4 horas:"
+
+#: NOT FOUND IN SOURCE
+msgid "The following commands were not proccessed: "
+msgstr "Os seguintes comandos não foram processados: "
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr "As consultas a seguir podem não ficar visíveis a todos usuários que podem ver este dashboard."
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "Chave foi desativada"
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "Chave foi revogada"
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "Chave está expirada"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr "Chave totalmente confiável"
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr "O novo valor foi atribuído."
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr "O proprietário de um tíquete"
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "A página requisitada não foi encontrada"
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr "O requisitante de um tíquete"
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "The settings you've chosen are stored in %1. You can edit this file to refine your configuration further. You can prevent this installation wizard from being shown again by running `<tt>chmod -w '%1'</tt>`."
+msgstr "As definições que você escolheu estão armazenadas em %1. Você pode editar este arquivo posteriormente para ajustar sua configuração. Você pode evitar que este assistente de instalação seja mostrado novamente rodando `<tt>chmod -w '%1'</tt>`."
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr "O sistema não pode assinar mensagens de email saintes. Isto usualmente indica que a passphrase tem problemas de definição ou que o Agente GPG não está ativo. Por favor avise seu administrador de sistema imediatamente. Os endereços do problema são:"
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Tema"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "Existem várias chaves aceitáveis para encriptação."
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "Existem mensagens não lidas neste tíquete."
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr "Existe confiança marginal nesta chave"
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "Não existe chave aceitável para encriptação."
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr "Existe uma chave aceitável, mas seu nível de confiabilidade não foi definido."
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr "Estes comandos geralmente não estão visíveis para o usuário"
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr "Estas opções de configuração cobrem parte do que é necessário para colocar o RT rodando. Nós precisamos saber o nome de sua instalação RT e o nome do domínio que vai hospedá-lo. Nós também precisamos definir uma senha para o usuário administrativo padrão."
+
+#: NOT FOUND IN SOURCE
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your defauly administrative user."
+msgstr "Estas opções de configuração cobrem parte do que é necessário para colocar o RT rodando. Nós precisamos saber o nome de sua instalação RT e o nome do domínio que vai hospedá-lo. Nós também precisamos definir uma senha para o usuário administrativo padrão."
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr "Este campo personalizado não se aplica a este objeto"
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr "Esta função só está disponível para administradores do sistema"
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr "Isto pode significar que a pasta '%1' não aceita escrita ou uma tabela do banco de dados está faltando ou corrompida."
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr "Esta mensagem será enviada para..."
+
+#: NOT FOUND IN SOURCE
+msgid "This ticket %1 %2 (%3)\\n"
+msgstr "Este tíquete %1 %2 (%3)\\n"
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr "Esta ferramenta permite ao usuário invocar módulos Perl arbitrários de dentro do RT."
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr "Parece que esta transação não tem conteúdo"
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr "Os %1 tíquetes mais prioritários deste usuário"
+
+#: NOT FOUND IN SOURCE
+msgid "This user's 25 highest priority tickets"
+msgstr "Os 25 tíquetes de mais alta prioridade deste usuário"
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Qui"
+
+#: NOT FOUND IN SOURCE
+msgid "Thu."
+msgstr "Qui."
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Quinta"
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "Tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 %2"
+msgstr "Tíquete # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 Jumbo update: %2"
+msgstr "Tíquete # %1 atualização jumbo: %2"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr "Tíquete #%1 Atualização jumbo: %2"
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "Gráfico de relacionamentos do tíquete #%1"
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr "Tíquete #%1: %2"
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr "Tíquete %1"
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr "Tíquete %1 criado na fila '%2'"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket %1 loaded\\n"
+msgstr "Tíquete %1 carregado\\n"
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr "Tíquete %1: %2"
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr "Campos Personalizados do Tíquete"
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr "Histórico do Tíquete # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Id"
+msgstr "Identificador do tíquete"
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr "Tíquete Resolvido"
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "Busca de Tíquete"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr "Transações do Tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket attachment"
+msgstr "Anexo do tíquete"
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr "Conteúdo do tíquete"
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr "Tipo do conteúdo do tíquete"
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr "O tíquete não pôde ser criado devido a um erro interno"
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "Tíquete não pode ser carregado"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket created"
+msgstr "Tíquete criado"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket creation failed"
+msgstr "A criação do tíquete falhou"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket deleted"
+msgstr "Tíquete removido"
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Exibição de tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket id not found"
+msgstr "Id de tíquete não encontrado"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket killed"
+msgstr "Tíquete destruído"
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr "Metadados do tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket not found"
+msgstr "Tíquete não encontrado"
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr "Estado do tíquete alterado"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket watchers"
+msgstr "Observadores do tíquete"
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr "Módulo de busca TiqueteSQL"
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr "Tíquetes"
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "Tíquetes %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr "Tíquetes %1 por %2"
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr "Tíquetes criados depois de"
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr "Tíquetes criados antes de"
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets from %1"
+msgstr "Tíquetes de %1"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr "Tíquetes resolvidos depois de"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr "Tíquetes resolvidos antes de"
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr "Tíquetes dependentes desta aprovação:"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr "Tempo Estimado"
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr "Tempo Restante"
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr "Tempo Trabalhado"
+
+#: NOT FOUND IN SOURCE
+msgid "Time left"
+msgstr "Tempo restante"
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr "Tempo de apresentação"
+
+#: NOT FOUND IN SOURCE
+msgid "Time worked"
+msgstr "Tempo trabalhado"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "TempoEstimado"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "TempoRestante"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr "TempoTrabalhado"
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "Fuso horário"
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr "Título"
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "Para"
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:"
+msgstr "Para gerar as diferenças desta transação"
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:\\n"
+msgstr "Para gerar as diferenças desta transação:\\n"
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr "Para pedir informações sobre suporte, treinamento, desenvolvimento personalizado ou licenciamento, por favor, contacte %1."
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr "Última atualização"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr "Ferramentas"
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr "Total"
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr "Transação"
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr "Transação %1 removida"
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr "Transação Criada"
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr "Campos Personalizados da Transação"
+
+#: NOT FOUND IN SOURCE
+msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
+msgstr "Transaction->Create não foi feito, já que você não especificou um id de tíquete"
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr "Transaction->Create não foi feito, já que você não especificou um tipo de objeto e id de tíquete"
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr "Transações são imutáveis"
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Confiança"
+
+#: NOT FOUND IN SOURCE
+msgid "Trying to delete a right: %1"
+msgstr "Tentando remover um direito de acesso: %1"
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Ter"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue Dec 25 21:59:12 1995"
+msgstr "Ter Dez 25 21:59:12 1995"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue, 25 Dec 1995 21:59:12 -0300"
+msgstr "Ter, 25 Dez 1995 21:59:12 -0300"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue."
+msgstr "Ter."
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Terça"
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr "Tipo"
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Tipo alterado de '%1' to '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr "Incapaz de determinar tipo de objeto ou identificação"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "Incapaz de fazer inscrição no quadro de indicadores %1: Permissão negada"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr "Não implementado"
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr "Usuário Unix"
+
+#: NOT FOUND IN SOURCE
+msgid "UnixUsername"
+msgstr "NomeUsuárioUnix"
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr "Desconhecido (nenhum valor de confiança definido)"
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr "Desconhecido (este valor é novo para o sistema)"
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr "Codificação de conteúdo desconhecida %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Unknown field: $key"
+msgstr "Campo desconhecido: $key"
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "Campo desconhecido: %1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr "Ilimitado"
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr "Ilimitado"
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr "Busca sem nome"
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr "Não privilegiado"
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr "Campos Personalizados não selecionados"
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr "Objetos não selecionados"
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr "Chave privada não definida"
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr "Não tomado"
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr "Atualizar"
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Atualizar Gráfico"
+
+#: NOT FOUND IN SOURCE
+msgid "Update ID"
+msgstr "Identificador de atualização"
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr "Atualizar Tíquete"
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr "Tipo de atualização"
+
+#: NOT FOUND IN SOURCE
+msgid "Update all these tickets at once"
+msgstr "Atualizar todos estes tíquetes de uma vez"
+
+#: NOT FOUND IN SOURCE
+msgid "Update email"
+msgstr "Atualizar e-mail"
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Atualizar formato e Buscar"
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr "Atualizar múltiplos tíquetes"
+
+#: NOT FOUND IN SOURCE
+msgid "Update name"
+msgstr "Atualizar nome"
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr "Atualização não registrada."
+
+#: NOT FOUND IN SOURCE
+msgid "Update selected tickets"
+msgstr "Atualizar os tíquetes selecionados"
+
+#: NOT FOUND IN SOURCE
+msgid "Update signature"
+msgstr "Atualizar assinatura"
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr "Atualizar o tíquete"
+
+#: NOT FOUND IN SOURCE
+msgid "Update ticket # %1"
+msgstr "Atualizar o tíquete # %1"
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr "Atualizar o tíquete #%1"
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr "Atualizar tíquete #%1 (%2)"
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr "O tipo da atualização não foi nem correspondência e nem comentário."
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr "AtualizarEstado"
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr "Atualizado"
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "Busca salva \"%1\" atualizada"
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr "Enviar"
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr "Enviar múltiplos arquivos"
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr "Enviar múltiplas imagens"
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr "Enviar um arquivo"
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr "Enviar uma imagem"
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr "Enviar até %1 arquivos"
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr "Enviar até %1 imagens"
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr "Enviar suas alterações"
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "Uso: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "Usar SSL?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "Usar padrão (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Use fixed-width font to display plaintext messages"
+msgstr "Usar fonte de tamanho fixo para exibir mensagens em texto plano"
+
+#: NOT FOUND IN SOURCE
+msgid "Use monospace font"
+msgstr "Usar fonte monospace"
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr "Usar outras ferramentas administrativas RT"
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "Usar padrão do sistema (%1)"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Usuário"
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 %2: %3\\n"
+msgstr "Usuário %1 %2: %3\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 Password: %2\\n"
+msgstr "Usuário %1 Senha: %2\\n"
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr "Usuário '%1' não encontrado."
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found"
+msgstr "Usuário '%1' não encontrado"
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found\\n"
+msgstr "Usuário '%1' não encontrado\\n"
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr "Usuário (criado - expira)"
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr "Definido pelo Usuário"
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr "Condições e ações definidas pelo usuário"
+
+#: NOT FOUND IN SOURCE
+msgid "User ID"
+msgstr "Identificador de usuário"
+
+#: NOT FOUND IN SOURCE
+msgid "User Id"
+msgstr "Identificador do usuário"
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr "Direitos de Acesso de Usuário"
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr "Usuário solicitou uma atualização de tipo desconhecido do campo personalizado %1 para %2 objeto #%3"
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr "O usuário não pôde ser criado: %1"
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr "Usuário criado"
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr "Grupos definidos pelo usuário"
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr "Usuário desabilitado"
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr "Usuário habilitado"
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "Usuário tem endereço de e-mail vazio"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr "Usuário carregado"
+
+#: NOT FOUND IN SOURCE
+msgid "User notified"
+msgstr "Usuário notificado"
+
+#: NOT FOUND IN SOURCE
+msgid "User view"
+msgstr "Visualização de usuário"
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Chaves GnuPG do usuário"
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr "Grupos definidos pelo usuário"
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr "Nome de usuário"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Formato de nome de usuário"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr "Usuários"
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr "Usuários que satisfazem o critério de busca"
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr "Usando transação #%1"
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr "Consulta Válida"
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr "Validação"
+
+#: NOT FOUND IN SOURCE
+msgid "ValueOfQueue"
+msgstr "ValorDaFila"
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr "Valores"
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Vários relatórios do RT"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "Ver indicadores para este grupo"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "Ver indicadores pessoais"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "Ver indicadores do sistema"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "W3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "Editor de mensagens WYSIWIG"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Aviso. Isto NÃO está assinado!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Aviso: você não informou o endereço de e-mail, então você não vai receber estes indicadores até que o tenha informado"
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr "Observar"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr "ObservarcomoAdminCC"
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Observador"
+
+#: NOT FOUND IN SOURCE
+msgid "Watcher loaded"
+msgstr "Observador carregado"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "GrupoObservador"
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr "Observadores"
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr "Nós também precisamos do nome do banco de dados que será usado e onde encontrá-lo. Nós também precisamos saber o nome da conta e senha que o usuário RT deve usar. RT pode criar o banco de dados e o usuário para você e esta é a razão que pedidos pelo nome e senha de um usuário com poderes de DBA. Durante o passo 6 do processo de instalação nós usaremos esta informação para criar e iniciar o banco de dados de RT."
+
+#: NOT FOUND IN SOURCE
+msgid "We were able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "Estamos prontos para encontrar seu banco de dados e conectar a ele como DBA. Você pode selecionar 'Personalizar Sumário'para continuar a personalizar RT."
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Porta Web"
+
+#: NOT FOUND IN SOURCE
+msgid "WebEncoding"
+msgstr "Codificação de Web"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Qua"
+
+#: NOT FOUND IN SOURCE
+msgid "Wed."
+msgstr "Qua."
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Quarta"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "Resenha semanal"
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Bemvindo ao RT!"
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr "O que eu fiz hoje"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "O que é RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr "Quando RT não pode manipular uma mensagem de email, para onde ela é encaminhada?"
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr "Quando RT envia um email ele define os cabeçalhos From: (De:) e Reply-To: (Responder para:) de maneira que usuários podem manter uma conversação simplesmente selecionando Responder em seu cliente de email. RT usa endereços diferentes para Respostas e Comentários. Estes podem ser trocadas para cada uma de suas filas. Estes endereços precisam ser configurados para permitir o uso do programa <tt>rt-mailgate</tt>."
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+msgstr "Quando todas as aprovações de um tí­quete forem concedidas, adicionar uma correspondência ao tí­quete original"
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+msgstr "Quando uma aprovação for concedida a um tí­quete, adicionar uma correspondência ao tíquete original"
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr "Quando um tíquete é criado"
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr "Quando um tíquete de aprovação é criado, notificar o Proprietário e o AdminCc do í­tem aguardando por aprovação"
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr "Quando qualquer coisa acontecer"
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr "Quando você pressionar em 'Verificar Conectividade com Banco de Dados' pode acontecer um pequeno atraso enquanto RT tenta se conectar a seu banco de dados"
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "Sempre que um tíquete for fechado"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr "Quando um chamado é rejeitado"
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Sempre que um tíquete for reaberto"
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr "Sempre que um tíquete for resolvido"
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr "Sempre que o proprietário de um tíquete for alterado"
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr "Sempre que a prioridade de um tíquete for alterada"
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr "Sempre que a fila de um tíquete for alterada"
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr "Sempre que o estado de um tíquete for alterado"
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr "Sempre que ocorrer uma condição definida por usuário"
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr "Sempre que um novo comentário é adicionado"
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr "Sempre que uma nova correspondência é adicionada"
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "Onde encontrar o binário do sendmail."
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "Trabalho"
+
+#: NOT FOUND IN SOURCE
+msgid "Work offline"
+msgstr "Trabalhar offline"
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "Telefone de trabalho"
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr "Trabalhado"
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Sim"
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr "Você já é proprietário deste tíquete"
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr "Você vai encriptar mensagem de email de saída, mas existem problemas com as chaves públicas dos destinatários. Você precisa resolver este problema com as chaves, desativar o envio de mensagens para os recipientes com problemas nas chaves ou desativar encriptação."
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr "Você vai encriptar uma mensagem de email de saida mas existe um problema com a chave pública de um destinatário. Você pode resolver o problema com a chave, desativar o envio da mensagem para este destinatário ou desativar a encriptação."
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr "Você não é um usuário autorizado"
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Você pode<a href=\"%1\">ir para a primeira mensagem não lida</a> ou <a href=\"%2\">ir para a primeira mensagem não lida e marcar todas as mensagens como lidas</a>."
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr "Você também pode editar as buscas pré-definidas"
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr "Você só pode reatribuir seus próprios tíquetes ou aqueles que não têm dono"
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr "Você apenas pode pegar tíquetes que não tem dono"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "Você não tem a permissão de <b>SuperUsuário</b>"
+
+#: NOT FOUND IN SOURCE
+msgid "You don't have permission to view that ticket.\\n"
+msgstr "Você não tem permissão para ver este tíquete.\\n"
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr "Você encontrou %1 tíquetes na fila %2"
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr "Você foi desconectado do RT."
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr "Você não tem permissão para criar tíquetes nesta fila."
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr "Você não pode criar requisições nesta fila."
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Você precisa informar uma senha Administrativa"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr "Você pode ser direcionado diretamente para uma página de entrada. Você vai estar apto para entrar com o nome de usuário <tt>root</tt> e a senha definida anteriormente."
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr "Você pode escolher o banco de dados que faça você ou o administrador local de bancos de dados se sentir mais confortável."
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr "Você está vendo esta tela porque iniciou um servidor RT sem um banco de dados ativo. Mais parece que é a primeira vez que você está executando RT. Se você pressionar <i>Vamos!> abaixo, RT vai guiar você na definição de seu servidor RT e do banco de dados."
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "Volte sempre"
+
+#: NOT FOUND IN SOURCE
+msgid "Your %1 requests"
+msgstr "Suas %1 requisições"
+
+#: NOT FOUND IN SOURCE
+msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
+msgstr "Seu administrador do RT configurou erradamente os endereços eletrônicos que invocam o RT"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved by %1. Other approvals may still be pending."
+msgstr "Sua requisição foi aprovada por %1. Outras aprovações ainda podem estar pendentes."
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved."
+msgstr "Sua requisição foi aprovada."
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected"
+msgstr "Sua requisição foi rejeitada"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected."
+msgstr "Sua requisição foi rejeitada."
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr "Seu nome de usuário ou senha está incorreto"
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr "CEP"
+
+#: NOT FOUND IN SOURCE
+msgid "[no subject]"
+msgstr "[sem assunto]"
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[nenhum]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "depois de"
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr "permite criação de buscas salvas"
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr "permite carga de buscas salvas"
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr "como outorgado a %1"
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "barra"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Antes de"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "final para início"
+
+#: NOT FOUND IN SOURCE
+msgid "chart"
+msgstr "gráfico"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr "fechado"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "contains"
+msgstr "contém"
+
+#: NOT FOUND IN SOURCE
+msgid "content"
+msgstr "conteúdo"
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr "configuração principal"
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence (probably) not sent"
+msgstr "correspondência (provavelmente) não enviada"
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence sent"
+msgstr "correspondência enviada"
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr "campo personalizado '%1'"
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "diariamente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "diariamente em %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr "dias"
+
+#: NOT FOUND IN SOURCE
+msgid "dead"
+msgstr "morto"
+
+#: NOT FOUND IN SOURCE
+msgid "delete"
+msgstr "remover"
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr "removido"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "does not match"
+msgstr "não contém"
+
+#: NOT FOUND IN SOURCE
+msgid "doesn't contain"
+msgstr "não contém"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "não contém"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "baixar"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr "igual a"
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr "erro: não pode mover para baixo"
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr "erro: não pode mover para a esquerda"
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr "erro: não pode mover para cima"
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr "erro: nada para remover"
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr "erro: nada para mover"
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr "erro: nada para alternar"
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "todo"
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr "plugin executado com sucesso"
+
+#: NOT FOUND IN SOURCE
+msgid "false"
+msgstr "falso"
+
+#: NOT FOUND IN SOURCE
+msgid "filename"
+msgstr "nome do arquivo"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "tudo"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr "maior que"
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr "grupo '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "grouped by %1"
+msgstr "agrupado por %1"
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr "horas"
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr "identificador"
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr "é"
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr "não é"
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "chave desativada"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "chave expirada"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "chave revogada"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "esquerda para direita"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr "menor que"
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr "contém"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "profundidade máxima"
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr "min"
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "minutos"
+
+#: NOT FOUND IN SOURCE
+msgid "modifications"
+msgstr "modificações"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "mensalmente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "mensalmente (dia %1) a %2"
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr "meses"
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "nunca"
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr "novo"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "não"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr "sem nome"
+
+#: NOT FOUND IN SOURCE
+msgid "no value"
+msgstr "sem valor"
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr "nenhum"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr "diferente de"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "nada"
+
+#: NOT FOUND IN SOURCE
+msgid "notlike"
+msgstr "diferente"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "objetos foram removidos com sucesso"
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "em"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr "no dia"
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr "aberto"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "abrir/fechar"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "outro..."
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr "grupo pessoal '%1' para o usuário '%2'"
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "plugin retorna lista vazia"
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr "fila %1 %2"
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr "rejeitado"
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr "resolvido"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "direita para esquerda"
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr "seg"
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr "observar listas abaixo"
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr "mostrar coluna de Aprovados"
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr "exibir aba de Configuração"
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr "configuração da página"
+
+#: NOT FOUND IN SOURCE
+msgid "spreadsheet"
+msgstr "planilha"
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr "pendente"
+
+#: NOT FOUND IN SOURCE
+msgid "style: %1"
+msgstr "Estilo: %1"
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr "linhas do sumário"
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr "sistema %1"
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr "grupo do sistema '%1'"
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr "o componente chamador não especificou por que"
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "os endereços padrão que serão colocados nos cabeçalhos From: (De: ) e Reply-To: (Responder para:) das mensagens de comentário"
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "os endereços padrão que serão colocados nos cabeçalhos From: (De: ) e Reply-To: (Responder para:) das mensagens de corrrespondência"
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr "tíquete #%1 %2"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "início para final"
+
+#: NOT FOUND IN SOURCE
+msgid "true"
+msgstr "verdadeiro"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "final"
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr "grupo %1 sem descrição"
+
+#: NOT FOUND IN SOURCE
+msgid "undescripbed group %1"
+msgstr "grupo sem descrição %1"
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr "usuário %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "informativo"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "semanalmente"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "semanalmente (de %1) a %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr "semanas"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "qual porta seu servidor web vai responder, por exemplo, 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "com cabeçalhos"
+
+#: NOT FOUND IN SOURCE
+msgid "with template %1"
+msgstr "com modelo %1"
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "anos"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "sim"
+
diff --git a/rt/lib/RT/I18N/rt.pot b/rt/lib/RT/I18N/rt.pot
new file mode 100644
index 0000000..21569a1
--- /dev/null
+++ b/rt/lib/RT/I18N/rt.pot
@@ -0,0 +1,7460 @@
+# add by hand
+msgid ""
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr ""
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr ""
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr ""
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr ""
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr ""
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr ""
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr ""
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr ""
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr ""
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr ""
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr ""
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr ""
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr ""
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr ""
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr ""
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr ""
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr ""
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr ""
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr ""
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr ""
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr ""
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr ""
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr ""
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr ""
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr ""
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr ""
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr ""
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr ""
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr ""
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr ""
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr ""
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr ""
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr ""
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr ""
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr ""
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr ""
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr ""
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr ""
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr ""
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr ""
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr ""
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr ""
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr ""
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr ""
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr ""
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr ""
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr ""
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr ""
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr ""
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr ""
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr ""
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr ""
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr ""
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr ""
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr ""
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr ""
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr ""
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr ""
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr ""
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr ""
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr ""
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr ""
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr ""
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr ""
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr ""
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr ""
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr ""
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr ""
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr ""
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr ""
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr ""
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr ""
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr ""
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr ""
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr ""
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr ""
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr ""
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr ""
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr ""
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr ""
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr ""
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr ""
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr ""
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr ""
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr ""
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr ""
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr ""
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr ""
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr ""
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr ""
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr ""
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr ""
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr ""
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr ""
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr ""
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr ""
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr ""
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr ""
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr ""
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr ""
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr ""
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr ""
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr ""
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr ""
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr ""
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr ""
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr ""
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr ""
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr ""
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr ""
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr ""
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr ""
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr ""
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr ""
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr ""
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr ""
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr ""
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr ""
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr ""
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr ""
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr ""
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr ""
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr ""
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr ""
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr ""
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr ""
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr ""
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr ""
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr ""
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr ""
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr ""
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr ""
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr ""
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr ""
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr ""
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr ""
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr ""
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr ""
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr ""
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr ""
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr ""
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr ""
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr ""
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr ""
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr ""
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr ""
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr ""
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr ""
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr ""
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr ""
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr ""
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr ""
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr ""
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr ""
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr ""
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr ""
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr ""
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr ""
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr ""
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr ""
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr ""
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr ""
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr ""
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr ""
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr ""
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr ""
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr ""
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr ""
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr ""
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr ""
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr ""
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr ""
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr ""
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr ""
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr ""
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr ""
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr ""
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr ""
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr ""
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr ""
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr ""
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr ""
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr ""
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr ""
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr ""
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr ""
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr ""
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr ""
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr ""
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr ""
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr ""
+
+# add by hand
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr ""
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr ""
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr ""
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr ""
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr ""
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr ""
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr ""
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr ""
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr ""
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr ""
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr ""
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr ""
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr ""
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr ""
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr ""
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr ""
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr ""
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr ""
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr ""
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr ""
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr ""
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr ""
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr ""
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr ""
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr ""
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr ""
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr ""
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr ""
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr ""
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr ""
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr ""
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr ""
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr ""
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr ""
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr ""
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr ""
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr ""
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr ""
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr ""
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr ""
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr ""
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr ""
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr ""
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr ""
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr ""
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr ""
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr ""
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr ""
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr ""
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr ""
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr ""
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr ""
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr ""
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr ""
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr ""
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr ""
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr ""
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr ""
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr ""
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr ""
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr ""
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr ""
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr ""
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr ""
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr ""
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr ""
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr ""
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr ""
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr ""
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr ""
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr ""
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr ""
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr ""
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr ""
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr ""
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+# add by hand
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr ""
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr ""
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr ""
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr ""
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr ""
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr ""
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr ""
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr ""
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr ""
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr ""
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr ""
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr ""
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr ""
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr ""
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr ""
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr ""
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr ""
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr ""
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr ""
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr ""
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr ""
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr ""
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr ""
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr ""
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr ""
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr ""
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr ""
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr ""
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr ""
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr ""
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr ""
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr ""
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr ""
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr ""
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr ""
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr ""
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr ""
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+# add by hand
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr ""
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr ""
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr ""
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr ""
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr ""
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr ""
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr ""
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr ""
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr ""
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr ""
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr ""
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr ""
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr ""
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr ""
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr ""
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr ""
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr ""
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr ""
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr ""
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr ""
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr ""
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr ""
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr ""
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr ""
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr ""
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr ""
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr ""
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr ""
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr ""
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr ""
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr ""
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr ""
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr ""
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr ""
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr ""
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr ""
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr ""
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr ""
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr ""
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr ""
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr ""
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr ""
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr ""
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr ""
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr ""
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr ""
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr ""
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr ""
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr ""
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr ""
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr ""
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr ""
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr ""
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr ""
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr ""
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr ""
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr ""
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr ""
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr ""
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr ""
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr ""
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr ""
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr ""
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr ""
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr ""
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr ""
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr ""
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr ""
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/ru.pm b/rt/lib/RT/I18N/ru.pm
new file mode 100755
index 0000000..963553c
--- /dev/null
+++ b/rt/lib/RT/I18N/ru.pm
@@ -0,0 +1,74 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::I18N::ru;
+
+sub quant {
+ my($handle, $num, @forms) = @_;
+
+ return $num unless @forms;
+ return $forms[3] if !$num && $forms[3];
+
+ return $num .' '. $handle->numerate($num, @forms);
+}
+
+sub numerate {
+ my($handle, $n, @forms) = @_;
+
+ my $form = 0;
+ if ( $n%10 == 1 && $n%100 != 11 ) {
+ $form = 0;
+ } elsif ( $n%10 >= 2 && $n%10 <= 4 && ($n%100 < 10 || $n%100 >= 20) ) {
+ $form = 1;
+ } else {
+ $form = 2;
+ }
+ return $forms[$form];
+}
+
+1;
diff --git a/rt/lib/RT/I18N/ru.po b/rt/lib/RT/I18N/ru.po
index 4c4ce8a..d604c9a 100644
--- a/rt/lib/RT/I18N/ru.po
+++ b/rt/lib/RT/I18N/ru.po
@@ -1,827 +1,734 @@
-# translation of Request Tracker en.po to Russian
+# translation of Request Tracker to Russian
#
#
-# Andrew Kornilov <akornilov@gmail.com>, 2004, 2005, 2006.
+# Andrew Kornilov <akornilov@gmail.com>, 2004, 2005, 2006, 2007, 2008.
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.6.x\n"
+"Project-Id-Version: RT 3.8.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: (null)\n"
-"PO-Revision-Date: 2006-12-19 13:54+0200\n"
-"Last-Translator: Andrew Kornilov <akornilov@gmail.com>\n"
-"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-06-04 10:44+0000\n"
+"Last-Translator: Ilia Chipitsine <Unknown>\n"
+"Language-Team: Koptev Oleg <koptev.oleg@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+"X-Poedit-Country: RUSSIAN FEDERATION\n"
+"X-Poedit-Language: Russian\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr " %1 удалена."
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (нет открытого ключа!)"
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr " %1 переименована в %2."
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (ненадёжный!)"
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr " %1 Ñохранена."
-
-#: NOT FOUND IN SOURCE
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
msgid "#"
-msgstr "&#8470;"
+msgstr "â„–"
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
-msgstr ""
+msgstr "#%1: %2"
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr ""
-
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
-msgstr ""
+msgstr "%1 #%2"
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
msgstr ""
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%1 %2 %3 %4:%5:%6 %7"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
-msgstr "%1 %2 добавлен"
+msgstr "%1 %2 добавлено"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "%1 %2 назад"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1 %2 изменено на %3"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
-msgstr "%1 %2 удален"
+msgstr "%1 %2 удалёно"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 удалено."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 переименовано в %3."
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 Ñохранены."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼ %3"
-#: NOT FOUND IN SOURCE
-msgid "%1 (%2) %3 this ticket\\n"
-msgstr "%1 (%2) %3 Ñта заÑвка\\n"
-
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) от %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (Ðе менÑÑ‚ÑŒ)"
-#: NOT FOUND IN SOURCE
-msgid "%1 - %2 shown"
-msgstr "%1 - %2 показано"
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - Ðргумент Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ в %2"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
-msgstr ""
+msgstr "%1 - Выводить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑтатуÑа на STDOUT"
-#: bin/rt-crontool:253
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
-msgstr ""
+msgstr "%1 - Укажите id шаблона, который вы хотите иÑпользовать"
-#: bin/rt-crontool:256
+#: bin/rt-crontool:357
#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Выберите, какую передачу Ð’Ñ‹ хотите увидеть - первую, поÑледнюю, или вÑе."
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
msgstr ""
-#: bin/rt-crontool:247
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
-msgstr ""
+msgstr "%1 - Выберите модуль дейÑтвий, который хотите иÑпользовать"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Укажите в ÑпиÑке, разделенным запÑтыми, типы транзакций, которые вы хотите иÑпользовать"
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
-msgstr ""
+msgstr "%1 - Выберите модуль уÑловий, который хотите иÑпользовать"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
-msgstr ""
+msgstr "%1 - Укажите модуль поиÑка, который вы хотите иÑпользовать"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
msgstr ""
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
+msgstr "%1 RT %2 Ð’Ñе права защищены 1996-%3 %4"
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "%1 СкриплетÐаДейÑтвие загружен"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1 добавлено как значение Ð´Ð»Ñ %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 aliases require a TicketId to work on"
-msgstr "%1 пÑевдонимы требуют идентификатор заÑвки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 aliases require a TicketId to work on "
-msgstr "%1 пÑевдонимы требуют идентификатор заÑвки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ "
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 уже ÑущеÑтвует и имеет таблицы от RT, но не Ñодержит метаданных. ЗапуÑк Ñтапа 'Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð‘Ð”' позже Ñможет вÑтавить метаданные в ÑущеÑтвующую БД. ЕÑли Ñто приемлемо, кликните 'ÐаÑтроить ОÑновные Параметры' ниже Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ñтройки RT"
-#: NOT FOUND IN SOURCE
-msgid "%1 aliases require a TicketId to work on (from %2) %3"
-msgstr "%1 пÑевдонимы требуют идентификатор заÑвки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ над (от %2) %3"
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 уже ÑущеÑтвует, но не имеет таблицы от RT или метаданных. ЗапуÑк Ñтапа 'Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð‘Ð”' позже Ñможет вÑтавить метаданные в ÑущеÑтвующую БД. ЕÑли Ñто приемлемо, кликните 'ÐаÑтроить ОÑновные Параметры' ниже Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ñтройки RT"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 ÑвлÑетÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ объектом, но не найден в базе данных"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 похоже полноÑтью инициализирована. Мы не будем Ñоздавать таблицы или вÑтавлÑÑ‚ÑŒ метаданные, но вы можете продолжить наÑтройку RT кликнув 'ÐаÑтроить ОÑновные Параметры' ниже"
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 пользователем %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 изменена Ñ %2 на %3"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
-msgstr "%1 копиÑ"
+msgstr "ÐšÐ¾Ð¿Ð¸Ñ %1"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
-#: lib/RT/Record.pm:944
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 невозможно уÑтановить в %2."
-#: NOT FOUND IN SOURCE
-msgid "%1 couldn't init a transaction (%2)\\n"
-msgstr "%1 не может инициировать транзакцию (%2)\\n"
-
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 не может изменить ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° Решено. Возможно, база данных RT иÑпорчена."
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 Ñоздана"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 удалена"
-#: NOT FOUND IN SOURCE
-msgid "%1 grouped by %2"
-msgstr "%1 Ñгруппированные по %2"
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
-#: etc/initialdata:593
-msgid "%1 highest priority tickets I own"
-msgstr "%1 ваших заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами"
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 не ÑущеÑтвует."
-#: NOT FOUND IN SOURCE
-msgid "%1 highest priority tickets I own..."
-msgstr "%1 ваших заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами..."
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 highest priority tickets I requested..."
-msgstr "%1 заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами, Ñозданных вами..."
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "%1 ваших заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами"
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr ""
+msgstr "%1 утилита Ð´Ð»Ñ Ð²Ð¾Ð·Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ð½Ð° заÑвки из внешнего планировщика, такого как cron."
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 -- утилита, запуÑÐºÐ°ÐµÐ¼Ð°Ñ Ð¸Ð· cron, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾ÑтавлÑет вÑе отложенные почтовые ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ð¼ пользователÑм в виде \"дайджеÑта\"."
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 больше не ÑвлÑетÑÑ %2 Ð´Ð»Ñ Ñтой очереди."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this ticket."
msgstr "%1 больше не ÑвлÑетÑÑ %2 Ð´Ð»Ñ Ñтой заÑвки."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
msgid "%1 is no longer a value for custom field %2"
msgstr "%1 больше не ÑвлÑетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 isn't a valid Queue id."
-msgstr "%1 неверный идентификатор очереди."
-
-#: NOT FOUND IN SOURCE
-msgid "%1 matches"
-msgstr "%1 Ñовпадений"
-
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 мин"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "%1 поÑледних неназначенных заÑвок"
-#: NOT FOUND IN SOURCE
-msgid "%1 not shown"
-msgstr "%1 не отображаетÑÑ"
-
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 объектов"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr "Права %1"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "%1 succeeded\\n"
-msgstr "%1 уÑпешно произведено\\n"
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 изменение: %2"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 тип не извеÑтен Ð´Ð»Ñ $MessageId"
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 изменение: Ðичего не изменено"
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 тип не извеÑтен Ð´Ð»Ñ %2"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 was created without a CurrentUser\\n"
-msgstr "%1 была Ñоздана без ТекущегоПользователÑ\\n"
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 изменено"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 решит вÑе заÑвки, входÑщие в групповой запроÑ"
-#: NOT FOUND IN SOURCE
-msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
-msgstr "%1 приоÑтановит заÑвки, которые завиÑÑÑ‚ от запроÑа или включены в него"
-
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1 %2 объектов"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1 %2 %3 объектов"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "Информационные панели %1"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
-msgstr "%1 Ñохраненных запроÑов"
+msgstr "Сохранённые запроÑÑ‹ %1"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: без вложений"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr "%1б"
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr "%1к"
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
-msgstr ""
+msgstr "%quant(%1,чаÑ,чаÑа,чаÑов)"
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1' ÑвлÑетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼ значением ÑтатуÑа"
-#: NOT FOUND IN SOURCE
-msgid "'%1' not a recognized action. "
-msgstr "'%1' не ÑвлÑетÑÑ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрированным дейÑтвием."
-
-#: NOT FOUND IN SOURCE
-msgid "(Check box to delete group member)"
-msgstr "(Выделите пользователей Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· группы)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Check box to delete scrip)"
-msgstr "(Выделите Ñкриплеты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ)"
-
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Выделите пункты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ)"
-#: NOT FOUND IN SOURCE
-msgid "(Check boxes to delete)"
-msgstr "(Выделите пункты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ)"
-
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Выделите получателей Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· ÑпиÑка уведомлÑемых)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Выделите получателей Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² ÑпиÑок уведомлÑемых)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Введите идентификаторы или ÑÑылки на заÑвки, разделенные пробелами)"
-#: NOT FOUND IN SOURCE
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
-msgstr "(Введите идентификаторы или ÑÑылки на заÑвки, разделенные пробелами)"
-
-#: NOT FOUND IN SOURCE
-msgid "(If left blank, will default to %1"
-msgstr "(ЕÑли не заполнено, то по умолчанию равно %1"
-
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(ЕÑли не заполнено, то по умолчанию равно %1)"
-#: NOT FOUND IN SOURCE
-msgid "(No Value)"
-msgstr "(Ðет значениÑ)"
-
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Ðет дополнительных полей)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Ðет пользователей)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Ðет Ñкриплетов)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Ðет шаблонов)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
-msgstr "(Ðет)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
-msgstr "(Отправить Ñкрытую копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать Ñкрытые копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ…, <b>не</b> будет изменен.)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
-msgstr "(Отправить Ñкрытую копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать Ñкрытые копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ…, <b>не</b> будет изменен.)"
+msgstr "(Ðе задано)"
-#: html/Ticket/Update.html:90
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(Отправить Ñкрытую копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать Ñкрытые копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ…, <b>не</b> будет изменен.)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
-msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Эти получатели в дальнейшем <b>будут</b> получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ….)"
-
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Эти получатели в дальнейшем <b>будут</b> получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ….)"
+msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Эти получатели в дальнейшем <b>будут</b> получать копии Ñообщений об изменениÑÑ….)"
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
-msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ…, <b>не</b> будет изменен.)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
-msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменении, <b>не</b> будет изменен.)"
-
-#: html/Ticket/Update.html:86
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
-msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ…, <b>не</b> будет изменен.)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
-msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Эти получатели в дальнейшем <b>будут</b> получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ….)"
-
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
-msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Эти получатели в дальнейшем <b>будут</b> получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± изменениÑÑ….)"
+msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом изменении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Эти получатели в дальнейшем <b>будут</b> получать копии Ñообщений об изменениÑÑ….)"
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(ИÑпользуйте Ñти Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¸ выборе 'Задано пользователем' Ð´Ð»Ñ ÑƒÑловий или дейÑтвий)"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr "(КорреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ будет отправлена)"
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(любое)"
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(пуÑто)"
-#: NOT FOUND IN SOURCE
-msgid "(no Summary)"
-msgstr "(нет Ñводной информации)"
-
-#: html/Admin/Users/index.html:60
-msgid "(no name listed)"
-msgstr "(имена не указаны)"
-
-#: NOT FOUND IN SOURCE
-msgid "(no name)"
-msgstr "(нет имени)"
-
-#: NOT FOUND IN SOURCE
-msgid "(no subject)"
-msgstr "(нет темы)"
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(нет открытого ключа!)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(нет значениÑ)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(нет значений)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(только одна заÑвка)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(в ожидании %quant(%1,other ticket))"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(в ожидании подтверждениÑ)"
-#: html/Elements/RT__Ticket/ColumnMap:152
-msgid "(pending other Collection)"
-msgstr "(в ожидании Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑвÑзанных заÑвок)"
-
-#: NOT FOUND IN SOURCE
-msgid "(pending other tickets)"
-msgstr "(в ожидании других заÑвок)"
-
-#: NOT FOUND IN SOURCE
-msgid "(requestor's group)"
-msgstr "(группа автора заÑвки)"
-
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(требуетÑÑ)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(доверие: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(без названиÑ)"
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr "(гггг/мм/дд)"
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(недоверенный!)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
-msgstr ""
-
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "25 highest priority tickets I own..."
-msgstr "25 ваших заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами..."
-
-#: NOT FOUND IN SOURCE
-msgid "25 highest priority tickets I requested..."
-msgstr "25 заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами, Ñозданные ваши..."
-
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr "<% $Ticket->Status%>"
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
-msgstr ""
+msgstr "--"
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
msgstr ""
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"Создать заÑвку в\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Создать заÑвку в очереди\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Создать заÑвку в очереди\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Ð’Ñе iCal-каналы включают в ÑÐµÐ±Ñ Ñекретный токен, позволÑющий Ð²Ð°Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð¾Ð²Ð°Ñ‚ÑŒ. ЕÑли URL iCal-канала был раÑкрыт, Ð’Ñ‹ можете получить новый токен, <b>аннулирующий вÑе iCal-каналы</b> ниже.</p>"
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "ПуÑтой шаблон"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Пароль не был уÑтановлен, поÑтому пользователь не Ñможет зайти в ÑиÑтему."
-#: NOT FOUND IN SOURCE
-msgid "ACE could not be deleted"
-msgstr "Ðевозможно удалить ACE"
-
-#: NOT FOUND IN SOURCE
-msgid "ACE could not be found"
-msgstr "Ðевозможно найти ACE"
-
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE не найден"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACEÑ‹ можно только Ñоздавать и удалÑÑ‚ÑŒ"
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "И"
-#: NOT FOUND IN SOURCE
-msgid "Aborting to avoid unintended ticket modifications.\\n"
-msgstr "Прекращаем работу во избежание нежелательного Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ñвки.\\n"
-
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
-msgstr "Личные наÑтройки"
+msgstr "ПерÑональные данные"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "Права доÑтупа"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "ДейÑтвие"
-#: lib/RT/Scrip_Overlay.pm:172
+#: lib/RT/Scrip_Overlay.pm:136
#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "ДейÑтвие %1 не найдено"
-
-#: NOT FOUND IN SOURCE
-msgid "Action committed."
-msgstr "ДейÑтвие зафикÑировано."
+msgid "Action '%1' not found"
+msgstr "ДейÑтвие '%1' не найдено"
-#: bin/rt-crontool:171
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "ДейÑтвие зафикÑировано.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr "ДейÑтвие ÑвлÑетÑÑ Ð¾Ð±Ñзательным аргументом"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "ДейÑтвие подготовлено..."
-#: html/Search/Build.html:85
-msgid "Add"
-msgstr "Добавить"
-
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
-msgstr "Добавить ÐдминиÑтративнуюКопию"
+msgstr "Добавить админиÑтративную копию"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Добавить закладку"
-#: html/Search/Bulk.html:88
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
-msgstr "Добавить Копию"
+msgstr "Добавить копию"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Добавить колонки"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Добавить критерий"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Добавить еще файлы"
-#: NOT FOUND IN SOURCE
-msgid "Add Next State"
-msgstr "Добавить Ñледующее ÑоÑтоÑние"
-
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Добавить автора заÑвки"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Добавить значение"
-#: NOT FOUND IN SOURCE
-msgid "Add a Scrip to this queue"
-msgstr "Добавить Ñкриплет Ð´Ð»Ñ Ñтой очереди"
-
-#: NOT FOUND IN SOURCE
-msgid "Add a Scrip which will apply to all queues"
-msgstr "Добавить Ñкриплет, который будет дейÑтвовать на вÑе очереди"
-
-#: NOT FOUND IN SOURCE
-msgid "Add a new a global scrip"
-msgstr "Добавить новый глобальный Ñкриплет"
-
-#: NOT FOUND IN SOURCE
-msgid "Add a scrip to this queue"
-msgstr "Добавить Ñкриплет Ð´Ð»Ñ Ñтой очереди"
-
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Добавить Ñкриплет, который будет дейÑтвовать на вÑе очереди"
-#: NOT FOUND IN SOURCE
-msgid "Add additional criteria"
-msgstr "Добавить дополнительный критерий"
-
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr "Добавить и начать поиÑк"
-
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Добавить комментарии или ответы на выбранные заÑвки"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Добавить пользователей"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Добавить наблюдателей"
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
-msgstr "Добавить Ñти уÑÐ»Ð¾Ð²Ð¸Ñ Ð² ваш запроÑ"
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "Добавить Ñти уÑловиÑ"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "Добавить Ñти уÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ начать поиÑк"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "Добавить значениÑ"
# Manual merge by Andrew Kornilov <andy@eva.dp.ua>
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Добавить, удалить или изменить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… полей Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð²"
-#: NOT FOUND IN SOURCE
-msgid "AddNextState"
-msgstr "ДобавлÑтьСледующееСоÑтоÑние"
-
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Пользователь добавлен как %1 Ð´Ð»Ñ Ñтой очереди"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Пользователь добавлен как %1 Ð´Ð»Ñ Ñтой заÑвки"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "ÐдреÑ"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "ÐдреÑ1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "ÐдреÑ2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐšÐ¾Ð¿Ð¸Ñ"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "ÐдминиÑтративный Комментарий"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐšÐ¾Ñ€Ñ€ÐµÑпонденциÑ"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Управление очередÑми"
-#: NOT FOUND IN SOURCE
-msgid "Admin users"
-msgstr "Управление пользователÑми"
-
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Общие наÑтройки"
-#: NOT FOUND IN SOURCE
-msgid "Admin/Groups"
-msgstr "Управление группами"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin/Queue/Basics"
-msgstr "ОÑновные параметры очереди"
-
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "AdminAllPersonalGroups"
-msgstr "ÐдминиÑтрироватьВÑеПерÑональныеГруппы"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "ÐдминиÑтративнаÑКопиÑ"
-#: NOT FOUND IN SOURCE
-msgid "AdminComment"
-msgstr "ÐдминиÑтрироватьКомментарий"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCorrespondence"
-msgstr "ÐдминиÑтрироватьКорреÑпонденцию"
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "ÐдминиÑтрироватьДополнительноеПоле"
-#: NOT FOUND IN SOURCE
-msgid "AdminCustomFields"
-msgstr "ÐдминиÑтрироватьДополнительныеПолÑ"
-
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "ÐдминиÑтрироватьГруппу"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "ÐдминиÑтрироватьЧленÑтвоВГруппах"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "ÐдминиÑтрироватьСобÑтвенныеГруппы"
@@ -829,289 +736,246 @@ msgstr "ÐдминиÑтрироватьСобÑтвенныеГруппы"
msgid "AdminQueue"
msgstr "ÐдминиÑтрироватьОчередь"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "ÐдминиÑтрироватьПользователей"
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐšÐ¾Ð¿Ð¸Ñ"
-#: NOT FOUND IN SOURCE
-msgid "Admins"
-msgstr "ÐдминиÑтраторы"
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Пароль админиÑтратора"
-#: html/Ticket/Elements/Tabs:216
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Дополнительно"
-#: NOT FOUND IN SOURCE
-msgid "Advanced Search"
-msgstr "РаÑширенный поиÑк"
-
-#: NOT FOUND IN SOURCE
-msgid "Advanced Search Criteria"
-msgstr "Критерии раÑширенного поиÑка"
-
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "ПоÑле"
-
-#: NOT FOUND IN SOURCE
-msgid "Age"
-msgstr "ВозраÑÑ‚"
-
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Ðгрегатор"
-#: NOT FOUND IN SOURCE
-msgid "Alias"
-msgstr "ПÑевдоним"
-
-#: NOT FOUND IN SOURCE
-msgid "Alias for"
-msgstr "ПÑевдоним длÑ"
-
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Ð’Ñе Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ñ‹"
-#: NOT FOUND IN SOURCE
-msgid "All Custom Fields"
-msgstr "Ð’Ñе дополнительные полÑ"
-
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Ð’Ñе очереди"
-#: NOT FOUND IN SOURCE
-msgid "Always sends a message to the requestors independent of message sender"
-msgstr "Ð’Ñегода отправлÑÑ‚ÑŒ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð°Ð¼ заÑвок незавиÑимо от Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ ÑообщениÑ"
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Уже зашифровано"
-#: html/Search/Elements/EditQuery:56
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "И/Или"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "ПрименÑетÑÑ Ðº"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Применить"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Применить ваши изменениÑ"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "ПодтверждениÑ"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Подтверждение #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Подтверждение #%1: ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð½Ðµ Ñохранены из-за ÑиÑтемной ошибки"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Подтверждение #%1: ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñаны"
-#: NOT FOUND IN SOURCE
-msgid "Approval Details"
-msgstr "Детали подтверждениÑ"
-
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Подтверждение получено"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Подтверждение отклонено"
-#: NOT FOUND IN SOURCE
-msgid "Approval diagram"
-msgstr "Диаграмма подтверждений"
-
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Подтвердить"
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr "ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ð²ÑˆÐµÐ³Ð¾: %1"
-
-#: lib/RT/Date.pm:444
-msgid "Apr."
-msgstr "Ðпр."
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "Ðпр"
#: NOT FOUND IN SOURCE
msgid "April"
msgstr "Ðпрель"
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr "По возраÑтанию"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Ð’ порÑдке возраÑтаниÑ"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
-msgstr "Ðазначение и удаление дополнительных полей"
+msgstr "Ðазначать и удалÑÑ‚ÑŒ дополнительные полÑ"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "ÐазначатьДополнительныеПолÑ"
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Вложение"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Вложить файл"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Вложенный файл"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Вложение"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Вложение '%1' не может быть загружено"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Вложение Ñоздано"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "ВложениÑ"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Шифрование вложений не иÑпользуетÑÑ"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
-msgstr "Ðтрибут удален"
+msgstr "Ðтрибут удалён"
-#: lib/RT/Date.pm:448
-msgid "Aug."
-msgstr "Ðвг."
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "Ðвг"
#: NOT FOUND IN SOURCE
msgid "August"
msgstr "ÐвгуÑÑ‚"
-#: NOT FOUND IN SOURCE
-msgid "AuthSystem"
-msgstr "Тип региÑтрации"
-
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Ðвтоответ"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Ðвтоответ Ðвторам ЗаÑвки"
-#: NOT FOUND IN SOURCE
-msgid "AutoreplyToRequestors"
-msgstr "ÐвтоответÐвторамЗаÑвки"
-
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "ДоÑтупно"
-#: NOT FOUND IN SOURCE
-msgid "Available Columns"
-msgstr "ДоÑтупные колонки"
-
-#: NOT FOUND IN SOURCE
-msgid "Bad PGP Signature: %1\\n"
-msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ PGP: %1\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
-msgstr "Ðеверный идентификатор вложениÑ. Ðевозможно найти вложение '%1'\\n"
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "\"СлепаÑ\" копиÑ"
-#: NOT FOUND IN SOURCE
-msgid "Bad data in %1"
-msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° в %1"
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "Ðазад"
-#: NOT FOUND IN SOURCE
-msgid "Bad transaction number for attachment. %1 should be %2\\n"
-msgstr "Ðеправильный номер транзакции Ð´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ. %1 должен быть %2\\n"
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "ОÑновное"
-#: html/Ticket/Update.html:88
-msgid "Bcc"
-msgstr "Ð¡ÐºÑ€Ñ‹Ñ‚Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ"
-
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Ðе забудьте Ñохранить наÑтройки"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "До"
-
-#: NOT FOUND IN SOURCE
-msgid "Begin Approval"
-msgstr "Ðачать подтверждение"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Binary"
-msgstr "Двоичный"
-
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "ПуÑтой"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Содержание"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Жирный"
-#: NOT FOUND IN SOURCE
-msgid "Bookmarkable URL for this search"
-msgstr "СÑылка на Ñтот Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² избранное"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Закладка"
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
-msgstr "СÑылка Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² избранное"
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "ЗаÑвки, добавленные в закладки"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Сокращенные заголовки"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "МножеÑтвенное изменение"
-#: NOT FOUND IN SOURCE
-msgid "Bulk ticket update"
-msgstr "МножеÑтвенное изменение заÑвки"
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Купить поддержку"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "По-умолчанию, RT иÑпользует ÑиÑтемную временную зону. Это позволÑет вам уÑтановить глобальное умолчание Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ñ‚ и времен в RT. Ваши пользователи Ñмогут выбирать различные временные зоны в Ñвоих наÑтройках."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Ðевозможно изменить ÑиÑтемных пользователей"
@@ -1119,957 +983,1159 @@ msgstr "Ðевозможно изменить ÑиÑтемных пользовÐ
msgid "Can this principal see this queue"
msgstr "Может ли данный пользователь проÑматривать Ñту очередь"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Ðевозможно добавление Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ Ð±ÐµÐ· наименованиÑ"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "Ðевозможно найти клаÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ð¸ Ð´Ð»Ñ '%1'"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
-msgstr "Ðевозможно найти Ñохраненный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼"
+msgstr "Ðевозможно найти Ñохранённый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Ðевозможно ÑвÑзать заÑвку Ñаму Ñ Ñобой"
-#: NOT FOUND IN SOURCE
-msgid "Can't merge into a merged ticket. You should never get this error"
-msgstr "Ðевозможно объединить Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð½Ð¾Ð¹ заÑвкой (Ñта ошибка никогда не должна проиÑходить)."
-
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr "Ðевозможно Ñохранить %1"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Ðевозможно Ñохранить Ñтот запроÑ"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Ðевозможно указывать одновременно и иÑточник и Ð°Ð´Ñ€ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Ðевозможно Ñоздавать заÑвки в неиÑпользуемой очереди."
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Ðевозможно Ñоздать пользователÑ: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "КатегориÑ"
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð½Ðµ задана"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "КопиÑ"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Изменить"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Изменить пароль"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Выбрать вÑе"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "Проверить подключение к базе данных"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Выделите пункты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Выделите права, которые хотите отозвать"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "Проверьте реквизиты доÑтупа к базе данных"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Потомки"
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
-msgstr "Выберите дату"
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "Выберите СУБД"
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Город"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "ОчиÑтить"
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
-msgstr "ОчиÑтить вÑе"
+msgstr "ОчиÑтить вÑÑ‘"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "Ðажмите \"Завершить инÑталлÑцию\" Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñтого маÑтера."
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "Кликните \"Инициализировать БД\" Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных RT и вÑтавки метаданных. Это может занÑÑ‚ÑŒ немного времени"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Закрыть окно"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
-msgstr "Закрыто"
-
-#: NOT FOUND IN SOURCE
-msgid "Closed Tickets"
-msgstr "Закрытые заÑвки"
+msgstr "Закрыта"
-#: NOT FOUND IN SOURCE
-msgid "Closed requests"
-msgstr "Закрытые запроÑÑ‹"
-
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Закрытые заÑвки"
-#: NOT FOUND IN SOURCE
-msgid "Code"
-msgstr "Код"
-
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Комбинированный ÑпиÑок: Выберите или введите неÑколько значений"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Комбинированный ÑпиÑок: Выберите или введите одно значение"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Комбинированный ÑпиÑок: Выберите или введите до %1 значений"
-#: NOT FOUND IN SOURCE
-msgid "Command not understood!\\n"
-msgstr "Команда не раÑпознана!\\n"
-
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Комментировать"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸ÐµÐ²"
-#: NOT FOUND IN SOURCE
-msgid "Comment not recorded"
-msgstr "Комментарий не запиÑан"
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸ÐµÐ²"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
-msgstr "Комментарии заÑвки"
+msgstr "Комментировать заÑвки"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "ÐдреÑДлÑКомментариев"
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "КомментироватьЗаÑвку"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:64
msgid "Comments"
msgstr "Комментарии"
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Комментарии (Ðе отправлÑÑŽÑ‚ÑÑ Ð°Ð²Ñ‚Ð¾Ñ€Ð°Ð¼ заÑвки)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Комментарии (Ðе отправлÑÑŽÑ‚ÑÑ Ð°Ð²Ñ‚Ð¾Ñ€Ð°Ð¼ заÑвки)"
-#: NOT FOUND IN SOURCE
-msgid "Comments about %1"
-msgstr "Комментарии о %1"
-
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Комментарии об Ñтом пользователе"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Комментарии добавлены"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "Compile Restrictions"
-msgstr "Применить ограничениÑ"
-
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "УÑловие"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "УÑловие '%1' не найдено"
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr "УÑловие ÑвлÑетÑÑ Ð¾Ð±Ñзательным аргументом"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "ПодходÑщее уÑловие..."
-#: lib/RT/Scrip_Overlay.pm:188
-msgid "Condition not found"
-msgstr "УÑловие не найдено"
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "УÑловие, ДейÑтвие и Шаблон"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "Конфигурационный файл %1 заблокирован"
-#: html/Elements/Tabs:84
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "КонфигурациÑ"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Подтвердить"
-#: NOT FOUND IN SOURCE
-msgid "ContactInfoSystem"
-msgstr "ÐšÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Соединение выполнено"
-#: NOT FOUND IN SOURCE
-msgid "Contacted date '%1' could not be parsed"
-msgstr "Ðевозможно идентифицировать дату поÑледнего контакта '%1'"
-
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Содержимое"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Тип-СодержаниÑ"
-#: NOT FOUND IN SOURCE
-msgid "Coould not create group"
-msgstr "Ðевозможно Ñоздать группу"
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "ТипСодержаниÑ"
-#: html/Search/Elements/EditSearches:65
-msgid "Copy"
-msgstr "КопиÑ"
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÑпонденции"
-#: etc/initialdata:286
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "КорреÑпонденциÑ"
-#: NOT FOUND IN SOURCE
-msgid "Correspondence Address"
-msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÑпонденции"
-
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "КорреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð°"
-#: NOT FOUND IN SOURCE
-msgid "Correspondence not recorded"
-msgstr "КорреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ запиÑана"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not add new custom field value for ticket. "
-msgstr "Ðевозможно добавить новое значение дополнительного Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвки."
-
-#: NOT FOUND IN SOURCE
-msgid "Could not add new custom field value for ticket. %1 "
-msgstr "Ðевозможно добавить новое значение дополнительного Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвки. %1"
-
-#: lib/RT/Record.pm:1707
-msgid "Could not add new custom field value. "
-msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ полÑ"
-
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
-msgid "Could not add new custom field value. %1 "
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ полÑ. %1"
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
-msgid "Could not change owner. "
-msgstr "Ðевозможно изменить ответÑтвенного."
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "Ðевозможно изменить владельца: %1"
-#: html/Admin/CustomFields/Modify.html:161
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Ðевозможно Ñоздать дополнительное поле"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ полÑ: %1"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Ðевозможно Ñоздать группу"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Ðевозможно Ñоздать шаблон: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "Ðевозможно Ñоздать заÑвку в неиÑпользуемой очереди \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Ðевозможно Ñоздать заÑвку. Ðе задана очередь."
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Ðевозможно Ñоздать пользователÑ"
-#: NOT FOUND IN SOURCE
-msgid "Could not create watcher for requestor"
-msgstr "Ðевозможно Ñоздать Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð° заÑвки"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not find a ticket with id %1"
-msgstr "Ðевозможно найти заÑвку Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not find group %1."
-msgstr "Ðевозможно найти группу %1."
-
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Ðевозможно найти или Ñоздать Ñтого пользователÑ"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Ðевозможно найти Ñтого пользователÑ"
-#: NOT FOUND IN SOURCE
-msgid "Could not find user %1."
-msgstr "Ðевозможно найти Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1."
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "Ðевозможно загрузить атрибут %1"
-#: html/Admin/CustomFields/Objects.html:69
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Ðевозможно загрузить дополнительное поле %1"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Ðевозможно загрузить группу"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "Ошибка загрузки объекта Ð´Ð»Ñ %1"
-#: lib/RT/SavedSearch.pm:197
-msgid "Could not load search attribute"
-msgstr "Ошибка загрузки атрибута запроÑа"
-
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Ðевозможно назначить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1 Ð´Ð»Ñ Ñтой очереди"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Ðевозможно назначить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1 Ð´Ð»Ñ Ñтой заÑвки"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Ðевозможно отозвать функции у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 Ð´Ð»Ñ Ñтой очереди"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this ticket"
msgstr "Ðевозможно отозвать функции у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 Ð´Ð»Ñ Ñтой заÑвки"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Ðевозможно уÑтановить информацию о пользователе"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr "Ðевозможно добавить вложение"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Ðевозможно добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² группу"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Ðевозможно Ñоздать транзакцию: %1"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't figure out what to do from gpg's reply\\n"
-msgstr "Ðевозможно определить дальнейшие дейÑÑ‚Ð²Ð¸Ñ Ð¸Ð· ответа gpg\\n"
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "Ðевозможно Ñоздать запиÑÑŒ"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't find group\\n"
-msgstr "Ðевозможно найти группу\\n"
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "Ðевозможно удалить информационную панель %1: %2"
-#: lib/RT/Record.pm:953
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Ðевозможно найти Ñтроку"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "Ðевозможно найти подходÑщую транзакцию, пропуÑкаем"
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Ðевозможно найти Ñтого пользователÑ"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Ðевозможно найти Ñто значение"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't find that watcher"
-msgstr "Ðевозможно найти Ñтого наблюдателÑ"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't find user\\n"
-msgstr "Ðевозможно найти пользователÑ\\n"
-
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Ðевозможно загрузить %1 из базы пользователей.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "Ошибка загрузки клаÑÑа %1"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "Ошибка загрузки дополнительного Ð¿Ð¾Ð»Ñ #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "Ðевозможно загрузить дополнительное поле %1"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load RT config file '%1' %2"
-msgstr "Ðевозможно загрузить файл наÑтроек RT '%1' %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load Scrips."
-msgstr "Ðевозможно загрузить Ñкриплеты."
-
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr "Ðевозможно загрузить копию заÑвки #%1."
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "Ðевозможно загрузить информационную панель %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "Ðевозможно загрузить информационную панель %1: %2."
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "Ошибка загрузки группы #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "Ðевозможно загрузить группу %1"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Ðевозможно загрузить ÑÑылку"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "Ðевозможно загрузить объект %1"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "Ошибка загрузки или ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: %1"
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Ðевозможно загрузить очередь"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "Ошибка загрузки очереди #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "Ðевозможно загрузить очередь %1"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load scrip"
-msgstr "Ðевозможно загрузить Ñкриплет"
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "Ошибка загрузки очереди '%1'"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr "Ðевозможно загрузить Ñкриплет #%1"
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load template"
-msgstr "Ðевозможно загрузить шаблон"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load that user (%1)"
-msgstr "Ðевозможно загрузить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (%1)"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "Ошибка загрузки шаблона #%1"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "Ðевозможно загрузить заÑвку '%1'"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "Ошибка загрузки транзакции #%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "Ошибка загрузки Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "Ðевозможно получить Ð°Ð´Ñ€ÐµÑ Ð¸Ð· Ñтроки '%1'"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "Ошибка замены контента раÑшифрованными данными: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "Ошибка замены контента зашифрованными данными: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
-msgstr ""
+msgstr "Ошибка Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ '%1' в URI."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
msgid "Couldn't resolve base '%1' into a URI."
msgstr "Ðевозможно преобразовать базу '%1' в URI."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
msgid "Couldn't resolve target '%1' into a URI."
msgstr "Ðевозможно преобразовать цель '%1' в URI."
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "Ошибка отправки почтового ÑообщениÑ"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "Ðевозможно уÑтановить %1 наблюдателем: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "Ошибка уÑтановки Ñекретного ключа"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "Ошибка ÑброÑа Ñекретного ключа"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Страна"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Создать"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Создать заÑвки"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Создать дополнительное поле"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
-msgstr "Создать дополнительное поле Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ 1"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a CustomField that applies to all queues"
-msgstr "Создать дополнительное поле Ð´Ð»Ñ Ð²Ñех очередей"
+msgstr "Создать дополнительное поле Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1"
-#: NOT FOUND IN SOURCE
-msgid "Create a new Custom Field"
-msgstr "Добавить новое дополнительное поле"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new global Scrip"
-msgstr "Создать новый глобальный Ñкриплет"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "Создать новую информационную панель"
-#: NOT FOUND IN SOURCE
-msgid "Create a new global scrip"
-msgstr "Создать новый глобальный Ñкриплет"
-
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Создать новую группу"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
-msgstr "Создать новую личную группу"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new queue"
-msgstr "Создать новую очередь"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new scrip"
-msgstr "Создать новый Ñкриплет"
+msgstr "Создать новую пользовательÑкую группу"
-#: NOT FOUND IN SOURCE
-msgid "Create a new template"
-msgstr "Создать новый шаблон"
-
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Создать новую заÑвку"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Создать нового пользователÑ"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Создать очередь"
-#: NOT FOUND IN SOURCE
-msgid "Create a queue called"
-msgstr "Создать очередь Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a request"
-msgstr "Создать запроÑ"
-
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "Создать Ñкриплет Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Создать шаблон"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Создать заÑвку"
-#: NOT FOUND IN SOURCE
-msgid "Create failed: %1 / %2 / %3 "
-msgstr "Ошибка ÑозданиÑ: %1 / %2 / %3 "
-
-#: NOT FOUND IN SOURCE
-msgid "Create failed: %1/%2/%3"
-msgstr "Ошибка ÑозданиÑ: %1/%2/%3"
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "Создавать информационные панели Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ группы"
-#: etc/initialdata:137
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Создать новые заÑвки на оÑнове Ñтого шаблона Ñкриплета"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "Создавать пользовательÑкие информационные панели"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "Создавать ÑиÑтемные информационные панели"
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Создать заÑвку"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
-msgstr "Создать заÑвки в Ñтой очереди"
+msgstr "Создавать заÑвки в Ñтой очереди"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "Создать заÑвки в автономном режиме"
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Создать, удалить или изменить дополнительные полÑ"
#: lib/RT/Queue_Overlay.pm:92
msgid "Create, delete and modify queues"
-msgstr "Создать, удалить или изменить очереди"
+msgstr "Создавать, удалÑÑ‚ÑŒ или изменÑÑ‚ÑŒ очереди"
-#: NOT FOUND IN SOURCE
+#: lib/RT/System.pm:81
msgid "Create, delete and modify the members of any user's personal groups"
-msgstr "Создать, удалить или изменить членов любой пользовательÑкой перÑональной группы"
+msgstr ""
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
-msgstr "Создать, удалить или изменить членов перÑональных групп"
+msgstr "Создавать, удалÑÑ‚ÑŒ или изменÑÑ‚ÑŒ членов перÑональных групп"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
-msgstr "Создать, удалить или изменить пользователей"
+msgstr "Создавать, удалÑÑ‚ÑŒ или изменÑÑ‚ÑŒ пользователей"
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "СоздаватьИнформационнуюПанель"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "СоздаватьГрупповуюИнформационнуюПанель"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr "СоздаватьПользовательÑкуюИнформационнуюПанель"
-#: lib/RT/System.pm:87
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
-msgstr "СоздаватьСохраненныйЗапроÑ"
+msgstr "СоздаватьСохранённыйЗапроÑ"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
-msgstr "Создать ЗаÑвку"
+msgstr "СоздаватьЗаÑвку"
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Создана"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Создана:"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Создано дополнительное поле %1"
-#: NOT FOUND IN SOURCE
-msgid "Created by"
-msgstr "Создано пользователем"
-
-#: NOT FOUND IN SOURCE
-msgid "Created during"
-msgstr "Создано во времÑ"
-
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
-msgstr "Создано за промежуток времени"
-
-#: NOT FOUND IN SOURCE
-msgid "Created template %1"
-msgstr "Создан шаблон %1"
+msgstr "Создано в промежутке времени"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Создано заÑвок за период, Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¾Ð¹ по ÑтатуÑу"
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "Создана:"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Ðвтор заÑвки"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "КриптографиÑ"
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Текущие ÑвÑзи"
-#: NOT FOUND IN SOURCE
-msgid "Current Relationships"
-msgstr "Текущие взаимоÑвÑзи"
-
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Текущие Ñкриплеты"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Текущие пользователи"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Текущие права"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Текущий запроÑ"
-#: NOT FOUND IN SOURCE
-msgid "Current search criteria"
-msgstr "Текущие критерии поиÑка"
-
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Текущие наблюдатели"
-#: NOT FOUND IN SOURCE
-msgid "Custom Field #%1"
-msgstr "Дополнительное поле #%1"
-
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Дополнительные полÑ"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "Дополнительные Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ %1"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
-msgstr "ПользовательÑкий код очиÑтки дейÑтвиÑ"
+msgstr "ПользовательÑкий код Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð´ÐµÐ¹ÑтвиÑ"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "ПользовательÑкий код подготовки дейÑтвиÑ"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "ПользовательÑкое уÑловие"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
msgid "Custom field %1 %2 %3"
msgstr "Дополнительное поле %1 %2 %3"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
msgid "Custom field %1 does not apply to this object"
msgstr "Дополнительное поле %1 не отноÑитÑÑ Ðº Ñтому объекту"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Дополнительное поле %1 имеет значение."
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Дополнительное поле %1 не имеет значениÑ."
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Ðевозможно найти дополнительное поле %1"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
msgstr "Дополнительное поле '%1'"
-#: NOT FOUND IN SOURCE
-msgid "Custom field deleted"
-msgstr "Дополнительное поле удалено"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field not found"
-msgstr "Ðевозможно найти дополнительное поле"
-
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Ðевозможно найти значение %1 дополнительного Ð¿Ð¾Ð»Ñ %2"
-#: NOT FOUND IN SOURCE
-msgid "Custom field value changed from %1 to %2"
-msgstr "Значение дополнительного Ð¿Ð¾Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñ %1 на %2"
-
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Ðевозможно удалить значение дополнительного полÑ"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
-msgstr "Ðевозможно найти значение дополнительного Ð¿Ð¾Ð»Ñ "
+msgstr "Ðевозможно найти значение дополнительного полÑ"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Значение дополнительного Ð¿Ð¾Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¾"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "ДополнительноеПоле"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "ЗначениеДополнительногоПолÑ"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "ÐаÑтроить"
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "Изменить базовые наÑтройки"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "ÐаÑтроить параметры БД"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "Изменение Email'ов"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "Изменить наÑтройки email"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "ÐаÑтроить Общие"
+
#: NOT FOUND IN SOURCE
-msgid "Data error"
-msgstr "Ошибка данных"
+msgid "Customize Global Defaults"
+msgstr "ÐаÑтройка Параметров по умолчанию"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "пароль админиÑтратора БД"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð‘Ð”"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "Ежедневный дайджеÑÑ‚"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "Ðевозможно Ñоздать информационную панель: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "Ðевозможно изменить информационную панель: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ изменена"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "Информационные панели"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "Ñервер (хоÑÑ‚) БД"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "Ð˜Ð¼Ñ Ð‘Ð”"
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "Пароль Ð´Ð»Ñ Ð´Ð¾Ñтупа RT к базе данных"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "Порт БД"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "Тип БД"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð´Ð¾Ñтупа RT к базе даных"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Формат даты"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Даты"
-#: lib/RT/Date.pm:452
-msgid "Dec."
-msgstr "Дек."
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "Дек"
#: NOT FOUND IN SOURCE
msgid "December"
msgstr "Декабрь"
-#: NOT FOUND IN SOURCE
-msgid "Default Autoresponse Template"
-msgstr "Шаблон автоответа по умолчанию"
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "РаÑшифровать"
-#: etc/initialdata:222
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Шаблон автоответа по умолчанию"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Очередь по умолчанию"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Ðвтор заÑвки по умолчанию"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Шаблон админиÑтративного ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ Ð¿Ð¾ умолчанию"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Шаблон админиÑтративной корреÑпонденции по умолчанию"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Шаблон корреÑпонденции по умолчанию"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "Очередь по умолчанию"
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Шаблон транзакции по умолчанию"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "По умолчанию: %1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
msgid "Default: %1/%2 changed from %3 to %4"
msgstr "Умолчание: %1/%2 изменено Ñ %3 на %4"
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Делегирование прав"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
-msgstr "Делегирование отдельных прав, которые выданы вам."
+msgstr "Делегировать выданные вам права."
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "ДелегироватьПрава"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Делегирование прав"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Удалить"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Удалить шаблон"
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "УдалÑÑ‚ÑŒ информационные панели данной группы"
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Ошибка удалениÑ: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "УдалÑÑ‚ÑŒ пользовательÑкие информационные панели"
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Удалить выбранные Ñкриплеты"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "УдалÑÑ‚ÑŒ ÑиÑтемные информационные панели"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
-msgstr "Удалить заÑвки"
+msgstr "УдалÑÑ‚ÑŒ заÑвки"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr "Удалить значениÑ"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "УдалÑтьИнформационнуюПанель"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "УдалÑтьГрупповуюИнформационнуюПанель"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "УдалÑтьПользовательÑкуюИнформационнуюПанель"
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "УдалÑтьЗаÑвку"
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
-msgstr "Удаленный запроÑ"
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "Удалено %1"
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object could break referential integrity"
-msgstr "Удаление Ñтого объекта может нарушить ÑÑылочную целоÑтноÑÑ‚ÑŒ"
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "Удалена Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ %1"
-#: lib/RT/Queue_Overlay.pm:394
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "Удалён Ñохранённый запроÑ"
+
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑÑ‚ÑŒ"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑÑ‚ÑŒ"
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object would violate referential integrity."
-msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑÑ‚ÑŒ."
-
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object would violate referential integrity. That's bad."
-msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑÑ‚ÑŒ."
-
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Отказать"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "От неё завиÑÑÑ‚"
-#: NOT FOUND IN SOURCE
-msgid "Dependencies: \\n"
-msgstr "ЗавиÑимоÑти: \\n"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "Добавлено требование заÑвкой %1"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "Удалено требование заÑвкой %1"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "Добавлена завиÑимоÑÑ‚ÑŒ от %1"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "Удалена завиÑимоÑÑ‚ÑŒ от %1"
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "ЗавиÑит от"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "DependsOn"
msgstr "ЗавиÑит от"
-#: html/Search/Elements/DisplayOptions:86
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "По убыванию"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Ð’ порÑдке убываниÑ"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Опишите проблему"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "ОпиÑание"
-#: NOT FOUND IN SOURCE
-msgid "Details"
-msgstr "ПодробноÑти"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "Ðаправление"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "Ðе иÑпользуетÑÑ"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Показать"
@@ -2077,1425 +2143,1759 @@ msgstr "Показать"
msgid "Display Access Control List"
msgstr "Показать ÑпиÑок прав доÑтупа"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Показать колонки"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
-msgstr "Показать шаблоны Ñкриплетов Ð´Ð»Ñ Ñтой очереди"
+msgstr "Показывать шаблоны Ñкриплетов Ð´Ð»Ñ Ñтой очереди"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
-msgstr "Показать Ñкриплеты Ð´Ð»Ñ Ñтой очереди"
-
-#: html/Ticket/Elements/ShowHistory:59
-msgid "Display mode"
-msgstr "Режим отображениÑ"
+msgstr "Показывать Ñкриплеты Ð´Ð»Ñ Ñтой очереди"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
-msgstr "Показать Ñохраненные запроÑÑ‹ Ð´Ð»Ñ Ñтой группы"
+msgstr "Показывать Ñохранённые запроÑÑ‹ Ð´Ð»Ñ Ñтой группы"
-#: NOT FOUND IN SOURCE
-msgid "Display ticket #%1"
-msgstr "Показать заÑвку #%1"
-
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "РаÑпроÑтранÑетÑÑ Ð¿Ð¾ верÑии 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> GNU GPL.</a>"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
-msgstr "Делать вÑе и везде"
+msgstr "Делать вÑÑ‘ и везде"
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "Ðаименование домена"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "Ðе иÑпользуйте http://, только типа 'localhost', 'rt.example.com'"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
-#: html/Elements/Refresh:51
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Ðе обновлÑÑ‚ÑŒ Ñту Ñтраницу"
-#: NOT FOUND IN SOURCE
-msgid "Don't show search results"
-msgstr "Ðе показывать результаты поиÑка"
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr "Больше не доверÑÑ‚ÑŒ данному ключу"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Загрузить"
-#: NOT FOUND IN SOURCE
-msgid "Download all the tickets as a tab delimited file"
-msgstr "Загрузить вÑе заÑвки как файл Ñо значениÑми, разделенными табулÑцией"
-
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Загрузить как файл Ñо значениÑми, разделенными табулÑцией"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr "Загрузить дамп"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Дан Ñрок"
-#: NOT FOUND IN SOURCE
-msgid "Due date '%1' could not be parsed"
-msgstr "Ðевозможно разобрать Ñрок Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹ '%1'"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
-msgstr "ОШИБКÐ: Ðевозможно загрузить заÑвку '%1': %2.\\n"
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr "ОШИБКÐ: %1"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr "БыÑтрое изменение ваших открытых заÑвок"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Редактировать"
-#: NOT FOUND IN SOURCE
-msgid "Edit Conditions"
-msgstr "Редактировать уÑловиÑ"
-
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
-msgstr "Редактировать Дополнительные ПолÑ"
+msgstr "Редактировать дополнительные полÑ"
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
-msgstr "Редактирование дополнительных полей Ð´Ð»Ñ %1"
+msgstr "Редактировать дополнительные Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
-msgstr "Редактирование дополнительных полей вÑех групп"
+msgstr "Редактировать дополнительные Ð¿Ð¾Ð»Ñ Ð²Ñех групп"
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr "Редактировать дополнительные Ð¿Ð¾Ð»Ñ Ð²Ñех очередей"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
-msgstr "Редактирование дополнительных полей вÑех пользователей"
+msgstr "Редактировать дополнительные Ð¿Ð¾Ð»Ñ Ð²Ñех пользователей"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
-msgstr "Редактирование дополнительных полей заÑвок во вÑех очередÑÑ…"
+msgstr "Редактировать дополнительные Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвок во вÑех очередÑÑ…"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Редактировать ÑвÑзи"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Редактировать запроÑ"
-#: NOT FOUND IN SOURCE
-msgid "Edit Relationships"
-msgstr "Редактировать взаимоÑвÑзи"
-
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Редактировать запроÑ"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "Редактировать шаблоны Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1"
-#: NOT FOUND IN SOURCE
-msgid "Edit keywords"
-msgstr "Редактировать ключевые Ñлова"
-
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
-msgstr "Редактировать Ñохраненные запроÑÑ‹ Ñтой группы"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit scrips"
-msgstr "Редактировать Ñкриплеты"
+msgstr "Редактировать Ñохранённые запроÑÑ‹ Ñтой группы"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Редактировать ÑиÑтемные шаблоны"
-#: NOT FOUND IN SOURCE
-msgid "Edit templates for %1"
-msgstr "Редактирование шаблонов Ð´Ð»Ñ %1"
-
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
-msgstr "РедактироватьСохраненныеЗапроÑÑ‹"
+msgstr "РедактироватьСохранённыеЗапроÑÑ‹"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "Редактируемый текÑÑ‚ запроÑа"
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "Редактирование наÑтроек очереди %1"
-#: NOT FOUND IN SOURCE
-msgid "Editing Configuration for user %1"
-msgstr "Редактирование наÑтроек Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1"
-
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
-msgstr "Редактирование Ð¿Ð¾Ð»Ñ %1"
+msgstr "Редактирование дополнительного Ð¿Ð¾Ð»Ñ %1"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "Редактирование ÑпиÑка пользователей группы %1"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Редактирование ÑпиÑка пользователей перÑональной группы %1"
-#: NOT FOUND IN SOURCE
-msgid "Editing template %1"
-msgstr "Редактирование шаблона %1"
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Ðужно указать либо иÑточник, либо Ð°Ð´Ñ€ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñохранённого запроÑа %1 или указан неверный идентификатор"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "Email"
-#: lib/RT/User_Overlay.pm:235
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "ÐаÑтройка Ñл.почты"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr "Email ДайджеÑÑ‚"
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
-msgstr "Email Ð°Ð´Ñ€ÐµÑ ÑƒÐ¶Ðµ занÑÑ‚"
+msgstr "Email Ð°Ð´Ñ€ÐµÑ ÑƒÐ¶Ðµ иÑпользуетÑÑ"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr "ДоÑтавка почты"
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr "Шаблон Ñл.почты Ð´Ð»Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡ÐµÑких уведомлений в виде \"дайджеÑтов\""
+
+#: share/html/Elements/RT__User/ColumnMap:76
msgid "EmailAddress"
msgstr "EmailAddress"
-#: NOT FOUND IN SOURCE
-msgid "EmailEncoding"
-msgstr "EmailEncoding"
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "ИÑпользуетÑÑ"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "ИÑпользуетÑÑ (ÑнÑтие отметки отключает иÑпользование Ñтого дополнительного полÑ)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "ИÑпользуетÑÑ (ÑнÑтие отметки отключает иÑпользование Ñтой группы)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "ИÑпользуетÑÑ (ÑнÑтие отметки отключает иÑпользование Ñтой очереди)"
-#: NOT FOUND IN SOURCE
-msgid "Enabled Custom Fields"
-msgstr "ИÑпользуемые дополнительные полÑ"
-
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "ИÑпользуемые очереди"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "Ðктивирован ÑÑ‚Ð°Ñ‚ÑƒÑ %1"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
-msgstr "Ðктивирован ÑтатуÑ: %1"
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Зашифровать"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "Шифровать по умолчанию"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Зашифровать/РаÑшифровать"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr "Зашифровать/РаÑшифровать транзакцию #%1 заÑвки #%2"
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "Шифрование не иÑпользуетÑÑ"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "Шифрование активировано"
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Введите неÑколько значений"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr "Введите неÑколько значений (Ñ Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼)"
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Введите объекты или ÑÑылки на объекты. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Введите одно значение"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr "Введите одно значение (Ñ Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼)"
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Введите очереди или ÑÑылки на очереди. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Введите заÑвки или ÑÑылки на заÑвки. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸."
-#: NOT FOUND IN SOURCE
-msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces."
-msgstr "Введите заÑвки или ÑÑылки на заÑвки. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸."
-
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Введите до %1 значений"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr "Введите до %1 значений (Ñ Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼)"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Ошибка"
-#: NOT FOUND IN SOURCE
-msgid "Error adding watcher"
-msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ñ"
-
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Ошибка в параметрах Queue->AddWatcher"
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Queue->DelWatcher"
-msgstr "Ошибка в параметрах Queue->DelWatcher"
-
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Ошибка в параметрах Queue->DeleteWatcher"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Ошибка в параметрах Ticket->AddWatcher"
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Ticket->DelWatcher"
-msgstr "Ошибка в параметрах Ticket->DelWatcher"
-
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Ошибка в параметрах Ticket->DeleteWatcher"
-#: bin/rt-crontool:285
-msgid "Escalate tickets"
-msgstr "РаÑширить заÑвки"
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr "Ошибка к владельцу RT: публичный ключ"
-#: NOT FOUND IN SOURCE
-msgid "Estimate"
-msgstr "РаÑчетно"
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr "Ошибка: ОтÑутÑтвует Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr "Ошибка: неверные данные GnuPG"
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr "Ошибка: нет Ñекретного ключа"
-#: html/Ticket/Elements/ShowBasics:57
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr "Ошибка: нет публичного ключа"
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr "ЭÑкалировать приоритет заÑвки"
+
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
-msgstr "РаÑчетное"
+msgstr "РаÑчётное"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
-msgstr "Ð’Ñе"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr "ПроÑмотреть заÑвки, Ñозданные в очереди в промежутке времени"
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr "ПроÑмотреть заÑвки, решённые в очереди в промежутке времени"
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr "ПроÑмотреть решённые в очереди заÑвки, Ñгруппированные по ответÑтвенному"
-#: bin/rt-crontool:271
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Пример:"
-#: NOT FOUND IN SOURCE
-msgid "ExternalAuthId"
-msgstr "ExternalAuthId"
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr "ИÑтекает"
-#: NOT FOUND IN SOURCE
-msgid "ExternalContactInfoId"
-msgstr "ExternalContactInfoId"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "РаÑширенныйСтатуÑ"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
-msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° запроÑа"
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Ошибка Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº базе данных: %1"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° %1"
+
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Ðевозможно найти пÑевдо-группу 'Привилегированные'"
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Ðевозможно найти пÑевдо-группу 'Ðепривилегированные'"
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr "Ошибка загрузки %1 %2"
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr "Ошибка загрузки %1 %2: %3"
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "Ошибка загрузки Ð¼Ð¾Ð´ÑƒÐ»Ñ %1. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "Ошибка загрузки объекта Ð´Ð»Ñ %1"
-#: lib/RT/Date.pm:442
-msgid "Feb."
-msgstr "Фев."
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "Ошибка загрузки шаблона"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "Ошибка обработки шаблона"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "Фев"
#: NOT FOUND IN SOURCE
msgid "February"
msgstr "Февраль"
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr "ИÑточник значений полÑ:"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr "ИмÑФайла"
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr "Заполнить параметры"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr "РаÑкраÑить в ÑоотвеÑтвии Ñ"
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Заполнить неÑколько текÑтовых полей"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Заполнить неÑколько полей wikitext"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
-msgstr "Заполнить одно текÑтоввое поле"
+msgstr "Заполнить одно текÑтовое поле"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Заполнить одно поле wikitext"
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Введите в Ñтом поле URL."
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Заполнить до %1 текÑтовых полей"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Заполнить до %1 полей wikitext"
-#: NOT FOUND IN SOURCE
-msgid "Fin"
-msgstr "Конец"
-
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Конечный приоритет"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
-msgstr "Конечный приоритет"
+msgstr "КонечныйПриоритет"
-#: NOT FOUND IN SOURCE
-msgid "Find group whose"
-msgstr "Ðайти группы, у которых"
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr "Ðайти вÑех пользователей, чей"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Ðайти группы, у которых"
-#: NOT FOUND IN SOURCE
-msgid "Find new/open tickets"
-msgstr "Ðайти новые/открытые заÑвки"
-
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Ðайти пользователей, у которых"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "ПоиÑк заÑвок"
-#: NOT FOUND IN SOURCE
-msgid "Finish Approval"
-msgstr "Подтвердить"
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "Завершить"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
-msgstr "Ðачало"
-
-#: NOT FOUND IN SOURCE
-msgid "First page"
-msgstr "ÐŸÐµÑ€Ð²Ð°Ñ Ñтраница"
+msgstr "В начало"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
-msgstr "Foo!"
+msgstr "Фу!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Изменить принудительно"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Форматировать"
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "ПереÑлать"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr "ПереÑлать Ñообщение"
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr "ПереÑлать Ñообщение и вернутьÑÑ"
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Forward message"
+msgstr "ПереÑлать Ñообщение"
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr "ПереÑылать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÑ‚ÑŒÐµÐ¹ Ñтороне"
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr "ПереÑылатьСообщение"
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "Ðайдено %quant(%1,ticket)"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Ðайден объект"
-#: NOT FOUND IN SOURCE
-msgid "FreeformContactInfo"
-msgstr "FreeformContactInfo"
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "ПериодичноÑÑ‚ÑŒ"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "Птн"
-#: lib/RT/Date.pm:421
-msgid "Fri."
-msgstr "Птн."
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr "ПÑтница"
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Ð’Ñе заголовки"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr "Общие"
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "ВзÑÑ‚ÑŒ шаблон из файла"
-#: NOT FOUND IN SOURCE
-msgid "Getting the current user from a pgp sig\\n"
-msgstr "Берем текущего Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· pgp подпиÑи\\n"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr "Ðачало работы"
-#: lib/RT/Transaction_Overlay.pm:684
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Ðазначено %1"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Общие"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Общие дополнительные полÑ"
-#: NOT FOUND IN SOURCE
-msgid "Global Scrips"
-msgstr "Общие Ñкриплеты"
-
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Конфигурирование общих дополнительных полей"
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
-msgstr ""
+msgstr "Общий портлет %1 Ñохранен."
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Общий шаблон: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "Ошибка GnuPG: ОбратитеÑÑŒ к ÑиÑтемному админиÑтратору"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ GnuPG не иÑпользуетÑÑ"
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr "Проблемы GnuPG"
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr "Секретный ключ (-и) GnuPG Ð´Ð»Ñ %1"
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr "Публичный ключ (-и) GnuPG Ð´Ð»Ñ %1"
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Отправить"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Отправить!"
-#: NOT FOUND IN SOURCE
-msgid "Good pgp sig from %1\\n"
-msgstr "ÐŸÑ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ pgp подпиÑÑŒ от %1\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "Goto page"
-msgstr "Перейти на Ñтраницу"
-
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Показать заÑвку"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
-msgid "Group"
-msgstr "Групповые"
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr "График"
-#: NOT FOUND IN SOURCE
-msgid "Group %1 %2: %3"
-msgstr "Группа %1 %2: %3"
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr "ÐаÑтройки графика"
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr "ГрафичеÑкие диаграммы недоÑтупны."
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "Группа"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Права группы"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Пользователь уже входит в группу"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Пользователь уже входит в группу: %1"
-#: NOT FOUND IN SOURCE
-msgid "Group could not be created."
-msgstr "Ðевозможно Ñоздать группу."
-
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Ðевозможно Ñоздать группу: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Группа Ñоздана"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "Группа не иÑпользуетÑÑ"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "Группа иÑпользуетÑÑ"
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Ð’ группе нет такого пользователÑ"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Группа не найдена"
-#: NOT FOUND IN SOURCE
-msgid "Group not found.\\n"
-msgstr "Группа не найдена.\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "Group not specified.\\n"
-msgstr "Ðе задана группа.\\n"
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr "Права групп"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Группы"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Группы не могут быть членами входÑщих в них пользователей"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Группы, удовлетворÑющие уÑловию поиÑка"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr "СпиÑок групп, в которых ÑоÑтоит пользователь (Выделите группы Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· них пользователÑ)"
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr "СпиÑок групп, в которых пользователь не ÑоÑтоит (Выделите группы Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² них пользователÑ)"
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Группы, в которых ÑоÑтоит Ñтот пользователь"
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "ЗдравÑтвуйте!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "ЗдравÑтвуйте, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "Помогите нам уÑтановить некоторые полезные ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸Ñ Ð´Ð»Ñ RT"
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "ИÑториÑ"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ %1"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr "В начало"
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr "Интервал Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼Ð°ÑˆÐ½ÐµÐ¹ Ñтраницы"
+
+#: share/html/Elements/RT__User/ColumnMap:86
msgid "HomePhone"
msgstr "Домашний телефон"
-#: html/Elements/Tabs:65
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "В начало"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "ЧаÑ"
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "ЧаÑов"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr "ИмеетÑÑ %quant(%1,concrete mixer)."
-#: NOT FOUND IN SOURCE
-msgid "I have [quant,_1,concrete mixer]."
-msgstr "ИмеетÑÑ [quant,_1,concrete mixer]."
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr "ИСО"
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "ЗаÑвка"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
-msgstr "ЛичноÑÑ‚ÑŒ"
+msgstr "ПерÑональные данные"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "ЕÑли подтверждение отклонено, отклонить заÑвку-первоиÑточник и удалить ожидающие подтверждениÑ"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "ЕÑли не указан Ðвтор, Ñоздать заÑвки от имени Ñтого Ðвтора."
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "ЕÑли очередь не указана, то Ñоздавать заÑвки в Ñтой очереди."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "ЕÑли бы Ñта программа имела уÑтановленный бит setgid, то зловредный пользователь мог бы воÑпользоватьÑÑ Ñтим Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтративных полномочий в RT."
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr "ЕÑли у Ð²Ð°Ñ ÑƒÐ¶Ðµ еÑÑ‚ÑŒ работающий RT Ñервер и база данных, вы можете воÑпользоватьÑÑ Ñтим, чтобы убедитьÑÑ Ð² работоÑпоÑобноÑти Ñервера БД и в правильноÑти ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ c RT. ПоÑле Ñтого оÑтановите и Ñнова запуÑтите Ñервер RT.</p>"
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "ЕÑли вы изменили Порт на котором работает RT, вам необходимо перезапуÑтить Ñервер Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в ÑиÑтему."
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "ПоÑле любых изменений необходимо"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr "ЕÑли вы предпочитаете БД, отÑутÑтвующую в нижеÑледующем ÑпиÑке, то Ñто значит, что RT не может найти <i>драйвер базы данных</i> уÑтановленный локально. Ð’Ñ‹ можете иÑправить Ñто иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ %1 Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ и уÑтановки DBD::MySQL, DBD::Oracle или DBD::Pg."
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "ÐедопуÑтимое значение Ð´Ð»Ñ %1"
-#: NOT FOUND IN SOURCE
-msgid "Image"
-msgstr "Изображение"
-
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "ÐеизменÑемое поле"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/CustomFields/index.html:86
msgid "Include disabled custom fields in listing."
msgstr "Показывать неиÑпользуемые дополнительные полÑ."
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Показывать неиÑпользуемые группы."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Показывать неиÑпользуемые очереди."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Показывать отключенных пользователей."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr "Ð’Ñтавить Ñтраницу"
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
-msgstr "Ðезавершенный запроÑ"
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr "Отдельные ÑообщениÑ"
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr "Проинформируйте владельца RT, что у пользователÑ(ей) еÑÑ‚ÑŒ проблемы Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ ключами"
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr "Проинформируйте пользователÑ, что Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ, на которую он подпиÑалÑÑ, отÑутÑтвует"
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr "Проинформируйте пользователÑ, что поÑланное им Ñообщение Ñодержит неверные данные GnuPG"
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr "Проинформируйте пользователÑ, что у него возникли проблемы Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼ ключом и он не может получить зашифрованное Ñодержимое"
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
-msgstr "Ðезавершенный запроÑ"
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr "Проинформируйте пользователÑ, что его пароль Ñброшен"
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr "Проинформируйте пользователÑ, что мы получили зашифрованный email и у Ð½Ð°Ñ Ð½ÐµÑ‚ Ñекретных ключей Ð´Ð»Ñ Ñ€Ð°Ñшифровки"
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Ðачальный приоритет"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
-msgstr "Ðачальный приоритет"
+msgstr "ÐачальныйПриоритет"
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "Инициализировать Базу Данных"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Ошибка ввода"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "Ввод должен ÑоответÑтвовать %1"
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "УÑтановить RT"
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "Ðеверное значение %1: '%2' не ÑвлÑетÑÑ Ð°Ð´Ñ€ÐµÑом email"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "Ðеверное значение %1: должно быть чиÑлом"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "Ðеверное значение %1: не ÑвлÑетÑÑ Ð°Ð´Ñ€ÐµÑом email"
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "ÐедопуÑтимый тип группы"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "ÐедопуÑтимое право"
-#: NOT FOUND IN SOURCE
-msgid "Invalid Type"
-msgstr "ÐедопуÑтимый тип"
-
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "ÐедопуÑтимые данные"
-#: NOT FOUND IN SOURCE
-msgid "Invalid owner. Defaulting to 'nobody'."
-msgstr "ÐеÑущеÑтвующий ответÑтвенный. ИÑпользуем 'nobody'."
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "Ðеверный объект"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "Ðеверный объект ответÑтвенного"
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr "ÐедопуÑтимый образец: %1"
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´ÑŒ"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "ÐедопуÑтимое право"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr "ÐедопуÑтимое право. Ðевозможно канонизировать право '%1'"
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "ÐедопуÑтимое значение Ð´Ð»Ñ %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "ÐедопуÑтимое значение дополнительного полÑ"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "ÐедопуÑтимое значение ÑтатуÑа"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "Ðе зашифровано"
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Обратите внимание, что непривилегированные пользователи не имеют права запуÑкать Ñту программу."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "ПредполагаетÑÑ, что Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñтой программы вы должны Ñоздать непривилегированную учетную запиÑÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Unix Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼Ð¸ уÑтановками групп и доÑтупом к RT."
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Это требует неÑколько параметров:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Ðаклонный"
-#: NOT FOUND IN SOURCE
-msgid "Items pending my approval"
-msgstr "ЗаÑвки, ожидающие вашего подтверждениÑ"
-
-#: lib/RT/Date.pm:441
-msgid "Jan."
-msgstr "Янв."
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "Янв"
#: NOT FOUND IN SOURCE
msgid "January"
msgstr "Январь"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "ПриÑоединитьÑÑ Ð¸Ð»Ð¸ покинуть Ñту группу"
-#: lib/RT/Date.pm:447
-msgid "Jul."
-msgstr "Июл."
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "Июл"
#: NOT FOUND IN SOURCE
msgid "July"
msgstr "Июль"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Ð’Ñе данные"
-#: lib/RT/Date.pm:446
-msgid "Jun."
-msgstr "Июн."
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "Июн"
#: NOT FOUND IN SOURCE
msgid "June"
msgstr "Июнь"
-#: NOT FOUND IN SOURCE
-msgid "Keyword"
-msgstr "Ключевое Ñлово"
-
-#: NOT FOUND IN SOURCE
-msgid "Lang"
-msgstr "Язык"
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr "ОÑтавьте 'localhost' еÑли не уверены. Или оÑтавьте пуÑтым Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Ñокет."
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Язык"
-#: html/Search/Elements/EditFormat:79
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "Язык."
+
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Большой"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
-msgstr "Конец"
+msgstr "В конец"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "ПоÑледний контакт"
-#: NOT FOUND IN SOURCE
-msgid "Last Contact</a>"
-msgstr "ПоÑледний контакт</a>"
-
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "ПоÑледний контакт"
-#: NOT FOUND IN SOURCE
-msgid "Last Notified"
-msgstr "ПоÑледнее уведомление"
-
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "ПоÑледнее изменение"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "ПоÑледнее изменение:"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "ПоÑледний раз изменено"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdated"
-msgstr "ПоÑледнее изменение"
+msgstr "ПоÑледнееИзменение"
-#: html/Search/Elements/PickBasics:103
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
-msgstr "ПоÑледний раз изменено"
+msgstr "ПоÑледнийРазИзменено"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "ОÑтавьте пуÑтым Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ базы данных"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "ОÑталоÑÑŒ"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr "УÑловные обозначениÑ"
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr "Длина в Ñимволах; Укажите 0 Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ñех Ñообщений полноÑтью, незавиÑимо от их длины"
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Разрешить доÑтуп к RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "ПредоÑтавить пользователю права"
-#: NOT FOUND IN SOURCE
-msgid "Limiting owner to %1 %2"
-msgstr "Ограничиваем ответÑтвенного Ð´Ð»Ñ %1 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Limiting queue to %1 %2"
-msgstr "Ограничиваем очередь Ð´Ð»Ñ %1 %2"
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "Вперед!"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "СÑылка"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "СвÑзь уже ÑущеÑтвует"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Ðевозможно Ñоздать ÑвÑзь"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
-msgid "Link created (%1)"
-msgstr "СвÑзь Ñоздана (%1)"
-
-#: lib/RT/Record.pm:1387
-#. ($TransString)
-msgid "Link deleted (%1)"
-msgstr "СвÑзь удалена (%1)"
-
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "СвÑзь не найдена"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "СвÑзать заÑвку #%1"
-#: NOT FOUND IN SOURCE
-msgid "Link ticket %1"
-msgstr "СвÑзать заÑвку %1"
-
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "СвÑзать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ"
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr "СвÑзано"
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr "СвÑзаноОт"
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "СвÑзаноС"
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr "СвÑзывание. Ðет доÑтупа"
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "СвÑзи"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Загрузить"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
-msgstr "Загрузить Ñохраненный запроÑ:"
+msgstr "Загрузить Ñохранённый запроÑ:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
-msgstr "ЗагружатьСохраненныеЗапроÑÑ‹"
+msgstr "ЗагружатьСохранённыеЗапроÑÑ‹"
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr "Загружено %1 %2"
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "Загружен первоначальный\"%1\" Ñохранённый запроÑ"
-#: html/Admin/Tools/Configuration.html:64
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Загруженные модули perl"
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr "Загружен Ð·Ð°Ð¿Ñ€Ð¾Ñ %1"
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "Загружен Ñохранённый Ð·Ð°Ð¿Ñ€Ð¾Ñ \"%1\""
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr "Региональные наÑтройки"
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "МеÑтонахождение"
-#: NOT FOUND IN SOURCE
-msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
-msgstr "Ðе найден каталог Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ %1 или не доÑтупен на запиÑÑŒ.\\n RT не может продолжить работу."
-
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
-msgstr "ЗарегиÑтрирован как %1"
+msgstr "<b>%1</b>"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr "Завершил работу"
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
-msgstr "Войти"
+msgstr "Войти в ÑиÑтему"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Выйти"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
-msgstr ""
+msgstr "ÐеÑовпадение типа поиÑка"
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr "Почта"
-#: html/Search/Bulk.html:82
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr "ОÑновной тип ÑвÑзей"
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Ðазначить ответÑтвенного"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "УÑтановить ÑтатуÑ"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "УÑтановить конечный Ñрок"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "УÑтановить дату решениÑ"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
-msgstr "УÑтановить дату 'Ðачато'"
+msgstr "УÑтановить дату 'Ðачата'"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
-msgstr "УÑтановить дату 'ÐачинаетÑÑ'"
+msgstr "УÑтановить дату 'ÐачнётÑÑ'"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "УÑтановить дату поÑледнего контакта"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "УÑтановить приоритет"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Ðазначить очередь"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "УÑтановить тему"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Сделать Ñту группу видимой Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Управление дополнительными полÑми и их значениÑми"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Управление группами и членами групп"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Управление ÑвойÑтвами и наÑтройками, которые применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑем очередÑм"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Управление очередÑми и их параметрами"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr "Управление Ñохранёнными графиками"
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Управление пользователÑми и паролÑми"
-#: lib/RT/Date.pm:443
-msgid "Mar."
-msgstr "Мар."
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "Мар"
#: NOT FOUND IN SOURCE
msgid "March"
msgstr "Март"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr "Отметить вÑе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ðº прочтённые"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ"
+
+#: lib/RT/Date.pm:92
msgid "May"
msgstr "Май"
-#: lib/RT/Date.pm:445
-msgid "May."
-msgstr "Май"
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "УчаÑтник"
-#: lib/RT/Transaction_Overlay.pm:731
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "УчаÑтник %1 добавлен"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
-msgstr "УчаÑтник %1 удален"
+msgstr "УчаÑтник %1 удалён"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Пользователь добавлен в группу"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Пользователь добавлен в группу: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
-msgstr "Пользователь удален из группы"
+msgstr "Пользователь удалён из группы"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
-msgstr "Пользователь не удален из группы"
+msgstr "Пользователь не удалён из группы"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "СоÑтоит в"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "MemberOf"
-msgstr "СоÑтоит в"
+msgstr "СоÑтоитВ"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "УчаÑтники"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "УчаÑтие в %1 добавлено"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "УчаÑтие в %1 удалено"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "УчаÑтие в группах"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "УчаÑтие в группах данного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "ЗаÑвки уÑпешно объединены"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Ошибка объединениÑ. Ðевозможно уÑтановить идентификатор заÑвки."
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Ошибка объединениÑ. Ðевозможно уÑтановить ÑтатуÑ"
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Объединить Ñ Ð·Ð°Ñвкой"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "Объединено в %1"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Сообщение"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Тело ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ðµ показано потому, что оно или Ñлишком большое или не ÑвлÑетÑÑ Ñ‚ÐµÐºÑтом."
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "Ð’Ñ‹Ñота Ð¿Ð¾Ð»Ñ Ñ Ñообщением"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "Ширина Ð¿Ð¾Ð»Ñ Ñ Ñообщением"
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Ðевозможно запиÑать Ñообщение"
-#: NOT FOUND IN SOURCE
-msgid "Message recipients"
-msgstr "Получатели ÑообщениÑ"
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Сообщение запиÑано"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтой заÑвке не будет отправлены..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° паролÑ"
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Минут"
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr "ÐеÑовпадающие Ñкобки"
-
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Пропущен первичный ключ?: %1"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Мобильный"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:96
msgid "MobilePhone"
-msgstr "Мобильный телефон"
-
-#: NOT FOUND IN SOURCE
-msgid "Modified"
-msgstr "Изменено"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify"
-msgstr "Изменить"
+msgstr "МобильныйТелефон"
#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr "Изменить ÑпиÑок ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа"
-#: NOT FOUND IN SOURCE
-msgid "Modify Custom Field %1"
-msgstr "Изменить дополнительное поле %1"
-
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Изменение дополнительных полей, которые применÑÑŽÑ‚ÑÑ Ðº %1 Ð´Ð»Ñ Ð²Ñех %2"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Изменить дополнительные полÑ, применÑемые ко вÑем %1"
-#: NOT FOUND IN SOURCE
-msgid "Modify Custom Fields which apply to all queues"
-msgstr "Изменить дополнительные полÑ, применÑемые ко вÑем очередÑм"
-
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Изменить права группы"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Изменить учаÑтников"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Изменить права"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Изменить шаблоны Ñкриплетов Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ очереди"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Изменить Ñкриплеты Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ очереди"
-#: NOT FOUND IN SOURCE
-msgid "Modify System ACLS"
-msgstr "Изменить ÑиÑтемные права доÑтупа"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify Template %1"
-msgstr "Изменить шаблон %1"
-
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Изменить права пользователÑ"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "Изменить дополнительное поле Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1"
-#: NOT FOUND IN SOURCE
-msgid "Modify a CustomField that applies to all queues"
-msgstr "Изменить дополнительное поле, которое применÑетÑÑ ÐºÐ¾ вÑем очередÑм"
-
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "Изменить Ñкриплет Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Изменить Ñкриплет, который дейÑтвует Ð´Ð»Ñ Ð²Ñех очередей"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "Изменить аÑÑоциированные объекты Ð´Ð»Ñ %1"
-#: NOT FOUND IN SOURCE
-msgid "Modify dates for # %1"
-msgstr "Изменить даты заÑвки #%1"
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "ИзменÑÑ‚ÑŒ информационные панели Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ группы"
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "Изменить даты заÑвки #%1"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Изменить даты заÑвки #%1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Изменить общие дополнительные полÑ"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Изменить общие права группы"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Изменить общие права группы."
-#: NOT FOUND IN SOURCE
-msgid "Modify global rights for groups"
-msgstr "Изменить общие права Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify global rights for users"
-msgstr "Изменить общие права Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify global scrips"
-msgstr "Изменить общие Ñкриплеты"
-
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Изменить общие права пользователÑ"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Изменить общие права пользователÑ."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Изменить метаданные группы или удалить ее"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Изменить права группы на дополнительное поле %1"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "Изменить права группы на группу %1"
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "Изменить права группы на очередь %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Изменить ÑпиÑок учаÑтников Ñтой группы"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Изменить ÑобÑтвенную учетную запиÑÑŒ RT"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "Изменить пользователей, отноÑÑщихÑÑ Ðº очереди %1"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "Изменить пользователей, отноÑÑщихÑÑ Ðº заÑвке #%1"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "ИзменÑÑ‚ÑŒ перÑональные информационные панели"
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "Изменить Ñкриплеты Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Изменить Ñкриплеты, которые дейÑтвуют на вÑе очереди"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "ИзменÑÑ‚ÑŒ ÑиÑтемные информационные панели"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "Изменить шаблон %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Изменить шаблоны, которые применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑем очередÑм"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "Изменить информационную панель %1"
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr "Изменить вид по умолчанию Ñтраницы \"Обзор RT\""
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "Изменить группу %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "Изменить запроÑÑ‹ информационной панели %1"
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Изменить очередь наблюдателей"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "Изменить подпиÑки информационной панели %1"
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "Изменить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "Изменить заÑвку # %1"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "Изменить заÑвку # %1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Изменить заÑвки"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Изменить права Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° дополнительное поле %1"
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "Изменить права пользователей группы %1"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "Изменить права Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° очередь %1"
-#: NOT FOUND IN SOURCE
-msgid "Modify watchers for queue '%1'"
-msgstr "Изменить наблюдателей очереди '%1'"
-
#: lib/RT/Queue_Overlay.pm:94
msgid "ModifyACL"
msgstr "ИзменÑтьПраваДоÑтупа"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "ИзменÑтьДополнительноеПоле"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "ИзменÑтьИнформационнуюПанель"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "ИзменÑтьГрупповуюИнформационнуюПанель"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "ИзменÑтьПерÑональнуюИнформационнуюПанель"
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "ИзменÑтьСобÑтвенноеУчаÑтиеВГруппах"
@@ -3503,3144 +3903,3582 @@ msgstr "ИзменÑтьСобÑтвенноеУчаÑтиеВГруппах"
msgid "ModifyQueueWatchers"
msgstr "ИзменÑÑ‚ÑŒÐаблюдателейОчереди"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "ИзменÑтьСкриплеты"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "ИзменÑтьСебÑ"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "ИзменÑтьШаблон"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "ИзменÑтьЗаÑвку"
-#: lib/RT/Date.pm:417
-msgid "Mon."
-msgstr "Пнд."
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "Пнд"
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr "Понедельник"
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ %1"
-#: NOT FOUND IN SOURCE
-msgid "Move"
-msgstr "ПеремеÑтить"
-
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "ПеремеÑтить вниз"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "ПеремеÑтить вверх"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "ÐеÑколько значений"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "Ð’Ñ‹ должны указать ИмÑ"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
-msgstr "%1 ваших заÑвок"
-
-#: NOT FOUND IN SOURCE
-msgid "My Approvals"
-msgstr "Ваши подтверждениÑ"
+msgstr "Ваши заÑвки Ñо ÑтатуÑом: %1"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Ваши ÑегоднÑшние заÑвки"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Ваши подтверждениÑ"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "Ваши информационные панели"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
-msgstr "Ваши Ñохраненные запроÑÑ‹"
+msgstr "Ваши Ñохранённые запроÑÑ‹"
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "ИмÑ"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Ð˜Ð¼Ñ ÑƒÐ¶Ðµ иÑпользуетÑÑ"
-#: NOT FOUND IN SOURCE
-msgid "Name matches"
-msgstr "Совпадение имен"
-
-#: NOT FOUND IN SOURCE
-msgid "Need approval from system administrator"
-msgstr "Ðеобходимо подтверждение ÑиÑтемного админиÑтратора"
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Ðикогда"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
msgid "New"
msgstr "Ðовых"
-#: html/Elements/EditLinks:117
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Ðовые ÑвÑзи"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Ðовый пароль"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Ðовое ожидающее подтверждение"
-#: NOT FOUND IN SOURCE
-msgid "New Query"
-msgstr "Ðовый запроÑ"
-
-#: NOT FOUND IN SOURCE
-msgid "New Relationships"
-msgstr "Ðовые ÑвÑзи"
-
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Ðовый поиÑк"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr "Ðовые и открытые заÑвки %1"
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Ðовое дополнительное поле"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "Ðовые ÑообщениÑ"
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Ðовый пароль"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Отправлено Ñообщение Ñ Ð½Ð¾Ð²Ñ‹Ð¼ паролем"
-#: html/Admin/Elements/QueueTabs:95
-msgid "New queue"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´ÑŒ"
-
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Ðовое напоминание:"
-#: NOT FOUND IN SOURCE
-msgid "New request"
-msgstr "Ðовый запроÑ"
-
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Ðовые права"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Ðовый Ñкриплет"
-#: NOT FOUND IN SOURCE
-msgid "New search"
-msgstr "Ðовый поиÑк"
-
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Ðовый шаблон"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ñвка"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ñвка не ÑущеÑтвует"
-#: html/Admin/Elements/UserTabs:81
-msgid "New user"
-msgstr "Ðовый пользователь"
-
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Ðовые наблюдатели"
-#: NOT FOUND IN SOURCE
-msgid "New window setting"
-msgstr "Ðовые наÑтройки окна"
-
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
-msgstr "Вперед"
-
-#: html/Elements/TicketList:104
-msgid "Next Page"
-msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница"
+msgstr "Вперёд"
-#: NOT FOUND IN SOURCE
-msgid "Next page"
-msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница"
-
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:71
msgid "NickName"
msgstr "ПÑевдоним"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "ПÑевдоним"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
msgid "No"
msgstr "Ðет"
-#: html/Admin/CustomFields/UserRights.html:145
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr "%1 не загружен"
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "КлаÑÑ Ð½Ðµ указан"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Ðет дополнительного полÑ"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Дополнительное поле не указано"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Группа не указана"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Ðет запроÑа"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Очередь не указана"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Пользователь RT не найден. ПожалуйÑта, обратитеÑÑŒ к вашему админиÑтратору RT.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "Ðет Темы"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Ðет шаблона"
-#: NOT FOUND IN SOURCE
-msgid "No Ticket specified. Aborting ticket "
-msgstr "ЗаÑвка не указана. Отмена."
-
-#: NOT FOUND IN SOURCE
-msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
-msgstr "ЗаÑвка не указана. ОтменÑем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ñвки\\n\\n"
-
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Ðет дейÑтвиÑ"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Колонка не указана"
-#: NOT FOUND IN SOURCE
-msgid "No command found\\n"
-msgstr "Команда не найдена\\n"
-
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Ðет комментариев о пользователе"
-#: NOT FOUND IN SOURCE
-msgid "No correspondence attached"
-msgstr "ПуÑтое Ñообщение"
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "Ðет информационных панелей."
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "Ðет опиÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Ðе указана группа"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
-msgstr "Группы, удовлетворÑющие уÑловию поиÑка, не найдены."
+msgstr "Группы, удовлетворÑющие уÑловиÑм поиÑка, не найдены."
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr "Ðет ключа, подходÑщего Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ."
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr "Ðет ключей Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ адреÑа"
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Ðет приÑоединенных Ñообщений"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr "Ðе требует шифрованиÑ"
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Пароль не уÑтановлен"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Ðет прав Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´ÐµÐ¹"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "Ðет прав Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ñвок в очереди '%1'"
-#: lib/RT/User_Overlay.pm:186
-msgid "No permission to create users"
-msgstr "Ðет прав Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹"
-
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Ðет прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтой заÑвки"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
-msgstr "Ðет доÑтупа Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка в глобальных наÑтройках"
+msgstr "Ðет доÑтупа Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка в общих наÑтройках"
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "Ðет прав Ð´Ð»Ñ ÑƒÑтановки наÑтроек"
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Ðет прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра изменений Ñтой заÑвки"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Пользователь не указан"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Пользователи не выбраны."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "Ðет Ñекретного ключа"
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Очереди, удовлетворÑющие уÑловию поиÑка, не найдены."
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr "Право не указано"
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Права не найдены"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Права не выданы."
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr "Ðи один Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ загружен"
-
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Ðет запроÑа Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка."
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Ðет темы"
-#: NOT FOUND IN SOURCE
-msgid "No ticket id specified"
-msgstr "Идентификатор заÑвки не указан"
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr "Ðет такого ключа или ключ не подходит Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑываниÑ"
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr "ЗаÑвки не найдены."
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Тип транзакции не указан"
-#: NOT FOUND IN SOURCE
-msgid "No user or email address specified"
-msgstr "Пользователь или Ð°Ð´Ñ€ÐµÑ email не указан"
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "Ðет пригодных к иÑпользованию ключей."
-#: html/Admin/Users/index.html:55
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Пользователи, удовлетворÑющие уÑловию поиÑка, не найдены."
-#: NOT FOUND IN SOURCE
-msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
-msgstr "Ðе найден пользователь RT. Обработчик CVS отключен. ОбратитеÑÑŒ к админиÑтратору RT.\\n"
-
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Ðикакое значение не отправлено _Set!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Ðикто"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "Ðе задано"
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "ÐеÑущеÑтвующее поле?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr "Ðе уÑтановлено"
-#: NOT FOUND IN SOURCE
-msgid "Not logged in"
-msgstr "Ðе зарегиÑтрирован"
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "Ðе найдено"
-#: html/Elements/Header:96
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
-msgstr "Ðе зарегиÑтрирован."
+msgstr "Ðе вошли в ÑиÑтему."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Ðе уÑтановлено"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Еще не реализовано."
-#: NOT FOUND IN SOURCE
-msgid "Not yet implemented...."
-msgstr "Еще не реализовано..."
-
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "ПримечаниÑ"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Ðевозможно отправить уведомление"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "УведомлÑÑ‚ÑŒ ÐдминиÑтративныеКопии"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "УведомлÑÑ‚ÑŒ ÐдминиÑтративныеКопии как Комментарий"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "УведомлÑÑ‚ÑŒ Копии"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "УведомлÑÑ‚ÑŒ Копии как Комментарий"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "УведомлÑÑ‚ÑŒ других Получателей"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "УведомлÑÑ‚ÑŒ других Получателей как Комментарий"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "УведомлÑÑ‚ÑŒ ОтветÑтвенного"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "УведомлÑÑ‚ÑŒ ОтветÑтвенного как Комментарий"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "УведомлÑÑ‚ÑŒ ОтветÑтвенного об отклонении заÑвки"
-#: etc/initialdata:365
-msgid "Notify Owner of their ticket has been approved by all approvers"
-msgstr "УведомлÑÑ‚ÑŒ ОтветÑтвенного о подтверждении заÑвки вÑеми подтверждающими"
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr "ОповеÑтить владельца о подтверждении его заÑвки и возможноÑти работы над ней"
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr "ОповеÑтить владельца о подтверждении его заÑвки некоторыми или вÑеми утверждающими"
-#: etc/initialdata:353
-msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr "УведомлÑÑ‚ÑŒ ОтветÑтвенного о подтверждении заÑвки одним из подтверждающих"
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
-#: etc/initialdata:334
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "УведомлÑÑ‚ÑŒ ОтветÑтвенных и ÐдминиÑтративныеКопии о новых, ожидающих их подтверждениÑÑ…"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr "ОповеÑтить автора заÑвки о подтверждении её вÑеми утверждающими"
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr "ОповеÑтить автора заÑвки о подтверждении её некоторыми утверждающими"
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "УведомлÑÑ‚ÑŒ ÐвторовЗаÑвки"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "УведомлÑÑ‚ÑŒ ÐвторовЗаÑвки и Копии"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "УведомлÑÑ‚ÑŒ ÐвторовЗаÑвки и Копии как Комментарий"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "УведомлÑÑ‚ÑŒ Ðвторов заÑвки, Копии и ÐдминиÑтративныеКопии"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "УведомлÑÑ‚ÑŒ Ðвторов заÑвки, Копии и ÐдминиÑтративныеКопии как Комментарии"
-#: lib/RT/Date.pm:451
-msgid "Nov."
-msgstr "ÐоÑ."
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "УведомлÑÑ‚ÑŒ о непрочитанных ÑообщениÑÑ…"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "ÐоÑ"
#: NOT FOUND IN SOURCE
msgid "November"
msgstr "ÐоÑбрь"
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr "КоличеÑтво Ñтрок результата поиÑка Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ"
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "ИЛИ"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Ðевозможно Ñоздать объект"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Ðевозможно удалить объект"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Объект Ñоздан"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
-msgstr "Объект удален"
+msgstr "Объект удалён"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Тип объекта %1 не может Ñодержать дополнительные полÑ"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "ÐеÑовпадение типа объекта"
-#: lib/RT/Date.pm:450
-msgid "Oct."
-msgstr "Окт."
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr "СпиÑок объектов пуÑÑ‚"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "Окт"
#: NOT FOUND IN SOURCE
msgid "October"
msgstr "ОктÑбрь"
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Ðвтономно"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Ðвтономное редактирование"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "ÐÐ²Ñ‚Ð¾Ð½Ð¾Ð¼Ð½Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ°"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "Ðа"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr "%1, %2 пиÑал:"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr "При закрытии"
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Ðа комментарий"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "При КорреÑпонденции"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "При Создании"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "При Изменении ОтветÑтвенного"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "При Изменении Приоритета"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "При Изменении Очереди"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr "При Переоткрытии"
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "При Решении"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "При Изменении СтатуÑа"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "При Транзакции"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "ÐžÐ´Ð½Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð°Ñ ÑÐºÑ€Ñ‹Ñ‚Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "ÐžÐ´Ð½Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Показывать Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов, Ñозданных поÑле %1"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Показывать Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов Ñозданных до %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Показывать дополнительные Ð¿Ð¾Ð»Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ длÑ:"
-#: NOT FOUND IN SOURCE
-msgid "Open"
-msgstr "Открытых"
-
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Открытые заÑвки"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "Открыть ÑÑылку"
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Открыть"
-#: NOT FOUND IN SOURCE
-msgid "Open requests"
-msgstr "Открытые запроÑÑ‹"
-
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Открытые заÑвки"
-#: NOT FOUND IN SOURCE
-msgid "Open tickets (from listing) in a new window"
-msgstr "Открыть заÑвки (из ÑпиÑка) в новом окне"
-
-#: NOT FOUND IN SOURCE
-msgid "Open tickets (from listing) in another window"
-msgstr "Открыть заÑвки (из ÑпиÑка) в другом окне"
-
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Открыть заÑвки при корреÑпонденции"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Параметры"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Сортировать по"
-#: NOT FOUND IN SOURCE
-msgid "Ordering and sorting"
-msgstr "ПорÑдок и Ñортировка"
-
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "ОрганизациÑ"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "ЗаÑвка-первоиÑточник: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "ИÑходÑÑ‰Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° о комментарии запиÑана"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "ИÑходÑÑ‰Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° запиÑана"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Со временем поднÑÑ‚ÑŒ приоритет до"
-#: NOT FOUND IN SOURCE
-msgid "Overview"
-msgstr "Обзор"
-
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Ðазначить ÑебÑ"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "БытьОтветÑтвеннымЗаЗаÑвку"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "ОтветÑтвенный"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr "ОтветÑтвенный %1 не имеет доÑтаточных прав Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы быть ответÑтвенным за Ñту заÑвку"
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
msgid "Owner changed from %1 to %2"
msgstr "ОтветÑтвенный изменен Ñ %1 на %2"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "ОтветÑтвенный не может быть назначен"
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "ОтветÑтвенный принудительно изменен Ñ %1 на %2"
-#: NOT FOUND IN SOURCE
-msgid "Owner is"
-msgstr "ОтветÑтвенный"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "ИмÑОтветÑтвенного"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-msgid "Page %1 of %2"
-msgstr "Страница %1 из %2"
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "Страница"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr "Страница 1 из 1"
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "Страница не найдена"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Пейджер"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:101
msgid "PagerPhone"
-msgstr "Телефон пейджера"
+msgstr "ТелефонПейджера"
-#: NOT FOUND IN SOURCE
-msgid "Parent"
-msgstr "Предок"
-
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Предки"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Пароль"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "ПодÑказка к паролю"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Пароль изменен"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Пароль должен ÑоÑтоÑÑ‚ не менее чем из %1 Ñимволов"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Пароль уÑтановлен"
-#: NOT FOUND IN SOURCE
-msgid "Password too short"
-msgstr "Пароль Ñлишком короткий"
-
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Пароль: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Пароль: доÑтуп запрещен"
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr "ИзменениеПаролÑ"
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Пароли не Ñовпадают"
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Пароли не Ñовпадают. Ваш пароль не был изменен"
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "Путь к sendmail'у"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Пользователи"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Выполнить дейÑтвие, указанное пользователем"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Perl"
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
-msgstr "Ðет доÑтупа"
+msgstr "ДоÑтуп запрещён"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
-msgstr "ДоÑтуп запрещен"
+msgstr "ДоÑтуп запрещён"
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
-msgstr "ДоÑтупы запрещены"
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr "ПерÑональные информационные панели"
-#: html/User/Elements/Tabs:56
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
-msgstr "Личные группы"
+msgstr "ПользовательÑкие группы"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
-msgstr "Личные группы"
+msgstr "ПользовательÑкие группы"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
-msgstr "Личные группы:"
+msgstr "ПользовательÑкие группы:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Ðомера телефонов"
-#: NOT FOUND IN SOURCE
-msgid "Placeholder"
-msgstr "Заполнитель"
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "Проверьте, пожалуйÑта, Ð°Ð´Ñ€ÐµÑ Ð¸ попробуйте еще раз."
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "ÐаÑтройки"
-#: html/Admin/Users/MyRT.html:75
+#: share/html/Admin/Users/MyRT.html:124
#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr "ÐаÑтройки %1 Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %2 ."
+msgid "Preferences %1 for user %2."
+msgstr "ÐаÑтройки %1 Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %2."
-#: html/Prefs/MyRT.html:141
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr "ÐаÑтройки %1 Ñохранены."
-#: NOT FOUND IN SOURCE
-msgid "Prefs"
-msgstr "ÐаÑтройки"
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr "ÐаÑтройки Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %2 Ñохранены."
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "ÐаÑтройки Ñохранены."
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr "Предпочитаемый ключ: %1"
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr "Предпочитаемый ключ"
-#: lib/RT/Action/Generic.pm:195
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Подготовка не реализована"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Ðазад"
-#: html/Elements/TicketList:101
-msgid "Previous Page"
-msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница"
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr "ПредыдущаÑ"
-#: NOT FOUND IN SOURCE
-msgid "Previous page"
-msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница"
-
-#: NOT FOUND IN SOURCE
-msgid "Pri"
-msgstr "Приоритет"
-
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "Пользователь %1 не найден."
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr "РаÑпечатать Ñто Ñообщение"
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Приоритет"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Приоритет начинаетÑÑ Ñ"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "КонфиденциальноÑÑ‚ÑŒ"
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "КонфиденциальноÑÑ‚ÑŒ:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "Секретный ключ"
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
-msgstr "Привилегированные"
+msgstr ""
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "СоÑтоÑние привилегий: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Привилегированные пользователи"
-#: NOT FOUND IN SOURCE
-msgid "Projects"
-msgstr "Проекты"
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "ПÑевдогруппы Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ иÑпользованиÑ"
-#: NOT FOUND IN SOURCE
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr "Публичный ключ '0x%1' необходим Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ подпиÑи"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr "Очереди"
+
+#: share/html/Search/Edit.html:64
msgid "Query"
msgstr "ЗапроÑ"
-#: html/Search/Build.html:121
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "ПоÑтроитель запроÑа"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "ЗапроÑ:"
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Очередь"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
msgstr "Очередь %1 не найдена"
-#: NOT FOUND IN SOURCE
-msgid "Queue '%1' not found\\n"
-msgstr "Очередь '%1' не найдена\\n"
-
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Ðаименование очереди"
-#: NOT FOUND IN SOURCE
-msgid "Queue Scrips"
-msgstr "Скриплеты очереди"
-
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Очередь уже ÑущеÑтвует"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Ðевозможно Ñоздать очередь"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Ðевозможно загрузить очередь"
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Очередь Ñоздана"
-#: NOT FOUND IN SOURCE
-msgid "Queue is not specified."
-msgstr "Очередь не указана."
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr "Ðомер очереди"
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Очередь не найдена"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr "Права очереди"
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr "Ключ Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸"
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr "ÐдминиÑтративнаÑКопиÑОчереди"
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "ИмÑОчереди"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr "ÐаблюдательОчереди"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Очереди"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Очереди, которыми вы управлÑете"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
-msgstr "Очереди, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… вы ÑвлÑетеÑÑŒ ÐдминиÑтративной Копией"
+msgstr "Очереди, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… вы ÑвлÑетеÑÑŒ ÐдминиÑтративнойКопией"
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "БыÑтрый поиÑк"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "БыÑтрое Ñоздание заÑвки"
-#: html/Search/Results.html:81
-msgid "RSS"
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT %1"
-msgstr "RT %1"
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr "RSS"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 Ð´Ð»Ñ %2"
-#: NOT FOUND IN SOURCE
-msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
-msgstr "RT %1 от <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
-
-#: NOT FOUND IN SOURCE
-msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
-
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "ÐаÑтройка RT"
-#: NOT FOUND IN SOURCE
-msgid "RT Authentication error."
-msgstr "Ошибка региÑтрации в RT"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Bounce: %1"
-msgstr "ПиÑьмо возвращено RT: %1"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Configuration error"
-msgstr "Ошибка конфигурации RT"
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr "Email админиÑтратора RT"
-#: NOT FOUND IN SOURCE
-msgid "RT Critical error. Message not recorded!"
-msgstr "КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° RT: Сообщение не было Ñохранено!"
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr "ÐаÑтройка RT"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "Ошибка RT"
-#: NOT FOUND IN SOURCE
-msgid "RT Received mail (%1) from itself."
-msgstr "RT получил Ñвое ÑобÑтвенное Ñообщение (%1)"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Recieved mail (%1) from itself."
-msgstr "RT получил Ñвое ÑобÑтвенное Ñообщение (%1)"
-
-#: NOT FOUND IN SOURCE
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
msgid "RT Self Service"
-msgstr "СамообÑлуживание RT"
+msgstr "Ваш RT"
-#: NOT FOUND IN SOURCE
-msgid "RT Self Service / Closed Tickets"
-msgstr "СамообÑлуживание RT / Закрытые заÑвки"
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "Переменные RT"
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "Обзор RT"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr "Обзор RT Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1"
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr "RT может взаимодейÑтвовать Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ пользователÑми по новым заÑвкам или новой корреÑпонденции по заÑвкам. Укажите нам где найти sendmail (или sendmail-ÑовмеÑтимый бинарник, например иÑпользуемый postfix'ом). RT также необходимо знать кого нужно извещать, когда кто-то отÑылает неверную почту. Это не должен быть Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð¹ ÑвÑзи Ñ RT."
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr "RT может добавлÑÑ‚ÑŒ Ñодержимое другого реÑурÑа Ñети, когда отображает Ñто дополнительное поле."
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "RT может преобразовывать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтого дополнительного Ð¿Ð¾Ð»Ñ Ð² гиперÑÑылки на другой ÑервиÑ."
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't authenticate you"
-msgstr "RT не может зарегиÑтрировать ваÑ"
-
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't find requestor via its external database lookup"
-msgstr "RT не Ñмог найти автора заÑвки во внешней базе данных"
-
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't find the queue: %1"
-msgstr "RT не может найти очередь: %1"
-
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ¹ ÑеÑÑии"
-#: NOT FOUND IN SOURCE
-msgid "RT couldn't validate this PGP signature. \\n"
-msgstr "RT не может проверить Ñту подпиÑÑŒ PGP. \\n"
-
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT Ð´Ð»Ñ %1"
-#: NOT FOUND IN SOURCE
-msgid "RT for %1: %2"
-msgstr "RT Ð´Ð»Ñ %1: %2"
-
-#: NOT FOUND IN SOURCE
-msgid "RT has proccessed your commands"
-msgstr "RT выполнил ваши команды"
-
-#: NOT FOUND IN SOURCE
-msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
-msgstr "Ð’Ñе права на RT защищены и охранÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð¼. &copy; 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. ПО раÑпроÑтранÑетÑÑ Ð¿Ð¾Ð´ <a href=\"http://www.gnu.org/copyleft/gpl.html\">Стандартной ОбщеÑтвенной Лицензией GNU ВерÑии 2.</a>"
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
-msgstr "Ð’Ñе права на RT защищены и охранÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð¼. &copy; 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. ПО раÑпроÑтранÑетÑÑ Ð¿Ð¾Ð´ <a href=\"http://www.gnu.org/copyleft/gpl.html\">Стандартной ОбщеÑтвенной Лицензией GNU ВерÑии 2.</a>"
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "RT is &copy; Copyright 1996-2002 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
-msgstr "Ð’Ñе права на RT защищены и охранÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð¼. &copy; 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. ПО раÑпроÑтранÑетÑÑ Ð¿Ð¾Ð´ <a href=\"http://www.gnu.org/copyleft/gpl.html\">Стандартной ОбщеÑтвенной Лицензией GNU ВерÑии 2.</a>"
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr "RT будет ÑоединÑÑ‚ÑŒÑÑ Ñ Ð±Ð°Ð·Ð¾Ð¹ данных под Ñтим пользователем. Он будет Ñоздан Ð´Ð»Ñ Ð²Ð°Ñ."
-#: NOT FOUND IN SOURCE
-msgid "RT thinks this message may be a bounce"
-msgstr "RT Ñчитает, что Ñто Ñообщение может быть возвратом"
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr "RT ÑоздаÑÑ‚ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ \"root\" и уÑтановит Ñто в качеÑтве его паролÑ"
-#: html/Search/Simple.html:58
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "Ð’ÑÑ‘ оÑтальное, что вы введёте, RT будет иÑкать в темах заÑвок."
-#: NOT FOUND IN SOURCE
-msgid "RT will process this message as if it were unsigned.\\n"
-msgstr "RT будет обрабатывать Ñто Ñообщение как неподпиÑанное.\\n"
-
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr "RT заменит <tt>__id__</tt> и <tt>__CustomField__</tt> идентификатором запиÑи и значением дополнительного Ð¿Ð¾Ð»Ñ ÑоответÑтвенно"
-#: NOT FOUND IN SOURCE
-msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
-msgstr "Командный режим RT email требует иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи .PGP. Ð’Ñ‹ либо не подпиÑали Ñообщение, либо ваша подпиÑÑŒ не может быть проверена."
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr "RT будет иÑпользовать Ñту Ñтроку Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾Ð¹ идентификации вашей инÑталлÑции и будет иÑкать её в теме пиÑем Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ°ÐºÐ¾Ð¹ заÑвке Ñто Ñообщение принадлежит. Мы рекомендуем, чтобы вы пропиÑали здеÑÑŒ ваш интернет домен. Ðапример: example.com"
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr "RT поддерживает различные СУБД: <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> и <b>SQLite</b>."
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Полное имÑ"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:66
msgid "RealName"
-msgstr "Полное имÑ"
+msgstr "ПолноеИмÑ"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr "Получатель"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr "ЗапиÑать вÑе изменениÑ"
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "СÑылка на заÑвку заÑвки %1 добавлена"
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "СÑылка на заÑвку заÑвки %1 удалена"
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "СÑылка на %1 добавлена"
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "СÑылка на %1 удалена"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Ðа неё ÑÑылаютÑÑ"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr "ÐаÐеёСÑылаютÑÑ"
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "СÑылаетÑÑ Ð½Ð°"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
msgid "RefersTo"
-msgstr "СÑылаетÑÑ Ð½Ð°"
+msgstr "СÑылаетÑÑÐа"
-#: NOT FOUND IN SOURCE
-msgid "Refine"
-msgstr "ОчиÑтить"
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "ОбновлÑÑ‚ÑŒ"
-#: NOT FOUND IN SOURCE
-msgid "Refine search"
-msgstr "ОчиÑтить запроÑ"
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
-#: html/Elements/Refresh:57
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "ОбновлÑÑ‚ÑŒ Ñту Ñтраницу каждые %1 минут."
-#: NOT FOUND IN SOURCE
-msgid "Relationships"
-msgstr "СвÑзи"
-
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr "Ðапоминание '%1' добавлено"
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr "Ðапоминание '%1' завершено"
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr "Ðапоминание '%1' открыто заново"
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr "ЗаÑвка Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ #%1"
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "ÐапоминаниÑ"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr "ÐÐ°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ñвки #%1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Удалить админиÑтративную копию"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr "Удалить закладку"
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Удалить копию"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
-msgstr "Удалить Ðвтора ЗаÑвки"
+msgstr "Удалить автора заÑвки"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Ответить"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð°"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Отвечать авторам заÑвки"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Отвечать на заÑвки"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "ОтвечатьÐаЗаÑвку"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Отчёты"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Ðвтор заÑвки"
-#: NOT FOUND IN SOURCE
-msgid "Requestor email address"
-msgstr "Email автора заÑвки"
-
-#: NOT FOUND IN SOURCE
-msgid "Requestor(s)"
-msgstr "Ðвтор(-Ñ‹)"
-
-#: NOT FOUND IN SOURCE
-msgid "RequestorAddresses"
-msgstr "ÐÐ´Ñ€ÐµÑ Ðвтора заÑвки"
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr "ГруппаÐвтораЗаÑвки"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Ðвторы заÑвок"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "ЗапроÑÑ‹ должны быть обработаны за"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Ðеобходимый параметр '%1' не указан"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "ОчиÑтить"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr "СброÑить Ñекретную метку аутентификации"
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
-msgstr "СброÑить на предуÑтановленные"
+msgstr "СброÑить на Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Домашний"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Решить"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "Решить заÑвку #%1 (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Решено"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Решено ответÑтвенным"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Решено в промежутке времени"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Решено заÑвок за период, Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¾Ð¹ по ответÑтвенному"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Решено заÑвок, Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¾Ð¹ по ответÑтвенному"
-#: NOT FOUND IN SOURCE
-msgid "Response to requestors"
-msgstr "Ответ авторам заÑвки"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Результаты"
-#: NOT FOUND IN SOURCE
-msgid "Results per page"
-msgstr "Результатов на Ñтранице"
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr "Вернуть к заÑвке"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Повторите пароль"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Откатить"
-#: NOT FOUND IN SOURCE
-msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
-msgstr "Право %1 не найдено Ð´Ð»Ñ %2 %3 в рамках %4 (%5)\\n"
-
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Право делегировано"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Право выдано"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Право загружено"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Право не может быть отозвано"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Право не найдено"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Право не загружено"
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Право отозвано"
-#: html/Admin/Elements/UserTabs:70
-msgid "Rights"
-msgstr "Права"
-
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Ðевозможно выдать права Ð´Ð»Ñ %1"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr "Ðевозможно отозвать права %1"
-
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "ПÑевдо-группы"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr "Строк"
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Строк Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Строк на Ñтранице"
-#: lib/RT/Date.pm:422
-msgid "Sat."
-msgstr "Суб."
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr "SQLite"
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr "SQLite -- СУБД, не Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‰Ð°Ñ Ñервера и каких-либо наÑтроек. Ðвторы RT рекомендуют ее иÑпользование в целÑÑ… тетÑированиÑ, демонÑтрации и разработки, но не рекомендуют иÑпользовать на выÑоконагружегнных боевых Ñерверах."
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "Суб"
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr "Суббота"
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Сохранить"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Сохранить изменениÑ"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Сохранить наÑтройки"
-#: html/Ticket/Elements/PreviewScrips:131
-msgid "Save changes"
-msgstr "Сохранить изменениÑ"
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr "Сохранить как новый"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
-msgstr "Сохраненный Ð·Ð°Ð¿Ñ€Ð¾Ñ %1"
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr "Сохранено %1 %2"
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "Сохранённый Ð·Ð°Ð¿Ñ€Ð¾Ñ %1 не найден"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr "Сохраненные диаграммы"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
msgid "Saved searches"
-msgstr "Сохраненные запроÑÑ‹"
+msgstr "Сохранённые запроÑÑ‹"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Скриплет #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Скриплет Ñоздан"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "ÐŸÐ¾Ð»Ñ Ñкриплетов"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
-msgstr "Скриплет удален"
+msgstr "Скриплет удалён"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Скриплеты"
-#: NOT FOUND IN SOURCE
-msgid "Scrips for %1\\n"
-msgstr "Скриплеты Ð´Ð»Ñ %1\\n"
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr "Скриплеты и получатели"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Скриплеты, которые дейÑтвуют Ð´Ð»Ñ Ð²Ñех очередей"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "ПоиÑк"
-#: NOT FOUND IN SOURCE
-msgid "Search Criteria"
-msgstr "Критерии поиÑка"
-
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Параметры поиÑка"
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr "Ошибка загрузки атрибута запроÑа"
-
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "ПоиÑк подтверждений"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "ПоиÑк заÑвок"
-#: html/Search/Simple.html:55
-msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
msgstr "ПоиÑк заÑвок. Введите номер <strong>идентификатора</strong>, Ð¸Ð¼Ñ <strong>очереди</strong>, Ð¸Ð¼Ñ <strong>ответÑтвенного</strong>, email-Ð°Ð´Ñ€ÐµÑ <strong>автора заÑвки</strong>. Ð’ÑÑ‘ оÑтальное, что вы введёте, RT будет иÑкать в текÑте и вложениÑÑ… заÑвок."
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Параметры поиÑка"
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
-msgstr "Группировать результаты поиÑка по %1"
-
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
-msgstr "Изменение запроÑа: %1"
+msgstr "Сгруппировать результаты поиÑка по %1"
-#: NOT FOUND IN SOURCE
-msgid "Searches can't be associated with that kind of object"
-msgstr "ЗапроÑÑ‹ не могут быть аÑÑоциированы Ñ Ñ‚Ð°ÐºÐ¸Ð¼ типом объекта"
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr "Интервал Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñтраницы результатов поиÑка"
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "ПолнотекÑтовый поиÑк по каждой заÑвке может занÑÑ‚ÑŒ длительное времÑ, но еÑли он необходим вам, вы можете иÑкать любое Ñлово по вÑей иÑтории заÑвки, Ð²Ð²ÐµÐ´Ñ <b>fulltext:<i>Ñлово</i></b>."
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr "Ð¡ÐµÐºÑ€ÐµÑ‚Ð½Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° аутентификации"
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "БезопаÑноÑÑ‚ÑŒ:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Смотрите также:"
-#: NOT FOUND IN SOURCE
-msgid "See also: %1"
-msgstr "Смотрите также: %1"
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
-msgstr "ПроÑмотреть дополнительные полÑ"
+msgstr "ПроÑматривать дополнительные полÑ"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
-msgstr "ПроÑмотреть полноÑтью иÑходÑщую почту и ее получателей"
+msgstr "ПроÑматривать полноÑтью иÑходÑщую почту и ее получателей"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
-msgstr "ПроÑмотреть конфиденциальный комментарий заÑвки"
+msgstr "ПроÑматривать конфиденциальный комментарий заÑвки"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
-msgstr "ПроÑмотреть Ñводную информацию заÑвки"
+msgstr "ПроÑматривать Ñводную информацию заÑвки"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "ПроÑматриватьДополнительныеПолÑ"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "ПроÑматриватьИнформационнуюПанель"
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "ПроÑматриватьГруппу"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "ПроÑматриватьГрупповуюИнформационнуюПанель"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "ПроÑматриватьПерÑональнуюИнформационнуюПанель"
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
-msgstr "ПроÑмативатьОчередь"
+msgstr "ПроÑматриватьОчередь"
-#: NOT FOUND IN SOURCE
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
msgid "Select"
msgstr "Выбрать"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr "Выберите тип базы данных"
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Выберите дополнительное поле"
-#: NOT FOUND IN SOURCE
-msgid "Select a Custom Fields"
-msgstr "Выберите дополнительные полÑ"
-
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Выберите группу"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Выберите очередь"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Выберите очередь Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ новой заÑвки"
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Выберите пользователÑ"
-#: html/Admin/Elements/CustomFieldTabs:90
-msgid "Select custom field"
-msgstr "Выберите дополнительное поле"
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr "Выберите другой Ñзык"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "Выберите дополнительные Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð²Ñех очередей"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Выберите дополнительные Ð¿Ð¾Ð»Ñ Ð²Ñех пользовательÑких групп"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Выберите дополнительные Ð¿Ð¾Ð»Ñ Ð²Ñех пользователей"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Выберите дополнительные Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвок во вÑех очередÑÑ…"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Выберите дополнительные Ð¿Ð¾Ð»Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¹ заÑвок во вÑех очередÑÑ…"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "Выберите информационную панель"
+
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Выберите группу"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Выбрать неÑколько значений"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Выбрать одно значение"
-#: html/Admin/Elements/QueueTabs:92
-msgid "Select queue"
-msgstr "Выберите очередь"
-
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Выберите очереди, которые будут отображатьÑÑ Ð½Ð° Ñтранице \"Обзор RT\""
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Выберите Ñкриплет"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Выберите шаблон"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Выберите до %1 значений"
-#: html/Admin/Elements/UserTabs:78
-msgid "Select user"
-msgstr "Выберите пользователÑ"
-
-#: NOT FOUND IN SOURCE
-msgid "SelectMultiple"
-msgstr "ВыбиратьÐеÑколько"
-
-#: NOT FOUND IN SOURCE
-msgid "SelectSingle"
-msgstr "ВыбиратьОдно"
-
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Выбранные дополнительные полÑ"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr "Выбранный ключ либо не доверÑемый, либо больше не ÑущеÑтвует."
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Выбранные объекты"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Выбор изменён. ПожалуйÑта, Ñохраните ваши изменениÑ"
-#: NOT FOUND IN SOURCE
-msgid "Self Service"
-msgstr "СамообÑлуживание"
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr "Почта уÑпешно отправлена"
-#: etc/initialdata:121
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Отправить Ñообщение вÑем наблюдателÑм"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Отправить Ñообщение вÑем наблюдателÑм как \"комментарий\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Отправить Ñообщение вÑем Ðвторам заÑвки и КопиÑм"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Отправить Ñообщение вÑем Ðвторам заÑвки и КопиÑм"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "ОтправлÑет Ñообщение авторам заÑвки"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "ОтправлÑÑ‚ÑŒ почту Ñвно указанным КопиÑм и СкрытымКопиÑм"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "ОтправлÑÑ‚ÑŒ почту КопиÑм"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "ОтправлÑÑ‚ÑŒ почту КопиÑм как комментарий"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "ОтправлÑÑ‚ÑŒ почту ÐдминиÑтративнымКопиÑм"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "ОтправлÑÑ‚ÑŒ почту ÐдминиÑтративнымКопиÑм как комментарий"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "ОтправлÑÑ‚ÑŒ почту ОтветÑтвенному"
-#: lib/RT/Date.pm:449
-msgid "Sep."
-msgstr "Сен."
-
-#: NOT FOUND IN SOURCE
-msgid "Seperate multiple URLs with spaces"
-msgstr "РазделÑйте неÑколько ÑÑылок пробелами"
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "Сен"
#: NOT FOUND IN SOURCE
msgid "September"
msgstr "СентÑбрь"
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr "ÐаÑтройки"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Показать"
-#: html/Approvals/index.html:52
-msgid "Show Approvals"
-msgstr "Показать подтверждениÑ"
-
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Показать колонки"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Показать результаты"
-#: NOT FOUND IN SOURCE
-msgid "Show advanced search options..."
-msgstr "Показать дополнительные параметры поиÑка..."
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr "Показать ÑвойÑтва заÑвок на %1-м уровне"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Показать подтвержденные запроÑÑ‹"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr "Отображать также"
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Показать оÑновное"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
-msgstr "Показать отклоненные запроÑÑ‹"
+msgstr "Показать отклонённые запроÑÑ‹"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Показать подробноÑти"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr "Показать опиÑÐ°Ð½Ð¸Ñ ÑÑылок"
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr "Показывать первыми наиболее поздние изменениÑ"
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Показать ожидающие запроÑÑ‹"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Показать запроÑÑ‹, ждущие других подтверждений"
-#: NOT FOUND IN SOURCE
-msgid "Show ticket private commentary"
-msgstr "Показать конфиденциальный комментарий заÑвки"
-
-#: NOT FOUND IN SOURCE
-msgid "Show ticket summaries"
-msgstr "Показать Ñводную информацию заÑвки"
-
#: lib/RT/Queue_Overlay.pm:93
msgid "ShowACL"
msgstr "ПоказыватьПраваДоÑтупа"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "ПоказыватьЗакладкуКонфигурации"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "ПоказыватьИÑходÑщуюПочту"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
-msgstr "ПоказыватьСохраненныеЗапроÑÑ‹"
+msgstr "ПоказыватьСохранённыеЗапроÑÑ‹"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "ПоказыватьСкриплеты"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "ПоказыватьШаблон"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "ПоказыватьЗаÑвку"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "ПоказыватьКомментарииЗаÑвки"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr "ЗачиÑтка"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr "Ð‘Ð¾ÐºÐ¾Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr "ПодпиÑать"
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr "ПодпиÑывать по умолчанию"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
-msgstr "ПодпиÑатьÑÑ ÐºÐ°Ðº Ðвтор заÑвки или ÐšÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки или очереди"
+msgstr "ДобавлÑÑ‚ÑŒ ÑÐµÐ±Ñ ÐºÐ°Ðº Ðвтора заÑвки или Копию заÑвки/очереди"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
-msgstr "ПодпиÑатьÑÑ ÐºÐ°Ðº ÐдминиÑтративнаÑÐšÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки или очереди"
+msgstr "ДобавлÑÑ‚ÑŒ ÑÐµÐ±Ñ ÐºÐ°Ðº ÐдминиÑтративнуюКопию заÑвки или очереди"
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "ПодпиÑÑŒ"
-#: NOT FOUND IN SOURCE
-msgid "Signed in as %1"
-msgstr "ЗарегиÑтрирован как %1"
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr "Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ не иÑпользуетÑÑ"
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr "ПодпиÑывание иÑпользуетÑÑ"
-#: html/Elements/Tabs:68
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "ПроÑтой поиÑк"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Одно значение"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr "Ð˜Ð¼Ñ Ñайта"
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Размер"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "ПропуÑтить меню"
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr "ПропуÑкаем октлюченного пользователÑ"
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Маленький"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "Ðекоторые обозреватели могут загружать Ñодержимое только Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ же домена, как у Ñервера RT."
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Сортировка"
-#: NOT FOUND IN SOURCE
-msgid "Sort Order"
-msgstr "Метод Ñортировки"
-
-#: NOT FOUND IN SOURCE
-msgid "Sort key"
-msgstr "Ключ Ð´Ð»Ñ Ñортировки"
-
-#: NOT FOUND IN SOURCE
-msgid "Sort results by"
-msgstr "Сортировать по полю"
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr "Сортировка"
-#: NOT FOUND IN SOURCE
-msgid "SortOrder"
-msgstr "ПорÑдок Ñортировки"
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr "Укажите, когда"
-#: NOT FOUND IN SOURCE
-msgid "Squelched message recipients"
-msgstr "Скрытые получатели ÑообщениÑ"
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr "Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "СтадиÑ"
-#: NOT FOUND IN SOURCE
-msgid "Stalled"
-msgstr "ПриоÑтановленных"
-
-#: NOT FOUND IN SOURCE
-msgid "Start page"
-msgstr "ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñтраница"
-
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
-msgstr "ÐачалÑÑ"
+msgstr "Ðачата"
-#: NOT FOUND IN SOURCE
-msgid "Started date '%1' could not be parsed"
-msgstr "Ðе могу разобрать дату 'ÐачалÑÑ': '%1'"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
-msgstr "ÐачнетÑÑ"
+msgstr "ÐачнётÑÑ"
-#: NOT FOUND IN SOURCE
-msgid "Starts By"
-msgstr "Ðачато"
-
-#: NOT FOUND IN SOURCE
-msgid "Starts date '%1' could not be parsed"
-msgstr "Ðе могу разобрать дату 'Ðачато': '%1'"
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "СоÑтоÑние"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "СтатуÑ"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Изменение ÑтатуÑа"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
msgid "Status changed from %1 to %2"
msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½ Ñ %1 на %2"
-#: NOT FOUND IN SOURCE
-msgid "StatusChange"
-msgstr "ИзменÑтьСтатуÑ"
-
-#: html/Ticket/Elements/Tabs:178
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Переназначать Ñебе"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Переназначить заÑвки Ñебе"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "ПереназначатьЗаÑвкуСебе"
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr "Шаг %1 из %2"
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "ОтветÑтвенный переназначен Ñ %1"
#: NOT FOUND IN SOURCE
msgid "Stolen from %1 "
-msgstr "ОтветÑтвенный переназначен Ñ %1"
+msgstr "ОтветÑтвенный переназначен Ñ %1 "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Стиль"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Тема"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr "Метка темы"
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Тема изменена на %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr "Метка темы изменена на %1"
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Отправить"
-#: NOT FOUND IN SOURCE
-msgid "Submit Query"
-msgstr "Отправить запроÑ"
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "ПодпиÑатьÑÑ"
-#: NOT FOUND IN SOURCE
-msgid "Submit Workflow"
-msgstr "Отправить поÑледовательноÑÑ‚ÑŒ дейÑтвий"
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "ПодпиÑатьÑÑ Ð½Ð° Ñодержимое информационной панели %1"
-#: lib/RT/Group_Overlay.pm:774
-msgid "Succeeded"
-msgstr "УÑпешно"
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "ПодпиÑыватьÑÑ Ð½Ð° Ñодержимое информационных панелей"
-#: NOT FOUND IN SOURCE
-msgid "Summary"
-msgstr "Ð¡Ð²Ð¾Ð´Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "ПодпиÑыватьÑÑÐаИнформационнуюПанель"
-#: NOT FOUND IN SOURCE
-msgid "Summary matches"
-msgstr "Ð’Ñего Ñовпадений"
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "ПодпиÑан на Ñодержимое информационной панели %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr "ПодпиÑка"
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr "Ðевозможно Ñоздать подпиÑку: %1"
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr "Данные уÑпешно раÑшифрованы"
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr "Данные уÑпешно зашифрованы"
-#: lib/RT/Date.pm:423
-msgid "Sun."
-msgstr "Ð’Ñк."
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "Ð’Ñк"
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr "ВоÑкреÑенье"
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "ÐдминиÑтратор"
-#: html/User/Elements/DelegateRights:98
-msgid "System"
-msgstr "СиÑтемные"
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr "ПриоÑтановлена"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
-msgid "System Error"
-msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr "СиÑтемные информационные панели"
-#: NOT FOUND IN SOURCE
-msgid "System Error. Right not granted."
-msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не выдано"
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr "СиÑтемные наÑтройки"
-#: NOT FOUND IN SOURCE
-msgid "System Error. right not granted"
-msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не выдано"
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "СиÑтемные утилиты"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не делегировано."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не выдано."
-#: NOT FOUND IN SOURCE
-msgid "System error. Unable to grant rights."
-msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Ðевозможно выдать права"
-
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "СиÑтемные группы"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr "СиÑтемные права"
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¿Ñевдо-группа Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ иÑпользованиÑ"
-#: lib/RT/CurrentUser.pm:357
-msgid "TEST_STRING"
-msgstr "TEST_STRING"
-
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
-msgstr "Ðазначить ÑÐµÐ±Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенным"
+msgstr "ВзÑÑ‚ÑŒ"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
-msgstr "Ðазначить ÑÐµÐ±Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенным за заÑвки"
+msgstr "Ðазначать ÑÐµÐ±Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенным за заÑвки"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "ÐазначатьСебÑОтветÑтвеннымЗаЗаÑвку"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Ðазначен ответÑтвенным"
-#: NOT FOUND IN SOURCE
-msgid "Task"
-msgstr "Задача"
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr "РаÑÑкажите нам немного о"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Шаблон"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Шаблон #%1"
-#: html/Admin/Elements/EditTemplates:110
-msgid "Template deleted"
-msgstr "Шаблон удален"
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr "Шаблон #%1 удалён"
-#: lib/RT/Scrip_Overlay.pm:176
-msgid "Template is mandatory argument"
-msgstr "Шаблон ÑвлÑетÑÑ Ð¾Ð±Ñзательным аргументом"
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr "Шаблон '%1' не найден"
-#: lib/RT/Scrip_Overlay.pm:180
-msgid "Template not found"
-msgstr "Шаблон не найден"
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr "Шаблон пуÑтой"
-#: NOT FOUND IN SOURCE
-msgid "Template not found\\n"
-msgstr "Шаблон не найден\\n"
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr "Шаблон ÑвлÑетÑÑ Ð¾Ð±Ñзательным аргументом"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Шаблон обработан"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Ошибка обработки шаблона"
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Шаблоны"
-#: NOT FOUND IN SOURCE
-msgid "Templates for %1\\n"
-msgstr "Шаблоны Ð´Ð»Ñ %1\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "Text"
-msgstr "ТекÑÑ‚"
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Это уже текущее значение"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Это поле не может иметь такого значениÑ"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Значение не изменилоÑÑŒ"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Этот пользователь уже имеет Ñто право."
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Этот пользователь уже %1 Ð´Ð»Ñ Ñтой очереди"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
-msgstr "Этот пользователь уже %1 Ð´Ð»Ñ Ñтой заÑвки "
+msgstr "Этот пользователь уже %1 Ð´Ð»Ñ Ñтой заÑвки"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Этот пользователь не %1 Ð´Ð»Ñ Ñтой очереди"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
msgid "That principal is not a %1 for this ticket"
msgstr "Этот пользователь не %1 Ð´Ð»Ñ Ñтой заÑвки"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Эта очередь не ÑущеÑтвует"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Эта заÑвка имеет неразрешенные завиÑимоÑти"
-#: NOT FOUND IN SOURCE
-msgid "That user already has that right"
-msgstr "Пользователь уже имеет Ñто право"
-
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Пользователь уже ответÑтвенен за Ñту заÑвку"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Пользователь не ÑущеÑтвует"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Этот пользователь уже привилегированный"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Этот пользователь уже непривилегированный"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Этот пользователь теперь привилегированный"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Этот пользователь теперь непривилегированный"
-#: NOT FOUND IN SOURCE
-msgid "That user is now unprivilegedileged"
-msgstr "Пользователь теперь непривилегированный"
-
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Этот пользователь не может быть ответÑтвенным за заÑвки в Ñтой очереди"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Это не чиÑловой идентификатор"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "ОÑновное"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "ÐšÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr "Пароль админиÑтратора БД"
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки"
-#: NOT FOUND IN SOURCE
-msgid "The comment has been recorded"
-msgstr "Комментарий запиÑан"
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr "Доменное Ð¸Ð¼Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñервера базы данных (например 'db.example.com')"
-#: bin/rt-crontool:275
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "ÐижеÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° найдет вÑе активные заÑвки в очереди 'ОÑновнаÑ' и уÑтановит им приоритет 99, еÑли в них не было активноÑти более 4-Ñ… чаÑов:"
-#: NOT FOUND IN SOURCE
-msgid "The following commands were not proccessed:\\n\\n"
-msgstr "Эти команды не были выполнены:\\n\\n"
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr "Ключ дезактивирован"
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr "Ключ был отозван"
-#: lib/RT/Record.pm:948
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr "Ключ проÑрочен"
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr "Данный ключ имеет полное доверие"
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr "Данный ключ имеет абÑолютное доверие"
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Ðовое значение уÑтановлено"
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "ОтветÑтвенный за заÑвку"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr "Страница, которую вы запроÑили, не найдена."
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Ðвтор заÑвки"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr "СиÑтеме не удалоÑÑŒ подпиÑать иÑходÑщую почту. Обычно, Ñто означает, что Ñлово-пароль неверно указано или, что GPG-агент не запущен. ПожалуйÑта, уведомите вашего ÑиÑтемного админиÑтратора как можно Ñкорее. Проблемные адреÑа:"
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr "Оформление"
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr "СущеÑтвует неÑколько ключей, подходÑщих Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ."
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr "ЕÑÑ‚ÑŒ новые непрочитанные ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² данной заÑвке."
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr "Данный ключ имеет ограниченное доверие"
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr "Ðет подходÑщего Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð°."
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr "СущеÑтвует один подходÑщий ключ, но уровень Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ Ð½Ðµ уÑтановлен"
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Эти комментарии не показываютÑÑ Ð¾Ð±Ñ‹ÐºÐ½Ð¾Ð²ÐµÐ½Ð½Ð¾Ð¼Ñƒ пользователю"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr "Эти опции конфигурации позволÑÑŽÑ‚ задать некоторые базовые наÑтройки, необходимые Ð´Ð»Ñ ÑƒÑпешного запуÑка RT. Ðам необходимо знать Ð¸Ð¼Ñ Ð²Ð°ÑˆÐµÐ¹ инÑталлÑции RT и Ð¸Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°, где будет жить RT. Вам также необходимо будет уÑтановить пароль Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтративными правами по умолчанию."
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Это дополнительное поле не отноÑитÑÑ Ðº Ñтому объекту"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Это возможноÑÑ‚ÑŒ доÑтупна только Ð´Ð»Ñ ÑиÑтемных админиÑтраторов."
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr "Это может означать, что каталог '%1' не доÑтупен Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи или таблица базы данных отÑутÑтвует или повреждена."
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Это Ñообщение будет отправлено..."
-#: NOT FOUND IN SOURCE
-msgid "This ticket %1 %2 (%3)\\n"
-msgstr "Эта заÑвка %1 %2 (%3)\\n"
-
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Этот инÑтрумент позволÑет пользователю запуÑкать некоторые модули Perl из RT."
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Похоже, что Ñта Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ Ð½Ðµ имеет Ñодержимого"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "%1 заÑвок макÑимального приоритета Ñтого пользователÑ"
-#: NOT FOUND IN SOURCE
-msgid "This user's 25 highest priority tickets"
-msgstr "25 важнейших заÑвок пользователÑ..."
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "Чтв"
-#: lib/RT/Date.pm:420
-msgid "Thu."
-msgstr "Чтв."
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr "Четверг"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
msgid "Ticket"
msgstr "ЗаÑвка"
-#: NOT FOUND IN SOURCE
-msgid "Ticket # %1 %2"
-msgstr "ЗаÑвка # %1 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket # %1 Jumbo update: %2"
-msgstr "ЗаÑвка # %1 Изменение вÑех данных: %2"
-
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "ЗаÑвка #%1 Изменение вÑех данных: %2"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr "График взаимоÑвÑзей заÑвки #%1"
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "ЗаÑвка #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "ЗаÑвка %1"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "ЗаÑвка %1 Ñоздана в очереди '%2'"
-#: NOT FOUND IN SOURCE
-msgid "Ticket %1 loaded\\n"
-msgstr "ЗаÑвка %1 загружена\\n"
-
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "ЗаÑвка %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Дополнительные Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвки"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð°Ñвки # %1 %2"
-#: NOT FOUND IN SOURCE
-msgid "Ticket Id"
-msgstr "ЗаÑвка #"
-
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "ЗаÑвка решена"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr "ПоиÑк заÑвок"
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Транзакции заÑвки"
-#: NOT FOUND IN SOURCE
-msgid "Ticket attachment"
-msgstr "Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ñвки"
-
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Содержимое заÑвки"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Тип данных Ñодержимого заÑвки"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "ЗаÑвка не может быть Ñоздана из-за внутренней ошибки"
-#: NOT FOUND IN SOURCE
-msgid "Ticket created"
-msgstr "ЗаÑвка Ñоздана"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket creation failed"
-msgstr "Ðевозможно Ñоздать заÑвку"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket deleted"
-msgstr "ЗаÑвка удалена"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket id not found"
-msgstr "Идентификатор заÑвки не найден"
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr "Ðевозможно загрузить заÑвку"
-#: NOT FOUND IN SOURCE
-msgid "Ticket killed"
-msgstr "ЗаÑвка уничтожена"
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr "Отображение заÑвки"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Метаданные заÑвки"
-#: NOT FOUND IN SOURCE
-msgid "Ticket not found"
-msgstr "ЗаÑвка не найдена"
-
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ñвки изменен"
-#: NOT FOUND IN SOURCE
-msgid "Ticket watchers"
-msgstr "Ðаблюдатели за заÑвкой"
-
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "Модуль поиÑка TicketSQL"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "ЗаÑвки"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
msgid "Tickets %1 %2"
msgstr "ЗаÑвки %1 %2"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
msgid "Tickets %1 by %2"
msgstr "ЗаÑвки %1 Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %2"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "ЗаÑвки, Ñозданные поÑле"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "ЗаÑвки, Ñозданные до"
-#: NOT FOUND IN SOURCE
-msgid "Tickets from %1"
-msgstr "ЗаÑвки от %1"
-
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "ЗаÑвки, решённые поÑле"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "ЗаÑвки, решённые до"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "От Ñтого Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑÑÑ‚ Ñледующие заÑвки:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "РаÑчётное времÑ"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "ОÑталоÑÑŒ времени"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² работе"
-#: lib/RT/Tickets_Overlay.pm:1891
-msgid "Time left"
-msgstr "ОÑталоÑÑŒ времени"
-
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñтраницы"
-#: lib/RT/Tickets_Overlay.pm:1866
-msgid "Time worked"
-msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² работе"
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "РаÑчётноеВремÑ"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "ОÑталоÑьВремени"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
-msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² работе"
+msgstr "ВремÑВработе"
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr "ЧаÑовой поÑÑ"
-#: html/Search/Elements/EditFormat:74
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Заголовок"
-#: NOT FOUND IN SOURCE
-msgid "To generate a diff of this commit:"
-msgstr "Ð”Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ изменений Ñтой фикÑации:"
-
-#: NOT FOUND IN SOURCE
-msgid "To generate a diff of this commit:\\n"
-msgstr "Ð”Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ изменений Ñтой фикÑации:\\n"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr "ДлÑ"
-#: html/Elements/Footer:62
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Ð”Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа поддержки, обучениÑ, разработки на заказ или Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‰Ð°Ð¹Ñ‚ÐµÑÑŒ %1."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Контакт"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Утилиты"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Ð’Ñего"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "ТранзакциÑ"
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Ð¢Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ %1 удалена"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Ð¢Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ Ñоздана"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Дополнительные Ð¿Ð¾Ð»Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¸"
-#: NOT FOUND IN SOURCE
-msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
-msgstr "ТранзакциÑ->Создать невозможно, так как вы не указали идентификатор заÑвки"
-
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "ТранзакциÑ->Создать невозможно, так как вы не указали тип объекта и идентификатор"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr "ДатаТранзакции"
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "ÐеизменÑемые транзакции"
-#: NOT FOUND IN SOURCE
-msgid "Trying to delete a right: %1"
-msgstr "ПытаемÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ право: %1"
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr "Доверие"
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "Ð’Ñ‚Ñ€"
-#: lib/RT/Date.pm:418
-msgid "Tue."
-msgstr "Ð’Ñ‚Ñ€."
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr "Вторник"
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Тип"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr "Тип изменён Ñ '%1' на '%2'"
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr "Ðевозможно определить тип объекта или идентификатор"
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "Ðевозможно подпиÑатьÑÑ Ð½Ð° Ñодержимое информационной панели %1: Ðет доÑтупа"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Ðе реализовано"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Логин UNIX"
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ UNIX"
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr "ÐеизвеÑтно (уровень Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ Ð½Ðµ уÑтановлен)"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr "ÐеизвеÑтно (данный уровень неизвеÑтен ÑиÑтеме)"
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ° %1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: $key"
-msgstr "ÐеизвеÑтное поле: $key"
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "ÐеизвеÑтное поле: %1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr "Ðеограниченно"
-#: html/Elements/SelectResultsPerPage:58
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Ðе ограничено"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "БезымÑнный запроÑ"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
-msgstr "Ðепривилегированный"
+msgstr ""
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Ðевыбранные дополнительные полÑ"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Ðевыбранные объекты"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr "Секретный ключ очищен"
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Ðет ответÑтвенного"
-#: NOT FOUND IN SOURCE
-msgid "Untitled search"
-msgstr "БезымÑнный запроÑ"
-
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Изменить"
-#: NOT FOUND IN SOURCE
-msgid "Update All"
-msgstr "Изменить вÑе"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ID"
-msgstr "Изменить идентификатор"
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr "Изменить график"
-#: html/Ticket/Update.html:135
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Изменить заÑвку"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Изменить тип"
-#: NOT FOUND IN SOURCE
-msgid "Update all these tickets at once"
-msgstr "Изменить вÑе Ñти заÑвки одновременно"
-
-#: NOT FOUND IN SOURCE
-msgid "Update email"
-msgstr "Изменить e-mail"
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr "Изменить формат и иÑкать"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Изменить неÑколько заÑвок"
-#: NOT FOUND IN SOURCE
-msgid "Update name"
-msgstr "Изменить имÑ"
-
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Изменение не запиÑано."
-#: NOT FOUND IN SOURCE
-msgid "Update selected tickets"
-msgstr "Изменить выбранные заÑвки"
-
-#: NOT FOUND IN SOURCE
-msgid "Update signature"
-msgstr "Изменить подпиÑÑŒ"
-
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Изменить заÑвку"
-#: NOT FOUND IN SOURCE
-msgid "Update ticket # %1"
-msgstr "Изменение заÑвки # %1"
-
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Изменение заÑвки #%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Изменение заÑвки #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Изменение не было ни Ñообщением, ни комментарием."
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr "СтатуÑИзменениÑ"
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Изменена"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "Сохранённый Ð·Ð°Ð¿Ñ€Ð¾Ñ \"%1\" изменён"
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Загрузить"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Загрузить неÑколько файлов"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Загрузить неÑколько изображений"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Загрузить один файл"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Загрузить одно изображение"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Закачать до %1 файлов"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Закачать до %1 изображений"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Загрузить ваши изменениÑ."
-#: html/Admin/index.html:90
-msgid "Use other RT administrative tools"
-msgstr "Другие админиÑтративные утилиты RT"
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr "ИÑпользование: "
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr "ИÑпользовать SSL?"
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr "ИÑпользовать значение по умолчанию (%1)"
#: NOT FOUND IN SOURCE
-msgid "User %1 %2: %3\\n"
-msgstr "Пользователь %1 %2: %3\\n"
+msgid "Use fixed-width font to display plaintext messages"
+msgstr "ИÑпользовать моноширинный шрифт Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑтовых Ñообщений"
#: NOT FOUND IN SOURCE
-msgid "User %1 Password: %2\\n"
-msgstr "Пользователь %1 Пароль: %2\\n"
+msgid "Use monospace font"
+msgstr "ИÑпользовать моноширинный шрифт"
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr "Другие админиÑтративные утилиты RT"
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr "ИÑпользовать ÑиÑтемное значение по умолчанию (%1)"
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
-#: lib/RT/Ticket_Overlay.pm:506
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "Пользователь"
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "Пользователь '%1' не найден."
-#: NOT FOUND IN SOURCE
-msgid "User '%1' not found"
-msgstr "Пользователь '%1' не найден"
-
-#: NOT FOUND IN SOURCE
-msgid "User '%1' not found\\n"
-msgstr "Пользователь '%1' не найден\\n"
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr "Пользователь (Ñоздан - иÑтекает Ñрок)"
-#: etc/initialdata:132 etc/initialdata:206
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Задано пользователем"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Заданные пользователем уÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ дейÑтвиÑ"
-#: NOT FOUND IN SOURCE
-msgid "User ID"
-msgstr "Логин"
-
-#: NOT FOUND IN SOURCE
-msgid "User Id"
-msgstr "Логин"
-
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Права пользователÑ"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "Пользователь запроÑил изменение неизвеÑтного типа Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ %1 Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %2 #%3"
-#: html/Admin/Users/Modify.html:301
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Ðевозможно Ñоздать пользователÑ: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Пользователь Ñоздан"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Группы, определенные пользователем"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ указан Ð°Ð´Ñ€ÐµÑ email"
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Пользователь загружен"
-#: NOT FOUND IN SOURCE
-msgid "User notified"
-msgstr "Пользователю отправлено напоминание"
-
-#: NOT FOUND IN SOURCE
-msgid "User view"
-msgstr "ПользовательÑкие наÑтройки"
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr "Ключи GnuPG пользователÑ"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Группы, заданные пользователем"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr "Формат имени пользователÑ"
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Пользователи"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Пользователи, удовлетворÑющие критериÑм поиÑка"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr "ИÑпользуетÑÑ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ #%1..."
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Проверить запроÑ"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Проверка корректноÑти"
-#: NOT FOUND IN SOURCE
-msgid "ValueOfQueue"
-msgstr "Значение запроÑа"
-
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "ЗначениÑ"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr "Различные отчёты RT"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "ПроÑматривать информационные панели данной группы"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "ПроÑматривать перÑональные информационные панели"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "ПроÑматривать ÑиÑтемные информационные панели"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr "W3CDTF"
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr "выÑота окна WYSIWYG редактора"
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr "WYSIWYG компоновщик ÑообщениÑ"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr "Внимание! Это ÐЕ подпиÑано!"
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "Внимание: вы не указали ваш Ð°Ð´Ñ€ÐµÑ email, поÑтому вы не будете получать Ñодержимое данной информационной панели до тех пор, пока не укажете"
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Ðаблюдать"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "ÐаблюдатьÐдминиÑтративнойКопией"
-#: NOT FOUND IN SOURCE
-msgid "Watcher loaded"
-msgstr "Ðаблюдатель загружен"
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "Ðаблюдатель"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "ГруппаÐаблюдателÑ"
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Ðаблюдатели"
-#: NOT FOUND IN SOURCE
-msgid "WebEncoding"
-msgstr "WebEncoding"
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr "СиÑтема уÑтановки нашла БД и подключилаÑÑŒ как админиÑтратор БД. Ð’Ñ‹ можете нажать \"Изменить базовые наÑтройки\" ниже Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ñтройки RT."
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr "Ðам необходимо знать Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных, которую будет иÑпользовать RT и её меÑтонахождение. Также, нам необходимо знать Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ RT и его пароль. RT может Ñоздать базу данных Ð´Ð»Ñ Ð²Ð°Ñ, поÑтому нам необходимо знать и Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñми админиÑтратора базы данных, а также его пароль. Во Ð²Ñ€ÐµÐ¼Ñ Ñтапа 6 инÑталлÑции мы иÑпользуем Ñту информацию Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ инициализации базы данных RT."
-#: lib/RT/Date.pm:419
-msgid "Wed."
-msgstr "Срд."
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr "Порт веб-Ñервера"
-#: html/Tools/MyDay.html:75
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "Срд"
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "Среда"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr "Еженедельный дайджеÑÑ‚"
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Добро пожаловать в RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr "Сделано ÑегоднÑ"
-#: etc/initialdata:521
-msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
-msgstr "Когда заÑвка подтверждена вÑеми подтверждающими, добавить запиÑÑŒ в оригинальную заÑвку"
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Что такое RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr "Когда RT не может обработать почтовое Ñообщение, куда оно должно быть переадреÑовано?"
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr "Когда заÑвка подтверждена любым из подтверждающих, добавить запиÑÑŒ в оригинальную заÑвку"
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr "Когда RT отÑылает почту, он уÑтанавливает заголовки От: и Ответить: так, чтобы пользователи могли добавить к обÑуждению проÑтым нажатием Ответить в их почтовом клиенте. Он иÑпользует различные адреÑа Ð´Ð»Ñ ÐžÑ‚Ð²ÐµÑ‚Ð¾Ð² и Комментариев. Они могут быть изменены Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ваших очередей. Эти адреÑа понадобÑÑ‚ÑÑ Ð¿Ñ€Ð¸ дальнейшем конфигурировании Ñ Ñ†ÐµÐ»ÑŒÑŽ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ <tt>rt-mailgate</tt>."
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Когда заÑвка Ñоздана"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "При Ñоздании заÑвки Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÑÑ‚ÑŒ ОтветÑтвенного и ÐдминиÑтративнуюКопию заÑвки, ожидающей подтверждениÑ"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Когда что-либо произойдет"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr "Когда вы нажимаете 'Check Database Connectivity'"
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "При закрытии заÑвки"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "Когда заÑвка открыта заново"
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Каждый раз при решении заÑвки"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Каждый раз при изменении ответÑтвенного заÑвки"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Каждый раз при изменении приоритета заÑвки"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Каждый раз при изменении очереди очереди"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Каждый раз при изменении ÑтатуÑа заÑвки"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Каждый раз при Ñрабатывании уÑловиÑ, заданного пользователем"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Каждый раз при добавлении комментариÑ"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Каждый раз при приходе корреÑпонденции"
-#: NOT FOUND IN SOURCE
-msgid "Which are referred to by "
-msgstr "ÐšÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑвÑзана пользователем"
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr "Где раÑположен иÑполнÑемый файл sendmail."
-#: NOT FOUND IN SOURCE
-msgid "Which refer to"
-msgstr "ÐšÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑÑылаетÑÑ Ð½Ð°"
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr "Крах"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Рабочий"
-#: html/Search/Results.html:82
-msgid "Work offline"
-msgstr "Работать автономно"
-
-#: NOT FOUND IN SOURCE
+#: share/html/Elements/RT__User/ColumnMap:91
msgid "WorkPhone"
-msgstr "Рабочий телефон"
+msgstr "РабочийТелефон"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "В работе"
-#: NOT FOUND IN SOURCE
+#: share/html/Widgets/Form/Boolean:77
msgid "Yes"
msgstr "Да"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Ð’Ñ‹ уже ответÑтвенный за Ñту заÑвку"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ зашифровать иÑходÑщее почтовое Ñообщение, но еÑÑ‚ÑŒ некоторые проблемы Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ ключами получателей. Ð’Ñ‹ должны иÑправить Ñитуацию Ñ ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸, отключить отÑылку ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ðº получателÑм по поводу проблемы Ñ ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸ или отключить шифрование."
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ зашифровать иÑходÑщее почтовое Ñообщение, но еÑÑ‚ÑŒ некоторые проблемы Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼ ключом получателÑ. Ð’Ñ‹ должны иÑправить Ñитуацию Ñ ÐºÐ»ÑŽÑ‡ÐµÐ¼, отключить отÑылку ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ðº Ñтому получателю по поводу проблемы Ñ ÐºÐ»ÑŽÑ‡ÐµÐ¼ или отключить шифрование."
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
-msgstr "Ð’Ñ‹ незарегиÑтрированный пользователь"
+msgstr "Вы неавторизованный пользователь"
-#: NOT FOUND IN SOURCE
-msgid "You can access it with the Download button on the right."
-msgstr "Ð’Ñ‹ можете получить Ñто, нажав Ñправа кнопку Загрузить"
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "Ð’Ñ‹ можете <a href=\"%1\">перейти к первому непрочитаному Ñообщению</a> или <a href=\"%2\">перейти к первому непрочитаному Ñообщению и отметить вÑе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ðº прочитанные</a>."
-#: html/Prefs/Search.html:56
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr "Ð’Ñ‹ также можете редактировать предварительно заданный запроÑ"
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Ð’Ñ‹ можете назначать ответÑтвенного только Ð´Ð»Ñ Ñвоих или ничьих заÑвок."
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr "Ð’Ñ‹ можете назначать ÑÐµÐ±Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенным только за заÑвки, которые никому не принадлежат"
-#: NOT FOUND IN SOURCE
-msgid "You don't have permission to view that ticket.\\n"
-msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ права на проÑмотр Ñтой заÑвки.\\n"
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав <b>СуперпользователÑ</b>."
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "Ðайдено %1 заÑвок в очереди %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Вы вышли из RT."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ права Ñоздавать заÑвки в Ñтой очереди."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Ð’Ñ‹ не должны Ñоздавать запроÑÑ‹ в Ñтой очереди."
-#: html/NoAuth/Logout.html:56
-msgid "You're welcome to login again"
-msgstr "Заходите еще"
-
-#: NOT FOUND IN SOURCE
-msgid "Your %1 requests"
-msgstr "Ваши запроÑÑ‹: %1"
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Ð’Ñ‹ должны ввеÑти пароль админиÑтратора."
-#: NOT FOUND IN SOURCE
-msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
-msgstr "ÐдминиÑтратор RT неправильно наÑтроил почтовые алиаÑÑ‹"
-
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ð» %1. Другие Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ продолжать находитьÑÑ Ð² ожидании."
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr "Ð’Ñ‹ будете перенаправлены на Ñтраницу входа в ÑиÑтему. Ð’Ñ‹ Ñможете войти под именем <tt>root</tt> и паролем, который вы уÑтановили ранее."
-#: etc/initialdata:540
-msgid "Your request has been approved."
-msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½."
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr "Ð’Ñ‹ должны выбрать СУБД Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ вам или вашему админиÑтратору БД будет удобнее работать."
-#: NOT FOUND IN SOURCE
-msgid "Your request was rejected"
-msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚ÐºÐ»Ð¾Ð½ÐµÐ½"
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr "Ð’Ñ‹ видите Ñтот Ñкран так как Ñервер RT запущен без наÑтроенной БД. ВероÑтнее вÑего Ñто первый запуÑк RT. ЕÑли вы нажмёте <i>Поехали!</i> ниже, ÑиÑтема уÑтановки RT проведёт Ð’Ð°Ñ Ñ‡ÐµÑ€ÐµÐ· вÑе шаги, необходимые Ð´Ð»Ñ Ð½Ð°Ñтройки Ñервера и БД RT."
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚ÐºÐ»Ð¾Ð½ÐµÐ½."
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "Заходите ещё"
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль неверные"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "ИндекÑ"
-#: NOT FOUND IN SOURCE
-msgid "[no subject]"
-msgstr "[нет темы]"
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[не задано]"
-#: lib/RT/System.pm:87
-msgid "allow creation of saved searches"
-msgstr "разрешить Ñоздание Ñохраненных запроÑов"
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
-#: lib/RT/System.pm:86
-msgid "allow loading of saved searches"
-msgstr "разрешить загрузку Ñохраненных запроÑов"
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "ПоÑле"
-#: NOT FOUND IN SOURCE
-msgid "and is not"
-msgstr "и не ÑвлÑетÑÑ"
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr "разрешить Ñоздание Ñохранённых запроÑов"
-#: NOT FOUND IN SOURCE
-msgid "and not"
-msgstr "и не"
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr "разрешить загрузку Ñохранённых запроÑов"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ %1"
-#: html/Search/Results.html:83
-msgid "chart"
-msgstr "отноÑитÑÑ Ðº"
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr "ÑтолбчатаÑ"
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "До"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "Ñнизу вверх"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr "нажмите Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ/ÑнÑÑ‚Ð¸Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ñех объектов Ñразу"
-#: html/SelfService/Closed.html:49
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "закрыто"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
-msgid "contains"
-msgstr "Ñодержит"
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "content"
-msgstr "Ñодержимое"
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "content-type"
-msgstr "тип данных"
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
-#: NOT FOUND IN SOURCE
-msgid "correspondence (probably) not sent"
-msgstr "корреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ (возможно) не отправлена"
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "ежедневно"
-#: NOT FOUND IN SOURCE
-msgid "correspondence sent"
-msgstr "корреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð°"
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "ежедневно в %1"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "дней"
-#: NOT FOUND IN SOURCE
-msgid "delete"
-msgstr "удалить"
-
#: lib/RT/Queue_Overlay.pm:87
msgid "deleted"
msgstr "удалена"
-#: html/Search/Elements/PickBasics:61
-msgid "does not match"
-msgstr "не Ñовпадает"
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
-msgid "doesn't contain"
-msgstr "не Ñодержит"
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "не Ñовпадает"
-#: NOT FOUND IN SOURCE
-msgid "email address"
-msgstr "Ð°Ð´Ñ€ÐµÑ email"
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "выгрузить"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "равнÑетÑÑ"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "ошибка: невозможно перемеÑтить вниз"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "ошибка: невозможно перемеÑтить влево"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "ошибка: невозможно перемеÑтить вверх"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "ошибка: нет данных Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "ошибка: нет данных Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "ошибка: нет данных Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ"
-#: NOT FOUND IN SOURCE
-msgid "false"
-msgstr "ложь"
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr "каждые"
-#: NOT FOUND IN SOURCE
-msgid "filename"
-msgstr "Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr "плагин уÑпешно выполнен"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "полное"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "больше чем"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "группа '%1'"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr "Ñгруппировано по %1"
-
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "чаÑов"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal (перÑональный календарь)"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "идентификатор"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "ÑвлÑетÑÑ"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "не ÑвлÑетÑÑ"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "ключ не иÑпользуетÑÑ"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "ключ проÑрочен"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "ключ отозван"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "Ñлева направо"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "меньше чем"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "ограниченное"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "Ñовпадает"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ð°"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "мин"
-#: NOT FOUND IN SOURCE
+#: share/html/Tools/MyDay.html:62
msgid "minutes"
msgstr "минут"
-#: NOT FOUND IN SOURCE
-msgid "modifications\\n\\n"
-msgstr "изменениÑ\\n\\n"
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "ежемеÑÑчно"
-#: lib/RT/Date.pm:354
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "ежемеÑÑчно (по днÑм: %1) в %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "меÑÑцев"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "никогда"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "новаÑ"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "нет"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "нет имени"
-#: html/Admin/Elements/EditScrips:64
-msgid "no value"
-msgstr "нет значениÑ"
-
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "нет"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "не равно"
-#: NOT FOUND IN SOURCE
-msgid "notlike"
-msgstr "неравно"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "ничего"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr "объекты были уÑпешно удалены"
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Ðа"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "открыта"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "открыть/закрыть"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "другое..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
-msgstr "Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° '%1' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ '%2'"
+msgstr "пользовательÑÐºÐ°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° '%1' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ '%2'"
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr "круговаÑ"
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr "плагин вернул пуÑтой ÑпиÑок"
-#: lib/RT/Group_Overlay.pm:227
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "очередь %1 %2"
@@ -6653,85 +7491,113 @@ msgstr "отклонена"
msgid "resolved"
msgstr "решена"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "Ñправа налево"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "Ñек"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr "Ñм. ÑпиÑок объектов ниже"
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "показывать закладку КонфигурациÑ"
-#: html/Search/Results.html:80
-msgid "spreadsheet"
-msgstr "ÑÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°"
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
#: lib/RT/Queue_Overlay.pm:84
msgid "stalled"
msgstr "приоÑтановлена"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr "Ñтиль: %1"
-
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr "Ñтроки Ñводной информации"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "ÑиÑтема %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "ÑиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "вызывающий компонент не указал причину"
-#: NOT FOUND IN SOURCE
-msgid "ticket #%1"
-msgstr "заÑвка #%1"
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "адреÑа по умолчанию, которые будут показаны в заголовках От: и Ответить: пиÑьма Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸ÐµÐ¼."
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "адреÑа по умолчанию, которые будут показаны в заголовках От: и Ответить: пиÑьма Ñ ÐºÐ¾Ñ€Ñ€ÐµÑпонденцией"
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "заÑвка #%1 %2"
-#: NOT FOUND IN SOURCE
-msgid "till"
-msgstr "пока"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "Ñверху вниз"
-#: NOT FOUND IN SOURCE
-msgid "true"
-msgstr "иÑтина"
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "абÑолютное"
-#: lib/RT/Group_Overlay.pm:236
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "группа без опиÑаниÑ: %1"
-#: NOT FOUND IN SOURCE
-msgid "undescripbed group %1"
-msgstr "группа без опиÑаниÑ: %1"
-
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "пользователь %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "подробно"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr "еженедельно"
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "еженедельно (по %1) в %2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "недель"
-#: NOT FOUND IN SOURCE
-msgid "with template %1"
-msgstr "Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼ %1"
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "на каком порту ваш веб-Ñервер будет работать, напр. 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°Ð¼Ð¸"
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "лет"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "да"
+
diff --git a/rt/lib/RT/I18N/sv.po b/rt/lib/RT/I18N/sv.po
index 86cb470..7473f8b 100644
--- a/rt/lib/RT/I18N/sv.po
+++ b/rt/lib/RT/I18N/sv.po
@@ -1,645 +1,815 @@
msgid ""
msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2007-03-16 12:57+0100\n"
-"Last-Translator: Heidi Senderovitz\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-08-23 21:06+0000\n"
+"Last-Translator: Simon Österberg <simon.osterberg@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#. ($self->{CurrentSearch}{Object}->Description)
-#: html/Widgets/SavedSearch:70
+#: NOT FOUND IN SOURCE
msgid " %1 deleted."
msgstr " %1 raderad."
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-#: html/Widgets/SavedSearch:47
+#: NOT FOUND IN SOURCE
msgid " %1 renamed to %2."
msgstr " %1 omdöpt till %2."
-#. ($args->{Description})
-#: html/Widgets/SavedSearch:60
+#: NOT FOUND IN SOURCE
msgid " %1 saved."
msgstr " %1 sparad."
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (ingen publik nyckel!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (ej betrodd!)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
#. ($TicketObj->Id, $TicketObj->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
#. ($Ticket->id, $Ticket->Subject)
-#: html/Approvals/Elements/Approve:48
-#: html/Approvals/Elements/ShowDependency:71
-#: html/SelfService/Display.html:46
-#: html/Ticket/Display.html:47
-#: html/Ticket/Display.html:51
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "#%1: %2"
msgstr "#%1: %2"
-#: html/Elements/ShowSearch:104
+#: NOT FOUND IN SOURCE
msgid "$1"
msgstr "$1"
-#. ($label)
-#: lib/RT/Record.pm:940
+#: NOT FOUND IN SOURCE
msgid "$prefix %1"
msgstr "$prefix %1"
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
-#: lib/RT/URI/fsck_com_rt.pm:256
msgid "%1 #%2"
msgstr "%1 #%2"
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
-#: lib/RT/Date.pm:365
msgid "%1 %2"
msgstr "%1 %2"
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
-#: lib/RT/Date.pm:401
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1, %3 %2 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%1, %3 %2 %7 kl. %4.%5.%6"
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
-#: lib/RT/Record.pm:1685
-#: lib/RT/Transaction_Overlay.pm:647
-#: lib/RT/Transaction_Overlay.pm:690
msgid "%1 %2 added"
msgstr "%1 %2 tillagt"
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
-#: lib/RT/Date.pm:362
msgid "%1 %2 ago"
msgstr "%1 %2 sedan"
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
-#: lib/RT/Record.pm:1692
-#: lib/RT/Transaction_Overlay.pm:654
msgid "%1 %2 changed to %3"
msgstr "%1 %2 ändrat till %3"
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
-#: lib/RT/Record.pm:1689
-#: lib/RT/Transaction_Overlay.pm:650
-#: lib/RT/Transaction_Overlay.pm:696
msgid "%1 %2 deleted"
msgstr "%1 %2 raderad"
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 raderad."
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 omdöpt till %3."
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 sparad."
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
-#: html/Admin/Elements/EditScrips:65
-#: html/Admin/Elements/ListGlobalScrips:63
-#: html/Ticket/Elements/PreviewScrips:103
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 med mall %3"
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
-#: html/Ticket/Elements/ShowAttachments:72
msgid "%1 (%2) by %3"
msgstr "%1 (%2) av %3"
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
-#. (loc($DefaultStatus))
-#: html/SelfService/Update.html:60
-#: html/Ticket/Elements/EditBasics:108
-#: html/Ticket/Update.html:61
-#: html/Ticket/Update.html:63
-#: html/Tools/MyDay.html:66
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
-msgstr "%1 (Oändrad)"
-
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
-#: bin/rt-crontool:237
-#: bin/rt-crontool:244
-#: bin/rt-crontool:250
+msgstr "%1 (Ej ändrad)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - En parameter att skicka till %2"
+#: bin/rt-crontool:365
#. ("--verbose")
-#: bin/rt-crontool:262
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - Skicka statusuppdateringar till STDOUT"
-#. ("--template-id")
-#: bin/rt-crontool:253
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
-msgstr "%1 - Specificera ID på mall du vill använda"
+msgstr "%1 - Ange ID för den mall du vill använda"
-#. ("--transaction")
-#: bin/rt-crontool:256
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
msgstr "%1 - Specificera om du vill använda 'första' eller 'sista' transaktionen"
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - Ange om du vill använda första ('first'), sista ('last') eller alla ('all') transaktioner"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
#. ("--action")
-#: bin/rt-crontool:247
msgid "%1 - Specify the action module you want to use"
-msgstr "%1 - Specificera den handling du vill använda"
+msgstr "%1 - Ange den åtgärdsmodul du vill använda"
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - Ange en kommaseparerad följd av transaktionstyper du vill använda"
+
+#: bin/rt-crontool:342
#. ("--condition")
-#: bin/rt-crontool:241
msgid "%1 - Specify the condition module you want to use"
-msgstr "%1 - Specificera den villkorsmodul du vill använda"
+msgstr "%1 - Ange den villkorsmodul du vill använda"
+#: bin/rt-crontool:335
#. ("--search")
-#: bin/rt-crontool:234
msgid "%1 - Specify the search module you want to use"
-msgstr "%1 - Specificera den sökmodul du vill använda"
+msgstr "%1 - Ange den sökmodul du vill använda"
-#. ("--transaction-type")
-#: bin/rt-crontool:259
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify the type of a transaction you want to use"
msgstr "%1 - Specificera den typ av transaktion du vill använda"
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
-#: html/Elements/Footer:56
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT %2 Copyright 1996-%3 %4."
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
-#: lib/RT/ScripAction_Overlay.pm:150
msgid "%1 ScripAction loaded"
msgstr "%1 ScripAktion inläst"
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
-#: lib/RT/Record.pm:1722
msgid "%1 added as a value for %2"
msgstr "%1 tillagt som värde för %2"
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
-#: lib/RT/Link_Overlay.pm:144
-#: lib/RT/Link_Overlay.pm:151
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 tycks vara ett lokalt objekt men går inte att hitta i databasen"
-#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
-#: html/Ticket/Elements/ShowDates:73
-#: lib/RT/Transaction_Overlay.pm:531
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 av %2"
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
-#: lib/RT/Transaction_Overlay.pm:788
-#: lib/RT/Transaction_Overlay.pm:797
-#: lib/RT/Transaction_Overlay.pm:800
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1 ändrat från %2 till %3"
-#. ($Description)
-#: html/Search/Build.html:213
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "%1 kopiera"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1 kunde inte sättas som %2."
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
-#: lib/RT/Ticket_Overlay.pm:2787
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1 kunde inte markeras som löst. RT:s databas kan vara oförenlig."
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
-#: lib/RT/Transaction_Overlay.pm:571
msgid "%1 created"
msgstr "%1 skapad"
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
-#: lib/RT/Transaction_Overlay.pm:576
msgid "%1 deleted"
msgstr "%1 raderad"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 existerar inte."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
-msgstr "%1 högsta prioriterade ärenden som tillhör mig"
+msgstr "%1 högst prioriterade ärenden som tillhör mig"
+#: bin/rt-crontool:330
#. ($0)
-#: bin/rt-crontool:229
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1 är ett verktyg som reagerar på ärenden från ett externt planeringsverktyg, så som cron."
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
-#: lib/RT/Queue_Overlay.pm:863
msgid "%1 is no longer a %2 for this queue."
msgstr "%1 är inte längre en %2 för denna kö."
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 är inte längre %2 för detta ärende."
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 är inte längre ett värde för extrafältet %2"
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
-#: html/Ticket/Elements/ShowTime:47
-#: html/Ticket/Elements/ShowTime:49
msgid "%1 min"
-msgstr "%1 min."
+msgstr "%1 min"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "%1 nyaste ärenden som inte tillhör någon"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 objekt"
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-#: html/User/Elements/DelegateRights:97
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 rättigheter"
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 uppdaterad"
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
-#: lib/RT/Action/ResolveMembers.pm:63
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1 kommer att lösa alla medlemmar av ett löst gruppärende."
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1:s %2 objekt"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1:s %2:s %3 objekt"
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
#. ($object->Name)
-#: html/Search/Elements/SearchPrivacy:52
-#: html/Search/Elements/SelectSearchObject:55
-#: html/Search/Elements/SelectSearchesForObjects:57
msgid "%1's saved searches"
msgstr "%1:s sparade sökningar"
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
-#: lib/RT/Transaction_Overlay.pm:481
msgid "%1: no attachment specified"
msgstr "%1: inga bifogade filer angivna"
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
-#: html/Ticket/Elements/ShowTransactionAttachments:78
msgid "%1b"
msgstr "%1b"
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
-#: html/Ticket/Elements/ShowTransactionAttachments:75
msgid "%1k"
msgstr "%1k"
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
-#: html/Ticket/Elements/ShowTime:49
msgid "%quant(%1,hour)"
msgstr "%quant(%1,timme)"
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
-#: lib/RT/Ticket_Overlay.pm:1142
msgid "'%1' is an invalid value for status"
msgstr "'%1' är ogiltigt statusvärde"
-#: html/Admin/Elements/EditCustomFieldValues:50
-#: html/Admin/Elements/EditQueueWatchers:50
-#: html/Admin/Elements/EditScrips:56
-#: html/Admin/Elements/EditTemplates:57
-#: html/Admin/Groups/Members.html:73
-#: html/Elements/EditLinks:54
-#: html/Ticket/Elements/EditPeople:67
-#: html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Markera box för radering)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Markera boxar för bortväljande av meddelande till registrerade mottagare)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "(Markera boxar för tillval av meddelande till registrerade mottagare)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Mata in ärende-ID:n eller URL, separerade med mellanrum)"
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
-#: html/Admin/Queues/Modify.html:75
-#: html/Admin/Queues/Modify.html:81
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Lämnas det tomt kommer default att vara %1)"
-#: html/Admin/Elements/EditCustomFields:74
-#: html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Inga extrafält)"
-#: html/Admin/Groups/Members.html:71
-#: html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Inga medlemmar)"
-#: html/Admin/Elements/EditScrips:53
-#: html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Inga scrips)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Inga mallar)"
-#: html/Admin/Elements/PickCustomFields:47
-#: html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Inga)"
-#: html/Ticket/Update.html:90
+#: NOT FOUND IN SOURCE
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Skickar en hemlig kopia av denna uppdatering till en kommaseparerad lista med e-postadresser. Ändrar <strong>inte</strong> på vem som får framtida uppdateringar.)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Skickar en kopia av denna uppdatering till en kommaseparerad lista med administrativa e-postadresser. Dessa <strong>kommer</strong> att få framtida uppdateringar.)"
-#: html/Ticket/Update.html:86
+#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Skickar en kopia av denna uppdatering till en kommaseparerad lista med e-postadresser. Ändrar <strong>inte</strong> på vem som får framtida uppdateringar.)"
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Skickar en kopia av denna uppdatering till en kommaseparerad lista med e-postadresser. Dessa <strong>kommer</strong> att få framtida uppdateringar.)"
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Använd dessa fält när du väljer 'Användardefinierat' för villkor eller handling)"
-#: html/Ticket/Elements/EditWatchers:60
-#: html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr "(Kommer inte att skickas som e-post)"
-#: html/Admin/Groups/index.html:57
-#: html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(tom)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(inga namn registrerade)"
-#: html/Admin/Elements/SelectRights:72
-#: html/Elements/EditCustomFieldSelect:69
-#: html/Elements/SelectCustomFieldValue:51
-#: html/Elements/ShowCustomFields:54
-#: html/Search/Chart:56
-#: html/Search/Elements/Chart:76
-#: lib/RT/Transaction_Overlay.pm:591
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(ingen publik nyckel!)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(inget värde)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(inga värden)"
-#: html/Elements/EditLinks:132
-#: html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(endast ett ärende)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(inväntar godkännande)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(inväntar annan Samling)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(obligatorisk)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(ej namngiven)"
-#: html/Ticket/Elements/Reminders:133
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(ej betrodd!)"
+
+#: NOT FOUND IN SOURCE
msgid "(yyyy/mm/dd)"
msgstr "(yyyy/mm/dd)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr "-"
-#: bin/rt-crontool:95
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "--transaction argument could be only 'first' or 'last'"
msgstr "--transaktionsparameter kan bara vara 'först' eller 'sist'"
-#: html/Ticket/Elements/ShowBasics:53
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "argumentet till --transaction kan endast vara 'first', 'last' eller 'all'"
+
+#: NOT FOUND IN SOURCE
msgid "<% $Ticket->Status%>"
msgstr "<% $Ärende->Status%>"
-#: html/Elements/SelectTicketTypes:48
+#: NOT FOUND IN SOURCE
msgid "<% $_ %>"
msgstr "<% $_ %>"
-#: html/Search/Elements/SelectLinks:48
+#: NOT FOUND IN SOURCE
msgid "<%$_%>"
msgstr "<%$_%>"
-#: html/Search/Elements/DisplayOptions:73
+#: NOT FOUND IN SOURCE
msgid "<%$field%>"
msgstr "<%$fält%>"
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-#: html/Elements/CreateTicket:47
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr "<input type=\"submit\" class=\"button\" value=\"Nytt ärende i\" />&nbsp;%1"
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-#: docs/design_docs/string-extraction-guide.txt:54
-#: lib/RT/StyleGuide.pod:787
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Nytt ärende i\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>Alla iCal-feeds innehåller en hemlig nyckel för att verifiera din identitet. Om URLen för en av dina iCal-feeds har råkat bli publik kan du få en ny nyckel, <b>men det innebär att alla dina befintliga iCal-feeds slutar fungera</b>.</p>"
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "En tom mall"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Det har inte satts något lösenord, så användare kan inte logga in."
-#: lib/RT/ACE_Overlay.pm:174
-#: lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE ej funnen"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE kan endast skapas och raderas."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "OCH"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Om mig"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
-msgstr "Tillgångskontroll"
+msgstr "Behörigheter"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
-msgstr "Handling"
+msgstr "Åtgärd"
-#. ($args{'ScripAction'})
-#: lib/RT/Scrip_Overlay.pm:172
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "Handling %1 ej funnen"
-#: bin/rt-crontool:171
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "Åtgärd '%1' kunde inte hittas"
+
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
-msgstr "Handling genomförd.\\n"
+msgstr "Åtgärd genomförd.\\n"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
-msgstr "Handling är obligatoriskt argument"
+msgstr "Åtgärd är obligatoriskt argument"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
-msgstr "Handling förberedd..."
+msgstr "Åtgärd förberedd..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Lägg till"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Lägg till Admin.kopia"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "Lägg till bokmärke"
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Lägg till kopia"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Lägg till kolumner"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Lägg till kriterium"
-#: html/Ticket/Create.html:147
-#: html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Lägg till fler filer"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "Lägg till rekvirent"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "Lägg till värde"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
-msgstr "Lägg till ett scrip som kommer att fungera för alla köer"
+msgstr "Lägg till ett scrip som kommer att gälla för alla köer"
-#: html/Search/Build.html:109
-#: html/Search/Build.html:94
+#: NOT FOUND IN SOURCE
msgid "Add and Search"
msgstr "Lägg till och sök"
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Lägg till kommentarer eller svar på utvalda ärenden"
-#: html/Admin/Groups/Members.html:63
-#: html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Lägg till medlemmar"
-#: html/Admin/Queues/People.html:87
-#: html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Lägg till nya observatörer"
-#: html/Search/Build.html:85
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Add these terms to your search"
msgstr "Lägg till dessa termer till din sökning"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "Lägg till värden"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Lägg till, radera och modifiera extrafältvärden för objekt"
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:763
msgid "Added principal as a %1 for this queue"
msgstr "Tillagd principal som en %1 för denna kö"
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1455
msgid "Added principal as a %1 for this ticket"
msgstr "Tillagd principal som en %1 för detta ärende"
-#: html/Admin/Users/Modify.html:146
-#: html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "Adress"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adress1"
-#: html/Admin/Users/Modify.html:151
-#: html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adress2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Admin.kopia"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Admin.kommentar"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Admin.korrespondens"
-#: html/Admin/Queues/index.html:46
-#: html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Admin.köer"
-#: html/Admin/Global/index.html:47
-#: html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Admin/Global konfiguration"
-#: etc/initialdata:56
-#: html/Ticket/Elements/ShowPeople:60
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr "Admin.kopia"
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr "AdminExtrafält"
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr "AdminGrupp"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr "AdminGruppMedlemskap"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr "AdminEgnaPersonligaGrupper"
@@ -647,218 +817,266 @@ msgstr "AdminEgnaPersonligaGrupper"
msgid "AdminQueue"
msgstr "AdminKö"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr "AdminAnvändare"
-#: html/Admin/Queues/People.html:69
-#: html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Administrativ kopia"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "Administrativt lösenord"
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "Avancerad"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Efter"
-
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Aggregator"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Alla godkännanden har accepterats"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Alla köer"
-#: html/Search/Elements/EditQuery:56
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "Redan krypterad"
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "Och/eller"
-#: html/Admin/CustomFields/Modify.html:73
-#: html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
msgstr "Gäller för"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Utför"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Utför dina ändringar"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Godkännande"
-#. ($ticket->id, $msg)
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#: html/Approvals/Display.html:65
-#: html/Approvals/Elements/ShowDependency:63
-#: html/Approvals/index.html:86
msgid "Approval #%1: %2"
msgstr "Godkännande #%1: %2"
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
-#: html/Approvals/index.html:75
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Godkännande #%1: Anteckningar ej registrerade på grund av systemfel"
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
-#: html/Approvals/index.html:73
msgid "Approval #%1: Notes recorded"
msgstr "Godkännande #%1: Anteckningar har registrerats"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Godkännande har accepterats"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Godkännande avvisat"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Godkänn"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Godkännares anteckningar: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "apr"
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Apr."
-#: html/Search/Elements/DisplayOptions:81
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "april"
+
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr "Stigande"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Stigande"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Lägg till och radera extrafält"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "LäggtillExtraFält"
-#: html/Search/Bulk.html:142
-#: html/SelfService/Update.html:87
-#: html/Ticket/ModifyAll.html:115
-#: html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Bifoga"
-#: html/SelfService/Create.html:92
-#: html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Bifoga fil"
-#: html/SelfService/Update.html:75
-#: html/Ticket/Create.html:131
-#: html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "Bifogad fil"
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "Bilaga"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
-#: html/Ticket/ShowEmailRecord.html:52
-#: html/Ticket/ShowEmailRecord.html:56
-#: html/Ticket/ShowEmailRecord.html:59
msgid "Attachment '%1' could not be loaded"
msgstr "Bifogad fil '%1' kunde inte läsas in"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Bifogad fil skapad"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Bifogat filnamn"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Bifogade filer"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "Kryptering av bilagor är avstängt"
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Attribut raderat"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "aug"
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "Aug."
-#: etc/initialdata:221
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "augusti"
+
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Autosvar"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "Autosvar till rekvirenter"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Tillgänglig"
-#: html/Admin/Elements/CustomFieldTabs:65
-#: html/Admin/Elements/GroupTabs:60
-#: html/Admin/Elements/QueueTabs:60
-#: html/Admin/Elements/UserTabs:58
-#: html/Ticket/Elements/Tabs:113
-#: html/User/Elements/GroupTabs:59
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Grunddata"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Hemlig kopia"
-#: html/Admin/CustomFields/GroupRights.html:91
-#: html/Admin/CustomFields/UserRights.html:74
-#: html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "Se till att spara dina ändringar"
-#: html/Elements/SelectDateRelation:55
-#: lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "Före"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Best Practical Solutions, LLC företagslogo"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "Tom"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "Brödtext"
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Fetstil"
-#: html/Search/Results.html:79
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "Bokmärke"
+
+#: NOT FOUND IN SOURCE
msgid "Bookmarkable link"
msgstr "Länk som kan sparas som bokmärke"
-#: html/Ticket/Elements/ShowHistory:64
-#: html/Ticket/Elements/ShowHistory:69
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "Bokmärkta ärenden"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Korta headers"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Massärende-uppdatering"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "Köp support"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "Som standard använder RT ditt systems tidszon. Här kan du sätta ett globalt standardvärde för hur datum och tid visas i RT. Dina användare kan välja en annan tidszon i sina inställningar."
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Kan inte modifiera systemanvändare"
@@ -866,483 +1084,669 @@ msgstr "Kan inte modifiera systemanvändare"
msgid "Can this principal see this queue"
msgstr "Kan denna principal se denna kö"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Kan inte lägga till ett extrafältvärde utan ett namn"
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
-#: html/Admin/CustomFields/Objects.html:86
msgid "Can't find a collection class for '%1'"
msgstr "Kan inte hitta en samlingskategori för '%1'"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Kan inte hitta en sparad sökning att arbeta med"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Kan inte länka ett ärende till sig själv"
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
-#: html/Widgets/SavedSearch:63
msgid "Can't save %1"
msgstr "kan inte spara %1"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Kan inte spara den här sökningen"
-#: lib/RT/Record.pm:1282
-#: lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Kan inte specificera både bas och mål"
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "Det går inte att skapa ärenden i en avstängd kö."
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
-#: html/autohandler:204
msgid "Cannot create user: %1"
msgstr "Kan inte skapa användare: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62
-#: html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Kategori"
-#: etc/initialdata:50
-#: html/Admin/Queues/People.html:65
-#: html/SelfService/Create.html:71
-#: html/Ticket/Create.html:88
-#: html/Ticket/Elements/EditPeople:72
-#: html/Ticket/Elements/ShowPeople:56
-#: html/Ticket/Update.html:83
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Kopia"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "Ändra"
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Ändra lösenord"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Markera alla"
-#: html/SelfService/Update.html:78
-#: html/Ticket/Create.html:134
-#: html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Markera box för radering"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Markera box för indragande av rättigheter"
-#: html/Elements/EditLinks:148
-#: html/Elements/EditLinks:85
-#: html/Elements/ShowLinks:78
-#: html/Ticket/Create.html:223
-#: html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Barn"
-#: html/NoAuth/js/util.js:201
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr "Välj databasmotor"
+
+#: NOT FOUND IN SOURCE
msgid "Choose a date"
msgstr "Välj ett datum"
-#: html/Admin/Users/Modify.html:156
-#: html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Ort"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Välj bort alla"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Stäng fönster"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Stängt"
-#: html/SelfService/Closed.html:46
-#: html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Stängda ärenden"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Combobox: Välj eller mata in flera värden"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Combobox: Välj eller mata in ett värde"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Combobox: Välj eller mata in upp till %1 värden"
-#: html/Ticket/Elements/ShowTransaction:190
-#: html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Kommentar"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
-msgstr "Kommentar adress"
+msgstr "Kommentarsadress"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "Kommentarsadress"
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Kommentar på ärenden"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "KommentarPåÄrende"
-#: html/Ticket/ModifyAll.html:91
-#: html/Ticket/Update.html:75
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "Kommentarer"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Kommentarer (Ej skickade till rekvirent)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Kommentarer (ej skickade till rekvirent)"
-#: html/Admin/Users/Modify.html:225
-#: html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Kommentarer om denna användare"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Kommentarer tillagda"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Commit tömt"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Villkor"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr "Villkor är obligatorisk parameter"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Villkor matchar..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Villkor hittades ej"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Konfiguration"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Bekräfta"
-#: html/Admin/Elements/ModifyTemplate:65
-#: html/Elements/SelectAttachmentField:48
-#: html/Ticket/ModifyAll.html:119
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "Anslutning lyckades"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "Innehåll"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr "Innehållstyp"
-#: html/Search/Elements/EditSearches:65
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Kopia"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Korrespondens"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Korrespondens tillagd"
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
msgstr "Går ej att lägga till nytt extrafältvärde. "
-#. (, $value_msg)
-#: lib/RT/Record.pm:1660
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
msgstr "Går ej att lägga till nytt extrafältvärde. %1 "
-#: lib/RT/Ticket_Overlay.pm:3048
-#: lib/RT/Ticket_Overlay.pm:3056
-#: lib/RT/Ticket_Overlay.pm:3073
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
msgstr "Går ej att byta ägare. "
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
-#: html/Admin/CustomFields/Modify.html:161
msgid "Could not create CustomField"
msgstr "Går ej att skapa ExtraFält"
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
-#: html/Admin/Elements/EditCustomField:113
msgid "Could not create CustomField: %1"
msgstr "Går ej att skapa ExtraFält: %1"
-#: html/User/Groups/Modify.html:98
-#: lib/RT/Group_Overlay.pm:494
-#: lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "GÃ¥r ej att skapa grupp"
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
-#: html/Admin/Global/Template.html:96
-#: html/Admin/Queues/Template.html:93
msgid "Could not create template: %1"
msgstr "GÃ¥r ej att skapa mall: %1"
-#: lib/RT/Ticket_Overlay.pm:1075
-#: lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Går ej att skapa ärende. Kö ej satt"
-#: lib/RT/User_Overlay.pm:255
-#: lib/RT/User_Overlay.pm:269
-#: lib/RT/User_Overlay.pm:278
-#: lib/RT/User_Overlay.pm:287
-#: lib/RT/User_Overlay.pm:296
-#: lib/RT/User_Overlay.pm:310
-#: lib/RT/User_Overlay.pm:320
-#: lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Går ej att skapa användare"
-#: lib/RT/Queue_Overlay.pm:741
-#: lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Går ej att hitta eller skapa denna användare"
-#: lib/RT/Queue_Overlay.pm:802
-#: lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "GÃ¥r ej att hitta denna principal"
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Går ej att läsa in ExtraFält %1"
-#: html/Admin/Groups/Members.html:112
-#: html/User/Groups/Members.html:111
-#: html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Går ej att läsa in grupp"
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
-#: lib/RT/SavedSearch.pm:119
msgid "Could not load object for %1"
msgstr "Går ej att läsa in objekt för %1"
-#: lib/RT/SavedSearch.pm:197
+#: NOT FOUND IN SOURCE
msgid "Could not load search attribute"
msgstr "Går ej att läsa in sökattribut"
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:761
msgid "Could not make that principal a %1 for this queue"
msgstr "Går ej att göra denna principal %1 för denna kö"
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1444
msgid "Could not make that principal a %1 for this ticket"
msgstr "Går ej att göra denna principal %1 för detta ärende"
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:860
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Går ej att flytta denna principal som %1 för denna kö"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Går ej att sätta in användarinfo"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr "Går ej att sätta in bifogad fil"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Går ej att lägga till medlem till grupp"
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
-#: lib/RT/Record.pm:1719
-#: lib/RT/Record.pm:1771
msgid "Couldn't create a transaction: %1"
msgstr "GÃ¥r ej att skapa transaktion: %1"
-#: lib/RT/Record.pm:953
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "GÃ¥r ej att hitta rad"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "GÃ¥r ej att hitta denna principal"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Går ej att hitta detta värde"
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
-#: lib/RT/CurrentUser.pm:145
msgid "Couldn't load %1 from the users database.\\n"
msgstr "Går ej att läsa in %1 från användarens databas.\\n"
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
-#: html/Admin/CustomFields/UserRights.html:149
msgid "Couldn't load Class %1"
msgstr "Går ej att läsa in klass %1"
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
-#: html/Admin/CustomFields/GroupRights.html:107
msgid "Couldn't load CustomField %1"
msgstr "Går ej att läsa in ExtraFält %1"
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
-#: lib/RT/Ticket_Overlay.pm:2016
msgid "Couldn't load copy of ticket #%1."
msgstr "Går ej att läsa in kopia av ärende #%1."
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
-#: html/Admin/Groups/GroupRights.html:109
-#: html/Admin/Groups/UserRights.html:96
msgid "Couldn't load group %1"
msgstr "Går ej att läsa in grupp %1"
-#: lib/RT/Link_Overlay.pm:202
-#: lib/RT/Link_Overlay.pm:211
-#: lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Går ej att läsa in länk"
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
-#: html/Admin/Elements/ObjectCustomFields:83
-#: html/Admin/Queues/CustomFields.html:59
-#: html/Admin/Users/CustomFields.html:59
msgid "Couldn't load object %1"
msgstr "Går ej att läsa in objekt %1"
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
-#: html/Admin/Queues/People.html:142
msgid "Couldn't load queue"
msgstr "Går ej att läsa in kö"
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
-#: html/Admin/Queues/GroupRights.html:122
-#: html/Admin/Queues/UserRights.html:93
msgid "Couldn't load queue %1"
msgstr "Går ej att läsa in kö %1"
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
-#: html/Admin/Elements/EditScrip:126
-#: html/Admin/Elements/EditScrip:167
msgid "Couldn't load scrip #%1"
msgstr "Går ej att läsa in scrip #%1"
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
-#: html/SelfService/Display.html:158
-#: lib/RT/Action/CreateTickets.pm:680
msgid "Couldn't load ticket '%1'"
msgstr "Går ej att läsa in ärende '%1'"
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
-#: lib/RT/Ticket_Overlay.pm:2643
msgid "Couldn't resolve '%1' into a URI."
msgstr "Kunde inte omvandla '%1' till en URI."
-#: html/Admin/Users/Modify.html:173
-#: html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Land"
-#: html/Admin/Elements/CreateUserCalled:47
-#: html/Admin/Elements/EditCustomField:84
-#: html/Admin/Elements/EditScrip:133
-#: html/Admin/Queues/Template.html:66
-#: html/Elements/QuickCreate:65
-#: html/Ticket/Create.html:168
-#: html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "Skapa"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Skapa Ärenden"
-#: html/Admin/CustomFields/Modify.html:150
-#: html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Skapa ett ExtraFält"
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
-#: html/Admin/Queues/CustomField.html:69
msgid "Create a CustomField for queue %1"
msgstr "Skapa ett ExtraFält för kö %1"
-#: html/Admin/Groups/Modify.html:125
-#: html/Admin/Groups/Modify.html:99
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Skapa en ny grupp"
-#: html/User/Groups/Modify.html:113
-#: html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Skapa en ny personlig grupp"
-#: html/Ticket/Create.html:47
-#: html/Ticket/Create.html:51
-#: html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "Skapa ett nytt ärende"
-#: html/Admin/Users/Modify.html:252
-#: html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Skapa en ny användare"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Skapa en kö"
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrip.html:89
msgid "Create a scrip for queue %1"
msgstr "Skapa en scrip för kö %1"
-#: html/Admin/Global/Template.html:90
-#: html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Skapa en mall"
-#: html/SelfService/Create.html:46
-#: html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Skapa ett ärende"
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Skapa nya ärenden baserade på denna scrips mall"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Skapa ärende"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Skapa ärenden i denna kö"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Skapa, radera och modifiera extrafält"
@@ -1350,324 +1754,497 @@ msgstr "Skapa, radera och modifiera extrafält"
msgid "Create, delete and modify queues"
msgstr "Skapa, radera och modifiera köer"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Skapa, radera och modifiera medlemmar av personliga grupper"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Skapa, radera och modifiera användare"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr "SkapaSparadSök"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "SkapaÄrende"
-#: html/Elements/SelectDateType:47
-#: html/Ticket/Elements/ShowDates:48
-#: lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "Skapat"
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "Skapad av"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
-#: html/Admin/CustomFields/Modify.html:163
-#: html/Admin/Elements/EditCustomField:117
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Skapat ExtraFält %1"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr "Skapad i en datumintervall"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Skapade ärenden under period, grupperade efter status"
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "Skapare"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Nuvarande relationer"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Nuvarande scrips"
-#: html/Admin/Groups/Members.html:60
-#: html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Nuvarande medlemmar"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Nuvarande rättigheter"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Nuvarande sökning"
-#: html/Admin/Queues/People.html:62
-#: html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Nuvarande observatörer"
-#: html/Admin/Elements/SystemTabs:61
-#: html/Admin/Elements/Tabs:62
-#: html/Admin/Global/index.html:71
-#: html/Admin/Users/Modify.html:205
-#: html/Admin/index.html:77
-#: html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Extrafält"
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
-#: html/Admin/CustomFields/index.html:60
msgid "Custom Fields for %1"
msgstr "Extrafält för %1"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Specialanpassad handling utrensningskod"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Specialanpassad handling förberedelsekod"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Specialanpassat villkor"
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
-#: lib/RT/Tickets_Overlay.pm:2424
msgid "Custom field %1 has a value."
msgstr "Extrafält %1 har ett värde."
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
-#: lib/RT/Tickets_Overlay.pm:2420
msgid "Custom field %1 has no value."
msgstr "Extrafält %1 har inget värde."
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
-#: lib/RT/Record.pm:1592
-#: lib/RT/Record.pm:1754
msgid "Custom field %1 not found"
msgstr "Extrafält %1 ej funnet"
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
-#: lib/RT/Report/Tickets.pm:118
-#: lib/RT/Report/Tickets.pm:121
msgid "Custom field '%1'"
msgstr "Extrafält '%1'"
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
-#: lib/RT/CustomField_Overlay.pm:1157
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Extrafältvärde %1 går ej att hitta för extrafält %2"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Extrafältvärde går ej att radera"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Extrafält går ej att hitta"
-#: lib/RT/CustomField_Overlay.pm:1171
-#: lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Extrafältvärde raderat"
-#: html/Elements/SelectGroups:51
-#: html/Elements/SelectUsers:51
-#: lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "ExtraFält"
-#: html/Prefs/MyRT.html:78
-#: html/Prefs/Quicksearch.html:70
-#: html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "Anpassa"
-#: html/SelfService/Display.html:61
-#: html/Ticket/Create.html:203
-#: html/Ticket/Elements/ShowSummary:83
-#: html/Ticket/Elements/Tabs:116
-#: html/Ticket/ModifyAll.html:65
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "Datumformat"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Datum"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Dec."
-#: etc/initialdata:222
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "Dekryptera"
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Default Autosvarmall"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Default Kö"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Default rekvirent"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Default admin. kommentarmall"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Default admin. korrespondensmall"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Default korrespondensmall"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Default transaktionsmall"
-#: html/User/Delegation.html:46
-#: html/User/Delegation.html:49
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Överlåt rättigheter"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Överlåt specifika rättigheter som har tilldelats dig."
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "ÖverlåtRättigheter"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Överlåtelse"
-#: html/Admin/Elements/EditScrips:75
-#: html/Search/Elements/EditFormat:103
-#: html/Search/Elements/EditQuery:57
-#: html/Search/Elements/EditSearches:63
-#: html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Radera"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr "Radera Mall"
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
-#: lib/RT/SavedSearch.pm:220
msgid "Delete failed: %1"
msgstr "Radering misslyckades: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Radera utvalda scrips"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Radera ärenden"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr "Radera värden"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "RaderaÄrende"
-#: lib/RT/SavedSearch.pm:218
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Deleted search"
msgstr "Radera sökning"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Radering av detta objekt bryter referentiell integritet"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Radering av detta objekt strider mot referentiell integritet"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
-msgstr "Avvisa"
-
-#: html/Elements/EditLinks:140
-#: html/Elements/EditLinks:66
-#: html/Elements/ShowLinks:58
-#: html/Ticket/Create.html:221
-#: html/Ticket/Elements/BulkLinks:56
-#: html/Ticket/Elements/ShowDependencies:53
+msgstr "Neka"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
msgstr "Avhängighet av till"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:718
msgid "Dependency by %1 added"
msgstr "Avhängighet till %1 tillagd"
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:758
msgid "Dependency by %1 deleted"
msgstr "Avhängighet till %1 raderad"
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:715
msgid "Dependency on %1 added"
msgstr "Avhängighet av %1 tillagd"
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:755
msgid "Dependency on %1 deleted"
msgstr "Avhängighet av %1 raderad"
-#: html/Elements/EditLinks:136
-#: html/Elements/EditLinks:57
-#: html/Elements/SelectLinkType:48
-#: html/Elements/ShowLinks:48
-#: html/Ticket/Create.html:220
-#: html/Ticket/Elements/BulkLinks:52
-#: html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Avhängig av"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "Fallande"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Fallande"
-#: html/SelfService/Create.html:100
-#: html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Beskriv problemet nedan"
-#: html/Admin/CustomFields/Modify.html:61
-#: html/Admin/Elements/AddCustomFieldValue:57
-#: html/Admin/Elements/EditCustomField:60
-#: html/Admin/Elements/EditCustomFieldValues:56
-#: html/Admin/Elements/EditScrip:55
-#: html/Admin/Elements/ModifyTemplate:57
-#: html/Admin/Groups/Modify.html:71
-#: html/Admin/Queues/Modify.html:69
-#: html/Search/Elements/EditSearches:56
-#: html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Beskrivning"
-#: html/Search/Elements/EditFormat:71
-#: html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Visa"
@@ -1675,1258 +2252,1767 @@ msgstr "Visa"
msgid "Display Access Control List"
msgstr "Visa Tillgångskontrollista"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Visa kolumner"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Visa scrip-mallar för denna kö"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Visa scrips för denna kö"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Visa modus"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Visa sparade sökningar för denna grupp"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "Distribuerade under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Gör något och allt"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Återinläs inte denna sida."
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Ladda ner"
-#: html/Admin/Groups/index.html:61
-#: html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Ladda ner som tab-uppdelad fil"
-#: html/Elements/SelectDateType:53
-#: html/Ticket/Create.html:209
-#: html/Ticket/Elements/EditDates:66
-#: html/Ticket/Elements/Reminders:133
-#: html/Ticket/Elements/ShowDates:64
-#: lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Förfallo"
-#: html/Elements/Quicksearch:48
-#: html/Elements/ShowSearch:49
-#: html/index.html:107
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Redigera"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr "Redigera extrafält"
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
-#: html/Admin/Elements/ObjectCustomFields:92
-#: html/Admin/Queues/CustomFields.html:64
-#: html/Admin/Users/CustomFields.html:64
msgid "Edit Custom Fields for %1"
msgstr "Redigera extrafält för %1"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Redigera extrafält för alla grupper"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Redigera extrafält för alla användare"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54
-#: html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Redigera extrafält för ärenden i alla köer"
-#: html/Search/Bulk.html:188
-#: html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Redigera länkar"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Redigera söksträng"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Redigera sökning"
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
-#: html/Admin/Queues/Templates.html:63
msgid "Edit Templates for queue %1"
msgstr "Redigera mallar för kö %1"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Redigera sparade sökningar för denna grupp"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60
-#: html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Redigera systemmallar"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "RedigeraSparadeSökningar"
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
-#: html/Admin/Queues/Modify.html:140
msgid "Editing Configuration for queue %1"
msgstr "Redigera konfiguration för kö %1"
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
-#: html/Admin/CustomFields/Modify.html:167
-#: html/Admin/Elements/EditCustomField:120
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Redigera extrafält %1"
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
-#: html/Admin/Groups/Members.html:53
msgid "Editing membership for group %1"
msgstr "Redigera medlemskap för grupp %1"
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
-#: html/User/Groups/Members.html:150
msgid "Editing membership for personal group %1"
msgstr "Redigera medlemskap för personlig grupp %1"
-#: lib/RT/Record.pm:1295
-#: lib/RT/Record.pm:1372
-#: lib/RT/Ticket_Overlay.pm:2518
-#: lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Antingen bas eller mål måste specificeras"
-#: html/Admin/Users/Modify.html:74
-#: html/Ticket/Elements/AddWatchers:77
-#: html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "E-post"
-#: lib/RT/User_Overlay.pm:235
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "E-postadress används"
-#: html/Admin/CustomFields/Modify.html:98
-#: html/Admin/Elements/EditCustomField:72
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Aktiverad (Bortval av denna box deaktiverar detta extrafält)"
-#: html/Admin/Groups/Modify.html:84
-#: html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Aktiverad (Bortval av denna box deaktiverar denna grupp)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Aktiverad (Bortval av denna box deaktiverar denna kö)"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "Aktiverade köer"
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
-#: html/Admin/Elements/EditCustomField:136
-#: html/Admin/Groups/Modify.html:150
-#: html/Admin/Users/Modify.html:350
-#: html/User/Groups/Modify.html:138
msgid "Enabled status %1"
msgstr "Aktiverad status %1"
-#. (loc_fuzzy($msg))
-#: html/Admin/CustomFields/Modify.html:185
-#: html/Admin/Queues/Modify.html:162
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "Aktiverad status: %1"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "Kryptera"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "Kryptera/dekryptera"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Mata in flera värden"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Mata in objekt eller URI att koppla objekt till. Separera flera inmatningar med mellanrum."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Mata in ett värde"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Mata in köer eller URI att koppla köer till. Separera flera inmatningar med mellanrum."
-#: html/Elements/EditLinks:119
-#: html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Mata in ärenden eller URI att koppla ärenden till. Separera flera inmatningar med mellanrum."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "Mata in upp till %1 värde"
-#: html/Elements/Login:76
-#: html/SelfService/Error.html:46
-#: html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Fel"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Fel i parametrar till Kö->LäggtillObservatör"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Fel i parametrar till Kö->RaderaObservatör"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Fel i parametrar till Ärende->LäggtillObservatör"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Fel i parametrar till Ärende->RaderaObservatör"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Eskalera ärenden"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Uppskattning"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Alla"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Exempel:"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Extra info"
-#: lib/RT/SavedSearch.pm:177
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "Kunde inte ansluta till databasen: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Failed to create search attribute"
msgstr "Misslyckades med att skapa sökattribut"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "Misslyckades med att hitta 'Privilegierad'-användares pseudogrupp."
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "Misslyckades med att hitta 'Icke-privilegierad'-användares pseudogrupp"
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
-#: bin/rt-crontool:206
msgid "Failed to load module %1. (%2)"
msgstr "Misslyckades med att läsa in modul %1. (%2)"
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
-#: lib/RT/SavedSearch.pm:152
msgid "Failed to load object for %1"
msgstr "Misslyckades med att läsa in objekt för %1"
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Feb."
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Filnamn"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Fyll i flera textområden"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Fyll i flera wikitextområden"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Fyll i ett textområde"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Fyll i ett wikitextområde"
-#: html/Admin/CustomFields/Modify.html:107
-#: html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Fyll i detta fält med en URL."
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "Fyll i upp till %1 textområden"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "Fyll i upp till %1 wikitextområden"
-#: html/Search/Elements/PickBasics:149
-#: html/Ticket/Create.html:182
-#: html/Ticket/Elements/EditBasics:97
-#: lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Slutlig Prioritet"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "SlutligPrioritet"
-#: html/Admin/Groups/index.html:72
-#: html/Admin/Queues/People.html:82
-#: html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Hitta grupper vars"
-#: html/Admin/Queues/People.html:78
-#: html/Admin/Users/index.html:70
-#: html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "Hitta personer vars"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Hitta ärenden"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Första"
-#: docs/design_docs/string-extraction-guide.txt:33
-#: lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr "Foo Bar Baz"
-#: docs/design_docs/string-extraction-guide.txt:24
-#: lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr "Foo!"
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "Genomtvinga ändring"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Format"
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
-#: html/Search/Results.html:145
msgid "Found %quant(%1,ticket)"
msgstr "Hittade %quant(%1,ärende)"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Hittade Objekt"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Fre."
-#: html/Ticket/Elements/ShowHistory:66
-#: html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Fullständiga headers"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Hämta mall från fil"
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
-#: lib/RT/Transaction_Overlay.pm:684
msgid "Given to %1"
msgstr "Har givits till %1"
-#: html/Admin/Elements/Tabs:65
-#: html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Global"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Globala extrafält"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Global extrafältkonfiguration"
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
-#: html/Admin/Global/MyRT.html:48
msgid "Global portlet %1 saved."
msgstr "Global portlet %1 sparad."
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
-#: html/Admin/Elements/SelectTemplate:59
msgid "Global template: %1"
msgstr "Global mall: %1"
-#: html/Admin/CustomFields/index.html:80
-#: html/Search/Results.html:90
-#: html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Starta"
-#: html/Admin/Groups/index.html:67
-#: html/Admin/Groups/index.html:73
-#: html/Admin/Queues/People.html:80
-#: html/Admin/Queues/People.html:84
-#: html/Admin/Queues/index.html:66
-#: html/Admin/Users/index.html:73
-#: html/Elements/RefreshHomepage:48
-#: html/Search/Results.html:74
-#: html/Ticket/Elements/EditPeople:53
-#: html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Starta!"
-#: html/Elements/GotoTicket:46
-#: html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Gå till ärende"
-#: html/Ticket/Elements/AddWatchers:67
-#: html/Ticket/Elements/ShowGroupMembers:55
-#: html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Grupp"
-#: html/Admin/Elements/CustomFieldTabs:68
-#: html/Admin/Elements/GroupTabs:66
-#: html/Admin/Elements/QueueTabs:82
-#: html/Admin/Elements/SystemTabs:65
-#: html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Grupprättigheter"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Grupp har redan medlem"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Grupp har redan medlem: %1"
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
-#: html/Admin/Groups/Modify.html:109
msgid "Group could not be created: %1"
msgstr "Grupp kan inte skapas: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Grupp har skapats"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Grupp har ingen sådan medlem"
-#: lib/RT/Group_Overlay.pm:963
-#: lib/RT/Queue_Overlay.pm:748
-#: lib/RT/Queue_Overlay.pm:808
-#: lib/RT/Ticket_Overlay.pm:1430
-#: lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Grupp ej funnen"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59
-#: html/Admin/Elements/SelectNewGroupMembers:57
-#: html/Admin/Elements/Tabs:56
-#: html/Admin/Global/CustomFields/index.html:69
-#: html/Admin/Groups/Members.html:86
-#: html/Admin/Queues/People.html:104
-#: html/Admin/Users/Memberships.html:53
-#: html/Admin/index.html:67
-#: html/User/Groups/Members.html:88
-#: lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Grupper"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Grupper kan inte vara medlemmar av sina medlemmar"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Grupper som matchar sökkriterium"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Grupper som denna användare tillhör"
-#: lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Hej!"
+#: lib/RT/StyleGuide.pod:765
#. ($name)
-#: docs/design_docs/string-extraction-guide.txt:40
-#: lib/RT/StyleGuide.pod:773
msgid "Hello, %1"
msgstr "Hej, %1"
-#: html/Admin/Elements/GroupTabs:70
-#: html/Admin/Elements/UserTabs:64
-#: html/Ticket/Elements/ShowHistory:53
-#: html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Historik"
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
-#: html/Admin/Groups/History.html:62
msgid "History of the group %1"
msgstr "Historik för gruppen %1"
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
-#: html/Admin/Users/History.html:62
msgid "History of the user %1"
msgstr "Historik för användaren %1"
-#: html/Elements/Tabs:65
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Hemadress"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Timmar"
+#: lib/RT/Base.pm:136
#. (6)
-#: lib/RT/Base.pm:119
msgid "I have %quant(%1,concrete mixer)."
msgstr "Jag har %quant(%1,concrete mixer)."
-#: html/Search/Build.html:460
-#: lib/RT/Report/Tickets.pm:415
+#: NOT FOUND IN SOURCE
msgid "I'm lost"
msgstr "Jag är vilse"
-#: html/Ticket/Elements/ShowBasics:48
-#: lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "ID"
-#: html/Admin/Users/Modify.html:65
-#: html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Identitet"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Om ett godkännande avvisas, avvisa det ursprungliga och radera väntande godkännanden"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Om ingen rekvirent har specificerats, skapa ärenden med denna rekvirent."
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "Om ingen kö har specificerats, skapa ärenden i denna kö."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Om detta verktyg var setgid, kunde en fientlig användare använda detta verktyg för att få administrativ tillgång till RT."
-#: html/Admin/Queues/People.html:126
-#: html/Ticket/Modify.html:60
-#: html/Ticket/ModifyAll.html:128
-#: html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Om du har uppdaterat någonting av ovanstående, se till att"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "Ogiltigt värde för %1"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "Oföränderligt fält"
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Ta med deaktiverade grupper på lista."
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Ta med deaktiverade köer på lista."
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Ta med deaktiverade användare på lista."
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr "Inkludera sida"
-#: html/Search/Build.html:486
-#: lib/RT/Report/Tickets.pm:441
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Ofullständig sökning"
-#: html/Search/Build.html:483
-#: lib/RT/Report/Tickets.pm:438
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "Ofullständig sökning"
-#: html/Search/Elements/PickBasics:148
-#: lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Initiell prioritet"
-#: lib/RT/Ticket_Overlay.pm:1163
-#: lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "InitiellPrioritet"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Inläsningsfel"
-#. ($CF->FriendlyPattern)
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
-#: html/Elements/ValidateCustomFields:68
-#: lib/RT/CustomField_Overlay.pm:1021
-#: lib/RT/CustomField_Overlay.pm:1162
+#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "Inläsning måste matcha %1"
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "Internt fel"
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
-#: lib/RT/Record.pm:308
msgid "Internal Error: %1"
msgstr "Internt fel: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Ogiltig grupptyp"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Ogiltig rättighet"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Ogiltig data"
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
-#: lib/RT/CustomField_Overlay.pm:207
-#: lib/RT/CustomField_Overlay.pm:678
msgid "Invalid pattern: %1"
msgstr "Ogiltigt mönster: %1"
-#: lib/RT/Scrip_Overlay.pm:157
-#: lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Ogiltig kö"
-#: lib/RT/ACE_Overlay.pm:264
-#: lib/RT/ACE_Overlay.pm:273
-#: lib/RT/ACE_Overlay.pm:279
-#: lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Ogiltig rättighet"
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
-#: lib/RT/Record.pm:283
msgid "Invalid value for %1"
msgstr "Ogiltigt värde för %1"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Ogiltigt värde för extrafält"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Ogiltigt värde för status"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Det är oerhört viktigt att icke-privilegierade användare inte får lov att använda detta verktyg."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Det rekommenderas att du skapar en icke-privilegierad unix-användare med korrekt gruppmedlemskap och RT för att använda detta verktyg."
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Det krävs åtskilliga parametrar:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "Kursiv"
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Jan."
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Gå med i eller lämna denna grupp"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Juli"
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr "Jumbo"
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Juni"
-#: html/Admin/Users/Modify.html:94
-#: html/User/Prefs.html:76
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Språk"
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "Stor"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Senaste"
-#: html/Ticket/Elements/EditDates:59
-#: html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Senaste kontakt"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Senast kontaktad"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Senast uppdaterad"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "SenastUppdateradAv"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Tillbaka"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Låt denna användare få tillgång till RT"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Låt denna användare få rättigheter"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "Länk"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Länk finns redan"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Länk kan inte skapas"
-#. ($TransString)
-#: lib/RT/Record.pm:1326
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Länk har skapats (%1)"
-#. ($TransString)
-#: lib/RT/Record.pm:1387
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Länk har raderats (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Länk ej funnen"
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
-#: html/Ticket/ModifyLinks.html:46
-#: html/Ticket/ModifyLinks.html:50
msgid "Link ticket #%1"
msgstr "Koppla ärende #%1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "Koppla värden till"
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr "Koppling. Tillgång nekas"
-#: html/Ticket/Create.html:216
-#: html/Ticket/Elements/ShowSummary:89
-#: html/Ticket/Elements/Tabs:120
-#: html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Länkar"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Läs in"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Läs in sparad sökning:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr "LäsinSparadSökning"
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Inlästa Perl-moduler"
-#. ($self->Name)
-#: lib/RT/SavedSearch.pm:111
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Inläst sökning %1"
-#: html/Admin/Users/Modify.html:138
-#: html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Plats"
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
-#: html/Elements/Header:91
msgid "Logged in as %1"
msgstr "Inloggad som %1"
-#: docs/design_docs/string-extraction-guide.txt:71
-#: html/Elements/Login:100
-#: html/Elements/Login:68
-#: html/Elements/Login:84
-#: lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "Logga in"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Logga ut"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Uppslagstyp matchar ej"
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Sätt ägare"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Sätt status"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Sätt förfallodatum"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Sätt lösningsdatum"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Sätt startdatum"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Sätt datum startar"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Sätt datum uppgivet"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Sätt prioritet"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Sätt kö"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Sätt ämne"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Gör denna grupp synlig för användare"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Administrera extrafält och extrafältvärde"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Administrera grupper och gruppmedlemskap"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Administrera egenskaper och konfiguration som gäller för alla köer"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Administrera köer och kö-specifika egenskaper"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Administrera användare och lösenord"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mars"
-#: lib/RT/Date.pm:445
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "Maj"
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:731
msgid "Member %1 added"
msgstr "Medlem %1 tillagd"
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:771
msgid "Member %1 deleted"
msgstr "Medlem %1 raderad"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Medlem tillagd"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Medlem tillagd: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Medlem raderad"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Medlem ej raderad"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Medlem av"
-#: html/Admin/Elements/GroupTabs:63
-#: html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Medlemmar"
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:728
msgid "Membership in %1 added"
msgstr "Medlemskap i %1 tillagt"
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:768
msgid "Membership in %1 deleted"
msgstr "Medlemskap i %1 raderat"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Medlemskap"
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
-#: html/Admin/Users/Memberships.html:60
msgid "Memberships of the user %1"
msgstr "Medlemskap för användaren %1"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Sammanslagning lyckades"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Sammanslagning misslyckades. Kunde inte sätta EffectiveId"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Sammanslagning misslyckades. Kunde inte sätta status"
-#: html/Elements/EditLinks:131
-#: html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
msgstr "Slå samman med"
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:734
msgid "Merged into %1"
msgstr "Sammanslagen med %1"
-#: html/Search/Bulk.html:143
-#: html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Meddelande"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "Meddelande visades inte eftersom det är för omfångsrikt eller består av annat än vanlig text."
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Meddelande sparades inte"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Meddelande sparat"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Meddelande om detta ärende kommer inte att skickas till..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Minuter"
-#: html/Search/Build.html:490
-#: lib/RT/Report/Tickets.pm:445
+#: NOT FOUND IN SOURCE
msgid "Mismatched parentheses"
msgstr "Icke-matchande paranteser"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Saknas en primärnyckel?: %1"
-#: html/Admin/Users/Modify.html:193
-#: html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Mobil"
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr "Modifiera Tillgångskontrollista"
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
-#: html/Admin/Elements/ObjectCustomFields:96
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Modifiera extrafält som gäller för %1 för alla %2"
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
-#: html/Admin/Elements/ObjectCustomFields:98
msgid "Modify Custom Fields which apply to all %1"
msgstr "Modifiera extrafält som gäller för alla %1"
-#: html/Admin/Global/GroupRights.html:106
-#: html/Admin/Groups/GroupRights.html:94
-#: html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Modifiera grupprättigheter"
-#: html/Admin/Groups/Members.html:105
-#: html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Modifiera medlemmar"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Modifiera rättigheter"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Modifiera scrip-mallar för denna kö"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Modifiera scrips för denna kö"
-#: html/Admin/Global/UserRights.html:75
-#: html/Admin/Groups/UserRights.html:76
-#: html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Modifiera användarrättigheter"
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
-#: html/Admin/Queues/CustomField.html:66
msgid "Modify a CustomField for queue %1"
msgstr "Modifiera ett extrafält för kö %1"
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrip.html:82
msgid "Modify a scrip for queue %1"
msgstr "Modifiera ett scrip för kö %1"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Modifiera ett scrip som gäller för alla köer"
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
-#: html/Admin/CustomFields/Objects.html:90
msgid "Modify associated objects for %1"
msgstr "Modifiera objekt associerade med %1"
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
-#: html/Ticket/ModifyDates.html:46
-#: html/Ticket/ModifyDates.html:50
msgid "Modify dates for #%1"
msgstr "Modifiera datum för #%1"
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
-#: html/Ticket/ModifyDates.html:57
msgid "Modify dates for ticket # %1"
msgstr "Modifiera datum för ärende # %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65
-#: html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Modifiera globala extrafält"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70
-#: html/Admin/Global/GroupRights.html:46
-#: html/Admin/Global/GroupRights.html:49
-#: html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Modifiera globala grupprättigheter"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Modifiera globala grupprättigheter."
-#: html/Admin/Global/UserRights.html:46
-#: html/Admin/Global/UserRights.html:49
-#: html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Modifiera globala användarrättigheter"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Modifiera globala användarrättigheter."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Modifiera gruppmetadata eller radera grupp"
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
-#: html/Admin/CustomFields/GroupRights.html:164
msgid "Modify group rights for custom field %1"
msgstr "Modifiera grupprättigheter för extrafält %1"
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
-#: html/Admin/Groups/GroupRights.html:46
-#: html/Admin/Groups/GroupRights.html:50
-#: html/Admin/Groups/GroupRights.html:56
msgid "Modify group rights for group %1"
msgstr "Modifiera grupprättigheter för grupp %1"
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/GroupRights.html:46
-#: html/Admin/Queues/GroupRights.html:50
msgid "Modify group rights for queue %1"
msgstr "Modifiera grupprättigheter för kö %1"
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Modifiera medlemskapslista för denna grupp"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Modifiera ens eget RT-konto"
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/People.html:46
-#: html/Admin/Queues/People.html:50
msgid "Modify people related to queue %1"
msgstr "Modifiera personer relaterade till kö %1"
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
-#: html/Ticket/ModifyPeople.html:46
-#: html/Ticket/ModifyPeople.html:50
-#: html/Ticket/ModifyPeople.html:57
msgid "Modify people related to ticket #%1"
msgstr "Modifiera personer relaterade till ärende #%1"
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
-#: html/Admin/Queues/Scrips.html:67
msgid "Modify scrips for queue %1"
msgstr "Modifiera scrips för kö %1"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56
-#: html/Admin/Global/Scrips.html:65
-#: html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Modifiera scrips som gäller för alla köer"
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-#: html/Admin/Global/Template.html:102
-#: html/Admin/Global/Template.html:46
-#: html/Admin/Global/Template.html:51
-#: html/Admin/Queues/Template.html:99
msgid "Modify template %1"
msgstr "Modifiera mall %1"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Modifiera mallar som gäller för alla köer"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr "Modifiera default \"RT snabbtitt\" -visningen"
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
-#: html/Admin/Groups/Modify.html:119
-#: html/User/Groups/Modify.html:107
msgid "Modify the group %1"
msgstr "Modifiera gruppen %1"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Modifiera kö-observatörerna"
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
-#: html/Admin/Users/Modify.html:309
msgid "Modify the user %1"
msgstr "Modifiera användaren %1"
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
-#: html/Ticket/ModifyAll.html:58
msgid "Modify ticket # %1"
msgstr "Modifiera ärende # %1"
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
-#: html/Ticket/Modify.html:46
-#: html/Ticket/Modify.html:49
-#: html/Ticket/Modify.html:55
msgid "Modify ticket #%1"
msgstr "Modifiera ärende #%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Modifiera ärende"
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
-#: html/Admin/CustomFields/UserRights.html:157
msgid "Modify user rights for custom field %1"
msgstr "Modifiera användarrättigheter för extrafält %1"
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
-#: html/Admin/Groups/UserRights.html:46
-#: html/Admin/Groups/UserRights.html:50
-#: html/Admin/Groups/UserRights.html:56
msgid "Modify user rights for group %1"
msgstr "Modifiera användarrättigheter för grupp %1"
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
-#: html/Admin/Queues/UserRights.html:46
-#: html/Admin/Queues/UserRights.html:50
msgid "Modify user rights for queue %1"
msgstr "Modifiera användarrättigheter för kö %1"
@@ -2934,11 +4020,23 @@ msgstr "Modifiera användarrättigheter för kö %1"
msgid "ModifyACL"
msgstr "ModifieraACL"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr "ModifieraExtraFält"
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr "ModifieraEgetMedlemskap"
@@ -2946,1641 +4044,1985 @@ msgstr "ModifieraEgetMedlemskap"
msgid "ModifyQueueWatchers"
msgstr "ModifieraKöObservatörer"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "ModifieraScrips"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr "ModifieraSjälv"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "ModifieraMall"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "ModifieraÄrende"
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "MÃ¥n."
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
-#: html/Ticket/Elements/ShowRequestor:61
msgid "More about %1"
msgstr "Mer om %1"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Flytta ner"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Flytta upp"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Flera"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "'Namn'-attribut måste specificeras"
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
-#: html/SelfService/Elements/MyRequests:57
msgid "My %1 tickets"
msgstr "Mina %1 ärenden"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Min dag"
-#: html/Approvals/index.html:46
-#: html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Mina godkännanden"
-#: html/Search/Elements/SearchPrivacy:50
-#: html/Search/Elements/SelectSearchObject:53
-#: html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Mina sparade sökningar"
-#: html/Admin/CustomFields/Modify.html:58
-#: html/Admin/Elements/AddCustomFieldValue:53
-#: html/Admin/Elements/EditCustomField:55
-#: html/Admin/Elements/EditCustomFieldValues:55
-#: html/Admin/Elements/ModifyTemplate:49
-#: html/Admin/Groups/Modify.html:65
-#: html/Search/Bulk.html:157
-#: html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Namn"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Namn som används"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Aldrig"
-#: html/Elements/EditLinks:117
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr ""
+
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Nya länkar"
-#: html/Admin/Users/Modify.html:119
-#: html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Nytt lösenord"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Nytt väntande godkännande"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Ny sökning"
-#: html/Admin/Elements/CustomFieldTabs:93
-#: html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Nytt extrafält"
-#: html/Admin/Elements/GroupTabs:77
-#: html/User/Elements/GroupTabs:73
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Ny grupp"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Nytt lösenord"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Nytt lösenordmeddelande skickat"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Ny kö"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Ny påminnelse:"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Nya rättigheter"
-#: html/Admin/Global/Scrip.html:63
-#: html/Admin/Global/Scrips.html:60
-#: html/Admin/Queues/Scrip.html:71
-#: html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Nytt scrip"
-#: html/Admin/Global/Template.html:81
-#: html/Admin/Global/Templates.html:60
-#: html/Admin/Queues/Template.html:79
-#: html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Ny mall"
-#: html/SelfService/Elements/Tabs:84
-#: html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Nytt ärende"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Nytt ärende finns ej"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Ny användare"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
msgstr "Ny användare anropad"
-#: html/Admin/Queues/People.html:76
-#: html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Nya observatörer"
-#: html/Helpers/CalPopup.html:58
-#: html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Nästa"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Nästa sida"
-#: html/Admin/Users/Modify.html:84
-#: html/User/Prefs.html:72
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Smeknamn"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Ingen klass definierad"
-#: html/Admin/CustomFields/Modify.html:166
-#: html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Inget extrafält"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Inget extrafält definierat"
-#: html/Admin/Groups/GroupRights.html:105
-#: html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Ingen grupp definierad"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Ingen söksträng"
-#: html/Admin/Queues/GroupRights.html:118
-#: html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Ingen kö definierad"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "Ingen RT-användare funnen. Var god kontakta din RT administratör.\\n"
-#: html/Admin/Global/Template.html:100
-#: html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Ingen mall"
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Ingen handling"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Ingen kolumn specificerad"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Ingen kommentar inmatad om denna användare"
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
-#: lib/RT/Action/Generic.pm:185
-#: lib/RT/Condition/Generic.pm:197
-#: lib/RT/Search/ActiveTicketsInQueue.pm:77
-#: lib/RT/Search/Generic.pm:134
-#: lib/RT/Search/Googleish.pm:78
msgid "No description for %1"
msgstr "Ingen beskrivning för %1"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Ingen grupp specificerad"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Det hittades inga grupper som matchar sökkriterierna."
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Inget bifogat meddelande"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Inget lösenord satt"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Ingen tillåtelse att skapa köer"
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
-#: lib/RT/Ticket_Overlay.pm:420
msgid "No permission to create tickets in the queue '%1'"
msgstr "Ingen tillåtelse att skapa ärenden i kö '%1'"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Ingen tillåtelse att skapa användare"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Ingen tillåtelse att visa det ärendet"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr "Ingen tillåtelse att spara systemomfattande sökningar"
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Ingen tillåtelse att visa uppdatera ärende"
-#: lib/RT/Queue_Overlay.pm:795
-#: lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Ingen principal specificerad"
-#: html/Admin/Queues/People.html:175
-#: html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Inga principaler valda."
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Det hittades inga köer som matchar sökkriterium."
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Inga rättigheter funna"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Inga rättigheter tilldelade."
-#: lib/RT/SavedSearch.pm:196
+#: NOT FOUND IN SOURCE
msgid "No search loaded"
msgstr "Ingen sökning inmatad"
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "Ingen sökning att arbeta med."
-#: html/Elements/RT__Ticket/ColumnMap:137
-#: html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Inget ämne"
-#: lib/RT/Transaction_Overlay.pm:528
-#: lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Ingen transaktionstyp specificerad"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Det hittades inga användare som matchar sökkriterium."
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "Det skickades inget värde till _Set!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Ingen"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Icke-existerande fält?"
-#: html/Search/Chart:71
-#: html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr "Ej inställd"
-#: html/Elements/Header:96
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Ej inloggad."
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Ej inställd"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Har ännu inte implementerats."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Anteckningar"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Meddelande kunde inte skickas"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Meddela Admin.kopia-mottagare"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Meddela Admin.kopia-mottagare som kommentar"
-#: etc/initialdata:93
-#: etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Meddela kopia-mottagare"
-#: etc/initialdata:89
-#: etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Meddela kopia-mottagare som kommentar"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Meddela andra mottagare"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Meddela andra mottagare som kommentar"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Meddela ägare"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Meddela ägare som kommentar"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Meddela ägare om dess avvisade ärende"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Meddela ägare om dess ärende har godkänts av alla godkännare"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Meddela ägare om dess ärende har godkänts av någon godkännare"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Meddela ägare och Admin.kopia-mottagare om nya ämnen väntar på deras godkännande"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "Meddela rekvirenter"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "Meddela rekvirenter och kopia-mottagare"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "Meddela rekvirenter och kopia-mottagare som kommentar"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "Meddela rekvirenter, kopia-mottagare och Admin.kopia-mottagare"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "Meddela rekvirenter, kopia-mottagare och Admin.kopia-mottagare som kommentar"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Nov."
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "ELLER"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Objekt kan ej skapas"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Objekt kan ej raderas"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Objekt har skapats"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Objekt har raderats"
-#. ($LookupType)
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
-#: html/Admin/CustomFields/Objects.html:72
-#: html/Admin/Elements/ObjectCustomFields:63
+#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "Objekt av typen %1 kan inte hantera extrafält"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Objekttypmissförhållande"
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Okt."
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Offline"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Offline-redigeringar"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Offline upload"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "Vid"
-
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-#: lib/RT/Transaction_Overlay.pm:326
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr "Vid %1, skrev %2:"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Vid kommentar"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Vid korrespondens"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "Vid skapande"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Vid ägarbyte"
-#: etc/initialdata:177
-#: etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Vid prioritetsändring"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Vid köbyte"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Vid lösning"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Vid statusändring"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Vid transaktion"
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
-#: html/Approvals/Elements/PendingMyApproval:70
msgid "Only show approvals for requests created after %1"
msgstr "Visa endast godkännanden för förfrågningar som skapats efter %1"
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
-#: html/Approvals/Elements/PendingMyApproval:68
msgid "Only show approvals for requests created before %1"
msgstr "Visa endast godkännanden för förfrågningar som skapats före %1"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Visa endast extrafält för:"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Öppna ärenden"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
-msgstr "Öppna den"
+msgstr "Öppna"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Öppna ärenden"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Öppna ärenden vid korrespondens"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Alternativ"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Sortera efter"
-#: html/Admin/Users/Modify.html:141
-#: html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Organisation"
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
-#: html/Approvals/Elements/Approve:53
msgid "Originating ticket: #%1"
msgstr "Ursprungligt ärende: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Utgående e-postmeddelande om en kommentar har sparats"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Utgående e-postmeddelande har sparats"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Tiden överskriden, prioritet rör sig mot"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Egna ärenden"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "EgetÄrende"
-#: etc/initialdata:38
-#: html/Elements/QuickCreate:56
-#: html/Search/Elements/PickBasics:101
-#: html/Ticket/Create.html:72
-#: html/Ticket/Elements/EditBasics:61
-#: html/Ticket/Elements/EditPeople:64
-#: html/Ticket/Elements/EditPeople:65
-#: html/Ticket/Elements/Reminders:129
-#: html/Ticket/Elements/ShowPeople:48
-#: html/Ticket/Update.html:62
-#: lib/RT/ACE_Overlay.pm:110
-#: lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Ägare"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "Ägare kan inte sättas."
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
-#: lib/RT/Transaction_Overlay.pm:672
msgid "Owner forcibly changed from %1 to %2"
msgstr "Ägare har godtyckligt ändrats från %1 till %2"
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-#: html/Elements/TicketList:78
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Sida %1 av %2"
-#: html/Admin/Users/Modify.html:198
-#: html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Personsökare"
-#: html/Elements/EditLinks:144
-#: html/Elements/EditLinks:76
-#: html/Elements/ShowLinks:68
-#: html/Ticket/Create.html:222
-#: html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Föräldrar"
-#: html/Elements/Login:95
-#: html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Lösenord"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Lösenordpåminnelse"
-#: lib/RT/Transaction_Overlay.pm:781
-#: lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Lösenord ändrat"
-#. ($RT::MinimumPasswordLength)
-#: lib/RT/User_Overlay.pm:1037
-#: lib/RT/User_Overlay.pm:214
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Lösenord måste vara minst %1 tecken långt"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Lösenord har satts"
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
-#: html/User/Prefs.html:240
msgid "Password: %1"
msgstr "Lösenord: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Lösenord: Tillgång nekas"
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Lösenord stämmer inte överens."
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Lösenord stämmer inte överens. Ditt lösenord har inte ändrats"
-#: html/Ticket/Elements/ShowSummary:62
-#: html/Ticket/Elements/Tabs:119
-#: html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "Personer"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Genomför en användardefinierad handling"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Perl-konfiguration"
-#: lib/RT/ACE_Overlay.pm:251
-#: lib/RT/ACE_Overlay.pm:257
-#: lib/RT/ACE_Overlay.pm:580
-#: lib/RT/ACE_Overlay.pm:590
-#: lib/RT/ACE_Overlay.pm:600
-#: lib/RT/ACE_Overlay.pm:665
-#: lib/RT/Attribute_Overlay.pm:158
-#: lib/RT/Attribute_Overlay.pm:164
-#: lib/RT/Attribute_Overlay.pm:405
-#: lib/RT/Attribute_Overlay.pm:414
-#: lib/RT/Attribute_Overlay.pm:427
-#: lib/RT/CurrentUser.pm:116
-#: lib/RT/CurrentUser.pm:125
-#: lib/RT/CustomField_Overlay.pm:1017
-#: lib/RT/CustomField_Overlay.pm:1138
-#: lib/RT/CustomField_Overlay.pm:1281
-#: lib/RT/CustomField_Overlay.pm:172
-#: lib/RT/CustomField_Overlay.pm:189
-#: lib/RT/CustomField_Overlay.pm:200
-#: lib/RT/CustomField_Overlay.pm:374
-#: lib/RT/CustomField_Overlay.pm:403
-#: lib/RT/CustomField_Overlay.pm:763
-#: lib/RT/CustomField_Overlay.pm:936
-#: lib/RT/CustomField_Overlay.pm:971
-#: lib/RT/Group_Overlay.pm:1117
-#: lib/RT/Group_Overlay.pm:1121
-#: lib/RT/Group_Overlay.pm:1130
-#: lib/RT/Group_Overlay.pm:1240
-#: lib/RT/Group_Overlay.pm:1244
-#: lib/RT/Group_Overlay.pm:1250
-#: lib/RT/Group_Overlay.pm:445
-#: lib/RT/Group_Overlay.pm:542
-#: lib/RT/Group_Overlay.pm:620
-#: lib/RT/Group_Overlay.pm:628
-#: lib/RT/Group_Overlay.pm:726
-#: lib/RT/Group_Overlay.pm:730
-#: lib/RT/Group_Overlay.pm:736
-#: lib/RT/Group_Overlay.pm:922
-#: lib/RT/Group_Overlay.pm:926
-#: lib/RT/Group_Overlay.pm:939
-#: lib/RT/Queue_Overlay.pm:1054
-#: lib/RT/Queue_Overlay.pm:140
-#: lib/RT/Queue_Overlay.pm:158
-#: lib/RT/Queue_Overlay.pm:657
-#: lib/RT/Queue_Overlay.pm:667
-#: lib/RT/Queue_Overlay.pm:681
-#: lib/RT/Queue_Overlay.pm:819
-#: lib/RT/Queue_Overlay.pm:828
-#: lib/RT/Queue_Overlay.pm:841
-#: lib/RT/Scrip_Overlay.pm:149
-#: lib/RT/Scrip_Overlay.pm:160
-#: lib/RT/Scrip_Overlay.pm:224
-#: lib/RT/Scrip_Overlay.pm:538
-#: lib/RT/Template_Overlay.pm:108
-#: lib/RT/Template_Overlay.pm:277
-#: lib/RT/Ticket_Overlay.pm:1357
-#: lib/RT/Ticket_Overlay.pm:1367
-#: lib/RT/Ticket_Overlay.pm:1381
-#: lib/RT/Ticket_Overlay.pm:1522
-#: lib/RT/Ticket_Overlay.pm:1532
-#: lib/RT/Ticket_Overlay.pm:1546
-#: lib/RT/Ticket_Overlay.pm:1663
-#: lib/RT/Ticket_Overlay.pm:1983
-#: lib/RT/Ticket_Overlay.pm:2126
-#: lib/RT/Ticket_Overlay.pm:2296
-#: lib/RT/Ticket_Overlay.pm:2346
-#: lib/RT/Ticket_Overlay.pm:2525
-#: lib/RT/Ticket_Overlay.pm:2538
-#: lib/RT/Ticket_Overlay.pm:2614
-#: lib/RT/Ticket_Overlay.pm:2627
-#: lib/RT/Ticket_Overlay.pm:2748
-#: lib/RT/Ticket_Overlay.pm:2762
-#: lib/RT/Ticket_Overlay.pm:2990
-#: lib/RT/Ticket_Overlay.pm:3000
-#: lib/RT/Ticket_Overlay.pm:3005
-#: lib/RT/Ticket_Overlay.pm:3224
-#: lib/RT/Ticket_Overlay.pm:3228
-#: lib/RT/Ticket_Overlay.pm:3371
-#: lib/RT/Ticket_Overlay.pm:3497
-#: lib/RT/Transaction_Overlay.pm:516
-#: lib/RT/Transaction_Overlay.pm:523
-#: lib/RT/Transaction_Overlay.pm:551
-#: lib/RT/Transaction_Overlay.pm:558
-#: lib/RT/User_Overlay.pm:1176
-#: lib/RT/User_Overlay.pm:1856
-#: lib/RT/User_Overlay.pm:369
-#: lib/RT/User_Overlay.pm:735
-#: lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Tillgång nekas"
-#: lib/RT/Template_Overlay.pm:238
-#: lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr "Tillgång nekas"
-#: lib/RT/Template_Overlay.pm:372
+#: NOT FOUND IN SOURCE
msgid "Permissions denied"
msgstr "Tillgång nekas"
-#: html/User/Elements/Tabs:56
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "Personliga grupper"
-#: html/User/Groups/index.html:51
-#: html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "Personliga grupper"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "Personliga grupper:"
-#: html/Admin/Users/Modify.html:180
-#: html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Telefonnummer"
-#: html/Elements/Header:93
-#: html/Elements/Tabs:91
-#: html/SelfService/Elements/Tabs:95
-#: html/SelfService/Prefs.html:46
-#: html/User/Prefs.html:46
-#: html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Preferenser"
-#. ($pane, $UserObj->Name)
-#: html/Admin/Users/MyRT.html:75
+#: NOT FOUND IN SOURCE
msgid "Preferences %1 for user %2 ."
msgstr "Preferenser %1 för användare %2 ."
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
-#: html/Prefs/MyRT.html:141
msgid "Preferences saved for %1."
msgstr "Preferenser har sparats för %1."
-#: lib/RT/Action/Generic.pm:195
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Förbered tömning"
-#: html/Helpers/CalPopup.html:56
-#: html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Föreg."
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Föregående sida"
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
-#: lib/RT/ACE_Overlay.pm:157
-#: lib/RT/ACE_Overlay.pm:239
-#: lib/RT/ACE_Overlay.pm:569
msgid "Principal %1 not found."
msgstr "Principal %1 ej funnen."
-#: html/Search/Elements/PickBasics:147
-#: html/Ticket/Create.html:181
-#: html/Ticket/Elements/EditBasics:92
-#: html/Ticket/Elements/ShowBasics:72
-#: lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Prioritet"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Prioritet börjar vid"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Privat:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Privilegierad"
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
-#: html/Admin/Users/Modify.html:342
-#: html/User/Prefs.html:231
msgid "Privileged status: %1"
msgstr "Privilegierad status: %1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Privilegierade användare"
-#: etc/initialdata:23
-#: etc/initialdata:29
-#: etc/initialdata:35
-#: etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "Pseudogrupp för internt bruk"
-#: html/Search/Build.html:121
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Söksträngsbyggare"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "Söksträng:"
-#: html/Elements/QueueSummary:48
-#: html/Elements/QuickCreate:54
-#: html/Search/Elements/PickBasics:71
-#: html/SelfService/Create.html:54
-#: html/Ticket/Create.html:62
-#: html/Ticket/Elements/EditBasics:57
-#: html/Ticket/Elements/ShowBasics:76
-#: html/Tools/Reports/CreatedByDates.html:85
-#: html/Tools/Reports/ResolvedByDates.html:86
-#: html/Tools/Reports/ResolvedByOwner.html:66
-#: html/User/Elements/DelegateRights:101
-#: lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Kö"
-#. ($id)
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
-#: html/Admin/Queues/CustomField.html:63
-#: html/Admin/Queues/Scrip.html:61
-#: html/Admin/Queues/Scrips.html:69
-#: html/Admin/Queues/Templates.html:65
+#. ($id)
msgid "Queue %1 not found"
msgstr "Kö %1 ej funnen"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Könamn"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Kö finns redan"
-#: lib/RT/Queue_Overlay.pm:374
-#: lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Kö kan ej skapas"
-#: html/Ticket/Create.html:244
-#: lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Kö kan ej inläsas."
-#: docs/design_docs/string-extraction-guide.txt:83
-#: lib/RT/Queue_Overlay.pm:384
-#: lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Kö har skapats"
-#: html/SelfService/Display.html:126
-#: lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Kö ej funnen"
-#: html/Admin/Elements/Tabs:59
-#: html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Köer"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Köer som jag administrerar"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Köer som jag är en Admin.kopia-mottagare för"
-#: html/Elements/Quicksearch:47
-#: html/Prefs/Elements/Tabs:58
-#: html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Snabbsökning"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Snabbt ärendeskapande"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr "RSS"
-#. ($RT::VERSION, $RT::rtname)
-#: docs/design_docs/string-extraction-guide.txt:70
-#: lib/RT/StyleGuide.pod:796
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 för %2"
-#: html/Admin/index.html:46
-#: html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "RT-administration"
-#: html/Elements/Error:63
-#: html/SelfService/Error.html:62
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "RT-fel"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "RT-variabler"
-#: html/Admin/Elements/SystemTabs:71
-#: html/Admin/Elements/UserTabs:67
-#: html/Admin/Global/MyRT.html:1
-#: html/Admin/Global/MyRT.html:12
-#: html/Admin/Global/MyRT.html:4
-#: html/Admin/Global/index.html:84
-#: html/Admin/Users/MyRT.html:21
-#: html/Prefs/MyRT.html:66
-#: html/Prefs/MyRT.html:78
-#: html/User/Elements/Tabs:65
-#: html/index.html:1
-#: html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "RT-snabbtitt"
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
-#: html/Admin/Users/MyRT.html:30
msgid "RT at a glance for the user %1"
msgstr "RT-snabbtitt för användaren %1"
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr "RT kan innehålla innehåll från annan webbtjänst när detta extrafält visas."
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "RT kan göra alternativen för detta extrafält till hyperlänkar till annan tjänst."
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT har inte utrymme för din session."
-#. ($RT::rtname)
-#: html/Elements/Logo:49
-#: html/Elements/PageLayout:172
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "RT för %1"
-#: html/Search/Simple.html:60
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "RT kommer att söka efter allt annat som du matar in i ärendeämnen."
-#: html/Admin/CustomFields/Modify.html:108
-#: html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr "RT kommer att ersätta <tt>__id__</tt> och <tt>__ExtraFält__</tt> med register-ID och extrafältvärde respektive"
-#: html/Admin/Users/Modify.html:79
-#: html/User/Prefs.html:69
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Fullständigt namn"
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:725
msgid "Reference by %1 added"
msgstr "Referens från %1 tillagd"
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:765
msgid "Reference by %1 deleted"
msgstr "Referens från %1 raderad"
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:722
msgid "Reference to %1 added"
msgstr "Referens till %1 tillagd"
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
-#: lib/RT/Transaction_Overlay.pm:762
msgid "Reference to %1 deleted"
msgstr "Referens till %1 raderad"
-#: html/Elements/EditLinks:103
-#: html/Elements/EditLinks:156
-#: html/Elements/ShowLinks:92
-#: html/Ticket/Create.html:225
-#: html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Refererad till av"
-#: html/Elements/EditLinks:152
-#: html/Elements/EditLinks:94
-#: html/Elements/SelectLinkType:49
-#: html/Elements/ShowLinks:82
-#: html/Ticket/Create.html:224
-#: html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Refererar till"
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
-#: html/Elements/Refresh:57
msgid "Refresh this page every %1 minutes."
msgstr "Återinläs denna sida var %1 minut."
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:811
msgid "Reminder '%1' added"
msgstr "PÃ¥minnelse '%1' tillagd"
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:824
msgid "Reminder '%1' completed"
msgstr "Påminnelse '%1' genomförd"
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
-#: lib/RT/Transaction_Overlay.pm:817
msgid "Reminder '%1' reopened"
msgstr "Påminnelse '%1' öppnad igen"
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
-#: html/Ticket/Reminders.html:46
msgid "Reminder ticket #%1"
msgstr "Påminnelse ärende #%1"
-#: html/Elements/MyReminders:48
-#: html/Ticket/Elements/ShowSummary:75
-#: html/Ticket/Elements/Tabs:122
-#: html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "PÃ¥minnelser"
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
-#: html/Ticket/Reminders.html:50
msgid "Reminders for ticket #%1"
msgstr "Påminnelse för ärende #%1"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Ta bort Admin.kopia"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Ta bort kopia"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "Ta bort rekvirent"
-#: html/Ticket/Elements/ShowTransaction:179
-#: html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Svar"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Svarsadress"
-#: html/Search/Bulk.html:129
-#: html/Ticket/ModifyAll.html:94
-#: html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "Svar till rekvirenter"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Svar på ärenden"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "SvarTillÄrende"
-#: html/Tools/Elements/Tabs:59
-#: html/Tools/Reports/index.html:46
-#: html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Rapporter"
-#: etc/initialdata:44
-#: lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "Rekvirent"
-#: html/SelfService/Create.html:63
-#: html/Ticket/Create.html:80
-#: html/Ticket/Elements/EditPeople:69
-#: html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "Rekvirenter"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "Förfrågningar borde förfalla"
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
-#: lib/RT/Attribute_Overlay.pm:146
msgid "Required parameter '%1' not specified"
msgstr "Nödvändig parameter '%1' ej specificerad"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Reset"
-#: html/Admin/Users/MyRT.html:15
-#: html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr "Reset till default"
-#: html/Admin/Users/Modify.html:183
-#: html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Hemma"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Lös"
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
-#: html/Ticket/Update.html:156
msgid "Resolve ticket #%1 (%2)"
msgstr "Lös ärende #%1 (%2)"
-#: etc/initialdata:323
-#: html/Elements/SelectDateType:49
-#: lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Löst"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Löst av ägare"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Löst i datumordning"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Lösta ärenden under period, grupperade efter ägare"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Lösta ärenden, grupperade efter ägare"
-#: html/Elements/ListActions:46
-#: html/Search/Elements/NewListActions:47
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Resultat"
-#: html/Admin/Users/Modify.html:126
-#: html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Skriv in lösenord igen"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "GÃ¥ tillbaka"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Rättighet överlämnad"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Rättighet tilldelad"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Rättighet inläst"
-#: lib/RT/ACE_Overlay.pm:695
-#: lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Rättighet kan inte återkallas"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Rättighet ej funnen"
-#: lib/RT/ACE_Overlay.pm:560
-#: lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Rättighet ej inläst."
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Rättighet återkallad"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Rättigheter"
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
-#: html/Admin/CustomFields/GroupRights.html:129
-#: lib/RT/Interface/Web.pm:961
msgid "Rights could not be granted for %1"
msgstr "Rättigheter kan inte tilldelas %1"
-#. ($object_type)
-#: html/Admin/CustomFields/GroupRights.html:156
-#: lib/RT/Interface/Web.pm:990
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "Rättigheter kan inte återkallas för %1"
-#: html/Admin/Global/GroupRights.html:72
-#: html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Roller"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Rader per box"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Rader per sida"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Lör."
-#: html/Prefs/MyRT.html:72
-#: html/Prefs/Quicksearch.html:64
-#: html/Prefs/Search.html:69
-#: html/Search/Elements/EditSearches:70
-#: html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Spara"
-#: html/Admin/Global/Template.html:67
-#: html/Admin/Groups/Modify.html:88
-#: html/Admin/Queues/Modify.html:111
-#: html/Admin/Queues/People.html:126
-#: html/Admin/Users/Modify.html:239
-#: html/Prefs/Quicksearch.html:64
-#: html/Prefs/SearchOptions.html:63
-#: html/SelfService/Prefs.html:58
-#: html/Ticket/Modify.html:60
-#: html/Ticket/ModifyAll.html:127
-#: html/Ticket/ModifyDates.html:60
-#: html/Ticket/ModifyLinks.html:61
-#: html/Ticket/ModifyPeople.html:60
-#: html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "Spara ändringar"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Spara preferenser"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "Spara ändringar"
-#. ($name)
-#: lib/RT/SavedSearch.pm:173
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Saved search %1"
msgstr "Spara sökning %1"
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
-#. ($scrip->Id)
-#: html/Admin/Elements/ListGlobalScrips:60
-#: html/Admin/Global/Scrip.html:77
-#: html/Admin/Queues/Scrip.html:84
msgid "Scrip #%1"
msgstr "Scrip #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Scrip har skapats"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Scrip-fält"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Scrip har raderats"
-#: html/Admin/Elements/QueueTabs:67
-#: html/Admin/Elements/SystemTabs:54
-#: html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Scrips"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Scrips som gäller alla köer"
-#: html/Elements/SimpleSearch:48
-#: html/Search/Simple.html:65
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Sökning"
-#: html/Prefs/SearchOptions.html:47
-#: html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Sökpreferenser"
-#: lib/RT/SavedSearch.pm:115
+#: NOT FOUND IN SOURCE
msgid "Search attribute load failure"
msgstr "Sökattributinläsningsfel"
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Sök efter godkännanden"
-#: html/Search/Simple.html:69
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Sök efter ärenden"
-#: html/Search/Simple.html:57
+#: NOT FOUND IN SOURCE
msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name"
msgstr "Sök efter ärenden. Skriv <strong>id</strong> nummer, <strong>köer</strong> med namn"
-#: html/User/Elements/Tabs:62
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Sökalternativ"
-#. ($PrimaryGroupBy)
-#: html/Search/Chart.html:56
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Sökresultat grupperade efter %1"
-#. ($msg)
-#: lib/RT/SavedSearch.pm:203
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Search update: %1"
msgstr "Sökuppdatering: %1"
-#: html/Search/Simple.html:59
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "Att söka igenom all text i alla ärenden kan ta lång tid, men om du måste göra det kan du söka efter vilket ord som helst i hela ärendehistoriken genom att skriva <b>fulltext:<i>word</i></b>."
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Säkerhet:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Se även:"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Se extrafält"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Se exakt utgående e-postmeddelanden och deras mottagare"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Se privata kommentarer för ärende"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Se sammanfattningar av ärenden"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "SeExtraFält"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "SeGrupp"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "SeKö"
-#: html/Admin/CustomFields/index.html:46
-#: html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Välj ett extrafält"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Välj en grupp"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Välj en kö"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Välj en kö för ditt nya ärende"
-#: html/Admin/Users/index.html:46
-#: html/Admin/Users/index.html:49
-#: html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Välj en användare"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Välj ett extrafält"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Välj extrafält för alla användargrupper"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Välj extrafält för alla användare"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Välj extrafält för ärenden i alla köer"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Välj extrafält för transaktioner på alla ärenden i alla köer"
-#: html/Admin/Elements/GroupTabs:75
-#: html/User/Elements/GroupTabs:71
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Välj grupp"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Välj flera värden"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Välj ett värde"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Välj kö"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "Välj kö som skall visas på \"RT-snabbtitt\" -sidan"
-#: html/Admin/Global/Scrip.html:59
-#: html/Admin/Global/Scrips.html:57
-#: html/Admin/Queues/Scrip.html:67
-#: html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Välj scrip"
-#: html/Admin/Global/Template.html:78
-#: html/Admin/Global/Templates.html:57
-#: html/Admin/Queues/Template.html:76
-#: html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Välj mall"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "Välj upp till %1 värden"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Välj användare"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Valda extrafält"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Valda objekt"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Urval modifierat. Var god spara dina ändringar"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Skicka e-post till alla observatörer"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Skicka e-post till alla observatörer som en \"kommentar\""
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "Skicka e-post till rekvirenter och kopia-mottagare"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "Skicka e-post till rekvirenter och kopia-mottagare som en kommentar"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "Skicka ett meddelande till rekvirenterna"
-#: etc/initialdata:125
-#: etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Skicka e-post till explicita kopia-mottagare och hemlig kopia-mottagare"
-#: etc/initialdata:94
-#: etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Skicka e-post till kopia-mottagarna"
-#: etc/initialdata:90
-#: etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Skicka e-post till kopia-mottagarna som en kommentar"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Skicka e-post till de administrativa kopia-mottagarna"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Skicka e-post till de administrativa kopia-mottagarna som en kommentar"
-#: etc/initialdata:82
-#: etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Skicka e-post till ägaren"
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Sep."
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Visa"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Visa godkännanden"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Visa kolumner"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Visa resultat"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Visa godkända förfrågningar"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Visa grunddata"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Visa avvisade förfrågningar"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Visa detaljer"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Visa väntande förfrågningar"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Visa förfrågningar som väntar på andra godkännanden"
@@ -4588,127 +6030,189 @@ msgstr "Visa förfrågningar som väntar på andra godkännanden"
msgid "ShowACL"
msgstr "VisaACL"
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr "VisaKonfigurationTab"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr "VisaUtgåendeE-post"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr "VisaSparadeSökningar"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr "VisaScrips"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr "VisaMall"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "VisaÄrende"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "VisaÄrendeKommentarer"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Registrera som ärenderekvirent eller ärende eller kö-kopia"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Registrera som ärende eller kö-Admin.kopia"
-#: html/Admin/Users/Modify.html:230
-#: html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Signatur"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Enkel sökning"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "En enda"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Storlek"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Hoppa över meny"
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Liten"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "Vissa webbläsare läser kanske bara in innehåll från samma domän som din RT-server."
-#: html/Admin/Elements/AddCustomFieldValue:49
-#: html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Sortera"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "Steg"
-#: html/Elements/SelectDateType:48
-#: html/Ticket/Elements/EditDates:53
-#: html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Påbörjad"
-#: html/Elements/SelectDateType:52
-#: html/Ticket/Create.html:208
-#: html/Ticket/Elements/EditDates:48
-#: html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "Börjar"
-#: html/Admin/Users/Modify.html:162
-#: html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Läge"
-#: html/Search/Elements/PickBasics:87
-#: html/SelfService/Update.html:57
-#: html/Ticket/Create.html:66
-#: html/Ticket/Elements/EditBasics:53
-#: html/Ticket/Elements/ShowBasics:52
-#: html/Ticket/Update.html:59
-#: lib/RT/Ticket_Overlay.pm:1166
-#: lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Status"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Statusändring"
-#: html/Ticket/Elements/Tabs:178
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Stjäl"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Stjäl ärenden"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr "StjälÄrende"
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
-#: lib/RT/Transaction_Overlay.pm:678
msgid "Stolen from %1"
msgstr "Stulen från %1"
@@ -4716,905 +6220,1359 @@ msgstr "Stulen från %1"
msgid "Stolen from %1 "
msgstr "Stulen från %1 "
-#: html/Search/Elements/EditFormat:81
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Stil"
-#: html/Elements/QuickCreate:52
-#: html/Elements/SelectAttachmentField:47
-#: html/Search/Bulk.html:132
-#: html/SelfService/Create.html:79
-#: html/SelfService/Update.html:65
-#: html/Ticket/Create.html:108
-#: html/Ticket/Elements/EditBasics:48
-#: html/Ticket/Elements/Reminders:125
-#: html/Ticket/ModifyAll.html:100
-#: html/Ticket/Update.html:82
-#: lib/RT/Ticket_Overlay.pm:1162
-#: lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Ämne"
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
-#: docs/design_docs/string-extraction-guide.txt:89
-#: lib/RT/StyleGuide.pod:815
-#: lib/RT/Transaction_Overlay.pm:700
msgid "Subject changed to %1"
msgstr "Ämne ändrat till %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Skicka"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Genomförd"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Sön."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr "SuperAnvändare"
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "System"
-#: html/Admin/Elements/ToolTabs:54
-#: html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Systemkonfiguration"
-#: html/Admin/CustomFields/GroupRights.html:128
-#: html/Admin/CustomFields/GroupRights.html:155
-#: html/Admin/CustomFields/UserRights.html:128
-#: html/Admin/CustomFields/UserRights.html:98
-#: html/Admin/Elements/SelectRights:106
-#: lib/RT/ACE_Overlay.pm:584
-#: lib/RT/Interface/Web.pm:960
-#: lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Systemfel"
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
-#: lib/RT/Transaction_Overlay.pm:224
-#: lib/RT/Transaction_Overlay.pm:230
msgid "System Error: %1"
msgstr "Systemfel: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Systemverktyg"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Systemfel. Rättighet inte överlåten."
-#: lib/RT/ACE_Overlay.pm:163
-#: lib/RT/ACE_Overlay.pm:228
-#: lib/RT/ACE_Overlay.pm:323
-#: lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Systemfel. Rättighet inte tilldelad."
-#: html/Admin/CustomFields/GroupRights.html:58
-#: html/Admin/Global/GroupRights.html:56
-#: html/Admin/Groups/GroupRights.html:58
-#: html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Systemgrupper"
-#: etc/initialdata:41
-#: etc/initialdata:47
-#: etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "SystemRollgrupp för internt bruk"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "TEST_STRING"
-#: etc/initialdata:603
-#: html/Search/Elements/EditFormat:72
-#: html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Ta"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Ta ärenden"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "TaÄrende"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Taget"
-#: html/Admin/Elements/EditScrip:71
-#: html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Mall"
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
-#: html/Admin/Global/Template.html:112
-#: html/Admin/Queues/Template.html:113
msgid "Template #%1"
msgstr "Mall #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Mall har raderats"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr "Mall är obligatorisk parameter"
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Mall ej funnen"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Mall har parsats"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Mallparsfel"
-#: html/Admin/Elements/QueueTabs:70
-#: html/Admin/Elements/SystemTabs:57
-#: html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Mallar"
-#: lib/RT/CustomField_Overlay.pm:943
-#: lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Det är redan det nuvarande värdet"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Det är inte ett värde för detta extrafält"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Det är samma värde"
-#: lib/RT/ACE_Overlay.pm:305
-#: lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Principalen har redan den rättigheten"
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:753
msgid "That principal is already a %1 for this queue"
msgstr "Principalen är redan en %1 för denna kö"
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
-#: lib/RT/Ticket_Overlay.pm:1435
msgid "That principal is already a %1 for this ticket"
msgstr "Principalen är redan en %1 för detta ärende"
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
-#: lib/RT/Queue_Overlay.pm:852
msgid "That principal is not a %1 for this queue"
msgstr "Principalen är inte en %1 för denna kö"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Kön finns ej"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Ärendet har olösta avhängigheter"
-#: lib/RT/Action/CreateTickets.pm:710
-#: lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Ärendet tillhör redan den användaren"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Användaren finns ej"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Användaren är redan privilegierad"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Användaren är redan icke-privilegierad"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Användaren är nu privilegierad"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Användaren är nu icke-privilegierad"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Användaren äger kanske inte ärenden i den kön"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Det är inte något numeriskt ID"
-#: html/SelfService/Display.html:53
-#: html/Ticket/Create.html:177
-#: html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Grunddata"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "Kopia för ett ärende"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "Adminstrativ kopia för ett ärende"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Följande kommando kommer att ta fram alla aktiva ärenden i kön 'general' och sätta deras prioritet som 99 om de inte rörts på 4 timmar:"
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Det nya värdet har satts."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "Ägaren till ett nytt ärende"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Rekvirenten till ett ärende"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Dessa kommentarer är vanligtvis inte synliga för användaren"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Detta extrafält gäller inte för det objektet"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Denna delen är endast tillgänglig för systemadministratörer"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Meddelandet kommer att skickas till..."
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Detta verktyg ger användaren möjlighet att köra godtyckliga perl-moduler inifrån RT."
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Denna transaktion tycks inte ha något innehåll"
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
-#: html/Ticket/Elements/ShowRequestor:70
msgid "This user's %1 highest priority tickets"
msgstr "Denna användares %1 högst prioriterade ärenden"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Tor."
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
-#: html/Ticket/ModifyAll.html:46
-#: html/Ticket/ModifyAll.html:50
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Ärende #%1 Jumbo uppdatering: %2"
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#: html/Approvals/Elements/ShowDependency:67
msgid "Ticket #%1: %2"
msgstr "Ärende #%1: %2"
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
-#: lib/RT/Action/CreateTickets.pm:1350
-#: lib/RT/Action/CreateTickets.pm:1359
-#: lib/RT/Action/CreateTickets.pm:605
-#: lib/RT/Action/CreateTickets.pm:729
-#: lib/RT/Action/CreateTickets.pm:741
msgid "Ticket %1"
msgstr "Ärende %1"
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
-#: lib/RT/Ticket_Overlay.pm:755
-#: lib/RT/Ticket_Overlay.pm:775
msgid "Ticket %1 created in queue '%2'"
msgstr "Ärende %1 har skapats i kö '%2'"
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
-#: html/Search/Bulk.html:377
msgid "Ticket %1: %2"
msgstr "Ärende %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Ärende extrafält"
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
-#: html/Ticket/History.html:46
-#: html/Ticket/History.html:49
msgid "Ticket History # %1 %2"
msgstr "Ärendehistorik # %1 %2"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Ärende löst"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69
-#: html/Admin/Global/CustomFields/index.html:81
-#: lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Ärendetransaktioner"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Ärendeinnehåll"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Ärendeinnehållstyp"
-#: lib/RT/Ticket_Overlay.pm:603
-#: lib/RT/Ticket_Overlay.pm:617
-#: lib/RT/Ticket_Overlay.pm:628
-#: lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Ärende kan inte skapas på grund av ett internt fel"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Ärende metadata"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Ärendestatus ändrad"
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
-#: lib/RT/Search/FromSQL.pm:82
msgid "TicketSQL search module"
msgstr "ÄrendeSQL sökmodul"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64
-#: html/Admin/Global/CustomFields/index.html:75
-#: html/Elements/Tabs:71
-#: html/Search/Elements/Chart:109
-#: lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Ärenden"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Ärenden har skapats efter"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Ärenden har skapats före"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Ärenden lösta efter"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Ärenden lösta före"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Ärenden som är beroende av detta godkännande:"
-#: html/Search/Elements/PickBasics:134
-#: html/Ticket/Create.html:183
-#: html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Uppskattad tid"
-#: html/Search/Elements/PickBasics:135
-#: html/Ticket/Create.html:196
-#: html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Resterande tid"
-#: html/Search/Elements/PickBasics:133
-#: html/Ticket/Create.html:189
-#: html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Använd tid"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Resterande tid"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Tid för visning"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Använd tid"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "AnvändTid"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Titel"
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
-#: html/Elements/Footer:62
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Förfrågan om support, utbildning, kundutveckling eller licensiering, var god kontakta %1."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Uppgivet"
-#: html/Admin/Elements/Tabs:68
-#: html/Admin/index.html:88
-#: html/Elements/Tabs:74
-#: html/Tools/index.html:46
-#: html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Verktyg"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Totalt"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Transaktion"
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
-#: lib/RT/Transaction_Overlay.pm:805
msgid "Transaction %1 purged"
msgstr "Transaktion %1 har tömts"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Transaktion har skapats"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Transaktion extrafält"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaktion->Skapa gick inte eftersom du inte specificerade en objekttyp och ID"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Transaktioner är oföränderliga"
-#: lib/RT/Date.pm:418
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Tis."
-#: html/Admin/CustomFields/Modify.html:66
-#: html/Admin/Elements/EditCustomField:65
-#: html/Ticket/Elements/AddWatchers:54
-#: html/Ticket/Elements/AddWatchers:65
-#: html/Ticket/Elements/AddWatchers:75
-#: lib/RT/Ticket_Overlay.pm:1168
-#: lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Typ"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Ej implementerad"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unix-inloggning"
-#. ($ContentEncoding)
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
-#: lib/RT/Attachment_Overlay.pm:289
-#: lib/RT/Record.pm:861
+#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Okänd InnehållsKodning %1"
-#: html/Search/Build.html:455
-#: lib/RT/Report/Tickets.pm:410
+#: NOT FOUND IN SOURCE
msgid "Unknown field: $key"
msgstr "Okänt fält: $nyckel"
-#: html/Elements/SelectResultsPerPage:58
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Obegränsat"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Ej namngiven sökning"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Icke-privilegierad"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Ej valda extrafält"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Ej valda objekt"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Ej tagen"
-#: html/Admin/Elements/EditScrip:128
-#: html/Elements/RT__Ticket/ColumnMap:302
-#: html/Search/Bulk.html:193
-#: html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Uppdatera"
-#: html/Ticket/Update.html:135
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Uppdatera ärende"
-#: html/Search/Bulk.html:126
-#: html/Ticket/ModifyAll.html:87
-#: html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Uppdatera typ"
-#: html/Search/Bulk.html:200
-#: html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Uppdatera flera ärenden"
-#: lib/RT/Action/CreateTickets.pm:750
-#: lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Uppdatera icke-inlästa."
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Uppdatera ärende"
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
-#: html/SelfService/Update.html:112
-#: html/SelfService/Update.html:47
msgid "Update ticket #%1"
msgstr "Uppdatera ärende #%1"
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
-#: html/Ticket/Update.html:158
msgid "Update ticket #%1 (%2)"
msgstr "Uppdatera ärende #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748
-#: lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Uppdateringstyp är varken korrespondens eller kommentar."
-#: html/Elements/SelectDateType:54
-#: html/Ticket/Elements/ShowDates:72
-#: lib/RT/CustomField_Overlay.pm:1284
-#: lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Uppdaterad"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Överför"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Överför flera filer"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Överför flera bilder"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Överför en fil"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Överför en bild"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "Överför upp till %1 filer"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "Överför upp till %1 bilder"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Överför dina ändringar"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Använd annat RT-administrativt verktyg"
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
-#: lib/RT/Ticket_Overlay.pm:506
msgid "User '%1' could not be found."
msgstr "Det gick inte att hitta användare '%1'."
-#: etc/initialdata:132
-#: etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Användardefinierad"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Användardefinierade villkor och handlingar"
-#: html/Admin/Elements/CustomFieldTabs:72
-#: html/Admin/Elements/GroupTabs:68
-#: html/Admin/Elements/QueueTabs:85
-#: html/Admin/Elements/SystemTabs:68
-#: html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Användarrättigheter"
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
-#: html/Admin/Users/Modify.html:301
msgid "User could not be created: %1"
msgstr "Det gick inte att skapa användare: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Användare har skapats"
-#: html/Admin/CustomFields/GroupRights.html:74
-#: html/Admin/Global/GroupRights.html:88
-#: html/Admin/Groups/GroupRights.html:75
-#: html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Användardefinierade grupper"
-#: lib/RT/User_Overlay.pm:592
-#: lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Användare har lästs in"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Användardefinierade grupper"
-#: html/Admin/Users/Modify.html:69
-#: html/Elements/Login:90
-#: html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Användarnamn"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55
-#: html/Admin/Elements/SelectNewGroupMembers:47
-#: html/Admin/Elements/Tabs:53
-#: html/Admin/Global/CustomFields/index.html:64
-#: html/Admin/Groups/Members.html:76
-#: html/Admin/Queues/People.html:89
-#: html/Admin/index.html:62
-#: html/User/Groups/Members.html:79
-#: lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Användare"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Användare som matchar kriterier"
-#. ($transaction->id)
-#: bin/rt-crontool:134
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr "Använder transaktion #%1..."
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Giltig söksträng"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Bekräftelse"
-#: html/Admin/CustomFields/Modify.html:130
-#: html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "Värden"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Observera"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "ObserveraSomAdmin.kopia"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Observatörer"
-#: lib/RT/Date.pm:419
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "ons"
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Ons."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr "onsdag"
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr "Välkommen till RT!"
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr "Vad jag gjorde i dag"
-#: etc/initialdata:521
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr "Vad är RT?"
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "När ett ärende har godkänts av alla godkännare, lägg till korrespondens till originalärendet"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "När ett ärende har godkänts av någon godkännare, lägg till korrespondens till originalärendet"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "När ett ärende har skapats"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "När ett godkännandeärende skapas, meddela ägaren och Admin.kopia-mottagare om delen som väntar på deras godkännande"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "När något händer"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "När ett ärende har lösts"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "När ett ärendes ägare byts ut"
-#: etc/initialdata:178
-#: etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "När ett ärendes prioritet ändras"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "När ett ärendes kö ändras"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "När ett ärendes status ändras"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "När det förekommer ett användardefinierat villkor"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "När det kommer in kommentarer"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "När det kommer in korrespondens"
-#: html/Admin/Users/Modify.html:188
-#: html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Arbete"
-#: html/Search/Results.html:82
+#: NOT FOUND IN SOURCE
msgid "Work offline"
msgstr "Arbeta offline"
-#: html/Ticket/Elements/ShowBasics:63
-#: html/Ticket/Update.html:64
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Arbetat"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "Ja"
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Det här ärendet tillhör redan dig"
-#: html/autohandler:214
-#: html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Du är inte en auktoriserad användare"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr "Du kan även redigera själva den fördefinierade sökningen"
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Du kan endast dela ut ärenden som tillhör dig eller som inte tillhör någon"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr "Du kan endast ta ärenden som inte tillhör någon"
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
-#: docs/design_docs/string-extraction-guide.txt:47
-#: lib/RT/StyleGuide.pod:780
msgid "You found %1 tickets in queue %2"
msgstr "Du fann %1 ärenden i kö %2"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "Du har loggat av från RT."
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Du har inte tillåtelse att skapa ärenden i den kön."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Du får inte skapa förfrågningar i den kön."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "Du måste ange ett administrativt lösenord"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Du är välkommen att logga in igen"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "Din förfrågan har godkänts av %1. Andra godkännanden inväntas kanske fortfarande."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "Din förfrågan har godkänts."
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Din förfrågan avvisades."
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Ditt användarnamn eller lösenord är inte korrekt"
-#: html/Admin/Users/Modify.html:168
-#: html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Zip"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[ingen]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Efter"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "tillåt skapande av sparade sökningar"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "tillåt inläsning av sparade sökningar"
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
-#: html/User/Elements/DelegateRights:80
msgid "as granted to %1"
msgstr "som givet till %1"
-#: html/Search/Results.html:83
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Före"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "chart"
msgstr "diagram"
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "stängd"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "innehåller"
-#: html/Admin/Queues/Modify.html:98
-#: lib/RT/Date.pm:346
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr "varje dag"
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "varje dag kl. %1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "dagar"
@@ -5622,144 +7580,223 @@ msgstr "dagar"
msgid "deleted"
msgstr "raderad"
-#: html/Search/Elements/PickBasics:61
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "matchar inte"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "innehåller inte"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "lika med"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "fel: kan inte flytta ner"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "fel: kan inte flytta till vänster"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "fel: kan inte flytta upp"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "fel: inget att radera"
-#: html/Search/Build.html:533
-#: html/Search/Build.html:552
-#: html/Search/Build.html:574
-#: html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "fel: inget att flytta"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "fel: inget att växla"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "större än"
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
-#: lib/RT/Group_Overlay.pm:214
msgid "group '%1'"
msgstr "grupp '%1'"
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-#: html/Search/Results.html:88
+#: NOT FOUND IN SOURCE
msgid "grouped by %1"
msgstr "grupperad efter %1"
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "timmar"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "ID"
-#: html/Elements/SelectBoolean:53
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:57
-#: html/Search/Elements/PickBasics:162
-#: html/Search/Elements/PickBasics:74
-#: html/Search/Elements/PickBasics:90
-#: html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "är"
-#: html/Elements/SelectBoolean:57
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectMatch:58
-#: html/Search/Elements/PickBasics:163
-#: html/Search/Elements/PickBasics:75
-#: html/Search/Elements/PickBasics:91
-#: html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "är inte"
-#: html/Elements/SelectCustomFieldOperator:59
-#: html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "nyckel avstängd"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "nyckel utgången"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "nyckel återkallad"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "mindre än"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "marginell"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "matchar"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "maximalt djup"
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "min."
-#: lib/RT/Date.pm:354
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "minuter"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr "månadsvis"
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "månatlig (den %1) kl. %2"
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "månader"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "aldrig"
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "ny"
-#: html/Admin/Elements/PickCustomFields:64
-#: html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "nej"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "inget namn"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "inget värde"
-#: html/Admin/Elements/EditQueueWatchers:48
-#: html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "inget"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "inte lika med"
-#: lib/RT/Queue_Local.pm:2
-msgid "offer"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "ingenting"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
msgstr ""
-#: html/SelfService/Elements/MyRequests:82
-#: lib/RT/Queue_Overlay.pm:83
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Vid"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "öppen"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "öppna/stäng"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "annan..."
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
-#: lib/RT/Group_Overlay.pm:219
msgid "personal group '%1' for user '%2'"
msgstr "personlig grupp '%1' för användare '%2'"
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
-#: lib/RT/Group_Overlay.pm:227
msgid "queue %1 %2"
msgstr "kö %1 %2"
@@ -5771,15 +7808,31 @@ msgstr "avvisad"
msgid "resolved"
msgstr "löst"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "från höger till vänster"
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "sek."
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "visa konfigurationstab"
-#: html/Search/Results.html:80
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "spreadsheet"
msgstr "kalkylblad"
@@ -5787,50 +7840,89 @@ msgstr "kalkylblad"
msgid "stalled"
msgstr "i väntläge"
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-#: html/Search/Results.html:89
+#: NOT FOUND IN SOURCE
msgid "style: %1"
msgstr "stil: %1"
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr "summeringsrader"
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
-#: lib/RT/Group_Overlay.pm:222
msgid "system %1"
msgstr "system %1"
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
-#: lib/RT/Group_Overlay.pm:233
msgid "system group '%1'"
msgstr "systemgrupp '%1'"
-#: html/Elements/Error:64
-#: html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "den anropade komponenten specificerade inte varför"
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
-#: lib/RT/Group_Overlay.pm:230
msgid "ticket #%1 %2"
msgstr "ärende #%1 %2"
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "förbehållslös"
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
-#: lib/RT/Group_Overlay.pm:236
msgid "undescribed group %1"
msgstr "icke-beskriven grupp %1"
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
-#: lib/RT/Group_Overlay.pm:211
msgid "user %1"
msgstr "användare %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr "utförlig"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "veckor"
-#: lib/RT/Date.pm:358
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "den port som webbservern kommer att lyssna på, t.ex. 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "Ã¥r"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "ja"
+
diff --git a/rt/lib/RT/I18N/tr.po b/rt/lib/RT/I18N/tr.po
index a12298f..e922ead 100644
--- a/rt/lib/RT/I18N/tr.po
+++ b/rt/lib/RT/I18N/tr.po
@@ -2,591 +2,792 @@
# First Author: Burak Gürsoy <burak@cpan.org>, Jun 2007
msgid ""
msgstr ""
-"Project-Id-Version: RT 3.6.x\n"
-"POT-Creation-Date: 2007-15-06 22:30+0200\n"
-"PO-Revision-Date: 2007-15-06 22:30+0200\n"
-"Last-Translator: Burak Gürsoy <burak@cpan.org>\n"
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-07 20:45+0000\n"
+"Last-Translator: Kevin Falcone <Unknown>\n"
"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
+#: NOT FOUND IN SOURCE
msgid " %1 deleted."
msgstr " %1 silindi."
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 renamed to %2."
msgstr " %1 değeri %2 olarak yeniden adlandırıldı."
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
+#: NOT FOUND IN SOURCE
msgid " %1 saved."
msgstr " %1 kaydedildi."
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
-#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
-msgid "#%1: %2"
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
msgstr ""
-#: html/Elements/ShowSearch:105
-msgid "$1"
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
msgstr ""
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
msgstr ""
-#: lib/RT/URI/fsck_com_rt.pm:256
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr ""
+
+#: lib/RT/URI/fsck_com_rt.pm:231
#. ($self->ObjectType, $self->Object->Id)
msgid "%1 #%2"
msgstr ""
-#: lib/RT/Date.pm:365
+#: lib/RT/Date.pm:368
#. ($s, $time_unit)
msgid "%1 %2"
msgstr ""
-#: lib/RT/Date.pm:401
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr ""
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr ""
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
msgid "%1 %2 %3 %4:%5:%6 %7"
msgstr "%3 %2 %7 %1, %4:%5:%6"
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
#. ($field, $self->NewValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 added"
msgstr "%1 %2 eklendi"
-#: lib/RT/Date.pm:362
+#: lib/RT/Date.pm:365
#. ($s, $time_unit)
msgid "%1 %2 ago"
msgstr "%1 %2 önce"
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
#. ($field, $self->OldValue, $self->NewValue)
msgid "%1 %2 changed to %3"
msgstr "%1: %2 deÄŸeri %3 olarak deÄŸiÅŸtirildi"
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
#. ($field, $self->OldValue)
#. ($self->Field, $principal->Object->Name)
msgid "%1 %2 deleted"
msgstr "%1 %2 silindi"
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr ""
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr ""
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
msgid "%1 %2 with template %3"
msgstr "%1 %2 ile ÅŸablon %3"
-#: html/Ticket/Elements/ShowAttachments:72
+#: share/html/Ticket/Elements/ShowAttachments:75
#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
msgid "%1 (%2) by %3"
msgstr "%1 (%2) oluÅŸturan: %3"
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66
-#. (loc($DefaultStatus))
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
#. (loc($Ticket->Status()))
#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
msgid "%1 (Unchanged)"
msgstr "%1 (DeÄŸiÅŸmemiÅŸ)"
-#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
msgid "%1 - An argument to pass to %2"
msgstr "%1 - %2 komutuna geçilecek bir argüman"
-#: bin/rt-crontool:262
+#: bin/rt-crontool:365
#. ("--verbose")
msgid "%1 - Output status updates to STDOUT"
msgstr "%1 - STDOUT' a gönderilen çıktı durumu güncellemeleri"
-#: bin/rt-crontool:253
-#. ("--template-id")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify id of the template you want to use"
msgstr "%1 - Kullanmak istediğiniz şablonun adını belirtin"
-#: bin/rt-crontool:256
-#. ("--transaction")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
msgstr "%1 - 'first' veya 'last' hareketlerinden hangisini kullanacağınızı belirtin"
-#: bin/rt-crontool:247
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr ""
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
#. ("--action")
msgid "%1 - Specify the action module you want to use"
msgstr "%1 - Kullanmak istediğiniz eylem modülünü belirtin"
-#: bin/rt-crontool:241
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
#. ("--condition")
msgid "%1 - Specify the condition module you want to use"
msgstr "%1 - Kullanmak istediğiniz durum modülünü belirtin"
-#: bin/rt-crontool:234
+#: bin/rt-crontool:335
#. ("--search")
msgid "%1 - Specify the search module you want to use"
msgstr "%1 - Kullanmak istediğiniz arama modülünü belirtin"
-#: bin/rt-crontool:259
-#. ("--transaction-type")
+#: NOT FOUND IN SOURCE
msgid "%1 - Specify the type of a transaction you want to use"
msgstr "%1 - Kullanmak istediğiniz hareket türünü belirtin"
-#: html/Elements/Footer:56
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
msgid "%1 RT %2 Copyright 1996-%3 %4."
msgstr "%1 RT sürüm %2 Telif Hakkı: 1996-%3 %4."
-#: lib/RT/ScripAction_Overlay.pm:150
+#: lib/RT/ScripAction_Overlay.pm:148
#. ($self->Id)
msgid "%1 ScripAction loaded"
msgstr "ScriptAction %1 yüklendi"
-#: lib/RT/Record.pm:1722
+#: lib/RT/Record.pm:1750
#. ($args{'Value'}, $cf->Name)
msgid "%1 added as a value for %2"
msgstr "%1, %2 için bir değer olarak eklendi"
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
#. ($args{'Base'})
#. ($args{'Target'})
msgid "%1 appears to be a local object, but can't be found in the database"
msgstr "%1 yerel bir nesne olarak gözüküyor, fakat veritabanında mevcut değil"
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
#. ($self->BriefDescription , $self->CreatorObj->Name)
#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
msgid "%1 by %2"
msgstr "%1 - %2"
-#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
msgid "%1 changed from %2 to %3"
msgstr "%1, %2 deÄŸerinden %3 deÄŸerine deÄŸiÅŸti"
-#: html/Search/Build.html:213
-#. ($Description)
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
msgid "%1 copy"
msgstr "%1 kopya"
-#: lib/RT/Record.pm:944
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
msgid "%1 could not be set to %2."
msgstr "%1, %2 olarak atanamıyor"
-#: lib/RT/Ticket_Overlay.pm:2787
+#: lib/RT/Ticket_Overlay.pm:2524
#. ($self)
msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
msgstr "%1, durumunu çözülmüş olarak değiştiremiyor. RT' nin veritabanı tutarsız olabilir"
-#: lib/RT/Transaction_Overlay.pm:571
+#: lib/RT/Transaction_Overlay.pm:622
#. ($obj_type)
msgid "%1 created"
msgstr "%1 oluÅŸturuldu"
-#: lib/RT/Transaction_Overlay.pm:576
+#: lib/RT/Transaction_Overlay.pm:633
#. ($obj_type)
msgid "%1 deleted"
msgstr "%1 silindi"
-#: etc/initialdata:593
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
msgid "%1 highest priority tickets I own"
msgstr "Sahibi olduğum yüksek öneme sahip %1 bilet"
-#: bin/rt-crontool:229
+#: bin/rt-crontool:330
#. ($0)
msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
msgstr "%1, biletlere dışarıdan müdahale edebilen bir araçtır (cron gibi)"
-#: lib/RT/Queue_Overlay.pm:863
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
#. ($principal->Object->Name, $args{'Type'})
msgid "%1 is no longer a %2 for this queue."
msgstr "%1, artık bu kuyruk için %2 değil."
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr ""
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
#. ($minutes)
msgid "%1 min"
msgstr "%1 dakika"
-#: etc/initialdata:601
+#: etc/initialdata:564
msgid "%1 newest unowned tickets"
msgstr "Sahibi olmayan en yeni %1 bilet"
-#: lib/RT/CustomField_Overlay.pm:893
+#: lib/RT/CustomField_Overlay.pm:865
msgid "%1 objects"
msgstr "%1 nesne"
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#: NOT FOUND IN SOURCE
msgid "%1 rights"
msgstr "%1 hak"
-#: lib/RT/Action/ResolveMembers.pm:63
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr ""
+
+#: lib/RT/Action/ResolveMembers.pm:64
#. (ref $self)
msgid "%1 will resolve all members of a resolved group ticket."
msgstr "%1, çözülmüş bir grup biletinin tüm üyelerini çözecektir"
-
-#: lib/RT/CustomField_Overlay.pm:894
+#: lib/RT/CustomField_Overlay.pm:866
msgid "%1's %2 objects"
msgstr "%1 için %2 nesne"
-#: lib/RT/CustomField_Overlay.pm:895
+#: lib/RT/CustomField_Overlay.pm:867
msgid "%1's %2's %3 objects"
msgstr "%1 ve %2 için %3 nesne"
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
+#: share/html/Dashboards/Elements/SelectPrivacy:61
#. ($object->Name)
+msgid "%1's dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
#. ($Object->Name)
+#. ($object->Name)
msgid "%1's saved searches"
msgstr "%1 için kaydedilmiş aramalar"
-#: lib/RT/Transaction_Overlay.pm:481
+#: lib/RT/Transaction_Overlay.pm:510
#. ($self)
msgid "%1: no attachment specified"
msgstr "%1: herhangi bir eklenti belirtilmedi"
-#: html/Ticket/Elements/ShowTransactionAttachments:78
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
#. ($size)
msgid "%1b"
msgstr ""
-#: html/Ticket/Elements/ShowTransactionAttachments:75
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
#. (int( $size / 102.4 ) / 10)
msgid "%1k"
msgstr ""
-#: html/Ticket/Elements/ShowTime:49
+#: share/html/Ticket/Elements/ShowTime:51
#. (sprintf("%.1f",$minutes / 60))
msgid "%quant(%1,hour)"
msgstr ""
-#: lib/RT/Ticket_Overlay.pm:1142
+#: lib/RT/Ticket_Overlay.pm:886
#. ($args{'Status'})
msgid "'%1' is an invalid value for status"
msgstr "'%1', durum için geçersiz bir değer"
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
msgid "(Check box to delete)"
msgstr "(Silmek için kutucuğu işaretleyin)"
-#: html/Ticket/Elements/PreviewScrips:99
+#: share/html/Ticket/Elements/PreviewScrips:61
msgid "(Check boxes to disable notifications to the listed recipients)"
msgstr "(Listelenen alıcılara uyarı gitmesini iptal etmek için kutucukları işaretleyin)"
-#: html/Ticket/Elements/PreviewScrips:123
+#: share/html/Ticket/Elements/PreviewScrips:86
msgid "(Check boxes to enable notifications to the listed recipients)"
msgstr "Listelenen alıcılara uyarı gitmesi için kutucukları işaretleyin)"
-#: html/Ticket/Create.html:218
+#: share/html/Ticket/Create.html:226
msgid "(Enter ticket ids or URLs, separated with spaces)"
msgstr "(Boşluklarla ayrılmış olarak, bilet numaralarını veya URL' lerini girin)"
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
msgid "(If left blank, will default to %1)"
msgstr "(Boş bırakılırsa, varsayılan olarak %1 değerini alacaktır)"
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
msgid "(No custom fields)"
msgstr "(Özel alan yok)"
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
msgid "(No members)"
msgstr "(Ãœye yok)"
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
msgid "(No scrips)"
msgstr "(Senet yok)"
-#: html/Admin/Elements/EditTemplates:52
+#: share/html/Admin/Elements/EditTemplates:54
msgid "(No templates)"
msgstr "(Åžablon yok)"
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
msgid "(None)"
msgstr "(Hiçbiri)"
-#: html/Ticket/Update.html:90
+#: NOT FOUND IN SOURCE
msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, görünmez karbon kopya olarak gönderir. İleriki güncellemeleri kimin alıp almayacağını <strong>değiştirmez</strong>.)"
-#: html/Ticket/Create.html:103
+#: share/html/Ticket/Create.html:106
msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, karbon kopya olarak gönderir. Listedeki kişiler ileriki güncellemeleri <strong>alacaktır</strong>.)"
-#: html/Ticket/Update.html:86
+#: NOT FOUND IN SOURCE
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
msgstr "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, karbon kopya olarak gönderir. İleriki güncellemeleri kimin alıp almayacağını <strong>değiştirmez</strong>.)"
-#: html/Ticket/Create.html:93
+#: share/html/Ticket/Create.html:97
msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
msgstr "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, karbon kopya olarak gönderir. Listedeki kişiler ileriki güncellemeleri <strong>alacaktır</strong>.)"
-#: html/Admin/Elements/EditScrip:96
+#: share/html/Admin/Elements/EditScrip:98
msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
msgstr "(Bir durum veya eylem için 'Kullanıcı Tanımlı' yı seçtiğinizde, bu alanları kullanın)"
-#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
msgid "(Will not be sent email)"
msgstr "(Eposta gönderilmeyecek)"
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr ""
+
+#: share/html/User/Groups/index.html:56
msgid "(empty)"
msgstr "(boÅŸ)"
-#: html/Admin/Users/index.html:60
+#: NOT FOUND IN SOURCE
msgid "(no name listed)"
msgstr "(herhangi bir ad listelenmedi)"
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
msgid "(no value)"
msgstr "(deÄŸer yok)"
-#: html/Admin/Elements/EditCustomFieldValues:47
+#: share/html/Admin/Elements/EditCustomFieldValues:49
msgid "(no values)"
msgstr "(deÄŸer yok)"
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
msgid "(only one ticket)"
msgstr "(sadece bir bilet)"
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
msgid "(pending approval)"
msgstr "(onaylanmayı bekliyor)"
-#: html/Elements/RT__Ticket/ColumnMap:152
+#: NOT FOUND IN SOURCE
msgid "(pending other Collection)"
msgstr "(diÄŸer bir Koleksiyonu bekliyor)"
-#: html/Admin/Users/Modify.html:71
+#: share/html/Admin/Users/Modify.html:73
msgid "(required)"
msgstr "(gerekli)"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "(untitled)"
msgstr "(başlıksız)"
-#: html/Ticket/Elements/Reminders:133
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "(yyyy/mm/dd)"
msgstr "(yyyy/aa/gg)"
-#: html/Elements/EditCustomFieldSelect:57
+#: share/html/Elements/EditCustomFieldSelect:59
msgid "-"
msgstr ""
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr "--transaction argümanı sadece 'first' veya 'last' olabilir"
-
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr ""
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
msgstr ""
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr ""
+#: NOT FOUND IN SOURCE
+msgid "--transaction argument could be only 'first' or 'last'"
+msgstr "--transaction argümanı sadece 'first' veya 'last' olabilir"
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
msgstr ""
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
msgstr "<input type=\"submit\" class=\"button\" value=\"Yeni bilet:\" />&nbsp;%1"
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
+#: lib/RT/StyleGuide.pod:779
#. ($m->scomp('/Elements/SelectNewTicketQueue'))
msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
msgstr "<input type=\"submit\" value=\"Yeni bilet:\">&nbsp;%1"
-#: etc/initialdata:218
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
msgid "A blank template"
msgstr "BoÅŸ bir ÅŸablon"
-#: html/Admin/Users/Modify.html:371
+#: share/html/Admin/Users/Modify.html:381
msgid "A password was not set, so user won't be able to login."
msgstr "Bir parola atanmamış, dolayısıyla, kullanıcı giriş yapamayacak"
-#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:171
msgid "ACE not found"
msgstr "ACE bulunamadı"
-#: lib/RT/ACE_Overlay.pm:853
+#: lib/RT/ACE_Overlay.pm:640
msgid "ACEs can only be created and deleted."
msgstr "ACE' ler sadece oluÅŸturulabilir ve silinebilirler."
-#: html/Search/Elements/SelectAndOr:46
+#: share/html/Search/Elements/SelectAndOr:48
msgid "AND"
msgstr "VE"
-#: html/User/Elements/Tabs:53
+#: share/html/User/Elements/Tabs:61
msgid "About me"
msgstr "Hakkımda"
-#: html/Admin/Users/Modify.html:106
+#: share/html/Admin/Users/Modify.html:108
msgid "Access control"
msgstr "EriÅŸim denetimi"
-#: html/Admin/Elements/EditScrip:65
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
msgid "Action"
msgstr "Eylem"
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
+#: NOT FOUND IN SOURCE
msgid "Action %1 not found"
msgstr "%1 eylemi bulunamadı"
-#: bin/rt-crontool:171
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr ""
+
+#: bin/rt-crontool:230
msgid "Action committed.\\n"
msgstr "Eylem yapıldı"
-#: lib/RT/Scrip_Overlay.pm:168
+#: lib/RT/Scrip_Overlay.pm:132
msgid "Action is mandatory argument"
msgstr "Eylem, zorunlu bir argüman"
-#: bin/rt-crontool:167
+#: bin/rt-crontool:226
msgid "Action prepared..."
msgstr "Eylem hazırlanıyor..."
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
msgid "Add"
msgstr "Ekle"
-#: html/Search/Bulk.html:92
+#: share/html/Search/Bulk.html:99
msgid "Add AdminCc"
msgstr "Yöneticiye karbon kopya ekle"
-#: html/Search/Bulk.html:88
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:95
msgid "Add Cc"
msgstr "Karbon kopya ekle"
-#: html/Search/Elements/EditFormat:49
+#: share/html/Search/Elements/EditFormat:51
msgid "Add Columns"
msgstr "Sütun ekle"
-#: html/Search/Elements/PickCriteria:46
+#: share/html/Search/Elements/PickCriteria:48
msgid "Add Criteria"
msgstr "Kıstas ekle"
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
msgid "Add More Files"
msgstr "Daha fazla dosya ekle"
-#: html/Search/Bulk.html:84
+#: share/html/Search/Bulk.html:91
msgid "Add Requestor"
msgstr "İstekçi ekle"
-#: html/Admin/Elements/AddCustomFieldValue:46
+#: share/html/Admin/Elements/AddCustomFieldValue:48
msgid "Add Value"
msgstr "DeÄŸer ekle"
-#: html/Admin/Global/Scrip.html:83
+#: share/html/Admin/Global/Scrip.html:84
msgid "Add a scrip which will apply to all queues"
msgstr "Bütün kuyruklara etki edecek bir senet ekle"
-#: html/Search/Build.html:109 html/Search/Build.html:94
+#: NOT FOUND IN SOURCE
msgid "Add and Search"
msgstr "Ekle ve Ara"
-#: html/Search/Bulk.html:124
+#: share/html/Search/Bulk.html:131
msgid "Add comments or replies to selected tickets"
msgstr "Seçilen senetlere yorum veya cevap ekle"
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
msgid "Add members"
msgstr "Ãœye ekle"
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
msgid "Add new watchers"
msgstr "Yeni gözcüler ekle"
-#: html/Search/Build.html:85
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr ""
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Add these terms to your search"
msgstr "Aramanıza bu terimleri ekleyin"
-#: html/Search/Bulk.html:158
+#: share/html/Search/Bulk.html:181
msgid "Add values"
msgstr "DeÄŸer ekle"
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114
msgid "Add, delete and modify custom field values for objects"
msgstr "Nesneler için, kişiselleştirilmiş alanları ekleyin, silin ve değiştirin"
-#: lib/RT/Queue_Overlay.pm:763
+#: lib/RT/Queue_Overlay.pm:848
#. ($args{'Type'})
msgid "Added principal as a %1 for this queue"
msgstr "Bu kuyruk için, asıl, %1 olarak eklendi"
-#: lib/RT/Ticket_Overlay.pm:1455
+#: lib/RT/Ticket_Overlay.pm:1146
#. ($self->loc($args{'Type'}))
msgid "Added principal as a %1 for this ticket"
msgstr "Bu bilet için, asıl, %1 olarak eklendi"
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
msgid "Address1"
msgstr "Adres1"
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
msgid "Address2"
msgstr "Adres2"
-#: html/Ticket/Create.html:98
+#: share/html/Ticket/Create.html:102
msgid "Admin Cc"
msgstr "Yönetici Karbon Kopya"
-#: etc/initialdata:295
+#: etc/initialdata:270
msgid "Admin Comment"
msgstr "Yönetici Yorumu"
-#: etc/initialdata:274
+#: etc/initialdata:249
msgid "Admin Correspondence"
msgstr "Yönetici Yazışması"
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
msgid "Admin queues"
msgstr "Yönetici kuyrukları"
-
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
msgid "Admin/Global configuration"
msgstr "Yönetici/Küresel ayarlar"
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
msgid "AdminCc"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:106
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "AdminCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "AdminGroup"
msgstr ""
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "AdminGroupMembership"
msgstr ""
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:83
msgid "AdminOwnPersonalGroups"
msgstr ""
@@ -594,197 +795,258 @@ msgstr ""
msgid "AdminQueue"
msgstr ""
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "AdminUsers"
msgstr ""
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
msgid "Administrative Cc"
msgstr "Yönetimsel karbon kopya"
-#: html/Ticket/Elements/Tabs:216
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:277
msgid "Advanced"
msgstr "GeliÅŸmiÅŸ"
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Sonra"
-
-#: html/Search/Elements/PickCriteria:52
+#: share/html/Search/Elements/PickCriteria:59
msgid "Aggregator"
msgstr "Toplayıcı"
-#: etc/initialdata:363
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
msgid "All Approvals Passed"
msgstr "Bütün Onaylar Geçti"
-#: html/Admin/Queues/index.html:75
+#: share/html/Admin/Queues/index.html:82
msgid "All Queues"
msgstr "Bütün Kuyruklar"
-#: html/Search/Elements/EditQuery:56
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr ""
+
+#: share/html/Search/Elements/EditQuery:60
msgid "And/Or"
msgstr "Ve/Veya"
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
msgid "Applies to"
-msgstr "Etki edeceği bölümler: "
+msgstr "Etki edeceği bölümler:"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply"
msgstr "Uygula"
-#: html/Search/Edit.html:64
+#: share/html/Search/Edit.html:70
msgid "Apply your changes"
msgstr "Değişikliklerinizi uygulayın"
-#: html/Elements/Tabs:77
+#: share/html/Elements/Tabs:98
msgid "Approval"
msgstr "Onaylama"
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
#. ($Ticket->Id, $Ticket->Subject)
#. ($ticket->id, $msg)
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Approval #%1: %2"
msgstr "Onaylama #%1: %2"
-#: html/Approvals/index.html:75
+#: share/html/Approvals/index.html:77
#. ($ticket->Id)
msgid "Approval #%1: Notes not recorded due to a system error"
msgstr "Onaylama #%1: Bir sistem hatası nedeniyle, notlar kaydedilemedi"
-#: html/Approvals/index.html:73
+#: share/html/Approvals/index.html:75
#. ($ticket->Id)
msgid "Approval #%1: Notes recorded"
msgstr "Onaylama #%1: Notlar kaydedildi"
-#: etc/initialdata:351
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
msgid "Approval Passed"
msgstr "Onay Geçti"
-#: etc/initialdata:374
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
msgid "Approval Rejected"
msgstr "Onay Reddedildi"
-#: html/Approvals/Elements/Approve:69
+#: share/html/Approvals/Elements/Approve:71
msgid "Approve"
msgstr "Onayla"
-#: etc/initialdata:504
+#: NOT FOUND IN SOURCE
msgid "Approver's notes: %1"
msgstr "Onaylayanın notları: %1"
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Apr."
msgstr "Nis."
-#: html/Search/Elements/DisplayOptions:81
+#: share/html/Search/Elements/DisplayOptions:78
msgid "Asc"
msgstr "Art"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Ascending"
msgstr "Artan"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Kişisel alanları ata ve kaldır"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr ""
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
msgid "Attach"
msgstr "Ekle"
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
msgid "Attach file"
msgstr "Dosya ekle"
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
msgid "Attached file"
msgstr "EklenmiÅŸ dosya"
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
#. ($Attachment)
msgid "Attachment '%1' could not be loaded"
msgstr "Eklenti '%1' yüklenemiyor"
-#: lib/RT/Transaction_Overlay.pm:489
+#: lib/RT/Transaction_Overlay.pm:518
msgid "Attachment created"
msgstr "Eklenti oluÅŸturuldu"
-#: lib/RT/Tickets_Overlay.pm:1945
+#: lib/RT/Tickets_Overlay.pm:2146
msgid "Attachment filename"
msgstr "Eklenti dosya adı"
-#: html/Ticket/Elements/ShowAttachments:47
+#: share/html/Ticket/Elements/ShowAttachments:49
msgid "Attachments"
msgstr "Eklentiler"
-#: lib/RT/Attributes_Overlay.pm:171
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
msgid "Attribute Deleted"
msgstr "Öznitelik Silindi"
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Aug."
msgstr "AÄŸu."
-#: etc/initialdata:221
+#: etc/initialdata:196
msgid "Autoreply"
msgstr "Otomatik cevap"
-#: etc/initialdata:72
+#: etc/initialdata:27
msgid "Autoreply To Requestors"
msgstr "İstekçileri Otomatik Cevapla"
-#: html/Widgets/SelectionBox:185
+#: share/html/Widgets/SelectionBox:193
msgid "Available"
msgstr "Hazır"
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
msgid "Basics"
msgstr "Temeller"
-#: html/Ticket/Update.html:88
+#: NOT FOUND IN SOURCE
msgid "Bcc"
msgstr "Gizli karbon kopya"
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:89
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
msgid "Be sure to save your changes"
msgstr "DeÄŸiÅŸikliklerinizi kaydettiÄŸinizden emin olun"
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "Önce"
-
-#: html/Elements/Logo:47
+#: share/html/Elements/Logo:51
msgid "Best Practical Solutions, LLC corporate logo"
msgstr "Best Practical Solutions, LLC ÅŸirket logosu"
-#: etc/initialdata:217
+#: etc/initialdata:192
msgid "Blank"
msgstr "BoÅŸ"
-#: html/Search/Elements/EditFormat:84
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
msgid "Bold"
msgstr "Kalın"
-#: html/Search/Results.html:79
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Bookmarkable link"
msgstr "Yer imi olarak eklenebilir bağlantı"
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
msgid "Brief headers"
msgstr "Kısa başlıklar"
-#: html/Ticket/Elements/Tabs:227
+#: share/html/Ticket/Elements/Tabs:314
msgid "Bulk Update"
msgstr "Toplu Güncelleme"
-#: lib/RT/User_Overlay.pm:1853
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
msgid "Can not modify system users"
msgstr "Sistem kullanıcıları değiştirilemez"
@@ -792,421 +1054,669 @@ msgstr "Sistem kullanıcıları değiştirilemez"
msgid "Can this principal see this queue"
msgstr "Bu yetkili, bu kuyruğu gördü mü"
-#: lib/RT/CustomField_Overlay.pm:379
+#: lib/RT/CustomField_Overlay.pm:408
msgid "Can't add a custom field value without a name"
msgstr "Bir ad olmadan, kiÅŸisel alan deÄŸeri eklenemez"
-#: html/Admin/CustomFields/Objects.html:86
+#: share/html/Admin/CustomFields/Objects.html:88
#. ($Class)
msgid "Can't find a collection class for '%1'"
msgstr "'%1' için bir koleksiyon sınıfı bulunamadı"
-#: html/Search/Build.html:286
+#: share/html/Search/Elements/EditSearches:279
msgid "Can't find a saved search to work with"
msgstr "Üzerinde çalışılabilecek bir kaydedilmiş arama bulunamadı"
-#: lib/RT/Link_Overlay.pm:159
+#: lib/RT/Link_Overlay.pm:150
msgid "Can't link a ticket to itself"
msgstr "Bir bileti kendisine bağlayamazsınız"
-#: html/Widgets/SavedSearch:63
+#: share/html/Widgets/SavedSearch:110
#. (loc($self->{SearchType}))
msgid "Can't save %1"
msgstr "%1 kaydedilemedi"
-#: html/Search/Build.html:290
+#: share/html/Search/Elements/EditSearches:283
msgid "Can't save this search"
msgstr "Bu arama kaydedilemiyor"
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
msgid "Can't specifiy both base and target"
msgstr "Taban ve hedefin ikisini birden belirtemezsiniz"
-#: html/autohandler:204
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
#. ($msg)
msgid "Cannot create user: %1"
msgstr "Kullanıcı oluşturulamadı: %1"
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
msgid "Category"
msgstr "Kategori"
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
msgid "Cc"
msgstr "Karbon kopya"
-#: html/SelfService/Prefs.html:52
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:54
msgid "Change password"
msgstr "Parolayı değiştir"
-#: html/Elements/Submit:78
+#: share/html/Elements/Submit:90
msgid "Check All"
msgstr "Hepsini iÅŸaretle"
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr ""
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
msgid "Check box to delete"
msgstr "Silmek için kutucuğu işaretleyin"
-#: html/Admin/Elements/SelectRights:55
+#: share/html/Admin/Elements/SelectRights:66
msgid "Check box to revoke right"
msgstr "Hak vermek için kutucuğu işaretleyin"
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
msgid "Children"
msgstr "Çocuklar"
-#: html/NoAuth/js/util.js:201
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Choose a date"
msgstr "Bir tarih seçin"
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
msgid "City"
msgstr "Åžehir"
-#: html/Elements/Submit:80
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr ""
+
+#: share/html/Elements/Submit:92
msgid "Clear All"
msgstr "Hepsini Temizle"
-#: html/Helpers/CalPopup.html:51
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr ""
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr ""
+
+#: share/html/Helpers/CalPopup.html:53
msgid "Close window"
msgstr "Pencereyi Kapat"
-#: html/Ticket/Elements/ShowDates:68
+#: share/html/Ticket/Elements/ShowDates:75
msgid "Closed"
msgstr "Kapatıldı"
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
msgid "Closed tickets"
msgstr "Kapatılmış biletler"
-#: lib/RT/CustomField_Overlay.pm:89
+#: lib/RT/CustomField_Overlay.pm:90
msgid "Combobox: Select or enter multiple values"
msgstr "Seçim kutusu: Birden fazla değeri seçin veya girin"
-#: lib/RT/CustomField_Overlay.pm:90
+#: lib/RT/CustomField_Overlay.pm:91
msgid "Combobox: Select or enter one value"
msgstr "Seçim kutusu: Bir tek değeri seçin veya girin"
-#: lib/RT/CustomField_Overlay.pm:91
+#: lib/RT/CustomField_Overlay.pm:92
msgid "Combobox: Select or enter up to %1 values"
msgstr "Seçim kutusu: 1-%1 arası değer seçin veya girin"
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
msgid "Comment"
msgstr "Yorum"
-#: html/Admin/Queues/Modify.html:79
+#: share/html/Admin/Queues/Modify.html:77
msgid "Comment Address"
msgstr "Yorum Adresi"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "Comment on tickets"
msgstr "Biletler üzerine yorum yap"
-#: lib/RT/Queue_Overlay.pm:111
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr ""
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
msgid "Comments (Not sent to requestors)"
msgstr "Yorumlar (istekçilere gönderilmedi)"
-#: html/Search/Bulk.html:128
+#: share/html/Search/Bulk.html:135
msgid "Comments (not sent to requestors)"
msgstr "Yorumlar (istekçilere gönderilmedi)"
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
msgid "Comments about this user"
msgstr "Bu kullanıcı hakkındaki yorumlar"
-#: lib/RT/Transaction_Overlay.pm:634
+#: lib/RT/Transaction_Overlay.pm:691
msgid "Comments added"
msgstr "Yorumlar eklendi"
-#: lib/RT/Action/Generic.pm:175
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
msgid "Commit Stubbed"
msgstr "Saplanmışları Ada"
-#: html/Admin/Elements/EditScrip:59
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
msgid "Condition"
msgstr "Durum"
-#: lib/RT/Scrip_Overlay.pm:184
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:148
msgid "Condition is mandatory argument"
msgstr "Durum, zorunlu bir argüman"
-#: bin/rt-crontool:151
+#: bin/rt-crontool:210
msgid "Condition matches..."
msgstr "Durum eÅŸleÅŸiyor..."
-#: lib/RT/Scrip_Overlay.pm:188
+#: NOT FOUND IN SOURCE
msgid "Condition not found"
msgstr "Durum bulunamadı"
-#: html/Elements/Tabs:84
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
msgid "Configuration"
msgstr "Ayarlar"
-#: html/SelfService/Prefs.html:54
+#: share/html/SelfService/Prefs.html:56
msgid "Confirm"
msgstr "Onayla"
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
msgid "Content"
msgstr "İçerik"
-#: html/Elements/SelectAttachmentField:49
+#: share/html/Elements/SelectAttachmentField:51
msgid "Content-Type"
msgstr ""
-#: html/Search/Elements/EditSearches:65
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Copy"
msgstr "Kopya"
-#: etc/initialdata:286
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
msgid "Correspondence"
msgstr "Uygunluk"
-#: lib/RT/Transaction_Overlay.pm:630
+#: lib/RT/Transaction_Overlay.pm:687
msgid "Correspondence added"
msgstr "Uygunluk eklendi"
-#: lib/RT/Record.pm:1707
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. "
msgstr "Yeni özel bölüm eklenemiyor. "
-#: lib/RT/Record.pm:1660
-#. (, $value_msg)
+#: NOT FOUND IN SOURCE
msgid "Could not add new custom field value. %1 "
-msgstr "Yeni özel bölüm eklenemiyor. %1"
+msgstr "Yeni özel bölüm eklenemiyor. %1 "
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
-#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
+#: NOT FOUND IN SOURCE
msgid "Could not change owner. "
-msgstr "Sahip deÄŸiÅŸtirilemiyor."
+msgstr "Sahip deÄŸiÅŸtirilemiyor. "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
-#: html/Admin/CustomFields/Modify.html:161
+#: share/html/Admin/CustomFields/Modify.html:163
#. ($msg)
msgid "Could not create CustomField"
msgstr "Özel bölüm oluşturulamıyor"
-#: html/Admin/Elements/EditCustomField:113
+#: share/html/Admin/Elements/EditCustomField:115
#. ($msg)
msgid "Could not create CustomField: %1"
msgstr "Özel bölüm oluşturulamıyor: %1"
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
msgid "Could not create group"
msgstr "Grup oluşturulamıyor"
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
#. ($msg)
msgid "Could not create template: %1"
msgstr "Şablon oluşturulamıyor: %1"
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
msgid "Could not create ticket. Queue not set"
msgstr "Bilet oluşturulamıyor. Kuyruk atanmadı"
-#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
msgid "Could not create user"
msgstr "Kullanıcı oluşturulamıyor"
-#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
msgid "Could not find or create that user"
msgstr "Bu kullanıcı bulunamıyor veya oluşturulamıyor"
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
msgid "Could not find that principal"
msgstr "Bu yetkili bulunamıyor"
-#: html/Admin/CustomFields/Objects.html:69
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
msgid "Could not load CustomField %1"
msgstr "Özel bölüm yüklenemiyor %1"
-#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
msgid "Could not load group"
msgstr "Grup yüklenemiyor"
-#: lib/RT/SavedSearch.pm:119
+#: lib/RT/SharedSetting.pm:121
#. ($privacy)
msgid "Could not load object for %1"
msgstr "%1 için nesne yüklenemiyor"
-#: lib/RT/SavedSearch.pm:197
+#: NOT FOUND IN SOURCE
msgid "Could not load search attribute"
msgstr "Arama özniteliği yüklenemiyor"
-#: lib/RT/Queue_Overlay.pm:761
+#: lib/RT/Queue_Overlay.pm:846
#. ($args{'Type'})
msgid "Could not make that principal a %1 for this queue"
msgstr "Bu yetkili, bu kuyruk için bir %1 yapılamıyor"
-#: lib/RT/Ticket_Overlay.pm:1444
+#: lib/RT/Ticket_Overlay.pm:1135
#. ($self->loc($args{'Type'}))
msgid "Could not make that principal a %1 for this ticket"
msgstr "Bu yetkili, bu bilet için bir %1 yapılamıyor"
-#: lib/RT/Queue_Overlay.pm:860
+#: lib/RT/Queue_Overlay.pm:962
#. ($args{'Type'})
msgid "Could not remove that principal as a %1 for this queue"
msgstr "Bu yetkili, bu kuyruktan %1 olarak ayrılamıyor"
-#: lib/RT/User_Overlay.pm:191
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:129
msgid "Could not set user info"
msgstr "Kullanıcı bilgisi atanamıyor"
-#: lib/RT/Transaction_Overlay.pm:159
+#: lib/RT/Transaction_Overlay.pm:157
msgid "Couldn't add attachment"
msgstr "Eklenti eklenemiyor"
-#: lib/RT/Group_Overlay.pm:1003
+#: lib/RT/Group_Overlay.pm:1019
msgid "Couldn't add member to group"
msgstr "Kullanıcı gruba eklenemiyor"
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
#. ($Msg)
msgid "Couldn't create a transaction: %1"
msgstr "Bir hareket oluşturulamıyor: %1"
-#: lib/RT/Record.pm:953
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: lib/RT/Record.pm:927
msgid "Couldn't find row"
msgstr "Satır bulunamadı"
-#: lib/RT/Group_Overlay.pm:977
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
msgid "Couldn't find that principal"
msgstr "Bu yetkili bulunamadı"
-#: lib/RT/CustomField_Overlay.pm:409
+#: lib/RT/CustomField_Overlay.pm:438
msgid "Couldn't find that value"
msgstr "Bu değer bulunamadı"
-#: lib/RT/CurrentUser.pm:145
+#: lib/RT/CurrentUser.pm:164
#. ($self->Id)
msgid "Couldn't load %1 from the users database.\\n"
msgstr "%1 değeri, kullanıcı veritabanından yüklenemedi.\\n"
-#: html/Admin/CustomFields/UserRights.html:149
+#: share/html/Admin/CustomFields/UserRights.html:92
#. ($id)
msgid "Couldn't load Class %1"
msgstr "%1 sınıfı yüklenemedi"
-#: html/Admin/CustomFields/GroupRights.html:107
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
#. ($id)
msgid "Couldn't load CustomField %1"
msgstr "Özel bölüm %1 yüklenemedi"
-#: lib/RT/Ticket_Overlay.pm:2016
+#: lib/RT/Ticket_Overlay.pm:1723
#. ($self->Id)
msgid "Couldn't load copy of ticket #%1."
msgstr "#%1 numaralı biletin kopyası yüklenemedi"
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
#. ($id)
msgid "Couldn't load group %1"
msgstr "%1 grubu yüklenemedi"
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
msgid "Couldn't load link"
msgstr "Bağlantı yüklenemedi"
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
#. ($id)
msgid "Couldn't load object %1"
msgstr "%1 nesnesi yüklenemedi"
-#: html/Admin/Queues/People.html:142
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
#. ($id)
msgid "Couldn't load queue"
msgstr "Kuyruk yüklenemedi"
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
#. ($id)
msgid "Couldn't load queue %1"
msgstr "%1 kuyruğu yüklenemedi"
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
#. ($id)
msgid "Couldn't load scrip #%1"
msgstr "Senet #%1 yüklenemedi"
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
#. ($id)
msgid "Couldn't load ticket '%1'"
msgstr "'%1' bileti yüklenemedi"
-#: lib/RT/Ticket_Overlay.pm:2643
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
#. ($args{'URI'})
msgid "Couldn't resolve '%1' into a URI."
msgstr "'%1' değeri bir URI olarak çözülemiyor"
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
msgid "Country"
msgstr "Ãœlke"
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
msgid "Create"
msgstr "OluÅŸtur"
-#: etc/initialdata:135
+#: etc/initialdata:90
msgid "Create Tickets"
msgstr "Bilet OluÅŸtur"
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
msgid "Create a CustomField"
msgstr "Özel Bölüm Oluştur"
-#: html/Admin/Queues/CustomField.html:69
+#: share/html/Admin/Queues/CustomField.html:71
#. ($QueueObj->Name())
msgid "Create a CustomField for queue %1"
msgstr "%1 kuyruğu için özel bir bölüm oluştur"
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
msgid "Create a new group"
msgstr "Yeni bir grup oluÅŸtur"
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
msgid "Create a new personal group"
msgstr "Yeni bir kiÅŸisel grup oluÅŸtur"
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
msgid "Create a new ticket"
msgstr "YEni bir bilet oluÅŸtur"
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
msgid "Create a new user"
msgstr "Yeni bir kullanıcı oluştur"
-#: html/Admin/Queues/Modify.html:125
+#: share/html/Admin/Queues/Modify.html:151
msgid "Create a queue"
msgstr "Yeni bir kuyruk oluÅŸtur"
-#: html/Admin/Queues/Scrip.html:89
+#: share/html/Admin/Queues/Scrip.html:90
#. ($QueueObj->Name)
msgid "Create a scrip for queue %1"
msgstr "%1 kuyruğu için yeni bir senet oluştur"
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
msgid "Create a template"
msgstr "Bir ÅŸablon oluÅŸtur"
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
msgid "Create a ticket"
msgstr "Yeni bir bilet oluÅŸtur"
-#: etc/initialdata:137
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: etc/initialdata:92
msgid "Create new tickets based on this scrip's template"
msgstr "Bu senedin ÅŸablonunu temel alarak yeni biletler oluÅŸtur"
-#: html/SelfService/Create.html:105
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
msgid "Create ticket"
msgstr "Yeni bilet oluÅŸtur"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Bu kuyrukta yeni biletler oluÅŸtur"
-#: lib/RT/CustomField_Overlay.pm:106
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
msgid "Create, delete and modify custom fields"
msgstr "Özel bölümleri oluştur, sil ve değiştir"
@@ -1214,276 +1724,497 @@ msgstr "Özel bölümleri oluştur, sil ve değiştir"
msgid "Create, delete and modify queues"
msgstr "Kuyrukları oluştur, sil ve değiştir"
-#: lib/RT/System.pm:80
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr ""
+
+#: lib/RT/System.pm:83
msgid "Create, delete and modify the members of personal groups"
msgstr "Kişisel grup üyelerini oluştur, sil ve değiştir"
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:84
msgid "Create, delete and modify users"
msgstr "Kullanıcıları oluştur, sil ve değiştir"
-#: lib/RT/System.pm:87
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
msgid "CreateSavedSearch"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr ""
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
msgid "Created"
msgstr "OluÅŸturuldu"
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Created CustomField %1"
msgstr "Özel bölüm %1 oluşturuldu"
-#: html/Tools/Reports/Elements/Tabs:63
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
msgid "Created in a date range"
msgstr "Bir zaman aralığı içinde oluşturuldu"
-#: html/Tools/Reports/CreatedByDates.html:52
+#: share/html/Tools/Reports/CreatedByDates.html:54
msgid "Created tickets in period, grouped by status"
msgstr "Bir devir içinde biletle oluşturuldu ve duruma göre sıralandı"
-#: html/Search/Elements/PickBasics:102
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
msgid "Creator"
msgstr "OluÅŸturan"
-#: html/Elements/EditLinks:49
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: share/html/Elements/EditLinks:51
msgid "Current Links"
msgstr "Geçerli bağlantılar"
-#: html/Admin/Elements/EditScrips:51
+#: share/html/Admin/Elements/EditScrips:53
msgid "Current Scrips"
msgstr "Geçerli senetler"
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
msgid "Current members"
msgstr "Geçerli üyeler"
-#: html/Admin/Elements/SelectRights:51
+#: share/html/Admin/Elements/SelectRights:62
msgid "Current rights"
msgstr "Geçerli haklar"
-#: html/Search/Elements/EditQuery:47
+#: share/html/Search/Elements/EditQuery:49
msgid "Current search"
msgstr "Geçerli arama"
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
msgid "Current watchers"
msgstr "Geçerli izleyiciler"
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
msgid "Custom Fields"
msgstr "Özel bölümler"
-#: html/Admin/CustomFields/index.html:60
+#: share/html/Admin/CustomFields/index.html:62
#. ($lookup)
msgid "Custom Fields for %1"
msgstr "%1 için özel bölümler"
-#: html/Admin/Elements/EditScrip:107
+#: share/html/Admin/Elements/EditScrip:115
msgid "Custom action cleanup code"
msgstr "Özel hareket temizleme kodu"
-#: html/Admin/Elements/EditScrip:103
+#: share/html/Admin/Elements/EditScrip:108
msgid "Custom action preparation code"
msgstr "Özel hareket hazırlama kodu"
-#: html/Admin/Elements/EditScrip:99
+#: share/html/Admin/Elements/EditScrip:101
msgid "Custom condition"
msgstr "Özel durum"
-#: lib/RT/Tickets_Overlay.pm:2424
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr ""
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2604
#. ($CF->Name)
msgid "Custom field %1 has a value."
msgstr "Özel bölüm %1, bir değere sahip"
-#: lib/RT/Tickets_Overlay.pm:2420
+#: lib/RT/Tickets_Overlay.pm:2600
#. ($CF->Name)
msgid "Custom field %1 has no value."
msgstr "Özel bölüm %1, bir değere sahip değil"
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
#. ($args{'Field'})
msgid "Custom field %1 not found"
msgstr "Özel bölüm %1, bulunamadı"
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
#. ($cf)
#. ($obj->Name)
msgid "Custom field '%1'"
msgstr "Özel bölüm '%1'"
-#: lib/RT/CustomField_Overlay.pm:1157
+#: lib/RT/CustomField_Overlay.pm:1124
#. ($args{'Content'}, $self->Name)
msgid "Custom field value %1 could not be found for custom field %2"
msgstr "Özel bölüm %2 için, özel bölüm değeri %1 bulunamıyor"
-#: lib/RT/CustomField_Overlay.pm:419
+#: lib/RT/CustomField_Overlay.pm:446
msgid "Custom field value could not be deleted"
msgstr "Özel bölüm değeri silinemiyor"
-#: lib/RT/CustomField_Overlay.pm:1169
+#: lib/RT/CustomField_Overlay.pm:1136
msgid "Custom field value could not be found"
msgstr "Özel bölüm değeri bulunamıyor"
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
msgid "Custom field value deleted"
msgstr "Özel bölüm değeri silindi"
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
msgid "CustomField"
msgstr "Özel Bölüm"
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
msgid "Customize"
msgstr "Özelleştir"
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
msgid "Dates"
msgstr "Tarihler"
-#: lib/RT/Date.pm:452
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Dec."
msgstr "Ara."
-#: etc/initialdata:222
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: etc/initialdata:197
msgid "Default Autoresponse template"
msgstr "Varsayılan OtoCevap şablonu"
-#: html/Tools/Offline.html:61
+#: share/html/Tools/Offline.html:62
msgid "Default Queue"
msgstr "Varsayılan Kuyruk"
-#: html/Tools/Offline.html:70
+#: share/html/Tools/Offline.html:71
msgid "Default Requestor"
msgstr "Varsayılan İstekçi"
-#: etc/initialdata:296
+#: etc/initialdata:271
msgid "Default admin comment template"
msgstr "Varsayılan yönetici yorum şablonu"
-#: etc/initialdata:275
+#: etc/initialdata:250
msgid "Default admin correspondence template"
msgstr "Varsayılan yönetici cevap şablonu"
-#: etc/initialdata:287
+#: etc/initialdata:262
msgid "Default correspondence template"
msgstr "Varsayılan cevap şablonu"
-#: etc/initialdata:253
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
msgid "Default transaction template"
msgstr "Varsayılan hareket şablonu"
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
msgid "Delegate rights"
msgstr "Yetkileri devret"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "Delegate specific rights which have been granted to you."
msgstr "Size verilen belirli yetkileri devredin"
-#: lib/RT/System.pm:84
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
msgid "DelegateRights"
msgstr "HaklarıDevret"
-#: html/User/Elements/Tabs:59
+#: share/html/User/Elements/Tabs:67
msgid "Delegation"
msgstr "Devretmek"
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
msgid "Delete"
msgstr "Sil"
-#: html/Admin/Elements/EditTemplates:79
+#: share/html/Admin/Elements/EditTemplates:72
msgid "Delete Template"
msgstr ""
-#: lib/RT/SavedSearch.pm:220
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
#. ($msg)
msgid "Delete failed: %1"
msgstr "Silme işlemi başarısız: %1"
-#: html/Admin/Elements/EditScrips:74
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
msgid "Delete selected scrips"
msgstr "Seçilen senetleri sil"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "Delete tickets"
msgstr "Biletleri sil"
-#: html/Search/Bulk.html:159
+#: share/html/Search/Bulk.html:182
msgid "Delete values"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "BiletSil"
-#: lib/RT/SavedSearch.pm:218
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Deleted search"
msgstr "Arama sil"
-#: lib/RT/Queue_Overlay.pm:394
+#: lib/RT/Queue_Overlay.pm:398
msgid "Deleting this object would break referential integrity"
msgstr "Bu nesneyi silmek, tercihli bütünlüğü bozacaktır"
-#: lib/RT/User_Overlay.pm:512
+#: lib/RT/User_Overlay.pm:415
msgid "Deleting this object would violate referential integrity"
msgstr "Bu nesneyi silmek, tercihli bütünlüğü ihlal edecektir"
-#: html/Approvals/Elements/Approve:73
+#: share/html/Approvals/Elements/Approve:75
msgid "Deny"
msgstr "Reddet"
-#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
msgid "Depended on by"
-msgstr "Şunun tarafından bağımlılığa sahip: "
+msgstr "Şunun tarafından bağımlılığa sahip:"
-#: lib/RT/Transaction_Overlay.pm:718
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:775
#. ($value)
msgid "Dependency by %1 added"
msgstr "%1 ile bağımlılık eklendi"
-#: lib/RT/Transaction_Overlay.pm:758
+#: lib/RT/Transaction_Overlay.pm:815
#. ($value)
msgid "Dependency by %1 deleted"
msgstr "%1 ile bağımlılık silindi"
-#: lib/RT/Transaction_Overlay.pm:715
+#: lib/RT/Transaction_Overlay.pm:772
#. ($value)
msgid "Dependency on %1 added"
msgstr "%1 için bağımlılık eklendi"
-#: lib/RT/Transaction_Overlay.pm:755
+#: lib/RT/Transaction_Overlay.pm:812
#. ($value)
msgid "Dependency on %1 deleted"
msgstr "%1 için bağımlılık silindi"
-#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
msgid "Depends on"
msgstr "Bağımlılık"
-#: html/Search/Elements/DisplayOptions:86
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:83
msgid "Desc"
msgstr "Azal"
-#: html/Elements/SelectSortOrder:56
+#: share/html/Elements/SelectSortOrder:58
msgid "Descending"
msgstr "Azalan"
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
msgid "Describe the issue below"
msgstr "Sorunu aşağıda tanımlayın"
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
msgid "Description"
msgstr "Tanım"
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
msgid "Display"
msgstr "Görüntüle"
@@ -1491,1120 +2222,1766 @@ msgstr "Görüntüle"
msgid "Display Access Control List"
msgstr "Erişim Denetim Listesini Görüntüle"
-#: html/Search/Elements/DisplayOptions:46
+#: share/html/Search/Elements/DisplayOptions:99
msgid "Display Columns"
msgstr "Sütunları Görüntüle"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "Display Scrip templates for this queue"
msgstr "Bu kuyruk için senet şablonlarını görüntüle"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "Display Scrips for this queue"
msgstr "Bu kuyruk için senetleri görüntüle"
-#: html/Ticket/Elements/ShowHistory:59
+#: NOT FOUND IN SOURCE
msgid "Display mode"
msgstr "Görüntüleme kipi"
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "Display saved searches for this group"
msgstr "Bu grup için, kaydedilmiş aramaları görüntüle"
-#: html/Elements/Footer:61
+#: share/html/Elements/Footer:64
msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
msgstr "<a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU GPL</a>' nin 2. sürümü altında dağıtılmaktadır."
-#: lib/RT/System.pm:75
+#: lib/RT/System.pm:79
msgid "Do anything and everything"
msgstr "Hiçbirşeyi ve herşeyi yapın"
-#: html/Elements/Refresh:51
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
msgid "Don't refresh this page."
msgstr "Bu sayfayı yenilemeyin"
-#: html/Ticket/Elements/ShowTransactionAttachments:82
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
msgid "Download"
msgstr "Ä°ndir"
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
msgid "Download as a tab-delimited file"
msgstr "Sekme ile ayrılmış dosya olarak indir"
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
msgid "Due"
msgstr "Vade"
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr ""
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
msgid "Edit"
msgstr "Düzenle"
-#: html/Search/Bulk.html:149
+#: share/html/Search/Bulk.html:177
msgid "Edit Custom Fields"
msgstr "Özel Bölümleri Düzenle"
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
#. ($Object->Name)
msgid "Edit Custom Fields for %1"
msgstr "%1 için özel bölümleri düzenle"
-#: html/Admin/Global/CustomFields/Groups.html:54
+#: share/html/Admin/Global/CustomFields/Groups.html:56
msgid "Edit Custom Fields for all groups"
msgstr "Bütün gruplar için özel bölümleri düzenle"
-#: html/Admin/Global/CustomFields/Users.html:54
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
msgid "Edit Custom Fields for all users"
msgstr "Bütün kullanıcılar için özel bölümleri düzenle"
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
msgid "Edit Custom Fields for tickets in all queues"
msgstr "Bütün kuyruklardaki bütün biletler için özel bölümleri düzenle"
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
msgid "Edit Links"
msgstr "Bağlantıları Düzenle"
-#: html/Search/Edit.html:68
+#: share/html/Search/Edit.html:74
msgid "Edit Query"
msgstr "Sorguyu Düzenle"
-#: html/Ticket/Elements/Tabs:214
+#: share/html/Ticket/Elements/Tabs:273
msgid "Edit Search"
msgstr "Aramayı Düzenle"
-#: html/Admin/Queues/Templates.html:63
+#: share/html/Admin/Queues/Templates.html:65
#. ($QueueObj->Name)
msgid "Edit Templates for queue %1"
msgstr "%1 kuyruğundaki şablonları düzenle"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "Edit saved searches for this group"
msgstr "Bu grup için kaydedilmiş aramaları düzenle"
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: share/html/Admin/Global/index.html:61
msgid "Edit system templates"
msgstr "Sistem şablonlarını düzenle"
-#: lib/RT/Group_Overlay.pm:167
+#: lib/RT/Group_Overlay.pm:93
msgid "EditSavedSearches"
msgstr "KaydedilmişAramalarıDüzenle"
-#: html/Admin/Queues/Modify.html:140
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
#. ($QueueObj->Name)
msgid "Editing Configuration for queue %1"
msgstr "%1 kuyruğunun ayarları düzenleniyor"
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
msgid "Editing CustomField %1"
msgstr "Özel bölüm %1 düzenleniyor"
-#: html/Admin/Groups/Members.html:53
+#: share/html/Admin/Groups/Members.html:57
#. ($Group->Name)
msgid "Editing membership for group %1"
msgstr "%1 grubu için üyelik düzenleniyor"
-#: html/User/Groups/Members.html:150
+#: share/html/User/Groups/Members.html:152
#. ($Group->Name)
msgid "Editing membership for personal group %1"
msgstr "Özel grup %1 için üyelik düzenleniyor"
-#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr ""
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
msgid "Either base or target must be specified"
msgstr "Taban veya hedef belirtilmeli"
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
msgid "Email"
msgstr "Eposta"
-#: lib/RT/User_Overlay.pm:235
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
msgid "Email address in use"
msgstr "Eposta adresi kullanımda"
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
msgid "Enabled (Unchecking this box disables this custom field)"
msgstr "Etkinleştirildi (Bu kutudaki işareti kaldırmak, bu özel bölümü iptal eder)"
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
msgid "Enabled (Unchecking this box disables this group)"
msgstr "Etkinleştirildi (Bu kutudaki işareti kaldırmak, bu grubu iptal eder)"
-#: html/Admin/Queues/Modify.html:105
+#: share/html/Admin/Queues/Modify.html:119
msgid "Enabled (Unchecking this box disables this queue)"
msgstr "Etkinleştirildi (Bu kutudaki işareti kaldırmak, bu kuyruğu iptal eder)"
-#: html/Admin/Queues/index.html:78
+#: share/html/Admin/Queues/index.html:85
msgid "Enabled Queues"
msgstr "EtkinleÅŸtirilmiÅŸ Kuyruklar"
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
#. (loc_fuzzy($msg))
msgid "Enabled status %1"
msgstr "EtkinleÅŸtirilme durumu %1"
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
+#: NOT FOUND IN SOURCE
msgid "Enabled status: %1"
msgstr "EtkinleÅŸtirilme durumu %1"
-#: lib/RT/CustomField_Overlay.pm:64
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:65
msgid "Enter multiple values"
msgstr "Çoklu değer girin"
-#: html/Elements/EditLinks:126
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
msgstr "Bu nesneleri bağlamak için, nesneler veya URIler girin. Çoklu girdileri boşluk ile ayırın."
-#: lib/RT/CustomField_Overlay.pm:65
+#: lib/RT/CustomField_Overlay.pm:66
msgid "Enter one value"
msgstr "Bir deÄŸer girin"
-#: html/Elements/EditLinks:123
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
msgstr "Bu kuyrukları bağlamak için, kuyruklar veya URIler girin. Çoklu girdileri boşluk ile ayırın."
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
msgstr "Bu biletleri bağlamak için, biletler veya URIler girin. Çoklu girdileri boşluk ile ayırın."
-#: lib/RT/CustomField_Overlay.pm:66
+#: lib/RT/CustomField_Overlay.pm:67
msgid "Enter up to %1 values"
msgstr "%1 adet deÄŸer girin"
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
msgid "Error"
msgstr "Hata"
-#: lib/RT/Queue_Overlay.pm:672
+#: lib/RT/Queue_Overlay.pm:771
msgid "Error in parameters to Queue->AddWatcher"
msgstr "Queue->AddWatcher için geçilen parametrelerde hata var"
-#: lib/RT/Queue_Overlay.pm:833
+#: lib/RT/Queue_Overlay.pm:935
msgid "Error in parameters to Queue->DeleteWatcher"
msgstr "Queue->DeleteWatcher için geçilen parametrelerde hata var"
-#: lib/RT/Ticket_Overlay.pm:1372
+#: lib/RT/Ticket_Overlay.pm:1081
msgid "Error in parameters to Ticket->AddWatcher"
msgstr "Ticket->AddWatcher için geçilen parametrelerde hata var"
-#: lib/RT/Ticket_Overlay.pm:1538
+#: lib/RT/Ticket_Overlay.pm:1229
msgid "Error in parameters to Ticket->DeleteWatcher"
msgstr "Ticket->DeleteWatcher için geçilen parametrelerde hata var"
-#: bin/rt-crontool:285
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
msgid "Escalate tickets"
msgstr "Biletleri Yükselt"
-#: html/Ticket/Elements/ShowBasics:57
+#: share/html/Ticket/Elements/ShowBasics:59
msgid "Estimated"
msgstr "Tahmini"
-#: etc/initialdata:20
+#: lib/RT/Handle.pm:639
msgid "Everyone"
msgstr "Herkes"
-#: bin/rt-crontool:271
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
msgid "Example:"
msgstr "Örnek:"
-#: html/Admin/Users/Modify.html:99
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:101
msgid "Extra info"
msgstr "Ek Bilgi"
-#: lib/RT/SavedSearch.pm:177
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Failed to create search attribute"
msgstr "Arama özniteliği oluşturulamadı"
-#: lib/RT/User_Overlay.pm:376
+#: lib/RT/User_Overlay.pm:290
msgid "Failed to find 'Privileged' users pseudogroup."
msgstr "'Ayrıcalıklı' sahte kullanıcı grubu bulunamadı"
-#: lib/RT/User_Overlay.pm:383
+#: lib/RT/User_Overlay.pm:297
msgid "Failed to find 'Unprivileged' users pseudogroup"
msgstr "'Ayrıcalıksız' sahte kullanıcı grubu bulunamadı"
-#: bin/rt-crontool:206
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
#. ($modname, $@)
msgid "Failed to load module %1. (%2)"
msgstr "%1 modülü yüklenemedi. (%2)"
-#: lib/RT/SavedSearch.pm:152
+#: lib/RT/SharedSetting.pm:184
#. ($privacy)
msgid "Failed to load object for %1"
msgstr "%1 için nesne yüklenemedi"
-#: lib/RT/Date.pm:442
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Feb."
msgstr "Åžub."
-#: html/Elements/SelectAttachmentField:50
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
msgid "Filename"
msgstr "Dosya adı"
-#: lib/RT/CustomField_Overlay.pm:69
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
msgid "Fill in multiple text areas"
msgstr "Çoklu metin alanları doldur"
-#: lib/RT/CustomField_Overlay.pm:74
+#: lib/RT/CustomField_Overlay.pm:75
msgid "Fill in multiple wikitext areas"
msgstr "Çoklu wikimetin alanları doldur"
-#: lib/RT/CustomField_Overlay.pm:70
+#: lib/RT/CustomField_Overlay.pm:71
msgid "Fill in one text area"
msgstr "Tek bir metin alanı doldur"
-#: lib/RT/CustomField_Overlay.pm:75
+#: lib/RT/CustomField_Overlay.pm:76
msgid "Fill in one wikitext area"
msgstr "Tek bir wikimetin alanı doldur"
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
msgid "Fill in this field with a URL."
msgstr "Bu bölümü bir URL ile doldur"
-#: lib/RT/CustomField_Overlay.pm:71
+#: lib/RT/CustomField_Overlay.pm:72
msgid "Fill in up to %1 text areas"
msgstr "En fazla %1 adet metin alanı doldur"
-#: lib/RT/CustomField_Overlay.pm:76
+#: lib/RT/CustomField_Overlay.pm:77
msgid "Fill in up to %1 wikitext areas"
msgstr "En fazla %1 adet wikimetin alanı doldur"
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
msgid "Final Priority"
msgstr "Son Öncelik"
-#: lib/RT/Ticket_Overlay.pm:1164
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
msgid "FinalPriority"
msgstr "SonÖncelik"
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
msgid "Find groups whose"
msgstr "Grupları bul:"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
msgid "Find people whose"
msgstr "KiÅŸileri bul:"
-#: html/Search/Results.html:147
+#: share/html/Search/Results.html:150
msgid "Find tickets"
msgstr "Biletleri bul"
-#: html/Ticket/Elements/Tabs:81
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:81
msgid "First"
msgstr "Ä°lk"
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:758
msgid "Foo Bar Baz"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:749
msgid "Foo!"
msgstr ""
-#: html/Search/Bulk.html:83
+#: share/html/Search/Bulk.html:90
msgid "Force change"
msgstr "DeÄŸiÅŸikliÄŸi zorla"
-#: html/Search/Elements/EditFormat:52
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
msgid "Format"
msgstr "Biçim"
-#: html/Search/Results.html:145
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
#. ($ticketcount)
msgid "Found %quant(%1,ticket)"
msgstr "%quant(%1,ticket) bulundu"
-#: lib/RT/Record.pm:956
+#: lib/RT/Record.pm:929
msgid "Found Object"
msgstr "Nesne bulundu"
-#: lib/RT/Date.pm:421
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Fri."
msgstr "Cum."
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
msgid "Full headers"
msgstr "Tüm Başlıklar"
-#: html/Tools/Offline.html:85
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
msgid "Get template from file"
msgstr "Dosyadan ÅŸablon al"
-#: lib/RT/Transaction_Overlay.pm:684
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:741
#. ($New->Name)
msgid "Given to %1"
msgstr "Verilen: %1"
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
msgid "Global"
msgstr "Küresel"
-#: html/Admin/Elements/EditCustomFields:55
+#: share/html/Admin/Elements/EditCustomFields:57
msgid "Global Custom Fields"
msgstr "Küresel Özel Alanlar"
-#: html/Admin/Global/CustomFields/index.html:59
+#: share/html/Admin/Global/CustomFields/index.html:61
msgid "Global custom field configuration"
msgstr "Küresel Özel Alan Ayarları"
-#: html/Admin/Global/MyRT.html:48
+#: share/html/Admin/Global/MyRT.html:102
#. ($pane)
msgid "Global portlet %1 saved."
msgstr "Küresel portlet %1 kaydedildi"
-#: html/Admin/Elements/SelectTemplate:59
+#: share/html/Admin/Elements/SelectTemplate:61
#. (loc($Template->Name))
msgid "Global template: %1"
msgstr "Küresel şablon: %1"
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
msgid "Go"
msgstr "Git"
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
msgid "Go!"
msgstr "Git!"
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
msgid "Goto ticket"
msgstr "Bilete git"
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
msgid "Group"
msgstr "Grup"
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
msgid "Group Rights"
msgstr "Grup Yetkileri"
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Grup üyeye sahip"
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "Grup üyeye sahip: %1"
-#: html/Admin/Groups/Modify.html:109
+#: share/html/Admin/Groups/Modify.html:119
#. ($create_msg)
msgid "Group could not be created: %1"
msgstr "Grup oluşturulamıyor: %1"
-#: lib/RT/Group_Overlay.pm:521
+#: lib/RT/Group_Overlay.pm:478
msgid "Group created"
msgstr "Grup oluÅŸturuldu"
-#: lib/RT/Group_Overlay.pm:1155
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
msgid "Group has no such member"
msgstr "Grupta böyle bir üye yok"
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
msgid "Group not found"
msgstr "Grup bulunamadı"
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
msgid "Groups"
msgstr "Gruplar"
-#: lib/RT/Group_Overlay.pm:989
+#: lib/RT/Group_Overlay.pm:1005
msgid "Groups can't be members of their members"
msgstr "Gruplar, üyelerinin üyeleri olamazlar"
-#: html/Admin/Groups/index.html:86
+#: share/html/Admin/Groups/index.html:96
msgid "Groups matching search criteria"
msgstr "Arama kıstaslarına uyan gruplar"
-#: html/Ticket/Elements/ShowRequestor:77
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
msgid "Groups this user belongs to"
msgstr "Bu kullanıcının kayıtlı olduğu gruplar"
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr ""
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
msgid "Hello!"
msgstr "Merhaba!"
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:765
#. ($name)
msgid "Hello, %1"
msgstr "Merhaba, %1"
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
msgid "History"
msgstr "Geçmiş"
-#: html/Admin/Groups/History.html:62
+#: share/html/Admin/Groups/History.html:64
#. ($GroupObj->Name)
msgid "History of the group %1"
msgstr "%1 grubunun geçmişi"
-#: html/Admin/Users/History.html:62
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
#. ($UserObj->Name)
msgid "History of the user %1"
msgstr "%1 üyesinin geçmişi"
-#: html/Elements/Tabs:65
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr ""
+
+#: share/html/Elements/Tabs:68
msgid "Homepage"
msgstr "Ev Sayfası"
-#: html/Elements/SelectTimeUnits:48
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
msgid "Hours"
msgstr "Saat"
-#: lib/RT/Base.pm:119
+#: lib/RT/Base.pm:136
#. (6)
msgid "I have %quant(%1,concrete mixer)."
msgstr ""
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
+#: NOT FOUND IN SOURCE
msgid "I'm lost"
msgstr "Kayboldum"
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
msgid "Id"
msgstr "Numara"
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
msgid "Identity"
msgstr "Kimlik"
-#: etc/initialdata:429
+#: lib/RT/Approval/Rule/Rejected.pm:54
msgid "If an approval is rejected, reject the original and delete pending approvals"
msgstr "Eğer bir onaylama reddedilmişse, özgün kaydı reddet ve bekleyen onayları sil"
-#: html/Tools/Offline.html:74
+#: share/html/Tools/Offline.html:75
msgid "If no Requestor is specified, create tickets with this requestor."
msgstr "Eğer bir istekçi belirtilmemişse, biletleri, bu istekçi üzerinden oluştur"
-#: html/Tools/Offline.html:65
+#: share/html/Tools/Offline.html:66
msgid "If no queue is specified, create tickets in this queue."
msgstr "EÄŸer bir kuyruk belirtilmemiÅŸse, biletleri bu kuyrukta oluÅŸtur."
-#: bin/rt-crontool:267
+#: bin/rt-crontool:370
msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
msgstr "Eğer bu araş setgid ise, saldırgan bir yerel kullanıcı, bu aracı kullanarak RT' ye yönetici erişimi hakkı kazanabilir."
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
msgid "If you've updated anything above, be sure to"
msgstr "Eğer yukarıda herhangi bir şeyi değiştirdiyseniz, mutlaka"
-#: lib/RT/Record.pm:947
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
msgid "Illegal value for %1"
msgstr "%1 için geçersiz değer"
-#: lib/RT/Record.pm:950
+#: lib/RT/Record.pm:924
msgid "Immutable field"
msgstr "DeÄŸiÅŸmez alan"
-#: html/Admin/Groups/index.html:65
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:81
msgid "Include disabled groups in listing."
msgstr "Listelerken, etkinleştirilmemiş grupları ekle"
-#: html/Admin/Queues/index.html:65
+#: share/html/Admin/Queues/index.html:72
msgid "Include disabled queues in listing."
msgstr "Listelerken, etkinleştirilmemiş kuyrukları ekle"
-#: html/Admin/Users/index.html:71
+#: share/html/Admin/Users/index.html:88
msgid "Include disabled users in search."
msgstr "Listelerken, iptal edilmiş üyeleri ekle"
-#: html/Admin/CustomFields/Modify.html:113
+#: share/html/Admin/CustomFields/Modify.html:101
msgid "Include page"
msgstr "Sayfayı İçer"
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
+#: NOT FOUND IN SOURCE
msgid "Incomplete Query"
msgstr "Eksik Sorgu"
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
+#: NOT FOUND IN SOURCE
msgid "Incomplete query"
msgstr "Eksik sorgu"
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
msgid "Initial Priority"
msgstr "Başlangıç Önceliği"
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
msgid "InitialPriority"
msgstr "BaşlangıçÖnceliği"
-#: lib/RT/ScripAction_Overlay.pm:133
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
msgid "Input error"
msgstr "Girdi Hatası"
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
#. ($self->FriendlyPattern)
#. ($CF->FriendlyPattern)
msgid "Input must match %1"
msgstr "Girdi, %1 ile eÅŸleÅŸmeli"
-#: lib/RT/Ticket_Overlay.pm:3503
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:3300
msgid "Internal Error"
msgstr "İç Hata"
-#: lib/RT/Record.pm:308
+#: lib/RT/Record.pm:294
#. ($id->{error_message})
msgid "Internal Error: %1"
msgstr "İç Hata: %1"
-#: lib/RT/Group_Overlay.pm:668
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
msgid "Invalid Group Type"
msgstr "Geçersiz Grup Türü"
-#: lib/RT/Principal_Overlay.pm:161
+#: NOT FOUND IN SOURCE
msgid "Invalid Right"
msgstr "Geçersiz Hak"
-#: lib/RT/Record.pm:952
+#: lib/RT/Record.pm:926
msgid "Invalid data"
msgstr "Geçersiz veri"
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
#. ($msg)
msgid "Invalid pattern: %1"
msgstr "Geçersiz desen: %1"
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
msgid "Invalid queue"
msgstr "Geçersiz kuyruk"
-#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290
+#: lib/RT/ACE_Overlay.pm:281
msgid "Invalid right"
msgstr "Geçersiz hak"
-#: lib/RT/Record.pm:283
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
#. ($key)
msgid "Invalid value for %1"
msgstr "%1 için geçersiz değer"
-#: lib/RT/Record.pm:1610
+#: lib/RT/Record.pm:1619
msgid "Invalid value for custom field"
msgstr "Özel alan için geçersiz değer"
-#: lib/RT/Ticket_Overlay.pm:424
+#: lib/RT/Ticket_Overlay.pm:306
msgid "Invalid value for status"
msgstr "Durum için geçersiz değer"
-#: bin/rt-crontool:268
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: bin/rt-crontool:371
msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
msgstr "Yetkisiz kullanıcıların, bu aracı kullanmasını engellemek çok önemlidir."
-#: bin/rt-crontool:269
+#: bin/rt-crontool:372
msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
msgstr "Bu araca erişim için, doğru grup üyeliğiyle yetkisiz bir unix kullanıcısı oluşturmanız ve RT erişimi vermeniz gerekmektedir."
-#: bin/rt-crontool:231
+#: bin/rt-crontool:332
msgid "It takes several arguments:"
msgstr "Çeşitli argümanlar alır:"
-#: html/Search/Elements/EditFormat:85
+#: share/html/Search/Elements/EditFormat:86
msgid "Italic"
msgstr "EÄŸik"
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jan."
msgstr "Oca."
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Group_Overlay.pm:92
msgid "Join or leave this group"
msgstr "Bu gruba katılın veya ayrılın"
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jul."
msgstr "Tem."
-#: html/Ticket/Elements/Tabs:125
+#: share/html/Ticket/Elements/Tabs:142
msgid "Jumbo"
msgstr ""
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Jun."
msgstr "Haz."
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
msgid "Language"
msgstr "Dil"
-#: html/Search/Elements/EditFormat:79
+#: share/html/Search/Elements/EditFormat:80
msgid "Large"
msgstr "GeniÅŸ"
-#: html/Ticket/Elements/Tabs:96
+#: share/html/Ticket/Elements/Tabs:102
msgid "Last"
msgstr "Son"
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
msgid "Last Contact"
msgstr "Son Temas"
-#: html/Elements/SelectDateType:50
+#: share/html/Elements/SelectDateType:52
msgid "Last Contacted"
msgstr "Son Temasedilen"
-#: html/Elements/SelectDateType:51
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
msgid "Last Updated"
msgstr "Son Güncelleme"
-#: html/Search/Elements/PickBasics:103
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
msgid "LastUpdatedBy"
msgstr "SonGüncelleyen"
-#: html/Ticket/Elements/ShowBasics:68
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
msgid "Left"
msgstr "Kalan"
-#: html/Admin/Users/Modify.html:109
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
msgid "Let this user access RT"
msgstr "Bu kullanıcının RT' ye erişimine izin ver"
-#: html/Admin/Users/Modify.html:113
+#: share/html/Admin/Users/Modify.html:115
msgid "Let this user be granted rights"
msgstr "Bu kullanıcının yetkiye sahip olmasına izin ver"
-#: html/Search/Elements/EditFormat:68
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:66
msgid "Link"
msgstr "Bağlantı"
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
msgid "Link already exists"
msgstr "Bağlantı mevcut"
-#: lib/RT/Record.pm:1320
+#: lib/RT/Record.pm:1324
msgid "Link could not be created"
msgstr "Bağlantı oluşturulamıyor"
-#: lib/RT/Record.pm:1326
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link created (%1)"
msgstr "Bağlantı oulşturuldu (%1)"
-#: lib/RT/Record.pm:1387
-#. ($TransString)
+#: NOT FOUND IN SOURCE
msgid "Link deleted (%1)"
msgstr "Bağlantı silindi (%1)"
-#: lib/RT/Record.pm:1393
+#: lib/RT/Record.pm:1405
msgid "Link not found"
msgstr "Bağlantı bulunamadı"
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
#. ($Ticket->Id)
msgid "Link ticket #%1"
msgstr "Bileti baÄŸla #%1"
-#: html/Admin/CustomFields/Modify.html:102
+#: share/html/Admin/CustomFields/Modify.html:93
msgid "Link values to"
msgstr "DeÄŸerleri baÄŸla:"
-#: lib/RT/Ticket_Overlay.pm:700
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:612
msgid "Linking. Permission denied"
msgstr "Bağlanıyor. Erişim reddedildi"
-#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
msgid "Links"
msgstr "Bağlantılar"
-#: html/Search/Elements/EditSearches:75
+#: share/html/Search/Elements/EditSearches:79
msgid "Load"
msgstr "Yükle"
-#: html/Search/Elements/EditSearches:73
+#: share/html/Search/Elements/EditSearches:77
msgid "Load saved search:"
msgstr "Kaydedilmiş aramayı yükle:"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "LoadSavedSearch"
msgstr ""
-#: html/Admin/Tools/Configuration.html:64
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
msgid "Loaded perl modules"
msgstr "Yüklenmiş Perl modülleri"
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Loaded search %1"
msgstr "Yüklenmiş arama %1"
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
msgid "Location"
msgstr "Konum"
-#: html/Elements/Header:91
+#: share/html/Elements/PersonalQuickbar:7
#. ("<span>".$session{'CurrentUser'}->Name."</span>")
msgid "Logged in as %1"
msgstr "%1 olarak giriş yapıldı"
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
msgid "Login"
msgstr "GiriÅŸ yap"
-#: html/Elements/Header:101
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
msgid "Logout"
msgstr "Çık"
-#: lib/RT/CustomField_Overlay.pm:932
+#: lib/RT/CustomField_Overlay.pm:906
msgid "Lookup type mismatch"
msgstr "Arama türü eşleşmedi"
-#: html/Search/Bulk.html:82
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
msgid "Make Owner"
msgstr "Yapım Sahibi"
-#: html/Search/Bulk.html:106
+#: share/html/Search/Bulk.html:113
msgid "Make Status"
msgstr "Yapım Durumu"
-#: html/Search/Bulk.html:114
+#: share/html/Search/Bulk.html:121
msgid "Make date Due"
msgstr "Yapım Zamanlaması"
-#: html/Search/Bulk.html:116
+#: share/html/Search/Bulk.html:123
msgid "Make date Resolved"
msgstr "Yapım tarihi Çözümlendi"
-#: html/Search/Bulk.html:110
+#: share/html/Search/Bulk.html:117
msgid "Make date Started"
msgstr "Yapma tarihi Başladı"
-#: html/Search/Bulk.html:108
+#: share/html/Search/Bulk.html:115
msgid "Make date Starts"
msgstr "Yapma tarihi Başlangıcı"
-#: html/Search/Bulk.html:112
+#: share/html/Search/Bulk.html:119
msgid "Make date Told"
msgstr "Yapım tarihi Belirtilen"
-#: html/Search/Bulk.html:102
+#: share/html/Search/Bulk.html:109
msgid "Make priority"
msgstr "Yapım önceliği"
-#: html/Search/Bulk.html:104
+#: share/html/Search/Bulk.html:111
msgid "Make queue"
msgstr "Yapım kuyruğu"
-#: html/Search/Bulk.html:100
+#: share/html/Search/Bulk.html:107
msgid "Make subject"
msgstr "Yapım başlığı"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Group_Overlay.pm:95
msgid "Make this group visible to user"
msgstr "Bu grubun, kullanıcıya görünür olmasını sağla"
-#: html/Admin/index.html:78
+#: share/html/Admin/index.html:74
msgid "Manage custom fields and custom field values"
msgstr "Özel alanları ve özel alan değerlerini yönet"
-#: html/Admin/index.html:69
+#: share/html/Admin/index.html:65
msgid "Manage groups and group membership"
msgstr "Grupları ve grup üyeliklerini yönet"
-#: html/Admin/index.html:85
+#: share/html/Admin/index.html:81
msgid "Manage properties and configuration which apply to all queues"
msgstr "Bütün kuyruklara etki eden özellikleri ve ayarları yönetin"
-#: html/Admin/index.html:74
+#: share/html/Admin/index.html:70
msgid "Manage queues and queue-specific properties"
msgstr "Kuyrukları ve kuyruğa-özel özellikleri yönetin"
-#: html/Admin/index.html:64
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
msgid "Manage users and passwords"
msgstr "Kullanıcıları ve parolaları yönetin"
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mar."
msgstr "Mar."
-#: lib/RT/Date.pm:445
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "May."
msgstr "May."
-#: lib/RT/Transaction_Overlay.pm:731
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
#. ($value)
msgid "Member %1 added"
msgstr "Ãœye %1 eklendi"
-#: lib/RT/Transaction_Overlay.pm:771
+#: lib/RT/Transaction_Overlay.pm:828
#. ($value)
msgid "Member %1 deleted"
msgstr "Ãœye %1 silindi"
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Ãœye eklendi"
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "Ãœye eklendi: %1"
-#: lib/RT/Group_Overlay.pm:1162
+#: lib/RT/Group_Overlay.pm:1181
msgid "Member deleted"
msgstr "Ãœye Silindi"
-#: lib/RT/Group_Overlay.pm:1166
+#: lib/RT/Group_Overlay.pm:1185
msgid "Member not deleted"
msgstr "Ãœye Silinemedi"
-#: html/Elements/SelectLinkType:47
+#: share/html/Elements/SelectLinkType:49
msgid "Member of"
msgstr "Ãœye olduÄŸu yer:"
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
msgid "Members"
msgstr "Ãœyeler"
-#: lib/RT/Transaction_Overlay.pm:728
+#: lib/RT/Transaction_Overlay.pm:785
#. ($value)
msgid "Membership in %1 added"
msgstr "%1 için üyelik eklendi"
-#: lib/RT/Transaction_Overlay.pm:768
+#: lib/RT/Transaction_Overlay.pm:825
#. ($value)
msgid "Membership in %1 deleted"
msgstr "%1 için üyelik silindi"
-#: html/Admin/Elements/UserTabs:61
+#: share/html/Admin/Elements/UserTabs:63
msgid "Memberships"
msgstr "Ãœyelikler"
-#: html/Admin/Users/Memberships.html:60
+#: share/html/Admin/Users/Memberships.html:96
#. ($UserObj->Name)
msgid "Memberships of the user %1"
msgstr "%1 üyesinin üyelikleri"
-#: lib/RT/Ticket_Overlay.pm:2893
+#: lib/RT/Ticket_Overlay.pm:2631
msgid "Merge Successful"
msgstr "Birleştirme başarılı"
-#: lib/RT/Ticket_Overlay.pm:2780
+#: lib/RT/Ticket_Overlay.pm:2509
msgid "Merge failed. Couldn't set EffectiveId"
msgstr "Birleştirme başarısız. Etkin Numara atanamıyor"
-#: lib/RT/Ticket_Overlay.pm:2788
+#: lib/RT/Ticket_Overlay.pm:2526
msgid "Merge failed. Couldn't set Status"
msgstr "Birleştirme başarısız. Durum atanamıyor"
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
msgid "Merge into"
-msgstr "Åžununla birleÅŸtir: "
+msgstr "Åžununla birleÅŸtir:"
-#: lib/RT/Transaction_Overlay.pm:734
+#: lib/RT/Transaction_Overlay.pm:791
#. ($value)
msgid "Merged into %1"
msgstr "%1 içinde birleştirildi"
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
msgid "Message"
msgstr "Ä°leti"
-#: html/Ticket/Elements/ShowTransactionAttachments:164
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Message body not shown because it is too large or is not plain text."
msgstr "İleti gövdesi, çok büyük veya düz metin olmadığından gösterilmiyor."
-#: lib/RT/Ticket_Overlay.pm:2451
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
msgid "Message could not be recorded"
msgstr "Ä°leti kaydedilemedi"
-#: lib/RT/Ticket_Overlay.pm:2454
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
msgid "Message recorded"
msgstr "Ä°leti kaydedildi"
-#: html/Ticket/Elements/PreviewScrips:122
+#: share/html/Ticket/Elements/PreviewScrips:85
msgid "Messages about this ticket will not be sent to..."
msgstr "Bu bilet hakkındaki iletiler gönderilmeyecek..."
-#: html/Elements/SelectTimeUnits:47
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
msgid "Minutes"
msgstr "Dakika"
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
+#: NOT FOUND IN SOURCE
msgid "Mismatched parentheses"
msgstr "EÅŸleÅŸmemiÅŸ parantezler"
-#: lib/RT/Record.pm:954
+#: lib/RT/Record.pm:928
msgid "Missing a primary key?: %1"
msgstr "Başlıca anahtarlardan birisi eksik mi?: %1"
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
msgid "Mobile"
msgstr "Hareketli"
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:94
msgid "Modify Access Control List"
msgstr "EriÅŸim Denetim listesini DeÄŸiÅŸtir"
-#: html/Admin/Elements/ObjectCustomFields:96
+#: share/html/Admin/Elements/ObjectCustomFields:98
#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
msgid "Modify Custom Fields which apply to %1 for all %2"
msgstr "Bütün %2 için, %1 etki eden bütün özel alanları değiştir"
-#: html/Admin/Elements/ObjectCustomFields:98
+#: share/html/Admin/Elements/ObjectCustomFields:100
#. (loc(lc($Types)))
msgid "Modify Custom Fields which apply to all %1"
msgstr "Bütün %1 etki eden özel alanları değiştir"
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
msgid "Modify Group Rights"
msgstr "Grup yetkilerini deÄŸiÅŸtir"
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
msgid "Modify Members"
msgstr "Ãœyeleri DeÄŸiÅŸtir"
-#: html/User/Delegation.html:58
+#: share/html/User/Delegation.html:60
msgid "Modify Rights"
msgstr "Yetkileri DeÄŸiÅŸtir"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Bu kuyruk için, senet şablonlarını değiştir"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Bu kuyruk için senetleri değiştir"
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
msgid "Modify User Rights"
msgstr "Kullanıcı haklarını değiştir"
-#: html/Admin/Queues/CustomField.html:66
+#: share/html/Admin/Queues/CustomField.html:68
#. ($QueueObj->Name())
msgid "Modify a CustomField for queue %1"
msgstr "%1 kuyruğu için bir ÖzelAlanı değiştir"
-#: html/Admin/Queues/Scrip.html:82
+#: share/html/Admin/Queues/Scrip.html:83
#. ($QueueObj->Name)
msgid "Modify a scrip for queue %1"
msgstr "%1 kuyruğu için bir senet değiştir"
-#: html/Admin/Global/Scrip.html:75
+#: share/html/Admin/Global/Scrip.html:76
msgid "Modify a scrip that applies to all queues"
msgstr "Bütün kuyruklara etki eden bir senedi değiştir"
-#: html/Admin/CustomFields/Objects.html:90
+#: share/html/Admin/CustomFields/Objects.html:92
#. ($CF->Name)
msgid "Modify associated objects for %1"
msgstr "%1 için, ilişkili nesneleri değiştir"
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
#. ($TicketObj->Id)
msgid "Modify dates for #%1"
msgstr "#%1 için tarihleri değiştir"
-#: html/Ticket/ModifyDates.html:57
+#: share/html/Ticket/ModifyDates.html:60
#. ($TicketObj->Id)
msgid "Modify dates for ticket # %1"
msgstr "Bilet # %1 için, tarihleri değiştir"
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: share/html/Admin/Global/index.html:66
msgid "Modify global custom fields"
msgstr "Küresel özel alanları değiştir"
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
msgid "Modify global group rights"
msgstr "Küresel grup izinlerini değiştir"
-#: html/Admin/Global/GroupRights.html:54
+#: share/html/Admin/Global/GroupRights.html:56
msgid "Modify global group rights."
msgstr "Küresel grup izinlerini değiştir."
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
msgid "Modify global user rights"
msgstr "Küresel kullanıcı izinlerini değiştir"
-#: html/Admin/Global/UserRights.html:54
+#: share/html/Admin/Global/UserRights.html:56
msgid "Modify global user rights."
msgstr "Küresel kullanıcı izinlerini değiştir."
-#: lib/RT/Group_Overlay.pm:163
+#: lib/RT/Group_Overlay.pm:87
msgid "Modify group metadata or delete group"
msgstr "Grup mal bilgisini deÄŸiÅŸtir veya grubu sil"
-#: html/Admin/CustomFields/GroupRights.html:164
+#: share/html/Admin/CustomFields/GroupRights.html:108
#. ($CustomFieldObj->Name)
msgid "Modify group rights for custom field %1"
msgstr "Özel alan %1 için grup izinlerini değiştir"
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
#. ($GroupObj->Name)
msgid "Modify group rights for group %1"
msgstr "%1 grubu için, grup izinlerini değiştir."
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
#. ($QueueObj->Name)
msgid "Modify group rights for queue %1"
msgstr "%1 kuyruğu için, grup izinlerini değiştir."
-#: lib/RT/Group_Overlay.pm:165
+#: lib/RT/Group_Overlay.pm:89
msgid "Modify membership roster for this group"
msgstr "Bu grup için, üyelik listesini değiştir"
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "Modify one's own RT account"
msgstr "Kişinin kendi RT hesabını değiştir"
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
#. ($QueueObj->Name)
msgid "Modify people related to queue %1"
msgstr "%1 ile iliÅŸkili kiÅŸileri deÄŸiÅŸtir"
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
#. ($Ticket->id)
#. ($Ticket->Id)
msgid "Modify people related to ticket #%1"
msgstr "%1 bileti ile iliÅŸkili kiÅŸileri deÄŸiÅŸtir"
-#: html/Admin/Queues/Scrips.html:67
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
#. ($QueueObj->Name)
msgid "Modify scrips for queue %1"
msgstr "%1 kuyruğu için senetleri değiştir"
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
msgid "Modify scrips which apply to all queues"
msgstr "Bütn kuyruklara etki eden senetleri değiştir"
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
msgid "Modify template %1"
msgstr "%1 ÅŸablonunu deÄŸiÅŸtir"
-#: html/Admin/Global/Templates.html:65
+#: share/html/Admin/Global/Templates.html:67
msgid "Modify templates which apply to all queues"
msgstr "Bütün kuyruklara etki eden şablonları değiştir"
-#: html/Admin/Global/index.html:85
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
msgid "Modify the default \"RT at a glance\" view"
msgstr "Varsayılan \"Bir bakışta RT\" görünümünü değiştir"
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
#. ($Group->Name)
msgid "Modify the group %1"
msgstr "%1 grubunu deÄŸiÅŸtir"
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:95
msgid "Modify the queue watchers"
msgstr "Kuyruk gözcülerini değiştir"
-#: html/Admin/Users/Modify.html:309
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
#. ($UserObj->Name)
msgid "Modify the user %1"
msgstr "%1 kullanıcısını değiştir"
-#: html/Ticket/ModifyAll.html:58
+#: share/html/Ticket/ModifyAll.html:61
#. ($Ticket->Id)
msgid "Modify ticket # %1"
msgstr "#%1 biletini deÄŸiÅŸtir"
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
#. ($TicketObj->Id)
msgid "Modify ticket #%1"
msgstr "#%1 biletini deÄŸiÅŸtir"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Biletleri deÄŸiÅŸtir"
-#: html/Admin/CustomFields/UserRights.html:157
+#: share/html/Admin/CustomFields/UserRights.html:99
#. ($CustomFieldObj->Name)
msgid "Modify user rights for custom field %1"
msgstr "Özel alan %1 için kullanıcı haklarını değiştir"
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
#. ($GroupObj->Name)
msgid "Modify user rights for group %1"
msgstr "%1 grubu için kullanıcı haklarını değiştir"
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
#. ($QueueObj->Name)
msgid "Modify user rights for queue %1"
msgstr "%1 kuyruğu için kullanıcı haklarını değiştir"
@@ -2613,11 +3990,23 @@ msgstr "%1 kuyruğu için kullanıcı haklarını değiştir"
msgid "ModifyACL"
msgstr ""
-#: lib/RT/CustomField_Overlay.pm:108
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
msgid "ModifyCustomField"
msgstr ""
-#: lib/RT/Group_Overlay.pm:166
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
msgid "ModifyOwnMembership"
msgstr ""
@@ -2625,1365 +4014,1985 @@ msgstr ""
msgid "ModifyQueueWatchers"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr ""
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:85
msgid "ModifySelf"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr ""
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Mon."
msgstr "Pzt."
-#: html/Ticket/Elements/ShowRequestor:61
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:75
#. ($name)
msgid "More about %1"
msgstr "%1 hakkında daha fazla bilgi"
-#: html/Admin/Elements/PickCustomFields:83
+#: share/html/Admin/Elements/PickCustomFields:85
msgid "Move down"
msgstr "Aşağı git"
-#: html/Admin/Elements/PickCustomFields:75
+#: share/html/Admin/Elements/PickCustomFields:77
msgid "Move up"
msgstr "Yukarı git"
-#: html/Admin/Elements/SelectSingleOrMultiple:48
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
msgid "Multiple"
msgstr "Çoklu"
-#: lib/RT/User_Overlay.pm:226
+#: lib/RT/User_Overlay.pm:160
msgid "Must specify 'Name' attribute"
msgstr "'Ad' özniteliği belirtilmeli"
-#: html/SelfService/Elements/MyRequests:57
+#: share/html/SelfService/Elements/MyRequests:82
#. ($friendly_status)
msgid "My %1 tickets"
msgstr "Benim %1 biletim"
-#: html/Tools/Elements/Tabs:63
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
msgid "My Day"
msgstr "Benim Günüm"
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
msgid "My approvals"
msgstr "Benim Onaylarım"
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
msgid "My saved searches"
msgstr "Benim kaydedilmiş aramalarım"
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
msgid "Name"
msgstr "Ad"
-#: lib/RT/User_Overlay.pm:233
+#: lib/RT/User_Overlay.pm:167
msgid "Name in use"
msgstr "Kullanımdaki ad"
-#: html/Ticket/Elements/ShowDates:73
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowDates:80
msgid "Never"
msgstr "Asla"
-#: html/Elements/EditLinks:117
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr ""
+
+#: share/html/Elements/EditLinks:118
msgid "New Links"
msgstr "Yeni bağlantılar"
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
msgid "New Password"
msgstr "Yeni parola"
-#: etc/initialdata:332
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
msgid "New Pending Approval"
msgstr "Yeni bekleyen onay"
-#: html/Ticket/Elements/Tabs:212
+#: share/html/Ticket/Elements/Tabs:269
msgid "New Search"
msgstr "Yeni arama"
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
msgid "New custom field"
msgstr "Yeni özel alan"
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: share/html/User/Elements/GroupTabs:75
msgid "New group"
msgstr "Yeni grup"
-#: html/SelfService/Prefs.html:53
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
msgid "New password"
msgstr "Yeni parola"
-#: lib/RT/User_Overlay.pm:816
+#: lib/RT/User_Overlay.pm:725
msgid "New password notification sent"
msgstr "Yeni parola uyarısı iletildi"
-#: html/Admin/Elements/QueueTabs:95
+#: NOT FOUND IN SOURCE
msgid "New queue"
msgstr "Yeni kuyruk"
-#: html/Ticket/Elements/Reminders:118
+#: share/html/Ticket/Elements/Reminders:123
msgid "New reminder:"
msgstr "Yeni hatırlatıcı:"
-#: html/Admin/Elements/SelectRights:65
+#: share/html/Admin/Elements/SelectRights:72
msgid "New rights"
msgstr "Yeni yetkiler"
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
msgid "New scrip"
msgstr "Yeni senet"
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
msgid "New template"
msgstr "Yeni ÅŸablon"
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
msgid "New ticket"
msgstr "Yeni bilet"
-#: lib/RT/Ticket_Overlay.pm:2757
+#: lib/RT/Ticket_Overlay.pm:2486
msgid "New ticket doesn't exist"
msgstr "Yeni bilet yok"
-#: html/Admin/Elements/UserTabs:81
+#: NOT FOUND IN SOURCE
msgid "New user"
msgstr "Yeni kullanıcı"
-#: html/Admin/Elements/CreateUserCalled:47
+#: share/html/Admin/Elements/CreateUserCalled:49
msgid "New user called"
-msgstr "Yeni kullanıcı: "
+msgstr "Yeni kullanıcı:"
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
msgid "New watchers"
msgstr "Yeni gözcüler"
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
msgid "Next"
msgstr "Ä°leri"
-#: html/Elements/TicketList:104
+#: NOT FOUND IN SOURCE
msgid "Next Page"
msgstr "Sonraki Sayfa"
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
msgid "Nickname"
msgstr "Rumuz"
-#: html/Admin/CustomFields/UserRights.html:145
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
msgid "No Class defined"
msgstr "Bir sınıf tanımlanmadı"
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
msgid "No CustomField"
msgstr "Özel alan yok"
-#: html/Admin/CustomFields/GroupRights.html:103
+#: share/html/Admin/CustomFields/GroupRights.html:100
msgid "No CustomField defined"
msgstr "Özel alan tanımlanmadı"
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
msgid "No Group defined"
msgstr "Grup alan tanımlanmadı"
-#: lib/RT/Tickets_Overlay_SQL.pm:482
+#: lib/RT/Tickets_Overlay_SQL.pm:292
msgid "No Query"
msgstr "Sorgu Yok"
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
msgid "No Queue defined"
msgstr "Kuyruk tanımlanmadı"
-#: bin/rt-crontool:73
+#: bin/rt-crontool:122
msgid "No RT user found. Please consult your RT administrator.\\n"
msgstr "RT kullanıcısı bulunamadı. Lütfen RT yöneticinize danışın.\\n"
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
msgid "No Template"
msgstr "Åžablon Yok"
-#: html/Approvals/Elements/Approve:77
+#: share/html/Approvals/Elements/Approve:79
msgid "No action"
msgstr "Eylem Yok"
-#: lib/RT/Record.pm:949
+#: lib/RT/Record.pm:923
msgid "No column specified"
msgstr "Sütun belirtilmedi"
-#: html/Ticket/Elements/ShowRequestor:68
+#: share/html/Ticket/Elements/ShowRequestor:83
msgid "No comment entered about this user"
msgstr "Bu kullanıcı hakkında yorum yapılmadı"
-#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
#. (ref $self)
msgid "No description for %1"
msgstr "%1 için herhangi bir tanım yok"
-#: lib/RT/Users_Overlay.pm:190
+#: lib/RT/Users_Overlay.pm:188
msgid "No group specified"
msgstr "Grup belirtilmedi"
-#: html/Admin/Groups/index.html:52
+#: share/html/Admin/Groups/index.html:55
msgid "No groups matching search criteria found."
msgstr "Arama kıstaslarıyla örtüşen bir grup bulunamadı."
-#: lib/RT/Ticket_Overlay.pm:2393
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
msgid "No message attached"
msgstr "Herhangi bir ileti eklenmedi"
-#: lib/RT/User_Overlay.pm:1034
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
msgid "No password set"
msgstr "Herhangi bir parola atanmadı"
-#: lib/RT/Queue_Overlay.pm:361
+#: lib/RT/Queue_Overlay.pm:350
msgid "No permission to create queues"
msgstr "Kuyruk oluşturmak için gerekli yetki yok"
-#: lib/RT/Ticket_Overlay.pm:420
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
#. ($QueueObj->Name)
msgid "No permission to create tickets in the queue '%1'"
msgstr "%1 kuyruğunda bilet oluşturmak için gerekli yetki yok"
-#: lib/RT/User_Overlay.pm:186
+#: NOT FOUND IN SOURCE
msgid "No permission to create users"
msgstr "Kullanıcı oluşturmak için gerekli yetki yok"
-#: html/SelfService/Display.html:167
+#: share/html/SelfService/Display.html:207
msgid "No permission to display that ticket"
msgstr "Bu bileti görüntülemek için gerekli yetki yok"
-#: lib/RT/SavedSearch.pm:156
+#: share/html/Search/Elements/EditSearches:231
msgid "No permission to save system-wide searches"
msgstr "Sistem genelinde yapılan aramaları kaydetmek için gerekli yetki yok"
-#: html/SelfService/Update.html:117
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
msgid "No permission to view update ticket"
msgstr "Bilet güncellemeyi görüntülemek için gerekli yetki yok"
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
msgid "No principal specified"
msgstr "Yetkili belirtilmedi"
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
msgid "No principals selected."
msgstr "Herhangi bir yetkili seçilmedi"
-#: html/Admin/Queues/index.html:57
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: share/html/Admin/Queues/index.html:58
msgid "No queues matching search criteria found."
msgstr "Arama kıstaslarıyla örtüşen bir kuyruk bulunamadı."
-#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
msgid "No rights found"
msgstr "Herhangi bir yetki bulunamadı"
-#: html/Admin/Elements/SelectRights:53
+#: share/html/Admin/Elements/SelectRights:64
msgid "No rights granted."
msgstr "Herhangi bir yetki verilmedi."
-#: lib/RT/SavedSearch.pm:196
+#: NOT FOUND IN SOURCE
msgid "No search loaded"
msgstr "Herhangi bir arama yüklenemedi"
-#: html/Search/Bulk.html:232
+#: share/html/Search/Bulk.html:289
msgid "No search to operate on."
msgstr "İşlenecek bir arama bulunamadı"
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
+#: share/html/Elements/RT__Ticket/ColumnMap:101
msgid "No subject"
msgstr "Başlık yok"
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
msgid "No transaction type specified"
msgstr "Aktarım türü belirtilmedi"
-#: html/Admin/Users/index.html:55
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: share/html/Admin/Users/index.html:56
msgid "No users matching search criteria found."
msgstr "Arama kıstaslarıyla örtüşen herhangi bir kullanıcı bulunamadı."
-#: lib/RT/Record.pm:946
+#: lib/RT/Record.pm:920
msgid "No value sent to _Set!\\n"
msgstr "_Set için herhangi bir değer gönderilmedi!\\n"
-#: html/Elements/QuickCreate:59
+#: share/html/Elements/QuickCreate:61
msgid "Nobody"
msgstr "Hiçkimse"
-#: lib/RT/Record.pm:951
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
msgid "Nonexistant field?"
msgstr "Varolmayan Alan?"
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
msgid "Not Set"
msgstr "Atanmadı"
-#: html/Elements/Header:96
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:12
msgid "Not logged in."
msgstr "Giriş yapılmadı"
-#: lib/RT/Date.pm:397
+#: lib/RT/Date.pm:398
msgid "Not set"
msgstr "Atanmadı"
-#: html/NoAuth/Reminder.html:48
+#: share/html/NoAuth/Reminder.html:50
msgid "Not yet implemented."
msgstr "Henüz oluşturulmadı."
-#: html/Approvals/Elements/Approve:81
+#: share/html/Approvals/Elements/Approve:83
msgid "Notes"
msgstr "Notlar"
-#: lib/RT/User_Overlay.pm:819
+#: lib/RT/User_Overlay.pm:728
msgid "Notification could not be sent"
msgstr "Uyarı gönderilemiyor"
-#: etc/initialdata:101
+#: etc/initialdata:56
msgid "Notify AdminCcs"
msgstr "Yönetici Kk' ları bildir"
-#: etc/initialdata:97
+#: etc/initialdata:52
msgid "Notify AdminCcs as Comment"
msgstr "Yönetici Kk' ları yorum olarak bildir"
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
msgid "Notify Ccs"
msgstr "Kk' ları bildir"
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
msgid "Notify Ccs as Comment"
msgstr "Kk' ları yorum olarak bildir"
-#: etc/initialdata:128
+#: etc/initialdata:83
msgid "Notify Other Recipients"
msgstr "Diğer alıcıları uyar"
-#: etc/initialdata:124
+#: etc/initialdata:79
msgid "Notify Other Recipients as Comment"
msgstr "Diğer alıcıları yorum olarak uyar"
-#: etc/initialdata:85
+#: etc/initialdata:40
msgid "Notify Owner"
msgstr "Sahibi uyar"
-#: etc/initialdata:81
+#: etc/initialdata:36
msgid "Notify Owner as Comment"
msgstr "Sahibi yorum olarak uyar"
-#: etc/initialdata:376
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
msgid "Notify Owner of their rejected ticket"
msgstr "Sahipleri, reddedilen biletleri hakkında uyar"
-#: etc/initialdata:365
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by all approvers"
msgstr "Bütün onaycılar tarafından onaylanan bileti hakkında sahibi uyar"
-#: etc/initialdata:353
+#: NOT FOUND IN SOURCE
msgid "Notify Owner of their ticket has been approved by some approver"
msgstr "Herhangi bir onaycı tarafından onaylanan bileti hakkında sahibi uyar"
-#: etc/initialdata:334
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
msgid "Notify Owners and AdminCcs of new items pending their approval"
msgstr "Onaylanmayı bekleyen yeni öğeler hakkında sahipleri ve Yönetici Kk' ları uyar"
-#: etc/initialdata:77
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
msgid "Notify Requestors"
msgstr "İstekçileri Uyar"
-#: etc/initialdata:111
+#: etc/initialdata:66
msgid "Notify Requestors and Ccs"
msgstr "İstekçileri ve Kk' ları uyar"
-#: etc/initialdata:106
+#: etc/initialdata:61
msgid "Notify Requestors and Ccs as Comment"
msgstr "İstekçileri ve Kk' ları yorum olarak uyar"
-#: etc/initialdata:120
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs"
msgstr "İstekçileri, Kk' ları ve Yönetici Kk' ları uyar"
-#: etc/initialdata:116
+#: NOT FOUND IN SOURCE
msgid "Notify Requestors, Ccs and AdminCcs as Comment"
msgstr "İstekçileri, Kk' ları ve Yönetici Kk' ları yorum olarak uyar"
-#: lib/RT/Date.pm:451
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Nov."
msgstr "Kas."
-#: html/Search/Elements/SelectAndOr:47
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: share/html/Search/Elements/SelectAndOr:49
msgid "OR"
msgstr "VEYA"
-#: lib/RT/Record.pm:322
+#: lib/RT/Record.pm:308
msgid "Object could not be created"
msgstr "Nesne oluşturulamıyor"
-#: lib/RT/Record.pm:123
+#: lib/RT/Record.pm:120
msgid "Object could not be deleted"
msgstr "Nesne silinemiyor"
-#: lib/RT/Record.pm:341
+#: lib/RT/Record.pm:325
msgid "Object created"
msgstr "Nesne oluÅŸturuldu"
-#: lib/RT/Record.pm:120
+#: lib/RT/Record.pm:117
msgid "Object deleted"
msgstr "Nesne silindi"
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
#. ($ObjectType)
#. ($LookupType)
msgid "Object of type %1 cannot take custom fields"
msgstr "%1 türündeki nesneler, özel alanlar alamazlar"
-#: lib/RT/CustomField_Overlay.pm:967
+#: lib/RT/CustomField_Overlay.pm:940
msgid "Object type mismatch"
msgstr "Nesne türü eşleşmiyor"
-#: lib/RT/Date.pm:450
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Oct."
msgstr "Eki."
-#: html/Tools/Elements/Tabs:55
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
msgid "Offline"
msgstr "Çevrimdışı"
-#: html/Tools/Offline.html:49
+#: share/html/Tools/Offline.html:51
msgid "Offline edits"
msgstr "Çevrimdışı düzenlemeler"
-#: html/Tools/Offline.html:46
+#: share/html/Tools/Offline.html:48
msgid "Offline upload"
msgstr "Çevrimdışı yükleme"
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "Tarih:"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
msgid "On %1, %2 wrote:"
msgstr "%1 tarihinde, %2 yazdı:"
-#: etc/initialdata:163
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
msgid "On Comment"
msgstr "Yorumda"
-#: etc/initialdata:156
+#: etc/initialdata:114
msgid "On Correspond"
msgstr "Cevapta"
-#: etc/initialdata:145
+#: etc/initialdata:103
msgid "On Create"
msgstr "OluÅŸturmada"
-#: etc/initialdata:184
+#: etc/initialdata:142
msgid "On Owner Change"
msgstr "Sahiplik deÄŸiÅŸiminde"
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
msgid "On Priority Change"
msgstr "Öncelik değişiminde"
-#: etc/initialdata:192
+#: etc/initialdata:150
msgid "On Queue Change"
msgstr "Kuyruk deÄŸiÅŸiminde"
-#: etc/initialdata:198
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
msgid "On Resolve"
msgstr "Çözümde"
-#: etc/initialdata:169
+#: etc/initialdata:127
msgid "On Status Change"
msgstr "Durum deÄŸiÅŸikliÄŸinde"
-#: etc/initialdata:150
+#: etc/initialdata:108
msgid "On Transaction"
msgstr "Harekette"
-#: html/Approvals/Elements/PendingMyApproval:70
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
msgid "Only show approvals for requests created after %1"
msgstr "Sadece %1 sonrası oluşturulmuş isteklere ait onayları göster"
-#: html/Approvals/Elements/PendingMyApproval:68
+#: share/html/Approvals/Elements/PendingMyApproval:70
#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
msgid "Only show approvals for requests created before %1"
msgstr "Sadece %1 öncesi oluşturulmuş isteklere ait onayları göster"
-#: html/Admin/CustomFields/index.html:75
+#: share/html/Admin/CustomFields/index.html:77
msgid "Only show custom fields for:"
msgstr "Sadece şunun için özel alanları göster:"
-#: html/SelfService/index.html:46
+#: etc/initialdata:94
msgid "Open Tickets"
msgstr "Biletleri Aç"
-#: html/Ticket/Elements/Tabs:160
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
msgid "Open it"
msgstr "Aç"
-#: html/SelfService/Elements/Tabs:75
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
msgid "Open tickets"
msgstr "Biletleri aç"
-#: etc/initialdata:140
+#: etc/initialdata:95
msgid "Open tickets on correspondence"
msgstr "Cevap geldiğinde biletleri aç"
-#: html/Prefs/MyRT.html:70
+#: share/html/Prefs/MyRT.html:74
msgid "Options"
msgstr "Seçenekler"
-#: html/Search/Elements/DisplayOptions:59
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
msgid "Order by"
msgstr "Sıralama:"
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
msgid "Organization"
msgstr "Kurum"
-#: html/Approvals/Elements/Approve:53
+#: share/html/Approvals/Elements/Approve:55
#. ($approving->Id, $approving->Subject)
msgid "Originating ticket: #%1"
msgstr "Kaynak alınan bilet: #%1"
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:679
msgid "Outgoing email about a comment recorded"
msgstr "Bir yorum hakkındaki giden eposta kaydedildi"
-#: lib/RT/Transaction_Overlay.pm:626
+#: lib/RT/Transaction_Overlay.pm:683
msgid "Outgoing email recorded"
msgstr "Giden eposta kaydedildi"
-#: html/Admin/Queues/Modify.html:90
+#: share/html/Admin/Queues/Modify.html:87
msgid "Over time, priority moves toward"
msgstr "Zaman içinde, öncelik ilerler"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Biletleri sahiplen"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "BiletleriSahiplen"
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
msgid "Owner"
msgstr "Sahip"
-#: lib/RT/Ticket_Overlay.pm:505
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:398
msgid "Owner could not be set."
msgstr "Sahip atanamıyor"
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:729
#. ($Old->Name , $New->Name)
msgid "Owner forcibly changed from %1 to %2"
msgstr "Sahip, zorla %1 den %2 ye deÄŸiÅŸtirildi"
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr ""
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Page %1 of %2"
msgstr "Sayfa %1/%2"
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
msgid "Pager"
msgstr "Sayfalayıcı"
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr ""
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
msgid "Parents"
msgstr "Ana bölüm"
-#: html/Elements/Login:95 html/User/Prefs.html:105
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
msgid "Password"
msgstr "Parola"
-#: html/NoAuth/Reminder.html:46
+#: share/html/NoAuth/Reminder.html:48
msgid "Password Reminder"
msgstr "Parola Hatırlatıcı"
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
msgid "Password changed"
msgstr "Parola deÄŸiÅŸti"
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
msgid "Password needs to be at least %1 characters long"
msgstr "Parola en az %1 karakter uzunluğunda olmalı"
-#: lib/RT/User_Overlay.pm:1044
+#: lib/RT/User_Overlay.pm:945
msgid "Password set"
msgstr "Parola atandı"
-#: html/User/Prefs.html:240
+#: share/html/User/Prefs.html:266
#. (loc_fuzzy($msg))
msgid "Password: %1"
msgstr "Parola: %1"
-#: lib/RT/User_Overlay.pm:1030
+#: lib/RT/User_Overlay.pm:931
msgid "Password: Permission Denied"
msgstr "Parola: Ä°zin Reddedildi"
-#: html/Admin/Users/Modify.html:364
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
msgid "Passwords do not match."
msgstr "Parolalar eÅŸleÅŸmiyor"
-#: html/User/Prefs.html:242
+#: share/html/User/Prefs.html:268
msgid "Passwords do not match. Your password has not been changed"
msgstr "Parolalar eşleşmiyor. Parolanız değişmedi"
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
msgid "People"
msgstr "KiÅŸiler"
-#: etc/initialdata:133
+#: etc/initialdata:88
msgid "Perform a user-defined action"
msgstr "Kullanıcı tanımlı bir eylemi yerine getir"
-#: html/Admin/Tools/Configuration.html:94
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
msgid "Perl configuration"
msgstr "Perl ayarları"
-#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
msgid "Permission Denied"
msgstr "Pääsy kielletty"
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
msgid "Permission denied"
msgstr "Ä°zin Reddedildi"
-#: lib/RT/Template_Overlay.pm:372
+#: NOT FOUND IN SOURCE
msgid "Permissions denied"
msgstr "Ä°zin Reddedildi"
-#: html/User/Elements/Tabs:56
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
msgid "Personal Groups"
msgstr "KiÅŸisel gruplar"
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: NOT FOUND IN SOURCE
msgid "Personal groups"
msgstr "KiÅŸisel gruplar"
-#: html/User/Elements/DelegateRights:58
+#: NOT FOUND IN SOURCE
msgid "Personal groups:"
msgstr "KiÅŸisel gruplar:"
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
msgid "Phone numbers"
msgstr "Telefon numaraları"
-#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
msgid "Preferences"
msgstr "Tercihler"
-#: html/Admin/Users/MyRT.html:75
-#. ($pane, $UserObj->Name)
+#: NOT FOUND IN SOURCE
msgid "Preferences %1 for user %2 ."
msgstr "%2 kullanıcısı için %1 tercihleri"
-#: html/Prefs/MyRT.html:141
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
#. ($pane)
msgid "Preferences saved for %1."
msgstr "%1 için tercihler kaydedildi"
-#: lib/RT/Action/Generic.pm:195
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: lib/RT/Action.pm:193
msgid "Prepare Stubbed"
msgstr "Küt hazırla"
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
msgid "Prev"
msgstr "Önceki"
-#: html/Elements/TicketList:101
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Previous Page"
msgstr "Önceki sayfa"
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
#. ($args{'PrincipalId'})
msgid "Principal %1 not found."
msgstr "%1 yetkilisi bulunamadı"
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
msgid "Priority"
msgstr "Öncelik"
-#: html/Admin/Queues/Modify.html:86
+#: share/html/Admin/Queues/Modify.html:82
msgid "Priority starts at"
msgstr "Öncelik başlangıcı:"
-#: html/Search/Elements/EditSearches:50
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
msgid "Privacy:"
msgstr "Gizlilik:"
-#: etc/initialdata:25
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
msgid "Privileged"
msgstr "Ayrıcalıklı"
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
#. (loc_fuzzy($msg))
msgid "Privileged status: %1"
msgstr "Ayrıcalık durumu: &1"
-#: html/Admin/Users/index.html:102
+#: share/html/Admin/Users/index.html:116
msgid "Privileged users"
msgstr "Ayrıcalıklı kullanıcılar"
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: lib/RT/Handle.pm:654
msgid "Pseudogroup for internal use"
msgstr "İç kullanım için sahte grup"
-#: html/Search/Build.html:121
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr ""
+
+#: share/html/Search/Build.html:117
msgid "Query Builder"
msgstr "Sorgu OluÅŸturucu"
-#: html/Search/Elements/Chart:101
+#: share/html/Search/Elements/Chart:105
msgid "Query:"
msgstr "Sorgu:"
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
msgid "Queue"
msgstr "Kuyruk"
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
#. ($Queue)
#. ($id)
msgid "Queue %1 not found"
msgstr "%1 kuyruğu bulunamadı"
-#: html/Admin/Queues/Modify.html:64
+#: share/html/Admin/Queues/Modify.html:62
msgid "Queue Name"
msgstr "Kuyruk adı"
-#: lib/RT/Queue_Overlay.pm:365
+#: lib/RT/Queue_Overlay.pm:354
msgid "Queue already exists"
msgstr "Kuyruk halihazırda mevcut"
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
msgid "Queue could not be created"
msgstr "Kuyruk oluşturulamıyor"
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
msgid "Queue could not be loaded."
msgstr "Kuyruk yüklenemiyor."
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
msgid "Queue created"
msgstr "Kuyruk oluÅŸturuldu"
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
msgid "Queue not found"
msgstr "Kuyruk bulunamadı"
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
msgid "Queues"
msgstr "Kuyruklar"
-#: html/Elements/MyAdminQueues:46
+#: share/html/Elements/MyAdminQueues:48
msgid "Queues I administer"
msgstr "Yönettiğim kuyruklar"
-#: html/Elements/MySupportQueues:46
+#: share/html/Elements/MySupportQueues:48
msgid "Queues I'm an AdminCc for"
msgstr "Yönetici Kk olduğum kuyruklar"
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
msgid "Quick search"
msgstr "Hızlı arama"
-#: html/Elements/QuickCreate:47
+#: share/html/Elements/QuickCreate:49
msgid "Quick ticket creation"
msgstr "Hızlı bilet oluşturumu"
-#: html/Search/Results.html:81
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
msgid "RSS"
msgstr ""
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
-#. ($RT::VERSION, $RT::rtname)
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
msgid "RT %1 for %2"
msgstr "RT %1 - %2"
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
msgid "RT Administration"
msgstr "RT Yönetimi"
-#: html/Elements/Error:63 html/SelfService/Error.html:62
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
msgid "RT Error"
msgstr "RT Hatası"
-#: html/Admin/Tools/Configuration.html:73
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
msgid "RT Variables"
msgstr "RT DeÄŸiÅŸkenleri"
-#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
msgid "RT at a glance"
msgstr "Bir bakışta RT"
-#: html/Admin/Users/MyRT.html:30
+#: share/html/Admin/Users/MyRT.html:79
#. ($UserObj->Name)
msgid "RT at a glance for the user %1"
msgstr "%1 kullanıcısı için bir bakışta RT"
-#: html/Admin/CustomFields/Modify.html:117
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
msgid "RT can include content from another web service when showing this custom field."
msgstr "RT, bu özel alanı gösterirken, diğerbir ağ hizmetinden içerik ekleyebilir"
-#: html/Admin/CustomFields/Modify.html:106
+#: share/html/Admin/CustomFields/Modify.html:96
msgid "RT can make this custom field's values into hyperlinks to another service."
msgstr "RT, bu özel alanın değerlerini, diğer bir hizmetin hiperbağlantılarına dönüştürebilir."
-#: html/Elements/SetupSessionCookie:100
+#: lib/RT/Interface/Web/Session.pm:275
msgid "RT couldn't store your session."
msgstr "RT, oturumunuzu kaydedemiyor."
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::rtname)
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
msgid "RT for %1"
msgstr "%1: RT"
-#: html/Search/Simple.html:58
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
msgid "RT will look for anything else you enter in ticket subjects."
msgstr "RT, bilet başlıklarına gireceğiniz herhangi bir şeyi araştıracaktır."
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
msgstr "RT, <tt>__id__</tt> ve <tt>__CustomField__</tt> değerlerini, kayıt numarası ve özel alan değeri ile değiştirecektir"
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
msgid "Real Name"
msgstr "Gerçek Ad"
-#: lib/RT/Transaction_Overlay.pm:725
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
#. ($value)
msgid "Reference by %1 added"
msgstr "%1 ile baÅŸvuru eklendi"
-#: lib/RT/Transaction_Overlay.pm:765
+#: lib/RT/Transaction_Overlay.pm:822
#. ($value)
msgid "Reference by %1 deleted"
msgstr "%1 ile baÅŸvuru silindi"
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:779
#. ($value)
msgid "Reference to %1 added"
msgstr "%1 için başvuru eklendi"
-#: lib/RT/Transaction_Overlay.pm:762
+#: lib/RT/Transaction_Overlay.pm:819
#. ($value)
msgid "Reference to %1 deleted"
msgstr "%1 için başvuru silindi"
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
msgid "Referred to by"
msgstr "Kaynak gösteren:"
-#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr ""
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
msgid "Refers to"
msgstr "Kaynak gösterdiği:"
-#: html/Elements/Refresh:57
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr ""
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr ""
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
#. ($value/60)
msgid "Refresh this page every %1 minutes."
msgstr "Bu sayfayı, her %1 dakikada bir yenile"
-#: lib/RT/Transaction_Overlay.pm:811
+#: lib/RT/Transaction_Overlay.pm:886
#. ($ticket->Subject)
msgid "Reminder '%1' added"
msgstr "'%1' hatırlatıcısı eklendi"
-#: lib/RT/Transaction_Overlay.pm:824
+#: lib/RT/Transaction_Overlay.pm:899
#. ($ticket->Subject)
msgid "Reminder '%1' completed"
msgstr "'%1' hatırlatıcısı tamamlandı"
-#: lib/RT/Transaction_Overlay.pm:817
+#: lib/RT/Transaction_Overlay.pm:892
#. ($ticket->Subject)
msgid "Reminder '%1' reopened"
msgstr "'%1' hatırlatıcısı tekrar açıldı"
-#: html/Ticket/Reminders.html:46
+#: share/html/Ticket/Reminders.html:48
#. ($Ticket->Id)
msgid "Reminder ticket #%1"
msgstr "Hatırlatıcı bilet #%1"
-#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
msgid "Reminders"
msgstr "Hatırlatıcılar"
-#: html/Ticket/Reminders.html:50
+#: share/html/Ticket/Reminders.html:52
#. ($Ticket->Id)
msgid "Reminders for ticket #%1"
msgstr "#%1 bileti için hatırlatıcılar"
-#: html/Search/Bulk.html:94
+#: share/html/Search/Bulk.html:101
msgid "Remove AdminCc"
msgstr "Yönetici Kk Kaldır"
-#: html/Search/Bulk.html:90
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
msgid "Remove Cc"
msgstr "Kk kaldır"
-#: html/Search/Bulk.html:86
+#: share/html/Search/Bulk.html:93
msgid "Remove Requestor"
msgstr "İstekçi kaldır"
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
msgid "Reply"
msgstr "Yanıtla"
-#: html/Admin/Queues/Modify.html:72
+#: share/html/Admin/Queues/Modify.html:74
msgid "Reply Address"
msgstr "Yanıtlama Adresi"
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
msgid "Reply to requestors"
msgstr "İstekçileri Yanıtla"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Biletleri Yanıtla"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "BiletiYanıtla"
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
msgid "Reports"
msgstr "Raporlar"
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
msgid "Requestor"
msgstr "İstekçi"
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
msgid "Requestors"
msgstr "İstekçiler"
-#: html/Admin/Queues/Modify.html:96
+#: share/html/Admin/Queues/Modify.html:94
msgid "Requests should be due in"
msgstr "İsteklerin yapılacağı zaman:"
-#: lib/RT/Attribute_Overlay.pm:146
+#: lib/RT/Attribute_Overlay.pm:149
#. ('Object')
msgid "Required parameter '%1' not specified"
msgstr "Gerekli parametre '%1' belirtilmedi"
-#: html/Elements/Submit:83
+#: share/html/Elements/Submit:101
msgid "Reset"
msgstr "Sıfırla"
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
msgid "Reset to default"
msgstr "Varsayılana sıfırla"
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
msgid "Residence"
msgstr "Hane"
-#: html/Ticket/Elements/Tabs:156
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
msgid "Resolve"
msgstr "Çöz"
-#: html/Ticket/Update.html:156
+#: share/html/Ticket/Update.html:176
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Resolve ticket #%1 (%2)"
msgstr "#%1 biletini çözümle (%2)"
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
msgid "Resolved"
msgstr "Çözüldü"
-#: html/Tools/Reports/Elements/Tabs:55
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
msgid "Resolved by owner"
msgstr "Sahip tarafından çözüldü"
-#: html/Tools/Reports/Elements/Tabs:59
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
msgid "Resolved in date range"
msgstr "Zaman aralığında çözüldü"
-#: html/Tools/Reports/ResolvedByDates.html:52
+#: share/html/Tools/Reports/ResolvedByDates.html:54
msgid "Resolved tickets in period, grouped by owner"
msgstr "Dönemdeki çözülmüş biletler (sahip ile gruplandırılmış)"
-#: html/Tools/Reports/ResolvedByOwner.html:50
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
msgid "Resolved tickets, grouped by owner"
msgstr "Çözülmüş biletler (sahip ile gruplandırılmış)"
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
msgid "Results"
msgstr "Sonuçlar"
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
msgid "Retype Password"
msgstr "Parolayı tekrar yazın"
-#: html/Search/Elements/EditSearches:61
+#: share/html/Search/Elements/EditSearches:61
msgid "Revert"
msgstr "Eskiye dön"
-#: lib/RT/ACE_Overlay.pm:630
+#: lib/RT/ACE_Overlay.pm:410
msgid "Right Delegated"
msgstr "Yetki Aktarıldı"
-#: lib/RT/ACE_Overlay.pm:320
+#: lib/RT/ACE_Overlay.pm:310
msgid "Right Granted"
msgstr "Yetki Verildi"
-#: lib/RT/ACE_Overlay.pm:178
+#: lib/RT/ACE_Overlay.pm:175
msgid "Right Loaded"
msgstr "Yetki Yüklendi"
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
msgid "Right could not be revoked"
msgstr "Yetki geri alınamıyor"
-#: html/User/Delegation.html:85
+#: share/html/User/Delegation.html:87
msgid "Right not found"
msgstr "Yetki bulunamadı"
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
msgid "Right not loaded."
msgstr "Yetki yüklenemedi"
-#: lib/RT/ACE_Overlay.pm:712
+#: lib/RT/ACE_Overlay.pm:492
msgid "Right revoked"
msgstr "Yetki geri alındı"
-#: html/Admin/Elements/UserTabs:70
+#: NOT FOUND IN SOURCE
msgid "Rights"
msgstr "Yetkiler"
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
+#: lib/RT/Interface/Web.pm:1297
#. ($object_type)
msgid "Rights could not be granted for %1"
msgstr "Yetkiler %1 için verilemiyor"
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
+#: NOT FOUND IN SOURCE
msgid "Rights could not be revoked for %1"
msgstr "Yetkiler %1 için geri alınamıyor"
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
msgid "Roles"
msgstr "Roller"
-#: html/Prefs/MyRT.html:72
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
msgid "Rows per box"
msgstr "Kutu başına satır"
-#: html/Search/Elements/DisplayOptions:93
+#: share/html/Search/Elements/DisplayOptions:90
msgid "Rows per page"
msgstr "Sayfa başına satır"
-#: lib/RT/Date.pm:422
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sat."
msgstr "Cmt."
-#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
msgid "Save"
msgstr "Kaydet"
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
msgid "Save Changes"
msgstr "DeÄŸiÅŸiklikleri Kaydet"
-#: html/User/Prefs.html:181
+#: share/html/User/Prefs.html:206
msgid "Save Preferences"
msgstr "Tercihleri Kaydet"
-#: html/Ticket/Elements/PreviewScrips:131
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Save changes"
msgstr "DeÄŸiÅŸiklikleri kaydet"
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Saved search %1"
msgstr "KaydedilmiÅŸ arama %1"
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr ""
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
#. ($id)
msgid "Scrip #%1"
msgstr "Senet #%1"
-#: lib/RT/Scrip_Overlay.pm:203
+#: lib/RT/Scrip_Overlay.pm:167
msgid "Scrip Created"
msgstr "Senet oluÅŸturuldu"
-#: html/Admin/Elements/EditScrip:52
+#: share/html/Admin/Elements/EditScrip:54
msgid "Scrip Fields"
msgstr "Senet alanları"
-#: html/Admin/Elements/EditScrips:109
+#: share/html/Admin/Elements/EditScrips:104
msgid "Scrip deleted"
msgstr "Senet silindi"
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
msgid "Scrips"
msgstr "Senetler"
-#: html/Admin/Queues/Scrips.html:55
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:57
msgid "Scrips which apply to all queues"
msgstr "Bütün kuyruklara etki eden senetler"
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
msgid "Search"
msgstr "Arama"
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
msgid "Search Preferences"
msgstr "Arama Tercihleri"
-#: lib/RT/SavedSearch.pm:115
+#: NOT FOUND IN SOURCE
msgid "Search attribute load failure"
msgstr "Arama özniteliği yükleme hatası"
-#: html/Approvals/Elements/PendingMyApproval:59
+#: share/html/Approvals/Elements/PendingMyApproval:61
msgid "Search for approvals"
msgstr "Onayları ara"
-#: html/Search/Simple.html:67
+#: share/html/Search/Simple.html:77
msgid "Search for tickets"
msgstr "Biletleri ara"
-#: html/Search/Simple.html:55
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
msgstr "Biletleri ara. Bilet <strong>numarasını</strong>, <strong>Kuyrukları</strong> adı ile, Sahipleri <strong>kulanıcı adı</strong> ile ve İstekçileri <strong>eposta adresi</strong> ile girin. RT, girdiğiniz diğer şeyleri bilet gövdelerinde ve eklentilerde arayacaktır."
-#: html/User/Elements/Tabs:62
+#: share/html/User/Elements/Tabs:70
msgid "Search options"
msgstr "Arama tercihleri"
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
msgid "Search results grouped by %1"
msgstr "Arama sonuçları %1 ile gruplandırılmıştır."
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Search update: %1"
msgstr "Arama güncellemesi: %1"
-#: html/Search/Simple.html:57
+#: share/html/Search/Simple.html:61
msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
msgstr "Her bir biletin tüm metninin aranması uzun sürebilir, ama eğer bunu yapmanız gerkiyorsa, <b>fulltext:<i>kelime</i></b> yazarak tüm bilet tarihçesindeki herhangi bir kelimeyi aratabilirsiniz."
-#: bin/rt-crontool:265
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
msgid "Security:"
msgstr "Güvenlik:"
-#: html/Elements/ShowCustomFields:98
+#: share/html/Elements/ShowCustomFields:108
msgid "See also:"
msgstr "Bakınız:"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
msgid "See custom fields"
msgstr "Özel alanları gör"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "See exact outgoing email messages and their recipeients"
msgstr "Giden eposta iletilerinin tamamını ve alıcılarını gör"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Biletin gizli yorumlarını gör"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Bilet özetlerini gör"
-#: lib/RT/CustomField_Overlay.pm:105
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
msgid "SeeCustomField"
msgstr "ÖzelAlanıGör"
-#: lib/RT/Group_Overlay.pm:169
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
msgid "SeeGroup"
msgstr "GrubuGör"
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:91
msgid "SeeQueue"
msgstr "KuyruğuGör"
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
msgid "Select a Custom Field"
msgstr "Özel bir alanı seç"
-#: html/Admin/Groups/index.html:78
+#: share/html/Admin/Groups/index.html:88
msgid "Select a group"
msgstr "Bir grubu seç"
-#: html/Admin/Queues/index.html:54
+#: share/html/Admin/Queues/index.html:56
msgid "Select a queue"
msgstr "Bir kuyruğu seç"
-#: html/SelfService/CreateTicketInQueue.html:48
+#: share/html/SelfService/CreateTicketInQueue.html:50
msgid "Select a queue for your new ticket"
msgstr "Yeni biletiniz için bir kuyruk seçin"
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
msgid "Select a user"
msgstr "Bir kullanıcı seçin"
-#: html/Admin/Elements/CustomFieldTabs:90
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Select custom field"
msgstr "Özel alan seçin"
-#: html/Admin/Global/CustomFields/index.html:70
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
msgid "Select custom fields for all user groups"
msgstr "Bütün kullanıcı grupları için özel alanları seçin"
-#: html/Admin/Global/CustomFields/index.html:65
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
msgid "Select custom fields for all users"
msgstr "Bütün kullanıcılar için özel alanları seçin"
-#: html/Admin/Global/CustomFields/index.html:76
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
msgid "Select custom fields for tickets in all queues"
msgstr "Bütün kuyruklardaki biletler için özel alanlar seç"
-#: html/Admin/Global/CustomFields/index.html:83
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
msgid "Select custom fields for transactions on tickets in all queues"
msgstr "Bütün kuyruklardaki biletlerin hareketleri için özel alanlar seçin"
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: share/html/User/Elements/GroupTabs:73
msgid "Select group"
msgstr "Grup seçin"
-#: lib/RT/CustomField_Overlay.pm:59
+#: lib/RT/CustomField_Overlay.pm:60
msgid "Select multiple values"
msgstr "Çoklu değer seçin"
-#: lib/RT/CustomField_Overlay.pm:60
+#: lib/RT/CustomField_Overlay.pm:61
msgid "Select one value"
msgstr "Bir değer seçin"
-#: html/Admin/Elements/QueueTabs:92
+#: NOT FOUND IN SOURCE
msgid "Select queue"
msgstr "Kuyruk seçin"
-#: html/Prefs/Quicksearch.html:53
+#: share/html/Prefs/Quicksearch.html:55
msgid "Select queues to be displayed on the \"RT at a glance\" page"
msgstr "\"Bir bakışta RT\" sayfasında görüntülenecek kuyrukları seçin"
-#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
msgid "Select scrip"
msgstr "Senet seçin"
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
msgid "Select template"
msgstr "Şablon seçin"
-#: lib/RT/CustomField_Overlay.pm:61
+#: lib/RT/CustomField_Overlay.pm:62
msgid "Select up to %1 values"
msgstr "En çok %1 adet değer seçin"
-#: html/Admin/Elements/UserTabs:78
+#: NOT FOUND IN SOURCE
msgid "Select user"
msgstr "Kullanıcı seç"
-#: html/Admin/Elements/EditCustomFields:58
+#: share/html/Admin/Elements/EditCustomFields:60
msgid "Selected Custom Fields"
msgstr "Seçili özel alanlar"
-#: html/Admin/CustomFields/Objects.html:59
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
msgid "Selected objects"
msgstr "Seçili nesneler"
-#: html/Widgets/SelectionBox:209
+#: share/html/Widgets/SelectionBox:228
msgid "Selections modified. Please save your changes"
msgstr "Seçimler değişti. Lütfen değişikliklerinizi kaydedin"
-#: etc/initialdata:121
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers"
msgstr "Tüm izleyicilere posta gönder"
-#: etc/initialdata:117
+#: NOT FOUND IN SOURCE
msgid "Send mail to all watchers as a \"comment\""
msgstr "Tüm izleyicilere \"yorum\" olarak posta gönder"
-#: etc/initialdata:112
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
msgid "Send mail to requestors and Ccs"
msgstr "İstekçilere ve Kk' lara posta gönder"
-#: etc/initialdata:107
+#: etc/initialdata:62
msgid "Send mail to requestors and Ccs as a comment"
msgstr "İstekçilere ve Kk' lara yorum olarak posta gönder"
-#: etc/initialdata:78
+#: etc/initialdata:33
msgid "Sends a message to the requestors"
msgstr "İstekçilere posta gönderir"
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:80 etc/initialdata:84
msgid "Sends mail to explicitly listed Ccs and Bccs"
msgstr "Belirtilmiş Kk ve GKk listesine posta gönderir"
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
msgid "Sends mail to the Ccs"
msgstr "Kk' lara posta gönderir"
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
msgid "Sends mail to the Ccs as a comment"
msgstr "Kk' lara yorum olarak eposta gönderir"
-#: etc/initialdata:102
+#: etc/initialdata:57
msgid "Sends mail to the administrative Ccs"
msgstr "Yönetimsel Kk' lara eposta gönderir"
-#: etc/initialdata:98
+#: etc/initialdata:53
msgid "Sends mail to the administrative Ccs as a comment"
msgstr "Yönetimsel Kk' lara yorum olarak eposta gönderir"
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:37 etc/initialdata:41
msgid "Sends mail to the owner"
msgstr "Sahibe posta gönderir"
-#: lib/RT/Date.pm:449
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sep."
msgstr "Eki."
-#: html/Ticket/Elements/ShowTransaction:158
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:168
msgid "Show"
msgstr "Göster"
-#: html/Approvals/index.html:52
+#: NOT FOUND IN SOURCE
msgid "Show Approvals"
msgstr "Onayları Göster"
-#: html/Search/Elements/EditFormat:56
+#: share/html/Search/Elements/EditFormat:54
msgid "Show Columns"
msgstr "Sütunları göster"
-#: html/Ticket/Elements/Tabs:220
+#: share/html/Ticket/Elements/Tabs:309
msgid "Show Results"
msgstr "Sonuçları Göster"
-#: html/Approvals/Elements/PendingMyApproval:64
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
msgid "Show approved requests"
msgstr "Onaylanmış istekleri göster"
-#: html/Ticket/Create.html:316
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
msgid "Show basics"
msgstr "Temelleri Göster"
-#: html/Approvals/Elements/PendingMyApproval:65
+#: share/html/Approvals/Elements/PendingMyApproval:67
msgid "Show denied requests"
msgstr "Reddedilmiş istekleri göster"
-#: html/Ticket/Create.html:319
+#: share/html/Ticket/Create.html:410
msgid "Show details"
msgstr "Ayrıntıları göster"
-#: html/Approvals/Elements/PendingMyApproval:63
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
msgid "Show pending requests"
msgstr "Bekleyen istekleri göster"
-#: html/Approvals/Elements/PendingMyApproval:66
+#: share/html/Approvals/Elements/PendingMyApproval:68
msgid "Show requests awaiting other approvals"
msgstr "Diğer onayları bekleyen istekleri göster"
@@ -3991,899 +6000,1549 @@ msgstr "Diğer onayları bekleyen istekleri göster"
msgid "ShowACL"
msgstr ""
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "ShowConfigTab"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:107
msgid "ShowOutgoingEmail"
msgstr ""
-#: lib/RT/Group_Overlay.pm:168
+#: lib/RT/Group_Overlay.pm:94
msgid "ShowSavedSearches"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:103
msgid "ShowScrips"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:100
msgid "ShowTemplate"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr ""
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "Bilet istekçisi veya bilet veya kuyruk Kk olarak yazılın"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "Bilet veya kuyruk Kk olarak yazılın"
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
msgid "Signature"
msgstr "Ä°mza"
-#: html/Elements/Tabs:68
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
msgid "Simple Search"
msgstr "Basit Arama"
-#: html/Admin/Elements/SelectSingleOrMultiple:47
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
msgid "Single"
msgstr "Tekil"
-#: html/Search/Elements/EditFormat:75
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
msgid "Size"
msgstr "Boyut"
-#: html/Elements/Header:89
+#: share/html/Elements/PersonalQuickbar:5
msgid "Skip Menu"
msgstr "Menüyü Geç"
-#: html/Search/Elements/EditFormat:78
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
msgid "Small"
msgstr "Küçük"
-#: html/Admin/CustomFields/Modify.html:120
+#: share/html/Admin/CustomFields/Modify.html:107
msgid "Some browsers may only load content from the same domain as your RT server."
msgstr "Bazı gezginler, sadece aynı alan adından (RT sunucunuz gibi) içerik yükleyebilirler."
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
msgid "Sort"
msgstr "Sırala"
-#: html/Admin/Elements/EditScrip:78
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
msgid "Stage"
msgstr "AÅŸama"
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
msgid "Started"
msgstr "Başlangıcı"
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
msgid "Starts"
msgstr "BaÅŸlayacak"
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
msgid "State"
msgstr "Durum"
-#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
msgid "Status"
msgstr "Durum"
-#: etc/initialdata:309
+#: etc/initialdata:285
msgid "Status Change"
msgstr "Durum DeÄŸiÅŸikliÄŸi"
-#: html/Ticket/Elements/Tabs:178
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:212
msgid "Steal"
msgstr "Çal"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "Steal tickets"
msgstr "Biletleri Çal"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:118
msgid "StealTicket"
msgstr ""
-#: lib/RT/Transaction_Overlay.pm:678
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
#. ($Old->Name)
msgid "Stolen from %1"
msgstr "%1 den çalındı"
-#: html/Search/Elements/EditFormat:81
+#: NOT FOUND IN SOURCE
+msgid "Stolen from %1 "
+msgstr "%1 den çalındı "
+
+#: share/html/Search/Elements/EditFormat:82
msgid "Style"
msgstr "Biçem"
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
msgid "Subject"
msgstr "Konu"
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
#. ($self->Data)
msgid "Subject changed to %1"
msgstr "Konu deÄŸiÅŸti: %1"
-#: html/Elements/Submit:75
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
msgid "Submit"
msgstr "Gönder"
-#: lib/RT/Group_Overlay.pm:774
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Succeeded"
msgstr "Başarılı"
-#: lib/RT/Date.pm:423
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Sun."
msgstr "Paz."
-#: lib/RT/System.pm:75
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
msgid "SuperUser"
msgstr ""
-#: html/User/Elements/DelegateRights:98
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "System"
msgstr "Sistem"
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
msgid "System Configuration"
msgstr "Sistem Ayarları"
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
msgid "System Error"
msgstr "Sistem Hatası"
-#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
#. ($msg)
msgid "System Error: %1"
msgstr "Sistem Hatası: %1"
-#: html/Admin/Tools/index.html:47
+#: share/html/Admin/Tools/index.html:49
msgid "System Tools"
msgstr "Sistem Araçları"
-#: lib/RT/ACE_Overlay.pm:633
+#: lib/RT/ACE_Overlay.pm:413
msgid "System error. Right not delegated."
msgstr "Sistem hatası. Yetki devredilemedi."
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
msgid "System error. Right not granted."
msgstr "Sistem hatası. Yetki verilemedi."
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
msgid "System groups"
msgstr "Sistem grupları"
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: lib/RT/Handle.pm:706
msgid "SystemRolegroup for internal use"
msgstr "İç kullanım için SistemRolGrubu"
-#: lib/RT/CurrentUser.pm:357
+#: NOT FOUND IN SOURCE
msgid "TEST_STRING"
msgstr "DENEME_YAZISI"
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
msgid "Take"
msgstr "Al"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Biletleri al"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "BiletiAl"
-#: lib/RT/Transaction_Overlay.pm:663
+#: lib/RT/Transaction_Overlay.pm:720
msgid "Taken"
msgstr "Alındı"
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
msgid "Template"
msgstr "Åžablon"
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
#. ($TemplateObj->Id())
msgid "Template #%1"
msgstr "Åžablon #%1"
-#: html/Admin/Elements/EditTemplates:110
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Template deleted"
msgstr "Åžablon silindi"
-#: lib/RT/Scrip_Overlay.pm:176
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
msgid "Template is mandatory argument"
msgstr "Şablon gerekli bir argüman"
-#: lib/RT/Scrip_Overlay.pm:180
+#: NOT FOUND IN SOURCE
msgid "Template not found"
msgstr "Şablon bulunamadı"
-#: lib/RT/Template_Overlay.pm:343
+#: lib/RT/Template_Overlay.pm:363
msgid "Template parsed"
msgstr "Şablon ayrıştırıldı"
-#: lib/RT/Template_Overlay.pm:391
+#: lib/RT/Template_Overlay.pm:426
msgid "Template parsing error"
msgstr "Şablon ayrıştırma hatası"
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
msgid "Templates"
msgstr "Åžablonlar"
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
msgid "That is already the current value"
msgstr "Bu, zaten ÅŸimdiki deÄŸer"
-#: lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:441
msgid "That is not a value for this custom field"
msgstr "Bu, bu özel alan için bir değer değil"
-#: lib/RT/Ticket_Overlay.pm:1994
+#: lib/RT/Ticket_Overlay.pm:1701
msgid "That is the same value"
msgstr "Bu, aynı değer"
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
msgid "That principal already has that right"
msgstr "Bu yetkili, zaten bu hakka sahip"
-#: lib/RT/Queue_Overlay.pm:753
+#: lib/RT/Queue_Overlay.pm:838
#. ($args{'Type'})
msgid "That principal is already a %1 for this queue"
msgstr "Bu yetkili, zaten bu kuyruk için bir %1"
-#: lib/RT/Ticket_Overlay.pm:1435
+#: lib/RT/Ticket_Overlay.pm:1126
#. ($self->loc($args{'Type'}))
msgid "That principal is already a %1 for this ticket"
msgstr "Bu yetkili, zaten bu bilet için bir %1"
-#: lib/RT/Queue_Overlay.pm:852
+#: lib/RT/Queue_Overlay.pm:954
#. ($args{'Type'})
msgid "That principal is not a %1 for this queue"
msgstr "Bu yetkili, zaten bu kuyruk için bir %1 değil"
-#: lib/RT/Ticket_Overlay.pm:1990
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1697
msgid "That queue does not exist"
msgstr "Böyle bir kuyruk mevcut değil"
-#: lib/RT/Ticket_Overlay.pm:3233
+#: lib/RT/Ticket_Overlay.pm:2972
msgid "That ticket has unresolved dependencies"
msgstr "Bu bilet, çözümlenmemiş bağımlılıklara sahip"
-#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
msgid "That user already owns that ticket"
msgstr "Bu kullanıcı, zaten bu biletin sahibi"
-#: lib/RT/Ticket_Overlay.pm:3012
+#: lib/RT/Ticket_Overlay.pm:2732
msgid "That user does not exist"
msgstr "Bu kullanıcı bulunamadı"
-#: lib/RT/User_Overlay.pm:389
+#: lib/RT/User_Overlay.pm:304
msgid "That user is already privileged"
msgstr "Bu kullanıcı zaten yetkili"
-#: lib/RT/User_Overlay.pm:410
+#: lib/RT/User_Overlay.pm:325
msgid "That user is already unprivileged"
msgstr "Bu kullanıcı zaten yetkisiz"
-#: lib/RT/User_Overlay.pm:402
+#: lib/RT/User_Overlay.pm:317
msgid "That user is now privileged"
msgstr "Bu kullanıcı şu anda yetkilendirildi"
-#: lib/RT/User_Overlay.pm:423
+#: lib/RT/User_Overlay.pm:338
msgid "That user is now unprivileged"
msgstr "Bu kullanıcı artık yetkisiz"
-#: lib/RT/Ticket_Overlay.pm:3031
+#: lib/RT/Ticket_Overlay.pm:2782
msgid "That user may not own tickets in that queue"
msgstr "Bu kullanıcı, bu kuyruktaki biletleri sahiplenemez"
-#: lib/RT/Link_Overlay.pm:233
+#: lib/RT/Link_Overlay.pm:224
msgid "That's not a numerical id"
msgstr "Bu, sayısal bir kimlik değil"
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
msgid "The Basics"
msgstr "Temeller"
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:101
msgid "The CC of a ticket"
msgstr "Bir biletin KK' sı"
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
msgid "The administrative CC of a ticket"
msgstr "Bir biletin yönetimsel KK' sı"
-#: bin/rt-crontool:275
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
msgstr "Sonraki komut, 'genel' kuyruğundaki bütün biletleri bulacak ve eğer son 4 saat içinde dokunulmamışlarsa, önem derecelerini 99 a yükseltecektir."
-#: lib/RT/Record.pm:948
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
msgid "The new value has been set."
msgstr "Yeni değer atandı."
-#: lib/RT/ACE_Overlay.pm:110
+#: lib/RT/ACE_Overlay.pm:99
msgid "The owner of a ticket"
msgstr "Bir biletin sahibi"
-#: lib/RT/ACE_Overlay.pm:111
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
msgid "The requestor of a ticket"
msgstr "Bir biletin istekçisi"
-#: html/Admin/Elements/EditUserComments:47
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
msgid "These comments aren't generally visible to the user"
msgstr "Bu yorumlar, genellikle kullanıcıya görünür değillerdir"
-#: lib/RT/CustomField_Overlay.pm:978
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:950
msgid "This custom field does not apply to that object"
msgstr "Bu özel alan, bu nesneye etkimez"
-#: html/Admin/Tools/Configuration.html:50
+#: share/html/Admin/Tools/Configuration.html:52
msgid "This feature is only available to system administrators"
msgstr "Bu özellik, sadece sistem yöneticileri tarafından kullanılabilir"
-#: html/Ticket/Elements/PreviewScrips:96
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
msgid "This message will be sent to..."
msgstr "Bu iletinin gönderileceği kişi..."
-#: bin/rt-crontool:266
+#: bin/rt-crontool:369
msgid "This tool allows the user to run arbitrary perl modules from within RT."
msgstr "Bu araç, kullanıcının RT içinden keyfi perl modüllerini çalıştırabilmesine olanak verir."
-#: lib/RT/Transaction_Overlay.pm:301
+#: lib/RT/Transaction_Overlay.pm:338
msgid "This transaction appears to have no content"
msgstr "Bu hareketin bir içeriğe sahip olmadığı gözüküyor"
-#: html/Ticket/Elements/ShowRequestor:70
+#: share/html/Ticket/Elements/ShowRequestor:85
#. ($rows)
msgid "This user's %1 highest priority tickets"
msgstr "Bu kullanıcının %1 en yüksek öneme sahip biletleri"
-#: lib/RT/Date.pm:420
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Thu."
msgstr "Per."
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr ""
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket #%1 Jumbo update: %2"
msgstr "Bilet #%1 Büyük güncelleme: %2"
-#: html/Approvals/Elements/ShowDependency:67
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
#. ($link->BaseObj->Id, $link->BaseObj->Subject)
msgid "Ticket #%1: %2"
msgstr "Bilet #%1: %2"
-#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
#. ($T::Tickets{$template_id}->Id)
#. ($T::Tickets{$template_id}->id)
#. ($ticket->Id)
msgid "Ticket %1"
msgstr "Bilet %1"
-#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
#. ($self->Id, $QueueObj->Name)
msgid "Ticket %1 created in queue '%2'"
msgstr "Bilet %1, '%2' kuyruÄŸunda oluÅŸturuldu"
-#: html/Search/Bulk.html:377
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
#. ($Ticket->Id, $_)
msgid "Ticket %1: %2"
msgstr "Bilet %1: %2"
-#: html/Admin/Elements/QueueTabs:74
+#: share/html/Admin/Elements/QueueTabs:76
msgid "Ticket Custom Fields"
msgstr "Bilet Özel Alanları"
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
#. ($Ticket->Id, $Ticket->Subject)
msgid "Ticket History # %1 %2"
msgstr "Bilet geçmişi # %1 %2"
-#: etc/initialdata:324
+#: etc/initialdata:300
msgid "Ticket Resolved"
msgstr "Bilet Çözümlendi"
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
msgid "Ticket Transactions"
msgstr "Bilet Hareketleri"
-#: lib/RT/Tickets_Overlay.pm:1920
+#: lib/RT/Tickets_Overlay.pm:2121
msgid "Ticket content"
msgstr "Bilet oluÅŸturuldu"
-#: lib/RT/Tickets_Overlay.pm:1969
+#: lib/RT/Tickets_Overlay.pm:2170
msgid "Ticket content type"
msgstr "Bilet içerik türü"
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
msgid "Ticket could not be created due to an internal error"
msgstr "Bir iç hata nedeniyle, bilet oluşturulamadı"
-#: html/Ticket/Display.html:55
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: share/html/Ticket/Display.html:63
msgid "Ticket metadata"
msgstr "Bilet özel bilgisi"
-#: etc/initialdata:310
+#: etc/initialdata:286
msgid "Ticket status changed"
msgstr "Bilet durumu deÄŸiÅŸti"
-#: lib/RT/Search/FromSQL.pm:82
+#: lib/RT/Search/FromSQL.pm:80
#. (ref $self)
msgid "TicketSQL search module"
msgstr "BiletSQL arama modülü"
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
msgid "Tickets"
msgstr "Biletler"
-#: html/Tools/Reports/CreatedByDates.html:86
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr ""
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
msgid "Tickets created after"
msgstr "Åžundan sonra oluÅŸturulan biletler:"
-#: html/Tools/Reports/CreatedByDates.html:88
+#: share/html/Tools/Reports/CreatedByDates.html:90
msgid "Tickets created before"
msgstr "Şundan önce oluşturulan biletler:"
-#: html/Tools/Reports/ResolvedByDates.html:87
+#: share/html/Tools/Reports/ResolvedByDates.html:89
msgid "Tickets resolved after"
msgstr "Şundan sonra çözümlenen biletler:"
-#: html/Tools/Reports/ResolvedByDates.html:89
+#: share/html/Tools/Reports/ResolvedByDates.html:91
msgid "Tickets resolved before"
msgstr "Şundan önce çözümlenen biletler:"
-#: html/Approvals/Elements/ShowDependency:48
+#: share/html/Approvals/Elements/ShowDependency:50
msgid "Tickets which depend on this approval:"
msgstr "Bu onaya dayanan biletler:"
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
msgid "Time Estimated"
msgstr "Tahmini Süre"
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
msgid "Time Left"
msgstr "Kalan Süre"
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
msgid "Time Worked"
msgstr "Çalışılan Süre"
-#: lib/RT/Tickets_Overlay.pm:1891
+#: NOT FOUND IN SOURCE
msgid "Time left"
msgstr "Kalan süre"
-#: html/Elements/Footer:51
+#: share/html/Elements/Footer:54
msgid "Time to display"
msgstr "Gösterilecek süre"
-#: lib/RT/Tickets_Overlay.pm:1866
+#: NOT FOUND IN SOURCE
msgid "Time worked"
msgstr "Çalışılan süre"
-#: lib/RT/Ticket_Overlay.pm:1167
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
msgid "TimeWorked"
msgstr "ÇalışılanSüre"
-#: html/Search/Elements/EditFormat:74
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
msgid "Title"
msgstr "Başlık"
-#: html/Elements/Footer:62
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: share/html/Elements/Footer:65
#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
msgid "To inquire about support, training, custom development or licensing, please contact %1."
msgstr "Destek hakkında soru sormak için, kişisel geliştirim veya lisanslama için, lütfen %1 ile temasa geçin."
-#: lib/RT/Ticket_Overlay.pm:1170
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
msgid "Told"
msgstr "Söylendi"
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr ""
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
msgid "Tools"
msgstr "Araçlar"
-#: html/Search/Elements/Chart:130
+#: share/html/Search/Elements/Chart:138
msgid "Total"
msgstr "Toplam"
-#: etc/initialdata:252
+#: etc/initialdata:227
msgid "Transaction"
msgstr "Hareket"
-#: lib/RT/Transaction_Overlay.pm:805
+#: lib/RT/Transaction_Overlay.pm:880
#. ($self->Data)
msgid "Transaction %1 purged"
msgstr "Hareket %1 tasfiye edildi"
-#: lib/RT/Transaction_Overlay.pm:183
+#: lib/RT/Transaction_Overlay.pm:193
msgid "Transaction Created"
msgstr "Hareket OluÅŸturuldu"
-#: html/Admin/Elements/QueueTabs:78
+#: share/html/Admin/Elements/QueueTabs:80
msgid "Transaction Custom Fields"
msgstr "Hareket Özel Alanları"
-#: lib/RT/Transaction_Overlay.pm:128
+#: lib/RT/Transaction_Overlay.pm:126
msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
msgstr "Transaction->Create gerçekleştirilemedi, çünkü bir nesne türü ve kimliği belirtmediniz"
-#: lib/RT/Transaction_Overlay.pm:870
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
msgid "Transactions are immutable"
msgstr "Hareketler deÄŸiÅŸemez"
-#: lib/RT/Date.pm:418
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Tue."
msgstr "Sal."
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
msgid "Type"
msgstr "Tür"
-#: lib/RT/ScripCondition_Overlay.pm:128
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
msgid "Unimplemented"
msgstr "Gerçekleştirilmedi"
-#: html/Admin/Users/Modify.html:89
+#: share/html/Admin/Users/Modify.html:91
msgid "Unix login"
msgstr "Unix giriÅŸi"
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
#. ($self->ContentEncoding)
#. ($ContentEncoding)
msgid "Unknown ContentEncoding %1"
msgstr "Bilinmeyen İçerikKodlaması %1"
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
+#: NOT FOUND IN SOURCE
msgid "Unknown field: $key"
msgstr "Bilinmeyen alan: $key"
-#: html/Elements/SelectResultsPerPage:58
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
msgid "Unlimited"
msgstr "Sınırsız"
-#: html/Search/Elements/SelectSearchesForObjects:64
+#: share/html/Search/Elements/SelectSearchesForObjects:66
msgid "Unnamed search"
msgstr "Adlandırılmamış arama"
-#: etc/initialdata:32
+#: lib/RT/Handle.pm:641
msgid "Unprivileged"
msgstr "Yetkisiz"
-#: html/Admin/Elements/EditCustomFields:60
+#: share/html/Admin/Elements/EditCustomFields:62
msgid "Unselected Custom Fields"
msgstr "Seçilmemiş Özel Alanlar"
-#: html/Admin/CustomFields/Objects.html:61
+#: share/html/Admin/CustomFields/Objects.html:63
msgid "Unselected objects"
msgstr "Seçilmemiş nesneler"
-#: lib/RT/Transaction_Overlay.pm:659
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
msgid "Untaken"
msgstr "Alınmamış"
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
msgid "Update"
msgstr "Güncelle"
-#: html/Ticket/Update.html:135
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: share/html/Ticket/Update.html:147
msgid "Update Ticket"
msgstr "Bileti Güncelle"
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
msgid "Update Type"
msgstr "Türü Güncelle"
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
msgid "Update multiple tickets"
msgstr "Birden çok bileti güncelle"
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
msgid "Update not recorded."
msgstr "Güncelleme kaydedilmedi"
-#: html/Ticket/ModifyAll.html:84
+#: share/html/Ticket/ModifyAll.html:87
msgid "Update ticket"
msgstr "Bileti güncelle"
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
#. ($Ticket->id)
msgid "Update ticket #%1"
msgstr "Bileti güncelle: #%1"
-#: html/Ticket/Update.html:158
+#: share/html/Ticket/Update.html:178
#. ($TicketObj->id, $TicketObj->Subject)
msgid "Update ticket #%1 (%2)"
msgstr "Bileti güncelle: #%1 (%2)"
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
msgid "Update type was neither correspondence nor comment."
msgstr "Güncelleme türü cevap veya yorum değildi."
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
msgid "Updated"
msgstr "Güncellendi"
-#: html/Tools/Offline.html:93
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
msgid "Upload"
msgstr "Yükle"
-#: lib/RT/CustomField_Overlay.pm:84
+#: lib/RT/CustomField_Overlay.pm:85
msgid "Upload multiple files"
msgstr "Çoklu dostya yükle"
-#: lib/RT/CustomField_Overlay.pm:79
+#: lib/RT/CustomField_Overlay.pm:80
msgid "Upload multiple images"
msgstr "Çoklu resim yükle"
-#: lib/RT/CustomField_Overlay.pm:85
+#: lib/RT/CustomField_Overlay.pm:86
msgid "Upload one file"
msgstr "Tek bir dosya yükle"
-#: lib/RT/CustomField_Overlay.pm:80
+#: lib/RT/CustomField_Overlay.pm:81
msgid "Upload one image"
msgstr "Tek bir resim yükle"
-#: lib/RT/CustomField_Overlay.pm:86
+#: lib/RT/CustomField_Overlay.pm:87
msgid "Upload up to %1 files"
msgstr "En çok %1 dosya yükle"
-#: lib/RT/CustomField_Overlay.pm:81
+#: lib/RT/CustomField_Overlay.pm:82
msgid "Upload up to %1 images"
msgstr "En çok %1 resim yükle"
-#: html/Tools/Offline.html:93
+#: share/html/Tools/Offline.html:94
msgid "Upload your changes"
msgstr "Değişikliklerinizi yükleyin"
-#: html/Admin/index.html:90
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
msgid "Use other RT administrative tools"
msgstr "Diğer RT yönetimsel araçlarını kullan"
-#: lib/RT/Ticket_Overlay.pm:506
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:399
#. ($args{'Owner'})
msgid "User '%1' could not be found."
msgstr "Kullanıcı '%1' bulunamadı."
-#: etc/initialdata:132 etc/initialdata:206
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
msgid "User Defined"
msgstr "Kullanıcı Tanımlandı"
-#: html/Admin/Elements/EditScrip:93
+#: share/html/Admin/Elements/EditScrip:95
msgid "User Defined conditions and actions"
msgstr "Kullanıcı tanımlı durumlar ve eylemler"
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
msgid "User Rights"
msgstr "Kullanıcı Hakları"
-#: html/Admin/Users/Modify.html:301
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:310
#. ($msg)
msgid "User could not be created: %1"
msgstr "Kullanıcı oluşturulamıyor: %1"
-#: lib/RT/User_Overlay.pm:330
+#: lib/RT/User_Overlay.pm:264
msgid "User created"
msgstr "Kullanıcı oluşturuldu"
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
msgid "User defined groups"
msgstr "Kullanıcı tanımlı gruplar"
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
msgid "User loaded"
msgstr "Kullanıcı yüklendi"
-#: html/Admin/Groups/index.html:103
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
msgid "User-defined groups"
msgstr "Kullanıcı-tanımlı gruplar"
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
msgid "Username"
msgstr "Kullanıcı adı"
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
msgid "Users"
msgstr "Kullanıcılar"
-#: html/Admin/Users/index.html:85
+#: share/html/Admin/Users/index.html:99
msgid "Users matching search criteria"
msgstr "Arama kıstaslarıyla eşleşen kullanıcılar"
-#: bin/rt-crontool:134
-#. ($transaction->id)
+#: bin/rt-crontool:176
+#. ($txn->id)
msgid "Using transaction #%1..."
msgstr "Hareket #%1 kullanılıyor..."
-#: lib/RT/Tickets_Overlay_SQL.pm:528
+#: lib/RT/Tickets_Overlay_SQL.pm:339
msgid "Valid Query"
msgstr "Geçerli Sorgu"
-#: html/Admin/CustomFields/Modify.html:80
+#: share/html/Admin/CustomFields/Modify.html:85
msgid "Validation"
msgstr "Geçerlilik"
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
msgid "Values"
msgstr "DeÄŸerler"
-#: lib/RT/Queue_Overlay.pm:107
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
msgid "Watch"
msgstr "Gözle"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "YöneticiKkOlarakGözle"
-#: html/Admin/Elements/QueueTabs:63
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
msgid "Watchers"
msgstr "Gözcüler"
-#: lib/RT/Date.pm:419
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "Wed."
msgstr "Çar."
-#: html/Tools/MyDay.html:75
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
msgid "What I did today"
msgstr "Bugün ne yaptım"
-#: etc/initialdata:521
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
msgstr "Bir bilet, bütün onaycılar tarafından onaylandığında, özgün bilete cevap yolla"
-#: etc/initialdata:485
+#: NOT FOUND IN SOURCE
msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
msgstr "Bir bilet, herhangi bir onaycı tarafından onaylandığında, özgün bilete cevap yolla"
-#: etc/initialdata:146
+#: etc/initialdata:104
msgid "When a ticket is created"
msgstr "Bir bilet oluÅŸturulduÄŸunda"
-#: etc/initialdata:418
+#: lib/RT/Approval/Rule/NewPending.pm:54
msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
msgstr "Bir onay bileti oluşturulduğunda, sahibi ve YöneticiKk' yı, nesnenin onaylarını beklediği konusunda uyar"
-#: etc/initialdata:151
+#: etc/initialdata:109
msgid "When anything happens"
msgstr "Herhangi bir ÅŸey olduÄŸunda"
-#: etc/initialdata:199
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
msgid "Whenever a ticket is resolved"
msgstr "Bir bilet çözümlendiğinde"
-#: etc/initialdata:185
+#: etc/initialdata:143
msgid "Whenever a ticket's owner changes"
msgstr "Bir biletin sahibi deÄŸiÅŸtiÄŸinde"
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
msgid "Whenever a ticket's priority changes"
msgstr "Bir biletin önceliği değiştiğinde"
-#: etc/initialdata:193
+#: etc/initialdata:151
msgid "Whenever a ticket's queue changes"
msgstr "Bir biletin kuyruÄŸu deÄŸiÅŸtiÄŸinde"
-#: etc/initialdata:170
+#: etc/initialdata:128
msgid "Whenever a ticket's status changes"
msgstr "Bir biletin durumu deÄŸiÅŸtiÄŸinde"
-#: etc/initialdata:207
+#: etc/initialdata:171
msgid "Whenever a user-defined condition occurs"
msgstr "Kullanıcı tanımlı bir durum oluştuğunda"
-#: etc/initialdata:164
+#: etc/initialdata:122
msgid "Whenever comments come in"
msgstr "Bir yorum geldiÄŸinde"
-#: etc/initialdata:157
+#: etc/initialdata:115
msgid "Whenever correspondence comes in"
msgstr "Cevap geldiÄŸinde"
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
msgid "Work"
msgstr "Çalışma"
-#: html/Search/Results.html:82
+#: NOT FOUND IN SOURCE
msgid "Work offline"
msgstr "Çevrimdışı çalışma"
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
msgid "Worked"
msgstr "Çalışıldı"
-#: lib/RT/Ticket_Overlay.pm:3140
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2898
msgid "You already own this ticket"
msgstr "Bu biletin sahibi zaten sizsiniz"
-#: html/autohandler:214 html/autohandler:222
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
msgid "You are not an authorized user"
msgstr "Yetkili bir kullanıcı değilsiniz"
-#: html/Prefs/Search.html:56
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: share/html/Prefs/Search.html:58
msgid "You can also edit the predefined search itself"
msgstr "Öntanımlı aramanın kendisinide değiştirebilirsiniz"
-#: lib/RT/Ticket_Overlay.pm:3025
+#: lib/RT/Ticket_Overlay.pm:2775
msgid "You can only reassign tickets that you own or that are unowned"
msgstr "Sahibi olduÄŸunuz veya sahipsiz biletleri tekrar tahsis edebilirsiniz"
-#: lib/RT/Ticket_Overlay.pm:3021
+#: lib/RT/Ticket_Overlay.pm:2771
msgid "You can only take tickets that are unowned"
msgstr "Sadece sahibi olmadığınız biletleri alabilirsiniz"
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:772
#. ($num, $queue)
msgid "You found %1 tickets in queue %2"
msgstr "%2 kuyruÄŸunda %1 bilet buldunuz"
-#: html/NoAuth/Logout.html:52
+#: share/html/NoAuth/Logout.html:55
msgid "You have been logged out of RT."
msgstr "RT' den çıkış yaptınız"
-#: html/SelfService/Display.html:133
+#: share/html/SelfService/Display.html:132
msgid "You have no permission to create tickets in that queue."
msgstr "Bu kuyrukta bilet oluÅŸturmaya yetkiniz yok."
-#: lib/RT/Ticket_Overlay.pm:2003
+#: lib/RT/Ticket_Overlay.pm:1710
msgid "You may not create requests in that queue."
msgstr "Bu kuyrukta istek oluşturamazsınız."
-#: html/NoAuth/Logout.html:56
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
msgid "You're welcome to login again"
msgstr "Tekrar giriÅŸ yapabilirsiniz"
-#: etc/initialdata:502
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved by %1. Other approvals may still be pending."
msgstr "İsteğiniz %1 tarafından onaylandı. Diğer onaylar, halen bekliyor olabilir."
-#: etc/initialdata:540
+#: NOT FOUND IN SOURCE
msgid "Your request has been approved."
msgstr "İsteğiniz onaylandı"
-#: etc/initialdata:445
+#: NOT FOUND IN SOURCE
msgid "Your request was rejected."
msgstr "Ä°steÄŸiniz reddedildi."
-#: html/autohandler:251
+#: lib/RT/Interface/Web.pm:425
msgid "Your username or password is incorrect"
msgstr "Kullanıcı adınız veya parolanız yanlış"
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
msgid "Zip"
msgstr "Posta Kodu"
-#: lib/RT/System.pm:87
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr ""
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "Sonra"
+
+#: lib/RT/System.pm:91
msgid "allow creation of saved searches"
msgstr "kaydedilmiş aramaların oluşturulmasına izin ver"
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:90
msgid "allow loading of saved searches"
msgstr "kaydedilmiş aramaların yüklenmesine izin ver"
-#: html/User/Elements/DelegateRights:80
+#: share/html/User/Elements/DelegateRights:82
#. ($right->PrincipalObj->Object->SelfDescription)
msgid "as granted to %1"
msgstr "%1' e verildi"
-#: html/Search/Results.html:83
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "Önce"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "chart"
msgstr "ÅŸema"
-#: html/SelfService/Closed.html:49
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
msgid "closed"
msgstr "kapalı"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "contains"
msgstr "içeriyor"
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
msgid "days"
msgstr "gün"
@@ -4891,118 +7550,222 @@ msgstr "gün"
msgid "deleted"
msgstr "silindi"
-#: html/Search/Elements/PickBasics:61
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "does not match"
msgstr "eÅŸleÅŸmiyor"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: NOT FOUND IN SOURCE
msgid "doesn't contain"
msgstr "içermiyor"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: share/html/Elements/SelectEqualityOperator:61
msgid "equal to"
msgstr "eÅŸittir"
-#: html/Search/Build.html:547
+#: share/html/Search/Elements/EditQuery:93
msgid "error: can't move down"
msgstr "hata: aşağı gidemiyorum"
-#: html/Search/Build.html:569
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
msgid "error: can't move left"
msgstr "hata sola gidemiyorum"
-#: html/Search/Build.html:528
+#: share/html/Search/Elements/EditQuery:92
msgid "error: can't move up"
msgstr "hata yukarı gidemiyorum"
-#: html/Search/Build.html:612
+#: share/html/Search/Elements/EditQuery:188
msgid "error: nothing to delete"
msgstr "hata: silinecek bir ÅŸey yok"
-#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
msgid "error: nothing to move"
msgstr "hata: taşınacak bir şey yok"
-#: html/Search/Build.html:630
+#: share/html/Search/Elements/EditQuery:208
msgid "error: nothing to toggle"
msgstr "hata: deÄŸiÅŸtirecek bir ÅŸey yok"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "greater than"
msgstr "büyüktür"
-#: lib/RT/Group_Overlay.pm:214
+#: lib/RT/Group_Overlay.pm:159
#. ($self->Name)
msgid "group '%1'"
msgstr "grup %1"
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+#: NOT FOUND IN SOURCE
msgid "grouped by %1"
msgstr "%1 ile gruplanmış"
-#: lib/RT/Date.pm:342
+#: lib/RT/Date.pm:345
msgid "hours"
msgstr "saat"
-#: html/Search/Elements/PickBasics:48
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
msgid "id"
msgstr "numara"
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
msgid "is"
msgstr "aynıdır"
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
msgid "isn't"
msgstr "aynı değildir"
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
msgid "less than"
msgstr "azdır"
-#: html/Search/Elements/PickBasics:60
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
msgid "matches"
msgstr "eÅŸleÅŸir"
-#: lib/RT/Date.pm:338
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
msgid "min"
msgstr "en az"
-#: lib/RT/Date.pm:354
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
msgid "months"
msgstr "ay"
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
#: lib/RT/Queue_Overlay.pm:82
msgid "new"
msgstr "yeni"
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
msgid "no name"
msgstr "adsız"
-#: html/Admin/Elements/EditScrips:64
+#: NOT FOUND IN SOURCE
msgid "no value"
msgstr "deÄŸersiz"
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
msgid "none"
msgstr "hiçbiri"
-#: html/Elements/SelectEqualityOperator:59
+#: share/html/Elements/SelectEqualityOperator:61
msgid "not equal to"
msgstr "eÅŸit deÄŸildir"
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "Tarih:"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
msgid "open"
msgstr "açık"
-#: lib/RT/Group_Overlay.pm:219
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
#. ($self->Name, $user->Name)
msgid "personal group '%1' for user '%2'"
msgstr "'%2' kullanıcısı için, kişisel grup '%1'"
-#: lib/RT/Group_Overlay.pm:227
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
#. ($queue->Name, $self->Type)
msgid "queue %1 %2"
msgstr "kuyruk %1 %2"
@@ -5015,15 +7778,31 @@ msgstr "reddedildi"
msgid "resolved"
msgstr "çözüldü"
-#: lib/RT/Date.pm:334
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: lib/RT/Date.pm:337
msgid "sec"
msgstr "saniye"
-#: lib/RT/System.pm:85
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
msgid "show Configuration tab"
msgstr "ayar sekmesini göster"
-#: html/Search/Results.html:80
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
msgid "spreadsheet"
msgstr "hesap çizelgesi"
@@ -5031,49 +7810,89 @@ msgstr "hesap çizelgesi"
msgid "stalled"
msgstr "savsaklandı"
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
+#: NOT FOUND IN SOURCE
msgid "style: %1"
msgstr "biçem: %1"
-#: html/Prefs/MyRT.html:93
+#: share/html/Prefs/MyRT.html:89
msgid "summary rows"
msgstr "özet satırları"
-#: lib/RT/Group_Overlay.pm:222
+#: lib/RT/Group_Overlay.pm:167
#. ($self->Type)
msgid "system %1"
msgstr "sistem %1"
-#: lib/RT/Group_Overlay.pm:233
+#: lib/RT/Group_Overlay.pm:178
#. ($self->Type)
msgid "system group '%1'"
msgstr "sistem grubu '%1'"
-#: html/Elements/Error:64 html/SelfService/Error.html:63
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
msgid "the calling component did not specify why"
msgstr "çağıran bileşen, nedenini belirtmedi"
-#: lib/RT/Group_Overlay.pm:230
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:175
#. ($self->Instance, $self->Type)
msgid "ticket #%1 %2"
msgstr "bilet #%1 %2"
-#: lib/RT/Group_Overlay.pm:236
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
#. ($self->Id)
msgid "undescribed group %1"
msgstr "betimlenmemiÅŸ grup %1"
-#: lib/RT/Group_Overlay.pm:211
+#: lib/RT/Group_Overlay.pm:156
#. ($user->Object->Name)
msgid "user %1"
msgstr "kullanıcı %1"
-#: lib/RT/Date.pm:350
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
msgid "weeks"
msgstr "hafta"
-#: lib/RT/Date.pm:358
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: lib/RT/Date.pm:361
msgid "years"
msgstr "yıl"
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/zh_CN.po b/rt/lib/RT/I18N/zh_CN.po
new file mode 100644
index 0000000..b6cfcad
--- /dev/null
+++ b/rt/lib/RT/I18N/zh_CN.po
@@ -0,0 +1,10953 @@
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-05-07 20:46+0000\n"
+"Last-Translator: liujiang <liujiang_1966@163.com>\n"
+"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 deleted."
+msgstr " 已删除 %1。"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 renamed to %2."
+msgstr " %1 已更å为 %2。"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 saved."
+msgstr " %1 已储存。"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " (没有公钥!)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (没被信任的!)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: NOT FOUND IN SOURCE
+msgid "#%1"
+msgstr "#%1"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr "#%1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "$1"
+msgstr "$1"
+
+#: NOT FOUND IN SOURCE
+msgid "$prefix %1"
+msgstr "$prefix %1"
+
+#: NOT FOUND IN SOURCE
+msgid "%*(%1,group ticket)"
+msgstr "%*(%1) 件å‚与的申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "%*(%1,ticket) due"
+msgstr "%*(%1) 件é™æœŸå®Œæˆçš„申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "%*(%1,unresolved ticket)"
+msgstr "%*(%1) 件尚未解决的申请å•"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr "%1 #%2"
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%4-%2-%3 %1"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%7-%2-%3 %4:%5:%6 %1"
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr "%2 已新增为 %1"
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr "%1 %2 之å‰"
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr "%1 已从 %2 改为 %3"
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr "%2 已自 %1 删除"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 已删除"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 %2 of group %3"
+msgstr "%3 群组的 %1 %2"
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 é‡å‘½å为 %3"
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 å·²ä¿å­˜"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr "æ¡ä»¶ï¼š%1 | 动作:%2 | 模æ¿ï¼š%3"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (%2) %3 this ticket\\n"
+msgstr "%1 (%2) %3 这份申请å•\\n"
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr "%1 (%2) - %3"
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr "%1 (未更改)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - %2 shown"
+msgstr "显示第 %1 - %2 笔"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr "%1 - 传递给 %2 的一个å‚æ•°"
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr "%1 - 将更新状æ€è¾“出到 STDOUT"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify id of the template you want to use"
+msgstr "%1 - 指定欲使用的模æ¿ç¼–å·"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgstr "%1 - 指定欲使用的更动为 'first' (第一项) 或 'last' (最åŽä¸€é¡¹)"
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr "%1 - 指定你è¦ä½¿ç”¨ç¬¬ä¸€ä¸ª('first'),最åŽä¸€ä¸ª('last')还是所有('all') transactions"
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr "%1 - 指定欲使用的动作模å—"
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr "%1 - 指定你è¦ä½¿ç”¨ç”±é€—å·(,)分隔的transactions 类型列表"
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr "%1 - 指定欲使用的æ¡ä»¶æ¨¡å—"
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr "%1 - 指定欲使用的查询模å—"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify the type of a transaction you want to use"
+msgstr "%1 - 指定欲使用的更动类别"
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr "%1 RT %2 版,%4 版æƒæ‰€æœ‰ï¼Œ1996-%3。"
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr "加载手续 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 Total"
+msgstr "共 %1 笔"
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr "新增 %1 作为 %2 的值"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on"
+msgstr "别å %1 需è¦å¯ç”¨çš„申请å•ç¼–å·"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on "
+msgstr "别å %1 需è¦å¯ç”¨çš„申请å•ç¼–å· "
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on (from %2) %3"
+msgstr "别å %1 需è¦å¯ç”¨çš„申请å•ç¼–å·ä»¥å¤„ç† %3(出自 %2)"
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr "%1 存在并且已ç»æœ‰äº†RTçš„æ•°æ®åº“表,但是其中没有RTçš„metadata.。ç¨åŽçš„'åˆå§‹åŒ–æ•°æ®åº“‘步骤能够往里é¢åŠ å…¥metadata. 如果这正是你想è¦çš„,点击下é¢çš„'é…置基本'链接以继续é…ç½®RT。"
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr "%1 存在但是没有RTçš„æ•°æ®åº“表。ç¨åŽçš„'åˆå§‹åŒ–æ•°æ®åº“‘步骤能够建立数æ®åº“表并加入metadata. 如果这正是你想è¦çš„,点击下é¢çš„'é…置基本'链接以继续é…ç½®RT."
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr "%1 看æ¥æ˜¯ä¸ªæœ¬åœ°å¯¹è±¡ï¼Œå´ä¸åœ¨æ•°æ®åº“里"
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr "%1 看æ¥å·²ç»å®Œå…¨åˆå§‹åŒ–了。我们ä¸éœ€è¦å†å»ºç«‹ä»»ä½•çš„æ•°æ®åº“表或者加入存metadata,点击下é¢çš„'é…置基本'链接å¯ä»¥ç»§ç»­é…ç½®RT."
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr "%1 (%2)"
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr "%1 的值从 %2 改为 %3"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr "%1 å¤åˆ¶"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr "无法将 %1 设定为 %2。"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 couldn't init a transaction (%2)\\n"
+msgstr "%1 无法åˆå§‹æ›´æ–° (%2)\\n"
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr "%1 无法将现况设æˆå·²è§£å†³ã€‚RT æ•°æ®åº“内容å¯èƒ½ä¸ä¸€è‡´ã€‚"
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr "已建立 %1"
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr "已删除 %1"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 ä¸å­˜åœ¨."
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "å‰ %1 份待处ç†ç”³è¯·å•"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I own..."
+msgstr "å‰ %1 份待处ç†ç”³è¯·å•..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I requested..."
+msgstr "å‰ %1 份é€å‡ºçš„申请å•..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets pending my approval..."
+msgstr "å‰ %1 份待签核申请å•..."
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr "%1 是从外部排程程åº(如 cron)æ¥å¯¹ç”³è¯·å•è¿›è¡Œæ“作的工具。"
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr "%1 是一个由cronè¿è¡Œçš„工具,å¯ä»¥åˆ†æ´¾æ‰€æœ‰å»¶æœŸçš„通知生æˆæ¯ä¸ªç”¨æˆ·çš„摘è¦ã€‚"
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr "%1 å·²ä¸å†æ˜¯æ­¤è¡¨å•çš„ %2。"
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 å·²ä¸å†æ˜¯æ­¤ç”³è¯·å•çš„ %2。"
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 å·²ä¸å†æ˜¯è‡ªè®¢å­—段 %2 的值。"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 isn't a valid Queue id."
+msgstr "%1 ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„表å•ç¼–å·ã€‚"
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr "%1 分钟"
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr "å‰ %1 份待认领的申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 not shown"
+msgstr "没有显示 %1"
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr "%1 对象"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 recent tickets I own..."
+msgstr "最新 %1 份待处ç†ç”³è¯·å•..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 recent tickets I requested..."
+msgstr "最新 %1 份é€å‡ºçš„申请å•..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 result(s) found"
+msgstr "找到 %1 项结果"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 rights"
+msgstr "%1æƒé™"
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "%1 succeeded\\n"
+msgstr "%1 完æˆ\\n"
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 æ›´æ–°: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 æ›´æ–°: 什么也没有改å˜"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 已更新"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 was created without a CurrentUser\\n"
+msgstr "%1 新增时未指定现行使用者"
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr "%1 会解决在已解决群组里æˆå‘˜çš„申请å•ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
+msgstr "如果 %1 起始申请å•ä¾èµ–于æŸä¸ªé“¾æŽ¥ï¼Œæˆ–是æŸä¸ªé“¾æŽ¥çš„æˆå‘˜ï¼Œå®ƒå°†ä¼šè¢«å»¶å®•ã€‚"
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr "%1 内的 %2 对象"
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr "%1 内的 %2 的 %3 对象"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1的表盘"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr "%1 的预存查询"
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr "%1:未指定附件"
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr "%1 字节"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr "%1k 字节"
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr "%1 å°æ—¶"
+
+#: NOT FOUND IN SOURCE
+msgid "%quant(%1,result) found"
+msgstr "找到 %1 项结果"
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr "'%1' ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„状æ€å€¼"
+
+#: NOT FOUND IN SOURCE
+msgid "'%1' not a recognized action. "
+msgstr "'%1'为无法辨识的动作。 "
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete group member)"
+msgstr "(点选欲删除的æˆå‘˜)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete scrip)"
+msgstr "(点选欲删除的手续)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr "(点选欲删除的项目)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check boxes to delete)"
+msgstr "(点选欲删除的项目)"
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr "(点选欲åœç”¨é€šçŸ¥çš„收件人)"
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr "(点选欲å¯ç”¨é€šçŸ¥çš„收件人)"
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr "(键入申请å•ç¼–å·æˆ–网å€ï¼Œä»¥ç©ºç™½åˆ†éš”)"
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr "(如果留白, 则预设为 %1)"
+
+#: NOT FOUND IN SOURCE
+msgid "(No Value)"
+msgstr "(没有值)"
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr "(没有自订字段)"
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr "(没有æˆå‘˜)"
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr "(没有手续)"
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr "没有模æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "(No workflows)"
+msgstr "没有æµç¨‹"
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr "(æ— )"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<strong>ä¸ä¼š</strong>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的管ç†å‘˜ç”µå­é‚®ä»¶åœ°å€ã€‚è¿™<b>将会</b>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的管ç†å‘˜ç”µå­é‚®ä»¶åœ°å€ã€‚è¿™<strong>将会</strong>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<strong>ä¸ä¼š</strong>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<b>将会</b>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<strong>将会</strong>更改åŽç»­çš„收件者åå•ã€‚)"
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr "(当æ¡ä»¶æˆ–动作设为‘使用者自订’时,请填入这些字段)"
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr "(ä¸ä¼šæ”¶åˆ°é‚®ä»¶)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(ä»»æ„)"
+
+#: NOT FOUND IN SOURCE
+msgid "(default delegate)"
+msgstr "(预设代ç†äºº)"
+
+#: NOT FOUND IN SOURCE
+msgid "(delete)"
+msgstr "(删除)"
+
+#: NOT FOUND IN SOURCE
+msgid "(displaying new and open tickets for %1)"
+msgstr "(显示 %1 å下新建立åŠå¼€å¯ä¸­çš„申请å•)"
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr "(空白)"
+
+#: NOT FOUND IN SOURCE
+msgid "(new)"
+msgstr "(新增)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no name listed)"
+msgstr "(没有列出姓å)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(没有公钥!)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no subject)"
+msgstr "(没有主题)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr "(æ— )"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr "(没有值)"
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr "(仅能指定一份申请å•)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr "(等待签核)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other Collection)"
+msgstr "(等待其它集åˆ)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other tickets)"
+msgstr "(等待其它申请å•)"
+
+#: NOT FOUND IN SOURCE
+msgid "(requestor's group)"
+msgstr "(申请人所属)"
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr "(å¿…å¡«)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "ä¿¡ä»»: %1"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr "(未命å)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "(yyyy/mm/dd)"
+msgstr "(yyyy/mm/dd)"
+
+#: NOT FOUND IN SOURCE
+msgid "*"
+msgstr "★"
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr "-"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "--transaction argument could be only 'first' or 'last'"
+msgstr "--transaction 的值仅能为 'first' 或 'last'"
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "--transaction å‚æ•° åªèƒ½æ˜¯ 'first','last' 或者'all'"
+
+#: NOT FOUND IN SOURCE
+msgid ":"
+msgstr ":"
+
+#: NOT FOUND IN SOURCE
+msgid "<% $Ticket->Status%>"
+msgstr "<% $Ticket->Status%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<% $_ %>"
+msgstr "<% $_ %>"
+
+#: NOT FOUND IN SOURCE
+msgid "<%$_%>"
+msgstr "<%$_%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<%$field%>"
+msgstr "<%$field%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<blank>"
+msgstr "<留空>"
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"æ出申请å•\" />&nbsp;%1"
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"æ出申请å•\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr ""
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr "空白模æ¿"
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr "å£ä»¤æ²¡æœ‰è®¾å®šï¼Œå› æ­¤è¯¥ä½¿ç”¨è€…将无法登入。"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Deleted"
+msgstr "ACE 已删除"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Loaded"
+msgstr "ACE 已加载"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be deleted"
+msgstr "无法删除 ACE"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be found"
+msgstr "找ä¸åˆ° ACE"
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr "找ä¸åˆ° ACE 设定"
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr "祇能新增或删除 ACE 设定。"
+
+#: NOT FOUND IN SOURCE
+msgid "ACLEquivalence"
+msgstr "ACLEquivalence"
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr "AND"
+
+#: NOT FOUND IN SOURCE
+msgid "Aborting to avoid unintended ticket modifications.\\n"
+msgstr "离开以å…ä¸å°å¿ƒæ›´æ”¹åˆ°ç”³è¯·å•ã€‚\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "About Me"
+msgstr "个人信æ¯"
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr "个人信æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Access Right"
+msgstr "系统使用登录æƒé™"
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr "å­˜å–æƒé™"
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr "动作"
+
+#: NOT FOUND IN SOURCE
+msgid "Action %1 not found"
+msgstr "动作 %1 找ä¸åˆ°"
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "没有找到Action '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "Action committed."
+msgstr "动作执行完毕"
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr "动作执行完毕。\\n"
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr "动作为必填字段"
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr "动作准备完毕..."
+
+#: NOT FOUND IN SOURCE
+msgid "Activated Date"
+msgstr "申请激活时间"
+
+#: NOT FOUND IN SOURCE
+msgid "Add"
+msgstr "新增"
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr "新增管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "添加到收è—夹"
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr "新增副本收件人"
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr "新增字段"
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr "新增æ¡ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Add Entry"
+msgstr "新增列"
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr "新增更多附件"
+
+#: NOT FOUND IN SOURCE
+msgid "Add Next State"
+msgstr "新增下一项关å¡"
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr "新增申请人"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr "新增字段值"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip to this queue"
+msgstr "新增此表å•çš„手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip which will apply to all queues"
+msgstr "新增适用于所有表å•çš„手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a keyword selection to this queue"
+msgstr "新增此表å•çš„关键è¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a new a global scrip"
+msgstr "新增全域手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a scrip to this queue"
+msgstr "新增一é“手续到此表å•"
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr "新增一é“用于所有表å•çš„手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Add additional criteria"
+msgstr "新增查询æ¡ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Add and Search"
+msgstr "新增并开始查询"
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr "新增评论或回å¤åˆ°æŒ‡å®šçš„申请å•"
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr "新增æˆå‘˜"
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr "新增视察员"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "增加这些项"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Add these terms to your search"
+msgstr "将这些æ¡ä»¶åŠ è¿›æŸ¥è¯¢å†…"
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr "新增值"
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr "新增ã€åˆ é™¤åŠä¿®æ”¹å¯¹è±¡çš„自订字段值"
+
+#: NOT FOUND IN SOURCE
+msgid "AddNextState"
+msgstr "新增下一项关å¡"
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr "å•ä½å·²æ–°å¢žä¸ºæ­¤è¡¨å•çš„ %1"
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr "å•ä½å·²æ–°å¢žä¸ºæ­¤ç”³è¯·å•çš„ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Additional Hints"
+msgstr "é¢å¤–æ示"
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "地å€"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr "ä½å€"
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr "ä½å€(ç»­)"
+
+#: NOT FOUND IN SOURCE
+msgid "Adjust Blinking Rate"
+msgstr "调整闪çƒé€Ÿåº¦å¿«æ…¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin"
+msgstr "管ç†å‘˜"
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr "管ç†å‘˜å‰¯æœ¬"
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr "管ç†å‘˜è¯„论"
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr "管ç†å‘˜å›žå¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin Rights"
+msgstr "管ç†å‘˜æƒé™"
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr "表å•ç®¡ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin users"
+msgstr "使用者管ç†"
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr "管ç†/全域设定"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Groups"
+msgstr "管ç†/群组"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Queue/Basics"
+msgstr "管ç†/表å•/基本信æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminAddress"
+msgstr "管ç†å‘˜ Email"
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr "管ç†æ‰€æœ‰ä»£ç†äººç¾¤ç»„"
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr "管ç†å‘˜å‰¯æœ¬"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCc.EmailAddress"
+msgstr "管ç†å‘˜å‰¯æœ¬: 电å­é‚®ä»¶ä¿¡ç®±"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "AdminComment"
+msgstr "管ç†å‘˜è¯„论"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCorrespondence"
+msgstr "管ç†å‘˜å›žå¤"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr "管ç†è‡ªè®¢å­—段"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCustomFields"
+msgstr "管ç†è‡ªè®¢å­—段"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr "管ç†ç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupDescription"
+msgstr "管ç†ç¾¤ç»„æè¿°"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr "管ç†ç¾¤ç»„æˆå‘˜"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupName"
+msgstr "管ç†ç¾¤ç»„å称"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupPermission"
+msgstr "管ç†ç¾¤ç»„æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupStatus"
+msgstr "管ç†ç¾¤ç»„状æ€"
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr "管ç†ä»£ç†äººç¾¤ç»„"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr "管ç†è¡¨å•"
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr "管ç†ä½¿ç”¨è€…"
+
+#: NOT FOUND IN SOURCE
+msgid "Administrative"
+msgstr "行政类"
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr "管ç†å‘˜å‰¯æœ¬"
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "管ç†å‘˜å¯†ç "
+
+#: NOT FOUND IN SOURCE
+msgid "Admins"
+msgstr "主管"
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr "高级"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search"
+msgstr "进阶查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search Criteria"
+msgstr "进阶查询æ¡ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Age"
+msgstr "ç»åŽ†æ—¶é—´"
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr "结åˆæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Alias"
+msgstr "执行其它æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Alias for"
+msgstr "相当于"
+
+#: NOT FOUND IN SOURCE
+msgid "All"
+msgstr "全部"
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr "完æˆå…¨éƒ¨ç­¾æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "All Condition"
+msgstr "所有æ¡ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "All Custom Fields"
+msgstr "所有自订字段"
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr "所有表å•"
+
+#: NOT FOUND IN SOURCE
+msgid "All Users"
+msgstr "全体员工"
+
+#: NOT FOUND IN SOURCE
+msgid "All done! Now you can proceed to %1."
+msgstr "处ç†å®Œæ¯•ï¼æ‚¨çŽ°åœ¨å¯ä»¥ç»§ç»­è¿›è¡Œ %1。"
+
+#: NOT FOUND IN SOURCE
+msgid "Allowance Request"
+msgstr "ç¦åˆ©è¡¥åŠ©ç”³è¯·"
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "å·²ç»åŠ å¯†"
+
+#: NOT FOUND IN SOURCE
+msgid "Always sends a message to the requestors independent of message sender"
+msgstr "无论寄件æ¥æºä¸ºä½•ï¼Œä¸€å¾‹å¯„信给申请人"
+
+#: NOT FOUND IN SOURCE
+msgid "Amount"
+msgstr "æ•°é¢"
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr "AND/OR"
+
+#: NOT FOUND IN SOURCE
+msgid "Any Condition"
+msgstr "ä»»æ„æ¡ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Applies To"
+msgstr "套用于"
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr "套用于"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr "套用"
+
+#: NOT FOUND IN SOURCE
+msgid "Apply Template"
+msgstr "引用模æ¿"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr "套用更动"
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr "签核"
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr "ç­¾æ ¸å• #%1:%2"
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr "ç­¾æ ¸å• #%1:系统错误,记录失败"
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr "ç­¾æ ¸å• #%1:记录完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Details"
+msgstr "签核细节"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Due"
+msgstr "签核时é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Notes"
+msgstr "签核æ„è§"
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr "完æˆæŸé¡¹ç­¾æ ¸"
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr "驳回æŸé¡¹ç­¾æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Result"
+msgstr "签核结果"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Status"
+msgstr "核准结果"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Type"
+msgstr "签核ç§ç±»"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval diagram"
+msgstr "签核æµç¨‹"
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr "核准"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver"
+msgstr "签核人"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver Setting"
+msgstr "执行签核人设定"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver's notes: %1"
+msgstr "签核备注:%1"
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "四月"
+
+#: NOT FOUND IN SOURCE
+msgid "Apr."
+msgstr "04"
+
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "四月"
+
+#: NOT FOUND IN SOURCE
+msgid "Are you sure to delete checked items?"
+msgstr "您确定è¦åˆ é™¤ï¼Ÿ"
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr "递增"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr "递增"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr "指派åŠç§»é™¤è‡ªè®¢å­—段"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr "指派自订字段"
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr "附件"
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr "附加档案"
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr "现有附件"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr "无法加载附件 '%1'"
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr "附件新增完毕"
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr "附件档å"
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr "附件"
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr ""
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr "已删除该属性"
+
+#: NOT FOUND IN SOURCE
+msgid "Attributes"
+msgstr "属性"
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "八月"
+
+#: NOT FOUND IN SOURCE
+msgid "Aug."
+msgstr "08"
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "八月"
+
+#: NOT FOUND IN SOURCE
+msgid "AuthSystem"
+msgstr "认è¯æ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoReject"
+msgstr "自动驳回表å•"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoResolve"
+msgstr "自动完æˆè¡¨å•å¤„ç†"
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr "自动回å¤"
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr "自动对申请人回å¤"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoreplyToRequestors"
+msgstr "自动对申请人回å¤"
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr "å¯ç”¨"
+
+#: NOT FOUND IN SOURCE
+msgid "Available Columns"
+msgstr "å¯ç”¨çš„字段:"
+
+#: NOT FOUND IN SOURCE
+msgid "Available Rights:"
+msgstr "æƒé™é¡¹ç›®åˆ—表:"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr ""
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Back to Homepage"
+msgstr "回到首页"
+
+#: NOT FOUND IN SOURCE
+msgid "Back to Previous"
+msgstr "回上页"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad PGP Signature: %1\\n"
+msgstr "错误的 PGP 签章:%1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
+msgstr "错误的附件编å·ã€‚无法找到附件 '%1'\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad data in %1"
+msgstr "%1 çš„æ•°æ®é”™è¯¯"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bad transaction number for attachment. %1 should be %2\\n"
+msgstr "附件的处ç†å·ç é”™è¯¯ã€‚%1 应为 %2\\n"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "基本信æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Batch Approval"
+msgstr "批次签核"
+
+#: NOT FOUND IN SOURCE
+msgid "Bcc"
+msgstr "密件副本"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr "请别忘了储存修改。"
+
+#: NOT FOUND IN SOURCE
+msgid "Begin Approval"
+msgstr "开始签核"
+
+#: NOT FOUND IN SOURCE
+msgid "Begin From "
+msgstr "起始日 "
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr "Best Practical Solutions, LLC å…¬å¸è¯†åˆ«å›¾æ¡ˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Binary"
+msgstr "档案"
+
+#: NOT FOUND IN SOURCE
+msgid "Birthday"
+msgstr "生日"
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr "空白模æ¿"
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr "正文"
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "粗体"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable URL for this search"
+msgstr "将查询结果转为å¯æ”¾å…¥ä¹¦ç­¾çš„网å€"
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable link"
+msgstr "å¯æ”¾å…¥ä¹¦ç­¾çš„网å€"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr "精简标头档"
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr "整批更新"
+
+#: NOT FOUND IN SOURCE
+msgid "Bulk ticket update"
+msgstr "整批更新申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Business Unit"
+msgstr "事业部"
+
+#: NOT FOUND IN SOURCE
+msgid "Business Unit:"
+msgstr "事业部:"
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr ""
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr "无法更改系统使用者"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr "该å•ä½æ˜¯å¦èƒ½æŸ¥é˜…此表å•"
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr "ä¸èƒ½æ–°å¢žæ²¡æœ‰å称的自订字段值"
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr "找ä¸åˆ°â€˜%1’的集åˆç±»åˆ«"
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr "找ä¸åˆ°é¢„存查询"
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr "申请å•ä¸èƒ½é“¾æŽ¥è‡ªå·±ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Can't merge into a merged ticket. You should never get this error"
+msgstr "ä¸èƒ½æ•´åˆè¿›å·²æ•´åˆè¿‡çš„申请å•ã€‚这个错误ä¸è¯¥å‘生。"
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr "无法储存 %1"
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr "无法储存此项查询"
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr "ä¸èƒ½åŒæ—¶æŒ‡å®šèµ·å§‹ç”³è¯·å•ä¸Žç›®çš„申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Cancel"
+msgstr "å–消"
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr "无法新增使用者:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Cannot login: Your system clock differs from server's by %1 seconds!"
+msgstr "您的系统时钟和æœåŠ¡å™¨ç›¸å·® %1 秒,无法登入ï¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Card No."
+msgstr "å¡å·"
+
+#: NOT FOUND IN SOURCE
+msgid "Categories"
+msgstr "分类管ç†"
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr "分类"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr "副本"
+
+#: NOT FOUND IN SOURCE
+msgid "Cc Type"
+msgstr "副本类别"
+
+#: NOT FOUND IN SOURCE
+msgid "Cc.EmailAddress"
+msgstr "副本: 电å­é‚®ä»¶ä¿¡ç®±"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Chairperson's Office"
+msgstr "董事长室"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "å˜æ›´"
+
+#: NOT FOUND IN SOURCE
+msgid "Change Ticket"
+msgstr "修改申请å•"
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr "更改å£ä»¤"
+
+#: NOT FOUND IN SOURCE
+msgid "ChangeOwnerUI"
+msgstr "å¯å¦é€‰æ‹©è¡¨å•æ‰¿åŠžäºº"
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr "全部选å–"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "检查数æ®åº“å¯è¿žæŽ¥æ€§"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr "选择欲删除的项目"
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr "选择欲撤消的æƒåˆ©"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr "å­ç”³è¯·å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Chinese Name"
+msgstr "中文姓å"
+
+#: NOT FOUND IN SOURCE
+msgid "Chinese/English"
+msgstr "中英文"
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "选择一个数æ®åº“引擎"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a date"
+msgstr "选择日期"
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr "所在城市"
+
+#: NOT FOUND IN SOURCE
+msgid "ClassicUI"
+msgstr "传统接å£"
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "清空"
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr "全部清除"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "点击下é¢çš„’完æˆå®‰è£…'以结æŸå®‰è£…"
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "点击'åˆå§‹åŒ–æ•°æ®åº“'以建立数æ®åº“并加入åˆå§‹çš„metadata。该过程å¯èƒ½éœ€è¦ä¸€ä¼šå„¿æ—¶é—´"
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "关闭窗å£"
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr "已解决"
+
+#: NOT FOUND IN SOURCE
+msgid "Closed Tickets"
+msgstr "已解决的申请å•"
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr "已解决的申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Code"
+msgstr "执行程åºç "
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr "下拉文字框:选择或键入多é‡é¡¹ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr "下拉文字框:选择或键入å•ä¸€é¡¹ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr "下拉文字框:选择或键入最多 %1 个项目"
+
+#: NOT FOUND IN SOURCE
+msgid "Command not understood!\\n"
+msgstr "指令无法辨识ï¼\\n"
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr "评论"
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr "评论电å­é‚®ä»¶åœ°å€"
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "注释地å€"
+
+#: NOT FOUND IN SOURCE
+msgid "Comment not recorded"
+msgstr "评论未被纪录"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr "对申请å•æ出评论"
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "注释地å€"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr "评论申请å•"
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "评论"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr "评论(ä¸é€ç»™ç”³è¯·äºº)"
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr "评论(ä¸é€ç»™ç”³è¯·äºº)"
+
+#: NOT FOUND IN SOURCE
+msgid "Comments about %1"
+msgstr "对 %1 的评论"
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr "使用者æè¿°"
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr "新增评论完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "Commit"
+msgstr "确认"
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr "消除更动完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "Company Name"
+msgstr "å…¬å¸å称"
+
+#: NOT FOUND IN SOURCE
+msgid "CompanySpecific"
+msgstr "å„å…¬å¸ç‹¬ç«‹æ˜¾ç¤º"
+
+#: NOT FOUND IN SOURCE
+msgid "Compile Restrictions"
+msgstr "设定查询æ¡ä»¶"
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr "æ¡ä»¶"
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "æ¡ä»¶ '%1' 没有找到"
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr "æ¡ä»¶æ˜¯å¿…填字段"
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr "符åˆæ¡ä»¶..."
+
+#: NOT FOUND IN SOURCE
+msgid "Condition not found"
+msgstr "未找到符åˆçš„现况"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr ""
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr ""
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr "设定"
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr "确认"
+
+#: NOT FOUND IN SOURCE
+msgid "Confirm Password"
+msgstr "å£ä»¤ç¡®è®¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Confirm Submit"
+msgstr "确定é€å‡º"
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Contact System Administrator"
+msgstr "连络系统管ç†å‘˜"
+
+#: NOT FOUND IN SOURCE
+msgid "ContactInfoSystem"
+msgstr "连络信æ¯ç³»ç»Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "Contacted date '%1' could not be parsed"
+msgstr "无法解读è”络日期 '%1'"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr "内容"
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr "内容类型"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Coould not create group"
+msgstr "无法新增群组"
+
+#: NOT FOUND IN SOURCE
+msgid "Copy"
+msgstr "å¤åˆ¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Copy Field From:"
+msgstr "欲å¤åˆ¶å­—段:"
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr ""
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr "回å¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence Address"
+msgstr "申请å•å›žå¤åœ°å€"
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr "新增申请å•å›žå¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence not recorded"
+msgstr "未纪录申请å•å›žå¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè®¢å­—段的值。 "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. %1 "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè®¢å­—段的值。%1 "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè®¢å­—段的值。 "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. %1 "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè®¢å­—段的值。%1 "
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Could not change owner. "
+msgstr "ä¸èƒ½æ›´æ”¹æ‰¿åŠžäººã€‚ "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr "无法新增自订字段"
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr "无法新增自订字段:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create Scrip"
+msgstr "无法建立讯æ¯é€šçŸ¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create Template"
+msgstr "无法建立通知模æ¿"
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr "无法新增群组"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create item"
+msgstr "无法新增项目"
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr "无法新增模æ¿ï¼š%1"
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr "无法新增申请å•ã€‚尚未指定表å•ã€‚"
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr "无法新增使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create watcher for requestor"
+msgstr "无法为申请人新增视察员"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create workflow: %1"
+msgstr "无法新增æµç¨‹ï¼š%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find a ticket with id %1"
+msgstr "找ä¸åˆ°ç¼–å· %1 的申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find group %1."
+msgstr "找ä¸åˆ°ç¾¤ç»„ %1。"
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr "找ä¸åˆ°æˆ–无法新增该å使用者"
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr "找ä¸åˆ°è¯¥å•ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find user %1."
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… %1。"
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr "无法加载字段 %1"
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr "无法加载群组"
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr "无法为 %1 加载对象"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not load search attribute"
+msgstr "无法加载查询属性"
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr "无法将该å•ä½è®¾ä¸ºæ­¤è¡¨å•çš„ %1。"
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr "无法将该å•ä½è®¾ä¸ºæ­¤ç”³è¯·å•çš„ %1。"
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr "无法将å•ä½ %1 从表å•ç§»é™¤ã€‚"
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr "无法将å•ä½ %1 从申请å•ç§»é™¤ã€‚"
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr "无法设定使用者信æ¯"
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr "无法新增附件"
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr "无法新增æˆå‘˜è‡³ç¾¤ç»„"
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr "无法新增更动报告"
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't figure out what to do from gpg's reply\\n"
+msgstr "无法从 gpg 回函辨识出该采å–的行动\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find group\\n"
+msgstr "找ä¸åˆ°ç¾¤ç»„\\n"
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr "找ä¸åˆ°æ­¤åˆ—æ•°æ®"
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr "找ä¸åˆ°è¯¥å•ä½"
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr "找ä¸åˆ°è¯¥å€¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find that watcher"
+msgstr "找ä¸åˆ°è¯¥è§†å¯Ÿå‘˜"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find user\\n"
+msgstr "找ä¸åˆ°ä½¿ç”¨è€…\\n"
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr "无法从使用者数æ®åº“加载 %1。\\n"
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr "无法加载类别 %1"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr ""
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr "无法加载自订字段 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load KeywordSelects."
+msgstr "无法加载 KeywordSelects。"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load RT config file '%1' %2"
+msgstr "无法加载 RT 设定档 '%1' %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load Scrips."
+msgstr "无法加载手续。"
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr "æ— æ³•åŠ è½½ç”³è¯·å• %1 çš„å¤æœ¬ã€‚"
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr ""
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr "无法加载手续 %1"
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr "无法加载链接。"
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr "无法加载对象 %1"
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr "无法加载表å•"
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr ""
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr "æ— æ³•åŠ è½½è¡¨å• %1"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load scrip"
+msgstr "无法加载手续"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr "无法加载手续 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load template"
+msgstr "无法加载模æ¿"
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load that user (%1)"
+msgstr "无法加载该å使用者(%1)"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr "æ— æ³•åŠ è½½ç”³è¯·å• '%1'"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr ""
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr "无法将‘%1’解读为网å€"
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr "国家"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr "新增"
+
+#: NOT FOUND IN SOURCE
+msgid "Create Subgroup:"
+msgstr "新增å­ç¾¤ç»„:"
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr "新增申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Create User:"
+msgstr "新增æˆå‘˜ï¼š"
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr "新增自订字段"
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr "为 %1 表å•æ–°å¢žè‡ªè®¢å­—段"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a CustomField that applies to all queues"
+msgstr "为 %1 表å•æ–°å¢žè‡ªè®¢å­—段"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new Custom Field"
+msgstr "新增自订字段"
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global Scrip"
+msgstr "新增全域手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global scrip"
+msgstr "新增全域手续"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr "新增群组"
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr "新增代ç†äººç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new queue"
+msgstr "新增表å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new scrip"
+msgstr "新增手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new template"
+msgstr "新增模æ¿"
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr "新增申请å•"
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr "新增使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new workflow"
+msgstr "新增æµç¨‹"
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr "新增表å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a queue called"
+msgstr "新增表å•å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a request"
+msgstr "æ出申请"
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr "为 %1 表å•æ–°å¢žæ‰‹ç»­"
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr "新增模æ¿"
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr "æ出申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a workflow"
+msgstr "新增æµç¨‹"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1 / %2 / %3 "
+msgstr "新增失败:%1 / %2 / %3 "
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1/%2/%3"
+msgstr "新增失败:%1/%2/%3"
+
+#: NOT FOUND IN SOURCE
+msgid "Create new item"
+msgstr "建立新项目"
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr "ä¾æ®æ­¤é¡¹æ‰‹ç»­å†…的模版,新增申请å•"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr ""
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr "新增申请å•"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr "在此表å•ä¸­æ–°å¢žç”³è¯·å•"
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹è‡ªè®¢å­—段"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹è¡¨å•"
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä»»ä½•ä½¿ç”¨è€…的代ç†äººç¾¤ç»„"
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä»£ç†äººç¾¤ç»„"
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä½¿ç”¨è€…"
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr "新增预存查询"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr "新增申请å•"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr "新增日"
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr "自订字段 %1 新增æˆåŠŸ"
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr "在指定日期内建立"
+
+#: NOT FOUND IN SOURCE
+msgid "Created template %1"
+msgstr "æ¨¡æ¿ %1 新增æˆåŠŸ"
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr "在指定日期内建立的申请å•ï¼Œä¾çŠ¶æ€åˆ†ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "Created workflow %1"
+msgstr "æµç¨‹ %1 新增æˆåŠŸ"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "建立人"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr "实际新增日(相对值)"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr "建立者"
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Currency"
+msgstr "å¸åˆ«"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Approval Info"
+msgstr "截至目å‰ç­¾æ ¸ä¿¡æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Custom Fields"
+msgstr "现有自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Groups:"
+msgstr "现有群组列表:"
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr "现有关系"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Rights:"
+msgstr "现有æƒé™ï¼š"
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr "现有手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Status"
+msgstr "ç›®å‰çŠ¶æ€"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Templates"
+msgstr "现有模æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Watchers"
+msgstr "现有视察员"
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr "现有æˆå‘˜"
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr "现有æƒé™"
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr "现有查询æ¡ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Current search criteria"
+msgstr "现有查询æ¡ä»¶"
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr "现有视察员"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom Field #%1"
+msgstr "自订字段 #%1"
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr "自订字段"
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr "%1 的自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom Fields which apply to all queues"
+msgstr "适用于所有表å•çš„自订字段"
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr "动作åŽæ‰§è¡Œç¨‹åº"
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr "动作å‰æ‰§è¡Œç¨‹åº"
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr "自订æ¡ä»¶"
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "自订字段 %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "自订字段 %1 ä¸é€‚用于此对象"
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr "自订字段 %1 已有值"
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr "自订字段 %1 没有值"
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr "找ä¸åˆ°è‡ªè®¢å­—段 %1"
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr "自订字段‘%1’"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field deleted"
+msgstr "自订字段已删除"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field not found"
+msgstr "找ä¸åˆ°è‡ªè®¢å­—段"
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr "无法从自订字段 %2 中找到 %1 这个字段值"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field value changed from %1 to %2"
+msgstr "自订字段值从 %1 改为 %2"
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr "无法删除自订字段值"
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr "找ä¸åˆ°è‡ªè®¢å­—段值"
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr "自订字段值删除æˆåŠŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom.Ownership"
+msgstr "自订: 承办状æ€"
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr "自订字段"
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr "自订"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr ""
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr ""
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr ""
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr ""
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr ""
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr ""
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr ""
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Data error"
+msgstr "æ•°æ®é”™è¯¯"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr ""
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr ""
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr ""
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr ""
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr ""
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "DatabaseBindRemote"
+msgstr "容许外部è”机"
+
+#: NOT FOUND IN SOURCE
+msgid "DatabaseName"
+msgstr "MySQLæ•°æ®åº“"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Date of Departure"
+msgstr "出å‘日期"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr "日期"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "å二月"
+
+#: NOT FOUND IN SOURCE
+msgid "Dec."
+msgstr "12"
+
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "å二月"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Default Approval"
+msgstr "预设签核"
+
+#: NOT FOUND IN SOURCE
+msgid "Default Autoresponse Template"
+msgstr "预设自动å“应模æ¿"
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr "预设自动å“应模æ¿"
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr "预设表å•"
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr "预设申请人"
+
+#: NOT FOUND IN SOURCE
+msgid "Default Value"
+msgstr "预设值"
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr "预设管ç†å‘˜è¯„论模æ¿"
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr "预设管ç†å‘˜å›žå¤æ¨¡æ¿"
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr "预设回å¤æ¨¡æ¿"
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr ""
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr "预设更动模æ¿"
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr "预设:%1/%2 已自 %3 改为 %4"
+
+#: NOT FOUND IN SOURCE
+msgid "DefaultApproval"
+msgstr "预设签核"
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr ""
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr "代ç†äººæƒé™"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr "将拥有的æƒé™å§”托他人代ç†"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr "设定代ç†äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Approval"
+msgstr "代ç†ç­¾æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Queue"
+msgstr "代ç†è¡¨å•å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Queue:"
+msgstr "代ç†è¡¨å•ï¼š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Type"
+msgstr "代ç†è¡¨å•ç§ç±»"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates"
+msgstr "代ç†äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Enabled Status"
+msgstr "代ç†æ¿€æ´»çŠ¶æ€"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Info"
+msgstr "代ç†äººä¿¡æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Period"
+msgstr "代ç†æœŸé—´"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Permission Setting"
+msgstr "代ç†æƒé™è®¾å®š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Permission:"
+msgstr "代ç†æƒé™ï¼š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Setting"
+msgstr "代ç†äººè®¾å®š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Status"
+msgstr "代ç†çŠ¶æ€"
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr "代ç†äººæƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegation Groups"
+msgstr "代ç†äººç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegation Rights"
+msgstr "代ç†äººæƒé™"
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr "删除"
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr "删除模æ¿"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr "删除失败:%1"
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr "删除指定的手续"
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr "删除申请å•"
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr "删除值"
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr "删除申请å•"
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr ""
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Deleted search"
+msgstr "已删除的æœå¯»"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object could break referential integrity"
+msgstr "删除此对象å¯èƒ½ç ´åå‚考完整性"
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr "删除此对象å¯èƒ½ç ´åå‚考完整性"
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr "删除此对象会è¿åå‚考完整性"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity."
+msgstr "删除此对象会è¿åå‚考完整性"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity. That's bad."
+msgstr "删除此对象会è¿åå‚考完整性"
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr "驳回"
+
+#: NOT FOUND IN SOURCE
+msgid "Department"
+msgstr "部门"
+
+#: NOT FOUND IN SOURCE
+msgid "Department ID"
+msgstr "部门代ç "
+
+#: NOT FOUND IN SOURCE
+msgid "Department Name"
+msgstr "部门å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Department's"
+msgstr "部门之"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure Details"
+msgstr "差旅明细"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure From"
+msgstr "差旅起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure Request"
+msgstr "请å‡å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure Until"
+msgstr "差旅截止日"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr "å¯æŽ¥ç»­å¤„ç†çš„申请å•"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr "å¯æŽ¥ç»­å¤„ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Dependencies: \\n"
+msgstr "附属性:\\n"
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr "已加入å¯æŽ¥ç»­å¤„ç†çš„ç”³è¯·å• %1"
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr "已移除å¯æŽ¥ç»­å¤„ç†çš„ç”³è¯·å• %1"
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr "已加入需先处ç†çš„ç”³è¯·å• %1"
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr "已移除需先处ç†çš„ç”³è¯·å• %1"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr "需先处ç†"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "需先处ç†"
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr "递å‡"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr "递å‡"
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr "在以下字段æ述主题"
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr "æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Description of Responsibility"
+msgstr "ç»åŠžä¸šåŠ¡è¯´æ˜Ž"
+
+#: NOT FOUND IN SOURCE
+msgid "Description:"
+msgstr "æ述:"
+
+#: NOT FOUND IN SOURCE
+msgid "Details"
+msgstr "细节"
+
+#: NOT FOUND IN SOURCE
+msgid "Direct"
+msgstr "直接"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Disability"
+msgstr "残障身分"
+
+#: NOT FOUND IN SOURCE
+msgid "Disability Type"
+msgstr "残障类别"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "åœç”¨"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr "显示内容"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr "显示æƒé™æŽ§åˆ¶æ¸…å•"
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr "显示字段"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr "显示此表å•çš„模æ¿"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr "显示此表å•çš„手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Display mode"
+msgstr "显示模å¼"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr "显示此群组的预存查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Display ticket #%1"
+msgstr "显示第%1å·ç”³è¯·å•"
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr "ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授æƒ</a> 第二版散布。"
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr "å…许一切æ“作"
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr ""
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr ""
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr "ä¸æ›´æ–°æ­¤é¡µé¢ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Don't show search results"
+msgstr "ä¸æ˜¾ç¤ºæŸ¥è¯¢ç»“æžœ"
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Done"
+msgstr "完æˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Down"
+msgstr "下一页"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr "下载"
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr "下载以 Tab 分隔的档案"
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Dr."
+msgstr "åšå£«"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr "到期日"
+
+#: NOT FOUND IN SOURCE
+msgid "Due Date"
+msgstr "截止日"
+
+#: NOT FOUND IN SOURCE
+msgid "Due date '%1' could not be parsed"
+msgstr "无法解读日期 '%1'"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr "到期日(相对值)"
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
+msgstr "æ— æ³•åŠ è½½ç”³è¯·å• '%1':%2.\\n"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr "编辑"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Conditions"
+msgstr "编辑å‰ç½®æ¡ä»¶"
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr "编辑自订字段"
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr "编辑 %1 的自订字段"
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr "编辑适用于所有群组的自订字段"
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr "编辑适用于所有使用者的自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Custom Fields for queue %1"
+msgstr "ç¼–è¾‘è¡¨å• %1 的自订字段"
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr "编辑适用于所有表å•å†…申请å•çš„自订字段"
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr "编辑申请å•å…³ç³»"
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr "编辑查询"
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr "编辑查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Subgroups"
+msgstr "新增/维护å­ç¾¤ç»„"
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr "ç¼–è¾‘è¡¨å• %1 的模æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Workflows for queue %1"
+msgstr "ç¼–è¾‘è¡¨å• %1 çš„æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit keywords"
+msgstr "编辑关键è¯"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr "编辑此群组的预存查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit scrips"
+msgstr "编辑手续"
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr "编辑全域模æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit system workflows"
+msgstr "编辑全域æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit templates for %1"
+msgstr "编辑 %1 的模æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit workflows for %1"
+msgstr "编辑 %1 çš„æµç¨‹"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr "编辑预存查询"
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr "ç¼–è¾‘è¡¨å• %1 的设定"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing Configuration for user %1"
+msgstr "编辑使用者 %1 的设定"
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr "编辑自订字段 %1"
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr "编辑群组 %1 çš„æˆå‘˜ä¿¡æ¯"
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr "编辑代ç†äººç¾¤ç»„ %1 çš„æˆå‘˜ä¿¡æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing template %1"
+msgstr "ç¼–è¾‘æ¨¡æ¿ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing workflow %1"
+msgstr "编辑æµç¨‹ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Education"
+msgstr "最高学历"
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr "有效编å·"
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr "需è¦æŒ‡å®šèµ·å§‹ç”³è¯·å•æˆ–目的申请å•"
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr "电å­é‚®ä»¶ä¿¡ç®±"
+
+#: NOT FOUND IN SOURCE
+msgid "Email Address"
+msgstr "电å­é‚®ä»¶ä¿¡ç®±"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr "此电å­é‚®ä»¶ä¿¡ç®±å·²è¢«ä½¿ç”¨"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "电å­é‚®ä»¶ä¿¡ç®±åœ°å€"
+
+#: NOT FOUND IN SOURCE
+msgid "EmailEncoding"
+msgstr "电å­é‚®ä»¶æ–‡å­—ç¼–ç æ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Embark Date"
+msgstr "外ç±å‘˜å·¥å…¥å¢ƒæ—¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Embarked Date"
+msgstr "抵达日期"
+
+#: NOT FOUND IN SOURCE
+msgid "Embarked Location"
+msgstr "抵达地点"
+
+#: NOT FOUND IN SOURCE
+msgid "Enable Delegates"
+msgstr "代ç†æ¿€æ´»"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr "å¯ç”¨(å–消勾选将åœç”¨æ­¤è‡ªè®¢å­—段)"
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr "å¯ç”¨(å–消勾选将åœç”¨æ­¤ç¾¤ç»„)"
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr "å¯ç”¨(å–消勾选将åœç”¨æ­¤è¡¨å•)"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Custom Fields"
+msgstr "å·²å¯ç”¨çš„自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Date"
+msgstr "å¯ç”¨æ—¥æœŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Date:"
+msgstr "激活日期:"
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr "å·²å¯ç”¨çš„表å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Status"
+msgstr "å¯ç”¨çŠ¶æ€"
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr "å¯ç”¨çŠ¶æ€ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled status: %1"
+msgstr "å¯ç”¨çŠ¶æ€: %1"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr ""
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "End of Trial"
+msgstr "试用期满日"
+
+#: NOT FOUND IN SOURCE
+msgid "English Name"
+msgstr "英文姓å"
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr "键入多é‡é¡¹ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr "键入欲将对象连结至的对象或 URI。项目之间请以空白隔开。"
+
+#: NOT FOUND IN SOURCE
+msgid "Enter one or more conditions below to search for users"
+msgstr "键入下列å•ä¸€æˆ–å¤å¼æ¡ä»¶ï¼ŒæŸ¥è¯¢ç”¨æˆ·æ•°æ®"
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr "键入å•ä¸€é¡¹ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr "键入欲将表å•è¿žç»“至的对象或 URI。项目之间请以空白隔开。"
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr "键入申请å•å¯é“¾æŽ¥åˆ°çš„申请å•ç¼–å·æˆ–网å€ã€‚项目之间请以空白隔开。"
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr "键入最多 %1 个项目"
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "EntryBoolean"
+msgstr "是éžå¡«è¡¨"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryDate"
+msgstr "日期填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryExternal"
+msgstr "系统填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryFreeform"
+msgstr "输入填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryMultiple"
+msgstr "多选填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryNumber"
+msgstr "数值填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntrySelect"
+msgstr "å•é€‰å¡«è¡¨"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryTime"
+msgstr "时间填表"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr "错误"
+
+#: NOT FOUND IN SOURCE
+msgid "Error adding watcher"
+msgstr "新增视察员失败"
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr "表å•->新增视察员的å‚数有误"
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr "表å•->删除视察员的å‚数有误"
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr "申请å•->新增视察员的å‚数有误"
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr "申请å•->删除视察员的å‚数有误"
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr "调整申请å•ä¼˜å…ˆç­‰çº§"
+
+#: NOT FOUND IN SOURCE
+msgid "Estimate"
+msgstr "预计"
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr "预计"
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr "所有人"
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr "范例:"
+
+#: NOT FOUND IN SOURCE
+msgid "Existing user renamed from %1 to %2"
+msgstr "现有使用者 %1 已改å为 %2"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Export"
+msgstr "汇出"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "é¢å¤–现况"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalAuthId"
+msgstr "外部认è¯å¸å·"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalContactInfoId"
+msgstr "外部è”络方å¼å¸å·"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalDatabaseDSN"
+msgstr "外部数æ®åº“连结字符串"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalDatabasePass"
+msgstr "外部数æ®åº“å£ä»¤"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalDatabaseUser"
+msgstr "外部数æ®åº“用户"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalURL"
+msgstr "外部接å£ç½‘å€"
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr "备注"
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Failed to create search attribute"
+msgstr "查询属性建立失败"
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr "找ä¸åˆ°â€˜å†…部æˆå‘˜â€™è™šæ‹Ÿç¾¤ç»„的使用者。"
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr "找ä¸åˆ°â€˜éžå†…部æˆå‘˜â€™è™šæ‹Ÿç¾¤ç»„的使用者。"
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr "æ— æ³•åŠ è½½æ¨¡å— %1。(%2)"
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr "无法为 %1 加载对象。"
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr ""
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr ""
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "二月"
+
+#: NOT FOUND IN SOURCE
+msgid "Feb."
+msgstr "02"
+
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "二月"
+
+#: NOT FOUND IN SOURCE
+msgid "Female"
+msgstr "女"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Content:"
+msgstr "字段内容:"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Description"
+msgstr "字段æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Name"
+msgstr "字段å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Type"
+msgstr "字段类别"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr "æ¡£å"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr "填入多个文字框"
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr "填入多个 Wiki 文字框"
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr "填入一个文字框"
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr "填入一个 Wiki 文字框"
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr "填入一个网å€"
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr "填入最多 %1 个文字框"
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr "填入最多 %1 个 Wiki 文字框"
+
+#: NOT FOUND IN SOURCE
+msgid "Filter"
+msgstr "筛选"
+
+#: NOT FOUND IN SOURCE
+msgid "Filter people"
+msgstr "对象筛选"
+
+#: NOT FOUND IN SOURCE
+msgid "Filtered list:"
+msgstr "筛选列表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Fin"
+msgstr "最终"
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr "最终顺ä½"
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr "最终顺ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Financial Department:"
+msgstr "财务部:"
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Find group whose"
+msgstr "寻找群组的"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr "寻找群组的"
+
+#: NOT FOUND IN SOURCE
+msgid "Find new/open tickets"
+msgstr "寻找/å¼€å¯ç”³è¯·å•"
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr "寻找人员的"
+
+#: NOT FOUND IN SOURCE
+msgid "Find queues whose"
+msgstr "寻找表å•çš„"
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr "寻找申请å•"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Finish Approval"
+msgstr "签核完毕"
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr "第一项"
+
+#: NOT FOUND IN SOURCE
+msgid "First page"
+msgstr "第一页"
+
+#: NOT FOUND IN SOURCE
+msgid "First-"
+msgstr "一"
+
+#: NOT FOUND IN SOURCE
+msgid "First-level Admins"
+msgstr "一阶主管"
+
+#: NOT FOUND IN SOURCE
+msgid "First-level Users"
+msgstr "一阶主管员工"
+
+#: NOT FOUND IN SOURCE
+msgid "Fixed shift"
+msgstr "固定ç­"
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr "甲 乙 丙"
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr "甲ï¼"
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr "强制更æ¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Form Processing"
+msgstr "电å­è¡¨å•ä½œä¸šåŒº"
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr "æ ¼å¼"
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr "找到 %1 张申请å•"
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr "已找到对象"
+
+#: NOT FOUND IN SOURCE
+msgid "Fourth-"
+msgstr "å››"
+
+#: NOT FOUND IN SOURCE
+msgid "Freeform"
+msgstr "输入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformContactInfo"
+msgstr "è”络方å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformDate"
+msgstr "日期输入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformExternal"
+msgstr "系统字段"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformMultiple"
+msgstr "多é‡è¾“å…¥"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformNumber"
+msgstr "数值输入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformPassword"
+msgstr "å£ä»¤è¾“å…¥"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformSingle"
+msgstr "å•ä¸€è¾“å…¥"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformTime"
+msgstr "时间输入"
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr ""
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "星期五"
+
+#: NOT FOUND IN SOURCE
+msgid "Fri."
+msgstr "星期五"
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr "完整标头档"
+
+#: NOT FOUND IN SOURCE
+msgid "Gecos"
+msgstr "登入å¸å·"
+
+#: NOT FOUND IN SOURCE
+msgid "Gender"
+msgstr "性别"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr "å–出档案里的模æ¿"
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Getting the current user from a pgp sig\\n"
+msgstr "å–å¾—ç›®å‰ä½¿ç”¨è€…çš„ pgp 签章\\n"
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr "交予 %1"
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr "全域设定"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Approval"
+msgstr "全域签核"
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr "全域自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Keyword Selections"
+msgstr "全域关键è¯é€‰å–"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Rights:"
+msgstr "拥有全域æƒé™åˆ—表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Scrips"
+msgstr "全域手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Setup"
+msgstr "全域设定"
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr "全域自订字段设定"
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr "æˆåŠŸå‚¨å­˜å…¨åŸŸå…¥å£ç»„件 %1。"
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr "全域模æ¿ï¼š%1"
+
+#: NOT FOUND IN SOURCE
+msgid "GlobalApproval"
+msgstr "全域签核"
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "执行"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "执行"
+
+#: NOT FOUND IN SOURCE
+msgid "Good pgp sig from %1\\n"
+msgstr "%1 的 pgp 签章是正确的\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Goto page"
+msgstr "到页é¢"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr "跳到申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Grand"
+msgstr "上"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "群组"
+
+#: NOT FOUND IN SOURCE
+msgid "Group %1 %2: %3"
+msgstr "群组 %1 %2:%3"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Admin"
+msgstr "群组管ç†å‘˜"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Description"
+msgstr "群组æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Management"
+msgstr "群组管ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Members"
+msgstr "群组æˆå‘˜"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Name"
+msgstr "群组å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Name:"
+msgstr "群组å称:"
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr "群组æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Rights:"
+msgstr "拥有群组æƒé™åˆ—表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Setup"
+msgstr "群组设定"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Status"
+msgstr "群组状æ€"
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "群组内已有此æˆå‘˜: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Group could not be created."
+msgstr "无法新增群组"
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr "无法新增群组:%1"
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr "群组新增完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "Group created: %1"
+msgstr "群组 %1 新增完毕"
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr "群组没有这个æˆå‘˜"
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr "找ä¸åˆ°ç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not found.\\n"
+msgstr "找ä¸åˆ°ç¾¤ç»„。\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not specified.\\n"
+msgstr "未指定群组。\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Group redescribed from %1 to %2"
+msgstr "群组æè¿° %1 已改为 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Group renamed from %1 to %2"
+msgstr "群组 %1 已改å为 %2"
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Group with Queue Rights"
+msgstr "拥有表å•æƒé™ç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "Group's"
+msgstr "群组之"
+
+#: NOT FOUND IN SOURCE
+msgid "Group:"
+msgstr "群组:"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr "群组"
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr "ä¸èƒ½å°†ç¾¤ç»„设为群组内æˆå‘˜"
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr "符åˆæŸ¥è¯¢æ¡ä»¶çš„群组"
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr "使用者所属的群组"
+
+#: NOT FOUND IN SOURCE
+msgid "Groups with Global Rights"
+msgstr "拥有全域æƒé™ç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "HRMSDefined"
+msgstr "组织架构"
+
+#: NOT FOUND IN SOURCE
+msgid "HTML Attributes"
+msgstr "HTML 属性"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr "拥有æˆå‘˜"
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Health Insurance"
+msgstr "å¥ä¿è¡¥åŠ©èº«ä»½"
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr "å—¨ï¼"
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr "嗨,%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Help"
+msgstr "说明"
+
+#: NOT FOUND IN SOURCE
+msgid "Help Desks"
+msgstr "å„项业务窗å£"
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Hidden"
+msgstr "éšè—"
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr "纪录"
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr "群组 %1 的纪录"
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr "使用者 %1 的纪录"
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "ä½å¤„电è¯"
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr "主页"
+
+#: NOT FOUND IN SOURCE
+msgid "Hotel Expense"
+msgstr "ä½å®¿è´¹"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr "å°æ—¶"
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr "我有 %quant(%1,份固体æ…拌器)。"
+
+#: NOT FOUND IN SOURCE
+msgid "I'm lost"
+msgstr "我æ˜äº†"
+
+#: NOT FOUND IN SOURCE
+msgid "ID Number"
+msgstr "身分è¯å·"
+
+#: NOT FOUND IN SOURCE
+msgid "ID Type"
+msgstr "身分类别"
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr "ç¼–å·"
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr "身份"
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr "若签核å•é­åˆ°é©³å›žï¼Œåˆ™è¿žå¸¦é©³å›žåŽŸç”³è¯·å•ï¼Œå¹¶åˆ é™¤å…¶å®ƒç›¸å…³çš„待签核事项"
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr "若没有指定申请者,则以此使用者作为申请者"
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr "申请å•è‹¥æ²¡æœ‰æŒ‡å®šè¡¨å•ï¼Œåˆ™å°†å®ƒæ–°å¢žåœ¨æ­¤è¡¨å•å†…"
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr "如果此工具程åºä¸º setgid,æ¶æ„的本地端用户å³èƒ½ç”±æ­¤å–å¾— RT 的管ç†å‘˜æƒé™ã€‚"
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr ""
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr "若您已更新以上数æ®ï¼Œè¯·è®°å¾—按一下"
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr "%1 的值错误"
+
+#: NOT FOUND IN SOURCE
+msgid "Image"
+msgstr "图片"
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr "此字段值ä¸å¯æ›´åŠ¨"
+
+#: NOT FOUND IN SOURCE
+msgid "Import"
+msgstr "汇入"
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "列出åœç”¨çš„自订字段"
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr "列出åœç”¨çš„群组"
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr "列出åœç”¨çš„表å•"
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr "列出åœç”¨çš„使用者"
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr "引入页é¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete Query"
+msgstr "ä¸å®Œæ•´çš„查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Incomplete query"
+msgstr "ä¸å®Œæ•´çš„查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Indirect Employee"
+msgstr "直接/间接员工"
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr "åˆå§‹ä¼˜å…ˆé¡ºä½"
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr "åˆå§‹ä¼˜å…ˆé¡ºä½"
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr ""
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr "输入错误"
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr "è¾“å…¥å¿…é¡»ç¬¦åˆ %1"
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Interest noted"
+msgstr "登记æˆåŠŸ"
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr "内部错误"
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr "内部错误:%1"
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr ""
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr "错误的群组类别"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Right"
+msgstr "错误的æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Type"
+msgstr "错误的类型"
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr "错误的数æ®"
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid owner. Defaulting to 'nobody'."
+msgstr "错误的承办人。改为预设承办人‘nobody’。"
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr "ä¸åˆç†çš„æ ·å¼ï¼š%1"
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr "错误的表å•"
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr "错误的æƒé™"
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr "%1 的值错误"
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr "错误的自订字段值"
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr "错误的状æ€å€¼"
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "IssueStatement"
+msgstr "é€å‡ºé™ˆè¿°"
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr "请ç»å¯¹ä¸è¦è®©æœªå…·æƒé™çš„使用者执行此工具程åºã€‚"
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr "建议您新增一个隶属于正确群组的低æƒé™ç³»ç»Ÿä½¿ç”¨è€…,并以该身份执行此工具程åºã€‚"
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr "它接å—下列å‚数:"
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr "斜体"
+
+#: NOT FOUND IN SOURCE
+msgid "Item Name"
+msgstr "å“å"
+
+#: NOT FOUND IN SOURCE
+msgid "Items"
+msgstr "笔"
+
+#: NOT FOUND IN SOURCE
+msgid "Items pending my approval"
+msgstr "待签核项目"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "一月"
+
+#: NOT FOUND IN SOURCE
+msgid "Jan."
+msgstr "01"
+
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "一月"
+
+#: NOT FOUND IN SOURCE
+msgid "Job"
+msgstr "èŒç§°"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr "加入或离开此群组"
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "七月"
+
+#: NOT FOUND IN SOURCE
+msgid "Jul."
+msgstr "07"
+
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "七月"
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr "全部信æ¯"
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "六月"
+
+#: NOT FOUND IN SOURCE
+msgid "Jun."
+msgstr "06"
+
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "六月"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Keyword"
+msgstr "关键è¯"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelAttachments"
+msgstr "附件å·æ ‡"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelContent"
+msgstr "内容å·æ ‡"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelSubject"
+msgstr "主题å·æ ‡"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelURL"
+msgstr "链接å·æ ‡"
+
+#: NOT FOUND IN SOURCE
+msgid "Lang"
+msgstr "使用语言"
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr "语言"
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr "大"
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr "上次更新"
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr "上次è”络"
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr "上次è”络日期"
+
+#: NOT FOUND IN SOURCE
+msgid "Last Notified"
+msgstr "上次通知"
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr "上次更新"
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr ""
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "上次更新"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr "上次更新者"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr "上次更新(相对值)"
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr ""
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr "剩馀时间"
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr "å…许这å使用者登入"
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr "内部æˆå‘˜ï¼ˆå…·æœ‰ä¸ªäººæƒé™ï¼‰"
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting owner to %1 %2"
+msgstr "é™åˆ¶æ‰¿åŠžäººä¸º %1 到%2"
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting queue to %1 %2"
+msgstr "é™åˆ¶è¡¨å•ä¸º %1 到 %2"
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr "链接"
+
+#: NOT FOUND IN SOURCE
+msgid "Link a Queue"
+msgstr "申请表å•è¿žç»“"
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr "此链接已存在"
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr "无法新增链接"
+
+#: NOT FOUND IN SOURCE
+msgid "Link created (%1)"
+msgstr "链接(%1)新增完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "Link deleted (%1)"
+msgstr "链接(%1)删除完毕"
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr "找ä¸åˆ°é“¾æŽ¥"
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr "é“¾æŽ¥ç”³è¯·å• #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Link ticket %1"
+msgstr "é“¾æŽ¥ç”³è¯·å• %1"
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr "将值连结至"
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "连结至"
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr "连结中。æƒé™ä¸è¶³"
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr "链接"
+
+#: NOT FOUND IN SOURCE
+msgid "List All Users"
+msgstr "列出所有用户数æ®"
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr "加载"
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr "加载预存查询:"
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr "加载预存查询"
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr "已加载的 Perl 模å—"
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Loaded search %1"
+msgstr "已加载查询 %1"
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "ä½ç½®"
+
+#: NOT FOUND IN SOURCE
+msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
+msgstr "登入目录 %1 找ä¸åˆ°æˆ–无法写入\\n。无法执行 RT。"
+
+#: NOT FOUND IN SOURCE
+msgid "LogToFile"
+msgstr "纪录等级"
+
+#: NOT FOUND IN SOURCE
+msgid "LogToFileNamed"
+msgstr "纪录档å"
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr "使用者:%1"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr "登入"
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr "注销"
+
+#: NOT FOUND IN SOURCE
+msgid "Long-term contractor"
+msgstr "长期契约员工"
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr "对应的类别ä¸ç¬¦"
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr "新增承办人"
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr "新增现况"
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr "新增到期日"
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr "新增解决日期"
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr "新增实际起始日期"
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr "新增应起始日期"
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr "新增报告日期"
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr "新增优先顺ä½"
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr "新增表å•"
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr "新增主题"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr "让此群组能被使用者看è§"
+
+#: NOT FOUND IN SOURCE
+msgid "Male"
+msgstr "ç”·"
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr "管ç†è‡ªè®¢å­—段åŠå­—段值"
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr "管ç†ç¾¤ç»„åŠæ‰€å±žæˆå‘˜"
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr "管ç†é€‚用于所有表å•çš„属性与设定"
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr "管ç†å„表å•åŠç›¸å…³å±žæ€§"
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr "管ç†ä½¿ç”¨è€…与å£ä»¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Manager"
+msgstr "ç»ç†"
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "三月"
+
+#: NOT FOUND IN SOURCE
+msgid "Mar."
+msgstr "03"
+
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "三月"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Marketing Department"
+msgstr "行销部"
+
+#: NOT FOUND IN SOURCE
+msgid "Match Pattern"
+msgstr "符åˆæ ·å¼"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "五月"
+
+#: NOT FOUND IN SOURCE
+msgid "May."
+msgstr "05"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr "æˆå‘˜ %1 新增完毕"
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr "æˆå‘˜ %1 删除完毕"
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "新增æˆå‘˜å®Œæ¯•: %1"
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr "æˆå‘˜å·²åˆ é™¤"
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr "æˆå‘˜æœªåˆ é™¤"
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr "隶属于"
+
+#: NOT FOUND IN SOURCE
+msgid "Member since"
+msgstr "注册日期"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "隶属于"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr "æˆå‘˜"
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr "所属群组 %1 加入完毕"
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr "所属群组 %1 移除完毕"
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr "所属群组"
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr "使用者 %1 的所属群组"
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr "æ•´åˆå®Œæ¯•"
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr "æ•´åˆå¤±è´¥ã€‚无法设定 EffectiveId"
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr "æ•´åˆå¤±è´¥ã€‚无法设定 Status"
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr "æ•´åˆè¿›"
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr "已整åˆè¿› %1"
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr "讯æ¯"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Message body not shown because it is too large or is not plain text."
+msgstr "信件内文ä¸æ˜¯çº¯æ–‡å­—,因此无法显示。"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr ""
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr "无法纪录讯æ¯"
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr "讯æ¯çºªå½•æˆåŠŸ"
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr "此申请å•çš„相关讯æ¯ä¸ä¼šå¯„é€ç»™..."
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr ""
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr "分钟"
+
+#: NOT FOUND IN SOURCE
+msgid "Misc. Expense"
+msgstr "æ‚è´¹"
+
+#: NOT FOUND IN SOURCE
+msgid "Mismatched parentheses"
+msgstr "未对é½çš„括å·"
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr "缺少主键值?(%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Missing mandatory fields"
+msgstr "缺少必填字段"
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr "行动电è¯"
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "行动电è¯"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr "更改æƒé™æŽ§åˆ¶æ¸…å•"
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr "更改适用于 %1 内所有 %2 的自订字段"
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr "更改适用于所有%1的自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Custom Fields which apply to all queues"
+msgstr "更改适用于所有表å•çš„自订字段"
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr "更改群组æƒé™"
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr "更改æˆå‘˜"
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr "更改æƒé™"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr "更改此表å•çš„模æ¿"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr "更改此表å•çš„手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify System ACLS"
+msgstr "更改系统æƒé™æ¸…å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Template %1"
+msgstr "æ›´æ”¹æ¨¡æ¿ %1"
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr "更改使用者æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Workflow"
+msgstr "更改æµç¨‹"
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr "更改 %1 表å•å†…的自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify a CustomField that applies to all queues"
+msgstr "更改适用于所有表å•çš„自订字段"
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr "更改 %1 表å•å†…的手续"
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr "更改适用于所有表å•çš„手续"
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr "更改适用 %1 的对象"
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Modify dates for # %1"
+msgstr "更改 # %1 的日期"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr "更改 #%1 的日期"
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr "æ›´æ”¹ç”³è¯·å• # %1 的日期"
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr "更改全域自订字段"
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr "更改全域设定的群组æƒé™"
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr "更改全域设定的群组æƒé™ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for groups"
+msgstr "更改全域设定的群组æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for users"
+msgstr "更改全域设定的使用者æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global scrips"
+msgstr "更改全域手续"
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr "更改全域设定的使用者æƒé™"
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr "更改全域设定的使用者æƒé™ã€‚"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr "更改群组数æ®åŠåˆ é™¤ç¾¤ç»„"
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr "更改自订字段 %1 的群组æƒé™"
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr "更改群组 %1 的群组æƒé™"
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr "æ›´æ”¹è¡¨å• %1 的群组æƒé™"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr "更改此群组的æˆå‘˜åå•"
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr "更改个人的å¸å·ä¿¡æ¯"
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr "æ›´æ”¹é“¾æŽ¥åˆ°è¡¨å• %1 的人员"
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr "æ›´æ”¹ç”³è¯·å• #%1 链接到的人员"
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr ""
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr "æ›´æ”¹è¡¨å• %1 的手续"
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr "更改适用于所有表å•çš„手续"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr "æ›´æ”¹æ¨¡æ¿ %1"
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr "更改适用于所有表å•çš„模æ¿"
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr "更改预设的‘RT 一览’检视"
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr "更改群组 %1"
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr "更改表å•è§†å¯Ÿå‘˜"
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr "更改使用者 %1"
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr "æ›´æ”¹ç”³è¯·å• # %1"
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr "æ›´æ”¹ç”³è¯·å• # %1"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr "更改申请å•"
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr "更改自订字段 %1 的使用者æƒé™"
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr "更改群组 %1 的使用者æƒé™"
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr "æ›´æ”¹è¡¨å• %1 的使用者æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify watchers for queue '%1'"
+msgstr "更改 '%1' 的视察员"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify workflow %1"
+msgstr "更改æµç¨‹ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify workflows which apply to all queues"
+msgstr "更改适用于所有表å•çš„æµç¨‹"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr "更改æƒé™æ¸…å•"
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr "更改自订字段"
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr "更改自己是å¦å±žäºŽæŸç¾¤ç»„"
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr "更改表å•è§†å¯Ÿå‘˜"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr "更改手续"
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr "更改个人å¸å·"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr "更改模æ¿"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr "更改申请å•"
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "星期一"
+
+#: NOT FOUND IN SOURCE
+msgid "Mon."
+msgstr "星期一"
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "更多"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr "关于 %1 的进一步信æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Morning Shift"
+msgstr "æ—©ç­"
+
+#: NOT FOUND IN SOURCE
+msgid "Move"
+msgstr "移动"
+
+#: NOT FOUND IN SOURCE
+msgid "Move All"
+msgstr "全移"
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr "下移"
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr "上移"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr "多é‡"
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr "必须指定 'Name' 的属性"
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr "我的 %1 申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "My Approvals"
+msgstr "表å•ç­¾æ ¸"
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr "今日事"
+
+#: NOT FOUND IN SOURCE
+msgid "My Requests"
+msgstr "表å•ç”³è¯·è¿½è¸ª"
+
+#: NOT FOUND IN SOURCE
+msgid "My Tickets"
+msgstr "表å•å¤„ç†"
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr "表å•ç­¾æ ¸"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr ""
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr "我的预存查询"
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "(æ¢åˆ—)"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr "å称"
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr "å¸å·å·²æœ‰äººä½¿ç”¨"
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Nationality"
+msgstr "国ç±"
+
+#: NOT FOUND IN SOURCE
+msgid "Need approval from system administrator"
+msgstr "需先由系统管ç†å‘˜è¿›è¡Œæ‰¹å‡†"
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr "从未更动"
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "新建立"
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr "新增关系"
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr "æ–°çš„å£ä»¤"
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr "新的待签核事项"
+
+#: NOT FOUND IN SOURCE
+msgid "New Query"
+msgstr "新增查询"
+
+#: NOT FOUND IN SOURCE
+msgid "New Request"
+msgstr "表å•ç”³è¯·"
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr "新增查询"
+
+#: NOT FOUND IN SOURCE
+msgid "New Watchers"
+msgstr "新增视察员"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr "新增自订字段"
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr "新增群组"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr ""
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr "æ–°çš„å£ä»¤"
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr "é€å‡ºæ–°å£ä»¤é€šçŸ¥"
+
+#: NOT FOUND IN SOURCE
+msgid "New queue"
+msgstr "新增表å•"
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr "新增æ醒项目:"
+
+#: NOT FOUND IN SOURCE
+msgid "New request"
+msgstr "æ出申请å•"
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr "新增æƒé™"
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr "新增手续"
+
+#: NOT FOUND IN SOURCE
+msgid "New search"
+msgstr "é‡æ–°æŸ¥è¯¢"
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr "新增模æ¿"
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr "æ出申请å•"
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr "没有新申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "New user"
+msgstr "新增使用者"
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr "新使用者åå­—"
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr "新视察员"
+
+#: NOT FOUND IN SOURCE
+msgid "New window setting"
+msgstr "更新窗å£è®¾å®š"
+
+#: NOT FOUND IN SOURCE
+msgid "New workflow"
+msgstr "新增æµç¨‹"
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr "下一项"
+
+#: NOT FOUND IN SOURCE
+msgid "Next Page"
+msgstr "下一页"
+
+#: NOT FOUND IN SOURCE
+msgid "Next page"
+msgstr "下一页"
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "昵称"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr "昵称"
+
+#: NOT FOUND IN SOURCE
+msgid "Night Shift"
+msgstr "å°å¤œç­"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "å¦"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr "尚未定义类别"
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr "无自订字段"
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr "尚未定义自订字段"
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr "尚未定义群组"
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr "没有查询"
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr "尚未定义表å•"
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr "找ä¸åˆ° RT ä½¿ç”¨è€…ã€‚è¯·å‘ RT 管ç†å‘˜æŸ¥è¯¢ã€‚\\n"
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr ""
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr "没有模æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket "
+msgstr "未指定申请å•ã€‚é€€å‡ºç”³è¯·å• "
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
+msgstr "未指定申请å•ã€‚退出申请å•æ›´æ”¹\\n\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "No Workflow"
+msgstr "没有æµç¨‹"
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr "æš‚ä¸å¤„ç†"
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr "未指定字段"
+
+#: NOT FOUND IN SOURCE
+msgid "No command found\\n"
+msgstr "找ä¸åˆ°å‘½ä»¤"
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr "没有对这å使用者的评论"
+
+#: NOT FOUND IN SOURCE
+msgid "No correspondence attached"
+msgstr "没有附上申请å•å›žå¤"
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr ""
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr "没有对 %1 çš„æè¿°"
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr "未指定群组"
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„群组。"
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr "没有附上讯æ¯"
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr "没有设定å£ä»¤"
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr "没有新增表å•çš„æƒé™"
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr "æ²¡æœ‰åœ¨è¡¨å• '%1' 新增申请å•çš„æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "No permission to create users"
+msgstr "没有新增使用者的æƒé™"
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr "没有显示该申请å•çš„æƒé™"
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr "没有储存全域预存查询的æƒé™"
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr ""
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr "没有检视申请å•æ›´æ–°çš„æƒé™"
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr "未指定å•ä½"
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr "未指定å•ä½ã€‚"
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "No protocol specified in %1"
+msgstr "%1 内未指定åè®®"
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„表å•ã€‚"
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr "找ä¸åˆ°æƒé™"
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr "没有选定æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "No search loaded"
+msgstr "尚未加载查询"
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr "没有è¦è¿›è¡Œçš„查询"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr "没有标题"
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "No ticket id specified"
+msgstr "未指定申请å•ç¼–å·"
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr "未指定更动报告类别"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "No user or email address specified"
+msgstr "未指定使用者或电å­é‚®ä»¶åœ°å€"
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„使用者。"
+
+#: NOT FOUND IN SOURCE
+msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
+msgstr "找ä¸åˆ°åˆæ ¼çš„ RT 使用者。RT cvs 处ç†å™¨å·²åœç”¨ã€‚è¯·å‘ RT 管ç†è€…询问。\\n"
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr "_Set 没有收到任何值!\\n"
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr "没有人"
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr ""
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr "字段ä¸å­˜åœ¨ï¼Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "Normal Users"
+msgstr "一般用户群组"
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr "未设定"
+
+#: NOT FOUND IN SOURCE
+msgid "Not configured to fetch the content from a %1 in %2"
+msgstr "未设定æˆä»Ž %2 å†…æ’·å– %1"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Not logged in"
+msgstr "尚未登入"
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr "尚未登入"
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr "尚未设定"
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr "尚未完工。"
+
+#: NOT FOUND IN SOURCE
+msgid "Not yet implemented...."
+msgstr "尚未完工..."
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr "备注"
+
+#: NOT FOUND IN SOURCE
+msgid "Notes:"
+msgstr "备注:"
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr "无法é€å‡ºé€šçŸ¥"
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr "通知管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr "以评论方å¼é€šçŸ¥ç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr "通知副本收件人"
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr "以评论方å¼é€šçŸ¥å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr "通知其它收件人"
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr "以评论方å¼é€šçŸ¥å…¶å®ƒæ”¶ä»¶äºº"
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr "通知承办人"
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr "以评论方å¼é€šçŸ¥æ‰¿åŠžäºº"
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr "通知承办人申请å•å·²é©³å›ž"
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by all approvers"
+msgstr "通知承办人申请å•å·²å®Œæˆå…¨éƒ¨ç­¾æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by some approver"
+msgstr "通知承办人申请å•å·²å®ŒæˆæŸé¡¹ç­¾æ ¸"
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr "æ•´ç†å¾…签核事项,通知承办人åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr "通知申请人"
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr "通知申请人åŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr "以评论方å¼é€šçŸ¥ç”³è¯·äººåŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs"
+msgstr "通知申请人ã€å‰¯æœ¬åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+msgstr "以评论方å¼é€šçŸ¥ç”³è¯·äººã€å‰¯æœ¬åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Notify people:"
+msgstr "通知对象"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "å一月"
+
+#: NOT FOUND IN SOURCE
+msgid "Nov."
+msgstr "11"
+
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "å一月"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "OIN104"
+msgstr "104eHRMS 接å£"
+
+#: NOT FOUND IN SOURCE
+msgid "OK"
+msgstr "确定"
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr "OR"
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr "无法新增对象"
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr "无法删除对象"
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr "对象新增完毕"
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr "对象删除完毕"
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr "自订字段ä¸é€‚用于类别为 %1 的对象"
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr "对象类别ä¸ç¬¦"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Occupation Status"
+msgstr "在èŒçŠ¶æ€"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "å月"
+
+#: NOT FOUND IN SOURCE
+msgid "Oct."
+msgstr "10"
+
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "å月"
+
+#: NOT FOUND IN SOURCE
+msgid "Office Phone"
+msgstr "办公室电è¯"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr "离线"
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr "离线编辑"
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr "离线上载"
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr "在 %1 时,%2 写到:"
+
+#: NOT FOUND IN SOURCE
+msgid "On Change"
+msgstr "更改申请å•æ—¶"
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr "评论时"
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr "回å¤ç”³è¯·å•æ—¶"
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr "新增申请å•æ—¶"
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr "承办人改å˜æ—¶"
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr "优先顺ä½æ”¹å˜æ—¶"
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr "表å•æ”¹å˜æ—¶"
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr "解决申请å•æ—¶"
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr "现况改å˜æ—¶"
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr "å‘生更动时"
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr ""
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr "仅显示 %1 之åŽæ–°å¢žçš„申请å•"
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr "仅显示 %1 之å‰æ–°å¢žçš„申请å•"
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr "仅显示适用于下列项目的自订字段:"
+
+#: NOT FOUND IN SOURCE
+msgid "Open"
+msgstr "å¼€å¯"
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr "å¼€å¯ç”³è¯·å•"
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr ""
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr "å¼€å¯"
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr "å¼€å¯çš„申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in a new window"
+msgstr "在新窗å£å¼€å¯(列表的)申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in another window"
+msgstr "在å¦ä¸€ä¸ªçª—å£å¼€å¯(列表的)申请å•"
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr "收到回å¤æ—¶å³å¼€å¯ç”³è¯·å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Opened Tickets"
+msgstr "已申请è¿è¡Œä¸­è¡¨å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Opinion"
+msgstr "æ„è§"
+
+#: NOT FOUND IN SOURCE
+msgid "Option Description"
+msgstr "选项æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Option Name"
+msgstr "选项å称"
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr "选项"
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr ""
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr "排åºæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Ordering and sorting"
+msgstr "顺åºä¸ŽæŽ’åºæ–¹å¼"
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr "组织å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Organization:"
+msgstr "组织:"
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr "原申请å•ï¼š#%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Other comma-delimited email addresses"
+msgstr "其它e-mailå¸å· (ä»…e-mail通知;多笔å¸å·è¯·ç”¨é€—å·','区隔)"
+
+#: NOT FOUND IN SOURCE
+msgid "Out of range"
+msgstr "期é™å¤–"
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr "已纪录å‘é€çš„评论邮件"
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr "已纪录å‘é€çš„邮件"
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr "优先顺ä½éšæ—¶é—´å¢žåŠ è°ƒæ•´ä¸º"
+
+#: NOT FOUND IN SOURCE
+msgid "Override current custom fields with fields from %1"
+msgstr "以 %1 表å•çš„自订字段å–代现有字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Override global rights"
+msgstr "å–代全域æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "OverrideGlobalACL status %1"
+msgstr "å–代全域æƒé™ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Overview"
+msgstr "总览"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr "承办申请å•"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr "承办申请å•"
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr "承办人"
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "承办人已从 %1 改为 %2"
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr "无法设定承办人。"
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr "强制将承办人从 %1 改为 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Owner is"
+msgstr "承办人"
+
+#: NOT FOUND IN SOURCE
+msgid "Owner's Phone"
+msgstr "承办人电è¯"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "承办人å称"
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Page %1 of %2"
+msgstr "第 %1/%2 页"
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr "呼å«å™¨"
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "呼å«å™¨å·ç "
+
+#: NOT FOUND IN SOURCE
+msgid "Parameter"
+msgstr "呼å«å‚æ•°"
+
+#: NOT FOUND IN SOURCE
+msgid "Parent"
+msgstr "上级"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr "æ¯ç”³è¯·å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Park Space"
+msgstr "åœè½¦ä½ç”³è¯·"
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr "å£ä»¤"
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr "å£ä»¤æ示"
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr "å£ä»¤æ›´æ”¹å®Œæ¯•"
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr "å£ä»¤é•¿åº¦è‡³å°‘必须为 %1 个字元"
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr "å£ä»¤å·²è®¾å®š"
+
+#: NOT FOUND IN SOURCE
+msgid "Password too short"
+msgstr "å£ä»¤å¤ªçŸ­"
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr "å£ä»¤ï¼š%1"
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr "å£ä»¤ï¼šæƒé™ä¸è¶³"
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr "å£ä»¤ç¡®è®¤å¤±è´¥ã€‚"
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr "å£ä»¤ç¡®è®¤å¤±è´¥ã€‚您的å£ä»¤å¹¶æœªæ”¹å˜ã€‚"
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Pelase select a queue"
+msgstr "请选择表å•å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Pending Approval"
+msgstr "等待签核"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr "人员"
+
+#: NOT FOUND IN SOURCE
+msgid "People with Queue Rights"
+msgstr "拥有表å•æƒé™äººå‘˜"
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr "执行使用者自订的动作"
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr "Perl 设定"
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr "æƒé™ä¸è¶³"
+
+#: NOT FOUND IN SOURCE
+msgid "Permission Settings"
+msgstr "æƒé™è®¾å®š"
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr "æƒé™ä¸è¶³"
+
+#: NOT FOUND IN SOURCE
+msgid "Permissions denied"
+msgstr "æƒé™ä¸è¶³"
+
+#: NOT FOUND IN SOURCE
+msgid "Permitted Queues:"
+msgstr "拥有æƒé™è¡¨å•åˆ—表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal"
+msgstr "代ç†äººç¾¤ç»„"
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr "代ç†äººç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal Homepage"
+msgstr "个人首页"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal Todo"
+msgstr "ç§äººå¾…办事项"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups"
+msgstr "代ç†äººç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups:"
+msgstr "代ç†äººç¾¤ç»„:"
+
+#: NOT FOUND IN SOURCE
+msgid "PersonalHomepage"
+msgstr "个人首页"
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 1: Create/Rename Groups (%1)"
+msgstr "第一阶段:群组建立åŠæ”¹å (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 2: Disable/Enable Groups (%1)"
+msgstr "第二阶段:群组åœç”¨åŠå¯ç”¨ (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 3: Create/Rename Users (%1)"
+msgstr "第三阶段:使用者建立åŠæ”¹å (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 4: Disable/Enable Users (%1)"
+msgstr "第四阶段:使用者åœç”¨åŠå¯ç”¨ (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phone"
+msgstr "电è¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Phone number"
+msgstr "电è¯å·ç "
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr "电è¯å·ç "
+
+#: NOT FOUND IN SOURCE
+msgid "Pick"
+msgstr "挑选"
+
+#: NOT FOUND IN SOURCE
+msgid "Place of Departure"
+msgstr "出å‘地点"
+
+#: NOT FOUND IN SOURCE
+msgid "Placeholder"
+msgstr "尚未完工"
+
+#: NOT FOUND IN SOURCE
+msgid "Please Select"
+msgstr "请选择"
+
+#: NOT FOUND IN SOURCE
+msgid "Please check items to be deleted first."
+msgstr "请先选中è¦åˆ é™¤çš„对象"
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Please select a group"
+msgstr "请选择群组"
+
+#: NOT FOUND IN SOURCE
+msgid "Please select a queue's workflow"
+msgstr "请选择表å•æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Please select one of the category types above."
+msgstr "请从上é¢é€‰æ‹©ä¸€é¡¹åˆ†ç±»ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Please select role"
+msgstr "请选择角色"
+
+#: NOT FOUND IN SOURCE
+msgid "Policy"
+msgstr "ç»è¥è§„ç« "
+
+#: NOT FOUND IN SOURCE
+msgid "Position"
+msgstr "èŒåŠ¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Position Level"
+msgstr "èŒç­‰"
+
+#: NOT FOUND IN SOURCE
+msgid "Position Name"
+msgstr "èŒåŠ¡å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Position Number"
+msgstr "èŒåŠ¡ä»£ç "
+
+#: NOT FOUND IN SOURCE
+msgid "Position Rank"
+msgstr "èŒçº§"
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Pref"
+msgstr "å好"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr "首选项"
+
+#: NOT FOUND IN SOURCE
+msgid "Preferences %1 for user %2 ."
+msgstr "使用者 %2 çš„ %1 å好。"
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr "æˆåŠŸå‚¨å­˜ %1 çš„å好。"
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr ""
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Prefs"
+msgstr "个人信æ¯"
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr "预备动作完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "Press 'Esc' to close this window."
+msgstr "按 'Esc' é”®å¯å…³é—­æœ¬çª—å£ã€‚"
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr "上一项"
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Previous Page"
+msgstr "上一页"
+
+#: NOT FOUND IN SOURCE
+msgid "Previous page"
+msgstr "å‰ä¸€é¡µ"
+
+#: NOT FOUND IN SOURCE
+msgid "Pri"
+msgstr "优先顺ä½"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr "找ä¸åˆ°å•ä½ %1。"
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr "优先级"
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr "优先顺ä½èµ·å§‹å€¼"
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr "éšç§è®¾å®šï¼š"
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr ""
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr "内部æˆå‘˜"
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr "内部æˆå‘˜çŠ¶æ€ï¼š%1"
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr "内部æˆå‘˜"
+
+#: NOT FOUND IN SOURCE
+msgid "Process Status"
+msgstr "处ç†çŠ¶æ€"
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Project"
+msgstr "项目"
+
+#: NOT FOUND IN SOURCE
+msgid "Project Name"
+msgstr "项目å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Projects"
+msgstr "项目"
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr "内部用的虚拟群组"
+
+#: NOT FOUND IN SOURCE
+msgid "Public Description"
+msgstr "公开说明"
+
+#: NOT FOUND IN SOURCE
+msgid "Public Info"
+msgstr "公开信æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Public Service"
+msgstr "公共事务区"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Purging stale data: %1"
+msgstr "移除过期数æ®: %1"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "查询"
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr "建立查询"
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr "查询:"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr "队列"
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr "找ä¸åˆ°è¡¨å• %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue '%1' not found\\n"
+msgstr "找ä¸åˆ°è¡¨å• '%1'\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Keyword Selections"
+msgstr "表å•å…³é”®è¯é€‰å–"
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr "表å•å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Owner"
+msgstr "业务承办人"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Priority"
+msgstr "优先等级"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Rights"
+msgstr "表å•æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Scrips"
+msgstr "表å•æ‰‹ç»­"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Setup"
+msgstr "表å•è®¾å®š"
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr "表å•å·²å­˜åœ¨"
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr "无法新增表å•"
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr "无法加载表å•"
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr "表å•æ–°å¢žå®Œæ¯•"
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Queue is not specified."
+msgstr "未指定表å•ã€‚"
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr "找ä¸åˆ°è¡¨å•"
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "表å•å称"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr "表å•"
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr "由我管ç†çš„表å•"
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr "管ç†å‘˜å‰¯æœ¬æœ‰æˆ‘的表å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Quick Search"
+msgstr "表å•çŽ°å†µ"
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr "表å•ä¸€è§ˆ"
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr "快速建立申请å•"
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr "RSS"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1"
+msgstr "RT %1"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr "%2:RT %1 版"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
+msgstr "RT %1 版,<a href=\"http://bestpractical.com\">Best Practical Solutions å…¬å¸</a>出å“。"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1。版æƒæ‰€æœ‰ 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1。版æƒæ‰€æœ‰ 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr "RT 管ç†é¡µé¢"
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT Authentication error."
+msgstr "RT 认è¯é”™è¯¯ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Bounce: %1"
+msgstr "RT 退信:%1"
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT Configuration error"
+msgstr "RT 设定错误"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Critical error. Message not recorded!"
+msgstr "RT 致命错误。讯æ¯æœªè¢«çºªå½•ã€‚"
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr "RT 错误"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Received mail (%1) from itself."
+msgstr "RT 收到从自己寄出的邮件 (%1)。"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Recieved mail (%1) from itself."
+msgstr "RT 收到从自己寄出的邮件 (%1)。"
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "RT 自助æœåŠ¡"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr "RT çš„å˜æ•°"
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr "RT 一览"
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr "使用者 %1 的 RT 一览"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr "RT å¯äºŽæ˜¾ç¤ºæ­¤è‡ªè®¢å­—段时引入其它网站的内容"
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr "RT å¯å°†æ­¤è‡ªè®¢å­—段的值视为连往其它网站的超链接"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't authenticate you"
+msgstr "RT 无法认è¯æ‚¨çš„身份"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find requestor via its external database lookup"
+msgstr "RT 无法从外部数æ®åº“查询找到申请人信æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find the queue: %1"
+msgstr "RT 找ä¸åˆ°è¡¨å•ï¼š%1"
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr "RT 无法储存您的登入阶段。"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't validate this PGP signature. \\n"
+msgstr "RT 无法确认这个 PGP 签章。\\n"
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr "%1 专用æµç¨‹ç³»ç»Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "RT for %1: %2"
+msgstr "%1 专用 RT 系统:%2"
+
+#: NOT FOUND IN SOURCE
+msgid "RT has proccessed your commands"
+msgstr "RT 已执行您的命令"
+
+#: NOT FOUND IN SOURCE
+msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+msgstr "RT 版æƒæ‰€æœ‰ 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;。<br>æœ¬è½¯ä½“ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授æƒç¬¬äºŒç‰ˆ</a> 散布。"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT thinks this message may be a bounce"
+msgstr "RT 认为这å¯èƒ½æ˜¯é€€ä¿¡"
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr "RT 会在申请å•ä¸»æ—¨å†…æœå¯»å°†æ‚¨é”®å…¥çš„任何其它字样"
+
+#: NOT FOUND IN SOURCE
+msgid "RT will process this message as if it were unsigned.\\n"
+msgstr "RT 以未签章方å¼å¤„ç†è¿™å°é‚®ä»¶ã€‚\\n"
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr "RT 会将 <tt>__id__</tt> åŠ <tt>__CustomField__</tt> ç½®æ¢æˆçºªå½•ç¼–å·åŠè‡ªè®¢å­—段"
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
+msgstr "RT 的电å­é‚®ä»¶å‘½ä»¤æ¨¡å¼é¡»è¦ PGP 认è¯ã€‚您å¯èƒ½æ²¡æœ‰ç­¾ç« ï¼Œæˆ–是您的签章无法辨识。"
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT::Queue-Role"
+msgstr "表å•è¿è¡Œè§’色"
+
+#: NOT FOUND IN SOURCE
+msgid "RT::System-Role"
+msgstr "系统è¿è¡Œè§’色"
+
+#: NOT FOUND IN SOURCE
+msgid "RT::Ticket-Role"
+msgstr "申请å•è¿è¡Œè§’色"
+
+#: NOT FOUND IN SOURCE
+msgid "RT_System"
+msgstr "系统讯æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Read Only"
+msgstr "åªè¯»"
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr "真实姓å"
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "真实姓å"
+
+#: NOT FOUND IN SOURCE
+msgid "Really reject this ticket?"
+msgstr "您确定è¦é©³å›žè¿™å¼ ç”³è¯·å•å—?"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr "已加入 %1 为å‚考本申请å•"
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr "已移除 %1 为å‚考本申请å•"
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr "已加入å‚è€ƒç”³è¯·å• %1"
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr "已移除å‚è€ƒç”³è¯·å• %1"
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr "被å‚考"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr "被å‚考"
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr "å‚考"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr "å‚考"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine"
+msgstr "在结果范围内查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine search"
+msgstr "调整查询æ¡ä»¶"
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "æ›´æ–°"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr "æ¯ %1 分钟更新页é¢"
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr "已建立æ醒项目‘%1’"
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr "已完æˆæ醒项目‘%1’"
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr "å·²é‡æ–°å¼€å¯æ醒项目‘%1’"
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr "æ醒项目 #%1"
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr "æ醒项目"
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr "ç”³è¯·å• #%1 çš„æ醒项目"
+
+#: NOT FOUND IN SOURCE
+msgid "Remove"
+msgstr "移除"
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr "移除管ç†å‘˜å‰¯æœ¬"
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr "移除副本"
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr "移除申请人"
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr "回å¤"
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr "回å¤åœ°å€"
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr "回å¤ç”³è¯·äºº"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr "对申请å•è¿›è¡Œå›žå¤"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr "回å¤ç”³è¯·å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Report to Duty"
+msgstr "上下ç­åˆ·å¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Reported on"
+msgstr "到èŒæ—¥æœŸ"
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr "报表"
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr "申请人"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor email address"
+msgstr "申请人电å­é‚®ä»¶ä¿¡ç®±åœ°å€"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor's"
+msgstr "申请人所属之第上"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor's Dept."
+msgstr "申请人所属部门之"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor's Phone"
+msgstr "申请人电è¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor(s)"
+msgstr "申请人"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor.EmailAddress"
+msgstr "申请人: 电å­é‚®ä»¶ä¿¡ç®±"
+
+#: NOT FOUND IN SOURCE
+msgid "RequestorAddresses"
+msgstr "申请人地å€"
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr "申请人"
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr "申请å•å¤„ç†æœŸé™"
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr "未指定必è¦çš„å‚数‘%1’"
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr "é‡è®¾"
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr "é‡è®¾ä¸ºé¢„设值"
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr "ä½å¤„"
+
+#: NOT FOUND IN SOURCE
+msgid "Resolution"
+msgstr "解决状æ€"
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr "解决"
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr "è§£å†³ç”³è¯·å• #%1 (%2)"
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr "已解决"
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr "已由承办人解决"
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr "已在指定日期内解决"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr "已在指定日期内内解决,ä¾æ‰¿åŠžäººåˆ†ç»„"
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr "已解决的申请å•ï¼Œä¾æ‰¿åŠžäººåˆ†ç»„"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr "解决日(相对值)"
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Response to requestors"
+msgstr "回å¤ç”³è¯·äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Responsibility Type"
+msgstr "责任区分"
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr "结果"
+
+#: NOT FOUND IN SOURCE
+msgid "Results per page"
+msgstr "æ¯é¡µåˆ—出几笔结果"
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr "å†æ¬¡è¾“å…¥å£ä»¤"
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr "å¤åŽŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
+msgstr "在 %4 (%5) 的范围内找ä¸åˆ° %2 %3 çš„ %1 æƒé™\\n"
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr "æƒé™ä»£ç†å®Œæ¯•"
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr "æƒé™è®¾å®šå®Œæ¯•"
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr "æƒé™åŠ è½½å®Œæ¯•"
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr "无法撤消æƒé™"
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr "找ä¸åˆ°æƒé™"
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr "æƒé™å¹¶æœªåŠ è½½ã€‚"
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr "æƒé™æ’¤æ¶ˆå®Œæ¯•"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights"
+msgstr "æƒé™åŠä»£ç†äºº"
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr "无法将æƒé™èµ‹äºˆ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights could not be revoked for %1"
+msgstr "无法撤消 %1 çš„æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Role Members"
+msgstr "角色æˆå‘˜"
+
+#: NOT FOUND IN SOURCE
+msgid "Role Name"
+msgstr "角色å称"
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr "角色"
+
+#: NOT FOUND IN SOURCE
+msgid "RootApproval"
+msgstr "交由系统管ç†å‘˜ç­¾æ ¸"
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr "æ¯æ ¼ç¬”æ•°"
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr "æ¯é¡µç¬”æ•°"
+
+#: NOT FOUND IN SOURCE
+msgid "Run Approval"
+msgstr "签核执行"
+
+#: NOT FOUND IN SOURCE
+msgid "SMTPDebug"
+msgstr "SMTP 侦错纪录"
+
+#: NOT FOUND IN SOURCE
+msgid "SMTPFrom"
+msgstr "SMTP 寄件地å€"
+
+#: NOT FOUND IN SOURCE
+msgid "SMTPServer"
+msgstr "SMTP æœåŠ¡å™¨"
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "星期六"
+
+#: NOT FOUND IN SOURCE
+msgid "Sat."
+msgstr "星期六"
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr "储存更改"
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr "储存å好"
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Save changes"
+msgstr "储存更改"
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr ""
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Saved search %1"
+msgstr "æˆåŠŸå‚¨å­˜æŸ¥è¯¢ï¼š%1"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr "预存查询"
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr "手续 #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrip Action"
+msgstr "讯æ¯é€šçŸ¥åŠ¨ä½œ"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrip Condition"
+msgstr "讯æ¯é€šçŸ¥æ¡ä»¶"
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr "手续新增完毕"
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr "手续字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrip Name"
+msgstr "讯æ¯å称"
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr "手续删除完毕"
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr "手续"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrips "
+msgstr "讯æ¯é€šçŸ¥ "
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Scrips for %1\\n"
+msgstr "%1 的手续\\n"
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr "适用于所有表å•çš„手续"
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr "查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Search Criteria"
+msgstr "查询æ¡ä»¶"
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr "æœå¯»å好"
+
+#: NOT FOUND IN SOURCE
+msgid "Search attribute load failure"
+msgstr "æœå¯»å±žæ€§åŠ è½½å¤±è´¥"
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr "签核å•æŸ¥è¯¢"
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr "申请å•æŸ¥è¯¢"
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+msgstr "æœå¯»ç”³è¯·å•ã€‚请键入<strong>ç¼–å·</strong>ã€<strong>表å•å称</strong>ã€æ‰¿åŠžäººçš„<strong>使用者å称</strong>ã€æˆ–申请人的<strong>电å­é‚®ä»¶åœ°å€</strong>。以上格å¼ä¹‹å¤–的文字,则会在申请å•å†…æ–‡åŠé™„件内检索。"
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr "æœå¯»é€‰é¡¹"
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr "æœå¯»ç»“æžœï¼Œä¾ %1 分组"
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Search update: %1"
+msgstr "更新查询:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Searches can't be associated with that kind of object"
+msgstr "ä¸èƒ½å¯¹æ­¤ç±»å¯¹è±¡è¿›è¡ŒæŸ¥è¯¢"
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr "对所有申请å•çš„全文进行检索,å¯èƒ½ä¼šéœ€è¦å¾ˆä¹…的时间。但如果您真的有需è¦ï¼Œå¯é”®å…¥ <b>fulltext:<i>文字</i></b> æ¥æœå¯»ç”³è¯·å•çš„所有纪录。"
+
+#: NOT FOUND IN SOURCE
+msgid "Second-"
+msgstr "二"
+
+#: NOT FOUND IN SOURCE
+msgid "Second-level Users"
+msgstr "二阶主管员工"
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr "安全性:"
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr "å‚è§ï¼š"
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr "查阅自订字段"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr "查阅é€å‡ºçš„电å­é‚®ä»¶åŠæ”¶ä»¶äºº"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr "查阅申请å•å†…çš„ç§äººè¯„论"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr "查阅申请å•æ€»è§ˆ"
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr "查阅自订字段"
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr "查阅群组"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr "查阅表å•"
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "选择"
+
+#: NOT FOUND IN SOURCE
+msgid "Select All"
+msgstr "全选"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr "选择自订字段"
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr "选择群组"
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr "选择表å•"
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr "为您新的申请å•é€‰æ‹©ä¸€ä¸ªè¡¨å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Select a queue to link to"
+msgstr "请选择欲连结表å•"
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr "选择使用者"
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Select custom field"
+msgstr "选择自订字段"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr "选择适用于所有使用者群组的自订字段"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr "选择适用于所有使用者的自订字段"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr "选择适用于所有表å•å†…申请å•çš„自订字段"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr "选择适用于所有表å•å†…申请å•ä¹‹æ›´åŠ¨çš„自订字段"
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr "选择群组"
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr "选择多é‡é¡¹ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr "选择å•ä¸€é¡¹ç›®"
+
+#: NOT FOUND IN SOURCE
+msgid "Select queue"
+msgstr "选择表å•"
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr "选择è¦åœ¨â€˜RT 一览’页é¢æ˜¾ç¤ºçš„表å•"
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr "选择手续"
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr "选择模æ¿"
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr "选择最多 %1 个值"
+
+#: NOT FOUND IN SOURCE
+msgid "Select user"
+msgstr "选择使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "Select workflow"
+msgstr "选择æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectExternal"
+msgstr "系统选项"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectMultiple"
+msgstr "多é‡é€‰é¡¹"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectSingle"
+msgstr "å•ä¸€é€‰é¡¹"
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr "已选å–的自订字段"
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr "已选å–的对象"
+
+#: NOT FOUND IN SOURCE
+msgid "Selected users:"
+msgstr "已选å–的使用者:"
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr "选å–的项目已更改。请储存您的更动"
+
+#: NOT FOUND IN SOURCE
+msgid "Self Service"
+msgstr "自助æœåŠ¡"
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "寄信给所有视察员"
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers as a \"comment\""
+msgstr "以评论方å¼å¯„信给所有视察员"
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr "寄信给申请人åŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr "以评论方å¼å¯„信给申请人åŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr "寄信给申请人"
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr "寄信给特定的副本åŠå¯†ä»¶å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr "寄信给副本收件人"
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr "以评论方å¼å¯„信给副本收件人"
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr "寄信给管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr "以评论寄信给管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr "寄信给申请人"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "ä¹æœˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Sep."
+msgstr "09"
+
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "ä¹æœˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Setting %1's 'Disabled' property to %2"
+msgstr "%1 的‘åœç”¨â€™å±žæ€§å·²è®¾ä¸º %2"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Shift Type"
+msgstr "ç­åˆ«å±žæ€§"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr "显示"
+
+#: NOT FOUND IN SOURCE
+msgid "Show Approvals"
+msgstr "显示待签核申请å•"
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr "显示字段"
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr "显示结果"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr "显示已批准的签核å•"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr "显示基本信æ¯"
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr "显示已驳回的签核å•"
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr "显示细节"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr "显示待处ç†çš„签核å•"
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr "显示尚待他人批准的签核å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket private commentary"
+msgstr "显示申请å•å†…çš„ç§äººè¯„论"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket summaries"
+msgstr "显示申请å•æ‘˜è¦"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr "显示æƒé™æ¸…å•"
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr "显示设定页签"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr "显示寄é€é‚®ä»¶"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr "显示预存查询"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr "显示手续"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr "显示模æ¿"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr "显示申请å•"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr "显示申请å•çš„评论"
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr "登记æˆä¸ºç”³è¯·äººæˆ–副本收件人"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr "登记æˆä¸ºç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr "ç­¾åæ¡£"
+
+#: NOT FOUND IN SOURCE
+msgid "Signed in as %1"
+msgstr "使用者:%1"
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr "简易查询"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr "å•ä¸€"
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr "大å°"
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr "略过选å•"
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "å°"
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr "æŸäº›æµè§ˆå™¨åªå…许加载和 RT æœåŠ¡å™¨åŒä¸€ä¸ªç½‘域的内容。"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr "顺åº"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort key"
+msgstr "排åºæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort results by"
+msgstr "结果排åºæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "SortOrder"
+msgstr "排åºé¡ºåº"
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr "å…³å¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Stage Action"
+msgstr "å…³å¡è¿è¡ŒåŠ¨ä½œ"
+
+#: NOT FOUND IN SOURCE
+msgid "Stage Condition"
+msgstr "å…³å¡è¿è¡Œæ¡ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Stalled"
+msgstr "延宕"
+
+#: NOT FOUND IN SOURCE
+msgid "Start page"
+msgstr "首页"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr "实际起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Started date '%1' could not be parsed"
+msgstr "无法解读起始日期 '%1"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr "实际起始日(相对值)"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr "应起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts By"
+msgstr "应起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts date '%1' could not be parsed"
+msgstr "无法解读起始日期 '%1"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr "应起始日(相对值)"
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr "å·ž"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr "状æ€"
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr "状æ€æ”¹å˜"
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr "状æ€ä»Ž %1 改为 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "StatusChange"
+msgstr "现况改å˜æ—¶"
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr "强制更æ¢æ‰¿åŠžäºº"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr "强制承办申请å•"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr "强制承办申请å•"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr "承办人从 %1 强制更æ¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Stolen from %1 "
+msgstr "承办人从 %1 å¼ºåˆ¶æ›´æ¢ "
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr "æ ·å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Subgroup"
+msgstr "å­ç¾¤ç»„"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr "主题"
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr "标题已改为 %1"
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr "æ交"
+
+#: NOT FOUND IN SOURCE
+msgid "Submit Workflow"
+msgstr "é€å‡ºæµç¨‹"
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr "订阅"
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Succeeded"
+msgstr "设定æˆåŠŸ"
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "星期日"
+
+#: NOT FOUND IN SOURCE
+msgid "Sun."
+msgstr "星期日"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr "系统管ç†å‘˜"
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sync now"
+msgstr "执行åŒæ­¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Sync104HRMS"
+msgstr "自动åŒæ­¥104HRMS"
+
+#: NOT FOUND IN SOURCE
+msgid "Synchronizing HRMS data. This may take a while..."
+msgstr "正在åŒæ­¥åŒ– HRMS 人事系统数æ®ã€‚请ç¨å¾…..."
+
+#: NOT FOUND IN SOURCE
+msgid "System"
+msgstr "系统"
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr "系统设定"
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "System Defined"
+msgstr "系统定义"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr "系统错误"
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. Right not granted."
+msgstr "系统错误。设定æƒé™å¤±è´¥ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. right not granted"
+msgstr "系统错误。设定æƒé™å¤±è´¥ã€‚"
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr "系统错误:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "System Rights"
+msgstr "系统æƒé™"
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr "系统工具"
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr "系统错误。æƒé™ä»£ç†å¤±è´¥ã€‚"
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr "系统错误。设定æƒé™å¤±è´¥ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "System error. Unable to grant rights."
+msgstr "系统错误。无法设定æƒé™ã€‚"
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr "系统群组"
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "SystemInternal"
+msgstr "系统内部用"
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr "内部使用的系统角色群组"
+
+#: NOT FOUND IN SOURCE
+msgid "TEST_STRING"
+msgstr "TEST_STRING"
+
+#: NOT FOUND IN SOURCE
+msgid "TabbedUI"
+msgstr "页签接å£"
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr "å—ç†"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr "自行承办申请å•"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr "自行承办申请å•"
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr "å·²å—ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Task"
+msgstr "工作事项"
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr "模æ¿"
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr "æ¨¡æ¿ #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Template Content"
+msgstr "通知模æ¿å†…容"
+
+#: NOT FOUND IN SOURCE
+msgid "Template Description"
+msgstr "通知模æ¿æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Template Name"
+msgstr "通知模æ¿å称"
+
+#: NOT FOUND IN SOURCE
+msgid "Template deleted"
+msgstr "模æ¿å·²åˆ é™¤"
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr "模æ¿æ˜¯å¿…填字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found"
+msgstr "找ä¸åˆ°æ¨¡æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found\\n"
+msgstr "找ä¸åˆ°æ¨¡æ¿\\n"
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr "模æ¿å‰–æžå®Œæ¯•"
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr "模æ¿å‰–æžé”™è¯¯"
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr "模æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Templates "
+msgstr "é€šçŸ¥æ¨¡æ¿ "
+
+#: NOT FOUND IN SOURCE
+msgid "Templates for %1\\n"
+msgstr "找ä¸åˆ° %1 的模æ¿\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Text"
+msgstr "文字"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr "å·²ç»æ˜¯ç›®å‰å­—段的值"
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr "è¿™ä¸æ˜¯è¯¥è‡ªè®¢å­—段的值"
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr "åŒæ ·çš„值"
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr "这项å•ä½å·²ç»æ‹¥æœ‰è¯¥æƒé™"
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr "这项å•ä½å·²ç»æ˜¯è¿™ä¸ªè¡¨å•çš„ %1"
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr "这项å•ä½å·²ç»æ˜¯è¿™ä»½ç”³è¯·å•çš„ %1"
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr "这项å•ä½ä¸æ˜¯è¿™ä¸ªè¡¨å•çš„ %1"
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr "这项å•ä½ä¸æ˜¯è¿™ä»½ç”³è¯·å•çš„ %1"
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr "此表å•ä¸å­˜åœ¨"
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr "这份申请å•æœ‰å°šæœªè§£å†³çš„附属申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "That user already has that right"
+msgstr "使用者已具有该项æƒé™"
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr "该使用者已ç»æ‰¿åŠžè¿™ä»½ç”³è¯·å•"
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr "使用者ä¸å­˜åœ¨"
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr "è¿™å使用者已ç»æ˜¯å†…部æˆå‘˜"
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr "è¿™å使用者属于éžå†…部æˆå‘˜ç¾¤ç»„"
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr "使用者加入内部æˆå‘˜ç¾¤ç»„完毕"
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr "è¿™å使用者已加入éžå†…部æˆå‘˜ç¾¤ç»„"
+
+#: NOT FOUND IN SOURCE
+msgid "That user is now unprivilegedileged"
+msgstr "è¿™å使用者已加入éžå†…部æˆå‘˜ç¾¤ç»„"
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr "使用者å¯èƒ½æ²¡æœ‰æ‰¿åŠžè¡¨å•é‡Œçš„申请å•"
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr "è¿™ä¸æ˜¯ä¸€ä¸ªæ•°å­—ç¼–å·"
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr "基本信æ¯"
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr "申请å•çš„副本收件人"
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr "申请å•çš„管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "The comment has been recorded"
+msgstr "评论已被纪录"
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr "下列命令会找到 'general' 表å•å†…所有è¿ä½œä¸­çš„申请å•ï¼Œå¹¶å°†å…¶ä¸­ 4 å°æ—¶å†…未处ç†çš„申请å•ä¼˜å…ˆç¨‹åº¦è®¾ä¸º 99:"
+
+#: NOT FOUND IN SOURCE
+msgid "The following commands were not proccessed:\\n\\n"
+msgstr "以下命令未被执行:\\n\\n"
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr "新的字段值设定完æˆã€‚"
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr "申请å•çš„承办人"
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr "申请å•çš„申请人"
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr "该使用者ä¸ä¼šçœ‹è§è¿™äº›è¯„论"
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Third-"
+msgstr "三"
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr "此自订字段ä¸é€‚用于该对象"
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr "此项功能仅é™ç³»ç»Ÿç®¡ç†å‘˜ä½¿ç”¨"
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr "此讯æ¯ä¼šå¯„ç»™..."
+
+#: NOT FOUND IN SOURCE
+msgid "This ticket %1 %2 (%3)\\n"
+msgstr "ç”³è¯·å• %1 %2 (%3)\\n"
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr "此工具程åºä¼šè®©ä½¿ç”¨è€…ç»ç”± RT 执行任æ„命令。"
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr "此项更动报告没有内容"
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr "使用者é€å‡ºçš„å‰ %1 份优先处ç†ç”³è¯·å•"
+
+#: NOT FOUND IN SOURCE
+msgid "This user's 25 highest priority tickets"
+msgstr "使用者é€å‡ºçš„å‰ 25 份优先处ç†ç”³è¯·å•"
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "星期四"
+
+#: NOT FOUND IN SOURCE
+msgid "Thu."
+msgstr "星期四"
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 %2"
+msgstr "ç”³è¯·å• # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 Jumbo update: %2"
+msgstr "æ›´æ–°ç”³è¯·å• # %1 的全部信æ¯ï¼š%2"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr "æ›´æ–°ç”³è¯·å• #%1 的全部信æ¯ï¼š%2"
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr "ç”³è¯·å• #%1: %2"
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr "ç”³è¯·å• %1"
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr "ç”³è¯·å• #%1 æˆåŠŸæ–°å¢žäºŽ '%2' 表å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket %1 loaded\\n"
+msgstr "åŠ è½½ç”³è¯·å• %1\\n"
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr "ç”³è¯·å• %1:%2"
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr "申请å•çš„自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Due"
+msgstr "表å•å¤„ç†æœŸé™"
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr "申请å•å¤„ç†çºªå½• # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket ID"
+msgstr "å•å·"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Id"
+msgstr "申请å•ç¼–å·"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Processing Due"
+msgstr "表å•è¿è¡ŒæœŸé™"
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr "申请å•å·²è§£å†³"
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr "申请å•çš„更动"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Type"
+msgstr "表å•ç§ç±»"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket attachment"
+msgstr "申请å•é™„件"
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr "申请å•å†…容"
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr "申请å•å†…容类别"
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr "内部错误,无法新增申请å•"
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket created"
+msgstr "申请å•æ–°å¢žå®Œæ¯•"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket creation failed"
+msgstr "申请å•æ–°å¢žå¤±è´¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket deleted"
+msgstr "申请å•åˆ é™¤å®Œæ¯•"
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket id not found"
+msgstr "找ä¸åˆ°ç”³è¯·å•ç¼–å·"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket killed"
+msgstr "申请å•åˆ é™¤å®Œæ¯•"
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr "申请å•çš„æè¿°ä¿¡æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket not found"
+msgstr "找ä¸åˆ°ç”³è¯·å•"
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr "申请å•çŽ°å†µå·²æ”¹å˜"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket watchers"
+msgstr "申请å•è§†å¯Ÿå‘˜"
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr "TicketSQL 查询模å—"
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr "申请å•"
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "ç”³è¯·å• %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr "ç”³è¯·å• %1 (%2)"
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets I own"
+msgstr "待处ç†çš„申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets I requested"
+msgstr "é€å‡ºçš„申请å•"
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr "申请å•å»ºç«‹èµ·å§‹æ—¥"
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr "申请å•å»ºç«‹æˆªæ­¢æ—¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets from %1"
+msgstr "%1 的申请å•"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr "申请å•è§£å†³èµ·å§‹æ—¥"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr "申请å•è§£å†³æˆªæ­¢æ—¥"
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr "批准之åŽï¼Œå¯æŽ¥ç»­å¤„ç†ï¼š"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr "预计时间"
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr "剩馀时间"
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr "处ç†æ—¶é—´"
+
+#: NOT FOUND IN SOURCE
+msgid "Time left"
+msgstr "剩馀时间"
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr "显示时间"
+
+#: NOT FOUND IN SOURCE
+msgid "Time worked"
+msgstr "已处ç†æ—¶é—´"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "预计时间"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "剩馀时间"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr "已处ç†æ—¶é—´"
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr "标题"
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:"
+msgstr "产生这次更动的差异档:"
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:\\n"
+msgstr "产生这次更动的差异档:\\n"
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr "如果有支æŒã€æ•™è‚²è®­ç»ƒåŠå®šåˆ¶å¼€å‘的需è¦ï¼Œè¯·è¿žç»œ %1。"
+
+#: NOT FOUND IN SOURCE
+msgid "Todo"
+msgstr "待办事项"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr "告知日"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr "告知日(相对值)"
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr "工具"
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr "页"
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr "更动"
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr "清除更动报告 %1"
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr "更动报告已新增"
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr "更动的自订字段"
+
+#: NOT FOUND IN SOURCE
+msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
+msgstr "未指定申请å•ç¼–å·ï¼Œæ— æ³•æ–°å¢žæ›´åŠ¨"
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr "未指定对象类别åŠç¼–å·ï¼Œæ— æ³•æ–°å¢žæ›´åŠ¨"
+
+#: NOT FOUND IN SOURCE
+msgid "TransactionBatch"
+msgstr "批次更动时"
+
+#: NOT FOUND IN SOURCE
+msgid "TransactionCreate"
+msgstr "新增更动时"
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr "ä¸å¯æ›´æ”¹æ›´åŠ¨æŠ¥å‘Š"
+
+#: NOT FOUND IN SOURCE
+msgid "Transfer to"
+msgstr "移交给"
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Trying to delete a right: %1"
+msgstr "试图删除æŸé¡¹æƒé™ï¼š%1"
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "星期二"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue."
+msgstr "星期二"
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr "类别"
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr ""
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr "尚无实作"
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr "外部系统登入å¸å·"
+
+#: NOT FOUND IN SOURCE
+msgid "UnixUsername"
+msgstr "外部系统登入å¸å·"
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr "ä¸å¯è§£çš„内容文字编ç æ–¹å¼ %1"
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "未知的字段:%1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr "全数显示"
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr "未命å的查询"
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr "éžå†…部æˆå‘˜"
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr "未选å–的自订字段"
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr "未选å–的对象"
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr "未被å—ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Untitled search"
+msgstr "未命å的查询"
+
+#: NOT FOUND IN SOURCE
+msgid "Up"
+msgstr "上一页"
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr "处ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Update All"
+msgstr "全部更新"
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Update ID"
+msgstr "æ›´æ–°ç¼–å·"
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr "更新申请å•"
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr "更新类别"
+
+#: NOT FOUND IN SOURCE
+msgid "Update all these tickets at once"
+msgstr "整批更新申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Update email"
+msgstr "更新电å­é‚®ä»¶ä¿¡ç®±"
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr "批次更新申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Update name"
+msgstr "æ›´æ–°å¸å·"
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr "更新未被记录"
+
+#: NOT FOUND IN SOURCE
+msgid "Update selected tickets"
+msgstr "更新选择的申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Update signature"
+msgstr "更新签章"
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr "更新申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Update ticket # %1"
+msgstr "æ›´æ–°ç”³è¯·å• # %1"
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr "æ›´æ–°ç”³è¯·å• #%1"
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr "æ›´æ–°ç”³è¯·å• #%1 (%2)"
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr "更新的内容并éžç”³è¯·å•å›žå¤ä¹Ÿä¸æ˜¯è¯„论"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr "已更新"
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr ""
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr "上载"
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr "上载多个档案"
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr "上载多份图片"
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr "上载一个档案"
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr "上载一份图片"
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr "上载最多 %1 个档案"
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr "上载最多 %1 份图片"
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr "上载您的更动"
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr "使用其它的 RT 管ç†å·¥å…·"
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 %2: %3\\n"
+msgstr "使用者 %1 %2:%3\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 Password: %2\\n"
+msgstr "使用者 %1 å£ä»¤ï¼š%2\\n"
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'。"
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found"
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found\\n"
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'\\n"
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr "使用者自订"
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr "使用者自订的æ¡ä»¶åŠåŠ¨ä½œ"
+
+#: NOT FOUND IN SOURCE
+msgid "User ID"
+msgstr "使用者 ID"
+
+#: NOT FOUND IN SOURCE
+msgid "User Id"
+msgstr "使用者 ID"
+
+#: NOT FOUND IN SOURCE
+msgid "User Number"
+msgstr "员工编å·"
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr "使用者æƒé™"
+
+#: NOT FOUND IN SOURCE
+msgid "User Setup"
+msgstr "使用者设定"
+
+#: NOT FOUND IN SOURCE
+msgid "User Shift"
+msgstr "员工ç­åˆ«"
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr "使用者试图在 %2 对象 #%3 的自订字段 %1 上执行未知的更新æ“作"
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr "无法新增使用者:%1"
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr "使用者新增完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "User created: %1"
+msgstr "使用者 %1 新增完毕"
+
+#: NOT FOUND IN SOURCE
+msgid "User created: %1 (%2)"
+msgstr "使用者 %1 (%2) 新增完毕"
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr "使用者定义的群组"
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr "已加载使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "User notified"
+msgstr "已通知使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "User renamed from %1 to %2"
+msgstr "使用者 %1 已改å为 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "User view"
+msgstr "使用者ç§äººæ•°æ®"
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr "使用者自定群组"
+
+#: NOT FOUND IN SOURCE
+msgid "UserDefined"
+msgstr "使用者自定"
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr "å¸å·"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr "使用者"
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr "符åˆæŸ¥è¯¢æ¡ä»¶çš„使用者"
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr "使用更动 #%1..."
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr "åˆç†çš„查询"
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr "验è¯"
+
+#: NOT FOUND IN SOURCE
+msgid "ValueOfQueue"
+msgstr "选择表å•"
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr "字段值"
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "View log"
+msgstr "检视纪录档"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr ""
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr ""
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr "视察"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr "以管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è§†å¯Ÿ"
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "视察员"
+
+#: NOT FOUND IN SOURCE
+msgid "Watcher loaded"
+msgstr "æˆåŠŸåŠ è½½è§†å¯Ÿå‘˜ä¿¡æ¯"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr ""
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr "视察员"
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "WebEncoding"
+msgstr "网页文字编ç æ–¹å¼"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "星期三"
+
+#: NOT FOUND IN SOURCE
+msgid "Wed."
+msgstr "星期三"
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr "今日工作一览"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+msgstr "当申请å•é€šè¿‡æ‰€æœ‰ç­¾æ ¸åŽï¼Œå°†æ­¤è®¯æ¯å›žå¤åˆ°åŽŸç”³è¯·å•"
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+msgstr "当申请å•é€šè¿‡æŸé¡¹ç­¾æ ¸åŽï¼Œå°†æ­¤è®¯æ¯å›žå¤åˆ°åŽŸç”³è¯·å•"
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr "新增申请å•æ—¶"
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr "签核å•æ–°å¢žä¹‹åŽï¼Œé€šçŸ¥åº”å—ç†çš„承办人åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr "当任何事情å‘生时"
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr ""
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr "当申请å•è§£å†³æ—¶"
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr "当申请å•æ›´æ¢æ‰¿åŠžäººæ—¶"
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr "当申请å•çš„优先顺åºæ”¹å˜æ—¶"
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr "当申请å•æ›´æ¢è¡¨å•æ—¶"
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr "当申请å•æ›´æ–°çŽ°å†µæ—¶"
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr "当使用者自订的情况å‘生时"
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr "当评论é€è¾¾æ—¶"
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr "当回å¤é€è¾¾æ—¶"
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "å…¬å¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Work offline"
+msgstr "离线工作"
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "å…¬å¸ç”µè¯"
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr "处ç†æ—¶é—´"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow #%1"
+msgstr "æµç¨‹ #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow Begin"
+msgstr "æµç¨‹å¼€å§‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow End"
+msgstr "æµç¨‹ç»“æŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow deleted"
+msgstr "æµç¨‹å·²åˆ é™¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflows"
+msgstr "æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Writable"
+msgstr "å¯è¯»å†™"
+
+#: NOT FOUND IN SOURCE
+msgid "XXX CHANGEME You are not an authorized user"
+msgstr "XXX CHANGEME 您是未ç»æŽˆæƒçš„使用者"
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "是"
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr "您已是这份申请å•çš„承办人"
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr "您ä¸æ˜¯è¢«æŽˆæƒçš„使用者"
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "You can access it with the Download button on the right."
+msgstr "您å¯ä»¥æŒ‰å³æ–¹çš„‘下载’键æ¥å–得。"
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr "您也å¯ä»¥ç›´æŽ¥ç¼–辑预先定义的æœå¯»æ–¹å¼"
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr "祇能é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿åŠžæˆ–是没有承办人的申请å•"
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr "您祇能å—ç†å°šæ— æ‰¿åŠžäººçš„申请å•"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "You don't have permission to view that ticket.\\n"
+msgstr "您没有看那份申请å•çš„æƒé™ã€‚\\n"
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr "æ‚¨ä¼šåœ¨è¡¨å• %2 找到 %1 的申请å•"
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr "您已注销 RT。"
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr "您没有在该表å•æ–°å¢žç”³è¯·å•çš„æƒé™ã€‚"
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr "您ä¸èƒ½åœ¨è¯¥è¡¨å•ä¸­æ出申请。"
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "You need to restart the Request Tracker service for saved changes to take effect."
+msgstr "您必须é‡æ–°æ¿€æ´» Request Tracker æœåŠ¡ï¼Œå‚¨å­˜çš„更动æ‰ä¼šç”Ÿæ•ˆã€‚"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr ""
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "欢迎下次å†æ¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Your %1 requests"
+msgstr "您æ出的 %1 申请å•"
+
+#: NOT FOUND IN SOURCE
+msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
+msgstr "RT 管ç†å‘˜å¯èƒ½è®¾é”™äº†ç”± RT 寄出的邮件收件人标头档"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved by %1. Other approvals may still be pending."
+msgstr "申请å•å·²ç”± %1 批准。å¯èƒ½è¿˜æœ‰å…¶å®ƒå¾…签核的步骤。"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved."
+msgstr "您的申请å•å·²å®Œæˆç­¾æ ¸ç¨‹åºã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected"
+msgstr "您的申请å•å·²è¢«é©³å›ž"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected by %1."
+msgstr "您的申请å•å·²è¢« %1 驳回。"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected."
+msgstr "您的申请å•å·²è¢«é©³å›žã€‚"
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr "您的å¸å·æˆ–å£ä»¤æœ‰è¯¯"
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr "邮政编ç "
+
+#: NOT FOUND IN SOURCE
+msgid "[no subject]"
+msgstr "[没有标题]"
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[æ— ]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "晚于"
+
+#: NOT FOUND IN SOURCE
+msgid "ago"
+msgstr "过期"
+
+#: NOT FOUND IN SOURCE
+msgid "alert"
+msgstr "急讯"
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr "å…许建立预存查询"
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr "å…许加载预存查询"
+
+#: NOT FOUND IN SOURCE
+msgid "approving"
+msgstr "待签核"
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr "æƒé™åŒ %1"
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "早于"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "chart"
+msgstr "图表"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr "已解决"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "contains"
+msgstr "包å«"
+
+#: NOT FOUND IN SOURCE
+msgid "content"
+msgstr "内容"
+
+#: NOT FOUND IN SOURCE
+msgid "content-type"
+msgstr "类型"
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence (probably) not sent"
+msgstr "申请å•å›žå¤(å¯èƒ½)未é€å‡º"
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence sent"
+msgstr "申请å•å›žå¤å·²é€å‡º"
+
+#: NOT FOUND IN SOURCE
+msgid "critical"
+msgstr "严é‡"
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr ""
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr "天"
+
+#: NOT FOUND IN SOURCE
+msgid "dead"
+msgstr "æ‹’ç»å¤„ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "debug"
+msgstr "侦错"
+
+#: NOT FOUND IN SOURCE
+msgid "delete"
+msgstr "删除"
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr "已删除"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "does not match"
+msgstr "ä¸ç¬¦åˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "doesn't contain"
+msgstr "ä¸åŒ…å«"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr ""
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "email address"
+msgstr "电å­é‚®ä»¶ä¿¡ç®±"
+
+#: NOT FOUND IN SOURCE
+msgid "emergency"
+msgstr "å±éš¾"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr "等于"
+
+#: NOT FOUND IN SOURCE
+msgid "error"
+msgstr "错误"
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr "错误:无法下移"
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr "错误:无法左移"
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr "错误:无法上移"
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr "错误:没有å¯åˆ é™¤çš„对象"
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr "错误:没有å¯ç§»åŠ¨çš„对象"
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr "错误:没有å¯åˆ‡æ¢çš„对象"
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "false"
+msgstr "å‡"
+
+#: NOT FOUND IN SOURCE
+msgid "filename"
+msgstr "æ¡£å"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr "大于"
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr "群组 '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "grouped by %1"
+msgstr "ä¾ %1 分组"
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr "å°æ—¶"
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr "ç¼–å·"
+
+#: NOT FOUND IN SOURCE
+msgid "info"
+msgstr "ä¿¡æ¯"
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr "是"
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr "ä¸æ˜¯"
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr "å°äºŽ"
+
+#: NOT FOUND IN SOURCE
+msgid "level Admin"
+msgstr "层主管"
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr ""
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr "符åˆ"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr ""
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr "分"
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "分钟"
+
+#: NOT FOUND IN SOURCE
+msgid "modifications\\n\\n"
+msgstr "更改\\n\\n"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr "月"
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr "新建立"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr ""
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr "没有å称"
+
+#: NOT FOUND IN SOURCE
+msgid "no value"
+msgstr "没有值"
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr "æ— "
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr "ä¸ç­‰äºŽ"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "notice"
+msgstr "æ示"
+
+#: NOT FOUND IN SOURCE
+msgid "notlike"
+msgstr "ä¸ç¬¦åˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "number"
+msgstr "å·"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "等于"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr "å¼€å¯"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "opened"
+msgstr "已开å¯"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr "使用者‘%2’的‘%1’代ç†äººç¾¤ç»„"
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr "è¡¨å• %1 %2"
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr "已驳回"
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr "已处ç†"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "rtname"
+msgstr "æœåŠ¡å™¨å称"
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr "秒"
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr "显示设定页签"
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "spreadsheet"
+msgstr "电å­è¡¨æ ¼"
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr "延宕"
+
+#: NOT FOUND IN SOURCE
+msgid "style: %1"
+msgstr "æ ·å¼ï¼š%1"
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr "加总列"
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr "系统 %1"
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr "系统群组 '%1'"
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr "呼å«ç»„件未指明原因"
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr ""
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ticket #%1"
+msgstr "ç”³è¯·å• #%1"
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr "ç”³è¯·å• #%1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "till"
+msgstr "至"
+
+#: NOT FOUND IN SOURCE
+msgid "to"
+msgstr "到"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "true"
+msgstr "真"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr "没有æ述的群组 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "unresolved"
+msgstr "未处ç†"
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr "使用者 %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "warning"
+msgstr "警告"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr ""
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr "周"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "with template %1"
+msgstr "模æ¿ï¼š%1"
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "å¹´"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr ""
+
diff --git a/rt/lib/RT/I18N/zh_TW.po b/rt/lib/RT/I18N/zh_TW.po
new file mode 100644
index 0000000..4a8be3d
--- /dev/null
+++ b/rt/lib/RT/I18N/zh_TW.po
@@ -0,0 +1,10985 @@
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: RT 3.8.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-07 20:49+0000\n"
+"PO-Revision-Date: 2009-08-13 07:36+0000\n"
+"Last-Translator: Anson.all4u <Unknown>\n"
+"Language-Team: rt-devel <rt-devel@lists.bestpractical.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-10-08 18:48+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 deleted."
+msgstr " 已刪除 %1。"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 renamed to %2."
+msgstr " %1 已更å為 %2。"
+
+#: NOT FOUND IN SOURCE
+msgid " %1 saved."
+msgstr " %1 已儲存。"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:264
+msgid " (no pubkey!)"
+msgstr " 無公共鑰匙ï¼"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:267
+msgid " (untrusted!)"
+msgstr " (ä¸å—信任的!)"
+
+#: share/html/Dashboards/Elements/ShowDashboards:77 share/html/Elements/RT__Group/ColumnMap:55 share/html/Elements/RT__Queue/ColumnMap:55 share/html/Elements/RT__Scrip/ColumnMap:55 share/html/Elements/RT__Template/ColumnMap:55 share/html/Elements/RT__User/ColumnMap:55
+msgid "#"
+msgstr "#"
+
+#: NOT FOUND IN SOURCE
+msgid "#%1"
+msgstr "#%1"
+
+#: share/html/Approvals/Elements/Approve:50 share/html/Approvals/Elements/ShowDependency:73 share/html/SelfService/Display.html:48 share/html/Ticket/Display.html:49 share/html/Ticket/Display.html:54
+#. ($TicketObj->Id, $TicketObj->Subject)
+#. ($Ticket->id, $Ticket->Subject)
+#. ($ticket->Id, $ticket->Subject)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "#%1: %2"
+msgstr "#%1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "$1"
+msgstr "$1"
+
+#: NOT FOUND IN SOURCE
+msgid "$prefix %1"
+msgstr "$prefix %1"
+
+#: NOT FOUND IN SOURCE
+msgid "%*(%1,group ticket)"
+msgstr "%*(%1) 件åƒèˆ‡çš„申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "%*(%1,ticket) due"
+msgstr "%*(%1) 件é™æœŸå®Œæˆçš„申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "%*(%1,unresolved ticket)"
+msgstr "%*(%1) 件尚未解決的申請單"
+
+#: lib/RT/URI/fsck_com_rt.pm:231
+#. ($self->ObjectType, $self->Object->Id)
+msgid "%1 #%2"
+msgstr "%1 #%2"
+
+#: lib/RT/Date.pm:368
+#. ($s, $time_unit)
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:1696
+#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
+msgid "%1 %2 %3"
+msgstr "%1 %2 %3"
+
+#: lib/RT/Date.pm:605
+#. ($wday,$mon,$mday,$year)
+msgid "%1 %2 %3 %4"
+msgstr "%1 %2 %3 %4"
+
+#: lib/RT/Date.pm:620
+#. ($wday,$mon,$mday,$hour,$min,$year)
+msgid "%1 %2 %3 %4:%5 %6"
+msgstr ""
+
+#: lib/RT/Date.pm:617
+#. ($wday,$mon,$mday,$hour,$min,$sec,$year)
+msgid "%1 %2 %3 %4:%5:%6 %7"
+msgstr "%7-%2-%3 %4:%5:%6 %1"
+
+#: lib/RT/Record.pm:1715 lib/RT/Transaction_Overlay.pm:704 lib/RT/Transaction_Overlay.pm:747
+#. ($cf->Name, $new_content)
+#. ($field, $self->NewValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 added"
+msgstr "%2 已新增為 %1"
+
+#: lib/RT/Date.pm:365
+#. ($s, $time_unit)
+msgid "%1 %2 ago"
+msgstr "%1 %2 之å‰"
+
+#: lib/RT/Record.pm:1722 lib/RT/Transaction_Overlay.pm:711
+#. ($cf->Name, $old_content, $new_content)
+#. ($field, $self->OldValue, $self->NewValue)
+msgid "%1 %2 changed to %3"
+msgstr "%1 已從 %2 改為 %3"
+
+#: lib/RT/Record.pm:1719 lib/RT/Transaction_Overlay.pm:707 lib/RT/Transaction_Overlay.pm:753
+#. ($cf->Name, $old_content)
+#. ($field, $self->OldValue)
+#. ($self->Field, $principal->Object->Name)
+msgid "%1 %2 deleted"
+msgstr "%2 已自 %1 刪除"
+
+#: share/html/Widgets/SavedSearch:117
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description)
+msgid "%1 %2 deleted."
+msgstr "%1 %2 已刪除。"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 %2 of group %3"
+msgstr "%3 群組的 %1 %2"
+
+#: share/html/Widgets/SavedSearch:94
+#. (loc($self->{SearchType}), $self->{CurrentSearch}{Description}, $args->{SavedSearchDescription})
+msgid "%1 %2 renamed to %3."
+msgstr "%1 %2 æ›´å為 %3。"
+
+#: share/html/Widgets/SavedSearch:107
+#. (loc($self->{SearchType}), $args->{SavedSearchDescription})
+msgid "%1 %2 saved."
+msgstr "%1 %2 已儲存。"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:85 share/html/Ticket/Elements/PreviewScrips:66
+#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->TemplateObj->Name),)
+msgid "%1 %2 with template %3"
+msgstr "æ¢ä»¶ï¼š%1 | 動作:%2 | 範本:%3"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 (%2) %3 this ticket\\n"
+msgstr "%1 (%2) %3 這份申請單\\n"
+
+#: share/html/Ticket/Elements/ShowAttachments:75
+#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+msgid "%1 (%2) by %3"
+msgstr "%1 (%2) - %3"
+
+#: share/html/SelfService/Update.html:63 share/html/Ticket/Elements/EditBasics:123 share/html/Ticket/Update.html:70 share/html/Ticket/Update.html:76 share/html/Tools/MyDay.html:68
+#. (loc($Ticket->Status()))
+#. (loc($TicketObj->Status))
+#. ($TicketObj->OwnerObj->Name)
+#. (loc($Ticket->Status))
+msgid "%1 (Unchanged)"
+msgstr "%1 (未更改)"
+
+#: share/html/Dashboards/Elements/Deleted:57
+#. (($_->{description} || $_->{name}), $_->{pane})
+msgid "%1 (from pane %2)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - %2 shown"
+msgstr "顯示第 %1 - %2 筆"
+
+#: bin/rt-crontool:363
+#. ("--log")
+msgid "%1 - Adjust LogToScreen config option"
+msgstr ""
+
+#: bin/rt-crontool:338 bin/rt-crontool:345 bin/rt-crontool:351
+#. ("--search-arg", "--search")
+#. ("--condition-arg", "--condition")
+#. ("--action-arg", "--action")
+msgid "%1 - An argument to pass to %2"
+msgstr "%1 - 傳éžçµ¦ %2 的一個åƒæ•¸"
+
+#: bin/rt-crontool:365
+#. ("--verbose")
+msgid "%1 - Output status updates to STDOUT"
+msgstr "%1 - 將更新狀態輸出到 STDOUT"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify id of the template you want to use"
+msgstr "%1 - 指定欲使用的範本編號"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgstr "%1 - 指定欲使用的更動為 'first' (第一項) 或 'last' (最後一項)"
+
+#: bin/rt-crontool:357
+#. ("--transaction")
+msgid "%1 - Specify if you want to use either 'first', 'last' or 'all' transactions"
+msgstr ""
+
+#: bin/rt-crontool:354
+#. ("--template")
+msgid "%1 - Specify name or id of template(s) you want to use"
+msgstr ""
+
+#: bin/rt-crontool:348
+#. ("--action")
+msgid "%1 - Specify the action module you want to use"
+msgstr "%1 - 指定欲使用的動作模組"
+
+#: bin/rt-crontool:360
+#. ("--transaction-type")
+msgid "%1 - Specify the comma separated list of transactions' types you want to use"
+msgstr ""
+
+#: bin/rt-crontool:342
+#. ("--condition")
+msgid "%1 - Specify the condition module you want to use"
+msgstr "%1 - 指定欲使用的æ¢ä»¶æ¨¡çµ„"
+
+#: bin/rt-crontool:335
+#. ("--search")
+msgid "%1 - Specify the search module you want to use"
+msgstr "%1 - 指定欲使用的查詢模組"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 - Specify the type of a transaction you want to use"
+msgstr "%1 - 指定欲使用的更動類別"
+
+#: share/html/Dashboards/index.html:67
+#. ($group)
+msgid "%1 DashBoards"
+msgstr ""
+
+#: share/html/Elements/Footer:59
+#. ('&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+msgid "%1 RT %2 Copyright 1996-%3 %4."
+msgstr "%1 RT %2 版,%4 版權所有,1996-%3。"
+
+#: lib/RT/ScripAction_Overlay.pm:148
+#. ($self->Id)
+msgid "%1 ScripAction loaded"
+msgstr "載入手續 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 Total"
+msgstr "å…± %1 ç­†"
+
+#: lib/RT/Record.pm:1750
+#. ($args{'Value'}, $cf->Name)
+msgid "%1 added as a value for %2"
+msgstr "新增 %1 作為 %2 的值"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on"
+msgstr "別å %1 需è¦å¯ç”¨çš„申請單編號"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on "
+msgstr "別å %1 需è¦å¯ç”¨çš„申請單編號 "
+
+#: NOT FOUND IN SOURCE
+msgid "%1 aliases require a TicketId to work on (from %2) %3"
+msgstr "別å %1 需è¦å¯ç”¨çš„ç”³è«‹å–®ç·¨è™Ÿä»¥è™•ç† %3(出自 %2)"
+
+#: share/html/Install/DatabaseDetails.html:170
+#. ($RT::DatabaseName)
+msgid "%1 already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:175
+#. ($RT::DatabaseName)
+msgid "%1 already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:134 lib/RT/Link_Overlay.pm:142
+#. ($args{'Base'})
+#. ($args{'Target'})
+msgid "%1 appears to be a local object, but can't be found in the database"
+msgstr "%1 看來是個本地物件,å»ä¸åœ¨è³‡æ–™åº«è£¡"
+
+#: share/html/Install/DatabaseDetails.html:166
+#. ($RT::DatabaseName)
+msgid "%1 appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:593 share/html/Ticket/Elements/ShowDates:80
+#. ($self->BriefDescription , $self->CreatorObj->Name)
+#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+msgid "%1 by %2"
+msgstr "%1 (%2)"
+
+#: lib/RT/Record.pm:500 lib/RT/Transaction_Overlay.pm:655 lib/RT/Transaction_Overlay.pm:842 lib/RT/Transaction_Overlay.pm:847 lib/RT/Transaction_Overlay.pm:861 lib/RT/Transaction_Overlay.pm:870 lib/RT/Transaction_Overlay.pm:875
+#. ($self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"')
+#. ($self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), "'" . $self->NewValue . "'")
+#. ($self->loc($self->Field), $t2->AsString, $t1->AsString)
+#. ($self->loc($self->Field), ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->loc($self->Field) , $q1->Name , $q2->Name)
+msgid "%1 changed from %2 to %3"
+msgstr "%1 的值從 %2 改為 %3"
+
+#: share/html/Search/Chart.html:2 share/html/Search/Elements/ResultViews:64
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query, Default => $PrimaryGroupBy))
+#. ($m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
+msgid "%1 chart by %2"
+msgstr "%1圖, ä¾%2"
+
+#: share/html/Search/Elements/EditSearches:189
+#. ($SavedSearch->{'Object'}->Description)
+msgid "%1 copy"
+msgstr "%1 複製"
+
+#: share/html/Admin/Tools/Configuration.html:85
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 core config"
+msgstr ""
+
+#: lib/RT/Record.pm:918
+msgid "%1 could not be set to %2."
+msgstr "無法將 %1 設定為 %2。"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 couldn't init a transaction (%2)\\n"
+msgstr "%1 無法åˆå§‹æ›´æ–° (%2)\\n"
+
+#: lib/RT/Ticket_Overlay.pm:2524
+#. ($self)
+msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
+msgstr "%1 無法將ç¾æ³è¨­æˆå·²è§£æ±ºã€‚RT 資料庫內容å¯èƒ½ä¸ä¸€è‡´ã€‚"
+
+#: lib/RT/Transaction_Overlay.pm:622
+#. ($obj_type)
+msgid "%1 created"
+msgstr "已建立 %1"
+
+#: lib/RT/Transaction_Overlay.pm:633
+#. ($obj_type)
+msgid "%1 deleted"
+msgstr "已刪除 %1"
+
+#: lib/RT/Transaction_Overlay.pm:628
+#. ($obj_type)
+msgid "%1 disabled"
+msgstr ""
+
+#: share/html/Install/Sendmail.html:86
+#. ($ARGS{SendmailPath})
+msgid "%1 doesn't exist."
+msgstr "%1 ä¸å­˜åœ¨"
+
+#: lib/RT/Transaction_Overlay.pm:625
+#. ($obj_type)
+msgid "%1 enabled"
+msgstr ""
+
+#: etc/initialdata:553
+msgid "%1 highest priority tickets I own"
+msgstr "å‰ %1 份待處ç†ç”³è«‹å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I own..."
+msgstr "å‰ %1 份待處ç†ç”³è«‹å–®..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets I requested..."
+msgstr "å‰ %1 份é€å‡ºçš„申請單..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 highest priority tickets pending my approval..."
+msgstr "å‰ %1 份待簽核申請單..."
+
+#: bin/rt-crontool:330
+#. ($0)
+msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr "%1 是從外部排程程å¼(如 cron)來å°ç”³è«‹å–®é€²è¡Œæ“作的工具。"
+
+#: sbin/rt-email-digest:92
+#. ($0)
+msgid "%1 is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest."
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:965
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this queue."
+msgstr "%1 å·²ä¸å†æ˜¯æ­¤è¡¨å–®çš„ %2。"
+
+#: lib/RT/Ticket_Overlay.pm:1274
+#. ($principal->Object->Name, $args{'Type'})
+msgid "%1 is no longer a %2 for this ticket."
+msgstr "%1 å·²ä¸å†æ˜¯æ­¤ç”³è«‹å–®çš„ %2。"
+
+#: lib/RT/Record.pm:1807
+#. ($TransactionObj->OldValue, $cf->Name)
+msgid "%1 is no longer a value for custom field %2"
+msgstr "%1 å·²ä¸å†æ˜¯è‡ªè¨‚æ¬„ä½ %2 的值。"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 isn't a valid Queue id."
+msgstr "%1 ä¸æ˜¯ä¸€å€‹åˆæ³•çš„表單編號。"
+
+#: share/html/Ticket/Elements/ShowTime:49 share/html/Ticket/Elements/ShowTime:51
+#. ($minutes)
+msgid "%1 min"
+msgstr "%1 分é˜"
+
+#: etc/initialdata:564
+msgid "%1 newest unowned tickets"
+msgstr "å‰ %1 份待èªé ˜çš„申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 not shown"
+msgstr "沒有顯示 %1"
+
+#: lib/RT/CustomField_Overlay.pm:865
+msgid "%1 objects"
+msgstr "%1 物件"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 recent tickets I own..."
+msgstr "最新 %1 份待處ç†ç”³è«‹å–®..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 recent tickets I requested..."
+msgstr "最新 %1 份é€å‡ºçš„申請單..."
+
+#: NOT FOUND IN SOURCE
+msgid "%1 result(s) found"
+msgstr "找到 %1 é …çµæžœ"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 rights"
+msgstr "%1權é™"
+
+#: share/html/Admin/Tools/Configuration.html:82
+#. ($meta->{'Source'}{'Extension'})
+msgid "%1 site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "%1 succeeded\\n"
+msgstr "%1 完æˆ\\n"
+
+#: lib/RT/SharedSetting.pm:240
+#. (ucfirst($self->ObjectName), $msg)
+msgid "%1 update: %2"
+msgstr "%1 æ›´æ–°: %2"
+
+#: lib/RT/SharedSetting.pm:233
+#. (ucfirst($self->ObjectName))
+msgid "%1 update: Nothing changed"
+msgstr "%1 更新: 沒有變動"
+
+#: lib/RT/SharedSetting.pm:237
+msgid "%1 updated"
+msgstr "%1 已更新。"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 was created without a CurrentUser\\n"
+msgstr "%1 新增時未指定ç¾è¡Œä½¿ç”¨è€…"
+
+#: lib/RT/Action/ResolveMembers.pm:64
+#. (ref $self)
+msgid "%1 will resolve all members of a resolved group ticket."
+msgstr "%1 會解決在已解決群組裡æˆå“¡çš„申請單。"
+
+#: NOT FOUND IN SOURCE
+msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request."
+msgstr "如果 %1 起始申請單ä¾è³´æ–¼æŸå€‹éˆçµï¼Œæˆ–是æŸå€‹éˆçµçš„æˆå“¡ï¼Œå®ƒå°‡æœƒè¢«å»¶å®•ã€‚"
+
+#: lib/RT/CustomField_Overlay.pm:866
+msgid "%1's %2 objects"
+msgstr "%1 內的 %2 物件"
+
+#: lib/RT/CustomField_Overlay.pm:867
+msgid "%1's %2's %3 objects"
+msgstr "%1 內的 %2 的 %3 物件"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:61
+#. ($object->Name)
+msgid "%1's dashboards"
+msgstr "%1 的控制é¢æ¿"
+
+#: share/html/Search/Elements/SearchPrivacy:54 share/html/Search/Elements/SelectSearchObject:65 share/html/Search/Elements/SelectSearchesForObjects:59
+#. ($Object->Name)
+#. ($object->Name)
+msgid "%1's saved searches"
+msgstr "%1 çš„é å­˜æŸ¥è©¢"
+
+#: lib/RT/Transaction_Overlay.pm:510
+#. ($self)
+msgid "%1: no attachment specified"
+msgstr "%1:未指定附件"
+
+#: lib/RT/Date.pm:612
+#. ($hour,$min)
+msgid "%1:%2"
+msgstr ""
+
+#: lib/RT/Date.pm:609
+#. ($hour,$min,$sec)
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:129 share/html/Ticket/Elements/ShowTransactionAttachments:135
+#. (int( $size / 1024 / 102.4 ) / 10)
+#. ($size)
+msgid "%1b"
+msgstr "%1 ä½å…ƒçµ„"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:132
+#. (int( $size / 102.4 ) / 10)
+msgid "%1k"
+msgstr "%1k ä½å…ƒçµ„"
+
+#: share/html/Ticket/Elements/ShowTime:51
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr "%1 å°æ™‚"
+
+#: NOT FOUND IN SOURCE
+msgid "%quant(%1,result) found"
+msgstr "找到 %1 é …çµæžœ"
+
+#: lib/RT/Ticket_Overlay.pm:886
+#. ($args{'Status'})
+msgid "'%1' is an invalid value for status"
+msgstr "'%1' ä¸æ˜¯ä¸€å€‹åˆæ³•çš„狀態值"
+
+#: NOT FOUND IN SOURCE
+msgid "'%1' not a recognized action. "
+msgstr "'%1'為無法辨識的動作。 "
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete group member)"
+msgstr "(點é¸æ¬²åˆªé™¤çš„æˆå“¡)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check box to delete scrip)"
+msgstr "(點é¸æ¬²åˆªé™¤çš„手續)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:91 share/html/Admin/Elements/EditQueueWatchers:66 share/html/Admin/Elements/EditScrips:67 share/html/Admin/Elements/EditTemplates:69 share/html/Admin/Groups/Members.html:109 share/html/Elements/EditLinks:112 share/html/Ticket/Elements/EditPeople:79 share/html/Ticket/Elements/Reminders:119 share/html/User/Groups/Members.html:78
+msgid "(Check box to delete)"
+msgstr "(點é¸æ¬²åˆªé™¤çš„é …ç›®)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Check boxes to delete)"
+msgstr "(點é¸æ¬²åˆªé™¤çš„é …ç›®)"
+
+#: share/html/Ticket/Elements/PreviewScrips:61
+msgid "(Check boxes to disable notifications to the listed recipients)"
+msgstr "(點é¸æ¬²åœç”¨é€šçŸ¥çš„收件人)"
+
+#: share/html/Ticket/Elements/PreviewScrips:86
+msgid "(Check boxes to enable notifications to the listed recipients)"
+msgstr "(點é¸æ¬²å•Ÿç”¨é€šçŸ¥çš„收件人)"
+
+#: share/html/Ticket/Create.html:226
+msgid "(Enter ticket ids or URLs, separated with spaces)"
+msgstr "(éµå…¥ç”³è«‹å–®ç·¨è™Ÿæˆ–網å€ï¼Œä»¥ç©ºç™½åˆ†éš”)"
+
+#: share/html/Admin/Queues/Modify.html:76 share/html/Admin/Queues/Modify.html:79
+#. (RT->Config->Get('CorrespondAddress'))
+#. (RT->Config->Get('CommentAddress'))
+msgid "(If left blank, will default to %1)"
+msgstr "(如果留白, 則é è¨­ç‚º %1)"
+
+#: NOT FOUND IN SOURCE
+msgid "(No Value)"
+msgstr "(沒有值)"
+
+#: share/html/Admin/Elements/EditCustomFields:76 share/html/Admin/Elements/ListGlobalCustomFields:55
+msgid "(No custom fields)"
+msgstr "(沒有自訂欄ä½)"
+
+#: share/html/Admin/Groups/Members.html:73 share/html/User/Groups/Members.html:76
+msgid "(No members)"
+msgstr "(沒有æˆå“¡)"
+
+#: share/html/Admin/Elements/EditScrips:69 share/html/Admin/Elements/ListGlobalScrips:49
+msgid "(No scrips)"
+msgstr "(沒有手續)"
+
+#: share/html/Admin/Elements/EditTemplates:54
+msgid "(No templates)"
+msgstr "沒有範本"
+
+#: NOT FOUND IN SOURCE
+msgid "(No workflows)"
+msgstr "沒有æµç¨‹"
+
+#: share/html/Admin/Elements/PickCustomFields:49 share/html/Admin/Elements/PickObjects:49
+msgid "(None)"
+msgstr "(ç„¡)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<b>ä¸æœƒ</b>更改後續的收件者å單。)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<b>ä¸æœƒ</b>更改後續的收件者å單。)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<strong>ä¸æœƒ</strong>更改後續的收件者å單。)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的管ç†å“¡é›»å­éƒµä»¶ä½å€ã€‚這<b>將會</b>更改後續的收件者å單。)"
+
+#: share/html/Ticket/Create.html:106
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的管ç†å“¡é›»å­éƒµä»¶ä½å€ã€‚這<strong>將會</strong>更改後續的收件者å單。)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<b>ä¸æœƒ</b>更改後續的收件者å單。)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<b>ä¸æœƒ</b>更改後續的收件者å單。)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<strong>ä¸æœƒ</strong>更改後續的收件者å單。)"
+
+#: NOT FOUND IN SOURCE
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<b>將會</b>更改後續的收件者å單。)"
+
+#: share/html/Ticket/Create.html:97
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<strong>將會</strong>更改後續的收件者å單。)"
+
+#: share/html/Admin/Elements/EditScrip:98
+msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
+msgstr "(當æ¢ä»¶æˆ–動作設為「使用者自訂ã€æ™‚,請填入這些欄ä½)"
+
+#: share/html/Ticket/Elements/EditWatchers:63 share/html/Ticket/Elements/ShowUserEntry:50
+msgid "(Will not be sent email)"
+msgstr "(ä¸æœƒæ”¶åˆ°éƒµä»¶)"
+
+#: share/html/Admin/CustomFields/index.html:79
+msgid "(any)"
+msgstr "(任一)"
+
+#: NOT FOUND IN SOURCE
+msgid "(default delegate)"
+msgstr "(é è¨­ä»£ç†äºº)"
+
+#: NOT FOUND IN SOURCE
+msgid "(delete)"
+msgstr "(刪除)"
+
+#: NOT FOUND IN SOURCE
+msgid "(displaying new and open tickets for %1)"
+msgstr "(顯示 %1 å下新建立åŠé–‹å•Ÿä¸­çš„申請單)"
+
+#: share/html/User/Groups/index.html:56
+msgid "(empty)"
+msgstr "(空白)"
+
+#: NOT FOUND IN SOURCE
+msgid "(new)"
+msgstr "(新增)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no name listed)"
+msgstr "(沒有列出姓å)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:281
+msgid "(no pubkey!)"
+msgstr "(無公開金鑰!)"
+
+#: NOT FOUND IN SOURCE
+msgid "(no subject)"
+msgstr "(沒有主題)"
+
+#: lib/RT/Transaction_Overlay.pm:648 share/html/Admin/Elements/AddCustomFieldValue:72 share/html/Admin/Elements/EditCustomFieldValues:78 share/html/Admin/Elements/SelectRights:77 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/SelectPlugin:55 share/html/Elements/EditCustomFieldSelect:70 share/html/Elements/EditCustomFieldSelect:89 share/html/Elements/SelectCustomFieldValue:53 share/html/Elements/ShowCustomFields:58 share/html/Search/Elements/Chart:79
+msgid "(no value)"
+msgstr "(ç„¡)"
+
+#: share/html/Admin/Elements/EditCustomFieldValues:49
+msgid "(no values)"
+msgstr "(沒有值)"
+
+#: share/html/Elements/EditLinks:133 share/html/Ticket/Elements/BulkLinks:51
+msgid "(only one ticket)"
+msgstr "(僅能指定一份申請單)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:121
+#. ($count)
+msgid "(pending %quant(%1,other ticket))"
+msgstr "(等待%1份其他申請單)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:113
+msgid "(pending approval)"
+msgstr "(等待簽核)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other Collection)"
+msgstr "(等待其他集åˆ)"
+
+#: NOT FOUND IN SOURCE
+msgid "(pending other tickets)"
+msgstr "(等待其他申請單)"
+
+#: NOT FOUND IN SOURCE
+msgid "(requestor's group)"
+msgstr "(申請人所屬)"
+
+#: share/html/Admin/Users/Modify.html:73
+msgid "(required)"
+msgstr "(å¿…å¡«)"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:53
+#. ($key->{'TrustTerse'})
+msgid "(trust: %1)"
+msgstr "(ä¿¡ä»»: %1)"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:229 share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "(untitled)"
+msgstr "(未命å)"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:284
+msgid "(untrusted!)"
+msgstr "(未被信任的)"
+
+#: NOT FOUND IN SOURCE
+msgid "(yyyy/mm/dd)"
+msgstr "(yyyy/mm/dd)"
+
+#: NOT FOUND IN SOURCE
+msgid "*"
+msgstr "★"
+
+#: share/html/Elements/EditCustomFieldSelect:59
+msgid "-"
+msgstr "-"
+
+#: bin/rt-crontool:135
+msgid "--template-id is deprecated argument and can not be used with --template"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "--transaction argument could be only 'first' or 'last'"
+msgstr "--transaction 的值僅能為 'first' 或 'last'"
+
+#: bin/rt-crontool:130
+msgid "--transaction argument could be only 'first', 'last' or 'all'"
+msgstr "--transaction çš„åƒæ•¸åªèƒ½æ˜¯ 'first', 'last' 或 'all'"
+
+#: NOT FOUND IN SOURCE
+msgid ":"
+msgstr ":"
+
+#: NOT FOUND IN SOURCE
+msgid "<% $Ticket->Status%>"
+msgstr "<% $Ticket->Status%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<% $_ %>"
+msgstr "<% $_ %>"
+
+#: NOT FOUND IN SOURCE
+msgid "<%$_%>"
+msgstr "<%$_%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<%$field%>"
+msgstr "<%$field%>"
+
+#: NOT FOUND IN SOURCE
+msgid "<blank>"
+msgstr "<留空>"
+
+#: share/html/Elements/CreateTicket:49
+#. ($m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()'))
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"æ出申請單\" />&nbsp;%1"
+
+#: lib/RT/StyleGuide.pod:779
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
+msgstr "<input type=\"submit\" value=\"æ出申請單\">&nbsp;%1"
+
+#: share/html/User/Prefs.html:196
+msgid "<p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p>"
+msgstr "<p>所有 iCal feeds 都內嵌了一個能驗證是你的秘密 token. 如果你有 iCal feeds çš„ URL 被æ›éœ²åœ¨å¤–é¢çš„險惡世界的話, ä½ å¯ä»¥åœ¨ä¸‹é¢å–得一個新的秘密 token, <b>並讓ç¾å­˜çš„ iCal feedsä¸å†èƒ½ç”¨</b>.</p>"
+
+#: etc/initialdata:193
+msgid "A blank template"
+msgstr "空白範本"
+
+#: share/html/Admin/Users/Modify.html:381
+msgid "A password was not set, so user won't be able to login."
+msgstr "密碼沒有設定,因此該使用者將無法登入。"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Deleted"
+msgstr "ACE 已刪除"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE Loaded"
+msgstr "ACE 已載入"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be deleted"
+msgstr "無法刪除 ACE"
+
+#: NOT FOUND IN SOURCE
+msgid "ACE could not be found"
+msgstr "找ä¸åˆ° ACE"
+
+#: lib/RT/ACE_Overlay.pm:171
+msgid "ACE not found"
+msgstr "找ä¸åˆ° ACE 設定"
+
+#: lib/RT/ACE_Overlay.pm:640
+msgid "ACEs can only be created and deleted."
+msgstr "祇能新增或刪除 ACE 設定。"
+
+#: NOT FOUND IN SOURCE
+msgid "ACLEquivalence"
+msgstr "ACLEquivalence"
+
+#: share/html/Search/Elements/SelectAndOr:48
+msgid "AND"
+msgstr "AND"
+
+#: NOT FOUND IN SOURCE
+msgid "Aborting to avoid unintended ticket modifications.\\n"
+msgstr "離開以å…ä¸å°å¿ƒæ›´æ”¹åˆ°ç”³è«‹å–®ã€‚\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "About Me"
+msgstr "個人資訊"
+
+#: share/html/User/Elements/Tabs:61
+msgid "About me"
+msgstr "個人資訊"
+
+#: NOT FOUND IN SOURCE
+msgid "Access Right"
+msgstr "系統使用登錄權é™"
+
+#: share/html/Admin/Users/Modify.html:108
+msgid "Access control"
+msgstr "å­˜å–權é™"
+
+#: share/html/Admin/Elements/EditScrip:68 share/html/Elements/RT__Scrip/ColumnMap:72
+msgid "Action"
+msgstr "動作"
+
+#: NOT FOUND IN SOURCE
+msgid "Action %1 not found"
+msgstr "動作 %1 找ä¸åˆ°"
+
+#: lib/RT/Scrip_Overlay.pm:136
+#. ($args{'ScripAction'})
+msgid "Action '%1' not found"
+msgstr "動作 '%1' 無法被找到"
+
+#: NOT FOUND IN SOURCE
+msgid "Action committed."
+msgstr "動作執行完畢"
+
+#: bin/rt-crontool:230
+msgid "Action committed.\\n"
+msgstr "動作執行完畢。\\n"
+
+#: lib/RT/Scrip_Overlay.pm:132
+msgid "Action is mandatory argument"
+msgstr "動作為必填欄ä½"
+
+#: bin/rt-crontool:226
+msgid "Action prepared..."
+msgstr "動作準備完畢..."
+
+#: NOT FOUND IN SOURCE
+msgid "Activated Date"
+msgstr "申請啟動時間"
+
+#: NOT FOUND IN SOURCE
+msgid "Add"
+msgstr "新增"
+
+#: share/html/Search/Bulk.html:99
+msgid "Add AdminCc"
+msgstr "新增管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: share/html/Ticket/Elements/Bookmark:90
+msgid "Add Bookmark"
+msgstr "加入書籤"
+
+#: share/html/Search/Bulk.html:95
+msgid "Add Cc"
+msgstr "新增副本收件人"
+
+#: share/html/Search/Elements/EditFormat:51
+msgid "Add Columns"
+msgstr "新增欄ä½"
+
+#: share/html/Search/Elements/PickCriteria:48
+msgid "Add Criteria"
+msgstr "新增æ¢ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Add Entry"
+msgstr "新增列"
+
+#: share/html/Search/Bulk.html:161 share/html/Ticket/Create.html:142 share/html/Ticket/ModifyAll.html:131 share/html/Ticket/Update.html:118
+msgid "Add More Files"
+msgstr "新增更多附件"
+
+#: NOT FOUND IN SOURCE
+msgid "Add Next State"
+msgstr "新增下一項關å¡"
+
+#: share/html/Search/Bulk.html:91
+msgid "Add Requestor"
+msgstr "新增申請人"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:48
+msgid "Add Value"
+msgstr "新增欄ä½å€¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip to this queue"
+msgstr "新增此表單的手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a Scrip which will apply to all queues"
+msgstr "新增é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a keyword selection to this queue"
+msgstr "新增此表單的關éµå­—"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a new a global scrip"
+msgstr "新增全域手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Add a scrip to this queue"
+msgstr "新增一é“手續到此表單"
+
+#: share/html/Admin/Global/Scrip.html:84
+msgid "Add a scrip which will apply to all queues"
+msgstr "新增一é“用於所有表單的手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Add additional criteria"
+msgstr "新增查詢æ¢ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Add and Search"
+msgstr "新增並開始查詢"
+
+#: share/html/Search/Bulk.html:131
+msgid "Add comments or replies to selected tickets"
+msgstr "新增評論或回覆到指定的申請單"
+
+#: share/html/Admin/Groups/Members.html:65 share/html/User/Groups/Members.html:62
+msgid "Add members"
+msgstr "新增æˆå“¡"
+
+#: share/html/Admin/Queues/People.html:89 share/html/Ticket/Elements/AddWatchers:51
+msgid "Add new watchers"
+msgstr "新增視察員"
+
+#: share/html/Search/Build.html:87
+msgid "Add these terms"
+msgstr "將這些æ¢ä»¶åŠ é€²æŸ¥è©¢å…§"
+
+#: share/html/Search/Build.html:88
+msgid "Add these terms and Search"
+msgstr "增加這些項目並æœå°‹"
+
+#: share/html/Search/Bulk.html:181
+msgid "Add values"
+msgstr "新增值"
+
+#: lib/RT/CustomField_Overlay.pm:114
+msgid "Add, delete and modify custom field values for objects"
+msgstr "新增ã€åˆªé™¤åŠä¿®æ”¹ç‰©ä»¶çš„自訂欄ä½å€¼"
+
+#: NOT FOUND IN SOURCE
+msgid "AddNextState"
+msgstr "新增下一項關å¡"
+
+#: lib/RT/Queue_Overlay.pm:848
+#. ($args{'Type'})
+msgid "Added principal as a %1 for this queue"
+msgstr "å–®ä½å·²æ–°å¢žç‚ºæ­¤è¡¨å–®çš„ %1"
+
+#: lib/RT/Ticket_Overlay.pm:1146
+#. ($self->loc($args{'Type'}))
+msgid "Added principal as a %1 for this ticket"
+msgstr "å–®ä½å·²æ–°å¢žç‚ºæ­¤ç”³è«‹å–®çš„ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Additional Hints"
+msgstr "é¡å¤–æ示"
+
+#: share/html/Elements/RT__Queue/ColumnMap:70
+msgid "Address"
+msgstr "地å€"
+
+#: share/html/Admin/Users/Modify.html:149 share/html/Elements/RT__User/ColumnMap:106 share/html/User/Prefs.html:139
+msgid "Address1"
+msgstr "ä½å€"
+
+#: share/html/Admin/Users/Modify.html:154 share/html/Elements/RT__User/ColumnMap:111 share/html/User/Prefs.html:143
+msgid "Address2"
+msgstr "ä½å€(續)"
+
+#: NOT FOUND IN SOURCE
+msgid "Adjust Blinking Rate"
+msgstr "調整閃çˆé€Ÿåº¦å¿«æ…¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin"
+msgstr "管ç†å“¡"
+
+#: share/html/Ticket/Create.html:102
+msgid "Admin Cc"
+msgstr "管ç†å“¡å‰¯æœ¬"
+
+#: etc/initialdata:270
+msgid "Admin Comment"
+msgstr "管ç†å“¡è©•è«–"
+
+#: etc/initialdata:249
+msgid "Admin Correspondence"
+msgstr "管ç†å“¡å›žè¦†"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin Rights"
+msgstr "管ç†å“¡æ¬Šé™"
+
+#: share/html/Admin/Queues/index.html:48 share/html/Admin/Queues/index.html:51
+msgid "Admin queues"
+msgstr "表單管ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin users"
+msgstr "使用者管ç†"
+
+#: share/html/Admin/Global/index.html:49 share/html/Admin/Global/index.html:51
+msgid "Admin/Global configuration"
+msgstr "管ç†/全域設定"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Groups"
+msgstr "管ç†/群組"
+
+#: NOT FOUND IN SOURCE
+msgid "Admin/Queue/Basics"
+msgstr "管ç†/表單/基本資訊"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminAddress"
+msgstr "管ç†å“¡ Email"
+
+#: lib/RT/System.pm:81
+msgid "AdminAllPersonalGroups"
+msgstr "管ç†æ‰€æœ‰ä»£ç†äººç¾¤çµ„"
+
+#: lib/RT/Tickets_Overlay.pm:144
+msgid "AdminCCGroup"
+msgstr "管ç†å“¡å‰¯æœ¬ç¾¤çµ„"
+
+#: lib/RT/ACE_Overlay.pm:102 lib/RT/Tickets_Overlay.pm:133 share/html/Elements/RT__Ticket/ColumnMap:183 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowPeople:64
+msgid "AdminCc"
+msgstr "管ç†å“¡å‰¯æœ¬"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCc.EmailAddress"
+msgstr "管ç†å“¡å‰¯æœ¬: é›»å­éƒµä»¶ä¿¡ç®±"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "AdminCcs"
+msgstr "管ç†å“¡å‰¯æœ¬"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminComment"
+msgstr "管ç†å“¡è©•è«–"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCorrespondence"
+msgstr "管ç†å“¡å›žè¦†"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "AdminCustomField"
+msgstr "管ç†è‡ªè¨‚欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminCustomFields"
+msgstr "管ç†è‡ªè¨‚欄ä½"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "AdminGroup"
+msgstr "管ç†ç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupDescription"
+msgstr "管ç†ç¾¤çµ„æè¿°"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "AdminGroupMembership"
+msgstr "管ç†ç¾¤çµ„æˆå“¡"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupName"
+msgstr "管ç†ç¾¤çµ„å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupPermission"
+msgstr "管ç†ç¾¤çµ„權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "AdminGroupStatus"
+msgstr "管ç†ç¾¤çµ„狀態"
+
+#: lib/RT/System.pm:83
+msgid "AdminOwnPersonalGroups"
+msgstr "管ç†ä»£ç†äººç¾¤çµ„"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "AdminQueue"
+msgstr "管ç†è¡¨å–®"
+
+#: lib/RT/System.pm:84
+msgid "AdminUsers"
+msgstr "管ç†ä½¿ç”¨è€…"
+
+#: NOT FOUND IN SOURCE
+msgid "Administrative"
+msgstr "行政類"
+
+#: share/html/Admin/Queues/People.html:71 share/html/Ticket/Elements/EditPeople:76
+msgid "Administrative Cc"
+msgstr "管ç†å“¡å‰¯æœ¬"
+
+#: lib/RT/Installer.pm:152
+msgid "Administrative password"
+msgstr "系統管管ç†å¯†ç¢¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Admins"
+msgstr "主管"
+
+#: share/html/Ticket/Elements/Tabs:277
+msgid "Advanced"
+msgstr "進階"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search"
+msgstr "進階查詢"
+
+#: NOT FOUND IN SOURCE
+msgid "Advanced Search Criteria"
+msgstr "進階查詢æ¢ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Age"
+msgstr "經歷時間"
+
+#: share/html/Search/Elements/PickCriteria:59
+msgid "Aggregator"
+msgstr "çµåˆæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Alias"
+msgstr "執行其他æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Alias for"
+msgstr "相當於"
+
+#: NOT FOUND IN SOURCE
+msgid "All"
+msgstr "全部"
+
+#: etc/initialdata:341 etc/upgrade/3.8.2/content:69
+msgid "All Approvals Passed"
+msgstr "完æˆå…¨éƒ¨ç°½æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "All Condition"
+msgstr "所有æ¢ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "All Custom Fields"
+msgstr "所有自訂欄ä½"
+
+#: share/html/Admin/Queues/index.html:82
+msgid "All Queues"
+msgstr "所有表單"
+
+#: NOT FOUND IN SOURCE
+msgid "All Users"
+msgstr "全體員工"
+
+#: NOT FOUND IN SOURCE
+msgid "All done! Now you can proceed to %1."
+msgstr "處ç†å®Œç•¢ï¼æ‚¨ç¾åœ¨å¯ä»¥ç¹¼çºŒé€²è¡Œ %1。"
+
+#: NOT FOUND IN SOURCE
+msgid "Allowance Request"
+msgstr "ç¦åˆ©è£œåŠ©ç”³è«‹"
+
+#: lib/RT/Attachment_Overlay.pm:649
+msgid "Already encrypted"
+msgstr "已加密"
+
+#: NOT FOUND IN SOURCE
+msgid "Always sends a message to the requestors independent of message sender"
+msgstr "無論寄件來æºç‚ºä½•ï¼Œä¸€å¾‹å¯„信給申請人"
+
+#: NOT FOUND IN SOURCE
+msgid "Amount"
+msgstr "數é¡"
+
+#: share/html/Search/Elements/EditQuery:60
+msgid "And/Or"
+msgstr "AND/OR"
+
+#: NOT FOUND IN SOURCE
+msgid "Any Condition"
+msgstr "ä»»æ„æ¢ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Applies To"
+msgstr "套用於"
+
+#: share/html/Admin/CustomFields/Modify.html:79 share/html/Admin/Elements/CustomFieldTabs:85
+msgid "Applies to"
+msgstr "套用於"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply"
+msgstr "套用"
+
+#: NOT FOUND IN SOURCE
+msgid "Apply Template"
+msgstr "引用範本"
+
+#: share/html/Search/Edit.html:70
+msgid "Apply your changes"
+msgstr "套用更動"
+
+#: share/html/Elements/Tabs:98
+msgid "Approval"
+msgstr "簽核"
+
+#: share/html/Approvals/Display.html:67 share/html/Approvals/Elements/ShowDependency:65 share/html/Approvals/index.html:88
+#. ($Ticket->Id, $Ticket->Subject)
+#. ($ticket->id, $msg)
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Approval #%1: %2"
+msgstr "簽核單 #%1:%2"
+
+#: share/html/Approvals/index.html:77
+#. ($ticket->Id)
+msgid "Approval #%1: Notes not recorded due to a system error"
+msgstr "簽核單 #%1:系統錯誤,記錄失敗"
+
+#: share/html/Approvals/index.html:75
+#. ($ticket->Id)
+msgid "Approval #%1: Notes recorded"
+msgstr "簽核單 #%1:記錄完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Details"
+msgstr "簽核細節"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Due"
+msgstr "簽核時é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Notes"
+msgstr "簽核æ„見"
+
+#: etc/initialdata:327 etc/upgrade/3.8.2/content:55
+msgid "Approval Passed"
+msgstr "完æˆæŸé …簽核"
+
+#: etc/initialdata:368 etc/upgrade/3.8.2/content:96
+msgid "Approval Ready for Owner"
+msgstr ""
+
+#: etc/initialdata:355 etc/upgrade/3.8.2/content:83
+msgid "Approval Rejected"
+msgstr "é§å›žæŸé …簽核"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Result"
+msgstr "簽核çµæžœ"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Status"
+msgstr "核准çµæžœ"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval Type"
+msgstr "簽核種類"
+
+#: NOT FOUND IN SOURCE
+msgid "Approval diagram"
+msgstr "簽核æµç¨‹"
+
+#: share/html/Approvals/Elements/Approve:71
+msgid "Approve"
+msgstr "核准"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver"
+msgstr "簽核人"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver Setting"
+msgstr "執行簽核人設定"
+
+#: NOT FOUND IN SOURCE
+msgid "Approver's notes: %1"
+msgstr "簽核備註:%1"
+
+#: lib/RT/Date.pm:91
+msgid "Apr"
+msgstr "四月"
+
+#: NOT FOUND IN SOURCE
+msgid "Apr."
+msgstr "04"
+
+#: NOT FOUND IN SOURCE
+msgid "April"
+msgstr "四月"
+
+#: NOT FOUND IN SOURCE
+msgid "Are you sure to delete checked items?"
+msgstr "您確定è¦åˆªé™¤ï¼Ÿ"
+
+#: share/html/Search/Elements/DisplayOptions:78
+msgid "Asc"
+msgstr "éžå¢ž"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Ascending"
+msgstr "éžå¢ž"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "Assign and remove custom fields"
+msgstr "指派åŠç§»é™¤è‡ªè¨‚欄ä½"
+
+#: lib/RT/Queue_Overlay.pm:98
+msgid "AssignCustomFields"
+msgstr "指派自訂欄ä½"
+
+#: share/html/Search/Bulk.html:160 share/html/SelfService/Update.html:90 share/html/Ticket/ModifyAll.html:129 share/html/Ticket/Update.html:118
+msgid "Attach"
+msgstr "附件"
+
+#: share/html/SelfService/Create.html:98 share/html/Ticket/Create.html:138
+msgid "Attach file"
+msgstr "附加檔案"
+
+#: share/html/Search/Bulk.html:150 share/html/SelfService/Update.html:78 share/html/Ticket/Create.html:126 share/html/Ticket/ModifyAll.html:118 share/html/Ticket/Update.html:108
+msgid "Attached file"
+msgstr "ç¾æœ‰é™„件"
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "Attachment"
+msgstr "附檔"
+
+#: share/html/Ticket/ShowEmailRecord.html:83 share/html/Ticket/ShowEmailRecord.html:85 share/html/Ticket/ShowEmailRecord.html:88
+#. ($Attachment)
+msgid "Attachment '%1' could not be loaded"
+msgstr "無法載入附件 '%1'"
+
+#: lib/RT/Transaction_Overlay.pm:518
+msgid "Attachment created"
+msgstr "附件新增完畢"
+
+#: lib/RT/Tickets_Overlay.pm:2146
+msgid "Attachment filename"
+msgstr "附件檔å"
+
+#: share/html/Ticket/Elements/ShowAttachments:49
+msgid "Attachments"
+msgstr "附件"
+
+#: lib/RT/Attachment_Overlay.pm:642
+msgid "Attachments encryption is disabled"
+msgstr "附件加密已å–消"
+
+#: lib/RT/Attributes_Overlay.pm:180
+msgid "Attribute Deleted"
+msgstr "已刪除該屬性"
+
+#: NOT FOUND IN SOURCE
+msgid "Attributes"
+msgstr "屬性"
+
+#: lib/RT/Date.pm:95
+msgid "Aug"
+msgstr "八月"
+
+#: NOT FOUND IN SOURCE
+msgid "Aug."
+msgstr "08"
+
+#: NOT FOUND IN SOURCE
+msgid "August"
+msgstr "八月"
+
+#: NOT FOUND IN SOURCE
+msgid "AuthSystem"
+msgstr "èªè­‰æ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoReject"
+msgstr "自動é§å›žè¡¨å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoResolve"
+msgstr "自動完æˆè¡¨å–®è™•ç†"
+
+#: etc/initialdata:196
+msgid "Autoreply"
+msgstr "自動回覆"
+
+#: etc/initialdata:27
+msgid "Autoreply To Requestors"
+msgstr "自動å°ç”³è«‹äººå›žè¦†"
+
+#: NOT FOUND IN SOURCE
+msgid "AutoreplyToRequestors"
+msgstr "自動å°ç”³è«‹äººå›žè¦†"
+
+#: share/html/Widgets/SelectionBox:193
+msgid "Available"
+msgstr "å¯ç”¨"
+
+#: NOT FOUND IN SOURCE
+msgid "Available Columns"
+msgstr "å¯ç”¨çš„欄ä½ï¼š"
+
+#: NOT FOUND IN SOURCE
+msgid "Available Rights:"
+msgstr "權é™é …目列表:"
+
+#: share/html/Ticket/Forward.html:73
+msgid "BCc"
+msgstr "密件副本"
+
+#: share/html/Elements/Submit:96 share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:73 share/html/Install/DatabaseDetails.html:89 share/html/Install/Global.html:66 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:64
+msgid "Back"
+msgstr "返回"
+
+#: NOT FOUND IN SOURCE
+msgid "Back to Homepage"
+msgstr "回到首é "
+
+#: NOT FOUND IN SOURCE
+msgid "Back to Previous"
+msgstr "回上é "
+
+#: NOT FOUND IN SOURCE
+msgid "Bad PGP Signature: %1\\n"
+msgstr "錯誤的 PGP 簽章:%1\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad attachment id. Couldn't find attachment '%1'\\n"
+msgstr "錯誤的附件編號。無法找到附件 '%1'\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Bad data in %1"
+msgstr "%1 的資料錯誤"
+
+#: lib/RT/SharedSetting.pm:145
+#. ($id)
+msgid "Bad privacy for attribute %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Bad transaction number for attachment. %1 should be %2\\n"
+msgstr "附件的處ç†è™Ÿç¢¼éŒ¯èª¤ã€‚%1 應為 %2\\n"
+
+#: share/html/Admin/Elements/CustomFieldTabs:67 share/html/Admin/Elements/GroupTabs:62 share/html/Admin/Elements/QueueTabs:62 share/html/Admin/Elements/UserTabs:60 share/html/Dashboards/Elements/Tabs:73 share/html/Ticket/Elements/Tabs:125 share/html/User/Elements/GroupTabs:61
+msgid "Basics"
+msgstr "基本資訊"
+
+#: NOT FOUND IN SOURCE
+msgid "Batch Approval"
+msgstr "批次簽核"
+
+#: NOT FOUND IN SOURCE
+msgid "Bcc"
+msgstr "密件副本"
+
+#: share/html/Admin/CustomFields/GroupRights.html:93 share/html/Admin/CustomFields/UserRights.html:74
+msgid "Be sure to save your changes"
+msgstr "請別忘了儲存修改。"
+
+#: NOT FOUND IN SOURCE
+msgid "Begin Approval"
+msgstr "開始簽核"
+
+#: NOT FOUND IN SOURCE
+msgid "Begin From "
+msgstr "起始日 "
+
+#: share/html/Elements/Logo:51
+msgid "Best Practical Solutions, LLC corporate logo"
+msgstr "Best Practical Solutions, LLC å…¬å¸è­˜åˆ¥åœ–案"
+
+#: NOT FOUND IN SOURCE
+msgid "Binary"
+msgstr "檔案"
+
+#: NOT FOUND IN SOURCE
+msgid "Birthday"
+msgstr "生日"
+
+#: etc/initialdata:192
+msgid "Blank"
+msgstr "空白範本"
+
+#: share/html/Dashboards/Queries.html:181
+msgid "Body"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:85
+msgid "Bold"
+msgstr "ç²—é«”"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "Bookmark"
+msgstr "書籤"
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable URL for this search"
+msgstr "將查詢çµæžœè½‰ç‚ºå¯æ”¾å…¥æ›¸ç±¤çš„網å€"
+
+#: NOT FOUND IN SOURCE
+msgid "Bookmarkable link"
+msgstr "å¯æ”¾å…¥æ›¸ç±¤çš„網å€"
+
+#: etc/initialdata:577 etc/upgrade/3.7.82/content:3
+msgid "Bookmarked Tickets"
+msgstr "書籤中的申請單"
+
+#: share/html/Ticket/Elements/ShowHistory:66 share/html/Ticket/Elements/ShowHistory:71
+msgid "Brief headers"
+msgstr "精簡標頭檔"
+
+#: share/html/Ticket/Elements/Tabs:314
+msgid "Bulk Update"
+msgstr "整批更新"
+
+#: NOT FOUND IN SOURCE
+msgid "Bulk ticket update"
+msgstr "整批更新申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Business Unit"
+msgstr "事業部"
+
+#: NOT FOUND IN SOURCE
+msgid "Business Unit:"
+msgstr "事業部:"
+
+#: share/html/Install/Elements/Wrapper:54
+msgid "Buy Support"
+msgstr "購買支æ´æœå‹™"
+
+#: share/html/Install/Global.html:56
+msgid "By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences."
+msgstr "RT 會使用你系統的時å€ä½œç‚ºé è¨­æ™‚å€ã€‚ 日期åŠæ™‚間的顯示將會以此作為全域的é è¨­å€¼ã€‚ 你的使用者å¯è¨­å®šå±¬æ–¼ä»–們自己的時å€ã€‚"
+
+#: lib/RT/Tickets_Overlay.pm:143
+msgid "CCGroup"
+msgstr "副本群組"
+
+#: lib/RT/Tickets_Overlay.pm:140
+msgid "CF"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Calendar"
+msgstr "行事曆"
+
+#: lib/RT/User_Overlay.pm:1547
+msgid "Can not modify system users"
+msgstr "無法更改系統使用者"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "Can this principal see this queue"
+msgstr "該單ä½æ˜¯å¦èƒ½æŸ¥é–±æ­¤è¡¨å–®"
+
+#: lib/RT/CustomField_Overlay.pm:408
+msgid "Can't add a custom field value without a name"
+msgstr "ä¸èƒ½æ–°å¢žæ²’有å稱的自訂欄ä½å€¼"
+
+#: share/html/Admin/CustomFields/Objects.html:88
+#. ($Class)
+msgid "Can't find a collection class for '%1'"
+msgstr "找ä¸åˆ°ã€Œ%1ã€çš„集åˆé¡žåˆ¥"
+
+#: share/html/Search/Elements/EditSearches:279
+msgid "Can't find a saved search to work with"
+msgstr "找ä¸åˆ°é å­˜æŸ¥è©¢"
+
+#: lib/RT/Link_Overlay.pm:150
+msgid "Can't link a ticket to itself"
+msgstr "申請單ä¸èƒ½éˆçµè‡ªå·±ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Can't merge into a merged ticket. You should never get this error"
+msgstr "ä¸èƒ½æ•´åˆé€²å·²æ•´åˆéŽçš„申請單。這個錯誤ä¸è©²ç™¼ç”Ÿã€‚"
+
+#: share/html/Widgets/SavedSearch:110
+#. (loc($self->{SearchType}))
+msgid "Can't save %1"
+msgstr "無法儲存 %1"
+
+#: share/html/Search/Elements/EditSearches:283
+msgid "Can't save this search"
+msgstr "無法儲存此項查詢"
+
+#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1366
+msgid "Can't specifiy both base and target"
+msgstr "ä¸èƒ½åŒæ™‚指定起始申請單與目的申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Cancel"
+msgstr "å–消"
+
+#: share/html/Ticket/Create.html:330
+msgid "Cannot create tickets in a disabled queue."
+msgstr "無法在已關閉的 queue 中建立新 ticket."
+
+#: lib/RT/Interface/Web.pm:383
+#. ($msg)
+msgid "Cannot create user: %1"
+msgstr "無法新增使用者:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Cannot login: Your system clock differs from server's by %1 seconds!"
+msgstr "您的系統時é˜å’Œä¼ºæœå™¨ç›¸å·® %1 秒,無法登入ï¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Card No."
+msgstr "å¡è™Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "Categories"
+msgstr "分類管ç†"
+
+#: share/html/Admin/CustomFields/Modify.html:111
+msgid "Categories are based on"
+msgstr ""
+
+#: share/html/Admin/Elements/AddCustomFieldValue:57 share/html/Admin/Elements/EditCustomFieldValues:61
+msgid "Category"
+msgstr "分類"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:137
+msgid "Category unset"
+msgstr "類別尚未設定"
+
+#: lib/RT/ACE_Overlay.pm:101 lib/RT/Tickets_Overlay.pm:132 share/html/Admin/Queues/People.html:67 share/html/Elements/RT__Ticket/ColumnMap:178 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:75 share/html/Ticket/Create.html:93 share/html/Ticket/Elements/EditPeople:73 share/html/Ticket/Elements/ShowPeople:60 share/html/Ticket/Forward.html:70
+msgid "Cc"
+msgstr "副本"
+
+#: NOT FOUND IN SOURCE
+msgid "Cc Type"
+msgstr "副本類別"
+
+#: NOT FOUND IN SOURCE
+msgid "Cc.EmailAddress"
+msgstr "副本: é›»å­éƒµä»¶ä¿¡ç®±"
+
+#: lib/RT/Graph/Tickets.pm:158
+msgid "Ccs"
+msgstr "副本"
+
+#: NOT FOUND IN SOURCE
+msgid "Chairperson's Office"
+msgstr "董事長室"
+
+#: share/html/Install/index.html:64 share/html/Search/Results.html:80
+msgid "Change"
+msgstr "變更"
+
+#: NOT FOUND IN SOURCE
+msgid "Change Ticket"
+msgstr "修改申請單"
+
+#: share/html/SelfService/Prefs.html:54
+msgid "Change password"
+msgstr "更改密碼"
+
+#: NOT FOUND IN SOURCE
+msgid "ChangeOwnerUI"
+msgstr "å¯å¦é¸æ“‡è¡¨å–®æ‰¿è¾¦äºº"
+
+#: share/html/Elements/Submit:90
+msgid "Check All"
+msgstr "全部é¸å–"
+
+#: share/html/Install/DatabaseDetails.html:88
+msgid "Check Database Connectivity"
+msgstr "檢查資料庫連線"
+
+#: share/html/Install/Basics.html:63 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:70
+msgid "Check Database Credentials"
+msgstr ""
+
+#: share/html/Search/Bulk.html:152 share/html/SelfService/Update.html:81 share/html/Ticket/Create.html:129 share/html/Ticket/ModifyAll.html:120 share/html/Ticket/Update.html:110
+msgid "Check box to delete"
+msgstr "é¸æ“‡æ¬²åˆªé™¤çš„é …ç›®"
+
+#: share/html/Admin/Elements/SelectRights:66
+msgid "Check box to revoke right"
+msgstr "é¸æ“‡æ¬²æ’¤æ¶ˆçš„權利"
+
+#: NOT FOUND IN SOURCE
+msgid "Check your database credentials"
+msgstr "檢查您的資料庫權é™"
+
+#: share/html/Elements/EditLinks:149 share/html/Elements/EditLinks:82 share/html/Elements/ShowLinks:94 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:231 share/html/Ticket/Elements/BulkLinks:66
+msgid "Children"
+msgstr "å­ç”³è«‹å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "Chinese Name"
+msgstr "中文姓å"
+
+#: NOT FOUND IN SOURCE
+msgid "Chinese/English"
+msgstr "中英文"
+
+#: share/html/Install/DatabaseDetails.html:89 share/html/Install/DatabaseType.html:48
+msgid "Choose Database Engine"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a database engine"
+msgstr "é¸æ“‡è³‡æ–™åº«å¼•æ“Ž"
+
+#: NOT FOUND IN SOURCE
+msgid "Choose a date"
+msgstr "é¸æ“‡æ—¥æœŸ"
+
+#: share/html/Admin/Users/Modify.html:159 share/html/Elements/RT__User/ColumnMap:116 share/html/User/Prefs.html:147
+msgid "City"
+msgstr "所在城市"
+
+#: NOT FOUND IN SOURCE
+msgid "ClassicUI"
+msgstr "傳統介é¢"
+
+#: share/html/Tools/MyDay.html:73 share/html/Widgets/SelectionBox:221
+msgid "Clear"
+msgstr "清除"
+
+#: share/html/Elements/Submit:92
+msgid "Clear All"
+msgstr "全部清除"
+
+#: share/html/Install/Finish.html:52
+msgid "Click \"Finish Installation\" below to complete this wizard."
+msgstr "é»žé¸ \"完æˆå®‰è£\" çµæŸå®‰è£ç²¾éˆ"
+
+#: share/html/Install/Initialize.html:54
+msgid "Click \"Initialize Database\" to create RT's database and insert initial metadata. This may take a few moments"
+msgstr "é»žé¸ \"åˆå§‹åŒ–資料庫\" 建立 RT 的資料庫以åŠåˆå§‹åŒ–資料。這會需è¦ä¸€é»žæ™‚間。"
+
+#: share/html/Helpers/CalPopup.html:53
+msgid "Close window"
+msgstr "關閉視窗"
+
+#: share/html/Ticket/Elements/ShowDates:75
+msgid "Closed"
+msgstr "已解決"
+
+#: NOT FOUND IN SOURCE
+msgid "Closed Tickets"
+msgstr "已解決的申請單"
+
+#: share/html/SelfService/Closed.html:48 share/html/SelfService/Elements/Tabs:81
+msgid "Closed tickets"
+msgstr "已解決的申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Code"
+msgstr "執行程å¼ç¢¼"
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter multiple values"
+msgstr "下拉文字框:é¸æ“‡æˆ–éµå…¥å¤šé‡é …ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter one value"
+msgstr "下拉文字框:é¸æ“‡æˆ–éµå…¥å–®ä¸€é …ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:92
+msgid "Combobox: Select or enter up to %1 values"
+msgstr "下拉文字框:é¸æ“‡æˆ–éµå…¥æœ€å¤š %1 個項目"
+
+#: NOT FOUND IN SOURCE
+msgid "Command not understood!\\n"
+msgstr "指令無法辨識ï¼\\n"
+
+#: share/html/Search/Elements/EditFormat:72 share/html/Ticket/Elements/ShowTransaction:195 share/html/Ticket/Elements/Tabs:223
+msgid "Comment"
+msgstr "è©•è«–"
+
+#: share/html/Admin/Queues/Modify.html:77
+msgid "Comment Address"
+msgstr "è©•è«–é›»å­éƒµä»¶åœ°å€"
+
+#: lib/RT/Installer.pm:167
+msgid "Comment address"
+msgstr "è©•è«–ä½å€"
+
+#: NOT FOUND IN SOURCE
+msgid "Comment not recorded"
+msgstr "評論未被紀錄"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "Comment on tickets"
+msgstr "å°ç”³è«‹å–®æ出評論"
+
+#: share/html/Elements/RT__Queue/ColumnMap:89
+msgid "CommentAddress"
+msgstr "è©•è«–ä½å€"
+
+#: lib/RT/Queue_Overlay.pm:113
+msgid "CommentOnTicket"
+msgstr "評論申請單"
+
+#: share/html/Tools/MyDay.html:64
+msgid "Comments"
+msgstr "è©•è«–"
+
+#: share/html/Ticket/ModifyAll.html:94 share/html/Ticket/Update.html:94
+msgid "Comments (Not sent to requestors)"
+msgstr "è©•è«–(ä¸é€çµ¦ç”³è«‹äºº)"
+
+#: share/html/Search/Bulk.html:135
+msgid "Comments (not sent to requestors)"
+msgstr "è©•è«–(ä¸é€çµ¦ç”³è«‹äºº)"
+
+#: NOT FOUND IN SOURCE
+msgid "Comments about %1"
+msgstr "å° %1 çš„è©•è«–"
+
+#: share/html/Admin/Users/Modify.html:229 share/html/Ticket/Elements/ShowRequestor:82
+msgid "Comments about this user"
+msgstr "使用者æè¿°"
+
+#: lib/RT/Transaction_Overlay.pm:691
+msgid "Comments added"
+msgstr "新增評論完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "Commit"
+msgstr "確èª"
+
+#: lib/RT/Action.pm:173 lib/RT/Rule.pm:65
+msgid "Commit Stubbed"
+msgstr "消除更動完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "Company Name"
+msgstr "å…¬å¸å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "CompanySpecific"
+msgstr "å„å…¬å¸ç¨ç«‹é¡¯ç¤º"
+
+#: NOT FOUND IN SOURCE
+msgid "Compile Restrictions"
+msgstr "設定查詢æ¢ä»¶"
+
+#: share/html/Admin/Elements/EditScrip:62 share/html/Elements/RT__Scrip/ColumnMap:68
+msgid "Condition"
+msgstr "æ¢ä»¶"
+
+#: lib/RT/Scrip_Overlay.pm:152
+#. ($args{'ScripCondition'})
+msgid "Condition '%1' not found"
+msgstr "找ä¸åˆ°æ¢ä»¶ '%1'"
+
+#: lib/RT/Scrip_Overlay.pm:148
+msgid "Condition is mandatory argument"
+msgstr "æ¢ä»¶æ˜¯å¿…填欄ä½"
+
+#: bin/rt-crontool:210
+msgid "Condition matches..."
+msgstr "符åˆæ¢ä»¶..."
+
+#: NOT FOUND IN SOURCE
+msgid "Condition not found"
+msgstr "未找到符åˆçš„ç¾æ³"
+
+#: share/html/Elements/RT__Scrip/ColumnMap:80
+msgid "Condition, Action and Template"
+msgstr "æ¢ä»¶, 動作, 和樣版"
+
+#: share/html/Install/index.html:106
+#. ($file)
+msgid "Config file %1 is locked"
+msgstr "設定檔 %1 已被鎖定"
+
+#: share/html/Elements/Tabs:84
+msgid "Configuration"
+msgstr "設定"
+
+#: share/html/SelfService/Prefs.html:56
+msgid "Confirm"
+msgstr "確èªå¯†ç¢¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Confirm Password"
+msgstr "密碼確èª"
+
+#: NOT FOUND IN SOURCE
+msgid "Confirm Submit"
+msgstr "確定é€å‡º"
+
+#: share/html/Install/DatabaseDetails.html:141
+msgid "Connection succeeded"
+msgstr "連線æˆåŠŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Contact System Administrator"
+msgstr "連絡系統管ç†å“¡"
+
+#: NOT FOUND IN SOURCE
+msgid "ContactInfoSystem"
+msgstr "連絡資訊系統"
+
+#: NOT FOUND IN SOURCE
+msgid "Contacted date '%1' could not be parsed"
+msgstr "無法解讀è¯çµ¡æ—¥æœŸ '%1'"
+
+#: lib/RT/Tickets_Overlay.pm:126 share/html/Admin/Elements/ModifyTemplate:67 share/html/Elements/QuickCreate:70 share/html/Elements/SelectAttachmentField:50 share/html/Ticket/ModifyAll.html:135
+msgid "Content"
+msgstr "內容"
+
+#: share/html/Elements/SelectAttachmentField:51
+msgid "Content-Type"
+msgstr "內容類型"
+
+#: lib/RT/Tickets_Overlay.pm:127
+msgid "ContentType"
+msgstr "內容類別"
+
+#: NOT FOUND IN SOURCE
+msgid "Coould not create group"
+msgstr "無法新增群組"
+
+#: NOT FOUND IN SOURCE
+msgid "Copy"
+msgstr "複製"
+
+#: NOT FOUND IN SOURCE
+msgid "Copy Field From:"
+msgstr "欲複製欄ä½ï¼š"
+
+#: lib/RT/Installer.pm:175
+msgid "Correspond address"
+msgstr "回覆地å€"
+
+#: share/html/Elements/RT__Queue/ColumnMap:84
+msgid "CorrespondAddress"
+msgstr ""
+
+#: etc/initialdata:261
+msgid "Correspondence"
+msgstr "回覆"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence Address"
+msgstr "申請單回覆地å€"
+
+#: lib/RT/Transaction_Overlay.pm:687
+msgid "Correspondence added"
+msgstr "新增申請單回覆"
+
+#: NOT FOUND IN SOURCE
+msgid "Correspondence not recorded"
+msgstr "未紀錄申請單回覆"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè¨‚欄ä½çš„值。 "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value for ticket. %1 "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè¨‚欄ä½çš„值。%1 "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè¨‚欄ä½çš„值。 "
+
+#: NOT FOUND IN SOURCE
+msgid "Could not add new custom field value. %1 "
+msgstr "ä¸èƒ½æ–°å¢žè‡ªè¨‚欄ä½çš„值。%1 "
+
+#: lib/RT/Record.pm:1691 lib/RT/Record.pm:1737
+#. ($value_msg)
+#. ($msg)
+msgid "Could not add new custom field value: %1"
+msgstr "無法創建新的自定欄ä½å€¼: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not change owner. "
+msgstr "ä¸èƒ½æ›´æ”¹æ‰¿è¾¦äººã€‚ "
+
+#: lib/RT/Ticket_Overlay.pm:2803 lib/RT/Ticket_Overlay.pm:2811 lib/RT/Ticket_Overlay.pm:2828
+#. ($del_msg)
+#. ($add_msg)
+#. ($msg)
+msgid "Could not change owner: %1"
+msgstr "無法更改承辦人: %1"
+
+#: share/html/Admin/CustomFields/Modify.html:163
+#. ($msg)
+msgid "Could not create CustomField"
+msgstr "無法新增自訂欄ä½"
+
+#: share/html/Admin/Elements/EditCustomField:115
+#. ($msg)
+msgid "Could not create CustomField: %1"
+msgstr "無法新增自訂欄ä½ï¼š%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create Scrip"
+msgstr "無法建立訊æ¯é€šçŸ¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create Template"
+msgstr "無法建立通知範本"
+
+#: lib/RT/Group_Overlay.pm:451 lib/RT/Group_Overlay.pm:458 share/html/User/Groups/Modify.html:100
+msgid "Could not create group"
+msgstr "無法新增群組"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create item"
+msgstr "無法新增項目"
+
+#: share/html/Admin/Global/Template.html:95 share/html/Admin/Queues/Template.html:96
+#. ($msg)
+msgid "Could not create template: %1"
+msgstr "無法新增範本:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create ticket in disabled queue \"%1\""
+msgstr "無法在已關閉的 queue 裡建立新 ticket \"%1\""
+
+#: lib/RT/Ticket_Overlay.pm:288 lib/RT/Ticket_Overlay.pm:819
+msgid "Could not create ticket. Queue not set"
+msgstr "無法新增申請單。尚未指定表單。"
+
+#: lib/RT/User_Overlay.pm:189 lib/RT/User_Overlay.pm:203 lib/RT/User_Overlay.pm:212 lib/RT/User_Overlay.pm:221 lib/RT/User_Overlay.pm:230 lib/RT/User_Overlay.pm:244 lib/RT/User_Overlay.pm:254 lib/RT/User_Overlay.pm:403
+msgid "Could not create user"
+msgstr "無法新增使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create watcher for requestor"
+msgstr "無法為申請人新增視察員"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not create workflow: %1"
+msgstr "無法新增æµç¨‹ï¼š%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find a ticket with id %1"
+msgstr "找ä¸åˆ°ç·¨è™Ÿ %1 的申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find group %1."
+msgstr "找ä¸åˆ°ç¾¤çµ„ %1。"
+
+#: lib/RT/Queue_Overlay.pm:827 lib/RT/Ticket_Overlay.pm:1114
+msgid "Could not find or create that user"
+msgstr "找ä¸åˆ°æˆ–無法新增該å使用者"
+
+#: lib/RT/Queue_Overlay.pm:902 lib/RT/Ticket_Overlay.pm:1195
+msgid "Could not find that principal"
+msgstr "找ä¸åˆ°è©²å–®ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not find user %1."
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… %1。"
+
+#: lib/RT/SharedSetting.pm:225
+#. ($self->ObjectName)
+msgid "Could not load %1 attribute"
+msgstr "無法載入%1屬性"
+
+#: share/html/Admin/CustomFields/Objects.html:71
+msgid "Could not load CustomField %1"
+msgstr "ç„¡æ³•è¼‰å…¥æ¬„ä½ %1"
+
+#: share/html/Admin/Groups/Members.html:117 share/html/User/Groups/Members.html:113 share/html/User/Groups/Modify.html:105
+msgid "Could not load group"
+msgstr "無法載入群組"
+
+#: lib/RT/SharedSetting.pm:121
+#. ($privacy)
+msgid "Could not load object for %1"
+msgstr "無法為 %1 載入物件"
+
+#: NOT FOUND IN SOURCE
+msgid "Could not load search attribute"
+msgstr "無法載入查詢屬性"
+
+#: lib/RT/Queue_Overlay.pm:846
+#. ($args{'Type'})
+msgid "Could not make that principal a %1 for this queue"
+msgstr "無法將該單ä½è¨­ç‚ºæ­¤è¡¨å–®çš„ %1。"
+
+#: lib/RT/Ticket_Overlay.pm:1135
+#. ($self->loc($args{'Type'}))
+msgid "Could not make that principal a %1 for this ticket"
+msgstr "無法將該單ä½è¨­ç‚ºæ­¤ç”³è«‹å–®çš„ %1。"
+
+#: lib/RT/Queue_Overlay.pm:962
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this queue"
+msgstr "ç„¡æ³•å°‡å–®ä½ %1 從表單移除。"
+
+#: lib/RT/Ticket_Overlay.pm:1262
+#. ($args{'Type'})
+msgid "Could not remove that principal as a %1 for this ticket"
+msgstr "ç„¡æ³•å°‡å–®ä½ %1 從申請單移除。"
+
+#: lib/RT/User_Overlay.pm:129
+msgid "Could not set user info"
+msgstr "無法設定使用者資訊"
+
+#: lib/RT/Transaction_Overlay.pm:157
+msgid "Couldn't add attachment"
+msgstr "無法新增附件"
+
+#: lib/RT/Group_Overlay.pm:1019
+msgid "Couldn't add member to group"
+msgstr "無法新增æˆå“¡è‡³ç¾¤çµ„"
+
+#: lib/RT/Record.pm:1747 lib/RT/Record.pm:1799
+#. ($msg)
+#. ($Msg)
+msgid "Couldn't create a transaction: %1"
+msgstr "無法新增更動報告"
+
+#: lib/RT/CustomField_Overlay.pm:1032
+msgid "Couldn't create record"
+msgstr "無法建立紀錄"
+
+#: share/html/Dashboards/Modify.html:154
+#. ($id, $msg)
+msgid "Couldn't delete dashboard %1: %2"
+msgstr "無法刪除控制é¢æ¿ %1: %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't figure out what to do from gpg's reply\\n"
+msgstr "無法從 gpg 回函辨識出該採å–的行動\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find group\\n"
+msgstr "找ä¸åˆ°ç¾¤çµ„\\n"
+
+#: lib/RT/Record.pm:927
+msgid "Couldn't find row"
+msgstr "找ä¸åˆ°æ­¤åˆ—資料"
+
+#: bin/rt-crontool:181
+msgid "Couldn't find suitable transaction, skipping"
+msgstr "找ä¸åˆ°åˆé©çš„ transaction, è·³éŽ"
+
+#: lib/RT/Group_Overlay.pm:993
+msgid "Couldn't find that principal"
+msgstr "找ä¸åˆ°è©²å–®ä½"
+
+#: lib/RT/CustomField_Overlay.pm:438
+msgid "Couldn't find that value"
+msgstr "找ä¸åˆ°è©²å€¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find that watcher"
+msgstr "找ä¸åˆ°è©²è¦–察員"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't find user\\n"
+msgstr "找ä¸åˆ°ä½¿ç”¨è€…\\n"
+
+#: lib/RT/CurrentUser.pm:164
+#. ($self->Id)
+msgid "Couldn't load %1 from the users database.\\n"
+msgstr "無法從使用者資料庫載入 %1。\\n"
+
+#: share/html/Admin/CustomFields/UserRights.html:92
+#. ($id)
+msgid "Couldn't load Class %1"
+msgstr "無法載入類別 %1"
+
+#: lib/RT/CustomFieldValue_Overlay.pm:80
+#. ($cf_id)
+msgid "Couldn't load Custom Field #%1"
+msgstr "ç„¡æ³•è¼‰å…¥è‡ªè¨‚æ¬„ä½ #%1"
+
+#: share/html/Admin/CustomFields/GroupRights.html:104
+#. ($id)
+msgid "Couldn't load CustomField %1"
+msgstr "ç„¡æ³•è¼‰å…¥è‡ªè¨‚æ¬„ä½ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load KeywordSelects."
+msgstr "無法載入 KeywordSelects。"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load RT config file '%1' %2"
+msgstr "無法載入 RT 設定檔 '%1' %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load Scrips."
+msgstr "無法載入手續。"
+
+#: lib/RT/Ticket_Overlay.pm:1723
+#. ($self->Id)
+msgid "Couldn't load copy of ticket #%1."
+msgstr "無法載入申請單 %1 的複本。"
+
+#: share/html/Dashboards/Queries.html:85 share/html/Dashboards/Render.html:100
+#. ($id, $msg)
+msgid "Couldn't load dashboard %1: %2"
+msgstr "無法載入控制é¢æ¿ %1: %2"
+
+#: share/html/Dashboards/Subscription.html:210
+#. ($DashboardId, $msg)
+msgid "Couldn't load dashboard %1: %2."
+msgstr "無法載入控制é¢æ¿ %1: %2"
+
+#: share/html/Admin/Users/Memberships.html:105 share/html/Admin/Users/Memberships.html:115
+#. ($gid)
+msgid "Couldn't load group #%1"
+msgstr "無法載入群組 #%1"
+
+#: share/html/Admin/Groups/GroupRights.html:111 share/html/Admin/Groups/UserRights.html:94
+#. ($id)
+msgid "Couldn't load group %1"
+msgstr "無法載入手續 %1"
+
+#: lib/RT/Link_Overlay.pm:193 lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:229
+msgid "Couldn't load link"
+msgstr "無法載入éˆçµã€‚"
+
+#: share/html/Admin/Elements/ObjectCustomFields:85 share/html/Admin/Queues/CustomFields.html:61 share/html/Admin/Users/CustomFields.html:61
+#. ($id)
+msgid "Couldn't load object %1"
+msgstr "無法載入物件 %1"
+
+#: lib/RT/Ticket_Overlay.pm:440
+#. ($msg)
+msgid "Couldn't load or create user: %1"
+msgstr "無法載入或建立使用者: %1"
+
+#: share/html/Admin/Queues/People.html:146
+#. ($id)
+msgid "Couldn't load queue"
+msgstr "無法載入表單"
+
+#: share/html/Admin/Elements/EditScrips:86
+#. ($id)
+msgid "Couldn't load queue #%1"
+msgstr "無法載入佇列 #%1"
+
+#: share/html/Admin/Queues/GroupRights.html:124 share/html/Admin/Queues/UserRights.html:93
+#. ($id)
+msgid "Couldn't load queue %1"
+msgstr "無法載入表單 %1"
+
+#: share/html/Admin/Queues/Modify.html:160
+#. ($Name)
+msgid "Couldn't load queue '%1'"
+msgstr "無法載入佇列 '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load scrip"
+msgstr "無法載入手續"
+
+#: share/html/Admin/Elements/EditScrip:139 share/html/Admin/Elements/EditScrip:183
+#. ($id)
+msgid "Couldn't load scrip #%1"
+msgstr "無法載入手續 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load template"
+msgstr "無法載入範本"
+
+#: share/html/Admin/Elements/EditTemplates:108
+#. ($id)
+msgid "Couldn't load template #%1"
+msgstr "ç„¡æ³•è¼‰å…¥æ¨£æ¿ #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Couldn't load that user (%1)"
+msgstr "無法載入該å使用者(%1)"
+
+#: lib/RT/Action/CreateTickets.pm:454 share/html/SelfService/Display.html:157
+#. ($id)
+msgid "Couldn't load ticket '%1'"
+msgstr "無法載入申請單 '%1'"
+
+#: share/html/Ticket/Forward.html:92 share/html/Ticket/GnuPG.html:75
+#. ($QuoteTransaction)
+#. ($id)
+msgid "Couldn't load transaction #%1"
+msgstr "無法載入 transaction #%1"
+
+#: share/html/User/Prefs.html:222
+msgid "Couldn't load user"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:92 share/html/User/Prefs.html:218
+#. ($id)
+msgid "Couldn't load user #%1"
+msgstr "無法載入使用者 #%1"
+
+#: share/html/User/Prefs.html:216
+#. ($id, $Name)
+msgid "Couldn't load user #%1 or user '%2'"
+msgstr ""
+
+#: share/html/User/Prefs.html:220
+#. ($Name)
+msgid "Couldn't load user '%1'"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:1049
+#. ($args{'Email'})
+msgid "Couldn't parse address from '%1' string"
+msgstr "無法從字串 '%1' 解æžå‡ºä½å€"
+
+#: lib/RT/Attachment_Overlay.pm:725
+#. ($msg)
+msgid "Couldn't replace content with decrypted data: %1"
+msgstr "無法以解密éŽçš„資料å–代內容: %1"
+
+#: lib/RT/Attachment_Overlay.pm:690
+#. ($msg)
+msgid "Couldn't replace content with encrypted data: %1"
+msgstr "無法以加密éŽçš„資料å–代內容: %1"
+
+#: lib/RT/Ticket_Overlay.pm:2390
+#. ($args{'URI'})
+msgid "Couldn't resolve '%1' into a URI."
+msgstr "無法將「%1ã€è§£è®€ç‚ºç¶²å€"
+
+#: lib/RT/Link_Overlay.pm:100
+#. ($args{'Base'})
+msgid "Couldn't resolve base '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Link_Overlay.pm:115
+#. ($args{'Target'})
+msgid "Couldn't resolve target '%1' into a URI."
+msgstr ""
+
+#: lib/RT/Interface/Email.pm:614 lib/RT/Interface/Email.pm:676
+msgid "Couldn't send email"
+msgstr "無法寄出電å­éƒµä»¶"
+
+#: lib/RT/Ticket_Overlay.pm:545
+#. ($type, $msg)
+msgid "Couldn't set %1 watcher: %2"
+msgstr "無法設定%1視察員: %2"
+
+#: lib/RT/User_Overlay.pm:1698
+msgid "Couldn't set private key"
+msgstr "無法設定ç§é‘°"
+
+#: lib/RT/User_Overlay.pm:1682
+msgid "Couldn't unset private key"
+msgstr "無法解除設定ç§é‘°"
+
+#: share/html/Admin/Users/Modify.html:176 share/html/Elements/RT__User/ColumnMap:131 share/html/User/Prefs.html:159
+msgid "Country"
+msgstr "國家"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/CreateUserCalled:49 share/html/Admin/Elements/CustomFieldTabs:95 share/html/Admin/Elements/EditCustomField:86 share/html/Admin/Elements/EditScrip:146 share/html/Admin/Elements/GroupTabs:79 share/html/Admin/Elements/QueueTabs:100 share/html/Admin/Elements/UserTabs:86 share/html/Admin/Global/Template.html:89 share/html/Admin/Groups/Modify.html:95 share/html/Admin/Queues/Modify.html:134 share/html/Admin/Queues/Template.html:90 share/html/Admin/Users/Modify.html:244 share/html/Dashboards/Modify.html:76 share/html/Elements/QuickCreate:73 share/html/Elements/ShowLinks:108 share/html/Elements/ShowLinks:50 share/html/Elements/ShowLinks:80 share/html/Elements/ShowLinks:90 share/html/Elements/ShowLinks:94 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:167 share/html/Ticket/Create.html:244
+msgid "Create"
+msgstr "新增"
+
+#: NOT FOUND IN SOURCE
+msgid "Create Subgroup:"
+msgstr "新增å­ç¾¤çµ„:"
+
+#: etc/initialdata:90
+msgid "Create Tickets"
+msgstr "新增申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Create User:"
+msgstr "新增æˆå“¡ï¼š"
+
+#: share/html/Admin/CustomFields/Modify.html:147 share/html/Admin/Elements/EditCustomField:98
+msgid "Create a CustomField"
+msgstr "新增自訂欄ä½"
+
+#: share/html/Admin/Queues/CustomField.html:71
+#. ($QueueObj->Name())
+msgid "Create a CustomField for queue %1"
+msgstr "為 %1 表單新增自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a CustomField that applies to all queues"
+msgstr "為 %1 表單新增自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new Custom Field"
+msgstr "新增自訂欄ä½"
+
+#: share/html/Dashboards/Modify.html:102 share/html/Dashboards/Modify.html:133
+msgid "Create a new dashboard"
+msgstr "建立新的控制é¢æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global Scrip"
+msgstr "新增全域手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new global scrip"
+msgstr "新增全域手續"
+
+#: share/html/Admin/Groups/Modify.html:109 share/html/Admin/Groups/Modify.html:135
+msgid "Create a new group"
+msgstr "新增群組"
+
+#: share/html/User/Groups/Modify.html:115 share/html/User/Groups/Modify.html:90
+msgid "Create a new personal group"
+msgstr "新增代ç†äººç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new queue"
+msgstr "新增表單"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new scrip"
+msgstr "新增手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new template"
+msgstr "新增範本"
+
+#: share/html/Ticket/Create.html:49 share/html/Ticket/Create.html:53 share/html/Ticket/Create.html:64
+msgid "Create a new ticket"
+msgstr "新增申請單"
+
+#: share/html/Admin/Users/Modify.html:260 share/html/Admin/Users/Modify.html:324
+msgid "Create a new user"
+msgstr "新增使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a new workflow"
+msgstr "新增æµç¨‹"
+
+#: share/html/Admin/Queues/Modify.html:151
+msgid "Create a queue"
+msgstr "新增表單"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a queue called"
+msgstr "新增表單å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a request"
+msgstr "æ出申請"
+
+#: share/html/Admin/Queues/Scrip.html:90
+#. ($QueueObj->Name)
+msgid "Create a scrip for queue %1"
+msgstr "為 %1 表單新增手續"
+
+#: share/html/Admin/Global/Template.html:87 share/html/Admin/Queues/Template.html:88
+msgid "Create a template"
+msgstr "新增範本"
+
+#: share/html/SelfService/Create.html:48 share/html/SelfService/CreateTicketInQueue.html:48
+msgid "Create a ticket"
+msgstr "æ出申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Create a workflow"
+msgstr "新增æµç¨‹"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "Create dashboards for this group"
+msgstr "建立此群組的控制é¢æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1 / %2 / %3 "
+msgstr "新增失敗:%1 / %2 / %3 "
+
+#: NOT FOUND IN SOURCE
+msgid "Create failed: %1/%2/%3"
+msgstr "新增失敗:%1/%2/%3"
+
+#: NOT FOUND IN SOURCE
+msgid "Create new item"
+msgstr "建立新項目"
+
+#: etc/initialdata:92
+msgid "Create new tickets based on this scrip's template"
+msgstr "ä¾æ“šæ­¤é …手續內的模版,新增申請單"
+
+#: lib/RT/Dashboard.pm:86
+msgid "Create personal dashboards"
+msgstr "建立個人的控制é¢æ¿"
+
+#: lib/RT/Dashboard.pm:81
+msgid "Create system dashboards"
+msgstr "建立系統控制é¢æ¿"
+
+#: share/html/SelfService/Create.html:113
+msgid "Create ticket"
+msgstr "新增申請單"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "Create tickets in this queue"
+msgstr "在此表單中新增申請單"
+
+#: share/html/Tools/index.html:65
+msgid "Create tickets offline"
+msgstr "離線建立申請單"
+
+#: lib/RT/CustomField_Overlay.pm:113
+msgid "Create, delete and modify custom fields"
+msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹è‡ªè¨‚欄ä½"
+
+#: lib/RT/Queue_Overlay.pm:92
+msgid "Create, delete and modify queues"
+msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹è¡¨å–®"
+
+#: lib/RT/System.pm:81
+msgid "Create, delete and modify the members of any user's personal groups"
+msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä»»ä½•ä½¿ç”¨è€…的代ç†äººç¾¤çµ„"
+
+#: lib/RT/System.pm:83
+msgid "Create, delete and modify the members of personal groups"
+msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä»£ç†äººç¾¤çµ„"
+
+#: lib/RT/System.pm:84
+msgid "Create, delete and modify users"
+msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä½¿ç”¨è€…"
+
+#: lib/RT/Dashboard.pm:81
+msgid "CreateDashboard"
+msgstr "建立控制é¢æ¿"
+
+#: lib/RT/Group_Overlay.pm:98
+msgid "CreateGroupDashboard"
+msgstr "建立群組控制é¢æ¿"
+
+#: lib/RT/Dashboard.pm:86
+msgid "CreateOwnDashboard"
+msgstr ""
+
+#: lib/RT/System.pm:91
+msgid "CreateSavedSearch"
+msgstr "新增é å­˜æŸ¥è©¢"
+
+#: lib/RT/Queue_Overlay.pm:111
+msgid "CreateTicket"
+msgstr "新增申請單"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:913 lib/RT/Tickets_Overlay.pm:124 share/html/Admin/Elements/ShowKeyInfo:58 share/html/Elements/ColumnMap:66 share/html/Elements/ColumnMap:71 share/html/Elements/SelectDateType:49 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/ShowDates:50
+msgid "Created"
+msgstr "新增日"
+
+#: share/html/Elements/ColumnMap:76
+msgid "Created By"
+msgstr "建立由"
+
+#: share/html/Admin/CustomFields/Modify.html:165 share/html/Admin/Elements/EditCustomField:119
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Created CustomField %1"
+msgstr "è‡ªè¨‚æ¬„ä½ %1 新增æˆåŠŸ"
+
+#: share/html/Tools/Reports/Elements/Tabs:65 share/html/Tools/Reports/index.html:68
+msgid "Created in a date range"
+msgstr "在指定日期內建立"
+
+#: NOT FOUND IN SOURCE
+msgid "Created template %1"
+msgstr "範本 %1 新增æˆåŠŸ"
+
+#: share/html/Tools/Reports/CreatedByDates.html:54
+msgid "Created tickets in period, grouped by status"
+msgstr "在指定日期內建立的申請單,ä¾ç‹€æ…‹åˆ†çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Created workflow %1"
+msgstr "æµç¨‹ %1 新增æˆåŠŸ"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedBy"
+msgstr "建立人"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "CreatedRelative"
+msgstr "實際新增日(相å°å€¼)"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:96 share/html/Search/Elements/PickBasics:115
+msgid "Creator"
+msgstr "建立者"
+
+#: share/html/Prefs/Other.html:73
+msgid "Cryptography"
+msgstr "加密"
+
+#: NOT FOUND IN SOURCE
+msgid "Currency"
+msgstr "幣別"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Approval Info"
+msgstr "截至目å‰ç°½æ ¸è³‡è¨Š"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Custom Fields"
+msgstr "ç¾æœ‰è‡ªè¨‚欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Groups:"
+msgstr "ç¾æœ‰ç¾¤çµ„列表:"
+
+#: share/html/Elements/EditLinks:51
+msgid "Current Links"
+msgstr "ç¾æœ‰é—œä¿‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Rights:"
+msgstr "ç¾æœ‰æ¬Šé™ï¼š"
+
+#: share/html/Admin/Elements/EditScrips:53
+msgid "Current Scrips"
+msgstr "ç¾æœ‰æ‰‹çºŒ"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Status"
+msgstr "ç›®å‰ç‹€æ…‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Templates"
+msgstr "ç¾æœ‰ç¯„本"
+
+#: NOT FOUND IN SOURCE
+msgid "Current Watchers"
+msgstr "ç¾æœ‰è¦–察員"
+
+#: share/html/Admin/Groups/Members.html:62 share/html/User/Groups/Members.html:65
+msgid "Current members"
+msgstr "ç¾æœ‰æˆå“¡"
+
+#: share/html/Admin/Elements/SelectRights:62
+msgid "Current rights"
+msgstr "ç¾æœ‰æ¬Šé™"
+
+#: share/html/Search/Elements/EditQuery:49
+msgid "Current search"
+msgstr "ç¾æœ‰æŸ¥è©¢æ¢ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Current search criteria"
+msgstr "ç¾æœ‰æŸ¥è©¢æ¢ä»¶"
+
+#: share/html/Admin/Queues/People.html:64 share/html/Ticket/Elements/EditPeople:68
+msgid "Current watchers"
+msgstr "ç¾æœ‰è¦–察員"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom Field #%1"
+msgstr "è‡ªè¨‚æ¬„ä½ #%1"
+
+#: share/html/Admin/Elements/SystemTabs:63 share/html/Admin/Elements/Tabs:64 share/html/Admin/Global/index.html:65 share/html/Admin/Users/Modify.html:209 share/html/Admin/index.html:73 share/html/Ticket/Elements/ShowSummary:58 share/html/User/Prefs.html:165
+msgid "Custom Fields"
+msgstr "自訂欄ä½"
+
+#: share/html/Admin/CustomFields/index.html:62
+#. ($lookup)
+msgid "Custom Fields for %1"
+msgstr "%1 的自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom Fields which apply to all queues"
+msgstr "é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„自訂欄ä½"
+
+#: share/html/Admin/Elements/EditScrip:115
+msgid "Custom action cleanup code"
+msgstr "動作後執行程å¼"
+
+#: share/html/Admin/Elements/EditScrip:108
+msgid "Custom action preparation code"
+msgstr "動作å‰åŸ·è¡Œç¨‹å¼"
+
+#: share/html/Admin/Elements/EditScrip:101
+msgid "Custom condition"
+msgstr "自訂æ¢ä»¶"
+
+#: lib/RT/Tickets_Overlay.pm:2610
+#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
+msgid "Custom field %1 %2 %3"
+msgstr "è‡ªè¨‚æ¬„ä½ %1 %2 %3"
+
+#: lib/RT/Record.pm:1609
+#. ($args{'Field'})
+msgid "Custom field %1 does not apply to this object"
+msgstr "è‡ªè¨‚æ¬„ä½ %1 ä¸é©ç”¨æ–¼æ­¤ç‰©ä»¶"
+
+#: lib/RT/Tickets_Overlay.pm:2604
+#. ($CF->Name)
+msgid "Custom field %1 has a value."
+msgstr "è‡ªè¨‚æ¬„ä½ %1 已有值"
+
+#: lib/RT/Tickets_Overlay.pm:2600
+#. ($CF->Name)
+msgid "Custom field %1 has no value."
+msgstr "è‡ªè¨‚æ¬„ä½ %1 沒有值"
+
+#: lib/RT/Record.pm:1598 lib/RT/Record.pm:1780
+#. ($args{'Field'})
+msgid "Custom field %1 not found"
+msgstr "找ä¸åˆ°è‡ªè¨‚æ¬„ä½ %1"
+
+#: lib/RT/Report/Tickets.pm:114 lib/RT/Report/Tickets.pm:117
+#. ($cf)
+#. ($obj->Name)
+msgid "Custom field '%1'"
+msgstr "自訂欄ä½ã€Œ%1ã€"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field deleted"
+msgstr "自訂欄ä½å·²åˆªé™¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field not found"
+msgstr "找ä¸åˆ°è‡ªè¨‚欄ä½"
+
+#: lib/RT/CustomField_Overlay.pm:1124
+#. ($args{'Content'}, $self->Name)
+msgid "Custom field value %1 could not be found for custom field %2"
+msgstr "ç„¡æ³•å¾žè‡ªè¨‚æ¬„ä½ %2 中找到 %1 這個欄ä½å€¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom field value changed from %1 to %2"
+msgstr "自訂欄ä½å€¼å¾ž %1 改為 %2"
+
+#: lib/RT/CustomField_Overlay.pm:446
+msgid "Custom field value could not be deleted"
+msgstr "無法刪除自訂欄ä½å€¼"
+
+#: lib/RT/CustomField_Overlay.pm:1136
+msgid "Custom field value could not be found"
+msgstr "找ä¸åˆ°è‡ªè¨‚欄ä½å€¼"
+
+#: lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:448
+msgid "Custom field value deleted"
+msgstr "自訂欄ä½å€¼åˆªé™¤æˆåŠŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Custom.Ownership"
+msgstr "自訂: 承辦狀態"
+
+#: lib/RT/Tickets_Overlay.pm:139 lib/RT/Transaction_Overlay.pm:695 share/html/Elements/SelectGroups:54 share/html/Elements/SelectUsers:54
+msgid "CustomField"
+msgstr "自訂欄ä½"
+
+#: lib/RT/Tickets_Overlay.pm:138
+msgid "CustomFieldValue"
+msgstr "自訂欄ä½å€¼"
+
+#: share/html/Prefs/MyRT.html:84 share/html/Prefs/Quicksearch.html:72 share/html/Prefs/Search.html:77
+msgid "Customize"
+msgstr "自訂"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:72 share/html/Install/Sendmail.html:64
+msgid "Customize Basics"
+msgstr "自訂基本項目"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Database Details"
+msgstr "自訂資料庫細節"
+
+#: share/html/Install/Global.html:48 share/html/Install/Initialize.html:62 share/html/Install/Sendmail.html:63
+msgid "Customize Email Addresses"
+msgstr "自訂電å­éƒµä»¶åœ°å€"
+
+#: share/html/Install/Basics.html:62 share/html/Install/Global.html:66 share/html/Install/Sendmail.html:48
+msgid "Customize Email Configuration"
+msgstr "自訂電å­éƒµä»¶è¨­å®š"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global"
+msgstr "自訂全域"
+
+#: NOT FOUND IN SOURCE
+msgid "Customize Global Defaults"
+msgstr "自訂全域é è¨­å€¼"
+
+#: lib/RT/Installer.pm:109
+msgid "DBA password"
+msgstr "DBA 密碼"
+
+#: lib/RT/Installer.pm:102
+msgid "DBA username"
+msgstr "DBA 帳號"
+
+#: lib/RT/Config.pm:346
+msgid "Daily digest"
+msgstr "æ¯æ—¥å½™å ±"
+
+#: share/html/Dashboards/Subscription.html:62 share/html/Dashboards/Subscription.html:66
+msgid "Dashboard"
+msgstr "控制é¢æ¿"
+
+#: share/html/Dashboards/Modify.html:114
+#. ($msg)
+msgid "Dashboard could not be created: %1"
+msgstr "無法建立控制é¢æ¿: %1"
+
+#: share/html/Dashboards/Modify.html:145 share/html/Dashboards/Queries.html:262
+#. ($msg)
+msgid "Dashboard could not be updated: %1"
+msgstr "無法更新控制é¢æ¿: %1"
+
+#: share/html/Dashboards/Modify.html:142 share/html/Dashboards/Queries.html:259
+msgid "Dashboard updated"
+msgstr "控制é¢æ¿å·²æ›´æ–°"
+
+#: share/html/Dashboards/index.html:73 share/html/Elements/Dashboards:50 share/html/Tools/Elements/Tabs:58 share/html/Tools/index.html:58
+msgid "Dashboards"
+msgstr "控制é¢æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Data error"
+msgstr "資料錯誤"
+
+#: lib/RT/Installer.pm:76
+msgid "Database host"
+msgstr "資料庫主機"
+
+#: lib/RT/Installer.pm:94
+msgid "Database name"
+msgstr "資料庫å稱"
+
+#: lib/RT/Installer.pm:125
+msgid "Database password for RT"
+msgstr "RT 資料庫密碼"
+
+#: lib/RT/Installer.pm:85
+msgid "Database port"
+msgstr "資料庫通訊埠"
+
+#: lib/RT/Installer.pm:58
+msgid "Database type"
+msgstr "資料庫類型"
+
+#: lib/RT/Installer.pm:118
+msgid "Database username for RT"
+msgstr "RT 資料庫帳號"
+
+#: NOT FOUND IN SOURCE
+msgid "DatabaseBindRemote"
+msgstr "容許外部連線"
+
+#: NOT FOUND IN SOURCE
+msgid "DatabaseName"
+msgstr "MySQL資料庫"
+
+#: lib/RT/Config.pm:323
+msgid "Date format"
+msgstr "日期格å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Date of Departure"
+msgstr "出發日期"
+
+#: lib/RT/Date.pm:651
+msgid "DateTime module missing"
+msgstr ""
+
+#: lib/RT/Date.pm:652
+msgid "DateTime::Locale module missing"
+msgstr ""
+
+#: share/html/SelfService/Display.html:65 share/html/Ticket/Create.html:208 share/html/Ticket/Elements/ShowSummary:93 share/html/Ticket/Elements/Tabs:130 share/html/Ticket/ModifyAll.html:68
+msgid "Dates"
+msgstr "日期"
+
+#: lib/RT/Date.pm:99
+msgid "Dec"
+msgstr "å二月"
+
+#: NOT FOUND IN SOURCE
+msgid "Dec."
+msgstr "12"
+
+#: NOT FOUND IN SOURCE
+msgid "December"
+msgstr "å二月"
+
+#: share/html/Ticket/GnuPG.html:62
+msgid "Decrypt"
+msgstr "解密"
+
+#: NOT FOUND IN SOURCE
+msgid "Default Approval"
+msgstr "é è¨­ç°½æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Default Autoresponse Template"
+msgstr "é è¨­è‡ªå‹•å›žæ‡‰ç¯„本"
+
+#: etc/initialdata:197
+msgid "Default Autoresponse template"
+msgstr "é è¨­è‡ªå‹•å›žæ‡‰ç¯„本"
+
+#: share/html/Tools/Offline.html:62
+msgid "Default Queue"
+msgstr "é è¨­è¡¨å–®"
+
+#: share/html/Tools/Offline.html:71
+msgid "Default Requestor"
+msgstr "é è¨­ç”³è«‹äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Default Value"
+msgstr "é è¨­å€¼"
+
+#: etc/initialdata:271
+msgid "Default admin comment template"
+msgstr "é è¨­ç®¡ç†å“¡è©•è«–範本"
+
+#: etc/initialdata:250
+msgid "Default admin correspondence template"
+msgstr "é è¨­ç®¡ç†å“¡å›žè¦†ç¯„本"
+
+#: etc/initialdata:262
+msgid "Default correspondence template"
+msgstr "é è¨­å›žè¦†ç¯„本"
+
+#: lib/RT/Config.pm:140
+msgid "Default queue"
+msgstr "é è¨­ä½‡åˆ—"
+
+#: etc/initialdata:228
+msgid "Default transaction template"
+msgstr "é è¨­æ›´å‹•ç¯„本"
+
+#: share/html/Widgets/Form/Integer:71 share/html/Widgets/Form/String:69
+#. ($DefaultValue)
+msgid "Default: %1"
+msgstr "é è¨­ï¼š%1"
+
+#: lib/RT/Transaction_Overlay.pm:673
+#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
+msgid "Default: %1/%2 changed from %3 to %4"
+msgstr "é è¨­ï¼š%1/%2 已自 %3 改為 %4"
+
+#: NOT FOUND IN SOURCE
+msgid "DefaultApproval"
+msgstr "é è¨­ç°½æ ¸"
+
+#: share/html/Elements/RT__Queue/ColumnMap:104
+msgid "DefaultDueIn"
+msgstr "é è¨­åˆ°æœŸ"
+
+#: lib/RT/Date.pm:113
+msgid "DefaultFormat"
+msgstr ""
+
+#: share/html/User/Delegation.html:48 share/html/User/Delegation.html:51
+msgid "Delegate rights"
+msgstr "代ç†äººæ¬Šé™"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "Delegate specific rights which have been granted to you."
+msgstr "å°‡æ“有的權é™å§”託他人代ç†"
+
+#: lib/RT/Group_Overlay.pm:91 lib/RT/System.pm:87
+msgid "DelegateRights"
+msgstr "設定代ç†äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Approval"
+msgstr "代ç†ç°½æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Queue"
+msgstr "代ç†è¡¨å–®å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Queue:"
+msgstr "代ç†è¡¨å–®ï¼š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegated Type"
+msgstr "代ç†è¡¨å–®ç¨®é¡ž"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates"
+msgstr "代ç†äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Enabled Status"
+msgstr "代ç†å•Ÿå‹•ç‹€æ…‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Info"
+msgstr "代ç†äººè³‡è¨Š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Period"
+msgstr "代ç†æœŸé–“"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Permission Setting"
+msgstr "代ç†æ¬Šé™è¨­å®š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Permission:"
+msgstr "代ç†æ¬Šé™ï¼š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Setting"
+msgstr "代ç†äººè¨­å®š"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegates Status"
+msgstr "代ç†ç‹€æ…‹"
+
+#: share/html/User/Elements/Tabs:67
+msgid "Delegation"
+msgstr "代ç†äººæ¬Šé™"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegation Groups"
+msgstr "代ç†äººç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Delegation Rights"
+msgstr "代ç†äººæ¬Šé™"
+
+#: share/html/Admin/Elements/EditScrips:73 share/html/Dashboards/Modify.html:81 share/html/Search/Elements/EditFormat:103 share/html/Search/Elements/EditQuery:61 share/html/Search/Elements/EditSearches:63 share/html/Widgets/SelectionBox:219
+msgid "Delete"
+msgstr "刪除"
+
+#: share/html/Admin/Elements/EditTemplates:72
+msgid "Delete Template"
+msgstr "刪除範本"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "Delete dashboards for this group"
+msgstr "刪除此群組的控制é¢æ¿"
+
+#: lib/RT/SharedSetting.pm:268
+#. ($msg)
+msgid "Delete failed: %1"
+msgstr "刪除失敗:%1"
+
+#: lib/RT/Dashboard.pm:88
+msgid "Delete personal dashboards"
+msgstr "刪除個人的控制é¢æ¿"
+
+#: share/html/Admin/Elements/EditScrips:72
+msgid "Delete selected scrips"
+msgstr "刪除指定的手續"
+
+#: lib/RT/Dashboard.pm:83
+msgid "Delete system dashboards"
+msgstr "刪除系統控制é¢æ¿"
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "Delete tickets"
+msgstr "刪除申請單"
+
+#: share/html/Search/Bulk.html:182
+msgid "Delete values"
+msgstr "刪除值"
+
+#: lib/RT/Dashboard.pm:83
+msgid "DeleteDashboard"
+msgstr "刪除控制é¢æ¿"
+
+#: lib/RT/Group_Overlay.pm:100
+msgid "DeleteGroupDashboard"
+msgstr "刪除群組控制é¢æ¿"
+
+#: lib/RT/Dashboard.pm:88
+msgid "DeleteOwnDashboard"
+msgstr "刪除自己的控制é¢æ¿"
+
+#: lib/RT/Queue_Overlay.pm:116
+msgid "DeleteTicket"
+msgstr "刪除申請單"
+
+#: lib/RT/SharedSetting.pm:266
+#. ($self->ObjectName)
+msgid "Deleted %1"
+msgstr "%1 已刪除"
+
+#: share/html/Dashboards/index.html:80
+#. ($Deleted)
+msgid "Deleted dashboard %1"
+msgstr "控制é¢æ¿ %1 已刪除"
+
+#: share/html/Dashboards/Elements/Deleted:52
+msgid "Deleted queries"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:181
+msgid "Deleted saved search"
+msgstr "刪除é å­˜æŸ¥è©¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleted search"
+msgstr "已刪除的æœå°‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object could break referential integrity"
+msgstr "刪除此物件å¯èƒ½ç ´å£žåƒè€ƒå®Œæ•´æ€§"
+
+#: lib/RT/Queue_Overlay.pm:398
+msgid "Deleting this object would break referential integrity"
+msgstr "刪除此物件å¯èƒ½ç ´å£žåƒè€ƒå®Œæ•´æ€§"
+
+#: lib/RT/User_Overlay.pm:415
+msgid "Deleting this object would violate referential integrity"
+msgstr "刪除此物件會é•ååƒè€ƒå®Œæ•´æ€§"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity."
+msgstr "刪除此物件會é•ååƒè€ƒå®Œæ•´æ€§"
+
+#: NOT FOUND IN SOURCE
+msgid "Deleting this object would violate referential integrity. That's bad."
+msgstr "刪除此物件會é•ååƒè€ƒå®Œæ•´æ€§"
+
+#: share/html/Approvals/Elements/Approve:75
+msgid "Deny"
+msgstr "é§å›ž"
+
+#: NOT FOUND IN SOURCE
+msgid "Department"
+msgstr "部門"
+
+#: NOT FOUND IN SOURCE
+msgid "Department ID"
+msgstr "部門代碼"
+
+#: NOT FOUND IN SOURCE
+msgid "Department Name"
+msgstr "部門å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Department's"
+msgstr "部門之"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure Details"
+msgstr "差旅明細"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure From"
+msgstr "差旅起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure Request"
+msgstr "è«‹å‡å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "Departure Until"
+msgstr "差旅截止日"
+
+#: share/html/Elements/EditLinks:141 share/html/Elements/EditLinks:64 share/html/Elements/ShowLinks:80 share/html/Ticket/Create.html:229 share/html/Ticket/Elements/BulkLinks:58 share/html/Ticket/Elements/ShowDependencies:55
+msgid "Depended on by"
+msgstr "å¯æŽ¥çºŒè™•ç†çš„申請單"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:116 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependedOnBy"
+msgstr "å¯æŽ¥çºŒè™•ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Dependencies: \\n"
+msgstr "附屬性:\\n"
+
+#: lib/RT/Transaction_Overlay.pm:775
+#. ($value)
+msgid "Dependency by %1 added"
+msgstr "已加入å¯æŽ¥çºŒè™•ç†çš„申請單 %1"
+
+#: lib/RT/Transaction_Overlay.pm:815
+#. ($value)
+msgid "Dependency by %1 deleted"
+msgstr "已移除å¯æŽ¥çºŒè™•ç†çš„申請單 %1"
+
+#: lib/RT/Transaction_Overlay.pm:772
+#. ($value)
+msgid "Dependency on %1 added"
+msgstr "已加入需先處ç†çš„申請單 %1"
+
+#: lib/RT/Transaction_Overlay.pm:812
+#. ($value)
+msgid "Dependency on %1 deleted"
+msgstr "已移除需先處ç†çš„申請單 %1"
+
+#: lib/RT/Tickets_Overlay.pm:115
+msgid "DependentOn"
+msgstr ""
+
+#: share/html/Elements/EditLinks:137 share/html/Elements/EditLinks:55 share/html/Elements/SelectLinkType:50 share/html/Elements/ShowLinks:50 share/html/Ticket/Create.html:228 share/html/Ticket/Elements/BulkLinks:54 share/html/Ticket/Elements/ShowDependencies:48
+msgid "Depends on"
+msgstr "需先處ç†"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:112 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "DependsOn"
+msgstr "需先處ç†"
+
+#: share/html/Search/Elements/DisplayOptions:83
+msgid "Desc"
+msgstr "éžæ¸›"
+
+#: share/html/Elements/SelectSortOrder:58
+msgid "Descending"
+msgstr "éžæ¸›"
+
+#: share/html/SelfService/Create.html:108 share/html/Ticket/Create.html:154
+msgid "Describe the issue below"
+msgstr "在以下欄ä½æ述主題"
+
+#: share/html/Admin/CustomFields/Modify.html:64 share/html/Admin/Elements/AddCustomFieldValue:55 share/html/Admin/Elements/EditCustomField:62 share/html/Admin/Elements/EditCustomFieldValues:59 share/html/Admin/Elements/EditScrip:57 share/html/Admin/Elements/ModifyTemplate:59 share/html/Admin/Groups/Modify.html:73 share/html/Admin/Queues/Modify.html:66 share/html/Elements/RT__Group/ColumnMap:82 share/html/Elements/RT__Queue/ColumnMap:79 share/html/Elements/RT__Scrip/ColumnMap:88 share/html/Elements/RT__Template/ColumnMap:66 share/html/Search/Elements/EditSearches:55 share/html/User/Groups/Modify.html:72
+msgid "Description"
+msgstr "æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Description of Responsibility"
+msgstr "經辦業務說明"
+
+#: NOT FOUND IN SOURCE
+msgid "Description:"
+msgstr "æ述:"
+
+#: NOT FOUND IN SOURCE
+msgid "Details"
+msgstr "細節"
+
+#: NOT FOUND IN SOURCE
+msgid "Direct"
+msgstr "直接"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:50
+msgid "Direction"
+msgstr "æ–¹å‘"
+
+#: NOT FOUND IN SOURCE
+msgid "Disability"
+msgstr "殘障身分"
+
+#: NOT FOUND IN SOURCE
+msgid "Disability Type"
+msgstr "殘障類別"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Disabled"
+msgstr "åœç”¨"
+
+#: share/html/Search/Elements/EditFormat:69 share/html/Ticket/Elements/Tabs:116
+msgid "Display"
+msgstr "顯示內容"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "Display Access Control List"
+msgstr "顯示權é™æŽ§åˆ¶æ¸…å–®"
+
+#: share/html/Search/Elements/DisplayOptions:99
+msgid "Display Columns"
+msgstr "顯示欄ä½"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "Display Scrip templates for this queue"
+msgstr "顯示此表單的範本"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "Display Scrips for this queue"
+msgstr "顯示此表單的手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Display mode"
+msgstr "顯示模å¼"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "Display saved searches for this group"
+msgstr "顯示此群組的é å­˜æŸ¥è©¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Display ticket #%1"
+msgstr "顯示第%1號申請單"
+
+#: share/html/Elements/Footer:64
+msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
+msgstr "ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授權</a> 第二版散布。"
+
+#: lib/RT/System.pm:79
+msgid "Do anything and everything"
+msgstr "å…許一切æ“作"
+
+#: lib/RT/Installer.pm:190
+msgid "Domain name"
+msgstr "網域å稱"
+
+#: lib/RT/Installer.pm:191
+msgid "Don't include http://, just something like 'localhost', 'rt.example.com'"
+msgstr "ä¸è¦åŒ…å« http://,åªéœ€è¦åƒ 'localhost' , 'rt.example.com' å³å¯ã€‚"
+
+#: lib/RT/Config.pm:254
+msgid "Don't refresh home page."
+msgstr ""
+
+#: lib/RT/Config.pm:224
+msgid "Don't refresh search results."
+msgstr ""
+
+#: share/html/Elements/Refresh:53
+msgid "Don't refresh this page."
+msgstr "ä¸æ›´æ–°æ­¤é é¢ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Don't show search results"
+msgstr "ä¸é¡¯ç¤ºæŸ¥è©¢çµæžœ"
+
+#: lib/RT/Crypt/GnuPG.pm:2175
+msgid "Don't trust this key at all"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Done"
+msgstr "完æˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Down"
+msgstr "下一é "
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:66
+msgid "Download"
+msgstr "下載"
+
+#: share/html/Admin/Groups/index.html:73 share/html/Admin/Users/index.html:74
+msgid "Download as a tab-delimited file"
+msgstr "下載以 Tab 分隔的檔案"
+
+#: share/html/Admin/Tools/Shredder/Elements/DumpFileLink:49
+msgid "Download dumpfile"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Dr."
+msgstr "åšå£«"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:917 lib/RT/Tickets_Overlay.pm:121 share/html/Elements/RT__Ticket/ColumnMap:203 share/html/Elements/RT__Ticket/ColumnMap:236 share/html/Elements/SelectDateType:55 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:214 share/html/Ticket/Elements/EditDates:68 share/html/Ticket/Elements/Reminders:143 share/html/Ticket/Elements/ShowDates:66
+msgid "Due"
+msgstr "到期日"
+
+#: NOT FOUND IN SOURCE
+msgid "Due Date"
+msgstr "截止日"
+
+#: NOT FOUND IN SOURCE
+msgid "Due date '%1' could not be parsed"
+msgstr "無法解讀日期 '%1'"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "DueRelative"
+msgstr "到期日(相å°å€¼)"
+
+#: share/html/Install/Initialize.html:126 share/html/Install/Initialize.html:89
+#. ($msg)
+msgid "ERROR: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
+msgstr "無法載入申請單 '%1':%2.\\n"
+
+#: share/html/Tools/index.html:75
+msgid "Easy updating of your open tickets"
+msgstr ""
+
+#: share/html/Elements/Dashboards:53 share/html/Elements/Quicksearch:50 share/html/Elements/ShowSearch:51 share/html/index.html:132
+msgid "Edit"
+msgstr "編輯"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Conditions"
+msgstr "編輯å‰ç½®æ¢ä»¶"
+
+#: share/html/Search/Bulk.html:177
+msgid "Edit Custom Fields"
+msgstr "編輯自訂欄ä½"
+
+#: share/html/Admin/Elements/ObjectCustomFields:94 share/html/Admin/Queues/CustomFields.html:66 share/html/Admin/Users/CustomFields.html:66
+#. ($Object->Name)
+msgid "Edit Custom Fields for %1"
+msgstr "編輯 %1 的自訂欄ä½"
+
+#: share/html/Admin/Global/CustomFields/Groups.html:56
+msgid "Edit Custom Fields for all groups"
+msgstr "編輯é©ç”¨æ–¼æ‰€æœ‰ç¾¤çµ„的自訂欄ä½"
+
+#: share/html/Admin/Global/CustomFields/Queues.html:56
+msgid "Edit Custom Fields for all queues"
+msgstr ""
+
+#: share/html/Admin/Global/CustomFields/Users.html:56
+msgid "Edit Custom Fields for all users"
+msgstr "編輯é©ç”¨æ–¼æ‰€æœ‰ä½¿ç”¨è€…的自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Custom Fields for queue %1"
+msgstr "編輯表單 %1 的自訂欄ä½"
+
+#: share/html/Admin/Global/CustomFields/Queue-Tickets.html:56 share/html/Admin/Global/CustomFields/Queue-Transactions.html:56
+msgid "Edit Custom Fields for tickets in all queues"
+msgstr "編輯é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®å…§ç”³è«‹å–®çš„自訂欄ä½"
+
+#: share/html/Search/Bulk.html:212 share/html/Ticket/ModifyLinks.html:62
+msgid "Edit Links"
+msgstr "編輯申請單關係"
+
+#: share/html/Search/Edit.html:74
+msgid "Edit Query"
+msgstr "編輯查詢"
+
+#: share/html/Ticket/Elements/Tabs:273
+msgid "Edit Search"
+msgstr "編輯查詢"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Subgroups"
+msgstr "新增/維護å­ç¾¤çµ„"
+
+#: share/html/Admin/Queues/Templates.html:65
+#. ($QueueObj->Name)
+msgid "Edit Templates for queue %1"
+msgstr "編輯表單 %1 的範本"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit Workflows for queue %1"
+msgstr "編輯表單 %1 çš„æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit keywords"
+msgstr "編輯關éµå­—"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "Edit saved searches for this group"
+msgstr "編輯此群組的é å­˜æŸ¥è©¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit scrips"
+msgstr "編輯手續"
+
+#: share/html/Admin/Global/index.html:61
+msgid "Edit system templates"
+msgstr "編輯全域範本"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit system workflows"
+msgstr "編輯全域æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit templates for %1"
+msgstr "編輯 %1 的範本"
+
+#: NOT FOUND IN SOURCE
+msgid "Edit workflows for %1"
+msgstr "編輯 %1 çš„æµç¨‹"
+
+#: lib/RT/Group_Overlay.pm:93
+msgid "EditSavedSearches"
+msgstr "編輯é å­˜æŸ¥è©¢"
+
+#: share/html/Search/Elements/ResultViews:63
+msgid "Editable text"
+msgstr "å¯ç·¨è¼¯çš„內容"
+
+#: share/html/Admin/Queues/Modify.html:162
+#. ($QueueObj->Name)
+msgid "Editing Configuration for queue %1"
+msgstr "編輯表單 %1 的設定"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing Configuration for user %1"
+msgstr "編輯使用者 %1 的設定"
+
+#: share/html/Admin/CustomFields/Modify.html:168 share/html/Admin/Elements/EditCustomField:122
+#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name)
+msgid "Editing CustomField %1"
+msgstr "ç·¨è¼¯è‡ªè¨‚æ¬„ä½ %1"
+
+#: share/html/Admin/Groups/Members.html:57
+#. ($Group->Name)
+msgid "Editing membership for group %1"
+msgstr "編輯群組 %1 çš„æˆå“¡è³‡è¨Š"
+
+#: share/html/User/Groups/Members.html:152
+#. ($Group->Name)
+msgid "Editing membership for personal group %1"
+msgstr "編輯代ç†äººç¾¤çµ„ %1 çš„æˆå“¡è³‡è¨Š"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing template %1"
+msgstr "編輯範本 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Editing workflow %1"
+msgstr "編輯æµç¨‹ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Education"
+msgstr "最高學歷"
+
+#: lib/RT/Tickets_Overlay.pm:99 share/html/Elements/RT__Ticket/ColumnMap:148
+msgid "EffectiveId"
+msgstr "有效編號"
+
+#: lib/RT/Record.pm:1299 lib/RT/Record.pm:1380 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2355
+msgid "Either base or target must be specified"
+msgstr "需è¦æŒ‡å®šèµ·å§‹ç”³è«‹å–®æˆ–目的申請單"
+
+#: share/html/Elements/ShowSearch:67
+#. ($SavedSearch)
+msgid "Either you have no rights to view saved search %1 or identifier is incorrect"
+msgstr "您å¯èƒ½æ²’有檢視é å­˜æŸ¥è©¢%1的權é™æˆ–識別碼ä¸æ­£ç¢º"
+
+#: share/html/Admin/Users/Modify.html:76 share/html/Ticket/Elements/AddWatchers:79 share/html/User/Prefs.html:67
+msgid "Email"
+msgstr "é›»å­éƒµä»¶ä¿¡ç®±"
+
+#: NOT FOUND IN SOURCE
+msgid "Email Address"
+msgstr "é›»å­éƒµä»¶ä¿¡ç®±"
+
+#: NOT FOUND IN SOURCE
+msgid "Email Configuration"
+msgstr "é›»å­éƒµä»¶è¨­å®š"
+
+#: etc/initialdata:456 etc/upgrade/3.7.85/content:4
+msgid "Email Digest"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:547
+msgid "Email address in use"
+msgstr "此電å­éƒµä»¶ä¿¡ç®±å·²è¢«ä½¿ç”¨"
+
+#: lib/RT/Config.pm:343
+msgid "Email delivery"
+msgstr ""
+
+#: etc/initialdata:457 etc/upgrade/3.7.85/content:5
+msgid "Email template for periodic notification digests"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:76
+msgid "EmailAddress"
+msgstr "é›»å­éƒµä»¶ä¿¡ç®±ä½å€"
+
+#: NOT FOUND IN SOURCE
+msgid "EmailEncoding"
+msgstr "é›»å­éƒµä»¶æ–‡å­—編碼方å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Embark Date"
+msgstr "外ç±å“¡å·¥å…¥å¢ƒæ—¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Embarked Date"
+msgstr "抵é”日期"
+
+#: NOT FOUND IN SOURCE
+msgid "Embarked Location"
+msgstr "抵é”地點"
+
+#: NOT FOUND IN SOURCE
+msgid "Enable Delegates"
+msgstr "代ç†å•Ÿå‹•"
+
+#: share/html/Elements/RT__Queue/ColumnMap:63
+msgid "Enabled"
+msgstr "已啟用"
+
+#: share/html/Admin/CustomFields/Modify.html:124 share/html/Admin/Elements/EditCustomField:74
+msgid "Enabled (Unchecking this box disables this custom field)"
+msgstr "啟用(å–消勾é¸å°‡åœç”¨æ­¤è‡ªè¨‚欄ä½)"
+
+#: share/html/Admin/Groups/Modify.html:89 share/html/User/Groups/Modify.html:76
+msgid "Enabled (Unchecking this box disables this group)"
+msgstr "啟用(å–消勾é¸å°‡åœç”¨æ­¤ç¾¤çµ„)"
+
+#: share/html/Admin/Queues/Modify.html:119
+msgid "Enabled (Unchecking this box disables this queue)"
+msgstr "啟用(å–消勾é¸å°‡åœç”¨æ­¤è¡¨å–®)"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Custom Fields"
+msgstr "已啟用的自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Date"
+msgstr "啟用日期"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Date:"
+msgstr "啟動日期:"
+
+#: share/html/Admin/Queues/index.html:85
+msgid "Enabled Queues"
+msgstr "已啟用的表單"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled Status"
+msgstr "啟用狀態"
+
+#: share/html/Admin/Elements/EditCustomField:138 share/html/User/Groups/Modify.html:140
+#. (loc_fuzzy($msg))
+msgid "Enabled status %1"
+msgstr "啟用狀態 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Enabled status: %1"
+msgstr "啟用狀態: %1"
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:53 share/html/Ticket/GnuPG.html:62
+msgid "Encrypt"
+msgstr "加密"
+
+#: share/html/Admin/Queues/Modify.html:114
+msgid "Encrypt by default"
+msgstr "é è¨­åŠ å¯†"
+
+#: share/html/Ticket/Elements/ShowTransaction:212
+msgid "Encrypt/Decrypt"
+msgstr "加密/解密"
+
+#: share/html/Ticket/GnuPG.html:103
+#. ($id, $txn->Ticket)
+msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:550
+msgid "Encrypting disabled"
+msgstr "å·²å–消加密"
+
+#: lib/RT/Queue_Overlay.pm:549
+msgid "Encrypting enabled"
+msgstr "已啟用加密"
+
+#: NOT FOUND IN SOURCE
+msgid "End of Trial"
+msgstr "試用期滿日"
+
+#: NOT FOUND IN SOURCE
+msgid "English Name"
+msgstr "英文姓å"
+
+#: lib/RT/CustomField_Overlay.pm:65
+msgid "Enter multiple values"
+msgstr "éµå…¥å¤šé‡é …ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:95
+msgid "Enter multiple values with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:127
+msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
+msgstr "éµå…¥æ¬²å°‡ç‰©ä»¶é€£çµè‡³çš„物件或 URI。項目之間請以空白隔開。"
+
+#: NOT FOUND IN SOURCE
+msgid "Enter one or more conditions below to search for users"
+msgstr "éµå…¥ä¸‹åˆ—單一或複å¼æ¢ä»¶ï¼ŒæŸ¥è©¢ç”¨æˆ¶è³‡æ–™"
+
+#: lib/RT/CustomField_Overlay.pm:66
+msgid "Enter one value"
+msgstr "éµå…¥å–®ä¸€é …ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:96
+msgid "Enter one value with autocompletion"
+msgstr ""
+
+#: share/html/Elements/EditLinks:124
+msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
+msgstr "éµå…¥æ¬²å°‡è¡¨å–®é€£çµè‡³çš„物件或 URI。項目之間請以空白隔開。"
+
+#: share/html/Elements/EditLinks:120 share/html/Search/Bulk.html:213
+msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
+msgstr "éµå…¥ç”³è«‹å–®å¯éˆçµåˆ°çš„申請單編號或網å€ã€‚項目之間請以空白隔開。"
+
+#: lib/RT/CustomField_Overlay.pm:67
+msgid "Enter up to %1 values"
+msgstr "éµå…¥æœ€å¤š %1 個項目"
+
+#: lib/RT/CustomField_Overlay.pm:97
+msgid "Enter up to %1 values with autocompletion"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "EntryBoolean"
+msgstr "是éžå¡«è¡¨"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryDate"
+msgstr "日期填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryExternal"
+msgstr "系統填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryFreeform"
+msgstr "輸入填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryMultiple"
+msgstr "多é¸å¡«è¡¨"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryNumber"
+msgstr "數值填表"
+
+#: NOT FOUND IN SOURCE
+msgid "EntrySelect"
+msgstr "å–®é¸å¡«è¡¨"
+
+#: NOT FOUND IN SOURCE
+msgid "EntryTime"
+msgstr "時間填表"
+
+#: sbin/rt-email-digest:103 share/html/Elements/Login:78 share/html/Install/Elements/Errors:49 share/html/SelfService/Error.html:48 share/html/SelfService/Error.html:49
+msgid "Error"
+msgstr "錯誤"
+
+#: NOT FOUND IN SOURCE
+msgid "Error adding watcher"
+msgstr "新增視察員失敗"
+
+#: lib/RT/Queue_Overlay.pm:771
+msgid "Error in parameters to Queue->AddWatcher"
+msgstr "表單->新增視察員的åƒæ•¸æœ‰èª¤"
+
+#: lib/RT/Queue_Overlay.pm:935
+msgid "Error in parameters to Queue->DeleteWatcher"
+msgstr "表單->刪除視察員的åƒæ•¸æœ‰èª¤"
+
+#: lib/RT/Ticket_Overlay.pm:1081
+msgid "Error in parameters to Ticket->AddWatcher"
+msgstr "申請單->新增視察員的åƒæ•¸æœ‰èª¤"
+
+#: lib/RT/Ticket_Overlay.pm:1229
+msgid "Error in parameters to Ticket->DeleteWatcher"
+msgstr "申請單->刪除視察員的åƒæ•¸æœ‰èª¤"
+
+#: etc/initialdata:404 etc/upgrade/3.7.10/content:13
+msgid "Error to RT owner: public key"
+msgstr ""
+
+#: etc/initialdata:466 etc/upgrade/3.7.87/content:4
+msgid "Error: Missing dashboard"
+msgstr ""
+
+#: etc/initialdata:429 etc/upgrade/3.7.10/content:38
+msgid "Error: bad GnuPG data"
+msgstr ""
+
+#: etc/initialdata:417 etc/upgrade/3.7.10/content:26
+msgid "Error: no private key"
+msgstr ""
+
+#: etc/initialdata:395 etc/upgrade/3.7.10/content:4
+msgid "Error: public key"
+msgstr ""
+
+#: bin/rt-crontool:388
+msgid "Escalate tickets"
+msgstr "調整申請單優先等級"
+
+#: NOT FOUND IN SOURCE
+msgid "Estimate"
+msgstr "é è¨ˆ"
+
+#: share/html/Ticket/Elements/ShowBasics:59
+msgid "Estimated"
+msgstr "é è¨ˆ"
+
+#: lib/RT/Handle.pm:639
+msgid "Everyone"
+msgstr "所有人"
+
+#: share/html/Tools/Reports/index.html:70
+msgid "Examine tickets created in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:65
+msgid "Examine tickets resolved in a queue between two dates"
+msgstr ""
+
+#: share/html/Tools/Reports/index.html:60
+msgid "Examine tickets resolved in a queue, grouped by owner"
+msgstr ""
+
+#: bin/rt-crontool:374
+msgid "Example:"
+msgstr "範例:"
+
+#: NOT FOUND IN SOURCE
+msgid "Existing user renamed from %1 to %2"
+msgstr "ç¾æœ‰ä½¿ç”¨è€… %1 已改å為 %2"
+
+#: share/html/Admin/Elements/ShowKeyInfo:61
+msgid "Expire"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Export"
+msgstr "匯出"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ExtendedStatus"
+msgstr "é¡å¤–ç¾æ³"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalAuthId"
+msgstr "外部èªè­‰å¸³è™Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalContactInfoId"
+msgstr "外部è¯çµ¡æ–¹å¼å¸³è™Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalDatabaseDSN"
+msgstr "外部資料庫連çµå­—串"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalDatabasePass"
+msgstr "外部資料庫密碼"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalDatabaseUser"
+msgstr "外部資料庫用戶"
+
+#: NOT FOUND IN SOURCE
+msgid "ExternalURL"
+msgstr "外部介é¢ç¶²å€"
+
+#: share/html/Admin/Users/Modify.html:101
+msgid "Extra info"
+msgstr "備註"
+
+#: etc/initialdata:97 etc/upgrade/3.8.3/content:75
+msgid "Extract Subject Tag"
+msgstr ""
+
+#: etc/initialdata:98 etc/upgrade/3.8.3/content:76
+msgid "Extract tags from a Transaction's subject and add them to the Ticket's subject."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:187
+#. ($DBI::errstr)
+msgid "Failed to connect to database: %1"
+msgstr "連接資料庫失敗: %1"
+
+#: lib/RT/SharedSetting.pm:200
+#. ($self->ObjectName)
+msgid "Failed to create %1 attribute"
+msgstr "建立 %1 屬性失敗"
+
+#: NOT FOUND IN SOURCE
+msgid "Failed to create search attribute"
+msgstr "查詢屬性建立失敗"
+
+#: lib/RT/User_Overlay.pm:290
+msgid "Failed to find 'Privileged' users pseudogroup."
+msgstr "找ä¸åˆ°ã€Œå…§éƒ¨æˆå“¡ã€è™›æ“¬ç¾¤çµ„的使用者。"
+
+#: lib/RT/User_Overlay.pm:297
+msgid "Failed to find 'Unprivileged' users pseudogroup"
+msgstr "找ä¸åˆ°ã€Œéžå…§éƒ¨æˆå“¡ã€è™›æ“¬ç¾¤çµ„的使用者。"
+
+#: lib/RT/SharedSetting.pm:117
+#. ($self->ObjectName, $id)
+msgid "Failed to load %1 %2"
+msgstr ""
+
+#: lib/RT/SharedSetting.pm:141
+#. ($self->ObjectName, $id, $msg)
+msgid "Failed to load %1 %2: %3"
+msgstr ""
+
+#: bin/rt-crontool:307
+#. ($modname, $@)
+msgid "Failed to load module %1. (%2)"
+msgstr "無法載入模組 %1。(%2)"
+
+#: lib/RT/SharedSetting.pm:184
+#. ($privacy)
+msgid "Failed to load object for %1"
+msgstr "無法為 %1 載入物件。"
+
+#: sbin/rt-email-digest:166
+msgid "Failed to load template"
+msgstr "載入樣æ¿å¤±æ•—"
+
+#: sbin/rt-email-digest:174
+msgid "Failed to parse template"
+msgstr "剖æžæ¨£æ¿å¤±æ•—"
+
+#: lib/RT/Date.pm:89
+msgid "Feb"
+msgstr "二月"
+
+#: NOT FOUND IN SOURCE
+msgid "Feb."
+msgstr "02"
+
+#: NOT FOUND IN SOURCE
+msgid "February"
+msgstr "二月"
+
+#: NOT FOUND IN SOURCE
+msgid "Female"
+msgstr "女"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Content:"
+msgstr "欄ä½å…§å®¹ï¼š"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Description"
+msgstr "欄ä½æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Name"
+msgstr "欄ä½å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Field Type"
+msgstr "欄ä½é¡žåˆ¥"
+
+#: share/html/Admin/CustomFields/Modify.html:74
+msgid "Field values source:"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52
+msgid "FileName"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:128 share/html/Elements/SelectAttachmentField:52
+msgid "Filename"
+msgstr "檔å"
+
+#: share/html/Admin/Tools/Shredder/Elements/PluginArguments:52
+msgid "Fill arguments"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:81
+msgid "Fill boxes with color using"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:70
+msgid "Fill in multiple text areas"
+msgstr "填入多個文字框"
+
+#: lib/RT/CustomField_Overlay.pm:75
+msgid "Fill in multiple wikitext areas"
+msgstr "填入多個 Wiki 文字框"
+
+#: lib/RT/CustomField_Overlay.pm:71
+msgid "Fill in one text area"
+msgstr "填入一個文字框"
+
+#: lib/RT/CustomField_Overlay.pm:76
+msgid "Fill in one wikitext area"
+msgstr "填入一個 Wiki 文字框"
+
+#: share/html/Admin/CustomFields/Modify.html:105 share/html/Admin/CustomFields/Modify.html:97
+msgid "Fill in this field with a URL."
+msgstr "填入一個網å€"
+
+#: lib/RT/CustomField_Overlay.pm:72
+msgid "Fill in up to %1 text areas"
+msgstr "填入最多 %1 個文字框"
+
+#: lib/RT/CustomField_Overlay.pm:77
+msgid "Fill in up to %1 wikitext areas"
+msgstr "填入最多 %1 個 Wiki 文字框"
+
+#: NOT FOUND IN SOURCE
+msgid "Filter"
+msgstr "篩é¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Filter people"
+msgstr "å°è±¡ç¯©é¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Filtered list:"
+msgstr "篩é¸åˆ—表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Fin"
+msgstr "最終"
+
+#: lib/RT/Tickets_Overlay.pm:2042 share/html/Search/Elements/PickBasics:188 share/html/Ticket/Create.html:185 share/html/Ticket/Elements/EditBasics:109
+msgid "Final Priority"
+msgstr "最終順ä½"
+
+#: lib/RT/Ticket_Overlay.pm:908 lib/RT/Tickets_Overlay.pm:102 share/html/Elements/RT__Queue/ColumnMap:99 share/html/Elements/RT__Ticket/ColumnMap:142 share/html/Search/Elements/BuildFormatString:99
+msgid "FinalPriority"
+msgstr "最終順ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Financial Department:"
+msgstr "財務部:"
+
+#: share/html/Admin/Users/index.html:86
+msgid "Find all users whose"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Find group whose"
+msgstr "尋找群組的"
+
+#: share/html/Admin/Groups/index.html:82 share/html/Admin/Queues/People.html:84 share/html/Ticket/Elements/EditPeople:57
+msgid "Find groups whose"
+msgstr "尋找群組的"
+
+#: NOT FOUND IN SOURCE
+msgid "Find new/open tickets"
+msgstr "尋找/開啟申請單"
+
+#: share/html/Admin/Queues/People.html:80 share/html/Ticket/Elements/EditPeople:53
+msgid "Find people whose"
+msgstr "尋找人員的"
+
+#: NOT FOUND IN SOURCE
+msgid "Find queues whose"
+msgstr "尋找表單的"
+
+#: share/html/Search/Results.html:150
+msgid "Find tickets"
+msgstr "尋找申請單"
+
+#: share/html/Install/Finish.html:48 share/html/Install/Global.html:65
+msgid "Finish"
+msgstr "完æˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Finish Approval"
+msgstr "簽核完畢"
+
+#: share/html/Ticket/Elements/Tabs:81
+msgid "First"
+msgstr "第一項"
+
+#: NOT FOUND IN SOURCE
+msgid "First page"
+msgstr "第一é "
+
+#: NOT FOUND IN SOURCE
+msgid "First-"
+msgstr "一"
+
+#: NOT FOUND IN SOURCE
+msgid "First-level Admins"
+msgstr "一階主管"
+
+#: NOT FOUND IN SOURCE
+msgid "First-level Users"
+msgstr "一階主管員工"
+
+#: NOT FOUND IN SOURCE
+msgid "Fixed shift"
+msgstr "固定ç­"
+
+#: lib/RT/StyleGuide.pod:758
+msgid "Foo Bar Baz"
+msgstr "甲 乙 丙"
+
+#: lib/RT/StyleGuide.pod:749
+msgid "Foo!"
+msgstr "甲ï¼"
+
+#: share/html/Search/Bulk.html:90
+msgid "Force change"
+msgstr "強制更æ›"
+
+#: NOT FOUND IN SOURCE
+msgid "Form Processing"
+msgstr "é›»å­è¡¨å–®ä½œæ¥­å€"
+
+#: share/html/Search/Edit.html:67 share/html/Search/Elements/EditFormat:52
+msgid "Format"
+msgstr "æ ¼å¼"
+
+#: etc/initialdata:380 etc/upgrade/3.7.15/content:4 share/html/Ticket/Elements/ShowTransaction:202 share/html/Ticket/Elements/Tabs:179
+msgid "Forward"
+msgstr "å¾€å‰"
+
+#: share/html/Ticket/Forward.html:79
+msgid "Forward Message"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:78
+msgid "Forward Message and Return"
+msgstr ""
+
+#: etc/initialdata:387 etc/upgrade/3.8.6/content:3
+msgid "Forward Ticket"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "Forward messages to third person(s)"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:114
+#. ($TicketObj->id)
+msgid "Forward ticket #%1"
+msgstr ""
+
+#: share/html/Ticket/Forward.html:113
+#. ($txn->id)
+msgid "Forward transaction #%1"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:120
+msgid "ForwardMessage"
+msgstr ""
+
+#: share/html/Search/Results.html:148
+#. ($ticketcount)
+msgid "Found %quant(%1,ticket)"
+msgstr "找到 %1 張申請單"
+
+#: lib/RT/Record.pm:929
+msgid "Found Object"
+msgstr "已找到物件"
+
+#: NOT FOUND IN SOURCE
+msgid "Fourth-"
+msgstr "å››"
+
+#: NOT FOUND IN SOURCE
+msgid "Freeform"
+msgstr "輸入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformContactInfo"
+msgstr "è¯çµ¡æ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformDate"
+msgstr "日期輸入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformExternal"
+msgstr "系統欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformMultiple"
+msgstr "多é‡è¼¸å…¥"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformNumber"
+msgstr "數值輸入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformPassword"
+msgstr "密碼輸入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformSingle"
+msgstr "單一輸入"
+
+#: NOT FOUND IN SOURCE
+msgid "FreeformTime"
+msgstr "時間輸入"
+
+#: share/html/Dashboards/Subscription.html:95
+msgid "Frequency"
+msgstr "頻率"
+
+#: lib/RT/Date.pm:108
+msgid "Fri"
+msgstr "星期五"
+
+#: NOT FOUND IN SOURCE
+msgid "Fri."
+msgstr "星期五"
+
+#: share/html/Dashboards/Subscription.html:113
+msgid "Friday"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowHistory:68 share/html/Ticket/Elements/ShowHistory:74
+msgid "Full headers"
+msgstr "完整標頭檔"
+
+#: NOT FOUND IN SOURCE
+msgid "Gecos"
+msgstr "登入帳號"
+
+#: NOT FOUND IN SOURCE
+msgid "Gender"
+msgstr "性別"
+
+#: lib/RT/Config.pm:169 lib/RT/Config.pm:216
+msgid "General"
+msgstr ""
+
+#: share/html/Tools/Offline.html:86
+msgid "Get template from file"
+msgstr "å–出檔案裡的範本"
+
+#: share/html/Install/index.html:76
+msgid "Getting started"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Getting the current user from a pgp sig\\n"
+msgstr "å–å¾—ç›®å‰ä½¿ç”¨è€…çš„ pgp 簽章\\n"
+
+#: lib/RT/Transaction_Overlay.pm:741
+#. ($New->Name)
+msgid "Given to %1"
+msgstr "交予 %1"
+
+#: share/html/Admin/Elements/Tabs:67 share/html/Admin/index.html:78 share/html/Elements/RT__Scrip/ColumnMap:64
+msgid "Global"
+msgstr "全域設定"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Approval"
+msgstr "全域簽核"
+
+#: share/html/Admin/Elements/EditCustomFields:57
+msgid "Global Custom Fields"
+msgstr "全域自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Keyword Selections"
+msgstr "全域關éµå­—é¸å–"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Rights:"
+msgstr "æ“有全域權é™åˆ—表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Scrips"
+msgstr "全域手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Global Setup"
+msgstr "全域設定"
+
+#: share/html/Admin/Global/CustomFields/index.html:61
+msgid "Global custom field configuration"
+msgstr "全域自訂欄ä½è¨­å®š"
+
+#: share/html/Admin/Global/MyRT.html:102
+#. ($pane)
+msgid "Global portlet %1 saved."
+msgstr "æˆåŠŸå„²å­˜å…¨åŸŸå…¥å£å…ƒä»¶ %1。"
+
+#: share/html/Admin/Elements/SelectTemplate:61
+#. (loc($Template->Name))
+msgid "Global template: %1"
+msgstr "全域範本:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "GlobalApproval"
+msgstr "全域簽核"
+
+#: share/html/Admin/Elements/UserTabs:76
+msgid "GnuPG"
+msgstr "GnuPG"
+
+#: lib/RT/Attachment_Overlay.pm:685 lib/RT/Attachment_Overlay.pm:720
+msgid "GnuPG error. Contact with administrator"
+msgstr "GnuPG 錯誤。請與系統管ç†è€…è¯çµ¡ã€‚"
+
+#: lib/RT/Attachment_Overlay.pm:640 lib/RT/Attachment_Overlay.pm:702
+msgid "GnuPG integration is disabled"
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:49
+msgid "GnuPG issues"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:88
+#. ($EmailAddress)
+msgid "GnuPG private key(s) for %1"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:86
+#. ($EmailAddress)
+msgid "GnuPG public key(s) for %1"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:73
+msgid "Go"
+msgstr "執行"
+
+#: share/html/Admin/CustomFields/index.html:89 share/html/Admin/Groups/index.html:83 share/html/Admin/Queues/People.html:82 share/html/Admin/Queues/People.html:86 share/html/Admin/Queues/index.html:73 share/html/Admin/Users/index.html:90 share/html/Approvals/index.html:54 share/html/Elements/RefreshHomepage:52 share/html/Ticket/Elements/EditPeople:55 share/html/Ticket/Elements/EditPeople:59 share/html/Tools/Offline.html:90
+msgid "Go!"
+msgstr "執行"
+
+#: NOT FOUND IN SOURCE
+msgid "Good pgp sig from %1\\n"
+msgstr "%1 的 pgp 簽章是正確的\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Goto page"
+msgstr "到é é¢"
+
+#: share/html/Elements/GotoTicket:49 share/html/SelfService/Elements/GotoTicket:49
+msgid "Goto ticket"
+msgstr "跳到申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Grand"
+msgstr "上"
+
+#: share/html/Ticket/Elements/ShowSummary:99 share/html/Ticket/Elements/Tabs:319 share/html/Ticket/ModifyLinks.html:61
+msgid "Graph"
+msgstr ""
+
+#: share/html/Search/Chart.html:88 share/html/Ticket/Graphs/Elements/EditGraphProperties:48
+msgid "Graph Properties"
+msgstr ""
+
+#: share/html/Search/Elements/Chart:108
+msgid "Graphical charts are not available."
+msgstr ""
+
+#: lib/RT/Record.pm:910 share/html/Ticket/Elements/AddWatchers:69 share/html/Ticket/Elements/ShowGroupMembers:58
+msgid "Group"
+msgstr "群組"
+
+#: NOT FOUND IN SOURCE
+msgid "Group %1 %2: %3"
+msgstr "群組 %1 %2:%3"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Admin"
+msgstr "群組管ç†å“¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Description"
+msgstr "群組æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Management"
+msgstr "群組管ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Members"
+msgstr "群組æˆå“¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Name"
+msgstr "群組å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Name:"
+msgstr "群組å稱:"
+
+#: share/html/Admin/Elements/CustomFieldTabs:70 share/html/Admin/Elements/GroupTabs:68 share/html/Admin/Elements/QueueTabs:84 share/html/Admin/Elements/SystemTabs:67 share/html/Admin/Global/index.html:70
+msgid "Group Rights"
+msgstr "群組權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Rights:"
+msgstr "æ“有群組權é™åˆ—表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Setup"
+msgstr "群組設定"
+
+#: NOT FOUND IN SOURCE
+msgid "Group Status"
+msgstr "群組狀態"
+
+#: lib/RT/Group_Overlay.pm:999
+#. ($new_member_obj->Object->Name)
+msgid "Group already has member: %1"
+msgstr "群組內已有此æˆå“¡: %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Group could not be created."
+msgstr "無法新增群組"
+
+#: share/html/Admin/Groups/Modify.html:119
+#. ($create_msg)
+msgid "Group could not be created: %1"
+msgstr "無法新增群組:%1"
+
+#: lib/RT/Group_Overlay.pm:478
+msgid "Group created"
+msgstr "群組新增完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "Group created: %1"
+msgstr "群組 %1 新增完畢"
+
+#: lib/RT/Group_Overlay.pm:734
+msgid "Group disabled"
+msgstr "å·²åœç”¨ç¾¤çµ„"
+
+#: lib/RT/Group_Overlay.pm:736
+msgid "Group enabled"
+msgstr "已啟用群組"
+
+#: lib/RT/Group_Overlay.pm:1174
+msgid "Group has no such member"
+msgstr "群組沒有這個æˆå“¡"
+
+#: lib/RT/Group_Overlay.pm:979 lib/RT/Queue_Overlay.pm:833 lib/RT/Queue_Overlay.pm:908 lib/RT/Ticket_Overlay.pm:1121 lib/RT/Ticket_Overlay.pm:1201
+msgid "Group not found"
+msgstr "找ä¸åˆ°ç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not found.\\n"
+msgstr "找ä¸åˆ°ç¾¤çµ„。\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Group not specified.\\n"
+msgstr "未指定群組。\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Group redescribed from %1 to %2"
+msgstr "群組æè¿° %1 已改為 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Group renamed from %1 to %2"
+msgstr "群組 %1 已改å為 %2"
+
+#: share/html/User/Elements/DelegateRights:102
+msgid "Group rights"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Group with Queue Rights"
+msgstr "æ“有表單權é™ç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Group's"
+msgstr "群組之"
+
+#: NOT FOUND IN SOURCE
+msgid "Group:"
+msgstr "群組:"
+
+#: lib/RT/CustomField_Overlay.pm:1176 share/html/Admin/Elements/GlobalCustomFieldTabs:63 share/html/Admin/Elements/SelectNewGroupMembers:67 share/html/Admin/Elements/Tabs:58 share/html/Admin/Global/CustomFields/index.html:71 share/html/Admin/Groups/Members.html:90 share/html/Admin/Queues/People.html:108 share/html/Admin/index.html:63 share/html/User/Groups/Members.html:90
+msgid "Groups"
+msgstr "群組"
+
+#: lib/RT/Group_Overlay.pm:1005
+msgid "Groups can't be members of their members"
+msgstr "ä¸èƒ½å°‡ç¾¤çµ„設為群組內æˆå“¡"
+
+#: share/html/Admin/Groups/index.html:96
+msgid "Groups matching search criteria"
+msgstr "符åˆæŸ¥è©¢æ¢ä»¶çš„群組"
+
+#: share/html/Admin/Users/Memberships.html:60
+msgid "Groups the user is member of (check box to delete)"
+msgstr ""
+
+#: share/html/Admin/Users/Memberships.html:74
+msgid "Groups the user is not member of (check box to add)"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowRequestor:94
+msgid "Groups this user belongs to"
+msgstr "使用者所屬的群組"
+
+#: NOT FOUND IN SOURCE
+msgid "Groups with Global Rights"
+msgstr "æ“有全域權é™ç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "HRMSDefined"
+msgstr "組織架構"
+
+#: NOT FOUND IN SOURCE
+msgid "HTML Attributes"
+msgstr "HTML 屬性"
+
+#: lib/RT/Tickets_Overlay.pm:114
+msgid "HasMember"
+msgstr "æ“有æˆå“¡"
+
+#: etc/initialdata:388 etc/upgrade/3.8.6/content:4
+msgid "Heading of a forwarded Ticket"
+msgstr ""
+
+#: etc/initialdata:381 etc/upgrade/3.7.15/content:5
+msgid "Heading of a forwarded message"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Health Insurance"
+msgstr "å¥ä¿è£œåŠ©èº«ä»½"
+
+#: lib/RT/Interface/CLI.pm:95 lib/RT/Interface/CLI.pm:95
+msgid "Hello!"
+msgstr "å—¨ï¼"
+
+#: lib/RT/StyleGuide.pod:765
+#. ($name)
+msgid "Hello, %1"
+msgstr "嗨,%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Help"
+msgstr "說明"
+
+#: NOT FOUND IN SOURCE
+msgid "Help Desks"
+msgstr "å„項業務窗å£"
+
+#: share/html/Install/Global.html:52
+msgid "Help us set up some useful defaults for RT."
+msgstr "幫忙我們為 RT 設定有用的é è¨­å€¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Hidden"
+msgstr "éš±è—"
+
+#: share/html/Admin/Elements/GroupTabs:72 share/html/Admin/Elements/QueueTabs:90 share/html/Admin/Elements/UserTabs:66 share/html/Ticket/Elements/ShowHistory:55 share/html/Ticket/Elements/Tabs:121
+msgid "History"
+msgstr "紀錄"
+
+#: share/html/Admin/Groups/History.html:64
+#. ($GroupObj->Name)
+msgid "History of the group %1"
+msgstr "群組 %1 的紀錄"
+
+#: share/html/Admin/Queues/History.html:64
+#. ($QueueObj->Name)
+msgid "History of the queue %1"
+msgstr ""
+
+#: share/html/Admin/Users/History.html:64
+#. ($UserObj->Name)
+msgid "History of the user %1"
+msgstr "使用者 %1 的紀錄"
+
+#: share/html/Elements/DashboardTabs:34
+msgid "Home"
+msgstr ""
+
+#: lib/RT/Config.pm:251
+msgid "Home page refresh interval"
+msgstr ""
+
+#: share/html/Elements/RT__User/ColumnMap:86
+msgid "HomePhone"
+msgstr "ä½è™•é›»è©±"
+
+#: share/html/Elements/Tabs:68
+msgid "Homepage"
+msgstr "主é "
+
+#: NOT FOUND IN SOURCE
+msgid "Hotel Expense"
+msgstr "ä½å®¿è²»"
+
+#: share/html/Dashboards/Subscription.html:141
+msgid "Hour"
+msgstr "時"
+
+#: share/html/Elements/SelectTimeUnits:53
+msgid "Hours"
+msgstr "å°æ™‚"
+
+#: lib/RT/Base.pm:136
+#. (6)
+msgid "I have %quant(%1,concrete mixer)."
+msgstr "我有 %quant(%1,份固體攪拌器)。"
+
+#: NOT FOUND IN SOURCE
+msgid "ID Number"
+msgstr "身分證號"
+
+#: NOT FOUND IN SOURCE
+msgid "ID Type"
+msgstr "身分類別"
+
+#: lib/RT/Date.pm:114
+msgid "ISO"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:1967 share/html/Ticket/Elements/ShowBasics:50
+msgid "Id"
+msgstr "編號"
+
+#: share/html/Admin/Users/Modify.html:67 share/html/User/Prefs.html:62
+msgid "Identity"
+msgstr "身份"
+
+#: lib/RT/Approval/Rule/Rejected.pm:54
+msgid "If an approval is rejected, reject the original and delete pending approvals"
+msgstr "若簽核單é­åˆ°é§å›žï¼Œå‰‡é€£å¸¶é§å›žåŽŸç”³è«‹å–®ï¼Œä¸¦åˆªé™¤å…¶ä»–相關的待簽核事項"
+
+#: share/html/Tools/Offline.html:75
+msgid "If no Requestor is specified, create tickets with this requestor."
+msgstr "若沒有指定申請者,則以此使用者作為申請者"
+
+#: share/html/Tools/Offline.html:66
+msgid "If no queue is specified, create tickets in this queue."
+msgstr "申請單若沒有指定表單,則將它新增在此表單內"
+
+#: bin/rt-crontool:370
+msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
+msgstr "如果此工具程å¼ç‚º setgid,惡æ„的本地端用戶å³èƒ½ç”±æ­¤å–å¾— RT 的管ç†å“¡æ¬Šé™ã€‚"
+
+#: share/html/Install/index.html:83
+msgid "If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p>"
+msgstr ""
+
+#: share/html/Install/Finish.html:60
+msgid "If you've change the Port that RT runs on, you'll need to restart the server in order to log in."
+msgstr "如果你已經更動了 RT 所使用的通信埠,你需è¦é‡æ–°å•Ÿå‹•ä¼ºæœå™¨ä»¥ä¾¿ç™»å…¥ RT 。"
+
+#: share/html/Admin/Queues/People.html:130 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:145 share/html/Ticket/ModifyPeople.html:63
+msgid "If you've updated anything above, be sure to"
+msgstr "若您已更新以上資料,請記得按一下"
+
+#: share/html/Install/DatabaseType.html:61
+#. ('<a href="http://search.cpan.org" target="_new">CPAN</a>')
+msgid "If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using %1 to download and install DBD::MySQL, DBD::Oracle or DBD::Pg."
+msgstr ""
+
+#: lib/RT/Record.pm:921
+msgid "Illegal value for %1"
+msgstr "%1 的值錯誤"
+
+#: NOT FOUND IN SOURCE
+msgid "Image"
+msgstr "圖片"
+
+#: lib/RT/Record.pm:924
+msgid "Immutable field"
+msgstr "此欄ä½å€¼ä¸å¯æ›´å‹•"
+
+#: NOT FOUND IN SOURCE
+msgid "Import"
+msgstr "匯入"
+
+#: share/html/Admin/CustomFields/index.html:86
+msgid "Include disabled custom fields in listing."
+msgstr "列出åœç”¨çš„自訂欄ä½"
+
+#: share/html/Admin/Groups/index.html:81
+msgid "Include disabled groups in listing."
+msgstr "列出åœç”¨çš„群組"
+
+#: share/html/Admin/Queues/index.html:72
+msgid "Include disabled queues in listing."
+msgstr "列出åœç”¨çš„表單"
+
+#: share/html/Admin/Users/index.html:88
+msgid "Include disabled users in search."
+msgstr "列出åœç”¨çš„使用者"
+
+#: share/html/Admin/CustomFields/Modify.html:101
+msgid "Include page"
+msgstr "引入é é¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Indirect Employee"
+msgstr "直接/間接員工"
+
+#: lib/RT/Config.pm:345
+msgid "Individual messages"
+msgstr ""
+
+#: etc/initialdata:406 etc/upgrade/3.7.10/content:15
+msgid "Inform RT owner that user(s) have problems with public keys"
+msgstr ""
+
+#: etc/initialdata:468 etc/upgrade/3.7.87/content:6
+msgid "Inform user that a dashboard he subscribed to is missing"
+msgstr ""
+
+#: etc/initialdata:431 etc/upgrade/3.7.10/content:40
+msgid "Inform user that a message he sent has invalid GnuPG data"
+msgstr ""
+
+#: etc/initialdata:397 etc/upgrade/3.7.10/content:6
+msgid "Inform user that he has problems with public key and couldn't recieve encrypted content"
+msgstr ""
+
+#: etc/initialdata:443
+msgid "Inform user that his password has been reset"
+msgstr ""
+
+#: etc/initialdata:419 etc/upgrade/3.7.10/content:28
+msgid "Inform user that we received an encrypted email and we have no private keys to decrypt"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:2017 share/html/Search/Elements/PickBasics:187
+msgid "Initial Priority"
+msgstr "åˆå§‹å„ªå…ˆé †ä½"
+
+#: lib/RT/Ticket_Overlay.pm:907 lib/RT/Ticket_Overlay.pm:909 lib/RT/Tickets_Overlay.pm:101 share/html/Elements/RT__Queue/ColumnMap:94 share/html/Elements/RT__Ticket/ColumnMap:136 share/html/Search/Elements/BuildFormatString:99
+msgid "InitialPriority"
+msgstr "åˆå§‹å„ªå…ˆé †ä½"
+
+#: share/html/Install/Global.html:65 share/html/Install/Initialize.html:48 share/html/Install/Initialize.html:61
+msgid "Initialize Database"
+msgstr "åˆå§‹åŒ–資料庫"
+
+#: lib/RT/ScripAction_Overlay.pm:131
+msgid "Input error"
+msgstr "輸入錯誤"
+
+#: lib/RT/CustomField_Overlay.pm:1129 lib/RT/CustomField_Overlay.pm:993 share/html/Elements/ValidateCustomFields:87
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+msgid "Input must match %1"
+msgstr "è¼¸å…¥å¿…é ˆç¬¦åˆ %1"
+
+#: share/html/Install/Elements/Wrapper:51
+msgid "Install RT"
+msgstr "å®‰è£ RT"
+
+#: NOT FOUND IN SOURCE
+msgid "Interest noted"
+msgstr "登記æˆåŠŸ"
+
+#: lib/RT/Ticket_Overlay.pm:3300
+msgid "Internal Error"
+msgstr "內部錯誤"
+
+#: lib/RT/Record.pm:294
+#. ($id->{error_message})
+msgid "Internal Error: %1"
+msgstr "內部錯誤:%1"
+
+#: share/html/Install/Global.html:90 share/html/Install/Sendmail.html:92
+#. ($_, $ARGS{$_})
+#. ('Administrator Email', $ARGS{OwnerEmail})
+msgid "Invalid %1: '%2' doesn't look like an email address"
+msgstr "無效的 %1: '%2' ä¸åƒæ˜¯é›»å­éƒµä»¶åœ°å€"
+
+#: share/html/Install/Basics.html:81
+#. ('WebPort')
+msgid "Invalid %1: it should be a number"
+msgstr "無效的 %1: 必須是數字"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid %1: that doesn't look like an email address"
+msgstr "無效的 %1: ä¸åƒæ˜¯é›»å­éƒµä»¶åœ°å€"
+
+#: lib/RT/Group_Overlay.pm:625
+msgid "Invalid Group Type"
+msgstr "錯誤的群組類別"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Right"
+msgstr "錯誤的權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid Type"
+msgstr "錯誤的類型"
+
+#: lib/RT/Record.pm:926
+msgid "Invalid data"
+msgstr "錯誤的資料"
+
+#: lib/RT/CustomField_Overlay.pm:986
+msgid "Invalid object"
+msgstr "無效的物件"
+
+#: lib/RT/Ticket_Overlay.pm:385
+msgid "Invalid owner object"
+msgstr "無效的æ“有者物件"
+
+#: NOT FOUND IN SOURCE
+msgid "Invalid owner. Defaulting to 'nobody'."
+msgstr "錯誤的承辦人。改為é è¨­æ‰¿è¾¦äººã€Œnobodyã€ã€‚"
+
+#: lib/RT/CustomField_Overlay.pm:223 lib/RT/CustomField_Overlay.pm:624
+#. ($msg)
+msgid "Invalid pattern: %1"
+msgstr "ä¸åˆç†çš„樣å¼ï¼š%1"
+
+#: lib/RT/Scrip_Overlay.pm:121 lib/RT/Template_Overlay.pm:221
+msgid "Invalid queue"
+msgstr "錯誤的表單"
+
+#: lib/RT/ACE_Overlay.pm:281
+msgid "Invalid right"
+msgstr "錯誤的權é™"
+
+#: lib/RT/ACE_Overlay.pm:142 lib/RT/ACE_Overlay.pm:269
+#. ($args{'RightName'})
+msgid "Invalid right. Couldn't canonicalize right '%1'"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:537
+msgid "Invalid syntax for email address"
+msgstr ""
+
+#: lib/RT/Record.pm:269
+#. ($key)
+msgid "Invalid value for %1"
+msgstr "%1 的值錯誤"
+
+#: lib/RT/Record.pm:1619
+msgid "Invalid value for custom field"
+msgstr "錯誤的自訂欄ä½å€¼"
+
+#: lib/RT/Ticket_Overlay.pm:306
+msgid "Invalid value for status"
+msgstr "錯誤的狀態值"
+
+#: lib/RT/Attachment_Overlay.pm:712
+msgid "Is not encrypted"
+msgstr "沒有加密"
+
+#: NOT FOUND IN SOURCE
+msgid "IssueStatement"
+msgstr "é€å‡ºé™³è¿°"
+
+#: bin/rt-crontool:371
+msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
+msgstr "請絕å°ä¸è¦è®“未具權é™çš„使用者執行此工具程å¼ã€‚"
+
+#: bin/rt-crontool:372
+msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
+msgstr "建議您新增一個隸屬於正確群組的低權é™ç³»çµ±ä½¿ç”¨è€…,並以該身份執行此工具程å¼ã€‚"
+
+#: bin/rt-crontool:332
+msgid "It takes several arguments:"
+msgstr "它接å—下列åƒæ•¸ï¼š"
+
+#: share/html/Search/Elements/EditFormat:86
+msgid "Italic"
+msgstr "斜體"
+
+#: NOT FOUND IN SOURCE
+msgid "Item Name"
+msgstr "å“å"
+
+#: NOT FOUND IN SOURCE
+msgid "Items"
+msgstr "ç­†"
+
+#: NOT FOUND IN SOURCE
+msgid "Items pending my approval"
+msgstr "待簽核項目"
+
+#: lib/RT/Date.pm:88
+msgid "Jan"
+msgstr "一月"
+
+#: NOT FOUND IN SOURCE
+msgid "Jan."
+msgstr "01"
+
+#: NOT FOUND IN SOURCE
+msgid "January"
+msgstr "一月"
+
+#: NOT FOUND IN SOURCE
+msgid "Job"
+msgstr "è·ç¨±"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "Join or leave this group"
+msgstr "加入或離開此群組"
+
+#: lib/RT/Date.pm:94
+msgid "Jul"
+msgstr "七月"
+
+#: NOT FOUND IN SOURCE
+msgid "Jul."
+msgstr "07"
+
+#: NOT FOUND IN SOURCE
+msgid "July"
+msgstr "七月"
+
+#: share/html/Ticket/Elements/Tabs:142
+msgid "Jumbo"
+msgstr "全部資訊"
+
+#: lib/RT/Date.pm:93
+msgid "Jun"
+msgstr "六月"
+
+#: NOT FOUND IN SOURCE
+msgid "Jun."
+msgstr "06"
+
+#: NOT FOUND IN SOURCE
+msgid "June"
+msgstr "六月"
+
+#: NOT FOUND IN SOURCE
+msgid "Keep 'localhost' if you're not sure"
+msgstr "è‹¥ä¸ç¢ºå®šï¼Œè«‹ä¿ç•™ 'localhost' 設定"
+
+#: lib/RT/Installer.pm:78
+msgid "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Keyword"
+msgstr "é—œéµå­—"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelAttachments"
+msgstr "附件標籤"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelContent"
+msgstr "內容標籤"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelSubject"
+msgstr "主題標籤"
+
+#: NOT FOUND IN SOURCE
+msgid "LabelURL"
+msgstr "éˆçµæ¨™ç±¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Lang"
+msgstr "使用語言"
+
+#: share/html/Admin/Users/Modify.html:96 share/html/Install/index.html:56 share/html/User/Prefs.html:78
+msgid "Language"
+msgstr "語言"
+
+#: NOT FOUND IN SOURCE
+msgid "Language."
+msgstr "語言."
+
+#: share/html/Search/Elements/EditFormat:80
+msgid "Large"
+msgstr "大"
+
+#: share/html/Ticket/Elements/Tabs:102
+msgid "Last"
+msgstr "上次更新"
+
+#: share/html/Ticket/Elements/EditDates:61 share/html/Ticket/Elements/ShowDates:62
+msgid "Last Contact"
+msgstr "上次è¯çµ¡"
+
+#: share/html/Elements/SelectDateType:52
+msgid "Last Contacted"
+msgstr "上次è¯çµ¡æ—¥æœŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Last Notified"
+msgstr "上次通知"
+
+#: share/html/Elements/ColumnMap:81 share/html/Elements/ColumnMap:86 share/html/Elements/SelectDateType:53
+msgid "Last Updated"
+msgstr "上次更新"
+
+#: share/html/Elements/ColumnMap:91
+msgid "Last Updated By"
+msgstr "最後更新由"
+
+#: share/html/Search/Elements/PickBasics:116
+msgid "Last updated by"
+msgstr "最後更新由"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:123 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdated"
+msgstr "上次更新"
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:97 share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedBy"
+msgstr "上次更新者"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "LastUpdatedRelative"
+msgstr "上次更新(相å°å€¼)"
+
+#: share/html/Dashboards/Subscription.html:169
+#. ($session{'CurrentUser'}->UserObj->EmailAddress)
+msgid "Leave blank to send to your current email address (%1)"
+msgstr ""
+
+#: lib/RT/Installer.pm:88
+msgid "Leave empty to use the default value for your database"
+msgstr "è‹¥è¦ä½¿ç”¨é è¨­å€¼ä½œç‚ºè³‡æ–™åº«è¨­å®šï¼Œè«‹ä¿ç•™ç©ºç™½"
+
+#: lib/RT/Installer.pm:101
+msgid "Leave this alone to use the default dba username for your database type"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowBasics:71
+msgid "Left"
+msgstr "剩餘時間"
+
+#: share/html/Ticket/Graphs/Elements/ShowLegends:48
+msgid "Legends"
+msgstr ""
+
+#: lib/RT/Config.pm:274
+msgid "Length in characters; Use '0' to show all messages inline, regardless of length"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:111
+msgid "Let this user access RT"
+msgstr "å…許這å使用者登入"
+
+#: share/html/Admin/Users/Modify.html:115
+msgid "Let this user be granted rights"
+msgstr "內部æˆå“¡ï¼ˆå…·æœ‰å€‹äººæ¬Šé™ï¼‰"
+
+#: share/html/Install/index.html:86
+msgid "Let's go!"
+msgstr "開始å§ï¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting owner to %1 %2"
+msgstr "é™åˆ¶æ‰¿è¾¦äººç‚º %1 到%2"
+
+#: NOT FOUND IN SOURCE
+msgid "Limiting queue to %1 %2"
+msgstr "é™åˆ¶è¡¨å–®ç‚º %1 到 %2"
+
+#: share/html/Search/Elements/EditFormat:66
+msgid "Link"
+msgstr "éˆçµ"
+
+#: NOT FOUND IN SOURCE
+msgid "Link a Queue"
+msgstr "申請表單連çµ"
+
+#: lib/RT/Record.pm:1310
+msgid "Link already exists"
+msgstr "æ­¤éˆçµå·²å­˜åœ¨"
+
+#: lib/RT/Record.pm:1324
+msgid "Link could not be created"
+msgstr "無法新增éˆçµ"
+
+#: NOT FOUND IN SOURCE
+msgid "Link created (%1)"
+msgstr "éˆçµ(%1)新增完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "Link deleted (%1)"
+msgstr "éˆçµ(%1)刪除完畢"
+
+#: lib/RT/Record.pm:1405
+msgid "Link not found"
+msgstr "找ä¸åˆ°éˆçµ"
+
+#: share/html/Ticket/ModifyLinks.html:48 share/html/Ticket/ModifyLinks.html:52
+#. ($Ticket->Id)
+msgid "Link ticket #%1"
+msgstr "éˆçµç”³è«‹å–® #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Link ticket %1"
+msgstr "éˆçµç”³è«‹å–® %1"
+
+#: share/html/Admin/CustomFields/Modify.html:93
+msgid "Link values to"
+msgstr "將值連çµè‡³"
+
+#: lib/RT/Tickets_Overlay.pm:108
+msgid "Linked"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:110
+msgid "LinkedFrom"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:109
+msgid "LinkedTo"
+msgstr "連çµè‡³"
+
+#: lib/RT/Ticket_Overlay.pm:612
+msgid "Linking. Permission denied"
+msgstr "連çµä¸­ã€‚權é™ä¸è¶³"
+
+#: share/html/Ticket/Create.html:224 share/html/Ticket/Elements/ShowSummary:100 share/html/Ticket/Elements/Tabs:138 share/html/Ticket/ModifyAll.html:81
+msgid "Links"
+msgstr "éˆçµ"
+
+#: NOT FOUND IN SOURCE
+msgid "List All Users"
+msgstr "列出所有用戶資料"
+
+#: share/html/Search/Elements/EditSearches:79
+msgid "Load"
+msgstr "載入"
+
+#: share/html/Search/Elements/EditSearches:77
+msgid "Load saved search:"
+msgstr "載入é å­˜æŸ¥è©¢ï¼š"
+
+#: lib/RT/System.pm:90
+msgid "LoadSavedSearch"
+msgstr "載入é å­˜æŸ¥è©¢"
+
+#: lib/RT/SharedSetting.pm:113
+#. ($self->ObjectName, $self->Name)
+msgid "Loaded %1 %2"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:166
+#. ($SavedSearch->{'Description'})
+msgid "Loaded original \"%1\" saved search"
+msgstr "載入原本的é å­˜æŸ¥è©¢ \"%1\""
+
+#: share/html/Admin/Tools/Configuration.html:65
+msgid "Loaded perl modules"
+msgstr "已載入的 Perl 模組"
+
+#: share/html/Search/Elements/EditSearches:168
+#. ($SavedSearch->{'Description'})
+msgid "Loaded saved search \"%1\""
+msgstr "載入é å­˜æŸ¥è©¢ \"%1\""
+
+#: NOT FOUND IN SOURCE
+msgid "Loaded search %1"
+msgstr "已載入查詢 %1"
+
+#: lib/RT/Config.pm:319
+msgid "Locale"
+msgstr ""
+
+#: lib/RT/Date.pm:121
+msgid "LocalizedDateTime"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:141 share/html/User/Prefs.html:132
+msgid "Location"
+msgstr "ä½ç½®"
+
+#: NOT FOUND IN SOURCE
+msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
+msgstr "登入目錄 %1 找ä¸åˆ°æˆ–無法寫入\\n。無法執行 RT。"
+
+#: NOT FOUND IN SOURCE
+msgid "LogToFile"
+msgstr "紀錄等級"
+
+#: NOT FOUND IN SOURCE
+msgid "LogToFileNamed"
+msgstr "紀錄檔å"
+
+#: share/html/Elements/PersonalQuickbar:7
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+msgid "Logged in as %1"
+msgstr "使用者:%1"
+
+#: share/html/NoAuth/Logout.html:54
+msgid "Logged out"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:789 share/html/Elements/Login:102 share/html/Elements/Login:70 share/html/Elements/Login:86
+msgid "Login"
+msgstr "登入"
+
+#: share/html/Elements/Logout:50 share/html/NoAuth/Logout.html:48
+msgid "Logout"
+msgstr "登出"
+
+#: NOT FOUND IN SOURCE
+msgid "Long-term contractor"
+msgstr "長期契約員工"
+
+#: lib/RT/CustomField_Overlay.pm:906
+msgid "Lookup type mismatch"
+msgstr "å°æ‡‰çš„類別ä¸ç¬¦"
+
+#: lib/RT/Config.pm:338
+msgid "Mail"
+msgstr ""
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:58
+msgid "Main type of links"
+msgstr ""
+
+#: share/html/Search/Bulk.html:89
+msgid "Make Owner"
+msgstr "新增承辦人"
+
+#: share/html/Search/Bulk.html:113
+msgid "Make Status"
+msgstr "新增ç¾æ³"
+
+#: share/html/Search/Bulk.html:121
+msgid "Make date Due"
+msgstr "新增到期日"
+
+#: share/html/Search/Bulk.html:123
+msgid "Make date Resolved"
+msgstr "新增解決日期"
+
+#: share/html/Search/Bulk.html:117
+msgid "Make date Started"
+msgstr "新增實際起始日期"
+
+#: share/html/Search/Bulk.html:115
+msgid "Make date Starts"
+msgstr "新增應起始日期"
+
+#: share/html/Search/Bulk.html:119
+msgid "Make date Told"
+msgstr "新增報告日期"
+
+#: share/html/Search/Bulk.html:109
+msgid "Make priority"
+msgstr "新增優先順ä½"
+
+#: share/html/Search/Bulk.html:111
+msgid "Make queue"
+msgstr "新增表單"
+
+#: share/html/Search/Bulk.html:107
+msgid "Make subject"
+msgstr "新增主題"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "Make this group visible to user"
+msgstr "讓此群組能被使用者看見"
+
+#: NOT FOUND IN SOURCE
+msgid "Male"
+msgstr "ç”·"
+
+#: share/html/Admin/index.html:74
+msgid "Manage custom fields and custom field values"
+msgstr "管ç†è‡ªè¨‚欄ä½åŠæ¬„ä½å€¼"
+
+#: share/html/Admin/index.html:65
+msgid "Manage groups and group membership"
+msgstr "管ç†ç¾¤çµ„åŠæ‰€å±¬æˆå“¡"
+
+#: share/html/Admin/index.html:81
+msgid "Manage properties and configuration which apply to all queues"
+msgstr "管ç†é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„屬性與設定"
+
+#: share/html/Admin/index.html:70
+msgid "Manage queues and queue-specific properties"
+msgstr "管ç†å„表單åŠç›¸é—œå±¬æ€§"
+
+#: share/html/Ticket/Graphs/index.html:67
+msgid "Manage saved graphs"
+msgstr ""
+
+#: share/html/Admin/index.html:60
+msgid "Manage users and passwords"
+msgstr "管ç†ä½¿ç”¨è€…與密碼"
+
+#: NOT FOUND IN SOURCE
+msgid "Manager"
+msgstr "經ç†"
+
+#: lib/RT/Date.pm:90
+msgid "Mar"
+msgstr "三月"
+
+#: NOT FOUND IN SOURCE
+msgid "Mar."
+msgstr "03"
+
+#: NOT FOUND IN SOURCE
+msgid "March"
+msgstr "三月"
+
+#: share/html/Ticket/Display.html:170
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Marketing Department"
+msgstr "行銷部"
+
+#: NOT FOUND IN SOURCE
+msgid "Match Pattern"
+msgstr "符åˆæ¨£å¼"
+
+#: lib/RT/Config.pm:272
+msgid "Maximum inline message length"
+msgstr ""
+
+#: lib/RT/Date.pm:92
+msgid "May"
+msgstr "五月"
+
+#: NOT FOUND IN SOURCE
+msgid "May."
+msgstr "05"
+
+#: share/html/Elements/RT__Group/ColumnMap:61
+msgid "Member"
+msgstr "æˆå“¡"
+
+#: lib/RT/Transaction_Overlay.pm:788
+#. ($value)
+msgid "Member %1 added"
+msgstr "æˆå“¡ %1 新增完畢"
+
+#: lib/RT/Transaction_Overlay.pm:828
+#. ($value)
+msgid "Member %1 deleted"
+msgstr "æˆå“¡ %1 刪除完畢"
+
+#: lib/RT/Group_Overlay.pm:1016
+#. ($new_member_obj->Object->Name)
+msgid "Member added: %1"
+msgstr "新增æˆå“¡å®Œç•¢: %1"
+
+#: lib/RT/Group_Overlay.pm:1181
+msgid "Member deleted"
+msgstr "æˆå“¡å·²åˆªé™¤"
+
+#: lib/RT/Group_Overlay.pm:1185
+msgid "Member not deleted"
+msgstr "æˆå“¡æœªåˆªé™¤"
+
+#: share/html/Elements/SelectLinkType:49
+msgid "Member of"
+msgstr "隸屬於"
+
+#: NOT FOUND IN SOURCE
+msgid "Member since"
+msgstr "註冊日期"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:111 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "MemberOf"
+msgstr "隸屬於"
+
+#: lib/RT/Graph/Tickets.pm:160 share/html/Admin/Elements/GroupTabs:65 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138 share/html/User/Elements/GroupTabs:65
+msgid "Members"
+msgstr "æˆå“¡"
+
+#: lib/RT/Transaction_Overlay.pm:785
+#. ($value)
+msgid "Membership in %1 added"
+msgstr "所屬群組 %1 加入完畢"
+
+#: lib/RT/Transaction_Overlay.pm:825
+#. ($value)
+msgid "Membership in %1 deleted"
+msgstr "所屬群組 %1 移除完畢"
+
+#: share/html/Admin/Elements/UserTabs:63
+msgid "Memberships"
+msgstr "所屬群組"
+
+#: share/html/Admin/Users/Memberships.html:96
+#. ($UserObj->Name)
+msgid "Memberships of the user %1"
+msgstr "使用者 %1 的所屬群組"
+
+#: lib/RT/Ticket_Overlay.pm:2631
+msgid "Merge Successful"
+msgstr "æ•´åˆå®Œç•¢"
+
+#: lib/RT/Ticket_Overlay.pm:2509
+msgid "Merge failed. Couldn't set EffectiveId"
+msgstr "æ•´åˆå¤±æ•—。無法設定 EffectiveId"
+
+#: lib/RT/Ticket_Overlay.pm:2526
+msgid "Merge failed. Couldn't set Status"
+msgstr "æ•´åˆå¤±æ•—。無法設定 Status"
+
+#: share/html/Elements/EditLinks:132 share/html/Ticket/Elements/BulkLinks:50
+msgid "Merge into"
+msgstr "æ•´åˆé€²"
+
+#: lib/RT/Transaction_Overlay.pm:791
+#. ($value)
+msgid "Merged into %1"
+msgstr "已整åˆé€² %1"
+
+#: share/html/Search/Bulk.html:163 share/html/Ticket/Update.html:130
+msgid "Message"
+msgstr "訊æ¯"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:163 share/html/Ticket/Elements/ShowTransactionAttachments:225
+msgid "Message body is not shown because sender requested not to inline it."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:245
+msgid "Message body not shown because it is not plain text."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Message body not shown because it is too large or is not plain text."
+msgstr "信件內文ä¸æ˜¯ç´”文字,因此無法顯示。"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:159
+msgid "Message body not shown because it is too large."
+msgstr ""
+
+#: lib/RT/Config.pm:212
+msgid "Message box height"
+msgstr "訊æ¯æ–¹å¡Šçš„高度"
+
+#: lib/RT/Config.pm:203
+msgid "Message box width"
+msgstr "訊æ¯æ–¹å¡Šçš„寬度"
+
+#: lib/RT/Ticket_Overlay.pm:2185
+msgid "Message could not be recorded"
+msgstr "無法紀錄訊æ¯"
+
+#: sbin/rt-email-digest:291
+msgid "Message for user"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2188
+msgid "Message recorded"
+msgstr "訊æ¯ç´€éŒ„æˆåŠŸ"
+
+#: share/html/Ticket/Elements/PreviewScrips:85
+msgid "Messages about this ticket will not be sent to..."
+msgstr "此申請單的相關訊æ¯ä¸æœƒå¯„é€çµ¦..."
+
+#: lib/RT/Installer.pm:146
+msgid "Minimum password length"
+msgstr "最å°å¯†ç¢¼é•·åº¦"
+
+#: share/html/Elements/SelectTimeUnits:50
+msgid "Minutes"
+msgstr "分é˜"
+
+#: NOT FOUND IN SOURCE
+msgid "Misc. Expense"
+msgstr "雜費"
+
+#: NOT FOUND IN SOURCE
+msgid "Mismatched parentheses"
+msgstr "未å°é½Šçš„括號"
+
+#: lib/RT/Record.pm:928
+msgid "Missing a primary key?: %1"
+msgstr "缺少主éµå€¼ï¼Ÿ(%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Missing mandatory fields"
+msgstr "缺少必填欄ä½"
+
+#: share/html/Admin/Users/Modify.html:196 share/html/User/Prefs.html:98
+msgid "Mobile"
+msgstr "行動電話"
+
+#: share/html/Elements/RT__User/ColumnMap:96
+msgid "MobilePhone"
+msgstr "行動電話"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "Modify Access Control List"
+msgstr "更改權é™æŽ§åˆ¶æ¸…å–®"
+
+#: share/html/Admin/Elements/ObjectCustomFields:98
+#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+msgid "Modify Custom Fields which apply to %1 for all %2"
+msgstr "更改é©ç”¨æ–¼ %1 內所有 %2 的自訂欄ä½"
+
+#: share/html/Admin/Elements/ObjectCustomFields:100
+#. (loc(lc($Types)))
+msgid "Modify Custom Fields which apply to all %1"
+msgstr "更改é©ç”¨æ–¼æ‰€æœ‰%1的自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Custom Fields which apply to all queues"
+msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„自訂欄ä½"
+
+#: share/html/Admin/Global/GroupRights.html:108 share/html/Admin/Groups/GroupRights.html:96 share/html/Admin/Queues/GroupRights.html:109
+msgid "Modify Group Rights"
+msgstr "更改群組權é™"
+
+#: share/html/Admin/Groups/Members.html:110 share/html/User/Groups/Members.html:103
+msgid "Modify Members"
+msgstr "更改æˆå“¡"
+
+#: share/html/User/Delegation.html:60
+msgid "Modify Rights"
+msgstr "更改權é™"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "Modify Scrip templates for this queue"
+msgstr "更改此表單的範本"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "Modify Scrips for this queue"
+msgstr "更改此表單的手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify System ACLS"
+msgstr "更改系統權é™æ¸…å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Template %1"
+msgstr "更改範本 %1"
+
+#: share/html/Admin/Global/UserRights.html:73 share/html/Admin/Groups/UserRights.html:74 share/html/Admin/Queues/UserRights.html:75
+msgid "Modify User Rights"
+msgstr "更改使用者權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify Workflow"
+msgstr "更改æµç¨‹"
+
+#: share/html/Admin/Queues/CustomField.html:68
+#. ($QueueObj->Name())
+msgid "Modify a CustomField for queue %1"
+msgstr "更改 %1 表單內的自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify a CustomField that applies to all queues"
+msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„自訂欄ä½"
+
+#: share/html/Admin/Queues/Scrip.html:83
+#. ($QueueObj->Name)
+msgid "Modify a scrip for queue %1"
+msgstr "更改 %1 表單內的手續"
+
+#: share/html/Admin/Global/Scrip.html:76
+msgid "Modify a scrip that applies to all queues"
+msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„手續"
+
+#: share/html/Admin/CustomFields/Objects.html:92
+#. ($CF->Name)
+msgid "Modify associated objects for %1"
+msgstr "更改é©ç”¨ %1 的物件"
+
+#: lib/RT/Queue_Overlay.pm:97
+msgid "Modify custom field values"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "Modify dashboards for this group"
+msgstr "修改此群組的控制é¢æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify dates for # %1"
+msgstr "更改 # %1 的日期"
+
+#: share/html/Ticket/ModifyDates.html:48 share/html/Ticket/ModifyDates.html:52
+#. ($TicketObj->Id)
+msgid "Modify dates for #%1"
+msgstr "更改 #%1 的日期"
+
+#: share/html/Ticket/ModifyDates.html:60
+#. ($TicketObj->Id)
+msgid "Modify dates for ticket # %1"
+msgstr "更改申請單 # %1 的日期"
+
+#: share/html/Admin/Global/index.html:66
+msgid "Modify global custom fields"
+msgstr "更改全域自訂欄ä½"
+
+#: share/html/Admin/Global/GroupRights.html:48 share/html/Admin/Global/GroupRights.html:51 share/html/Admin/Global/index.html:71
+msgid "Modify global group rights"
+msgstr "更改全域設定的群組權é™"
+
+#: share/html/Admin/Global/GroupRights.html:56
+msgid "Modify global group rights."
+msgstr "更改全域設定的群組權é™ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for groups"
+msgstr "更改全域設定的群組權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global rights for users"
+msgstr "更改全域設定的使用者權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify global scrips"
+msgstr "更改全域手續"
+
+#: share/html/Admin/Global/UserRights.html:48 share/html/Admin/Global/UserRights.html:51 share/html/Admin/Global/index.html:75
+msgid "Modify global user rights"
+msgstr "更改全域設定的使用者權é™"
+
+#: share/html/Admin/Global/UserRights.html:56
+msgid "Modify global user rights."
+msgstr "更改全域設定的使用者權é™ã€‚"
+
+#: lib/RT/Group_Overlay.pm:87
+msgid "Modify group metadata or delete group"
+msgstr "更改群組資料åŠåˆªé™¤ç¾¤çµ„"
+
+#: share/html/Admin/CustomFields/GroupRights.html:108
+#. ($CustomFieldObj->Name)
+msgid "Modify group rights for custom field %1"
+msgstr "æ›´æ”¹è‡ªè¨‚æ¬„ä½ %1 的群組權é™"
+
+#: share/html/Admin/Groups/GroupRights.html:48 share/html/Admin/Groups/GroupRights.html:52 share/html/Admin/Groups/GroupRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify group rights for group %1"
+msgstr "更改群組 %1 的群組權é™"
+
+#: share/html/Admin/Queues/GroupRights.html:48 share/html/Admin/Queues/GroupRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify group rights for queue %1"
+msgstr "更改表單 %1 的群組權é™"
+
+#: lib/RT/Group_Overlay.pm:89
+msgid "Modify membership roster for this group"
+msgstr "更改此群組的æˆå“¡åå–®"
+
+#: lib/RT/System.pm:85
+msgid "Modify one's own RT account"
+msgstr "更改個人的帳號資訊"
+
+#: share/html/Admin/Queues/People.html:48 share/html/Admin/Queues/People.html:52
+#. ($QueueObj->Name)
+msgid "Modify people related to queue %1"
+msgstr "更改éˆçµåˆ°è¡¨å–® %1 的人員"
+
+#: share/html/Ticket/ModifyPeople.html:48 share/html/Ticket/ModifyPeople.html:52 share/html/Ticket/ModifyPeople.html:60
+#. ($Ticket->id)
+#. ($Ticket->Id)
+msgid "Modify people related to ticket #%1"
+msgstr "更改申請單 #%1 éˆçµåˆ°çš„人員"
+
+#: lib/RT/Dashboard.pm:87
+msgid "Modify personal dashboards"
+msgstr "修改個人的控制é¢æ¿"
+
+#: share/html/Admin/Queues/Scrips.html:69
+#. ($QueueObj->Name)
+msgid "Modify scrips for queue %1"
+msgstr "更改表單 %1 的手續"
+
+#: share/html/Admin/Global/Scrips.html:67 share/html/Admin/Global/index.html:57
+msgid "Modify scrips which apply to all queues"
+msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„手續"
+
+#: lib/RT/Dashboard.pm:82
+msgid "Modify system dashboards"
+msgstr "修改系統控制é¢æ¿"
+
+#: share/html/Admin/Global/Template.html:101 share/html/Admin/Queues/Template.html:102
+#. (loc($TemplateObj->Name()))
+msgid "Modify template %1"
+msgstr "更改範本 %1"
+
+#: share/html/Admin/Global/Templates.html:67
+msgid "Modify templates which apply to all queues"
+msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„範本"
+
+#: share/html/Dashboards/Modify.html:126
+#. ($Dashboard->Name)
+msgid "Modify the dashboard %1"
+msgstr "修改控制é¢æ¿ %1"
+
+#: share/html/Admin/Global/index.html:79
+msgid "Modify the default \"RT at a glance\" view"
+msgstr "更改é è¨­çš„「RT 一覽ã€æª¢è¦–"
+
+#: share/html/Admin/Groups/Modify.html:129 share/html/User/Groups/Modify.html:109
+#. ($Group->Name)
+msgid "Modify the group %1"
+msgstr "更改群組 %1"
+
+#: share/html/Dashboards/Queries.html:86
+#. ($Dashboard->Name)
+msgid "Modify the queries of dashboard %1"
+msgstr "修改控制é¢æ¿ %1 的查詢"
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "Modify the queue watchers"
+msgstr "更改表單視察員"
+
+#: share/html/Dashboards/Subscription.html:276
+#. ($DashboardObj->Name)
+msgid "Modify the subscription to dashboard %1"
+msgstr "修改控制é¢æ¿ %1 的訂閱"
+
+#: share/html/Admin/Users/Modify.html:319
+#. ($UserObj->Name)
+msgid "Modify the user %1"
+msgstr "更改使用者 %1"
+
+#: share/html/Ticket/ModifyAll.html:61
+#. ($Ticket->Id)
+msgid "Modify ticket # %1"
+msgstr "更改申請單 # %1"
+
+#: share/html/Ticket/Modify.html:48 share/html/Ticket/Modify.html:51 share/html/Ticket/Modify.html:60
+#. ($TicketObj->Id)
+msgid "Modify ticket #%1"
+msgstr "更改申請單 # %1"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "Modify tickets"
+msgstr "更改申請單"
+
+#: share/html/Admin/CustomFields/UserRights.html:99
+#. ($CustomFieldObj->Name)
+msgid "Modify user rights for custom field %1"
+msgstr "æ›´æ”¹è‡ªè¨‚æ¬„ä½ %1 的使用者權é™"
+
+#: share/html/Admin/Groups/UserRights.html:48 share/html/Admin/Groups/UserRights.html:52 share/html/Admin/Groups/UserRights.html:58
+#. ($GroupObj->Name)
+msgid "Modify user rights for group %1"
+msgstr "更改群組 %1 的使用者權é™"
+
+#: share/html/Admin/Queues/UserRights.html:48 share/html/Admin/Queues/UserRights.html:52
+#. ($QueueObj->Name)
+msgid "Modify user rights for queue %1"
+msgstr "更改表單 %1 的使用者權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify watchers for queue '%1'"
+msgstr "更改 '%1' 的視察員"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify workflow %1"
+msgstr "更改æµç¨‹ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Modify workflows which apply to all queues"
+msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„æµç¨‹"
+
+#: lib/RT/Queue_Overlay.pm:94
+msgid "ModifyACL"
+msgstr "更改權é™æ¸…å–®"
+
+#: lib/RT/CustomField_Overlay.pm:114 lib/RT/Queue_Overlay.pm:97
+msgid "ModifyCustomField"
+msgstr "更改自訂欄ä½"
+
+#: lib/RT/Dashboard.pm:82
+msgid "ModifyDashboard"
+msgstr "修改控制é¢æ¿"
+
+#: lib/RT/Group_Overlay.pm:99
+msgid "ModifyGroupDashboard"
+msgstr "修改群組控制é¢æ¿"
+
+#: lib/RT/Dashboard.pm:87
+msgid "ModifyOwnDashboard"
+msgstr "修改自己的控制é¢æ¿"
+
+#: lib/RT/Group_Overlay.pm:92
+msgid "ModifyOwnMembership"
+msgstr "更改自己是å¦å±¬æ–¼æŸç¾¤çµ„"
+
+#: lib/RT/Queue_Overlay.pm:95
+msgid "ModifyQueueWatchers"
+msgstr "更改表單視察員"
+
+#: lib/RT/Queue_Overlay.pm:102
+msgid "ModifyScrips"
+msgstr "更改手續"
+
+#: lib/RT/System.pm:85
+msgid "ModifySelf"
+msgstr "更改個人帳號"
+
+#: lib/RT/Queue_Overlay.pm:99
+msgid "ModifyTemplate"
+msgstr "更改範本"
+
+#: lib/RT/Queue_Overlay.pm:115
+msgid "ModifyTicket"
+msgstr "更改申請單"
+
+#: lib/RT/Date.pm:104
+msgid "Mon"
+msgstr "星期一"
+
+#: NOT FOUND IN SOURCE
+msgid "Mon."
+msgstr "星期一"
+
+#: share/html/Dashboards/Subscription.html:109
+msgid "Monday"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:103
+msgid "Monday through Friday"
+msgstr ""
+
+#: share/html/Elements/DashboardTabs:40
+msgid "More"
+msgstr "更多"
+
+#: share/html/Ticket/Elements/ShowRequestor:75
+#. ($name)
+msgid "More about %1"
+msgstr "關於 %1 的進一步資訊"
+
+#: NOT FOUND IN SOURCE
+msgid "Morning Shift"
+msgstr "æ—©ç­"
+
+#: NOT FOUND IN SOURCE
+msgid "Move"
+msgstr "移動"
+
+#: NOT FOUND IN SOURCE
+msgid "Move All"
+msgstr "全移"
+
+#: share/html/Admin/Elements/PickCustomFields:85
+msgid "Move down"
+msgstr "下移"
+
+#: share/html/Admin/Elements/PickCustomFields:77
+msgid "Move up"
+msgstr "上移"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:50
+msgid "Multiple"
+msgstr "多é‡"
+
+#: lib/RT/User_Overlay.pm:160
+msgid "Must specify 'Name' attribute"
+msgstr "必須指定 'Name' 的屬性"
+
+#: share/html/SelfService/Elements/MyRequests:82
+#. ($friendly_status)
+msgid "My %1 tickets"
+msgstr "我的 %1 申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "My Approvals"
+msgstr "表單簽核"
+
+#: share/html/Tools/Elements/Tabs:70 share/html/Tools/index.html:73
+msgid "My Day"
+msgstr "今日事"
+
+#: NOT FOUND IN SOURCE
+msgid "My Requests"
+msgstr "表單申請追蹤"
+
+#: NOT FOUND IN SOURCE
+msgid "My Tickets"
+msgstr "表單處ç†"
+
+#: share/html/Approvals/index.html:48 share/html/Approvals/index.html:49
+msgid "My approvals"
+msgstr "表單簽核"
+
+#: share/html/Dashboards/Elements/SelectPrivacy:59
+msgid "My dashboards"
+msgstr "我的控制é¢æ¿"
+
+#: share/html/Search/Elements/SearchPrivacy:52 share/html/Search/Elements/SelectSearchObject:63 share/html/Search/Elements/SelectSearchesForObjects:56
+msgid "My saved searches"
+msgstr "我的é å­˜æŸ¥è©¢"
+
+#: lib/RT/Installer.pm:66
+msgid "MySQL"
+msgstr "MySQL"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "NEWLINE"
+msgstr "(æ›åˆ—)"
+
+#: share/html/Admin/CustomFields/Modify.html:61 share/html/Admin/Elements/AddCustomFieldValue:54 share/html/Admin/Elements/EditCustomField:57 share/html/Admin/Elements/EditCustomFieldValues:58 share/html/Admin/Elements/ModifyTemplate:51 share/html/Admin/Groups/Modify.html:67 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Dashboards/Elements/ShowDashboards:79 share/html/Dashboards/Modify.html:65 share/html/Elements/RT__Group/ColumnMap:77 share/html/Elements/RT__Queue/ColumnMap:74 share/html/Elements/RT__Template/ColumnMap:61 share/html/Elements/RT__User/ColumnMap:61 share/html/Search/Bulk.html:180 share/html/User/Groups/Modify.html:67
+msgid "Name"
+msgstr "å稱"
+
+#: lib/RT/User_Overlay.pm:167
+msgid "Name in use"
+msgstr "帳號已有人使用"
+
+#: share/html/Tools/index.html:60
+msgid "Named, shared collection of portlets"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Named, shared collection of saved searches"
+msgstr "有å稱並開放分享的é å­˜æŸ¥è©¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Nationality"
+msgstr "國ç±"
+
+#: NOT FOUND IN SOURCE
+msgid "Need approval from system administrator"
+msgstr "需先由系統管ç†å“¡é€²è¡Œæ‰¹å‡†"
+
+#: share/html/Ticket/Elements/ShowDates:80
+msgid "Never"
+msgstr "從未更動"
+
+#: share/html/Admin/Global/Scrip.html:65 share/html/Admin/Global/Scrips.html:62 share/html/Admin/Global/Template.html:80 share/html/Admin/Global/Templates.html:62 share/html/Dashboards/Elements/Tabs:102 share/html/Elements/RT__Ticket/ColumnMap:251
+msgid "New"
+msgstr "新建立"
+
+#: share/html/Elements/EditLinks:118
+msgid "New Links"
+msgstr "新增關係"
+
+#: share/html/Admin/Users/Modify.html:121 share/html/User/Prefs.html:115
+msgid "New Password"
+msgstr "新的密碼"
+
+#: etc/initialdata:308 etc/upgrade/3.8.2/content:36
+msgid "New Pending Approval"
+msgstr "新的待簽核事項"
+
+#: NOT FOUND IN SOURCE
+msgid "New Query"
+msgstr "新增查詢"
+
+#: NOT FOUND IN SOURCE
+msgid "New Request"
+msgstr "表單申請"
+
+#: share/html/Ticket/Elements/Tabs:269
+msgid "New Search"
+msgstr "新增查詢"
+
+#: NOT FOUND IN SOURCE
+msgid "New Watchers"
+msgstr "新增視察員"
+
+#: share/html/Tools/MyDay.html:53
+#. ($session{'CurrentUser'}->Name)
+msgid "New and open tickets for %1"
+msgstr ""
+
+#: share/html/Admin/Queues/CustomField.html:75
+msgid "New custom field"
+msgstr "新增自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "New dashboard"
+msgstr "新的控制é¢æ¿"
+
+#: share/html/User/Elements/GroupTabs:75
+msgid "New group"
+msgstr "新增群組"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:246 share/html/Ticket/Elements/ShowUpdateStatus:49
+msgid "New messages"
+msgstr "新訊æ¯"
+
+#: share/html/SelfService/Prefs.html:55
+msgid "New password"
+msgstr "新的密碼"
+
+#: lib/RT/User_Overlay.pm:725
+msgid "New password notification sent"
+msgstr "é€å‡ºæ–°å¯†ç¢¼é€šçŸ¥"
+
+#: NOT FOUND IN SOURCE
+msgid "New queue"
+msgstr "新增表單"
+
+#: share/html/Ticket/Elements/Reminders:123
+msgid "New reminder:"
+msgstr "新增æ醒項目:"
+
+#: NOT FOUND IN SOURCE
+msgid "New request"
+msgstr "æ出申請單"
+
+#: share/html/Admin/Elements/SelectRights:72
+msgid "New rights"
+msgstr "新增權é™"
+
+#: share/html/Admin/Queues/Scrip.html:73 share/html/Admin/Queues/Scrips.html:78
+msgid "New scrip"
+msgstr "新增手續"
+
+#: NOT FOUND IN SOURCE
+msgid "New search"
+msgstr "é‡æ–°æŸ¥è©¢"
+
+#: share/html/Admin/Queues/Template.html:81 share/html/Admin/Queues/Templates.html:73
+msgid "New template"
+msgstr "新增範本"
+
+#: share/html/SelfService/Elements/Tabs:87 share/html/SelfService/Elements/Tabs:91
+msgid "New ticket"
+msgstr "æ出申請單"
+
+#: lib/RT/Ticket_Overlay.pm:2486
+msgid "New ticket doesn't exist"
+msgstr "沒有新申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "New user"
+msgstr "新增使用者"
+
+#: share/html/Admin/Elements/CreateUserCalled:49
+msgid "New user called"
+msgstr "新使用者åå­—"
+
+#: share/html/Admin/Queues/People.html:78 share/html/Ticket/Elements/EditPeople:52
+msgid "New watchers"
+msgstr "新視察員"
+
+#: NOT FOUND IN SOURCE
+msgid "New window setting"
+msgstr "更新視窗設定"
+
+#: NOT FOUND IN SOURCE
+msgid "New workflow"
+msgstr "新增æµç¨‹"
+
+#: share/html/Elements/CollectionListPaging:104 share/html/Helpers/CalPopup.html:60 share/html/Install/Basics.html:62 share/html/Install/DatabaseDetails.html:72 share/html/Install/DatabaseType.html:70 share/html/Install/Global.html:65 share/html/Install/Global.html:65 share/html/Install/Sendmail.html:63 share/html/Ticket/Elements/Tabs:97
+msgid "Next"
+msgstr "下一項"
+
+#: NOT FOUND IN SOURCE
+msgid "Next Page"
+msgstr "下一é "
+
+#: NOT FOUND IN SOURCE
+msgid "Next page"
+msgstr "下一é "
+
+#: share/html/Elements/RT__User/ColumnMap:71
+msgid "NickName"
+msgstr "暱稱"
+
+#: share/html/Admin/Users/Modify.html:86 share/html/User/Prefs.html:74
+msgid "Nickname"
+msgstr "暱稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Night Shift"
+msgstr "å°å¤œç­"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:248 share/html/Widgets/Form/Boolean:79
+msgid "No"
+msgstr "å¦"
+
+#: lib/RT/SharedSetting.pm:224
+#. ($self->ObjectName)
+msgid "No %1 loaded"
+msgstr ""
+
+#: share/html/Admin/CustomFields/UserRights.html:88
+msgid "No Class defined"
+msgstr "尚未定義類別"
+
+#: share/html/Admin/CustomFields/Modify.html:167 share/html/Admin/Elements/EditCustomField:121
+msgid "No CustomField"
+msgstr "無自訂欄ä½"
+
+#: share/html/Admin/CustomFields/GroupRights.html:100
+msgid "No CustomField defined"
+msgstr "尚未定義自訂欄ä½"
+
+#: share/html/Admin/Groups/GroupRights.html:107 share/html/Admin/Groups/UserRights.html:90
+msgid "No Group defined"
+msgstr "尚未定義群組"
+
+#: lib/RT/Tickets_Overlay_SQL.pm:292
+msgid "No Query"
+msgstr "沒有查詢"
+
+#: share/html/Admin/Queues/GroupRights.html:120 share/html/Admin/Queues/UserRights.html:89
+msgid "No Queue defined"
+msgstr "尚未定義表單"
+
+#: bin/rt-crontool:122
+msgid "No RT user found. Please consult your RT administrator.\\n"
+msgstr "找ä¸åˆ° RT ä½¿ç”¨è€…ã€‚è«‹å‘ RT 管ç†å“¡æŸ¥è©¢ã€‚\\n"
+
+#: share/html/Search/Results.rdf:88
+msgid "No Subject"
+msgstr "沒有主題"
+
+#: share/html/Admin/Global/Template.html:99 share/html/Admin/Queues/Template.html:100
+msgid "No Template"
+msgstr "沒有範本"
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket "
+msgstr "未指定申請單。退出申請單 "
+
+#: NOT FOUND IN SOURCE
+msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
+msgstr "未指定申請單。退出申請單更改\\n\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "No Workflow"
+msgstr "沒有æµç¨‹"
+
+#: share/html/Approvals/Elements/Approve:79
+msgid "No action"
+msgstr "æš«ä¸è™•ç†"
+
+#: lib/RT/Record.pm:923
+msgid "No column specified"
+msgstr "未指定欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "No command found\\n"
+msgstr "找ä¸åˆ°å‘½ä»¤"
+
+#: share/html/Ticket/Elements/ShowRequestor:83
+msgid "No comment entered about this user"
+msgstr "沒有å°é€™å使用者的評論"
+
+#: NOT FOUND IN SOURCE
+msgid "No correspondence attached"
+msgstr "沒有附上申請單回覆"
+
+#: share/html/Dashboards/Elements/ShowDashboards:71
+msgid "No dashboards."
+msgstr "無控制é¢æ¿"
+
+#: lib/RT/Action.pm:183 lib/RT/Condition.pm:197 lib/RT/Search.pm:132 lib/RT/Search/ActiveTicketsInQueue.pm:75 lib/RT/Search/Googleish.pm:89
+#. (ref $self)
+msgid "No description for %1"
+msgstr "æ²’æœ‰å° %1 çš„æè¿°"
+
+#: lib/RT/Users_Overlay.pm:188
+msgid "No group specified"
+msgstr "未指定群組"
+
+#: share/html/Admin/Groups/index.html:55
+msgid "No groups matching search criteria found."
+msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„群組。"
+
+#: lib/RT/Attachment_Overlay.pm:671
+msgid "No key suitable for encryption"
+msgstr ""
+
+#: share/html/Admin/Elements/ShowKeyInfo:50
+msgid "No keys for this address"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2129
+msgid "No message attached"
+msgstr "沒有附上訊æ¯"
+
+#: lib/RT/CustomField_Overlay.pm:321
+msgid "No name provided"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:651
+msgid "No need to encrypt"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:935
+msgid "No password set"
+msgstr "沒有設定密碼"
+
+#: lib/RT/Queue_Overlay.pm:350
+msgid "No permission to create queues"
+msgstr "沒有新增表單的權é™"
+
+#: lib/RT/Ticket_Overlay.pm:302 lib/RT/Ticket_Overlay.pm:832
+#. ($QueueObj->Name)
+msgid "No permission to create tickets in the queue '%1'"
+msgstr "沒有在表單 '%1' 新增申請單的權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "No permission to create users"
+msgstr "沒有新增使用者的權é™"
+
+#: share/html/SelfService/Display.html:207
+msgid "No permission to display that ticket"
+msgstr "沒有顯示該申請單的權é™"
+
+#: share/html/Search/Elements/EditSearches:231
+msgid "No permission to save system-wide searches"
+msgstr "沒有儲存全域é å­˜æŸ¥è©¢çš„權é™"
+
+#: lib/RT/User_Overlay.pm:1383
+msgid "No permission to set preferences"
+msgstr "沒有設定權é™"
+
+#: share/html/SelfService/Update.html:122
+msgid "No permission to view update ticket"
+msgstr "沒有檢視申請單更新的權é™"
+
+#: lib/RT/Queue_Overlay.pm:881 lib/RT/Ticket_Overlay.pm:1180
+msgid "No principal specified"
+msgstr "未指定單ä½"
+
+#: share/html/Admin/Queues/People.html:180 share/html/Admin/Queues/People.html:190
+msgid "No principals selected."
+msgstr "未指定單ä½ã€‚"
+
+#: share/html/Admin/Users/GnuPG.html:72
+msgid "No private key"
+msgstr "ç„¡ç§å¯†é‡‘é‘°"
+
+#: NOT FOUND IN SOURCE
+msgid "No protocol specified in %1"
+msgstr "%1 內未指定å”定"
+
+#: share/html/Admin/Queues/index.html:58
+msgid "No queues matching search criteria found."
+msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„表單。"
+
+#: lib/RT/ACE_Overlay.pm:223
+msgid "No right specified"
+msgstr ""
+
+#: share/html/Admin/Elements/SelectRights:111
+msgid "No rights found"
+msgstr "找ä¸åˆ°æ¬Šé™"
+
+#: share/html/Admin/Elements/SelectRights:64
+msgid "No rights granted."
+msgstr "沒有é¸å®šæ¬Šé™"
+
+#: NOT FOUND IN SOURCE
+msgid "No search loaded"
+msgstr "尚未載入查詢"
+
+#: share/html/Search/Bulk.html:289
+msgid "No search to operate on."
+msgstr "沒有è¦é€²è¡Œçš„查詢"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:101
+msgid "No subject"
+msgstr "沒有標題"
+
+#: lib/RT/User_Overlay.pm:1690
+msgid "No such key or it's not suitable for signing"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "No ticket id specified"
+msgstr "未指定申請單編號"
+
+#: share/html/Search/Chart:98
+msgid "No tickets found."
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:590 lib/RT/Transaction_Overlay.pm:616
+msgid "No transaction type specified"
+msgstr "未指定更動報告類別"
+
+#: share/html/Elements/GnuPG/SelectKeyForEncryption:49
+msgid "No usable keys."
+msgstr "ç„¡å¯ç”¨çš„金鑰"
+
+#: NOT FOUND IN SOURCE
+msgid "No user or email address specified"
+msgstr "未指定使用者或電å­éƒµä»¶åœ°å€"
+
+#: share/html/Admin/Users/index.html:56
+msgid "No users matching search criteria found."
+msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„使用者。"
+
+#: NOT FOUND IN SOURCE
+msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
+msgstr "找ä¸åˆ°åˆæ ¼çš„ RT 使用者。RT cvs 處ç†å™¨å·²åœç”¨ã€‚è«‹å‘ RT 管ç†è€…è©¢å•ã€‚\\n"
+
+#: lib/RT/Record.pm:920
+msgid "No value sent to _Set!\\n"
+msgstr "_Set 沒有收到任何值!\\n"
+
+#: share/html/Elements/QuickCreate:61
+msgid "Nobody"
+msgstr "沒有人"
+
+#: share/html/Dashboards/Elements/ShowSubscription:58
+msgid "None"
+msgstr "ç„¡"
+
+#: lib/RT/Record.pm:925
+msgid "Nonexistant field?"
+msgstr "欄ä½ä¸å­˜åœ¨ï¼Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "Normal Users"
+msgstr "一般用戶群組"
+
+#: share/html/Search/Chart:154 share/html/Search/Elements/Chart:91
+msgid "Not Set"
+msgstr "未設定"
+
+#: NOT FOUND IN SOURCE
+msgid "Not configured to fetch the content from a %1 in %2"
+msgstr "未設定æˆå¾ž %2 å…§æ“·å– %1"
+
+#: lib/RT/CustomField_Overlay.pm:355
+msgid "Not found"
+msgstr "找ä¸åˆ°"
+
+#: NOT FOUND IN SOURCE
+msgid "Not logged in"
+msgstr "尚未登入"
+
+#: share/html/Elements/PersonalQuickbar:12
+msgid "Not logged in."
+msgstr "尚未登入"
+
+#: lib/RT/Date.pm:398
+msgid "Not set"
+msgstr "尚未設定"
+
+#: share/html/NoAuth/Reminder.html:50
+msgid "Not yet implemented."
+msgstr "尚未完工。"
+
+#: NOT FOUND IN SOURCE
+msgid "Not yet implemented...."
+msgstr "尚未完工..."
+
+#: share/html/Approvals/Elements/Approve:83
+msgid "Notes"
+msgstr "備註"
+
+#: NOT FOUND IN SOURCE
+msgid "Notes:"
+msgstr "備註:"
+
+#: lib/RT/User_Overlay.pm:728
+msgid "Notification could not be sent"
+msgstr "無法é€å‡ºé€šçŸ¥"
+
+#: etc/initialdata:56
+msgid "Notify AdminCcs"
+msgstr "通知管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:52
+msgid "Notify AdminCcs as Comment"
+msgstr "以評論方å¼é€šçŸ¥ç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:48 etc/upgrade/3.1.17/content:6
+msgid "Notify Ccs"
+msgstr "通知副本收件人"
+
+#: etc/initialdata:44 etc/upgrade/3.1.17/content:2
+msgid "Notify Ccs as Comment"
+msgstr "以評論方å¼é€šçŸ¥å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:83
+msgid "Notify Other Recipients"
+msgstr "通知其他收件人"
+
+#: etc/initialdata:79
+msgid "Notify Other Recipients as Comment"
+msgstr "以評論方å¼é€šçŸ¥å…¶ä»–收件人"
+
+#: etc/initialdata:40
+msgid "Notify Owner"
+msgstr "通知承辦人"
+
+#: etc/initialdata:36
+msgid "Notify Owner as Comment"
+msgstr "以評論方å¼é€šçŸ¥æ‰¿è¾¦äºº"
+
+#: etc/initialdata:357 etc/upgrade/3.8.2/content:85
+msgid "Notify Owner of their rejected ticket"
+msgstr "通知承辦人申請單已é§å›ž"
+
+#: etc/initialdata:370 etc/upgrade/3.8.2/content:98
+msgid "Notify Owner of their ticket has been approved and is ready to be acted on"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by all approvers"
+msgstr "通知承辦人申請單已完æˆå…¨éƒ¨ç°½æ ¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Owner of their ticket has been approved by some approver"
+msgstr "通知承辦人申請單已完æˆæŸé …簽核"
+
+#: lib/RT/Approval/Rule/Created.pm:56 lib/RT/Approval/Rule/Passed.pm:54
+msgid "Notify Owner of their ticket has been approved by some or all approvers"
+msgstr ""
+
+#: etc/initialdata:75
+msgid "Notify Owner, Requestors, Ccs and AdminCcs"
+msgstr ""
+
+#: etc/initialdata:71
+msgid "Notify Owner, Requestors, Ccs and AdminCcs as Comment"
+msgstr ""
+
+#: etc/initialdata:310 etc/upgrade/3.8.2/content:38
+msgid "Notify Owners and AdminCcs of new items pending their approval"
+msgstr "æ•´ç†å¾…簽核事項,通知承辦人åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:343 etc/upgrade/3.8.2/content:71
+msgid "Notify Requestor of their ticket has been approved by all approvers"
+msgstr ""
+
+#: etc/initialdata:329 etc/upgrade/3.8.2/content:57
+msgid "Notify Requestor of their ticket has been approved by some approver"
+msgstr ""
+
+#: etc/initialdata:32
+msgid "Notify Requestors"
+msgstr "通知申請人"
+
+#: etc/initialdata:66
+msgid "Notify Requestors and Ccs"
+msgstr "通知申請人åŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:61
+msgid "Notify Requestors and Ccs as Comment"
+msgstr "以評論方å¼é€šçŸ¥ç”³è«‹äººåŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs"
+msgstr "通知申請人ã€å‰¯æœ¬åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify Requestors, Ccs and AdminCcs as Comment"
+msgstr "以評論方å¼é€šçŸ¥ç”³è«‹äººã€å‰¯æœ¬åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: lib/RT/Config.pm:292
+msgid "Notify me of unread messages"
+msgstr "若有未讀å–訊æ¯è«‹é€šçŸ¥æˆ‘"
+
+#: NOT FOUND IN SOURCE
+msgid "Notify people:"
+msgstr "通知å°è±¡"
+
+#: lib/RT/Date.pm:98
+msgid "Nov"
+msgstr "å一月"
+
+#: NOT FOUND IN SOURCE
+msgid "Nov."
+msgstr "11"
+
+#: NOT FOUND IN SOURCE
+msgid "November"
+msgstr "å一月"
+
+#: lib/RT/Config.pm:242
+msgid "Number of search results"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "OIN104"
+msgstr "104eHRMS 介é¢"
+
+#: NOT FOUND IN SOURCE
+msgid "OK"
+msgstr "確定"
+
+#: share/html/Search/Elements/SelectAndOr:49
+msgid "OR"
+msgstr "OR"
+
+#: lib/RT/Record.pm:308
+msgid "Object could not be created"
+msgstr "無法新增物件"
+
+#: lib/RT/Record.pm:120
+msgid "Object could not be deleted"
+msgstr "無法刪除物件"
+
+#: lib/RT/Record.pm:325
+msgid "Object created"
+msgstr "物件新增完畢"
+
+#: lib/RT/Record.pm:117
+msgid "Object deleted"
+msgstr "物件刪除完畢"
+
+#: share/html/Admin/CustomFields/Objects.html:74 share/html/Admin/Elements/ObjectCustomFields:65
+#. ($ObjectType)
+#. ($LookupType)
+msgid "Object of type %1 cannot take custom fields"
+msgstr "自訂欄ä½ä¸é©ç”¨æ–¼é¡žåˆ¥ç‚º %1 的物件"
+
+#: lib/RT/CustomField_Overlay.pm:940
+msgid "Object type mismatch"
+msgstr "物件類別ä¸ç¬¦"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:53
+msgid "Objects list is empty"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Occupation Status"
+msgstr "在è·ç‹€æ…‹"
+
+#: lib/RT/Date.pm:97
+msgid "Oct"
+msgstr "å月"
+
+#: NOT FOUND IN SOURCE
+msgid "Oct."
+msgstr "10"
+
+#: NOT FOUND IN SOURCE
+msgid "October"
+msgstr "å月"
+
+#: NOT FOUND IN SOURCE
+msgid "Office Phone"
+msgstr "辦公室電話"
+
+#: share/html/Tools/Elements/Tabs:62 share/html/Tools/index.html:63
+msgid "Offline"
+msgstr "離線"
+
+#: share/html/Tools/Offline.html:51
+msgid "Offline edits"
+msgstr "離線編輯"
+
+#: share/html/Tools/Offline.html:48
+msgid "Offline upload"
+msgstr "離線上載"
+
+#: lib/RT/Transaction_Overlay.pm:360
+#. ($self->CreatedAsString, $self->CreatorObj->Name)
+msgid "On %1, %2 wrote:"
+msgstr "在 %1 時,%2 寫到:"
+
+#: NOT FOUND IN SOURCE
+msgid "On Change"
+msgstr "更改申請單時"
+
+#: etc/initialdata:177 etc/upgrade/3.7.1/content:2
+msgid "On Close"
+msgstr ""
+
+#: etc/initialdata:121
+msgid "On Comment"
+msgstr "評論時"
+
+#: etc/initialdata:114
+msgid "On Correspond"
+msgstr "回覆申請單時"
+
+#: etc/initialdata:103
+msgid "On Create"
+msgstr "新增申請單時"
+
+#: etc/initialdata:142
+msgid "On Owner Change"
+msgstr "承辦人改變時"
+
+#: etc/initialdata:135 etc/upgrade/3.1.17/content:15
+msgid "On Priority Change"
+msgstr "優先順ä½æ”¹è®Šæ™‚"
+
+#: etc/initialdata:150
+msgid "On Queue Change"
+msgstr "表單改變時"
+
+#: etc/initialdata:163 etc/upgrade/3.8.3/content:2
+msgid "On Reject"
+msgstr ""
+
+#: etc/initialdata:182 etc/upgrade/3.7.1/content:7
+msgid "On Reopen"
+msgstr ""
+
+#: etc/initialdata:156
+msgid "On Resolve"
+msgstr "解決申請單時"
+
+#: etc/initialdata:127
+msgid "On Status Change"
+msgstr "ç¾æ³æ”¹è®Šæ™‚"
+
+#: etc/initialdata:108
+msgid "On Transaction"
+msgstr "發生更動時"
+
+#: share/html/Ticket/Elements/UpdateCc:62
+msgid "One-time Bcc"
+msgstr "密件副本(僅此一次)"
+
+#: share/html/Ticket/Elements/UpdateCc:48
+msgid "One-time Cc"
+msgstr "副本(僅此一次)"
+
+#: share/html/Approvals/Elements/PendingMyApproval:72
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />")
+msgid "Only show approvals for requests created after %1"
+msgstr "僅顯示 %1 之後新增的申請單"
+
+#: share/html/Approvals/Elements/PendingMyApproval:70
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />")
+msgid "Only show approvals for requests created before %1"
+msgstr "僅顯示 %1 之å‰æ–°å¢žçš„申請單"
+
+#: share/html/Admin/CustomFields/index.html:77
+msgid "Only show custom fields for:"
+msgstr "僅顯示é©ç”¨æ–¼ä¸‹åˆ—項目的自訂欄ä½ï¼š"
+
+#: NOT FOUND IN SOURCE
+msgid "Open"
+msgstr "é–‹å•Ÿ"
+
+#: etc/initialdata:94
+msgid "Open Tickets"
+msgstr "開啟申請單"
+
+#: share/html/Elements/MakeClicky:58
+msgid "Open URL"
+msgstr "é–‹å•Ÿ URL"
+
+#: share/html/Ticket/Elements/Tabs:196
+msgid "Open it"
+msgstr "é–‹å•Ÿ"
+
+#: share/html/SelfService/Elements/Tabs:78 share/html/SelfService/index.html:48
+msgid "Open tickets"
+msgstr "開啟的申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in a new window"
+msgstr "在新視窗開啟(列表的)申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Open tickets (from listing) in another window"
+msgstr "在å¦ä¸€å€‹è¦–窗開啟(列表的)申請單"
+
+#: etc/initialdata:95
+msgid "Open tickets on correspondence"
+msgstr "收到回覆時å³é–‹å•Ÿç”³è«‹å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "Opened Tickets"
+msgstr "已申請é‹è¡Œä¸­è¡¨å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "Opinion"
+msgstr "æ„見"
+
+#: NOT FOUND IN SOURCE
+msgid "Option Description"
+msgstr "é¸é …æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Option Name"
+msgstr "é¸é …å稱"
+
+#: share/html/Prefs/MyRT.html:74
+msgid "Options"
+msgstr "é¸é …"
+
+#: lib/RT/Installer.pm:69
+msgid "Oracle"
+msgstr "Oracle"
+
+#: share/html/Search/Elements/DisplayOptions:56
+msgid "Order by"
+msgstr "排åºæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Ordering and sorting"
+msgstr "é †åºèˆ‡æŽ’åºæ–¹å¼"
+
+#: share/html/Admin/Users/Modify.html:144 share/html/Elements/RT__User/ColumnMap:81 share/html/User/Prefs.html:135
+msgid "Organization"
+msgstr "組織å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Organization:"
+msgstr "組織:"
+
+#: share/html/Approvals/Elements/Approve:55
+#. ($approving->Id, $approving->Subject)
+msgid "Originating ticket: #%1"
+msgstr "原申請單:#%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Other comma-delimited email addresses"
+msgstr "其他e-mail帳號 (僅e-mail通知;多筆帳號請用逗號','å€éš”)"
+
+#: NOT FOUND IN SOURCE
+msgid "Out of range"
+msgstr "期é™å¤–"
+
+#: lib/RT/Transaction_Overlay.pm:679
+msgid "Outgoing email about a comment recorded"
+msgstr "已紀錄發é€çš„評論郵件"
+
+#: lib/RT/Transaction_Overlay.pm:683
+msgid "Outgoing email recorded"
+msgstr "已紀錄發é€çš„郵件"
+
+#: share/html/Admin/Queues/Modify.html:87
+msgid "Over time, priority moves toward"
+msgstr "優先順ä½éš¨æ™‚間增加調整為"
+
+#: NOT FOUND IN SOURCE
+msgid "Override current custom fields with fields from %1"
+msgstr "以 %1 表單的自訂欄ä½å–代ç¾æœ‰æ¬„ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Override global rights"
+msgstr "å–代全域權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "OverrideGlobalACL status %1"
+msgstr "å–ä»£å…¨åŸŸæ¬Šé™ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Overview"
+msgstr "總覽"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "Own tickets"
+msgstr "承辦申請單"
+
+#: lib/RT/Queue_Overlay.pm:114
+msgid "OwnTicket"
+msgstr "承辦申請單"
+
+#: lib/RT/ACE_Overlay.pm:99 lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:2207 lib/RT/Tickets_Overlay.pm:98 share/html/Elements/QuickCreate:58 share/html/Elements/RT__Ticket/ColumnMap:274 share/html/Elements/RT__Ticket/ColumnMap:89 share/html/Search/Elements/PickBasics:114 share/html/Ticket/Create.html:76 share/html/Ticket/Elements/EditBasics:63 share/html/Ticket/Elements/EditPeople:66 share/html/Ticket/Elements/EditPeople:67 share/html/Ticket/Elements/Reminders:138 share/html/Ticket/Elements/ShowPeople:50 share/html/Ticket/Update.html:71
+msgid "Owner"
+msgstr "承辦人"
+
+#: lib/RT/Ticket_Overlay.pm:641
+#. ($DeferOwner->Name)
+msgid "Owner '%1' does not have rights to own this ticket."
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:2841
+#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
+msgid "Owner changed from %1 to %2"
+msgstr "承辦人已從 %1 改為 %2"
+
+#: lib/RT/Ticket_Overlay.pm:398
+msgid "Owner could not be set."
+msgstr "無法設定承辦人。"
+
+#: lib/RT/Transaction_Overlay.pm:729
+#. ($Old->Name , $New->Name)
+msgid "Owner forcibly changed from %1 to %2"
+msgstr "強制將承辦人從 %1 改為 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Owner is"
+msgstr "承辦人"
+
+#: NOT FOUND IN SOURCE
+msgid "Owner's Phone"
+msgstr "承辦人電話"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "OwnerName"
+msgstr "承辦人å稱"
+
+#: share/html/Elements/CollectionListPaging:63
+msgid "Page"
+msgstr "é "
+
+#: NOT FOUND IN SOURCE
+msgid "Page %1 of %2"
+msgstr "第 %1/%2 é "
+
+#: share/html/Elements/CollectionListPaging:60
+msgid "Page 1 of 1"
+msgstr ""
+
+#: share/html/dhandler:48 share/html/dhandler:49
+msgid "Page not found"
+msgstr "找ä¸åˆ°é é¢"
+
+#: share/html/Admin/Users/Modify.html:201 share/html/User/Prefs.html:102
+msgid "Pager"
+msgstr "呼å«å™¨"
+
+#: share/html/Elements/RT__User/ColumnMap:101
+msgid "PagerPhone"
+msgstr "呼å«å™¨è™Ÿç¢¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Parameter"
+msgstr "呼å«åƒæ•¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Parent"
+msgstr "上級"
+
+#: share/html/Elements/EditLinks:145 share/html/Elements/EditLinks:73 share/html/Elements/ShowLinks:90 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:230 share/html/Ticket/Elements/BulkLinks:62
+msgid "Parents"
+msgstr "æ¯ç”³è«‹å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "Park Space"
+msgstr "åœè»Šä½ç”³è«‹"
+
+#: share/html/Elements/Login:97 share/html/User/Prefs.html:111
+msgid "Password"
+msgstr "密碼"
+
+#: share/html/NoAuth/Reminder.html:48
+msgid "Password Reminder"
+msgstr "密碼æ示"
+
+#: lib/RT/Transaction_Overlay.pm:853 lib/RT/User_Overlay.pm:946
+msgid "Password changed"
+msgstr "密碼更改完畢"
+
+#: lib/RT/User_Overlay.pm:150 lib/RT/User_Overlay.pm:938
+#. (RT->Config->Get('MinimumPasswordLength'))
+msgid "Password needs to be at least %1 characters long"
+msgstr "密碼長度至少必須為 %1 個字元"
+
+#: lib/RT/User_Overlay.pm:945
+msgid "Password set"
+msgstr "密碼已設定"
+
+#: NOT FOUND IN SOURCE
+msgid "Password too short"
+msgstr "密碼太短"
+
+#: share/html/User/Prefs.html:266
+#. (loc_fuzzy($msg))
+msgid "Password: %1"
+msgstr "密碼:%1"
+
+#: lib/RT/User_Overlay.pm:931
+msgid "Password: Permission Denied"
+msgstr "密碼:權é™ä¸è¶³"
+
+#: etc/initialdata:441
+msgid "PasswordChange"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:374
+msgid "Passwords do not match."
+msgstr "密碼確èªå¤±æ•—。"
+
+#: share/html/User/Prefs.html:268
+msgid "Passwords do not match. Your password has not been changed"
+msgstr "密碼確èªå¤±æ•—。您的密碼並未改變。"
+
+#: lib/RT/Installer.pm:184
+msgid "Path to sendmail"
+msgstr "sendmail 所在的路徑"
+
+#: NOT FOUND IN SOURCE
+msgid "Pelase select a queue"
+msgstr "è«‹é¸æ“‡è¡¨å–®å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Pending Approval"
+msgstr "等待簽核"
+
+#: share/html/Ticket/Elements/ShowSummary:64 share/html/Ticket/Elements/Tabs:134 share/html/Ticket/ModifyAll.html:75
+msgid "People"
+msgstr "人員"
+
+#: NOT FOUND IN SOURCE
+msgid "People with Queue Rights"
+msgstr "æ“有表單權é™äººå“¡"
+
+#: etc/initialdata:88
+msgid "Perform a user-defined action"
+msgstr "執行使用者自訂的動作"
+
+#: share/html/Admin/Tools/Configuration.html:165
+msgid "Perl Include Paths (@INC)"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:159
+msgid "Perl configuration"
+msgstr "Perl 設定"
+
+#: lib/RT/ACE_Overlay.pm:255 lib/RT/ACE_Overlay.pm:261 lib/RT/ACE_Overlay.pm:360 lib/RT/ACE_Overlay.pm:370 lib/RT/ACE_Overlay.pm:380 lib/RT/ACE_Overlay.pm:445 lib/RT/Attachment_Overlay.pm:637 lib/RT/Attachment_Overlay.pm:638 lib/RT/Attachment_Overlay.pm:699 lib/RT/Attachment_Overlay.pm:700 lib/RT/Attribute_Overlay.pm:161 lib/RT/Attribute_Overlay.pm:167 lib/RT/Attribute_Overlay.pm:376 lib/RT/Attribute_Overlay.pm:385 lib/RT/Attribute_Overlay.pm:398 lib/RT/CurrentUser.pm:137 lib/RT/CurrentUser.pm:143 lib/RT/CurrentUser.pm:149 lib/RT/CustomFieldValue_Overlay.pm:83 lib/RT/CustomField_Overlay.pm:1105 lib/RT/CustomField_Overlay.pm:1246 lib/RT/CustomField_Overlay.pm:188 lib/RT/CustomField_Overlay.pm:205 lib/RT/CustomField_Overlay.pm:216 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:432 lib/RT/CustomField_Overlay.pm:738 lib/RT/CustomField_Overlay.pm:910 lib/RT/CustomField_Overlay.pm:944 lib/RT/CustomField_Overlay.pm:989 lib/RT/Group_Overlay.pm:1136 lib/RT/Group_Overlay.pm:1140 lib/RT/Group_Overlay.pm:1149 lib/RT/Group_Overlay.pm:1259 lib/RT/Group_Overlay.pm:1263 lib/RT/Group_Overlay.pm:1269 lib/RT/Group_Overlay.pm:401 lib/RT/Group_Overlay.pm:499 lib/RT/Group_Overlay.pm:577 lib/RT/Group_Overlay.pm:585 lib/RT/Group_Overlay.pm:683 lib/RT/Group_Overlay.pm:687 lib/RT/Group_Overlay.pm:693 lib/RT/Group_Overlay.pm:938 lib/RT/Group_Overlay.pm:942 lib/RT/Group_Overlay.pm:955 lib/RT/Queue_Overlay.pm:1156 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:176 lib/RT/Queue_Overlay.pm:514 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:562 lib/RT/Queue_Overlay.pm:775 lib/RT/Queue_Overlay.pm:921 lib/RT/Queue_Overlay.pm:930 lib/RT/Queue_Overlay.pm:943 lib/RT/Scrip_Overlay.pm:113 lib/RT/Scrip_Overlay.pm:124 lib/RT/Scrip_Overlay.pm:188 lib/RT/Scrip_Overlay.pm:497 lib/RT/Template_Overlay.pm:215 lib/RT/Template_Overlay.pm:224 lib/RT/Template_Overlay.pm:250 lib/RT/Template_Overlay.pm:379 lib/RT/Template_Overlay.pm:99 lib/RT/Ticket_Overlay.pm:1063 lib/RT/Ticket_Overlay.pm:1069 lib/RT/Ticket_Overlay.pm:1076 lib/RT/Ticket_Overlay.pm:1213 lib/RT/Ticket_Overlay.pm:1223 lib/RT/Ticket_Overlay.pm:1237 lib/RT/Ticket_Overlay.pm:1333 lib/RT/Ticket_Overlay.pm:1690 lib/RT/Ticket_Overlay.pm:1844 lib/RT/Ticket_Overlay.pm:2028 lib/RT/Ticket_Overlay.pm:2078 lib/RT/Ticket_Overlay.pm:2267 lib/RT/Ticket_Overlay.pm:2280 lib/RT/Ticket_Overlay.pm:2361 lib/RT/Ticket_Overlay.pm:2374 lib/RT/Ticket_Overlay.pm:2477 lib/RT/Ticket_Overlay.pm:2491 lib/RT/Ticket_Overlay.pm:2743 lib/RT/Ticket_Overlay.pm:2754 lib/RT/Ticket_Overlay.pm:2760 lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:3104 lib/RT/Ticket_Overlay.pm:3294 lib/RT/Transaction_Overlay.pm:586 lib/RT/Transaction_Overlay.pm:610 lib/RT/User_Overlay.pm:1136 lib/RT/User_Overlay.pm:124 lib/RT/User_Overlay.pm:1550 lib/RT/User_Overlay.pm:283 lib/RT/User_Overlay.pm:673 lib/RT/User_Overlay.pm:708 share/html/Ticket/Forward.html:85
+msgid "Permission Denied"
+msgstr "權é™ä¸è¶³"
+
+#: NOT FOUND IN SOURCE
+msgid "Permission Settings"
+msgstr "權é™è¨­å®š"
+
+#: lib/RT/SharedSetting.pm:110 lib/RT/SharedSetting.pm:187 lib/RT/SharedSetting.pm:228 lib/RT/SharedSetting.pm:261 share/html/Admin/Global/MyRT.html:98 share/html/Dashboards/Modify.html:98
+msgid "Permission denied"
+msgstr "權é™ä¸è¶³"
+
+#: NOT FOUND IN SOURCE
+msgid "Permitted Queues:"
+msgstr "æ“有權é™è¡¨å–®åˆ—表:"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal"
+msgstr "代ç†äººç¾¤çµ„"
+
+#: share/html/Dashboards/index.html:56
+msgid "Personal Dashboards"
+msgstr ""
+
+#: share/html/User/Elements/DelegateRights:60 share/html/User/Elements/Tabs:64 share/html/User/Groups/index.html:63
+msgid "Personal Groups"
+msgstr "代ç†äººç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal Homepage"
+msgstr "個人首é "
+
+#: NOT FOUND IN SOURCE
+msgid "Personal Todo"
+msgstr "ç§äººå¾…辦事項"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups"
+msgstr "代ç†äººç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Personal groups:"
+msgstr "代ç†äººç¾¤çµ„:"
+
+#: NOT FOUND IN SOURCE
+msgid "PersonalHomepage"
+msgstr "個人首é "
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 1: Create/Rename Groups (%1)"
+msgstr "第一階段:群組建立åŠæ”¹å (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 2: Disable/Enable Groups (%1)"
+msgstr "第二階段:群組åœç”¨åŠå•Ÿç”¨ (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 3: Create/Rename Users (%1)"
+msgstr "第三階段:使用者建立åŠæ”¹å (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phase 4: Disable/Enable Users (%1)"
+msgstr "第四階段:使用者åœç”¨åŠå•Ÿç”¨ (%1)"
+
+#: NOT FOUND IN SOURCE
+msgid "Phone"
+msgstr "電話"
+
+#: NOT FOUND IN SOURCE
+msgid "Phone number"
+msgstr "電話號碼"
+
+#: share/html/Admin/Users/Modify.html:183 share/html/User/Prefs.html:87
+msgid "Phone numbers"
+msgstr "電話號碼"
+
+#: NOT FOUND IN SOURCE
+msgid "Pick"
+msgstr "挑é¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Place of Departure"
+msgstr "出發地點"
+
+#: NOT FOUND IN SOURCE
+msgid "Placeholder"
+msgstr "尚未完工"
+
+#: NOT FOUND IN SOURCE
+msgid "Please Select"
+msgstr "è«‹é¸æ“‡"
+
+#: NOT FOUND IN SOURCE
+msgid "Please check items to be deleted first."
+msgstr "è«‹å…ˆé¸ä¸­è¦åˆªé™¤çš„å°è±¡"
+
+#: share/html/dhandler:51
+msgid "Please check the URL and try again."
+msgstr "請檢查 URL 並å†è©¦ä¸€æ¬¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Please select a group"
+msgstr "è«‹é¸æ“‡ç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "Please select a queue's workflow"
+msgstr "è«‹é¸æ“‡è¡¨å–®æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Please select one of the category types above."
+msgstr "請從上é¢é¸æ“‡ä¸€é …分類。"
+
+#: NOT FOUND IN SOURCE
+msgid "Please select role"
+msgstr "è«‹é¸æ“‡è§’色"
+
+#: NOT FOUND IN SOURCE
+msgid "Policy"
+msgstr "經營è¦ç« "
+
+#: NOT FOUND IN SOURCE
+msgid "Position"
+msgstr "è·å‹™"
+
+#: NOT FOUND IN SOURCE
+msgid "Position Level"
+msgstr "è·ç­‰"
+
+#: NOT FOUND IN SOURCE
+msgid "Position Name"
+msgstr "è·å‹™å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Position Number"
+msgstr "è·å‹™ä»£ç¢¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Position Rank"
+msgstr "è·ç´š"
+
+#: share/html/Dashboards/Elements/HiddenSearches:70
+msgid "Possible hidden searches"
+msgstr ""
+
+#: lib/RT/Installer.pm:67
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: NOT FOUND IN SOURCE
+msgid "Pref"
+msgstr "å好"
+
+#: share/html/Elements/PersonalQuickbar:9 share/html/Elements/Tabs:91 share/html/SelfService/Elements/Tabs:98 share/html/SelfService/Prefs.html:48 share/html/User/Prefs.html:48 share/html/User/Prefs.html:51
+msgid "Preferences"
+msgstr "å好"
+
+#: NOT FOUND IN SOURCE
+msgid "Preferences %1 for user %2 ."
+msgstr "使用者 %2 çš„ %1 å好。"
+
+#: share/html/Admin/Users/MyRT.html:124
+#. ($pane, $UserObj->Name)
+msgid "Preferences %1 for user %2."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:149 share/html/Prefs/MyRT.html:94
+#. (loc('summary rows'))
+#. ($pane)
+msgid "Preferences saved for %1."
+msgstr "æˆåŠŸå„²å­˜ %1 çš„å好。"
+
+#: share/html/Admin/Users/MyRT.html:83
+#. ($UserObj->Name)
+msgid "Preferences saved for user %1."
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:101 share/html/Prefs/Other.html:104 share/html/Prefs/Quicksearch.html:91 share/html/Prefs/Search.html:108 share/html/Prefs/SearchOptions.html:84
+msgid "Preferences saved."
+msgstr "已儲存設定"
+
+#: share/html/Prefs/Other.html:89
+#. (loc_fuzzy($msg))
+msgid "Preferred Key: %1"
+msgstr ""
+
+#: share/html/Prefs/Other.html:74
+msgid "Preferred key"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Prefs"
+msgstr "個人資訊"
+
+#: lib/RT/Action.pm:193
+msgid "Prepare Stubbed"
+msgstr "é å‚™å‹•ä½œå®Œç•¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Press 'Esc' to close this window."
+msgstr "按 'Esc' éµå¯é—œé–‰æœ¬è¦–窗。"
+
+#: share/html/Helpers/CalPopup.html:58 share/html/Ticket/Elements/Tabs:87
+msgid "Prev"
+msgstr "上一項"
+
+#: share/html/Elements/CollectionListPaging:101
+msgid "Previous"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Previous Page"
+msgstr "上一é "
+
+#: NOT FOUND IN SOURCE
+msgid "Previous page"
+msgstr "å‰ä¸€é "
+
+#: NOT FOUND IN SOURCE
+msgid "Pri"
+msgstr "優先順ä½"
+
+#: lib/RT/ACE_Overlay.pm:154 lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:349
+#. ($args{'PrincipalId'})
+msgid "Principal %1 not found."
+msgstr "找ä¸åˆ°å–®ä½ %1。"
+
+#: sbin/rt-email-digest:96
+msgid "Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent"
+msgstr ""
+
+#: sbin/rt-email-digest:98
+msgid "Print this message"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:103 lib/RT/Tickets_Overlay.pm:1991 share/html/Elements/RT__Queue/ColumnMap:66 share/html/Elements/RT__Ticket/ColumnMap:131 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:186 share/html/Ticket/Create.html:180 share/html/Ticket/Elements/EditBasics:102 share/html/Ticket/Elements/ShowBasics:76
+msgid "Priority"
+msgstr "優先順ä½"
+
+#: share/html/Admin/Queues/Modify.html:82
+msgid "Priority starts at"
+msgstr "優先順ä½èµ·å§‹å€¼"
+
+#: share/html/Dashboards/Modify.html:70
+msgid "Privacy"
+msgstr "éš±ç§"
+
+#: share/html/Search/Elements/EditSearches:52
+msgid "Privacy:"
+msgstr "éš±ç§è¨­å®šï¼š"
+
+#: share/html/Admin/Users/GnuPG.html:69
+msgid "Private Key"
+msgstr "ç§å¯†é‡‘é‘°"
+
+#: lib/RT/Handle.pm:640
+msgid "Privileged"
+msgstr "內部æˆå“¡"
+
+#: share/html/Admin/Users/Modify.html:352 share/html/User/Prefs.html:259
+#. (loc_fuzzy($msg))
+msgid "Privileged status: %1"
+msgstr "內部æˆå“¡ç‹€æ…‹ï¼š%1"
+
+#: share/html/Admin/Users/index.html:116
+msgid "Privileged users"
+msgstr "內部æˆå“¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Process Status"
+msgstr "處ç†ç‹€æ…‹"
+
+#: bin/rt-crontool:184
+msgid "Processing without transaction, some conditions and actions may fail. Consider using --transaction argument"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Project"
+msgstr "專案"
+
+#: NOT FOUND IN SOURCE
+msgid "Project Name"
+msgstr "專案å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Projects"
+msgstr "專案"
+
+#: lib/RT/Handle.pm:654
+msgid "Pseudogroup for internal use"
+msgstr "內部用的虛擬群組"
+
+#: NOT FOUND IN SOURCE
+msgid "Public Description"
+msgstr "公開說明"
+
+#: NOT FOUND IN SOURCE
+msgid "Public Info"
+msgstr "公開資訊"
+
+#: NOT FOUND IN SOURCE
+msgid "Public Service"
+msgstr "公共事務å€"
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:150
+#. ($line->{'Key'})
+msgid "Public key '0x%1' is required to verify signature"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Purging stale data: %1"
+msgstr "移除éŽæœŸè³‡æ–™: %1"
+
+#: share/html/Dashboards/Elements/Tabs:78 share/html/Dashboards/Subscription.html:72
+msgid "Queries"
+msgstr ""
+
+#: share/html/Search/Edit.html:64
+msgid "Query"
+msgstr "查詢"
+
+#: share/html/Search/Build.html:117
+msgid "Query Builder"
+msgstr "建立查詢"
+
+#: share/html/Search/Elements/Chart:105
+msgid "Query:"
+msgstr "查詢:"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Record.pm:911 lib/RT/Tickets_Overlay.pm:1818 lib/RT/Tickets_Overlay.pm:94 share/html/Elements/QueueSummary:50 share/html/Elements/QuickCreate:56 share/html/Elements/RT__Scrip/ColumnMap:61 share/html/Elements/RT__Ticket/ColumnMap:85 share/html/Search/Elements/PickBasics:83 share/html/SelfService/Create.html:57 share/html/Ticket/Create.html:66 share/html/Ticket/Elements/EditBasics:59 share/html/Ticket/Elements/ShowBasics:80 share/html/Tools/Reports/CreatedByDates.html:87 share/html/Tools/Reports/ResolvedByDates.html:88 share/html/Tools/Reports/ResolvedByOwner.html:68
+msgid "Queue"
+msgstr "表單"
+
+#: share/html/Admin/Queues/CustomField.html:65 share/html/Admin/Queues/Scrip.html:63 share/html/Admin/Queues/Scrips.html:71 share/html/Admin/Queues/Templates.html:67
+#. ($Queue)
+#. ($id)
+msgid "Queue %1 not found"
+msgstr "找ä¸åˆ°è¡¨å–® %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue '%1' not found\\n"
+msgstr "找ä¸åˆ°è¡¨å–® '%1'\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Keyword Selections"
+msgstr "表單關éµå­—é¸å–"
+
+#: share/html/Admin/Queues/Modify.html:62
+msgid "Queue Name"
+msgstr "表單å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Owner"
+msgstr "業務承辦人"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Priority"
+msgstr "優先等級"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Rights"
+msgstr "表單權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Scrips"
+msgstr "表單手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Queue Setup"
+msgstr "表單設定"
+
+#: lib/RT/Queue_Overlay.pm:354
+msgid "Queue already exists"
+msgstr "表單已存在"
+
+#: lib/RT/Queue_Overlay.pm:364 lib/RT/Queue_Overlay.pm:370
+msgid "Queue could not be created"
+msgstr "無法新增表單"
+
+#: share/html/Ticket/Create.html:326 share/html/index.html:95
+msgid "Queue could not be loaded."
+msgstr "無法載入表單"
+
+#: lib/RT/Queue_Overlay.pm:388 lib/RT/StyleGuide.pod:801
+msgid "Queue created"
+msgstr "表單新增完畢"
+
+#: lib/RT/Queue_Overlay.pm:429
+msgid "Queue disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:431
+msgid "Queue enabled"
+msgstr ""
+
+#: share/html/Elements/RT__Ticket/ColumnMap:80
+msgid "Queue id"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Queue is not specified."
+msgstr "未指定表單。"
+
+#: lib/RT/CustomField_Overlay.pm:213 share/html/SelfService/Display.html:125
+msgid "Queue not found"
+msgstr "找ä¸åˆ°è¡¨å–®"
+
+#: share/html/User/Elements/DelegateRights:103
+msgid "Queue rights"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SelectKeyForSigning:50 share/html/Elements/GnuPG/SelectKeyForSigning:54
+msgid "Queue's key"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:136
+msgid "QueueAdminCc"
+msgstr ""
+
+#: lib/RT/Tickets_Overlay.pm:135
+msgid "QueueCc"
+msgstr ""
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "QueueName"
+msgstr "表單å稱"
+
+#: lib/RT/Tickets_Overlay.pm:137
+msgid "QueueWatcher"
+msgstr "表單視察員"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:69 share/html/Admin/Elements/Tabs:61 share/html/Admin/Global/CustomFields/index.html:77 share/html/Admin/index.html:68
+msgid "Queues"
+msgstr "表單"
+
+#: share/html/Elements/MyAdminQueues:48
+msgid "Queues I administer"
+msgstr "由我管ç†çš„表單"
+
+#: share/html/Elements/MySupportQueues:48
+msgid "Queues I'm an AdminCc for"
+msgstr "管ç†å“¡å‰¯æœ¬æœ‰æˆ‘的表單"
+
+#: NOT FOUND IN SOURCE
+msgid "Quick Search"
+msgstr "表單ç¾æ³"
+
+#: share/html/Elements/Quicksearch:49 share/html/Prefs/Elements/Tabs:59 share/html/Prefs/Quicksearch.html:72
+msgid "Quick search"
+msgstr "表單一覽"
+
+#: share/html/Elements/QuickCreate:49
+msgid "Quick ticket creation"
+msgstr "快速建立申請單"
+
+#: lib/RT/Date.pm:117
+msgid "RFC2616"
+msgstr ""
+
+#: lib/RT/Date.pm:116
+msgid "RFC2822"
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:61
+msgid "RSS"
+msgstr "RSS"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1"
+msgstr "RT %1"
+
+#: lib/RT/StyleGuide.pod:788
+#. ($RT::VERSION, RT->Config->Get('rtname'))
+msgid "RT %1 for %2"
+msgstr "%2:RT %1 版"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>."
+msgstr "RT %1 版,<a href=\"http://bestpractical.com\">Best Practical Solutions å…¬å¸</a>出å“。"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1。版權所有 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+msgstr "RT %1。版權所有 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n"
+
+#: share/html/Admin/index.html:48 share/html/Admin/index.html:49
+msgid "RT Administration"
+msgstr "RT 管ç†é é¢"
+
+#: lib/RT/Installer.pm:160
+msgid "RT Administrator Email"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT Authentication error."
+msgstr "RT èªè­‰éŒ¯èª¤ã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Bounce: %1"
+msgstr "RT 退信:%1"
+
+#: share/html/Admin/Tools/Configuration.html:72
+msgid "RT Config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT Configuration error"
+msgstr "RT 設定錯誤"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Critical error. Message not recorded!"
+msgstr "RT 致命錯誤。訊æ¯æœªè¢«ç´€éŒ„。"
+
+#: share/html/Elements/Error:69 share/html/SelfService/Error.html:64
+msgid "RT Error"
+msgstr "RT 錯誤"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Received mail (%1) from itself."
+msgstr "RT 收到從自己寄出的郵件 (%1)。"
+
+#: NOT FOUND IN SOURCE
+msgid "RT Recieved mail (%1) from itself."
+msgstr "RT 收到從自己寄出的郵件 (%1)。"
+
+#: share/html/SelfService/Elements/Tabs:72 share/html/SelfService/Elements/Tabs:74
+msgid "RT Self Service"
+msgstr "RT 自助æœå‹™"
+
+#: share/html/Admin/Tools/Configuration.html:131
+msgid "RT Size"
+msgstr ""
+
+#: share/html/Admin/Tools/Configuration.html:112
+msgid "RT Variables"
+msgstr "RT 的變數"
+
+#: lib/RT/Config.pm:237 lib/RT/Config.pm:246 share/html/Admin/Elements/SystemTabs:73 share/html/Admin/Elements/UserTabs:69 share/html/Admin/Global/MyRT.html:48 share/html/Admin/Global/MyRT.html:51 share/html/Admin/Global/MyRT.html:59 share/html/Admin/Global/index.html:78 share/html/Admin/Users/MyRT.html:68 share/html/Prefs/MyRT.html:67 share/html/Prefs/MyRT.html:84 share/html/User/Elements/Tabs:73 share/html/index.html:6 share/html/index.html:79
+msgid "RT at a glance"
+msgstr "RT 一覽"
+
+#: share/html/Admin/Users/MyRT.html:79
+#. ($UserObj->Name)
+msgid "RT at a glance for the user %1"
+msgstr "使用者 %1 的 RT 一覽"
+
+#: share/html/Install/Sendmail.html:53
+msgid "RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Modify.html:104
+msgid "RT can include content from another web service when showing this custom field."
+msgstr "RT å¯æ–¼é¡¯ç¤ºæ­¤è‡ªè¨‚欄ä½æ™‚引入其他網站的內容"
+
+#: share/html/Admin/CustomFields/Modify.html:96
+msgid "RT can make this custom field's values into hyperlinks to another service."
+msgstr "RT å¯å°‡æ­¤è‡ªè¨‚欄ä½çš„值視為連往其他網站的超éˆçµ"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't authenticate you"
+msgstr "RT 無法èªè­‰æ‚¨çš„身份"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find requestor via its external database lookup"
+msgstr "RT 無法從外部資料庫查詢找到申請人資訊"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't find the queue: %1"
+msgstr "RT 找ä¸åˆ°è¡¨å–®ï¼š%1"
+
+#: lib/RT/Interface/Web/Session.pm:275
+msgid "RT couldn't store your session."
+msgstr "RT 無法儲存您的登入階段。"
+
+#: NOT FOUND IN SOURCE
+msgid "RT couldn't validate this PGP signature. \\n"
+msgstr "RT 無法確èªé€™å€‹ PGP 簽章。\\n"
+
+#: share/html/Elements/Logo:54
+#. (RT->Config->Get('rtname'))
+msgid "RT for %1"
+msgstr "%1 專用æµç¨‹ç³»çµ±"
+
+#: NOT FOUND IN SOURCE
+msgid "RT for %1: %2"
+msgstr "%1 專用 RT 系統:%2"
+
+#: NOT FOUND IN SOURCE
+msgid "RT has proccessed your commands"
+msgstr "RT 已執行您的命令"
+
+#: NOT FOUND IN SOURCE
+msgid "RT is &copy; Copyright 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"
+msgstr "RT 版權所有 1996-%1 Jesse Vincent &lt;jesse@bestpractical.com&gt;。<br>æœ¬è»Ÿé«”ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授權第二版</a> 散佈。"
+
+#: share/html/Install/index.html:71
+msgid "RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an \"action item.\""
+msgstr ""
+
+#: share/html/Install/index.html:74
+msgid "RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT thinks this message may be a bounce"
+msgstr "RT èªç‚ºé€™å¯èƒ½æ˜¯é€€ä¿¡"
+
+#: lib/RT/Installer.pm:119
+msgid "RT will connect to the database using this user. It will be created for you."
+msgstr ""
+
+#: lib/RT/Installer.pm:153
+msgid "RT will create a user called \"root\" and set this as their password"
+msgstr ""
+
+#: share/html/Search/Simple.html:62
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr "RT 會在申請單主旨內æœå°‹å°‡æ‚¨éµå…¥çš„任何其他字樣"
+
+#: NOT FOUND IN SOURCE
+msgid "RT will process this message as if it were unsigned.\\n"
+msgstr "RT 以未簽章方å¼è™•ç†é€™å°éƒµä»¶ã€‚\\n"
+
+#: share/html/Admin/CustomFields/Modify.html:106 share/html/Admin/CustomFields/Modify.html:98
+msgid "RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively"
+msgstr "RT 會將 <tt>__id__</tt> åŠ <tt>__CustomField__</tt> ç½®æ›æˆç´€éŒ„編號åŠè‡ªè¨‚欄ä½"
+
+#: lib/RT/Installer.pm:140
+msgid "RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:52
+msgid "RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified."
+msgstr "RT çš„é›»å­éƒµä»¶å‘½ä»¤æ¨¡å¼é ˆè¦ PGP èªè­‰ã€‚您å¯èƒ½æ²’有簽章,或是您的簽章無法辨識。"
+
+#: share/html/Admin/Groups/Members.html:48
+#. ($Group->Name)
+msgid "RT/Admin/Edit the group %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "RT::Queue-Role"
+msgstr "表單é‹è¡Œè§’色"
+
+#: NOT FOUND IN SOURCE
+msgid "RT::System-Role"
+msgstr "系統é‹è¡Œè§’色"
+
+#: NOT FOUND IN SOURCE
+msgid "RT::Ticket-Role"
+msgstr "申請單é‹è¡Œè§’色"
+
+#: NOT FOUND IN SOURCE
+msgid "RT_System"
+msgstr "系統訊æ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "Read Only"
+msgstr "唯讀"
+
+#: share/html/Admin/Users/Modify.html:81 share/html/User/Prefs.html:71
+msgid "Real Name"
+msgstr "真實姓å"
+
+#: share/html/Elements/RT__User/ColumnMap:66
+msgid "RealName"
+msgstr "真實姓å"
+
+#: NOT FOUND IN SOURCE
+msgid "Really reject this ticket?"
+msgstr "您確定è¦é§å›žé€™å¼µç”³è«‹å–®å—Žï¼Ÿ"
+
+#: share/html/Dashboards/Subscription.html:166
+msgid "Recipient"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:73
+msgid "Record all updates"
+msgstr ""
+
+#: share/html/Elements/RT__Group/ColumnMap:69
+msgid "Recursive member"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:782
+#. ($value)
+msgid "Reference by %1 added"
+msgstr "已加入 %1 為åƒè€ƒæœ¬ç”³è«‹å–®"
+
+#: lib/RT/Transaction_Overlay.pm:822
+#. ($value)
+msgid "Reference by %1 deleted"
+msgstr "已移除 %1 為åƒè€ƒæœ¬ç”³è«‹å–®"
+
+#: lib/RT/Transaction_Overlay.pm:779
+#. ($value)
+msgid "Reference to %1 added"
+msgstr "已加入åƒè€ƒç”³è«‹å–® %1"
+
+#: lib/RT/Transaction_Overlay.pm:819
+#. ($value)
+msgid "Reference to %1 deleted"
+msgstr "已移除åƒè€ƒç”³è«‹å–® %1"
+
+#: share/html/Elements/EditLinks:100 share/html/Elements/EditLinks:157 share/html/Elements/ShowLinks:108 share/html/Ticket/Create.html:233 share/html/Ticket/Elements/BulkLinks:74
+msgid "Referred to by"
+msgstr "被åƒè€ƒ"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:117 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "ReferredToBy"
+msgstr "被åƒè€ƒ"
+
+#: share/html/Elements/EditLinks:153 share/html/Elements/EditLinks:91 share/html/Elements/SelectLinkType:51 share/html/Elements/ShowLinks:98 share/html/Ticket/Create.html:232 share/html/Ticket/Elements/BulkLinks:70
+msgid "Refers to"
+msgstr "åƒè€ƒ"
+
+#: lib/RT/Graph/Tickets.pm:160 lib/RT/Tickets_Overlay.pm:113 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Graphs/Elements/EditGraphProperties:138
+msgid "RefersTo"
+msgstr "åƒè€ƒ"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine"
+msgstr "在çµæžœç¯„åœå…§æŸ¥è©¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Refine search"
+msgstr "調整查詢æ¢ä»¶"
+
+#: share/html/Elements/RefreshHomepage:48
+msgid "Refresh"
+msgstr "æ›´æ–°"
+
+#: lib/RT/Config.pm:257
+msgid "Refresh home page every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:260
+msgid "Refresh home page every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:255
+msgid "Refresh home page every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:258
+msgid "Refresh home page every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:256
+msgid "Refresh home page every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:259
+msgid "Refresh home page every 60 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:227
+msgid "Refresh search results every 10 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:230
+msgid "Refresh search results every 120 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:225
+msgid "Refresh search results every 2 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:228
+msgid "Refresh search results every 20 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:226
+msgid "Refresh search results every 5 minutes."
+msgstr ""
+
+#: lib/RT/Config.pm:229
+msgid "Refresh search results every 60 minutes."
+msgstr ""
+
+#: share/html/Elements/Refresh:59
+#. ($value/60)
+msgid "Refresh this page every %1 minutes."
+msgstr "æ¯ %1 分é˜æ›´æ–°é é¢"
+
+#: lib/RT/Transaction_Overlay.pm:886
+#. ($ticket->Subject)
+msgid "Reminder '%1' added"
+msgstr "已建立æ醒項目「%1ã€"
+
+#: lib/RT/Transaction_Overlay.pm:899
+#. ($ticket->Subject)
+msgid "Reminder '%1' completed"
+msgstr "已完æˆæ醒項目「%1ã€"
+
+#: lib/RT/Transaction_Overlay.pm:892
+#. ($ticket->Subject)
+msgid "Reminder '%1' reopened"
+msgstr "å·²é‡æ–°é–‹å•Ÿæ醒項目「%1ã€"
+
+#: share/html/Ticket/Reminders.html:48
+#. ($Ticket->Id)
+msgid "Reminder ticket #%1"
+msgstr "æ醒項目 #%1"
+
+#: share/html/Elements/MyReminders:50 share/html/Ticket/Elements/ShowSummary:78 share/html/Ticket/Elements/Tabs:150 share/html/Ticket/Reminders.html:57
+msgid "Reminders"
+msgstr "æ醒項目"
+
+#: share/html/Ticket/Reminders.html:52
+#. ($Ticket->Id)
+msgid "Reminders for ticket #%1"
+msgstr "申請單 #%1 çš„æ醒項目"
+
+#: NOT FOUND IN SOURCE
+msgid "Remove"
+msgstr "移除"
+
+#: share/html/Search/Bulk.html:101
+msgid "Remove AdminCc"
+msgstr "移除管ç†å“¡å‰¯æœ¬"
+
+#: share/html/Ticket/Elements/Bookmark:88
+msgid "Remove Bookmark"
+msgstr ""
+
+#: share/html/Search/Bulk.html:97
+msgid "Remove Cc"
+msgstr "移除副本"
+
+#: share/html/Search/Bulk.html:93
+msgid "Remove Requestor"
+msgstr "移除申請人"
+
+#: share/html/Ticket/Elements/ShowTransaction:185 share/html/Ticket/Elements/Tabs:171
+msgid "Reply"
+msgstr "回覆"
+
+#: share/html/Admin/Queues/Modify.html:74
+msgid "Reply Address"
+msgstr "回覆地å€"
+
+#: share/html/Search/Bulk.html:136 share/html/Ticket/ModifyAll.html:97 share/html/Ticket/Update.html:97
+msgid "Reply to requestors"
+msgstr "回覆申請人"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "Reply to tickets"
+msgstr "å°ç”³è«‹å–®é€²è¡Œå›žè¦†"
+
+#: lib/RT/Queue_Overlay.pm:112
+msgid "ReplyToTicket"
+msgstr "回覆申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Report to Duty"
+msgstr "上下ç­åˆ·å¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Reported on"
+msgstr "到è·æ—¥æœŸ"
+
+#: share/html/Tools/Elements/Tabs:66 share/html/Tools/Reports/index.html:48 share/html/Tools/Reports/index.html:49 share/html/Tools/index.html:68
+msgid "Reports"
+msgstr "報表"
+
+#: lib/RT/ACE_Overlay.pm:100 lib/RT/Tickets_Overlay.pm:130
+msgid "Requestor"
+msgstr "申請人"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor email address"
+msgstr "申請人電å­éƒµä»¶ä¿¡ç®±ä½å€"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor's"
+msgstr "申請人所屬之第上"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor's Dept."
+msgstr "申請人所屬部門之"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor's Phone"
+msgstr "申請人電話"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor(s)"
+msgstr "申請人"
+
+#: NOT FOUND IN SOURCE
+msgid "Requestor.EmailAddress"
+msgstr "申請人: é›»å­éƒµä»¶ä¿¡ç®±"
+
+#: NOT FOUND IN SOURCE
+msgid "RequestorAddresses"
+msgstr "申請人地å€"
+
+#: lib/RT/Tickets_Overlay.pm:142
+msgid "RequestorGroup"
+msgstr ""
+
+#: lib/RT/Graph/Tickets.pm:158 lib/RT/Tickets_Overlay.pm:131 share/html/Elements/QuickCreate:66 share/html/Elements/RT__Ticket/ColumnMap:173 share/html/Elements/RT__Ticket/ColumnMap:255 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:67 share/html/Ticket/Create.html:85 share/html/Ticket/Elements/EditPeople:70 share/html/Ticket/Elements/ShowPeople:56
+msgid "Requestors"
+msgstr "申請人"
+
+#: share/html/Admin/Queues/Modify.html:94
+msgid "Requests should be due in"
+msgstr "申請單處ç†æœŸé™"
+
+#: lib/RT/Attribute_Overlay.pm:149
+#. ('Object')
+msgid "Required parameter '%1' not specified"
+msgstr "未指定必è¦çš„åƒæ•¸ã€Œ%1ã€"
+
+#: share/html/Elements/Submit:101
+msgid "Reset"
+msgstr "é‡è¨­"
+
+#: share/html/User/Prefs.html:198
+msgid "Reset secret authentication token"
+msgstr ""
+
+#: share/html/Admin/Users/MyRT.html:62 share/html/Prefs/MyRT.html:60
+msgid "Reset to default"
+msgstr "é‡è¨­ç‚ºé è¨­å€¼"
+
+#: share/html/Admin/Users/Modify.html:186 share/html/User/Prefs.html:90
+msgid "Residence"
+msgstr "ä½è™•"
+
+#: NOT FOUND IN SOURCE
+msgid "Resolution"
+msgstr "解決狀態"
+
+#: share/html/Search/Elements/EditFormat:73 share/html/Ticket/Elements/Tabs:190
+msgid "Resolve"
+msgstr "解決"
+
+#: share/html/Ticket/Update.html:176
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Resolve ticket #%1 (%2)"
+msgstr "解決申請單 #%1 (%2)"
+
+#: etc/initialdata:299 lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:916 lib/RT/Tickets_Overlay.pm:122 share/html/Elements/RT__Ticket/ColumnMap:216 share/html/Elements/RT__Ticket/ColumnMap:241 share/html/Elements/SelectDateType:51 share/html/Search/Elements/BuildFormatString:99
+msgid "Resolved"
+msgstr "已解決"
+
+#: share/html/Tools/Reports/Elements/Tabs:57 share/html/Tools/Reports/index.html:58
+msgid "Resolved by owner"
+msgstr "已由承辦人解決"
+
+#: share/html/Tools/Reports/Elements/Tabs:61 share/html/Tools/Reports/index.html:63
+msgid "Resolved in date range"
+msgstr "已在指定日期內解決"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:54
+msgid "Resolved tickets in period, grouped by owner"
+msgstr "已在指定日期內內解決,ä¾æ‰¿è¾¦äººåˆ†çµ„"
+
+#: share/html/Tools/Reports/ResolvedByOwner.html:52
+msgid "Resolved tickets, grouped by owner"
+msgstr "已解決的申請單,ä¾æ‰¿è¾¦äººåˆ†çµ„"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ResolvedRelative"
+msgstr "解決日(相å°å€¼)"
+
+#: share/html/Search/Elements/EditFormat:71
+msgid "Respond"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Response to requestors"
+msgstr "回覆申請人"
+
+#: NOT FOUND IN SOURCE
+msgid "Responsibility Type"
+msgstr "責任å€åˆ†"
+
+#: share/html/Elements/ListActions:49 share/html/Search/Elements/NewListActions:48
+msgid "Results"
+msgstr "çµæžœ"
+
+#: NOT FOUND IN SOURCE
+msgid "Results per page"
+msgstr "æ¯é åˆ—出幾筆çµæžœ"
+
+#: share/html/Ticket/GnuPG.html:59
+msgid "Return back to the ticket"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:128 share/html/User/Prefs.html:122
+msgid "Retype Password"
+msgstr "å†æ¬¡è¼¸å…¥å¯†ç¢¼"
+
+#: share/html/Search/Elements/EditSearches:61
+msgid "Revert"
+msgstr "復原"
+
+#: NOT FOUND IN SOURCE
+msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n"
+msgstr "在 %4 (%5) 的範åœå…§æ‰¾ä¸åˆ° %2 %3 çš„ %1 權é™\\n"
+
+#: lib/RT/ACE_Overlay.pm:410
+msgid "Right Delegated"
+msgstr "權é™ä»£ç†å®Œç•¢"
+
+#: lib/RT/ACE_Overlay.pm:310
+msgid "Right Granted"
+msgstr "權é™è¨­å®šå®Œç•¢"
+
+#: lib/RT/ACE_Overlay.pm:175
+msgid "Right Loaded"
+msgstr "權é™è¼‰å…¥å®Œç•¢"
+
+#: lib/RT/ACE_Overlay.pm:475 lib/RT/ACE_Overlay.pm:496
+msgid "Right could not be revoked"
+msgstr "無法撤消權é™"
+
+#: share/html/User/Delegation.html:87
+msgid "Right not found"
+msgstr "找ä¸åˆ°æ¬Šé™"
+
+#: lib/RT/ACE_Overlay.pm:340 lib/RT/ACE_Overlay.pm:435
+msgid "Right not loaded."
+msgstr "權é™ä¸¦æœªè¼‰å…¥ã€‚"
+
+#: lib/RT/ACE_Overlay.pm:492
+msgid "Right revoked"
+msgstr "權é™æ’¤æ¶ˆå®Œç•¢"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights"
+msgstr "權é™åŠä»£ç†äºº"
+
+#: lib/RT/Interface/Web.pm:1297
+#. ($object_type)
+msgid "Rights could not be granted for %1"
+msgstr "無法將權é™è³¦äºˆ %1"
+
+#: NOT FOUND IN SOURCE
+msgid "Rights could not be revoked for %1"
+msgstr "無法撤消 %1 的權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "Role Members"
+msgstr "角色æˆå“¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Role Name"
+msgstr "角色å稱"
+
+#: share/html/Admin/Global/GroupRights.html:74 share/html/Admin/Queues/GroupRights.html:76
+msgid "Roles"
+msgstr "角色"
+
+#: NOT FOUND IN SOURCE
+msgid "RootApproval"
+msgstr "交由系統管ç†å“¡ç°½æ ¸"
+
+#: share/html/Dashboards/Subscription.html:156
+msgid "Rows"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:76
+msgid "Rows per box"
+msgstr "æ¯æ ¼ç­†æ•¸"
+
+#: share/html/Search/Elements/DisplayOptions:90
+msgid "Rows per page"
+msgstr "æ¯é ç­†æ•¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Run Approval"
+msgstr "簽核執行"
+
+#: NOT FOUND IN SOURCE
+msgid "SMTPDebug"
+msgstr "SMTP åµéŒ¯ç´€éŒ„"
+
+#: NOT FOUND IN SOURCE
+msgid "SMTPFrom"
+msgstr "SMTP 寄件ä½å€"
+
+#: NOT FOUND IN SOURCE
+msgid "SMTPServer"
+msgstr "SMTP 伺æœå™¨"
+
+#: lib/RT/Installer.pm:68
+msgid "SQLite"
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:58
+msgid "SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server."
+msgstr ""
+
+#: lib/RT/Date.pm:109
+msgid "Sat"
+msgstr "星期六"
+
+#: NOT FOUND IN SOURCE
+msgid "Sat."
+msgstr "星期六"
+
+#: share/html/Dashboards/Subscription.html:114
+msgid "Saturday"
+msgstr ""
+
+#: share/html/Prefs/MyRT.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Search/Elements/EditSearches:72 share/html/Ticket/Elements/ShowSummary:86 share/html/Ticket/Reminders.html:63 share/html/Widgets/SelectionBox:230
+msgid "Save"
+msgstr "儲存"
+
+#: share/html/Admin/CustomFields/Modify.html:137 share/html/Admin/Elements/EditScrip:141 share/html/Admin/Global/Template.html:102 share/html/Admin/Groups/Modify.html:97 share/html/Admin/Queues/Modify.html:136 share/html/Admin/Queues/People.html:130 share/html/Admin/Queues/Template.html:103 share/html/Admin/Users/GnuPG.html:75 share/html/Admin/Users/Modify.html:246 share/html/Dashboards/Modify.html:78 share/html/Dashboards/Subscription.html:178 share/html/Prefs/Other.html:78 share/html/Prefs/Quicksearch.html:66 share/html/Prefs/Search.html:71 share/html/Prefs/SearchOptions.html:65 share/html/SelfService/Prefs.html:60 share/html/Ticket/Elements/PreviewScrips:94 share/html/Ticket/Modify.html:65 share/html/Ticket/ModifyAll.html:144 share/html/Ticket/ModifyDates.html:63 share/html/Ticket/ModifyLinks.html:65 share/html/Ticket/ModifyPeople.html:63 share/html/User/Groups/Modify.html:79
+msgid "Save Changes"
+msgstr "儲存更改"
+
+#: share/html/User/Prefs.html:206
+msgid "Save Preferences"
+msgstr "儲存å好"
+
+#: share/html/Search/Elements/EditSearches:65
+msgid "Save as New"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Save changes"
+msgstr "儲存更改"
+
+#: lib/RT/SharedSetting.pm:196
+#. ($self->ObjectName, $name)
+msgid "Saved %1 %2"
+msgstr ""
+
+#: share/html/Elements/ShowSearch:72
+#. ($SavedSearch)
+msgid "Saved Search %1 not found"
+msgstr "找ä¸åˆ°é å­˜æŸ¥è©¢ %1"
+
+#: share/html/Search/Chart.html:96
+msgid "Saved charts"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Saved search %1"
+msgstr "æˆåŠŸå„²å­˜æŸ¥è©¢ï¼š%1"
+
+#: share/html/Search/Elements/EditSearches:135 share/html/Widgets/SavedSearch:159
+msgid "Saved searches"
+msgstr "é å­˜æŸ¥è©¢"
+
+#: share/html/Admin/Global/Scrip.html:78 share/html/Admin/Queues/Scrip.html:85 share/html/Ticket/Elements/PreviewScrips:65
+#. ($scrip->id)
+#. ($id)
+msgid "Scrip #%1"
+msgstr "手續 #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrip Action"
+msgstr "訊æ¯é€šçŸ¥å‹•ä½œ"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrip Condition"
+msgstr "訊æ¯é€šçŸ¥æ¢ä»¶"
+
+#: lib/RT/Scrip_Overlay.pm:167
+msgid "Scrip Created"
+msgstr "手續新增完畢"
+
+#: share/html/Admin/Elements/EditScrip:54
+msgid "Scrip Fields"
+msgstr "手續欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrip Name"
+msgstr "訊æ¯å稱"
+
+#: share/html/Admin/Elements/EditScrips:104
+msgid "Scrip deleted"
+msgstr "手續刪除完畢"
+
+#: share/html/Admin/Elements/QueueTabs:69 share/html/Admin/Elements/SystemTabs:56 share/html/Admin/Global/index.html:56
+msgid "Scrips"
+msgstr "手續"
+
+#: NOT FOUND IN SOURCE
+msgid "Scrips "
+msgstr "訊æ¯é€šçŸ¥ "
+
+#: share/html/Ticket/Update.html:149
+msgid "Scrips and Recipients"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Scrips for %1\\n"
+msgstr "%1 的手續\\n"
+
+#: share/html/Admin/Queues/Scrips.html:57
+msgid "Scrips which apply to all queues"
+msgstr "é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„手續"
+
+#: share/html/Admin/Tools/Shredder/index.html:67 share/html/Elements/SimpleSearch:49 share/html/Elements/SimpleSearch:49 share/html/Search/Simple.html:67
+msgid "Search"
+msgstr "查詢"
+
+#: NOT FOUND IN SOURCE
+msgid "Search Criteria"
+msgstr "查詢æ¢ä»¶"
+
+#: share/html/Prefs/SearchOptions.html:48 share/html/Prefs/SearchOptions.html:51
+msgid "Search Preferences"
+msgstr "æœå°‹å好"
+
+#: NOT FOUND IN SOURCE
+msgid "Search attribute load failure"
+msgstr "æœå°‹å±¬æ€§è¼‰å…¥å¤±æ•—"
+
+#: share/html/Approvals/Elements/PendingMyApproval:61
+msgid "Search for approvals"
+msgstr "簽核單查詢"
+
+#: share/html/Search/Simple.html:77
+msgid "Search for tickets"
+msgstr "申請單查詢"
+
+#: share/html/Search/Simple.html:59
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments."
+msgstr "æœå°‹ç”³è«‹å–®ã€‚è«‹éµå…¥<strong>編號</strong>ã€<strong>表單å稱</strong>ã€æ‰¿è¾¦äººçš„<strong>使用者å稱</strong>ã€æˆ–申請人的<strong>é›»å­éƒµä»¶åœ°å€</strong>。以上格å¼ä¹‹å¤–的文字,則會在申請單內文åŠé™„件內檢索。"
+
+#: share/html/User/Elements/Tabs:70
+msgid "Search options"
+msgstr "æœå°‹é¸é …"
+
+#: share/html/Search/Chart.html:73
+#. ($PrimaryGroupByLabel)
+msgid "Search results grouped by %1"
+msgstr "æœå°‹çµæžœï¼Œä¾ %1 分組"
+
+#: lib/RT/Config.pm:221
+msgid "Search results refresh interval"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Search update: %1"
+msgstr "更新查詢:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Searches can't be associated with that kind of object"
+msgstr "ä¸èƒ½å°æ­¤é¡žç‰©ä»¶é€²è¡ŒæŸ¥è©¢"
+
+#: share/html/Search/Simple.html:61
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr "å°æ‰€æœ‰ç”³è«‹å–®çš„全文進行檢索,å¯èƒ½æœƒéœ€è¦å¾ˆä¹…的時間。但如果您真的有需è¦ï¼Œå¯éµå…¥ <b>fulltext:<i>文字</i></b> 來æœå°‹ç”³è«‹å–®çš„所有紀錄。"
+
+#: NOT FOUND IN SOURCE
+msgid "Second-"
+msgstr "二"
+
+#: NOT FOUND IN SOURCE
+msgid "Second-level Users"
+msgstr "二階主管員工"
+
+#: share/html/User/Prefs.html:194
+msgid "Secret authentication token"
+msgstr ""
+
+#: bin/rt-crontool:368
+msgid "Security:"
+msgstr "安全性:"
+
+#: share/html/Elements/ShowCustomFields:108
+msgid "See also:"
+msgstr "åƒè¦‹ï¼š"
+
+#: lib/RT/Queue_Overlay.pm:96
+msgid "See custom field values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:112
+msgid "See custom fields"
+msgstr "查閱自訂欄ä½"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "See exact outgoing email messages and their recipeients"
+msgstr "查閱é€å‡ºçš„é›»å­éƒµä»¶åŠæ”¶ä»¶äºº"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "See ticket private commentary"
+msgstr "查閱申請單內的ç§äººè©•è«–"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "See ticket summaries"
+msgstr "查閱申請單總覽"
+
+#: lib/RT/CustomField_Overlay.pm:112 lib/RT/Queue_Overlay.pm:96
+msgid "SeeCustomField"
+msgstr "查閱自訂欄ä½"
+
+#: lib/RT/Dashboard.pm:80
+msgid "SeeDashboard"
+msgstr "檢視控制é¢æ¿"
+
+#: lib/RT/Group_Overlay.pm:95
+msgid "SeeGroup"
+msgstr "查閱群組"
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "SeeGroupDashboard"
+msgstr "檢視群組控制é¢æ¿"
+
+#: lib/RT/Dashboard.pm:85
+msgid "SeeOwnDashboard"
+msgstr "檢視自己的控制é¢æ¿"
+
+#: lib/RT/Queue_Overlay.pm:91
+msgid "SeeQueue"
+msgstr "查閱表單"
+
+#: share/html/Admin/Elements/CustomFieldTabs:92 share/html/Admin/Elements/GroupTabs:77 share/html/Admin/Elements/QueueTabs:97 share/html/Admin/Elements/UserTabs:83 share/html/Admin/Global/Scrip.html:61 share/html/Admin/Global/Scrips.html:59 share/html/Admin/Global/Template.html:77 share/html/Admin/Global/Templates.html:59 share/html/Dashboards/Elements/Tabs:93
+msgid "Select"
+msgstr "é¸æ“‡"
+
+#: NOT FOUND IN SOURCE
+msgid "Select All"
+msgstr "å…¨é¸"
+
+#: share/html/Install/DatabaseDetails.html:73
+msgid "Select Database Type"
+msgstr ""
+
+#: share/html/Admin/CustomFields/index.html:48 share/html/Admin/CustomFields/index.html:51
+msgid "Select a Custom Field"
+msgstr "é¸æ“‡è‡ªè¨‚欄ä½"
+
+#: share/html/Admin/Groups/index.html:88
+msgid "Select a group"
+msgstr "é¸æ“‡ç¾¤çµ„"
+
+#: share/html/Admin/Queues/index.html:56
+msgid "Select a queue"
+msgstr "é¸æ“‡è¡¨å–®"
+
+#: share/html/SelfService/CreateTicketInQueue.html:50
+msgid "Select a queue for your new ticket"
+msgstr "為您新的申請單é¸æ“‡ä¸€å€‹è¡¨å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "Select a queue to link to"
+msgstr "è«‹é¸æ“‡æ¬²é€£çµè¡¨å–®"
+
+#: share/html/Admin/Users/index.html:48 share/html/Admin/Users/index.html:51 share/html/Admin/Users/index.html:54
+msgid "Select a user"
+msgstr "é¸æ“‡ä½¿ç”¨è€…"
+
+#: share/html/Install/index.html:59
+msgid "Select another language"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Select custom field"
+msgstr "é¸æ“‡è‡ªè¨‚欄ä½"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:70 share/html/Admin/Global/CustomFields/index.html:78
+msgid "Select custom fields for all queues"
+msgstr "é¸æ“‡å°æ‰€æœ‰è¡¨å–®çš„自訂欄ä½"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:64 share/html/Admin/Global/CustomFields/index.html:72
+msgid "Select custom fields for all user groups"
+msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰ä½¿ç”¨è€…群組的自訂欄ä½"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:58 share/html/Admin/Global/CustomFields/index.html:67
+msgid "Select custom fields for all users"
+msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰ä½¿ç”¨è€…的自訂欄ä½"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:76 share/html/Admin/Global/CustomFields/index.html:84
+msgid "Select custom fields for tickets in all queues"
+msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®å…§ç”³è«‹å–®çš„自訂欄ä½"
+
+#: share/html/Admin/Elements/GlobalCustomFieldTabs:82 share/html/Admin/Global/CustomFields/index.html:91
+msgid "Select custom fields for transactions on tickets in all queues"
+msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®å…§ç”³è«‹å–®ä¹‹æ›´å‹•çš„自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Select dashboard"
+msgstr "é¸æ“‡æŽ§åˆ¶é¢æ¿"
+
+#: share/html/User/Elements/GroupTabs:73
+msgid "Select group"
+msgstr "é¸æ“‡ç¾¤çµ„"
+
+#: lib/RT/CustomField_Overlay.pm:60
+msgid "Select multiple values"
+msgstr "é¸æ“‡å¤šé‡é …ç›®"
+
+#: lib/RT/CustomField_Overlay.pm:61
+msgid "Select one value"
+msgstr "é¸æ“‡å–®ä¸€é …ç›®"
+
+#: NOT FOUND IN SOURCE
+msgid "Select queue"
+msgstr "é¸æ“‡è¡¨å–®"
+
+#: share/html/Prefs/Quicksearch.html:55
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr "é¸æ“‡è¦åœ¨ã€ŒRT 一覽ã€é é¢é¡¯ç¤ºçš„表單"
+
+#: share/html/Admin/Queues/Scrip.html:69 share/html/Admin/Queues/Scrips.html:75
+msgid "Select scrip"
+msgstr "é¸æ“‡æ‰‹çºŒ"
+
+#: share/html/Admin/Queues/Template.html:78 share/html/Admin/Queues/Templates.html:70
+msgid "Select template"
+msgstr "é¸æ“‡ç¯„本"
+
+#: lib/RT/CustomField_Overlay.pm:62
+msgid "Select up to %1 values"
+msgstr "é¸æ“‡æœ€å¤š %1 個值"
+
+#: NOT FOUND IN SOURCE
+msgid "Select user"
+msgstr "é¸æ“‡ä½¿ç”¨è€…"
+
+#: NOT FOUND IN SOURCE
+msgid "Select workflow"
+msgstr "é¸æ“‡æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectExternal"
+msgstr "系統é¸é …"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectMultiple"
+msgstr "多é‡é¸é …"
+
+#: NOT FOUND IN SOURCE
+msgid "SelectSingle"
+msgstr "單一é¸é …"
+
+#: share/html/Admin/Elements/EditCustomFields:60
+msgid "Selected Custom Fields"
+msgstr "å·²é¸å–的自訂欄ä½"
+
+#: lib/RT/Crypt/GnuPG.pm:1985
+msgid "Selected key either is not trusted or doesn't exist anymore."
+msgstr ""
+
+#: share/html/Admin/CustomFields/Objects.html:61
+msgid "Selected objects"
+msgstr "å·²é¸å–的物件"
+
+#: NOT FOUND IN SOURCE
+msgid "Selected users:"
+msgstr "å·²é¸å–的使用者:"
+
+#: share/html/Widgets/SelectionBox:228
+msgid "Selections modified. Please save your changes"
+msgstr "é¸å–的項目已更改。請儲存您的更動"
+
+#: NOT FOUND IN SOURCE
+msgid "Self Service"
+msgstr "自助æœå‹™"
+
+#: lib/RT/Interface/Email.pm:677
+msgid "Send email successfully"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers"
+msgstr "寄信給所有視察員"
+
+#: NOT FOUND IN SOURCE
+msgid "Send mail to all watchers as a \"comment\""
+msgstr "以評論方å¼å¯„信給所有視察員"
+
+#: etc/initialdata:76
+msgid "Send mail to owner and all watchers"
+msgstr ""
+
+#: etc/initialdata:72
+msgid "Send mail to owner and all watchers as a \"comment\""
+msgstr ""
+
+#: etc/initialdata:67
+msgid "Send mail to requestors and Ccs"
+msgstr "寄信給申請人åŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:62
+msgid "Send mail to requestors and Ccs as a comment"
+msgstr "以評論方å¼å¯„信給申請人åŠå‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:33
+msgid "Sends a message to the requestors"
+msgstr "寄信給申請人"
+
+#: etc/initialdata:80 etc/initialdata:84
+msgid "Sends mail to explicitly listed Ccs and Bccs"
+msgstr "寄信給特定的副本åŠå¯†ä»¶å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:49 etc/upgrade/3.1.17/content:7
+msgid "Sends mail to the Ccs"
+msgstr "寄信給副本收件人"
+
+#: etc/initialdata:45 etc/upgrade/3.1.17/content:3
+msgid "Sends mail to the Ccs as a comment"
+msgstr "以評論方å¼å¯„信給副本收件人"
+
+#: etc/initialdata:57
+msgid "Sends mail to the administrative Ccs"
+msgstr "寄信給管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:53
+msgid "Sends mail to the administrative Ccs as a comment"
+msgstr "以評論寄信給管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:37 etc/initialdata:41
+msgid "Sends mail to the owner"
+msgstr "寄信給申請人"
+
+#: lib/RT/Date.pm:96
+msgid "Sep"
+msgstr "ä¹æœˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Sep."
+msgstr "09"
+
+#: NOT FOUND IN SOURCE
+msgid "September"
+msgstr "ä¹æœˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "Setting %1's 'Disabled' property to %2"
+msgstr "%1 的「åœç”¨ã€å±¬æ€§å·²è¨­ç‚º %2"
+
+#: share/html/Prefs/Other.html:82 share/html/User/Elements/Tabs:57
+msgid "Settings"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Shift Type"
+msgstr "ç­åˆ¥å±¬æ€§"
+
+#: share/html/Ticket/Elements/ShowTransaction:168
+msgid "Show"
+msgstr "顯示"
+
+#: NOT FOUND IN SOURCE
+msgid "Show Approvals"
+msgstr "顯示待簽核申請單"
+
+#: share/html/Search/Elements/EditFormat:54
+msgid "Show Columns"
+msgstr "顯示欄ä½"
+
+#: share/html/Ticket/Elements/Tabs:309
+msgid "Show Results"
+msgstr "顯示çµæžœ"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:153
+#. ($Level)
+msgid "Show Tickets Properties on %1 level"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:66
+msgid "Show approved requests"
+msgstr "顯示已批准的簽核單"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:71
+msgid "Show as well"
+msgstr ""
+
+#: share/html/Ticket/Create.html:407
+msgid "Show basics"
+msgstr "顯示基本資訊"
+
+#: share/html/Approvals/Elements/PendingMyApproval:67
+msgid "Show denied requests"
+msgstr "顯示已é§å›žçš„簽核單"
+
+#: share/html/Ticket/Create.html:410
+msgid "Show details"
+msgstr "顯示細節"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:101
+msgid "Show link descriptions"
+msgstr ""
+
+#: lib/RT/Config.pm:283
+msgid "Show oldest history first"
+msgstr ""
+
+#: share/html/Approvals/Elements/PendingMyApproval:65
+msgid "Show pending requests"
+msgstr "顯示待處ç†çš„簽核單"
+
+#: share/html/Approvals/Elements/PendingMyApproval:68
+msgid "Show requests awaiting other approvals"
+msgstr "顯示尚待他人批准的簽核單"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket private commentary"
+msgstr "顯示申請單內的ç§äººè©•è«–"
+
+#: NOT FOUND IN SOURCE
+msgid "Show ticket summaries"
+msgstr "顯示申請單摘è¦"
+
+#: lib/RT/Queue_Overlay.pm:93
+msgid "ShowACL"
+msgstr "顯示權é™æ¸…å–®"
+
+#: lib/RT/System.pm:89
+msgid "ShowApprovalsTab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "ShowConfigTab"
+msgstr "顯示設定é ç±¤"
+
+#: lib/RT/Queue_Overlay.pm:107
+msgid "ShowOutgoingEmail"
+msgstr "顯示寄é€éƒµä»¶"
+
+#: lib/RT/Group_Overlay.pm:94
+msgid "ShowSavedSearches"
+msgstr "顯示é å­˜æŸ¥è©¢"
+
+#: lib/RT/Queue_Overlay.pm:103
+msgid "ShowScrips"
+msgstr "顯示手續"
+
+#: lib/RT/Queue_Overlay.pm:100
+msgid "ShowTemplate"
+msgstr "顯示範本"
+
+#: lib/RT/Queue_Overlay.pm:105
+msgid "ShowTicket"
+msgstr "顯示申請單"
+
+#: lib/RT/Queue_Overlay.pm:106
+msgid "ShowTicketComments"
+msgstr "顯示申請單的評論"
+
+#: share/html/Admin/Elements/ToolTabs:60 share/html/Admin/Tools/Shredder/index.html:78 share/html/Ticket/Elements/Tabs:298
+msgid "Shredder"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoStorage:58
+#. ($m->interp->apply_escapes( $Path ))
+msgid "Shredder needs a directory to write dumps to. Please check that you have <span class=\"file-path\">%1</span> and it is writable by your web server."
+msgstr ""
+
+#: share/html/Dashboards/Queries.html:182
+msgid "Sidebar"
+msgstr ""
+
+#: share/html/Elements/GnuPG/SignEncryptWidget:49
+msgid "Sign"
+msgstr ""
+
+#: share/html/Admin/Queues/Modify.html:112
+msgid "Sign by default"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Sign up as a ticket Requestor or ticket or queue Cc"
+msgstr "登記æˆç‚ºç”³è«‹äººæˆ–副本收件人"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "Sign up as a ticket or queue AdminCc"
+msgstr "登記æˆç‚ºç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: share/html/Admin/Users/Modify.html:234 share/html/User/Prefs.html:186
+msgid "Signature"
+msgstr "ç°½å檔"
+
+#: NOT FOUND IN SOURCE
+msgid "Signed in as %1"
+msgstr "使用者:%1"
+
+#: lib/RT/Queue_Overlay.pm:524
+msgid "Signing disabled"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:523
+msgid "Signing enabled"
+msgstr ""
+
+#: share/html/Elements/Tabs:71
+msgid "Simple Search"
+msgstr "簡易查詢"
+
+#: share/html/Admin/Elements/SelectSingleOrMultiple:49
+msgid "Single"
+msgstr "單一"
+
+#: lib/RT/Installer.pm:139
+msgid "Site name"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:76
+msgid "Size"
+msgstr "大å°"
+
+#: share/html/Elements/PersonalQuickbar:5
+msgid "Skip Menu"
+msgstr "ç•¥éŽé¸å–®"
+
+#: sbin/rt-email-digest:287
+msgid "Skipping disabled user"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:79
+msgid "Small"
+msgstr "å°"
+
+#: share/html/Admin/CustomFields/Modify.html:107
+msgid "Some browsers may only load content from the same domain as your RT server."
+msgstr "æŸäº›ç€è¦½å™¨åªå…許載入和 RT 伺æœå™¨åŒä¸€å€‹ç¶²åŸŸçš„內容。"
+
+#: share/html/Admin/Elements/AddCustomFieldValue:53 share/html/Admin/Elements/EditCustomFieldValues:57
+msgid "Sort"
+msgstr "é †åº"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort key"
+msgstr "排åºæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Sort results by"
+msgstr "çµæžœæŽ’åºæ–¹å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "SortOrder"
+msgstr "排åºé †åº"
+
+#: share/html/Search/Elements/DisplayOptions:48
+msgid "Sorting"
+msgstr ""
+
+#: sbin/rt-email-digest:94
+msgid "Specify whether this is a daily or weekly run."
+msgstr ""
+
+#: share/html/Search/Elements/ResultViews:60
+msgid "Spreadsheet"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:81 share/html/Elements/RT__Scrip/ColumnMap:93
+msgid "Stage"
+msgstr "é—œå¡"
+
+#: NOT FOUND IN SOURCE
+msgid "Stage Action"
+msgstr "é—œå¡é‹è¡Œå‹•ä½œ"
+
+#: NOT FOUND IN SOURCE
+msgid "Stage Condition"
+msgstr "é—œå¡é‹è¡Œæ¢ä»¶"
+
+#: NOT FOUND IN SOURCE
+msgid "Stalled"
+msgstr "延宕"
+
+#: NOT FOUND IN SOURCE
+msgid "Start page"
+msgstr "首é "
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:120 share/html/Elements/RT__Ticket/ColumnMap:193 share/html/Elements/RT__Ticket/ColumnMap:226 share/html/Elements/SelectDateType:50 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/EditDates:55 share/html/Ticket/Elements/ShowDates:58
+msgid "Started"
+msgstr "實際起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Started date '%1' could not be parsed"
+msgstr "無法解讀起始日期 '%1"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartedRelative"
+msgstr "實際起始日(相å°å€¼)"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Tickets_Overlay.pm:119 share/html/Elements/RT__Ticket/ColumnMap:188 share/html/Elements/RT__Ticket/ColumnMap:221 share/html/Elements/SelectDateType:54 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Create.html:213 share/html/Ticket/Elements/EditDates:50 share/html/Ticket/Elements/ShowDates:54
+msgid "Starts"
+msgstr "應起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts By"
+msgstr "應起始日"
+
+#: NOT FOUND IN SOURCE
+msgid "Starts date '%1' could not be parsed"
+msgstr "無法解讀起始日期 '%1"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "StartsRelative"
+msgstr "應起始日(相å°å€¼)"
+
+#: share/html/Admin/Users/Modify.html:165 share/html/Elements/RT__User/ColumnMap:121 share/html/User/Prefs.html:151
+msgid "State"
+msgstr "å·ž"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:910 lib/RT/Tickets_Overlay.pm:1852 lib/RT/Tickets_Overlay.pm:93 share/html/Elements/RT__Ticket/ColumnMap:104 share/html/Elements/RT__Ticket/ColumnMap:94 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:97 share/html/SelfService/Update.html:60 share/html/Ticket/Create.html:70 share/html/Ticket/Elements/EditBasics:55 share/html/Ticket/Elements/ShowBasics:54 share/html/Ticket/Graphs/Elements/ShowLegends:51 share/html/Ticket/Update.html:68 share/html/Tools/MyDay.html:67
+msgid "Status"
+msgstr "ç¾æ³"
+
+#: etc/initialdata:285
+msgid "Status Change"
+msgstr "ç¾æ³æ”¹è®Šæ™‚"
+
+#: lib/RT/Transaction_Overlay.pm:641
+#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
+msgid "Status changed from %1 to %2"
+msgstr "ç¾æ³å¾ž %1 改為 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "StatusChange"
+msgstr "ç¾æ³æ”¹è®Šæ™‚"
+
+#: share/html/Ticket/Elements/Tabs:212
+msgid "Steal"
+msgstr "強制更æ›æ‰¿è¾¦äºº"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "Steal tickets"
+msgstr "強制承辦申請單"
+
+#: lib/RT/Queue_Overlay.pm:118
+msgid "StealTicket"
+msgstr "強制承辦申請單"
+
+#: share/html/Install/Basics.html:48 share/html/Install/DatabaseDetails.html:48 share/html/Install/DatabaseType.html:48 share/html/Install/Finish.html:48 share/html/Install/Global.html:48 share/html/Install/Initialize.html:48 share/html/Install/Sendmail.html:48
+#. (3, 7)
+#. (2, 7)
+#. (1, 7)
+#. (7, 7)
+#. (5, 7)
+#. (6, 7)
+#. (4, 7)
+msgid "Step %1 of %2"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:735
+#. ($Old->Name)
+msgid "Stolen from %1"
+msgstr "承辦人從 %1 強制更æ›"
+
+#: NOT FOUND IN SOURCE
+msgid "Stolen from %1 "
+msgstr "承辦人從 %1 å¼·åˆ¶æ›´æ› "
+
+#: share/html/Search/Elements/EditFormat:82
+msgid "Style"
+msgstr "樣å¼"
+
+#: NOT FOUND IN SOURCE
+msgid "Subgroup"
+msgstr "å­ç¾¤çµ„"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:906 lib/RT/Tickets_Overlay.pm:125 lib/RT/Tickets_Overlay.pm:1934 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Elements/QuickCreate:53 share/html/Elements/RT__Ticket/ColumnMap:99 share/html/Elements/SelectAttachmentField:49 share/html/Search/Bulk.html:139 share/html/Search/Elements/BuildFormatString:99 share/html/SelfService/Create.html:83 share/html/SelfService/Update.html:68 share/html/Ticket/Create.html:111 share/html/Ticket/Elements/EditBasics:50 share/html/Ticket/Elements/Reminders:131 share/html/Ticket/Forward.html:64 share/html/Ticket/ModifyAll.html:103 share/html/Ticket/Update.html:101
+msgid "Subject"
+msgstr "主題"
+
+#: share/html/Admin/Queues/Modify.html:70
+msgid "Subject Tag"
+msgstr ""
+
+#: lib/RT/StyleGuide.pod:807 lib/RT/Transaction_Overlay.pm:757
+#. ($self->Data)
+msgid "Subject changed to %1"
+msgstr "標題已改為 %1"
+
+#: lib/RT/Queue_Overlay.pm:582
+#. ((defined $value && length $value)? $value : $self->loc("(no value)"))
+msgid "SubjectTag changed to %1"
+msgstr ""
+
+#: share/html/Elements/Submit:87
+msgid "Submit"
+msgstr "é€å‡º"
+
+#: NOT FOUND IN SOURCE
+msgid "Submit Workflow"
+msgstr "é€å‡ºæµç¨‹"
+
+#: share/html/Dashboards/Subscription.html:180
+msgid "Subscribe"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:279
+#. ($DashboardObj->Name)
+msgid "Subscribe to dashboard %1"
+msgstr "訂閱控制é¢æ¿ %1"
+
+#: lib/RT/Dashboard.pm:78
+msgid "Subscribe to dashboards"
+msgstr "控制é¢æ¿è¨‚é–±"
+
+#: lib/RT/Dashboard.pm:78
+msgid "SubscribeDashboard"
+msgstr "訂閱控制é¢æ¿"
+
+#: share/html/Dashboards/Subscription.html:265
+#. ($DashboardObj->Name)
+msgid "Subscribed to dashboard %1"
+msgstr "已訂閱控制é¢æ¿ %1"
+
+#: share/html/Dashboards/Elements/ShowDashboards:80 share/html/Dashboards/Elements/Tabs:83 share/html/Dashboards/Subscription.html:91
+msgid "Subscription"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:270
+#. ($msg)
+msgid "Subscription could not be created: %1"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Succeeded"
+msgstr "設定æˆåŠŸ"
+
+#: lib/RT/Attachment_Overlay.pm:727
+msgid "Successfuly decrypted data"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:692
+msgid "Successfuly encrypted data"
+msgstr ""
+
+#: lib/RT/Date.pm:103
+msgid "Sun"
+msgstr "星期日"
+
+#: NOT FOUND IN SOURCE
+msgid "Sun."
+msgstr "星期日"
+
+#: share/html/Dashboards/Subscription.html:115
+msgid "Sunday"
+msgstr ""
+
+#: lib/RT/System.pm:79
+msgid "SuperUser"
+msgstr "系統管ç†å“¡"
+
+#: lib/RT/Config.pm:348
+msgid "Suspended"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Sync now"
+msgstr "執行åŒæ­¥"
+
+#: NOT FOUND IN SOURCE
+msgid "Sync104HRMS"
+msgstr "自動åŒæ­¥104HRMS"
+
+#: NOT FOUND IN SOURCE
+msgid "Synchronizing HRMS data. This may take a while..."
+msgstr "正在åŒæ­¥åŒ– HRMS 人事系統資料。請ç¨å¾…..."
+
+#: NOT FOUND IN SOURCE
+msgid "System"
+msgstr "系統"
+
+#: share/html/Admin/Elements/ToolTabs:57 share/html/Admin/Tools/Configuration.html:50
+msgid "System Configuration"
+msgstr "系統設定"
+
+#: share/html/Dashboards/index.html:61
+msgid "System Dashboards"
+msgstr ""
+
+#: lib/RT/Installer.pm:224 share/html/Elements/SelectTimezone:71
+msgid "System Default"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "System Defined"
+msgstr "系統定義"
+
+#: lib/RT/ACE_Overlay.pm:364 lib/RT/Interface/Web.pm:1297 share/html/Admin/Elements/SelectRights:111
+msgid "System Error"
+msgstr "系統錯誤"
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. Right not granted."
+msgstr "系統錯誤。設定權é™å¤±æ•—。"
+
+#: NOT FOUND IN SOURCE
+msgid "System Error. right not granted"
+msgstr "系統錯誤。設定權é™å¤±æ•—。"
+
+#: lib/RT/Transaction_Overlay.pm:234 lib/RT/Transaction_Overlay.pm:240
+#. ($msg)
+msgid "System Error: %1"
+msgstr "系統錯誤:%1"
+
+#: NOT FOUND IN SOURCE
+msgid "System Rights"
+msgstr "系統權é™"
+
+#: share/html/Admin/Tools/index.html:49
+msgid "System Tools"
+msgstr "系統工具"
+
+#: lib/RT/ACE_Overlay.pm:413
+msgid "System error. Right not delegated."
+msgstr "系統錯誤。權é™ä»£ç†å¤±æ•—。"
+
+#: lib/RT/ACE_Overlay.pm:160 lib/RT/ACE_Overlay.pm:232 lib/RT/ACE_Overlay.pm:313
+msgid "System error. Right not granted."
+msgstr "系統錯誤。設定權é™å¤±æ•—。"
+
+#: NOT FOUND IN SOURCE
+msgid "System error. Unable to grant rights."
+msgstr "系統錯誤。無法設定權é™ã€‚"
+
+#: share/html/Admin/CustomFields/GroupRights.html:60 share/html/Admin/Global/GroupRights.html:58 share/html/Admin/Groups/GroupRights.html:60 share/html/Admin/Queues/GroupRights.html:59
+msgid "System groups"
+msgstr "系統群組"
+
+#: share/html/User/Elements/DelegateRights:101
+msgid "System rights"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "SystemInternal"
+msgstr "系統內部用"
+
+#: lib/RT/Handle.pm:706
+msgid "SystemRolegroup for internal use"
+msgstr "內部使用的系統角色群組"
+
+#: NOT FOUND IN SOURCE
+msgid "TEST_STRING"
+msgstr "TEST_STRING"
+
+#: NOT FOUND IN SOURCE
+msgid "TabbedUI"
+msgstr "é ç±¤ä»‹é¢"
+
+#: etc/initialdata:566 share/html/Search/Elements/EditFormat:70 share/html/Ticket/Elements/Tabs:205
+msgid "Take"
+msgstr "å—ç†"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "Take tickets"
+msgstr "自行承辦申請單"
+
+#: lib/RT/Queue_Overlay.pm:117
+msgid "TakeTicket"
+msgstr "自行承辦申請單"
+
+#: lib/RT/Transaction_Overlay.pm:720
+msgid "Taken"
+msgstr "å·²å—ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Task"
+msgstr "工作事項"
+
+#: share/html/Install/DatabaseDetails.html:53
+msgid "Tell us a little about how to find the database RT will be using"
+msgstr ""
+
+#: share/html/Admin/Elements/EditScrip:74 share/html/Elements/RT__Scrip/ColumnMap:76 share/html/Tools/Offline.html:79
+msgid "Template"
+msgstr "範本"
+
+#: share/html/Admin/Global/Template.html:111 share/html/Admin/Queues/Template.html:117
+#. ($TemplateObj->Id())
+msgid "Template #%1"
+msgstr "範本 #%1"
+
+#: share/html/Admin/Elements/EditTemplates:114
+#. ($id)
+msgid "Template #%1 deleted"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:144
+#. ($args{'Template'})
+msgid "Template '%1' not found"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Template Content"
+msgstr "通知範本內容"
+
+#: NOT FOUND IN SOURCE
+msgid "Template Description"
+msgstr "通知範本æè¿°"
+
+#: NOT FOUND IN SOURCE
+msgid "Template Name"
+msgstr "通知範本å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "Template deleted"
+msgstr "範本已刪除"
+
+#: lib/RT/Template_Overlay.pm:383
+msgid "Template is empty"
+msgstr ""
+
+#: lib/RT/Scrip_Overlay.pm:140
+msgid "Template is mandatory argument"
+msgstr "範本是必填欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found"
+msgstr "找ä¸åˆ°ç¯„本"
+
+#: NOT FOUND IN SOURCE
+msgid "Template not found\\n"
+msgstr "找ä¸åˆ°ç¯„本\\n"
+
+#: lib/RT/Template_Overlay.pm:363
+msgid "Template parsed"
+msgstr "範本剖æžå®Œç•¢"
+
+#: lib/RT/Template_Overlay.pm:426
+msgid "Template parsing error"
+msgstr "範本剖æžéŒ¯èª¤"
+
+#: share/html/Admin/Elements/QueueTabs:72 share/html/Admin/Elements/SystemTabs:59 share/html/Admin/Global/index.html:60
+msgid "Templates"
+msgstr "範本"
+
+#: NOT FOUND IN SOURCE
+msgid "Templates "
+msgstr "通知範本 "
+
+#: NOT FOUND IN SOURCE
+msgid "Templates for %1\\n"
+msgstr "找ä¸åˆ° %1 的範本\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "Text"
+msgstr "文字"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:155
+msgid "Text file is not shown because it is disabled in preferences."
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:916 lib/RT/Record.pm:919
+msgid "That is already the current value"
+msgstr "已經是目å‰æ¬„ä½çš„值"
+
+#: lib/RT/CustomField_Overlay.pm:441
+msgid "That is not a value for this custom field"
+msgstr "這ä¸æ˜¯è©²è‡ªè¨‚欄ä½çš„值"
+
+#: lib/RT/Ticket_Overlay.pm:1701
+msgid "That is the same value"
+msgstr "åŒæ¨£çš„值"
+
+#: lib/RT/ACE_Overlay.pm:295 lib/RT/ACE_Overlay.pm:394
+msgid "That principal already has that right"
+msgstr "這項單ä½å·²ç¶“æ“有該權é™"
+
+#: lib/RT/Queue_Overlay.pm:838
+#. ($args{'Type'})
+msgid "That principal is already a %1 for this queue"
+msgstr "這項單ä½å·²ç¶“是這個表單的 %1"
+
+#: lib/RT/Ticket_Overlay.pm:1126
+#. ($self->loc($args{'Type'}))
+msgid "That principal is already a %1 for this ticket"
+msgstr "這項單ä½å·²ç¶“是這份申請單的 %1"
+
+#: lib/RT/Queue_Overlay.pm:954
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this queue"
+msgstr "這項單ä½ä¸æ˜¯é€™å€‹è¡¨å–®çš„ %1"
+
+#: lib/RT/Ticket_Overlay.pm:1248
+#. ($args{'Type'})
+msgid "That principal is not a %1 for this ticket"
+msgstr "這項單ä½ä¸æ˜¯é€™ä»½ç”³è«‹å–®çš„ %1"
+
+#: lib/RT/Ticket_Overlay.pm:1697
+msgid "That queue does not exist"
+msgstr "此表單ä¸å­˜åœ¨"
+
+#: lib/RT/Ticket_Overlay.pm:2972
+msgid "That ticket has unresolved dependencies"
+msgstr "這份申請單有尚未解決的附屬申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "That user already has that right"
+msgstr "使用者已具有該項權é™"
+
+#: lib/RT/Action/CreateTickets.pm:484 lib/RT/Ticket_Overlay.pm:2789
+msgid "That user already owns that ticket"
+msgstr "該使用者已經承辦這份申請單"
+
+#: lib/RT/Ticket_Overlay.pm:2732
+msgid "That user does not exist"
+msgstr "使用者ä¸å­˜åœ¨"
+
+#: lib/RT/User_Overlay.pm:304
+msgid "That user is already privileged"
+msgstr "這å使用者已經是內部æˆå“¡"
+
+#: lib/RT/User_Overlay.pm:325
+msgid "That user is already unprivileged"
+msgstr "這å使用者屬於éžå…§éƒ¨æˆå“¡ç¾¤çµ„"
+
+#: lib/RT/User_Overlay.pm:317
+msgid "That user is now privileged"
+msgstr "使用者加入內部æˆå“¡ç¾¤çµ„完畢"
+
+#: lib/RT/User_Overlay.pm:338
+msgid "That user is now unprivileged"
+msgstr "這å使用者已加入éžå…§éƒ¨æˆå“¡ç¾¤çµ„"
+
+#: NOT FOUND IN SOURCE
+msgid "That user is now unprivilegedileged"
+msgstr "這å使用者已加入éžå…§éƒ¨æˆå“¡ç¾¤çµ„"
+
+#: lib/RT/Ticket_Overlay.pm:2782
+msgid "That user may not own tickets in that queue"
+msgstr "使用者å¯èƒ½æ²’有承辦表單裡的申請單"
+
+#: lib/RT/Link_Overlay.pm:224
+msgid "That's not a numerical id"
+msgstr "這ä¸æ˜¯ä¸€å€‹æ•¸å­—編號"
+
+#: share/html/SelfService/Display.html:57 share/html/Ticket/Create.html:176 share/html/Ticket/Elements/ShowSummary:51
+msgid "The Basics"
+msgstr "基本資訊"
+
+#: lib/RT/ACE_Overlay.pm:101
+msgid "The CC of a ticket"
+msgstr "申請單的副本收件人"
+
+#: lib/RT/Installer.pm:110
+msgid "The DBA's database password"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:102
+msgid "The administrative CC of a ticket"
+msgstr "申請單的管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: NOT FOUND IN SOURCE
+msgid "The comment has been recorded"
+msgstr "評論已被紀錄"
+
+#: lib/RT/Installer.pm:79
+msgid "The domain name of your database server (like 'db.example.com')."
+msgstr ""
+
+#: bin/rt-crontool:378
+msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
+msgstr "下列命令會找到 'general' 表單內所有é‹ä½œä¸­çš„申請單,並將其中 4 å°æ™‚內未處ç†çš„申請單優先程度設為 99:"
+
+#: NOT FOUND IN SOURCE
+msgid "The following commands were not proccessed:\\n\\n"
+msgstr "以下命令未被執行:\\n\\n"
+
+#: share/html/Dashboards/Elements/Deleted:53
+msgid "The following queries have been deleted and each will be removed from the dashboard once its pane is updated."
+msgstr ""
+
+#: share/html/Dashboards/Elements/HiddenSearches:71
+msgid "The following queries may not be visible to all users who can see this dashboard."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2159
+msgid "The key has been disabled"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2165
+msgid "The key has been revoked"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2170
+msgid "The key has expired"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2203
+msgid "The key is fully trusted"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2208
+msgid "The key is ultimately trusted"
+msgstr ""
+
+#: lib/RT/Record.pm:922
+msgid "The new value has been set."
+msgstr "新的欄ä½å€¼è¨­å®šå®Œæˆã€‚"
+
+#: lib/RT/ACE_Overlay.pm:99
+msgid "The owner of a ticket"
+msgstr "申請單的承辦人"
+
+#: share/html/dhandler:50
+msgid "The page you requested could not be found"
+msgstr ""
+
+#: lib/RT/ACE_Overlay.pm:100
+msgid "The requestor of a ticket"
+msgstr "申請單的申請人"
+
+#: share/html/Install/Finish.html:64
+#. (RT::Installer->ConfigFile)
+msgid "The settings you've chosen are stored in %1."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:52
+msgid "The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:"
+msgstr ""
+
+#: lib/RT/Config.pm:174
+msgid "Theme"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2012
+msgid "There are several keys suitable for encryption."
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:50
+#. ()
+msgid "There are unread messages on this ticket."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2198
+msgid "There is marginal trust in this key"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2004
+msgid "There is no key suitable for encryption."
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2008
+msgid "There is one suitable key, but trust level is not set."
+msgstr ""
+
+#: share/html/Admin/Elements/EditUserComments:49
+msgid "These comments aren't generally visible to the user"
+msgstr "該使用者ä¸æœƒçœ‹è¦‹é€™äº›è©•è«–"
+
+#: share/html/Install/Basics.html:53
+msgid "These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Third-"
+msgstr "三"
+
+#: lib/RT/CustomField_Overlay.pm:950
+msgid "This custom field does not apply to that object"
+msgstr "此自訂欄ä½ä¸é©ç”¨æ–¼è©²ç‰©ä»¶"
+
+#: share/html/Admin/Tools/Configuration.html:52
+msgid "This feature is only available to system administrators"
+msgstr "此項功能僅é™ç³»çµ±ç®¡ç†å“¡ä½¿ç”¨"
+
+#: lib/RT/Interface/Web/Session.pm:277
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr ""
+
+#: share/html/Ticket/Elements/PreviewScrips:58
+msgid "This message will be sent to..."
+msgstr "此訊æ¯æœƒå¯„給..."
+
+#: NOT FOUND IN SOURCE
+msgid "This ticket %1 %2 (%3)\\n"
+msgstr "申請單 %1 %2 (%3)\\n"
+
+#: bin/rt-crontool:369
+msgid "This tool allows the user to run arbitrary perl modules from within RT."
+msgstr "此工具程å¼æœƒè®“使用者經由 RT 執行任æ„命令。"
+
+#: lib/RT/Transaction_Overlay.pm:338
+msgid "This transaction appears to have no content"
+msgstr "此項更動報告沒有內容"
+
+#: share/html/Ticket/Elements/ShowRequestor:85
+#. ($rows)
+msgid "This user's %1 highest priority tickets"
+msgstr "使用者é€å‡ºçš„å‰ %1 份優先處ç†ç”³è«‹å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "This user's 25 highest priority tickets"
+msgstr "使用者é€å‡ºçš„å‰ 25 份優先處ç†ç”³è«‹å–®"
+
+#: lib/RT/Date.pm:107
+msgid "Thu"
+msgstr "星期四"
+
+#: NOT FOUND IN SOURCE
+msgid "Thu."
+msgstr "星期四"
+
+#: share/html/Dashboards/Subscription.html:112
+msgid "Thursday"
+msgstr ""
+
+#: lib/RT/Record.pm:908 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52
+msgid "Ticket"
+msgstr "申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 %2"
+msgstr "申請單 # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket # %1 Jumbo update: %2"
+msgstr "更新申請單 # %1 的全部資訊:%2"
+
+#: share/html/Ticket/ModifyAll.html:48 share/html/Ticket/ModifyAll.html:52
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket #%1 Jumbo update: %2"
+msgstr "更新申請單 #%1 的全部資訊:%2"
+
+#: share/html/Ticket/Graphs/index.html:113
+#. ($id)
+msgid "Ticket #%1 relationships graph"
+msgstr ""
+
+#: share/html/Approvals/Elements/ShowDependency:69
+#. ($link->BaseObj->Id, $link->BaseObj->Subject)
+msgid "Ticket #%1: %2"
+msgstr "申請單 #%1: %2"
+
+#: lib/RT/Action/CreateTickets.pm:1125 lib/RT/Action/CreateTickets.pm:1134 lib/RT/Action/CreateTickets.pm:379 lib/RT/Action/CreateTickets.pm:503 lib/RT/Action/CreateTickets.pm:515
+#. ($T::Tickets{$template_id}->Id)
+#. ($T::Tickets{$template_id}->id)
+#. ($ticket->Id)
+msgid "Ticket %1"
+msgstr "申請單 %1"
+
+#: lib/RT/Ticket_Overlay.pm:668 lib/RT/Ticket_Overlay.pm:692
+#. ($self->Id, $QueueObj->Name)
+msgid "Ticket %1 created in queue '%2'"
+msgstr "申請單 #%1 æˆåŠŸæ–°å¢žæ–¼ '%2' 表單"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket %1 loaded\\n"
+msgstr "載入申請單 %1\\n"
+
+#: share/html/Search/Bulk.html:420 share/html/Tools/MyDay.html:100 share/html/Tools/MyDay.html:91 share/html/Tools/MyDay.html:94
+#. ($id, $msg)
+#. ($Ticket->Id, $_)
+msgid "Ticket %1: %2"
+msgstr "申請單 %1:%2"
+
+#: share/html/Admin/Elements/QueueTabs:76
+msgid "Ticket Custom Fields"
+msgstr "申請單的自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Due"
+msgstr "表單處ç†æœŸé™"
+
+#: share/html/Ticket/History.html:48 share/html/Ticket/History.html:51
+#. ($Ticket->Id, $Ticket->Subject)
+msgid "Ticket History # %1 %2"
+msgstr "申請單處ç†ç´€éŒ„ # %1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket ID"
+msgstr "單號"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Id"
+msgstr "申請單編號"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Processing Due"
+msgstr "表單é‹è¡ŒæœŸé™"
+
+#: etc/initialdata:300
+msgid "Ticket Resolved"
+msgstr "申請單已解決"
+
+#: share/html/Elements/CollectionList:166 share/html/Elements/TicketList:64
+msgid "Ticket Search"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1174 share/html/Admin/Elements/GlobalCustomFieldTabs:81 share/html/Admin/Global/CustomFields/index.html:89
+msgid "Ticket Transactions"
+msgstr "申請單的更動"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket Type"
+msgstr "表單種類"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket attachment"
+msgstr "申請單附件"
+
+#: lib/RT/Tickets_Overlay.pm:2121
+msgid "Ticket content"
+msgstr "申請單內容"
+
+#: lib/RT/Tickets_Overlay.pm:2170
+msgid "Ticket content type"
+msgstr "申請單內容類別"
+
+#: lib/RT/Ticket_Overlay.pm:490 lib/RT/Ticket_Overlay.pm:503 lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:676
+msgid "Ticket could not be created due to an internal error"
+msgstr "內部錯誤,無法新增申請單"
+
+#: share/html/Ticket/Create.html:255
+msgid "Ticket could not be loaded"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket created"
+msgstr "申請單新增完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket creation failed"
+msgstr "申請單新增失敗"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket deleted"
+msgstr "申請單刪除完畢"
+
+#: lib/RT/Config.pm:267
+msgid "Ticket display"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket id not found"
+msgstr "找ä¸åˆ°ç”³è«‹å–®ç·¨è™Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket killed"
+msgstr "申請單刪除完畢"
+
+#: share/html/Ticket/Display.html:63
+msgid "Ticket metadata"
+msgstr "申請單的æ述資訊"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket not found"
+msgstr "找ä¸åˆ°ç”³è«‹å–®"
+
+#: etc/initialdata:286
+msgid "Ticket status changed"
+msgstr "申請單ç¾æ³å·²æ”¹è®Š"
+
+#: NOT FOUND IN SOURCE
+msgid "Ticket watchers"
+msgstr "申請單視察員"
+
+#: lib/RT/Search/FromSQL.pm:80
+#. (ref $self)
+msgid "TicketSQL search module"
+msgstr "TicketSQL 查詢模組"
+
+#: lib/RT/CustomField_Overlay.pm:1173 share/html/Admin/Elements/GlobalCustomFieldTabs:75 share/html/Admin/Global/CustomFields/index.html:83 share/html/Elements/Tabs:74 share/html/Search/Chart:110 share/html/Search/Elements/Chart:117
+msgid "Tickets"
+msgstr "申請單"
+
+#: lib/RT/Tickets_Overlay.pm:2341
+#. ($self->loc( $args{'TYPE'} ), $args{'BASE'},)
+msgid "Tickets %1 %2"
+msgstr "申請單 %1 %2"
+
+#: lib/RT/Tickets_Overlay.pm:2296
+#. ($self->loc( $args{'TYPE'} ), $args{'TARGET'})
+msgid "Tickets %1 by %2"
+msgstr "申請單 %1 (%2)"
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets I own"
+msgstr "待處ç†çš„申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets I requested"
+msgstr "é€å‡ºçš„申請單"
+
+#: share/html/Tools/Reports/CreatedByDates.html:88
+msgid "Tickets created after"
+msgstr "申請單建立起始日"
+
+#: share/html/Tools/Reports/CreatedByDates.html:90
+msgid "Tickets created before"
+msgstr "申請單建立截止日"
+
+#: NOT FOUND IN SOURCE
+msgid "Tickets from %1"
+msgstr "%1 的申請單"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:89
+msgid "Tickets resolved after"
+msgstr "申請單解決起始日"
+
+#: share/html/Tools/Reports/ResolvedByDates.html:91
+msgid "Tickets resolved before"
+msgstr "申請單解決截止日"
+
+#: share/html/Approvals/Elements/ShowDependency:50
+msgid "Tickets which depend on this approval:"
+msgstr "批准之後,å¯æŽ¥çºŒè™•ç†ï¼š"
+
+#: share/html/Elements/RT__Ticket/ColumnMap:169 share/html/Search/Elements/PickBasics:165 share/html/Ticket/Create.html:190 share/html/Ticket/Elements/EditBasics:74
+msgid "Time Estimated"
+msgstr "é è¨ˆæ™‚é–“"
+
+#: lib/RT/Tickets_Overlay.pm:2092 share/html/Elements/RT__Ticket/ColumnMap:164 share/html/Search/Elements/PickBasics:166 share/html/Ticket/Create.html:200 share/html/Ticket/Elements/EditBasics:92
+msgid "Time Left"
+msgstr "剩餘時間"
+
+#: lib/RT/Tickets_Overlay.pm:2067 share/html/Elements/RT__Ticket/ColumnMap:159 share/html/Search/Elements/PickBasics:164 share/html/Ticket/Create.html:195 share/html/Ticket/Elements/EditBasics:83
+msgid "Time Worked"
+msgstr "處ç†æ™‚é–“"
+
+#: NOT FOUND IN SOURCE
+msgid "Time left"
+msgstr "剩餘時間"
+
+#: share/html/Elements/Footer:54
+msgid "Time to display"
+msgstr "顯示時間"
+
+#: NOT FOUND IN SOURCE
+msgid "Time worked"
+msgstr "已處ç†æ™‚é–“"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:106 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeEstimated"
+msgstr "é è¨ˆæ™‚é–“"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Tickets_Overlay.pm:104 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeLeft"
+msgstr "剩餘時間"
+
+#: lib/RT/Graph/Tickets.pm:157 lib/RT/Ticket_Overlay.pm:911 lib/RT/Tickets_Overlay.pm:105 share/html/Search/Elements/BuildFormatString:99
+msgid "TimeWorked"
+msgstr "已處ç†æ™‚é–“"
+
+#: lib/RT/Installer.pm:210 lib/RT/Installer.pm:235 share/html/User/Prefs.html:82
+msgid "Timezone"
+msgstr ""
+
+#: share/html/Search/Elements/EditFormat:75
+msgid "Title"
+msgstr "標題"
+
+#: share/html/Ticket/Forward.html:67
+msgid "To"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:"
+msgstr "產生這次更動的差異檔:"
+
+#: NOT FOUND IN SOURCE
+msgid "To generate a diff of this commit:\\n"
+msgstr "產生這次更動的差異檔:\\n"
+
+#: share/html/Elements/Footer:65
+#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+msgid "To inquire about support, training, custom development or licensing, please contact %1."
+msgstr "如果有支æ´ã€æ•™è‚²è¨“ç·´åŠå®šè£½é–‹ç™¼çš„需è¦ï¼Œè«‹é€£çµ¡ %1。"
+
+#: NOT FOUND IN SOURCE
+msgid "Todo"
+msgstr "待辦事項"
+
+#: lib/RT/Graph/Tickets.pm:159 lib/RT/Ticket_Overlay.pm:914 lib/RT/Tickets_Overlay.pm:118 share/html/Elements/RT__Ticket/ColumnMap:198 share/html/Elements/RT__Ticket/ColumnMap:231 share/html/Search/Elements/BuildFormatString:99
+msgid "Told"
+msgstr "告知日"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "ToldRelative"
+msgstr "告知日(相å°å€¼)"
+
+#: share/html/Admin/Elements/Tabs:70 share/html/Admin/index.html:84 share/html/Elements/Tabs:77 share/html/Tools/index.html:48 share/html/Tools/index.html:51
+msgid "Tools"
+msgstr "工具"
+
+#: share/html/Search/Elements/Chart:138
+msgid "Total"
+msgstr "é "
+
+#: etc/initialdata:227
+msgid "Transaction"
+msgstr "æ›´å‹•"
+
+#: lib/RT/Transaction_Overlay.pm:880
+#. ($self->Data)
+msgid "Transaction %1 purged"
+msgstr "清除更動報告 %1"
+
+#: lib/RT/Transaction_Overlay.pm:193
+msgid "Transaction Created"
+msgstr "更動報告已新增"
+
+#: share/html/Admin/Elements/QueueTabs:80
+msgid "Transaction Custom Fields"
+msgstr "更動的自訂欄ä½"
+
+#: NOT FOUND IN SOURCE
+msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
+msgstr "未指定申請單編號,無法新增更動"
+
+#: lib/RT/Transaction_Overlay.pm:126
+msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
+msgstr "未指定物件類別åŠç·¨è™Ÿï¼Œç„¡æ³•æ–°å¢žæ›´å‹•"
+
+#: NOT FOUND IN SOURCE
+msgid "TransactionBatch"
+msgstr "批次更動時"
+
+#: NOT FOUND IN SOURCE
+msgid "TransactionCreate"
+msgstr "新增更動時"
+
+#: lib/RT/Tickets_Overlay.pm:129
+msgid "TransactionDate"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:945
+msgid "Transactions are immutable"
+msgstr "ä¸å¯æ›´æ”¹æ›´å‹•å ±å‘Š"
+
+#: NOT FOUND IN SOURCE
+msgid "Transfer to"
+msgstr "移交給"
+
+#: share/html/Admin/Elements/ShowKeyInfo:55
+msgid "Trust"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Trying to delete a right: %1"
+msgstr "試圖刪除æŸé …權é™ï¼š%1"
+
+#: lib/RT/Date.pm:105
+msgid "Tue"
+msgstr "星期二"
+
+#: NOT FOUND IN SOURCE
+msgid "Tue."
+msgstr "星期二"
+
+#: share/html/Dashboards/Subscription.html:110
+msgid "Tuesday"
+msgstr ""
+
+#: lib/RT/Ticket_Overlay.pm:912 lib/RT/Tickets_Overlay.pm:1906 lib/RT/Tickets_Overlay.pm:95 share/html/Admin/CustomFields/Modify.html:67 share/html/Admin/Elements/EditCustomField:67 share/html/Elements/RT__Ticket/ColumnMap:153 share/html/Search/Elements/BuildFormatString:99 share/html/Ticket/Elements/AddWatchers:56 share/html/Ticket/Elements/AddWatchers:67 share/html/Ticket/Elements/AddWatchers:77
+msgid "Type"
+msgstr "類別"
+
+#: lib/RT/CustomField_Overlay.pm:808
+#. ($self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ),)
+msgid "Type changed from '%1' to '%2'"
+msgstr ""
+
+#: share/html/Search/Elements/EditSearches:255
+msgid "Unable to determine object type or id"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:254
+#. ($DashboardId)
+msgid "Unable to subscribe to dashboard %1: Permission denied"
+msgstr "無法訂閱控制é¢æ¿ %1: 權é™ä¸è¶³"
+
+#: lib/RT/ScripCondition_Overlay.pm:126
+msgid "Unimplemented"
+msgstr "尚無實作"
+
+#: share/html/Admin/Users/Modify.html:91
+msgid "Unix login"
+msgstr "外部系統登入帳號"
+
+#: NOT FOUND IN SOURCE
+msgid "UnixUsername"
+msgstr "外部系統登入帳號"
+
+#: lib/RT/Crypt/GnuPG.pm:2182 lib/RT/Crypt/GnuPG.pm:2187
+msgid "Unknown (no trust value assigned)"
+msgstr ""
+
+#: lib/RT/Crypt/GnuPG.pm:2192
+msgid "Unknown (this value is new to the system)"
+msgstr ""
+
+#: lib/RT/Attachment_Overlay.pm:305 lib/RT/Record.pm:804
+#. ($self->ContentEncoding)
+#. ($ContentEncoding)
+msgid "Unknown ContentEncoding %1"
+msgstr "ä¸å¯è§£çš„å…§å®¹æ–‡å­—ç·¨ç¢¼æ–¹å¼ %1"
+
+#: lib/RT/Interface/Web/QueryBuilder/Tree.pm:267
+#. ($key)
+msgid "Unknown field: %1"
+msgstr "未知的欄ä½ï¼š%1"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:65
+msgid "Unlimit"
+msgstr ""
+
+#: share/html/Elements/SelectResultsPerPage:60
+msgid "Unlimited"
+msgstr "全數顯示"
+
+#: share/html/Search/Elements/SelectSearchesForObjects:66
+msgid "Unnamed search"
+msgstr "未命å的查詢"
+
+#: lib/RT/Handle.pm:641
+msgid "Unprivileged"
+msgstr "éžå…§éƒ¨æˆå“¡"
+
+#: share/html/Admin/Elements/EditCustomFields:62
+msgid "Unselected Custom Fields"
+msgstr "未é¸å–的自訂欄ä½"
+
+#: share/html/Admin/CustomFields/Objects.html:63
+msgid "Unselected objects"
+msgstr "未é¸å–的物件"
+
+#: lib/RT/User_Overlay.pm:1684 lib/RT/User_Overlay.pm:1700
+msgid "Unset private key"
+msgstr ""
+
+#: lib/RT/Transaction_Overlay.pm:716
+msgid "Untaken"
+msgstr "未被å—ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Untitled search"
+msgstr "未命å的查詢"
+
+#: NOT FOUND IN SOURCE
+msgid "Up"
+msgstr "上一é "
+
+#: share/html/Admin/Users/Memberships.html:88 share/html/Elements/RT__Ticket/ColumnMap:301 share/html/Search/Bulk.html:217 share/html/Search/Bulk.html:82 share/html/Search/Elements/EditSearches:70
+msgid "Update"
+msgstr "處ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "Update All"
+msgstr "全部更新"
+
+#: share/html/Search/Chart.html:92 share/html/Ticket/Graphs/Elements/EditGraphProperties:121
+msgid "Update Graph"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "Update ID"
+msgstr "更新編號"
+
+#: share/html/Ticket/Update.html:147
+msgid "Update Ticket"
+msgstr "更新申請單"
+
+#: share/html/Search/Bulk.html:133 share/html/Ticket/ModifyAll.html:90 share/html/Ticket/Update.html:91
+msgid "Update Type"
+msgstr "更新類別"
+
+#: NOT FOUND IN SOURCE
+msgid "Update all these tickets at once"
+msgstr "整批更新申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Update email"
+msgstr "æ›´æ–°é›»å­éƒµä»¶ä¿¡ç®±"
+
+#: share/html/Search/Build.html:109
+msgid "Update format and Search"
+msgstr ""
+
+#: share/html/Search/Bulk.html:228
+msgid "Update multiple tickets"
+msgstr "批次更新申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Update name"
+msgstr "更新帳號"
+
+#: lib/RT/Action/CreateTickets.pm:524 lib/RT/Interface/Web.pm:1144
+msgid "Update not recorded."
+msgstr "更新未被記錄"
+
+#: NOT FOUND IN SOURCE
+msgid "Update selected tickets"
+msgstr "æ›´æ–°é¸æ“‡çš„申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Update signature"
+msgstr "更新簽章"
+
+#: share/html/Ticket/ModifyAll.html:87
+msgid "Update ticket"
+msgstr "更新申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Update ticket # %1"
+msgstr "更新申請單 # %1"
+
+#: share/html/SelfService/Update.html:117 share/html/SelfService/Update.html:49
+#. ($Ticket->id)
+msgid "Update ticket #%1"
+msgstr "更新申請單 #%1"
+
+#: share/html/Ticket/Update.html:178
+#. ($TicketObj->id, $TicketObj->Subject)
+msgid "Update ticket #%1 (%2)"
+msgstr "更新申請單 #%1 (%2)"
+
+#: lib/RT/Action/CreateTickets.pm:522 lib/RT/Interface/Web.pm:1144
+msgid "Update type was neither correspondence nor comment."
+msgstr "更新的內容並éžç”³è«‹å–®å›žè¦†ä¹Ÿä¸æ˜¯è©•è«–"
+
+#: share/html/Search/Elements/BuildFormatString:99
+msgid "UpdateStatus"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1249 lib/RT/Ticket_Overlay.pm:915 lib/RT/Tickets_Overlay.pm:141 share/html/Elements/SelectDateType:56 share/html/Ticket/Elements/ShowDates:79
+msgid "Updated"
+msgstr "å‰æ¬¡æ›´æ–°"
+
+#: share/html/Search/Elements/EditSearches:257
+#. ($desc)
+msgid "Updated saved search \"%1\""
+msgstr "é å­˜æŸ¥è©¢ \"%1\" 以更新"
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload"
+msgstr "上載"
+
+#: lib/RT/CustomField_Overlay.pm:85
+msgid "Upload multiple files"
+msgstr "上載多個檔案"
+
+#: lib/RT/CustomField_Overlay.pm:80
+msgid "Upload multiple images"
+msgstr "上載多份圖片"
+
+#: lib/RT/CustomField_Overlay.pm:86
+msgid "Upload one file"
+msgstr "上載一個檔案"
+
+#: lib/RT/CustomField_Overlay.pm:81
+msgid "Upload one image"
+msgstr "上載一份圖片"
+
+#: lib/RT/CustomField_Overlay.pm:87
+msgid "Upload up to %1 files"
+msgstr "上載最多 %1 個檔案"
+
+#: lib/RT/CustomField_Overlay.pm:82
+msgid "Upload up to %1 images"
+msgstr "上載最多 %1 份圖片"
+
+#: share/html/Tools/Offline.html:94
+msgid "Upload your changes"
+msgstr "上載您的更動"
+
+#: sbin/rt-email-digest:88
+msgid "Usage: "
+msgstr ""
+
+#: lib/RT/Installer.pm:133
+msgid "Use SSL?"
+msgstr ""
+
+#: lib/RT/Config.pm:313
+msgid "Use css rules to display text monospaced and with formatting preserved, but wrap as needed. This does not work well with IE6 and you should use the previous option"
+msgstr ""
+
+#: share/html/Widgets/Form/Boolean:68
+#. ($DefaultValue? loc('Yes'): loc('No'))
+msgid "Use default (%1)"
+msgstr ""
+
+#: share/html/Admin/index.html:86
+msgid "Use other RT administrative tools"
+msgstr "使用其他的 RT 管ç†å·¥å…·"
+
+#: share/html/Widgets/Form/Select:120
+#. (join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue)
+msgid "Use system default (%1)"
+msgstr ""
+
+#: lib/RT/Config.pm:303
+msgid "Use this to protect the format of plain text"
+msgstr ""
+
+#: lib/RT/Record.pm:909 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52
+msgid "User"
+msgstr "使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 %2: %3\\n"
+msgstr "使用者 %1 %2:%3\\n"
+
+#: NOT FOUND IN SOURCE
+msgid "User %1 Password: %2\\n"
+msgstr "使用者 %1 密碼:%2\\n"
+
+#: lib/RT/Ticket_Overlay.pm:399
+#. ($args{'Owner'})
+msgid "User '%1' could not be found."
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'。"
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found"
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "User '%1' not found\\n"
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'\\n"
+
+#: share/html/Admin/Elements/ShowKeyInfo:65
+msgid "User (created - expire)"
+msgstr ""
+
+#: etc/initialdata:170 etc/initialdata:87
+msgid "User Defined"
+msgstr "使用者自訂"
+
+#: share/html/Admin/Elements/EditScrip:95
+msgid "User Defined conditions and actions"
+msgstr "使用者自訂的æ¢ä»¶åŠå‹•ä½œ"
+
+#: NOT FOUND IN SOURCE
+msgid "User ID"
+msgstr "使用者 ID"
+
+#: NOT FOUND IN SOURCE
+msgid "User Id"
+msgstr "使用者 ID"
+
+#: NOT FOUND IN SOURCE
+msgid "User Number"
+msgstr "員工編號"
+
+#: share/html/Admin/Elements/CustomFieldTabs:74 share/html/Admin/Elements/GroupTabs:70 share/html/Admin/Elements/QueueTabs:87 share/html/Admin/Elements/SystemTabs:70 share/html/Admin/Global/index.html:74
+msgid "User Rights"
+msgstr "使用者權é™"
+
+#: NOT FOUND IN SOURCE
+msgid "User Setup"
+msgstr "使用者設定"
+
+#: NOT FOUND IN SOURCE
+msgid "User Shift"
+msgstr "å“¡å·¥ç­åˆ¥"
+
+#: lib/RT/Interface/Web.pm:1672
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
+msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
+msgstr "使用者試圖在 %2 物件 #%3 çš„è‡ªè¨‚æ¬„ä½ %1 上執行未知的更新æ“作"
+
+#: share/html/Admin/Users/Modify.html:310
+#. ($msg)
+msgid "User could not be created: %1"
+msgstr "無法新增使用者:%1"
+
+#: lib/RT/User_Overlay.pm:264
+msgid "User created"
+msgstr "使用者新增完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "User created: %1"
+msgstr "使用者 %1 新增完畢"
+
+#: NOT FOUND IN SOURCE
+msgid "User created: %1 (%2)"
+msgstr "使用者 %1 (%2) 新增完畢"
+
+#: share/html/Admin/CustomFields/GroupRights.html:76 share/html/Admin/Global/GroupRights.html:90 share/html/Admin/Groups/GroupRights.html:77 share/html/Admin/Queues/GroupRights.html:92
+msgid "User defined groups"
+msgstr "使用者定義的群組"
+
+#: lib/RT/User_Overlay.pm:1151
+msgid "User disabled"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:1153
+msgid "User enabled"
+msgstr ""
+
+#: share/html/Admin/Users/GnuPG.html:61
+msgid "User has empty email address"
+msgstr ""
+
+#: lib/RT/User_Overlay.pm:489 lib/RT/User_Overlay.pm:509
+msgid "User loaded"
+msgstr "已載入使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "User notified"
+msgstr "已通知使用者"
+
+#: NOT FOUND IN SOURCE
+msgid "User renamed from %1 to %2"
+msgstr "使用者 %1 已改å為 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "User view"
+msgstr "使用者ç§äººè³‡æ–™"
+
+#: share/html/Admin/Users/GnuPG.html:110
+msgid "User's GnuPG keys"
+msgstr ""
+
+#: share/html/Admin/Groups/index.html:113
+msgid "User-defined groups"
+msgstr "使用者自定群組"
+
+#: NOT FOUND IN SOURCE
+msgid "UserDefined"
+msgstr "使用者自定"
+
+#: share/html/Admin/Users/Modify.html:71 share/html/Elements/Login:92 share/html/Ticket/Elements/AddWatchers:58
+msgid "Username"
+msgstr "帳號"
+
+#: lib/RT/Config.pm:160
+msgid "Username format"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:1175 share/html/Admin/Elements/GlobalCustomFieldTabs:57 share/html/Admin/Elements/SelectNewGroupMembers:49 share/html/Admin/Elements/Tabs:55 share/html/Admin/Global/CustomFields/index.html:66 share/html/Admin/Groups/Members.html:75 share/html/Admin/Queues/People.html:91 share/html/Admin/index.html:58 share/html/User/Groups/Members.html:81
+msgid "Users"
+msgstr "使用者"
+
+#: share/html/Admin/Users/index.html:99
+msgid "Users matching search criteria"
+msgstr "符åˆæŸ¥è©¢æ¢ä»¶çš„使用者"
+
+#: bin/rt-crontool:176
+#. ($txn->id)
+msgid "Using transaction #%1..."
+msgstr "使用更動 #%1..."
+
+#: lib/RT/Tickets_Overlay_SQL.pm:339
+msgid "Valid Query"
+msgstr "åˆç†çš„查詢"
+
+#: share/html/Admin/CustomFields/Modify.html:85
+msgid "Validation"
+msgstr "é©—è­‰"
+
+#: NOT FOUND IN SOURCE
+msgid "ValueOfQueue"
+msgstr "é¸æ“‡è¡¨å–®"
+
+#: share/html/Admin/CustomFields/Modify.html:130 share/html/Admin/Elements/EditCustomField:80
+msgid "Values"
+msgstr "欄ä½å€¼"
+
+#: share/html/Tools/index.html:70
+msgid "Various RT reports"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:97
+msgid "View dashboards for this group"
+msgstr "檢視此群組的控制é¢æ¿"
+
+#: NOT FOUND IN SOURCE
+msgid "View log"
+msgstr "檢視紀錄檔"
+
+#: lib/RT/Dashboard.pm:85
+msgid "View personal dashboards"
+msgstr "檢視個人的控制é¢æ¿"
+
+#: lib/RT/Dashboard.pm:80
+msgid "View system dashboards"
+msgstr "檢視系統的控制é¢æ¿"
+
+#: lib/RT/Date.pm:115
+msgid "W3CDTF"
+msgstr ""
+
+#: lib/RT/Config.pm:194
+msgid "WYSIWYG composer height"
+msgstr ""
+
+#: lib/RT/Config.pm:185
+msgid "WYSIWYG message composer"
+msgstr ""
+
+#: share/html/Ticket/Elements/ShowGnuPGStatus:170
+msgid "Warning! This is NOT signed!"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:266
+msgid "Warning: you have no email address set, so you will not receive this dashboard until you have it set"
+msgstr "警告: 您沒有設定 email 地å€, 您將ä¸æœƒæ”¶åˆ°æœ¬æŽ§åˆ¶é¢æ¿çš„æ›´æ–°"
+
+#: lib/RT/Queue_Overlay.pm:109
+msgid "Watch"
+msgstr "視察"
+
+#: lib/RT/Queue_Overlay.pm:110
+msgid "WatchAsAdminCc"
+msgstr "以管ç†å“¡å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è¦–察"
+
+#: lib/RT/Tickets_Overlay.pm:134
+msgid "Watcher"
+msgstr "視察員"
+
+#: NOT FOUND IN SOURCE
+msgid "Watcher loaded"
+msgstr "æˆåŠŸè¼‰å…¥è¦–察員資訊"
+
+#: lib/RT/Tickets_Overlay.pm:145
+msgid "WatcherGroup"
+msgstr "視察員群組"
+
+#: share/html/Admin/Elements/QueueTabs:65
+msgid "Watchers"
+msgstr "視察員"
+
+#: share/html/Install/DatabaseDetails.html:64
+msgid "We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT."
+msgstr ""
+
+#: share/html/Install/DatabaseDetails.html:55
+msgid "We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database."
+msgstr ""
+
+#: lib/RT/Installer.pm:197
+msgid "Web port"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "WebEncoding"
+msgstr "網é æ–‡å­—編碼方å¼"
+
+#: lib/RT/Date.pm:106
+msgid "Wed"
+msgstr "星期三"
+
+#: NOT FOUND IN SOURCE
+msgid "Wed."
+msgstr "星期三"
+
+#: share/html/Dashboards/Subscription.html:111
+msgid "Wednesday"
+msgstr ""
+
+#: lib/RT/Config.pm:347
+msgid "Weekly digest"
+msgstr ""
+
+#: share/html/Install/index.html:48
+msgid "Welcome to RT!"
+msgstr ""
+
+#: share/html/Tools/MyDay.html:77
+msgid "What I did today"
+msgstr "今日工作一覽"
+
+#: share/html/Install/index.html:67
+msgid "What is RT?"
+msgstr ""
+
+#: lib/RT/Installer.pm:161
+msgid "When RT can't handle an email message, where should it be forwarded?"
+msgstr ""
+
+#: share/html/Install/Global.html:54
+msgid "When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
+msgstr "當申請單通éŽæ‰€æœ‰ç°½æ ¸å¾Œï¼Œå°‡æ­¤è¨Šæ¯å›žè¦†åˆ°åŽŸç”³è«‹å–®"
+
+#: NOT FOUND IN SOURCE
+msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
+msgstr "當申請單通éŽæŸé …簽核後,將此訊æ¯å›žè¦†åˆ°åŽŸç”³è«‹å–®"
+
+#: etc/initialdata:104
+msgid "When a ticket is created"
+msgstr "新增申請單時"
+
+#: lib/RT/Approval/Rule/NewPending.pm:54
+msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
+msgstr "簽核單新增之後,通知應å—ç†çš„承辦人åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
+
+#: etc/initialdata:109
+msgid "When anything happens"
+msgstr "當任何事情發生時"
+
+#: share/html/Install/DatabaseDetails.html:58
+msgid "When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database"
+msgstr ""
+
+#: etc/initialdata:178 etc/upgrade/3.7.1/content:3
+msgid "Whenever a ticket is closed"
+msgstr "當申請單關閉時"
+
+#: etc/initialdata:164 etc/upgrade/3.8.3/content:3
+msgid "Whenever a ticket is rejected"
+msgstr ""
+
+#: etc/initialdata:183 etc/upgrade/3.7.1/content:8
+msgid "Whenever a ticket is reopened"
+msgstr "當申請單é‡æ–°é–‹å•Ÿæ™‚"
+
+#: etc/initialdata:157
+msgid "Whenever a ticket is resolved"
+msgstr "當申請單解決時"
+
+#: etc/initialdata:143
+msgid "Whenever a ticket's owner changes"
+msgstr "當申請單更æ›æ‰¿è¾¦äººæ™‚"
+
+#: etc/initialdata:136 etc/upgrade/3.1.17/content:16
+msgid "Whenever a ticket's priority changes"
+msgstr "當申請單的優先順åºæ”¹è®Šæ™‚"
+
+#: etc/initialdata:151
+msgid "Whenever a ticket's queue changes"
+msgstr "當申請單更æ›è¡¨å–®æ™‚"
+
+#: etc/initialdata:128
+msgid "Whenever a ticket's status changes"
+msgstr "當申請單更新ç¾æ³æ™‚"
+
+#: etc/initialdata:171
+msgid "Whenever a user-defined condition occurs"
+msgstr "當使用者自訂的情æ³ç™¼ç”Ÿæ™‚"
+
+#: etc/initialdata:122
+msgid "Whenever comments come in"
+msgstr "當評論é€é”時"
+
+#: etc/initialdata:115
+msgid "Whenever correspondence comes in"
+msgstr "當回覆é€é”時"
+
+#: lib/RT/Installer.pm:183
+msgid "Where to find your sendmail binary."
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:63
+msgid "Wipeout"
+msgstr ""
+
+#: share/html/Admin/Users/Modify.html:191 share/html/User/Prefs.html:94
+msgid "Work"
+msgstr "å…¬å¸"
+
+#: NOT FOUND IN SOURCE
+msgid "Work offline"
+msgstr "離線工作"
+
+#: share/html/Elements/RT__User/ColumnMap:91
+msgid "WorkPhone"
+msgstr "å…¬å¸é›»è©±"
+
+#: share/html/Ticket/Elements/ShowBasics:65 share/html/Ticket/Update.html:79 share/html/Tools/MyDay.html:62
+msgid "Worked"
+msgstr "處ç†æ™‚é–“"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow #%1"
+msgstr "æµç¨‹ #%1"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow Begin"
+msgstr "æµç¨‹é–‹å§‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow End"
+msgstr "æµç¨‹çµæŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflow deleted"
+msgstr "æµç¨‹å·²åˆªé™¤"
+
+#: NOT FOUND IN SOURCE
+msgid "Workflows"
+msgstr "æµç¨‹"
+
+#: NOT FOUND IN SOURCE
+msgid "Writable"
+msgstr "å¯è®€å¯«"
+
+#: NOT FOUND IN SOURCE
+msgid "XXX CHANGEME You are not an authorized user"
+msgstr "XXX CHANGEME 您是未經授權的使用者"
+
+#: share/html/Widgets/Form/Boolean:77
+msgid "Yes"
+msgstr "是"
+
+#: lib/RT/Ticket_Overlay.pm:2898
+msgid "You already own this ticket"
+msgstr "您已是這份申請單的承辦人"
+
+#: share/html/Elements/GnuPG/KeyIssues:63
+msgid "You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption."
+msgstr ""
+
+#: share/html/Elements/GnuPG/KeyIssues:61
+msgid "You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption."
+msgstr ""
+
+#: lib/RT/Interface/Web.pm:396 lib/RT/Interface/Web.pm:403
+msgid "You are not an authorized user"
+msgstr "您ä¸æ˜¯è¢«æŽˆæ¬Šçš„使用者"
+
+#: share/html/Ticket/Elements/ShowUpdateStatus:51
+#. (RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id)
+msgid "You can <a href=\"%1\">jump to the first unread message</a> or <a href=\"%2\">jump to the first unread message and mark all messages as seen</a>."
+msgstr "<a href=\"%1\">跳至第一個未讀訊æ¯</a>或<a href=\"%2\">跳至第一個未讀的訊æ¯ä¸¦å°‡æ‰€æœ‰è¨Šæ¯æ¨™è¨˜ç‚ºå·²è®€</a>."
+
+#: NOT FOUND IN SOURCE
+msgid "You can access it with the Download button on the right."
+msgstr "您å¯ä»¥æŒ‰å³æ–¹çš„「下載ã€éµä¾†å–得。"
+
+#: share/html/Prefs/Search.html:58
+msgid "You can also edit the predefined search itself"
+msgstr "您也å¯ä»¥ç›´æŽ¥ç·¨è¼¯é å…ˆå®šç¾©çš„æœå°‹æ–¹å¼"
+
+#: lib/RT/Ticket_Overlay.pm:2775
+msgid "You can only reassign tickets that you own or that are unowned"
+msgstr "祇能é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿è¾¦æˆ–是沒有承辦人的申請單"
+
+#: lib/RT/Ticket_Overlay.pm:2771
+msgid "You can only take tickets that are unowned"
+msgstr "您祇能å—ç†å°šç„¡æ‰¿è¾¦äººçš„申請單"
+
+#: share/html/Admin/Tools/Shredder/Elements/Error/NoRights:54
+msgid "You don't have <b>SuperUser</b> right."
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "You don't have permission to view that ticket.\\n"
+msgstr "您沒有看那份申請單的權é™ã€‚\\n"
+
+#: lib/RT/StyleGuide.pod:772
+#. ($num, $queue)
+msgid "You found %1 tickets in queue %2"
+msgstr "您會在表單 %2 找到 %1 的申請單"
+
+#: share/html/NoAuth/Logout.html:55
+msgid "You have been logged out of RT."
+msgstr "您已登出 RT。"
+
+#: share/html/SelfService/Display.html:132
+msgid "You have no permission to create tickets in that queue."
+msgstr "您沒有在該表單新增申請單的權é™ã€‚"
+
+#: lib/RT/Ticket_Overlay.pm:1710
+msgid "You may not create requests in that queue."
+msgstr "您ä¸èƒ½åœ¨è©²è¡¨å–®ä¸­æ出申請。"
+
+#: share/html/Install/Basics.html:85
+msgid "You must enter an Administrative password"
+msgstr "必須輸入管ç†å“¡å¯†ç¢¼"
+
+#: NOT FOUND IN SOURCE
+msgid "You need to restart the Request Tracker service for saved changes to take effect."
+msgstr "您必須é‡æ–°å•Ÿå‹• Request Tracker æœå‹™ï¼Œå„²å­˜çš„更動纔會生效。"
+
+#: share/html/Install/Finish.html:56
+msgid "You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier."
+msgstr ""
+
+#: share/html/Install/DatabaseType.html:55
+msgid "You should choose the database you or your local database administrator is most comfortable with."
+msgstr ""
+
+#: share/html/Install/index.html:79
+msgid "You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database."
+msgstr "您看到這個畫é¢è¡¨ç¤ºæ‚¨çš„ RT 並沒有設定正確的資料庫。這大概是您第一次執行 RT。點é¸ä¸‹æ–¹çš„<i>開始å§ï¼</i>,RT 會幫助您設定好 RT 伺æœå™¨åŠè³‡æ–™åº«ã€‚"
+
+#: share/html/NoAuth/Logout.html:59
+msgid "You're welcome to login again"
+msgstr "歡迎下次å†ä¾†"
+
+#: NOT FOUND IN SOURCE
+msgid "Your %1 requests"
+msgstr "您æ出的 %1 申請單"
+
+#: NOT FOUND IN SOURCE
+msgid "Your RT administrator has misconfigured the mail aliases which invoke RT"
+msgstr "RT 管ç†å“¡å¯èƒ½è¨­éŒ¯äº†ç”± RT 寄出的郵件收件人標頭檔"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved by %1. Other approvals may still be pending."
+msgstr "申請單已由 %1 批准。å¯èƒ½é‚„有其他待簽核的步驟。"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request has been approved."
+msgstr "您的申請單已完æˆç°½æ ¸ç¨‹åºã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected"
+msgstr "您的申請單已被é§å›ž"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected by %1."
+msgstr "您的申請單已被 %1 é§å›žã€‚"
+
+#: NOT FOUND IN SOURCE
+msgid "Your request was rejected."
+msgstr "您的申請單已被é§å›žã€‚"
+
+#: lib/RT/Interface/Web.pm:425
+msgid "Your username or password is incorrect"
+msgstr "您的帳號或密碼有誤"
+
+#: share/html/Admin/Users/Modify.html:171 share/html/Elements/RT__User/ColumnMap:126 share/html/User/Prefs.html:155
+msgid "Zip"
+msgstr "郵éžå€è™Ÿ"
+
+#: NOT FOUND IN SOURCE
+msgid "[no subject]"
+msgstr "[沒有標題]"
+
+#: share/html/Search/Elements/DisplayOptions:62
+msgid "[none]"
+msgstr "[ç„¡]"
+
+#: lib/RT/Config.pm:302
+msgid "add <pre> tag around plain text attachments"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:59
+msgid "after"
+msgstr "晚於"
+
+#: NOT FOUND IN SOURCE
+msgid "ago"
+msgstr "éŽæœŸ"
+
+#: NOT FOUND IN SOURCE
+msgid "alert"
+msgstr "急訊"
+
+#: lib/RT/System.pm:91
+msgid "allow creation of saved searches"
+msgstr "å…許建立é å­˜æŸ¥è©¢"
+
+#: lib/RT/System.pm:90
+msgid "allow loading of saved searches"
+msgstr "å…許載入é å­˜æŸ¥è©¢"
+
+#: NOT FOUND IN SOURCE
+msgid "approving"
+msgstr "待簽核"
+
+#: share/html/User/Elements/DelegateRights:82
+#. ($right->PrincipalObj->Object->SelfDescription)
+msgid "as granted to %1"
+msgstr "權é™åŒ %1"
+
+#: share/html/Search/Elements/SelectChartType:54
+msgid "bar"
+msgstr ""
+
+#: share/html/Elements/SelectDateRelation:57
+msgid "before"
+msgstr "æ—©æ–¼"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:54
+msgid "bottom to top"
+msgstr "由下至上"
+
+#: NOT FOUND IN SOURCE
+msgid "chart"
+msgstr "圖表"
+
+#: share/html/Admin/Tools/Shredder/Elements/SelectObjects:57
+msgid "click to check/uncheck all objects at once"
+msgstr ""
+
+#: share/html/SelfService/Closed.html:53
+msgid "closed"
+msgstr "已解決"
+
+#: lib/RT/Config.pm:163
+msgid "concise"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "contains"
+msgstr "包å«"
+
+#: NOT FOUND IN SOURCE
+msgid "content"
+msgstr "內容"
+
+#: NOT FOUND IN SOURCE
+msgid "content-type"
+msgstr "é¡žåž‹"
+
+#: share/html/Admin/Tools/Configuration.html:91
+msgid "core config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence (probably) not sent"
+msgstr "申請單回覆(å¯èƒ½)未é€å‡º"
+
+#: NOT FOUND IN SOURCE
+msgid "correspondence sent"
+msgstr "申請單回覆已é€å‡º"
+
+#: NOT FOUND IN SOURCE
+msgid "critical"
+msgstr "åš´é‡"
+
+#: share/html/Search/Chart.html:63 share/html/Search/Chart.html:67
+#. ($cf)
+#. ($obj->Name)
+msgid "custom field '%1'"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:99
+msgid "daily"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:72
+#. ($hour)
+msgid "daily at %1"
+msgstr "æ¯æ—¥æ–¼%1"
+
+#: lib/RT/Date.pm:349 share/html/Admin/Queues/Modify.html:95
+msgid "days"
+msgstr "天"
+
+#: NOT FOUND IN SOURCE
+msgid "dead"
+msgstr "拒絕處ç†"
+
+#: NOT FOUND IN SOURCE
+msgid "debug"
+msgstr "åµéŒ¯"
+
+#: NOT FOUND IN SOURCE
+msgid "delete"
+msgstr "刪除"
+
+#: lib/RT/Queue_Overlay.pm:87
+msgid "deleted"
+msgstr "已刪除"
+
+#: lib/RT/Config.pm:312
+msgid "display wrapped and formatted plain text attachments"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "does not match"
+msgstr "ä¸ç¬¦åˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "doesn't contain"
+msgstr "ä¸åŒ…å«"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:58 share/html/Search/Elements/PickBasics:74
+msgid "doesn't match"
+msgstr "ä¸ç¬¦åˆ"
+
+#: share/html/Ticket/ShowEmailRecord.html:62
+msgid "download"
+msgstr "下載"
+
+#: NOT FOUND IN SOURCE
+msgid "email address"
+msgstr "é›»å­éƒµä»¶ä¿¡ç®±"
+
+#: NOT FOUND IN SOURCE
+msgid "emergency"
+msgstr "å±é›£"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "equal to"
+msgstr "等於"
+
+#: NOT FOUND IN SOURCE
+msgid "error"
+msgstr "錯誤"
+
+#: share/html/Search/Elements/EditQuery:93
+msgid "error: can't move down"
+msgstr "錯誤:無法下移"
+
+#: share/html/Search/Elements/EditQuery:110 share/html/Search/Elements/EditQuery:116
+msgid "error: can't move left"
+msgstr "錯誤:無法左移"
+
+#: share/html/Search/Elements/EditQuery:92
+msgid "error: can't move up"
+msgstr "錯誤:無法上移"
+
+#: share/html/Search/Elements/EditQuery:188
+msgid "error: nothing to delete"
+msgstr "錯誤:沒有å¯åˆªé™¤çš„å°è±¡"
+
+#: share/html/Search/Elements/EditQuery:102 share/html/Search/Elements/EditQuery:129 share/html/Search/Elements/EditQuery:150
+msgid "error: nothing to move"
+msgstr "錯誤:沒有å¯ç§»å‹•çš„å°è±¡"
+
+#: share/html/Search/Elements/EditQuery:208
+msgid "error: nothing to toggle"
+msgstr "錯誤:沒有å¯åˆ‡æ›çš„å°è±¡"
+
+#: share/html/Dashboards/Subscription.html:117
+msgid "every"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:173
+msgid "executed plugin successfuly"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "false"
+msgstr "å‡"
+
+#: NOT FOUND IN SOURCE
+msgid "filename"
+msgstr "檔å"
+
+#: lib/RT/Crypt/GnuPG.pm:2204
+msgid "full"
+msgstr "完全"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "greater than"
+msgstr "大於"
+
+#: lib/RT/Group_Overlay.pm:159
+#. ($self->Name)
+msgid "group '%1'"
+msgstr "群組 '%1'"
+
+#: NOT FOUND IN SOURCE
+msgid "grouped by %1"
+msgstr "ä¾ %1 分組"
+
+#: lib/RT/Date.pm:345
+msgid "hours"
+msgstr "å°æ™‚"
+
+#: lib/RT/Date.pm:118 share/html/Search/Elements/ResultViews:62
+msgid "iCal"
+msgstr "iCal"
+
+#: lib/RT/Tickets_Overlay.pm:100 share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket:52 share/html/Admin/Tools/Shredder/Elements/Object/RT--User:52 share/html/Elements/ColumnMap:59 share/html/Search/Elements/BuildFormatString:99 share/html/Search/Elements/PickBasics:56
+msgid "id"
+msgstr "編號"
+
+#: NOT FOUND IN SOURCE
+msgid "info"
+msgstr "資訊"
+
+#: share/html/Elements/SelectBoolean:55 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:59 share/html/Search/Elements/PickCFs:84
+msgid "is"
+msgstr "是"
+
+#: share/html/Elements/SelectBoolean:59 share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:60 share/html/Search/Elements/PickCFs:85
+msgid "isn't"
+msgstr "ä¸æ˜¯"
+
+#: lib/RT/Crypt/GnuPG.pm:2160
+msgid "key disabled"
+msgstr "金鑰已å–消作用"
+
+#: lib/RT/Crypt/GnuPG.pm:2171
+msgid "key expired"
+msgstr "金鑰已éŽæœŸ"
+
+#: lib/RT/Crypt/GnuPG.pm:2166
+msgid "key revoked"
+msgstr "金鑰已撤回"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:52
+msgid "left to right"
+msgstr "由左至å³"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectEqualityOperator:61
+msgid "less than"
+msgstr "å°æ–¼"
+
+#: NOT FOUND IN SOURCE
+msgid "level Admin"
+msgstr "層主管"
+
+#: lib/RT/Crypt/GnuPG.pm:2199
+msgid "marginal"
+msgstr "勉強"
+
+#: share/html/Elements/SelectCustomFieldOperator:61 share/html/Elements/SelectMatch:57 share/html/Search/Elements/PickBasics:73
+msgid "matches"
+msgstr "符åˆ"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:64
+msgid "maximum depth"
+msgstr "最大深度"
+
+#: lib/RT/Date.pm:341
+msgid "min"
+msgstr "分"
+
+#: share/html/Tools/MyDay.html:62
+msgid "minutes"
+msgstr "分é˜"
+
+#: NOT FOUND IN SOURCE
+msgid "modifications\\n\\n"
+msgstr "更改\\n\\n"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "monthly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:69
+#. ($Subscription->SubValue('Dom'), $hour)
+msgid "monthly (day %1) at %2"
+msgstr "æ¯æœˆ(%1æ—¥)æ–¼%2"
+
+#: lib/RT/Date.pm:357
+msgid "months"
+msgstr "月"
+
+#: share/html/Admin/Elements/ShowKeyInfo:59 share/html/Admin/Elements/ShowKeyInfo:62 share/html/Admin/Elements/ShowKeyInfo:67 share/html/Admin/Elements/ShowKeyInfo:68 share/html/Dashboards/Subscription.html:136
+msgid "never"
+msgstr "æ°¸é ä¸æœƒ"
+
+#: lib/RT/Queue_Overlay.pm:82
+msgid "new"
+msgstr "新建立"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "no"
+msgstr "å¦"
+
+#: share/html/Admin/Elements/PickCustomFields:66 share/html/Admin/Elements/PickObjects:67
+msgid "no name"
+msgstr "沒有å稱"
+
+#: NOT FOUND IN SOURCE
+msgid "no value"
+msgstr "沒有值"
+
+#: lib/RT/Crypt/GnuPG.pm:2176 share/html/Admin/Elements/EditQueueWatchers:50 share/html/Dashboards/Subscription.html:76 share/html/Ticket/Elements/EditWatchers:51
+msgid "none"
+msgstr "ç„¡"
+
+#: share/html/Elements/SelectEqualityOperator:61
+msgid "not equal to"
+msgstr "ä¸ç­‰æ–¼"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:83
+msgid "nothing"
+msgstr "ç„¡"
+
+#: NOT FOUND IN SOURCE
+msgid "notice"
+msgstr "æ示"
+
+#: NOT FOUND IN SOURCE
+msgid "notlike"
+msgstr "ä¸ç¬¦åˆ"
+
+#: NOT FOUND IN SOURCE
+msgid "number"
+msgstr "號"
+
+#: share/html/Admin/Tools/Shredder/index.html:161
+msgid "objects were successfuly removed"
+msgstr ""
+
+#: share/html/Dashboards/Subscription.html:107 share/html/Elements/SelectDateRelation:58
+msgid "on"
+msgstr "等於"
+
+#: share/html/Dashboards/Subscription.html:127
+msgid "on day"
+msgstr ""
+
+#: lib/RT/Queue_Overlay.pm:83 share/html/SelfService/Elements/MyRequests:81
+msgid "open"
+msgstr "é–‹å•Ÿ"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:154
+msgid "open/close"
+msgstr "開啟/關閉"
+
+#: NOT FOUND IN SOURCE
+msgid "opened"
+msgstr "已開啟"
+
+#: share/html/Widgets/Form/Select:77
+msgid "other..."
+msgstr "其他..."
+
+#: lib/RT/Group_Overlay.pm:164
+#. ($self->Name, $user->Name)
+msgid "personal group '%1' for user '%2'"
+msgstr "使用者「%2ã€çš„「%1ã€ä»£ç†äººç¾¤çµ„"
+
+#: share/html/Search/Elements/SelectChartType:55
+msgid "pie"
+msgstr ""
+
+#: share/html/Admin/Tools/Shredder/index.html:181
+msgid "plugin returned empty list"
+msgstr ""
+
+#: lib/RT/Group_Overlay.pm:172
+#. ($queue->Name, $self->Type)
+msgid "queue %1 %2"
+msgstr "表單 %1 %2"
+
+#: lib/RT/Queue_Overlay.pm:86
+msgid "rejected"
+msgstr "å·²é§å›ž"
+
+#: lib/RT/Queue_Overlay.pm:85
+msgid "resolved"
+msgstr "已解決"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:55
+msgid "right to left"
+msgstr "ç”±å³åˆ°å·¦"
+
+#: NOT FOUND IN SOURCE
+msgid "rtname"
+msgstr "伺æœå™¨å稱"
+
+#: lib/RT/Date.pm:337
+msgid "sec"
+msgstr "秒"
+
+#: share/html/Admin/Tools/Shredder/index.html:183
+msgid "see object list below"
+msgstr ""
+
+#: lib/RT/System.pm:89
+msgid "show Approvals tab"
+msgstr ""
+
+#: lib/RT/System.pm:88
+msgid "show Configuration tab"
+msgstr "顯示設定é ç±¤"
+
+#: share/html/Admin/Tools/Configuration.html:88
+msgid "site config"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "spreadsheet"
+msgstr "試算表"
+
+#: lib/RT/Queue_Overlay.pm:84
+msgid "stalled"
+msgstr "延宕"
+
+#: NOT FOUND IN SOURCE
+msgid "style: %1"
+msgstr "樣å¼ï¼š%1"
+
+#: share/html/Prefs/MyRT.html:89
+msgid "summary rows"
+msgstr "加總列"
+
+#: lib/RT/Group_Overlay.pm:167
+#. ($self->Type)
+msgid "system %1"
+msgstr "系統 %1"
+
+#: lib/RT/Group_Overlay.pm:178
+#. ($self->Type)
+msgid "system group '%1'"
+msgstr "系統群組 '%1'"
+
+#: share/html/Elements/Error:70 share/html/SelfService/Error.html:65
+msgid "the calling component did not specify why"
+msgstr "呼å«å…ƒä»¶æœªæŒ‡æ˜ŽåŽŸå› "
+
+#: lib/RT/Installer.pm:169
+msgid "the default addresses that will be listed in From: and Reply-To: headers of comment mail."
+msgstr "é è¨­æœƒé¡¯ç¤ºæ–¼è©•è«–郵件中 From: åŠ Reply-To: 標投的ä½å€."
+
+#: lib/RT/Installer.pm:177
+msgid "the default addresses that will be listed in From: and Reply-To: headers of correspondence mail."
+msgstr "é è¨­æœƒé¡¯ç¤ºæ–¼å›žè¦†éƒµä»¶ä¸­ From: åŠ Reply-To: 標投的ä½å€."
+
+#: NOT FOUND IN SOURCE
+msgid "ticket #%1"
+msgstr "申請單 #%1"
+
+#: lib/RT/Group_Overlay.pm:175
+#. ($self->Instance, $self->Type)
+msgid "ticket #%1 %2"
+msgstr "申請單 #%1 %2"
+
+#: NOT FOUND IN SOURCE
+msgid "till"
+msgstr "至"
+
+#: NOT FOUND IN SOURCE
+msgid "to"
+msgstr "到"
+
+#: share/html/Ticket/Graphs/Elements/EditGraphProperties:51
+msgid "top to bottom"
+msgstr "由上往下"
+
+#: NOT FOUND IN SOURCE
+msgid "true"
+msgstr "真"
+
+#: lib/RT/Crypt/GnuPG.pm:2209
+msgid "ultimate"
+msgstr "徹底"
+
+#: lib/RT/Group_Overlay.pm:181
+#. ($self->Id)
+msgid "undescribed group %1"
+msgstr "沒有æ述的群組 %1"
+
+#: NOT FOUND IN SOURCE
+msgid "unresolved"
+msgstr "未處ç†"
+
+#: lib/RT/Group_Overlay.pm:156
+#. ($user->Object->Name)
+msgid "user %1"
+msgstr "使用者 %1"
+
+#: lib/RT/Config.pm:164
+msgid "verbose"
+msgstr ""
+
+#: NOT FOUND IN SOURCE
+msgid "warning"
+msgstr "警告"
+
+#: share/html/Dashboards/Subscription.html:107
+msgid "weekly"
+msgstr ""
+
+#: share/html/Dashboards/Elements/ShowSubscription:66
+#. (loc($day), $hour)
+msgid "weekly (on %1) at %2"
+msgstr "æ¯é€±%1æ–¼%2"
+
+#: lib/RT/Date.pm:353 share/html/Dashboards/Subscription.html:123
+msgid "weeks"
+msgstr "週"
+
+#: lib/RT/Installer.pm:198
+msgid "which port your web server will listen to, e.g. 8080"
+msgstr "網é ä¼ºæœå™¨æ‰€ä½¿ç”¨çš„埠號, 如 8080"
+
+#: share/html/Ticket/Elements/ShowTransactionAttachments:68
+msgid "with headers"
+msgstr "連åŒæ¨™é ­"
+
+#: NOT FOUND IN SOURCE
+msgid "with template %1"
+msgstr "範本:%1"
+
+#: lib/RT/Date.pm:361
+msgid "years"
+msgstr "å¹´"
+
+#: share/html/Elements/RT__Group/ColumnMap:65 share/html/Elements/RT__Group/ColumnMap:73
+msgid "yes"
+msgstr "是"
+
diff --git a/rt/lib/RT/Installer.pm b/rt/lib/RT/Installer.pm
new file mode 100644
index 0000000..2cc5ba9
--- /dev/null
+++ b/rt/lib/RT/Installer.pm
@@ -0,0 +1,340 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Installer;
+use strict;
+use warnings;
+
+require UNIVERSAL::require;
+my %Meta = (
+ DatabaseType => {
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Database type', # loc
+ Values => [
+ grep {
+ my $m = 'DBD::' . $_;
+ $m->require ? 1 : 0
+ } qw/mysql Pg SQLite Oracle/
+ ],
+ ValuesLabel => {
+ mysql => 'MySQL', #loc
+ Pg => 'PostgreSQL', #loc
+ SQLite => 'SQLite', #loc
+ Oracle => 'Oracle', #loc
+ },
+ },
+ },
+ DatabaseHost => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Database host', #loc
+ Default => 1,
+ DefaultLabel => "Keep 'localhost' if you're not sure. Leave blank to connect locally over a socket", #loc
+ Hints => "The domain name of your database server (like 'db.example.com').", #loc
+ },
+ },
+ DatabasePort => {
+ Widget => '/Widgets/Form/Integer',
+ WidgetArguments => {
+ Description => 'Database port', #loc
+ Default => 1,
+ DefaultLabel =>
+ 'Leave empty to use the default value for your database', #loc
+ },
+ },
+ DatabaseName => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Database name', #loc
+ },
+ },
+ DatabaseAdmin => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Default => 1,
+ Hints => "Leave this alone to use the default dba username for your database type", #loc
+ Description => 'DBA username', # loc
+ DefaultLabel => '',
+ },
+ },
+ DatabaseAdminPassword => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'DBA password', #loc
+ DefaultLabel => "The DBA's database password",#loc
+ Type => 'password',
+ Hints => "You must provide the dba's password so we can create the RT database and user.",
+ },
+ },
+ DatabaseUser => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Database username for RT', #loc
+ Hints => 'RT will connect to the database using this user. It will be created for you.', #loc
+ },
+ },
+ DatabasePassword => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Database password for RT', #loc
+ Type => 'password',
+ Hints => 'The password RT should use to connect to the database.',
+ },
+ },
+ DatabaseRequireSSL => {
+ Widget => '/Widgets/Form/Boolean',
+ WidgetArguments => {
+ Description => 'Use SSL?', # loc
+ },
+ },
+ rtname => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Site name', #loc
+ Hints => 'RT will use this string to uniquely identify your installation and looks for it in the subject of emails to decide what ticket a message applies to. We recommend that you set this to your internet domain. (ex: example.com)' #loc
+ },
+ },
+ MinimumPasswordLength => {
+ Widget => '/Widgets/Form/Integer',
+ WidgetArguments => {
+ Description => 'Minimum password length', #loc
+ },
+ },
+ Password => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Administrative password', #loc
+ Hints => 'RT will create a user called "root" and set this as their password', #loc
+ Type => 'password',
+ },
+ },
+ OwnerEmail => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'RT Administrator Email', #loc
+ Hints => "When RT can't handle an email message, where should it be forwarded?", #loc
+ },
+ },
+ CommentAddress => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Comment address', #loc
+ Hints =>
+'the default addresses that will be listed in From: and Reply-To: headers of comment mail.' #loc
+ },
+ },
+ CorrespondAddress => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Correspond address', #loc
+ Hints =>
+'the default addresses that will be listed in From: and Reply-To: headers of correspondence mail.' #loc
+ },
+ },
+ SendmailPath => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Hints => 'Where to find your sendmail binary.', #loc
+ Description => 'Path to sendmail', #loc
+ },
+ },
+ WebDomain => {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Domain name', #loc
+ Hints => "Don't include http://, just something like 'localhost', 'rt.example.com'", #loc
+ },
+ },
+ WebPort => {
+ Widget => '/Widgets/Form/Integer',
+ WidgetArguments => {
+ Description => 'Web port', #loc
+ Hints => 'which port your web server will listen to, e.g. 8080', #loc
+ },
+ },
+
+);
+
+my $HAS_DATETIME_TZ = eval { require DateTime::TimeZone };
+
+if ($HAS_DATETIME_TZ) {
+ $Meta{Timezone} = {
+ Widget => '/Widgets/Form/Select',
+ WidgetArguments => {
+ Description => 'Timezone', #loc
+ Callback => sub {
+ my $ret;
+ $ret->{Values} = ['', DateTime::TimeZone->all_names];
+
+ my $has_datetime = eval { require DateTime };
+ if ( $has_datetime ) {
+ my $dt = DateTime->now;
+ for my $tz ( DateTime::TimeZone->all_names ) {
+ $dt->set_time_zone( $tz );
+ $ret->{ValuesLabel}{$tz} =
+ $tz . ' ' . $dt->strftime('%z');
+ }
+ }
+ $ret->{ValuesLabel}{''} = 'System Default'; #loc
+
+ return $ret;
+ },
+ },
+ };
+}
+else {
+ $Meta{Timezone} = {
+ Widget => '/Widgets/Form/String',
+ WidgetArguments => {
+ Description => 'Timezone', #loc
+ },
+ };
+}
+
+sub Meta {
+ my $class = shift;
+ my $type = shift;
+ return $Meta{$type} if $type;
+ return \%Meta;
+}
+
+sub CurrentValue {
+ my $class = shift;
+ my $type = shift;
+ $type = $class if !ref $class && $class && $class ne 'RT::Installer';
+
+ return undef unless $type;
+ return $RT::Installer
+ && exists $RT::Installer->{InstallConfig}{$type}
+ ? $RT::Installer->{InstallConfig}{$type}
+ : scalar RT->Config->Get($type);
+}
+
+sub CurrentValues {
+ my $class = shift;
+ my @types = @_;
+ push @types, $class if !ref $class && $class && $class ne 'RT::Installer';
+
+ return { map { $_ => CurrentValue($_) } @types };
+}
+
+sub ConfigFile {
+ require File::Spec;
+ return File::Spec->catfile( $RT::EtcPath, 'RT_SiteConfig.pm' );
+}
+
+sub SaveConfig {
+ my $class = shift;
+
+ my $file = $class->ConfigFile;
+
+ my $content;
+
+ {
+ local $/;
+ open my $fh, '<', $file or die $!;
+ $content = <$fh>;
+ $content =~ s/^\s*1;\s*$//m;
+ }
+
+ # make organization the same as rtname
+ $RT::Installer->{InstallConfig}{Organization} =
+ $RT::Installer->{InstallConfig}{rtname};
+
+ if ( open my $fh, '>', $file ) {
+ for ( keys %{ $RT::Installer->{InstallConfig} } ) {
+
+ # we don't want to store root's password in config.
+ next if $_ eq 'Password';
+
+ $RT::Installer->{InstallConfig}{$_} = ''
+ unless defined $RT::Installer->{InstallConfig}{$_};
+
+ # remove obsolete settings we'll add later
+ $content =~ s/^\s* Set \s* \( \s* \$$_ .*$//xm;
+
+ $content .= "Set( \$$_, '$RT::Installer->{InstallConfig}{$_}' );\n";
+ }
+ $content .= "1;\n";
+ print $fh $content;
+ close $fh;
+
+ return ( 1, "Successfully saved configuration to $file." );
+ }
+
+ return ( 0, "Cannot save configuration to $file: $!" );
+}
+
+=head1 NAME
+
+ RT::Installer - RT's Installer
+
+=head1 SYNOPSYS
+
+ use RT::Installer;
+ my $meta = RT::Installer->Meta;
+
+=head1 DESCRIPTION
+
+C<RT::Installer> class provides access to RT Installer Meta
+
+=cut
+
+eval "require RT::Installer_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Installer_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Installer_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Installer_Local.pm}) {
+ die $@;
+};
+
+1;
+
diff --git a/rt/lib/RT/Interface/CLI.pm b/rt/lib/RT/Interface/CLI.pm
index 5331504..a910fb4 100644
--- a/rt/lib/RT/Interface/CLI.pm
+++ b/rt/lib/RT/Interface/CLI.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
use strict;
use RT;
@@ -53,14 +54,12 @@ package RT::Interface::CLI;
BEGIN {
- use Exporter ();
- use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+ use base 'Exporter';
+ use vars qw ($VERSION @EXPORT @EXPORT_OK %EXPORT_TAGS);
# set the version for version checking
- $VERSION = do { my @r = (q$Revision: 1.1.1.7 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
-
- @ISA = qw(Exporter);
-
+ $VERSION = do { my @r = (q$Revision: 1.1.1.8 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
+
# your exported package globals go here,
# as well as any optionally exported functions
@EXPORT_OK = qw(&CleanEnv
@@ -100,11 +99,6 @@ BEGIN {
=head1 METHODS
-=begin testing
-
-ok(require RT::Interface::CLI);
-
-=end testing
=cut
@@ -226,7 +220,7 @@ sub GetMessageContent {
if ($edit) {
unless ($ENV{'EDITOR'}) {
- $RT::Logger->crit('No $EDITOR variable defined'. "\n");
+ $RT::Logger->crit('No $EDITOR variable defined');
return undef;
}
system ($ENV{'EDITOR'}, $filename);
@@ -249,7 +243,7 @@ sub debug {
my $val = shift;
my ($debug);
if ($val) {
- $RT::Logger->debug($val."\n");
+ $RT::Logger->debug($val);
if ($debug) {
print STDERR "$val\n";
}
diff --git a/rt/lib/RT/Interface/Email.pm b/rt/lib/RT/Interface/Email.pm
index 14ae2a0..b669b5b 100755
--- a/rt/lib/RT/Interface/Email.pm
+++ b/rt/lib/RT/Interface/Email.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,24 +45,26 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Email;
use strict;
-use Mail::Address;
+use warnings;
+
+use Email::Address;
use MIME::Entity;
use RT::EmailParser;
use File::Temp;
use UNIVERSAL::require;
+use Mail::Mailer ();
BEGIN {
- use Exporter ();
- use vars qw ( @ISA @EXPORT_OK);
+ use base 'Exporter';
+ use vars qw ( @EXPORT_OK);
# set the version for version checking
our $VERSION = 2.0;
- @ISA = qw(Exporter);
-
# your exported package globals go here,
# as well as any optionally exported functions
@EXPORT_OK = qw(
@@ -95,37 +97,41 @@ BEGIN {
=head1 DESCRIPTION
-=begin testing
-ok(require RT::Interface::Email);
-=end testing
+=head1 METHODS
+=head2 CheckForLoops HEAD
-=head1 METHODS
+Takes a HEAD object of L<MIME::Head> class and returns true if the
+message's been sent by this RT instance. Uses "X-RT-Loop-Prevention"
+field of the head for test.
=cut
-# {{{ sub CheckForLoops
-
sub CheckForLoops {
my $head = shift;
- #If this instance of RT sent it our, we don't want to take it in
+ # If this instance of RT sent it our, we don't want to take it in
my $RTLoop = $head->get("X-RT-Loop-Prevention") || "";
- chomp($RTLoop); #remove that newline
- if ( $RTLoop eq "$RT::rtname" ) {
- return (1);
+ chomp ($RTLoop); # remove that newline
+ if ( $RTLoop eq RT->Config->Get('rtname') ) {
+ return 1;
}
# TODO: We might not trap the case where RT instance A sends a mail
# to RT instance B which sends a mail to ...
- return (undef);
+ return undef;
}
-# }}}
+=head2 CheckForSuspiciousSender HEAD
+
+Takes a HEAD object of L<MIME::Head> class and returns true if sender
+is suspicious. Suspicious means mailer daemon.
+
+See also L</ParseSenderAddressFromHead>.
-# {{{ sub CheckForSuspiciousSender
+=cut
sub CheckForSuspiciousSender {
my $head = shift;
@@ -143,19 +149,24 @@ sub CheckForSuspiciousSender {
my ( $From, $junk ) = ParseSenderAddressFromHead($head);
if ( ( $From =~ /^mailer-daemon\@/i )
- or ( $From =~ /^postmaster\@/i ) )
+ or ( $From =~ /^postmaster\@/i )
+ or ( $From eq "" ))
{
return (1);
}
- return (undef);
-
+ return undef;
}
-# }}}
+=head2 CheckForAutoGenerated HEAD
+
+Takes a HEAD object of L<MIME::Head> class and returns true if message
+is autogenerated. Checks 'Precedence' and 'X-FC-Machinegenerated'
+fields of the head in tests.
+
+=cut
-# {{{ sub CheckForAutoGenerated
sub CheckForAutoGenerated {
my $head = shift;
@@ -164,6 +175,13 @@ sub CheckForAutoGenerated {
return (1);
}
+ # Per RFC3834, any Auto-Submitted header which is not "no" means
+ # it is auto-generated.
+ my $AutoSubmitted = $head->get("Auto-Submitted") || "";
+ if ( length $AutoSubmitted and $AutoSubmitted ne "no" ) {
+ return (1);
+ }
+
# First Class mailer uses this as a clue.
my $FCJunk = $head->get("X-FC-Machinegenerated") || "";
if ( $FCJunk =~ /^true/i ) {
@@ -173,9 +191,7 @@ sub CheckForAutoGenerated {
return (0);
}
-# }}}
-# {{{ sub CheckForBounce
sub CheckForBounce {
my $head = shift;
@@ -183,55 +199,40 @@ sub CheckForBounce {
return ( $ReturnPath =~ /<>/ );
}
-# }}}
-# {{{ IsRTAddress
+=head2 MailError PARAM HASH
-=head2 IsRTAddress ADDRESS
+Sends an error message. Takes a param hash:
-Takes a single parameter, an email address.
-Returns true if that address matches the $RTAddressRegexp.
-Returns false, otherwise.
+=over 4
-=cut
+=item From - sender's address, by default is 'CorrespondAddress';
-sub IsRTAddress {
- my $address = shift || '';
+=item To - recipient, by default is 'OwnerEmail';
- # Example: the following rule would tell RT not to Cc
- # "tickets@noc.example.com"
- if ( defined($RT::RTAddressRegexp)
- && $address =~ /$RT::RTAddressRegexp/i )
- {
- return (1);
- } else {
- return (undef);
- }
-}
+=item Bcc - optional Bcc recipients;
-# }}}
+=item Subject - subject of the message, default is 'There has been an error';
-# {{{ CullRTAddresses
+=item Explanation - main content of the error, default value is 'Unexplained error';
-=head2 CullRTAddresses ARRAY
+=item MIMEObj - optional MIME entity that's attached to the error mail, as well we
+add 'In-Reply-To' field to the error that points to this message.
-Takes a single argument, an array of email addresses.
-Returns the same array with any IsRTAddress()es weeded out.
+=item Attach - optional text that attached to the error as 'message/rfc822' part.
-=cut
+=item LogLevel - log level under which we should write explanation message into the
+log, by default we log it as critical.
-sub CullRTAddresses {
- return grep !IsRTAddress($_), @_;
-}
+=back
-# }}}
+=cut
-# {{{ sub MailError
sub MailError {
my %args = (
- To => $RT::OwnerEmail,
+ To => RT->Config->Get('OwnerEmail'),
Bcc => undef,
- From => $RT::CorrespondAddress,
+ From => RT->Config->Get('CorrespondAddress'),
Subject => 'There has been an error',
Explanation => 'Unexplained error',
MIMEObj => undef,
@@ -243,7 +244,7 @@ sub MailError {
$RT::Logger->log(
level => $args{'LogLevel'},
message => $args{'Explanation'}
- );
+ ) if $args{'LogLevel'};
# the colons are necessary to make ->build include non-standard headers
my $entity = MIME::Entity->build(
Type => "multipart/mixed",
@@ -252,16 +253,15 @@ sub MailError {
To => $args{'To'},
Subject => $args{'Subject'},
'Precedence:' => 'bulk',
- 'X-RT-Loop-Prevention:' => $RT::rtname,
- 'In-Reply-To:' => $args{'MIMEObj'} ? $args{'MIMEObj'}->head->get('Message-Id') : undef
+ 'X-RT-Loop-Prevention:' => RT->Config->Get('rtname'),
);
+ SetInReplyTo( Message => $entity, InReplyTo => $args{'MIMEObj'} );
$entity->attach( Data => $args{'Explanation'} . "\n" );
- my $mimeobj = $args{'MIMEObj'};
- if ($mimeobj) {
- $mimeobj->sync_headers();
- $entity->add_part($mimeobj);
+ if ( $args{'MIMEObj'} ) {
+ $args{'MIMEObj'}->sync_headers;
+ $entity->add_part( $args{'MIMEObj'} );
}
if ( $args{'Attach'} ) {
@@ -269,25 +269,628 @@ sub MailError {
}
- if ( $RT::MailCommand eq 'sendmailpipe' ) {
- open( MAIL,
- "|$RT::SendmailPath $RT::SendmailBounceArguments $RT::SendmailArguments"
- )
- || return (0);
- print MAIL $entity->as_string;
- close(MAIL);
+ SendEmail( Entity => $entity, Bounce => 1 );
+}
+
+
+=head2 SendEmail Entity => undef, [ Bounce => 0, Ticket => undef, Transaction => undef ]
+
+Sends an email (passed as a L<MIME::Entity> object C<ENTITY>) using
+RT's outgoing mail configuration. If C<BOUNCE> is passed, and is a
+true value, the message will be marked as an autogenerated error, if
+possible. Sets Date field of the head to now if it's not set.
+
+Ticket and Transaction arguments are optional. If Transaction is
+specified and Ticket is not then ticket of the transaction is
+used, but only if the transaction belongs to a ticket.
+
+Returns 1 on success, 0 on error or -1 if message has no recipients
+and hasn't been sent.
+
+=head3 Signing and Encrypting
+
+This function as well signs and/or encrypts the message according to
+headers of a transaction's attachment or properties of a ticket's queue.
+To get full access to the configuration Ticket and/or Transaction
+arguments must be provided, but you can force behaviour using Sign
+and/or Encrypt arguments.
+
+The following precedence of arguments are used to figure out if
+the message should be encrypted and/or signed:
+
+* if Sign or Encrypt argument is defined then its value is used
+
+* else if Transaction's first attachment has X-RT-Sign or X-RT-Encrypt
+header field then it's value is used
+
+* else properties of a queue of the Ticket are used.
+
+=cut
+
+sub SendEmail {
+ my (%args) = (
+ Entity => undef,
+ Bounce => 0,
+ Ticket => undef,
+ Transaction => undef,
+ @_,
+ );
+
+ my $TicketObj = $args{'Ticket'};
+ my $TransactionObj = $args{'Transaction'};
+
+ foreach my $arg( qw(Entity Bounce) ) {
+ next unless defined $args{ lc $arg };
+
+ $RT::Logger->warning("'". lc($arg) ."' argument is deprecated, use '$arg' instead");
+ $args{ $arg } = delete $args{ lc $arg };
+ }
+
+ unless ( $args{'Entity'} ) {
+ $RT::Logger->crit( "Could not send mail without 'Entity' object" );
+ return 0;
+ }
+
+ my $msgid = $args{'Entity'}->head->get('Message-ID') || '';
+ chomp $msgid;
+
+ # If we don't have any recipients to send to, don't send a message;
+ unless ( $args{'Entity'}->head->get('To')
+ || $args{'Entity'}->head->get('Cc')
+ || $args{'Entity'}->head->get('Bcc') )
+ {
+ $RT::Logger->info( $msgid . " No recipients found. Not sending." );
+ return -1;
+ }
+
+ if ( $TransactionObj && !$TicketObj
+ && $TransactionObj->ObjectType eq 'RT::Ticket' )
+ {
+ $TicketObj = $TransactionObj->Object;
+ }
+
+ if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
+ my %crypt;
+
+ my $attachment;
+ $attachment = $TransactionObj->Attachments->First
+ if $TransactionObj;
+
+ foreach my $argument ( qw(Sign Encrypt) ) {
+ next if defined $args{ $argument };
+
+ if ( $attachment && defined $attachment->GetHeader("X-RT-$argument") ) {
+ $crypt{$argument} = $attachment->GetHeader("X-RT-$argument");
+ } elsif ( $TicketObj ) {
+ $crypt{$argument} = $TicketObj->QueueObj->$argument();
+ }
+ }
+
+ my $res = SignEncrypt( %args, %crypt );
+ return $res unless $res > 0;
+ }
+
+ unless ( $args{'Entity'}->head->get('Date') ) {
+ require RT::Date;
+ my $date = RT::Date->new( $RT::SystemUser );
+ $date->SetToNow;
+ $args{'Entity'}->head->set( 'Date', $date->RFC2822( Timezone => 'server' ) );
+ }
+
+ my $mail_command = RT->Config->Get('MailCommand');
+
+ if ($mail_command eq 'testfile') {
+ $Mail::Mailer::testfile::config{outfile} = File::Temp->new;
+ }
+
+ # if it is a sub routine, we just return it;
+ return $mail_command->($args{'Entity'}) if UNIVERSAL::isa( $mail_command, 'CODE' );
+
+ if ( $mail_command eq 'sendmailpipe' ) {
+ my $path = RT->Config->Get('SendmailPath');
+ my $args = RT->Config->Get('SendmailArguments');
+
+ # SetOutgoingMailFrom
+ if ( RT->Config->Get('SetOutgoingMailFrom') ) {
+ my $OutgoingMailAddress;
+
+ if ($TicketObj) {
+ my $QueueName = $TicketObj->QueueObj->Name;
+ my $QueueAddressOverride = RT->Config->Get('OverrideOutgoingMailFrom')->{$QueueName};
+
+ if ($QueueAddressOverride) {
+ $OutgoingMailAddress = $QueueAddressOverride;
+ } else {
+ $OutgoingMailAddress = $TicketObj->QueueObj->CorrespondAddress;
+ }
+ }
+
+ $OutgoingMailAddress ||= RT->Config->Get('OverrideOutgoingMailFrom')->{'Default'};
+
+ $args .= " -f $OutgoingMailAddress"
+ if $OutgoingMailAddress;
+ }
+
+ # Set Bounce Arguments
+ $args .= ' '. RT->Config->Get('SendmailBounceArguments') if $args{'Bounce'};
+
+ # VERP
+ if ( $TransactionObj and
+ my $prefix = RT->Config->Get('VERPPrefix') and
+ my $domain = RT->Config->Get('VERPDomain') )
+ {
+ my $from = $TransactionObj->CreatorObj->EmailAddress;
+ $from =~ s/@/=/g;
+ $from =~ s/\s//g;
+ $args .= " -f $prefix$from\@$domain";
+ }
+
+ eval {
+ # don't ignore CHLD signal to get proper exit code
+ local $SIG{'CHLD'} = 'DEFAULT';
+
+ open my $mail, "|$path $args" or die "couldn't execute program: $!";
+
+ # if something wrong with $mail->print we will get PIPE signal, handle it
+ local $SIG{'PIPE'} = sub { die "program unexpectedly closed pipe" };
+ $args{'Entity'}->print($mail);
+
+ unless ( close $mail ) {
+ die "close pipe failed: $!" if $!; # system error
+ # sendmail exit statuses mostly errors with data not software
+ # TODO: status parsing: core dump, exit on signal or EX_*
+ my $msg = "$msgid: `$path $args` exitted with code ". ($?>>8);
+ $msg = ", interrupted by signal ". ($?&127) if $?&127;
+ $RT::Logger->error( $msg );
+ }
+ };
+ if ( $@ ) {
+ $RT::Logger->crit( "$msgid: Could not send mail with command `$path $args`: " . $@ );
+ return 0;
+ }
+ }
+ elsif ( $mail_command eq 'smtp' ) {
+ require Net::SMTP;
+ my $smtp = do { local $@; eval { Net::SMTP->new(
+ Host => RT->Config->Get('SMTPServer'),
+ Debug => RT->Config->Get('SMTPDebug'),
+ ) } };
+ unless ( $smtp ) {
+ $RT::Logger->crit( "Could not connect to SMTP server.");
+ return 0;
+ }
+
+ # duplicate head as we want drop Bcc field
+ my $head = $args{'Entity'}->head->dup;
+ my @recipients = map $_->address, map
+ Email::Address->parse($head->get($_)), qw(To Cc Bcc);
+ $head->delete('Bcc');
+
+ my $sender = RT->Config->Get('SMTPFrom')
+ || $args{'Entity'}->head->get('From');
+ chomp $sender;
+
+ my $status = $smtp->mail( $sender )
+ && $smtp->recipient( @recipients );
+
+ if ( $status ) {
+ $smtp->data;
+ my $fh = $smtp->tied_fh;
+ $head->print( $fh );
+ print $fh "\n";
+ $args{'Entity'}->print_body( $fh );
+ $smtp->dataend;
+ }
+ $smtp->quit;
+
+ unless ( $status ) {
+ $RT::Logger->crit( "$msgid: Could not send mail via SMTP." );
+ return 0;
+ }
+ }
+ else {
+ local ($ENV{'MAILADDRESS'}, $ENV{'PERL_MAILERS'});
+
+ my @mailer_args = ($mail_command);
+ if ( $mail_command eq 'sendmail' ) {
+ $ENV{'PERL_MAILERS'} = RT->Config->Get('SendmailPath');
+ push @mailer_args, split(/\s+/, RT->Config->Get('SendmailArguments'));
+ }
+ else {
+ push @mailer_args, RT->Config->Get('MailParams');
+ }
+
+ unless ( $args{'Entity'}->send( @mailer_args ) ) {
+ $RT::Logger->crit( "$msgid: Could not send mail." );
+ return 0;
+ }
+ }
+ return 1;
+}
+
+=head2 PrepareEmailUsingTemplate Template => '', Arguments => {}
+
+Loads a template. Parses it using arguments if it's not empty.
+Returns a tuple (L<RT::Template> object, error message).
+
+Note that even if a template object is returned MIMEObj method
+may return undef for empty templates.
+
+=cut
+
+sub PrepareEmailUsingTemplate {
+ my %args = (
+ Template => '',
+ Arguments => {},
+ @_
+ );
+
+ my $template = RT::Template->new( $RT::SystemUser );
+ $template->LoadGlobalTemplate( $args{'Template'} );
+ unless ( $template->id ) {
+ return (undef, "Couldn't load template '". $args{'Template'} ."'");
+ }
+ return $template if $template->IsEmpty;
+
+ my ($status, $msg) = $template->Parse( %{ $args{'Arguments'} } );
+ return (undef, $msg) unless $status;
+
+ return $template;
+}
+
+=head2 SendEmailUsingTemplate Template => '', Arguments => {}, From => CorrespondAddress, To => '', Cc => '', Bcc => ''
+
+Sends email using a template, takes name of template, arguments for it and recipients.
+
+=cut
+
+sub SendEmailUsingTemplate {
+ my %args = (
+ Template => '',
+ Arguments => {},
+ To => undef,
+ Cc => undef,
+ Bcc => undef,
+ From => RT->Config->Get('CorrespondAddress'),
+ InReplyTo => undef,
+ @_
+ );
+
+ my ($template, $msg) = PrepareEmailUsingTemplate( %args );
+ return (0, $msg) unless $template;
+
+ my $mail = $template->MIMEObj;
+ unless ( $mail ) {
+ $RT::Logger->info("Message is not sent as template #". $template->id ." is empty");
+ return -1;
+ }
+
+ $mail->head->set( $_ => $args{ $_ } )
+ foreach grep defined $args{$_}, qw(To Cc Bcc From);
+
+ SetInReplyTo( Message => $mail, InReplyTo => $args{'InReplyTo'} );
+
+ return SendEmail( Entity => $mail );
+}
+
+=head2 ForwardTransaction TRANSACTION, To => '', Cc => '', Bcc => ''
+
+Forwards transaction with all attachments as 'message/rfc822'.
+
+=cut
+
+sub ForwardTransaction {
+ my $txn = shift;
+ my %args = ( To => '', Cc => '', Bcc => '', @_ );
+
+ my $entity = $txn->ContentAsMIME;
+
+ return SendForward( %args, Entity => $entity, Transaction => $txn );
+}
+
+=head2 ForwardTicket TICKET, To => '', Cc => '', Bcc => ''
+
+Forwards a ticket's Create and Correspond Transactions and their Attachments as 'message/rfc822'.
+
+=cut
+
+sub ForwardTicket {
+ my $ticket = shift;
+ my %args = ( To => '', Cc => '', Bcc => '', @_ );
+
+ my $txns = $ticket->Transactions;
+ $txns->Limit(
+ FIELD => 'Type',
+ VALUE => $_,
+ ) for qw(Create Correspond);
+
+ my $entity = MIME::Entity->build(
+ Type => 'multipart/mixed',
+ );
+ $entity->add_part( $_ ) foreach
+ map $_->ContentAsMIME,
+ @{ $txns->ItemsArrayRef };
+
+ return SendForward( %args, Entity => $entity, Ticket => $ticket, Template => 'Forward Ticket' );
+}
+
+=head2 SendForward Entity => undef, Ticket => undef, Transaction => undef, Template => undef, To => '', Cc => '', Bcc => ''
+
+Forwards an Entity representing Ticket or Transaction as 'message/rfc822'. Entity is wrapped into Template.
+
+=cut
+
+sub SendForward {
+ my (%args) = (
+ Entity => undef,
+ Ticket => undef,
+ Transaction => undef,
+ Template => 'Forward',
+ To => '', Cc => '', Bcc => '',
+ @_
+ );
+
+ my $txn = $args{'Transaction'};
+ my $ticket = $args{'Ticket'};
+ $ticket ||= $txn->Object if $txn;
+
+ my $entity = $args{'Entity'};
+ unless ( $entity ) {
+ require Carp;
+ $RT::Logger->error(Carp::longmess("No entity provided"));
+ return (0, $ticket->loc("Couldn't send email"));
+ }
+
+ my ($template, $msg) = PrepareEmailUsingTemplate(
+ Template => $args{'Template'},
+ Arguments => {
+ Ticket => $ticket,
+ Transaction => $txn,
+ },
+ );
+
+ my $mail;
+ if ( $template ) {
+ $mail = $template->MIMEObj;
} else {
- $entity->send( $RT::MailCommand, $RT::MailParams );
+ $RT::Logger->warning($msg);
+ }
+ unless ( $mail ) {
+ $RT::Logger->warning("Couldn't generate email using template '$args{Template}'");
+
+ my $description;
+ unless ( $args{'Transaction'} ) {
+ $description = 'This is forward of ticket #'. $ticket->id;
+ } else {
+ $description = 'This is forward of transaction #'
+ . $txn->id ." of a ticket #". $txn->ObjectId;
+ }
+ $mail = MIME::Entity->build(
+ Type => 'text/plain',
+ Data => $description,
+ );
+ }
+
+ $mail->head->set( $_ => EncodeToMIME( String => $args{$_} ) )
+ foreach grep defined $args{$_}, qw(To Cc Bcc);
+
+ $mail->attach(
+ Type => 'message/rfc822',
+ Disposition => 'attachment',
+ Description => 'forwarded message',
+ Data => $entity->as_string,
+ );
+
+ my $from;
+ my $subject = '';
+ $subject = $txn->Subject if $txn;
+ $subject ||= $ticket->Subject if $ticket;
+ if ( RT->Config->Get('ForwardFromUser') ) {
+ $from = ($txn || $ticket)->CurrentUser->UserObj->EmailAddress;
+ } else {
+ # XXX: what if want to forward txn of other object than ticket?
+ $subject = AddSubjectTag( $subject, $ticket );
+ $from = $ticket->QueueObj->CorrespondAddress
+ || RT->Config->Get('CorrespondAddress');
+ }
+ $mail->head->set( Subject => EncodeToMIME( String => "Fwd: $subject" ) );
+ $mail->head->set( From => EncodeToMIME( String => $from ) );
+
+ my $status = RT->Config->Get('ForwardFromUser')
+ # never sign if we forward from User
+ ? SendEmail( %args, Entity => $mail, Sign => 0 )
+ : SendEmail( %args, Entity => $mail );
+ return (0, $ticket->loc("Couldn't send email")) unless $status;
+ return (1, $ticket->loc("Send email successfully"));
+}
+
+=head2 SignEncrypt Entity => undef, Sign => 0, Encrypt => 0
+
+Signs and encrypts message using L<RT::Crypt::GnuPG>, but as well
+handle errors with users' keys.
+
+If a recipient has no key or has other problems with it, then the
+unction sends a error to him using 'Error: public key' template.
+Also, notifies RT's owner using template 'Error to RT owner: public key'
+to inform that there are problems with users' keys. Then we filter
+all bad recipients and retry.
+
+Returns 1 on success, 0 on error and -1 if all recipients are bad and
+had been filtered out.
+
+=cut
+
+sub SignEncrypt {
+ my %args = (
+ Entity => undef,
+ Sign => 0,
+ Encrypt => 0,
+ @_
+ );
+ return 1 unless $args{'Sign'} || $args{'Encrypt'};
+
+ my $msgid = $args{'Entity'}->head->get('Message-ID') || '';
+ chomp $msgid;
+
+ $RT::Logger->debug("$msgid Signing message") if $args{'Sign'};
+ $RT::Logger->debug("$msgid Encrypting message") if $args{'Encrypt'};
+
+ require RT::Crypt::GnuPG;
+ my %res = RT::Crypt::GnuPG::SignEncrypt( %args );
+ return 1 unless $res{'exit_code'};
+
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
+
+ my @bad_recipients;
+ foreach my $line ( @status ) {
+ # if the passphrase fails, either you have a bad passphrase
+ # or gpg-agent has died. That should get caught in Create and
+ # Update, but at least throw an error here
+ if (($line->{'Operation'}||'') eq 'PassphraseCheck'
+ && $line->{'Status'} =~ /^(?:BAD|MISSING)$/ ) {
+ $RT::Logger->error( "$line->{'Status'} PASSPHRASE: $line->{'Message'}" );
+ return 0;
+ }
+ next unless ($line->{'Operation'}||'') eq 'RecipientsCheck';
+ next if $line->{'Status'} eq 'DONE';
+ $RT::Logger->error( $line->{'Message'} );
+ push @bad_recipients, $line;
+ }
+ return 0 unless @bad_recipients;
+
+ $_->{'AddressObj'} = (Email::Address->parse( $_->{'Recipient'} ))[0]
+ foreach @bad_recipients;
+
+ foreach my $recipient ( @bad_recipients ) {
+ my $status = SendEmailUsingTemplate(
+ To => $recipient->{'AddressObj'}->address,
+ Template => 'Error: public key',
+ Arguments => {
+ %$recipient,
+ TicketObj => $args{'Ticket'},
+ TransactionObj => $args{'Transaction'},
+ },
+ );
+ unless ( $status ) {
+ $RT::Logger->error("Couldn't send 'Error: public key'");
+ }
+ }
+
+ my $status = SendEmailUsingTemplate(
+ To => RT->Config->Get('OwnerEmail'),
+ Template => 'Error to RT owner: public key',
+ Arguments => {
+ BadRecipients => \@bad_recipients,
+ TicketObj => $args{'Ticket'},
+ TransactionObj => $args{'Transaction'},
+ },
+ );
+ unless ( $status ) {
+ $RT::Logger->error("Couldn't send 'Error to RT owner: public key'");
+ }
+
+ DeleteRecipientsFromHead(
+ $args{'Entity'}->head,
+ map $_->{'AddressObj'}->address, @bad_recipients
+ );
+
+ unless ( $args{'Entity'}->head->get('To')
+ || $args{'Entity'}->head->get('Cc')
+ || $args{'Entity'}->head->get('Bcc') )
+ {
+ $RT::Logger->debug("$msgid No recipients that have public key, not sending");
+ return -1;
}
+
+ # redo without broken recipients
+ %res = RT::Crypt::GnuPG::SignEncrypt( %args );
+ return 0 if $res{'exit_code'};
+
+ return 1;
}
-# }}}
+use MIME::Words ();
+
+=head2 EncodeToMIME
+
+Takes a hash with a String and a Charset. Returns the string encoded
+according to RFC2047, using B (base64 based) encoding.
+
+String must be a perl string, octets are returned.
+
+If Charset is not provided then $EmailOutputEncoding config option
+is used, or "latin-1" if that is not set.
+
+=cut
+
+sub EncodeToMIME {
+ my %args = (
+ String => undef,
+ Charset => undef,
+ @_
+ );
+ my $value = $args{'String'};
+ return $value unless $value; # 0 is perfect ascii
+ my $charset = $args{'Charset'} || RT->Config->Get('EmailOutputEncoding');
+ my $encoding = 'B';
+
+ # using RFC2047 notation, sec 2.
+ # encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
+
+ # An 'encoded-word' may not be more than 75 characters long
+ #
+ # MIME encoding increases 4/3*(number of bytes), and always in multiples
+ # of 4. Thus we have to find the best available value of bytes available
+ # for each chunk.
+ #
+ # First we get the integer max which max*4/3 would fit on space.
+ # Then we find the greater multiple of 3 lower or equal than $max.
+ my $max = int(
+ ( ( 75 - length( '=?' . $charset . '?' . $encoding . '?' . '?=' ) )
+ * 3
+ ) / 4
+ );
+ $max = int( $max / 3 ) * 3;
+
+ chomp $value;
+
+ if ( $max <= 0 ) {
+
+ # gives an error...
+ $RT::Logger->crit("Can't encode! Charset or encoding too big.");
+ return ($value);
+ }
+
+ return ($value) unless $value =~ /[^\x20-\x7e]/;
+
+ $value =~ s/\s+$//;
-# {{{ Create User
+ # we need perl string to split thing char by char
+ Encode::_utf8_on($value) unless Encode::is_utf8($value);
+
+ my ( $tmp, @chunks ) = ( '', () );
+ while ( length $value ) {
+ my $char = substr( $value, 0, 1, '' );
+ my $octets = Encode::encode( $charset, $char );
+ if ( length($tmp) + length($octets) > $max ) {
+ push @chunks, $tmp;
+ $tmp = '';
+ }
+ $tmp .= $octets;
+ }
+ push @chunks, $tmp if length $tmp;
+
+ # encode an join chuncks
+ $value = join "\n ",
+ map MIME::Words::encode_mimeword( $_, $encoding, $charset ),
+ @chunks;
+ return ($value);
+}
sub CreateUser {
my ( $Username, $Address, $Name, $ErrorsTo, $entity ) = @_;
- my $NewUser = RT::User->new($RT::SystemUser);
+
+ my $NewUser = RT::User->new( $RT::SystemUser );
my ( $Val, $Message ) = $NewUser->Create(
Name => ( $Username || $Address ),
@@ -295,7 +898,7 @@ sub CreateUser {
RealName => $Name,
Password => undef,
Privileged => 0,
- Comments => 'Autocreated on ticket submission'
+ Comments => 'Autocreated on ticket submission',
);
unless ($Val) {
@@ -316,14 +919,14 @@ sub CreateUser {
Explanation =>
"User creation failed in mailgateway: $Message",
MIMEObj => $entity,
- LogLevel => 'crit'
+ LogLevel => 'crit',
);
}
}
#Load the new user object
- my $CurrentUser = RT::CurrentUser->new();
- $CurrentUser->LoadByEmail($Address);
+ my $CurrentUser = new RT::CurrentUser;
+ $CurrentUser->LoadByEmail( $Address );
unless ( $CurrentUser->id ) {
$RT::Logger->warning(
@@ -341,15 +944,13 @@ sub CreateUser {
return $CurrentUser;
}
-# }}}
-# {{{ ParseCcAddressesFromHead
-=head2 ParseCcAddressesFromHead HASHREF
+=head2 ParseCcAddressesFromHead HASH
-Takes a hashref object containing QueueObj, Head and CurrentUser objects.
-Returns a list of all email addresses in the To and Cc
-headers b<except> the current Queue\'s email addresses, the CurrentUser\'s
+Takes a hash containing QueueObj, Head and CurrentUser objects.
+Returns a list of all email addresses in the To and Cc
+headers b<except> the current Queue\'s email addresses, the CurrentUser\'s
email address and anything that the configuration sub RT::IsRTAddress matches.
=cut
@@ -362,32 +963,29 @@ sub ParseCcAddressesFromHead {
@_
);
- my (@Addresses);
+ my @recipients =
+ map lc $_->address,
+ map Email::Address->parse( $args{'Head'}->get( $_ ) ),
+ qw(To Cc);
- my @ToObjs = Mail::Address->parse( $args{'Head'}->get('To') );
- my @CcObjs = Mail::Address->parse( $args{'Head'}->get('Cc') );
+ my @res;
+ foreach my $address ( @recipients ) {
+ $address = $args{'CurrentUser'}->UserObj->CanonicalizeEmailAddress( $address );
+ next if lc $args{'CurrentUser'}->EmailAddress eq $address;
+ next if lc $args{'QueueObj'}->CorrespondAddress eq $address;
+ next if lc $args{'QueueObj'}->CommentAddress eq $address;
+ next if RT::EmailParser->IsRTAddress( $address );
- foreach my $AddrObj ( @ToObjs, @CcObjs ) {
- my $Address = $AddrObj->address;
- $Address = $args{'CurrentUser'}
- ->UserObj->CanonicalizeEmailAddress($Address);
- next if ( $args{'CurrentUser'}->EmailAddress =~ /^\Q$Address\E$/i );
- next if ( $args{'QueueObj'}->CorrespondAddress =~ /^\Q$Address\E$/i );
- next if ( $args{'QueueObj'}->CommentAddress =~ /^\Q$Address\E$/i );
- next if ( RT::EmailParser->IsRTAddress($Address) );
-
- push( @Addresses, $Address );
+ push @res, $address;
}
- return (@Addresses);
+ return @res;
}
-# }}}
-# {{{ ParseSenderAdddressFromHead
-=head2 ParseSenderAddressFromHead
+=head2 ParseSenderAddressFromHead HEAD
-Takes a MIME::Header object. Returns a tuple: (user@host, friendly name)
+Takes a MIME::Header object. Returns a tuple: (user@host, friendly name)
of the From (evaluated in order of Reply-To:, From:, Sender)
=cut
@@ -397,19 +995,16 @@ sub ParseSenderAddressFromHead {
#Figure out who's sending this message.
foreach my $header ('Reply-To', 'From', 'Sender') {
- my $From = $head->get($header);
- my ($addr, $name) = ParseAddressFromHeader($From);
+ my $addr_line = $head->get($header) || next;
+ my ($addr, $name) = ParseAddressFromHeader( $addr_line );
# only return if the address is not empty
return ($addr, $name) if $addr;
}
return (undef, undef);
}
-# }}}
-
-# {{{ ParseErrorsToAdddressFromHead
-=head2 ParseErrorsToAddressFromHead
+=head2 ParseErrorsToAddressFromHead HEAD
Takes a MIME::Header object. Return a single value : user@host
of the From (evaluated in order of Return-path:,Errors-To:,Reply-To:,
@@ -435,13 +1030,11 @@ sub ParseErrorsToAddressFromHead {
}
}
-# }}}
-# {{{ ParseAddressFromHeader
=head2 ParseAddressFromHeader ADDRESS
-Takes an address from $head->get('Line') and returns a tuple: user@host, friendly name
+Takes an address from C<$head->get('Line')> and returns a tuple: user@host, friendly name
=cut
@@ -449,15 +1042,15 @@ sub ParseAddressFromHeader {
my $Addr = shift;
# Some broken mailers send: ""Vincent, Jesse"" <jesse@fsck.com>. Hate
- $Addr =~ s/\"\"(.*?)\"\"/\"$1\"/g;
- my @Addresses = Mail::Address->parse($Addr);
+ $Addr =~ s/\"\"(.*?)\"\"/\"$1\"/g;
+ my @Addresses = RT::EmailParser->ParseEmailAddress($Addr);
my ($AddrObj) = grep ref $_, @Addresses;
unless ( $AddrObj ) {
return ( undef, undef );
}
- my $Name = ( $AddrObj->phrase || $AddrObj->comment || $AddrObj->address );
+ my $Name = ( $AddrObj->name || $AddrObj->phrase || $AddrObj->comment || $AddrObj->address );
#Lets take the from and load a user object.
my $Address = $AddrObj->address;
@@ -465,26 +1058,127 @@ sub ParseAddressFromHeader {
return ( $Address, $Name );
}
-# }}}
+=head2 DeleteRecipientsFromHead HEAD RECIPIENTS
-# {{{ sub ParseTicketId
+Gets a head object and list of addresses.
+Deletes addresses from To, Cc or Bcc fields.
+
+=cut
+
+sub DeleteRecipientsFromHead {
+ my $head = shift;
+ my %skip = map { lc $_ => 1 } @_;
+
+ foreach my $field ( qw(To Cc Bcc) ) {
+ $head->set( $field =>
+ join ', ', map $_->format, grep !$skip{ lc $_->address },
+ Email::Address->parse( $head->get( $field ) )
+ );
+ }
+}
+
+sub GenMessageId {
+ my %args = (
+ Ticket => undef,
+ Scrip => undef,
+ ScripAction => undef,
+ @_
+ );
+ my $org = RT->Config->Get('Organization');
+ my $ticket_id = ( ref $args{'Ticket'}? $args{'Ticket'}->id : $args{'Ticket'} ) || 0;
+ my $scrip_id = ( ref $args{'Scrip'}? $args{'Scrip'}->id : $args{'Scrip'} ) || 0;
+ my $sent = ( ref $args{'ScripAction'}? $args{'ScripAction'}->{'_Message_ID'} : 0 ) || 0;
+
+ return "<rt-". $RT::VERSION ."-". $$ ."-". CORE::time() ."-". int(rand(2000)) .'.'
+ . $ticket_id ."-". $scrip_id ."-". $sent ."@". $org .">" ;
+}
+
+sub SetInReplyTo {
+ my %args = (
+ Message => undef,
+ InReplyTo => undef,
+ Ticket => undef,
+ @_
+ );
+ return unless $args{'Message'} && $args{'InReplyTo'};
+
+ my $get_header = sub {
+ my @res;
+ if ( $args{'InReplyTo'}->isa('MIME::Entity') ) {
+ @res = $args{'InReplyTo'}->head->get( shift );
+ } else {
+ @res = $args{'InReplyTo'}->GetHeader( shift ) || '';
+ }
+ return grep length, map { split /\s+/m, $_ } grep defined, @res;
+ };
+
+ my @id = $get_header->('Message-ID');
+ #XXX: custom header should begin with X- otherwise is violation of the standard
+ my @rtid = $get_header->('RT-Message-ID');
+ my @references = $get_header->('References');
+ unless ( @references ) {
+ @references = $get_header->('In-Reply-To');
+ }
+ push @references, @id, @rtid;
+ if ( $args{'Ticket'} ) {
+ my $pseudo_ref = '<RT-Ticket-'. $args{'Ticket'}->id .'@'. RT->Config->Get('Organization') .'>';
+ push @references, $pseudo_ref unless grep $_ eq $pseudo_ref, @references;
+ }
+ @references = splice @references, 4, -6
+ if @references > 10;
+
+ my $mail = $args{'Message'};
+ $mail->head->set( 'In-Reply-To' => join ' ', @rtid? (@rtid) : (@id) ) if @id || @rtid;
+ $mail->head->set( 'References' => join ' ', @references );
+}
sub ParseTicketId {
my $Subject = shift;
- my $id;
- my $test_name = $RT::EmailSubjectTagRegex || qr/\Q$RT::rtname\E/i;
+ my $rtname = RT->Config->Get('rtname');
+ my $test_name = RT->Config->Get('EmailSubjectTagRegex') || qr/\Q$rtname\E/i;
+ my $id;
if ( $Subject =~ s/\[$test_name\s+\#(\d+)\s*\]//i ) {
- my $id = $1;
- $RT::Logger->debug("Found a ticket ID. It's $id");
- return ($id);
+ $id = $1;
} else {
- return (undef);
+ foreach my $tag ( RT->System->SubjectTag ) {
+ next unless $Subject =~ s/\[\Q$tag\E\s+\#(\d+)\s*\]//i;
+ $id = $1;
+ last;
+ }
}
+ return undef unless $id;
+
+ $RT::Logger->debug("Found a ticket ID. It's $id");
+ return $id;
+}
+
+sub AddSubjectTag {
+ my $subject = shift;
+ my $ticket = shift;
+ unless ( ref $ticket ) {
+ my $tmp = RT::Ticket->new( $RT::SystemUser );
+ $tmp->Load( $ticket );
+ $ticket = $tmp;
+ }
+ my $id = $ticket->id;
+ my $queue_tag = $ticket->QueueObj->SubjectTag;
+
+ my $tag_re = RT->Config->Get('EmailSubjectTagRegex');
+ unless ( $tag_re ) {
+ my $tag = $queue_tag || RT->Config->Get('rtname');
+ $tag_re = qr/\Q$tag\E/;
+ } elsif ( $queue_tag ) {
+ $tag_re = qr/$tag_re|\Q$queue_tag\E/;
+ }
+ return $subject if $subject =~ /\[$tag_re\s+#$id\]/;
+
+ $subject =~ s/(\r\n|\n|\s)/ /gi;
+ chomp $subject;
+ return "[". ($queue_tag || RT->Config->Get('rtname')) ." #$id] $subject";
}
-# }}}
=head2 Gateway ARGSREF
@@ -506,22 +1200,49 @@ any ticket id found in the subject.
Returns:
An array of:
-
+
(status code, message, optional ticket object)
status code is a numeric value.
for temporary failures, the status code should be -75
- for permanent failures which are handled by RT, the status code
+ for permanent failures which are handled by RT, the status code
should be 0
-
+
for succces, the status code should be 1
=cut
+sub _LoadPlugins {
+ my @mail_plugins = @_;
+
+ my @res;
+ foreach my $plugin (@mail_plugins) {
+ if ( ref($plugin) eq "CODE" ) {
+ push @res, $plugin;
+ } elsif ( !ref $plugin ) {
+ my $Class = $plugin;
+ $Class = "RT::Interface::Email::" . $Class
+ unless $Class =~ /^RT::Interface::Email::/;
+ $Class->require or
+ do { $RT::Logger->error("Couldn't load $Class: $@"); next };
+
+ no strict 'refs';
+ unless ( defined *{ $Class . "::GetCurrentUser" }{CODE} ) {
+ $RT::Logger->crit( "No GetCurrentUser code found in $Class module");
+ next;
+ }
+ push @res, $Class;
+ } else {
+ $RT::Logger->crit( "$plugin - is not class name or code reference");
+ }
+ }
+ return @res;
+}
+
sub Gateway {
my $argsref = shift;
my %args = (
@@ -549,12 +1270,15 @@ sub Gateway {
}
my $parser = RT::EmailParser->new();
- $parser->SmartParseMIMEEntityFromScalar( Message => $args{'message'} );
- my $Message = $parser->Entity();
+ $parser->SmartParseMIMEEntityFromScalar(
+ Message => $args{'message'},
+ Decode => 0,
+ Exact => 1,
+ );
+ my $Message = $parser->Entity();
unless ($Message) {
MailError(
- To => $RT::OwnerEmail,
Subject => "RT Bounce: Unparseable message",
Explanation => "RT couldn't process the message below",
Attach => $args{'message'}
@@ -565,12 +1289,50 @@ sub Gateway {
);
}
- my $head = $Message->head;
+ my @mail_plugins = grep $_, RT->Config->Get('MailPlugins');
+ push @mail_plugins, "Auth::MailFrom" unless @mail_plugins;
+ @mail_plugins = _LoadPlugins( @mail_plugins );
+
+ my %skip_plugin;
+ foreach my $class( grep !ref, @mail_plugins ) {
+ # check if we should apply filter before decoding
+ my $check_cb = do {
+ no strict 'refs';
+ *{ $class . "::ApplyBeforeDecode" }{CODE};
+ };
+ next unless defined $check_cb;
+ next unless $check_cb->(
+ Message => $Message,
+ RawMessageRef => \$args{'message'},
+ );
- my $ErrorsTo = ParseErrorsToAddressFromHead($head);
+ $skip_plugin{ $class }++;
+
+ my $Code = do {
+ no strict 'refs';
+ *{ $class . "::GetCurrentUser" }{CODE};
+ };
+ my ($status, $msg) = $Code->(
+ Message => $Message,
+ RawMessageRef => \$args{'message'},
+ );
+ next if $status > 0;
+
+ if ( $status == -2 ) {
+ return (1, $msg, undef);
+ } elsif ( $status == -1 ) {
+ return (0, $msg, undef);
+ }
+ }
+ @mail_plugins = grep !$skip_plugin{"$_"}, @mail_plugins;
+ $parser->_DecodeBodies;
+ $parser->_PostProcessNewEntity;
+
+ my $head = $Message->head;
+ my $ErrorsTo = ParseErrorsToAddressFromHead( $head );
my $MessageId = $head->get('Message-ID')
- || "<no-message-id-" . time . rand(2000) . "\@.$RT::Organization>";
+ || "<no-message-id-". time . rand(2000) .'@'. RT->Config->Get('Organization') .'>';
#Pull apart the subject line
my $Subject = $head->get('Subject') || '';
@@ -591,10 +1353,11 @@ sub Gateway {
if ($IsALoop && !$should_store_machine_generated_message) {
return ( 0, $result, undef );
}
+ # }}}
- $args{'ticket'} ||= ParseTicketId($Subject);
+ $args{'ticket'} ||= ParseTicketId( $Subject );
- $SystemTicket = RT::Ticket->new($RT::SystemUser);
+ $SystemTicket = RT::Ticket->new( $RT::SystemUser );
$SystemTicket->Load( $args{'ticket'} ) if ( $args{'ticket'} ) ;
if ( $SystemTicket->id ) {
$Right = 'ReplyToTicket';
@@ -603,7 +1366,7 @@ sub Gateway {
}
#Set up a queue object
- my $SystemQueueObj = RT::Queue->new($RT::SystemUser);
+ my $SystemQueueObj = RT::Queue->new( $RT::SystemUser );
$SystemQueueObj->Load( $args{'queue'} );
# We can safely have no queue of we have a known-good ticket
@@ -611,67 +1374,15 @@ sub Gateway {
return ( -75, "RT couldn't find the queue: " . $args{'queue'}, undef );
}
- # Authentication Level ($AuthStat)
- # -1 - Get out. this user has been explicitly declined
- # 0 - User may not do anything (Not used at the moment)
- # 1 - Normal user
- # 2 - User is allowed to specify status updates etc. a la enhanced-mailgate
- my ( $CurrentUser, $AuthStat, $error );
-
- # Initalize AuthStat so comparisons work correctly
- $AuthStat = -9999999;
-
- push @RT::MailPlugins, "Auth::MailFrom" unless @RT::MailPlugins;
-
- # if plugin returns AuthStat -2 we skip action
- # NOTE: this is experimental API and it would be changed
- my %skip_action = ();
-
- # Since this needs loading, no matter what
- foreach (@RT::MailPlugins) {
- my ($Code, $NewAuthStat);
- if ( ref($_) eq "CODE" ) {
- $Code = $_;
- } else {
- my $Class = $_;
- $Class = "RT::Interface::Email::" . $Class
- unless $Class =~ /^RT::Interface::Email::/;
- $Class->require or
- do { $RT::Logger->error("Couldn't load $Class: $@"); next };
-
- no strict 'refs';
- unless ( defined( $Code = *{ $Class . "::GetCurrentUser" }{CODE} ) ) {
- $RT::Logger->crit( "No 'GetCurrentUser' function found in '$Class' module");
- next;
- }
- }
-
- foreach my $action (@actions) {
- ( $CurrentUser, $NewAuthStat ) = $Code->(
- Message => $Message,
- RawMessageRef => \$args{'message'},
- CurrentUser => $CurrentUser,
- AuthLevel => $AuthStat,
- Action => $action,
- Ticket => $SystemTicket,
- Queue => $SystemQueueObj
- );
-
-# You get the highest level of authentication you were assigned, unless you get the magic -1
-# If a module returns a "-1" then we discard the ticket, so.
- $AuthStat = $NewAuthStat
- if ( $NewAuthStat > $AuthStat or $NewAuthStat == -1 or $NewAuthStat == -2 );
-
- last if $AuthStat == -1;
- $skip_action{$action}++ if $AuthStat == -2;
- }
-
- # strip actions we should skip
- @actions = grep !$skip_action{$_}, @actions if $AuthStat == -2;
- last unless @actions;
+ my ($AuthStat, $CurrentUser, $error) = GetAuthenticationLevel(
+ MailPlugins => \@mail_plugins,
+ Actions => \@actions,
+ Message => $Message,
+ RawMessageRef => \$args{message},
+ SystemTicket => $SystemTicket,
+ SystemQueue => $SystemQueueObj,
+ );
- last if $AuthStat == -1;
- }
# {{{ If authentication fails and no new user was created, get out.
if ( !$CurrentUser || !$CurrentUser->id || $AuthStat == -1 ) {
@@ -710,7 +1421,7 @@ sub Gateway {
unless ($should_store_machine_generated_message) {
return ( 0, $result, undef );
}
-
+
# if plugin's updated SystemTicket then update arguments
$args{'ticket'} = $SystemTicket->Id if $SystemTicket && $SystemTicket->Id;
@@ -722,7 +1433,7 @@ sub Gateway {
my @Cc;
my @Requestors = ( $CurrentUser->id );
- if ($RT::ParseNewMessageForTicketCcs) {
+ if (RT->Config->Get('ParseNewMessageForTicketCcs')) {
@Cc = ParseCcAddressesFromHead(
Head => $head,
CurrentUser => $CurrentUser,
@@ -772,6 +1483,8 @@ sub Gateway {
}
# }}}
+
+ my $unsafe_actions = RT->Config->Get('UnsafeEmailCommands');
foreach my $action (@actions) {
# If the action is comment, add a comment.
@@ -789,7 +1502,7 @@ sub Gateway {
);
return ( 0, "Message not recorded: $msg", $Ticket );
}
- } elsif ($RT::UnsafeEmailCommands) {
+ } elsif ($unsafe_actions) {
my ( $status, $msg ) = _RunUnsafeAction(
Action => $action,
ErrorsTo => $ErrorsTo,
@@ -803,6 +1516,79 @@ sub Gateway {
return ( 1, "Success", $Ticket );
}
+=head2 GetAuthenticationLevel
+
+ # Authentication Level
+ # -1 - Get out. this user has been explicitly declined
+ # 0 - User may not do anything (Not used at the moment)
+ # 1 - Normal user
+ # 2 - User is allowed to specify status updates etc. a la enhanced-mailgate
+
+=cut
+
+sub GetAuthenticationLevel {
+ my %args = (
+ MailPlugins => [],
+ Actions => [],
+ Message => undef,
+ RawMessageRef => undef,
+ SystemTicket => undef,
+ SystemQueue => undef,
+ @_,
+ );
+
+ my ( $CurrentUser, $AuthStat, $error );
+
+ # Initalize AuthStat so comparisons work correctly
+ $AuthStat = -9999999;
+
+ # if plugin returns AuthStat -2 we skip action
+ # NOTE: this is experimental API and it would be changed
+ my %skip_action = ();
+
+ # Since this needs loading, no matter what
+ foreach (@{ $args{MailPlugins} }) {
+ my ($Code, $NewAuthStat);
+ if ( ref($_) eq "CODE" ) {
+ $Code = $_;
+ } else {
+ no strict 'refs';
+ $Code = *{ $_ . "::GetCurrentUser" }{CODE};
+ }
+
+ foreach my $action (@{ $args{Actions} }) {
+ ( $CurrentUser, $NewAuthStat ) = $Code->(
+ Message => $args{Message},
+ RawMessageRef => $args{RawMessageRef},
+ CurrentUser => $CurrentUser,
+ AuthLevel => $AuthStat,
+ Action => $action,
+ Ticket => $args{SystemTicket},
+ Queue => $args{SystemQueue},
+ );
+
+# You get the highest level of authentication you were assigned, unless you get the magic -1
+# If a module returns a "-1" then we discard the ticket, so.
+ $AuthStat = $NewAuthStat
+ if ( $NewAuthStat > $AuthStat or $NewAuthStat == -1 or $NewAuthStat == -2 );
+
+ last if $AuthStat == -1;
+ $skip_action{$action}++ if $AuthStat == -2;
+ }
+
+ # strip actions we should skip
+ @{$args{Actions}} = grep !$skip_action{$_}, @{$args{Actions}}
+ if $AuthStat == -2;
+ last unless @{$args{Actions}};
+
+ last if $AuthStat == -1;
+ }
+
+ return $AuthStat if !wantarray;
+
+ return ($AuthStat, $CurrentUser, $error);
+}
+
sub _RunUnsafeAction {
my %args = (
Action => undef,
@@ -860,7 +1646,7 @@ sub _NoAuthorizedUserFound {
# Notify the RT Admin of the failure.
MailError(
- To => $RT::OwnerEmail,
+ To => RT->Config->Get('OwnerEmail'),
Subject => "Could not load a valid user",
Explanation => <<EOT,
RT could not load a valid user, and RT's configuration does not allow
@@ -875,7 +1661,7 @@ EOT
);
# Also notify the requestor that his request has been dropped.
- if ($args{'Requestor'} ne $RT::OwnerEmail) {
+ if ($args{'Requestor'} ne RT->Config->Get('OwnerEmail')) {
MailError(
To => $args{'Requestor'},
Subject => "Could not load a valid user",
@@ -918,11 +1704,13 @@ sub _HandleMachineGeneratedMail {
my $SquelchReplies = 0;
+ my $owner_mail = RT->Config->Get('OwnerEmail');
+
#If the message is autogenerated, we need to know, so we can not
# send mail to the sender
if ( $IsBounce || $IsSuspiciousSender || $IsAutoGenerated || $IsALoop ) {
$SquelchReplies = 1;
- $ErrorsTo = $RT::OwnerEmail;
+ $ErrorsTo = $owner_mail;
}
# Warn someone if it's a loop, before we drop it on the ground
@@ -930,9 +1718,9 @@ sub _HandleMachineGeneratedMail {
$RT::Logger->crit("RT Received mail (".$args{MessageId}.") from itself.");
#Should we mail it to RTOwner?
- if ($RT::LoopsToRTOwner) {
+ if ( RT->Config->Get('LoopsToRTOwner') ) {
MailError(
- To => $RT::OwnerEmail,
+ To => $owner_mail,
Subject => "RT Bounce: ".$args{'Subject'},
Explanation => "RT thinks this message may be a bounce",
MIMEObj => $args{Message}
@@ -940,7 +1728,8 @@ sub _HandleMachineGeneratedMail {
}
#Do we actually want to store it?
- return ( 0, $ErrorsTo, "Message Bounced", $IsALoop ) unless ($RT::StoreLoops);
+ return ( 0, $ErrorsTo, "Message Bounced", $IsALoop )
+ unless RT->Config->Get('StoreLoops');
}
# Squelch replies if necessary
@@ -977,7 +1766,7 @@ sub IsCorrectAction {
my $action = shift;
my @actions = grep $_, split /-/, $action;
return ( 0, '(no value)' ) unless @actions;
- foreach (@actions) {
+ foreach ( @actions ) {
return ( 0, $_ ) unless /^(?:comment|correspond|take|resolve)$/;
}
return ( 1, @actions );
diff --git a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm
index e543c4b..df987d8 100755
--- a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm
+++ b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,70 +45,204 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-#
+
package RT::Interface::Email::Auth::GnuPG;
-use Mail::GnuPG;
+
+use strict;
+use warnings;
=head2 GetCurrentUser
To use the gnupg-secured mail gateway, you need to do the following:
-Set up a gnupgp key directory with a pubring containing only the keys
+Set up a GnuPG key directory with a pubring containing only the keys
you care about and specify the following in your SiteConfig.pm
-Set($RT::GPGKeyDir, "/path/to/keyring-directory");
-@RT::MailPlugins = qw(Auth::MailFrom Auth::GnuPG Filter::TakeAction);
-
-
+ Set(%GnuPGOptions, homedir => '/opt/rt3/var/data/GnuPG');
+ Set(@MailPlugins, 'Auth::MailFrom', 'Auth::GnuPG', ...other filter...);
=cut
+sub ApplyBeforeDecode { return 1 }
+use RT::Crypt::GnuPG;
+use RT::EmailParser ();
sub GetCurrentUser {
my %args = (
- Message => undef,
- RawMessageRef => undef,
- CurrentUser => undef,
- AuthLevel => undef,
- Ticket => undef,
- Queue => undef,
- Action => undef,
+ Message => undef,
+ RawMessageRef => undef,
@_
);
- my ( $val, $key, $address,$gpg );
+ $args{'Message'}->head->delete($_)
+ for qw(X-RT-GnuPG-Status X-RT-Incoming-Encrypton
+ X-RT-Incoming-Signature X-RT-Privacy);
+
+ my $msg = $args{'Message'}->dup;
+
+ my ($status, @res) = VerifyDecrypt( Entity => $args{'Message'} );
+ if ( $status && !@res ) {
+ $args{'Message'}->head->add(
+ 'X-RT-Incoming-Encryption' => 'Not encrypted'
+ );
+
+ return 1;
+ }
+
+ # FIXME: Check if the message is encrypted to the address of
+ # _this_ queue. send rejecting mail otherwise.
+
+ unless ( $status ) {
+ $RT::Logger->error("Had a problem during decrypting and verifying");
+ my $reject = HandleErrors( Message => $args{'Message'}, Result => \@res );
+ return (0, 'rejected because of problems during decrypting and verifying')
+ if $reject;
+ }
+
+ # attach the original encrypted message
+ $args{'Message'}->attach(
+ Type => 'application/x-rt-original-message',
+ Disposition => 'inline',
+ Data => ${ $args{'RawMessageRef'} },
+ );
+
+ $args{'Message'}->head->add( 'X-RT-Privacy' => 'PGP' );
- eval {
+ foreach my $part ( $args{'Message'}->parts_DFS ) {
+ my $decrypted;
- my $parser = RT::EmailParser->new();
- $parser->SmartParseMIMEEntityFromScalar(Message => ${$args{'RawMessageRef'}}, Decode => 0);
- $gpg = Mail::GnuPG->new( keydir => $RT::GPGKeyDir );
- my $entity = $parser->Entity;
- ( $val, $key, $address ) = $gpg->verify( $parser->Entity);
- $RT::Logger->crit("Got $val - $key - $address");
- };
-
- if ($@) {
- $RT::Logger->crit($@);
+ my $status = $part->head->get( 'X-RT-GnuPG-Status' );
+ if ( $status ) {
+ for ( RT::Crypt::GnuPG::ParseStatus( $status ) ) {
+ if ( $_->{Operation} eq 'Decrypt' && $_->{Status} eq 'DONE' ) {
+ $decrypted = 1;
+ }
+ if ( $_->{Operation} eq 'Verify' && $_->{Status} eq 'DONE' ) {
+ $part->head->add(
+ 'X-RT-Incoming-Signature' => $_->{UserString}
+ );
+ }
+ }
}
- unless ($address) {
- $RT::Logger->crit( "Couldn't find a valid signature" . join ( "\n", @{ $gpg->{'last_message'} } ) );
- return ( $args{'CurrentUser'}, $args{'AuthLevel'} );
+ $part->head->add(
+ 'X-RT-Incoming-Encryption' =>
+ $decrypted ? 'Success' : 'Not encrypted'
+ );
}
- my @addrs = Mail::Address->parse($address);
- $address = $addrs[0]->address();
+ return 1;
+}
+
+sub HandleErrors {
+ my %args = (
+ Message => undef,
+ Result => [],
+ @_
+ );
- my $CurrentUser = RT::CurrentUser->new();
- $CurrentUser->LoadByEmail($address);
+ my $reject = 0;
- if ( $CurrentUser->Id ) {
- $RT::Logger->crit($address . " authenticated via PGP signature");
- return ( $CurrentUser, 2 );
+ my %sent_once = ();
+ foreach my $run ( @{ $args{'Result'} } ) {
+ my @status = RT::Crypt::GnuPG::ParseStatus( $run->{'status'} );
+ unless ( $sent_once{'NoPrivateKey'} ) {
+ unless ( CheckNoPrivateKey( Message => $args{'Message'}, Status => \@status ) ) {
+ $sent_once{'NoPrivateKey'}++;
+ $reject = 1 if RT->Config->Get('GnuPG')->{'RejectOnMissingPrivateKey'};
+ }
+ }
+ unless ( $sent_once{'BadData'} ) {
+ unless ( CheckBadData( Message => $args{'Message'}, Status => \@status ) ) {
+ $sent_once{'BadData'}++;
+ $reject = 1 if RT->Config->Get('GnuPG')->{'RejectOnBadData'};
+ }
+ }
}
+ return $reject;
+}
+
+sub CheckNoPrivateKey {
+ my %args = (Message => undef, Status => [], @_ );
+ my @status = @{ $args{'Status'} };
+ my @decrypts = grep $_->{'Operation'} eq 'Decrypt', @status;
+ return 1 unless @decrypts;
+ foreach my $action ( @decrypts ) {
+ # if at least one secrete key exist then it's another error
+ return 1 if
+ grep !$_->{'User'}{'SecretKeyMissing'},
+ @{ $action->{'EncryptedTo'} };
+ }
+
+ $RT::Logger->error("Couldn't decrypt a message: have no private key");
+
+ my $address = (RT::Interface::Email::ParseSenderAddressFromHead( $args{'Message'}->head ))[0];
+ my ($status) = RT::Interface::Email::SendEmailUsingTemplate(
+ To => $address,
+ Template => 'Error: no private key',
+ Arguments => {
+ Message => $args{'Message'},
+ TicketObj => $args{'Ticket'},
+ },
+ InReplyTo => $args{'Message'},
+ );
+ unless ( $status ) {
+ $RT::Logger->error("Couldn't send 'Error: no private key'");
+ }
+ return 0;
+}
+
+sub CheckBadData {
+ my %args = (Message => undef, Status => [], @_ );
+ my @bad_data_messages =
+ map $_->{'Message'},
+ grep $_->{'Status'} ne 'DONE' && $_->{'Operation'} eq 'Data',
+ @{ $args{'Status'} };
+ return 1 unless @bad_data_messages;
+
+ $RT::Logger->error("Couldn't process a message: ". join ', ', @bad_data_messages );
+
+ my $address = (RT::Interface::Email::ParseSenderAddressFromHead( $args{'Message'}->head ))[0];
+ my ($status) = RT::Interface::Email::SendEmailUsingTemplate(
+ To => $address,
+ Template => 'Error: bad GnuPG data',
+ Arguments => {
+ Messages => [ @bad_data_messages ],
+ TicketObj => $args{'Ticket'},
+ },
+ InReplyTo => $args{'Message'},
+ );
+ unless ( $status ) {
+ $RT::Logger->error("Couldn't send 'Error: bad GnuPG data'");
+ }
+ return 0;
+}
+
+sub VerifyDecrypt {
+ my %args = (
+ Entity => undef,
+ @_
+ );
+
+ my @res = RT::Crypt::GnuPG::VerifyDecrypt( %args );
+ unless ( @res ) {
+ $RT::Logger->debug("No more encrypted/signed parts");
+ return 1;
+ }
+
+ $RT::Logger->debug('Found GnuPG protected parts');
+
+ # return on any error
+ if ( grep $_->{'exit_code'}, @res ) {
+ $RT::Logger->debug("Error during verify/decrypt operation");
+ return (0, @res);
+ }
+
+ # nesting
+ my ($status, @nested) = VerifyDecrypt( %args );
+ return $status, @res, @nested;
}
eval "require RT::Interface::Email::Auth::GnuPG_Vendor";
@@ -121,3 +255,4 @@ die $@
&& $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Local.pm} );
1;
+
diff --git a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm
index 71cdf60..0673c73 100644
--- a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm
+++ b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Email::Auth::MailFrom;
use RT::Interface::Email qw(ParseSenderAddressFromHead CreateUser);
@@ -62,84 +63,74 @@ sub GetCurrentUser {
# We don't need to do any external lookups
my ( $Address, $Name ) = ParseSenderAddressFromHead( $args{'Message'}->head );
-
- unless ($Address) {
+ unless ( $Address ) {
+ $RT::Logger->error("Couldn't find sender's address");
return ( $args{'CurrentUser'}, -1 );
}
- my $CurrentUser = RT::CurrentUser->new();
- $CurrentUser->LoadByEmail($Address);
-
- unless ( $CurrentUser->Id ) {
- $CurrentUser->LoadByName($Address);
- }
-
+ my $CurrentUser = new RT::CurrentUser;
+ $CurrentUser->LoadByEmail( $Address );
+ $CurrentUser->LoadByName( $Address ) unless $CurrentUser->Id;
if ( $CurrentUser->Id ) {
+ $RT::Logger->debug("Mail from user #". $CurrentUser->Id ." ($Address)" );
return ( $CurrentUser, 1 );
}
-
-
# If the user can't be loaded, we may need to create one. Figure out the acl situation.
- my $unpriv = RT::Group->new($RT::SystemUser);
+ my $unpriv = RT::Group->new( $RT::SystemUser );
$unpriv->LoadSystemInternalGroup('Unprivileged');
unless ( $unpriv->Id ) {
- $RT::Logger->crit( "Auth::MailFrom couldn't find the 'Unprivileged' internal group" );
+ $RT::Logger->crit("Couldn't find the 'Unprivileged' internal group");
return ( $args{'CurrentUser'}, -1 );
}
- my $everyone = RT::Group->new($RT::SystemUser);
+ my $everyone = RT::Group->new( $RT::SystemUser );
$everyone->LoadSystemInternalGroup('Everyone');
unless ( $everyone->Id ) {
- $RT::Logger->crit( "Auth::MailFrom couldn't find the 'Everyone' internal group");
+ $RT::Logger->crit("Couldn't find the 'Everyone' internal group");
return ( $args{'CurrentUser'}, -1 );
}
+ $RT::Logger->debug("Going to create user with address '$Address'" );
+
# but before we do that, we need to make sure that the created user would have the right
# to do what we're doing.
if ( $args{'Ticket'} && $args{'Ticket'}->Id ) {
+ my $qname = $args{'Queue'}->Name;
# We have a ticket. that means we're commenting or corresponding
if ( $args{'Action'} =~ /^comment$/i ) {
# check to see whether "Everyone" or "Unprivileged users" can comment on tickets
- unless ( $everyone->PrincipalObj->HasRight(
- Object => $args{'Queue'},
- Right => 'CommentOnTicket'
- )
- || $unpriv->PrincipalObj->HasRight(
- Object => $args{'Queue'},
- Right => 'CommentOnTicket'
- )
- ) {
+ unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'CommentOnTicket' )
+ || $unpriv->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'CommentOnTicket' ) )
+ {
+ $RT::Logger->debug("Unprivileged users have no right to comment on ticket in queue '$qname'");
return ( $args{'CurrentUser'}, 0 );
}
}
elsif ( $args{'Action'} =~ /^correspond$/i ) {
# check to see whether "Everybody" or "Unprivileged users" can correspond on tickets
- unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'},
- Right => 'ReplyToTicket'
- )
- || $unpriv->PrincipalObj->HasRight(
- Object => $args{'Queue'},
- Right => 'ReplyToTicket'
- )
- ) {
+ unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'ReplyToTicket' )
+ || $unpriv->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'ReplyToTicket' ) )
+ {
+ $RT::Logger->debug("Unprivileged users have no right to reply to ticket in queue '$qname'");
return ( $args{'CurrentUser'}, 0 );
}
-
}
elsif ( $args{'Action'} =~ /^take$/i ) {
# check to see whether "Everybody" or "Unprivileged users" can correspond on tickets
- unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'},
- Right => 'OwnTicket'
- )
- || $unpriv->PrincipalObj->HasRight(
- Object => $args{'Queue'},
- Right => 'OwnTicket'
- )
- ) {
+ unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'OwnTicket' )
+ || $unpriv->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'OwnTicket' ) )
+ {
+ $RT::Logger->debug("Unprivileged users have no right to own ticket in queue '$qname'");
return ( $args{'CurrentUser'}, 0 );
}
@@ -147,33 +138,35 @@ sub GetCurrentUser {
elsif ( $args{'Action'} =~ /^resolve$/i ) {
# check to see whether "Everybody" or "Unprivileged users" can correspond on tickets
- unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'},
- Right => 'ModifyTicket'
- )
- || $unpriv->PrincipalObj->HasRight(
- Object => $args{'Queue'},
- Right => 'ModifyTicket'
- )
- ) {
+ unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'ModifyTicket' )
+ || $unpriv->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'ModifyTicket' ) )
+ {
+ $RT::Logger->debug("Unprivileged users have no right to resolve ticket in queue '$qname'");
return ( $args{'CurrentUser'}, 0 );
}
}
else {
+ $RT::Logger->warning("Action '". ($args{'Action'}||'') ."' is unknown");
return ( $args{'CurrentUser'}, 0 );
}
}
# We're creating a ticket
elsif ( $args{'Queue'} && $args{'Queue'}->Id ) {
+ my $qname = $args{'Queue'}->Name;
# check to see whether "Everybody" or "Unprivileged users" can create tickets in this queue
unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'},
Right => 'CreateTicket' )
- ) {
+ || $unpriv->PrincipalObj->HasRight( Object => $args{'Queue'},
+ Right => 'CreateTicket' ) )
+ {
+ $RT::Logger->debug("Unprivileged users have no right to create ticket in queue '$qname'");
return ( $args{'CurrentUser'}, 0 );
}
-
}
$CurrentUser = CreateUser( undef, $Address, $Name, $Address, $args{'Message'} );
diff --git a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm b/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm
index 176b394..49e89c5 100644
--- a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm
+++ b/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Email::Filter::SpamAssassin;
use Mail::SpamAssassin;
@@ -77,7 +78,8 @@ RT::Interface::Email::Filter::SpamAssassin - Spam filter for RT
=head1 SYNOPSIS
- @RT::MailPlugins = ("Filter::SpamAssassin", ...);
+ # in RT config
+ Set(@MailPlugins, 'Filter::SpamAssassin', ...other filters...);
=head1 DESCRIPTION
diff --git a/rt/lib/RT/Interface/REST.pm b/rt/lib/RT/Interface/REST.pm
index 9fef6f8..e7689f4 100644
--- a/rt/lib/RT/Interface/REST.pm
+++ b/rt/lib/RT/Interface/REST.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# lib/RT/Interface/REST.pm
#
@@ -53,16 +54,39 @@ use strict;
use RT;
BEGIN {
- use Exporter ();
- use vars qw($VERSION @ISA @EXPORT);
+ use base 'Exporter';
+ use vars qw($VERSION @EXPORT);
- $VERSION = do { my @r = (q$Revision: 1.1.1.7 $ =~ /\d+/g); sprintf "%d."."%02d"x$#r, @r };
+ $VERSION = do { my @r = (q$Revision: 1.1.1.8 $ =~ /\d+/g); sprintf "%d."."%02d"x$#r, @r };
- @ISA = qw(Exporter);
@EXPORT = qw(expand_list form_parse form_compose vpush vsplit);
}
-my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-(?:[a-z0-9_ -]|\s)+)';
+sub custom_field_spec {
+ my $self = shift;
+ my $capture = shift;
+
+ my $CF_char = '[\sa-z0-9_ :()/-]';
+ my $CF_name = $CF_char . '+';
+ $CF_name = '(' . $CF_name . ')' if $capture;
+
+ my $new_style = 'CF\.\{'.$CF_name.'\}';
+ my $old_style = 'C(?:ustom)?F(?:ield)?-'.$CF_name;
+
+ return '(?i:' . join('|', $new_style, $old_style) . ')';
+}
+
+sub field_spec {
+ my $self = shift;
+ my $capture = shift;
+
+ my $field = '[a-z][a-z0-9_-]*';
+ $field = '(' . $field . ')' if $capture;
+
+ my $custom_field = __PACKAGE__->custom_field_spec($capture);
+
+ return '(?i:' . join('|', $field, $custom_field) . ')';
+}
# WARN: this code is duplicated in bin/rt.in,
# change both functions at once
@@ -95,6 +119,7 @@ sub form_parse {
my @forms = ();
my @lines = split /\n/, $_[0];
my ($c, $o, $k, $e) = ("", [], {}, "");
+ my $field = __PACKAGE__->field_spec;
LINE:
while (@lines) {
@@ -148,7 +173,7 @@ sub form_parse {
$state = 1;
}
- elsif ($line !~ /^#/) {
+ elsif ($line =~ /^#/) {
# We've found a syntax error, so we'll reconstruct the
# form parsed thus far, and add an error marker. (>>)
$state = -1;
@@ -201,7 +226,8 @@ sub form_compose {
$sp = " "x4 if length($sp) > 16;
foreach $v (@values) {
- if ($v =~ /\n/) {
+ $v = '' unless defined $v;
+ if ( $v =~ /\n/) {
$v =~ s/^/$sp/gm;
$v =~ s/^$sp//;
@@ -269,9 +295,9 @@ sub vsplit {
my ($val) = @_;
my ($line, $word, @words);
- foreach $line (map {split /\n/} (ref $val eq 'ARRAY') ? @$val : $val)
+ foreach $line (map {split /\n/} (ref $val eq 'ARRAY') ? @$val : ($val||''))
{
- # XXX: This should become a real parser, à la Text::ParseWords.
+ # XXX: This should become a real parser, ? la Text::ParseWords.
$line =~ s/^\s+//;
$line =~ s/\s+$//;
push @words, split /\s*,\s*/, $line;
@@ -280,6 +306,16 @@ sub vsplit {
return \@words;
}
+eval "require RT::Interface::REST_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Interface/REST_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Interface::REST_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Interface/REST_Local.pm}) {
+ die $@;
+};
+
1;
=head1 NAME
diff --git a/rt/lib/RT/Interface/Web.pm b/rt/lib/RT/Interface/Web.pm
index 4e5fca1..b4279fb 100644
--- a/rt/lib/RT/Interface/Web.pm
+++ b/rt/lib/RT/Interface/Web.pm
@@ -1,40 +1,40 @@
# BEGIN BPS TAGGED BLOCK {{{
-#
+#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
-#
+#
# (Except where explicitly superseded by other copyright notices)
-#
-#
+#
+#
# LICENSE:
-#
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 or visit their web page on the internet at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
+#
+#
# CONTRIBUTION SUBMISSION POLICY:
-#
+#
# (The following paragraph is not intended to limit the rights granted
# to you to modify and distribute this software under the terms of
# the GNU General Public License and is only of importance to you if
# you choose to contribute your changes and enhancements to the
# community by submitting them to Best Practical Solutions, LLC.)
-#
+#
# By intentionally submitting any modifications, corrections or
# derivatives to this work, or any other work intended for use with
# Request Tracker, to Best Practical Solutions, LLC, you confirm that
@@ -43,34 +43,31 @@
# 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 }}}
+
## Portions Copyright 2000 Tobias Brox <tobix@fsck.com>
## This is a library of static subs to be used by the Mason web
## interface to RT
-
=head1 NAME
RT::Interface::Web
-=begin testing
-
-use_ok(RT::Interface::Web);
-
-=end testing
=cut
-
use strict;
use warnings;
package RT::Interface::Web;
-use HTTP::Date;
+
use RT::SavedSearches;
-use URI;
+use URI qw();
+use RT::Interface::Web::Session;
+use Digest::MD5 ();
+use Encode qw();
# {{{ EscapeUTF8
@@ -80,22 +77,17 @@ does a css-busting but minimalist escaping of whatever html you're passing in.
=cut
-sub EscapeUTF8 {
- my $ref = shift;
- return unless defined $$ref;
- my $val = $$ref;
- use bytes;
- $val =~ s/&/&#38;/g;
- $val =~ s/</&lt;/g;
- $val =~ s/>/&gt;/g;
- $val =~ s/\(/&#40;/g;
- $val =~ s/\)/&#41;/g;
- $val =~ s/"/&#34;/g;
- $val =~ s/'/&#39;/g;
- $$ref = $val;
- Encode::_utf8_on($$ref);
-
-
+sub EscapeUTF8 {
+ my $ref = shift;
+ return unless defined $$ref;
+
+ $$ref =~ s/&/&#38;/g;
+ $$ref =~ s/</&lt;/g;
+ $$ref =~ s/>/&gt;/g;
+ $$ref =~ s/\(/&#40;/g;
+ $$ref =~ s/\)/&#41;/g;
+ $$ref =~ s/"/&#34;/g;
+ $$ref =~ s/'/&#39;/g;
}
# }}}
@@ -108,12 +100,12 @@ Escapes URI component according to RFC2396
=cut
-use Encode qw();
sub EscapeURI {
my $ref = shift;
- $$ref = Encode::encode_utf8( $$ref );
+ return unless defined $$ref;
+
+ use bytes;
$$ref =~ s/([^a-zA-Z0-9_.!~*'()-])/uc sprintf("%%%02X", ord($1))/eg;
- Encode::_utf8_on( $$ref );
}
# }}}
@@ -129,13 +121,7 @@ just downcase $ENV{'REMOTE_USER'}
=cut
sub WebCanonicalizeInfo {
- my $user;
-
- if ( defined $ENV{'REMOTE_USER'} ) {
- $user = lc ( $ENV{'REMOTE_USER'} ) if( length($ENV{'REMOTE_USER'}) );
- }
-
- return $user;
+ return $ENV{'REMOTE_USER'} ? lc $ENV{'REMOTE_USER'} : $ENV{'REMOTE_USER'};
}
# }}}
@@ -155,19 +141,21 @@ sub WebExternalAutoInfo {
# default to making Privileged users, even if they specify
# some other default Attributes
- if (!$RT::AutoCreate ||
- ( ref($RT::AutoCreate) && not exists $RT::AutoCreate->{Privileged})) {
+ if ( !$RT::AutoCreate
+ || ( ref($RT::AutoCreate) && not exists $RT::AutoCreate->{Privileged} ) )
+ {
$user_info{'Privileged'} = 1;
}
- if ($^O !~ /^(?:riscos|MacOS|MSWin32|dos|os2)$/) {
+ if ( $^O !~ /^(?:riscos|MacOS|MSWin32|dos|os2)$/ ) {
+
# Populate fields with information from Unix /etc/passwd
- my ($comments, $realname) = (getpwnam($user))[5, 6];
+ my ( $comments, $realname ) = ( getpwnam($user) )[ 5, 6 ];
$user_info{'Comments'} = $comments if defined $comments;
$user_info{'RealName'} = $realname if defined $realname;
- }
- elsif ($^O eq 'MSWin32' and eval 'use Net::AdminMisc; 1') {
+ } elsif ( $^O eq 'MSWin32' and eval 'use Net::AdminMisc; 1' ) {
+
# Populate fields with information from NT domain controller
}
@@ -177,7 +165,323 @@ sub WebExternalAutoInfo {
# }}}
+sub HandleRequest {
+ my $ARGS = shift;
+
+ $HTML::Mason::Commands::r->content_type("text/html; charset=utf-8");
+
+ $HTML::Mason::Commands::m->{'rt_base_time'} = [ Time::HiRes::gettimeofday() ];
+
+ # Roll back any dangling transactions from a previous failed connection
+ $RT::Handle->ForceRollback() if $RT::Handle->TransactionDepth;
+
+ MaybeEnableSQLStatementLog();
+
+ # avoid reentrancy, as suggested by masonbook
+ local *HTML::Mason::Commands::session unless $HTML::Mason::Commands::m->is_subrequest;
+
+ $HTML::Mason::Commands::m->autoflush( $HTML::Mason::Commands::m->request_comp->attr('AutoFlush') )
+ if ( $HTML::Mason::Commands::m->request_comp->attr_exists('AutoFlush') );
+
+ DecodeARGS($ARGS);
+ PreprocessTimeUpdates($ARGS);
+
+ MaybeShowInstallModePage();
+
+ $HTML::Mason::Commands::m->comp( '/Elements/SetupSessionCookie', %$ARGS );
+ SendSessionCookie();
+ $HTML::Mason::Commands::session{'CurrentUser'} = RT::CurrentUser->new() unless _UserLoggedIn();
+
+ MaybeShowNoAuthPage($ARGS);
+
+ AttemptExternalAuth($ARGS) if RT->Config->Get('WebExternalAuthContinuous') or not _UserLoggedIn();
+
+ _ForceLogout() unless _UserLoggedIn();
+
+ # Process per-page authentication callbacks
+ $HTML::Mason::Commands::m->callback( %$ARGS, CallbackName => 'Auth', CallbackPage => '/autohandler' );
+
+ unless ( _UserLoggedIn() ) {
+ _ForceLogout();
+
+ # If the user is logging in, let's authenticate
+ if ( defined $ARGS->{user} && defined $ARGS->{pass} ) {
+ AttemptPasswordAuthentication($ARGS);
+ } else {
+ # if no credentials then show him login page
+ $HTML::Mason::Commands::m->comp( '/Elements/Login', %$ARGS );
+ $HTML::Mason::Commands::m->abort;
+ }
+ }
+
+ # now it applies not only to home page, but any dashboard that can be used as a workspace
+ $HTML::Mason::Commands::session{'home_refresh_interval'} = $ARGS->{'HomeRefreshInterval'}
+ if ( $ARGS->{'HomeRefreshInterval'} );
+
+ # Process per-page global callbacks
+ $HTML::Mason::Commands::m->callback( %$ARGS, CallbackName => 'Default', CallbackPage => '/autohandler' );
+
+ ShowRequestedPage($ARGS);
+ LogRecordedSQLStatements();
+}
+
+sub _ForceLogout {
+
+ delete $HTML::Mason::Commands::session{'CurrentUser'};
+}
+
+sub _UserLoggedIn {
+ if ( $HTML::Mason::Commands::session{CurrentUser} && $HTML::Mason::Commands::session{'CurrentUser'}->id ) {
+ return 1;
+ } else {
+ return undef;
+ }
+
+}
+
+=head2 MaybeShowInstallModePage
+
+This function, called exclusively by RT's autohandler, dispatches
+a request to RT's Installation workflow, only if Install Mode is enabled in the configuration file.
+
+If it serves a page, it stops mason processing. Otherwise, mason just keeps running through the autohandler
+
+=cut
+
+sub MaybeShowInstallModePage {
+ return unless RT->InstallMode;
+
+ my $m = $HTML::Mason::Commands::m;
+ if ( $m->base_comp->path =~ RT->Config->Get('WebNoAuthRegex') ) {
+ $m->call_next();
+ } elsif ( $m->request_comp->path !~ '^(/+)Install/' ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') . "Install/index.html" );
+ } else {
+ $m->call_next();
+ }
+ $m->abort();
+}
+
+=head2 MaybeShowNoAuthPage \%ARGS
+
+This function, called exclusively by RT's autohandler, dispatches
+a request to the page a user requested (but only if it matches the "noauth" regex.
+
+If it serves a page, it stops mason processing. Otherwise, mason just keeps running through the autohandler
+
+=cut
+sub MaybeShowNoAuthPage {
+ my $ARGS = shift;
+
+ my $m = $HTML::Mason::Commands::m;
+
+ return unless $m->base_comp->path =~ RT->Config->Get('WebNoAuthRegex');
+
+ # If it's a noauth file, don't ask for auth.
+ SendSessionCookie();
+ $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %$ARGS );
+ $m->abort;
+}
+
+=head2 ShowRequestedPage \%ARGS
+
+This function, called exclusively by RT's autohandler, dispatches
+a request to the page a user requested (making sure that unpriviled users
+can only see self-service pages.
+
+=cut
+
+sub ShowRequestedPage {
+ my $ARGS = shift;
+
+ my $m = $HTML::Mason::Commands::m;
+
+ SendSessionCookie();
+
+ # If the user isn't privileged, they can only see SelfService
+ unless ( $HTML::Mason::Commands::session{'CurrentUser'}->Privileged ) {
+
+ # if the user is trying to access a ticket, redirect them
+ if ( $m->request_comp->path =~ '^(/+)Ticket/Display.html' && $ARGS->{'id'} ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') . "SelfService/Display.html?id=" . $ARGS->{'id'} );
+ }
+
+ # otherwise, drop the user at the SelfService default page
+ elsif ( $m->base_comp->path !~ RT->Config->Get('SelfServiceRegex') ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') . "SelfService/" );
+ }
+
+ # if user is in SelfService dir let him do anything
+ else {
+ $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %$ARGS );
+ }
+ } else {
+ $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %$ARGS );
+ }
+
+}
+
+sub AttemptExternalAuth {
+ my $ARGS = shift;
+
+ return unless ( RT->Config->Get('WebExternalAuth') );
+
+ my $user = $ARGS->{user};
+ my $m = $HTML::Mason::Commands::m;
+
+ # If RT is configured for external auth, let's go through and get REMOTE_USER
+
+ # do we actually have a REMOTE_USER equivlent?
+ if ( RT::Interface::Web::WebCanonicalizeInfo() ) {
+ my $orig_user = $user;
+
+ $user = RT::Interface::Web::WebCanonicalizeInfo();
+ my $load_method = RT->Config->Get('WebExternalGecos') ? 'LoadByGecos' : 'Load';
+
+ if ( $^O eq 'MSWin32' and RT->Config->Get('WebExternalGecos') ) {
+ my $NodeName = Win32::NodeName();
+ $user =~ s/^\Q$NodeName\E\\//i;
+ }
+
+ InstantiateNewSession() unless _UserLoggedIn;
+ $HTML::Mason::Commands::session{'CurrentUser'} = RT::CurrentUser->new();
+ $HTML::Mason::Commands::session{'CurrentUser'}->$load_method($user);
+
+ if ( RT->Config->Get('WebExternalAuto') and not _UserLoggedIn() ) {
+
+ # Create users on-the-fly
+ my $UserObj = RT::User->new($RT::SystemUser);
+ my ( $val, $msg ) = $UserObj->Create(
+ %{ ref RT->Config->Get('AutoCreate') ? RT->Config->Get('AutoCreate') : {} },
+ Name => $user,
+ Gecos => $user,
+ );
+
+ if ($val) {
+
+ # now get user specific information, to better create our user.
+ my $new_user_info = RT::Interface::Web::WebExternalAutoInfo($user);
+
+ # set the attributes that have been defined.
+ foreach my $attribute ( $UserObj->WritableAttributes ) {
+ $m->callback(
+ Attribute => $attribute,
+ User => $user,
+ UserInfo => $new_user_info,
+ CallbackName => 'NewUser',
+ CallbackPage => '/autohandler'
+ );
+ my $method = "Set$attribute";
+ $UserObj->$method( $new_user_info->{$attribute} ) if defined $new_user_info->{$attribute};
+ }
+ $HTML::Mason::Commands::session{'CurrentUser'}->Load($user);
+ } else {
+
+ # we failed to successfully create the user. abort abort abort.
+ delete $HTML::Mason::Commands::session{'CurrentUser'};
+ $m->comp( '/Elements/Login', %$ARGS, Error => HTML::Mason::Commands::loc( 'Cannot create user: [_1]', $msg ) )
+ if RT->Config->Get('WebFallbackToInternalAuth');;
+ $m->abort();
+ }
+ }
+
+ if ( _UserLoggedIn() ) {
+ $m->callback( %$ARGS, CallbackName => 'ExternalAuthSuccessfulLogin', CallbackPage => '/autohandler' );
+ } else {
+ delete $HTML::Mason::Commands::session{'CurrentUser'};
+ $user = $orig_user;
+
+ if ( RT->Config->Get('WebExternalOnly') ) {
+ $m->comp( '/Elements/Login', %$ARGS, Error => HTML::Mason::Commands::loc('You are not an authorized user') );
+ $m->abort();
+ }
+ }
+ } elsif ( RT->Config->Get('WebFallbackToInternalAuth') ) {
+ unless ( defined $HTML::Mason::Commands::session{'CurrentUser'} ) {
+ # XXX unreachable due to prior defaulting in HandleRequest (check c34d108)
+ $m->comp( '/Elements/Login', %$ARGS, Error => HTML::Mason::Commands::loc('You are not an authorized user') );
+ $m->abort();
+ }
+ } else {
+
+ # WebExternalAuth is set, but we don't have a REMOTE_USER. abort
+ # XXX: we must return AUTH_REQUIRED status or we fallback to
+ # internal auth here too.
+ delete $HTML::Mason::Commands::session{'CurrentUser'}
+ if defined $HTML::Mason::Commands::session{'CurrentUser'};
+ }
+}
+
+sub AttemptPasswordAuthentication {
+ my $ARGS = shift;
+ my $user_obj = RT::CurrentUser->new();
+ $user_obj->Load( $ARGS->{user} );
+
+ my $m = $HTML::Mason::Commands::m;
+
+ unless ( $user_obj->id && $user_obj->IsPassword( $ARGS->{pass} ) ) {
+ $RT::Logger->error("FAILED LOGIN for @{[$ARGS->{user}]} from $ENV{'REMOTE_ADDR'}");
+ $m->comp( '/Elements/Login', %$ARGS, Error => HTML::Mason::Commands::loc('Your username or password is incorrect'), );
+ $m->callback( %$ARGS, CallbackName => 'FailedLogin', CallbackPage => '/autohandler' );
+ $m->abort;
+ }
+
+ $RT::Logger->info("Successful login for @{[$ARGS->{user}]} from $ENV{'REMOTE_ADDR'}");
+ InstantiateNewSession();
+ $HTML::Mason::Commands::session{'CurrentUser'} = $user_obj;
+ $m->callback( %$ARGS, CallbackName => 'SuccessfulLogin', CallbackPage => '/autohandler' );
+}
+
+=head2 LoadSessionFromCookie
+
+Load or setup a session cookie for the current user.
+
+=cut
+
+sub _SessionCookieName {
+ my $cookiename = "RT_SID_" . RT->Config->Get('rtname');
+ $cookiename .= "." . $ENV{'SERVER_PORT'} if $ENV{'SERVER_PORT'};
+ return $cookiename;
+}
+
+sub LoadSessionFromCookie {
+
+ my %cookies = CGI::Cookie->fetch;
+ my $cookiename = _SessionCookieName();
+ my $SessionCookie = ( $cookies{$cookiename} ? $cookies{$cookiename}->value : undef );
+ tie %HTML::Mason::Commands::session, 'RT::Interface::Web::Session', $SessionCookie;
+ unless ( $SessionCookie && $HTML::Mason::Commands::session{'_session_id'} eq $SessionCookie ) {
+ undef $cookies{$cookiename};
+ }
+ if ( int RT->Config->Get('AutoLogoff') ) {
+ my $now = int( time / 60 );
+ my $last_update = $HTML::Mason::Commands::session{'_session_last_update'} || 0;
+
+ if ( $last_update && ( $now - $last_update - RT->Config->Get('AutoLogoff') ) > 0 ) {
+ InstantiateNewSession();
+ }
+
+ # save session on each request when AutoLogoff is turned on
+ $HTML::Mason::Commands::session{'_session_last_update'} = $now if $now != $last_update;
+ }
+}
+
+sub InstantiateNewSession {
+ tied(%HTML::Mason::Commands::session)->delete if tied(%HTML::Mason::Commands::session);
+ tie %HTML::Mason::Commands::session, 'RT::Interface::Web::Session', undef;
+}
+
+sub SendSessionCookie {
+ my $cookie = CGI::Cookie->new(
+ -name => _SessionCookieName(),
+ -value => $HTML::Mason::Commands::session{_session_id},
+ -path => RT->Config->Get('WebPath'),
+ -secure => ( RT->Config->Get('WebSecureCookies') ? 1 : 0 )
+ );
+
+ $HTML::Mason::Commands::r->err_headers_out->{'Set-Cookie'} = $cookie->as_string;
+}
=head2 Redirect URL
@@ -188,27 +492,42 @@ a cached DBI statement handle twice at the same time.
=cut
-
sub Redirect {
my $redir_to = shift;
untie $HTML::Mason::Commands::session;
- my $uri = URI->new($redir_to);
- my $server_uri = URI->new($RT::WebURL);
+ my $uri = URI->new($redir_to);
+ my $server_uri = URI->new( RT->Config->Get('WebURL') );
# If the user is coming in via a non-canonical
# hostname, don't redirect them to the canonical host,
# it will just upset them (and invalidate their credentials)
- if ($uri->host eq $server_uri->host &&
- $uri->port eq $server_uri->port) {
- $uri->host($ENV{'HTTP_HOST'});
- $uri->port($ENV{'SERVER_PORT'});
+ # don't do this if $RT::CanoniaclRedirectURLs is true
+ if ( !RT->Config->Get('CanonicalizeRedirectURLs')
+ && $uri->host eq $server_uri->host
+ && $uri->port eq $server_uri->port )
+ {
+ if ( defined $ENV{HTTPS} and $ENV{'HTTPS'} eq 'on' ) {
+ $uri->scheme('https');
+ } else {
+ $uri->scheme('http');
}
- $HTML::Mason::Commands::m->redirect($uri->canonical);
+ # [rt3.fsck.com #12716] Apache recommends use of $SERVER_HOST
+ $uri->host( $ENV{'SERVER_HOST'} || $ENV{'HTTP_HOST'} );
+ $uri->port( $ENV{'SERVER_PORT'} );
+ }
+
+ # not sure why, but on some systems without this call mason doesn't
+ # set status to 302, but 200 instead and people see blank pages
+ $HTML::Mason::Commands::r->status(302);
+
+ # Perlbal expects a status message, but Mason's default redirect status
+ # doesn't provide one. See also rt.cpan.org #36689.
+ $HTML::Mason::Commands::m->redirect( $uri->canonical, "302 Found" );
+
$HTML::Mason::Commands::m->abort;
}
-
=head2 StaticFileHeaders
Send the browser a few headers to try to get it to (somewhat agressively)
@@ -219,23 +538,196 @@ This routine could really use _accurate_ heuristics. (XXX TODO)
=cut
sub StaticFileHeaders {
+ my $date = RT::Date->new($RT::SystemUser);
+
# make cache public
$HTML::Mason::Commands::r->headers_out->{'Cache-Control'} = 'max-age=259200, public';
# Expire things in a month.
- $HTML::Mason::Commands::r->headers_out->{'Expires'} = HTTP::Date::time2str( time() + 2592000 );
+ $date->Set( Value => time + 30 * 24 * 60 * 60 );
+ $HTML::Mason::Commands::r->headers_out->{'Expires'} = $date->RFC2616;
# if we set 'Last-Modified' then browser request a comp using 'If-Modified-Since'
# request, but we don't handle it and generate full reply again
# Last modified at server start time
- #$HTML::Mason::Commands::r->headers_out->{'Last-Modified'} = HTTP::Date::time2str($^T);
+ # $date->Set( Value => $^T );
+ # $HTML::Mason::Commands::r->headers_out->{'Last-Modified'} = $date->RFC2616;
+}
+
+=head2 SendStaticFile
+
+Takes a File => path and a Type => Content-type
+
+If Type isn't provided and File is an image, it will
+figure out a sane Content-type, otherwise it will
+send application/octet-stream
+
+Will set caching headers using StaticFileHeaders
+
+=cut
+
+sub SendStaticFile {
+ my $self = shift;
+ my %args = @_;
+ my $file = $args{File};
+ my $type = $args{Type};
+
+ $self->StaticFileHeaders();
+
+ unless ($type) {
+ if ( $file =~ /\.(gif|png|jpe?g)$/i ) {
+ $type = "image/$1";
+ $type =~ s/jpg/jpeg/gi;
+ }
+ $type ||= "application/octet-stream";
+ }
+ $HTML::Mason::Commands::r->content_type($type);
+ open my $fh, "<$file" or die "couldn't open file: $!";
+ binmode($fh);
+ {
+ local $/ = \16384;
+ $HTML::Mason::Commands::m->out($_) while (<$fh>);
+ $HTML::Mason::Commands::m->flush_buffer;
+ }
+ close $fh;
+}
+
+sub StripContent {
+ my %args = @_;
+ my $content = $args{Content};
+ return '' unless $content;
+
+ # Make the content have no 'weird' newlines in it
+ $content =~ s/\r+\n/\n/g;
+
+ my $return_content = $content;
+
+ my $html = $args{ContentType} && $args{ContentType} eq "text/html";
+ my $sigonly = $args{StripSignature};
+
+ # massage content to easily detect if there's any real content
+ $content =~ s/\s+//g; # yes! remove all the spaces
+ if ( $html ) {
+ # remove html version of spaces and newlines
+ $content =~ s!&nbsp;!!g;
+ $content =~ s!<br/?>!!g;
+ }
+ # Filter empty content when type is text/html
+ return '' if $html && $content !~ /\S/;
+
+ # If we aren't supposed to strip the sig, just bail now.
+ return $return_content unless $sigonly;
+
+ # Find the signature
+ my $sig = $args{'CurrentUser'}->UserObj->Signature || '';
+ $sig =~ s/\s+//g;
+
+ # Check for plaintext sig
+ return '' if not $html and $content =~ /^(--)?\Q$sig\E$/;
+
+ # Check for html-formatted sig
+ RT::Interface::Web::EscapeUTF8( \$sig );
+ return ''
+ if $html
+ and $content =~ m{^(?:<p>)?(--)?\Q$sig\E(?:</p>)?$}s;
+
+ # Pass it through
+ return $return_content;
+}
+
+sub DecodeARGS {
+ my $ARGS = shift;
+
+ %{$ARGS} = map {
+
+ # if they've passed multiple values, they'll be an array. if they've
+ # passed just one, a scalar whatever they are, mark them as utf8
+ my $type = ref($_);
+ ( !$type )
+ ? Encode::is_utf8($_)
+ ? $_
+ : Encode::decode( 'UTF-8' => $_, Encode::FB_PERLQQ )
+ : ( $type eq 'ARRAY' )
+ ? [ map { ( ref($_) or Encode::is_utf8($_) ) ? $_ : Encode::decode( 'UTF-8' => $_, Encode::FB_PERLQQ ) }
+ @$_ ]
+ : ( $type eq 'HASH' )
+ ? { map { ( ref($_) or Encode::is_utf8($_) ) ? $_ : Encode::decode( 'UTF-8' => $_, Encode::FB_PERLQQ ) }
+ %$_ }
+ : $_
+ } %$ARGS;
}
+sub PreprocessTimeUpdates {
+ my $ARGS = shift;
+
+ # Later in the code we use
+ # $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %ARGS );
+ # instead of $m->call_next to avoid problems with UTF8 keys in arguments.
+ # The call_next method pass through original arguments and if you have
+ # an argument with unicode key then in a next component you'll get two
+ # records in the args hash: one with key without UTF8 flag and another
+ # with the flag, which may result into errors. "{ base_comp => $m->request_comp }"
+ # is copied from mason's source to get the same results as we get from
+ # call_next method, this feature is not documented, so we just leave it
+ # here to avoid possible side effects.
+
+ # This code canonicalizes time inputs in hours into minutes
+ foreach my $field ( keys %$ARGS ) {
+ next unless $field =~ /^(.*)-TimeUnits$/i && $ARGS->{$1};
+ my $local = $1;
+ $ARGS->{$local} =~ s{\b (?: (\d+) \s+ )? (\d+)/(\d+) \b}
+ {($1 || 0) + $3 ? $2 / $3 : 0}xe;
+ if ( $ARGS->{$field} && $ARGS->{$field} =~ /hours/i ) {
+ $ARGS->{$local} *= 60;
+ }
+ delete $ARGS->{$field};
+ }
+
+}
+
+sub MaybeEnableSQLStatementLog {
+
+ my $log_sql_statements = RT->Config->Get('StatementLog');
+
+ if ($log_sql_statements) {
+ $RT::Handle->ClearSQLStatementLog;
+ $RT::Handle->LogSQLStatements(1);
+ }
+
+}
+
+sub LogRecordedSQLStatements {
+ my $log_sql_statements = RT->Config->Get('StatementLog');
+
+ return unless ($log_sql_statements);
+
+ my @log = $RT::Handle->SQLStatementLog;
+ $RT::Handle->ClearSQLStatementLog;
+ for my $stmt (@log) {
+ my ( $time, $sql, $bind, $duration ) = @{$stmt};
+ my @bind;
+ if ( ref $bind ) {
+ @bind = @{$bind};
+ } else {
+
+ # Older DBIx-SB
+ $duration = $bind;
+ }
+ $RT::Logger->log(
+ level => $log_sql_statements,
+ message => "SQL("
+ . sprintf( "%.6f", $duration )
+ . "s): $sql;"
+ . ( @bind ? " [ bound values: @{[map{qq|'$_'|} @bind]} ]" : "" )
+ );
+ }
+
+}
package HTML::Mason::Commands;
-use vars qw/$r $m %session/;
+use vars qw/$r $m %session/;
# {{{ loc
@@ -250,14 +742,19 @@ through
sub loc {
- if ($session{'CurrentUser'} &&
- UNIVERSAL::can($session{'CurrentUser'}, 'loc')){
- return($session{'CurrentUser'}->loc(@_));
- }
- elsif ( my $u = eval { RT::CurrentUser->new($RT::SystemUser->Id) } ) {
- return ($u->loc(@_));
- }
- else {
+ if ( $session{'CurrentUser'}
+ && UNIVERSAL::can( $session{'CurrentUser'}, 'loc' ) )
+ {
+ return ( $session{'CurrentUser'}->loc(@_) );
+ } elsif (
+ my $u = eval {
+ RT::CurrentUser->new();
+ }
+ )
+ {
+ return ( $u->loc(@_) );
+ } else {
+
# pathetic case -- SystemUser is gone.
return $_[0];
}
@@ -265,7 +762,6 @@ sub loc {
# }}}
-
# {{{ loc_fuzzy
=head2 loc_fuzzy STRING
@@ -279,40 +775,41 @@ inside the lexicon file.
=cut
sub loc_fuzzy {
- my $msg = shift;
-
- if ($session{'CurrentUser'} &&
- UNIVERSAL::can($session{'CurrentUser'}, 'loc')){
- return($session{'CurrentUser'}->loc_fuzzy($msg));
- }
- else {
- my $u = RT::CurrentUser->new($RT::SystemUser->Id);
- return ($u->loc_fuzzy($msg));
+ my $msg = shift;
+
+ if ( $session{'CurrentUser'}
+ && UNIVERSAL::can( $session{'CurrentUser'}, 'loc' ) )
+ {
+ return ( $session{'CurrentUser'}->loc_fuzzy($msg) );
+ } else {
+ my $u = RT::CurrentUser->new( $RT::SystemUser->Id );
+ return ( $u->loc_fuzzy($msg) );
}
}
# }}}
-
# {{{ sub Abort
# Error - calls Error and aborts
sub Abort {
+ my $why = shift;
+ my %args = @_;
- if ($session{'ErrorDocument'} &&
- $session{'ErrorDocumentType'}) {
- $r->content_type($session{'ErrorDocumentType'});
- $m->comp($session{'ErrorDocument'} , Why => shift);
+ if ( $session{'ErrorDocument'}
+ && $session{'ErrorDocumentType'} )
+ {
+ $r->content_type( $session{'ErrorDocumentType'} );
+ $m->comp( $session{'ErrorDocument'}, Why => $why, %args );
$m->abort;
- }
- else {
- $m->comp("/Elements/Error" , Why => shift);
+ } else {
+ $m->comp( "/Elements/Error", Why => $why, %args );
$m->abort;
}
}
# }}}
-# {{{ sub CreateTicket
+# {{{ sub CreateTicket
=head2 CreateTicket ARGS
@@ -336,17 +833,30 @@ sub CreateTicket {
Abort('You have no permission to create tickets in that queue.');
}
- my $due = new RT::Date( $session{'CurrentUser'} );
- $due->Set( Format => 'unknown', Value => $ARGS{'Due'} );
- my $starts = new RT::Date( $session{'CurrentUser'} );
- $starts->Set( Format => 'unknown', Value => $ARGS{'Starts'} );
+ my $due;
+ if ( defined $ARGS{'Due'} and $ARGS{'Due'} =~ /\S/ ) {
+ $due = new RT::Date( $session{'CurrentUser'} );
+ $due->Set( Format => 'unknown', Value => $ARGS{'Due'} );
+ }
+ my $starts;
+ if ( defined $ARGS{'Starts'} and $ARGS{'Starts'} =~ /\S/ ) {
+ $starts = new RT::Date( $session{'CurrentUser'} );
+ $starts->Set( Format => 'unknown', Value => $ARGS{'Starts'} );
+ }
+
+ my $sigless = RT::Interface::Web::StripContent(
+ Content => $ARGS{Content},
+ ContentType => $ARGS{ContentType},
+ StripSignature => 1,
+ CurrentUser => $session{'CurrentUser'},
+ );
my $MIMEObj = MakeMIMEEntity(
- Subject => $ARGS{'Subject'},
- From => $ARGS{'From'},
- Cc => $ARGS{'Cc'},
- Body => $ARGS{'Content'},
- Type => $ARGS{'ContentType'},
+ Subject => $ARGS{'Subject'},
+ From => $ARGS{'From'},
+ Cc => $ARGS{'Cc'},
+ Body => $sigless,
+ Type => $ARGS{'ContentType'},
);
if ( $ARGS{'Attachments'} ) {
@@ -354,8 +864,8 @@ sub CreateTicket {
$RT::Logger->error("Couldn't make multipart message")
if !$rv || $rv !~ /^(?:DONE|ALREADY)$/;
- foreach ( values %{$ARGS{'Attachments'}} ) {
- unless ( $_ ) {
+ foreach ( values %{ $ARGS{'Attachments'} } ) {
+ unless ($_) {
$RT::Logger->error("Couldn't add empty attachemnt");
next;
}
@@ -363,121 +873,120 @@ sub CreateTicket {
}
}
+ foreach my $argument (qw(Encrypt Sign)) {
+ $MIMEObj->head->add( "X-RT-$argument" => $ARGS{$argument} ) if defined $ARGS{$argument};
+ }
+
my %create_args = (
- Type => $ARGS{'Type'} || 'ticket',
- Queue => $ARGS{'Queue'},
- Owner => $ARGS{'Owner'},
+ Type => $ARGS{'Type'} || 'ticket',
+ Queue => $ARGS{'Queue'},
+ Owner => $ARGS{'Owner'},
+
+ # note: name change
+ Requestor => $ARGS{'Requestors'},
+ Cc => $ARGS{'Cc'},
+ AdminCc => $ARGS{'AdminCc'},
InitialPriority => $ARGS{'InitialPriority'},
FinalPriority => $ARGS{'FinalPriority'},
TimeLeft => $ARGS{'TimeLeft'},
- TimeEstimated => $ARGS{'TimeEstimated'},
+ TimeEstimated => $ARGS{'TimeEstimated'},
TimeWorked => $ARGS{'TimeWorked'},
Subject => $ARGS{'Subject'},
Status => $ARGS{'Status'},
- Due => $due->ISO,
- Starts => $starts->ISO,
+ Due => $due ? $due->ISO : undef,
+ Starts => $starts ? $starts->ISO : undef,
MIMEObj => $MIMEObj
);
my @temp_squelch;
- foreach my $type (qw(Requestors Cc AdminCc)) {
- my @tmp = map { $_->format } grep { $_->address} Mail::Address->parse( $ARGS{ $type } );
+ foreach my $type (qw(Requestor Cc AdminCc)) {
+ push @temp_squelch, map $_->address, Email::Address->parse( $create_args{$type} )
+ if grep $_ eq $type || $_ eq ( $type . 's' ), @{ $ARGS{'SkipNotification'} || [] };
+
+ }
- $create_args{ $type } = [
- grep $_, map {
- my $user = RT::User->new( $RT::SystemUser );
- $user->LoadOrCreateByEmail( $_ );
- # convert to ids to avoid work later
- $user->id;
- } @tmp
- ];
- $RT::Logger->debug(
- "$type got ".join(',',@{$create_args{ $type }}) );
+ if (@temp_squelch) {
+ require RT::Action::SendEmail;
+ RT::Action::SendEmail->SquelchMailTo( RT::Action::SendEmail->SquelchMailTo, @temp_squelch );
+ }
+ if ( $ARGS{'AttachTickets'} ) {
+ require RT::Action::SendEmail;
+ RT::Action::SendEmail->AttachTickets( RT::Action::SendEmail->AttachTickets,
+ ref $ARGS{'AttachTickets'}
+ ? @{ $ARGS{'AttachTickets'} }
+ : ( $ARGS{'AttachTickets'} ) );
}
- # XXX: workaround for name conflict :(
- $create_args{'Requestor'} = delete $create_args{'Requestors'};
- foreach my $arg (keys %ARGS) {
+ foreach my $arg ( keys %ARGS ) {
next if $arg =~ /-(?:Magic|Category)$/;
- if ($arg =~ /^Object-RT::Transaction--CustomField-/) {
+ if ( $arg =~ /^Object-RT::Transaction--CustomField-/ ) {
$create_args{$arg} = $ARGS{$arg};
}
+
# Object-RT::Ticket--CustomField-3-Values
- elsif ($arg =~ /^Object-RT::Ticket--CustomField-(\d+)(.*?)$/) {
+ elsif ( $arg =~ /^Object-RT::Ticket--CustomField-(\d+)/ ) {
my $cfid = $1;
- my $cf = RT::CustomField->new( $session{'CurrentUser'});
- $cf->Load($cfid);
- if ( $cf->Type eq 'Freeform' && ! $cf->SingleValue) {
- $ARGS{$arg} =~ s/\r\n/\n/g;
- $ARGS{$arg} = [split('\n', $ARGS{$arg})];
- }
-
- if ( $cf->Type =~ /text/i) { # Catch both Text and Wikitext
- $ARGS{$arg} =~ s/\r//g;
+ my $cf = RT::CustomField->new( $session{'CurrentUser'} );
+ $cf->Load($cfid);
+ unless ( $cf->id ) {
+ $RT::Logger->error( "Couldn't load custom field #" . $cfid );
+ next;
}
if ( $arg =~ /-Upload$/ ) {
- $create_args{"CustomField-".$cfid} = _UploadedFile($arg);
- }
- else {
- $create_args{"CustomField-".$cfid} = $ARGS{"$arg"};
+ $create_args{"CustomField-$cfid"} = _UploadedFile($arg);
+ next;
}
- }
- }
+ my $type = $cf->Type;
- # XXX TODO This code should be about six lines. and badly needs refactoring.
-
- # {{{ turn new link lists into arrays, and pass in the proper arguments
- my (@dependson, @dependedonby, @parents, @children, @refersto, @referredtoby);
-
- foreach my $luri ( split ( / /, $ARGS{"new-DependsOn"} ) ) {
- $luri =~ s/\s*$//; # Strip trailing whitespace
- push @dependson, $luri;
- }
- $create_args{'DependsOn'} = \@dependson;
-
- foreach my $luri ( split ( / /, $ARGS{"DependsOn-new"} ) ) {
- push @dependedonby, $luri;
- }
- $create_args{'DependedOnBy'} = \@dependedonby;
+ my @values = ();
+ if ( ref $ARGS{$arg} eq 'ARRAY' ) {
+ @values = @{ $ARGS{$arg} };
+ } elsif ( $type =~ /text/i ) {
+ @values = ( $ARGS{$arg} );
+ } else {
+ no warnings 'uninitialized';
+ @values = split /\r*\n/, $ARGS{$arg};
+ }
+ @values = grep length, map {
+ s/\r+\n/\n/g;
+ s/^\s+//;
+ s/\s+$//;
+ $_;
+ }
+ grep defined, @values;
- foreach my $luri ( split ( / /, $ARGS{"new-MemberOf"} ) ) {
- $luri =~ s/\s*$//; # Strip trailing whitespace
- push @parents, $luri;
+ $create_args{"CustomField-$cfid"} = \@values;
+ }
}
- $create_args{'Parents'} = \@parents;
- foreach my $luri ( split ( / /, $ARGS{"MemberOf-new"} ) ) {
- push @children, $luri;
- }
- $create_args{'Children'} = \@children;
+ # turn new link lists into arrays, and pass in the proper arguments
+ my %map = (
+ 'new-DependsOn' => 'DependsOn',
+ 'DependsOn-new' => 'DependedOnBy',
+ 'new-MemberOf' => 'Parents',
+ 'MemberOf-new' => 'Children',
+ 'new-RefersTo' => 'RefersTo',
+ 'RefersTo-new' => 'ReferredToBy',
+ );
+ foreach my $key ( keys %map ) {
+ next unless $ARGS{$key};
+ $create_args{ $map{$key} } = [ grep $_, split ' ', $ARGS{$key} ];
- foreach my $luri ( split ( / /, $ARGS{"new-RefersTo"} ) ) {
- $luri =~ s/\s*$//; # Strip trailing whitespace
- push @refersto, $luri;
}
- $create_args{'RefersTo'} = \@refersto;
- foreach my $luri ( split ( / /, $ARGS{"RefersTo-new"} ) ) {
- push @referredtoby, $luri;
- }
- $create_args{'ReferredToBy'} = \@referredtoby;
- # }}}
-
-
my ( $id, $Trans, $ErrMsg ) = $Ticket->Create(%create_args);
- unless ( $id ) {
+ unless ($id) {
Abort($ErrMsg);
}
- push ( @Actions, split("\n", $ErrMsg) );
+ push( @Actions, split( "\n", $ErrMsg ) );
unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
- Abort( "No permission to view newly created ticket #"
- . $Ticket->id . "." );
+ Abort( "No permission to view newly created ticket #" . $Ticket->id . "." );
}
return ( $Ticket, @Actions );
@@ -519,99 +1028,130 @@ sub LoadTicket {
# {{{ sub ProcessUpdateMessage
+=head2 ProcessUpdateMessage
+
+Takes paramhash with fields ARGSRef, TicketObj and SkipSignatureOnly.
+
+Don't write message if it only contains current user's signature and
+SkipSignatureOnly argument is true. Function anyway adds attachments
+and updates time worked field even if skips message. The default value
+is true.
+
+=cut
+
sub ProcessUpdateMessage {
- #TODO document what else this takes.
my %args = (
- ARGSRef => undef,
- Actions => undef,
- TicketObj => undef,
+ ARGSRef => undef,
+ TicketObj => undef,
+ SkipSignatureOnly => 1,
@_
);
- #Make the update content have no 'weird' newlines in it
- if ( $args{ARGSRef}->{'UpdateTimeWorked'}
- || $args{ARGSRef}->{'UpdateContent'}
- || $args{ARGSRef}->{'UpdateAttachments'} )
+ if ( $args{ARGSRef}->{'UpdateAttachments'}
+ && !keys %{ $args{ARGSRef}->{'UpdateAttachments'} } )
{
+ delete $args{ARGSRef}->{'UpdateAttachments'};
+ }
- if (
- $args{ARGSRef}->{'UpdateSubject'} eq $args{'TicketObj'}->Subject() )
- {
- $args{ARGSRef}->{'UpdateSubject'} = undef;
+ # Strip the signature
+ $args{ARGSRef}->{UpdateContent} = RT::Interface::Web::StripContent(
+ Content => $args{ARGSRef}->{UpdateContent},
+ ContentType => $args{ARGSRef}->{UpdateContentType},
+ StripSignature => $args{SkipSignatureOnly},
+ CurrentUser => $args{'TicketObj'}->CurrentUser,
+ );
+
+ # If, after stripping the signature, we have no message, move the
+ # UpdateTimeWorked into adjusted TimeWorked, so that a later
+ # ProcessBasics can deal -- then bail out.
+ if ( not $args{ARGSRef}->{'UpdateAttachments'}
+ and not length $args{ARGSRef}->{'UpdateContent'} )
+ {
+ if ( $args{ARGSRef}->{'UpdateTimeWorked'} ) {
+ $args{ARGSRef}->{TimeWorked} = $args{TicketObj}->TimeWorked + delete $args{ARGSRef}->{'UpdateTimeWorked'};
}
+ return;
+ }
- my $Message = MakeMIMEEntity(
- Subject => $args{ARGSRef}->{'UpdateSubject'},
- Body => $args{ARGSRef}->{'UpdateContent'},
- Type => $args{ARGSRef}->{'UpdateContentType'},
- );
+ if ( $args{ARGSRef}->{'UpdateSubject'} eq $args{'TicketObj'}->Subject ) {
+ $args{ARGSRef}->{'UpdateSubject'} = undef;
+ }
- $Message->head->add( 'Message-ID' =>
- "<rt-"
- . $RT::VERSION . "-"
- . $$ . "-"
- . CORE::time() . "-"
- . int(rand(2000)) . "."
- . $args{'TicketObj'}->id . "-"
- . "0" . "-" # Scrip
- . "0" . "@" # Email sent
- . $RT::Organization
- . ">" );
- my $old_txn = RT::Transaction->new( $session{'CurrentUser'} );
- if ( $args{ARGSRef}->{'QuoteTransaction'} ) {
- $old_txn->Load( $args{ARGSRef}->{'QuoteTransaction'} );
- }
- else {
- $old_txn = $args{TicketObj}->Transactions->First();
- }
+ my $Message = MakeMIMEEntity(
+ Subject => $args{ARGSRef}->{'UpdateSubject'},
+ Body => $args{ARGSRef}->{'UpdateContent'},
+ Type => $args{ARGSRef}->{'UpdateContentType'},
+ );
- if ( $old_txn->Message && $old_txn->Message->First ) {
- my @in_reply_to = split(/\s+/m, $old_txn->Message->First->GetHeader('In-Reply-To') || '');
- my @references = split(/\s+/m, $old_txn->Message->First->GetHeader('References') || '' );
- my @msgid = split(/\s+/m,$old_txn->Message->First->GetHeader('Message-ID') || '');
- my @rtmsgid = split(/\s+/m,$old_txn->Message->First->GetHeader('RT-Message-ID') || '');
+ $Message->head->add( 'Message-ID' => RT::Interface::Email::GenMessageId( Ticket => $args{'TicketObj'}, ) );
+ my $old_txn = RT::Transaction->new( $session{'CurrentUser'} );
+ if ( $args{ARGSRef}->{'QuoteTransaction'} ) {
+ $old_txn->Load( $args{ARGSRef}->{'QuoteTransaction'} );
+ } else {
+ $old_txn = $args{TicketObj}->Transactions->First();
+ }
- $Message->head->replace( 'In-Reply-To', join (' ', @rtmsgid ? @rtmsgid : @msgid));
- $Message->head->replace( 'References', join(' ', @references, @msgid, @rtmsgid));
- }
+ if ( my $msg = $old_txn->Message->First ) {
+ RT::Interface::Email::SetInReplyTo(
+ Message => $Message,
+ InReplyTo => $msg
+ );
+ }
if ( $args{ARGSRef}->{'UpdateAttachments'} ) {
$Message->make_multipart;
- $Message->add_part($_)
- foreach values %{ $args{ARGSRef}->{'UpdateAttachments'} };
+ $Message->add_part($_) foreach values %{ $args{ARGSRef}->{'UpdateAttachments'} };
+ }
+
+ if ( $args{ARGSRef}->{'AttachTickets'} ) {
+ require RT::Action::SendEmail;
+ RT::Action::SendEmail->AttachTickets( RT::Action::SendEmail->AttachTickets,
+ ref $args{ARGSRef}->{'AttachTickets'}
+ ? @{ $args{ARGSRef}->{'AttachTickets'} }
+ : ( $args{ARGSRef}->{'AttachTickets'} ) );
+ }
+
+ my $bcc = $args{ARGSRef}->{'UpdateBcc'};
+ my $cc = $args{ARGSRef}->{'UpdateCc'};
+
+ my %message_args = (
+ CcMessageTo => $cc,
+ BccMessageTo => $bcc,
+ Sign => $args{ARGSRef}->{'Sign'},
+ Encrypt => $args{ARGSRef}->{'Encrypt'},
+ MIMEObj => $Message,
+ TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'}
+ );
+
+ unless ( $args{'ARGSRef'}->{'UpdateIgnoreAddressCheckboxes'} ) {
+ foreach my $key ( keys %{ $args{ARGSRef} } ) {
+ next unless $key =~ /^Update(Cc|Bcc)-(.*)$/;
+
+ my $var = ucfirst($1) . 'MessageTo';
+ my $value = $2;
+ if ( $message_args{$var} ) {
+ $message_args{$var} .= ", $value";
+ } else {
+ $message_args{$var} = $value;
+ }
+ }
}
- ## TODO: Implement public comments
+ my @results;
if ( $args{ARGSRef}->{'UpdateType'} =~ /^(private|public)$/ ) {
- my ( $Transaction, $Description, $Object ) = $args{TicketObj}->Comment(
- CcMessageTo => $args{ARGSRef}->{'UpdateCc'},
- BccMessageTo => $args{ARGSRef}->{'UpdateBcc'},
- MIMEObj => $Message,
- TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'}
- );
- push( @{ $args{Actions} }, $Description );
+ my ( $Transaction, $Description, $Object ) = $args{TicketObj}->Comment(%message_args);
+ push( @results, $Description );
$Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object;
- }
- elsif ( $args{ARGSRef}->{'UpdateType'} eq 'response' ) {
- my ( $Transaction, $Description, $Object ) =
- $args{TicketObj}->Correspond(
- CcMessageTo => $args{ARGSRef}->{'UpdateCc'},
- BccMessageTo => $args{ARGSRef}->{'UpdateBcc'},
- MIMEObj => $Message,
- TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'}
- );
- push( @{ $args{Actions} }, $Description );
+ } elsif ( $args{ARGSRef}->{'UpdateType'} eq 'response' ) {
+ my ( $Transaction, $Description, $Object ) = $args{TicketObj}->Correspond(%message_args);
+ push( @results, $Description );
$Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object;
+ } else {
+ push( @results,
+ loc("Update type was neither correspondence nor comment.") . " " . loc("Update not recorded.") );
}
- else {
- push(
- @{ $args{'Actions'} },
- loc("Update type was neither correspondence nor comment.") . " "
- . loc("Update not recorded.")
- );
- }
-}
+ return @results;
}
# }}}
@@ -638,301 +1178,65 @@ sub MakeMIMEEntity {
Body => undef,
AttachmentFieldName => undef,
Type => undef,
-# map Encode::encode_utf8($_), @_,
@_,
);
+ my $Message = MIME::Entity->build(
+ Type => 'multipart/mixed',
+ Subject => $args{'Subject'} || "",
+ From => $args{'From'},
+ Cc => $args{'Cc'},
+ );
- #Make the update content have no 'weird' newlines in it
+ if ( defined $args{'Body'} && length $args{'Body'} ) {
+
+ # Make the update content have no 'weird' newlines in it
+ $args{'Body'} =~ s/\r\n/\n/gs;
- $args{'Body'} =~ s/\r\n/\n/gs if $args{'Body'};
- my $Message;
- {
# MIME::Head is not happy in utf-8 domain. This only happens
# when processing an incoming email (so far observed).
no utf8;
use bytes;
- $Message = MIME::Entity->build(
- Subject => $args{'Subject'} || "",
- From => $args{'From'},
- Cc => $args{'Cc'},
- Type => $args{'Type'} || 'text/plain',
- 'Charset:' => 'utf8',
- Data => [ $args{'Body'} ]
+ $Message->attach(
+ Type => $args{'Type'} || 'text/plain',
+ Charset => 'UTF-8',
+ Data => $args{'Body'},
);
}
- my $cgi_object = $m->cgi_object;
+ if ( $args{'AttachmentFieldName'} ) {
- if (my $filehandle = $cgi_object->upload( $args{'AttachmentFieldName'} ) ) {
+ my $cgi_object = $m->cgi_object;
+ if ( my $filehandle = $cgi_object->upload( $args{'AttachmentFieldName'} ) ) {
-
- use File::Temp qw(tempfile tempdir);
-
- #foreach my $filehandle (@filenames) {
-
- my ( $fh, $temp_file );
- for ( 1 .. 10 ) {
- # on NFS and NTFS, it is possible that tempfile() conflicts
- # with other processes, causing a race condition. we try to
- # accommodate this by pausing and retrying.
- last if ($fh, $temp_file) = eval { tempfile( UNLINK => 1) };
- sleep 1;
- }
-
- binmode $fh; #thank you, windows
- my ($buffer);
- while ( my $bytesread = read( $filehandle, $buffer, 4096 ) ) {
- print $fh $buffer;
- }
-
- my $uploadinfo = $cgi_object->uploadInfo($filehandle);
-
- # Prefer the cached name first over CGI.pm stringification.
- my $filename = $RT::Mason::CGI::Filename;
- $filename = "$filehandle" unless defined($filename);
-
- $filename =~ s#^.*[\\/]##;
-
- $Message->attach(
- Path => $temp_file,
- Filename => Encode::decode_utf8($filename),
- Type => $uploadinfo->{'Content-Type'},
- );
- close($fh);
-
- # }
-
- }
-
- $Message->make_singlepart();
- RT::I18N::SetMIMEEntityToUTF8($Message); # convert text parts into utf-8
-
- return ($Message);
-
-}
-
-# }}}
-
-# {{{ sub ProcessSearchQuery
-
-=head2 ProcessSearchQuery
-
- Takes a form such as the one filled out in webrt/Search/Elements/PickRestriction and turns it into something that RT::Tickets can understand.
-
-TODO Doc exactly what comes in the paramhash
-
-
-=cut
-
-sub ProcessSearchQuery {
- my %args = @_;
-
- ## TODO: The only parameter here is %ARGS. Maybe it would be
- ## cleaner to load this parameter as $ARGS, and use $ARGS->{...}
- ## instead of $args{ARGS}->{...} ? :)
-
- #Searches are sticky.
- if ( defined $session{'tickets'} ) {
-
- # Reset the old search
- $session{'tickets'}->GotoFirstItem;
- }
- else {
-
- # Init a new search
- $session{'tickets'} = RT::Tickets->new( $session{'CurrentUser'} );
- }
-
- #Import a bookmarked search if we have one
- if ( defined $args{ARGS}->{'Bookmark'} ) {
- $session{'tickets'}->ThawLimits( $args{ARGS}->{'Bookmark'} );
- }
-
- # {{{ Goto next/prev page
- if ( $args{ARGS}->{'GotoPage'} eq 'Next' ) {
- $session{'tickets'}->NextPage;
- }
- elsif ( $args{ARGS}->{'GotoPage'} eq 'Prev' ) {
- $session{'tickets'}->PrevPage;
- }
- elsif ( $args{ARGS}->{'GotoPage'} > 0 ) {
- $session{'tickets'}->GotoPage( $args{ARGS}->{GotoPage} - 1 );
- }
-
- # }}}
-
- # {{{ Deal with limiting the search
-
- if ( $args{ARGS}->{'RefreshSearchInterval'} ) {
- $session{'tickets_refresh_interval'} =
- $args{ARGS}->{'RefreshSearchInterval'};
- }
-
- if ( $args{ARGS}->{'TicketsSortBy'} ) {
- $session{'tickets_sort_by'} = $args{ARGS}->{'TicketsSortBy'};
- $session{'tickets_sort_order'} = $args{ARGS}->{'TicketsSortOrder'};
- $session{'tickets'}->OrderBy(
- FIELD => $args{ARGS}->{'TicketsSortBy'},
- ORDER => $args{ARGS}->{'TicketsSortOrder'}
- );
- }
-
- # }}}
-
- # {{{ Set the query limit
- if ( defined $args{ARGS}->{'RowsPerPage'} ) {
- $RT::Logger->debug(
- "limiting to " . $args{ARGS}->{'RowsPerPage'} . " rows" );
-
- $session{'tickets_rows_per_page'} = $args{ARGS}->{'RowsPerPage'};
- $session{'tickets'}->RowsPerPage( $args{ARGS}->{'RowsPerPage'} );
- }
-
- # }}}
- # {{{ Limit priority
- if ( $args{ARGS}->{'ValueOfPriority'} ne '' ) {
- $session{'tickets'}->LimitPriority(
- VALUE => $args{ARGS}->{'ValueOfPriority'},
- OPERATOR => $args{ARGS}->{'PriorityOp'}
- );
- }
-
- # }}}
- # {{{ Limit owner
- if ( $args{ARGS}->{'ValueOfOwner'} ne '' ) {
- $session{'tickets'}->LimitOwner(
- VALUE => $args{ARGS}->{'ValueOfOwner'},
- OPERATOR => $args{ARGS}->{'OwnerOp'}
- );
- }
-
- # }}}
- # {{{ Limit requestor email
- if ( $args{ARGS}->{'ValueOfWatcherRole'} ne '' ) {
- $session{'tickets'}->LimitWatcher(
- TYPE => $args{ARGS}->{'WatcherRole'},
- VALUE => $args{ARGS}->{'ValueOfWatcherRole'},
- OPERATOR => $args{ARGS}->{'WatcherRoleOp'},
-
- );
- }
-
- # }}}
- # {{{ Limit Queue
- if ( $args{ARGS}->{'ValueOfQueue'} ne '' ) {
- $session{'tickets'}->LimitQueue(
- VALUE => $args{ARGS}->{'ValueOfQueue'},
- OPERATOR => $args{ARGS}->{'QueueOp'}
- );
- }
-
- # }}}
- # {{{ Limit Status
- if ( $args{ARGS}->{'ValueOfStatus'} ne '' ) {
- if ( ref( $args{ARGS}->{'ValueOfStatus'} ) ) {
- foreach my $value ( @{ $args{ARGS}->{'ValueOfStatus'} } ) {
- $session{'tickets'}->LimitStatus(
- VALUE => $value,
- OPERATOR => $args{ARGS}->{'StatusOp'},
- );
+ my ( @content, $buffer );
+ while ( my $bytesread = read( $filehandle, $buffer, 4096 ) ) {
+ push @content, $buffer;
}
- }
- else {
- $session{'tickets'}->LimitStatus(
- VALUE => $args{ARGS}->{'ValueOfStatus'},
- OPERATOR => $args{ARGS}->{'StatusOp'},
- );
- }
- }
+ my $uploadinfo = $cgi_object->uploadInfo($filehandle);
- # }}}
- # {{{ Limit Subject
- if ( $args{ARGS}->{'ValueOfSubject'} ne '' ) {
- my $val = $args{ARGS}->{'ValueOfSubject'};
- if ($args{ARGS}->{'SubjectOp'} =~ /like/) {
- $val = "%".$val."%";
- }
- $session{'tickets'}->LimitSubject(
- VALUE => $val,
- OPERATOR => $args{ARGS}->{'SubjectOp'},
- );
- }
+ # Prefer the cached name first over CGI.pm stringification.
+ my $filename = $RT::Mason::CGI::Filename;
+ $filename = "$filehandle" unless defined($filename);
+ $filename = Encode::decode_utf8($filename);
+ $filename =~ s{^.*[\\/]}{};
- # }}}
- # {{{ Limit Dates
- if ( $args{ARGS}->{'ValueOfDate'} ne '' ) {
- my $date = ParseDateToISO( $args{ARGS}->{'ValueOfDate'} );
- $args{ARGS}->{'DateType'} =~ s/_Date$//;
-
- if ( $args{ARGS}->{'DateType'} eq 'Updated' ) {
- $session{'tickets'}->LimitTransactionDate(
- VALUE => $date,
- OPERATOR => $args{ARGS}->{'DateOp'},
+ $Message->attach(
+ Type => $uploadinfo->{'Content-Type'},
+ Filename => $filename,
+ Data => \@content,
);
- }
- else {
- $session{'tickets'}->LimitDate( FIELD => $args{ARGS}->{'DateType'},
- VALUE => $date,
- OPERATOR => $args{ARGS}->{'DateOp'},
- );
- }
- }
-
- # }}}
- # {{{ Limit Content
- if ( $args{ARGS}->{'ValueOfAttachmentField'} ne '' ) {
- my $val = $args{ARGS}->{'ValueOfAttachmentField'};
- if ($args{ARGS}->{'AttachmentFieldOp'} =~ /like/) {
- $val = "%".$val."%";
- }
- $session{'tickets'}->Limit(
- FIELD => $args{ARGS}->{'AttachmentField'},
- VALUE => $val,
- OPERATOR => $args{ARGS}->{'AttachmentFieldOp'},
- );
- }
-
- # }}}
-
- # {{{ Limit CustomFields
-
- foreach my $arg ( keys %{ $args{ARGS} } ) {
- my $id;
- if ( $arg =~ /^CustomField(\d+)$/ ) {
- $id = $1;
- }
- else {
- next;
- }
- next unless ( $args{ARGS}->{$arg} );
-
- my $form = $args{ARGS}->{$arg};
- my $oper = $args{ARGS}->{ "CustomFieldOp" . $id };
- foreach my $value ( ref($form) ? @{$form} : ($form) ) {
- my $quote = 1;
- if ($oper =~ /like/i) {
- $value = "%".$value."%";
- }
- if ( $value =~ /^null$/i ) {
-
- #Don't quote the string 'null'
- $quote = 0;
-
- # Convert the operator to something apropriate for nulls
- $oper = 'IS' if ( $oper eq '=' );
- $oper = 'IS NOT' if ( $oper eq '!=' );
+ if ( !$args{'Subject'} && !( defined $args{'Body'} && length $args{'Body'} ) ) {
+ $Message->head->set( 'Subject' => $filename );
}
- $session{'tickets'}->LimitCustomField( CUSTOMFIELD => $id,
- OPERATOR => $oper,
- QUOTEVALUE => $quote,
- VALUE => $value );
}
}
- # }}}
+ $Message->make_singlepart;
+ RT::I18N::SetMIMEEntityToUTF8($Message); # convert text parts into utf-8
+ return ($Message);
}
@@ -950,7 +1254,7 @@ Returns an ISO date and time in GMT
sub ParseDateToISO {
my $date = shift;
- my $date_obj = RT::Date->new($session{'CurrentUser'});
+ my $date_obj = RT::Date->new( $session{'CurrentUser'} );
$date_obj->Set(
Format => 'unknown',
Value => $date
@@ -965,72 +1269,51 @@ sub ParseDateToISO {
sub ProcessACLChanges {
my $ARGSref = shift;
- my %ARGS = %$ARGSref;
-
- my ( $ACL, @results );
-
+ #XXX: why don't we get ARGSref like in other Process* subs?
- foreach my $arg (keys %ARGS) {
- if ($arg =~ /GrantRight-(\d+)-(.*?)-(\d+)$/) {
- my $principal_id = $1;
- my $object_type = $2;
- my $object_id = $3;
- my $rights = $ARGS{$arg};
+ my @results;
- my $principal = RT::Principal->new($session{'CurrentUser'});
- $principal->Load($principal_id);
+ foreach my $arg ( keys %$ARGSref ) {
+ next unless ( $arg =~ /^(GrantRight|RevokeRight)-(\d+)-(.+?)-(\d+)$/ );
- my $obj;
+ my ( $method, $principal_id, $object_type, $object_id ) = ( $1, $2, $3, $4 );
- if ($object_type eq 'RT::System') {
- $obj = $RT::System;
- } elsif ($RT::ACE::OBJECT_TYPES{$object_type}) {
- $obj = $object_type->new($session{'CurrentUser'});
- $obj->Load($object_id);
- } else {
- push (@results, loc("System Error"). ': '.
- loc("Rights could not be granted for [_1]", $object_type));
- next;
- }
-
- my @rights = ref($ARGS{$arg}) eq 'ARRAY' ? @{$ARGS{$arg}} : ($ARGS{$arg});
- foreach my $right (@rights) {
- next unless ($right);
- my ($val, $msg) = $principal->GrantRight(Object => $obj, Right => $right);
- push (@results, $msg);
- }
+ my @rights;
+ if ( UNIVERSAL::isa( $ARGSref->{$arg}, 'ARRAY' ) ) {
+ @rights = @{ $ARGSref->{$arg} };
+ } else {
+ @rights = $ARGSref->{$arg};
}
- elsif ($arg =~ /RevokeRight-(\d+)-(.*?)-(\d+)-(.*?)$/) {
- my $principal_id = $1;
- my $object_type = $2;
- my $object_id = $3;
- my $right = $4;
-
- my $principal = RT::Principal->new($session{'CurrentUser'});
- $principal->Load($principal_id);
- next unless ($right);
- my $obj;
-
- if ($object_type eq 'RT::System') {
- $obj = $RT::System;
- } elsif ($RT::ACE::OBJECT_TYPES{$object_type}) {
- $obj = $object_type->new($session{'CurrentUser'});
- $obj->Load($object_id);
- } else {
- push (@results, loc("System Error"). ': '.
- loc("Rights could not be revoked for [_1]", $object_type));
+ @rights = grep $_, @rights;
+ next unless @rights;
+
+ my $principal = RT::Principal->new( $session{'CurrentUser'} );
+ $principal->Load($principal_id);
+
+ my $obj;
+ if ( $object_type eq 'RT::System' ) {
+ $obj = $RT::System;
+ } elsif ( $RT::ACE::OBJECT_TYPES{$object_type} ) {
+ $obj = $object_type->new( $session{'CurrentUser'} );
+ $obj->Load($object_id);
+ unless ( $obj->id ) {
+ $RT::Logger->error("couldn't load $object_type #$object_id");
next;
}
- my ($val, $msg) = $principal->RevokeRight(Object => $obj, Right => $right);
- push (@results, $msg);
+ } else {
+ $RT::Logger->error("object type '$object_type' is incorrect");
+ push( @results, loc("System Error") . ': ' . loc( "Rights could not be granted for [_1]", $object_type ) );
+ next;
}
-
+ foreach my $right (@rights) {
+ my ( $val, $msg ) = $principal->$method( Object => $obj, Right => $right );
+ push( @results, $msg );
+ }
}
return (@results);
-
- }
+}
# }}}
@@ -1046,18 +1329,19 @@ Returns an array of success/failure messages
sub UpdateRecordObject {
my %args = (
- ARGSRef => undef,
- AttributesRef => undef,
- Object => undef,
+ ARGSRef => undef,
+ AttributesRef => undef,
+ Object => undef,
AttributePrefix => undef,
@_
);
- my $Object = $args{'Object'};
- my @results = $Object->Update(AttributesRef => $args{'AttributesRef'},
- ARGSRef => $args{'ARGSRef'},
- AttributePrefix => $args{'AttributePrefix'}
- );
+ my $Object = $args{'Object'};
+ my @results = $Object->Update(
+ AttributesRef => $args{'AttributesRef'},
+ ARGSRef => $args{'ARGSRef'},
+ AttributePrefix => $args{'AttributePrefix'},
+ );
return (@results);
}
@@ -1076,44 +1360,40 @@ sub ProcessCustomFieldUpdates {
my $Object = $args{'CustomFieldObj'};
my $ARGSRef = $args{'ARGSRef'};
- my @attribs = qw( Name Type Description Queue SortOrder);
+ my @attribs = qw(Name Type Description Queue SortOrder);
my @results = UpdateRecordObject(
AttributesRef => \@attribs,
Object => $Object,
ARGSRef => $ARGSRef
);
- if ( $ARGSRef->{ "CustomField-" . $Object->Id . "-AddValue-Name" } ) {
-
+ my $prefix = "CustomField-" . $Object->Id;
+ if ( $ARGSRef->{"$prefix-AddValue-Name"} ) {
my ( $addval, $addmsg ) = $Object->AddValue(
- Name =>
- $ARGSRef->{ "CustomField-" . $Object->Id . "-AddValue-Name" },
- Description => $ARGSRef->{ "CustomField-"
- . $Object->Id
- . "-AddValue-Description" },
- SortOrder => $ARGSRef->{ "CustomField-"
- . $Object->Id
- . "-AddValue-SortOrder" },
+ Name => $ARGSRef->{"$prefix-AddValue-Name"},
+ Description => $ARGSRef->{"$prefix-AddValue-Description"},
+ SortOrder => $ARGSRef->{"$prefix-AddValue-SortOrder"},
);
- push ( @results, $addmsg );
+ push( @results, $addmsg );
}
- my @delete_values = (
- ref $ARGSRef->{ 'CustomField-' . $Object->Id . '-DeleteValue' } eq
- 'ARRAY' )
- ? @{ $ARGSRef->{ 'CustomField-' . $Object->Id . '-DeleteValue' } }
- : ( $ARGSRef->{ 'CustomField-' . $Object->Id . '-DeleteValue' } );
+
+ my @delete_values
+ = ( ref $ARGSRef->{"$prefix-DeleteValue"} eq 'ARRAY' )
+ ? @{ $ARGSRef->{"$prefix-DeleteValue"} }
+ : ( $ARGSRef->{"$prefix-DeleteValue"} );
+
foreach my $id (@delete_values) {
next unless defined $id;
my ( $err, $msg ) = $Object->DeleteValue($id);
- push ( @results, $msg );
+ push( @results, $msg );
}
my $vals = $Object->Values();
- while (my $cfv = $vals->Next()) {
- if (my $so = $ARGSRef->{ 'CustomField-' . $Object->Id . '-SortOrder' . $cfv->Id }) {
- if ($cfv->SortOrder != $so) {
+ while ( my $cfv = $vals->Next() ) {
+ if ( my $so = $ARGSRef->{ "$prefix-SortOrder" . $cfv->Id } ) {
+ if ( $cfv->SortOrder != $so ) {
my ( $err, $msg ) = $cfv->SetSortOrder($so);
- push ( @results, $msg );
+ push( @results, $msg );
}
}
}
@@ -1142,37 +1422,35 @@ sub ProcessTicketBasics {
my $TicketObj = $args{'TicketObj'};
my $ARGSRef = $args{'ARGSRef'};
- # {{{ Set basic fields
+ # {{{ Set basic fields
my @attribs = qw(
- Subject
- FinalPriority
- Priority
- TimeEstimated
- TimeWorked
- TimeLeft
- Type
- Status
- Queue
+ Subject
+ FinalPriority
+ Priority
+ TimeEstimated
+ TimeWorked
+ TimeLeft
+ Type
+ Status
+ Queue
);
-
if ( $ARGSRef->{'Queue'} and ( $ARGSRef->{'Queue'} !~ /^(\d+)$/ ) ) {
my $tempqueue = RT::Queue->new($RT::SystemUser);
$tempqueue->Load( $ARGSRef->{'Queue'} );
if ( $tempqueue->id ) {
- $ARGSRef->{'Queue'} = $tempqueue->Id();
+ $ARGSRef->{'Queue'} = $tempqueue->id;
}
}
+ # Status isn't a field that can be set to a null value.
+ # RT core complains if you try
+ delete $ARGSRef->{'Status'} unless $ARGSRef->{'Status'};
- # Status isn't a field that can be set to a null value.
- # RT core complains if you try
- delete $ARGSRef->{'Status'} unless ($ARGSRef->{'Status'});
-
my @results = UpdateRecordObject(
AttributesRef => \@attribs,
Object => $TicketObj,
- ARGSRef => $ARGSRef
+ ARGSRef => $ARGSRef,
);
# We special case owner changing, so we can use ForceOwnerChange
@@ -1180,14 +1458,12 @@ sub ProcessTicketBasics {
my ($ChownType);
if ( $ARGSRef->{'ForceOwnerChange'} ) {
$ChownType = "Force";
- }
- else {
+ } else {
$ChownType = "Give";
}
- my ( $val, $msg ) =
- $TicketObj->SetOwner( $ARGSRef->{'Owner'}, $ChownType );
- push ( @results, $msg );
+ my ( $val, $msg ) = $TicketObj->SetOwner( $ARGSRef->{'Owner'}, $ChownType );
+ push( @results, $msg );
}
# }}}
@@ -1205,58 +1481,59 @@ sub ProcessTicketCustomFieldUpdates {
# Build up a list of objects that we want to work with
my %custom_fields_to_mod;
foreach my $arg ( keys %$ARGSRef ) {
- if ( $arg =~ /^Ticket-(\d+-.*)/) {
+ if ( $arg =~ /^Ticket-(\d+-.*)/ ) {
$ARGSRef->{"Object-RT::Ticket-$1"} = delete $ARGSRef->{$arg};
- }
- elsif ( $arg =~ /^CustomField-(\d+-.*)/) {
+ } elsif ( $arg =~ /^CustomField-(\d+-.*)/ ) {
$ARGSRef->{"Object-RT::Ticket--$1"} = delete $ARGSRef->{$arg};
}
}
- return ProcessObjectCustomFieldUpdates(%args, ARGSRef => $ARGSRef);
+ return ProcessObjectCustomFieldUpdates( %args, ARGSRef => $ARGSRef );
}
sub ProcessObjectCustomFieldUpdates {
- my %args = @_;
+ my %args = @_;
my $ARGSRef = $args{'ARGSRef'};
my @results;
# Build up a list of objects that we want to work with
my %custom_fields_to_mod;
foreach my $arg ( keys %$ARGSRef ) {
+
# format: Object-<object class>-<object id>-CustomField-<CF id>-<commands>
next unless $arg =~ /^Object-([\w:]+)-(\d*)-CustomField-(\d+)-(.*)$/;
# For each of those objects, find out what custom fields we want to work with.
- $custom_fields_to_mod{ $1 }{ $2 || 0 }{ $3 }{ $4 } = $ARGSRef->{ $arg };
+ $custom_fields_to_mod{$1}{ $2 || 0 }{$3}{$4} = $ARGSRef->{$arg};
}
# For each of those objects
foreach my $class ( keys %custom_fields_to_mod ) {
- foreach my $id ( keys %{$custom_fields_to_mod{$class}} ) {
+ foreach my $id ( keys %{ $custom_fields_to_mod{$class} } ) {
my $Object = $args{'Object'};
$Object = $class->new( $session{'CurrentUser'} )
unless $Object && ref $Object eq $class;
- $Object->Load( $id ) unless ($Object->id || 0) == $id;
+ $Object->Load($id) unless ( $Object->id || 0 ) == $id;
unless ( $Object->id ) {
$RT::Logger->warning("Couldn't load object $class #$id");
next;
}
- foreach my $cf ( keys %{ $custom_fields_to_mod{ $class }{ $id } } ) {
+ foreach my $cf ( keys %{ $custom_fields_to_mod{$class}{$id} } ) {
my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} );
- $CustomFieldObj->LoadById( $cf );
+ $CustomFieldObj->LoadById($cf);
unless ( $CustomFieldObj->id ) {
- $RT::Logger->warning("Couldn't load custom field #$id");
+ $RT::Logger->warning("Couldn't load custom field #$cf");
next;
}
- push @results, _ProcessObjectCustomFieldUpdates(
+ push @results,
+ _ProcessObjectCustomFieldUpdates(
Prefix => "Object-$class-$id-CustomField-$cf-",
Object => $Object,
CustomField => $CustomFieldObj,
ARGS => $custom_fields_to_mod{$class}{$id}{$cf},
- );
+ );
}
}
}
@@ -1264,20 +1541,32 @@ sub ProcessObjectCustomFieldUpdates {
}
sub _ProcessObjectCustomFieldUpdates {
- my %args = @_;
- my $cf = $args{'CustomField'};
+ my %args = @_;
+ my $cf = $args{'CustomField'};
my $cf_type = $cf->Type;
+ # Remove blank Values since the magic field will take care of this. Sometimes
+ # the browser gives you a blank value which causes CFs to be processed twice
+ if ( defined $args{'ARGS'}->{'Values'}
+ && !length $args{'ARGS'}->{'Values'}
+ && $args{'ARGS'}->{'Values-Magic'} )
+ {
+ delete $args{'ARGS'}->{'Values'};
+ }
+
my @results;
foreach my $arg ( keys %{ $args{'ARGS'} } ) {
-
- next if $arg =~ /Category$/;
+
+ # skip category argument
+ next if $arg eq 'Category';
# since http won't pass in a form element with a null value, we need
# to fake it
if ( $arg eq 'Values-Magic' ) {
+
# We don't care about the magic, if there's really a values element;
- next if $args{'ARGS'}->{'Value'} || $args{'ARGS'}->{'Values'};
+ next if defined $args{'ARGS'}->{'Value'} && length $args{'ARGS'}->{'Value'};
+ next if defined $args{'ARGS'}->{'Values'} && length $args{'ARGS'}->{'Values'};
# "Empty" values does not mean anything for Image and Binary fields
next if $cf_type =~ /^(?:Image|Binary)$/;
@@ -1287,18 +1576,21 @@ sub _ProcessObjectCustomFieldUpdates {
}
my @values = ();
- if ( ref $args{'ARGS'}->{ $arg } eq 'ARRAY' ) {
+ if ( ref $args{'ARGS'}->{$arg} eq 'ARRAY' ) {
@values = @{ $args{'ARGS'}->{$arg} };
- } elsif ( $cf_type =~ /text/i ) { # Both Text and Wikitext
- @values = ($args{'ARGS'}->{$arg});
- } elsif ( defined( $args{'ARGS'}->{ $arg } ) ) {
- @values = split /\n/, $args{'ARGS'}->{ $arg };
- }
-
- if ( ( $cf_type eq 'Freeform' && !$cf->SingleValue ) || $cf_type =~ /text/i ) {
- s/\r//g foreach @values;
+ } elsif ( $cf_type =~ /text/i ) { # Both Text and Wikitext
+ @values = ( $args{'ARGS'}->{$arg} );
+ } else {
+ @values = split /\r*\n/, $args{'ARGS'}->{$arg}
+ if defined $args{'ARGS'}->{$arg};
}
- @values = grep defined && $_ ne '', @values;
+ @values = grep length, map {
+ s/\r+\n/\n/g;
+ s/^\s+//;
+ s/\s+$//;
+ $_;
+ }
+ grep defined, @values;
if ( $arg eq 'AddValue' || $arg eq 'Value' ) {
foreach my $value (@values) {
@@ -1306,69 +1598,63 @@ sub _ProcessObjectCustomFieldUpdates {
Field => $cf->id,
Value => $value
);
- push ( @results, $msg );
+ push( @results, $msg );
}
- }
- elsif ( $arg eq 'Upload' ) {
+ } elsif ( $arg eq 'Upload' ) {
my $value_hash = _UploadedFile( $args{'Prefix'} . $arg ) or next;
- my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue(
- %$value_hash,
- Field => $cf,
- );
- push ( @results, $msg );
- }
- elsif ( $arg eq 'DeleteValues' ) {
- foreach my $value ( @values ) {
+ my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue( %$value_hash, Field => $cf, );
+ push( @results, $msg );
+ } elsif ( $arg eq 'DeleteValues' ) {
+ foreach my $value (@values) {
my ( $val, $msg ) = $args{'Object'}->DeleteCustomFieldValue(
Field => $cf,
Value => $value,
);
- push ( @results, $msg );
+ push( @results, $msg );
}
- }
- elsif ( $arg eq 'DeleteValueIds' ) {
- foreach my $value ( @values ) {
+ } elsif ( $arg eq 'DeleteValueIds' ) {
+ foreach my $value (@values) {
my ( $val, $msg ) = $args{'Object'}->DeleteCustomFieldValue(
Field => $cf,
ValueId => $value,
);
- push ( @results, $msg );
+ push( @results, $msg );
}
- }
- elsif ( $arg eq 'Values' && !$cf->Repeated ) {
+ } elsif ( $arg eq 'Values' && !$cf->Repeated ) {
my $cf_values = $args{'Object'}->CustomFieldValues( $cf->id );
my %values_hash;
- foreach my $value ( @values ) {
- # build up a hash of values that the new set has
- $values_hash{$value} = 1;
- next if $cf_values->HasEntry( $value );
+ foreach my $value (@values) {
+ if ( my $entry = $cf_values->HasEntry($value) ) {
+ $values_hash{ $entry->id } = 1;
+ next;
+ }
my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue(
Field => $cf,
Value => $value
);
- push ( @results, $msg );
+ push( @results, $msg );
+ $values_hash{$val} = 1 if $val;
}
$cf_values->RedoSearch;
while ( my $cf_value = $cf_values->Next ) {
- next if $values_hash{ $cf_value->Content };
+ next if $values_hash{ $cf_value->id };
my ( $val, $msg ) = $args{'Object'}->DeleteCustomFieldValue(
- Field => $cf,
- Value => $cf_value->Content
+ Field => $cf,
+ ValueId => $cf_value->id
);
- push ( @results, $msg);
+ push( @results, $msg );
}
- }
- elsif ( $arg eq 'Values' ) {
+ } elsif ( $arg eq 'Values' ) {
my $cf_values = $args{'Object'}->CustomFieldValues( $cf->id );
# keep everything up to the point of difference, delete the rest
my $delete_flag;
- foreach my $old_cf (@{$cf_values->ItemsArrayRef}) {
- if (!$delete_flag and @values and $old_cf->Content eq $values[0]) {
+ foreach my $old_cf ( @{ $cf_values->ItemsArrayRef } ) {
+ if ( !$delete_flag and @values and $old_cf->Content eq $values[0] ) {
shift @values;
next;
}
@@ -1378,18 +1664,20 @@ sub _ProcessObjectCustomFieldUpdates {
}
# now add/replace extra things, if any
- foreach my $value ( @values ) {
+ foreach my $value (@values) {
my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue(
Field => $cf,
Value => $value
);
- push ( @results, $msg );
+ push( @results, $msg );
}
- }
- else {
- push ( @results,
+ } else {
+ push(
+ @results,
loc("User asked for an unknown update type for custom field [_1] for [_2] object #[_3]",
- $cf->Name, ref $args{'Object'}, $args{'Object'}->id )
+ $cf->Name, ref $args{'Object'},
+ $args{'Object'}->id
+ )
);
}
}
@@ -1420,8 +1708,7 @@ sub ProcessTicketWatchers {
foreach my $key ( keys %$ARGSRef ) {
# Delete deletable watchers
- if ( ( $key =~ /^Ticket-DeleteWatcher-Type-(.*)-Principal-(\d+)$/ ) )
- {
+ if ( $key =~ /^Ticket-DeleteWatcher-Type-(.*)-Principal-(\d+)$/ ) {
my ( $code, $msg ) = $Ticket->DeleteWatcher(
PrincipalId => $2,
Type => $1
@@ -1439,8 +1726,8 @@ sub ProcessTicketWatchers {
}
# Add new wathchers by email address
- elsif ( ( $ARGSRef->{$key} =~ /^(AdminCc|Cc|Requestor)$/ )
- and ( $key =~ /^WatcherTypeEmail(\d*)$/ ) )
+ elsif ( ( $ARGSRef->{$key} || '' ) =~ /^(?:AdminCc|Cc|Requestor)$/
+ and $key =~ /^WatcherTypeEmail(\d*)$/ )
{
#They're in this order because otherwise $1 gets clobbered :/
@@ -1463,7 +1750,7 @@ sub ProcessTicketWatchers {
# Add new watchers by owner
elsif ( $key =~ /^Ticket-AddWatcher-Principal-(\d*)$/ ) {
my $principal_id = $1;
- my $form = $ARGSRef->{$key};
+ my $form = $ARGSRef->{$key};
foreach my $value ( ref($form) ? @{$form} : ($form) ) {
next unless $value =~ /^(?:AdminCc|Cc|Requestor)$/i;
@@ -1503,33 +1790,33 @@ sub ProcessTicketDates {
# {{{ Set date fields
my @date_fields = qw(
- Told
- Resolved
- Starts
- Started
- Due
+ Told
+ Resolved
+ Starts
+ Started
+ Due
);
#Run through each field in this list. update the value if apropriate
foreach my $field (@date_fields) {
+ next unless exists $ARGSRef->{ $field . '_Date' };
+ next if $ARGSRef->{ $field . '_Date' } eq '';
+
my ( $code, $msg );
my $DateObj = RT::Date->new( $session{'CurrentUser'} );
+ $DateObj->Set(
+ Format => 'unknown',
+ Value => $ARGSRef->{ $field . '_Date' }
+ );
- #If it's something other than just whitespace
- if ( $ARGSRef->{ $field . '_Date' } && ($ARGSRef->{ $field . '_Date' } ne '') ) {
- $DateObj->Set(
- Format => 'unknown',
- Value => $ARGSRef->{ $field . '_Date' }
- );
- my $obj = $field . "Obj";
- if ( ( defined $DateObj->Unix )
- and ( $DateObj->Unix ne $Ticket->$obj()->Unix() ) )
- {
- my $method = "Set$field";
- my ( $code, $msg ) = $Ticket->$method( $DateObj->ISO );
- push @results, "$msg";
- }
+ my $obj = $field . "Obj";
+ if ( ( defined $DateObj->Unix )
+ and ( $DateObj->Unix != $Ticket->$obj()->Unix() ) )
+ {
+ my $method = "Set$field";
+ my ( $code, $msg ) = $Ticket->$method( $DateObj->ISO );
+ push @results, "$msg";
}
}
@@ -1548,21 +1835,21 @@ Returns an array of results messages.
=cut
sub ProcessTicketLinks {
- my %args = ( TicketObj => undef,
- ARGSRef => undef,
- @_ );
+ my %args = (
+ TicketObj => undef,
+ ARGSRef => undef,
+ @_
+ );
my $Ticket = $args{'TicketObj'};
my $ARGSRef = $args{'ARGSRef'};
-
- my (@results) = ProcessRecordLinks(RecordObj => $Ticket,
- ARGSRef => $ARGSRef);
+ my (@results) = ProcessRecordLinks( RecordObj => $Ticket, ARGSRef => $ARGSRef );
#Merge if we need to
if ( $ARGSRef->{ $Ticket->Id . "-MergeInto" } ) {
- my ( $val, $msg ) =
- $Ticket->MergeInto( $ARGSRef->{ $Ticket->Id . "-MergeInto" } );
+ $ARGSRef->{ $Ticket->Id . "-MergeInto" } =~ s/\s+//g;
+ my ( $val, $msg ) = $Ticket->MergeInto( $ARGSRef->{ $Ticket->Id . "-MergeInto" } );
push @results, $msg;
}
@@ -1572,9 +1859,11 @@ sub ProcessTicketLinks {
# }}}
sub ProcessRecordLinks {
- my %args = ( RecordObj => undef,
- ARGSRef => undef,
- @_ );
+ my %args = (
+ RecordObj => undef,
+ ARGSRef => undef,
+ @_
+ );
my $Record = $args{'RecordObj'};
my $ARGSRef = $args{'ARGSRef'};
@@ -1588,11 +1877,11 @@ sub ProcessRecordLinks {
my $type = $2;
my $target = $3;
- push @results,
- "Trying to delete: Base: $base Target: $target Type $type";
- my ( $val, $msg ) = $Record->DeleteLink( Base => $base,
- Type => $type,
- Target => $target );
+ my ( $val, $msg ) = $Record->DeleteLink(
+ Base => $base,
+ Type => $type,
+ Target => $target
+ );
push @results, $msg;
@@ -1604,28 +1893,38 @@ sub ProcessRecordLinks {
foreach my $linktype (@linktypes) {
if ( $ARGSRef->{ $Record->Id . "-$linktype" } ) {
- for my $luri ( split ( / /, $ARGSRef->{ $Record->Id . "-$linktype" } ) ) {
- $luri =~ s/\s*$//; # Strip trailing whitespace
- my ( $val, $msg ) = $Record->AddLink( Target => $luri,
- Type => $linktype );
+ $ARGSRef->{ $Record->Id . "-$linktype" } = join( ' ', @{ $ARGSRef->{ $Record->Id . "-$linktype" } } )
+ if ref( $ARGSRef->{ $Record->Id . "-$linktype" } );
+
+ for my $luri ( split( / /, $ARGSRef->{ $Record->Id . "-$linktype" } ) ) {
+ next unless $luri;
+ $luri =~ s/\s+$//; # Strip trailing whitespace
+ my ( $val, $msg ) = $Record->AddLink(
+ Target => $luri,
+ Type => $linktype
+ );
push @results, $msg;
}
}
if ( $ARGSRef->{ "$linktype-" . $Record->Id } ) {
-
- for my $luri ( split ( / /, $ARGSRef->{ "$linktype-" . $Record->Id } ) ) {
- my ( $val, $msg ) = $Record->AddLink( Base => $luri,
- Type => $linktype );
+ $ARGSRef->{ "$linktype-" . $Record->Id } = join( ' ', @{ $ARGSRef->{ "$linktype-" . $Record->Id } } )
+ if ref( $ARGSRef->{ "$linktype-" . $Record->Id } );
+
+ for my $luri ( split( / /, $ARGSRef->{ "$linktype-" . $Record->Id } ) ) {
+ next unless $luri;
+ my ( $val, $msg ) = $Record->AddLink(
+ Base => $luri,
+ Type => $linktype
+ );
push @results, $msg;
}
- }
+ }
}
return (@results);
}
-
=head2 _UploadedFile ( $arg );
Takes a CGI parameter name; if a file is uploaded under that name,
@@ -1637,9 +1936,9 @@ Returns C<undef> if no files were uploaded in the C<$arg> field.
=cut
sub _UploadedFile {
- my $arg = shift;
- my $cgi_object = $m->cgi_object;
- my $fh = $cgi_object->upload($arg) or return undef;
+ my $arg = shift;
+ my $cgi_object = $m->cgi_object;
+ my $fh = $cgi_object->upload($arg) or return undef;
my $upload_info = $cgi_object->uploadInfo($fh);
my $filename = "$fh";
@@ -1647,12 +1946,50 @@ sub _UploadedFile {
binmode($fh);
return {
- Value => $filename,
+ Value => $filename,
LargeContent => do { local $/; scalar <$fh> },
- ContentType => $upload_info->{'Content-Type'},
+ ContentType => $upload_info->{'Content-Type'},
};
}
+sub GetColumnMapEntry {
+ my %args = ( Map => {}, Name => '', Attribute => undef, @_ );
+
+ # deal with the simplest thing first
+ if ( $args{'Map'}{ $args{'Name'} } ) {
+ return $args{'Map'}{ $args{'Name'} }{ $args{'Attribute'} };
+ }
+
+ # complex things
+ elsif ( my ( $mainkey, $subkey ) = $args{'Name'} =~ /^(.*?)\.{(.+)}$/ ) {
+ return undef unless $args{'Map'}->{$mainkey};
+ return $args{'Map'}{$mainkey}{ $args{'Attribute'} }
+ unless ref $args{'Map'}{$mainkey}{ $args{'Attribute'} } eq 'CODE';
+
+ return sub { $args{'Map'}{$mainkey}{ $args{'Attribute'} }->( @_, $subkey ) };
+ }
+ return undef;
+}
+
+sub ProcessColumnMapValue {
+ my $value = shift;
+ my %args = ( Arguments => [], Escape => 1, @_ );
+
+ if ( ref $value ) {
+ if ( UNIVERSAL::isa( $value, 'CODE' ) ) {
+ my @tmp = $value->( @{ $args{'Arguments'} } );
+ return ProcessColumnMapValue( ( @tmp > 1 ? \@tmp : $tmp[0] ), %args );
+ } elsif ( UNIVERSAL::isa( $value, 'ARRAY' ) ) {
+ return join '', map ProcessColumnMapValue( $_, %args ), @$value;
+ } elsif ( UNIVERSAL::isa( $value, 'SCALAR' ) ) {
+ return $$value;
+ }
+ }
+
+ return $m->interp->apply_escapes( $value, 'h' ) if $args{'Escape'};
+ return $value;
+}
+
=head2 _load_container_object ( $type, $id );
Instantiate container object for saving searches.
@@ -1660,8 +1997,8 @@ Instantiate container object for saving searches.
=cut
sub _load_container_object {
- my ($obj_type, $obj_id) = @_;
- return RT::SavedSearch->new($session{'CurrentUser'})->_load_privacy_object($obj_type, $obj_id);
+ my ( $obj_type, $obj_id ) = @_;
+ return RT::SavedSearch->new( $session{'CurrentUser'} )->_load_privacy_object( $obj_type, $obj_id );
}
=head2 _parse_saved_search ( $arg );
@@ -1674,19 +2011,19 @@ container object and the search id.
sub _parse_saved_search {
my $spec = shift;
return unless $spec;
- if ($spec !~ /^(.*?)-(\d+)-SavedSearch-(\d+)$/ ) {
+ if ( $spec !~ /^(.*?)-(\d+)-SavedSearch-(\d+)$/ ) {
return;
}
my $obj_type = $1;
my $obj_id = $2;
my $search_id = $3;
- return (_load_container_object ($obj_type, $obj_id), $search_id);
+ return ( _load_container_object( $obj_type, $obj_id ), $search_id );
}
eval "require RT::Interface::Web_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web_Vendor.pm});
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Interface/Web_Vendor.pm} );
eval "require RT::Interface::Web_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web_Local.pm});
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Interface/Web_Local.pm} );
1;
diff --git a/rt/lib/RT/Interface/Web/Handler.pm b/rt/lib/RT/Interface/Web/Handler.pm
index 260a3b3..8d17921 100644
--- a/rt/lib/RT/Interface/Web/Handler.pm
+++ b/rt/lib/RT/Interface/Web/Handler.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Web::Handler;
use CGI qw/-private_tempfiles/;
@@ -56,6 +57,7 @@ use Time::HiRes;
use HTML::Entities;
use HTML::Scrubber;
use RT::Interface::Web::Handler;
+use RT::Interface::Web::Request;
use File::Path qw( rmtree );
use File::Glob qw( bsd_glob );
use File::Spec::Unix;
@@ -63,15 +65,19 @@ use File::Spec::Unix;
sub DefaultHandlerArgs { (
comp_root => [
[ local => $RT::MasonLocalComponentRoot ],
+ (map {[ "plugin-".$_->Name => $_->ComponentRoot ]} @{RT->Plugins}),
[ standard => $RT::MasonComponentRoot ]
],
default_escape_flags => 'h',
data_dir => "$RT::MasonDataDir",
allow_globals => [qw(%session)],
# Turn off static source if we're in developer mode.
- static_source => ($RT::DevelMode ? '0' : '1'),
- use_object_files => ($RT::DevelMode ? '0' : '1'),
- autoflush => 0
+ static_source => (RT->Config->Get('DevelMode') ? '0' : '1'),
+ use_object_files => (RT->Config->Get('DevelMode') ? '0' : '1'),
+ autoflush => 0,
+ error_format => (RT->Config->Get('DevelMode') ? 'html': 'brief'),
+ request_class => 'RT::Interface::Web::Request',
+ named_component_subs => $INC{'Devel/Cover.pm'} ? 1 : 0,
) };
# {{{ sub new
@@ -87,10 +93,7 @@ sub new {
my $class = shift;
$class->InitSessionDir;
- if ( $mod_perl::VERSION && $mod_perl::VERSION >= 1.9908 ) {
- goto &NewApacheHandler;
- }
- elsif ($CGI::MOD_PERL) {
+ if ( ($mod_perl::VERSION && $mod_perl::VERSION >= 1.9908) || $CGI::MOD_PERL) {
goto &NewApacheHandler;
}
else {
@@ -102,16 +105,17 @@ sub InitSessionDir {
# Activate the following if running httpd as root (the normal case).
# Resets ownership of all files created by Mason at startup.
# Note that mysql uses DB for sessions, so there's no need to do this.
- unless ( $RT::DatabaseType =~ /(?:mysql|Pg)/ ) {
+ unless ( RT->Config->Get('DatabaseType') =~ /(?:mysql|Pg)/ ) {
# Clean up our umask to protect session files
umask(0077);
- if ($CGI::MOD_PERL) { local $@; eval {
+ if ($CGI::MOD_PERL and $CGI::MOD_PERL < 1.9908 ) {
chown( Apache->server->uid, Apache->server->gid,
$RT::MasonSessionDir )
- }}
+ if Apache->server->can('uid');
+ }
# Die if WebSessionDir doesn't exist or we can't write to it
stat($RT::MasonSessionDir);
@@ -139,22 +143,6 @@ sub NewApacheHandler {
# }}}
-# {{{ sub NewApache2Handler
-
-=head2 NewApache2Handler
-
- Takes extra options to pass to MasonX::Apache2Handler->new
- Returns a new MasonX::Apache2Handler object
-
-=cut
-
-sub NewApache2Handler {
- require MasonX::Apache2Handler;
- return NewHandler('MasonX::Apache2Handler', args_method => "CGI", @_);
-}
-
-# }}}
-
# {{{ sub NewCGIHandler
=head2 NewCGIHandler
@@ -182,15 +170,30 @@ sub NewHandler {
=head2 CleanupRequest
-Rollback any uncommitted transaction.
-Flush the ACL cache
-Flush the searchbuilder query cache
+Clean ups globals, caches and other things that could be still
+there from previous requests:
+
+=over 4
+
+=item Rollback any uncommitted transaction(s)
+
+=item Flush the ACL cache
+
+=item Flush records cache of the L<DBIx::SearchBuilder> if
+WebFlushDbCacheEveryRequest option is enabled, what is true by default
+and is not recommended to change.
+
+=item Clean up state of RT::Action::SendEmail using 'CleanSlate' method
+
+=item Flush tmp GnuPG key preferences
+
+=back
=cut
sub CleanupRequest {
- if ( $RT::Handle->TransactionDepth ) {
+ if ( $RT::Handle && $RT::Handle->TransactionDepth ) {
$RT::Handle->ForceRollback;
$RT::Logger->crit(
"Transaction not committed. Usually indicates a software fault."
@@ -201,10 +204,19 @@ sub CleanupRequest {
# Consistency is imprived, too.
RT::Principal->InvalidateACLCache();
DBIx::SearchBuilder::Record::Cachable->FlushCache
- if ( $RT::WebFlushDbCacheEveryRequest
+ if ( RT->Config->Get('WebFlushDbCacheEveryRequest')
and UNIVERSAL::can(
'DBIx::SearchBuilder::Record::Cachable' => 'FlushCache' ) );
+ # cleanup global squelching of the mails
+ require RT::Action::SendEmail;
+ RT::Action::SendEmail->CleanSlate;
+
+ if (RT->Config->Get('GnuPG')->{'Enable'}) {
+ require RT::Crypt::GnuPG;
+ RT::Crypt::GnuPG::UseKeyForEncryption();
+ RT::Crypt::GnuPG::UseKeyForSigning( undef );
+ }
}
# }}}
diff --git a/rt/lib/RT/Interface/Web/Menu.pm b/rt/lib/RT/Interface/Web/Menu.pm
index de479da..3569942 100644
--- a/rt/lib/RT/Interface/Web/Menu.pm
+++ b/rt/lib/RT/Interface/Web/Menu.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Web::Menu;
diff --git a/rt/lib/RT/Interface/Web/Menu/Item.pm b/rt/lib/RT/Interface/Web/Menu/Item.pm
index 4149a0b..8eb4120 100644
--- a/rt/lib/RT/Interface/Web/Menu/Item.pm
+++ b/rt/lib/RT/Interface/Web/Menu/Item.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Web::Menu::Item;
diff --git a/rt/lib/RT/Interface/Web/QueryBuilder.pm b/rt/lib/RT/Interface/Web/QueryBuilder.pm
index f93c415..29d12b4 100755
--- a/rt/lib/RT/Interface/Web/QueryBuilder.pm
+++ b/rt/lib/RT/Interface/Web/QueryBuilder.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Web::QueryBuilder;
use strict;
diff --git a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm
index b605206..574ead4 100755
--- a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm
+++ b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,11 +45,13 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Interface::Web::QueryBuilder::Tree;
use strict;
use warnings;
+use Tree::Simple qw/use_weak_refs/;
use base qw/Tree::Simple/;
=head1 NAME
@@ -77,13 +79,15 @@ on the root node passed to it.)
sub TraversePrePost {
my ($self, $prefunc, $postfunc) = @_;
- $prefunc->($self);
-
+ # XXX: if pre or post action changes siblings (delete or adds)
+ # we could have problems
+ $prefunc->($self) if $prefunc;
+
foreach my $child ($self->getAllChildren()) {
$child->TraversePrePost($prefunc, $postfunc);
}
- $postfunc->($self);
+ $postfunc->($self) if $postfunc;
}
=head2 GetReferencedQueues
@@ -103,10 +107,11 @@ sub GetReferencedQueues {
my $node = shift;
return if $node->isRoot;
+ return unless $node->isLeaf;
my $clause = $node->getNodeValue();
-
- if ( ref($clause) and $clause->{Key} eq 'Queue' ) {
+
+ if ( $clause->{Key} eq 'Queue' ) {
$queues->{ $clause->{Value} } = 1;
};
}
@@ -133,55 +138,13 @@ sub GetQueryAndOptionList {
my $self = shift;
my $selected_nodes = shift;
- my $optionlist = [];
-
- my $i = 0;
-
- $self->TraversePrePost(
- sub { # This is called before recursing to the node's children.
- my $node = shift;
-
- return if $node->isRoot or $node->getParent->isRoot;
-
- my $clause = $node->getNodeValue();
- my $str = ' ';
- my $aggregator_context = $node->getParent()->getNodeValue();
- $str = $aggregator_context . " " if $node->getIndex() > 0;
-
- if ( ref($clause) ) { # ie, it's a leaf
- $str .=
- $clause->{Key} . " " . $clause->{Op} . " " . $clause->{Value};
- }
-
- unless ($node->getParent->getParent->isRoot) {
- # used to check !ref( $parent->getNodeValue() ) )
- if ( $node->getIndex() == 0 ) {
- $str = '( ' . $str;
- }
- }
-
- push @$optionlist, {
- TEXT => $str,
- INDEX => $i,
- SELECTED => (grep { $_ == $node } @$selected_nodes) ? 'SELECTED' : '',
- DEPTH => $node->getDepth() - 1,
- };
+ my $list = $self->__LinearizeTree;
+ foreach my $e( @$list ) {
+ $e->{'DEPTH'} = $e->{'NODE'}->getDepth;
+ $e->{'SELECTED'} = (grep $_ == $e->{'NODE'}, @$selected_nodes)? qq[ selected="selected"] : '';
+ }
- $i++;
- }, sub {
- # This is called after recursing to the node's children.
- my $node = shift;
-
- return if $node->isRoot or $node->getParent->isRoot or $node->getParent->getParent->isRoot;
-
- # Only do this for the rightmost child.
- return unless $node->getIndex == $node->getParent->getChildCount - 1;
-
- $optionlist->[-1]{TEXT} .= ' )';
- }
- );
-
- return (join ' ', map { $_->{TEXT} } @$optionlist), $optionlist;
+ return (join ' ', map $_->{'TEXT'}, @$list), $list;
}
=head2 PruneChildLessAggregators
@@ -195,23 +158,18 @@ sub PruneChildlessAggregators {
my $self = shift;
$self->TraversePrePost(
- sub {
- },
+ undef,
sub {
my $node = shift;
+ return unless $node->isLeaf;
- return if $node->isRoot or $node->getParent->isRoot;
-
# We're only looking for aggregators (AND/OR)
return if ref $node->getNodeValue;
-
- return if $node->getChildCount != 0;
-
+
+ return if $node->isRoot;
+
# OK, this is a childless aggregator. Remove self.
-
$node->getParent->removeChild($node);
-
- # Deal with circular refs
$node->DESTROY;
}
);
@@ -226,18 +184,102 @@ In fact, it's all of them but the root and its child.
=cut
sub GetDisplayedNodes {
+ return map $_->{NODE}, @{ (shift)->__LinearizeTree };
+}
+
+
+sub __LinearizeTree {
my $self = shift;
- my @lines;
- $self->traverse(sub {
+ my ($list, $i) = ([], 0);
+
+ $self->TraversePrePost( sub {
my $node = shift;
+ return if $node->isRoot;
+
+ my $str = '';
+ if( $node->getIndex > 0 ) {
+ $str .= " ". $node->getParent->getNodeValue ." ";
+ }
+
+ unless( $node->isLeaf ) {
+ $str .= '( ';
+ } else {
+
+ my $clause = $node->getNodeValue;
+ $str .= $clause->{Key};
+ $str .= " ". $clause->{Op};
+ $str .= " ". $clause->{Value};
- push @lines, $node unless $node->isRoot or $node->getParent->isRoot;
+ }
+ $str =~ s/^\s+|\s+$//;
+
+ push @$list, {
+ NODE => $node,
+ TEXT => $str,
+ INDEX => $i,
+ };
+
+ $i++;
+ }, sub {
+ my $node = shift;
+ return if $node->isRoot;
+ return if $node->isLeaf;
+ $list->[-1]->{'TEXT'} .= ' )';
});
- return @lines;
+ return $list;
}
+sub ParseSQL {
+ my $self = shift;
+ my %args = (
+ Query => '',
+ CurrentUser => '', #XXX: Hack
+ @_
+ );
+ my $string = $args{'Query'};
+
+ my @results;
+
+ my %field = %{ RT::Tickets->new( $args{'CurrentUser'} )->FIELDS };
+ my %lcfield = map { ( lc($_) => $_ ) } keys %field;
+
+ my $node = $self;
+
+ my %callback;
+ $callback{'OpenParen'} = sub {
+ $node = __PACKAGE__->new( 'AND', $node );
+ };
+ $callback{'CloseParen'} = sub { $node = $node->getParent };
+ $callback{'EntryAggregator'} = sub { $node->setNodeValue( $_[0] ) };
+ $callback{'Condition'} = sub {
+ my ($key, $op, $value) = @_;
+
+ my ($main_key) = split /[.]/, $key;
+
+ my $class;
+ if ( exists $lcfield{ lc $main_key } ) {
+ $class = $field{ $main_key }->[0];
+ $key =~ s/^[^.]+/ $lcfield{ lc $main_key } /e;
+ }
+ unless( $class ) {
+ push @results, [ $args{'CurrentUser'}->loc("Unknown field: [_1]", $key), -1 ]
+ }
+
+ $value =~ s/'/\\'/g;
+ $value = "'$value'" if $value =~ /[^0-9]/;
+ $key = "'$key'" if $key =~ /^CF./;
+
+ my $clause = { Key => $key, Op => $op, Value => $value };
+ $node->addChild( __PACKAGE__->new( $clause ) );
+ };
+ $callback{'Error'} = sub { push @results, @_ };
+
+ require RT::SQL;
+ RT::SQL::Parse($string, \%callback);
+ return @results;
+}
eval "require RT::Interface::Web::QueryBuilder::Tree_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Vendor.pm});
diff --git a/rt/lib/RT/Interface/Web/Request.pm b/rt/lib/RT/Interface/Web/Request.pm
new file mode 100644
index 0000000..e179464
--- /dev/null
+++ b/rt/lib/RT/Interface/Web/Request.pm
@@ -0,0 +1,207 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Interface::Web::Request;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.30';
+use base qw(HTML::Mason::Request);
+
+sub new {
+ my $class = shift;
+
+ my $new_class = $HTML::Mason::ApacheHandler::VERSION ?
+ 'HTML::Mason::Request::ApacheHandler' :
+ $HTML::Mason::CGIHandler::VERSION ?
+ 'HTML::Mason::Request::CGI' :
+ 'HTML::Mason::Request';
+
+ $class->alter_superclass( $new_class );
+ $class->valid_params( %{ $new_class->valid_params } );
+ return $class->SUPER::new(@_);
+}
+
+# XXX TODO: This alter_superclass replaces teh funcitonality in Mason 1.39
+# with code which doesn't trigger a bug in Perl 5.10.
+# (Perl 5.10.0 does NOT take kindly to having its @INC entries changed)
+# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54566
+#
+# This routine can be removed when either:
+# * RT depends on a version of mason which contains this fix
+# * Perl 5.10.0 is not supported for running RT
+sub alter_superclass {
+ my $class = shift;
+ my $new_super = shift;
+ my $isa_ref;
+ { no strict 'refs'; my @entries = @{$class."::ISA"}; $isa_ref = \@entries; }
+
+ # handles multiple inheritance properly and preserve
+ # inheritance order
+ for ( my $x = 0; $x <= $#{$isa_ref} ; $x++ ) {
+ if ( $isa_ref->[$x]->isa('HTML::Mason::Request') ) {
+ my $old_super = $isa_ref->[$x];
+ $isa_ref->[$x] = $new_super
+ if ( $old_super ne $new_super );
+ last;
+ }
+ }
+
+ { no strict 'refs'; @{$class."::ISA"} = @$isa_ref; }
+ $class->valid_params( %{ $class->valid_params } );
+}
+
+
+=head2 callback
+
+Method replaces deprecated component C<Element/Callback>.
+
+Takes hash with optional C<CallbackPage>, C<CallbackName>
+and C<CallbackOnce> arguments, other arguments are passed
+throught to callback components.
+
+=over 4
+
+=item CallbackPage
+
+Page path relative to the root, leading slash is mandatory.
+By default is equal to path of the caller component.
+
+=item CallbackName
+
+Name of the callback. C<Default> is used unless specified.
+
+=item CallbackOnce
+
+By default is false, otherwise runs callbacks only once per
+process of the server. Such callbacks can be used to fill
+structures.
+
+=back
+
+Searches for callback components in
+F<< /Callbacks/<any dir>/CallbackPage/CallbackName >>, for
+example F</Callbacks/MyExtension/autohandler/Default> would
+be called as default callback for F</autohandler>.
+
+=cut
+
+{
+my %cache = ();
+my %called = ();
+sub callback {
+ my ($self, %args) = @_;
+
+ my $name = delete $args{'CallbackName'} || 'Default';
+ my $page = delete $args{'CallbackPage'} || $self->callers(0)->path;
+ unless ( $page ) {
+ $RT::Logger->error("Couldn't get a page name for callbacks");
+ return;
+ }
+
+ my $CacheKey = "$page--$name";
+ return 1 if delete $args{'CallbackOnce'} && $called{ $CacheKey };
+ $called{ $CacheKey } = 1;
+
+ my $callbacks = $cache{ $CacheKey };
+ unless ( $callbacks ) {
+ $callbacks = [];
+ my $path = "/Callbacks/*$page/$name";
+ my @roots = map $_->[1],
+ $HTML::Mason::VERSION <= 1.28
+ ? $self->interp->resolver->comp_root_array
+ : $self->interp->comp_root_array;
+
+ my %seen;
+ @$callbacks = (
+ sort grep defined && length,
+ # Skip backup files, files without a leading package name,
+ # and files we've already seen
+ grep !$seen{$_}++ && !m{/\.} && !m{~$} && m{^/Callbacks/[^/]+\Q$page/$name\E$},
+ map $self->interp->resolver->glob_path($path, $_),
+ @roots
+ );
+ foreach my $comp (keys %seen) {
+ next unless $seen{$comp} > 1;
+ $RT::Logger->error("Found more than one occurrence of the $comp callback. This may cause only one of the callbacks to run. Look for the duplicate Callback in your @roots");
+ }
+
+ $cache{ $CacheKey } = $callbacks unless RT->Config->Get('DevelMode');
+ }
+
+ my @rv;
+ foreach my $cb ( @$callbacks ) {
+ push @rv, scalar $self->comp( $cb, %args );
+ }
+ return @rv;
+}
+}
+
+=head2 request_path
+
+Returns path of the request.
+
+Very close to C<< $m->request_comp->path >>, but if called in a dhandler returns
+path of the request without dhandler name, but with dhandler arguments instead.
+
+=cut
+
+sub request_path {
+ my $self = shift;
+
+ my $path = $self->request_comp->path;
+ # disabled dhandlers, not RT case, but anyway
+ return $path unless my $dh_name = $self->dhandler_name;
+ # not a dhandler
+ return $path unless substr($path, -length("/$dh_name")) eq "/$dh_name";
+ substr($path, -length $dh_name) = $self->dhandler_arg;
+ return $path;
+}
+
+1;
diff --git a/rt/lib/RT/Interface/Web/Session.pm b/rt/lib/RT/Interface/Web/Session.pm
new file mode 100644
index 0000000..4998c34
--- /dev/null
+++ b/rt/lib/RT/Interface/Web/Session.pm
@@ -0,0 +1,285 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Interface::Web::Session;
+use warnings;
+use strict;
+
+use RT::CurrentUser;
+
+=head1 NAME
+
+RT::Interface::Web::Session - RT web session class
+
+=head1 SYNOPSYS
+
+
+=head1 DESCRIPTION
+
+RT session class and utilities.
+
+CLASS METHODS can be used without creating object instances,
+it's mainly utilities to clean unused session records.
+
+Object is tied hash and can be used to access session data.
+
+=head1 METHODS
+
+=head2 CLASS METHODS
+
+=head3 Class
+
+Returns name of the class that is used as sessions storage.
+
+=cut
+
+sub Class {
+ my $self = shift;
+
+ my $class = RT->Config->Get('WebSessionClass')
+ || $self->Backends->{RT->Config->Get('DatabaseType')}
+ || 'Apache::Session::File';
+ eval "require $class";
+ die $@ if $@;
+ return $class;
+}
+
+=head3 Backends
+
+Returns hash reference with names of the databases as keys and
+sessions class names as values.
+
+=cut
+
+sub Backends {
+ return {
+ mysql => 'Apache::Session::MySQL',
+ Pg => 'Apache::Session::Postgres',
+ };
+}
+
+=head3 Attributes
+
+Returns hash reference with attributes that are used to create
+new session objects.
+
+=cut
+
+sub Attributes {
+
+ return $_[0]->Backends->{RT->Config->Get('DatabaseType')} ? {
+ Handle => $RT::Handle->dbh,
+ LockHandle => $RT::Handle->dbh,
+ Transaction => 1,
+ } : {
+ Directory => $RT::MasonSessionDir,
+ LockDirectory => $RT::MasonSessionDir,
+ Transaction => 1,
+ };
+}
+
+=head3 Ids
+
+Returns array ref with list of the session IDs.
+
+=cut
+
+sub Ids {
+ my $self = shift || __PACKAGE__;
+ my $attributes = $self->Attributes;
+ if( $attributes->{Directory} ) {
+ return $self->_IdsDir( $attributes->{Directory} );
+ } else {
+ return $self->_IdsDB( $RT::Handle->dbh );
+ }
+}
+
+sub _IdsDir {
+ my ($self, $dir) = @_;
+ require File::Find;
+ my %file;
+ File::Find::find(
+ sub { return unless /^[a-zA-Z0-9]+$/;
+ $file{$_} = (stat($_))[9];
+ },
+ $dir,
+ );
+
+ return [ sort { $file{$a} <=> $file{$b} } keys %file ];
+}
+
+sub _IdsDB {
+ my ($self, $dbh) = @_;
+ my $ids = $dbh->selectcol_arrayref("SELECT id FROM sessions ORDER BY LastUpdated DESC");
+ die "couldn't get ids: ". $dbh->errstr if $dbh->errstr;
+ return $ids;
+}
+
+=head3 ClearOld
+
+Takes seconds and deletes all sessions that are older.
+
+=cut
+
+sub ClearOld {
+ my $class = shift || __PACKAGE__;
+ my $attributes = $class->Attributes;
+ if( $attributes->{Directory} ) {
+ return $class->_CleariOldDir( $attributes->{Directory}, @_ );
+ } else {
+ return $class->_ClearOldDB( $RT::Handle->dbh, @_ );
+ }
+}
+
+sub _ClearOldDB {
+ my ($self, $dbh, $older_than) = @_;
+ my $rows;
+ unless( int $older_than ) {
+ $rows = $dbh->do("DELETE FROM sessions");
+ die "couldn't delete sessions: ". $dbh->errstr unless defined $rows;
+ } else {
+ require POSIX;
+ my $date = POSIX::strftime("%Y-%m-%d %H:%M", localtime( time - int $older_than ) );
+
+ my $sth = $dbh->prepare("DELETE FROM sessions WHERE LastUpdated < ?");
+ die "couldn't prepare query: ". $dbh->errstr unless $sth;
+ $rows = $sth->execute( $date );
+ die "couldn't execute query: ". $dbh->errstr unless defined $rows;
+ }
+
+ $RT::Logger->info("successfuly deleted $rows sessions");
+ return;
+}
+
+sub _ClearOldDir {
+ my ($self, $dir, $older_than) = @_;
+
+ require File::Spec if int $older_than;
+
+ my $now = time;
+ my $class = $self->Class;
+ my $attrs = $self->Attributes;
+
+ foreach my $id( @{ $self->Ids } ) {
+ if( int $older_than ) {
+ my $ctime = (stat(File::Spec->catfile($dir,$id)))[9];
+ if( $ctime > $now - $older_than ) {
+ $RT::Logger->debug("skipped session '$id', isn't old");
+ next;
+ }
+ }
+
+ my %session;
+ local $@;
+ eval { tie %session, $class, $id, $attrs };
+ if( $@ ) {
+ $RT::Logger->debug("skipped session '$id', couldn't load: $@");
+ next;
+ }
+ tied(%session)->delete;
+ $RT::Logger->info("successfuly deleted session '$id'");
+ }
+ return;
+}
+
+=head3 ClearByUser
+
+Checks all sessions and if user has more then one session
+then leave only the latest one.
+
+=cut
+
+sub ClearByUser {
+ my $self = shift || __PACKAGE__;
+ my $class = $self->Class;
+ my $attrs = $self->Attributes;
+
+ my %seen = ();
+ foreach my $id( @{ $self->Ids } ) {
+ my %session;
+ local $@;
+ eval { tie %session, $class, $id, $attrs };
+ if( $@ ) {
+ $RT::Logger->debug("skipped session '$id', couldn't load: $@");
+ next;
+ }
+ if( $session{'CurrentUser'} && $session{'CurrentUser'}->id ) {
+ unless( $seen{ $session{'CurrentUser'}->id }++ ) {
+ $RT::Logger->debug("skipped session '$id', first user's session");
+ next;
+ }
+ }
+ tied(%session)->delete;
+ $RT::Logger->info("successfuly deleted session '$id'");
+ }
+}
+
+sub TIEHASH {
+ my $self = shift;
+ my $id = shift;
+
+ my $class = $self->Class;
+ my $attrs = $self->Attributes;
+
+ my %session;
+
+ local $@;
+ eval { tie %session, $class, $id, $attrs };
+ eval { tie %session, $class, undef, $attrs } if $@;
+ if ( $@ ) {
+ die loc("RT couldn't store your session.") . "\n"
+ . loc("This may mean that that the directory '[_1]' isn't writable or a database table is missing or corrupt.",
+ $RT::MasonSessionDir)
+ . "\n\n"
+ . $@;
+ }
+
+ return tied %session;
+}
+
+1;
diff --git a/rt/lib/RT/Interface/Web/Standalone.pm b/rt/lib/RT/Interface/Web/Standalone.pm
index f625dd8..12bd276 100755
--- a/rt/lib/RT/Interface/Web/Standalone.pm
+++ b/rt/lib/RT/Interface/Web/Standalone.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,12 +45,15 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-package RT::Interface::Web::Standalone;
use strict;
+use warnings;
+package RT::Interface::Web::Standalone;
+
use base 'HTTP::Server::Simple::Mason';
use RT::Interface::Web::Handler;
use RT::Interface::Web;
+use URI;
sub handler_class { "RT::Interface::Web::Handler" }
@@ -64,7 +67,7 @@ sub setup_escapes {
}
sub default_mason_config {
- return @RT::MasonParameters;
+ return RT->Config->Get('MasonParameters');
}
sub handle_request {
@@ -72,13 +75,43 @@ sub handle_request {
my $self = shift;
my $cgi = shift;
- Module::Refresh->refresh if $RT::DevelMode;
-
+ Module::Refresh->refresh if RT->Config->Get('DevelMode');
+ RT::ConnectToDatabase() unless RT->InstallMode;
$self->SUPER::handle_request($cgi);
- $RT::Logger->crit($@) if ($@);
-
+ $RT::Logger->crit($@) if $@ && $RT::Logger;
+ warn $@ if $@ && !$RT::Logger;
RT::Interface::Web::Handler->CleanupRequest();
+}
+
+sub net_server {
+ my $self = shift;
+ $self->{rt_net_server} = shift if @_;
+ return $self->{rt_net_server};
+}
+
+
+=head2 print_banner
+
+This routine prints a banner before the server request-handling loop
+starts.
+
+Methods below this point are probably not terribly useful to define
+yourself in subclasses.
+
+=cut
+
+sub print_banner {
+ my $self = shift;
+
+ my $url = URI->new( RT->Config->Get('WebBaseURL'));
+ $url->host('127.0.0.1') if ($url->host() eq 'localhost');
+ $url->port($self->port);
+ print(
+ "You can connect to your server at "
+ . $url->canonical
+ . "\n" );
}
+
1;
diff --git a/rt/lib/RT/Interface/Web/Standalone/PreFork.pm b/rt/lib/RT/Interface/Web/Standalone/PreFork.pm
new file mode 100644
index 0000000..c00f8cd
--- /dev/null
+++ b/rt/lib/RT/Interface/Web/Standalone/PreFork.pm
@@ -0,0 +1,103 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use warnings;
+use strict;
+
+package RT::Interface::Web::Standalone::PreFork;
+use base qw/Net::Server::PreFork/;
+
+my %option_map = (
+ min_servers => 'StandaloneMinServers',
+ max_servers => 'StandaloneMaxServers',
+ min_spare_servers => 'StandaloneMinSpareServers',
+ max_spare_servers => 'StandaloneMaxSpareServers',
+ max_requests => 'StandaloneMaxRequests',
+);
+
+=head2 default_values
+
+Produces the default values for L<Net::Server> configuration from RT's config
+files.
+
+=cut
+
+sub default_values {
+ my %forking = (
+ map { $_ => RT->Config->Get( $option_map{$_} ) }
+ grep { defined( RT->Config->Get( $option_map{$_} ) ) }
+ keys %option_map,
+ );
+
+ return {
+ %forking,
+ log_level => 1,
+ RT->Config->Get('NetServerOptions')
+ };
+}
+
+=head2 post_bind_hook
+
+After binding to the specified ports, let the user know that the server is
+prepared to handle connections.
+
+=cut
+
+sub post_bind_hook {
+ my $self = shift;
+ my @ports = @{ $self->{server}->{port} };
+
+ print $0
+ . ": You can connect to your server at "
+ . (join ' , ', map { "http://localhost:$_/" } @ports)
+ . "\n";
+
+ $self->SUPER::post_bind_hook(@_);
+}
+
+1;
diff --git a/rt/lib/RT/Link.pm b/rt/lib/RT/Link.pm
index 8737b50..0cab237 100644
--- a/rt/lib/RT/Link.pm
+++ b/rt/lib/RT/Link.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Link_Overlay.pm b/rt/lib/RT/Link_Overlay.pm
index a89f08a..3eb0355 100644
--- a/rt/lib/RT/Link_Overlay.pm
+++ b/rt/lib/RT/Link_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Link - an RT Link object
@@ -61,20 +62,6 @@ should only be accessed through exported APIs in Ticket other similar objects.
=head1 METHODS
-=begin testing
-
-
-use RT::Link;
-my $link = RT::Link->new($RT::SystemUser);
-
-
-ok (ref $link);
-ok (UNIVERSAL::isa($link, 'RT::Link'));
-ok (UNIVERSAL::isa($link, 'RT::Base'));
-ok (UNIVERSAL::isa($link, 'RT::Record'));
-ok (UNIVERSAL::isa($link, 'DBIx::SearchBuilder::Record'));
-
-=end testing
=cut
@@ -111,7 +98,7 @@ sub Create {
unless ( $base->Resolver && $base->Scheme ) {
my $msg = $self->loc("Couldn't resolve base '[_1]' into a URI.",
$args{'Base'});
- $RT::Logger->warning( "$self $msg\n" );
+ $RT::Logger->warning( "$self $msg" );
if (wantarray) {
return(undef, $msg);
@@ -126,7 +113,7 @@ sub Create {
unless ( $target->Resolver ) {
my $msg = $self->loc("Couldn't resolve target '[_1]' into a URI.",
$args{'Target'});
- $RT::Logger->warning( "$self $msg\n" );
+ $RT::Logger->warning( "$self $msg" );
if (wantarray) {
return(undef, $msg);
@@ -142,18 +129,20 @@ sub Create {
if ( $base->IsLocal ) {
- unless (UNIVERSAL::can($base->Object, 'Id')) {
+ my $object = $base->Object;
+ unless (UNIVERSAL::can($object, 'Id')) {
return (undef, $self->loc("[_1] appears to be a local object, but can't be found in the database", $args{'Base'}));
}
- $base_id = $base->Object->Id;
+ $base_id = $object->Id if UNIVERSAL::isa($object, 'RT::Ticket');
}
if ( $target->IsLocal ) {
- unless (UNIVERSAL::can($target->Object, 'Id')) {
+ my $object = $target->Object;
+ unless (UNIVERSAL::can($object, 'Id')) {
return (undef, $self->loc("[_1] appears to be a local object, but can't be found in the database", $args{'Target'}));
}
- $target_id = $target->Object->Id;
+ $target_id = $object->Id if UNIVERSAL::isa($object, 'RT::Ticket');
}
# {{{ We don't want references to ourself
@@ -302,89 +291,5 @@ sub BaseObj {
}
# }}}
-
-
-# Static methods:
-
-# {{{ sub BaseIsLocal
-
-=head2 BaseIsLocal
-
-Returns true if the base of this link is a local ticket
-
-=cut
-
-sub BaseIsLocal {
- my $self = shift;
- $RT::Logger->crit("Link::BaseIsLocal is deprecated in favor of Link->BaseURI->IsLocal at (". join(":",caller).")");
- return $self->BaseURI->IsLocal;
-}
-
-# }}}
-
-# {{{ sub TargetIsLocal
-
-=head2 TargetIsLocal
-
-Returns true if the target of this link is a local ticket
-
-=cut
-
-sub TargetIsLocal {
- my $self = shift;
- $RT::Logger->crit("Link::BaseIsLocal is deprecated in favor of Link->BaseURI->IsLocal at (". join(":",caller).")");
- return $self->TargetURI->IsLocal;
-}
-
-# }}}
-
-
-# {{{ sub BaseAsHREF
-
-=head2 BaseAsHREF
-
-Returns an HTTP url to access the base of this link
-
-=cut
-
-sub BaseAsHREF {
- my $self = shift;
- $RT::Logger->crit("Link::BaseAsHREF deprecated in favor of ->BaseURI->AsHREF at (". join(":",caller).")");
- return $self->BaseURI->AsHREF;
-}
-# }}}
-
-# {{{ sub TargetAsHREF
-
-=head2 TargetAsHREF
-
-return an HTTP url to access the target of this link
-
-=cut
-
-sub TargetAsHREF {
- my $self = shift;
- $RT::Logger->crit("Link::TargetAsHREF deprecated in favor of ->TargetURI->AsHREF at (". join(":",caller).")");
- return $self->TargetURI->AsHREF;
-}
-# }}}
-
-# {{{ sub AsHREF - Converts Link URIs to HTTP URLs
-
-=head2 URI
-
-Takes a URI and returns an http: url to access that object.
-
-=cut
-
-
-sub AsHREF {
- my $self=shift;
-
- $RT::Logger->crit("AsHREF is gone. look at URI::HREF to figure out what to do with \$URI");
-}
-
-# }}}
-
1;
diff --git a/rt/lib/RT/Links.pm b/rt/lib/RT/Links.pm
index 47d78fc..ecf9643 100644
--- a/rt/lib/RT/Links.pm
+++ b/rt/lib/RT/Links.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Links_Overlay.pm b/rt/lib/RT/Links_Overlay.pm
index 91ac2fc..ec23df8 100644
--- a/rt/lib/RT/Links_Overlay.pm
+++ b/rt/lib/RT/Links_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Links - A collection of Link objects
@@ -60,11 +61,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Links);
-
-=end testing
=cut
@@ -157,6 +153,10 @@ sub Next {
my $Link = $self->SUPER::Next();
return $Link unless $Link && ref $Link;
+ # skip very invalid Link records
+ unless ($Link->Target && $Link->Base) {
+ return $self->Next;
+ }
# Skip links to local objects thast are deleted
if ( $Link->TargetURI->IsLocal and UNIVERSAL::isa($Link->TargetObj,"RT::Ticket")
and $Link->TargetObj->__Value('status') eq "deleted") {
diff --git a/rt/lib/RT/ObjectCustomField.pm b/rt/lib/RT/ObjectCustomField.pm
index f94bf37..8ec4a09 100644
--- a/rt/lib/RT/ObjectCustomField.pm
+++ b/rt/lib/RT/ObjectCustomField.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ObjectCustomFieldValue.pm b/rt/lib/RT/ObjectCustomFieldValue.pm
index b282b53..543368f 100644
--- a/rt/lib/RT/ObjectCustomFieldValue.pm
+++ b/rt/lib/RT/ObjectCustomFieldValue.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm b/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm
index 7f50f2c..37ad056 100644
--- a/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm
+++ b/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,64 +45,66 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::ObjectCustomFieldValue;
use strict;
-no warnings qw(redefine);
+use warnings;
+use RT::Interface::Web;
+no warnings qw(redefine);
sub Create {
my $self = shift;
my %args = (
- CustomField => '0',
- ObjectType => '',
- ObjectId => '0',
- Disabled => '0',
- Content => '',
- LargeContent => '',
- ContentType => '',
- ContentEncoding => '',
-
- @_);
-
-
- if( $args{'Content'} && length($args{'Content'}) > 255 && !$args{'LargeContent'} ) {
-
- $args{'LargeContent'} = $args{'Content'};
- $args{'Content'} = '';
- $args{'ContentType'} = 'text/plain';
+ CustomField => 0,
+ ObjectType => '',
+ ObjectId => 0,
+ Disabled => 0,
+ Content => '',
+ LargeContent => undef,
+ ContentType => '',
+ ContentEncoding => '',
+ @_,
+ );
+
+ if ( defined $args{'Content'} && length( Encode::encode_utf8($args{'Content'}) ) > 255 ) {
+ if ( defined $args{'LargeContent'} && length $args{'LargeContent'} ) {
+ $RT::Logger->error("Content is longer than 255 bytes and LargeContent specified");
+ }
+ else {
+ $args{'LargeContent'} = $args{'Content'};
+ $args{'Content'} = '';
+ $args{'ContentType'} ||= 'text/plain';
+ }
}
( $args{'ContentEncoding'}, $args{'LargeContent'} ) =
- $self->_EncodeLOB( $args{'LargeContent'}, $args{'ContentType'} )
- if ( $args{'LargeContent'} );
-
- $self->SUPER::Create(
- CustomField => $args{'CustomField'},
- ObjectType => $args{'ObjectType'},
- ObjectId => $args{'ObjectId'},
- Disabled => $args{'Disabled'},
- Content => $args{'Content'},
- LargeContent => $args{'LargeContent'},
- ContentType => $args{'ContentType'},
- ContentEncoding => $args{'ContentEncoding'},
-);
-
-
-
+ $self->_EncodeLOB( $args{'LargeContent'}, $args{'ContentType'} )
+ if defined $args{'LargeContent'};
+
+ return $self->SUPER::Create(
+ CustomField => $args{'CustomField'},
+ ObjectType => $args{'ObjectType'},
+ ObjectId => $args{'ObjectId'},
+ Disabled => $args{'Disabled'},
+ Content => $args{'Content'},
+ LargeContent => $args{'LargeContent'},
+ ContentType => $args{'ContentType'},
+ ContentEncoding => $args{'ContentEncoding'},
+ );
}
sub LargeContent {
my $self = shift;
- $self->_DecodeLOB( $self->ContentType, $self->ContentEncoding,
- $self->_Value( 'LargeContent', decode_utf8 => 0 ) );
-
+ return $self->_DecodeLOB(
+ $self->ContentType,
+ $self->ContentEncoding,
+ $self->_Value( 'LargeContent', decode_utf8 => 0 )
+ );
}
-
-
-
=head2 LoadByTicketContentAndCustomField { Ticket => TICKET, CustomField => CUSTOMFIELD, Content => CONTENT }
Loads a custom field value by Ticket, Content and which CustomField it's tied to
@@ -112,40 +114,40 @@ Loads a custom field value by Ticket, Content and which CustomField it's tied to
sub LoadByTicketContentAndCustomField {
my $self = shift;
- my %args = ( Ticket => undef,
- CustomField => undef,
- Content => undef,
- @_
- );
-
-
- $self->LoadByCols( Content => $args{'Content'},
- CustomField => $args{'CustomField'},
- ObjectType => 'RT::Ticket',
- ObjectId => $args{'Ticket'},
- Disabled => 0
- );
-
-
+ my %args = (
+ Ticket => undef,
+ CustomField => undef,
+ Content => undef,
+ @_
+ );
+
+ return $self->LoadByCols(
+ Content => $args{'Content'},
+ CustomField => $args{'CustomField'},
+ ObjectType => 'RT::Ticket',
+ ObjectId => $args{'Ticket'},
+ Disabled => 0
+ );
}
sub LoadByObjectContentAndCustomField {
my $self = shift;
- my %args = ( Object => undef,
- CustomField => undef,
- Content => undef,
- @_
- );
+ my %args = (
+ Object => undef,
+ CustomField => undef,
+ Content => undef,
+ @_
+ );
my $obj = $args{'Object'} or return;
- $self->LoadByCols( Content => $args{'Content'},
- CustomField => $args{'CustomField'},
- ObjectType => ref($obj),
- ObjectId => $obj->Id,
- Disabled => 0
- );
-
+ return $self->LoadByCols(
+ Content => $args{'Content'},
+ CustomField => $args{'CustomField'},
+ ObjectType => ref($obj),
+ ObjectId => $obj->Id,
+ Disabled => 0
+ );
}
@@ -156,18 +158,16 @@ content, try "LargeContent"
=cut
-
sub Content {
my $self = shift;
my $content = $self->SUPER::Content;
- if (!$content && $self->ContentType eq 'text/plain') {
- return $self->LargeContent();
+ if ( !(defined $content && length $content) && $self->ContentType && $self->ContentType eq 'text/plain' ) {
+ return $self->LargeContent;
} else {
return $content;
}
}
-
=head2 Object
Returns the object this value applies to
@@ -176,9 +176,9 @@ Returns the object this value applies to
sub Object {
my $self = shift;
- my $Object = $self->__Value('ObjectType')->new($self->CurrentUser);
- $Object->Load($self->__Value('ObjectId'));
- return($Object);
+ my $Object = $self->__Value('ObjectType')->new( $self->CurrentUser );
+ $Object->LoadById( $self->__Value('ObjectId') );
+ return $Object;
}
@@ -191,13 +191,13 @@ Disable this value. Used to remove "current" values from records while leaving t
sub Delete {
my $self = shift;
- $self->SetDisabled(1);
+ return $self->SetDisabled(1);
}
=head2 _FillInTemplateURL URL
Takes a URL containing placeholders and returns the URL as filled in for this
-ObjectCustomFieldValue.
+ObjectCustomFieldValue. The values for the placeholders will be URI-escaped.
Available placeholders:
@@ -211,21 +211,41 @@ The id of the object in question.
The value of this custom field for the object in question.
+=item __WebDomain__, __WebPort__, __WebPath__, __WebBaseURL__ and __WebURL__
+
+The value of the config option.
+
=back
=cut
-sub _FillInTemplateURL {
+{
+my %placeholders = (
+ id => { value => sub { $_[0]->ObjectId }, escape => 1 },
+ CustomField => { value => sub { $_[0]->Content }, escape => 1 },
+ WebDomain => { value => sub { RT->Config->Get('WebDomain') } },
+ WebPort => { value => sub { RT->Config->Get('WebPort') } },
+ WebPath => { value => sub { RT->Config->Get('WebPath') } },
+ WebBaseURL => { value => sub { RT->Config->Get('WebBaseURL') } },
+ WebURL => { value => sub { RT->Config->Get('WebURL') } },
+);
+sub _FillInTemplateURL {
my $self = shift;
-
my $url = shift;
- $url =~ s/__id__/@{[$self->ObjectId]}/g;
- $url =~ s/__CustomField__/@{[$self->Content]}/g;
+ # default value, uri-escape
+ for my $key (keys %placeholders) {
+ $url =~ s{__${key}__}{
+ my $value = $placeholders{$key}{'value'}->( $self );
+ $value = '' if !defined($value);
+ RT::Interface::Web::EscapeURI(\$value) if $placeholders{$key}{'escape'};
+ $value
+ }gxe;
+ }
return $url;
-}
+} }
=head2 ValueLinkURL
@@ -256,7 +276,4 @@ sub IncludeContentForValue {
return $self->_FillInTemplateURL($self->CustomFieldObj->IncludeContentForValue);
}
-
-
-
1;
diff --git a/rt/lib/RT/ObjectCustomFieldValues.pm b/rt/lib/RT/ObjectCustomFieldValues.pm
index adf4829..7f5edf4 100644
--- a/rt/lib/RT/ObjectCustomFieldValues.pm
+++ b/rt/lib/RT/ObjectCustomFieldValues.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm b/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm
index 0da24bc..75ed7d9 100644
--- a/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm
+++ b/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::ObjectCustomFieldValues;
use strict;
@@ -61,56 +62,42 @@ Limits the returned set to values for the custom field with Id FIELD
sub LimitToCustomField {
my $self = shift;
my $cf = shift;
- return ($self->Limit( FIELD => 'CustomField',
- VALUE => $cf,
- OPERATOR => '='));
-
+ return $self->Limit(
+ FIELD => 'CustomField',
+ VALUE => $cf,
+ );
}
# }}}
-# {{{ sub LimitToTicket
+# {{{ sub LimitToObject
-=head2 LimitToTicket TICKETID
+=head2 LimitToObject OBJECT
-Limits the returned set to values for the ticket with Id TICKETID
+Limits the returned set to values for the given OBJECT
=cut
-
-sub LimitToTicket {
- my $self = shift;
- my $ticket = shift;
-
-
- $RT::Logger->warning(ref($self) . " -> LimitToTicket deprecated in favor of LimitToObject at (". join(":",caller).")");
-
- $self->Limit( FIELD => 'ObjectType',
- VALUE => 'RT::Ticket',
- OPERATOR => '=');
- return ($self->Limit( FIELD => 'ObjectId',
- VALUE => $ticket,
- OPERATOR => '='));
-
-}
-
-# }}}
-
sub LimitToObject {
my $self = shift;
my $object = shift;
- $self->Limit( FIELD => 'ObjectType',
- VALUE => ref($object),
- OPERATOR => '=');
- return ($self->Limit( FIELD => 'ObjectId',
- VALUE => $object->Id,
- OPERATOR => '='));
+ $self->Limit(
+ FIELD => 'ObjectType',
+ VALUE => ref($object),
+ );
+ return $self->Limit(
+ FIELD => 'ObjectId',
+ VALUE => $object->Id,
+ );
}
-=sub HasEntry VALUE
+# }}}
-Returns true if this CustomFieldValues collection has an entry with content that eq VALUE
+=head2 HasEntry VALUE
+
+If this collection has an entry with content that eq VALUE then
+returns the entry, otherwise returns undef.
=cut
@@ -118,37 +105,37 @@ Returns true if this CustomFieldValues collection has an entry with content that
sub HasEntry {
my $self = shift;
my $value = shift;
+ return undef unless defined $value && length $value;
#TODO: this could cache and optimize a fair bit.
- foreach my $item (@{$self->ItemsArrayRef}) {
- return(1) if ($item->Content eq $value);
+ foreach my $item ( @{$self->ItemsArrayRef} ) {
+ return $item if lc $item->Content eq lc $value;
}
return undef;
-
}
sub _DoSearch {
my $self = shift;
- #unless we really want to find disabled rows, make sure we\'re only finding enabled ones.
- unless($self->{'find_expired_rows'}) {
+ # unless we really want to find disabled rows,
+ # make sure we\'re only finding enabled ones.
+ unless ( $self->{'find_expired_rows'} ) {
$self->LimitToEnabled();
}
- return($self->SUPER::_DoSearch(@_));
-
+ return $self->SUPER::_DoSearch(@_);
}
sub _DoCount {
my $self = shift;
- #unless we really want to find disabled rows, make sure we\'re only finding enabled ones.
- unless($self->{'find_expired_rows'}) {
+ # unless we really want to find disabled rows,
+ # make sure we\'re only finding enabled ones.
+ unless ( $self->{'find_expired_rows'} ) {
$self->LimitToEnabled();
}
- return($self->SUPER::_DoCount(@_));
-
+ return $self->SUPER::_DoCount(@_);
}
1;
diff --git a/rt/lib/RT/ObjectCustomField_Overlay.pm b/rt/lib/RT/ObjectCustomField_Overlay.pm
index c4eb437..e95161b 100644
--- a/rt/lib/RT/ObjectCustomField_Overlay.pm
+++ b/rt/lib/RT/ObjectCustomField_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,33 +45,56 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::ObjectCustomField;
use strict;
+use warnings;
no warnings qw(redefine);
sub Create {
my $self = shift;
- my %args = (
- CustomField => '0',
- ObjectId => '0',
- SortOrder => undef,
- @_);
+ my %args = (
+ CustomField => 0,
+ ObjectId => 0,
+ SortOrder => undef,
+ @_
+ );
+
+ my $cf = $self->CustomFieldObj( $args{'CustomField'} );
+ unless ( $cf->id ) {
+ $RT::Logger->error("Couldn't load '$args{'CustomField'}' custom field");
+ return 0;
+ }
- if (!defined $args{SortOrder}) {
- my $CF = $self->CustomFieldObj($args{'CustomField'});
- my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser);
- $ObjectCFs->LimitToObjectId($args{'ObjectId'});
- $ObjectCFs->LimitToLookupType($CF->LookupType);
+ #XXX: Where is ACL check for 'AssignCustomFields'?
+
+ my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser);
+ $ObjectCFs->LimitToObjectId( $args{'ObjectId'} );
+ $ObjectCFs->LimitToCustomField( $cf->id );
+ $ObjectCFs->LimitToLookupType( $cf->LookupType );
+ if ( my $first = $ObjectCFs->First ) {
+ $self->Load( $first->id );
+ return $first->id;
+ }
- $args{SortOrder} = $ObjectCFs->Count + 1;
+ unless ( defined $args{'SortOrder'} ) {
+ my $ObjectCFs = RT::ObjectCustomFields->new( $RT::SystemUser );
+ $ObjectCFs->LimitToObjectId( $args{'ObjectId'} );
+ $ObjectCFs->LimitToLookupType( $cf->LookupType );
+ $ObjectCFs->OrderBy( FIELD => 'SortOrder', ORDER => 'DESC' );
+ if ( my $first = $ObjectCFs->First ) {
+ $args{'SortOrder'} = $first->SortOrder + 1;
+ } else {
+ $args{'SortOrder'} = 0;
+ }
}
- $self->SUPER::Create(
- CustomField => $args{'CustomField'},
- ObjectId => $args{'ObjectId'},
- SortOrder => $args{'SortOrder'},
- );
+ return $self->SUPER::Create(
+ CustomField => $args{'CustomField'},
+ ObjectId => $args{'ObjectId'},
+ SortOrder => $args{'SortOrder'},
+ );
}
sub Delete {
@@ -84,9 +107,9 @@ sub Delete {
# Move everything below us up
my $sort_order = $self->SortOrder;
while (my $OCF = $ObjectCFs->Next) {
- my $this_order = $OCF->SortOrder;
- next if $this_order <= $sort_order;
- $OCF->SetSortOrder($this_order - 1);
+ my $this_order = $OCF->SortOrder;
+ next if $this_order <= $sort_order;
+ $OCF->SetSortOrder($this_order - 1);
}
$self->SUPER::Delete;
@@ -95,8 +118,8 @@ sub Delete {
sub CustomFieldObj {
my $self = shift;
my $id = shift || $self->CustomField;
- my $CF = RT::CustomField->new($self->CurrentUser);
- $CF->Load($id) or die "Cannot load CustomField $id";
+ my $CF = RT::CustomField->new( $self->CurrentUser );
+ $CF->Load( $id );
return $CF;
}
diff --git a/rt/lib/RT/ObjectCustomFields.pm b/rt/lib/RT/ObjectCustomFields.pm
index 43534cb..62f0030 100644
--- a/rt/lib/RT/ObjectCustomFields.pm
+++ b/rt/lib/RT/ObjectCustomFields.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ObjectCustomFields_Overlay.pm b/rt/lib/RT/ObjectCustomFields_Overlay.pm
index 9128f14..c1b8d14 100644
--- a/rt/lib/RT/ObjectCustomFields_Overlay.pm
+++ b/rt/lib/RT/ObjectCustomFields_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::ObjectCustomFields;
use strict;
@@ -65,17 +66,19 @@ sub LimitToObjectId {
sub LimitToLookupType {
my $self = shift;
my $lookup = shift;
- unless ($self->{'_cfs_alias'}) {
- $self->{'_cfs_alias'} = $self->NewAlias('CustomFields');
- }
- $self->Join( ALIAS1 => 'main',
- FIELD1 => 'CustomField',
- ALIAS2 => $self->{'_cfs_alias'},
- FIELD2 => 'id' );
- $self->Limit( ALIAS => $self->{'_cfs_alias'},
- FIELD => 'LookupType',
- OPERATOR => '=',
- VALUE => $lookup );
+
+ $self->{'_cfs_alias'} ||= $self->Join(
+ ALIAS1 => 'main',
+ FIELD1 => 'CustomField',
+ TABLE2 => 'CustomFields',
+ FIELD2 => 'id',
+ );
+ $self->Limit(
+ ALIAS => $self->{'_cfs_alias'},
+ FIELD => 'LookupType',
+ OPERATOR => '=',
+ VALUE => $lookup,
+ );
}
sub HasEntryForCustomField {
diff --git a/rt/lib/RT/Plugin.pm b/rt/lib/RT/Plugin.pm
new file mode 100644
index 0000000..ae2193d
--- /dev/null
+++ b/rt/lib/RT/Plugin.pm
@@ -0,0 +1,141 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use warnings;
+use strict;
+
+package RT::Plugin;
+use File::ShareDir;
+
+=head1 NAME
+
+RT::Plugin
+
+=head1 METHODS
+
+=head2 new
+
+Instantiate a new L<RT::Plugin> object. Takes a paramhash. currently the only key
+it cares about is 'name', the name of this plugin.
+
+=cut
+
+sub new {
+ my $class = shift;
+ my $args ={@_};
+ my $self = bless $args, $class;
+ return $self;
+}
+
+
+=head2 Name
+
+Returns a human-readable name for this plugin.
+
+=cut
+
+sub Name {
+ my $self = shift;
+ return $self->{name};
+}
+
+=head2 Path
+
+Takes a name of sub directory and returns its full path, for example:
+
+ my $plugin_etc_dir = $plugin->Path('etc');
+
+See also L</ComponentRoot>, L</PoDir> and other shortcut methods.
+
+=cut
+
+sub Path {
+ my $self = shift;
+ my $subdir = shift;
+ my $res = $self->_BasePath;
+ $res .= "/$subdir" if defined $subdir && length $subdir;
+ return $res;
+}
+
+sub _BasePath {
+ my $self = shift;
+ my $base = $self->{'name'};
+ $base =~ s/::/-/g;
+ my $local_base = $RT::LocalPluginPath."/".$base;
+ my $base_base = $RT::PluginPath."/".$base;
+
+ return -d $local_base ? $local_base : $base_base;
+}
+
+=head2 ComponentRoot
+
+Returns the directory this plugin has installed its L<HTML::Mason> templates into
+
+=cut
+
+sub ComponentRoot { return $_[0]->Path('html') }
+
+=head2 PoDir
+
+Returns the directory this plugin has installed its message catalogs into.
+
+=cut
+
+sub PoDir { return $_[0]->Path('po') }
+
+eval "require RT::Plugin_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Plugin_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Plugin_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Plugin_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Principal.pm b/rt/lib/RT/Principal.pm
index f5c5e74..598b0da 100644
--- a/rt/lib/RT/Principal.pm
+++ b/rt/lib/RT/Principal.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Principal_Overlay.pm b/rt/lib/RT/Principal_Overlay.pm
index c444a1b..e0646a7 100644
--- a/rt/lib/RT/Principal_Overlay.pm
+++ b/rt/lib/RT/Principal_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
#
package RT::Principal;
@@ -52,12 +53,10 @@ package RT::Principal;
use strict;
use warnings;
-no warnings qw(redefine);
-
use Cache::Simple::TimedExpiry;
-
+use RT;
use RT::Group;
use RT::User;
@@ -76,12 +75,11 @@ Returns undef, otherwise
sub IsGroup {
my $self = shift;
- if ($self->PrincipalType eq 'Group') {
- return(1);
- }
- else {
- return undef;
+ if ( defined $self->PrincipalType &&
+ $self->PrincipalType eq 'Group' ) {
+ return 1;
}
+ return undef;
}
# }}}
@@ -118,18 +116,18 @@ Returns the user or group associated with this principal
sub Object {
my $self = shift;
- unless ($self->{'object'}) {
- if ($self->IsUser) {
- $self->{'object'} = RT::User->new($self->CurrentUser);
- }
- elsif ($self->IsGroup) {
- $self->{'object'} = RT::Group->new($self->CurrentUser);
- }
- else {
- $RT::Logger->crit("Found a principal (".$self->Id.") that was neither a user nor a group");
- return(undef);
- }
- $self->{'object'}->Load($self->ObjectId());
+ unless ( $self->{'object'} ) {
+ if ( $self->IsUser ) {
+ $self->{'object'} = RT::User->new($self->CurrentUser);
+ }
+ elsif ( $self->IsGroup ) {
+ $self->{'object'} = RT::Group->new($self->CurrentUser);
+ }
+ else {
+ $RT::Logger->crit("Found a principal (".$self->Id.") that was neither a user nor a group");
+ return(undef);
+ }
+ $self->{'object'}->Load( $self->ObjectId() );
}
return ($self->{'object'});
@@ -154,29 +152,25 @@ A helper function which calls RT::ACE->Create
sub GrantRight {
my $self = shift;
- my %args = ( Right => undef,
- Object => undef,
- @_);
-
-
- unless ($args{'Right'}) {
- return(0, $self->loc("Invalid Right"));
- }
-
+ my %args = (
+ Right => undef,
+ Object => undef,
+ @_
+ );
#ACL check handled in ACE.pm
my $ace = RT::ACE->new( $self->CurrentUser );
-
my $type = $self->_GetPrincipalTypeForACL();
# If it's a user, we really want to grant the right to their
# user equivalence group
- return ( $ace->Create(RightName => $args{'Right'},
- Object => $args{'Object'},
- PrincipalType => $type,
- PrincipalId => $self->Id
- ) );
+ return $ace->Create(
+ RightName => $args{'Right'},
+ Object => $args{'Object'},
+ PrincipalType => $type,
+ PrincipalId => $self->Id,
+ );
}
# }}}
@@ -197,7 +191,7 @@ sub RevokeRight {
my $self = shift;
my %args = (
- Right => undef,
+ Right => undef,
Object => undef,
@_
);
@@ -210,17 +204,14 @@ sub RevokeRight {
my $type = $self->_GetPrincipalTypeForACL();
my $ace = RT::ACE->new( $self->CurrentUser );
- $ace->LoadByValues(
+ my ($status, $msg) = $ace->LoadByValues(
RightName => $args{'Right'},
- Object => $args{'Object'},
+ Object => $args{'Object'},
PrincipalType => $type,
PrincipalId => $self->Id
);
-
- unless ( $ace->Id ) {
- return ( 0, $self->loc("ACE not found") );
- }
- return ( $ace->Delete );
+ return ($status, $msg) unless $status;
+ return $ace->Delete;
}
# }}}
@@ -303,11 +294,18 @@ sub HasRight {
return (undef);
}
+ my $canonic_name = RT::ACE->CanonicalizeRightName( $args{'Right'} );
+ unless ( $canonic_name ) {
+ $RT::Logger->error("Invalid right. Couldn't canonicalize right '$args{'Right'}'");
+ return undef;
+ }
+ $args{'Right'} = $canonic_name;
+
$args{'EquivObjects'} = [ @{ $args{'EquivObjects'} } ]
if $args{'EquivObjects'};
if ( $self->Disabled ) {
- $RT::Logger->error( "Disabled User #"
+ $RT::Logger->debug( "Disabled User #"
. $self->id
. " failed access check for "
. $args{'Right'} );
@@ -325,21 +323,13 @@ sub HasRight {
return (undef);
}
- # If this object is a ticket, we care about ticket roles and queue roles
- if ( UNIVERSAL::isa( $args{'Object'} => 'RT::Ticket' ) ) {
- # this is a little bit hacky, but basically, now that we've done
- # the ticket roles magic, we load the queue object
- # and ask all the rest of our questions about the queue.
- unshift @{ $args{'EquivObjects'} }, $args{'Object'}->QueueObj;
-
- }
+ unshift @{ $args{'EquivObjects'} }, $args{'Object'}->ACLEquivalenceObjects;
unshift @{ $args{'EquivObjects'} }, $RT::System
unless $self->can('_IsOverrideGlobalACL')
&& $self->_IsOverrideGlobalACL( $args{'Object'} );
-
# {{{ If we've cached a win or loss for this lookup say so
# Construct a hashkeys to cache decisions:
@@ -535,8 +525,9 @@ Cleans out and reinitializes the user rights cache
sub InvalidateACLCache {
$_ACL_CACHE = Cache::Simple::TimedExpiry->new();
- $_ACL_CACHE->expire_after($RT::ACLCacheLifetime||60);
-
+ my $lifetime;
+ $lifetime = $RT::Config->Get('ACLCacheLifetime') if $RT::Config;
+ $_ACL_CACHE->expire_after( $lifetime || 60 );
}
# }}}
diff --git a/rt/lib/RT/Principals.pm b/rt/lib/RT/Principals.pm
index 9125f79..3410521 100644
--- a/rt/lib/RT/Principals.pm
+++ b/rt/lib/RT/Principals.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Principals_Overlay.pm b/rt/lib/RT/Principals_Overlay.pm
index 5883ee4..f0bf852 100644
--- a/rt/lib/RT/Principals_Overlay.pm
+++ b/rt/lib/RT/Principals_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Principals - a collection of RT::Principal objects
@@ -59,11 +60,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Principals);
-
-=end testing
=cut
diff --git a/rt/lib/RT/Queue.pm b/rt/lib/RT/Queue.pm
index 42fa04c..183ab8f 100755
--- a/rt/lib/RT/Queue.pm
+++ b/rt/lib/RT/Queue.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Queue_Overlay.pm b/rt/lib/RT/Queue_Overlay.pm
index 7d93852..a839679 100644
--- a/rt/lib/RT/Queue_Overlay.pm
+++ b/rt/lib/RT/Queue_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Queue - an RT Queue object
@@ -55,15 +56,10 @@
=head1 DESCRIPTION
+An RT queue object.
=head1 METHODS
-=begin testing
-
-use RT::Queue;
-
-=end testing
-
=cut
@@ -72,14 +68,12 @@ package RT::Queue;
use strict;
no warnings qw(redefine);
-use vars qw(@DEFAULT_ACTIVE_STATUS @DEFAULT_INACTIVE_STATUS $RIGHTS);
-
use RT::Groups;
use RT::ACL;
use RT::Interface::Email;
-@DEFAULT_ACTIVE_STATUS = qw(new open stalled);
-@DEFAULT_INACTIVE_STATUS = qw(resolved rejected deleted);
+our @DEFAULT_ACTIVE_STATUS = qw(new open stalled);
+our @DEFAULT_INACTIVE_STATUS = qw(resolved rejected deleted);
# $self->loc('new'); # For the string extractor to get a string to localize
# $self->loc('open'); # For the string extractor to get a string to localize
@@ -89,12 +83,14 @@ use RT::Interface::Email;
# $self->loc('deleted'); # For the string extractor to get a string to localize
-$RIGHTS = {
+our $RIGHTS = {
SeeQueue => 'Can this principal see this queue', # loc_pair
AdminQueue => 'Create, delete and modify queues', # loc_pair
ShowACL => 'Display Access Control List', # loc_pair
ModifyACL => 'Modify Access Control List', # loc_pair
ModifyQueueWatchers => 'Modify the queue watchers', # loc_pair
+ SeeCustomField => 'See custom field values', # loc_pair
+ ModifyCustomField => 'Modify custom field values', # loc_pair
AssignCustomFields => 'Assign and remove custom fields', # loc_pair
ModifyTemplate => 'Modify Scrip templates for this queue', # loc_pair
ShowTemplate => 'Display Scrip templates for this queue', # loc_pair
@@ -117,6 +113,8 @@ $RIGHTS = {
TakeTicket => 'Take tickets', # loc_pair
StealTicket => 'Steal tickets', # loc_pair
+ ForwardMessage => 'Forward messages to third person(s)', # loc_pair
+
};
# Tell RT::ACE that this sort of object can get acls granted
@@ -128,7 +126,21 @@ $RT::ACE::OBJECT_TYPES{'RT::Queue'} = 1;
foreach my $right ( keys %{$RIGHTS} ) {
$RT::ACE::LOWERCASERIGHTNAMES{ lc $right } = $right;
}
-
+
+=head2 AddRights C<RIGHT>, C<DESCRIPTION> [, ...]
+
+Adds the given rights to the list of possible rights. This method
+should be called during server startup, not at runtime.
+
+=cut
+
+sub AddRights {
+ my $self = shift;
+ my %new = @_;
+ $RIGHTS = { %$RIGHTS, %new };
+ %RT::ACE::LOWERCASERIGHTNAMES = ( %RT::ACE::LOWERCASERIGHTNAMES,
+ map { lc($_) => $_ } keys %new);
+}
sub AddLink {
my $self = shift;
@@ -156,7 +168,7 @@ sub DeleteLink {
#check acls
unless ( $self->CurrentUserHasRight('ModifyQueue') ) {
- $RT::Logger->debug("No permission to delete links\n");
+ $RT::Logger->debug("No permission to delete links");
return ( 0, $self->loc('Permission Denied'))
}
@@ -184,8 +196,8 @@ Returns an array of all ActiveStatuses for this queue
sub ActiveStatusArray {
my $self = shift;
- if (@RT::ActiveStatus) {
- return (@RT::ActiveStatus)
+ if (RT->Config->Get('ActiveStatus')) {
+ return (RT->Config->Get('ActiveStatus'))
} else {
$RT::Logger->warning("RT::ActiveStatus undefined, falling back to deprecated defaults");
return (@DEFAULT_ACTIVE_STATUS);
@@ -204,8 +216,8 @@ Returns an array of all InactiveStatuses for this queue
sub InactiveStatusArray {
my $self = shift;
- if (@RT::InactiveStatus) {
- return (@RT::InactiveStatus)
+ if (RT->Config->Get('InactiveStatus')) {
+ return (RT->Config->Get('InactiveStatus'))
} else {
$RT::Logger->warning("RT::InactiveStatus undefined, falling back to deprecated defaults");
return (@DEFAULT_INACTIVE_STATUS);
@@ -235,13 +247,6 @@ sub StatusArray {
Returns true if VALUE is a valid status. Otherwise, returns 0.
-=begin testing
-
-my $q = RT::Queue->new($RT::SystemUser);
-ok($q->IsValidStatus('new')== 1, 'New is a valid status');
-ok($q->IsValidStatus('f00')== 0, 'f00 is not a valid status');
-
-=end testing
=cut
@@ -262,14 +267,6 @@ sub IsValidStatus {
Returns true if VALUE is a Active status. Otherwise, returns 0
-=begin testing
-
-my $q = RT::Queue->new($RT::SystemUser);
-ok($q->IsActiveStatus('new')== 1, 'New is a Active status');
-ok($q->IsActiveStatus('rejected')== 0, 'Rejected is an inactive status');
-ok($q->IsActiveStatus('f00')== 0, 'f00 is not a Active status');
-
-=end testing
=cut
@@ -290,14 +287,6 @@ sub IsActiveStatus {
Returns true if VALUE is a Inactive status. Otherwise, returns 0
-=begin testing
-
-my $q = RT::Queue->new($RT::SystemUser);
-ok($q->IsInactiveStatus('new')== 0, 'New is a Active status');
-ok($q->IsInactiveStatus('rejected')== 1, 'rejeected is an Inactive status');
-ok($q->IsInactiveStatus('f00')== 0, 'f00 is not a Active status');
-
-=end testing
=cut
@@ -332,16 +321,6 @@ Arguments: ARGS is a hash of named parameters. Valid parameters are:
If you pass the ACL check, it creates the queue and returns its queue id.
-=begin testing
-
-my $queue = RT::Queue->new($RT::SystemUser);
-my ($id, $val) = $queue->Create( Name => 'Test1');
-ok($id, $val);
-
-($id, $val) = $queue->Create( Name => '66');
-ok(!$id, $val);
-
-=end testing
=cut
@@ -352,9 +331,13 @@ sub Create {
CorrespondAddress => '',
Description => '',
CommentAddress => '',
- InitialPriority => "0",
- FinalPriority => "0",
- DefaultDueIn => "0",
+ SubjectTag => '',
+ InitialPriority => 0,
+ FinalPriority => 0,
+ DefaultDueIn => 0,
+ Sign => undef,
+ Encrypt => undef,
+ _RecordTransaction => 1,
@_
);
@@ -367,10 +350,11 @@ sub Create {
return ( 0, $self->loc('Queue already exists') );
}
+ my %attrs = map {$_ => 1} $self->ReadableAttributes;
+
#TODO better input validation
$RT::Handle->BeginTransaction();
-
- my $id = $self->SUPER::Create(%args);
+ my $id = $self->SUPER::Create( map { $_ => $args{$_} } grep exists $args{$_}, keys %attrs );
unless ($id) {
$RT::Handle->Rollback();
return ( 0, $self->loc('Queue could not be created') );
@@ -381,8 +365,22 @@ sub Create {
$RT::Handle->Rollback();
return ( 0, $self->loc('Queue could not be created') );
}
+ if ( $args{'_RecordTransaction'} ) {
+ $self->_NewTransaction( Type => "Create" );
+ }
+ $RT::Handle->Commit;
+
+ if ( defined $args{'Sign'} ) {
+ my ($status, $msg) = $self->SetSign( $args{'Sign'} );
+ $RT::Logger->error("Couldn't set attribute 'Sign': $msg")
+ unless $status;
+ }
+ if ( defined $args{'Encrypt'} ) {
+ my ($status, $msg) = $self->SetEncrypt( $args{'Encrypt'} );
+ $RT::Logger->error("Couldn't set attribute 'Encrypt': $msg")
+ unless $status;
+ }
- $RT::Handle->Commit();
return ( $id, $self->loc("Queue created") );
}
@@ -408,6 +406,29 @@ Takes a boolean.
=cut
+sub SetDisabled {
+ my $self = shift;
+ my $val = shift;
+
+ $RT::Handle->BeginTransaction();
+ my $set_err = $self->SUPER::SetDisabled($val);
+ unless ($set_err) {
+ $RT::Handle->Rollback();
+ $RT::Logger->warning("Couldn't ".($val == 1) ? "disable" : "enable"." queue ".$self->PrincipalObj->Id);
+ return (undef);
+ }
+ $self->_NewTransaction( Type => ($val == 1) ? "Disabled" : "Enabled" );
+
+ $RT::Handle->Commit();
+
+ if ( $val == 1 ) {
+ return (1, $self->loc("Queue disabled"));
+ } else {
+ return (1, $self->loc("Queue enabled"));
+ }
+
+}
+
# }}}
# {{{ sub Load
@@ -469,6 +490,94 @@ sub ValidateName {
# }}}
+=head2 SetSign
+
+=cut
+
+sub Sign {
+ my $self = shift;
+ my $value = shift;
+
+ return undef unless $self->CurrentUserHasRight('SeeQueue');
+ my $attr = $self->FirstAttribute('Sign') or return 0;
+ return $attr->Content;
+}
+
+sub SetSign {
+ my $self = shift;
+ my $value = shift;
+
+ return ( 0, $self->loc('Permission Denied') )
+ unless $self->CurrentUserHasRight('AdminQueue');
+
+ my ($status, $msg) = $self->SetAttribute(
+ Name => 'Sign',
+ Description => 'Sign outgoing messages by default',
+ Content => $value,
+ );
+ return ($status, $msg) unless $status;
+ return ($status, $self->loc('Signing enabled')) if $value;
+ return ($status, $self->loc('Signing disabled'));
+}
+
+sub Encrypt {
+ my $self = shift;
+ my $value = shift;
+
+ return undef unless $self->CurrentUserHasRight('SeeQueue');
+ my $attr = $self->FirstAttribute('Encrypt') or return 0;
+ return $attr->Content;
+}
+
+sub SetEncrypt {
+ my $self = shift;
+ my $value = shift;
+
+ return ( 0, $self->loc('Permission Denied') )
+ unless $self->CurrentUserHasRight('AdminQueue');
+
+ my ($status, $msg) = $self->SetAttribute(
+ Name => 'Encrypt',
+ Description => 'Encrypt outgoing messages by default',
+ Content => $value,
+ );
+ return ($status, $msg) unless $status;
+ return ($status, $self->loc('Encrypting enabled')) if $value;
+ return ($status, $self->loc('Encrypting disabled'));
+}
+
+sub SubjectTag {
+ my $self = shift;
+ return RT->System->SubjectTag( $self );
+}
+
+sub SetSubjectTag {
+ my $self = shift;
+ my $value = shift;
+
+ return ( 0, $self->loc('Permission Denied') )
+ unless $self->CurrentUserHasRight('AdminQueue');
+
+ my $attr = RT->System->FirstAttribute('BrandedSubjectTag');
+ my $map = $attr ? $attr->Content : {};
+ if ( defined $value && length $value ) {
+ $map->{ $self->id } = $value;
+ } else {
+ delete $map->{ $self->id };
+ }
+
+ my ($status, $msg) = RT->System->SetAttribute(
+ Name => 'BrandedSubjectTag',
+ Description => 'Queue id => subject tag map',
+ Content => $map,
+ );
+ return ($status, $msg) unless $status;
+ return ($status, $self->loc(
+ "SubjectTag changed to [_1]",
+ (defined $value && length $value)? $value : $self->loc("(no value)")
+ ))
+}
+
# {{{ sub Templates
=head2 Templates
@@ -510,33 +619,38 @@ sub CustomField {
}
-# {{{ CustomFields
+# {{{ TicketCustomFields
-=head2 CustomFields
+=head2 TicketCustomFields
-Returns an RT::CustomFields object containing all global custom fields, as well as those tied to this queue
+Returns an L<RT::CustomFields> object containing all global and
+queue-specific B<ticket> custom fields.
=cut
-# XXX TODO - this should become TicketCustomFields
-
-sub CustomFields {
- my $self = shift;
- warn "Queue->CustomFields is deprecated, use Queue->TicketCustomFields instead at (". join(":",caller).")";
- return $self->TicketCustomFields(@_);
-}
-
sub TicketCustomFields {
my $self = shift;
my $cfs = RT::CustomFields->new( $self->CurrentUser );
if ( $self->CurrentUserHasRight('SeeQueue') ) {
+ $cfs->SetContextObject( $self );
$cfs->LimitToGlobalOrObjectId( $self->Id );
$cfs->LimitToLookupType( 'RT::Queue-RT::Ticket' );
}
return ($cfs);
}
+# }}}
+
+# {{{ TicketTransactionCustomFields
+
+=head2 TicketTransactionCustomFields
+
+Returns an L<RT::CustomFields> object containing all global and
+queue-specific B<transaction> custom fields.
+
+=cut
+
sub TicketTransactionCustomFields {
my $self = shift;
@@ -566,34 +680,6 @@ It will create four groups for this ticket: Requestor, Cc, AdminCc and Owner.
It will return true on success and undef on failure.
-=begin testing
-
-my $Queue = RT::Queue->new($RT::SystemUser); my ($id, $msg) = $Queue->Create(Name => "Foo",
- );
-ok ($id, "Foo $id was created");
-ok(my $group = RT::Group->new($RT::SystemUser));
-ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'Cc'));
-ok ($group->Id, "Found the requestors object for this Queue");
-
-
-ok ((my $add_id, $add_msg) = $Queue->AddWatcher(Type => 'Cc', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor");
-ok ($add_id, "Add succeeded: ($add_msg)");
-ok(my $bob = RT::User->new($RT::SystemUser), "Creating a bob rt::user");
-$bob->LoadByEmail('bob@fsck.com');
-ok($bob->Id, "Found the bob rt user");
-ok ($Queue->IsWatcher(Type => 'Cc', PrincipalId => $bob->PrincipalId), "The Queue actually has bob at fsck.com as a requestor");;
-ok ((my $add_id, $add_msg) = $Queue->DeleteWatcher(Type =>'Cc', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor");
-ok (!$Queue->IsWatcher(Type => 'Cc', Principal => $bob->PrincipalId), "The Queue no longer has bob at fsck.com as a requestor");;
-
-
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'Cc'));
-ok ($group->Id, "Found the cc object for this Queue");
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'AdminCc'));
-ok ($group->Id, "Found the AdminCc object for this Queue");
-
-=end testing
=cut
@@ -633,7 +719,7 @@ PrinicpalId The RT::Principal id of the user or group that's being added as a wa
Email The email address of the new watcher. If a user with this
email address can't be found, a new nonprivileged user will be created.
-If the watcher you\'re trying to set has an RT account, set the Owner paremeter to their User Id. Otherwise, set the Email parameter to their Email address.
+If the watcher you\'re trying to set has an RT account, set the Owner parameter to their User Id. Otherwise, set the Email parameter to their Email address.
Returns a tuple of (status/id, message).
@@ -662,10 +748,10 @@ sub AddWatcher {
if $self->CurrentUserHasRight('ModifyQueueWatchers');
#If the watcher we're trying to add is for the current user
- if ( $self->CurrentUser->PrincipalId == ($args{'PrincipalId'}||0) ) {
+ if ( defined $args{'PrincipalId'} && $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) {
# If it's an AdminCc and they don't have
# 'WatchAsAdminCc' or 'ModifyTicket', bail
- if ( $args{'Type'} eq 'AdminCc' ) {
+ if ( defined $args{'Type'} && ($args{'Type'} eq 'AdminCc') ) {
return ( $self->_AddWatcher(%args) )
if $self->CurrentUserHasRight('WatchAsAdminCc');
}
@@ -751,7 +837,7 @@ sub _AddWatcher {
my ($m_id, $m_msg) = $group->_AddMember(PrincipalId => $principal->Id);
unless ($m_id) {
- $RT::Logger->error("Failed to add ".$principal->Id." as a member of group ".$group->Id."\n".$m_msg);
+ $RT::Logger->error("Failed to add ".$principal->Id." as a member of group ".$group->Id.": ".$m_msg);
return ( 0, $self->loc('Could not make that principal a [_1] for this queue', $args{'Type'}) );
}
@@ -787,21 +873,29 @@ sub DeleteWatcher {
Email => undef,
@_ );
- return ( 0, "No principal specified" )
- unless $args{Email} or $args{PrincipalId};
+ unless ( $args{'PrincipalId'} || $args{'Email'} ) {
+ return ( 0, $self->loc("No principal specified") );
+ }
if ( !$args{PrincipalId} and $args{Email} ) {
my $user = RT::User->new( $self->CurrentUser );
my ($rv, $msg) = $user->LoadByEmail( $args{Email} );
$args{PrincipalId} = $user->PrincipalId if $rv;
}
-
- my $principal = RT::Principal->new($self->CurrentUser);
- $principal->Load($args{'PrincipalId'});
+
+ my $principal = RT::Principal->new( $self->CurrentUser );
+ if ( $args{'PrincipalId'} ) {
+ $principal->Load( $args{'PrincipalId'} );
+ }
+ else {
+ my $user = RT::User->new( $self->CurrentUser );
+ $user->LoadByEmail( $args{'Email'} );
+ $principal->Load( $user->Id );
+ }
# If we can't find this watcher, we need to bail.
- unless ($principal->Id) {
- return(0, $self->loc("Could not find that principal"));
+ unless ( $principal->Id ) {
+ return ( 0, $self->loc("Could not find that principal") );
}
my $group = RT::Group->new($self->CurrentUser);
@@ -814,7 +908,7 @@ sub DeleteWatcher {
# {{{ Check ACLS
#If the watcher we're trying to add is for the current user
- if ( $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) {
+ if ( defined $args{'PrincipalId'} and $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) {
# If it's an AdminCc and they don't have
# 'WatchAsAdminCc' or 'ModifyQueue', bail
if ( $args{'Type'} eq 'AdminCc' ) {
@@ -859,7 +953,7 @@ sub DeleteWatcher {
my ($m_id, $m_msg) = $group->_DeleteMember($principal->Id);
unless ($m_id) {
$RT::Logger->error("Failed to delete ".$principal->Id.
- " as a member of group ".$group->Id."\n".$m_msg);
+ " as a member of group ".$group->Id.": ".$m_msg);
return ( 0, $self->loc('Could not remove that principal as a [_1] for this queue', $args{'Type'}) );
}
@@ -1120,15 +1214,15 @@ sub HasRight {
Principal => $self->CurrentUser,
@_
);
- unless ( defined $args{'Principal'} ) {
- $RT::Logger->debug("Principal undefined in Queue::HasRight");
-
+ my $principal = delete $args{'Principal'};
+ unless ( $principal ) {
+ $RT::Logger->error("Principal undefined in Queue::HasRight");
+ return undef;
}
- return (
- $args{'Principal'}->HasRight(
- Object => $self->Id ? $self : $RT::System,
- Right => $args{'Right'}
- )
+
+ return $principal->HasRight(
+ %args,
+ Object => ($self->Id ? $self : $RT::System),
);
}
diff --git a/rt/lib/RT/Queues.pm b/rt/lib/RT/Queues.pm
index ccf1e42..48f40f1 100755
--- a/rt/lib/RT/Queues.pm
+++ b/rt/lib/RT/Queues.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Queues_Overlay.pm b/rt/lib/RT/Queues_Overlay.pm
index 406b92c..9338b21 100644
--- a/rt/lib/RT/Queues_Overlay.pm
+++ b/rt/lib/RT/Queues_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Queues - a collection of RT::Queue objects
@@ -59,11 +60,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Queues);
-
-=end testing
=cut
diff --git a/rt/lib/RT/Record.pm b/rt/lib/RT/Record.pm
index 262bd20..b2e1e71 100755
--- a/rt/lib/RT/Record.pm
+++ b/rt/lib/RT/Record.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Record - Base class for RT record objects
@@ -55,11 +56,6 @@
=head1 DESCRIPTION
-=begin testing
-
-ok (require RT::Record);
-
-=end testing
=head1 METHODS
@@ -70,24 +66,21 @@ package RT::Record;
use strict;
use warnings;
-our @ISA;
-use base qw(RT::Base);
-
use RT::Date;
use RT::User;
use RT::Attributes;
-use DBIx::SearchBuilder::Record::Cachable;
use Encode qw();
our $_TABLE_ATTR = { };
-
-if ( $RT::DontCacheSearchBuilderRecords ) {
- push (@ISA, 'DBIx::SearchBuilder::Record');
-} else {
- push (@ISA, 'DBIx::SearchBuilder::Record::Cachable');
-
+use RT::Base;
+my $base = 'DBIx::SearchBuilder::Record::Cachable';
+if ( $RT::Config && $RT::Config->Get('DontCacheSearchBuilderRecords') ) {
+ $base = 'DBIx::SearchBuilder::Record';
}
+eval "require $base" or die $@;
+our @ISA = 'RT::Base';
+push @ISA, $base;
# {{{ sub _Init
@@ -107,10 +100,7 @@ The primary keys for RT classes is 'id'
=cut
-sub _PrimaryKeys {
- my $self = shift;
- return ( ['id'] );
-}
+sub _PrimaryKeys { return ['id'] }
# }}}
@@ -136,14 +126,6 @@ sub Delete {
Returns a string which is this object's type. The type is the class,
without the "RT::" prefix.
-=begin testing
-
-my $ticket = RT::Ticket->new($RT::SystemUser);
-my $group = RT::Group->new($RT::SystemUser);
-is($ticket->ObjectTypeStr, 'Ticket', "Ticket returns correct typestring");
-is($group->ObjectTypeStr, 'Group', "Group returns correct typestring");
-
-=end testing
=cut
@@ -259,10 +241,7 @@ sub FirstAttribute {
# {{{ sub _Handle
-sub _Handle {
- my $self = shift;
- return ($RT::Handle);
-}
+sub _Handle { return $RT::Handle }
# }}}
@@ -335,8 +314,6 @@ sub Create {
}
if (UNIVERSAL::isa('errno',$id)) {
- exit(0);
- warn "It's here!";
return(undef);
}
@@ -366,40 +343,29 @@ DB is case sensitive
sub LoadByCols {
my $self = shift;
- my %hash = (@_);
# We don't want to hang onto this
delete $self->{'attributes'};
+ return $self->SUPER::LoadByCols( @_ ) unless $self->_Handle->CaseSensitive;
+
# If this database is case sensitive we need to uncase objects for
# explicit loading
- if ( $self->_Handle->CaseSensitive ) {
- my %newhash;
- foreach my $key ( keys %hash ) {
-
- # If we've been passed an empty value, we can't do the lookup.
- # We don't need to explicitly downcase integers or an id.
- if ( $key =~ '^id$'
- || !defined( $hash{$key} )
- || $hash{$key} =~ /^\d+$/
- )
- {
- $newhash{$key} = $hash{$key};
- }
- else {
- my ($op, $val, $func);
- ($key, $op, $val, $func) = $self->_Handle->_MakeClauseCaseInsensitive($key, '=', $hash{$key});
- $newhash{$key}->{operator} = $op;
- $newhash{$key}->{value} = $val;
- $newhash{$key}->{function} = $func;
- }
+ my %hash = (@_);
+ foreach my $key ( keys %hash ) {
+
+ # If we've been passed an empty value, we can't do the lookup.
+ # We don't need to explicitly downcase integers or an id.
+ if ( $key ne 'id' && defined $hash{ $key } && $hash{ $key } !~ /^\d+$/ ) {
+ my ($op, $val, $func);
+ ($key, $op, $val, $func) =
+ $self->_Handle->_MakeClauseCaseInsensitive( $key, '=', delete $hash{ $key } );
+ $hash{$key}->{operator} = $op;
+ $hash{$key}->{value} = $val;
+ $hash{$key}->{function} = $func;
}
-
- # We've clobbered everything we care about. bash the old hash
- # and replace it with the new hash
- %hash = %newhash;
}
- $self->SUPER::LoadByCols(%hash);
+ return $self->SUPER::LoadByCols( %hash );
}
# }}}
@@ -528,7 +494,7 @@ sub _Set {
$msg =
$self->loc(
"[_1] changed from [_2] to [_3]",
- $args{'Field'},
+ $self->loc( $args{'Field'} ),
( $old_val ? "'$old_val'" : $self->loc("(no value)") ),
'"' . $self->__Value( $args{'Field'}) . '"'
);
@@ -661,27 +627,20 @@ sub SQLType {
}
-
sub __Value {
my $self = shift;
my $field = shift;
- my %args = ( decode_utf8 => 1,
- @_ );
+ my %args = ( decode_utf8 => 1, @_ );
- unless (defined $field && $field) {
- $RT::Logger->error("$self __Value called with undef field");
+ unless ( $field ) {
+ $RT::Logger->error("__Value called with undef field");
}
- my $value = $self->SUPER::__Value($field);
-
- return('') if ( !defined($value) || $value eq '');
+ my $value = $self->SUPER::__Value( $field );
if( $args{'decode_utf8'} ) {
- # XXX: is_utf8 check should be here unless Encode bug would be fixed
- # see http://rt.cpan.org/NoAuth/Bug.html?id=14559
- return Encode::decode_utf8($value) unless Encode::is_utf8($value);
+ return Encode::decode_utf8( $value ) unless Encode::is_utf8( $value );
} else {
- # check is_utf8 here just to be shure
- return Encode::encode_utf8($value) if Encode::is_utf8($value);
+ return Encode::encode_utf8( $value ) if Encode::is_utf8( $value );
}
return $value;
}
@@ -699,6 +658,7 @@ sub _CacheConfig {
sub _BuildTableAttributes {
my $self = shift;
+ my $class = ref($self) || $self;
my $attributes;
if ( UNIVERSAL::can( $self, '_CoreAccessible' ) ) {
@@ -710,37 +670,19 @@ sub _BuildTableAttributes {
foreach my $column (%$attributes) {
foreach my $attr ( %{ $attributes->{$column} } ) {
- $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr};
- }
- }
- if ( UNIVERSAL::can( $self, '_OverlayAccessible' ) ) {
- $attributes = $self->_OverlayAccessible();
-
- foreach my $column (%$attributes) {
- foreach my $attr ( %{ $attributes->{$column} } ) {
- $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr};
- }
- }
- }
- if ( UNIVERSAL::can( $self, '_VendorAccessible' ) ) {
- $attributes = $self->_VendorAccessible();
-
- foreach my $column (%$attributes) {
- foreach my $attr ( %{ $attributes->{$column} } ) {
- $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr};
- }
+ $_TABLE_ATTR->{$class}->{$column}->{$attr} = $attributes->{$column}->{$attr};
}
}
- if ( UNIVERSAL::can( $self, '_LocalAccessible' ) ) {
- $attributes = $self->_LocalAccessible();
+ foreach my $method ( qw(_OverlayAccessible _VendorAccessible _LocalAccessible) ) {
+ next unless UNIVERSAL::can( $self, $method );
+ $attributes = $self->$method();
foreach my $column (%$attributes) {
foreach my $attr ( %{ $attributes->{$column} } ) {
- $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr};
+ $_TABLE_ATTR->{$class}->{$column}->{$attr} = $attributes->{$column}->{$attr};
}
}
}
-
}
@@ -753,7 +695,7 @@ DBIx::SearchBuilder::Record
sub _ClassAccessible {
my $self = shift;
- return $_TABLE_ATTR->{ref($self)};
+ return $_TABLE_ATTR->{ref($self) || $self};
}
=head2 _Accessible COLUMN ATTRIBUTE
@@ -786,19 +728,19 @@ sub _EncodeLOB {
my $ContentEncoding = 'none';
#get the max attachment length from RT
- my $MaxSize = $RT::MaxAttachmentSize;
+ my $MaxSize = RT->Config->Get('MaxAttachmentSize');
#if the current attachment contains nulls and the
#database doesn't support embedded nulls
- if ( $RT::AlwaysUseBase64 or
+ if ( RT->Config->Get('AlwaysUseBase64') or
( !$RT::Handle->BinarySafeBLOBs ) && ( $Body =~ /\x00/ ) ) {
# set a flag telling us to mimencode the attachment
$ContentEncoding = 'base64';
#cut the max attchment size by 25% (for mime-encoding overhead.
- $RT::Logger->debug("Max size is $MaxSize\n");
+ $RT::Logger->debug("Max size is $MaxSize");
$MaxSize = $MaxSize * 3 / 4;
# Some databases (postgres) can't handle non-utf8 data
} elsif ( !$RT::Handle->BinarySafeBLOBs
@@ -811,7 +753,7 @@ sub _EncodeLOB {
if ( ($MaxSize) and ( $MaxSize < length($Body) ) ) {
# if we're supposed to truncate large attachments
- if ($RT::TruncateLongAttachments) {
+ if (RT->Config->Get('TruncateLongAttachments')) {
# truncate the attachment to that length.
$Body = substr( $Body, 0, $MaxSize );
@@ -819,13 +761,12 @@ sub _EncodeLOB {
}
# elsif we're supposed to drop large attachments on the floor,
- elsif ($RT::DropLongAttachments) {
+ elsif (RT->Config->Get('DropLongAttachments')) {
# drop the attachment on the floor
$RT::Logger->info( "$self: Dropped an attachment of size "
- . length($Body) . "\n"
- . "It started: " . substr( $Body, 0, 60 ) . "\n"
- );
+ . length($Body));
+ $RT::Logger->info( "It started: " . substr( $Body, 0, 60 ) );
return ("none", "Large attachment dropped" );
}
}
@@ -849,8 +790,8 @@ sub _EncodeLOB {
sub _DecodeLOB {
my $self = shift;
- my $ContentType = shift;
- my $ContentEncoding = shift;
+ my $ContentType = shift || '';
+ my $ContentEncoding = shift || 'none';
my $Content = shift;
if ( $ContentEncoding eq 'base64' ) {
@@ -868,7 +809,6 @@ sub _DecodeLOB {
return ($Content);
}
-# {{{ LINKDIRMAP
# A helper table for links mapping to make it easier
# to build and parse links between tickets
@@ -942,11 +882,18 @@ sub Update {
# This is in an eval block because $object might not exist.
# and might not have a Name method. But "can" won't find autoloaded
# items. If it fails, we don't care
- eval {
- my $object = $attribute . "Obj";
- next if ($self->$object->Name eq $value);
+ do {
+ no warnings "uninitialized";
+ local $@;
+ eval {
+ my $object = $attribute . "Obj";
+ my $name = $self->$object->Name;
+ next if $name eq $value || $name eq ($value || 0);
+ };
+ next if $value eq $self->$attribute();
+ next if ($value || 0) eq $self->$attribute();
};
- next if ( $value eq $self->$attribute() );
+
my $method = "Set$attribute";
my ( $code, $msg ) = $self->$method($value);
my ($prefix) = ref($self) =~ /RT(?:.*)::(\w+)/;
@@ -954,7 +901,17 @@ sub Update {
# Default to $id, but use name if we can get it.
my $label = $self->id;
$label = $self->Name if (UNIVERSAL::can($self,'Name'));
- push @results, $self->loc( "$prefix [_1]", $label ) . ': '. $msg;
+ # this requires model names to be loc'ed.
+
+=for loc
+
+ "Ticket" # loc
+ "User" # loc
+ "Group" # loc
+ "Queue" # loc
+=cut
+
+ push @results, $self->loc( $prefix ) . " $label: ". $msg;
=for loc
@@ -1063,54 +1020,10 @@ sub DependedOnBy {
=head2 HasUnresolvedDependencies
- Takes a paramhash of Type (default to '__any'). Returns true if
-$self->UnresolvedDependencies returns an object with one or more members
-of that type. Returns false otherwise
-
-
-=begin testing
-
-my $t1 = RT::Ticket->new($RT::SystemUser);
-my ($id, $trans, $msg) = $t1->Create(Subject => 'DepTest1', Queue => 'general');
-ok($id, "Created dep test 1 - $msg");
-
-my $t2 = RT::Ticket->new($RT::SystemUser);
-my ($id2, $trans, $msg2) = $t2->Create(Subject => 'DepTest2', Queue => 'general');
-ok($id2, "Created dep test 2 - $msg2");
-my $t3 = RT::Ticket->new($RT::SystemUser);
-my ($id3, $trans, $msg3) = $t3->Create(Subject => 'DepTest3', Queue => 'general', Type => 'approval');
-ok($id3, "Created dep test 3 - $msg3");
-my ($addid, $addmsg);
-ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t2->id));
-ok ($addid, $addmsg);
-ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t3->id));
-
-ok ($addid, $addmsg);
-my $link = RT::Link->new($RT::SystemUser);
-my ($rv, $msg) = $link->Load($addid);
-ok ($rv, $msg);
-ok ($link->LocalTarget == $t3->id, "Link LocalTarget is correct");
-ok ($link->LocalBase == $t1->id, "Link LocalBase is correct");
-
-ok ($t1->HasUnresolvedDependencies, "Ticket ".$t1->Id." has unresolved deps");
-ok (!$t1->HasUnresolvedDependencies( Type => 'blah' ), "Ticket ".$t1->Id." has no unresolved blahs");
-ok ($t1->HasUnresolvedDependencies( Type => 'approval' ), "Ticket ".$t1->Id." has unresolved approvals");
-ok (!$t2->HasUnresolvedDependencies, "Ticket ".$t2->Id." has no unresolved deps");
-;
-
-my ($rid, $rmsg)= $t1->Resolve();
-ok(!$rid, $rmsg);
-my ($rid2, $rmsg2) = $t2->Resolve();
-ok ($rid2, $rmsg2);
-($rid, $rmsg)= $t1->Resolve();
-ok(!$rid, $rmsg);
-my ($rid3,$rmsg3) = $t3->Resolve;
-ok ($rid3,$rmsg3);
-($rid, $rmsg)= $t1->Resolve();
-ok($rid, $rmsg);
-
-
-=end testing
+Takes a paramhash of Type (default to '__any'). Returns the number of
+unresolved dependencies, if $self->UnresolvedDependencies returns an
+object with one or more members of that type. Returns false
+otherwise.
=cut
@@ -1133,7 +1046,7 @@ sub HasUnresolvedDependencies {
}
if ($deps->Count > 0) {
- return 1;
+ return $deps->Count;
}
else {
return (undef);
@@ -1182,27 +1095,54 @@ dependency search.
sub AllDependedOnBy {
my $self = shift;
- my $dep = $self->DependedOnBy;
+ return $self->_AllLinkedTickets( LinkType => 'DependsOn',
+ Direction => 'Target', @_ );
+}
+
+=head2 AllDependsOn
+
+Returns an array of RT::Ticket objects which this ticket (directly or
+indirectly) depends on; takes an optional 'Type' argument in the param
+hash, which will limit returned tickets to that type, as well as cause
+tickets with that type to serve as 'leaf' nodes that stops the
+recursive dependency search.
+
+=cut
+
+sub AllDependsOn {
+ my $self = shift;
+ return $self->_AllLinkedTickets( LinkType => 'DependsOn',
+ Direction => 'Base', @_ );
+}
+
+sub _AllLinkedTickets {
+ my $self = shift;
+
my %args = (
+ LinkType => undef,
+ Direction => undef,
Type => undef,
_found => {},
_top => 1,
@_
);
+ my $dep = $self->_Links( $args{Direction}, $args{LinkType});
while (my $link = $dep->Next()) {
- next unless ($link->BaseURI->IsLocal());
- next if $args{_found}{$link->BaseObj->Id};
+ my $uri = $args{Direction} eq 'Target' ? $link->BaseURI : $link->TargetURI;
+ next unless ($uri->IsLocal());
+ my $obj = $args{Direction} eq 'Target' ? $link->BaseObj : $link->TargetObj;
+ next if $args{_found}{$obj->Id};
if (!$args{Type}) {
- $args{_found}{$link->BaseObj->Id} = $link->BaseObj;
- $link->BaseObj->AllDependedOnBy( %args, _top => 0 );
+ $args{_found}{$obj->Id} = $obj;
+ $obj->_AllLinkedTickets( %args, _top => 0 );
}
- elsif ($link->BaseObj->Type eq $args{Type}) {
- $args{_found}{$link->BaseObj->Id} = $link->BaseObj;
+ elsif ($obj->Type eq $args{Type}) {
+ $args{_found}{$obj->Id} = $obj;
}
else {
- $link->BaseObj->AllDependedOnBy( %args, _top => 0 );
+ $obj->_AllLinkedTickets( %args, _top => 0 );
}
}
@@ -1274,6 +1214,50 @@ sub _Links {
# }}}
+# {{{ sub FormatType
+
+=head2 FormatType
+
+Takes a Type and returns a string that is more human readable.
+
+=cut
+
+sub FormatType{
+ my $self = shift;
+ my %args = ( Type => '',
+ @_
+ );
+ $args{Type} =~ s/([A-Z])/" " . lc $1/ge;
+ $args{Type} =~ s/^\s+//;
+ return $args{Type};
+}
+
+
+# }}}
+
+# {{{ sub FormatLink
+
+=head2 FormatLink
+
+Takes either a Target or a Base and returns a string of human friendly text.
+
+=cut
+
+sub FormatLink {
+ my $self = shift;
+ my %args = ( Object => undef,
+ FallBack => '',
+ @_
+ );
+ my $text = "URI " . $args{FallBack};
+ if ($args{Object} && $args{Object}->isa("RT::Ticket")) {
+ $text = "Ticket " . $args{Object}->id;
+ }
+ return $text;
+}
+
+# }}}
+
# {{{ sub _AddLink
=head2 _AddLink
@@ -1285,7 +1269,6 @@ Returns C<link id>, C<message> and C<exist> flag.
=cut
-
sub _AddLink {
my $self = shift;
my %args = ( Target => '',
@@ -1300,7 +1283,7 @@ sub _AddLink {
my $direction;
if ( $args{'Base'} and $args{'Target'} ) {
- $RT::Logger->debug( "$self tried to create a link. both base and target were specified\n" );
+ $RT::Logger->debug( "$self tried to create a link. both base and target were specified" );
return ( 0, $self->loc("Can't specifiy both base and target") );
}
elsif ( $args{'Base'} ) {
@@ -1342,10 +1325,14 @@ sub _AddLink {
return ( 0, $self->loc("Link could not be created") );
}
+ my $basetext = $self->FormatLink(Object => $link->BaseObj,
+ FallBack => $args{Base});
+ my $targettext = $self->FormatLink(Object => $link->TargetObj,
+ FallBack => $args{Target});
+ my $typetext = $self->FormatType(Type => $args{Type});
my $TransString =
- "Record $args{'Base'} $args{Type} record $args{'Target'}.";
-
- return ( $linkid, $self->loc( "Link created ([_1])", $TransString ) );
+ "$basetext $typetext $targettext.";
+ return ( $linkid, $TransString ) ;
}
# }}}
@@ -1376,7 +1363,7 @@ sub _DeleteLink {
my $remote_link;
if ( $args{'Base'} and $args{'Target'} ) {
- $RT::Logger->debug("$self ->_DeleteLink. got both Base and Target\n");
+ $RT::Logger->debug("$self ->_DeleteLink. got both Base and Target");
return ( 0, $self->loc("Can't specifiy both base and target") );
}
elsif ( $args{'Base'} ) {
@@ -1390,28 +1377,32 @@ sub _DeleteLink {
$direction='Base';
}
else {
- $RT::Logger->error("Base or Target must be specified\n");
+ $RT::Logger->error("Base or Target must be specified");
return ( 0, $self->loc('Either base or target must be specified') );
}
my $link = new RT::Link( $self->CurrentUser );
- $RT::Logger->debug( "Trying to load link: " . $args{'Base'} . " " . $args{'Type'} . " " . $args{'Target'} . "\n" );
+ $RT::Logger->debug( "Trying to load link: " . $args{'Base'} . " " . $args{'Type'} . " " . $args{'Target'} );
$link->LoadByParams( Base=> $args{'Base'}, Type=> $args{'Type'}, Target=> $args{'Target'} );
#it's a real link.
- if ( $link->id ) {
+ if ( $link->id ) {
+ my $basetext = $self->FormatLink(Object => $link->BaseObj,
+ FallBack => $args{Base});
+ my $targettext = $self->FormatLink(Object => $link->TargetObj,
+ FallBack => $args{Target});
+ my $typetext = $self->FormatType(Type => $args{Type});
my $linkid = $link->id;
$link->Delete();
-
- my $TransString = "Record $args{'Base'} no longer $args{Type} record $args{'Target'}.";
- return ( 1, $self->loc("Link deleted ([_1])", $TransString));
+ my $TransString = "$basetext no longer $typetext $targettext.";
+ return ( 1, $TransString);
}
#if it's not a link we can find
else {
- $RT::Logger->debug("Couldn't find that link\n");
+ $RT::Logger->debug("Couldn't find that link");
return ( 0, $self->loc("Link not found") );
}
}
@@ -1490,7 +1481,7 @@ sub _NewTransaction {
if ( defined $args{'TimeTaken'} and $self->can('_UpdateTimeTaken')) {
$self->_UpdateTimeTaken( $args{'TimeTaken'} );
}
- if ( $RT::UseTransactionBatch and $transaction ) {
+ if ( RT->Config->Get('UseTransactionBatch') and $transaction ) {
push @{$self->{_TransactionBatch}}, $trans if $args{'CommitScrips'};
}
return ( $transaction, $msg, $trans );
@@ -1533,11 +1524,13 @@ sub Transactions {
sub CustomFields {
my $self = shift;
my $cfs = RT::CustomFields->new( $self->CurrentUser );
-
+
+ $cfs->SetContextObject( $self );
# XXX handle multiple types properly
$cfs->LimitToLookupType( $self->CustomFieldLookupType );
$cfs->LimitToGlobalOrObjectId(
- $self->_LookupId( $self->CustomFieldLookupType ) );
+ $self->_LookupId( $self->CustomFieldLookupType )
+ );
return $cfs;
}
@@ -1570,27 +1563,18 @@ sub CustomFieldLookupType {
return ref($self);
}
-#TODO Deprecated API. Destroy in 3.6
-sub _LookupTypes {
- my $self = shift;
- $RT::Logger->warning("_LookupTypes call is deprecated at (". join(":",caller)."). Replace with CustomFieldLookupType");
-
- return($self->CustomFieldLookupType);
-
-}
-
# {{{ AddCustomFieldValue
=head2 AddCustomFieldValue { Field => FIELD, Value => VALUE }
-VALUE should be a string.
-FIELD can be a CustomField object OR a CustomField ID.
-
+VALUE should be a string. FIELD can be any identifier of a CustomField
+supported by L</LoadCustomFieldByIdentifier> method.
-Adds VALUE as a value of CustomField FIELD. If this is a single-value custom field,
-deletes the old value.
+Adds VALUE as a value of CustomField FIELD. If this is a single-value custom field,
+deletes the old value.
If VALUE is not a valid value for the custom field, returns
-(0, 'Error message' ) otherwise, returns (1, 'Success Message')
+(0, 'Error message' ) otherwise, returns ($id, 'Success Message') where
+$id is ID of created L<ObjectCustomFieldValue> object.
=cut
@@ -1604,12 +1588,13 @@ sub _AddCustomFieldValue {
my %args = (
Field => undef,
Value => undef,
+ LargeContent => undef,
+ ContentType => undef,
RecordTransaction => 1,
@_
);
my $cf = $self->LoadCustomFieldByIdentifier($args{'Field'});
-
unless ( $cf->Id ) {
return ( 0, $self->loc( "Custom field [_1] not found", $args{'Field'} ) );
}
@@ -1625,8 +1610,11 @@ sub _AddCustomFieldValue {
)
);
}
- # Load up a ObjectCustomFieldValues object for this custom field and this ticket
- my $values = $cf->ValuesForObject($self);
+
+ # empty string is not correct value of any CF, so undef it
+ foreach ( qw(Value LargeContent) ) {
+ $args{ $_ } = undef if defined $args{ $_ } && !length $args{ $_ };
+ }
unless ( $cf->ValidateValue( $args{'Value'} ) ) {
return ( 0, $self->loc("Invalid value for custom field") );
@@ -1634,11 +1622,14 @@ sub _AddCustomFieldValue {
# If the custom field only accepts a certain # of values, delete the existing
# value and record a "changed from foo to bar" transaction
- unless ( $cf->UnlimitedValues) {
+ unless ( $cf->UnlimitedValues ) {
- # We need to whack any old values here. In most cases, the custom field should
- # only have one value to delete. In the pathalogical case, this custom field
- # used to be a multiple and we have many values to whack....
+ # Load up a ObjectCustomFieldValues object for this custom field and this ticket
+ my $values = $cf->ValuesForObject($self);
+
+ # We need to whack any old values here. In most cases, the custom field should
+ # only have one value to delete. In the pathalogical case, this custom field
+ # used to be a multiple and we have many values to whack....
my $cf_values = $values->Count;
if ( $cf_values > $cf->MaxValues ) {
@@ -1667,8 +1658,27 @@ sub _AddCustomFieldValue {
my ( $old_value, $old_content );
if ( $old_value = $values->First ) {
- $old_content = $old_value->Content();
- return (1) if( $old_content eq $args{'Value'} && $old_value->LargeContent eq $args{'LargeContent'});;
+ $old_content = $old_value->Content;
+ $old_content = undef if defined $old_content && !length $old_content;
+
+ my $is_the_same = 1;
+ if ( defined $args{'Value'} ) {
+ $is_the_same = 0 unless defined $old_content
+ && lc $old_content eq lc $args{'Value'};
+ } else {
+ $is_the_same = 0 if defined $old_content;
+ }
+ if ( $is_the_same ) {
+ my $old_content = $old_value->LargeContent;
+ if ( defined $args{'LargeContent'} ) {
+ $is_the_same = 0 unless defined $old_content
+ && $old_content eq $args{'LargeContent'};
+ } else {
+ $is_the_same = 0 if defined $old_content;
+ }
+ }
+
+ return $old_value->id if $is_the_same;
}
my ( $new_value_id, $value_msg ) = $cf->AddValueForObject(
@@ -1678,19 +1688,17 @@ sub _AddCustomFieldValue {
ContentType => $args{'ContentType'},
);
- unless ($new_value_id) {
- return ( 0, $self->loc( "Could not add new custom field value: [_1]", $value_msg) );
+ unless ( $new_value_id ) {
+ return ( 0, $self->loc( "Could not add new custom field value: [_1]", $value_msg ) );
}
my $new_value = RT::ObjectCustomFieldValue->new( $self->CurrentUser );
- $new_value->Load($new_value_id);
+ $new_value->Load( $new_value_id );
# now that adding the new value was successful, delete the old one
- if ($old_value) {
+ if ( $old_value ) {
my ( $val, $msg ) = $old_value->Delete();
- unless ($val) {
- return ( 0, $msg );
- }
+ return ( 0, $msg ) unless $val;
}
if ( $args{'RecordTransaction'} ) {
@@ -1703,47 +1711,45 @@ sub _AddCustomFieldValue {
);
}
- if ( $old_value eq '' ) {
- return ( 1, $self->loc( "[_1] [_2] added", $cf->Name, $new_value->Content ));
+ my $new_content = $new_value->Content;
+ unless ( defined $old_content && length $old_content ) {
+ return ( $new_value_id, $self->loc( "[_1] [_2] added", $cf->Name, $new_content ));
}
- elsif ( $new_value->Content eq '' ) {
- return ( 1,
- $self->loc( "[_1] [_2] deleted", $cf->Name, $old_value->Content ) );
+ elsif ( !defined $new_content || !length $new_content ) {
+ return ( $new_value_id,
+ $self->loc( "[_1] [_2] deleted", $cf->Name, $old_content ) );
}
else {
- return ( 1, $self->loc( "[_1] [_2] changed to [_3]", $cf->Name, $old_content, $new_value->Content));
+ return ( $new_value_id, $self->loc( "[_1] [_2] changed to [_3]", $cf->Name, $old_content, $new_content));
}
}
# otherwise, just add a new value and record "new value added"
else {
- my ($new_value_id, $value_msg) = $cf->AddValueForObject(
+ my ($new_value_id, $msg) = $cf->AddValueForObject(
Object => $self,
Content => $args{'Value'},
LargeContent => $args{'LargeContent'},
ContentType => $args{'ContentType'},
);
- unless ($new_value_id) {
- return ( 0, $self->loc( "Could not add new custom field value: [_1]", $value_msg) );
+ unless ( $new_value_id ) {
+ return ( 0, $self->loc( "Could not add new custom field value: [_1]", $msg ) );
}
if ( $args{'RecordTransaction'} ) {
- my ( $TransactionId, $Msg, $TransactionObj ) =
- $self->_NewTransaction(
+ my ( $tid, $msg ) = $self->_NewTransaction(
Type => 'CustomField',
Field => $cf->Id,
NewReference => $new_value_id,
ReferenceType => 'RT::ObjectCustomFieldValue',
- );
- unless ($TransactionId) {
- return ( 0,
- $self->loc( "Couldn't create a transaction: [_1]", $Msg ) );
+ );
+ unless ( $tid ) {
+ return ( 0, $self->loc( "Couldn't create a transaction: [_1]", $msg ) );
}
}
- return ( 1, $self->loc( "[_1] added as a value for [_2]", $args{'Value'}, $cf->Name));
+ return ( $new_value_id, $self->loc( "[_1] added as a value for [_2]", $args{'Value'}, $cf->Name ) );
}
-
}
# }}}
@@ -1771,10 +1777,10 @@ sub DeleteCustomFieldValue {
);
my $cf = $self->LoadCustomFieldByIdentifier($args{'Field'});
-
unless ( $cf->Id ) {
return ( 0, $self->loc( "Custom field [_1] not found", $args{'Field'} ) );
}
+
my ( $val, $msg ) = $cf->DeleteValueForObject(
Object => $self,
Id => $args{'ValueId'},
@@ -1783,6 +1789,7 @@ sub DeleteCustomFieldValue {
unless ($val) {
return ( 0, $msg );
}
+
my ( $TransactionId, $Msg, $TransactionObj ) = $self->_NewTransaction(
Type => 'CustomField',
Field => $cf->Id,
@@ -1816,15 +1823,34 @@ Takes a field id or name
sub FirstCustomFieldValue {
my $self = shift;
my $field = shift;
- my $values = $self->CustomFieldValues($field);
- if ($values->First) {
- return $values->First->Content;
- } else {
- return undef;
- }
+ my $values = $self->CustomFieldValues( $field );
+ return undef unless my $first = $values->First;
+ return $first->Content;
}
+=head2 CustomFieldValuesAsString FIELD
+
+Return the content of the CustomField FIELD for this ticket.
+If this is a multi-value custom field, values will be joined with newlines.
+
+Takes a field id or name as the first argument
+
+Takes an optional Separator => "," second and third argument
+if you want to join the values using something other than a newline
+
+=cut
+
+sub CustomFieldValuesAsString {
+ my $self = shift;
+ my $field = shift;
+ my %args = @_;
+ my $separator = $args{Separator} || "\n";
+
+ my $values = $self->CustomFieldValues( $field );
+ return join ($separator, grep { defined $_ }
+ map { $_->Content } @{$values->ItemsArrayRef});
+}
# {{{ CustomFieldValues
@@ -1842,11 +1868,12 @@ sub CustomFieldValues {
my $self = shift;
my $field = shift;
- if ($field) {
- my $cf = $self->LoadCustomFieldByIdentifier($field);
+ if ( $field ) {
+ my $cf = $self->LoadCustomFieldByIdentifier( $field );
- # we were asked to search on a custom field we couldn't fine
+ # we were asked to search on a custom field we couldn't find
unless ( $cf->id ) {
+ $RT::Logger->warning("Couldn't load custom field by '$field' identifier");
return RT::ObjectCustomFieldValues->new( $self->CurrentUser );
}
return ( $cf->ValuesForObject($self) );
@@ -1854,12 +1881,11 @@ sub CustomFieldValues {
# we're not limiting to a specific custom field;
my $ocfs = RT::ObjectCustomFieldValues->new( $self->CurrentUser );
- $ocfs->LimitToObject($self);
+ $ocfs->LimitToObject( $self );
return $ocfs;
-
}
-=head2 CustomField IDENTIFER
+=head2 LoadCustomFieldByIdentifier IDENTIFER
Find the custom field has id or name IDENTIFIER for this object.
@@ -1871,35 +1897,32 @@ sub LoadCustomFieldByIdentifier {
my $self = shift;
my $field = shift;
- my $cf = RT::CustomField->new($self->CurrentUser);
-
+ my $cf;
if ( UNIVERSAL::isa( $field, "RT::CustomField" ) ) {
+ $cf = RT::CustomField->new($self->CurrentUser);
+ $cf->SetContextObject( $self );
$cf->LoadById( $field->id );
}
elsif ($field =~ /^\d+$/) {
$cf = RT::CustomField->new($self->CurrentUser);
- $cf->Load($field);
+ $cf->SetContextObject( $self );
+ $cf->LoadById($field);
} else {
my $cfs = $self->CustomFields($self->CurrentUser);
+ $cfs->SetContextObject( $self );
$cfs->Limit(FIELD => 'Name', VALUE => $field, CASESENSITIVE => 0);
$cf = $cfs->First || RT::CustomField->new($self->CurrentUser);
}
return $cf;
}
+sub ACLEquivalenceObjects { }
-# }}}
-
-# }}}
-
-# }}}
-
-sub BasicColumns {
-}
+sub BasicColumns { }
sub WikiBase {
- return $RT::WebPath. "/index.html?q=";
+ return RT->Config->Get('WebPath'). "/index.html?q=";
}
eval "require RT::Record_Vendor";
diff --git a/rt/lib/RT/Reminders.pm b/rt/lib/RT/Reminders.pm
index d2ea9cc..e3222e3 100644
--- a/rt/lib/RT/Reminders.pm
+++ b/rt/lib/RT/Reminders.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Reminders;
use base qw/RT::Base/;
@@ -87,10 +88,11 @@ sub Collection {
my $self = shift;
my $col = RT::Tickets->new($self->CurrentUser);
- my $query = 'Queue = "'. $self->TicketObj->QueueObj->Name .'" AND Type = "reminder"';
- $query .= ' AND RefersTo = "'.$self->Ticket.'"';
+ my $query = 'Type = "reminder" AND RefersTo = "'.$self->Ticket.'"';
$col->FromSQL($query);
+
+ $col->OrderBy( FIELD => 'Due' );
return($col);
}
diff --git a/rt/lib/RT/Report/Tickets.pm b/rt/lib/RT/Report/Tickets.pm
index c1834ca..c539ab1 100644
--- a/rt/lib/RT/Report/Tickets.pm
+++ b/rt/lib/RT/Report/Tickets.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Report::Tickets;
use base qw/RT::Tickets/;
@@ -56,38 +57,31 @@ use warnings;
sub Groupings {
my $self = shift;
my %args = (@_);
- my @fields = qw(
- Owner
+ my @fields = map {$_, $_} qw(
Status
Queue
- DueDaily
- DueMonthly
- DueAnnually
- ResolvedDaily
- ResolvedMonthly
- ResolvedAnnually
- CreatedDaily
- CreatedMonthly
- CreatedAnnually
- LastUpdatedDaily
- LastUpdatedMonthly
- LastUpdatedAnnually
- StartedDaily
- StartedMonthly
- StartedAnnually
- StartsDaily
- StartsMonthly
- StartsAnnually
);
- @fields = map {$_, $_} @fields;
+ foreach my $type ( qw(Owner Creator LastUpdatedBy Requestor Cc AdminCc Watcher) ) {
+ push @fields, $type.' '.$_, $type.'.'.$_ foreach qw(
+ Name EmailAddress RealName NickName Organization Lang City Country Timezone
+ );
+ }
+
+ push @fields, map {$_, $_} qw(
+ DueDaily DueMonthly DueAnnually
+ ResolvedDaily ResolvedMonthly ResolvedAnnually
+ CreatedDaily CreatedMonthly CreatedAnnually
+ LastUpdatedDaily LastUpdatedMonthly LastUpdatedAnnually
+ StartedDaily StartedMonthly StartedAnnually
+ StartsDaily StartsMonthly StartsAnnually
+ );
my $queues = $args{'Queues'};
if ( !$queues && $args{'Query'} ) {
- my @actions;
- my $tree;
- # XXX TODO REFACTOR OUT
- $self->_ParseQuery( $args{'Query'}, \$tree, \@actions );
+ require RT::Interface::Web::QueryBuilder::Tree;
+ my $tree = RT::Interface::Web::QueryBuilder::Tree->new('AND');
+ $tree->ParseSQL( Query => $args{'Query'}, CurrentUser => $self->CurrentUser );
$queues = $tree->GetReferencedQueues;
}
@@ -125,14 +119,31 @@ sub Label {
return $self->CurrentUser->loc($field);
}
+sub SetupGroupings {
+ my $self = shift;
+ my %args = (Query => undef, GroupBy => undef, @_);
+
+ $self->FromSQL( $args{'Query'} );
+ my @group_by = ref( $args{'GroupBy'} )? @{ $args{'GroupBy'} } : ($args{'GroupBy'});
+ $self->GroupBy( map { {FIELD => $_} } @group_by );
+
+ # UseSQLForACLChecks may add late joins
+ my $joined = ($self->_isJoined || RT->Config->Get('UseSQLForACLChecks')) ? 1 : 0;
+
+ my @res;
+ push @res, $self->Column( FUNCTION => ($joined? 'DISTINCT COUNT' : 'COUNT'), FIELD => 'id' );
+ push @res, map $self->Column( FIELD => $_ ), @group_by;
+ return @res;
+}
+
sub GroupBy {
my $self = shift;
- my %args = ref $_[0]? %{ $_[0] }: (@_);
+ my @args = ref $_[0]? @_ : { @_ };
- $self->{'_group_by_field'} = $args{'FIELD'};
- %args = $self->_FieldToFunction( %args );
+ @{ $self->{'_group_by_field'} ||= [] } = map $_->{'FIELD'}, @args;
+ $_ = { $self->_FieldToFunction( %$_ ) } foreach @args;
- $self->SUPER::GroupBy( \%args );
+ $self->SUPER::GroupBy( @args );
}
sub Column {
@@ -174,14 +185,17 @@ sub _FieldToFunction {
if ($field =~ /^(.*)(Daily|Monthly|Annually)$/) {
my ($field, $grouping) = ($1, $2);
+ my $alias = $args{'ALIAS'} || 'main';
+ # Pg 8.3 requires explicit casting
+ $field .= '::text' if RT->Config->Get('DatabaseType') eq 'Pg';
if ( $grouping =~ /Daily/ ) {
- $args{'FUNCTION'} = "SUBSTR($field,1,10)";
+ $args{'FUNCTION'} = "SUBSTR($alias.$field,1,10)";
}
elsif ( $grouping =~ /Monthly/ ) {
- $args{'FUNCTION'} = "SUBSTR($field,1,7)";
+ $args{'FUNCTION'} = "SUBSTR($alias.$field,1,7)";
}
elsif ( $grouping =~ /Annually/ ) {
- $args{'FUNCTION'} = "SUBSTR($field,1,4)";
+ $args{'FUNCTION'} = "SUBSTR($alias.$field,1,4)";
}
} elsif ( $field =~ /^(?:CF|CustomField)\.{(.*)}$/ ) { #XXX: use CFDecipher method
my $cf_name = $1;
@@ -193,6 +207,28 @@ sub _FieldToFunction {
my ($ticket_cf_alias, $cf_alias) = $self->_CustomFieldJoin($cf->id, $cf->id, $cf_name);
@args{qw(ALIAS FIELD)} = ($ticket_cf_alias, 'Content');
}
+ } elsif ( $field =~ /^(?:(Owner|Creator|LastUpdatedBy))(?:\.(.*))?$/ ) {
+ my $type = $1 || '';
+ my $column = $2 || 'Name';
+ my $u_alias = $self->{"_sql_report_${type}_users_${column}"}
+ ||= $self->Join(
+ TYPE => 'LEFT',
+ ALIAS1 => 'main',
+ FIELD1 => $type,
+ TABLE2 => 'Users',
+ FIELD2 => 'id',
+ );
+ @args{qw(ALIAS FIELD)} = ($u_alias, $column);
+ } elsif ( $field =~ /^(?:Watcher|(Requestor|Cc|AdminCc))(?:\.(.*))?$/ ) {
+ my $type = $1 || '';
+ my $column = $2 || 'Name';
+ my $u_alias = $self->{"_sql_report_watcher_users_alias_$type"};
+ unless ( $u_alias ) {
+ my ($g_alias, $gm_alias);
+ ($g_alias, $gm_alias, $u_alias) = $self->_WatcherJoin( $type );
+ $self->{"_sql_report_watcher_users_alias_$type"} = $u_alias;
+ }
+ @args{qw(ALIAS FIELD)} = ($u_alias, $column);
}
return %args;
}
@@ -234,7 +270,7 @@ for, do that.
sub AddEmptyRows {
my $self = shift;
- if ( $self->{'_group_by_field'} eq 'Status' ) {
+ if ( @{ $self->{'_group_by_field'} || [] } == 1 && $self->{'_group_by_field'}[0] eq 'Status' ) {
my %has = map { $_->__Value('Status') => 1 } @{ $self->ItemsArrayRef || [] };
foreach my $status ( grep !$has{$_}, RT::Queue->new($self->CurrentUser)->StatusArray ) {
@@ -249,201 +285,14 @@ sub AddEmptyRows {
}
}
+eval "require RT::Report::Tickets_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Report/Tickets_Vendor.pm}) {
+ die $@;
+};
-# XXX TODO: this code cut and pasted from html/Search/Build.html
-# This has already been improved (But not backported) in 3.7
-#
-# This code is hacky, evil and wrong. But it's end of lifed from day one and is
-# less likely to destabilize the codebase than the full refactoring it should get.
-use Regexp::Common qw /delimited/;
-
-# States
-use constant VALUE => 1;
-use constant AGGREG => 2;
-use constant OP => 4;
-use constant PAREN => 8;
-use constant KEYWORD => 16;
-
-sub _match {
-
- # Case insensitive equality
- my ( $y, $x ) = @_;
- return 1 if $x =~ /^$y$/i;
-
- # return 1 if ((lc $x) eq (lc $y)); # Why isnt this equiv?
- return 0;
-}
-
-sub _ParseQuery {
- my $self = shift;
- my $string = shift;
- my $tree = shift;
- my @actions = shift;
- my $want = KEYWORD | PAREN;
- my $last = undef;
-
- my $depth = 1;
-
- # make a tree root
- use RT::Interface::Web::QueryBuilder::Tree;
- $$tree = RT::Interface::Web::QueryBuilder::Tree->new;
- my $root = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $$tree );
- my $lastnode = $root;
- my $parentnode = $root;
-
- # get the FIELDS from Tickets_Overlay
- my $tickets = new RT::Tickets( $self->CurrentUser );
- my %FIELDS = %{ $tickets->FIELDS };
-
- # Lower Case version of FIELDS, for case insensitivity
- my %lcfields = map { ( lc($_) => $_ ) } ( keys %FIELDS );
-
- my @tokens = qw[VALUE AGGREG OP PAREN KEYWORD];
- my $re_aggreg = qr[(?i:AND|OR)];
- my $re_value = qr[$RE{delimited}{-delim=>qq{\'\"}}|\d+];
- my $re_keyword = qr[$RE{delimited}{-delim=>qq{\'\"}}|(?:\{|\}|\w|\.)+];
- my $re_op =
- qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)]
- ; # long to short
- my $re_paren = qr'\(|\)';
-
- # assume that $ea is AND if it is not set
- my ( $ea, $key, $op, $value ) = ( "AND", "", "", "" );
-
- # order of matches in the RE is important.. op should come early,
- # because it has spaces in it. otherwise "NOT LIKE" might be parsed
- # as a keyword or value.
-
- while (
- $string =~ /(
- $re_aggreg
- |$re_op
- |$re_keyword
- |$re_value
- |$re_paren
- )/igx
- )
- {
- my $val = $1;
- my $current = 0;
-
- # Highest priority is last
- $current = OP if _match( $re_op, $val );
- $current = VALUE if _match( $re_value, $val );
- $current = KEYWORD
- if _match( $re_keyword, $val ) && ( $want & KEYWORD );
- $current = AGGREG if _match( $re_aggreg, $val );
- $current = PAREN if _match( $re_paren, $val );
-
- unless ( $current && $want & $current ) {
-
- # Error
- # FIXME: I will only print out the highest $want value
- my $token = $tokens[ ( ( log $want ) / ( log 2 ) ) ];
- push @actions,
- [
- $self->CurrentUser->loc(
-"current: $current, want $want, Error near ->$val<- expecting a $token in '$string'\n"
- ),
- -1
- ];
- }
-
- # State Machine:
- my $parentdepth = $depth;
-
- # Parens are highest priority
- if ( $current & PAREN ) {
- if ( $val eq "(" ) {
- $depth++;
-
- # make a new node that the clauses can be children of
- $parentnode = RT::Interface::Web::QueryBuilder::Tree->new( $ea, $parentnode );
- }
- else {
- $depth--;
- $parentnode = $parentnode->getParent();
- $lastnode = $parentnode;
- }
-
- $want = KEYWORD | PAREN | AGGREG;
- }
- elsif ( $current & AGGREG ) {
- $ea = $val;
- $want = KEYWORD | PAREN;
- }
- elsif ( $current & KEYWORD ) {
- $key = $val;
- $want = OP;
- }
- elsif ( $current & OP ) {
- $op = $val;
- $want = VALUE;
- }
- elsif ( $current & VALUE ) {
- $value = $val;
-
- # Remove surrounding quotes from $key, $val
- # (in future, simplify as for($key,$val) { action on $_ })
- if ( $key =~ /$RE{delimited}{-delim=>qq{\'\"}}/ ) {
- substr( $key, 0, 1 ) = "";
- substr( $key, -1, 1 ) = "";
- }
- if ( $val =~ /$RE{delimited}{-delim=>qq{\'\"}}/ ) {
- substr( $val, 0, 1 ) = "";
- substr( $val, -1, 1 ) = "";
- }
-
- # Unescape escaped characters
- $key =~ s!\\(.)!$1!g;
- $val =~ s!\\(.)!$1!g;
-
- my $class;
- if ( exists $lcfields{ lc $key } ) {
- $key = $lcfields{ lc $key };
- $class = $FIELDS{$key}->[0];
- }
- if ( $class ne 'INT' ) {
- $val = "'$val'";
- }
-
- push @actions, [ $self->CurrentUser->loc("Unknown field: [_1]", $key), -1 ] unless $class;
-
- $want = PAREN | AGGREG;
- }
- else {
- push @actions, [ $self->CurrentUser->loc("I'm lost"), -1 ];
- }
-
- if ( $current & VALUE ) {
- if ( $key =~ /^CF./ ) {
- $key = "'" . $key . "'";
- }
- my $clause = {
- Key => $key,
- Op => $op,
- Value => $val
- };
-
- # explicity add a child to it
- $lastnode = RT::Interface::Web::QueryBuilder::Tree->new( $clause, $parentnode );
- $lastnode->getParent()->setNodeValue($ea);
-
- ( $ea, $key, $op, $value ) = ( "", "", "", "" );
- }
-
- $last = $current;
- } # while
-
- push @actions, [ $self->CurrentUser->loc("Incomplete query"), -1 ]
- unless ( ( $want | PAREN ) || ( $want | KEYWORD ) );
-
- push @actions, [ $self->CurrentUser->loc("Incomplete Query"), -1 ]
- unless ( $last && ( $last | PAREN ) || ( $last || VALUE ) );
-
- # This will never happen, because the parser will complain
- push @actions, [ $self->CurrentUser->loc("Mismatched parentheses"), -1 ]
- unless $depth == 1;
+eval "require RT::Report::Tickets_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Report/Tickets_Local.pm}) {
+ die $@;
};
1;
diff --git a/rt/lib/RT/Report/Tickets/Entry.pm b/rt/lib/RT/Report/Tickets/Entry.pm
index e06fa8c..49c1a92 100644
--- a/rt/lib/RT/Report/Tickets/Entry.pm
+++ b/rt/lib/RT/Report/Tickets/Entry.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,11 +45,21 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Report::Tickets::Entry;
use base qw/RT::Record/;
# XXX TODO: how the heck do we acl a report?
sub CurrentUserHasRight {1}
+eval "require RT::Report::Tickets::Entry_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Report/Tickets/Entry_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Report::Tickets::Entry_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Report/Tickets/Entry_Local.pm}) {
+ die $@;
+};
1;
diff --git a/rt/lib/RT/Rule.pm b/rt/lib/RT/Rule.pm
new file mode 100644
index 0000000..a8ca396
--- /dev/null
+++ b/rt/lib/RT/Rule.pm
@@ -0,0 +1,118 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Rule;
+use strict;
+use warnings;
+use base 'RT::Action';
+
+use constant _Stage => 'TransactionCreate';
+use constant _Queue => undef;
+
+sub Prepare {
+ my $self = shift;
+ return (0) if $self->_Queue && $self->TicketObj->QueueObj->Name ne $self->_Queue;
+ return 1;
+}
+
+sub Commit {
+ my $self = shift;
+ return(0, $self->loc("Commit Stubbed"));
+}
+
+sub Describe {
+ my $self = shift;
+ return $self->loc( $self->Description );
+}
+
+sub OnStatusChange {
+ my ($self, $value) = @_;
+
+ $self->TransactionObj->Type eq 'Status' and
+ $self->TransactionObj->Field eq 'Status' and
+ $self->TransactionObj->NewValue eq $value
+}
+
+sub RunScripAction {
+ my ($self, $scrip_action, $template, %args) = @_;
+ my $ScripAction = RT::ScripAction->new($self->CurrentUser);
+ $ScripAction->Load($scrip_action) or die ;
+
+ unless (ref($template)) {
+ # XXX: load per-queue template
+ # $template->LoadQueueTemplate( Queue => ..., ) || $template->LoadGlobalTemplate(...)
+
+ my $t = RT::Template->new($self->CurrentUser);
+ $t->Load($template) or die;
+ $template = $t;
+ }
+
+ my $action = $ScripAction->LoadAction( TransactionObj => $self->TransactionObj,
+ TicketObj => $self->TicketObj,
+ %args,
+ );
+
+ # XXX: fix template to allow additional arguments to be passed from here
+ $action->{'TemplateObj'} = $template;
+ $action->{'ScripObj'} = RT::Scrip->new($self->CurrentUser); # Stub. sendemail action really wants a scripobj available
+ $action->Prepare or return;
+ $action->Commit;
+
+}
+
+eval "require RT::Rule_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Rule_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Rule_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Rule_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/Ruleset.pm b/rt/lib/RT/Ruleset.pm
new file mode 100644
index 0000000..2684840
--- /dev/null
+++ b/rt/lib/RT/Ruleset.pm
@@ -0,0 +1,94 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Ruleset;
+use strict;
+use warnings;
+
+use base 'Class::Accessor::Fast';
+use UNIVERSAL::require;
+
+__PACKAGE__->mk_accessors(qw(Name Rules));
+
+my @RULE_SETS;
+
+sub FindAllRules {
+ my ($class, %args) = @_;
+ return [
+ grep { $_->Prepare }
+ map { $_->new(CurrentUser => $RT::SystemUser, %args) }
+ grep { $_->_Stage eq $args{Stage} }
+ map { @{$_->Rules} } @RULE_SETS
+ ];
+}
+
+sub CommitRules {
+ my ($class, $rules) = @_;
+ $_->Commit
+ for @$rules;
+}
+
+sub Add {
+ my ($class, %args) = @_;
+ for (@{$args{Rules}}) {
+ $_->require or die $UNIVERSAL::require::ERROR;
+ }
+ push @RULE_SETS, $class->new(\%args);
+}
+
+eval "require RT::Ruleset_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Ruleset_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Ruleset_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Ruleset_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/SQL.pm b/rt/lib/RT/SQL.pm
new file mode 100644
index 0000000..3074328
--- /dev/null
+++ b/rt/lib/RT/SQL.pm
@@ -0,0 +1,302 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::SQL;
+
+use strict;
+use warnings;
+
+use constant HAS_BOOLEAN_PARSER => do {
+ local $@;
+ eval { require Parse::BooleanLogic; 1 }
+};
+
+# States
+use constant VALUE => 1;
+use constant AGGREG => 2;
+use constant OP => 4;
+use constant OPEN_PAREN => 8;
+use constant CLOSE_PAREN => 16;
+use constant KEYWORD => 32;
+my @tokens = qw[VALUE AGGREGATOR OPERATOR OPEN_PAREN CLOSE_PAREN KEYWORD];
+
+use Regexp::Common qw /delimited/;
+my $re_aggreg = qr[(?i:AND|OR)];
+my $re_delim = qr[$RE{delimited}{-delim=>qq{\'\"}}];
+my $re_value = qr[\d+|NULL|$re_delim];
+my $re_keyword = qr[[{}\w\.]+|$re_delim];
+my $re_op = qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)]; # long to short
+my $re_open_paren = qr[\(];
+my $re_close_paren = qr[\)];
+
+sub ParseToArray {
+ my ($string) = shift;
+
+ my ($tree, $node, @pnodes);
+ $node = $tree = [];
+
+ my %callback;
+ $callback{'OpenParen'} = sub { push @pnodes, $node; $node = []; push @{ $pnodes[-1] }, $node };
+ $callback{'CloseParen'} = sub { $node = pop @pnodes };
+ $callback{'EntryAggregator'} = sub { push @$node, $_[0] };
+ $callback{'Condition'} = sub { push @$node, { key => $_[0], op => $_[1], value => $_[2] } };
+
+ Parse($string, \%callback);
+ return $tree;
+}
+
+sub Parse {
+ my ($string, $cb) = @_;
+ $string = '' unless defined $string;
+
+ my $want = KEYWORD | OPEN_PAREN;
+ my $last = 0;
+
+ my $depth = 0;
+ my ($key,$op,$value) = ("","","");
+
+ # order of matches in the RE is important.. op should come early,
+ # because it has spaces in it. otherwise "NOT LIKE" might be parsed
+ # as a keyword or value.
+
+ while ($string =~ /(
+ $re_aggreg
+ |$re_op
+ |$re_keyword
+ |$re_value
+ |$re_open_paren
+ |$re_close_paren
+ )/iogx )
+ {
+ my $match = $1;
+
+ # Highest priority is last
+ my $current = 0;
+ $current = OP if ($want & OP) && $match =~ /^$re_op$/io;
+ $current = VALUE if ($want & VALUE) && $match =~ /^$re_value$/io;
+ $current = KEYWORD if ($want & KEYWORD) && $match =~ /^$re_keyword$/io;
+ $current = AGGREG if ($want & AGGREG) && $match =~ /^$re_aggreg$/io;
+ $current = OPEN_PAREN if ($want & OPEN_PAREN) && $match =~ /^$re_open_paren$/io;
+ $current = CLOSE_PAREN if ($want & CLOSE_PAREN) && $match =~ /^$re_close_paren$/io;
+
+
+ unless ($current && $want & $current) {
+ my $tmp = substr($string, 0, pos($string)- length($match));
+ $tmp .= '>'. $match .'<--here'. substr($string, pos($string));
+ my $msg = "Wrong query, expecting a ". _BitmaskToString($want) ." in '$tmp'";
+ return $cb->{'Error'}->( $msg ) if $cb->{'Error'};
+ die $msg;
+ }
+
+ # State Machine:
+
+ # Parens are highest priority
+ if ( $current & OPEN_PAREN ) {
+ $cb->{'OpenParen'}->();
+ $depth++;
+ $want = KEYWORD | OPEN_PAREN;
+ }
+ elsif ( $current & CLOSE_PAREN ) {
+ $cb->{'CloseParen'}->();
+ $depth--;
+ $want = AGGREG;
+ $want |= CLOSE_PAREN if $depth;
+ }
+ elsif ( $current & AGGREG ) {
+ $cb->{'EntryAggregator'}->( $match );
+ $want = KEYWORD | OPEN_PAREN;
+ }
+ elsif ( $current & KEYWORD ) {
+ $key = $match;
+ $want = OP;
+ }
+ elsif ( $current & OP ) {
+ $op = $match;
+ $want = VALUE;
+ }
+ elsif ( $current & VALUE ) {
+ $value = $match;
+
+ # Remove surrounding quotes and unescape escaped
+ # characters from $key, $match
+ for ( $key, $value ) {
+ if ( /$re_delim/o ) {
+ substr($_,0,1) = "";
+ substr($_,-1,1) = "";
+ }
+ s!\\(.)!$1!g;
+ }
+
+ $cb->{'Condition'}->( $key, $op, $value );
+
+ ($key,$op,$value) = ("","","");
+ $want = AGGREG;
+ $want |= CLOSE_PAREN if $depth;
+ } else {
+ my $msg = "Query parser is lost";
+ return $cb->{'Error'}->( $msg ) if $cb->{'Error'};
+ die $msg;
+ }
+
+ $last = $current;
+ } # while
+
+ unless( !$last || $last & (CLOSE_PAREN | VALUE) ) {
+ my $msg = "Incomplete query, last element ("
+ . _BitmaskToString($last)
+ . ") is not CLOSE_PAREN or VALUE in '$string'";
+ return $cb->{'Error'}->( $msg ) if $cb->{'Error'};
+ die $msg;
+ }
+
+ if( $depth ) {
+ my $msg = "Incomplete query, $depth paren(s) isn't closed in '$string'";
+ return $cb->{'Error'}->( $msg ) if $cb->{'Error'};
+ die $msg;
+ }
+}
+
+sub _BitmaskToString {
+ my $mask = shift;
+
+ my @res;
+ for( my $i = 0; $i<@tokens; $i++ ) {
+ next unless $mask & (1<<$i);
+ push @res, $tokens[$i];
+ }
+
+ my $tmp = join ', ', splice @res, 0, -1;
+ unshift @res, $tmp if $tmp;
+ return join ' or ', @res;
+}
+
+sub PossibleCustomFields {
+ my %args = (Query => undef, CurrentUser => undef, @_);
+
+ my $cfs = RT::CustomFields->new( $args{'CurrentUser'} );
+ my $ocf_alias = $cfs->_OCFAlias;
+ $cfs->LimitToLookupType( 'RT::Queue-RT::Ticket' );
+
+ my $tree;
+ if ( HAS_BOOLEAN_PARSER ) {
+ $tree = Parse::BooleanLogic->filter(
+ RT::SQL::ParseToArray( $args{'Query'} ),
+ sub { $_[0]->{'key'} =~ /^Queue(?:\z|\.)/ },
+ );
+ }
+ if ( $tree ) {
+ my $clause = 'QUEUES';
+ my $queue_alias = $cfs->Join(
+ TYPE => 'LEFT',
+ ALIAS1 => $ocf_alias,
+ FIELD1 => 'ObjectId',
+ TABLE2 => 'Queues',
+ FIELD2 => 'id',
+ );
+ $cfs->_OpenParen($clause);
+ $cfs->Limit(
+ SUBCLAUSE => $clause,
+ ENTRYAGGREGATOR => 'AND',
+ ALIAS => $ocf_alias,
+ FIELD => 'ObjectId',
+ VALUE => 0,
+ );
+ $cfs->_OpenParen($clause);
+
+ my $ea = 'OR';
+ Parse::BooleanLogic->walk(
+ $tree,
+ {
+ open_paren => sub { $cfs->_OpenParen($clause) },
+ close_paren => sub { $cfs->_CloseParen($clause) },
+ operator => sub { $ea = $_[0] },
+ operand => sub {
+ my ($key, $op, $value) = @{$_[0]}{'key', 'op', 'value'};
+ my (undef, @sub) = split /\./, $key;
+ push @sub, $value =~ /\D/? 'Name' : 'id'
+ unless @sub;
+
+ die "Couldn't handle ". join('.', 'Queue', @sub) if @sub > 1;
+ $cfs->Limit(
+ SUBCLAUSE => $clause,
+ ENTRYAGGREGATOR => $ea,
+ ALIAS => $queue_alias,
+ FIELD => $sub[0],
+ OPERATOR => $op,
+ VALUE => $value,
+ );
+ },
+ }
+ );
+
+ $cfs->_CloseParen($clause);
+ $cfs->_CloseParen($clause);
+ } else {
+ $cfs->Limit(
+ ENTRYAGGREGATOR => 'AND',
+ ALIAS => $ocf_alias,
+ FIELD => 'ObjectId',
+ OPERATOR => 'IS NOT',
+ VALUE => 'NULL',
+ );
+ }
+ return $cfs;
+}
+
+
+eval "require RT::SQL_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/SQL_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::SQL_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/SQL_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/lib/RT/SavedSearch.pm b/rt/lib/RT/SavedSearch.pm
index a694d7a..5182740 100644
--- a/rt/lib/RT/SavedSearch.pm
+++ b/rt/lib/RT/SavedSearch.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,9 +45,10 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
- RT::SavedSearch - an API for saving and retrieving search form values.
+RT::SavedSearch - an API for saving and retrieving search form values.
=head1 SYNOPSIS
@@ -55,223 +56,62 @@
=head1 DESCRIPTION
- SavedSearch is an object that can belong to either an RT::User or an
- RT::Group. It consists of an ID, a description, and a number of
- search parameters.
-
-=head1 METHODS
-
-=begin testing
-
-use_ok(RT::SavedSearch);
-
-# Real tests are in lib/t/20savedsearch.t
-
-=end testing
+SavedSearch is an object based on L<RT::SharedSetting> that can belong
+to either an L<RT::User> or an L<RT::Group>. It consists of an ID,
+a description, and a number of search parameters.
=cut
package RT::SavedSearch;
-use RT::Base;
-use RT::Attribute;
-
use strict;
use warnings;
-use base qw/RT::Base/;
+use base qw/RT::SharedSetting/;
-sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- $self->{'Id'} = 0;
- bless ($self, $class);
- $self->CurrentUser(@_);
- return $self;
-}
+=head1 METHODS
-=head2 Load
+=head2 ObjectName
-Takes a privacy specification, an object ID, and a search ID. Loads
-the given search ID if it belongs to the stated user or group.
-Returns a tuple of status and message, where status is true on
-success.
+An object of this class is called "search"
=cut
-sub Load {
- my $self = shift;
- my ($privacy, $id) = @_;
- my $object = $self->_GetObject($privacy);
-
- if ($object) {
- $self->{'Attribute'} = $object->Attributes->WithId($id);
- if ($self->{'Attribute'}->Id) {
- $self->{'Id'} = $self->{'Attribute'}->Id;
- $self->{'Privacy'} = $privacy;
- $self->{'Type'} = $self->{'Attribute'}->SubValue('SearchType');
- return (1, $self->loc("Loaded search [_1]", $self->Name));
- } else {
- $RT::Logger->error("Could not load attribute " . $id
- . " for object " . $privacy);
- return (0, $self->loc("Search attribute load failure"));
- }
- } else {
- $RT::Logger->warning("Could not load object $privacy when loading search");
- return (0, $self->loc("Could not load object for [_1]", $privacy));
- }
-
-}
-
-=head2 Save
-
-Takes a privacy, an optional type, a name, and a hashref containing the
-search parameters. Saves the given parameters to the appropriate user/
-group object, and loads the resulting search. Returns a tuple of status
-and message, where status is true on success. Defaults are:
- Privacy: undef
- Type: Ticket
- Name: "new search"
- SearchParams: (empty hash)
-
-=cut
+sub ObjectName { "search" }
-sub Save {
+sub PostLoad {
my $self = shift;
- my %args = ('Privacy' => 'RT::User-' . $self->CurrentUser->Id,
- 'Type' => 'Ticket',
- 'Name' => 'new search',
- 'SearchParams' => {},
- @_);
- my $privacy = $args{'Privacy'};
- my $type = $args{'Type'};
- my $name = $args{'Name'};
- my %params = %{$args{'SearchParams'}};
+ $self->{'Type'} = $self->{'Attribute'}->SubValue('SearchType');
+}
- $params{'SearchType'} = $type;
- my $object = $self->_GetObject($privacy);
+sub SaveAttribute {
+ my $self = shift;
+ my $object = shift;
+ my $args = shift;
- return (0, $self->loc("Failed to load object for [_1]", $privacy))
- unless $object;
+ my $params = $args->{'SearchParams'};
- if ( $object->isa('RT::System') ) {
- return ( 0, $self->loc("No permission to save system-wide searches") )
- unless $self->CurrentUser->HasRight(
- Object => $RT::System,
- Right => 'SuperUser'
- );
- }
+ $params->{'SearchType'} = $args->{'Type'} || 'Ticket';
- my ( $att_id, $att_msg ) = $object->AddAttribute(
+ return $object->AddAttribute(
'Name' => 'SavedSearch',
- 'Description' => $name,
- 'Content' => \%params
+ 'Description' => $args->{'Name'},
+ 'Content' => $params,
);
- if ($att_id) {
- $self->{'Attribute'} = $object->Attributes->WithId($att_id);
- $self->{'Id'} = $att_id;
- $self->{'Privacy'} = $privacy;
- $self->{'Type'} = $type;
- return ( 1, $self->loc( "Saved search [_1]", $name ) );
- }
- else {
- $RT::Logger->error("SavedSearch save failure: $att_msg");
- return ( 0, $self->loc("Failed to create search attribute") );
- }
}
-=head2 Update
-
-Updates the parameters of an existing search. Takes the arguments
-"Name" and "SearchParams"; SearchParams should be a hashref containing
-the new parameters of the search. If Name is not specified, the name
-will not be changed.
-=cut
-
-sub Update {
+sub UpdateAttribute {
my $self = shift;
- my %args = ('Name' => '',
- 'SearchParams' => {},
- @_);
-
- return(0, $self->loc("No search loaded")) unless $self->Id;
- return(0, $self->loc("Could not load search attribute"))
- unless $self->{'Attribute'}->Id;
- my ($status, $msg) = $self->{'Attribute'}->SetSubValues(%{$args{'SearchParams'}});
- if ($status && $args{'Name'}) {
- ($status, $msg) = $self->{'Attribute'}->SetDescription($args{'Name'});
- }
- return ($status, $self->loc("Search update: [_1]", $msg));
-}
-
-=head2 Delete
-
-Deletes the existing search. Returns a tuple of status and message,
-where status is true upon success.
+ my $args = shift;
+ my $params = $args->{'SearchParams'} || {};
-=cut
-
-sub Delete {
- my $self = shift;
+ my ($status, $msg) = $self->{'Attribute'}->SetSubValues(%$params);
- my ($status, $msg) = $self->{'Attribute'}->Delete;
- if ($status) {
- return (1, $self->loc("Deleted search"));
- } else {
- return (0, $self->loc("Delete failed: [_1]", $msg));
+ if ($status && $args->{'Name'}) {
+ ($status, $msg) = $self->{'Attribute'}->SetDescription($args->{'Name'});
}
-}
-
-
-### Accessor methods
-
-=head2 Name
-
-Returns the name of the search.
-
-=cut
-
-sub Name {
- my $self = shift;
- return unless ref($self->{'Attribute'}) eq 'RT::Attribute';
- return $self->{'Attribute'}->Description();
-}
-
-=head2 GetParameter
-
-Returns the given named parameter of the search, e.g. 'Query', 'Format'.
-
-=cut
-
-sub GetParameter {
- my $self = shift;
- my $param = shift;
- return unless ref($self->{'Attribute'}) eq 'RT::Attribute';
- return $self->{'Attribute'}->SubValue($param);
-}
-
-=head2 Id
-Returns the numerical id of this search.
-
-=cut
-
-sub Id {
- my $self = shift;
- return $self->{'Id'};
-}
-
-=head2 Privacy
-
-Returns the principal object to whom this search belongs, in a string
-"<class>-<id>", e.g. "RT::Group-16".
-
-=cut
-
-sub Privacy {
- my $self = shift;
- return $self->{'Privacy'};
+ return ($status, $msg);
}
=head2 Type
@@ -286,60 +126,6 @@ sub Type {
return $self->{'Type'};
}
-### Internal methods
-
-sub _load_privacy_object {
- my ($self, $obj_type, $obj_id) = @_;
- if ( $obj_type eq 'RT::User' && $obj_id == $self->CurrentUser->Id) {
- return $self->CurrentUser->UserObj;
- }
- elsif ($obj_type eq 'RT::Group') {
- my $group = RT::Group->new($self->CurrentUser);
- $group->Load($obj_id);
- return $group;
- }
- elsif ($obj_type eq 'RT::System') {
- return RT::System->new($self->CurrentUser);
- }
-
- $RT::Logger->error("Tried to load a search belonging to an $obj_type, which is neither a user nor a group");
- return undef;
-}
-
-# _GetObject: helper routine to load the correct object whose parameters
-# have been passed.
-
-sub _GetObject {
- my $self = shift;
- my $privacy = shift;
-
- my ($obj_type, $obj_id) = split(/\-/, $privacy);
-
- my $object = $self->_load_privacy_object($obj_type, $obj_id);
-
- unless (ref($object) eq $obj_type) {
- $RT::Logger->error("Could not load object of type $obj_type with ID $obj_id");
- return undef;
- }
-
- # Do not allow the loading of a user object other than the current
- # user, or of a group object of which the current user is not a member.
-
- if ($obj_type eq 'RT::User'
- && $object->Id != $self->CurrentUser->UserObj->Id()) {
- $RT::Logger->debug("Permission denied for user other than self");
- return undef;
- }
- if ($obj_type eq 'RT::Group' &&
- !$object->HasMemberRecursively($self->CurrentUser->PrincipalObj)) {
- $RT::Logger->debug("Permission denied, ".$self->CurrentUser->Name.
- " is not a member of group");
- return undef;
- }
-
- return $object;
-}
-
eval "require RT::SavedSearch_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearch_Vendor.pm});
eval "require RT::SavedSearch_Local";
diff --git a/rt/lib/RT/SavedSearches.pm b/rt/lib/RT/SavedSearches.pm
index a981904..0848fc8 100644
--- a/rt/lib/RT/SavedSearches.pm
+++ b/rt/lib/RT/SavedSearches.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::SavedSearches - a pseudo-collection for SavedSearch objects.
@@ -61,24 +62,15 @@
=head1 METHODS
-=begin testing
-
-use_ok(RT::SavedSearches);
-
-# The real tests are in lib/t/20savedsearch.t
-
-=end testing
=cut
package RT::SavedSearches;
-use RT::Base;
use RT::SavedSearch;
use strict;
-use vars qw/@ISA/;
-@ISA = qw/RT::Base/;
+use base 'RT::Base';
sub new {
my $proto = shift;
diff --git a/rt/lib/RT/Scrip.pm b/rt/lib/RT/Scrip.pm
index 11b8d94..ecc47e9 100755
--- a/rt/lib/RT/Scrip.pm
+++ b/rt/lib/RT/Scrip.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ScripAction.pm b/rt/lib/RT/ScripAction.pm
index daa74f3..87a2613 100755
--- a/rt/lib/RT/ScripAction.pm
+++ b/rt/lib/RT/ScripAction.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ScripAction_Overlay.pm b/rt/lib/RT/ScripAction_Overlay.pm
index e99ff14..e6efc3d 100644
--- a/rt/lib/RT/ScripAction_Overlay.pm
+++ b/rt/lib/RT/ScripAction_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::ScripAction - RT Action object
@@ -60,11 +61,6 @@ This module should never be called directly by client code. it's an internal mod
should only be accessed through exported APIs in other modules.
-=begin testing
-
-ok (require RT::ScripAction);
-
-=end testing
=head1 METHODS
diff --git a/rt/lib/RT/ScripActions.pm b/rt/lib/RT/ScripActions.pm
index b186fb8..1f6fb98 100755
--- a/rt/lib/RT/ScripActions.pm
+++ b/rt/lib/RT/ScripActions.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ScripActions_Overlay.pm b/rt/lib/RT/ScripActions_Overlay.pm
index 97f7750..1fcf773 100644
--- a/rt/lib/RT/ScripActions_Overlay.pm
+++ b/rt/lib/RT/ScripActions_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::ScripActions - Collection of Action objects
@@ -57,11 +58,6 @@
=head1 DESCRIPTION
-=begin testing
-
-ok (require RT::ScripActions);
-
-=end testing
=head1 METHODS
diff --git a/rt/lib/RT/ScripCondition.pm b/rt/lib/RT/ScripCondition.pm
index 3303398..072a24a 100755
--- a/rt/lib/RT/ScripCondition.pm
+++ b/rt/lib/RT/ScripCondition.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ScripCondition_Overlay.pm b/rt/lib/RT/ScripCondition_Overlay.pm
index 30146ec..feecbc6 100644
--- a/rt/lib/RT/ScripCondition_Overlay.pm
+++ b/rt/lib/RT/ScripCondition_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::ScripCondition - RT scrip conditional
@@ -60,11 +61,6 @@ This module should never be called directly by client code. it's an internal mod
should only be accessed through exported APIs in other modules.
-=begin testing
-
-ok (require RT::ScripCondition);
-
-=end testing
=head1 METHODS
diff --git a/rt/lib/RT/ScripConditions.pm b/rt/lib/RT/ScripConditions.pm
index 623ba10..43ea86d 100755
--- a/rt/lib/RT/ScripConditions.pm
+++ b/rt/lib/RT/ScripConditions.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/ScripConditions_Overlay.pm b/rt/lib/RT/ScripConditions_Overlay.pm
index 153eb19..99a7425 100644
--- a/rt/lib/RT/ScripConditions_Overlay.pm
+++ b/rt/lib/RT/ScripConditions_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::ScripConditions - Collection of Action objects
@@ -58,11 +59,6 @@
-=begin testing
-
-ok (require RT::ScripConditions);
-
-=end testing
=head1 METHODS
diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm
index cf66907..3310289 100644
--- a/rt/lib/RT/Scrip_Overlay.pm
+++ b/rt/lib/RT/Scrip_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Scrip - an RT Scrip object
@@ -58,45 +59,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Scrip);
-
-
-my $q = RT::Queue->new($RT::SystemUser);
-$q->Create(Name => 'ScripTest');
-ok($q->Id, "Created a scriptest queue");
-
-my $s1 = RT::Scrip->new($RT::SystemUser);
-my ($val, $msg) =$s1->Create( Queue => $q->Id,
- ScripAction => 'User Defined',
- ScripCondition => 'User Defined',
- CustomIsApplicableCode => 'if ($self->TicketObj->Subject =~ /fire/) { return (1);} else { return(0)}',
- CustomPrepareCode => 'return 1',
- CustomCommitCode => '$self->TicketObj->SetPriority("87");',
- Template => 'Blank'
- );
-ok($val,$msg);
-
-my $ticket = RT::Ticket->new($RT::SystemUser);
-my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id,
- Subject => "hair on fire",
- );
-ok($tv, $tm);
-
-ok ($ticket->Priority == '87', "Ticket priority is set right");
-
-
-my $ticket2 = RT::Ticket->new($RT::SystemUser);
-my ($t2v,$t2tv,$t2m) = $ticket2->Create(Queue => $q->Id,
- Subject => "hair in water",
- );
-ok($t2v, $t2m);
-
-ok ($ticket2->Priority != '87', "Ticket priority is set right");
-
-
-=end testing
=cut
@@ -146,8 +108,8 @@ sub Create {
unless ( $args{'Queue'} ) {
unless ( $self->CurrentUser->HasRight( Object => $RT::System,
- Right => 'ModifyScrips' )
- ) {
+ Right => 'ModifyScrips' ) )
+ {
return ( 0, $self->loc('Permission Denied') );
}
$args{'Queue'} = 0; # avoid undef sneaking in
@@ -161,7 +123,7 @@ sub Create {
unless ( $QueueObj->CurrentUserHasRight('ModifyScrips') ) {
return ( 0, $self->loc('Permission Denied') );
}
- $args{'Queue'} = $QueueObj->id();
+ $args{'Queue'} = $QueueObj->id;
}
#TODO +++ validate input
@@ -171,7 +133,7 @@ sub Create {
unless $args{'ScripAction'};
my $action = RT::ScripAction->new( $self->CurrentUser );
$action->Load( $args{'ScripAction'} );
- return ( 0, $self->loc( "Action [_1] not found", $args{'ScripAction'} ) )
+ return ( 0, $self->loc( "Action '[_1]' not found", $args{'ScripAction'} ) )
unless $action->Id;
require RT::Template;
@@ -179,7 +141,7 @@ sub Create {
unless $args{'Template'};
my $template = RT::Template->new( $self->CurrentUser );
$template->Load( $args{'Template'} );
- return ( 0, $self->loc('Template not found') )
+ return ( 0, $self->loc( "Template '[_1]' not found", $args{'Template'} ) )
unless $template->Id;
require RT::ScripCondition;
@@ -187,7 +149,7 @@ sub Create {
unless $args{'ScripCondition'};
my $condition = RT::ScripCondition->new( $self->CurrentUser );
$condition->Load( $args{'ScripCondition'} );
- return ( 0, $self->loc('Condition not found') )
+ return ( 0, $self->loc( "Condition '[_1]' not found", $args{'ScripCondition'} ) )
unless $condition->Id;
my ( $id, $msg ) = $self->SUPER::Create(
@@ -281,22 +243,16 @@ sub ActionObj {
=head2 ConditionObj
-Retuns an RT::ScripCondition object with this Scrip's IsApplicable
+Retuns an L<RT::ScripCondition> object with this Scrip's IsApplicable
=cut
sub ConditionObj {
my $self = shift;
- unless ( defined $self->{'ScripConditionObj'} ) {
- require RT::ScripCondition;
- $self->{'ScripConditionObj'} =
- RT::ScripCondition->new( $self->CurrentUser );
- if ( $self->ScripCondition ) {
- $self->{'ScripConditionObj'}->Load( $self->ScripCondition );
- }
- }
- return ( $self->{'ScripConditionObj'} );
+ my $res = RT::ScripCondition->new( $self->CurrentUser );
+ $res->Load( $self->ScripCondition );
+ return $res;
}
# }}}
@@ -443,6 +399,7 @@ sub IsApplicable {
}
}
};
+
if ($@) {
$RT::Logger->error( "Scrip IsApplicable " . $self->Id . " died. - " . $@ );
return (undef);
diff --git a/rt/lib/RT/Scrips.pm b/rt/lib/RT/Scrips.pm
index 684012f..02d1019 100755
--- a/rt/lib/RT/Scrips.pm
+++ b/rt/lib/RT/Scrips.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Scrips_Overlay.pm b/rt/lib/RT/Scrips_Overlay.pm
index 8c6e1d3..df24b3c 100644
--- a/rt/lib/RT/Scrips_Overlay.pm
+++ b/rt/lib/RT/Scrips_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Scrips - a collection of RT Scrip objects
@@ -59,11 +60,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Scrips);
-
-=end testing
=cut
@@ -191,6 +187,11 @@ sub Commit {
foreach my $scrip (@{$self->Prepared}) {
+ $RT::Logger->debug(
+ "Committing scrip #". $scrip->id
+ ." on txn #". $self->{'TransactionObj'}->id
+ ." of ticket #". $self->{'TicketObj'}->id
+ );
$scrip->Commit( TicketObj => $self->{'TicketObj'},
TransactionObj => $self->{'TransactionObj'} );
@@ -288,7 +289,7 @@ sub _SetupSourceObjects {
else {
$self->{'TicketObj'} = RT::Ticket->new( $self->CurrentUser );
$self->{'TicketObj'}->Load( $args{'Ticket'} )
- || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n");
+ || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}");
}
if ( ( $self->{'TransactionObj'} = $args{'TransactionObj'} ) ) {
@@ -297,7 +298,7 @@ sub _SetupSourceObjects {
else {
$self->{'TransactionObj'} = RT::Transaction->new( $self->CurrentUser );
$self->{'TransactionObj'}->Load( $args{'Transaction'} )
- || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}\n");
+ || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}");
}
}
@@ -360,9 +361,16 @@ sub _FindScrips {
);
# Promise some kind of ordering
- $self->OrderBy( FIELD => 'description' );
+ $self->OrderBy( FIELD => 'Description' );
+
+ # we call Count below, but later we always do search
+ # so just do search and get count from results
+ $self->_DoSearch if $self->{'must_redo_search'};
- $RT::Logger->debug("Found ".$self->Count. " scrips");
+ $RT::Logger->debug(
+ "Found ". $self->Count ." scrips for $args{'Stage'} stage"
+ ." with applicable type(s) $args{'Type'}"
+ );
}
# }}}
diff --git a/rt/lib/RT/Search.pm b/rt/lib/RT/Search.pm
new file mode 100755
index 0000000..fc56427
--- /dev/null
+++ b/rt/lib/RT/Search.pm
@@ -0,0 +1,148 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+ RT::Search - generic baseclass for searches;
+
+=head1 SYNOPSIS
+
+ use RT::Search;
+ my $tickets = RT::Tickets->new($CurrentUser);
+ my $foo = RT::Search->new(Argument => $arg,
+ TicketsObj => $tickets);
+ $foo->Prepare();
+ while ( my $ticket = $foo->Next ) {
+ # Do something with each ticket we've found
+ }
+
+
+=head1 DESCRIPTION
+
+
+=head1 METHODS
+
+
+
+
+=cut
+
+package RT::Search;
+
+use strict;
+
+# {{{ sub new
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->_Init(@_);
+ return $self;
+}
+# }}}
+
+# {{{ sub _Init
+sub _Init {
+ my $self = shift;
+ my %args = (
+ TicketsObj => undef,
+ Argument => undef,
+ @_ );
+
+ $self->{'TicketsObj'} = $args{'TicketsObj'};
+ $self->{'Argument'} = $args{'Argument'};
+}
+# }}}
+
+# {{{ sub Argument
+
+=head2 Argument
+
+Return the optional argument associated with this Search
+
+=cut
+
+sub Argument {
+ my $self = shift;
+ return($self->{'Argument'});
+}
+# }}}
+
+
+=head2 TicketsObj
+
+Return the Tickets object passed into this search
+
+=cut
+
+sub TicketsObj {
+ my $self = shift;
+ return($self->{'TicketsObj'});
+}
+
+# {{{ sub Describe
+sub Describe {
+ my $self = shift;
+ return ($self->loc("No description for [_1]", ref $self));
+}
+# }}}
+
+# {{{ sub Prepare
+sub Prepare {
+ my $self = shift;
+ return(1);
+}
+# }}}
+
+eval "require RT::Search_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search_Vendor.pm});
+eval "require RT::Search_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Search/ActiveTicketsInQueue.pm b/rt/lib/RT/Search/ActiveTicketsInQueue.pm
index 3336ed7..f948ad7 100644
--- a/rt/lib/RT/Search/ActiveTicketsInQueue.pm
+++ b/rt/lib/RT/Search/ActiveTicketsInQueue.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Search::ActiveTicketsInQueue
@@ -58,11 +59,6 @@ Find all active tickets in the queue named in the argument passed in
=head1 METHODS
-=begin testing
-
-ok (require RT::Search::Generic);
-
-=end testing
=cut
@@ -70,7 +66,7 @@ ok (require RT::Search::Generic);
package RT::Search::ActiveTicketsInQueue;
use strict;
-use base qw(RT::Search::Generic);
+use base qw(RT::Search);
# {{{ sub Describe
diff --git a/rt/lib/RT/Search/FromSQL.pm b/rt/lib/RT/Search/FromSQL.pm
index 6e4708f..3913713 100644
--- a/rt/lib/RT/Search/FromSQL.pm
+++ b/rt/lib/RT/Search/FromSQL.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Search::FromSQL
@@ -58,11 +59,6 @@ Find all tickets described by the SQL statement passed as an argument
=head1 METHODS
-=begin testing
-
-ok (require RT::Search::Generic);
-
-=end testing
=cut
@@ -70,7 +66,7 @@ ok (require RT::Search::Generic);
package RT::Search::FromSQL;
use strict;
-use base qw(RT::Search::Generic);
+use base qw(RT::Search);
=head2 Describe
diff --git a/rt/lib/RT/Search/Generic.pm b/rt/lib/RT/Search/Generic.pm
index 68940de..c36cdb1 100644
--- a/rt/lib/RT/Search/Generic.pm
+++ b/rt/lib/RT/Search/Generic.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,108 +45,36 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
- RT::Search::Generic - ;
+ RT::Search::Generic - deprecated, see RT::Search
=head1 SYNOPSIS
- use RT::Search::Generic;
- my $tickets = RT::Tickets->new($CurrentUser);
- my $foo = RT::Search::Generic->new(Argument => $arg,
- TicketsObj => $tickets);
- $foo->Prepare();
- while ( my $ticket = $foo->Next ) {
- # Do something with each ticket we've found
- }
-
+ use RT::Search::Generic;
=head1 DESCRIPTION
+This module is provided only for backwards compatibility.
=head1 METHODS
-=begin testing
-
-ok (require RT::Search::Generic);
-
-=end testing
-
-
=cut
-package RT::Search::Generic;
-
use strict;
-
-# {{{ sub new
-sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- bless ($self, $class);
- $self->_Init(@_);
- return $self;
-}
-# }}}
-
-# {{{ sub _Init
-sub _Init {
- my $self = shift;
- my %args = (
- TicketsObj => undef,
- Argument => undef,
- @_ );
-
- $self->{'TicketsObj'} = $args{'TicketsObj'};
- $self->{'Argument'} = $args{'Argument'};
-}
-# }}}
-
-# {{{ sub Argument
-
-=head2 Argument
-
-Return the optional argument associated with this Search
-
-=cut
-
-sub Argument {
- my $self = shift;
- return($self->{'Argument'});
-}
-# }}}
-
-
-=head2 TicketsObj
-
-Return the Tickets object passed into this search
-
-=cut
-
-sub TicketsObj {
- my $self = shift;
- return($self->{'TicketsObj'});
-}
-
-# {{{ sub Describe
-sub Describe {
- my $self = shift;
- return ($self->loc("No description for [_1]", ref $self));
-}
-# }}}
-
-# {{{ sub Prepare
-sub Prepare {
- my $self = shift;
- return(1);
-}
-# }}}
+use warnings;
+package RT::Search::Generic;
+use base 'RT::Search';
eval "require RT::Search::Generic_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Generic_Vendor.pm});
+warn "RT::Search::Generic has become RT::Search. Please adjust your RT::Search::Generic_Vendor file at " . $INC{"RT/Search/Generic_Vendor.pm"} if !$@;
+
eval "require RT::Search::Generic_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Generic_Local.pm});
+warn "RT::Search::Generic has become RT::Search. Please adjust your RT::Search::Generic_Local file at " . $INC{"RT/Search/Generic_Local.pm"} if !$@;
1;
+
diff --git a/rt/lib/RT/Search/Googleish.pm b/rt/lib/RT/Search/Googleish.pm
index c784b1b..07e1904 100644
--- a/rt/lib/RT/Search/Googleish.pm
+++ b/rt/lib/RT/Search/Googleish.pm
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -46,6 +46,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Search::Googlish
@@ -59,11 +60,6 @@ Use the argument passed in as a "Google-style" set of keywords
=head1 METHODS
-=begin testing
-
-ok (require RT::Search::Generic);
-
-=end testing
=cut
@@ -71,8 +67,11 @@ ok (require RT::Search::Generic);
package RT::Search::Googleish;
use strict;
-use base qw(RT::Search::Generic);
+use warnings;
+use base qw(RT::Search);
+use Regexp::Common qw/delimited/;
+my $re_delim = qr[$RE{delimited}{-delim=>qq{\'\"}}];
# sub _Init {{{
sub _Init {
@@ -95,7 +94,10 @@ sub Describe {
sub QueryToSQL {
my $self = shift;
my $query = shift || $self->Argument;
- my @keywords = split /\s+/, $query;
+
+ my @keywords = grep length, map { s/^\s+//; s/\s+$//; $_ }
+ split /((?:fulltext:)?$re_delim|\s+)/o, $query;
+
my (
@tql_clauses, @owner_clauses, @queue_clauses,
@user_clauses, @id_clauses, @status_clauses
@@ -104,11 +106,21 @@ sub QueryToSQL {
for my $key (@keywords) {
# Is this a ticket number? If so, go to it.
+ # But look into subject as well
if ( $key =~ m/^\d+$/ ) {
- push @id_clauses, "id = '$key'";
+ push @id_clauses, "id = '$key'", "Subject LIKE '$key'";
+ }
+
+ # if it's quoted string then search it "as is" in subject or fulltext
+ elsif ( $key =~ /^(fulltext:)?($re_delim)$/io ) {
+ if ( $1 ) {
+ push @tql_clauses, "Content LIKE $2";
+ } else {
+ push @tql_clauses, "Subject LIKE $2";
+ }
}
- elsif ($key =~ /^fulltext:(.*?)$/i) {
+ elsif ( $key =~ /^fulltext:(.*?)$/i ) {
$key = $1;
$key =~ s/['\\].*//g;
push @tql_clauses, "Content LIKE '$key'";
@@ -128,12 +140,13 @@ sub QueryToSQL {
push @status_clauses, "Status = '" . $key . "'";
}
- # Is there a owner named $key?
# Is there a queue named $key?
elsif ( $Queue = RT::Queue->new( $self->TicketsObj->CurrentUser )
and $Queue->Load($key) )
{
- push @queue_clauses, "Queue = '" . $Queue->Name . "'";
+ my $quoted_queue = $Queue->Name;
+ $quoted_queue =~ s/'/\\'/g;
+ push @queue_clauses, "Queue = '$quoted_queue'";
}
# Is there a owner named $key?
@@ -155,12 +168,18 @@ sub QueryToSQL {
for my $queue (@{ $self->{'Queues'} }) {
my $QueueObj = RT::Queue->new($self->TicketsObj->CurrentUser);
$QueueObj->Load($queue) or next;
- push @queue_clauses, "Queue = '" . $QueueObj->Name . "'";
+ my $quoted_queue = $QueueObj->Name;
+ $quoted_queue =~ s/'/\\'/g;
+ push @queue_clauses, "Queue = '$quoted_queue'";
}
push @tql_clauses, join( " OR ", sort @id_clauses );
push @tql_clauses, join( " OR ", sort @owner_clauses );
- push @tql_clauses, join( " OR ", sort @status_clauses );
+ if ( ! @status_clauses ) {
+ push @tql_clauses, join( " OR ", map "Status = '$_'", RT::Queue->ActiveStatusArray());
+ } else {
+ push @tql_clauses, join( " OR ", sort @status_clauses );
+ }
push @tql_clauses, join( " OR ", sort @user_clauses );
push @tql_clauses, join( " OR ", sort @queue_clauses );
@tql_clauses = grep { $_ ? $_ = "( $_ )" : undef } @tql_clauses;
@@ -173,7 +192,7 @@ sub Prepare {
my $self = shift;
my $tql = $self->QueryToSQL($self->Argument);
- $RT::Logger->crit($tql);
+ $RT::Logger->debug($tql);
$self->TicketsObj->FromSQL($tql);
return(1);
diff --git a/rt/lib/RT/SearchBuilder.pm b/rt/lib/RT/SearchBuilder.pm
index 62ae13e..f6b3571 100644
--- a/rt/lib/RT/SearchBuilder.pm
+++ b/rt/lib/RT/SearchBuilder.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::SearchBuilder - a baseclass for RT collection objects
@@ -57,11 +58,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::SearchBuilder);
-
-=end testing
=cut
@@ -72,10 +68,10 @@ use RT::Base;
use DBIx::SearchBuilder "1.40";
use strict;
-use vars qw(@ISA);
-@ISA = qw(DBIx::SearchBuilder RT::Base);
+use warnings;
+
+use base qw(DBIx::SearchBuilder RT::Base);
-# {{{ sub _Init
sub _Init {
my $self = shift;
@@ -88,13 +84,10 @@ sub _Init {
}
$self->SUPER::_Init( 'Handle' => $RT::Handle);
}
-# }}}
-
-# {{{ sub LimitToEnabled
=head2 LimitToEnabled
-Only find items that haven\'t been disabled
+Only find items that haven't been disabled
=cut
@@ -105,9 +98,6 @@ sub LimitToEnabled {
VALUE => '0',
OPERATOR => '=' );
}
-# }}}
-
-# {{{ sub LimitToDisabled
=head2 LimitToDeleted
@@ -124,9 +114,6 @@ sub LimitToDeleted {
VALUE => '1'
);
}
-# }}}
-
-# {{{ sub LimitAttribute
=head2 LimitAttribute PARAMHASH
@@ -140,17 +127,17 @@ If NULL is set, also select rows without the named Attribute.
=cut
-my %Negate = qw(
- = !=
- != =
- > <=
- < >=
- >= <
- <= >
- LIKE NOT LIKE
- NOT LIKE LIKE
- IS IS NOT
- IS NOT IS
+my %Negate = (
+ '=' => '!=',
+ '!=' => '=',
+ '>' => '<=',
+ '<' => '>=',
+ '>=' => '<',
+ '<=' => '>',
+ 'LIKE' => 'NOT LIKE',
+ 'NOT LIKE' => 'LIKE',
+ 'IS' => 'IS NOT',
+ 'IS NOT' => 'IS',
);
sub LimitAttribute {
@@ -217,9 +204,6 @@ sub LimitAttribute {
VALUE => 'NULL',
) if $args{NULL};
}
-# }}}
-
-# {{{ sub LimitCustomField
=head2 LimitCustomField
@@ -278,8 +262,6 @@ sub LimitCustomField {
);
}
-# {{{ sub FindAllRows
-
=head2 FindAllRows
Find all matching rows, regardless of whether they are disabled or not
@@ -290,8 +272,6 @@ sub FindAllRows {
shift->{'find_disabled_rows'} = 1;
}
-# {{{ sub Limit
-
=head2 Limit PARAMHASH
This Limit sub calls SUPER::Limit, but defaults "CASESENSITIVE" to 1, thus
@@ -308,10 +288,6 @@ sub Limit {
return $self->SUPER::Limit(%args);
}
-# }}}
-
-# {{{ sub ItemsOrderBy
-
=head2 ItemsOrderBy
If it has a SortOrder attribute, sort the array by SortOrder.
@@ -335,55 +311,21 @@ sub ItemsOrderBy {
return $items;
}
-# }}}
-
-# {{{ sub ItemsArrayRef
-
=head2 ItemsArrayRef
Return this object's ItemsArray, in the order that ItemsOrderBy sorts
it.
-=begin testing
-
-use_ok(RT::Queues);
-ok(my $queues = RT::Queues->new($RT::SystemUser), 'Created a queues object');
-ok( $queues->UnLimit(),'Unlimited the result set of the queues object');
-my $items = $queues->ItemsArrayRef();
-my @items = @{$items};
-
-ok($queues->NewItem->_Accessible('Name','read'));
-my @sorted = sort {lc($a->Name) cmp lc($b->Name)} @items;
-ok (@sorted, "We have an array of queues, sorted". join(',',map {$_->Name} @sorted));
-
-ok (@items, "We have an array of queues, raw". join(',',map {$_->Name} @items));
-my @sorted_ids = map {$_->id } @sorted;
-my @items_ids = map {$_->id } @items;
-
-is ($#sorted, $#items);
-is ($sorted[0]->Name, $items[0]->Name);
-is ($sorted[-1]->Name, $items[-1]->Name);
-is_deeply(\@items_ids, \@sorted_ids, "ItemsArrayRef sorts alphabetically by name");;
-
-
-=end testing
-
=cut
sub ItemsArrayRef {
my $self = shift;
- my @items;
-
return $self->ItemsOrderBy($self->SUPER::ItemsArrayRef());
}
-# }}}
-
eval "require RT::SearchBuilder_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/SearchBuilder_Vendor.pm});
eval "require RT::SearchBuilder_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/SearchBuilder_Local.pm});
1;
-
-
diff --git a/rt/lib/RT/SharedSetting.pm b/rt/lib/RT/SharedSetting.pm
new file mode 100644
index 0000000..63deb98
--- /dev/null
+++ b/rt/lib/RT/SharedSetting.pm
@@ -0,0 +1,458 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+RT::SharedSetting - an API for settings that belong to an RT::User or RT::Group
+
+=head1 SYNOPSIS
+
+ use RT::SharedSetting;
+
+=head1 DESCRIPTION
+
+A RT::SharedSetting is an object that can belong to an L<RT::User> or an <RT::Group>.
+It consists of an ID, a name, and some arbitrary data.
+
+=cut
+
+package RT::SharedSetting;
+use strict;
+use warnings;
+use RT::Attribute;
+use base qw/RT::Base/;
+
+=head1 METHODS
+
+=head2 new
+
+Returns a new L<RT::SharedSetting> object.
+Takes the current user, see also L<RT::Base>.
+
+=cut
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ $self->{'Id'} = 0;
+ bless ($self, $class);
+ $self->CurrentUser(@_);
+ return $self;
+}
+
+=head2 Load
+
+Takes a privacy specification and a shared-setting ID. Loads the given object
+ID if it belongs to the stated user or group. Calls the L</PostLoad> method on
+success for any further initialization. Returns a tuple of status and message,
+where status is true on success.
+
+=cut
+
+sub Load {
+ my $self = shift;
+ my ($privacy, $id) = @_;
+ my $object = $self->_GetObject($privacy);
+
+ if ($object) {
+ $self->{'Attribute'} = $object->Attributes->WithId($id);
+ if ($self->{'Attribute'}->Id) {
+ $self->{'Id'} = $self->{'Attribute'}->Id;
+ $self->{'Privacy'} = $privacy;
+ $self->PostLoad();
+
+ return (0, $self->loc("Permission denied"))
+ unless $self->CurrentUserCanSee;
+
+ return (1, $self->loc("Loaded [_1] [_2]", $self->ObjectName, $self->Name));
+ } else {
+ $RT::Logger->error("Could not load attribute " . $id
+ . " for object " . $privacy);
+ return (0, $self->loc("Failed to load [_1] [_2]", $self->ObjectName, $id))
+ }
+ } else {
+ $RT::Logger->warning("Could not load object $privacy when loading " . $self->ObjectName);
+ return (0, $self->loc("Could not load object for [_1]", $privacy));
+ }
+}
+
+=head2 LoadById
+
+First loads up the L<RT::Attribute> for this shared setting by ID, then calls
+L</Load> with the correct parameters. Returns a tuple of status and message,
+where status is true on success.
+
+=cut
+
+sub LoadById {
+ my $self = shift;
+ my $id = shift;
+
+ my $attr = RT::Attribute->new($self->CurrentUser);
+ my ($ok, $msg) = $attr->LoadById($id);
+
+ if (!$ok) {
+ return (0, $self->loc("Failed to load [_1] [_2]: [_3]", $self->ObjectName, $id, $msg))
+ }
+
+ my $privacy = $self->_build_privacy($attr->ObjectType, $attr->ObjectId);
+ return (0, $self->loc("Bad privacy for attribute [_1]", $id))
+ if !$privacy;
+
+ return $self->Load($privacy, $id);
+}
+
+=head2 PostLoad
+
+Called after after successful L</Load>.
+
+=cut
+
+sub PostLoad { }
+
+=head2 Save
+
+Creates a new shared setting. Takes a privacy, a name, and any other arguments.
+Saves the given parameters to the appropriate user/group object, and loads the
+resulting object. Arguments are passed to the L</SaveAttribute> method, which
+does the actual update. Returns a tuple of status and message, where status is
+true on success. Defaults are:
+
+ Privacy: CurrentUser only
+ Name: "new (ObjectName)"
+
+=cut
+
+sub Save {
+ my $self = shift;
+ my %args = (
+ 'Privacy' => 'RT::User-' . $self->CurrentUser->Id,
+ 'Name' => "new " . $self->ObjectName,
+ @_,
+ );
+
+ my $privacy = $args{'Privacy'};
+ my $name = $args{'Name'},
+ my $object = $self->_GetObject($privacy);
+
+ return (0, $self->loc("Failed to load object for [_1]", $privacy))
+ unless $object;
+
+ return (0, $self->loc("Permission denied"))
+ unless $self->CurrentUserCanCreate($privacy);
+
+ my ($att_id, $att_msg) = $self->SaveAttribute($object, \%args);
+
+ if ($att_id) {
+ $self->{'Attribute'} = $object->Attributes->WithId($att_id);
+ $self->{'Id'} = $att_id;
+ $self->{'Privacy'} = $privacy;
+ return ( 1, $self->loc( "Saved [_1] [_2]", $self->ObjectName, $name ) );
+ }
+ else {
+ $RT::Logger->error($self->ObjectName . " save failure: $att_msg");
+ return ( 0, $self->loc("Failed to create [_1] attribute", $self->ObjectName) );
+ }
+}
+
+=head2 SaveAttribute
+
+An empty method for subclassing. Called from L</Save> method.
+
+=cut
+
+sub SaveAttribute { }
+
+=head2 Update
+
+Updates the parameters of an existing shared setting. Any arguments are passed
+to the L</UpdateAttribute> method. Returns a tuple of status and message, where
+status is true on success.
+
+=cut
+
+sub Update {
+ my $self = shift;
+ my %args = @_;
+
+ return(0, $self->loc("No [_1] loaded", $self->ObjectName)) unless $self->Id;
+ return(0, $self->loc("Could not load [_1] attribute", $self->ObjectName))
+ unless $self->{'Attribute'}->Id;
+
+ return (0, $self->loc("Permission denied"))
+ unless $self->CurrentUserCanModify;
+
+ my ($status, $msg) = $self->UpdateAttribute(\%args);
+
+ return (1, $self->loc("[_1] update: Nothing changed", ucfirst($self->ObjectName)))
+ if !defined $msg;
+
+ # prevent useless warnings
+ return (1, $self->loc("[_1] updated"), ucfirst($self->ObjectName))
+ if $msg =~ /That is already the current value/;
+
+ return ($status, $self->loc("[_1] update: [_2]", ucfirst($self->ObjectName), $msg));
+}
+
+=head2 UpdateAttribute
+
+An empty method for subclassing. Called from L</Update> method.
+
+=cut
+
+sub UpdateAttribute { }
+
+=head2 Delete
+
+Deletes the existing shared setting. Returns a tuple of status and message,
+where status is true upon success.
+
+=cut
+
+sub Delete {
+ my $self = shift;
+
+ return (0, $self->loc("Permission denied"))
+ unless $self->CurrentUserCanDelete;
+
+ my ($status, $msg) = $self->{'Attribute'}->Delete;
+ if ($status) {
+ return (1, $self->loc("Deleted [_1]", $self->ObjectName));
+ } else {
+ return (0, $self->loc("Delete failed: [_1]", $msg));
+ }
+}
+
+### Accessor methods
+
+=head2 Name
+
+Returns the name of this shared setting.
+
+=cut
+
+sub Name {
+ my $self = shift;
+ return unless ref($self->{'Attribute'}) eq 'RT::Attribute';
+ return $self->{'Attribute'}->Description();
+}
+
+=head2 Id
+
+Returns the numerical ID of this shared setting.
+
+=cut
+
+sub Id {
+ my $self = shift;
+ return $self->{'Id'};
+}
+
+=head2 Privacy
+
+Returns the principal object to whom this shared setting belongs, in a string
+"<class>-<id>", e.g. "RT::Group-16".
+
+=cut
+
+sub Privacy {
+ my $self = shift;
+ return $self->{'Privacy'};
+}
+
+=head2 GetParameter
+
+Returns the given named parameter of the setting.
+
+=cut
+
+sub GetParameter {
+ my $self = shift;
+ my $param = shift;
+ return unless ref($self->{'Attribute'}) eq 'RT::Attribute';
+ return $self->{'Attribute'}->SubValue($param);
+}
+
+=head2 IsVisibleTo Privacy
+
+Returns true if the setting is visible to all principals of the given privacy.
+This does not deal with ACLs, this only looks at membership.
+
+=cut
+
+sub IsVisibleTo {
+ my $self = shift;
+ my $to = shift;
+ my $privacy = $self->Privacy;
+
+ # if the privacies are the same, then they can be seen. this handles
+ # a personal setting being visible to that user.
+ return 1 if $privacy eq $to;
+
+ # If the setting is systemwide, then any user can see it.
+ return 1 if $privacy =~ /^RT::System/;
+
+ # Only privacies that are RT::System can be seen by everyone.
+ return 0 if $to =~ /^RT::System/;
+
+ # If the setting is group-wide...
+ if ($privacy =~ /^RT::Group-(\d+)$/) {
+ my $setting_group = RT::Group->new($self->CurrentUser);
+ $setting_group->Load($1);
+
+ if ($to =~ /-(\d+)$/) {
+ my $to_id = $1;
+
+ # then any principal that is a member of the setting's group can see
+ # the setting
+ return $setting_group->HasMemberRecursively($to_id);
+ }
+ }
+
+ return 0;
+}
+
+sub CurrentUserCanSee { 1 }
+sub CurrentUserCanCreate { 1 }
+sub CurrentUserCanModify { 1 }
+sub CurrentUserCanDelete { 1 }
+
+### Internal methods
+
+# _GetObject: helper routine to load the correct object whose parameters
+# have been passed.
+
+sub _GetObject {
+ my $self = shift;
+ my $privacy = shift;
+
+ my ($obj_type, $obj_id) = split(/\-/, ($privacy || ''));
+
+ unless ($obj_type && $obj_id) {
+ $privacy = '(undef)' if !defined($privacy);
+ $RT::Logger->debug("Invalid privacy string '$privacy'");
+ return undef;
+ }
+
+ my $object = $self->_load_privacy_object($obj_type, $obj_id);
+
+ unless (ref($object) eq $obj_type) {
+ $RT::Logger->error("Could not load object of type $obj_type with ID $obj_id, got object of type " . (ref($object) || 'undef'));
+ return undef;
+ }
+
+ # Do not allow the loading of a user object other than the current
+ # user, or of a group object of which the current user is not a member.
+
+ if ($obj_type eq 'RT::User' && $object->Id != $self->CurrentUser->UserObj->Id) {
+ $RT::Logger->debug("Permission denied for user other than self");
+ return undef;
+ }
+
+ if ($obj_type eq 'RT::Group' && !$object->HasMemberRecursively($self->CurrentUser->PrincipalObj)) {
+ $RT::Logger->debug("Permission denied, ".$self->CurrentUser->Name.
+ " is not a member of group");
+ return undef;
+ }
+
+ return $object;
+}
+
+sub _load_privacy_object {
+ my ($self, $obj_type, $obj_id) = @_;
+ if ( $obj_type eq 'RT::User' ) {
+ if ( $obj_id == $self->CurrentUser->Id ) {
+ return $self->CurrentUser->UserObj;
+ } else {
+ $RT::Logger->warning("User #". $self->CurrentUser->Id ." tried to load container user #". $obj_id);
+ return undef;
+ }
+ }
+ elsif ($obj_type eq 'RT::Group') {
+ my $group = RT::Group->new($self->CurrentUser);
+ $group->Load($obj_id);
+ return $group;
+ }
+ elsif ($obj_type eq 'RT::System') {
+ return RT::System->new($self->CurrentUser);
+ }
+
+ $RT::Logger->error(
+ "Tried to load a ". $self->ObjectName
+ ." belonging to an $obj_type, which is neither a user nor a group"
+ );
+
+ return undef;
+}
+
+sub _build_privacy {
+ my ($self, $obj_type, $obj_id) = @_;
+
+ # allow passing in just an object to find its privacy string
+ if (ref($obj_type)) {
+ my $Object = $obj_type;
+ return $Object->isa('RT::User') ? 'RT::User-' . $Object->Id
+ : $Object->isa('RT::Group') ? 'RT::Group-' . $Object->Id
+ : $Object->isa('RT::System') ? 'RT::System-' . $Object->Id
+ : undef;
+ }
+
+ return undef unless ($obj_type); # undef workaround
+ return $obj_type eq 'RT::User' ? "$obj_type-$obj_id"
+ : $obj_type eq 'RT::Group' ? "$obj_type-$obj_id"
+ : $obj_type eq 'RT::System' ? "$obj_type-$obj_id"
+ : undef;
+}
+
+eval "require RT::SharedSetting_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/SharedSetting_Vendor.pm});
+eval "require RT::SharedSetting_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/SharedSetting_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Shredder.pm b/rt/lib/RT/Shredder.pm
new file mode 100644
index 0000000..5e1e86e
--- /dev/null
+++ b/rt/lib/RT/Shredder.pm
@@ -0,0 +1,868 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder;
+
+use strict;
+use warnings;
+
+
+=head1 NAME
+
+RT::Shredder - Permanently wipeout data from RT
+
+
+=head1 SYNOPSIS
+
+=head2 CLI
+
+ rt-shredder --force --plugin 'Tickets=queue,general;status,deleted'
+
+
+=head1 DESCRIPTION
+
+RT::Shredder is extension to RT which allows you to permanently wipeout
+data from the RT database. Shredder supports the wiping of almost
+all RT objects (Tickets, Transactions, Attachments, Users...).
+
+
+=head2 "Delete" vs "Wipeout"
+
+RT uses the term "delete" to mean "deactivate". To avoid confusion,
+RT::Shredder uses the term "Wipeout" to mean "permanently erase" (or
+what most people would think of as "delete").
+
+
+=head2 Why do you want this?
+
+Normally in RT, "deleting" an item simply deactivates it and makes it
+invisible from view. This is done to retain full history and
+auditability of your tickets. For most RT users this is fine and they
+have no need of RT::Shredder.
+
+But in some large and heavily used RT instances the database can get
+clogged up with junk, particularly spam. This can slow down searches
+and bloat the size of the database. For these users, RT::Shredder
+allows them to completely clear the database of this unwanted junk.
+
+An additional use of Shredder is to obliterate sensitive information
+(passwords, credit card numbers, ...) which might have made their way
+into RT.
+
+
+=head2 Command line tools (CLI)
+
+L<rt-shredder> is a program which allows you to wipe objects from
+command line or with system tasks scheduler (cron, for example).
+See also 'rt-shredder --help'.
+
+
+=head2 Web based interface (WebUI)
+
+Shredder's WebUI integrates into RT's WebUI. You can find it in the
+Configuration->Tools->Shredder tab. The interface is similar to the
+CLI and gives you the same functionality. You can find 'Shredder' link
+at the bottom of tickets search results, so you could wipeout tickets
+in the way similar to the bulk update.
+
+
+=head1 DATA STORAGE AND BACKUPS
+
+Shredder allows you to store data you wiped in files as scripts with SQL
+commands.
+
+=head3 Restoring from backup
+
+Should you wipeout something you did not intend to the objects can be
+restored by using the storage files. These files are a simple set of
+SQL commands to re-insert your objects into the RT database.
+
+1) Locate the appropriate shredder SQL dump file. In the WebUI, when
+ you use shredder, the path to the dump file is displayed. It also
+ gives the option to download the dump file after each wipeout. Or
+ it can be found in your C<$ShredderStoragePath>.
+
+2) Load the shredder SQL dump into your RT database. The details will
+ be different for each database and RT configuration, consult your
+ database manual and RT config. For example, in MySQL...
+
+ mysql -u your_rt_user -p your_rt_database < /path/to/rt/var/data/shredder/dump.sql
+
+That's it.i This will restore everything you'd deleted during a
+shredding session when the file had been created.
+
+=head1 CONFIGURATION
+
+=head2 $RT::DependenciesLimit
+
+Shredder stops with an error if the object has more than
+C<$RT::DependenciesLimit> dependencies. For example: a ticket has 1000
+transactions or a transaction has 1000 attachments. This is protection
+from bugs in shredder from wiping out your whole database, but
+sometimes when you have big mail loops you may hit it.
+
+Defaults to 1000.
+
+You can change the default value, in F<RT_SiteConfig.pm> add C<Set(
+$DependenciesLimit, new_limit );>
+
+
+=head2 $ShredderStoragePath
+
+Directory containing Shredder backup dumps.
+
+Defaults to F</path-to-RT-var-dir/data/RT-Shredder>.
+
+You can change the default value, in F<RT_SiteConfig.pm> add C<Set(
+$ShredderStoragePath, new_path );> Be sure to use an absolute path.
+
+
+=head1 INFORMATION FOR DEVELOPERS
+
+=head2 General API
+
+L<RT::Shredder> is an extension to RT which adds shredder methods to
+RT objects and classes. The API is not well documented yet, but you
+can find usage examples in L<rt-shredder> and the
+F<lib/t/regression/shredder/*.t> test files.
+
+However, here is a small example that do the same action as in CLI
+example from L</SYNOPSIS>:
+
+ use RT::Shredder;
+ RT::Shredder::Init( force => 1 );
+ my $deleted = RT::Tickets->new( $RT::SystemUser );
+ $deleted->{'allow_deleted_search'} = 1;
+ $deleted->LimitQueue( VALUE => 'general' );
+ $deleted->LimitStatus( VALUE => 'deleted' );
+ while( my $t = $deleted->Next ) {
+ $t->Wipeout;
+ }
+
+
+=head2 RT::Shredder class' API
+
+L<RT::Shredder> implements interfaces to objects cache, actions on the
+objects in the cache and backups storage.
+
+=cut
+
+our $VERSION = '0.04';
+use File::Spec ();
+
+
+BEGIN {
+# I can't use 'use lib' here since it breakes tests
+# because test suite uses old RT::Shredder setup from
+# RT lib path
+
+### after: push @INC, qw(@RT_LIB_PATH@);
+ push @INC, qw(/opt/rt3/local/lib /opt/rt3/lib);
+ use RT::Shredder::Constants;
+ use RT::Shredder::Exceptions;
+
+ require RT;
+
+ require RT::Shredder::Record;
+
+ require RT::Shredder::ACE;
+ require RT::Shredder::Attachment;
+ require RT::Shredder::CachedGroupMember;
+ require RT::Shredder::CustomField;
+ require RT::Shredder::CustomFieldValue;
+ require RT::Shredder::GroupMember;
+ require RT::Shredder::Group;
+ require RT::Shredder::Link;
+ require RT::Shredder::Principal;
+ require RT::Shredder::Queue;
+ require RT::Shredder::Scrip;
+ require RT::Shredder::ScripAction;
+ require RT::Shredder::ScripCondition;
+ require RT::Shredder::Template;
+ require RT::Shredder::ObjectCustomFieldValue;
+ require RT::Shredder::Ticket;
+ require RT::Shredder::Transaction;
+ require RT::Shredder::User;
+}
+
+our @SUPPORTED_OBJECTS = qw(
+ ACE
+ Attachment
+ CachedGroupMember
+ CustomField
+ CustomFieldValue
+ GroupMember
+ Group
+ Link
+ Principal
+ Queue
+ Scrip
+ ScripAction
+ ScripCondition
+ Template
+ ObjectCustomFieldValue
+ Ticket
+ Transaction
+ User
+);
+
+=head3 GENERIC
+
+=head4 Init
+
+ RT::Shredder::Init( %default_options );
+
+C<RT::Shredder::Init()> should be called before creating an
+RT::Shredder object. It iniitalizes RT and loads the RT
+configuration.
+
+%default_options are passed to every C<<RT::Shredder->new>> call.
+
+=cut
+
+our %opt = ();
+
+sub Init
+{
+ %opt = @_;
+ RT::LoadConfig();
+ RT::Init();
+}
+
+=head4 new
+
+ my $shredder = RT::Shredder->new(%options);
+
+Construct a new RT::Shredder object.
+
+There currently are no %options.
+
+=cut
+
+sub new
+{
+ my $proto = shift;
+ my $self = bless( {}, ref $proto || $proto );
+ $self->_Init( @_ );
+ return $self;
+}
+
+sub _Init
+{
+ my $self = shift;
+ $self->{'opt'} = { %opt, @_ };
+ $self->{'cache'} = {};
+ $self->{'resolver'} = {};
+ $self->{'dump_plugins'} = [];
+}
+
+=head4 CastObjectsToRecords( Objects => undef )
+
+Cast objects to the C<RT::Record> objects or its ancesstors.
+Objects can be passed as SCALAR (format C<< <class>-<id> >>),
+ARRAY, C<RT::Record> ancesstors or C<RT::SearchBuilder> ancesstor.
+
+Most methods that takes C<Objects> argument use this method to
+cast argument value to list of records.
+
+Returns an array of records.
+
+For example:
+
+ my @objs = $shredder->CastObjectsToRecords(
+ Objects => [ # ARRAY reference
+ 'RT::Attachment-10', # SCALAR or SCALAR reference
+ $tickets, # RT::Tickets object (isa RT::SearchBuilder)
+ $user, # RT::User object (isa RT::Record)
+ ],
+ );
+
+=cut
+
+sub CastObjectsToRecords
+{
+ my $self = shift;
+ my %args = ( Objects => undef, @_ );
+
+ my @res;
+ my $targets = delete $args{'Objects'};
+ unless( $targets ) {
+ RT::Shredder::Exception->throw( "Undefined Objects argument" );
+ }
+
+ if( UNIVERSAL::isa( $targets, 'RT::SearchBuilder' ) ) {
+ #XXX: try to use ->_DoSearch + ->ItemsArrayRef in feature
+ # like we do in Record with links, but change only when
+ # more tests would be available
+ while( my $tmp = $targets->Next ) { push @res, $tmp };
+ } elsif ( UNIVERSAL::isa( $targets, 'RT::Record' ) ) {
+ push @res, $targets;
+ } elsif ( UNIVERSAL::isa( $targets, 'ARRAY' ) ) {
+ foreach( @$targets ) {
+ push @res, $self->CastObjectsToRecords( Objects => $_ );
+ }
+ } elsif ( UNIVERSAL::isa( $targets, 'SCALAR' ) || !ref $targets ) {
+ $targets = $$targets if ref $targets;
+ my ($class, $id) = split /-/, $targets;
+ $class = 'RT::'. $class unless $class =~ /^RTx?::/i;
+ eval "require $class";
+ die "Couldn't load '$class' module" if $@;
+ my $obj = $class->new( $RT::SystemUser );
+ die "Couldn't construct new '$class' object" unless $obj;
+ $obj->Load( $id );
+ unless ( $obj->id ) {
+ $RT::Logger->error( "Couldn't load '$class' object with id '$id'" );
+ RT::Shredder::Exception::Info->throw( 'CouldntLoadObject' );
+ }
+ die "Loaded object has different id" unless( $id eq $obj->id );
+ push @res, $obj;
+ } else {
+ RT::Shredder::Exception->throw( "Unsupported type ". ref $targets );
+ }
+ return @res;
+}
+
+=head3 OBJECTS CACHE
+
+=head4 PutObjects( Objects => undef )
+
+Puts objects into cache.
+
+Returns array of the cache entries.
+
+See C<CastObjectsToRecords> method for supported types of the C<Objects>
+argument.
+
+=cut
+
+sub PutObjects
+{
+ my $self = shift;
+ my %args = ( Objects => undef, @_ );
+
+ my @res;
+ for( $self->CastObjectsToRecords( Objects => delete $args{'Objects'} ) ) {
+ push @res, $self->PutObject( %args, Object => $_ )
+ }
+
+ return @res;
+}
+
+=head4 PutObject( Object => undef )
+
+Puts record object into cache and returns its cache entry.
+
+B<NOTE> that this method support B<only C<RT::Record> object or its ancesstor
+objects>, if you want put mutliple objects or objects represented by different
+classes then use C<PutObjects> method instead.
+
+=cut
+
+sub PutObject
+{
+ my $self = shift;
+ my %args = ( Object => undef, @_ );
+
+ my $obj = $args{'Object'};
+ unless( UNIVERSAL::isa( $obj, 'RT::Record' ) ) {
+ RT::Shredder::Exception->throw( "Unsupported type '". (ref $obj || $obj || '(undef)')."'" );
+ }
+
+ my $str = $obj->_AsString;
+ return ($self->{'cache'}->{ $str } ||= { State => ON_STACK, Object => $obj } );
+}
+
+=head4 GetObject, GetState, GetRecord( String => ''| Object => '' )
+
+Returns record object from cache, cache entry state or cache entry accordingly.
+
+All three methods takes C<String> (format C<< <class>-<id> >>) or C<Object> argument.
+C<String> argument has more priority than C<Object> so if it's not empty then methods
+leave C<Object> argument unchecked.
+
+You can read about possible states and their meanings in L<RT::Shredder::Constants> docs.
+
+=cut
+
+sub _ParseRefStrArgs
+{
+ my $self = shift;
+ my %args = (
+ String => '',
+ Object => undef,
+ @_
+ );
+ if( $args{'String'} && $args{'Object'} ) {
+ require Carp;
+ Carp::croak( "both String and Object args passed" );
+ }
+ return $args{'String'} if $args{'String'};
+ return $args{'Object'}->_AsString if UNIVERSAL::can($args{'Object'}, '_AsString' );
+ return '';
+}
+
+sub GetObject { return (shift)->GetRecord( @_ )->{'Object'} }
+sub GetState { return (shift)->GetRecord( @_ )->{'State'} }
+sub GetRecord
+{
+ my $self = shift;
+ my $str = $self->_ParseRefStrArgs( @_ );
+ return $self->{'cache'}->{ $str };
+}
+
+=head3 Dependencies resolvers
+
+=head4 PutResolver, GetResolvers and ApplyResolvers
+
+TODO: These methods have no documentation.
+
+=cut
+
+sub PutResolver
+{
+ my $self = shift;
+ my %args = (
+ BaseClass => '',
+ TargetClass => '',
+ Code => undef,
+ @_,
+ );
+ unless( UNIVERSAL::isa( $args{'Code'} => 'CODE' ) ) {
+ die "Resolver '$args{Code}' is not code reference";
+ }
+
+ my $resolvers = (
+ (
+ $self->{'resolver'}->{ $args{'BaseClass'} } ||= {}
+ )->{ $args{'TargetClass'} || '' } ||= []
+ );
+ unshift @$resolvers, $args{'Code'};
+ return;
+}
+
+sub GetResolvers
+{
+ my $self = shift;
+ my %args = (
+ BaseClass => '',
+ TargetClass => '',
+ @_,
+ );
+
+ my @res;
+ if( $args{'TargetClass'} && exists $self->{'resolver'}->{ $args{'BaseClass'} }->{ $args{'TargetClass'} } ) {
+ push @res, @{ $self->{'resolver'}->{ $args{'BaseClass'} }->{ $args{'TargetClass'} || '' } };
+ }
+ if( exists $self->{'resolver'}->{ $args{'BaseClass'} }->{ '' } ) {
+ push @res, @{ $self->{'resolver'}->{ $args{'BaseClass'} }->{''} };
+ }
+
+ return @res;
+}
+
+sub ApplyResolvers
+{
+ my $self = shift;
+ my %args = ( Dependency => undef, @_ );
+ my $dep = $args{'Dependency'};
+
+ my @resolvers = $self->GetResolvers(
+ BaseClass => $dep->BaseClass,
+ TargetClass => $dep->TargetClass,
+ );
+
+ unless( @resolvers ) {
+ RT::Shredder::Exception::Info->throw(
+ tag => 'NoResolver',
+ error => "Couldn't find resolver for dependency '". $dep->AsString ."'",
+ );
+ }
+ $_->(
+ Shredder => $self,
+ BaseObject => $dep->BaseObject,
+ TargetObject => $dep->TargetObject,
+ ) foreach @resolvers;
+
+ return;
+}
+
+sub WipeoutAll
+{
+ my $self = $_[0];
+
+ while ( my ($k, $v) = each %{ $self->{'cache'} } ) {
+ next if $v->{'State'} & (WIPED | IN_WIPING);
+ $self->Wipeout( Object => $v->{'Object'} );
+ }
+}
+
+sub Wipeout
+{
+ my $self = shift;
+ my $mark;
+ eval {
+ die "Couldn't begin transaction" unless $RT::Handle->BeginTransaction;
+ $mark = $self->PushDumpMark or die "Couldn't get dump mark";
+ $self->_Wipeout( @_ );
+ $self->PopDumpMark( Mark => $mark );
+ die "Couldn't commit transaction" unless $RT::Handle->Commit;
+ };
+ if( $@ ) {
+ $RT::Handle->Rollback('force');
+ $self->RollbackDumpTo( Mark => $mark ) if $mark;
+ die $@ if RT::Shredder::Exception::Info->caught;
+ die "Couldn't wipeout object: $@";
+ }
+}
+
+sub _Wipeout
+{
+ my $self = shift;
+ my %args = ( CacheRecord => undef, Object => undef, @_ );
+
+ my $record = $args{'CacheRecord'};
+ $record = $self->PutObject( Object => $args{'Object'} ) unless $record;
+ return if $record->{'State'} & (WIPED | IN_WIPING);
+
+ $record->{'State'} |= IN_WIPING;
+ my $object = $record->{'Object'};
+
+ $self->DumpObject( Object => $object, State => 'before any action' );
+
+ unless( $object->BeforeWipeout ) {
+ RT::Shredder::Exception->throw( "BeforeWipeout check returned error" );
+ }
+
+ my $deps = $object->Dependencies( Shredder => $self );
+ $deps->List(
+ WithFlags => DEPENDS_ON | VARIABLE,
+ Callback => sub { $self->ApplyResolvers( Dependency => $_[0] ) },
+ );
+ $self->DumpObject( Object => $object, State => 'after resolvers' );
+
+ $deps->List(
+ WithFlags => DEPENDS_ON,
+ WithoutFlags => WIPE_AFTER | VARIABLE,
+ Callback => sub { $self->_Wipeout( Object => $_[0]->TargetObject ) },
+ );
+ $self->DumpObject( Object => $object, State => 'after wiping dependencies' );
+
+ $object->__Wipeout;
+ $record->{'State'} |= WIPED; delete $record->{'Object'};
+ $self->DumpObject( Object => $object, State => 'after wipeout' );
+
+ $deps->List(
+ WithFlags => DEPENDS_ON | WIPE_AFTER,
+ WithoutFlags => VARIABLE,
+ Callback => sub { $self->_Wipeout( Object => $_[0]->TargetObject ) },
+ );
+ $self->DumpObject( Object => $object, State => 'after late dependencies' );
+
+ return;
+}
+
+sub ValidateRelations
+{
+ my $self = shift;
+ my %args = ( @_ );
+
+ foreach my $record( values %{ $self->{'cache'} } ) {
+ next if( $record->{'State'} & VALID );
+ $record->{'Object'}->ValidateRelations( Shredder => $self );
+ }
+}
+
+=head3 Data storage and backups
+
+=head4 GetFileName( FileName => '<ISO DATETIME>-XXXX.sql', FromStorage => 1 )
+
+Takes desired C<FileName> and flag C<FromStorage> then translate file name to absolute
+path by next rules:
+
+* Default value of the C<FileName> option is C<< <ISO DATETIME>-XXXX.sql >>;
+
+* if C<FileName> has C<XXXX> (exactly four uppercase C<X> letters) then it would be changed with digits from 0000 to 9999 range, with first one free value;
+
+* if C<FileName> has C<%T> then it would be replaced with the current date and time in the C<YYYY-MM-DDTHH:MM:SS> format. Note that using C<%t> may still generate not unique names, using C<XXXX> recomended.
+
+* if C<FromStorage> argument is true (default behaviour) then result path would always be relative to C<StoragePath>;
+
+* if C<FromStorage> argument is false then result would be relative to the current dir unless it's already absolute path.
+
+Returns an absolute path of the file.
+
+Examples:
+ # file from storage with default name format
+ my $fname = $shredder->GetFileName;
+
+ # file from storage with custom name format
+ my $fname = $shredder->GetFileName( FileName => 'shredder-XXXX.backup' );
+
+ # file with path relative to the current dir
+ my $fname = $shredder->GetFileName(
+ FromStorage => 0,
+ FileName => 'backups/shredder.sql',
+ );
+
+ # file with absolute path
+ my $fname = $shredder->GetFileName(
+ FromStorage => 0,
+ FileName => '/var/backups/shredder-XXXX.sql'
+ );
+
+=cut
+
+sub GetFileName
+{
+ my $self = shift;
+ my %args = ( FileName => '', FromStorage => 1, @_ );
+
+ # default value
+ my $file = $args{'FileName'} || '%t-XXXX.sql';
+ if( $file =~ /\%t/i ) {
+ require POSIX;
+ my $date_time = POSIX::strftime( "%Y%m%dT%H%M%S", gmtime );
+ $file =~ s/\%t/$date_time/gi;
+ }
+
+ # convert to absolute path
+ if( $args{'FromStorage'} ) {
+ $file = File::Spec->catfile( $self->StoragePath, $file );
+ } elsif( !File::Spec->file_name_is_absolute( $file ) ) {
+ $file = File::Spec->rel2abs( $file );
+ }
+
+ # check mask
+ if( $file =~ /XXXX[^\/\\]*$/ ) {
+ my( $tmp, $i ) = ( $file, 0 );
+ do {
+ $i++;
+ $tmp = $file;
+ $tmp =~ s/XXXX([^\/\\]*)$/sprintf("%04d", $i).$1/e;
+ } while( -e $tmp && $i < 9999 );
+ $file = $tmp;
+ }
+
+ if( -f $file ) {
+ unless( -w _ ) {
+ die "File '$file' exists, but is read-only";
+ }
+ } elsif( !-e _ ) {
+ unless( File::Spec->file_name_is_absolute( $file ) ) {
+ $file = File::Spec->rel2abs( $file );
+ }
+
+ # check base dir
+ my $dir = File::Spec->join( (File::Spec->splitpath( $file ))[0,1] );
+ unless( -e $dir && -d _) {
+ die "Base directory '$dir' for file '$file' doesn't exist";
+ }
+ unless( -w $dir ) {
+ die "Base directory '$dir' is not writable";
+ }
+ } else {
+ die "'$file' is not regular file";
+ }
+
+ return $file;
+}
+
+=head4 StoragePath
+
+Returns an absolute path to the storage dir. See
+L<CONFIGURATION/$ShredderStoragePath>.
+
+See also description of the L</GetFileName> method.
+
+=cut
+
+sub StoragePath
+{
+ return scalar( RT->Config->Get('ShredderStoragePath') )
+ || File::Spec->catdir( $RT::VarPath, qw(data RT-Shredder) );
+}
+
+my %active_dump_state = ();
+sub AddDumpPlugin {
+ my $self = shift;
+ my %args = ( Object => undef, Name => 'SQLDump', Arguments => undef, @_ );
+
+ my $plugin = $args{'Object'};
+ unless ( $plugin ) {
+ require RT::Shredder::Plugin;
+ $plugin = RT::Shredder::Plugin->new;
+ my( $status, $msg ) = $plugin->LoadByName( $args{'Name'} );
+ die "Couldn't load dump plugin: $msg\n" unless $status;
+ }
+ die "Plugin is not of correct type" unless lc $plugin->Type eq 'dump';
+
+ if ( my $pargs = $args{'Arguments'} ) {
+ my ($status, $msg) = $plugin->TestArgs( %$pargs );
+ die "Couldn't set plugin args: $msg\n" unless $status;
+ }
+
+ my @applies_to = $plugin->AppliesToStates;
+ die "Plugin doesn't apply to any state" unless @applies_to;
+ $active_dump_state{ lc $_ } = 1 foreach @applies_to;
+
+ push @{ $self->{'dump_plugins'} }, $plugin;
+
+ return $plugin;
+}
+
+sub DumpObject {
+ my $self = shift;
+ my %args = (Object => undef, State => undef, @_);
+ die "No state passed" unless $args{'State'};
+ return unless $active_dump_state{ lc $args{'State'} };
+
+ foreach (@{ $self->{'dump_plugins'} }) {
+ next unless grep lc $args{'State'} eq lc $_, $_->AppliesToStates;
+ my ($state, $msg) = $_->Run( %args );
+ die "Couldn't run plugin: $msg" unless $state;
+ }
+}
+
+{ my $mark = 1; # XXX: integer overflows?
+sub PushDumpMark {
+ my $self = shift;
+ $mark++;
+ foreach (@{ $self->{'dump_plugins'} }) {
+ my ($state, $msg) = $_->PushMark( Mark => $mark );
+ die "Couldn't push mark: $msg" unless $state;
+ }
+ return $mark;
+}
+sub PopDumpMark {
+ my $self = shift;
+ foreach (@{ $self->{'dump_plugins'} }) {
+ my ($state, $msg) = $_->PushMark( @_ );
+ die "Couldn't pop mark: $msg" unless $state;
+ }
+}
+sub RollbackDumpTo {
+ my $self = shift;
+ foreach (@{ $self->{'dump_plugins'} }) {
+ my ($state, $msg) = $_->RollbackTo( @_ );
+ die "Couldn't rollback to mark: $msg" unless $state;
+ }
+}
+}
+
+1;
+__END__
+
+=head1 NOTES
+
+=head2 Database transactions support
+
+Since 0.03_01 RT::Shredder uses database transactions and should be
+much safer to run on production servers.
+
+=head2 Foreign keys
+
+Mainstream RT doesn't use FKs, but at least I posted DDL script that creates them
+in mysql DB, note that if you use FKs then this two valid keys don't allow delete
+Tickets because of bug in MySQL:
+
+ ALTER TABLE Tickets ADD FOREIGN KEY (EffectiveId) REFERENCES Tickets(id);
+ ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (Via) REFERENCES CachedGroupMembers(id);
+
+L<http://bugs.mysql.com/bug.php?id=4042>
+
+=head1 BUGS AND HOW TO CONTRIBUTE
+
+We need your feedback in all cases: if you use it or not,
+is it works for you or not.
+
+=head2 Testing
+
+Don't skip C<make test> step while install and send me reports if it's fails.
+Add your own tests, it's easy enough if you've writen at list one perl script
+that works with RT. Read more about testing in F<t/utils.pl>.
+
+=head2 Reporting
+
+Send reports to L</AUTHOR> or to the RT mailing lists.
+
+=head2 Documentation
+
+Many bugs in the docs: insanity, spelling, gramar and so on.
+Patches are wellcome.
+
+=head2 Todo
+
+Please, see Todo file, it has some technical notes
+about what I plan to do, when I'll do it, also it
+describes some problems code has.
+
+=head2 Repository
+
+Since RT-3.7 shredder is a part of the RT distribution.
+Versions of the RTx::Shredder extension could
+be downloaded from the CPAN. Those work with older
+RT versions or you can find repository at
+L<https://opensvn.csie.org/rtx_shredder>
+
+=head1 AUTHOR
+
+ Ruslan U. Zakirov <Ruslan.Zakirov@gmail.com>
+
+=head1 COPYRIGHT
+
+This program is free software; you can redistribute
+it and/or modify it under the same terms as Perl itself.
+
+The full text of the license can be found in the
+Perl distribution.
+
+=head1 SEE ALSO
+
+L<rt-shredder>, L<rt-validator>
+
+=cut
diff --git a/rt/lib/RT/Shredder/ACE.pm b/rt/lib/RT/Shredder/ACE.pm
new file mode 100644
index 0000000..8512a85
--- /dev/null
+++ b/rt/lib/RT/Shredder/ACE.pm
@@ -0,0 +1,101 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::ACE ();
+package RT::ACE;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Exceptions;
+use RT::Shredder::Constants;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+1;
+
diff --git a/rt/lib/RT/Shredder/Attachment.pm b/rt/lib/RT/Shredder/Attachment.pm
new file mode 100644
index 0000000..c72203d
--- /dev/null
+++ b/rt/lib/RT/Shredder/Attachment.pm
@@ -0,0 +1,136 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Attachment ();
+package RT::Attachment;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Exceptions;
+use RT::Shredder::Constants;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Nested attachments
+ my $objs = RT::Attachments->new( $self->CurrentUser );
+ $objs->Limit(
+ FIELD => 'Parent',
+ OPERATOR => '=',
+ VALUE => $self->Id
+ );
+ $objs->Limit(
+ FIELD => 'id',
+ OPERATOR => '!=',
+ VALUE => $self->Id
+ );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Parent, nested parts
+ if( $self->Parent ) {
+ if( $self->ParentObj && $self->ParentId ) {
+ push( @$list, $self->ParentObj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no parent attachment #". $self->Parent ." object";
+ }
+ }
+
+# Transaction
+ my $obj = $self->TransactionObj;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related transaction #". $self->TransactionId ." object";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+1;
diff --git a/rt/lib/RT/Shredder/CachedGroupMember.pm b/rt/lib/RT/Shredder/CachedGroupMember.pm
new file mode 100644
index 0000000..1433803
--- /dev/null
+++ b/rt/lib/RT/Shredder/CachedGroupMember.pm
@@ -0,0 +1,151 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::CachedGroupMember ();
+package RT::CachedGroupMember;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependency;
+
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# deep memebership
+ my $objs = RT::CachedGroupMembers->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'Via', VALUE => $self->Id );
+ $objs->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->Id );
+ push( @$list, $objs );
+
+# principal lost group membership and lost some rights which he could delegate to
+# some body
+
+# XXX: Here is problem cause HasMemberRecursively would return true allways
+# cause we didn't delete anything yet. :(
+ # if pricipal is not member anymore(could be via other groups) then proceed
+ if( $self->GroupObj->Object->HasMemberRecursively( $self->MemberObj ) ) {
+ my $acl = RT::ACL->new( $self->CurrentUser );
+ $acl->LimitToPrincipal( Id => $self->GroupId );
+
+ # look into all rights that have group
+ while( my $ace = $acl->Next ) {
+ my $delegations = RT::ACL->new( $self->CurrentUser );
+ $delegations->DelegatedFrom( Id => $ace->Id );
+ $delegations->DelegatedBy( Id => $self->MemberId );
+ push( @$list, $delegations );
+ }
+ }
+
+# XXX: Do we need to delete records if user lost right 'DelegateRights'?
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+#TODO: If we plan write export tool we also should fetch parent groups
+# now we only wipeout things.
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ my $obj = $self->MemberObj;
+ if( $obj && $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Principal #". $self->MemberId ." object.";
+ }
+
+ $obj = $self->GroupObj;
+ if( $obj && $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Principal #". $self->GroupId ." object.";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+1;
diff --git a/rt/lib/RT/Shredder/Constants.pm b/rt/lib/RT/Shredder/Constants.pm
new file mode 100644
index 0000000..a7166f3
--- /dev/null
+++ b/rt/lib/RT/Shredder/Constants.pm
@@ -0,0 +1,141 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Constants;
+
+use base qw(Exporter);
+
+=head1 NAME
+
+RT::Shredder::Constants - RT::Shredder constants that is used to mark state of RT objects.
+
+=head1 DESCRIPTION
+
+This module exports two group of bit constants.
+First group is group of flags which are used to clarify dependecies between objects, and
+second group is states of RT objects in Shredder cache.
+
+=head1 FLAGS
+
+=head2 DEPENDS_ON
+
+Targets that has such dependency flag set should be wiped out with base object.
+
+=head2 WIPE_AFTER
+
+If dependency has such flag then target object would be wiped only
+after base object. You should mark dependencies with this flag
+if two objects depends on each other, for example Group and Principal
+have such relationship, this mean Group depends on Principal record and
+that Principal record depends on the same Group record. Other examples:
+User and Principal, User and its ACL equivalence group.
+
+=head2 VARIABLE
+
+This flag is used to mark dependencies that can be resolved with changing
+value in target object. For example ticket can be created by user we can
+change this reference when we delete user.
+
+=head2 RELATES
+
+This flag is used to validate relationships integrity. Base object
+is valid only when all target objects which are marked with this flags
+exist.
+
+=cut
+
+use constant {
+ DEPENDS_ON => 0x000001,
+ WIPE_AFTER => 0x000010,
+ RELATES => 0x000100,
+ VARIABLE => 0x001000,
+};
+
+=head1 STATES
+
+=head2 ON_STACK
+
+Default state of object in Shredder cache that means that object is
+loaded and placed into cache.
+
+=head2 WIPED
+
+Objects with this state are not exist any more in DB, but perl
+object is still in memory. This state is used to be shure that
+delete query is called once.
+
+=head2 VALID
+
+Object is marked with this state only when its relationships
+are valid.
+
+=head2 INVALID
+
+=cut
+
+use constant {
+ ON_STACK => 0x00000,
+ IN_WIPING => 0x00001,
+ WIPED => 0x00010,
+ VALID => 0x00100,
+ INVALID => 0x01000,
+};
+
+our @EXPORT = qw(
+ DEPENDS_ON
+ WIPE_AFTER
+ RELATES
+ VARIABLE
+ ON_STACK
+ IN_WIPING
+ WIPED
+ VALID
+ INVALID
+ );
+
+1;
diff --git a/rt/lib/RT/Shredder/CustomField.pm b/rt/lib/RT/Shredder/CustomField.pm
new file mode 100644
index 0000000..d956373
--- /dev/null
+++ b/rt/lib/RT/Shredder/CustomField.pm
@@ -0,0 +1,126 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::CustomField ();
+package RT::CustomField;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+#TODO: Queues if we wish export tool
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Custom field values
+ push( @$list, $self->Values );
+
+# Ticket custom field values
+ my $objs = RT::ObjectCustomFieldValues->new( $self->CurrentUser );
+ $objs->LimitToCustomField( $self->Id );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ my $obj = $self->Object;
+
+# Queue
+# Skip if it's global CF
+ if( $self->Queue ) {
+ if( $self->QueueObj && $self->QueueObj->Id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related queue #". $self->Queue ." object";
+ }
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
+
diff --git a/rt/lib/RT/Shredder/CustomFieldValue.pm b/rt/lib/RT/Shredder/CustomFieldValue.pm
new file mode 100644
index 0000000..56a1479
--- /dev/null
+++ b/rt/lib/RT/Shredder/CustomFieldValue.pm
@@ -0,0 +1,94 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::CustomFieldValue ();
+package RT::CustomFieldValue;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+# No dependencies that should be deleted with record
+# I should decide is TicketCustomFieldValue depends by this or not.
+# Today I think no. What would be tomorrow I don't know.
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ my $obj = $self->CustomFieldObj;
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related CustomField #". $self->id ." object";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Dependencies.pm b/rt/lib/RT/Shredder/Dependencies.pm
new file mode 100644
index 0000000..c4ba94c
--- /dev/null
+++ b/rt/lib/RT/Shredder/Dependencies.pm
@@ -0,0 +1,149 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Dependencies;
+
+use strict;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Constants;
+use RT::Shredder::Dependency;
+use RT::Record;
+
+
+
+=head1 METHODS
+
+=head2 new
+
+Creates new empty collection of dependecies.
+
+=cut
+
+sub new
+{
+ my $proto = shift;
+ my $self = bless( {}, ref $proto || $proto );
+ $self->{'list'} = [];
+ return $self;
+}
+
+=head2 _PushDependencies
+
+Put in objects into collection.
+Takes
+BaseObject - any supported object of RT::Record subclass;
+Flags - flags that describe relationship between target and base objects;
+TargetObjects - any of RT::SearchBuilder or RT::Record subclassed objects
+or array ref on list of this objects;
+Shredder - RT::Shredder object.
+
+SeeAlso: _PushDependecy, RT::Shredder::Dependency
+
+=cut
+
+sub _PushDependencies
+{
+ my $self = shift;
+ my %args = ( TargetObjects => undef, Shredder => undef, @_ );
+ my @objs = $args{'Shredder'}->CastObjectsToRecords( Objects => delete $args{'TargetObjects'} );
+ $self->_PushDependency( %args, TargetObject => $_ ) foreach @objs;
+ return;
+}
+
+sub _PushDependency
+{
+ my $self = shift;
+ my %args = (
+ BaseObject => undef,
+ Flags => undef,
+ TargetObject => undef,
+ Shredder => undef,
+ @_
+ );
+ my $rec = $args{'Shredder'}->PutObject( Object => $args{'TargetObject'} );
+ return if $rec->{'State'} & WIPED; # there is no object anymore
+
+ push @{ $self->{'list'} },
+ RT::Shredder::Dependency->new(
+ BaseObject => $args{'BaseObject'},
+ Flags => $args{'Flags'},
+ TargetObject => $rec->{'Object'},
+ );
+
+ if( scalar @{ $self->{'list'} } > ( $RT::DependenciesLimit || 1000 ) ) {
+ RT::Shredder::Exception::Info->throw( 'DependenciesLimit' );
+ }
+ return;
+}
+
+=head2 List
+
+
+=cut
+
+sub List
+{
+ my $self = shift;
+ my %args = (
+ WithFlags => undef,
+ WithoutFlags => undef,
+ Callback => undef,
+ @_
+ );
+
+ my $wflags = delete $args{'WithFlags'};
+ my $woflags = delete $args{'WithoutFlags'};
+
+ return
+ map $args{'Callback'}? $args{'Callback'}->($_): $_,
+ grep !defined( $wflags ) || ($_->Flags & $wflags) == $wflags,
+ grep !defined( $woflags ) || !($_->Flags & $woflags),
+ @{ $self->{'list'} };
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Dependency.pm b/rt/lib/RT/Shredder/Dependency.pm
new file mode 100644
index 0000000..bd49ac0
--- /dev/null
+++ b/rt/lib/RT/Shredder/Dependency.pm
@@ -0,0 +1,112 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Dependency;
+
+use strict;
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+
+my %FlagDescs = (
+ DEPENDS_ON, 'depends on',
+ VARIABLE, 'resolvable dependency',
+ WIPE_AFTER, 'delete after',
+ RELATES, 'relates with',
+);
+
+sub new
+{
+ my $proto = shift;
+ my $self = bless( {}, ref $proto || $proto );
+ $self->Set( @_ );
+ return $self;
+}
+
+sub Set
+{
+ my $self = shift;
+ my %args = ( Flags => DEPENDS_ON, @_ );
+ my @keys = qw(Flags BaseObject TargetObject);
+ @$self{ @keys } = @args{ @keys };
+
+ return;
+}
+
+sub AsString
+{
+ my $self = shift;
+ my $res = $self->BaseObject->_AsString;
+ $res .= " ". $self->FlagsAsString;
+ $res .= " ". $self->TargetObject->_AsString;
+ return $res;
+}
+
+sub Flags { return $_[0]->{'Flags'} }
+sub FlagsAsString
+{
+ my $self = shift;
+ my @res = ();
+ foreach ( sort keys %FlagDescs ) {
+ if( $self->Flags() & $_ ) {
+ push( @res, $FlagDescs{ $_ } );
+ }
+ }
+ push @res, 'no flags' unless( @res );
+ return "(" . join( ',', @res ) . ")";
+}
+
+
+sub BaseObject { return $_[0]->{'BaseObject'} }
+sub TargetObject { return $_[0]->{'TargetObject'} }
+sub Object { return shift()->{ ({@_})->{Type}. "Object" } }
+
+sub TargetClass { return ref $_[0]->{'TargetObject'} }
+sub BaseClass { return ref $_[0]->{'BaseObject'} }
+sub Class { return ref shift()->Object( @_ ) }
+
+1;
diff --git a/rt/lib/RT/Shredder/Exceptions.pm b/rt/lib/RT/Shredder/Exceptions.pm
new file mode 100644
index 0000000..423b7b5
--- /dev/null
+++ b/rt/lib/RT/Shredder/Exceptions.pm
@@ -0,0 +1,113 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Exception;
+
+use warnings;
+use strict;
+
+use Exception::Class;
+use base qw(Exception::Class::Base);
+
+BEGIN {
+ __PACKAGE__->NoRefs(0);
+}
+
+#sub NoRefs { return 0 }
+sub show_trace { return 1 }
+
+package RT::Shredder::Exception::Info;
+
+use base qw(RT::Shredder::Exception);
+
+my %DESCRIPTION = (
+ DependenciesLimit => <<END,
+Dependecies list have reached its limit.
+See \$RT::DependenciesLimit in RT::Shredder docs.
+END
+
+ SystemObject => <<END,
+System object was requested for deletion, shredder couldn't
+do that because system would be unusable than.
+END
+
+ CouldntLoadObject => <<END,
+Shredder couldn't load object. Most probably it's not fatal error.
+May be you've used Objects plugin and asked to delete object that
+doesn't exist in the system. If you think that your request was
+correct and it's problem of the Shredder then you can get full error
+message from RT log files and send bug report.
+END
+
+ NoResolver => <<END,
+Object has dependency that could be resolved, but resolver
+wasn't defined. You have to re-read documentation of the
+plugin you're using, for example the 'Users' plugin has
+option 'replace_relations' argument.
+END
+);
+
+sub Fields { return ((shift)->SUPER::Fields(@_), 'tag') }
+
+sub tag { return (shift)->{'tag'} }
+
+sub full_message {
+ my $self = shift;
+ my $error = $self->message;
+ if ( my $tag = $self->tag ) {
+ my $message = $DESCRIPTION{ $self->tag } || '';
+ warn "Tag '$tag' doesn't exist" unless $message;
+ $message .= "\nAdditional info:\n$error" if $error;
+ return $message;
+ }
+ return $DESCRIPTION{$error} || $error;
+}
+
+sub show_trace { return 0 }
+
+1;
diff --git a/rt/lib/RT/Shredder/Group.pm b/rt/lib/RT/Shredder/Group.pm
new file mode 100644
index 0000000..867fe02
--- /dev/null
+++ b/rt/lib/RT/Shredder/Group.pm
@@ -0,0 +1,185 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Group ();
+package RT::Group;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# User is inconsistent without own Equivalence group
+ if( $self->Domain eq 'ACLEquivalence' ) {
+ # delete user entry after ACL equiv group
+ # in other case we will get deep recursion
+ my $objs = RT::User->new($self->CurrentUser);
+ $objs->Load( $self->Instance );
+ $deps->_PushDependency(
+ BaseObject => $self,
+ Flags => DEPENDS_ON | WIPE_AFTER,
+ TargetObject => $objs,
+ Shredder => $args{'Shredder'}
+ );
+ }
+
+# Principal
+ $deps->_PushDependency(
+ BaseObject => $self,
+ Flags => DEPENDS_ON | WIPE_AFTER,
+ TargetObject => $self->PrincipalObj,
+ Shredder => $args{'Shredder'}
+ );
+
+# Group members records
+ my $objs = RT::GroupMembers->new( $self->CurrentUser );
+ $objs->LimitToMembersOfGroup( $self->PrincipalId );
+ push( @$list, $objs );
+
+# Group member records group belongs to
+ $objs = RT::GroupMembers->new( $self->CurrentUser );
+ $objs->Limit(
+ VALUE => $self->PrincipalId,
+ FIELD => 'MemberId',
+ ENTRYAGGREGATOR => 'OR',
+ QUOTEVALUE => 0
+ );
+ push( @$list, $objs );
+
+# Cached group members records
+ push( @$list, $self->DeepMembersObj );
+
+# Cached group member records group belongs to
+ $objs = RT::GroupMembers->new( $self->CurrentUser );
+ $objs->Limit(
+ VALUE => $self->PrincipalId,
+ FIELD => 'MemberId',
+ ENTRYAGGREGATOR => 'OR',
+ QUOTEVALUE => 0
+ );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Equivalence group id inconsistent without User
+ if( $self->Domain eq 'ACLEquivalence' ) {
+ my $obj = RT::User->new($self->CurrentUser);
+ $obj->Load( $self->Instance );
+ if( $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "ACLEguvivalence group have no related User #". $self->Instance ." object.";
+ }
+ }
+
+# Principal
+ my $obj = $self->PrincipalObj;
+ if( $obj && $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Principal #". $self->id ." object.";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+sub BeforeWipeout
+{
+ my $self = shift;
+ if( $self->Domain eq 'SystemInternal' ) {
+ RT::Shredder::Exception::Info->throw('SystemObject');
+ }
+ return $self->SUPER::BeforeWipeout( @_ );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/GroupMember.pm b/rt/lib/RT/Shredder/GroupMember.pm
new file mode 100644
index 0000000..d8b002e
--- /dev/null
+++ b/rt/lib/RT/Shredder/GroupMember.pm
@@ -0,0 +1,183 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::GroupMember ();
+package RT::GroupMember;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+# No dependencies that should be deleted with record
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ my $objs = RT::CachedGroupMembers->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'MemberId', VALUE => $self->MemberId );
+ $objs->Limit( FIELD => 'ImmediateParentId', VALUE => $self->GroupId );
+ push( @$list, $objs );
+
+ # XXX: right delegations should be cleaned here
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+
+ my $group = $self->GroupObj->Object;
+ # XXX: If we delete member of the ticket owner role group then we should also
+ # fix ticket object, but only if we don't plan to delete group itself!
+ unless( ($group->Type || '') eq 'Owner' &&
+ ($group->Domain || '') eq 'RT::Ticket-Role' ) {
+ return $self->SUPER::__DependsOn( %args );
+ }
+
+ # we don't delete group, so we have to fix Ticket and Group
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON | VARIABLE,
+ TargetObjects => $group,
+ Shredder => $args{'Shredder'}
+ );
+ $args{'Shredder'}->PutResolver(
+ BaseClass => ref $self,
+ TargetClass => ref $group,
+ Code => sub {
+ my %args = (@_);
+ my $group = $args{'TargetObject'};
+ return if $args{'Shredder'}->GetState( Object => $group ) & (WIPED|IN_WIPING);
+ return unless ($group->Type || '') eq 'Owner';
+ return unless ($group->Domain || '') eq 'RT::Ticket-Role';
+
+ return if $group->MembersObj->Count > 1;
+
+ my $group_member = $args{'BaseObject'};
+
+ if( $group_member->MemberObj->id == $RT::Nobody->id ) {
+ RT::Shredder::Exception->throw( "Couldn't delete Nobody from owners role group" );
+ }
+
+ my( $status, $msg ) = $group->AddMember( $RT::Nobody->id );
+ RT::Shredder::Exception->throw( $msg ) unless $status;
+
+ my $ticket = RT::Ticket->new( $group->CurrentUser );
+ $ticket->Load( $group->Instance );
+ RT::Shredder::Exception->throw( "Couldn't load ticket" ) unless $ticket->id;
+
+ ( $status, $msg ) = $ticket->_Set( Field => 'Owner',
+ Value => $RT::Nobody->id,
+ );
+ RT::Shredder::Exception->throw( $msg ) unless $status;
+
+ return;
+ },
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+
+#TODO: If we plan write export tool we also should fetch parent groups
+# now we only wipeout things.
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ my $obj = $self->MemberObj;
+ if( $obj && $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Principal #". $self->MemberId ." object.";
+ }
+
+ $obj = $self->GroupObj;
+ if( $obj && $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Principal #". $self->GroupId ." object.";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Link.pm b/rt/lib/RT/Shredder/Link.pm
new file mode 100644
index 0000000..18cf4ed
--- /dev/null
+++ b/rt/lib/RT/Shredder/Link.pm
@@ -0,0 +1,140 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Link ();
+package RT::Link;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+use RT::Shredder::Constants;
+
+use RT::Shredder::Transaction;
+use RT::Shredder::Record;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# AddLink transactions
+ my $map = RT::Ticket->LINKTYPEMAP;
+ my $link_meta = $map->{ $self->Type };
+ unless ( $link_meta && $link_meta->{'Mode'} && $link_meta->{'Type'} ) {
+ RT::Shredder::Exception->throw( 'Wrong link link_meta, no record for '. $self->Type );
+ }
+ if ( $self->BaseURI->IsLocal ) {
+ my $objs = $self->BaseObj->Transactions;
+ $objs->Limit(
+ FIELD => 'Type',
+ OPERATOR => '=',
+ VALUE => 'AddLink',
+ );
+ $objs->Limit( FIELD => 'NewValue', VALUE => $self->Target );
+ while ( my ($k, $v) = each %$map ) {
+ next unless $v->{'Type'} eq $link_meta->{'Type'};
+ next unless $v->{'Mode'} eq $link_meta->{'Mode'};
+ $objs->Limit( FIELD => 'Field', VALUE => $k );
+ }
+ push( @$list, $objs );
+ }
+
+ my %reverse = ( Base => 'Target', Target => 'Base' );
+ if ( $self->TargetURI->IsLocal ) {
+ my $objs = $self->TargetObj->Transactions;
+ $objs->Limit(
+ FIELD => 'Type',
+ OPERATOR => '=',
+ VALUE => 'AddLink',
+ );
+ $objs->Limit( FIELD => 'NewValue', VALUE => $self->Base );
+ while ( my ($k, $v) = each %$map ) {
+ next unless $v->{'Type'} eq $link_meta->{'Type'};
+ next unless $v->{'Mode'} eq $reverse{ $link_meta->{'Mode'} };
+ $objs->Limit( FIELD => 'Field', VALUE => $k );
+ }
+ push( @$list, $objs );
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON|WIPE_AFTER,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__DependsOn( %args );
+}
+
+#TODO: Link record has small strength, but should be encountered
+# if we plan write export tool.
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+# FIXME: if link is local then object should exist
+
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/ObjectCustomFieldValue.pm b/rt/lib/RT/Shredder/ObjectCustomFieldValue.pm
new file mode 100644
index 0000000..1d3c977
--- /dev/null
+++ b/rt/lib/RT/Shredder/ObjectCustomFieldValue.pm
@@ -0,0 +1,116 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::ObjectCustomFieldValue ();
+package RT::ObjectCustomFieldValue;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Ticket
+ my $obj = $self->TicketObj;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Ticket #". $self->id ." object";
+ }
+
+# Custom Field
+ $obj = $self->CustomFieldObj;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related CustomField #". $self->id ." object";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/POD.pm b/rt/lib/RT/Shredder/POD.pm
new file mode 100644
index 0000000..a3538b3
--- /dev/null
+++ b/rt/lib/RT/Shredder/POD.pm
@@ -0,0 +1,131 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::POD;
+
+use strict;
+use warnings;
+use Pod::Select;
+
+sub plugin_html
+{
+ my ($file, $out_fh) = @_;
+ my $parser = new RT::Shredder::POD::HTML;
+ $parser->select('ARGUMENTS', 'USAGE');
+ $parser->parse_from_file( $file, $out_fh );
+}
+
+sub plugin_cli
+{
+ my ($file, $out_fh, $no_name) = @_;
+ use Pod::PlainText;
+ local @Pod::PlainText::ISA = ('Pod::Select', @Pod::PlainText::ISA);
+ my $parser = new Pod::PlainText;
+ $parser->select('SYNOPSIS', 'ARGUMENTS', 'USAGE');
+ $parser->add_selection('NAME') unless $no_name;
+ $parser->parse_from_file( $file, $out_fh );
+}
+
+sub shredder_cli
+{
+ my ($file, $out_fh) = @_;
+ use Pod::PlainText;
+ local @Pod::PlainText::ISA = ('Pod::Select', @Pod::PlainText::ISA);
+ my $parser = new Pod::PlainText;
+ $parser->select('NAME', 'SYNOPSIS', 'USAGE', 'OPTIONS');
+ $parser->parse_from_file( $file, $out_fh );
+}
+
+package RT::Shredder::POD::HTML;
+use base qw(Pod::Select);
+
+sub command
+{
+ my( $self, $command, $paragraph, $line_num ) = @_;
+
+ my $tag;
+ if ($command =~ /^head(\d+)$/) { $tag = "h$1" }
+ my $out_fh = $self->output_handle();
+ my $expansion = $self->interpolate($paragraph, $line_num);
+ $expansion =~ s/^\s+|\s+$//;
+
+ print $out_fh "<$tag>" if $tag;
+ print $out_fh $expansion;
+ print $out_fh "</$tag>" if $tag;
+ print $out_fh "\n";
+}
+
+sub verbatim
+{
+ my ($self, $paragraph, $line_num) = @_;
+ my $out_fh = $self->output_handle();
+ print $out_fh "<pre>";
+ print $out_fh $paragraph;
+ print $out_fh "</pre>";
+ print $out_fh "\n";
+}
+
+sub textblock {
+ my ($self, $paragraph, $line_num) = @_;
+ my $out_fh = $self->output_handle();
+ my $expansion = $self->interpolate($paragraph, $line_num);
+ $expansion =~ s/^\s+|\s+$//;
+ print $out_fh "<p>";
+ print $out_fh $expansion;
+ print $out_fh "</p>";
+ print $out_fh "\n";
+}
+
+sub interior_sequence {
+ my ($self, $seq_command, $seq_argument) = @_;
+ ## Expand an interior sequence; sample actions might be:
+ return "<b>$seq_argument</b>" if $seq_command eq 'B';
+ return "<i>$seq_argument</i>" if $seq_command eq 'I';
+ return "<span class=\"pod-sequence-$seq_command\">$seq_argument</span>";
+}
+1;
diff --git a/rt/lib/RT/Shredder/Plugin.pm b/rt/lib/RT/Shredder/Plugin.pm
new file mode 100644
index 0000000..4ba6258
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin.pm
@@ -0,0 +1,249 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin;
+
+use strict;
+use warnings FATAL => 'all';
+use File::Spec ();
+
+=head1 NAME
+
+RT::Shredder::Plugin - interface to access shredder plugins
+
+=head1 SYNOPSIS
+
+ use RT::Shredder::Plugin;
+
+ # get list of the plugins
+ my %plugins = RT::Shredder::Plugin->List;
+
+ # load plugin by name
+ my $plugin = new RT::Shredder::Plugin;
+ my( $status, $msg ) = $plugin->LoadByName( 'Tickets' );
+ unless( $status ) {
+ print STDERR "Couldn't load plugin 'Tickets': $msg\n";
+ exit(1);
+ }
+
+ # load plugin by preformatted string
+ my $plugin = new RT::Shredder::Plugin;
+ my( $status, $msg ) = $plugin->LoadByString( 'Tickets=status,deleted' );
+ unless( $status ) {
+ print STDERR "Couldn't load plugin: $msg\n";
+ exit(1);
+ }
+
+=head1 METHODS
+
+=head2 new
+
+Object constructor, returns new object. Takes optional hash
+as arguments, it's not required and this class doesn't use it,
+but plugins could define some arguments and can handle them
+after your've load it.
+
+=cut
+
+sub new
+{
+ my $proto = shift;
+ my $self = bless( {}, ref $proto || $proto );
+ $self->_Init( @_ );
+ return $self;
+}
+
+sub _Init
+{
+ my $self = shift;
+ my %args = ( @_ );
+ $self->{'opt'} = \%args;
+}
+
+=head2 List
+
+Returns hash with names of the available plugins as keys and path to
+library files as values. Method has no arguments. Can be used as class
+method too.
+
+Takes optional argument C<type> and leaves in the result hash only
+plugins of that type.
+
+=cut
+
+sub List
+{
+ my $self = shift;
+ my $type = shift;
+
+ my @files;
+ foreach my $root( @INC ) {
+ my $mask = File::Spec->catfile( $root, qw(RT Shredder Plugin *.pm) );
+ push @files, glob $mask;
+ }
+
+ my %res = map { $_ =~ m/([^\\\/]+)\.pm$/; $1 => $_ } reverse @files;
+
+ return %res unless $type;
+
+ delete $res{'Base'};
+ foreach my $name( keys %res ) {
+ my $class = join '::', qw(RT Shredder Plugin), $name;
+ unless( eval "require $class" ) {
+ delete $res{ $name };
+ next;
+ }
+ next if lc $class->Type eq lc $type;
+ delete $res{ $name };
+ }
+
+ return %res;
+}
+
+=head2 LoadByName
+
+Takes name of the plugin as first argument, loads plugin,
+creates new plugin object and reblesses self into plugin
+if all steps were successfuly finished, then you don't need to
+create new object for the plugin.
+
+Other arguments are sent to the constructor of the plugin
+(method new.)
+
+Returns C<$status> and C<$message>. On errors status
+is C<false> value.
+
+=cut
+
+sub LoadByName
+{
+ my $self = shift;
+ my $name = shift or return (0, "Name not specified");
+
+ local $@;
+ my $plugin = "RT::Shredder::Plugin::$name";
+ eval "require $plugin" or return( 0, $@ );
+ return( 0, "Plugin '$plugin' has no method new") unless $plugin->can('new');
+
+ my $obj = eval { $plugin->new( @_ ) };
+ return( 0, $@ ) if $@;
+ return( 0, 'constructor returned empty object' ) unless $obj;
+
+ $self->Rebless( $obj );
+ return( 1, "successfuly load plugin" );
+}
+
+=head2 LoadByString
+
+Takes formatted string as first argument and which is used to
+load plugin. The format of the string is
+
+ <plugin name>[=<arg>,<val>[;<arg>,<val>]...]
+
+exactly like in the L<rt-shredder> script. All other
+arguments are sent to the plugins constructor.
+
+Method does the same things as C<LoadByName>, but also
+checks if the plugin supports arguments and values are correct,
+so you can C<Run> specified plugin immediatly.
+
+Returns list with C<$status> and C<$message>. On errors status
+is C<false>.
+
+=cut
+
+sub LoadByString
+{
+ my $self = shift;
+ my ($plugin, $args) = split /=/, ( shift || '' ), 2;
+
+ my ($status, $msg) = $self->LoadByName( $plugin, @_ );
+ return( $status, $msg ) unless $status;
+
+ my %args;
+ foreach( split /\s*;\s*/, ( $args || '' ) ) {
+ my( $k,$v ) = split /\s*,\s*/, ( $_ || '' ), 2;
+ unless( $args{$k} ) {
+ $args{$k} = $v;
+ next;
+ }
+
+ $args{$k} = [ $args{$k} ] unless UNIVERSAL::isa( $args{ $k }, 'ARRAY');
+ push @{ $args{$k} }, $v;
+ }
+
+ ($status, $msg) = $self->HasSupportForArgs( keys %args );
+ return( $status, $msg ) unless $status;
+
+ ($status, $msg) = $self->TestArgs( %args );
+ return( $status, $msg ) unless $status;
+
+ return( 1, "successfuly load plugin" );
+}
+
+=head2 Rebless
+
+Instance method that takes one object as argument and rebless
+the current object into into class of the argument and copy data
+of the former. Returns nothing.
+
+Method is used by C<Load*> methods to automaticaly rebless
+C<RT::Shredder::Plugin> object into class of the loaded
+plugin.
+
+=cut
+
+sub Rebless
+{
+ my( $self, $obj ) = @_;
+ bless( $self, ref $obj );
+ %{$self} = %{$obj};
+ return;
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Plugin/Attachments.pm b/rt/lib/RT/Shredder/Plugin/Attachments.pm
new file mode 100644
index 0000000..36dbbcf
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Attachments.pm
@@ -0,0 +1,141 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Attachments;
+
+use strict;
+use warnings FATAL => 'all';
+use base qw(RT::Shredder::Plugin::Base::Search);
+
+=head1 NAME
+
+RT::Shredder::Plugin::Attachments - search plugin for wiping attachments.
+
+=head1 ARGUMENTS
+
+=head2 files_only - boolean value
+
+Search only file attachments.
+
+=head2 file - mask
+
+Search files with specific file name only.
+
+Example: '*.xl?' or '*.gif'
+
+=head2 longer - attachment content size
+
+Search attachments which content is longer than specified.
+You can use trailing 'K' or 'M' character to specify size in
+kilobytes or megabytes.
+
+=cut
+
+sub SupportArgs { return $_[0]->SUPER::SupportArgs, qw(files_only file longer) }
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = @_;
+ my $queue;
+ if( $args{'file'} ) {
+ unless( $args{'file'} =~ /^[\w\. *?]+$/) {
+ return( 0, "Files mask '$args{file}' has invalid characters" );
+ }
+ $args{'file'} = $self->ConvertMaskToSQL( $args{'file'} );
+ }
+ if( $args{'longer'} ) {
+ unless( $args{'longer'} =~ /^\d+\s*[mk]?$/i ) {
+ return( 0, "Invalid file size argument '$args{longer}'" );
+ }
+ }
+ return $self->SUPER::TestArgs( %args );
+}
+
+sub Run
+{
+ my $self = shift;
+ my @conditions = ();
+ my @values = ();
+ if( $self->{'opt'}{'file'} ) {
+ my $mask = $self->{'opt'}{'file'};
+ push @conditions, "( Filename LIKE ? )";
+ push @values, $mask;
+ }
+ if( $self->{'opt'}{'files_only'} ) {
+ push @conditions, "( LENGTH(Filename) > 0 )";
+ }
+ if( $self->{'opt'}{'longer'} ) {
+ my $size = $self->{'opt'}{'longer'};
+ $size =~ s/([mk])//i;
+ $size *= 1024 if $1 && lc $1 eq 'k';
+ $size *= 1024*1024 if $1 && lc $1 eq 'm';
+ push @conditions, "( LENGTH(Content) > ? )";
+ push @values, $size;
+ }
+ return (0, "At least one condition should be provided" ) unless @conditions;
+ my $query = "SELECT id FROM Attachments WHERE ". join ' AND ', @conditions;
+ if( $self->{'opt'}{'limit'} ) {
+ $RT::Handle->ApplyLimits( \$query, $self->{'opt'}{'limit'} );
+ }
+ my $sth = $RT::Handle->SimpleQuery( $query, @values );
+ return (0, "Internal error: '$sth'. Please send bug report.") unless $sth;
+
+ my @objs;
+ while( my $row = $sth->fetchrow_arrayref ) {
+ push @objs, $row->[0];
+ }
+ return (0, "Internal error: '". $sth->err ."'. Please send bug report.") if $sth->err;
+
+ map { $_ = "RT::Attachment-$_" } @objs;
+
+ return (1, @objs);
+}
+
+1;
+
diff --git a/rt/lib/RT/Shredder/Plugin/Base.pm b/rt/lib/RT/Shredder/Plugin/Base.pm
new file mode 100644
index 0000000..3e3e73b
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Base.pm
@@ -0,0 +1,188 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Base;
+
+use strict;
+use warnings FATAL => 'all';
+
+=head1 NAME
+
+RT::Shredder::Plugin::Base - base class for Shredder plugins.
+
+=cut
+
+sub new
+{
+ my $proto = shift;
+ my $self = bless( {}, ref $proto || $proto );
+ $self->_Init( @_ );
+ return $self;
+}
+
+sub _Init
+{
+ my $self = shift;
+ $self->{'opt'} = { @_ };
+}
+
+=head1 USAGE
+
+=head2 masks
+
+If any argument is marked with keyword C<mask> then it means
+that this argument support two special characters:
+
+1) C<*> matches any non empty sequence of the characters.
+For example C<*@example.com> will match any email address in
+C<example.com> domain.
+
+2) C<?> matches exactly one character.
+For example C<????> will match any string four characters long.
+
+=head1 METHODS
+
+=head2 for subclassing in plugins
+
+=head3 Type - is not supported yet
+
+See F<Todo> for more info.
+
+=cut
+
+sub Type { return '' }
+
+=head3 SupportArgs
+
+Takes nothing.
+Returns list of the supported plugin arguments.
+
+Base class returns list of the arguments which all
+classes B<must> support.
+
+=cut
+
+sub SupportArgs { return () }
+
+=head3 HasSupportForArgs
+
+Takes a list of argument names. Returns true if
+all arguments are supported by plugin and returns
+C<(0, $msg)> in other case.
+
+=cut
+
+sub HasSupportForArgs
+{
+ my $self = shift;
+ my @args = @_;
+ my @unsupported = ();
+ foreach my $a( @args ) {
+ push @unsupported, $a unless grep $_ eq $a, $self->SupportArgs;
+ }
+ return( 1 ) unless @unsupported;
+ return( 0, "Plugin doesn't support argument(s): @unsupported" ) if @unsupported;
+}
+
+=head3 TestArgs
+
+Takes hash with arguments and thier values and returns true
+if all values pass testing otherwise returns C<(0, $msg)>.
+
+Stores arguments hash in C<$self->{'opt'}>, you can access this hash
+from C<Run> method.
+
+Method should be subclassed if plugin support non standard arguments.
+
+=cut
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = @_;
+ if ( $self->{'opt'} ) {
+ $self->{'opt'} = { %{$self->{'opt'}}, %args };
+ } else {
+ $self->{'opt'} = \%args;
+ }
+ return 1;
+}
+
+=head3 Run
+
+Takes no arguments.
+Executes plugin and return C<(1, @objs)> on success or
+C<(0, $msg)> if error had happenned.
+
+Method B<must> be subclassed, this class always returns error.
+
+Method B<must> be called only after C<TestArgs> method in other
+case values of the arguments are not available.
+
+=cut
+
+sub Run { return (0, "This is abstract plugin, you couldn't use it directly") }
+
+=head2 utils
+
+=head3 ConvertMaskToSQL
+
+Takes one argument - mask with C<*> and C<?> chars and
+return mask SQL chars.
+
+=cut
+
+sub ConvertMaskToSQL {
+ my $self = shift;
+ my $mask = shift || '';
+ $mask =~ s/\*/%/g;
+ $mask =~ s/\?/_/g;
+ return $mask;
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Plugin/Base/Dump.pm b/rt/lib/RT/Shredder/Plugin/Base/Dump.pm
new file mode 100644
index 0000000..ecfc82e
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Base/Dump.pm
@@ -0,0 +1,70 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Base::Dump;
+
+use strict;
+use warnings FATAL => 'all';
+
+use base qw(RT::Shredder::Plugin::Base);
+
+=head1 NAME
+
+RT::Shredder::Plugin::Base - base class for Shredder plugins.
+
+=cut
+
+sub Type { return 'dump' }
+sub AppliesToStates { return () }
+sub SupportArgs { return () }
+
+sub PushMark { return 1 }
+sub PopMark { return 1 }
+sub RollbackTo { return 1 }
+
+1;
diff --git a/rt/lib/RT/Shredder/Plugin/Base/Search.pm b/rt/lib/RT/Shredder/Plugin/Base/Search.pm
new file mode 100644
index 0000000..21de159
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Base/Search.pm
@@ -0,0 +1,142 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Base::Search;
+
+use strict;
+use warnings FATAL => 'all';
+
+use base qw(RT::Shredder::Plugin::Base);
+
+=head1 NAME
+
+RT::Shredder::Plugin::Base - base class for Shredder plugins.
+
+=cut
+
+sub Type { return 'search' }
+
+=head1 ARGUMENTS
+
+Arguments which all plugins support.
+
+=head2 limit - unsigned integer
+
+Allow you to limit search results. B<< Default value is C<10> >>.
+
+=head1 METHODS
+
+=cut
+
+sub SupportArgs
+{
+ my %seen;
+ return sort
+ grep $_ && !$seen{$_},
+ shift->SUPER::SupportArgs(@_),
+ qw(limit);
+}
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = @_;
+ if( defined $args{'limit'} && $args{'limit'} ne '' ) {
+ my $limit = $args{'limit'};
+ $limit =~ s/[^0-9]//g;
+ unless( $args{'limit'} eq $limit ) {
+ return( 0, "'limit' should be an unsigned integer");
+ }
+ $args{'limit'} = $limit;
+ } else {
+ $args{'limit'} = 10;
+ }
+ return $self->SUPER::TestArgs( %args );
+}
+
+sub SetResolvers { return 1 }
+
+
+=head2 FetchNext $collection [, $init]
+
+Returns next object in collection as method L<RT::SearchBuilder/Next>, but
+doesn't stop on page boundaries.
+
+When method is called with true C<$init> arg it enables pages on collection
+and selects first page.
+
+Main purpose of this method is to avoid loading of whole collection into
+memory as RT does by default when pager is not used. This method init paging
+on the collection, but doesn't stop when reach page end.
+
+Example:
+
+ $plugin->FetchNext( $tickets, 'init' );
+ while( my $ticket = $plugin->FetchNext( $tickets ) ) {
+ ...
+ }
+
+=cut
+
+use constant PAGE_SIZE => 100;
+sub FetchNext {
+ my ($self, $objs, $init) = @_;
+ if ( $init ) {
+ $objs->RowsPerPage( PAGE_SIZE );
+ $objs->FirstPage;
+ return;
+ }
+
+ my $obj = $objs->Next;
+ return $obj if $obj;
+ $objs->NextPage;
+ return $objs->Next;
+}
+
+1;
+
diff --git a/rt/lib/RT/Shredder/Plugin/Objects.pm b/rt/lib/RT/Shredder/Plugin/Objects.pm
new file mode 100644
index 0000000..fe2314a
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Objects.pm
@@ -0,0 +1,107 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Objects;
+
+use strict;
+use warnings FATAL => 'all';
+use base qw(RT::Shredder::Plugin::Base::Search);
+
+use RT::Shredder;
+
+=head1 NAME
+
+RT::Shredder::Plugin::Objects - search plugin for wiping any selected object.
+
+=head1 ARGUMENTS
+
+This plugin searches an RT object you want, so you can use
+the object name as argument and id as value, for example if
+you want select ticket #123 then from CLI you write next
+command:
+
+ rt-shredder --plugin 'Objects=Ticket,123'
+
+=cut
+
+sub SupportArgs
+{
+ return $_[0]->SUPER::SupportArgs, @RT::Shredder::SUPPORTED_OBJECTS;
+}
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = @_;
+
+ my @strings;
+ foreach my $name( @RT::Shredder::SUPPORTED_OBJECTS ) {
+ next unless $args{$name};
+
+ my $list = $args{$name};
+ $list = [$list] unless UNIVERSAL::isa( $list, 'ARRAY' );
+ push @strings, map "RT::$name\-$_", @$list;
+ }
+
+ my @objs = RT::Shredder->CastObjectsToRecords( Objects => \@strings );
+
+ my @res = $self->SUPER::TestArgs( %args );
+
+ $self->{'opt'}->{'objects'} = \@objs;
+
+ return (@res);
+}
+
+sub Run
+{
+ my $self = shift;
+ my %args = ( Shredder => undef, @_ );
+ return (1, @{$self->{'opt'}->{'objects'}});
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Plugin/SQLDump.pm b/rt/lib/RT/Shredder/Plugin/SQLDump.pm
new file mode 100644
index 0000000..cd3fa33
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/SQLDump.pm
@@ -0,0 +1,96 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::SQLDump;
+
+use strict;
+use warnings;
+
+use base qw(RT::Shredder::Plugin::Base::Dump);
+use RT::Shredder;
+
+sub AppliesToStates { return 'after wiping dependencies' }
+
+sub SupportArgs
+{
+ my $self = shift;
+ return $self->SUPER::SupportArgs, qw(file_name from_storage);
+}
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = @_;
+ $args{'from_storage'} = 1 unless defined $args{'from_storage'};
+ my $file = $args{'file_name'} = RT::Shredder->GetFileName(
+ FileName => $args{'file_name'},
+ FromStorage => delete $args{'from_storage'},
+ );
+ open $args{'file_handle'}, ">:raw", $file
+ or return (0, "Couldn't open '$file' for write: $!");
+
+ return $self->SUPER::TestArgs( %args );
+}
+
+sub FileName { return $_[0]->{'opt'}{'file_name'} }
+sub FileHandle { return $_[0]->{'opt'}{'file_handle'} }
+
+sub Run
+{
+ my $self = shift;
+ return (0, 'no handle') unless my $fh = $self->{'opt'}{'file_handle'};
+
+ my %args = ( Object => undef, @_ );
+ my $query = $args{'Object'}->_AsInsertQuery;
+ $query .= "\n" unless $query =~ /\n$/;
+
+ return print $fh $query or return (0, "Couldn't write to filehandle");
+ return 1;
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Plugin/Summary.pm b/rt/lib/RT/Shredder/Plugin/Summary.pm
new file mode 100644
index 0000000..6ab76ba
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Summary.pm
@@ -0,0 +1,188 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Summary;
+
+use strict;
+use warnings FATAL => 'all';
+
+use base qw(RT::Shredder::Plugin::SQLDump);
+
+sub AppliesToStates { return 'before any action' }
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = (file_name => '', @_);
+ unless( $args{'file_name'} ) {
+ require POSIX;
+ $args{'file_name'} = POSIX::strftime( "summary-%Y%m%dT%H%M%S.XXXX.txt", gmtime );
+ }
+ return $self->SUPER::TestArgs( %args );
+}
+
+sub Run
+{
+ my $self = shift;
+ my %args = ( Object => undef, @_ );
+ my $class = ref $args{'Object'};
+ $class =~ s/^RT:://;
+ $class =~ s/:://g;
+ my $method = 'WriteDown'. $class;
+ $method = 'WriteDownDefault' unless $self->can($method);
+ return $self->$method( %args );
+ return 1;
+}
+
+my %skip_refs_to = ();
+
+sub WriteDownDefault {
+ my $self = shift;
+ my %args = ( Object => undef, @_ );
+ return $self->_WriteDownHash(
+ $args{'Object'},
+ $self->_MakeHash( $args{'Object'} ),
+ );
+}
+
+# TODO: cover other objects
+# ACE.pm
+# Attachment.pm
+# CustomField.pm
+# CustomFieldValue.pm
+# GroupMember.pm
+# Group.pm
+# Link.pm
+# ObjectCustomFieldValue.pm
+# Principal.pm
+# Queue.pm
+# Ticket.pm
+# User.pm
+
+# ScripAction.pm - works fine with defaults
+# ScripCondition.pm - works fine with defaults
+# Template.pm - works fine with defaults
+
+sub WriteDownCachedGroupMember { return 1 }
+sub WriteDownPrincipal { return 1 }
+
+sub WriteDownGroup {
+ my $self = shift;
+ my %args = ( Object => undef, @_ );
+ if ( $args{'Object'}->Domain =~ /-Role$/ ) {
+ return $skip_refs_to{ $args{'Object'}->_AsString } = 1;
+ }
+ return $self->WriteDownDefault( %args );
+}
+
+sub WriteDownTransaction {
+ my $self = shift;
+ my %args = ( Object => undef, @_ );
+
+ my $props = $self->_MakeHash( $args{'Object'} );
+ $props->{'Object'} = delete $props->{'ObjectType'};
+ $props->{'Object'} .= '-'. delete $props->{'ObjectId'}
+ if $props->{'ObjectId'};
+ return 1 if $skip_refs_to{ $props->{'Object'} };
+
+ delete $props->{$_} foreach grep
+ !defined $props->{$_} || $props->{$_} eq '', keys %$props;
+
+ return $self->_WriteDownHash( $args{'Object'}, $props );
+}
+
+sub WriteDownScrip {
+ my $self = shift;
+ my %args = ( Object => undef, @_ );
+ my $props = $self->_MakeHash( $args{'Object'} );
+ $props->{'Action'} = $args{'Object'}->ActionObj->Name;
+ $props->{'Condition'} = $args{'Object'}->ConditionObj->Name;
+ $props->{'Template'} = $args{'Object'}->TemplateObj->Name;
+ $props->{'Queue'} = $args{'Object'}->QueueObj->Name || 'global';
+
+ return $self->_WriteDownHash( $args{'Object'}, $props );
+}
+
+sub _MakeHash {
+ my ($self, $obj) = @_;
+ my $hash = $self->__MakeHash( $obj );
+ foreach (grep exists $hash->{$_}, qw(Creator LastUpdatedBy)) {
+ my $method = $_ .'Obj';
+ my $u = $obj->$method();
+ $hash->{ $_ } = $u->EmailAddress || $u->Name || $u->_AsString;
+ }
+ return $hash;
+}
+
+sub __MakeHash {
+ my ($self, $obj) = @_;
+ my %hash;
+ $hash{ $_ } = $obj->$_()
+ foreach sort keys %{ $obj->_ClassAccessible };
+ return \%hash;
+}
+
+sub _WriteDownHash {
+ my ($self, $obj, $hash) = @_;
+ return (0, 'no handle') unless my $fh = $self->{'opt'}{'file_handle'};
+
+ print $fh "=== ". $obj->_AsString ." ===\n"
+ or return (0, "Couldn't write to filehandle");
+
+ foreach my $key( sort keys %$hash ) {
+ my $val = $hash->{ $key };
+ next unless defined $val;
+ $val =~ s/\n/\n /g;
+ print $fh $key .': '. $val ."\n"
+ or return (0, "Couldn't write to filehandle");
+ }
+ print $fh "\n" or return (0, "Couldn't write to filehandle");
+ return 1;
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Plugin/Tickets.pm b/rt/lib/RT/Shredder/Plugin/Tickets.pm
new file mode 100644
index 0000000..ebbfb3e
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Tickets.pm
@@ -0,0 +1,153 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Tickets;
+
+use strict;
+use warnings FATAL => 'all';
+use base qw(RT::Shredder::Plugin::Base::Search);
+
+=head1 NAME
+
+RT::Shredder::Plugin::Tickets - search plugin for wiping tickets.
+
+=head1 ARGUMENTS
+
+=head2 query - query string
+
+Search tickets with query string.
+Examples:
+ Queue = 'my queue' AND ( Status = 'deleted' OR Status = 'rejected' )
+ LastUpdated < '2003-12-31 23:59:59'
+
+B<Hint:> You can construct query with the query builder in RT's web
+interface and then open advanced page and copy query string.
+
+Arguments C<queue>, C<status> and C<updated_before> have been dropped
+as you can easy make the same search with the C<query> option.
+See examples above.
+
+=head2 with_linked - boolen
+
+Deletes all tickets that are linked to tickets that match L<query>.
+
+=head2 apply_query_to_linked - boolean
+
+Delete linked tickets only if those too match L<query>.
+
+See also L<with_linked>.
+
+=cut
+
+sub SupportArgs { return $_[0]->SUPER::SupportArgs, qw(query with_linked apply_query_to_linked) }
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = @_;
+ my $queue;
+ if( $args{'query'} ) {
+ my $objs = RT::Tickets->new( $RT::SystemUser );
+ $objs->{'allow_deleted_search'} = 1;
+ my ($status, $msg) = $objs->FromSQL( $args{'query'} );
+ return( 0, "Bad query argument, error: $msg" ) unless $status;
+ $self->{'opt'}{'objects'} = $objs;
+ }
+ $args{'with_linked'} = 1 if $args{'apply_query_to_linked'};
+
+ return $self->SUPER::TestArgs( %args );
+}
+
+sub Run
+{
+ my $self = shift;
+ my $objs = $self->{'opt'}{'objects'}
+ or return (1, undef);
+
+ $objs->OrderByCols( { FIELD => 'id', ORDER => 'ASC' } );
+ unless ( $self->{'opt'}{'with_linked'} ) {
+ if( $self->{'opt'}{'limit'} ) {
+ $objs->RowsPerPage( $self->{'opt'}{'limit'} );
+ }
+ return (1, $objs);
+ }
+
+ my (@top, @linked, %seen);
+ $self->FetchNext($objs, 1);
+ while ( my $obj = $self->FetchNext( $objs ) ) {
+ next if $seen{ $obj->id }++;
+ push @linked, $self->GetLinked( Object => $obj, Seen => \%seen );
+ push @top, $obj;
+ last if $self->{'opt'}{'limit'}
+ && @top >= $self->{'opt'}{'limit'};
+ }
+ return (1, @top, @linked);
+}
+
+sub GetLinked
+{
+ my $self = shift;
+ my %arg = @_;
+ my @res = ();
+ my $query = 'Linked = '. $arg{'Object'}->id;
+ if ( $self->{'opt'}{'apply_query_to_linked'} ) {
+ $query .= " AND ( ". $self->{'opt'}{'query'} ." )";
+ }
+ my $objs = RT::Tickets->new( $RT::SystemUser );
+ $objs->{'allow_deleted_search'} = 1;
+ $objs->FromSQL( $query );
+ $self->FetchNext( $objs, 1 );
+ while ( my $linked_obj = $self->FetchNext( $objs ) ) {
+ next if $arg{'Seen'}->{ $linked_obj->id }++;
+ push @res, $self->GetLinked( %arg, Object => $linked_obj );
+ push @res, $linked_obj;
+ }
+ return @res;
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Plugin/Users.pm b/rt/lib/RT/Shredder/Plugin/Users.pm
new file mode 100644
index 0000000..2565fc5
--- /dev/null
+++ b/rt/lib/RT/Shredder/Plugin/Users.pm
@@ -0,0 +1,260 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Shredder::Plugin::Users;
+
+use strict;
+use warnings FATAL => 'all';
+use base qw(RT::Shredder::Plugin::Base::Search);
+
+=head1 NAME
+
+RT::Shredder::Plugin::Users - search plugin for wiping users.
+
+=head1 ARGUMENTS
+
+=head2 status - string
+
+Status argument allow you to limit result set to C<disabled>,
+C<enabled> or C<any> users.
+B<< Default value is C<disabled>. >>
+
+=head2 name - mask
+
+User name mask.
+
+=head2 email - mask
+
+Email address mask.
+
+=head2 member_of - group identifier
+
+Using this option users that are members of a particular group can
+be selected for deletion. Identifier is name of user defined group
+or id of a group, as well C<Privileged> or <unprivileged> can used
+to select people from system groups.
+
+=head2 replace_relations - user identifier
+
+When you delete user there are could be minor links to him in RT DB.
+This option allow you to replace this links with link to other user.
+This links are Creator and LastUpdatedBy, but NOT any watcher roles,
+this means that if user is watcher(Requestor, Owner,
+Cc or AdminCc) of the ticket or queue then link would be deleted.
+
+This argument could be user id or name.
+
+=head2 no_tickets - boolean
+
+If true then plugin looks for users who are not watchers (Owners,
+Requestors, Ccs or AdminCcs) of any ticket.
+
+Before RT 3.8.5, users who were watchers of deleted tickets B<will be deleted>
+when this option was enabled. Decision has been made that it's not correct
+and you should either shred these deleted tickets, change watchers or
+explicitly delete user by name or email.
+
+Note that found users still B<may have relations> with other objects,
+for example via Creator or LastUpdatedBy fields, and you most probably
+want to use C<replace_relations> option.
+
+=cut
+
+sub SupportArgs
+{
+ return $_[0]->SUPER::SupportArgs,
+ qw(status name email member_of replace_relations no_tickets);
+}
+
+sub TestArgs
+{
+ my $self = shift;
+ my %args = @_;
+ if( $args{'status'} ) {
+ unless( $args{'status'} =~ /^(disabled|enabled|any)$/i ) {
+ return (0, "Status '$args{'status'}' is unsupported.");
+ }
+ } else {
+ $args{'status'} = 'disabled';
+ }
+ if( $args{'email'} ) {
+ $args{'email'} = $self->ConvertMaskToSQL( $args{'email'} );
+ }
+ if( $args{'name'} ) {
+ $args{'name'} = $self->ConvertMaskToSQL( $args{'name'} );
+ }
+ if( $args{'member_of'} ) {
+ my $group = RT::Group->new( $RT::SystemUser );
+ if ( $args{'member_of'} =~ /^(Everyone|Privileged|Unprivileged)$/i ) {
+ $group->LoadSystemInternalGroup( $args{'member_of'} );
+ }
+ else {
+ $group->LoadUserDefinedGroup( $args{'member_of'} );
+ }
+ unless ( $group->id ) {
+ return (0, "Couldn't load group '$args{'member_of'}'" );
+ }
+ $args{'member_of'} = $group->id;
+
+ }
+ if( $args{'replace_relations'} ) {
+ my $uid = $args{'replace_relations'};
+ # XXX: it's possible that SystemUser is not available
+ my $user = RT::User->new( $RT::SystemUser );
+ $user->Load( $uid );
+ unless( $user->id ) {
+ return (0, "Couldn't load user '$uid'" );
+ }
+ $args{'replace_relations'} = $user->id;
+ }
+ return $self->SUPER::TestArgs( %args );
+}
+
+sub Run
+{
+ my $self = shift;
+ my %args = ( Shredder => undef, @_ );
+ my $objs = RT::Users->new( $RT::SystemUser );
+ # XXX: we want preload only things we need, but later while
+ # logging we need all data, TODO envestigate this
+ # $objs->Columns(qw(id Name EmailAddress Lang Timezone
+ # Creator Created LastUpdated LastUpdatedBy));
+ if( my $s = $self->{'opt'}{'status'} ) {
+ if( $s eq 'any' ) {
+ $objs->{'find_disabled_rows'} = 1;
+ } elsif( $s eq 'disabled' ) {
+ $objs->{'find_disabled_rows'} = 1;
+ $objs->Limit(
+ ALIAS => $objs->PrincipalsAlias,
+ FIELD => 'Disabled',
+ OPERATOR => '!=',
+ VALUE => '0',
+ );
+ } else {
+ $objs->LimitToEnabled;
+ }
+ }
+ if( $self->{'opt'}{'email'} ) {
+ $objs->Limit( FIELD => 'EmailAddress',
+ OPERATOR => 'MATCHES',
+ VALUE => $self->{'opt'}{'email'},
+ );
+ }
+ if( $self->{'opt'}{'name'} ) {
+ $objs->Limit( FIELD => 'Name',
+ OPERATOR => 'MATCHES',
+ VALUE => $self->{'opt'}{'name'},
+ );
+ }
+ if( $self->{'opt'}{'member_of'} ) {
+ $objs->MemberOfGroup( $self->{'opt'}{'member_of'} );
+ }
+ if( $self->{'opt'}{'no_tickets'} ) {
+ return $self->FilterWithoutTickets(
+ Shredder => $args{'Shredder'},
+ Objects => $objs,
+ );
+ } else {
+ if( $self->{'opt'}{'limit'} ) {
+ $objs->RowsPerPage( $self->{'opt'}{'limit'} );
+ }
+ }
+ return (1, $objs);
+}
+
+sub SetResolvers
+{
+ my $self = shift;
+ my %args = ( Shredder => undef, @_ );
+
+ if( $self->{'opt'}{'replace_relations'} ) {
+ my $uid = $self->{'opt'}{'replace_relations'};
+ my $resolver = sub {
+ my %args = (@_);
+ my $t = $args{'TargetObject'};
+ foreach my $method ( qw(Creator LastUpdatedBy) ) {
+ next unless $t->_Accessible( $method => 'read' );
+ $t->__Set( Field => $method, Value => $uid );
+ }
+ };
+ $args{'Shredder'}->PutResolver( BaseClass => 'RT::User', Code => $resolver );
+ }
+ return (1);
+}
+
+sub FilterWithoutTickets {
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Objects => undef,
+ @_,
+ );
+ my $users = $args{Objects};
+ $self->FetchNext( $users, 'init' );
+
+ my @res;
+ while ( my $user = $self->FetchNext( $users ) ) {
+ push @res, $user if $self->_WithoutTickets( $user );
+ return (1, \@res) if $self->{'opt'}{'limit'} && @res >= $self->{'opt'}{'limit'};
+ }
+ return (1, \@res);
+}
+
+sub _WithoutTickets {
+ my ($self, $user) = @_;
+ my $tickets = RT::Tickets->new( $RT::SystemUser );
+ $tickets->{'allow_deleted_search'} = 1;
+ $tickets->FromSQL( 'Watcher.id = '. $user->id );
+ # HACK: we may use Count method which counts all records
+ # that match condtion, but we really want to know only that
+ # at least one record exist, so we fetch first row only
+ $tickets->RowsPerPage(1);
+ return !$tickets->First;
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Principal.pm b/rt/lib/RT/Shredder/Principal.pm
new file mode 100644
index 0000000..cc5cd0e
--- /dev/null
+++ b/rt/lib/RT/Shredder/Principal.pm
@@ -0,0 +1,127 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Principal ();
+package RT::Principal;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Exceptions;
+use RT::Shredder::Constants;
+use RT::Shredder::Dependencies;
+
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Group or User
+# Could be wiped allready
+ my $obj = $self->Object;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ }
+
+# Access Control List
+ my $objs = RT::ACL->new( $self->CurrentUser );
+ $objs->Limit(
+ FIELD => 'PrincipalId',
+ OPERATOR => '=',
+ VALUE => $self->Id
+ );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ my $obj = $self->Object;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related ". $self->Type ." #". $self->id ." object";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Queue.pm b/rt/lib/RT/Shredder/Queue.pm
new file mode 100644
index 0000000..4ab3815
--- /dev/null
+++ b/rt/lib/RT/Shredder/Queue.pm
@@ -0,0 +1,106 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Queue ();
+package RT::Queue;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Tickets
+ my $objs = RT::Tickets->new( $self->CurrentUser );
+ $objs->{'allow_deleted_search'} = 1;
+ $objs->Limit( FIELD => 'Queue', VALUE => $self->Id );
+ push( @$list, $objs );
+
+# Queue role groups( Cc, AdminCc )
+ $objs = RT::Groups->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'Domain', VALUE => 'RT::Queue-Role' );
+ $objs->Limit( FIELD => 'Instance', VALUE => $self->Id );
+ push( @$list, $objs );
+
+# Scrips
+ $objs = RT::Scrips->new( $self->CurrentUser );
+ $objs->LimitToQueue( $self->id );
+ push( @$list, $objs );
+
+# Templates
+ $objs = $self->Templates;
+ push( @$list, $objs );
+
+# Custom Fields
+ $objs = RT::CustomFields->new( $self->CurrentUser );
+ $objs->LimitToQueue( $self->id );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__DependsOn( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Record.pm b/rt/lib/RT/Shredder/Record.pm
new file mode 100644
index 0000000..94208a2
--- /dev/null
+++ b/rt/lib/RT/Shredder/Record.pm
@@ -0,0 +1,273 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Record ();
+package RT::Record;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+
+=head2 _AsString
+
+Returns string in format ClassName-ObjectId.
+
+=cut
+
+sub _AsString { return ref($_[0]) ."-". $_[0]->id }
+
+=head2 _AsInsertQuery
+
+Returns INSERT query string that duplicates current record and
+can be used to insert record back into DB after delete.
+
+=cut
+
+sub _AsInsertQuery
+{
+ my $self = shift;
+
+ my $dbh = $RT::Handle->dbh;
+
+ my $res = "INSERT INTO ". $dbh->quote_identifier( $self->Table );
+ my $values = $self->{'values'};
+ $res .= "(". join( ",", map { $dbh->quote_identifier( $_ ) } sort keys %$values ) .")";
+ $res .= " VALUES";
+ $res .= "(". join( ",", map { $dbh->quote( $values->{$_} ) } sort keys %$values ) .")";
+ $res .= ";";
+
+ return $res;
+}
+
+sub BeforeWipeout { return 1 }
+
+=head2 Dependencies
+
+Returns L<RT::Shredder::Dependencies> object.
+
+=cut
+
+sub Dependencies
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Flags => DEPENDS_ON,
+ @_,
+ );
+
+ unless( $self->id ) {
+ RT::Shredder::Exception->throw('Object is not loaded');
+ }
+
+ my $deps = RT::Shredder::Dependencies->new();
+ if( $args{'Flags'} & DEPENDS_ON ) {
+ $self->__DependsOn( %args, Dependencies => $deps );
+ }
+ if( $args{'Flags'} & RELATES ) {
+ $self->__Relates( %args, Dependencies => $deps );
+ }
+ return $deps;
+}
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Object custom field values
+ my $objs = $self->CustomFieldValues;
+ $objs->{'find_expired_rows'} = 1;
+ push( @$list, $objs );
+
+# Object attributes
+ $objs = $self->Attributes;
+ push( @$list, $objs );
+
+# Transactions
+ $objs = RT::Transactions->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'ObjectType', VALUE => ref $self );
+ $objs->Limit( FIELD => 'ObjectId', VALUE => $self->id );
+ push( @$list, $objs );
+
+# Links
+ if ( $self->can('_Links') ) {
+ # XXX: We don't use Links->Next as it's dies when object
+ # is linked to object that doesn't exist
+ # also, ->Next skip links to deleted tickets :(
+ foreach ( qw(Base Target) ) {
+ my $objs = $self->_Links( $_ );
+ $objs->_DoSearch;
+ push @$list, $objs->ItemsArrayRef;
+ }
+ }
+
+# ACE records
+ $objs = RT::ACL->new( $self->CurrentUser );
+ $objs->LimitToObject( $self );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return;
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+ if( $self->_Accessible( 'Creator', 'read' ) ) {
+ my $obj = RT::Principal->new( $self->CurrentUser );
+ $obj->Load( $self->Creator );
+
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ push @{ $rec->{'Description'} },
+ "Have no related User(Creator) #". $self->Creator ." object";
+ }
+ }
+
+ if( $self->_Accessible( 'LastUpdatedBy', 'read' ) ) {
+ my $obj = RT::Principal->new( $self->CurrentUser );
+ $obj->Load( $self->LastUpdatedBy );
+
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ push @{ $rec->{'Description'} },
+ "Have no related User(LastUpdatedBy) #". $self->LastUpdatedBy ." object";
+ }
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+
+ # cause of this $self->SUPER::__Relates should be called last
+ # in overridden subs
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $rec->{'State'} |= VALID unless( $rec->{'State'} & INVALID );
+
+ return;
+}
+
+# implement proxy method because some RT classes
+# override Delete method
+sub __Wipeout
+{
+ my $self = shift;
+ my $msg = $self->_AsString ." wiped out";
+ $self->SUPER::Delete;
+ $RT::Logger->info( $msg );
+ return;
+}
+
+sub ValidateRelations
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ @_
+ );
+ unless( $args{'Shredder'} ) {
+ $args{'Shredder'} = new RT::Shredder();
+ }
+
+ my $rec = $args{'Shredder'}->PutObject( Object => $self );
+ return if( $rec->{'State'} & VALID );
+ $self = $rec->{'Object'};
+
+ $self->_ValidateRelations( %args, Flags => RELATES );
+ $rec->{'State'} |= VALID unless( $rec->{'State'} & INVALID );
+
+ return;
+}
+
+sub _ValidateRelations
+{
+ my $self = shift;
+ my %args = ( @_ );
+
+ my $deps = $self->Dependencies( %args );
+
+ $deps->ValidateRelations( %args );
+
+ return;
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Scrip.pm b/rt/lib/RT/Shredder/Scrip.pm
new file mode 100644
index 0000000..2cf7244
--- /dev/null
+++ b/rt/lib/RT/Shredder/Scrip.pm
@@ -0,0 +1,130 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Scrip ();
+package RT::Scrip;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# No dependencies that should be deleted with record
+# Scrip actions and conditions should be exported in feature with it.
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Queue
+ my $obj = $self->QueueObj;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Queue #". $self->id ." object";
+ }
+
+# Condition
+ $obj = $self->ConditionObj;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related ScripCondition #". $self->id ." object";
+ }
+# Action
+ $obj = $self->ActionObj;
+ if( defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related ScripAction #". $self->id ." object";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/ScripAction.pm b/rt/lib/RT/Shredder/ScripAction.pm
new file mode 100644
index 0000000..9ecfc76
--- /dev/null
+++ b/rt/lib/RT/Shredder/ScripAction.pm
@@ -0,0 +1,100 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::ScripAction ();
+package RT::ScripAction;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Scrips
+ my $objs = RT::Scrips->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'ScripAction', VALUE => $self->Id );
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $objs,
+ Shredder => $args{'Shredder'}
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# TODO: Check here for exec module
+
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/ScripCondition.pm b/rt/lib/RT/Shredder/ScripCondition.pm
new file mode 100644
index 0000000..48b8620
--- /dev/null
+++ b/rt/lib/RT/Shredder/ScripCondition.pm
@@ -0,0 +1,101 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::ScripCondition ();
+package RT::ScripCondition;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Scrips
+ my $objs = RT::Scrips->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'ScripCondition', VALUE => $self->Id );
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $objs,
+ Shredder => $args{'Shredder'}
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# TODO: Check here for exec module
+
+ return $self->SUPER::__Relates( %args );
+}
+
+
+1;
diff --git a/rt/lib/RT/Shredder/Template.pm b/rt/lib/RT/Shredder/Template.pm
new file mode 100644
index 0000000..db2c4c7
--- /dev/null
+++ b/rt/lib/RT/Shredder/Template.pm
@@ -0,0 +1,120 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Template ();
+package RT::Template;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Scrips
+ my $objs = RT::Scrips->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'Template', VALUE => $self->Id );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'},
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Queue
+ my $obj = $self->QueueObj;
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Queue #". $self->id ." object";
+ }
+
+# TODO: Users(Creator, LastUpdatedBy)
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Ticket.pm b/rt/lib/RT/Shredder/Ticket.pm
new file mode 100644
index 0000000..cacae24
--- /dev/null
+++ b/rt/lib/RT/Shredder/Ticket.pm
@@ -0,0 +1,126 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Ticket ();
+package RT::Ticket;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Tickets which were merged in
+ my $objs = RT::Tickets->new( $self->CurrentUser );
+ $objs->{'allow_deleted_search'} = 1;
+ $objs->Limit( FIELD => 'EffectiveId', VALUE => $self->Id );
+ $objs->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->Id );
+ push( @$list, $objs );
+
+# Ticket role groups( Owner, Requestors, Cc, AdminCc )
+ $objs = RT::Groups->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'Domain', VALUE => 'RT::Ticket-Role' );
+ $objs->Limit( FIELD => 'Instance', VALUE => $self->Id );
+ push( @$list, $objs );
+
+#TODO: Users, Queues if we wish export tool
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Queue
+ my $obj = $self->QueueObj;
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Queue #". $self->Queue ." object";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/Transaction.pm b/rt/lib/RT/Shredder/Transaction.pm
new file mode 100644
index 0000000..cdd6c3e
--- /dev/null
+++ b/rt/lib/RT/Shredder/Transaction.pm
@@ -0,0 +1,115 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::Transaction ();
+package RT::Transaction;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Attachments
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $self->Attachments,
+ Shredder => $args{'Shredder'}
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Ticket
+ my $obj = $self->TicketObj;
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Ticket #". $self->id ." object";
+ }
+
+# TODO: Users(Creator, LastUpdatedBy)
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+1;
diff --git a/rt/lib/RT/Shredder/User.pm b/rt/lib/RT/Shredder/User.pm
new file mode 100644
index 0000000..d17860a
--- /dev/null
+++ b/rt/lib/RT/Shredder/User.pm
@@ -0,0 +1,191 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use RT::User ();
+package RT::User;
+
+use strict;
+use warnings;
+use warnings FATAL => 'redefine';
+
+use RT::Shredder::Constants;
+use RT::Shredder::Exceptions;
+use RT::Shredder::Dependencies;
+
+my @OBJECTS = qw(
+ Attachments
+ CachedGroupMembers
+ CustomFields
+ CustomFieldValues
+ GroupMembers
+ Groups
+ Links
+ Principals
+ Queues
+ ScripActions
+ ScripConditions
+ Scrips
+ Templates
+ ObjectCustomFieldValues
+ Tickets
+ Transactions
+ Users
+);
+
+sub __DependsOn
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Principal
+ $deps->_PushDependency(
+ BaseObject => $self,
+ Flags => DEPENDS_ON | WIPE_AFTER,
+ TargetObject => $self->PrincipalObj,
+ Shredder => $args{'Shredder'}
+ );
+
+# ACL equivalence group
+# don't use LoadACLEquivalenceGroup cause it may not exists any more
+ my $objs = RT::Groups->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'Domain', VALUE => 'ACLEquivalence' );
+ $objs->Limit( FIELD => 'Instance', VALUE => $self->Id );
+ push( @$list, $objs );
+
+# Cleanup user's membership
+ $objs = RT::GroupMembers->new( $self->CurrentUser );
+ $objs->Limit( FIELD => 'MemberId', VALUE => $self->Id );
+ push( @$list, $objs );
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+
+# TODO: Almost all objects has Creator, LastUpdatedBy and etc. fields
+# which are references on users(Principal actualy)
+ my @var_objs;
+ foreach( @OBJECTS ) {
+ my $class = "RT::$_";
+ foreach my $method ( qw(Creator LastUpdatedBy) ) {
+ my $objs = $class->new( $self->CurrentUser );
+ next unless $objs->NewItem->_Accessible( $method => 'read' );
+ $objs->Limit( FIELD => $method, VALUE => $self->id );
+ push @var_objs, $objs;
+ }
+ }
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => DEPENDS_ON | VARIABLE,
+ TargetObjects => \@var_objs,
+ Shredder => $args{'Shredder'}
+ );
+
+ return $self->SUPER::__DependsOn( %args );
+}
+
+sub __Relates
+{
+ my $self = shift;
+ my %args = (
+ Shredder => undef,
+ Dependencies => undef,
+ @_,
+ );
+ my $deps = $args{'Dependencies'};
+ my $list = [];
+
+# Principal
+ my $obj = $self->PrincipalObj;
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related ACL equivalence Group object";
+ }
+
+ $obj = RT::Group->new( $RT::SystemUser );
+ $obj->LoadACLEquivalenceGroup( $self->PrincipalObj );
+ if( $obj && defined $obj->id ) {
+ push( @$list, $obj );
+ } else {
+ my $rec = $args{'Shredder'}->GetRecord( Object => $self );
+ $self = $rec->{'Object'};
+ $rec->{'State'} |= INVALID;
+ $rec->{'Description'} = "Have no related Principal #". $self->id ." object";
+ }
+
+ $deps->_PushDependencies(
+ BaseObject => $self,
+ Flags => RELATES,
+ TargetObjects => $list,
+ Shredder => $args{'Shredder'}
+ );
+ return $self->SUPER::__Relates( %args );
+}
+
+sub BeforeWipeout
+{
+ my $self = shift;
+ if( $self->Name =~ /^(RT_System|Nobody)$/ ) {
+ RT::Shredder::Exception::Info->throw('SystemObject');
+ }
+ return $self->SUPER::BeforeWipeout( @_ );
+}
+
+1;
diff --git a/rt/lib/RT/StyleGuide.pod b/rt/lib/RT/StyleGuide.pod
index ff9a1b5..84ccb89 100644
--- a/rt/lib/RT/StyleGuide.pod
+++ b/rt/lib/RT/StyleGuide.pod
@@ -262,20 +262,14 @@ style perfectly; we are trying to fix it without breaking exsiting APIs.
=head2 Tests
Modules should provide test code, with documentation on how to use
-it. Test::Inline allows tests to be embedded in code. Test::More makes it
-easy to create tests. Any code you write should have a testsuite.
-Any code you alter should have a test suite. If a patch comes in without
-tests, there is something wrong.
-
-When altering code, you must run the test harness before submitting a patch
-or committing code to the repository.
-
-"make regression" will extract inline tests, blow away the system database
-and run the test suite.
-
-"make regression-quiet" will do all that and not print the "ok" lines.
+it. Test::More makes it easy to create tests. Any code you write
+should have a testsuite. Any code you alter should have a test
+suite. If a patch comes in without tests, there is something wrong.
+When altering code, you must run the test harness before submitting a
+patch or committing code to the repository.
+"make test" will run the test suite.
=head2 STDIN/STDOUT
@@ -787,11 +781,11 @@ should become <&|/l, $m->scomp('/Elements/SelectNewTicketQueue')&><input type="
-The string <& /Elements/TitleBoxStart, width=> "40%", titleright => "RT $RT::VERSION for $RT::rtname", title => 'Login' &>
+The string <& /Elements/TitleBoxStart, width=> "40%", titleright => "RT $RT::VERSION for RT->Config->Get('rtname')", title => 'Login' &>
should become <& /Elements/TitleBoxStart,
width=> "40%",
- titleright => loc("RT [_1] for [_2]",$RT::VERSION, $RT::rtname),
+ titleright => loc("RT [_1] for [_2]",$RT::VERSION, RT->Config->Get('rtname')),
title => loc('Login'),
&>
@@ -816,7 +810,7 @@ should become return $self->loc( "Subject changed to [_1]", $self->Data );
It is important not to localize the names of rights or statuses within RT's core, as there is logic that depends on them as string identifiers. The proper place to localize these values is when they're presented for display in the web or commandline interfaces.
-=back 4
+=back
=head1 CODING PRCEDURE
diff --git a/rt/lib/RT/System.pm b/rt/lib/RT/System.pm
index 2d9ebb0..2a23e32 100644
--- a/rt/lib/RT/System.pm
+++ b/rt/lib/RT/System.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::System
@@ -65,19 +66,19 @@ In the future, there will probably be other API goodness encapsulated here.
package RT::System;
-use base qw /RT::Record/;
+
use strict;
+use warnings;
+use base qw/RT::Record/;
use RT::ACL;
-use vars qw/ $RIGHTS/;
# System rights are rights granted to the whole system
# XXX TODO Can't localize these outside of having an object around.
-$RIGHTS = {
+our $RIGHTS = {
SuperUser => 'Do anything and everything', # loc_pair
AdminAllPersonalGroups =>
- "Create, delete and modify the members of any user's personal groups"
- , # loc_pair
+ "Create, delete and modify the members of any user's personal groups", # loc_pair
AdminOwnPersonalGroups =>
'Create, delete and modify the members of personal groups', # loc_pair
AdminUsers => 'Create, delete and modify users', # loc_pair
@@ -85,6 +86,7 @@ $RIGHTS = {
DelegateRights =>
"Delegate specific rights which have been granted to you.", # loc_pair
ShowConfigTab => "show Configuration tab", # loc_pair
+ ShowApprovalsTab => "show Approvals tab", # loc_pair
LoadSavedSearch => "allow loading of saved searches", # loc_pair
CreateSavedSearch => "allow creation of saved searches", # loc_pair
};
@@ -99,25 +101,20 @@ foreach my $right ( keys %{$RIGHTS} ) {
=head2 AvailableRights
-Returns a hash of available rights for this object. The keys are the right names and the values are a description of what the rights do
-
-=begin testing
-
-my $s = RT::System->new($RT::SystemUser);
-my $rights = $s->AvailableRights;
-ok ($rights, "Rights defined");
-ok ($rights->{'AdminUsers'},"AdminUsers right found");
-ok ($rights->{'CreateTicket'},"CreateTicket right found");
-ok ($rights->{'AdminGroupMembership'},"ModifyGroupMembers right found");
-ok (!$rights->{'CasdasdsreateTicket'},"bogus right not found");
-
-
-
-=end testing
+Returns a hash of available rights for this object.
+The keys are the right names and the values are a
+description of what the rights do.
+This method as well returns rights of other RT objects,
+like L<RT::Queue> or L<RT::Group>. To allow users to apply
+those rights globally.
=cut
+
+use RT::CustomField;
+use RT::Queue;
+use RT::Group;
sub AvailableRights {
my $self = shift;
@@ -125,15 +122,31 @@ sub AvailableRights {
my $group = RT::Group->new($RT::SystemUser);
my $cf = RT::CustomField->new($RT::SystemUser);
- my $qr =$queue->AvailableRights();
+ my $qr = $queue->AvailableRights();
my $gr = $group->AvailableRights();
my $cr = $cf->AvailableRights();
# Build a merged list of all system wide rights, queue rights and group rights.
my %rights = (%{$RIGHTS}, %{$gr}, %{$qr}, %{$cr});
+
return(\%rights);
}
+=head2 AddRights C<RIGHT>, C<DESCRIPTION> [, ...]
+
+Adds the given rights to the list of possible rights. This method
+should be called during server startup, not at runtime.
+
+=cut
+
+sub AddRights {
+ my $self = shift if ref $_[0] or $_[0] eq __PACKAGE__;
+ my %new = @_;
+ $RIGHTS = { %$RIGHTS, %new };
+ %RT::ACE::LOWERCASERIGHTNAMES = ( %RT::ACE::LOWERCASERIGHTNAMES,
+ map { lc($_) => $_ } keys %new);
+}
+
sub _Init {
my $self = shift;
$self->SUPER::_Init (@_) if @_ && $_[0];
@@ -143,24 +156,10 @@ sub _Init {
Returns RT::System's id. It's 1.
-
-=begin testing
-
-use RT::System;
-my $sys = RT::System->new();
-is( $sys->Id, 1);
-is ($sys->id, 1);
-
-=end testing
-
-
=cut
*Id = \&id;
-
-sub id {
- return (1);
-}
+sub id { return 1 }
=head2 Load
@@ -169,18 +168,26 @@ It does nothing
=cut
-sub Load {
- return (1);
-}
+sub Load { return 1 }
+sub Name { return 'RT System' }
+sub __Set { return 0 }
+sub __Value { return 0 }
+sub Create { return 0 }
+sub Delete { return 0 }
-sub Name {
- return 'RT System';
-}
+sub SubjectTag {
+ my $self = shift;
+ my $queue = shift;
-sub __Set { 0 }
-sub __Value { 0 }
-sub Create { 0 }
-sub Delete { 0 }
+ my $map = $self->FirstAttribute('BrandedSubjectTag');
+ $map = $map->Content if $map;
+ return $queue ? undef : () unless $map;
+
+ return $map->{ $queue->id } if $queue;
+
+ my %seen = ();
+ return grep !$seen{lc $_}++, values %$map;
+}
eval "require RT::System_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/System_Vendor.pm});
diff --git a/rt/lib/RT/Template.pm b/rt/lib/RT/Template.pm
index a46eef1..f27a0c2 100755
--- a/rt/lib/RT/Template.pm
+++ b/rt/lib/RT/Template.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Template_Overlay.pm b/rt/lib/RT/Template_Overlay.pm
index 9706404..fce37bc 100644
--- a/rt/lib/RT/Template_Overlay.pm
+++ b/rt/lib/RT/Template_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Portions Copyright 2000 Tobias Brox <tobix@cpan.org>
=head1 NAME
@@ -60,11 +61,6 @@
=head1 METHODS
-=begin testing
-
-ok(require RT::Template);
-
-=end testing
=cut
@@ -72,15 +68,12 @@ ok(require RT::Template);
package RT::Template;
use strict;
+use warnings;
no warnings qw(redefine);
use Text::Template;
use MIME::Entity;
use MIME::Parser;
-use File::Temp qw /tempdir/;
-
-
-# {{{ sub _Accessible
sub _Accessible {
my $self = shift;
@@ -99,10 +92,6 @@ sub _Accessible {
return $self->SUPER::_Accessible( @_, %Cols );
}
-# }}}
-
-# {{{ sub _Set
-
sub _Set {
my $self = shift;
@@ -112,27 +101,10 @@ sub _Set {
return $self->SUPER::_Set( @_ );
}
-# }}}
-
-# {{{ sub _Value
-
=head2 _Value
-Takes the name of a table column.
-Returns its value as a string, if the user passes an ACL check
-
-
-=begin testing
-
-my $t = RT::Template->new($RT::SystemUser);
-$t->Create(Name => "Foo", Queue => 1);
-my $t2 = RT::Template->new($RT::Nobody);
-$t2->Load($t->Id);
-ok($t2->QueueObj->id, "Got the template's queue objet");
-
-=end testing
-
-
+Takes the name of a table column. Returns its value as a string,
+if the user passes an ACL check, otherwise returns undef.
=cut
@@ -146,13 +118,15 @@ sub _Value {
}
-# }}}
-
-# {{{ sub Load
-
=head2 Load <identifer>
-Load a template, either by number or by name
+Load a template, either by number or by name.
+
+Note that loading templates by name using this method B<is
+ambiguous>. Several queues may have template with the same name
+and as well global template with the same name may exist.
+Use L</LoadGlobalTemplate> and/or L<LoadQueueTemplate> to get
+precise result.
=cut
@@ -167,10 +141,6 @@ sub Load {
return $self->LoadById( $identifier );
}
-# }}}
-
-# {{{ sub LoadGlobalTemplate
-
=head2 LoadGlobalTemplate NAME
Load the global template with the name NAME
@@ -179,18 +149,28 @@ Load the global template with the name NAME
sub LoadGlobalTemplate {
my $self = shift;
- my $id = shift;
+ my $name = shift;
- return ( $self->LoadQueueTemplate( Queue => 0, Name => $id ) );
+ return ( $self->LoadQueueTemplate( Queue => 0, Name => $name ) );
}
-# }}}
+=head2 LoadQueueTemplate (Queue => QUEUEID, Name => NAME)
-# {{{ sub LoadQueueTemplate
+Loads the Queue template named NAME for Queue QUEUE.
-=head2 LoadQueueTemplate (Queue => QUEUEID, Name => NAME)
+Note that this method doesn't load a global template with the same name
+if template in the queue doesn't exist. THe following code can be used:
-Loads the Queue template named NAME for Queue QUEUE.
+ $template->LoadQueueTemplate( Queue => $queue_id, Name => $template_name );
+ unless ( $template->id ) {
+ $template->LoadGlobalTemplate( $template_name );
+ unless ( $template->id ) {
+ # no template
+ ...
+ }
+ }
+ # ok, template either queue's or global
+ ...
=cut
@@ -206,10 +186,6 @@ sub LoadQueueTemplate {
}
-# }}}
-
-# {{{ sub Create
-
=head2 Create
Takes a paramhash of Content, Queue, Name and Description.
@@ -221,7 +197,6 @@ template.
Returns the Template's id # if the create was successful. Returns undef for
unknown database failure.
-
=cut
sub Create {
@@ -237,7 +212,7 @@ sub Create {
unless ( $args{'Queue'} ) {
unless ( $self->CurrentUser->HasRight(Right =>'ModifyTemplate', Object => $RT::System) ) {
- return ( undef, $self->loc('Permission denied') );
+ return ( undef, $self->loc('Permission Denied') );
}
$args{'Queue'} = 0;
}
@@ -246,7 +221,7 @@ sub Create {
$QueueObj->Load( $args{'Queue'} ) || return ( undef, $self->loc('Invalid queue') );
unless ( $QueueObj->CurrentUserHasRight('ModifyTemplate') ) {
- return ( undef, $self->loc('Permission denied') );
+ return ( undef, $self->loc('Permission Denied') );
}
$args{'Queue'} = $QueueObj->Id;
}
@@ -262,10 +237,6 @@ sub Create {
}
-# }}}
-
-# {{{ sub Delete
-
=head2 Delete
Delete this template.
@@ -282,59 +253,105 @@ sub Delete {
return ( $self->SUPER::Delete(@_) );
}
-# }}}
+=head2 IsEmpty
-# {{{ sub MIMEObj
-sub MIMEObj {
+Returns true value if content of the template is empty, otherwise
+returns false.
+
+=cut
+
+sub IsEmpty {
my $self = shift;
- return ( $self->{'MIMEObj'} );
+ my $content = $self->Content;
+ return 0 if defined $content && length $content;
+ return 1;
}
-# }}}
+=head2 MIMEObj
-# {{{ sub Parse
+Returns L<MIME::Entity> object parsed using L</Parse> method. Returns
+undef if last call to L</Parse> failed or never be called.
+
+Note that content of the template is UTF-8, but L<MIME::Parser> is not
+good at handling it and all data of the entity should be treated as
+octets and converted to perl strings using Encode::decode_utf8 or
+something else.
+
+=cut
+
+sub MIMEObj {
+ my $self = shift;
+ return ( $self->{'MIMEObj'} );
+}
=head2 Parse
- This routine performs Text::Template parsing on the template and then
- imports the results into a MIME::Entity so we can really use it
+This routine performs L<Text::Template> parsing on the template and then
+imports the results into a L<MIME::Entity> so we can really use it. Use
+L</MIMEObj> method to get the L<MIME::Entity> object.
- Takes a hash containing Argument, TicketObj, and TransactionObj. TicketObj
- and TransactionObj are not mandatory, but highly recommended.
+Takes a hash containing Argument, TicketObj, and TransactionObj and other
+arguments that will be available in the template's code. TicketObj and
+TransactionObj are not mandatory, but highly recommended.
- It returns a tuple of (val, message)
- If val is 0, the message contains an error message
+It returns a tuple of (val, message). If val is false, the message contains
+an error message.
=cut
sub Parse {
my $self = shift;
+ my ($rv, $msg);
- #We're passing in whatever we were passed. it's destined for _ParseContent
- my ($content, $msg) = $self->_ParseContent(@_);
- return ( 0, $msg ) unless defined $content;
- #Lets build our mime Entity
+ if ($self->Content =~ m{^Content-Type:\s+text/html\b}im) {
+ local $RT::Transaction::PreferredContentType = 'text/html';
+ ($rv, $msg) = $self->_Parse(@_);
+ }
+ else {
+ ($rv, $msg) = $self->_Parse(@_);
+ }
- my $parser = MIME::Parser->new();
+ return ($rv, $msg) unless $rv;
- # On some situations TMPDIR is non-writable. sad but true.
- $parser->output_to_core(1);
- $parser->tmp_to_core(1);
+ my $mime_type = $self->MIMEObj->mime_type;
+ if (defined $mime_type and $mime_type eq 'text/html') {
+ $self->_DowngradeFromHTML(@_);
+ }
- #If someone includes a message, don't extract it
- $parser->extract_nested_messages(1);
+ return ($rv, $msg);
+}
- # Set up the prefix for files with auto-generated names:
- $parser->output_prefix("part");
+sub _Parse {
+ my $self = shift;
- # If content length is <= 50000 bytes, store each msg as in-core scalar;
- # Else, write to a disk file (the default action):
- $parser->output_to_core(50000);
+ # clear prev MIME object
+ $self->{'MIMEObj'} = undef;
+
+ #We're passing in whatever we were passed. it's destined for _ParseContent
+ my ($content, $msg) = $self->_ParseContent(@_);
+ return ( 0, $msg ) unless defined $content && length $content;
+
+ if ( $content =~ /^\S/s && $content !~ /^\S+:/ ) {
+ $RT::Logger->error(
+ "Template #". $self->id ." has leading line that doesn't"
+ ." look like header field, if you don't want to override"
+ ." any headers and don't want to see this error message"
+ ." then leave first line of the template empty"
+ );
+ $content = "\n".$content;
+ }
+
+ my $parser = MIME::Parser->new();
+ $parser->output_to_core(1);
+ $parser->tmp_to_core(1);
+ $parser->use_inner_files(1);
### Should we forgive normally-fatal errors?
$parser->ignore_errors(1);
- $self->{'MIMEObj'} = eval { $parser->parse_data($content) };
+ # MIME::Parser doesn't play well with perl strings
+ utf8::encode($content);
+ $self->{'MIMEObj'} = eval { $parser->parse_data( \$content ) };
if ( my $error = $@ || $parser->last_error ) {
$RT::Logger->error( "$error" );
return ( 0, $error );
@@ -347,10 +364,6 @@ sub Parse {
}
-# }}}
-
-# {{{ sub _ParseContent
-
# Perform Template substitutions on the template
sub _ParseContent {
@@ -362,23 +375,15 @@ sub _ParseContent {
@_
);
- no warnings 'redefine';
- local $T::Ticket = $args{'TicketObj'};
- local $T::Transaction = $args{'TransactionObj'};
- local $T::Argument = $args{'Argument'};
- local $T::Requestor = eval { $T::Ticket->Requestors->UserMembersObj->First->Name } if $T::Ticket;
- local $T::rtname = $RT::rtname;
-
- local *T::loc = sub {
- $T::Ticket ? $T::Ticket->loc(@_)
- : $self->CurrentUser->loc(@_)
- };
+ unless ( $self->CurrentUserHasQueueRight('ShowTemplate') ) {
+ return (undef, $self->loc("Permission Denied"));
+ }
- my $content = $self->Content;
- unless ( defined $content ) {
- return ( undef, $self->loc("Permissions denied") );
+ if ( $self->IsEmpty ) {
+ return ( undef, $self->loc("Template is empty") );
}
+ my $content = $self->SUPER::_Value('Content');
# We need to untaint the content of the template, since we'll be working
# with it
$content =~ s/^(.*)$/$1/;
@@ -387,24 +392,72 @@ sub _ParseContent {
SOURCE => $content
);
+ $args{'Ticket'} = delete $args{'TicketObj'} if $args{'TicketObj'};
+ $args{'Transaction'} = delete $args{'TransactionObj'} if $args{'TransactionObj'};
+ $args{'Requestor'} = eval { $args{'Ticket'}->Requestors->UserMembersObj->First->Name }
+ if $args{'Ticket'};
+ $args{'rtname'} = RT->Config->Get('rtname');
+ if ( $args{'Ticket'} ) {
+ my $t = $args{'Ticket'}; # avoid memory leak
+ $args{'loc'} = sub { $t->loc(@_) };
+ } else {
+ $args{'loc'} = sub { $self->loc(@_) };
+ }
+
+ foreach my $key ( keys %args ) {
+ next unless ref $args{ $key };
+ next if ref $args{ $key } =~ /^(ARRAY|HASH|SCALAR|CODE)$/;
+ my $val = $args{ $key };
+ $args{ $key } = \$val;
+ }
+
+
my $is_broken = 0;
- my $retval = $template->fill_in( PACKAGE => 'T', BROKEN => sub {
- my (%args) = @_;
- $RT::Logger->error("Template parsing error: $args{error}")
- unless $args{error} =~ /^Died at /; # ignore intentional die()
- $is_broken++;
- return undef;
- } );
+ my $retval = $template->fill_in(
+ HASH => \%args,
+ BROKEN => sub {
+ my (%args) = @_;
+ $RT::Logger->error("Template parsing error: $args{error}")
+ unless $args{error} =~ /^Died at /; # ignore intentional die()
+ $is_broken++;
+ return undef;
+ },
+ );
return ( undef, $self->loc('Template parsing error') ) if $is_broken;
- # MIME::Parser has problems dealing with high-bit utf8 data.
- Encode::_utf8_off($retval);
return ($retval);
}
-# }}}
+sub _DowngradeFromHTML {
+ my $self = shift;
+ my $orig_entity = $self->MIMEObj;
+
+ my $new_entity = $orig_entity->dup; # this will fail badly if we go away from InCore parsing
+ $new_entity->head->mime_attr( "Content-Type" => 'text/plain' );
+ $new_entity->head->mime_attr( "Content-Type.charset" => 'utf-8' );
-# {{{ sub CurrentUserHasQueueRight
+ $orig_entity->head->mime_attr( "Content-Type" => 'text/html' );
+ $orig_entity->head->mime_attr( "Content-Type.charset" => 'utf-8' );
+ $orig_entity->make_multipart('alternative', Force => 1);
+
+ require HTML::FormatText;
+ require HTML::TreeBuilder;
+ my $tree = HTML::TreeBuilder->new_from_content(
+ $new_entity->bodyhandle->as_string
+ );
+ $new_entity->bodyhandle(MIME::Body::InCore->new(
+ \(scalar HTML::FormatText->new(
+ leftmargin => 0,
+ rightmargin => 78,
+ )->format( $tree ))
+ ));
+ $tree->delete;
+
+ $orig_entity->add_part($new_entity, 0); # plain comes before html
+ $self->{MIMEObj} = $orig_entity;
+
+ return;
+}
=head2 CurrentUserHasQueueRight
@@ -417,6 +470,4 @@ sub CurrentUserHasQueueRight {
return ( $self->QueueObj->CurrentUserHasRight(@_) );
}
-# }}}
-
1;
diff --git a/rt/lib/RT/Templates.pm b/rt/lib/RT/Templates.pm
index 9a2acbd..8988702 100755
--- a/rt/lib/RT/Templates.pm
+++ b/rt/lib/RT/Templates.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Templates_Overlay.pm b/rt/lib/RT/Templates_Overlay.pm
index 0a91789..c031277 100644
--- a/rt/lib/RT/Templates_Overlay.pm
+++ b/rt/lib/RT/Templates_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Templates - a collection of RT Template objects
@@ -58,11 +59,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Templates);
-
-=end testing
=cut
diff --git a/rt/lib/RT/Test.pm b/rt/lib/RT/Test.pm
new file mode 100644
index 0000000..34e5fae
--- /dev/null
+++ b/rt/lib/RT/Test.pm
@@ -0,0 +1,1293 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Test;
+
+use strict;
+use warnings;
+
+use base 'Test::More';
+
+use Socket;
+use File::Temp qw(tempfile);
+use File::Path qw(mkpath);
+use File::Spec;
+
+our $SKIP_REQUEST_WORK_AROUND = 0;
+
+use HTTP::Request::Common ();
+use Hook::LexWrap;
+wrap 'HTTP::Request::Common::form_data',
+ post => sub {
+ return if $SKIP_REQUEST_WORK_AROUND;
+ my $data = $_[-1];
+ if (ref $data) {
+ $data->[0] = Encode::encode_utf8($data->[0]);
+ }
+ else {
+ $_[-1] = Encode::encode_utf8($_[-1]);
+ }
+ };
+
+
+our @EXPORT = qw(is_empty);
+our ($port, $dbname);
+our @SERVERS;
+
+my %tmp = (
+ directory => undef,
+ config => {
+ RT => undef,
+ apache => undef,
+ },
+ mailbox => undef,
+);
+
+=head1 NAME
+
+RT::Test - RT Testing
+
+=head1 NOTES
+
+=head2 COVERAGE
+
+To run the rt test suite with coverage support, install L<Devel::Cover> and run:
+
+ make test RT_DBA_USER=.. RT_DBA_PASSWORD=.. HARNESS_PERL_SWITCHES=-MDevel::Cover
+ cover -ignore_re '^var/mason_data/' -ignore_re '^t/'
+
+The coverage tests have DevelMode turned off, and have
+C<named_component_subs> enabled for L<HTML::Mason> to avoid an optimizer
+problem in Perl that hides the top-level optree from L<Devel::Cover>.
+
+=cut
+
+sub generate_port {
+ my $self = shift;
+ my $port = 1024 + int rand(10000) + $$ % 1024;
+
+ my $paddr = sockaddr_in( $port, inet_aton('localhost') );
+ socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp') )
+ or die "socket: $!";
+ if ( connect( SOCK, $paddr ) ) {
+ close(SOCK);
+ return generate_port();
+ }
+ close(SOCK);
+
+ return $port;
+}
+
+BEGIN {
+ $port = generate_port();
+ $dbname = $ENV{RT_TEST_PARALLEL}? "rt3test_$port" : "rt3test";
+};
+
+sub import {
+ my $class = shift;
+ my %args = @_;
+
+ # Spit out a plan (if we got one) *before* we load modules
+ if ( $args{'tests'} ) {
+ $class->builder->plan( tests => $args{'tests'} )
+ unless $args{'tests'} eq 'no_declare';
+ }
+ else {
+ $class->builder->no_plan unless $class->builder->has_plan;
+ }
+
+ $class->bootstrap_tempdir;
+
+ $class->bootstrap_config( %args );
+
+ use RT;
+ RT::LoadConfig;
+
+ if (RT->Config->Get('DevelMode')) { require Module::Refresh; }
+
+ $class->bootstrap_db( %args );
+
+ RT->Init;
+
+ $class->bootstrap_plugins( %args );
+
+ $class->set_config_wrapper;
+
+ my $screen_logger = $RT::Logger->remove( 'screen' );
+ require Log::Dispatch::Perl;
+ $RT::Logger->add( Log::Dispatch::Perl->new
+ ( name => 'rttest',
+ min_level => $screen_logger->min_level,
+ action => { error => 'warn',
+ critical => 'warn' } ) );
+
+ # XXX: this should really be totally isolated environment so we
+ # can parallelize and be sane
+ mkpath [ $RT::MasonSessionDir ]
+ if RT->Config->Get('DatabaseType');
+
+ my $level = 1;
+ while ( my ($package) = caller($level-1) ) {
+ last unless $package =~ /Test/;
+ $level++;
+ }
+
+ Test::More->export_to_level($level);
+ __PACKAGE__->export_to_level($level);
+}
+
+sub is_empty($;$) {
+ my ($v, $d) = shift;
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+ return Test::More::ok(1, $d) unless defined $v;
+ return Test::More::ok(1, $d) unless length $v;
+ return Test::More::is($v, '', $d);
+}
+
+my $created_new_db; # have we created new db? mainly for parallel testing
+
+sub db_requires_no_dba {
+ my $self = shift;
+ my $db_type = RT->Config->Get('DatabaseType');
+ return 1 if $db_type eq 'SQLite';
+}
+
+sub bootstrap_tempdir {
+ my $self = shift;
+ my $test_file = (
+ File::Spec->rel2abs((caller)[1])
+ =~ m{(?:^|[\\/])t[/\\](.*)}
+ );
+ my $dir_name = File::Spec->rel2abs('t/tmp/'. $test_file);
+ mkpath( $dir_name );
+ return $tmp{'directory'} = File::Temp->newdir(
+ DIR => $dir_name
+ );
+}
+
+sub bootstrap_config {
+ my $self = shift;
+ my %args = @_;
+
+ $tmp{'config'}{'RT'} = File::Spec->catfile(
+ "$tmp{'directory'}", 'RT_SiteConfig.pm'
+ );
+ open my $config, '>', $tmp{'config'}{'RT'}
+ or die "Couldn't open $tmp{'config'}{'RT'}: $!";
+
+ print $config qq{
+Set( \$WebPort , $port);
+Set( \$WebBaseURL , "http://localhost:\$WebPort");
+Set( \$LogToSyslog , undef);
+Set( \$LogToScreen , "warning");
+Set( \$MailCommand, 'testfile');
+};
+ if ( $ENV{'RT_TEST_DB_SID'} ) { # oracle case
+ print $config "Set( \$DatabaseName , '$ENV{'RT_TEST_DB_SID'}' );\n";
+ print $config "Set( \$DatabaseUser , '$dbname');\n";
+ } else {
+ print $config "Set( \$DatabaseName , '$dbname');\n";
+ print $config "Set( \$DatabaseUser , 'u${dbname}');\n";
+ }
+ print $config "Set( \$DevelMode, 0 );\n"
+ if $INC{'Devel/Cover.pm'};
+
+ # set mail catcher
+ my $mail_catcher = $tmp{'mailbox'} = File::Spec->catfile(
+ $tmp{'directory'}->dirname, 'mailbox.eml'
+ );
+ print $config <<END;
+Set( \$MailCommand, sub {
+ my \$MIME = shift;
+
+ open my \$handle, '>>', '$mail_catcher'
+ or die "Unable to open '$mail_catcher' for appending: \$!";
+
+ \$MIME->print(\$handle);
+ print \$handle "%% split me! %%\n";
+ close \$handle;
+} );
+END
+
+ print $config $args{'config'} if $args{'config'};
+
+ print $config "\n1;\n";
+ $ENV{'RT_SITE_CONFIG'} = $tmp{'config'}{'RT'};
+ close $config;
+
+ return $config;
+}
+
+sub set_config_wrapper {
+ my $self = shift;
+
+ my $old_sub = \&RT::Config::Set;
+ no warnings 'redefine';
+ *RT::Config::Set = sub {
+ my @caller = caller;
+ if ( ($caller[1]||'') =~ /\.t$/ ) {
+ my ($self, $name) = @_;
+ my $type = $RT::Config::META{$name}->{'Type'} || 'SCALAR';
+ my %sigils = (
+ HASH => '%',
+ ARRAY => '@',
+ SCALAR => '$',
+ );
+ my $sigil = $sigils{$type} || $sigils{'SCALAR'};
+ open my $fh, '>>', $tmp{'config'}{'RT'}
+ or die "Couldn't open config file: $!";
+ require Data::Dumper;
+ print $fh
+ "\nSet(${sigil}${name}, \@{"
+ . Data::Dumper::Dumper([@_[2 .. $#_]])
+ ."}); 1;\n";
+ close $fh;
+
+ if ( @SERVERS ) {
+ warn "you're changing config option in a test file"
+ ." when server is active";
+ }
+ }
+ return $old_sub->(@_);
+ };
+}
+
+sub bootstrap_db {
+ my $self = shift;
+ my %args = @_;
+
+ unless (defined $ENV{'RT_DBA_USER'} && defined $ENV{'RT_DBA_PASSWORD'}) {
+ Test::More::BAIL_OUT(
+ "RT_DBA_USER and RT_DBA_PASSWORD environment variables need"
+ ." to be set in order to run 'make test'"
+ ) unless $self->db_requires_no_dba;
+ }
+
+ require RT::Handle;
+ # bootstrap with dba cred
+ my $dbh = _get_dbh(RT::Handle->SystemDSN,
+ $ENV{RT_DBA_USER}, $ENV{RT_DBA_PASSWORD});
+
+ unless ( $ENV{RT_TEST_PARALLEL} ) {
+ # already dropped db in parallel tests, need to do so for other cases.
+ RT::Handle->DropDatabase( $dbh, Force => 1 );
+ }
+
+ RT::Handle->CreateDatabase( $dbh );
+ $dbh->disconnect;
+ $created_new_db++;
+
+ $dbh = _get_dbh(RT::Handle->DSN,
+ $ENV{RT_DBA_USER}, $ENV{RT_DBA_PASSWORD});
+
+ $RT::Handle = new RT::Handle;
+ $RT::Handle->dbh( $dbh );
+ $RT::Handle->InsertSchema( $dbh );
+
+ my $db_type = RT->Config->Get('DatabaseType');
+ $RT::Handle->InsertACL( $dbh ) unless $db_type eq 'Oracle';
+
+ $RT::Handle = new RT::Handle;
+ $RT::Handle->dbh( undef );
+ RT->ConnectToDatabase;
+ RT->InitLogging;
+ RT->InitSystemObjects;
+ $RT::Handle->InsertInitialData;
+
+ DBIx::SearchBuilder::Record::Cachable->FlushCache;
+ $RT::Handle = new RT::Handle;
+ $RT::Handle->dbh( undef );
+ RT->Init;
+
+ $RT::Handle->PrintError;
+ $RT::Handle->dbh->{PrintError} = 1;
+
+ unless ( $args{'nodata'} ) {
+ $RT::Handle->InsertData( $RT::EtcPath . "/initialdata" );
+ }
+ DBIx::SearchBuilder::Record::Cachable->FlushCache;
+}
+
+sub bootstrap_plugins {
+ my $self = shift;
+ my %args = @_;
+
+ return unless $args{'requires'};
+
+ my @plugins = @{ $args{'requires'} };
+ push @plugins, $args{'testing'}
+ if $args{'testing'};
+
+ require RT::Plugin;
+ my $cwd;
+ if ( $args{'testing'} ) {
+ require Cwd;
+ $cwd = Cwd::getcwd();
+ }
+
+ my $old_func = \&RT::Plugin::_BasePath;
+ no warnings 'redefine';
+ *RT::Plugin::_BasePath = sub {
+ my $name = $_[0]->{'name'};
+
+ return $cwd if $args{'testing'} && $name eq $args{'testing'};
+
+ if ( grep $name eq $_, @plugins ) {
+ my $variants = join "(?:|::|-|_)", map "\Q$_\E", split /::/, $name;
+ my ($path) = map $ENV{$_}, grep /^CHIMPS_(?:$variants).*_ROOT$/i, keys %ENV;
+ return $path if $path;
+ }
+ return $old_func->(@_);
+ };
+
+ RT->Config->Set( Plugins => @plugins );
+ RT->InitPluginPaths;
+
+ require File::Spec;
+ foreach my $name ( @plugins ) {
+ my $plugin = RT::Plugin->new( name => $name );
+ Test::More::diag( "Initializing DB for the $name plugin" )
+ if $ENV{'TEST_VERBOSE'};
+
+ my $etc_path = $plugin->Path('etc');
+ Test::More::diag( "etc path of the plugin is '$etc_path'" )
+ if $ENV{'TEST_VERBOSE'};
+
+ if ( -e $etc_path ) {
+ my ($ret, $msg) = $RT::Handle->InsertSchema( undef, $etc_path );
+ Test::More::ok($ret || $msg =~ /^Couldn't find schema/, "Created schema: ".($msg||''));
+
+ ($ret, $msg) = $RT::Handle->InsertACL( undef, $etc_path );
+ Test::More::ok($ret || $msg =~ /^Couldn't find ACLs/, "Created ACL: ".($msg||''));
+
+ my $data_file = File::Spec->catfile( $etc_path, 'initialdata' );
+ if ( -e $data_file ) {
+ ($ret, $msg) = $RT::Handle->InsertData( $data_file );;
+ Test::More::ok($ret, "Inserted data".($msg||''));
+ } else {
+ Test::More::ok(1, "There is no data file" );
+ }
+ }
+ else {
+# we can not say if plugin has no data or we screwed with etc path
+ Test::More::ok(1, "There is no etc dir: no schema" );
+ Test::More::ok(1, "There is no etc dir: no ACLs" );
+ Test::More::ok(1, "There is no etc dir: no data" );
+ }
+
+ $RT::Handle->Connect; # XXX: strange but mysql can loose connection
+ }
+}
+
+sub _get_dbh {
+ my ($dsn, $user, $pass) = @_;
+ if ( $dsn =~ /Oracle/i ) {
+ $ENV{'NLS_LANG'} = "AMERICAN_AMERICA.AL32UTF8";
+ $ENV{'NLS_NCHAR'} = "AL32UTF8";
+ }
+ my $dbh = DBI->connect(
+ $dsn, $user, $pass,
+ { RaiseError => 0, PrintError => 1 },
+ );
+ unless ( $dbh ) {
+ my $msg = "Failed to connect to $dsn as user '$user': ". $DBI::errstr;
+ print STDERR $msg; exit -1;
+ }
+ return $dbh;
+}
+
+=head1 UTILITIES
+
+=head2 load_or_create_user
+
+=cut
+
+sub load_or_create_user {
+ my $self = shift;
+ my %args = ( Privileged => 1, Disabled => 0, @_ );
+
+ my $MemberOf = delete $args{'MemberOf'};
+ $MemberOf = [ $MemberOf ] if defined $MemberOf && !ref $MemberOf;
+ $MemberOf ||= [];
+
+ my $obj = RT::User->new( $RT::SystemUser );
+ if ( $args{'Name'} ) {
+ $obj->LoadByCols( Name => $args{'Name'} );
+ } elsif ( $args{'EmailAddress'} ) {
+ $obj->LoadByCols( EmailAddress => $args{'EmailAddress'} );
+ } else {
+ die "Name or EmailAddress is required";
+ }
+ if ( $obj->id ) {
+ # cool
+ $obj->SetPrivileged( $args{'Privileged'} || 0 )
+ if ($args{'Privileged'}||0) != ($obj->Privileged||0);
+ $obj->SetDisabled( $args{'Disabled'} || 0 )
+ if ($args{'Disabled'}||0) != ($obj->Disabled||0);
+ } else {
+ my ($val, $msg) = $obj->Create( %args );
+ die "$msg" unless $val;
+ }
+
+ # clean group membership
+ {
+ require RT::GroupMembers;
+ my $gms = RT::GroupMembers->new( $RT::SystemUser );
+ my $groups_alias = $gms->Join(
+ FIELD1 => 'GroupId', TABLE2 => 'Groups', FIELD2 => 'id',
+ );
+ $gms->Limit( ALIAS => $groups_alias, FIELD => 'Domain', VALUE => 'UserDefined' );
+ $gms->Limit( FIELD => 'MemberId', VALUE => $obj->id );
+ while ( my $group_member_record = $gms->Next ) {
+ $group_member_record->Delete;
+ }
+ }
+
+ # add new user to groups
+ foreach ( @$MemberOf ) {
+ my $group = RT::Group->new( RT::SystemUser() );
+ $group->LoadUserDefinedGroup( $_ );
+ die "couldn't load group '$_'" unless $group->id;
+ $group->AddMember( $obj->id );
+ }
+
+ return $obj;
+}
+
+=head2 load_or_create_queue
+
+=cut
+
+sub load_or_create_queue {
+ my $self = shift;
+ my %args = ( Disabled => 0, @_ );
+ my $obj = RT::Queue->new( $RT::SystemUser );
+ if ( $args{'Name'} ) {
+ $obj->LoadByCols( Name => $args{'Name'} );
+ } else {
+ die "Name is required";
+ }
+ unless ( $obj->id ) {
+ my ($val, $msg) = $obj->Create( %args );
+ die "$msg" unless $val;
+ } else {
+ my @fields = qw(CorrespondAddress CommentAddress);
+ foreach my $field ( @fields ) {
+ next unless exists $args{ $field };
+ next if $args{ $field } eq $obj->$field;
+
+ no warnings 'uninitialized';
+ my $method = 'Set'. $field;
+ my ($val, $msg) = $obj->$method( $args{ $field } );
+ die "$msg" unless $val;
+ }
+ }
+
+ return $obj;
+}
+
+=head2 load_or_create_custom_field
+
+=cut
+
+sub load_or_create_custom_field {
+ my $self = shift;
+ my %args = ( Disabled => 0, @_ );
+ my $obj = RT::CustomField->new( $RT::SystemUser );
+ if ( $args{'Name'} ) {
+ $obj->LoadByName( Name => $args{'Name'}, Queue => $args{'Queue'} );
+ } else {
+ die "Name is required";
+ }
+ unless ( $obj->id ) {
+ my ($val, $msg) = $obj->Create( %args );
+ die "$msg" unless $val;
+ }
+
+ return $obj;
+}
+
+sub last_ticket {
+ my $self = shift;
+ my $current = shift;
+ $current = $current ? RT::CurrentUser->new($current) : $RT::SystemUser;
+ my $tickets = RT::Tickets->new( $current );
+ $tickets->OrderBy( FIELD => 'id', ORDER => 'DESC' );
+ $tickets->Limit( FIELD => 'id', OPERATOR => '>', VALUE => '0' );
+ $tickets->RowsPerPage( 1 );
+ return $tickets->First;
+}
+
+sub store_rights {
+ my $self = shift;
+
+ require RT::ACE;
+ # fake construction
+ RT::ACE->new( $RT::SystemUser );
+ my @fields = keys %{ RT::ACE->_ClassAccessible };
+
+ require RT::ACL;
+ my $acl = RT::ACL->new( $RT::SystemUser );
+ $acl->Limit( FIELD => 'RightName', OPERATOR => '!=', VALUE => 'SuperUser' );
+
+ my @res;
+ while ( my $ace = $acl->Next ) {
+ my $obj = $ace->PrincipalObj->Object;
+ if ( $obj->isa('RT::Group') && $obj->Type eq 'UserEquiv' && $obj->Instance == $RT::Nobody->id ) {
+ next;
+ }
+
+ my %tmp = ();
+ foreach my $field( @fields ) {
+ $tmp{ $field } = $ace->__Value( $field );
+ }
+ push @res, \%tmp;
+ }
+ return @res;
+}
+
+sub restore_rights {
+ my $self = shift;
+ my @entries = @_;
+ foreach my $entry ( @entries ) {
+ my $ace = RT::ACE->new( $RT::SystemUser );
+ my ($status, $msg) = $ace->RT::Record::Create( %$entry );
+ unless ( $status ) {
+ Test::More::diag "couldn't create a record: $msg";
+ }
+ }
+}
+
+sub set_rights {
+ my $self = shift;
+
+ require RT::ACL;
+ my $acl = RT::ACL->new( $RT::SystemUser );
+ $acl->Limit( FIELD => 'RightName', OPERATOR => '!=', VALUE => 'SuperUser' );
+ while ( my $ace = $acl->Next ) {
+ my $obj = $ace->PrincipalObj->Object;
+ if ( $obj->isa('RT::Group') && $obj->Type eq 'UserEquiv' && $obj->Instance == $RT::Nobody->id ) {
+ next;
+ }
+ $ace->Delete;
+ }
+ return $self->add_rights( @_ );
+}
+
+sub add_rights {
+ my $self = shift;
+ my @list = ref $_[0]? @_: @_? { @_ }: ();
+
+ require RT::ACL;
+ foreach my $e (@list) {
+ my $principal = delete $e->{'Principal'};
+ unless ( ref $principal ) {
+ if ( $principal =~ /^(everyone|(?:un)?privileged)$/i ) {
+ $principal = RT::Group->new( $RT::SystemUser );
+ $principal->LoadSystemInternalGroup($1);
+ } else {
+ die "principal is not an object, but also is not name of a system group";
+ }
+ }
+ unless ( $principal->isa('RT::Principal') ) {
+ if ( $principal->can('PrincipalObj') ) {
+ $principal = $principal->PrincipalObj;
+ }
+ }
+ my @rights = ref $e->{'Right'}? @{ $e->{'Right'} }: ($e->{'Right'});
+ foreach my $right ( @rights ) {
+ my ($status, $msg) = $principal->GrantRight( %$e, Right => $right );
+ $RT::Logger->debug($msg);
+ }
+ }
+ return 1;
+}
+
+sub run_mailgate {
+ my $self = shift;
+
+ require RT::Test::Web;
+ my %args = (
+ url => RT::Test::Web->rt_base_url,
+ message => '',
+ action => 'correspond',
+ queue => 'General',
+ debug => 1,
+ command => $RT::BinPath .'/rt-mailgate',
+ @_
+ );
+ my $message = delete $args{'message'};
+
+ $args{after_open} = sub {
+ my $child_in = shift;
+ if ( UNIVERSAL::isa($message, 'MIME::Entity') ) {
+ $message->print( $child_in );
+ } else {
+ print $child_in $message;
+ }
+ };
+
+ $self->run_and_capture(%args);
+}
+
+sub run_and_capture {
+ my $self = shift;
+ my %args = @_;
+
+ my $cmd = delete $args{'command'};
+ die "Couldn't find command ($cmd)" unless -f $cmd;
+
+ $cmd .= ' --debug' if delete $args{'debug'};
+
+ while( my ($k,$v) = each %args ) {
+ next unless $v;
+ $cmd .= " --$k '$v'";
+ }
+ $cmd .= ' 2>&1';
+
+ DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+ require IPC::Open2;
+ my ($child_out, $child_in);
+ my $pid = IPC::Open2::open2($child_out, $child_in, $cmd);
+
+ $args{after_open}->($child_in, $child_out) if $args{after_open};
+
+ close $child_in;
+
+ my $result = do { local $/; <$child_out> };
+ close $child_out;
+ waitpid $pid, 0;
+ return ($?, $result);
+}
+
+sub send_via_mailgate {
+ my $self = shift;
+ my $message = shift;
+ my %args = (@_);
+
+ my ($status, $gate_result) = $self->run_mailgate(
+ message => $message, %args
+ );
+
+ my $id;
+ unless ( $status >> 8 ) {
+ ($id) = ($gate_result =~ /Ticket:\s*(\d+)/i);
+ unless ( $id ) {
+ Test::More::diag "Couldn't find ticket id in text:\n$gate_result"
+ if $ENV{'TEST_VERBOSE'};
+ }
+ } else {
+ Test::More::diag "Mailgate output:\n$gate_result"
+ if $ENV{'TEST_VERBOSE'};
+ }
+ return ($status, $id);
+}
+
+sub open_mailgate_ok {
+ my $class = shift;
+ my $baseurl = shift;
+ my $queue = shift || 'general';
+ my $action = shift || 'correspond';
+ Test::More::ok(open(my $mail, "|$RT::BinPath/rt-mailgate --url $baseurl --queue $queue --action $action"), "Opened the mailgate - $!");
+ return $mail;
+}
+
+
+sub close_mailgate_ok {
+ my $class = shift;
+ my $mail = shift;
+ close $mail;
+ Test::More::is ($? >> 8, 0, "The mail gateway exited normally. yay");
+}
+
+sub mailsent_ok {
+ my $class = shift;
+ my $expected = shift;
+
+ my $mailsent = scalar grep /\S/, split /%% split me! %%\n/,
+ RT::Test->file_content(
+ $tmp{'mailbox'},
+ 'unlink' => 0,
+ noexist => 1
+ );
+
+ Test::More::is(
+ $mailsent, $expected,
+ "The number of mail sent ($expected) matches. yay"
+ );
+}
+
+sub set_mail_catcher {
+ my $self = shift;
+ return 1;
+}
+
+sub fetch_caught_mails {
+ my $self = shift;
+ return grep /\S/, split /%% split me! %%\n/,
+ RT::Test->file_content(
+ $tmp{'mailbox'},
+ 'unlink' => 1,
+ noexist => 1
+ );
+}
+
+sub clean_caught_mails {
+ unlink $tmp{'mailbox'};
+}
+
+=head2 get_relocatable_dir
+
+Takes a path relative to the location of the test file that is being
+run and returns a path that takes the invocation path into account.
+
+e.g. RT::Test::get_relocatable_dir(File::Spec->updir(), 'data', 'emails')
+
+=cut
+
+sub get_relocatable_dir {
+ (my $volume, my $directories, my $file) = File::Spec->splitpath($0);
+ if (File::Spec->file_name_is_absolute($directories)) {
+ return File::Spec->catdir($directories, @_);
+ } else {
+ return File::Spec->catdir(File::Spec->curdir(), $directories, @_);
+ }
+}
+
+=head2 get_relocatable_file
+
+Same as get_relocatable_dir, but takes a file and a path instead
+of just a path.
+
+e.g. RT::Test::get_relocatable_file('test-email',
+ (File::Spec->updir(), 'data', 'emails'))
+
+=cut
+
+sub get_relocatable_file {
+ my $file = shift;
+ return File::Spec->catfile(get_relocatable_dir(@_), $file);
+}
+
+sub get_abs_relocatable_dir {
+ (my $volume, my $directories, my $file) = File::Spec->splitpath($0);
+ if (File::Spec->file_name_is_absolute($directories)) {
+ return File::Spec->catdir($directories, @_);
+ } else {
+ return File::Spec->catdir(Cwd->getcwd(), $directories, @_);
+ }
+}
+
+sub import_gnupg_key {
+ my $self = shift;
+ my $key = shift;
+ my $type = shift || 'secret';
+
+ $key =~ s/\@/-at-/g;
+ $key .= ".$type.key";
+
+ require RT::Crypt::GnuPG;
+
+ # simple strategy find data/gnupg/keys, from the dir where test file lives
+ # to updirs, try 3 times in total
+ my $path = File::Spec->catfile( 'data', 'gnupg', 'keys' );
+ my $abs_path;
+ for my $up ( 0 .. 2 ) {
+ my $p = get_relocatable_dir($path);
+ if ( -e $p ) {
+ $abs_path = $p;
+ last;
+ }
+ else {
+ $path = File::Spec->catfile( File::Spec->updir(), $path );
+ }
+ }
+
+ die "can't find the dir where gnupg keys are stored"
+ unless $abs_path;
+
+ return RT::Crypt::GnuPG::ImportKey(
+ RT::Test->file_content( [ $abs_path, $key ] ) );
+}
+
+
+sub lsign_gnupg_key {
+ my $self = shift;
+ my $key = shift;
+
+ require RT::Crypt::GnuPG; require GnuPG::Interface;
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $gnupg->options->hash_init(
+ RT::Crypt::GnuPG::_PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ my %handle;
+ my $handles = GnuPG::Handles->new(
+ stdin => ($handle{'input'} = new IO::Handle),
+ stdout => ($handle{'output'} = new IO::Handle),
+ stderr => ($handle{'error'} = new IO::Handle),
+ logger => ($handle{'logger'} = new IO::Handle),
+ status => ($handle{'status'} = new IO::Handle),
+ command => ($handle{'command'} = new IO::Handle),
+ );
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ local @ENV{'LANG', 'LC_ALL'} = ('C', 'C');
+ my $pid = $gnupg->wrap_call(
+ handles => $handles,
+ commands => ['--lsign-key'],
+ command_args => [$key],
+ );
+ close $handle{'input'};
+ while ( my $str = readline $handle{'status'} ) {
+ if ( $str =~ /^\[GNUPG:\]\s*GET_BOOL sign_uid\..*/ ) {
+ print { $handle{'command'} } "y\n";
+ }
+ }
+ waitpid $pid, 0;
+ };
+ my $err = $@;
+ close $handle{'output'};
+
+ my %res;
+ $res{'exit_code'} = $?;
+ foreach ( qw(error logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'error'} ) if $res{'error'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ }
+ return %res;
+}
+
+sub trust_gnupg_key {
+ my $self = shift;
+ my $key = shift;
+
+ require RT::Crypt::GnuPG; require GnuPG::Interface;
+ my $gnupg = new GnuPG::Interface;
+ my %opt = RT->Config->Get('GnuPGOptions');
+ $gnupg->options->hash_init(
+ RT::Crypt::GnuPG::_PrepareGnuPGOptions( %opt ),
+ meta_interactive => 0,
+ );
+
+ my %handle;
+ my $handles = GnuPG::Handles->new(
+ stdin => ($handle{'input'} = new IO::Handle),
+ stdout => ($handle{'output'} = new IO::Handle),
+ stderr => ($handle{'error'} = new IO::Handle),
+ logger => ($handle{'logger'} = new IO::Handle),
+ status => ($handle{'status'} = new IO::Handle),
+ command => ($handle{'command'} = new IO::Handle),
+ );
+
+ eval {
+ local $SIG{'CHLD'} = 'DEFAULT';
+ local @ENV{'LANG', 'LC_ALL'} = ('C', 'C');
+ my $pid = $gnupg->wrap_call(
+ handles => $handles,
+ commands => ['--edit-key'],
+ command_args => [$key],
+ );
+ close $handle{'input'};
+
+ my $done = 0;
+ while ( my $str = readline $handle{'status'} ) {
+ if ( $str =~ /^\[GNUPG:\]\s*\QGET_LINE keyedit.prompt/ ) {
+ if ( $done ) {
+ print { $handle{'command'} } "quit\n";
+ } else {
+ print { $handle{'command'} } "trust\n";
+ }
+ } elsif ( $str =~ /^\[GNUPG:\]\s*\QGET_LINE edit_ownertrust.value/ ) {
+ print { $handle{'command'} } "5\n";
+ } elsif ( $str =~ /^\[GNUPG:\]\s*\QGET_BOOL edit_ownertrust.set_ultimate.okay/ ) {
+ print { $handle{'command'} } "y\n";
+ $done = 1;
+ }
+ }
+ waitpid $pid, 0;
+ };
+ my $err = $@;
+ close $handle{'output'};
+
+ my %res;
+ $res{'exit_code'} = $?;
+ foreach ( qw(error logger status) ) {
+ $res{$_} = do { local $/; readline $handle{$_} };
+ delete $res{$_} unless $res{$_} && $res{$_} =~ /\S/s;
+ close $handle{$_};
+ }
+ $RT::Logger->debug( $res{'status'} ) if $res{'status'};
+ $RT::Logger->warning( $res{'error'} ) if $res{'error'};
+ $RT::Logger->error( $res{'logger'} ) if $res{'logger'} && $?;
+ if ( $err || $res{'exit_code'} ) {
+ $res{'message'} = $err? $err : "gpg exitted with error code ". ($res{'exit_code'} >> 8);
+ }
+ return %res;
+}
+
+sub started_ok {
+ my $self = shift;
+
+ require RT::Test::Web;
+
+ my $which = $ENV{'RT_TEST_WEB_HANDLER'} || 'standalone';
+ my ($server, $variant) = split /\+/, $which, 2;
+
+ my $function = 'start_'. $server .'_server';
+ unless ( $self->can($function) ) {
+ die "Don't know how to start server '$server'";
+ }
+ return $self->$function( $variant, @_ );
+}
+
+sub start_standalone_server {
+ my $self = shift;
+
+
+ require RT::Interface::Web::Standalone;
+
+ require Test::HTTP::Server::Simple::StashWarnings;
+ unshift @RT::Interface::Web::Standalone::ISA,
+ 'Test::HTTP::Server::Simple::StashWarnings';
+ *RT::Interface::Web::Standalone::test_warning_path = sub {
+ "/__test_warnings";
+ };
+
+ my $s = RT::Interface::Web::Standalone->new($port);
+
+ my $ret = $s->started_ok;
+ push @SERVERS, $s->pids;
+
+ $RT::Handle = new RT::Handle;
+ $RT::Handle->dbh( undef );
+ RT->ConnectToDatabase;
+
+ return ($ret, RT::Test::Web->new);
+}
+
+sub start_apache_server {
+ my $self = shift;
+ my $variant = shift || 'mod_perl';
+
+ my %info = $self->apache_server_info( variant => $variant );
+
+ Test::More::diag(do {
+ open my $fh, '<', $tmp{'config'}{'RT'};
+ local $/;
+ <$fh>
+ });
+
+ my $log_fn = File::Spec->catfile(
+ "$tmp{'directory'}", 'apache.log'
+ );
+ my $pid_fn = File::Spec->catfile(
+ "$tmp{'directory'}", "apache.pid"
+ );
+ my $tmpl = File::Spec->rel2abs( File::Spec->catfile(
+ 't', 'data', 'configs',
+ 'apache'. $info{'version'} .'+'. $variant .'.conf'
+ ) );
+ my %opt = (
+ listen => $port,
+ server_root => $info{'HTTPD_ROOT'} || $ENV{'HTTPD_ROOT'}
+ || Test::More::BAIL_OUT("Couldn't figure out server root"),
+ pid_file => $pid_fn,
+ document_root => $RT::MasonComponentRoot,
+ rt_bin_path => $RT::BinPath,
+ log_file => $log_fn,
+ rt_site_config => $ENV{'RT_SITE_CONFIG'},
+ );
+ {
+ my $method = 'apache_'.$variant.'_server_options';
+ $self->$method( \%info, \%opt );
+ }
+ $tmp{'config'}{'apache'} = File::Spec->catfile(
+ "$tmp{'directory'}", "apache.conf"
+ );
+ $self->process_in_file(
+ in => $tmpl,
+ out => $tmp{'config'}{'apache'},
+ options => \%opt,
+ );
+
+ $self->fork_exec($info{'executable'}, '-f', $tmp{'config'}{'apache'});
+ my $pid = do {
+ my $tries = 60;
+ while ( !-e $pid_fn ) {
+ $tries--;
+ last unless $tries;
+ sleep 1;
+ }
+ Test::More::BAIL_OUT("Couldn't start apache server, no pid file")
+ unless -e $pid_fn;
+ open my $pid_fh, '<', $pid_fn
+ or Test::More::BAIL_OUT("Couldn't open pid file: $!");
+ my $pid = <$pid_fh>;
+ chomp $pid;
+ $pid;
+ };
+
+ Test::More::ok($pid, "Started apache server #$pid");
+
+ push @SERVERS, $pid;
+
+ return (RT->Config->Get('WebURL'), RT::Test::Web->new);
+}
+
+sub apache_server_info {
+ my $self = shift;
+ my %res = @_;
+
+ my $bin = $res{'executable'} = $ENV{'RT_TEST_APACHE'}
+ || $self->find_apache_server
+ || Test::More::BAIL_OUT("Couldn't find apache server, use RT_TEST_APACHE");
+
+ Test::More::diag("Using '$bin' apache executable for testing")
+ if $ENV{'TEST_VERBOSE'};
+
+ my $info = `$bin -V`;
+ ($res{'version'}) = ($info =~ m{Server\s+version:\s+Apache/(\d+\.\d+)\.});
+ Test::More::BAIL_OUT(
+ "Couldn't figure out version of the server"
+ ) unless $res{'version'};
+
+ my %opts = ($info =~ m/^\s*-D\s+([A-Z_]+?)(?:="(.*)")$/mg);
+ %res = (%res, %opts);
+
+ $res{'modules'} = [
+ map {s/^\s+//; s/\s+$//; $_}
+ grep $_ !~ /Compiled in modules/i,
+ split /\r*\n/, `$bin -l`
+ ];
+
+ return %res;
+}
+
+sub apache_mod_perl_server_options {
+ my $self = shift;
+ my %info = %{ shift() };
+ my $current = shift;
+
+ my %required_modules = (
+ '2.2' => [qw(authz_host log_config env alias perl)],
+ );
+ my @mlist = @{ $required_modules{ $info{'version'} } };
+
+ $current->{'load_modules'} = '';
+ foreach my $mod ( @mlist ) {
+ next if grep $_ =~ /^(mod_|)$mod\.c$/, @{ $info{'modules'} };
+
+ $current->{'load_modules'} .=
+ "LoadModule ${mod}_module modules/mod_${mod}.so\n";
+ }
+ return;
+}
+
+sub apache_fastcgi_server_options {
+ my $self = shift;
+ my %info = %{ shift() };
+ my $current = shift;
+
+ my %required_modules = (
+ '2.2' => [qw(authz_host log_config env alias mime fastcgi)],
+ );
+ my @mlist = @{ $required_modules{ $info{'version'} } };
+
+ $current->{'load_modules'} = '';
+ foreach my $mod ( @mlist ) {
+ next if grep $_ =~ /^(mod_|)$mod\.c$/, @{ $info{'modules'} };
+
+ $current->{'load_modules'} .=
+ "LoadModule ${mod}_module modules/mod_${mod}.so\n";
+ }
+ return;
+}
+
+sub find_apache_server {
+ my $self = shift;
+ return $_ foreach grep defined,
+ map $self->find_executable($_),
+ qw(httpd apache apache2 apache1);
+ return undef;
+}
+
+sub stop_server {
+ my $self = shift;
+
+ my $sig = 'TERM';
+ $sig = 'INT' if !$ENV{'RT_TEST_WEB_HANDLER'}
+ || $ENV{'RT_TEST_WEB_HANDLER'} =~/^standalone(?:\+|\z)/;
+ kill $sig, @SERVERS;
+ foreach my $pid (@SERVERS) {
+ waitpid $pid, 0;
+ }
+}
+
+sub file_content {
+ my $self = shift;
+ my $path = shift;
+ my %args = @_;
+
+ $path = File::Spec->catfile( @$path ) if ref $path eq 'ARRAY';
+
+ Test::More::diag "reading content of '$path'" if $ENV{'TEST_VERBOSE'};
+
+ open my $fh, "<:raw", $path
+ or do {
+ warn "couldn't open file '$path': $!" unless $args{noexist};
+ return ''
+ };
+ my $content = do { local $/; <$fh> };
+ close $fh;
+
+ unlink $path if $args{'unlink'};
+
+ return $content;
+}
+
+sub find_executable {
+ my $self = shift;
+ my $name = shift;
+
+ require File::Spec;
+ foreach my $dir ( split /:/, $ENV{'PATH'} ) {
+ my $fpath = File::Spec->catpath(
+ (File::Spec->splitpath( $dir, 'no file' ))[0..1], $name
+ );
+ next unless -e $fpath && -r _ && -x _;
+ return $fpath;
+ }
+ return undef;
+}
+
+sub fork_exec {
+ my $self = shift;
+
+ my $pid = fork;
+ unless ( defined $pid ) {
+ die "cannot fork: $!";
+ } elsif ( !$pid ) {
+ exec @_;
+ die "can't exec `". join(' ', @_) ."` program: $!";
+ } else {
+ return $pid;
+ }
+}
+
+sub process_in_file {
+ my $self = shift;
+ my %args = ( in => undef, options => undef, @_ );
+
+ my $text = $self->file_content( $args{'in'} );
+ while ( my ($opt) = ($text =~ /\%\%(.+?)\%\%/) ) {
+ my $value = $args{'options'}{ lc $opt };
+ die "no value for $opt" unless defined $value;
+
+ $text =~ s/\%\%\Q$opt\E\%\%/$value/g;
+ }
+
+ my ($out_fh, $out_conf);
+ unless ( $args{'out'} ) {
+ ($out_fh, $out_conf) = tempfile();
+ } else {
+ $out_conf = $args{'out'};
+ open $out_fh, '>', $out_conf
+ or die "couldn't open '$out_conf': $!";
+ }
+ print $out_fh $text;
+ seek $out_fh, 0, 0;
+
+ return ($out_fh, $out_conf);
+}
+
+END {
+ my $Test = RT::Test->builder;
+ return if $Test->{Original_Pid} != $$;
+
+
+ # we are in END block and should protect our exit code
+ # so calls below may call system or kill that clobbers $?
+ local $?;
+
+ RT::Test->stop_server;
+
+ # not success
+ if ( grep !$_, $Test->summary ) {
+ $tmp{'directory'}->unlink_on_destroy(0);
+
+ Test::More::diag(
+ "Some tests failed, tmp directory"
+ ." '$tmp{directory}' is not cleaned"
+ );
+ }
+
+ if ( $ENV{RT_TEST_PARALLEL} && $created_new_db ) {
+
+ # Pg doesn't like if you issue a DROP DATABASE while still connected
+ my $dbh = $RT::Handle->dbh;
+ $dbh->disconnect if $dbh;
+
+ $dbh = _get_dbh( RT::Handle->SystemDSN, $ENV{RT_DBA_USER}, $ENV{RT_DBA_PASSWORD} );
+ RT::Handle->DropDatabase( $dbh, Force => 1 );
+ $dbh->disconnect;
+ }
+}
+
+1;
diff --git a/rt/lib/RT/Test/Email.pm b/rt/lib/RT/Test/Email.pm
new file mode 100644
index 0000000..e0a06d9
--- /dev/null
+++ b/rt/lib/RT/Test/Email.pm
@@ -0,0 +1,131 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+use warnings;
+use strict;
+
+package RT::Test::Email;
+use Test::More;
+use Test::Email;
+use Email::Abstract;
+use base 'Exporter';
+our @EXPORT = qw(mail_ok);
+
+RT::Test->set_mail_catcher;
+
+=head1 NAME
+
+RT::Test::Email -
+
+=head1 SYNOPSIS
+
+ use RT::Test::Email;
+
+ mail_ok {
+ # ... code
+
+ } { from => 'admin@localhost', body => qr('hello') },
+ { from => 'admin@localhost', body => qr('hello again') };
+
+ # ... more code
+
+ # XXX: not yet
+ mail_sent_ok { from => 'admin@localhost', body => qr('hello') };
+
+ # you should expect all mails by the end of the test
+
+
+=head1 DESCRIPTION
+
+This is a test helper module for RT, allowing you to expect mail
+notification generated during the block or the test.
+
+=cut
+
+sub mail_ok (&@) {
+ my $code = shift;
+
+ $code->();
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+ my @msgs = RT::Test->fetch_caught_mails;
+ is(@msgs, @_, "Sent exactly " . @_ . " emails");
+
+ for my $spec (@_) {
+ my $msg = shift @msgs
+ or ok(0, 'Expecting message but none found.'), next;
+
+ $msg =~ s/^\s*//gs; # XXX: for some reasons, message from template has leading newline
+ # XXX: use Test::Email directly?
+ my $te = Email::Abstract->new($msg)->cast('MIME::Entity');
+ bless $te, 'Test::Email';
+ $te->ok($spec, "email matched");
+ my $Test = Test::More->builder;
+ if (!($Test->summary)[$Test->current_test-1]) {
+ diag $te->as_string;
+ }
+ }
+ RT::Test->clean_caught_mails;
+}
+
+END {
+ my $Test = Test::More->builder;
+ # Such a hack -- try to detect if this is a forked copy and don't
+ # do cleanup in that case.
+ return if $Test->{Original_Pid} != $$;
+
+ my @mail = RT::Test->fetch_caught_mails;
+ if (scalar @mail) {
+ diag ((scalar @mail)." uncaught notification email at end of test: ");
+ diag "From: @{[ $_->header('From' ) ]}, Subject: @{[ $_->header('Subject') ]}"
+ for @mail;
+ die;
+ }
+}
+
+1;
+
diff --git a/rt/lib/RT/Test/Web.pm b/rt/lib/RT/Test/Web.pm
new file mode 100644
index 0000000..9e3d6ae
--- /dev/null
+++ b/rt/lib/RT/Test/Web.pm
@@ -0,0 +1,192 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Test::Web;
+
+use strict;
+use warnings;
+
+use base qw(Test::WWW::Mechanize);
+
+require RT::Test;
+require Test::More;
+
+sub get_ok {
+ my $self = shift;
+ my $url = shift;
+ if ( $url =~ s!^/!! ) {
+ $url = $self->rt_base_url . $url;
+ }
+ my $rv = $self->SUPER::get_ok($url, @_);
+ Test::More::diag( "Couldn't get $url" ) unless $rv;
+ return $rv;
+}
+
+sub rt_base_url {
+ return $RT::Test::existing_server if $RT::Test::existing_server;
+ return "http://localhost:" . RT->Config->Get('WebPort') . RT->Config->Get('WebPath') . "/";
+}
+
+sub login {
+ my $self = shift;
+ my $user = shift || 'root';
+ my $pass = shift || 'password';
+
+ my $url = $self->rt_base_url;
+
+ $self->get($url);
+ Test::More::diag( "error: status is ". $self->status )
+ unless $self->status == 200;
+ if ( $self->content =~ qr/Logout/i ) {
+ $self->follow_link( text => 'Logout' );
+ }
+
+ $self->get($url . "?user=$user;pass=$pass");
+ unless ( $self->status == 200 ) {
+ Test::More::diag( "error: status is ". $self->status );
+ return 0;
+ }
+ unless ( $self->content =~ qr/Logout/i ) {
+ Test::More::diag("error: page has no Logout");
+ return 0;
+ }
+ return 1;
+}
+
+sub goto_ticket {
+ my $self = shift;
+ my $id = shift;
+ unless ( $id && int $id ) {
+ Test::More::diag( "error: wrong id ". defined $id? $id : '(undef)' );
+ return 0;
+ }
+
+ my $url = $self->rt_base_url;
+ $url .= "/Ticket/Display.html?id=$id";
+ $self->get($url);
+ unless ( $self->status == 200 ) {
+ Test::More::diag( "error: status is ". $self->status );
+ return 0;
+ }
+ return 1;
+}
+
+sub goto_create_ticket {
+ my $self = shift;
+ my $queue = shift;
+
+ my $id;
+ if ( ref $queue ) {
+ $id = $queue->id;
+ } elsif ( $queue =~ /^\d+$/ ) {
+ $id = $queue;
+ } else {
+ die "not yet implemented";
+ }
+
+ $self->get('/');
+ $self->form_name('CreateTicketInQueue');
+ $self->select( 'Queue', $id );
+ $self->submit;
+
+ return 1;
+}
+
+sub get_warnings {
+ my $self = shift;
+ my $server_class = 'RT::Interface::Web::Standalone';
+
+ my $url = $server_class->test_warning_path;
+
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+ return unless $self->get_ok($url);
+
+ my @warnings = $server_class->decode_warnings($self->content);
+ return @warnings;
+}
+
+sub warning_like {
+ my $self = shift;
+ my $re = shift;
+ my $name = shift;
+
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+ my @warnings = $self->get_warnings;
+ if (@warnings == 0) {
+ Test::More::fail("no warnings emitted; expected 1");
+ return 0;
+ }
+ elsif (@warnings > 1) {
+ Test::More::fail(scalar(@warnings) . " warnings emitted; expected 1");
+ for (@warnings) {
+ Test::More::diag("got warning: $_");
+ }
+ return 0;
+ }
+
+ return Test::More::like($warnings[0], $re, $name);
+}
+
+sub no_warnings_ok {
+ my $self = shift;
+ my $name = shift || "no warnings emitted";
+
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+ my @warnings = $self->get_warnings;
+
+ Test::More::is(@warnings, 0, $name);
+ for (@warnings) {
+ Test::More::diag("got warning: $_");
+ }
+
+ return @warnings == 0 ? 1 : 0;
+}
+
+1;
diff --git a/rt/lib/RT/Ticket.pm b/rt/lib/RT/Ticket.pm
index 81bbbd0..4dcd189 100755
--- a/rt/lib/RT/Ticket.pm
+++ b/rt/lib/RT/Ticket.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -140,7 +141,7 @@ sub Create {
Resolved => '',
Disabled => '0',
- @_);
+ @_);
$self->SUPER::Create(
EffectiveId => $args{'EffectiveId'},
Queue => $args{'Queue'},
@@ -221,12 +222,14 @@ Returns the Queue Object which has the id returned by Queue
=cut
sub QueueObj {
- my $self = shift;
- my $Queue = RT::Queue->new($self->CurrentUser);
- $Queue->Load($self->__Value('Queue'));
- return($Queue);
+ my $self = shift;
+ my $Queue = RT::Queue->new($self->CurrentUser);
+ $Queue->Load($self->__Value('Queue'));
+ return($Queue);
}
+
+
=head2 Type
Returns the current value of Type.
@@ -592,55 +595,55 @@ sub _CoreAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
EffectiveId =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Queue =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Type =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
IssueStatement =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Resolution =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Owner =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Subject =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => '[no subject]'},
+ {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => '[no subject]'},
InitialPriority =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
FinalPriority =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Priority =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
TimeEstimated =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
TimeWorked =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Status =>
- {read => 1, write => 1, sql_type => 12, length => 10, is_blob => 0, is_numeric => 0, type => 'varchar(10)', default => ''},
+ {read => 1, write => 1, sql_type => 12, length => 10, is_blob => 0, is_numeric => 0, type => 'varchar(10)', default => ''},
TimeLeft =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Told =>
- {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
Starts =>
- {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
Started =>
- {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
Due =>
- {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
Resolved =>
- {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
LastUpdatedBy =>
- {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
LastUpdated =>
- {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
Creator =>
- {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
Created =>
- {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
Disabled =>
- {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'},
+ {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'},
}
};
diff --git a/rt/lib/RT/Ticket_Overlay.pm b/rt/lib/RT/Ticket_Overlay.pm
index 90f83a8..a8d32ef 100644
--- a/rt/lib/RT/Ticket_Overlay.pm
+++ b/rt/lib/RT/Ticket_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# {{{ Front Material
=head1 SYNOPSIS
@@ -60,82 +61,6 @@ This module lets you manipulate RT\'s ticket object.
=head1 METHODS
-=begin testing
-
-use_ok ( RT::Queue);
-ok(my $testqueue = RT::Queue->new($RT::SystemUser));
-ok($testqueue->Create( Name => 'ticket tests'));
-ok($testqueue->Id != 0);
-use_ok(RT::CustomField);
-ok(my $testcf = RT::CustomField->new($RT::SystemUser));
-my ($ret, $cmsg) = $testcf->Create( Name => 'selectmulti',
- Queue => $testqueue->id,
- Type => 'SelectMultiple');
-ok($ret,"Created the custom field - ".$cmsg);
-($ret,$cmsg) = $testcf->AddValue ( Name => 'Value1',
- SortOrder => '1',
- Description => 'A testing value');
-
-ok($ret, "Added a value - ".$cmsg);
-
-ok($testcf->AddValue ( Name => 'Value2',
- SortOrder => '2',
- Description => 'Another testing value'));
-ok($testcf->AddValue ( Name => 'Value3',
- SortOrder => '3',
- Description => 'Yet Another testing value'));
-
-ok($testcf->Values->Count == 3);
-
-use_ok(RT::Ticket);
-
-my $u = RT::User->new($RT::SystemUser);
-$u->Load("root");
-ok ($u->Id, "Found the root user");
-ok(my $t = RT::Ticket->new($RT::SystemUser));
-ok(my ($id, $msg) = $t->Create( Queue => $testqueue->Id,
- Subject => 'Testing',
- Owner => $u->Id
- ));
-ok($id != 0);
-ok ($t->OwnerObj->Id == $u->Id, "Root is the ticket owner");
-ok(my ($cfv, $cfm) =$t->AddCustomFieldValue(Field => $testcf->Id,
- Value => 'Value1'));
-ok($cfv != 0, "Custom field creation didn't return an error: $cfm");
-ok($t->CustomFieldValues($testcf->Id)->Count == 1);
-ok($t->CustomFieldValues($testcf->Id)->First &&
- $t->CustomFieldValues($testcf->Id)->First->Content eq 'Value1');;
-
-ok(my ($cfdv, $cfdm) = $t->DeleteCustomFieldValue(Field => $testcf->Id,
- Value => 'Value1'));
-ok ($cfdv != 0, "Deleted a custom field value: $cfdm");
-ok($t->CustomFieldValues($testcf->Id)->Count == 0);
-
-ok(my $t2 = RT::Ticket->new($RT::SystemUser));
-ok($t2->Load($id));
-is($t2->Subject, 'Testing');
-is($t2->QueueObj->Id, $testqueue->id);
-ok($t2->OwnerObj->Id == $u->Id);
-
-my $t3 = RT::Ticket->new($RT::SystemUser);
-my ($id3, $msg3) = $t3->Create( Queue => $testqueue->Id,
- Subject => 'Testing',
- Owner => $u->Id);
-my ($cfv1, $cfm1) = $t->AddCustomFieldValue(Field => $testcf->Id,
- Value => 'Value1');
-ok($cfv1 != 0, "Adding a custom field to ticket 1 is successful: $cfm");
-my ($cfv2, $cfm2) = $t3->AddCustomFieldValue(Field => $testcf->Id,
- Value => 'Value2');
-ok($cfv2 != 0, "Adding a custom field to ticket 2 is successful: $cfm");
-my ($cfv3, $cfm3) = $t->AddCustomFieldValue(Field => $testcf->Id,
- Value => 'Value3');
-ok($cfv3 != 0, "Adding a custom field to ticket 1 is successful: $cfm");
-ok($t->CustomFieldValues($testcf->Id)->Count == 2,
- "This ticket has 2 custom field values");
-ok($t3->CustomFieldValues($testcf->Id)->Count == 1,
- "This ticket has 1 custom field value");
-
-=end testing
=cut
@@ -158,32 +83,20 @@ use RT::URI::fsck_com_rt;
use RT::URI;
use MIME::Entity;
-=begin testing
-
-
-ok(require RT::Ticket, "Loading the RT::Ticket library");
-
-=end testing
-
-=cut
-
-# }}}
# {{{ LINKTYPEMAP
# A helper table for links mapping to make it easier
# to build and parse links between tickets
-use vars '%LINKTYPEMAP';
-
-%LINKTYPEMAP = (
+our %LINKTYPEMAP = (
MemberOf => { Type => 'MemberOf',
Mode => 'Target', },
Parents => { Type => 'MemberOf',
- Mode => 'Target', },
+ Mode => 'Target', },
Members => { Type => 'MemberOf',
Mode => 'Base', },
Children => { Type => 'MemberOf',
- Mode => 'Base', },
+ Mode => 'Base', },
HasMember => { Type => 'MemberOf',
Mode => 'Base', },
RefersTo => { Type => 'RefersTo',
@@ -205,9 +118,7 @@ use vars '%LINKTYPEMAP';
# A helper table for links mapping to make it easier
# to build and parse links between tickets
-use vars '%LINKDIRMAP';
-
-%LINKDIRMAP = (
+our %LINKDIRMAP = (
MemberOf => { Base => 'MemberOf',
Target => 'HasMember', },
RefersTo => { Base => 'RefersTo',
@@ -241,9 +152,10 @@ sub Load {
#TODO modify this routine to look at EffectiveId and do the recursive load
# thing. be careful to cache all the interim tickets we try so we don't loop forever.
-
+ # FIXME: there is no TicketBaseURI option in config
+ my $base_uri = RT->Config->Get('TicketBaseURI') || '';
#If it's a local URI, turn it into a ticket id
- if ( $RT::TicketBaseURI && $id =~ /^$RT::TicketBaseURI(\d+)$/ ) {
+ if ( $base_uri && defined $id && $id =~ /^$base_uri(\d+)$/ ) {
$id = $1;
}
@@ -253,18 +165,18 @@ sub Load {
}
#If we have an integer URI, load the ticket
- if ( $id =~ /^\d+$/ ) {
+ if ( defined $id && $id =~ /^\d+$/ ) {
my ($ticketid,$msg) = $self->LoadById($id);
unless ($self->Id) {
- $RT::Logger->crit("$self tried to load a bogus ticket: $id\n");
+ $RT::Logger->debug("$self tried to load a bogus ticket: $id");
return (undef);
}
}
#It's not a URI. It's not a numerical ticket ID. Punt!
else {
- $RT::Logger->warning("Tried to load a bogus ticket id: '$id'");
+ $RT::Logger->debug("Tried to load a bogus ticket id: '$id'");
return (undef);
}
@@ -281,29 +193,6 @@ sub Load {
# }}}
-# {{{ sub LoadByURI
-
-=head2 LoadByURI
-
-Given a local ticket URI, loads the specified ticket.
-
-=cut
-
-sub LoadByURI {
- my $self = shift;
- my $uri = shift;
-
- if ( $uri =~ /^$RT::TicketBaseURI(\d+)$/ ) {
- my $id = $1;
- return ( $self->Load($id) );
- }
- else {
- return (undef);
- }
-}
-
-# }}}
-
# {{{ sub Create
=head2 Create (ARGS)
@@ -315,6 +204,8 @@ Arguments: ARGS is a hash of named parameters. Valid parameters are:
Requestor - A reference to a list of email addresses or RT user Names
Cc - A reference to a list of email addresses or Names
AdminCc - A reference to a list of email addresses or Names
+ SquelchMailTo - A reference to a list of email addresses -
+ who should this ticket not mail
Type -- The ticket\'s type. ignore this for now
Owner -- This ticket\'s owner. either an RT::User object or this user\'s id
Subject -- A string describing the subject of the ticket
@@ -344,18 +235,6 @@ C<Members> and C<Children> are aliases for C<HasMember>.
Returns: TICKETID, Transaction Object, Error Message
-=begin testing
-
-my $t = RT::Ticket->new($RT::SystemUser);
-
-ok( $t->Create(Queue => 'General', Due => '2002-05-21 00:00:00', ReferredToBy => 'http://www.cpan.org', RefersTo => 'http://fsck.com', Subject => 'This is a subject'), "Ticket Created");
-
-ok ( my $id = $t->Id, "Got ticket id");
-ok ($t->RefersTo->First->Target =~ /fsck.com/, "Got refers to");
-ok ($t->ReferredToBy->First->Base =~ /cpan.org/, "Got referredtoby");
-ok ($t->ResolvedObj->Unix == -1, "It hasn't been resolved - ". $t->ResolvedObj->Unix);
-
-=end testing
=cut
@@ -369,6 +248,7 @@ sub Create {
Requestor => undef,
Cc => undef,
AdminCc => undef,
+ SquelchMailTo => undef,
Type => 'ticket',
Owner => undef,
Subject => '',
@@ -385,30 +265,30 @@ sub Create {
Resolved => undef,
MIMEObj => undef,
_RecordTransaction => 1,
+ DryRun => 0,
@_
);
- my ( $ErrStr, $Owner, $resolved );
- my (@non_fatal_errors);
-
- my $QueueObj = RT::Queue->new($RT::SystemUser);
+ my ($ErrStr, @non_fatal_errors);
- if ( ( defined( $args{'Queue'} ) ) && ( !ref( $args{'Queue'} ) ) ) {
- $QueueObj->Load( $args{'Queue'} );
- }
- elsif ( ref( $args{'Queue'} ) eq 'RT::Queue' ) {
+ my $QueueObj = RT::Queue->new( $RT::SystemUser );
+ if ( ref $args{'Queue'} eq 'RT::Queue' ) {
$QueueObj->Load( $args{'Queue'}->Id );
}
+ elsif ( $args{'Queue'} ) {
+ $QueueObj->Load( $args{'Queue'} );
+ }
else {
- $RT::Logger->debug( $args{'Queue'} . " not a recognised queue object." );
+ $RT::Logger->debug("'". ( $args{'Queue'} ||''). "' not a recognised queue object." );
}
#Can't create a ticket without a queue.
- unless ( defined($QueueObj) && $QueueObj->Id ) {
+ unless ( $QueueObj->Id ) {
$RT::Logger->debug("$self No queue given for ticket creation.");
return ( 0, 0, $self->loc('Could not create ticket. Queue not set') );
}
+
#Now that we have a queue, Check the ACLS
unless (
$self->CurrentUser->HasRight(
@@ -427,21 +307,21 @@ sub Create {
}
#Since we have a queue, we can set queue defaults
- #Initial Priority
+ #Initial Priority
# If there's no queue default initial priority and it's not set, set it to 0
- $args{'InitialPriority'} = ( $QueueObj->InitialPriority || 0 )
- unless ( $args{'InitialPriority'} );
+ $args{'InitialPriority'} = $QueueObj->InitialPriority || 0
+ unless defined $args{'InitialPriority'};
#Final priority
-
# If there's no queue default final priority and it's not set, set it to 0
- $args{'FinalPriority'} = ( $QueueObj->FinalPriority || 0 )
- unless ( $args{'FinalPriority'} );
+ $args{'FinalPriority'} = $QueueObj->FinalPriority || 0
+ unless defined $args{'FinalPriority'};
# Priority may have changed from InitialPriority, for the case
# where we're importing tickets (eg, from an older RT version.)
- my $priority = $args{'Priority'} || $args{'InitialPriority'};
+ $args{'Priority'} = $args{'InitialPriority'}
+ unless defined $args{'Priority'};
# {{{ Dates
#TODO we should see what sort of due date we're getting, rather +
@@ -449,8 +329,7 @@ sub Create {
#Set the due date. if we didn't get fed one, use the queue default due in
my $Due = new RT::Date( $self->CurrentUser );
-
- if ( $args{'Due'} ) {
+ if ( defined $args{'Due'} ) {
$Due->Set( Format => 'ISO', Value => $args{'Due'} );
}
elsif ( my $due_in = $QueueObj->DefaultDueIn ) {
@@ -467,6 +346,9 @@ sub Create {
if ( defined $args{'Started'} ) {
$Started->Set( Format => 'ISO', Value => $args{'Started'} );
}
+ elsif ( $args{'Status'} ne 'new' ) {
+ $Started->SetToNow;
+ }
my $Resolved = new RT::Date( $self->CurrentUser );
if ( defined $args{'Resolved'} ) {
@@ -474,10 +356,10 @@ sub Create {
}
#If the status is an inactive status, set the resolved date
- if ( $QueueObj->IsInactiveStatus( $args{'Status'} ) && !$args{'Resolved'} )
+ elsif ( $QueueObj->IsInactiveStatus( $args{'Status'} ) )
{
$RT::Logger->debug( "Got a ". $args{'Status'}
- ." ticket with undefined resolved date. Setting to now."
+ ."(inactive) ticket with undefined resolved date. Setting to now."
);
$Resolved->SetToNow;
}
@@ -494,51 +376,42 @@ sub Create {
# {{{ Deal with setting the owner
+ my $Owner;
if ( ref( $args{'Owner'} ) eq 'RT::User' ) {
- $Owner = $args{'Owner'};
+ if ( $args{'Owner'}->id ) {
+ $Owner = $args{'Owner'};
+ } else {
+ $RT::Logger->error('passed not loaded owner object');
+ push @non_fatal_errors, $self->loc("Invalid owner object");
+ $Owner = undef;
+ }
}
#If we've been handed something else, try to load the user.
elsif ( $args{'Owner'} ) {
$Owner = RT::User->new( $self->CurrentUser );
$Owner->Load( $args{'Owner'} );
-
- push( @non_fatal_errors,
+ $Owner->LoadByEmail( $args{'Owner'} )
+ unless $Owner->Id;
+ unless ( $Owner->Id ) {
+ push @non_fatal_errors,
$self->loc("Owner could not be set.") . " "
- . $self->loc( "User '[_1]' could not be found.", $args{'Owner'} )
- )
- unless ( $Owner->Id );
+ . $self->loc( "User '[_1]' could not be found.", $args{'Owner'} );
+ $Owner = undef;
+ }
}
#If we have a proposed owner and they don't have the right
#to own a ticket, scream about it and make them not the owner
- if (
- ( defined($Owner) )
- and ( $Owner->Id )
- and ( $Owner->Id != $RT::Nobody->Id )
- and (
- !$Owner->HasRight(
- Object => $QueueObj,
- Right => 'OwnTicket'
- )
- )
- )
+
+ my $DeferOwner;
+ if ( $Owner && $Owner->Id != $RT::Nobody->Id
+ && !$Owner->HasRight( Object => $QueueObj, Right => 'OwnTicket' ) )
{
-
- $RT::Logger->warning( "User "
- . $Owner->Name . "("
- . $Owner->id
- . ") was proposed "
- . "as a ticket owner but has no rights to own "
- . "tickets in "
- . $QueueObj->Name );
-
- push @non_fatal_errors,
- $self->loc( "Owner '[_1]' does not have rights to own this ticket.",
- $Owner->Name
- );
-
+ $DeferOwner = $Owner;
$Owner = undef;
+ $RT::Logger->debug('going to deffer setting owner');
+
}
#If we haven't been handed a valid owner, make it nobody.
@@ -552,13 +425,24 @@ sub Create {
# We attempt to load or create each of the people who might have a role for this ticket
# _outside_ the transaction, so we don't get into ticket creation races
foreach my $type ( "Cc", "AdminCc", "Requestor" ) {
- next unless ( defined $args{$type} );
- foreach my $watcher (
- ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) )
- {
- my $user = RT::User->new($RT::SystemUser);
- $user->LoadOrCreateByEmail($watcher)
- if ( $watcher && $watcher !~ /^\d+$/ );
+ $args{ $type } = [ $args{ $type } ] unless ref $args{ $type };
+ foreach my $watcher ( splice @{ $args{$type} } ) {
+ next unless $watcher;
+ if ( $watcher =~ /^\d+$/ ) {
+ push @{ $args{$type} }, $watcher;
+ } else {
+ my @addresses = RT::EmailParser->ParseEmailAddress( $watcher );
+ foreach my $address( @addresses ) {
+ my $user = RT::User->new( $RT::SystemUser );
+ my ($uid, $msg) = $user->LoadOrCreateByEmail( $address );
+ unless ( $uid ) {
+ push @non_fatal_errors,
+ $self->loc("Couldn't load or create user: [_1]", $msg);
+ } else {
+ push @{ $args{$type} }, $user->id;
+ }
+ }
+ }
}
}
@@ -570,7 +454,7 @@ sub Create {
Subject => $args{'Subject'},
InitialPriority => $args{'InitialPriority'},
FinalPriority => $args{'FinalPriority'},
- Priority => $priority,
+ Priority => $args{'Priority'},
Status => $args{'Status'},
TimeWorked => $args{'TimeWorked'},
TimeEstimated => $args{'TimeEstimated'},
@@ -584,20 +468,21 @@ sub Create {
# Parameters passed in during an import that we probably don't want to touch, otherwise
foreach my $attr qw(id Creator Created LastUpdated LastUpdatedBy) {
- $params{$attr} = $args{$attr} if ( $args{$attr} );
+ $params{$attr} = $args{$attr} if $args{$attr};
}
# Delete null integer parameters
foreach my $attr
- qw(TimeWorked TimeLeft TimeEstimated InitialPriority FinalPriority) {
+ qw(TimeWorked TimeLeft TimeEstimated InitialPriority FinalPriority)
+ {
delete $params{$attr}
unless ( exists $params{$attr} && $params{$attr} );
}
# Delete the time worked if we're counting it in the transaction
- delete $params{TimeWorked} if $args{'_RecordTransaction'};
-
- my ($id,$ticket_message) = $self->SUPER::Create( %params);
+ delete $params{'TimeWorked'} if $args{'_RecordTransaction'};
+
+ my ($id,$ticket_message) = $self->SUPER::Create( %params );
unless ($id) {
$RT::Logger->crit( "Couldn't create a ticket: " . $ticket_message );
$RT::Handle->Rollback();
@@ -611,10 +496,9 @@ sub Create {
Field => 'EffectiveId',
Value => ( $args{'EffectiveId'} || $id )
);
-
- unless ($val) {
- $RT::Logger->crit("$self ->Create couldn't set EffectiveId: $msg\n");
- $RT::Handle->Rollback();
+ unless ( $val ) {
+ $RT::Logger->crit("Couldn't set EffectiveId: $msg");
+ $RT::Handle->Rollback;
return ( 0, 0,
$self->loc("Ticket could not be created due to an internal error")
);
@@ -631,60 +515,86 @@ sub Create {
);
}
-# Set the owner in the Groups table
-# We denormalize it into the Ticket table too because doing otherwise would
-# kill performance, bigtime. It gets kept in lockstep thanks to the magic of transactionalization
-
+ # Set the owner in the Groups table
+ # We denormalize it into the Ticket table too because doing otherwise would
+ # kill performance, bigtime. It gets kept in lockstep thanks to the magic of transactionalization
$self->OwnerGroup->_AddMember(
PrincipalId => $Owner->PrincipalId,
InsideTransaction => 1
- );
+ ) unless $DeferOwner;
+
+
# {{{ Deal with setting up watchers
foreach my $type ( "Cc", "AdminCc", "Requestor" ) {
- next unless ( defined $args{$type} );
- foreach my $watcher (
- ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) )
- {
+ # we know it's an array ref
+ foreach my $watcher ( @{ $args{$type} } ) {
+
+ # Note that we're using AddWatcher, rather than _AddWatcher, as we
+ # actually _want_ that ACL check. Otherwise, random ticket creators
+ # could make themselves adminccs and maybe get ticket rights. that would
+ # be poor
+ my $method = $type eq 'AdminCc'? 'AddWatcher': '_AddWatcher';
+
+ my ($val, $msg) = $self->$method(
+ Type => $type,
+ PrincipalId => $watcher,
+ Silent => 1,
+ );
+ push @non_fatal_errors, $self->loc("Couldn't set [_1] watcher: [_2]", $type, $msg)
+ unless $val;
+ }
+ }
- # If there is an empty entry in the list, let's get out of here.
- next unless $watcher;
+ if ($args{'SquelchMailTo'}) {
+ my @squelch = ref( $args{'SquelchMailTo'} ) ? @{ $args{'SquelchMailTo'} }
+ : $args{'SquelchMailTo'};
+ $self->_SquelchMailTo( @squelch );
+ }
- # we reason that all-digits number must be a principal id, not email
- # this is the only way to can add
- my $field = 'Email';
- $field = 'PrincipalId' if $watcher =~ /^\d+$/;
- my ( $wval, $wmsg );
+ # }}}
- if ( $type eq 'AdminCc' ) {
+ # {{{ Add all the custom fields
- # Note that we're using AddWatcher, rather than _AddWatcher, as we
- # actually _want_ that ACL check. Otherwise, random ticket creators
- # could make themselves adminccs and maybe get ticket rights. that would
- # be poor
- ( $wval, $wmsg ) = $self->AddWatcher(
- Type => $type,
- $field => $watcher,
- Silent => 1
- );
- }
- else {
- ( $wval, $wmsg ) = $self->_AddWatcher(
- Type => $type,
- $field => $watcher,
- Silent => 1
- );
- }
+ foreach my $arg ( keys %args ) {
+ next unless $arg =~ /^CustomField-(\d+)$/i;
+ my $cfid = $1;
- push @non_fatal_errors, $wmsg unless ($wval);
+ foreach my $value (
+ UNIVERSAL::isa( $args{$arg} => 'ARRAY' ) ? @{ $args{$arg} } : ( $args{$arg} ) )
+ {
+ next unless defined $value && length $value;
+
+ # Allow passing in uploaded LargeContent etc by hash reference
+ my ($status, $msg) = $self->_AddCustomFieldValue(
+ (UNIVERSAL::isa( $value => 'HASH' )
+ ? %$value
+ : (Value => $value)
+ ),
+ Field => $cfid,
+ RecordTransaction => 0,
+ );
+ push @non_fatal_errors, $msg unless $status;
}
}
# }}}
+
# {{{ Deal with setting up links
+ # TODO: Adding link may fire scrips on other end and those scrips
+ # could create transactions on this ticket before 'Create' transaction.
+ #
+ # We should implement different schema: record 'Create' transaction,
+ # create links and only then fire create transaction's scrips.
+ #
+ # Ideal variant: add all links without firing scrips, record create
+ # transaction and only then fire scrips on the other ends of links.
+ #
+ # //RUZ
+
foreach my $type ( keys %LINKTYPEMAP ) {
next unless ( defined $args{$type} );
foreach my $link (
@@ -692,7 +602,7 @@ sub Create {
{
# Check rights on the other end of the link if we must
# then run _AddLink that doesn't check for ACLs
- if ( $RT::StrictLinkACL ) {
+ if ( RT->Config->Get( 'StrictLinkACL' ) ) {
my ($val, $msg, $obj) = $self->__GetTicketFromURI( URI => $link );
unless ( $val ) {
push @non_fatal_errors, $msg;
@@ -707,7 +617,9 @@ sub Create {
my ( $wval, $wmsg ) = $self->_AddLink(
Type => $LINKTYPEMAP{$type}->{'Type'},
$LINKTYPEMAP{$type}->{'Mode'} => $link,
- Silent => 1
+ Silent => !$args{'_RecordTransaction'},
+ 'Silent'. ( $LINKTYPEMAP{$type}->{'Mode'} eq 'Base'? 'Target': 'Base' )
+ => 1,
);
push @non_fatal_errors, $wmsg unless ($wval);
@@ -715,38 +627,37 @@ sub Create {
}
# }}}
-
- # {{{ Add all the custom fields
-
- foreach my $arg ( keys %args ) {
- next unless ( $arg =~ /^CustomField-(\d+)$/i );
- my $cfid = $1;
- foreach
- my $value ( UNIVERSAL::isa( $args{$arg} => 'ARRAY' ) ? @{ $args{$arg} } : ( $args{$arg} ) )
- {
- next unless ( length($value) );
-
- # Allow passing in uploaded LargeContent etc by hash reference
- $self->_AddCustomFieldValue(
- (UNIVERSAL::isa( $value => 'HASH' )
- ? %$value
- : (Value => $value)
- ),
- Field => $cfid,
- RecordTransaction => 0,
+ # Now that we've created the ticket and set up its metadata, we can actually go and check OwnTicket on the ticket itself.
+ # This might be different than before in cases where extensions like RTIR are doing clever things with RT's ACL system
+ if ( $DeferOwner ) {
+ if (!$DeferOwner->HasRight( Object => $self, Right => 'OwnTicket')) {
+
+ $RT::Logger->warning( "User " . $DeferOwner->Name . "(" . $DeferOwner->id
+ . ") was proposed as a ticket owner but has no rights to own "
+ . "tickets in " . $QueueObj->Name );
+ push @non_fatal_errors, $self->loc(
+ "Owner '[_1]' does not have rights to own this ticket.",
+ $DeferOwner->Name
);
+ } else {
+ $Owner = $DeferOwner;
+ $self->__Set(Field => 'Owner', Value => $Owner->id);
+
}
+ $self->OwnerGroup->_AddMember(
+ PrincipalId => $Owner->PrincipalId,
+ InsideTransaction => 1
+ );
}
- # }}}
-
if ( $args{'_RecordTransaction'} ) {
# {{{ Add a transaction for the create
my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction(
- Type => "Create",
- TimeTaken => $args{'TimeWorked'},
- MIMEObj => $args{'MIMEObj'}
+ Type => "Create",
+ TimeTaken => $args{'TimeWorked'},
+ MIMEObj => $args{'MIMEObj'},
+ CommitScrips => !$args{'DryRun'},
);
if ( $self->Id && $Trans ) {
@@ -765,6 +676,10 @@ sub Create {
return ( 0, 0, $self->loc( "Ticket could not be created due to an internal error"));
}
+ if ( $args{'DryRun'} ) {
+ $RT::Handle->Rollback();
+ return ($self->id, $TransObj, $ErrStr);
+ }
$RT::Handle->Commit();
return ( $self->Id, $TransObj->Id, $ErrStr );
@@ -784,179 +699,6 @@ sub Create {
# }}}
-
-# {{{ UpdateFrom822
-
-=head2 UpdateFrom822 $MESSAGE
-
-Takes an RFC822 format message as a string and uses it to make a bunch of changes to a ticket.
-Returns an um. ask me again when the code exists
-
-
-=begin testing
-
-my $simple_update = <<EOF;
-Subject: target
-AddRequestor: jesse\@example.com
-EOF
-
-my $ticket = RT::Ticket->new($RT::SystemUser);
-my ($id,$msg) =$ticket->Create(Subject => 'first', Queue => 'general');
-ok($ticket->Id, "Created the test ticket - ".$id ." - ".$msg);
-$ticket->UpdateFrom822($simple_update);
-is($ticket->Subject, 'target', "changed the subject");
-my $jesse = RT::User->new($RT::SystemUser);
-$jesse->LoadByEmail('jesse@example.com');
-ok ($jesse->Id, "There's a user for jesse");
-ok($ticket->Requestors->HasMember( $jesse->PrincipalObj), "It has the jesse principal object as a requestor ");
-
-=end testing
-
-
-=cut
-
-sub UpdateFrom822 {
- my $self = shift;
- my $content = shift;
- my %args = $self->_Parse822HeadersForAttributes($content);
-
-
- my %ticketargs = (
- Queue => $args{'queue'},
- Subject => $args{'subject'},
- Status => $args{'status'},
- Due => $args{'due'},
- Starts => $args{'starts'},
- Started => $args{'started'},
- Resolved => $args{'resolved'},
- Owner => $args{'owner'},
- Requestor => $args{'requestor'},
- Cc => $args{'cc'},
- AdminCc => $args{'admincc'},
- TimeWorked => $args{'timeworked'},
- TimeEstimated => $args{'timeestimated'},
- TimeLeft => $args{'timeleft'},
- InitialPriority => $args{'initialpriority'},
- Priority => $args{'priority'},
- FinalPriority => $args{'finalpriority'},
- Type => $args{'type'},
- DependsOn => $args{'dependson'},
- DependedOnBy => $args{'dependedonby'},
- RefersTo => $args{'refersto'},
- ReferredToBy => $args{'referredtoby'},
- Members => $args{'members'},
- MemberOf => $args{'memberof'},
- MIMEObj => $args{'mimeobj'}
- );
-
- foreach my $type qw(Requestor Cc Admincc) {
-
- foreach my $action ( 'Add', 'Del', '' ) {
-
- my $lctag = lc($action) . lc($type);
- foreach my $list ( $args{$lctag}, $args{ $lctag . 's' } ) {
-
- foreach my $entry ( ref($list) ? @{$list} : ($list) ) {
- push @{$ticketargs{ $action . $type }} , split ( /\s*,\s*/, $entry );
- }
-
- }
-
- # Todo: if we're given an explicit list, transmute it into a list of adds/deletes
-
- }
- }
-
- # Add custom field entries to %ticketargs.
- # TODO: allow named custom fields
- map {
- /^customfield-(\d+)$/
- && ( $ticketargs{ "CustomField-" . $1 } = $args{$_} );
- } keys(%args);
-
-# for each ticket we've been told to update, iterate through the set of
-# rfc822 headers and perform that update to the ticket.
-
-
- # {{{ Set basic fields
- my @attribs = qw(
- Subject
- FinalPriority
- Priority
- TimeEstimated
- TimeWorked
- TimeLeft
- Status
- Queue
- Type
- );
-
-
- # Resolve the queue from a name to a numeric id.
- if ( $ticketargs{'Queue'} and ( $ticketargs{'Queue'} !~ /^(\d+)$/ ) ) {
- my $tempqueue = RT::Queue->new($RT::SystemUser);
- $tempqueue->Load( $ticketargs{'Queue'} );
- $ticketargs{'Queue'} = $tempqueue->Id() if ( $tempqueue->id );
- }
-
- my @results;
-
- foreach my $attribute (@attribs) {
- my $value = $ticketargs{$attribute};
-
- if ( $value ne $self->$attribute() ) {
-
- my $method = "Set$attribute";
- my ( $code, $msg ) = $self->$method($value);
-
- push @results, $self->loc($attribute) . ': ' . $msg;
-
- }
- }
-
- # We special case owner changing, so we can use ForceOwnerChange
- if ( $ticketargs{'Owner'} && ( $self->Owner != $ticketargs{'Owner'} ) ) {
- my $ChownType = "Give";
- $ChownType = "Force" if ( $ticketargs{'ForceOwnerChange'} );
-
- my ( $val, $msg ) = $self->SetOwner( $ticketargs{'Owner'}, $ChownType );
- push ( @results, $msg );
- }
-
- # }}}
-# Deal with setting watchers
-
-
-# Acceptable arguments:
-# Requestor
-# Requestors
-# AddRequestor
-# AddRequestors
-# DelRequestor
-
- foreach my $type qw(Requestor Cc AdminCc) {
-
- # If we've been given a number of delresses to del, do it.
- foreach my $address (@{$ticketargs{'Del'.$type}}) {
- my ($id, $msg) = $self->DeleteWatcher( Type => $type, Email => $address);
- push (@results, $msg) ;
- }
-
- # If we've been given a number of addresses to add, do it.
- foreach my $address (@{$ticketargs{'Add'.$type}}) {
- $RT::Logger->debug("Adding $address as a $type");
- my ($id, $msg) = $self->AddWatcher( Type => $type, Email => $address);
- push (@results, $msg) ;
-
- }
-
-
-}
-
-
-}
-# }}}
-
# {{{ _Parse822HeadersForAttributes Content
=head2 _Parse822HeadersForAttributes Content
@@ -1001,7 +743,7 @@ sub _Parse822HeadersForAttributes {
foreach my $date qw(due starts started resolved) {
my $dateobj = RT::Date->new($RT::SystemUser);
- if ( $args{$date} =~ /^\d+$/ ) {
+ if ( defined ($args{$date}) and $args{$date} =~ /^\d+$/ ) {
$dateobj->Set( Format => 'unix', Value => $args{$date} );
}
else {
@@ -1127,7 +869,7 @@ sub Import {
. ") was proposed "
. "as a ticket owner but has no rights to own "
. "tickets in '"
- . $QueueObj->Name . "'\n" );
+ . $QueueObj->Name . "'" );
$Owner = undef;
}
@@ -1161,18 +903,18 @@ sub Import {
EffectiveId => $EffectiveId,
Queue => $QueueObj->Id,
Owner => $Owner->Id,
- Subject => $args{'Subject'}, # loc
- InitialPriority => $args{'InitialPriority'}, # loc
- FinalPriority => $args{'FinalPriority'}, # loc
- Priority => $args{'InitialPriority'}, # loc
- Status => $args{'Status'}, # loc
- TimeWorked => $args{'TimeWorked'}, # loc
- Type => $args{'Type'}, # loc
- Created => $args{'Created'}, # loc
- Told => $args{'Told'}, # loc
- LastUpdated => $args{'Updated'}, # loc
- Resolved => $args{'Resolved'}, # loc
- Due => $args{'Due'}, # loc
+ Subject => $args{'Subject'}, # loc
+ InitialPriority => $args{'InitialPriority'}, # loc
+ FinalPriority => $args{'FinalPriority'}, # loc
+ Priority => $args{'InitialPriority'}, # loc
+ Status => $args{'Status'}, # loc
+ TimeWorked => $args{'TimeWorked'}, # loc
+ Type => $args{'Type'}, # loc
+ Created => $args{'Created'}, # loc
+ Told => $args{'Told'}, # loc
+ LastUpdated => $args{'Updated'}, # loc
+ Resolved => $args{'Resolved'}, # loc
+ Due => $args{'Due'}, # loc
);
# If the ticket didn't have an id
@@ -1186,7 +928,7 @@ sub Import {
unless ($val) {
$RT::Logger->err(
- $self . "->Import couldn't set EffectiveId: $msg\n" );
+ $self . "->Import couldn't set EffectiveId: $msg" );
}
}
@@ -1229,48 +971,6 @@ It will create four groups for this ticket: Requestor, Cc, AdminCc and Owner.
It will return true on success and undef on failure.
-=begin testing
-
-my $ticket = RT::Ticket->new($RT::SystemUser);
-my ($id, $msg) = $ticket->Create(Subject => "Foo",
- Owner => $RT::SystemUser->Id,
- Status => 'open',
- Requestor => ['jesse@example.com'],
- Queue => '1'
- );
-ok ($id, "Ticket $id was created");
-ok(my $group = RT::Group->new($RT::SystemUser));
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Requestor'));
-ok ($group->Id, "Found the requestors object for this ticket");
-
-ok(my $jesse = RT::User->new($RT::SystemUser), "Creating a jesse rt::user");
-$jesse->LoadByEmail('jesse@example.com');
-ok($jesse->Id, "Found the jesse rt user");
-
-
-ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $jesse->PrincipalId), "The ticket actually has jesse at fsck.com as a requestor");
-ok ((my $add_id, $add_msg) = $ticket->AddWatcher(Type => 'Requestor', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor");
-ok ($add_id, "Add succeeded: ($add_msg)");
-ok(my $bob = RT::User->new($RT::SystemUser), "Creating a bob rt::user");
-$bob->LoadByEmail('bob@fsck.com');
-ok($bob->Id, "Found the bob rt user");
-ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $bob->PrincipalId), "The ticket actually has bob at fsck.com as a requestor");;
-ok ((my $add_id, $add_msg) = $ticket->DeleteWatcher(Type =>'Requestor', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor");
-ok (!$ticket->IsWatcher(Type => 'Requestor', Principal => $bob->PrincipalId), "The ticket no longer has bob at fsck.com as a requestor");;
-
-
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Cc'));
-ok ($group->Id, "Found the cc object for this ticket");
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'AdminCc'));
-ok ($group->Id, "Found the AdminCc object for this ticket");
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Owner'));
-ok ($group->Id, "Found the Owner object for this ticket");
-ok($group->HasMember($RT::SystemUser->UserObj->PrincipalObj), "the owner group has the member 'RT_System'");
-
-=end testing
=cut
@@ -1323,12 +1023,12 @@ AddWatcher takes a parameter hash. The keys are as follows:
Type One of Requestor, Cc, AdminCc
-PrinicpalId The RT::Principal id of the user or group that's being added as a watcher
+PrincipalId The RT::Principal id of the user or group that's being added as a watcher
Email The email address of the new watcher. If a user with this
email address can't be found, a new nonprivileged user will be created.
-If the watcher you\'re trying to set has an RT account, set the Owner paremeter to their User Id. Otherwise, set the Email parameter to their Email address.
+If the watcher you\'re trying to set has an RT account, set the PrincipalId paremeter to their User Id. Otherwise, set the Email parameter to their Email address.
=cut
@@ -1341,43 +1041,47 @@ sub AddWatcher {
@_
);
- return ( 0, "No principal specified" )
- unless $args{'Email'} or $args{'PrincipalId'};
+ # ModifyTicket works in any case
+ return $self->_AddWatcher( %args )
+ if $self->CurrentUserHasRight('ModifyTicket');
+ if ( $args{'Email'} ) {
+ my ($addr) = RT::EmailParser->ParseEmailAddress( $args{'Email'} );
+ return (0, $self->loc("Couldn't parse address from '[_1]' string", $args{'Email'} ))
+ unless $addr;
- if ( !$args{'PrincipalId'} and $args{'Email'} ) {
- my $user = RT::User->new( $self->CurrentUser );
- $user->LoadByEmail( $args{'Email'} );
- if ( $user->id ) {
- $args{'PrincipalId'} = $user->PrincipalId;
+ if ( lc $self->CurrentUser->UserObj->EmailAddress
+ eq lc RT::User->CanonicalizeEmailAddress( $addr->address ) )
+ {
+ $args{'PrincipalId'} = $self->CurrentUser->id;
delete $args{'Email'};
}
}
- # {{{ Check ACLS
- # ModifyTicket allow you to add any watcher
- return $self->_AddWatcher(%args)
- if $self->CurrentUserHasRight('ModifyTicket');
+ # If the watcher isn't the current user then the current user has no right
+ # bail
+ unless ( $args{'PrincipalId'} && $self->CurrentUser->id == $args{'PrincipalId'} ) {
+ return ( 0, $self->loc("Permission Denied") );
+ }
- #If the watcher we're trying to add is for the current user
- if ( $self->CurrentUser->PrincipalId == ($args{'PrincipalId'} || 0) ) {
- # If it's an AdminCc and they have 'WatchAsAdminCc'
- if ( $args{'Type'} eq 'AdminCc' ) {
- return $self->_AddWatcher( %args )
- if $self->CurrentUserHasRight('WatchAsAdminCc');
+ # If it's an AdminCc and they don't have 'WatchAsAdminCc', bail
+ if ( $args{'Type'} eq 'AdminCc' ) {
+ unless ( $self->CurrentUserHasRight('WatchAsAdminCc') ) {
+ return ( 0, $self->loc('Permission Denied') );
}
+ }
- # If it's a Requestor or Cc and they have 'Watch'
- elsif ( $args{'Type'} eq 'Cc' || $args{'Type'} eq 'Requestor' ) {
- return $self->_AddWatcher( %args )
- if $self->CurrentUserHasRight('Watch');
- }
- else {
- $RT::Logger->warning( "AddWatcher got passed a bogus type" );
- return ( 0, $self->loc('Error in parameters to Ticket->AddWatcher') );
+ # If it's a Requestor or Cc and they don't have 'Watch', bail
+ elsif ( $args{'Type'} eq 'Cc' || $args{'Type'} eq 'Requestor' ) {
+ unless ( $self->CurrentUserHasRight('Watch') ) {
+ return ( 0, $self->loc('Permission Denied') );
}
}
+ else {
+ $RT::Logger->warning( "AddWatcher got passed a bogus type");
+ return ( 0, $self->loc('Error in parameters to Ticket->AddWatcher') );
+ }
- return ( 0, $self->loc("Permission Denied") );
+ return $self->_AddWatcher( %args );
}
#This contains the meat of AddWatcher. but can be called from a routine like
@@ -1396,14 +1100,8 @@ sub _AddWatcher {
my $principal = RT::Principal->new($self->CurrentUser);
if ($args{'Email'}) {
my $user = RT::User->new($RT::SystemUser);
- my ($pid, $msg) = $user->LoadOrCreateByEmail($args{'Email'});
- # If we can't load the user by email address, let's try to load by username
- unless ($pid) {
- ($pid,$msg) = $user->Load($args{'Email'})
- }
- if ($pid) {
- $args{'PrincipalId'} = $pid;
- }
+ my ($pid, $msg) = $user->LoadOrCreateByEmail( $args{'Email'} );
+ $args{'PrincipalId'} = $pid if $pid;
}
if ($args{'PrincipalId'}) {
$principal->Load($args{'PrincipalId'});
@@ -1432,7 +1130,7 @@ sub _AddWatcher {
my ( $m_id, $m_msg ) = $group->_AddMember( PrincipalId => $principal->Id,
InsideTransaction => 1 );
unless ($m_id) {
- $RT::Logger->error("Failed to add ".$principal->Id." as a member of group ".$group->Id."\n".$m_msg);
+ $RT::Logger->error("Failed to add ".$principal->Id." as a member of group ".$group->Id.": ".$m_msg);
return ( 0, $self->loc('Could not make that principal a [_1] for this ticket', $self->loc($args{'Type'})) );
}
@@ -1555,7 +1253,7 @@ sub DeleteWatcher {
$RT::Logger->error( "Failed to delete "
. $principal->Id
. " as a member of group "
- . $group->Id . "\n"
+ . $group->Id . ": "
. $m_msg );
return (0,
@@ -1588,35 +1286,6 @@ Takes an optional email address to never email about updates to this ticket.
Returns an array of the RT::Attribute objects for this ticket's 'SquelchMailTo' attributes.
-=begin testing
-
-my $t = RT::Ticket->new($RT::SystemUser);
-ok($t->Create(Queue => 'general', Subject => 'SquelchTest'));
-
-is($#{$t->SquelchMailTo}, -1, "The ticket has no squelched recipients");
-
-my @returned = $t->SquelchMailTo('nobody@example.com');
-
-is($#returned, 0, "The ticket has one squelched recipients");
-
-my @names = $t->Attributes->Names;
-is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo");
-@returned = $t->SquelchMailTo('nobody@example.com');
-
-
-is($#returned, 0, "The ticket has one squelched recipients");
-
-@names = $t->Attributes->Names;
-is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo");
-
-
-my ($ret, $msg) = $t->UnsquelchMailTo('nobody@example.com');
-ok($ret, "Removed nobody as a squelched recipient - ".$msg);
-@returned = $t->SquelchMailTo();
-is($#returned, -1, "The ticket has no squelched recipients". join(',',@returned));
-
-
-=end testing
=cut
@@ -1626,14 +1295,22 @@ sub SquelchMailTo {
unless ( $self->CurrentUserHasRight('ModifyTicket') ) {
return undef;
}
- my $attr = shift;
- $self->AddAttribute( Name => 'SquelchMailTo', Content => $attr )
- unless grep { $_->Content eq $attr }
- $self->Attributes->Named('SquelchMailTo');
+ } else {
+ unless ( $self->CurrentUserHasRight('ShowTicket') ) {
+ return undef;
+ }
}
- unless ( $self->CurrentUserHasRight('ShowTicket') ) {
- return undef;
+ return $self->_SquelchMailTo(@_);
+}
+
+sub _SquelchMailTo {
+ my $self = shift;
+ if (@_) {
+ my $attr = shift;
+ $self->AddAttribute( Name => 'SquelchMailTo', Content => $attr )
+ unless grep { $_->Content eq $attr }
+ $self->Attributes->Named('SquelchMailTo');
}
my @attributes = $self->Attributes->Named('SquelchMailTo');
return (@attributes);
@@ -1709,7 +1386,6 @@ sub CcAddresses {
unless ( $self->CurrentUserHasRight('ShowTicket') ) {
return undef;
}
-
return ( $self->Cc->MemberEmailAddressesAsString);
}
@@ -1822,7 +1498,6 @@ sub IsWatcher {
$group->LoadTicketRoleGroup(Type => $args{'Type'}, Ticket => $self->id);
# Find the relevant principal.
- my $principal = RT::Principal->new($self->CurrentUser);
if (!$args{PrincipalId} && $args{Email}) {
# Look up the specified user.
my $user = RT::User->new($self->CurrentUser);
@@ -1835,10 +1510,9 @@ sub IsWatcher {
return 0;
}
}
- $principal->Load($args{'PrincipalId'});
# Ask if it has the member in question
- return ($group->HasMember($principal));
+ return $group->HasMember( $args{'PrincipalId'} );
}
# }}}
@@ -1847,9 +1521,9 @@ sub IsWatcher {
=head2 IsRequestor PRINCIPAL_ID
- Takes an RT::Principal id
- Returns true if the principal is a requestor of the current ticket.
+Takes an L<RT::Principal> id.
+Returns true if the principal is a requestor of the current ticket.
=cut
@@ -1868,7 +1542,7 @@ sub IsRequestor {
=head2 IsCc PRINCIPAL_ID
Takes an RT::Principal id.
- Returns true if the principal is a requestor of the current ticket.
+ Returns true if the principal is a Cc of the current ticket.
=cut
@@ -1888,7 +1562,7 @@ sub IsCc {
=head2 IsAdminCc PRINCIPAL_ID
Takes an RT::Principal id.
- Returns true if the principal is a requestor of the current ticket.
+ Returns true if the principal is an AdminCc of the current ticket.
=cut
@@ -1917,8 +1591,8 @@ sub IsOwner {
# no ACL check since this is used in acl decisions
# unless ($self->CurrentUserHasRight('ShowTicket')) {
- # return(undef);
- # }
+ # return(undef);
+ # }
#Tickets won't yet have owners when they're being created.
unless ( $self->OwnerObj->id ) {
@@ -1939,6 +1613,46 @@ sub IsOwner {
# }}}
+
+=head2 TransactionAddresses
+
+Returns a composite hashref of the results of L<RT::Transaction/Addresses> for all this ticket's Create, Comment or Correspond transactions.
+The keys are C<To>, C<Cc> and C<Bcc>. The values are lists of C<Email::Address> objects.
+
+NOTE: For performance reasons, this method might want to skip transactions and go straight for attachments. But to make that work right, we're going to need to go and walk around the access control in Attachment.pm's sub _Value.
+
+=cut
+
+
+sub TransactionAddresses {
+ my $self = shift;
+ my $txns = $self->Transactions;
+
+ my %addresses = ();
+ foreach my $type (qw(Create Comment Correspond)) {
+ $txns->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => $type , ENTRYAGGREGATOR => 'OR', CASESENSITIVE => 1);
+ }
+
+ while (my $txn = $txns->Next) {
+ my $txnaddrs = $txn->Addresses;
+ foreach my $addrlist ( values %$txnaddrs ) {
+ foreach my $addr (@$addrlist) {
+ # Skip addresses without a phrase (things that are just raw addresses) if we have a phrase
+ next if ($addresses{$addr->address} && $addresses{$addr->address}->phrase && not $addr->phrase);
+ # skips "comment-only" addresses
+ next unless ($addr->address);
+ $addresses{$addr->address} = $addr;
+ }
+ }
+ }
+
+ return \%addresses;
+
+}
+
+
+
+
# {{{ Routines dealing with queues
# {{{ sub ValidateQueue
@@ -2012,7 +1726,18 @@ sub SetQueue {
$RT::Logger->error("Couldn't set owner on queue change: $msg") unless $status;
}
- return ( $self->_Set( Field => 'Queue', Value => $NewQueueObj->Id() ) );
+ my ($status, $msg) = $self->_Set( Field => 'Queue', Value => $NewQueueObj->Id() );
+
+ if ( $status ) {
+ # On queue change, change queue for reminders too
+ my $reminder_collection = $self->Reminders->Collection;
+ while ( my $reminder = $reminder_collection->Next ) {
+ my ($status, $msg) = $reminder->SetQueue($NewQueue);
+ $RT::Logger->error('Queue change failed for reminder #' . $reminder->Id . ': ' . $msg) unless $status;
+ }
+ }
+
+ return ($status, $msg);
}
# }}}
@@ -2055,8 +1780,8 @@ sub DueObj {
my $time = new RT::Date( $self->CurrentUser );
# -1 is RT::Date slang for never
- if ( $self->Due ) {
- $time->Set( Format => 'sql', Value => $self->Due );
+ if ( my $due = $self->Due ) {
+ $time->Set( Format => 'sql', Value => $due );
}
else {
$time->Set( Format => 'unix', Value => -1 );
@@ -2235,20 +1960,34 @@ Returns the amount of time worked on this ticket as a Text String
sub TimeWorkedAsString {
my $self = shift;
- return "0" unless $self->TimeWorked;
+ my $value = $self->TimeWorked;
+
+ # return the # of minutes worked turned into seconds and written as
+ # a simple text string, this is not really a date object, but if we
+ # diff a number of seconds vs the epoch, we'll get a nice description
+ # of time worked.
+ return "" unless $value;
+ return RT::Date->new( $self->CurrentUser )
+ ->DurationAsString( $value * 60 );
+}
- #This is not really a date object, but if we diff a number of seconds
- #vs the epoch, we'll get a nice description of time worked.
+# }}}
- my $worked = new RT::Date( $self->CurrentUser );
+# {{{ sub TimeLeftAsString
- #return the #of minutes worked turned into seconds and written as
- # a simple text string
+=head2 TimeLeftAsString
- return ( $worked->DurationAsString( $self->TimeWorked * 60 ) );
-}
+Returns the amount of time left on this ticket as a Text String
-# }}}
+=cut
+
+sub TimeLeftAsString {
+ my $self = shift;
+ my $value = $self->TimeLeft;
+ return "" unless $value;
+ return RT::Date->new( $self->CurrentUser )
+ ->DurationAsString( $value * 60 );
+}
# }}}
@@ -2259,9 +1998,9 @@ sub TimeWorkedAsString {
=head2 Comment
Comment on this ticket.
-Takes a hashref with the following attributes:
+Takes a hash with the following attributes:
If MIMEObj is undefined, Content will be used to build a MIME::Entity for this
-commentl
+comment.
MIMEObj, TimeTaken, CcMessageTo, BccMessageTo, Content, DryRun
@@ -2372,34 +2111,37 @@ Performs no access control checks. hence, dangerous.
=cut
sub _RecordNote {
-
my $self = shift;
- my %args = ( CcMessageTo => undef,
- BccMessageTo => undef,
- MIMEObj => undef,
- Content => undef,
- TimeTaken => 0,
- CommitScrips => 1,
- @_ );
+ my %args = (
+ CcMessageTo => undef,
+ BccMessageTo => undef,
+ Encrypt => undef,
+ Sign => undef,
+ MIMEObj => undef,
+ Content => undef,
+ NoteType => 'Correspond',
+ TimeTaken => 0,
+ CommitScrips => 1,
+ @_
+ );
unless ( $args{'MIMEObj'} || $args{'Content'} ) {
- return ( 0, $self->loc("No message attached"), undef );
+ return ( 0, $self->loc("No message attached"), undef );
}
+
unless ( $args{'MIMEObj'} ) {
- $args{'MIMEObj'} = MIME::Entity->build( Data => (
- ref $args{'Content'}
- ? $args{'Content'}
- : [ $args{'Content'} ]
- ) );
- }
+ $args{'MIMEObj'} = MIME::Entity->build(
+ Data => ( ref $args{'Content'}? $args{'Content'}: [ $args{'Content'} ] )
+ );
+ }
# convert text parts into utf-8
RT::I18N::SetMIMEEntityToUTF8( $args{'MIMEObj'} );
-# If we've been passed in CcMessageTo and BccMessageTo fields,
-# add them to the mime object for passing on to the transaction handler
-# The "NotifyOtherRecipients" scripAction will look for RT-Send-Cc: and RT-Send-Bcc:
-# headers
+ # If we've been passed in CcMessageTo and BccMessageTo fields,
+ # add them to the mime object for passing on to the transaction handler
+ # The "NotifyOtherRecipients" scripAction will look for RT-Send-Cc: and
+ # RT-Send-Bcc: headers
foreach my $type (qw/Cc Bcc/) {
@@ -2407,28 +2149,26 @@ sub _RecordNote {
my $addresses = join ', ', (
map { RT::User->CanonicalizeEmailAddress( $_->address ) }
- Mail::Address->parse( $args{ $type . 'MessageTo' } ) );
+ Email::Address->parse( $args{ $type . 'MessageTo' } ) );
$args{'MIMEObj'}->head->add( 'RT-Send-' . $type, $addresses );
}
}
+ foreach my $argument (qw(Encrypt Sign)) {
+ $args{'MIMEObj'}->head->add(
+ "X-RT-$argument" => $args{ $argument }
+ ) if defined $args{ $argument };
+ }
+
# If this is from an external source, we need to come up with its
# internal Message-ID now, so all emails sent because of this
# message have a common Message-ID
- unless ( ($args{'MIMEObj'}->head->get('Message-ID') || '')
- =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@\Q$RT::Organization>/ )
- {
- $args{'MIMEObj'}->head->replace( 'RT-Message-ID',
- "<rt-"
- . $RT::VERSION . "-"
- . $$ . "-"
- . CORE::time() . "-"
- . int(rand(2000)) . '.'
- . $self->id . "-"
- . "0" . "-" # Scrip
- . "0" . "@" # Email sent
- . $RT::Organization
- . ">" );
+ my $org = RT->Config->Get('Organization');
+ my $msgid = $args{'MIMEObj'}->head->get('Message-ID');
+ unless (defined $msgid && $msgid =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@\Q$org\E>/) {
+ $args{'MIMEObj'}->head->set(
+ 'RT-Message-ID' => RT::Interface::Email::GenMessageId( Ticket => $self )
+ );
}
#Record the correspondence (write the transaction)
@@ -2492,9 +2232,14 @@ sub _Links {
=head2 DeleteLink
-Delete a link. takes a paramhash of Base, Target and Type.
-Either Base or Target must be null. The null value will
-be replaced with this ticket\'s id
+Delete a link. takes a paramhash of Base, Target, Type, Silent,
+SilentBase and SilentTarget. Either Base or Target must be null.
+The null value will be replaced with this ticket\'s id.
+
+If Silent is true then no transaction would be recorded, in other
+case you can control creation of transactions on both base and
+target with SilentBase and SilentTarget respectively. By default
+both transactions are created.
=cut
@@ -2504,18 +2249,21 @@ sub DeleteLink {
Base => undef,
Target => undef,
Type => undef,
+ Silent => undef,
+ SilentBase => undef,
+ SilentTarget => undef,
@_
);
unless ( $args{'Target'} || $args{'Base'} ) {
- $RT::Logger->error("Base or Target must be specified\n");
+ $RT::Logger->error("Base or Target must be specified");
return ( 0, $self->loc('Either base or target must be specified') );
}
#check acls
my $right = 0;
$right++ if $self->CurrentUserHasRight('ModifyTicket');
- if ( !$right && $RT::StrictLinkACL ) {
+ if ( !$right && RT->Config->Get( 'StrictLinkACL' ) ) {
return ( 0, $self->loc("Permission Denied") );
}
@@ -2526,57 +2274,55 @@ sub DeleteLink {
if ( !$other_ticket || $other_ticket->CurrentUserHasRight('ModifyTicket') ) {
$right++;
}
- if ( ( !$RT::StrictLinkACL && $right == 0 ) ||
- ( $RT::StrictLinkACL && $right < 2 ) )
+ if ( ( !RT->Config->Get( 'StrictLinkACL' ) && $right == 0 ) ||
+ ( RT->Config->Get( 'StrictLinkACL' ) && $right < 2 ) )
{
return ( 0, $self->loc("Permission Denied") );
}
my ($val, $Msg) = $self->SUPER::_DeleteLink(%args);
+ return ( 0, $Msg ) unless $val;
- if ( !$val ) {
- $RT::Logger->debug("Couldn't find that link\n");
- return ( 0, $Msg );
- }
+ return ( $val, $Msg ) if $args{'Silent'};
my ($direction, $remote_link);
if ( $args{'Base'} ) {
- $remote_link = $args{'Base'};
- $direction = 'Target';
+ $remote_link = $args{'Base'};
+ $direction = 'Target';
}
elsif ( $args{'Target'} ) {
- $remote_link = $args{'Target'};
- $direction='Base';
- }
+ $remote_link = $args{'Target'};
+ $direction = 'Base';
+ }
- if ( $args{'Silent'} ) {
- return ( $val, $Msg );
- }
- else {
- my $remote_uri = RT::URI->new( $self->CurrentUser );
- $remote_uri->FromURI( $remote_link );
+ my $remote_uri = RT::URI->new( $self->CurrentUser );
+ $remote_uri->FromURI( $remote_link );
+ unless ( $args{ 'Silent'. $direction } ) {
my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction(
Type => 'DeleteLink',
- Field => $LINKDIRMAP{$args{'Type'}}->{$direction},
- OldValue => $remote_uri->URI || $remote_link,
+ Field => $LINKDIRMAP{$args{'Type'}}->{$direction},
+ OldValue => $remote_uri->URI || $remote_link,
TimeTaken => 0
);
-
- if ( $remote_uri->IsLocal ) {
-
- my $OtherObj = $remote_uri->Object;
- my ( $val, $Msg ) = $OtherObj->_NewTransaction(Type => 'DeleteLink',
- Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base}
- : $LINKDIRMAP{$args{'Type'}}->{Target},
- OldValue => $self->URI,
- ActivateScrips => ! $RT::LinkTransactionsRun1Scrip,
- TimeTaken => 0 );
- }
-
- return ( $Trans, $Msg );
+ $RT::Logger->error("Couldn't create transaction: $Msg") unless $Trans;
+ }
+
+ if ( !$args{ 'Silent'. ( $direction eq 'Target'? 'Base': 'Target' ) } && $remote_uri->IsLocal ) {
+ my $OtherObj = $remote_uri->Object;
+ my ( $val, $Msg ) = $OtherObj->_NewTransaction(
+ Type => 'DeleteLink',
+ Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base}
+ : $LINKDIRMAP{$args{'Type'}}->{Target},
+ OldValue => $self->URI,
+ ActivateScrips => !RT->Config->Get('LinkTransactionsRun1Scrip'),
+ TimeTaken => 0,
+ );
+ $RT::Logger->error("Couldn't create transaction: $Msg") unless $val;
}
+
+ return ( $val, $Msg );
}
# }}}
@@ -2587,24 +2333,31 @@ sub DeleteLink {
Takes a paramhash of Type and one of Base or Target. Adds that link to this ticket.
+If Silent is true then no transaction would be recorded, in other
+case you can control creation of transactions on both base and
+target with SilentBase and SilentTarget respectively. By default
+both transactions are created.
+
=cut
sub AddLink {
my $self = shift;
- my %args = ( Target => '',
- Base => '',
- Type => '',
- Silent => undef,
+ my %args = ( Target => '',
+ Base => '',
+ Type => '',
+ Silent => undef,
+ SilentBase => undef,
+ SilentTarget => undef,
@_ );
unless ( $args{'Target'} || $args{'Base'} ) {
- $RT::Logger->error("Base or Target must be specified\n");
+ $RT::Logger->error("Base or Target must be specified");
return ( 0, $self->loc('Either base or target must be specified') );
}
my $right = 0;
$right++ if $self->CurrentUserHasRight('ModifyTicket');
- if ( !$right && $RT::StrictLinkACL ) {
+ if ( !$right && RT->Config->Get( 'StrictLinkACL' ) ) {
return ( 0, $self->loc("Permission Denied") );
}
@@ -2615,8 +2368,8 @@ sub AddLink {
if ( !$other_ticket || $other_ticket->CurrentUserHasRight('ModifyTicket') ) {
$right++;
}
- if ( ( !$RT::StrictLinkACL && $right == 0 ) ||
- ( $RT::StrictLinkACL && $right < 2 ) )
+ if ( ( !RT->Config->Get( 'StrictLinkACL' ) && $right == 0 ) ||
+ ( RT->Config->Get( 'StrictLinkACL' ) && $right < 2 ) )
{
return ( 0, $self->loc("Permission Denied") );
}
@@ -2634,8 +2387,8 @@ sub __GetTicketFromURI {
$uri_obj->FromURI( $args{'URI'} );
unless ( $uri_obj->Resolver && $uri_obj->Scheme ) {
- my $msg = $self->loc( "Couldn't resolve '[_1]' into a URI.", $args{'URI'} );
- $RT::Logger->warning( "$msg\n" );
+ my $msg = $self->loc( "Couldn't resolve '[_1]' into a URI.", $args{'URI'} );
+ $RT::Logger->warning( $msg );
return( 0, $msg );
}
my $obj = $uri_obj->Resolver->Object;
@@ -2653,14 +2406,17 @@ Private non-acled variant of AddLink so that links can be added during create.
sub _AddLink {
my $self = shift;
- my %args = ( Target => '',
- Base => '',
- Type => '',
- Silent => undef,
+ my %args = ( Target => '',
+ Base => '',
+ Type => '',
+ Silent => undef,
+ SilentBase => undef,
+ SilentTarget => undef,
@_ );
my ($val, $msg, $exist) = $self->SUPER::_AddLink(%args);
return ($val, $msg) if !$val || $exist;
+ return ($val, $msg) if $args{'Silent'};
my ($direction, $remote_link);
if ( $args{'Target'} ) {
@@ -2671,34 +2427,33 @@ sub _AddLink {
$direction = 'Target';
}
- # Don't write the transaction if we're doing this on create
- if ( $args{'Silent'} ) {
- return ( $val, $msg );
- }
- else {
- my $remote_uri = RT::URI->new( $self->CurrentUser );
- $remote_uri->FromURI( $remote_link );
-
- #Write the transaction
- my ( $Trans, $Msg, $TransObj ) =
- $self->_NewTransaction(Type => 'AddLink',
- Field => $LINKDIRMAP{$args{'Type'}}->{$direction},
- NewValue => $remote_uri->URI || $remote_link,
- TimeTaken => 0 );
-
- if ( $remote_uri->IsLocal ) {
-
- my $OtherObj = $remote_uri->Object;
- my ( $val, $Msg ) = $OtherObj->_NewTransaction(Type => 'AddLink',
- Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base}
- : $LINKDIRMAP{$args{'Type'}}->{Target},
- NewValue => $self->URI,
- ActivateScrips => ! $RT::LinkTransactionsRun1Scrip,
- TimeTaken => 0 );
- }
- return ( $val, $Msg );
+ my $remote_uri = RT::URI->new( $self->CurrentUser );
+ $remote_uri->FromURI( $remote_link );
+
+ unless ( $args{ 'Silent'. $direction } ) {
+ my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction(
+ Type => 'AddLink',
+ Field => $LINKDIRMAP{$args{'Type'}}->{$direction},
+ NewValue => $remote_uri->URI || $remote_link,
+ TimeTaken => 0
+ );
+ $RT::Logger->error("Couldn't create transaction: $Msg") unless $Trans;
+ }
+
+ if ( !$args{ 'Silent'. ( $direction eq 'Target'? 'Base': 'Target' ) } && $remote_uri->IsLocal ) {
+ my $OtherObj = $remote_uri->Object;
+ my ( $val, $msg ) = $OtherObj->_NewTransaction(
+ Type => 'AddLink',
+ Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base}
+ : $LINKDIRMAP{$args{'Type'}}->{Target},
+ NewValue => $self->URI,
+ ActivateScrips => !RT->Config->Get('LinkTransactionsRun1Scrip'),
+ TimeTaken => 0,
+ );
+ $RT::Logger->error("Couldn't create transaction: $msg") unless $val;
}
+ return ( $val, $msg );
}
# }}}
@@ -2711,26 +2466,6 @@ sub _AddLink {
MergeInto take the id of the ticket to merge this ticket into.
-=begin testing
-
-my $t1 = RT::Ticket->new($RT::SystemUser);
-$t1->Create ( Subject => 'Merge test 1', Queue => 'general', Requestor => 'merge1@example.com');
-my $t1id = $t1->id;
-my $t2 = RT::Ticket->new($RT::SystemUser);
-$t2->Create ( Subject => 'Merge test 2', Queue => 'general', Requestor => 'merge2@example.com');
-my $t2id = $t2->id;
-my ($msg, $val) = $t1->MergeInto($t2->id);
-ok ($msg,$val);
-$t1 = RT::Ticket->new($RT::SystemUser);
-is ($t1->id, undef, "ok. we've got a blank ticket1");
-$t1->Load($t1id);
-
-is ($t1->id, $t2->id);
-
-is ($t1->Requestors->MembersObj->Count, 2);
-
-
-=end testing
=cut
@@ -2896,6 +2631,29 @@ sub MergeInto {
return ( 1, $self->loc("Merge Successful") );
}
+=head2 Merged
+
+Returns list of tickets' ids that's been merged into this ticket.
+
+=cut
+
+sub Merged {
+ my $self = shift;
+
+ my $mergees = new RT::Tickets( $self->CurrentUser );
+ $mergees->Limit(
+ FIELD => 'EffectiveId',
+ OPERATOR => '=',
+ VALUE => $self->Id,
+ );
+ $mergees->Limit(
+ FIELD => 'id',
+ OPERATOR => '!=',
+ VALUE => $self->Id,
+ );
+ return map $_->id, @{ $mergees->ItemsArrayRef || [] };
+}
+
# }}}
# }}}
@@ -2952,28 +2710,6 @@ Takes two arguments:
and (optionally) the type of the SetOwner Transaction. It defaults
to 'Give'. 'Steal' is also a valid option.
-=begin testing
-
-my $root = RT::User->new($RT::SystemUser);
-$root->Load('root');
-ok ($root->Id, "Loaded the root user");
-my $t = RT::Ticket->new($RT::SystemUser);
-$t->Load(1);
-$t->SetOwner('root');
-is ($t->OwnerObj->Name, 'root' , "Root owns the ticket");
-$t->Steal();
-is ($t->OwnerObj->id, $RT::SystemUser->id , "SystemUser owns the ticket");
-my $txns = RT::Transactions->new($RT::SystemUser);
-$txns->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$txns->Limit(FIELD => 'ObjectId', VALUE => '1');
-$txns->Limit(FIELD => 'ObjectType', VALUE => 'RT::Ticket');
-$txns->Limit(FIELD => 'Type', OPERATOR => '!=', VALUE => 'EmailRecord');
-
-my $steal = $txns->First;
-ok($steal->OldValue == $root->Id , "Stolen from root");
-ok($steal->NewValue == $RT::SystemUser->Id , "Stolen by the systemuser");
-
-=end testing
=cut
@@ -3056,10 +2792,15 @@ sub SetOwner {
# Delete the owner in the owner group, then add a new one
# TODO: is this safe? it's not how we really want the API to work
# for most things, but it's fast.
- my ( $del_id, $del_msg ) = $self->OwnerGroup->MembersObj->First->Delete();
+ my ( $del_id, $del_msg );
+ for my $owner (@{$self->OwnerGroup->MembersObj->ItemsArrayRef}) {
+ ($del_id, $del_msg) = $owner->Delete();
+ last unless ($del_id);
+ }
+
unless ($del_id) {
$RT::Handle->Rollback();
- return ( 0, $self->loc("Could not change owner. ") . $del_msg );
+ return ( 0, $self->loc("Could not change owner: [_1]", $del_msg) );
}
my ( $add_id, $add_msg ) = $self->OwnerGroup->_AddMember(
@@ -3067,7 +2808,7 @@ sub SetOwner {
InsideTransaction => 1 );
unless ($add_id) {
$RT::Handle->Rollback();
- return ( 0, $self->loc("Could not change owner. ") . $add_msg );
+ return ( 0, $self->loc("Could not change owner: [_1]", $add_msg ) );
}
# We call set twice with slightly different arguments, so
@@ -3084,7 +2825,7 @@ sub SetOwner {
unless ($val) {
$RT::Handle->Rollback;
- return ( 0, $self->loc("Could not change owner. ") . $msg );
+ return ( 0, $self->loc("Could not change owner: [_1]", $msg) );
}
($val, $msg) = $self->_NewTransaction(
@@ -3201,25 +2942,6 @@ Set this ticket\'s status. STATUS can be one of: new, open, stalled, resolved, r
Alternatively, you can pass in a list of named parameters (Status => STATUS, Force => FORCE). If FORCE is true, ignore unresolved dependencies and force a status change.
-=begin testing
-
-my $tt = RT::Ticket->new($RT::SystemUser);
-my ($id, $tid, $msg)= $tt->Create(Queue => 'general',
- Subject => 'test');
-ok($id, $msg);
-is($tt->Status, 'new', "New ticket is created as new");
-
-($id, $msg) = $tt->SetStatus('open');
-ok($id, $msg);
-like($msg, qr/open/i, "Status message is correct");
-($id, $msg) = $tt->SetStatus('resolved');
-ok($id, $msg);
-like($msg, qr/resolved/i, "Status message is correct");
-($id, $msg) = $tt->SetStatus('resolved');
-ok(!$id,$msg);
-
-
-=end testing
=cut
@@ -3229,10 +2951,10 @@ sub SetStatus {
my %args;
if (@_ == 1) {
- $args{Status} = shift;
+ $args{Status} = shift;
}
else {
- %args = (@_);
+ %args = (@_);
}
#Check ACL
@@ -3254,7 +2976,7 @@ sub SetStatus {
$now->SetToNow();
#If we're changing the status from new, record that we've started
- if ( ( $self->Status =~ /new/ ) && ( $args{Status} ne 'new' ) ) {
+ if ( $self->Status eq 'new' && $args{Status} ne 'new' ) {
#Set the Started time to "now"
$self->_Set( Field => 'Started',
@@ -3282,20 +3004,14 @@ sub SetStatus {
# }}}
-# {{{ sub Kill
+# {{{ sub Delete
-=head2 Kill
+=head2 Delete
Takes no arguments. Marks this ticket for garbage collection
=cut
-sub Kill {
- my $self = shift;
- $RT::Logger->crit("'Kill' is deprecated. use 'Delete' instead at (". join(":",caller).").");
- return $self->Delete;
-}
-
sub Delete {
my $self = shift;
return ( $self->SetStatus('deleted') );
@@ -3367,7 +3083,7 @@ sub Resolve {
# }}}
-
+
# {{{ Actions + Routines dealing with transactions
# {{{ sub SetTold and _SetTold
@@ -3420,14 +3136,39 @@ sub _SetTold {
Value => $now->ISO ) );
}
+=head2 SeenUpTo
+
+
+=cut
+
+sub SeenUpTo {
+ my $self = shift;
+ my $uid = $self->CurrentUser->id;
+ my $attr = $self->FirstAttribute( "User-". $uid ."-SeenUpTo" );
+ return if $attr && $attr->Content gt $self->LastUpdated;
+
+ my $txns = $self->Transactions;
+ $txns->Limit( FIELD => 'Type', VALUE => 'Comment' );
+ $txns->Limit( FIELD => 'Type', VALUE => 'Correspond' );
+ $txns->Limit( FIELD => 'Creator', OPERATOR => '!=', VALUE => $uid );
+ $txns->Limit(
+ FIELD => 'Created',
+ OPERATOR => '>',
+ VALUE => $attr->Content
+ ) if $attr;
+ $txns->RowsPerPage(1);
+ return $txns->First;
+}
+
# }}}
=head2 TransactionBatch
- Returns an array reference of all transactions created on this ticket during
- this ticket object's lifetime, or undef if there were none.
+Returns an array reference of all transactions created on this ticket during
+this ticket object's lifetime or since last application of a batch, or undef
+if there were none.
- Only works when the $RT::UseTransactionBatch config variable is set to true.
+Only works when the C<UseTransactionBatch> config option is set to true.
=cut
@@ -3436,6 +3177,49 @@ sub TransactionBatch {
return $self->{_TransactionBatch};
}
+=head2 ApplyTransactionBatch
+
+Applies scrips on the current batch of transactions and shinks it. Usually
+batch is applied when object is destroyed, but in some cases it's too late.
+
+=cut
+
+sub ApplyTransactionBatch {
+ my $self = shift;
+
+ my $batch = $self->TransactionBatch;
+ return unless $batch && @$batch;
+
+ $self->_ApplyTransactionBatch;
+
+ $self->{_TransactionBatch} = [];
+}
+
+sub _ApplyTransactionBatch {
+ my $self = shift;
+ my $batch = $self->TransactionBatch;
+
+ my %seen;
+ my $types = join ',', grep !$seen{$_}++, grep defined, map $_->Type, grep defined, @{$batch};
+
+ require RT::Scrips;
+ RT::Scrips->new($RT::SystemUser)->Apply(
+ Stage => 'TransactionBatch',
+ TicketObj => $self,
+ TransactionObj => $batch->[0],
+ Type => $types,
+ );
+
+ # Entry point of the rule system
+ my $rules = RT::Ruleset->FindAllRules(
+ Stage => 'TransactionBatch',
+ TicketObj => $self,
+ TransactionObj => $batch->[0],
+ Type => $types,
+ );
+ RT::Ruleset->CommitRules($rules);
+}
+
sub DESTROY {
my $self = shift;
@@ -3449,16 +3233,10 @@ sub DESTROY {
# when an object's refcount is changed in its destructor.
return if $self->{_Destroyed}++;
- my $batch = $self->TransactionBatch or return;
- return unless @$batch;
+ my $batch = $self->TransactionBatch;
+ return unless $batch && @$batch;
- require RT::Scrips;
- RT::Scrips->new($RT::SystemUser)->Apply(
- Stage => 'TransactionBatch',
- TicketObj => $self,
- TransactionObj => $batch->[0],
- Type => join(',', (map { $_->Type } @{$batch}) )
- );
+ return $self->_ApplyTransactionBatch;
}
# }}}
@@ -3575,7 +3353,7 @@ sub _Value {
#if the field is public, return it.
if ( $self->_Accessible( $field, 'public' ) ) {
- #$RT::Logger->debug("Skipping ACL check for $field\n");
+ #$RT::Logger->debug("Skipping ACL check for $field");
return ( $self->SUPER::_Value($field) );
}
@@ -3634,13 +3412,10 @@ sub CurrentUserHasRight {
my $self = shift;
my $right = shift;
- return (
- $self->HasRight(
- Principal => $self->CurrentUser->UserObj(),
- Right => "$right"
- )
- );
-
+ return $self->CurrentUser->PrincipalObj->HasRight(
+ Object => $self,
+ Right => $right,
+ )
}
# }}}
@@ -3667,7 +3442,7 @@ sub HasRight {
unless ( ( defined $args{'Principal'} ) and ( ref( $args{'Principal'} ) ) )
{
- Carp::cluck;
+ Carp::cluck("Principal attrib undefined for Ticket::HasRight");
$RT::Logger->crit("Principal attrib undefined for Ticket::HasRight");
return(undef);
}
@@ -3724,11 +3499,13 @@ sub Transactions {
# if the user may not see comments do not return them
unless ( $self->CurrentUserHasRight('ShowTicketComments') ) {
$transactions->Limit(
+ SUBCLAUSE => 'acl',
FIELD => 'Type',
OPERATOR => '!=',
VALUE => "Comment"
);
$transactions->Limit(
+ SUBCLAUSE => 'acl',
FIELD => 'Type',
OPERATOR => '!=',
VALUE => "CommentEmailRecord",
@@ -3736,6 +3513,13 @@ sub Transactions {
);
}
+ } else {
+ $transactions->Limit(
+ SUBCLAUSE => 'acl',
+ FIELD => 'id',
+ VALUE => 0,
+ ENTRYAGGREGATOR => 'AND'
+ );
}
return ($transactions);
@@ -3774,18 +3558,17 @@ sub CustomFieldValues {
my $self = shift;
my $field = shift;
- return $self->SUPER::CustomFieldValues( $field )
- if !$field || $field =~ /^\d+$/;
+ return $self->SUPER::CustomFieldValues( $field ) if !$field || $field =~ /^\d+$/;
my $cf = RT::CustomField->new( $self->CurrentUser );
+ $cf->SetContextObject( $self );
$cf->LoadByNameAndQueue( Name => $field, Queue => $self->Queue );
unless ( $cf->id ) {
$cf->LoadByNameAndQueue( Name => $field, Queue => 0 );
}
# If we didn't find a valid cfid, give up.
- return RT::ObjectCustomFieldValues->new( $self->CurrentUser )
- unless $cf->id;
+ return RT::ObjectCustomFieldValues->new( $self->CurrentUser ) unless $cf->id;
return $self->SUPER::CustomFieldValues( $cf->id );
}
@@ -3807,6 +3590,23 @@ sub CustomFieldLookupType {
"RT::Queue-RT::Ticket";
}
+=head2 ACLEquivalenceObjects
+
+This method returns a list of objects for which a user's rights also apply
+to this ticket. Generally, this is only the ticket's queue, but some RT
+extensions may make other objects available too.
+
+This method is called from L<RT::Principal/HasRight>.
+
+=cut
+
+sub ACLEquivalenceObjects {
+ my $self = shift;
+ return $self->QueueObj;
+
+}
+
+
1;
=head1 AUTHOR
diff --git a/rt/lib/RT/Tickets.pm b/rt/lib/RT/Tickets.pm
index 2d98b1e..d0699e5 100755
--- a/rt/lib/RT/Tickets.pm
+++ b/rt/lib/RT/Tickets.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Tickets_Overlay.pm b/rt/lib/RT/Tickets_Overlay.pm
index 5378e71..b8f9756 100644
--- a/rt/lib/RT/Tickets_Overlay.pm
+++ b/rt/lib/RT/Tickets_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Major Changes:
# - Decimated ProcessRestrictions and broke it into multiple
@@ -72,15 +73,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Tickets);
-ok( my $testtickets = RT::Tickets->new( $RT::SystemUser ) );
-ok( $testtickets->LimitStatus( VALUE => 'deleted' ) );
-# Should be zero until 'allow_deleted_search'
-ok( $testtickets->Count == 0 );
-
-=end testing
=cut
@@ -97,65 +89,67 @@ use DBIx::SearchBuilder::Unique;
# FIELD_METADATA is a mapping of searchable Field name, to Type, and other
# metadata.
-my %FIELD_METADATA = (
- Status => [ 'ENUM', ],
- Queue => [ 'ENUM' => 'Queue', ],
- Type => [ 'ENUM', ],
- Creator => [ 'ENUM' => 'User', ],
- LastUpdatedBy => [ 'ENUM' => 'User', ],
- Owner => [ 'WATCHERFIELD' => 'Owner', ],
- EffectiveId => [ 'INT', ],
- id => [ 'INT', ],
- InitialPriority => [ 'INT', ],
- FinalPriority => [ 'INT', ],
- Priority => [ 'INT', ],
- TimeLeft => [ 'INT', ],
- TimeWorked => [ 'INT', ],
- TimeEstimated => [ 'INT', ],
- MemberOf => [ 'LINK' => To => 'MemberOf', ],
- DependsOn => [ 'LINK' => To => 'DependsOn', ],
- RefersTo => [ 'LINK' => To => 'RefersTo', ],
- HasMember => [ 'LINK' => From => 'MemberOf', ],
- DependentOn => [ 'LINK' => From => 'DependsOn', ],
- DependedOnBy => [ 'LINK' => From => 'DependsOn', ],
- ReferredToBy => [ 'LINK' => From => 'RefersTo', ],
- Told => [ 'DATE' => 'Told', ],
- Starts => [ 'DATE' => 'Starts', ],
- Started => [ 'DATE' => 'Started', ],
- Due => [ 'DATE' => 'Due', ],
- Resolved => [ 'DATE' => 'Resolved', ],
- LastUpdated => [ 'DATE' => 'LastUpdated', ],
- Created => [ 'DATE' => 'Created', ],
- Subject => [ 'STRING', ],
- Content => [ 'TRANSFIELD', ],
- ContentType => [ 'TRANSFIELD', ],
- Filename => [ 'TRANSFIELD', ],
- TransactionDate => [ 'TRANSDATE', ],
- Requestor => [ 'WATCHERFIELD' => 'Requestor', ],
- Requestors => [ 'WATCHERFIELD' => 'Requestor', ],
- Cc => [ 'WATCHERFIELD' => 'Cc', ],
- AdminCc => [ 'WATCHERFIELD' => 'AdminCc', ],
- Watcher => [ 'WATCHERFIELD', ],
- QueueCc => [ 'WATCHERFIELD' => 'Cc' => 'Queue', ],
- QueueAdminCc => [ 'WATCHERFIELD' => 'AdminCc' => 'Queue', ],
- QueueWatcher => [ 'WATCHERFIELD' => undef => 'Queue', ],
- LinkedTo => [ 'LINKFIELD', ],
- CustomFieldValue => [ 'CUSTOMFIELD', ],
- CustomField => [ 'CUSTOMFIELD', ],
- CF => [ 'CUSTOMFIELD', ],
- Updated => [ 'TRANSDATE', ],
- RequestorGroup => [ 'MEMBERSHIPFIELD' => 'Requestor', ],
- CCGroup => [ 'MEMBERSHIPFIELD' => 'Cc', ],
- AdminCCGroup => [ 'MEMBERSHIPFIELD' => 'AdminCc', ],
- WatcherGroup => [ 'MEMBERSHIPFIELD', ],
- HasAttribute => [ 'HASATTRIBUTE', 1 ],
- HasNoAttribute => [ 'HASATTRIBUTE', 0 ],
+our %FIELD_METADATA = (
+ Status => [ 'ENUM', ], #loc_left_pair
+ Queue => [ 'ENUM' => 'Queue', ], #loc_left_pair
+ Type => [ 'ENUM', ], #loc_left_pair
+ Creator => [ 'ENUM' => 'User', ], #loc_left_pair
+ LastUpdatedBy => [ 'ENUM' => 'User', ], #loc_left_pair
+ Owner => [ 'WATCHERFIELD' => 'Owner', ], #loc_left_pair
+ EffectiveId => [ 'INT', ], #loc_left_pair
+ id => [ 'ID', ], #loc_left_pair
+ InitialPriority => [ 'INT', ], #loc_left_pair
+ FinalPriority => [ 'INT', ], #loc_left_pair
+ Priority => [ 'INT', ], #loc_left_pair
+ TimeLeft => [ 'INT', ], #loc_left_pair
+ TimeWorked => [ 'INT', ], #loc_left_pair
+ TimeEstimated => [ 'INT', ], #loc_left_pair
+
+ Linked => [ 'LINK' ], #loc_left_pair
+ LinkedTo => [ 'LINK' => 'To' ], #loc_left_pair
+ LinkedFrom => [ 'LINK' => 'From' ], #loc_left_pair
+ MemberOf => [ 'LINK' => To => 'MemberOf', ], #loc_left_pair
+ DependsOn => [ 'LINK' => To => 'DependsOn', ], #loc_left_pair
+ RefersTo => [ 'LINK' => To => 'RefersTo', ], #loc_left_pair
+ HasMember => [ 'LINK' => From => 'MemberOf', ], #loc_left_pair
+ DependentOn => [ 'LINK' => From => 'DependsOn', ], #loc_left_pair
+ DependedOnBy => [ 'LINK' => From => 'DependsOn', ], #loc_left_pair
+ ReferredToBy => [ 'LINK' => From => 'RefersTo', ], #loc_left_pair
+ Told => [ 'DATE' => 'Told', ], #loc_left_pair
+ Starts => [ 'DATE' => 'Starts', ], #loc_left_pair
+ Started => [ 'DATE' => 'Started', ], #loc_left_pair
+ Due => [ 'DATE' => 'Due', ], #loc_left_pair
+ Resolved => [ 'DATE' => 'Resolved', ], #loc_left_pair
+ LastUpdated => [ 'DATE' => 'LastUpdated', ], #loc_left_pair
+ Created => [ 'DATE' => 'Created', ], #loc_left_pair
+ Subject => [ 'STRING', ], #loc_left_pair
+ Content => [ 'TRANSFIELD', ], #loc_left_pair
+ ContentType => [ 'TRANSFIELD', ], #loc_left_pair
+ Filename => [ 'TRANSFIELD', ], #loc_left_pair
+ TransactionDate => [ 'TRANSDATE', ], #loc_left_pair
+ Requestor => [ 'WATCHERFIELD' => 'Requestor', ], #loc_left_pair
+ Requestors => [ 'WATCHERFIELD' => 'Requestor', ], #loc_left_pair
+ Cc => [ 'WATCHERFIELD' => 'Cc', ], #loc_left_pair
+ AdminCc => [ 'WATCHERFIELD' => 'AdminCc', ], #loc_left_pair
+ Watcher => [ 'WATCHERFIELD', ], #loc_left_pair
+ QueueCc => [ 'WATCHERFIELD' => 'Cc' => 'Queue', ], #loc_left_pair
+ QueueAdminCc => [ 'WATCHERFIELD' => 'AdminCc' => 'Queue', ], #loc_left_pair
+ QueueWatcher => [ 'WATCHERFIELD' => undef => 'Queue', ], #loc_left_pair
+ CustomFieldValue => [ 'CUSTOMFIELD', ], #loc_left_pair
+ CustomField => [ 'CUSTOMFIELD', ], #loc_left_pair
+ CF => [ 'CUSTOMFIELD', ], #loc_left_pair
+ Updated => [ 'TRANSDATE', ], #loc_left_pair
+ RequestorGroup => [ 'MEMBERSHIPFIELD' => 'Requestor', ], #loc_left_pair
+ CCGroup => [ 'MEMBERSHIPFIELD' => 'Cc', ], #loc_left_pair
+ AdminCCGroup => [ 'MEMBERSHIPFIELD' => 'AdminCc', ], #loc_left_pair
+ WatcherGroup => [ 'MEMBERSHIPFIELD', ], #loc_left_pair
);
# Mapping of Field Type to Function
-my %dispatch = (
+our %dispatch = (
ENUM => \&_EnumLimit,
INT => \&_IntLimit,
+ ID => \&_IdLimit,
LINK => \&_LinkLimit,
DATE => \&_DateLimit,
STRING => \&_StringLimit,
@@ -163,11 +157,9 @@ my %dispatch = (
TRANSDATE => \&_TransDateLimit,
WATCHERFIELD => \&_WatcherLimit,
MEMBERSHIPFIELD => \&_WatcherMembershipLimit,
- LINKFIELD => \&_LinkFieldLimit,
CUSTOMFIELD => \&_CustomFieldLimit,
- HASATTRIBUTE => \&_HasAttributeLimit,
);
-my %can_bundle = (); # WATCHERFIELD => "yes", );
+our %can_bundle = ();# WATCHERFIELD => "yes", );
# Default EntryAggregator per type
# if you specify OP, you must specify all valid OPs
@@ -203,11 +195,6 @@ my %DefaultEA = (
'NOT LIKE' => 'AND'
},
- HASATTRIBUTE => {
- '=' => 'AND',
- '!=' => 'AND',
- },
-
CUSTOMFIELD => 'OR',
);
@@ -256,6 +243,7 @@ sub CleanSlate {
_sql_trattachalias
_sql_u_watchers_alias_for_sort
_sql_u_watchers_aliases
+ _sql_current_user_can_see_applied
);
}
@@ -273,6 +261,58 @@ Essentially they are an expanded/broken out (and much simplified)
version of what ProcessRestrictions used to do. They're also much
more clearly delineated by the TYPE of field being processed.
+=head2 _IdLimit
+
+Handle ID field.
+
+=cut
+
+sub _IdLimit {
+ my ( $sb, $field, $op, $value, @rest ) = @_;
+
+ return $sb->_IntLimit( $field, $op, $value, @rest ) unless $value eq '__Bookmarked__';
+
+ die "Invalid operator $op for __Bookmarked__ search on $field"
+ unless $op =~ /^(=|!=)$/;
+
+ my @bookmarks = do {
+ my $tmp = $sb->CurrentUser->UserObj->FirstAttribute('Bookmarks');
+ $tmp = $tmp->Content if $tmp;
+ $tmp ||= {};
+ grep $_, keys %$tmp;
+ };
+
+ return $sb->_SQLLimit(
+ FIELD => $field,
+ OPERATOR => $op,
+ VALUE => 0,
+ @rest,
+ ) unless @bookmarks;
+
+ # as bookmarked tickets can be merged we have to use a join
+ # but it should be pretty lightweight
+ my $tickets_alias = $sb->Join(
+ TYPE => 'LEFT',
+ ALIAS1 => 'main',
+ FIELD1 => 'id',
+ TABLE2 => 'Tickets',
+ FIELD2 => 'EffectiveId',
+ );
+ $sb->_OpenParen;
+ my $first = 1;
+ my $ea = $op eq '='? 'OR': 'AND';
+ foreach my $id ( sort @bookmarks ) {
+ $sb->_SQLLimit(
+ ALIAS => $tickets_alias,
+ FIELD => 'id',
+ OPERATOR => $op,
+ VALUE => $id,
+ $first? (@rest): ( ENTRYAGGREGATOR => $ea )
+ );
+ }
+ $sb->_CloseParen;
+}
+
=head2 _EnumLimit
Handle Fields which are limited to certain values, and potentially
@@ -353,52 +393,52 @@ sub _LinkLimit {
my ( $sb, $field, $op, $value, @rest ) = @_;
my $meta = $FIELD_METADATA{$field};
- die "Incorrect Metadata for $field"
- unless defined $meta->[1] && defined $meta->[2];
-
die "Invalid Operator $op for $field" unless $op =~ /^(=|!=|IS|IS NOT)$/io;
- my $direction = $meta->[1];
+ my $is_negative = 0;
+ if ( $op eq '!=' || $op =~ /\bNOT\b/i ) {
+ $is_negative = 1;
+ }
+ my $is_null = 0;
+ $is_null = 1 if !$value || $value =~ /^null$/io;
- my $matchfield;
- my $linkfield;
+ my $direction = $meta->[1] || '';
+ my ($matchfield, $linkfield) = ('', '');
if ( $direction eq 'To' ) {
- $matchfield = "Target";
- $linkfield = "Base";
-
+ ($matchfield, $linkfield) = ("Target", "Base");
}
elsif ( $direction eq 'From' ) {
- $linkfield = "Target";
- $matchfield = "Base";
-
+ ($matchfield, $linkfield) = ("Base", "Target");
}
- else {
- die "Invalid link direction '$meta->[1]' for $field\n";
+ elsif ( $direction ) {
+ die "Invalid link direction '$direction' for $field\n";
+ } else {
+ $sb->_OpenParen;
+ $sb->_LinkLimit( 'LinkedTo', $op, $value, @rest );
+ $sb->_LinkLimit(
+ 'LinkedFrom', $op, $value, @rest,
+ ENTRYAGGREGATOR => (($is_negative && $is_null) || (!$is_null && !$is_negative))? 'OR': 'AND',
+ );
+ $sb->_CloseParen;
+ return;
}
- my ($is_local, $is_null) = (1, 0);
- if ( !$value || $value =~ /^null$/io ) {
- $is_null = 1;
+ my $is_local = 1;
+ if ( $is_null ) {
$op = ($op =~ /^(=|IS)$/)? 'IS': 'IS NOT';
}
- elsif ( $value =~ /\D/o ) {
+ elsif ( $value =~ /\D/ ) {
$is_local = 0;
}
$matchfield = "Local$matchfield" if $is_local;
- my $is_negative = 0;
- if ( $op eq '!=' ) {
- $is_negative = 1;
- $op = '=';
- }
-
#For doing a left join to find "unlinked tickets" we want to generate a query that looks like this
# SELECT main.* FROM Tickets main
# LEFT JOIN Links Links_1 ON ( (Links_1.Type = 'MemberOf')
# AND(main.id = Links_1.LocalTarget))
# WHERE Links_1.LocalBase IS NULL;
- if ($is_null) {
+ if ( $is_null ) {
my $linkalias = $sb->Join(
TYPE => 'LEFT',
ALIAS1 => 'main',
@@ -411,7 +451,7 @@ sub _LinkLimit {
FIELD => 'Type',
OPERATOR => '=',
VALUE => $meta->[2],
- );
+ ) if $meta->[2];
$sb->_SQLLimit(
@rest,
ALIAS => $linkalias,
@@ -421,7 +461,7 @@ sub _LinkLimit {
QUOTEVALUE => 0,
);
}
- elsif ( $is_negative ) {
+ else {
my $linkalias = $sb->Join(
TYPE => 'LEFT',
ALIAS1 => 'main',
@@ -434,49 +474,22 @@ sub _LinkLimit {
FIELD => 'Type',
OPERATOR => '=',
VALUE => $meta->[2],
- );
+ ) if $meta->[2];
$sb->SUPER::Limit(
LEFTJOIN => $linkalias,
FIELD => $matchfield,
- OPERATOR => $op,
+ OPERATOR => '=',
VALUE => $value,
);
$sb->_SQLLimit(
@rest,
ALIAS => $linkalias,
FIELD => $matchfield,
- OPERATOR => 'IS',
+ OPERATOR => $is_negative? 'IS': 'IS NOT',
VALUE => 'NULL',
QUOTEVALUE => 0,
);
}
- else {
- my $linkalias = $sb->NewAlias('Links');
- $sb->_OpenParen();
- $sb->_SQLLimit(
- @rest,
- ALIAS => $linkalias,
- FIELD => 'Type',
- OPERATOR => '=',
- VALUE => $meta->[2],
- );
- $sb->_SQLLimit(
- ALIAS => $linkalias,
- FIELD => 'Local' . $linkfield,
- OPERATOR => '=',
- VALUE => 'main.id',
- QUOTEVALUE => 0,
- ENTRYAGGREGATOR => 'AND',
- );
- $sb->_SQLLimit(
- ALIAS => $linkalias,
- FIELD => $matchfield,
- OPERATOR => $op,
- VALUE => $value,
- ENTRYAGGREGATOR => 'AND',
- );
- $sb->_CloseParen();
- }
}
=head2 _DateLimit
@@ -523,7 +536,7 @@ sub _DateLimit {
$sb->_SQLLimit(
FIELD => $meta->[1],
- OPERATOR => "<=",
+ OPERATOR => "<",
VALUE => $dayend,
@rest,
ENTRYAGGREGATOR => 'AND',
@@ -557,6 +570,14 @@ sub _StringLimit {
# FIXME:
# Valid Operators:
# =, !=, LIKE, NOT LIKE
+ if ( (!defined $value || !length $value)
+ && lc($op) ne 'is' && lc($op) ne 'is not'
+ && RT->Config->Get('DatabaseType') eq 'Oracle'
+ ) {
+ my $negative = 1 if $op eq '!=' || $op =~ /^NOT\s/;
+ $op = $negative? 'IS NOT': 'IS';
+ $value = 'NULL';
+ }
$sb->_SQLLimit(
FIELD => $field,
@@ -723,7 +744,7 @@ sub _TransLimit {
$self->_OpenParen;
#Search for the right field
- if ($field eq 'Content' and $RT::DontSearchFileAttachments) {
+ if ( $field eq 'Content' and RT->Config->Get('DontSearchFileAttachments') ) {
$self->_SQLLimit(
ALIAS => $self->{_sql_trattachalias},
FIELD => 'Filename',
@@ -751,7 +772,7 @@ sub _TransLimit {
CASESENSITIVE => 0,
ENTRYAGGREGATOR => 'AND',
@rest
- );
+ );
}
$self->_CloseParen;
@@ -766,71 +787,6 @@ Meta Data:
1: Field to query on
-=begin testing
-
-# Test to make sure that you can search for tickets by requestor address and
-# by requestor name.
-
-my ($id,$msg);
-my $u1 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u1->Create( Name => 'RequestorTestOne', EmailAddress => 'rqtest1@example.com');
-ok ($id,$msg);
-my $u2 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u2->Create( Name => 'RequestorTestTwo', EmailAddress => 'rqtest2@example.com');
-ok ($id,$msg);
-
-my $t1 = RT::Ticket->new($RT::SystemUser);
-my ($trans);
-($id,$trans,$msg) =$t1->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u1->EmailAddress]);
-ok ($id, $msg);
-
-my $t2 = RT::Ticket->new($RT::SystemUser);
-($id,$trans,$msg) =$t2->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u2->EmailAddress]);
-ok ($id, $msg);
-
-
-my $t3 = RT::Ticket->new($RT::SystemUser);
-($id,$trans,$msg) =$t3->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u2->EmailAddress, $u1->EmailAddress]);
-ok ($id, $msg);
-
-
-my $tix1 = RT::Tickets->new($RT::SystemUser);
-$tix1->FromSQL('Requestor.EmailAddress LIKE "rqtest1" OR Requestor.EmailAddress LIKE "rqtest2"');
-
-is ($tix1->Count, 3);
-
-my $tix2 = RT::Tickets->new($RT::SystemUser);
-$tix2->FromSQL('Requestor.Name LIKE "TestOne" OR Requestor.Name LIKE "TestTwo"');
-
-is ($tix2->Count, 3);
-
-
-my $tix3 = RT::Tickets->new($RT::SystemUser);
-$tix3->FromSQL('Requestor.EmailAddress LIKE "rqtest1"');
-
-is ($tix3->Count, 2);
-
-my $tix4 = RT::Tickets->new($RT::SystemUser);
-$tix4->FromSQL('Requestor.Name LIKE "TestOne" ');
-
-is ($tix4->Count, 2);
-
-# Searching for tickets that have two requestors isn't supported
-# There's no way to differentiate "one requestor name that matches foo and bar"
-# and "two requestors, one matching foo and one matching bar"
-
-# my $tix5 = RT::Tickets->new($RT::SystemUser);
-# $tix5->FromSQL('Requestor.Name LIKE "TestOne" AND Requestor.Name LIKE "TestTwo"');
-#
-# is ($tix5->Count, 1);
-#
-# my $tix6 = RT::Tickets->new($RT::SystemUser);
-# $tix6->FromSQL('Requestor.EmailAddress LIKE "rqtest1" AND Requestor.EmailAddress LIKE "rqtest2"');
-#
-# is ($tix6->Count, 1);
-
-
-=end testing
=cut
@@ -848,16 +804,28 @@ sub _WatcherLimit {
# Owner was ENUM field, so "Owner = 'xxx'" allowed user to
# search by id and Name at the same time, this is workaround
# to preserve backward compatibility
- if ( $field eq 'Owner' && !$rest{SUBKEY} && $op =~ /^!?=$/ ) {
- my $o = RT::User->new( $self->CurrentUser );
- $o->Load( $value );
- $self->_SQLLimit(
- FIELD => 'Owner',
- OPERATOR => $op,
- VALUE => $o->Id,
- %rest,
- );
- return;
+ if ( $field eq 'Owner' ) {
+ if ( $op =~ /^!?=$/ && (!$rest{'SUBKEY'} || $rest{'SUBKEY'} eq 'Name' || $rest{'SUBKEY'} eq 'EmailAddress') ) {
+ my $o = RT::User->new( $self->CurrentUser );
+ my $method = ($rest{'SUBKEY'}||'') eq 'EmailAddress' ? 'LoadByEmail': 'Load';
+ $o->$method( $value );
+ $self->_SQLLimit(
+ FIELD => 'Owner',
+ OPERATOR => $op,
+ VALUE => $o->id,
+ %rest,
+ );
+ return;
+ }
+ if ( ($rest{'SUBKEY'}||'') eq 'id' ) {
+ $self->_SQLLimit(
+ FIELD => 'Owner',
+ OPERATOR => $op,
+ VALUE => $value,
+ %rest,
+ );
+ return;
+ }
}
$rest{SUBKEY} ||= 'EmailAddress';
@@ -1004,14 +972,6 @@ sub _RoleGroupsJoin {
if $self->{'_sql_role_group_aliases'}{ $args{'Class'} .'-'. $args{'Type'} }
&& !$args{'New'};
- # XXX: this has been fixed in DBIx::SB-1.48
- # XXX: if we change this from Join to NewAlias+Limit
- # then Pg and mysql 5.x will complain because SB build wrong query.
- # Query looks like "FROM (Tickets LEFT JOIN CGM ON(Groups.id = CGM.GroupId)), Groups"
- # Pg doesn't like that fact that it doesn't know about Groups table yet when
- # join CGM table into Tickets. Problem is in Join method which doesn't use
- # ALIAS1 argument when build braces.
-
# we always have watcher groups for ticket, so we use INNER join
my $groups = $self->Join(
ALIAS1 => 'main',
@@ -1230,83 +1190,6 @@ sub _WatcherMembershipLimit {
}
-sub _LinkFieldLimit {
- my $restriction;
- my $self;
- my $LinkAlias;
- my %args;
- if ( $restriction->{'TYPE'} ) {
- $self->SUPER::Limit(
- ALIAS => $LinkAlias,
- ENTRYAGGREGATOR => 'AND',
- FIELD => 'Type',
- OPERATOR => '=',
- VALUE => $restriction->{'TYPE'}
- );
- }
-
- #If we're trying to limit it to things that are target of
- if ( $restriction->{'TARGET'} ) {
-
- # If the TARGET is an integer that means that we want to look at
- # the LocalTarget field. otherwise, we want to look at the
- # "Target" field
- my ($matchfield);
- if ( $restriction->{'TARGET'} =~ /^(\d+)$/ ) {
- $matchfield = "LocalTarget";
- }
- else {
- $matchfield = "Target";
- }
- $self->SUPER::Limit(
- ALIAS => $LinkAlias,
- ENTRYAGGREGATOR => 'AND',
- FIELD => $matchfield,
- OPERATOR => '=',
- VALUE => $restriction->{'TARGET'}
- );
-
- #If we're searching on target, join the base to ticket.id
- $self->_SQLJoin(
- ALIAS1 => 'main',
- FIELD1 => $self->{'primary_key'},
- ALIAS2 => $LinkAlias,
- FIELD2 => 'LocalBase'
- );
- }
-
- #If we're trying to limit it to things that are base of
- elsif ( $restriction->{'BASE'} ) {
-
- # If we're trying to match a numeric link, we want to look at
- # LocalBase, otherwise we want to look at "Base"
- my ($matchfield);
- if ( $restriction->{'BASE'} =~ /^(\d+)$/ ) {
- $matchfield = "LocalBase";
- }
- else {
- $matchfield = "Base";
- }
-
- $self->SUPER::Limit(
- ALIAS => $LinkAlias,
- ENTRYAGGREGATOR => 'AND',
- FIELD => $matchfield,
- OPERATOR => '=',
- VALUE => $restriction->{'BASE'}
- );
-
- #If we're searching on base, join the target to ticket.id
- $self->_SQLJoin(
- ALIAS1 => 'main',
- FIELD1 => $self->{'primary_key'},
- ALIAS2 => $LinkAlias,
- FIELD2 => 'LocalTarget'
- );
- }
-}
-
-
=head2 _CustomFieldDecipher
Try and turn a CF descriptor into (cfid, cfname) object pair.
@@ -1314,44 +1197,47 @@ Try and turn a CF descriptor into (cfid, cfname) object pair.
=cut
sub _CustomFieldDecipher {
- my ($self, $field) = @_;
-
- my $queue = undef;
- if ( $field =~ /^(.+?)\.{(.+)}$/ ) {
- ($queue, $field) = ($1, $2);
- }
- $field = $1 if $field =~ /^{(.+)}$/; # trim { }
+ my ($self, $string) = @_;
+
+ my ($queue, $field, $column) = ($string =~ /^(?:(.+?)\.)?{(.+)}(?:\.(.+))?$/);
+ $field ||= ($string =~ /^{(.*?)}$/)[0] || $string;
- my $cfid;
+ my $cf;
if ( $queue ) {
my $q = RT::Queue->new( $self->CurrentUser );
$q->Load( $queue );
- my $cf;
if ( $q->id ) {
# $queue = $q->Name; # should we normalize the queue?
$cf = $q->CustomField( $field );
}
else {
- $cf = RT::CustomField->new( $self->CurrentUser );
- $cf->LoadByNameAndQueue( Queue => 0, Name => $field );
+ $RT::Logger->warning("Queue '$queue' doesn't exist, parsed from '$string'");
+ $queue = 0;
+ }
+ }
+ elsif ( $field =~ /\D/ ) {
+ $queue = '';
+ my $cfs = RT::CustomFields->new( $self->CurrentUser );
+ $cfs->Limit( FIELD => 'Name', VALUE => $field );
+ $cfs->LimitToLookupType('RT::Queue-RT::Ticket');
+
+ # if there is more then one field the current user can
+ # see with the same name then we shouldn't return cf object
+ # as we don't know which one to use
+ $cf = $cfs->First;
+ if ( $cf ) {
+ $cf = undef if $cfs->Next;
}
- return ($queue, $field, $cf->id, $cf)
- if $cf && $cf->id;
- return ($queue, $field);
+ }
+ else {
+ $cf = RT::CustomField->new( $self->CurrentUser );
+ $cf->Load( $field );
}
- my $cfs = RT::CustomFields->new( $self->CurrentUser );
- $cfs->Limit( FIELD => 'Name', VALUE => $field );
- $cfs->LimitToLookupType('RT::Queue-RT::Ticket');
- my $count = $cfs->Count;
- return (undef, $field, undef) if $count > 1;
- return (undef, $field, 0) if $count == 0;
- my $cf = $cfs->First;
- return (undef, $field, $cf->id, $cf) if $cf && $cf->id;
- return (undef, $field, undef);
+ return ($queue, $field, $cf, $column);
}
-
+
=head2 _CustomFieldJoin
Factor out the Join of custom fields so we can use it for sorting too
@@ -1461,109 +1347,186 @@ Meta Data:
=cut
sub _CustomFieldLimit {
- my ( $self, $_field, $op, $value, @rest ) = @_;
+ my ( $self, $_field, $op, $value, %rest ) = @_;
- my %rest = @rest;
- my $field = $rest{SUBKEY} || die "No field specified";
+ my $field = $rest{'SUBKEY'} || die "No field specified";
# For our sanity, we can only limit on one queue at a time
- my ($queue, $cfid);
- ($queue, $field, $cfid ) = $self->_CustomFieldDecipher( $field );
+ my ($queue, $cfid, $cf, $column);
+ ($queue, $field, $cf, $column) = $self->_CustomFieldDecipher( $field );
+ $cfid = $cf ? $cf->id : 0 ;
# If we're trying to find custom fields that don't match something, we
# want tickets where the custom field has no value at all. Note that
# we explicitly don't include the "IS NULL" case, since we would
# otherwise end up with a redundant clause.
- my $null_columns_ok;
- if ( ( $op =~ /^NOT LIKE$/i ) or ( $op eq '!=' ) ) {
- $null_columns_ok = 1;
- }
+ my ($negative_op, $null_op, $inv_op, $range_op) = $self->ClassifySQLOperation( $op );
- my $cfkey = $cfid ? $cfid : "$queue.$field";
- my ($TicketCFs, $CFs) = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
+ my $fix_op = sub {
+ my $op = shift;
+ return $op unless RT->Config->Get('DatabaseType') eq 'Oracle';
+ return 'MATCHES' if $op eq '=';
+ return 'NOT MATCHES' if $op eq '!=';
+ return $op;
+ };
- $self->_OpenParen;
-
- $self->_OpenParen;
- $self->_SQLLimit(
- ALIAS => $TicketCFs,
- FIELD => 'Content',
- OPERATOR => $op,
- VALUE => $value,
- @rest
- );
+ my $single_value = !$cf || !$cfid || $cf->SingleValue;
- # XXX: if we join via CustomFields table then
- # because of order of left joins we get NULLs in
- # CF table and then get nulls for those records
- # in OCFVs table what result in wrong results
- # as decifer method now tries to load a CF then
- # we fall into this situation only when there
- # are more than one CF with the name in the DB.
- # the same thing applies to order by call.
- # TODO: reorder joins T <- OCFVs <- CFs <- OCFs if
- # we want treat IS NULL as (not applies or has
- # no value)
- $self->_SQLLimit(
- ALIAS => $CFs,
- FIELD => 'Name',
- OPERATOR => 'IS NOT',
- VALUE => 'NULL',
- QUOTEVALUE => 0,
- ENTRYAGGREGATOR => 'AND',
- ) if $CFs;
- $self->_CloseParen;
+ my $cfkey = $cfid ? $cfid : "$queue.$field";
- if ($null_columns_ok) {
+ if ( $null_op && !$column ) {
+ # IS[ NOT] NULL without column is the same as has[ no] any CF value,
+ # we can reuse our default joins for this operation
+ # with column specified we have different situation
+ my ($TicketCFs, $CFs) = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
+ $self->_OpenParen;
$self->_SQLLimit(
- ALIAS => $TicketCFs,
- FIELD => 'Content',
- OPERATOR => 'IS',
- VALUE => 'NULL',
- QUOTEVALUE => 0,
- ENTRYAGGREGATOR => 'OR',
+ ALIAS => $TicketCFs,
+ FIELD => 'id',
+ OPERATOR => $op,
+ VALUE => $value,
+ %rest
);
+ $self->_SQLLimit(
+ ALIAS => $CFs,
+ FIELD => 'Name',
+ OPERATOR => 'IS NOT',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+ ) if $CFs;
+ $self->_CloseParen;
}
+ elsif ( !$negative_op || $single_value ) {
+ $cfkey .= '.'. $self->{'_sql_multiple_cfs_index'}++ if !$single_value && !$range_op;
+ my ($TicketCFs, $CFs) = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
- $self->_CloseParen;
+ $self->_OpenParen;
-}
+ $self->_OpenParen;
-sub _HasAttributeLimit {
- my ( $self, $field, $op, $value, %rest ) = @_;
+ $self->_OpenParen;
+ # if column is defined then deal only with it
+ # otherwise search in Content and in LargeContent
+ if ( $column ) {
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => $column,
+ OPERATOR => ($column ne 'LargeContent'? $op : $fix_op->($op)),
+ VALUE => $value,
+ %rest
+ );
+ }
+ else {
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => 'Content',
+ OPERATOR => $op,
+ VALUE => $value,
+ %rest
+ );
- my $alias = $self->Join(
- TYPE => 'LEFT',
- ALIAS1 => 'main',
- FIELD1 => 'id',
- TABLE2 => 'Attributes',
- FIELD2 => 'ObjectId',
- );
- $self->SUPER::Limit(
- LEFTJOIN => $alias,
- FIELD => 'ObjectType',
- VALUE => 'RT::Ticket',
- ENTRYAGGREGATOR => 'AND'
- );
- $self->SUPER::Limit(
- LEFTJOIN => $alias,
- FIELD => 'Name',
- OPERATOR => $op,
- VALUE => $value,
- ENTRYAGGREGATOR => 'AND'
- );
- $self->_SQLLimit(
- %rest,
- ALIAS => $alias,
- FIELD => 'id',
- OPERATOR => $FIELD_METADATA{$field}->[1]? 'IS NOT': 'IS',
- VALUE => 'NULL',
- QUOTEVALUE => 0,
- );
-}
+ $self->_OpenParen;
+ $self->_OpenParen;
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => 'Content',
+ OPERATOR => '=',
+ VALUE => '',
+ ENTRYAGGREGATOR => 'OR'
+ );
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => 'Content',
+ OPERATOR => 'IS',
+ VALUE => 'NULL',
+ ENTRYAGGREGATOR => 'OR'
+ );
+ $self->_CloseParen;
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => 'LargeContent',
+ OPERATOR => $fix_op->($op),
+ VALUE => $value,
+ ENTRYAGGREGATOR => 'AND',
+ );
+ $self->_CloseParen;
+ }
+ $self->_CloseParen;
+
+ # XXX: if we join via CustomFields table then
+ # because of order of left joins we get NULLs in
+ # CF table and then get nulls for those records
+ # in OCFVs table what result in wrong results
+ # as decifer method now tries to load a CF then
+ # we fall into this situation only when there
+ # are more than one CF with the name in the DB.
+ # the same thing applies to order by call.
+ # TODO: reorder joins T <- OCFVs <- CFs <- OCFs if
+ # we want treat IS NULL as (not applies or has
+ # no value)
+ $self->_SQLLimit(
+ ALIAS => $CFs,
+ FIELD => 'Name',
+ OPERATOR => 'IS NOT',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+ ) if $CFs;
+ $self->_CloseParen;
+
+ if ($negative_op) {
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => $column || 'Content',
+ OPERATOR => 'IS',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'OR',
+ );
+ }
+ $self->_CloseParen;
+ }
+ else {
+ $cfkey .= '.'. $self->{'_sql_multiple_cfs_index'}++;
+ my ($TicketCFs, $CFs) = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
+
+ # reverse operation
+ $op =~ s/!|NOT\s+//i;
+
+ # if column is defined then deal only with it
+ # otherwise search in Content and in LargeContent
+ if ( $column ) {
+ $self->SUPER::Limit(
+ LEFTJOIN => $TicketCFs,
+ ALIAS => $TicketCFs,
+ FIELD => $column,
+ OPERATOR => ($column ne 'LargeContent'? $op : $fix_op->($op)),
+ VALUE => $value,
+ );
+ }
+ else {
+ $self->SUPER::Limit(
+ LEFTJOIN => $TicketCFs,
+ ALIAS => $TicketCFs,
+ FIELD => 'Content',
+ OPERATOR => $op,
+ VALUE => $value,
+ );
+ }
+ $self->_SQLLimit(
+ %rest,
+ ALIAS => $TicketCFs,
+ FIELD => 'id',
+ OPERATOR => 'IS',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ );
+ }
+}
# End Helper Functions
@@ -1625,7 +1588,7 @@ sub OrderByCols {
my ( $field, $subkey ) = split /\./, $row->{FIELD}, 2;
my $meta = $self->FIELDS->{$field};
- if ( $meta->[0] eq 'WATCHERFIELD' ) {
+ if ( defined $meta->[0] && $meta->[0] eq 'WATCHERFIELD' ) {
# cache alias as we want to use one alias per watcher type for sorting
my $users = $self->{_sql_u_watchers_alias_for_sort}{ $meta->[1] };
unless ( $users ) {
@@ -1633,11 +1596,11 @@ sub OrderByCols {
= $users = ( $self->_WatcherJoin( $meta->[1] ) )[2];
}
push @res, { %$row, ALIAS => $users, FIELD => $subkey };
- } elsif ( $meta->[0] eq 'CUSTOMFIELD' ) {
- my ($queue, $field, $cfid, $cf_obj) = $self->_CustomFieldDecipher( $subkey );
- my $cfkey = $cfid ? $cfid : "$queue.$field";
+ } elsif ( defined $meta->[0] && $meta->[0] eq 'CUSTOMFIELD' ) {
+ my ($queue, $field, $cf_obj, $column) = $self->_CustomFieldDecipher( $subkey );
+ my $cfkey = $cf_obj ? $cf_obj->id : "$queue.$field";
$cfkey .= ".ordering" if !$cf_obj || ($cf_obj->MaxValues||0) != 1;
- my ($TicketCFs, $CFs) = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
+ my ($TicketCFs, $CFs) = $self->_CustomFieldJoin( $cfkey, ($cf_obj ?$cf_obj->id :0) , $field );
# this is described in _CustomFieldLimit
$self->_SQLLimit(
ALIAS => $CFs,
@@ -1647,7 +1610,7 @@ sub OrderByCols {
QUOTEVALUE => 1,
ENTRYAGGREGATOR => 'AND',
) if $CFs;
- unless ($cfid) {
+ unless ($cf_obj) {
# For those cases where we are doing a join against the
# CF name, and don't have a CFid, use Unique to make sure
# we don't show duplicate tickets. NOTE: I'm pretty sure
@@ -1683,16 +1646,18 @@ sub OrderByCols {
$order = "DESC" if $o =~ /asc/i;
}
- # Unowned
- # Else
-
- # Ticket.Owner 1 0 0
- my $ownerId = $self->CurrentUser->Id;
- push @res, { %$row, FIELD => "Owner=$ownerId", ORDER => $order } ;
-
- # Unowned Tickets 0 1 0
- my $nobodyId = $RT::Nobody->Id;
- push @res, { %$row, FIELD => "Owner=$nobodyId", ORDER => $order } ;
+ # Ticket.Owner 1 0 X
+ # Unowned Tickets 0 1 X
+ # Else 0 0 X
+
+ foreach my $uid ( $self->CurrentUser->Id, $RT::Nobody->Id ) {
+ if ( RT->Config->Get('DatabaseType') eq 'Oracle' ) {
+ my $f = ($row->{'ALIAS'} || 'main') .'.Owner';
+ push @res, { %$row, ALIAS => '', FIELD => "CASE WHEN $f=$uid THEN 1 ELSE 0 END", ORDER => $order } ;
+ } else {
+ push @res, { %$row, FIELD => "Owner=$uid", ORDER => $order } ;
+ }
+ }
push @res, { %$row, FIELD => "Priority", ORDER => $order } ;
}
@@ -2257,12 +2222,6 @@ sub LimitOwner {
VALUE is a value to match the ticket\'s watcher email addresses against
TYPE is the sort of watchers you want to match against. Leave it undef if you want to search all of them
-=begin testing
-
-my $t1 = RT::Ticket->new($RT::SystemUser);
-$t1->Create(Queue => 'general', Subject => "LimitWatchers test", Requestors => \['requestor1@example.com']);
-
-=end testing
=cut
@@ -2295,16 +2254,6 @@ sub LimitWatcher {
);
}
-sub LimitRequestor {
- my $self = shift;
- my %args = (@_);
- $RT::Logger->error( "Tickets->LimitRequestor is deprecated at ("
- . join( ":", caller )
- . ")" );
- $self->LimitWatcher( TYPE => 'Requestor', @_ );
-
-}
-
# }}}
# }}}
@@ -2323,14 +2272,12 @@ TYPE limits the sort of link we want to search on
TYPE = { RefersTo, MemberOf, DependsOn }
TARGET is the id or URI of the TARGET of the link
-(TARGET used to be 'TICKET'. 'TICKET' is deprecated, but will be treated as TARGET
=cut
sub LimitLinkedTo {
my $self = shift;
my %args = (
- TICKET => undef,
TARGET => undef,
TYPE => undef,
OPERATOR => '=',
@@ -2340,12 +2287,12 @@ sub LimitLinkedTo {
$self->Limit(
FIELD => 'LinkedTo',
BASE => undef,
- TARGET => ( $args{'TARGET'} || $args{'TICKET'} ),
+ TARGET => $args{'TARGET'},
TYPE => $args{'TYPE'},
DESCRIPTION => $self->loc(
"Tickets [_1] by [_2]",
$self->loc( $args{'TYPE'} ),
- ( $args{'TARGET'} || $args{'TICKET'} )
+ $args{'TARGET'}
),
OPERATOR => $args{'OPERATOR'},
);
@@ -2362,8 +2309,6 @@ TYPE limits the sort of link we want to search on
BASE is the id or URI of the BASE of the link
-(BASE used to be 'TICKET'. 'TICKET' is deprecated, but will be treated as BASE
-
=cut
@@ -2371,7 +2316,6 @@ sub LimitLinkedFrom {
my $self = shift;
my %args = (
BASE => undef,
- TICKET => undef,
TYPE => undef,
OPERATOR => '=',
@_
@@ -2388,12 +2332,12 @@ sub LimitLinkedFrom {
$self->Limit(
FIELD => 'LinkedTo',
TARGET => undef,
- BASE => ( $args{'BASE'} || $args{'TICKET'} ),
+ BASE => $args{'BASE'},
TYPE => $type,
DESCRIPTION => $self->loc(
"Tickets [_1] [_2]",
$self->loc( $args{'TYPE'} ),
- ( $args{'BASE'} || $args{'TICKET'} )
+ $args{'BASE'},
),
OPERATOR => $args{'OPERATOR'},
);
@@ -2666,12 +2610,12 @@ sub LimitCustomField {
$CF->Name, $args{OPERATOR}, $args{VALUE} );
}
- my $q = "";
- if ( $CF->Queue ) {
- my $qo = new RT::Queue( $self->CurrentUser );
- $qo->Load( $CF->Queue );
- $q = $qo->Name;
+ if ( defined $args{'QUEUE'} && $args{'QUEUE'} =~ /\D/ ) {
+ my $QueueObj = RT::Queue->new( $self->CurrentUser );
+ $QueueObj->Load( $args{'QUEUE'} );
+ $args{'QUEUE'} = $QueueObj->Id;
}
+ delete $args{'QUEUE'} unless defined $args{'QUEUE'} && length $args{'QUEUE'};
my @rest;
@rest = ( ENTRYAGGREGATOR => 'AND' )
@@ -2679,12 +2623,9 @@ sub LimitCustomField {
$self->Limit(
VALUE => $args{VALUE},
- FIELD => "CF."
- . (
- $q
- ? $q . ".{" . $CF->Name . "}"
- : $CF->Name
- ),
+ FIELD => "CF"
+ .(defined $args{'QUEUE'}? ".{$args{'QUEUE'}}" : '' )
+ .".{" . $CF->Name . "}",
OPERATOR => $args{OPERATOR},
CUSTOMFIELD => 1,
@rest,
@@ -2763,7 +2704,6 @@ Returns a reference to the set of all items found in this search
sub ItemsArrayRef {
my $self = shift;
- my @items;
unless ( $self->{'items_array'} ) {
@@ -2787,35 +2727,269 @@ sub Next {
$self->_ProcessRestrictions() if ( $self->{'RecalcTicketLimits'} == 1 );
- my $Ticket = $self->SUPER::Next();
- if ( ( defined($Ticket) ) and ( ref($Ticket) ) ) {
+ my $Ticket = $self->SUPER::Next;
+ return $Ticket unless $Ticket;
- if ( $Ticket->__Value('Status') eq 'deleted'
- && !$self->{'allow_deleted_search'} )
- {
- return ( $self->Next() );
- }
+ if ( $Ticket->__Value('Status') eq 'deleted'
+ && !$self->{'allow_deleted_search'} )
+ {
+ return $self->Next;
+ }
+ elsif ( RT->Config->Get('UseSQLForACLChecks') ) {
+ # if we found a ticket with this option enabled then
+ # all tickets we found are ACLed, cache this fact
+ my $key = join ";:;", $self->CurrentUser->id, 'ShowTicket', 'RT::Ticket-'. $Ticket->id;
+ $RT::Principal::_ACL_CACHE->set( $key => 1 );
+ return $Ticket;
+ }
+ elsif ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
+ # has rights
+ return $Ticket;
+ }
+ else {
+ # If the user doesn't have the right to show this ticket
+ return $self->Next;
+ }
+}
+
+sub _DoSearch {
+ my $self = shift;
+ $self->CurrentUserCanSee if RT->Config->Get('UseSQLForACLChecks');
+ return $self->SUPER::_DoSearch( @_ );
+}
- # Since Ticket could be granted with more rights instead
- # of being revoked, it's ok if queue rights allow
- # ShowTicket. It seems need another query, but we have
- # rights cache in Principal::HasRight.
- elsif ( $Ticket->CurrentUserHasRight('ShowTicket') )
- {
- return ($Ticket);
+sub _DoCount {
+ my $self = shift;
+ $self->CurrentUserCanSee if RT->Config->Get('UseSQLForACLChecks');
+ return $self->SUPER::_DoCount( @_ );
+}
+
+sub _RolesCanSee {
+ my $self = shift;
+
+ my $cache_key = 'RolesHasRight;:;ShowTicket';
+
+ if ( my $cached = $RT::Principal::_ACL_CACHE->fetch( $cache_key ) ) {
+ return %$cached;
+ }
+
+ my $ACL = RT::ACL->new( $RT::SystemUser );
+ $ACL->Limit( FIELD => 'RightName', VALUE => 'ShowTicket' );
+ $ACL->Limit( FIELD => 'PrincipalType', OPERATOR => '!=', VALUE => 'Group' );
+ my $principal_alias = $ACL->Join(
+ ALIAS1 => 'main',
+ FIELD1 => 'PrincipalId',
+ TABLE2 => 'Principals',
+ FIELD2 => 'id',
+ );
+ $ACL->Limit( ALIAS => $principal_alias, FIELD => 'Disabled', VALUE => 0 );
+
+ my %res = ();
+ while ( my $ACE = $ACL->Next ) {
+ my $role = $ACE->PrincipalType;
+ my $type = $ACE->ObjectType;
+ if ( $type eq 'RT::System' ) {
+ $res{ $role } = 1;
+ }
+ elsif ( $type eq 'RT::Queue' ) {
+ next if $res{ $role } && !ref $res{ $role };
+ push @{ $res{ $role } ||= [] }, $ACE->ObjectId;
}
+ else {
+ $RT::Logger->error('ShowTicket right is granted on unsupported object');
+ }
+ }
+ $RT::Principal::_ACL_CACHE->set( $cache_key => \%res );
+ return %res;
+}
+
+sub _DirectlyCanSeeIn {
+ my $self = shift;
+ my $id = $self->CurrentUser->id;
- #If the user doesn't have the right to show this ticket
+ my $cache_key = 'User-'. $id .';:;ShowTicket;:;DirectlyCanSeeIn';
+ if ( my $cached = $RT::Principal::_ACL_CACHE->fetch( $cache_key ) ) {
+ return @$cached;
+ }
+
+ my $ACL = RT::ACL->new( $RT::SystemUser );
+ $ACL->Limit( FIELD => 'RightName', VALUE => 'ShowTicket' );
+ my $principal_alias = $ACL->Join(
+ ALIAS1 => 'main',
+ FIELD1 => 'PrincipalId',
+ TABLE2 => 'Principals',
+ FIELD2 => 'id',
+ );
+ $ACL->Limit( ALIAS => $principal_alias, FIELD => 'Disabled', VALUE => 0 );
+ my $cgm_alias = $ACL->Join(
+ ALIAS1 => 'main',
+ FIELD1 => 'PrincipalId',
+ TABLE2 => 'CachedGroupMembers',
+ FIELD2 => 'GroupId',
+ );
+ $ACL->Limit( ALIAS => $cgm_alias, FIELD => 'MemberId', VALUE => $id );
+ $ACL->Limit( ALIAS => $cgm_alias, FIELD => 'Disabled', VALUE => 0 );
+
+ my @res = ();
+ while ( my $ACE = $ACL->Next ) {
+ my $type = $ACE->ObjectType;
+ if ( $type eq 'RT::System' ) {
+ # If user is direct member of a group that has the right
+ # on the system then he can see any ticket
+ $RT::Principal::_ACL_CACHE->set( $cache_key => [-1] );
+ return (-1);
+ }
+ elsif ( $type eq 'RT::Queue' ) {
+ push @res, $ACE->ObjectId;
+ }
else {
- return ( $self->Next() );
+ $RT::Logger->error('ShowTicket right is granted on unsupported object');
}
}
+ $RT::Principal::_ACL_CACHE->set( $cache_key => \@res );
+ return @res;
+}
- #if there never was any ticket
- else {
- return (undef);
+sub CurrentUserCanSee {
+ my $self = shift;
+ return if $self->{'_sql_current_user_can_see_applied'};
+
+ return $self->{'_sql_current_user_can_see_applied'} = 1
+ if $self->CurrentUser->UserObj->HasRight(
+ Right => 'SuperUser', Object => $RT::System
+ );
+
+ my $id = $self->CurrentUser->id;
+
+ # directly can see in all queues then we have nothing to do
+ my @direct_queues = $self->_DirectlyCanSeeIn;
+ return $self->{'_sql_current_user_can_see_applied'} = 1
+ if @direct_queues && $direct_queues[0] == -1;
+
+ my %roles = $self->_RolesCanSee;
+ {
+ my %skip = map { $_ => 1 } @direct_queues;
+ foreach my $role ( keys %roles ) {
+ next unless ref $roles{ $role };
+
+ my @queues = grep !$skip{$_}, @{ $roles{ $role } };
+ if ( @queues ) {
+ $roles{ $role } = \@queues;
+ } else {
+ delete $roles{ $role };
+ }
+ }
+ }
+
+# there is no global watchers, only queues and tickes, if at
+# some point we will add global roles then it's gonna blow
+# the idea here is that if the right is set globaly for a role
+# and user plays this role for a queue directly not a ticket
+# then we have to check in advance
+ if ( my @tmp = grep $_ ne 'Owner' && !ref $roles{ $_ }, keys %roles ) {
+
+ my $groups = RT::Groups->new( $RT::SystemUser );
+ $groups->Limit( FIELD => 'Domain', VALUE => 'RT::Queue-Role' );
+ foreach ( @tmp ) {
+ $groups->Limit( FIELD => 'Type', VALUE => $_ );
+ }
+ my $principal_alias = $groups->Join(
+ ALIAS1 => 'main',
+ FIELD1 => 'id',
+ TABLE2 => 'Principals',
+ FIELD2 => 'id',
+ );
+ $groups->Limit( ALIAS => $principal_alias, FIELD => 'Disabled', VALUE => 0 );
+ my $cgm_alias = $groups->Join(
+ ALIAS1 => 'main',
+ FIELD1 => 'id',
+ TABLE2 => 'CachedGroupMembers',
+ FIELD2 => 'GroupId',
+ );
+ $groups->Limit( ALIAS => $cgm_alias, FIELD => 'MemberId', VALUE => $id );
+ $groups->Limit( ALIAS => $cgm_alias, FIELD => 'Disabled', VALUE => 0 );
+ while ( my $group = $groups->Next ) {
+ push @direct_queues, $group->Instance;
+ }
}
+ {
+ my $join_roles = keys %roles;
+ $join_roles = 0 if $join_roles == 1 && $roles{'Owner'};
+ my ($role_group_alias, $cgm_alias);
+ if ( $join_roles ) {
+ $role_group_alias = $self->_RoleGroupsJoin( New => 1 );
+ $cgm_alias = $self->_GroupMembersJoin( GroupsAlias => $role_group_alias );
+ $self->SUPER::Limit(
+ LEFTJOIN => $cgm_alias,
+ FIELD => 'MemberId',
+ OPERATOR => '=',
+ VALUE => $id,
+ );
+ }
+ my $limit_queues = sub {
+ my $ea = shift;
+ my @queues = @_;
+
+ return unless @queues;
+ if ( @queues == 1 ) {
+ $self->_SQLLimit(
+ ALIAS => 'main',
+ FIELD => 'Queue',
+ VALUE => $_[0],
+ ENTRYAGGREGATOR => $ea,
+ );
+ } else {
+ $self->_OpenParen;
+ foreach my $q ( @queues ) {
+ $self->_SQLLimit(
+ ALIAS => 'main',
+ FIELD => 'Queue',
+ VALUE => $q,
+ ENTRYAGGREGATOR => $ea,
+ );
+ $ea = 'OR';
+ }
+ $self->_CloseParen;
+ }
+ return 1;
+ };
+
+ $self->_OpenParen;
+ my $ea = 'AND';
+ $ea = 'OR' if $limit_queues->( $ea, @direct_queues );
+ while ( my ($role, $queues) = each %roles ) {
+ $self->_OpenParen;
+ if ( $role eq 'Owner' ) {
+ $self->_SQLLimit(
+ FIELD => 'Owner',
+ VALUE => $id,
+ ENTRYAGGREGATOR => $ea,
+ );
+ }
+ else {
+ $self->_SQLLimit(
+ ALIAS => $cgm_alias,
+ FIELD => 'MemberId',
+ OPERATOR => 'IS NOT',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => $ea,
+ );
+ $self->_SQLLimit(
+ ALIAS => $role_group_alias,
+ FIELD => 'Type',
+ VALUE => $role,
+ ENTRYAGGREGATOR => 'AND',
+ );
+ }
+ $limit_queues->( 'AND', @$queues ) if ref $queues;
+ $ea = 'OR' if $ea eq 'AND';
+ $self->_CloseParen;
+ }
+ $self->_CloseParen;
+ }
+ return $self->{'_sql_current_user_can_see_applied'} = 1;
}
# }}}
@@ -2931,9 +3105,6 @@ sub _RestrictionsToClauses {
foreach $row ( keys %{ $self->{'TicketRestrictions'} } ) {
my $restriction = $self->{'TicketRestrictions'}{$row};
- #use Data::Dumper;
- #print Dumper($restriction),"\n";
-
# We need to reimplement the subclause aggregation that SearchBuilder does.
# Default Subclause is ALIAS.FIELD, and default ALIAS is 'main',
# Then SB AND's the different Subclauses together.
@@ -3010,7 +3181,6 @@ sub _RestrictionsToClauses {
# here is where we store extra data, say if it's a keyword or
# something. (I.e. "TYPE SPECIFIC STUFF")
- #print Dumper($data);
push @{ $clause{$realfield} }, $data;
}
return \%clause;
@@ -3103,13 +3273,6 @@ sub ItemMap {
return ( $self->{'item_map'} );
}
-=cut
-
-
-
-}
-
-
# }}}
@@ -3142,14 +3305,6 @@ $tickets->{'flagname'} = 1;
BUG: There should be an API for this
-=begin testing
-
-# We assume that we've got some tickets hanging around from before.
-ok( my $unlimittickets = RT::Tickets->new( $RT::SystemUser ) );
-ok( $unlimittickets->UnLimit );
-ok( $unlimittickets->Count > 0, "UnLimited tickets object should return tickets" );
-
-=end testing
=cut
diff --git a/rt/lib/RT/Tickets_Overlay_SQL.pm b/rt/lib/RT/Tickets_Overlay_SQL.pm
index 1112430..487bb48 100644
--- a/rt/lib/RT/Tickets_Overlay_SQL.pm
+++ b/rt/lib/RT/Tickets_Overlay_SQL.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,17 +45,18 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::Tickets;
use strict;
use warnings;
+use RT::SQL;
+
# Import configuration data from the lexcial scope of __PACKAGE__ (or
# at least where those two Subroutines are defined.)
-my %FIELD_METADATA = %{FIELDS()};
-my %dispatch = %{dispatch()};
-my %can_bundle = %{can_bundle()};
+our (%FIELD_METADATA, %dispatch, %can_bundle);
# Lower Case version of FIELDS, for case insensitivity
my %lcfields = map { ( lc($_) => $_ ) } (keys %FIELD_METADATA);
@@ -63,25 +64,14 @@ my %lcfields = map { ( lc($_) => $_ ) } (keys %FIELD_METADATA);
sub _InitSQL {
my $self = shift;
- # How many of these do we actually still use?
-
- # Private Member Variales (which should get cleaned)
- $self->{'_sql_linksc'} = 0;
- $self->{'_sql_watchersc'} = 0;
- $self->{'_sql_keywordsc'} = 0;
- $self->{'_sql_subclause'} = "a";
- $self->{'_sql_first'} = 0;
- $self->{'_sql_opstack'} = [''];
- $self->{'_sql_linkalias'} = undef;
+ # Private Member Variables (which should get cleaned)
$self->{'_sql_transalias'} = undef;
$self->{'_sql_trattachalias'} = undef;
- $self->{'_sql_object_cf_alias'} = undef;
- $self->{'_sql_depth'} = 0;
- $self->{'_sql_localdepth'} = 0;
+ $self->{'_sql_cf_alias'} = undef;
+ $self->{'_sql_object_cfv_alias'} = undef;
+ $self->{'_sql_watcher_join_users_alias'} = undef;
$self->{'_sql_query'} = '';
$self->{'_sql_looking_at'} = {};
- $self->{'_sql_columns_to_display'} = [];
-
}
sub _SQLLimit {
@@ -147,229 +137,109 @@ just handed off the SearchBuilder)
=cut
-use Regexp::Common qw /delimited/;
-
-# States
-use constant VALUE => 1;
-use constant AGGREG => 2;
-use constant OP => 4;
-use constant OPEN_PAREN => 8;
-use constant CLOSE_PAREN => 16;
-use constant KEYWORD => 32;
-my @tokens = qw[VALUE AGGREG OP OPEN_PAREN CLOSE_PAREN KEYWORD];
-
-my $re_aggreg = qr[(?i:AND|OR)];
-my $re_delim = qr[$RE{delimited}{-delim=>qq{\'\"}}];
-my $re_value = qr[$re_delim|\d+|NULL];
-my $re_keyword = qr[$re_delim|(?:\{|\}|\w|\.)+];
-my $re_op = qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)]; # long to short
-my $re_open_paren = qr'\(';
-my $re_close_paren = qr'\)';
-
-sub _close_bundle
-{
- my ($self, @bundle) = @_;
- return unless @bundle;
- if (@bundle == 1) {
- $bundle[0]->{dispatch}->(
- $self,
- $bundle[0]->{key},
- $bundle[0]->{op},
- $bundle[0]->{val},
- SUBCLAUSE => "",
- ENTRYAGGREGATOR => $bundle[0]->{ea},
- SUBKEY => $bundle[0]->{subkey},
- );
- } else {
- my @args;
- for my $chunk (@bundle) {
- push @args, [
- $chunk->{key},
- $chunk->{op},
- $chunk->{val},
- SUBCLAUSE => "",
- ENTRYAGGREGATOR => $chunk->{ea},
- SUBKEY => $chunk->{subkey},
- ];
+sub _close_bundle {
+ my ($self, @bundle) = @_;
+ return unless @bundle;
+
+ if ( @bundle == 1 ) {
+ $bundle[0]->{'dispatch'}->(
+ $self,
+ $bundle[0]->{'key'},
+ $bundle[0]->{'op'},
+ $bundle[0]->{'val'},
+ SUBCLAUSE => '',
+ ENTRYAGGREGATOR => $bundle[0]->{ea},
+ SUBKEY => $bundle[0]->{subkey},
+ );
+ }
+ else {
+ my @args;
+ foreach my $chunk (@bundle) {
+ push @args, [
+ $chunk->{key},
+ $chunk->{op},
+ $chunk->{val},
+ SUBCLAUSE => '',
+ ENTRYAGGREGATOR => $chunk->{ea},
+ SUBKEY => $chunk->{subkey},
+ ];
+ }
+ $bundle[0]->{dispatch}->( $self, \@args );
}
- $bundle[0]->{dispatch}->(
- $self, \@args,
- );
- }
}
sub _parser {
- my ($self,$string) = @_;
- my $want = KEYWORD | OPEN_PAREN;
- my $last = undef;
-
- my $depth = 0;
- my @bundle;
-
- my ($ea,$key,$op,$value) = ("","","","");
-
- # order of matches in the RE is important.. op should come early,
- # because it has spaces in it. otherwise "NOT LIKE" might be parsed
- # as a keyword or value.
-
-
-
-
-
- while ($string =~ /(
- $re_aggreg
- |$re_op
- |$re_keyword
- |$re_value
- |$re_open_paren
- |$re_close_paren
- )/iogx ) {
- my $val = $1;
- my $current = 0;
-
- # Highest priority is last
- $current = OP if ($want & OP) && $val =~ /^$re_op$/io;
- $current = VALUE if ($want & VALUE) && $val =~ /^$re_value$/io;
- $current = KEYWORD if ($want & KEYWORD) && $val =~ /^$re_keyword$/io;
- $current = AGGREG if ($want & AGGREG) && $val =~ /^$re_aggreg$/io;
- $current = OPEN_PAREN if ($want & OPEN_PAREN) && $val =~ /^$re_open_paren$/io;
- $current = CLOSE_PAREN if ($want & CLOSE_PAREN) && $val =~ /^$re_close_paren$/io;
-
-
- unless ($current && $want & $current) {
- # Error
- # FIXME: I will only print out the highest $want value
- die "Error near ->$val<- expecting a ", $tokens[((log $want)/(log 2))], " in $string\n";
- }
-
- # State Machine:
-
- #$RT::Logger->debug("We've just found a '$current' called '$val'");
-
- # Parens are highest priority
- if ($current & OPEN_PAREN) {
- $self->_close_bundle(@bundle); @bundle = ();
- $depth++;
- $self->_OpenParen;
-
- $want = KEYWORD | OPEN_PAREN;
- }
- elsif ( $current & CLOSE_PAREN ) {
- $self->_close_bundle(@bundle); @bundle = ();
- $depth--;
+ my ($self,$string) = @_;
+ my @bundle;
+ my $ea = '';
+
+ my %callback;
+ $callback{'OpenParen'} = sub {
+ $self->_close_bundle(@bundle); @bundle = ();
+ $self->_OpenParen
+ };
+ $callback{'CloseParen'} = sub {
+ $self->_close_bundle(@bundle); @bundle = ();
$self->_CloseParen;
-
- $want = CLOSE_PAREN | AGGREG;
- }
- elsif ( $current & AGGREG ) {
- $ea = $val;
- $want = KEYWORD | OPEN_PAREN;
- }
- elsif ( $current & KEYWORD ) {
- $key = $val;
- $want = OP;
- }
- elsif ( $current & OP ) {
- $op = $val;
- $want = VALUE;
- }
- elsif ( $current & VALUE ) {
- $value = $val;
-
- # Remove surrounding quotes from $key, $val
- # (in future, simplify as for($key,$val) { action on $_ })
- if ($key =~ /$re_delim/o) {
- substr($key,0,1) = "";
- substr($key,-1,1) = "";
- }
- if ($val =~ /$re_delim/o) {
- substr($val,0,1) = "";
- substr($val,-1,1) = "";
- }
- # Unescape escaped characters
- $key =~ s!\\(.)!$1!g;
- $val =~ s!\\(.)!$1!g;
- # print "$ea Key=[$key] op=[$op] val=[$val]\n";
-
- # replace __CurrentUser__ with id
- $val = $self->CurrentUser->id if $val eq '__CurrentUser__';
-
-
- my $subkey = '';
- if ($key =~ /^(.+?)\.(.+)$/) {
- $key = $1;
- $subkey = $2;
- }
-
- my $class;
- if (exists $lcfields{lc $key}) {
- $key = $lcfields{lc $key};
- $class = $FIELD_METADATA{$key}->[0];
- }
- # no longer have a default, since CF's are now a real class, not fallthrough
- # fixme: "default class" is not Generic.
-
-
- die "Unknown field: $key" unless $class;
-
- $self->{_sql_localdepth} = 0;
- die "No such dispatch method: $class"
- unless exists $dispatch{$class};
- my $sub = $dispatch{$class} || die;;
- if ($can_bundle{$class} &&
- (!@bundle ||
- ($bundle[-1]->{dispatch} == $sub &&
- $bundle[-1]->{key} eq $key &&
- $bundle[-1]->{subkey} eq $subkey)))
- {
- push @bundle, {
- dispatch => $sub,
- key => $key,
- op => $op,
- val => $val,
- ea => $ea || "",
- subkey => $subkey,
- };
- } else {
- $self->_close_bundle(@bundle); @bundle = ();
- $sub->(
- $self,
- $key,
- $op,
- $val,
- SUBCLAUSE => "", # don't need anymore
- ENTRYAGGREGATOR => $ea || "",
- SUBKEY => $subkey,
- );
- }
-
- $self->{_sql_looking_at}{lc $key} = 1;
-
- ($ea,$key,$op,$value) = ("","","","");
-
- $want = CLOSE_PAREN | AGGREG;
- } else {
- die "I'm lost";
- }
-
- $last = $current;
- } # while
-
- $self->_close_bundle(@bundle); @bundle = ();
-
- die "Incomplete query"
- unless (($want | CLOSE_PAREN) || ($want | KEYWORD));
-
- die "Incomplete Query"
- unless ($last && ($last | CLOSE_PAREN) || ($last || VALUE));
-
- # This will never happen, because the parser will complain
- die "Mismatched parentheses"
- unless $depth == 0;
-
+ };
+ $callback{'EntryAggregator'} = sub { $ea = $_[0] || '' };
+ $callback{'Condition'} = sub {
+ my ($key, $op, $value) = @_;
+
+ # key has dot then it's compound variant and we have subkey
+ my $subkey = '';
+ ($key, $subkey) = ($1, $2) if $key =~ /^([^\.]+)\.(.+)$/;
+
+ # normalize key and get class (type)
+ my $class;
+ if (exists $lcfields{lc $key}) {
+ $key = $lcfields{lc $key};
+ $class = $FIELD_METADATA{$key}->[0];
+ }
+ die "Unknown field '$key' in '$string'" unless $class;
+
+ # replace __CurrentUser__ with id
+ $value = $self->CurrentUser->id if $value eq '__CurrentUser__';
+
+
+ unless( $dispatch{ $class } ) {
+ die "No dispatch method for class '$class'"
+ }
+ my $sub = $dispatch{ $class };
+
+ if ( $can_bundle{ $class }
+ && ( !@bundle
+ || ( $bundle[-1]->{dispatch} == $sub
+ && $bundle[-1]->{key} eq $key
+ && $bundle[-1]->{subkey} eq $subkey
+ )
+ )
+ )
+ {
+ push @bundle, {
+ dispatch => $sub,
+ key => $key,
+ op => $op,
+ val => $value,
+ ea => $ea,
+ subkey => $subkey,
+ };
+ }
+ else {
+ $self->_close_bundle(@bundle); @bundle = ();
+ $sub->( $self, $key, $op, $value,
+ SUBCLAUSE => '', # don't need anymore
+ ENTRYAGGREGATOR => $ea,
+ SUBKEY => $subkey,
+ );
+ }
+ $self->{_sql_looking_at}{lc $key} = 1;
+ $ea = '';
+ };
+ RT::SQL::Parse($string, \%callback);
+ $self->_close_bundle(@bundle); @bundle = ();
}
-
=head2 ClausesToSQL
=cut
@@ -405,133 +275,68 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on
failure.
-=begin testing
-
-use RT::Tickets;
-use strict;
-
-my $tix = RT::Tickets->new($RT::SystemUser);
-{
- my $query = "Status = 'open'";
- my ($status, $msg) = $tix->FromSQL($query);
- ok ($status, "correct query") or diag("error: $msg");
-}
-my (@created,%created);
-my $string = 'subject/content SQL test';
-{
- my $t = RT::Ticket->new($RT::SystemUser);
- ok( $t->Create(Queue => 'General', Subject => $string), "Ticket Created");
- $created{ $t->Id }++; push @created, $t->Id;
-}
-
-{
- my $Message = MIME::Entity->build(
- Subject => 'this is my subject',
- From => 'jesse@example.com',
- Data => [ $string ],
- );
-
- my $t = RT::Ticket->new($RT::SystemUser);
- ok( $t->Create( Queue => 'General',
- Subject => 'another ticket',
- MIMEObj => $Message,
- MemberOf => $created[0]
- ),
- "Ticket Created"
- );
- $created{ $t->Id }++; push @created, $t->Id;
-}
+=cut
-{
- my $query = ("Subject LIKE '$string' OR Content LIKE '$string'");
- my ($status, $msg) = $tix->FromSQL($query);
- ok ($status, "correct query") or diag("error: $msg");
+sub FromSQL {
+ my ($self,$query) = @_;
- my $count = 0;
- while (my $tick = $tix->Next) {
- $count++ if $created{ $tick->id };
+ {
+ # preserve first_row and show_rows across the CleanSlate
+ local ($self->{'first_row'}, $self->{'show_rows'});
+ $self->CleanSlate;
}
- is ($count, scalar @created, "number of returned tickets same as entered");
-}
+ $self->_InitSQL();
-{
- my $query = "id = $created[0] OR MemberOf = $created[0]";
- my ($status, $msg) = $tix->FromSQL($query);
- ok ($status, "correct query") or diag("error: $msg");
+ return (1, $self->loc("No Query")) unless $query;
- my $count = 0;
- while (my $tick = $tix->Next) {
- $count++ if $created{ $tick->id };
+ $self->{_sql_query} = $query;
+ eval { $self->_parser( $query ); };
+ if ( $@ ) {
+ $RT::Logger->error( $@ );
+ return (0, $@);
}
- is ($count, scalar @created, "number of returned tickets same as entered");
-}
-
-
-=end testing
-
-=cut
-
-sub FromSQL {
- my ($self,$query) = @_;
-
- {
- # preserve first_row and show_rows across the CleanSlate
- local($self->{'first_row'}, $self->{'show_rows'});
- $self->CleanSlate;
- }
- $self->_InitSQL();
-
- return (1,$self->loc("No Query")) unless $query;
-
- $self->{_sql_query} = $query;
- eval { $self->_parser( $query ); };
- if ($@) {
- $RT::Logger->error( "Query error in <<$query>>:\n$@" );
- return(0,$@);
+ # We only want to look at EffectiveId's (mostly) for these searches.
+ unless ( exists $self->{_sql_looking_at}{'effectiveid'} ) {
+ #TODO, we shouldn't be hard #coding the tablename to main.
+ $self->SUPER::Limit( FIELD => 'EffectiveId',
+ VALUE => 'main.id',
+ ENTRYAGGREGATOR => 'AND',
+ QUOTEVALUE => 0,
+ );
}
- # We only want to look at EffectiveId's (mostly) for these searches.
- unless (exists $self->{_sql_looking_at}{'effectiveid'}) {
- $self->SUPER::Limit( FIELD => 'EffectiveId',
- ENTRYAGGREGATOR => 'AND',
- OPERATOR => '=',
- QUOTEVALUE => 0,
- VALUE => 'main.id'
- ); #TODO, we shouldn't be hard #coding the tablename to main.
+ # FIXME: Need to bring this logic back in
+
+ # if ($self->_isLimited && (! $self->{'looking_at_effective_id'})) {
+ # $self->SUPER::Limit( FIELD => 'EffectiveId',
+ # OPERATOR => '=',
+ # QUOTEVALUE => 0,
+ # VALUE => 'main.id'); #TODO, we shouldn't be hard coding the tablename to main.
+ # }
+ # --- This is hardcoded above. This comment block can probably go.
+ # Or, we need to reimplement the looking_at_effective_id toggle.
+
+ # Unless we've explicitly asked to look at a specific Type, we need
+ # to limit to it.
+ unless ( $self->{looking_at_type} ) {
+ $self->SUPER::Limit( FIELD => 'Type', VALUE => 'ticket' );
}
- # FIXME: Need to bring this logic back in
-
- # if ($self->_isLimited && (! $self->{'looking_at_effective_id'})) {
- # $self->SUPER::Limit( FIELD => 'EffectiveId',
- # OPERATOR => '=',
- # QUOTEVALUE => 0,
- # VALUE => 'main.id'); #TODO, we shouldn't be hard coding the tablename to main.
- # }
- # --- This is hardcoded above. This comment block can probably go.
- # Or, we need to reimplement the looking_at_effective_id toggle.
-
- # Unless we've explicitly asked to look at a specific Type, we need
- # to limit to it.
- unless ($self->{looking_at_type}) {
- $self->SUPER::Limit( FIELD => 'Type', OPERATOR => '=', VALUE => 'ticket');
- }
-
- # We don't want deleted tickets unless 'allow_deleted_search' is set
- unless( $self->{'allow_deleted_search'} ) {
- $self->SUPER::Limit(FIELD => 'Status',
- OPERATOR => '!=',
- VALUE => 'deleted');
- }
+ # We don't want deleted tickets unless 'allow_deleted_search' is set
+ unless( $self->{'allow_deleted_search'} ) {
+ $self->SUPER::Limit( FIELD => 'Status',
+ OPERATOR => '!=',
+ VALUE => 'deleted',
+ );
+ }
- # set SB's dirty flag
- $self->{'must_redo_search'} = 1;
- $self->{'RecalcTicketLimits'} = 0;
-
- return (1,$self->loc("Valid Query"));
+ # set SB's dirty flag
+ $self->{'must_redo_search'} = 1;
+ $self->{'RecalcTicketLimits'} = 0;
+ return (1, $self->loc("Valid Query"));
}
=head2 Query
@@ -541,11 +346,38 @@ Returns the query that this object was initialized with
=cut
sub Query {
- my $self = shift;
- return ($self->{_sql_query});
+ return ($_[0]->{_sql_query});
}
+{
+my %inv = (
+ '=' => '!=', '!=' => '=', '<>' => '=',
+ '>' => '<=', '<' => '>=', '>=' => '<', '<=' => '>',
+ 'is' => 'IS NOT', 'is not' => 'IS',
+ 'like' => 'NOT LIKE', 'not like' => 'LIKE',
+ 'matches' => 'NOT MATCHES', 'not matches' => 'MATCHES',
+ 'startswith' => 'NOT STARTSWITH', 'not startswith' => 'STARTSWITH',
+ 'endswith' => 'NOT ENDSWITH', 'not endswith' => 'ENDSWITH',
+);
+
+my %range = map { $_ => 1 } qw(> >= < <=);
+
+sub ClassifySQLOperation {
+ my $self = shift;
+ my $op = shift;
+
+ my $is_negative = 0;
+ if ( $op eq '!=' || $op =~ /\bNOT\b/i ) {
+ $is_negative = 1;
+ }
+
+ my $is_null = 0;
+ if ( 'is not' eq lc($op) || 'is' eq lc($op) ) {
+ $is_null = 1;
+ }
+ return ($is_negative, $is_null, $inv{lc $op}, $range{lc $op});
+} }
1;
diff --git a/rt/lib/RT/Transaction.pm b/rt/lib/RT/Transaction.pm
index 7757b6a..351e79d 100755
--- a/rt/lib/RT/Transaction.pm
+++ b/rt/lib/RT/Transaction.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Transaction_Overlay.pm b/rt/lib/RT/Transaction_Overlay.pm
index 5716d66..96ccf51 100644
--- a/rt/lib/RT/Transaction_Overlay.pm
+++ b/rt/lib/RT/Transaction_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Transaction - RT\'s transaction object
@@ -64,11 +65,6 @@ It can have arbitrary MIME attachments.
=head1 METHODS
-=begin testing
-
-ok(require RT::Transaction);
-
-=end testing
=cut
@@ -82,11 +78,11 @@ use vars qw( %_BriefDescriptions $PreferredContentType );
use RT::Attachments;
use RT::Scrips;
+use RT::Ruleset;
use HTML::FormatText;
use HTML::TreeBuilder;
-
# {{{ sub Create
=head2 Create
@@ -176,9 +172,21 @@ sub Create {
Ticket => $args{'ObjectId'},
Transaction => $self->id,
);
+
+ # Entry point of the rule system
+ my $ticket = RT::Ticket->new($RT::SystemUser);
+ $ticket->Load($args{'ObjectId'});
+ my $rules = RT::Ruleset->FindAllRules(
+ Stage => 'TransactionCreate',
+ Type => $args{'Type'},
+ TicketObj => $ticket,
+ TransactionObj => $self,
+ );
+
if ($args{'CommitScrips'} ) {
$RT::Logger->debug('About to commit scrips for transaction #' .$self->Id);
$self->{'scrips'}->Commit();
+ RT::Ruleset->CommitRules($rules);
}
}
@@ -243,26 +251,28 @@ sub Delete {
=head2 Message
- Returns the RT::Attachments Object which contains the "top-level"object
- attachment for this transaction
+Returns the L<RT::Attachments> object which contains the "top-level" object
+attachment for this transaction.
=cut
sub Message {
-
my $self = shift;
+
+ # XXX: Where is ACL check?
- if ( !defined( $self->{'message'} ) ) {
+ unless ( defined $self->{'message'} ) {
- $self->{'message'} = new RT::Attachments( $self->CurrentUser );
+ $self->{'message'} = RT::Attachments->new( $self->CurrentUser );
$self->{'message'}->Limit(
FIELD => 'TransactionId',
VALUE => $self->Id
);
-
$self->{'message'}->ChildrenOf(0);
+ } else {
+ $self->{'message'}->GotoFirstItem;
}
- return ( $self->{'message'} );
+ return $self->{'message'};
}
# }}}
@@ -278,40 +288,41 @@ returns undef.
Takes a paramhash. If the $args{'Quote'} parameter is set, wraps this message
at $args{'Wrap'}. $args{'Wrap'} defaults to 70.
-If $args{'Type'} is set to C<text/html>, plain texts are upgraded to HTML.
-Otherwise, HTML texts are downgraded to plain text. If $args{'Type'} is
-missing, it defaults to the value of C<$RT::Transaction::PreferredContentType>.
+If $args{'Type'} is set to C<text/html>, this will return an HTML
+part of the message, if available. Otherwise it looks for a text/plain
+part. If $args{'Type'} is missing, it defaults to the value of
+C<$RT::Transaction::PreferredContentType>, if that's missing too,
+defaults to 'text/plain'.
=cut
sub Content {
my $self = shift;
my %args = (
- Type => $PreferredContentType,
+ Type => $PreferredContentType || 'text/plain',
Quote => 0,
Wrap => 70,
@_
);
my $content;
- if (my $content_obj = $self->ContentObj) {
- $content = $content_obj->Content;
+ if ( my $content_obj = $self->ContentObj( Type => $args{Type} ) ) {
+ $content = $content_obj->Content ||'';
- if ($content_obj->ContentType =~ m{^text/html$}i) {
+ if ( lc $content_obj->ContentType eq 'text/html' ) {
$content =~ s/<p>--\s+<br \/>.*?$//s if $args{'Quote'};
if ($args{Type} ne 'text/html') {
+ my $tree = HTML::TreeBuilder->new_from_content( $content );
$content = HTML::FormatText->new(
leftmargin => 0,
rightmargin => 78,
- )->format(
- HTML::TreeBuilder->new_from_content( $content )
- );
+ )->format( $tree);
+ $tree->delete;
}
- }
+ }
else {
$content =~ s/\n-- \n.*?$//s if $args{'Quote'};
-
if ($args{Type} eq 'text/html') {
# Extremely simple text->html converter
$content =~ s/&/&#38;/g;
@@ -332,7 +343,7 @@ sub Content {
# What's the longest line like?
my $max = 0;
foreach ( split ( /\n/, $content ) ) {
- $max = length if ( length > $max );
+ $max = length if length > $max;
}
if ( $max > 76 ) {
@@ -346,7 +357,7 @@ sub Content {
}
$content =~ s/^/> /gm;
- $content = $self->loc("On [_1], [_2] wrote:", $self->CreatedAsString(), $self->CreatorObj->Name())
+ $content = $self->loc("On [_1], [_2] wrote:", $self->CreatedAsString, $self->CreatorObj->Name)
. "\n$content\n\n";
}
@@ -355,6 +366,26 @@ sub Content {
# }}}
+
+=head2 Addresses
+
+Returns a hashref of addresses related to this transaction. See L<RT::Attachment/Addresses> for details.
+
+=cut
+
+sub Addresses {
+ my $self = shift;
+
+ if (my $attach = $self->Attachments->First) {
+ return $attach->Addresses;
+ }
+ else {
+ return {};
+ }
+
+}
+
+
# {{{ ContentObj
=head2 ContentObj
@@ -365,16 +396,13 @@ Returns the RT::Attachment object which contains the content for this Transactio
sub ContentObj {
-
my $self = shift;
+ my %args = ( Type => $PreferredContentType || 'text/plain',
+ @_ );
- # If we don\'t have any content, return undef now.
- unless ( $self->Attachments->First ) {
- return (undef);
- }
-
+ # If we don't have any content, return undef now.
# Get the set of toplevel attachments to this transaction.
- my $Attachment = $self->Attachments->First();
+ return undef unless my $Attachment = $self->Attachments->First;
# If it's a textual part, just return the body.
if ( RT::I18N::IsTextualContentType($Attachment->ContentType) ) {
@@ -384,27 +412,23 @@ sub ContentObj {
# If it's a multipart object, first try returning the first part with preferred
# MIME type ('text/plain' by default).
- elsif ( $Attachment->ContentType() =~ '^multipart/' ) {
- my $plain_parts = $Attachment->Children();
- $plain_parts->ContentType( VALUE => ($PreferredContentType || 'text/plain') );
+ elsif ( $Attachment->ContentType =~ '^multipart/' ) {
+ my $plain_parts = $Attachment->Children;
+ $plain_parts->ContentType( VALUE => $args{Type} );
+ $plain_parts->LimitNotEmpty;
# If we actully found a part, return its content
- if ( $plain_parts->First && $plain_parts->First->Content ne '' ) {
- return ( $plain_parts->First );
+ if ( my $first = $plain_parts->First ) {
+ return $first;
}
-
# If that fails, return the first textual part which has some content.
-
- else {
- my $all_parts = $self->Attachments();
- while ( my $part = $all_parts->Next ) {
- if ( ( RT::I18N::IsTextualContentType($part->ContentType) ) and ( $part->Content() ne '' ) ) {
- return ($part);
- }
- }
+ my $all_parts = $self->Attachments;
+ while ( my $part = $all_parts->Next ) {
+ next unless RT::I18N::IsTextualContentType($part->ContentType)
+ && $part->Content;
+ return $part;
}
-
}
# We found no content. suck
@@ -424,12 +448,8 @@ Otherwise, returns null
sub Subject {
my $self = shift;
- if ( $self->Attachments->First ) {
- return ( $self->Attachments->First->Subject );
- }
- else {
- return (undef);
- }
+ return undef unless my $first = $self->Attachments->First;
+ return $first->Subject;
}
# }}}
@@ -438,7 +458,7 @@ sub Subject {
=head2 Attachments
- Returns all the RT::Attachment objects which are attached
+Returns all the RT::Attachment objects which are attached
to this transaction. Takes an optional parameter, which is
a ContentType that Attachments should be restricted to.
@@ -447,38 +467,28 @@ a ContentType that Attachments should be restricted to.
sub Attachments {
my $self = shift;
- unless ( $self->{'attachments'} ) {
- $self->{'attachments'} = RT::Attachments->new( $self->CurrentUser );
+ if ( $self->{'attachments'} ) {
+ $self->{'attachments'}->GotoFirstItem;
+ return $self->{'attachments'};
+ }
- #If it's a comment, return an empty object if they don't have the right to see it
- if ( $self->Type eq 'Comment' ) {
- unless ( $self->CurrentUserHasRight('ShowTicketComments') ) {
- return ( $self->{'attachments'} );
- }
- }
+ $self->{'attachments'} = RT::Attachments->new( $self->CurrentUser );
- #if they ain't got rights to see, return an empty object
- elsif ($self->__Value('ObjectType') eq "RT::Ticket") {
- unless ( $self->CurrentUserHasRight('ShowTicket') ) {
- return ( $self->{'attachments'} );
- }
- }
-
- $self->{'attachments'}->Limit( FIELD => 'TransactionId',
- VALUE => $self->Id );
+ unless ( $self->CurrentUserCanSee ) {
+ $self->{'attachments'}->Limit(FIELD => 'id', VALUE => '0');
+ return $self->{'attachments'};
+ }
- # Get the self->{'attachments'} in the order they're put into
- # the database. Arguably, we should be returning a tree
- # of self->{'attachments'}, not a set...but no current app seems to need
- # it.
+ $self->{'attachments'}->Limit( FIELD => 'TransactionId', VALUE => $self->Id );
- $self->{'attachments'}->OrderBy( ALIAS => 'main',
- FIELD => 'id',
- ORDER => 'asc' );
+ # Get the self->{'attachments'} in the order they're put into
+ # the database. Arguably, we should be returning a tree
+ # of self->{'attachments'}, not a set...but no current app seems to need
+ # it.
- }
- return ( $self->{'attachments'} );
+ $self->{'attachments'}->OrderBy( FIELD => 'id', ORDER => 'ASC' );
+ return $self->{'attachments'};
}
# }}}
@@ -495,26 +505,70 @@ sub _Attach {
my $self = shift;
my $MIMEObject = shift;
- if ( !defined($MIMEObject) ) {
- $RT::Logger->error(
-"$self _Attach: We can't attach a mime object if you don't give us one.\n"
- );
+ unless ( defined $MIMEObject ) {
+ $RT::Logger->error("We can't attach a mime object if you don't give us one.");
return ( 0, $self->loc("[_1]: no attachment specified", $self) );
}
- my $Attachment = new RT::Attachment( $self->CurrentUser );
+ my $Attachment = RT::Attachment->new( $self->CurrentUser );
my ($id, $msg) = $Attachment->Create(
TransactionId => $self->Id,
Attachment => $MIMEObject
);
return ( $Attachment, $msg || $self->loc("Attachment created") );
-
}
# }}}
# }}}
+sub ContentAsMIME {
+ my $self = shift;
+
+ my $main_content = $self->ContentObj;
+ my $entity = $main_content->ContentAsMIME;
+
+ if ( $main_content->Parent ) {
+ # main content is not top most entity, we shouldn't loose
+ # From/To/Cc headers that are on a top part
+ my $attachments = RT::Attachments->new( $self->CurrentUser );
+ $attachments->Columns(qw(id Parent TransactionId Headers));
+ $attachments->Limit( FIELD => 'TransactionId', VALUE => $self->id );
+ $attachments->Limit( FIELD => 'Parent', VALUE => 0 );
+ $attachments->Limit( FIELD => 'Parent', OPERATOR => 'IS', VALUE => 'NULL', QUOTEVALUE => 0 );
+ $attachments->OrderBy( FIELD => 'id', ORDER => 'ASC' );
+ my $tmp = $attachments->First;
+ if ( $tmp && $tmp->id ne $main_content->id ) {
+ $entity->make_multipart;
+ $entity->head->add( split /:/, $_, 2 ) foreach $tmp->SplitHeaders;
+ $entity->make_singlepart;
+ }
+ }
+
+ my $attachments = RT::Attachments->new( $self->CurrentUser );
+ $attachments->Limit( FIELD => 'TransactionId', VALUE => $self->id );
+ $attachments->Limit(
+ FIELD => 'id',
+ OPERATOR => '!=',
+ VALUE => $main_content->id,
+ );
+ $attachments->Limit(
+ FIELD => 'ContentType',
+ OPERATOR => 'NOT STARTSWITH',
+ VALUE => 'multipart/',
+ );
+ $attachments->Limit(
+ FIELD => 'Content',
+ OPERATOR => '!=',
+ VALUE => '',
+ );
+ while ( my $a = $attachments->Next ) {
+ $entity->make_multipart unless $entity->is_multipart;
+ $entity->add_part( $a->ContentAsMIME );
+ }
+ return $entity;
+}
+
# {{{ Routines dealing with Transaction Attributes
# {{{ sub Description
@@ -528,28 +582,15 @@ Returns a text string which describes this transaction
sub Description {
my $self = shift;
- #Check those ACLs
- #If it's a comment or a comment email record,
- # we need to be extra special careful
-
- if ( $self->__Value('Type') =~ /^Comment/ ) {
- unless ( $self->CurrentUserHasRight('ShowTicketComments') ) {
- return ( $self->loc("Permission Denied") );
- }
+ unless ( $self->CurrentUserCanSee ) {
+ return ( $self->loc("Permission Denied") );
}
- #if they ain't got rights to see, don't let em
- elsif ($self->__Value('ObjectType') eq "RT::Ticket") {
- unless ( $self->CurrentUserHasRight('ShowTicket') ) {
- return ($self->loc("Permission Denied") );
- }
- }
-
- if ( !defined( $self->Type ) ) {
+ unless ( defined $self->Type ) {
return ( $self->loc("No transaction type specified"));
}
- return ( $self->loc("[_1] by [_2]",$self->BriefDescription , $self->CreatorObj->Name ));
+ return $self->loc("[_1] by [_2]", $self->BriefDescription , $self->CreatorObj->Name );
}
# }}}
@@ -565,24 +606,13 @@ Returns a text string which briefly describes this transaction
sub BriefDescription {
my $self = shift;
- #If it's a comment or a comment email record,
- # we need to be extra special careful
- if ( $self->__Value('Type') =~ /^Comment/ ) {
- unless ( $self->CurrentUserHasRight('ShowTicketComments') ) {
- return ( $self->loc("Permission Denied") );
- }
- }
-
- #if they ain't got rights to see, don't let em
- elsif ( $self->__Value('ObjectType') eq "RT::Ticket" ) {
- unless ( $self->CurrentUserHasRight('ShowTicket') ) {
- return ( $self->loc("Permission Denied") );
- }
+ unless ( $self->CurrentUserCanSee ) {
+ return ( $self->loc("Permission Denied") );
}
my $type = $self->Type; #cache this, rather than calling it 30 times
- if ( !defined($type) ) {
+ unless ( defined $type ) {
return $self->loc("No transaction type specified");
}
@@ -591,6 +621,12 @@ sub BriefDescription {
if ( $type eq 'Create' ) {
return ( $self->loc( "[_1] created", $obj_type ) );
}
+ elsif ( $type eq 'Enabled' ) {
+ return ( $self->loc( "[_1] enabled", $obj_type ) );
+ }
+ elsif ( $type eq 'Disabled' ) {
+ return ( $self->loc( "[_1] disabled", $obj_type ) );
+ }
elsif ( $type =~ /Status/ ) {
if ( $self->Field eq 'Status' ) {
if ( $self->NewValue eq 'deleted' ) {
@@ -664,10 +700,10 @@ sub BriefDescription {
$field = $cf->Name();
}
- if ( $self->OldValue eq '' ) {
+ if ( ! defined $self->OldValue || $self->OldValue eq '' ) {
return ( $self->loc("[_1] [_2] added", $field, $self->NewValue) );
}
- elsif ( $self->NewValue eq '' ) {
+ elsif ( !defined $self->NewValue || $self->NewValue eq '' ) {
return ( $self->loc("[_1] [_2] deleted", $field, $self->OldValue) );
}
@@ -796,6 +832,21 @@ sub BriefDescription {
return ( $self->Data );
}
},
+ Told => sub {
+ my $self = shift;
+ if ( $self->Field eq 'Told' ) {
+ my $t1 = new RT::Date($self->CurrentUser);
+ $t1->Set(Format => 'ISO', Value => $self->NewValue);
+ my $t2 = new RT::Date($self->CurrentUser);
+ $t2->Set(Format => 'ISO', Value => $self->OldValue);
+ return $self->loc( "[_1] changed from [_2] to [_3]", $self->loc($self->Field), $t2->AsString, $t1->AsString );
+ }
+ else {
+ return $self->loc( "[_1] changed from [_2] to [_3]",
+ $self->loc($self->Field),
+ ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'" );
+ }
+ },
Set => sub {
my $self = shift;
if ( $self->Field eq 'Password' ) {
@@ -806,7 +857,8 @@ sub BriefDescription {
$q1->Load( $self->OldValue );
my $q2 = new RT::Queue( $self->CurrentUser );
$q2->Load( $self->NewValue );
- return $self->loc("[_1] changed from [_2] to [_3]", $self->Field , $q1->Name , $q2->Name);
+ return $self->loc("[_1] changed from [_2] to [_3]",
+ $self->loc($self->Field) , $q1->Name , $q2->Name);
}
# Write the date/time change at local time:
@@ -815,10 +867,12 @@ sub BriefDescription {
$t1->Set(Format => 'ISO', Value => $self->NewValue);
my $t2 = new RT::Date($self->CurrentUser);
$t2->Set(Format => 'ISO', Value => $self->OldValue);
- return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, $t2->AsString, $t1->AsString );
+ return $self->loc( "[_1] changed from [_2] to [_3]", $self->loc($self->Field), $t2->AsString, $t1->AsString );
}
else {
- return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'" );
+ return $self->loc( "[_1] changed from [_2] to [_3]",
+ $self->loc($self->Field),
+ ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'" );
}
},
PurgeTransaction => sub {
@@ -903,52 +957,19 @@ Returns its value as a string, if the user passes an ACL check
=cut
sub _Value {
-
my $self = shift;
my $field = shift;
#if the field is public, return it.
if ( $self->_Accessible( $field, 'public' ) ) {
- return ( $self->__Value($field) );
-
- }
-
- #If it's a comment, we need to be extra special careful
- if ( $self->__Value('Type') eq 'Comment' ) {
- unless ( $self->CurrentUserHasRight('ShowTicketComments') ) {
- return (undef);
- }
- }
- elsif ( $self->__Value('Type') eq 'CommentEmailRecord' ) {
- unless ( $self->CurrentUserHasRight('ShowTicketComments')
- && $self->CurrentUserHasRight('ShowOutgoingEmail') ) {
- return (undef);
- }
-
+ return $self->SUPER::_Value( $field );
}
- elsif ( $self->__Value('Type') eq 'EmailRecord' ) {
- unless ( $self->CurrentUserHasRight('ShowOutgoingEmail')) {
- return (undef);
- }
- }
- # Make sure the user can see the custom field before showing that it changed
- elsif ( ( $self->__Value('Type') eq 'CustomField' ) && $self->__Value('Field') ) {
- my $cf = RT::CustomField->new( $self->CurrentUser );
- $cf->Load( $self->__Value('Field') );
- return (undef) unless ( $cf->CurrentUserHasRight('SeeCustomField') );
- }
-
-
- #if they ain't got rights to see, don't let em
- elsif ($self->__Value('ObjectType') eq "RT::Ticket") {
- unless ( $self->CurrentUserHasRight('ShowTicket') ) {
- return (undef);
- }
+ unless ( $self->CurrentUserCanSee ) {
+ return undef;
}
- return ( $self->__Value($field) );
-
+ return $self->SUPER::_Value( $field );
}
# }}}
@@ -965,14 +986,60 @@ passed in here.
sub CurrentUserHasRight {
my $self = shift;
my $right = shift;
- return (
- $self->CurrentUser->HasRight(
- Right => "$right",
- Object => $self->TicketObj
- )
+ return $self->CurrentUser->HasRight(
+ Right => $right,
+ Object => $self->Object
);
}
+=head2 CurrentUserCanSee
+
+Returns true if current user has rights to see this particular transaction.
+
+This fact depends on type of the transaction, type of an object the transaction
+is attached to and may be other conditions, so this method is prefered over
+custom implementations.
+
+=cut
+
+sub CurrentUserCanSee {
+ my $self = shift;
+
+ # If it's a comment, we need to be extra special careful
+ my $type = $self->__Value('Type');
+ if ( $type eq 'Comment' ) {
+ unless ( $self->CurrentUserHasRight('ShowTicketComments') ) {
+ return 0;
+ }
+ }
+ elsif ( $type eq 'CommentEmailRecord' ) {
+ unless ( $self->CurrentUserHasRight('ShowTicketComments')
+ && $self->CurrentUserHasRight('ShowOutgoingEmail') ) {
+ return 0;
+ }
+ }
+ elsif ( $type eq 'EmailRecord' ) {
+ unless ( $self->CurrentUserHasRight('ShowOutgoingEmail') ) {
+ return 0;
+ }
+ }
+ # Make sure the user can see the custom field before showing that it changed
+ elsif ( $type eq 'CustomField' and my $cf_id = $self->__Value('Field') ) {
+ my $cf = RT::CustomField->new( $self->CurrentUser );
+ $cf->SetContextObject( $self->Object );
+ $cf->Load( $cf_id );
+ return 0 unless $cf->CurrentUserHasRight('SeeCustomField');
+ }
+ #if they ain't got rights to see, don't let em
+ elsif ( $self->__Value('ObjectType') eq "RT::Ticket" ) {
+ unless ( $self->CurrentUserHasRight('ShowTicket') ) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
# }}}
sub Ticket {
@@ -1017,7 +1084,7 @@ sub Object {
my $self = shift;
my $Object = $self->__Value('ObjectType')->new($self->CurrentUser);
$Object->Load($self->__Value('ObjectId'));
- return($Object);
+ return $Object;
}
sub FriendlyObjectType {
@@ -1047,7 +1114,6 @@ sub UpdateCustomFields {
# value "ARGSRef", which was a reference to a hash of arguments.
# This was insane. The next few lines of code preserve that API
# while giving us something saner.
-
# TODO: 3.6: DEPRECATE OLD API
@@ -1095,9 +1161,11 @@ sub CustomFieldValues {
if ( UNIVERSAL::can( $self->Object, 'QueueObj' ) ) {
+ # XXX: $field could be undef when we want fetch values for all CFs
+ # do we want to cover this situation somehow here?
unless ( defined $field && $field =~ /^\d+$/o ) {
my $CFs = RT::CustomFields->new( $self->CurrentUser );
- $CFs->Limit( FIELD => 'Name', VALUE => $field);
+ $CFs->Limit( FIELD => 'Name', VALUE => $field );
$CFs->LimitToLookupType($self->CustomFieldLookupType);
$CFs->LimitToGlobalOrObjectId($self->Object->QueueObj->id);
$field = $CFs->First->id if $CFs->First;
@@ -1123,7 +1191,54 @@ sub CustomFieldLookupType {
"RT::Queue-RT::Ticket-RT::Transaction";
}
-# Transactions don't change. by adding this cache congif directiove, we don't lose pathalogically on long tickets.
+
+=head2 DeferredRecipients($freq, $include_sent )
+
+Takes the following arguments:
+
+=over
+
+=item * a string to indicate the frequency of digest delivery. Valid values are "daily", "weekly", or "susp".
+
+=item * an optional argument which, if true, will return addresses even if this notification has been marked as 'sent' for this transaction.
+
+=back
+
+Returns an array of users who should now receive the notification that
+was recorded in this transaction. Returns an empty array if there were
+no deferred users, or if $include_sent was not specified and the deferred
+notifications have been sent.
+
+=cut
+
+sub DeferredRecipients {
+ my $self = shift;
+ my $freq = shift;
+ my $include_sent = @_? shift : 0;
+
+ my $attr = $self->FirstAttribute('DeferredRecipients');
+
+ return () unless ($attr);
+
+ my $deferred = $attr->Content;
+
+ return () unless ( ref($deferred) eq 'HASH' && exists $deferred->{$freq} );
+
+ # Skip it.
+
+ for my $user (keys %{$deferred->{$freq}}) {
+ if ($deferred->{$freq}->{$user}->{_sent} && !$include_sent) {
+ delete $deferred->{$freq}->{$user}
+ }
+ }
+ # Now get our users. Easy.
+
+ return keys %{ $deferred->{$freq} };
+}
+
+
+
+# Transactions don't change. by adding this cache config directive, we don't lose pathalogically on long tickets.
sub _CacheConfig {
{
'cache_p' => 1,
@@ -1131,4 +1246,27 @@ sub _CacheConfig {
'cache_for_sec' => 6000,
}
}
+
+
+=head2 ACLEquivalenceObjects
+
+This method returns a list of objects for which a user's rights also apply
+to this Transaction.
+
+This currently only applies to Transaction Custom Fields on Tickets, so we return
+the Ticket's Queue and the Ticket.
+
+This method is called from L<RT::Principal/HasRight>.
+
+=cut
+
+sub ACLEquivalenceObjects {
+ my $self = shift;
+
+ return unless $self->ObjectType eq 'RT::Ticket';
+ my $object = $self->Object;
+ return $object,$object->QueueObj;
+
+}
+
1;
diff --git a/rt/lib/RT/Transactions.pm b/rt/lib/RT/Transactions.pm
index 447ab1a..deae6ae 100755
--- a/rt/lib/RT/Transactions.pm
+++ b/rt/lib/RT/Transactions.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Transactions_Overlay.pm b/rt/lib/RT/Transactions_Overlay.pm
index 1429efa..af72c20 100644
--- a/rt/lib/RT/Transactions_Overlay.pm
+++ b/rt/lib/RT/Transactions_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Transactions - a collection of RT Transaction objects
@@ -59,11 +60,6 @@
=head1 METHODS
-=begin testing
-
-ok (require RT::Transactions);
-
-=end testing
=cut
@@ -90,32 +86,6 @@ sub _Init {
}
# }}}
-=head2 Limit
-
-A wrapper around SUPER::Limit to catch migration issues
-
-=cut
-
-sub Limit {
- my $self = shift;
- my %args = (@_);
-
- if ($args{'FIELD'} eq 'Ticket') {
- Carp::cluck("Historical code calling RT::Transactions::Limit with a 'Ticket' at (". join(":",caller)."). This deprecated API will be deleted in 3.6");
- $self->SUPER::Limit(FIELD => 'ObjectType', OPERATOR => '=', VALUE =>'RT::Ticket');
- $args{'FIELD'} = 'ObjectId';
- $self->SUPER::Limit(%args);
-
- } else {
-
- $self->SUPER::Limit(%args);
- }
-
-
-}
-
-
-
=head2 LimitToTicket TICKETID
Find only transactions for the ticket whose id is TICKETID.
diff --git a/rt/lib/RT/URI.pm b/rt/lib/RT/URI.pm
index bd311df..70654e1 100644
--- a/rt/lib/RT/URI.pm
+++ b/rt/lib/RT/URI.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,11 +45,11 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-package RT::URI;;
+
+package RT::URI;
use strict;
-use vars qw/@ISA/;
-@ISA = qw(RT::Base);
+use base 'RT::Base';
use RT::URI::base;
use Carp;
@@ -136,8 +136,8 @@ sub FromURI {
$scheme = $1;
}
else {
- $RT::Logger->warning("$self Could not determine a URI scheme for $uri");
- return (undef);
+ $RT::Logger->warning("Could not determine a URI scheme for $uri");
+ return (undef);
}
# load up a resolver object for this scheme
@@ -149,7 +149,7 @@ sub FromURI {
return (undef);
}
-return(1);
+ return(1);
}
@@ -157,7 +157,7 @@ return(1);
# {{{ _GetResolver
-=private _GetResolver <scheme>
+=head2 _GetResolver <scheme>
Gets an RT URI resolver for the scheme <scheme>.
Falls back to a null resolver. RT::URI::base.
@@ -172,16 +172,16 @@ sub _GetResolver {
my $resolver;
- eval "
- require RT::URI::$scheme;
- \$resolver = RT::URI::$scheme->new(\$self->CurrentUser);
- ";
+ eval "
+ require RT::URI::$scheme;
+ \$resolver = RT::URI::$scheme->new(\$self->CurrentUser);
+ ";
- if ($resolver) {
+ if ($resolver) {
$self->{'resolver'} = $resolver;
- } else {
+ } else {
$self->{'resolver'} = RT::URI::base->new($self->CurrentUser);
- }
+ }
}
@@ -191,8 +191,8 @@ sub _GetResolver {
=head2 Scheme
-Returns a local object id for this content. You are expected to know what sort of object this is the Id
-of
+Returns a local object id for this content. You are expected to know
+what sort of object this is the Id of
=cut
@@ -261,9 +261,9 @@ sub IsLocal {
sub AsHREF {
my $self = shift;
return $self->Resolver->HREF;
-
}
-=head Resolver
+
+=head2 Resolver
Returns this URI's URI resolver object
diff --git a/rt/lib/RT/URI/base.pm b/rt/lib/RT/URI/base.pm
index d6ee402..f7d27ef 100644
--- a/rt/lib/RT/URI/base.pm
+++ b/rt/lib/RT/URI/base.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::URI::base;
use strict;
diff --git a/rt/lib/RT/URI/fsck_com_rt.pm b/rt/lib/RT/URI/fsck_com_rt.pm
index d652ec3..d6c194d 100644
--- a/rt/lib/RT/URI/fsck_com_rt.pm
+++ b/rt/lib/RT/URI/fsck_com_rt.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,15 +45,14 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
package RT::URI::fsck_com_rt;
use RT::Ticket;
-use RT::URI::base;
+use base 'RT::URI::base';
use strict;
-use vars qw(@ISA);
-@ISA = qw/RT::URI::base/;
@@ -62,24 +61,6 @@ use vars qw(@ISA);
Returns the prefix for a local URI.
-=begin testing
-
-use_ok("RT::URI::fsck_com_rt");
-my $uri = RT::URI::fsck_com_rt->new($RT::SystemUser);
-
-ok(ref($uri));
-
-use Data::Dumper;
-
-
-ok (UNIVERSAL::isa($uri,RT::URI::fsck_com_rt), "It's an RT::URI::fsck_com_rt");
-
-ok ($uri->isa('RT::URI::base'), "It's an RT::URI::base");
-ok ($uri->isa('RT::Base'), "It's an RT::Base");
-
-is ($uri->LocalURIPrefix , 'fsck.com-rt://'.$RT::Organization);
-
-=end testing
@@ -88,7 +69,7 @@ is ($uri->LocalURIPrefix , 'fsck.com-rt://'.$RT::Organization);
sub LocalURIPrefix {
my $self = shift;
- my $prefix = $self->Scheme. "://$RT::Organization";
+ my $prefix = $self->Scheme. "://". RT->Config->Get('Organization');
return ($prefix);
}
@@ -116,14 +97,6 @@ sub ObjectType {
Returns the RT URI for a local RT::Record object
-=begin testing
-
-my $ticket = RT::Ticket->new($RT::SystemUser);
-$ticket->Load(1);
-my $uri = RT::URI::fsck_com_rt->new($ticket->CurrentUser);
-is($uri->LocalURIPrefix. "/ticket/1" , $uri->URIForObject($ticket));
-
-=end testing
=cut
@@ -239,7 +212,7 @@ Otherwise, return its URI
sub HREF {
my $self = shift;
if ($self->IsLocal && $self->Object && ($self->ObjectType eq 'ticket')) {
- return ( $RT::WebURL . "Ticket/Display.html?id=".$self->Object->Id);
+ return ( RT->Config->Get('WebURL') . "Ticket/Display.html?id=".$self->Object->Id);
}
else {
return ($self->URI);
diff --git a/rt/lib/RT/URI/t.pm b/rt/lib/RT/URI/t.pm
index d07144a..9b0dcbe 100644
--- a/rt/lib/RT/URI/t.pm
+++ b/rt/lib/RT/URI/t.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# BEGIN LICENSE BLOCK
#
# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
@@ -74,8 +75,7 @@ use RT::Ticket;
use RT::URI::base;
use strict;
-use vars qw(@ISA);
-@ISA = qw/RT::URI::fsck_com_rt/;
+use base 'RT::URI::fsck_com_rt';
my $scheme = "t";
@@ -84,20 +84,6 @@ my $scheme = "t";
When handed an t: URI, figures out if it is an RT ticket. This is an
alternate short form of specifying a full ticket URI.
-=begin testing
-
-use_ok("RT::URI::t");
-my $uri = RT::URI::t->new($RT::SystemUser);
-ok(ref($uri), "URI object exists");
-
-my $uristr = "t:1";
-$uri->ParseURI($uristr);
-is(ref($uri->Object), "RT::Ticket", "Object loaded is a ticket");
-is($uri->Object->Id, 1, "Object loaded has correct ID");
-is($uri->URI, 'fsck.com-rt://'.$RT::Organization.'/ticket/1',
- "URI object has correct URI string");
-
-=end testing
=cut
diff --git a/rt/lib/RT/User.pm b/rt/lib/RT/User.pm
index 5c5eb7f..6919cba 100755
--- a/rt/lib/RT/User.pm
+++ b/rt/lib/RT/User.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/User_Overlay.pm b/rt/lib/RT/User_Overlay.pm
index fd83630..db3964c 100644
--- a/rt/lib/RT/User_Overlay.pm
+++ b/rt/lib/RT/User_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::User - RT User object
@@ -58,11 +59,6 @@
=head1 METHODS
-=begin testing
-
-ok(require RT::User);
-
-=end testing
=cut
@@ -73,19 +69,12 @@ package RT::User;
use strict;
no warnings qw(redefine);
-use vars qw(%_USERS_KEY_CACHE);
-
-%_USERS_KEY_CACHE = ();
-
use Digest::MD5;
use RT::Principals;
use RT::ACE;
use RT::Interface::Email;
use Encode;
-# {{{ sub _Accessible
-
-
sub _OverlayAccessible {
{
@@ -110,62 +99,9 @@ sub _OverlayAccessible {
-# }}}
-
-# {{{ sub Create
-
=head2 Create { PARAMHASH }
-=begin testing
-
-# Make sure we can create a user
-
-my $u1 = RT::User->new($RT::SystemUser);
-is(ref($u1), 'RT::User');
-my ($id, $msg) = $u1->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-1@example.com');
-ok ($id, "Creating user CreateTest1 - " . $msg );
-
-# Make sure we can't create a second user with the same name
-my $u2 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u2->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-2@example.com');
-ok (!$id, $msg);
-
-
-# Make sure we can't create a second user with the same EmailAddress address
-my $u3 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u3->Create(Name => 'CreateTest2'.$$, EmailAddress => $$.'create-test-1@example.com');
-ok (!$id, $msg);
-
-# Make sure we can create a user with no EmailAddress address
-my $u4 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u4->Create(Name => 'CreateTest3'.$$);
-ok ($id, $msg);
-
-# make sure we can create a second user with no EmailAddress address
-my $u5 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u5->Create(Name => 'CreateTest4'.$$);
-ok ($id, $msg);
-
-# make sure we can create a user with a blank EmailAddress address
-my $u6 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u6->Create(Name => 'CreateTest6'.$$, EmailAddress => '');
-ok ($id, $msg);
-# make sure we can create a second user with a blankEmailAddress address
-my $u7 = RT::User->new($RT::SystemUser);
-($id, $msg) = $u7->Create(Name => 'CreateTest7'.$$, EmailAddress => '');
-ok ($id, $msg);
-
-# Can we change the email address away from from "";
-($id,$msg) = $u7->SetEmailAddress('foo@bar'.$$);
-ok ($id, $msg);
-# can we change the address back to "";
-($id,$msg) = $u7->SetEmailAddress('');
-ok ($id, $msg);
-is ($u7->EmailAddress, '');
-
-
-=end testing
=cut
@@ -185,7 +121,7 @@ sub Create {
#Check the ACL
unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) {
- return ( 0, $self->loc('No permission to create users') );
+ return ( 0, $self->loc('Permission Denied') );
}
@@ -200,9 +136,7 @@ sub Create {
- # Privileged is no longer a column in users
- my $privileged = $args{'Privileged'};
- delete $args{'Privileged'};
+ my $privileged = delete $args{'Privileged'};
if ($args{'CryptedPassword'} ) {
@@ -212,8 +146,8 @@ sub Create {
elsif ( !$args{'Password'} ) {
$args{'Password'} = '*NO-PASSWORD*';
}
- elsif ( length( $args{'Password'} ) < $RT::MinimumPasswordLength ) {
- return ( 0, $self->loc("Password needs to be at least [_1] characters long",$RT::MinimumPasswordLength) );
+ elsif ( length( $args{'Password'} ) < RT->Config->Get('MinimumPasswordLength') ) {
+ return ( 0, $self->loc("Password needs to be at least [_1] characters long",RT->Config->Get('MinimumPasswordLength')) );
}
else {
@@ -223,8 +157,6 @@ sub Create {
#TODO Specify some sensible defaults.
unless ( $args{'Name'} ) {
- use Data::Dumper;
- $RT::Logger->crit(Dumper \%args);
return ( 0, $self->loc("Must specify 'Name' attribute") );
}
@@ -234,8 +166,8 @@ sub Create {
$TempUser->Load( $args{'Name'} );
return ( 0, $self->loc('Name in use') ) if ( $TempUser->Id );
- return ( 0, $self->loc('Email address in use') )
- unless ( $self->ValidateEmailAddress( $args{'EmailAddress'} ) );
+ my ($val, $message) = $self->ValidateEmailAddress( $args{'EmailAddress'} );
+ return (0, $message) unless ( $val );
}
else {
$RT::Logger->warning( "$self couldn't check for pre-existing users");
@@ -324,7 +256,7 @@ sub Create {
if ( $record_transaction ) {
- $self->_NewTransaction( Type => "Create" );
+ $self->_NewTransaction( Type => "Create" );
}
$RT::Handle->Commit;
@@ -332,12 +264,6 @@ sub Create {
return ( $id, $self->loc('User created') );
}
-# }}}
-
-
-
-# {{{ SetPrivileged
-
=head2 SetPrivileged BOOL
If passed a true value, makes this user a member of the "Privileged" PseudoGroup.
@@ -345,20 +271,6 @@ Otherwise, makes this user a member of the "Unprivileged" pseudogroup.
Returns a standard RT tuple of (val, msg);
-=begin testing
-
-
-ok(my $user = RT::User->new($RT::SystemUser));
-ok($user->Load('root'), "Loaded user 'root'");
-ok($user->Privileged, "User 'root' is privileged");
-ok(my ($v,$m) = $user->SetPrivileged(0));
-ok ($v ==1, "Set unprivileged suceeded ($m)");
-ok(!$user->Privileged, "User 'root' is no longer privileged");
-ok(my ($v2,$m2) = $user->SetPrivileged(1));
-ok ($v2 ==1, "Set privileged suceeded ($m2");
-ok($user->Privileged, "User 'root' is privileged again");
-
-=end testing
=cut
@@ -370,9 +282,9 @@ sub SetPrivileged {
unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) {
return ( 0, $self->loc('Permission Denied') );
}
+
my $priv = RT::Group->new($self->CurrentUser);
$priv->LoadSystemInternalGroup('Privileged');
-
unless ($priv->Id) {
$RT::Logger->crit("Could not find Privileged pseudogroup");
return(0,$self->loc("Failed to find 'Privileged' users pseudogroup."));
@@ -385,13 +297,14 @@ sub SetPrivileged {
return(0,$self->loc("Failed to find 'Unprivileged' users pseudogroup"));
}
+ my $principal = $self->PrincipalId;
if ($val) {
- if ($priv->HasMember($self->PrincipalObj)) {
+ if ($priv->HasMember($principal)) {
#$RT::Logger->debug("That user is already privileged");
return (0,$self->loc("That user is already privileged"));
}
- if ($unpriv->HasMember($self->PrincipalObj)) {
- $unpriv->_DeleteMember($self->PrincipalId);
+ if ($unpriv->HasMember($principal)) {
+ $unpriv->_DeleteMember($principal);
} else {
# if we had layered transactions, life would be good
# sadly, we have to just go ahead, even if something
@@ -399,7 +312,7 @@ sub SetPrivileged {
$RT::Logger->crit("User ".$self->Id." is neither privileged nor ".
"unprivileged. something is drastically wrong.");
}
- my ($status, $msg) = $priv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId);
+ my ($status, $msg) = $priv->_AddMember( InsideTransaction => 1, PrincipalId => $principal);
if ($status) {
return (1, $self->loc("That user is now privileged"));
} else {
@@ -407,12 +320,12 @@ sub SetPrivileged {
}
}
else {
- if ($unpriv->HasMember($self->PrincipalObj)) {
+ if ($unpriv->HasMember($principal)) {
#$RT::Logger->debug("That user is already unprivileged");
return (0,$self->loc("That user is already unprivileged"));
}
- if ($priv->HasMember($self->PrincipalObj)) {
- $priv->_DeleteMember( $self->PrincipalId);
+ if ($priv->HasMember($principal)) {
+ $priv->_DeleteMember( $principal );
} else {
# if we had layered transactions, life would be good
# sadly, we have to just go ahead, even if something
@@ -420,7 +333,7 @@ sub SetPrivileged {
$RT::Logger->crit("User ".$self->Id." is neither privileged nor ".
"unprivileged. something is drastically wrong.");
}
- my ($status, $msg) = $unpriv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId);
+ my ($status, $msg) = $unpriv->_AddMember( InsideTransaction => 1, PrincipalId => $principal);
if ($status) {
return (1, $self->loc("That user is now unprivileged"));
} else {
@@ -429,10 +342,6 @@ sub SetPrivileged {
}
}
-# }}}
-
-# {{{ Privileged
-
=head2 Privileged
Returns true if this user is privileged. Returns undef otherwise.
@@ -443,7 +352,7 @@ sub Privileged {
my $self = shift;
my $priv = RT::Group->new($self->CurrentUser);
$priv->LoadSystemInternalGroup('Privileged');
- if ($priv->HasMember($self->PrincipalObj)) {
+ if ( $priv->HasMember( $self->PrincipalId ) ) {
return(1);
}
else {
@@ -451,10 +360,6 @@ sub Privileged {
}
}
-# }}}
-
-# {{{ sub _BootstrapCreate
-
#create a user without validating _any_ data.
#To be used only on database init.
@@ -504,10 +409,6 @@ sub _BootstrapCreate {
return ( $id, 'User created' );
}
-# }}}
-
-# {{{ sub Delete
-
sub Delete {
my $self = shift;
@@ -515,40 +416,35 @@ sub Delete {
}
-# }}}
-
-# {{{ sub Load
-
=head2 Load
Load a user object from the database. Takes a single argument.
-If the argument is numerical, load by the column 'id'. Otherwise, load by
-the "Name" column which is the user's textual username.
+If the argument is numerical, load by the column 'id'. If a user
+object or its subclass passed then loads the same user by id.
+Otherwise, load by the "Name" column which is the user's textual
+username.
=cut
sub Load {
- my $self = shift;
+ my $self = shift;
my $identifier = shift || return undef;
- #if it's an int, load by id. otherwise, load by name.
if ( $identifier !~ /\D/ ) {
- $self->SUPER::LoadById($identifier);
+ return $self->SUPER::LoadById( $identifier );
+ }
+ elsif ( UNIVERSAL::isa( $identifier, 'RT::User' ) ) {
+ return $self->SUPER::LoadById( $identifier->Id );
}
else {
- $self->LoadByCol( "Name", $identifier );
+ return $self->LoadByCol( "Name", $identifier );
}
}
-# }}}
-
-# {{{ sub LoadByEmail
-
=head2 LoadByEmail
Tries to load this user object from the database by the user's email address.
-
=cut
sub LoadByEmail {
@@ -562,18 +458,15 @@ sub LoadByEmail {
$address = $self->CanonicalizeEmailAddress($address);
- #$RT::Logger->debug("Trying to load an email address: $address\n");
+ #$RT::Logger->debug("Trying to load an email address: $address");
return $self->LoadByCol( "EmailAddress", $address );
}
-# }}}
-
-# {{{ LoadOrCreateByEmail
-
=head2 LoadOrCreateByEmail ADDRESS
Attempts to find a user who has the provided email address. If that fails, creates an unprivileged user with
-the provided email address. and loads them.
+the provided email address and loads them. Address can be provided either as L<Email::Address> object
+or string which is parsed using the module.
Returns a tuple of the user's id and a status message.
0 will be returned in place of the user's id in case of failure.
@@ -584,54 +477,45 @@ sub LoadOrCreateByEmail {
my $self = shift;
my $email = shift;
- my ($val, $message);
-
- my ( $Address, $Name ) =
- RT::Interface::Email::ParseAddressFromHeader($email);
- $email = $Address;
-
- $self->LoadByEmail($email);
- $message = $self->loc('User loaded');
- unless ($self->Id) {
- $self->Load($email);
- }
- unless($self->Id) {
- ( $val, $message ) = $self->Create(
- Name => $email,
- EmailAddress => $email,
- RealName => $Name,
- Privileged => 0,
- Comments => 'Autocreated when added as a watcher');
- unless ($val) {
- # Deal with the race condition of two account creations at once
- $self->LoadByEmail($email);
- unless ($self->Id) {
- sleep 5;
- $self->LoadByEmail($email);
- }
- if ($self->Id) {
- $RT::Logger->error("Recovered from creation failure due to race condition");
- $message = $self->loc("User loaded");
- }
- else {
- $RT::Logger->crit("Failed to create user ".$email .": " .$message);
- }
- }
- }
-
- if ($self->Id) {
- return($self->Id, $message);
- }
- else {
- return(0, $message);
- }
-
-
+ my ($message, $name);
+ if ( UNIVERSAL::isa( $email => 'Email::Address' ) ) {
+ ($email, $name) = ($email->address, $email->phrase);
+ } else {
+ ($email, $name) = RT::Interface::Email::ParseAddressFromHeader( $email );
}
-# }}}
+ $self->LoadByEmail( $email );
+ $self->Load( $email ) unless $self->Id;
+ $message = $self->loc('User loaded');
-# {{{ sub ValidateEmailAddress
+ unless( $self->Id ) {
+ my $val;
+ ($val, $message) = $self->Create(
+ Name => $email,
+ EmailAddress => $email,
+ RealName => $name,
+ Privileged => 0,
+ Comments => 'Autocreated when added as a watcher',
+ );
+ unless ( $val ) {
+ # Deal with the race condition of two account creations at once
+ $self->LoadByEmail( $email );
+ unless ( $self->Id ) {
+ sleep 5;
+ $self->LoadByEmail( $email );
+ }
+ if ( $self->Id ) {
+ $RT::Logger->error("Recovered from creation failure due to race condition");
+ $message = $self->loc("User loaded");
+ }
+ else {
+ $RT::Logger->crit("Failed to create user ". $email .": " .$message);
+ }
+ }
+ }
+ return (0, $message) unless $self->id;
+ return ($self->Id, $message);
+}
=head2 ValidateEmailAddress ADDRESS
@@ -647,24 +531,86 @@ sub ValidateEmailAddress {
# if the email address is null, it's always valid
return (1) if ( !$Value || $Value eq "" );
+ if ( RT->Config->Get('ValidateUserEmailAddresses') ) {
+ # We only allow one valid email address
+ my @addresses = Email::Address->parse($Value);
+ return ( 0, $self->loc('Invalid syntax for email address') ) unless ( ( scalar (@addresses) == 1 ) && ( $addresses[0]->address ) );
+ }
+
+
my $TempUser = RT::User->new($RT::SystemUser);
$TempUser->LoadByEmail($Value);
- if ( $TempUser->id && ( $TempUser->id != $self->id ) )
+ if ( $TempUser->id && ( !$self->id || $TempUser->id != $self->id ) )
{ # if we found a user with that address
# it's invalid to set this user's address to it
- return (undef);
+ return ( 0, $self->loc('Email address in use') );
}
else { #it's a valid email address
return (1);
}
}
-# }}}
+=head2 SetEmailAddress
-# {{{ sub CanonicalizeEmailAddress
+Check to make sure someone else isn't using this email address already
+so that a better email address can be returned
+=cut
+sub SetEmailAddress {
+ my $self = shift;
+ my $Value = shift;
+
+ my ($val, $message) = $self->ValidateEmailAddress( $Value );
+ if ( $val ) {
+ return $self->_Set( Field => 'EmailAddress', Value => $Value );
+ } else {
+ return ( 0, $message )
+ }
+
+}
+
+=head2 EmailFrequency
+
+Takes optional Ticket argument in paramhash. Returns 'no email',
+'squelched', 'daily', 'weekly' or empty string depending on
+user preferences.
+
+=over 4
+
+=item 'no email' - user has no email, so can not recieve notifications.
+
+=item 'squelched' - returned only when Ticket argument is provided and
+notifications to the user has been supressed for this ticket.
+
+=item 'daily' - retruned when user recieve daily messages digest instead
+of immediate delivery.
+
+=item 'weekly' - previous, but weekly.
+
+=item empty string returned otherwise.
+
+=back
+
+=cut
+
+sub EmailFrequency {
+ my $self = shift;
+ my %args = (
+ Ticket => undef,
+ @_
+ );
+ return '' unless $self->id && $self->id != $RT::Nobody->id
+ && $self->id != $RT::SystemUser->id;
+ return 'no email' unless my $email = $self->EmailAddress;
+ return 'squelched' if $args{'Ticket'} &&
+ grep lc $email eq lc $_->Content, $args{'Ticket'}->SquelchMailTo;
+ my $frequency = RT->Config->Get( 'EmailFrequency', $self ) || '';
+ return 'daily' if $frequency =~ /daily/i;
+ return 'weekly' if $frequency =~ /weekly/i;
+ return '';
+}
=head2 CanonicalizeEmailAddress ADDRESS
@@ -682,19 +628,14 @@ sub CanonicalizeEmailAddress {
# Example: the following rule would treat all email
# coming from a subdomain as coming from second level domain
# foo.com
- if ($RT::CanonicalizeEmailAddressMatch && $RT::CanonicalizeEmailAddressReplace ) {
- $email =~ s/$RT::CanonicalizeEmailAddressMatch/$RT::CanonicalizeEmailAddressReplace/gi;
+ if ( my $match = RT->Config->Get('CanonicalizeEmailAddressMatch') and
+ my $replace = RT->Config->Get('CanonicalizeEmailAddressReplace') )
+ {
+ $email =~ s/$match/$replace/gi;
}
return ($email);
}
-
-# }}}
-
-# {{{ sub CanonicalizeUserInfo
-
-
-
=head2 CanonicalizeUserInfo HASH of ARGS
CanonicalizeUserInfo can convert all User->Create options.
@@ -715,14 +656,9 @@ sub CanonicalizeUserInfo {
}
-# }}}
-
-
-# {{{ Password related functions
-
-# {{{ sub SetRandomPassword
+=head2 Password and authentication related functions
-=head2 SetRandomPassword
+=head3 SetRandomPassword
Takes no arguments. Returns a status code and a new password or an error message.
If the status is 1, the second value returned is the new password.
@@ -738,8 +674,8 @@ sub SetRandomPassword {
}
- my $min = ( $RT::MinimumPasswordLength > 6 ? $RT::MinimumPasswordLength : 6);
- my $max = ( $RT::MinimumPasswordLength > 8 ? $RT::MinimumPasswordLength : 8);
+ my $min = ( RT->Config->Get('MinimumPasswordLength') > 6 ? RT->Config->Get('MinimumPasswordLength') : 6);
+ my $max = ( RT->Config->Get('MinimumPasswordLength') > 8 ? RT->Config->Get('MinimumPasswordLength') : 8);
my $pass = $self->GenerateRandomPassword( $min, $max) ;
@@ -755,11 +691,7 @@ sub SetRandomPassword {
}
-# }}}
-
-# {{{ sub ResetPassword
-
-=head2 ResetPassword
+=head3 ResetPassword
Returns status, [ERROR or new password]. Resets this user\'s password to
a randomly generated pronouncable password and emails them, using a
@@ -781,38 +713,13 @@ sub ResetPassword {
return ( 0, "$pass" );
}
- my $template = RT::Template->new( $self->CurrentUser );
-
- if ( $self->Privileged ) {
- $template->LoadGlobalTemplate('RT_PasswordChange_Privileged');
- }
- else {
- $template->LoadGlobalTemplate('RT_PasswordChange_NonPrivileged');
- }
-
- unless ( $template->Id ) {
- $template->LoadGlobalTemplate('RT_PasswordChange');
- }
-
- unless ( $template->Id ) {
- $RT::Logger->crit( "$self tried to send "
- . $self->Name
- . " a password reminder "
- . "but couldn't find a password change template" );
- }
-
- my $notification = RT::Action::SendPasswordEmail->new(
- TemplateObj => $template,
- Argument => $pass
- );
-
- $notification->SetHeader( 'To', $self->EmailAddress );
-
- my ($ret);
- $ret = $notification->Prepare();
- if ($ret) {
- $ret = $notification->Commit();
- }
+ my $ret = RT::Interface::Email::SendEmailUsingTemplate(
+ To => $self->EmailAddress,
+ Template => 'PasswordChange',
+ Arguments => {
+ NewPassword => $pass,
+ },
+ );
if ($ret) {
return ( 1, $self->loc('New password notification sent') );
@@ -823,11 +730,7 @@ sub ResetPassword {
}
-# }}}
-
-# {{{ sub GenerateRandomPassword
-
-=head2 GenerateRandomPassword MIN_LEN and MAX_LEN
+=head3 GenerateRandomPassword MIN_LEN and MAX_LEN
Returns a random password between MIN_LEN and MAX_LEN characters long.
@@ -1013,11 +916,7 @@ sub _GenerateRandomNextChar {
return ($i);
}
-# }}}
-
-# {{{ sub SetPassword
-
-=head2 SetPassword
+=head3 SetPassword
Takes a string. Checks the string's length and sets this user's password
to that string.
@@ -1035,8 +934,8 @@ sub SetPassword {
if ( !$password ) {
return ( 0, $self->loc("No password set") );
}
- elsif ( length($password) < $RT::MinimumPasswordLength ) {
- return ( 0, $self->loc("Password needs to be at least [_1] characters long", $RT::MinimumPasswordLength) );
+ elsif ( length($password) < RT->Config->Get('MinimumPasswordLength') ) {
+ return ( 0, $self->loc("Password needs to be at least [_1] characters long", RT->Config->Get('MinimumPasswordLength')) );
}
else {
my $new = !$self->HasPassword;
@@ -1053,7 +952,7 @@ sub SetPassword {
}
-=head2 _GeneratePassword PASSWORD
+=head3 _GeneratePassword PASSWORD
returns an MD5 hash of the password passed in, in hexadecimal encoding.
@@ -1069,7 +968,7 @@ sub _GeneratePassword {
}
-=head2 _GeneratePasswordBase64 PASSWORD
+=head3 _GeneratePasswordBase64 PASSWORD
returns an MD5 hash of the password passed in, in base64 encoding
(obsoleted now).
@@ -1086,16 +985,12 @@ sub _GeneratePasswordBase64 {
}
-# }}}
-
-
-=head2 HasPassword
+=head3 HasPassword
Returns true if the user has a valid password, otherwise returns false.
=cut
-
sub HasPassword {
my $self = shift;
my $pwd = $self->__Value('Password');
@@ -1105,10 +1000,7 @@ sub HasPassword {
return 1;
}
-
-# {{{ sub IsPassword
-
-=head2 IsPassword
+=head3 IsPassword
Returns true if the passed in value is this user's password.
Returns undef otherwise.
@@ -1155,13 +1047,80 @@ sub IsPassword {
return (undef);
}
-# }}}
+=head3 AuthToken
-# }}}
+Returns an authentication string associated with the user. This
+string can be used to generate passwordless URLs to integrate
+RT with services and programms like callendar managers, rss
+readers and other.
-# {{{ sub SetDisabled
+=cut
+
+sub AuthToken {
+ my $self = shift;
+ my $secret = $self->FirstAttribute("AuthToken");
+ return $secret->Content if $secret;
+
+ my $id = $self->id;
+ $self = RT::User->new( $RT::SystemUser );
+ $self->Load( $id );
+ $secret = substr(Digest::MD5::md5_hex(time . {} . rand()),0,16);
+ my ($status, $msg) = $self->SetAttribute( Name => "AuthToken", Content => $secret );
+ unless ( $status ) {
+ $RT::Logger->error( "Couldn't set auth token: $msg" );
+ return undef;
+ }
+ return $secret;
+}
+
+=head3 GenerateAuthToken
+
+Generate a random authentication string for the user.
+
+=cut
+
+sub GenerateAuthToken {
+ my $self = shift;
+ my $token = substr(Digest::MD5::md5_hex(time . {} . rand()),0,16);
+ return $self->SetAttribute( Name => "AuthToken", Content => $token );
+}
+
+=head3 GenerateAuthString
+
+Takes a string and returns back a hex hash string. Later you can use
+this pair to make sure it's generated by this user using L</ValidateAuthString>
+
+=cut
+
+sub GenerateAuthString {
+ my $self = shift;
+ my $protect = shift;
+
+ my $str = $self->AuthToken . $protect;
+ utf8::encode($str);
+
+ return substr(Digest::MD5::md5_hex($str),0,16);
+}
+
+=head3 ValidateAuthString
+
+Takes auth string and protected string. Returns true is protected string
+has been protected by user's L</AuthToken>. See also L</GenerateAuthString>.
-=head2 Sub SetDisabled
+=cut
+
+sub ValidateAuthString {
+ my $self = shift;
+ my $auth_string = shift;
+ my $protected = shift;
+
+ my $str = $self->AuthToken . $protected;
+ utf8::encode( $str );
+
+ return $auth_string eq substr(Digest::MD5::md5_hex($str),0,16);
+}
+
+=head2 SetDisabled
Toggles the user's disabled flag.
If this flag is
@@ -1170,53 +1129,69 @@ user will fail. The user will appear in no user listings.
=cut
-# }}}
-
sub SetDisabled {
my $self = shift;
+ my $val = shift;
unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) {
return (0, $self->loc('Permission Denied'));
}
- return $self->PrincipalObj->SetDisabled(@_);
+
+ $RT::Handle->BeginTransaction();
+ my $set_err = $self->PrincipalObj->SetDisabled($val);
+ unless ($set_err) {
+ $RT::Handle->Rollback();
+ $RT::Logger->warning(sprintf("Couldn't %s user %s", ($val == 1) ? "disable" : "enable", $self->PrincipalObj->Id));
+ return (undef);
+ }
+ $self->_NewTransaction( Type => ($val == 1) ? "Disabled" : "Enabled" );
+
+ $RT::Handle->Commit();
+
+ if ( $val == 1 ) {
+ return (1, $self->loc("User disabled"));
+ } else {
+ return (1, $self->loc("User enabled"));
+ }
+
}
+=head2 Disabled
+
+Returns true if user is disabled or false otherwise
+
+=cut
+
sub Disabled {
my $self = shift;
return $self->PrincipalObj->Disabled(@_);
}
-
-# {{{ Principal related routines
-
=head2 PrincipalObj
Returns the principal object for this user. returns an empty RT::Principal
if there's no principal object matching this user.
The response is cached. PrincipalObj should never ever change.
-=begin testing
-
-ok(my $u = RT::User->new($RT::SystemUser));
-ok($u->Load(1), "Loaded the first user");
-ok($u->PrincipalObj->ObjectId == 1, "user 1 is the first principal");
-is($u->PrincipalObj->PrincipalType, 'User' , "Principal 1 is a user, not a group");
-
-=end testing
-
=cut
-
sub PrincipalObj {
my $self = shift;
- unless ($self->{'PrincipalObj'} &&
- ($self->{'PrincipalObj'}->ObjectId == $self->Id) &&
- ($self->{'PrincipalObj'}->PrincipalType eq 'User')) {
- $self->{'PrincipalObj'} = RT::Principal->new($self->CurrentUser);
- $self->{'PrincipalObj'}->LoadByCols('ObjectId' => $self->Id,
- 'PrincipalType' => 'User') ;
- }
- return($self->{'PrincipalObj'});
+ unless ( $self->id ) {
+ $RT::Logger->error("Couldn't get principal for not loaded object");
+ return undef;
+ }
+
+ my $obj = RT::Principal->new( $self->CurrentUser );
+ $obj->LoadById( $self->id );
+ unless ( $obj->id ) {
+ $RT::Logger->crit( 'No principal for user #'. $self->id );
+ return undef;
+ } elsif ( $obj->PrincipalType ne 'User' ) {
+ $RT::Logger->crit( 'User #'. $self->id .' has principal of '. $obj->PrincipalType .' type' );
+ return undef;
+ }
+ return $obj;
}
@@ -1231,12 +1206,6 @@ sub PrincipalId {
return $self->Id;
}
-# }}}
-
-
-
-# {{{ sub HasGroupRight
-
=head2 HasGroupRight
Takes a paramhash which can contain
@@ -1267,14 +1236,11 @@ sub HasGroupRight {
$args{'GroupObj'}->Load( $args{'Group'} );
}
- # {{{ Validate and load up the GroupId
+ # Validate and load up the GroupId
unless ( ( defined $args{'GroupObj'} ) and ( $args{'GroupObj'}->Id ) ) {
return undef;
}
- # }}}
-
-
# Figure out whether a user has the right we're asking about.
my $retval = $self->HasRight(
Object => $args{'GroupObj'},
@@ -1282,14 +1248,8 @@ sub HasGroupRight {
);
return ($retval);
-
-
}
-# }}}
-
-# {{{ sub OwnGroups
-
=head2 OwnGroups
Returns a group collection object containing the groups of which this
@@ -1302,272 +1262,21 @@ sub OwnGroups {
my $groups = RT::Groups->new($self->CurrentUser);
$groups->LimitToUserDefinedGroups;
$groups->WithMember(PrincipalId => $self->Id,
- Recursively => 1);
+ Recursively => 1);
return $groups;
}
-# }}}
-
-# {{{ sub Rights testing
-
-=head1 Rights testing
-
-
-=begin testing
-
-my $root = RT::User->new($RT::SystemUser);
-$root->Load('root');
-ok($root->Id, "Found the root user");
-my $rootq = RT::Queue->new($root);
-$rootq->Load(1);
-ok($rootq->Id, "Loaded the first queue");
-
-ok ($rootq->CurrentUser->HasRight(Right=> 'CreateTicket', Object => $rootq), "Root can create tickets");
-
-my $new_user = RT::User->new($RT::SystemUser);
-my ($id, $msg) = $new_user->Create(Name => 'ACLTest'.$$);
-
-ok ($id, "Created a new user for acl test $msg");
-
-my $q = RT::Queue->new($new_user);
-$q->Load(1);
-ok($q->Id, "Loaded the first queue");
-
-
-ok (!$q->CurrentUser->HasRight(Right => 'CreateTicket', Object => $q), "Some random user doesn't have the right to create tickets");
-ok (my ($gval, $gmsg) = $new_user->PrincipalObj->GrantRight( Right => 'CreateTicket', Object => $q), "Granted the random user the right to create tickets");
-ok ($gval, "Grant succeeded - $gmsg");
-
-
-ok ($q->CurrentUser->HasRight(Right => 'CreateTicket', Object => $q), "The user can create tickets after we grant him the right");
-ok (my ($gval, $gmsg) = $new_user->PrincipalObj->RevokeRight( Right => 'CreateTicket', Object => $q), "revoked the random user the right to create tickets");
-ok ($gval, "Revocation succeeded - $gmsg");
-ok (!$q->CurrentUser->HasRight(Right => 'CreateTicket', Object => $q), "The user can't create tickets anymore");
-
-
-
-
-
-# Create a ticket in the queue
-my $new_tick = RT::Ticket->new($RT::SystemUser);
-my ($tickid, $tickmsg) = $new_tick->Create(Subject=> 'ACL Test', Queue => 'General');
-ok($tickid, "Created ticket: $tickid");
-# Make sure the user doesn't have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
-# Create a new group
-my $group = RT::Group->new($RT::SystemUser);
-$group->CreateUserDefinedGroup(Name => 'ACLTest'.$$);
-ok($group->Id, "Created a new group Ok");
-# Grant a group the right to modify tickets in a queue
-ok(my ($gv,$gm) = $group->PrincipalObj->GrantRight( Object => $q, Right => 'ModifyTicket'),"Granted the group the right to modify tickets");
-ok($gv,"Grant succeeed - $gm");
-# Add the user to the group
-ok( my ($aid, $amsg) = $group->AddMember($new_user->PrincipalId), "Added the member to the group");
-ok ($aid, "Member added to group: $amsg");
-# Make sure the user does have the right to modify tickets in the queue
-ok ($new_user->HasRight( Object => $new_tick, Right => 'ModifyTicket'), "User can modify the ticket with group membership");
-
-
-# Remove the user from the group
-ok( my ($did, $dmsg) = $group->DeleteMember($new_user->PrincipalId), "Deleted the member from the group");
-ok ($did,"Deleted the group member: $dmsg");
-# Make sure the user doesn't have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
-
-
-my $q_as_system = RT::Queue->new($RT::SystemUser);
-$q_as_system->Load(1);
-ok($q_as_system->Id, "Loaded the first queue");
-
-# Create a ticket in the queue
-my $new_tick2 = RT::Ticket->new($RT::SystemUser);
-my ($tick2id, $tickmsg) = $new_tick2->Create(Subject=> 'ACL Test 2', Queue =>$q_as_system->Id);
-ok($tick2id, "Created ticket: $tick2id");
-is($new_tick2->QueueObj->id, $q_as_system->Id, "Created a new ticket in queue 1");
-
-
-# make sure that the user can't do this without subgroup membership
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
-
-# Create a subgroup
-my $subgroup = RT::Group->new($RT::SystemUser);
-$subgroup->CreateUserDefinedGroup(Name => 'Subgrouptest',$$);
-ok($subgroup->Id, "Created a new group ".$subgroup->Id."Ok");
-#Add the subgroup as a subgroup of the group
-my ($said, $samsg) = $group->AddMember($subgroup->PrincipalId);
-ok ($said, "Added the subgroup as a member of the group");
-# Add the user to a subgroup of the group
-
-my ($usaid, $usamsg) = $subgroup->AddMember($new_user->PrincipalId);
-ok($usaid,"Added the user ".$new_user->Id."to the subgroup");
-# Make sure the user does have the right to modify tickets in the queue
-ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket with subgroup membership");
-
-# {{{ Deal with making sure that members of subgroups of a disabled group don't have rights
-
-my ($id, $msg);
-($id, $msg) = $group->SetDisabled(1);
-ok ($id,$msg);
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket when the group ".$group->Id. " is disabled");
- ($id, $msg) = $group->SetDisabled(0);
-ok($id,$msg);
-# Test what happens when we disable the group the user is a member of directly
-
-($id, $msg) = $subgroup->SetDisabled(1);
- ok ($id,$msg);
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket when the group ".$subgroup->Id. " is disabled");
- ($id, $msg) = $subgroup->SetDisabled(0);
- ok ($id,$msg);
-ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket without group membership");
-
-# }}}
-
-
-my ($usrid, $usrmsg) = $subgroup->DeleteMember($new_user->PrincipalId);
-ok($usrid,"removed the user from the group - $usrmsg");
-# Make sure the user doesn't have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
-
-#revoke the right to modify tickets in a queue
-ok(($gv,$gm) = $group->PrincipalObj->RevokeRight( Object => $q, Right => 'ModifyTicket'),"Granted the group the right to modify tickets");
-ok($gv,"revoke succeeed - $gm");
-
-# {{{ Test the user's right to modify a ticket as a _queue_ admincc for a right granted at the _queue_ level
-
-# Grant queue admin cc the right to modify ticket in the queue
-ok(my ($qv,$qm) = $q_as_system->AdminCc->PrincipalObj->GrantRight( Object => $q_as_system, Right => 'ModifyTicket'),"Granted the queue adminccs the right to modify tickets");
-ok($qv, "Granted the right successfully - $qm");
-
-# Add the user as a queue admincc
-ok ((my $add_id, $add_msg) = $q_as_system->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
-ok ($add_id, "the user is now a queue admincc - $add_msg");
-
-# Make sure the user does have the right to modify tickets in the queue
-ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
-# Remove the user from the role group
-ok ((my $del_id, $del_msg) = $q_as_system->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
-
-# Make sure the user doesn't have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
-
-# }}}
-
-# {{{ Test the user's right to modify a ticket as a _ticket_ admincc with the right granted at the _queue_ level
-
-# Add the user as a ticket admincc
-ok ((my $uadd_id, $uadd_msg) = $new_tick2->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
-ok ($add_id, "the user is now a queue admincc - $add_msg");
-
-# Make sure the user does have the right to modify tickets in the queue
-ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
-
-# Remove the user from the role group
-ok ((my $del_id, $del_msg) = $new_tick2->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
-
-# Make sure the user doesn't have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
-
-
-# Revoke the right to modify ticket in the queue
-ok(my ($rqv,$rqm) = $q_as_system->AdminCc->PrincipalObj->RevokeRight( Object => $q_as_system, Right => 'ModifyTicket'),"Revokeed the queue adminccs the right to modify tickets");
-ok($rqv, "Revoked the right successfully - $rqm");
-
-# }}}
-
-
-
-# {{{ Test the user's right to modify a ticket as a _queue_ admincc for a right granted at the _system_ level
-
-# Before we start Make sure the user does not have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can not modify the ticket without it being granted");
-ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue without it being granted");
-
-# Grant queue admin cc the right to modify ticket in the queue
-ok(my ($qv,$qm) = $q_as_system->AdminCc->PrincipalObj->GrantRight( Object => $RT::System, Right => 'ModifyTicket'),"Granted the queue adminccs the right to modify tickets");
-ok($qv, "Granted the right successfully - $qm");
-
-# Make sure the user can't modify the ticket before they're added as a watcher
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can not modify the ticket without being an admincc");
-ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue without being an admincc");
-
-# Add the user as a queue admincc
-ok ((my $add_id, $add_msg) = $q_as_system->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
-ok ($add_id, "the user is now a queue admincc - $add_msg");
-
-# Make sure the user does have the right to modify tickets in the queue
-ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
-ok ($new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can modify tickets in the queue as an admincc");
-# Remove the user from the role group
-ok ((my $del_id, $del_msg) = $q_as_system->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
-
-# Make sure the user doesn't have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
-ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can't modify tickets in the queue without group membership");
-
-# }}}
-
-# {{{ Test the user's right to modify a ticket as a _ticket_ admincc with the right granted at the _queue_ level
-
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can not modify the ticket without being an admincc");
-ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue obj without being an admincc");
-
-
-# Add the user as a ticket admincc
-ok ((my $uadd_id, $uadd_msg) = $new_tick2->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
-ok ($add_id, "the user is now a queue admincc - $add_msg");
-
-# Make sure the user does have the right to modify tickets in the queue
-ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
-ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue obj being only a ticket admincc");
-
-# Remove the user from the role group
-ok ((my $del_id, $del_msg) = $new_tick2->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
-
-# Make sure the user doesn't have the right to modify tickets in the queue
-ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without being an admincc");
-ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue obj without being an admincc");
-
-
-# Revoke the right to modify ticket in the queue
-ok(my ($rqv,$rqm) = $q_as_system->AdminCc->PrincipalObj->RevokeRight( Object => $RT::System, Right => 'ModifyTicket'),"Revokeed the queue adminccs the right to modify tickets");
-ok($rqv, "Revoked the right successfully - $rqm");
-
-# }}}
-
-
-
-
-# Grant "privileged users" the system right to create users
-# Create a privileged user.
-# have that user create another user
-# Revoke the right for privileged users to create users
-# have the privileged user try to create another user and fail the ACL check
-
-=end testing
-
-=cut
-
-# }}}
-
-
-# {{{ sub HasRight
-
=head2 HasRight
-Shim around PrincipalObj->HasRight. See RT::Principal
+Shim around PrincipalObj->HasRight. See L<RT::Principal>.
=cut
sub HasRight {
-
my $self = shift;
return $self->PrincipalObj->HasRight(@_);
}
-# }}}
-
-# {{{ sub CurrentUserCanModify
-
=head2 CurrentUserCanModify RIGHT
If the user has rights for this object, either because
@@ -1605,10 +1314,6 @@ sub CurrentUserCanModify {
}
-# }}}
-
-# {{{ sub CurrentUserHasRight
-
=head2 CurrentUserHasRight
Takes a single argument. returns 1 if $Self->CurrentUser
@@ -1626,19 +1331,17 @@ sub CurrentUserHasRight {
sub _PrefName {
my $name = shift;
if (ref $name) {
- $name = ref ($name).'-'.$name->Id;
+ $name = ref($name).'-'.$name->Id;
}
return 'Pref-'.$name;
}
-# {{{ sub Preferences
-
=head2 Preferences NAME/OBJ DEFAULT
- Obtain user preferences associated with given object or name.
- Returns DEFAULT if no preferences found. If DEFAULT is a hashref,
- override the entries with user preferences.
+Obtain user preferences associated with given object or name.
+Returns DEFAULT if no preferences found. If DEFAULT is a hashref,
+override the entries with user preferences.
=cut
@@ -1647,53 +1350,49 @@ sub Preferences {
my $name = _PrefName (shift);
my $default = shift;
- my $attr = RT::Attribute->new ($self->CurrentUser);
- $attr->LoadByNameAndObject (Object => $self, Name => $name);
+ my $attr = RT::Attribute->new( $self->CurrentUser );
+ $attr->LoadByNameAndObject( Object => $self, Name => $name );
my $content = $attr->Id ? $attr->Content : undef;
- if (ref ($content) eq 'HASH') {
- if (ref ($default) eq 'HASH') {
- for (keys %$default) {
- exists $content->{$_} or $content->{$_} = $default->{$_};
- }
- }
- elsif (defined $default) {
- $RT::Logger->error("Preferences $name for user".$self->Id." is hash but default is not");
- }
- return $content;
+ unless ( ref $content eq 'HASH' ) {
+ return defined $content ? $content : $default;
}
- else {
- return defined $content ? $content : $default;
+
+ if (ref $default eq 'HASH') {
+ for (keys %$default) {
+ exists $content->{$_} or $content->{$_} = $default->{$_};
+ }
}
+ elsif (defined $default) {
+ $RT::Logger->error("Preferences $name for user".$self->Id." is hash but default is not");
+ }
+ return $content;
}
-# }}}
-
-# {{{ sub SetPreferences
-
=head2 SetPreferences NAME/OBJ VALUE
- Set user preferences associated with given object or name.
+Set user preferences associated with given object or name.
=cut
sub SetPreferences {
- my $self = shift;
- my $name = _PrefName (shift);
+ my $self = shift;
+ my $name = _PrefName( shift );
my $value = shift;
- my $attr = RT::Attribute->new ($self->CurrentUser);
- $attr->LoadByNameAndObject (Object => $self, Name => $name);
- if ($attr->Id) {
- return $attr->SetContent ($value);
+
+ return (0, $self->loc("No permission to set preferences"))
+ unless $self->CurrentUserCanModify('Preferences');
+
+ my $attr = RT::Attribute->new( $self->CurrentUser );
+ $attr->LoadByNameAndObject( Object => $self, Name => $name );
+ if ( $attr->Id ) {
+ return $attr->SetContent( $value );
}
else {
- return $self->AddAttribute ( Name => $name, Content => $value );
+ return $self->AddAttribute( Name => $name, Content => $value );
}
}
-# }}}
-
-
=head2 WatchedQueues ROLE_LIST
Returns a RT::Queues object containing every queue watched by the user.
@@ -1763,9 +1462,6 @@ sub WatchedQueues {
}
-
-# {{{ sub _CleanupInvalidDelegations
-
=head2 _CleanupInvalidDelegations { InsideTransaction => undef }
Revokes all ACE entries delegated by this user which are inconsistent
@@ -1788,63 +1484,59 @@ and logs an internal error if the deletion fails (should not happen).
sub _CleanupInvalidDelegations {
my $self = shift;
my %args = ( InsideTransaction => undef,
- @_ );
+ @_ );
unless ( $self->Id ) {
- $RT::Logger->warning("User not loaded.");
- return (undef);
+ $RT::Logger->warning("User not loaded.");
+ return (undef);
}
my $in_trans = $args{InsideTransaction};
return(1) if ($self->HasRight(Right => 'DelegateRights',
- Object => $RT::System));
+ Object => $RT::System));
# Look up all delegation rights currently posessed by this user.
my $deleg_acl = RT::ACL->new($RT::SystemUser);
$deleg_acl->LimitToPrincipal(Type => 'User',
- Id => $self->PrincipalId,
- IncludeGroupMembership => 1);
+ Id => $self->PrincipalId,
+ IncludeGroupMembership => 1);
$deleg_acl->Limit( FIELD => 'RightName',
- OPERATOR => '=',
- VALUE => 'DelegateRights' );
+ OPERATOR => '=',
+ VALUE => 'DelegateRights' );
my @allowed_deleg_objects = map {$_->Object()}
- @{$deleg_acl->ItemsArrayRef()};
+ @{$deleg_acl->ItemsArrayRef()};
# Look up all rights delegated by this principal which are
# inconsistent with the allowed delegation objects.
my $acl_to_del = RT::ACL->new($RT::SystemUser);
$acl_to_del->DelegatedBy(Id => $self->Id);
foreach (@allowed_deleg_objects) {
- $acl_to_del->LimitNotObject($_);
+ $acl_to_del->LimitNotObject($_);
}
# Delete all disallowed delegations
while ( my $ace = $acl_to_del->Next() ) {
- my $ret = $ace->_Delete(InsideTransaction => 1);
- unless ($ret) {
- $RT::Handle->Rollback() unless $in_trans;
- $RT::Logger->warning("Couldn't delete delegated ACL entry ".$ace->Id);
- return (undef);
- }
+ my $ret = $ace->_Delete(InsideTransaction => 1);
+ unless ($ret) {
+ $RT::Handle->Rollback() unless $in_trans;
+ $RT::Logger->warning("Couldn't delete delegated ACL entry ".$ace->Id);
+ return (undef);
+ }
}
$RT::Handle->Commit() unless $in_trans;
return (1);
}
-# }}}
-
-# {{{ sub _Set
-
sub _Set {
my $self = shift;
my %args = (
Field => undef,
Value => undef,
- TransactionType => 'Set',
- RecordTransaction => 1,
+ TransactionType => 'Set',
+ RecordTransaction => 1,
@_
);
@@ -1861,7 +1553,7 @@ sub _Set {
my $Old = $self->SUPER::_Value("$args{'Field'}");
my ($ret, $msg) = $self->SUPER::_Set( Field => $args{'Field'},
- Value => $args{'Value'} );
+ Value => $args{'Value'} );
#If we can't actually set the field to the value, don't record
# a transaction. instead, get out of here.
@@ -1883,10 +1575,6 @@ sub _Set {
}
}
-# }}}
-
-# {{{ sub _Value
-
=head2 _Value
Takes the name of a table column.
@@ -1914,7 +1602,7 @@ sub _Value {
#If the user wants to see their own values, let them
# TODO figure ouyt a better way to deal with this
- elsif ( $self->CurrentUser->Id == $self->Id ) {
+ elsif ( defined($self->Id) && $self->CurrentUser->Id == $self->Id ) {
return ( $self->SUPER::_Value($field) );
}
@@ -1928,14 +1616,96 @@ sub _Value {
}
-# }}}
+=head2 FriendlyName
+
+Return the friendly name
+
+=cut
+
+sub FriendlyName {
+ my $self = shift;
+ return $self->RealName if defined($self->RealName);
+ return $self->Name if defined($self->Name);
+ return "";
+}
+
+=head2 PreferredKey
+
+Returns the preferred key of the user. If none is set, then this will query
+GPG and set the preferred key to the maximally trusted key found (and then
+return it). Returns C<undef> if no preferred key can be found.
+
+=cut
+
+sub PreferredKey
+{
+ my $self = shift;
+ return undef unless RT->Config->Get('GnuPG')->{'Enable'};
+ my $prefkey = $self->FirstAttribute('PreferredKey');
+ return $prefkey->Content if $prefkey;
+
+ # we don't have a preferred key for this user, so now we must query GPG
+ require RT::Crypt::GnuPG;
+ my %res = RT::Crypt::GnuPG::GetKeysForEncryption($self->EmailAddress);
+ return undef unless defined $res{'info'};
+ my @keys = @{ $res{'info'} };
+ return undef if @keys == 0;
+
+ if (@keys == 1) {
+ $prefkey = $keys[0]->{'Fingerprint'};
+ }
+ else {
+ # prefer the maximally trusted key
+ @keys = sort { $b->{'TrustLevel'} <=> $a->{'TrustLevel'} } @keys;
+ $prefkey = $keys[0]->{'Fingerprint'};
+ }
+
+ $self->SetAttribute(Name => 'PreferredKey', Content => $prefkey);
+ return $prefkey;
+}
+
+sub PrivateKey {
+ my $self = shift;
+
+ my $key = $self->FirstAttribute('PrivateKey') or return undef;
+ return $key->Content;
+}
+
+sub SetPrivateKey {
+ my $self = shift;
+ my $key = shift;
+ # XXX: ACL
+ unless ( $key ) {
+ my ($status, $msg) = $self->DeleteAttribute('PrivateKey');
+ unless ( $status ) {
+ $RT::Logger->error( "Couldn't delete attribute: $msg" );
+ return ($status, $self->loc("Couldn't unset private key"));
+ }
+ return ($status, $self->loc("Unset private key"));
+ }
+
+ # check that it's really private key
+ {
+ my %tmp = RT::Crypt::GnuPG::GetKeysForSigning( $key );
+ return (0, $self->loc("No such key or it's not suitable for signing"))
+ if $tmp{'exit_code'} || !$tmp{'info'};
+ }
+
+ my ($status, $msg) = $self->SetAttribute(
+ Name => 'PrivateKey',
+ Content => $key,
+ );
+ return ($status, $self->loc("Couldn't set private key"))
+ unless $status;
+ return ($status, $self->loc("Unset private key"));
+}
sub BasicColumns {
(
- [ Name => 'User Id' ],
- [ EmailAddress => 'Email' ],
- [ RealName => 'Name' ],
- [ Organization => 'Organization' ],
+ [ Name => 'User Id' ],
+ [ EmailAddress => 'Email' ],
+ [ RealName => 'Name' ],
+ [ Organization => 'Organization' ],
);
}
diff --git a/rt/lib/RT/Users.pm b/rt/lib/RT/Users.pm
index 8d57484..3a6eeff 100755
--- a/rt/lib/RT/Users.pm
+++ b/rt/lib/RT/Users.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
diff --git a/rt/lib/RT/Users_Overlay.pm b/rt/lib/RT/Users_Overlay.pm
index 96621e3..a2d235c 100644
--- a/rt/lib/RT/Users_Overlay.pm
+++ b/rt/lib/RT/Users_Overlay.pm
@@ -1,8 +1,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -45,6 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Users - Collection of RT::User objects
@@ -59,11 +60,6 @@
=head1 METHODS
-=begin testing
-
-ok(require RT::Users);
-
-=end testing
=cut
@@ -232,68 +228,6 @@ sub LimitToPrivileged {
=head2 WhoHaveRight { Right => 'name', Object => $rt_object , IncludeSuperusers => undef, IncludeSubgroupMembers => undef, IncludeSystemRights => undef, EquivObjects => [ ] }
-=begin testing
-
-ok(my $users = RT::Users->new($RT::SystemUser));
-$users->WhoHaveRight(Object =>$RT::System, Right =>'SuperUser');
-ok($users->Count == 1, "There is one privileged superuser - Found ". $users->Count );
-# TODO: this wants more testing
-
-my $RTxUser = RT::User->new($RT::SystemUser);
-($id, $msg) = $RTxUser->Create( Name => 'RTxUser', Comments => "RTx extension user", Privileged => 1);
-ok ($id,$msg);
-
-my $group = RT::Group->new($RT::SystemUser);
-$group->LoadACLEquivalenceGroup($RTxUser->PrincipalObj);
-
-my $RTxSysObj = {};
-bless $RTxSysObj, 'RTx::System';
-*RTx::System::Id = sub { 1; };
-*RTx::System::id = *RTx::System::Id;
-my $ace = RT::Record->new($RT::SystemUser);
-$ace->Table('ACL');
-$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)});
-($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System', ObjectId => 1 );
-ok ($id, "ACL for RTxSysObj created");
-
-my $RTxObj = {};
-bless $RTxObj, 'RTx::System::Record';
-*RTx::System::Record::Id = sub { 4; };
-*RTx::System::Record::id = *RTx::System::Record::Id;
-
-$users = RT::Users->new($RT::SystemUser);
-$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxSysObj);
-is($users->Count, 1, "RTxUserRight found for RTxSysObj");
-
-$users = RT::Users->new($RT::SystemUser);
-$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj);
-is($users->Count, 0, "RTxUserRight not found for RTxObj");
-
-$users = RT::Users->new($RT::SystemUser);
-$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]);
-is($users->Count, 1, "RTxUserRight found for RTxObj using EquivObjects");
-
-$ace = RT::Record->new($RT::SystemUser);
-$ace->Table('ACL');
-$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)});
-($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System::Record', ObjectId => 5 );
-ok ($id, "ACL for RTxObj created");
-
-my $RTxObj2 = {};
-bless $RTxObj2, 'RTx::System::Record';
-*RTx::System::Record::Id = sub { 5; };
-*RTx::System::Record::id = sub { 5; };
-
-$users = RT::Users->new($RT::SystemUser);
-$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2);
-is($users->Count, 1, "RTxUserRight found for RTxObj2");
-
-$users = RT::Users->new($RT::SystemUser);
-$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]);
-is($users->Count, 1, "RTxUserRight found for RTxObj2");
-
-
-=end testing
find all users who the right Right for this group, either individually
or as members of groups
@@ -363,6 +297,16 @@ sub _JoinACL
@_,
);
+ if ( $args{'Right'} ) {
+ my $canonic = RT::ACE->CanonicalizeRightName( $args{'Right'} );
+ unless ( $canonic ) {
+ $RT::Logger->error("Invalid right. Couldn't canonicalize right '$args{'Right'}'");
+ }
+ else {
+ $args{'Right'} = $canonic;
+ }
+ }
+
my $acl = $self->NewAlias('ACL');
$self->Limit(
ALIAS => $acl,
@@ -403,7 +347,7 @@ sub _GetEquivObjects
# XXX: This should be abstracted into object itself
if( $args{'Object'}->id ) {
- push @objects, $args{'Object'}->QueueObj;
+ push @objects, $args{'Object'}->ACLEquivalenceObjects;
} else {
push @objects, 'RT::Queue';
}
diff --git a/rt/lib/RT/Util.pm b/rt/lib/RT/Util.pm
new file mode 100644
index 0000000..dd15721
--- /dev/null
+++ b/rt/lib/RT/Util.pm
@@ -0,0 +1,89 @@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+package RT::Util;
+use strict;
+use warnings;
+
+use base 'Exporter';
+our @EXPORT = qw/safe_run_child/;
+
+sub safe_run_child (&) {
+ local @ENV{ 'LANG', 'LC_ALL' } = ( 'C', 'C' );
+
+ return shift->() if $ENV{'MOD_PERL'} || $CGI::SpeedyCGI::i_am_speedy;
+
+ # We need to reopen stdout temporarily, because in FCGI
+ # environment, stdout is tied to FCGI::Stream, and the child
+ # of the run3 wouldn't be able to reopen STDOUT properly.
+ my $stdin = IO::Handle->new;
+ $stdin->fdopen( 0, 'r' );
+ local *STDIN = $stdin;
+
+ my $stdout = IO::Handle->new;
+ $stdout->fdopen( 1, 'w' );
+ local *STDOUT = $stdout;
+
+ my $stderr = IO::Handle->new;
+ $stderr->fdopen( 2, 'w' );
+ local *STDERR = $stderr;
+
+ return shift->();
+}
+
+eval "require RT::Util_Vendor";
+if ($@ && $@ !~ qr{^Can't locate RT/Util_Vendor.pm}) {
+ die $@;
+};
+
+eval "require RT::Util_Local";
+if ($@ && $@ !~ qr{^Can't locate RT/Util_Local.pm}) {
+ die $@;
+};
+
+1;
diff --git a/rt/m4/rt_layout.m4 b/rt/m4/rt_layout.m4
index c92a108..fbb2890 100644
--- a/rt/m4/rt_layout.m4
+++ b/rt/m4/rt_layout.m4
@@ -27,7 +27,7 @@ AC_DEFUN([RT_LAYOUT],[
s/\s+$/\n/gim;
s/\+$/\/rt3/gim;
# m4 will not let us just use $1, we need @S|@1
-# s/^((?:bin|sbin|libexec|data|sysconf|sharedstate|localstate|lib|include|oldinclude|info|man)dir)\s*:\s*(.*)$/@S|@1=@S|@2/gim;
+# s/^((?:bin|sbin|libexec|data|sysconf|sharedstate|localstate|lib|include|oldinclude|plugin|info|man)dir)\s*:\s*(.*)$/@S|@1=@S|@2/gim;
# uh, should be [:=], but m4 apparently substitutes something...
s/^(.*?)\s*(?::|=)\s*(.*)$/\(test "x\@S|@@S|@1" = "xNONE" || test "x\@S|@@S|@1" = "x") && @S|@1=@S|@2/gim;
' < $1 > $pldconf
@@ -38,7 +38,7 @@ AC_DEFUN([RT_LAYOUT],[
changequote({,})
for var in prefix exec_prefix bindir sbindir \
sysconfdir mandir libdir datadir htmldir \
- localstatedir logfiledir masonstatedir \
+ localstatedir logfiledir masonstatedir plugindir \
sessionstatedir customdir custometcdir customhtmldir \
customlexdir customlibdir manualdir; do
eval "val=\"\$$var\""
@@ -63,6 +63,7 @@ AC_DEFUN([RT_LAYOUT],[
RT_SUBST_EXPANDED_ARG(datadir)
RT_SUBST_EXPANDED_ARG(htmldir)
RT_SUBST_EXPANDED_ARG(manualdir)
+ RT_SUBST_EXPANDED_ARG(plugindir)
RT_SUBST_EXPANDED_ARG(localstatedir)
RT_SUBST_EXPANDED_ARG(logfiledir)
RT_SUBST_EXPANDED_ARG(masonstatedir)
diff --git a/rt/sbin/extract-message-catalog b/rt/sbin/extract-message-catalog
index 44f8d51..ce151bd 100644
--- a/rt/sbin/extract-message-catalog
+++ b/rt/sbin/extract-message-catalog
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -59,12 +59,17 @@ use vars qw($DEBUG $FILECAT);
$DEBUG = 1;
-@ARGV = <lib/RT/I18N/*.po> unless @ARGV;
+# po dir is for extensions
+@ARGV = (<lib/RT/I18N/*.po>, <lib/RT/I18N/*.pot>, <po/*.po>, <po/*.pot>) unless @ARGV;
$FILECAT = {};
# extract all strings and stuff them into $FILECAT
-File::Find::find( { wanted => \&extract_strings_from_code, follow => 1 }, '.' );
+# scan html dir for extensions
+File::Find::find( { wanted => \&extract_strings_from_code, follow => 1 }, qw(bin sbin lib share html etc) );
+
+# remove msgid with $ in it. XXX: perhaps give some warnings here
+$FILECAT = { map { $_ => $FILECAT->{$_} } grep { !m/\$/ } keys %$FILECAT };
# ensure proper escaping and [_1] => %1 transformation
foreach my $str ( sort keys %{$FILECAT} ) {
@@ -83,11 +88,13 @@ foreach my $str ( sort keys %{$FILECAT} ) {
# update all language dictionaries
foreach my $dict (@ARGV) {
+ $dict = "lib/RT/I18N/$dict.pot" if ( $dict eq 'rt' );
$dict = "lib/RT/I18N/$dict.po" unless -f $dict or $dict =~ m!/!;
my $lang = $dict;
$lang =~ s|.*/||;
$lang =~ s|\.po$||;
+ $lang =~ s|\.pot$||;
update($lang, $dict);
}
@@ -101,7 +108,8 @@ sub extract_strings_from_code {
local $/;
return if ( -d $_ );
return if ( $File::Find::dir =~ 'lib/blib|lib/t/autogen|var|m4|local' );
- return if ( /\.po$|\.bak$|~|,D|,B$|extract-message-catalog$/ );
+ return if ( /\.(?:pot|po|bak|gif|png|psd|jpe?g|svg|css|js)$/ );
+ return if ( /~|,D|,B$|extract-message-catalog$|tweak-template-locstring$/ );
return if ( /^[\.#]/ );
return if ( -f "$_.in" );
@@ -115,12 +123,20 @@ sub extract_strings_from_code {
return;
}
+ my $re_space_wo_nl = qr{(?!\n)\s};
+ my $re_loc_suffix = qr{$re_space_wo_nl* \# $re_space_wo_nl* loc $re_space_wo_nl* $}x;
+ my $re_loc_qw_suffix = qr{$re_space_wo_nl* \# $re_space_wo_nl* loc_qw $re_space_wo_nl* $}x;
+ my $re_loc_pair_suffix = qr{$re_space_wo_nl* \# $re_space_wo_nl* loc_pair $re_space_wo_nl* $}x;
+ my $re_loc_left_pair_suffix = qr{$re_space_wo_nl* \# $re_space_wo_nl* loc_left_pair $re_space_wo_nl* $}x;
+ my $re_delim = $RE{delimited}{-delim=>q{'"}}{-keep};
+
$_ = <_>;
# Mason filter: <&|/l>...</&>
my $line = 1;
while (m!\G.*?<&\|/l(.*?)&>(.*?)</&>!sg) {
my ( $vars, $str ) = ( $1, $2 );
+ $vars =~ s/[\n\r]//g;
$line += ( () = ( $& =~ /\n/g ) ); # cryptocontext!
$str =~ s/\\'/\'/g;
#print "STR IS $str\n";
@@ -136,7 +152,7 @@ sub extract_strings_from_code {
my ( $vars, $str );
if ( $match =~
- /\(\s*($RE{delimited}{-delim=>q{'"}}{-keep})(.*?)\s*\)$/s ) {
+ /\(\s*($re_delim)(.*?)\s*\)$/so ) {
$str = substr( $1, 1, -1 ); # $str comes before $vars now
$vars = $9;
@@ -154,20 +170,59 @@ sub extract_strings_from_code {
# Comment-based mark: "..." # loc
$line = 1;
pos($_) = 0;
- while (m/\G.*?($RE{delimited}{-delim=>q{'"}}{-keep})[\}\)\],]*\s*\#\s*loc\s*$/smg) {
- my $str = substr($1, 1, -1);
+ while (m/\G.*?($re_delim)[\}\)\],;]*$re_loc_suffix/smgo) {
+ my $str = $1;
$line += ( () = ( $& =~ /\n/g ) ); # cryptocontext!
- $str =~ s/\\'/\'/g;
+ unless ( defined $str ) {
+ warn "Couldn't process loc at $filename:$line";
+ next;
+ }
+ $str = substr($str, 1, -1);
+ $str =~ s/\\'/\'/g;
push @{ $FILECAT->{$str} }, [ $filename, $line, '' ];
}
+ # Comment-based qw mark: "qw(...)" # loc_qw
+ $line = 1;
+ pos($_) = 0;
+ while (m/\G.*?(?:(qw\([^)]+\))[\}\)\],;]*)?$re_loc_qw_suffix/smgo) {
+ my $str = $1;
+ $line += ( () = ( $& =~ /\n/g ) ); # cryptocontext!
+ unless ( defined $str ) {
+ warn "Couldn't process loc_qw at $filename:$line";
+ next;
+ }
+ foreach my $value (eval($str)) {
+ push @{ $FILECAT->{$value} }, [ $filename, $line, '' ];
+ }
+ }
+
+ # Comment-based left pair mark: "..." => ... # loc_left_pair
+ $line = 1;
+ pos($_) = 0;
+ while (m/\G.*?(?:(\w+)\s*=>[^#\n]+?)?$re_loc_left_pair_suffix/smgo) {
+ my $key = $1;
+ $line += ( () = ( $& =~ /\n/g ) ); # cryptocontext!
+ unless ( defined $key ) {
+ warn "Couldn't process loc_left_pair at $filename:$line";
+ next;
+ }
+ $key =~ s/\\'/\'/g;
+ push @{ $FILECAT->{$key} }, [ $filename, $line, '' ];
+ }
+
# Comment-based pair mark: "..." => "..." # loc_pair
$line = 1;
pos($_) = 0;
- while (m/\G.*?(\w+)\s*=>\s*($RE{delimited}{-delim=>q{'"}}{-keep})[\}\)\],]*\s*\#\s*loc_pair\s*$/smg) {
+ while (m/\G.*?(?:(\w+)\s*=>\s*($re_delim)[\}\)\],;]*)?$re_loc_pair_suffix/smgo) {
my $key = $1;
- my $val = substr($2, 1, -1);
+ my $val = $2;
$line += ( () = ( $& =~ /\n/g ) ); # cryptocontext!
+ unless ( defined $key && defined $val ) {
+ warn "Couldn't process loc_pair at $filename:$line";
+ next;
+ }
+ $val = substr($val, 1, -1);
$key =~ s/\\'/\'/g;
$val =~ s/\\'/\'/g;
push @{ $FILECAT->{$key} }, [ $filename, $line, '' ];
@@ -196,19 +251,52 @@ sub update {
@lines = grep { !/^(#(:|\.)\s*|$)/ } @lines;
while (@lines) {
my $msghdr = "";
- $msghdr .= shift @lines while ( $lines[0] && $lines[0] !~ /^msgid/ );
+ $msghdr .= shift @lines while ( $lines[0] && $lines[0] !~ /^(#~ )?msgid/ );
my $msgid = "";
- $msgid .= shift @lines while ( $lines[0] && $lines[0] =~ /^(msgid|")/ );
+
+# '#~ ' is the prefix of launchpad for msg that's not found the the source
+# we'll remove the prefix later so we can still show them with our own mark
+
+ $msgid .= shift @lines while ( $lines[0] && $lines[0] =~ /^(#~ )?(msgid|")/ );
my $msgstr = "";
- $msgstr .= shift @lines while ( $lines[0] && $lines[0] =~ /^(msgstr|")/ );
+ $msgstr .= shift @lines while ( $lines[0] && $lines[0] =~ /^(#~ )?(msgstr|")/ );
last unless $msgid;
chomp $msgid;
chomp $msgstr;
- $msgid =~ s/^msgid "(.*)"\s*?$/$1/ms or warn "$msgid in $file";
- $msgstr =~ s/^msgstr "(.*)"\s*?$/$1/ms or warn "$msgstr in $file";
+
+ $msgid =~ s/^#~ //mg;
+ $msgstr =~ s/^#~ //mg;
+
+ $msgid =~ s/^msgid "(.*)"\s*?$/$1/m or warn "$msgid in $file";
+
+ if ( $msgid eq '' ) {
+ # null msgid, msgstr will have head info
+ $msgstr =~ s/^msgstr "(.*)"\s*?$/$1/ms or warn "$msgstr in $file";
+ }
+ else {
+ $msgstr =~ s/^msgstr "(.*)"\s*?$/$1/m or warn "$msgstr in $file";
+ }
+
+ if ( $msgid ne '' ) {
+ for my $msg ( \$msgid, \$msgstr ) {
+ if ( $$msg =~ /\n/ ) {
+ my @lines = split /\n/, $$msg;
+ $$msg =
+ shift @lines; # first line don't need to handle any more
+ for (@lines) {
+ if (/^"(.*)"\s*$/) {
+ $$msg .= $1;
+ }
+ }
+ }
+
+ # convert \\n back to \n
+ $$msg =~ s/(?!\\)\\n/\n/g;
+ }
+ }
$Lexicon{$msgid} = $msgstr;
$Header{$msgid} = $msghdr;
@@ -217,7 +305,7 @@ sub update {
my $is_english = ( $lang =~ /^en(?:[^A-Za-z]|$)/ );
foreach my $str ( sort keys %{$FILECAT} ) {
- $Lexicon{$str} ||= '';;
+ $Lexicon{$str} ||= '';
}
foreach ( sort keys %Lexicon ) {
my $f = join ( ' ', sort map $_->[0].":".$_->[1], @{ $FILECAT->{$_} } );
@@ -250,7 +338,7 @@ sub update {
$var =~ s/\s*$//;
$out .= "#. ($var)\n" unless $seen{$var}++;
}
- $out .= "msgid \"$_\"\nmsgstr \"$Lexicon{$_}\"\n\n";
+ $out .= 'msgid ' . fmt($_) . "msgstr \"$Lexicon{$_}\"\n\n";
}
open PO, ">$file" or die $!;
@@ -266,6 +354,23 @@ sub escape {
return $text;
}
+sub fmt {
+ my $str = shift;
+ return "\"$str\"\n" unless $str =~ /\n/;
+
+ my $multi_line = ($str =~ /\n(?!\z)/);
+ $str =~ s/\n/\\n"\n"/g;
+
+ if ($str =~ /\n"$/) {
+ chop $str;
+ }
+ else {
+ $str .= "\"\n";
+ }
+ return $multi_line ? qq(""\n"$str) : qq("$str);
+}
+
+
__END__
# Local variables:
# c-indentation-style: bsd
diff --git a/rt/sbin/factory b/rt/sbin/factory
index 6b2d896..78a0159 100644
--- a/rt/sbin/factory
+++ b/rt/sbin/factory
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -49,6 +49,8 @@
use strict;
use DBI;
+die "Usage: $0 database namespace" if @ARGV != 2;
+
my $database = shift;
my $namespace = shift;
@@ -65,8 +67,8 @@ my $LicenseBlock = << '.';
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -86,7 +88,9 @@ my $LicenseBlock = << '.';
#
# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+# 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:
@@ -110,6 +114,7 @@ my $LicenseBlock = << '.';
.
my $Attribution = << '.';
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -124,7 +129,7 @@ my $dsn = "DBI:$driver:database=$database;host=$hostname";
my $dbh = DBI->connect( $dsn, $user, $password );
#get all tables out of database
-my @tables = $dbh->tables();
+my @tables = map { s/^\`\Q$database\E\`\.//; $_ } $dbh->tables();
my ( %tablemap, $typemap, %modulemap );
diff --git a/rt/sbin/license_tag b/rt/sbin/license_tag
index ddb4368..f638db6 100644
--- a/rt/sbin/license_tag
+++ b/rt/sbin/license_tag
@@ -4,8 +4,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -51,8 +51,8 @@
my $LICENSE = <<'EOL';
COPYRIGHT:
-
-This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+
+This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
<jesse@bestpractical.com>
(Except where explicitly superseded by other copyright notices)
@@ -101,7 +101,7 @@ use File::Find;
my @MAKE = qw(Makefile);
File::Find::find({ no_chdir => 1, wanted => \&tag_pm}, 'lib');
-File::Find::find({ no_chdir => 1, wanted => \&tag_mason}, 'html');
+File::Find::find({ no_chdir => 1, wanted => \&tag_mason}, 'share/html');
File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'sbin');
File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'bin');
tag_makefile ('Makefile.in');
@@ -110,16 +110,16 @@ tag_makefile ('README');
sub tag_mason {
my $pm = $_;
- next unless (-f $pm);
- next if ($pm =~ /images/);
+ return unless (-f $pm);
+ return if $pm =~ /images/ || $pm =~ /\.(?:png|jpe?g|gif)$/;
open(FILE,"<$pm") || die "Failed to open $pm";
my $file = (join "", <FILE>);
close (FILE);
+ print "$pm - ";
+ return if another_license($pm => $file) && print "has different license\n";
+
my $pmlic = $LICENSE;
$pmlic =~ s/^/%# /mg;
-
-
- print "$pm - ";
if ($file =~ /^%# BEGIN BPS TAGGED BLOCK {{{/ms) {
print "has license section";
$file =~ s/^%# BEGIN BPS TAGGED BLOCK {{{(.*?)%# END BPS TAGGED BLOCK }}}/%# BEGIN BPS TAGGED BLOCK {{{\n$pmlic%# END BPS TAGGED BLOCK }}}/ms;
@@ -147,11 +147,11 @@ sub tag_makefile {
open(FILE,"<$pm") || die "Failed to open $pm";
my $file = (join "", <FILE>);
close (FILE);
+ print "$pm - ";
+ return if another_license($pm => $file) && print "has different license\n";
+
my $pmlic = $LICENSE;
$pmlic =~ s/^/# /mg;
-
-
- print "$pm - ";
if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) {
print "has license section";
$file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}/ms;
@@ -180,11 +180,11 @@ sub tag_pm {
open(FILE,"<$pm") || die "Failed to open $pm";
my $file = (join "", <FILE>);
close (FILE);
+ print "$pm - ";
+ return if another_license($pm => $file) && print "has different license\n";
+
my $pmlic = $LICENSE;
$pmlic =~ s/^/# /mg;
-
-
- print "$pm - ";
if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) {
print "has license section";
$file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}/ms;
@@ -194,7 +194,7 @@ sub tag_pm {
print "no license section";
$file ="# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}\n". $file;
}
- $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n/mg;
+ $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n\n/mg;
print "\n";
@@ -213,10 +213,11 @@ sub tag_script {
open(FILE,"<$pm") || die "Failed to open $pm";
my $file = (join "", <FILE>);
close (FILE);
+ print "$pm - ";
+ return if another_license($pm => $file) && print "has different license\n";
+
my $pmlic = $LICENSE;
$pmlic =~ s/^/# /msg;
-
- print "$pm - ";
if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) {
print "has license section";
$file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}/ms;
@@ -241,3 +242,15 @@ sub tag_script {
}
+sub another_license {
+ my $name = shift;
+ my $file = shift;
+
+ return 1 if ($name =~ /(?:FCKEditor|scriptaculous)/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
+ return 1 if $file =~ /\(c\)\s+\d\d\d\d(?:-\d\d\d\d)?/i; # prototype
+ return 0;
+}
+
diff --git a/rt/sbin/merge-rosetta.pl b/rt/sbin/merge-rosetta.pl
new file mode 100644
index 0000000..1c4b903
--- /dev/null
+++ b/rt/sbin/merge-rosetta.pl
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use LWP::Simple 'getstore';
+use Locale::PO;
+use Locale::Maketext::Extract;
+use Archive::Extract;
+use File::Temp;
+use File::Copy 'copy';
+
+my $url = shift or die 'must provide rosseta download url or directory';
+
+my $dir;
+
+if ($url =~ m/http/) {
+ $dir = File::Temp::tempdir;
+ my ($fname) = $url =~ m{([^/]+)$};
+ print "Downloading $url\n";
+ getstore($url => "$dir/$fname");
+ print "Extracting $dir/$fname\n";
+ my $ae = Archive::Extract->new(archive => "$dir/$fname");
+ my $ok = $ae->extract( to => $dir );
+}
+else {
+ $dir = $url;
+}
+
+Locale::Maketext::Lexicon::set_option('use_fuzzy', 1);
+Locale::Maketext::Lexicon::set_option('allow_empty', 1);
+
+for (<$dir/rt/*.po>) {
+ my ($name) = m/([\w_]+)\.po/;
+ my $fname = "lib/RT/I18N/$name";
+ my $tmp = File::Temp->new;
+
+ print "$_ -> $fname.po\n";
+
+ # retain the "NOT FOUND IN SOURCE" entries
+ system("sed -e 's/^#~ //' $_ > $tmp");
+ my $ext = Locale::Maketext::Extract->new;
+ $ext->read_po($tmp);
+
+ my $po_orig = Locale::PO->load_file_ashash("$fname.po");
+ # don't want empty vales to override ours.
+ # don't want fuzzy flag as when uploading to rosetta again it's not accepted by rosetta.
+ foreach my $msgid ($ext->msgids) {
+ my $entry = $po_orig->{Locale::PO->quote($msgid)} or next;
+ my $msgstr = $entry->dequote($entry->{msgstr}) or next;
+ $ext->set_msgstr($msgid, $msgstr)
+ if $ext->msgstr($msgid) eq '' && $msgstr;
+ }
+ $ext->write_po("$fname.po");
+}
+
+print "Merging new strings\n";
+system("$^X sbin/extract-message-catalog");
diff --git a/rt/sbin/rt-attributes-viewer b/rt/sbin/rt-attributes-viewer
new file mode 100755
index 0000000..3dad3ae
--- /dev/null
+++ b/rt/sbin/rt-attributes-viewer
@@ -0,0 +1,110 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+}
+
+my $id = shift;
+usage() unless $id;
+
+sub usage {
+ print STDERR <<END;
+Usage: $0 <attribute id>
+
+Description:
+
+This script deserializes and print content of an attribute defined
+by <attribute id>. May be useful for developers and for troubleshooting
+problems.
+
+END
+ exit 1;
+}
+
+require RT;
+RT::LoadConfig();
+RT::Init();
+
+require RT::Attribute;
+my $attr = RT::Attribute->new( do { no warnings 'once'; $RT::SystemUser } );
+$attr->Load( $id );
+unless ( $attr->id ) {
+ print STDERR "Couldn't load attribute #$id\n";
+ exit 1;
+}
+
+my %res = ();
+$res{$_} = $attr->$_() foreach qw(ObjectType ObjectId Name Description Content ContentType);
+
+use Data::Dumper;
+print "Content of attribute #$id: ". Dumper( \%res );
+
diff --git a/rt/sbin/rt-attributes-viewer.in b/rt/sbin/rt-attributes-viewer.in
new file mode 100644
index 0000000..a511289
--- /dev/null
+++ b/rt/sbin/rt-attributes-viewer.in
@@ -0,0 +1,110 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+}
+
+my $id = shift;
+usage() unless $id;
+
+sub usage {
+ print STDERR <<END;
+Usage: $0 <attribute id>
+
+Description:
+
+This script deserializes and print content of an attribute defined
+by <attribute id>. May be useful for developers and for troubleshooting
+problems.
+
+END
+ exit 1;
+}
+
+require RT;
+RT::LoadConfig();
+RT::Init();
+
+require RT::Attribute;
+my $attr = RT::Attribute->new( do { no warnings 'once'; $RT::SystemUser } );
+$attr->Load( $id );
+unless ( $attr->id ) {
+ print STDERR "Couldn't load attribute #$id\n";
+ exit 1;
+}
+
+my %res = ();
+$res{$_} = $attr->$_() foreach qw(ObjectType ObjectId Name Description Content ContentType);
+
+use Data::Dumper;
+print "Content of attribute #$id: ". Dumper( \%res );
+
diff --git a/rt/sbin/rt-clean-sessions b/rt/sbin/rt-clean-sessions
new file mode 100755
index 0000000..0092a48
--- /dev/null
+++ b/rt/sbin/rt-clean-sessions
@@ -0,0 +1,190 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+}
+
+use Getopt::Long;
+my %opt;
+GetOptions( \%opt, "older=s", "debug", "help", "skip-user");
+
+
+if ( $opt{help} ) {
+ require Pod::Usage;
+ import Pod::Usage;
+ pod2usage({ -message => "RT Session cleanup tool\n", verbose => 1 });
+ exit 1;
+}
+
+
+if( $opt{'older'} ) {
+ unless( $opt{'older'} =~ /^\s*([0-9]+)\s*(H|D|M|Y)?$/i ) {
+ print STDERR "wrong format of the 'older' argumnet\n";
+ exit(1);
+ }
+ my ($num,$unit) = ($1, uc($2 ||'D'));
+ my %factor = ( H => 60*60 );
+ $factor{'D'} = $factor{'H'}*24;
+ $factor{'M'} = $factor{'D'}*31;
+ $factor{'Y'} = $factor{'D'}*365;
+ $opt{'older'} = $num * $factor{ $unit };
+}
+
+require RT;
+RT::LoadConfig();
+
+if( $opt{'debug'} ) {
+ RT->Config->Set( LogToScreen => 'debug' );
+} else {
+ RT->Config->Set( LogToScreen => undef );
+}
+
+RT::ConnectToDatabase();
+RT::InitLogging();
+
+require RT::Interface::Web::Session;
+
+if( $opt{'older'} or my $alogoff = int RT->Config->Get('AutoLogoff') ) {
+ my $min;
+ foreach ($alogoff*60, $opt{'older'}) {
+ next unless $_;
+ $min = $_ unless $min;
+ $min = $_ if $_ < $min;
+ }
+
+ RT::Interface::Web::Session->ClearOld( $min );
+}
+
+RT::Interface::Web::Session->ClearByUser
+ unless $opt{'skip-user'};
+
+exit(0);
+
+__END__
+
+=head1 NAME
+
+rt-clean-sessions - clean old and duplicate RT sessions
+
+=head1 SYNOPSIS
+
+ rt-clean-sessions [--debug] [--older <NUM>[H|D|M|Y]]
+
+ rt-clean sessions
+ rt-clean sessions --debug
+ rt-clean sessions --older 10D
+ rt-clean sessions --debug --older 1M
+ rt-clean sessions --older 10D --skip-user
+
+=head1 DESCRIPTION
+
+Script cleans RT sessions from DB or dir with sessions data.
+Leaves in DB only one session per RT user and sessions that aren't older
+than specified(see options).
+
+Script is safe because data in the sessions is temporary and can be deleted.
+
+=head1 OPTIONS
+
+=over 4
+
+=item older
+
+Date interval in the C<< <NUM>[<unit>] >> format. Default unit is D(ays),
+H(our), M(onth) and Y(ear) are also supported.
+
+For exmaple: C<rt-clean sessions --older 1M> would delete all sessions that are
+older than 1 month.
+
+=item skip-user
+
+By default only one session per user left in the DB, so users that have
+sessions on multiple computers or in different browsers will be logged out.
+Use this option to avoid this.
+
+=item debug
+
+Turn on debug output.
+
+=back
+
+=head1 NOTES
+
+Functionality similar to this is implemented in
+html/Elements/SetupSessionCookie ; however, that does not guarantee
+that a session will be removed from disk and database soon after the
+timeout expires. This script, if run from a cron job, will ensure
+that the timed out sessions are actually removed from disk; the Mason
+component just ensures that the old sessions are not reusable before
+the cron job gets to them.
+
+=cut
diff --git a/rt/sbin/rt-clean-sessions.in b/rt/sbin/rt-clean-sessions.in
new file mode 100644
index 0000000..ac736e6
--- /dev/null
+++ b/rt/sbin/rt-clean-sessions.in
@@ -0,0 +1,190 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+}
+
+use Getopt::Long;
+my %opt;
+GetOptions( \%opt, "older=s", "debug", "help", "skip-user");
+
+
+if ( $opt{help} ) {
+ require Pod::Usage;
+ import Pod::Usage;
+ pod2usage({ -message => "RT Session cleanup tool\n", verbose => 1 });
+ exit 1;
+}
+
+
+if( $opt{'older'} ) {
+ unless( $opt{'older'} =~ /^\s*([0-9]+)\s*(H|D|M|Y)?$/i ) {
+ print STDERR "wrong format of the 'older' argumnet\n";
+ exit(1);
+ }
+ my ($num,$unit) = ($1, uc($2 ||'D'));
+ my %factor = ( H => 60*60 );
+ $factor{'D'} = $factor{'H'}*24;
+ $factor{'M'} = $factor{'D'}*31;
+ $factor{'Y'} = $factor{'D'}*365;
+ $opt{'older'} = $num * $factor{ $unit };
+}
+
+require RT;
+RT::LoadConfig();
+
+if( $opt{'debug'} ) {
+ RT->Config->Set( LogToScreen => 'debug' );
+} else {
+ RT->Config->Set( LogToScreen => undef );
+}
+
+RT::ConnectToDatabase();
+RT::InitLogging();
+
+require RT::Interface::Web::Session;
+
+if( $opt{'older'} or my $alogoff = int RT->Config->Get('AutoLogoff') ) {
+ my $min;
+ foreach ($alogoff*60, $opt{'older'}) {
+ next unless $_;
+ $min = $_ unless $min;
+ $min = $_ if $_ < $min;
+ }
+
+ RT::Interface::Web::Session->ClearOld( $min );
+}
+
+RT::Interface::Web::Session->ClearByUser
+ unless $opt{'skip-user'};
+
+exit(0);
+
+__END__
+
+=head1 NAME
+
+rt-clean-sessions - clean old and duplicate RT sessions
+
+=head1 SYNOPSIS
+
+ rt-clean-sessions [--debug] [--older <NUM>[H|D|M|Y]]
+
+ rt-clean sessions
+ rt-clean sessions --debug
+ rt-clean sessions --older 10D
+ rt-clean sessions --debug --older 1M
+ rt-clean sessions --older 10D --skip-user
+
+=head1 DESCRIPTION
+
+Script cleans RT sessions from DB or dir with sessions data.
+Leaves in DB only one session per RT user and sessions that aren't older
+than specified(see options).
+
+Script is safe because data in the sessions is temporary and can be deleted.
+
+=head1 OPTIONS
+
+=over 4
+
+=item older
+
+Date interval in the C<< <NUM>[<unit>] >> format. Default unit is D(ays),
+H(our), M(onth) and Y(ear) are also supported.
+
+For exmaple: C<rt-clean sessions --older 1M> would delete all sessions that are
+older than 1 month.
+
+=item skip-user
+
+By default only one session per user left in the DB, so users that have
+sessions on multiple computers or in different browsers will be logged out.
+Use this option to avoid this.
+
+=item debug
+
+Turn on debug output.
+
+=back
+
+=head1 NOTES
+
+Functionality similar to this is implemented in
+html/Elements/SetupSessionCookie ; however, that does not guarantee
+that a session will be removed from disk and database soon after the
+timeout expires. This script, if run from a cron job, will ensure
+that the timed out sessions are actually removed from disk; the Mason
+component just ensures that the old sessions are not reusable before
+the cron job gets to them.
+
+=cut
diff --git a/rt/sbin/rt-dump-database b/rt/sbin/rt-dump-database
index 647781d..6175a10 100755
--- a/rt/sbin/rt-dump-database
+++ b/rt/sbin/rt-dump-database
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -48,8 +48,30 @@
# END BPS TAGGED BLOCK }}}
use strict;
-use lib "/opt/rt3/local/lib";
-use lib "/opt/rt3/lib";
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
use RT;
use XML::Simple;
@@ -117,7 +139,7 @@ foreach my $class (@classes) {
# next if $obj-> # skip default names
foreach my $field (sort keys %fields) {
my $value = $obj->__Value($field);
- $rv->{$field} = $value if length($value);
+ $rv->{$field} = $value if ( defined ($value) && length($value) );
}
delete $rv->{Disabled} unless $rv->{Disabled};
diff --git a/rt/sbin/rt-dump-database.in b/rt/sbin/rt-dump-database.in
index 10670a2..878a209 100755
--- a/rt/sbin/rt-dump-database.in
+++ b/rt/sbin/rt-dump-database.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -48,8 +48,30 @@
# END BPS TAGGED BLOCK }}}
use strict;
-use lib "@LOCAL_LIB_PATH@";
-use lib "@RT_LIB_PATH@";
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
use RT;
use XML::Simple;
@@ -117,7 +139,7 @@ foreach my $class (@classes) {
# next if $obj-> # skip default names
foreach my $field (sort keys %fields) {
my $value = $obj->__Value($field);
- $rv->{$field} = $value if length($value);
+ $rv->{$field} = $value if ( defined ($value) && length($value) );
}
delete $rv->{Disabled} unless $rv->{Disabled};
diff --git a/rt/sbin/rt-email-dashboards b/rt/sbin/rt-email-dashboards
new file mode 100755
index 0000000..d46e0fe
--- /dev/null
+++ b/rt/sbin/rt-email-dashboards
@@ -0,0 +1,568 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT;
+use RT::Interface::Web;
+use RT::Interface::Web::Handler;
+use RT::Dashboard;
+use RT::Interface::CLI qw{ CleanEnv loc };
+
+use Getopt::Long;
+use HTML::Mason;
+use HTML::RewriteAttributes::Resources;
+use HTML::RewriteAttributes::Links;
+use MIME::Types;
+use POSIX 'tzset';
+use File::Temp 'tempdir';
+
+# Clean out all the nasties from the environment
+CleanEnv();
+
+# Load the config file
+RT::LoadConfig();
+
+# Connect to the database and get RT::SystemUser and RT::Nobody loaded
+RT::Init();
+
+$HTML::Mason::Commands::r = RT::Dashboard::FakeRequest->new;
+
+no warnings 'once';
+
+# Read in the options
+my %opts;
+GetOptions( \%opts,
+ "help", "dryrun", "verbose", "debug", "epoch=i", "all", "skip-acl"
+);
+
+if ($opts{'help'}) {
+ require Pod::Usage;
+ import Pod::Usage;
+ pod2usage(-message => "RT Email Dashboards\n", -verbose => 1);
+ exit 1;
+}
+
+# helper functions
+sub verbose { print loc(@_), "\n" if $opts{debug} || $opts{verbose}; 1 }
+sub debug { print loc(@_), "\n" if $opts{debug}; 1 }
+sub error { $RT::Logger->error(loc(@_)); verbose(@_); 1 }
+sub warning { $RT::Logger->warning(loc(@_)); verbose(@_); 1 }
+
+my $now = $opts{epoch} || time;
+verbose "Using time [_1]", scalar localtime($now);
+
+my $from = get_from();
+debug "Sending email from [_1]", $from;
+
+# look through each user for her subscriptions
+my $Users = RT::Users->new($RT::SystemUser);
+$Users->LimitToPrivileged;
+
+while (defined(my $user = $Users->Next)) {
+ if ($user->PrincipalObj->Disabled) {
+ debug "Skipping over "
+ . $user->Name
+ . " due to having a disabled account.";
+ next;
+ }
+
+ my ($hour, $dow, $dom) = hour_dow_dom_in($user->Timezone || RT->Config->Get('Timezone'));
+ $hour .= ':00';
+ debug "Checking [_1]'s subscriptions: hour [_2], dow [_3], dom [_4]",
+ $user->Name, $hour, $dow, $dom;
+
+ my $currentuser = RT::CurrentUser->new;
+ $currentuser->LoadByName($user->Name);
+
+ # look through this user's subscriptions, are any supposed to be generated
+ # right now?
+ for my $subscription ($user->Attributes->Named('Subscription')) {
+ my $counter = $subscription->SubValue('Counter') || 0;
+
+ if (!$opts{all}) {
+ debug "Checking against subscription with frequency [_1], hour [_2], dow [_3], dom [_4]",
+ $subscription->SubValue('Frequency'), $subscription->SubValue('Hour'),
+ $subscription->SubValue('Dow'), $subscription->SubValue('Dom');
+
+ next if $subscription->SubValue('Frequency') eq 'never';
+
+ # correct hour?
+ next if $subscription->SubValue('Hour') ne $hour;
+
+ # if weekly, correct day of week?
+ if ( $subscription->SubValue('Frequency') eq 'weekly' ) {
+ next if $subscription->SubValue('Dow') ne $dow;
+ my $fow = $subscription->SubValue('Fow') || 1;
+ if ( $counter % $fow ) {
+ $subscription->SetSubValues( Counter => $counter + 1 )
+ unless $opts{'dryrun'};
+ next;
+ }
+ }
+
+ # if monthly, correct day of month?
+ elsif ($subscription->SubValue('Frequency') eq 'monthly') {
+ next if $subscription->SubValue('Dom') != $dom;
+ }
+
+ elsif ($subscription->SubValue('Frequency') eq 'm-f') {
+ next if $dow eq 'Sunday' || $dow eq 'Saturday';
+ }
+ }
+
+ my $email = $subscription->SubValue('Recipient')
+ || $user->EmailAddress;
+
+ eval { send_dashboard($currentuser, $email, $subscription) };
+ if ( $@ ) {
+ error 'Caught exception: ' . $@;
+ }
+ else {
+ $subscription->SetSubValues(
+ Counter => $counter + 1 )
+ unless $opts{'dryrun'};
+ }
+ }
+}
+
+sub send_dashboard {
+ my ($currentuser, $email, $subscription) = @_;
+
+ my $rows = $subscription->SubValue('Rows');
+
+ my $dashboard = RT::Dashboard->new($currentuser);
+
+ my ($ok, $msg) = $dashboard->LoadById($subscription->SubValue('DashboardId'));
+
+ # failed to load dashboard. perhaps it was deleted or it changed privacy
+ if (!$ok) {
+ warning "Unable to load dashboard [_1] of subscription [_2] for user [_3]: [_4]",
+ $subscription->SubValue('DashboardId'),
+ $subscription->Id,
+ $currentuser->Name,
+ $msg;
+
+ my $ok = RT::Interface::Email::SendEmailUsingTemplate(
+ From => $from,
+ To => $email,
+ Template => 'Error: Missing dashboard',
+ Arguments => {
+ SubscriptionObj => $subscription,
+ },
+ );
+
+ # only delete the subscription if the email looks like it went through
+ if ($ok) {
+ my ($deleted, $msg) = $subscription->Delete();
+ if ($deleted) {
+ verbose("Deleted an obsolete subscription: [_1]", $msg);
+ }
+ else {
+ warning("Unable to delete an obsolete subscription: [_1]", $msg);
+ }
+ }
+ else {
+ warning("Unable to notify [_1] of an obsolete subscription", $currentuser->Name);
+ }
+
+ return;
+ }
+
+ verbose 'Creating dashboard "[_1]" for user "[_2]":',
+ $dashboard->Name,
+ $currentuser->Name;
+
+ if ($opts{'dryrun'}) {
+ print << "SUMMARY";
+ Dashboard: @{[ $dashboard->Name ]}
+ User: @{[ $currentuser->Name ]} <$email>
+SUMMARY
+ return;
+ }
+
+ $HTML::Mason::Commands::session{CurrentUser} = $currentuser;
+ my $contents = run_component(
+ '/Dashboards/Render.html',
+ id => $dashboard->Id,
+ Preview => 0,
+ );
+
+ for (@{ RT->Config->Get('EmailDashboardRemove') || [] }) {
+ $contents =~ s/$_//g;
+ }
+
+ debug "Got [_1] characters of output.", length $contents;
+
+ $contents = HTML::RewriteAttributes::Links->rewrite(
+ $contents,
+ RT->Config->Get('WebURL') . '/Dashboards/Render.html',
+ );
+
+ email_dashboard($currentuser, $email, $dashboard, $subscription, $contents);
+}
+
+sub email_dashboard {
+ my ($currentuser, $email, $dashboard, $subscription, $content) = @_;
+
+ verbose 'Sending dashboard "[_1]" to user [_2] <[_3]>',
+ $dashboard->Name,
+ $currentuser->Name,
+ $email;
+
+ my $subject = sprintf '[%s] ' . RT->Config->Get('DashboardSubject'),
+ RT->Config->Get('rtname'),
+ ucfirst($subscription->SubValue('Frequency')),
+ $dashboard->Name;
+
+ my $entity = build_email($content, $from, $email, $subject);
+
+ my $ok = RT::Interface::Email::SendEmail(
+ Entity => $entity,
+ );
+
+ debug "Done sending dashboard to [_1] <[_2]>",
+ $currentuser->Name, $email
+ and return if $ok;
+
+ error 'Failed to email dashboard to user [_1] <[_2]>',
+ $currentuser->Name, $email;
+}
+
+sub build_email {
+ my ($content, $from, $to, $subject) = @_;
+ my @parts;
+ my %cid_of;
+
+ $content = HTML::RewriteAttributes::Resources->rewrite($content, sub {
+ my $uri = shift;
+
+ # already attached this object
+ return "cid:$cid_of{$uri}" if $cid_of{$uri};
+
+ $cid_of{$uri} = time() . $$ . int(rand(1e6));
+ my ($data, $filename, $mimetype, $encoding) = get_resource($uri);
+
+ # downgrade non-text strings, because all strings are utf8 by
+ # default, which is wrong for non-text strings.
+ if ( $mimetype !~ m{text/} ) {
+ utf8::downgrade( $data, 1 ) or warning "downgrade $data failed";
+ }
+
+ push @parts, MIME::Entity->build(
+ Top => 0,
+ Data => $data,
+ Type => $mimetype,
+ Encoding => $encoding,
+ Disposition => 'inline',
+ Name => $filename,
+ 'Content-Id' => $cid_of{$uri},
+ );
+
+ return "cid:$cid_of{$uri}";
+ },
+ inline_css => sub {
+ my $uri = shift;
+ my ($content) = get_resource($uri);
+ return $content;
+ },
+ inline_imports => 1,
+ );
+
+ my $entity = MIME::Entity->build(
+ From => $from,
+ To => $to,
+ Subject => $subject,
+ Type => "multipart/mixed",
+ );
+
+ $entity->attach(
+ Data => Encode::encode_utf8($content),
+ Type => 'text/html',
+ Charset => 'UTF-8',
+ Disposition => 'inline',
+ );
+
+ for my $part (@parts) {
+ $entity->add_part($part);
+ }
+
+ return $entity;
+}
+
+sub get_from {
+ RT->Config->Get('DashboardAddress') || RT->Config->Get('OwnerEmail')
+}
+
+{
+ my $mason;
+ my $outbuf = '';
+ my $data_dir = '';
+
+ sub mason {
+ unless ($mason) {
+ debug "Creating Mason object.";
+
+ # user may not have permissions on the data directory, so create a
+ # new one
+ $data_dir = tempdir(CLEANUP => 1);
+
+ $mason = HTML::Mason::Interp->new(
+ RT::Interface::Web::Handler->DefaultHandlerArgs,
+ out_method => \$outbuf,
+ autohandler_name => '', # disable forced login and more
+ data_dir => $data_dir,
+ );
+ }
+ return $mason;
+ }
+
+ sub run_component {
+ mason->exec(@_);
+ my $ret = $outbuf;
+ $outbuf = '';
+ return $ret;
+ }
+}
+
+{
+ my %cache;
+
+ sub hour_dow_dom_in {
+ my $tz = shift;
+ return @{$cache{$tz}} if exists $cache{$tz};
+
+ my ($hour, $dow, $dom);
+
+ {
+ local $ENV{'TZ'} = $tz;
+ ## Using POSIX::tzset fixes a bug where the TZ environment variable
+ ## is cached.
+ tzset();
+ (undef, undef, $hour, $dom, undef, undef, $dow) = localtime($now);
+ }
+ tzset(); # return back previous value
+
+ $hour = "0$hour"
+ if length($hour) == 1;
+ $dow = (qw/Sunday Monday Tuesday Wednesday Thursday Friday Saturday/)[$dow];
+
+ return @{$cache{$tz}} = ($hour, $dow, $dom);
+ }
+}
+
+sub get_resource {
+ my $uri = URI->new(shift);
+ my ($content, $filename, $mimetype, $encoding);
+
+ verbose "Getting resource [_1]", $uri;
+
+ # strip out the equivalent of WebURL, so we start at the correct /
+ my $path = $uri->path;
+ my $webpath = RT->Config->Get('WebPath');
+ $path =~ s/^\Q$webpath//;
+
+ # add a leading / if needed
+ $path = "/$path"
+ unless $path =~ m{^/};
+
+ # grab the query arguments
+ my %args;
+ for (split /&/, ($uri->query||'')) {
+ my ($k, $v) = /^(.*?)=(.*)$/
+ or die "Unable to parse query parameter '$_'";
+
+ for ($k, $v) { s/%(..)/chr hex $1/ge }
+
+ # no value yet, simple key=value
+ if (!exists $args{$k}) {
+ $args{$k} = $v;
+ }
+ # already have key=value, need to upgrade it to key=[value1, value2]
+ elsif (!ref($args{$k})) {
+ $args{$k} = [$args{$k}, $v];
+ }
+ # already key=[value1, value2], just add the new value
+ else {
+ push @{ $args{$k} }, $v;
+ }
+ }
+
+ debug "Running component '[_1]'", $path;
+ $content = run_component($path, %args);
+
+ # guess at the filename from the component name
+ $filename = $1 if $path =~ m{^.*/(.*?)$};
+
+ # the rest of this was taken from Email::MIME::CreateHTML::Resolver::LWP
+ ($mimetype, $encoding) = MIME::Types::by_suffix($filename);
+
+ my $content_type = $HTML::Mason::Commands::r->content_type;
+ if ($content_type) {
+ $mimetype = $content_type;
+
+ # strip down to just a MIME type
+ $mimetype = $1 if $mimetype =~ /(\S+);\s*charset=(.*)$/;
+ }
+
+ #If all else fails then some conservative and general-purpose defaults are:
+ $mimetype ||= 'application/octet-stream';
+ $encoding ||= 'base64';
+
+ debug "Resource [_1]: length=[_2] filename='[_3]' mimetype='[_4]', encoding='[_5]'",
+ $uri,
+ length($content),
+ $filename,
+ $mimetype,
+ $encoding;
+
+ return ($content, $filename, $mimetype, $encoding);
+}
+
+package RT::Dashboard::FakeRequest;
+sub new { bless {}, shift }
+sub header_out { shift }
+sub headers_out { shift }
+sub content_type {
+ my $self = shift;
+ $self->{content_type} = shift if @_;
+ return $self->{content_type};
+}
+
+=head1 NAME
+
+rt-email-dashboards - Send email dashboards
+
+=head1 SYNOPSIS
+
+ /opt/rt3/local/sbin/rt-email-dashboards [options]
+
+=head1 DESCRIPTION
+
+This tool will send users email based on how they have subscribed to
+dashboards. A dashboard is a set of saved searches, the subscription controls
+how often that dashboard is sent and how it's displayed.
+
+Each subscription has an hour, and possibly day of week or day of month. These
+are taken to be in the user's timezone if available, UTC otherwise.
+
+=head1 SETUP
+
+You'll need to have cron run this script every hour. Here's an example crontab
+entry to do this.
+
+ 0 * * * * /usr/bin/perl /opt/rt3/local/sbin/rt-email-dashboards
+
+This will run the script every hour on the hour. This may need some further
+tweaking to be run as the correct user.
+
+=head1 OPTIONS
+
+This tool supports a few options. Most are for debugging.
+
+=over 8
+
+=item --help
+
+Display this documentation
+
+=item --dryrun
+
+Figure out which dashboards would be sent, but don't actually generate them
+
+=item --epoch SECONDS
+
+Instead of using the current time to figure out which dashboards should be
+sent, use SECONDS (usually since midnight Jan 1st, 1970, so C<1192216018> would
+be Oct 12 19:06:58 GMT 2007).
+
+=item --verbose
+
+Print out some tracing information (such as which dashboards are being
+generated and sent out)
+
+=item --debug
+
+Print out more tracing information (such as each user and subscription that is
+being considered)
+
+=item --all
+
+Ignore subscription frequency when considering each dashboard (should only be
+used with --dryrun)
+
+=back
+
+=cut
+
diff --git a/rt/sbin/rt-email-dashboards.in b/rt/sbin/rt-email-dashboards.in
new file mode 100644
index 0000000..5565435
--- /dev/null
+++ b/rt/sbin/rt-email-dashboards.in
@@ -0,0 +1,568 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT;
+use RT::Interface::Web;
+use RT::Interface::Web::Handler;
+use RT::Dashboard;
+use RT::Interface::CLI qw{ CleanEnv loc };
+
+use Getopt::Long;
+use HTML::Mason;
+use HTML::RewriteAttributes::Resources;
+use HTML::RewriteAttributes::Links;
+use MIME::Types;
+use POSIX 'tzset';
+use File::Temp 'tempdir';
+
+# Clean out all the nasties from the environment
+CleanEnv();
+
+# Load the config file
+RT::LoadConfig();
+
+# Connect to the database and get RT::SystemUser and RT::Nobody loaded
+RT::Init();
+
+$HTML::Mason::Commands::r = RT::Dashboard::FakeRequest->new;
+
+no warnings 'once';
+
+# Read in the options
+my %opts;
+GetOptions( \%opts,
+ "help", "dryrun", "verbose", "debug", "epoch=i", "all", "skip-acl"
+);
+
+if ($opts{'help'}) {
+ require Pod::Usage;
+ import Pod::Usage;
+ pod2usage(-message => "RT Email Dashboards\n", -verbose => 1);
+ exit 1;
+}
+
+# helper functions
+sub verbose { print loc(@_), "\n" if $opts{debug} || $opts{verbose}; 1 }
+sub debug { print loc(@_), "\n" if $opts{debug}; 1 }
+sub error { $RT::Logger->error(loc(@_)); verbose(@_); 1 }
+sub warning { $RT::Logger->warning(loc(@_)); verbose(@_); 1 }
+
+my $now = $opts{epoch} || time;
+verbose "Using time [_1]", scalar localtime($now);
+
+my $from = get_from();
+debug "Sending email from [_1]", $from;
+
+# look through each user for her subscriptions
+my $Users = RT::Users->new($RT::SystemUser);
+$Users->LimitToPrivileged;
+
+while (defined(my $user = $Users->Next)) {
+ if ($user->PrincipalObj->Disabled) {
+ debug "Skipping over "
+ . $user->Name
+ . " due to having a disabled account.";
+ next;
+ }
+
+ my ($hour, $dow, $dom) = hour_dow_dom_in($user->Timezone || RT->Config->Get('Timezone'));
+ $hour .= ':00';
+ debug "Checking [_1]'s subscriptions: hour [_2], dow [_3], dom [_4]",
+ $user->Name, $hour, $dow, $dom;
+
+ my $currentuser = RT::CurrentUser->new;
+ $currentuser->LoadByName($user->Name);
+
+ # look through this user's subscriptions, are any supposed to be generated
+ # right now?
+ for my $subscription ($user->Attributes->Named('Subscription')) {
+ my $counter = $subscription->SubValue('Counter') || 0;
+
+ if (!$opts{all}) {
+ debug "Checking against subscription with frequency [_1], hour [_2], dow [_3], dom [_4]",
+ $subscription->SubValue('Frequency'), $subscription->SubValue('Hour'),
+ $subscription->SubValue('Dow'), $subscription->SubValue('Dom');
+
+ next if $subscription->SubValue('Frequency') eq 'never';
+
+ # correct hour?
+ next if $subscription->SubValue('Hour') ne $hour;
+
+ # if weekly, correct day of week?
+ if ( $subscription->SubValue('Frequency') eq 'weekly' ) {
+ next if $subscription->SubValue('Dow') ne $dow;
+ my $fow = $subscription->SubValue('Fow') || 1;
+ if ( $counter % $fow ) {
+ $subscription->SetSubValues( Counter => $counter + 1 )
+ unless $opts{'dryrun'};
+ next;
+ }
+ }
+
+ # if monthly, correct day of month?
+ elsif ($subscription->SubValue('Frequency') eq 'monthly') {
+ next if $subscription->SubValue('Dom') != $dom;
+ }
+
+ elsif ($subscription->SubValue('Frequency') eq 'm-f') {
+ next if $dow eq 'Sunday' || $dow eq 'Saturday';
+ }
+ }
+
+ my $email = $subscription->SubValue('Recipient')
+ || $user->EmailAddress;
+
+ eval { send_dashboard($currentuser, $email, $subscription) };
+ if ( $@ ) {
+ error 'Caught exception: ' . $@;
+ }
+ else {
+ $subscription->SetSubValues(
+ Counter => $counter + 1 )
+ unless $opts{'dryrun'};
+ }
+ }
+}
+
+sub send_dashboard {
+ my ($currentuser, $email, $subscription) = @_;
+
+ my $rows = $subscription->SubValue('Rows');
+
+ my $dashboard = RT::Dashboard->new($currentuser);
+
+ my ($ok, $msg) = $dashboard->LoadById($subscription->SubValue('DashboardId'));
+
+ # failed to load dashboard. perhaps it was deleted or it changed privacy
+ if (!$ok) {
+ warning "Unable to load dashboard [_1] of subscription [_2] for user [_3]: [_4]",
+ $subscription->SubValue('DashboardId'),
+ $subscription->Id,
+ $currentuser->Name,
+ $msg;
+
+ my $ok = RT::Interface::Email::SendEmailUsingTemplate(
+ From => $from,
+ To => $email,
+ Template => 'Error: Missing dashboard',
+ Arguments => {
+ SubscriptionObj => $subscription,
+ },
+ );
+
+ # only delete the subscription if the email looks like it went through
+ if ($ok) {
+ my ($deleted, $msg) = $subscription->Delete();
+ if ($deleted) {
+ verbose("Deleted an obsolete subscription: [_1]", $msg);
+ }
+ else {
+ warning("Unable to delete an obsolete subscription: [_1]", $msg);
+ }
+ }
+ else {
+ warning("Unable to notify [_1] of an obsolete subscription", $currentuser->Name);
+ }
+
+ return;
+ }
+
+ verbose 'Creating dashboard "[_1]" for user "[_2]":',
+ $dashboard->Name,
+ $currentuser->Name;
+
+ if ($opts{'dryrun'}) {
+ print << "SUMMARY";
+ Dashboard: @{[ $dashboard->Name ]}
+ User: @{[ $currentuser->Name ]} <$email>
+SUMMARY
+ return;
+ }
+
+ $HTML::Mason::Commands::session{CurrentUser} = $currentuser;
+ my $contents = run_component(
+ '/Dashboards/Render.html',
+ id => $dashboard->Id,
+ Preview => 0,
+ );
+
+ for (@{ RT->Config->Get('EmailDashboardRemove') || [] }) {
+ $contents =~ s/$_//g;
+ }
+
+ debug "Got [_1] characters of output.", length $contents;
+
+ $contents = HTML::RewriteAttributes::Links->rewrite(
+ $contents,
+ RT->Config->Get('WebURL') . '/Dashboards/Render.html',
+ );
+
+ email_dashboard($currentuser, $email, $dashboard, $subscription, $contents);
+}
+
+sub email_dashboard {
+ my ($currentuser, $email, $dashboard, $subscription, $content) = @_;
+
+ verbose 'Sending dashboard "[_1]" to user [_2] <[_3]>',
+ $dashboard->Name,
+ $currentuser->Name,
+ $email;
+
+ my $subject = sprintf '[%s] ' . RT->Config->Get('DashboardSubject'),
+ RT->Config->Get('rtname'),
+ ucfirst($subscription->SubValue('Frequency')),
+ $dashboard->Name;
+
+ my $entity = build_email($content, $from, $email, $subject);
+
+ my $ok = RT::Interface::Email::SendEmail(
+ Entity => $entity,
+ );
+
+ debug "Done sending dashboard to [_1] <[_2]>",
+ $currentuser->Name, $email
+ and return if $ok;
+
+ error 'Failed to email dashboard to user [_1] <[_2]>',
+ $currentuser->Name, $email;
+}
+
+sub build_email {
+ my ($content, $from, $to, $subject) = @_;
+ my @parts;
+ my %cid_of;
+
+ $content = HTML::RewriteAttributes::Resources->rewrite($content, sub {
+ my $uri = shift;
+
+ # already attached this object
+ return "cid:$cid_of{$uri}" if $cid_of{$uri};
+
+ $cid_of{$uri} = time() . $$ . int(rand(1e6));
+ my ($data, $filename, $mimetype, $encoding) = get_resource($uri);
+
+ # downgrade non-text strings, because all strings are utf8 by
+ # default, which is wrong for non-text strings.
+ if ( $mimetype !~ m{text/} ) {
+ utf8::downgrade( $data, 1 ) or warning "downgrade $data failed";
+ }
+
+ push @parts, MIME::Entity->build(
+ Top => 0,
+ Data => $data,
+ Type => $mimetype,
+ Encoding => $encoding,
+ Disposition => 'inline',
+ Name => $filename,
+ 'Content-Id' => $cid_of{$uri},
+ );
+
+ return "cid:$cid_of{$uri}";
+ },
+ inline_css => sub {
+ my $uri = shift;
+ my ($content) = get_resource($uri);
+ return $content;
+ },
+ inline_imports => 1,
+ );
+
+ my $entity = MIME::Entity->build(
+ From => $from,
+ To => $to,
+ Subject => $subject,
+ Type => "multipart/mixed",
+ );
+
+ $entity->attach(
+ Data => Encode::encode_utf8($content),
+ Type => 'text/html',
+ Charset => 'UTF-8',
+ Disposition => 'inline',
+ );
+
+ for my $part (@parts) {
+ $entity->add_part($part);
+ }
+
+ return $entity;
+}
+
+sub get_from {
+ RT->Config->Get('DashboardAddress') || RT->Config->Get('OwnerEmail')
+}
+
+{
+ my $mason;
+ my $outbuf = '';
+ my $data_dir = '';
+
+ sub mason {
+ unless ($mason) {
+ debug "Creating Mason object.";
+
+ # user may not have permissions on the data directory, so create a
+ # new one
+ $data_dir = tempdir(CLEANUP => 1);
+
+ $mason = HTML::Mason::Interp->new(
+ RT::Interface::Web::Handler->DefaultHandlerArgs,
+ out_method => \$outbuf,
+ autohandler_name => '', # disable forced login and more
+ data_dir => $data_dir,
+ );
+ }
+ return $mason;
+ }
+
+ sub run_component {
+ mason->exec(@_);
+ my $ret = $outbuf;
+ $outbuf = '';
+ return $ret;
+ }
+}
+
+{
+ my %cache;
+
+ sub hour_dow_dom_in {
+ my $tz = shift;
+ return @{$cache{$tz}} if exists $cache{$tz};
+
+ my ($hour, $dow, $dom);
+
+ {
+ local $ENV{'TZ'} = $tz;
+ ## Using POSIX::tzset fixes a bug where the TZ environment variable
+ ## is cached.
+ tzset();
+ (undef, undef, $hour, $dom, undef, undef, $dow) = localtime($now);
+ }
+ tzset(); # return back previous value
+
+ $hour = "0$hour"
+ if length($hour) == 1;
+ $dow = (qw/Sunday Monday Tuesday Wednesday Thursday Friday Saturday/)[$dow];
+
+ return @{$cache{$tz}} = ($hour, $dow, $dom);
+ }
+}
+
+sub get_resource {
+ my $uri = URI->new(shift);
+ my ($content, $filename, $mimetype, $encoding);
+
+ verbose "Getting resource [_1]", $uri;
+
+ # strip out the equivalent of WebURL, so we start at the correct /
+ my $path = $uri->path;
+ my $webpath = RT->Config->Get('WebPath');
+ $path =~ s/^\Q$webpath//;
+
+ # add a leading / if needed
+ $path = "/$path"
+ unless $path =~ m{^/};
+
+ # grab the query arguments
+ my %args;
+ for (split /&/, ($uri->query||'')) {
+ my ($k, $v) = /^(.*?)=(.*)$/
+ or die "Unable to parse query parameter '$_'";
+
+ for ($k, $v) { s/%(..)/chr hex $1/ge }
+
+ # no value yet, simple key=value
+ if (!exists $args{$k}) {
+ $args{$k} = $v;
+ }
+ # already have key=value, need to upgrade it to key=[value1, value2]
+ elsif (!ref($args{$k})) {
+ $args{$k} = [$args{$k}, $v];
+ }
+ # already key=[value1, value2], just add the new value
+ else {
+ push @{ $args{$k} }, $v;
+ }
+ }
+
+ debug "Running component '[_1]'", $path;
+ $content = run_component($path, %args);
+
+ # guess at the filename from the component name
+ $filename = $1 if $path =~ m{^.*/(.*?)$};
+
+ # the rest of this was taken from Email::MIME::CreateHTML::Resolver::LWP
+ ($mimetype, $encoding) = MIME::Types::by_suffix($filename);
+
+ my $content_type = $HTML::Mason::Commands::r->content_type;
+ if ($content_type) {
+ $mimetype = $content_type;
+
+ # strip down to just a MIME type
+ $mimetype = $1 if $mimetype =~ /(\S+);\s*charset=(.*)$/;
+ }
+
+ #If all else fails then some conservative and general-purpose defaults are:
+ $mimetype ||= 'application/octet-stream';
+ $encoding ||= 'base64';
+
+ debug "Resource [_1]: length=[_2] filename='[_3]' mimetype='[_4]', encoding='[_5]'",
+ $uri,
+ length($content),
+ $filename,
+ $mimetype,
+ $encoding;
+
+ return ($content, $filename, $mimetype, $encoding);
+}
+
+package RT::Dashboard::FakeRequest;
+sub new { bless {}, shift }
+sub header_out { shift }
+sub headers_out { shift }
+sub content_type {
+ my $self = shift;
+ $self->{content_type} = shift if @_;
+ return $self->{content_type};
+}
+
+=head1 NAME
+
+rt-email-dashboards - Send email dashboards
+
+=head1 SYNOPSIS
+
+ /opt/rt3/local/sbin/rt-email-dashboards [options]
+
+=head1 DESCRIPTION
+
+This tool will send users email based on how they have subscribed to
+dashboards. A dashboard is a set of saved searches, the subscription controls
+how often that dashboard is sent and how it's displayed.
+
+Each subscription has an hour, and possibly day of week or day of month. These
+are taken to be in the user's timezone if available, UTC otherwise.
+
+=head1 SETUP
+
+You'll need to have cron run this script every hour. Here's an example crontab
+entry to do this.
+
+ 0 * * * * @PERL@ /opt/rt3/local/sbin/rt-email-dashboards
+
+This will run the script every hour on the hour. This may need some further
+tweaking to be run as the correct user.
+
+=head1 OPTIONS
+
+This tool supports a few options. Most are for debugging.
+
+=over 8
+
+=item --help
+
+Display this documentation
+
+=item --dryrun
+
+Figure out which dashboards would be sent, but don't actually generate them
+
+=item --epoch SECONDS
+
+Instead of using the current time to figure out which dashboards should be
+sent, use SECONDS (usually since midnight Jan 1st, 1970, so C<1192216018> would
+be Oct 12 19:06:58 GMT 2007).
+
+=item --verbose
+
+Print out some tracing information (such as which dashboards are being
+generated and sent out)
+
+=item --debug
+
+Print out more tracing information (such as each user and subscription that is
+being considered)
+
+=item --all
+
+Ignore subscription frequency when considering each dashboard (should only be
+used with --dryrun)
+
+=back
+
+=cut
+
diff --git a/rt/sbin/rt-email-digest b/rt/sbin/rt-email-digest
new file mode 100755
index 0000000..29ee1cb
--- /dev/null
+++ b/rt/sbin/rt-email-digest
@@ -0,0 +1,337 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use warnings;
+use strict;
+
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use Date::Format qw( strftime );
+use Getopt::Long;
+use RT;
+use RT::Interface::CLI qw( CleanEnv loc );
+use RT::Interface::Email;
+
+CleanEnv();
+RT::LoadConfig();
+RT::Init();
+
+sub usage {
+ my ($error) = @_;
+ print loc("Usage: ") . "$0 -m (daily|weekly) [--print] [--help]\n";
+ print loc(
+ "[_1] is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest.",
+ $0
+ ) . "\n";
+ print "\n\t-m, --mode\t"
+ . loc("Specify whether this is a daily or weekly run.") . "\n";
+ print "\t-p, --print\t"
+ . loc("Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent")
+ . "\n";
+ print "\t-h, --help\t" . loc("Print this message") . "\n";
+
+ if ( $error eq 'help' ) {
+ exit 0;
+ } else {
+ print loc("Error") . ": " . loc($error) . "\n";
+ exit 1;
+ }
+}
+
+my ( $frequency, $print, $help ) = ( '', '', '' );
+GetOptions(
+ 'mode=s' => \$frequency,
+ 'print' => \$print,
+ 'help' => \$help,
+);
+
+usage('help') if $help;
+usage("Mode argument must be 'daily' or 'weekly'")
+ unless $frequency =~ /^(daily|weekly)$/;
+
+run( $frequency, $print );
+
+sub run {
+ my $frequency = shift;
+ my $print = shift;
+
+## Find all the tickets that have been modified within the time frame
+## described by $frequency.
+
+ my ( $all_digest, $sent_transactions ) = find_transactions($frequency);
+
+## Iterate through our huge hash constructing the digest message
+## for each user and sending it.
+
+ foreach my $user ( keys %$all_digest ) {
+ my ( $contents_list, $contents_body ) = build_digest_for_user( $user, $all_digest->{$user} );
+ # Now we have a content head and a content body. We can send a message.
+ if ( send_digest( $user, $contents_list, $contents_body ) ) {
+ print "Sent message to $user\n";
+ mark_transactions_sent( $frequency, $user, values %{$sent_transactions->{$user}} ) unless ($print);
+ } else {
+ print "Failed to send message to $user\n";
+ }
+ }
+}
+exit 0;
+
+# Subroutines.
+
+sub send_digest {
+ my ( $to, $index, $messages ) = @_;
+
+ # Combine the index and the messages.
+
+ my $body = "============== Tickets with activity in the last "
+ . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n";
+
+ $body .= $index;
+ $body .= "\n\n============== Messages recorded in the last "
+ . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n";
+ $body .= $messages;
+
+ # Load our template. If we cannot load the template, abort
+ # immediately rather than failing through many loops.
+ my $digest_template = RT::Template->new( RT->SystemUser );
+ my ( $ret, $msg ) = $digest_template->Load('Email Digest');
+ unless ($ret) {
+ print loc("Failed to load template")
+ . " 'Email Digest': "
+ . $msg
+ . ". Cannot continue.\n";
+ exit 1;
+ }
+ ( $ret, $msg ) = $digest_template->Parse( Argument => $body );
+ unless ($ret) {
+ print loc("Failed to parse template")
+ . " 'Email Digest'. Cannot continue.\n";
+ exit 1;
+ }
+
+ # Set our sender and recipient.
+ $digest_template->MIMEObj->head->replace( 'From', RT::Config->Get('CorrespondAddress') );
+ $digest_template->MIMEObj->head->replace( 'To', $to );
+
+ if ($print) {
+ $digest_template->MIMEObj->print;
+ return 1;
+ } else {
+ return RT::Interface::Email::SendEmail( Entity => $digest_template->MIMEObj)
+ }
+}
+
+=item mark_transactions_sent( $frequency, $user, @txn_list );
+
+Takes a frequency string (either 'daily' or 'weekly'), a user and one or more
+transaction objects as its arguments. Marks the given deferred
+notifications as sent.
+
+=cut
+
+sub mark_transactions_sent {
+ my ( $freq, $user, @txns ) = @_;
+ return unless $freq =~ /(daily|weekly)/;
+ return unless @txns;
+ foreach my $txn (@txns) {
+
+ # Grab the attribute, mark the "sent" as true, and store the new
+ # value.
+ if ( my $attr = $txn->FirstAttribute('DeferredRecipients') ) {
+ my $deferred = $attr->Content;
+ $deferred->{$freq}->{$user}->{'_sent'} = 1;
+ $txn->SetAttribute(
+ Name => 'DeferredRecipients',
+ Description => 'Deferred recipients for this message',
+ Content => $deferred,
+ );
+ }
+ }
+}
+
+sub since_date {
+ my $frequency = shift;
+
+ # Specify a short time for digest overlap, in case we aren't starting
+ # this process exactly on time.
+ my $OVERLAP_HEDGE = -30;
+
+ my $since_date = RT::Date->new( RT->SystemUser );
+ $since_date->Set( Format => 'unix', Value => time() );
+ if ( $frequency eq 'daily' ) {
+ $since_date->AddDays(-1);
+ } else {
+ $since_date->AddDays(-7);
+ }
+
+ $since_date->AddSeconds($OVERLAP_HEDGE);
+
+ return $since_date;
+}
+
+sub find_transactions {
+ my $frequency = shift;
+ my $since_date = since_date($frequency);
+
+ my $txns = RT::Transactions->new( RT->SystemUser );
+
+ # First limit to recent transactions.
+ $txns->Limit(
+ FIELD => 'Created',
+ OPERATOR => '>',
+ VALUE => $since_date->ISO
+ );
+
+ # Next limit to ticket transactions.
+ $txns->Limit(
+ FIELD => 'ObjectType',
+ OPERATOR => '=',
+ VALUE => 'RT::Ticket',
+ ENTRYAGGREGATOR => 'AND'
+ );
+ my $all_digest = {};
+ my $sent_transactions = {};
+
+ while ( my $txn = $txns->Next ) {
+ my $ticket = $txn->Ticket;
+ my $queue = $txn->TicketObj->QueueObj->Name;
+ # Xxx todo - may clobber if two queues have the same name
+ foreach my $user ( $txn->DeferredRecipients($frequency) ) {
+ $all_digest->{$user}->{$queue}->{$ticket}->{ $txn->id } = $txn->ContentObj;
+ $sent_transactions->{$user}->{ $txn->id } = $txn;
+ }
+ }
+
+ return ( $all_digest, $sent_transactions );
+}
+
+sub build_digest_for_user {
+ my $user = shift;
+ my $user_digest = shift;
+
+ my $contents_list = ''; # Holds the digest index.
+ my $contents_body = ''; # Holds the digest body.
+
+ # Has the user been disabled since a message was deferred on his/her
+ # behalf?
+ my $user_obj = RT::User->new( RT->SystemUser );
+ $user_obj->LoadByEmail($user);
+ if ( $user_obj->PrincipalObj->Disabled ) {
+ print STDERR loc("Skipping disabled user") . " $user\n";
+ next;
+ }
+
+ print loc("Message for user") . " $user:\n\n" if $print;
+ foreach my $queue ( keys %$user_digest ) {
+ $contents_list .= "Queue $queue:\n";
+ $contents_body .= "Queue $queue:\n";
+ foreach my $ticket ( sort keys %{ $user_digest->{$queue} } ) {
+ my $tkt_txns = $user_digest->{$queue}->{$ticket};
+ my $ticket_obj = RT::Ticket->new( RT->SystemUser );
+ $ticket_obj->Load($ticket);
+
+ # Spit out the index entry for this ticket.
+ my $ticket_title = sprintf(
+ "#%d %s [%s]\t%s\n",
+ $ticket, $ticket_obj->Status, $ticket_obj->OwnerObj->Name,
+ $ticket_obj->Subject
+ );
+ $contents_list .= $ticket_title;
+
+ # Spit out the messages for the transactions on this ticket.
+ $contents_body .= "\n== $ticket_title\n";
+ foreach my $txn ( sort keys %$tkt_txns ) {
+ my $msg = $tkt_txns->{$txn};
+
+ # $msg contains an RT::Attachment with our outgoing
+ # message. Print a few headers for clarity's sake.
+ $contents_body .= "From: " . $msg->GetHeader('From') . "\n";
+ my $date = $msg->GetHeader('Date ');
+ unless ($date) {
+ my $txn_obj = RT::Transaction->new( RT->SystemUser );
+ $txn_obj->Load($txn);
+ my $date_obj = RT::Date->new( RT->SystemUser );
+ $date_obj->Set(
+ Format => 'sql',
+ Value => $txn_obj->Created
+ );
+ $date = strftime( '%a, %d %b %Y %H:%M:%S %z',
+ @{ [ localtime( $date_obj->Unix ) ] } );
+ }
+ $contents_body .= "Date: $date\n\n";
+ $contents_body .= $msg->Content . "\n";
+ $contents_body .= "-------\n";
+ } # foreach transaction
+ } # foreach ticket
+ } # foreach queue
+
+ return ( $contents_list, $contents_body );
+
+}
diff --git a/rt/sbin/rt-email-digest.in b/rt/sbin/rt-email-digest.in
new file mode 100644
index 0000000..2fc7c00
--- /dev/null
+++ b/rt/sbin/rt-email-digest.in
@@ -0,0 +1,337 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use warnings;
+use strict;
+
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use Date::Format qw( strftime );
+use Getopt::Long;
+use RT;
+use RT::Interface::CLI qw( CleanEnv loc );
+use RT::Interface::Email;
+
+CleanEnv();
+RT::LoadConfig();
+RT::Init();
+
+sub usage {
+ my ($error) = @_;
+ print loc("Usage: ") . "$0 -m (daily|weekly) [--print] [--help]\n";
+ print loc(
+ "[_1] is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest.",
+ $0
+ ) . "\n";
+ print "\n\t-m, --mode\t"
+ . loc("Specify whether this is a daily or weekly run.") . "\n";
+ print "\t-p, --print\t"
+ . loc("Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent")
+ . "\n";
+ print "\t-h, --help\t" . loc("Print this message") . "\n";
+
+ if ( $error eq 'help' ) {
+ exit 0;
+ } else {
+ print loc("Error") . ": " . loc($error) . "\n";
+ exit 1;
+ }
+}
+
+my ( $frequency, $print, $help ) = ( '', '', '' );
+GetOptions(
+ 'mode=s' => \$frequency,
+ 'print' => \$print,
+ 'help' => \$help,
+);
+
+usage('help') if $help;
+usage("Mode argument must be 'daily' or 'weekly'")
+ unless $frequency =~ /^(daily|weekly)$/;
+
+run( $frequency, $print );
+
+sub run {
+ my $frequency = shift;
+ my $print = shift;
+
+## Find all the tickets that have been modified within the time frame
+## described by $frequency.
+
+ my ( $all_digest, $sent_transactions ) = find_transactions($frequency);
+
+## Iterate through our huge hash constructing the digest message
+## for each user and sending it.
+
+ foreach my $user ( keys %$all_digest ) {
+ my ( $contents_list, $contents_body ) = build_digest_for_user( $user, $all_digest->{$user} );
+ # Now we have a content head and a content body. We can send a message.
+ if ( send_digest( $user, $contents_list, $contents_body ) ) {
+ print "Sent message to $user\n";
+ mark_transactions_sent( $frequency, $user, values %{$sent_transactions->{$user}} ) unless ($print);
+ } else {
+ print "Failed to send message to $user\n";
+ }
+ }
+}
+exit 0;
+
+# Subroutines.
+
+sub send_digest {
+ my ( $to, $index, $messages ) = @_;
+
+ # Combine the index and the messages.
+
+ my $body = "============== Tickets with activity in the last "
+ . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n";
+
+ $body .= $index;
+ $body .= "\n\n============== Messages recorded in the last "
+ . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n";
+ $body .= $messages;
+
+ # Load our template. If we cannot load the template, abort
+ # immediately rather than failing through many loops.
+ my $digest_template = RT::Template->new( RT->SystemUser );
+ my ( $ret, $msg ) = $digest_template->Load('Email Digest');
+ unless ($ret) {
+ print loc("Failed to load template")
+ . " 'Email Digest': "
+ . $msg
+ . ". Cannot continue.\n";
+ exit 1;
+ }
+ ( $ret, $msg ) = $digest_template->Parse( Argument => $body );
+ unless ($ret) {
+ print loc("Failed to parse template")
+ . " 'Email Digest'. Cannot continue.\n";
+ exit 1;
+ }
+
+ # Set our sender and recipient.
+ $digest_template->MIMEObj->head->replace( 'From', RT::Config->Get('CorrespondAddress') );
+ $digest_template->MIMEObj->head->replace( 'To', $to );
+
+ if ($print) {
+ $digest_template->MIMEObj->print;
+ return 1;
+ } else {
+ return RT::Interface::Email::SendEmail( Entity => $digest_template->MIMEObj)
+ }
+}
+
+=item mark_transactions_sent( $frequency, $user, @txn_list );
+
+Takes a frequency string (either 'daily' or 'weekly'), a user and one or more
+transaction objects as its arguments. Marks the given deferred
+notifications as sent.
+
+=cut
+
+sub mark_transactions_sent {
+ my ( $freq, $user, @txns ) = @_;
+ return unless $freq =~ /(daily|weekly)/;
+ return unless @txns;
+ foreach my $txn (@txns) {
+
+ # Grab the attribute, mark the "sent" as true, and store the new
+ # value.
+ if ( my $attr = $txn->FirstAttribute('DeferredRecipients') ) {
+ my $deferred = $attr->Content;
+ $deferred->{$freq}->{$user}->{'_sent'} = 1;
+ $txn->SetAttribute(
+ Name => 'DeferredRecipients',
+ Description => 'Deferred recipients for this message',
+ Content => $deferred,
+ );
+ }
+ }
+}
+
+sub since_date {
+ my $frequency = shift;
+
+ # Specify a short time for digest overlap, in case we aren't starting
+ # this process exactly on time.
+ my $OVERLAP_HEDGE = -30;
+
+ my $since_date = RT::Date->new( RT->SystemUser );
+ $since_date->Set( Format => 'unix', Value => time() );
+ if ( $frequency eq 'daily' ) {
+ $since_date->AddDays(-1);
+ } else {
+ $since_date->AddDays(-7);
+ }
+
+ $since_date->AddSeconds($OVERLAP_HEDGE);
+
+ return $since_date;
+}
+
+sub find_transactions {
+ my $frequency = shift;
+ my $since_date = since_date($frequency);
+
+ my $txns = RT::Transactions->new( RT->SystemUser );
+
+ # First limit to recent transactions.
+ $txns->Limit(
+ FIELD => 'Created',
+ OPERATOR => '>',
+ VALUE => $since_date->ISO
+ );
+
+ # Next limit to ticket transactions.
+ $txns->Limit(
+ FIELD => 'ObjectType',
+ OPERATOR => '=',
+ VALUE => 'RT::Ticket',
+ ENTRYAGGREGATOR => 'AND'
+ );
+ my $all_digest = {};
+ my $sent_transactions = {};
+
+ while ( my $txn = $txns->Next ) {
+ my $ticket = $txn->Ticket;
+ my $queue = $txn->TicketObj->QueueObj->Name;
+ # Xxx todo - may clobber if two queues have the same name
+ foreach my $user ( $txn->DeferredRecipients($frequency) ) {
+ $all_digest->{$user}->{$queue}->{$ticket}->{ $txn->id } = $txn->ContentObj;
+ $sent_transactions->{$user}->{ $txn->id } = $txn;
+ }
+ }
+
+ return ( $all_digest, $sent_transactions );
+}
+
+sub build_digest_for_user {
+ my $user = shift;
+ my $user_digest = shift;
+
+ my $contents_list = ''; # Holds the digest index.
+ my $contents_body = ''; # Holds the digest body.
+
+ # Has the user been disabled since a message was deferred on his/her
+ # behalf?
+ my $user_obj = RT::User->new( RT->SystemUser );
+ $user_obj->LoadByEmail($user);
+ if ( $user_obj->PrincipalObj->Disabled ) {
+ print STDERR loc("Skipping disabled user") . " $user\n";
+ next;
+ }
+
+ print loc("Message for user") . " $user:\n\n" if $print;
+ foreach my $queue ( keys %$user_digest ) {
+ $contents_list .= "Queue $queue:\n";
+ $contents_body .= "Queue $queue:\n";
+ foreach my $ticket ( sort keys %{ $user_digest->{$queue} } ) {
+ my $tkt_txns = $user_digest->{$queue}->{$ticket};
+ my $ticket_obj = RT::Ticket->new( RT->SystemUser );
+ $ticket_obj->Load($ticket);
+
+ # Spit out the index entry for this ticket.
+ my $ticket_title = sprintf(
+ "#%d %s [%s]\t%s\n",
+ $ticket, $ticket_obj->Status, $ticket_obj->OwnerObj->Name,
+ $ticket_obj->Subject
+ );
+ $contents_list .= $ticket_title;
+
+ # Spit out the messages for the transactions on this ticket.
+ $contents_body .= "\n== $ticket_title\n";
+ foreach my $txn ( sort keys %$tkt_txns ) {
+ my $msg = $tkt_txns->{$txn};
+
+ # $msg contains an RT::Attachment with our outgoing
+ # message. Print a few headers for clarity's sake.
+ $contents_body .= "From: " . $msg->GetHeader('From') . "\n";
+ my $date = $msg->GetHeader('Date ');
+ unless ($date) {
+ my $txn_obj = RT::Transaction->new( RT->SystemUser );
+ $txn_obj->Load($txn);
+ my $date_obj = RT::Date->new( RT->SystemUser );
+ $date_obj->Set(
+ Format => 'sql',
+ Value => $txn_obj->Created
+ );
+ $date = strftime( '%a, %d %b %Y %H:%M:%S %z',
+ @{ [ localtime( $date_obj->Unix ) ] } );
+ }
+ $contents_body .= "Date: $date\n\n";
+ $contents_body .= $msg->Content . "\n";
+ $contents_body .= "-------\n";
+ } # foreach transaction
+ } # foreach ticket
+ } # foreach queue
+
+ return ( $contents_list, $contents_body );
+
+}
diff --git a/rt/sbin/rt-email-group-admin b/rt/sbin/rt-email-group-admin
new file mode 100755
index 0000000..75b51a5
--- /dev/null
+++ b/rt/sbin/rt-email-group-admin
@@ -0,0 +1,508 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+=head1 NAME
+
+rt-email-group-admin - Command line tool for administrating NotifyGroup actions
+
+=head1 SYNOPSIS
+
+ rt-email-group-admin --list
+ rt-email-group-admin --create 'Notify foo team' --group Foo
+ rt-email-group-admin --create 'Notify foo team as comment' --comment --group Foo
+ rt-email-group-admin --create 'Notify group Foo and Bar' --group Foo --group Bar
+ rt-email-group-admin --create 'Notify user foo@bar.com' --user foo@bar.com
+ rt-email-group-admin --create 'Notify VIPs' --user vip1@bar.com
+ rt-email-group-admin --add 'Notify VIPs' --user vip2@bar.com --group vip1 --user vip3@foo.com
+ rt-email-group-admin --rename 'Notify VIPs' --newname 'Inform VIPs'
+ rt-email-group-admin --switch 'Notify VIPs'
+ rt-email-group-admin --delete 'Notify user foo@bar.com'
+
+=head1 DESCRIPTION
+
+This script list, create, modify or delete scrip actions in the RT DB. Once
+you've created an action you can use it in a scrip.
+
+For example you can create the following action using this script:
+
+ rt-email-group-admin --create 'Notify developers' --group 'Development Team'
+
+Then you can add the followoing scrip to your Bugs queue:
+
+ Condition: On Create
+ Action: Notify developers
+ Template: Transaction
+ Stage: TransactionCreate
+
+Your development team will be notified on every new ticket in the queue.
+
+=cut
+
+use warnings;
+use strict;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT;
+RT::LoadConfig;
+RT::Init;
+
+require RT::Principal;
+require RT::User;
+require RT::Group;
+require RT::ScripActions;
+
+use Getopt::Long qw(GetOptions);
+
+our $cmd = 'usage';
+our $opts = {};
+
+sub parse_args {
+ my $tmp;
+ Getopt::Long::Configure( "pass_through" );
+ if ( GetOptions( 'list' => \$tmp ) && $tmp ) {
+ $cmd = 'list';
+ }
+ elsif ( GetOptions( 'create=s' => \$tmp ) && $tmp ) {
+ $cmd = 'create';
+ $opts->{'name'} = $tmp;
+ $opts->{'groups'} = [];
+ $opts->{'users'} = [];
+ GetOptions( 'comment' => \$opts->{'comment'} );
+ GetOptions( 'group:s@' => $opts->{'groups'} );
+ GetOptions( 'user:s@' => $opts->{'users'} );
+ unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) {
+ usage();
+ exit(-1);
+ }
+ }
+ elsif ( GetOptions( 'add=s' => \$tmp ) && $tmp ) {
+ $cmd = 'add';
+ $opts->{'name'} = $tmp;
+ $opts->{'groups'} = [];
+ $opts->{'users'} = [];
+ GetOptions( 'group:s@' => $opts->{'groups'} );
+ GetOptions( 'user:s@' => $opts->{'users'} );
+ unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) {
+ usage();
+ exit(-1);
+ }
+ }
+ elsif ( GetOptions( 'switch=s' => \$tmp ) && $tmp ) {
+ $cmd = 'switch';
+ $opts->{'name'} = $tmp;
+ }
+ elsif ( GetOptions( 'rename=s' => \$tmp ) && $tmp ) {
+ $cmd = 'rename';
+ $opts->{'name'} = $tmp;
+ GetOptions( 'newname=s' => \$opts->{'newname'} );
+ unless ( $opts->{'newname'} ) {
+ usage();
+ exit(-1);
+ }
+ }
+ elsif ( GetOptions( 'delete=s' => \$tmp ) && $tmp) {
+ $cmd = 'delete';
+ $opts->{'name'} = $tmp;
+ } else {
+ $cmd = 'usage';
+ }
+
+ return;
+}
+
+sub usage {
+ local $@;
+ eval "require Pod::PlainText;";
+ if ( $@ ) {
+ print "see `perldoc $0`\n";
+ } else {
+ my $parser = Pod::PlainText->new( sentence => 0, width => 78 );
+ $parser->parse_from_file( $0 );
+ }
+}
+
+parse_args();
+
+{
+ eval "main::$cmd()";
+ if ( $@ ) {
+ print STDERR $@ ."\n";
+ }
+}
+
+exit(0);
+
+=head1 USAGE
+
+rt-email-group-admin --COMMAND ARGS
+
+=head1 COMMANDS
+
+=head2 list
+
+Lists actions and its descriptions.
+
+=cut
+
+sub list {
+ my $actions = _get_our_actions();
+ while( my $a = $actions->Next ) {
+ _list( $a );
+ }
+ return;
+}
+
+sub _list {
+ my $action = shift;
+
+ print "Name: ". $action->Name() ."\n";
+ print "Module: ". $action->ExecModule() ."\n";
+
+ my @princ = argument_to_list( $action );
+
+ print "Members: \n";
+ foreach( @princ ) {
+ my $obj = RT::Principal->new( $RT::SystemUser );
+ $obj->Load( $_ );
+ next unless $obj->id;
+
+ print "\t". $obj->PrincipalType;
+ print "\t=> ". $obj->Object->Name;
+ print "(Disabled!!!)" if $obj->Disabled;
+ print "\n";
+ }
+ print "\n";
+ return;
+}
+
+=head2 create NAME [--comment] [--group GNAME] [--user UNAME]
+
+Creates new action with NAME and adds users and/or groups to its
+recipient list. Would be notify as comment if --comment specified.
+
+=cut
+
+sub create {
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'Name',
+ VALUE => $opts->{'name'},
+ );
+ if ( $actions->Count ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' allready exists\n";
+ exit(-1);
+ }
+
+ my @groups = _check_groups( @{ $opts->{'groups'} } );
+ my @users = _check_users( @{ $opts->{'users'} } );
+ unless ( @users + @groups ) {
+ print STDERR "List of groups and users is empty\n";
+ exit(-1);
+ }
+
+ my $action = __create_empty( $opts->{'name'}, $opts->{'comment'} );
+
+ __add( $action, $_ ) foreach( @users );
+ __add( $action, $_ ) foreach( @groups );
+
+ return;
+}
+
+sub __create_empty {
+ my $name = shift;
+ my $as_comment = shift || 0;
+ require RT::ScripAction;
+ my $action = RT::ScripAction->new( $RT::SystemUser );
+ $action->Create(
+ Name => $name,
+ Description => "Created with rt-email-group-admin script",
+ ExecModule => $as_comment? 'NotifyGroupAsComment': 'NotifyGroup',
+ Argument => '',
+ );
+
+ return $action;
+}
+
+sub _check_groups
+{
+ return grep { $_ ? 1: do { print STDERR "Group '$_' skipped, doesn't exist\n"; 0; } }
+ map { __check_group($_) } @_;
+}
+
+sub __check_group
+{
+ my $instance = shift;
+ require RT::Group;
+ my $obj = RT::Group->new( $RT::SystemUser );
+ $obj->LoadUserDefinedGroup( $instance );
+ return $obj->id ? $obj : undef;
+}
+
+sub _check_users
+{
+ return grep { $_ ? 1: do { print STDERR "User '$_' skipped, doesn't exist\n"; 0; } }
+ map { __check_user($_) } @_;
+}
+
+sub __check_user
+{
+ my $instance = shift;
+ require RT::User;
+ my $obj = RT::User->new( $RT::SystemUser );
+ $obj->Load( $instance );
+ return $obj->id ? $obj : undef;
+}
+
+=head2 add NAME [--group GNAME] [--user UNAME]
+
+Adds groups and/or users to recipients of the action NAME.
+
+=cut
+
+sub add {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ my @groups = _check_groups( @{ $opts->{'groups'} } );
+ my @users = _check_users( @{ $opts->{'users'} } );
+
+ unless ( @users + @groups ) {
+ print STDERR "List of groups and users is empty\n";
+ exit(-1);
+ }
+
+ __add( $action, $_ ) foreach @users;
+ __add( $action, $_ ) foreach @groups;
+
+ return;
+}
+
+sub __add
+{
+ my $action = shift;
+ my $obj = shift;
+
+ my @cur = argument_to_list( $action );
+
+ my $id = $obj->id;
+ return if grep $_ == $id, @cur;
+
+ push @cur, $id;
+
+ return $action->__Set( Field => 'Argument', Value => join(',', @cur) );
+}
+
+=head2 delete NAME
+
+Deletes action NAME if scrips doesn't use it.
+
+=cut
+
+sub delete {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ require RT::Scrips;
+ my $scrips = RT::Scrips->new( $RT::SystemUser );
+ $scrips->Limit( FIELD => 'ScripAction', VALUE => $action->id );
+ if ( $scrips->Count ) {
+ my @sid;
+ while( my $s = $scrips->Next ) {
+ push @sid, $s->id;
+ }
+ print STDERR "ScripAction '". $opts->{'name'} ."'"
+ . " is in use by Scrip(s) ". join( ", ", map "#$_", @sid )
+ . "\n";
+ exit(-1);
+ }
+
+ return __delete( $action );
+}
+
+sub __delete {
+ require DBIx::SearchBuilder::Record;
+ return DBIx::SearchBuilder::Record::Delete( shift );
+}
+
+sub _get_action_by_name {
+ my $name = shift;
+ my $actions = _get_our_actions();
+ $actions->Limit(
+ FIELD => 'Name',
+ VALUE => $name
+ );
+
+ if ( $actions->Count > 1 ) {
+ print STDERR "More then one ScripAction with name '$name'\n";
+ }
+
+ return $actions->First;
+}
+
+=head2 switch NAME
+
+Switch action NAME from notify as correspondence to comment and back.
+
+=cut
+
+sub switch {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ my %h = (
+ NotifyGroup => 'NotifyGroupAsComment',
+ NotifyGroupAsComment => 'NotifyGroup'
+ );
+
+ return $action->__Set(
+ Field => 'ExecModule',
+ Value => $h{ $action->ExecModule }
+ );
+}
+
+=head2 rename NAME --newname NEWNAME
+
+Renames action NAME to NEWNAME.
+
+=cut
+
+sub rename {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit( FIELD => 'Name', VALUE => $opts->{'newname'} );
+ if ( $actions->Count ) {
+ print STDERR "ScripAction '". $opts->{'newname'} ."' allready exists\n";
+ exit(-1);
+ }
+
+ return $action->__Set(
+ Field => 'Name',
+ Value => $opts->{'newname'},
+ );
+}
+
+=head2 NOTES
+
+If command has option --group or --user then you can use it more then once,
+if other is not specified.
+
+=cut
+
+###############
+#### Utils ####
+###############
+
+sub argument_to_list {
+ my $action = shift;
+ require RT::Action::NotifyGroup;
+ return RT::Action::NotifyGroup->__SplitArg( $action->Argument );
+}
+
+sub _get_our_actions {
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroup',
+ ENTRYAGGREGATOR => 'OR',
+ );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroupAsComment',
+ ENTRYAGGREGATOR => 'OR',
+ );
+
+ return $actions;
+}
+
+=head1 AUTHOR
+
+Ruslan U. Zakirov E<lt>ruz@bestpractical.comE<gt>
+
+=head1 SEE ALSO
+
+L<RT::Action::NotifyGroup>, L<RT::Action::NotifyGroupAsComment>
+
+=cut
diff --git a/rt/sbin/rt-email-group-admin.in b/rt/sbin/rt-email-group-admin.in
new file mode 100755
index 0000000..dd6548f
--- /dev/null
+++ b/rt/sbin/rt-email-group-admin.in
@@ -0,0 +1,508 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+=head1 NAME
+
+rt-email-group-admin - Command line tool for administrating NotifyGroup actions
+
+=head1 SYNOPSIS
+
+ rt-email-group-admin --list
+ rt-email-group-admin --create 'Notify foo team' --group Foo
+ rt-email-group-admin --create 'Notify foo team as comment' --comment --group Foo
+ rt-email-group-admin --create 'Notify group Foo and Bar' --group Foo --group Bar
+ rt-email-group-admin --create 'Notify user foo@bar.com' --user foo@bar.com
+ rt-email-group-admin --create 'Notify VIPs' --user vip1@bar.com
+ rt-email-group-admin --add 'Notify VIPs' --user vip2@bar.com --group vip1 --user vip3@foo.com
+ rt-email-group-admin --rename 'Notify VIPs' --newname 'Inform VIPs'
+ rt-email-group-admin --switch 'Notify VIPs'
+ rt-email-group-admin --delete 'Notify user foo@bar.com'
+
+=head1 DESCRIPTION
+
+This script list, create, modify or delete scrip actions in the RT DB. Once
+you've created an action you can use it in a scrip.
+
+For example you can create the following action using this script:
+
+ rt-email-group-admin --create 'Notify developers' --group 'Development Team'
+
+Then you can add the followoing scrip to your Bugs queue:
+
+ Condition: On Create
+ Action: Notify developers
+ Template: Transaction
+ Stage: TransactionCreate
+
+Your development team will be notified on every new ticket in the queue.
+
+=cut
+
+use warnings;
+use strict;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT;
+RT::LoadConfig;
+RT::Init;
+
+require RT::Principal;
+require RT::User;
+require RT::Group;
+require RT::ScripActions;
+
+use Getopt::Long qw(GetOptions);
+
+our $cmd = 'usage';
+our $opts = {};
+
+sub parse_args {
+ my $tmp;
+ Getopt::Long::Configure( "pass_through" );
+ if ( GetOptions( 'list' => \$tmp ) && $tmp ) {
+ $cmd = 'list';
+ }
+ elsif ( GetOptions( 'create=s' => \$tmp ) && $tmp ) {
+ $cmd = 'create';
+ $opts->{'name'} = $tmp;
+ $opts->{'groups'} = [];
+ $opts->{'users'} = [];
+ GetOptions( 'comment' => \$opts->{'comment'} );
+ GetOptions( 'group:s@' => $opts->{'groups'} );
+ GetOptions( 'user:s@' => $opts->{'users'} );
+ unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) {
+ usage();
+ exit(-1);
+ }
+ }
+ elsif ( GetOptions( 'add=s' => \$tmp ) && $tmp ) {
+ $cmd = 'add';
+ $opts->{'name'} = $tmp;
+ $opts->{'groups'} = [];
+ $opts->{'users'} = [];
+ GetOptions( 'group:s@' => $opts->{'groups'} );
+ GetOptions( 'user:s@' => $opts->{'users'} );
+ unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) {
+ usage();
+ exit(-1);
+ }
+ }
+ elsif ( GetOptions( 'switch=s' => \$tmp ) && $tmp ) {
+ $cmd = 'switch';
+ $opts->{'name'} = $tmp;
+ }
+ elsif ( GetOptions( 'rename=s' => \$tmp ) && $tmp ) {
+ $cmd = 'rename';
+ $opts->{'name'} = $tmp;
+ GetOptions( 'newname=s' => \$opts->{'newname'} );
+ unless ( $opts->{'newname'} ) {
+ usage();
+ exit(-1);
+ }
+ }
+ elsif ( GetOptions( 'delete=s' => \$tmp ) && $tmp) {
+ $cmd = 'delete';
+ $opts->{'name'} = $tmp;
+ } else {
+ $cmd = 'usage';
+ }
+
+ return;
+}
+
+sub usage {
+ local $@;
+ eval "require Pod::PlainText;";
+ if ( $@ ) {
+ print "see `perldoc $0`\n";
+ } else {
+ my $parser = Pod::PlainText->new( sentence => 0, width => 78 );
+ $parser->parse_from_file( $0 );
+ }
+}
+
+parse_args();
+
+{
+ eval "main::$cmd()";
+ if ( $@ ) {
+ print STDERR $@ ."\n";
+ }
+}
+
+exit(0);
+
+=head1 USAGE
+
+rt-email-group-admin --COMMAND ARGS
+
+=head1 COMMANDS
+
+=head2 list
+
+Lists actions and its descriptions.
+
+=cut
+
+sub list {
+ my $actions = _get_our_actions();
+ while( my $a = $actions->Next ) {
+ _list( $a );
+ }
+ return;
+}
+
+sub _list {
+ my $action = shift;
+
+ print "Name: ". $action->Name() ."\n";
+ print "Module: ". $action->ExecModule() ."\n";
+
+ my @princ = argument_to_list( $action );
+
+ print "Members: \n";
+ foreach( @princ ) {
+ my $obj = RT::Principal->new( $RT::SystemUser );
+ $obj->Load( $_ );
+ next unless $obj->id;
+
+ print "\t". $obj->PrincipalType;
+ print "\t=> ". $obj->Object->Name;
+ print "(Disabled!!!)" if $obj->Disabled;
+ print "\n";
+ }
+ print "\n";
+ return;
+}
+
+=head2 create NAME [--comment] [--group GNAME] [--user UNAME]
+
+Creates new action with NAME and adds users and/or groups to its
+recipient list. Would be notify as comment if --comment specified.
+
+=cut
+
+sub create {
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'Name',
+ VALUE => $opts->{'name'},
+ );
+ if ( $actions->Count ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' allready exists\n";
+ exit(-1);
+ }
+
+ my @groups = _check_groups( @{ $opts->{'groups'} } );
+ my @users = _check_users( @{ $opts->{'users'} } );
+ unless ( @users + @groups ) {
+ print STDERR "List of groups and users is empty\n";
+ exit(-1);
+ }
+
+ my $action = __create_empty( $opts->{'name'}, $opts->{'comment'} );
+
+ __add( $action, $_ ) foreach( @users );
+ __add( $action, $_ ) foreach( @groups );
+
+ return;
+}
+
+sub __create_empty {
+ my $name = shift;
+ my $as_comment = shift || 0;
+ require RT::ScripAction;
+ my $action = RT::ScripAction->new( $RT::SystemUser );
+ $action->Create(
+ Name => $name,
+ Description => "Created with rt-email-group-admin script",
+ ExecModule => $as_comment? 'NotifyGroupAsComment': 'NotifyGroup',
+ Argument => '',
+ );
+
+ return $action;
+}
+
+sub _check_groups
+{
+ return grep { $_ ? 1: do { print STDERR "Group '$_' skipped, doesn't exist\n"; 0; } }
+ map { __check_group($_) } @_;
+}
+
+sub __check_group
+{
+ my $instance = shift;
+ require RT::Group;
+ my $obj = RT::Group->new( $RT::SystemUser );
+ $obj->LoadUserDefinedGroup( $instance );
+ return $obj->id ? $obj : undef;
+}
+
+sub _check_users
+{
+ return grep { $_ ? 1: do { print STDERR "User '$_' skipped, doesn't exist\n"; 0; } }
+ map { __check_user($_) } @_;
+}
+
+sub __check_user
+{
+ my $instance = shift;
+ require RT::User;
+ my $obj = RT::User->new( $RT::SystemUser );
+ $obj->Load( $instance );
+ return $obj->id ? $obj : undef;
+}
+
+=head2 add NAME [--group GNAME] [--user UNAME]
+
+Adds groups and/or users to recipients of the action NAME.
+
+=cut
+
+sub add {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ my @groups = _check_groups( @{ $opts->{'groups'} } );
+ my @users = _check_users( @{ $opts->{'users'} } );
+
+ unless ( @users + @groups ) {
+ print STDERR "List of groups and users is empty\n";
+ exit(-1);
+ }
+
+ __add( $action, $_ ) foreach @users;
+ __add( $action, $_ ) foreach @groups;
+
+ return;
+}
+
+sub __add
+{
+ my $action = shift;
+ my $obj = shift;
+
+ my @cur = argument_to_list( $action );
+
+ my $id = $obj->id;
+ return if grep $_ == $id, @cur;
+
+ push @cur, $id;
+
+ return $action->__Set( Field => 'Argument', Value => join(',', @cur) );
+}
+
+=head2 delete NAME
+
+Deletes action NAME if scrips doesn't use it.
+
+=cut
+
+sub delete {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ require RT::Scrips;
+ my $scrips = RT::Scrips->new( $RT::SystemUser );
+ $scrips->Limit( FIELD => 'ScripAction', VALUE => $action->id );
+ if ( $scrips->Count ) {
+ my @sid;
+ while( my $s = $scrips->Next ) {
+ push @sid, $s->id;
+ }
+ print STDERR "ScripAction '". $opts->{'name'} ."'"
+ . " is in use by Scrip(s) ". join( ", ", map "#$_", @sid )
+ . "\n";
+ exit(-1);
+ }
+
+ return __delete( $action );
+}
+
+sub __delete {
+ require DBIx::SearchBuilder::Record;
+ return DBIx::SearchBuilder::Record::Delete( shift );
+}
+
+sub _get_action_by_name {
+ my $name = shift;
+ my $actions = _get_our_actions();
+ $actions->Limit(
+ FIELD => 'Name',
+ VALUE => $name
+ );
+
+ if ( $actions->Count > 1 ) {
+ print STDERR "More then one ScripAction with name '$name'\n";
+ }
+
+ return $actions->First;
+}
+
+=head2 switch NAME
+
+Switch action NAME from notify as correspondence to comment and back.
+
+=cut
+
+sub switch {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ my %h = (
+ NotifyGroup => 'NotifyGroupAsComment',
+ NotifyGroupAsComment => 'NotifyGroup'
+ );
+
+ return $action->__Set(
+ Field => 'ExecModule',
+ Value => $h{ $action->ExecModule }
+ );
+}
+
+=head2 rename NAME --newname NEWNAME
+
+Renames action NAME to NEWNAME.
+
+=cut
+
+sub rename {
+ my $action = _get_action_by_name( $opts->{'name'} );
+ unless ( $action ) {
+ print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n";
+ exit(-1);
+ }
+
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit( FIELD => 'Name', VALUE => $opts->{'newname'} );
+ if ( $actions->Count ) {
+ print STDERR "ScripAction '". $opts->{'newname'} ."' allready exists\n";
+ exit(-1);
+ }
+
+ return $action->__Set(
+ Field => 'Name',
+ Value => $opts->{'newname'},
+ );
+}
+
+=head2 NOTES
+
+If command has option --group or --user then you can use it more then once,
+if other is not specified.
+
+=cut
+
+###############
+#### Utils ####
+###############
+
+sub argument_to_list {
+ my $action = shift;
+ require RT::Action::NotifyGroup;
+ return RT::Action::NotifyGroup->__SplitArg( $action->Argument );
+}
+
+sub _get_our_actions {
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroup',
+ ENTRYAGGREGATOR => 'OR',
+ );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroupAsComment',
+ ENTRYAGGREGATOR => 'OR',
+ );
+
+ return $actions;
+}
+
+=head1 AUTHOR
+
+Ruslan U. Zakirov E<lt>ruz@bestpractical.comE<gt>
+
+=head1 SEE ALSO
+
+L<RT::Action::NotifyGroup>, L<RT::Action::NotifyGroupAsComment>
+
+=cut
diff --git a/rt/sbin/rt-server b/rt/sbin/rt-server
new file mode 100755
index 0000000..2c7eca5
--- /dev/null
+++ b/rt/sbin/rt-server
@@ -0,0 +1,129 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use warnings;
+use strict;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT;
+RT::LoadConfig();
+RT->InitLogging();
+if (RT->Config->Get('DevelMode')) { require Module::Refresh; }
+
+RT::CheckPerlRequirements();
+RT->InitPluginPaths();
+
+my $port = shift @ARGV || RT->Config->Get('WebPort') || '8080';
+
+
+require RT::Handle;
+my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity;
+
+unless ( $integrity ) {
+ print STDERR <<EOF;
+
+RT couldn't connect to the database where tickets are stored.
+If this is a new installation of RT, you should visit the URL below
+to configure RT and initialize your database.
+
+If this is an existing RT installation, this may indicate a database
+connectivity problem.
+
+The error RT got back when trying to connect to your database was:
+
+$msg
+
+EOF
+
+ require RT::Installer;
+ # don't enter install mode if the file exists but is unwritable
+ if (-e RT::Installer->ConfigFile && !-w _) {
+ die "Since your configuration exists but is not writable, I'm refusing to do anything.\n";
+ }
+
+ RT->Config->Set( 'LexiconLanguages' => '*' );
+ RT::I18N->Init;
+
+ RT->InstallMode(1);
+} else {
+ RT->ConnectToDatabase();
+ RT->InitSystemObjects();
+ RT->InitClasses();
+ RT->InitPlugins();
+}
+
+require RT::Interface::Web::Standalone;
+my $server = RT::Interface::Web::Standalone->new;
+$server->net_server('RT::Interface::Web::Standalone::PreFork');
+$server->port($port);
+$server->run();
+
diff --git a/rt/sbin/rt-server.in b/rt/sbin/rt-server.in
new file mode 100644
index 0000000..cd146e0
--- /dev/null
+++ b/rt/sbin/rt-server.in
@@ -0,0 +1,129 @@
+#!@PERL@ -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use warnings;
+use strict;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT;
+RT::LoadConfig();
+RT->InitLogging();
+if (RT->Config->Get('DevelMode')) { require Module::Refresh; }
+
+RT::CheckPerlRequirements();
+RT->InitPluginPaths();
+
+my $port = shift @ARGV || RT->Config->Get('WebPort') || '8080';
+
+
+require RT::Handle;
+my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity;
+
+unless ( $integrity ) {
+ print STDERR <<EOF;
+
+RT couldn't connect to the database where tickets are stored.
+If this is a new installation of RT, you should visit the URL below
+to configure RT and initialize your database.
+
+If this is an existing RT installation, this may indicate a database
+connectivity problem.
+
+The error RT got back when trying to connect to your database was:
+
+$msg
+
+EOF
+
+ require RT::Installer;
+ # don't enter install mode if the file exists but is unwritable
+ if (-e RT::Installer->ConfigFile && !-w _) {
+ die "Since your configuration exists but is not writable, I'm refusing to do anything.\n";
+ }
+
+ RT->Config->Set( 'LexiconLanguages' => '*' );
+ RT::I18N->Init;
+
+ RT->InstallMode(1);
+} else {
+ RT->ConnectToDatabase();
+ RT->InitSystemObjects();
+ RT->InitClasses();
+ RT->InitPlugins();
+}
+
+require RT::Interface::Web::Standalone;
+my $server = RT::Interface::Web::Standalone->new;
+$server->net_server('RT::Interface::Web::Standalone::PreFork');
+$server->port($port);
+$server->run();
+
diff --git a/rt/sbin/rt-setup-database b/rt/sbin/rt-setup-database
index 49af151..d4a256f 100644
--- a/rt/sbin/rt-setup-database
+++ b/rt/sbin/rt-setup-database
@@ -1,9 +1,9 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -47,41 +47,56 @@
#
# END BPS TAGGED BLOCK }}}
use strict;
-use vars qw($PROMPT $VERSION $Handle $Nobody $SystemUser $item);
-use vars
- qw(@Groups @Users @ACL @Queues @ScripActions @ScripConditions @Templates @CustomFields @Scrips @Attributes);
+use warnings;
+
+use vars qw($Nobody $SystemUser $item);
-use lib "/opt/rt3/local/lib";
-use lib "/opt/rt3/lib";
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
#This drags in RT's config.pm
# We do it in a begin block because RT::Handle needs to know the type to do its
# inheritance
-use RT;
-use Carp;
-use RT::User;
-use RT::CurrentUser;
-use RT::Template;
-use RT::ScripAction;
-use RT::ACE;
-use RT::Group;
-use RT::User;
-use RT::Queue;
-use RT::ScripCondition;
-use RT::CustomField;
-use RT::Scrip;
-
-RT::LoadConfig();
+BEGIN {
+ use RT;
+ RT::LoadConfig();
+ RT::InitClasses();
+}
+
use Term::ReadKey;
use Getopt::Long;
-my %args;
+$| = 1; # unbuffer all output.
+my %args;
GetOptions(
\%args,
- 'prompt-for-dba-password', 'force', 'debug',
- 'action=s', 'dba=s', 'dba-password=s', 'datafile=s',
- 'datadir=s'
+ 'action=s',
+ 'force', 'debug',
+ 'dba=s', 'dba-password=s', 'prompt-for-dba-password',
+ 'datafile=s', 'datadir=s'
);
unless ( $args{'action'} ) {
@@ -89,583 +104,321 @@ unless ( $args{'action'} ) {
exit(-1);
}
-$| = 1; #unbuffer that output.
-
-require RT::Handle;
-my $Handle = RT::Handle->new($RT::DatabaseType);
-$Handle->BuildDSN;
-my $dbh;
-
-if ( $args{'prompt-for-dba-password'} ) {
- $args{'dba-password'} = get_dba_password();
- chomp( $args{'dba-password'} );
-}
-
-if ( $args{'action'} eq 'init' ) {
- $dbh = DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} )
- || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
- print "Now creating a database for RT.\n";
- if ( $RT::DatabaseType ne 'Oracle' || $args{'dba'} ne $RT::DatabaseUser ) {
- create_db();
- } else {
- print "...skipped as ".$args{'dba'} ." is not " . $RT::DatabaseUser . " or we're working with Oracle.\n";
- }
-
- if ( $RT::DatabaseType eq "mysql" ) {
- # Check which version we're running
- my ($version) = $dbh->selectrow_hashref("show variables like 'version'")->{Value} =~ /^(\d\.\d+)/;
- print "*** Warning: RT is unsupported on MySQL versions before 4.0.x\n" if $version < 4;
-
- # MySQL must have InnoDB support
- my $innodb = $dbh->selectrow_hashref("show variables like 'have_innodb'")->{Value};
- if ( $innodb eq "NO" ) {
- die "RT requires that MySQL be compiled with InnoDB table support.\n".
- "See http://dev.mysql.com/doc/mysql/en/InnoDB.html\n";
- } elsif ( $innodb eq "DISABLED" ) {
- die "RT requires that MySQL InnoDB table support be enabled.\n".
- ($version < 4
- ? "Add 'innodb_data_file_path=ibdata1:10M:autoextend' to the [mysqld] section of my.cnf\n"
- : "Remove the 'skip-innodb' line from your my.cnf file, restart MySQL, and try again.\n");
- }
- }
-
- # SQLite can't deal with the disconnect/reconnect
- unless ( $RT::DatabaseType eq 'SQLite' ) {
-
- $dbh->disconnect;
-
- if ( $RT::DatabaseType eq "Oracle" ) {
- $RT::DatabasePassword = $RT::DatabasePassword; #Warning avidance
- $dbh = DBI->connect( $Handle->DSN, ${RT::DatabaseUser}, ${RT::DatabasePassword} ) || die $DBI::errstr;
- } else {
- $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) || die $DBI::errstr;
- }
- }
- print "Now populating database schema.\n";
- insert_schema();
- print "Now inserting database ACLs\n";
- insert_acl() unless $RT::DatabaseType eq 'Oracle';
- print "Now inserting RT core system objects\n";
- insert_initial_data();
- print "Now inserting RT data\n";
- insert_data( $RT::EtcPath . "/initialdata" );
-}
-elsif ( $args{'action'} eq 'drop' ) {
- unless ( $dbh =
- DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) )
- {
- warn $DBI::errstr;
- warn "Database doesn't appear to exist. Aborting database drop.";
- exit;
- }
- drop_db();
-}
-elsif ( $args{'action'} eq 'insert' ) {
- insert_data( $args{'datafile'} || ($args{'datadir'}."/content") );
-}
-elsif ( $args{'action'} eq 'acl' ) {
- $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} )
- || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
- insert_acl($args{'datadir'});
-}
-elsif ( $args{'action'} eq 'schema' ) {
- $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} )
- || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
- insert_schema($args{'datadir'});
-}
-else {
- print STDERR "$0 called with an invalid --action parameter\n";
+# check and setup @actions
+my @actions = grep $_, split /,/, $args{'action'};
+if ( @actions > 1 && $args{'datafile'} ) {
+ print STDERR "You can not use --datafile option with multiple actions.\n";
exit(-1);
}
-
-# {{{ sub insert_schema
-sub insert_schema {
- my $base_path = (shift || $RT::EtcPath);
- my (@schema);
- print "Creating database schema.\n";
-
- my $schema_file = $base_path . "/schema." . $RT::DatabaseType;
- if ( -f $schema_file ) {
- open( SCHEMA, "<$schema_file" ) or die "Can't open $schema_file: $!";
- my @lines = <SCHEMA>;
-
- my $local_schema_file = $RT::LocalEtcPath . "/schema." . $RT::DatabaseType;
- if (-f $local_schema_file) {
- open( SCHEMA_LOCAL, "<$local_schema_file" )
- or die "Can't open $local_schema_file: $!";
- push @lines, ';;', <SCHEMA_LOCAL>;
- }
-
- my $statement = "";
- foreach my $line (@lines) {
- $line =~ s/\#.*//g;
- $line =~ s/--.*//g;
- $statement .= $line;
- if ( $line =~ /;(\s*)$/ ) {
- $statement =~ s/;(\s*)$//g;
- push @schema, $statement;
- $statement = "";
- }
- }
-
- local $SIG{__WARN__} = sub {};
- my $is_local = 0; # local/etc/schema needs to be nonfatal.
- $dbh->begin_work or die $dbh->errstr;
- foreach my $statement (@schema) {
- if ( $statement =~ /^\s*;$/ ) { $is_local = 1; next; }
-
- print STDERR "SQL: $statement\n" if defined $args{'debug'};
- my $sth = $dbh->prepare($statement) or die $dbh->errstr;
- unless ( $sth->execute or $is_local ) {
- die "Problem with statement:\n $statement\n" . $sth->errstr;
- }
- }
- $dbh->commit or die $dbh->errstr;
+foreach ( @actions ) {
+ unless ( /^(?:init|create|drop|schema|acl|coredata|insert|upgrade)$/ ) {
+ print STDERR "$0 called with an invalid --action parameter.\n";
+ exit(-1);
}
- else {
- die "Couldn't find schema file for " . $RT::DatabaseType . "\n";
+ if ( /^(?:init|drop|upgrade)$/ && @actions > 1 ) {
+ print STDERR "You can not mix init, drop or upgrade action with any action.\n";
+ exit(-1);
}
- print "Done setting up database schema.\n";
}
-# }}}
-
-# {{{ sub drop_db
-sub drop_db {
- if ( $RT::DatabaseType eq 'Oracle' ) {
- print <<END;
-
-To delete the tables and sequences of the RT Oracle database by running
- \@etc/drop.Oracle
-through SQLPlus.
+# convert init to multiple actions
+my $init = 0;
+if ( $actions[0] eq 'init' ) {
+ @actions = qw(create schema acl coredata insert);
+ $init = 1;
+}
-END
- return;
- }
- unless ( $args{'force'} ) {
- print <<END;
+# set options from environment
+foreach my $key(qw(Type Host Name User Password)) {
+ next unless exists $ENV{ 'RT_DB_'. uc $key };
+ print "Using Database$key from RT_DB_". uc($key) ." environment variable.\n";
+ RT->Config->Set( "Database$key", $ENV{ 'RT_DB_'. uc $key });
+}
-About to drop $RT::DatabaseType database $RT::DatabaseName on $RT::DatabaseHost.
-WARNING: This will erase all data in $RT::DatabaseName.
+my $db_type = RT->Config->Get('DatabaseType') || '';
+my $db_host = RT->Config->Get('DatabaseHost') || '';
+my $db_name = RT->Config->Get('DatabaseName') || '';
+my $db_user = RT->Config->Get('DatabaseUser') || '';
+my $db_pass = RT->Config->Get('DatabasePassword') || '';
-END
- exit unless _yesno();
+# load it here to get error immidiatly if DB type is not supported
+require RT::Handle;
- }
+if ( $db_type eq 'SQLite' && !File::Spec->file_name_is_absolute($db_name) ) {
+ $db_name = File::Spec->catfile($RT::VarPath, $db_name);
+ RT->Config->Set( DatabaseName => $db_name );
+}
- print "Dropping $RT::DatabaseType database $RT::DatabaseName.\n";
+my $dba_user = $args{'dba'} || $ENV{'RT_DBA_USER'} || $db_user || '';
+my $dba_pass = $args{'dba-password'} || $ENV{'RT_DBA_PASSWORD'};
- if ( $RT::DatabaseType eq 'SQLite' ) {
- unlink $RT::DatabaseName or warn $!;
- return;
- }
- $dbh->do("Drop DATABASE $RT::DatabaseName") or warn $DBI::errstr;
+if ( !$args{force} && ( !defined $dba_pass || $args{'prompt-for-dba-password'} ) ) {
+ $dba_pass = get_dba_password();
+ chomp $dba_pass if defined($dba_pass);
}
-# }}}
+print "Working with:\n"
+ ."Type:\t$db_type\nHost:\t$db_host\nName:\t$db_name\n"
+ ."User:\t$db_user\nDBA:\t$dba_user\n";
-# {{{ sub create_db
-sub create_db {
- print "Creating $RT::DatabaseType database $RT::DatabaseName.\n";
- if ( $RT::DatabaseType eq 'SQLite' ) {
- return;
- }
- elsif ( $RT::DatabaseType eq 'Pg' ) {
- $dbh->do("CREATE DATABASE $RT::DatabaseName WITH ENCODING='UNICODE'");
- if ( $DBI::errstr ) {
- $dbh->do("CREATE DATABASE $RT::DatabaseName") || die $DBI::errstr;
- }
- }
- elsif ( $RT::DatabaseType eq 'Oracle' ) {
- insert_acl();
- }
- elsif ( $RT::DatabaseType eq 'Informix' ) {
- $ENV{DB_LOCALE} = 'en_us.utf8';
- $dbh->do("CREATE DATABASE $RT::DatabaseName WITH BUFFERED LOG");
- }
- else {
- $dbh->do("CREATE DATABASE $RT::DatabaseName") or die $DBI::errstr;
- }
+foreach my $action ( @actions ) {
+ no strict 'refs';
+ my ($status, $msg) = *{ 'action_'. $action }{'CODE'}->( %args );
+ error($action, $msg) unless $status;
+ print $msg ."\n" if $msg;
+ print "Done.\n";
}
-# }}}
+sub action_create {
+ my %args = @_;
+ my $dbh = get_system_dbh();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
+ return ($status, $msg) unless $status;
-sub get_dba_password {
- print "In order to create or update your RT database,";
- print "this script needs to connect to your "
- . $RT::DatabaseType
- . " instance on "
- . $RT::DatabaseHost . " as "
- . $args{'dba'} . ".\n";
- print "Please specify that user's database password below. If the user has no database\n";
- print "password, just press return.\n\n";
- print "Password: ";
- ReadMode('noecho');
- my $password = ReadLine(0);
- ReadMode('normal');
- print "\n";
- return ($password);
+ print "Now creating a $db_type database $db_name for RT.\n";
+ return RT::Handle->CreateDatabase( $dbh );
}
-# {{{ sub _yesno
-sub _yesno {
- print "Proceed [y/N]:";
- my $x = scalar(<STDIN>);
- $x =~ /^y/i;
-}
+sub action_drop {
+ my %args = @_;
-# }}}
+ print "Dropping $db_type database $db_name.\n";
+ unless ( $args{'force'} ) {
+ print <<END;
-# {{{ insert_acls
-sub insert_acl {
- my $base_path = (shift || $RT::EtcPath);
+About to drop $db_type database $db_name on $db_host.
+WARNING: This will erase all data in $db_name.
- if ( $RT::DatabaseType =~ /^oracle$/i ) {
- do $base_path . "/acl.Oracle"
- || die "Couldn't find ACLS for Oracle\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^pg$/i ) {
- do $base_path . "/acl.Pg" || die "Couldn't find ACLS for Pg\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^mysql$/i ) {
- do $base_path . "/acl.mysql"
- || die "Couldn't find ACLS for mysql in $base_path\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^Sybase$/i ) {
- do $base_path . "/acl.Sybase"
- || die "Couldn't find ACLS for Sybase in $base_path\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^informix$/i ) {
- do $base_path . "/acl.Informix"
- || die "Couldn't find ACLS for Informix in $base_path\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^SQLite$/i ) {
- return;
- }
- else {
- die "Unknown RT database type";
+END
+ exit(-2) unless _yesno();
}
- my @acl = acl($dbh);
- foreach my $statement (@acl) {
- print STDERR $statement if $args{'debug'};
- my $sth = $dbh->prepare($statement) or die $dbh->errstr;
- unless ( $sth->execute ) {
- die "Problem with statement:\n $statement\n" . $sth->errstr;
- }
- }
- print "Done setting up database ACLs.\n";
+ my $dbh = get_system_dbh();
+ return RT::Handle->DropDatabase( $dbh );
}
-# }}}
-
-=head2 get_system_dsn
-
-Returns a dsn suitable for database creates and drops
-and user creates and drops
-
-=cut
-
-sub get_system_dsn {
+sub action_schema {
+ my %args = @_;
+ my $dbh = get_admin_dbh();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
+ return ($status, $msg) unless $status;
- my $dsn = $Handle->DSN;
+ print "Now populating database schema.\n";
+ return RT::Handle->InsertSchema( $dbh, $args{'datafile'} || $args{'datadir'} );
+}
- #with mysql, you want to connect sans database to funge things
- if ( $RT::DatabaseType eq 'mysql' ) {
- $dsn =~ s/dbname=$RT::DatabaseName//;
+sub action_acl {
+ my %args = @_;
+ my $dbh = get_admin_dbh();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
+ return ($status, $msg) unless $status;
- # with postgres, you want to connect to database1
- }
- elsif ( $RT::DatabaseType eq 'Pg' ) {
- $dsn =~ s/dbname=$RT::DatabaseName/dbname=template1/;
- }
- elsif ( $RT::DatabaseType eq 'Informix' ) {
- # with Informix, you want to connect sans database:
- $dsn =~ s/Informix:$RT::DatabaseName/Informix:/;
- }
- return $dsn;
+ print "Now inserting database ACLs\n";
+ return RT::Handle->InsertACL( $dbh, $args{'datafile'} || $args{'datadir'} );
}
-sub insert_initial_data {
-
+sub action_coredata {
+ my %args = @_;
+ $RT::Handle = new RT::Handle;
+ $RT::Handle->dbh( undef );
+ RT::ConnectToDatabase();
RT::InitLogging();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'pre' );
+ return ($status, $msg) unless $status;
- #connect to the db, for actual RT work
- require RT::Handle;
- $RT::Handle = RT::Handle->new();
- $RT::Handle->Connect();
-
- #Put together a current user object so we can create a User object
- my $CurrentUser = new RT::CurrentUser();
-
- print "Checking for existing system user...";
- my $test_user = RT::User->new($CurrentUser);
- $test_user->Load('RT_System');
- if ( $test_user->id ) {
- print "found!\n\nYou appear to have a functional RT database.\n"
- . "Exiting, so as not to clobber your existing data.\n";
- exit(-1);
-
- }
- else {
- print "not found. This appears to be a new installation.\n";
- }
-
- print "Creating system user...";
- my $RT_System = new RT::User($CurrentUser);
-
- my ( $val, $msg ) = $RT_System->_BootstrapCreate(
- Name => 'RT_System',
- RealName => 'The RT System itself',
- Comments =>
-'Do not delete or modify this user. It is integral to RT\'s internal database structures',
- Creator => '1',
- LastUpdatedBy => '1',
- );
-
- unless ( $val ) {
- print "$msg\n";
- exit(-1);
- }
- print "done.\n";
- $RT::Handle->Disconnect() unless $RT::DatabaseType eq 'SQLite';
+ print "Now inserting RT core system objects\n";
+ return $RT::Handle->InsertInitialData;
+}
+sub action_insert {
+ my %args = @_;
+ $RT::Handle = new RT::Handle;
+ RT::Init();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'pre' );
+ return ($status, $msg) unless $status;
+
+ print "Now inserting data\n";
+ my $file = $args{'datafile'};
+ $file = $RT::EtcPath . "/initialdata" if $init && !$file;
+ $file ||= $args{'datadir'}."/content";
+ return $RT::Handle->InsertData( $file );
}
-# load some sort of data into the database
+sub action_upgrade {
+ my %args = @_;
+ my $base_dir = $args{'datadir'} || "./etc/upgrade";
+ return (0, "Couldn't read dir '$base_dir' with upgrade data")
+ unless -d $base_dir || -r _;
+
+ my $upgrading_from = undef;
+ do {
+ if ( defined $upgrading_from ) {
+ print "Doesn't match #.#.#: ";
+ } else {
+ print "Enter RT version you're upgrading from: ";
+ }
+ $upgrading_from = scalar <STDIN>;
+ chomp $upgrading_from;
+ $upgrading_from =~ s/\s+//g;
+ } while $upgrading_from !~ /^\d+\.\d+\.\d+$/;
+
+ my $upgrading_to = $RT::VERSION;
+ return (0, "The current version $upgrading_to is lower than $upgrading_from")
+ if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) > 0;
-sub insert_data {
- my $datafile = shift;
+ return (1, "The version $upgrading_to you're upgrading to is up to date")
+ if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) == 0;
- #Connect to the database and get RT::SystemUser and RT::Nobody loaded
- RT::Init;
+ my @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to);
- my $CurrentUser = RT::CurrentUser->new();
- $CurrentUser->LoadByName('RT_System');
+ return (1, "No DB changes between $upgrading_from and $upgrading_to")
+ unless @versions;
- if ( $datafile eq $RT::EtcPath . "/initialdata" ) {
+ print "\nGoing to apply following upgrades:\n";
+ print map "* $_\n", @versions;
- print "Creating Superuser ACL...";
+ {
+ my $custom_upgrading_to = undef;
+ do {
+ if ( defined $custom_upgrading_to ) {
+ print "Doesn't match #.#.#: ";
+ } else {
+ print "\nEnter RT version if you want to stop upgrade at some point,\n";
+ print " or leave it blank if you want apply above upgrades: ";
+ }
+ $custom_upgrading_to = scalar <STDIN>;
+ chomp $custom_upgrading_to;
+ $custom_upgrading_to =~ s/\s+//g;
+ last unless $custom_upgrading_to;
+ } while $custom_upgrading_to !~ /^\d+\.\d+\.\d+$/;
+
+ if ( $custom_upgrading_to ) {
+ return (
+ 0, "The version you entered ($custom_upgrading_to) is lower than\n"
+ ."version you're upgrading from ($upgrading_from)"
+ ) if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) > 0;
+
+ return (1, "The version you're upgrading to is up to date")
+ if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) == 0;
+
+ if ( RT::Handle::cmp_version( $RT::VERSION, $custom_upgrading_to ) < 0 ) {
+ print "Version you entered is greater than installed ($RT::VERSION).\n";
+ _yesno() or exit(-2);
+ }
+ # ok, checked everything no let's refresh list
+ $upgrading_to = $custom_upgrading_to;
+ @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to);
- my $superuser_ace = RT::ACE->new($CurrentUser);
- $superuser_ace->_BootstrapCreate(
- PrincipalId => ACLEquivGroupId( $CurrentUser->Id ),
- PrincipalType => 'Group',
- RightName => 'SuperUser',
- ObjectType => 'RT::System',
- ObjectId => '1' );
+ return (1, "No DB changes between $upgrading_from and $upgrading_to")
+ unless @versions;
- print "done.\n";
+ print "\nGoing to apply following upgrades:\n";
+ print map "* $_\n", @versions;
+ }
}
- # Slurp in stuff to insert from the datafile. Possible things to go in here:-
- # @groups, @users, @acl, @queues, @ScripActions, @ScripConditions, @templates
-
- require $datafile
- || die "Couldn't find initial data for import\n" . $@;
+ print "\nIT'S VERY IMPORTANT TO BACK UP BEFORE THIS STEP\n\n";
+ _yesno() or exit(-2) unless $args{'force'};
- if ( @Groups ) {
- print "Creating groups...";
- foreach $item (@Groups) {
- my $new_entry = RT::Group->new($CurrentUser);
- my ( $return, $msg ) = $new_entry->_Create(%$item);
- print "(Error: $msg)" unless $return;
- print $return. ".";
+ foreach my $v ( @versions ) {
+ print "Processing $v\n";
+ my %tmp = (%args, datadir => "$base_dir/$v", datafile => undef);
+ if ( -e "$base_dir/$v/schema.$db_type" ) {
+ action_schema( %tmp );
}
- print "done.\n";
- }
- if ( @Users ) {
- print "Creating users...";
- foreach $item (@Users) {
- my $new_entry = new RT::User($CurrentUser);
- my ( $return, $msg ) = $new_entry->Create(%$item);
- print "(Error: $msg)" unless $return;
- print $return. ".";
+ if ( -e "$base_dir/$v/acl.$db_type" ) {
+ action_acl( %tmp );
}
- print "done.\n";
- }
- if ( @Queues ) {
- print "Creating queues...";
- for $item (@Queues) {
- my $new_entry = new RT::Queue($CurrentUser);
- my ( $return, $msg ) = $new_entry->Create(%$item);
- print "(Error: $msg)" unless $return;
- print $return. ".";
+ if ( -e "$base_dir/$v/content" ) {
+ action_insert( %tmp );
}
- print "done.\n";
}
- if ( @ACL ) {
- print "Creating ACL...";
- for my $item (@ACL) {
-
- my ($princ, $object);
-
- # Global rights or Queue rights?
- if ( $item->{'Queue'} ) {
- $object = RT::Queue->new($CurrentUser);
- $object->Load( $item->{'Queue'} );
- } else {
- $object = $RT::System;
- }
-
- # Group rights or user rights?
- if ( $item->{'GroupDomain'} ) {
- $princ = RT::Group->new($CurrentUser);
- if ( $item->{'GroupDomain'} eq 'UserDefined' ) {
- $princ->LoadUserDefinedGroup( $item->{'GroupId'} );
- } elsif ( $item->{'GroupDomain'} eq 'SystemInternal' ) {
- $princ->LoadSystemInternalGroup( $item->{'GroupType'} );
- } elsif ( $item->{'GroupDomain'} eq 'RT::System-Role' ) {
- $princ->LoadSystemRoleGroup( $item->{'GroupType'} );
- } elsif ( $item->{'GroupDomain'} eq 'RT::Queue-Role' &&
- $item->{'Queue'} )
- {
- $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'},
- Queue => $object->id);
- } else {
- $princ->Load( $item->{'GroupId'} );
- }
- } else {
- $princ = RT::User->new($CurrentUser);
- $princ->Load( $item->{'UserId'} );
- }
+ return 1;
+}
- # Grant it
- my ( $return, $msg ) = $princ->PrincipalObj->GrantRight(
- Right => $item->{'Right'},
- Object => $object );
+sub get_versions_from_to {
+ my ($base_dir, $from, $to) = @_;
- if ( $return ) {
- print $return. ".";
- }
- else {
- print $msg . ".";
+ opendir my $dh, $base_dir or die "couldn't open dir: $!";
+ my @versions = grep -d "$base_dir/$_" && /\d+\.\d+\.\d+/, readdir $dh;
+ closedir $dh;
- }
+ return
+ grep RT::Handle::cmp_version($_, $to) <= 0,
+ grep RT::Handle::cmp_version($_, $from) > 0,
+ sort RT::Handle::cmp_version @versions;
+}
- }
- print "done.\n";
- }
- if ( @CustomFields ) {
- print "Creating custom fields...";
- for $item (@CustomFields) {
- my $new_entry = new RT::CustomField($CurrentUser);
- my $values = $item->{'Values'};
- delete $item->{'Values'};
- my ( $return, $msg ) = $new_entry->Create(%$item);
- unless( $return ) {
- print "(Error: $msg)\n";
- next;
- }
+sub error {
+ my ($action, $msg) = @_;
+ print STDERR "Couldn't finish '$action' step.\n\n";
+ print STDERR "ERROR: $msg\n\n";
+ exit(-1);
+}
- foreach my $value ( @{$values} ) {
- my ( $eval, $emsg ) = $new_entry->AddValue(%$value);
- print "(Error: $emsg)\n" unless $eval;
- }
+sub get_dba_password {
+ print "In order to create or update your RT database,"
+ . " this script needs to connect to your "
+ . " $db_type instance on $db_host as $dba_user\n";
+ print "Please specify that user's database password below. If the user has no database\n";
+ print "password, just press return.\n\n";
+ print "Password: ";
+ ReadMode('noecho');
+ my $password = ReadLine(0);
+ ReadMode('normal');
+ print "\n";
+ return ($password);
+}
- if ( $item->{LookupType} && !exists $item->{'Queue'} ) { # enable by default
- my $ocf = RT::ObjectCustomField->new($CurrentUser);
- $ocf->Create( CustomField => $new_entry->Id );
- }
+=head2 get_system_dbh
- print "(Error: $msg)\n" unless $return;
- print $return. ".";
- }
+Returns L<DBI> database handle connected to B<system> with DBA credentials.
- print "done.\n";
- }
+See also L<RT::Handle/SystemDSN>.
- if ( @ScripActions ) {
- print "Creating ScripActions...";
+=cut
- for $item (@ScripActions) {
- my $new_entry = RT::ScripAction->new($CurrentUser);
- my ($return,$msg) = $new_entry->Create(%$item);
- unless ($return) {
- print "(Error: $msg)\n";
- next;
- }
- print $return. ".";
- }
+sub get_system_dbh {
+ return _get_dbh( RT::Handle->SystemDSN, $dba_user, $dba_pass );
+}
- print "done.\n";
- }
+sub get_admin_dbh {
+ return _get_dbh( RT::Handle->DSN, $dba_user, $dba_pass );
+}
- if ( @ScripConditions ) {
- print "Creating ScripConditions...";
+=head2 get_rt_dbh [USER, PASSWORD]
- for $item (@ScripConditions) {
- my $new_entry = RT::ScripCondition->new($CurrentUser);
- my ($return,$msg) = $new_entry->Create(%$item);
- unless ($return) {
- print "(Error: $msg)\n";
- next;
- }
- print $return. ".";
- }
+Returns L<DBI> database handle connected to RT database,
+you may specify credentials(USER and PASSWORD) to connect
+with. By default connects with credentials from RT config.
- print "done.\n";
- }
+=cut
- if ( @Templates ) {
- print "Creating templates...";
+sub get_rt_dbh {
+ return _get_dbh( RT::Handle->DSN, $db_user, $db_pass );
+}
- for $item (@Templates) {
- my $new_entry = new RT::Template($CurrentUser);
- my $return = $new_entry->Create(%$item);
- print $return. ".";
- }
- print "done.\n";
- }
- if ( @Scrips ) {
- print "Creating scrips...";
-
- for $item (@Scrips) {
- my $new_entry = new RT::Scrip($CurrentUser);
- my ( $return, $msg ) = $new_entry->Create(%$item);
- if ( $return ) {
- print $return. ".";
- }
- else {
- print "(Error: $msg)\n";
- }
- }
- print "done.\n";
- }
- if ( @Attributes ) {
- print "Creating predefined searches...";
- my $sys = RT::System->new($CurrentUser);
-
- for $item (@Attributes) {
- my $obj = delete $item->{Object}; # XXX: make this something loadable
- $obj ||= $sys;
- my ( $return, $msg ) = $obj->AddAttribute (%$item);
- if ( $return ) {
- print $return. ".";
- }
- else {
- print "(Error: $msg)\n";
- }
+sub _get_dbh {
+ my ($dsn, $user, $pass) = @_;
+ my $dbh = DBI->connect(
+ $dsn, $user, $pass,
+ { RaiseError => 0, PrintError => 0 },
+ );
+ unless ( $dbh ) {
+ my $msg = "Failed to connect to $dsn as user '$user': ". $DBI::errstr;
+ if ( $args{'debug'} ) {
+ require Carp; Carp::confess( $msg );
+ } else {
+ print STDERR $msg; exit -1;
}
- print "done.\n";
}
- $RT::Handle->Disconnect() unless $RT::DatabaseType eq 'SQLite';
- print "Done setting up database content.\n";
+ return $dbh;
}
-=head2 ACLEquivGroupId
-
-Given a userid, return that user's acl equivalence group
-
-=cut
-
-sub ACLEquivGroupId {
- my $username = shift;
- my $user = RT::User->new($RT::SystemUser);
- $user->Load($username);
- my $equiv_group = RT::Group->new($RT::SystemUser);
- $equiv_group->LoadACLEquivalenceGroup($user);
- return ( $equiv_group->Id );
+sub _yesno {
+ print "Proceed [y/N]:";
+ my $x = scalar(<STDIN>);
+ $x =~ /^y/i;
}
sub help {
@@ -674,25 +427,39 @@ sub help {
$0: Set up RT's database
---action init Initialize the database
- drop Drop the database.
- This will ERASE ALL YOUR DATA
- insert Insert data into RT's database.
- By default, will use RT's installation data.
- To use a local or supplementary datafile, specify it
- using the '--datafile' option below.
+--action init Initialize the database. This is combination of
+ multiple actions listed below. Create DB, schema,
+ setup acl, insert core data and initial data.
+
+ upgrade Apply all needed schema/acl/content updates (will ask
+ for version to upgrade from)
+
+ create Create the database.
+
+ drop Drop the database.
+ This will ERASE ALL YOUR DATA
+
+ schema Initialize only the database schema
+ To use a local or supplementary datafile, specify it
+ using the '--datadir' option below.
+
+ acl Initialize only the database ACLs
+ To use a local or supplementary datafile, specify it
+ using the '--datadir' option below.
+
+ coredata Insert data into RT's database. This data is required
+ for normal functioning of any RT instance.
- acl Initialize only the database ACLs
- To use a local or supplementary datafile, specify it
- using the '--datadir' option below.
+ insert Insert data into RT's database.
+ By default, will use RT's installation data.
+ To use a local or supplementary datafile, specify it
+ using the '--datafile' option below.
- schema Initialize only the database schema
- To use a local or supplementary datafile, specify it
- using the '--datadir' option below.
+Several actions can be combined using comma separated list.
--datafile /path/to/datafile
--datadir /path/to/ Used to specify a path to find the local
- database schema and acls to be installed.
+ database schema and acls to be installed.
--dba dba's username
diff --git a/rt/sbin/rt-setup-database.in b/rt/sbin/rt-setup-database.in
index f134f5b..a51076f 100644
--- a/rt/sbin/rt-setup-database.in
+++ b/rt/sbin/rt-setup-database.in
@@ -1,9 +1,9 @@
-#!@PERL@ -w
+#!@PERL@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -47,41 +47,56 @@
#
# END BPS TAGGED BLOCK }}}
use strict;
-use vars qw($PROMPT $VERSION $Handle $Nobody $SystemUser $item);
-use vars
- qw(@Groups @Users @ACL @Queues @ScripActions @ScripConditions @Templates @CustomFields @Scrips @Attributes);
+use warnings;
+
+use vars qw($Nobody $SystemUser $item);
-use lib "@LOCAL_LIB_PATH@";
-use lib "@RT_LIB_PATH@";
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
#This drags in RT's config.pm
# We do it in a begin block because RT::Handle needs to know the type to do its
# inheritance
-use RT;
-use Carp;
-use RT::User;
-use RT::CurrentUser;
-use RT::Template;
-use RT::ScripAction;
-use RT::ACE;
-use RT::Group;
-use RT::User;
-use RT::Queue;
-use RT::ScripCondition;
-use RT::CustomField;
-use RT::Scrip;
-
-RT::LoadConfig();
+BEGIN {
+ use RT;
+ RT::LoadConfig();
+ RT::InitClasses();
+}
+
use Term::ReadKey;
use Getopt::Long;
-my %args;
+$| = 1; # unbuffer all output.
+my %args;
GetOptions(
\%args,
- 'prompt-for-dba-password', 'force', 'debug',
- 'action=s', 'dba=s', 'dba-password=s', 'datafile=s',
- 'datadir=s'
+ 'action=s',
+ 'force', 'debug',
+ 'dba=s', 'dba-password=s', 'prompt-for-dba-password',
+ 'datafile=s', 'datadir=s'
);
unless ( $args{'action'} ) {
@@ -89,583 +104,321 @@ unless ( $args{'action'} ) {
exit(-1);
}
-$| = 1; #unbuffer that output.
-
-require RT::Handle;
-my $Handle = RT::Handle->new($RT::DatabaseType);
-$Handle->BuildDSN;
-my $dbh;
-
-if ( $args{'prompt-for-dba-password'} ) {
- $args{'dba-password'} = get_dba_password();
- chomp( $args{'dba-password'} );
-}
-
-if ( $args{'action'} eq 'init' ) {
- $dbh = DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} )
- || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
- print "Now creating a database for RT.\n";
- if ( $RT::DatabaseType ne 'Oracle' || $args{'dba'} ne $RT::DatabaseUser ) {
- create_db();
- } else {
- print "...skipped as ".$args{'dba'} ." is not " . $RT::DatabaseUser . " or we're working with Oracle.\n";
- }
-
- if ( $RT::DatabaseType eq "mysql" ) {
- # Check which version we're running
- my ($version) = $dbh->selectrow_hashref("show variables like 'version'")->{Value} =~ /^(\d\.\d+)/;
- print "*** Warning: RT is unsupported on MySQL versions before 4.0.x\n" if $version < 4;
-
- # MySQL must have InnoDB support
- my $innodb = $dbh->selectrow_hashref("show variables like 'have_innodb'")->{Value};
- if ( $innodb eq "NO" ) {
- die "RT requires that MySQL be compiled with InnoDB table support.\n".
- "See http://dev.mysql.com/doc/mysql/en/InnoDB.html\n";
- } elsif ( $innodb eq "DISABLED" ) {
- die "RT requires that MySQL InnoDB table support be enabled.\n".
- ($version < 4
- ? "Add 'innodb_data_file_path=ibdata1:10M:autoextend' to the [mysqld] section of my.cnf\n"
- : "Remove the 'skip-innodb' line from your my.cnf file, restart MySQL, and try again.\n");
- }
- }
-
- # SQLite can't deal with the disconnect/reconnect
- unless ( $RT::DatabaseType eq 'SQLite' ) {
-
- $dbh->disconnect;
-
- if ( $RT::DatabaseType eq "Oracle" ) {
- $RT::DatabasePassword = $RT::DatabasePassword; #Warning avidance
- $dbh = DBI->connect( $Handle->DSN, ${RT::DatabaseUser}, ${RT::DatabasePassword} ) || die $DBI::errstr;
- } else {
- $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) || die $DBI::errstr;
- }
- }
- print "Now populating database schema.\n";
- insert_schema();
- print "Now inserting database ACLs\n";
- insert_acl() unless $RT::DatabaseType eq 'Oracle';
- print "Now inserting RT core system objects\n";
- insert_initial_data();
- print "Now inserting RT data\n";
- insert_data( $RT::EtcPath . "/initialdata" );
-}
-elsif ( $args{'action'} eq 'drop' ) {
- unless ( $dbh =
- DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) )
- {
- warn $DBI::errstr;
- warn "Database doesn't appear to exist. Aborting database drop.";
- exit;
- }
- drop_db();
-}
-elsif ( $args{'action'} eq 'insert' ) {
- insert_data( $args{'datafile'} || ($args{'datadir'}."/content") );
-}
-elsif ( $args{'action'} eq 'acl' ) {
- $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} )
- || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
- insert_acl($args{'datadir'});
-}
-elsif ( $args{'action'} eq 'schema' ) {
- $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} )
- || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
- insert_schema($args{'datadir'});
-}
-else {
- print STDERR "$0 called with an invalid --action parameter\n";
+# check and setup @actions
+my @actions = grep $_, split /,/, $args{'action'};
+if ( @actions > 1 && $args{'datafile'} ) {
+ print STDERR "You can not use --datafile option with multiple actions.\n";
exit(-1);
}
-
-# {{{ sub insert_schema
-sub insert_schema {
- my $base_path = (shift || $RT::EtcPath);
- my (@schema);
- print "Creating database schema.\n";
-
- my $schema_file = $base_path . "/schema." . $RT::DatabaseType;
- if ( -f $schema_file ) {
- open( SCHEMA, "<$schema_file" ) or die "Can't open $schema_file: $!";
- my @lines = <SCHEMA>;
-
- my $local_schema_file = $RT::LocalEtcPath . "/schema." . $RT::DatabaseType;
- if (-f $local_schema_file) {
- open( SCHEMA_LOCAL, "<$local_schema_file" )
- or die "Can't open $local_schema_file: $!";
- push @lines, ';;', <SCHEMA_LOCAL>;
- }
-
- my $statement = "";
- foreach my $line (@lines) {
- $line =~ s/\#.*//g;
- $line =~ s/--.*//g;
- $statement .= $line;
- if ( $line =~ /;(\s*)$/ ) {
- $statement =~ s/;(\s*)$//g;
- push @schema, $statement;
- $statement = "";
- }
- }
-
- local $SIG{__WARN__} = sub {};
- my $is_local = 0; # local/etc/schema needs to be nonfatal.
- $dbh->begin_work or die $dbh->errstr;
- foreach my $statement (@schema) {
- if ( $statement =~ /^\s*;$/ ) { $is_local = 1; next; }
-
- print STDERR "SQL: $statement\n" if defined $args{'debug'};
- my $sth = $dbh->prepare($statement) or die $dbh->errstr;
- unless ( $sth->execute or $is_local ) {
- die "Problem with statement:\n $statement\n" . $sth->errstr;
- }
- }
- $dbh->commit or die $dbh->errstr;
+foreach ( @actions ) {
+ unless ( /^(?:init|create|drop|schema|acl|coredata|insert|upgrade)$/ ) {
+ print STDERR "$0 called with an invalid --action parameter.\n";
+ exit(-1);
}
- else {
- die "Couldn't find schema file for " . $RT::DatabaseType . "\n";
+ if ( /^(?:init|drop|upgrade)$/ && @actions > 1 ) {
+ print STDERR "You can not mix init, drop or upgrade action with any action.\n";
+ exit(-1);
}
- print "Done setting up database schema.\n";
}
-# }}}
-
-# {{{ sub drop_db
-sub drop_db {
- if ( $RT::DatabaseType eq 'Oracle' ) {
- print <<END;
-
-To delete the tables and sequences of the RT Oracle database by running
- \@etc/drop.Oracle
-through SQLPlus.
+# convert init to multiple actions
+my $init = 0;
+if ( $actions[0] eq 'init' ) {
+ @actions = qw(create schema acl coredata insert);
+ $init = 1;
+}
-END
- return;
- }
- unless ( $args{'force'} ) {
- print <<END;
+# set options from environment
+foreach my $key(qw(Type Host Name User Password)) {
+ next unless exists $ENV{ 'RT_DB_'. uc $key };
+ print "Using Database$key from RT_DB_". uc($key) ." environment variable.\n";
+ RT->Config->Set( "Database$key", $ENV{ 'RT_DB_'. uc $key });
+}
-About to drop $RT::DatabaseType database $RT::DatabaseName on $RT::DatabaseHost.
-WARNING: This will erase all data in $RT::DatabaseName.
+my $db_type = RT->Config->Get('DatabaseType') || '';
+my $db_host = RT->Config->Get('DatabaseHost') || '';
+my $db_name = RT->Config->Get('DatabaseName') || '';
+my $db_user = RT->Config->Get('DatabaseUser') || '';
+my $db_pass = RT->Config->Get('DatabasePassword') || '';
-END
- exit unless _yesno();
+# load it here to get error immidiatly if DB type is not supported
+require RT::Handle;
- }
+if ( $db_type eq 'SQLite' && !File::Spec->file_name_is_absolute($db_name) ) {
+ $db_name = File::Spec->catfile($RT::VarPath, $db_name);
+ RT->Config->Set( DatabaseName => $db_name );
+}
- print "Dropping $RT::DatabaseType database $RT::DatabaseName.\n";
+my $dba_user = $args{'dba'} || $ENV{'RT_DBA_USER'} || $db_user || '';
+my $dba_pass = $args{'dba-password'} || $ENV{'RT_DBA_PASSWORD'};
- if ( $RT::DatabaseType eq 'SQLite' ) {
- unlink $RT::DatabaseName or warn $!;
- return;
- }
- $dbh->do("Drop DATABASE $RT::DatabaseName") or warn $DBI::errstr;
+if ( !$args{force} && ( !defined $dba_pass || $args{'prompt-for-dba-password'} ) ) {
+ $dba_pass = get_dba_password();
+ chomp $dba_pass if defined($dba_pass);
}
-# }}}
+print "Working with:\n"
+ ."Type:\t$db_type\nHost:\t$db_host\nName:\t$db_name\n"
+ ."User:\t$db_user\nDBA:\t$dba_user\n";
-# {{{ sub create_db
-sub create_db {
- print "Creating $RT::DatabaseType database $RT::DatabaseName.\n";
- if ( $RT::DatabaseType eq 'SQLite' ) {
- return;
- }
- elsif ( $RT::DatabaseType eq 'Pg' ) {
- $dbh->do("CREATE DATABASE $RT::DatabaseName WITH ENCODING='UNICODE'");
- if ( $DBI::errstr ) {
- $dbh->do("CREATE DATABASE $RT::DatabaseName") || die $DBI::errstr;
- }
- }
- elsif ( $RT::DatabaseType eq 'Oracle' ) {
- insert_acl();
- }
- elsif ( $RT::DatabaseType eq 'Informix' ) {
- $ENV{DB_LOCALE} = 'en_us.utf8';
- $dbh->do("CREATE DATABASE $RT::DatabaseName WITH BUFFERED LOG");
- }
- else {
- $dbh->do("CREATE DATABASE $RT::DatabaseName") or die $DBI::errstr;
- }
+foreach my $action ( @actions ) {
+ no strict 'refs';
+ my ($status, $msg) = *{ 'action_'. $action }{'CODE'}->( %args );
+ error($action, $msg) unless $status;
+ print $msg ."\n" if $msg;
+ print "Done.\n";
}
-# }}}
+sub action_create {
+ my %args = @_;
+ my $dbh = get_system_dbh();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
+ return ($status, $msg) unless $status;
-sub get_dba_password {
- print "In order to create or update your RT database,";
- print "this script needs to connect to your "
- . $RT::DatabaseType
- . " instance on "
- . $RT::DatabaseHost . " as "
- . $args{'dba'} . ".\n";
- print "Please specify that user's database password below. If the user has no database\n";
- print "password, just press return.\n\n";
- print "Password: ";
- ReadMode('noecho');
- my $password = ReadLine(0);
- ReadMode('normal');
- print "\n";
- return ($password);
+ print "Now creating a $db_type database $db_name for RT.\n";
+ return RT::Handle->CreateDatabase( $dbh );
}
-# {{{ sub _yesno
-sub _yesno {
- print "Proceed [y/N]:";
- my $x = scalar(<STDIN>);
- $x =~ /^y/i;
-}
+sub action_drop {
+ my %args = @_;
-# }}}
+ print "Dropping $db_type database $db_name.\n";
+ unless ( $args{'force'} ) {
+ print <<END;
-# {{{ insert_acls
-sub insert_acl {
- my $base_path = (shift || $RT::EtcPath);
+About to drop $db_type database $db_name on $db_host.
+WARNING: This will erase all data in $db_name.
- if ( $RT::DatabaseType =~ /^oracle$/i ) {
- do $base_path . "/acl.Oracle"
- || die "Couldn't find ACLS for Oracle\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^pg$/i ) {
- do $base_path . "/acl.Pg" || die "Couldn't find ACLS for Pg\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^mysql$/i ) {
- do $base_path . "/acl.mysql"
- || die "Couldn't find ACLS for mysql in $base_path\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^Sybase$/i ) {
- do $base_path . "/acl.Sybase"
- || die "Couldn't find ACLS for Sybase in $base_path\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^informix$/i ) {
- do $base_path . "/acl.Informix"
- || die "Couldn't find ACLS for Informix in $base_path\n" . $@;
- }
- elsif ( $RT::DatabaseType =~ /^SQLite$/i ) {
- return;
- }
- else {
- die "Unknown RT database type";
+END
+ exit(-2) unless _yesno();
}
- my @acl = acl($dbh);
- foreach my $statement (@acl) {
- print STDERR $statement if $args{'debug'};
- my $sth = $dbh->prepare($statement) or die $dbh->errstr;
- unless ( $sth->execute ) {
- die "Problem with statement:\n $statement\n" . $sth->errstr;
- }
- }
- print "Done setting up database ACLs.\n";
+ my $dbh = get_system_dbh();
+ return RT::Handle->DropDatabase( $dbh );
}
-# }}}
-
-=head2 get_system_dsn
-
-Returns a dsn suitable for database creates and drops
-and user creates and drops
-
-=cut
-
-sub get_system_dsn {
+sub action_schema {
+ my %args = @_;
+ my $dbh = get_admin_dbh();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
+ return ($status, $msg) unless $status;
- my $dsn = $Handle->DSN;
+ print "Now populating database schema.\n";
+ return RT::Handle->InsertSchema( $dbh, $args{'datafile'} || $args{'datadir'} );
+}
- #with mysql, you want to connect sans database to funge things
- if ( $RT::DatabaseType eq 'mysql' ) {
- $dsn =~ s/dbname=$RT::DatabaseName//;
+sub action_acl {
+ my %args = @_;
+ my $dbh = get_admin_dbh();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
+ return ($status, $msg) unless $status;
- # with postgres, you want to connect to database1
- }
- elsif ( $RT::DatabaseType eq 'Pg' ) {
- $dsn =~ s/dbname=$RT::DatabaseName/dbname=template1/;
- }
- elsif ( $RT::DatabaseType eq 'Informix' ) {
- # with Informix, you want to connect sans database:
- $dsn =~ s/Informix:$RT::DatabaseName/Informix:/;
- }
- return $dsn;
+ print "Now inserting database ACLs\n";
+ return RT::Handle->InsertACL( $dbh, $args{'datafile'} || $args{'datadir'} );
}
-sub insert_initial_data {
-
+sub action_coredata {
+ my %args = @_;
+ $RT::Handle = new RT::Handle;
+ $RT::Handle->dbh( undef );
+ RT::ConnectToDatabase();
RT::InitLogging();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'pre' );
+ return ($status, $msg) unless $status;
- #connect to the db, for actual RT work
- require RT::Handle;
- $RT::Handle = RT::Handle->new();
- $RT::Handle->Connect();
-
- #Put together a current user object so we can create a User object
- my $CurrentUser = new RT::CurrentUser();
-
- print "Checking for existing system user...";
- my $test_user = RT::User->new($CurrentUser);
- $test_user->Load('RT_System');
- if ( $test_user->id ) {
- print "found!\n\nYou appear to have a functional RT database.\n"
- . "Exiting, so as not to clobber your existing data.\n";
- exit(-1);
-
- }
- else {
- print "not found. This appears to be a new installation.\n";
- }
-
- print "Creating system user...";
- my $RT_System = new RT::User($CurrentUser);
-
- my ( $val, $msg ) = $RT_System->_BootstrapCreate(
- Name => 'RT_System',
- RealName => 'The RT System itself',
- Comments =>
-'Do not delete or modify this user. It is integral to RT\'s internal database structures',
- Creator => '1',
- LastUpdatedBy => '1',
- );
-
- unless ( $val ) {
- print "$msg\n";
- exit(-1);
- }
- print "done.\n";
- $RT::Handle->Disconnect() unless $RT::DatabaseType eq 'SQLite';
+ print "Now inserting RT core system objects\n";
+ return $RT::Handle->InsertInitialData;
+}
+sub action_insert {
+ my %args = @_;
+ $RT::Handle = new RT::Handle;
+ RT::Init();
+ my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'pre' );
+ return ($status, $msg) unless $status;
+
+ print "Now inserting data\n";
+ my $file = $args{'datafile'};
+ $file = $RT::EtcPath . "/initialdata" if $init && !$file;
+ $file ||= $args{'datadir'}."/content";
+ return $RT::Handle->InsertData( $file );
}
-# load some sort of data into the database
+sub action_upgrade {
+ my %args = @_;
+ my $base_dir = $args{'datadir'} || "./etc/upgrade";
+ return (0, "Couldn't read dir '$base_dir' with upgrade data")
+ unless -d $base_dir || -r _;
+
+ my $upgrading_from = undef;
+ do {
+ if ( defined $upgrading_from ) {
+ print "Doesn't match #.#.#: ";
+ } else {
+ print "Enter RT version you're upgrading from: ";
+ }
+ $upgrading_from = scalar <STDIN>;
+ chomp $upgrading_from;
+ $upgrading_from =~ s/\s+//g;
+ } while $upgrading_from !~ /^\d+\.\d+\.\d+$/;
+
+ my $upgrading_to = $RT::VERSION;
+ return (0, "The current version $upgrading_to is lower than $upgrading_from")
+ if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) > 0;
-sub insert_data {
- my $datafile = shift;
+ return (1, "The version $upgrading_to you're upgrading to is up to date")
+ if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) == 0;
- #Connect to the database and get RT::SystemUser and RT::Nobody loaded
- RT::Init;
+ my @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to);
- my $CurrentUser = RT::CurrentUser->new();
- $CurrentUser->LoadByName('RT_System');
+ return (1, "No DB changes between $upgrading_from and $upgrading_to")
+ unless @versions;
- if ( $datafile eq $RT::EtcPath . "/initialdata" ) {
+ print "\nGoing to apply following upgrades:\n";
+ print map "* $_\n", @versions;
- print "Creating Superuser ACL...";
+ {
+ my $custom_upgrading_to = undef;
+ do {
+ if ( defined $custom_upgrading_to ) {
+ print "Doesn't match #.#.#: ";
+ } else {
+ print "\nEnter RT version if you want to stop upgrade at some point,\n";
+ print " or leave it blank if you want apply above upgrades: ";
+ }
+ $custom_upgrading_to = scalar <STDIN>;
+ chomp $custom_upgrading_to;
+ $custom_upgrading_to =~ s/\s+//g;
+ last unless $custom_upgrading_to;
+ } while $custom_upgrading_to !~ /^\d+\.\d+\.\d+$/;
+
+ if ( $custom_upgrading_to ) {
+ return (
+ 0, "The version you entered ($custom_upgrading_to) is lower than\n"
+ ."version you're upgrading from ($upgrading_from)"
+ ) if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) > 0;
+
+ return (1, "The version you're upgrading to is up to date")
+ if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) == 0;
+
+ if ( RT::Handle::cmp_version( $RT::VERSION, $custom_upgrading_to ) < 0 ) {
+ print "Version you entered is greater than installed ($RT::VERSION).\n";
+ _yesno() or exit(-2);
+ }
+ # ok, checked everything no let's refresh list
+ $upgrading_to = $custom_upgrading_to;
+ @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to);
- my $superuser_ace = RT::ACE->new($CurrentUser);
- $superuser_ace->_BootstrapCreate(
- PrincipalId => ACLEquivGroupId( $CurrentUser->Id ),
- PrincipalType => 'Group',
- RightName => 'SuperUser',
- ObjectType => 'RT::System',
- ObjectId => '1' );
+ return (1, "No DB changes between $upgrading_from and $upgrading_to")
+ unless @versions;
- print "done.\n";
+ print "\nGoing to apply following upgrades:\n";
+ print map "* $_\n", @versions;
+ }
}
- # Slurp in stuff to insert from the datafile. Possible things to go in here:-
- # @groups, @users, @acl, @queues, @ScripActions, @ScripConditions, @templates
-
- require $datafile
- || die "Couldn't find initial data for import\n" . $@;
+ print "\nIT'S VERY IMPORTANT TO BACK UP BEFORE THIS STEP\n\n";
+ _yesno() or exit(-2) unless $args{'force'};
- if ( @Groups ) {
- print "Creating groups...";
- foreach $item (@Groups) {
- my $new_entry = RT::Group->new($CurrentUser);
- my ( $return, $msg ) = $new_entry->_Create(%$item);
- print "(Error: $msg)" unless $return;
- print $return. ".";
+ foreach my $v ( @versions ) {
+ print "Processing $v\n";
+ my %tmp = (%args, datadir => "$base_dir/$v", datafile => undef);
+ if ( -e "$base_dir/$v/schema.$db_type" ) {
+ action_schema( %tmp );
}
- print "done.\n";
- }
- if ( @Users ) {
- print "Creating users...";
- foreach $item (@Users) {
- my $new_entry = new RT::User($CurrentUser);
- my ( $return, $msg ) = $new_entry->Create(%$item);
- print "(Error: $msg)" unless $return;
- print $return. ".";
+ if ( -e "$base_dir/$v/acl.$db_type" ) {
+ action_acl( %tmp );
}
- print "done.\n";
- }
- if ( @Queues ) {
- print "Creating queues...";
- for $item (@Queues) {
- my $new_entry = new RT::Queue($CurrentUser);
- my ( $return, $msg ) = $new_entry->Create(%$item);
- print "(Error: $msg)" unless $return;
- print $return. ".";
+ if ( -e "$base_dir/$v/content" ) {
+ action_insert( %tmp );
}
- print "done.\n";
}
- if ( @ACL ) {
- print "Creating ACL...";
- for my $item (@ACL) {
-
- my ($princ, $object);
-
- # Global rights or Queue rights?
- if ( $item->{'Queue'} ) {
- $object = RT::Queue->new($CurrentUser);
- $object->Load( $item->{'Queue'} );
- } else {
- $object = $RT::System;
- }
-
- # Group rights or user rights?
- if ( $item->{'GroupDomain'} ) {
- $princ = RT::Group->new($CurrentUser);
- if ( $item->{'GroupDomain'} eq 'UserDefined' ) {
- $princ->LoadUserDefinedGroup( $item->{'GroupId'} );
- } elsif ( $item->{'GroupDomain'} eq 'SystemInternal' ) {
- $princ->LoadSystemInternalGroup( $item->{'GroupType'} );
- } elsif ( $item->{'GroupDomain'} eq 'RT::System-Role' ) {
- $princ->LoadSystemRoleGroup( $item->{'GroupType'} );
- } elsif ( $item->{'GroupDomain'} eq 'RT::Queue-Role' &&
- $item->{'Queue'} )
- {
- $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'},
- Queue => $object->id);
- } else {
- $princ->Load( $item->{'GroupId'} );
- }
- } else {
- $princ = RT::User->new($CurrentUser);
- $princ->Load( $item->{'UserId'} );
- }
+ return 1;
+}
- # Grant it
- my ( $return, $msg ) = $princ->PrincipalObj->GrantRight(
- Right => $item->{'Right'},
- Object => $object );
+sub get_versions_from_to {
+ my ($base_dir, $from, $to) = @_;
- if ( $return ) {
- print $return. ".";
- }
- else {
- print $msg . ".";
+ opendir my $dh, $base_dir or die "couldn't open dir: $!";
+ my @versions = grep -d "$base_dir/$_" && /\d+\.\d+\.\d+/, readdir $dh;
+ closedir $dh;
- }
+ return
+ grep RT::Handle::cmp_version($_, $to) <= 0,
+ grep RT::Handle::cmp_version($_, $from) > 0,
+ sort RT::Handle::cmp_version @versions;
+}
- }
- print "done.\n";
- }
- if ( @CustomFields ) {
- print "Creating custom fields...";
- for $item (@CustomFields) {
- my $new_entry = new RT::CustomField($CurrentUser);
- my $values = $item->{'Values'};
- delete $item->{'Values'};
- my ( $return, $msg ) = $new_entry->Create(%$item);
- unless( $return ) {
- print "(Error: $msg)\n";
- next;
- }
+sub error {
+ my ($action, $msg) = @_;
+ print STDERR "Couldn't finish '$action' step.\n\n";
+ print STDERR "ERROR: $msg\n\n";
+ exit(-1);
+}
- foreach my $value ( @{$values} ) {
- my ( $eval, $emsg ) = $new_entry->AddValue(%$value);
- print "(Error: $emsg)\n" unless $eval;
- }
+sub get_dba_password {
+ print "In order to create or update your RT database,"
+ . " this script needs to connect to your "
+ . " $db_type instance on $db_host as $dba_user\n";
+ print "Please specify that user's database password below. If the user has no database\n";
+ print "password, just press return.\n\n";
+ print "Password: ";
+ ReadMode('noecho');
+ my $password = ReadLine(0);
+ ReadMode('normal');
+ print "\n";
+ return ($password);
+}
- if ( $item->{LookupType} && !exists $item->{'Queue'} ) { # enable by default
- my $ocf = RT::ObjectCustomField->new($CurrentUser);
- $ocf->Create( CustomField => $new_entry->Id );
- }
+=head2 get_system_dbh
- print "(Error: $msg)\n" unless $return;
- print $return. ".";
- }
+Returns L<DBI> database handle connected to B<system> with DBA credentials.
- print "done.\n";
- }
+See also L<RT::Handle/SystemDSN>.
- if ( @ScripActions ) {
- print "Creating ScripActions...";
+=cut
- for $item (@ScripActions) {
- my $new_entry = RT::ScripAction->new($CurrentUser);
- my ($return,$msg) = $new_entry->Create(%$item);
- unless ($return) {
- print "(Error: $msg)\n";
- next;
- }
- print $return. ".";
- }
+sub get_system_dbh {
+ return _get_dbh( RT::Handle->SystemDSN, $dba_user, $dba_pass );
+}
- print "done.\n";
- }
+sub get_admin_dbh {
+ return _get_dbh( RT::Handle->DSN, $dba_user, $dba_pass );
+}
- if ( @ScripConditions ) {
- print "Creating ScripConditions...";
+=head2 get_rt_dbh [USER, PASSWORD]
- for $item (@ScripConditions) {
- my $new_entry = RT::ScripCondition->new($CurrentUser);
- my ($return,$msg) = $new_entry->Create(%$item);
- unless ($return) {
- print "(Error: $msg)\n";
- next;
- }
- print $return. ".";
- }
+Returns L<DBI> database handle connected to RT database,
+you may specify credentials(USER and PASSWORD) to connect
+with. By default connects with credentials from RT config.
- print "done.\n";
- }
+=cut
- if ( @Templates ) {
- print "Creating templates...";
+sub get_rt_dbh {
+ return _get_dbh( RT::Handle->DSN, $db_user, $db_pass );
+}
- for $item (@Templates) {
- my $new_entry = new RT::Template($CurrentUser);
- my $return = $new_entry->Create(%$item);
- print $return. ".";
- }
- print "done.\n";
- }
- if ( @Scrips ) {
- print "Creating scrips...";
-
- for $item (@Scrips) {
- my $new_entry = new RT::Scrip($CurrentUser);
- my ( $return, $msg ) = $new_entry->Create(%$item);
- if ( $return ) {
- print $return. ".";
- }
- else {
- print "(Error: $msg)\n";
- }
- }
- print "done.\n";
- }
- if ( @Attributes ) {
- print "Creating predefined searches...";
- my $sys = RT::System->new($CurrentUser);
-
- for $item (@Attributes) {
- my $obj = delete $item->{Object}; # XXX: make this something loadable
- $obj ||= $sys;
- my ( $return, $msg ) = $obj->AddAttribute (%$item);
- if ( $return ) {
- print $return. ".";
- }
- else {
- print "(Error: $msg)\n";
- }
+sub _get_dbh {
+ my ($dsn, $user, $pass) = @_;
+ my $dbh = DBI->connect(
+ $dsn, $user, $pass,
+ { RaiseError => 0, PrintError => 0 },
+ );
+ unless ( $dbh ) {
+ my $msg = "Failed to connect to $dsn as user '$user': ". $DBI::errstr;
+ if ( $args{'debug'} ) {
+ require Carp; Carp::confess( $msg );
+ } else {
+ print STDERR $msg; exit -1;
}
- print "done.\n";
}
- $RT::Handle->Disconnect() unless $RT::DatabaseType eq 'SQLite';
- print "Done setting up database content.\n";
+ return $dbh;
}
-=head2 ACLEquivGroupId
-
-Given a userid, return that user's acl equivalence group
-
-=cut
-
-sub ACLEquivGroupId {
- my $username = shift;
- my $user = RT::User->new($RT::SystemUser);
- $user->Load($username);
- my $equiv_group = RT::Group->new($RT::SystemUser);
- $equiv_group->LoadACLEquivalenceGroup($user);
- return ( $equiv_group->Id );
+sub _yesno {
+ print "Proceed [y/N]:";
+ my $x = scalar(<STDIN>);
+ $x =~ /^y/i;
}
sub help {
@@ -674,25 +427,39 @@ sub help {
$0: Set up RT's database
---action init Initialize the database
- drop Drop the database.
- This will ERASE ALL YOUR DATA
- insert Insert data into RT's database.
- By default, will use RT's installation data.
- To use a local or supplementary datafile, specify it
- using the '--datafile' option below.
+--action init Initialize the database. This is combination of
+ multiple actions listed below. Create DB, schema,
+ setup acl, insert core data and initial data.
+
+ upgrade Apply all needed schema/acl/content updates (will ask
+ for version to upgrade from)
+
+ create Create the database.
+
+ drop Drop the database.
+ This will ERASE ALL YOUR DATA
+
+ schema Initialize only the database schema
+ To use a local or supplementary datafile, specify it
+ using the '--datadir' option below.
+
+ acl Initialize only the database ACLs
+ To use a local or supplementary datafile, specify it
+ using the '--datadir' option below.
+
+ coredata Insert data into RT's database. This data is required
+ for normal functioning of any RT instance.
- acl Initialize only the database ACLs
- To use a local or supplementary datafile, specify it
- using the '--datadir' option below.
+ insert Insert data into RT's database.
+ By default, will use RT's installation data.
+ To use a local or supplementary datafile, specify it
+ using the '--datafile' option below.
- schema Initialize only the database schema
- To use a local or supplementary datafile, specify it
- using the '--datadir' option below.
+Several actions can be combined using comma separated list.
--datafile /path/to/datafile
--datadir /path/to/ Used to specify a path to find the local
- database schema and acls to be installed.
+ database schema and acls to be installed.
--dba dba's username
diff --git a/rt/sbin/rt-shredder b/rt/sbin/rt-shredder
new file mode 100755
index 0000000..5fa4909
--- /dev/null
+++ b/rt/sbin/rt-shredder
@@ -0,0 +1,323 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+=head1 NAME
+
+rt-shredder - Script which wipe out tickets from RT DB
+
+=head1 SYNOPSIS
+
+ rt-shredder --plugin list
+ rt-shredder --plugin help-Tickets
+ rt-shredder --plugin 'Tickets=query,Queue="general" and Status="deleted"'
+
+ rt-shredder --sqldump unshred.sql --plugin ...
+ rt-shredder --force --plugin ...
+
+=head1 DESCRIPTION
+
+rt-shredder - is script that allow you to wipe out objects
+from RT DB. This script uses API that L<RT::Shredder> module adds to RT.
+Script can be used as example of usage of the shredder API.
+
+=head1 USAGE
+
+You can use several options to control which objects script
+should wipeout.
+
+=head1 OPTIONS
+
+=head2 --sqldump <filename>
+
+Outputs INSERT queiries into file. This dump can be used to restore data
+after wiping out.
+
+By default creates files
+F<< <RT_home>/var/data/RT-Shredder/<ISO_date>-XXXX.sql >>
+
+=head2 --object (DEPRECATED)
+
+Option has been deprecated, use plugin C<Objects> instead.
+
+=head2 --plugin '<plugin name>[=<arg>,<val>[;<arg>,<val>]...]'
+
+You can use plugins to select RT objects with various conditions.
+See also --plugin list and --plugin help options.
+
+=head2 --plugin list
+
+Output list of the available plugins.
+
+=head2 --plugin help-<plugin name>
+
+Outputs help for specified plugin.
+
+=head2 --force
+
+Script doesn't ask any questions.
+
+=head1 SEE ALSO
+
+L<RT::Shredder>
+
+=cut
+
+use strict;
+use warnings FATAL => 'all';
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT::Shredder ();
+use Getopt::Long qw(GetOptions);
+use File::Spec ();
+
+use RT::Shredder::Plugin ();
+# prefetch list of plugins
+our %plugins = RT::Shredder::Plugin->List;
+
+our %opt;
+parse_args();
+
+RT::Shredder::Init( %opt );
+my $shredder = new RT::Shredder;
+
+{
+ my $plugin = eval { $shredder->AddDumpPlugin( Arguments => {
+ file_name => $opt{'sqldump'},
+ from_storage => 0,
+ } ) };
+ if( $@ ) {
+ print STDERR "ERROR: Couldn't open SQL dump file: $@\n";
+ exit 1 if $opt{'sqldump'};
+
+ print STDERR "WARNING: It's strongly recommended to use '--sqldump <filename>' option\n";
+ unless( $opt{'force'} ) {
+ exit 0 unless prompt_yN( "Do you want to proceed?" );
+ }
+ } else {
+ print "SQL dump file is '". $plugin->FileName ."'\n";
+ }
+}
+
+my @objs = process_plugins( $shredder );
+prompt_delete_objs( \@objs ) unless $opt{'force'};
+
+$shredder->PutObjects( Objects => $_ ) foreach @objs;
+eval { $shredder->WipeoutAll };
+if( $@ ) {
+ require RT::Shredder::Exceptions;
+ if( my $e = RT::Shredder::Exception::Info->caught ) {
+ print "\nERROR: $e\n\n";
+ exit 1;
+ }
+ die $@;
+}
+
+sub prompt_delete_objs
+{
+ my( $objs ) = @_;
+ unless( @$objs ) {
+ print "Objects list is empty, try refine search options\n";
+ exit 0;
+ }
+ my $list = "Next ". scalar( @$objs ) ." objects would be deleted:\n";
+ foreach my $o( @$objs ) {
+ $list .= "\t". $o->_AsString ." object\n";
+ }
+ print $list;
+ exit(0) unless prompt_yN( "Do you want to proceed?" );
+}
+
+sub prompt_yN
+{
+ my $text = shift;
+ print "$text [y/N] ";
+ unless( <STDIN> =~ /^(?:y|yes)$/i ) {
+ return 0;
+ }
+ return 1;
+}
+
+sub usage
+{
+ require RT::Shredder::POD;
+ RT::Shredder::POD::shredder_cli( $0, \*STDOUT );
+ exit 1;
+}
+
+sub parse_args
+{
+ my $tmp;
+ Getopt::Long::Configure( "pass_through" );
+ my @objs = ();
+ if( GetOptions( 'object=s' => \@objs ) && @objs ) {
+ print STDERR "Option --object had been deprecated, use plugin 'Objects' instead\n";
+ exit(1);
+ }
+
+ my @plugins = ();
+ if( GetOptions( 'plugin=s' => \@plugins ) && @plugins ) {
+ $opt{'plugin'} = \@plugins;
+ foreach my $str( @plugins ) {
+ if( $str =~ /^\s*list\s*$/ ) {
+ show_plugin_list();
+ } elsif( $str =~ /^\s*help-(\w+)\s*$/ ) {
+ show_plugin_help( $1 );
+ } elsif( $str =~ /^(\w+)(=.*)?$/ && !$plugins{$1} ) {
+ print "Couldn't find plugin '$1'\n";
+ show_plugin_list();
+ }
+ }
+ }
+
+ # other options make no sense without previouse
+ usage() unless keys %opt;
+
+ if( GetOptions( 'force' => \$tmp ) && $tmp ) {
+ $opt{'force'}++;
+ }
+ $tmp = undef;
+ if( GetOptions( 'sqldump=s' => \$tmp ) && $tmp ) {
+ $opt{'sqldump'} = $tmp;
+ }
+ return;
+}
+
+sub process_plugins
+{
+ my $shredder = shift;
+
+ my @res;
+ foreach my $str( @{ $opt{'plugin'} } ) {
+ my $plugin = new RT::Shredder::Plugin;
+ my( $status, $msg ) = $plugin->LoadByString( $str );
+ unless( $status ) {
+ print STDERR "Couldn't load plugin\n";
+ print STDERR "Error: $msg\n";
+ exit(1);
+ }
+ if ( lc $plugin->Type eq 'search' ) {
+ push @res, _process_search_plugin( $shredder, $plugin );
+ }
+ elsif ( lc $plugin->Type eq 'dump' ) {
+ _process_dump_plugin( $shredder, $plugin );
+ }
+ }
+ return RT::Shredder->CastObjectsToRecords( Objects => \@res );
+}
+
+sub _process_search_plugin {
+ my ($shredder, $plugin) = @_;
+ my ($status, @objs) = $plugin->Run;
+ unless( $status ) {
+ print STDERR "Couldn't run plugin\n";
+ print STDERR "Error: $objs[1]\n";
+ exit(1);
+ }
+
+ my $msg;
+ ($status, $msg) = $plugin->SetResolvers( Shredder => $shredder );
+ unless( $status ) {
+ print STDERR "Couldn't set conflicts resolver\n";
+ print STDERR "Error: $msg\n";
+ exit(1);
+ }
+ return @objs;
+}
+
+sub _process_dump_plugin {
+ my ($shredder, $plugin) = @_;
+ $shredder->AddDumpPlugin(
+ Object => $plugin,
+ );
+}
+
+sub show_plugin_list
+{
+ print "Plugins list:\n";
+ print "\t$_\n" foreach( grep !/^Base$/, keys %plugins );
+ exit(1);
+}
+
+sub show_plugin_help
+{
+ my( $name ) = @_;
+ require RT::Shredder::POD;
+ unless( $plugins{ $name } ) {
+ print "Couldn't find plugin '$name'\n";
+ show_plugin_list();
+ }
+ RT::Shredder::POD::plugin_cli( $plugins{'Base'}, \*STDOUT, 1 );
+ RT::Shredder::POD::plugin_cli( $plugins{ $name }, \*STDOUT );
+ exit(1);
+}
+
+exit(0);
diff --git a/rt/sbin/rt-shredder.in b/rt/sbin/rt-shredder.in
new file mode 100755
index 0000000..bc91ef6
--- /dev/null
+++ b/rt/sbin/rt-shredder.in
@@ -0,0 +1,323 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+=head1 NAME
+
+rt-shredder - Script which wipe out tickets from RT DB
+
+=head1 SYNOPSIS
+
+ rt-shredder --plugin list
+ rt-shredder --plugin help-Tickets
+ rt-shredder --plugin 'Tickets=query,Queue="general" and Status="deleted"'
+
+ rt-shredder --sqldump unshred.sql --plugin ...
+ rt-shredder --force --plugin ...
+
+=head1 DESCRIPTION
+
+rt-shredder - is script that allow you to wipe out objects
+from RT DB. This script uses API that L<RT::Shredder> module adds to RT.
+Script can be used as example of usage of the shredder API.
+
+=head1 USAGE
+
+You can use several options to control which objects script
+should wipeout.
+
+=head1 OPTIONS
+
+=head2 --sqldump <filename>
+
+Outputs INSERT queiries into file. This dump can be used to restore data
+after wiping out.
+
+By default creates files
+F<< <RT_home>/var/data/RT-Shredder/<ISO_date>-XXXX.sql >>
+
+=head2 --object (DEPRECATED)
+
+Option has been deprecated, use plugin C<Objects> instead.
+
+=head2 --plugin '<plugin name>[=<arg>,<val>[;<arg>,<val>]...]'
+
+You can use plugins to select RT objects with various conditions.
+See also --plugin list and --plugin help options.
+
+=head2 --plugin list
+
+Output list of the available plugins.
+
+=head2 --plugin help-<plugin name>
+
+Outputs help for specified plugin.
+
+=head2 --force
+
+Script doesn't ask any questions.
+
+=head1 SEE ALSO
+
+L<RT::Shredder>
+
+=cut
+
+use strict;
+use warnings FATAL => 'all';
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use RT::Shredder ();
+use Getopt::Long qw(GetOptions);
+use File::Spec ();
+
+use RT::Shredder::Plugin ();
+# prefetch list of plugins
+our %plugins = RT::Shredder::Plugin->List;
+
+our %opt;
+parse_args();
+
+RT::Shredder::Init( %opt );
+my $shredder = new RT::Shredder;
+
+{
+ my $plugin = eval { $shredder->AddDumpPlugin( Arguments => {
+ file_name => $opt{'sqldump'},
+ from_storage => 0,
+ } ) };
+ if( $@ ) {
+ print STDERR "ERROR: Couldn't open SQL dump file: $@\n";
+ exit 1 if $opt{'sqldump'};
+
+ print STDERR "WARNING: It's strongly recommended to use '--sqldump <filename>' option\n";
+ unless( $opt{'force'} ) {
+ exit 0 unless prompt_yN( "Do you want to proceed?" );
+ }
+ } else {
+ print "SQL dump file is '". $plugin->FileName ."'\n";
+ }
+}
+
+my @objs = process_plugins( $shredder );
+prompt_delete_objs( \@objs ) unless $opt{'force'};
+
+$shredder->PutObjects( Objects => $_ ) foreach @objs;
+eval { $shredder->WipeoutAll };
+if( $@ ) {
+ require RT::Shredder::Exceptions;
+ if( my $e = RT::Shredder::Exception::Info->caught ) {
+ print "\nERROR: $e\n\n";
+ exit 1;
+ }
+ die $@;
+}
+
+sub prompt_delete_objs
+{
+ my( $objs ) = @_;
+ unless( @$objs ) {
+ print "Objects list is empty, try refine search options\n";
+ exit 0;
+ }
+ my $list = "Next ". scalar( @$objs ) ." objects would be deleted:\n";
+ foreach my $o( @$objs ) {
+ $list .= "\t". $o->_AsString ." object\n";
+ }
+ print $list;
+ exit(0) unless prompt_yN( "Do you want to proceed?" );
+}
+
+sub prompt_yN
+{
+ my $text = shift;
+ print "$text [y/N] ";
+ unless( <STDIN> =~ /^(?:y|yes)$/i ) {
+ return 0;
+ }
+ return 1;
+}
+
+sub usage
+{
+ require RT::Shredder::POD;
+ RT::Shredder::POD::shredder_cli( $0, \*STDOUT );
+ exit 1;
+}
+
+sub parse_args
+{
+ my $tmp;
+ Getopt::Long::Configure( "pass_through" );
+ my @objs = ();
+ if( GetOptions( 'object=s' => \@objs ) && @objs ) {
+ print STDERR "Option --object had been deprecated, use plugin 'Objects' instead\n";
+ exit(1);
+ }
+
+ my @plugins = ();
+ if( GetOptions( 'plugin=s' => \@plugins ) && @plugins ) {
+ $opt{'plugin'} = \@plugins;
+ foreach my $str( @plugins ) {
+ if( $str =~ /^\s*list\s*$/ ) {
+ show_plugin_list();
+ } elsif( $str =~ /^\s*help-(\w+)\s*$/ ) {
+ show_plugin_help( $1 );
+ } elsif( $str =~ /^(\w+)(=.*)?$/ && !$plugins{$1} ) {
+ print "Couldn't find plugin '$1'\n";
+ show_plugin_list();
+ }
+ }
+ }
+
+ # other options make no sense without previouse
+ usage() unless keys %opt;
+
+ if( GetOptions( 'force' => \$tmp ) && $tmp ) {
+ $opt{'force'}++;
+ }
+ $tmp = undef;
+ if( GetOptions( 'sqldump=s' => \$tmp ) && $tmp ) {
+ $opt{'sqldump'} = $tmp;
+ }
+ return;
+}
+
+sub process_plugins
+{
+ my $shredder = shift;
+
+ my @res;
+ foreach my $str( @{ $opt{'plugin'} } ) {
+ my $plugin = new RT::Shredder::Plugin;
+ my( $status, $msg ) = $plugin->LoadByString( $str );
+ unless( $status ) {
+ print STDERR "Couldn't load plugin\n";
+ print STDERR "Error: $msg\n";
+ exit(1);
+ }
+ if ( lc $plugin->Type eq 'search' ) {
+ push @res, _process_search_plugin( $shredder, $plugin );
+ }
+ elsif ( lc $plugin->Type eq 'dump' ) {
+ _process_dump_plugin( $shredder, $plugin );
+ }
+ }
+ return RT::Shredder->CastObjectsToRecords( Objects => \@res );
+}
+
+sub _process_search_plugin {
+ my ($shredder, $plugin) = @_;
+ my ($status, @objs) = $plugin->Run;
+ unless( $status ) {
+ print STDERR "Couldn't run plugin\n";
+ print STDERR "Error: $objs[1]\n";
+ exit(1);
+ }
+
+ my $msg;
+ ($status, $msg) = $plugin->SetResolvers( Shredder => $shredder );
+ unless( $status ) {
+ print STDERR "Couldn't set conflicts resolver\n";
+ print STDERR "Error: $msg\n";
+ exit(1);
+ }
+ return @objs;
+}
+
+sub _process_dump_plugin {
+ my ($shredder, $plugin) = @_;
+ $shredder->AddDumpPlugin(
+ Object => $plugin,
+ );
+}
+
+sub show_plugin_list
+{
+ print "Plugins list:\n";
+ print "\t$_\n" foreach( grep !/^Base$/, keys %plugins );
+ exit(1);
+}
+
+sub show_plugin_help
+{
+ my( $name ) = @_;
+ require RT::Shredder::POD;
+ unless( $plugins{ $name } ) {
+ print "Couldn't find plugin '$name'\n";
+ show_plugin_list();
+ }
+ RT::Shredder::POD::plugin_cli( $plugins{'Base'}, \*STDOUT, 1 );
+ RT::Shredder::POD::plugin_cli( $plugins{ $name }, \*STDOUT );
+ exit(1);
+}
+
+exit(0);
diff --git a/rt/sbin/rt-test-dependencies b/rt/sbin/rt-test-dependencies
index fb14f84..a1fed19 100644
--- a/rt/sbin/rt-test-dependencies
+++ b/rt/sbin/rt-test-dependencies
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -64,14 +64,24 @@ GetOptions(
'with-SPEEDYCGI', 'with-MODPERL1',
'with-MODPERL2', 'with-DEV',
'with-STANDALONE',
+
+ 'with-GPG',
+ 'with-ICAL',
+ 'with-SMTP',
+ 'with-GRAPHVIZ',
+ 'with-GD',
+ 'with-DASHBOARDS',
+
'download=s',
- 'repository=s'
+ 'repository=s',
+ 'list-deps'
);
unless (keys %args) {
help();
- exit(0);
+ exit(1);
}
+
# Set up defaults
my %default = (
'with-MASON' => 1,
@@ -79,11 +89,16 @@ my %default = (
'with-CLI' => 1,
'with-MAILGATE' => 1,
'with-DEV' => 0,
- 'with-STANDALONE' => 0,
+ 'with-STANDALONE' => 1,
+ 'with-GPG' => 1,
+ 'with-ICAL' => 1,
+ 'with-SMTP' => 1,
+ 'with-GRAPHVIZ' => 0,
+ 'with-GD' => 1,
+ 'with-DASHBOARDS' => 1
);
$args{$_} = $default{$_} foreach grep !exists $args{$_}, keys %default;
-
{
my $section;
my %always_show_sections = (
@@ -94,35 +109,53 @@ $args{$_} = $default{$_} foreach grep !exists $args{$_}, keys %default;
sub section {
my $s = shift;
$section = $s;
- print "$s:\n";
+ print "$s:\n" unless $args{'list-deps'};
}
- my $any_missing = 0;
- sub found {
+ sub print_found {
my $msg = shift;
my $test = shift;
my $extra = shift;
-
- $any_missing = 1 unless $test;
- if ($args{'v'} or not $test or $always_show_sections{$section}) {
- print "\t$msg...";
- print $test ? "found" : "MISSING";
- print "\n";
+
+ unless ( $args{'list-deps'} ) {
+ if ( $args{'v'} or not $test or $always_show_sections{$section} ) {
+ print "\t$msg ...";
+ print $test ? "found" : "MISSING";
+ print "\n";
+ }
+
+ print "\t\t$extra\n" if defined $extra;
}
-
- print "\t\t$extra\n" if defined $extra;
}
+}
- sub conclude {
- if ($any_missing) {
- print "\nSOMETHING WAS MISSING!\n";
- exit 1;
- } else {
- print "\nEverything was found.\n";
+sub conclude {
+ my %missing_by_type = @_;
+
+ unless ( $args{'list-deps'} ) {
+ unless ( keys %missing_by_type ) {
+ print "\nAll dependencies have been found.\n";
+ return;
+ }
+
+ print "\nSOME DEPENDENCIES WERE MISSING.\n";
+
+ for my $type ( keys %missing_by_type ) {
+ my $missing = $missing_by_type{$type};
+
+ print "$type missing dependencies:\n";
+ for my $name ( keys %$missing ) {
+ my $module = $missing->{$name};
+ my $version = $module->{version};
+ print_found( $name . ( $version ? " >= $version" : "" ),
+ 0, $module->{error} );
+ }
+ }
+ exit 1;
}
- }
}
+
sub help {
print <<'.';
@@ -130,22 +163,22 @@ sub help {
By default, testdeps determine whether you have
installed all the perl modules RT needs to run.
- --install Install missing modules
+ --install Install missing modules
The following switches will tell the tool to check for specific dependencies
- --with-mysql Database interface for MySQL
- --with-postgresql Database interface for PostgreSQL
- --with-sqlite Database interface and driver for SQLite (unsupported)
- --with-oracle Database interface for oracle (unsupported)
+ --with-mysql Database interface for MySQL
+ --with-postgresql Database interface for PostgreSQL
+ --with-oracle Database interface for Oracle
+ --with-sqlite Database interface and driver for SQLite (unsupported)
- --with-standalone Libraries needed to support the standalone simple pure perl server
- --with-fastcgi Libraries needed to support the fastcgi handler
- --with-speedycgi Libraries needed to support the speedycgi handler
- --with-modperl1 Libraries needed to support the modperl 1 handler
- --with-modperl2 Libraries needed to support the modperl 2 handler
+ --with-standalone Libraries needed to support the standalone simple pure perl server
+ --with-fastcgi Libraries needed to support the fastcgi handler
+ --with-speedycgi Libraries needed to support the speedycgi handler
+ --with-modperl1 Libraries needed to support the modperl 1 handler
+ --with-modperl2 Libraries needed to support the modperl 2 handler
- --with-dev Tools needed for RT development
+ --with-dev Tools needed for RT development
You can also specify -v or --verbose to list the status of all dependencies,
rather than just the missing ones.
@@ -175,54 +208,55 @@ Digest::base
Digest::MD5 2.27
DBI 1.37
Class::ReturnValue 0.40
-Date::Format
-DBIx::SearchBuilder 1.53
-Text::Template
+DBIx::SearchBuilder 1.54
+Text::Template 1.44
+File::ShareDir
File::Spec 0.8
HTML::Entities
HTML::Scrubber 0.08
Log::Dispatch 2.0
+Sys::Syslog 0.16
Locale::Maketext 1.06
Locale::Maketext::Lexicon 0.32
Locale::Maketext::Fuzzy
-MIME::Entity 5.108
+MIME::Entity 5.425
Mail::Mailer 1.57
-Net::SMTP
+Email::Address
Text::Wrapper
Time::ParseDate
Time::HiRes
-File::Temp
-Text::Autoformat
+File::Temp 0.18
Text::Quoted 2.02
Tree::Simple 1.04
+UNIVERSAL::require
Regexp::Common
Scalar::Util
-Module::Versions::Report 1.03
+Module::Versions::Report 1.05
Cache::Simple::TimedExpiry
-UNIVERSAL::require
Calendar::Simple
+Encode 2.21
CSS::Squish 0.06
+File::Glob
Devel::StackTrace 1.19
.
$deps{'MASON'} = [ text_to_hash( << '.') ];
-HTML::Mason 1.23
+HTML::Mason 1.36
Errno
Digest::MD5 2.27
CGI::Cookie 1.20
Storable 2.08
Apache::Session 1.53
XML::RSS 1.05
-GD
-GD::Graph
-GD::Text
Text::WikiFormat 0.76
CSS::Squish 0.06
+Devel::StackTrace 1.19
.
$deps{'STANDALONE'} = [ text_to_hash( << '.') ];
-HTTP::Server::Simple 0.07
+HTTP::Server::Simple 0.34
HTTP::Server::Simple::Mason 0.09
+Net::Server
.
$deps{'MAILGATE'} = [ text_to_hash( << '.') ];
@@ -243,48 +277,58 @@ Term::ReadKey
.
$deps{'DEV'} = [ text_to_hash( << '.') ];
-Test::Inline
-Apache::Test
HTML::Form
HTML::TokeParser
WWW::Mechanize
Test::WWW::Mechanize 1.04
Module::Refresh 0.03
-Test::Expect 0.30
+Test::Expect 0.31
XML::Simple
File::Find
+Test::Deep 0 # needed for shredder tests
+String::ShellQuote 0 # needed for gnupg-incoming.t
+Test::HTTP::Server::Simple 0.09
+Test::HTTP::Server::Simple::StashWarnings 0.02
+Log::Dispatch::Perl
+Test::Warn
+Test::Builder 0.77 # needed to fix TODO test
+IPC::Run3
+Test::MockTime
+HTTP::Server::Simple::Mason 0.13
.
$deps{'FASTCGI'} = [ text_to_hash( << '.') ];
-CGI 2.92
+CGI 3.38
FCGI
CGI::Fast
.
$deps{'SPEEDYCGI'} = [ text_to_hash( << '.') ];
-CGI 2.92
+CGI 3.38
CGI::SpeedyCGI
.
$deps{'MODPERL1'} = [ text_to_hash( << '.') ];
-CGI 2.92
+CGI 3.38
Apache::Request
Apache::DBI 0.92
.
$deps{'MODPERL2'} = [ text_to_hash( << '.') ];
-CGI 3.10
+CGI 3.38
Apache::DBI
-HTML::Mason 1.31
+HTML::Mason 1.36
.
$deps{'MYSQL'} = [ text_to_hash( << '.') ];
DBD::mysql 2.1018
.
+
$deps{'ORACLE'} = [ text_to_hash( << '.') ];
DBD::Oracle
.
+
$deps{'POSTGRESQL'} = [ text_to_hash( << '.') ];
DBD::Pg 1.43
.
@@ -293,6 +337,36 @@ $deps{'SQLITE'} = [ text_to_hash( << '.') ];
DBD::SQLite 1.00
.
+$deps{'GPG'} = [ text_to_hash( << '.') ];
+GnuPG::Interface
+PerlIO::eol
+.
+
+$deps{'ICAL'} = [ text_to_hash( << '.') ];
+Data::ICal
+.
+
+$deps{'SMTP'} = [ text_to_hash( << '.') ];
+Net::SMTP
+.
+
+$deps{'DASHBOARDS'} = [ text_to_hash( << '.') ];
+HTML::RewriteAttributes 0.02
+MIME::Types
+.
+
+$deps{'GRAPHVIZ'} = [ text_to_hash( << '.') ];
+GraphViz
+IPC::Run
+IPC::Run::SafeHandles
+.
+
+$deps{'GD'} = [ text_to_hash( << '.') ];
+GD
+GD::Graph
+GD::Text
+.
+
if ($args{'download'}) {
download_mods();
@@ -303,7 +377,7 @@ check_perl_version();
check_users();
-
+my %Missing_By_Type = ();
foreach my $type (sort grep $args{$_}, keys %args) {
next unless ($type =~ /^with-(.*?)$/);
@@ -312,39 +386,58 @@ foreach my $type (sort grep $args{$_}, keys %args) {
my @missing;
my @deps = @{ $deps{$type} };
- while (@deps) {
- my $module = shift @deps;
- my $version = shift @deps;
- my $ret = test_dep($module, $version);
- push @missing, $module, $version unless $ret;
- }
+ my %missing = test_deps(@deps);
+
if ( $args{'install'} ) {
- while( @missing ) {
- resolve_dep(shift @missing, shift @missing);
+ for my $module (keys %missing) {
+ resolve_dep($module, $missing{$module}{version});
+ delete $missing{$module} if test_dep($module, $missing{$module}{version});
}
}
+
+ $Missing_By_Type{$type} = \%missing if keys %missing;
}
-conclude();
+conclude(%Missing_By_Type);
+
+sub test_deps {
+ my @deps = @_;
+
+ my %missing;
+ while(@deps) {
+ my $module = shift @deps;
+ my $version = shift @deps;
+ my($test, $error) = test_dep($module, $version);
+ my $msg = $module . ($version ? " >= $version" : '');
+ print_found($msg, $test, $error);
+
+ $missing{$module} = { version => $version, error => $error } unless $test;
+ }
+
+ return %missing;
+}
sub test_dep {
my $module = shift;
my $version = shift;
- eval "use $module $version ()";
- if ($@) {
- my $error = $@;
- $error =~ s/\n(.*)$//s;
- undef $error unless $error =~ /this is only/;
- found("$module $version", 0, $error);
-
- return undef;
- } else {
- my $msg = "$module";
- $msg .= " >=$version" if $version;
- found($msg, 1);
- return 1;
+ if ( $args{'list-deps'} ) {
+ print $module, ': ', $version || 0, "\n";
+ }
+ else {
+ eval "use $module $version ()";
+ if ($@) {
+ my $error = $@;
+ $error =~ s/\n(.*)$//s;
+ $error =~ s/at \(eval \d+\) line \d+\.$//;
+ undef $error unless $error =~ /this is only/;
+
+ return ( 0, $error );
+ }
+ else {
+ return 1;
+ }
}
}
@@ -366,8 +459,8 @@ sub resolve_dep {
}
unless ( $configured ) {
print <<END;
-You didn't configure CPAN shell yet.
-Please run `/usr/bin/perl -MCPAN -e shell` tool and configure it.
+You haven't configured the CPAN shell yet.
+Please run `/usr/bin/perl -MCPAN -e shell` to configure it.
END
exit(1);
}
@@ -459,21 +552,21 @@ sub check_perl_version {
section("perl");
eval {require 5.008003};
if ($@) {
- found("5.8.3", 0,"RT is known to be non-functional on versions of perl older than 5.8.3. Please upgrade to 5.8.3 or newer.");
+ print_found("5.8.3", 0,"RT is known to be non-functional on versions of perl older than 5.8.3. Please upgrade to 5.8.3 or newer.");
exit(1);
} else {
- found( ">=5.8.3($])", 1);
+ print_found( sprintf(">=5.8.3(%vd)", $^V), 1 );
}
}
sub check_users {
section("users");
- found("rt group (www)", defined getgrnam("www"));
- found("bin owner (root)", defined getpwnam("root"));
- found("libs owner (root)", defined getpwnam("root"));
- found("libs group (bin)", defined getgrnam("bin"));
- found("web owner (www)", defined getpwnam("www"));
- found("web group (www)", defined getgrnam("www"));
+ print_found("rt group (www)", defined getgrnam("www"));
+ print_found("bin owner (root)", defined getpwnam("root"));
+ print_found("libs owner (root)", defined getpwnam("root"));
+ print_found("libs group (bin)", defined getgrnam("bin"));
+ print_found("web owner (www)", defined getpwnam("www"));
+ print_found("web group (www)", defined getgrnam("www"));
}
diff --git a/rt/sbin/rt-test-dependencies.in b/rt/sbin/rt-test-dependencies.in
index f978d7b..9819108 100644
--- a/rt/sbin/rt-test-dependencies.in
+++ b/rt/sbin/rt-test-dependencies.in
@@ -2,8 +2,8 @@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -64,14 +64,24 @@ GetOptions(
'with-SPEEDYCGI', 'with-MODPERL1',
'with-MODPERL2', 'with-DEV',
'with-STANDALONE',
+
+ 'with-GPG',
+ 'with-ICAL',
+ 'with-SMTP',
+ 'with-GRAPHVIZ',
+ 'with-GD',
+ 'with-DASHBOARDS',
+
'download=s',
- 'repository=s'
+ 'repository=s',
+ 'list-deps'
);
unless (keys %args) {
help();
- exit(0);
+ exit(1);
}
+
# Set up defaults
my %default = (
'with-MASON' => 1,
@@ -79,11 +89,16 @@ my %default = (
'with-CLI' => 1,
'with-MAILGATE' => 1,
'with-DEV' => @RT_DEVEL_MODE@,
- 'with-STANDALONE' => @RT_STANDALONE@,
+ 'with-STANDALONE' => 1,
+ 'with-GPG' => @RT_GPG@,
+ 'with-ICAL' => 1,
+ 'with-SMTP' => 1,
+ 'with-GRAPHVIZ' => @RT_GRAPHVIZ@,
+ 'with-GD' => @RT_GD@,
+ 'with-DASHBOARDS' => 1
);
$args{$_} = $default{$_} foreach grep !exists $args{$_}, keys %default;
-
{
my $section;
my %always_show_sections = (
@@ -94,35 +109,53 @@ $args{$_} = $default{$_} foreach grep !exists $args{$_}, keys %default;
sub section {
my $s = shift;
$section = $s;
- print "$s:\n";
+ print "$s:\n" unless $args{'list-deps'};
}
- my $any_missing = 0;
- sub found {
+ sub print_found {
my $msg = shift;
my $test = shift;
my $extra = shift;
-
- $any_missing = 1 unless $test;
- if ($args{'v'} or not $test or $always_show_sections{$section}) {
- print "\t$msg...";
- print $test ? "found" : "MISSING";
- print "\n";
+
+ unless ( $args{'list-deps'} ) {
+ if ( $args{'v'} or not $test or $always_show_sections{$section} ) {
+ print "\t$msg ...";
+ print $test ? "found" : "MISSING";
+ print "\n";
+ }
+
+ print "\t\t$extra\n" if defined $extra;
}
-
- print "\t\t$extra\n" if defined $extra;
}
+}
- sub conclude {
- if ($any_missing) {
- print "\nSOMETHING WAS MISSING!\n";
- exit 1;
- } else {
- print "\nEverything was found.\n";
+sub conclude {
+ my %missing_by_type = @_;
+
+ unless ( $args{'list-deps'} ) {
+ unless ( keys %missing_by_type ) {
+ print "\nAll dependencies have been found.\n";
+ return;
+ }
+
+ print "\nSOME DEPENDENCIES WERE MISSING.\n";
+
+ for my $type ( keys %missing_by_type ) {
+ my $missing = $missing_by_type{$type};
+
+ print "$type missing dependencies:\n";
+ for my $name ( keys %$missing ) {
+ my $module = $missing->{$name};
+ my $version = $module->{version};
+ print_found( $name . ( $version ? " >= $version" : "" ),
+ 0, $module->{error} );
+ }
+ }
+ exit 1;
}
- }
}
+
sub help {
print <<'.';
@@ -130,22 +163,22 @@ sub help {
By default, testdeps determine whether you have
installed all the perl modules RT needs to run.
- --install Install missing modules
+ --install Install missing modules
The following switches will tell the tool to check for specific dependencies
- --with-mysql Database interface for MySQL
- --with-postgresql Database interface for PostgreSQL
- --with-sqlite Database interface and driver for SQLite (unsupported)
- --with-oracle Database interface for oracle (unsupported)
+ --with-mysql Database interface for MySQL
+ --with-postgresql Database interface for PostgreSQL
+ --with-oracle Database interface for Oracle
+ --with-sqlite Database interface and driver for SQLite (unsupported)
- --with-standalone Libraries needed to support the standalone simple pure perl server
- --with-fastcgi Libraries needed to support the fastcgi handler
- --with-speedycgi Libraries needed to support the speedycgi handler
- --with-modperl1 Libraries needed to support the modperl 1 handler
- --with-modperl2 Libraries needed to support the modperl 2 handler
+ --with-standalone Libraries needed to support the standalone simple pure perl server
+ --with-fastcgi Libraries needed to support the fastcgi handler
+ --with-speedycgi Libraries needed to support the speedycgi handler
+ --with-modperl1 Libraries needed to support the modperl 1 handler
+ --with-modperl2 Libraries needed to support the modperl 2 handler
- --with-dev Tools needed for RT development
+ --with-dev Tools needed for RT development
You can also specify -v or --verbose to list the status of all dependencies,
rather than just the missing ones.
@@ -175,54 +208,55 @@ Digest::base
Digest::MD5 2.27
DBI 1.37
Class::ReturnValue 0.40
-Date::Format
-DBIx::SearchBuilder 1.53
-Text::Template
+DBIx::SearchBuilder 1.54
+Text::Template 1.44
+File::ShareDir
File::Spec 0.8
HTML::Entities
HTML::Scrubber 0.08
Log::Dispatch 2.0
+Sys::Syslog 0.16
Locale::Maketext 1.06
Locale::Maketext::Lexicon 0.32
Locale::Maketext::Fuzzy
-MIME::Entity 5.108
+MIME::Entity 5.425
Mail::Mailer 1.57
-Net::SMTP
+Email::Address
Text::Wrapper
Time::ParseDate
Time::HiRes
-File::Temp
-Text::Autoformat
+File::Temp 0.18
Text::Quoted 2.02
Tree::Simple 1.04
+UNIVERSAL::require
Regexp::Common
Scalar::Util
-Module::Versions::Report 1.03
+Module::Versions::Report 1.05
Cache::Simple::TimedExpiry
-UNIVERSAL::require
Calendar::Simple
+Encode 2.21
CSS::Squish 0.06
+File::Glob
Devel::StackTrace 1.19
.
$deps{'MASON'} = [ text_to_hash( << '.') ];
-HTML::Mason 1.23
+HTML::Mason 1.36
Errno
Digest::MD5 2.27
CGI::Cookie 1.20
Storable 2.08
Apache::Session 1.53
XML::RSS 1.05
-GD
-GD::Graph
-GD::Text
Text::WikiFormat 0.76
CSS::Squish 0.06
+Devel::StackTrace 1.19
.
$deps{'STANDALONE'} = [ text_to_hash( << '.') ];
-HTTP::Server::Simple 0.07
+HTTP::Server::Simple 0.34
HTTP::Server::Simple::Mason 0.09
+Net::Server
.
$deps{'MAILGATE'} = [ text_to_hash( << '.') ];
@@ -243,48 +277,58 @@ Term::ReadKey
.
$deps{'DEV'} = [ text_to_hash( << '.') ];
-Test::Inline
-Apache::Test
HTML::Form
HTML::TokeParser
WWW::Mechanize
Test::WWW::Mechanize 1.04
Module::Refresh 0.03
-Test::Expect 0.30
+Test::Expect 0.31
XML::Simple
File::Find
+Test::Deep 0 # needed for shredder tests
+String::ShellQuote 0 # needed for gnupg-incoming.t
+Test::HTTP::Server::Simple 0.09
+Test::HTTP::Server::Simple::StashWarnings 0.02
+Log::Dispatch::Perl
+Test::Warn
+Test::Builder 0.77 # needed to fix TODO test
+IPC::Run3
+Test::MockTime
+HTTP::Server::Simple::Mason 0.13
.
$deps{'FASTCGI'} = [ text_to_hash( << '.') ];
-CGI 2.92
+CGI 3.38
FCGI
CGI::Fast
.
$deps{'SPEEDYCGI'} = [ text_to_hash( << '.') ];
-CGI 2.92
+CGI 3.38
CGI::SpeedyCGI
.
$deps{'MODPERL1'} = [ text_to_hash( << '.') ];
-CGI 2.92
+CGI 3.38
Apache::Request
Apache::DBI 0.92
.
$deps{'MODPERL2'} = [ text_to_hash( << '.') ];
-CGI 3.10
+CGI 3.38
Apache::DBI
-HTML::Mason 1.31
+HTML::Mason 1.36
.
$deps{'MYSQL'} = [ text_to_hash( << '.') ];
DBD::mysql 2.1018
.
+
$deps{'ORACLE'} = [ text_to_hash( << '.') ];
DBD::Oracle
.
+
$deps{'POSTGRESQL'} = [ text_to_hash( << '.') ];
DBD::Pg 1.43
.
@@ -293,6 +337,36 @@ $deps{'SQLITE'} = [ text_to_hash( << '.') ];
DBD::SQLite 1.00
.
+$deps{'GPG'} = [ text_to_hash( << '.') ];
+GnuPG::Interface
+PerlIO::eol
+.
+
+$deps{'ICAL'} = [ text_to_hash( << '.') ];
+Data::ICal
+.
+
+$deps{'SMTP'} = [ text_to_hash( << '.') ];
+Net::SMTP
+.
+
+$deps{'DASHBOARDS'} = [ text_to_hash( << '.') ];
+HTML::RewriteAttributes 0.02
+MIME::Types
+.
+
+$deps{'GRAPHVIZ'} = [ text_to_hash( << '.') ];
+GraphViz
+IPC::Run
+IPC::Run::SafeHandles
+.
+
+$deps{'GD'} = [ text_to_hash( << '.') ];
+GD
+GD::Graph
+GD::Text
+.
+
if ($args{'download'}) {
download_mods();
@@ -303,7 +377,7 @@ check_perl_version();
check_users();
-
+my %Missing_By_Type = ();
foreach my $type (sort grep $args{$_}, keys %args) {
next unless ($type =~ /^with-(.*?)$/);
@@ -312,39 +386,58 @@ foreach my $type (sort grep $args{$_}, keys %args) {
my @missing;
my @deps = @{ $deps{$type} };
- while (@deps) {
- my $module = shift @deps;
- my $version = shift @deps;
- my $ret = test_dep($module, $version);
- push @missing, $module, $version unless $ret;
- }
+ my %missing = test_deps(@deps);
+
if ( $args{'install'} ) {
- while( @missing ) {
- resolve_dep(shift @missing, shift @missing);
+ for my $module (keys %missing) {
+ resolve_dep($module, $missing{$module}{version});
+ delete $missing{$module} if test_dep($module, $missing{$module}{version});
}
}
+
+ $Missing_By_Type{$type} = \%missing if keys %missing;
}
-conclude();
+conclude(%Missing_By_Type);
+
+sub test_deps {
+ my @deps = @_;
+
+ my %missing;
+ while(@deps) {
+ my $module = shift @deps;
+ my $version = shift @deps;
+ my($test, $error) = test_dep($module, $version);
+ my $msg = $module . ($version ? " >= $version" : '');
+ print_found($msg, $test, $error);
+
+ $missing{$module} = { version => $version, error => $error } unless $test;
+ }
+
+ return %missing;
+}
sub test_dep {
my $module = shift;
my $version = shift;
- eval "use $module $version ()";
- if ($@) {
- my $error = $@;
- $error =~ s/\n(.*)$//s;
- undef $error unless $error =~ /this is only/;
- found("$module $version", 0, $error);
-
- return undef;
- } else {
- my $msg = "$module";
- $msg .= " >=$version" if $version;
- found($msg, 1);
- return 1;
+ if ( $args{'list-deps'} ) {
+ print $module, ': ', $version || 0, "\n";
+ }
+ else {
+ eval "use $module $version ()";
+ if ($@) {
+ my $error = $@;
+ $error =~ s/\n(.*)$//s;
+ $error =~ s/at \(eval \d+\) line \d+\.$//;
+ undef $error unless $error =~ /this is only/;
+
+ return ( 0, $error );
+ }
+ else {
+ return 1;
+ }
}
}
@@ -366,8 +459,8 @@ sub resolve_dep {
}
unless ( $configured ) {
print <<END;
-You didn't configure CPAN shell yet.
-Please run `@PERL@ -MCPAN -e shell` tool and configure it.
+You haven't configured the CPAN shell yet.
+Please run `@PERL@ -MCPAN -e shell` to configure it.
END
exit(1);
}
@@ -459,21 +552,21 @@ sub check_perl_version {
section("perl");
eval {require 5.008003};
if ($@) {
- found("5.8.3", 0,"RT is known to be non-functional on versions of perl older than 5.8.3. Please upgrade to 5.8.3 or newer.");
+ print_found("5.8.3", 0,"RT is known to be non-functional on versions of perl older than 5.8.3. Please upgrade to 5.8.3 or newer.");
exit(1);
} else {
- found( ">=5.8.3($])", 1);
+ print_found( sprintf(">=5.8.3(%vd)", $^V), 1 );
}
}
sub check_users {
section("users");
- found("rt group (@RTGROUP@)", defined getgrnam("@RTGROUP@"));
- found("bin owner (@BIN_OWNER@)", defined getpwnam("@BIN_OWNER@"));
- found("libs owner (@LIBS_OWNER@)", defined getpwnam("@LIBS_OWNER@"));
- found("libs group (@LIBS_GROUP@)", defined getgrnam("@LIBS_GROUP@"));
- found("web owner (@WEB_USER@)", defined getpwnam("@WEB_USER@"));
- found("web group (@WEB_GROUP@)", defined getgrnam("@WEB_GROUP@"));
+ print_found("rt group (@RTGROUP@)", defined getgrnam("@RTGROUP@"));
+ print_found("bin owner (@BIN_OWNER@)", defined getpwnam("@BIN_OWNER@"));
+ print_found("libs owner (@LIBS_OWNER@)", defined getpwnam("@LIBS_OWNER@"));
+ print_found("libs group (@LIBS_GROUP@)", defined getgrnam("@LIBS_GROUP@"));
+ print_found("web owner (@WEB_USER@)", defined getpwnam("@WEB_USER@"));
+ print_found("web group (@WEB_GROUP@)", defined getgrnam("@WEB_GROUP@"));
}
diff --git a/rt/sbin/rt-validator b/rt/sbin/rt-validator
new file mode 100755
index 0000000..2d6fc04
--- /dev/null
+++ b/rt/sbin/rt-validator
@@ -0,0 +1,1118 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use Getopt::Long;
+my %opt = ();
+GetOptions(
+ \%opt,
+ 'check|c',
+ 'resolve',
+ 'force',
+ 'verbose|v',
+);
+
+usage() unless $opt{'check'};
+usage_warning() if $opt{'resolve'} && !$opt{'force'};
+
+sub usage {
+ print STDERR <<END;
+Usage: $0 options
+
+Options:
+
+ $0 --check
+ $0 --check --verbose
+ $0 --check --verbose --resolve
+ $0 --check --verbose --resolve --force
+
+--check - is mandatory argument, you can use -c, as well.
+--verbose - print additional info to STDOUT
+--resolve - enable resolver that can delete or create some records
+--force - resolve without asking questions
+
+Description:
+
+This script checks integrity of records in RT's DB. May delete some invalid
+records or ressurect accidentally deleted.
+
+END
+ exit 1;
+}
+
+sub usage_warning {
+ print <<END;
+This utility can fix some issues with DB by creating or updating. In some
+cases there is no enough data to resurect a missing record, but records which
+refers to a missing can be deleted. It's up to you to decide what to do.
+
+In any case it's highly recommended to have a backup before resolving anything.
+
+Press enter to continue.
+END
+ <>;
+}
+
+use RT;
+RT::LoadConfig();
+RT::Init();
+
+my $dbh = $RT::Handle->dbh;
+my $db_type = RT->Config->Get('DatabaseType');
+
+my %TYPE = (
+ 'Transactions.Field' => 'text',
+ 'Transactions.OldValue' => 'text',
+ 'Transactions.NewValue' => 'text',
+);
+
+my @models = qw(
+ ACE
+ Attachment
+ Attribute
+ CachedGroupMember
+ CustomField
+ CustomFieldValue
+ GroupMember
+ Group
+ Link
+ ObjectCustomField
+ ObjectCustomFieldValue
+ Principal
+ Queue
+ ScripAction
+ ScripCondition
+ Scrip
+ Template
+ Ticket
+ Transaction
+ User
+);
+
+my %redo_on;
+$redo_on{'Delete'} = {
+ ACL => [],
+
+ Attributes => [],
+
+ Links => [],
+
+ CustomFields => [],
+ CustomFieldValues => [],
+ ObjectCustomFields => [],
+ ObjectCustomFieldValues => [],
+
+ Queues => [],
+
+ Scrips => [],
+ ScripActions => [],
+ ScripConditions => [],
+ Templates => [],
+
+ Tickets => [ 'Tickets -> other', 'Tickets <-> Role Groups' ],
+ Transactions => [ 'Attachments -> other' ],
+
+ Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ],
+ Users => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'Principals -> Users' ],
+ Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM', 'Principals -> Groups' ],
+
+ GroupMembers => [ 'CGM vs. GM' ],
+ CachedGroupMembers => [ 'CGM vs. GM' ],
+};
+$redo_on{'Create'} = {
+ Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ],
+ Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM' ],
+ GroupMembers => [ 'CGM vs. GM' ],
+ CachedGroupMembers => [ 'CGM vs. GM' ],
+};
+
+my %describe_cb;
+%describe_cb = (
+ Attachments => sub {
+ my $row = shift;
+ my $txn_id = $row->{transactionid};
+ my $res = 'Attachment #'. $row->{id} .' -> Txn #'. $txn_id;
+ return $res .', '. describe( 'Transactions', $txn_id );
+ },
+ Transactions => sub {
+ my $row = shift;
+ return 'Transaction #'. $row->{id} .' -> object '. $row->{objecttype} .' #'. $row->{objectid};
+ },
+);
+
+{ my %cache = ();
+sub m2t($) {
+ my $model = shift;
+ return $cache{$model} if $cache{$model};
+ my $class = "RT::$model";
+ my $object = $class->new( $RT::SystemUser );
+ return $cache{$model} = $object->Table;
+} }
+
+my (@do_check, %redo_check);
+
+my @CHECKS;
+foreach my $table ( qw(Users Groups) ) {
+ push @CHECKS, "$table -> Principals" => sub {
+ my $msg = "A record in $table refers not existing record in Principals."
+ ." The script can either create missing record in Principals"
+ ." or delete record in $table.";
+ my ($type) = ($table =~ /^(.*)s$/);
+ check_integrity(
+ $table, 'id' => 'Principals', 'id',
+ join_condition => 't.PrincipalType = ?',
+ bind_values => [ $type ],
+ action => sub {
+ my $id = shift;
+ return unless my $a = prompt_action( ['Delete', 'create'], $msg );
+
+ if ( $a eq 'd' ) {
+ delete_record( $table, $id );
+ }
+ elsif ( $a eq 'c' ) {
+ my $principal_id = create_record( 'Principals',
+ id => $id, PrincipalType => $type, ObjectId => $id, Disabled => 0
+ );
+ }
+ else {
+ die "Unknown action '$a'";
+ }
+ },
+ );
+ };
+
+ push @CHECKS, "Principals -> $table" => sub {
+ my $msg = "A record in Principals refers not existing record in $table."
+ ." In some cases it's possible to resurrect manually such records,"
+ ." but this utility can only delete";
+
+ check_integrity(
+ 'Principals', 'id' => $table, 'id',
+ condition => 's.PrincipalType = ?',
+ bind_values => [ $table =~ /^(.*)s$/ ],
+ action => sub {
+ my $id = shift;
+ return unless prompt( 'Delete', $msg );
+
+ delete_record( 'Principals', $id );
+ },
+ );
+ };
+}
+
+push @CHECKS, 'User <-> ACL equivalence group' => sub {
+ # from user to group
+ check_integrity(
+ 'Users', 'id' => 'Groups', 'Instance',
+ join_condition => 't.Domain = ? AND t.Type = ?',
+ bind_values => [ 'ACLEquivalence', 'UserEquiv' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Create', "Found an user that has no ACL equivalence group."
+ );
+
+ my $gid = create_record( 'Groups',
+ Domain => 'ACLEquivalence', Type => 'UserEquiv', Instance => $id,
+ );
+ },
+ );
+ # from group to user
+ check_integrity(
+ 'Groups', 'Instance' => 'Users', 'id',
+ condition => 's.Domain = ? AND s.Type = ?',
+ bind_values => [ 'ACLEquivalence', 'UserEquiv' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found an user ACL equivalence group, but there is no user."
+ );
+
+ delete_record( 'Groups', $id );
+ },
+ );
+ # one ACL equiv group for each user
+ check_uniqueness(
+ 'Groups',
+ columns => ['Instance'],
+ condition => '.Domain = ? AND .Type = ?',
+ bind_values => [ 'ACLEquivalence', 'UserEquiv' ],
+ );
+};
+
+# check integrity of Queue role groups
+push @CHECKS, 'Queues <-> Role Groups' => sub {
+ # XXX: we check only that there is at least one group for a queue
+ # from queue to group
+ check_integrity(
+ 'Queues', 'id' => 'Groups', 'Instance',
+ join_condition => 't.Domain = ?',
+ bind_values => [ 'RT::Queue-Role' ],
+ );
+ # from group to queue
+ check_integrity(
+ 'Groups', 'Instance' => 'Queues', 'id',
+ condition => 's.Domain = ?',
+ bind_values => [ 'RT::Queue-Role' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found role group of not existant queue."
+ );
+
+ delete_record( 'Groups', $id );
+ },
+ );
+};
+
+# check integrity of Ticket role groups
+push @CHECKS, 'Tickets <-> Role Groups' => sub {
+ # XXX: we check only that there is at least one group for a queue
+ # from queue to group
+ check_integrity(
+ 'Tickets', 'id' => 'Groups', 'Instance',
+ join_condition => 't.Domain = ?',
+ bind_values => [ 'RT::Ticket-Role' ],
+ );
+ # from group to ticket
+ check_integrity(
+ 'Groups', 'Instance' => 'Tickets', 'id',
+ condition => 's.Domain = ?',
+ bind_values => [ 'RT::Ticket-Role' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a role group of not existant ticket."
+ );
+
+ delete_record( 'Groups', $id );
+ },
+ );
+};
+
+# additional CHECKS on groups
+push @CHECKS, 'Role Groups (Instance, Type) uniqueness' => sub {
+ # Check that Domain, Instance and Type are unique
+ check_uniqueness(
+ 'Groups',
+ columns => ['Domain', 'Instance', 'Type'],
+ condition => '.Domain LIKE ?',
+ bind_values => [ '%-Role' ],
+ );
+};
+
+
+push @CHECKS, 'GMs -> Groups, Members' => sub {
+ my $msg = "A record in GroupMembers references an object that doesn't exist."
+ ." May be you deleted a group or principal directly from DB?"
+ ." Usually it's ok to delete such records.";
+ check_integrity(
+ 'GroupMembers', 'GroupId' => 'Groups', 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt( 'Delete', $msg );
+
+ delete_record( 'GroupMembers', $id );
+ },
+ );
+ check_integrity(
+ 'GroupMembers', 'MemberId' => 'Principals', 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt( 'Delete', $msg );
+
+ delete_record( 'GroupMembers', $id );
+ },
+ );
+};
+
+# CGM and GM
+push @CHECKS, 'CGM vs. GM' => sub {
+ # all GM record should be duplicated in CGM
+ check_integrity(
+ GroupMembers => ['GroupId', 'MemberId'],
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Create',
+ "Found a record in GroupMembers that has no direct duplicate in CachedGroupMembers table."
+ );
+
+ my $gm = RT::GroupMember->new( $RT::SystemUser );
+ $gm->Load( $id );
+ die "Couldn't load GM record #$id" unless $gm->id;
+ my $cgm = create_record( 'CachedGroupMembers',
+ GroupId => $gm->GroupId, MemberId => $gm->MemberId,
+ ImmediateParentId => $gm->GroupId, Via => undef,
+ Disabled => 0, # XXX: we should check integrity of Disabled field
+ );
+ update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } );
+ },
+ );
+ # all first level CGM records should have a GM record
+ check_integrity(
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ GroupMembers => ['GroupId', 'MemberId'],
+ condition => 's.ImmediateParentId = s.GroupId AND s.Via = s.id AND s.GroupId != s.MemberId',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers for a (Group, Member) pair"
+ ." that doesn't exist in GroupMembers table."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+ # each group should have a CGM record where MemberId == GroupId
+ check_integrity(
+ Groups => ['id', 'id'],
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Create',
+ "Found a record in Groups that has no direct"
+ ." duplicate in CachedGroupMembers table."
+ );
+
+ my $g = RT::Group->new( $RT::SystemUser );
+ $g->Load( $id );
+ die "Couldn't load group #$id" unless $g->id;
+ die "Loaded group by $id has id ". $g->id unless $g->id == $id;
+ my $cgm = create_record( 'CachedGroupMembers',
+ GroupId => $id, MemberId => $id,
+ ImmediateParentId => $id, Via => undef,
+ Disabled => $g->Disabled,
+ );
+ update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } );
+ },
+ );
+
+ # and back, each record in CGM with MemberId == GroupId without exceptions
+ # should reference a group
+ check_integrity(
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ Groups => ['id', 'id'],
+ condition => "s.GroupId = s.MemberId",
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers for a group that doesn't exist."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+ # Via
+ check_integrity(
+ CachedGroupMembers => 'Via',
+ CachedGroupMembers => 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers with Via referencing not existing record."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+
+ # for every CGM where ImmediateParentId != GroupId there should be
+ # matching parent record (first level)
+ check_integrity(
+ CachedGroupMembers => ['ImmediateParentId', 'MemberId'],
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ join_condition => 't.Via = t.id',
+ condition => 's.ImmediateParentId != s.GroupId',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers that referencing not existant record in CachedGroupMembers table."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+
+ # for every CGM where ImmediateParentId != GroupId there should be
+ # matching "grand" parent record
+ check_integrity(
+ CachedGroupMembers => ['GroupId', 'ImmediateParentId', 'Via'],
+ CachedGroupMembers => ['GroupId', 'MemberId', 'id'],
+ condition => 's.ImmediateParentId != s.GroupId',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers that referencing not existant record in CachedGroupMembers table."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+
+ # CHECK recursive records:
+ # if we have CGM1 (G1,M1,V1,IP1) then for every GM2(G2, M2), where G2 == M1,
+ # we should have CGM3 where G3 = G1, M3 = M2, V3 = ID1, IP3 = M1
+ {
+ my $query = <<END;
+SELECT cgm1.GroupId, gm2.MemberId, cgm1.id AS Via,
+ cgm1.MemberId AS ImmediateParentId, cgm1.Disabled
+FROM
+ CachedGroupMembers cgm1
+ CROSS JOIN GroupMembers gm2
+ LEFT JOIN CachedGroupMembers cgm3 ON (
+ cgm3.GroupId = cgm1.GroupId
+ AND cgm3.MemberId = gm2.MemberId
+ AND cgm3.Via = cgm1.id
+ AND cgm3.ImmediateParentId = cgm1.MemberId )
+WHERE cgm1.GroupId != cgm1.MemberId
+AND gm2.GroupId = cgm1.MemberId
+AND cgm3.id IS NULL
+END
+
+ my $action = sub {
+ my %props = @_;
+ return unless prompt(
+ 'Create',
+ "Found records in CachedGroupMembers table without recursive duplicates."
+ );
+ my $cgm = create_record( 'CachedGroupMembers', %props );
+ };
+
+ my $sth = execute_query( $query );
+ while ( my ($g, $m, $via, $ip, $dis) = $sth->fetchrow_array ) {
+ print STDERR "Principal #$m is member of #$ip when #$ip is member of #$g,";
+ print STDERR " but there is no cached GM record that $m is member of #$g.\n";
+ $action->(
+ GroupId => $g, MemberId => $m, Via => $via,
+ ImmediateParentId => $ip, Disabled => $dis,
+ );
+ }
+ }
+};
+
+# Tickets
+push @CHECKS, 'Tickets -> other' => sub {
+ check_integrity(
+ 'Tickets', 'EffectiveId' => 'Tickets', 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a ticket that's been merged into a ticket that don't exist anymore."
+ );
+
+ delete_record( 'Tickets', $id );
+ },
+ );
+ check_integrity(
+ 'Tickets', 'Queue' => 'Queues', 'id',
+ );
+ check_integrity(
+ 'Tickets', 'Owner' => 'Users', 'id',
+ );
+ # XXX: check that owner is only member of owner role group
+};
+
+
+push @CHECKS, 'Transactions -> other' => sub {
+ foreach my $model ( @models ) {
+ check_integrity(
+ 'Transactions', 'ObjectId' => m2t($model), 'id',
+ condition => 's.ObjectType = ?',
+ bind_values => [ "RT::$model" ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction without object."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ }
+ # type = CustomField
+ check_integrity(
+ 'Transactions', 'Field' => 'CustomFields', 'id',
+ condition => 's.Type = ?',
+ bind_values => [ 'CustomField' ],
+ );
+ # type = Take, Untake, Force, Steal or Give
+ check_integrity(
+ 'Transactions', 'OldValue' => 'Users', 'id',
+ condition => 's.Type IN (?, ?, ?, ?, ?)',
+ bind_values => [ qw(Take Untake Force Steal Give) ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction regarding changes of Owner,"
+ ." but User with id stored in OldValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Users', 'id',
+ condition => 's.Type IN (?, ?, ?, ?, ?)',
+ bind_values => [ qw(Take Untake Force Steal Give) ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction regarding changes of Owner,"
+ ." but User with id stored in NewValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ # type = DelWatcher
+ check_integrity(
+ 'Transactions', 'OldValue' => 'Principals', 'id',
+ condition => 's.Type = ?',
+ bind_values => [ 'DelWatcher' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing watchers change,"
+ ." but User with id stored in OldValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ # type = AddWatcher
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Principals', 'id',
+ condition => 's.Type = ?',
+ bind_values => [ 'AddWatcher' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing watchers change,"
+ ." but User with id stored in NewValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+
+# XXX: Links need more love, uri is stored instead of id
+# # type = DeleteLink
+# check_integrity(
+# 'Transactions', 'OldValue' => 'Links', 'id',
+# condition => 's.Type = ?',
+# bind_values => [ 'DeleteLink' ],
+# );
+# # type = AddLink
+# check_integrity(
+# 'Transactions', 'NewValue' => 'Links', 'id',
+# condition => 's.Type = ?',
+# bind_values => [ 'AddLink' ],
+# );
+
+ # type = Set, Field = Queue
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Queues', 'id',
+ condition => 's.Type = ? AND s.Field = ?',
+ bind_values => [ 'Set', 'Queue' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing queue change,"
+ ." but Queue with id stored in NewValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ check_integrity(
+ 'Transactions', 'OldValue' => 'Queues', 'id',
+ condition => 's.Type = ? AND s.Field = ?',
+ bind_values => [ 'Set', 'Queue' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing queue change,"
+ ." but Queue with id stored in OldValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ # Reminders
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Tickets', 'id',
+ join_condition => 't.Type = ?',
+ condition => 's.Type IN (?, ?, ?)',
+ bind_values => [ 'reminder', 'AddReminder', 'OpenReminder', 'ResolveReminder' ],
+ );
+};
+
+# Attachments
+push @CHECKS, 'Attachments -> other' => sub {
+ check_integrity(
+ Attachments => 'TransactionId', Transactions => 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found an attachment without a transaction."
+ );
+ delete_record( 'Attachments', $id );
+ },
+ );
+ check_integrity(
+ Attachments => 'Parent', Attachments => 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found an sub-attachment without its parent attachment."
+ );
+ delete_record( 'Attachments', $id );
+ },
+ );
+ check_integrity(
+ Attachments => 'Parent',
+ Attachments => 'id',
+ join_condition => 's.TransactionId = t.TransactionId',
+ );
+};
+
+push @CHECKS, 'CustomFields and friends' => sub {
+ #XXX: ObjectCustomFields needs more love
+ check_integrity(
+ 'CustomFieldValues', 'CustomField' => 'CustomFields', 'id',
+ );
+ check_integrity(
+ 'ObjectCustomFieldValues', 'CustomField' => 'CustomFields', 'id',
+ );
+ foreach my $model ( @models ) {
+ check_integrity(
+ 'ObjectCustomFieldValues', 'ObjectId' => m2t($model), 'id',
+ condition => 's.ObjectType = ?',
+ bind_values => [ "RT::$model" ],
+ );
+ }
+};
+
+push @CHECKS, Templates => sub {
+ check_integrity(
+ 'Templates', 'Queue' => 'Queues', 'id',
+ );
+};
+
+push @CHECKS, Scrips => sub {
+ check_integrity(
+ 'Scrips', 'Queue' => 'Queues', 'id',
+ );
+ check_integrity(
+ 'Scrips', 'ScripCondition' => 'ScripConditions', 'id',
+ );
+ check_integrity(
+ 'Scrips', 'ScripAction' => 'ScripActions', 'id',
+ );
+ check_integrity(
+ 'Scrips', 'Template' => 'Templates', 'id',
+ );
+};
+
+push @CHECKS, Attributes => sub {
+ foreach my $model ( @models ) {
+ check_integrity(
+ 'Attributes', 'ObjectId' => m2t($model), 'id',
+ condition => 's.ObjectType = ?',
+ bind_values => [ "RT::$model" ],
+ );
+ }
+};
+
+# Fix situations when Creator or LastUpdatedBy references ACL equivalence
+# group of a user instead of user
+push @CHECKS, 'FIX: LastUpdatedBy and Creator' => sub {
+ my %fix = ();
+ foreach my $model ( @models ) {
+ my $class = "RT::$model";
+ my $object = $class->new( $RT::SystemUser );
+ foreach my $column ( qw(LastUpdatedBy Creator) ) {
+ next unless $object->_Accessible( $column, 'auto' );
+
+ my $table = m2t($model);
+ my $query = <<END;
+SELECT m.id, g.id, g.Instance
+FROM
+ Groups g JOIN $table m ON g.id = m.$column
+WHERE
+ g.Domain = ?
+ AND g.Type = ?
+END
+ my $action = sub {
+ my ($gid, $uid) = @_;
+ return unless prompt(
+ 'Update',
+ "Looks like there were a bug in old versions of RT back in 2006\n"
+ ."that has been fixed. If other checks are ok then it's ok to update\n"
+ ."these records to point them to users instead of groups"
+ );
+ $fix{ $table }{ $column }{ $gid } = $uid;
+ };
+
+ my $sth = execute_query( $query, 'ACLEquivalence', 'UserEquiv' );
+ while ( my ($rid, $gid, $uid) = $sth->fetchrow_array ) {
+ print STDERR "Record #$rid in $table refers to ACL equivalence group #$gid of user #$uid";
+ print STDERR " when must reference user.\n";
+ $action->( $gid, $uid );
+ if ( keys( %fix ) > 1000 ) {
+ $sth->finish;
+ last;
+ }
+ }
+ }
+ }
+
+ if ( keys %fix ) {
+ foreach my $table ( keys %fix ) {
+ foreach my $column ( keys %{ $fix{ $table } } ) {
+ my $query = "UPDATE $table SET $column = ? WHERE $column = ?";
+ while ( my ($gid, $uid) = each %{ $fix{ $table }{ $column } } ) {
+ update_records( $table, { $column => $gid }, { $column => $uid } );
+ }
+ }
+ }
+ $redo_check{'FIX: LastUpdatedBy and Creator'} = 1;
+ }
+};
+
+push @CHECKS, 'LastUpdatedBy and Creator' => sub {
+ foreach my $model ( @models ) {
+ my $class = "RT::$model";
+ my $object = $class->new( $RT::SystemUser );
+ my $table = $object->Table;
+ foreach my $column ( qw(LastUpdatedBy Creator) ) {
+ next unless $object->_Accessible( $column, 'auto' );
+ check_integrity(
+ $table, $column => 'Users', 'id',
+ action => sub {
+ my ($id, %prop) = @_;
+ return unless my $replace_with = prompt_integer(
+ 'Replace',
+ "Column $column should point to a user, but there is record #$id in table $table\n"
+ ."where it's not true. It's ok to replace these wrong references with id of any user.\n"
+ ."Note that id you enter is not checked. You can peak any user from your DB, but it's\n"
+ ."may be better to create a special user for this, for example 'user_that_has_been_deleted'\n"
+ ."or something like that.",
+ "$table.$column -> user #$prop{$column}"
+ );
+ update_records( $table, { id => $id, $column => $prop{$column} }, { $column => $replace_with } );
+ },
+ );
+ }
+ }
+};
+my %CHECKS = @CHECKS;
+
+@do_check = do { my $i = 1; grep $i++%2, @CHECKS };
+
+while ( my $check = shift @do_check ) {
+ $CHECKS{ $check }->();
+
+ foreach my $redo ( keys %redo_check ) {
+ die "check $redo doesn't exist" unless $CHECKS{ $redo };
+ delete $redo_check{ $redo };
+ next if grep $_ eq $redo, @do_check; # don't do twice
+ push @do_check, $redo;
+ }
+}
+
+sub check_integrity {
+ my ($stable, @scols) = (shift, shift);
+ my ($ttable, @tcols) = (shift, shift);
+ my %args = @_;
+
+ @scols = @{ $scols[0] } if ref $scols[0];
+ @tcols = @{ $tcols[0] } if ref $tcols[0];
+
+ print "Checking integrity of $stable.{". join(', ', @scols) ."} => $ttable.{". join(', ', @tcols) ."}\n"
+ if $opt{'verbose'};
+
+ my $query = "SELECT s.id, ". join(', ', map "s.$_", @scols)
+ ." FROM $stable s LEFT JOIN $ttable t"
+ ." ON (". join(
+ ' AND ', map columns_eq_cond('s', $stable, $scols[$_] => 't', $ttable, $tcols[$_]), (0..(@scols-1))
+ ) .")"
+ . ($args{'join_condition'}? " AND ( $args{'join_condition'} )": "")
+ ." WHERE t.id IS NULL"
+ ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @scols);
+
+ $query .= " AND ( $args{'condition'} )" if $args{'condition'};
+
+ my @binds = @{ $args{'bind_values'} || [] };
+ if ( $tcols[0] eq 'id' && @tcols == 1 ) {
+ my $type = $TYPE{"$stable.$scols[0]"} || 'number';
+ if ( $type eq 'number' ) {
+ $query .= " AND s.$scols[0] != ?"
+ }
+ elsif ( $type eq 'text' ) {
+ $query .= " AND s.$scols[0] NOT LIKE ?"
+ }
+ push @binds, 0;
+ }
+
+ my $sth = execute_query( $query, @binds );
+ while ( my ($sid, @set) = $sth->fetchrow_array ) {
+ print STDERR "Record #$sid in $stable references not existent record in $ttable\n";
+ for ( my $i = 0; $i < @scols; $i++ ) {
+ print STDERR "\t$scols[$i] => '$set[$i]' => $tcols[$i]\n";
+ }
+ print STDERR "\t". describe( $stable, $sid ) ."\n";
+ $args{'action'}->( $sid, map { $scols[$_] => $set[$_] } (0 .. (@scols-1)) ) if $args{'action'};
+ }
+}
+
+sub describe {
+ my ($table, $id) = @_;
+ return '' unless my $cb = $describe_cb{ $table };
+
+ my $row = load_record( $table, $id );
+ unless ( $row->{id} ) {
+ $table =~ s/s$//;
+ return "$table doesn't exist";
+ }
+ return $cb->( $row );
+}
+
+sub columns_eq_cond {
+ my ($la, $lt, $lc, $ra, $rt, $rc) = @_;
+ my $ltype = $TYPE{"$lt.$lc"} || 'number';
+ my $rtype = $TYPE{"$rt.$rc"} || 'number';
+ return "$la.$lc = $ra.$rc" if $db_type ne 'Pg' || $ltype eq $rtype;
+
+ if ( $rtype eq 'text' ) {
+ return "$ra.$rc LIKE CAST($la.$lc AS text)";
+ }
+ elsif ( $ltype eq 'text' ) {
+ return "$la.$lc LIKE CAST($ra.$rc AS text)";
+ }
+ else { die "don't know how to cast" }
+}
+
+sub check_uniqueness {
+ my $on = shift;
+ my %args = @_;
+
+ my @columns = @{ $args{'columns'} };
+
+ print "Checking uniqueness of ( ", join(', ', map "'$_'", @columns )," ) in table '$on'\n"
+ if $opt{'versbose'};
+
+ my ($scond, $tcond);
+ if ( $scond = $tcond = $args{'condition'} ) {
+ $scond =~ s/(\s|^)\./$1s./g;
+ $tcond =~ s/(\s|^)\./$1t./g;
+ }
+
+ my $query = "SELECT s.id, t.id, ". join(', ', map "s.$_", @columns)
+ ." FROM $on s LEFT JOIN $on t "
+ ." ON s.id != t.id AND ". join(' AND ', map "s.$_ = t.$_", @columns)
+ . ($tcond? " AND ( $tcond )": "")
+ ." WHERE t.id IS NOT NULL "
+ ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @columns);
+ $query .= " AND ( $scond )" if $scond;
+
+ my $sth = execute_query(
+ $query,
+ $args{'bind_values'}? (@{ $args{'bind_values'} }, @{ $args{'bind_values'} }): ()
+ );
+ while ( my ($sid, $tid, @set) = $sth->fetchrow_array ) {
+ print STDERR "Record #$tid in $on has the same set of values as $sid\n";
+ for ( my $i = 0; $i < @columns; $i++ ) {
+ print STDERR "\t$columns[$i] => '$set[$i]'\n";
+ }
+ }
+}
+
+sub load_record {
+ my ($table, $id) = @_;
+ my $sth = execute_query( "SELECT * FROM $table WHERE id = ?", $id );
+ return $sth->fetchrow_hashref('NAME_lc');
+}
+
+sub delete_record {
+ my ($table, $id) = (@_);
+ print "Deleting record #$id in $table\n" if $opt{'verbose'};
+ my $query = "DELETE FROM $table WHERE id = ?";
+ $redo_check{ $_ } = 1 foreach @{ $redo_on{'Delete'}{ $table } || [] };
+ return execute_query( $query, $id );
+}
+
+sub create_record {
+ print "Creating a record in $_[0]\n" if $opt{'verbose'};
+ $redo_check{ $_ } = 1 foreach @{ $redo_on{'Create'}{ $_[0] } || [] };
+ return $RT::Handle->Insert( @_ );
+}
+
+sub update_records {
+ my $table = shift;
+ my $where = shift;
+ my $what = shift;
+
+ my (@where_cols, @where_binds);
+ while ( my ($k, $v) = each %$where ) { push @where_cols, $k; push @where_binds, $v; }
+
+ my (@what_cols, @what_binds);
+ while ( my ($k, $v) = each %$what ) { push @what_cols, $k; push @what_binds, $v; }
+
+ print "Updating record(s) in $table\n" if $opt{'verbose'};
+ my $query = "UPDATE $table SET ". join(', ', map "$_ = ?", @what_cols)
+ ." WHERE ". join(' AND ', map "$_ = ?", @where_cols);
+ $redo_check{ $_ } = 1 foreach @{ $redo_on{'Update'}{ $table } || [] };
+ return execute_query( $query, @what_binds, @where_binds );
+}
+
+sub execute_query {
+ my ($query, @binds) = @_;
+
+ print "Executing query: $query\n\n" if $opt{'verbose'};
+
+ my $sth = $dbh->prepare( $query ) or die "couldn't prepare $query\n\tError: ". $dbh->errstr;
+ $sth->execute( @binds ) or die "couldn't execute $query\n\tError: ". $sth->errstr;
+ return $sth;
+}
+
+{ my %cached_answer;
+sub prompt {
+ my $action = shift;
+ my $msg = shift;
+ my $token = shift || join ':', caller;
+
+ return 0 unless $opt{'resolve'};
+ return 1 if $opt{'force'};
+
+ return $cached_answer{ $token } if exists $cached_answer{ $token };
+
+ print $msg, "\n";
+ print "$action ALL records with the same defect? [N]: ";
+ my $a = <STDIN>;
+ return $cached_answer{ $token } = 1 if $a =~ /^(y|yes)$/i;
+ return $cached_answer{ $token } = 0;
+} }
+
+{ my %cached_answer;
+sub prompt_action {
+ my $actions = shift;
+ my $msg = shift;
+ my $token = shift || join ':', caller;
+
+ return '' unless $opt{'resolve'};
+ return '' if $opt{'force'};
+ return $cached_answer{ $token } if exists $cached_answer{ $token };
+
+ print $msg, "\n";
+ print join( ' or ', @$actions ) ." ALL records with the same defect? [do nothing]: ";
+ my $a = <STDIN>;
+ chomp $a;
+ return $cached_answer{ $token } = '' unless $a;
+ foreach ( grep rindex(lc $_, lc $a, 0) == 0, @$actions ) {
+ return $cached_answer{ $token } = lc substr $a, 0, 1;
+ }
+ return $cached_answer{ $token } = '';
+} }
+
+{ my %cached_answer;
+sub prompt_integer {
+ my $action = shift;
+ my $msg = shift;
+ my $token = shift || join ':', caller;
+
+ return 0 unless $opt{'resolve'};
+ return 0 if $opt{'force'};
+
+ return $cached_answer{ $token } if exists $cached_answer{ $token };
+
+ print $msg, "\n";
+ print "$action ALL records with the same defect? [0]: ";
+ my $a = <STDIN>; chomp $a; $a = int($a);
+ return $cached_answer{ $token } = $a;
+} }
+
+1;
diff --git a/rt/sbin/rt-validator.in b/rt/sbin/rt-validator.in
new file mode 100644
index 0000000..ba2686e
--- /dev/null
+++ b/rt/sbin/rt-validator.in
@@ -0,0 +1,1118 @@
+#!@PERL@
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ unless ($bin_path) {
+ if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+ $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+ }
+ else {
+ require FindBin;
+ no warnings "once";
+ $bin_path = $FindBin::Bin;
+ }
+ }
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+use Getopt::Long;
+my %opt = ();
+GetOptions(
+ \%opt,
+ 'check|c',
+ 'resolve',
+ 'force',
+ 'verbose|v',
+);
+
+usage() unless $opt{'check'};
+usage_warning() if $opt{'resolve'} && !$opt{'force'};
+
+sub usage {
+ print STDERR <<END;
+Usage: $0 options
+
+Options:
+
+ $0 --check
+ $0 --check --verbose
+ $0 --check --verbose --resolve
+ $0 --check --verbose --resolve --force
+
+--check - is mandatory argument, you can use -c, as well.
+--verbose - print additional info to STDOUT
+--resolve - enable resolver that can delete or create some records
+--force - resolve without asking questions
+
+Description:
+
+This script checks integrity of records in RT's DB. May delete some invalid
+records or ressurect accidentally deleted.
+
+END
+ exit 1;
+}
+
+sub usage_warning {
+ print <<END;
+This utility can fix some issues with DB by creating or updating. In some
+cases there is no enough data to resurect a missing record, but records which
+refers to a missing can be deleted. It's up to you to decide what to do.
+
+In any case it's highly recommended to have a backup before resolving anything.
+
+Press enter to continue.
+END
+ <>;
+}
+
+use RT;
+RT::LoadConfig();
+RT::Init();
+
+my $dbh = $RT::Handle->dbh;
+my $db_type = RT->Config->Get('DatabaseType');
+
+my %TYPE = (
+ 'Transactions.Field' => 'text',
+ 'Transactions.OldValue' => 'text',
+ 'Transactions.NewValue' => 'text',
+);
+
+my @models = qw(
+ ACE
+ Attachment
+ Attribute
+ CachedGroupMember
+ CustomField
+ CustomFieldValue
+ GroupMember
+ Group
+ Link
+ ObjectCustomField
+ ObjectCustomFieldValue
+ Principal
+ Queue
+ ScripAction
+ ScripCondition
+ Scrip
+ Template
+ Ticket
+ Transaction
+ User
+);
+
+my %redo_on;
+$redo_on{'Delete'} = {
+ ACL => [],
+
+ Attributes => [],
+
+ Links => [],
+
+ CustomFields => [],
+ CustomFieldValues => [],
+ ObjectCustomFields => [],
+ ObjectCustomFieldValues => [],
+
+ Queues => [],
+
+ Scrips => [],
+ ScripActions => [],
+ ScripConditions => [],
+ Templates => [],
+
+ Tickets => [ 'Tickets -> other', 'Tickets <-> Role Groups' ],
+ Transactions => [ 'Attachments -> other' ],
+
+ Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ],
+ Users => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'Principals -> Users' ],
+ Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM', 'Principals -> Groups' ],
+
+ GroupMembers => [ 'CGM vs. GM' ],
+ CachedGroupMembers => [ 'CGM vs. GM' ],
+};
+$redo_on{'Create'} = {
+ Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ],
+ Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM' ],
+ GroupMembers => [ 'CGM vs. GM' ],
+ CachedGroupMembers => [ 'CGM vs. GM' ],
+};
+
+my %describe_cb;
+%describe_cb = (
+ Attachments => sub {
+ my $row = shift;
+ my $txn_id = $row->{transactionid};
+ my $res = 'Attachment #'. $row->{id} .' -> Txn #'. $txn_id;
+ return $res .', '. describe( 'Transactions', $txn_id );
+ },
+ Transactions => sub {
+ my $row = shift;
+ return 'Transaction #'. $row->{id} .' -> object '. $row->{objecttype} .' #'. $row->{objectid};
+ },
+);
+
+{ my %cache = ();
+sub m2t($) {
+ my $model = shift;
+ return $cache{$model} if $cache{$model};
+ my $class = "RT::$model";
+ my $object = $class->new( $RT::SystemUser );
+ return $cache{$model} = $object->Table;
+} }
+
+my (@do_check, %redo_check);
+
+my @CHECKS;
+foreach my $table ( qw(Users Groups) ) {
+ push @CHECKS, "$table -> Principals" => sub {
+ my $msg = "A record in $table refers not existing record in Principals."
+ ." The script can either create missing record in Principals"
+ ." or delete record in $table.";
+ my ($type) = ($table =~ /^(.*)s$/);
+ check_integrity(
+ $table, 'id' => 'Principals', 'id',
+ join_condition => 't.PrincipalType = ?',
+ bind_values => [ $type ],
+ action => sub {
+ my $id = shift;
+ return unless my $a = prompt_action( ['Delete', 'create'], $msg );
+
+ if ( $a eq 'd' ) {
+ delete_record( $table, $id );
+ }
+ elsif ( $a eq 'c' ) {
+ my $principal_id = create_record( 'Principals',
+ id => $id, PrincipalType => $type, ObjectId => $id, Disabled => 0
+ );
+ }
+ else {
+ die "Unknown action '$a'";
+ }
+ },
+ );
+ };
+
+ push @CHECKS, "Principals -> $table" => sub {
+ my $msg = "A record in Principals refers not existing record in $table."
+ ." In some cases it's possible to resurrect manually such records,"
+ ." but this utility can only delete";
+
+ check_integrity(
+ 'Principals', 'id' => $table, 'id',
+ condition => 's.PrincipalType = ?',
+ bind_values => [ $table =~ /^(.*)s$/ ],
+ action => sub {
+ my $id = shift;
+ return unless prompt( 'Delete', $msg );
+
+ delete_record( 'Principals', $id );
+ },
+ );
+ };
+}
+
+push @CHECKS, 'User <-> ACL equivalence group' => sub {
+ # from user to group
+ check_integrity(
+ 'Users', 'id' => 'Groups', 'Instance',
+ join_condition => 't.Domain = ? AND t.Type = ?',
+ bind_values => [ 'ACLEquivalence', 'UserEquiv' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Create', "Found an user that has no ACL equivalence group."
+ );
+
+ my $gid = create_record( 'Groups',
+ Domain => 'ACLEquivalence', Type => 'UserEquiv', Instance => $id,
+ );
+ },
+ );
+ # from group to user
+ check_integrity(
+ 'Groups', 'Instance' => 'Users', 'id',
+ condition => 's.Domain = ? AND s.Type = ?',
+ bind_values => [ 'ACLEquivalence', 'UserEquiv' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found an user ACL equivalence group, but there is no user."
+ );
+
+ delete_record( 'Groups', $id );
+ },
+ );
+ # one ACL equiv group for each user
+ check_uniqueness(
+ 'Groups',
+ columns => ['Instance'],
+ condition => '.Domain = ? AND .Type = ?',
+ bind_values => [ 'ACLEquivalence', 'UserEquiv' ],
+ );
+};
+
+# check integrity of Queue role groups
+push @CHECKS, 'Queues <-> Role Groups' => sub {
+ # XXX: we check only that there is at least one group for a queue
+ # from queue to group
+ check_integrity(
+ 'Queues', 'id' => 'Groups', 'Instance',
+ join_condition => 't.Domain = ?',
+ bind_values => [ 'RT::Queue-Role' ],
+ );
+ # from group to queue
+ check_integrity(
+ 'Groups', 'Instance' => 'Queues', 'id',
+ condition => 's.Domain = ?',
+ bind_values => [ 'RT::Queue-Role' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found role group of not existant queue."
+ );
+
+ delete_record( 'Groups', $id );
+ },
+ );
+};
+
+# check integrity of Ticket role groups
+push @CHECKS, 'Tickets <-> Role Groups' => sub {
+ # XXX: we check only that there is at least one group for a queue
+ # from queue to group
+ check_integrity(
+ 'Tickets', 'id' => 'Groups', 'Instance',
+ join_condition => 't.Domain = ?',
+ bind_values => [ 'RT::Ticket-Role' ],
+ );
+ # from group to ticket
+ check_integrity(
+ 'Groups', 'Instance' => 'Tickets', 'id',
+ condition => 's.Domain = ?',
+ bind_values => [ 'RT::Ticket-Role' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a role group of not existant ticket."
+ );
+
+ delete_record( 'Groups', $id );
+ },
+ );
+};
+
+# additional CHECKS on groups
+push @CHECKS, 'Role Groups (Instance, Type) uniqueness' => sub {
+ # Check that Domain, Instance and Type are unique
+ check_uniqueness(
+ 'Groups',
+ columns => ['Domain', 'Instance', 'Type'],
+ condition => '.Domain LIKE ?',
+ bind_values => [ '%-Role' ],
+ );
+};
+
+
+push @CHECKS, 'GMs -> Groups, Members' => sub {
+ my $msg = "A record in GroupMembers references an object that doesn't exist."
+ ." May be you deleted a group or principal directly from DB?"
+ ." Usually it's ok to delete such records.";
+ check_integrity(
+ 'GroupMembers', 'GroupId' => 'Groups', 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt( 'Delete', $msg );
+
+ delete_record( 'GroupMembers', $id );
+ },
+ );
+ check_integrity(
+ 'GroupMembers', 'MemberId' => 'Principals', 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt( 'Delete', $msg );
+
+ delete_record( 'GroupMembers', $id );
+ },
+ );
+};
+
+# CGM and GM
+push @CHECKS, 'CGM vs. GM' => sub {
+ # all GM record should be duplicated in CGM
+ check_integrity(
+ GroupMembers => ['GroupId', 'MemberId'],
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Create',
+ "Found a record in GroupMembers that has no direct duplicate in CachedGroupMembers table."
+ );
+
+ my $gm = RT::GroupMember->new( $RT::SystemUser );
+ $gm->Load( $id );
+ die "Couldn't load GM record #$id" unless $gm->id;
+ my $cgm = create_record( 'CachedGroupMembers',
+ GroupId => $gm->GroupId, MemberId => $gm->MemberId,
+ ImmediateParentId => $gm->GroupId, Via => undef,
+ Disabled => 0, # XXX: we should check integrity of Disabled field
+ );
+ update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } );
+ },
+ );
+ # all first level CGM records should have a GM record
+ check_integrity(
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ GroupMembers => ['GroupId', 'MemberId'],
+ condition => 's.ImmediateParentId = s.GroupId AND s.Via = s.id AND s.GroupId != s.MemberId',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers for a (Group, Member) pair"
+ ." that doesn't exist in GroupMembers table."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+ # each group should have a CGM record where MemberId == GroupId
+ check_integrity(
+ Groups => ['id', 'id'],
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Create',
+ "Found a record in Groups that has no direct"
+ ." duplicate in CachedGroupMembers table."
+ );
+
+ my $g = RT::Group->new( $RT::SystemUser );
+ $g->Load( $id );
+ die "Couldn't load group #$id" unless $g->id;
+ die "Loaded group by $id has id ". $g->id unless $g->id == $id;
+ my $cgm = create_record( 'CachedGroupMembers',
+ GroupId => $id, MemberId => $id,
+ ImmediateParentId => $id, Via => undef,
+ Disabled => $g->Disabled,
+ );
+ update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } );
+ },
+ );
+
+ # and back, each record in CGM with MemberId == GroupId without exceptions
+ # should reference a group
+ check_integrity(
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ Groups => ['id', 'id'],
+ condition => "s.GroupId = s.MemberId",
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers for a group that doesn't exist."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+ # Via
+ check_integrity(
+ CachedGroupMembers => 'Via',
+ CachedGroupMembers => 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers with Via referencing not existing record."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+
+ # for every CGM where ImmediateParentId != GroupId there should be
+ # matching parent record (first level)
+ check_integrity(
+ CachedGroupMembers => ['ImmediateParentId', 'MemberId'],
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ join_condition => 't.Via = t.id',
+ condition => 's.ImmediateParentId != s.GroupId',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers that referencing not existant record in CachedGroupMembers table."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+
+ # for every CGM where ImmediateParentId != GroupId there should be
+ # matching "grand" parent record
+ check_integrity(
+ CachedGroupMembers => ['GroupId', 'ImmediateParentId', 'Via'],
+ CachedGroupMembers => ['GroupId', 'MemberId', 'id'],
+ condition => 's.ImmediateParentId != s.GroupId',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a record in CachedGroupMembers that referencing not existant record in CachedGroupMembers table."
+ );
+
+ delete_record( 'CachedGroupMembers', $id );
+ },
+ );
+
+ # CHECK recursive records:
+ # if we have CGM1 (G1,M1,V1,IP1) then for every GM2(G2, M2), where G2 == M1,
+ # we should have CGM3 where G3 = G1, M3 = M2, V3 = ID1, IP3 = M1
+ {
+ my $query = <<END;
+SELECT cgm1.GroupId, gm2.MemberId, cgm1.id AS Via,
+ cgm1.MemberId AS ImmediateParentId, cgm1.Disabled
+FROM
+ CachedGroupMembers cgm1
+ CROSS JOIN GroupMembers gm2
+ LEFT JOIN CachedGroupMembers cgm3 ON (
+ cgm3.GroupId = cgm1.GroupId
+ AND cgm3.MemberId = gm2.MemberId
+ AND cgm3.Via = cgm1.id
+ AND cgm3.ImmediateParentId = cgm1.MemberId )
+WHERE cgm1.GroupId != cgm1.MemberId
+AND gm2.GroupId = cgm1.MemberId
+AND cgm3.id IS NULL
+END
+
+ my $action = sub {
+ my %props = @_;
+ return unless prompt(
+ 'Create',
+ "Found records in CachedGroupMembers table without recursive duplicates."
+ );
+ my $cgm = create_record( 'CachedGroupMembers', %props );
+ };
+
+ my $sth = execute_query( $query );
+ while ( my ($g, $m, $via, $ip, $dis) = $sth->fetchrow_array ) {
+ print STDERR "Principal #$m is member of #$ip when #$ip is member of #$g,";
+ print STDERR " but there is no cached GM record that $m is member of #$g.\n";
+ $action->(
+ GroupId => $g, MemberId => $m, Via => $via,
+ ImmediateParentId => $ip, Disabled => $dis,
+ );
+ }
+ }
+};
+
+# Tickets
+push @CHECKS, 'Tickets -> other' => sub {
+ check_integrity(
+ 'Tickets', 'EffectiveId' => 'Tickets', 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete',
+ "Found a ticket that's been merged into a ticket that don't exist anymore."
+ );
+
+ delete_record( 'Tickets', $id );
+ },
+ );
+ check_integrity(
+ 'Tickets', 'Queue' => 'Queues', 'id',
+ );
+ check_integrity(
+ 'Tickets', 'Owner' => 'Users', 'id',
+ );
+ # XXX: check that owner is only member of owner role group
+};
+
+
+push @CHECKS, 'Transactions -> other' => sub {
+ foreach my $model ( @models ) {
+ check_integrity(
+ 'Transactions', 'ObjectId' => m2t($model), 'id',
+ condition => 's.ObjectType = ?',
+ bind_values => [ "RT::$model" ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction without object."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ }
+ # type = CustomField
+ check_integrity(
+ 'Transactions', 'Field' => 'CustomFields', 'id',
+ condition => 's.Type = ?',
+ bind_values => [ 'CustomField' ],
+ );
+ # type = Take, Untake, Force, Steal or Give
+ check_integrity(
+ 'Transactions', 'OldValue' => 'Users', 'id',
+ condition => 's.Type IN (?, ?, ?, ?, ?)',
+ bind_values => [ qw(Take Untake Force Steal Give) ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction regarding changes of Owner,"
+ ." but User with id stored in OldValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Users', 'id',
+ condition => 's.Type IN (?, ?, ?, ?, ?)',
+ bind_values => [ qw(Take Untake Force Steal Give) ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction regarding changes of Owner,"
+ ." but User with id stored in NewValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ # type = DelWatcher
+ check_integrity(
+ 'Transactions', 'OldValue' => 'Principals', 'id',
+ condition => 's.Type = ?',
+ bind_values => [ 'DelWatcher' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing watchers change,"
+ ." but User with id stored in OldValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ # type = AddWatcher
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Principals', 'id',
+ condition => 's.Type = ?',
+ bind_values => [ 'AddWatcher' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing watchers change,"
+ ." but User with id stored in NewValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+
+# XXX: Links need more love, uri is stored instead of id
+# # type = DeleteLink
+# check_integrity(
+# 'Transactions', 'OldValue' => 'Links', 'id',
+# condition => 's.Type = ?',
+# bind_values => [ 'DeleteLink' ],
+# );
+# # type = AddLink
+# check_integrity(
+# 'Transactions', 'NewValue' => 'Links', 'id',
+# condition => 's.Type = ?',
+# bind_values => [ 'AddLink' ],
+# );
+
+ # type = Set, Field = Queue
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Queues', 'id',
+ condition => 's.Type = ? AND s.Field = ?',
+ bind_values => [ 'Set', 'Queue' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing queue change,"
+ ." but Queue with id stored in NewValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ check_integrity(
+ 'Transactions', 'OldValue' => 'Queues', 'id',
+ condition => 's.Type = ? AND s.Field = ?',
+ bind_values => [ 'Set', 'Queue' ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction describing queue change,"
+ ." but Queue with id stored in OldValue column doesn't exist anymore."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
+ # Reminders
+ check_integrity(
+ 'Transactions', 'NewValue' => 'Tickets', 'id',
+ join_condition => 't.Type = ?',
+ condition => 's.Type IN (?, ?, ?)',
+ bind_values => [ 'reminder', 'AddReminder', 'OpenReminder', 'ResolveReminder' ],
+ );
+};
+
+# Attachments
+push @CHECKS, 'Attachments -> other' => sub {
+ check_integrity(
+ Attachments => 'TransactionId', Transactions => 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found an attachment without a transaction."
+ );
+ delete_record( 'Attachments', $id );
+ },
+ );
+ check_integrity(
+ Attachments => 'Parent', Attachments => 'id',
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found an sub-attachment without its parent attachment."
+ );
+ delete_record( 'Attachments', $id );
+ },
+ );
+ check_integrity(
+ Attachments => 'Parent',
+ Attachments => 'id',
+ join_condition => 's.TransactionId = t.TransactionId',
+ );
+};
+
+push @CHECKS, 'CustomFields and friends' => sub {
+ #XXX: ObjectCustomFields needs more love
+ check_integrity(
+ 'CustomFieldValues', 'CustomField' => 'CustomFields', 'id',
+ );
+ check_integrity(
+ 'ObjectCustomFieldValues', 'CustomField' => 'CustomFields', 'id',
+ );
+ foreach my $model ( @models ) {
+ check_integrity(
+ 'ObjectCustomFieldValues', 'ObjectId' => m2t($model), 'id',
+ condition => 's.ObjectType = ?',
+ bind_values => [ "RT::$model" ],
+ );
+ }
+};
+
+push @CHECKS, Templates => sub {
+ check_integrity(
+ 'Templates', 'Queue' => 'Queues', 'id',
+ );
+};
+
+push @CHECKS, Scrips => sub {
+ check_integrity(
+ 'Scrips', 'Queue' => 'Queues', 'id',
+ );
+ check_integrity(
+ 'Scrips', 'ScripCondition' => 'ScripConditions', 'id',
+ );
+ check_integrity(
+ 'Scrips', 'ScripAction' => 'ScripActions', 'id',
+ );
+ check_integrity(
+ 'Scrips', 'Template' => 'Templates', 'id',
+ );
+};
+
+push @CHECKS, Attributes => sub {
+ foreach my $model ( @models ) {
+ check_integrity(
+ 'Attributes', 'ObjectId' => m2t($model), 'id',
+ condition => 's.ObjectType = ?',
+ bind_values => [ "RT::$model" ],
+ );
+ }
+};
+
+# Fix situations when Creator or LastUpdatedBy references ACL equivalence
+# group of a user instead of user
+push @CHECKS, 'FIX: LastUpdatedBy and Creator' => sub {
+ my %fix = ();
+ foreach my $model ( @models ) {
+ my $class = "RT::$model";
+ my $object = $class->new( $RT::SystemUser );
+ foreach my $column ( qw(LastUpdatedBy Creator) ) {
+ next unless $object->_Accessible( $column, 'auto' );
+
+ my $table = m2t($model);
+ my $query = <<END;
+SELECT m.id, g.id, g.Instance
+FROM
+ Groups g JOIN $table m ON g.id = m.$column
+WHERE
+ g.Domain = ?
+ AND g.Type = ?
+END
+ my $action = sub {
+ my ($gid, $uid) = @_;
+ return unless prompt(
+ 'Update',
+ "Looks like there were a bug in old versions of RT back in 2006\n"
+ ."that has been fixed. If other checks are ok then it's ok to update\n"
+ ."these records to point them to users instead of groups"
+ );
+ $fix{ $table }{ $column }{ $gid } = $uid;
+ };
+
+ my $sth = execute_query( $query, 'ACLEquivalence', 'UserEquiv' );
+ while ( my ($rid, $gid, $uid) = $sth->fetchrow_array ) {
+ print STDERR "Record #$rid in $table refers to ACL equivalence group #$gid of user #$uid";
+ print STDERR " when must reference user.\n";
+ $action->( $gid, $uid );
+ if ( keys( %fix ) > 1000 ) {
+ $sth->finish;
+ last;
+ }
+ }
+ }
+ }
+
+ if ( keys %fix ) {
+ foreach my $table ( keys %fix ) {
+ foreach my $column ( keys %{ $fix{ $table } } ) {
+ my $query = "UPDATE $table SET $column = ? WHERE $column = ?";
+ while ( my ($gid, $uid) = each %{ $fix{ $table }{ $column } } ) {
+ update_records( $table, { $column => $gid }, { $column => $uid } );
+ }
+ }
+ }
+ $redo_check{'FIX: LastUpdatedBy and Creator'} = 1;
+ }
+};
+
+push @CHECKS, 'LastUpdatedBy and Creator' => sub {
+ foreach my $model ( @models ) {
+ my $class = "RT::$model";
+ my $object = $class->new( $RT::SystemUser );
+ my $table = $object->Table;
+ foreach my $column ( qw(LastUpdatedBy Creator) ) {
+ next unless $object->_Accessible( $column, 'auto' );
+ check_integrity(
+ $table, $column => 'Users', 'id',
+ action => sub {
+ my ($id, %prop) = @_;
+ return unless my $replace_with = prompt_integer(
+ 'Replace',
+ "Column $column should point to a user, but there is record #$id in table $table\n"
+ ."where it's not true. It's ok to replace these wrong references with id of any user.\n"
+ ."Note that id you enter is not checked. You can peak any user from your DB, but it's\n"
+ ."may be better to create a special user for this, for example 'user_that_has_been_deleted'\n"
+ ."or something like that.",
+ "$table.$column -> user #$prop{$column}"
+ );
+ update_records( $table, { id => $id, $column => $prop{$column} }, { $column => $replace_with } );
+ },
+ );
+ }
+ }
+};
+my %CHECKS = @CHECKS;
+
+@do_check = do { my $i = 1; grep $i++%2, @CHECKS };
+
+while ( my $check = shift @do_check ) {
+ $CHECKS{ $check }->();
+
+ foreach my $redo ( keys %redo_check ) {
+ die "check $redo doesn't exist" unless $CHECKS{ $redo };
+ delete $redo_check{ $redo };
+ next if grep $_ eq $redo, @do_check; # don't do twice
+ push @do_check, $redo;
+ }
+}
+
+sub check_integrity {
+ my ($stable, @scols) = (shift, shift);
+ my ($ttable, @tcols) = (shift, shift);
+ my %args = @_;
+
+ @scols = @{ $scols[0] } if ref $scols[0];
+ @tcols = @{ $tcols[0] } if ref $tcols[0];
+
+ print "Checking integrity of $stable.{". join(', ', @scols) ."} => $ttable.{". join(', ', @tcols) ."}\n"
+ if $opt{'verbose'};
+
+ my $query = "SELECT s.id, ". join(', ', map "s.$_", @scols)
+ ." FROM $stable s LEFT JOIN $ttable t"
+ ." ON (". join(
+ ' AND ', map columns_eq_cond('s', $stable, $scols[$_] => 't', $ttable, $tcols[$_]), (0..(@scols-1))
+ ) .")"
+ . ($args{'join_condition'}? " AND ( $args{'join_condition'} )": "")
+ ." WHERE t.id IS NULL"
+ ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @scols);
+
+ $query .= " AND ( $args{'condition'} )" if $args{'condition'};
+
+ my @binds = @{ $args{'bind_values'} || [] };
+ if ( $tcols[0] eq 'id' && @tcols == 1 ) {
+ my $type = $TYPE{"$stable.$scols[0]"} || 'number';
+ if ( $type eq 'number' ) {
+ $query .= " AND s.$scols[0] != ?"
+ }
+ elsif ( $type eq 'text' ) {
+ $query .= " AND s.$scols[0] NOT LIKE ?"
+ }
+ push @binds, 0;
+ }
+
+ my $sth = execute_query( $query, @binds );
+ while ( my ($sid, @set) = $sth->fetchrow_array ) {
+ print STDERR "Record #$sid in $stable references not existent record in $ttable\n";
+ for ( my $i = 0; $i < @scols; $i++ ) {
+ print STDERR "\t$scols[$i] => '$set[$i]' => $tcols[$i]\n";
+ }
+ print STDERR "\t". describe( $stable, $sid ) ."\n";
+ $args{'action'}->( $sid, map { $scols[$_] => $set[$_] } (0 .. (@scols-1)) ) if $args{'action'};
+ }
+}
+
+sub describe {
+ my ($table, $id) = @_;
+ return '' unless my $cb = $describe_cb{ $table };
+
+ my $row = load_record( $table, $id );
+ unless ( $row->{id} ) {
+ $table =~ s/s$//;
+ return "$table doesn't exist";
+ }
+ return $cb->( $row );
+}
+
+sub columns_eq_cond {
+ my ($la, $lt, $lc, $ra, $rt, $rc) = @_;
+ my $ltype = $TYPE{"$lt.$lc"} || 'number';
+ my $rtype = $TYPE{"$rt.$rc"} || 'number';
+ return "$la.$lc = $ra.$rc" if $db_type ne 'Pg' || $ltype eq $rtype;
+
+ if ( $rtype eq 'text' ) {
+ return "$ra.$rc LIKE CAST($la.$lc AS text)";
+ }
+ elsif ( $ltype eq 'text' ) {
+ return "$la.$lc LIKE CAST($ra.$rc AS text)";
+ }
+ else { die "don't know how to cast" }
+}
+
+sub check_uniqueness {
+ my $on = shift;
+ my %args = @_;
+
+ my @columns = @{ $args{'columns'} };
+
+ print "Checking uniqueness of ( ", join(', ', map "'$_'", @columns )," ) in table '$on'\n"
+ if $opt{'versbose'};
+
+ my ($scond, $tcond);
+ if ( $scond = $tcond = $args{'condition'} ) {
+ $scond =~ s/(\s|^)\./$1s./g;
+ $tcond =~ s/(\s|^)\./$1t./g;
+ }
+
+ my $query = "SELECT s.id, t.id, ". join(', ', map "s.$_", @columns)
+ ." FROM $on s LEFT JOIN $on t "
+ ." ON s.id != t.id AND ". join(' AND ', map "s.$_ = t.$_", @columns)
+ . ($tcond? " AND ( $tcond )": "")
+ ." WHERE t.id IS NOT NULL "
+ ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @columns);
+ $query .= " AND ( $scond )" if $scond;
+
+ my $sth = execute_query(
+ $query,
+ $args{'bind_values'}? (@{ $args{'bind_values'} }, @{ $args{'bind_values'} }): ()
+ );
+ while ( my ($sid, $tid, @set) = $sth->fetchrow_array ) {
+ print STDERR "Record #$tid in $on has the same set of values as $sid\n";
+ for ( my $i = 0; $i < @columns; $i++ ) {
+ print STDERR "\t$columns[$i] => '$set[$i]'\n";
+ }
+ }
+}
+
+sub load_record {
+ my ($table, $id) = @_;
+ my $sth = execute_query( "SELECT * FROM $table WHERE id = ?", $id );
+ return $sth->fetchrow_hashref('NAME_lc');
+}
+
+sub delete_record {
+ my ($table, $id) = (@_);
+ print "Deleting record #$id in $table\n" if $opt{'verbose'};
+ my $query = "DELETE FROM $table WHERE id = ?";
+ $redo_check{ $_ } = 1 foreach @{ $redo_on{'Delete'}{ $table } || [] };
+ return execute_query( $query, $id );
+}
+
+sub create_record {
+ print "Creating a record in $_[0]\n" if $opt{'verbose'};
+ $redo_check{ $_ } = 1 foreach @{ $redo_on{'Create'}{ $_[0] } || [] };
+ return $RT::Handle->Insert( @_ );
+}
+
+sub update_records {
+ my $table = shift;
+ my $where = shift;
+ my $what = shift;
+
+ my (@where_cols, @where_binds);
+ while ( my ($k, $v) = each %$where ) { push @where_cols, $k; push @where_binds, $v; }
+
+ my (@what_cols, @what_binds);
+ while ( my ($k, $v) = each %$what ) { push @what_cols, $k; push @what_binds, $v; }
+
+ print "Updating record(s) in $table\n" if $opt{'verbose'};
+ my $query = "UPDATE $table SET ". join(', ', map "$_ = ?", @what_cols)
+ ." WHERE ". join(' AND ', map "$_ = ?", @where_cols);
+ $redo_check{ $_ } = 1 foreach @{ $redo_on{'Update'}{ $table } || [] };
+ return execute_query( $query, @what_binds, @where_binds );
+}
+
+sub execute_query {
+ my ($query, @binds) = @_;
+
+ print "Executing query: $query\n\n" if $opt{'verbose'};
+
+ my $sth = $dbh->prepare( $query ) or die "couldn't prepare $query\n\tError: ". $dbh->errstr;
+ $sth->execute( @binds ) or die "couldn't execute $query\n\tError: ". $sth->errstr;
+ return $sth;
+}
+
+{ my %cached_answer;
+sub prompt {
+ my $action = shift;
+ my $msg = shift;
+ my $token = shift || join ':', caller;
+
+ return 0 unless $opt{'resolve'};
+ return 1 if $opt{'force'};
+
+ return $cached_answer{ $token } if exists $cached_answer{ $token };
+
+ print $msg, "\n";
+ print "$action ALL records with the same defect? [N]: ";
+ my $a = <STDIN>;
+ return $cached_answer{ $token } = 1 if $a =~ /^(y|yes)$/i;
+ return $cached_answer{ $token } = 0;
+} }
+
+{ my %cached_answer;
+sub prompt_action {
+ my $actions = shift;
+ my $msg = shift;
+ my $token = shift || join ':', caller;
+
+ return '' unless $opt{'resolve'};
+ return '' if $opt{'force'};
+ return $cached_answer{ $token } if exists $cached_answer{ $token };
+
+ print $msg, "\n";
+ print join( ' or ', @$actions ) ." ALL records with the same defect? [do nothing]: ";
+ my $a = <STDIN>;
+ chomp $a;
+ return $cached_answer{ $token } = '' unless $a;
+ foreach ( grep rindex(lc $_, lc $a, 0) == 0, @$actions ) {
+ return $cached_answer{ $token } = lc substr $a, 0, 1;
+ }
+ return $cached_answer{ $token } = '';
+} }
+
+{ my %cached_answer;
+sub prompt_integer {
+ my $action = shift;
+ my $msg = shift;
+ my $token = shift || join ':', caller;
+
+ return 0 unless $opt{'resolve'};
+ return 0 if $opt{'force'};
+
+ return $cached_answer{ $token } if exists $cached_answer{ $token };
+
+ print $msg, "\n";
+ print "$action ALL records with the same defect? [0]: ";
+ my $a = <STDIN>; chomp $a; $a = int($a);
+ return $cached_answer{ $token } = $a;
+} }
+
+1;
diff --git a/rt/sbin/tweak-template-locstring b/rt/sbin/tweak-template-locstring
new file mode 100644
index 0000000..b63a5bd
--- /dev/null
+++ b/rt/sbin/tweak-template-locstring
@@ -0,0 +1,55 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+# 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;
+
+
+1;
diff --git a/rt/share/html/Admin/CustomFields/GroupRights.html b/rt/share/html/Admin/CustomFields/GroupRights.html
new file mode 100644
index 0000000..4171f04
--- /dev/null
+++ b/rt/share/html/Admin/CustomFields/GroupRights.html
@@ -0,0 +1,114 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/CustomFieldTabs,
+ id => $id,
+ current_tab => "Admin/CustomFields/GroupRights.html?id=".$id,
+ Title => $title
+&>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="GroupRights.html">
+ <input type="hidden" class="hidden" name="id" value="<% $CustomFieldObj->id %>" />
+
+
+<h1><&|/l&>System groups</&></h1>
+<table>
+% my $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToSystemInternalGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% loc($Group->Type) %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object => $CustomFieldObj &>
+ </td>
+ </tr>
+% }
+</table>
+<h1><&|/l&>User defined groups</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToUserDefinedGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% $Group->Name %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object => $CustomFieldObj &>
+ </td>
+ </tr>
+% }
+</table>
+
+ <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &>
+
+ </form>
+
+<%INIT>
+
+if (!defined $id) {
+ $m->comp("/Elements/Error", Why => loc("No CustomField defined"));
+}
+
+my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'});
+$CustomFieldObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load CustomField [_1]",$id));
+
+my @results = ProcessACLChanges( \%ARGS );
+
+my $title = loc('Modify group rights for custom field [_1]', $CustomFieldObj->Name);
+
+</%INIT>
+
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/CustomFields/Modify.html b/rt/share/html/Admin/CustomFields/Modify.html
new file mode 100644
index 0000000..f75607a
--- /dev/null
+++ b/rt/share/html/Admin/CustomFields/Modify.html
@@ -0,0 +1,249 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/CustomFieldTabs,
+ id => $CustomFieldObj->Id ,
+ current_tab => $current_tab,
+ Title => $title &>
+<& /Elements/ListActions, actions => \@results &>
+
+
+<form method="post" action="Modify.html" name="ModifyCustomField">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+
+<table>
+
+<tr><td class="label"><&|/l&>Name</&></td>
+<td><input name="Name" value="<% $CustomFieldObj->Name || '' %>" size="20" /></td></tr>
+
+<tr><td class="label"><&|/l&>Description</&></td>
+<td><input name="Description" value="<% $CustomFieldObj->Description || '' %>" size="80" /></td></tr>
+
+<tr><td class="label"><&|/l&>Type</&></td>
+<td><& /Admin/Elements/SelectCustomFieldType,
+ Name => "TypeComposite",
+ Default => $CustomFieldObj->TypeComposite, &>
+</td></tr>
+
+% if ( $CustomFieldObj->Id and $CustomFieldObj->IsSelectionType and RT->Config->Get('CustomFieldValuesSources') and ( scalar(@{RT->Config->Get('CustomFieldValuesSources')}) > 0 ) ) {
+<tr><td class="label"><&|/l&>Field values source:</&></td><td>
+<& /Admin/Elements/EditCustomFieldValuesSource, CustomField => $CustomFieldObj &>
+</td></tr>
+% }
+
+<tr><td class="label"><&|/l&>Applies to</&></td>
+<td><& /Admin/Elements/SelectCustomFieldLookupType,
+ Name => "LookupType",
+ Default => $CustomFieldObj->LookupType, &>
+</td></tr>
+
+<tr><td class="label"><&|/l&>Validation</&></td>
+<td><& /Widgets/ComboBox,
+ Name => 'Pattern',
+ Default => $CustomFieldObj->Pattern,
+ Size => 20,
+ Values => \@CFvalidations,
+&></td></tr>
+
+<tr><td class="label"><&|/l&>Link values to</&></td><td>
+<input size="60" name="LinkValueTo" value="<% $CustomFieldObj->LinkValueTo || '' %>" />
+<div class="hints">
+<&|/l&>RT can make this custom field's values into hyperlinks to another service.</&>
+<&|/l&>Fill in this field with a URL.</&>
+<&|/l&>RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively</&>
+</div></td></tr>
+
+<tr><td class="label"><&|/l&>Include page</&></td><td>
+<input size="60" name="IncludeContentForValue" value="<% $CustomFieldObj->IncludeContentForValue || '' %>" />
+<div class="hints">
+<&|/l&>RT can include content from another web service when showing this custom field.</&>
+<&|/l&>Fill in this field with a URL.</&>
+<&|/l&>RT will replace <tt>__id__</tt> and <tt>__CustomField__</tt> with the record id and custom field value, respectively</&>
+<i><&|/l&>Some browsers may only load content from the same domain as your RT server.</&></i>
+</div></td></tr>
+
+% if ( $CustomFieldObj->Id && $CustomFieldObj->IsSelectionType && !$CustomFieldObj->IsExternalValues ) {
+<tr><td class="label"><&|/l&>Categories are based on</&></td><td>
+<& /Admin/Elements/SelectCustomField,
+ Name => "BasedOn",
+ LookupType => $CustomFieldObj->LookupType,
+ Default => $CustomFieldObj->BasedOnObj,
+ Not => $CustomFieldObj->id,
+&>
+</td></tr>
+% }
+
+<tr><td class="label">&nbsp;</td><td>
+<input type="hidden" class="hidden" name="SetEnabled" value="1" />
+<input type="checkbox" class="checkbox" name="Enabled" value="1" <% $EnabledChecked |n%> />
+<&|/l&>Enabled (Unchecking this box disables this custom field)</&>
+</td></tr>
+
+</table>
+
+% if ( $CustomFieldObj->Id && $CustomFieldObj->IsSelectionType && !$CustomFieldObj->IsExternalValues ) {
+<h2><&|/l&>Values</&></h2>
+<div>
+<& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &>
+<& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &>
+</div>
+% }
+
+<& /Elements/Submit, Name => 'Update', Label => $id eq 'new'? loc('Create'): loc('Save Changes') &>
+
+</form>
+<%INIT>
+my ($title, @results, $Disabled);
+
+my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} );
+my $current_tab = 'Admin/CustomFields/Modify.html';
+
+unless ( $id ) {
+ $title = loc("Create a CustomField");
+ $id = 'new';
+ $current_tab .= '?Create=1';
+}
+else {
+ if ( $id eq 'new' ) {
+ my ( $val, $msg ) = $CustomFieldObj->Create(
+ Name => $Name,
+ TypeComposite => $TypeComposite,
+ LookupType => $LookupType,
+ Description => $Description,
+ Pattern => $Pattern,
+ LinkValueTo => $LinkValueTo,
+ IncludeContentForValue => $IncludeContentForValue,
+ BasedOn => $BasedOn,
+ );
+ $m->comp( "/Elements/Error", Why => loc( "Could not create CustomField", $msg ) ) unless $val;
+ push @results, $msg;
+ $title = loc( 'Created CustomField [_1]', $CustomFieldObj->Name );
+ } else {
+ $CustomFieldObj->Load( $id ) || $m->comp("/Elements/Error", Why => loc('No CustomField') );
+ $title = loc( 'Editing CustomField [_1]', $CustomFieldObj->Name );
+ }
+ $current_tab .= "?id=$id";
+}
+
+if ( $ARGS{'Update'} && $id ne 'new' ) {
+
+ #we're asking about enabled on the web page but really care about disabled.
+ $ARGS{'Disabled'} = $Disabled = $Enabled? 0 : 1;
+
+ my @attribs = qw(Disabled Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue);
+ push @results, UpdateRecordObject(
+ AttributesRef => \@attribs,
+ Object => $CustomFieldObj,
+ ARGSRef => \%ARGS
+ );
+ $CustomFieldObj->SetValuesClass( $ValuesClass );
+
+ $CustomFieldObj->SetBasedOn( $BasedOn );
+
+ my $paramtag = "CustomField-". $CustomFieldObj->Id ."-Value";
+ # Delete any fields that want to be deleted
+ foreach my $key ( keys %ARGS ) {
+ next unless $key =~ /^Delete-$paramtag-(\d+)$/o;
+ my ($val, $msg) = $CustomFieldObj->DeleteValue( $1 );
+ push (@results, $msg);
+ }
+
+ # Update any existing values
+ my $values = $CustomFieldObj->ValuesObj;
+ while ( my $value = $values->Next ) {
+ foreach my $attr qw(Name Description SortOrder Category) {
+ my $param = join("-", $paramtag, $value->Id, $attr);
+ next unless exists $ARGS{$param};
+ next if ($value->$attr()||'') eq ($ARGS{$param}||'');
+
+ my $mutator = "Set$attr";
+ my ($id, $msg) = $value->$mutator( $ARGS{$param} );
+ push (@results, $msg);
+ }
+ }
+
+ # Add any new values
+ if ( defined $ARGS{ $paramtag ."-new-Name" } && length $ARGS{ $paramtag ."-new-Name" } ) {
+ my ($id, $msg) = $CustomFieldObj->AddValue(
+ map { $_ => $ARGS{ $paramtag ."-new-$_" } }
+ qw( Name Description SortOrder Category )
+ );
+ push (@results, $msg);
+ }
+}
+
+$id = $CustomFieldObj->id if $CustomFieldObj->id;
+
+my $EnabledChecked = qq[checked="checked"];
+$EnabledChecked = '' if $CustomFieldObj->Disabled;
+
+my @CFvalidations = (
+ '(?#Mandatory).',
+ '(?#Digits)^[\d.]+$',
+ '(?#Year)^[12]\d{3}$',
+);
+
+$m->callback(CallbackName => 'ValidationPatterns', Values => \@CFvalidations);
+
+</%INIT>
+<%ARGS>
+$id => undef
+$TypeComposite => undef
+$LookupType => undef
+$MaxValues => undef
+$SortOrder => undef
+$Description => undef
+$Pattern => undef
+$Name => undef
+$SetEnabled => undef
+$Enabled => 0
+$ValuesClass => 'RT::CustomFieldValues'
+$LinkValueTo => undef
+$IncludeContentForValue => undef
+$BasedOn => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/CustomFields/Objects.html b/rt/share/html/Admin/CustomFields/Objects.html
new file mode 100644
index 0000000..20d79b2
--- /dev/null
+++ b/rt/share/html/Admin/CustomFields/Objects.html
@@ -0,0 +1,153 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/CustomFieldTabs,
+ id => $id,
+ current_tab => "Admin/CustomFields/Objects.html?id=".$id,
+ Title => $title
+ &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="Objects.html" method="post">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+<input type="hidden" class="hidden" name="UpdateObjs" value="1" />
+
+<h2><&|/l&>Selected objects</&></h2>
+<& /Admin/Elements/PickObjects, Objects => \@AssignedObjs, id => $id, Checked => 1 &>
+<h2><&|/l&>Unselected objects</&></h2>
+<& /Admin/Elements/PickObjects, Objects => \@UnassignedObjs, id => $id &>
+
+<& /Elements/Submit, CheckAll => 1, ClearAll => 1 &>
+</form>
+
+<%INIT>
+my $CF = RT::CustomField->new($session{'CurrentUser'});
+$CF->Load($id) or Abort(loc("Could not load CustomField [_1]"), $id);
+my $LookupType = $CF->LookupType || '';
+$LookupType =~ /^([^-]+)/ ||
+ Abort(loc("Object of type [_1] cannot take custom fields", $LookupType));
+
+my $Class = $1;
+my $CollectionClass;
+if (UNIVERSAL::can($Class.'Collection', 'new') ) {
+$CollectionClass = $Class.'Collection';
+
+} elsif (UNIVERSAL::can($Class.'es', 'new') ) {
+ $CollectionClass = $Class.'es';
+
+} elsif (UNIVERSAL::can($Class.'s', 'new') ) {
+ $CollectionClass = $Class.'s';
+
+} else {
+ Abort(loc("Can't find a collection class for '[_1]'", $Class));
+}
+
+
+my $title = loc('Modify associated objects for [_1]', $CF->Name);
+
+my $Objects = $CollectionClass->new($session{'CurrentUser'});
+
+# If CF is a Group CF, only display user-defined groups
+if ($Class eq 'RT::Group') {
+ $Objects->LimitToUserDefinedGroups;
+}
+
+my (@results);
+my (@AssignedObjs, @UnassignedObjs);
+
+$Objects->UnLimit;
+$Objects->OrderBy( FIELD => 'Name' );
+
+
+my $ObjectCFs;
+$ObjectCFs = RT::ObjectCustomFields->new($session{'CurrentUser'});
+$ObjectCFs->UnLimit;
+$ObjectCFs->LimitToCustomField($id);
+
+my %seen;
+while (my $OCF = $ObjectCFs->Next) {
+ $seen{$OCF->ObjectId}++;
+}
+
+while (my $obj = $Objects->Next) {
+ my $obj_id = $obj->Id;
+
+ if ($UpdateObjs) {
+ # Go through and delete all the custom field relationships that this object
+ # no longer has
+ my $key = "Object-$obj_id-CF-$id";
+ if ($ARGS{$key}) {
+ if (!$seen{$obj_id}) {
+ my ($val, $msg) = $CF->AddToObject($obj);
+ push (@results, $msg);
+ push @UnassignedObjs, $obj if !$val;
+ }
+ }
+ else {
+ push @UnassignedObjs, $obj;
+ if ($seen{$obj_id}) {
+ my ($val, $msg) = $CF->RemoveFromObject($obj);
+ push (@results, $msg);
+ pop @UnassignedObjs if !$val;
+ }
+ }
+ }
+ elsif (!$seen{$obj_id}) {
+ push @UnassignedObjs, $obj;
+ }
+ next if @UnassignedObjs and $UnassignedObjs[-1] == $obj;
+ push @AssignedObjs, $obj;
+}
+
+</%INIT>
+<%ARGS>
+$id => undef
+$FindDisabledObjects => 0
+$UpdateObjs => 0
+</%ARGS>
diff --git a/rt/share/html/Admin/CustomFields/UserRights.html b/rt/share/html/Admin/CustomFields/UserRights.html
new file mode 100644
index 0000000..9efd9ac
--- /dev/null
+++ b/rt/share/html/Admin/CustomFields/UserRights.html
@@ -0,0 +1,110 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/CustomFieldTabs, id => $id,
+current_tab => "Admin/CustomFields/UserRights.html?id=".$id,
+Title => $title, &>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="UserRights.html">
+ <input type="hidden" class="hidden" name="id" value="<% $CustomFieldObj->id %>" />
+
+
+<table>
+
+% while (my $Member = $Users->Next()) {
+% my $UserObj = $Member->MemberObj->Object();
+% my $group = RT::Group->new($session{'CurrentUser'});
+% $group->LoadACLEquivalenceGroup($Member->MemberObj);
+ <tr align="right">
+ <td valign="top"><& /Elements/ShowUser, User => $UserObj &></td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId=> $group->PrincipalId,
+ Object => $CustomFieldObj &>
+ </td>
+ </tr>
+% }
+ </table>
+
+ <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &>
+
+ </form>
+
+<%INIT>
+
+#Update the acls.
+my @results = ProcessACLChanges( \%ARGS );
+
+# {{{ Deal with setting up the display of current rights.
+
+
+
+if (!defined $id) {
+ $m->comp("/Elements/Error", Why => loc("No Class defined"));
+}
+
+my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'});
+$CustomFieldObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load Class [_1]",$id));
+
+# Find out which users we want to display ACL selects for
+my $Privileged = RT::Group->new($session{'CurrentUser'});
+$Privileged->LoadSystemInternalGroup('Privileged');
+my $Users = $Privileged->MembersObj();
+
+my $title = loc('Modify user rights for custom field [_1]', $CustomFieldObj->Name);
+
+# }}}
+
+</%INIT>
+
+<%ARGS>
+$id => undef
+$UserString => undef
+$UserOp => undef
+$UserField => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/CustomFields/index.html b/rt/share/html/Admin/CustomFields/index.html
new file mode 100644
index 0000000..139b8eb
--- /dev/null
+++ b/rt/share/html/Admin/CustomFields/index.html
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Select a Custom Field') &>
+<& /Admin/Elements/CustomFieldTabs,
+ current_tab => 'Admin/CustomFields/',
+ Title => loc('Select a Custom Field') &>
+
+% my @types;
+% my $prev_lookup = '';
+% while (my $CustomFieldObj = $CustomFields->Next) {
+% next unless $CustomFieldObj->CurrentUserHasRight('AdminCustomField');
+% my $lookup = $CustomFieldObj->FriendlyLookupType;
+% if ($lookup ne $prev_lookup) {
+% if ($prev_lookup) {
+</ul>
+% }
+<h2><% loc("Custom Fields for [_1]", $lookup) %></h2>
+<ul>
+% $prev_lookup = $lookup;
+% push @types, [$lookup, $CustomFieldObj->LookupType];
+% }
+%
+<li>
+<a href="Modify.html?id=<% $CustomFieldObj->id %>"><% $CustomFieldObj->Name %>: <% $CustomFieldObj->Description %></a>
+</li>
+% }
+% if ($prev_lookup) {
+</ul>
+% }
+
+<form action="<%RT->Config->Get('WebPath')%>/Admin/CustomFields/index.html" method="get">
+<&|/l&>Only show custom fields for:</&>
+<select name="Type">
+<option value="" <% !$Type && 'selected="selected"'%> ><% loc('(any)') %></option>
+% for (@types) {
+<option value="<% $_->[1] %>" <% $_->[1] eq $Type && 'selected="selected"'%> ><% $_->[0] %></option>
+% }
+</select>
+<br />
+<input type="checkbox" class="checkbox" name="ShowDisabled" value="1" <% $ShowDisabled && 'checked="checked"' |n%> />
+<&|/l&>Include disabled custom fields in listing.</&>
+<br />
+
+<input type="submit" value="<% loc('Go!') %>" />
+</form>
+
+<%args>
+$Type => ''
+$ShowDisabled => 0
+</%args>
+<%INIT>
+$Type ||= $ARGS{'type'} || '';
+if ( !$Type && $ARGS{'type'} ) {
+ $Type ||= $ARGS{'type'};
+ $RT::Logger->warning("'type' argument is deprecated use 'Type' instead");
+}
+
+my $CustomFields = RT::CustomFields->new($session{'CurrentUser'});
+$CustomFields->UnLimit;
+$CustomFields->{'find_disabled_rows'} = 1 if $ShowDisabled;
+$CustomFields->LimitToLookupType( $Type ) if $Type;
+$CustomFields->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'Name' } );
+</%INIT>
diff --git a/rt/share/html/Admin/Elements/AddCustomFieldValue b/rt/share/html/Admin/Elements/AddCustomFieldValue
new file mode 100755
index 0000000..9fe464a
--- /dev/null
+++ b/rt/share/html/Admin/Elements/AddCustomFieldValue
@@ -0,0 +1,86 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<h3><&|/l&>Add Value</&></h3>
+
+<table border="0">
+
+<tr>
+<th><&|/l&>Sort</&></th>
+<th><&|/l&>Name</&></th>
+<th><&|/l&>Description</&></th>
+% if ( $CustomField->Type ne 'Combobox' ) {
+<th><&|/l&>Category</&></th>
+% }
+</tr>
+
+% my $paramtag = "CustomField-". $CustomField->Id ."-Value-new";
+<tr>
+<td><input type="text" size="3" name="<% $paramtag %>-SortOrder" /></td>
+<td><input type="text" size="25" name="<% $paramtag %>-Name" /></td>
+<td><input type="text" size="45" name="<% $paramtag %>-Description" /></td>
+% if ( $CustomField->Type ne 'Combobox' ) {
+<td>
+% my $BasedOnObj = $CustomField->BasedOnObj;
+% if ( $BasedOnObj and $BasedOnObj->id ) {
+% my $Categories = $BasedOnObj->Values;
+<select name="<% $paramtag %>-Category" size="1">
+<option value=""><&|/l&>(no value)</&></option>
+% while (my $Value = $Categories->Next) {
+<option value="<% $Value->Name %>"><% $Value->Name %></option>
+% }
+% } else {
+<input type="text" size="10" name="<% $paramtag %>-Category" value="" />
+% }
+</td>
+% }
+</tr>
+
+</table>
+<%args>
+$CustomField => undef
+</%args>
diff --git a/rt/share/html/Admin/Elements/ConfigureMyRT b/rt/share/html/Admin/Elements/ConfigureMyRT
new file mode 100644
index 0000000..35c01bc
--- /dev/null
+++ b/rt/share/html/Admin/Elements/ConfigureMyRT
@@ -0,0 +1,82 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Action
+$OnSave
+$items
+$panes
+$current_portlets
+$ReadOnly => 0
+</%args>
+<%init>
+my $portlets = $current_portlets;
+my @panes;
+for my $pane (@$panes) {
+ push @panes, $m->comp(
+ '/Widgets/SelectionBox:new',
+ Action => $Action,
+ Name => $pane,
+ Available => $items,
+ AutoSave => 1,
+ ReadOnly => $ReadOnly,
+ OnSubmit => sub {
+ my $sel = shift;
+ $portlets->{$pane} = [
+ map { m/(\w+)-(.*)$/;
+ { type => $1,
+ name => $2 } } @{ $sel->{Current} }
+ ];
+ $OnSave->( $portlets, $pane );
+ },
+ Selected => [ map { join( '-', @{$_}{qw/type name/} ) }
+ @{ $portlets->{$pane} } ]
+ );
+}
+
+return @panes;
+</%init>
diff --git a/rt/share/html/Admin/Elements/CreateUserCalled b/rt/share/html/Admin/Elements/CreateUserCalled
new file mode 100755
index 0000000..78eb82c
--- /dev/null
+++ b/rt/share/html/Admin/Elements/CreateUserCalled
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<form method="get" action="<% RT->Config->Get('WebPath') %>/Admin/Users/Create.html">
+<&|/l&>New user called</&> <input name="Name" size="10" /><input type="submit" class="button" value="<&|/l&>Create</&>" />
+</form>
diff --git a/rt/share/html/Admin/Elements/CustomFieldTabs b/rt/share/html/Admin/Elements/CustomFieldTabs
new file mode 100644
index 0000000..30f5adf
--- /dev/null
+++ b/rt/share/html/Admin/Elements/CustomFieldTabs
@@ -0,0 +1,118 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Tabs,
+ current_tab => 'Admin/CustomFields/',
+ subtabs => $tabs,
+ current_subtab => $current_tab,
+ Title => $Title &>
+<%INIT>
+my $tabs;
+
+if ($id) {
+ my $cf = RT::CustomField->new( $session{'CurrentUser'} );
+ $cf->Load($id);
+ $tabs = {
+ this => {
+ title => $cf->Name,
+ path => "Admin/CustomFields/Modify.html?id=" . $id,
+ current_subtab => $current_tab,
+
+ subtabs => {
+
+ C => { title => loc('Basics'),
+ path => "Admin/CustomFields/Modify.html?id=" . $id,
+ },
+ F => { title => loc('Group Rights'),
+ path => "Admin/CustomFields/GroupRights.html?id="
+ . $id, },
+ G => {
+ title => loc('User Rights'),
+ path => "Admin/CustomFields/UserRights.html?id=" . $id,
+ },
+
+ } }
+
+ };
+
+
+ if ($cf->LookupType =~ /^RT::(?:Queue|Group)(?:\Z|-)/i) {
+ $tabs->{'this'}->{subtabs}->{D} = {
+ title => loc('Applies to'),
+ path => "Admin/CustomFields/Objects.html?id=" . $id,
+ };
+ }
+}
+
+if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminCustomField')) {
+ $tabs->{"A"} = { title => loc('Select'),
+ path => "Admin/CustomFields/",
+ };
+ $tabs->{"B"} = { title => loc('Create'),
+ path => "Admin/CustomFields/Modify.html?Create=1",
+ separator => 1,
+ };
+}
+
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+
+foreach my $tab (sort keys %{$tabs->{'this'}->{'subtabs'}}) {
+ if ($tabs->{'this'}->{'subtabs'}->{$tab}->{'path'} eq $current_tab) {
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{'subtabs'} = $subtabs;
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{'current_subtab'} = $current_subtab;
+ }
+}
+if( $id ) { $current_tab = "Admin/CustomFields/Modify.html?id=" . $id }
+</%INIT>
+<%ARGS>
+$Title => undef
+$id => undef
+$current_tab => undef
+$subtabs => undef
+$current_subtab => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/EditCustomField b/rt/share/html/Admin/Elements/EditCustomField
new file mode 100755
index 0000000..368ea2d
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditCustomField
@@ -0,0 +1,159 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ListActions, actions => \@results &>
+
+
+<form method="post" action="CustomField.html">
+<input type="hidden" class="hidden" name="CustomField" value="<%$id %>" />
+<input type="hidden" class="hidden" name="Queue" value="<%$Queue%>" />
+
+<table width="100%" border="0">
+<tr><td align="right">
+<&|/l&>Name</&>:
+</td><td>
+<input name="Name" value="<%$CustomFieldObj->Name%>" size="20" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Description</&>:
+</td><td>
+<input name="Description" value="<%$CustomFieldObj->Description%>" size="80" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Type</&>:
+</td><td>
+<& /Admin/Elements/SelectCustomFieldType, Name => "Type", Default => $CustomFieldObj->Type &>
+</td></tr>
+<tr><td>
+</td><td>
+<input type="hidden" class="hidden" name="SetEnabled" value="1" />
+<input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> /> <&|/l&>Enabled (Unchecking this box disables this custom field)</&>
+</td></tr>
+</table>
+
+<p>
+% if ($CustomFieldObj->Id and $CustomFieldObj->Type =~ /Select/) {
+<h2><&|/l&>Values</&></h2>
+<font size="-1">
+<& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &>
+<& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &>
+</font>
+% }
+<&/Elements/Submit, Label => loc('Create') &>
+</form>
+
+
+
+<%INIT>
+
+my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'});
+my $EnabledChecked = 'checked="checked"';
+my (@results);
+
+if (! $CustomField ) {
+ $title = loc("Create a CustomField");
+ $id = 'new';
+} else {
+
+ if ($CustomField eq 'new') {
+ my ($val, $msg) = $CustomFieldObj->Create(Queue => $Queue,
+ Name => $Name,
+ Type => $Type,
+ Description => $Description,
+ );
+
+ # if there is an error, then abort. But since at this point there's
+ # stuff already printed, clear it out.
+ # (This only works in conjunction with temporarily turning autoflush
+ # off in the files that use this component.)
+ unless ($val) {
+ $m->clear_buffer;
+ Abort(loc("Could not create CustomField: [_1]", $msg), SuppressHeader => 1);
+ }
+ push @results, $msg;
+ $CustomFieldObj->SetSortOrder($CustomFieldObj->id);
+ $title = loc('Created CustomField [_1]', $CustomFieldObj->Name());
+ } else {
+ $CustomFieldObj->Load($CustomField) || Abort(loc('No CustomField'), SuppressHeader => 1);
+ $title = loc('Editing CustomField [_1]', $CustomFieldObj->Name());
+
+ my @aresults = ProcessCustomFieldUpdates (
+ CustomFieldObj => $CustomFieldObj,
+ ARGSRef => \%ARGS );
+ push @results, @aresults;
+ }
+
+
+$id = $CustomFieldObj->id;
+
+ #we're asking about enabled on the web page but really care about disabled.
+ my $Disabled = ($Enabled ? 0 : 1);
+
+ if ( ($SetEnabled) and ( $Disabled != $CustomFieldObj->Disabled) ) {
+ my ($code, $msg) = $CustomFieldObj->SetDisabled($Disabled);
+ push @results, loc('Enabled status [_1]', loc_fuzzy($msg));
+ }
+
+ if ($CustomFieldObj->Disabled()) {
+ $EnabledChecked ="";
+ }
+
+}
+
+
+</%INIT>
+<%ARGS>
+$id => undef
+$title => undef
+$Queue => undef
+$CustomField => undef
+$Type => undef
+$Description => undef
+$Name => undef
+$SetEnabled => undef
+$Enabled => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/EditCustomFieldValues b/rt/share/html/Admin/Elements/EditCustomFieldValues
new file mode 100755
index 0000000..96610b2
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditCustomFieldValues
@@ -0,0 +1,104 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% unless ( $values->Count ) {
+<p><em><&|/l&>(no values)</&></em></p>
+% return;
+% }
+
+<table>
+
+<tr>
+<th>&nbsp;</th>
+<th><&|/l&>Sort</&></th>
+<th><&|/l&>Name</&></th>
+<th><&|/l&>Description</&></th>
+% if ($CustomField->Type ne 'Combobox') {
+<th><&|/l&>Category</&></th>
+% }
+</tr>
+
+% while ( my $value = $values->Next ) {
+% my $paramtag = "CustomField-". $CustomField->Id ."-Value-". $value->Id;
+<tr>
+<td><input type="checkbox" class="checkbox" name="Delete-<% $paramtag %>" /></td>
+<td><input type="text" size="3" name="<% $paramtag %>-SortOrder" value="<% $value->SortOrder %>" /></td>
+<td><input type="text" size="25" name="<% $paramtag %>-Name" value="<% $value->Name %>" /></td>
+<td><input type="text" size="45" name="<% $paramtag %>-Description" value="<% $value->Description %>" /></td>
+% if ( $CustomField->Type ne 'Combobox' ) {
+<td>
+% if ( $Categories ) {
+% my $selected = $value->Category;
+% $selected = '' unless defined $selected;
+<select name="<% $paramtag %>-Category" size="1">
+<option value=""<% $selected eq '' ? q[ selected="selected"] : "" |n%>><&|/l&>(no value)</&></option>
+% while (my $Value = $Categories->Next) {
+<option value="<% $Value->Name %>"<% $selected eq $Value->Name ? q[ selected="selected"] : "" |n%>><% $Value->Name %></option>
+% }
+% } else {
+<input type="text" size="10" name="<% $paramtag %>-Category" value="<% $value->Category || '' %>" />
+% }
+</td>
+% }
+</tr>
+% }
+
+</table>
+<i><&|/l&>(Check box to delete)</&></i>
+<%init>
+
+my $values = $CustomField->ValuesObj();
+
+my $BasedOnObj = $CustomField->BasedOnObj;
+my $Categories;
+if ($BasedOnObj and $BasedOnObj->Id) {
+ $Categories = $BasedOnObj->Values;
+}
+</%init>
+<%args>
+$CustomField => undef
+</%args>
diff --git a/rt/share/html/Admin/Elements/EditCustomFieldValuesSource b/rt/share/html/Admin/Elements/EditCustomFieldValuesSource
new file mode 100644
index 0000000..c4b4111
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditCustomFieldValuesSource
@@ -0,0 +1,82 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div id="values-source-class-block">
+<select name="ValuesClass">
+% foreach my $source( @sources ) {
+<option value="<% $source->{'Class'} %>" <% $source->{'Class'} eq $CustomField->ValuesClass && 'selected="selected"' %>><% $source->{'Description'} %></option>
+% }
+</select>
+</div>
+
+<%INIT>
+return unless $CustomField->IsSelectionType;
+
+my @sources;
+foreach my $class( 'RT::CustomFieldValues', RT->Config->Get('CustomFieldValuesSources') ) {
+ next unless $class;
+
+ local $@;
+ eval "require $class";
+ if( $@ ) {
+ $RT::Logger->crit("Couldn't load class '$class': $@");
+ next;
+ }
+
+ my %res = ( Class => $class );
+ $res{'Description'} = $class->SourceDescription if $class->can('SourceDescription');
+ $res{'Description'} ||= $class;
+ $res{'Description'} = 'Provide list of values below' if $class eq 'RT::CustomFieldValues';
+ push @sources, \%res;
+}
+
+return unless grep $_->{'Class'} ne 'RT::CustomFieldValues', @sources;
+
+</%INIT>
+<%ARGS>
+$CustomField => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/EditCustomFields b/rt/share/html/Admin/Elements/EditCustomFields
new file mode 100755
index 0000000..89c6d0f
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditCustomFields
@@ -0,0 +1,205 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="<%RT->Config->Get('WebPath')%><% $m->request_comp->path |n %>" method="post" name="EditCustomFields">
+<input type="hidden" class="hidden" name="id" value="<% $Object->Id || ''%>" />
+<input type="hidden" class="hidden" name="ObjectType" value="<% $ObjectType %>" />
+<input type="hidden" class="hidden" name="SubType" value="<% $SubType %>" />
+<input type="hidden" class="hidden" name="UpdateCFs" value="1" />
+
+% if ($Object->Id) {
+<h2><&|/l&>Global Custom Fields</&></h2>
+<& PickCustomFields, CustomFields => \@GlobalCFs, ReadOnly => 1, id => $id, SubType => $SubType &>
+% }
+<h2><&|/l&>Selected Custom Fields</&></h2>
+<& PickCustomFields, CustomFields => [$ObjectCFs->CustomFields], id => $id, Checked => 1, SubType => $SubType &>
+<h2><&|/l&>Unselected Custom Fields</&></h2>
+<& PickCustomFields, CustomFields => \@UnassignedCFs, id => $id, SubType => $SubType &>
+
+<& /Elements/Submit, CheckAll => 1, ClearAll => 1 &>
+</form>
+
+
+<%INIT>
+my $CustomFields = RT::CustomFields->new($session{'CurrentUser'});
+my @results;
+my (@GlobalCFs, @UnassignedCFs);
+
+my $id = $Object->Id;
+if ($id and !$Object->CurrentUserHasRight('AssignCustomFields')) {
+ $m->out('<p><i>', loc('(No custom fields)'), '</i></p>');
+ return;
+}
+
+my $lookup = $ObjectType;
+$lookup .= "-$SubType" if $SubType;
+
+$CustomFields->LimitToLookupType($lookup);
+$CustomFields->OrderBy( FIELD => 'Name' );
+
+
+my ($GlobalCFs, $ObjectCFs);
+$ObjectCFs = RT::ObjectCustomFields->new($session{'CurrentUser'});
+$ObjectCFs->UnLimit;
+$ObjectCFs->LimitToObjectId($id);
+$ObjectCFs->LimitToLookupType($lookup);
+
+# Check sanity of SortOrders
+my %SortOrders;
+$SortOrders{ $_->SortOrder }++
+ while ($_ = $ObjectCFs->Next);
+
+# If there are duplicates, run though and squash them
+if (grep $_ > 1, values %SortOrders) {
+ my $i = 1;
+ while ( my $ObjectCF = $ObjectCFs->Next ) {
+ $ObjectCF->SetSortOrder( $i++ );
+ }
+ $ObjectCFs->GotoFirstItem;
+}
+
+# {{{ deal with moving sortorder of custom fields
+if ($CustomField and $Move) {
+ my $SourceObj = RT::ObjectCustomField->new($session{'CurrentUser'});
+ $SourceObj->LoadByCols( ObjectId => $id, CustomField => $CustomField );
+
+ my $TargetObj;
+ my $target_order = $SourceObj->SortOrder + $Move;
+ while (my $ObjectCF = $ObjectCFs->Next) {
+ my $this_order = $ObjectCF->SortOrder;
+
+ # if we have an exact match, finish the loop now
+ ($TargetObj = $ObjectCF, last) if $this_order == $target_order;
+
+ # otherwise, we need to apropos toward the general direction
+ # ... first, check the sign is correct
+ next unless ($this_order - $SourceObj->SortOrder) * $Move > 0;
+
+ # ... next, see if we already have a candidate
+ if ($TargetObj) {
+ # ... if yes, compare the delta and choose the smaller one
+ my $orig_delta = abs($TargetObj->SortOrder - $target_order);
+ my $this_delta = abs($this_order - $target_order);
+ next if $orig_delta < $this_delta;
+ }
+
+ $TargetObj = $ObjectCF;
+ }
+
+ if ($TargetObj) {
+ # swap their sort order
+ my ($s, $t) = ($SourceObj->SortOrder, $TargetObj->SortOrder);
+ $TargetObj->SetSortOrder($s);
+ $SourceObj->SetSortOrder($t);
+ # because order changed, we must redo search for subsequent uses
+ }
+
+ $ObjectCFs->GotoFirstItem;
+}
+# }}}
+
+if ($id) {
+ $GlobalCFs = RT::ObjectCustomFields->new($session{'CurrentUser'});
+ $GlobalCFs->LimitToObjectId(0);
+ $GlobalCFs->LimitToLookupType($lookup);
+}
+
+while (my $cf = $CustomFields->Next) {
+ my $cf_id = $cf->Id;
+
+ if ($GlobalCFs and $GlobalCFs->HasEntryForCustomField($cf_id)) {
+ push @GlobalCFs, $cf;
+ next;
+ }
+
+ if ($UpdateCFs) {
+ # Go through and delete all the custom field relationships that this object
+ # no longer has
+ my $key = "Object-$id-CF-$cf_id";
+ if ($ARGS{$key}) {
+ if (!$ObjectCFs->HasEntryForCustomField($cf_id)) {
+ my ($val, $msg) = $cf->AddToObject($Object);
+ push (@results, $msg);
+ push @UnassignedCFs, $cf if !$val;
+ }
+ }
+ else {
+ push @UnassignedCFs, $cf;
+ if ($ObjectCFs->HasEntryForCustomField($cf_id)) {
+ my ($val, $msg) = $cf->RemoveFromObject($Object);
+ push (@results, $msg);
+ pop @UnassignedCFs if !$val;
+ }
+ }
+ }
+ elsif (!$ObjectCFs->HasEntryForCustomField($cf_id)) {
+ push @UnassignedCFs, $cf;
+ }
+ else {
+ }
+}
+
+# redo search...
+$ObjectCFs = RT::ObjectCustomFields->new($session{'CurrentUser'});
+$ObjectCFs->UnLimit;
+$ObjectCFs->LimitToObjectId($id);
+$ObjectCFs->LimitToLookupType($lookup);
+
+</%INIT>
+<%ARGS>
+$title => undef
+$Move => undef
+$Source => undef
+$CustomField => undef
+$FindDisabledCustomFields => undef
+$UpdateCFs => 0
+$Object
+$ObjectType
+$SubType => ''
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/EditQueueWatchers b/rt/share/html/Admin/Elements/EditQueueWatchers
new file mode 100755
index 0000000..56ffb0e
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditQueueWatchers
@@ -0,0 +1,78 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%if ($Members->Count == 0 ) {
+<ul>
+<li><i><&|/l&>none</&></i>
+% } else {
+<ul>
+% while (my $watcher=$Members->Next) {
+<li>
+<input type="checkbox" class="checkbox" name="Queue-<%$QueueObj->Id%>-DeleteWatcher-Type-<%$Watchers->Type%>-Principal-<%$watcher->MemberId%>" value="1"
+ unchecked />
+% if ($watcher->MemberObj->IsUser) {
+<a href="<%RT->Config->Get('WebPath')%>/Admin/Users/Modify.html?id=<%$watcher->MemberObj->ObjectId%>">
+% } else {
+<a href="<%RT->Config->Get('WebPath')%>/Admin/Groups/Modify.html?id=<%$watcher->MemberObj->ObjectId%>">
+% }
+<%$watcher->MemberObj->Object->Name%></a>
+% }
+% }
+</ul>
+<i><&|/l&>(Check box to delete)</&></i><br /><br />
+
+<%INIT>
+my $Members = $Watchers->MembersObj;
+</%INIT>
+
+<%ARGS>
+$QueueObj => undef
+$Watchers => undef
+</%ARGS>
+
+
+
diff --git a/rt/share/html/Admin/Elements/EditScrip b/rt/share/html/Admin/Elements/EditScrip
new file mode 100755
index 0000000..29ec71c
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditScrip
@@ -0,0 +1,197 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ListActions, actions => \@actions &>
+
+<form method="post" action="Scrip.html">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+<input type="hidden" class="hidden" name="Queue" value="<% $Queue %>" />
+
+<&| /Widgets/TitleBox, title => loc('Scrip Fields') &>
+<table>
+
+<tr><td align="right"><&|/l&>Description</&>:</td><td>
+<input name="Scrip-<% $id %>-Description"
+ value="<% $ARGS{"Scrip-$id-Description"} || $scrip->Description || '' %>" />
+</td></tr>
+
+<tr><td align="right"><&|/l&>Condition</&>:</td><td>
+<& /Admin/Elements/SelectScripCondition,
+ Name => "Scrip-$id-ScripCondition",
+ Default => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id,
+&></td></tr>
+
+<tr><td align="right"><&|/l&>Action</&>:</td><td>
+<& /Admin/Elements/SelectScripAction,
+ Name => "Scrip-$id-ScripAction",
+ Default => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id,
+&></td></tr>
+
+<tr><td align="right"><&|/l&>Template</&>:</td><td>
+<& /Admin/Elements/SelectTemplate,
+ Name => "Scrip-$id-Template",
+ Default => $ARGS{"Scrip-$id-Template"} || $scrip->TemplateObj->Id,
+ Queue => $Queue,
+&></td></tr>
+
+<tr><td align="right"><&|/l&>Stage</&>:</td><td>
+<& /Admin/Elements/SelectStage,
+ Name => "Scrip-$id-Stage",
+ Default => $ARGS{"Scrip-$id-Stage"} || $scrip->Stage,
+&></td></tr>
+
+</table>
+</&>
+
+<& /Elements/Submit,
+ Label => $SubmitLabel,
+ Reset => 1,
+&><br />
+
+<&| /Widgets/TitleBox, title => loc('User Defined conditions and actions') &>
+<table>
+<tr><td colspan="2">
+<i><&|/l&>(Use these fields when you choose 'User Defined' for a condition or action)</&></i>
+</td></tr>
+
+<tr><td class="labeltop"><&|/l&>Custom condition</&>:</td><td>
+% my $code = $ARGS{"Scrip-$id-CustomIsApplicableCode"} || $scrip->CustomIsApplicableCode || '';
+% my $lines = @{[ $code =~ /\n/gs ]} + 3;
+% $lines = $min_lines if $lines < $min_lines;
+<textarea cols="80" rows="<% $lines %>" name="Scrip-<% $id %>-CustomIsApplicableCode"><% $code %></textarea>
+</td></tr>
+
+<tr><td class="labeltop"><&|/l&>Custom action preparation code</&>:</td><td>
+% $code = $ARGS{"Scrip-$id-CustomPrepareCode"} || $scrip->CustomPrepareCode || '';
+% $lines = @{[ $code =~ /\n/gs ]} + 3;
+% $lines = $min_lines if $lines < $min_lines;
+<textarea cols="80" rows="<% $lines %>" name="Scrip-<% $id %>-CustomPrepareCode"><% $code %></textarea>
+</td></tr>
+
+<tr><td class="labeltop"><&|/l&>Custom action cleanup code</&>:</td><td>
+% $code = $ARGS{"Scrip-$id-CustomCommitCode"} || $scrip->CustomCommitCode || '';
+% $lines = @{[ $code =~ /\n/gs ]} + 3;
+% $lines = $min_lines if $lines < $min_lines;
+<textarea cols="80" rows="<% $lines %>" name="Scrip-<% $id || '' %>-CustomCommitCode"><% $code %></textarea>
+</td></tr>
+
+</table>
+</&>
+
+<& /Elements/Submit,
+ Label => $SubmitLabel,
+ Reset => 1,
+&>
+
+</form>
+<%init>
+
+my (@actions, $SubmitLabel);
+my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
+
+if ( $id ) {
+ $scrip->Load( $id );
+ unless ( $id = $scrip->id ) {
+ push @actions, loc("Couldn't load scrip #[_1]", $id);
+ }
+ $SubmitLabel = loc('Save Changes');
+}
+
+unless ( $id ) {
+ $id = 'new';
+ $SubmitLabel = loc('Create');
+}
+
+my $min_lines = 10;
+
+</%init>
+
+<%ARGS>
+$id => undef
+$title => undef
+$Queue => 0
+</%ARGS>
+
+<%METHOD Process>
+<%ARGS>
+$id => undef
+$Queue => undef
+</%ARGS>
+<%INIT>
+return ($id) unless $id;
+
+my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
+if ( $id eq 'new' ) {
+ return $scrip->Create(
+ Queue => $Queue,
+ ScripAction => $ARGS{"Scrip-new-ScripAction"},
+ ScripCondition => $ARGS{"Scrip-new-ScripCondition"},
+ Template => $ARGS{"Scrip-new-Template"},
+ Description => $ARGS{"Scrip-new-Description"},
+ CustomPrepareCode => $ARGS{"Scrip-new-CustomPrepareCode"},
+ CustomCommitCode => $ARGS{"Scrip-new-CustomCommitCode"},
+ CustomIsApplicableCode => $ARGS{"Scrip-new-CustomIsApplicableCode"},
+ Stage => $ARGS{"Scrip-new-Stage"},
+ );
+}
+else {
+ $scrip->Load( $id );
+ return (undef, loc("Couldn't load scrip #[_1]", $id))
+ unless $scrip->id;
+
+ my @attribs = qw(Queue ScripAction ScripCondition Template Stage
+ Description CustomPrepareCode CustomCommitCode CustomIsApplicableCode);
+ my @results = UpdateRecordObject(
+ AttributesRef => \@attribs,
+ AttributePrefix => 'Scrip-'.$scrip->Id,
+ Object => $scrip,
+ ARGSRef => \%ARGS
+ );
+ return ($scrip->id, @results);
+}
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Admin/Elements/EditScrips b/rt/share/html/Admin/Elements/EditScrips
new file mode 100755
index 0000000..df349e1
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditScrips
@@ -0,0 +1,124 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ListActions, actions => \@actions &>
+
+<form action="Scrips.html" method="post">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+
+<h2><&|/l&>Current Scrips</&></h2>
+<& /Elements/CollectionList,
+ OrderBy => 'Description',
+ Order => 'ASC',
+ Rows => 100,
+ %ARGS,
+ Format => $Format,
+ DisplayFormat => "__CheckBox.{DeleteScrip}__, $Format",
+ Collection => $Scrips,
+ AllowSorting => 1,
+ PassArguments => [ qw(Query Format Rows Page Order OrderBy id) ],
+&>
+
+% if ( $Scrips->Count ) {
+<p><i><&|/l&>(Check box to delete)</&></i></p>
+% } else {
+<p><i><&|/l&>(No scrips)</&></i></p>
+% }
+<& /Elements/Submit,
+ Caption => loc("Delete selected scrips"),
+ Label => loc("Delete")
+&>
+</form>
+
+<%init>
+my (@actions);
+
+my $Scrips = RT::Scrips->new($session{'CurrentUser'});
+
+my $QueueObj = RT::Queue->new($session{'CurrentUser'});
+if ( $id ) {
+ $QueueObj->Load( $id );
+ unless ( $QueueObj->id ) {
+ push @actions, loc("Couldn't load queue #[_1]", $id)
+ }
+}
+
+if ($QueueObj->id) {
+ $Scrips->LimitToQueue($id);
+}
+else {
+ $Scrips->LimitToGlobal();
+}
+
+# {{{ deal with modifying and deleting existing scrips
+# we still support DeleteScrip-id format but array is preferred
+foreach my $id ( grep $_, @DeleteScrip, map /^DeleteScrip-(\d+)/, keys %ARGS ) {
+ my $scrip = RT::Scrip->new($session{'CurrentUser'});
+ $scrip->Load( $id );
+ my ($retval, $msg) = $scrip->Delete;
+ if ($retval) {
+ push @actions, loc("Scrip deleted");
+ }
+ else {
+ push @actions, $msg;
+ }
+}
+# }}}
+
+my $dir_path = $m->request_comp->dir_path;
+$Format ||= qq{'<a href="__WebPath__$dir_path/Scrip.html?id=__id__&Queue=$id">__id__</a>/TITLE:#'}
+ .qq{,'<a href="__WebPath__$dir_path/Scrip.html?id=__id__&Queue=$id">__Description__</a>/TITLE:Description'}
+ .q{,__Stage__, __Condition__, __Action__, __Template__};
+
+</%init>
+
+<%ARGS>
+$id => undef
+$title => undef
+$Format => undef
+@DeleteScrip => ()
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/EditTemplates b/rt/share/html/Admin/Elements/EditTemplates
new file mode 100755
index 0000000..0bd68c2
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditTemplates
@@ -0,0 +1,127 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ListActions, actions => \@actions &>
+
+<form method="get" action="Templates.html">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+
+% unless ( $Templates->Count ) {
+<p><i><&|/l&>(No templates)</&></i></p>
+% } else {
+
+
+<& /Elements/CollectionList,
+ OrderBy => 'id',
+ Order => 'ASC',
+ %ARGS,
+ DisplayFormat => '__CheckBox.{DeleteTemplates}__,'. $Format,
+ Format => $Format,
+ Collection => $Templates,
+ AllowSorting => 1,
+ PassArguments => [qw(Format Rows Page Order OrderBy FindDisabledQueues)],
+&>
+
+<i><&|/l&>(Check box to delete)</&></i>
+% }
+
+<& /Elements/Submit, Label => loc('Delete Template') &>
+</form>
+
+<%INIT>
+my $dir_path = $m->request_comp->dir_path;
+$Format ||= qq{'<a href="__WebPath__$dir_path/Template.html?Queue=$id&Template=__id__">__id__</a>/TITLE:#'}
+ .qq{,'<a href="__WebPath__$dir_path/Template.html?Queue=$id&Template=__id__">__Name__</a>/TITLE:Name'}
+ .qq{,'__Description__'};
+
+my $QueueObj = RT::Queue->new( $session{'CurrentUser'} );
+$QueueObj->Load( $id ) if $id;
+
+my $Templates = RT::Templates->new($session{'CurrentUser'});
+if ( $QueueObj->id ) {
+ $Templates->LimitToQueue( $id );
+}
+else {
+ $Templates->LimitToGlobal;
+}
+
+# Now let callbacks add their extra limits
+$m->callback( %ARGS, Templates => $Templates );
+$Templates->RedoSearch;
+
+# deal with deleting existing templates
+my @actions;
+# backwards compatibility, use DeleteTemplates array for this
+foreach my $key (keys %ARGS) {
+ next unless $key =~ /^DeleteTemplate-(\d+)/;
+ push @DeleteTemplates, $1;
+}
+
+foreach my $id( @DeleteTemplates ) {
+ my $TemplateObj = RT::Template->new( $session{'CurrentUser'} );
+ $TemplateObj->Load( $id );
+ unless ( $TemplateObj->id ) {
+ push @actions, loc("Couldn't load template #[_1]", $id);
+ next;
+ }
+
+ my ($retval, $msg) = $TemplateObj->Delete;
+ if ( $retval ) {
+ push @actions, loc("Template #[_1] deleted", $id);
+ }
+ else {
+ push @actions, $msg;
+ }
+}
+</%INIT>
+<%ARGS>
+$id => 0
+
+$Format => undef
+
+@DeleteTemplates => ()
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/EditUserComments b/rt/share/html/Admin/Elements/EditUserComments
new file mode 100755
index 0000000..21bad82
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditUserComments
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => "Comments about $name" &>
+<&|/l&>These comments aren't generally visible to the user</&>:<br />
+<input type="hidden" class="hidden" name="id" value="<%$id%>" />
+<textarea cols="60" rows="15" wrap="soft" name="Comments"><% $UserObj->Comments %></textarea>
+</form>
+
+<%ARGS>
+$UserObj => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/GlobalCustomFieldTabs b/rt/share/html/Admin/Elements/GlobalCustomFieldTabs
new file mode 100755
index 0000000..a53d7f2
--- /dev/null
+++ b/rt/share/html/Admin/Elements/GlobalCustomFieldTabs
@@ -0,0 +1,105 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/SystemTabs, subtabs => $tabs,
+ current_tab => 'Admin/Global/CustomFields/index.html',
+ current_subtab => $current_tab,
+ Title => $Title &>
+<%INIT>
+
+my $tabs = {
+
+ A => {
+ title => loc('Users'),
+ text => loc('Select custom fields for all users'),
+ path => 'Admin/Global/CustomFields/Users.html',
+ },
+
+ B => {
+ title => loc('Groups'),
+ text => loc('Select custom fields for all user groups'),
+ path => 'Admin/Global/CustomFields/Groups.html',
+ },
+
+ C => {
+ title => loc('Queues'),
+ text => loc('Select custom fields for all queues'),
+ path => 'Admin/Global/CustomFields/Queues.html',
+ },
+
+ F => {
+ title => loc('Tickets'),
+ text => loc('Select custom fields for tickets in all queues'),
+ path => 'Admin/Global/CustomFields/Queue-Tickets.html',
+ },
+
+ G => {
+ title => loc('Ticket Transactions'),
+ text => loc('Select custom fields for transactions on tickets in all queues'),
+ path => 'Admin/Global/CustomFields/Queue-Transactions.html',
+ },
+
+};
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+
+ foreach my $tab (sort keys %{$tabs}) {
+ if ($tabs->{$tab}->{'path'} eq $current_tab) {
+ $tabs->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+ }
+</%INIT>
+
+
+<%ARGS>
+$id => undef
+$current_tab => ''
+$subtabs => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/GroupTabs b/rt/share/html/Admin/Elements/GroupTabs
new file mode 100755
index 0000000..2b5bb65
--- /dev/null
+++ b/rt/share/html/Admin/Elements/GroupTabs
@@ -0,0 +1,102 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Tabs,
+ subtabs => $tabs,
+ current_tab => 'Admin/Groups/',
+ current_subtab => $current_tab,
+ Title => $Title &>
+<%INIT>
+my $tabs;
+
+if ( $GroupObj and $GroupObj->id ) {
+$tabs->{"this"} = { class => "currentnav",
+ path => "Admin/Groups/Modify.html?id=" . $GroupObj->id,
+ title => $GroupObj->Name,
+ current_subtab => $current_subtab,
+ subtabs => {
+ C => { title => loc('Basics'),
+ path => "Admin/Groups/Modify.html?id=" . $GroupObj->id },
+
+ D => { title => loc('Members'),
+ path => "Admin/Groups/Members.html?id=" . $GroupObj->id },
+
+ F => { title => loc('Group Rights'),
+ path => "Admin/Groups/GroupRights.html?id=" . $GroupObj->id, },
+ G => { title => loc('User Rights'),
+ path => "Admin/Groups/UserRights.html?id=" . $GroupObj->id, },
+ H => { title => loc('History'),
+ path => "Admin/Groups/History.html?id=" . $GroupObj->id },
+ }
+}
+}
+$tabs->{"A"} = { title => loc('Select'),
+ path => "Admin/Groups/", };
+$tabs->{"B"} = { title => loc('Create'),
+ path => "Admin/Groups/Modify.html?Create=1",
+ separator => 1, };
+
+# Now let callbacks add their extra tabs
+$m->callback( %ARGS, tabs => $tabs );
+foreach my $tab ( sort keys %{$tabs->{'this'}->{'subtabs'}} ) {
+ if ( $tabs->{'this'}->{'subtabs'}->{$tab}->{'path'} eq $current_tab ) {
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+}
+ $tabs->{'this'}->{"current_subtab"} = $current_tab;
+ $current_tab = "Admin/Groups/Modify.html?id=".$GroupObj->id if $GroupObj;
+
+</%INIT>
+<%ARGS>
+$GroupObj => undef
+$subtabs => undef
+$current_subtab => undef
+$current_tab => undef
+$Title => undef
+</%ARGS>
+
diff --git a/rt/share/html/Admin/Elements/Header b/rt/share/html/Admin/Elements/Header
new file mode 100755
index 0000000..659c40b
--- /dev/null
+++ b/rt/share/html/Admin/Elements/Header
@@ -0,0 +1,52 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, %ARGS &>
+
+<%ARGS>
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/ListGlobalCustomFields b/rt/share/html/Admin/Elements/ListGlobalCustomFields
new file mode 100755
index 0000000..d377721
--- /dev/null
+++ b/rt/share/html/Admin/Elements/ListGlobalCustomFields
@@ -0,0 +1,61 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% my $count = 0;
+% while (my $CustomFieldObj = $CustomFields->Next) {
+% $count++;
+<font size="-1"><%$CustomFieldObj->id%>/<% loc($CustomFieldObj->Type) %>/<%$CustomFieldObj->Name%>: <%$CustomFieldObj->Description%></font>
+<br />
+% }
+% if (!$count) {
+<font size="-1"><&|/l&>(No custom fields)</&></font>
+% }
+
+<%init>
+my $CustomFields = new RT::CustomFields ($session{'CurrentUser'});
+$CustomFields->LimitToGlobal();
+</%INIT>
diff --git a/rt/share/html/Admin/Elements/ListGlobalScrips b/rt/share/html/Admin/Elements/ListGlobalScrips
new file mode 100755
index 0000000..e03224a
--- /dev/null
+++ b/rt/share/html/Admin/Elements/ListGlobalScrips
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% unless ( $Scrips->Count ) {
+<p><i><&|/l&>(No scrips)</&></i></p>
+% } else {
+
+<& /Elements/CollectionList,
+ OrderBy => 'Description',
+ Order => 'ASC',
+ Rows => 0,
+ %ARGS,
+ Format => $Format,
+ Collection => $Scrips,
+ ShowHeader => 0,
+&>
+
+% }
+
+<%init>
+my $Format = q{'<a href="__WebPath__/Admin/Global/Scrip.html?id=__id__&Queue=0">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Global/Scrip.html?id=__id__&Queue=0">__AutoDescription__</a>/TITLE:Condition, Action and Template'}
+ .q{__NEWLINE__,'','<small>__Description__</small>'};
+
+my $Scrips = RT::Scrips->new( $session{'CurrentUser'} );
+$Scrips->LimitToGlobal;
+</%INIT>
diff --git a/rt/share/html/Admin/Elements/ModifyTemplate b/rt/share/html/Admin/Elements/ModifyTemplate
new file mode 100755
index 0000000..a005761
--- /dev/null
+++ b/rt/share/html/Admin/Elements/ModifyTemplate
@@ -0,0 +1,84 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+<tr>
+<td align="right">
+<&|/l&>Name</&>:
+</td>
+<td>
+<input name="Name" value="<%$Name%>" size="20" /><br />
+</td>
+</tr>
+<tr>
+<td align="right">
+<&|/l&>Description</&>:
+</td>
+<td>
+<input name="Description" value="<%$Description%>" size="80" /><br />
+</td>
+</tr>
+<tr>
+<td align="right" valign="top">
+<&|/l&>Content</&>:<br />
+</td>
+<td>
+<textarea name="Content" rows="25" cols="80" wrap="soft">
+<%$Content%></textarea>
+</td>
+</tr>
+</table>
+
+<%INIT>
+
+</%INIT>
+
+<%ARGS>
+$Name => undef
+$Description => undef
+$Content => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/ObjectCustomFields b/rt/share/html/Admin/Elements/ObjectCustomFields
new file mode 100644
index 0000000..d3fc28b
--- /dev/null
+++ b/rt/share/html/Admin/Elements/ObjectCustomFields
@@ -0,0 +1,111 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& $ObjectTabs,
+$id ? (
+ id => $Object->id,
+ current_tab => "Admin/$Types/CustomFields.html?$sub_type_url&id=".$id,
+ current_subtab => "Admin/$Types/CustomFields.html?$sub_type_url&id=".$id,
+ "${Type}Obj" => $Object,
+) : (
+ current_tab => "Admin/Global/CustomFields/${QualifiedType}s.html",
+),
+ Title => $title
+ &>
+
+<& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object &>
+<%INIT>
+# XXX TODO: Validate here?
+#$ObjectType =~ /^RT::(Queue|User|Group)$/
+# or Abort(loc("Object of type [_1] cannot take custom fields", $ObjectType), SuppressHeader => 1);
+
+
+
+my $Type = $1;
+my $Types = $Type.'s';
+my $ObjectTabs;
+my $Object = $ObjectType->new($session{'CurrentUser'});
+
+
+my $QualifiedType;
+my $FriendlySubTypes;
+if (defined $SubType && $SubType =~/^RT::(.*)$/) {
+ $FriendlySubTypes = RT::CustomField->new($session{'CurrentUser'})->FriendlyLookupType($Object->CustomFieldLookupType);
+ $QualifiedType = "$Type-$1";
+} else {
+ $QualifiedType = $Type;
+}
+
+if ($id) {
+ $Object->Load($id) || Abort(loc("Couldn't load object [_1]", $id), SuppressHeader => 1);
+ $ObjectTabs = "/Admin/Elements/${Type}Tabs";
+} else {
+ $ObjectTabs = "/Admin/Elements/GlobalCustomFieldTabs";
+
+}
+
+my $title;
+if ($id) {
+$title = loc('Edit Custom Fields for [_1]', $Object->Name);
+}
+elsif ($SubType) {
+
+ $title= loc("Modify Custom Fields which apply to [_1] for all [_2]", loc(lc($FriendlySubTypes)), loc(lc($Types)));
+} else {
+ $title =loc("Modify Custom Fields which apply to all [_1]", loc(lc($Types)));
+
+}
+my $sub_type_url;
+$sub_type_url = "SubType=$SubType" if $SubType;
+
+</%INIT>
+<%ARGS>
+$id => undef
+$ObjectType
+$SubType => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/PickCustomFields b/rt/share/html/Admin/Elements/PickCustomFields
new file mode 100644
index 0000000..b272279
--- /dev/null
+++ b/rt/share/html/Admin/Elements/PickCustomFields
@@ -0,0 +1,98 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if (@CustomFields == 0) {
+<p><i><&|/l&>(None)</&></i></p>
+% } else {
+<table cellspacing="0" cellpadding="2">
+% my $count;
+% foreach my $CustomFieldObj (@CustomFields) {
+<tr>
+% if (!$ReadOnly) {
+ <td valign="top">
+<input type="checkbox" class="checkbox" name="Object-<%$id%>-CF-<%$CustomFieldObj->Id%>" value="1" <% $Checked ? 'checked="checked"' : '' %>
+/>
+ </td>
+% }
+ <td valign="top">
+ <a href="<% RT->Config->Get('WebPath') %>/Admin/CustomFields/Modify.html?id=<%$CustomFieldObj->id()%>">
+% if ($CustomFieldObj->Name) {
+<b><%$CustomFieldObj->Name%></b>
+% } else {
+<i>(<&|/l&>no name</&>)</i>
+% }
+</a><br />
+ <%$CustomFieldObj->Description%>
+ </td>
+ <td valign="top">
+ <i><% $CustomFieldObj->FriendlyTypeComposite %></i>
+ </td>
+% # show 'move up' unless it's the first item
+% if ($count++ and $Checked) {
+ <td valign="top">
+ [<a href="<%RT->Config->Get('WebPath')%><% $m->request_comp->path |n %>?id=<%$id%>&SubType=<%$SubType%>&CustomField=<%$CustomFieldObj->id%>&Move=-1"><&|/l&>Move up</&></a>]
+% } else {
+ <td valign="top" align="right">
+% }
+
+% # show 'move down' unless it's the last item
+% if ($count != @CustomFields and $Checked) {
+% $m->print(' | ') if $count > 1;
+ [<a href="<%RT->Config->Get('WebPath')%><% $m->request_comp->path |n %>?id=<%$id%>&SubType=<%$SubType%>&CustomField=<%$CustomFieldObj->id%>&Move=1"><&|/l&>Move down</&></a>]
+% }
+ </td>
+</tr>
+% }
+</table>
+% }
+<%ARGS>
+@CustomFields
+$id
+$ReadOnly => 0
+$Checked => 0
+$SubType
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/PickObjects b/rt/share/html/Admin/Elements/PickObjects
new file mode 100644
index 0000000..74e02c9
--- /dev/null
+++ b/rt/share/html/Admin/Elements/PickObjects
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if (@Objects == 0) {
+<p><i><&|/l&>(None)</&></i></p>
+% } else {
+<table cellspacing="0" cellpadding="2">
+% my $count;
+% foreach my $Object (@Objects) {
+<tr>
+% my $id = "Object-".$Object->id."-CF-".$id;
+% if (!$ReadOnly) {
+ <td valign="top">
+<input type="checkbox" id="<% $id %>" name="<% $id %>" value="1" <% $Checked ? 'checked="checked"' : ''%>
+/>
+ </td>
+% }
+ <td valign="top">
+ <label for="<% $id %>">
+% if ($Object->Name) {
+ <b><%$Object->Name%></b><br />
+% } else {
+ <i>(<%loc("no name")%>)</i><br />
+% }
+ <%$Object->can('Description') ? ($Object->Description||'') : '' %>
+ </label>
+ </td>
+</tr>
+% }
+</table>
+% }
+<%ARGS>
+@Objects
+$id
+$ReadOnly => 0
+$Checked => 0
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/QueueRightsForUser b/rt/share/html/Admin/Elements/QueueRightsForUser
new file mode 100755
index 0000000..60651ee
--- /dev/null
+++ b/rt/share/html/Admin/Elements/QueueRightsForUser
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<ul>
+%while(my $ACE = $ACL->Next) {
+
+<li><checkbox name="delete_ace_<%$ACE->id%>" value="1"> <% loc($ACE->RightName) %> (<%$ACE->UserObj->RealName%>)
+
+%}
+</ul>
+
+<%INIT>
+my $ACL = new RT::ACL($session{'CurrentUser'});
+$ACL->LimitToQueue($QueueObj->id);
+$ACL->LimitPrincipalToUser($PrincipalId);
+</%INIT>
+<%ARGS>
+$PrincipalId => undef
+$QueueObj => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/QueueTabs b/rt/share/html/Admin/Elements/QueueTabs
new file mode 100755
index 0000000..b4f2d1f
--- /dev/null
+++ b/rt/share/html/Admin/Elements/QueueTabs
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Tabs,
+ subtabs => $tabs,
+ current_tab => 'Admin/Queues/',
+ current_subtab => $current_tab,
+ Title => $Title &>
+
+<%INIT>
+my $tabs;
+if ($id) {
+ $tabs->{'this'} = {
+ title => $QueueObj->Name,
+ path => "Admin/Queues/Modify.html?id=".$id,
+ current_subtab => $current_tab,
+ subtabs => {
+ C => { title => loc('Basics'),
+ path => "Admin/Queues/Modify.html?id=".$id,
+ },
+ D => { title => loc('Watchers'),
+ path => "Admin/Queues/People.html?id=".$id,
+ },
+
+ E => { title => loc('Scrips'),
+ path => "Admin/Queues/Scrips.html?id=".$id,
+ },
+ F => { title => loc('Templates'),
+ path => "Admin/Queues/Templates.html?id=".$id,
+ },
+
+ G1 => { title => loc('Ticket Custom Fields'),
+ path => 'Admin/Queues/CustomFields.html?SubType=RT::Ticket&id='.$id,
+ },
+
+ G2 => { title => loc('Transaction Custom Fields'),
+ path => 'Admin/Queues/CustomFields.html?SubType=RT::Ticket-RT::Transaction&id='.$id,
+ },
+
+ H => { title => loc('Group Rights'),
+ path => "Admin/Queues/GroupRights.html?id=".$id,
+ },
+ I => { title => loc('User Rights'),
+ path => "Admin/Queues/UserRights.html?id=".$id,
+ },
+ J => { title => loc('History'),
+ path => "Admin/Queues/History.html?id=" . $QueueObj->id
+ },
+ }
+ };
+}
+if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminQueue')) {
+ $tabs->{"A"} = { title => loc('Select'),
+ path => "Admin/Queues/",
+ };
+ $tabs->{"B"} = { title => loc('Create'),
+ path => "Admin/Queues/Modify.html?Create=1",
+ separator => 1, };
+}
+
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+foreach my $tab ( sort keys %{$tabs->{'this'}->{'subtabs'}} ) {
+ if ( $tabs->{'this'}->{'subtabs'}->{$tab}->{'path'} eq $current_tab ) {
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+}
+ $current_tab = "Admin/Queues/Modify.html?id=".$id if $id;
+</%INIT>
+
+<%ARGS>
+$QueueObj => undef
+$id => undef
+$subtabs => undef
+$current_subtab => undef
+$current_tab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectCustomField b/rt/share/html/Admin/Elements/SelectCustomField
new file mode 100644
index 0000000..1eb1f63
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectCustomField
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value="" <% not $Default and qq[ selected="selected"] |n %>>--</option>
+% while (my $CustomFieldObj = $CustomFields->Next) {
+% next if $OnlySelectionType and not $CustomFieldObj->IsSelectionType;
+% next if $Not and $CustomFieldObj->id == $Not;
+<option value="<%$CustomFieldObj->id%>"<% $Default == $CustomFieldObj->id && qq[ selected="selected"] |n%>><% $CustomFieldObj->Name %></option>
+%}
+</select>
+<%INIT>
+my $CustomFields = RT::CustomFields->new($session{'CurrentUser'});
+$CustomFields->UnLimit;
+$CustomFields->LimitToLookupType( $LookupType ) if $LookupType;
+$CustomFields->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'Name' } );
+
+$Default = $Default->id || 0 if ref $Default;
+</%INIT>
+<%ARGS>
+$None => 1
+$Name => 'BasedOn'
+$Default => 0
+$LookupType => 'RT::Queue-RT::Ticket'
+$OnlySelectionType => 1
+$Not => 0
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectCustomFieldLookupType b/rt/share/html/Admin/Elements/SelectCustomFieldLookupType
new file mode 100644
index 0000000..c4e7a56
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectCustomFieldLookupType
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+%for my $option ($cf->LookupTypes) {
+<option value="<%$option%>"<%defined ($Default) && ($option eq $Default) && qq[ selected="selected"] |n%>><% $cf->FriendlyLookupType($option) %></option>
+%}
+</select>
+<%INIT>
+my $cf = RT::CustomField->new($session{'CurrentUser'});
+
+</%INIT>
+<%ARGS>
+$Default=> ''
+$Name => 'LookupType'
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectCustomFieldType b/rt/share/html/Admin/Elements/SelectCustomFieldType
new file mode 100755
index 0000000..a37b800
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectCustomFieldType
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+%for my $option ($cf->TypeComposites) {
+<option value="<%$option%>"<%$option eq $Default && qq[ selected="selected"] |n%>><% $cf->FriendlyTypeComposite($option) %></option>
+%}
+</select>
+<%INIT>
+my $cf = RT::CustomField->new($session{'CurrentUser'});
+
+</%INIT>
+<%ARGS>
+$Default=>undef
+$Name => 'TypeComposite'
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectGroups b/rt/share/html/Admin/Elements/SelectGroups
new file mode 100755
index 0000000..b625025
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectGroups
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select multiple="multiple" name="<%$Name%>" size="10">
+%while (my $group = $groups->Next) {
+<option value="<%$group->id%>"><%$group->Name%>
+%}
+</select>
+
+<%INIT>
+my $groups = new RT::Groups($session{'CurrentUser'});
+$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain);
+
+</%INIT>
+<%ARGS>
+$Name => 'groups'
+$Domain => 'UserDefined';
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectModifyGroup b/rt/share/html/Admin/Elements/SelectModifyGroup
new file mode 100755
index 0000000..1bf4d22
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectModifyGroup
@@ -0,0 +1,57 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%while ( $Group = $Groups->Next) {
+<a href="Modify.html?id=<%$Group->id%>"><%$Group->id%>: <%$Group->Name%></a><br />
+%}
+<%INIT>
+my ($Group);
+my $Groups = new RT::Groups($session{'CurrentUser'});
+$Groups->UnLimit;
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectModifyQueue b/rt/share/html/Admin/Elements/SelectModifyQueue
new file mode 100755
index 0000000..f5ba692
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectModifyQueue
@@ -0,0 +1,57 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%while ( $queue = $queues->Next) {
+<a href="Modify.html?id=<%$queue->id%>"><%$queue->id%>: <%$queue->Name%></a><br />
+%}
+<%INIT>
+my ($queue);
+my $queues = new RT::Queues($session{'CurrentUser'});
+$queues->UnLimit;
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectModifyUser b/rt/share/html/Admin/Elements/SelectModifyUser
new file mode 100755
index 0000000..32a60ba
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectModifyUser
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%while ( $user = $users->Next) {
+<a href="Modify.html?id=<%$user->id%>"><%$user->id%>: <& /Elements/ShowUser, User => $user &></a><br />
+%}
+<%INIT>
+my ($user);
+my $users = new RT::Users($session{'CurrentUser'});
+$users->Limit(FIELD => 'id',
+ VALUE => $RT::SystemUser->id,
+ OPERATOR => '!=' );
+
+if (defined $IdLike) {
+$users->Limit(FIELD => 'Name',
+ VALUE => $IdLike,
+ OPERATOR => 'LIKE' );
+}
+if (defined $EmailLike) {
+$users->Limit(FIELD => 'EmailAddress',
+ VALUE => $EmailLike,
+ OPERATOR => 'LIKE');
+
+}
+</%INIT>
+<%ARGS>
+$IdLike => undef
+$EmailLike => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectNewGroupMembers b/rt/share/html/Admin/Elements/SelectNewGroupMembers
new file mode 100755
index 0000000..1083b43
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectNewGroupMembers
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ( $Show ne 'Groups' ) {
+<b><&|/l&>Users</&></b>
+<br />
+<select multiple="multiple" name="<% $Name %>Users" size="10">
+<%perl>
+my @users = sort { lc($a->[0]) cmp lc($b->[0]) }
+ map { [$m->scomp("/Elements/ShowUser", User => $_), $_] }
+ @{ $users->ItemsArrayRef };
+</%perl>
+% for (@users) {
+% my ($rendered, $user) = @$_;
+% next if $SkipUsers->{ $user->id };
+<option value="User-<% $user->id %>"><% $rendered |n%></option>
+% }
+</select>
+<br />
+% }
+
+% if ( $Show ne 'Users' ) {
+<b><&|/l&>Groups</&></b>
+<br />
+<select multiple="multiple" name="<% $Name %>Groups" size="10">
+% while ( my $group = $groups->Next ) {
+% next if $SkipGroups->{ $group->id };
+<option value="Group-<% $group->id %>"><% $group->Name %></option>
+% }
+</select>
+% }
+
+<%INIT>
+my $users = new RT::Users($session{'CurrentUser'});
+
+$users->Limit(
+ FIELD => 'id',
+ VALUE => $RT::SystemUser->id,
+ OPERATOR => '!=',
+ ENTRYAGGREGATOR => 'AND'
+);
+$users->Limit(
+ FIELD => 'id',
+ VALUE => $RT::Nobody->id,
+ OPERATOR => '!=',
+ ENTRYAGGREGATOR => 'AND'
+);
+$users->LimitToPrivileged();
+
+my $groups = new RT::Groups($session{'CurrentUser'});
+
+# self-recursive group membership considered harmful!
+$groups->Limit(FIELD => 'id', VALUE => $Group->id, OPERATOR => '!=' );
+$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined');
+
+
+</%INIT>
+<%ARGS>
+$Name => 'Users'
+$Show => 'All'
+$Group
+$SkipUsers => {}
+$SkipGroups => {}
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectRights b/rt/share/html/Admin/Elements/SelectRights
new file mode 100755
index 0000000..4c1940a
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectRights
@@ -0,0 +1,121 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<input type="hidden" class="hidden" name="CheckACL" value="<%$ACLDesc%>" />
+ <table border="0">
+<tr>
+<td valign="top" width="180" align="left">
+<%PERL>
+my %current_rights;
+my @pairs;
+while ( my $ace = $ACLObj->Next ) {
+ my $right = $ace->RightName;
+ $current_rights{ $right } = 1;
+ push @pairs, [$right, loc($right)];
+}
+@pairs = sort { $a->[1] cmp $b->[1] } @pairs;
+</%PERL>
+<h3><&|/l&>Current rights</&></h3>
+% unless ( @pairs ) {
+<i><&|/l&>No rights granted.</&></i> <br />
+% } else {
+<i>(<&|/l&>Check box to revoke right</&>)</i><br />
+% foreach my $pair ( @pairs ) {
+<input type="checkbox" class="checkbox" value="<% $pair->[0] %>" name="RevokeRight-<% $ACLDesc %>" />&nbsp;<% $pair->[1] %><br />
+% } }
+</td>
+<td valign="top">
+<h3><&|/l&>New rights</&></h3>
+<select size="5" multiple="multiple" name="GrantRight-<%$ACLDesc%>">
+% foreach my $pair (sort { $a->[1] cmp $b->[1] } map [$_, loc($_)], grep !$current_rights{$_}, keys %Rights) {
+ <option value="<% $pair->[0] %>" title="<% loc($Rights{$pair->[0]}) %>"><% $pair->[1] %></option>
+% }
+<option value="" selected="selected"><&|/l&>(no value)</&></option>
+</select>
+</td>
+</tr>
+</table>
+<%INIT>
+ my ($ACLDesc, $AppliesTo, %Rights);
+
+ # if the principal id points to a user, we really want to point
+ # to their ACL equivalence group. The machinations we're going through
+ # lead me to start to suspect that we really want users and groups
+ # to just be the same table. or _maybe_ that we want an object db.
+ my $princ = RT::Principal->new($RT::SystemUser);
+ $princ->Load($PrincipalId);
+ if ($princ->PrincipalType eq 'User') {
+ my $group = RT::Group->new($RT::SystemUser);
+ $group->LoadACLEquivalenceGroup($princ);
+ $PrincipalId = $group->PrincipalId;
+ }
+
+
+ my $ACLObj = new RT::ACL($session{'CurrentUser'});
+ my $ACE = new RT::ACE($session{'CurrentUser'});
+
+
+ $ACLObj->LimitToObject( $Object);
+ $ACLObj->LimitToPrincipal( Id => $PrincipalId);
+ $ACLObj->OrderBy(FIELD=>'RightName');
+
+ if (ref($Object) && UNIVERSAL::can($Object, 'AvailableRights')) {
+ %Rights = %{$Object->AvailableRights};
+ }
+
+ else {
+ %Rights = ( loc('System Error') => loc("No rights found") );
+ }
+
+ $ACLDesc = "$PrincipalId-".ref($Object)."-".$Object->Id;
+</%INIT>
+
+<%ARGS>
+$PrincipalType => undef
+$PrincipalId => undef
+$Object =>undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectScrip b/rt/share/html/Admin/Elements/SelectScrip
new file mode 100755
index 0000000..b5f6e63
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectScrip
@@ -0,0 +1,72 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value=""
+<% $Default eq undef && qq[ selected="selected"] |n %>
+>-</option>
+%while (my $Scrip = $Scrips->Next) {
+<option value="<% $Scrip->Id %>"
+<% $Scrip->Id == $Default && qq[ selected="selected"] |n %>
+><% loc($Scrip->Name) %>
+</option>
+%}
+</select>
+
+<%INIT>
+my $Scrips = RT::Scrips->new($session{'CurrentUser'});
+$Scrips->UnLimit;
+
+
+
+</%INIT>
+<%ARGS>
+
+$Default => undef
+$Name => 'Scrip'
+
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectScripAction b/rt/share/html/Admin/Elements/SelectScripAction
new file mode 100755
index 0000000..f6d5bb2
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectScripAction
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value=""
+<% ! defined $Default && qq[ selected="selected"] |n %>
+>-</option>
+%while (my $ScripAction = $ScripActions->Next) {
+<option value="<%$ScripAction->Id%>"
+<% defined $Default && $ScripAction->Id == $Default && qq[ selected="selected"] |n %>
+><% loc($ScripAction->Name) %>
+</option>
+%}
+</select>
+
+<%INIT>
+my $ScripActions = RT::ScripActions->new($session{'CurrentUser'});
+$ScripActions->UnLimit;
+$ScripActions->OrderBy(FIELD => 'Name');
+
+
+
+</%INIT>
+<%ARGS>
+
+$Default => undef
+$Name => 'ScripAction'
+
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectScripCondition b/rt/share/html/Admin/Elements/SelectScripCondition
new file mode 100755
index 0000000..34e700d
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectScripCondition
@@ -0,0 +1,72 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value=""
+<% ! defined $Default && qq[ selected="selected"] %>
+>-</option>
+%while (my $ScripCondition = $ScripConditions->Next) {
+<option value="<%$ScripCondition->Id%>"
+<% defined $Default && $ScripCondition->Id == $Default && qq[ selected="selected"] %>
+><% loc($ScripCondition->Name) %>
+</option>
+%}
+</select>
+
+<%INIT>
+my $ScripConditions = RT::ScripConditions->new($session{'CurrentUser'});
+$ScripConditions->UnLimit;
+$ScripConditions->OrderBy(FIELD => 'Name');
+
+
+</%INIT>
+<%ARGS>
+
+$Default => undef
+$Name => 'ScripCondition'
+
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectSingleOrMultiple b/rt/share/html/Admin/Elements/SelectSingleOrMultiple
new file mode 100755
index 0000000..07d224b
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectSingleOrMultiple
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+ <select name="<%$Name%>">
+ <option value="1" <%$SingleDefault|n%>><&|/l&>Single</&></option>
+ <option value="0" <%$MultipleDefault|n%>><&|/l&>Multiple</&></option>
+ </select>
+
+
+<%INIT>
+my ($SingleDefault, $MultipleDefault);
+if ($Default == 1) {
+ $SingleDefault = qq[ selected="selected"];
+}
+elsif ($Default == 0 ) {
+ $MultipleDefault = qq[ selected="selected"];
+}
+
+</%INIT>
+<%ARGS>
+$Name => 'Single'
+$Default => 1
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectStage b/rt/share/html/Admin/Elements/SelectStage
new file mode 100644
index 0000000..3188d0e
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectStage
@@ -0,0 +1,75 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+% foreach my $stage (@stages) {
+
+%# allow [stage, display] in place of a scalar stage name
+% my ($value, $display) = ref($stage) ? @$stage : ($stage, $stage);
+
+<option value="<%$value%>"
+<% ($value eq $Default) && qq[ selected="selected"] |n %>
+><% loc($display) %>
+</option>
+
+% }
+<%INIT>
+if ( !defined $Default || $Default eq '') {
+ $Default = 'TransactionCreate';
+}
+my @stages = 'TransactionCreate';
+
+push @stages, RT->Config->Get('UseTransactionBatch')
+ ? 'TransactionBatch'
+ : ['TransactionBatch', 'TransactionBatch (DISABLED)'];
+
+push @stages, 'Disabled';
+</%INIT>
+<%ARGS>
+$Default => 'TransactionCreate'
+$Name => 'Stage'
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectTemplate b/rt/share/html/Admin/Elements/SelectTemplate
new file mode 100755
index 0000000..c1a7a0f
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectTemplate
@@ -0,0 +1,87 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value=""
+<% defined($Default) && $Default eq 'none' && qq[ selected="selected"] |n %>
+>-</option>
+%while (my $Template = $PrimaryTemplates->Next) {
+<option value="<%$Template->Id%>"
+<% ($Template->Id == $Default) && qq[ selected="selected"] |n %>
+><% loc($Template->Name) %>
+</option>
+%}
+%while (my $Template = $OtherTemplates->Next) {
+<option value="<%$Template->Id%>"
+<% defined($Default) && ($Template->Id == $Default) && qq[ selected="selected"] |n %>
+><&|/l, loc($Template->Name) &>Global template: [_1]</&>
+</option>
+%}
+</select>
+
+<%INIT>
+
+
+my $PrimaryTemplates = RT::Templates->new($session{'CurrentUser'});
+if ($Queue != 0) {
+$PrimaryTemplates->LimitToQueue($Queue);
+$PrimaryTemplates->OrderBy(FIELD => 'Name');
+}
+
+my $OtherTemplates = RT::Templates->new($session{'CurrentUser'});
+$OtherTemplates->LimitToGlobal($DefaultQueue);
+$OtherTemplates->OrderBy(FIELD => 'Name');
+
+</%INIT>
+<%ARGS>
+
+$Queue => undef
+$Default => 'none'
+$DefaultQueue => undef
+$Name => 'Template'
+
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectUsers b/rt/share/html/Admin/Elements/SelectUsers
new file mode 100755
index 0000000..6ae6a1c5
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SelectUsers
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select multiple="multiple" name="<% $Name %>" size="10">
+% while ( my $user = $users->Next ) {
+<option value="<% $user->id %>">\
+<& /Elements/ShowUser, User => $user &>\
+</option>
+% }
+</select>
+
+<%INIT>
+my $users = new RT::Users($session{'CurrentUser'});
+
+$users->Limit(FIELD => 'id', VALUE => $RT::SystemUser->id, OPERATOR => '!=' );
+$users->Limit(FIELD => 'id', VALUE => $RT::Nobody->id, OPERATOR => '!=' );
+$users->LimitToPrivileged();
+
+</%INIT>
+<%ARGS>
+$Name => 'Users'
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/ShowKeyInfo b/rt/share/html/Admin/Elements/ShowKeyInfo
new file mode 100644
index 0000000..35d38a7
--- /dev/null
+++ b/rt/share/html/Admin/Elements/ShowKeyInfo
@@ -0,0 +1,91 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => $title &>
+% if ( $res{'exit_code'} || !keys %{ $res{'info'} } ) {
+<% loc('No keys for this address') %>
+% } else {
+<table>
+
+% unless ( $Type eq 'private' ) {
+<tr><th><% loc('Trust') %>:</th> <td><% loc( $res{'info'}{'Trust'} ) %></td></tr>
+% }
+
+<tr><th><% loc('Created') %>:</th>
+<td><% $res{'info'}{'Created'}? $res{'info'}{'Created'}->AsString( Time => 0 ): loc('never') %></td></tr>
+
+<tr><th><% loc('Expire') %>:</th>
+<td><% $res{'info'}{'Expire'}? $res{'info'}{'Expire'}->AsString( Time => 0 ): loc('never') %></td></tr>
+
+% foreach my $uinfo( @{ $res{'info'}{'User'} } ) {
+<tr><th><% loc('User (created - expire)') %>:</th>
+<td><% $uinfo->{'String'} %>\
+(<% $uinfo->{'Created'}? $uinfo->{'Created'}->AsString( Time => 0 ): loc('never') %> - \
+<% $uinfo->{'Expire'}? $uinfo->{'Expire'}->AsString( Time => 0 ): loc('never') %>)
+</td></tr>
+% }
+
+</table>
+% }
+</&>
+
+<%ARGS>
+$EmailAddress
+$Type => 'public'
+</%ARGS>
+<%INIT>
+require RT::Crypt::GnuPG;
+my %res = RT::Crypt::GnuPG::GetKeyInfo( $EmailAddress, $Type );
+
+my $title;
+unless ( $Type eq 'private' ) {
+ $title = loc('GnuPG public key(s) for [_1]', $EmailAddress);
+} else {
+ $title = loc('GnuPG private key(s) for [_1]', $EmailAddress);
+}
+
+</%INIT>
diff --git a/rt/share/html/Admin/Elements/SystemTabs b/rt/share/html/Admin/Elements/SystemTabs
new file mode 100755
index 0000000..4a20dab
--- /dev/null
+++ b/rt/share/html/Admin/Elements/SystemTabs
@@ -0,0 +1,102 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Tabs, subtabs => $tabs,
+ current_tab => 'Admin/Global/',
+ current_subtab => $current_tab,
+ Title => $Title &>
+
+<%INIT>
+ my $tabs = {
+
+ A => { title => loc('Scrips'),
+ path => 'Admin/Global/Scrips.html',
+ },
+ B => { title => loc('Templates'),
+ path => 'Admin/Global/Templates.html',
+ },
+
+ F => { title => loc('Custom Fields'),
+ path => 'Admin/Global/CustomFields/index.html',
+ },
+
+ G => { title => loc('Group Rights'),
+ path => 'Admin/Global/GroupRights.html',
+ },
+ H => { title => loc('User Rights'),
+ path => 'Admin/Global/UserRights.html',
+ },
+ I => { title => loc('RT at a glance'),
+ path => 'Admin/Global/MyRT.html',
+ },
+
+};
+
+# Use current $tabs as $subtabs if there is no $subtabs for this tab
+$subtabs = ($subtabs) ? $subtabs : $tabs;
+
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+
+ if ($current_tab) {
+ foreach my $tab (sort keys %{$tabs}) {
+ if ($tabs->{$tab}->{'path'} eq $current_tab) {
+ $tabs->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+ }
+ }
+</%INIT>
+
+
+<%ARGS>
+$id => undef
+$current_tab => undef
+$subtabs => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/Tabs b/rt/share/html/Admin/Elements/Tabs
new file mode 100755
index 0000000..f7b0ad7
--- /dev/null
+++ b/rt/share/html/Admin/Elements/Tabs
@@ -0,0 +1,95 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Tabs,
+ tabs => $tabs,
+ current_toptab => 'Admin/',
+ current_tab => $current_tab,
+ Title => $Title &>
+
+<%INIT>
+ my $tabs = { A => { title => loc('Users'),
+ path => 'Admin/Users/',
+ },
+ B => { title => loc('Groups'),
+ path => 'Admin/Groups/',
+ },
+ C => { title => loc('Queues'),
+ path => 'Admin/Queues/',
+ },
+ D => { 'title' => loc('Custom Fields'),
+ path => 'Admin/CustomFields/',
+ },
+ E => { 'title' => loc('Global'),
+ path => 'Admin/Global/',
+ },
+ F => { 'title' => loc('Tools'),
+ path => 'Admin/Tools/',
+ },
+ };
+
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+
+ if( defined $current_tab ) {
+ foreach my $tab (keys %{$tabs}) {
+ if ($tabs->{$tab}->{'path'} eq $current_tab) {
+ $tabs->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+ }
+ }
+
+</%INIT>
+
+
+<%ARGS>
+$subtabs => undef
+$current_tab => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/ToolTabs b/rt/share/html/Admin/Elements/ToolTabs
new file mode 100755
index 0000000..d8be841
--- /dev/null
+++ b/rt/share/html/Admin/Elements/ToolTabs
@@ -0,0 +1,82 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Tabs,
+ Title => $Title,
+ current_tab => 'Admin/Tools/',
+ subtabs => $tabs,
+ current_subtab => $current_tab,
+&>
+
+<%INIT>
+ my $tabs = {
+ A => { title => loc('System Configuration'),
+ path => 'Admin/Tools/Configuration.html',
+ },
+ E => { title => loc('Shredder'),
+ path => 'Admin/Tools/Shredder/',
+ },
+ };
+
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+
+ foreach my $tab ( values %{$tabs} ) {
+ next unless $tab->{'path'} eq $current_tab;
+
+ $tab->{"subtabs"} = $subtabs;
+ $tab->{"current_subtab"} = $current_subtab;
+ }
+</%INIT>
+
+<%ARGS>
+$id => undef
+$current_tab => undef
+$subtabs => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/UserTabs b/rt/share/html/Admin/Elements/UserTabs
new file mode 100755
index 0000000..a5c3d9a
--- /dev/null
+++ b/rt/share/html/Admin/Elements/UserTabs
@@ -0,0 +1,116 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Tabs,
+ subtabs => $tabs,
+ current_tab => 'Admin/Users/',
+ current_subtab => $current_tab,
+ Title => $Title &>
+<%INIT>
+my $tabs;
+if ($id) {
+$tabs->{'this'} = { title => eval { $UserObj->Name },
+
+ path => "Admin/Users/Modify.html?id=".$id,
+subtabs => {
+ Basics => { title => loc('Basics'),
+ path => "Admin/Users/Modify.html?id=".$id
+ },
+ Memberships => { title => loc('Memberships'),
+ path => "Admin/Users/Memberships.html?id=".$id
+ },
+ History => { title => loc('History'),
+ path => "Admin/Users/History.html?id=".$id
+ },
+ 'MyRT' => { title => loc('RT at a glance'),
+ path => "Admin/Users/MyRT.html?id=".$id
+ },
+ }
+};
+ if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
+ $tabs->{'this'}{'subtabs'}{'GnuPG'} = {
+ title => loc('GnuPG'),
+ path => "Admin/Users/GnuPG.html?id=".$id,
+ };
+ }
+}
+
+if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminUsers')) {
+ $tabs->{"A"} = { title => loc('Select'),
+ path => "Admin/Users/",
+ };
+ $tabs->{"B"} = { title => loc('Create'),
+ path => "Admin/Users/Modify.html?Create=1",
+ separator => 1,
+ };
+}
+
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+
+#foreach my $tab ( sort keys %{$tabs} ) {
+# if ( $tabs->{$tab}->{'path'} eq $current_subtab ) {
+# $tabs->{$tab}->{"current_subtab"} = $current_subtab;
+# }
+#}
+foreach my $tab ( sort keys %{$tabs->{'this'}->{'subtabs'}} ) {
+ if ( $tabs->{'this'}->{'subtabs'}->{$tab}->{'path'} eq $current_tab ) {
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{'this'}->{'subtabs'}->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+}
+$tabs->{'this'}->{"current_subtab"} = $current_tab;
+$current_tab = "Admin/Users/Modify.html?id=".$id if $id;
+</%INIT>
+<%ARGS>
+$UserObj => undef
+$id => undef
+$current_tab => undef
+$subtabs => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Global/CustomFields/Groups.html b/rt/share/html/Admin/Global/CustomFields/Groups.html
new file mode 100644
index 0000000..3b26aab
--- /dev/null
+++ b/rt/share/html/Admin/Global/CustomFields/Groups.html
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GlobalCustomFieldTabs,
+ current_tab => "Admin/Global/CustomFields/Groups.html",
+ current_subtab => "Admin/Global/CustomFields/Groups.html",
+ Title => $title
+ &>
+ <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Group', Object=> $object &>
+<%INIT>
+ my $title = loc( 'Edit Custom Fields for all groups');
+ my $object = RT::Group->new($session{'CurrentUser'});
+</%INIT>
diff --git a/rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html b/rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html
new file mode 100755
index 0000000..3ed3f36
--- /dev/null
+++ b/rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GlobalCustomFieldTabs,
+ current_tab => "Admin/Global/CustomFields/Queue-Tickets.html",
+ current_subtab => "Admin/Global/CustomFields/Queue-Tickets.html",
+ Title => $title
+ &>
+ <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object, SubType => 'RT::Ticket' &>
+<%INIT>
+ my $title = loc( 'Edit Custom Fields for tickets in all queues');
+ my $object = RT::Queue->new($session{'CurrentUser'});
+</%INIT>
diff --git a/rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html b/rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html
new file mode 100755
index 0000000..ea037a4
--- /dev/null
+++ b/rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GlobalCustomFieldTabs,
+ current_tab => "Admin/Global/CustomFields/Queue-Transactions.html",
+ current_subtab => "Admin/Global/CustomFields/Queue-Transactions.html",
+ Title => $title
+ &>
+ <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object, SubType => 'RT::Ticket-RT::Transaction' &>
+<%INIT>
+ my $title = loc( 'Edit Custom Fields for tickets in all queues');
+ my $object = RT::Queue->new($session{'CurrentUser'});
+</%INIT>
diff --git a/rt/share/html/Admin/Global/CustomFields/Queues.html b/rt/share/html/Admin/Global/CustomFields/Queues.html
new file mode 100644
index 0000000..72c9489
--- /dev/null
+++ b/rt/share/html/Admin/Global/CustomFields/Queues.html
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GlobalCustomFieldTabs,
+ current_tab => "Admin/Global/CustomFields/Queues.html",
+ current_subtab => "Admin/Global/CustomFields/Queues.html",
+ Title => $title
+ &>
+ <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object &>
+<%INIT>
+ my $title = loc( 'Edit Custom Fields for all queues');
+ my $object = RT::Queue->new($session{'CurrentUser'});
+</%INIT>
diff --git a/rt/share/html/Admin/Global/CustomFields/Users.html b/rt/share/html/Admin/Global/CustomFields/Users.html
new file mode 100644
index 0000000..a8fbd7c
--- /dev/null
+++ b/rt/share/html/Admin/Global/CustomFields/Users.html
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GlobalCustomFieldTabs,
+ current_tab => "Admin/Global/CustomFields/Users.html",
+ current_subtab => "Admin/Global/CustomFields/Users.html",
+ Title => $title
+ &>
+ <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::User', Object=> $object &>
+<%INIT>
+ my $title = loc( 'Edit Custom Fields for all users');
+ my $object = RT::User->new($session{'CurrentUser'});
+</%INIT>
diff --git a/rt/share/html/Admin/Global/CustomFields/index.html b/rt/share/html/Admin/Global/CustomFields/index.html
new file mode 100644
index 0000000..e6ea0d6
--- /dev/null
+++ b/rt/share/html/Admin/Global/CustomFields/index.html
@@ -0,0 +1,99 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback( %ARGS, tabs => $tabs );
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GlobalCustomFieldTabs, Title => $title &>
+
+<ul>
+% foreach my $key (sort keys %$tabs) {
+<li><span><a href="<% $tabs->{$key}{path} %>"><% $tabs->{$key}{title} %></a></span><br />
+<% $tabs->{$key}{text} %>
+</li>
+% }
+</ul>
+
+<%INIT>
+my $title = loc("Global custom field configuration");
+
+my $tabs = {
+
+ A => {
+ title => loc('Users'),
+ text => loc('Select custom fields for all users'),
+ path => 'Users.html',
+ },
+ B => {
+ title => loc('Groups'),
+ text => loc('Select custom fields for all user groups'),
+ path => 'Groups.html',
+ },
+
+ C => {
+ title => loc('Queues'),
+ text => loc('Select custom fields for all queues'),
+ path => 'Queues.html',
+ },
+
+ F => {
+ title => loc('Tickets'),
+ text => loc('Select custom fields for tickets in all queues'),
+ path => 'Queue-Tickets.html',
+ },
+
+ G => {
+ title => loc('Ticket Transactions'),
+ text =>
+ loc('Select custom fields for transactions on tickets in all queues'),
+ path => 'Queue-Transactions.html',
+ },
+
+};
+
+
+$m->callback( tabs => $tabs );
+</%INIT>
diff --git a/rt/share/html/Admin/Global/GroupRights.html b/rt/share/html/Admin/Global/GroupRights.html
new file mode 100755
index 0000000..cec1d90
--- /dev/null
+++ b/rt/share/html/Admin/Global/GroupRights.html
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Modify global group rights') &>
+<& /Admin/Elements/SystemTabs,
+ current_tab => 'Admin/Global/GroupRights.html',
+ Title => loc('Modify global group rights') &>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="GroupRights.html">
+
+<&| /Widgets/TitleBox, title => loc('Modify global group rights.')&>
+
+<h1><&|/l&>System groups</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToSystemInternalGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% loc($Group->Type) %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object =>$RT::System &>
+ </td>
+ </tr>
+% }
+</table>
+<h1><&|/l&>Roles</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToRolesForSystem();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% loc($Group->Type) %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object => $RT::System &>
+ </td>
+ </tr>
+% }
+</table>
+<h1><&|/l&>User defined groups</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToUserDefinedGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% $Group->Name %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object => $RT::System &>
+ </td>
+ </tr>
+% }
+</table>
+
+ </&>
+ <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &>
+
+ </form>
+
+<%INIT>
+
+ #Update the acls.
+ my @results = ProcessACLChanges(\%ARGS);
+
+
+my $Groups;
+
+</%INIT>
+
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/Admin/Global/MyRT.html b/rt/share/html/Admin/Global/MyRT.html
new file mode 100644
index 0000000..1511173
--- /dev/null
+++ b/rt/share/html/Admin/Global/MyRT.html
@@ -0,0 +1,112 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc("RT at a glance") &>
+<& /Admin/Elements/SystemTabs,
+ current_tab => 'Admin/Global/MyRT.html',
+ Title => loc("RT at a glance"),
+&>
+
+<& /Widgets/SelectionBox:header, nojs => 1 &>
+
+<& /Elements/ListActions, actions => \@actions &>
+<br />
+% for my $pane (@panes) {
+<&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &>
+<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &></&>
+<br />
+% }
+<%init>
+my @actions;
+
+my @items = map { [ "component-$_", $_ ] } 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 $SearchType = $search->Content->{'SearchType'} || 'Ticket';
+ if ( $SearchType eq 'Ticket' ) {
+ push @items, [ "system-$desc", $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 ($default_portlets) = $sys->Attributes->Named('HomepageSettings');
+
+my $has_right = $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser');
+
+my @panes = $m->comp(
+ '/Admin/Elements/ConfigureMyRT',
+ panes => ['body', 'summary'],
+ Action => 'MyRT.html',
+ items => \@items,
+ ReadOnly => !$has_right,
+ current_portlets => $default_portlets->Content,
+ OnSave => sub {
+ my ( $conf, $pane ) = @_;
+ if (!$has_right) {
+ push @actions, loc( 'Permission denied' );
+ }
+ else {
+ $default_portlets->SetContent( $conf );
+ push @actions, loc( 'Global portlet [_1] saved.', $pane );
+ }
+ }
+);
+
+$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1 )
+ for @panes;
+
+
+</%init>
+
diff --git a/rt/share/html/Admin/Global/Scrip.html b/rt/share/html/Admin/Global/Scrip.html
new file mode 100755
index 0000000..e2fc741
--- /dev/null
+++ b/rt/share/html/Admin/Global/Scrip.html
@@ -0,0 +1,86 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/SystemTabs,
+ current_tab => 'Admin/Global/Scrips.html',
+ current_subtab => $current_subtab,
+ subtabs => $subtabs,
+ Title => $title &>
+
+<& /Elements/ListActions, actions => \@results &>
+<& /Admin/Elements/EditScrip, title => $title, %ARGS, id => $id &>
+
+<%init>
+my $subtabs = {
+ A => {
+ title => loc('Select'),
+ path => "Admin/Global/Scrips.html",
+ },
+ B => {
+ title => loc('New'),
+ path => "Admin/Global/Scrip.html?create=1&Queue=0",
+ separator => 1,
+ },
+};
+
+my ($id, @results) = $m->comp( '/Admin/Elements/EditScrip:Process', %ARGS );
+
+my ($title, $current_subtab);
+if ( $id ) {
+ $current_subtab = "Admin/Global/Scrip.html?id=$id&Queue=0";
+ $title = loc("Modify a scrip that applies to all queues");
+ $subtabs->{"C"} = {
+ title => loc('Scrip #[_1]', $id),
+ path => "Admin/Global/Scrip.html?id=$id&Queue=0",
+ };
+}
+else {
+ $current_subtab = "Admin/Global/Scrip.html?create=1&Queue=0";
+ $title = loc("Add a scrip which will apply to all queues");
+}
+</%init>
diff --git a/rt/share/html/Admin/Global/Scrips.html b/rt/share/html/Admin/Global/Scrips.html
new file mode 100755
index 0000000..da72e8f
--- /dev/null
+++ b/rt/share/html/Admin/Global/Scrips.html
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/SystemTabs,
+ current_tab => 'Admin/Global/Scrips.html',
+ current_subtab => 'Admin/Global/Scrips.html',
+ subtabs => $subtabs,
+ Title => $title &>
+<& /Admin/Elements/EditScrips, title => $title, id => $id, %ARGS &>
+</form>
+<%init>
+
+my $subtabs = {
+ A => { title => loc('Select'),
+ path => "Admin/Global/Scrips.html",
+ },
+ B => { title => loc('New'),
+ path => "Admin/Global/Scrip.html?create=1&Queue=0",
+ separator => 1,
+ }
+ };
+my $title = loc("Modify scrips which apply to all queues");
+
+my (@actions);
+
+</%init>
+
+
+
+<%ARGS>
+$id => 0
+</%ARGS>
diff --git a/rt/share/html/Admin/Global/Template.html b/rt/share/html/Admin/Global/Template.html
new file mode 100755
index 0000000..f833f8e
--- /dev/null
+++ b/rt/share/html/Admin/Global/Template.html
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/SystemTabs,
+ current_tab => 'Admin/Global/Templates.html',
+ current_subtab => $current_subtab,
+ subtabs => $subtabs,
+ Title => $title &>
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="Template.html">
+%if ($Create ) {
+<input type="hidden" class="hidden" name="Template" value="new" />
+% } else {
+<input type="hidden" class="hidden" name="Template" value="<%$TemplateObj->Id%>" />
+% }
+
+%# hang onto the queue id
+<input type="hidden" class="hidden" name="Queue" value="<%$Queue%>" />
+<& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name, Description =>
+$TemplateObj->Description, Content => $TemplateObj->Content &>
+<& /Elements/Submit, Label => $SubmitLabel, Reset => 1 &>
+</form>
+
+
+<%INIT>
+
+my $TemplateObj = new RT::Template($session{'CurrentUser'});
+my ($title, @results, $current_subtab, $SubmitLabel);
+
+my $subtabs = {
+ A => { title => loc('Select'),
+ path => "Admin/Global/Templates.html"
+ },
+ B => { title => loc('New'),
+ path => "Admin/Global/Template.html?Create=1&Queue=0",
+ separator => 1,
+ }
+ };
+
+if ($Create) {
+ $title = loc("Create a template");
+ $current_subtab = "Admin/Global/Template.html?Create=1&Queue=0";
+ $SubmitLabel = loc('Create');
+}
+
+else {
+ if (defined ($Template) && $Template eq 'new') {
+ my ($val, $msg) = $TemplateObj->Create(Queue => $Queue, Name => $Name);
+ Abort(loc("Could not create template: [_1]", $msg)) unless ($val);
+ push @results, $msg;
+ }
+ else {
+ $TemplateObj->Load($Template) || Abort(loc('No Template'));
+ }
+ $title = loc('Modify template [_1]', loc($TemplateObj->Name()));
+ $SubmitLabel = loc('Save Changes');
+
+}
+if ($TemplateObj->Id()) {
+ my @attribs = qw( Description Content Queue Name);
+ my @aresults = UpdateRecordObject( AttributesRef => \@attribs,
+ Object => $TemplateObj,
+ ARGSRef => \%ARGS);
+ $current_subtab = "Admin/Global/Template.html?Queue=0&Template=".$TemplateObj->Id();
+ $subtabs->{"C"} = { title => loc('Template #[_1]', $TemplateObj->Id()),
+ path => "Admin/Global/Template.html?Queue=0&Template=".$TemplateObj->Id(),
+ };
+ push @results, @aresults;
+}
+
+</%INIT>
+<%ARGS>
+$Queue => undef
+$Template => undef
+$Create => undef
+$Name => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Global/Templates.html b/rt/share/html/Admin/Global/Templates.html
new file mode 100755
index 0000000..b918e14
--- /dev/null
+++ b/rt/share/html/Admin/Global/Templates.html
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title, FeedURI => 'templates' &>
+<& /Admin/Elements/SystemTabs,
+ current_tab => 'Admin/Global/Templates.html',
+ current_subtab => 'Admin/Global/Templates.html',
+ subtabs => $subtabs,
+ Title => $title &>
+<& /Admin/Elements/EditTemplates, title => $title, %ARGS &>
+</form>
+<%init>
+
+my $subtabs = {
+ A => { title => loc('Select'),
+ path => "Admin/Global/Templates.html"
+ },
+ B => { title => loc('New'),
+ path => "Admin/Global/Template.html?Create=1&Queue=0",
+ separator => 1,
+ }
+ };
+my $title = loc("Modify templates which apply to all queues");
+
+my (@actions);
+
+</%init>
+
+
+
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Global/UserRights.html b/rt/share/html/Admin/Global/UserRights.html
new file mode 100755
index 0000000..7a56592
--- /dev/null
+++ b/rt/share/html/Admin/Global/UserRights.html
@@ -0,0 +1,99 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Modify global user rights') &>
+<& /Admin/Elements/SystemTabs,
+ current_tab => 'Admin/Global/UserRights.html',
+ Title => loc('Modify global user rights') &>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="UserRights.html">
+
+<&| /Widgets/TitleBox, title => loc('Modify global user rights.') &>
+<table>
+
+% while ( my $UserObj = $Users->Next ) {
+% my $group = RT::Group->new($session{'CurrentUser'});
+% $group->LoadACLEquivalenceGroup( $UserObj );
+ <tr align="right">
+ <td valign="top"><& /Elements/ShowUser, User => $UserObj &></td>
+ <td><& /Admin/Elements/SelectRights,
+ PrincipalId => $group->PrincipalId,
+ Object => $RT::System,
+ &></td>
+ </tr>
+% }
+</table>
+</&>
+
+<& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &>
+
+</form>
+<%INIT>
+
+ #Update the acls.
+ my @results = ProcessACLChanges(\%ARGS);
+
+# {{{ Deal with setting up the display of current rights.
+
+
+# Find out which users we want to display ACL selects for
+my $Privileged = RT::Group->new($session{'CurrentUser'});
+$Privileged->LoadSystemInternalGroup('Privileged');
+my $Users = $Privileged->UserMembersObj();
+$Users->OrderBy( FIELD => $UserOrderBy, ORDER => $UserOrder );
+
+
+
+# }}}
+
+</%INIT>
+
+<%ARGS>
+$UserOrderBy => 'Name'
+$UserOrder => 'ASC'
+</%ARGS>
diff --git a/rt/share/html/Admin/Global/index.html b/rt/share/html/Admin/Global/index.html
new file mode 100755
index 0000000..4ddd5c4
--- /dev/null
+++ b/rt/share/html/Admin/Global/index.html
@@ -0,0 +1,86 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback( %ARGS, tabs => $tabs );
+<& /Admin/Elements/Header, Title => loc('Admin/Global configuration') &>
+<& /Admin/Elements/SystemTabs,
+ Title => loc('Admin/Global configuration') &>
+ <& /Elements/ListMenu, items => $tabs &>
+<%INIT>
+ my $tabs = {
+
+ A => { title => loc('Scrips'),
+ text => loc('Modify scrips which apply to all queues'),
+ path => '/Admin/Global/Scrips.html',
+ },
+ B => { title => loc('Templates'),
+ text => loc('Edit system templates'),
+ path => '/Admin/Global/Templates.html',
+ },
+
+ F => { title => loc('Custom Fields'),
+ text => loc('Modify global custom fields'),
+ path => '/Admin/Global/CustomFields/index.html',
+ },
+
+ G => { title => loc('Group Rights'),
+ text => loc('Modify global group rights'),
+ path => '/Admin/Global/GroupRights.html',
+ },
+ H => { title => loc('User Rights'),
+ text => loc('Modify global user rights'),
+ path => '/Admin/Global/UserRights.html',
+ },
+ I => { title => loc('RT at a glance'),
+ text => loc('Modify the default "RT at a glance" view'),
+ path => '/Admin/Global/MyRT.html',
+ },
+
+
+
+};
+</%INIT>
diff --git a/rt/share/html/Admin/Groups/CustomFields.html b/rt/share/html/Admin/Groups/CustomFields.html
new file mode 100644
index 0000000..af76dcf
--- /dev/null
+++ b/rt/share/html/Admin/Groups/CustomFields.html
@@ -0,0 +1,48 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/ObjectCustomFields, %ARGS, ObjectType => 'RT::Group' &>
diff --git a/rt/share/html/Admin/Groups/GroupRights.html b/rt/share/html/Admin/Groups/GroupRights.html
new file mode 100755
index 0000000..0c11751
--- /dev/null
+++ b/rt/share/html/Admin/Groups/GroupRights.html
@@ -0,0 +1,119 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Modify group rights for group [_1]', $GroupObj->Name) &>
+<& /Admin/Elements/GroupTabs,
+ GroupObj => $GroupObj,
+ current_tab => 'Admin/Groups/GroupRights.html?id='.$id,
+ Title => loc('Modify group rights for group [_1]', $GroupObj->Name) &>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="GroupRights.html">
+ <input type="hidden" class="hidden" name="id" value="<% $GroupObj->id %>" />
+
+<&| /Widgets/TitleBox, title => loc('Modify group rights for group [_1]', $GroupObj->Name) &>
+
+<h1><&|/l&>System groups</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToSystemInternalGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% loc($Group->Type) %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ PrincipalType => 'Group',
+ Object => $GroupObj &>
+ </td>
+ </tr>
+% }
+</table>
+<h1><&|/l&>User defined groups</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToUserDefinedGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% $Group->Name %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ PrincipalType => 'Group',
+ Object => $GroupObj &>
+ </td>
+ </tr>
+% }
+</table>
+
+ </&>
+ <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &>
+
+ </form>
+
+<%INIT>
+
+ #Update the acls.
+ my @results = ProcessACLChanges(\%ARGS);
+
+
+if (!defined $id) {
+ Abort(loc("No Group defined"));
+}
+
+my $GroupObj = RT::Group->new($session{'CurrentUser'});
+$GroupObj->Load($id) || Abort(loc("Couldn't load group [_1]",$id));
+
+my $Groups;
+
+</%INIT>
+
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Groups/History.html b/rt/share/html/Admin/Groups/History.html
new file mode 100644
index 0000000..cde7c3f
--- /dev/null
+++ b/rt/share/html/Admin/Groups/History.html
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GroupTabs,
+ id => $id,
+ GroupObj => $GroupObj,
+ current_subtab => $current_tab,
+ Title => $title &>
+
+<& /Ticket/Elements/ShowHistory,
+ Ticket => $GroupObj,
+ ShowDisplayModes => 0,
+&>
+
+<%INIT>
+my $current_tab = 'Admin/Groups/History.html?id='.$id;
+my $GroupObj = new RT::Group($session{'CurrentUser'});
+$GroupObj->Load($id) || Abort("Couldn't load group '$id'");
+my $title = loc("History of the group [_1]", $GroupObj->Name);
+</%INIT>
+<%ARGS>
+$id => '' unless defined $id
+</%ARGS>
diff --git a/rt/share/html/Admin/Groups/Members.html b/rt/share/html/Admin/Groups/Members.html
new file mode 100755
index 0000000..62bd8c8
--- /dev/null
+++ b/rt/share/html/Admin/Groups/Members.html
@@ -0,0 +1,159 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('RT/Admin/Edit the group [_1]', $Group->Name) &>
+<& /Admin/Elements/GroupTabs, GroupObj => $Group,
+ current_tab => 'Admin/Groups/Members.html?id='.$id,
+ Title => "RT/Admin/Edit the group ". $Group->Name &>
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="<% RT->Config->Get('WebPath') %>/Admin/Groups/Members.html" method="post">
+<input type="hidden" class="hidden" name="id" value="<%$Group->Id%>" />
+
+<&| /Widgets/TitleBox, title => loc('Editing membership for group [_1]', $Group->Name) &>
+
+<table width="100%">
+<tr>
+<td>
+<h3><&|/l&>Current members</&></h3>
+</td>
+<td>
+<h3><&|/l&>Add members</&></h3>
+</td>
+</tr>
+
+<tr>
+<td valign="top">
+
+% if ($Group->MembersObj->Count == 0 ) {
+<em><&|/l&>(No members)</&></em>
+% } else {
+<&|/l&>Users</&>
+% my $Users = $Group->UserMembersObj( Recursively => 0 );
+<%perl>
+my @users = sort { lc($a->[0]) cmp lc($b->[0]) }
+ map { [$m->scomp("/Elements/ShowUser", User => $_), $_] }
+ @{ $Users->ItemsArrayRef };
+</%perl>
+<ul>
+% for (@users) {
+% my ($rendered, $user) = @$_;
+% $UsersSeen{ $user->id } = 1 if $SkipSeenUsers;
+<li><input type="checkbox" class="checkbox" name="DeleteMember-<% $user->PrincipalObj->Id %>" value="1" />
+<% $rendered |n%></li>
+% }
+</ul>
+<&|/l&>Groups</&>
+<ul>
+% my $GroupMembers = $Group->MembersObj;
+% $GroupMembers->LimitToGroups();
+% while ( my $member = $GroupMembers->Next ) {
+% $GroupsSeen{ $member->MemberId } = 1 if $SkipSeenGroups;
+<li><input type="checkbox" class="checkbox" name="DeleteMember-<% $member->MemberId %>" value="1" />
+<% $member->MemberObj->Object->Name %>
+% }
+</ul>
+% }
+</td>
+<td valign="top">
+<& /Admin/Elements/SelectNewGroupMembers, Name => "AddMembers", Group => $Group,
+ SkipUsers => \%UsersSeen, SkipGroups => \%GroupsSeen &>
+</td>
+</tr>
+</table>
+</&>
+<em><&|/l&>(Check box to delete)</&></em>
+<& /Elements/Submit, Label => loc('Modify Members'), Reset => 1 &>
+</form>
+
+
+<%INIT>
+
+my $Group = new RT::Group($session{'CurrentUser'});
+$Group->Load($id) || Abort(loc('Could not load group'));
+
+my (%UsersSeen, %GroupsSeen);
+$GroupsSeen{ $Group->id } = 1; # can't be a member of ourself
+
+my (@results);
+
+# XXX: safe member id in value instead of name
+foreach my $key (keys %ARGS) {
+ next unless $key =~ /^DeleteMember-(\d+)$/;
+
+ my ($val,$msg) = $Group->DeleteMember($1);
+ push (@results, $msg);
+}
+
+foreach my $member (grep $_, @AddMembersUsers, @AddMembersGroups) {
+
+ my $principal;
+
+ if ($member =~ /^Group-(\d+)$/) {
+ $principal = RT::Group->new($session{'CurrentUser'});
+ $principal->Load($1);
+ } elsif ($member =~ /^User-(\d+)$/) {
+ $principal = RT::User->new($session{'CurrentUser'});
+ $principal->Load($1);
+ } else {
+ next;
+ }
+
+
+ my ($val, $msg) = $Group->AddMember($principal->PrincipalId);
+ push (@results, $msg);
+}
+
+</%INIT>
+
+<%ARGS>
+@AddMembersUsers => ()
+@AddMembersGroups => ()
+$id => undef
+$SkipSeenUsers => 1
+$SkipSeenGroups => 1
+</%ARGS>
diff --git a/rt/share/html/Admin/Groups/Modify.html b/rt/share/html/Admin/Groups/Modify.html
new file mode 100755
index 0000000..81b8ca7
--- /dev/null
+++ b/rt/share/html/Admin/Groups/Modify.html
@@ -0,0 +1,178 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+
+<& /Admin/Elements/GroupTabs,
+ GroupObj => $Group,
+ current_tab => $current_tab,
+ Title => $title &>
+<& /Elements/ListActions, actions => \@results &>
+
+
+
+<form action="<%RT->Config->Get('WebPath')%>/Admin/Groups/Modify.html" method="post" enctype="multipart/form-data">
+
+%unless ($Group->Id) {
+<input type="hidden" class="hidden" name="id" value="new" />
+% } else {
+<input type="hidden" class="hidden" name="id" value="<%$Group->Id%>" />
+% }
+<table>
+<tr><td align="right">
+<&|/l&>Name</&>:
+</td>
+<td><input name="Name" value="<%$Group->Name||''%>" /></td>
+</tr>
+<tr>
+<td align="right">
+<&|/l&>Description</&>:</td><td colspan="3"><input name="Description" value="<%$Group->Description||''%>" size="60" /></td>
+</tr>
+% my $CFs = $Group->CustomFields;
+% while (my $CF = $CFs->Next) {
+<tr valign="top"><td align="right">
+<% loc($CF->Name) %>:
+</td><td>
+<& /Elements/EditCustomField, CustomField => $CF,
+ Object => $Group,
+ ($Create ? (NamePrefix => 'Object-RT::Group--CustomField-')
+ : () )&>
+</td></tr>
+% }
+<tr>
+<td colspan="2">
+<input type="hidden" class="hidden" name="SetEnabled" value="1" />
+<input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> /> <&|/l&>Enabled (Unchecking this box disables this group)</&><br />
+</td>
+</tr>
+% $m->callback( %ARGS, GroupObj => $Group, results => \@results );
+</table>
+% if ( $Create ) {
+<& /Elements/Submit, Label => loc('Create'), Reset => 1 &>
+% } else {
+<& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &>
+% }
+</form>
+<%INIT>
+
+my $current_tab;
+my ($title, @results, $Disabled, $EnabledChecked);
+
+my $Group = RT::Group->new($session{'CurrentUser'});
+
+if ($Create) {
+ $current_tab = 'Admin/Groups/Modify.html?Create=1';
+ $title = loc("Create a new group");
+}
+
+else {
+ $current_tab = 'Admin/Groups/Modify.html?id='.$id;
+ if ($id eq 'new' ) {
+
+ my ($create_id, $create_msg) = $Group->CreateUserDefinedGroup(Name =>
+ "$Name");
+ unless ($create_id) {
+ Abort (loc("Group could not be created: [_1]", $create_msg));
+ }
+ $id = $Group->Id;
+ }
+ else {
+ $Group->Load($id) || Abort('Could not load group');
+ }
+
+
+ if ($id) {
+ $title = loc("Modify the group [_1]", $Group->Name);
+
+ }
+
+ # If the create failed
+ else {
+ $title = loc("Create a new group");
+ $Create = 1;
+ }
+
+}
+
+if ($id) {
+
+ my @fields = qw(Description Name );
+ my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
+ Object => $Group,
+ ARGSRef => \%ARGS );
+ push (@results,@fieldresults);
+ push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $Group );
+}
+
+#we're asking about enabled on the web page but really care about disabled.
+if (defined $Enabled && $Enabled == 1) {
+ $Disabled = 0;
+}
+else {
+ $Disabled = 1;
+}
+if ( ($SetEnabled) and ( $Disabled != $Group->Disabled) ) {
+ my ($code, $msg) = $Group->SetDisabled($Disabled);
+ push @results, $msg;
+}
+
+unless ($Group->Disabled()) {
+ $EnabledChecked ='checked="checked"';
+}
+
+
+</%INIT>
+
+
+<%ARGS>
+$Create => undef
+$Name => undef
+$Description => undef
+$SetEnabled => undef
+$Enabled => undef
+$id => '' unless defined $id
+</%ARGS>
diff --git a/rt/share/html/Admin/Groups/UserRights.html b/rt/share/html/Admin/Groups/UserRights.html
new file mode 100755
index 0000000..619a076
--- /dev/null
+++ b/rt/share/html/Admin/Groups/UserRights.html
@@ -0,0 +1,112 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Modify user rights for group [_1]', $GroupObj->Name) &>
+<& /Admin/Elements/GroupTabs,
+ GroupObj => $GroupObj,
+ current_tab => 'Admin/Groups/UserRights.html?id='.$id,
+ Title => loc('Modify user rights for group [_1]', $GroupObj->Name) &>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="UserRights.html">
+ <input type="hidden" class="hidden" name="id" value="<% $GroupObj->id %>" />
+
+<&| /Widgets/TitleBox, title => loc('Modify user rights for group [_1]', $GroupObj->Name) &>
+<table>
+% while ( my $Member = $Users->Next ) {
+% my $UserObj = $Member->MemberObj->Object;
+ <tr align="right">
+ <td valign="top"><& /Elements/ShowUser, User => $UserObj &></td>
+ <td><& /Admin/Elements/SelectRights,
+ PrincipalId => $Member->MemberObj->Id,
+ PrincipalType => 'User',
+ Object => $GroupObj,
+ &></td>
+ </tr>
+% }
+</table>
+</&>
+
+<& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &>
+
+</form>
+
+<%INIT>
+
+ #Update the acls.
+ my @results = ProcessACLChanges(\%ARGS);
+
+# {{{ Deal with setting up the display of current rights.
+
+
+#Define vars used in html above
+
+
+if (!defined $id) {
+ Abort(loc("No Group defined"));
+}
+
+my $GroupObj = RT::Group->new($session{'CurrentUser'});
+$GroupObj->Load($id) || Abort(loc("Couldn't load group [_1]",$id));
+
+# Find out which users we want to display ACL selects for
+my $Privileged = RT::Group->new($session{'CurrentUser'});
+$Privileged->LoadSystemInternalGroup('Privileged');
+my $Users = $Privileged->MembersObj();
+
+
+
+# }}}
+
+</%INIT>
+
+<%ARGS>
+$id => undef
+$UserString => undef
+$UserOp => undef
+$UserField => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Groups/index.html b/rt/share/html/Admin/Groups/index.html
new file mode 100755
index 0000000..078f51b
--- /dev/null
+++ b/rt/share/html/Admin/Groups/index.html
@@ -0,0 +1,129 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/GroupTabs, current_tab => 'Admin/Groups/',
+ current_subtab => 'Admin/Groups/',
+ Title => $title &>
+<% $caption %>:<br />
+
+% unless ( $Groups->Count ) {
+<em><&|/l&>No groups matching search criteria found.</&></em>
+% } else {
+
+<& /Elements/CollectionList,
+ OrderBy => 'Name',
+ Order => 'ASC',
+ Rows => 100,
+ %ARGS,
+ Format => $Format,
+ Collection => $Groups,
+ AllowSorting => 1,
+ PassArguments => [qw(Format Rows Page Order OrderBy GroupString GroupOp GroupField FindDisabledGroups)],
+&>
+
+% my $ids = join ',', map $_->id, @{ $Groups->ItemsArrayRef };
+% if ( $ids ) {
+<div align="right"><em>
+(<a href="<% RT->Config->Get('WebPath') %>/Download/Tabular/Group/<% $ids %>/Groups.tsv">
+<&|/l&>Download as a tab-delimited file</&>
+</a>)</em></div>
+% }
+
+<br /><br />
+% }
+
+<form method="post" action="<% RT->Config->Get('WebPath') %>/Admin/Groups/index.html">
+<input type="checkbox" class="checkbox" name="FindDisabledGroups" value="1" <% $FindDisabledGroups? 'checked="checked"': '' |n %> /> <&|/l&>Include disabled groups in listing.</&><br />
+<&|/l&>Find groups whose</&> <& /Elements/SelectGroups &><br />
+<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
+</form>
+<%INIT>
+my $Groups = RT::Groups->new($session{'CurrentUser'});
+$Groups->LimitToUserDefinedGroups();
+my $title = loc('Select a group');
+my $caption;
+
+if ($FindDisabledGroups) {
+ $Groups->FindAllRows();
+}
+
+if (length $GroupString) {
+ $caption = loc("Groups matching search criteria");
+ if ($GroupField =~ /^CustomField-(\d+)/) {
+ $Groups->LimitCustomField(
+ CUSTOMFIELD => $1,
+ OPERATOR => $GroupOp,
+ VALUE => $GroupString,
+ );
+ }
+ else {
+ $Groups->Limit(
+ FIELD => $GroupField,
+ OPERATOR => $GroupOp,
+ VALUE => $GroupString,
+ );
+ }
+}
+else {
+ $caption = loc("User-defined groups");
+}
+
+
+$Format ||= q{'<a href="__WebPath__/Admin/Groups/Modify.html?id=__id__">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Groups/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ .q{,'__Description__'};
+
+</%INIT>
+<%ARGS>
+$Format => undef,
+
+$GroupString => '' unless defined $GroupString
+$GroupOp => '='
+$GroupField => 'Name'
+$FindDisabledGroups => 0
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/CustomField.html b/rt/share/html/Admin/Queues/CustomField.html
new file mode 100755
index 0000000..0dd530d
--- /dev/null
+++ b/rt/share/html/Admin/Queues/CustomField.html
@@ -0,0 +1,87 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs, id => $QueueObj->Id,
+ QueueObj => $QueueObj,
+ current_tab => 'Admin/Queues/CustomFields.html?id='.$QueueObj->id,
+ current_subtab => $current_subtab,
+ subtabs => $subtabs,
+ Title => $title &>
+
+<& /Admin/Elements/EditCustomField, title => $title, %ARGS &>
+
+<%INIT>
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($Queue);
+
+my ($title, $current_subtab);
+
+unless($QueueObj->id) {
+ Abort(loc("Queue [_1] not found", $Queue));
+}
+if ($CustomField) {
+ $title = loc('Modify a CustomField for queue [_1]', $QueueObj->Name());
+}else {
+ $current_subtab = "Admin/Queues/CustomField.html?create=1&Queue=".$QueueObj->id;
+ $title = loc('Create a CustomField for queue [_1]', $QueueObj->Name());
+}
+
+my $subtabs = {
+ A => { title => loc('New custom field'),
+ path => "Admin/Queues/CustomField.html?create=1&Queue=".$QueueObj->id
+ }
+ };
+
+</%INIT>
+<%ARGS>
+$CustomField => undef
+$Queue => 0
+</%ARGS>
+<%ATTR>
+AutoFlush => 0
+</%ATTR>
diff --git a/rt/share/html/Admin/Queues/CustomFields.html b/rt/share/html/Admin/Queues/CustomFields.html
new file mode 100755
index 0000000..9db9c42
--- /dev/null
+++ b/rt/share/html/Admin/Queues/CustomFields.html
@@ -0,0 +1,72 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs,
+ id => $Object->id,
+ current_tab => "Admin/Queues/CustomFields.html?SubType=$SubType&id=$id",
+ current_subtab => "Admin/Queues/CustomFields.html?SubType=$SubType&id=$id",
+ QueueObj => $Object,
+ Title => $title
+ &>
+
+ <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::Queue' &>
+<%INIT>
+my $Object = RT::Queue->new( $session{'CurrentUser'} );
+
+$Object->Load($id) || Abort( loc( "Couldn't load object [_1]", $id ) );
+my $FriendlySubTypes =
+ RT::CustomField->new( $session{'CurrentUser'} )
+ ->FriendlyLookupType( $Object->CustomFieldLookupType );
+
+my $title = loc( 'Edit Custom Fields for [_1]', $Object->Name );
+
+</%INIT>
+<%ARGS>
+$id => undef
+$SubType => 'RT::Queue-RT::Ticket'
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/GroupRights.html b/rt/share/html/Admin/Queues/GroupRights.html
new file mode 100755
index 0000000..467b149
--- /dev/null
+++ b/rt/share/html/Admin/Queues/GroupRights.html
@@ -0,0 +1,134 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Modify group rights for queue [_1]', $QueueObj->Name) &>
+<& /Admin/Elements/QueueTabs, id => $id,
+ QueueObj => $QueueObj,
+ current_tab => $current_tab,
+ Title => loc('Modify group rights for queue [_1]', $QueueObj->Name) &>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="GroupRights.html">
+ <input type="hidden" class="hidden" name="id" value="<% $QueueObj->id %>" />
+
+
+<h1><&|/l&>System groups</&></h1>
+<table>
+% $m->callback( %ARGS, QueueObj => $QueueObj, results => \@results );
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToSystemInternalGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% loc($Group->Type) %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object => $QueueObj &>
+ </td>
+ </tr>
+% }
+</table>
+<h1><&|/l&>Roles</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToRolesForQueue($QueueObj->Id);
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% loc($Group->Type) %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object => $QueueObj &>
+ </td>
+ </tr>
+% }
+</table>
+<h1><&|/l&>User defined groups</&></h1>
+<table>
+% $Groups = RT::Groups->new($session{'CurrentUser'});
+% $Groups->LimitToUserDefinedGroups();
+% while (my $Group = $Groups->Next()) {
+ <tr align="right">
+ <td valign="top">
+ <% $Group->Name %>
+ </td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId,
+ Object => $QueueObj &>
+ </td>
+ </tr>
+% }
+</table>
+
+ <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &>
+
+ </form>
+
+<%INIT>
+
+ #Update the acls.
+ my @results = ProcessACLChanges(\%ARGS);
+
+
+if (!defined $id) {
+ Abort(loc("No Queue defined"));
+}
+
+my $QueueObj = RT::Queue->new($session{'CurrentUser'});
+$QueueObj->Load($id) || Abort(loc("Couldn't load queue [_1]",$id));
+
+my $Groups;
+my $current_tab;
+$current_tab = 'Admin/Queues/GroupRights.html?id='.$QueueObj->id;
+
+</%INIT>
+
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/History.html b/rt/share/html/Admin/Queues/History.html
new file mode 100644
index 0000000..b0634c5
--- /dev/null
+++ b/rt/share/html/Admin/Queues/History.html
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs,
+ id => $id,
+ QueueObj => $QueueObj,
+ current_subtab => $current_tab,
+ Title => $title &>
+
+<& /Ticket/Elements/ShowHistory,
+ Ticket => $QueueObj,
+ ShowDisplayModes => 0,
+&>
+
+<%INIT>
+my $current_tab = 'Admin/Queues/History.html?id='.$id;
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($id) || Abort("Couldn't load queue '$id'");
+my $title = loc("History of the queue [_1]", $QueueObj->Name);
+</%INIT>
+<%ARGS>
+$id => '' unless defined $id
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/Modify.html b/rt/share/html/Admin/Queues/Modify.html
new file mode 100755
index 0000000..df97a68
--- /dev/null
+++ b/rt/share/html/Admin/Queues/Modify.html
@@ -0,0 +1,214 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs, id => $QueueObj->id,
+ QueueObj => $QueueObj,
+ current_tab => $current_tab,
+ Title => $title &>
+<& /Elements/ListActions, actions => \@results &>
+
+
+
+<form action="<%RT->Config->Get('WebPath')%>/Admin/Queues/Modify.html" method="post">
+<input type="hidden" class="hidden" name="SetEnabled" value="1" />
+<input type="hidden" class="hidden" name="id" value="<% $Create? 'new': $QueueObj->Id %>" />
+
+<table>
+<tr><td align="right"><&|/l&>Queue Name</&>:</td>
+<td colspan="3"><input name="Name" value="<% ($Create) ? "" : $QueueObj->Name %>" /></td>
+</tr>
+
+<tr><td align="right"><&|/l&>Description</&>:</td>
+<td colspan="3"><input name="Description" value="<% ($Create) ? "" : $QueueObj->Description %>" size="60" /></td>
+</tr>
+
+<tr><td align="right"><&|/l&>Subject Tag</&>:</td>
+<td colspan="3"><input name="SubjectTag" value="<% $ARGS{'SubjectTag'} || ($Create ? "" : $QueueObj->SubjectTag || '' ) %>" size="60" /></td>
+</tr>
+
+<tr><td align="right"><&|/l&>Reply Address</&>:</td>
+<td><input name="CorrespondAddress" value="<% ($Create) ? "" : $QueueObj->CorrespondAddress %>" />
+<br /><span><em><&|/l , RT->Config->Get('CorrespondAddress')&>(If left blank, will default to [_1])</&></em></span></td>
+<td align="right"><&|/l&>Comment Address</&>:</td>
+<td><input name="CommentAddress" value="<% ($Create) ? "" : $QueueObj->CommentAddress %>" />
+<br /><span><em><&|/l , RT->Config->Get('CommentAddress')&>(If left blank, will default to [_1])</&></em></span></td>
+</tr>
+
+<tr><td align="right"><&|/l&>Priority starts at</&>:</td>
+<td><& /Elements/SelectPriority,
+ Name => "InitialPriority",
+ Default => $Create? 0: $QueueObj->InitialPriority,
+&></td>
+<td align="right"><&|/l&>Over time, priority moves toward</&>:</td>
+<td><& /Elements/SelectPriority,
+ Name => "FinalPriority",
+ Default => $Create? 0: $QueueObj->FinalPriority,
+&></td>
+</tr>
+
+<tr><td align="right"><&|/l&>Requests should be due in</&>:</td>
+<td colspan="3"><input name="DefaultDueIn" value="<% ($Create) ? "" : $QueueObj->DefaultDueIn%>" /> <&|/l&>days</&>.</td>
+</tr>
+
+% my $CFs = $QueueObj->CustomFields;
+% while (my $CF = $CFs->Next) {
+<tr valign="top"><td align="right">
+<% loc($CF->Name) %>:
+</td><td>
+<& /Elements/EditCustomField, CustomField => $CF,
+ Object => $QueueObj,
+ ($Create ? (NamePrefix => 'Object-RT::Queue--CustomField-')
+ : () )&>
+</td></tr>
+% }
+
+% if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
+<tr><td align="right"><input type="checkbox" class="checkbox" name="Sign" value="1" <% $QueueObj->Sign? 'checked="checked"': '' |n%> /></td>
+<td><&|/l&>Sign by default</&></td>
+<td align="right"><input type="checkbox" class="checkbox" name="Encrypt" value="1" <% $QueueObj->Encrypt? 'checked="checked"': '' |n%> /></td>
+<td><&|/l&>Encrypt by default</&></td>
+</tr>
+% }
+
+<tr><td align="right"><input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked|n%> /></td>
+<td colspan="3"><&|/l&>Enabled (Unchecking this box disables this queue)</&><br />
+% $m->callback( %ARGS, QueueObj => $QueueObj, results => \@results );
+</td></tr>
+
+% if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
+% if ( my $email = $QueueObj->CorrespondAddress || RT->Config->Get('CorrespondAddress') ) {
+<tr><td colspan="4"><& /Admin/Elements/ShowKeyInfo, Type => 'private', EmailAddress => $email &></td></tr>
+% }
+% if ( my $email = $QueueObj->CommentAddress || RT->Config->Get('CommentAddress') ) {
+<tr><td colspan="4"><& /Admin/Elements/ShowKeyInfo, Type => 'private', EmailAddress => $email &></td></tr>
+% }
+% }
+
+</table>
+% if ( $Create ) {
+<& /Elements/Submit, Label => loc('Create') &>
+% } else {
+<& /Elements/Submit, Label => loc('Save Changes') &>
+% }
+</form>
+
+
+
+<%INIT>
+my ($title, $current_tab, @results, $Disabled, $EnabledChecked);
+my $QueueObj = RT::Queue->new( $session{'CurrentUser'} );
+$QueueObj->Load( $id ) if !$id || $id eq 'new';
+
+$EnabledChecked = 'checked="checked"';
+
+if ($Create) {
+ $current_tab = 'Admin/Queues/Modify.html?Create=1';
+ $title = loc("Create a queue");
+} else {
+ if ( defined $id && $id eq 'new' ) {
+ my ($val, $msg) = $QueueObj->Create( Name => $Name );
+ Abort("$msg") unless $val;
+ delete $session{'create_in_queues'};
+ push @results, $msg;
+ }
+ else {
+ $QueueObj->Load($id) || $QueueObj->Load($Name) || Abort(loc("Couldn't load queue '[_1]'", $Name));
+ }
+ $title = loc('Editing Configuration for queue [_1]', $QueueObj->Name);
+
+ $current_tab = 'Admin/Queues/Modify.html?id='.$QueueObj->id;
+}
+if ( $QueueObj->Id ) {
+ delete $session{'create_in_queues'};
+ my @attribs= qw(Description CorrespondAddress CommentAddress Name
+ InitialPriority FinalPriority DefaultDueIn Sign Encrypt SubjectTag Disabled);
+
+ # we're asking about enabled on the web page but really care about disabled
+ if ( $SetEnabled ) {
+ $Disabled = $ARGS{'Disabled'} = $Enabled? 0: 1;
+ $ARGS{$_} = 0 foreach grep !defined $ARGS{$_} || !length $ARGS{$_},
+ qw(Sign Encrypt Disabled);
+ }
+
+ push @results, UpdateRecordObject(
+ AttributesRef => \@attribs,
+ Object => $QueueObj,
+ ARGSRef => \%ARGS
+ );
+
+ $Disabled = $ARGS{'Disabled'} = $Enabled? 0: 1;
+
+ $EnabledChecked = "" if $QueueObj->Disabled;
+
+ my @linkresults;
+ $m->callback(
+ results => \@linkresults,
+ RecordObj => $QueueObj,
+ ARGSRef => \%ARGS,
+ CallbackName => 'ProcessLinks'
+ );
+ push @results, @linkresults;
+ push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $QueueObj );
+}
+</%INIT>
+
+
+<%ARGS>
+$id => undef
+$result => undef
+$Name => undef
+$Create => undef
+$Description => undef
+$CorrespondAddress => undef
+$CommentAddress => undef
+$InitialPriority => undef
+$FinalPriority => undef
+$DefaultDueIn => undef
+$SetEnabled => undef
+$Enabled => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/People.html b/rt/share/html/Admin/Queues/People.html
new file mode 100755
index 0000000..0a2ab0d
--- /dev/null
+++ b/rt/share/html/Admin/Queues/People.html
@@ -0,0 +1,215 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc('Modify people related to queue [_1]', $QueueObj->Name) &>
+<& /Admin/Elements/QueueTabs, id => $id,
+ QueueObj => $QueueObj,
+ current_tab => $current_tab,
+ Title => loc('Modify people related to queue [_1]', $QueueObj->Name) &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+
+<form method="post" action="People.html">
+<input type="hidden" class="hidden" name="id" value="<%$QueueObj->Id%>" />
+
+<table width="100%">
+<tr>
+<td valign="top" >
+
+<h3><&|/l&>Current watchers</&></h3>
+
+
+<&|/l&>Cc</&>:
+
+<& /Admin/Elements/EditQueueWatchers, QueueObj => $QueueObj, Watchers => $QueueObj->Cc &>
+
+<&|/l&>Administrative Cc</&>:
+
+<& /Admin/Elements/EditQueueWatchers, QueueObj => $QueueObj, Watchers => $QueueObj->AdminCc &>
+
+
+</td>
+<td valign="top">
+<h3><&|/l&>New watchers</&></h3>
+
+<&|/l&>Find people whose</&><br />
+<& /Elements/SelectUsers &>
+<input type="submit" class="button" name="OnlySearchForPeople" value="<&|/l&>Go!</&>" />
+<br />
+<&|/l&>Find groups whose</&><br />
+<& /Elements/SelectGroups &>
+<input type="submit" class="button" name="OnlySearchForGroup" value="<&|/l&>Go!</&>" />
+
+<p>
+<&|/l&>Add new watchers</&>:<br />
+<p>
+<strong><&|/l&>Users</&></strong>
+% if ($user_msg) {
+<br />
+<em><%$user_msg%></em>
+% } elsif ($Users) {
+<ul>
+% while (my $u = $Users->Next ) {
+<li><& /Elements/SelectWatcherType,
+ Scope => 'queue',
+ Name => "Queue-AddWatcher-Principal-". $u->PrincipalId,
+&>
+<& /Elements/ShowUser, User => $u &></li>
+% }
+</ul>
+% }
+
+<p>
+<strong><&|/l&>Groups</&></strong>
+
+% if ($group_msg) {
+<br />
+<em><%$group_msg%></em>
+% } elsif ($Groups) {
+<ul>
+% while (my $g = $Groups->Next ) {
+<li><&/Elements/SelectWatcherType, Scope=>'queue', Name =>
+"Queue-AddWatcher-Principal-".$g->PrincipalId &> <%$g->Name%>
+(<%$g->Description%>)
+% }
+</ul>
+% }
+
+</td>
+</tr>
+</table>
+
+
+
+
+<& /Elements/Submit, Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), Reset => 1 &>
+</form>
+
+<%INIT>
+
+my $current_tab;
+my ($field, @results, $User, $Users, $Groups, $watcher, $user_msg, $group_msg);
+
+# {{{ Load the queue
+#If we get handed two ids, mason will make them an array. bleck.
+# We want teh first one. Just because there's no other sensible way
+# to deal
+
+
+
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($id) || Abort(loc("Couldn't load queue", $id));
+# }}}
+
+unless ($OnlySearchForPeople or $OnlySearchForGroup) {
+# {{{ Delete deletable watchers
+
+ foreach my $key (keys %ARGS) {
+ my $id = $QueueObj->Id;
+
+ if (($key =~ /^Queue-$id-DeleteWatcher-Type-(.*?)-Principal-(\d*)$/)) {;
+ my ($code, $msg) = $QueueObj->DeleteWatcher(Type => $1,
+ PrincipalId => $2);
+ push @results, $msg;
+ }
+ }
+# }}}
+
+# {{{ Add new watchers
+ foreach my $key (keys %ARGS) {
+ #They're in this order because otherwise $1 gets clobbered :/
+ if ( ($ARGS{$key} =~ /^(AdminCc|Cc)$/) and
+ ($key =~ /^Queue-AddWatcher-Principal-(\d*)$/) ) {
+ $RT::Logger->debug("Adding a watcher $1 to ".$ARGS{$key}."\n");
+ my ($code, $msg) = $QueueObj->AddWatcher(Type => $ARGS{$key},
+ PrincipalId => $1);
+ push @results, $msg;
+ }
+ }
+
+# }}}
+}
+
+
+if (!length $ARGS{'UserString'}) {
+$user_msg = loc("No principals selected.");
+ }
+else {
+ $Users = new RT::Users($session{'CurrentUser'});
+ $Users->Limit(FIELD => $ARGS{'UserField'},
+ VALUE => $ARGS{'UserString'},
+ OPERATOR => $ARGS{'UserOp'});
+ }
+
+if (!length $ARGS{'GroupString'}) {
+$group_msg = loc("No principals selected.");
+ }
+else {
+$Groups = new RT::Groups($session{'CurrentUser'});
+$Groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined');
+$Groups->Limit(FIELD => $ARGS{'GroupField'},
+ VALUE => $ARGS{'GroupString'},
+ OPERATOR => $ARGS{'GroupOp'});
+ }
+
+$current_tab = 'Admin/Queues/People.html?id='.$QueueObj->id;
+</%INIT>
+
+<%ARGS>
+$OnlySearchForPeople => undef
+$OnlySearchForGroup => undef
+$UserField => 'Name'
+$UserOp => '='
+$UserString => undef
+$GroupField => 'Name'
+$GroupOp => '='
+$GroupString => undef
+$Type => undef
+$id => undef
+</%ARGS>
+
diff --git a/rt/share/html/Admin/Queues/Scrip.html b/rt/share/html/Admin/Queues/Scrip.html
new file mode 100755
index 0000000..96c492a
--- /dev/null
+++ b/rt/share/html/Admin/Queues/Scrip.html
@@ -0,0 +1,99 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs, id => $QueueObj->Id,
+ QueueObj => $QueueObj,
+ current_tab => 'Admin/Queues/Scrips.html?id='.$QueueObj->id,
+ current_subtab => $current_subtab,
+ subtabs => $subtabs,
+ Title => $title &>
+
+<& /Elements/ListActions, actions => \@results &>
+<& /Admin/Elements/EditScrip, title => $title, %ARGS, id => $id &>
+
+<%init>
+my $QueueObj = RT::Queue->new( $session{'CurrentUser'} );
+$QueueObj->Load( $Queue );
+unless( $QueueObj->id ) {
+ Abort(loc("Queue [_1] not found", $id));
+}
+
+my ($title, $current_subtab);
+my $subtabs = {
+ A => {
+ title => loc('Select scrip'),
+ path => "Admin/Queues/Scrips.html?id=".$QueueObj->id,
+ },
+ B => {
+ title => loc('New scrip'),
+ path => "Admin/Queues/Scrip.html?create=1&Queue=".$QueueObj->id,
+ separator => 1,
+ },
+};
+
+($id, my @results) = $m->comp( '/Admin/Elements/EditScrip:Process', %ARGS );
+
+if ( $id ) {
+ $current_subtab = "Admin/Queues/Scrip.html?id=$id&Queue=". $QueueObj->id;
+ $title = loc("Modify a scrip for queue [_1]", $QueueObj->Name);
+ $subtabs->{"C"} = {
+ title => loc("Scrip #[_1]",$id),
+ path => "Admin/Queues/Scrip.html?id=$id&Queue=".$QueueObj->id
+ };
+} else {
+ $current_subtab = "Admin/Queues/Scrip.html?create=1&Queue=".$QueueObj->id;
+ $title = loc("Create a scrip for queue [_1]", $QueueObj->Name);
+}
+
+
+</%init>
+
+<%ARGS>
+$id => undef
+$Queue => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/Scrips.html b/rt/share/html/Admin/Queues/Scrips.html
new file mode 100755
index 0000000..e6347b6
--- /dev/null
+++ b/rt/share/html/Admin/Queues/Scrips.html
@@ -0,0 +1,87 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs, id => $QueueObj->id,
+ QueueObj => $QueueObj,
+ current_tab => 'Admin/Queues/Scrips.html?id='.$id,
+ current_subtab => 'Admin/Queues/Scrips.html?id='.$id,
+ subtabs => $subtabs,
+ Title => $title &>
+
+% unless ( $QueueObj->Disabled ) { # Global scrips does not apply to disabled queues
+<h2><&|/l&>Scrips which apply to all queues</&></h2>
+<& /Admin/Elements/ListGlobalScrips &>
+<br />
+% }
+<& /Admin/Elements/EditScrips, title => $title, %ARGS &>
+<%init>
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($id);
+
+my $title;
+
+if ($QueueObj->id) {
+ $title = loc("Modify scrips for queue [_1]", $QueueObj->Name);
+} else {
+ Abort(loc("Queue [_1] not found",$id));
+}
+
+my $subtabs = {
+ A => { title => loc('Select scrip'),
+ path => "Admin/Queues/Scrips.html?id=".$id,
+ },
+ B => { title => loc('New scrip'),
+ path => "Admin/Queues/Scrip.html?create=1&Queue=".$id,
+ separator => 1,
+ }
+ };
+</%init>
+
+<%ARGS>
+$id => undef #some identifier that a Queue could
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/Template.html b/rt/share/html/Admin/Queues/Template.html
new file mode 100755
index 0000000..54ba817
--- /dev/null
+++ b/rt/share/html/Admin/Queues/Template.html
@@ -0,0 +1,132 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs, id => $Queue,
+ QueueObj => $QueueObj,
+ current_tab => 'Admin/Queues/Templates.html?id='.$Queue,
+ current_subtab => $current_subtab,
+ subtabs => $subtabs,
+ Title => $title &>
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="Template.html">
+%if ($Create ) {
+<input type="hidden" class="hidden" name="Template" value="new" />
+% } else {
+<input type="hidden" class="hidden" name="Template" value="<%$TemplateObj->Id%>" />
+% }
+
+%# hang onto the queue id
+<input type="hidden" class="hidden" name="Queue" value="<%$Queue%>" />
+<& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name, Description =>
+$TemplateObj->Description, Content => $TemplateObj->Content &>
+<& /Elements/Submit, Label => $SubmitLabel, Reset => 1 &>
+</form>
+
+
+<%INIT>
+
+my $TemplateObj = new RT::Template($session{'CurrentUser'});
+my ($title, @results, $current_subtab, $SubmitLabel);
+
+my $subtabs = {
+ A => { title => loc('Select template'),
+ path => "Admin/Queues/Templates.html?id=$Queue"
+ },
+ B => { title => loc('New template'),
+ path => "Admin/Queues/Template.html?Create=1&Queue=$Queue",
+ separator => 1,
+ }
+ };
+
+if ($Create) {
+ $title = loc("Create a template");
+ $current_subtab = "Admin/Queues/Template.html?Create=1&Queue=".$Queue;
+ $SubmitLabel = loc('Create');
+}
+
+else {
+ if ($Template eq 'new') {
+ my ($val, $msg) = $TemplateObj->Create(Queue => $Queue, Name => $Name);
+ Abort(loc("Could not create template: [_1]", $msg)) unless ($val);
+ push @results, $msg;
+ }
+ else {
+ $TemplateObj->Load($Template) || Abort(loc('No Template'));
+ }
+ $title = loc('Modify template [_1]', loc($TemplateObj->Name()));
+ $SubmitLabel = loc('Save Changes');
+
+
+}
+my $QueueObj;
+if ($TemplateObj->Id()) {
+ $Queue = $TemplateObj->Queue;
+ $QueueObj = $TemplateObj->QueueObj;
+
+ my @attribs = qw( Description Content Queue Name);
+ my @aresults = UpdateRecordObject( AttributesRef => \@attribs,
+ Object => $TemplateObj,
+ ARGSRef => \%ARGS);
+ $current_subtab = "Admin/Queues/Template.html?Queue=$Queue&Template=".$TemplateObj->Id();
+ $subtabs->{"C"} = { title => loc('Template #[_1]', $TemplateObj->Id()),
+ path => "Admin/Queues/Template.html?Queue=$Queue&Template=".$TemplateObj->Id(),
+ };
+ push @results, @aresults;
+} else {
+ $QueueObj = RT::Queue->new($session{'CurrentUser'});
+ $QueueObj->Load($Queue);
+}
+
+</%INIT>
+<%ARGS>
+$Queue => ''
+$Template => ''
+$Create => undef
+$Name => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/Templates.html b/rt/share/html/Admin/Queues/Templates.html
new file mode 100755
index 0000000..deb19ff
--- /dev/null
+++ b/rt/share/html/Admin/Queues/Templates.html
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/QueueTabs, id => $QueueObj->id,
+ current_tab => 'Admin/Queues/Templates.html?id='.$id,
+ current_subtab => 'Admin/Queues/Templates.html?id='.$id,
+ QueueObj => $QueueObj,
+ subtabs => $subtabs,
+ Title => $title &>
+
+<& /Admin/Elements/EditTemplates, title => $title, %ARGS &>
+
+<%INIT>
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($id);
+
+my ($title, $current_subtab);
+
+if ($QueueObj->id) {
+ $title = loc("Edit Templates for queue [_1]", $QueueObj->Name);
+} else {
+ Abort(loc("Queue [_1] not found",$id));
+}
+my $subtabs = {
+ A => { title => loc('Select template'),
+ path => "Admin/Queues/Templates.html?id=".$id,
+ },
+ B => { title => loc('New template'),
+ path => "Admin/Queues/Template.html?Create=1&Queue=".$id,
+ }
+ };
+
+</%INIT>
+<%ARGS>
+$id => undef #some identifier that a Queue could
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/UserRights.html b/rt/share/html/Admin/Queues/UserRights.html
new file mode 100755
index 0000000..31d748a
--- /dev/null
+++ b/rt/share/html/Admin/Queues/UserRights.html
@@ -0,0 +1,112 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Modify user rights for queue [_1]', $QueueObj->Name) &>
+<& /Admin/Elements/QueueTabs, id => $id,
+ QueueObj => $QueueObj,
+ current_tab => $current_tab,
+ Title => loc('Modify user rights for queue [_1]', $QueueObj->Name) &>
+<& /Elements/ListActions, actions => \@results &>
+
+ <form method="post" action="UserRights.html">
+ <input type="hidden" class="hidden" name="id" value="<% $QueueObj->id %>" />
+
+
+<table>
+% $m->callback( %ARGS, QueueObj => $QueueObj, results => \@results );
+% while (my $Member = $Users->Next()) {
+% my $UserObj = $Member->MemberObj->Object();
+% my $group = RT::Group->new($session{'CurrentUser'});
+% $group->LoadACLEquivalenceGroup($Member->MemberObj);
+ <tr align="right">
+ <td valign="top"><& /Elements/ShowUser, User => $UserObj &></td>
+ <td>
+ <& /Admin/Elements/SelectRights, PrincipalId=> $group->PrincipalId,
+ Object => $QueueObj &>
+ </td>
+ </tr>
+% }
+ </table>
+
+ <& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &>
+
+ </form>
+
+<%INIT>
+
+ #Update the acls.
+ my @results = ProcessACLChanges(\%ARGS);
+
+# {{{ Deal with setting up the display of current rights.
+
+
+
+if (!defined $id) {
+ Abort(loc("No Queue defined"));
+}
+
+my $QueueObj = RT::Queue->new($session{'CurrentUser'});
+$QueueObj->Load($id) || Abort(loc("Couldn't load queue [_1]",$id));
+
+# Find out which users we want to display ACL selects for
+my $Privileged = RT::Group->new($session{'CurrentUser'});
+$Privileged->LoadSystemInternalGroup('Privileged');
+my $Users = $Privileged->MembersObj();
+
+
+
+# }}}
+my $current_tab;
+$current_tab = 'Admin/Queues/UserRights.html?id='.$QueueObj->id;
+</%INIT>
+
+<%ARGS>
+$id => undef
+$UserString => undef
+$UserOp => undef
+$UserField => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Queues/index.html b/rt/share/html/Admin/Queues/index.html
new file mode 100755
index 0000000..52e7b3b
--- /dev/null
+++ b/rt/share/html/Admin/Queues/index.html
@@ -0,0 +1,126 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc("Admin queues") &>
+<& /Admin/Elements/QueueTabs, current_tab => 'Admin/Queues/',
+ current_subtab => 'Admin/Queues/',
+ Title => loc("Admin queues") &>
+
+
+
+<h1><%$caption%></h1>
+<p><&|/l&>Select a queue</&>:</p>
+% unless ( $queues->Count ) {
+<em><&|/l&>No queues matching search criteria found.</&></em>
+% } else {
+<& /Elements/CollectionList,
+ OrderBy => 'Name',
+ Order => 'ASC',
+ %ARGS,
+ Format => $Format,
+ Collection => $queues,
+ AllowSorting => 1,
+ PassArguments => [qw(
+ Format Rows Page Order OrderBy
+ FindDisabledQueues QueueString QueueOp QueueField
+ )],
+&>
+% }
+<form method="post" action="<% RT->Config->Get('WebPath') %>/Admin/Queues/index.html">
+% foreach my $field( qw(Format Rows Page Order OrderBy) ) {
+% next unless defined $ARGS{ $field } && length $ARGS{ $field };
+<input type="hidden" name="<% $field %>" value="<% $ARGS{ $field } %>" />
+% }
+
+<select name="QueueField">
+% foreach my $col (qw(Name Description CorrespondAddress CommentAddress InitialPriority FinalPriority DefaultDueIn)) {
+<option <% $QueueField eq $col ? 'selected="selected"' : '' |n %> value="<% $col %>"><% loc($col) %></option>
+% }
+</select>
+<& /Elements/SelectMatch, Name => 'QueueOp', Default => $QueueOp &>
+<input size="8" name="QueueString" value="<% $QueueString %>" />
+<br />
+
+<input type="checkbox" class="checkbox" name="FindDisabledQueues" value="1" <% $FindDisabledQueues? 'checked="checked"': '' |n%> />
+<&|/l&>Include disabled queues in listing.</&>
+<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
+</form>
+
+<%INIT>
+my $queues = new RT::Queues($session{'CurrentUser'});
+$queues->{'find_disabled_rows'} = 1 if $FindDisabledQueues;
+
+my ($caption);
+if ( defined $QueueString && length $QueueString ) {
+ $caption = $FindDisabledQueues
+ ? loc("All queues matching search criteria")
+ : loc("Enabled queues matching search criteria");
+ $queues->Limit(
+ FIELD => $QueueField,
+ OPERATOR => $QueueOp,
+ VALUE => $QueueString,
+ );
+} else {
+ $queues->UnLimit;
+ $caption = $FindDisabledQueues
+ ? loc("All Queues")
+ : loc("Enabled Queues");
+}
+
+$Format ||= q{'<a href="__WebPath__/Admin/Queues/Modify.html?id=__id__">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Queues/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ .q{,__Description__,__Address__,__Priority__,__DefaultDueIn__,__Disabled__};
+
+</%INIT>
+<%ARGS>
+$FindDisabledQueues => 0
+$Format => undef
+
+$QueueField => 'Name'
+$QueueOp => '='
+$QueueString => ''
+</%ARGS>
diff --git a/rt/share/html/Admin/Tools/Configuration.html b/rt/share/html/Admin/Tools/Configuration.html
new file mode 100644
index 0000000..eb48af1
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Configuration.html
@@ -0,0 +1,170 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+require Module::Versions::Report;
+my $title = loc('System Configuration');
+unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) {
+ Abort(loc('This feature is only available to system administrators'));
+}
+
+
+</%init>
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/ToolTabs,
+ current_tab => 'Admin/Tools/Configuration.html',
+ current_subtab => 'Admin/Tools/Configuration.html',
+ Title => $title &>
+
+
+
+<h2><&|/l&>Loaded perl modules</&></h2>
+% my $report = Module::Versions::Report::report();
+% my @report = grep /v\d/, split("\n",$report);
+<pre>
+<% join('<br />', @report) |n %>
+</pre>
+
+<h2><&|/l&>RT Config</&></h2>
+<table>
+<%PERL>
+foreach my $key ( RT->Config->Options( Overridable => undef, Sorted => 0 ) ) {
+ my $val = RT->Config->Get( $key );
+ next unless defined $val;
+
+ my $meta = RT->Config->Meta( $key );
+ my $description = '';
+ if ( $meta->{'Source'}{'Extension'} && $meta->{'Source'}{'SiteConfig'} ) {
+ $description = loc("[_1] site config", $meta->{'Source'}{'Extension'});
+ }
+ elsif ( $meta->{'Source'}{'Extension'} ) {
+ $description = loc("[_1] core config", $meta->{'Source'}{'Extension'});
+ }
+ elsif ( $meta->{'Source'}{'SiteConfig'} ) {
+ $description = loc("site config");
+ }
+ else {
+ $description = loc("core config");
+ }
+</%PERL>
+<tr><th><% $key %></th>
+<td rowspan="2">\
+% if ( $key =~ /Password(?!Length)/i ) {
+<em>Password not printed</em>\
+% } elsif ( !ref $val ) {
+<% "$val" %>\
+% } elsif ( ref $val eq 'ARRAY' ) {
+<% join ', ', @$val %>\
+% } elsif ( ref $val eq 'HASH' ) {
+<% join ', ', %$val %>\
+% } else {
+<% ref $val %>\
+% }
+</td></tr>
+<tr><td><% $description %></td></tr>
+% }
+</table>
+
+<h2><&|/l&>RT Variables</&></h2>
+<table>
+% { no strict qw/refs/;
+% my %config_opt = map { $_ => 1 } RT->Config->Options( Overridable => undef );
+% foreach my $key ( sort keys %{*RT::} ) {
+% next if !${'RT::'.$key} || ref ${'RT::'.$key} || $config_opt{ $key };
+<tr><th>RT::<% $key %></th>
+<td>
+% if ( $key =~ /Password(?!Length)/i ) {
+<em>Password not printed</em>
+% } else {
+<% ${'RT::'.$key} %>
+% }
+</td>
+</tr>
+% }
+% }
+</table>
+
+<h2><&|/l&>RT Size</&></h2>
+<table>
+<%PERL>
+for my $type (qw/Ticket Queue Transaction Group/) {
+ my $class = 'RT::' . $type . 's';
+ my $collection = $class->new($RT::SystemUser);
+ $collection->UnLimit;
+ my $count = $collection->CountAll;
+</%PERL>
+<tr><th><% $type %>s</th>
+<td><% $count %></td></tr>
+% }
+
+<%PERL>
+my $users = RT::Users->new($RT::SystemUser);
+$users->UnLimit;
+my $user_count = $users->CountAll;
+
+$users->LimitToPrivileged;
+my $privileged_count = $users->CountAll;
+my $unprivileged_count = $user_count - $privileged_count;
+</%PERL>
+<tr><th>Privileged Users</th>
+<td><% $privileged_count %></td></tr>
+<tr><th>Unprivileged Users</th>
+<td><% $unprivileged_count %></td></tr>
+</table>
+
+<h2><&|/l&>Perl configuration</&></h2>
+% require Config;
+<pre>
+<% Config::myconfig() %>
+</pre>
+
+<h2><&|/l&>Perl Include Paths (@INC)</&></h2>
+<pre>
+% foreach my $inc (@INC) {
+<% $inc %>
+% }
+</pre>
diff --git a/rt/share/html/Admin/Tools/Shredder/Dumps/dhandler b/rt/share/html/Admin/Tools/Shredder/Dumps/dhandler
new file mode 100644
index 0000000..f316f22
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Dumps/dhandler
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ATTR>
+AutoFlush => 0
+</%ATTR>
+<%FLAGS>
+inherit => undef
+</%FLAGS>
+<%INIT>
+my $arg = $m->dhandler_arg;
+$m->abort(404) if $arg =~ m{\.\.|/|\\};
+
+use File::Spec ();
+use RT::Shredder ();
+my $File = File::Spec->catfile( RT::Shredder->StoragePath, $arg );
+$r->content_type('application/octets-stream');
+open my $fh, "<:raw", $File or $m->abort(404);
+my $buf;
+while( read $fh, $buf, 1024*1024 ) {
+ $m->out($buf);
+}
+return 0;
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink b/rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink
new file mode 100644
index 0000000..ba0aeb8
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink
@@ -0,0 +1,61 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div id="shredder-dump-file-link" class="shredder-help">
+<a href="<% RT->Config->Get('WebPath') %>/Admin/Tools/Shredder/Dumps/<% $File %>"><% loc('Download dumpfile') %></a>
+</div>
+<%ARGS>
+$File => ''
+</%ARGS>
+<%INIT>
+return unless $File;
+use File::Spec ();
+use RT::Shredder ();
+
+$File = File::Spec->abs2rel( $File, RT::Shredder->StoragePath )
+ if File::Spec->file_name_is_absolute($File);
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights
new file mode 100644
index 0000000..0665c07
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights
@@ -0,0 +1,55 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => 'Error' &>
+<& /Admin/Elements/ToolTabs,
+ current_tab => 'Admin/Tools/Shredder',
+ current_subtab => 'Admin/Tools/Shredder',
+ Title => 'Error',
+&>
+<div class="error"><% loc("You don't have <b>SuperUser</b> right.") |n%></div>
+
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage
new file mode 100644
index 0000000..5d857ca
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage
@@ -0,0 +1,59 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Path => ''
+</%ARGS>
+<& /Admin/Elements/Header, Title => 'Error' &>
+<& /Admin/Elements/ToolTabs,
+ current_tab => 'Admin/Tools/Shredder',
+ current_subtab => 'Admin/Tools/Shredder',
+ Title => 'Error',
+&>
+<div class="error">
+<% loc('Shredder needs a directory to write dumps to. Please check that you have <span class="file-path">[_1]</span> and it is writable by your web server.', $m->interp->apply_escapes( $Path ) ) |n%>
+</div>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment
new file mode 100644
index 0000000..b7067b7
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Object => undef
+</%ARGS>
+<a href="<% RT->Config->Get('WebURL') %>/Ticket/Attachment/<% $Object->TransactionId %>/<% $Object->id %>/">
+<% loc('Attachment') %>(<% loc('id') %>:<% $Object->id %>, <% loc('FileName') %>: <% $Object->Filename || loc('(no value)') %>)
+</a>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket
new file mode 100644
index 0000000..4330787
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Object => undef
+</%ARGS>
+<a href="<% RT->Config->Get('WebURL') %>/Ticket/Display.html?id=<% $Object->id %>">
+<% loc('Ticket') %>(<% loc('id') %>:<% $Object->id %>, <% loc('Subject') %>: <% substr($Object->Subject, 0, 30) %>...)
+</a>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User
new file mode 100644
index 0000000..d852f5a
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Object => undef
+</%ARGS>
+<a href="<% RT->Config->Get('WebURL') %>/Admin/Users/Modify.html?id=<% $Object->id %>">
+<% loc('User') %>(<% loc('id') %>:<% $Object->id %>, <% loc('Name') %>: <% $Object->Name %>)
+</a>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox b/rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox
new file mode 100644
index 0000000..fa487f6
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Object => undef
+</%ARGS>
+<input type="checkbox" name="WipeoutObject" value="<% $Object->_AsString %>" />
+<span>
+% if( $m->comp_exists( $path ) ) {
+% $m->comp( $path, Object => $Object );
+% } else {
+<% $Object->_AsString %>
+% }
+</span><br />
+<%ONCE>
+require File::Spec;
+</%ONCE>
+<%INIT>
+my $path = ref $Object;
+$path =~ s/:/-/g;
+$path = File::Spec->catfile( 'Object', $path );
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments b/rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments
new file mode 100644
index 0000000..59c6df3
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Plugin => ''
+</%ARGS>
+<div id="shredder-plugin-<% $Plugin %>-arguments" class="shredder-form">
+<span><% loc('Fill arguments') %>:</span><br />
+% foreach my $a( $plugin_obj->SupportArgs ) {
+<span><% loc($a) %>:</span><input type="text" name="<% "$Plugin:$a" %>" value="<% $ARGS{ "$Plugin:$a" } || '' %>" /><br />
+% }
+</div>
+<%INIT>
+use RT::Shredder::Plugin;
+my $plugin_obj = new RT::Shredder::Plugin;
+my ($status, $msg) = $plugin_obj->LoadByName( $Plugin );
+die $msg unless $status;
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp b/rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp
new file mode 100644
index 0000000..70336bd
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp
@@ -0,0 +1,75 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Plugin => ''
+</%ARGS>
+<div id="shredder-plugin-<% $Plugin %>-help" class="shredder-help">
+<% $text |n%>
+</div>
+<%ONCE>
+use RT::Shredder::Plugin;
+my $plugin_obj = new RT::Shredder::Plugin;
+my %plugins = $plugin_obj->List;
+</%ONCE>
+<%INIT>
+my $file = $plugins{ $Plugin };
+unless( $file ) {
+ $RT::Logger->error( "Couldn't find plugin '$Plugin'" );
+ return;
+}
+
+use RT::Shredder::POD qw();
+my $text = '';
+open my $io_handle, ">:scalar", \$text or die "Can't open scalar for write: $!";
+RT::Shredder::POD::plugin_html( $file, $io_handle );
+if ( $Plugin eq 'Base' ) {
+ $file =~ s/\.pm$/\/Search.pm/;
+ RT::Shredder::POD::plugin_html( $file, $io_handle );
+}
+close $io_handle;
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects b/rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects
new file mode 100644
index 0000000..52743ff
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+@Objects => ()
+</%ARGS>
+<div id="shredder-plugin-results">
+% unless( @Objects ) {
+<& /Elements/ListActions, actions => [loc("Objects list is empty")] &>
+% } else {
+<div class="shredder-form">
+<input id="shredder-select-all-objects-checkbox" type="checkbox" name="SelectAllObjects" onclick="checkAllObjects()" />
+<span><% loc("click to check/uncheck all objects at once") %></span>
+<hr />
+% foreach my $o( @Objects ) {
+<& ObjectCheckBox, Object => $o &>
+% }
+</div>
+<& /Elements/Submit, Name => 'Wipeout', Label => loc('Wipeout') &>
+% }
+</div>
+<%INIT>
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin b/rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin
new file mode 100644
index 0000000..f9ece67
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Plugin => ''
+</%ARGS>
+<& PluginHelp, %ARGS, Plugin => 'Base' &>
+<div class="shredder-form">
+<span>Select plugin: </span>
+<select name="Plugin" onchange="showShredderPluginTab(this.value);">
+<option value=""><% loc('(no value)') %></option>
+% foreach my $p( keys %plugins ) {
+<option value="<% $p %>" <% ($p eq $Plugin)? 'selected="selected"': '' %>><% loc($p) %></option>
+% }
+</select>
+</div>
+<div id="shredder-plugin-tabs">
+% foreach my $p( keys %plugins ) {
+<div id="shredder-plugin-<% $p %>-tab" class="<% ($p ne $Plugin)? 'hidden': '' %>">
+<& PluginHelp, %ARGS, Plugin => $p &>
+<& PluginArguments, %ARGS, Plugin => $p &>
+</div>
+% }
+</div>
+<%ONCE>
+use RT::Shredder::Plugin;
+my $plugin_obj = new RT::Shredder::Plugin;
+my %plugins = $plugin_obj->List('Search');
+</%ONCE>
diff --git a/rt/share/html/Admin/Tools/Shredder/autohandler b/rt/share/html/Admin/Tools/Shredder/autohandler
new file mode 100644
index 0000000..2609452
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/autohandler
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+unless( $session{'CurrentUser'}->HasRight( Right => 'SuperUser', Object => $RT::System ) ) {
+ return $m->comp( 'Elements/Error/NoRights' );
+}
+
+use RT::Shredder ();
+my $path = RT::Shredder->StoragePath;
+unless( -d $path && -w _ ) {
+ return $m->comp( 'Elements/Error/NoStorage', Path => $path );
+}
+
+$m->call_next(%ARGS);
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/Shredder/index.html b/rt/share/html/Admin/Tools/Shredder/index.html
new file mode 100644
index 0000000..15c20df
--- /dev/null
+++ b/rt/share/html/Admin/Tools/Shredder/index.html
@@ -0,0 +1,186 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Plugin => ''
+$Search => ''
+$Wipeout => ''
+@WipeoutObject => ()
+</%ARGS>
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/ToolTabs,
+ current_tab => 'Admin/Tools/Shredder',
+ current_subtab => 'Admin/Tools/Shredder',
+ Title => $title,
+&>
+<form id="shredder-search-form" action="<% RT->Config->Get('WebPath') %>/Admin/Tools/Shredder/" method="GET">
+<div id="shredder-select-plugin">
+<& /Elements/ListActions, actions => $messages{'Errors'} &>
+<& /Elements/ListActions, actions => $messages{'Success'} &>
+<& Elements/DumpFileLink, File => $dump_file &>
+<& Elements/SelectPlugin, Plugin => $Plugin, %ARGS &>
+<div id="shredder-submit-button" class="<% $Plugin? '': 'hidden' %>">
+<& /Elements/Submit, Name => 'Search', Label => loc('Search') &>
+</div>
+</div>
+<br />
+% if( $Search || $Wipeout ) {
+<& Elements/SelectObjects, Objects => \@objs &>
+% }
+</form>
+<%INIT>
+
+require RT::Shredder;
+my $title = loc('Shredder');
+my %messages = ( Errors => [], Success => [] );
+my ($plugin_obj, @objs);
+
+my $catch_non_fatals = sub {
+ require RT::Shredder::Exceptions;
+ if ( my $e = RT::Shredder::Exception::Info->caught ) {
+ push @{ $messages{Errors} }, "$e";
+ $Search = ''; @objs = ();
+ return 1;
+ }
+ if ( UNIVERSAL::isa( $@, 'Class::Exception' ) ) {
+ $@->rethrow;
+ } else {
+ die $@;
+ }
+};
+
+
+if( $Plugin ) { { # use additional block({}) to effectively exit block on errors
+ use RT::Shredder::Plugin;
+ $plugin_obj = new RT::Shredder::Plugin;
+ my( $status, $msg ) = $plugin_obj->LoadByName( $Plugin );
+ unless( $status ) {
+ push @{ $messages{Errors} }, $msg;
+ $Search = '';
+ last;
+ }
+
+ my %args;
+ foreach my $k( keys %ARGS ) {
+ next unless $k =~ /^\Q$Plugin\E:(.*)$/;
+ $args{ $1 } = $ARGS{$k};
+ }
+ ( $status, $msg ) = $plugin_obj->HasSupportForArgs( keys %args );
+ unless( $status ) {
+ push @{ $messages{Errors} }, $msg;
+ $Search = '';
+ last;
+ }
+
+ ($status, $msg) = eval { $plugin_obj->TestArgs( %args ) };
+ $catch_non_fatals->() && last if $@;
+ unless( $status ) {
+ push @{ $messages{Errors} }, $msg;
+ $Search = '';
+ last;
+ }
+} }
+
+my $dump_file = '';
+
+if( $Plugin && $Wipeout ) { { # use additional block({}) to effectively exit block on errors
+ my $shredder = new RT::Shredder( force => 1 );
+ my $backup_plugin = new RT::Shredder::Plugin;
+ my ($status, $msg) = $backup_plugin->LoadByName('SQLDump');
+ unless( $status ) {
+ push @{ $messages{Errors} }, $msg;
+ $Search = ''; @objs = ();
+ last;
+ }
+ ($status, $msg) = $backup_plugin->TestArgs;
+ unless( $status ) {
+ push @{ $messages{Errors} }, $msg;
+ $Search = ''; @objs = ();
+ last;
+ }
+
+ ($dump_file) = $backup_plugin->FileName;
+ push @{ $messages{'Success'} }, "SQL dump file is '$dump_file'";
+
+ $shredder->AddDumpPlugin( Object => $backup_plugin );
+
+ $shredder->PutObjects( Objects => \@WipeoutObject );
+ ($status, $msg) = $plugin_obj->SetResolvers( Shredder => $shredder );
+ unless( $status ) {
+ push @{ $messages{Errors} }, $msg;
+ $Search = ''; @objs = ();
+ last;
+ }
+ eval { $shredder->WipeoutAll };
+ $catch_non_fatals->() && last if $@;
+
+ push @{ $messages{Success} }, loc('objects were successfuly removed');
+} }
+
+if( $Plugin && ( $Search || $Wipeout ) ) { { # use additional block({}) to effectively exit block on errors
+ my $status;
+ ($status, @objs) = eval { $plugin_obj->Run };
+ $catch_non_fatals->() && last if $@;
+ unless( $status ) {
+ push @{ $messages{Errors} }, $objs[0];
+ $Search = ''; @objs = ();
+ last;
+ }
+ push @{ $messages{Success} }, loc('executed plugin successfuly');
+
+ my $shredder = new RT::Shredder;
+ foreach my $o( grep defined, splice @objs ) {
+ eval { push @objs, $shredder->CastObjectsToRecords( Objects => $o ) };
+ $catch_non_fatals->() && last if $@;
+ }
+ unless( @objs ) {
+ push @{ $messages{Success} }, loc('plugin returned empty list');
+ } else {
+ push @{ $messages{Success} }, loc('see object list below');
+ }
+} }
+</%INIT>
diff --git a/rt/share/html/Admin/Tools/index.html b/rt/share/html/Admin/Tools/index.html
new file mode 100644
index 0000000..78b1ed8
--- /dev/null
+++ b/rt/share/html/Admin/Tools/index.html
@@ -0,0 +1,55 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+my $title = loc('System Tools');
+</%init>
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/ToolTabs,
+ current_tab => 'Admin/Tools/index.html',
+ current_subtab => 'Admin/Tools/Configuration.html',
+ Title => $title &>
diff --git a/rt/share/html/Admin/Users/CustomFields.html b/rt/share/html/Admin/Users/CustomFields.html
new file mode 100644
index 0000000..42d8254
--- /dev/null
+++ b/rt/share/html/Admin/Users/CustomFields.html
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/UserTabs,
+ id => $Object->id,
+ current_tab => "Admin/Users/CustomFields.html?$id=".$id,
+ current_subtab => "Admin/Users/CustomFields.html?id=".$id,
+ UserObj => $Object,
+ Title => $title
+ &>
+
+ <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::User' &>
+<%INIT>
+my $Object = RT::User->new( $session{'CurrentUser'} );
+
+$Object->Load($id) || Abort( loc( "Couldn't load object [_1]", $id ) );
+my $FriendlySubTypes =
+ RT::CustomField->new( $session{'CurrentUser'} )
+ ->FriendlyLookupType( $Object->CustomFieldLookupType );
+
+my $title = loc( 'Edit Custom Fields for [_1]', $Object->Name );
+
+</%INIT>
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Users/GnuPG.html b/rt/share/html/Admin/Users/GnuPG.html
new file mode 100644
index 0000000..dd0d05a
--- /dev/null
+++ b/rt/share/html/Admin/Users/GnuPG.html
@@ -0,0 +1,112 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/UserTabs,
+ id => $id,
+ UserObj => $UserObj,
+ current_tab => 'Admin/Users/GnuPG.html?id='. $id,
+ Title => $title,
+&>
+
+<& /Elements/ListActions, actions => \@results &>
+
+% if ( $email ) {
+<& /Admin/Elements/ShowKeyInfo, EmailAddress => $email &>
+% } else {
+<h2><% loc("User has empty email address") %></h2>
+% }
+
+<form action="<%RT->Config->Get('WebPath')%>/Admin/Users/GnuPG.html" method="post" enctype="multipart/form-data">
+<input type="hidden" class="hidden" name="id" value="<% $UserObj->Id %>" />
+
+<& /Widgets/Form/Select,
+ Name => 'PrivateKey',
+ Description => loc('Private Key'),
+ Values => [ map $_->{'Key'}, @{ $keys_meta{'info'} } ],
+ CurrentValue => $UserObj->PrivateKey,
+ DefaultLabel => loc('No private key'),
+&>
+
+<& /Elements/Submit, Name => 'Update', Label => loc('Save Changes') &>
+</form>
+
+<%ARGS>
+$id => undef
+$Update => undef
+</%ARGS>
+<%INIT>
+return unless RT->Config->Get('GnuPG')->{'Enable'};
+
+require RT::Crypt::GnuPG;
+
+my @results;
+
+my $UserObj = RT::User->new( $session{'CurrentUser'} );
+$UserObj->Load( $id );
+unless ( $UserObj->id ) {
+ Abort( loc("Couldn't load user #[_1]", $id) );
+}
+$id = $ARGS{'id'} = $UserObj->id;
+
+my $email = $UserObj->EmailAddress;
+my %keys_meta = RT::Crypt::GnuPG::GetKeysForSigning( $email, 'force' );
+
+$ARGS{'PrivateKey'} = $m->comp('/Widgets/Form/Select:Process',
+ Name => 'PrivateKey',
+ Arguments => \%ARGS,
+ Default => 1,
+);
+
+if ( $Update ) {
+ my ($status, $msg) = $UserObj->SetPrivateKey( $ARGS{'PrivateKey'} );
+ push @results, $msg;
+}
+
+my $title = loc("User's GnuPG keys");
+
+</%INIT>
diff --git a/rt/share/html/Admin/Users/History.html b/rt/share/html/Admin/Users/History.html
new file mode 100644
index 0000000..601751c
--- /dev/null
+++ b/rt/share/html/Admin/Users/History.html
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/UserTabs,
+ id => $id,
+ UserObj => $UserObj,
+ current_tab => $current_tab,
+ Title => $title &>
+
+<& /Ticket/Elements/ShowHistory,
+ Ticket => $UserObj,
+ ShowDisplayModes => 0,
+&>
+
+<%INIT>
+my $current_tab = 'Admin/Users/History.html?id='.$id;
+my $UserObj = new RT::User($session{'CurrentUser'});
+$UserObj->Load($id) || Abort("Couldn't load user '$id'");
+my $title = loc("History of the user [_1]", $UserObj->Name);
+</%INIT>
+<%ARGS>
+$id => ''
+</%ARGS>
diff --git a/rt/share/html/Admin/Users/Memberships.html b/rt/share/html/Admin/Users/Memberships.html
new file mode 100644
index 0000000..ea5dd25
--- /dev/null
+++ b/rt/share/html/Admin/Users/Memberships.html
@@ -0,0 +1,143 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/UserTabs,
+ id => $id,
+ UserObj => $UserObj,
+ current_tab => $current_tab,
+ Title => $title &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="">
+<input type="hidden" id="<% $id %>" />
+
+<h2><&|/l&>Groups the user is member of (check box to delete)</&></h2>
+
+<& /Elements/CollectionList,
+ OrderBy => 'Name',
+ Order => 'ASC',
+ Rows => 0,
+ %ARGS,
+ DisplayFormat => "__CheckBox.{Delete}__,$Format",
+ Format => $Format,
+ Collection => $is_member,
+ AllowSorting => 1,
+ PassArguments => [qw(Format Rows Page Order OrderBy id)],
+&>
+
+<h2><&|/l&>Groups the user is not member of (check box to add)</&></h2>
+
+<& /Elements/CollectionList,
+ OrderBy => 'Name',
+ Order => 'ASC',
+ Rows => 100,
+ %ARGS,
+ DisplayFormat => "__CheckBox.{Add}__,'__HasMemberRecursively.{$id}__/TITLE:Recursive',$Format",
+ Format => $Format,
+ Collection => $is_not_member,
+ AllowSorting => 1,
+ PassArguments => [qw(Format Rows Page Order OrderBy id)],
+&>
+
+<& /Elements/Submit, Label => loc('Update'), Name => 'Update' &>
+
+</form>
+
+<%INIT>
+my $UserObj = RT::User->new($session{'CurrentUser'});
+$UserObj->Load( $id ) || Abort("Couldn't load user '$id'");
+
+my $title = loc("Memberships of the user [_1]", $UserObj->Name);
+my $current_tab = 'Admin/Users/Memberships.html?id='. $id;
+
+my @results;
+if ( $Update ) {
+ foreach my $gid( @Add ) {
+ my $group = RT::Group->new( $session{'CurrentUser'} );
+ $group->LoadUserDefinedGroup( $gid );
+ unless ( $group->id ) {
+ push @results, loc( "Couldn't load group #[_1]", $gid );
+ next;
+ }
+ my ($status, $msg) = $group->AddMember( $id );
+ push @results, $msg;
+ }
+ foreach my $gid( @Delete ) {
+ my $group = RT::Group->new( $session{'CurrentUser'} );
+ $group->LoadUserDefinedGroup( $gid );
+ unless ( $group->id ) {
+ push @results, loc( "Couldn't load group #[_1]", $gid );
+ next;
+ }
+ my ($status, $msg) = $group->DeleteMember( $id );
+ push @results, $msg;
+ }
+}
+
+my $is_member = RT::Groups->new( $session{'CurrentUser'} );
+$is_member->LimitToUserDefinedGroups;
+$is_member->WithMember( PrincipalId => $UserObj->Id );
+
+my $is_not_member = RT::Groups->new( $session{'CurrentUser'} );
+$is_not_member->LimitToUserDefinedGroups;
+$is_not_member->WithoutMember( PrincipalId => $UserObj->Id );
+
+$Format ||= q{'<a href="__WebPath__/Admin/Groups/Modify.html?id=__id__">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Groups/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ .q{,'__Description__'};
+</%INIT>
+<%ARGS>
+$id => undef
+
+$Update => 0,
+@Add => (),
+@Delete => (),
+
+$Format => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Users/Modify.html b/rt/share/html/Admin/Users/Modify.html
new file mode 100755
index 0000000..aae38b1
--- /dev/null
+++ b/rt/share/html/Admin/Users/Modify.html
@@ -0,0 +1,437 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/UserTabs,
+ id => $id,
+ UserObj => $UserObj,
+ current_tab => $current_tab,
+ Title => $title &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="<%RT->Config->Get('WebPath')%>/Admin/Users/Modify.html" method="post" enctype="multipart/form-data">
+%if ($Create) {
+<input type="hidden" class="hidden" name="id" value="new" />
+% } else {
+<input type="hidden" class="hidden" name="id" value="<%$UserObj->Id%>" />
+% }
+<table width="100%" border="0">
+<tr>
+
+<td valign="top" class="boxcontainer">
+<&| /Widgets/TitleBox, title => loc('Identity') &>
+
+<table>
+<tr><td align="right">
+<&|/l&>Username</&>:
+</td><td>
+<input name="Name" value="<%$UserObj->Name||''%>" /> <strong><&|/l&>(required)</&></strong>
+</td></tr>
+<tr><td align="right">
+<&|/l&>Email</&>:
+</td><td>
+<input name="EmailAddress" value="<%$UserObj->EmailAddress||''%>" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Real Name</&>:
+</td><td>
+<input name="RealName" value="<%$UserObj->RealName||''%>" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Nickname</&>:
+</td><td>
+<input name="NickName" value="<%$UserObj->NickName||''%>" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Unix login</&>:
+</td><td>
+<input name="Gecos" value="<%$UserObj->Gecos||''%>" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Language</&>:
+</td><td>
+<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &>
+</td></tr>
+<tr><td align="right">
+<&|/l&>Extra info</&>:
+</td><td>
+<textarea name="FreeformContactInfo" cols="20" rows="5"><%$UserObj->FreeformContactInfo||''%></textarea>
+</td></tr>
+</table>
+</&>
+<br />
+<&| /Widgets/TitleBox, title => loc('Access control') &>
+<input type="hidden" class="hidden" name="SetEnabled" value="1" />
+<input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> />
+<&|/l&>Let this user access RT</&><br />
+
+
+<input type="hidden" class="hidden" name="SetPrivileged" value="1" />
+<input type="checkbox" class="checkbox" name="Privileged" value="1" <%$PrivilegedChecked||''%> /> <&|/l&>Let this user be granted rights</&><br />
+
+% unless (RT->Config->Get('WebExternalAuth') and !RT->Config->Get('WebFallbackToInternalAuth')) {
+<table>
+<tr>
+<td align="right">
+<&|/l&>New Password</&>:
+</td>
+<td align="left">
+<input type="password" name="Pass1" autocomplete="off" />
+</td>
+</tr>
+<tr><td align="right">
+<&|/l&>Retype Password</&>:
+</td>
+<td>
+<input type="password" name="Pass2" autocomplete="off" />
+</td>
+</tr>
+</table>
+% }
+</&>
+% $m->callback( %ARGS, CallbackName => 'LeftColumnBottom', UserObj => $UserObj );
+</td>
+
+<td valign="top" class="boxcontainer">
+<&| /Widgets/TitleBox, title => loc('Location') &>
+<table>
+<tr><td align="right">
+<&|/l&>Organization</&>:
+</td><td>
+<input name="Organization" value="<%$UserObj->Organization||''%>" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Address1</&>:
+</td><td>
+<input name="Address1" value="<%$UserObj->Address1||''%>" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Address2</&>:
+</td><td>
+<input name="Address2" value="<%$UserObj->Address2||''%>" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>City</&>:
+</td><td>
+<input name="City" value="<%$UserObj->City||''%>" size="14" />
+
+</td></tr>
+<tr><td align="right">
+<&|/l&>State</&>:
+</td><td>
+<input name="State" value="<%$UserObj->State||''%>" size="3" />
+
+</td></tr>
+<tr><td align="right">
+<&|/l&>Zip</&>:
+</td><td>
+<input name="Zip" value="<%$UserObj->Zip||''%>" size="9" />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Country</&>:
+</td><td>
+<input name="Country" value="<%$UserObj->Country||''%>" />
+</td></tr>
+</table>
+</&>
+<br />
+<&| /Widgets/TitleBox, title => loc('Phone numbers') &>
+<table>
+<tr><td align="right">
+<&|/l&>Residence</&>:
+</td><td>
+<input name="HomePhone" value="<%$UserObj->HomePhone||''%>" size="13" /><br />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Work</&>:
+</td><td>
+<input name="WorkPhone" value="<%$UserObj->WorkPhone||''%>" size="13" /><br />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Mobile</&>:
+</td><td>
+<input name="MobilePhone" value="<%$UserObj->MobilePhone||''%>" size="13" /><br />
+</td></tr>
+<tr><td align="right">
+<&|/l&>Pager</&>:
+</td><td>
+<input name="PagerPhone" value="<%$UserObj->PagerPhone||''%>" size="13" /><br />
+</td>
+</tr>
+</table>
+</&>
+<br />
+<&| /Widgets/TitleBox, title => loc('Custom Fields') &>
+<table>
+% my $CFs = $UserObj->CustomFields;
+% while (my $CF = $CFs->Next) {
+<tr valign="top"><td align="right">
+<% loc($CF->Name) %>:
+</td><td>
+% if ($UserObj->id) {
+<& /Elements/EditCustomField, %ARGS, Object => $UserObj, CustomField => $CF &>
+% } else {
+<& /Elements/EditCustomField, %ARGS, NamePrefix => 'Object-RT::User-new-CustomField-', CustomField => $CF &>
+% }
+</td></tr>
+% }
+</table>
+</&>
+% $m->callback( %ARGS, CallbackName => 'RightColumnBottom', UserObj => $UserObj );
+</td></tr>
+<tr>
+<td colspan="2">
+<&| /Widgets/TitleBox, title => loc('Comments about this user') &>
+<textarea class="comments" name="Comments" cols="80" rows="5" wrap="virtual"><%$UserObj->Comments||''%></textarea>
+</&>
+%if (!$Create && $UserObj->Privileged) {
+<br />
+<&| /Widgets/TitleBox, title => loc('Signature') &>
+<textarea class="signature" cols="80" rows="5" name="Signature" wrap="hard"><%$UserObj->Signature||''%></textarea>
+</&>
+% }
+
+</td>
+</tr>
+</table>
+
+% if ( $Create ) {
+<& /Elements/Submit, Label => loc('Create') &>
+% } else {
+<& /Elements/Submit, Label => loc('Save Changes') &>
+% }
+</form>
+
+<%INIT>
+
+my $current_tab;
+my $UserObj = new RT::User($session{'CurrentUser'});
+my ($title, $PrivilegedChecked, $EnabledChecked, $Disabled, $result, @results);
+
+my ($val, $msg);
+
+if ($Create) {
+ $current_tab = 'Admin/Users/Modify.html?Create=1';
+ $title = loc("Create a new user");
+}
+else {
+
+ $current_tab = 'Admin/Users/Modify.html?id='.$id if $id;
+
+ if ( defined $id && $id eq 'new') {
+ ( $val, $msg ) = $UserObj->Create(
+ Name => $Name,
+ EmailAddress => $ARGS{'EmailAddress'},
+ Name => $ARGS{'Name'},
+ Comments => $ARGS{'Comments'},
+ Signature => $ARGS{'Signature'},
+ EmailAddress => $ARGS{'EmailAddress'},
+ FreeformContactInfo => $ARGS{'FreeformContactInfo'},
+ Organization => $ARGS{'Organization'},
+ RealName => $ARGS{'RealName'},
+ NickName => $ARGS{'NickName'},
+ Lang => $ARGS{'Lang'},
+ EmailEncoding => $ARGS{'EmailEncoding'},
+ WebEncoding => $ARGS{'WebEncoding'},
+ ExternalContactInfoId => $ARGS{'ExternalContactInfoId'},
+ ContactInfoSystem => $ARGS{'ContactInfoSystem'},
+ Gecos => $ARGS{'Gecos'},
+ ExternalAuthId => $ARGS{'ExternalAuthId'},
+ AuthSystem => $ARGS{'AuthSystem'},
+ HomePhone => $ARGS{'HomePhone'},
+ WorkPhone => $ARGS{'WorkPhone'},
+ MobilePhone => $ARGS{'MobilePhone'},
+ PagerPhone => $ARGS{'PagerPhone'},
+ Address1 => $ARGS{'Address1'},
+ Address2 => $ARGS{'Address2'},
+ City => $ARGS{'City'},
+ State => $ARGS{'State'},
+ Zip => $ARGS{'Zip'},
+ Country => $ARGS{'Country'},
+ Privileged => $ARGS{'Privileged'},
+ Disabled => ($ARGS{'Enabled'} ? 0 : 1)
+ );
+
+ if ($val) {
+ push @results, $msg;
+ foreach my $key ( keys %ARGS) {
+ # Convert custom fields on the "new" object to custom fields on the one we've just created
+ if ($key =~ /^Object-RT::User-new-CustomField-(.*)$/) {
+ $ARGS{'Object-RT::User-'.$val.'-CustomField-'.$1} = delete $ARGS{$key};
+ }
+ }
+ push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
+ } else {
+ push @results, loc('User could not be created: [_1]', $msg);
+ }
+ } else {
+ $UserObj->Load($id) || $UserObj->Load($Name)
+ || Abort("Couldn't load user '" . ( $Name || '') . "'");
+ $val = $UserObj->Id();
+ }
+
+ if ($val) {
+ $title = loc("Modify the user [_1]", $UserObj->Name);
+ }
+
+ # If the create failed
+ else {
+ $title = loc("Create a new user");
+ $Create = 1;
+ }
+}
+
+
+
+
+# If we have a user to modify, lets try.
+if ($UserObj->Id && $id ne 'new') {
+
+ my @fields = qw(Name Comments Signature EmailAddress FreeformContactInfo
+ Organization RealName NickName Lang EmailEncoding WebEncoding
+ ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId
+ AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1
+ Address2 City State Zip Country
+ );
+
+ my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
+ Object => $UserObj,
+ ARGSRef => \%ARGS );
+ push (@results,@fieldresults);
+ push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
+
+
+ # {{{ Deal with special fields: Privileged, Enabled
+ if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
+ my ($code, $msg) = $UserObj->SetPrivileged($Privileged);
+ push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
+ }
+
+ #we're asking about enabled on the web page but really care about disabled.
+ $Disabled = $Enabled ? 0 : 1;
+
+ if ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) {
+ my ($code, $msg) = $UserObj->SetDisabled($Disabled);
+ push @results, $msg;
+ }
+
+
+ # }}}
+}
+
+if ( $UserObj->Id ) {
+ my $password_not_set;
+ # Deal with Password field
+ if ( !$Pass1 and !$Pass2 ) {
+ $password_not_set = 1;
+ } elsif ( $Pass1 ne $Pass2 ) {
+ $password_not_set = 1;
+ push @results, loc("Passwords do not match.");
+ } elsif ( $Pass1 eq $Pass2 and !$UserObj->IsPassword($Pass1) ) {
+ my ($code, $msg) = $UserObj->SetPassword($Pass1);
+ push @results, loc_fuzzy($msg);
+ $password_not_set = 1 unless $code;
+ }
+ if ($id eq 'new' and $password_not_set) {
+ push @results, loc("A password was not set, so user won't be able to login.");
+ }
+}
+
+
+# Do some setup for the ui
+unless ( $UserObj->id && $UserObj->Disabled ) {
+ $EnabledChecked = 'checked="checked"';
+}
+
+if (!$Create && $UserObj->Privileged()) {
+ $PrivilegedChecked = 'checked="checked"';
+}
+
+# set the id, so the the menu will have the right info, this needs to
+# be done here to avoid creating and then modifying a user
+$id = $UserObj->Id;
+
+</%INIT>
+
+
+<%ARGS>
+$id => undef
+$Name => undef
+$Comments => undef
+$Signature => undef
+$EmailAddress => undef
+$FreeformContactInfo => undef
+$Organization => undef
+$RealName => undef
+$NickName => undef
+$Privileged => undef
+$SetPrivileged => undef
+$Enabled => undef
+$SetEnabled => undef
+$Lang => undef
+$EmailEncoding => undef
+$WebEncoding => undef
+$ExternalContactInfoId => undef
+$ContactInfoSystem => undef
+$Gecos => undef
+$ExternalAuthId => undef
+$AuthSystem => undef
+$HomePhone => undef
+$WorkPhone => undef
+$MobilePhone => undef
+$PagerPhone => undef
+$Address1 => undef
+$Address2 => undef
+$City => undef
+$State => undef
+$Zip => undef
+$Country => undef
+$Pass1 => undef
+$Pass2=> undef
+$Create=> undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Users/MyRT.html b/rt/share/html/Admin/Users/MyRT.html
new file mode 100644
index 0000000..20e6123
--- /dev/null
+++ b/rt/share/html/Admin/Users/MyRT.html
@@ -0,0 +1,134 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Admin/Elements/UserTabs,
+ id => $id,
+ UserObj => $UserObj,
+ current_tab => $current_tab,
+ Title => $title &>
+
+<& /Widgets/SelectionBox:header, nojs => 1 &>
+
+<& /Elements/ListActions, actions => \@actions &>
+
+<form method="post" action="MyRT.html">
+<input type="hidden" name="id" value="<% $id %>" />
+<input type="hidden" name="Reset" value="1" />
+<input type="submit" class="button" value="<%loc('Reset to default')%>">
+</form>
+
+<br />
+
+% for my $pane (@panes) {
+<&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &>
+<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &></&>
+<br />
+% }
+
+<%init>
+my @actions;
+my $current_tab;
+$current_tab = 'Admin/Users/MyRT.html?id='.$id if $id;
+my $UserObj = new RT::User($session{'CurrentUser'});
+$UserObj->Load($id) || Abort("Couldn't load user '" . ($id || '') . "'");
+my $title = loc("RT at a glance for the user [_1]", $UserObj->Name);
+
+if ($ARGS{Reset}) {
+ my ($ok, $msg) = $UserObj->SetPreferences('HomepageSettings', {});
+ push @actions, $ok ? loc('Preferences saved for user [_1].', $UserObj->Name) : $msg;
+}
+
+my ($default_portlets) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings');
+my $portlets = $UserObj->Preferences('HomepageSettings', $default_portlets ? $default_portlets->Content : {});
+
+my %allowed_components = map {$_ => 1} @{ RT->Config->Get('HomepageComponents') };
+
+my @items;
+push @items, map {["component-$_", $_]} sort keys %allowed_components;
+
+my $sys = RT::System->new( RT::CurrentUser->new($UserObj) );
+my @objs = ($sys);
+
+push @objs, RT::SavedSearches->new( RT::CurrentUser->new( $UserObj ) )->_PrivacyObjects;
+
+for my $object (@objs) {
+ for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) {
+ my ($desc, $search) = @$_;
+ my $SearchType = $search->Content->{'SearchType'} || 'Ticket';
+ if ($object eq $sys && $SearchType eq 'Ticket') {
+ push @items, ["system-$desc", $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"];
+ }
+ }
+}
+
+my @panes = $m->comp(
+ '/Admin/Elements/ConfigureMyRT',
+ panes => ['body', 'summary'],
+ Action => "MyRT.html?id=$id",
+ items => \@items,
+ current_portlets => $portlets,
+ OnSave => sub {
+ my ( $conf, $pane ) = @_;
+ my ($ok, $msg) = $UserObj->SetPreferences( 'HomepageSettings', $conf );
+ push @actions, $ok ? loc('Preferences [_1] for user [_2].', $pane, $UserObj->Name) : $msg;
+ }
+);
+
+$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1 )
+ for @panes;
+
+</%init>
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Users/index.html b/rt/share/html/Admin/Users/index.html
new file mode 100755
index 0000000..e9a5818
--- /dev/null
+++ b/rt/share/html/Admin/Users/index.html
@@ -0,0 +1,135 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc('Select a user') &>
+<& /Admin/Elements/UserTabs, current_tab => 'Admin/Users/',
+ current_subtab => 'Admin/Users/',
+ Title => loc('Select a user') &>
+
+<h1><% $caption %></h1>
+<p><&|/l&>Select a user</&>:</p>
+% unless ( $users->Count ) {
+<em><&|/l&>No users matching search criteria found.</&></em>
+% } else {
+
+<& /Elements/CollectionList,
+ OrderBy => 'Name',
+ Order => 'ASC',
+ Rows => 100,
+ %ARGS,
+ Format => $Format,
+ Collection => $users,
+ AllowSorting => 1,
+ PassArguments => [qw(Format Rows Page Order OrderBy UserString UserOp UserField IdLike EmailLike FindDisabledUsers)],
+&>
+
+% my $ids = join ',', map $_->id, @{ $users->ItemsArrayRef };
+% if ( $ids ) {
+<div align="right"><em>
+(<a href="<%RT->Config->Get('WebPath')%>/Download/Tabular/User/<% $ids %>/Users.tsv">
+<&|/l&>Download as a tab-delimited file</&>
+</a>)</em></div>
+% }
+
+<br /><br />
+% }
+
+<form method="post" action="<% RT->Config->Get('WebPath') %>/Admin/Users/index.html">
+% foreach my $field( qw(Format Rows Page Order OrderBy) ) {
+% next unless defined $ARGS{ $field } && length $ARGS{ $field };
+<input type="hidden" name="<% $field %>" value="<% $ARGS{ $field } %>" />
+% }
+<&|/l&>Find all users whose</&> <& /Elements/SelectUsers, %ARGS &><br />
+<input type="checkbox" class="checkbox" name="FindDisabledUsers" value="1" <% $FindDisabledUsers? 'checked="checked"': '' %> />
+<&|/l&>Include disabled users in search.</&>
+<br />
+<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
+</form>
+
+<%INIT>
+my $caption;
+my $users = RT::Users->new( $session{'CurrentUser'} );
+$users->{'find_disabled_rows'} = 1 if $FindDisabledUsers;
+
+if ( defined($UserString) && length $UserString ) {
+ $caption = loc("Users matching search criteria");
+ if ( $UserField =~ /^CustomField-(\d+)/ ) {
+ $users->LimitCustomField(
+ CUSTOMFIELD => $1,
+ OPERATOR => $UserOp,
+ VALUE => $UserString,
+ );
+ }
+ else {
+ $users->Limit(
+ FIELD => $UserField,
+ OPERATOR => $UserOp,
+ VALUE => $UserString,
+ );
+ }
+}
+else {
+ $caption = loc("Privileged users");
+ $users->LimitToPrivileged;
+}
+
+$Format ||= q{'<a href="__WebPath__/Admin/Users/Modify.html?id=__id__">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Users/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ .q{,__RealName__, __EmailAddress__};
+
+</%INIT>
+<%ARGS>
+$Format => undef,
+
+$UserString => undef
+$UserOp => '='
+$UserField => 'Name'
+$IdLike => undef
+$EmailLike => undef
+
+$FindDisabledUsers => 0
+</%ARGS>
diff --git a/rt/share/html/Admin/autohandler b/rt/share/html/Admin/autohandler
new file mode 100644
index 0000000..230b0b5
--- /dev/null
+++ b/rt/share/html/Admin/autohandler
@@ -0,0 +1,55 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+return $m->call_next(%ARGS) if $session{'CurrentUser'}->UserObj->HasRight(
+ Right => 'ShowConfigTab',
+ Object => $RT::System,
+);
+
+$m->clear_and_abort(403);
+</%init>
diff --git a/rt/share/html/Admin/index.html b/rt/share/html/Admin/index.html
new file mode 100755
index 0000000..a24ecd9
--- /dev/null
+++ b/rt/share/html/Admin/index.html
@@ -0,0 +1,95 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& //Admin/Elements/Header, Title => loc('RT Administration') &>
+<& //Admin/Elements/Tabs, Title => loc('RT Administration') &>
+
+<& /Elements/ListMenu, items => $tabs &>
+<%init>
+
+
+
+my $tabs = {
+ A => {
+ title => loc('Users'),
+ path => '/Admin/Users/index.html',
+ description => loc('Manage users and passwords'),
+ },
+ B => {
+ title => loc('Groups'),
+ path => '/Admin/Groups/index.html',
+ description => loc('Manage groups and group membership'),
+ },
+ C => {
+ title => loc('Queues'),
+ path => '/Admin/Queues/index.html',
+ description => loc('Manage queues and queue-specific properties'),
+ },
+ D => {
+ 'title' => loc('Custom Fields'),
+ description => loc('Manage custom fields and custom field values'),
+ path => '/Admin/CustomFields/index.html',
+ },
+ E => {
+ 'title' => loc('Global'),
+ path => '/Admin/Global/index.html',
+ description =>
+ loc('Manage properties and configuration which apply to all queues'),
+ },
+ F => {
+ 'title' => loc('Tools'),
+ path => '/Admin/Tools/index.html',
+ description => loc('Use other RT administrative tools')
+ },
+};
+
+ $m->callback( %ARGS, tabs => $tabs );
+
+
+
+
+</%init>
diff --git a/rt/share/html/Approvals/Display.html b/rt/share/html/Approvals/Display.html
new file mode 100755
index 0000000..67567c7
--- /dev/null
+++ b/rt/share/html/Approvals/Display.html
@@ -0,0 +1,72 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+
+<& Elements/Tabs,
+ current_tab => "Approvals/Display.html",
+ Title => $title &>
+<form method="post" action="<%RT->Config->Get('WebPath')%>/Approvals/index.html">
+
+<&| /Widgets/TitleBox, title => $title &>
+<& /Ticket/Elements/ShowHistory , Ticket => $Ticket, Collapsed => 0, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowTitleBarCommands => 0 &>
+<hr />
+<& Elements/Approve, ticket => $Ticket, ShowApproving => 0 &>
+</&>
+<& /Elements/Submit&>
+</form>
+<& Elements/ShowDependency, Ticket => $Ticket &>
+
+<%init>
+my $Ticket = LoadTicket($id);
+
+my $title = loc("Approval #[_1]: [_2]", $Ticket->Id, $Ticket->Subject);
+
+</%init>
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Approvals/Elements/Approve b/rt/share/html/Approvals/Elements/Approve
new file mode 100755
index 0000000..c705c33
--- /dev/null
+++ b/rt/share/html/Approvals/Elements/Approve
@@ -0,0 +1,94 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="approval">
+ <div class="name">
+ <a href="<%RT->Config->Get('WebPath')%>/Approvals/Display.html?id=<%$ticket->Id%>"><% loc("#[_1]: [_2]", $ticket->Id, $ticket->Subject) %></a> (<%loc($ticket->Status)%>)
+ </div>
+% if ($ShowApproving) {
+% foreach my $approving ( $ticket->AllDependedOnBy( Type => 'ticket' ) ) {
+ <div class="originating-ticket">
+ <span class="link"><a href="<%RT->Config->Get('WebPath')%>/Ticket/Display.html?id=<% $approving->Id %>"><&|/l, $approving->Id, $approving->Subject &>Originating ticket: #[_1]</&></a></span>
+ <div class="info">
+% if ($ShowCustomFields) {
+ <& /Ticket/Elements/ShowCustomFields, Ticket => $approving &>
+% }
+% if ($ShowHistory) {
+ <& /Ticket/Elements/ShowHistory, Ticket => $approving, Collapsed => 0, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowTitleBarCommands => 0 &>
+% }
+ </div>
+ </div>
+% }
+% }
+ <div class="form">
+ <div class="action">
+ <div>
+ <input type="radio" class="radio" id="Approval-<%$ticket->Id%>-Action-approve" name="Approval-<%$ticket->Id%>-Action" value="approve" />
+ <label for="Approval-<%$ticket->Id%>-Action-approve"><&|/l&>Approve</&></label>
+ </div>
+ <div>
+ <input type="radio" class="radio" id="Approval-<%$ticket->Id%>-Action-deny" name="Approval-<%$ticket->Id%>-Action" value="deny" />
+ <label for="Approval-<%$ticket->Id%>-Action-deny"><&|/l&>Deny</&></label>
+ </div>
+ <div>
+ <input type="radio" class="radio" id="Approval-<%$ticket->Id%>-Action-none" name="Approval-<%$ticket->Id%>-Action" value="none" checked="checked" />
+ <label for="Approval-<%$ticket->Id%>-Action-none"><&|/l&>No action</&></label>
+ </div>
+ </div>
+ <div class="notes">
+ <label for="Approval-<%$ticket->Id%>-Notes"><&|/l&>Notes</&></label>
+ <textarea name="Approval-<%$ticket->Id%>-Notes" id="Approval-<%$ticket->Id%>-Notes" rows="2" cols="70"></textarea>
+ </div>
+ <div class="clear"></div>
+ </div>
+</div>
+<%ARGS>
+$ShowApproving => 1
+$ShowCustomFields => 1
+$ShowHistory => 1
+$ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Approvals/Elements/PendingMyApproval b/rt/share/html/Approvals/Elements/PendingMyApproval
new file mode 100755
index 0000000..e6b08f0
--- /dev/null
+++ b/rt/share/html/Approvals/Elements/PendingMyApproval
@@ -0,0 +1,111 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<script type="text/javascript"><!--
+ onLoadHook('createCalendarLink("CreatedBefore");');
+ onLoadHook('createCalendarLink("CreatedAfter");');
+--></script>
+% my %done;
+% foreach ($tickets, $group_tickets) {
+% while (my $ticket = $_->Next() ) {
+% next if !$ARGS{'ShowDependent'} and $ticket->HasUnresolvedDependencies( Type => 'approval' );
+% next if $done{$ticket->Id}++; # don't show duplicate tickets
+<& Approve, ticket => $ticket &>
+% }
+% }
+
+<&| /Widgets/TitleBox, title => loc("Search for approvals") &>
+<input type="checkbox" class="checkbox" value="1" name="ShowPending"
+ <%((!$ARGS{'ShowRejected'} && !$ARGS{'ShowResolved'}) ||
+ $ARGS{'ShowPending'})
+ && qq[checked="checked"] |n%> /> <&|/l&>Show pending requests</&><br />
+<input type="checkbox" class="checkbox" value="1" name="ShowResolved" <% defined($ARGS{'ShowResolved'}) && $ARGS{'ShowResolved'} && qq[checked="checked"] |n%> /> <&|/l&>Show approved requests</&><br />
+<input type="checkbox" class="checkbox" value="1" name="ShowRejected" <% defined($ARGS{'ShowRejected'}) && $ARGS{'ShowRejected'} && qq[checked="checked"] |n%> /> <&|/l&>Show denied requests</&><br />
+<input type="checkbox" class="checkbox" value="1" name="ShowDependent" <% defined($ARGS{'ShowDependent'}) && $ARGS{'ShowDependent'} && qq[checked="checked"] |n%> /> <&|/l&>Show requests awaiting other approvals</&><br />
+
+<&|/l,"<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore' />"&>Only show approvals for requests created before [_1]</&><br />
+
+<&|/l, "<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter' />"&>Only show approvals for requests created after [_1]</&>
+</&>
+
+<%init>
+my $tickets = RT::Tickets->new( $session{'CurrentUser'} );
+$tickets->LimitOwner( VALUE => $session{'CurrentUser'}->Id );
+
+# also consider AdminCcs as potential approvers.
+my $group_tickets = RT::Tickets->new( $session{'CurrentUser'} );
+$group_tickets->LimitWatcher( VALUE => $session{'CurrentUser'}->UserObj->EmailAddress, TYPE => 'AdminCc' );
+
+my $created_before = RT::Date->new( $session{'CurrentUser'} );
+my $created_after = RT::Date->new( $session{'CurrentUser'} );
+
+foreach ($tickets, $group_tickets) {
+ $_->Limit( FIELD => 'Type', VALUE => 'approval' );
+
+ if ( $ARGS{'ShowResolved'} ) {
+ $_->LimitStatus( VALUE => 'resolved' );
+ }
+ if ( $ARGS{'ShowRejected'} ) {
+ $_->LimitStatus( VALUE => 'rejected' );
+ }
+ if ( $ARGS{'ShowPending'} || ( !$ARGS{'ShowRejected'} && !$ARGS{'Resolved'} ) ) {
+ $_->LimitStatus( VALUE => 'open' );
+ $_->LimitStatus( VALUE => 'new' );
+ $_->LimitStatus( VALUE => 'stalled' );
+ }
+
+ if ( $ARGS{'CreatedBefore'} ) {
+ $created_before->Set( Format => 'unknown', Value => $ARGS{'CreatedBefore'} );
+ $_->LimitCreated( OPERATOR => "<=", VALUE => $created_before->ISO );
+ }
+ if ( $ARGS{'CreatedAfter'} ) {
+ $created_after->Set( Format => 'unknown', Value => $ARGS{'CreatedAfter'} );
+ $_->LimitCreated( OPERATOR => ">=", VALUE => $created_after->ISO );
+ }
+}
+
+</%init>
diff --git a/rt/share/html/Approvals/Elements/ShowDependency b/rt/share/html/Approvals/Elements/ShowDependency
new file mode 100755
index 0000000..ee06a96
--- /dev/null
+++ b/rt/share/html/Approvals/Elements/ShowDependency
@@ -0,0 +1,109 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% my $approving = $Ticket->DependedOnBy();
+% if ($approving->Count) {
+<h3><&|/l&>Tickets which depend on this approval:</&></h3>
+
+<table width="100%">
+<tr>
+<td width="25" bgcolor="#999999">&nbsp;</td><td>
+<%PERL>
+my %show;
+while (my $link = $approving->Next()) {
+ next unless ($link->BaseURI->IsLocal());
+ my $text = '<a name="' . $link->BaseObj->Id . '">';
+ my $head = '';
+ my $type = $link->BaseObj->Type;
+ my $dep = $m->scomp('ShowDependency', Ticket => $link->BaseObj, _seen => $_seen);
+
+ if ($type eq 'approval') {
+ $head .= $m->scomp('/Widgets/TitleBoxStart', title => loc("Approval #[_1]: [_2]", $link->BaseObj->Id, $link->BaseObj->Subject));
+ $text .= $head;
+ $text .= $m->scomp('/Ticket/Elements/ShowCustomFields', Ticket => $link->BaseObj);
+ } elsif ($type eq 'ticket') {
+ $head .= $m->scomp('/Widgets/TitleBoxStart', title => loc("Ticket #[_1]: [_2]", $link->BaseObj->Id, $link->BaseObj->Subject));
+ $text .= $head;
+ $text .= $m->scomp('/Ticket/Elements/ShowSummary', Ticket => $link->BaseObj);
+ } else {
+ $head .= $m->scomp('/Widgets/TitleBoxStart', title => loc("#[_1]: [_2]", $link->BaseObj->Id, $link->BaseObj->Subject));
+ $text .= $head;
+ }
+
+ $text .= $m->scomp('/Ticket/Elements/ShowHistory' , Ticket => $link->BaseObj, Collapsed => ($type ne 'ticket'), ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowTitleBarCommands => 0);
+
+ $head .= $m->scomp('/Widgets/TitleBoxEnd');
+ $text .= $m->scomp('/Widgets/TitleBoxEnd');
+ $text .= $dep;
+ $text .= '</a>';
+ $show{$link->BaseObj->Id} = {
+ text => $text,
+ head => $head,
+ };
+}
+
+my $refer;
+foreach my $id (sort keys %show) {
+ if ($_seen->{$id}++) {
+ $refer .= "<a href='#txn-$id'>" . $show{$id}{head} . "</a>";
+ next;
+ }
+
+ $m->print($show{$id}{text});
+}
+$m->print($refer);
+
+</%PERL>
+</td>
+</tr>
+</table>
+
+% }
+<%ARGS>
+$Ticket
+$_seen => {}
+</%ARGS>
diff --git a/rt/share/html/Approvals/Elements/Tabs b/rt/share/html/Approvals/Elements/Tabs
new file mode 100755
index 0000000..678e4ce
--- /dev/null
+++ b/rt/share/html/Approvals/Elements/Tabs
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Tabs,
+ tabs => $tabs,
+ current_toptab => 'Approvals/',
+ current_tab => $current_tab,
+ Title => $Title &>
+
+<%ARGS>
+$tabs => undef
+$current_tab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Approvals/autohandler b/rt/share/html/Approvals/autohandler
new file mode 100644
index 0000000..08adab9
--- /dev/null
+++ b/rt/share/html/Approvals/autohandler
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+$m->call_next(%ARGS) if $session{'CurrentUser'}->UserObj->HasRight(
+ Right => 'ShowApprovalsTab',
+ Object => $RT::System,
+);
+</%init>
diff --git a/rt/share/html/Approvals/index.html b/rt/share/html/Approvals/index.html
new file mode 100755
index 0000000..068f9d8
--- /dev/null
+++ b/rt/share/html/Approvals/index.html
@@ -0,0 +1,90 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("My approvals") &>
+<& /Approvals/Elements/Tabs, Title => loc("My approvals") &>
+
+<& /Elements/ListActions, actions => \@actions &>
+<form method="post">
+<& Elements/PendingMyApproval, %ARGS &>
+<& /Elements/Submit, Label => loc('Go!') &>
+</form>
+<%init>
+
+my (@actions);
+foreach my $arg ( keys %ARGS ) {
+
+ next unless ( $arg =~ /Approval-(\d+)-Action/ );
+
+ my ( $notesval, $notesmsg );
+
+ my $ticket = LoadTicket($1);
+
+ if ( $ARGS{ "Approval-" . $ticket->Id . "-Notes" } ) {
+ my $notes = MIME::Entity->build(
+ Data => [ $ARGS{ "Approval-" . $ticket->Id . "-Notes" } ]
+ );
+ RT::I18N::SetMIMEEntityToUTF8($notes); # convert text parts into utf-8
+
+ my ( $notesval, $notesmsg ) = $ticket->Correspond( MIMEObj => $notes );
+ if ($notesval) {
+ push ( @actions, loc("Approval #[_1]: Notes recorded",$ticket->Id ));
+ } else {
+ push ( @actions, loc("Approval #[_1]: Notes not recorded due to a system error",$ticket->Id ));
+ }
+ }
+
+ my ($val, $msg);
+ if ( $ARGS{$arg} eq 'deny' ) {
+ ( $val, $msg ) = $ticket->SetStatus('rejected');
+ }
+ elsif ( $ARGS{$arg} eq 'approve' ) {
+ ( $val, $msg ) = $ticket->SetStatus('resolved');
+ }
+ push ( @actions, loc("Approval #[_1]: [_2]",$ticket->id, $msg )) if ($msg);
+}
+</%init>
diff --git a/rt/share/html/Dashboards/Elements/DashboardsForObject b/rt/share/html/Dashboards/Elements/DashboardsForObject
new file mode 100644
index 0000000..3e5d1e2
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/DashboardsForObject
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Object => undef
+</%args>
+<%init>
+# Returns a hash of dashboards associated on $Object
+
+use RT::Dashboard;
+my %dashboards;
+my $privacy = RT::Dashboard->_build_privacy($Object);
+
+while (my $attr = $Object->Attributes->Next) {
+ if ($attr->Name =~ /^Dashboard\b/) {
+ my $dashboard = RT::Dashboard->new($session{'CurrentUser'});
+ my ($ok, $msg) = $dashboard->Load($privacy, $attr->id);
+
+ if (!$ok) {
+ $RT::Logger->debug("Unable to load dashboard $ok (privacy $privacy): $msg");
+ next;
+ }
+
+ if ($Object->isa('RT::System')) {
+ push @{ $dashboards{system} }, $dashboard;
+ }
+ elsif ($Object->isa('RT::User')) {
+ push @{ $dashboards{personal} }, $dashboard;
+ }
+ elsif ($Object->isa('RT::Group')) {
+ push @{ $dashboards{group}{$Object->Name} }, $dashboard;
+ }
+ }
+}
+return \%dashboards;
+</%init>
+
diff --git a/rt/share/html/Dashboards/Elements/DashboardsForObjects b/rt/share/html/Dashboards/Elements/DashboardsForObjects
new file mode 100644
index 0000000..b4fdcf7
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/DashboardsForObjects
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Objects => undef
+$dashboards => {}
+$flatten => 0
+</%args>
+<%init>
+# Returns a hash of dashboards associated with @Objects
+if (!defined($Objects)) {
+ @$Objects = RT::Dashboard->new($session{CurrentUser})->_PrivacyObjects;
+}
+
+for my $object (@$Objects) {
+ my $new_dashboards = $m->comp("/Dashboards/Elements/DashboardsForObject", Object => $object);
+
+ push @{ $dashboards->{$_} }, @{ $new_dashboards->{$_} || [] }
+ for qw/personal system/;
+
+ push @{ $dashboards->{group}{$_} }, @{ $new_dashboards->{group}{$_} }
+ for keys %{ $new_dashboards->{group} || {} };
+}
+
+if ($flatten) {
+ my @dashboards;
+ push @dashboards, @{ $dashboards->{personal} || [] };
+ push @dashboards, map { @{ $_ || [] } } values %{ $dashboards->{group} };
+ push @dashboards, @{ $dashboards->{system} || [] };
+
+ return \@dashboards;
+}
+
+return $dashboards;
+</%init>
+
+
diff --git a/rt/share/html/Dashboards/Elements/Deleted b/rt/share/html/Dashboards/Elements/Deleted
new file mode 100644
index 0000000..62d0b8d
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/Deleted
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+@searches
+</%args>
+% if (@searches) {
+<&| /Widgets/TitleBox, title => loc('Deleted queries') &>
+<p><% loc("The following queries have been deleted and each will be removed from the dashboard once its pane is updated.") %></p>
+
+<ul>
+% for (@searches) {
+ <li><% loc('[_1] (from pane [_2])', ($_->{description} || $_->{name}), $_->{pane}) %></li>
+% }
+</ul>
+</&>
+% }
+
diff --git a/rt/share/html/Dashboards/Elements/HiddenSearches b/rt/share/html/Dashboards/Elements/HiddenSearches
new file mode 100644
index 0000000..aa3a67e
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/HiddenSearches
@@ -0,0 +1,79 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+@searches
+$Dashboard
+</%args>
+<%init>
+return if @searches == 0;
+
+my @display;
+
+for my $search (@searches) {
+ if ($search->Name eq 'SavedSearch') {
+ push @display, $search->Description;
+ }
+ elsif ($search->Name =~ m/^Search - (.*)/) {
+ push @display, $1;
+ }
+ else {
+ push @display, $search->Name;
+ }
+}
+
+</%init>
+<&| /Widgets/TitleBox, title => loc('Possible hidden searches') &>
+<p><% loc("The following queries may not be visible to all users who can see this dashboard.") %></p>
+
+<ul>
+% for (@display) {
+ <li><% $_ %></li>
+% }
+</ul>
+</&>
+
diff --git a/rt/share/html/Dashboards/Elements/ListOfDashboards b/rt/share/html/Dashboards/Elements/ListOfDashboards
new file mode 100644
index 0000000..b2cbd3e
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/ListOfDashboards
@@ -0,0 +1,19 @@
+<%init>
+# put the list of dashboards into the navigation
+use RT::Dashboard;
+
+my @objs = RT::Dashboard->new($session{CurrentUser})->_PrivacyObjects(ShowSystem => 1);
+my $dashboard_map = $m->comp("/Dashboards/Elements/DashboardsForObjects", Objects => \@objs);
+
+my @dashboards = (
+ (sort { $a->Id <=> $b->Id } @{ $dashboard_map->{personal} || [] }),
+ (sort { $a->Id <=> $b->Id } @{ $dashboard_map->{system} || [] }),
+
+ map { sort { $a->Id <=> $b->Id } @{ $dashboard_map->{group}{$_} } }
+ keys %{ $dashboard_map->{group} || {} },
+);
+
+$m->callback(%ARGS, dashboards => \@dashboards, CallbackName => 'ModifyDashboards');
+
+return @dashboards;
+</%init>
diff --git a/rt/share/html/Dashboards/Elements/SelectPrivacy b/rt/share/html/Dashboards/Elements/SelectPrivacy
new file mode 100644
index 0000000..ff2c27f
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/SelectPrivacy
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+@Objects => undef
+$Name => undef
+$Default => undef
+</%args>
+<select name="<%$Name%>">
+% foreach my $object (@Objects) {
+% my $privacy = ref($object) . '-' . $object->id;
+% my $selected = $privacy eq ($Default || '') ? 'selected="selected"' : '';
+
+% if (ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id) {
+<option <%$selected|n%> value="<%$privacy%>"><&|/l&>My dashboards</&></option>
+% } else {
+<option <%$selected|n%> value="<%$privacy%>"><&|/l, $object->Name&>[_1]'s dashboards</&></option>
+% }
+% }
+</select>
diff --git a/rt/share/html/Dashboards/Elements/ShowDashboards b/rt/share/html/Dashboards/Elements/ShowDashboards
new file mode 100644
index 0000000..d7014b9
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/ShowDashboards
@@ -0,0 +1,112 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => $Title &>
+<& SELF:table, %ARGS &>
+</&>
+<%ARGS>
+$Title => undef
+</%ARGS>
+
+<%METHOD table>
+<%ARGS>
+$Dashboards => undef
+$Verbose => 1
+</%ARGS>
+<%INIT>
+# map each subscription to a dashboard ID
+my %subscription_for;
+
+for my $attr ($session{'CurrentUser'}->UserObj->Attributes->Named('Subscription')) {
+ $subscription_for{$attr->SubValue('DashboardId')} = $attr;
+}
+</%INIT>
+
+% if (@$Dashboards == 0) {
+% if ($Verbose) {
+ <p><% loc("No dashboards.") %></p>
+% }
+% } else {
+ <table class="collection-as-table">
+ <tr class="collection-as-table">
+% if ($Verbose) {
+ <th class="collection-as-table"><% loc("#") %></th>
+% }
+ <th class="collection-as-table"><% loc("Name") %></th>
+ <th class="collection-as-table"><% loc("Subscription") %></th>
+ </tr>
+
+% my $i = 0;
+% for my $dashboard (@$Dashboards) {
+% my $url = sprintf '%s/Dashboards/%d/%s',
+% RT->Config->Get('WebPath'),
+% $dashboard->Id,
+% $dashboard->Name;
+
+ <tr class="collection-as-table <% ++$i % 2 ? 'oddline' : 'evenline' %>">
+% if ($Verbose) {
+ <td class="collection-as-table">
+ <a href="<% $url %>">
+ <% $dashboard->Id %>
+ </a>
+ </td>
+% }
+ <td class="collection-as-table">
+ <a href="<% $url %>">
+ <% $dashboard->Name %>
+ </a>
+ </td>
+ <td class="collection-as-table">
+ <& /Dashboards/Elements/ShowSubscription, Dashboard => $dashboard, Subscription => $subscription_for{$dashboard->Id} &>
+ </td>
+ </tr>
+% }
+
+ </table>
+% }
+</%METHOD>
+
diff --git a/rt/share/html/Dashboards/Elements/ShowPortlet/component b/rt/share/html/Dashboards/Elements/ShowPortlet/component
new file mode 100644
index 0000000..d5e9ccd
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/ShowPortlet/component
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Dashboard
+$Portlet
+$Rows => 20
+$Preview => 0
+</%args>
+% $m->comp($Portlet->{path});
diff --git a/rt/share/html/Dashboards/Elements/ShowPortlet/dashboard b/rt/share/html/Dashboards/Elements/ShowPortlet/dashboard
new file mode 100644
index 0000000..ccefe7c
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/ShowPortlet/dashboard
@@ -0,0 +1,89 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Dashboard
+$Pane
+$Portlet
+$Rows => 20
+$Preview => 0
+$Depth => 0
+</%args>
+<%init>
+my $current_dashboard;
+
+use Scalar::Util 'blessed';
+if (blessed($Portlet) && $Portlet->isa('RT::Dashboard')) {
+ $current_dashboard = $Portlet;
+}
+else {
+ $current_dashboard = RT::Dashboard->new($session{CurrentUser});
+ my ($ok, $msg) = $current_dashboard->LoadById($Portlet->{id});
+ if (!$ok) {
+ $m->out($msg);
+ return;
+ }
+}
+
+my @panes = @{ $current_dashboard->Panes->{$Pane} || [] };
+
+Abort("Possible recursive dashboard detected.") if $Depth > 8;
+</%init>
+
+<%perl>
+for my $portlet (@panes) {
+ $m->comp($portlet->{portlet_type},
+ Portlet => $portlet,
+ Rows => $Rows,
+ Preview => $Preview,
+ Dashboard => $current_dashboard,
+ Pane => $Pane,
+ Depth => $Depth + 1,
+ );
+}
+</%perl>
+
diff --git a/rt/share/html/Dashboards/Elements/ShowPortlet/search b/rt/share/html/Dashboards/Elements/ShowPortlet/search
new file mode 100644
index 0000000..eb65cb8
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/ShowPortlet/search
@@ -0,0 +1,63 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Dashboard
+$Portlet
+$Rows => 20
+$Preview => 0
+</%args>
+<%init>
+my @for_showsearch = $Dashboard->ShowSearchName($Portlet);
+</%init>
+
+<& /Elements/ShowSearch,
+ @for_showsearch,
+ Override => { Rows => $Rows },
+ hideable => $Preview,
+ ShowCustomize => $Preview,
+&>
diff --git a/rt/share/html/Dashboards/Elements/ShowSubscription b/rt/share/html/Dashboards/Elements/ShowSubscription
new file mode 100644
index 0000000..208e4c2
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/ShowSubscription
@@ -0,0 +1,75 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<a href="<% $url %>"><% $frequency %></a>
+<%ARGS>
+$Dashboard => undef
+$Subscription => undef
+</%ARGS>
+<%INIT>
+my $url = sprintf '%s/Dashboards/Subscription.html?DashboardId=%d',
+ RT->Config->Get('WebPath'),
+ $Dashboard->Id,;
+
+my $frequency = loc("None");
+
+if (defined $Subscription) {
+ my $freq = $Subscription->SubValue('Frequency');
+ my $hour = $Subscription->SubValue('Hour');
+
+ if ($freq eq 'weekly') {
+ my $day = $Subscription->SubValue('Dow');
+ $frequency = loc("weekly (on [_1]) at [_2]", loc($day), $hour);
+ }
+ elsif ($freq eq 'monthly') {
+ $frequency = loc("monthly (day [_1]) at [_2]", $Subscription->SubValue('Dom'), $hour);
+ }
+ elsif ($freq eq 'daily') {
+ $frequency = loc("daily at [_1]", $hour);
+ }
+}
+</%INIT>
diff --git a/rt/share/html/Dashboards/Elements/Tabs b/rt/share/html/Dashboards/Elements/Tabs
new file mode 100755
index 0000000..d82b9d0
--- /dev/null
+++ b/rt/share/html/Dashboards/Elements/Tabs
@@ -0,0 +1,113 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Tools/Elements/Tabs,
+ subtabs => $subtabs,
+ current_tab => 'Dashboards/index.html',
+ current_subtab => $current_subtab,
+ actions => $actions,
+ Title => $Title &>
+
+<%INIT>
+my $subtabs;
+my $actions;
+
+if ( $DashboardObj and $DashboardObj->Id ) {
+ my $id = $DashboardObj->Id;
+ my $name = $DashboardObj->Name;
+
+ my $modify = "Dashboards/Modify.html?id=$id";
+ my $queries = "Dashboards/Queries.html?id=$id";
+ my $render = "Dashboards/$id/$name";
+ my $subscribe = "Dashboards/Subscription.html?DashboardId=$id";
+
+ $subtabs = $m->comp('/Elements/DashboardTabs', CurrentDashboard => $DashboardObj);
+ $current_subtab = $render;
+
+ $actions = {
+ a_Basics => {
+ title => loc('Basics'),
+ path => $modify,
+ },
+
+ b_Queries => {
+ title => loc('Queries'),
+ path => $queries,
+ },
+
+ c_Subscription => {
+ title => loc('Subscription'),
+ path => $subscribe,
+ },
+ };
+
+ delete $actions->{"c_Subscription"}
+ unless $DashboardObj->CurrentUserCanSubscribe;
+}
+else {
+ $subtabs->{"a_Select"} = {
+ title => loc('Select'),
+ path => "Dashboards/index.html",
+ };
+
+ my $dashboard = RT::Dashboard->new($session{'CurrentUser'});
+ my @objects = $dashboard->_PrivacyObjects(Create => 1);
+
+ if (@objects) {
+ $subtabs->{"b_Create"} = {
+ title => loc('New'),
+ path => "Dashboards/Modify.html?Create=1",
+ separator => 1,
+ };
+ }
+}
+</%INIT>
+<%ARGS>
+$DashboardObj => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Dashboards/Modify.html b/rt/share/html/Dashboards/Modify.html
new file mode 100755
index 0000000..35a8046
--- /dev/null
+++ b/rt/share/html/Dashboards/Modify.html
@@ -0,0 +1,168 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Dashboards/Elements/Tabs,
+ current_subtab => $current_subtab,
+ Title => $title,
+ $Create ? () : (DashboardObj => $Dashboard),
+&>
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="<%RT->Config->Get('WebPath')%>/Dashboards/Modify.html" method="post" enctype="multipart/form-data" name="ModifyDashboard">
+
+%unless ($Dashboard->Id) {
+<input type="hidden" class="hidden" name="id" value="new" />
+% } else {
+<input type="hidden" class="hidden" name="id" value="<%$Dashboard->Id%>" />
+% }
+<table>
+<tr><td align="right">
+<&|/l&>Name</&>:
+</td>
+<td><input name="Name" value="<%$Dashboard->Name%>" /></td>
+</tr>
+<tr><td align="right">
+<&|/l&>Privacy</&>:
+</td><td>
+<& /Dashboards/Elements/SelectPrivacy, Name => "Privacy", Objects => \@privacies, Default => $Dashboard->Privacy &>
+</td></tr>
+</table>
+% if ( $Create ) {
+<& /Elements/Submit, Name => 'Save', Label => loc('Create') &>
+% } else {
+<& /Elements/Submit, Name => 'Save', Label => loc('Save Changes') &>
+% }
+% if ($Dashboard->Id && $can_delete) {
+<& /Elements/Submit, Name => 'Delete', Label => loc('Delete') &>
+% }
+</form>
+<%INIT>
+
+my $current_subtab;
+my ($title, @results);
+my $tried_create = 0;
+
+# user went directly to Modify.html
+$Create = 1 if !$id;
+
+use RT::Dashboard;
+
+my $Dashboard = RT::Dashboard->new($session{'CurrentUser'});
+my @privacies = $Dashboard->_PrivacyObjects(($Create ? 'Create' : 'Modify') => 1);
+
+Abort(loc("Permission denied")) if @privacies == 0;
+
+if ($Create) {
+ $current_subtab = 'Dashboards/Modify.html?Create=1';
+ $title = loc("Create a new dashboard");
+}
+else {
+ if ($id eq 'new') {
+ $tried_create = 1;
+
+ my ($val, $msg) = $Dashboard->Save(
+ Name => $ARGS{'Name'},
+ Privacy => $ARGS{'Privacy'},
+ );
+
+ if (!$val) {
+ Abort(loc("Dashboard could not be created: [_1]", $msg));
+ }
+
+ push @results, $msg;
+ $id = $Dashboard->Id;
+ }
+ else {
+ my ($ok, $msg) = $Dashboard->LoadById($id);
+ $ok || Abort($msg);
+ }
+
+ if ($id) {
+ $title = loc("Modify the dashboard [_1]", $Dashboard->Name);
+ $current_subtab = 'Dashboards/Modify.html?id=' . $id;
+ }
+ # If the create failed
+ else {
+ $Create = 1;
+ $current_subtab = 'Dashboards/Modify.html?Create=1';
+ $title = loc("Create a new dashboard");
+ }
+}
+
+if (!$Create && !$tried_create && $id && $ARGS{'Save'}) {
+ my ($ok, $msg) = $Dashboard->Update(Privacy => $ARGS{'Privacy'},
+ Name => $ARGS{'Name'});
+
+ if ($ok) {
+ push @results, loc("Dashboard updated");
+ }
+ else {
+ push @results, loc("Dashboard could not be updated: [_1]", $msg);
+ }
+
+}
+
+my $can_delete = $Dashboard->CurrentUserCanDelete;
+
+if (!$Create && !$tried_create && $id && $ARGS{'Delete'}) {
+ my ($ok, $msg) = $Dashboard->Delete();
+ $ok || Abort(loc("Couldn't delete dashboard [_1]: [_2]", $id, $msg));
+
+ # put the user back into a useful place with a message
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Dashboards/index.html?Deleted=$id");
+
+}
+</%INIT>
+
+<%ARGS>
+$Create => undef
+$Name => undef
+$id => '' unless defined $id
+$Delete => undef
+</%ARGS>
+
diff --git a/rt/share/html/Dashboards/Queries.html b/rt/share/html/Dashboards/Queries.html
new file mode 100644
index 0000000..1a1066b
--- /dev/null
+++ b/rt/share/html/Dashboards/Queries.html
@@ -0,0 +1,280 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Dashboards/Elements/Tabs,
+ current_subtab => $current_subtab,
+ Title => $title,
+ DashboardObj => $Dashboard &>
+
+<& /Widgets/SelectionBox:header, nojs => 1 &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<& Elements/Deleted, searches => \@deleted, Dashboard => $Dashboard &>
+
+<& Elements/HiddenSearches, searches => \@hidden_searches, Dashboard => $Dashboard &>
+
+<table width="100%" border="0">
+% for my $pane (@panes) {
+<tr><td valign="top" class="boxcontainer">
+<form action="Queries.html" name="Dashboard-<%$pane->{Name}%>" method="post" enctype="multipart/form-data">
+<input type="hidden" class="hidden" name="id" value="<%$Dashboard->Id%>" />
+<input type="hidden" class="hidden" name="Privacy" value="<%$Dashboard->Privacy%>" />
+
+<&| /Widgets/TitleBox, title => $pane->{DisplayName} &>
+% my ( $pane_name ) = $pane->{Name} =~ /Searches-(.+)/;
+ <& /Widgets/SelectionBox:show, self => $pane, nojs => 1, grep( {
+ $_->{pane} eq $pane_name} @deleted ) ? ( ShowUpdate => 1 ) : () &>
+</&>
+</form>
+</td></tr>
+% }
+</table>
+
+<%INIT>
+
+my $current_subtab = 'Dashboards/Queries.html?id=' . $id;
+my @results;
+
+use RT::Dashboard;
+my $Dashboard = new RT::Dashboard($session{'CurrentUser'});
+my ($ok, $msg) = $Dashboard->LoadById($id);
+$ok || Abort(loc("Couldn't load dashboard [_1]: [_2]", $id, $msg));
+my $title = loc("Modify the queries of dashboard [_1]", $Dashboard->Name);
+
+my %desc_of;
+my @items;
+my %selected;
+my %still_exists;
+
+# add portlets (homepage componenets)
+my @components = @{ RT->Config->Get('HomepageComponents') };
+
+for my $desc (@components) {
+ my $name = "component-$desc";
+ push @items, [$name, $desc];
+ $desc_of{$name} = $desc;
+ $still_exists{$name} = 1;
+}
+
+# add dashboards
+my $dashboards = $m->comp("/Dashboards/Elements/DashboardsForObjects", flatten => 1);
+for my $dashboard (@{ $dashboards || [] }) {
+ # Users *can* set up mutually recursive dashboards, but don't make it THIS
+ # easy for them to shoot themselves in the foot.
+ next if $dashboard->Id == $Dashboard->Id;
+
+ my $name = 'dashboard-' . $dashboard->Id . '-' . $dashboard->Privacy;
+ my $desc = "Dashboard: " . $dashboard->Name;
+ push @items, [$name, $desc];
+ $desc_of{$name} = $desc;
+ $still_exists{$name} = 1;
+}
+
+# add saved searches
+my @objs = RT::System->new($session{'CurrentUser'});
+
+push @objs, RT::SavedSearches->new( $session{CurrentUser} )->_PrivacyObjects
+ if $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch',
+ Object => $RT::System );
+
+for my $object (@objs) {
+ for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) {
+ my ($desc, $search) = @$_;
+ my $SearchType = $search->Content->{'SearchType'} || 'Ticket';
+ my $type = ($SearchType eq 'Ticket') ? 'Saved Search' : $SearchType; # loc
+ $desc = "$type: $desc";
+ my $privacy = $Dashboard->_build_privacy($object);
+ my $name = 'search-' . $search->Id . '-' . $privacy;
+ push @items, [$name, $desc];
+ $desc_of{$name} = $desc;
+ $still_exists{$name} = 1;
+ }
+}
+
+# Get the list of queries already in use
+my @deleted;
+do {
+ my $panes = $Dashboard->Panes;
+ for my $pane (keys %$panes) {
+ for my $portlet (@{ $panes->{$pane} }) {
+ my $name;
+ my $type = $portlet->{portlet_type};
+
+ if ($type eq 'search' || $type eq 'dashboard') {
+ $name = join '-', $type, $portlet->{id}, $portlet->{privacy};
+ }
+ elsif ($type eq 'component') {
+ $name = join '-', 'component', $portlet->{component};
+ }
+
+ if (!$still_exists{$name}) {
+ push @deleted, {
+ pane => $pane,
+ name => $name,
+ description => $portlet->{description},
+ };
+ next;
+ }
+
+ push @{ $selected{$pane} }, $name;
+ $desc_of{$name} = $portlet->{description};
+ }
+ }
+};
+
+$m->callback(
+ CallbackName => 'PopulatePossibilities',
+ Dashboard => $Dashboard,
+ items => \@items,
+ desc_of => \%desc_of,
+ still_exists => \%still_exists,
+ selected => \%selected,
+);
+
+# Create selectionbox widgets for those queries
+
+my %pane_name = (
+ 'body' => loc('Body'),
+ 'sidebar' => loc('Sidebar'),
+);
+
+$m->callback(
+ CallbackName => 'Panes',
+ Dashboard => $Dashboard,
+ panes => \%pane_name,
+);
+
+my @panes;
+for my $pane (keys %pane_name) {
+ my $sel = $m->comp(
+ '/Widgets/SelectionBox:new',
+ Action => 'Queries.html',
+ Name => "Searches-$pane",
+ DisplayName => $pane_name{$pane},
+ Available => \@items,
+ Selected => $selected{$pane},
+ AutoSave => 1,
+ OnSubmit => sub {
+ my $self = shift;
+
+ $m->callback(
+ CallbackName => 'Submit',
+ Dashboard => $Dashboard,
+ Selected => $self->{Current},
+ pane => $pane,
+ );
+
+ my @portlets;
+ for (@{ $self->{Current} }) {
+ my $item = $_;
+ my $desc = $desc_of{$item};
+ my $portlet_type = $1 if $item =~ s/^(\w+)-//;
+
+ if ($portlet_type eq 'search' || $portlet_type eq 'dashboard') {
+ my ($id, $privacy) = split '-', $item, 2;
+ push @portlets, {
+ portlet_type => $portlet_type,
+ privacy => $privacy,
+ id => $id,
+ description => $desc,
+ pane => $pane,
+ };
+ }
+ elsif ($portlet_type eq 'component') {
+ # Absolute paths stay absolute, relative paths go into
+ # /Elements. This way, extensions that add portlets work.
+ my $path = $item;
+ $path = "/Elements/$path" if substr($path, 0, 1) ne '/';
+
+ push @portlets, {
+ portlet_type => $portlet_type,
+ component => $item,
+ path => $path,
+ description => $item,
+ pane => $pane,
+ };
+ }
+ }
+
+ # we want to keep all the other panes the same
+ my $panes = $Dashboard->Panes;
+ $panes->{$pane} = \@portlets;
+
+ # remove "deleted" warnings about this pane
+ @deleted = grep { $_->{pane} ne $pane } @deleted;
+
+ $m->callback(
+ CallbackName => 'BeforeUpdate',
+ Dashboard => $Dashboard,
+ panes => $panes,
+ );
+
+ my ($ok, $msg) = $Dashboard->Update(Panes => $panes);
+
+ if ($ok) {
+ push @results, loc("Dashboard updated");
+ }
+ else {
+ push @results, loc("Dashboard could not be updated: [_1]", $msg);
+ }
+ },
+ );
+
+ push @panes, $sel;
+}
+
+$m->comp('/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1)
+ for @panes;
+
+my @hidden_searches = $Dashboard->PossibleHiddenSearches;
+</%INIT>
+<%ARGS>
+$id => '' unless defined $id
+</%ARGS>
+
diff --git a/rt/share/html/Dashboards/Render.html b/rt/share/html/Dashboards/Render.html
new file mode 100644
index 0000000..1893b53
--- /dev/null
+++ b/rt/share/html/Dashboards/Render.html
@@ -0,0 +1,143 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header,
+ Title => $title,
+ JavaScript => $Preview,
+ ShowBar => $Preview,
+ Refresh => $Refresh,
+&>
+
+% if ($Preview) {
+<& /Dashboards/Elements/Tabs,
+ current_subtab => $current_subtab,
+ Title => $title,
+ DashboardObj => $DashboardObj &>
+% }
+
+% $m->callback(CallbackName => 'BeforeTable', Dashboard => $DashboardObj, show_cb => $show_cb);
+
+<table class="dashboard">
+<!-- Dashboard #<%$id%> -->
+
+% $m->callback(CallbackName => 'BeforePanes', Dashboard => $DashboardObj, show_cb => $show_cb);
+
+<tr valign="top">
+
+<td class="boxcontainer">
+% $show_cb->('body');
+</td>
+
+<td class="boxcontainer">
+% $show_cb->('sidebar');
+</td>
+
+</tr>
+
+% $m->callback(CallbackName => 'AfterPanes', Dashboard => $DashboardObj, show_cb => $show_cb);
+
+</table>
+
+% $m->callback(CallbackName => 'AfterTable', Dashboard => $DashboardObj, show_cb => $show_cb);
+
+</td>
+
+
+</tr>
+</table>
+
+<%INIT>
+
+my $current_subtab = 'Dashboards/Render.html?id=' . $id;
+
+use RT::Dashboard;
+my $DashboardObj = RT::Dashboard->new($session{'CurrentUser'});
+my ($ok, $msg) = $DashboardObj->LoadById($id);
+Abort(loc("Couldn't load dashboard [_1]: [_2]", $id, $msg)) if !$ok;
+
+my $SubscriptionObj = RT::Attribute->new($session{'CurrentUser'});
+my $rows;
+
+# try to load the subscription to this id to get a better idea of number of rows
+for my $sub ($session{'CurrentUser'}->UserObj->Attributes->Named('Subscription')) {
+ next unless $sub->SubValue('DashboardId') == $id;
+ $SubscriptionObj = $sub;
+ $rows = $SubscriptionObj->SubValue('Rows');
+ last;
+}
+
+# otherwise honor their search preferences.. otherwise 20 rows
+if (!$rows) {
+ my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {};
+ $rows = defined($prefs->{'RowsPerPage'}) ? $prefs->{'RowsPerPage'} : 20;
+}
+
+my $title = loc 'Dashboard [_1]', $DashboardObj->Name;
+
+my $show_cb = sub {
+ my $pane = shift;
+ $m->comp('Elements/ShowPortlet/dashboard',
+ Portlet => $DashboardObj,
+ Rows => $rows,
+ Preview => $Preview,
+ Dashboard => $DashboardObj,
+ Pane => $pane,
+ Depth => 0,
+ );
+};
+
+my $Refresh = $Preview
+ ? $session{'home_refresh_interval'}
+ || RT->Config->Get('HomePageRefreshInterval', $session{'CurrentUser'})
+ : 0;
+
+</%INIT>
+<%ARGS>
+$id => undef
+$Preview => 1
+</%ARGS>
+
diff --git a/rt/share/html/Dashboards/Subscription.html b/rt/share/html/Dashboards/Subscription.html
new file mode 100644
index 0000000..3de58ac
--- /dev/null
+++ b/rt/share/html/Dashboards/Subscription.html
@@ -0,0 +1,292 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Dashboards/Elements/Tabs,
+ current_subtab => $current_subtab,
+ Title => $title,
+ DashboardObj => $DashboardObj &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="<%RT->Config->Get('WebPath')%>/Dashboards/Subscription.html" method="post" enctype="multipart/form-data" name="SubscribeDashboard">
+<input type="hidden" class="hidden" name="DashboardId" value="<% $fields{'DashboardId'} %>" />
+<table width="100%" border="0">
+<tr>
+
+<td valign="top" class="boxcontainer">
+<&| /Widgets/TitleBox, title => loc('Dashboard') &>
+
+<table>
+<tr><td class="label">
+<&|/l&>Dashboard</&>:
+</td><td class="value">
+<% $DashboardObj->Name %>
+</td></tr>
+
+<tr><td class="label">
+<&|/l&>Queries</&>:
+</td><td class="value">
+% my @portlets = grep { defined } $DashboardObj->Portlets;
+% if (!@portlets) {
+(<&|/l&>none</&>)
+% } else {
+<ol class="dashboard-queries">
+% for my $portlet (@portlets) {
+ <li class="dashboard-query">
+ <% loc($portlet->{description}, $fields{'Rows'}) %>
+ </li>
+% }
+</ol>
+% }
+</td></tr>
+
+</table>
+</&>
+
+<&| /Widgets/TitleBox, title => loc('Subscription') &>
+
+<table>
+<tr><td class="label">
+<&|/l&>Frequency</&>:
+</td><td class="value">
+
+<input type="radio" name="Frequency" value="daily" <% $fields{'Frequency'} eq 'daily' ? 'checked="checked"' : "" %>>
+ <&|/l&>daily</&>
+</input><br />
+
+<input type="radio" name="Frequency" value="m-f" <% $fields{'Frequency'} eq 'm-f' ? 'checked="checked"' : "" %>>
+ <&|/l&>Monday through Friday</&>
+</input><br />
+
+<input type="radio" name="Frequency" value="weekly"<% $fields{'Frequency'} eq 'weekly' ? 'checked="checked"' : "" %>>
+<&|/l&>weekly</&></input>, <&|/l&>on</&>
+<select name="Dow">
+ <option value="Monday" <% $fields{'Dow'} eq 'Monday' ? 'selected="selected"' : '' %>><&|/l&>Monday</&></option>
+ <option value="Tuesday" <% $fields{'Dow'} eq 'Tuesday' ? 'selected="selected"' : '' %>><&|/l&>Tuesday</&></option>
+ <option value="Wednesday" <% $fields{'Dow'} eq 'Wednesday' ? 'selected="selected"' : '' %>><&|/l&>Wednesday</&></option>
+ <option value="Thursday" <% $fields{'Dow'} eq 'Thursday' ? 'selected="selected"' : '' %>><&|/l&>Thursday</&></option>
+ <option value="Friday" <% $fields{'Dow'} eq 'Friday' ? 'selected="selected"' : '' %>><&|/l&>Friday</&></option>
+ <option value="Saturday" <% $fields{'Dow'} eq 'Saturday' ? 'selected="selected"' : '' %>><&|/l&>Saturday</&></option>
+ <option value="Sunday" <% $fields{'Dow'} eq 'Sunday' ? 'selected="selected"' : '' %>><&|/l&>Sunday</&></option>
+</select>
+<&|/l&>every</&>
+<select name="Fow">
+% for my $f ( qw/1 2 3 4/ ) {
+ <option value="<%$f%>" <% $fields{'Fow'} == $f ? 'selected="selected"' : '' %>><% $f %></option>
+% }
+</select>
+<&|/l&>weeks</&>
+<br />
+
+<input type="radio" name="Frequency" value="monthly"<% $fields{'Frequency'} eq 'monthly' ? 'checked="checked"' : "" %>>
+<&|/l&>monthly</&></input> , <&|/l&>on day</&>
+<select name="Dom">
+% for my $dom (1..31) {
+ <option value="<% $dom %>" <% $fields{'Dom'} == $dom ? 'selected="selected"' : '' %>><% loc($dom) %></option>
+% }
+</select>
+<br />
+
+<input type="radio" name="Frequency" value="never" <% $fields{'Frequency'} eq 'never' ? 'checked="checked"' : "" %>>
+ <&|/l&>never</&>
+</input>
+
+</td></tr>
+<tr><td class="label">
+<&|/l&>Hour</&>:
+</td><td class="value">
+<select name="Hour">
+% for my $hour (0..23) {
+% my $formatted = sprintf '%02d:00', $hour;
+% my $selected = $formatted eq $fields{'Hour'}
+% ? 'selected="selected"'
+% : '';
+
+ <option value="<% $formatted %>" <%$selected%>><% $formatted %></option>
+% }
+</select>
+(<%$timezone%>)
+</td></tr>
+<tr><td class="label">
+<&|/l&>Rows</&>:
+</td><td class="value">
+<select name="Rows">
+% for my $rows (1, 2, 5, 10, 15, 20, 25, 50, 75, 100, 0) {
+ <option value="<% $rows %>" <% $fields{'Rows'} eq $rows ? 'selected="selected"' : '' %>><% loc($rows || 'Unlimited') %></option>
+% }
+</select>
+</td></tr>
+
+<tr><td class="label">
+<&|/l&>Recipient</&>:
+</td><td class="value">
+<input name="Recipient" id="Recipient" size="30" value="<%$fields{Recipient} ? $fields{Recipient} : ''%>" />
+<div class="hints"><% loc("Leave blank to send to your current email address ([_1])", $session{'CurrentUser'}->UserObj->EmailAddress) %></div>
+</td></tr>
+</table>
+</&>
+</td>
+</tr>
+</table>
+
+% if ($SubscriptionObj->Id) {
+ <& /Elements/Submit, Name => "Save", Label => loc('Save Changes') &>
+% } else {
+ <& /Elements/Submit, Name => "Save", Label => loc('Subscribe') &>
+% }
+</form>
+
+<%INIT>
+
+my $current_subtab = 'Dashboards/Subscription.html?DashboardId=' . $DashboardId;
+
+my ($title, @results);
+my ($val, $msg);
+my $Loaded = 0;
+my $timezone = $session{'CurrentUser'}->UserObj->Timezone || RT->Config->Get('Timezone');
+
+use RT::Dashboard;
+my $DashboardObj = RT::Dashboard->new($session{'CurrentUser'});
+
+my $SubscriptionObj = RT::Attribute->new($session{'CurrentUser'});
+
+# first let's see if we already have a subscription to this DashboardId
+for my $sub ($session{'CurrentUser'}->UserObj->Attributes->Named('Subscription')) {
+ next unless $sub->SubValue('DashboardId') == $DashboardId;
+ $SubscriptionObj = $sub;
+ last;
+}
+
+$DashboardId = $SubscriptionObj->Id
+ ? $SubscriptionObj->SubValue('DashboardId')
+ : $ARGS{'DashboardId'};
+
+($val, $msg) = $DashboardObj->LoadById($DashboardId);
+$val || Abort(loc("Couldn't load dashboard [_1]: [_2].", $DashboardId, $msg));
+
+my %fields = (
+ DashboardId => $DashboardId,
+ Frequency => 'daily',
+ Hour => '06:00',
+ Dow => 'Monday',
+ Dom => 1,
+ Rows => 20,
+ Recipient => '',
+ Fow => 1,
+ Counter => 0,
+);
+
+# update any fields with the values from the subscription object
+if ($SubscriptionObj->Id) {
+ for my $field (keys %fields) {
+ $fields{$field} = $SubscriptionObj->SubValue($field);
+ }
+}
+
+# finally, update any fields with arguments passed in by the user
+for my $field (keys %fields) {
+ next if $field eq 'DashboardId'; # but this one is immutable
+ $fields{$field} = $ARGS{$field}
+ if defined($ARGS{$field});
+}
+# this'll be defined on submit
+if (defined $ARGS{Save}) {
+ # update
+ if ($SubscriptionObj->Id) {
+ $DashboardId = delete $fields{'DashboardId'}; # immutable
+ ($val, $msg) = $SubscriptionObj->SetSubValues(%fields);
+ $fields{'DashboardId'} = $DashboardId;
+
+ # not so good to spew base64-encoded data at the user :)
+ if ($msg =~ /^Content changed from/) {
+ $msg = "Subscription updated.";
+ }
+
+ push @results, $msg;
+ }
+ # create
+ else {
+ Abort(loc("Unable to subscribe to dashboard [_1]: Permission denied", $DashboardId))
+ unless $DashboardObj->CurrentUserCanSubscribe;
+
+ my ($val, $msg) = $SubscriptionObj->Create(
+ Name => 'Subscription',
+ Description => 'Subscription to dashboard ' . $DashboardId,
+ ContentType => 'storable',
+ Object => $session{'CurrentUser'}->UserObj,
+ Content => \%fields,
+ );
+ if ($val) {
+ push @results, loc("Subscribed to dashboard [_1]", $DashboardObj->Name);
+ push @results, loc("Warning: you have no email address set, so you will not receive this dashboard until you have it set")
+ unless $session{'CurrentUser'}->EmailAddress || $fields{Recipient};
+ }
+ else {
+ push @results, loc('Subscription could not be created: [_1]', $msg);
+ }
+ }
+}
+
+if ($SubscriptionObj->Id) {
+ $title = loc("Modify the subscription to dashboard [_1]", $DashboardObj->Name);
+}
+else {
+ $title = loc("Subscribe to dashboard [_1]", $DashboardObj->Name);
+}
+
+</%INIT>
+<%ARGS>
+$DashboardId => undef
+$Frequency => undef
+$Hour => undef
+$Dow => undef
+$Dom => undef
+$Rows => undef
+$Recipient => undef
+</%ARGS>
+
diff --git a/rt/share/html/Dashboards/dhandler b/rt/share/html/Dashboards/dhandler
new file mode 100644
index 0000000..056476b
--- /dev/null
+++ b/rt/share/html/Dashboards/dhandler
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+if ($m->dhandler_arg =~ /^(\d+)/) {
+ $m->comp('/Dashboards/Render.html', id => $1, %ARGS);
+}
+else {
+ $m->decline;
+}
+</%INIT>
+
diff --git a/rt/share/html/Dashboards/index.html b/rt/share/html/Dashboards/index.html
new file mode 100644
index 0000000..8f71ab0
--- /dev/null
+++ b/rt/share/html/Dashboards/index.html
@@ -0,0 +1,107 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Dashboards/Elements/Tabs,
+ current_subtab => 'Dashboards/index.html',
+ Title => $title &>
+
+<& /Elements/ListActions, actions => \@actions &>
+
+<& /Dashboards/Elements/ShowDashboards,
+ Title => loc('Personal Dashboards'),
+ Dashboards => \@personal_dashboards,
+&>
+
+<& /Dashboards/Elements/ShowDashboards,
+ Title => loc('System Dashboards'),
+ Dashboards => \@system_dashboards,
+&>
+
+% for (@grouped_dashboards) {
+% my $group = $_->{name};
+% my $dashboards = $_->{dashboards};
+
+ <& /Dashboards/Elements/ShowDashboards,
+ Title => loc('[_1] DashBoards', $group),
+ Dashboards => $dashboards,
+ &>
+% }
+
+<%INIT>
+my $title = loc("Dashboards");
+use RT::Dashboard;
+
+my $dashboards = $m->comp("/Dashboards/Elements/DashboardsForObjects");
+
+my @actions;
+if (defined $Deleted) {
+ push @actions, loc("Deleted dashboard [_1]", $Deleted);
+}
+
+my @personal_dashboards = sort { $a->Id <=> $b->Id } @{ $dashboards->{personal} || [] };
+my @system_dashboards = sort { $a->Id <=> $b->Id } @{ $dashboards->{system} || [] };
+
+my @groups = sort keys %{ $dashboards->{group} || {} };
+my @grouped_dashboards = map {
+ {
+ name => $_,
+ dashboards => [ sort { $a->Id <=> $b->Id } @{ $dashboards->{group}{$_} || [] } ],
+ }
+} @groups;
+
+$m->callback(
+ PersonalDashboards => \@personal_dashboards,
+ SystemDashboards => \@system_dashboards,
+ GroupedDashboards => \@grouped_dashboards,
+ CallbackName => 'MassageDashboards',
+);
+</%INIT>
+<%ARGS>
+$Deleted => undef
+</%ARGS>
+
diff --git a/rt/share/html/Download/CustomFieldValue/dhandler b/rt/share/html/Download/CustomFieldValue/dhandler
new file mode 100644
index 0000000..218de33
--- /dev/null
+++ b/rt/share/html/Download/CustomFieldValue/dhandler
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%perl>
+my $id;
+my $arg = $m->dhandler_arg; # get rest of path
+if ($arg =~ /^(\d+)\//) {
+ $id = $1;
+}
+else {
+ Abort("Corrupted customfieldvalue URL.");
+}
+my $OCFV = RT::ObjectCustomFieldValue->new($session{'CurrentUser'});
+$OCFV->Load($id) || Abort("OCFV '$id' could not be loaded");
+
+unless ($OCFV->id) {
+ Abort("Bad OCFV id. Couldn't find OCFV '$id'\n");
+}
+
+my $content_type = $OCFV->ContentType || 'text/plain';
+
+unless (RT->Config->Get('TrustHTMLAttachments')) {
+ $content_type = 'text/plain' if ($content_type =~ /^text\/html/i);
+}
+
+$r->content_type( $content_type );
+$m->clear_buffer();
+$m->out($OCFV->LargeContent);
+$m->abort;
+</%perl>
+<%attr>
+AutoFlush => 0
+</%attr>
diff --git a/rt/share/html/Download/Tabular/dhandler b/rt/share/html/Download/Tabular/dhandler
new file mode 100644
index 0000000..e12bb24
--- /dev/null
+++ b/rt/share/html/Download/Tabular/dhandler
@@ -0,0 +1,76 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%perl>
+my ($class, $filename, @ids);
+my $arg = $m->dhandler_arg; # get rest of path
+if ($arg =~ /^(\w+)\/([,\d]+)(?:\/([^\/]+))?/) {
+ $class = "RT::$1";
+ $filename = $3 || "$1s.tsv";
+ @ids = sort split(/,+/, $2);
+}
+else {
+ Abort("Corrupted tabular URL.");
+}
+
+my @cols = $class->BasicColumns or return;
+
+#$r->content_type( 'application/octet-stream' );
+$r->content_type( 'text/plain' );
+$r->headers_out->{'Content-Disposition'} = "attachment; filename=$filename";
+$m->clear_buffer();
+$m->out(join("\t", "Id", map $_->[1], @cols), "\n");
+foreach my $id (@ids) {
+ my $obj = $class->new;
+ $obj->Load($id) or next;
+ $m->out(join("\t", map $obj->$_, "Id", map $_->[0], @cols), "\n");
+}
+$m->abort;
+</%perl>
+<%attr>
+AutoFlush => 0
+</%attr>
diff --git a/rt/share/html/Elements/BevelBoxRaisedEnd b/rt/share/html/Elements/BevelBoxRaisedEnd
new file mode 100755
index 0000000..575a47a
--- /dev/null
+++ b/rt/share/html/Elements/BevelBoxRaisedEnd
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+ </td>
+</tr>
+</table>
diff --git a/rt/share/html/Elements/BevelBoxRaisedStart b/rt/share/html/Elements/BevelBoxRaisedStart
new file mode 100755
index 0000000..980c4cf
--- /dev/null
+++ b/rt/share/html/Elements/BevelBoxRaisedStart
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table cellspacing="0" cellpadding="0" width="100%" height="100%">
+ <tr>
+ <td width="100%" height="100%">
diff --git a/rt/share/html/Elements/Callback b/rt/share/html/Elements/Callback
new file mode 100755
index 0000000..ec64709
--- /dev/null
+++ b/rt/share/html/Elements/Callback
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+$ARGS{'CallbackPage'} = delete $ARGS{'Page'} || $m->callers(1)->path;
+$ARGS{'CallbackName'} = delete $ARGS{'_CallbackName'};
+$RT::Logger->debug("$ARGS{'CallbackPage'} calls old style callback, use \$m->callback");
+return $m->callback( %ARGS );
+</%INIT>
diff --git a/rt/share/html/Elements/Checkbox b/rt/share/html/Elements/Checkbox
new file mode 100755
index 0000000..72ab677
--- /dev/null
+++ b/rt/share/html/Elements/Checkbox
@@ -0,0 +1,63 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<input type="checkbox" class="checkbox" name="<%$Name%>" value="1" <%$IsChecked%> />
+
+<%ARGS>
+$Name => undef
+$Default => undef
+$True => undef
+$False => undef
+$IsChecked => undef
+</%ARGS>
+
+<%INIT>
+$IsChecked =
+ ($Default && $Default =~ /checked/i)
+ ? ' checked="checked" ' : "";
+1;
+</%INIT>
diff --git a/rt/share/html/Elements/CollectionAsTable/Header b/rt/share/html/Elements/CollectionAsTable/Header
new file mode 100644
index 0000000..550ce9f
--- /dev/null
+++ b/rt/share/html/Elements/CollectionAsTable/Header
@@ -0,0 +1,142 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Class => 'RT__Ticket'
+
+@Format => undef
+$FormatString => undef
+@OrderBy => ()
+@Order => ()
+$Query => undef
+$Rows => undef
+$Page => undef
+$GenericQueryArgs => undef
+$maxitems => undef
+
+$AllowSorting => undef
+$BaseURL => undef
+@PassArguments => qw(Query Format Rows Page Order OrderBy)
+</%ARGS>
+<tr class="collection-as-table">
+<%PERL>
+
+my $generic_query_args = $GenericQueryArgs || {map { $_ => $ARGS{$_} } @PassArguments};
+# backward compatibility workaround
+$generic_query_args->{'Format'} = $FormatString if grep $_ eq 'Format', @PassArguments;
+
+my $item = 0;
+foreach my $col ( @Format ) {
+ my $title = $col->{'title'} || '';
+ if ( $title eq 'NEWLINE' ) {
+ while ( $item < $maxitems ) {
+ $m->out(qq{<th class="collection-as-table">&nbsp;</th>\n});
+ $item++;
+ }
+
+ $item = 0;
+ $m->out(qq{</tr>\n<tr class="collection-as-table">});
+ next;
+ } elsif ( $title eq 'NBSP' ) {
+ $item++;
+ $m->out(qq{<th class="collection-as-table">&nbsp;</th>\n});
+ next;
+ }
+
+ my $span = $col->{'span'};
+ $item += ($span || 1);
+
+ $m->out('<th class="collection-as-table"');
+ $m->out(' colspan="' . $m->interp->apply_escapes($span => 'h') . '"')
+ if $span;
+ $m->out('>');
+
+ # if title is not defined then use defined attribute or last
+ # one we saw in the format
+ unless ( defined $col->{'title'} ) {
+ my $attr = $col->{'attribute'} || $col->{'last_attribute'};
+ my $tmp = $m->comp( '/Elements/ColumnMap',
+ Class => $Class,
+ Name => $attr,
+ Attr => 'title',
+ );
+ $title = ProcessColumnMapValue( $tmp, Arguments => [ $attr ] );
+ } else {
+ $title = $m->comp('/Elements/ScrubHTML', Content => $title);
+ }
+
+ if ( $AllowSorting and $col->{'attribute'}
+ and my $attr = $m->comp(
+ "/Elements/ColumnMap",
+ Class => $Class,
+ Name => $col->{'attribute'},
+ Attr => 'attribute'
+ )
+ )
+ {
+ $attr = ProcessColumnMapValue( $attr, Arguments => [ $col->{'attribute'} ], Escape => 0 );
+
+ my $new_order = 'ASC';
+ $new_order = $Order[0] eq 'ASC'? 'DESC': 'ASC'
+ if $OrderBy[0] && $OrderBy[0] eq $attr;
+
+ $m->out(
+ '<a href="' . $BaseURL
+ . $m->comp( '/Elements/QueryString',
+ %$generic_query_args,
+ OrderBy => $attr, Order => $new_order
+ )
+ . '">'. loc($title) .'</a>'
+ );
+ }
+ else {
+ $m->out( loc($title) );
+ }
+ $m->out('</th>');
+}
+</%PERL>
+</tr>
diff --git a/rt/share/html/Elements/CollectionAsTable/ParseFormat b/rt/share/html/Elements/CollectionAsTable/ParseFormat
new file mode 100644
index 0000000..d58246f
--- /dev/null
+++ b/rt/share/html/Elements/CollectionAsTable/ParseFormat
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Format
+</%ARGS>
+
+<%init>
+use Regexp::Common qw/delimited/;
+my @Columns;
+
+while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) {
+ my $col = $1;
+
+ if ($col =~ /^$RE{quoted}$/o) {
+ substr($col,0,1) = "";
+ substr($col,-1,1) = "";
+ }
+
+ my $colref = { };
+
+ $m->callback(CallbackName => 'PreColumn', Column => $colref, col => \$col);
+
+ while ( $col =~ s{/(STYLE|CLASS|TITLE|ALIGN|SPAN|ATTRIBUTE):([^/]*)}{}i ) {
+ $colref->{ lc $1 } = $2;
+ }
+ $colref->{'last_attribute'} = $colref->{'attribute'};
+
+ unless ( length $col ) {
+ $colref->{'output'} = [];
+ $colref->{'last_attribute'} = $colref->{'attribute'} = ''
+ unless defined $colref->{'attribute'};
+ }
+ elsif ( $col =~ /^__(NEWLINE|NBSP)__$/ || $col =~ /^(NEWLINE|NBSP)$/ ) {
+ $colref->{'title'} = $1;
+ }
+ elsif ( $col =~ /__(.*?)__/io ) {
+ my @subcols;
+ while ( $col =~ s/^(.*?)__(.*?)__//o ) {
+ push ( @subcols, $1 ) if $1;
+ push ( @subcols, "__$2__" );
+ $colref->{'last_attribute'} = $2;
+ }
+ push @subcols, $col;
+ $colref->{'output'} = \@subcols;
+ $colref->{'attribute'} = $colref->{'last_attribute'}
+ unless defined $colref->{'attribute'};
+ }
+ else {
+ $colref->{'output'} = [ "__" . $col . "__" ];
+ $colref->{'last_attribute'} = $col;
+ $colref->{'attribute'} = $col
+ unless defined $colref->{'attribute'};
+ }
+
+ $m->callback(CallbackName => 'PostColumn', Column => $colref, col => \$col);
+
+ push @Columns, $colref;
+}
+
+$m->callback(CallbackName => 'PostProcess', Columns => \@Columns, Format => $Format);
+
+return(@Columns);
+</%init>
diff --git a/rt/share/html/Elements/CollectionAsTable/Row b/rt/share/html/Elements/CollectionAsTable/Row
new file mode 100644
index 0000000..fa7474b
--- /dev/null
+++ b/rt/share/html/Elements/CollectionAsTable/Row
@@ -0,0 +1,143 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$i => undef
+@Format => undef
+$record => undef
+$maxitems => undef
+$Depth => undef
+$Warning => undef
+$ColumnMap => {}
+$Class => 'RT__Ticket'
+</%ARGS>
+<%init>
+$m->out( '<tr class="'
+ . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) . '" >'
+ . "\n" );
+use HTML::Entities;
+my $item;
+foreach my $column (@Format) {
+ if ( defined $column->{title} && $column->{title} eq 'NEWLINE' ) {
+ while ( $item < $maxitems ) {
+ $m->out(qq{<td class="collection-as-table">&nbsp;</td>\n});
+ $item++;
+ }
+ $item = 0;
+ $m->out( '</tr>' . "\n" );
+ $m->out( '<tr class="'
+ . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' )
+ . '" >'
+ . "\n" );
+ next;
+ }
+
+ my $class = $column->{class} ? encode_entities( $column->{class}, q{'"&<>} ) : 'collection-as-table';
+ $m->out(qq{<td class="$class" });
+
+ my %attrs;
+ foreach my $attr (qw(style align)) {
+ if ( defined $column->{ $attr } ) {
+ $attrs{ $attr } = $column->{ $attr };
+ next;
+ }
+
+ # if it's not defined then use column map
+ my $col = $column->{'attribute'} || $column->{'last_attribute'};
+ unless ( exists $ColumnMap->{$col}{$attr} ) {
+ next unless $col;
+
+ $ColumnMap->{$col}{$attr} = $m->comp(
+ "/Elements/ColumnMap",
+ Class => $Class,
+ Name => $col,
+ Attr => $attr,
+ );
+ }
+ $attrs{ $attr } = ProcessColumnMapValue(
+ $ColumnMap->{$col}{$attr},
+ Arguments => [$record, $i],
+ Escape => 0,
+ );
+ }
+
+ $attrs{colspan} = $column->{span};
+ $item += ($attrs{'colspan'} || 1);
+
+ my @out;
+ foreach my $subcol ( @{ $column->{output} } ) {
+ my ($col) = ($subcol =~ /^__(.*?)__$/);
+ unless ( $col ) {
+ push @out, $subcol;
+ next;
+ }
+
+ unless ( exists $ColumnMap->{$col}{'value'} ) {
+ $ColumnMap->{$col}{'value'} = $m->comp(
+ "/Elements/ColumnMap",
+ Class => $Class,
+ Name => $col,
+ Attr => 'value'
+ );
+ }
+
+ push @out, ProcessColumnMapValue(
+ $ColumnMap->{$col}{'value'},
+ Arguments => [$record, $i],
+ );
+ }
+ s/\n/<br \/>/gs for @out;
+
+ $m->out( $_ .'="'. $m->interp->apply_escapes( $attrs{$_} => 'h' ) .'"' )
+ foreach grep $attrs{$_}, qw(align style colspan);
+
+ $m->out('>');
+ $m->out(@out) if @out;
+ $m->out( '</td>' . "\n" );
+}
+$m->out('</tr>');
+</%init>
diff --git a/rt/share/html/Elements/CollectionList b/rt/share/html/Elements/CollectionList
new file mode 100644
index 0000000..6f21420
--- /dev/null
+++ b/rt/share/html/Elements/CollectionList
@@ -0,0 +1,175 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+if (!$Collection && $Class eq 'RT::Tickets') {
+ $Collection = RT::Tickets->new( $session{'CurrentUser'} );
+ $Collection->FromSQL($Query);
+}
+
+my $TotalFound = $Collection->CountAll();
+return '' if !$TotalFound && !$ShowEmpty;
+
+if ( @OrderBy ) {
+ if ( $OrderBy[0] =~ /\|/ ) {
+ @OrderBy = split /\|/, $OrderBy[0];
+ @Order = split /\|/,$Order[0];
+ }
+ $Collection->OrderByCols(
+ map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } }
+ ( 0 .. $#OrderBy )
+ );
+}
+
+$Collection->RowsPerPage( $Rows ) if $Rows;
+$Page = 1 unless $Page && $Page > 0; # workaround problems with $Page = '' or undef
+$Collection->GotoPage( $Page - 1 ); # SB uses page 0 as the first page
+
+# DisplayFormat lets us use a "temporary" format for display, while
+# still using our original format for next/prev page links.
+# bulk update uses this feature to add checkboxes
+
+$DisplayFormat ||= $Format;
+
+# Scrub the html of the format string to remove any potential nasties.
+$Format = $m->comp('/Elements/ScrubHTML', Content => $Format);
+$DisplayFormat = $m->comp('/Elements/ScrubHTML', Content => $DisplayFormat);
+
+my @Format = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $DisplayFormat);
+
+# Find the maximum number of items in any row, so we can pad the table.
+my ($maxitems, $item) = (0, 0);
+foreach my $col (@Format) {
+ $item++;
+ if ( $col->{title} && ($col->{title} eq 'NEWLINE') ) {
+ $item = 0;
+ }
+ else {
+ $maxitems = $item if $item > $maxitems;
+ }
+}
+
+$Class ||= ref $Collection;
+$Class =~ s/s$//;
+$Class =~ s/:/_/g;
+
+$m->out('<table border="0" cellspacing="0" cellpadding="1"' .
+ ' width="100%" class="' .
+ ($Collection->isa('RT::Tickets') ? 'ticket-list' : 'collection') . '">');
+
+if ( $ShowHeader ) {
+ $m->comp('/Elements/CollectionAsTable/Header',
+ %ARGS,
+ Class => $Class,
+ Format => \@Format,
+ FormatString => $Format,
+ Order => \@Order,
+ OrderBy => \@OrderBy,
+ Rows => $Rows,
+ Page => $Page,
+ AllowSorting => $AllowSorting,
+ BaseURL => $BaseURL,
+ GenericQueryArgs => $GenericQueryArgs,
+ maxitems => $maxitems,
+ );
+}
+
+my ($i, $column_map) = (0, {});
+while ( my $record = $Collection->Next ) {
+ # Every ten rows, flush the buffer and put something on the page.
+ $m->flush_buffer unless ++$i % 10;
+ $m->comp('/Elements/CollectionAsTable/Row',
+ i => $i,
+ Format => \@Format,
+ record => $record,
+ maxitems => $maxitems,
+ ColumnMap => $column_map,
+ Class => $Class,
+ );
+}
+
+$m->out('</table>');
+if ( $Rows && $ShowNavigation && $TotalFound > $Rows ) {
+ my $oddRows = ($TotalFound && $TotalFound % $Rows == 0 )? 0 : 1;
+ my $pages = int( $TotalFound / $Rows ) + $oddRows;
+ $pages = 1 if $pages < 1;
+
+
+ my %query_args = map { $_ => $ARGS{$_} } @PassArguments;
+ $m->comp(
+ '/Elements/CollectionListPaging',
+ BaseURL => $BaseURL,
+ Rows => $Rows,
+ TotalFound => $TotalFound,
+ CurrentPage => $Page,
+ Pages => $pages,
+ URLParams => \%query_args
+ );
+
+}
+
+</%INIT>
+<%ARGS>
+$Class => ''
+$Collection => undef
+$Format => undef
+$DisplayFormat => undef
+@Order => ()
+@OrderBy => ()
+$GenericQueryArgs => undef
+$Rows => undef
+$Page => 1
+$Title => loc('Ticket Search')
+$BaseURL => RT->Config->Get('WebPath') . $m->request_comp->path .'?'
+@PassArguments => qw( Query Format Rows Page Order OrderBy)
+
+$AllowSorting => 0
+$ShowNavigation => 1
+$ShowHeader => 1
+$ShowEmpty => 0
+$Query => 0
+</%ARGS>
diff --git a/rt/share/html/Elements/CollectionListPaging b/rt/share/html/Elements/CollectionListPaging
new file mode 100644
index 0000000..8fc0632
--- /dev/null
+++ b/rt/share/html/Elements/CollectionListPaging
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$BaseURL => undef
+$Rows => undef
+$TotalFound => undef
+$CurrentPage => undef
+$Pages => undef
+$URLParams => undef
+</%ARGS>
+
+<%INIT>
+$m->out(qq{<div class="paging">});
+if ($Pages == 1) {
+ $m->out(loc('Page 1 of 1'));
+}
+else{
+$m->out(loc('Page') . ' ');
+my $prev = $m->comp(
+ '/Elements/QueryString',
+ %$URLParams,
+ Page => ( $CurrentPage - 1 )
+ );
+my $next = $m->comp(
+ '/Elements/QueryString',
+ %$URLParams,
+ Page => ( $CurrentPage + 1 )
+ );
+my %show;
+$show{1} = 1;
+$show{$_} = 1 for (($CurrentPage - 2)..($CurrentPage + 2));
+$show{$Pages} = 1;
+my $dots;
+
+for my $number ( 1 .. $Pages ) {
+ if ( $show{$number} ) {
+ $dots = undef;
+ my $qs =
+ $m->comp( '/Elements/QueryString', %$URLParams, Page => $number );
+ $m->out(qq{<span class="pagenum">});
+ if ( $number == $CurrentPage ) {
+ $m->out(qq{<span class="currentpage">$number</span> });
+ }
+ else {
+ $m->out(qq{<a href="$BaseURL$qs">$number</a> });
+ }
+ }
+ elsif ( not $dots ) {
+ $dots = 1;
+ $m->out(qq{<span class="dots">...</span>});
+ }
+ $m->out(qq{</span>});
+}
+
+if ($CurrentPage > 1) {
+ $m->out(qq{<a href="$BaseURL$prev" class="nav">}.loc('Previous') . qq{</a>});
+}
+if (($CurrentPage * $Rows) < $TotalFound) {
+ $m->out(qq{<a href="$BaseURL$next" class="nav">}.loc('Next').qq{</a>});
+}
+}
+$m->out(qq{</div>});
+</%INIT>
diff --git a/rt/share/html/Elements/ColumnMap b/rt/share/html/Elements/ColumnMap
new file mode 100644
index 0000000..71517e0
--- /dev/null
+++ b/rt/share/html/Elements/ColumnMap
@@ -0,0 +1,151 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Class => 'RT__Ticket'
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+
+# This is scary and should totally be refactored -- jesse
+my $COLUMN_MAP = {
+ id => {
+ attribute => 'id',
+ title => 'id', # loc
+ align => 'right',
+ value => sub { return $_[0]->id }
+ },
+
+ Created => {
+ attribute => 'Created',
+ title => 'Created', # loc
+ value => sub { return $_[0]->CreatedObj->AsString }
+ },
+ CreatedRelative => {
+ attribute => 'Created',
+ title => 'Created', # loc
+ value => sub { return $_[0]->CreatedObj->AgeAsString }
+ },
+ CreatedBy => {
+ attribute => 'CreatedBy',
+ title => 'Created By', # loc
+ value => sub { return $_[0]->CreatorObj->Name }
+ },
+ LastUpdated => {
+ attribute => 'LastUpdated',
+ title => 'Last Updated', # loc
+ value => sub { return $_[0]->LastUpdatedObj->AsString }
+ },
+ LastUpdatedRelative => {
+ attribute => 'LastUpdated',
+ title => 'Last Updated', # loc
+ value => sub { return $_[0]->LastUpdatedObj->AgeAsString }
+ },
+ LastUpdatedBy => {
+ attribute => 'LastUpdatedBy',
+ title => 'Last Updated By', # loc
+ value => sub { return $_[0]->LastUpdatedByObj->Name }
+ },
+
+
+ CheckBox => {
+ title => sub {
+ my $name = $_[1] || 'SelectedTickets';
+ my $checked = $m->request_args->{ $name .'All' }? 'checked="checked"': '';
+
+ return \qq{<input type="checkbox" name="${name}All" value="1" $checked
+ onclick="setCheckbox(this.form, '$name', this.checked)" />};
+ },
+ value => sub {
+ my $id = $_[0]->id;
+
+ my $name = $_[2] || 'SelectedTickets';
+ return \qq{<input type="checkbox" name="$name" value="$id" checked="checked" />}
+ if $m->request_args->{ $name . 'All'};
+
+ my $arg = $m->request_args->{ $name };
+ my $checked = '';
+ if ( $arg && ref $arg ) {
+ $checked = 'checked="checked"' if grep $_ == $id, @$arg;
+ }
+ elsif ( $arg ) {
+ $checked = 'checked="checked"' if $arg == $id;
+ }
+ return \qq{<input type="checkbox" name="$name" value="$id" $checked />}
+ },
+ },
+ RadioButton => {
+ title => \'&nbsp;',
+ value => sub {
+ my $id = $_[0]->id;
+
+ my $name = $_[2] || 'SelectedTicket';
+ my $arg = $m->request_args->{ $name };
+ my $checked = '';
+ $checked = 'checked="checked"' if $arg && $arg == $id;
+ return \qq{<input type="radio" name="SelectedTicket" value="$id" $checked />};
+ },
+ },
+ (map {
+ my $value = RT->Config->Get($_);
+ $_ => { value => sub { return \$value } };
+
+ } qw(WebPath WebBaseURL WebURL)),
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 );
+$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;
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+
+</%INIT>
diff --git a/rt/share/html/Elements/CreateTicket b/rt/share/html/Elements/CreateTicket
new file mode 100755
index 0000000..9c8f3aa
--- /dev/null
+++ b/rt/share/html/Elements/CreateTicket
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<form action="<% RT->Config->Get('WebPath') %>/Ticket/Create.html" name="CreateTicketInQueue" id="CreateTicketInQueue">
+<&|/l, $m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()')&><input type="submit" class="button" value="New ticket in" />&nbsp;[_1]</&>
+</form>
diff --git a/rt/share/html/Elements/DashboardTabs b/rt/share/html/Elements/DashboardTabs
new file mode 100644
index 0000000..f9493d5
--- /dev/null
+++ b/rt/share/html/Elements/DashboardTabs
@@ -0,0 +1,52 @@
+<%args>
+$CurrentDashboard => undef
+</%args>
+<%init>
+my @dashboards = $m->comp("/Dashboards/Elements/ListOfDashboards");
+my $limit = 7;
+
+$m->callback(
+ Dashboards => \@dashboards,
+ Limit => \$limit,
+ CallbackName => 'MassageDashboards',
+);
+
+my $more = 0;
+if (@dashboards > $limit) {
+ $more = 1;
+ splice @dashboards, $limit;
+}
+
+# always include the current dashboard, even if it's not in the initial list
+push @dashboards, $CurrentDashboard
+ if $CurrentDashboard
+ && 0 == grep { $_->Id == $CurrentDashboard->Id } @dashboards;
+
+my $position = 0;
+
+my $tabs = {
+ map {
+ ++$position;
+ my $key = sprintf 'D-%03d', $position;
+ $key => {
+ title => $_->Name,
+ path => 'Dashboards/' . $_->Id . '/' . $_->Name,
+ }
+ }
+ @dashboards
+};
+
+$tabs->{"A"} = {
+ title => loc('Home'),
+ path => 'index.html',
+};
+
+if ($more) {
+ $tabs->{"D-more"} = {
+ title => loc('More'),
+ path => 'Dashboards/index.html',
+ }
+}
+
+return $tabs;
+</%init>
diff --git a/rt/share/html/Elements/Dashboards b/rt/share/html/Elements/Dashboards
new file mode 100644
index 0000000..3653aa5
--- /dev/null
+++ b/rt/share/html/Elements/Dashboards
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="dashboards">
+<&|/Widgets/TitleBox,
+ title => loc("Dashboards"),
+ title_href => RT->Config->Get('WebPath').'/Dashboards/index.html',
+ bodyclass => "",
+ titleright => loc("Edit"),
+ titleright_href => RT->Config->Get('WebPath').'/Dashboards/',
+&>
+
+<& /Dashboards/Elements/ShowDashboards:table,
+ Dashboards => \@dashboards,
+ Verbose => 0,
+&>
+</&>
+</div>
+<%INIT>
+my @dashboards = $m->comp("/Dashboards/Elements/ListOfDashboards");
+</%INIT>
+
diff --git a/rt/share/html/Elements/EditCustomField b/rt/share/html/Elements/EditCustomField
new file mode 100644
index 0000000..d1bb0c2
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomField
@@ -0,0 +1,116 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+
+my $Type = $CustomField->Type;
+unless ( $Type ) {
+ # if we can't see the type, all hell will break loose.
+ $RT::Logger->error( "Custom field #". $CustomField->id ." has empty type" );
+ return;
+}
+
+my $Values;
+if ( $Object && $Object->id ) {
+ $NamePrefix ||= join '-',
+ 'Object', ref($Object), $Object->Id, 'CustomField', '';
+
+ $Values = $Object->CustomFieldValues( $CustomField->id );
+ $Values->Columns(
+ qw( id CustomField ObjectType ObjectId Disabled Content
+ ContentType ContentEncoding SortOrder Creator Created
+ LastUpdatedBy LastUpdated )
+ );
+ # Don't take care of $Values if there isn't values inside
+ undef ( $Values ) unless ( $Values->Count );
+}
+
+# Always fill $Default with submited values if it's empty
+if ( ( !defined $Default || !length $Default ) && $DefaultsFromTopArguments ) {
+ my %TOP = $m->request_args;
+ $Default = $TOP{ $NamePrefix .$CustomField->Id . '-Values' }
+ || $TOP{ $NamePrefix .$CustomField->Id . '-Value' };
+}
+
+my $MaxValues = $CustomField->MaxValues;
+if ($MaxValues == 1 && $Values) {
+ # what exactly is this doing? Without the "unless" it breaks RTFM
+ # transaction extraction into articles.
+ $Default = ($Values->First ? $Values->First->Content : '') unless $Default;
+ $Values->GotoFirstItem;
+}
+# The "Magic" hidden input causes RT to know that we were trying to edit the field, even if
+# we don't see a value later, since browsers aren't compelled to submit empty form fields
+$m->out("\n".'<input type="hidden" class="hidden" name="'.$NamePrefix.$CustomField->Id.'-Values-Magic" value="1" />'."\n");
+
+my $EditComponent = "EditCustomField$Type";
+$m->callback( %ARGS, CallbackName => 'EditComponentName', Name => \$EditComponent, CustomField => $CustomField, Object => $Object );
+$EditComponent = "EditCustomField$Type" unless $m->comp_exists($EditComponent);
+
+return $m->comp(
+ $EditComponent,
+ %ARGS,
+ Rows => $Rows,
+ Cols => $Cols,
+ Default => $Default,
+ Object => $Object,
+ Values => $Values,
+ MaxValues => $MaxValues,
+ Multiple => ($MaxValues != 1),
+ NamePrefix => $NamePrefix,
+ CustomField => $CustomField,
+);
+</%INIT>
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
+$Rows => 5
+$Cols => 15
+$Default => undef
+$DefaultsFromTopArguments => 1,
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomFieldAutocomplete b/rt/share/html/Elements/EditCustomFieldAutocomplete
new file mode 100644
index 0000000..ba7907b
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldAutocomplete
@@ -0,0 +1,88 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ( $Multiple ) {
+<textarea cols="<% $Cols %>" rows="<% $Rows %>" name="<% $name %>-Values" id="<% $name %>-Values" class="CF-<%$CustomField->id%>-Edit"><% $Default %></textarea><div id="<% $name %>-Choices" class="autocomplete"></div>
+<script type="text/javascript">
+new Ajax.Autocompleter(
+ "<% $name %>-Values",
+ "<% $name %>-Choices",
+ "<% RT->Config->Get('WebPath')%>/Helpers/Autocomplete/CustomFieldValues",
+ { tokens: [ '\n' ] }
+);
+% } else {
+<input type="text" id="<% $name %>-Value" name="<% $name %>-Value" class="CF-<%$CustomField->id%>-Edit" value="<% $Default %>"/><div id="<% $name %>-Choices" class="autocomplete"></div>
+<script type="text/javascript">
+new Ajax.Autocompleter(
+ "<% $name %>-Value",
+ "<% $name %>-Choices",
+ "<% RT->Config->Get('WebPath')%>/Helpers/Autocomplete/CustomFieldValues",
+ {}
+);
+% }
+</script>
+<%INIT>
+my $name = $NamePrefix . $CustomField->Id;
+if ( $Default && !$Multiple ) {
+ $Default =~ s/\s*\r*\n\s*/ /g;
+}
+if ( $Multiple and $Values ) {
+ $Default = '';
+ while (my $value = $Values->Next ) {
+ $Default .= $value->Content ."\n";
+ }
+}
+</%INIT>
+<%ARGS>
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Values => undef
+$Multiple => undef
+$Rows => undef
+$Cols => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomFieldBinary b/rt/share/html/Elements/EditCustomFieldBinary
new file mode 100644
index 0000000..89a669f
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldBinary
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% while ( $Values and my $value = $Values->Next ) {
+%# XXX - let user download the file(s) here?
+<input type="checkbox" class="checkbox" name="<%$NamePrefix%><%$CustomField->Id%>-DeleteValueIds" class="CF-<%$CustomField->id%>-Edit" value="<% $value->Id %>" /><a href="<%RT->Config->Get('WebPath')%>/Download/CustomFieldValue/<% $value->Id %>/<% $value->Content %>"><% $value->Content %></a><br />
+% }
+% if (!$MaxValues || !$Values || $Values->Count < $MaxValues) {
+<input type="file" name="<% $NamePrefix %><% $CustomField->Id %>-Upload" class="CF-<%$CustomField->id%>-Edit" />
+% }
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Values => undef
+$MaxValues => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomFieldCombobox b/rt/share/html/Elements/EditCustomFieldCombobox
new file mode 100644
index 0000000..e6b76ff
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldCombobox
@@ -0,0 +1,69 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% while ($Values and my $value = $Values->Next and $Multiple) {
+<input type="checkbox" class="checkbox CF-<%$CustomField->id%>-Edit" name="<%$NamePrefix%><%$CustomField->Id%>-DeleteValueIds" class="CF-<%$CustomField->id%>-Edit" value="<% $value->Id %>" /><% $value->Content %>
+<br />
+% }
+% (!$Multiple or !$MaxValues or !$Values or $Values->Count < $MaxValues) or return;
+<& /Widgets/ComboBox,
+ Name => $NamePrefix . $CustomField->Id . "-Value",
+ Default => $Default,
+ Rows => $Rows,
+ Class => "CF-".$CustomField->id."-Edit",
+ Values => [map {$_->Name} @{$CustomField->Values->ItemsArrayRef}],
+&>
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Values => undef
+$Multiple => 0
+$Rows => undef
+$MaxValues => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomFieldFreeform b/rt/share/html/Elements/EditCustomFieldFreeform
new file mode 100644
index 0000000..856a61f
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldFreeform
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% my $name = $NamePrefix . $CustomField->Id . '-Value';
+% if ($Multiple) {
+<textarea cols="<%$Cols%>" rows="<%$Rows%>" name="<%$name%>s" id="<%$name%>s" wrap="off" class="CF-<%$CustomField->id%>-Edit"><% defined($Default) ? $Default : '' %></textarea>
+% } else {
+<input name="<%$name%>" id="<%$name%>" size="<%$Cols%>" class="CF-<%$CustomField->id%>-Edit" value="<% defined($Default) ? $Default : ''%>" />
+% }
+<%INIT>
+if ( $Multiple and $Values ) {
+ $Default = join "\n", map $_->Content, @{ $Values->ItemsArrayRef };
+}
+unless ( $Multiple ) {
+ $Default =~ s/\s*\n+\s*/ /g if $Default;
+}
+</%INIT>
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Values => undef
+$Multiple => undef
+$Cols
+$Rows
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomFieldImage b/rt/share/html/Elements/EditCustomFieldImage
new file mode 100644
index 0000000..b15cc5d
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldImage
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% while ($Values and my $value = $Values->Next ) {
+<input type="checkbox" class="checkbox" name="<%$NamePrefix%><%$CustomField->Id%>-DeleteValueIds" class="CF-<%$CustomField->id%>-Edit" value="<% $value->Id %>" /><& ShowCustomFieldImage, Object => $value &>
+<br />
+% }
+% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) {
+<input type="file" name="<%$NamePrefix%><%$CustomField->Id%>-Upload" class="CF-<%$CustomField->id%>-Edit" />
+% }
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Values => undef
+$MaxValues => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomFieldSelect b/rt/share/html/Elements/EditCustomFieldSelect
new file mode 100644
index 0000000..8fe79f9
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldSelect
@@ -0,0 +1,161 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# Build up the set of cascading select boxes as "guides"
+%# each one limits the options of the final one a bit
+%# (perhaps by tweaking the .display style?)
+% my $selected = 0;
+% my @category;
+% my $id = $NamePrefix . $CustomField->Id;
+% my $out = $m->scomp('SELF:options', %ARGS, SelectedRef => \$selected, CategoryRef => \@category);
+% if (@category and not $CustomField->BasedOnObj->id) {
+ <script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/cascaded.js"></script>
+%# XXX - Hide this select from w3m?
+ <select onchange="filter_cascade('<% $id %>-Values', this.value)" name="<% $id %>-Category" class="CF-<%$CustomField->id%>-Edit">
+ <option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>-</&></option>
+% foreach my $cat (@category) {
+% my ($depth, $name) = @$cat;
+ <option value="<% $name %>"><% '&nbsp;' x $depth |n %><% $name %></option>
+% }
+ </select><br />
+% } elsif ($CustomField->BasedOnObj->id) {
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/cascaded.js"></script>
+<script type="text/javascript"><!--
+doOnLoad( function () {
+ var basedon = document.getElementById('<% $NamePrefix . $CustomField->BasedOnObj->id %>-Values');
+ if (basedon != null) {
+ var oldchange = basedon.onchange;
+ basedon.onchange = function () {
+ filter_cascade(
+ '<% $id %>-Values',
+ basedon.value,
+ 1
+ );
+ if (oldchange != null)
+ oldchange();
+ };
+ basedon.onchange();
+ }
+});
+--></script>
+% }
+% if (@category) {
+%# this hidden select is to supply a full list of values,
+%# see filter_cascade() in js/cascaded.js
+ <select name="<%$id%>-Values-Complete" id="<%$id%>-Values-Complete" class="hidden" disabled="disabled">
+ <option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>(no value)</&></option>
+% $m->out($out);
+ </select>
+% }
+<select
+ name="<%$id%>-Values" id="<%$id%>-Values" class="CF-<%$CustomField->id%>-Edit"
+% if ( $Rows && ( $Multiple || !@category ) ) {
+ size="<% $Rows %>"
+% }
+<% $Multiple && qq[multiple="multiple"] |n %> >
+<option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>(no value)</&></option>
+% $m->out($out);
+</select>
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Values => undef
+$Multiple => 0
+$Rows => undef
+</%ARGS>
+
+<%METHOD options>
+% @Default = grep defined && length, @Default;
+% # $Values->HasEntry is too slow here
+% if ( !@Default && $Values ) {
+% @Default = map $_->Content, @{$Values->ItemsArrayRef};
+% }
+% $_ = lc $_ foreach @Default;
+% my $selected;
+% my $CFVs = $CustomField->Values;
+% my @levels;
+% while ( my $value = $CFVs->Next ) {
+% my $name = $value->Name;
+% my $category = $value->Category || '';
+% my $level = (split /:/, $category, 2)[0] || '';
+% while (@levels) {
+% if ($levels[-1] eq $level) {
+% $level = '';
+% last;
+% } elsif (index($level, $levels[-1]) != 0) {
+% $m->out('</optgroup>');
+% pop @levels;
+% } else {
+% last;
+% }
+% }
+% if ( length $level ) {
+% push @$CategoryRef, [0+@levels, $level];
+ <optgroup style="padding-left: <% @levels/2 %>em" label="<% $category %>">
+% push @levels, $level;
+% }
+ <option value="<% $name %>"
+% if ( grep $_ eq lc $name, @Default )
+% {
+% $$SelectedRef = 1;
+ selected="selected"
+% }
+ ><% $name %></option>
+% }
+% for (@levels) {
+ </optgroup>
+% }
+<%ARGS>
+$CustomField => undef
+@Default => ()
+$Values => undef
+$SelectedRef => undef
+$CategoryRef => undef
+</%ARGS>
+</%METHOD>
diff --git a/rt/share/html/Elements/EditCustomFieldText b/rt/share/html/Elements/EditCustomFieldText
new file mode 100644
index 0000000..7d69ffc
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldText
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% while ($Values and my $value = $Values->Next ) {
+<textarea cols="<%$Cols%>" rows="<%$Rows%>" name="<%$NamePrefix%><%$CustomField->Id%>-Values" class="CF-<%$CustomField->id%>-Edit"><% $value->Content %></textarea><br />
+% }
+% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) {
+<textarea cols="<%$Cols%>" rows="<%$Rows%>" name="<%$NamePrefix%><%$CustomField->Id%>-Values" class="CF-<%$CustomField->id%>-Edit"><% defined($Default) ? $Default : '' %></textarea>
+% }
+<%INIT>
+# XXX - MultiValue textarea is for now outlawed.
+$MaxValues = 1;
+</%INIT>
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => ''
+$Default => undef
+$Values => undef
+$MaxValues => undef
+$Cols
+$Rows
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomFieldWikitext b/rt/share/html/Elements/EditCustomFieldWikitext
new file mode 100644
index 0000000..f11b48d
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldWikitext
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% while ($Values and my $value = $Values->Next ) {
+<textarea cols="<%$Cols%>" rows="<%$Rows%>" name="<%$NamePrefix%><%$CustomField->Id%>-Values" class="CF-<%$CustomField->id%>-Edit"><% $value->Content %></textarea><br />
+% }
+% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) {
+<textarea cols="<%$Cols%>" rows="<%$Rows%>" name="<%$NamePrefix%><%$CustomField->Id%>-Values" class="CF-<%$CustomField->id%>-Edit"><% $Default %></textarea>
+% }
+<%INIT>
+# XXX - MultiValue textarea is for now outlawed.
+$MaxValues = 1;
+</%INIT>
+<%ARGS>
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Values => undef
+$MaxValues => undef
+$Cols
+$Rows
+</%ARGS>
diff --git a/rt/share/html/Elements/EditLinks b/rt/share/html/Elements/EditLinks
new file mode 100755
index 0000000..637762e
--- /dev/null
+++ b/rt/share/html/Elements/EditLinks
@@ -0,0 +1,178 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table width="100%">
+ <tr>
+ <td valign="top" width="50%">
+ <h3><&|/l&>Current Links</&></h3>
+
+<table>
+ <tr>
+ <td class="labeltop"><&|/l&>Depends on</&>:</td>
+ <td class="value">
+% while (my $link = $Object->DependsOn->Next) {
+ <input type="checkbox" class="checkbox" name="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1" />
+ <& ShowLink, URI => $link->TargetURI &><br />
+% }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Depended on by</&>:</td>
+ <td class="value">
+% while (my $link = $Object->DependedOnBy->Next) {
+ <input type="checkbox" class="checkbox" name="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1" />
+ <& ShowLink, URI => $link->BaseURI &><br />
+% }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Parents</&>:</td>
+ <td class="value">
+% while (my $link = $Object->MemberOf->Next) {
+ <input type="checkbox" class="checkbox" name="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1" />
+ <& ShowLink, URI => $link->TargetURI &><br />
+% }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Children</&>:</td>
+ <td class="value">
+% while (my $link = $Object->Members->Next) {
+ <input type="checkbox" class="checkbox" name="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1" />
+ <& ShowLink, URI => $link->BaseURI &><br />
+% }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Refers to</&>:</td>
+ <td class="value">
+% while (my $link = $Object->RefersTo->Next) {
+ <input type="checkbox" class="checkbox" name="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1" />
+ <& ShowLink, URI => $link->TargetURI &><br />
+%}
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Referred to by</&>:</td>
+ <td class="value">
+% while (my $link = $Object->ReferredToBy->Next) {
+% # Skip reminders
+% next if (UNIVERSAL::isa($link->BaseObj, 'RT::Ticket') && $link->BaseObj->Type eq 'reminder');
+ <input type="checkbox" class="checkbox" name="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1" />
+ <& ShowLink, URI => $link->BaseURI &><br />
+% }
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td><i><&|/l&>(Check box to delete)</&></i></td>
+ </tr>
+</table>
+
+</td>
+<td valign="top">
+<h3><&|/l&>New Links</&></h3>
+% if (ref($Object) eq 'RT::Ticket') {
+<i><&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.</&>
+% $m->callback( CallbackName => 'ExtraLinkInstructions' );
+</i><br />
+% } elsif (ref($Object) eq 'RT::Queue') {
+<i><&|/l&>Enter queues or URIs to link queues to. Separate multiple entries with spaces.</&>
+</i><br />
+% } else {
+<i><&|/l&>Enter objects or URIs to link objects to. Separate multiple entries with spaces.</&></i><br />
+% }
+<table>
+% if ($Merge) {
+ <tr>
+ <td class="label"><&|/l&>Merge into</&>:</td>
+ <td class="entry"><input name="<%$id%>-MergeInto" /> <i><&|/l&>(only one ticket)</&></i></td>
+ </tr>
+% }
+ <tr>
+ <td class="label"><&|/l&>Depends on</&>:</td>
+ <td class="entry"><input name="<%$id%>-DependsOn" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Depended on by</&>:</td>
+ <td class="entry"><input name="DependsOn-<%$id%>" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Parents</&>:</td>
+ <td class="entry"><input name="<%$id%>-MemberOf" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Children</&>:</td>
+ <td class="entry"> <input name="MemberOf-<%$id%>" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Refers to</&>:</td>
+ <td class="entry"><input name="<%$id%>-RefersTo" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Referred to by</&>:</td>
+ <td class="entry"> <input name="RefersTo-<%$id%>" /></td>
+ </tr>
+% $m->callback( CallbackName => 'NewLink' );
+</table>
+</td>
+</tr>
+</table>
+
+<%INIT>
+my $id;
+if ($Object && $Object->Id) {
+ $id = $Object->Id;
+} else {
+ $id = 'new';
+}
+</%INIT>
+
+<%ARGS>
+$Object => undef
+$Merge => 0
+</%ARGS>
diff --git a/rt/share/html/Elements/EditTimeValue b/rt/share/html/Elements/EditTimeValue
new file mode 100644
index 0000000..863f8bf
--- /dev/null
+++ b/rt/share/html/Elements/EditTimeValue
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<input name="<% $ValueName %>" value="<% $Default || '' %>" size="5" />
+<& /Elements/SelectTimeUnits, Name => $UnitName &>
+<%ARGS>
+$Default => ''
+$Name => ''
+$ValueName => ''
+$UnitName => ''
+$InputUnits => 'minutes'
+</%ARGS>
+<%INIT>
+$ValueName ||= $Name;
+$UnitName ||= ($Name||$ValueName) . '-TimeUnits';
+
+if ($InputUnits eq 'minutes' && RT->Config->Get('DefaultTimeUnitsToHours')) {
+ $Default = sprintf '%.3g', $Default / 60
+ unless $Default eq '';
+}
+</%INIT>
diff --git a/rt/share/html/Elements/EmailInput b/rt/share/html/Elements/EmailInput
new file mode 100644
index 0000000..5c7f277
--- /dev/null
+++ b/rt/share/html/Elements/EmailInput
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<input name="<% $Name %>" size="<% $Size %>" value="<% $Default || '' %>" />
+<%ARGS>
+$Name
+$Size => 40
+$Default => ''
+</%ARGS>
diff --git a/rt/share/html/Elements/Error b/rt/share/html/Elements/Error
new file mode 100755
index 0000000..604d29b
--- /dev/null
+++ b/rt/share/html/Elements/Error
@@ -0,0 +1,90 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback( %ARGS, error => $error );
+
+% unless ($SuppressHeader) {
+<& /Elements/Header, Code => $Code, Why => $Why, Title => $Title &>
+<& /Elements/Tabs, Title => $Title &>
+% }
+
+<div class="error">
+<%$Why%>
+<br />
+<%$Details%>
+</div>
+
+<%cleanup>
+$m->comp('/Elements/Footer');
+$m->abort();
+</%cleanup>
+
+<%args>
+$Code => undef
+$Details => ''
+$Title => loc("RT Error")
+$Why => loc("the calling component did not specify why"),
+$SuppressHeader => 0,
+</%args>
+
+<%INIT>
+my $error = "WebRT: $Why";
+$error .= " ($Details)" if defined $Details && length $Details;
+
+# TODO: Log::Dispatch isn't UTF-8 safe. Autrijus needs to talk to dave rolsky about getting this fixed
+use Encode ();
+Encode::_utf8_off($error);
+
+$RT::Logger->error($error);
+
+if ( defined $session{'SessionType'} && $session{'SessionType'} eq 'REST' ) {
+ $r->content_type('text/plain');
+ $m->out( "Error: " . $Why . "\n" );
+ $m->out( $Details . "\n" ) if defined $Details && length $Details;
+ $m->abort();
+}
+</%INIT>
diff --git a/rt/share/html/Elements/Footer b/rt/share/html/Elements/Footer
new file mode 100755
index 0000000..2fcdee9
--- /dev/null
+++ b/rt/share/html/Elements/Footer
@@ -0,0 +1,84 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# End of div#body from /Elements/PageLayout
+</div>
+% $m->callback( %ARGS );
+<div id="footer">
+% if ($m->{'rt_base_time'}) {
+ <p id="time">
+ <span><&|/l&>Time to display</&>: <%Time::HiRes::tv_interval( $m->{'rt_base_time'} )%></span>
+ </p>
+%}
+ <p id="bpscredits">
+ <span>
+<&|/l, '&#187;&#124;&#171;', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>', &>[_1] RT [_2] Copyright 1996-[_3] [_4].</&>
+</span>
+</p>
+% if (!$Menu) {
+ <p id="legal">
+<&|/l&>Distributed under version 2 <a href="http://www.gnu.org/copyleft/gpl.html"> of the GNU GPL.</a></&><br />
+<&|/l, '<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>' &>To inquire about support, training, custom development or licensing, please contact [_1].</&><br />
+ </p>
+% }
+
+</div>
+% if ($Debug >= 2 ) {
+% require Data::Dumper;
+% my $d = Data::Dumper->new([\%ARGS], [qw(%ARGS)]);
+<pre>
+<%$d->Dump() %>
+</pre>
+% }
+
+ </body>
+</html>
+
+<%ARGS>
+$Debug => 0
+$Menu => 1
+</%ARGS>
diff --git a/rt/share/html/Elements/GnuPG/KeyIssues b/rt/share/html/Elements/GnuPG/KeyIssues
new file mode 100644
index 0000000..48a7fd2
--- /dev/null
+++ b/rt/share/html/Elements/GnuPG/KeyIssues
@@ -0,0 +1,92 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ( @$Issues || @$SignAddresses ) {
+<&| /Widgets/TitleBox, title => loc('GnuPG issues') &>
+
+% if ( @$SignAddresses ) {
+<% loc("The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:") %>
+<ul>
+% for my $address (@$SignAddresses) {
+ <li><% $address %></li>
+% }
+</ul>
+% }
+
+% if (@$Issues == 1) {
+<% loc("You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key. You have to fix the problem with the key, disable sending a message to that recipient, or disable encryption.") %>
+% } elsif (@$Issues > 1) {
+<% loc("You are going to encrypt outgoing email messages, but there are problems with recipients' public keys. You have to fix the problems with the keys, disable sending a message to the recipients with key problems, or disable encryption.") %>
+% }
+
+<ul>
+% foreach my $issue ( @$Issues ) {
+<li>
+% if ( $issue->{'User'} ) {
+User <a href="<% RT->Config->Get('WebPath') %>/Admin/Users/Modify.html?id=<% $issue->{'User'}->id %>"><&/Elements/ShowUser, User => $issue->{'User'} &></a> has a problem.
+% } else {
+There is a problem with key(s) for address <% $issue->{'EmailAddress'} %>, but there is no user in the DB for this address.
+% }
+<% $issue->{'Message'} %>
+<br />
+Select a key you want to use for encryption:
+<& /Elements/GnuPG/SelectKeyForEncryption,
+ Name => 'UseKey-'. $issue->{'EmailAddress'},
+ EmailAddress => $issue->{'EmailAddress'},
+ Default => ( $issue->{'User'}? $issue->{'User'}->PreferredKey : undef ),
+&>
+</li>
+% }
+</ul>
+</&>
+% }
+
+<%ARGS>
+$Issues => []
+$SignAddresses => []
+</%ARGS>
+
diff --git a/rt/share/html/Elements/GnuPG/SelectKeyForEncryption b/rt/share/html/Elements/GnuPG/SelectKeyForEncryption
new file mode 100644
index 0000000..c28c5ad
--- /dev/null
+++ b/rt/share/html/Elements/GnuPG/SelectKeyForEncryption
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if (!@keys) {
+<% loc("No usable keys.") %>
+% } else {
+<select name="<% $Name %>">
+% foreach my $key (@keys) {
+<option value="<% $key->{'Fingerprint'} %>"><% $key->{'Fingerprint'} %> <% loc("(trust: [_1])", $key->{'TrustTerse'}) %></option>
+% }
+</select>
+% }
+
+<%INIT>
+require RT::Crypt::GnuPG;
+my $d;
+
+my %res = RT::Crypt::GnuPG::GetKeysForEncryption($EmailAddress);
+# move the preferred key to the top of the list
+my @keys = map {
+ $_->{'Fingerprint'} eq ( $Default || '' )
+ ? do { $d = $_; () }
+ : $_
+ }
+ @{ $res{'info'} };
+
+@keys = sort { $b->{'TrustLevel'} <=> $a->{'TrustLevel'} } @keys;
+
+unshift @keys, $d if defined $d;
+
+</%INIT>
+<%ARGS>
+$Name => 'PreferredKey'
+$EmailAddress => undef
+$Default => undef
+</%ARGS>
+
diff --git a/rt/share/html/Elements/GnuPG/SelectKeyForSigning b/rt/share/html/Elements/GnuPG/SelectKeyForSigning
new file mode 100644
index 0000000..13b40df
--- /dev/null
+++ b/rt/share/html/Elements/GnuPG/SelectKeyForSigning
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ( $user_key ) {
+<select name="<% $Name %>">
+<option value=""><% loc("Queue's key") %></option>
+<option value="<% $user_key %>"><% $user_key %></option>
+</select>
+% } else {
+<% loc("Queue's key") %>
+% }
+<%ARGS>
+$Name => 'SignUsing',
+$User => undef,
+</%ARGS>
+<%INIT>
+return unless RT->Config->Get('GnuPG')->{'Enable'};
+
+my $user_key = $User->PrivateKey;
+</%INIT>
diff --git a/rt/share/html/Elements/GnuPG/SignEncryptWidget b/rt/share/html/Elements/GnuPG/SignEncryptWidget
new file mode 100644
index 0000000..9303fb5
--- /dev/null
+++ b/rt/share/html/Elements/GnuPG/SignEncryptWidget
@@ -0,0 +1,184 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+<td><% loc('Sign')%></td>
+<td><& /Widgets/Form/Boolean:InputOnly, Name => 'Sign', CurrentValue => $self->{'Sign'} &>
+using <& SelectKeyForSigning, User => $session{'CurrentUser'}->UserObj &>
+</td>
+<td><% loc('Encrypt')%></td>
+<td><& /Widgets/Form/Boolean:InputOnly, Name => 'Encrypt', CurrentValue => $self->{'Encrypt'} &></td>
+</table>
+<%ARGS>
+$self => undef,
+</%ARGS>
+<%INIT>
+return unless $self;
+</%INIT>
+
+<%METHOD new>
+<%ARGS>
+$Arguments => {}
+</%ARGS>
+<%INIT>
+return undef unless RT->Config->Get('GnuPG')->{'Enable'};
+
+require RT::Crypt::GnuPG;
+return { %$Arguments };
+</%INIT>
+</%METHOD>
+
+<%METHOD ShowIssues>
+<%ARGS>
+$self => undef,
+</%ARGS>
+<%INIT>
+return unless $self;
+
+return $m->comp( '/Elements/GnuPG/KeyIssues',
+ Issues => $self->{'GnuPGRecipientsKeyIssues'} || [],
+ SignAddresses => $self->{'GnuPGCanNotSignAs'} || [],
+);
+</%INIT>
+</%METHOD>
+
+
+<%METHOD Process>
+<%ARGS>
+$self => undef
+$QueueObj => undef
+$TicketObj => undef
+</%ARGS>
+<%INIT>
+return unless $self;
+
+$QueueObj ||= $TicketObj->QueueObj if $TicketObj;
+
+foreach ( qw(Sign Encrypt) ) {
+ $self->{ $_ } = $m->comp( '/Widgets/Form/Boolean:Process',
+ Name => $_,
+ DefaultValue => $QueueObj->$_,
+ Arguments => $self,
+ );
+}
+</%INIT>
+</%METHOD>
+
+<%METHOD Check>
+<%ARGS>
+$self => undef
+$Operation => 'Update'
+$TicketObj => undef
+$QueueObj => undef
+</%ARGS>
+<%INIT>
+return 1 unless $self;
+
+my $checks_failure = 0;
+
+if ( $self->{'Sign'} ) {
+ $QueueObj ||= $TicketObj->QueueObj
+ if $TicketObj;
+
+ my $address = $self->{'SignUsing'};
+ $address ||= ($self->{'UpdateType'} && $self->{'UpdateType'} eq "private")
+ ? ( $QueueObj->CommentAddress || RT->Config->Get('CommentAddress') )
+ : ( $QueueObj->CorrespondAddress || RT->Config->Get('CorrespondAddress') );
+
+ unless ( RT::Crypt::GnuPG::DrySign( $address ) ) {
+ push @{ $self->{'GnuPGCanNotSignAs'} ||= [] }, $address;
+ $checks_failure = 1;
+ } else {
+ RT::Crypt::GnuPG::UseKeyForSigning( $self->{'SignUsing'} )
+ if $self->{'SignUsing'};
+ }
+}
+
+if ( $self->{'Encrypt'} ) {
+
+ my @recipients;
+
+ if ( $Operation eq 'Update' ) {
+ # skip any email addresses that we won't be sending mail to
+ my %squelch = $m->comp(
+ '/Ticket/Elements/PreviewScrips:SquelchRecipients',
+ %$self,
+ TicketObj => $TicketObj
+ );
+
+ @recipients = $m->comp(
+ '/Ticket/Elements/PreviewScrips:GetRecipients',
+ %$self, TicketObj => $TicketObj
+ );
+ }
+ elsif ( $Operation eq 'Create' ) {
+ @recipients = $m->comp(
+ '/Ticket/Elements/PreviewScrips:GetRecipientsOnCreate',
+ %$self,
+ );
+ }
+ else {
+ $RT::Logger->crit('Incorrect operation: '. $Operation );
+ }
+
+ my %seen;
+ @recipients = grep !$seen{ lc $_ }++, @recipients;
+
+ RT::Crypt::GnuPG::UseKeyForEncryption(
+ map { (/^UseKey-(.*)$/)[0] => $self->{ $_ } }
+ grep $self->{ $_ } && /^UseKey-/,
+ keys %$self
+ );
+
+ my ($status, @issues) = RT::Crypt::GnuPG::CheckRecipients( @recipients );
+ push @{ $self->{'GnuPGRecipientsKeyIssues'} ||= [] }, @issues;
+ $checks_failure = 1 unless $status;
+}
+
+return $checks_failure ? 0 : 1;
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Elements/GotoTicket b/rt/share/html/Elements/GotoTicket
new file mode 100755
index 0000000..517bee7
--- /dev/null
+++ b/rt/share/html/Elements/GotoTicket
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<form action="<% RT->Config->Get('WebPath') %>/Ticket/Display.html">
+<input type="submit" class="button" value="<&|/l&>Goto ticket</&>" />&nbsp;<input size="5" name="id" accesskey="0" />
+</form>
diff --git a/rt/share/html/Elements/Header b/rt/share/html/Elements/Header
new file mode 100755
index 0000000..953efcb
--- /dev/null
+++ b/rt/share/html/Elements/Header
@@ -0,0 +1,118 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
+<title><%$Title%></title>
+
+
+% if ($Refresh && $Refresh =~ /^(\d+)/ && $1 > 0) {
+ <meta http-equiv="refresh" content="<% $Refresh %>" />
+% }
+
+<link rel="shortcut icon" href="<%RT->Config->Get('WebImagesURL')%>/favicon.png" type="image/png" />
+<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/<% RT->Config->Get( 'WebDefaultStylesheet', $session{'CurrentUser'} ) %>/main<% RT->Config->Get('DevelMode')? '' : '-squished' %>.css" type="text/css" media="all" />
+<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/print.css" type="text/css" media="print" />
+
+% for (keys %{$LinkRel || {}}) {
+ <link rel="<% $_ %>" href="<% RT->Config->Get('WebPath') . $LinkRel->{$_} %>" />
+% }
+
+% if ( $RSSAutoDiscovery ) {
+ <link rel="alternate" href="<%$RSSAutoDiscovery%>" type="application/rss+xml" title="RSS RT Search" />
+% }
+
+% if ($JavaScript) {
+<& HeaderJavascript, focus => $Focus, onload => $onload &>
+% }
+
+% my $stylesheet_plugin = "/NoAuth/css/". RT->Config->Get( 'WebDefaultStylesheet', $session{'CurrentUser'} )."/InHeader";
+% if ($m->comp_exists($stylesheet_plugin) ) {
+<& $stylesheet_plugin &>
+% }
+% $m->callback( %ARGS, CallbackName => 'Head' );
+
+</head>
+ <body<% $id && qq[ id="comp-$id"] |n %>>
+
+% if ($ShowBar) {
+<& /Elements/Logo, %ARGS &>
+
+<div id="quickbar">
+ <& /Elements/PersonalQuickbar, %ARGS &>
+% }
+
+<%INIT>
+$r->headers_out->{'Pragma'} = 'no-cache';
+$r->headers_out->{'Cache-control'} = 'no-cache';
+
+my $id = $m->request_comp->path;
+$id =~ s|^/||g;
+$id =~ s|/|-|g;
+$id =~ s|\.html$||g;
+$id =~ s|index$||g
+ if $id ne 'index';
+$id =~ s|-$||g;
+</%INIT>
+
+<%ARGS>
+#$Focus => 'focus'
+$Focus => ''
+$Title => 'RT'
+$Code => undef
+$Refresh => 0
+$Why => undef
+$ShowBar => 1
+$URL => undef
+$RSSAutoDiscovery => undef
+$onload => undef
+$LinkRel => undef
+$JavaScript => 1
+</%ARGS>
diff --git a/rt/share/html/Elements/HeaderJavascript b/rt/share/html/Elements/HeaderJavascript
new file mode 100644
index 0000000..6ee88a1
--- /dev/null
+++ b/rt/share/html/Elements/HeaderJavascript
@@ -0,0 +1,122 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$focus => undef
+$onload => undef
+</%args>
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/util.js"></script>
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/titlebox-state.js"></script>
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/ahah.js"></script>
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/prototype/prototype.js"></script>
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/scriptaculous/scriptaculous.js?load=effects,controls"></script>
+% if ( RT->Config->Get('MessageBoxRichText', $session{'CurrentUser'}) ) {
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/RichText/fckeditor.js"></script>
+% }
+<script type="text/javascript"><!--
+ doOnLoad(loadTitleBoxStates);
+% if ( $focus ) {
+ doOnLoad(function () { focusElementById('<% $focus %>') });
+% }
+
+% if ( $onload ) {
+ doOnLoad(<% $onload |n %>);
+% }
+
+% if ( RT->Config->Get('MessageBoxRichText', $session{'CurrentUser'})) {
+ function ReplaceAllTextareas() {
+ var sAgent = navigator.userAgent.toLowerCase();
+ if (!FCKeditor_IsCompatibleBrowser() ||
+ sAgent.indexOf('iphone') != -1 ||
+ sAgent.indexOf('android') != -1 )
+ return false;
+
+ // replace all content and signature message boxes
+ var allTextAreas = document.getElementsByTagName("textarea");
+
+ for (var i=0; i < allTextAreas.length; i++) {
+ var textArea = allTextAreas[i];
+ if ( (textArea.getAttribute('class') == 'messagebox')
+ || (textArea.getAttribute('className') == 'messagebox')) {
+ // Turn the original plain text content into HTML
+
+%# Special case - when we re-edit a textarea, don't re-encode it
+% if (!$m->request_args->{'FCKeditorEncoded'}) {
+ textArea.value = textArea.value.replace(
+ /&/g, "&amp;"
+ ).replace(
+ /</g, "&lt;"
+ ).replace(
+ />/g, "&gt;"
+ ).replace(
+ /\n/g, "\n<br />"
+ );
+% }
+
+%# for this template..
+ var FCKeditorEncoded = document.createElement('input');
+ FCKeditorEncoded.setAttribute('type', 'hidden');
+ FCKeditorEncoded.setAttribute('name', 'FCKeditorEncoded');
+ FCKeditorEncoded.setAttribute('value', '1');
+ textArea.parentNode.appendChild(FCKeditorEncoded);
+
+%# for FCKeditor..
+ var typeField = document.createElement('input');
+ typeField.setAttribute('type', 'hidden');
+ typeField.setAttribute('name', textArea.name + 'Type');
+ typeField.setAttribute('value', 'text/html');
+ textArea.parentNode.appendChild(typeField);
+
+ var oFCKeditor = new FCKeditor( textArea.name, '100%', <% RT->Config->Get('MessageBoxRichTextHeight') %> );
+ oFCKeditor.BasePath = "<%RT->Config->Get('WebPath')%>/NoAuth/RichText/";
+ oFCKeditor.ReplaceTextarea();
+ }
+ }
+ }
+ doOnLoad(ReplaceAllTextareas);
+% }
+--></script>
diff --git a/rt/share/html/Elements/ListActions b/rt/share/html/Elements/ListActions
new file mode 100755
index 0000000..86773ae
--- /dev/null
+++ b/rt/share/html/Elements/ListActions
@@ -0,0 +1,94 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="results">
+<&| /Widgets/TitleBox, title => loc('Results') &>
+ <ul class="action-results">
+% foreach my $action (@actions) {
+ <li><%$action%></li>
+% }
+ </ul>
+</&>
+</div>
+<%init>
+
+# backward compatibility, don't use array in new code, but use keyed hash
+if ( ref( $session{'Actions'} ) eq 'ARRAY' ) {
+ unshift @actions, @{ delete $session{'Actions'} };
+}
+
+if ( ref( $session{'Actions'}{''} ) eq 'ARRAY' ) {
+ unshift @actions, @{ delete $session{'Actions'}{''} };
+}
+
+my $actions_pointer = $m->request_args->{'results'};
+
+if ($actions_pointer && ref( $session{'Actions'}->{$actions_pointer} ) eq 'ARRAY' ) {
+ unshift @actions, @{ delete $session{'Actions'}->{$actions_pointer} };
+}
+
+# XXX: run callbacks per row really crazy idea
+@actions =
+ grep $_,
+ grep {
+ my $skip;
+ $m->callback(
+ %ARGS,
+ row => \$_,
+ skip => \$skip,
+ CallbackName => 'ModifyRow',
+ );
+ !$skip;
+ }
+ grep $_, @actions;
+
+return unless @actions;
+
+</%init>
+<%ARGS>
+@actions => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/ListMenu b/rt/share/html/Elements/ListMenu
new file mode 100644
index 0000000..63d4a1e
--- /dev/null
+++ b/rt/share/html/Elements/ListMenu
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$items
+</%args>
+<ul class="list-menu">
+% foreach my $key (sort keys %$items) {
+<li><span class="menu-item"><a href="<%RT->Config->Get('WebPath')%><%$items->{$key}->{'path'}|n %>"><%$items->{$key}->{'title'}%></a></span><br />
+<span class="description"><%$items->{$key}->{description} || $items->{$key}->{text} %></span>
+
+</li>
+%}
+</ul>
diff --git a/rt/share/html/Elements/Login b/rt/share/html/Elements/Login
new file mode 100755
index 0000000..8dfbe51
--- /dev/null
+++ b/rt/share/html/Elements/Login
@@ -0,0 +1,139 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+if ($m->request_comp->path =~ '^/REST/\d+\.\d+/') {
+ $r->content_type("text/plain");
+ $m->error_format("text");
+ $m->out("RT/$RT::VERSION 401 Credentials required\n");
+ $m->out("\n$Error\n") if $Error;
+ $m->abort;
+}
+
+my $req_uri;
+
+if (UNIVERSAL::can($r, 'uri') and $r->uri =~ m{.*/(.*)}) {
+ $req_uri = $1;
+}
+
+my $form_action = defined $goto ? $goto
+ : defined $req_uri ? $req_uri
+ : RT->Config->Get('WebPath')
+ ;
+</%INIT>
+
+% $m->callback( %ARGS, CallbackName => 'Header' );
+<& /Elements/Header, Title => loc('Login'), Focus => 'user' &>
+
+
+%# End of div#quickbar from /Elements/Header
+</div>
+
+<div id="body" class="login-body">
+% if ($Error) {
+<&| "/Widgets/TitleBox", title => loc('Error'), hideable => 0, class => 'error' &>
+<% $Error %>
+</&>
+% }
+
+% $m->callback( %ARGS, CallbackName => 'BeforeForm' );
+
+<div id="login-box">
+<&| /Widgets/TitleBox, title => loc('Login'), titleright => $RT::VERSION, hideable => 0 &>
+
+% unless (RT->Config->Get('WebExternalAuth') and !RT->Config->Get('WebFallbackToInternalAuth')) {
+<form id="login" name="login" method="post" action="<% $form_action %>">
+
+<div class="input-row">
+ <span class="label"><&|/l&>Username</&>:</span>
+ <span class="input"><input name="user" value="<%$user%>" id="user" /></span>
+</div>
+
+<div class="input-row">
+ <span class="label"><&|/l&>Password</&>:</span>
+ <span class="input"><input type="password" name="pass" autocomplete="off" /></span>
+</div>
+
+<div class="button-row">
+ <span class="input"><input type="submit" class="button" value="<&|/l&>Login</&>" /></span>
+</div>
+
+%# Give callbacks a chance to add more control elements
+% $m->callback( %ARGS );
+
+% # From mason 1.0.1 forward, this doesn't work. in fact, it breaks things.
+% # But on Mason 1.15 it's fixed again, so we still use it.
+% # The code below iterates through everything in the passed in arguments
+% # Preserving all the old parameters
+% # This would be easier, except mason is 'smart' and calls multiple values
+% # arrays rather than multiple hash keys
+% my $key; my $val;
+% foreach $key (keys %ARGS) {
+% if (($key ne 'user') and ($key ne 'pass')) {
+% if (ref($ARGS{$key}) =~ /ARRAY/) {
+% foreach $val (@{$ARGS{$key}}) {
+<input type="hidden" class="hidden" name="<%$key %>" value="<% $val %>" />
+% }
+% }
+% else {
+<input type="hidden" class="hidden" name="<% $key %>" value="<% $ARGS{$key} %>" />
+% }
+% }
+% }
+</form>
+% }
+</&>
+</div><!-- #login-box -->
+% $m->callback( %ARGS, CallbackName => 'AfterForm' );
+</div><!-- #login-body -->
+<& /Elements/Footer, Menu => 0 &>
+<%ARGS>
+$user => ""
+$pass => undef
+$goto => undef
+$Error => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/Logo b/rt/share/html/Elements/Logo
new file mode 100644
index 0000000..359738b
--- /dev/null
+++ b/rt/share/html/Elements/Logo
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div id="logo">
+<a href="http://bestpractical.com"><img
+ src="<%$ARGS{'LogoURL'}||RT->Config->Get('LogoURL')%>"
+ alt="<% loc("Best Practical Solutions, LLC corporate logo") %>"
+ width="177" height="33" /></a>
+% if ( $ShowName ) {
+ <span class="rtname"><% $Name || loc("RT for [_1]", RT->Config->Get('rtname')) %></span>
+% }
+</div>
+<%INIT>
+if ( exists $ARGS{'show_name'} ) {
+ $RT::Logger->warning('show_name argument was renamed, use ShowName');
+ $ShowName = delete $ARGS{'show_name'};
+}
+</%INIT>
+<%ARGS>
+$ShowName => 1
+$Name => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/Logout b/rt/share/html/Elements/Logout
new file mode 100644
index 0000000..34ed1a3
--- /dev/null
+++ b/rt/share/html/Elements/Logout
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+ | <a href="<% RT->Config->Get('WebPath') %>/NoAuth/Logout.html<% $URL ? "?URL=". $URL : '' %>"><&|/l&>Logout</&></a>
+<%ARGS>
+$URL => undef
+</%ARGS>
+<%INIT>
+my $show = 0;
+if ( $session{'CurrentUser'}->Name
+ && ( !RT->Config->Get('WebExternalAuth')
+ || RT->Config->Get('WebFallbackToInternalAuth')
+ )
+) {
+ $show = 1;
+}
+
+$m->callback( %ARGS, URL => \$URL, show => \$show );
+
+return unless $show;
+</%INIT>
diff --git a/rt/share/html/Elements/MakeClicky b/rt/share/html/Elements/MakeClicky
new file mode 100644
index 0000000..f0aaf06
--- /dev/null
+++ b/rt/share/html/Elements/MakeClicky
@@ -0,0 +1,207 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ONCE>
+use Regexp::Common qw(URI);
+
+my %actions = (
+ default => sub {
+ my %args = @_;
+ return $args{value};
+ },
+ url => sub {
+ my %args = @_;
+ my $result = qq{[<a target="new" href="$args{value}">}. loc('Open URL') .qq{</a>]};
+ return $args{value} . qq{ <span class="clickylink">$result</span>};
+ },
+ url_overwrite => sub {
+ my %args = @_;
+ my $result = qq{<a target="new" href="$args{'value'}">};
+ #XXX: use spaces here. &shy; <wbr> are not well supported :(
+ $args{'value'} =~ s/(\S{30})/$1 /g;
+ $result .= qq{$args{'value'}</a>};
+ return qq{<span class="clickylink">$result</span>};
+ },
+);
+
+my @types = (
+ {
+ name => "httpurl",
+ regex => qr/$RE{URI}{HTTP}{-keep}{-scheme => 'https?'}/,
+ action => "url",
+ },
+ {
+ name => "httpurl_overwrite",
+ regex => qr/$RE{URI}{HTTP}{-keep}{-scheme => 'https?'}/,
+ action => "url_overwrite",
+ },
+);
+
+my $handle = sub {
+ my %args = @_;
+ for my $rec( @types ) {
+ return $rec->{action}->(
+ %args,
+ all_matches => [ $args{value}, $1, $2, $3, $4, $5, $6, $7, $8, $9 ],
+ ) if $args{value} =~ $rec->{regex};
+ }
+};
+
+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
+$m->callback(
+ CallbackPage => "/Elements/MakeClicky",
+ types => \@types,
+ actions => \%actions,
+ handle => \$handle,
+);
+
+
+# Filter
+my %active;
+$active{$_}++ for RT->Config->Get('Active_MakeClicky');
+@types = grep $active{$_->{name}}, @types;
+
+# Build up the whole match
+my $regexp = join "|", map $_->{regex}, @types;
+
+# Make sure we have a default
+$actions{default} ||= sub {};
+
+# Anchor the regexes and look up the actions
+foreach my $type ( @types ) {
+ $type->{regex} = qr/^$type->{regex}$/;
+ $type->{action} = $actions{$type->{action}} || $actions{default};
+}
+
+</%ONCE>
+<%ARGS>
+$content => undef
+$html => undef
+</%ARGS>
+<%INIT>
+return unless defined $$content;
+unless ( $regexp ) {
+ RT::Interface::Web::EscapeUTF8( $content ) unless $html;
+ return;
+}
+
+my $pos = 0;
+while ( $$content =~ /($regexp)/gsio ) {
+ my $match = $1;
+ next if $` =~ /href=(?:&quot;|")$/;
+ my $skipped_len = pos($$content) - $pos - length($match);
+ if ( $skipped_len > 0 ) {
+ my $plain;
+ if ( $html ) {
+ $plain = substr( $$content, $pos, $skipped_len );
+ }
+ else {
+ $plain = $escaper->( substr( $$content, $pos, $skipped_len ) )
+ }
+ substr( $$content, $pos, $skipped_len ) = $plain;
+ $pos += length($plain);
+ }
+ my $plain = $handle->(
+ %ARGS,
+ value => $match,
+ all_matches => [ $1, $2, $3, $4, $5, $6, $7, $8, $9 ],
+ );
+ substr( $$content, $pos, length($match) ) = $plain;
+ pos($$content) = ( $pos += length($plain) );
+
+}
+substr( $$content, $pos ) = $escaper->( substr( $$content, $pos ) ) unless
+($pos == length $$content) || $html;
+
+pos($$content) = 0;
+
+</%INIT>
+<%doc>
+
+MakeClicky detects various formats of data in headers and email
+messages, and extends them with supporting links. By default, RT
+provides two formats:
+
+ * 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
+ link after the URL.
+
+ * 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
+ replace URL with link and *adds spaces* into text if it's longer
+ then 30 chars. This allow browser to wrap long URLs and avoid
+ horizontal scrolling.
+
+To extend this with your own types of data, use the callback.
+It will be provided with:
+
+ * 'types': An array reference of hash references. Modify this array
+ reference to add your own types; the first matching type will be
+ used. Each hashref should contain:
+ - 'name': The name of the data format; this is used in the
+ configuration file to enable the format.
+ - 'regex': A regular expression to match against
+ - 'action': The name of the action to run (see "actions", below)
+
+ * 'actions': A hash reference of 'actions'. Modify this hash
+ reference to change or add action types. Values are subroutine
+ references which will get called when needed. They should return
+ the modified string. Note that subroutine must escape HTML.
+
+ * 'handler': A reference to a subroutine reference; modify it if you
+ have to. This can be used to add pre- or post-processing around
+ all actions.
+
+Read more about writing new actions in docs/extending_clickable_links.pod
+
+</%doc>
diff --git a/rt/share/html/Elements/Menu b/rt/share/html/Elements/Menu
new file mode 100755
index 0000000..83644da
--- /dev/null
+++ b/rt/share/html/Elements/Menu
@@ -0,0 +1,139 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<ul<% !$level ? ' id="system-menu"' : ''|n %><% $menu_class ? qq[ class="$menu_class"] : ''|n %>>
+<div<% $menu_class ? qq[ class="$menu_class"] : ''|n %>><div class="wrapper">
+<%perl>
+ my $sep = 0;
+ my $postsep = 0;
+ my $accesskey = 1;
+
+ $count = 0;
+ $class = {};
+
+my @tabs = sort keys %$toptabs;
+ foreach $tab (@tabs) {
+ $count++;
+
+ my $current = $current_toptab || '';
+ my $path = $toptabs->{$tab}->{'path'} || "";
+
+ $path =~ s#/index.html$##gi;
+ $current =~ s#/index.html$##gi;
+
+ $sep = $toptabs->{$tab}->{'separator'} ? 1 : 0;
+
+ my @aclass;
+ push @aclass, 'selected'
+ if $path eq $current;
+
+ push @aclass, 'odd'
+ if $level % 2;
+
+ $class->{a} = join ' ', @aclass;
+
+ my @li;
+ push @li, 'first'
+ if $count == 1;
+
+ push @li, 'pre-separator'
+ if $sep;
+
+ push @li, 'post-separator'
+ if $postsep;
+
+ push @li, 'last' if ( $tab eq $tabs[-1]);
+ $class->{li} = join ' ', @li;
+
+ my $url = ($toptabs->{$tab}->{'path'}||'') =~ /^(?:https?|mailto):/i
+ ? $toptabs->{$tab}->{'path'} || ''
+ : RT->Config->Get('WebPath') . "/" . $toptabs->{$tab}->{'path'};
+
+</%perl>
+ <li<% $class->{'li'} ? qq[ class="$class->{li}"] : ''|n %> >
+ <% $count > 1 && !$postsep && qq[<span class="bullet">&#183; </span>]|n%>
+ <a href="<% $url %>"
+ <% $class->{a} && qq[ class="$class->{a}"] |n %>
+ <% !$level && " accesskey='".$accesskey++."'" |n %>>
+ <% $toptabs->{$tab}->{'title'}%></a>
+
+%# Second-level items
+% if ($toptabs->{$tab}->{'subtabs'}
+% and keys %{$toptabs->{$tab}->{'subtabs'}})
+% {
+ <& /Elements/Menu, level => $level+1,
+ current_toptab => $toptabs->{$tab}->{'current_subtab'},
+ toptabs => $toptabs->{$tab}->{'subtabs'},
+ last_level => $toptabs->{$tab}->{last_system_menu_level} &>
+% }
+ </li>
+% if ($sep) {
+ <li class="separator">&#183;&#183;&#183;</li>
+% }
+%
+% $postsep = $sep;
+% }
+</div></div>
+</ul>
+
+<%INIT>
+my ($tab, $class, $count);
+
+my @ul;
+push @ul, 'last-menu-level'
+ if $last_level;
+push @ul, 'odd'
+ if $level % 2;
+my $menu_class = join ' ', @ul;
+</%INIT>
+
+<%ARGS>
+$toptabs => {}
+$current_toptab => ''
+$level => 0
+$last_level => 0
+</%ARGS>
diff --git a/rt/share/html/Elements/MessageBox b/rt/share/html/Elements/MessageBox
new file mode 100755
index 0000000..4985b23
--- /dev/null
+++ b/rt/share/html/Elements/MessageBox
@@ -0,0 +1,82 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<textarea class="messagebox" cols="<% $Width %>" rows="<% $Height %>" <% $wrap_type |n %> name="<% $Name %>" id="<% $Name %>">\
+% $m->callback( %ARGS );
+<% $Default || '' %><% $message %><% $signature %></textarea>
+% $m->callback( %ARGS, CallbackName => 'AfterTextArea' );
+<%INIT>
+
+my $message = '';
+
+if ( $QuoteTransaction ) {
+ my $transaction = RT::Transaction->new( $session{'CurrentUser'} );
+ $transaction->Load( $QuoteTransaction );
+ $message = $transaction->Content( Quote => 1 );
+}
+
+my $signature = '';
+if ( $IncludeSignature and my $text = $session{'CurrentUser'}->UserObj->Signature ) {
+ $signature = "-- \n". $text;
+}
+
+# wrap="something" seems to really break IE + richtext
+my $wrap_type = '';
+if ( not RT->Config->Get('MessageBoxRichText', $session{'CurrentUser'}) ) {
+ $wrap_type = qq(wrap="$Wrap");
+}
+
+</%INIT>
+<%ARGS>
+$QuoteTransaction => undef
+$Name => 'Content'
+$Default => ''
+$Width => RT->Config->Get('MessageBoxWidth', $session{'CurrentUser'} ) || 72
+$Height => RT->Config->Get('MessageBoxHeight', $session{'CurrentUser'} ) || 15
+$Wrap => RT->Config->Get('MessageBoxWrap') || 'HARD'
+$IncludeSignature => RT->Config->Get('MessageBoxIncludeSignature');
+</%ARGS>
diff --git a/rt/share/html/Elements/MyAdminQueues b/rt/share/html/Elements/MyAdminQueues
new file mode 100644
index 0000000..e7d2b2a
--- /dev/null
+++ b/rt/share/html/Elements/MyAdminQueues
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|/Widgets/TitleBox, title => loc("Queues I administer"), bodyclass => "" &>
+<& /Elements/QueueSummary,
+ cache => 'my_admin_queues',
+ queue_filter => sub { $_->CurrentUserHasRight('AdminQueue') },
+ conditions => [ {cond => "Status = 'new'", name => loc ('new') },
+ {cond => "Status = 'open'", name => loc ('open') }] &>
+</&>
diff --git a/rt/share/html/Elements/MyRT b/rt/share/html/Elements/MyRT
new file mode 100644
index 0000000..7b719fd
--- /dev/null
+++ b/rt/share/html/Elements/MyRT
@@ -0,0 +1,106 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback( ARGSRef => \%ARGS, CallbackName => 'BeforeTable' );
+<table class="myrt">
+<tr valign="top">
+
+<td class="boxcontainer">
+% $show_cb->($_) foreach @$body;
+</td>
+
+% if ( $summary ) {
+<td class="boxcontainer">
+% $show_cb->($_) foreach @$summary;
+</td>
+% }
+
+</tr></table>
+% $m->callback( ARGSRef => \%ARGS, CallbackName => 'AfterTable' );
+<%INIT>
+
+# XXX: we don't use this, but should.
+my %allowed_components = map {$_ => 1} @{RT->Config->Get('HomepageComponents')};
+
+my $user = $session{'CurrentUser'}->UserObj;
+$Portlets ||= $session{'my_rt_portlets'};
+unless ( $Portlets ) {
+ my ($default_portlets) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings');
+ $Portlets = $session{'my_rt_portlets'} = $user->Preferences(
+ HomepageSettings => $default_portlets? $default_portlets->Content: {},
+ );
+}
+
+my ($body, $summary) = @{$Portlets}{qw(body summary)};
+unless( $body && @$body ) {
+ $body = $summary || [];
+ $summary = undef;
+}
+$summary = undef unless $summary && @$summary;
+
+my $Rows = $user->Preferences( 'SummaryRows', ( RT->Config->Get('DefaultSummaryRows') || 10 ) );
+
+my $show_cb = sub {
+ my $entry = shift;
+ my $type = $entry->{type};
+ my $name = $entry->{'name'};
+ if ( $type eq 'component' ) {
+ # XXX: security check etc.
+ $m->comp( $name, %{ $entry->{arguments} || {} } );
+ } elsif ( $type eq 'system' ) {
+ $m->comp( '/Elements/ShowSearch', Name => $name, Override => { Rows => $Rows } );
+ } elsif ( $type eq 'saved' ) {
+ $m->comp( '/Elements/ShowSearch', SavedSearch => $name, Override => { Rows => $Rows }, IgnoreMissing => 1 );
+ } else {
+ $RT::Logger->error("unknown portlet type '$type'");
+ }
+};
+
+</%INIT>
+<%ARGS>
+$Portlets => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/MyReminders b/rt/share/html/Elements/MyReminders
new file mode 100755
index 0000000..25fdf5d
--- /dev/null
+++ b/rt/share/html/Elements/MyReminders
@@ -0,0 +1,74 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# DEPRECATED
+<&|/Widgets/TitleBox,
+ title => loc("Reminders") &>
+<table width="100%">
+% my $i =0;
+% while (my $reminder = $reminders->Next) {
+% $i++;
+% if ($reminder->RefersTo->First) {
+% my $ticket= $reminder->RefersTo->First->TargetObj;
+<tr class="<%$i%2 ? 'evenline' : 'oddline'%>"><td><a href="<%RT->Config->Get('WebPath')%>/Ticket/Display.html?id=<%$ticket->id%>"><%$reminder->Subject%></a><br />
+<blockquote>
+#<%$ticket->id%>: <%$ticket->Subject%><br />
+<%$reminder->OwnerObj->Name %> <%$reminder->DueObj->Unix >0 ? '&bull; '.$reminder->DueObj->AgeAsString : '' |n %>
+</blockquote>
+</td>
+</tr>
+% }}
+</table>
+</&>
+
+<%init>
+return unless RT->Config->Get('EnableReminders');
+my $reminders = RT::Tickets->new($session{'CurrentUser'});
+$reminders->FromSQL('(Owner = "Nobody" OR Owner = "'.$session{'CurrentUser'}->Name.'")' .
+ ' AND Type = "reminder" AND (Status = "new" OR Status = "open")');
+$reminders->OrderBy(FIELD => 'Due', ORDER => 'ASC');
+</%init>
diff --git a/rt/share/html/Elements/MyRequests b/rt/share/html/Elements/MyRequests
new file mode 100755
index 0000000..c08560d
--- /dev/null
+++ b/rt/share/html/Elements/MyRequests
@@ -0,0 +1,49 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# DEPRECATED
+<& /Elements/ShowSearch, Name => 'My Requests' &>
diff --git a/rt/share/html/Elements/MySupportQueues b/rt/share/html/Elements/MySupportQueues
new file mode 100644
index 0000000..e59c623
--- /dev/null
+++ b/rt/share/html/Elements/MySupportQueues
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|/Widgets/TitleBox, title => loc("Queues I'm an AdminCc for"), bodyclass => "" &>
+<& /Elements/QueueSummary,
+ cache => 'my_support_queues',
+ queue_filter => sub { $_->IsAdminCc($session{'CurrentUser'}->Id) },
+ conditions => \@conditions,
+&>
+</&>
+<%INIT>
+my @conditions = ();
+foreach ( RT::Queue->ActiveStatusArray ) {
+ push @conditions, { cond => "Status = '$_'", name => loc($_) };
+}
+</%INIT>
diff --git a/rt/share/html/Elements/MyTickets b/rt/share/html/Elements/MyTickets
new file mode 100755
index 0000000..354a964
--- /dev/null
+++ b/rt/share/html/Elements/MyTickets
@@ -0,0 +1,49 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# DEPRECATED
+<& /Elements/ShowSearch, Name => 'My Tickets' &>
diff --git a/rt/share/html/Elements/PageLayout b/rt/share/html/Elements/PageLayout
new file mode 100755
index 0000000..981e58a
--- /dev/null
+++ b/rt/share/html/Elements/PageLayout
@@ -0,0 +1,251 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div id="topactions">
+% foreach my $action (reverse sort keys %{$topactions}) {
+<span class="topaction" id="topaction-<%$action%>"><% $topactions->{"$action"}->{'html'} |n %></span>
+% }
+</div>
+
+%# End of div#quickbar from /Elements/Header
+</div>
+
+% if ( $show_menu ) {
+<div id="nav">
+<& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &>
+</div>
+% }
+
+<div id="header">
+<h1><% $title %></h1>
+<div id="page-navigation">
+% my $sep = 0;
+% my $postsep = 0;
+% my $count = 0;
+% my $class = { };
+%
+ <ul id="page-menu" <% (($actions && %$actions) || ($subactions && %$subactions)) && q[ class="actions-present"] | n %>>
+ <div><div><div>
+<%perl>
+ if ($page_tabs) {
+ my @tabs = ( sort grep { $_ !~ /^(?:current_toptab|this)$/ } keys %{$page_tabs});
+ my $tab_idx = -1;
+ foreach my $tab ( @tabs ) {
+ $count++;
+ $tab_idx++;
+
+ my $current = $page_tabs->{current_toptab} || "";
+ my $path = $page_tabs->{$tab}->{'path'} || "";
+
+ $path =~ s#(/index\.html)?(\?)?$##gi;
+ $current =~ s#(/index\.html)?(\?)?$##gi;
+
+ $sep = $toptabs->{$tab}->{'separator'} ? 1 : 0;
+
+ my $next_tab = $tabs[$tab_idx+1];
+ if ($next_tab && $toptabs->{$next_tab}->{'pre_separator'}) {
+ $sep = 1;
+ }
+
+ $class->{a} = $path eq $current ? ' class="selected"' : undef;
+
+ my @li;
+ push @li, 'first' if $count == 1;
+ push @li, 'pre-separator' if $sep;
+ push @li, 'post-separator' if $postsep;
+ push @li, 'last' if $tab eq $tabs[-1];
+ $class->{li} = join ' ', @li;
+
+ my $href = $page_tabs->{$tab}->{'path'} || "";
+ $href = RT->Config->Get('WebPath') .'/'. $href
+ unless $path =~ /^\w+:/;
+ my $target = $page_tabs->{$tab}->{'target'} || '';
+ $target = $m->interp->apply_escapes( $target, 'h' );
+</%perl>
+ <li<% $class->{li} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && "&#183; "|n%><a href="<% $href %>"<%$class->{a}|n%><% $class->{a} ? ' name="focus"' : ''|n %><% $target? " target='$target'": '' |n %>><% $page_tabs->{$tab}->{'title'} %></a></li>
+%
+% if ($sep) {
+ <li class="separator">&#183;&#183;&#183;</li>
+% }
+% $postsep = $sep;
+% }
+% } else {
+&nbsp;
+% }
+ </div></div></div>
+ </ul>
+
+% if (($actions && %$actions) || ($subactions && %$subactions)) {
+ <ul id="actions-menu">
+ <div><div><div>
+<%perl>
+ $sep = 0;
+ $postsep = 0;
+ $count = 0;
+ $class = { };
+
+ for my $type ($actions, $subactions) {
+
+ if ($type && %$type) {
+ my @actions = sort keys %{$type};
+ my $action_idx = -1;
+ foreach my $action (@actions) {
+ $count++;
+ $action_idx++;
+
+ $sep = $type->{$action}->{'separator'} ? 1 : 0;
+
+ my $next_action = $actions[$action_idx+1];
+ if ($next_action && $type->{$next_action}->{'pre_separator'}) {
+ $sep = 1;
+ }
+
+ my @li;
+ push @li, 'first' if $count == 1;
+ push @li, 'pre-separator' if $sep;
+ push @li, 'post-separator' if $postsep;
+ push @li, 'last' if $action eq $actions[-1];
+
+ $class->{li} = join ' ', @li;
+</%perl>
+ <li<% $class->{li} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && qq[<span class="bullet">&#183; </span>]|n%>
+% if ($type->{"$action"}->{'html'}) {
+ <% $type->{"$action"}->{'html'} | n %>
+% } else {
+ <a href="<%RT->Config->Get('WebPath')%>/<%$type->{$action}->{'path'}%>"<% $type->{$action}->{class} && ' class="'.$type->{$action}->{class}.'"' |n %><% $type->{$action}->{id} && ' id="'.$type->{$action}->{id}.'"' |n %>><%$type->{$action}->{'title'}%></a>
+% }
+ </li>
+% if ($sep) {
+ <li class="separator">&#183;&#183;&#183;</li>
+% }
+% $postsep = $sep;
+% }
+% }
+% }
+ </div></div></div>
+ </ul>
+% }
+</div>
+</div>
+<div id="body">
+% $m->callback( %ARGS, CallbackName => 'BeforeBody' );
+% $m->flush_buffer(); # we've got the page laid out, let's flush the buffer;
+
+<%INIT>
+if ( defined $current_toptab ) {
+ foreach my $tab ( values %{$toptabs} ) {
+ next unless $tab->{'path'} eq $current_toptab;
+ @{ $tab }{ qw(subtabs current_subtab) } = ($tabs, $current_tab);
+ }
+}
+
+my ($menu_depth, $almost_last, $page_tabs);
+
+if (RT->Config->Get( 'WebDefaultStylesheet', $session{'CurrentUser'} ) ne '3.4-compat') {
+ ($menu_depth, $almost_last) = @{ $m->comp('.menu_recurse', data => $toptabs, current => $current_toptab ) };
+
+ if (defined $almost_last->{subtabs} and %{$almost_last->{subtabs}}) {
+ $page_tabs = {
+ current_toptab => $almost_last->{current_subtab},
+ %{$almost_last->{subtabs}},
+ };
+
+ delete $almost_last->{subtabs};
+ delete $almost_last->{current_subtab};
+ }
+}
+</%INIT>
+
+%# There's probably a better way to do this that involves three times as
+%# much work and redoing the whole menu/tab system... which would seem a
+%# bit out of scope.
+%#
+%# This function recurses through the menu and returns the second to
+%# last menu, that is, the menu holding the last reference to
+%# and submenu. It also returns the number of menu levels minus
+%# the last submenu.
+<%def .menu_recurse>
+ <%args>
+ $data => { }
+ $current => ''
+ $pdata => { }
+ $ppdata => { }
+ $level => 0
+ </%args>
+ <%init>
+ if ($current) {
+ for my $key (keys %$data) {
+ next if !defined $data->{$key}->{'path'}
+ || $data->{$key}->{'path'} ne $current;
+ next unless ref( $data->{$key} ) eq 'HASH'
+ && ref( $data->{$key}->{'subtabs'} ) eq 'HASH'
+ && keys %{ $data->{$key}->{'subtabs'} };
+ return $m->comp('.menu_recurse',
+ data => $data->{$key}->{'subtabs'},
+ current => $data->{$key}->{'current_subtab'} || '',
+ pdata => $data->{$key},
+ ppdata => $pdata,
+ level => $level + 1,
+ );
+ }
+ }
+ $ppdata->{last_system_menu_level}++;
+ return [$level, $pdata];
+ </%init>
+</%def>
+
+<%ARGS>
+$current_toptab => undef
+$current_tab => undef
+$toptabs => undef
+$topactions => undef
+$tabs => undef
+$actions => undef
+$subactions => undef
+$title => $m->callers(-1)->path
+$show_menu => 1
+</%ARGS>
diff --git a/rt/share/html/Elements/PersonalQuickbar b/rt/share/html/Elements/PersonalQuickbar
new file mode 100644
index 0000000..5d6497c
--- /dev/null
+++ b/rt/share/html/Elements/PersonalQuickbar
@@ -0,0 +1,16 @@
+<%ARGS>
+$Prefs => '/Prefs/Other.html'
+</%ARGS>
+<div id="quick-personal">
+ <span class="hide"><a href="#skipnav"><&|/l&>Skip Menu</&></a> | </span>
+% if ($session{'CurrentUser'}->Name) {
+ <&|/l, "<span>".$session{'CurrentUser'}->Name."</span>" &>Logged in as [_1]</&>
+% if ( $session{'CurrentUser'}->HasRight( Right => 'ModifySelf', Object => $RT::System ) ) {
+ | <a href="<%RT->Config->Get('WebPath')%><%$Prefs%>"><&|/l&>Preferences</&></a>
+% }
+% } else {
+ <&|/l&>Not logged in.</&>
+% }
+% $m->callback( %ARGS );
+<& Logout, %ARGS &>
+</div>
diff --git a/rt/share/html/Elements/QueryString b/rt/share/html/Elements/QueryString
new file mode 100644
index 0000000..e55454c
--- /dev/null
+++ b/rt/share/html/Elements/QueryString
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+my @params;
+for my $key (sort keys %ARGS) {
+ my $value = $ARGS{$key};
+ next unless defined $value;
+ $key = $m->interp->apply_escapes( $key, 'u' );
+ if( UNIVERSAL::isa( $value, 'ARRAY' ) ) {
+ push @params,
+ map $key ."=". $m->interp->apply_escapes( $_, 'u' ),
+ @$value;
+ } else {
+ push @params, $key ."=". $m->interp->apply_escapes($value, 'u');
+ }
+}
+
+return join '&', sort(@params);
+</%INIT>
diff --git a/rt/share/html/Elements/QueueSummary b/rt/share/html/Elements/QueueSummary
new file mode 100644
index 0000000..bbfd65e
--- /dev/null
+++ b/rt/share/html/Elements/QueueSummary
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table border="0" cellspacing="0" cellpadding="1" width="100%" class="queue-summary">
+<tr>
+ <th class="collection-as-table"><&|/l&>Queue</&></th>
+% for my $condition (@$conditions) {
+ <th class="collection-as-table"><% $condition->{name} %></th>
+% }
+</tr>
+% my $i;
+% for my $queue (@queues) {
+% $i++;
+% my $name = $queue->{Name};
+% $name =~ s/'/\\'/g;
+% my $queue_cond = "Queue = '$name' AND ";
+% my $all_q = $queue_cond . "(".join( " OR ", map $_->{cond}, @$conditions).")";
+<tr class="<% $i%2 ? 'oddline' : 'evenline'%>" >
+<td><a href="<% RT->Config->Get('WebPath') %>/Search/Results.html?Query=<% $all_q |u,n %>" title="<% $queue->{Description} %>"><% $queue->{Name} %></a></td>
+% for my $condition (@$conditions) {
+% $Tickets->FromSQL( "Queue = $queue->{id} AND ". $condition->{cond} );
+<td align="right"><a href="<% RT->Config->Get('WebPath') %>/Search/Results.html?Query=<% $queue_cond.$condition->{cond} |u,n %>"><% $Tickets->Count %></a></td>
+% }
+</tr>
+% }
+</table>
+<%INIT>
+# Ensure sane default
+unless ( @$conditions ) {
+ foreach (RT::Queue->ActiveStatusArray()) {
+ push @$conditions, { cond => "Status = '$_'", name => loc($_) };
+ }
+}
+
+
+my @queues;
+
+if ($cache && exists $session{$cache}) {
+ @queues = @{$session{$cache}};
+}
+else {
+ my $Queues = RT::Queues->new($session{'CurrentUser'});
+ $Queues->UnLimit();
+ @queues = grep $queue_filter->($_), @{$Queues->ItemsArrayRef};
+
+ $m->callback( CallbackName => 'Filter', Queues => \@queues );
+
+ @queues = map { {
+ id => $_->Id,
+ Name => $_->Name,
+ Description => $_->Description,
+ } } grep $_, @queues;
+
+ $session{$cache} = \@queues if $cache;
+}
+
+
+my $Tickets = RT::Tickets->new($session{'CurrentUser'});
+</%INIT>
+<%ARGS>
+$cache => undef
+$queue_filter => undef
+$conditions => []
+</%ARGS>
diff --git a/rt/share/html/Elements/QuickCreate b/rt/share/html/Elements/QuickCreate
new file mode 100644
index 0000000..45e2e2f
--- /dev/null
+++ b/rt/share/html/Elements/QuickCreate
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="quick-create">
+<&| /Widgets/TitleBox, title => loc('Quick ticket creation') &>
+<form method="post" action="<%RT->Config->Get('WebPath')%>/index.html">
+<input type="hidden" class="hidden" name="QuickCreate" value="1" />
+<table>
+<tr class="input-row"><td class="label"><&|/l&>Subject</&>:</td>
+ <td colspan="3" class="value"><input type="text" size="50" name="Subject" /></td>
+ </tr><tr class="input-row">
+<td class="label"><&|/l&>Queue</&>:</td><td class="value"><& /Elements/SelectNewTicketQueue, Name => 'Queue' &>
+</td>
+<td class="label"><&|/l&>Owner</&>:</td><td class="value">
+<select type="select" name="Owner">
+<option value="<%$session{'CurrentUser'}->id%>" selected="selected"><%$session{'CurrentUser'}->Name %></option>
+<option value="<%$RT::Nobody->id%>"><%loc('Nobody')%></option>
+</select>
+</td>
+</tr>
+<tr class="input-row">
+ <td class="label"><&|/l&>Requestors</&>:</td>
+ <td colspan="3" class="value"><& /Elements/EmailInput, Name => 'Requestors', Size => '40', Default => $ARGS{Requestors} || $session{CurrentUser}->EmailAddress &></td>
+</tr>
+<tr class="input-row">
+<td class="labeltop"><&|/l&>Content</&>:</td>
+<td colspan="3" class="value"><textarea name="Content" cols="50" rows="3"></textarea></td></tr>
+</table>
+<& /Elements/Submit, Label => loc('Create') &>
+</form>
+</&>
+</div>
+
diff --git a/rt/share/html/Elements/Quicksearch b/rt/share/html/Elements/Quicksearch
new file mode 100755
index 0000000..402a2f2
--- /dev/null
+++ b/rt/share/html/Elements/Quicksearch
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="ticket-overview">
+<&|/Widgets/TitleBox, title => loc("Quick search"), bodyclass => "",
+ titleright => loc("Edit"), titleright_href => RT->Config->Get('WebPath').'/Prefs/Quicksearch.html' &>
+<& /Elements/QueueSummary,
+ cache => 'quick_search_queues',
+ queue_filter => sub { $_->CurrentUserHasRight('ShowTicket') && !exists $unwanted->{$_->Name} },
+ conditions => \@conditions,
+&>
+</&>
+</div>
+<%INIT>
+my $unwanted = $session{'CurrentUser'}->UserObj->Preferences('QuickSearch', {});
+
+my @conditions = ();
+foreach ( RT::Queue->ActiveStatusArray ) {
+ push @conditions, { cond => "Status = '$_'", name => loc($_) };
+}
+</%INIT>
diff --git a/rt/share/html/Elements/RT__Group/ColumnMap b/rt/share/html/Elements/RT__Group/ColumnMap
new file mode 100644
index 0000000..f7dd0f8
--- /dev/null
+++ b/rt/share/html/Elements/RT__Group/ColumnMap
@@ -0,0 +1,92 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+ HasMember => {
+ title => 'Member', # loc
+ value => sub {
+ my $group = $_[0];
+ my $uid = $_[2] || return '';
+ return $group->HasMember( $uid )? $_[0]->loc('yes'): $_[0]->loc('no');
+ },
+ },
+ HasMemberRecursively => {
+ title => 'Recursive member', # loc
+ value => sub {
+ my $group = $_[0];
+ my $uid = $_[2] || return '';
+ return $group->HasMemberRecursively( $uid )? $_[0]->loc('yes'): $_[0]->loc('no');
+ },
+ },
+ Name => {
+ title => 'Name', # loc
+ attribute => 'Name',
+ value => sub { return $_[0]->Name() },
+ },
+ Description => {
+ title => 'Description', # loc
+ attribute => 'Description',
+ value => sub { return $_[0]->Description() },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%INIT>
diff --git a/rt/share/html/Elements/RT__Queue/ColumnMap b/rt/share/html/Elements/RT__Queue/ColumnMap
new file mode 100644
index 0000000..5c56004
--- /dev/null
+++ b/rt/share/html/Elements/RT__Queue/ColumnMap
@@ -0,0 +1,115 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name => undef
+$Attr => undef
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+ Disabled => {
+ title => \'&nbsp;',
+ attribute => 'Disabled',
+ value => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') },
+ },
+ Priority => {
+ title => 'Priority', # loc
+ value => sub { return $_[0]->InitialPriority .'-'. $_[0]->FinalPriority },
+ },
+ Address => {
+ title => 'Address', # loc
+ value => sub { return ($_[0]->CorrespondAddress||'-') .'/'. ($_[0]->CommentAddress||'-') },
+ },
+ Name => {
+ title => 'Name', # loc
+ attribute => 'Name',
+ value => sub { return $_[0]->Name() },
+ },
+ Description => {
+ title => 'Description', # loc
+ attribute => 'Description',
+ value => sub { return $_[0]->Description() },
+ },
+ CorrespondAddress => {
+ title => 'CorrespondAddress', # loc
+ attribute => 'CorrespondAddress',
+ value => sub { return $_[0]->CorrespondAddress() },
+ },
+ CommentAddress => {
+ title => 'CommentAddress', # loc
+ attribute => 'CommentAddress',
+ value => sub { return $_[0]->CommentAddress() },
+ },
+ InitialPriority => {
+ title => 'InitialPriority', # loc
+ attribute => 'InitialPriority',
+ value => sub { return $_[0]->InitialPriority() },
+ },
+ FinalPriority => {
+ title => 'FinalPriority', # loc
+ attribute => 'FinalPriority',
+ value => sub { return $_[0]->FinalPriority() },
+ },
+ DefaultDueIn => {
+ title => 'DefaultDueIn', # loc
+ attribute => 'DefaultDueIn',
+ value => sub { return $_[0]->DefaultDueIn() },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%INIT>
+
diff --git a/rt/share/html/Elements/RT__Scrip/ColumnMap b/rt/share/html/Elements/RT__Scrip/ColumnMap
new file mode 100644
index 0000000..88b4c4b
--- /dev/null
+++ b/rt/share/html/Elements/RT__Scrip/ColumnMap
@@ -0,0 +1,103 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+ Queue => {
+ title => 'Queue', # loc
+ value => sub {
+ return $_[0]->QueueObj->Name if $_[0]->Queue;
+ return $_[0]->loc('Global');
+ },
+ },
+ Condition => {
+ title => 'Condition', # loc
+ value => sub { return $_[0]->loc( $_[0]->ScripConditionObj->Name ) },
+ },
+ Action => {
+ title => 'Action', # loc
+ value => sub { return $_[0]->loc( $_[0]->ScripActionObj->Name ) },
+ },
+ Template => {
+ title => 'Template', # loc
+ value => sub { return $_[0]->loc( $_[0]->TemplateObj->Name ) },
+ },
+ AutoDescription => {
+ title => 'Condition, Action and Template', # loc
+ value => sub { return $_[0]->loc( "[_1] [_2] with template [_3]",
+ $_[0]->loc($_[0]->ConditionObj->Name),
+ $_[0]->loc($_[0]->ActionObj->Name),
+ $_[0]->loc($_[0]->TemplateObj->Name),
+ ) },
+ },
+ Description => {
+ title => 'Description', # loc
+ attribute => 'Description',
+ value => sub { return $_[0]->Description() },
+ },
+ Stage => {
+ title => 'Stage', # loc
+ attribute => 'Stage',
+ value => sub { return $_[0]->Stage() },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%INIT>
diff --git a/rt/share/html/Elements/RT__Template/ColumnMap b/rt/share/html/Elements/RT__Template/ColumnMap
new file mode 100644
index 0000000..851cc9d
--- /dev/null
+++ b/rt/share/html/Elements/RT__Template/ColumnMap
@@ -0,0 +1,76 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+ Name => {
+ title => 'Name', # loc
+ attribute => 'Name',
+ value => sub { return $_[0]->Name() },
+ },
+ Description => {
+ title => 'Description', # loc
+ attribute => 'Description',
+ value => sub { return $_[0]->Description() },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%INIT>
diff --git a/rt/share/html/Elements/RT__Ticket/ColumnMap b/rt/share/html/Elements/RT__Ticket/ColumnMap
new file mode 100644
index 0000000..7df4710
--- /dev/null
+++ b/rt/share/html/Elements/RT__Ticket/ColumnMap
@@ -0,0 +1,355 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name => undef
+$Attr => undef
+</%ARGS>
+
+
+<%ONCE>
+my $COLUMN_MAP;
+
+my $LinkCallback = sub {
+ my $method = shift;
+
+ my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode};
+ my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type};
+ my $other_mode = ($mode eq "Target" ? "Base" : "Target");
+ my $mode_uri = $mode.'URI';
+ my $local_type = 'Local'.$mode;
+
+ return sub {
+ map {
+ \'<a href="',
+ $_->$mode_uri->Resolver->HREF,
+ \'">',
+ ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ),
+ \'</a><br />',
+ } @{ $_[0]->Links($other_mode,$type)->ItemsArrayRef }
+ }
+};
+
+$COLUMN_MAP = {
+ Queue => {
+ attribute => 'Queue',
+ title => 'Queue id', # loc
+ value => sub { return $_[0]->Queue }
+ },
+ QueueName => {
+ attribute => 'Queue',
+ title => 'Queue', # loc
+ value => sub { return $_[0]->QueueObj->Name }
+ },
+ OwnerName => {
+ title => 'Owner', # loc
+ attribute => 'Owner',
+ value => sub { return $_[0]->OwnerObj->Name }
+ },
+ Status => {
+ title => 'Status', # loc
+ attribute => 'Status',
+ value => sub { return loc($_[0]->Status) }
+ },
+ Subject => {
+ title => 'Subject', # loc
+ attribute => 'Subject',
+ value => sub { return $_[0]->Subject || "(" . loc('No subject') . ")" }
+ },
+ ExtendedStatus => {
+ title => 'Status', # loc
+ attribute => 'Status',
+ value => sub {
+ my $Ticket = shift;
+
+ if ( my $count = $Ticket->HasUnresolvedDependencies ) {
+ if ( $Ticket->HasUnresolvedDependencies( Type => 'approval' )
+ or $Ticket->HasUnresolvedDependencies( Type => 'code' ) )
+ {
+ return \'<em>', loc('(pending approval)'), \'</em>';
+ }
+ else {
+ my $Query = "DependedOnBy = " . $Ticket->id;
+ $Query .= " AND (" . join(" OR ", map { "Status = '$_'" } RT::Queue->ActiveStatusArray) . ")";
+
+ my $SearchURL = RT->Config->Get('WebPath') . '/Search/Results.html?' . $m->comp('/Elements/QueryString', Query => $Query);
+
+ return \'<a href="',$SearchURL,\'">', loc('(pending [quant,_1,other ticket])',$count), \'</a>';
+ }
+ }
+ else {
+ return loc( $Ticket->Status );
+ }
+
+ }
+ },
+ Priority => {
+ title => 'Priority', # loc
+ attribute => 'Priority',
+ value => sub { return $_[0]->Priority }
+ },
+ InitialPriority => {
+ title => 'InitialPriority', # loc
+ attribute => 'InitialPriority',
+ name => 'Initial Priority',
+ value => sub { return $_[0]->InitialPriority }
+ },
+ FinalPriority => {
+ title => 'FinalPriority', # loc
+ attribute => 'FinalPriority',
+ name => 'Final Priority',
+ value => sub { return $_[0]->FinalPriority }
+ },
+ EffectiveId => {
+ title => 'EffectiveId', # loc
+ attribute => 'EffectiveId',
+ value => sub { return $_[0]->EffectiveId }
+ },
+ Type => {
+ title => 'Type', # loc
+ attribute => 'Type',
+ value => sub { return $_[0]->Type }
+ },
+ TimeWorked => {
+ attribute => 'TimeWorked',
+ title => 'Time Worked', # loc
+ value => sub { return $_[0]->TimeWorked }
+ },
+ TimeLeft => {
+ attribute => 'TimeLeft',
+ title => 'Time Left', # loc
+ value => sub { return $_[0]->TimeLeftAsString }
+ },
+ TimeEstimated => {
+ attribute => 'TimeEstimated',
+ title => 'Time Estimated', # loc
+ value => sub { return $_[0]->TimeEstimated }
+ },
+ Requestors => {
+ title => 'Requestors', # loc
+ attribute => 'Requestor.EmailAddress',
+ value => sub { return $_[0]->Requestors->MemberEmailAddressesAsString }
+ },
+ Cc => {
+ title => 'Cc', # loc
+ attribute => 'Cc.EmailAddress',
+ value => sub { return $_[0]->Cc->MemberEmailAddressesAsString }
+ },
+ AdminCc => {
+ title => 'AdminCc', # loc
+ attribute => 'AdminCc.EmailAddress',
+ value => sub { return $_[0]->AdminCc->MemberEmailAddressesAsString }
+ },
+ StartsRelative => {
+ title => 'Starts', # loc
+ attribute => 'Starts',
+ value => sub { return $_[0]->StartsObj->AgeAsString }
+ },
+ StartedRelative => {
+ title => 'Started', # loc
+ attribute => 'Started',
+ value => sub { return $_[0]->StartedObj->AgeAsString }
+ },
+ ToldRelative => {
+ title => 'Told', # loc
+ attribute => 'Told',
+ value => sub { return $_[0]->ToldObj->AgeAsString }
+ },
+ DueRelative => {
+ title => 'Due', # loc
+ attribute => 'Due',
+ value => sub {
+ my $date = $_[0]->DueObj;
+ # Highlight the date if it was due in the past, and it's still active
+ if ( $date && $date->Unix > 0 && $date->Diff < 0 && $_[0]->QueueObj->IsActiveStatus($_[0]->Status)) {
+ return (\'<span class="overdue">' , $date->AgeAsString , \'</span>');
+ } else {
+ return $date->AgeAsString;
+ }
+ }
+ },
+ ResolvedRelative => {
+ title => 'Resolved', # loc
+ attribute => 'Resolved',
+ value => sub { return $_[0]->ResolvedObj->AgeAsString }
+ },
+ Starts => {
+ title => 'Starts', # loc
+ attribute => 'Starts',
+ value => sub { return $_[0]->StartsObj->AsString }
+ },
+ Started => {
+ title => 'Started', # loc
+ attribute => 'Started',
+ value => sub { return $_[0]->StartedObj->AsString }
+ },
+ Told => {
+ title => 'Told', # loc
+ attribute => 'Told',
+ value => sub { return $_[0]->ToldObj->AsString }
+ },
+ Due => {
+ title => 'Due', # loc
+ attribute => 'Due',
+ value => sub { return $_[0]->DueObj->AsString }
+ },
+ Resolved => {
+ title => 'Resolved', # loc
+ attribute => 'Resolved',
+ value => sub { return $_[0]->ResolvedObj->AsString }
+ },
+ UpdateStatus => {
+ title => 'New messages', # loc
+ value => sub {
+ my $txn = $_[0]->SeenUpTo or return $_[0]->loc('No');
+ return \('<a href="'. RT->Config->Get('WebPath') .'/Ticket/Display.html?id='
+ . $_[0]->id .'#txn-'. $txn->id .'">'),
+ $_[0]->loc('New'), \'</a>';
+ },
+ },
+ KeyRequestors => {
+ title => 'Requestors', # loc
+ attribute => 'Requestor.EmailAddress',
+ value => sub {
+ my $t = shift;
+ my @requestors = $t->Requestors->MemberEmailAddresses;
+ for my $email (@requestors)
+ {
+ my %key = RT::Crypt::GnuPG::GetKeyInfo($email);
+ if (!defined $key{'info'}) {
+ $email .= loc(" (no pubkey!)");
+ }
+ elsif ($key{'info'}{'TrustLevel'} == 0) {
+ $email .= loc(" (untrusted!)");
+ }
+ }
+ return join ', ', @requestors;
+ }
+ },
+ KeyOwnerName => {
+ title => 'Owner', # loc
+ attribute => 'Owner',
+ value => sub {
+ my $t = shift;
+ my $name = $t->OwnerObj->Name;
+ my %key = RT::Crypt::GnuPG::GetKeyInfo($t->OwnerObj->EmailAddress);
+ if (!defined $key{'info'}) {
+ $name .= ' '. loc("(no pubkey!)");
+ }
+ elsif ($key{'info'}{'TrustLevel'} == 0) {
+ $name .= ' '. loc("(untrusted!)");
+ }
+
+ return $name;
+ }
+ },
+
+ # Everything from LINKTYPEMAP
+ (map {
+ $_ => { value => $LinkCallback->( $_ ) }
+ } keys %RT::Ticket::LINKTYPEMAP),
+
+ '_CLASS' => {
+ value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' }
+ },
+ '_CHECKBOX' => {
+ attribute => 'checkbox',
+ title => 'Update', # loc
+ align => 'right',
+ value => sub { return \('<input type="checkbox" class="checkbox" name="UpdateTicket'.$_[0]->id.'" value="1" checked="checked" />') }
+ },
+
+ CustomField => {
+ attribute => sub { return shift @_ },
+ title => sub { return pop @_ },
+ value => sub {
+ # Display custom field contents, separated by newlines.
+ # For Image custom fields we also show a thumbnail here.
+
+ my $values = $_[0]->CustomFieldValues( $_[-1] );
+ my @values = map {
+ (
+ ($_->CustomFieldObj->Type eq 'Image')
+ ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ ))
+ : $_->Content
+ ),
+ \'<br />',
+ } @{ $values->ItemsArrayRef };
+ pop @values; # Remove that last <br />
+ return @values;
+ },
+ },
+ Bookmark => {
+ title => ' ',
+ value => sub {
+ my $bookmark = $m->scomp( '/Ticket/Elements/Bookmark', id => $_[0]->id );
+ # the CollectionAsTable/Row template replaces newlines with <br>
+ $bookmark =~ s/\n//g;
+
+ return \$bookmark;
+ },
+ },
+};
+
+$COLUMN_MAP->{'CF'} = $COLUMN_MAP->{'CustomField'};
+
+# if no GPG support, then KeyOwnerName and KeyRequestors fall back to the regular
+# versions
+if (RT->Config->Get('GnuPG')->{'Enable'}) {
+ require RT::Crypt::GnuPG;
+}
+else {
+ $COLUMN_MAP->{KeyOwnerName} = $COLUMN_MAP->{OwnerName};
+ $COLUMN_MAP->{KeyRequestors} = $COLUMN_MAP->{Requestors};
+}
+</%ONCE>
+<%init>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 );
+# backward compatibility
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap' );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%init>
diff --git a/rt/share/html/Elements/RT__User/ColumnMap b/rt/share/html/Elements/RT__User/ColumnMap
new file mode 100644
index 0000000..bb93b97
--- /dev/null
+++ b/rt/share/html/Elements/RT__User/ColumnMap
@@ -0,0 +1,141 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+ Name => {
+ title => 'Name', # loc
+ attribute => 'Name',
+ value => sub { return $_[0]->Name() },
+ },
+ RealName => {
+ title => 'RealName', # loc
+ attribute => 'RealName',
+ value => sub { return $_[0]->RealName() },
+ },
+ NickName => {
+ title => 'NickName', # loc
+ attribute => 'NickName',
+ value => sub { return $_[0]->NickName() },
+ },
+ EmailAddress => {
+ title => 'EmailAddress', # loc
+ attribute => 'EmailAddress',
+ value => sub { return $_[0]->EmailAddress() },
+ },
+ Organization => {
+ title => 'Organization', # loc
+ attribute => 'Organization',
+ value => sub { return $_[0]->Organization() },
+ },
+ HomePhone => {
+ title => 'HomePhone', # loc
+ attribute => 'HomePhone',
+ value => sub { return $_[0]->HomePhone() },
+ },
+ WorkPhone => {
+ title => 'WorkPhone', # loc
+ attribute => 'WorkPhone',
+ value => sub { return $_[0]->WorkPhone() },
+ },
+ MobilePhone => {
+ title => 'MobilePhone', # loc
+ attribute => 'MobilePhone',
+ value => sub { return $_[0]->MobilePhone() },
+ },
+ PagerPhone => {
+ title => 'PagerPhone', # loc
+ attribute => 'PagerPhone',
+ value => sub { return $_[0]->PagerPhone() },
+ },
+ Address1 => {
+ title => 'Address1', # loc
+ attribute => 'Address1',
+ value => sub { return $_[0]->Address1() },
+ },
+ Address2 => {
+ title => 'Address2', # loc
+ attribute => 'Address2',
+ value => sub { return $_[0]->Address2() },
+ },
+ City => {
+ title => 'City', # loc
+ attribute => 'City',
+ value => sub { return $_[0]->City() },
+ },
+ State => {
+ title => 'State', # loc
+ attribute => 'State',
+ value => sub { return $_[0]->State() },
+ },
+ Zip => {
+ title => 'Zip', # loc
+ attribute => 'Zip',
+ value => sub { return $_[0]->Zip() },
+ },
+ Country => {
+ title => 'Country', # loc
+ attribute => 'Country',
+ value => sub { return $_[0]->Country() },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%INIT>
diff --git a/rt/share/html/Elements/Refresh b/rt/share/html/Elements/Refresh
new file mode 100755
index 0000000..7e36c68
--- /dev/null
+++ b/rt/share/html/Elements/Refresh
@@ -0,0 +1,69 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value="-1"
+%unless ($Default) {
+ selected="selected"
+%}
+><&|/l&>Don't refresh this page.</&></option>
+%foreach my $value (@refreshevery) {
+<option value="<%$value%>"
+% if ( $Default && ($value == $Default)) {
+selected="selected"
+% }
+><&|/l, $value/60 &>Refresh this page every [_1] minutes.</&></option>
+%}
+</select>
+
+<%INIT>
+my @refreshevery = qw(120 300 600 1200 3600 7200);
+</%INIT>
+<%ARGS>
+$Name => undef
+$Default => 0
+</%ARGS>
diff --git a/rt/share/html/Elements/RefreshHomepage b/rt/share/html/Elements/RefreshHomepage
new file mode 100644
index 0000000..bf91a95
--- /dev/null
+++ b/rt/share/html/Elements/RefreshHomepage
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|/Widgets/TitleBox, title => loc('Refresh')&>
+<form method="get" action="<% RT->Config->Get('WebPath') . $m->request_path %>">
+<& /Elements/Refresh, Name => 'HomeRefreshInterval',
+ Default => $session{'home_refresh_interval'}||RT->Config->Get('HomePageRefreshInterval', $session{'CurrentUser'}) &>
+<& /Elements/Submit, Label => loc('Go!') &>
+</&>
+</form>
diff --git a/rt/share/html/Elements/ScrubHTML b/rt/share/html/Elements/ScrubHTML
new file mode 100644
index 0000000..7744a85
--- /dev/null
+++ b/rt/share/html/Elements/ScrubHTML
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ONCE>
+my $scrubber = new HTML::Scrubber;
+$scrubber->default(
+ 0,
+ {
+ '*' => 0,
+ id => 1,
+ class => 1,
+ # Match http, ftp and relative urls
+ # XXX: we also scrub format strings with this module then allow simple config options
+ href => qr{^(?:http:|ftp:|https:|/|__Web(?:Path|BaseURL|URL)__)}i,
+ face => 1,
+ size => 1,
+ target => 1,
+ style => qr{^(?:(?:color:\s*rgb\(\d+,\s*\d+,\s*\d+\))|
+ (?:text-align:\s*))}ix,
+ }
+);
+$scrubber->deny(qw[*]);
+$scrubber->allow(
+ qw[A B U P BR I HR BR SMALL EM FONT SPAN STRONG SUB SUP STRIKE H1 H2 H3 H4 H5 H6 DIV UL OL LI DL DT DD PRE]
+);
+$scrubber->comment(0);
+</%ONCE>
+<%init>
+return $scrubber->scrub($Content);
+</%init>
+<%args>
+$Content => undef
+</%args>
diff --git a/rt/share/html/Elements/Section b/rt/share/html/Elements/Section
new file mode 100755
index 0000000..b67115d
--- /dev/null
+++ b/rt/share/html/Elements/Section
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<h1><%$title%></h1>
+<%ARGS>
+$title => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectAttachmentField b/rt/share/html/Elements/SelectAttachmentField
new file mode 100755
index 0000000..459b692
--- /dev/null
+++ b/rt/share/html/Elements/SelectAttachmentField
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value="Subject"><&|/l&>Subject</&></option>
+<option value="Content"><&|/l&>Content</&></option>
+<option value="ContentType"><&|/l&>Content-Type</&></option>
+<option value="Filename"><&|/l&>Filename</&></option>
+</select>
+<%ARGS>
+$Name => 'AttachmentField'
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectBoolean b/rt/share/html/Elements/SelectBoolean
new file mode 100755
index 0000000..e535ae5
--- /dev/null
+++ b/rt/share/html/Elements/SelectBoolean
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value="<%$TrueVal%>" <%$TrueDefault|n%>><%$True%></option>
+<option value="<%$FalseVal%>" <%$FalseDefault|n%>><%$False%></option>
+</select>
+
+<%ARGS>
+$Name => undef
+$True => loc("is")
+$Default => 'true'
+$TrueVal => 1
+$FalseVal => 0
+$False => loc("isn't")
+</%ARGS>
+
+<%INIT>
+my $TrueDefault = '';
+my $FalseDefault = '';
+if ($Default && $Default !~ /true/i) {
+ $FalseDefault = 'selected="selected"';
+}
+else {
+ $TrueDefault = 'selected="selected"';
+}
+</%INIT>
diff --git a/rt/share/html/Elements/SelectCustomFieldOperator b/rt/share/html/Elements/SelectCustomFieldOperator
new file mode 100755
index 0000000..f7fdaad
--- /dev/null
+++ b/rt/share/html/Elements/SelectCustomFieldOperator
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<% $Name %>">
+% while (my $option = shift @Options) {
+% my $value = shift @Values;
+<option value="<% $value %>"
+% if ($Default eq $value) {
+selected="selected"
+% }
+><% $option %></option>
+% }
+</select>
+
+<%ARGS>
+$Name => undef
+@Options => ( loc('matches'), loc("doesn't match"), loc('is'), loc("isn't"), loc('less than'), loc('greater than'))
+@Values => ('LIKE', 'NOT LIKE', '=', '!=', '<', '>')
+$Default => ''
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectCustomFieldValue b/rt/share/html/Elements/SelectCustomFieldValue
new file mode 100755
index 0000000..579f696
--- /dev/null
+++ b/rt/share/html/Elements/SelectCustomFieldValue
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback( Name => $Name, CustomField => $CustomField );
+% if ($CustomField->Type =~ /Select/i) {
+% my $values = $CustomField->Values;
+<select name="<%$Name%>">
+<option value="" selected="selected">-</option>
+<option value="NULL"><&|/l&>(no value)</&></option>
+% while (my $value = $values->Next) {
+<option value="<%$value->Name%>"><%$value->Name%></option>
+% }
+</select>
+% }
+% else {
+<input name="<%$Name%>" size="20" />
+% }
+<%args>
+$Name => undef
+$CustomField =>undef
+</%args>
diff --git a/rt/share/html/Elements/SelectDate b/rt/share/html/Elements/SelectDate
new file mode 100755
index 0000000..32a173d
--- /dev/null
+++ b/rt/share/html/Elements/SelectDate
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<script type="text/javascript"><!--
+ onLoadHook('createCalendarLink("<% $Name %>");');
+--></script>
+<input type="text" id="<% $Name %>" name="<% $Name %>" value="<% $Value %>" size="<% $Size %>" />
+<%init>
+unless ((defined $Default) or
+ ($current <= 0)) {
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime($current);
+ $Default = sprintf("%04d-%02d-%02d %02d:%02d",
+ $year+1900,$mon+1,$mday,
+ $hour,$min);
+}
+$Value = $Value || $Default;
+
+unless ($Name) {
+ $Name = $menu_prefix. "_Date";
+}
+</%init>
+
+<%args>
+
+$ShowTime => 1
+$menu_prefix=>''
+$current=>time
+$Default => ''
+$Value => ''
+$Name => undef
+$Size => 16
+</%args>
diff --git a/rt/share/html/Elements/SelectDateRelation b/rt/share/html/Elements/SelectDateRelation
new file mode 100755
index 0000000..61ab350
--- /dev/null
+++ b/rt/share/html/Elements/SelectDateRelation
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value="&lt;"><%$Before%></option>
+<option value="="><%$On%></option>
+<option value="&gt;"><%$After%></option>
+</select>
+
+<%ARGS>
+$Name => undef
+$Default => undef
+$Before => loc('before')
+$On => loc('on')
+$After => loc('after')
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectDateType b/rt/share/html/Elements/SelectDateType
new file mode 100755
index 0000000..a863113
--- /dev/null
+++ b/rt/share/html/Elements/SelectDateType
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value="Created"><&|/l&>Created</&></option>
+<option value="Started"><&|/l&>Started</&></option>
+<option value="Resolved"><&|/l&>Resolved</&></option>
+<option value="Told"><&|/l&>Last Contacted</&></option>
+<option value="LastUpdated"><&|/l&>Last Updated</&></option>
+<option value="Starts"><&|/l&>Starts</&></option>
+<option value="Due"><&|/l&>Due</&></option>
+<option value="Updated"><&|/l&>Updated</&></option>
+</select>
+<%ARGS>
+$Name => 'DateType'
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectEqualityOperator b/rt/share/html/Elements/SelectEqualityOperator
new file mode 100755
index 0000000..2d52df7
--- /dev/null
+++ b/rt/share/html/Elements/SelectEqualityOperator
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+% while (my $option = shift @Options) {
+% my $value = shift @Values;
+<option value="<%$value%>"
+% if ($Default eq $value) {
+selected="selected"
+% }
+><%$option%></option>
+% }
+</select>
+
+<%ARGS>
+$Name => undef
+@Options => (loc('less than'), loc('equal to'), loc('greater than'), loc('not equal to'))
+@Values => qw(< = > !=)
+$Default =>''
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectGroups b/rt/share/html/Elements/SelectGroups
new file mode 100755
index 0000000..766a389
--- /dev/null
+++ b/rt/share/html/Elements/SelectGroups
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="GroupField">
+% foreach my $col (RT::Group->BasicColumns) {
+<option <% ($GroupField eq $col->[0]) ? 'selected="selected"' : '' %> value="<% $col->[0] %>"><% loc($col->[1]) %></option>
+% }
+% while (my $CF = $CFs->Next) {
+% my $val = "CustomField-" . $CF->Id;
+<option <% ($GroupField eq $val) ? 'selected="selected"' : '' %> value="<% $val %>"><&|/l&>CustomField</&>: <% $CF->Name %></option>
+% }
+</select>
+<& /Elements/SelectMatch, Name => 'GroupOp', Default => $GroupOp &>
+<input size="8" name="GroupString" value="<% $GroupString %>" />
+<%INIT>
+my $CFs = RT::CustomFields->new($session{'CurrentUser'});
+$CFs->LimitToChildType('RT::Group');
+$CFs->OrderBy( FIELD => 'Name' );
+</%INIT>
+<%ARGS>
+$GroupField => ''
+$GroupOp => ''
+$GroupString => ''
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectLang b/rt/share/html/Elements/SelectLang
new file mode 100755
index 0000000..914a6f5
--- /dev/null
+++ b/rt/share/html/Elements/SelectLang
@@ -0,0 +1,80 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+% if ($ShowNullOption) {
+<option value="">-</option>
+% }
+% foreach my $lang (@lang) {
+<option value="<%$lang%>"<%(defined($Default) && ($lang eq $Default)) && qq[ selected="selected"] |n%>><% $lang_to_desc{$lang} %>
+% if (($Verbose) and (my $description = I18N::LangTags::List::native_name($lang)) ){
+(<%$description%>)
+% }
+</option>
+% }
+</select>
+<%ARGS>
+$ShowNullOption => 1
+$ShowAllQueues => 1
+$Name => undef
+$Verbose => undef
+$Default => 0
+$Lite => 0
+</%ARGS>
+
+<%ONCE>
+use I18N::LangTags::List;
+my (@lang, %lang_to_desc);
+foreach my $lang (map { s/:://; s/_/-/g; $_ } grep { /^\w+::$/ } keys %RT::I18N::) {
+ next if $lang =~ /i-default|en-us/;
+ my $desc = I18N::LangTags::List::name($lang);
+ next unless ($desc);
+ $desc =~ s/(.*) (.*)/$2 ($1)/ unless ( $desc =~ /.* \(.*\)/ );
+ $lang_to_desc{$lang} = $desc;
+}
+@lang = sort { $lang_to_desc{$a} cmp $lang_to_desc{$b} } keys %lang_to_desc;
+</%ONCE>
diff --git a/rt/share/html/Elements/SelectLinkType b/rt/share/html/Elements/SelectLinkType
new file mode 100755
index 0000000..e4babe3
--- /dev/null
+++ b/rt/share/html/Elements/SelectLinkType
@@ -0,0 +1,57 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option <% ($Default eq 'MemberOf') ? 'selected="selected"' : '' %> value="MemberOf"><&|/l&>Member of</&></option>
+<option <% ($Default eq 'DependsOn') ? 'selected="selected"' : '' %> value="DependsOn"><&|/l&>Depends on</&></option>
+<option <% ($Default eq 'RefersTo') ? 'selected="selected"' : '' %> value="RefersTo"><&|/l&>Refers to</&></option>
+</select>
+
+<%ARGS>
+$Name => "LinkType"
+$Default => ''
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectMatch b/rt/share/html/Elements/SelectMatch
new file mode 100755
index 0000000..78a87ca
--- /dev/null
+++ b/rt/share/html/Elements/SelectMatch
@@ -0,0 +1,82 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+<option value="LIKE" <%$LikeDefault|n%>><%$Like%></option>
+<option value="NOT LIKE" <%$NotLikeDefault|n%>><%$NotLike%></option>
+<option value="=" <%$TrueDefault|n%>><%$True%></option>
+<option value="!=" <%$FalseDefault|n%>><%$False%></option>
+</select>
+
+<%ARGS>
+$Name => undef
+$Like => loc('matches')
+$NotLike => loc("doesn't match")
+$True => loc('is')
+$False => loc("isn't")
+$Default => undef
+</%ARGS>
+<%INIT>
+
+my $TrueDefault = '';
+my $FalseDefault='';
+my $LikeDefault='';
+my $NotLikeDefault ='';
+
+if ($Default && $Default =~ /false|!=/i) {
+ $FalseDefault = qq[ selected="selected"];
+}
+elsif ($Default && $Default =~ /true|=/i) {
+ $TrueDefault = qq[ selected="selected"];
+}
+elsif ($Default && $Default =~ /notlike|NOT LIKE/i) {
+ $NotLikeDefault = qq[ selected="selected"];
+}
+else {
+ $LikeDefault = qq[ selected="selected"];
+}
+</%INIT>
diff --git a/rt/share/html/Elements/SelectNewTicketQueue b/rt/share/html/Elements/SelectNewTicketQueue
new file mode 100755
index 0000000..d7d406e
--- /dev/null
+++ b/rt/share/html/Elements/SelectNewTicketQueue
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<label accesskey="9">
+ <& /Elements/SelectQueue, Name => 'Queue', Default => RT->Config->Get("DefaultQueue", $session{'CurrentUser'}), %ARGS, ShowNullOption => 0, ShowAllQueues => 0 &>
+</label>
diff --git a/rt/share/html/Elements/SelectOwner b/rt/share/html/Elements/SelectOwner
new file mode 100755
index 0000000..6bdb240
--- /dev/null
+++ b/rt/share/html/Elements/SelectOwner
@@ -0,0 +1,133 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>" id="<%$Name%>">
+%if ($DefaultValue) {
+<option value=""<% !$Default ? qq[ selected="selected"] : '' |n %>><%$DefaultLabel%></option>
+%}
+% $Default = 0 unless defined $Default && $Default =~ /^\d+$/;
+% my @formatednames = sort {lc $a->[1] cmp lc $b->[1]} map {[$_, $m->scomp('/Elements/ShowUser', User => $_)]} @users;
+%foreach my $UserRef ( @formatednames) {
+%my $User = $UserRef->[0];
+<option <% ( $User->Id == $Default) ? qq[ selected="selected"] : '' |n %>
+%if ($ValueAttribute eq 'id') {
+ value="<%$User->id%>"
+%} elsif ($ValueAttribute eq 'Name') {
+ value="<%$User->Name%>"
+%}
+><% $UserRef->[1] |n %></option>
+%}
+</select>
+<%INIT>
+
+my @objects;
+if ($TicketObj) {
+ @objects = ($TicketObj);
+} elsif ($QueueObj) {
+ @objects = ($QueueObj);
+} elsif ($cfqueues) {
+ @objects = keys %{$cfqueues};
+} else {
+# Let's check rights on an empty queue object. that will do a search
+# for any queue.
+ my $queue = RT::Queue->new( $session{'CurrentUser'} );
+ push( @objects, $queue );
+}
+
+my %user_uniq_hash;
+
+$m->callback(
+ %ARGS,
+ objects => \@objects,
+ CallbackName => 'UpdateObjectList'
+);
+
+my $isSU = $session{CurrentUser}
+ ->HasRight( Right => 'SuperUser', Object => $RT::System );
+foreach my $object (@objects) {
+ my $Users = RT::Users->new( $session{CurrentUser} );
+ $Users->WhoHaveRight(
+ Right => 'OwnTicket',
+ Object => $object,
+ IncludeSystemRights => 1,
+ IncludeSuperusers => $isSU
+ );
+ while ( my $User = $Users->Next() ) {
+ next
+ if ( $User->id == $RT::Nobody->id )
+ ; # skip nobody here, so we can make them first later
+ $user_uniq_hash{ $User->Id() } = $User;
+ }
+}
+if ($Default && $Default != $RT::Nobody->id && !$user_uniq_hash{$Default}) {
+ $user_uniq_hash{$Default} = RT::User->new($session{CurrentUser});
+ $user_uniq_hash{$Default}->Load($Default);
+}
+
+my @users = sort { uc( $a->Name ) cmp uc( $b->Name ) } values %user_uniq_hash;
+unshift( @users, $RT::Nobody );
+
+$m->callback(
+ %ARGS,
+ objects => \@objects,
+ CallbackName => 'UpdateObjectList'
+);
+
+
+</%INIT>
+
+<%ARGS>
+$QueueObj => undef
+$Name => undef
+$Default => 0
+$User => undef
+$TicketObj => undef
+$DefaultValue => 1
+$DefaultLabel => "-"
+$ValueAttribute => 'id'
+$cfqueues => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectPriority b/rt/share/html/Elements/SelectPriority
new file mode 100644
index 0000000..c8af7cc
--- /dev/null
+++ b/rt/share/html/Elements/SelectPriority
@@ -0,0 +1,8 @@
+<input name="<% $Name %>" value="<% $Default %>" size="5" />
+<%ARGS>
+$Name => 'Priority'
+$Default => ''
+</%ARGS>
+<%INIT>
+$Default = '' unless defined $Default;
+</%INIT>
diff --git a/rt/share/html/Elements/SelectQueue b/rt/share/html/Elements/SelectQueue
new file mode 100755
index 0000000..20a5b7d
--- /dev/null
+++ b/rt/share/html/Elements/SelectQueue
@@ -0,0 +1,106 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ($Lite) {
+% my $d = new RT::Queue($session{'CurrentUser'});
+% $d->Load($Default);
+<input name="<%$Name%>" size="25" value="<%$d->Name%>" class="<%$Class%>" />
+% }
+% else {
+<select name="<%$Name%>" <% ($OnChange) ? 'onchange="'.$OnChange.'"' : '' |n %> class="<%$Class%>">
+% if ($ShowNullOption) {
+ <option value="">-</option>
+% }
+% for my $queue (@{$session{$cache_key}}) {
+ <option value="<% ($NamedValues ? $queue->{Name} : $queue->{Id}) %>"
+
+% if ($queue->{Id} eq ($Default||'') || $queue->{Name} eq ($Default||'')) {
+ selected="selected"
+% }
+
+>
+ <%$queue->{Name}%>
+
+% if ($Verbose and $queue->{Description}) {
+ (<%$queue->{Description}%>)
+% }
+ </option>
+% }
+</select>
+% }
+<%args>
+$CheckQueueRight => 'CreateTicket'
+$ShowNullOption => 1
+$ShowAllQueues => 1
+$Name => undef
+$Verbose => undef
+$NamedValues => 0
+$Default => 0
+$Lite => 0
+$OnChange => undef
+$Class => 'select-queue'
+</%args>
+<%init>
+my $cache_key = "SelectQueue---"
+ . $session{'CurrentUser'}->Id
+ . "---$CheckQueueRight---$ShowAllQueues";
+
+if (not defined $session{$cache_key} and not $Lite) {
+ my $q = new RT::Queues($session{'CurrentUser'});
+ $q->UnLimit;
+
+ while (my $queue = $q->Next) {
+ if ($ShowAllQueues || $queue->CurrentUserHasRight($CheckQueueRight)) {
+ push @{$session{$cache_key}}, {
+ Id => $queue->Id,
+ Name => $queue->Name,
+ Description => $queue->Description,
+ };
+ }
+ }
+}
+</%init>
diff --git a/rt/share/html/Elements/SelectResultsPerPage b/rt/share/html/Elements/SelectResultsPerPage
new file mode 100755
index 0000000..ec1f27f
--- /dev/null
+++ b/rt/share/html/Elements/SelectResultsPerPage
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# TODO: Better default handling
+
+<select name="<% $Name %>">
+% foreach my $value ( @values ) {
+<option value="<% $value %>" <% $value == $Default? 'selected="selected"': '' |n%>>
+<% shift @labels %>
+</option>
+% }
+</select>
+
+<%INIT>
+my @values = qw(0 10 25 50 100);
+my @labels = (loc('Unlimited'), qw(10 25 50 100));
+$Default = 50 unless defined $Default;
+</%INIT>
+<%ARGS>
+
+$Name => undef
+$Default => 50
+
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectSortOrder b/rt/share/html/Elements/SelectSortOrder
new file mode 100755
index 0000000..ded5a99
--- /dev/null
+++ b/rt/share/html/Elements/SelectSortOrder
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+%foreach my $order (@orders) {
+<option value="<%$order%>"<%$order eq $Default && qq[ selected="selected"] |n %>>
+<% shift @order_names %>
+</option>
+% }
+</select>
+
+<%INIT>
+my @orders = qw (ASC DESC);
+my @order_names = (loc('Ascending'), loc('Descending'));
+
+</%INIT>
+
+<%ARGS>
+$Name => 'SortOrder'
+$Default => 'ASC'
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectStatus b/rt/share/html/Elements/SelectStatus
new file mode 100755
index 0000000..7f328e5
--- /dev/null
+++ b/rt/share/html/Elements/SelectStatus
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+%if ($DefaultValue) {
+<option value=""<% !$Default && qq[ selected="selected"] |n %>><%$DefaultLabel%></option>
+%}
+%foreach my $status (@status) {
+%next if ($SkipDeleted && $status eq 'deleted');
+<option value="<%$status%>"<% (defined $Default && $status eq $Default) && qq[ selected="selected"] |n %>><%loc($status)%></option>
+% }
+</select>
+<%ONCE>
+my $queue = new RT::Queue($session{'CurrentUser'});
+my @status = $queue->StatusArray();
+</%ONCE>
+<%ARGS>
+$Name => undef
+$Default => ''
+$SkipDeleted => 0
+$DefaultValue => 1
+$DefaultLabel => "-"
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectTicketSortBy b/rt/share/html/Elements/SelectTicketSortBy
new file mode 100755
index 0000000..d6964ec
--- /dev/null
+++ b/rt/share/html/Elements/SelectTicketSortBy
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+% foreach my $field (@sortfields) {
+<option value="<%$field%>"<% $field eq $Default && qq[ selected="selected"] |n%>><% loc($field) %></option>
+% }
+</select>
+
+<%INIT>
+my $tickets = new RT::Tickets($session{'CurrentUser'});
+my @sortfields = $tickets->SortFields();
+
+</%INIT>
+<%ARGS>
+$Name => 'SortTicketsBy'
+$Default => 'id'
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectTicketTypes b/rt/share/html/Elements/SelectTicketTypes
new file mode 100755
index 0000000..7921309
--- /dev/null
+++ b/rt/share/html/Elements/SelectTicketTypes
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+%foreach (@Types) {
+<option value="<% $_ %>"<% ($_ eq $Default) && qq[ selected="selected"] |n %>><% loc($_) %>
+%}
+</select>
+
+<%ARGS>
+$Name => 'TickType'
+$Default => undef
+@Types => qw(Approval Ticket)
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectTimeUnits b/rt/share/html/Elements/SelectTimeUnits
new file mode 100755
index 0000000..5438d3d
--- /dev/null
+++ b/rt/share/html/Elements/SelectTimeUnits
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select class="TimeUnits" id="<% $Name %>" name="<% $Name %>">
+<option value="minutes" <% $HoursDefault ? '' : 'selected="selected"' |n%>>
+ <% loc('Minutes') %>
+</option>
+<option value="hours" <% $HoursDefault ? 'selected="selected"' : '' |n%>>
+ <% loc('Hours') %>
+</option>
+</select>
+<%INIT>
+$Name .= '-TimeUnits' unless $Name =~ /-TimeUnits$/io;
+my $HoursDefault = RT->Config->Get('DefaultTimeUnitsToHours');
+</%INIT>
+<%ARGS>
+$Name => ''
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectTimezone b/rt/share/html/Elements/SelectTimezone
new file mode 100644
index 0000000..09399e1
--- /dev/null
+++ b/rt/share/html/Elements/SelectTimezone
@@ -0,0 +1,84 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ONCE>
+my $HAS_DATETIME_TZ = eval { require DateTime::TimeZone };
+my $HAS_DATETIME = eval { require DateTime };
+
+my (@names, %label);
+if ( $HAS_DATETIME_TZ ) {
+ @names = DateTime::TimeZone->all_names;
+}
+
+if ( $HAS_DATETIME ) {
+ my $dt = DateTime->now;
+ for ( @names ) {
+ $dt->set_time_zone( $_ );
+ $label{$_} = $_ . ' ' . $dt->strftime('%z');
+ }
+}
+
+</%ONCE>
+% unless ( $HAS_DATETIME_TZ && @names ) {
+<input type="text" name="<% $Name %>" value="<% $Default %>" />
+% } else {
+<select name="<% $Name %>">
+% if ( $ShowNullOption ) {
+<option value=""><&|/l&>System Default</&></option>
+% }
+% foreach my $tz (@names) {
+<option value="<% $tz %>" <% ($Default||'') eq $tz? 'selected="selected"' :''
+ |n %> ><% $label{$tz} || $tz %></option>
+% }
+</select>
+% }
+<%ARGS>
+$ShowNullOption => 1
+$Name => undef
+$Default => 0
+</%ARGS>
+
diff --git a/rt/share/html/Elements/SelectUsers b/rt/share/html/Elements/SelectUsers
new file mode 100755
index 0000000..b4a3aa0
--- /dev/null
+++ b/rt/share/html/Elements/SelectUsers
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="UserField">
+% foreach my $col (RT::User->BasicColumns) {
+<option <% ($UserField eq $col->[0]) ? 'selected="selected"' : '' |n %> value="<% $col->[0] %>"><% loc($col->[1]) %></option>
+% }
+% while (my $CF = $CFs->Next) {
+% my $val = "CustomField-" . $CF->Id;
+<option <% ($UserField eq $val) ? 'selected="selected"' : '' |n %> value="<% $val %>"><&|/l&>CustomField</&>: <% $CF->Name %></option>
+% }
+</select>
+<& /Elements/SelectMatch, Name => 'UserOp', Default => $UserOp &>
+<input size="8" name="UserString" value="<% $UserString %>" />
+<%INIT>
+my $CFs = RT::CustomFields->new($session{'CurrentUser'});
+$CFs->LimitToChildType('RT::User');
+$CFs->OrderBy( FIELD => 'Name' );
+</%INIT>
+<%ARGS>
+$UserField => ''
+$UserOp => ''
+$UserString => ''
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectWatcherType b/rt/share/html/Elements/SelectWatcherType
new file mode 100755
index 0000000..b5636af
--- /dev/null
+++ b/rt/share/html/Elements/SelectWatcherType
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+% if ($AllowNull) {
+<option value="">-</option>
+% }
+%for my $option (@types) {
+<option value="<%$option%>"<%defined($Default) && $option eq $Default && qq[ selected="selected"] |n %>><%loc($option)%></option>
+%}
+</select>
+
+<%INIT>
+my @types;
+if ($Scope =~ 'queue') {
+ @types = qw(Cc AdminCc);
+}
+else {
+ @types = qw(Requestor Cc AdminCc);
+}
+</%INIT>
+<%ARGS>
+$AllowNull => 1
+$Default=>undef
+$Scope => 'ticket'
+$Name => 'WatcherType'
+</%ARGS>
diff --git a/rt/share/html/Elements/SetupSessionCookie b/rt/share/html/Elements/SetupSessionCookie
new file mode 100755
index 0000000..3afe683
--- /dev/null
+++ b/rt/share/html/Elements/SetupSessionCookie
@@ -0,0 +1,57 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+return if $m->is_subrequest; # avoid reentrancy, as suggested by masonbook
+
+RT::Interface::Web::LoadSessionFromCookie();
+
+return ();
+</%INIT>
+<%ARGS>
+$SessionCookie => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowCustomFieldBinary b/rt/share/html/Elements/ShowCustomFieldBinary
new file mode 100644
index 0000000..9c73e80
--- /dev/null
+++ b/rt/share/html/Elements/ShowCustomFieldBinary
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<a href="<%RT->Config->Get('WebPath')%>/Download/CustomFieldValue/<% $Object->Id %>/<% $Object->Content %>"><% $Object->Content %></a>
+<%ARGS>
+$Object => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowCustomFieldImage b/rt/share/html/Elements/ShowCustomFieldImage
new file mode 100644
index 0000000..2f470cd
--- /dev/null
+++ b/rt/share/html/Elements/ShowCustomFieldImage
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% my $url = RT->Config->Get('WebPath') . "/Download/CustomFieldValue/".$Object->Id.'/'.$Object->Content;
+<a href="<% $url %>"><% $Object->Content %></a>
+<img type="<% $Object->ContentType %>" height="64" src="<% $url %>" align="middle" />
+<%ARGS>
+$Object
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowCustomFieldText b/rt/share/html/Elements/ShowCustomFieldText
new file mode 100644
index 0000000..beaa2a5
--- /dev/null
+++ b/rt/share/html/Elements/ShowCustomFieldText
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+ my $content = $Object->LargeContent || $Object->Content;
+ $content = $m->comp('/Elements/ScrubHTML', Content => $content);
+ $content =~ s|\n|<br />|g;
+</%init>
+<%$content|n%>
+<%ARGS>
+$Object
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowCustomFieldWikitext b/rt/share/html/Elements/ShowCustomFieldWikitext
new file mode 100644
index 0000000..49376ae
--- /dev/null
+++ b/rt/share/html/Elements/ShowCustomFieldWikitext
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% my $content = $Object->LargeContent || $Object->Content;
+% $content = $m->comp('/Elements/ScrubHTML', Content => $content);
+% my $base = $Object->Object->WikiBase;
+% my $wiki_content = Text::WikiFormat::format( $content."\n" , {}, { extended => 1, absolute_links => 1, implicit_links => RT->Config->Get('WikiImplicitLinks'), prefix => $base} );
+<%$wiki_content|n%>
+<%init>
+use Text::WikiFormat;
+</%init>
+<%ARGS>
+$Object
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowCustomFields b/rt/share/html/Elements/ShowCustomFields
new file mode 100644
index 0000000..ddb8b72
--- /dev/null
+++ b/rt/share/html/Elements/ShowCustomFields
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ($Table) {
+<table>
+% }
+% while ( my $CustomField = $CustomFields->Next ) {
+% my $Values = $Object->CustomFieldValues( $CustomField->Id );
+% my $count = $Values->Count;
+ <tr id="CF-<%$CustomField->id%>-ShowRow">
+ <td class="label"><% $CustomField->Name %>:</td>
+ <td class="value">
+% unless ( $count ) {
+<i><&|/l&>(no value)</&></i>
+% } elsif ( $count == 1 ) {
+% $print_value->( $CustomField, $Values->First );
+% } else {
+<ul>
+% while ( my $Value = $Values->Next ) {
+<li>
+% $print_value->( $CustomField, $Value );
+</li>
+% }
+</ul>
+% }
+ </td>
+ </tr>
+% }
+% if ($Table) {
+</table>
+% }
+<%INIT>
+$m->callback(
+ CallbackName => 'MassageCustomFields',
+ Object => $Object,
+ CustomFields => $CustomFields,
+);
+
+my $print_value = sub {
+ my ($cf, $value) = @_;
+ my $linked = $cf->LinkValueTo;
+ if ( $linked ) {
+ $m->out('<a href="'. $value->LinkValueTo .'" target="_new">');
+ }
+ my $comp = "ShowCustomField". $cf->Type;
+ $m->callback(
+ CallbackName => 'ShowComponentName',
+ Name => \$comp,
+ CustomField => $cf,
+ Object => $Object,
+ );
+ if ( $m->comp_exists( $comp ) ) {
+ $m->comp( $comp, Object => $value );
+ } else {
+ $m->out( $m->interp->apply_escapes( $value->Content, 'h' ) );
+ }
+ $m->out('</a>') if $linked;
+
+ # This section automatically populates a div with the "IncludeContentForValue" for this custom
+ # field if it's been defined
+ if ( $cf->IncludeContentForValue ) {
+ my $vid = $value->id;
+ $m->out( '<div class="object_cf_value_include" id="object_cf_value_'. $vid .'">' );
+ $m->print( loc("See also:") );
+ $m->out( '<a href="'. $value->IncludeContentForValue .'">' );
+ $m->print( $value->IncludeContentForValue );
+ $m->out( qq{</a></div>\n} );
+ $m->out( qq{<script><!--\nahah('} );
+ $m->print( $value->IncludeContentForValue );
+ $m->out( qq{', 'object_cf_value_$vid');\n--></script>\n} );
+ }
+};
+
+</%INIT>
+<%ARGS>
+$Object => undef
+$CustomFields => $Object->CustomFields
+$Table => 1
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowLink b/rt/share/html/Elements/ShowLink
new file mode 100644
index 0000000..6bd9021
--- /dev/null
+++ b/rt/share/html/Elements/ShowLink
@@ -0,0 +1,69 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<a href="<%$URI->Resolver->HREF%>">
+% if ($URI->IsLocal) {
+% my $member = $URI->Object;
+% if (UNIVERSAL::isa($member, "RT::Ticket")) {
+% my $inactive = $member->QueueObj->IsInactiveStatus($member->Status);
+
+<span class="<% $inactive ? 'ticket-inactive' : '' %>">
+<%$member->Id%>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<% loc($member->Status) %>]
+</span>
+
+% } elsif ( UNIVERSAL::can($member, 'Name')) {
+<%$URI->Resolver->AsString%>: <%$member->Name%>
+% } else {
+<%$URI->Resolver->AsString%>
+% }
+% } else {
+<%$URI->Resolver->AsString%>
+% }
+</a>
+<%ARGS>
+$URI => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowLinks b/rt/share/html/Elements/ShowLinks
new file mode 100755
index 0000000..569bad3
--- /dev/null
+++ b/rt/share/html/Elements/ShowLinks
@@ -0,0 +1,160 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+ <tr>
+ <td class="labeltop"><&|/l&>Depends on</&>: (<a href="<%$clone->{'DependsOn-new'}%>"><% loc('Create') %></a>)</td>
+ <td class="value">
+
+<%PERL>
+my ( @active, @inactive, @not_tickets );
+for my $link ( @{ $Ticket->DependsOn->ItemsArrayRef } ) {
+ my $target = $link->TargetObj;
+ if ( $target && $target->isa('RT::Ticket') ) {
+ if ( $target->QueueObj->IsInactiveStatus( $target->Status ) ) {
+ push( @inactive, $link->TargetURI );
+ }
+ else {
+ push( @active, $link->TargetURI );
+ }
+ }
+ else {
+ push( @not_tickets, $link->TargetURI );
+ }
+}
+</%PERL>
+
+
+<ul>
+% for my $Link (@not_tickets, @active, @inactive) {
+<li><& ShowLink, URI => $Link &></li>
+% }
+</ul>
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Depended on by</&>: (<a href="<%$clone->{'new-DependsOn'}%>"><% loc('Create') %></a>)</td>
+ <td class="value">
+<ul>
+% while (my $Link = $Ticket->DependedOnBy->Next) {
+<li><& ShowLink, URI => $Link->BaseURI &></li>
+% }
+</ul>
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Parents</&>: (<a href="<%$clone->{'MemberOf-new'}%>"><% loc('Create') %></a>)</td>
+ <td class="value"><& /Ticket/Elements/ShowParents, Ticket => $Ticket &></td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Children</&>: (<a href="<%$clone->{'new-MemberOf'}%>"><% loc('Create') %></a>)</td>
+ <td class="value"><& /Ticket/Elements/ShowMembers, Ticket => $Ticket &></td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Refers to</&>: (<a href="<%$clone->{'RefersTo-new'}%>"><% loc('Create') %></a>)</td>
+ <td class="value">
+<ul>
+% while (my $Link = $Ticket->RefersTo->Next) {
+<li><& ShowLink, URI => $Link->TargetURI &></li>
+% }
+</ul>
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Referred to by</&>: (<a href="<%$clone->{'new-RefersTo'}%>"><% loc('Create') %></a>)</td>
+ <td class="value">
+ <ul>
+% while (my $Link = $Ticket->ReferredToBy->Next) {
+% next if (UNIVERSAL::isa($Link->BaseObj, 'RT::Ticket') && $Link->BaseObj->Type eq 'reminder');
+<li><& ShowLink, URI => $Link->BaseURI &></li>
+% }
+</ul>
+ </td>
+ </tr>
+
+
+% # Allow people to add more rows to the table
+% $m->callback( %ARGS );
+
+</table>
+
+<%INIT>
+
+my $clone = {};
+my $path
+ = RT->Config->Get('WebPath')
+ . '/Ticket/Create.html?Queue='
+ . $Ticket->Queue
+ . '&CloneTicket='
+ . $Ticket->id;
+
+
+for my $relation (
+ qw(RefersTo ReferredToBy)) {
+ my $mode = $RT::Ticket::LINKTYPEMAP{$relation}->{Mode};
+ my $type = $RT::Ticket::LINKTYPEMAP{$relation}->{Type};
+ my $other = "Local" . $mode;
+ my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new';
+ $clone->{$field}
+ = $path . "&$field="
+ . join( '%20',
+ ( map { $_->$other() } @{ $Ticket->$relation->ItemsArrayRef } ),
+ $Ticket->id );
+}
+
+for my $relation ( qw(MemberOf Members DependsOn DependedOnBy)) {
+ my $mode = $RT::Ticket::LINKTYPEMAP{$relation}->{Mode};
+ my $type = $RT::Ticket::LINKTYPEMAP{$relation}->{Type};
+ my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new';
+ $clone->{$field} = $path . "&$field=". $Ticket->id ;
+}
+
+</%INIT>
+
+<%ARGS>
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowMemberships b/rt/share/html/Elements/ShowMemberships
new file mode 100644
index 0000000..84f7155
--- /dev/null
+++ b/rt/share/html/Elements/ShowMemberships
@@ -0,0 +1,88 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<ul>
+% while ( my $GroupMember = $GroupMembers->Next ) {
+% my $Group = RT::Group->new($session{'CurrentUser'});
+% $Group->Load($GroupMember->GroupId) or next;
+% if ($Group->Domain eq 'UserDefined') {
+<li><a href="<%RT->Config->Get('WebPath')%>/Admin/Groups/Modify.html?id=<% $Group->Id %>"><% $Group->Name %></a></li>
+% } elsif ($Group->Domain eq 'SystemInternal') {
+<li><em><% loc($Group->Type) %></em></li>
+% }
+% }
+</ul>
+<%INIT>
+my $GroupMembers = RT::GroupMembers->new($session{'CurrentUser'});
+$GroupMembers->Limit( FIELD => 'MemberId', VALUE => $UserObj->Id );
+my $alias = $GroupMembers->Join(
+ TYPE => 'left',
+ ALIAS1 => 'main',
+ FIELD1 => 'GroupId',
+ TABLE2 => 'Groups',
+ FIELD2 => 'id'
+);
+$GroupMembers->Limit(
+ ALIAS => $alias,
+ FIELD => 'Domain',
+ OPERATOR => '=',
+ VALUE => 'SystemInternal',
+);
+$GroupMembers->Limit(
+ ALIAS => $alias,
+ FIELD => 'Domain',
+ OPERATOR => '=',
+ VALUE => 'UserDefined',
+);
+$GroupMembers->OrderByCols(
+ { ALIAS => $alias, FIELD => 'Domain' },
+ { ALIAS => $alias, FIELD => 'Name' },
+);
+</%INIT>
+<%ARGS>
+$UserObj
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowSearch b/rt/share/html/Elements/ShowSearch
new file mode 100644
index 0000000..a7fc545
--- /dev/null
+++ b/rt/share/html/Elements/ShowSearch
@@ -0,0 +1,151 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|/Widgets/TitleBox,
+ title => loc($search->Description, $ProcessedSearchArg->{'Rows'}),
+ title_href => $query_link_url.$QueryString,
+ titleright => $customize ? loc('Edit') : '',
+ titleright_href => $customize,
+ hideable => $hideable &>
+<& $query_display_component, hideable => $hideable, %$ProcessedSearchArg, ShowNavigation => 0, Class => 'RT::Tickets' &>
+</&>
+<%init>
+my $search;
+my $user = $session{'CurrentUser'}->UserObj;
+my $SearchArg;
+my $customize;
+my $query_display_component = '/Elements/CollectionList';
+my $query_link_url = RT->Config->Get('WebPath').'/Search/Results.html';
+
+if ($SavedSearch) {
+ my ( $container_object, $search_id ) = _parse_saved_search($SavedSearch);
+ unless ( $container_object ) {
+ $m->out(loc("Either you have no rights to view saved search [_1] or identifier is incorrect", $SavedSearch));
+ return;
+ }
+ $search = $container_object->Attributes->WithId($search_id);
+ unless ( $search->Id && ref( $SearchArg = $search->Content ) eq 'HASH' ) {
+ $m->out(loc("Saved Search [_1] not found", $SavedSearch)) unless $IgnoreMissing;
+ return;
+ }
+ $SearchArg->{'SearchType'} ||= 'Ticket';
+ if ( $SearchArg->{SearchType} ne 'Ticket' ) {
+
+ # XXX: dispatch to different handler here
+ $query_display_component
+ = '/Search/Elements/' . $SearchArg->{SearchType};
+ $query_link_url = RT->Config->Get('WebURL') . "/Search/$SearchArg->{SearchType}.html";
+ } elsif ($ShowCustomize) {
+ $customize = RT->Config->Get('WebPath') . '/Search/Build.html?'
+ . $m->comp( '/Elements/QueryString',
+ SavedSearchLoad => $SavedSearch );
+ }
+} else {
+ ($search) = RT::System->new( $session{'CurrentUser'} ) ->Attributes->Named( 'Search - ' . $Name );
+ unless ( $search && $search->Id ) {
+ my (@custom_searches) = RT::System->new( $session{'CurrentUser'} )->Attributes->Named('SavedSearch');
+ foreach my $custom (@custom_searches) {
+ if ($custom->Description eq $Name) { $search = $custom; last }
+ }
+ unless ($search && $search->id) {
+ $m->out("Predefined search $Name not found");
+ return;
+ }
+ }
+
+ $SearchArg = $user->Preferences( $search, $search->Content );
+ if ($ShowCustomize) {
+ $customize = RT->Config->Get('WebPath') . '/Prefs/Search.html?'
+ . $m->comp( '/Elements/QueryString',
+ name => ref($search) . '-' . $search->Id );
+ }
+}
+
+# ProcessedSearchArg is a search with overridings, but for link we use
+# orginal search's poperties
+my $ProcessedSearchArg = $SearchArg;
+$ProcessedSearchArg = { %$SearchArg, %Override } if keys %Override;
+
+$m->callback(
+ %ARGS,
+ CallbackName => 'ModifySearch',
+ OriginalSearch => $SearchArg,
+ Search => $ProcessedSearchArg,
+);
+
+foreach ( $SearchArg, $ProcessedSearchArg ) {
+ $_->{'Format'} ||= '';
+
+ $_->{'Format'} =~ s/__(Web(?:Path|Base|BaseURL))__/scalar RT->Config->Get($1)/ge;
+ # extract-message-catalog would "$1", so we avoid quotes for loc calls
+ $_->{'Format'} =~ s/__loc\(["']?(\w+)["']?\)__/my $f = "$1"; loc($f)/ge;
+ if ( $_->{'Query'} =~ /__Bookmarked__/ ) {
+ $_->{'Rows'} = 999;
+ }
+ elsif ( $_->{'Query'} =~ /__Bookmarks__/ ) {
+ $_->{'Rows'} = 999;
+
+ # DEPRECATED: will be here for a while up to 3.10/4.0
+ my $bookmarks = $session{'CurrentUser'}->UserObj->FirstAttribute('Bookmarks');
+ $bookmarks = $bookmarks->Content if $bookmarks;
+ $bookmarks ||= {};
+ my $query = join(" OR ", map " id = '$_' ", grep $bookmarks->{ $_ }, keys %$bookmarks ) || 'id=0';
+ $_->{'Query'} =~ s/__Bookmarks__/( $query )/g;
+ }
+}
+
+my $QueryString = '?' . $m->comp( '/Elements/QueryString', %$SearchArg );
+
+</%init>
+<%ARGS>
+$Name => undef
+$SavedSearch => undef
+%Override => ()
+$IgnoreMissing => undef
+$hideable => 1
+$ShowCustomize => 1
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowUser b/rt/share/html/Elements/ShowUser
new file mode 100644
index 0000000..2fbdcbc
--- /dev/null
+++ b/rt/share/html/Elements/ShowUser
@@ -0,0 +1,69 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# Released under the terms of version 2 of the GNU Public License
+<%INIT>
+# $User is an RT::User object
+# $Address is Email::Address object
+if ( !$User && $Address ) {
+ $User = RT::User->new( $session{'CurrentUser'} );
+ $User->LoadByEmail( $Address->address );
+ unless ( $User->Id ) {
+ $m->comp( '/Elements/ShowUserVerbose', Address => $Address );
+ return;
+ }
+}
+if ( $style eq 'concise' ) {
+ $m->comp( '/Elements/ShowUserConcise', User => $User );
+}
+else { $m->comp( '/Elements/ShowUserVerbose', User => $User ); }
+</%INIT>
+<%ARGS>
+$User => undef
+$Address => undef
+$style => RT->Config->Get('UsernameFormat', $session{'CurrentUser'})
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowUserConcise b/rt/share/html/Elements/ShowUserConcise
new file mode 100644
index 0000000..3cdba10
--- /dev/null
+++ b/rt/share/html/Elements/ShowUserConcise
@@ -0,0 +1,52 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# Released under the terms of version 2 of the GNU Public License
+<% $User->RealName || $User->Name %>\
+<%ARGS>
+$User
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowUserEmailFrequency b/rt/share/html/Elements/ShowUserEmailFrequency
new file mode 100644
index 0000000..b765494
--- /dev/null
+++ b/rt/share/html/Elements/ShowUserEmailFrequency
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+(<% loc($frequency) %>)
+<%INIT>
+my $frequency = $User->EmailFrequency( Ticket => $Ticket );
+return unless $frequency;
+</%INIT>
+<%ARGS>
+$User
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowUserVerbose b/rt/share/html/Elements/ShowUserVerbose
new file mode 100644
index 0000000..82d65b0
--- /dev/null
+++ b/rt/share/html/Elements/ShowUserVerbose
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# Released under the terms of version 2 of the GNU Public License
+<%$Address->format%>\
+<%INIT>
+my ($phrase, $address, $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;
+ $comment = "($comment)" if defined $comment and length $comment;
+ $Address = Email::Address->new( $phrase, $address, $comment );
+}
+
+$Address->comment('') if $comment && lc $Address->user eq lc $comment;
+if ( $phrase and my ( $l, $r ) = ( $phrase =~ /^(\w+) (\w+)$/ ) ) {
+ $Address->phrase('')
+ if $Address->user =~ /^\Q$l\E.\Q$r\E$/
+ || $Address->user =~ /^\Q$r\E.\Q$l\E$/;
+}
+
+</%INIT>
+<%ARGS>
+$User => undef
+$Address => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/SimpleSearch b/rt/share/html/Elements/SimpleSearch
new file mode 100755
index 0000000..16b55fc
--- /dev/null
+++ b/rt/share/html/Elements/SimpleSearch
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<form action="<% RT->Config->Get('WebPath') %><% $SendTo %>" id="simple-search">
+ <input size="12" name="q" autocomplete="off" accesskey="0" class="field" value="<&|/l&>Search</&>..." onfocus="if (this.value=='<&|/l&>Search</&>...') this.value=''" />
+</form>
+<%ARGS>
+$SendTo => '/Search/Simple.html'
+</%ARGS>
diff --git a/rt/share/html/Elements/Submit b/rt/share/html/Elements/Submit
new file mode 100755
index 0000000..79d87a6
--- /dev/null
+++ b/rt/share/html/Elements/Submit
@@ -0,0 +1,103 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="submit"
+% if($id) {
+id="<%$id%>"
+% }
+>
+ <div class="extra-buttons">
+% if ($CheckAll) {
+ <input type="button" value="<%$CheckAllLabel%>" onclick="setCheckbox(this.form, '<% $CheckboxName %>', true);return false;" class="button" />
+% }
+% if ($ClearAll) {
+ <input type="button" value="<%$ClearAllLabel%>" onclick="setCheckbox(this.form, '<% $CheckboxName %>', false);return false;" class="button" />
+% }
+% if ($Reset) {
+ <input type="reset" value="<%$ResetLabel%>" class="button" />
+% }
+ </div>
+ <div class="buttons">
+% if ( $Back ) {
+ <span class="caption"><%$BackCaption%></span>
+ <input type="submit" <% $BackOnClick ? qq[ onclick="$BackOnClick"] : '' | n %> <%
+ $BackName ? qq[ name="$BackName"] : '' | n %> value="<%$BackLabel%>" class="button" />
+% }
+
+% if ($AlternateLabel) {
+ <span class="caption"><%$AlternateCaption%></span>
+ <input type="submit" <% $OnClick ? qq[ onclick="$OnClick"] : '' | n %> <% $Name ? qq[ name="$Name"] : '' | n %> value="<%$AlternateLabel%>" class="button" />
+% } else {
+ <span class="caption"><%$Caption%></span>
+ <input type="submit" <% $OnClick ? qq[ onclick="$OnClick"] : '' | n %> <% $Name ? qq[ name="$Name"] : '' | n %> value="<%$Label%>" class="button" />
+% }
+ </div>
+ <div class="submit-clear"></div>
+</div>
+
+<%ARGS>
+$color => undef
+$Caption => ''
+$AlternateCaption => undef
+$AlternateLabel => undef
+$Label => loc('Submit')
+$Name => undef
+$CheckAll => undef
+$CheckAllLabel => loc('Check All')
+$ClearAll => undef
+$ClearAllLabel => loc('Clear All')
+$CheckboxName => ''
+$Back => undef
+$BackName => 'Back'
+$BackLabel => loc('Back')
+$BackCaption => ''
+$BackOnClick => undef
+$OnClick => undef
+$Reset => undef
+$ResetLabel => loc('Reset')
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/Tabs b/rt/share/html/Elements/Tabs
new file mode 100755
index 0000000..0e0ab97
--- /dev/null
+++ b/rt/share/html/Elements/Tabs
@@ -0,0 +1,128 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/PageLayout,
+ current_toptab => $current_toptab,
+ current_tab => $current_tab,
+ toptabs => $toptabs,
+ topactions => $topactions,
+ tabs => $tabs,
+ actions => $actions,
+ subactions => $subactions,
+ title => $Title,
+ show_menu => $show_menu,
+&>
+<a name="skipnav" id="skipnav" accesskey="8"></a>
+<%INIT>
+my $action;
+my $basetopactions = {
+ A => { html => $m->scomp('/Elements/CreateTicket')
+ },
+ B => { html => $m->scomp('/Elements/SimpleSearch')
+ }
+ };
+my $basetabs = { A => { title => loc('Homepage'),
+ path => 'index.html',
+ },
+ Ab => { title => loc('Simple Search'),
+ path => 'Search/Simple.html'
+ },
+ B => { title => loc('Tickets'),
+ path => 'Search/Build.html'
+ },
+ C => { title => loc('Tools'),
+ path => 'Tools/index.html'
+ },
+ };
+
+if ($session{'CurrentUser'}->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System )) {
+ $basetabs->{E} = { title => loc('Configuration'),
+ path => 'Admin/',
+ };
+}
+
+if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf',
+ Object => $RT::System )) {
+ $basetabs->{K} = { title => loc('Preferences'),
+ path => 'Prefs/Other.html'
+ };
+}
+
+if ($session{'CurrentUser'}->HasRight( Right => 'ShowApprovalsTab',
+ Object => $RT::System )) {
+ $basetabs->{P} = { title => loc('Approval'),
+ path => 'Approvals/'
+ };
+}
+
+if (!defined $toptabs) {
+ $toptabs = $basetabs;
+}
+if (!defined $topactions) {
+ $topactions = $basetopactions;
+}
+
+# Now let callbacks add their extra tabs
+$m->callback(
+ topactions => $topactions,
+ toptabs => $toptabs,
+ %ARGS
+);
+
+</%INIT>
+<%ARGS>
+$current_toptab => undef
+$current_tab => undef
+$toptabs => undef
+$topactions => undef
+$tabs => undef
+$actions => undef
+$subactions => undef
+$Title => undef
+$show_menu => 1
+</%ARGS>
diff --git a/rt/share/html/Elements/TicketList b/rt/share/html/Elements/TicketList
new file mode 100644
index 0000000..059ad7b
--- /dev/null
+++ b/rt/share/html/Elements/TicketList
@@ -0,0 +1,70 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+$m->comp(
+ '/Elements/CollectionList',
+ %ARGS,
+ Class => 'RT::Tickets'
+ );
+</%INIT>
+<%ARGS>
+$Collection => undef
+$Query => undef
+$Format => RT->Config->Get('DefaultSearchResultFormat')
+$DisplayFormat => undef
+$Order => undef
+$OrderBy => undef
+$Rows => 50
+$Page => 1
+$Title => loc('Ticket Search')
+$BaseURL => undef
+$AllowSorting => undef
+$ShowNavigation => 1
+$ShowHeader => 1
+$ShowEmpty => 0
+</%ARGS>
diff --git a/rt/share/html/Elements/TitleBox b/rt/share/html/Elements/TitleBox
new file mode 100644
index 0000000..1efb45a
--- /dev/null
+++ b/rt/share/html/Elements/TitleBox
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+# For compatibility with 3.4
+$m->comp('/Widgets/TitleBox', %ARGS );
+</%init>
diff --git a/rt/share/html/Elements/TitleBoxEnd b/rt/share/html/Elements/TitleBoxEnd
new file mode 100644
index 0000000..1c10a86
--- /dev/null
+++ b/rt/share/html/Elements/TitleBoxEnd
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+# For compatibility with 3.4
+$m->comp('/Widgets/TitleBoxEnd', %ARGS );
+</%init>
diff --git a/rt/share/html/Elements/TitleBoxStart b/rt/share/html/Elements/TitleBoxStart
new file mode 100644
index 0000000..65e7503
--- /dev/null
+++ b/rt/share/html/Elements/TitleBoxStart
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+# For compatibility with 3.4
+$m->comp('/Widgets/TitleBoxStart', %ARGS );
+</%init>
diff --git a/rt/share/html/Elements/ValidateCustomFields b/rt/share/html/Elements/ValidateCustomFields
new file mode 100644
index 0000000..0253e1c
--- /dev/null
+++ b/rt/share/html/Elements/ValidateCustomFields
@@ -0,0 +1,100 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+my ($valid, @res) = (1, ());
+$CustomFields->GotoFirstItem;
+while ( my $CF = $CustomFields->Next ) {
+ my $field = $NamePrefix . $CF->Id . "-Value";
+
+ my $value;
+ if ($ARGSRef->{"${field}s-Magic"} and exists $ARGSRef->{"${field}s"}) {
+ $value = $ARGSRef->{"${field}s"};
+
+ # We only validate Single Combos -- multis can never be user input
+ next if ref $value;
+ }
+ else {
+ $value = $ARGSRef->{$field};
+ }
+ $m->notes(('Field-' . $CF->Id) => $value);
+
+ my @values = ();
+ if ( ref $value eq 'ARRAY' ) {
+ @values = @$value;
+ } elsif ( $CF->Type =~ /text/i ) {
+ @values = ($value);
+ } else {
+ @values = split /\r*\n/, ( defined $value ? $value : '');
+ }
+ @values = grep $_ ne '',
+ map {
+ s/\r+\n/\n/g;
+ s/^\s+//;
+ s/\s+$//;
+ $_;
+ }
+ grep defined, @values;
+ @values = ('') unless @values;
+
+ foreach my $value( @values ) {
+ next if $CF->MatchPattern($value);
+
+ my $msg = loc("Input must match [_1]", $CF->FriendlyPattern);
+ $m->notes( ('InvalidField-' . $CF->Id) => $msg );
+ push @res, $msg;
+ $valid = 0;
+ }
+}
+$m->notes('ValidFields', $valid);
+return wantarray? ($valid, @res): $valid;
+</%INIT>
+<%ARGS>
+$CustomFields
+$ARGSRef
+$NamePrefix => "Object-RT::Ticket--CustomField-"
+</%ARGS>
diff --git a/rt/share/html/Helpers/Autocomplete/CustomFieldValues b/rt/share/html/Helpers/Autocomplete/CustomFieldValues
new file mode 100644
index 0000000..c7630c9
--- /dev/null
+++ b/rt/share/html/Helpers/Autocomplete/CustomFieldValues
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<ul>
+% while( my $value = $values->Next ) {
+% my $desc = $value->Description || '';
+% $desc = '<span class="informal"> ('. $m->interp->apply_escapes( $desc, 'h' ) .')</span>' if $desc;
+<li><% $value->Name %><% $desc |n %></li>
+% }
+</ul>
+% $m->abort;
+<%INIT>
+my ($CustomField, $Value);
+while( my($k, $v) = each %ARGS ) {
+ next unless $k =~ /^Object-.*?-\d*-CustomField-(\d+)-Values?$/;
+ ($CustomField, $Value) = ($1, $v);
+ last;
+}
+$m->abort unless $CustomField;
+my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} );
+$CustomFieldObj->Load( $CustomField );
+my $values = $CustomFieldObj->Values;
+$values->Limit(
+ FIELD => 'Name',
+ OPERATOR => 'LIKE',
+ VALUE => $Value,
+ SUBCLAUSE => 'autcomplete',
+);
+$values->Limit(
+ ENTRYAGGREGATOR => 'OR',
+ FIELD => 'Description',
+ OPERATOR => 'LIKE',
+ VALUE => $Value,
+ SUBCLAUSE => 'autcomplete',
+);
+
+</%INIT>
diff --git a/rt/share/html/Helpers/CalPopup.html b/rt/share/html/Helpers/CalPopup.html
new file mode 100644
index 0000000..96e8d77
--- /dev/null
+++ b/rt/share/html/Helpers/CalPopup.html
@@ -0,0 +1,133 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, ShowBar => 0 &>
+%# From /Elements/Header
+</div>
+<div id="body" class="calpopup">
+
+<a href="#" onclick="window.close(); return false;"><&|/l&>Close window</&></a>
+
+<div class="calendar">
+ <table>
+ <caption>
+ <a class="prev" href="CalPopup.html?DisplayedMonth=<%$prev_month%>&DisplayedYear=<%$prev_year%>&field=<%$field%>"><&|/l&>Prev</&></a>
+ <span class="month"><% $months[$DisplayedMonth-1] %> <% $DisplayedYear %></span>
+ <a class="next" href="CalPopup.html?DisplayedMonth=<%$next_month%>&DisplayedYear=<%$next_year%>&field=<%$field%>"><&|/l&>Next</&></a>
+ </caption>
+ <tr>
+% foreach my $wday (@weekdays) {
+ <th><%$wday%></th>
+% }
+ </tr>
+% foreach my $week (@cal) {
+ <tr>
+% foreach my $day (@{$week}) {
+ <td>
+% if ($day) {
+% my $datestr = sprintf('%04d-%02d-%02d', $DisplayedYear, $DisplayedMonth, $day);
+% my $class;
+% if ( ( $DisplayedYear == $today[5] + 1900 ) && ( $DisplayedMonth == $today[4] + 1 ) && ( $day == $today[3] ) ) {
+% $class = 'today';
+% }
+ <a <% $class && 'class="'.$class.'"' |n%> href="#" onclick="updateParentField('<% $field %>','<% $datestr %>'); return false;"><% $day %></a>
+% } else {
+ &nbsp;
+% }
+ </td>
+% } #foreach $day
+ </tr>
+% } # foreach $week
+ </table>
+</div>
+</div>
+</body>
+</html>
+% $m->abort();
+
+<%init>
+use Calendar::Simple;
+my @today = localtime(time());
+
+my @weekdays;
+push @weekdays, loc($_)
+ for qw(Sun Mon Tue Wed Thu Fri Sat);
+
+my @months;
+push @months, loc($_)
+ for qw(January February March April May June July August
+ September October November December);
+
+unless ($DisplayedYear) {
+ $DisplayedMonth = $today[4] + 1;
+ $DisplayedYear = ($today[5] + 1900);
+}
+
+my ($prev_year, $next_year, $prev_month, $next_month);
+$prev_month = $next_month = $DisplayedMonth;
+$prev_year = $next_year = $DisplayedYear;
+
+$next_month++;
+$prev_month--;
+
+if ($DisplayedMonth == 12) {
+ $next_year++;
+ $next_month = 1;
+}
+elsif ($DisplayedMonth == 1) {
+ $prev_month = 12;
+ $prev_year--;
+}
+
+my @cal = calendar($DisplayedMonth, $DisplayedYear);
+</%init>
+
+<%args>
+$field => 'none'
+$DisplayedMonth => undef
+$DisplayedYear => undef
+</%args>
diff --git a/rt/share/html/Helpers/Toggle/TicketBookmark b/rt/share/html/Helpers/Toggle/TicketBookmark
new file mode 100644
index 0000000..45fe708
--- /dev/null
+++ b/rt/share/html/Helpers/Toggle/TicketBookmark
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$id
+</%ARGS>
+<%INIT>
+$m->comp('/Ticket/Elements/Bookmark', id => $id, Toggle => 1);
+$m->abort();
+</%INIT>
diff --git a/rt/share/html/Install/Basics.html b/rt/share/html/Install/Basics.html
new file mode 100644
index 0000000..7345c47
--- /dev/null
+++ b/rt/share/html/Install/Basics.html
@@ -0,0 +1,104 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 3, 7) .': '. loc('Customize Basics') &>
+
+<& Elements/Errors, Errors => \@errors &>
+
+<p>
+<&|/l&>These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user.</&>
+</p>
+
+<form method="post">
+<& /Widgets/BulkEdit, Types => \@Types,Meta => $RT::Installer->{Meta},
+ CurrentValue => RT::Installer->CurrentValues(@Types) &>
+
+<input type="hidden" name="Run" value="1">
+<& /Elements/Submit,
+ Label => loc('Next') .': '. loc('Customize Email Configuration'),
+ Back => 1, BackLabel => loc('Back') .': '. loc('Check Database Credentials'),
+&>
+</form>
+</&>
+
+
+<%init>
+my @errors;
+
+my @Types = qw/rtname WebDomain WebPort Password/;
+
+if ( $Run ) {
+
+ $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS,
+ Store => $RT::Installer->{InstallConfig},
+ Meta => $RT::Installer->{Meta} );
+
+ if ( $ARGS{WebPort} && $ARGS{WebPort} !~ /^\d+$/ ) {
+ push @errors, loc("Invalid [_1]: it should be a number", 'WebPort');
+ }
+
+ unless ( $ARGS{Password} ) {
+ push @errors, loc("You must enter an Administrative password");
+ }
+
+ if ( $Back ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/DatabaseDetails.html');
+ }
+
+ unless ( @errors ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Sendmail.html');
+ }
+}
+
+</%init>
+
+<%args>
+$Run => undef
+$Back => undef
+</%args>
diff --git a/rt/share/html/Install/DatabaseDetails.html b/rt/share/html/Install/DatabaseDetails.html
new file mode 100644
index 0000000..e690eab
--- /dev/null
+++ b/rt/share/html/Install/DatabaseDetails.html
@@ -0,0 +1,201 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 2, 7 ) .': '. loc('Check Database Credentials') &>
+
+% if ( @errors ) {
+<& Elements/Errors, Errors => \@errors &>
+<p>
+<&|/l&>Tell us a little about how to find the database RT will be using</&>
+<p>
+<&|/l&>We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database.</&>
+</p>
+<p>
+<&|/l&>When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database</&>
+
+% } elsif ( @results ) {
+<& /Elements/ListActions, actions => \@results &>
+
+<p>
+<&|/l&>We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT.</&>
+
+% }
+
+<form method="post">
+<input type="hidden" name="Run" value="1">
+% if ( @results && !@errors ) {
+<& /Elements/Submit,
+ Label => loc('Next') .': '. loc('Customize Basics'),
+ Back => 1, BackLabel => loc('Back') .': '. loc('Select Database Type'),
+ Name => 'Next',
+&>
+% } else {
+<& /Widgets/BulkEdit, Types => \@Types, Meta => $RT::Installer->{Meta},
+ CurrentValue => { %{RT::Installer->CurrentValues(@Types)},
+ DatabaseAdmin =>
+ RT::Installer->CurrentValue( 'DatabaseAdmin' ) ||
+ $RT::Installer->{InstallConfig}{DatabaseAdmin} ||
+ ( $db_type eq 'mysql' ? 'root'
+ : $db_type eq 'Pg' ? 'postgres'
+ : '' ),
+ }
+ &>
+<& /Elements/Submit,
+ Label => loc('Check Database Connectivity'),
+ Back => 1, BackLabel => loc('Back') .': '. loc('Choose Database Engine'),
+&>
+% }
+
+</form>
+</&>
+
+<%init>
+my (@results, @errors);
+my $ConnectionSucceeded;
+
+my @Types = 'DatabaseName';
+
+my $db_type = $RT::Installer->{InstallConfig}{DatabaseType};
+
+unless ( $db_type eq 'SQLite' ) {
+ push @Types, 'DatabaseHost', 'DatabasePort', 'DatabaseAdmin',
+ 'DatabaseAdminPassword', 'DatabaseUser', 'DatabasePassword';
+}
+if ( $db_type eq 'Pg' ) {
+ push @Types, 'DatabaseRequireSSL';
+}
+
+
+if ( $Run ) {
+
+ if ( $Back ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/DatabaseType.html');
+ }
+
+ if ( $ARGS{Next} ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Basics.html');
+ }
+
+ $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS,
+ Store => $RT::Installer->{InstallConfig},
+ Meta => $RT::Installer->{Meta}, KeepUndef => 1 );
+
+
+ my ( $status, $msg ) = RT::Installer->SaveConfig;
+ if ( $status ) {
+ delete $INC{'RT_SiteConfig.pm'};
+ RT->LoadConfig;
+ RT::Handle->FinalizeDatabaseType();
+ # dba connect systemdsn
+ my $dbh = DBI->connect(
+ RT::Handle->SystemDSN, $ARGS{DatabaseAdmin}, $ARGS{DatabaseAdminPassword}, { RaiseError => 0, PrintError => 0 },
+ );
+
+ if ( $dbh ) {
+ push @results, loc('Connection succeeded');
+ # dba connect dsn, which has table info
+ $dbh = DBI->connect(
+ RT::Handle->DSN, $ARGS{DatabaseAdmin}, $ARGS{DatabaseAdminPassword}, { RaiseError => 0, PrintError => 0 },
+ );
+
+ if ( $dbh ) {
+ # check if table Users exists
+ eval {
+ my $dbh = DBI->connect(
+ RT::Handle->DSN,
+ $ARGS{DatabaseAdmin},
+ $ARGS{DatabaseAdminPassword},
+ { RaiseError => 1, PrintError => 0 },
+ );
+
+ my $sth = $dbh->prepare('select * from Users');
+ };
+
+ unless ( $@ ) {
+
+ my $sth = $dbh->prepare('select id from Users where Name=?');
+ $sth->execute('RT_System');
+ if ( $sth->fetchrow_array ) {
+ $RT::Installer->{DatabaseAction} = 'none';
+ push @results, loc("[_1] appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below", $RT::DatabaseName);
+ }
+ else {
+ $RT::Installer->{DatabaseAction} = 'acl,coredata,insert';
+ push @results, loc("[_1] already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT.", $RT::DatabaseName);
+ }
+ }
+ else {
+ $RT::Installer->{DatabaseAction} = 'schema,acl,coredata,insert';
+ push @results, loc("[_1] already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT.", $RT::DatabaseName );
+ }
+
+ }
+ else {
+ $RT::Installer->{DatabaseAction} =
+ 'create,schema,acl,coredata,insert';
+ }
+ }
+ else {
+ $RT::Installer->{DatabaseAction} = 'error';
+ push @errors, loc("Failed to connect to database: [_1]",
+ $DBI::errstr );
+ }
+ }
+ else {
+ push @results, loc($msg);
+ }
+
+}
+
+</%init>
+
+<%args>
+$Run => undef
+$Back => undef
+</%args>
diff --git a/rt/share/html/Install/DatabaseType.html b/rt/share/html/Install/DatabaseType.html
new file mode 100644
index 0000000..c236dcb
--- /dev/null
+++ b/rt/share/html/Install/DatabaseType.html
@@ -0,0 +1,90 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|Elements/Wrapper, Title => loc('Step [_1] of [_2]', 1, 7 ) .': '. loc('Choose Database Engine') &>
+
+<div class="intro">
+<p>
+<&|/l&>RT works with a number of different databases. <b>MySQL</b>, <b>PostgreSQL</b>, <b>Oracle</b> and <b>SQLite</b> are all supported.</&>
+</p>
+<p>
+<&|/l&>You should choose the database you or your local database administrator is most comfortable with.</&>
+</p>
+ <p><b>
+<&|/l&>SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server.</&>
+</b></p>
+<p>
+<&|/l, '<a href="http://search.cpan.org" target="_new">CPAN</a>' &>If your preferred database isn't listed in the dropdown below, that means RT couldn't find a <i>database driver</i> for it installed locally. You may be able to remedy this by using [_1] to download and install DBD::MySQL, DBD::Oracle or DBD::Pg.</&>
+</p>
+</div>
+
+<form method="post">
+<& /Widgets/BulkEdit, Types => \@Types, Meta => $RT::Installer->{Meta},
+ CurrentValue => RT::Installer->CurrentValues(@Types) &>
+
+<input type="hidden" name="Run" value="1">
+<& /Elements/Submit, Label => loc('Next') .': '. loc( 'Check Database Credentials') &>
+</form>
+</&>
+<%init>
+
+my @Types = 'DatabaseType';
+
+if ( $Run ) {
+
+ $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS, Meta
+ => $RT::Installer->{Meta}, Store => $RT::Installer->{InstallConfig} );
+
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/DatabaseDetails.html');
+}
+
+
+</%init>
+
+<%args>
+$Run => undef
+</%args>
diff --git a/rt/share/html/Install/Elements/Errors b/rt/share/html/Install/Elements/Errors
new file mode 100644
index 0000000..d377689
--- /dev/null
+++ b/rt/share/html/Install/Elements/Errors
@@ -0,0 +1,63 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if (@Errors) {
+<&| "/Widgets/TitleBox", title => loc('Error'), hideable => 0, class => 'error' &>
+<ul>
+% for my $Error ( @Errors ) {
+<li>
+<% $Error %>
+</li>
+% }
+</ul>
+
+</&>
+% }
+
+<%args>
+@Errors
+</%args>
diff --git a/rt/share/html/Install/Elements/Wrapper b/rt/share/html/Install/Elements/Wrapper
new file mode 100644
index 0000000..f3da5fa
--- /dev/null
+++ b/rt/share/html/Install/Elements/Wrapper
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&/Elements/Header, title => $Title &>
+<& /Elements/PageLayout,
+ title => $Title,
+ toptabs => { a => { title => loc('Install RT'),
+ path => 'Install/'
+ },
+ b => { title => loc('Buy Support'),
+ path => 'mailto:sales@bestpractical.com'}
+ },
+
+ show_menu => 1
+&>
+<a name="skipnav" id="skipnav" accesskey="8"></a>
+<% $m->content() |n%>
+<& /Elements/Footer &>
+% $m->abort;
+<%args>
+$Title => 'Install RT'
+</%args>
diff --git a/rt/share/html/Install/Finish.html b/rt/share/html/Install/Finish.html
new file mode 100644
index 0000000..2ce97c4
--- /dev/null
+++ b/rt/share/html/Install/Finish.html
@@ -0,0 +1,95 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 7, 7) .': '. loc('Finish') &>
+
+<div class="intro">
+<p>
+<&|/l&>Click "Finish Installation" below to complete this wizard.</&>
+</p>
+
+<p>
+<&|/l&>You should be taken directly to a login page. You'll be able to log in with username of <tt>root</tt> and the password you set earlier.</&>
+</p>
+
+<p>
+<&|/l&>If you've change the Port that RT runs on, you'll need to restart the server in order to log in.</&>
+</p>
+
+<p>
+<&|/l, RT::Installer->ConfigFile &>The settings you've chosen are stored in [_1].</&>
+</p>
+</div>
+
+<form method="post">
+<input type="hidden" value="1" name="Run" />
+<& /Elements/Submit, Label => 'Finish Installation' &>
+</form>
+
+</&>
+<%init>
+if ( $Run ) {
+ RT->InstallMode(0);
+ RT->ConnectToDatabase();
+ RT->InitSystemObjects();
+ RT->InitClasses();
+ RT->InitPlugins();
+
+ system( 'chmod -w ' . RT::Installer->ConfigFile ) &&
+ $RT::Logger->error(
+ 'failed to make ' . RT::Installer->ConfigFile . ' readonly' );
+ my $root = RT::User->new( $RT::SystemUser );
+ $root->Load('root');
+ $root->SetPassword( $RT::Installer->{InstallConfig}{Password} );
+
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL'));
+}
+</%init>
+
+<%args>
+$Run => undef
+</%args>
diff --git a/rt/share/html/Install/Global.html b/rt/share/html/Install/Global.html
new file mode 100644
index 0000000..649fd23
--- /dev/null
+++ b/rt/share/html/Install/Global.html
@@ -0,0 +1,121 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 5, 7 ) .': '. loc('Customize Email Addresses') &>
+
+<& Elements/Errors, Errors => \@errors &>
+
+<p><&|/l&>Help us set up some useful defaults for RT.</&></p>
+
+<p><&|/l&>When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the <tt>rt-mailgate</tt> program.</&></p>
+
+<p><&|/l&>By default, RT will use the timezone of your system. This lets you set a global default for the display of dates and times in RT. Your users can choose a different Timezone in their preferences.</&></p>
+<form method="post">
+<& /Widgets/BulkEdit, Types => \@Types,Meta => $RT::Installer->{Meta},
+ CurrentValue => RT::Installer->CurrentValues(@Types)
+&>
+
+<input type="hidden" name="Run" value="1">
+<& /Elements/Submit,
+ Label => $RT::Installer->{DatabaseAction} eq 'none' ?
+ loc('Next') .': '. loc('Finish') : loc('Next') .': '. loc('Initialize Database'),
+ Back => 1, BackLabel => loc('Back') .': '. loc('Customize Email Configuration'),
+&>
+</form>
+</&>
+<%init>
+my @errors;
+
+my @Types = qw/CommentAddress CorrespondAddress Timezone/;
+
+if ( $Run ) {
+
+ $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS,
+ Store => $RT::Installer->{InstallConfig},
+ Meta => $RT::Installer->{Meta}, KeepUndef => 1 );
+
+ if ( $Back ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Sendmail.html');
+ }
+
+ for ( qw/CommentAddress CorrespondAddress/ ) {
+ if ( $ARGS{$_} && $ARGS{$_} !~ /.+@.+/ ) {
+ push @errors,
+ loc("Invalid [_1]: '[_2]' doesn't look like an email address",
+ $_, $ARGS{$_});
+ }
+ }
+
+ unless ( @errors ) {
+ my ( $status, $msg ) = RT::Installer->SaveConfig;
+
+ if ( $status ) {
+ delete $INC{'RT_SiteConfig.pm'};
+ RT->LoadConfig;
+
+ if ( $RT::Installer->{DatabaseAction} ne 'none' ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Initialize.html');
+ }
+ else {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Finish.html');
+ }
+ }
+ else {
+ push @errors, loc($msg);
+ }
+ }
+}
+
+</%init>
+
+<%args>
+$Run => undef
+$Back => undef
+</%args>
diff --git a/rt/share/html/Install/Initialize.html b/rt/share/html/Install/Initialize.html
new file mode 100644
index 0000000..e1237c3
--- /dev/null
+++ b/rt/share/html/Install/Initialize.html
@@ -0,0 +1,142 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|Elements/Wrapper, Title => loc('Step [_1] of [_2]', 6, 7) .': '. loc('Initialize Database') &>
+
+<& Elements/Errors, Errors => \@errors &>
+
+% unless ( @errors ) {
+<div>
+<&|/l&>Click "Initialize Database" to create RT's database and insert initial metadata. This may take a few moments</&>
+</div>
+% }
+
+<form method="post">
+<input type="hidden" name="Run" value="1">
+<& /Elements/Submit,
+ Label => loc('Initialize Database'),
+ Back => 1, BackLabel => loc('Back') .': '. loc('Customize Email Addresses'),
+&>
+</form>
+</&>
+<%init>
+my @errors;
+if ( $Run ) {
+ if ( $Back ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Global.html');
+ }
+
+ my @actions = split /,/, $RT::Installer->{DatabaseAction};
+
+ my $sysdbh = DBI->connect(
+ RT::Handle->SystemDSN,
+ $RT::Installer->{InstallConfig}{DatabaseAdmin},
+ $RT::Installer->{InstallConfig}{DatabaseAdminPassword},
+ { RaiseError => 0, PrintError => 0 },
+ );
+ die $DBI::errstr unless $sysdbh;
+
+ my ( $status, $msg ) = ( 1, '' );
+
+ if ( $actions[0] eq 'create' ) {
+ ($status, $msg) = RT::Handle->CreateDatabase( $sysdbh );
+ unless ( $status ) {
+ push @errors, loc('ERROR: [_1]', $msg );
+ }
+
+ shift @actions; # shift the 'create' action since its job is done.
+ }
+
+ if ( $status ) {
+
+ my $dbh = DBI->connect(
+ RT::Handle->DSN, $RT::Installer->{InstallConfig}{DatabaseAdmin},
+ $RT::Installer->{InstallConfig}{DatabaseAdminPassword},
+ { RaiseError => 0, PrintError => 0 },
+ );
+ die $DBI::errstr unless $dbh;
+
+ foreach my $action ( @actions ) {
+ ($status, $msg) = (1, '');
+ if ( $action eq 'schema' ) {
+ ($status, $msg) = RT::Handle->InsertSchema( $dbh );
+ }
+ elsif ( $action eq 'acl' ) {
+ ($status, $msg) = RT::Handle->InsertACL( $dbh );
+ }
+ elsif ( $action eq 'coredata' ) {
+ $RT::Handle = new RT::Handle;
+ $RT::Handle->dbh( undef );
+ RT::ConnectToDatabase();
+ RT::InitLogging();
+ ($status, $msg) = $RT::Handle->InsertInitialData;
+ }
+ elsif ( $action eq 'insert' ) {
+ $RT::Handle = new RT::Handle;
+ RT::Init();
+ my $file = $RT::EtcPath . "/initialdata";
+ ($status, $msg) = $RT::Handle->InsertData( $file );
+ }
+ unless ( $status ) {
+ push @errors, loc('ERROR: [_1]', $msg);
+ last;
+ }
+ }
+ }
+
+ unless ( @errors ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Finish.html');
+ }
+}
+</%init>
+<%args>
+$Run => undef
+$Back => undef
+</%args>
+
diff --git a/rt/share/html/Install/Sendmail.html b/rt/share/html/Install/Sendmail.html
new file mode 100644
index 0000000..ae5857c
--- /dev/null
+++ b/rt/share/html/Install/Sendmail.html
@@ -0,0 +1,107 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|Elements/Wrapper, Title => loc('Step [_1] of [_2]', 4, 7 ) .': '. loc('Customize Email Configuration') &>
+
+<& Elements/Errors, Errors => \@errors &>
+
+<p>
+<&|/l&>RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT.</&>
+</p>
+
+<form method="post">
+<& /Widgets/BulkEdit, Types => \@Types,Meta => $RT::Installer->{Meta},
+ CurrentValue => RT::Installer->CurrentValues(@Types)
+&>
+
+<input type="hidden" name="Run" value="1">
+<& /Elements/Submit,
+ Label => loc('Next') .': '. loc('Customize Email Addresses'),
+ Back => 1, BackLabel => loc('Back' ) .': '. loc('Customize Basics'),
+&>
+</form>
+</&>
+<%init>
+my @errors;
+
+my @Types = qw/SendmailPath OwnerEmail/;
+
+if ( $Run ) {
+
+ $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS,
+ Store => $RT::Installer->{InstallConfig},
+ Meta => $RT::Installer->{Meta}, KeepUndef => 1);
+
+ if ( $Back ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Basics.html');
+ }
+
+
+ unless ( -e $ARGS{SendmailPath} ) {
+ push @errors, loc( "[_1] doesn't exist.", $ARGS{SendmailPath} );
+ }
+
+ if ( ! $ARGS{OwnerEmail} || $ARGS{OwnerEmail} !~ /.+@.+/ ) {
+ push @errors,
+ loc("Invalid [_1]: '[_2]' doesn't look like an email address",
+ 'Administrator Email', $ARGS{OwnerEmail} );
+ }
+
+
+ unless ( @errors ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') .
+'Install/Global.html');
+ }
+}
+
+</%init>
+
+<%args>
+$Run => undef
+$Back => undef
+</%args>
diff --git a/rt/share/html/Install/autohandler b/rt/share/html/Install/autohandler
new file mode 100644
index 0000000..0db00a5
--- /dev/null
+++ b/rt/share/html/Install/autohandler
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%flags>
+inherit => undef
+</%flags>
+
+<%init>
+
+if (RT->InstallMode) {
+ $r->content_type("text/html; charset=utf-8");
+ require RT::Installer;
+
+ $RT::Installer->{'CurrentUser'} = RT::CurrentUser->new();
+ $RT::Installer->{Meta} = RT::Installer->Meta;
+ $m->call_next;
+}
+else {
+ # redirect to login page if not in install mode
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL'))
+}
+</%init>
+
diff --git a/rt/share/html/Install/index.html b/rt/share/html/Install/index.html
new file mode 100644
index 0000000..afe9336
--- /dev/null
+++ b/rt/share/html/Install/index.html
@@ -0,0 +1,142 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| Elements/Wrapper, Title => loc('Welcome to RT!') &>
+
+<& Elements/Errors, Errors => \@errors &>
+
+% return if $locked;
+
+<form method="post">
+
+<h1><% loc('Language') %></h1>
+
+<div class="select-lang">
+<&|/l&>Select another language</&>:
+<& /Elements/SelectLang,
+ Name => 'Lang',
+ Default => $lang_handle? $lang_handle->language_tag : undef,
+&>
+<input type="submit" class="button" name="ChangeLang" value="<% loc('Change') %>" />
+</div>
+
+<h1><% loc('What is RT?') %></h1>
+
+<div class="intro">
+<p>
+<&|/l&>RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an "action item."</&>
+</p>
+<p>
+<&|/l&>RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)</&>
+</p>
+<h2><% loc('Getting started') %></h2>
+<p>
+<b>
+<&|/l&>You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click <i>Let's go!</i> below, RT will guide you through setting up your RT server and database.</&>
+</b>
+</p>
+<p>
+<&|/l&>If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.</p></&>
+</div>
+
+<& /Elements/Submit, Label => loc( "Let's go!"), Name => 'Run' &>
+</form>
+
+</&>
+<%init>
+my @errors;
+my $locked;
+
+my $file = File::Spec->catfile( $RT::EtcPath, 'RT_SiteConfig.pm' );
+
+if ( ! -e $file ) {
+ # write a blank RT_SiteConfig.pm
+ open my $fh, '>', $file or die $!;
+ close $fh;
+}
+elsif ( ! -w $file ) {
+ $locked = 1;
+}
+
+if ( $locked ) {
+ push @errors, loc("Config file [_1] is locked", $file);
+}
+elsif ( $Run ) {
+ $RT::Installer->{InstallConfig} ||= {};
+ for my $field (
+ qw/DatabaseType DatabaseName DatabaseHost DatabasePort
+ DatabaseUser DatabaseRequireSSL rtname
+ Organization Timezone CommentAddress CorrespondAddress
+ SendmailPath WebDomain WebPort/
+ ) {
+ $RT::Installer->{InstallConfig}{$field} ||= RT->Config->Get($field);
+ }
+
+ for my $field ( qw/OwnerEmail Password DatabasePassword DatabaseAdminPassword/ ) {
+ # stuff we don't want to keep null
+ $RT::Installer->{InstallConfig}{$field} = '';
+ }
+
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/DatabaseType.html');
+} elsif ( $ChangeLang && $Lang ) {
+ # hackish, but works
+ $session{'CurrentUser'} = new RT::CurrentUser;
+ $session{'CurrentUser'}->LanguageHandle( $Lang );
+}
+my $lang_handle = do { local $@;
+ eval {
+ ($session{'CurrentUser'} || RT::CurrentUser->new($RT::SystemUser->Id))
+ ->LanguageHandle
+ }
+};
+</%init>
+
+<%args>
+$Run => 0
+$ChangeLang => undef
+$Lang => undef
+</%args>
diff --git a/rt/share/html/NoAuth/Logout.html b/rt/share/html/NoAuth/Logout.html
new file mode 100755
index 0000000..5a4926b
--- /dev/null
+++ b/rt/share/html/NoAuth/Logout.html
@@ -0,0 +1,79 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc('Logout'), Refresh => "1;URL=$URL" &>
+</div>
+
+<div id="body" class="login-body">
+<div id="login-box">
+
+<&| /Widgets/TitleBox, title => loc('Logged out'), hideable => 0 &>
+<p><&|/l&>You have been logged out of RT.</&>
+
+<br />
+<br />
+<a href="<%$URL%>"><&|/l&>You're welcome to login again</&></a>.
+</&>
+</div></div>
+<& /Elements/Footer, Menu => 0 &>
+
+% $m->abort();
+
+<%INIT>
+$m->callback( %ARGS, CallbackName => 'BeforeSessionDelete' );
+
+if (defined %session) {
+ tied(%session)->delete;
+ $session{'CurrentUser'} = RT::CurrentUser->new;
+}
+
+$m->callback( %ARGS, CallbackName => 'AfterSessionDelete' );
+</%INIT>
+
+<%ARGS>
+$URL => RT->Config->Get('WebPath')."/"
+</%ARGS>
diff --git a/rt/share/html/NoAuth/Reminder.html b/rt/share/html/NoAuth/Reminder.html
new file mode 100755
index 0000000..b76d488
--- /dev/null
+++ b/rt/share/html/NoAuth/Reminder.html
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, title => loc('Password Reminder') &>
+
+<&|/l&>Not yet implemented.</&>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckcontextmenu.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckcontextmenu.js
new file mode 100644
index 0000000..56027dc
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckcontextmenu.js
@@ -0,0 +1,223 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKContextMenu Class: renders an control a context menu.
+ */
+
+var FCKContextMenu = function( parentWindow, langDir )
+{
+ this.CtrlDisable = false ;
+
+ var oPanel = this._Panel = new FCKPanel( parentWindow ) ;
+ oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+ oPanel.IsContextMenu = true ;
+
+ // The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla
+ // so we stop the start of the dragging
+ if ( FCKBrowserInfo.IsGecko )
+ oPanel.Document.addEventListener( 'draggesture', function(e) {e.preventDefault(); return false;}, true ) ;
+
+ var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ;
+ oMenuBlock.Panel = oPanel ;
+ oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ;
+
+ this._Redraw = true ;
+}
+
+
+FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow )
+{
+ if ( !FCKBrowserInfo.IsIE )
+ {
+ this._Document = mouseClickWindow.document ;
+ if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) )
+ {
+ this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ;
+ this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ;
+ }
+ this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ;
+ }
+}
+
+/**
+ The customData parameter is just a value that will be send to the command that is executed,
+ so it's possible to reuse the same command for several items just by assigning different data for each one.
+*/
+FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
+{
+ var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
+ this._Redraw = true ;
+ return oItem ;
+}
+
+FCKContextMenu.prototype.AddSeparator = function()
+{
+ this._MenuBlock.AddSeparator() ;
+ this._Redraw = true ;
+}
+
+FCKContextMenu.prototype.RemoveAllItems = function()
+{
+ this._MenuBlock.RemoveAllItems() ;
+ this._Redraw = true ;
+}
+
+FCKContextMenu.prototype.AttachToElement = function( element )
+{
+ if ( FCKBrowserInfo.IsIE )
+ FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ;
+ else
+ element._FCKContextMenu = this ;
+}
+
+function FCKContextMenu_Document_OnContextMenu( e )
+{
+ if ( FCKConfig.BrowserContextMenu )
+ return true ;
+
+ var el = e.target ;
+
+ while ( el )
+ {
+ if ( el._FCKContextMenu )
+ {
+ if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
+ return true ;
+
+ FCKTools.CancelEvent( e ) ;
+ FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ;
+ return false ;
+ }
+ el = el.parentNode ;
+ }
+ return true ;
+}
+
+var FCKContextMenu_OverrideButton ;
+
+function FCKContextMenu_Document_OnMouseDown( e )
+{
+ if( !e || e.button != 2 )
+ return false ;
+
+ if ( FCKConfig.BrowserContextMenu )
+ return true ;
+
+ var el = e.target ;
+
+ while ( el )
+ {
+ if ( el._FCKContextMenu )
+ {
+ if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
+ return true ;
+
+ var overrideButton = FCKContextMenu_OverrideButton ;
+ if( !overrideButton )
+ {
+ var doc = FCKTools.GetElementDocument( e.target ) ;
+ overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ;
+ overrideButton.type = 'button' ;
+ var buttonHolder = doc.createElement('p') ;
+ doc.body.appendChild( buttonHolder ) ;
+ buttonHolder.appendChild( overrideButton ) ;
+ }
+
+ overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) +
+ 'px;left:' + ( e.clientX - 2 ) +
+ 'px;width:5px;height:5px;opacity:0.01' ;
+ }
+ el = el.parentNode ;
+ }
+ return false ;
+}
+
+function FCKContextMenu_Document_OnMouseUp( e )
+{
+ if ( FCKConfig.BrowserContextMenu )
+ return true ;
+
+ var overrideButton = FCKContextMenu_OverrideButton ;
+
+ if ( overrideButton )
+ {
+ var parent = overrideButton.parentNode ;
+ parent.parentNode.removeChild( parent ) ;
+ FCKContextMenu_OverrideButton = undefined ;
+
+ if( e && e.button == 2 )
+ {
+ FCKContextMenu_Document_OnContextMenu( e ) ;
+ return false ;
+ }
+ }
+ return true ;
+}
+
+function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
+{
+ if ( ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) ) || FCKConfig.BrowserContextMenu )
+ return true ;
+
+ var eTarget = el || this ;
+
+ if ( fckContextMenu.OnBeforeOpen )
+ fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ;
+
+ if ( fckContextMenu._MenuBlock.Count() == 0 )
+ return false ;
+
+ if ( fckContextMenu._Redraw )
+ {
+ fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ;
+ fckContextMenu._Redraw = false ;
+ }
+
+ // This will avoid that the content of the context menu can be dragged in IE
+ // as the content of the panel is recreated we need to do it every time
+ FCKTools.DisableSelection( fckContextMenu._Panel.Document.body ) ;
+
+ var x = 0 ;
+ var y = 0 ;
+ if ( FCKBrowserInfo.IsIE )
+ {
+ x = ev.screenX ;
+ y = ev.screenY ;
+ }
+ else if ( FCKBrowserInfo.IsSafari )
+ {
+ x = ev.clientX ;
+ y = ev.clientY ;
+ }
+ else
+ {
+ x = ev.pageX ;
+ y = ev.pageY ;
+ }
+ fckContextMenu._Panel.Show( x, y, ev.currentTarget || null ) ;
+
+ return false ;
+}
+
+function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu )
+{
+ contextMenu._Panel.Hide() ;
+ FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdataprocessor.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdataprocessor.js
new file mode 100644
index 0000000..f0ac79d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdataprocessor.js
@@ -0,0 +1,119 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * The Data Processor is responsible for transforming the input and output data
+ * in the editor. For more info:
+ * http://dev.fckeditor.net/wiki/Components/DataProcessor
+ *
+ * The default implementation offers the base XHTML compatibility features of
+ * FCKeditor. Further Data Processors may be implemented for other purposes.
+ *
+ */
+
+var FCKDataProcessor = function()
+{}
+
+FCKDataProcessor.prototype =
+{
+ /*
+ * Returns a string representing the HTML format of "data". The returned
+ * value will be loaded in the editor.
+ * The HTML must be from <html> to </html>, including <head>, <body> and
+ * eventually the DOCTYPE.
+ * Note: HTML comments may already be part of the data because of the
+ * pre-processing made with ProtectedSource.
+ * @param {String} data The data to be converted in the
+ * DataProcessor specific format.
+ */
+ ConvertToHtml : function( data )
+ {
+ // The default data processor must handle two different cases depending
+ // on the FullPage setting. Custom Data Processors will not be
+ // compatible with FullPage, much probably.
+ if ( FCKConfig.FullPage )
+ {
+ // Save the DOCTYPE.
+ FCK.DocTypeDeclaration = data.match( FCKRegexLib.DocTypeTag ) ;
+
+ // Check if the <body> tag is available.
+ if ( !FCKRegexLib.HasBodyTag.test( data ) )
+ data = '<body>' + data + '</body>' ;
+
+ // Check if the <html> tag is available.
+ if ( !FCKRegexLib.HtmlOpener.test( data ) )
+ data = '<html dir="' + FCKConfig.ContentLangDirection + '">' + data + '</html>' ;
+
+ // Check if the <head> tag is available.
+ if ( !FCKRegexLib.HeadOpener.test( data ) )
+ data = data.replace( FCKRegexLib.HtmlOpener, '$&<head><title></title></head>' ) ;
+
+ return data ;
+ }
+ else
+ {
+ var html =
+ FCKConfig.DocType +
+ '<html dir="' + FCKConfig.ContentLangDirection + '"' ;
+
+ // On IE, if you are using a DOCTYPE different of HTML 4 (like
+ // XHTML), you must force the vertical scroll to show, otherwise
+ // the horizontal one may appear when the page needs vertical scrolling.
+ // TODO : Check it with IE7 and make it IE6- if it is the case.
+ if ( FCKBrowserInfo.IsIE && FCKConfig.DocType.length > 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) )
+ html += ' style="overflow-y: scroll"' ;
+
+ html += '><head><title></title></head>' +
+ '<body' + FCKConfig.GetBodyAttributes() + '>' +
+ data +
+ '</body></html>' ;
+
+ return html ;
+ }
+ },
+
+ /*
+ * Converts a DOM (sub-)tree to a string in the data format.
+ * @param {Object} rootNode The node that contains the DOM tree to be
+ * converted to the data format.
+ * @param {Boolean} excludeRoot Indicates that the root node must not
+ * be included in the conversion, only its children.
+ * @param {Boolean} format Indicates that the data must be formatted
+ * for human reading. Not all Data Processors may provide it.
+ */
+ ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
+ {
+ var data = FCKXHtml.GetXHTML( rootNode, !excludeRoot, format ) ;
+
+ if ( ignoreIfEmptyParagraph && FCKRegexLib.EmptyOutParagraph.test( data ) )
+ return '' ;
+
+ return data ;
+ },
+
+ /*
+ * Makes any necessary changes to a piece of HTML for insertion in the
+ * editor selection position.
+ * @param {String} html The HTML to be fixed.
+ */
+ FixHtml : function( html )
+ {
+ return html ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_gecko.js
new file mode 100644
index 0000000..04a3099
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_gecko.js
@@ -0,0 +1,53 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a generic Document Fragment object. It is not intended to provide
+ * the W3C implementation, but is a way to fix the missing of a real Document
+ * Fragment in IE (where document.createDocumentFragment() returns a normal
+ * document instead), giving a standard interface for it.
+ * (IE Implementation)
+ */
+
+var FCKDocumentFragment = function( parentDocument, baseDocFrag )
+{
+ this.RootNode = baseDocFrag || parentDocument.createDocumentFragment() ;
+}
+
+FCKDocumentFragment.prototype =
+{
+
+ // Append the contents of this Document Fragment to another element.
+ AppendTo : function( targetNode )
+ {
+ targetNode.appendChild( this.RootNode ) ;
+ },
+
+ AppendHtml : function( html )
+ {
+ var eTmpDiv = this.RootNode.ownerDocument.createElement( 'div' ) ;
+ eTmpDiv.innerHTML = html ;
+ FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ;
+ },
+
+ InsertAfterNode : function( existingNode )
+ {
+ FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ;
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_ie.js
new file mode 100644
index 0000000..d9e4b3d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_ie.js
@@ -0,0 +1,58 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a generic Document Fragment object. It is not intended to provide
+ * the W3C implementation, but is a way to fix the missing of a real Document
+ * Fragment in IE (where document.createDocumentFragment() returns a normal
+ * document instead), giving a standard interface for it.
+ * (IE Implementation)
+ */
+
+var FCKDocumentFragment = function( parentDocument )
+{
+ this._Document = parentDocument ;
+ this.RootNode = parentDocument.createElement( 'div' ) ;
+}
+
+// Append the contents of this Document Fragment to another node.
+FCKDocumentFragment.prototype =
+{
+
+ AppendTo : function( targetNode )
+ {
+ FCKDomTools.MoveChildren( this.RootNode, targetNode ) ;
+ },
+
+ AppendHtml : function( html )
+ {
+ var eTmpDiv = this._Document.createElement( 'div' ) ;
+ eTmpDiv.innerHTML = html ;
+ FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ;
+ },
+
+ InsertAfterNode : function( existingNode )
+ {
+ var eRoot = this.RootNode ;
+ var eLast ;
+
+ while( ( eLast = eRoot.lastChild ) )
+ FCKDomTools.InsertAfterNode( existingNode, eRoot.removeChild( eLast ) ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange.js
new file mode 100644
index 0000000..b0912eb
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange.js
@@ -0,0 +1,935 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ */
+
+var FCKDomRange = function( sourceWindow )
+{
+ this.Window = sourceWindow ;
+ this._Cache = {} ;
+}
+
+FCKDomRange.prototype =
+{
+
+ _UpdateElementInfo : function()
+ {
+ var innerRange = this._Range ;
+
+ if ( !innerRange )
+ this.Release( true ) ;
+ else
+ {
+ // For text nodes, the node itself is the StartNode.
+ var eStart = innerRange.startContainer ;
+
+ var oElementPath = new FCKElementPath( eStart ) ;
+ this.StartNode = eStart.nodeType == 3 ? eStart : eStart.childNodes[ innerRange.startOffset ] ;
+ this.StartContainer = eStart ;
+ this.StartBlock = oElementPath.Block ;
+ this.StartBlockLimit = oElementPath.BlockLimit ;
+
+ if ( innerRange.collapsed )
+ {
+ this.EndNode = this.StartNode ;
+ this.EndContainer = this.StartContainer ;
+ this.EndBlock = this.StartBlock ;
+ this.EndBlockLimit = this.StartBlockLimit ;
+ }
+ else
+ {
+ var eEnd = innerRange.endContainer ;
+
+ if ( eStart != eEnd )
+ oElementPath = new FCKElementPath( eEnd ) ;
+
+ // The innerRange.endContainer[ innerRange.endOffset ] is not
+ // usually part of the range, but the marker for the range end. So,
+ // let's get the previous available node as the real end.
+ var eEndNode = eEnd ;
+ if ( innerRange.endOffset == 0 )
+ {
+ while ( eEndNode && !eEndNode.previousSibling )
+ eEndNode = eEndNode.parentNode ;
+
+ if ( eEndNode )
+ eEndNode = eEndNode.previousSibling ;
+ }
+ else if ( eEndNode.nodeType == 1 )
+ eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
+
+ this.EndNode = eEndNode ;
+ this.EndContainer = eEnd ;
+ this.EndBlock = oElementPath.Block ;
+ this.EndBlockLimit = oElementPath.BlockLimit ;
+ }
+ }
+
+ this._Cache = {} ;
+ },
+
+ CreateRange : function()
+ {
+ return new FCKW3CRange( this.Window.document ) ;
+ },
+
+ DeleteContents : function()
+ {
+ if ( this._Range )
+ {
+ this._Range.deleteContents() ;
+ this._UpdateElementInfo() ;
+ }
+ },
+
+ ExtractContents : function()
+ {
+ if ( this._Range )
+ {
+ var docFrag = this._Range.extractContents() ;
+ this._UpdateElementInfo() ;
+ return docFrag ;
+ }
+ return null ;
+ },
+
+ CheckIsCollapsed : function()
+ {
+ if ( this._Range )
+ return this._Range.collapsed ;
+
+ return false ;
+ },
+
+ Collapse : function( toStart )
+ {
+ if ( this._Range )
+ this._Range.collapse( toStart ) ;
+
+ this._UpdateElementInfo() ;
+ },
+
+ Clone : function()
+ {
+ var oClone = FCKTools.CloneObject( this ) ;
+
+ if ( this._Range )
+ oClone._Range = this._Range.cloneRange() ;
+
+ return oClone ;
+ },
+
+ MoveToNodeContents : function( targetNode )
+ {
+ if ( !this._Range )
+ this._Range = this.CreateRange() ;
+
+ this._Range.selectNodeContents( targetNode ) ;
+
+ this._UpdateElementInfo() ;
+ },
+
+ MoveToElementStart : function( targetElement )
+ {
+ this.SetStart(targetElement,1) ;
+ this.SetEnd(targetElement,1) ;
+ },
+
+ // Moves to the first editing point inside a element. For example, in a
+ // element tree like "<p><b><i></i></b> Text</p>", the start editing point
+ // is "<p><b><i>^</i></b> Text</p>" (inside <i>).
+ MoveToElementEditStart : function( targetElement )
+ {
+ var editableElement ;
+
+ while ( targetElement && targetElement.nodeType == 1 )
+ {
+ if ( FCKDomTools.CheckIsEditable( targetElement ) )
+ editableElement = targetElement ;
+ else if ( editableElement )
+ break ; // If we already found an editable element, stop the loop.
+
+ targetElement = targetElement.firstChild ;
+ }
+
+ if ( editableElement )
+ this.MoveToElementStart( editableElement ) ;
+ },
+
+ InsertNode : function( node )
+ {
+ if ( this._Range )
+ this._Range.insertNode( node ) ;
+ },
+
+ CheckIsEmpty : function()
+ {
+ if ( this.CheckIsCollapsed() )
+ return true ;
+
+ // Inserts the contents of the range in a div tag.
+ var eToolDiv = this.Window.document.createElement( 'div' ) ;
+ this._Range.cloneContents().AppendTo( eToolDiv ) ;
+
+ FCKDomTools.TrimNode( eToolDiv ) ;
+
+ return ( eToolDiv.innerHTML.length == 0 ) ;
+ },
+
+ /**
+ * Checks if the start boundary of the current range is "visually" (like a
+ * selection caret) at the beginning of the block. It means that some
+ * things could be brefore the range, like spaces or empty inline elements,
+ * but it would still be considered at the beginning of the block.
+ */
+ CheckStartOfBlock : function()
+ {
+ var cache = this._Cache ;
+ var bIsStartOfBlock = cache.IsStartOfBlock ;
+
+ if ( bIsStartOfBlock != undefined )
+ return bIsStartOfBlock ;
+
+ // Take the block reference.
+ var block = this.StartBlock || this.StartBlockLimit ;
+
+ var container = this._Range.startContainer ;
+ var offset = this._Range.startOffset ;
+ var currentNode ;
+
+ if ( offset > 0 )
+ {
+ // First, check the start container. If it is a text node, get the
+ // substring of the node value before the range offset.
+ if ( container.nodeType == 3 )
+ {
+ var textValue = container.nodeValue.substr( 0, offset ).Trim() ;
+
+ // If we have some text left in the container, we are not at
+ // the end for the block.
+ if ( textValue.length != 0 )
+ return cache.IsStartOfBlock = false ;
+ }
+ else
+ currentNode = container.childNodes[ offset - 1 ] ;
+ }
+
+ // We'll not have a currentNode if the container was a text node, or
+ // the offset is zero.
+ if ( !currentNode )
+ currentNode = FCKDomTools.GetPreviousSourceNode( container, true, null, block ) ;
+
+ while ( currentNode )
+ {
+ switch ( currentNode.nodeType )
+ {
+ case 1 :
+ // It's not an inline element.
+ if ( !FCKListsLib.InlineChildReqElements[ currentNode.nodeName.toLowerCase() ] )
+ return cache.IsStartOfBlock = false ;
+
+ break ;
+
+ case 3 :
+ // It's a text node with real text.
+ if ( currentNode.nodeValue.Trim().length > 0 )
+ return cache.IsStartOfBlock = false ;
+ }
+
+ currentNode = FCKDomTools.GetPreviousSourceNode( currentNode, false, null, block ) ;
+ }
+
+ return cache.IsStartOfBlock = true ;
+ },
+
+ /**
+ * Checks if the end boundary of the current range is "visually" (like a
+ * selection caret) at the end of the block. It means that some things
+ * could be after the range, like spaces, empty inline elements, or a
+ * single <br>, but it would still be considered at the end of the block.
+ */
+ CheckEndOfBlock : function( refreshSelection )
+ {
+ var isEndOfBlock = this._Cache.IsEndOfBlock ;
+
+ if ( isEndOfBlock != undefined )
+ return isEndOfBlock ;
+
+ // Take the block reference.
+ var block = this.EndBlock || this.EndBlockLimit ;
+
+ var container = this._Range.endContainer ;
+ var offset = this._Range.endOffset ;
+ var currentNode ;
+
+ // First, check the end container. If it is a text node, get the
+ // substring of the node value after the range offset.
+ if ( container.nodeType == 3 )
+ {
+ var textValue = container.nodeValue ;
+ if ( offset < textValue.length )
+ {
+ textValue = textValue.substr( offset ) ;
+
+ // If we have some text left in the container, we are not at
+ // the end for the block.
+ if ( textValue.Trim().length != 0 )
+ return this._Cache.IsEndOfBlock = false ;
+ }
+ }
+ else
+ currentNode = container.childNodes[ offset ] ;
+
+ // We'll not have a currentNode if the container was a text node, of
+ // the offset is out the container children limits (after it probably).
+ if ( !currentNode )
+ currentNode = FCKDomTools.GetNextSourceNode( container, true, null, block ) ;
+
+ var hadBr = false ;
+
+ while ( currentNode )
+ {
+ switch ( currentNode.nodeType )
+ {
+ case 1 :
+ var nodeName = currentNode.nodeName.toLowerCase() ;
+
+ // It's an inline element.
+ if ( FCKListsLib.InlineChildReqElements[ nodeName ] )
+ break ;
+
+ // It is the first <br> found.
+ if ( nodeName == 'br' && !hadBr )
+ {
+ hadBr = true ;
+ break ;
+ }
+
+ return this._Cache.IsEndOfBlock = false ;
+
+ case 3 :
+ // It's a text node with real text.
+ if ( currentNode.nodeValue.Trim().length > 0 )
+ return this._Cache.IsEndOfBlock = false ;
+ }
+
+ currentNode = FCKDomTools.GetNextSourceNode( currentNode, false, null, block ) ;
+ }
+
+ if ( refreshSelection )
+ this.Select() ;
+
+ return this._Cache.IsEndOfBlock = true ;
+ },
+
+ // This is an "intrusive" way to create a bookmark. It includes <span> tags
+ // in the range boundaries. The advantage of it is that it is possible to
+ // handle DOM mutations when moving back to the bookmark.
+ // Attention: the inclusion of nodes in the DOM is a design choice and
+ // should not be changed as there are other points in the code that may be
+ // using those nodes to perform operations. See GetBookmarkNode.
+ // For performance, includeNodes=true if intended to SelectBookmark.
+ CreateBookmark : function( includeNodes )
+ {
+ // Create the bookmark info (random IDs).
+ var oBookmark =
+ {
+ StartId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S',
+ EndId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E'
+ } ;
+
+ var oDoc = this.Window.document ;
+ var eStartSpan ;
+ var eEndSpan ;
+ var oClone ;
+
+ // For collapsed ranges, add just the start marker.
+ if ( !this.CheckIsCollapsed() )
+ {
+ eEndSpan = oDoc.createElement( 'span' ) ;
+ eEndSpan.style.display = 'none' ;
+ eEndSpan.id = oBookmark.EndId ;
+ eEndSpan.setAttribute( '_fck_bookmark', true ) ;
+
+ // For IE, it must have something inside, otherwise it may be
+ // removed during DOM operations.
+// if ( FCKBrowserInfo.IsIE )
+ eEndSpan.innerHTML = '&nbsp;' ;
+
+ oClone = this.Clone() ;
+ oClone.Collapse( false ) ;
+ oClone.InsertNode( eEndSpan ) ;
+ }
+
+ eStartSpan = oDoc.createElement( 'span' ) ;
+ eStartSpan.style.display = 'none' ;
+ eStartSpan.id = oBookmark.StartId ;
+ eStartSpan.setAttribute( '_fck_bookmark', true ) ;
+
+ // For IE, it must have something inside, otherwise it may be removed
+ // during DOM operations.
+// if ( FCKBrowserInfo.IsIE )
+ eStartSpan.innerHTML = '&nbsp;' ;
+
+ oClone = this.Clone() ;
+ oClone.Collapse( true ) ;
+ oClone.InsertNode( eStartSpan ) ;
+
+ if ( includeNodes )
+ {
+ oBookmark.StartNode = eStartSpan ;
+ oBookmark.EndNode = eEndSpan ;
+ }
+
+ // Update the range position.
+ if ( eEndSpan )
+ {
+ this.SetStart( eStartSpan, 4 ) ;
+ this.SetEnd( eEndSpan, 3 ) ;
+ }
+ else
+ this.MoveToPosition( eStartSpan, 4 ) ;
+
+ return oBookmark ;
+ },
+
+ // This one should be a part of a hypothetic "bookmark" object.
+ GetBookmarkNode : function( bookmark, start )
+ {
+ var doc = this.Window.document ;
+
+ if ( start )
+ return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ;
+ else
+ return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ;
+ },
+
+ MoveToBookmark : function( bookmark, preserveBookmark )
+ {
+ var eStartSpan = this.GetBookmarkNode( bookmark, true ) ;
+ var eEndSpan = this.GetBookmarkNode( bookmark, false ) ;
+
+ this.SetStart( eStartSpan, 3 ) ;
+
+ if ( !preserveBookmark )
+ FCKDomTools.RemoveNode( eStartSpan ) ;
+
+ // If collapsed, the end span will not be available.
+ if ( eEndSpan )
+ {
+ this.SetEnd( eEndSpan, 3 ) ;
+
+ if ( !preserveBookmark )
+ FCKDomTools.RemoveNode( eEndSpan ) ;
+ }
+ else
+ this.Collapse( true ) ;
+
+ this._UpdateElementInfo() ;
+ },
+
+ // Non-intrusive bookmark algorithm
+ CreateBookmark2 : function()
+ {
+ // If there is no range then get out of here.
+ // It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox
+ if ( ! this._Range )
+ return { "Start" : 0, "End" : 0 } ;
+
+ // First, we record down the offset values
+ var bookmark =
+ {
+ "Start" : [ this._Range.startOffset ],
+ "End" : [ this._Range.endOffset ]
+ } ;
+ // Since we're treating the document tree as normalized, we need to backtrack the text lengths
+ // of previous text nodes into the offset value.
+ var curStart = this._Range.startContainer.previousSibling ;
+ var curEnd = this._Range.endContainer.previousSibling ;
+
+ // Also note that the node that we use for "address base" would change during backtracking.
+ var addrStart = this._Range.startContainer ;
+ var addrEnd = this._Range.endContainer ;
+ while ( curStart && curStart.nodeType == 3 && addrStart.nodeType == 3 )
+ {
+ bookmark.Start[0] += curStart.length ;
+ addrStart = curStart ;
+ curStart = curStart.previousSibling ;
+ }
+ while ( curEnd && curEnd.nodeType == 3 && addrEnd.nodeType == 3 )
+ {
+ bookmark.End[0] += curEnd.length ;
+ addrEnd = curEnd ;
+ curEnd = curEnd.previousSibling ;
+ }
+
+ // If the object pointed to by the startOffset and endOffset are text nodes, we need
+ // to backtrack and add in the text offset to the bookmark addresses.
+ if ( addrStart.nodeType == 1 && addrStart.childNodes[bookmark.Start[0]] && addrStart.childNodes[bookmark.Start[0]].nodeType == 3 )
+ {
+ var curNode = addrStart.childNodes[bookmark.Start[0]] ;
+ var offset = 0 ;
+ while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
+ {
+ curNode = curNode.previousSibling ;
+ offset += curNode.length ;
+ }
+ addrStart = curNode ;
+ bookmark.Start[0] = offset ;
+ }
+ if ( addrEnd.nodeType == 1 && addrEnd.childNodes[bookmark.End[0]] && addrEnd.childNodes[bookmark.End[0]].nodeType == 3 )
+ {
+ var curNode = addrEnd.childNodes[bookmark.End[0]] ;
+ var offset = 0 ;
+ while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
+ {
+ curNode = curNode.previousSibling ;
+ offset += curNode.length ;
+ }
+ addrEnd = curNode ;
+ bookmark.End[0] = offset ;
+ }
+
+ // Then, we record down the precise position of the container nodes
+ // by walking up the DOM tree and counting their childNode index
+ bookmark.Start = FCKDomTools.GetNodeAddress( addrStart, true ).concat( bookmark.Start ) ;
+ bookmark.End = FCKDomTools.GetNodeAddress( addrEnd, true ).concat( bookmark.End ) ;
+ return bookmark;
+ },
+
+ MoveToBookmark2 : function( bookmark )
+ {
+ // Reverse the childNode counting algorithm in CreateBookmark2()
+ var curStart = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.Start.slice( 0, -1 ), true ) ;
+ var curEnd = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.End.slice( 0, -1 ), true ) ;
+
+ // Generate the W3C Range object and update relevant data
+ this.Release( true ) ;
+ this._Range = new FCKW3CRange( this.Window.document ) ;
+ var startOffset = bookmark.Start[ bookmark.Start.length - 1 ] ;
+ var endOffset = bookmark.End[ bookmark.End.length - 1 ] ;
+ while ( curStart.nodeType == 3 && startOffset > curStart.length )
+ {
+ if ( ! curStart.nextSibling || curStart.nextSibling.nodeType != 3 )
+ break ;
+ startOffset -= curStart.length ;
+ curStart = curStart.nextSibling ;
+ }
+ while ( curEnd.nodeType == 3 && endOffset > curEnd.length )
+ {
+ if ( ! curEnd.nextSibling || curEnd.nextSibling.nodeType != 3 )
+ break ;
+ endOffset -= curEnd.length ;
+ curEnd = curEnd.nextSibling ;
+ }
+ this._Range.setStart( curStart, startOffset ) ;
+ this._Range.setEnd( curEnd, endOffset ) ;
+ this._UpdateElementInfo() ;
+ },
+
+ MoveToPosition : function( targetElement, position )
+ {
+ this.SetStart( targetElement, position ) ;
+ this.Collapse( true ) ;
+ },
+
+ /*
+ * Moves the position of the start boundary of the range to a specific position
+ * relatively to a element.
+ * @position:
+ * 1 = After Start <target>^contents</target>
+ * 2 = Before End <target>contents^</target>
+ * 3 = Before Start ^<target>contents</target>
+ * 4 = After End <target>contents</target>^
+ */
+ SetStart : function( targetElement, position, noInfoUpdate )
+ {
+ var oRange = this._Range ;
+ if ( !oRange )
+ oRange = this._Range = this.CreateRange() ;
+
+ switch( position )
+ {
+ case 1 : // After Start <target>^contents</target>
+ oRange.setStart( targetElement, 0 ) ;
+ break ;
+
+ case 2 : // Before End <target>contents^</target>
+ oRange.setStart( targetElement, targetElement.childNodes.length ) ;
+ break ;
+
+ case 3 : // Before Start ^<target>contents</target>
+ oRange.setStartBefore( targetElement ) ;
+ break ;
+
+ case 4 : // After End <target>contents</target>^
+ oRange.setStartAfter( targetElement ) ;
+ }
+
+ if ( !noInfoUpdate )
+ this._UpdateElementInfo() ;
+ },
+
+ /*
+ * Moves the position of the start boundary of the range to a specific position
+ * relatively to a element.
+ * @position:
+ * 1 = After Start <target>^contents</target>
+ * 2 = Before End <target>contents^</target>
+ * 3 = Before Start ^<target>contents</target>
+ * 4 = After End <target>contents</target>^
+ */
+ SetEnd : function( targetElement, position, noInfoUpdate )
+ {
+ var oRange = this._Range ;
+ if ( !oRange )
+ oRange = this._Range = this.CreateRange() ;
+
+ switch( position )
+ {
+ case 1 : // After Start <target>^contents</target>
+ oRange.setEnd( targetElement, 0 ) ;
+ break ;
+
+ case 2 : // Before End <target>contents^</target>
+ oRange.setEnd( targetElement, targetElement.childNodes.length ) ;
+ break ;
+
+ case 3 : // Before Start ^<target>contents</target>
+ oRange.setEndBefore( targetElement ) ;
+ break ;
+
+ case 4 : // After End <target>contents</target>^
+ oRange.setEndAfter( targetElement ) ;
+ }
+
+ if ( !noInfoUpdate )
+ this._UpdateElementInfo() ;
+ },
+
+ Expand : function( unit )
+ {
+ var oNode, oSibling ;
+
+ switch ( unit )
+ {
+ // Expand the range to include all inline parent elements if we are
+ // are in their boundary limits.
+ // For example (where [ ] are the range limits):
+ // Before => Some <b>[<i>Some sample text]</i></b>.
+ // After => Some [<b><i>Some sample text</i></b>].
+ case 'inline_elements' :
+ // Expand the start boundary.
+ if ( this._Range.startOffset == 0 )
+ {
+ oNode = this._Range.startContainer ;
+
+ if ( oNode.nodeType != 1 )
+ oNode = oNode.previousSibling ? null : oNode.parentNode ;
+
+ if ( oNode )
+ {
+ while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
+ {
+ this._Range.setStartBefore( oNode ) ;
+
+ if ( oNode != oNode.parentNode.firstChild )
+ break ;
+
+ oNode = oNode.parentNode ;
+ }
+ }
+ }
+
+ // Expand the end boundary.
+ oNode = this._Range.endContainer ;
+ var offset = this._Range.endOffset ;
+
+ if ( ( oNode.nodeType == 3 && offset >= oNode.nodeValue.length ) || ( oNode.nodeType == 1 && offset >= oNode.childNodes.length ) || ( oNode.nodeType != 1 && oNode.nodeType != 3 ) )
+ {
+ if ( oNode.nodeType != 1 )
+ oNode = oNode.nextSibling ? null : oNode.parentNode ;
+
+ if ( oNode )
+ {
+ while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
+ {
+ this._Range.setEndAfter( oNode ) ;
+
+ if ( oNode != oNode.parentNode.lastChild )
+ break ;
+
+ oNode = oNode.parentNode ;
+ }
+ }
+ }
+
+ break ;
+
+ case 'block_contents' :
+ case 'list_contents' :
+ var boundarySet = FCKListsLib.BlockBoundaries ;
+ if ( unit == 'list_contents' || FCKConfig.EnterMode == 'br' )
+ boundarySet = FCKListsLib.ListBoundaries ;
+
+ if ( this.StartBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' )
+ this.SetStart( this.StartBlock, 1 ) ;
+ else
+ {
+ // Get the start node for the current range.
+ oNode = this._Range.startContainer ;
+
+ // If it is an element, get the node right before of it (in source order).
+ if ( oNode.nodeType == 1 )
+ {
+ var lastNode = oNode.childNodes[ this._Range.startOffset ] ;
+ if ( lastNode )
+ oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ;
+ else
+ oNode = oNode.lastChild || oNode ;
+ }
+
+ // We must look for the left boundary, relative to the range
+ // start, which is limited by a block element.
+ while ( oNode
+ && ( oNode.nodeType != 1
+ || ( oNode != this.StartBlockLimit
+ && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
+ {
+ this._Range.setStartBefore( oNode ) ;
+ oNode = oNode.previousSibling || oNode.parentNode ;
+ }
+ }
+
+ if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' )
+ this.SetEnd( this.EndBlock, 2 ) ;
+ else
+ {
+ oNode = this._Range.endContainer ;
+ if ( oNode.nodeType == 1 )
+ oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ;
+
+ // We must look for the right boundary, relative to the range
+ // end, which is limited by a block element.
+ while ( oNode
+ && ( oNode.nodeType != 1
+ || ( oNode != this.StartBlockLimit
+ && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
+ {
+ this._Range.setEndAfter( oNode ) ;
+ oNode = oNode.nextSibling || oNode.parentNode ;
+ }
+
+ // In EnterMode='br', the end <br> boundary element must
+ // be included in the expanded range.
+ if ( oNode && oNode.nodeName.toLowerCase() == 'br' )
+ this._Range.setEndAfter( oNode ) ;
+ }
+
+ this._UpdateElementInfo() ;
+ }
+ },
+
+ /**
+ * Split the block element for the current range. It deletes the contents
+ * of the range and splits the block in the collapsed position, resulting
+ * in two sucessive blocks. The range is then positioned in the middle of
+ * them.
+ *
+ * It returns and object with the following properties:
+ * - PreviousBlock : a reference to the block element that preceeds
+ * the range after the split.
+ * - NextBlock : a reference to the block element that follows the
+ * range after the split.
+ * - WasStartOfBlock : a boolean indicating that the range was
+ * originaly at the start of the block.
+ * - WasEndOfBlock : a boolean indicating that the range was originaly
+ * at the end of the block.
+ *
+ * If the range was originaly at the start of the block, no split will happen
+ * and the PreviousBlock value will be null. The same is valid for the
+ * NextBlock value if the range was at the end of the block.
+ */
+ SplitBlock : function( forceBlockTag )
+ {
+ var blockTag = forceBlockTag || FCKConfig.EnterMode ;
+
+ if ( !this._Range )
+ this.MoveToSelection() ;
+
+ // The range boundaries must be in the same "block limit" element.
+ if ( this.StartBlockLimit == this.EndBlockLimit )
+ {
+ // Get the current blocks.
+ var eStartBlock = this.StartBlock ;
+ var eEndBlock = this.EndBlock ;
+ var oElementPath = null ;
+
+ if ( blockTag != 'br' )
+ {
+ if ( !eStartBlock )
+ {
+ eStartBlock = this.FixBlock( true, blockTag ) ;
+ eEndBlock = this.EndBlock ; // FixBlock may have fixed the EndBlock too.
+ }
+
+ if ( !eEndBlock )
+ eEndBlock = this.FixBlock( false, blockTag ) ;
+ }
+
+ // Get the range position.
+ var bIsStartOfBlock = ( eStartBlock != null && this.CheckStartOfBlock() ) ;
+ var bIsEndOfBlock = ( eEndBlock != null && this.CheckEndOfBlock() ) ;
+
+ // Delete the current contents.
+ if ( !this.CheckIsEmpty() )
+ this.DeleteContents() ;
+
+ if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock )
+ {
+ if ( bIsEndOfBlock )
+ {
+ oElementPath = new FCKElementPath( this.StartContainer ) ;
+ this.MoveToPosition( eEndBlock, 4 ) ;
+ eEndBlock = null ;
+ }
+ else if ( bIsStartOfBlock )
+ {
+ oElementPath = new FCKElementPath( this.StartContainer ) ;
+ this.MoveToPosition( eStartBlock, 3 ) ;
+ eStartBlock = null ;
+ }
+ else
+ {
+ // Extract the contents of the block from the selection point to the end of its contents.
+ this.SetEnd( eStartBlock, 2 ) ;
+ var eDocFrag = this.ExtractContents() ;
+
+ // Duplicate the block element after it.
+ eEndBlock = eStartBlock.cloneNode( false ) ;
+ eEndBlock.removeAttribute( 'id', false ) ;
+
+ // Place the extracted contents in the duplicated block.
+ eDocFrag.AppendTo( eEndBlock ) ;
+
+ FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ;
+
+ this.MoveToPosition( eStartBlock, 4 ) ;
+
+ // In Gecko, the last child node must be a bogus <br>.
+ // Note: bogus <br> added under <ul> or <ol> would cause lists to be incorrectly rendered.
+ if ( FCKBrowserInfo.IsGecko &&
+ ! eStartBlock.nodeName.IEquals( ['ul', 'ol'] ) )
+ FCKTools.AppendBogusBr( eStartBlock ) ;
+ }
+ }
+
+ return {
+ PreviousBlock : eStartBlock,
+ NextBlock : eEndBlock,
+ WasStartOfBlock : bIsStartOfBlock,
+ WasEndOfBlock : bIsEndOfBlock,
+ ElementPath : oElementPath
+ } ;
+ }
+
+ return null ;
+ },
+
+ // Transform a block without a block tag in a valid block (orphan text in the body or td, usually).
+ FixBlock : function( isStart, blockTag )
+ {
+ // Bookmark the range so we can restore it later.
+ var oBookmark = this.CreateBookmark() ;
+
+ // Collapse the range to the requested ending boundary.
+ this.Collapse( isStart ) ;
+
+ // Expands it to the block contents.
+ this.Expand( 'block_contents' ) ;
+
+ // Create the fixed block.
+ var oFixedBlock = this.Window.document.createElement( blockTag ) ;
+
+ // Move the contents of the temporary range to the fixed block.
+ this.ExtractContents().AppendTo( oFixedBlock ) ;
+ FCKDomTools.TrimNode( oFixedBlock ) ;
+
+ // If the fixed block is empty (not counting bookmark nodes)
+ // Add a <br /> inside to expand it.
+ if ( FCKDomTools.CheckIsEmptyElement(oFixedBlock, function( element ) { return element.getAttribute('_fck_bookmark') != 'true' ; } )
+ && FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( oFixedBlock ) ;
+
+ // Insert the fixed block into the DOM.
+ this.InsertNode( oFixedBlock ) ;
+
+ // Move the range back to the bookmarked place.
+ this.MoveToBookmark( oBookmark ) ;
+
+ return oFixedBlock ;
+ },
+
+ Release : function( preserveWindow )
+ {
+ if ( !preserveWindow )
+ this.Window = null ;
+
+ this.StartNode = null ;
+ this.StartContainer = null ;
+ this.StartBlock = null ;
+ this.StartBlockLimit = null ;
+ this.EndNode = null ;
+ this.EndContainer = null ;
+ this.EndBlock = null ;
+ this.EndBlockLimit = null ;
+ this._Range = null ;
+ this._Cache = null ;
+ },
+
+ CheckHasRange : function()
+ {
+ return !!this._Range ;
+ },
+
+ GetTouchedStartNode : function()
+ {
+ var range = this._Range ;
+ var container = range.startContainer ;
+
+ if ( range.collapsed || container.nodeType != 1 )
+ return container ;
+
+ return container.childNodes[ range.startOffset ] || container ;
+ },
+
+ GetTouchedEndNode : function()
+ {
+ var range = this._Range ;
+ var container = range.endContainer ;
+
+ if ( range.collapsed || container.nodeType != 1 )
+ return container ;
+
+ return container.childNodes[ range.endOffset - 1 ] || container ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_gecko.js
new file mode 100644
index 0000000..45d7c1c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_gecko.js
@@ -0,0 +1,104 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ * (Gecko Implementation)
+ */
+
+FCKDomRange.prototype.MoveToSelection = function()
+{
+ this.Release( true ) ;
+
+ var oSel = this.Window.getSelection() ;
+
+ if ( oSel && oSel.rangeCount > 0 )
+ {
+ this._Range = FCKW3CRange.CreateFromRange( this.Window.document, oSel.getRangeAt(0) ) ;
+ this._UpdateElementInfo() ;
+ }
+ else
+ if ( this.Window.document )
+ this.MoveToElementStart( this.Window.document.body ) ;
+}
+
+FCKDomRange.prototype.Select = function()
+{
+ var oRange = this._Range ;
+ if ( oRange )
+ {
+ var startContainer = oRange.startContainer ;
+
+ // If we have a collapsed range, inside an empty element, we must add
+ // something to it, otherwise the caret will not be visible.
+ if ( oRange.collapsed && startContainer.nodeType == 1 && startContainer.childNodes.length == 0 )
+ startContainer.appendChild( oRange._Document.createTextNode('') ) ;
+
+ var oDocRange = this.Window.document.createRange() ;
+ oDocRange.setStart( startContainer, oRange.startOffset ) ;
+
+ try
+ {
+ oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
+ }
+ catch ( e )
+ {
+ // There is a bug in Firefox implementation (it would be too easy
+ // otherwise). The new start can't be after the end (W3C says it can).
+ // So, let's create a new range and collapse it to the desired point.
+ if ( e.toString().Contains( 'NS_ERROR_ILLEGAL_VALUE' ) )
+ {
+ oRange.collapse( true ) ;
+ oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
+ }
+ else
+ throw( e ) ;
+ }
+
+ var oSel = this.Window.getSelection() ;
+ oSel.removeAllRanges() ;
+
+ // We must add a clone otherwise Firefox will have rendering issues.
+ oSel.addRange( oDocRange ) ;
+ }
+}
+
+// Not compatible with bookmark created with CreateBookmark2.
+// The bookmark nodes will be deleted from the document.
+FCKDomRange.prototype.SelectBookmark = function( bookmark )
+{
+ var domRange = this.Window.document.createRange() ;
+
+ var startNode = this.GetBookmarkNode( bookmark, true ) ;
+ var endNode = this.GetBookmarkNode( bookmark, false ) ;
+
+ domRange.setStart( startNode.parentNode, FCKDomTools.GetIndexOf( startNode ) ) ;
+ FCKDomTools.RemoveNode( startNode ) ;
+
+ if ( endNode )
+ {
+ domRange.setEnd( endNode.parentNode, FCKDomTools.GetIndexOf( endNode ) ) ;
+ FCKDomTools.RemoveNode( endNode ) ;
+ }
+
+ var selection = this.Window.getSelection() ;
+ selection.removeAllRanges() ;
+ selection.addRange( domRange ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_ie.js
new file mode 100644
index 0000000..0773afd
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_ie.js
@@ -0,0 +1,199 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ * (IE Implementation)
+ */
+
+FCKDomRange.prototype.MoveToSelection = function()
+{
+ this.Release( true ) ;
+
+ this._Range = new FCKW3CRange( this.Window.document ) ;
+
+ var oSel = this.Window.document.selection ;
+
+ if ( oSel.type != 'Control' )
+ {
+ var eMarkerStart = this._GetSelectionMarkerTag( true ) ;
+ var eMarkerEnd = this._GetSelectionMarkerTag( false ) ;
+
+ if ( !eMarkerStart && !eMarkerEnd )
+ {
+ this._Range.setStart( this.Window.document.body, 0 ) ;
+ this._UpdateElementInfo() ;
+ return ;
+ }
+
+ // Set the start boundary.
+ this._Range.setStart( eMarkerStart.parentNode, FCKDomTools.GetIndexOf( eMarkerStart ) ) ;
+ eMarkerStart.parentNode.removeChild( eMarkerStart ) ;
+
+ // Set the end boundary.
+ this._Range.setEnd( eMarkerEnd.parentNode, FCKDomTools.GetIndexOf( eMarkerEnd ) ) ;
+ eMarkerEnd.parentNode.removeChild( eMarkerEnd ) ;
+
+ this._UpdateElementInfo() ;
+ }
+ else
+ {
+ var oControl = oSel.createRange().item(0) ;
+
+ if ( oControl )
+ {
+ this._Range.setStartBefore( oControl ) ;
+ this._Range.setEndAfter( oControl ) ;
+ this._UpdateElementInfo() ;
+ }
+ }
+}
+
+FCKDomRange.prototype.Select = function( forceExpand )
+{
+ if ( this._Range )
+ this.SelectBookmark( this.CreateBookmark( true ), forceExpand ) ;
+}
+
+// Not compatible with bookmark created with CreateBookmark2.
+// The bookmark nodes will be deleted from the document.
+FCKDomRange.prototype.SelectBookmark = function( bookmark, forceExpand )
+{
+ var bIsCollapsed = this.CheckIsCollapsed() ;
+ var bIsStartMakerAlone ;
+ var dummySpan ;
+
+ // Create marker tags for the start and end boundaries.
+ var eStartMarker = this.GetBookmarkNode( bookmark, true ) ;
+
+ if ( !eStartMarker )
+ return ;
+
+ var eEndMarker ;
+ if ( !bIsCollapsed )
+ eEndMarker = this.GetBookmarkNode( bookmark, false ) ;
+
+ // Create the main range which will be used for the selection.
+ var oIERange = this.Window.document.body.createTextRange() ;
+
+ // Position the range at the start boundary.
+ oIERange.moveToElementText( eStartMarker ) ;
+ oIERange.moveStart( 'character', 1 ) ;
+
+ if ( eEndMarker )
+ {
+ // Create a tool range for the end.
+ var oIERangeEnd = this.Window.document.body.createTextRange() ;
+
+ // Position the tool range at the end.
+ oIERangeEnd.moveToElementText( eEndMarker ) ;
+
+ // Move the end boundary of the main range to match the tool range.
+ oIERange.setEndPoint( 'EndToEnd', oIERangeEnd ) ;
+ oIERange.moveEnd( 'character', -1 ) ;
+ }
+ else
+ {
+ bIsStartMakerAlone = ( forceExpand || !eStartMarker.previousSibling || eStartMarker.previousSibling.nodeName.toLowerCase() == 'br' ) && !eStartMarker.nextSibing ;
+
+ // Append a temporary <span>&#65279;</span> before the selection.
+ // This is needed to avoid IE destroying selections inside empty
+ // inline elements, like <b></b> (#253).
+ // It is also needed when placing the selection right after an inline
+ // element to avoid the selection moving inside of it.
+ dummySpan = this.Window.document.createElement( 'span' ) ;
+ dummySpan.innerHTML = '&#65279;' ; // Zero Width No-Break Space (U+FEFF). See #1359.
+ eStartMarker.parentNode.insertBefore( dummySpan, eStartMarker ) ;
+
+ if ( bIsStartMakerAlone )
+ {
+ // To expand empty blocks or line spaces after <br>, we need
+ // instead to have any char, which will be later deleted using the
+ // selection.
+ // \ufeff = Zero Width No-Break Space (U+FEFF). See #1359.
+ eStartMarker.parentNode.insertBefore( this.Window.document.createTextNode( '\ufeff' ), eStartMarker ) ;
+ }
+ }
+
+ if ( !this._Range )
+ this._Range = this.CreateRange() ;
+
+ // Remove the markers (reset the position, because of the changes in the DOM tree).
+ this._Range.setStartBefore( eStartMarker ) ;
+ eStartMarker.parentNode.removeChild( eStartMarker ) ;
+
+ if ( bIsCollapsed )
+ {
+ if ( bIsStartMakerAlone )
+ {
+ // Move the selection start to include the temporary &#65279;.
+ oIERange.moveStart( 'character', -1 ) ;
+
+ oIERange.select() ;
+
+ // Remove our temporary stuff.
+ this.Window.document.selection.clear() ;
+ }
+ else
+ oIERange.select() ;
+
+ FCKDomTools.RemoveNode( dummySpan ) ;
+ }
+ else
+ {
+ this._Range.setEndBefore( eEndMarker ) ;
+ eEndMarker.parentNode.removeChild( eEndMarker ) ;
+ oIERange.select() ;
+ }
+}
+
+FCKDomRange.prototype._GetSelectionMarkerTag = function( toStart )
+{
+ var doc = this.Window.document ;
+ var selection = doc.selection ;
+
+ // Get a range for the start boundary.
+ var oRange ;
+
+ // IE may throw an "unspecified error" on some cases (it happened when
+ // loading _samples/default.html), so try/catch.
+ try
+ {
+ oRange = selection.createRange() ;
+ }
+ catch (e)
+ {
+ return null ;
+ }
+
+ // IE might take the range object to the main window instead of inside the editor iframe window.
+ // This is known to happen when the editor window has not been selected before (See #933).
+ // We need to avoid that.
+ if ( oRange.parentElement().document != doc )
+ return null ;
+
+ oRange.collapse( toStart === true ) ;
+
+ // Paste a marker element at the collapsed range and get it from the DOM.
+ var sMarkerId = 'fck_dom_range_temp_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) ;
+ oRange.pasteHTML( '<span id="' + sMarkerId + '"></span>' ) ;
+
+ return doc.getElementById( sMarkerId ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrangeiterator.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrangeiterator.js
new file mode 100644
index 0000000..962b8b1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrangeiterator.js
@@ -0,0 +1,327 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKDomRangeIterator = function( range )
+{
+ /**
+ * The FCKDomRange object that marks the interation boundaries.
+ */
+ this.Range = range ;
+
+ /**
+ * Indicates that <br> elements must be used as paragraph boundaries.
+ */
+ this.ForceBrBreak = false ;
+
+ /**
+ * Guarantees that the iterator will always return "real" block elements.
+ * If "false", elements like <li>, <th> and <td> are returned. If "true", a
+ * dedicated block element block element will be created inside those
+ * elements to hold the selected content.
+ */
+ this.EnforceRealBlocks = false ;
+}
+
+FCKDomRangeIterator.CreateFromSelection = function( targetWindow )
+{
+ var range = new FCKDomRange( targetWindow ) ;
+ range.MoveToSelection() ;
+ return new FCKDomRangeIterator( range ) ;
+}
+
+FCKDomRangeIterator.prototype =
+{
+ /**
+ * Get the next paragraph element. It automatically breaks the document
+ * when necessary to generate block elements for the paragraphs.
+ */
+ GetNextParagraph : function()
+ {
+ // The block element to be returned.
+ var block ;
+
+ // The range object used to identify the paragraph contents.
+ var range ;
+
+ // Indicated that the current element in the loop is the last one.
+ var isLast ;
+
+ // Instructs to cleanup remaining BRs.
+ var removePreviousBr ;
+ var removeLastBr ;
+
+ var boundarySet = this.ForceBrBreak ? FCKListsLib.ListBoundaries : FCKListsLib.BlockBoundaries ;
+
+ // This is the first iteration. Let's initialize it.
+ if ( !this._LastNode )
+ {
+ var range = this.Range.Clone() ;
+ range.Expand( this.ForceBrBreak ? 'list_contents' : 'block_contents' ) ;
+
+ this._NextNode = range.GetTouchedStartNode() ;
+ this._LastNode = range.GetTouchedEndNode() ;
+
+ // Let's reuse this variable.
+ range = null ;
+ }
+
+ var currentNode = this._NextNode ;
+ var lastNode = this._LastNode ;
+
+ this._NextNode = null ;
+
+ while ( currentNode )
+ {
+ // closeRange indicates that a paragraph boundary has been found,
+ // so the range can be closed.
+ var closeRange = false ;
+
+ // includeNode indicates that the current node is good to be part
+ // of the range. By default, any non-element node is ok for it.
+ var includeNode = ( currentNode.nodeType != 1 ) ;
+
+ var continueFromSibling = false ;
+
+ // If it is an element node, let's check if it can be part of the
+ // range.
+ if ( !includeNode )
+ {
+ var nodeName = currentNode.nodeName.toLowerCase() ;
+
+ if ( boundarySet[ nodeName ] && ( !FCKBrowserInfo.IsIE || currentNode.scopeName == 'HTML' ) )
+ {
+ // <br> boundaries must be part of the range. It will
+ // happen only if ForceBrBreak.
+ if ( nodeName == 'br' )
+ includeNode = true ;
+ else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' )
+ {
+ // If we have found an empty block, and haven't started
+ // the range yet, it means we must return this block.
+ block = currentNode ;
+ isLast = currentNode == lastNode ;
+ break ;
+ }
+
+ // The range must finish right before the boundary,
+ // including possibly skipped empty spaces. (#1603)
+ if ( range )
+ {
+ range.SetEnd( currentNode, 3, true ) ;
+
+ // The found boundary must be set as the next one at this
+ // point. (#1717)
+ if ( nodeName != 'br' )
+ this._NextNode = FCKDomTools.GetNextSourceNode( currentNode, true, null, lastNode ) || currentNode ;
+ }
+
+ closeRange = true ;
+ }
+ else
+ {
+ // If we have child nodes, let's check them.
+ if ( currentNode.firstChild )
+ {
+ // If we don't have a range yet, let's start it.
+ if ( !range )
+ {
+ range = new FCKDomRange( this.Range.Window ) ;
+ range.SetStart( currentNode, 3, true ) ;
+ }
+
+ currentNode = currentNode.firstChild ;
+ continue ;
+ }
+ includeNode = true ;
+ }
+ }
+ else if ( currentNode.nodeType == 3 )
+ {
+ // Ignore normal whitespaces (i.e. not including &nbsp; or
+ // other unicode whitespaces) before/after a block node.
+ if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) )
+ includeNode = false ;
+ }
+
+ // The current node is good to be part of the range and we are
+ // starting a new range, initialize it first.
+ if ( includeNode && !range )
+ {
+ range = new FCKDomRange( this.Range.Window ) ;
+ range.SetStart( currentNode, 3, true ) ;
+ }
+
+ // The last node has been found.
+ isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ;
+// isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ;
+
+ // If we are in an element boundary, let's check if it is time
+ // to close the range, otherwise we include the parent within it.
+ if ( range && !closeRange )
+ {
+ while ( !currentNode.nextSibling && !isLast )
+ {
+ var parentNode = currentNode.parentNode ;
+
+ if ( boundarySet[ parentNode.nodeName.toLowerCase() ] )
+ {
+ closeRange = true ;
+ isLast = isLast || ( parentNode == lastNode ) ;
+ break ;
+ }
+
+ currentNode = parentNode ;
+ includeNode = true ;
+ isLast = ( currentNode == lastNode ) ;
+ continueFromSibling = true ;
+ }
+ }
+
+ // Now finally include the node.
+ if ( includeNode )
+ range.SetEnd( currentNode, 4, true ) ;
+
+ // We have found a block boundary. Let's close the range and move out of the
+ // loop.
+ if ( ( closeRange || isLast ) && range )
+ {
+ range._UpdateElementInfo() ;
+
+ if ( range.StartNode == range.EndNode
+ && range.StartNode.parentNode == range.StartBlockLimit
+ && range.StartNode.getAttribute && range.StartNode.getAttribute( '_fck_bookmark' ) )
+ range = null ;
+ else
+ break ;
+ }
+
+ if ( isLast )
+ break ;
+
+ currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling, null, lastNode ) ;
+ }
+
+ // Now, based on the processed range, look for (or create) the block to be returned.
+ if ( !block )
+ {
+ // If no range has been found, this is the end.
+ if ( !range )
+ {
+ this._NextNode = null ;
+ return null ;
+ }
+
+ block = range.StartBlock ;
+
+ if ( !block
+ && !this.EnforceRealBlocks
+ && range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' )
+ && range.CheckStartOfBlock()
+ && range.CheckEndOfBlock() )
+ {
+ block = range.StartBlockLimit ;
+ }
+ else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) )
+ {
+ // Create the fixed block.
+ block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
+
+ // Move the contents of the temporary range to the fixed block.
+ range.ExtractContents().AppendTo( block ) ;
+ FCKDomTools.TrimNode( block ) ;
+
+ // Insert the fixed block into the DOM.
+ range.InsertNode( block ) ;
+
+ removePreviousBr = true ;
+ removeLastBr = true ;
+ }
+ else if ( block.nodeName.toLowerCase() != 'li' )
+ {
+ // If the range doesn't includes the entire contents of the
+ // block, we must split it, isolating the range in a dedicated
+ // block.
+ if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() )
+ {
+ // The resulting block will be a clone of the current one.
+ block = block.cloneNode( false ) ;
+
+ // Extract the range contents, moving it to the new block.
+ range.ExtractContents().AppendTo( block ) ;
+ FCKDomTools.TrimNode( block ) ;
+
+ // Split the block. At this point, the range will be in the
+ // right position for our intents.
+ var splitInfo = range.SplitBlock() ;
+
+ removePreviousBr = !splitInfo.WasStartOfBlock ;
+ removeLastBr = !splitInfo.WasEndOfBlock ;
+
+ // Insert the new block into the DOM.
+ range.InsertNode( block ) ;
+ }
+ }
+ else if ( !isLast )
+ {
+ // LIs are returned as is, with all their children (due to the
+ // nested lists). But, the next node is the node right after
+ // the current range, which could be an <li> child (nested
+ // lists) or the next sibling <li>.
+
+ this._NextNode = block == lastNode ? null : FCKDomTools.GetNextSourceNode( range.EndNode, true, null, lastNode ) ;
+ return block ;
+ }
+ }
+
+ if ( removePreviousBr )
+ {
+ var previousSibling = block.previousSibling ;
+ if ( previousSibling && previousSibling.nodeType == 1 )
+ {
+ if ( previousSibling.nodeName.toLowerCase() == 'br' )
+ previousSibling.parentNode.removeChild( previousSibling ) ;
+ else if ( previousSibling.lastChild && previousSibling.lastChild.nodeName.IEquals( 'br' ) )
+ previousSibling.removeChild( previousSibling.lastChild ) ;
+ }
+ }
+
+ if ( removeLastBr )
+ {
+ var lastChild = block.lastChild ;
+ if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName.toLowerCase() == 'br' )
+ block.removeChild( lastChild ) ;
+ }
+
+ // Get a reference for the next element. This is important because the
+ // above block can be removed or changed, so we can rely on it for the
+ // next interation.
+ if ( !this._NextNode )
+ this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ;
+
+ return block ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckeditingarea.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckeditingarea.js
new file mode 100644
index 0000000..4f7044e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckeditingarea.js
@@ -0,0 +1,368 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKEditingArea Class: renders an editable area.
+ */
+
+/**
+ * @constructor
+ * @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted.
+ */
+var FCKEditingArea = function( targetElement )
+{
+ this.TargetElement = targetElement ;
+ this.Mode = FCK_EDITMODE_WYSIWYG ;
+
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ;
+}
+
+
+/**
+ * @param {String} html The complete HTML for the page, including DOCTYPE and the <html> tag.
+ */
+FCKEditingArea.prototype.Start = function( html, secondCall )
+{
+ var eTargetElement = this.TargetElement ;
+ var oTargetDocument = FCKTools.GetElementDocument( eTargetElement ) ;
+
+ // Remove all child nodes from the target.
+ while( eTargetElement.firstChild )
+ eTargetElement.removeChild( eTargetElement.firstChild ) ;
+
+ if ( this.Mode == FCK_EDITMODE_WYSIWYG )
+ {
+ // For FF, document.domain must be set only when different, otherwhise
+ // we'll strangely have "Permission denied" issues.
+ if ( FCK_IS_CUSTOM_DOMAIN )
+ html = '<script>document.domain="' + FCK_RUNTIME_DOMAIN + '";</script>' + html ;
+
+ // IE has a bug with the <base> tag... it must have a </base> closer,
+ // otherwise the all successive tags will be set as children nodes of the <base>.
+ if ( FCKBrowserInfo.IsIE )
+ html = html.replace( /(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1></base>' ) ;
+ else if ( !secondCall )
+ {
+ // Gecko moves some tags out of the body to the head, so we must use
+ // innerHTML to set the body contents (SF BUG 1526154).
+
+ // Extract the BODY contents from the html.
+ var oMatchBefore = html.match( FCKRegexLib.BeforeBody ) ;
+ var oMatchAfter = html.match( FCKRegexLib.AfterBody ) ;
+
+ if ( oMatchBefore && oMatchAfter )
+ {
+ var sBody = html.substr( oMatchBefore[1].length,
+ html.length - oMatchBefore[1].length - oMatchAfter[1].length ) ; // This is the BODY tag contents.
+
+ html =
+ oMatchBefore[1] + // This is the HTML until the <body...> tag, inclusive.
+ '&nbsp;' +
+ oMatchAfter[1] ; // This is the HTML from the </body> tag, inclusive.
+
+ // If nothing in the body, place a BOGUS tag so the cursor will appear.
+ if ( FCKBrowserInfo.IsGecko && ( sBody.length == 0 || FCKRegexLib.EmptyParagraph.test( sBody ) ) )
+ sBody = '<br type="_moz">' ;
+
+ this._BodyHTML = sBody ;
+
+ }
+ else
+ this._BodyHTML = html ; // Invalid HTML input.
+ }
+
+ // Create the editing area IFRAME.
+ var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ;
+
+ // IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
+ // See #1055.
+ var sOverrideError = '<script type="text/javascript" _fcktemp="true">window.onerror=function(){return true;};</script>' ;
+
+ oIFrame.frameBorder = 0 ;
+ oIFrame.style.width = oIFrame.style.height = '100%' ;
+
+ if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE )
+ {
+ window._FCKHtmlToLoad = html.replace( /<head>/i, '<head>' + sOverrideError ) ;
+ oIFrame.src = 'javascript:void( (function(){' +
+ 'document.open() ;' +
+ 'document.domain="' + document.domain + '" ;' +
+ 'document.write( window.parent._FCKHtmlToLoad );' +
+ 'document.close() ;' +
+ 'window.parent._FCKHtmlToLoad = null ;' +
+ '})() )' ;
+ }
+ else if ( !FCKBrowserInfo.IsGecko )
+ {
+ // Firefox will render the tables inside the body in Quirks mode if the
+ // source of the iframe is set to javascript. see #515
+ oIFrame.src = 'javascript:void(0)' ;
+ }
+
+ // Append the new IFRAME to the target. For IE, it must be done after
+ // setting the "src", to avoid the "secure/unsecure" message under HTTPS.
+ eTargetElement.appendChild( oIFrame ) ;
+
+ // Get the window and document objects used to interact with the newly created IFRAME.
+ this.Window = oIFrame.contentWindow ;
+
+ // IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
+ // TODO: This error handler is not being fired.
+ // this.Window.onerror = function() { alert( 'Error!' ) ; return true ; }
+
+ if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE )
+ {
+ var oDoc = this.Window.document ;
+
+ oDoc.open() ;
+ oDoc.write( html.replace( /<head>/i, '<head>' + sOverrideError ) ) ;
+ oDoc.close() ;
+ }
+
+ if ( FCKBrowserInfo.IsAIR )
+ FCKAdobeAIR.EditingArea_Start( oDoc, html ) ;
+
+ // Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it
+ // will magically work.
+ if ( FCKBrowserInfo.IsGecko10 && !secondCall )
+ {
+ this.Start( html, true ) ;
+ return ;
+ }
+
+ if ( oIFrame.readyState && oIFrame.readyState != 'completed' )
+ {
+ var editArea = this ;
+
+ // Using a IE alternative for DOMContentLoaded, similar to the
+ // solution proposed at http://javascript.nwbox.com/IEContentLoaded/
+ setTimeout( function()
+ {
+ try
+ {
+ editArea.Window.document.documentElement.doScroll("left") ;
+ }
+ catch(e)
+ {
+ setTimeout( arguments.callee, 0 ) ;
+ return ;
+ }
+ editArea.Window._FCKEditingArea = editArea ;
+ FCKEditingArea_CompleteStart.call( editArea.Window ) ;
+ }, 0 ) ;
+ }
+ else
+ {
+ this.Window._FCKEditingArea = this ;
+
+ // FF 1.0.x is buggy... we must wait a lot to enable editing because
+ // sometimes the content simply disappears, for example when pasting
+ // "bla1!<img src='some_url'>!bla2" in the source and then switching
+ // back to design.
+ if ( FCKBrowserInfo.IsGecko10 )
+ this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ;
+ else
+ FCKEditingArea_CompleteStart.call( this.Window ) ;
+ }
+ }
+ else
+ {
+ var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ;
+ eTextarea.className = 'SourceField' ;
+ eTextarea.dir = 'ltr' ;
+ FCKDomTools.SetElementStyles( eTextarea,
+ {
+ width : '100%',
+ height : '100%',
+ border : 'none',
+ resize : 'none',
+ outline : 'none'
+ } ) ;
+ eTargetElement.appendChild( eTextarea ) ;
+
+ eTextarea.value = html ;
+
+ // Fire the "OnLoad" event.
+ FCKTools.RunFunction( this.OnLoad ) ;
+ }
+}
+
+// "this" here is FCKEditingArea.Window
+function FCKEditingArea_CompleteStart()
+{
+ // On Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
+ if ( !this.document.body )
+ {
+ this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ;
+ return ;
+ }
+
+ var oEditorArea = this._FCKEditingArea ;
+
+ // Save this reference to be re-used later.
+ oEditorArea.Document = oEditorArea.Window.document ;
+
+ oEditorArea.MakeEditable() ;
+
+ // Fire the "OnLoad" event.
+ FCKTools.RunFunction( oEditorArea.OnLoad ) ;
+}
+
+FCKEditingArea.prototype.MakeEditable = function()
+{
+ var oDoc = this.Document ;
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // Kludge for #141 and #523
+ oDoc.body.disabled = true ;
+ oDoc.body.contentEditable = true ;
+ oDoc.body.removeAttribute( "disabled" ) ;
+
+ /* The following commands don't throw errors, but have no effect.
+ oDoc.execCommand( 'AutoDetect', false, false ) ;
+ oDoc.execCommand( 'KeepSelection', false, true ) ;
+ */
+ }
+ else
+ {
+ try
+ {
+ // Disable Firefox 2 Spell Checker.
+ oDoc.body.spellcheck = ( this.FFSpellChecker !== false ) ;
+
+ if ( this._BodyHTML )
+ {
+ oDoc.body.innerHTML = this._BodyHTML ;
+ oDoc.body.offsetLeft ; // Don't remove, this is a hack to fix Opera 9.50, see #2264.
+ this._BodyHTML = null ;
+ }
+
+ oDoc.designMode = 'on' ;
+
+ // Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez)
+ oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ;
+
+ // Disable the standard table editing features of Firefox.
+ oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ;
+ }
+ catch (e)
+ {
+ // In Firefox if the iframe is initially hidden it can't be set to designMode and it raises an exception
+ // So we set up a DOM Mutation event Listener on the HTML, as it will raise several events when the document is visible again
+ FCKTools.AddEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+ }
+
+ }
+}
+
+// This function processes the notifications of the DOM Mutation event on the document
+// We use it to know that the document will be ready to be editable again (or we hope so)
+function FCKEditingArea_Document_AttributeNodeModified( evt )
+{
+ var editingArea = evt.currentTarget.contentWindow._FCKEditingArea ;
+
+ // We want to run our function after the events no longer fire, so we can know that it's a stable situation
+ if ( editingArea._timer )
+ window.clearTimeout( editingArea._timer ) ;
+
+ editingArea._timer = FCKTools.SetTimeout( FCKEditingArea_MakeEditableByMutation, 1000, editingArea ) ;
+}
+
+// This function ideally should be called after the document is visible, it does clean up of the
+// mutation tracking and tries again to make the area editable.
+function FCKEditingArea_MakeEditableByMutation()
+{
+ // Clean up
+ delete this._timer ;
+ // Now we don't want to keep on getting this event
+ FCKTools.RemoveEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+ // Let's try now to set the editing area editable
+ // If it fails it will set up the Mutation Listener again automatically
+ this.MakeEditable() ;
+}
+
+FCKEditingArea.prototype.Focus = function()
+{
+ try
+ {
+ if ( this.Mode == FCK_EDITMODE_WYSIWYG )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ this._FocusIE() ;
+ else
+ this.Window.focus() ;
+ }
+ else
+ {
+ var oDoc = FCKTools.GetElementDocument( this.Textarea ) ;
+ if ( (!oDoc.hasFocus || oDoc.hasFocus() ) && oDoc.activeElement == this.Textarea )
+ return ;
+
+ this.Textarea.focus() ;
+ }
+ }
+ catch(e) {}
+}
+
+FCKEditingArea.prototype._FocusIE = function()
+{
+ // In IE it can happen that the document is in theory focused but the
+ // active element is outside of it.
+ this.Document.body.setActive() ;
+
+ this.Window.focus() ;
+
+ // Kludge for #141... yet more code to workaround IE bugs
+ var range = this.Document.selection.createRange() ;
+
+ var parentNode = range.parentElement() ;
+ var parentTag = parentNode.nodeName.toLowerCase() ;
+
+ // Only apply the fix when in a block, and the block is empty.
+ if ( parentNode.childNodes.length > 0 ||
+ !( FCKListsLib.BlockElements[parentTag] ||
+ FCKListsLib.NonEmptyBlockElements[parentTag] ) )
+ {
+ return ;
+ }
+
+ // Force the selection to happen, in this way we guarantee the focus will
+ // be there.
+ range = new FCKDomRange( this.Window ) ;
+ range.MoveToElementEditStart( parentNode ) ;
+ range.Select() ;
+}
+
+function FCKEditingArea_Cleanup()
+{
+ if ( this.Document )
+ this.Document.body.innerHTML = "" ;
+ this.TargetElement = null ;
+ this.IFrame = null ;
+ this.Document = null ;
+ this.Textarea = null ;
+
+ if ( this.Window )
+ {
+ this.Window._FCKEditingArea = null ;
+ this.Window = null ;
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckelementpath.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckelementpath.js
new file mode 100644
index 0000000..488b19f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckelementpath.js
@@ -0,0 +1,89 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manages the DOM ascensors element list of a specific DOM node
+ * (limited to body, inclusive).
+ */
+
+var FCKElementPath = function( lastNode )
+{
+ var eBlock = null ;
+ var eBlockLimit = null ;
+
+ var aElements = new Array() ;
+
+ var e = lastNode ;
+ while ( e )
+ {
+ if ( e.nodeType == 1 )
+ {
+ if ( !this.LastElement )
+ this.LastElement = e ;
+
+ var sElementName = e.nodeName.toLowerCase() ;
+ if ( FCKBrowserInfo.IsIE && e.scopeName != 'HTML' )
+ sElementName = e.scopeName.toLowerCase() + ':' + sElementName ;
+
+ if ( !eBlockLimit )
+ {
+ if ( !eBlock && FCKListsLib.PathBlockElements[ sElementName ] != null )
+ eBlock = e ;
+
+ if ( FCKListsLib.PathBlockLimitElements[ sElementName ] != null )
+ {
+ // DIV is considered the Block, if no block is available (#525)
+ // and if it doesn't contain other blocks.
+ if ( !eBlock && sElementName == 'div' && !FCKElementPath._CheckHasBlock( e ) )
+ eBlock = e ;
+ else
+ eBlockLimit = e ;
+ }
+ }
+
+ aElements.push( e ) ;
+
+ if ( sElementName == 'body' )
+ break ;
+ }
+ e = e.parentNode ;
+ }
+
+ this.Block = eBlock ;
+ this.BlockLimit = eBlockLimit ;
+ this.Elements = aElements ;
+}
+
+/**
+ * Check if an element contains any block element.
+ */
+FCKElementPath._CheckHasBlock = function( element )
+{
+ var childNodes = element.childNodes ;
+
+ for ( var i = 0, count = childNodes.length ; i < count ; i++ )
+ {
+ var child = childNodes[i] ;
+
+ if ( child.nodeType == 1 && FCKListsLib.BlockElements[ child.nodeName.toLowerCase() ] )
+ return true ;
+ }
+
+ return false ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckenterkey.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckenterkey.js
new file mode 100644
index 0000000..8819a19
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckenterkey.js
@@ -0,0 +1,708 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Controls the [Enter] keystroke behavior in a document.
+ */
+
+/*
+ * Constructor.
+ * @targetDocument : the target document.
+ * @enterMode : the behavior for the <Enter> keystroke.
+ * May be "p", "div", "br". Default is "p".
+ * @shiftEnterMode : the behavior for the <Shift>+<Enter> keystroke.
+ * May be "p", "div", "br". Defaults to "br".
+ */
+var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces )
+{
+ this.Window = targetWindow ;
+ this.EnterMode = enterMode || 'p' ;
+ this.ShiftEnterMode = shiftEnterMode || 'br' ;
+
+ // Setup the Keystroke Handler.
+ var oKeystrokeHandler = new FCKKeystrokeHandler( false ) ;
+ oKeystrokeHandler._EnterKey = this ;
+ oKeystrokeHandler.OnKeystroke = FCKEnterKey_OnKeystroke ;
+
+ oKeystrokeHandler.SetKeystrokes( [
+ [ 13 , 'Enter' ],
+ [ SHIFT + 13, 'ShiftEnter' ],
+ [ 8 , 'Backspace' ],
+ [ CTRL + 8 , 'CtrlBackspace' ],
+ [ 46 , 'Delete' ]
+ ] ) ;
+
+ this.TabText = '' ;
+
+ // Safari by default inserts 4 spaces on TAB, while others make the editor
+ // loose focus. So, we need to handle it here to not include those spaces.
+ if ( tabSpaces > 0 || FCKBrowserInfo.IsSafari )
+ {
+ while ( tabSpaces-- )
+ this.TabText += '\xa0' ;
+
+ oKeystrokeHandler.SetKeystrokes( [ 9, 'Tab' ] );
+ }
+
+ oKeystrokeHandler.AttachToElement( targetWindow.document ) ;
+}
+
+
+function FCKEnterKey_OnKeystroke( keyCombination, keystrokeValue )
+{
+ var oEnterKey = this._EnterKey ;
+
+ try
+ {
+ switch ( keystrokeValue )
+ {
+ case 'Enter' :
+ return oEnterKey.DoEnter() ;
+ break ;
+ case 'ShiftEnter' :
+ return oEnterKey.DoShiftEnter() ;
+ break ;
+ case 'Backspace' :
+ return oEnterKey.DoBackspace() ;
+ break ;
+ case 'Delete' :
+ return oEnterKey.DoDelete() ;
+ break ;
+ case 'Tab' :
+ return oEnterKey.DoTab() ;
+ break ;
+ case 'CtrlBackspace' :
+ return oEnterKey.DoCtrlBackspace() ;
+ break ;
+ }
+ }
+ catch (e)
+ {
+ // If for any reason we are not able to handle it, go
+ // ahead with the browser default behavior.
+ }
+
+ return false ;
+}
+
+/*
+ * Executes the <Enter> key behavior.
+ */
+FCKEnterKey.prototype.DoEnter = function( mode, hasShift )
+{
+ // Save an undo snapshot before doing anything
+ FCKUndo.SaveUndoStep() ;
+
+ this._HasShift = ( hasShift === true ) ;
+
+ var parentElement = FCKSelection.GetParentElement() ;
+ var parentPath = new FCKElementPath( parentElement ) ;
+ var sMode = mode || this.EnterMode ;
+
+ if ( sMode == 'br' || parentPath.Block && parentPath.Block.tagName.toLowerCase() == 'pre' )
+ return this._ExecuteEnterBr() ;
+ else
+ return this._ExecuteEnterBlock( sMode ) ;
+}
+
+/*
+ * Executes the <Shift>+<Enter> key behavior.
+ */
+FCKEnterKey.prototype.DoShiftEnter = function()
+{
+ return this.DoEnter( this.ShiftEnterMode, true ) ;
+}
+
+/*
+ * Executes the <Backspace> key behavior.
+ */
+FCKEnterKey.prototype.DoBackspace = function()
+{
+ var bCustom = false ;
+
+ // Get the current selection.
+ var oRange = new FCKDomRange( this.Window ) ;
+ oRange.MoveToSelection() ;
+
+ // Kludge for #247
+ if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+ {
+ this._FixIESelectAllBug( oRange ) ;
+ return true ;
+ }
+
+ var isCollapsed = oRange.CheckIsCollapsed() ;
+
+ if ( !isCollapsed )
+ {
+ // Bug #327, Backspace with an img selection would activate the default action in IE.
+ // Let's override that with our logic here.
+ if ( FCKBrowserInfo.IsIE && this.Window.document.selection.type.toLowerCase() == "control" )
+ {
+ var controls = this.Window.document.selection.createRange() ;
+ for ( var i = controls.length - 1 ; i >= 0 ; i-- )
+ {
+ var el = controls.item( i ) ;
+ el.parentNode.removeChild( el ) ;
+ }
+ return true ;
+ }
+
+ return false ;
+ }
+
+ // On IE, it is better for us handle the deletion if the caret is preceeded
+ // by a <br> (#1383).
+ if ( FCKBrowserInfo.IsIE )
+ {
+ var previousElement = FCKDomTools.GetPreviousSourceElement( oRange.StartNode, true ) ;
+
+ if ( previousElement && previousElement.nodeName.toLowerCase() == 'br' )
+ {
+ // Create a range that starts after the <br> and ends at the
+ // current range position.
+ var testRange = oRange.Clone() ;
+ testRange.SetStart( previousElement, 4 ) ;
+
+ // If that range is empty, we can proceed cleaning that <br> manually.
+ if ( testRange.CheckIsEmpty() )
+ {
+ previousElement.parentNode.removeChild( previousElement ) ;
+ return true ;
+ }
+ }
+ }
+
+ var oStartBlock = oRange.StartBlock ;
+ var oEndBlock = oRange.EndBlock ;
+
+ // The selection boundaries must be in the same "block limit" element
+ if ( oRange.StartBlockLimit == oRange.EndBlockLimit && oStartBlock && oEndBlock )
+ {
+ if ( !isCollapsed )
+ {
+ var bEndOfBlock = oRange.CheckEndOfBlock() ;
+
+ oRange.DeleteContents() ;
+
+ if ( oStartBlock != oEndBlock )
+ {
+ oRange.SetStart(oEndBlock,1) ;
+ oRange.SetEnd(oEndBlock,1) ;
+
+// if ( bEndOfBlock )
+// oEndBlock.parentNode.removeChild( oEndBlock ) ;
+ }
+
+ oRange.Select() ;
+
+ bCustom = ( oStartBlock == oEndBlock ) ;
+ }
+
+ if ( oRange.CheckStartOfBlock() )
+ {
+ var oCurrentBlock = oRange.StartBlock ;
+
+ var ePrevious = FCKDomTools.GetPreviousSourceElement( oCurrentBlock, true, [ 'BODY', oRange.StartBlockLimit.nodeName ], ['UL','OL'] ) ;
+
+ bCustom = this._ExecuteBackspace( oRange, ePrevious, oCurrentBlock ) ;
+ }
+ else if ( FCKBrowserInfo.IsGeckoLike )
+ {
+ // Firefox and Opera (#1095) loose the selection when executing
+ // CheckStartOfBlock, so we must reselect.
+ oRange.Select() ;
+ }
+ }
+
+ oRange.Release() ;
+ return bCustom ;
+}
+
+FCKEnterKey.prototype.DoCtrlBackspace = function()
+{
+ FCKUndo.SaveUndoStep() ;
+ var oRange = new FCKDomRange( this.Window ) ;
+ oRange.MoveToSelection() ;
+ if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+ {
+ this._FixIESelectAllBug( oRange ) ;
+ return true ;
+ }
+ return false ;
+}
+
+FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBlock )
+{
+ var bCustom = false ;
+
+ // We could be in a nested LI.
+ if ( !previous && currentBlock && currentBlock.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) )
+ {
+ this._OutdentWithSelection( currentBlock, range ) ;
+ return true ;
+ }
+
+ if ( previous && previous.nodeName.IEquals( 'LI' ) )
+ {
+ var oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
+
+ while ( oNestedList )
+ {
+ previous = FCKDomTools.GetLastChild( oNestedList, 'LI' ) ;
+ oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
+ }
+ }
+
+ if ( previous && currentBlock )
+ {
+ // If we are in a LI, and the previous block is not an LI, we must outdent it.
+ if ( currentBlock.nodeName.IEquals( 'LI' ) && !previous.nodeName.IEquals( 'LI' ) )
+ {
+ this._OutdentWithSelection( currentBlock, range ) ;
+ return true ;
+ }
+
+ // Take a reference to the parent for post processing cleanup.
+ var oCurrentParent = currentBlock.parentNode ;
+
+ var sPreviousName = previous.nodeName.toLowerCase() ;
+ if ( FCKListsLib.EmptyElements[ sPreviousName ] != null || sPreviousName == 'table' )
+ {
+ FCKDomTools.RemoveNode( previous ) ;
+ bCustom = true ;
+ }
+ else
+ {
+ // Remove the current block.
+ FCKDomTools.RemoveNode( currentBlock ) ;
+
+ // Remove any empty tag left by the block removal.
+ while ( oCurrentParent.innerHTML.Trim().length == 0 )
+ {
+ var oParent = oCurrentParent.parentNode ;
+ oParent.removeChild( oCurrentParent ) ;
+ oCurrentParent = oParent ;
+ }
+
+ // Cleanup the previous and the current elements.
+ FCKDomTools.LTrimNode( currentBlock ) ;
+ FCKDomTools.RTrimNode( previous ) ;
+
+ // Append a space to the previous.
+ // Maybe it is not always desirable...
+ // previous.appendChild( this.Window.document.createTextNode( ' ' ) ) ;
+
+ // Set the range to the end of the previous element and bookmark it.
+ range.SetStart( previous, 2, true ) ;
+ range.Collapse( true ) ;
+ var oBookmark = range.CreateBookmark( true ) ;
+
+ // Move the contents of the block to the previous element and delete it.
+ // But for some block types (e.g. table), moving the children to the previous block makes no sense.
+ // So a check is needed. (See #1081)
+ if ( ! currentBlock.tagName.IEquals( [ 'TABLE' ] ) )
+ FCKDomTools.MoveChildren( currentBlock, previous ) ;
+
+ // Place the selection at the bookmark.
+ range.SelectBookmark( oBookmark ) ;
+
+ bCustom = true ;
+ }
+ }
+
+ return bCustom ;
+}
+
+/*
+ * Executes the <Delete> key behavior.
+ */
+FCKEnterKey.prototype.DoDelete = function()
+{
+ // Save an undo snapshot before doing anything
+ // This is to conform with the behavior seen in MS Word
+ FCKUndo.SaveUndoStep() ;
+
+ // The <Delete> has the same effect as the <Backspace>, so we have the same
+ // results if we just move to the next block and apply the same <Backspace> logic.
+
+ var bCustom = false ;
+
+ // Get the current selection.
+ var oRange = new FCKDomRange( this.Window ) ;
+ oRange.MoveToSelection() ;
+
+ // Kludge for #247
+ if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+ {
+ this._FixIESelectAllBug( oRange ) ;
+ return true ;
+ }
+
+ // There is just one special case for collapsed selections at the end of a block.
+ if ( oRange.CheckIsCollapsed() && oRange.CheckEndOfBlock( FCKBrowserInfo.IsGeckoLike ) )
+ {
+ var oCurrentBlock = oRange.StartBlock ;
+ var eCurrentCell = FCKTools.GetElementAscensor( oCurrentBlock, 'td' );
+
+ var eNext = FCKDomTools.GetNextSourceElement( oCurrentBlock, true, [ oRange.StartBlockLimit.nodeName ],
+ ['UL','OL','TR'], true ) ;
+
+ // Bug #1323 : if we're in a table cell, and the next node belongs to a different cell, then don't
+ // delete anything.
+ if ( eCurrentCell )
+ {
+ var eNextCell = FCKTools.GetElementAscensor( eNext, 'td' );
+ if ( eNextCell != eCurrentCell )
+ return true ;
+ }
+
+ bCustom = this._ExecuteBackspace( oRange, oCurrentBlock, eNext ) ;
+ }
+
+ oRange.Release() ;
+ return bCustom ;
+}
+
+/*
+ * Executes the <Tab> key behavior.
+ */
+FCKEnterKey.prototype.DoTab = function()
+{
+ var oRange = new FCKDomRange( this.Window );
+ oRange.MoveToSelection() ;
+
+ // If the user pressed <tab> inside a table, we should give him the default behavior ( moving between cells )
+ // instead of giving him more non-breaking spaces. (Bug #973)
+ var node = oRange._Range.startContainer ;
+ while ( node )
+ {
+ if ( node.nodeType == 1 )
+ {
+ var tagName = node.tagName.toLowerCase() ;
+ if ( tagName == "tr" || tagName == "td" || tagName == "th" || tagName == "tbody" || tagName == "table" )
+ return false ;
+ else
+ break ;
+ }
+ node = node.parentNode ;
+ }
+
+ if ( this.TabText )
+ {
+ oRange.DeleteContents() ;
+ oRange.InsertNode( this.Window.document.createTextNode( this.TabText ) ) ;
+ oRange.Collapse( false ) ;
+ oRange.Select() ;
+ }
+ return true ;
+}
+
+FCKEnterKey.prototype._ExecuteEnterBlock = function( blockTag, range )
+{
+ // Get the current selection.
+ var oRange = range || new FCKDomRange( this.Window ) ;
+
+ var oSplitInfo = oRange.SplitBlock( blockTag ) ;
+
+ if ( oSplitInfo )
+ {
+ // Get the current blocks.
+ var ePreviousBlock = oSplitInfo.PreviousBlock ;
+ var eNextBlock = oSplitInfo.NextBlock ;
+
+ var bIsStartOfBlock = oSplitInfo.WasStartOfBlock ;
+ var bIsEndOfBlock = oSplitInfo.WasEndOfBlock ;
+
+ // If there is one block under a list item, modify the split so that the list item gets split as well. (Bug #1647)
+ if ( eNextBlock )
+ {
+ if ( eNextBlock.parentNode.nodeName.IEquals( 'li' ) )
+ {
+ FCKDomTools.BreakParent( eNextBlock, eNextBlock.parentNode ) ;
+ FCKDomTools.MoveNode( eNextBlock, eNextBlock.nextSibling, true ) ;
+ }
+ }
+ else if ( ePreviousBlock && ePreviousBlock.parentNode.nodeName.IEquals( 'li' ) )
+ {
+ FCKDomTools.BreakParent( ePreviousBlock, ePreviousBlock.parentNode ) ;
+ oRange.MoveToElementEditStart( ePreviousBlock.nextSibling );
+ FCKDomTools.MoveNode( ePreviousBlock, ePreviousBlock.previousSibling ) ;
+ }
+
+ // If we have both the previous and next blocks, it means that the
+ // boundaries were on separated blocks, or none of them where on the
+ // block limits (start/end).
+ if ( !bIsStartOfBlock && !bIsEndOfBlock )
+ {
+ // If the next block is an <li> with another list tree as the first child
+ // We'll need to append a placeholder or the list item wouldn't be editable. (Bug #1420)
+ if ( eNextBlock.nodeName.IEquals( 'li' ) && eNextBlock.firstChild
+ && eNextBlock.firstChild.nodeName.IEquals( ['ul', 'ol'] ) )
+ eNextBlock.insertBefore( FCKTools.GetElementDocument( eNextBlock ).createTextNode( '\xa0' ), eNextBlock.firstChild ) ;
+ // Move the selection to the end block.
+ if ( eNextBlock )
+ oRange.MoveToElementEditStart( eNextBlock ) ;
+ }
+ else
+ {
+ if ( bIsStartOfBlock && bIsEndOfBlock && ePreviousBlock.tagName.toUpperCase() == 'LI' )
+ {
+ oRange.MoveToElementStart( ePreviousBlock ) ;
+ this._OutdentWithSelection( ePreviousBlock, oRange ) ;
+ oRange.Release() ;
+ return true ;
+ }
+
+ var eNewBlock ;
+
+ if ( ePreviousBlock )
+ {
+ var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ;
+
+ // If is a header tag, or we are in a Shift+Enter (#77),
+ // create a new block element (later in the code).
+ if ( !this._HasShift && !(/^H[1-6]$/).test( sPreviousBlockTag ) )
+ {
+ // Otherwise, duplicate the previous block.
+ eNewBlock = FCKDomTools.CloneElement( ePreviousBlock ) ;
+ }
+ }
+ else if ( eNextBlock )
+ eNewBlock = FCKDomTools.CloneElement( eNextBlock ) ;
+
+ if ( !eNewBlock )
+ eNewBlock = this.Window.document.createElement( blockTag ) ;
+
+ // Recreate the inline elements tree, which was available
+ // before the hitting enter, so the same styles will be
+ // available in the new block.
+ var elementPath = oSplitInfo.ElementPath ;
+ if ( elementPath )
+ {
+ for ( var i = 0, len = elementPath.Elements.length ; i < len ; i++ )
+ {
+ var element = elementPath.Elements[i] ;
+
+ if ( element == elementPath.Block || element == elementPath.BlockLimit )
+ break ;
+
+ if ( FCKListsLib.InlineChildReqElements[ element.nodeName.toLowerCase() ] )
+ {
+ element = FCKDomTools.CloneElement( element ) ;
+ FCKDomTools.MoveChildren( eNewBlock, element ) ;
+ eNewBlock.appendChild( element ) ;
+ }
+ }
+ }
+
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( eNewBlock ) ;
+
+ oRange.InsertNode( eNewBlock ) ;
+
+ // This is tricky, but to make the new block visible correctly
+ // we must select it.
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // Move the selection to the new block.
+ oRange.MoveToElementEditStart( eNewBlock ) ;
+ oRange.Select() ;
+ }
+
+ // Move the selection to the new block.
+ oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ;
+ }
+
+ if ( FCKBrowserInfo.IsGeckoLike )
+ {
+ if ( eNextBlock )
+ {
+ // If we have split the block, adds a temporary span at the
+ // range position and scroll relatively to it.
+ var tmpNode = this.Window.document.createElement( 'span' ) ;
+
+ // We need some content for Safari.
+ tmpNode.innerHTML = '&nbsp;';
+
+ oRange.InsertNode( tmpNode ) ;
+ FCKDomTools.ScrollIntoView( tmpNode, false ) ;
+ oRange.DeleteContents() ;
+ }
+ else
+ {
+ // We may use the above scroll logic for the new block case
+ // too, but it gives some weird result with Opera.
+ FCKDomTools.ScrollIntoView( eNextBlock || eNewBlock, false ) ;
+ }
+ }
+
+ oRange.Select() ;
+ }
+
+ // Release the resources used by the range.
+ oRange.Release() ;
+
+ return true ;
+}
+
+FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag )
+{
+ // Get the current selection.
+ var oRange = new FCKDomRange( this.Window ) ;
+ oRange.MoveToSelection() ;
+
+ // The selection boundaries must be in the same "block limit" element.
+ if ( oRange.StartBlockLimit == oRange.EndBlockLimit )
+ {
+ oRange.DeleteContents() ;
+
+ // Get the new selection (it is collapsed at this point).
+ oRange.MoveToSelection() ;
+
+ var bIsStartOfBlock = oRange.CheckStartOfBlock() ;
+ var bIsEndOfBlock = oRange.CheckEndOfBlock() ;
+
+ var sStartBlockTag = oRange.StartBlock ? oRange.StartBlock.tagName.toUpperCase() : '' ;
+
+ var bHasShift = this._HasShift ;
+ var bIsPre = false ;
+
+ if ( !bHasShift && sStartBlockTag == 'LI' )
+ return this._ExecuteEnterBlock( null, oRange ) ;
+
+ // If we are at the end of a header block.
+ if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) )
+ {
+ // Insert a BR after the current paragraph.
+ FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ;
+
+ // The space is required by Gecko only to make the cursor blink.
+ if ( FCKBrowserInfo.IsGecko )
+ FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createTextNode( '' ) ) ;
+
+ // IE and Gecko have different behaviors regarding the position.
+ oRange.SetStart( oRange.StartBlock.nextSibling, FCKBrowserInfo.IsIE ? 3 : 1 ) ;
+ }
+ else
+ {
+ var eLineBreak ;
+ bIsPre = sStartBlockTag.IEquals( 'pre' ) ;
+ if ( bIsPre )
+ eLineBreak = this.Window.document.createTextNode( FCKBrowserInfo.IsIE ? '\r' : '\n' ) ;
+ else
+ eLineBreak = this.Window.document.createElement( 'br' ) ;
+
+ oRange.InsertNode( eLineBreak ) ;
+
+ // The space is required by Gecko only to make the cursor blink.
+ if ( FCKBrowserInfo.IsGecko )
+ FCKDomTools.InsertAfterNode( eLineBreak, this.Window.document.createTextNode( '' ) ) ;
+
+ // If we are at the end of a block, we must be sure the bogus node is available in that block.
+ if ( bIsEndOfBlock && FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( eLineBreak.parentNode ) ;
+
+ if ( FCKBrowserInfo.IsIE )
+ oRange.SetStart( eLineBreak, 4 ) ;
+ else
+ oRange.SetStart( eLineBreak.nextSibling, 1 ) ;
+
+ if ( ! FCKBrowserInfo.IsIE )
+ {
+ var dummy = null ;
+ if ( FCKBrowserInfo.IsOpera )
+ dummy = this.Window.document.createElement( 'span' ) ;
+ else
+ dummy = this.Window.document.createElement( 'br' ) ;
+
+ eLineBreak.parentNode.insertBefore( dummy, eLineBreak.nextSibling ) ;
+
+ FCKDomTools.ScrollIntoView( dummy, false ) ;
+
+ dummy.parentNode.removeChild( dummy ) ;
+ }
+ }
+
+ // This collapse guarantees the cursor will be blinking.
+ oRange.Collapse( true ) ;
+
+ oRange.Select( bIsPre ) ;
+ }
+
+ // Release the resources used by the range.
+ oRange.Release() ;
+
+ return true ;
+}
+
+// Outdents a LI, maintaining the selection defined on a range.
+FCKEnterKey.prototype._OutdentWithSelection = function( li, range )
+{
+ var oBookmark = range.CreateBookmark() ;
+
+ FCKListHandler.OutdentListItem( li ) ;
+
+ range.MoveToBookmark( oBookmark ) ;
+ range.Select() ;
+}
+
+// Is all the contents under a node included by a range?
+FCKEnterKey.prototype._CheckIsAllContentsIncluded = function( range, node )
+{
+ var startOk = false ;
+ var endOk = false ;
+
+ /*
+ FCKDebug.Output( 'sc='+range.StartContainer.nodeName+
+ ',so='+range._Range.startOffset+
+ ',ec='+range.EndContainer.nodeName+
+ ',eo='+range._Range.endOffset ) ;
+ */
+ if ( range.StartContainer == node || range.StartContainer == node.firstChild )
+ startOk = ( range._Range.startOffset == 0 ) ;
+
+ if ( range.EndContainer == node || range.EndContainer == node.lastChild )
+ {
+ var nodeLength = range.EndContainer.nodeType == 3 ? range.EndContainer.length : range.EndContainer.childNodes.length ;
+ endOk = ( range._Range.endOffset == nodeLength ) ;
+ }
+
+ return startOk && endOk ;
+}
+
+// Kludge for #247
+FCKEnterKey.prototype._FixIESelectAllBug = function( range )
+{
+ var doc = this.Window.document ;
+ doc.body.innerHTML = '' ;
+ var editBlock ;
+ if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) )
+ {
+ editBlock = doc.createElement( FCKConfig.EnterMode ) ;
+ doc.body.appendChild( editBlock ) ;
+ }
+ else
+ editBlock = doc.body ;
+
+ range.MoveToNodeContents( editBlock ) ;
+ range.Collapse( true ) ;
+ range.Select() ;
+ range.Release() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckevents.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckevents.js
new file mode 100644
index 0000000..0bae94d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckevents.js
@@ -0,0 +1,71 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKEvents Class: used to handle events is a advanced way.
+ */
+
+var FCKEvents = function( eventsOwner )
+{
+ this.Owner = eventsOwner ;
+ this._RegisteredEvents = new Object() ;
+}
+
+FCKEvents.prototype.AttachEvent = function( eventName, functionPointer )
+{
+ var aTargets ;
+
+ if ( !( aTargets = this._RegisteredEvents[ eventName ] ) )
+ this._RegisteredEvents[ eventName ] = [ functionPointer ] ;
+ else
+ {
+ // Check that the event handler isn't already registered with the same listener
+ // It doesn't detect function pointers belonging to an object (at least in Gecko)
+ if ( aTargets.IndexOf( functionPointer ) == -1 )
+ aTargets.push( functionPointer ) ;
+ }
+}
+
+FCKEvents.prototype.FireEvent = function( eventName, params )
+{
+ var bReturnValue = true ;
+
+ var oCalls = this._RegisteredEvents[ eventName ] ;
+
+ if ( oCalls )
+ {
+ for ( var i = 0 ; i < oCalls.length ; i++ )
+ {
+ try
+ {
+ bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ;
+ }
+ catch(e)
+ {
+ // Ignore the following error. It may happen if pointing to a
+ // script not anymore available (#934):
+ // -2146823277 = Can't execute code from a freed script
+ if ( e.number != -2146823277 )
+ throw e ;
+ }
+ }
+ }
+
+ return bReturnValue ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckhtmliterator.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckhtmliterator.js
new file mode 100644
index 0000000..2fb3a90
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckhtmliterator.js
@@ -0,0 +1,142 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKHtmlIterator = function( source )
+{
+ this._sourceHtml = source ;
+}
+FCKHtmlIterator.prototype =
+{
+ Next : function()
+ {
+ var sourceHtml = this._sourceHtml ;
+ if ( sourceHtml == null )
+ return null ;
+
+ var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
+ var isTag = false ;
+ var value = "" ;
+ if ( match )
+ {
+ if ( match.index > 0 )
+ {
+ value = sourceHtml.substr( 0, match.index ) ;
+ this._sourceHtml = sourceHtml.substr( match.index ) ;
+ }
+ else
+ {
+ isTag = true ;
+ value = match[0] ;
+ this._sourceHtml = sourceHtml.substr( match[0].length ) ;
+ }
+ }
+ else
+ {
+ value = sourceHtml ;
+ this._sourceHtml = null ;
+ }
+ return { 'isTag' : isTag, 'value' : value } ;
+ },
+
+ Each : function( func )
+ {
+ var chunk ;
+ while ( ( chunk = this.Next() ) )
+ func( chunk.isTag, chunk.value ) ;
+ }
+} ;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKHtmlIterator = function( source )
+{
+ this._sourceHtml = source ;
+}
+FCKHtmlIterator.prototype =
+{
+ Next : function()
+ {
+ var sourceHtml = this._sourceHtml ;
+ if ( sourceHtml == null )
+ return null ;
+
+ var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
+ var isTag = false ;
+ var value = "" ;
+ if ( match )
+ {
+ if ( match.index > 0 )
+ {
+ value = sourceHtml.substr( 0, match.index ) ;
+ this._sourceHtml = sourceHtml.substr( match.index ) ;
+ }
+ else
+ {
+ isTag = true ;
+ value = match[0] ;
+ this._sourceHtml = sourceHtml.substr( match[0].length ) ;
+ }
+ }
+ else
+ {
+ value = sourceHtml ;
+ this._sourceHtml = null ;
+ }
+ return { 'isTag' : isTag, 'value' : value } ;
+ },
+
+ Each : function( func )
+ {
+ var chunk ;
+ while ( ( chunk = this.Next() ) )
+ func( chunk.isTag, chunk.value ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckicon.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckicon.js
new file mode 100644
index 0000000..be1bde0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckicon.js
@@ -0,0 +1,103 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIcon Class: renders an icon from a single image, a strip or even a
+ * spacer.
+ */
+
+var FCKIcon = function( iconPathOrStripInfoArray )
+{
+ var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ;
+ switch ( sTypeOf )
+ {
+ case 'number' :
+ this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ;
+ this.Size = 16 ;
+ this.Position = iconPathOrStripInfoArray ;
+ break ;
+
+ case 'undefined' :
+ this.Path = FCK_SPACER_PATH ;
+ break ;
+
+ case 'string' :
+ this.Path = iconPathOrStripInfoArray ;
+ break ;
+
+ default :
+ // It is an array in the format [ StripFilePath, IconSize, IconPosition ]
+ this.Path = iconPathOrStripInfoArray[0] ;
+ this.Size = iconPathOrStripInfoArray[1] ;
+ this.Position = iconPathOrStripInfoArray[2] ;
+ }
+}
+
+FCKIcon.prototype.CreateIconElement = function( document )
+{
+ var eIcon, eIconImage ;
+
+ if ( this.Position ) // It is using an icons strip image.
+ {
+ var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ;
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
+
+ eIcon = document.createElement( 'DIV' ) ;
+
+ eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
+ eIconImage.src = this.Path ;
+ eIconImage.style.top = sPos ;
+ }
+ else
+ {
+ // <img class="TB_Button_Image" src="spacer.gif" style="background-position: 0px -16px;background-image: url(strip.gif);">
+
+ eIcon = document.createElement( 'IMG' ) ;
+ eIcon.src = FCK_SPACER_PATH ;
+ eIcon.style.backgroundPosition = '0px ' + sPos ;
+ eIcon.style.backgroundImage = 'url("' + this.Path + '")' ;
+ }
+ }
+ else // It is using a single icon image.
+ {
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // IE makes the button 1px higher if using the <img> directly, so we
+ // are changing to the <div> system to clip the image correctly.
+ eIcon = document.createElement( 'DIV' ) ;
+
+ eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
+ eIconImage.src = this.Path ? this.Path : FCK_SPACER_PATH ;
+ }
+ else
+ {
+ // This is not working well with IE. See notes above.
+ // <img class="TB_Button_Image" src="smiley.gif">
+ eIcon = document.createElement( 'IMG' ) ;
+ eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ;
+ }
+ }
+
+ eIcon.className = 'TB_Button_Image' ;
+
+ return eIcon ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckiecleanup.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckiecleanup.js
new file mode 100644
index 0000000..e25d648
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckiecleanup.js
@@ -0,0 +1,68 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIECleanup Class: a generic class used as a tool to remove IE leaks.
+ */
+
+var FCKIECleanup = function( attachWindow )
+{
+ // If the attachWindow already have a cleanup object, just use that one.
+ if ( attachWindow._FCKCleanupObj )
+ this.Items = attachWindow._FCKCleanupObj.Items ;
+ else
+ {
+ this.Items = new Array() ;
+
+ attachWindow._FCKCleanupObj = this ;
+ FCKTools.AddEventListenerEx( attachWindow, 'unload', FCKIECleanup_Cleanup ) ;
+// attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ;
+ }
+}
+
+FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction )
+{
+ this.Items.push( [ dirtyItem, cleanupFunction ] ) ;
+}
+
+function FCKIECleanup_Cleanup()
+{
+ if ( !this._FCKCleanupObj || ( FCKConfig.MsWebBrowserControlCompat && !window.FCKUnloadFlag ) )
+ return ;
+
+ var aItems = this._FCKCleanupObj.Items ;
+
+ while ( aItems.length > 0 )
+ {
+
+ // It is important to remove from the end to the beginning (pop()),
+ // because of the order things get created in the editor. In the code,
+ // elements in deeper position in the DOM are placed at the end of the
+ // cleanup function, so we must cleanup then first, otherwise IE could
+ // throw some crazy memory errors (IE bug).
+ var oItem = aItems.pop() ;
+ if ( oItem )
+ oItem[1].call( oItem[0] ) ;
+ }
+
+ this._FCKCleanupObj = null ;
+
+ if ( CollectGarbage )
+ CollectGarbage() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckimagepreloader.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckimagepreloader.js
new file mode 100644
index 0000000..b5f0a47
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckimagepreloader.js
@@ -0,0 +1,64 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preload a list of images, firing an event when complete.
+ */
+
+var FCKImagePreloader = function()
+{
+ this._Images = new Array() ;
+}
+
+FCKImagePreloader.prototype =
+{
+ AddImages : function( images )
+ {
+ if ( typeof( images ) == 'string' )
+ images = images.split( ';' ) ;
+
+ this._Images = this._Images.concat( images ) ;
+ },
+
+ Start : function()
+ {
+ var aImages = this._Images ;
+ this._PreloadCount = aImages.length ;
+
+ for ( var i = 0 ; i < aImages.length ; i++ )
+ {
+ var eImg = document.createElement( 'img' ) ;
+ FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ;
+ FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ;
+ eImg.src = aImages[i] ;
+
+ _FCKImagePreloader_ImageCache.push( eImg ) ;
+ }
+ }
+};
+
+// All preloaded images must be placed in a global array, otherwise the preload
+// magic will not happen.
+var _FCKImagePreloader_ImageCache = new Array() ;
+
+function _FCKImagePreloader_OnImage( ev, imagePreloader )
+{
+ if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete )
+ imagePreloader.OnComplete() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckkeystrokehandler.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckkeystrokehandler.js
new file mode 100644
index 0000000..dadd05a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckkeystrokehandler.js
@@ -0,0 +1,141 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Control keyboard keystroke combinations.
+ */
+
+var FCKKeystrokeHandler = function( cancelCtrlDefaults )
+{
+ this.Keystrokes = new Object() ;
+ this.CancelCtrlDefaults = ( cancelCtrlDefaults !== false ) ;
+}
+
+/*
+ * Listen to keystroke events in an element or DOM document object.
+ * @target: The element or document to listen to keystroke events.
+ */
+FCKKeystrokeHandler.prototype.AttachToElement = function( target )
+{
+ // For newer browsers, it is enough to listen to the keydown event only.
+ // Some browsers instead, don't cancel key events in the keydown, but in the
+ // keypress. So we must do a longer trip in those cases.
+ FCKTools.AddEventListenerEx( target, 'keydown', _FCKKeystrokeHandler_OnKeyDown, this ) ;
+ if ( FCKBrowserInfo.IsGecko10 || FCKBrowserInfo.IsOpera || ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) )
+ FCKTools.AddEventListenerEx( target, 'keypress', _FCKKeystrokeHandler_OnKeyPress, this ) ;
+}
+
+/*
+ * Sets a list of keystrokes. It can receive either a single array or "n"
+ * arguments, each one being an array of 1 or 2 elemenst. The first element
+ * is the keystroke combination, and the second is the value to assign to it.
+ * If the second element is missing, the keystroke definition is removed.
+ */
+FCKKeystrokeHandler.prototype.SetKeystrokes = function()
+{
+ // Look through the arguments.
+ for ( var i = 0 ; i < arguments.length ; i++ )
+ {
+ var keyDef = arguments[i] ;
+
+ // If the configuration for the keystrokes is missing some element or has any extra comma
+ // this item won't be valid, so skip it and keep on processing.
+ if ( !keyDef )
+ continue ;
+
+ if ( typeof( keyDef[0] ) == 'object' ) // It is an array with arrays defining the keystrokes.
+ this.SetKeystrokes.apply( this, keyDef ) ;
+ else
+ {
+ if ( keyDef.length == 1 ) // If it has only one element, remove the keystroke.
+ delete this.Keystrokes[ keyDef[0] ] ;
+ else // Otherwise add it.
+ this.Keystrokes[ keyDef[0] ] = keyDef[1] === true ? true : keyDef ;
+ }
+ }
+}
+
+function _FCKKeystrokeHandler_OnKeyDown( ev, keystrokeHandler )
+{
+ // Get the key code.
+ var keystroke = ev.keyCode || ev.which ;
+
+ // Combine it with the CTRL, SHIFT and ALT states.
+ var keyModifiers = 0 ;
+
+ if ( ev.ctrlKey || ev.metaKey )
+ keyModifiers += CTRL ;
+
+ if ( ev.shiftKey )
+ keyModifiers += SHIFT ;
+
+ if ( ev.altKey )
+ keyModifiers += ALT ;
+
+ var keyCombination = keystroke + keyModifiers ;
+
+ var cancelIt = keystrokeHandler._CancelIt = false ;
+
+ // Look for its definition availability.
+ var keystrokeValue = keystrokeHandler.Keystrokes[ keyCombination ] ;
+
+// FCKDebug.Output( 'KeyDown: ' + keyCombination + ' - Value: ' + keystrokeValue ) ;
+
+ // If the keystroke is defined
+ if ( keystrokeValue )
+ {
+ // If the keystroke has been explicitly set to "true" OR calling the
+ // "OnKeystroke" event, it doesn't return "true", the default behavior
+ // must be preserved.
+ if ( keystrokeValue === true || !( keystrokeHandler.OnKeystroke && keystrokeHandler.OnKeystroke.apply( keystrokeHandler, keystrokeValue ) ) )
+ return true ;
+
+ cancelIt = true ;
+ }
+
+ // By default, it will cancel all combinations with the CTRL key only (except positioning keys).
+ if ( cancelIt || ( keystrokeHandler.CancelCtrlDefaults && keyModifiers == CTRL && ( keystroke < 33 || keystroke > 40 ) ) )
+ {
+ keystrokeHandler._CancelIt = true ;
+
+ if ( ev.preventDefault )
+ return ev.preventDefault() ;
+
+ ev.returnValue = false ;
+ ev.cancelBubble = true ;
+ return false ;
+ }
+
+ return true ;
+}
+
+function _FCKKeystrokeHandler_OnKeyPress( ev, keystrokeHandler )
+{
+ if ( keystrokeHandler._CancelIt )
+ {
+// FCKDebug.Output( 'KeyPress Cancel', 'Red') ;
+
+ if ( ev.preventDefault )
+ return ev.preventDefault() ;
+
+ return false ;
+ }
+
+ return true ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublock.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublock.js
new file mode 100644
index 0000000..e26858a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublock.js
@@ -0,0 +1,153 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Renders a list of menu items.
+ */
+
+var FCKMenuBlock = function()
+{
+ this._Items = new Array() ;
+}
+
+
+FCKMenuBlock.prototype.Count = function()
+{
+ return this._Items.length ;
+}
+
+FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
+{
+ var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
+
+ oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ;
+ oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ;
+
+ this._Items.push( oItem ) ;
+
+ return oItem ;
+}
+
+FCKMenuBlock.prototype.AddSeparator = function()
+{
+ this._Items.push( new FCKMenuSeparator() ) ;
+}
+
+FCKMenuBlock.prototype.RemoveAllItems = function()
+{
+ this._Items = new Array() ;
+
+ var eItemsTable = this._ItemsTable ;
+ if ( eItemsTable )
+ {
+ while ( eItemsTable.rows.length > 0 )
+ eItemsTable.deleteRow( 0 ) ;
+ }
+}
+
+FCKMenuBlock.prototype.Create = function( parentElement )
+{
+ if ( !this._ItemsTable )
+ {
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ;
+
+ this._Window = FCKTools.GetElementWindow( parentElement ) ;
+
+ var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+ var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ;
+ eTable.cellPadding = 0 ;
+ eTable.cellSpacing = 0 ;
+
+ FCKTools.DisableSelection( eTable ) ;
+
+ var oMainElement = eTable.insertRow(-1).insertCell(-1) ;
+ oMainElement.className = 'MN_Menu' ;
+
+ var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ;
+ eItemsTable.cellPadding = 0 ;
+ eItemsTable.cellSpacing = 0 ;
+ }
+
+ for ( var i = 0 ; i < this._Items.length ; i++ )
+ this._Items[i].Create( this._ItemsTable ) ;
+}
+
+/* Events */
+
+function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock )
+{
+ if ( menuBlock.Hide )
+ menuBlock.Hide() ;
+
+ FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ;
+}
+
+function FCKMenuBlock_Item_OnActivate( menuBlock )
+{
+ var oActiveItem = menuBlock._ActiveItem ;
+
+ if ( oActiveItem && oActiveItem != this )
+ {
+ // Set the focus to this menu block window (to fire OnBlur on opened panels).
+ if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu )
+ {
+ menuBlock._Window.focus() ;
+
+ // Due to the event model provided by Opera, we need to set
+ // HasFocus here as the above focus() call will not fire the focus
+ // event in the panel immediately (#1200).
+ menuBlock.Panel.HasFocus = true ;
+ }
+
+ oActiveItem.Deactivate() ;
+ }
+
+ menuBlock._ActiveItem = this ;
+}
+
+function FCKMenuBlock_Cleanup()
+{
+ this._Window = null ;
+ this._ItemsTable = null ;
+}
+
+// ################# //
+
+var FCKMenuSeparator = function()
+{}
+
+FCKMenuSeparator.prototype.Create = function( parentTable )
+{
+ var oDoc = FCKTools.GetElementDocument( parentTable ) ;
+
+ var r = parentTable.insertRow(-1) ;
+
+ var eCell = r.insertCell(-1) ;
+ eCell.className = 'MN_Separator MN_Icon' ;
+
+ eCell = r.insertCell(-1) ;
+ eCell.className = 'MN_Separator' ;
+ eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
+
+ eCell = r.insertCell(-1) ;
+ eCell.className = 'MN_Separator' ;
+ eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublockpanel.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublockpanel.js
new file mode 100644
index 0000000..86e4c58
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublockpanel.js
@@ -0,0 +1,54 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class is a menu block that behaves like a panel. It's a mix of the
+ * FCKMenuBlock and FCKPanel classes.
+ */
+
+var FCKMenuBlockPanel = function()
+{
+ // Call the "base" constructor.
+ FCKMenuBlock.call( this ) ;
+}
+
+FCKMenuBlockPanel.prototype = new FCKMenuBlock() ;
+
+
+// Override the create method.
+FCKMenuBlockPanel.prototype.Create = function()
+{
+ var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ;
+ oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+
+ // Call the "base" implementation.
+ FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ;
+}
+
+FCKMenuBlockPanel.prototype.Show = function( x, y, relElement )
+{
+ if ( !this.Panel.CheckIsOpened() )
+ this.Panel.Show( x, y, relElement ) ;
+}
+
+FCKMenuBlockPanel.prototype.Hide = function()
+{
+ if ( this.Panel.CheckIsOpened() )
+ this.Panel.Hide() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenuitem.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenuitem.js
new file mode 100644
index 0000000..3db1291
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenuitem.js
@@ -0,0 +1,161 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines and renders a menu items in a menu block.
+ */
+
+var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled, customData )
+{
+ this.Name = name ;
+ this.Label = label || name ;
+ this.IsDisabled = isDisabled ;
+
+ this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
+
+ this.SubMenu = new FCKMenuBlockPanel() ;
+ this.SubMenu.Parent = parentMenuBlock ;
+ this.SubMenu.OnClick = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ;
+ this.CustomData = customData ;
+
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ;
+}
+
+
+FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
+{
+ this.HasSubMenu = true ;
+ return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
+}
+
+FCKMenuItem.prototype.AddSeparator = function()
+{
+ this.SubMenu.AddSeparator() ;
+}
+
+FCKMenuItem.prototype.Create = function( parentTable )
+{
+ var bHasSubMenu = this.HasSubMenu ;
+
+ var oDoc = FCKTools.GetElementDocument( parentTable ) ;
+
+ // Add a row in the table to hold the menu item.
+ var r = this.MainElement = parentTable.insertRow(-1) ;
+ r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ;
+
+ // Set the row behavior.
+ if ( !this.IsDisabled )
+ {
+ FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ;
+ FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ;
+
+ if ( !bHasSubMenu )
+ FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ;
+ }
+
+ // Create the icon cell.
+ var eCell = r.insertCell(-1) ;
+ eCell.className = 'MN_Icon' ;
+ eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+
+ // Create the label cell.
+ eCell = r.insertCell(-1) ;
+ eCell.className = 'MN_Label' ;
+ eCell.noWrap = true ;
+ eCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
+
+ // Create the arrow cell and setup the sub menu panel (if needed).
+ eCell = r.insertCell(-1) ;
+ if ( bHasSubMenu )
+ {
+ eCell.className = 'MN_Arrow' ;
+
+ // The arrow is a fixed size image.
+ var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
+ eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ;
+ eArrowImg.width = 4 ;
+ eArrowImg.height = 7 ;
+
+ this.SubMenu.Create() ;
+ this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ;
+ }
+}
+
+FCKMenuItem.prototype.Activate = function()
+{
+ this.MainElement.className = 'MN_Item_Over' ;
+
+ if ( this.HasSubMenu )
+ {
+ // Show the child menu block. The ( +2, -2 ) correction is done because
+ // of the padding in the skin. It is not a good solution because one
+ // could change the skin and so the final result would not be accurate.
+ // For now it is ok because we are controlling the skin.
+ this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ;
+ }
+
+ FCKTools.RunFunction( this.OnActivate, this ) ;
+}
+
+FCKMenuItem.prototype.Deactivate = function()
+{
+ this.MainElement.className = 'MN_Item' ;
+
+ if ( this.HasSubMenu )
+ this.SubMenu.Hide() ;
+}
+
+/* Events */
+
+function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem )
+{
+ FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ;
+}
+
+function FCKMenuItem_SubMenu_OnHide( menuItem )
+{
+ menuItem.Deactivate() ;
+}
+
+function FCKMenuItem_OnClick( ev, menuItem )
+{
+ if ( menuItem.HasSubMenu )
+ menuItem.Activate() ;
+ else
+ {
+ menuItem.Deactivate() ;
+ FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ;
+ }
+}
+
+function FCKMenuItem_OnMouseOver( ev, menuItem )
+{
+ menuItem.Activate() ;
+}
+
+function FCKMenuItem_OnMouseOut( ev, menuItem )
+{
+ menuItem.Deactivate() ;
+}
+
+function FCKMenuItem_Cleanup()
+{
+ this.MainElement = null ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckpanel.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckpanel.js
new file mode 100644
index 0000000..650a264
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckpanel.js
@@ -0,0 +1,463 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Component that creates floating panels. It is used by many
+ * other components, like the toolbar items, context menu, etc...
+ */
+
+var FCKPanel = function( parentWindow )
+{
+ this.IsRTL = ( FCKLang.Dir == 'rtl' ) ;
+ this.IsContextMenu = false ;
+ this._LockCounter = 0 ;
+
+ this._Window = parentWindow || window ;
+
+ var oDocument ;
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // Create the Popup that will hold the panel.
+ // The popup has to be created before playing with domain hacks, see #1666.
+ this._Popup = this._Window.createPopup() ;
+
+ // this._Window cannot be accessed while playing with domain hacks, but local variable is ok.
+ // See #1666.
+ var pDoc = this._Window.document ;
+
+ // This is a trick to IE6 (not IE7). The original domain must be set
+ // before creating the popup, so we are able to take a refence to the
+ // document inside of it, and the set the proper domain for it. (#123)
+ if ( FCK_IS_CUSTOM_DOMAIN && !FCKBrowserInfo.IsIE7 )
+ {
+ pDoc.domain = FCK_ORIGINAL_DOMAIN ;
+ document.domain = FCK_ORIGINAL_DOMAIN ;
+ }
+
+ oDocument = this.Document = this._Popup.document ;
+
+ // Set the proper domain inside the popup.
+ if ( FCK_IS_CUSTOM_DOMAIN )
+ {
+ oDocument.domain = FCK_RUNTIME_DOMAIN ;
+ pDoc.domain = FCK_RUNTIME_DOMAIN ;
+ document.domain = FCK_RUNTIME_DOMAIN ;
+ }
+
+ FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ;
+ }
+ else
+ {
+ var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ;
+ FCKTools.ResetStyles( oIFrame );
+ oIFrame.src = 'javascript:void(0)' ;
+ oIFrame.allowTransparency = true ;
+ oIFrame.frameBorder = '0' ;
+ oIFrame.scrolling = 'no' ;
+ oIFrame.style.width = oIFrame.style.height = '0px' ;
+ FCKDomTools.SetElementStyles( oIFrame,
+ {
+ position : 'absolute',
+ zIndex : FCKConfig.FloatingPanelsZIndex
+ } ) ;
+
+ this._Window.document.body.appendChild( oIFrame ) ;
+
+ var oIFrameWindow = oIFrame.contentWindow ;
+
+ oDocument = this.Document = oIFrameWindow.document ;
+
+ // Workaround for Safari 12256. Ticket #63
+ var sBase = '' ;
+ if ( FCKBrowserInfo.IsSafari )
+ sBase = '<base href="' + window.document.location + '">' ;
+
+ // Initialize the IFRAME document body.
+ oDocument.open() ;
+ oDocument.write( '<html><head>' + sBase + '<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>' ) ;
+ oDocument.close() ;
+
+ if( FCKBrowserInfo.IsAIR )
+ FCKAdobeAIR.Panel_Contructor( oDocument, window.document.location ) ;
+
+ FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ;
+ FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ;
+ }
+
+ oDocument.dir = FCKLang.Dir ;
+
+ FCKTools.AddEventListener( oDocument, 'contextmenu', FCKTools.CancelEvent ) ;
+
+
+ // Create the main DIV that is used as the panel base.
+ this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ;
+
+ // The "float" property must be set so Firefox calculates the size correctly.
+ this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ;
+}
+
+
+FCKPanel.prototype.AppendStyleSheet = function( styleSheet )
+{
+ FCKTools.AppendStyleSheet( this.Document, styleSheet ) ;
+}
+
+FCKPanel.prototype.Preload = function( x, y, relElement )
+{
+ // The offsetWidth and offsetHeight properties are not available if the
+ // element is not visible. So we must "show" the popup with no size to
+ // be able to use that values in the second call (IE only).
+ if ( this._Popup )
+ this._Popup.show( x, y, 0, 0, relElement ) ;
+}
+
+// Workaround for IE7 problem. See #1982
+// Submenus are restricted to the size of its parent, so we increase it as needed.
+// Returns true if the panel has been repositioned
+FCKPanel.prototype.ResizeForSubpanel = function( panel, width, height )
+{
+ if ( !FCKBrowserInfo.IsIE7 )
+ return false ;
+
+ if ( !this._Popup.isOpen )
+ {
+ this.Subpanel = null ;
+ return false ;
+ }
+
+ // If we are resetting the extra space
+ if ( width == 0 && height == 0 )
+ {
+ // Another subpanel is being shown, so we must not shrink back
+ if (this.Subpanel !== panel)
+ return false ;
+
+ // Reset values.
+ // We leave the IncreasedY untouched to avoid vertical movement of the
+ // menu if the submenu is higher than the main menu.
+ this.Subpanel = null ;
+ this.IncreasedX = 0 ;
+ }
+ else
+ {
+ this.Subpanel = panel ;
+ // If the panel has already been increased enough, get out
+ if ( ( this.IncreasedX >= width ) && ( this.IncreasedY >= height ) )
+ return false ;
+
+ this.IncreasedX = Math.max( this.IncreasedX, width ) ;
+ this.IncreasedY = Math.max( this.IncreasedY, height ) ;
+ }
+
+ var x = this.ShowRect.x ;
+ var w = this.IncreasedX ;
+ if ( this.IsRTL )
+ x = x - w ;
+
+ // Horizontally increase as needed (sum of widths).
+ // Vertically, use only the maximum of this menu or the submenu
+ var finalWidth = this.ShowRect.w + w ;
+ var finalHeight = Math.max( this.ShowRect.h, this.IncreasedY ) ;
+ if ( this.ParentPanel )
+ this.ParentPanel.ResizeForSubpanel( this, finalWidth, finalHeight ) ;
+ this._Popup.show( x, this.ShowRect.y, finalWidth, finalHeight, this.RelativeElement ) ;
+
+ return this.IsRTL ;
+}
+
+FCKPanel.prototype.Show = function( x, y, relElement, width, height )
+{
+ var iMainWidth ;
+ var eMainNode = this.MainNode ;
+
+ if ( this._Popup )
+ {
+ // The offsetWidth and offsetHeight properties are not available if the
+ // element is not visible. So we must "show" the popup with no size to
+ // be able to use that values in the second call.
+ this._Popup.show( x, y, 0, 0, relElement ) ;
+
+ // The following lines must be place after the above "show", otherwise it
+ // doesn't has the desired effect.
+ FCKDomTools.SetElementStyles( eMainNode,
+ {
+ width : width ? width + 'px' : '',
+ height : height ? height + 'px' : ''
+ } ) ;
+
+ iMainWidth = eMainNode.offsetWidth ;
+
+ if ( FCKBrowserInfo.IsIE7 )
+ {
+ if (this.ParentPanel && this.ParentPanel.ResizeForSubpanel(this, iMainWidth, eMainNode.offsetHeight) )
+ {
+ // As the parent has moved, allow the browser to update its internal data, so the new position is correct.
+ FCKTools.RunFunction( this.Show, this, [x, y, relElement] ) ;
+ return ;
+ }
+ }
+
+ if ( this.IsRTL )
+ {
+ if ( this.IsContextMenu )
+ x = x - iMainWidth + 1 ;
+ else if ( relElement )
+ x = ( x * -1 ) + relElement.offsetWidth - iMainWidth ;
+ }
+
+ if ( FCKBrowserInfo.IsIE7 )
+ {
+ // Store the values that will be used by the ResizeForSubpanel function
+ this.ShowRect = {x:x, y:y, w:iMainWidth, h:eMainNode.offsetHeight} ;
+ this.IncreasedX = 0 ;
+ this.IncreasedY = 0 ;
+ this.RelativeElement = relElement ;
+ }
+
+ // Second call: Show the Popup at the specified location, with the correct size.
+ this._Popup.show( x, y, iMainWidth, eMainNode.offsetHeight, relElement ) ;
+
+ if ( this.OnHide )
+ {
+ if ( this._Timer )
+ CheckPopupOnHide.call( this, true ) ;
+
+ this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ;
+ }
+ }
+ else
+ {
+ // Do not fire OnBlur while the panel is opened.
+ if ( typeof( FCK.ToolbarSet.CurrentInstance.FocusManager ) != 'undefined' )
+ FCK.ToolbarSet.CurrentInstance.FocusManager.Lock() ;
+
+ if ( this.ParentPanel )
+ {
+ this.ParentPanel.Lock() ;
+
+ // Due to a bug on FF3, we must ensure that the parent panel will
+ // blur (#1584).
+ FCKPanel_Window_OnBlur( null, this.ParentPanel ) ;
+ }
+
+ // Toggle the iframe scrolling attribute to prevent the panel
+ // scrollbars from disappearing in FF Mac. (#191)
+ if ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac )
+ {
+ this._IFrame.scrolling = '' ;
+ FCKTools.RunFunction( function(){ this._IFrame.scrolling = 'no'; }, this ) ;
+ }
+
+ // Be sure we'll not have more than one Panel opened at the same time.
+ // Do not unlock focus manager here because we're displaying another floating panel
+ // instead of returning the editor to a "no panel" state (Bug #1514).
+ if ( FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel &&
+ FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel != this )
+ FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel.Hide( false, true ) ;
+
+ FCKDomTools.SetElementStyles( eMainNode,
+ {
+ width : width ? width + 'px' : '',
+ height : height ? height + 'px' : ''
+ } ) ;
+
+ iMainWidth = eMainNode.offsetWidth ;
+
+ if ( !width ) this._IFrame.width = 1 ;
+ if ( !height ) this._IFrame.height = 1 ;
+
+ // This is weird... but with Firefox, we must get the offsetWidth before
+ // setting the _IFrame size (which returns "0"), and then after that,
+ // to return the correct width. Remove the first step and it will not
+ // work when the editor is in RTL.
+ //
+ // The "|| eMainNode.firstChild.offsetWidth" part has been added
+ // for Opera compatibility (see #570).
+ iMainWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ;
+
+ // Base the popup coordinates upon the coordinates of relElement.
+ var oPos = FCKTools.GetDocumentPosition( this._Window,
+ relElement.nodeType == 9 ?
+ ( FCKTools.IsStrictMode( relElement ) ? relElement.documentElement : relElement.body ) :
+ relElement ) ;
+
+ // Minus the offsets provided by any positioned parent element of the panel iframe.
+ var positionedAncestor = FCKDomTools.GetPositionedAncestor( this._IFrame.parentNode ) ;
+ if ( positionedAncestor )
+ {
+ var nPos = FCKTools.GetDocumentPosition( FCKTools.GetElementWindow( positionedAncestor ), positionedAncestor ) ;
+ oPos.x -= nPos.x ;
+ oPos.y -= nPos.y ;
+ }
+
+ if ( this.IsRTL && !this.IsContextMenu )
+ x = ( x * -1 ) ;
+
+ x += oPos.x ;
+ y += oPos.y ;
+
+ if ( this.IsRTL )
+ {
+ if ( this.IsContextMenu )
+ x = x - iMainWidth + 1 ;
+ else if ( relElement )
+ x = x + relElement.offsetWidth - iMainWidth ;
+ }
+ else
+ {
+ var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ;
+ var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ;
+
+ var iViewPaneHeight = oViewPaneSize.Height + oScrollPosition.Y ;
+ var iViewPaneWidth = oViewPaneSize.Width + oScrollPosition.X ;
+
+ if ( ( x + iMainWidth ) > iViewPaneWidth )
+ x -= x + iMainWidth - iViewPaneWidth ;
+
+ if ( ( y + eMainNode.offsetHeight ) > iViewPaneHeight )
+ y -= y + eMainNode.offsetHeight - iViewPaneHeight ;
+ }
+
+ // Set the context menu DIV in the specified location.
+ FCKDomTools.SetElementStyles( this._IFrame,
+ {
+ left : x + 'px',
+ top : y + 'px'
+ } ) ;
+
+ // Move the focus to the IFRAME so we catch the "onblur".
+ this._IFrame.contentWindow.focus() ;
+ this._IsOpened = true ;
+
+ var me = this ;
+ this._resizeTimer = setTimeout( function()
+ {
+ var iWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ;
+ var iHeight = eMainNode.offsetHeight ;
+ me._IFrame.style.width = iWidth + 'px' ;
+ me._IFrame.style.height = iHeight + 'px' ;
+
+ }, 0 ) ;
+
+ FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel = this ;
+ }
+
+ FCKTools.RunFunction( this.OnShow, this ) ;
+}
+
+FCKPanel.prototype.Hide = function( ignoreOnHide, ignoreFocusManagerUnlock )
+{
+ if ( this._Popup )
+ this._Popup.hide() ;
+ else
+ {
+ if ( !this._IsOpened || this._LockCounter > 0 )
+ return ;
+
+ // Enable the editor to fire the "OnBlur".
+ if ( typeof( FCKFocusManager ) != 'undefined' && !ignoreFocusManagerUnlock )
+ FCKFocusManager.Unlock() ;
+
+ // It is better to set the sizes to 0, otherwise Firefox would have
+ // rendering problems.
+ this._IFrame.style.width = this._IFrame.style.height = '0px' ;
+
+ this._IsOpened = false ;
+
+ if ( this._resizeTimer )
+ {
+ clearTimeout( this._resizeTimer ) ;
+ this._resizeTimer = null ;
+ }
+
+ if ( this.ParentPanel )
+ this.ParentPanel.Unlock() ;
+
+ if ( !ignoreOnHide )
+ FCKTools.RunFunction( this.OnHide, this ) ;
+ }
+}
+
+FCKPanel.prototype.CheckIsOpened = function()
+{
+ if ( this._Popup )
+ return this._Popup.isOpen ;
+ else
+ return this._IsOpened ;
+}
+
+FCKPanel.prototype.CreateChildPanel = function()
+{
+ var oWindow = this._Popup ? FCKTools.GetDocumentWindow( this.Document ) : this._Window ;
+
+ var oChildPanel = new FCKPanel( oWindow ) ;
+ oChildPanel.ParentPanel = this ;
+
+ return oChildPanel ;
+}
+
+FCKPanel.prototype.Lock = function()
+{
+ this._LockCounter++ ;
+}
+
+FCKPanel.prototype.Unlock = function()
+{
+ if ( --this._LockCounter == 0 && !this.HasFocus )
+ this.Hide() ;
+}
+
+/* Events */
+
+function FCKPanel_Window_OnFocus( e, panel )
+{
+ panel.HasFocus = true ;
+}
+
+function FCKPanel_Window_OnBlur( e, panel )
+{
+ panel.HasFocus = false ;
+
+ if ( panel._LockCounter == 0 )
+ FCKTools.RunFunction( panel.Hide, panel ) ;
+}
+
+function CheckPopupOnHide( forceHide )
+{
+ if ( forceHide || !this._Popup.isOpen )
+ {
+ window.clearInterval( this._Timer ) ;
+ this._Timer = null ;
+
+ if (this._Popup && this.ParentPanel && !forceHide)
+ this.ParentPanel.ResizeForSubpanel(this, 0, 0) ;
+
+ FCKTools.RunFunction( this.OnHide, this ) ;
+ }
+}
+
+function FCKPanel_Cleanup()
+{
+ this._Popup = null ;
+ this._Window = null ;
+ this.Document = null ;
+ this.MainNode = null ;
+ this.RelativeElement = null ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckplugin.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckplugin.js
new file mode 100644
index 0000000..28e54b4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckplugin.js
@@ -0,0 +1,56 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPlugin Class: Represents a single plugin.
+ */
+
+var FCKPlugin = function( name, availableLangs, basePath )
+{
+ this.Name = name ;
+ this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ;
+ this.Path = this.BasePath + name + '/' ;
+
+ if ( !availableLangs || availableLangs.length == 0 )
+ this.AvailableLangs = new Array() ;
+ else
+ this.AvailableLangs = availableLangs.split(',') ;
+}
+
+FCKPlugin.prototype.Load = function()
+{
+ // Load the language file, if defined.
+ if ( this.AvailableLangs.length > 0 )
+ {
+ var sLang ;
+
+ // Check if the plugin has the language file for the active language.
+ if ( this.AvailableLangs.IndexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 )
+ sLang = FCKLanguageManager.ActiveLanguage.Code ;
+ else
+ // Load the default language file (first one) if the current one is not available.
+ sLang = this.AvailableLangs[0] ;
+
+ // Add the main plugin script.
+ LoadScript( this.Path + 'lang/' + sLang + '.js' ) ;
+ }
+
+ // Add the main plugin script.
+ LoadScript( this.Path + 'fckplugin.js' ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckspecialcombo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckspecialcombo.js
new file mode 100644
index 0000000..b31a8f6
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckspecialcombo.js
@@ -0,0 +1,376 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKSpecialCombo Class: represents a special combo.
+ */
+
+var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow )
+{
+ // Default properties values.
+ this.FieldWidth = fieldWidth || 100 ;
+ this.PanelWidth = panelWidth || 150 ;
+ this.PanelMaxHeight = panelMaxHeight || 150 ;
+ this.Label = '&nbsp;' ;
+ this.Caption = caption ;
+ this.Tooltip = caption ;
+ this.Style = FCK_TOOLBARITEM_ICONTEXT ;
+
+ this.Enabled = true ;
+
+ this.Items = new Object() ;
+
+ this._Panel = new FCKPanel( parentWindow || window ) ;
+ this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+ this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
+ this._PanelBox.className = 'SC_Panel' ;
+ this._PanelBox.style.width = this.PanelWidth + 'px' ;
+
+ this._PanelBox.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
+
+ this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ;
+
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ;
+
+// this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
+// this._Panel.Create() ;
+// this._Panel.PanelDiv.className += ' SC_Panel' ;
+// this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
+// this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOver()
+{
+ this.className += ' SC_ItemOver' ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOut()
+{
+ this.className = this.originalClass ;
+}
+
+function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId )
+{
+ this.className = this.originalClass ;
+
+ specialCombo._Panel.Hide() ;
+
+ specialCombo.SetLabel( this.FCKItemLabel ) ;
+
+ if ( typeof( specialCombo.OnSelect ) == 'function' )
+ specialCombo.OnSelect( itemId, this ) ;
+}
+
+FCKSpecialCombo.prototype.ClearItems = function ()
+{
+ if ( this.Items )
+ this.Items = {} ;
+
+ var itemsholder = this._ItemsHolderEl ;
+ while ( itemsholder.firstChild )
+ itemsholder.removeChild( itemsholder.firstChild ) ;
+}
+
+FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor )
+{
+ // <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div>
+ var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
+ oDiv.className = oDiv.originalClass = 'SC_Item' ;
+ oDiv.innerHTML = html ;
+ oDiv.FCKItemLabel = label || id ;
+ oDiv.Selected = false ;
+
+ // In IE, the width must be set so the borders are shown correctly when the content overflows.
+ if ( FCKBrowserInfo.IsIE )
+ oDiv.style.width = '100%' ;
+
+ if ( bgColor )
+ oDiv.style.backgroundColor = bgColor ;
+
+ FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKSpecialCombo_ItemOnMouseOver ) ;
+ FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKSpecialCombo_ItemOnMouseOut ) ;
+ FCKTools.AddEventListenerEx( oDiv, 'click', FCKSpecialCombo_ItemOnClick, [ this, id ] ) ;
+
+ this.Items[ id.toString().toLowerCase() ] = oDiv ;
+
+ return oDiv ;
+}
+
+FCKSpecialCombo.prototype.SelectItem = function( item )
+{
+ if ( typeof item == 'string' )
+ item = this.Items[ item.toString().toLowerCase() ] ;
+
+ if ( item )
+ {
+ item.className = item.originalClass = 'SC_ItemSelected' ;
+ item.Selected = true ;
+ }
+}
+
+FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel )
+{
+ for ( var id in this.Items )
+ {
+ var oDiv = this.Items[id] ;
+
+ if ( oDiv.FCKItemLabel == itemLabel )
+ {
+ oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ;
+ oDiv.Selected = true ;
+
+ if ( setLabel )
+ this.SetLabel( itemLabel ) ;
+ }
+ }
+}
+
+FCKSpecialCombo.prototype.DeselectAll = function( clearLabel )
+{
+ for ( var i in this.Items )
+ {
+ if ( !this.Items[i] ) continue;
+ this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ;
+ this.Items[i].Selected = false ;
+ }
+
+ if ( clearLabel )
+ this.SetLabel( '' ) ;
+}
+
+FCKSpecialCombo.prototype.SetLabelById = function( id )
+{
+ id = id ? id.toString().toLowerCase() : '' ;
+
+ var oDiv = this.Items[ id ] ;
+ this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ;
+}
+
+FCKSpecialCombo.prototype.SetLabel = function( text )
+{
+ text = ( !text || text.length == 0 ) ? '&nbsp;' : text ;
+
+ if ( text == this.Label )
+ return ;
+
+ this.Label = text ;
+
+ var labelEl = this._LabelEl ;
+ if ( labelEl )
+ {
+ labelEl.innerHTML = text ;
+
+ // It may happen that the label is some HTML, including tags. This
+ // would be a problem because when the user click on those tags, the
+ // combo will get the selection from the editing area. So we must
+ // disable any kind of selection here.
+ FCKTools.DisableSelection( labelEl ) ;
+ }
+}
+
+FCKSpecialCombo.prototype.SetEnabled = function( isEnabled )
+{
+ this.Enabled = isEnabled ;
+
+ // In IE it can happen when the page is reloaded that _OuterTable is null, so check its existence
+ if ( this._OuterTable )
+ this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ;
+}
+
+FCKSpecialCombo.prototype.Create = function( targetElement )
+{
+ var oDoc = FCKTools.GetElementDocument( targetElement ) ;
+ var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
+ eOuterTable.cellPadding = 0 ;
+ eOuterTable.cellSpacing = 0 ;
+
+ eOuterTable.insertRow(-1) ;
+
+ var sClass ;
+ var bShowLabel ;
+
+ switch ( this.Style )
+ {
+ case FCK_TOOLBARITEM_ONLYICON :
+ sClass = 'TB_ButtonType_Icon' ;
+ bShowLabel = false;
+ break ;
+ case FCK_TOOLBARITEM_ONLYTEXT :
+ sClass = 'TB_ButtonType_Text' ;
+ bShowLabel = false;
+ break ;
+ case FCK_TOOLBARITEM_ICONTEXT :
+ bShowLabel = true;
+ break ;
+ }
+
+ if ( this.Caption && this.Caption.length > 0 && bShowLabel )
+ {
+ var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ;
+ oCaptionCell.innerHTML = this.Caption ;
+ oCaptionCell.className = 'SC_FieldCaption' ;
+ }
+
+ // Create the main DIV element.
+ var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ;
+ if ( bShowLabel )
+ {
+ oField.className = 'SC_Field' ;
+ oField.style.width = this.FieldWidth + 'px' ;
+ oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>' ;
+
+ this._LabelEl = oField.getElementsByTagName('label')[0] ; // Memory Leak
+ this._LabelEl.innerHTML = this.Label ;
+ }
+ else
+ {
+ oField.className = 'TB_Button_Off' ;
+ //oField.innerHTML = '<span className="SC_FieldCaption">' + this.Caption + '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;">&nbsp;</td></tr></tbody></table>' ;
+ //oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;">&nbsp;</td></tr></tbody></table>' ;
+
+ // Gets the correct CSS class to use for the specified style (param).
+ oField.innerHTML = '<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0">' +
+ '<tr>' +
+ //'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' +
+ '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+ '<td class="TB_Text">' + this.Caption + '</td>' +
+ '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+ '<td class="TB_ButtonArrow"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +
+ '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+ '</tr>' +
+ '</table>' ;
+ }
+
+
+ // Events Handlers
+
+ FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ;
+ FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ;
+ FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ;
+
+ FCKTools.DisableSelection( this._Panel.Document.body ) ;
+}
+
+function FCKSpecialCombo_Cleanup()
+{
+ this._LabelEl = null ;
+ this._OuterTable = null ;
+ this._ItemsHolderEl = null ;
+ this._PanelBox = null ;
+
+ if ( this.Items )
+ {
+ for ( var key in this.Items )
+ this.Items[key] = null ;
+ }
+}
+
+function FCKSpecialCombo_OnMouseOver( ev, specialCombo )
+{
+ if ( specialCombo.Enabled )
+ {
+ switch ( specialCombo.Style )
+ {
+ case FCK_TOOLBARITEM_ONLYICON :
+ this.className = 'TB_Button_On_Over';
+ break ;
+ case FCK_TOOLBARITEM_ONLYTEXT :
+ this.className = 'TB_Button_On_Over';
+ break ;
+ case FCK_TOOLBARITEM_ICONTEXT :
+ this.className = 'SC_Field SC_FieldOver' ;
+ break ;
+ }
+ }
+}
+
+function FCKSpecialCombo_OnMouseOut( ev, specialCombo )
+{
+ switch ( specialCombo.Style )
+ {
+ case FCK_TOOLBARITEM_ONLYICON :
+ this.className = 'TB_Button_Off';
+ break ;
+ case FCK_TOOLBARITEM_ONLYTEXT :
+ this.className = 'TB_Button_Off';
+ break ;
+ case FCK_TOOLBARITEM_ICONTEXT :
+ this.className='SC_Field' ;
+ break ;
+ }
+}
+
+function FCKSpecialCombo_OnClick( e, specialCombo )
+{
+ // For Mozilla we must stop the event propagation to avoid it hiding
+ // the panel because of a click outside of it.
+// if ( e )
+// {
+// e.stopPropagation() ;
+// FCKPanelEventHandlers.OnDocumentClick( e ) ;
+// }
+
+ if ( specialCombo.Enabled )
+ {
+ var oPanel = specialCombo._Panel ;
+ var oPanelBox = specialCombo._PanelBox ;
+ var oItemsHolder = specialCombo._ItemsHolderEl ;
+ var iMaxHeight = specialCombo.PanelMaxHeight ;
+
+ if ( specialCombo.OnBeforeClick )
+ specialCombo.OnBeforeClick( specialCombo ) ;
+
+ // This is a tricky thing. We must call the "Load" function, otherwise
+ // it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only).
+ if ( FCKBrowserInfo.IsIE )
+ oPanel.Preload( 0, this.offsetHeight, this ) ;
+
+ if ( oItemsHolder.offsetHeight > iMaxHeight )
+// {
+ oPanelBox.style.height = iMaxHeight + 'px' ;
+
+// if ( FCKBrowserInfo.IsGecko )
+// oPanelBox.style.overflow = '-moz-scrollbars-vertical' ;
+// }
+ else
+ oPanelBox.style.height = '' ;
+
+// oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ;
+
+ oPanel.Show( 0, this.offsetHeight, this ) ;
+ }
+
+// return false ;
+}
+
+/*
+Sample Combo Field HTML output:
+
+<div class="SC_Field" style="width: 80px;">
+ <table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;">
+ <tbody>
+ <tr>
+ <td class="SC_FieldLabel"><label>&nbsp;</label></td>
+ <td class="SC_FieldButton">&nbsp;</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+*/
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckstyle.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckstyle.js
new file mode 100644
index 0000000..540f70e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckstyle.js
@@ -0,0 +1,1500 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyle Class: contains a style definition, and all methods to work with
+ * the style in a document.
+ */
+
+/**
+ * @param {Object} styleDesc A "style descriptor" object, containing the raw
+ * style definition in the following format:
+ * '<style name>' : {
+ * Element : '<element name>',
+ * Attributes : {
+ * '<att name>' : '<att value>',
+ * ...
+ * },
+ * Styles : {
+ * '<style name>' : '<style value>',
+ * ...
+ * },
+ * Overrides : '<element name>'|{
+ * Element : '<element name>',
+ * Attributes : {
+ * '<att name>' : '<att value>'|/<att regex>/
+ * },
+ * Styles : {
+ * '<style name>' : '<style value>'|/<style regex>/
+ * },
+ * }
+ * }
+ */
+var FCKStyle = function( styleDesc )
+{
+ this.Element = ( styleDesc.Element || 'span' ).toLowerCase() ;
+ this._StyleDesc = styleDesc ;
+}
+
+FCKStyle.prototype =
+{
+ /**
+ * Get the style type, based on its element name:
+ * - FCK_STYLE_BLOCK (0): Block Style
+ * - FCK_STYLE_INLINE (1): Inline Style
+ * - FCK_STYLE_OBJECT (2): Object Style
+ */
+ GetType : function()
+ {
+ var type = this.GetType_$ ;
+
+ if ( type != undefined )
+ return type ;
+
+ var elementName = this.Element ;
+
+ if ( elementName == '#' || FCKListsLib.StyleBlockElements[ elementName ] )
+ type = FCK_STYLE_BLOCK ;
+ else if ( FCKListsLib.StyleObjectElements[ elementName ] )
+ type = FCK_STYLE_OBJECT ;
+ else
+ type = FCK_STYLE_INLINE ;
+
+ return ( this.GetType_$ = type ) ;
+ },
+
+ /**
+ * Apply the style to the current selection.
+ */
+ ApplyToSelection : function( targetWindow )
+ {
+ // Create a range for the current selection.
+ var range = new FCKDomRange( targetWindow ) ;
+ range.MoveToSelection() ;
+
+ this.ApplyToRange( range, true ) ;
+ },
+
+ /**
+ * Apply the style to a FCKDomRange.
+ */
+ ApplyToRange : function( range, selectIt, updateRange )
+ {
+ // ApplyToRange is not valid for FCK_STYLE_OBJECT types.
+ // Use ApplyToObject instead.
+
+ switch ( this.GetType() )
+ {
+ case FCK_STYLE_BLOCK :
+ this.ApplyToRange = this._ApplyBlockStyle ;
+ break ;
+ case FCK_STYLE_INLINE :
+ this.ApplyToRange = this._ApplyInlineStyle ;
+ break ;
+ default :
+ return ;
+ }
+
+ this.ApplyToRange( range, selectIt, updateRange ) ;
+ },
+
+ /**
+ * Apply the style to an object. Valid for FCK_STYLE_BLOCK types only.
+ */
+ ApplyToObject : function( objectElement )
+ {
+ if ( !objectElement )
+ return ;
+
+ this.BuildElement( null, objectElement ) ;
+ },
+
+ /**
+ * Remove the style from the current selection.
+ */
+ RemoveFromSelection : function( targetWindow )
+ {
+ // Create a range for the current selection.
+ var range = new FCKDomRange( targetWindow ) ;
+ range.MoveToSelection() ;
+
+ this.RemoveFromRange( range, true ) ;
+ },
+
+ /**
+ * Remove the style from a FCKDomRange. Block type styles will have no
+ * effect.
+ */
+ RemoveFromRange : function( range, selectIt, updateRange )
+ {
+ var bookmark ;
+
+ // Create the attribute list to be used later for element comparisons.
+ var styleAttribs = this._GetAttribsForComparison() ;
+ var styleOverrides = this._GetOverridesForComparison() ;
+
+ // If collapsed, we are removing all conflicting styles from the range
+ // parent tree.
+ if ( range.CheckIsCollapsed() )
+ {
+ // Bookmark the range so we can re-select it after processing.
+ var bookmark = range.CreateBookmark( true ) ;
+
+ // Let's start from the bookmark <span> parent.
+ var bookmarkStart = range.GetBookmarkNode( bookmark, true ) ;
+
+ var path = new FCKElementPath( bookmarkStart.parentNode ) ;
+
+ // While looping through the path, we'll be saving references to
+ // parent elements if the range is in one of their boundaries. In
+ // this way, we are able to create a copy of those elements when
+ // removing a style if the range is in a boundary limit (see #1270).
+ var boundaryElements = [] ;
+
+ // Check if the range is in the boundary limits of an element
+ // (related to #1270).
+ var isBoundaryRight = !FCKDomTools.GetNextSibling( bookmarkStart ) ;
+ var isBoundary = isBoundaryRight || !FCKDomTools.GetPreviousSibling( bookmarkStart ) ;
+
+ // This is the last element to be removed in the boundary situation
+ // described at #1270.
+ var lastBoundaryElement ;
+ var boundaryLimitIndex = -1 ;
+
+ for ( var i = 0 ; i < path.Elements.length ; i++ )
+ {
+ var pathElement = path.Elements[i] ;
+ if ( this.CheckElementRemovable( pathElement ) )
+ {
+ if ( isBoundary
+ && !FCKDomTools.CheckIsEmptyElement( pathElement,
+ function( el )
+ {
+ return ( el != bookmarkStart ) ;
+ } )
+ )
+ {
+ lastBoundaryElement = pathElement ;
+
+ // We'll be continuously including elements in the
+ // boundaryElements array, but only those added before
+ // setting lastBoundaryElement must be used later, so
+ // let's mark the current index here.
+ boundaryLimitIndex = boundaryElements.length - 1 ;
+ }
+ else
+ {
+ var pathElementName = pathElement.nodeName.toLowerCase() ;
+
+ if ( pathElementName == this.Element )
+ {
+ // Remove any attribute that conflict with this style, no
+ // matter their values.
+ for ( var att in styleAttribs )
+ {
+ if ( FCKDomTools.HasAttribute( pathElement, att ) )
+ {
+ switch ( att )
+ {
+ case 'style' :
+ this._RemoveStylesFromElement( pathElement ) ;
+ break ;
+
+ case 'class' :
+ // The 'class' element value must match (#1318).
+ if ( FCKDomTools.GetAttributeValue( pathElement, att ) != this.GetFinalAttributeValue( att ) )
+ continue ;
+
+ /*jsl:fallthru*/
+
+ default :
+ FCKDomTools.RemoveAttribute( pathElement, att ) ;
+ }
+ }
+ }
+ }
+
+ // Remove overrides defined to the same element name.
+ this._RemoveOverrides( pathElement, styleOverrides[ pathElementName ] ) ;
+
+ // Remove the element if no more attributes are available and it's an inline style element
+ if ( this.GetType() == FCK_STYLE_INLINE)
+ this._RemoveNoAttribElement( pathElement ) ;
+ }
+ }
+ else if ( isBoundary )
+ boundaryElements.push( pathElement ) ;
+
+ // Check if we are still in a boundary (at the same side).
+ isBoundary = isBoundary && ( ( isBoundaryRight && !FCKDomTools.GetNextSibling( pathElement ) ) || ( !isBoundaryRight && !FCKDomTools.GetPreviousSibling( pathElement ) ) ) ;
+
+ // If we are in an element that is not anymore a boundary, or
+ // we are at the last element, let's move things outside the
+ // boundary (if available).
+ if ( lastBoundaryElement && ( !isBoundary || ( i == path.Elements.length - 1 ) ) )
+ {
+ // Remove the bookmark node from the DOM.
+ var currentElement = FCKDomTools.RemoveNode( bookmarkStart ) ;
+
+ // Build the collapsed group of elements that are not
+ // removed by this style, but share the boundary.
+ // (see comment 1 and 2 at #1270)
+ for ( var j = 0 ; j <= boundaryLimitIndex ; j++ )
+ {
+ var newElement = FCKDomTools.CloneElement( boundaryElements[j] ) ;
+ newElement.appendChild( currentElement ) ;
+ currentElement = newElement ;
+ }
+
+ // Re-insert the bookmark node (and the collapsed elements)
+ // in the DOM, in the new position next to the styled element.
+ if ( isBoundaryRight )
+ FCKDomTools.InsertAfterNode( lastBoundaryElement, currentElement ) ;
+ else
+ lastBoundaryElement.parentNode.insertBefore( currentElement, lastBoundaryElement ) ;
+
+ isBoundary = false ;
+ lastBoundaryElement = null ;
+ }
+ }
+
+ // Re-select the original range.
+ if ( selectIt )
+ range.SelectBookmark( bookmark ) ;
+
+ if ( updateRange )
+ range.MoveToBookmark( bookmark ) ;
+
+ return ;
+ }
+
+ // Expand the range, if inside inline element boundaries.
+ range.Expand( 'inline_elements' ) ;
+
+ // Bookmark the range so we can re-select it after processing.
+ bookmark = range.CreateBookmark( true ) ;
+
+ // The style will be applied within the bookmark boundaries.
+ var startNode = range.GetBookmarkNode( bookmark, true ) ;
+ var endNode = range.GetBookmarkNode( bookmark, false ) ;
+
+ range.Release( true ) ;
+
+ // We need to check the selection boundaries (bookmark spans) to break
+ // the code in a way that we can properly remove partially selected nodes.
+ // For example, removing a <b> style from
+ // <b>This is [some text</b> to show <b>the] problem</b>
+ // ... where [ and ] represent the selection, must result:
+ // <b>This is </b>[some text to show the]<b> problem</b>
+ // The strategy is simple, we just break the partial nodes before the
+ // removal logic, having something that could be represented this way:
+ // <b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>
+
+ // Let's start checking the start boundary.
+ var path = new FCKElementPath( startNode ) ;
+ var pathElements = path.Elements ;
+ var pathElement ;
+
+ for ( var i = 1 ; i < pathElements.length ; i++ )
+ {
+ pathElement = pathElements[i] ;
+
+ if ( pathElement == path.Block || pathElement == path.BlockLimit )
+ break ;
+
+ // If this element can be removed (even partially).
+ if ( this.CheckElementRemovable( pathElement ) )
+ FCKDomTools.BreakParent( startNode, pathElement, range ) ;
+ }
+
+ // Now the end boundary.
+ path = new FCKElementPath( endNode ) ;
+ pathElements = path.Elements ;
+
+ for ( var i = 1 ; i < pathElements.length ; i++ )
+ {
+ pathElement = pathElements[i] ;
+
+ if ( pathElement == path.Block || pathElement == path.BlockLimit )
+ break ;
+
+ elementName = pathElement.nodeName.toLowerCase() ;
+
+ // If this element can be removed (even partially).
+ if ( this.CheckElementRemovable( pathElement ) )
+ FCKDomTools.BreakParent( endNode, pathElement, range ) ;
+ }
+
+ // Navigate through all nodes between the bookmarks.
+ var currentNode = FCKDomTools.GetNextSourceNode( startNode, true ) ;
+
+ while ( currentNode )
+ {
+ // Cache the next node to be processed. Do it now, because
+ // currentNode may be removed.
+ var nextNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+
+ // Remove elements nodes that match with this style rules.
+ if ( currentNode.nodeType == 1 )
+ {
+ var elementName = currentNode.nodeName.toLowerCase() ;
+
+ var mayRemove = ( elementName == this.Element ) ;
+ if ( mayRemove )
+ {
+ // Remove any attribute that conflict with this style, no matter
+ // their values.
+ for ( var att in styleAttribs )
+ {
+ if ( FCKDomTools.HasAttribute( currentNode, att ) )
+ {
+ switch ( att )
+ {
+ case 'style' :
+ this._RemoveStylesFromElement( currentNode ) ;
+ break ;
+
+ case 'class' :
+ // The 'class' element value must match (#1318).
+ if ( FCKDomTools.GetAttributeValue( currentNode, att ) != this.GetFinalAttributeValue( att ) )
+ continue ;
+
+ /*jsl:fallthru*/
+
+ default :
+ FCKDomTools.RemoveAttribute( currentNode, att ) ;
+ }
+ }
+ }
+ }
+ else
+ mayRemove = !!styleOverrides[ elementName ] ;
+
+ if ( mayRemove )
+ {
+ // Remove overrides defined to the same element name.
+ this._RemoveOverrides( currentNode, styleOverrides[ elementName ] ) ;
+
+ // Remove the element if no more attributes are available.
+ this._RemoveNoAttribElement( currentNode ) ;
+ }
+ }
+
+ // If we have reached the end of the selection, stop looping.
+ if ( nextNode == endNode )
+ break ;
+
+ currentNode = nextNode ;
+ }
+
+ this._FixBookmarkStart( startNode ) ;
+
+ // Re-select the original range.
+ if ( selectIt )
+ range.SelectBookmark( bookmark ) ;
+
+ if ( updateRange )
+ range.MoveToBookmark( bookmark ) ;
+ },
+
+ /**
+ * Checks if an element, or any of its attributes, is removable by the
+ * current style definition.
+ */
+ CheckElementRemovable : function( element, fullMatch )
+ {
+ if ( !element )
+ return false ;
+
+ var elementName = element.nodeName.toLowerCase() ;
+
+ // If the element name is the same as the style name.
+ if ( elementName == this.Element )
+ {
+ // If no attributes are defined in the element.
+ if ( !fullMatch && !FCKDomTools.HasAttributes( element ) )
+ return true ;
+
+ // If any attribute conflicts with the style attributes.
+ var attribs = this._GetAttribsForComparison() ;
+ var allMatched = ( attribs._length == 0 ) ;
+ for ( var att in attribs )
+ {
+ if ( att == '_length' )
+ continue ;
+
+ if ( this._CompareAttributeValues( att, FCKDomTools.GetAttributeValue( element, att ), ( this.GetFinalAttributeValue( att ) || '' ) ) )
+ {
+ allMatched = true ;
+ if ( !fullMatch )
+ break ;
+ }
+ else
+ {
+ allMatched = false ;
+ if ( fullMatch )
+ return false ;
+ }
+ }
+ if ( allMatched )
+ return true ;
+ }
+
+ // Check if the element can be somehow overriden.
+ var override = this._GetOverridesForComparison()[ elementName ] ;
+ if ( override )
+ {
+ // If no attributes have been defined, remove the element.
+ if ( !( attribs = override.Attributes ) ) // Only one "="
+ return true ;
+
+ for ( var i = 0 ; i < attribs.length ; i++ )
+ {
+ var attName = attribs[i][0] ;
+ if ( FCKDomTools.HasAttribute( element, attName ) )
+ {
+ var attValue = attribs[i][1] ;
+
+ // Remove the attribute if:
+ // - The override definition value is null ;
+ // - The override definition valie is a string that
+ // matches the attribute value exactly.
+ // - The override definition value is a regex that
+ // has matches in the attribute value.
+ if ( attValue == null ||
+ ( typeof attValue == 'string' && FCKDomTools.GetAttributeValue( element, attName ) == attValue ) ||
+ attValue.test( FCKDomTools.GetAttributeValue( element, attName ) ) )
+ return true ;
+ }
+ }
+ }
+
+ return false ;
+ },
+
+ /**
+ * Get the style state for an element path. Returns "true" if the element
+ * is active in the path.
+ */
+ CheckActive : function( elementPath )
+ {
+ switch ( this.GetType() )
+ {
+ case FCK_STYLE_BLOCK :
+ return this.CheckElementRemovable( elementPath.Block || elementPath.BlockLimit, true ) ;
+
+ case FCK_STYLE_INLINE :
+
+ var elements = elementPath.Elements ;
+
+ for ( var i = 0 ; i < elements.length ; i++ )
+ {
+ var element = elements[i] ;
+
+ if ( element == elementPath.Block || element == elementPath.BlockLimit )
+ continue ;
+
+ if ( this.CheckElementRemovable( element, true ) )
+ return true ;
+ }
+ }
+ return false ;
+ },
+
+ /**
+ * Removes an inline style from inside an element tree. The element node
+ * itself is not checked or removed, only the child tree inside of it.
+ */
+ RemoveFromElement : function( element )
+ {
+ var attribs = this._GetAttribsForComparison() ;
+ var overrides = this._GetOverridesForComparison() ;
+
+ // Get all elements with the same name.
+ var innerElements = element.getElementsByTagName( this.Element ) ;
+
+ for ( var i = innerElements.length - 1 ; i >= 0 ; i-- )
+ {
+ var innerElement = innerElements[i] ;
+
+ // Remove any attribute that conflict with this style, no matter
+ // their values.
+ for ( var att in attribs )
+ {
+ if ( FCKDomTools.HasAttribute( innerElement, att ) )
+ {
+ switch ( att )
+ {
+ case 'style' :
+ this._RemoveStylesFromElement( innerElement ) ;
+ break ;
+
+ case 'class' :
+ // The 'class' element value must match (#1318).
+ if ( FCKDomTools.GetAttributeValue( innerElement, att ) != this.GetFinalAttributeValue( att ) )
+ continue ;
+
+ /*jsl:fallthru*/
+
+ default :
+ FCKDomTools.RemoveAttribute( innerElement, att ) ;
+ }
+ }
+ }
+
+ // Remove overrides defined to the same element name.
+ this._RemoveOverrides( innerElement, overrides[ this.Element ] ) ;
+
+ // Remove the element if no more attributes are available.
+ this._RemoveNoAttribElement( innerElement ) ;
+ }
+
+ // Now remove any other element with different name that is
+ // defined to be overriden.
+ for ( var overrideElement in overrides )
+ {
+ if ( overrideElement != this.Element )
+ {
+ // Get all elements.
+ innerElements = element.getElementsByTagName( overrideElement ) ;
+
+ for ( var i = innerElements.length - 1 ; i >= 0 ; i-- )
+ {
+ var innerElement = innerElements[i] ;
+ this._RemoveOverrides( innerElement, overrides[ overrideElement ] ) ;
+ this._RemoveNoAttribElement( innerElement ) ;
+ }
+ }
+ }
+ },
+
+ _RemoveStylesFromElement : function( element )
+ {
+ var elementStyle = element.style.cssText ;
+ var pattern = this.GetFinalStyleValue() ;
+
+ if ( elementStyle.length > 0 && pattern.length == 0 )
+ return ;
+
+ pattern = '(^|;)\\s*(' +
+ pattern.replace( /\s*([^ ]+):.*?(;|$)/g, '$1|' ).replace( /\|$/, '' ) +
+ '):[^;]+' ;
+
+ var regex = new RegExp( pattern, 'gi' ) ;
+
+ elementStyle = elementStyle.replace( regex, '' ).Trim() ;
+
+ if ( elementStyle.length == 0 || elementStyle == ';' )
+ FCKDomTools.RemoveAttribute( element, 'style' ) ;
+ else
+ element.style.cssText = elementStyle.replace( regex, '' ) ;
+ },
+
+ /**
+ * Remove all attributes that are defined to be overriden,
+ */
+ _RemoveOverrides : function( element, override )
+ {
+ var attributes = override && override.Attributes ;
+
+ if ( attributes )
+ {
+ for ( var i = 0 ; i < attributes.length ; i++ )
+ {
+ var attName = attributes[i][0] ;
+
+ if ( FCKDomTools.HasAttribute( element, attName ) )
+ {
+ var attValue = attributes[i][1] ;
+
+ // Remove the attribute if:
+ // - The override definition value is null ;
+ // - The override definition valie is a string that
+ // matches the attribute value exactly.
+ // - The override definition value is a regex that
+ // has matches in the attribute value.
+ if ( attValue == null ||
+ ( attValue.test && attValue.test( FCKDomTools.GetAttributeValue( element, attName ) ) ) ||
+ ( typeof attValue == 'string' && FCKDomTools.GetAttributeValue( element, attName ) == attValue ) )
+ FCKDomTools.RemoveAttribute( element, attName ) ;
+ }
+ }
+ }
+ },
+
+ /**
+ * If the element has no more attributes, remove it.
+ */
+ _RemoveNoAttribElement : function( element )
+ {
+ // If no more attributes remained in the element, remove it,
+ // leaving its children.
+ if ( !FCKDomTools.HasAttributes( element ) )
+ {
+ // Removing elements may open points where merging is possible,
+ // so let's cache the first and last nodes for later checking.
+ var firstChild = element.firstChild ;
+ var lastChild = element.lastChild ;
+
+ FCKDomTools.RemoveNode( element, true ) ;
+
+ // Check the cached nodes for merging.
+ this._MergeSiblings( firstChild ) ;
+
+ if ( firstChild != lastChild )
+ this._MergeSiblings( lastChild ) ;
+ }
+ },
+
+ /**
+ * Creates a DOM element for this style object.
+ */
+ BuildElement : function( targetDoc, element )
+ {
+ // Create the element.
+ var el = element || targetDoc.createElement( this.Element ) ;
+
+ // Assign all defined attributes.
+ var attribs = this._StyleDesc.Attributes ;
+ var attValue ;
+ if ( attribs )
+ {
+ for ( var att in attribs )
+ {
+ attValue = this.GetFinalAttributeValue( att ) ;
+
+ if ( att.toLowerCase() == 'class' )
+ el.className = attValue ;
+ else
+ el.setAttribute( att, attValue ) ;
+ }
+ }
+
+ // Assign the style attribute.
+ if ( this._GetStyleText().length > 0 )
+ el.style.cssText = this.GetFinalStyleValue() ;
+
+ return el ;
+ },
+
+ _CompareAttributeValues : function( attName, valueA, valueB )
+ {
+ if ( attName == 'style' && valueA && valueB )
+ {
+ valueA = valueA.replace( /;$/, '' ).toLowerCase() ;
+ valueB = valueB.replace( /;$/, '' ).toLowerCase() ;
+ }
+
+ // Return true if they match or if valueA is null and valueB is an empty string
+ return ( valueA == valueB || ( ( valueA === null || valueA === '' ) && ( valueB === null || valueB === '' ) ) )
+ },
+
+ GetFinalAttributeValue : function( attName )
+ {
+ var attValue = this._StyleDesc.Attributes ;
+ var attValue = attValue ? attValue[ attName ] : null ;
+
+ if ( !attValue && attName == 'style' )
+ return this.GetFinalStyleValue() ;
+
+ if ( attValue && this._Variables )
+ // Using custom Replace() to guarantee the correct scope.
+ attValue = attValue.Replace( FCKRegexLib.StyleVariableAttName, this._GetVariableReplace, this ) ;
+
+ return attValue ;
+ },
+
+ GetFinalStyleValue : function()
+ {
+ var attValue = this._GetStyleText() ;
+
+ if ( attValue.length > 0 && this._Variables )
+ {
+ // Using custom Replace() to guarantee the correct scope.
+ attValue = attValue.Replace( FCKRegexLib.StyleVariableAttName, this._GetVariableReplace, this ) ;
+ attValue = FCKTools.NormalizeCssText( attValue ) ;
+ }
+
+ return attValue ;
+ },
+
+ _GetVariableReplace : function()
+ {
+ // The second group in the regex is the variable name.
+ return this._Variables[ arguments[2] ] || arguments[0] ;
+ },
+
+ /**
+ * Set the value of a variable attribute or style, to be used when
+ * appliying the style.
+ */
+ SetVariable : function( name, value )
+ {
+ var variables = this._Variables ;
+
+ if ( !variables )
+ variables = this._Variables = {} ;
+
+ this._Variables[ name ] = value ;
+ },
+
+ /**
+ * Converting from a PRE block to a non-PRE block in formatting operations.
+ */
+ _FromPre : function( doc, block, newBlock )
+ {
+ var innerHTML = block.innerHTML ;
+
+ // Trim the first and last linebreaks immediately after and before <pre>, </pre>,
+ // if they exist.
+ // This is done because the linebreaks are not rendered.
+ innerHTML = innerHTML.replace( /(\r\n|\r)/g, '\n' ) ;
+ innerHTML = innerHTML.replace( /^[ \t]*\n/, '' ) ;
+ innerHTML = innerHTML.replace( /\n$/, '' ) ;
+
+ // 1. Convert spaces or tabs at the beginning or at the end to &nbsp;
+ innerHTML = innerHTML.replace( /^[ \t]+|[ \t]+$/g, function( match, offset, s )
+ {
+ if ( match.length == 1 ) // one space, preserve it
+ return '&nbsp;' ;
+ else if ( offset == 0 ) // beginning of block
+ return new Array( match.length ).join( '&nbsp;' ) + ' ' ;
+ else // end of block
+ return ' ' + new Array( match.length ).join( '&nbsp;' ) ;
+ } ) ;
+
+ // 2. Convert \n to <BR>.
+ // 3. Convert contiguous (i.e. non-singular) spaces or tabs to &nbsp;
+ var htmlIterator = new FCKHtmlIterator( innerHTML ) ;
+ var results = [] ;
+ htmlIterator.Each( function( isTag, value )
+ {
+ if ( !isTag )
+ {
+ value = value.replace( /\n/g, '<br>' ) ;
+ value = value.replace( /[ \t]{2,}/g,
+ function ( match )
+ {
+ return new Array( match.length ).join( '&nbsp;' ) + ' ' ;
+ } ) ;
+ }
+ results.push( value ) ;
+ } ) ;
+ newBlock.innerHTML = results.join( '' ) ;
+ return newBlock ;
+ },
+
+ /**
+ * Converting from a non-PRE block to a PRE block in formatting operations.
+ */
+ _ToPre : function( doc, block, newBlock )
+ {
+ // Handle converting from a regular block to a <pre> block.
+ var innerHTML = block.innerHTML.Trim() ;
+
+ // 1. Delete ANSI whitespaces immediately before and after <BR> because
+ // they are not visible.
+ // 2. Mark down any <BR /> nodes here so they can be turned into \n in
+ // the next step and avoid being compressed.
+ innerHTML = innerHTML.replace( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, '<br />' ) ;
+
+ // 3. Compress other ANSI whitespaces since they're only visible as one
+ // single space previously.
+ // 4. Convert &nbsp; to spaces since &nbsp; is no longer needed in <PRE>.
+ // 5. Convert any <BR /> to \n. This must not be done earlier because
+ // the \n would then get compressed.
+ var htmlIterator = new FCKHtmlIterator( innerHTML ) ;
+ var results = [] ;
+ htmlIterator.Each( function( isTag, value )
+ {
+ if ( !isTag )
+ value = value.replace( /([ \t\n\r]+|&nbsp;)/g, ' ' ) ;
+ else if ( isTag && value == '<br />' )
+ value = '\n' ;
+ results.push( value ) ;
+ } ) ;
+
+ // Assigning innerHTML to <PRE> in IE causes all linebreaks to be
+ // reduced to spaces.
+ // Assigning outerHTML to <PRE> in IE doesn't work if the <PRE> isn't
+ // contained in another node since the node reference is changed after
+ // outerHTML assignment.
+ // So, we need some hacks to workaround IE bugs here.
+ if ( FCKBrowserInfo.IsIE )
+ {
+ var temp = doc.createElement( 'div' ) ;
+ temp.appendChild( newBlock ) ;
+ newBlock.outerHTML = '<pre>\n' + results.join( '' ) + '</pre>' ;
+ newBlock = temp.removeChild( temp.firstChild ) ;
+ }
+ else
+ newBlock.innerHTML = results.join( '' ) ;
+
+ return newBlock ;
+ },
+
+ /**
+ * Merge a <pre> block with a previous <pre> block, if available.
+ */
+ _CheckAndMergePre : function( previousBlock, preBlock )
+ {
+ // Check if the previous block and the current block are next
+ // to each other.
+ if ( previousBlock != FCKDomTools.GetPreviousSourceElement( preBlock, true ) )
+ return ;
+
+ // Merge the previous <pre> block contents into the current <pre>
+ // block.
+ //
+ // Another thing to be careful here is that currentBlock might contain
+ // a '\n' at the beginning, and previousBlock might contain a '\n'
+ // towards the end. These new lines are not normally displayed but they
+ // become visible after merging.
+ var innerHTML = previousBlock.innerHTML.replace( /\n$/, '' ) + '\n\n' +
+ preBlock.innerHTML.replace( /^\n/, '' ) ;
+
+ // Buggy IE normalizes innerHTML from <pre>, breaking whitespaces.
+ if ( FCKBrowserInfo.IsIE )
+ preBlock.outerHTML = '<pre>' + innerHTML + '</pre>' ;
+ else
+ preBlock.innerHTML = innerHTML ;
+
+ // Remove the previous <pre> block.
+ //
+ // The preBlock must not be moved or deleted from the DOM tree. This
+ // guarantees the FCKDomRangeIterator in _ApplyBlockStyle would not
+ // get lost at the next iteration.
+ FCKDomTools.RemoveNode( previousBlock ) ;
+ },
+
+ _CheckAndSplitPre : function( newBlock )
+ {
+ var lastNewBlock ;
+
+ var cursor = newBlock.firstChild ;
+
+ // We are not splitting <br><br> at the beginning of the block, so
+ // we'll start from the second child.
+ cursor = cursor && cursor.nextSibling ;
+
+ while ( cursor )
+ {
+ var next = cursor.nextSibling ;
+
+ // If we have two <BR>s, and they're not at the beginning or the end,
+ // then we'll split up the contents following them into another block.
+ // Stop processing if we are at the last child couple.
+ if ( next && next.nextSibling && cursor.nodeName.IEquals( 'br' ) && next.nodeName.IEquals( 'br' ) )
+ {
+ // Remove the first <br>.
+ FCKDomTools.RemoveNode( cursor ) ;
+
+ // Move to the node after the second <br>.
+ cursor = next.nextSibling ;
+
+ // Remove the second <br>.
+ FCKDomTools.RemoveNode( next ) ;
+
+ // Create the block that will hold the child nodes from now on.
+ lastNewBlock = FCKDomTools.InsertAfterNode( lastNewBlock || newBlock, FCKDomTools.CloneElement( newBlock ) ) ;
+
+ continue ;
+ }
+
+ // If we split it, then start moving the nodes to the new block.
+ if ( lastNewBlock )
+ {
+ cursor = cursor.previousSibling ;
+ FCKDomTools.MoveNode(cursor.nextSibling, lastNewBlock ) ;
+ }
+
+ cursor = cursor.nextSibling ;
+ }
+ },
+
+ /**
+ * Apply an inline style to a FCKDomRange.
+ *
+ * TODO
+ * - Implement the "#" style handling.
+ * - Properly handle block containers like <div> and <blockquote>.
+ */
+ _ApplyBlockStyle : function( range, selectIt, updateRange )
+ {
+ // Bookmark the range so we can re-select it after processing.
+ var bookmark ;
+
+ if ( selectIt )
+ bookmark = range.CreateBookmark() ;
+
+ var iterator = new FCKDomRangeIterator( range ) ;
+ iterator.EnforceRealBlocks = true ;
+
+ var block ;
+ var doc = range.Window.document ;
+ var previousPreBlock ;
+
+ while( ( block = iterator.GetNextParagraph() ) ) // Only one =
+ {
+ // Create the new node right before the current one.
+ var newBlock = this.BuildElement( doc ) ;
+
+ // Check if we are changing from/to <pre>.
+ var newBlockIsPre = newBlock.nodeName.IEquals( 'pre' ) ;
+ var blockIsPre = block.nodeName.IEquals( 'pre' ) ;
+
+ var toPre = newBlockIsPre && !blockIsPre ;
+ var fromPre = !newBlockIsPre && blockIsPre ;
+
+ // Move everything from the current node to the new one.
+ if ( toPre )
+ newBlock = this._ToPre( doc, block, newBlock ) ;
+ else if ( fromPre )
+ newBlock = this._FromPre( doc, block, newBlock ) ;
+ else // Convering from a regular block to another regular block.
+ FCKDomTools.MoveChildren( block, newBlock ) ;
+
+ // Replace the current block.
+ block.parentNode.insertBefore( newBlock, block ) ;
+ FCKDomTools.RemoveNode( block ) ;
+
+ // Complete other tasks after inserting the node in the DOM.
+ if ( newBlockIsPre )
+ {
+ if ( previousPreBlock )
+ this._CheckAndMergePre( previousPreBlock, newBlock ) ; // Merge successive <pre> blocks.
+ previousPreBlock = newBlock ;
+ }
+ else if ( fromPre )
+ this._CheckAndSplitPre( newBlock ) ; // Split <br><br> in successive <pre>s.
+ }
+
+ // Re-select the original range.
+ if ( selectIt )
+ range.SelectBookmark( bookmark ) ;
+
+ if ( updateRange )
+ range.MoveToBookmark( bookmark ) ;
+ },
+
+ /**
+ * Apply an inline style to a FCKDomRange.
+ *
+ * TODO
+ * - Merge elements, when applying styles to similar elements that enclose
+ * the entire selection, outputing:
+ * <span style="color: #ff0000; background-color: #ffffff">XYZ</span>
+ * instead of:
+ * <span style="color: #ff0000;"><span style="background-color: #ffffff">XYZ</span></span>
+ */
+ _ApplyInlineStyle : function( range, selectIt, updateRange )
+ {
+ var doc = range.Window.document ;
+
+ if ( range.CheckIsCollapsed() )
+ {
+ // Create the element to be inserted in the DOM.
+ var collapsedElement = this.BuildElement( doc ) ;
+ range.InsertNode( collapsedElement ) ;
+ range.MoveToPosition( collapsedElement, 2 ) ;
+ range.Select() ;
+
+ return ;
+ }
+
+ // The general idea here is navigating through all nodes inside the
+ // current selection, working on distinct range blocks, defined by the
+ // DTD compatibility between the style element and the nodes inside the
+ // ranges.
+ //
+ // For example, suppose we have the following selection (where [ and ]
+ // are the boundaries), and we apply a <b> style there:
+ //
+ // <p>Here we [have <b>some</b> text.<p>
+ // <p>And some here] here.</p>
+ //
+ // Two different ranges will be detected:
+ //
+ // "have <b>some</b> text."
+ // "And some here"
+ //
+ // Both ranges will be extracted, moved to a <b> element, and
+ // re-inserted, resulting in the following output:
+ //
+ // <p>Here we [<b>have some text.</b><p>
+ // <p><b>And some here</b>] here.</p>
+ //
+ // Note that the <b> element at <b>some</b> is also removed because it
+ // is not needed anymore.
+
+ var elementName = this.Element ;
+
+ // Get the DTD definition for the element. Defaults to "span".
+ var elementDTD = FCK.DTD[ elementName ] || FCK.DTD.span ;
+
+ // Create the attribute list to be used later for element comparisons.
+ var styleAttribs = this._GetAttribsForComparison() ;
+ var styleNode ;
+
+ // Expand the range, if inside inline element boundaries.
+ range.Expand( 'inline_elements' ) ;
+
+ // Bookmark the range so we can re-select it after processing.
+ var bookmark = range.CreateBookmark( true ) ;
+
+ // The style will be applied within the bookmark boundaries.
+ var startNode = range.GetBookmarkNode( bookmark, true ) ;
+ var endNode = range.GetBookmarkNode( bookmark, false ) ;
+
+ // We'll be reusing the range to apply the styles. So, release it here
+ // to indicate that it has not been initialized.
+ range.Release( true ) ;
+
+ // Let's start the nodes lookup from the node right after the bookmark
+ // span.
+ var currentNode = FCKDomTools.GetNextSourceNode( startNode, true ) ;
+
+ while ( currentNode )
+ {
+ var applyStyle = false ;
+
+ var nodeType = currentNode.nodeType ;
+ var nodeName = nodeType == 1 ? currentNode.nodeName.toLowerCase() : null ;
+
+ // Check if the current node can be a child of the style element.
+ if ( !nodeName || elementDTD[ nodeName ] )
+ {
+ // Check if the style element can be a child of the current
+ // node parent or if the element is not defined in the DTD.
+ if ( ( FCK.DTD[ currentNode.parentNode.nodeName.toLowerCase() ] || FCK.DTD.span )[ elementName ] || !FCK.DTD[ elementName ] )
+ {
+ // This node will be part of our range, so if it has not
+ // been started, place its start right before the node.
+ if ( !range.CheckHasRange() )
+ range.SetStart( currentNode, 3 ) ;
+
+ // Non element nodes, or empty elements can be added
+ // completely to the range.
+ if ( nodeType != 1 || currentNode.childNodes.length == 0 )
+ {
+ var includedNode = currentNode ;
+ var parentNode = includedNode.parentNode ;
+
+ // This node is about to be included completelly, but,
+ // if this is the last node in its parent, we must also
+ // check if the parent itself can be added completelly
+ // to the range.
+ while ( includedNode == parentNode.lastChild
+ && elementDTD[ parentNode.nodeName.toLowerCase() ] )
+ {
+ includedNode = parentNode ;
+ }
+
+ range.SetEnd( includedNode, 4 ) ;
+
+ // If the included node is the last node in its parent
+ // and its parent can't be inside the style node, apply
+ // the style immediately.
+ if ( includedNode == includedNode.parentNode.lastChild && !elementDTD[ includedNode.parentNode.nodeName.toLowerCase() ] )
+ applyStyle = true ;
+ }
+ else
+ {
+ // Element nodes will not be added directly. We need to
+ // check their children because the selection could end
+ // inside the node, so let's place the range end right
+ // before the element.
+ range.SetEnd( currentNode, 3 ) ;
+ }
+ }
+ else
+ applyStyle = true ;
+ }
+ else
+ applyStyle = true ;
+
+ // Get the next node to be processed.
+ currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+
+ // If we have reached the end of the selection, just apply the
+ // style ot the range, and stop looping.
+ if ( currentNode == endNode )
+ {
+ currentNode = null ;
+ applyStyle = true ;
+ }
+
+ // Apply the style if we have something to which apply it.
+ if ( applyStyle && range.CheckHasRange() && !range.CheckIsCollapsed() )
+ {
+ // Build the style element, based on the style object definition.
+ styleNode = this.BuildElement( doc ) ;
+
+ // Move the contents of the range to the style element.
+ range.ExtractContents().AppendTo( styleNode ) ;
+
+ // If it is not empty.
+ if ( styleNode.innerHTML.RTrim().length > 0 )
+ {
+ // Insert it in the range position (it is collapsed after
+ // ExtractContents.
+ range.InsertNode( styleNode ) ;
+
+ // Here we do some cleanup, removing all duplicated
+ // elements from the style element.
+ this.RemoveFromElement( styleNode ) ;
+
+ // Let's merge our new style with its neighbors, if possible.
+ this._MergeSiblings( styleNode, this._GetAttribsForComparison() ) ;
+
+ // As the style system breaks text nodes constantly, let's normalize
+ // things for performance.
+ // With IE, some paragraphs get broken when calling normalize()
+ // repeatedly. Also, for IE, we must normalize body, not documentElement.
+ // IE is also known for having a "crash effect" with normalize().
+ // We should try to normalize with IE too in some way, somewhere.
+ if ( !FCKBrowserInfo.IsIE )
+ styleNode.normalize() ;
+ }
+
+ // Style applied, let's release the range, so it gets marked to
+ // re-initialization in the next loop.
+ range.Release( true ) ;
+ }
+ }
+
+ this._FixBookmarkStart( startNode ) ;
+
+ // Re-select the original range.
+ if ( selectIt )
+ range.SelectBookmark( bookmark ) ;
+
+ if ( updateRange )
+ range.MoveToBookmark( bookmark ) ;
+ },
+
+ _FixBookmarkStart : function( startNode )
+ {
+ // After appliying or removing an inline style, the start boundary of
+ // the selection must be placed inside all inline elements it is
+ // bordering.
+ var startSibling ;
+ while ( ( startSibling = startNode.nextSibling ) ) // Only one "=".
+ {
+ if ( startSibling.nodeType == 1
+ && FCKListsLib.InlineNonEmptyElements[ startSibling.nodeName.toLowerCase() ] )
+ {
+ // If it is an empty inline element, we can safely remove it.
+ if ( !startSibling.firstChild )
+ FCKDomTools.RemoveNode( startSibling ) ;
+ else
+ FCKDomTools.MoveNode( startNode, startSibling, true ) ;
+ continue ;
+ }
+
+ // Empty text nodes can be safely removed to not disturb.
+ if ( startSibling.nodeType == 3 && startSibling.length == 0 )
+ {
+ FCKDomTools.RemoveNode( startSibling ) ;
+ continue ;
+ }
+
+ break ;
+ }
+ },
+
+ /**
+ * Merge an element with its similar siblings.
+ * "attribs" is and object computed with _CreateAttribsForComparison.
+ */
+ _MergeSiblings : function( element, attribs )
+ {
+ if ( !element || element.nodeType != 1 || !FCKListsLib.InlineNonEmptyElements[ element.nodeName.toLowerCase() ] )
+ return ;
+
+ this._MergeNextSibling( element, attribs ) ;
+ this._MergePreviousSibling( element, attribs ) ;
+ },
+
+ /**
+ * Merge an element with its similar siblings after it.
+ * "attribs" is and object computed with _CreateAttribsForComparison.
+ */
+ _MergeNextSibling : function( element, attribs )
+ {
+ // Check the next sibling.
+ var sibling = element.nextSibling ;
+
+ // Check if the next sibling is a bookmark element. In this case, jump it.
+ var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
+ if ( hasBookmark )
+ sibling = sibling.nextSibling ;
+
+ if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
+ {
+ if ( !attribs )
+ attribs = this._CreateElementAttribsForComparison( element ) ;
+
+ if ( this._CheckAttributesMatch( sibling, attribs ) )
+ {
+ // Save the last child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
+ var innerSibling = element.lastChild ;
+
+ if ( hasBookmark )
+ FCKDomTools.MoveNode( element.nextSibling, element ) ;
+
+ // Move contents from the sibling.
+ FCKDomTools.MoveChildren( sibling, element ) ;
+ FCKDomTools.RemoveNode( sibling ) ;
+
+ // Now check the last inner child (see two comments above).
+ if ( innerSibling )
+ this._MergeNextSibling( innerSibling ) ;
+ }
+ }
+ },
+
+ /**
+ * Merge an element with its similar siblings before it.
+ * "attribs" is and object computed with _CreateAttribsForComparison.
+ */
+ _MergePreviousSibling : function( element, attribs )
+ {
+ // Check the previous sibling.
+ var sibling = element.previousSibling ;
+
+ // Check if the previous sibling is a bookmark element. In this case, jump it.
+ var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
+ if ( hasBookmark )
+ sibling = sibling.previousSibling ;
+
+ if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
+ {
+ if ( !attribs )
+ attribs = this._CreateElementAttribsForComparison( element ) ;
+
+ if ( this._CheckAttributesMatch( sibling, attribs ) )
+ {
+ // Save the first child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
+ var innerSibling = element.firstChild ;
+
+ if ( hasBookmark )
+ FCKDomTools.MoveNode( element.previousSibling, element, true ) ;
+
+ // Move contents to the sibling.
+ FCKDomTools.MoveChildren( sibling, element, true ) ;
+ FCKDomTools.RemoveNode( sibling ) ;
+
+ // Now check the first inner child (see two comments above).
+ if ( innerSibling )
+ this._MergePreviousSibling( innerSibling ) ;
+ }
+ }
+ },
+
+ /**
+ * Build the cssText based on the styles definition.
+ */
+ _GetStyleText : function()
+ {
+ var stylesDef = this._StyleDesc.Styles ;
+
+ // Builds the StyleText.
+ var stylesText = ( this._StyleDesc.Attributes ? this._StyleDesc.Attributes['style'] || '' : '' ) ;
+
+ if ( stylesText.length > 0 )
+ stylesText += ';' ;
+
+ for ( var style in stylesDef )
+ stylesText += style + ':' + stylesDef[style] + ';' ;
+
+ // Browsers make some changes to the style when applying them. So, here
+ // we normalize it to the browser format. We'll not do that if there
+ // are variables inside the style.
+ if ( stylesText.length > 0 && !( /#\(/.test( stylesText ) ) )
+ {
+ stylesText = FCKTools.NormalizeCssText( stylesText ) ;
+ }
+
+ return (this._GetStyleText = function() { return stylesText ; })() ;
+ },
+
+ /**
+ * Get the the collection used to compare the attributes defined in this
+ * style with attributes in an element. All information in it is lowercased.
+ */
+ _GetAttribsForComparison : function()
+ {
+ // If we have already computed it, just return it.
+ var attribs = this._GetAttribsForComparison_$ ;
+ if ( attribs )
+ return attribs ;
+
+ attribs = new Object() ;
+
+ // Loop through all defined attributes.
+ var styleAttribs = this._StyleDesc.Attributes ;
+ if ( styleAttribs )
+ {
+ for ( var styleAtt in styleAttribs )
+ {
+ attribs[ styleAtt.toLowerCase() ] = styleAttribs[ styleAtt ].toLowerCase() ;
+ }
+ }
+
+ // Includes the style definitions.
+ if ( this._GetStyleText().length > 0 )
+ {
+ attribs['style'] = this._GetStyleText().toLowerCase() ;
+ }
+
+ // Appends the "length" information to the object.
+ FCKTools.AppendLengthProperty( attribs, '_length' ) ;
+
+ // Return it, saving it to the next request.
+ return ( this._GetAttribsForComparison_$ = attribs ) ;
+ },
+
+ /**
+ * Get the the collection used to compare the elements and attributes,
+ * defined in this style overrides, with other element. All information in
+ * it is lowercased.
+ */
+ _GetOverridesForComparison : function()
+ {
+ // If we have already computed it, just return it.
+ var overrides = this._GetOverridesForComparison_$ ;
+ if ( overrides )
+ return overrides ;
+
+ overrides = new Object() ;
+
+ var overridesDesc = this._StyleDesc.Overrides ;
+
+ if ( overridesDesc )
+ {
+ // The override description can be a string, object or array.
+ // Internally, well handle arrays only, so transform it if needed.
+ if ( !FCKTools.IsArray( overridesDesc ) )
+ overridesDesc = [ overridesDesc ] ;
+
+ // Loop through all override definitions.
+ for ( var i = 0 ; i < overridesDesc.length ; i++ )
+ {
+ var override = overridesDesc[i] ;
+ var elementName ;
+ var overrideEl ;
+ var attrs ;
+
+ // If can be a string with the element name.
+ if ( typeof override == 'string' )
+ elementName = override.toLowerCase() ;
+ // Or an object.
+ else
+ {
+ elementName = override.Element ? override.Element.toLowerCase() : this.Element ;
+ attrs = override.Attributes ;
+ }
+
+ // We can have more than one override definition for the same
+ // element name, so we attempt to simply append information to
+ // it if it already exists.
+ overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} ) ;
+
+ if ( attrs )
+ {
+ // The returning attributes list is an array, because we
+ // could have different override definitions for the same
+ // attribute name.
+ var overrideAttrs = ( overrideEl.Attributes = overrideEl.Attributes || new Array() ) ;
+ for ( var attName in attrs )
+ {
+ // Each item in the attributes array is also an array,
+ // where [0] is the attribute name and [1] is the
+ // override value.
+ overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] ) ;
+ }
+ }
+ }
+ }
+
+ return ( this._GetOverridesForComparison_$ = overrides ) ;
+ },
+
+ /*
+ * Create and object containing all attributes specified in an element,
+ * added by a "_length" property. All values are lowercased.
+ */
+ _CreateElementAttribsForComparison : function( element )
+ {
+ var attribs = new Object() ;
+ var attribsCount = 0 ;
+
+ for ( var i = 0 ; i < element.attributes.length ; i++ )
+ {
+ var att = element.attributes[i] ;
+
+ if ( att.specified )
+ {
+ attribs[ att.nodeName.toLowerCase() ] = FCKDomTools.GetAttributeValue( element, att ).toLowerCase() ;
+ attribsCount++ ;
+ }
+ }
+
+ attribs._length = attribsCount ;
+
+ return attribs ;
+ },
+
+ /**
+ * Checks is the element attributes have a perfect match with the style
+ * attributes.
+ */
+ _CheckAttributesMatch : function( element, styleAttribs )
+ {
+ // Loop through all specified attributes. The same number of
+ // attributes must be found and their values must match to
+ // declare them as equal.
+
+ var elementAttrbs = element.attributes ;
+ var matchCount = 0 ;
+
+ for ( var i = 0 ; i < elementAttrbs.length ; i++ )
+ {
+ var att = elementAttrbs[i] ;
+ if ( att.specified )
+ {
+ var attName = att.nodeName.toLowerCase() ;
+ var styleAtt = styleAttribs[ attName ] ;
+
+ // The attribute is not defined in the style.
+ if ( !styleAtt )
+ break ;
+
+ // The values are different.
+ if ( styleAtt != FCKDomTools.GetAttributeValue( element, att ).toLowerCase() )
+ break ;
+
+ matchCount++ ;
+ }
+ }
+
+ return ( matchCount == styleAttribs._length ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbar.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbar.js
new file mode 100644
index 0000000..73114a1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbar.js
@@ -0,0 +1,103 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbar Class: represents a toolbar in the toolbarset. It is a group of
+ * toolbar items.
+ */
+
+var FCKToolbar = function()
+{
+ this.Items = new Array() ;
+}
+
+FCKToolbar.prototype.AddItem = function( item )
+{
+ return this.Items[ this.Items.length ] = item ;
+}
+
+FCKToolbar.prototype.AddButton = function( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state )
+{
+ if ( typeof( iconPathOrStripInfoArrayOrIndex ) == 'number' )
+ iconPathOrStripInfoArrayOrIndex = [ this.DefaultIconsStrip, this.DefaultIconSize, iconPathOrStripInfoArrayOrIndex ] ;
+
+ var oButton = new FCKToolbarButtonUI( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state ) ;
+ oButton._FCKToolbar = this ;
+ oButton.OnClick = FCKToolbar_OnItemClick ;
+
+ return this.AddItem( oButton ) ;
+}
+
+function FCKToolbar_OnItemClick( item )
+{
+ var oToolbar = item._FCKToolbar ;
+
+ if ( oToolbar.OnItemClick )
+ oToolbar.OnItemClick( oToolbar, item ) ;
+}
+
+FCKToolbar.prototype.AddSeparator = function()
+{
+ this.AddItem( new FCKToolbarSeparator() ) ;
+}
+
+FCKToolbar.prototype.Create = function( parentElement )
+{
+ var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+ var e = oDoc.createElement( 'table' ) ;
+ e.className = 'TB_Toolbar' ;
+ e.style.styleFloat = e.style.cssFloat = ( FCKLang.Dir == 'ltr' ? 'left' : 'right' ) ;
+ e.dir = FCKLang.Dir ;
+ e.cellPadding = 0 ;
+ e.cellSpacing = 0 ;
+
+ var targetRow = e.insertRow(-1) ;
+
+ // Insert the start cell.
+ var eCell ;
+
+ if ( !this.HideStart )
+ {
+ eCell = targetRow.insertCell(-1) ;
+ eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_Start' ;
+ }
+
+ for ( var i = 0 ; i < this.Items.length ; i++ )
+ {
+ this.Items[i].Create( targetRow.insertCell(-1) ) ;
+ }
+
+ // Insert the ending cell.
+ if ( !this.HideEnd )
+ {
+ eCell = targetRow.insertCell(-1) ;
+ eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_End' ;
+ }
+
+ parentElement.appendChild( e ) ;
+}
+
+var FCKToolbarSeparator = function()
+{}
+
+FCKToolbarSeparator.prototype.Create = function( parentElement )
+{
+ FCKTools.AppendElement( parentElement, 'div' ).className = 'TB_Separator' ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
new file mode 100644
index 0000000..f738455
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
@@ -0,0 +1,36 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarBreak Class: breaks the toolbars.
+ * It makes it possible to force the toolbar to break to a new line.
+ * This is the Gecko specific implementation.
+ */
+
+var FCKToolbarBreak = function()
+{}
+
+FCKToolbarBreak.prototype.Create = function( targetElement )
+{
+ var oBreakDiv = targetElement.ownerDocument.createElement( 'div' ) ;
+
+ oBreakDiv.style.clear = oBreakDiv.style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ;
+
+ targetElement.appendChild( oBreakDiv ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_ie.js
new file mode 100644
index 0000000..787bbbf
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_ie.js
@@ -0,0 +1,38 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarBreak Class: breaks the toolbars.
+ * It makes it possible to force the toolbar to break to a new line.
+ * This is the IE specific implementation.
+ */
+
+var FCKToolbarBreak = function()
+{}
+
+FCKToolbarBreak.prototype.Create = function( targetElement )
+{
+ var oBreakDiv = FCKTools.GetElementDocument( targetElement ).createElement( 'div' ) ;
+
+ oBreakDiv.className = 'TB_Break' ;
+
+ oBreakDiv.style.clear = FCKLang.Dir == 'rtl' ? 'left' : 'right' ;
+
+ targetElement.appendChild( oBreakDiv ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbutton.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbutton.js
new file mode 100644
index 0000000..6e7de60
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbutton.js
@@ -0,0 +1,81 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarButton Class: represents a button in the toolbar.
+ */
+
+var FCKToolbarButton = function( commandName, label, tooltip, style, sourceView, contextSensitive, icon )
+{
+ this.CommandName = commandName ;
+ this.Label = label ;
+ this.Tooltip = tooltip ;
+ this.Style = style ;
+ this.SourceView = sourceView ? true : false ;
+ this.ContextSensitive = contextSensitive ? true : false ;
+
+ if ( icon == null )
+ this.IconPath = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
+ else if ( typeof( icon ) == 'number' )
+ this.IconPath = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
+ else
+ this.IconPath = icon ;
+}
+
+FCKToolbarButton.prototype.Create = function( targetElement )
+{
+ this._UIButton = new FCKToolbarButtonUI( this.CommandName, this.Label, this.Tooltip, this.IconPath, this.Style ) ;
+ this._UIButton.OnClick = this.Click ;
+ this._UIButton._ToolbarButton = this ;
+ this._UIButton.Create( targetElement ) ;
+}
+
+FCKToolbarButton.prototype.RefreshState = function()
+{
+ var uiButton = this._UIButton ;
+
+ if ( !uiButton )
+ return ;
+
+ // Gets the actual state.
+ var eState = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
+
+ // If there are no state changes than do nothing and return.
+ if ( eState == uiButton.State ) return ;
+
+ // Sets the actual state.
+ uiButton.ChangeState( eState ) ;
+}
+
+FCKToolbarButton.prototype.Click = function()
+{
+ var oToolbarButton = this._ToolbarButton || this ;
+ FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oToolbarButton.CommandName ).Execute() ;
+}
+
+FCKToolbarButton.prototype.Enable = function()
+{
+ this.RefreshState() ;
+}
+
+FCKToolbarButton.prototype.Disable = function()
+{
+ // Sets the actual state.
+ this._UIButton.ChangeState( FCK_TRISTATE_DISABLED ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbuttonui.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbuttonui.js
new file mode 100644
index 0000000..08598a1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbuttonui.js
@@ -0,0 +1,198 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarButtonUI Class: interface representation of a toolbar button.
+ */
+
+var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state )
+{
+ this.Name = name ;
+ this.Label = label || name ;
+ this.Tooltip = tooltip || this.Label ;
+ this.Style = style || FCK_TOOLBARITEM_ONLYICON ;
+ this.State = state || FCK_TRISTATE_OFF ;
+
+ this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
+
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;
+}
+
+
+FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document )
+{
+ var oImg = document.createElement( 'IMG' ) ;
+ oImg.className = 'TB_Button_Padding' ;
+ oImg.src = FCK_SPACER_PATH ;
+ return oImg ;
+}
+
+FCKToolbarButtonUI.prototype.Create = function( parentElement )
+{
+ var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+ // Create the Main Element.
+ var oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
+ oMainElement.title = this.Tooltip ;
+
+ // The following will prevent the button from catching the focus.
+ if ( FCKBrowserInfo.IsGecko )
+ oMainElement.onmousedown = FCKTools.CancelEvent ;
+
+ FCKTools.AddEventListenerEx( oMainElement, 'mouseover', FCKToolbarButtonUI_OnMouseOver, this ) ;
+ FCKTools.AddEventListenerEx( oMainElement, 'mouseout', FCKToolbarButtonUI_OnMouseOut, this ) ;
+ FCKTools.AddEventListenerEx( oMainElement, 'click', FCKToolbarButtonUI_OnClick, this ) ;
+
+ this.ChangeState( this.State, true ) ;
+
+ if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow )
+ {
+ // <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
+
+ oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+ }
+ else
+ {
+ // <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+ // <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+
+ var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
+ oTable.cellPadding = 0 ;
+ oTable.cellSpacing = 0 ;
+
+ var oRow = oTable.insertRow(-1) ;
+
+ // The Image cell (icon or padding).
+ var oCell = oRow.insertCell(-1) ;
+
+ if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )
+ oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+ else
+ oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
+
+ if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT )
+ {
+ // The Text cell.
+ oCell = oRow.insertCell(-1) ;
+ oCell.className = 'TB_Button_Text' ;
+ oCell.noWrap = true ;
+ oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
+ }
+
+ if ( this.ShowArrow )
+ {
+ if ( this.Style != FCK_TOOLBARITEM_ONLYICON )
+ {
+ // A padding cell.
+ oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;
+ }
+
+ oCell = oRow.insertCell(-1) ;
+ var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
+ eImg.src = FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;
+ eImg.width = 5 ;
+ eImg.height = 3 ;
+ }
+
+ // The last padding cell.
+ oCell = oRow.insertCell(-1) ;
+ oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
+ }
+
+ parentElement.appendChild( oMainElement ) ;
+}
+
+FCKToolbarButtonUI.prototype.ChangeState = function( newState, force )
+{
+ if ( !force && this.State == newState )
+ return ;
+
+ var e = this.MainElement ;
+
+ // In IE it can happen when the page is reloaded that MainElement is null, so exit here
+ if ( !e )
+ return ;
+
+ switch ( parseInt( newState, 10 ) )
+ {
+ case FCK_TRISTATE_OFF :
+ e.className = 'TB_Button_Off' ;
+ break ;
+
+ case FCK_TRISTATE_ON :
+ e.className = 'TB_Button_On' ;
+ break ;
+
+ case FCK_TRISTATE_DISABLED :
+ e.className = 'TB_Button_Disabled' ;
+ break ;
+ }
+
+ this.State = newState ;
+}
+
+function FCKToolbarButtonUI_OnMouseOver( ev, button )
+{
+ if ( button.State == FCK_TRISTATE_OFF )
+ this.className = 'TB_Button_Off_Over' ;
+ else if ( button.State == FCK_TRISTATE_ON )
+ this.className = 'TB_Button_On_Over' ;
+}
+
+function FCKToolbarButtonUI_OnMouseOut( ev, button )
+{
+ if ( button.State == FCK_TRISTATE_OFF )
+ this.className = 'TB_Button_Off' ;
+ else if ( button.State == FCK_TRISTATE_ON )
+ this.className = 'TB_Button_On' ;
+}
+
+function FCKToolbarButtonUI_OnClick( ev, button )
+{
+ if ( button.OnClick && button.State != FCK_TRISTATE_DISABLED )
+ button.OnClick( button ) ;
+}
+
+function FCKToolbarButtonUI_Cleanup()
+{
+ // This one should not cause memory leak, but just for safety, let's clean
+ // it up.
+ this.MainElement = null ;
+}
+
+/*
+ Sample outputs:
+
+ This is the base structure. The variation is the image that is marked as {Image}:
+ <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
+ <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+ <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+
+ These are samples of possible {Image} values:
+
+ Strip - IE version:
+ <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
+
+ Strip : Firefox, Safari and Opera version
+ <img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">
+
+ No-Strip : Browser independent:
+ <img class="TB_Button_Image" src="smiley.gif">
+*/
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontformatcombo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
new file mode 100644
index 0000000..6c8b7de
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
@@ -0,0 +1,139 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontFormatCombo = function( tooltip, style )
+{
+ if ( tooltip === false )
+ return ;
+
+ this.CommandName = 'FontFormat' ;
+ this.Label = this.GetLabel() ;
+ this.Tooltip = tooltip ? tooltip : this.Label ;
+ this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+ this.NormalLabel = 'Normal' ;
+
+ this.PanelWidth = 190 ;
+
+ this.DefaultLabel = FCKConfig.DefaultFontFormatLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontFormatCombo.prototype = new FCKToolbarStyleCombo( false ) ;
+
+FCKToolbarFontFormatCombo.prototype.GetLabel = function()
+{
+ return FCKLang.FontFormat ;
+}
+
+FCKToolbarFontFormatCombo.prototype.GetStyles = function()
+{
+ var styles = {} ;
+
+ // Get the format names from the language file.
+ var aNames = FCKLang['FontFormats'].split(';') ;
+ var oNames = {
+ p : aNames[0],
+ pre : aNames[1],
+ address : aNames[2],
+ h1 : aNames[3],
+ h2 : aNames[4],
+ h3 : aNames[5],
+ h4 : aNames[6],
+ h5 : aNames[7],
+ h6 : aNames[8],
+ div : aNames[9] || ( aNames[0] + ' (DIV)')
+ } ;
+
+ // Get the available formats from the configuration file.
+ var elements = FCKConfig.FontFormats.split(';') ;
+
+ for ( var i = 0 ; i < elements.length ; i++ )
+ {
+ var elementName = elements[ i ] ;
+ var style = FCKStyles.GetStyle( '_FCK_' + elementName ) ;
+ if ( style )
+ {
+ style.Label = oNames[ elementName ] ;
+ styles[ '_FCK_' + elementName ] = style ;
+ }
+ else
+ alert( "The FCKConfig.CoreStyles['" + elementName + "'] setting was not found. Please check the fckconfig.js file" ) ;
+ }
+
+ return styles ;
+}
+
+FCKToolbarFontFormatCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
+{
+ var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+ if ( startElement )
+ {
+ var path = new FCKElementPath( startElement ) ;
+ var blockElement = path.Block ;
+
+ if ( blockElement )
+ {
+ for ( var i in targetSpecialCombo.Items )
+ {
+ var item = targetSpecialCombo.Items[i] ;
+ var style = item.Style ;
+
+ if ( style.CheckElementRemovable( blockElement ) )
+ {
+ targetSpecialCombo.SetLabel( style.Label ) ;
+ return ;
+ }
+ }
+ }
+ }
+
+ targetSpecialCombo.SetLabel( this.DefaultLabel ) ;
+}
+
+FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+ // Clear the current selection.
+ targetSpecialCombo.DeselectAll() ;
+
+ var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+ if ( startElement )
+ {
+ var path = new FCKElementPath( startElement ) ;
+ var blockElement = path.Block ;
+
+ for ( var i in targetSpecialCombo.Items )
+ {
+ var item = targetSpecialCombo.Items[i] ;
+ var style = item.Style ;
+
+ if ( style.CheckElementRemovable( blockElement ) )
+ {
+ targetSpecialCombo.SelectItem( item ) ;
+ return ;
+ }
+ }
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontscombo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontscombo.js
new file mode 100644
index 0000000..47322a9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontscombo.js
@@ -0,0 +1,98 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontsCombo = function( tooltip, style )
+{
+ this.CommandName = 'FontName' ;
+ this.Label = this.GetLabel() ;
+ this.Tooltip = tooltip ? tooltip : this.Label ;
+ this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+ this.DefaultLabel = FCKConfig.DefaultFontLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontsCombo.prototype = new FCKToolbarFontFormatCombo( false ) ;
+
+FCKToolbarFontsCombo.prototype.GetLabel = function()
+{
+ return FCKLang.Font ;
+}
+
+FCKToolbarFontsCombo.prototype.GetStyles = function()
+{
+ var baseStyle = FCKStyles.GetStyle( '_FCK_FontFace' ) ;
+
+ if ( !baseStyle )
+ {
+ alert( "The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file" ) ;
+ return {} ;
+ }
+
+ var styles = {} ;
+
+ var fonts = FCKConfig.FontNames.split(';') ;
+
+ for ( var i = 0 ; i < fonts.length ; i++ )
+ {
+ var fontParts = fonts[i].split('/') ;
+ var font = fontParts[0] ;
+ var caption = fontParts[1] || font ;
+
+ var style = FCKTools.CloneObject( baseStyle ) ;
+
+ style.SetVariable( 'Font', font ) ;
+ style.Label = caption ;
+
+ styles[ caption ] = style ;
+ }
+
+ return styles ;
+}
+
+FCKToolbarFontsCombo.prototype.RefreshActiveItems = FCKToolbarStyleCombo.prototype.RefreshActiveItems ;
+
+FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+ // Clear the current selection.
+ targetSpecialCombo.DeselectAll() ;
+
+ var startElement = FCKSelection.GetBoundaryParentElement( true ) ;
+
+ if ( startElement )
+ {
+ var path = new FCKElementPath( startElement ) ;
+
+ for ( var i in targetSpecialCombo.Items )
+ {
+ var item = targetSpecialCombo.Items[i] ;
+ var style = item.Style ;
+
+ if ( style.CheckActive( path ) )
+ {
+ targetSpecialCombo.SelectItem( item ) ;
+ return ;
+ }
+ }
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontsizecombo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
new file mode 100644
index 0000000..4a4386d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
@@ -0,0 +1,76 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontSizeCombo = function( tooltip, style )
+{
+ this.CommandName = 'FontSize' ;
+ this.Label = this.GetLabel() ;
+ this.Tooltip = tooltip ? tooltip : this.Label ;
+ this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+ this.DefaultLabel = FCKConfig.DefaultFontSizeLabel || '' ;
+
+ this.FieldWidth = 70 ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontSizeCombo.prototype = new FCKToolbarFontFormatCombo( false ) ;
+
+FCKToolbarFontSizeCombo.prototype.GetLabel = function()
+{
+ return FCKLang.FontSize ;
+}
+
+FCKToolbarFontSizeCombo.prototype.GetStyles = function()
+{
+ var baseStyle = FCKStyles.GetStyle( '_FCK_Size' ) ;
+
+ if ( !baseStyle )
+ {
+ alert( "The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file" ) ;
+ return {} ;
+ }
+
+ var styles = {} ;
+
+ var fonts = FCKConfig.FontSizes.split(';') ;
+
+ for ( var i = 0 ; i < fonts.length ; i++ )
+ {
+ var fontParts = fonts[i].split('/') ;
+ var font = fontParts[0] ;
+ var caption = fontParts[1] || font ;
+
+ var style = FCKTools.CloneObject( baseStyle ) ;
+ style.SetVariable( 'Size', font ) ;
+ style.Label = caption ;
+
+ styles[ caption ] = style ;
+ }
+
+ return styles ;
+}
+
+FCKToolbarFontSizeCombo.prototype.RefreshActiveItems = FCKToolbarStyleCombo.prototype.RefreshActiveItems ;
+
+FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick = FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarpanelbutton.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarpanelbutton.js
new file mode 100644
index 0000000..a507696
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarpanelbutton.js
@@ -0,0 +1,103 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: represents a special button in the toolbar
+ * that shows a panel when pressed.
+ */
+
+var FCKToolbarPanelButton = function( commandName, label, tooltip, style, icon )
+{
+ this.CommandName = commandName ;
+
+ var oIcon ;
+
+ if ( icon == null )
+ oIcon = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
+ else if ( typeof( icon ) == 'number' )
+ oIcon = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
+
+ var oUIButton = this._UIButton = new FCKToolbarButtonUI( commandName, label, tooltip, oIcon, style ) ;
+ oUIButton._FCKToolbarPanelButton = this ;
+ oUIButton.ShowArrow = true ;
+ oUIButton.OnClick = FCKToolbarPanelButton_OnButtonClick ;
+}
+
+FCKToolbarPanelButton.prototype.TypeName = 'FCKToolbarPanelButton' ;
+
+FCKToolbarPanelButton.prototype.Create = function( parentElement )
+{
+ parentElement.className += 'Menu' ;
+
+ this._UIButton.Create( parentElement ) ;
+
+ var oPanel = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName )._Panel ;
+ this.RegisterPanel( oPanel ) ;
+}
+
+FCKToolbarPanelButton.prototype.RegisterPanel = function( oPanel )
+{
+ if ( oPanel._FCKToolbarPanelButton )
+ return ;
+
+ oPanel._FCKToolbarPanelButton = this ;
+
+ var eLineDiv = oPanel.Document.body.appendChild( oPanel.Document.createElement( 'div' ) ) ;
+ eLineDiv.style.position = 'absolute' ;
+ eLineDiv.style.top = '0px' ;
+
+ var eLine = oPanel._FCKToolbarPanelButtonLineDiv = eLineDiv.appendChild( oPanel.Document.createElement( 'IMG' ) ) ;
+ eLine.className = 'TB_ConnectionLine' ;
+ eLine.style.position = 'absolute' ;
+// eLine.style.backgroundColor = 'Red' ;
+ eLine.src = FCK_SPACER_PATH ;
+
+ oPanel.OnHide = FCKToolbarPanelButton_OnPanelHide ;
+}
+
+/*
+ Events
+*/
+
+function FCKToolbarPanelButton_OnButtonClick( toolbarButton )
+{
+ var oButton = this._FCKToolbarPanelButton ;
+ var e = oButton._UIButton.MainElement ;
+
+ oButton._UIButton.ChangeState( FCK_TRISTATE_ON ) ;
+
+ // oButton.LineImg.style.width = ( e.offsetWidth - 2 ) + 'px' ;
+
+ var oCommand = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oButton.CommandName ) ;
+ var oPanel = oCommand._Panel ;
+ oPanel._FCKToolbarPanelButtonLineDiv.style.width = ( e.offsetWidth - 2 ) + 'px' ;
+ oCommand.Execute( 0, e.offsetHeight - 1, e ) ; // -1 to be over the border
+}
+
+function FCKToolbarPanelButton_OnPanelHide()
+{
+ var oMenuButton = this._FCKToolbarPanelButton ;
+ oMenuButton._UIButton.ChangeState( FCK_TRISTATE_OFF ) ;
+}
+
+// The Panel Button works like a normal button so the refresh state functions
+// defined for the normal button can be reused here.
+FCKToolbarPanelButton.prototype.RefreshState = FCKToolbarButton.prototype.RefreshState ;
+FCKToolbarPanelButton.prototype.Enable = FCKToolbarButton.prototype.Enable ;
+FCKToolbarPanelButton.prototype.Disable = FCKToolbarButton.prototype.Disable ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarspecialcombo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarspecialcombo.js
new file mode 100644
index 0000000..c5ea580
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarspecialcombo.js
@@ -0,0 +1,146 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarSpecialCombo Class: This is a "abstract" base class to be used
+ * by the special combo toolbar elements like font name, font size, paragraph format, etc...
+ *
+ * The following properties and methods must be implemented when inheriting from
+ * this class:
+ * - Property: CommandName [ The command name to be executed ]
+ * - Method: GetLabel() [ Returns the label ]
+ * - CreateItems( targetSpecialCombo ) [ Add all items in the special combo ]
+ */
+
+var FCKToolbarSpecialCombo = function()
+{
+ this.SourceView = false ;
+ this.ContextSensitive = true ;
+ this.FieldWidth = null ;
+ this.PanelWidth = null ;
+ this.PanelMaxHeight = null ;
+ //this._LastValue = null ;
+}
+
+
+FCKToolbarSpecialCombo.prototype.DefaultLabel = '' ;
+
+function FCKToolbarSpecialCombo_OnSelect( itemId, item )
+{
+ FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).Execute( itemId, item ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.Create = function( targetElement )
+{
+ this._Combo = new FCKSpecialCombo( this.GetLabel(), this.FieldWidth, this.PanelWidth, this.PanelMaxHeight, FCKBrowserInfo.IsIE ? window : FCKTools.GetElementWindow( targetElement ).parent ) ;
+
+ /*
+ this._Combo.FieldWidth = this.FieldWidth != null ? this.FieldWidth : 100 ;
+ this._Combo.PanelWidth = this.PanelWidth != null ? this.PanelWidth : 150 ;
+ this._Combo.PanelMaxHeight = this.PanelMaxHeight != null ? this.PanelMaxHeight : 150 ;
+ */
+
+ //this._Combo.Command.Name = this.Command.Name;
+// this._Combo.Label = this.Label ;
+ this._Combo.Tooltip = this.Tooltip ;
+ this._Combo.Style = this.Style ;
+
+ this.CreateItems( this._Combo ) ;
+
+ this._Combo.Create( targetElement ) ;
+
+ this._Combo.CommandName = this.CommandName ;
+
+ this._Combo.OnSelect = FCKToolbarSpecialCombo_OnSelect ;
+}
+
+function FCKToolbarSpecialCombo_RefreshActiveItems( combo, value )
+{
+ combo.DeselectAll() ;
+ combo.SelectItem( value ) ;
+ combo.SetLabelById( value ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.RefreshState = function()
+{
+ // Gets the actual state.
+ var eState ;
+
+// if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
+// eState = FCK_TRISTATE_DISABLED ;
+// else
+// {
+ var sValue = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
+
+// FCKDebug.Output( 'RefreshState of Special Combo "' + this.TypeOf + '" - State: ' + sValue ) ;
+
+ if ( sValue != FCK_TRISTATE_DISABLED )
+ {
+ eState = FCK_TRISTATE_ON ;
+
+ if ( this.RefreshActiveItems )
+ this.RefreshActiveItems( this._Combo, sValue ) ;
+ else
+ {
+ if ( this._LastValue !== sValue)
+ {
+ this._LastValue = sValue ;
+
+ if ( !sValue || sValue.length == 0 )
+ {
+ this._Combo.DeselectAll() ;
+ this._Combo.SetLabel( this.DefaultLabel ) ;
+ }
+ else
+ FCKToolbarSpecialCombo_RefreshActiveItems( this._Combo, sValue ) ;
+ }
+ }
+ }
+ else
+ eState = FCK_TRISTATE_DISABLED ;
+// }
+
+ // If there are no state changes then do nothing and return.
+ if ( eState == this.State ) return ;
+
+ if ( eState == FCK_TRISTATE_DISABLED )
+ {
+ this._Combo.DeselectAll() ;
+ this._Combo.SetLabel( '' ) ;
+ }
+
+ // Sets the actual state.
+ this.State = eState ;
+
+ // Updates the graphical state.
+ this._Combo.SetEnabled( eState != FCK_TRISTATE_DISABLED ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.Enable = function()
+{
+ this.RefreshState() ;
+}
+
+FCKToolbarSpecialCombo.prototype.Disable = function()
+{
+ this.State = FCK_TRISTATE_DISABLED ;
+ this._Combo.DeselectAll() ;
+ this._Combo.SetLabel( '' ) ;
+ this._Combo.SetEnabled( false ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarstylecombo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarstylecombo.js
new file mode 100644
index 0000000..341b2d9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarstylecombo.js
@@ -0,0 +1,200 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarStyleCombo = function( tooltip, style )
+{
+ if ( tooltip === false )
+ return ;
+
+ this.CommandName = 'Style' ;
+ this.Label = this.GetLabel() ;
+ this.Tooltip = tooltip ? tooltip : this.Label ;
+ this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+ this.DefaultLabel = FCKConfig.DefaultStyleLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarStyleCombo.prototype = new FCKToolbarSpecialCombo ;
+
+FCKToolbarStyleCombo.prototype.GetLabel = function()
+{
+ return FCKLang.Style ;
+}
+
+FCKToolbarStyleCombo.prototype.GetStyles = function()
+{
+ var styles = {} ;
+ var allStyles = FCK.ToolbarSet.CurrentInstance.Styles.GetStyles() ;
+
+ for ( var styleName in allStyles )
+ {
+ var style = allStyles[ styleName ] ;
+ if ( !style.IsCore )
+ styles[ styleName ] = style ;
+ }
+ return styles ;
+}
+
+FCKToolbarStyleCombo.prototype.CreateItems = function( targetSpecialCombo )
+{
+ var targetDoc = targetSpecialCombo._Panel.Document ;
+
+ // Add the Editor Area CSS to the panel so the style classes are previewed correctly.
+ FCKTools.AppendStyleSheet( targetDoc, FCKConfig.ToolbarComboPreviewCSS ) ;
+ FCKTools.AppendStyleString( targetDoc, FCKConfig.EditorAreaStyles ) ;
+ targetDoc.body.className += ' ForceBaseFont' ;
+
+ // Add ID and Class to the body.
+ FCKConfig.ApplyBodyAttributes( targetDoc.body ) ;
+
+ // Get the styles list.
+ var styles = this.GetStyles() ;
+
+ for ( var styleName in styles )
+ {
+ var style = styles[ styleName ] ;
+
+ // Object type styles have no preview.
+ var caption = style.GetType() == FCK_STYLE_OBJECT ?
+ styleName :
+ FCKToolbarStyleCombo_BuildPreview( style, style.Label || styleName ) ;
+
+ var item = targetSpecialCombo.AddItem( styleName, caption ) ;
+
+ item.Style = style ;
+ }
+
+ // We must prepare the list before showing it.
+ targetSpecialCombo.OnBeforeClick = this.StyleCombo_OnBeforeClick ;
+}
+
+FCKToolbarStyleCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
+{
+ var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+ if ( startElement )
+ {
+ var path = new FCKElementPath( startElement ) ;
+ var elements = path.Elements ;
+
+ for ( var e = 0 ; e < elements.length ; e++ )
+ {
+ for ( var i in targetSpecialCombo.Items )
+ {
+ var item = targetSpecialCombo.Items[i] ;
+ var style = item.Style ;
+
+ if ( style.CheckElementRemovable( elements[ e ], true ) )
+ {
+ targetSpecialCombo.SetLabel( style.Label || style.Name ) ;
+ return ;
+ }
+ }
+ }
+ }
+
+ targetSpecialCombo.SetLabel( this.DefaultLabel ) ;
+}
+
+FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+ // Two things are done here:
+ // - In a control selection, get the element name, so we'll display styles
+ // for that element only.
+ // - Select the styles that are active for the current selection.
+
+ // Clear the current selection.
+ targetSpecialCombo.DeselectAll() ;
+
+ var startElement ;
+ var path ;
+ var tagName ;
+
+ var selection = FCK.ToolbarSet.CurrentInstance.Selection ;
+
+ if ( selection.GetType() == 'Control' )
+ {
+ startElement = selection.GetSelectedElement() ;
+ tagName = startElement.nodeName.toLowerCase() ;
+ }
+ else
+ {
+ startElement = selection.GetBoundaryParentElement( true ) ;
+ path = new FCKElementPath( startElement ) ;
+ }
+
+ for ( var i in targetSpecialCombo.Items )
+ {
+ var item = targetSpecialCombo.Items[i] ;
+ var style = item.Style ;
+
+ if ( ( tagName && style.Element == tagName ) || ( !tagName && style.GetType() != FCK_STYLE_OBJECT ) )
+ {
+ item.style.display = '' ;
+
+ if ( ( path && style.CheckActive( path ) ) || ( !path && style.CheckElementRemovable( startElement, true ) ) )
+ targetSpecialCombo.SelectItem( style.Name ) ;
+ }
+ else
+ item.style.display = 'none' ;
+ }
+}
+
+function FCKToolbarStyleCombo_BuildPreview( style, caption )
+{
+ var styleType = style.GetType() ;
+ var html = [] ;
+
+ if ( styleType == FCK_STYLE_BLOCK )
+ html.push( '<div class="BaseFont">' ) ;
+
+ var elementName = style.Element ;
+
+ // Avoid <bdo> in the preview.
+ if ( elementName == 'bdo' )
+ elementName = 'span' ;
+
+ html = [ '<', elementName ] ;
+
+ // Assign all defined attributes.
+ var attribs = style._StyleDesc.Attributes ;
+ if ( attribs )
+ {
+ for ( var att in attribs )
+ {
+ html.push( ' ', att, '="', style.GetFinalAttributeValue( att ), '"' ) ;
+ }
+ }
+
+ // Assign the style attribute.
+ if ( style._GetStyleText().length > 0 )
+ html.push( ' style="', style.GetFinalStyleValue(), '"' ) ;
+
+ html.push( '>', caption, '</', elementName, '>' ) ;
+
+ if ( styleType == FCK_STYLE_BLOCK )
+ html.push( '</div>' ) ;
+
+ return html.join( '' ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckw3crange.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckw3crange.js
new file mode 100644
index 0000000..ae6ab8a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckw3crange.js
@@ -0,0 +1,451 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class partially implements the W3C DOM Range for browser that don't
+ * support the standards (like IE):
+ * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
+ */
+
+var FCKW3CRange = function( parentDocument )
+{
+ this._Document = parentDocument ;
+
+ this.startContainer = null ;
+ this.startOffset = null ;
+ this.endContainer = null ;
+ this.endOffset = null ;
+ this.collapsed = true ;
+}
+
+FCKW3CRange.CreateRange = function( parentDocument )
+{
+ // We could opt to use the Range implementation of the browsers. The problem
+ // is that every browser have different bugs on their implementations,
+ // mostly related to different interpretations of the W3C specifications.
+ // So, for now, let's use our implementation and pray for browsers fixings
+ // soon. Otherwise will go crazy on trying to find out workarounds.
+ /*
+ // Get the browser implementation of the range, if available.
+ if ( parentDocument.createRange )
+ {
+ var range = parentDocument.createRange() ;
+ if ( typeof( range.startContainer ) != 'undefined' )
+ return range ;
+ }
+ */
+ return new FCKW3CRange( parentDocument ) ;
+}
+
+FCKW3CRange.CreateFromRange = function( parentDocument, sourceRange )
+{
+ var range = FCKW3CRange.CreateRange( parentDocument ) ;
+ range.setStart( sourceRange.startContainer, sourceRange.startOffset ) ;
+ range.setEnd( sourceRange.endContainer, sourceRange.endOffset ) ;
+ return range ;
+}
+
+FCKW3CRange.prototype =
+{
+
+ _UpdateCollapsed : function()
+ {
+ this.collapsed = ( this.startContainer == this.endContainer && this.startOffset == this.endOffset ) ;
+ },
+
+ // W3C requires a check for the new position. If it is after the end
+ // boundary, the range should be collapsed to the new start. It seams we
+ // will not need this check for our use of this class so we can ignore it for now.
+ setStart : function( refNode, offset )
+ {
+ this.startContainer = refNode ;
+ this.startOffset = offset ;
+
+ if ( !this.endContainer )
+ {
+ this.endContainer = refNode ;
+ this.endOffset = offset ;
+ }
+
+ this._UpdateCollapsed() ;
+ },
+
+ // W3C requires a check for the new position. If it is before the start
+ // boundary, the range should be collapsed to the new end. It seams we
+ // will not need this check for our use of this class so we can ignore it for now.
+ setEnd : function( refNode, offset )
+ {
+ this.endContainer = refNode ;
+ this.endOffset = offset ;
+
+ if ( !this.startContainer )
+ {
+ this.startContainer = refNode ;
+ this.startOffset = offset ;
+ }
+
+ this._UpdateCollapsed() ;
+ },
+
+ setStartAfter : function( refNode )
+ {
+ this.setStart( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) + 1 ) ;
+ },
+
+ setStartBefore : function( refNode )
+ {
+ this.setStart( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) ) ;
+ },
+
+ setEndAfter : function( refNode )
+ {
+ this.setEnd( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) + 1 ) ;
+ },
+
+ setEndBefore : function( refNode )
+ {
+ this.setEnd( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) ) ;
+ },
+
+ collapse : function( toStart )
+ {
+ if ( toStart )
+ {
+ this.endContainer = this.startContainer ;
+ this.endOffset = this.startOffset ;
+ }
+ else
+ {
+ this.startContainer = this.endContainer ;
+ this.startOffset = this.endOffset ;
+ }
+
+ this.collapsed = true ;
+ },
+
+ selectNodeContents : function( refNode )
+ {
+ this.setStart( refNode, 0 ) ;
+ this.setEnd( refNode, refNode.nodeType == 3 ? refNode.data.length : refNode.childNodes.length ) ;
+ },
+
+ insertNode : function( newNode )
+ {
+ var startContainer = this.startContainer ;
+ var startOffset = this.startOffset ;
+
+ // If we are in a text node.
+ if ( startContainer.nodeType == 3 )
+ {
+ startContainer.splitText( startOffset ) ;
+
+ // Check if it is necessary to update the end boundary.
+ if ( startContainer == this.endContainer )
+ this.setEnd( startContainer.nextSibling, this.endOffset - this.startOffset ) ;
+
+ // Insert the new node it after the text node.
+ FCKDomTools.InsertAfterNode( startContainer, newNode ) ;
+
+ return ;
+ }
+ else
+ {
+ // Simply insert the new node before the current start node.
+ startContainer.insertBefore( newNode, startContainer.childNodes[ startOffset ] || null ) ;
+
+ // Check if it is necessary to update the end boundary.
+ if ( startContainer == this.endContainer )
+ {
+ this.endOffset++ ;
+ this.collapsed = false ;
+ }
+ }
+ },
+
+ deleteContents : function()
+ {
+ if ( this.collapsed )
+ return ;
+
+ this._ExecContentsAction( 0 ) ;
+ },
+
+ extractContents : function()
+ {
+ var docFrag = new FCKDocumentFragment( this._Document ) ;
+
+ if ( !this.collapsed )
+ this._ExecContentsAction( 1, docFrag ) ;
+
+ return docFrag ;
+ },
+
+ // The selection may be lost when cloning (due to the splitText() call).
+ cloneContents : function()
+ {
+ var docFrag = new FCKDocumentFragment( this._Document ) ;
+
+ if ( !this.collapsed )
+ this._ExecContentsAction( 2, docFrag ) ;
+
+ return docFrag ;
+ },
+
+ _ExecContentsAction : function( action, docFrag )
+ {
+ var startNode = this.startContainer ;
+ var endNode = this.endContainer ;
+
+ var startOffset = this.startOffset ;
+ var endOffset = this.endOffset ;
+
+ var removeStartNode = false ;
+ var removeEndNode = false ;
+
+ // Check the start and end nodes and make the necessary removals or changes.
+
+ // Start from the end, otherwise DOM mutations (splitText) made in the
+ // start boundary may interfere on the results here.
+
+ // For text containers, we must simply split the node and point to the
+ // second part. The removal will be handled by the rest of the code .
+ if ( endNode.nodeType == 3 )
+ endNode = endNode.splitText( endOffset ) ;
+ else
+ {
+ // If the end container has children and the offset is pointing
+ // to a child, then we should start from it.
+ if ( endNode.childNodes.length > 0 )
+ {
+ // If the offset points after the last node.
+ if ( endOffset > endNode.childNodes.length - 1 )
+ {
+ // Let's create a temporary node and mark it for removal.
+ endNode = FCKDomTools.InsertAfterNode( endNode.lastChild, this._Document.createTextNode('') ) ;
+ removeEndNode = true ;
+ }
+ else
+ endNode = endNode.childNodes[ endOffset ] ;
+ }
+ }
+
+ // For text containers, we must simply split the node. The removal will
+ // be handled by the rest of the code .
+ if ( startNode.nodeType == 3 )
+ {
+ startNode.splitText( startOffset ) ;
+
+ // In cases the end node is the same as the start node, the above
+ // splitting will also split the end, so me must move the end to
+ // the second part of the split.
+ if ( startNode == endNode )
+ endNode = startNode.nextSibling ;
+ }
+ else
+ {
+ // If the start container has children and the offset is pointing
+ // to a child, then we should start from its previous sibling.
+
+ // If the offset points to the first node, we don't have a
+ // sibling, so let's use the first one, but mark it for removal.
+ if ( startOffset == 0 )
+ {
+ // Let's create a temporary node and mark it for removal.
+ startNode = startNode.insertBefore( this._Document.createTextNode(''), startNode.firstChild ) ;
+ removeStartNode = true ;
+ }
+ else if ( startOffset > startNode.childNodes.length - 1 )
+ {
+ // Let's create a temporary node and mark it for removal.
+ startNode = startNode.appendChild( this._Document.createTextNode('') ) ;
+ removeStartNode = true ;
+ }
+ else
+ startNode = startNode.childNodes[ startOffset ].previousSibling ;
+ }
+
+ // Get the parent nodes tree for the start and end boundaries.
+ var startParents = FCKDomTools.GetParents( startNode ) ;
+ var endParents = FCKDomTools.GetParents( endNode ) ;
+
+ // Compare them, to find the top most siblings.
+ var i, topStart, topEnd ;
+
+ for ( i = 0 ; i < startParents.length ; i++ )
+ {
+ topStart = startParents[i] ;
+ topEnd = endParents[i] ;
+
+ // The compared nodes will match until we find the top most
+ // siblings (different nodes that have the same parent).
+ // "i" will hold the index in the parents array for the top
+ // most element.
+ if ( topStart != topEnd )
+ break ;
+ }
+
+ var clone, levelStartNode, levelClone, currentNode, currentSibling ;
+
+ if ( docFrag )
+ clone = docFrag.RootNode ;
+
+ // Remove all successive sibling nodes for every node in the
+ // startParents tree.
+ for ( var j = i ; j < startParents.length ; j++ )
+ {
+ levelStartNode = startParents[j] ;
+
+ // For Extract and Clone, we must clone this level.
+ if ( clone && levelStartNode != startNode ) // action = 0 = Delete
+ levelClone = clone.appendChild( levelStartNode.cloneNode( levelStartNode == startNode ) ) ;
+
+ currentNode = levelStartNode.nextSibling ;
+
+ while( currentNode )
+ {
+ // Stop processing when the current node matches a node in the
+ // endParents tree or if it is the endNode.
+ if ( currentNode == endParents[j] || currentNode == endNode )
+ break ;
+
+ // Cache the next sibling.
+ currentSibling = currentNode.nextSibling ;
+
+ // If cloning, just clone it.
+ if ( action == 2 ) // 2 = Clone
+ clone.appendChild( currentNode.cloneNode( true ) ) ;
+ else
+ {
+ // Both Delete and Extract will remove the node.
+ currentNode.parentNode.removeChild( currentNode ) ;
+
+ // When Extracting, move the removed node to the docFrag.
+ if ( action == 1 ) // 1 = Extract
+ clone.appendChild( currentNode ) ;
+ }
+
+ currentNode = currentSibling ;
+ }
+
+ if ( clone )
+ clone = levelClone ;
+ }
+
+ if ( docFrag )
+ clone = docFrag.RootNode ;
+
+ // Remove all previous sibling nodes for every node in the
+ // endParents tree.
+ for ( var k = i ; k < endParents.length ; k++ )
+ {
+ levelStartNode = endParents[k] ;
+
+ // For Extract and Clone, we must clone this level.
+ if ( action > 0 && levelStartNode != endNode ) // action = 0 = Delete
+ levelClone = clone.appendChild( levelStartNode.cloneNode( levelStartNode == endNode ) ) ;
+
+ // The processing of siblings may have already been done by the parent.
+ if ( !startParents[k] || levelStartNode.parentNode != startParents[k].parentNode )
+ {
+ currentNode = levelStartNode.previousSibling ;
+
+ while( currentNode )
+ {
+ // Stop processing when the current node matches a node in the
+ // startParents tree or if it is the startNode.
+ if ( currentNode == startParents[k] || currentNode == startNode )
+ break ;
+
+ // Cache the next sibling.
+ currentSibling = currentNode.previousSibling ;
+
+ // If cloning, just clone it.
+ if ( action == 2 ) // 2 = Clone
+ clone.insertBefore( currentNode.cloneNode( true ), clone.firstChild ) ;
+ else
+ {
+ // Both Delete and Extract will remove the node.
+ currentNode.parentNode.removeChild( currentNode ) ;
+
+ // When Extracting, mode the removed node to the docFrag.
+ if ( action == 1 ) // 1 = Extract
+ clone.insertBefore( currentNode, clone.firstChild ) ;
+ }
+
+ currentNode = currentSibling ;
+ }
+ }
+
+ if ( clone )
+ clone = levelClone ;
+ }
+
+ if ( action == 2 ) // 2 = Clone.
+ {
+ // No changes in the DOM should be done, so fix the split text (if any).
+
+ var startTextNode = this.startContainer ;
+ if ( startTextNode.nodeType == 3 )
+ {
+ startTextNode.data += startTextNode.nextSibling.data ;
+ startTextNode.parentNode.removeChild( startTextNode.nextSibling ) ;
+ }
+
+ var endTextNode = this.endContainer ;
+ if ( endTextNode.nodeType == 3 && endTextNode.nextSibling )
+ {
+ endTextNode.data += endTextNode.nextSibling.data ;
+ endTextNode.parentNode.removeChild( endTextNode.nextSibling ) ;
+ }
+ }
+ else
+ {
+ // Collapse the range.
+
+ // If a node has been partially selected, collapse the range between
+ // topStart and topEnd. Otherwise, simply collapse it to the start. (W3C specs).
+ if ( topStart && topEnd && ( startNode.parentNode != topStart.parentNode || endNode.parentNode != topEnd.parentNode ) )
+ {
+ var endIndex = FCKDomTools.GetIndexOf( topEnd ) ;
+
+ // If the start node is to be removed, we must correct the
+ // index to reflect the removal.
+ if ( removeStartNode && topEnd.parentNode == startNode.parentNode )
+ endIndex-- ;
+
+ this.setStart( topEnd.parentNode, endIndex ) ;
+ }
+
+ // Collapse it to the start.
+ this.collapse( true ) ;
+ }
+
+ // Cleanup any marked node.
+ if( removeStartNode )
+ startNode.parentNode.removeChild( startNode ) ;
+
+ if( removeEndNode && endNode.parentNode )
+ endNode.parentNode.removeChild( endNode ) ;
+ },
+
+ cloneRange : function()
+ {
+ return FCKW3CRange.CreateFromRange( this._Document, this ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml.js
new file mode 100644
index 0000000..930ab30
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml.js
@@ -0,0 +1,108 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ * (IE specific implementation)
+ */
+
+var FCKXml = function()
+{
+ this.Error = false ;
+}
+
+FCKXml.GetAttribute = function( node, attName, defaultValue )
+{
+ var attNode = node.attributes.getNamedItem( attName ) ;
+ return attNode ? attNode.value : defaultValue ;
+}
+
+/**
+ * Transforms a XML element node in a JavaScript object. Attributes defined for
+ * the element will be available as properties, as long as child element
+ * nodes, but the later will generate arrays with property names prefixed with "$".
+ *
+ * For example, the following XML element:
+ *
+ * <SomeNode name="Test" key="2">
+ * <MyChild id="10">
+ * <OtherLevel name="Level 3" />
+ * </MyChild>
+ * <MyChild id="25" />
+ * <AnotherChild price="499" />
+ * </SomeNode>
+ *
+ * ... results in the following object:
+ *
+ * {
+ * name : "Test",
+ * key : "2",
+ * $MyChild :
+ * [
+ * {
+ * id : "10",
+ * $OtherLevel :
+ * {
+ * name : "Level 3"
+ * }
+ * },
+ * {
+ * id : "25"
+ * }
+ * ],
+ * $AnotherChild :
+ * [
+ * {
+ * price : "499"
+ * }
+ * ]
+ * }
+ */
+FCKXml.TransformToObject = function( element )
+{
+ if ( !element )
+ return null ;
+
+ var obj = {} ;
+
+ var attributes = element.attributes ;
+ for ( var i = 0 ; i < attributes.length ; i++ )
+ {
+ var att = attributes[i] ;
+ obj[ att.name ] = att.value ;
+ }
+
+ var childNodes = element.childNodes ;
+ for ( i = 0 ; i < childNodes.length ; i++ )
+ {
+ var child = childNodes[i] ;
+
+ if ( child.nodeType == 1 )
+ {
+ var childName = '$' + child.nodeName ;
+ var childList = obj[ childName ] ;
+ if ( !childList )
+ childList = obj[ childName ] = [] ;
+
+ childList.push( this.TransformToObject( child ) ) ;
+ }
+ }
+
+ return obj ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_gecko.js
new file mode 100644
index 0000000..03f287f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_gecko.js
@@ -0,0 +1,106 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ */
+
+FCKXml.prototype =
+{
+ LoadUrl : function( urlToCall )
+ {
+ this.Error = false ;
+
+ var oXml ;
+ var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+ oXmlHttp.open( 'GET', urlToCall, false ) ;
+ oXmlHttp.send( null ) ;
+
+ if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 || ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 ) )
+ {
+ oXml = oXmlHttp.responseXML ;
+ // #1426: Fallback if responseXML isn't set for some
+ // reason (e.g. improperly configured web server)
+ if ( !oXml )
+ oXml = (new DOMParser()).parseFromString( oXmlHttp.responseText, 'text/xml' ) ;
+ }
+ else
+ oXml = null ;
+
+ if ( oXml )
+ {
+ // Try to access something on it.
+ try
+ {
+ var test = oXml.firstChild ;
+ }
+ catch (e)
+ {
+ // If document.domain has been changed (#123), we'll have a security
+ // error at this point. The workaround here is parsing the responseText:
+ // http://alexander.kirk.at/2006/07/27/firefox-15-xmlhttprequest-reqresponsexml-and-documentdomain/
+ oXml = (new DOMParser()).parseFromString( oXmlHttp.responseText, 'text/xml' ) ;
+ }
+ }
+
+ if ( !oXml || !oXml.firstChild )
+ {
+ this.Error = true ;
+ if ( window.confirm( 'Error loading "' + urlToCall + '" (HTTP Status: ' + oXmlHttp.status + ').\r\nDo you want to see the server response dump?' ) )
+ alert( oXmlHttp.responseText ) ;
+ }
+
+ this.DOMDocument = oXml ;
+ },
+
+ SelectNodes : function( xpath, contextNode )
+ {
+ if ( this.Error )
+ return new Array() ;
+
+ var aNodeArray = new Array();
+
+ var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
+ this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
+ if ( xPathResult )
+ {
+ var oNode = xPathResult.iterateNext() ;
+ while( oNode )
+ {
+ aNodeArray[aNodeArray.length] = oNode ;
+ oNode = xPathResult.iterateNext();
+ }
+ }
+ return aNodeArray ;
+ },
+
+ SelectSingleNode : function( xpath, contextNode )
+ {
+ if ( this.Error )
+ return null ;
+
+ var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
+ this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
+
+ if ( xPathResult && xPathResult.singleNodeValue )
+ return xPathResult.singleNodeValue ;
+ else
+ return null ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_ie.js
new file mode 100644
index 0000000..0a18f45
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_ie.js
@@ -0,0 +1,93 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ * (IE specific implementation)
+ */
+
+FCKXml.prototype =
+{
+ LoadUrl : function( urlToCall )
+ {
+ this.Error = false ;
+
+ var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+
+ if ( !oXmlHttp )
+ {
+ this.Error = true ;
+ return ;
+ }
+
+ oXmlHttp.open( "GET", urlToCall, false ) ;
+
+ oXmlHttp.send( null ) ;
+
+ if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 || ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 ) )
+ {
+ this.DOMDocument = oXmlHttp.responseXML ;
+
+ // #1426: Fallback if responseXML isn't set for some
+ // reason (e.g. improperly configured web server)
+ if ( !this.DOMDocument || this.DOMDocument.firstChild == null )
+ {
+ this.DOMDocument = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+ this.DOMDocument.async = false ;
+ this.DOMDocument.resolveExternals = false ;
+ this.DOMDocument.loadXML( oXmlHttp.responseText ) ;
+ }
+ }
+ else
+ {
+ this.DOMDocument = null ;
+ }
+
+ if ( this.DOMDocument == null || this.DOMDocument.firstChild == null )
+ {
+ this.Error = true ;
+ if (window.confirm( 'Error loading "' + urlToCall + '"\r\nDo you want to see more info?' ) )
+ alert( 'URL requested: "' + urlToCall + '"\r\n' +
+ 'Server response:\r\nStatus: ' + oXmlHttp.status + '\r\n' +
+ 'Response text:\r\n' + oXmlHttp.responseText ) ;
+ }
+ },
+
+ SelectNodes : function( xpath, contextNode )
+ {
+ if ( this.Error )
+ return new Array() ;
+
+ if ( contextNode )
+ return contextNode.selectNodes( xpath ) ;
+ else
+ return this.DOMDocument.selectNodes( xpath ) ;
+ },
+
+ SelectSingleNode : function( xpath, contextNode )
+ {
+ if ( this.Error )
+ return null ;
+
+ if ( contextNode )
+ return contextNode.selectSingleNode( xpath ) ;
+ else
+ return this.DOMDocument.selectSingleNode( xpath ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fck_othercommands.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fck_othercommands.js
new file mode 100644
index 0000000..ac26085
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fck_othercommands.js
@@ -0,0 +1,634 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Definition of other commands that are not available internaly in the
+ * browser (see FCKNamedCommand).
+ */
+
+// ### General Dialog Box Commands.
+var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam, customValue )
+{
+ this.Name = name ;
+ this.Title = title ;
+ this.Url = url ;
+ this.Width = width ;
+ this.Height = height ;
+ this.CustomValue = customValue ;
+
+ this.GetStateFunction = getStateFunction ;
+ this.GetStateParam = getStateParam ;
+
+ this.Resizable = false ;
+}
+
+FCKDialogCommand.prototype.Execute = function()
+{
+ FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height, this.CustomValue, null, this.Resizable ) ;
+}
+
+FCKDialogCommand.prototype.GetState = function()
+{
+ if ( this.GetStateFunction )
+ return this.GetStateFunction( this.GetStateParam ) ;
+ else
+ return FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
+
+// Generic Undefined command (usually used when a command is under development).
+var FCKUndefinedCommand = function()
+{
+ this.Name = 'Undefined' ;
+}
+
+FCKUndefinedCommand.prototype.Execute = function()
+{
+ alert( FCKLang.NotImplemented ) ;
+}
+
+FCKUndefinedCommand.prototype.GetState = function()
+{
+ return FCK_TRISTATE_OFF ;
+}
+
+
+// ### FormatBlock
+var FCKFormatBlockCommand = function()
+{}
+
+FCKFormatBlockCommand.prototype =
+{
+ Name : 'FormatBlock',
+
+ Execute : FCKStyleCommand.prototype.Execute,
+
+ GetState : function()
+ {
+ return FCK.EditorDocument ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+ }
+};
+
+// ### FontName
+
+var FCKFontNameCommand = function()
+{}
+
+FCKFontNameCommand.prototype =
+{
+ Name : 'FontName',
+ Execute : FCKStyleCommand.prototype.Execute,
+ GetState : FCKFormatBlockCommand.prototype.GetState
+};
+
+// ### FontSize
+var FCKFontSizeCommand = function()
+{}
+
+FCKFontSizeCommand.prototype =
+{
+ Name : 'FontSize',
+ Execute : FCKStyleCommand.prototype.Execute,
+ GetState : FCKFormatBlockCommand.prototype.GetState
+};
+
+// ### Preview
+var FCKPreviewCommand = function()
+{
+ this.Name = 'Preview' ;
+}
+
+FCKPreviewCommand.prototype.Execute = function()
+{
+ FCK.Preview() ;
+}
+
+FCKPreviewCommand.prototype.GetState = function()
+{
+ return FCK_TRISTATE_OFF ;
+}
+
+// ### Save
+var FCKSaveCommand = function()
+{
+ this.Name = 'Save' ;
+}
+
+FCKSaveCommand.prototype.Execute = function()
+{
+ // Get the linked field form.
+ var oForm = FCK.GetParentForm() ;
+
+ if ( typeof( oForm.onsubmit ) == 'function' )
+ {
+ var bRet = oForm.onsubmit() ;
+ if ( bRet != null && bRet === false )
+ return ;
+ }
+
+ // Submit the form.
+ // If there's a button named "submit" then the form.submit() function is masked and
+ // can't be called in Mozilla, so we call the click() method of that button.
+ if ( typeof( oForm.submit ) == 'function' )
+ oForm.submit() ;
+ else
+ oForm.submit.click() ;
+}
+
+FCKSaveCommand.prototype.GetState = function()
+{
+ return FCK_TRISTATE_OFF ;
+}
+
+// ### NewPage
+var FCKNewPageCommand = function()
+{
+ this.Name = 'NewPage' ;
+}
+
+FCKNewPageCommand.prototype.Execute = function()
+{
+ FCKUndo.SaveUndoStep() ;
+ FCK.SetData( '' ) ;
+ FCKUndo.Typing = true ;
+ FCK.Focus() ;
+}
+
+FCKNewPageCommand.prototype.GetState = function()
+{
+ return FCK_TRISTATE_OFF ;
+}
+
+// ### Source button
+var FCKSourceCommand = function()
+{
+ this.Name = 'Source' ;
+}
+
+FCKSourceCommand.prototype.Execute = function()
+{
+ if ( FCKConfig.SourcePopup ) // Until v2.2, it was mandatory for FCKBrowserInfo.IsGecko.
+ {
+ var iWidth = FCKConfig.ScreenWidth * 0.65 ;
+ var iHeight = FCKConfig.ScreenHeight * 0.65 ;
+ FCKDialog.OpenDialog( 'FCKDialog_Source', FCKLang.Source, 'dialog/fck_source.html', iWidth, iHeight, null, null, true ) ;
+ }
+ else
+ FCK.SwitchEditMode() ;
+}
+
+FCKSourceCommand.prototype.GetState = function()
+{
+ return ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON ) ;
+}
+
+// ### Undo
+var FCKUndoCommand = function()
+{
+ this.Name = 'Undo' ;
+}
+
+FCKUndoCommand.prototype.Execute = function()
+{
+ FCKUndo.Undo() ;
+}
+
+FCKUndoCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return ( FCKUndo.CheckUndoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+}
+
+// ### Redo
+var FCKRedoCommand = function()
+{
+ this.Name = 'Redo' ;
+}
+
+FCKRedoCommand.prototype.Execute = function()
+{
+ FCKUndo.Redo() ;
+}
+
+FCKRedoCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return ( FCKUndo.CheckRedoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+}
+
+// ### Page Break
+var FCKPageBreakCommand = function()
+{
+ this.Name = 'PageBreak' ;
+}
+
+FCKPageBreakCommand.prototype.Execute = function()
+{
+ // Take an undo snapshot before changing the document
+ FCKUndo.SaveUndoStep() ;
+
+// var e = FCK.EditorDocument.createElement( 'CENTER' ) ;
+// e.style.pageBreakAfter = 'always' ;
+
+ // Tidy was removing the empty CENTER tags, so the following solution has
+ // been found. It also validates correctly as XHTML 1.0 Strict.
+ var e = FCK.EditorDocument.createElement( 'DIV' ) ;
+ e.style.pageBreakAfter = 'always' ;
+ e.innerHTML = '<span style="DISPLAY:none">&nbsp;</span>' ;
+
+ var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', e ) ;
+ var oRange = new FCKDomRange( FCK.EditorWindow ) ;
+ oRange.MoveToSelection() ;
+ var oSplitInfo = oRange.SplitBlock() ;
+ oRange.InsertNode( oFakeImage ) ;
+
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKPageBreakCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return 0 ; // FCK_TRISTATE_OFF
+}
+
+// FCKUnlinkCommand - by Johnny Egeland (johnny@coretrek.com)
+var FCKUnlinkCommand = function()
+{
+ this.Name = 'Unlink' ;
+}
+
+FCKUnlinkCommand.prototype.Execute = function()
+{
+ // Take an undo snapshot before changing the document
+ FCKUndo.SaveUndoStep() ;
+
+ if ( FCKBrowserInfo.IsGeckoLike )
+ {
+ var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+ // The unlink command can generate a span in Firefox, so let's do it our way. See #430
+ if ( oLink )
+ FCKTools.RemoveOuterTags( oLink ) ;
+
+ return ;
+ }
+
+ FCK.ExecuteNamedCommand( this.Name ) ;
+}
+
+FCKUnlinkCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ var state = FCK.GetNamedCommandState( this.Name ) ;
+
+ // Check that it isn't an anchor
+ if ( state == FCK_TRISTATE_OFF && FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ {
+ var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+ var bIsAnchor = ( oLink && oLink.name.length > 0 && oLink.href.length == 0 ) ;
+ if ( bIsAnchor )
+ state = FCK_TRISTATE_DISABLED ;
+ }
+
+ return state ;
+}
+
+var FCKVisitLinkCommand = function()
+{
+ this.Name = 'VisitLink';
+}
+FCKVisitLinkCommand.prototype =
+{
+ GetState : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ var state = FCK.GetNamedCommandState( 'Unlink' ) ;
+
+ if ( state == FCK_TRISTATE_OFF )
+ {
+ var el = FCKSelection.MoveToAncestorNode( 'A' ) ;
+ if ( !el.href )
+ state = FCK_TRISTATE_DISABLED ;
+ }
+
+ return state ;
+ },
+
+ Execute : function()
+ {
+ var el = FCKSelection.MoveToAncestorNode( 'A' ) ;
+ var url = el.getAttribute( '_fcksavedurl' ) || el.getAttribute( 'href', 2 ) ;
+
+ // Check if it's a full URL.
+ // If not full URL, we'll need to apply the BaseHref setting.
+ if ( ! /:\/\//.test( url ) )
+ {
+ var baseHref = FCKConfig.BaseHref ;
+ var parentWindow = FCK.GetInstanceObject( 'parent' ) ;
+ if ( !baseHref )
+ {
+ baseHref = parentWindow.document.location.href ;
+ baseHref = baseHref.substring( 0, baseHref.lastIndexOf( '/' ) + 1 ) ;
+ }
+
+ if ( /^\//.test( url ) )
+ {
+ try
+ {
+ baseHref = baseHref.match( /^.*:\/\/+[^\/]+/ )[0] ;
+ }
+ catch ( e )
+ {
+ baseHref = parentWindow.document.location.protocol + '://' + parentWindow.parent.document.location.host ;
+ }
+ }
+
+ url = baseHref + url ;
+ }
+
+ if ( !window.open( url, '_blank' ) )
+ alert( FCKLang.VisitLinkBlocked ) ;
+ }
+} ;
+
+// FCKSelectAllCommand
+var FCKSelectAllCommand = function()
+{
+ this.Name = 'SelectAll' ;
+}
+
+FCKSelectAllCommand.prototype.Execute = function()
+{
+ if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ {
+ FCK.ExecuteNamedCommand( 'SelectAll' ) ;
+ }
+ else
+ {
+ // Select the contents of the textarea
+ var textarea = FCK.EditingArea.Textarea ;
+ if ( FCKBrowserInfo.IsIE )
+ {
+ textarea.createTextRange().execCommand( 'SelectAll' ) ;
+ }
+ else
+ {
+ textarea.selectionStart = 0 ;
+ textarea.selectionEnd = textarea.value.length ;
+ }
+ textarea.focus() ;
+ }
+}
+
+FCKSelectAllCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK_TRISTATE_OFF ;
+}
+
+// FCKPasteCommand
+var FCKPasteCommand = function()
+{
+ this.Name = 'Paste' ;
+}
+
+FCKPasteCommand.prototype =
+{
+ Execute : function()
+ {
+ if ( FCKBrowserInfo.IsIE )
+ FCK.Paste() ;
+ else
+ FCK.ExecuteNamedCommand( 'Paste' ) ;
+ },
+
+ GetState : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK.GetNamedCommandState( 'Paste' ) ;
+ }
+} ;
+
+// FCKRuleCommand
+var FCKRuleCommand = function()
+{
+ this.Name = 'Rule' ;
+}
+
+FCKRuleCommand.prototype =
+{
+ Execute : function()
+ {
+ FCKUndo.SaveUndoStep() ;
+ FCK.InsertElement( 'hr' ) ;
+ },
+
+ GetState : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK.GetNamedCommandState( 'InsertHorizontalRule' ) ;
+ }
+} ;
+
+// FCKCutCopyCommand
+var FCKCutCopyCommand = function( isCut )
+{
+ this.Name = isCut ? 'Cut' : 'Copy' ;
+}
+
+FCKCutCopyCommand.prototype =
+{
+ Execute : function()
+ {
+ var enabled = false ;
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // The following seems to be the only reliable way to detect that
+ // cut/copy is enabled in IE. It will fire the oncut/oncopy event
+ // only if the security settings enabled the command to execute.
+
+ var onEvent = function()
+ {
+ enabled = true ;
+ } ;
+
+ var eventName = 'on' + this.Name.toLowerCase() ;
+
+ FCK.EditorDocument.body.attachEvent( eventName, onEvent ) ;
+ FCK.ExecuteNamedCommand( this.Name ) ;
+ FCK.EditorDocument.body.detachEvent( eventName, onEvent ) ;
+ }
+ else
+ {
+ try
+ {
+ // Other browsers throw an error if the command is disabled.
+ FCK.ExecuteNamedCommand( this.Name ) ;
+ enabled = true ;
+ }
+ catch(e){}
+ }
+
+ if ( !enabled )
+ alert( FCKLang[ 'PasteError' + this.Name ] ) ;
+ },
+
+ GetState : function()
+ {
+ // Strangely, the Cut command happens to have the correct states for
+ // both Copy and Cut in all browsers.
+ return FCK.EditMode != FCK_EDITMODE_WYSIWYG ?
+ FCK_TRISTATE_DISABLED :
+ FCK.GetNamedCommandState( 'Cut' ) ;
+ }
+};
+
+var FCKAnchorDeleteCommand = function()
+{
+ this.Name = 'AnchorDelete' ;
+}
+
+FCKAnchorDeleteCommand.prototype =
+{
+ Execute : function()
+ {
+ if (FCK.Selection.GetType() == 'Control')
+ {
+ FCK.Selection.Delete();
+ }
+ else
+ {
+ var oFakeImage = FCK.Selection.GetSelectedElement() ;
+ if ( oFakeImage )
+ {
+ if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
+ oAnchor = FCK.GetRealElement( oFakeImage ) ;
+ else
+ oFakeImage = null ;
+ }
+
+ //Search for a real anchor
+ if ( !oFakeImage )
+ {
+ oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+ if ( oAnchor )
+ FCK.Selection.SelectNode( oAnchor ) ;
+ }
+
+ // If it's also a link, then just remove the name and exit
+ if ( oAnchor.href.length != 0 )
+ {
+ oAnchor.removeAttribute( 'name' ) ;
+ // Remove temporary class for IE
+ if ( FCKBrowserInfo.IsIE )
+ oAnchor.className = oAnchor.className.replace( FCKRegexLib.FCK_Class, '' ) ;
+ return ;
+ }
+
+ // We need to remove the anchor
+ // If we got a fake image, then just remove it and we're done
+ if ( oFakeImage )
+ {
+ oFakeImage.parentNode.removeChild( oFakeImage ) ;
+ return ;
+ }
+ // Empty anchor, so just remove it
+ if ( oAnchor.innerHTML.length == 0 )
+ {
+ oAnchor.parentNode.removeChild( oAnchor ) ;
+ return ;
+ }
+ // Anchor with content, leave the content
+ FCKTools.RemoveOuterTags( oAnchor ) ;
+ }
+ if ( FCKBrowserInfo.IsGecko )
+ FCK.Selection.Collapse( true ) ;
+ },
+
+ GetState : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK.GetNamedCommandState( 'Unlink') ;
+ }
+};
+
+var FCKDeleteDivCommand = function()
+{
+}
+FCKDeleteDivCommand.prototype =
+{
+ GetState : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+
+ var node = FCKSelection.GetParentElement() ;
+ var path = new FCKElementPath( node ) ;
+ return path.BlockLimit && path.BlockLimit.nodeName.IEquals( 'div' ) ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+ },
+
+ Execute : function()
+ {
+ // Create an undo snapshot before doing anything.
+ FCKUndo.SaveUndoStep() ;
+
+ // Find out the nodes to delete.
+ var nodes = FCKDomTools.GetSelectedDivContainers() ;
+
+ // Remember the current selection position.
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+ var bookmark = range.CreateBookmark() ;
+
+ // Delete the container DIV node.
+ for ( var i = 0 ; i < nodes.length ; i++)
+ FCKDomTools.RemoveNode( nodes[i], true ) ;
+
+ // Restore selection.
+ range.MoveToBookmark( bookmark ) ;
+ range.Select() ;
+ }
+} ;
+
+// FCKRuleCommand
+var FCKNbsp = function()
+{
+ this.Name = 'Non Breaking Space' ;
+}
+
+FCKNbsp.prototype =
+{
+ Execute : function()
+ {
+ FCK.InsertHtml( '&nbsp;' ) ;
+ },
+
+ GetState : function()
+ {
+ return ( FCK.EditMode != FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_OFF ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckblockquotecommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckblockquotecommand.js
new file mode 100644
index 0000000..2caff1b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckblockquotecommand.js
@@ -0,0 +1,281 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKBlockQuoteCommand Class: adds or removes blockquote tags.
+ */
+
+var FCKBlockQuoteCommand = function()
+{
+}
+
+FCKBlockQuoteCommand.prototype =
+{
+ Execute : function()
+ {
+ FCKUndo.SaveUndoStep() ;
+
+ var state = this.GetState() ;
+
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+
+ var bookmark = range.CreateBookmark() ;
+
+ // Kludge for #1592: if the bookmark nodes are in the beginning of
+ // blockquote, then move them to the nearest block element in the
+ // blockquote.
+ if ( FCKBrowserInfo.IsIE )
+ {
+ var bStart = range.GetBookmarkNode( bookmark, true ) ;
+ var bEnd = range.GetBookmarkNode( bookmark, false ) ;
+
+ var cursor ;
+
+ if ( bStart
+ && bStart.parentNode.nodeName.IEquals( 'blockquote' )
+ && !bStart.previousSibling )
+ {
+ cursor = bStart ;
+ while ( ( cursor = cursor.nextSibling ) )
+ {
+ if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+ FCKDomTools.MoveNode( bStart, cursor, true ) ;
+ }
+ }
+
+ if ( bEnd
+ && bEnd.parentNode.nodeName.IEquals( 'blockquote' )
+ && !bEnd.previousSibling )
+ {
+ cursor = bEnd ;
+ while ( ( cursor = cursor.nextSibling ) )
+ {
+ if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+ {
+ if ( cursor.firstChild == bStart )
+ FCKDomTools.InsertAfterNode( bStart, bEnd ) ;
+ else
+ FCKDomTools.MoveNode( bEnd, cursor, true ) ;
+ }
+ }
+ }
+ }
+
+ var iterator = new FCKDomRangeIterator( range ) ;
+ var block ;
+
+ if ( state == FCK_TRISTATE_OFF )
+ {
+ var paragraphs = [] ;
+ while ( ( block = iterator.GetNextParagraph() ) )
+ paragraphs.push( block ) ;
+
+ // If no paragraphs, create one from the current selection position.
+ if ( paragraphs.length < 1 )
+ {
+ para = range.Window.document.createElement( FCKConfig.EnterMode.IEquals( 'p' ) ? 'p' : 'div' ) ;
+ range.InsertNode( para ) ;
+ para.appendChild( range.Window.document.createTextNode( '\ufeff' ) ) ;
+ range.MoveToBookmark( bookmark ) ;
+ range.MoveToNodeContents( para ) ;
+ range.Collapse( true ) ;
+ bookmark = range.CreateBookmark() ;
+ paragraphs.push( para ) ;
+ }
+
+ // Make sure all paragraphs have the same parent.
+ var commonParent = paragraphs[0].parentNode ;
+ var tmp = [] ;
+ for ( var i = 0 ; i < paragraphs.length ; i++ )
+ {
+ block = paragraphs[i] ;
+ commonParent = FCKDomTools.GetCommonParents( block.parentNode, commonParent ).pop() ;
+ }
+
+ // The common parent must not be the following tags: table, tbody, tr, ol, ul.
+ while ( commonParent.nodeName.IEquals( 'table', 'tbody', 'tr', 'ol', 'ul' ) )
+ commonParent = commonParent.parentNode ;
+
+ // Reconstruct the block list to be processed such that all resulting blocks
+ // satisfy parentNode == commonParent.
+ var lastBlock = null ;
+ while ( paragraphs.length > 0 )
+ {
+ block = paragraphs.shift() ;
+ while ( block.parentNode != commonParent )
+ block = block.parentNode ;
+ if ( block != lastBlock )
+ tmp.push( block ) ;
+ lastBlock = block ;
+ }
+
+ // If any of the selected blocks is a blockquote, remove it to prevent nested blockquotes.
+ while ( tmp.length > 0 )
+ {
+ block = tmp.shift() ;
+ if ( block.nodeName.IEquals( 'blockquote' ) )
+ {
+ var docFrag = FCKTools.GetElementDocument( block ).createDocumentFragment() ;
+ while ( block.firstChild )
+ {
+ docFrag.appendChild( block.removeChild( block.firstChild ) ) ;
+ paragraphs.push( docFrag.lastChild ) ;
+ }
+ block.parentNode.replaceChild( docFrag, block ) ;
+ }
+ else
+ paragraphs.push( block ) ;
+ }
+
+ // Now we have all the blocks to be included in a new blockquote node.
+ var bqBlock = range.Window.document.createElement( 'blockquote' ) ;
+ commonParent.insertBefore( bqBlock, paragraphs[0] ) ;
+ while ( paragraphs.length > 0 )
+ {
+ block = paragraphs.shift() ;
+ bqBlock.appendChild( block ) ;
+ }
+ }
+ else if ( state == FCK_TRISTATE_ON )
+ {
+ var moveOutNodes = [] ;
+ var elementMarkers = {} ;
+ while ( ( block = iterator.GetNextParagraph() ) )
+ {
+ var bqParent = null ;
+ var bqChild = null ;
+ while ( block.parentNode )
+ {
+ if ( block.parentNode.nodeName.IEquals( 'blockquote' ) )
+ {
+ bqParent = block.parentNode ;
+ bqChild = block ;
+ break ;
+ }
+ block = block.parentNode ;
+ }
+
+ // Remember the blocks that were recorded down in the moveOutNodes array
+ // to prevent duplicates.
+ if ( bqParent && bqChild && !bqChild._fckblockquotemoveout )
+ {
+ moveOutNodes.push( bqChild ) ;
+ FCKDomTools.SetElementMarker( elementMarkers, bqChild, '_fckblockquotemoveout', true ) ;
+ }
+ }
+ FCKDomTools.ClearAllMarkers( elementMarkers ) ;
+
+ var movedNodes = [] ;
+ var processedBlockquoteBlocks = [], elementMarkers = {} ;
+ var noBlockLeft = function( bqBlock )
+ {
+ for ( var i = 0 ; i < bqBlock.childNodes.length ; i++ )
+ {
+ if ( FCKListsLib.BlockElements[ bqBlock.childNodes[i].nodeName.toLowerCase() ] )
+ return false ;
+ }
+ return true ;
+ } ;
+ while ( moveOutNodes.length > 0 )
+ {
+ var node = moveOutNodes.shift() ;
+ var bqBlock = node.parentNode ;
+
+ // If the node is located at the beginning or the end, just take it out without splitting.
+ // Otherwise, split the blockquote node and move the paragraph in between the two blockquote nodes.
+ if ( node == node.parentNode.firstChild )
+ bqBlock.parentNode.insertBefore( bqBlock.removeChild( node ), bqBlock ) ;
+ else if ( node == node.parentNode.lastChild )
+ bqBlock.parentNode.insertBefore( bqBlock.removeChild( node ), bqBlock.nextSibling ) ;
+ else
+ FCKDomTools.BreakParent( node, node.parentNode, range ) ;
+
+ // Remember the blockquote node so we can clear it later (if it becomes empty).
+ if ( !bqBlock._fckbqprocessed )
+ {
+ processedBlockquoteBlocks.push( bqBlock ) ;
+ FCKDomTools.SetElementMarker( elementMarkers, bqBlock, '_fckbqprocessed', true );
+ }
+
+ movedNodes.push( node ) ;
+ }
+
+ // Clear blockquote nodes that have become empty.
+ for ( var i = processedBlockquoteBlocks.length - 1 ; i >= 0 ; i-- )
+ {
+ var bqBlock = processedBlockquoteBlocks[i] ;
+ if ( noBlockLeft( bqBlock ) )
+ FCKDomTools.RemoveNode( bqBlock ) ;
+ }
+ FCKDomTools.ClearAllMarkers( elementMarkers ) ;
+
+ if ( FCKConfig.EnterMode.IEquals( 'br' ) )
+ {
+ while ( movedNodes.length )
+ {
+ var node = movedNodes.shift() ;
+ var firstTime = true ;
+ if ( node.nodeName.IEquals( 'div' ) )
+ {
+ var docFrag = FCKTools.GetElementDocument( node ).createDocumentFragment() ;
+ var needBeginBr = firstTime && node.previousSibling &&
+ !FCKListsLib.BlockBoundaries[node.previousSibling.nodeName.toLowerCase()] ;
+ if ( firstTime && needBeginBr )
+ docFrag.appendChild( FCKTools.GetElementDocument( node ).createElement( 'br' ) ) ;
+ var needEndBr = node.nextSibling &&
+ !FCKListsLib.BlockBoundaries[node.nextSibling.nodeName.toLowerCase()] ;
+ while ( node.firstChild )
+ docFrag.appendChild( node.removeChild( node.firstChild ) ) ;
+ if ( needEndBr )
+ docFrag.appendChild( FCKTools.GetElementDocument( node ).createElement( 'br' ) ) ;
+ node.parentNode.replaceChild( docFrag, node ) ;
+ firstTime = false ;
+ }
+ }
+ }
+ }
+ range.MoveToBookmark( bookmark ) ;
+ range.Select() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ GetState : function()
+ {
+ // Disabled if not WYSIWYG.
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+ return FCK_TRISTATE_DISABLED ;
+
+ var path = new FCKElementPath( FCKSelection.GetBoundaryParentElement( true ) ) ;
+ var firstBlock = path.Block || path.BlockLimit ;
+
+ if ( !firstBlock || firstBlock.nodeName.toLowerCase() == 'body' )
+ return FCK_TRISTATE_OFF ;
+
+ // See if the first block has a blockquote parent.
+ for ( var i = 0 ; i < path.Elements.length ; i++ )
+ {
+ if ( path.Elements[i].nodeName.IEquals( 'blockquote' ) )
+ return FCK_TRISTATE_ON ;
+ }
+ return FCK_TRISTATE_OFF ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckcorestylecommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckcorestylecommand.js
new file mode 100644
index 0000000..b99ba5b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckcorestylecommand.js
@@ -0,0 +1,61 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKCoreStyleCommand Class: controls the execution of a core style. Core
+ * styles are usually represented as buttons in the toolbar., like Bold and
+ * Italic.
+ */
+
+ var FCKCoreStyleCommand = function( coreStyleName )
+ {
+ this.Name = 'CoreStyle' ;
+ this.StyleName = '_FCK_' + coreStyleName ;
+ this.IsActive = false ;
+
+ FCKStyles.AttachStyleStateChange( this.StyleName, this._OnStyleStateChange, this ) ;
+ }
+
+ FCKCoreStyleCommand.prototype =
+ {
+ Execute : function()
+ {
+ FCKUndo.SaveUndoStep() ;
+
+ if ( this.IsActive )
+ FCKStyles.RemoveStyle( this.StyleName ) ;
+ else
+ FCKStyles.ApplyStyle( this.StyleName ) ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ GetState : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return this.IsActive ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
+ },
+
+ _OnStyleStateChange : function( styleName, isActive )
+ {
+ this.IsActive = isActive ;
+ }
+ };
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js
new file mode 100644
index 0000000..c1b8f9a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js
@@ -0,0 +1,213 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Stretch the editor to full window size and back.
+ */
+
+var FCKFitWindow = function()
+{
+ this.Name = 'FitWindow' ;
+}
+
+FCKFitWindow.prototype.Execute = function()
+{
+ var eEditorFrame = window.frameElement ;
+ var eEditorFrameStyle = eEditorFrame.style ;
+
+ var eMainWindow = parent ;
+ var eDocEl = eMainWindow.document.documentElement ;
+ var eBody = eMainWindow.document.body ;
+ var eBodyStyle = eBody.style ;
+ var eParent ;
+
+ // Save the current selection and scroll position.
+ var oRange, oEditorScrollPos ;
+ if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ {
+ oRange = new FCKDomRange( FCK.EditorWindow ) ;
+ oRange.MoveToSelection() ;
+ oEditorScrollPos = FCKTools.GetScrollPosition( FCK.EditorWindow ) ;
+ }
+ else
+ {
+ var eTextarea = FCK.EditingArea.Textarea ;
+ oRange = !FCKBrowserInfo.IsIE && [ eTextarea.selectionStart, eTextarea.selectionEnd ] ;
+ oEditorScrollPos = [ eTextarea.scrollLeft, eTextarea.scrollTop ] ;
+ }
+
+ // No original style properties known? Go fullscreen.
+ if ( !this.IsMaximized )
+ {
+ // Registering an event handler when the window gets resized.
+ if( FCKBrowserInfo.IsIE )
+ eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ;
+ else
+ eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ;
+
+ // Save the scrollbars position.
+ this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ;
+
+ // Save and reset the styles for the entire node tree. They could interfere in the result.
+ eParent = eEditorFrame ;
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ while( (eParent = eParent.parentNode) )
+ {
+ if ( eParent.nodeType == 1 )
+ {
+ eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ;
+ eParent.style.zIndex = FCKConfig.FloatingPanelsZIndex - 1 ;
+ }
+ }
+
+ // Hide IE scrollbars (in strict mode).
+ if ( FCKBrowserInfo.IsIE )
+ {
+ this.documentElementOverflow = eDocEl.style.overflow ;
+ eDocEl.style.overflow = 'hidden' ;
+ eBodyStyle.overflow = 'hidden' ;
+ }
+ else
+ {
+ // Hide the scroolbars in Firefox.
+ eBodyStyle.overflow = 'hidden' ;
+ eBodyStyle.width = '0px' ;
+ eBodyStyle.height = '0px' ;
+ }
+
+ // Save the IFRAME styles.
+ this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ;
+
+ // Resize.
+ var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ;
+
+ eEditorFrameStyle.position = "absolute";
+ eEditorFrame.offsetLeft ; // Kludge for Safari 3.1 browser bug, do not remove. See #2066.
+ eEditorFrameStyle.zIndex = FCKConfig.FloatingPanelsZIndex - 1;
+ eEditorFrameStyle.left = "0px";
+ eEditorFrameStyle.top = "0px";
+ eEditorFrameStyle.width = oViewPaneSize.Width + "px";
+ eEditorFrameStyle.height = oViewPaneSize.Height + "px";
+
+ // Giving the frame some (huge) borders on his right and bottom
+ // side to hide the background that would otherwise show when the
+ // editor is in fullsize mode and the window is increased in size
+ // not for IE, because IE immediately adapts the editor on resize,
+ // without showing any of the background oddly in firefox, the
+ // editor seems not to fill the whole frame, so just setting the
+ // background of it to white to cover the page laying behind it anyway.
+ if ( !FCKBrowserInfo.IsIE )
+ {
+ eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ;
+ eEditorFrameStyle.backgroundColor = "white";
+ }
+
+ // Scroll to top left.
+ eMainWindow.scrollTo(0, 0);
+
+ // Is the editor still not on the top left? Let's find out and fix that as well. (Bug #174)
+ var editorPos = FCKTools.GetWindowPosition( eMainWindow, eEditorFrame ) ;
+ if ( editorPos.x != 0 )
+ eEditorFrameStyle.left = ( -1 * editorPos.x ) + "px" ;
+ if ( editorPos.y != 0 )
+ eEditorFrameStyle.top = ( -1 * editorPos.y ) + "px" ;
+
+ this.IsMaximized = true ;
+ }
+ else // Resize to original size.
+ {
+ // Remove the event handler of window resizing.
+ if( FCKBrowserInfo.IsIE )
+ eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ;
+ else
+ eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ;
+
+ // Restore the CSS position for the entire node tree.
+ eParent = eEditorFrame ;
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ while( (eParent = eParent.parentNode) )
+ {
+ if ( eParent._fckSavedStyles )
+ {
+ FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ;
+ eParent._fckSavedStyles = null ;
+ }
+ }
+
+ // Restore IE scrollbars
+ if ( FCKBrowserInfo.IsIE )
+ eDocEl.style.overflow = this.documentElementOverflow ;
+
+ // Restore original size
+ FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ;
+
+ // Restore the window scroll position.
+ eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ;
+
+ this.IsMaximized = false ;
+ }
+
+ FCKToolbarItems.GetItem('FitWindow').RefreshState() ;
+
+ // It seams that Firefox restarts the editing area when making this changes.
+ // On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special
+ //configuration, like DisableFFTableHandles and DisableObjectResizing get
+ //lost, so we must reset it. Also, the cursor position and selection are
+ //also lost, even if you comment the following line (MakeEditable).
+ // if ( FCKBrowserInfo.IsGecko10 ) // Initially I thought it was a FF 1.0 only problem.
+ if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ FCK.EditingArea.MakeEditable() ;
+
+ FCK.Focus() ;
+
+ // Restore the selection and scroll position of inside the document.
+ if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ {
+ oRange.Select() ;
+ FCK.EditorWindow.scrollTo( oEditorScrollPos.X, oEditorScrollPos.Y ) ;
+ }
+ else
+ {
+ if ( !FCKBrowserInfo.IsIE )
+ {
+ eTextarea.selectionStart = oRange[0] ;
+ eTextarea.selectionEnd = oRange[1] ;
+ }
+ eTextarea.scrollLeft = oEditorScrollPos[0] ;
+ eTextarea.scrollTop = oEditorScrollPos[1] ;
+ }
+}
+
+FCKFitWindow.prototype.GetState = function()
+{
+ if ( FCKConfig.ToolbarLocation != 'In' )
+ return FCK_TRISTATE_DISABLED ;
+ else
+ return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF );
+}
+
+function FCKFitWindow_Resize()
+{
+ var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ;
+
+ var eEditorFrameStyle = window.frameElement.style ;
+
+ eEditorFrameStyle.width = oViewPaneSize.Width + 'px' ;
+ eEditorFrameStyle.height = oViewPaneSize.Height + 'px' ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckindentcommands.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckindentcommands.js
new file mode 100644
index 0000000..5ae8de9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckindentcommands.js
@@ -0,0 +1,282 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIndentCommand Class: controls block indentation.
+ */
+
+var FCKIndentCommand = function( name, offset )
+{
+ this.Name = name ;
+ this.Offset = offset ;
+ this.IndentCSSProperty = FCKConfig.ContentLangDirection.IEquals( 'ltr' ) ? 'marginLeft' : 'marginRight' ;
+}
+
+FCKIndentCommand._InitIndentModeParameters = function()
+{
+ if ( FCKConfig.IndentClasses && FCKConfig.IndentClasses.length > 0 )
+ {
+ this._UseIndentClasses = true ;
+ this._IndentClassMap = {} ;
+ for ( var i = 0 ; i < FCKConfig.IndentClasses.length ;i++ )
+ this._IndentClassMap[FCKConfig.IndentClasses[i]] = i + 1 ;
+ this._ClassNameRegex = new RegExp( '(?:^|\\s+)(' + FCKConfig.IndentClasses.join( '|' ) + ')(?=$|\\s)' ) ;
+ }
+ else
+ this._UseIndentClasses = false ;
+}
+
+
+FCKIndentCommand.prototype =
+{
+ Execute : function()
+ {
+ // Save an undo snapshot before doing anything.
+ FCKUndo.SaveUndoStep() ;
+
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+ var bookmark = range.CreateBookmark() ;
+
+ // Two cases to handle here: either we're in a list, or not.
+ // If we're in a list, then the indent/outdent operations would be done on the list nodes.
+ // Otherwise, apply the operation on the nearest block nodes.
+ var nearestListBlock = FCKDomTools.GetCommonParentNode( range.StartNode || range.StartContainer ,
+ range.EndNode || range.EndContainer,
+ ['ul', 'ol'] ) ;
+ if ( nearestListBlock )
+ this._IndentList( range, nearestListBlock ) ;
+ else
+ this._IndentBlock( range ) ;
+
+ range.MoveToBookmark( bookmark ) ;
+ range.Select() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ GetState : function()
+ {
+ // Disabled if not WYSIWYG.
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+ return FCK_TRISTATE_DISABLED ;
+
+ // Initialize parameters if not already initialzed.
+ if ( FCKIndentCommand._UseIndentClasses == undefined )
+ FCKIndentCommand._InitIndentModeParameters() ;
+
+ // If we're not in a list, and the starting block's indentation is zero, and the current
+ // command is the outdent command, then we should return FCK_TRISTATE_DISABLED.
+ var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;
+ var endContainer = FCKSelection.GetBoundaryParentElement( false ) ;
+ var listNode = FCKDomTools.GetCommonParentNode( startContainer, endContainer, ['ul','ol'] ) ;
+
+ if ( listNode )
+ {
+ if ( this.Name.IEquals( 'outdent' ) )
+ return FCK_TRISTATE_OFF ;
+ var firstItem = FCKTools.GetElementAscensor( startContainer, 'li' ) ;
+ if ( !firstItem || !firstItem.previousSibling )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK_TRISTATE_OFF ;
+ }
+ if ( ! FCKIndentCommand._UseIndentClasses && this.Name.IEquals( 'indent' ) )
+ return FCK_TRISTATE_OFF;
+
+ var path = new FCKElementPath( startContainer ) ;
+ var firstBlock = path.Block || path.BlockLimit ;
+ if ( !firstBlock )
+ return FCK_TRISTATE_DISABLED ;
+
+ if ( FCKIndentCommand._UseIndentClasses )
+ {
+ var indentClass = firstBlock.className.match( FCKIndentCommand._ClassNameRegex ) ;
+ var indentStep = 0 ;
+ if ( indentClass != null )
+ {
+ indentClass = indentClass[1] ;
+ indentStep = FCKIndentCommand._IndentClassMap[indentClass] ;
+ }
+ if ( ( this.Name == 'outdent' && indentStep == 0 ) ||
+ ( this.Name == 'indent' && indentStep == FCKConfig.IndentClasses.length ) )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK_TRISTATE_OFF ;
+ }
+ else
+ {
+ var indent = parseInt( firstBlock.style[this.IndentCSSProperty], 10 ) ;
+ if ( isNaN( indent ) )
+ indent = 0 ;
+ if ( indent <= 0 )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK_TRISTATE_OFF ;
+ }
+ },
+
+ _IndentBlock : function( range )
+ {
+ var iterator = new FCKDomRangeIterator( range ) ;
+ iterator.EnforceRealBlocks = true ;
+
+ range.Expand( 'block_contents' ) ;
+ var commonParents = FCKDomTools.GetCommonParents( range.StartContainer, range.EndContainer ) ;
+ var nearestParent = commonParents[commonParents.length - 1] ;
+ var block ;
+
+ while ( ( block = iterator.GetNextParagraph() ) )
+ {
+ // We don't want to indent subtrees recursively, so only perform the indent operation
+ // if the block itself is the nearestParent, or the block's parent is the nearestParent.
+ if ( ! ( block == nearestParent || block.parentNode == nearestParent ) )
+ continue ;
+
+ if ( FCKIndentCommand._UseIndentClasses )
+ {
+ // Transform current class name to indent step index.
+ var indentClass = block.className.match( FCKIndentCommand._ClassNameRegex ) ;
+ var indentStep = 0 ;
+ if ( indentClass != null )
+ {
+ indentClass = indentClass[1] ;
+ indentStep = FCKIndentCommand._IndentClassMap[indentClass] ;
+ }
+
+ // Operate on indent step index, transform indent step index back to class name.
+ if ( this.Name.IEquals( 'outdent' ) )
+ indentStep-- ;
+ else if ( this.Name.IEquals( 'indent' ) )
+ indentStep++ ;
+ indentStep = Math.min( indentStep, FCKConfig.IndentClasses.length ) ;
+ indentStep = Math.max( indentStep, 0 ) ;
+ var className = block.className.replace( FCKIndentCommand._ClassNameRegex, '' ) ;
+ if ( indentStep < 1 )
+ block.className = className ;
+ else
+ block.className = ( className.length > 0 ? className + ' ' : '' ) +
+ FCKConfig.IndentClasses[indentStep - 1] ;
+ }
+ else
+ {
+ // Offset distance is assumed to be in pixels for now.
+ var currentOffset = parseInt( block.style[this.IndentCSSProperty], 10 ) ;
+ if ( isNaN( currentOffset ) )
+ currentOffset = 0 ;
+ currentOffset += this.Offset ;
+ currentOffset = Math.max( currentOffset, 0 ) ;
+ currentOffset = Math.ceil( currentOffset / this.Offset ) * this.Offset ;
+ block.style[this.IndentCSSProperty] = currentOffset ? currentOffset + FCKConfig.IndentUnit : '' ;
+ if ( block.getAttribute( 'style' ) == '' )
+ block.removeAttribute( 'style' ) ;
+ }
+ }
+ },
+
+ _IndentList : function( range, listNode )
+ {
+ // Our starting and ending points of the range might be inside some blocks under a list item...
+ // So before playing with the iterator, we need to expand the block to include the list items.
+ var startContainer = range.StartContainer ;
+ var endContainer = range.EndContainer ;
+ while ( startContainer && startContainer.parentNode != listNode )
+ startContainer = startContainer.parentNode ;
+ while ( endContainer && endContainer.parentNode != listNode )
+ endContainer = endContainer.parentNode ;
+
+ if ( ! startContainer || ! endContainer )
+ return ;
+
+ // Now we can iterate over the individual items on the same tree depth.
+ var block = startContainer ;
+ var itemsToMove = [] ;
+ var stopFlag = false ;
+ while ( stopFlag == false )
+ {
+ if ( block == endContainer )
+ stopFlag = true ;
+ itemsToMove.push( block ) ;
+ block = block.nextSibling ;
+ }
+ if ( itemsToMove.length < 1 )
+ return ;
+
+ // Do indent or outdent operations on the array model of the list, not the list's DOM tree itself.
+ // The array model demands that it knows as much as possible about the surrounding lists, we need
+ // to feed it the further ancestor node that is still a list.
+ var listParents = FCKDomTools.GetParents( listNode ) ;
+ for ( var i = 0 ; i < listParents.length ; i++ )
+ {
+ if ( listParents[i].nodeName.IEquals( ['ul', 'ol'] ) )
+ {
+ listNode = listParents[i] ;
+ break ;
+ }
+ }
+ var indentOffset = this.Name.IEquals( 'indent' ) ? 1 : -1 ;
+ var startItem = itemsToMove[0] ;
+ var lastItem = itemsToMove[ itemsToMove.length - 1 ] ;
+ var markerObj = {} ;
+
+ // Convert the list DOM tree into a one dimensional array.
+ var listArray = FCKDomTools.ListToArray( listNode, markerObj ) ;
+
+ // Apply indenting or outdenting on the array.
+ var baseIndent = listArray[lastItem._FCK_ListArray_Index].indent ;
+ for ( var i = startItem._FCK_ListArray_Index ; i <= lastItem._FCK_ListArray_Index ; i++ )
+ listArray[i].indent += indentOffset ;
+ for ( var i = lastItem._FCK_ListArray_Index + 1 ; i < listArray.length && listArray[i].indent > baseIndent ; i++ )
+ listArray[i].indent += indentOffset ;
+
+ /* For debug use only
+ var PrintArray = function( listArray, doc )
+ {
+ var s = [] ;
+ for ( var i = 0 ; i < listArray.length ; i++ )
+ {
+ for ( var j in listArray[i] )
+ {
+ if ( j != 'contents' )
+ s.push( j + ":" + listArray[i][j] + "; " ) ;
+ else
+ {
+ var docFrag = doc.createDocumentFragment() ;
+ var tmpNode = doc.createElement( 'span' ) ;
+ for ( var k = 0 ; k < listArray[i][j].length ; k++ )
+ docFrag.appendChild( listArray[i][j][k].cloneNode( true ) ) ;
+ tmpNode.appendChild( docFrag ) ;
+ s.push( j + ":" + tmpNode.innerHTML + "; ") ;
+ }
+ }
+ s.push( '\n' ) ;
+ }
+ alert( s.join('') ) ;
+ }
+ PrintArray( listArray, FCK.EditorDocument ) ;
+ */
+
+ // Convert the array back to a DOM forest (yes we might have a few subtrees now).
+ // And replace the old list with the new forest.
+ var newList = FCKDomTools.ArrayToList( listArray ) ;
+ if ( newList )
+ listNode.parentNode.replaceChild( newList.listNode, listNode ) ;
+
+ // Clean up the markers.
+ FCKDomTools.ClearAllMarkers( markerObj ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckjustifycommands.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckjustifycommands.js
new file mode 100644
index 0000000..f72c2cb
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckjustifycommands.js
@@ -0,0 +1,173 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKJustifyCommand Class: controls block justification.
+ */
+
+var FCKJustifyCommand = function( alignValue )
+{
+ this.AlignValue = alignValue ;
+
+ // Detect whether this is the instance for the default alignment.
+ var contentDir = FCKConfig.ContentLangDirection.toLowerCase() ;
+ this.IsDefaultAlign = ( alignValue == 'left' && contentDir == 'ltr' ) ||
+ ( alignValue == 'right' && contentDir == 'rtl' ) ;
+
+ // Get the class name to be used by this instance.
+ var cssClassName = this._CssClassName = ( function()
+ {
+ var classes = FCKConfig.JustifyClasses ;
+ if ( classes )
+ {
+ switch ( alignValue )
+ {
+ case 'left' :
+ return classes[0] || null ;
+ case 'center' :
+ return classes[1] || null ;
+ case 'right' :
+ return classes[2] || null ;
+ case 'justify' :
+ return classes[3] || null ;
+ }
+ }
+ return null ;
+ } )() ;
+
+ if ( cssClassName && cssClassName.length > 0 )
+ this._CssClassRegex = new RegExp( '(?:^|\\s+)' + cssClassName + '(?=$|\\s)' ) ;
+}
+
+FCKJustifyCommand._GetClassNameRegex = function()
+{
+ var regex = FCKJustifyCommand._ClassRegex ;
+ if ( regex != undefined )
+ return regex ;
+
+ var names = [] ;
+
+ var classes = FCKConfig.JustifyClasses ;
+ if ( classes )
+ {
+ for ( var i = 0 ; i < 4 ; i++ )
+ {
+ var className = classes[i] ;
+ if ( className && className.length > 0 )
+ names.push( className ) ;
+ }
+ }
+
+ if ( names.length > 0 )
+ regex = new RegExp( '(?:^|\\s+)(?:' + names.join( '|' ) + ')(?=$|\\s)' ) ;
+ else
+ regex = null ;
+
+ return FCKJustifyCommand._ClassRegex = regex ;
+}
+
+FCKJustifyCommand.prototype =
+{
+ Execute : function()
+ {
+ // Save an undo snapshot before doing anything.
+ FCKUndo.SaveUndoStep() ;
+
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+
+ var currentState = this.GetState() ;
+ if ( currentState == FCK_TRISTATE_DISABLED )
+ return ;
+
+ // Store a bookmark of the selection since the paragraph iterator might
+ // change the DOM tree and break selections.
+ var bookmark = range.CreateBookmark() ;
+
+ var cssClassName = this._CssClassName ;
+
+ // Apply alignment setting for each paragraph.
+ var iterator = new FCKDomRangeIterator( range ) ;
+ var block ;
+ while ( ( block = iterator.GetNextParagraph() ) )
+ {
+ block.removeAttribute( 'align' ) ;
+
+ if ( cssClassName )
+ {
+ // Remove the any of the alignment classes from the className.
+ var className = block.className.replace( FCKJustifyCommand._GetClassNameRegex(), '' ) ;
+
+ // Append the desired class name.
+ if ( currentState == FCK_TRISTATE_OFF )
+ {
+ if ( className.length > 0 )
+ className += ' ' ;
+ block.className = className + cssClassName ;
+ }
+ else if ( className.length == 0 )
+ FCKDomTools.RemoveAttribute( block, 'class' ) ;
+ }
+ else
+ {
+ var style = block.style ;
+ if ( currentState == FCK_TRISTATE_OFF )
+ style.textAlign = this.AlignValue ;
+ else
+ {
+ style.textAlign = '' ;
+ if ( style.cssText.length == 0 )
+ block.removeAttribute( 'style' ) ;
+ }
+ }
+ }
+
+ // Restore previous selection.
+ range.MoveToBookmark( bookmark ) ;
+ range.Select() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ GetState : function()
+ {
+ // Disabled if not WYSIWYG.
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+ return FCK_TRISTATE_DISABLED ;
+
+ // Retrieve the first selected block.
+ var path = new FCKElementPath( FCKSelection.GetBoundaryParentElement( true ) ) ;
+ var firstBlock = path.Block || path.BlockLimit ;
+
+ if ( !firstBlock || firstBlock.nodeName.toLowerCase() == 'body' )
+ return FCK_TRISTATE_OFF ;
+
+ // Check if the desired style is already applied to the block.
+ var currentAlign ;
+ if ( FCKBrowserInfo.IsIE )
+ currentAlign = firstBlock.currentStyle.textAlign ;
+ else
+ currentAlign = FCK.EditorWindow.getComputedStyle( firstBlock, '' ).getPropertyValue( 'text-align' );
+ currentAlign = currentAlign.replace( /(-moz-|-webkit-|start|auto)/i, '' );
+ if ( ( !currentAlign && this.IsDefaultAlign ) || currentAlign == this.AlignValue )
+ return FCK_TRISTATE_ON ;
+ return FCK_TRISTATE_OFF ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcklistcommands.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcklistcommands.js
new file mode 100644
index 0000000..16f71ea
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcklistcommands.js
@@ -0,0 +1,382 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Implementation for the "Insert/Remove Ordered/Unordered List" commands.
+ */
+
+var FCKListCommand = function( name, tagName )
+{
+ this.Name = name ;
+ this.TagName = tagName ;
+}
+
+FCKListCommand.prototype =
+{
+ GetState : function()
+ {
+ // Disabled if not WYSIWYG.
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+ return FCK_TRISTATE_DISABLED ;
+
+ // We'll use the style system's convention to determine list state here...
+ // If the starting block is a descendant of an <ol> or <ul> node, then we're in a list.
+ var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;
+ var listNode = startContainer ;
+ while ( listNode )
+ {
+ if ( listNode.nodeName.IEquals( [ 'ul', 'ol' ] ) )
+ break ;
+ listNode = listNode.parentNode ;
+ }
+ if ( listNode && listNode.nodeName.IEquals( this.TagName ) )
+ return FCK_TRISTATE_ON ;
+ else
+ return FCK_TRISTATE_OFF ;
+ },
+
+ Execute : function()
+ {
+ FCKUndo.SaveUndoStep() ;
+
+ var doc = FCK.EditorDocument ;
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+ var state = this.GetState() ;
+
+ // Midas lists rule #1 says we can create a list even in an empty document.
+ // But FCKDomRangeIterator wouldn't run if the document is really empty.
+ // So create a paragraph if the document is empty and we're going to create a list.
+ if ( state == FCK_TRISTATE_OFF )
+ {
+ FCKDomTools.TrimNode( doc.body ) ;
+ if ( ! doc.body.firstChild )
+ {
+ var paragraph = doc.createElement( 'p' ) ;
+ doc.body.appendChild( paragraph ) ;
+ range.MoveToNodeContents( paragraph ) ;
+ }
+ }
+
+ var bookmark = range.CreateBookmark() ;
+
+ // Group the blocks up because there are many cases where multiple lists have to be created,
+ // or multiple lists have to be cancelled.
+ var listGroups = [] ;
+ var markerObj = {} ;
+ var iterator = new FCKDomRangeIterator( range ) ;
+ var block ;
+
+ iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;
+ var nextRangeExists = true ;
+ var rangeQueue = null ;
+ while ( nextRangeExists )
+ {
+ while ( ( block = iterator.GetNextParagraph() ) )
+ {
+ var path = new FCKElementPath( block ) ;
+ var listNode = null ;
+ var processedFlag = false ;
+ var blockLimit = path.BlockLimit ;
+
+ // First, try to group by a list ancestor.
+ for ( var i = path.Elements.length - 1 ; i >= 0 ; i-- )
+ {
+ var el = path.Elements[i] ;
+ if ( el.nodeName.IEquals( ['ol', 'ul'] ) )
+ {
+ // If we've encountered a list inside a block limit
+ // The last group object of the block limit element should
+ // no longer be valid. Since paragraphs after the list
+ // should belong to a different group of paragraphs before
+ // the list. (Bug #1309)
+ if ( blockLimit._FCK_ListGroupObject )
+ blockLimit._FCK_ListGroupObject = null ;
+
+ var groupObj = el._FCK_ListGroupObject ;
+ if ( groupObj )
+ groupObj.contents.push( block ) ;
+ else
+ {
+ groupObj = { 'root' : el, 'contents' : [ block ] } ;
+ listGroups.push( groupObj ) ;
+ FCKDomTools.SetElementMarker( markerObj, el, '_FCK_ListGroupObject', groupObj ) ;
+ }
+ processedFlag = true ;
+ break ;
+ }
+ }
+
+ if ( processedFlag )
+ continue ;
+
+ // No list ancestor? Group by block limit.
+ var root = blockLimit ;
+ if ( root._FCK_ListGroupObject )
+ root._FCK_ListGroupObject.contents.push( block ) ;
+ else
+ {
+ var groupObj = { 'root' : root, 'contents' : [ block ] } ;
+ FCKDomTools.SetElementMarker( markerObj, root, '_FCK_ListGroupObject', groupObj ) ;
+ listGroups.push( groupObj ) ;
+ }
+ }
+
+ if ( FCKBrowserInfo.IsIE )
+ nextRangeExists = false ;
+ else
+ {
+ if ( rangeQueue == null )
+ {
+ rangeQueue = [] ;
+ var selectionObject = FCKSelection.GetSelection() ;
+ if ( selectionObject && listGroups.length == 0 )
+ rangeQueue.push( selectionObject.getRangeAt( 0 ) ) ;
+ for ( var i = 1 ; selectionObject && i < selectionObject.rangeCount ; i++ )
+ rangeQueue.push( selectionObject.getRangeAt( i ) ) ;
+ }
+ if ( rangeQueue.length < 1 )
+ nextRangeExists = false ;
+ else
+ {
+ var internalRange = FCKW3CRange.CreateFromRange( doc, rangeQueue.shift() ) ;
+ range._Range = internalRange ;
+ range._UpdateElementInfo() ;
+ if ( range.StartNode.nodeName.IEquals( 'td' ) )
+ range.SetStart( range.StartNode, 1 ) ;
+ if ( range.EndNode.nodeName.IEquals( 'td' ) )
+ range.SetEnd( range.EndNode, 2 ) ;
+ iterator = new FCKDomRangeIterator( range ) ;
+ iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;
+ }
+ }
+ }
+
+ // Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element.
+ // We either have to build lists or remove lists, for removing a list does not makes sense when we are looking
+ // at the group that's not rooted at lists. So we have three cases to handle.
+ var listsCreated = [] ;
+ while ( listGroups.length > 0 )
+ {
+ var groupObj = listGroups.shift() ;
+ if ( state == FCK_TRISTATE_OFF )
+ {
+ if ( groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )
+ this._ChangeListType( groupObj, markerObj, listsCreated ) ;
+ else
+ this._CreateList( groupObj, listsCreated ) ;
+ }
+ else if ( state == FCK_TRISTATE_ON && groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )
+ this._RemoveList( groupObj, markerObj ) ;
+ }
+
+ // For all new lists created, merge adjacent, same type lists.
+ for ( var i = 0 ; i < listsCreated.length ; i++ )
+ {
+ var listNode = listsCreated[i] ;
+ var stopFlag = false ;
+ var currentNode = listNode ;
+ while ( ! stopFlag )
+ {
+ currentNode = currentNode.nextSibling ;
+ if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+ continue ;
+ stopFlag = true ;
+ }
+
+ if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+ {
+ currentNode.parentNode.removeChild( currentNode ) ;
+ while ( currentNode.firstChild )
+ listNode.appendChild( currentNode.removeChild( currentNode.firstChild ) ) ;
+ }
+
+ stopFlag = false ;
+ currentNode = listNode ;
+ while ( ! stopFlag )
+ {
+ currentNode = currentNode.previousSibling ;
+ if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+ continue ;
+ stopFlag = true ;
+ }
+ if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+ {
+ currentNode.parentNode.removeChild( currentNode ) ;
+ while ( currentNode.lastChild )
+ listNode.insertBefore( currentNode.removeChild( currentNode.lastChild ),
+ listNode.firstChild ) ;
+ }
+ }
+
+ // Clean up, restore selection and update toolbar button states.
+ FCKDomTools.ClearAllMarkers( markerObj ) ;
+ range.MoveToBookmark( bookmark ) ;
+ range.Select() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ _ChangeListType : function( groupObj, markerObj, listsCreated )
+ {
+ // This case is easy...
+ // 1. Convert the whole list into a one-dimensional array.
+ // 2. Change the list type by modifying the array.
+ // 3. Recreate the whole list by converting the array to a list.
+ // 4. Replace the original list with the recreated list.
+ var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;
+ var selectedListItems = [] ;
+ for ( var i = 0 ; i < groupObj.contents.length ; i++ )
+ {
+ var itemNode = groupObj.contents[i] ;
+ itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;
+ if ( ! itemNode || itemNode._FCK_ListItem_Processed )
+ continue ;
+ selectedListItems.push( itemNode ) ;
+ FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;
+ }
+ var fakeParent = FCKTools.GetElementDocument( groupObj.root ).createElement( this.TagName ) ;
+ for ( var i = 0 ; i < selectedListItems.length ; i++ )
+ {
+ var listIndex = selectedListItems[i]._FCK_ListArray_Index ;
+ listArray[listIndex].parent = fakeParent ;
+ }
+ var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
+ for ( var i = 0 ; i < newList.listNode.childNodes.length ; i++ )
+ {
+ if ( newList.listNode.childNodes[i].nodeName.IEquals( this.TagName ) )
+ listsCreated.push( newList.listNode.childNodes[i] ) ;
+ }
+ groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;
+ },
+
+ _CreateList : function( groupObj, listsCreated )
+ {
+ var contents = groupObj.contents ;
+ var doc = FCKTools.GetElementDocument( groupObj.root ) ;
+ var listContents = [] ;
+
+ // It is possible to have the contents returned by DomRangeIterator to be the same as the root.
+ // e.g. when we're running into table cells.
+ // In such a case, enclose the childNodes of contents[0] into a <div>.
+ if ( contents.length == 1 && contents[0] == groupObj.root )
+ {
+ var divBlock = doc.createElement( 'div' );
+ while ( contents[0].firstChild )
+ divBlock.appendChild( contents[0].removeChild( contents[0].firstChild ) ) ;
+ contents[0].appendChild( divBlock ) ;
+ contents[0] = divBlock ;
+ }
+
+ // Calculate the common parent node of all content blocks.
+ var commonParent = groupObj.contents[0].parentNode ;
+ for ( var i = 0 ; i < contents.length ; i++ )
+ commonParent = FCKDomTools.GetCommonParents( commonParent, contents[i].parentNode ).pop() ;
+
+ // We want to insert things that are in the same tree level only, so calculate the contents again
+ // by expanding the selected blocks to the same tree level.
+ for ( var i = 0 ; i < contents.length ; i++ )
+ {
+ var contentNode = contents[i] ;
+ while ( contentNode.parentNode )
+ {
+ if ( contentNode.parentNode == commonParent )
+ {
+ listContents.push( contentNode ) ;
+ break ;
+ }
+ contentNode = contentNode.parentNode ;
+ }
+ }
+
+ if ( listContents.length < 1 )
+ return ;
+
+ // Insert the list to the DOM tree.
+ var insertAnchor = listContents[listContents.length - 1].nextSibling ;
+ var listNode = doc.createElement( this.TagName ) ;
+ listsCreated.push( listNode ) ;
+ while ( listContents.length )
+ {
+ var contentBlock = listContents.shift() ;
+ var docFrag = doc.createDocumentFragment() ;
+ while ( contentBlock.firstChild )
+ docFrag.appendChild( contentBlock.removeChild( contentBlock.firstChild ) ) ;
+ contentBlock.parentNode.removeChild( contentBlock ) ;
+ var listItem = doc.createElement( 'li' ) ;
+ listItem.appendChild( docFrag ) ;
+ listNode.appendChild( listItem ) ;
+ }
+ commonParent.insertBefore( listNode, insertAnchor ) ;
+ },
+
+ _RemoveList : function( groupObj, markerObj )
+ {
+ // This is very much like the change list type operation.
+ // Except that we're changing the selected items' indent to -1 in the list array.
+ var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;
+ var selectedListItems = [] ;
+ for ( var i = 0 ; i < groupObj.contents.length ; i++ )
+ {
+ var itemNode = groupObj.contents[i] ;
+ itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;
+ if ( ! itemNode || itemNode._FCK_ListItem_Processed )
+ continue ;
+ selectedListItems.push( itemNode ) ;
+ FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;
+ }
+
+ var lastListIndex = null ;
+ for ( var i = 0 ; i < selectedListItems.length ; i++ )
+ {
+ var listIndex = selectedListItems[i]._FCK_ListArray_Index ;
+ listArray[listIndex].indent = -1 ;
+ lastListIndex = listIndex ;
+ }
+
+ // After cutting parts of the list out with indent=-1, we still have to maintain the array list
+ // model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the
+ // list cannot be converted back to a real DOM list.
+ for ( var i = lastListIndex + 1; i < listArray.length ; i++ )
+ {
+ if ( listArray[i].indent > listArray[i-1].indent + 1 )
+ {
+ var indentOffset = listArray[i-1].indent + 1 - listArray[i].indent ;
+ var oldIndent = listArray[i].indent ;
+ while ( listArray[i] && listArray[i].indent >= oldIndent)
+ {
+ listArray[i].indent += indentOffset ;
+ i++ ;
+ }
+ i-- ;
+ }
+ }
+
+ var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
+ // If groupObj.root is the last element in its parent, or its nextSibling is a <br>, then we should
+ // not add a <br> after the final item. So, check for the cases and trim the <br>.
+ if ( groupObj.root.nextSibling == null || groupObj.root.nextSibling.nodeName.IEquals( 'br' ) )
+ {
+ if ( newList.listNode.lastChild.nodeName.IEquals( 'br' ) )
+ newList.listNode.removeChild( newList.listNode.lastChild ) ;
+ }
+ groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;
+ }
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcknamedcommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcknamedcommand.js
new file mode 100644
index 0000000..b0e3f8e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcknamedcommand.js
@@ -0,0 +1,39 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKNamedCommand Class: represents an internal browser command.
+ */
+
+var FCKNamedCommand = function( commandName )
+{
+ this.Name = commandName ;
+}
+
+FCKNamedCommand.prototype.Execute = function()
+{
+ FCK.ExecuteNamedCommand( this.Name ) ;
+}
+
+FCKNamedCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK.GetNamedCommandState( this.Name ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
new file mode 100644
index 0000000..0963490
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
@@ -0,0 +1,40 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPastePlainTextCommand Class: represents the
+ * "Paste as Plain Text" command.
+ */
+
+var FCKPastePlainTextCommand = function()
+{
+ this.Name = 'PasteText' ;
+}
+
+FCKPastePlainTextCommand.prototype.Execute = function()
+{
+ FCK.PasteAsPlainText() ;
+}
+
+FCKPastePlainTextCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK.GetNamedCommandState( 'Paste' ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpastewordcommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpastewordcommand.js
new file mode 100644
index 0000000..b800a8f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpastewordcommand.js
@@ -0,0 +1,40 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPasteWordCommand Class: represents the "Paste from Word" command.
+ */
+
+var FCKPasteWordCommand = function()
+{
+ this.Name = 'PasteWord' ;
+}
+
+FCKPasteWordCommand.prototype.Execute = function()
+{
+ FCK.PasteFromWord() ;
+}
+
+FCKPasteWordCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || FCKConfig.ForcePasteAsPlainText )
+ return FCK_TRISTATE_DISABLED ;
+ else
+ return FCK.GetNamedCommandState( 'Paste' ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckremoveformatcommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckremoveformatcommand.js
new file mode 100644
index 0000000..af37fd2
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckremoveformatcommand.js
@@ -0,0 +1,45 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKRemoveFormatCommand Class: controls the execution of a core style. Core
+ * styles are usually represented as buttons in the toolbar., like Bold and
+ * Italic.
+ */
+
+ var FCKRemoveFormatCommand = function()
+ {
+ this.Name = 'RemoveFormat' ;
+ }
+
+ FCKRemoveFormatCommand.prototype =
+ {
+ Execute : function()
+ {
+ FCKStyles.RemoveAll() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ GetState : function()
+ {
+ return FCK.EditorWindow ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+ }
+ };
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckshowblocks.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckshowblocks.js
new file mode 100644
index 0000000..9c9919b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckshowblocks.js
@@ -0,0 +1,94 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKShowBlockCommand Class: the "Show Blocks" command.
+ */
+
+var FCKShowBlockCommand = function( name, defaultState )
+{
+ this.Name = name ;
+ if ( defaultState != undefined )
+ this._SavedState = defaultState ;
+ else
+ this._SavedState = null ;
+}
+
+FCKShowBlockCommand.prototype.Execute = function()
+{
+ var state = this.GetState() ;
+
+ if ( state == FCK_TRISTATE_DISABLED )
+ return ;
+
+ var body = FCK.EditorDocument.body ;
+
+ if ( state == FCK_TRISTATE_ON )
+ body.className = body.className.replace( /(^| )FCK__ShowBlocks/g, '' ) ;
+ else
+ body.className += ' FCK__ShowBlocks' ;
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ try
+ {
+ FCK.EditorDocument.selection.createRange().select() ;
+ }
+ catch ( e )
+ {}
+ }
+ else
+ {
+ var focus = FCK.EditorWindow.getSelection().focusNode ;
+ if ( focus )
+ {
+ if ( focus.nodeType != 1 )
+ focus = focus.parentNode ;
+ FCKDomTools.ScrollIntoView( focus, false ) ;
+ }
+ }
+
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKShowBlockCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+
+ // On some cases FCK.EditorDocument.body is not yet available
+ if ( !FCK.EditorDocument )
+ return FCK_TRISTATE_OFF ;
+
+ if ( /FCK__ShowBlocks(?:\s|$)/.test( FCK.EditorDocument.body.className ) )
+ return FCK_TRISTATE_ON ;
+
+ return FCK_TRISTATE_OFF ;
+}
+
+FCKShowBlockCommand.prototype.SaveState = function()
+{
+ this._SavedState = this.GetState() ;
+}
+
+FCKShowBlockCommand.prototype.RestoreState = function()
+{
+ if ( this._SavedState != null && this.GetState() != this._SavedState )
+ this.Execute() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
new file mode 100644
index 0000000..4b3266b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
@@ -0,0 +1,49 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Spell Check" command.
+ * (Gecko specific implementation)
+ */
+
+var FCKSpellCheckCommand = function()
+{
+ this.Name = 'SpellCheck' ;
+ this.IsEnabled = ( FCKConfig.SpellChecker != 'ieSpell' ) ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+ switch ( FCKConfig.SpellChecker )
+ {
+ case 'SpellerPages' :
+ FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+ break;
+
+ case 'WSC' :
+ FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'wsc/w.html', 530, 480 ) ;
+ }
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
new file mode 100644
index 0000000..e41bd2e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
@@ -0,0 +1,72 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Spell Check" command.
+ * (IE specific implementation)
+ */
+
+var FCKSpellCheckCommand = function()
+{
+ this.Name = 'SpellCheck' ;
+ this.IsEnabled = true ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+ switch ( FCKConfig.SpellChecker )
+ {
+ case 'ieSpell' :
+ this._RunIeSpell() ;
+ break ;
+
+ case 'SpellerPages' :
+ FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+ break ;
+
+ case 'WSC' :
+ FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'wsc/w.html', 530, 480 ) ;
+ }
+}
+
+FCKSpellCheckCommand.prototype._RunIeSpell = function()
+{
+ try
+ {
+ var oIeSpell = new ActiveXObject( "ieSpell.ieSpellExtension" ) ;
+ oIeSpell.CheckAllLinkedDocuments( FCK.EditorDocument ) ;
+ }
+ catch( e )
+ {
+ if( e.number == -2146827859 )
+ {
+ if ( confirm( FCKLang.IeSpellDownload ) )
+ window.open( FCKConfig.IeSpellDownloadUrl , 'IeSpellDownload' ) ;
+ }
+ else
+ alert( 'Error Loading ieSpell: ' + e.message + ' (' + e.number + ')' ) ;
+ }
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckstylecommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckstylecommand.js
new file mode 100644
index 0000000..dc220f4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckstylecommand.js
@@ -0,0 +1,60 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Style" command.
+ */
+
+var FCKStyleCommand = function()
+{}
+
+FCKStyleCommand.prototype =
+{
+ Name : 'Style',
+
+ Execute : function( styleName, styleComboItem )
+ {
+ FCKUndo.SaveUndoStep() ;
+
+ if ( styleComboItem.Selected )
+ FCK.Styles.RemoveStyle( styleComboItem.Style ) ;
+ else
+ FCK.Styles.ApplyStyle( styleComboItem.Style ) ;
+
+ FCKUndo.SaveUndoStep() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ GetState : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || !FCK.EditorDocument )
+ return FCK_TRISTATE_DISABLED ;
+
+ if ( FCKSelection.GetType() == 'Control' )
+ {
+ var el = FCKSelection.GetSelectedElement() ;
+ if ( !el || !FCKStyles.CheckHasObjectStyle( el.nodeName.toLowerCase() ) )
+ return FCK_TRISTATE_DISABLED ;
+ }
+
+ return FCK_TRISTATE_OFF ;
+ }
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktablecommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktablecommand.js
new file mode 100644
index 0000000..dda446b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktablecommand.js
@@ -0,0 +1,106 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPastePlainTextCommand Class: represents the
+ * "Paste as Plain Text" command.
+ */
+
+var FCKTableCommand = function( command )
+{
+ this.Name = command ;
+}
+
+FCKTableCommand.prototype.Execute = function()
+{
+ FCKUndo.SaveUndoStep() ;
+
+ if ( ! FCKBrowserInfo.IsGecko )
+ {
+ switch ( this.Name )
+ {
+ case 'TableMergeRight' :
+ return FCKTableHandler.MergeRight() ;
+ case 'TableMergeDown' :
+ return FCKTableHandler.MergeDown() ;
+ }
+ }
+
+ switch ( this.Name )
+ {
+ case 'TableInsertRowAfter' :
+ return FCKTableHandler.InsertRow( false ) ;
+ case 'TableInsertRowBefore' :
+ return FCKTableHandler.InsertRow( true ) ;
+ case 'TableDeleteRows' :
+ return FCKTableHandler.DeleteRows() ;
+ case 'TableInsertColumnAfter' :
+ return FCKTableHandler.InsertColumn( false ) ;
+ case 'TableInsertColumnBefore' :
+ return FCKTableHandler.InsertColumn( true ) ;
+ case 'TableDeleteColumns' :
+ return FCKTableHandler.DeleteColumns() ;
+ case 'TableInsertCellAfter' :
+ return FCKTableHandler.InsertCell( null, false ) ;
+ case 'TableInsertCellBefore' :
+ return FCKTableHandler.InsertCell( null, true ) ;
+ case 'TableDeleteCells' :
+ return FCKTableHandler.DeleteCells() ;
+ case 'TableMergeCells' :
+ return FCKTableHandler.MergeCells() ;
+ case 'TableHorizontalSplitCell' :
+ return FCKTableHandler.HorizontalSplitCell() ;
+ case 'TableVerticalSplitCell' :
+ return FCKTableHandler.VerticalSplitCell() ;
+ case 'TableDelete' :
+ return FCKTableHandler.DeleteTable() ;
+ default :
+ return alert( FCKLang.UnknownCommand.replace( /%1/g, this.Name ) ) ;
+ }
+}
+
+FCKTableCommand.prototype.GetState = function()
+{
+ if ( FCK.EditorDocument != null && FCKSelection.HasAncestorNode( 'TABLE' ) )
+ {
+ switch ( this.Name )
+ {
+ case 'TableHorizontalSplitCell' :
+ case 'TableVerticalSplitCell' :
+ if ( FCKTableHandler.GetSelectedCells().length == 1 )
+ return FCK_TRISTATE_OFF ;
+ else
+ return FCK_TRISTATE_DISABLED ;
+ case 'TableMergeCells' :
+ if ( FCKTableHandler.CheckIsSelectionRectangular()
+ && FCKTableHandler.GetSelectedCells().length > 1 )
+ return FCK_TRISTATE_OFF ;
+ else
+ return FCK_TRISTATE_DISABLED ;
+ case 'TableMergeRight' :
+ return FCKTableHandler.GetMergeRightTarget() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+ case 'TableMergeDown' :
+ return FCKTableHandler.GetMergeDownTarget() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+ default :
+ return FCK_TRISTATE_OFF ;
+ }
+ }
+ else
+ return FCK_TRISTATE_DISABLED;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktextcolorcommand.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktextcolorcommand.js
new file mode 100644
index 0000000..dccd794
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktextcolorcommand.js
@@ -0,0 +1,201 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKTextColorCommand Class: represents the text color comand. It shows the
+ * color selection panel.
+ */
+
+// FCKTextColorCommand Constructor
+// type: can be 'ForeColor' or 'BackColor'.
+var FCKTextColorCommand = function( type )
+{
+ this.Name = type == 'ForeColor' ? 'TextColor' : 'BGColor' ;
+ this.Type = type ;
+
+ var oWindow ;
+
+ if ( FCKBrowserInfo.IsIE )
+ oWindow = window ;
+ else if ( FCK.ToolbarSet._IFrame )
+ oWindow = FCKTools.GetElementWindow( FCK.ToolbarSet._IFrame ) ;
+ else
+ oWindow = window.parent ;
+
+ this._Panel = new FCKPanel( oWindow ) ;
+ this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+ this._Panel.MainNode.className = 'FCK_Panel' ;
+ this._CreatePanelBody( this._Panel.Document, this._Panel.MainNode ) ;
+ FCK.ToolbarSet.ToolbarItems.GetItem( this.Name ).RegisterPanel( this._Panel ) ;
+
+ FCKTools.DisableSelection( this._Panel.Document.body ) ;
+}
+
+FCKTextColorCommand.prototype.Execute = function( panelX, panelY, relElement )
+{
+ // Show the Color Panel at the desired position.
+ this._Panel.Show( panelX, panelY, relElement ) ;
+}
+
+FCKTextColorCommand.prototype.SetColor = function( color )
+{
+ FCKUndo.SaveUndoStep() ;
+
+ var style = FCKStyles.GetStyle( '_FCK_' +
+ ( this.Type == 'ForeColor' ? 'Color' : 'BackColor' ) ) ;
+
+ if ( !color || color.length == 0 )
+ FCK.Styles.RemoveStyle( style ) ;
+ else
+ {
+ style.SetVariable( 'Color', color ) ;
+ FCKStyles.ApplyStyle( style ) ;
+ }
+
+ FCKUndo.SaveUndoStep() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKTextColorCommand.prototype.GetState = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return FCK_TRISTATE_DISABLED ;
+ return FCK_TRISTATE_OFF ;
+}
+
+function FCKTextColorCommand_OnMouseOver()
+{
+ this.className = 'ColorSelected' ;
+}
+
+function FCKTextColorCommand_OnMouseOut()
+{
+ this.className = 'ColorDeselected' ;
+}
+
+function FCKTextColorCommand_OnClick( ev, command, color )
+{
+ this.className = 'ColorDeselected' ;
+ command.SetColor( color ) ;
+ command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_AutoOnClick( ev, command )
+{
+ this.className = 'ColorDeselected' ;
+ command.SetColor( '' ) ;
+ command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_MoreOnClick( ev, command )
+{
+ this.className = 'ColorDeselected' ;
+ command._Panel.Hide() ;
+ FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320,
+ FCKTools.Bind( command, command.SetColor ) ) ;
+}
+
+FCKTextColorCommand.prototype._CreatePanelBody = function( targetDocument, targetDiv )
+{
+ function CreateSelectionDiv()
+ {
+ var oDiv = targetDocument.createElement( "DIV" ) ;
+ oDiv.className = 'ColorDeselected' ;
+ FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKTextColorCommand_OnMouseOver ) ;
+ FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKTextColorCommand_OnMouseOut ) ;
+
+ return oDiv ;
+ }
+
+ // Create the Table that will hold all colors.
+ var oTable = targetDiv.appendChild( targetDocument.createElement( "TABLE" ) ) ;
+ oTable.className = 'ForceBaseFont' ; // Firefox 1.5 Bug.
+ oTable.style.tableLayout = 'fixed' ;
+ oTable.cellPadding = 0 ;
+ oTable.cellSpacing = 0 ;
+ oTable.border = 0 ;
+ oTable.width = 150 ;
+
+ var oCell = oTable.insertRow(-1).insertCell(-1) ;
+ oCell.colSpan = 8 ;
+
+ // Create the Button for the "Automatic" color selection.
+ var oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+ oDiv.innerHTML =
+ '<table cellspacing="0" cellpadding="0" width="100%" border="0">\
+ <tr>\
+ <td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\
+ <td nowrap width="100%" align="center">' + FCKLang.ColorAutomatic + '</td>\
+ </tr>\
+ </table>' ;
+
+ FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_AutoOnClick, this ) ;
+
+ // Dirty hack for Opera, Safari and Firefox 3.
+ if ( !FCKBrowserInfo.IsIE )
+ oDiv.style.width = '96%' ;
+
+ // Create an array of colors based on the configuration file.
+ var aColors = FCKConfig.FontColors.toString().split(',') ;
+
+ // Create the colors table based on the array.
+ var iCounter = 0 ;
+ while ( iCounter < aColors.length )
+ {
+ var oRow = oTable.insertRow(-1) ;
+
+ for ( var i = 0 ; i < 8 ; i++, iCounter++ )
+ {
+ // The div will be created even if no more colors are available.
+ // Extra divs will be hidden later in the code. (#1597)
+ if ( iCounter < aColors.length )
+ {
+ var colorParts = aColors[iCounter].split('/') ;
+ var colorValue = '#' + colorParts[0] ;
+ var colorName = colorParts[1] || colorValue ;
+ }
+
+ oDiv = oRow.insertCell(-1).appendChild( CreateSelectionDiv() ) ;
+ oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: ' + colorValue + '"></div></div>' ;
+
+ if ( iCounter >= aColors.length )
+ oDiv.style.visibility = 'hidden' ;
+ else
+ FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_OnClick, [ this, colorName ] ) ;
+ }
+ }
+
+ // Create the Row and the Cell for the "More Colors..." button.
+ if ( FCKConfig.EnableMoreFontColors )
+ {
+ oCell = oTable.insertRow(-1).insertCell(-1) ;
+ oCell.colSpan = 8 ;
+
+ oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+ oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">' + FCKLang.ColorMoreColors + '</td></tr></table>' ;
+
+ FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_MoreOnClick, this ) ;
+ }
+
+ // Dirty hack for Opera, Safari and Firefox 3.
+ if ( !FCKBrowserInfo.IsIE )
+ oDiv.style.width = '96%' ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckconstants.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckconstants.js
new file mode 100644
index 0000000..2c42295
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckconstants.js
@@ -0,0 +1,56 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines some constants used by the editor. These constants are also
+ * globally available in the page where the editor is placed.
+ */
+
+// Editor Instance Status.
+var FCK_STATUS_NOTLOADED = window.parent.FCK_STATUS_NOTLOADED = 0 ;
+var FCK_STATUS_ACTIVE = window.parent.FCK_STATUS_ACTIVE = 1 ;
+var FCK_STATUS_COMPLETE = window.parent.FCK_STATUS_COMPLETE = 2 ;
+
+// Tristate Operations.
+var FCK_TRISTATE_OFF = window.parent.FCK_TRISTATE_OFF = 0 ;
+var FCK_TRISTATE_ON = window.parent.FCK_TRISTATE_ON = 1 ;
+var FCK_TRISTATE_DISABLED = window.parent.FCK_TRISTATE_DISABLED = -1 ;
+
+// For unknown values.
+var FCK_UNKNOWN = window.parent.FCK_UNKNOWN = -9 ;
+
+// Toolbar Items Style.
+var FCK_TOOLBARITEM_ONLYICON = window.parent.FCK_TOOLBARITEM_ONLYICON = 0 ;
+var FCK_TOOLBARITEM_ONLYTEXT = window.parent.FCK_TOOLBARITEM_ONLYTEXT = 1 ;
+var FCK_TOOLBARITEM_ICONTEXT = window.parent.FCK_TOOLBARITEM_ICONTEXT = 2 ;
+
+// Edit Mode
+var FCK_EDITMODE_WYSIWYG = window.parent.FCK_EDITMODE_WYSIWYG = 0 ;
+var FCK_EDITMODE_SOURCE = window.parent.FCK_EDITMODE_SOURCE = 1 ;
+
+var FCK_IMAGES_PATH = 'images/' ; // Check usage.
+var FCK_SPACER_PATH = 'images/spacer.gif' ;
+
+var CTRL = 1000 ;
+var SHIFT = 2000 ;
+var ALT = 4000 ;
+
+var FCK_STYLE_BLOCK = 0 ;
+var FCK_STYLE_INLINE = 1 ;
+var FCK_STYLE_OBJECT = 2 ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckeditorapi.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckeditorapi.js
new file mode 100644
index 0000000..2d8f0bd
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckeditorapi.js
@@ -0,0 +1,179 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Create the FCKeditorAPI object that is available as a global object in
+ * the page where the editor is placed in.
+ */
+
+var FCKeditorAPI ;
+
+function InitializeAPI()
+{
+ var oParentWindow = window.parent ;
+
+ if ( !( FCKeditorAPI = oParentWindow.FCKeditorAPI ) )
+ {
+ // Make the FCKeditorAPI object available in the parent window. Use
+ // eval so this core runs in the parent's scope and so it will still be
+ // available if the editor instance is removed ("Can't execute code
+ // from a freed script" error).
+
+ // Note: we check the existence of oEditor.GetParentForm because some external
+ // code (like JSON) can extend the Object prototype and we get then extra oEditor
+ // objects that aren't really FCKeditor instances.
+ var sScript =
+ 'window.FCKeditorAPI = {' +
+ 'Version : "2.6.4",' +
+ 'VersionBuild : "21629",' +
+ 'Instances : window.FCKeditorAPI && window.FCKeditorAPI.Instances || {},' +
+
+ 'GetInstance : function( name )' +
+ '{' +
+ 'return this.Instances[ name ];' +
+ '},' +
+
+ '_FormSubmit : function()' +
+ '{' +
+ 'for ( var name in FCKeditorAPI.Instances )' +
+ '{' +
+ 'var oEditor = FCKeditorAPI.Instances[ name ] ;' +
+ 'if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )' +
+ 'oEditor.UpdateLinkedField() ;' +
+ '}' +
+ 'this._FCKOriginalSubmit() ;' +
+ '},' +
+
+ '_FunctionQueue : window.FCKeditorAPI && window.FCKeditorAPI._FunctionQueue || {' +
+ 'Functions : new Array(),' +
+ 'IsRunning : false,' +
+
+ 'Add : function( f )' +
+ '{' +
+ 'this.Functions.push( f );' +
+ 'if ( !this.IsRunning )' +
+ 'this.StartNext();' +
+ '},' +
+
+ 'StartNext : function()' +
+ '{' +
+ 'var aQueue = this.Functions ;' +
+ 'if ( aQueue.length > 0 )' +
+ '{' +
+ 'this.IsRunning = true;' +
+ 'aQueue[0].call();' +
+ '}' +
+ 'else ' +
+ 'this.IsRunning = false;' +
+ '},' +
+
+ 'Remove : function( f )' +
+ '{' +
+ 'var aQueue = this.Functions;' +
+ 'var i = 0, fFunc;' +
+ 'while( (fFunc = aQueue[ i ]) )' +
+ '{' +
+ 'if ( fFunc == f )' +
+ 'aQueue.splice( i,1 );' +
+ 'i++ ;' +
+ '}' +
+ 'this.StartNext();' +
+ '}' +
+ '}' +
+ '}' ;
+
+ // In IE, the "eval" function is not always available (it works with
+ // the JavaScript samples, but not with the ASP ones, for example).
+ // So, let's use the execScript instead.
+ if ( oParentWindow.execScript )
+ oParentWindow.execScript( sScript, 'JavaScript' ) ;
+ else
+ {
+ if ( FCKBrowserInfo.IsGecko10 )
+ {
+ // FF 1.0.4 gives an error with the request bellow. The
+ // following seams to work well.
+ eval.call( oParentWindow, sScript ) ;
+ }
+ else if( FCKBrowserInfo.IsAIR )
+ {
+ FCKAdobeAIR.FCKeditorAPI_Evaluate( oParentWindow, sScript ) ;
+ }
+ else if ( FCKBrowserInfo.IsSafari )
+ {
+ // oParentWindow.eval in Safari executes in the calling window
+ // environment, instead of the parent one. The following should
+ // make it work.
+ var oParentDocument = oParentWindow.document ;
+ var eScript = oParentDocument.createElement('script') ;
+ eScript.appendChild( oParentDocument.createTextNode( sScript ) ) ;
+ oParentDocument.documentElement.appendChild( eScript ) ;
+ }
+ else
+ oParentWindow.eval( sScript ) ;
+ }
+
+ FCKeditorAPI = oParentWindow.FCKeditorAPI ;
+
+ // The __Instances properly has been changed to the public Instances,
+ // but we should still have the "deprecated" version of it.
+ FCKeditorAPI.__Instances = FCKeditorAPI.Instances ;
+ }
+
+ // Add the current instance to the FCKeditorAPI's instances collection.
+ FCKeditorAPI.Instances[ FCK.Name ] = FCK ;
+}
+
+// Attach to the form onsubmit event and to the form.submit().
+function _AttachFormSubmitToAPI()
+{
+ // Get the linked field form.
+ var oForm = FCK.GetParentForm() ;
+
+ if ( oForm )
+ {
+ // Attach to the onsubmit event.
+ FCKTools.AddEventListener( oForm, 'submit', FCK.UpdateLinkedField ) ;
+
+ // IE sees oForm.submit function as an 'object'.
+ if ( !oForm._FCKOriginalSubmit && ( typeof( oForm.submit ) == 'function' || ( !oForm.submit.tagName && !oForm.submit.length ) ) )
+ {
+ // Save the original submit.
+ oForm._FCKOriginalSubmit = oForm.submit ;
+
+ // Create our replacement for the submit.
+ oForm.submit = FCKeditorAPI._FormSubmit ;
+ }
+ }
+}
+
+function FCKeditorAPI_Cleanup()
+{
+ if ( window.FCKConfig && FCKConfig.MsWebBrowserControlCompat
+ && !window.FCKUnloadFlag )
+ return ;
+ delete FCKeditorAPI.Instances[ FCK.Name ] ;
+}
+function FCKeditorAPI_ConfirmCleanup()
+{
+ if ( window.FCKConfig && FCKConfig.MsWebBrowserControlCompat )
+ window.FCKUnloadFlag = true ;
+}
+FCKTools.AddEventListener( window, 'unload', FCKeditorAPI_Cleanup ) ;
+FCKTools.AddEventListener( window, 'beforeunload', FCKeditorAPI_ConfirmCleanup) ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckjscoreextensions.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckjscoreextensions.js
new file mode 100644
index 0000000..c9d5a13
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckjscoreextensions.js
@@ -0,0 +1,159 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Extensions to the JavaScript Core.
+ *
+ * All custom extensions functions are PascalCased to differ from the standard
+ * camelCased ones.
+ */
+
+String.prototype.Contains = function( textToCheck )
+{
+ return ( this.indexOf( textToCheck ) > -1 ) ;
+}
+
+String.prototype.Equals = function()
+{
+ var aArgs = arguments ;
+
+ // The arguments could also be a single array.
+ if ( aArgs.length == 1 && aArgs[0].pop )
+ aArgs = aArgs[0] ;
+
+ for ( var i = 0 ; i < aArgs.length ; i++ )
+ {
+ if ( this == aArgs[i] )
+ return true ;
+ }
+ return false ;
+}
+
+String.prototype.IEquals = function()
+{
+ var thisUpper = this.toUpperCase() ;
+
+ var aArgs = arguments ;
+
+ // The arguments could also be a single array.
+ if ( aArgs.length == 1 && aArgs[0].pop )
+ aArgs = aArgs[0] ;
+
+ for ( var i = 0 ; i < aArgs.length ; i++ )
+ {
+ if ( thisUpper == aArgs[i].toUpperCase() )
+ return true ;
+ }
+ return false ;
+}
+
+String.prototype.ReplaceAll = function( searchArray, replaceArray )
+{
+ var replaced = this ;
+
+ for ( var i = 0 ; i < searchArray.length ; i++ )
+ {
+ replaced = replaced.replace( searchArray[i], replaceArray[i] ) ;
+ }
+
+ return replaced ;
+}
+
+String.prototype.StartsWith = function( value )
+{
+ return ( this.substr( 0, value.length ) == value ) ;
+}
+
+// Extends the String object, creating a "EndsWith" method on it.
+String.prototype.EndsWith = function( value, ignoreCase )
+{
+ var L1 = this.length ;
+ var L2 = value.length ;
+
+ if ( L2 > L1 )
+ return false ;
+
+ if ( ignoreCase )
+ {
+ var oRegex = new RegExp( value + '$' , 'i' ) ;
+ return oRegex.test( this ) ;
+ }
+ else
+ return ( L2 == 0 || this.substr( L1 - L2, L2 ) == value ) ;
+}
+
+String.prototype.Remove = function( start, length )
+{
+ var s = '' ;
+
+ if ( start > 0 )
+ s = this.substring( 0, start ) ;
+
+ if ( start + length < this.length )
+ s += this.substring( start + length , this.length ) ;
+
+ return s ;
+}
+
+String.prototype.Trim = function()
+{
+ // We are not using \s because we don't want "non-breaking spaces to be caught".
+ return this.replace( /(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '' ) ;
+}
+
+String.prototype.LTrim = function()
+{
+ // We are not using \s because we don't want "non-breaking spaces to be caught".
+ return this.replace( /^[ \t\n\r]*/g, '' ) ;
+}
+
+String.prototype.RTrim = function()
+{
+ // We are not using \s because we don't want "non-breaking spaces to be caught".
+ return this.replace( /[ \t\n\r]*$/g, '' ) ;
+}
+
+String.prototype.ReplaceNewLineChars = function( replacement )
+{
+ return this.replace( /\n/g, replacement ) ;
+}
+
+String.prototype.Replace = function( regExp, replacement, thisObj )
+{
+ if ( typeof replacement == 'function' )
+ {
+ return this.replace( regExp,
+ function()
+ {
+ return replacement.apply( thisObj || this, arguments ) ;
+ } ) ;
+ }
+ else
+ return this.replace( regExp, replacement ) ;
+}
+
+Array.prototype.IndexOf = function( value )
+{
+ for ( var i = 0 ; i < this.length ; i++ )
+ {
+ if ( this[i] == value )
+ return i ;
+ }
+ return -1 ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckscriptloader.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckscriptloader.js
new file mode 100644
index 0000000..a5c0687
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckscriptloader.js
@@ -0,0 +1,122 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a utility object which can be used to load specific components of
+ * FCKeditor, including all dependencies.
+ */
+
+var FCK_GENERIC = 1 ;
+var FCK_GENERIC_SPECIFIC = 2 ;
+var FCK_SPECIFIC = 3 ;
+
+var FCKScriptLoader = new Object() ;
+FCKScriptLoader.FCKeditorPath = '/fckeditor/' ;
+
+FCKScriptLoader._Scripts = new Object() ;
+FCKScriptLoader._LoadedScripts = new Object() ;
+
+FCKScriptLoader._IsIE = (/msie/).test( navigator.userAgent.toLowerCase() ) ;
+
+FCKScriptLoader.Load = function( scriptName )
+{
+ // Check if the script has already been loaded.
+ if ( scriptName in FCKScriptLoader._LoadedScripts )
+ return ;
+
+ FCKScriptLoader._LoadedScripts[ scriptName ] = true ;
+
+ var oScriptInfo = this._Scripts[ scriptName ] ;
+
+ if ( !oScriptInfo )
+ {
+ alert( 'FCKScriptLoader: The script "' + scriptName + '" could not be loaded' ) ;
+ return ;
+ }
+
+ for ( var i = 0 ; i < oScriptInfo.Dependency.length ; i++ )
+ {
+ this.Load( oScriptInfo.Dependency[i] ) ;
+ }
+
+ var sBaseScriptName = oScriptInfo.BasePath + scriptName.toLowerCase() ;
+
+ if ( oScriptInfo.Compatibility == FCK_GENERIC || oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC )
+ this._LoadScript( sBaseScriptName + '.js' ) ;
+
+ if ( oScriptInfo.Compatibility == FCK_SPECIFIC || oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC )
+ {
+ if ( this._IsIE )
+ this._LoadScript( sBaseScriptName + '_ie.js' ) ;
+ else
+ this._LoadScript( sBaseScriptName + '_gecko.js' ) ;
+ }
+}
+
+FCKScriptLoader._LoadScript = function( scriptPathFromSource )
+{
+ document.write( '<script type="text/javascript" src="' + this.FCKeditorPath + 'editor/_source/' + scriptPathFromSource + '"><\/script>' ) ;
+}
+
+FCKScriptLoader.AddScript = function( scriptName, scriptBasePath, dependency, compatibility )
+{
+ this._Scripts[ scriptName ] =
+ {
+ BasePath : scriptBasePath || '',
+ Dependency : dependency || [],
+ Compatibility : compatibility || FCK_GENERIC
+ } ;
+}
+
+/*
+ * ####################################
+ * ### Scripts Definition List
+ */
+
+FCKScriptLoader.AddScript( 'FCKConstants' ) ;
+FCKScriptLoader.AddScript( 'FCKJSCoreExtensions' ) ;
+
+FCKScriptLoader.AddScript( 'FCK_Xhtml10Transitional', '../dtd/' ) ;
+
+FCKScriptLoader.AddScript( 'FCKDataProcessor' , 'classes/' , ['FCKConfig','FCKBrowserInfo','FCKRegexLib','FCKXHtml'] ) ;
+FCKScriptLoader.AddScript( 'FCKDocumentFragment', 'classes/' , ['FCKDomTools'], FCK_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKDomRange' , 'classes/' , ['FCKBrowserInfo','FCKJSCoreExtensions','FCKW3CRange','FCKElementPath','FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKDomRangeIterator', 'classes/' , ['FCKDomRange','FCKListsLib'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKElementPath' , 'classes/' , ['FCKListsLib'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKEnterKey' , 'classes/' , ['FCKDomRange','FCKDomTools','FCKTools','FCKKeystrokeHandler','FCKListHandler'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKPanel' , 'classes/' , ['FCKBrowserInfo','FCKConfig','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKImagePreloader' , 'classes/' ) ;
+FCKScriptLoader.AddScript( 'FCKKeystrokeHandler', 'classes/' , ['FCKConstants','FCKBrowserInfo','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKStyle' , 'classes/' , ['FCKConstants','FCKDomRange','FCKDomRangeIterator','FCKDomTools','FCKListsLib','FCK_Xhtml10Transitional'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKW3CRange' , 'classes/' , ['FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC ) ;
+
+FCKScriptLoader.AddScript( 'FCKBrowserInfo' , 'internals/' , ['FCKJSCoreExtensions'] ) ;
+FCKScriptLoader.AddScript( 'FCKCodeFormatter' , 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKConfig' , 'internals/' , ['FCKBrowserInfo','FCKConstants'] ) ;
+FCKScriptLoader.AddScript( 'FCKDebug' , 'internals/' , ['FCKConfig'] ) ;
+FCKScriptLoader.AddScript( 'FCKDomTools' , 'internals/' , ['FCKJSCoreExtensions','FCKBrowserInfo','FCKTools','FCKDomRange'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKListsLib' , 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKListHandler' , 'internals/' , ['FCKConfig', 'FCKDocumentFragment', 'FCKJSCoreExtensions','FCKDomTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKRegexLib' , 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKStyles' , 'internals/' , ['FCKConfig', 'FCKDocumentFragment', 'FCKDomRange','FCKDomTools','FCKElementPath','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKTools' , 'internals/' , ['FCKJSCoreExtensions','FCKBrowserInfo'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKXHtml' , 'internals/' , ['FCKBrowserInfo','FCKCodeFormatter','FCKConfig','FCKDomTools','FCKListsLib','FCKRegexLib','FCKTools','FCKXHtmlEntities'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKXHtmlEntities' , 'internals/' , ['FCKConfig'] ) ;
+
+// ####################################
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck.js
new file mode 100644
index 0000000..e5fd3ab
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck.js
@@ -0,0 +1,1256 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main object
+ * that represents an editor instance.
+ */
+
+// FCK represents the active editor instance.
+var FCK =
+{
+ Name : FCKURLParams[ 'InstanceName' ],
+ Status : FCK_STATUS_NOTLOADED,
+ EditMode : FCK_EDITMODE_WYSIWYG,
+ Toolbar : null,
+ HasFocus : false,
+ DataProcessor : new FCKDataProcessor(),
+
+ GetInstanceObject : (function()
+ {
+ var w = window ;
+ return function( name )
+ {
+ return w[name] ;
+ }
+ })(),
+
+ AttachToOnSelectionChange : function( functionPointer )
+ {
+ this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
+ },
+
+ GetLinkedFieldValue : function()
+ {
+ return this.LinkedField.value ;
+ },
+
+ GetParentForm : function()
+ {
+ return this.LinkedField.form ;
+ } ,
+
+ // # START : IsDirty implementation
+
+ StartupValue : '',
+
+ IsDirty : function()
+ {
+ if ( this.EditMode == FCK_EDITMODE_SOURCE )
+ return ( this.StartupValue != this.EditingArea.Textarea.value ) ;
+ else
+ {
+ // It can happen switching between design and source mode in Gecko
+ if ( ! this.EditorDocument )
+ return false ;
+
+ return ( this.StartupValue != this.EditorDocument.body.innerHTML ) ;
+ }
+ },
+
+ ResetIsDirty : function()
+ {
+ if ( this.EditMode == FCK_EDITMODE_SOURCE )
+ this.StartupValue = this.EditingArea.Textarea.value ;
+ else if ( this.EditorDocument.body )
+ this.StartupValue = this.EditorDocument.body.innerHTML ;
+ },
+
+ // # END : IsDirty implementation
+
+ StartEditor : function()
+ {
+ this.TempBaseTag = FCKConfig.BaseHref.length > 0 ? '<base href="' + FCKConfig.BaseHref + '" _fcktemp="true"></base>' : '' ;
+
+ // Setup the keystroke handler.
+ var oKeystrokeHandler = FCK.KeystrokeHandler = new FCKKeystrokeHandler() ;
+ oKeystrokeHandler.OnKeystroke = _FCK_KeystrokeHandler_OnKeystroke ;
+
+ // Set the config keystrokes.
+ oKeystrokeHandler.SetKeystrokes( FCKConfig.Keystrokes ) ;
+
+ // In IE7, if the editor tries to access the clipboard by code, a dialog is
+ // shown to the user asking if the application is allowed to access or not.
+ // Due to the IE implementation of it, the KeystrokeHandler will not work
+ //well in this case, so we must leave the pasting keys to have their default behavior.
+ if ( FCKBrowserInfo.IsIE7 )
+ {
+ if ( ( CTRL + 86 /*V*/ ) in oKeystrokeHandler.Keystrokes )
+ oKeystrokeHandler.SetKeystrokes( [ CTRL + 86, true ] ) ;
+
+ if ( ( SHIFT + 45 /*INS*/ ) in oKeystrokeHandler.Keystrokes )
+ oKeystrokeHandler.SetKeystrokes( [ SHIFT + 45, true ] ) ;
+ }
+
+ // Retain default behavior for Ctrl-Backspace. (Bug #362)
+ oKeystrokeHandler.SetKeystrokes( [ CTRL + 8, true ] ) ;
+
+ this.EditingArea = new FCKEditingArea( document.getElementById( 'xEditingArea' ) ) ;
+ this.EditingArea.FFSpellChecker = FCKConfig.FirefoxSpellChecker ;
+
+ // Set the editor's startup contents.
+ this.SetData( this.GetLinkedFieldValue(), true ) ;
+
+ // Tab key handling for source mode.
+ FCKTools.AddEventListener( document, "keydown", this._TabKeyHandler ) ;
+
+ // Add selection change listeners. They must be attached only once.
+ this.AttachToOnSelectionChange( _FCK_PaddingNodeListener ) ;
+ if ( FCKBrowserInfo.IsGecko )
+ this.AttachToOnSelectionChange( this._ExecCheckEmptyBlock ) ;
+
+ },
+
+ Focus : function()
+ {
+ FCK.EditingArea.Focus() ;
+ },
+
+ SetStatus : function( newStatus )
+ {
+ this.Status = newStatus ;
+
+ if ( newStatus == FCK_STATUS_ACTIVE )
+ {
+ FCKFocusManager.AddWindow( window, true ) ;
+
+ if ( FCKBrowserInfo.IsIE )
+ FCKFocusManager.AddWindow( window.frameElement, true ) ;
+
+ // Force the focus in the editor.
+ if ( FCKConfig.StartupFocus )
+ FCK.Focus() ;
+ }
+
+ this.Events.FireEvent( 'OnStatusChange', newStatus ) ;
+
+ },
+
+ // Fixes the body by moving all inline and text nodes to appropriate block
+ // elements.
+ FixBody : function()
+ {
+ var sBlockTag = FCKConfig.EnterMode ;
+
+ // In 'br' mode, no fix must be done.
+ if ( sBlockTag != 'p' && sBlockTag != 'div' )
+ return ;
+
+ var oDocument = this.EditorDocument ;
+
+ if ( !oDocument )
+ return ;
+
+ var oBody = oDocument.body ;
+
+ if ( !oBody )
+ return ;
+
+ FCKDomTools.TrimNode( oBody ) ;
+
+ var oNode = oBody.firstChild ;
+ var oNewBlock ;
+
+ while ( oNode )
+ {
+ var bMoveNode = false ;
+
+ switch ( oNode.nodeType )
+ {
+ // Element Node.
+ case 1 :
+ var nodeName = oNode.nodeName.toLowerCase() ;
+ if ( !FCKListsLib.BlockElements[ nodeName ] &&
+ nodeName != 'li' &&
+ !oNode.getAttribute('_fckfakelement') &&
+ oNode.getAttribute('_moz_dirty') == null )
+ bMoveNode = true ;
+ break ;
+
+ // Text Node.
+ case 3 :
+ // Ignore space only or empty text.
+ if ( oNewBlock || oNode.nodeValue.Trim().length > 0 )
+ bMoveNode = true ;
+ break;
+
+ // Comment Node
+ case 8 :
+ if ( oNewBlock )
+ bMoveNode = true ;
+ break;
+ }
+
+ if ( bMoveNode )
+ {
+ var oParent = oNode.parentNode ;
+
+ if ( !oNewBlock )
+ oNewBlock = oParent.insertBefore( oDocument.createElement( sBlockTag ), oNode ) ;
+
+ oNewBlock.appendChild( oParent.removeChild( oNode ) ) ;
+
+ oNode = oNewBlock.nextSibling ;
+ }
+ else
+ {
+ if ( oNewBlock )
+ {
+ FCKDomTools.TrimNode( oNewBlock ) ;
+ oNewBlock = null ;
+ }
+ oNode = oNode.nextSibling ;
+ }
+ }
+
+ if ( oNewBlock )
+ FCKDomTools.TrimNode( oNewBlock ) ;
+ },
+
+ GetData : function( format )
+ {
+ // We assume that if the user is in source editing, the editor value must
+ // represent the exact contents of the source, as the user wanted it to be.
+ if ( FCK.EditMode == FCK_EDITMODE_SOURCE )
+ return FCK.EditingArea.Textarea.value ;
+
+ this.FixBody() ;
+
+ var oDoc = FCK.EditorDocument ;
+ if ( !oDoc )
+ return null ;
+
+ var isFullPage = FCKConfig.FullPage ;
+
+ // Call the Data Processor to generate the output data.
+ var data = FCK.DataProcessor.ConvertToDataFormat(
+ isFullPage ? oDoc.documentElement : oDoc.body,
+ !isFullPage,
+ FCKConfig.IgnoreEmptyParagraphValue,
+ format ) ;
+
+ // Restore protected attributes.
+ data = FCK.ProtectEventsRestore( data ) ;
+
+ if ( FCKBrowserInfo.IsIE )
+ data = data.replace( FCKRegexLib.ToReplace, '$1' ) ;
+
+ if ( isFullPage )
+ {
+ if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+ data = FCK.DocTypeDeclaration + '\n' + data ;
+
+ if ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 )
+ data = FCK.XmlDeclaration + '\n' + data ;
+ }
+
+ return FCKConfig.ProtectedSource.Revert( data ) ;
+ },
+
+ UpdateLinkedField : function()
+ {
+ var value = FCK.GetXHTML( FCKConfig.FormatOutput ) ;
+
+ if ( FCKConfig.HtmlEncodeOutput )
+ value = FCKTools.HTMLEncode( value ) ;
+
+ FCK.LinkedField.value = value ;
+ FCK.Events.FireEvent( 'OnAfterLinkedFieldUpdate' ) ;
+ },
+
+ RegisteredDoubleClickHandlers : new Object(),
+
+ OnDoubleClick : function( element )
+ {
+ var oCalls = FCK.RegisteredDoubleClickHandlers[ element.tagName.toUpperCase() ] ;
+
+ if ( oCalls )
+ {
+ for ( var i = 0 ; i < oCalls.length ; i++ )
+ oCalls[ i ]( element ) ;
+ }
+
+ // Generic handler for any element
+ oCalls = FCK.RegisteredDoubleClickHandlers[ '*' ] ;
+
+ if ( oCalls )
+ {
+ for ( var i = 0 ; i < oCalls.length ; i++ )
+ oCalls[ i ]( element ) ;
+ }
+
+ },
+
+ // Register objects that can handle double click operations.
+ RegisterDoubleClickHandler : function( handlerFunction, tag )
+ {
+ var nodeName = tag || '*' ;
+ nodeName = nodeName.toUpperCase() ;
+
+ var aTargets ;
+
+ if ( !( aTargets = FCK.RegisteredDoubleClickHandlers[ nodeName ] ) )
+ FCK.RegisteredDoubleClickHandlers[ nodeName ] = [ handlerFunction ] ;
+ else
+ {
+ // Check that the event handler isn't already registered with the same listener
+ // It doesn't detect function pointers belonging to an object (at least in Gecko)
+ if ( aTargets.IndexOf( handlerFunction ) == -1 )
+ aTargets.push( handlerFunction ) ;
+ }
+
+ },
+
+ OnAfterSetHTML : function()
+ {
+ FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+ FCKUndo.SaveUndoStep() ;
+
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;
+ },
+
+ // Saves URLs on links and images on special attributes, so they don't change when
+ // moving around.
+ ProtectUrls : function( html )
+ {
+ // <A> href
+ html = html.replace( FCKRegexLib.ProtectUrlsA , '$& _fcksavedurl=$1' ) ;
+
+ // <IMG> src
+ html = html.replace( FCKRegexLib.ProtectUrlsImg , '$& _fcksavedurl=$1' ) ;
+
+ // <AREA> href
+ html = html.replace( FCKRegexLib.ProtectUrlsArea , '$& _fcksavedurl=$1' ) ;
+
+ return html ;
+ },
+
+ // Saves event attributes (like onclick) so they don't get executed while
+ // editing.
+ ProtectEvents : function( html )
+ {
+ return html.replace( FCKRegexLib.TagsWithEvent, _FCK_ProtectEvents_ReplaceTags ) ;
+ },
+
+ ProtectEventsRestore : function( html )
+ {
+ return html.replace( FCKRegexLib.ProtectedEvents, _FCK_ProtectEvents_RestoreEvents ) ;
+ },
+
+ ProtectTags : function( html )
+ {
+ var sTags = FCKConfig.ProtectedTags ;
+
+ // IE doesn't support <abbr> and it breaks it. Let's protect it.
+ if ( FCKBrowserInfo.IsIE )
+ sTags += sTags.length > 0 ? '|ABBR|XML|EMBED|OBJECT' : 'ABBR|XML|EMBED|OBJECT' ;
+
+ var oRegex ;
+ if ( sTags.length > 0 )
+ {
+ oRegex = new RegExp( '<(' + sTags + ')(?!\w|:)', 'gi' ) ;
+ html = html.replace( oRegex, '<FCK:$1' ) ;
+
+ oRegex = new RegExp( '<\/(' + sTags + ')>', 'gi' ) ;
+ html = html.replace( oRegex, '<\/FCK:$1>' ) ;
+ }
+
+ // Protect some empty elements. We must do it separately because the
+ // original tag may not contain the closing slash, like <hr>:
+ // - <meta> tags get executed, so if you have a redirect meta, the
+ // content will move to the target page.
+ // - <hr> may destroy the document structure if not well
+ // positioned. The trick is protect it here and restore them in
+ // the FCKDocumentProcessor.
+ sTags = 'META' ;
+ if ( FCKBrowserInfo.IsIE )
+ sTags += '|HR' ;
+
+ oRegex = new RegExp( '<((' + sTags + ')(?=\\s|>|/)[\\s\\S]*?)/?>', 'gi' ) ;
+ html = html.replace( oRegex, '<FCK:$1 />' ) ;
+
+ return html ;
+ },
+
+ SetData : function( data, resetIsDirty )
+ {
+ this.EditingArea.Mode = FCK.EditMode ;
+
+ // If there was an onSelectionChange listener in IE we must remove it to avoid crashes #1498
+ if ( FCKBrowserInfo.IsIE && FCK.EditorDocument )
+ {
+ FCK.EditorDocument.detachEvent("onselectionchange", Doc_OnSelectionChange ) ;
+ }
+
+ FCKTempBin.Reset() ;
+
+ // Bug #2469: SelectionData.createRange becomes undefined after the editor
+ // iframe is changed by FCK.SetData().
+ FCK.Selection.Release() ;
+
+ if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ {
+ // Save the resetIsDirty for later use (async)
+ this._ForceResetIsDirty = ( resetIsDirty === true ) ;
+
+ // Protect parts of the code that must remain untouched (and invisible)
+ // during editing.
+ data = FCKConfig.ProtectedSource.Protect( data ) ;
+
+ // Call the Data Processor to transform the data.
+ data = FCK.DataProcessor.ConvertToHtml( data ) ;
+
+ // Fix for invalid self-closing tags (see #152).
+ data = data.replace( FCKRegexLib.InvalidSelfCloseTags, '$1></$2>' ) ;
+
+ // Protect event attributes (they could get fired in the editing area).
+ data = FCK.ProtectEvents( data ) ;
+
+ // Protect some things from the browser itself.
+ data = FCK.ProtectUrls( data ) ;
+ data = FCK.ProtectTags( data ) ;
+
+ // Insert the base tag (FCKConfig.BaseHref), if not exists in the source.
+ // The base must be the first tag in the HEAD, to get relative
+ // links on styles, for example.
+ if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( data ) )
+ data = data.replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ;
+
+ // Build the HTML for the additional things we need on <head>.
+ var sHeadExtra = '' ;
+
+ if ( !FCKConfig.FullPage )
+ sHeadExtra += _FCK_GetEditorAreaStyleTags() ;
+
+ if ( FCKBrowserInfo.IsIE )
+ sHeadExtra += FCK._GetBehaviorsStyle() ;
+ else if ( FCKConfig.ShowBorders )
+ sHeadExtra += FCKTools.GetStyleHtml( FCK_ShowTableBordersCSS, true ) ;
+
+ sHeadExtra += FCKTools.GetStyleHtml( FCK_InternalCSS, true ) ;
+
+ // Attention: do not change it before testing it well (sample07)!
+ // This is tricky... if the head ends with <meta ... content type>,
+ // Firefox will break. But, it works if we place our extra stuff as
+ // the last elements in the HEAD.
+ data = data.replace( FCKRegexLib.HeadCloser, sHeadExtra + '$&' ) ;
+
+ // Load the HTML in the editing area.
+ this.EditingArea.OnLoad = _FCK_EditingArea_OnLoad ;
+ this.EditingArea.Start( data ) ;
+ }
+ else
+ {
+ // Remove the references to the following elements, as the editing area
+ // IFRAME will be removed.
+ FCK.EditorWindow = null ;
+ FCK.EditorDocument = null ;
+ FCKDomTools.PaddingNode = null ;
+
+ this.EditingArea.OnLoad = null ;
+ this.EditingArea.Start( data ) ;
+
+ // Enables the context menu in the textarea.
+ this.EditingArea.Textarea._FCKShowContextMenu = true ;
+
+ // Removes the enter key handler.
+ FCK.EnterKeyHandler = null ;
+
+ if ( resetIsDirty )
+ this.ResetIsDirty() ;
+
+ // Listen for keystroke events.
+ FCK.KeystrokeHandler.AttachToElement( this.EditingArea.Textarea ) ;
+
+ this.EditingArea.Textarea.focus() ;
+
+ FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;
+ }
+
+ if ( FCKBrowserInfo.IsGecko )
+ window.onresize() ;
+ },
+
+ // This collection is used by the browser specific implementations to tell
+ // which named commands must be handled separately.
+ RedirectNamedCommands : new Object(),
+
+ ExecuteNamedCommand : function( commandName, commandParameter, noRedirect, noSaveUndo )
+ {
+ if ( !noSaveUndo )
+ FCKUndo.SaveUndoStep() ;
+
+ if ( !noRedirect && FCK.RedirectNamedCommands[ commandName ] != null )
+ FCK.ExecuteRedirectedNamedCommand( commandName, commandParameter ) ;
+ else
+ {
+ FCK.Focus() ;
+ FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ }
+
+ if ( !noSaveUndo )
+ FCKUndo.SaveUndoStep() ;
+ },
+
+ GetNamedCommandState : function( commandName )
+ {
+ try
+ {
+
+ // Bug #50 : Safari never returns positive state for the Paste command, override that.
+ if ( FCKBrowserInfo.IsSafari && FCK.EditorWindow && commandName.IEquals( 'Paste' ) )
+ return FCK_TRISTATE_OFF ;
+
+ if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) )
+ return FCK_TRISTATE_DISABLED ;
+ else
+ {
+ return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
+ }
+ }
+ catch ( e )
+ {
+ return FCK_TRISTATE_OFF ;
+ }
+ },
+
+ GetNamedCommandValue : function( commandName )
+ {
+ var sValue = '' ;
+ var eState = FCK.GetNamedCommandState( commandName ) ;
+
+ if ( eState == FCK_TRISTATE_DISABLED )
+ return null ;
+
+ try
+ {
+ sValue = this.EditorDocument.queryCommandValue( commandName ) ;
+ }
+ catch(e) {}
+
+ return sValue ? sValue : '' ;
+ },
+
+ Paste : function( _callListenersOnly )
+ {
+ // First call 'OnPaste' listeners.
+ if ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( 'OnPaste' ) )
+ return false ;
+
+ // Then call the default implementation.
+ return _callListenersOnly || FCK._ExecPaste() ;
+ },
+
+ PasteFromWord : function()
+ {
+ FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+ },
+
+ Preview : function()
+ {
+ var sHTML ;
+
+ if ( FCKConfig.FullPage )
+ {
+ if ( FCK.TempBaseTag.length > 0 )
+ sHTML = FCK.TempBaseTag + FCK.GetXHTML() ;
+ else
+ sHTML = FCK.GetXHTML() ;
+ }
+ else
+ {
+ sHTML =
+ FCKConfig.DocType +
+ '<html dir="' + FCKConfig.ContentLangDirection + '">' +
+ '<head>' +
+ FCK.TempBaseTag +
+ '<title>' + FCKLang.Preview + '</title>' +
+ _FCK_GetEditorAreaStyleTags() +
+ '</head><body' + FCKConfig.GetBodyAttributes() + '>' +
+ FCK.GetXHTML() +
+ '</body></html>' ;
+ }
+
+ var iWidth = FCKConfig.ScreenWidth * 0.8 ;
+ var iHeight = FCKConfig.ScreenHeight * 0.7 ;
+ var iLeft = ( FCKConfig.ScreenWidth - iWidth ) / 2 ;
+
+ var sOpenUrl = '' ;
+ if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE)
+ {
+ window._FCKHtmlToLoad = sHTML ;
+ sOpenUrl = 'javascript:void( (function(){' +
+ 'document.open() ;' +
+ 'document.domain="' + document.domain + '" ;' +
+ 'document.write( window.opener._FCKHtmlToLoad );' +
+ 'document.close() ;' +
+ 'window.opener._FCKHtmlToLoad = null ;' +
+ '})() )' ;
+ }
+
+ var oWindow = window.open( sOpenUrl, null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + iWidth + ',height=' + iHeight + ',left=' + iLeft ) ;
+
+ if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE)
+ {
+ oWindow.document.write( sHTML );
+ oWindow.document.close();
+ }
+
+ },
+
+ SwitchEditMode : function( noUndo )
+ {
+ var bIsWysiwyg = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;
+
+ // Save the current IsDirty state, so we may restore it after the switch.
+ var bIsDirty = FCK.IsDirty() ;
+
+ var sHtml ;
+
+ // Update the HTML in the view output to show, also update
+ // FCKTempBin for IE to avoid #2263.
+ if ( bIsWysiwyg )
+ {
+ FCKCommands.GetCommand( 'ShowBlocks' ).SaveState() ;
+ if ( !noUndo && FCKBrowserInfo.IsIE )
+ FCKUndo.SaveUndoStep() ;
+
+ sHtml = FCK.GetXHTML( FCKConfig.FormatSource ) ;
+
+ if ( FCKBrowserInfo.IsIE )
+ FCKTempBin.ToHtml() ;
+
+ if ( sHtml == null )
+ return false ;
+ }
+ else
+ sHtml = this.EditingArea.Textarea.value ;
+
+ FCK.EditMode = bIsWysiwyg ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;
+
+ FCK.SetData( sHtml, !bIsDirty ) ;
+
+ // Set the Focus.
+ FCK.Focus() ;
+
+ // Update the toolbar (Running it directly causes IE to fail).
+ FCKTools.RunFunction( FCK.ToolbarSet.RefreshModeState, FCK.ToolbarSet ) ;
+
+ return true ;
+ },
+
+ InsertElement : function( element )
+ {
+ // The parameter may be a string (element name), so transform it in an element.
+ if ( typeof element == 'string' )
+ element = this.EditorDocument.createElement( element ) ;
+
+ var elementName = element.nodeName.toLowerCase() ;
+
+ FCKSelection.Restore() ;
+
+ // Create a range for the selection. V3 will have a new selection
+ // object that may internally supply this feature.
+ var range = new FCKDomRange( this.EditorWindow ) ;
+
+ // Move to the selection and delete it.
+ range.MoveToSelection() ;
+ range.DeleteContents() ;
+
+ if ( FCKListsLib.BlockElements[ elementName ] != null )
+ {
+ if ( range.StartBlock )
+ {
+ if ( range.CheckStartOfBlock() )
+ range.MoveToPosition( range.StartBlock, 3 ) ;
+ else if ( range.CheckEndOfBlock() )
+ range.MoveToPosition( range.StartBlock, 4 ) ;
+ else
+ range.SplitBlock() ;
+ }
+
+ range.InsertNode( element ) ;
+
+ var next = FCKDomTools.GetNextSourceElement( element, false, null, [ 'hr','br','param','img','area','input' ], true ) ;
+
+ // Be sure that we have something after the new element, so we can move the cursor there.
+ if ( !next && FCKConfig.EnterMode != 'br')
+ {
+ next = this.EditorDocument.body.appendChild( this.EditorDocument.createElement( FCKConfig.EnterMode ) ) ;
+
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( next ) ;
+ }
+
+ if ( FCKListsLib.EmptyElements[ elementName ] == null )
+ range.MoveToElementEditStart( element ) ;
+ else if ( next )
+ range.MoveToElementEditStart( next ) ;
+ else
+ range.MoveToPosition( element, 4 ) ;
+
+ if ( FCKBrowserInfo.IsGeckoLike )
+ {
+ if ( next )
+ FCKDomTools.ScrollIntoView( next, false );
+ FCKDomTools.ScrollIntoView( element, false );
+ }
+ }
+ else
+ {
+ // Insert the node.
+ range.InsertNode( element ) ;
+
+ // Move the selection right after the new element.
+ // DISCUSSION: Should we select the element instead?
+ range.SetStart( element, 4 ) ;
+ range.SetEnd( element, 4 ) ;
+ }
+
+ range.Select() ;
+ range.Release() ;
+
+ // REMOVE IT: The focus should not really be set here. It is up to the
+ // calling code to reset the focus if needed.
+ this.Focus() ;
+
+ return element ;
+ },
+
+ _InsertBlockElement : function( blockElement )
+ {
+ },
+
+ _IsFunctionKey : function( keyCode )
+ {
+ // keys that are captured but do not change editor contents
+ if ( keyCode >= 16 && keyCode <= 20 )
+ // shift, ctrl, alt, pause, capslock
+ return true ;
+ if ( keyCode == 27 || ( keyCode >= 33 && keyCode <= 40 ) )
+ // esc, page up, page down, end, home, left, up, right, down
+ return true ;
+ if ( keyCode == 45 )
+ // insert, no effect on FCKeditor, yet
+ return true ;
+ return false ;
+ },
+
+ _KeyDownListener : function( evt )
+ {
+ if (! evt)
+ evt = FCK.EditorWindow.event ;
+ if ( FCK.EditorWindow )
+ {
+ if ( !FCK._IsFunctionKey(evt.keyCode) // do not capture function key presses, like arrow keys or shift/alt/ctrl
+ && !(evt.ctrlKey || evt.metaKey) // do not capture Ctrl hotkeys, as they have their snapshot capture logic
+ && !(evt.keyCode == 46) ) // do not capture Del, it has its own capture logic in fckenterkey.js
+ FCK._KeyDownUndo() ;
+ }
+ return true ;
+ },
+
+ _KeyDownUndo : function()
+ {
+ if ( !FCKUndo.Typing )
+ {
+ FCKUndo.SaveUndoStep() ;
+ FCKUndo.Typing = true ;
+ FCK.Events.FireEvent( "OnSelectionChange" ) ;
+ }
+
+ FCKUndo.TypesCount++ ;
+ FCKUndo.Changed = 1 ;
+
+ if ( FCKUndo.TypesCount > FCKUndo.MaxTypes )
+ {
+ FCKUndo.TypesCount = 0 ;
+ FCKUndo.SaveUndoStep() ;
+ }
+ },
+
+ _TabKeyHandler : function( evt )
+ {
+ if ( ! evt )
+ evt = window.event ;
+
+ var keystrokeValue = evt.keyCode ;
+
+ // Pressing <Tab> in source mode should produce a tab space in the text area, not
+ // changing the focus to something else.
+ if ( keystrokeValue == 9 && FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ {
+ var range = document.selection.createRange() ;
+ if ( range.parentElement() != FCK.EditingArea.Textarea )
+ return true ;
+ range.text = '\t' ;
+ range.select() ;
+ }
+ else
+ {
+ var a = [] ;
+ var el = FCK.EditingArea.Textarea ;
+ var selStart = el.selectionStart ;
+ var selEnd = el.selectionEnd ;
+ a.push( el.value.substr(0, selStart ) ) ;
+ a.push( '\t' ) ;
+ a.push( el.value.substr( selEnd ) ) ;
+ el.value = a.join( '' ) ;
+ el.setSelectionRange( selStart + 1, selStart + 1 ) ;
+ }
+
+ if ( evt.preventDefault )
+ return evt.preventDefault() ;
+
+ return evt.returnValue = false ;
+ }
+
+ return true ;
+ }
+} ;
+
+FCK.Events = new FCKEvents( FCK ) ;
+
+// DEPRECATED in favor or "GetData".
+FCK.GetHTML = FCK.GetXHTML = FCK.GetData ;
+
+// DEPRECATED in favor of "SetData".
+FCK.SetHTML = FCK.SetData ;
+
+// InsertElementAndGetIt and CreateElement are Deprecated : returns the same value as InsertElement.
+FCK.InsertElementAndGetIt = FCK.CreateElement = FCK.InsertElement ;
+
+// Replace all events attributes (like onclick).
+function _FCK_ProtectEvents_ReplaceTags( tagMatch )
+{
+ return tagMatch.replace( FCKRegexLib.EventAttributes, _FCK_ProtectEvents_ReplaceEvents ) ;
+}
+
+// Replace an event attribute with its respective __fckprotectedatt attribute.
+// The original event markup will be encoded and saved as the value of the new
+// attribute.
+function _FCK_ProtectEvents_ReplaceEvents( eventMatch, attName )
+{
+ return ' ' + attName + '_fckprotectedatt="' + encodeURIComponent( eventMatch ) + '"' ;
+}
+
+function _FCK_ProtectEvents_RestoreEvents( match, encodedOriginal )
+{
+ return decodeURIComponent( encodedOriginal ) ;
+}
+
+function _FCK_MouseEventsListener( evt )
+{
+ if ( ! evt )
+ evt = window.event ;
+ if ( evt.type == 'mousedown' )
+ FCK.MouseDownFlag = true ;
+ else if ( evt.type == 'mouseup' )
+ FCK.MouseDownFlag = false ;
+ else if ( evt.type == 'mousemove' )
+ FCK.Events.FireEvent( 'OnMouseMove', evt ) ;
+}
+
+function _FCK_PaddingNodeListener()
+{
+ if ( FCKConfig.EnterMode.IEquals( 'br' ) )
+ return ;
+ FCKDomTools.EnforcePaddingNode( FCK.EditorDocument, FCKConfig.EnterMode ) ;
+
+ if ( ! FCKBrowserInfo.IsIE && FCKDomTools.PaddingNode )
+ {
+ // Prevent the caret from going between the body and the padding node in Firefox.
+ // i.e. <body>|<p></p></body>
+ var sel = FCKSelection.GetSelection() ;
+ if ( sel && sel.rangeCount == 1 )
+ {
+ var range = sel.getRangeAt( 0 ) ;
+ if ( range.collapsed && range.startContainer == FCK.EditorDocument.body && range.startOffset == 0 )
+ {
+ range.selectNodeContents( FCKDomTools.PaddingNode ) ;
+ range.collapse( true ) ;
+ sel.removeAllRanges() ;
+ sel.addRange( range ) ;
+ }
+ }
+ }
+ else if ( FCKDomTools.PaddingNode )
+ {
+ // Prevent the caret from going into an empty body but not into the padding node in IE.
+ // i.e. <body><p></p>|</body>
+ var parentElement = FCKSelection.GetParentElement() ;
+ var paddingNode = FCKDomTools.PaddingNode ;
+ if ( parentElement && parentElement.nodeName.IEquals( 'body' ) )
+ {
+ if ( FCK.EditorDocument.body.childNodes.length == 1
+ && FCK.EditorDocument.body.firstChild == paddingNode )
+ {
+ /*
+ * Bug #1764: Don't move the selection if the
+ * current selection isn't in the editor
+ * document.
+ */
+ if ( FCKSelection._GetSelectionDocument( FCK.EditorDocument.selection ) != FCK.EditorDocument )
+ return ;
+
+ var range = FCK.EditorDocument.body.createTextRange() ;
+ var clearContents = false ;
+ if ( !paddingNode.childNodes.firstChild )
+ {
+ paddingNode.appendChild( FCKTools.GetElementDocument( paddingNode ).createTextNode( '\ufeff' ) ) ;
+ clearContents = true ;
+ }
+ range.moveToElementText( paddingNode ) ;
+ range.select() ;
+ if ( clearContents )
+ range.pasteHTML( '' ) ;
+ }
+ }
+ }
+}
+
+function _FCK_EditingArea_OnLoad()
+{
+ // Get the editor's window and document (DOM)
+ FCK.EditorWindow = FCK.EditingArea.Window ;
+ FCK.EditorDocument = FCK.EditingArea.Document ;
+
+ if ( FCKBrowserInfo.IsIE )
+ FCKTempBin.ToElements() ;
+
+ FCK.InitializeBehaviors() ;
+
+ // Listen for mousedown and mouseup events for tracking drag and drops.
+ FCK.MouseDownFlag = false ;
+ FCKTools.AddEventListener( FCK.EditorDocument, 'mousemove', _FCK_MouseEventsListener ) ;
+ FCKTools.AddEventListener( FCK.EditorDocument, 'mousedown', _FCK_MouseEventsListener ) ;
+ FCKTools.AddEventListener( FCK.EditorDocument, 'mouseup', _FCK_MouseEventsListener ) ;
+
+ // Most of the CTRL key combos do not work under Safari for onkeydown and onkeypress (See #1119)
+ // But we can use the keyup event to override some of these...
+ if ( FCKBrowserInfo.IsSafari )
+ {
+ var undoFunc = function( evt )
+ {
+ if ( ! ( evt.ctrlKey || evt.metaKey ) )
+ return ;
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return ;
+ switch ( evt.keyCode )
+ {
+ case 89:
+ FCKUndo.Redo() ;
+ break ;
+ case 90:
+ FCKUndo.Undo() ;
+ break ;
+ }
+ }
+
+ FCKTools.AddEventListener( FCK.EditorDocument, 'keyup', undoFunc ) ;
+ }
+
+ // Create the enter key handler
+ FCK.EnterKeyHandler = new FCKEnterKey( FCK.EditorWindow, FCKConfig.EnterMode, FCKConfig.ShiftEnterMode, FCKConfig.TabSpaces ) ;
+
+ // Listen for keystroke events.
+ FCK.KeystrokeHandler.AttachToElement( FCK.EditorDocument ) ;
+
+ if ( FCK._ForceResetIsDirty )
+ FCK.ResetIsDirty() ;
+
+ // This is a tricky thing for IE. In some cases, even if the cursor is
+ // blinking in the editing, the keystroke handler doesn't catch keyboard
+ // events. We must activate the editing area to make it work. (#142).
+ if ( FCKBrowserInfo.IsIE && FCK.HasFocus )
+ FCK.EditorDocument.body.setActive() ;
+
+ FCK.OnAfterSetHTML() ;
+
+ // Restore show blocks status.
+ FCKCommands.GetCommand( 'ShowBlocks' ).RestoreState() ;
+
+ // Check if it is not a startup call, otherwise complete the startup.
+ if ( FCK.Status != FCK_STATUS_NOTLOADED )
+ return ;
+
+ FCK.SetStatus( FCK_STATUS_ACTIVE ) ;
+}
+
+function _FCK_GetEditorAreaStyleTags()
+{
+ return FCKTools.GetStyleHtml( FCKConfig.EditorAreaCSS ) +
+ FCKTools.GetStyleHtml( FCKConfig.EditorAreaStyles ) ;
+}
+
+function _FCK_KeystrokeHandler_OnKeystroke( keystroke, keystrokeValue )
+{
+ if ( FCK.Status != FCK_STATUS_COMPLETE )
+ return false ;
+
+ if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ {
+ switch ( keystrokeValue )
+ {
+ case 'Paste' :
+ return !FCK.Paste() ;
+
+ case 'Cut' :
+ FCKUndo.SaveUndoStep() ;
+ return false ;
+ }
+ }
+ else
+ {
+ // In source mode, some actions must have their default behavior.
+ if ( keystrokeValue.Equals( 'Paste', 'Undo', 'Redo', 'SelectAll', 'Cut' ) )
+ return false ;
+ }
+
+ // The return value indicates if the default behavior of the keystroke must
+ // be cancelled. Let's do that only if the Execute() call explicitly returns "false".
+ var oCommand = FCK.Commands.GetCommand( keystrokeValue ) ;
+
+ // If the command is disabled then ignore the keystroke
+ if ( oCommand.GetState() == FCK_TRISTATE_DISABLED )
+ return false ;
+
+ return ( oCommand.Execute.apply( oCommand, FCKTools.ArgumentsToArray( arguments, 2 ) ) !== false ) ;
+}
+
+// Set the FCK.LinkedField reference to the field that will be used to post the
+// editor data.
+(function()
+{
+ // There is a bug on IE... getElementById returns any META tag that has the
+ // name set to the ID you are looking for. So the best way in to get the array
+ // by names and look for the correct one.
+ // As ASP.Net generates a ID that is different from the Name, we must also
+ // look for the field based on the ID (the first one is the ID).
+
+ var oDocument = window.parent.document ;
+
+ // Try to get the field using the ID.
+ var eLinkedField = oDocument.getElementById( FCK.Name ) ;
+
+ var i = 0;
+ while ( eLinkedField || i == 0 )
+ {
+ if ( eLinkedField && eLinkedField.tagName.toLowerCase().Equals( 'input', 'textarea' ) )
+ {
+ FCK.LinkedField = eLinkedField ;
+ break ;
+ }
+
+ eLinkedField = oDocument.getElementsByName( FCK.Name )[i++] ;
+ }
+})() ;
+
+var FCKTempBin =
+{
+ Elements : new Array(),
+
+ AddElement : function( element )
+ {
+ var iIndex = this.Elements.length ;
+ this.Elements[ iIndex ] = element ;
+ return iIndex ;
+ },
+
+ RemoveElement : function( index )
+ {
+ var e = this.Elements[ index ] ;
+ this.Elements[ index ] = null ;
+ return e ;
+ },
+
+ Reset : function()
+ {
+ var i = 0 ;
+ while ( i < this.Elements.length )
+ this.Elements[ i++ ] = null ;
+ this.Elements.length = 0 ;
+ },
+
+ ToHtml : function()
+ {
+ for ( var i = 0 ; i < this.Elements.length ; i++ )
+ {
+ this.Elements[i] = '<div>&nbsp;' + this.Elements[i].outerHTML + '</div>' ;
+ this.Elements[i].isHtml = true ;
+ }
+ },
+
+ ToElements : function()
+ {
+ var node = FCK.EditorDocument.createElement( 'div' ) ;
+ for ( var i = 0 ; i < this.Elements.length ; i++ )
+ {
+ if ( this.Elements[i].isHtml )
+ {
+ node.innerHTML = this.Elements[i] ;
+ this.Elements[i] = node.firstChild.removeChild( node.firstChild.lastChild ) ;
+ }
+ }
+ }
+} ;
+
+
+
+// # Focus Manager: Manages the focus in the editor.
+var FCKFocusManager = FCK.FocusManager =
+{
+ IsLocked : false,
+
+ AddWindow : function( win, sendToEditingArea )
+ {
+ var oTarget ;
+
+ if ( FCKBrowserInfo.IsIE )
+ oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
+ else if ( FCKBrowserInfo.IsSafari )
+ oTarget = win ;
+ else
+ oTarget = win.document ;
+
+ FCKTools.AddEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
+ FCKTools.AddEventListener( oTarget, 'focus', sendToEditingArea ? FCKFocusManager_Win_OnFocus_Area : FCKFocusManager_Win_OnFocus ) ;
+ },
+
+ RemoveWindow : function( win )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
+ else
+ oTarget = win.document ;
+
+ FCKTools.RemoveEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
+ FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus_Area ) ;
+ FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus ) ;
+ },
+
+ Lock : function()
+ {
+ this.IsLocked = true ;
+ },
+
+ Unlock : function()
+ {
+ if ( this._HasPendingBlur )
+ FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
+
+ this.IsLocked = false ;
+ },
+
+ _ResetTimer : function()
+ {
+ this._HasPendingBlur = false ;
+
+ if ( this._Timer )
+ {
+ window.clearTimeout( this._Timer ) ;
+ delete this._Timer ;
+ }
+ }
+} ;
+
+function FCKFocusManager_Win_OnBlur()
+{
+ if ( typeof(FCK) != 'undefined' && FCK.HasFocus )
+ {
+ FCKFocusManager._ResetTimer() ;
+ FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
+ }
+}
+
+function FCKFocusManager_FireOnBlur()
+{
+ if ( FCKFocusManager.IsLocked )
+ FCKFocusManager._HasPendingBlur = true ;
+ else
+ {
+ FCK.HasFocus = false ;
+ FCK.Events.FireEvent( "OnBlur" ) ;
+ }
+}
+
+function FCKFocusManager_Win_OnFocus_Area()
+{
+ // Check if we are already focusing the editor (to avoid loops).
+ if ( FCKFocusManager._IsFocusing )
+ return ;
+
+ FCKFocusManager._IsFocusing = true ;
+
+ FCK.Focus() ;
+ FCKFocusManager_Win_OnFocus() ;
+
+ // The above FCK.Focus() call may trigger other focus related functions.
+ // So, to avoid a loop, we delay the focusing mark removal, so it get
+ // executed after all othre functions have been run.
+ FCKTools.RunFunction( function()
+ {
+ delete FCKFocusManager._IsFocusing ;
+ } ) ;
+}
+
+function FCKFocusManager_Win_OnFocus()
+{
+ FCKFocusManager._ResetTimer() ;
+
+ if ( !FCK.HasFocus && !FCKFocusManager.IsLocked )
+ {
+ FCK.HasFocus = true ;
+ FCK.Events.FireEvent( "OnFocus" ) ;
+ }
+}
+
+/*
+ * #1633 : Protect the editor iframe from external styles.
+ * Notice that we can't use FCKTools.ResetStyles here since FCKTools isn't
+ * loaded yet.
+ */
+(function()
+{
+ var el = window.frameElement ;
+ var width = el.width ;
+ var height = el.height ;
+ if ( /^\d+$/.test( width ) ) width += 'px' ;
+ if ( /^\d+$/.test( height ) ) height += 'px' ;
+ var style = el.style ;
+ style.border = style.padding = style.margin = 0 ;
+ style.backgroundColor = 'transparent';
+ style.backgroundImage = 'none';
+ style.width = width ;
+ style.height = height ;
+})() ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_contextmenu.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_contextmenu.js
new file mode 100644
index 0000000..cedcdd8
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_contextmenu.js
@@ -0,0 +1,345 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCK.ContextMenu object that is responsible for all
+ * Context Menu operations in the editing area.
+ */
+
+FCK.ContextMenu = new Object() ;
+FCK.ContextMenu.Listeners = new Array() ;
+
+FCK.ContextMenu.RegisterListener = function( listener )
+{
+ if ( listener )
+ this.Listeners.push( listener ) ;
+}
+
+function FCK_ContextMenu_Init()
+{
+ var oInnerContextMenu = FCK.ContextMenu._InnerContextMenu = new FCKContextMenu( FCKBrowserInfo.IsIE ? window : window.parent, FCKLang.Dir ) ;
+ oInnerContextMenu.CtrlDisable = FCKConfig.BrowserContextMenuOnCtrl ;
+ oInnerContextMenu.OnBeforeOpen = FCK_ContextMenu_OnBeforeOpen ;
+ oInnerContextMenu.OnItemClick = FCK_ContextMenu_OnItemClick ;
+
+ // Get the registering function.
+ var oMenu = FCK.ContextMenu ;
+
+ // Register all configured context menu listeners.
+ for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ )
+ oMenu.RegisterListener( FCK_ContextMenu_GetListener( FCKConfig.ContextMenu[i] ) ) ;
+}
+
+function FCK_ContextMenu_GetListener( listenerName )
+{
+ switch ( listenerName )
+ {
+ case 'Generic' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ menu.AddItem( 'Cut' , FCKLang.Cut , 7, FCKCommands.GetCommand( 'Cut' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ menu.AddItem( 'Copy' , FCKLang.Copy , 8, FCKCommands.GetCommand( 'Copy' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ menu.AddItem( 'Paste' , FCKLang.Paste , 9, FCKCommands.GetCommand( 'Paste' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ }} ;
+
+ case 'Table' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ var bIsTable = ( tagName == 'TABLE' ) ;
+ var bIsCell = ( !bIsTable && FCKSelection.HasAncestorNode( 'TABLE' ) ) ;
+
+ if ( bIsCell )
+ {
+ menu.AddSeparator() ;
+ var oItem = menu.AddItem( 'Cell' , FCKLang.CellCM ) ;
+ oItem.AddItem( 'TableInsertCellBefore' , FCKLang.InsertCellBefore, 69 ) ;
+ oItem.AddItem( 'TableInsertCellAfter' , FCKLang.InsertCellAfter, 58 ) ;
+ oItem.AddItem( 'TableDeleteCells' , FCKLang.DeleteCells, 59 ) ;
+ if ( FCKBrowserInfo.IsGecko )
+ oItem.AddItem( 'TableMergeCells' , FCKLang.MergeCells, 60,
+ FCKCommands.GetCommand( 'TableMergeCells' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ else
+ {
+ oItem.AddItem( 'TableMergeRight' , FCKLang.MergeRight, 60,
+ FCKCommands.GetCommand( 'TableMergeRight' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ oItem.AddItem( 'TableMergeDown' , FCKLang.MergeDown, 60,
+ FCKCommands.GetCommand( 'TableMergeDown' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ }
+ oItem.AddItem( 'TableHorizontalSplitCell' , FCKLang.HorizontalSplitCell, 61,
+ FCKCommands.GetCommand( 'TableHorizontalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ oItem.AddItem( 'TableVerticalSplitCell' , FCKLang.VerticalSplitCell, 61,
+ FCKCommands.GetCommand( 'TableVerticalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+ oItem.AddSeparator() ;
+ oItem.AddItem( 'TableCellProp' , FCKLang.CellProperties, 57,
+ FCKCommands.GetCommand( 'TableCellProp' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+
+ menu.AddSeparator() ;
+ oItem = menu.AddItem( 'Row' , FCKLang.RowCM ) ;
+ oItem.AddItem( 'TableInsertRowBefore' , FCKLang.InsertRowBefore, 70 ) ;
+ oItem.AddItem( 'TableInsertRowAfter' , FCKLang.InsertRowAfter, 62 ) ;
+ oItem.AddItem( 'TableDeleteRows' , FCKLang.DeleteRows, 63 ) ;
+
+ menu.AddSeparator() ;
+ oItem = menu.AddItem( 'Column' , FCKLang.ColumnCM ) ;
+ oItem.AddItem( 'TableInsertColumnBefore', FCKLang.InsertColumnBefore, 71 ) ;
+ oItem.AddItem( 'TableInsertColumnAfter' , FCKLang.InsertColumnAfter, 64 ) ;
+ oItem.AddItem( 'TableDeleteColumns' , FCKLang.DeleteColumns, 65 ) ;
+ }
+
+ if ( bIsTable || bIsCell )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'TableDelete' , FCKLang.TableDelete ) ;
+ menu.AddItem( 'TableProp' , FCKLang.TableProperties, 39 ) ;
+ }
+ }} ;
+
+ case 'Link' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ var bInsideLink = ( tagName == 'A' || FCKSelection.HasAncestorNode( 'A' ) ) ;
+
+ if ( bInsideLink || FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED )
+ {
+ // Go up to the anchor to test its properties
+ var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+ var bIsAnchor = ( oLink && oLink.name.length > 0 && oLink.href.length == 0 ) ;
+ // If it isn't a link then don't add the Link context menu
+ if ( bIsAnchor )
+ return ;
+
+ menu.AddSeparator() ;
+ menu.AddItem( 'VisitLink', FCKLang.VisitLink ) ;
+ menu.AddSeparator() ;
+ if ( bInsideLink )
+ menu.AddItem( 'Link', FCKLang.EditLink , 34 ) ;
+ menu.AddItem( 'Unlink' , FCKLang.RemoveLink , 35 ) ;
+ }
+ }} ;
+
+ case 'Image' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'IMG' && !tag.getAttribute( '_fckfakelement' ) )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Image', FCKLang.ImageProperties, 37 ) ;
+ }
+ }} ;
+
+ case 'Anchor' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ // Go up to the anchor to test its properties
+ var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+ var bIsAnchor = ( oLink && oLink.name.length > 0 ) ;
+
+ if ( bIsAnchor || ( tagName == 'IMG' && tag.getAttribute( '_fckanchor' ) ) )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Anchor', FCKLang.AnchorProp, 36 ) ;
+ menu.AddItem( 'AnchorDelete', FCKLang.AnchorDelete ) ;
+ }
+ }} ;
+
+ case 'Flash' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'IMG' && tag.getAttribute( '_fckflash' ) )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Flash', FCKLang.FlashProperties, 38 ) ;
+ }
+ }} ;
+
+ case 'Form' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( FCKSelection.HasAncestorNode('FORM') )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Form', FCKLang.FormProp, 48 ) ;
+ }
+ }} ;
+
+ case 'Checkbox' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'INPUT' && tag.type == 'checkbox' )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Checkbox', FCKLang.CheckboxProp, 49 ) ;
+ }
+ }} ;
+
+ case 'Radio' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'INPUT' && tag.type == 'radio' )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Radio', FCKLang.RadioButtonProp, 50 ) ;
+ }
+ }} ;
+
+ case 'TextField' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'INPUT' && ( tag.type == 'text' || tag.type == 'password' ) )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'TextField', FCKLang.TextFieldProp, 51 ) ;
+ }
+ }} ;
+
+ case 'HiddenField' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'IMG' && tag.getAttribute( '_fckinputhidden' ) )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'HiddenField', FCKLang.HiddenFieldProp, 56 ) ;
+ }
+ }} ;
+
+ case 'ImageButton' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'INPUT' && tag.type == 'image' )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'ImageButton', FCKLang.ImageButtonProp, 55 ) ;
+ }
+ }} ;
+
+ case 'Button' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'INPUT' && ( tag.type == 'button' || tag.type == 'submit' || tag.type == 'reset' ) )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Button', FCKLang.ButtonProp, 54 ) ;
+ }
+ }} ;
+
+ case 'Select' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'SELECT' )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Select', FCKLang.SelectionFieldProp, 53 ) ;
+ }
+ }} ;
+
+ case 'Textarea' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( tagName == 'TEXTAREA' )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'Textarea', FCKLang.TextareaProp, 52 ) ;
+ }
+ }} ;
+
+ case 'BulletedList' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( FCKSelection.HasAncestorNode('UL') )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'BulletedList', FCKLang.BulletedListProp, 27 ) ;
+ }
+ }} ;
+
+ case 'NumberedList' :
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ if ( FCKSelection.HasAncestorNode('OL') )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'NumberedList', FCKLang.NumberedListProp, 26 ) ;
+ }
+ }} ;
+
+ case 'DivContainer':
+ return {
+ AddItems : function( menu, tag, tagName )
+ {
+ var currentBlocks = FCKDomTools.GetSelectedDivContainers() ;
+
+ if ( currentBlocks.length > 0 )
+ {
+ menu.AddSeparator() ;
+ menu.AddItem( 'EditDiv', FCKLang.EditDiv, 75 ) ;
+ menu.AddItem( 'DeleteDiv', FCKLang.DeleteDiv, 76 ) ;
+ }
+ }} ;
+
+ }
+ return null ;
+}
+
+function FCK_ContextMenu_OnBeforeOpen()
+{
+ // Update the UI.
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+
+ // Get the actual selected tag (if any).
+ var oTag, sTagName ;
+
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ if ( (oTag = FCKSelection.GetSelectedElement()) )
+ sTagName = oTag.tagName ;
+
+ // Cleanup the current menu items.
+ var oMenu = FCK.ContextMenu._InnerContextMenu ;
+ oMenu.RemoveAllItems() ;
+
+ // Loop through the listeners.
+ var aListeners = FCK.ContextMenu.Listeners ;
+ for ( var i = 0 ; i < aListeners.length ; i++ )
+ aListeners[i].AddItems( oMenu, oTag, sTagName ) ;
+}
+
+function FCK_ContextMenu_OnItemClick( item )
+{
+ // IE might work incorrectly if we refocus the editor #798
+ if ( !FCKBrowserInfo.IsIE )
+ FCK.Focus() ;
+
+ FCKCommands.GetCommand( item.Name ).Execute( item.CustomData ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_gecko.js
new file mode 100644
index 0000000..e36f9ad
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_gecko.js
@@ -0,0 +1,497 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main
+ * object that represents an editor instance.
+ * (Gecko specific implementations)
+ */
+
+FCK.Description = "FCKeditor for Gecko Browsers" ;
+
+FCK.InitializeBehaviors = function()
+{
+ // When calling "SetData", the editing area IFRAME gets a fixed height. So we must recalculate it.
+ if ( window.onresize ) // Not for Safari/Opera.
+ window.onresize() ;
+
+ FCKFocusManager.AddWindow( this.EditorWindow ) ;
+
+ this.ExecOnSelectionChange = function()
+ {
+ FCK.Events.FireEvent( "OnSelectionChange" ) ;
+ }
+
+ this._ExecDrop = function( evt )
+ {
+ if ( FCK.MouseDownFlag )
+ {
+ FCK.MouseDownFlag = false ;
+ return ;
+ }
+
+ if ( FCKConfig.ForcePasteAsPlainText )
+ {
+ if ( evt.dataTransfer )
+ {
+ var text = evt.dataTransfer.getData( 'Text' ) ;
+ text = FCKTools.HTMLEncode( text ) ;
+ text = FCKTools.ProcessLineBreaks( window, FCKConfig, text ) ;
+ FCK.InsertHtml( text ) ;
+ }
+ else if ( FCKConfig.ShowDropDialog )
+ FCK.PasteAsPlainText() ;
+
+ evt.preventDefault() ;
+ evt.stopPropagation() ;
+ }
+ }
+
+ this._ExecCheckCaret = function( evt )
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return ;
+
+ if ( evt.type == 'keypress' )
+ {
+ var keyCode = evt.keyCode ;
+ // ignore if positioning key is not pressed.
+ // left or up arrow keys need to be processed as well, since <a> links can be expanded in Gecko's editor
+ // when the caret moved left or up from another block element below.
+ if ( keyCode < 33 || keyCode > 40 )
+ return ;
+ }
+
+ var blockEmptyStop = function( node )
+ {
+ if ( node.nodeType != 1 )
+ return false ;
+ var tag = node.tagName.toLowerCase() ;
+ return ( FCKListsLib.BlockElements[tag] || FCKListsLib.EmptyElements[tag] ) ;
+ }
+
+ var moveCursor = function()
+ {
+ var selection = FCKSelection.GetSelection() ;
+ var range = selection.getRangeAt(0) ;
+ if ( ! range || ! range.collapsed )
+ return ;
+
+ var node = range.endContainer ;
+
+ // only perform the patched behavior if we're at the end of a text node.
+ if ( node.nodeType != 3 )
+ return ;
+
+ if ( node.nodeValue.length != range.endOffset )
+ return ;
+
+ // only perform the patched behavior if we're in an <a> tag, or the End key is pressed.
+ var parentTag = node.parentNode.tagName.toLowerCase() ;
+ if ( ! ( parentTag == 'a' || ( !FCKBrowserInfo.IsOpera && String(node.parentNode.contentEditable) == 'false' ) ||
+ ( ! ( FCKListsLib.BlockElements[parentTag] || FCKListsLib.NonEmptyBlockElements[parentTag] )
+ && keyCode == 35 ) ) )
+ return ;
+
+ // our caret has moved to just after the last character of a text node under an unknown tag, how to proceed?
+ // first, see if there are other text nodes by DFS walking from this text node.
+ // - if the DFS has scanned all nodes under my parent, then go the next step.
+ // - if there is a text node after me but still under my parent, then do nothing and return.
+ var nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode, blockEmptyStop ) ;
+ if ( nextTextNode )
+ return ;
+
+ // we're pretty sure we need to move the caret forcefully from here.
+ range = FCK.EditorDocument.createRange() ;
+
+ nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode.parentNode, blockEmptyStop ) ;
+ if ( nextTextNode )
+ {
+ // Opera thinks the dummy empty text node we append beyond the end of <a> nodes occupies a caret
+ // position. So if the user presses the left key and we reset the caret position here, the user
+ // wouldn't be able to go back.
+ if ( FCKBrowserInfo.IsOpera && keyCode == 37 )
+ return ;
+
+ // now we want to get out of our current parent node, adopt the next parent, and move the caret to
+ // the appropriate text node under our new parent.
+ // our new parent might be our current parent's siblings if we are lucky.
+ range.setStart( nextTextNode, 0 ) ;
+ range.setEnd( nextTextNode, 0 ) ;
+ }
+ else
+ {
+ // no suitable next siblings under our grandparent! what to do next?
+ while ( node.parentNode
+ && node.parentNode != FCK.EditorDocument.body
+ && node.parentNode != FCK.EditorDocument.documentElement
+ && node == node.parentNode.lastChild
+ && ( ! FCKListsLib.BlockElements[node.parentNode.tagName.toLowerCase()]
+ && ! FCKListsLib.NonEmptyBlockElements[node.parentNode.tagName.toLowerCase()] ) )
+ node = node.parentNode ;
+
+
+ if ( FCKListsLib.BlockElements[ parentTag ]
+ || FCKListsLib.EmptyElements[ parentTag ]
+ || node == FCK.EditorDocument.body )
+ {
+ // if our parent is a block node, move to the end of our parent.
+ range.setStart( node, node.childNodes.length ) ;
+ range.setEnd( node, node.childNodes.length ) ;
+ }
+ else
+ {
+ // things are a little bit more interesting if our parent is not a block node
+ // due to the weired ways how Gecko's caret acts...
+ var stopNode = node.nextSibling ;
+
+ // find out the next block/empty element at our grandparent, we'll
+ // move the caret just before it.
+ while ( stopNode )
+ {
+ if ( stopNode.nodeType != 1 )
+ {
+ stopNode = stopNode.nextSibling ;
+ continue ;
+ }
+
+ var stopTag = stopNode.tagName.toLowerCase() ;
+ if ( FCKListsLib.BlockElements[stopTag] || FCKListsLib.EmptyElements[stopTag]
+ || FCKListsLib.NonEmptyBlockElements[stopTag] )
+ break ;
+ stopNode = stopNode.nextSibling ;
+ }
+
+ // note that the dummy marker below is NEEDED, otherwise the caret's behavior will
+ // be broken in Gecko.
+ var marker = FCK.EditorDocument.createTextNode( '' ) ;
+ if ( stopNode )
+ node.parentNode.insertBefore( marker, stopNode ) ;
+ else
+ node.parentNode.appendChild( marker ) ;
+ range.setStart( marker, 0 ) ;
+ range.setEnd( marker, 0 ) ;
+ }
+ }
+
+ selection.removeAllRanges() ;
+ selection.addRange( range ) ;
+ FCK.Events.FireEvent( "OnSelectionChange" ) ;
+ }
+
+ setTimeout( moveCursor, 1 ) ;
+ }
+
+ this.ExecOnSelectionChangeTimer = function()
+ {
+ if ( FCK.LastOnChangeTimer )
+ window.clearTimeout( FCK.LastOnChangeTimer ) ;
+
+ FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ;
+ }
+
+ this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ;
+
+ // On Gecko, firing the "OnSelectionChange" event on every key press started to be too much
+ // slow. So, a timer has been implemented to solve performance issues when typing to quickly.
+ this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ;
+
+ this._DblClickListener = function( e )
+ {
+ FCK.OnDoubleClick( e.target ) ;
+ e.stopPropagation() ;
+ }
+ this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ;
+
+ // Record changes for the undo system when there are key down events.
+ this.EditorDocument.addEventListener( 'keydown', this._KeyDownListener, false ) ;
+
+ // Hooks for data object drops
+ if ( FCKBrowserInfo.IsGecko )
+ {
+ this.EditorWindow.addEventListener( 'dragdrop', this._ExecDrop, true ) ;
+ }
+ else if ( FCKBrowserInfo.IsSafari )
+ {
+ this.EditorDocument.addEventListener( 'dragover', function ( evt )
+ { if ( !FCK.MouseDownFlag && FCK.Config.ForcePasteAsPlainText ) evt.returnValue = false ; }, true ) ;
+ this.EditorDocument.addEventListener( 'drop', this._ExecDrop, true ) ;
+ this.EditorDocument.addEventListener( 'mousedown',
+ function( ev )
+ {
+ var element = ev.srcElement ;
+
+ if ( element.nodeName.IEquals( 'IMG', 'HR', 'INPUT', 'TEXTAREA', 'SELECT' ) )
+ {
+ FCKSelection.SelectNode( element ) ;
+ }
+ }, true ) ;
+
+ this.EditorDocument.addEventListener( 'mouseup',
+ function( ev )
+ {
+ if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) )
+ ev.preventDefault()
+ }, true ) ;
+
+ this.EditorDocument.addEventListener( 'click',
+ function( ev )
+ {
+ if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) )
+ ev.preventDefault()
+ }, true ) ;
+ }
+
+ // Kludge for buggy Gecko caret positioning logic (Bug #393 and #1056)
+ if ( FCKBrowserInfo.IsGecko || FCKBrowserInfo.IsOpera )
+ {
+ this.EditorDocument.addEventListener( 'keypress', this._ExecCheckCaret, false ) ;
+ this.EditorDocument.addEventListener( 'click', this._ExecCheckCaret, false ) ;
+ }
+
+ // Reset the context menu.
+ FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow( FCK.EditorWindow ) ;
+ FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument ) ;
+}
+
+FCK.MakeEditable = function()
+{
+ this.EditingArea.MakeEditable() ;
+}
+
+// Disable the context menu in the editor (outside the editing area).
+function Document_OnContextMenu( e )
+{
+ if ( !e.target._FCKShowContextMenu )
+ e.preventDefault() ;
+}
+document.oncontextmenu = Document_OnContextMenu ;
+
+// GetNamedCommandState overload for Gecko.
+FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ;
+FCK.GetNamedCommandState = function( commandName )
+{
+ switch ( commandName )
+ {
+ case 'Unlink' :
+ return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+ default :
+ return FCK._BaseGetNamedCommandState( commandName ) ;
+ }
+}
+
+// Named commands to be handled by this browsers specific implementation.
+FCK.RedirectNamedCommands =
+{
+ Print : true,
+ Paste : true
+} ;
+
+// ExecuteNamedCommand overload for Gecko.
+FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
+{
+ switch ( commandName )
+ {
+ case 'Print' :
+ FCK.EditorWindow.print() ;
+ break ;
+ case 'Paste' :
+ try
+ {
+ // Force the paste dialog for Safari (#50).
+ if ( FCKBrowserInfo.IsSafari )
+ throw '' ;
+
+ if ( FCK.Paste() )
+ FCK.ExecuteNamedCommand( 'Paste', null, true ) ;
+ }
+ catch (e) {
+ if ( FCKConfig.ForcePasteAsPlainText )
+ FCK.PasteAsPlainText() ;
+ else
+ FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security' ) ;
+ }
+ break ;
+ default :
+ FCK.ExecuteNamedCommand( commandName, commandParameter ) ;
+ }
+}
+
+FCK._ExecPaste = function()
+{
+ // Save a snapshot for undo before actually paste the text
+ FCKUndo.SaveUndoStep() ;
+
+ if ( FCKConfig.ForcePasteAsPlainText )
+ {
+ FCK.PasteAsPlainText() ;
+ return false ;
+ }
+
+ /* For now, the AutoDetectPasteFromWord feature is IE only. */
+ return true ;
+}
+
+//**
+// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the
+// selected content if any.
+FCK.InsertHtml = function( html )
+{
+ var doc = FCK.EditorDocument,
+ range;
+
+ html = FCKConfig.ProtectedSource.Protect( html ) ;
+ html = FCK.ProtectEvents( html ) ;
+ html = FCK.ProtectUrls( html ) ;
+ html = FCK.ProtectTags( html ) ;
+
+ // Save an undo snapshot first.
+ FCKUndo.SaveUndoStep() ;
+
+ if ( FCKBrowserInfo.IsGecko )
+ {
+ html = html.replace( /&nbsp;$/, '$&<span _fcktemp="1"/>' ) ;
+
+ var docFrag = new FCKDocumentFragment( this.EditorDocument ) ;
+ docFrag.AppendHtml( html ) ;
+
+ var lastNode = docFrag.RootNode.lastChild ;
+
+ range = new FCKDomRange( this.EditorWindow ) ;
+ range.MoveToSelection() ;
+ range.DeleteContents() ;
+ range.InsertNode( docFrag.RootNode ) ;
+
+ range.MoveToPosition( lastNode, 4 ) ;
+ }
+ else
+ doc.execCommand( 'inserthtml', false, html ) ;
+
+ this.Focus() ;
+
+ // Save the caret position before calling document processor.
+ if ( !range )
+ {
+ range = new FCKDomRange( this.EditorWindow ) ;
+ range.MoveToSelection() ;
+ }
+ var bookmark = range.CreateBookmark() ;
+
+ FCKDocumentProcessor.Process( doc ) ;
+
+ // Restore caret position, ignore any errors in case the document
+ // processor removed the bookmark <span>s for some reason.
+ try
+ {
+ range.MoveToBookmark( bookmark ) ;
+ range.Select() ;
+ }
+ catch ( e ) {}
+
+ // For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
+ this.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCK.PasteAsPlainText = function()
+{
+ // TODO: Implement the "Paste as Plain Text" code.
+
+ // If the function is called immediately Firefox 2 does automatically paste the contents as soon as the new dialog is created
+ // so we run it in a Timeout and the paste event can be cancelled
+ FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText'] ) ;
+
+/*
+ var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
+ sText = sText.replace( /\n/g, '<BR>' ) ;
+ this.InsertHtml( sText ) ;
+*/
+}
+/*
+FCK.PasteFromWord = function()
+{
+ // TODO: Implement the "Paste as Plain Text" code.
+
+ FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+
+// FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
+}
+*/
+FCK.GetClipboardHTML = function()
+{
+ return '' ;
+}
+
+FCK.CreateLink = function( url, noUndo )
+{
+ // Creates the array that will be returned. It contains one or more created links (see #220).
+ var aCreatedLinks = new Array() ;
+
+ // Only for Safari, a collapsed selection may create a link. All other
+ // browser will have no links created. So, we check it here and return
+ // immediatelly, having the same cross browser behavior.
+ if ( FCKSelection.GetSelection().isCollapsed )
+ return aCreatedLinks ;
+
+ FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ;
+
+ if ( url.length > 0 )
+ {
+ // Generate a temporary name for the link.
+ var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+
+ // Use the internal "CreateLink" command to create the link.
+ FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ;
+
+ // Retrieve the just created links using XPath.
+ var oLinksInteractor = this.EditorDocument.evaluate("//a[@href='" + sTempUrl + "']", this.EditorDocument.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null) ;
+
+ // Add all links to the returning array.
+ for ( var i = 0 ; i < oLinksInteractor.snapshotLength ; i++ )
+ {
+ var oLink = oLinksInteractor.snapshotItem( i ) ;
+ oLink.href = url ;
+
+ aCreatedLinks.push( oLink ) ;
+ }
+ }
+
+ return aCreatedLinks ;
+}
+
+FCK._FillEmptyBlock = function( emptyBlockNode )
+{
+ if ( ! emptyBlockNode || emptyBlockNode.nodeType != 1 )
+ return ;
+ var nodeTag = emptyBlockNode.tagName.toLowerCase() ;
+ if ( nodeTag != 'p' && nodeTag != 'div' )
+ return ;
+ if ( emptyBlockNode.firstChild )
+ return ;
+ FCKTools.AppendBogusBr( emptyBlockNode ) ;
+}
+
+FCK._ExecCheckEmptyBlock = function()
+{
+ FCK._FillEmptyBlock( FCK.EditorDocument.body.firstChild ) ;
+ var sel = FCKSelection.GetSelection() ;
+ if ( !sel || sel.rangeCount < 1 )
+ return ;
+ var range = sel.getRangeAt( 0 );
+ FCK._FillEmptyBlock( range.startContainer ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_ie.js
new file mode 100644
index 0000000..0914f83
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_ie.js
@@ -0,0 +1,456 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main
+ * object that represents an editor instance.
+ * (IE specific implementations)
+ */
+
+FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
+
+FCK._GetBehaviorsStyle = function()
+{
+ if ( !FCK._BehaviorsStyle )
+ {
+ var sBasePath = FCKConfig.BasePath ;
+ var sTableBehavior = '' ;
+ var sStyle ;
+
+ // The behaviors should be pointed using the BasePath to avoid security
+ // errors when using a different BaseHref.
+ sStyle = '<style type="text/css" _fcktemp="true">' ;
+
+ if ( FCKConfig.ShowBorders )
+ sTableBehavior = 'url(' + sBasePath + 'css/behaviors/showtableborders.htc)' ;
+
+ // Disable resize handlers.
+ sStyle += 'INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak,.FCK__InputHidden' ;
+
+ if ( FCKConfig.DisableObjectResizing )
+ {
+ sStyle += ',IMG' ;
+ sTableBehavior += ' url(' + sBasePath + 'css/behaviors/disablehandles.htc)' ;
+ }
+
+ sStyle += ' { behavior: url(' + sBasePath + 'css/behaviors/disablehandles.htc) ; }' ;
+
+ if ( sTableBehavior.length > 0 )
+ sStyle += 'TABLE { behavior: ' + sTableBehavior + ' ; }' ;
+
+ sStyle += '</style>' ;
+ FCK._BehaviorsStyle = sStyle ;
+ }
+
+ return FCK._BehaviorsStyle ;
+}
+
+function Doc_OnMouseUp()
+{
+ if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' )
+ {
+ FCK.Focus() ;
+ FCK.EditorWindow.event.cancelBubble = true ;
+ FCK.EditorWindow.event.returnValue = false ;
+ }
+}
+
+function Doc_OnPaste()
+{
+ var body = FCK.EditorDocument.body ;
+
+ body.detachEvent( 'onpaste', Doc_OnPaste ) ;
+
+ var ret = FCK.Paste( !FCKConfig.ForcePasteAsPlainText && !FCKConfig.AutoDetectPasteFromWord ) ;
+
+ body.attachEvent( 'onpaste', Doc_OnPaste ) ;
+
+ return ret ;
+}
+
+function Doc_OnDblClick()
+{
+ FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
+ FCK.EditorWindow.event.cancelBubble = true ;
+}
+
+function Doc_OnSelectionChange()
+{
+ // Don't fire the event if no document is loaded.
+ if ( !FCK.IsSelectionChangeLocked && FCK.EditorDocument )
+ FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+function Doc_OnDrop()
+{
+ if ( FCK.MouseDownFlag )
+ {
+ FCK.MouseDownFlag = false ;
+ return ;
+ }
+
+ if ( FCKConfig.ForcePasteAsPlainText )
+ {
+ var evt = FCK.EditorWindow.event ;
+
+ if ( FCK._CheckIsPastingEnabled() || FCKConfig.ShowDropDialog )
+ FCK.PasteAsPlainText( evt.dataTransfer.getData( 'Text' ) ) ;
+
+ evt.returnValue = false ;
+ evt.cancelBubble = true ;
+ }
+}
+
+FCK.InitializeBehaviors = function( dontReturn )
+{
+ // Set the focus to the editable area when clicking in the document area.
+ // TODO: The cursor must be positioned at the end.
+ this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ;
+
+ // Intercept pasting operations
+ this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ;
+
+ // Intercept drop operations
+ this.EditorDocument.body.attachEvent( 'ondrop', Doc_OnDrop ) ;
+
+ // Reset the context menu.
+ FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ;
+
+ this.EditorDocument.attachEvent("onkeydown", FCK._KeyDownListener ) ;
+
+ this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ;
+
+ this.EditorDocument.attachEvent("onbeforedeactivate", function(){ FCKSelection.Save() ; } ) ;
+
+ // Catch cursor selection changes.
+ this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ;
+
+ FCKTools.AddEventListener( FCK.EditorDocument, 'mousedown', Doc_OnMouseDown ) ;
+}
+
+FCK.InsertHtml = function( html )
+{
+ html = FCKConfig.ProtectedSource.Protect( html ) ;
+ html = FCK.ProtectEvents( html ) ;
+ html = FCK.ProtectUrls( html ) ;
+ html = FCK.ProtectTags( html ) ;
+
+// FCK.Focus() ;
+ FCKSelection.Restore() ;
+ FCK.EditorWindow.focus() ;
+
+ FCKUndo.SaveUndoStep() ;
+
+ // Gets the actual selection.
+ var oSel = FCKSelection.GetSelection() ;
+
+ // Deletes the actual selection contents.
+ if ( oSel.type.toLowerCase() == 'control' )
+ oSel.clear() ;
+
+ // Using the following trick, any comment in the beginning of the HTML will
+ // be preserved.
+ html = '<span id="__fakeFCKRemove__" style="display:none;">fakeFCKRemove</span>' + html ;
+
+ // Insert the HTML.
+ oSel.createRange().pasteHTML( html ) ;
+
+ // Remove the fake node
+ FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+
+ FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+
+ // For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
+ this.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCK.SetInnerHtml = function( html ) // IE Only
+{
+ var oDoc = FCK.EditorDocument ;
+ // Using the following trick, any comment in the beginning of the HTML will
+ // be preserved.
+ oDoc.body.innerHTML = '<div id="__fakeFCKRemove__">&nbsp;</div>' + html ;
+ oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+}
+
+function FCK_PreloadImages()
+{
+ var oPreloader = new FCKImagePreloader() ;
+
+ // Add the configured images.
+ oPreloader.AddImages( FCKConfig.PreloadImages ) ;
+
+ // Add the skin icons strip.
+ oPreloader.AddImages( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
+
+ oPreloader.OnComplete = LoadToolbarSetup ;
+ oPreloader.Start() ;
+}
+
+// Disable the context menu in the editor (outside the editing area).
+function Document_OnContextMenu()
+{
+ return ( event.srcElement._FCKShowContextMenu == true ) ;
+}
+document.oncontextmenu = Document_OnContextMenu ;
+
+function FCK_Cleanup()
+{
+ this.LinkedField = null ;
+ this.EditorWindow = null ;
+ this.EditorDocument = null ;
+}
+
+FCK._ExecPaste = function()
+{
+ // As we call ExecuteNamedCommand('Paste'), it would enter in a loop. So, let's use a semaphore.
+ if ( FCK._PasteIsRunning )
+ return true ;
+
+ if ( FCKConfig.ForcePasteAsPlainText )
+ {
+ FCK.PasteAsPlainText() ;
+ return false ;
+ }
+
+ var sHTML = FCK._CheckIsPastingEnabled( true ) ;
+
+ if ( sHTML === false )
+ FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ;
+ else
+ {
+ if ( FCKConfig.AutoDetectPasteFromWord && sHTML.length > 0 )
+ {
+ var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ;
+ if ( re.test( sHTML ) )
+ {
+ if ( confirm( FCKLang.PasteWordConfirm ) )
+ {
+ FCK.PasteFromWord() ;
+ return false ;
+ }
+ }
+ }
+
+ // Instead of inserting the retrieved HTML, let's leave the OS work for us,
+ // by calling FCK.ExecuteNamedCommand( 'Paste' ). It could give better results.
+
+ // Enable the semaphore to avoid a loop.
+ FCK._PasteIsRunning = true ;
+
+ FCK.ExecuteNamedCommand( 'Paste' ) ;
+
+ // Removes the semaphore.
+ delete FCK._PasteIsRunning ;
+ }
+
+ // Let's always make a custom implementation (return false), otherwise
+ // the new Keyboard Handler may conflict with this code, and the CTRL+V code
+ // could result in a simple "V" being pasted.
+ return false ;
+}
+
+FCK.PasteAsPlainText = function( forceText )
+{
+ if ( !FCK._CheckIsPastingEnabled() )
+ {
+ FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ;
+ return ;
+ }
+
+ // Get the data available in the clipboard in text format.
+ var sText = null ;
+ if ( ! forceText )
+ sText = clipboardData.getData("Text") ;
+ else
+ sText = forceText ;
+
+ if ( sText && sText.length > 0 )
+ {
+ // Replace the carriage returns with <BR>
+ sText = FCKTools.HTMLEncode( sText ) ;
+ sText = FCKTools.ProcessLineBreaks( window, FCKConfig, sText ) ;
+
+ var closeTagIndex = sText.search( '</p>' ) ;
+ var startTagIndex = sText.search( '<p>' ) ;
+
+ if ( ( closeTagIndex != -1 && startTagIndex != -1 && closeTagIndex < startTagIndex )
+ || ( closeTagIndex != -1 && startTagIndex == -1 ) )
+ {
+ var prefix = sText.substr( 0, closeTagIndex ) ;
+ sText = sText.substr( closeTagIndex + 4 ) ;
+ this.InsertHtml( prefix ) ;
+ }
+
+ // Insert the resulting data in the editor.
+ FCKUndo.SaveLocked = true ;
+ this.InsertHtml( sText ) ;
+ FCKUndo.SaveLocked = false ;
+ }
+}
+
+FCK._CheckIsPastingEnabled = function( returnContents )
+{
+ // The following seams to be the only reliable way to check is script
+ // pasting operations are enabled in the security settings of IE6 and IE7.
+ // It adds a little bit of overhead to the check, but so far that's the
+ // only way, mainly because of IE7.
+
+ FCK._PasteIsEnabled = false ;
+
+ document.body.attachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
+
+ // The execCommand in GetClipboardHTML will fire the "onpaste", only if the
+ // security settings are enabled.
+ var oReturn = FCK.GetClipboardHTML() ;
+
+ document.body.detachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
+
+ if ( FCK._PasteIsEnabled )
+ {
+ if ( !returnContents )
+ oReturn = true ;
+ }
+ else
+ oReturn = false ;
+
+ delete FCK._PasteIsEnabled ;
+
+ return oReturn ;
+}
+
+function FCK_CheckPasting_Listener()
+{
+ FCK._PasteIsEnabled = true ;
+}
+
+FCK.GetClipboardHTML = function()
+{
+ var oDiv = document.getElementById( '___FCKHiddenDiv' ) ;
+
+ if ( !oDiv )
+ {
+ oDiv = document.createElement( 'DIV' ) ;
+ oDiv.id = '___FCKHiddenDiv' ;
+
+ var oDivStyle = oDiv.style ;
+ oDivStyle.position = 'absolute' ;
+ oDivStyle.visibility = oDivStyle.overflow = 'hidden' ;
+ oDivStyle.width = oDivStyle.height = 1 ;
+
+ document.body.appendChild( oDiv ) ;
+ }
+
+ oDiv.innerHTML = '' ;
+
+ var oTextRange = document.body.createTextRange() ;
+ oTextRange.moveToElementText( oDiv ) ;
+ oTextRange.execCommand( 'Paste' ) ;
+
+ var sData = oDiv.innerHTML ;
+ oDiv.innerHTML = '' ;
+
+ return sData ;
+}
+
+FCK.CreateLink = function( url, noUndo )
+{
+ // Creates the array that will be returned. It contains one or more created links (see #220).
+ var aCreatedLinks = new Array() ;
+
+ // Remove any existing link in the selection.
+ FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ;
+
+ if ( url.length > 0 )
+ {
+ // If there are several images, and you try to link each one, all the images get inside the link:
+ // <img><img> -> <a><img></a><img> -> <a><img><img></a> due to the call to 'CreateLink' (bug in IE)
+ if (FCKSelection.GetType() == 'Control')
+ {
+ // Create a link
+ var oLink = this.EditorDocument.createElement( 'A' ) ;
+ oLink.href = url ;
+
+ // Get the selected object
+ var oControl = FCKSelection.GetSelectedElement() ;
+ // Put the link just before the object
+ oControl.parentNode.insertBefore(oLink, oControl) ;
+ // Move the object inside the link
+ oControl.parentNode.removeChild( oControl ) ;
+ oLink.appendChild( oControl ) ;
+
+ return [ oLink ] ;
+ }
+
+ // Generate a temporary name for the link.
+ var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+
+ // Use the internal "CreateLink" command to create the link.
+ FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ;
+
+ // Look for the just create link.
+ var oLinks = this.EditorDocument.links ;
+
+ for ( i = 0 ; i < oLinks.length ; i++ )
+ {
+ var oLink = oLinks[i] ;
+
+ // Check it this a newly created link.
+ // getAttribute must be used. oLink.url may cause problems with IE7 (#555).
+ if ( oLink.getAttribute( 'href', 2 ) == sTempUrl )
+ {
+ var sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL).
+ oLink.href = url ;
+ oLink.innerHTML = sInnerHtml ; // Restore the innerHTML.
+
+ // If the last child is a <br> move it outside the link or it
+ // will be too easy to select this link again #388.
+ var oLastChild = oLink.lastChild ;
+ if ( oLastChild && oLastChild.nodeName == 'BR' )
+ {
+ // Move the BR after the link.
+ FCKDomTools.InsertAfterNode( oLink, oLink.removeChild( oLastChild ) ) ;
+ }
+
+ aCreatedLinks.push( oLink ) ;
+ }
+ }
+ }
+
+ return aCreatedLinks ;
+}
+
+function _FCK_RemoveDisabledAtt()
+{
+ this.removeAttribute( 'disabled' ) ;
+}
+
+function Doc_OnMouseDown( evt )
+{
+ var e = evt.srcElement ;
+
+ // Radio buttons and checkboxes should not be allowed to be triggered in IE
+ // in editable mode. Otherwise the whole browser window may be locked by
+ // the buttons. (#1782)
+ if ( e.nodeName.IEquals( 'input' ) && e.type.IEquals( ['radio', 'checkbox'] ) && !e.disabled )
+ {
+ e.disabled = true ;
+ FCKTools.SetTimeout( _FCK_RemoveDisabledAtt, 1, e ) ;
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckbrowserinfo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckbrowserinfo.js
new file mode 100644
index 0000000..5549b5b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckbrowserinfo.js
@@ -0,0 +1,61 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains browser detection information.
+ */
+
+var s = navigator.userAgent.toLowerCase() ;
+
+var FCKBrowserInfo =
+{
+ IsIE : /*@cc_on!@*/false,
+ IsIE7 : /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 7 ),
+ IsIE6 : /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 6 ),
+ IsSafari : s.Contains(' applewebkit/'), // Read "IsWebKit"
+ IsOpera : !!window.opera,
+ IsAIR : s.Contains(' adobeair/'),
+ IsMac : s.Contains('macintosh')
+} ;
+
+// Completes the browser info with further Gecko information.
+(function( browserInfo )
+{
+ browserInfo.IsGecko = ( navigator.product == 'Gecko' ) && !browserInfo.IsSafari && !browserInfo.IsOpera ;
+ browserInfo.IsGeckoLike = ( browserInfo.IsGecko || browserInfo.IsSafari || browserInfo.IsOpera ) ;
+
+ if ( browserInfo.IsGecko )
+ {
+ var geckoMatch = s.match( /rv:(\d+\.\d+)/ ) ;
+ var geckoVersion = geckoMatch && parseFloat( geckoMatch[1] ) ;
+
+ // Actually "10" refers to Gecko versions before Firefox 1.5, when
+ // Gecko 1.8 (build 20051111) has been released.
+
+ // Some browser (like Mozilla 1.7.13) may have a Gecko build greater
+ // than 20051111, so we must also check for the revision number not to
+ // be 1.7 (we are assuming that rv < 1.7 will not have build > 20051111).
+
+ if ( geckoVersion )
+ {
+ browserInfo.IsGecko10 = ( geckoVersion < 1.8 ) ;
+ browserInfo.IsGecko19 = ( geckoVersion > 1.8 ) ;
+ }
+ }
+})(FCKBrowserInfo) ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcodeformatter.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcodeformatter.js
new file mode 100644
index 0000000..3c8831a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcodeformatter.js
@@ -0,0 +1,100 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Format the HTML.
+ */
+
+var FCKCodeFormatter = new Object() ;
+
+FCKCodeFormatter.Init = function()
+{
+ var oRegex = this.Regex = new Object() ;
+
+ // Regex for line breaks.
+ oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
+ oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
+
+ oRegex.NewLineTags = /\<(BR|HR)[^\>]*\>/gi ;
+
+ oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ;
+
+ oRegex.LineSplitter = /\s*\n+\s*/g ;
+
+ // Regex for indentation.
+ oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \/\>]/i ;
+ oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \>]/i ;
+ oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ;
+
+ oRegex.ProtectedTags = /(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi ;
+}
+
+FCKCodeFormatter._ProtectData = function( outer, opener, data, closer )
+{
+ return opener + '___FCKpd___' + ( FCKCodeFormatter.ProtectedData.push( data ) - 1 ) + closer ;
+}
+
+FCKCodeFormatter.Format = function( html )
+{
+ if ( !this.Regex )
+ this.Init() ;
+
+ // Protected content that remain untouched during the
+ // process go in the following array.
+ FCKCodeFormatter.ProtectedData = new Array() ;
+
+ var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ;
+
+ // Line breaks.
+ sFormatted = sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ;
+ sFormatted = sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ;
+ sFormatted = sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ;
+ sFormatted = sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ;
+
+ // Indentation.
+ var sIndentation = '' ;
+
+ var asLines = sFormatted.split( this.Regex.LineSplitter ) ;
+ sFormatted = '' ;
+
+ for ( var i = 0 ; i < asLines.length ; i++ )
+ {
+ var sLine = asLines[i] ;
+
+ if ( sLine.length == 0 )
+ continue ;
+
+ if ( this.Regex.DecreaseIndent.test( sLine ) )
+ sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ;
+
+ sFormatted += sIndentation + sLine + '\n' ;
+
+ if ( this.Regex.IncreaseIndent.test( sLine ) )
+ sIndentation += FCKConfig.FormatIndentator ;
+ }
+
+ // Now we put back the protected data.
+ for ( var j = 0 ; j < FCKCodeFormatter.ProtectedData.length ; j++ )
+ {
+ var oRegex = new RegExp( '___FCKpd___' + j ) ;
+ sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[j].replace( /\$/g, '$$$$' ) ) ;
+ }
+
+ return sFormatted.Trim() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcommands.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcommands.js
new file mode 100644
index 0000000..a6a68a1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcommands.js
@@ -0,0 +1,172 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Define all commands available in the editor.
+ */
+
+var FCKCommands = FCK.Commands = new Object() ;
+FCKCommands.LoadedCommands = new Object() ;
+
+FCKCommands.RegisterCommand = function( commandName, command )
+{
+ this.LoadedCommands[ commandName ] = command ;
+}
+
+FCKCommands.GetCommand = function( commandName )
+{
+ var oCommand = FCKCommands.LoadedCommands[ commandName ] ;
+
+ if ( oCommand )
+ return oCommand ;
+
+ switch ( commandName )
+ {
+ case 'Bold' :
+ case 'Italic' :
+ case 'Underline' :
+ case 'StrikeThrough':
+ case 'Subscript' :
+ case 'Superscript' : oCommand = new FCKCoreStyleCommand( commandName ) ; break ;
+
+ case 'RemoveFormat' : oCommand = new FCKRemoveFormatCommand() ; break ;
+
+ case 'DocProps' : oCommand = new FCKDialogCommand( 'DocProps' , FCKLang.DocProps , 'dialog/fck_docprops.html' , 400, 380, FCKCommands.GetFullPageState ) ; break ;
+ case 'Templates' : oCommand = new FCKDialogCommand( 'Templates' , FCKLang.DlgTemplatesTitle , 'dialog/fck_template.html' , 380, 450 ) ; break ;
+ case 'Link' : oCommand = new FCKDialogCommand( 'Link' , FCKLang.DlgLnkWindowTitle , 'dialog/fck_link.html' , 400, 300 ) ; break ;
+ case 'Unlink' : oCommand = new FCKUnlinkCommand() ; break ;
+ case 'VisitLink' : oCommand = new FCKVisitLinkCommand() ; break ;
+ case 'Anchor' : oCommand = new FCKDialogCommand( 'Anchor' , FCKLang.DlgAnchorTitle , 'dialog/fck_anchor.html' , 370, 160 ) ; break ;
+ case 'AnchorDelete' : oCommand = new FCKAnchorDeleteCommand() ; break ;
+ case 'BulletedList' : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp , 'dialog/fck_listprop.html?UL' , 370, 160 ) ; break ;
+ case 'NumberedList' : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp , 'dialog/fck_listprop.html?OL' , 370, 160 ) ; break ;
+ case 'About' : oCommand = new FCKDialogCommand( 'About' , FCKLang.About , 'dialog/fck_about.html' , 420, 330, function(){ return FCK_TRISTATE_OFF ; } ) ; break ;
+ case 'Find' : oCommand = new FCKDialogCommand( 'Find' , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html' , 340, 230, null, null, 'Find' ) ; break ;
+ case 'Replace' : oCommand = new FCKDialogCommand( 'Replace' , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html' , 340, 230, null, null, 'Replace' ) ; break ;
+
+ case 'Image' : oCommand = new FCKDialogCommand( 'Image' , FCKLang.DlgImgTitle , 'dialog/fck_image.html' , 450, 390 ) ; break ;
+ case 'Flash' : oCommand = new FCKDialogCommand( 'Flash' , FCKLang.DlgFlashTitle , 'dialog/fck_flash.html' , 450, 390 ) ; break ;
+ case 'SpecialChar' : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle , 'dialog/fck_specialchar.html' , 400, 290 ) ; break ;
+ case 'Smiley' : oCommand = new FCKDialogCommand( 'Smiley' , FCKLang.DlgSmileyTitle , 'dialog/fck_smiley.html' , FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ;
+ case 'Table' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html' , 480, 250 ) ; break ;
+ case 'TableProp' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html?Parent', 480, 250 ) ; break ;
+ case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell' , FCKLang.DlgCellTitle , 'dialog/fck_tablecell.html' , 550, 240 ) ; break ;
+
+ case 'Style' : oCommand = new FCKStyleCommand() ; break ;
+
+ case 'FontName' : oCommand = new FCKFontNameCommand() ; break ;
+ case 'FontSize' : oCommand = new FCKFontSizeCommand() ; break ;
+ case 'FontFormat' : oCommand = new FCKFormatBlockCommand() ; break ;
+
+ case 'Source' : oCommand = new FCKSourceCommand() ; break ;
+ case 'Preview' : oCommand = new FCKPreviewCommand() ; break ;
+ case 'Save' : oCommand = new FCKSaveCommand() ; break ;
+ case 'NewPage' : oCommand = new FCKNewPageCommand() ; break ;
+ case 'PageBreak' : oCommand = new FCKPageBreakCommand() ; break ;
+ case 'Rule' : oCommand = new FCKRuleCommand() ; break ;
+ case 'Nbsp' : oCommand = new FCKNbsp() ; break ;
+
+ case 'TextColor' : oCommand = new FCKTextColorCommand('ForeColor') ; break ;
+ case 'BGColor' : oCommand = new FCKTextColorCommand('BackColor') ; break ;
+
+ case 'Paste' : oCommand = new FCKPasteCommand() ; break ;
+ case 'PasteText' : oCommand = new FCKPastePlainTextCommand() ; break ;
+ case 'PasteWord' : oCommand = new FCKPasteWordCommand() ; break ;
+
+ case 'JustifyLeft' : oCommand = new FCKJustifyCommand( 'left' ) ; break ;
+ case 'JustifyCenter' : oCommand = new FCKJustifyCommand( 'center' ) ; break ;
+ case 'JustifyRight' : oCommand = new FCKJustifyCommand( 'right' ) ; break ;
+ case 'JustifyFull' : oCommand = new FCKJustifyCommand( 'justify' ) ; break ;
+ case 'Indent' : oCommand = new FCKIndentCommand( 'indent', FCKConfig.IndentLength ) ; break ;
+ case 'Outdent' : oCommand = new FCKIndentCommand( 'outdent', FCKConfig.IndentLength * -1 ) ; break ;
+ case 'Blockquote' : oCommand = new FCKBlockQuoteCommand() ; break ;
+ case 'CreateDiv' : oCommand = new FCKDialogCommand( 'CreateDiv', FCKLang.CreateDiv, 'dialog/fck_div.html', 380, 210, null, null, true ) ; break ;
+ case 'EditDiv' : oCommand = new FCKDialogCommand( 'EditDiv', FCKLang.EditDiv, 'dialog/fck_div.html', 380, 210, null, null, false ) ; break ;
+ case 'DeleteDiv' : oCommand = new FCKDeleteDivCommand() ; break ;
+
+ case 'TableInsertRowAfter' : oCommand = new FCKTableCommand('TableInsertRowAfter') ; break ;
+ case 'TableInsertRowBefore' : oCommand = new FCKTableCommand('TableInsertRowBefore') ; break ;
+ case 'TableDeleteRows' : oCommand = new FCKTableCommand('TableDeleteRows') ; break ;
+ case 'TableInsertColumnAfter' : oCommand = new FCKTableCommand('TableInsertColumnAfter') ; break ;
+ case 'TableInsertColumnBefore' : oCommand = new FCKTableCommand('TableInsertColumnBefore') ; break ;
+ case 'TableDeleteColumns' : oCommand = new FCKTableCommand('TableDeleteColumns') ; break ;
+ case 'TableInsertCellAfter' : oCommand = new FCKTableCommand('TableInsertCellAfter') ; break ;
+ case 'TableInsertCellBefore' : oCommand = new FCKTableCommand('TableInsertCellBefore') ; break ;
+ case 'TableDeleteCells' : oCommand = new FCKTableCommand('TableDeleteCells') ; break ;
+ case 'TableMergeCells' : oCommand = new FCKTableCommand('TableMergeCells') ; break ;
+ case 'TableMergeRight' : oCommand = new FCKTableCommand('TableMergeRight') ; break ;
+ case 'TableMergeDown' : oCommand = new FCKTableCommand('TableMergeDown') ; break ;
+ case 'TableHorizontalSplitCell' : oCommand = new FCKTableCommand('TableHorizontalSplitCell') ; break ;
+ case 'TableVerticalSplitCell' : oCommand = new FCKTableCommand('TableVerticalSplitCell') ; break ;
+ case 'TableDelete' : oCommand = new FCKTableCommand('TableDelete') ; break ;
+
+ case 'Form' : oCommand = new FCKDialogCommand( 'Form' , FCKLang.Form , 'dialog/fck_form.html' , 380, 210 ) ; break ;
+ case 'Checkbox' : oCommand = new FCKDialogCommand( 'Checkbox' , FCKLang.Checkbox , 'dialog/fck_checkbox.html' , 380, 200 ) ; break ;
+ case 'Radio' : oCommand = new FCKDialogCommand( 'Radio' , FCKLang.RadioButton , 'dialog/fck_radiobutton.html' , 380, 200 ) ; break ;
+ case 'TextField' : oCommand = new FCKDialogCommand( 'TextField' , FCKLang.TextField , 'dialog/fck_textfield.html' , 380, 210 ) ; break ;
+ case 'Textarea' : oCommand = new FCKDialogCommand( 'Textarea' , FCKLang.Textarea , 'dialog/fck_textarea.html' , 380, 210 ) ; break ;
+ case 'HiddenField' : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField , 'dialog/fck_hiddenfield.html' , 380, 190 ) ; break ;
+ case 'Button' : oCommand = new FCKDialogCommand( 'Button' , FCKLang.Button , 'dialog/fck_button.html' , 380, 210 ) ; break ;
+ case 'Select' : oCommand = new FCKDialogCommand( 'Select' , FCKLang.SelectionField, 'dialog/fck_select.html' , 400, 340 ) ; break ;
+ case 'ImageButton' : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton , 'dialog/fck_image.html?ImageButton', 450, 390 ) ; break ;
+
+ case 'SpellCheck' : oCommand = new FCKSpellCheckCommand() ; break ;
+ case 'FitWindow' : oCommand = new FCKFitWindow() ; break ;
+
+ case 'Undo' : oCommand = new FCKUndoCommand() ; break ;
+ case 'Redo' : oCommand = new FCKRedoCommand() ; break ;
+ case 'Copy' : oCommand = new FCKCutCopyCommand( false ) ; break ;
+ case 'Cut' : oCommand = new FCKCutCopyCommand( true ) ; break ;
+
+ case 'SelectAll' : oCommand = new FCKSelectAllCommand() ; break ;
+ case 'InsertOrderedList' : oCommand = new FCKListCommand( 'insertorderedlist', 'ol' ) ; break ;
+ case 'InsertUnorderedList' : oCommand = new FCKListCommand( 'insertunorderedlist', 'ul' ) ; break ;
+ case 'ShowBlocks' : oCommand = new FCKShowBlockCommand( 'ShowBlocks', FCKConfig.StartupShowBlocks ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ) ; break ;
+
+ // Generic Undefined command (usually used when a command is under development).
+ case 'Undefined' : oCommand = new FCKUndefinedCommand() ; break ;
+
+ // By default we assume that it is a named command.
+ default:
+ if ( FCKRegexLib.NamedCommands.test( commandName ) )
+ oCommand = new FCKNamedCommand( commandName ) ;
+ else
+ {
+ alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ;
+ return null ;
+ }
+ }
+
+ FCKCommands.LoadedCommands[ commandName ] = oCommand ;
+
+ return oCommand ;
+}
+
+// Gets the state of the "Document Properties" button. It must be enabled only
+// when "Full Page" editing is available.
+FCKCommands.GetFullPageState = function()
+{
+ return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
+
+
+FCKCommands.GetBooleanState = function( isDisabled )
+{
+ return isDisabled ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_OFF ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckconfig.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckconfig.js
new file mode 100644
index 0000000..bf5f4c2
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckconfig.js
@@ -0,0 +1,237 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creates and initializes the FCKConfig object.
+ */
+
+var FCKConfig = FCK.Config = new Object() ;
+
+/*
+ For the next major version (probably 3.0) we should move all this stuff to
+ another dedicated object and leave FCKConfig as a holder object for settings only).
+*/
+
+// Editor Base Path
+if ( document.location.protocol == 'file:' )
+{
+ FCKConfig.BasePath = decodeURIComponent( document.location.pathname.substr(1) ) ;
+ FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
+
+ // The way to address local files is different according to the OS.
+ // In Windows it is file:// but in MacOs it is file:/// so let's get it automatically
+ var sFullProtocol = document.location.href.match( /^(file\:\/{2,3})/ )[1] ;
+ // #945 Opera does strange things with files loaded from the disk, and it fails in Mac to load xml files
+ if ( FCKBrowserInfo.IsOpera )
+ sFullProtocol += 'localhost/' ;
+
+ FCKConfig.BasePath = sFullProtocol + FCKConfig.BasePath.substring( 0, FCKConfig.BasePath.lastIndexOf( '/' ) + 1) ;
+}
+else
+ FCKConfig.BasePath = document.location.protocol + '//' + document.location.host +
+ document.location.pathname.substring( 0, document.location.pathname.lastIndexOf( '/' ) + 1) ;
+
+FCKConfig.FullBasePath = FCKConfig.BasePath ;
+
+FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ;
+
+// There is a bug in Gecko. If the editor is hidden on startup, an error is
+// thrown when trying to get the screen dimensions.
+try
+{
+ FCKConfig.ScreenWidth = screen.width ;
+ FCKConfig.ScreenHeight = screen.height ;
+}
+catch (e)
+{
+ FCKConfig.ScreenWidth = 800 ;
+ FCKConfig.ScreenHeight = 600 ;
+}
+
+// Override the actual configuration values with the values passed throw the
+// hidden field "<InstanceName>___Config".
+FCKConfig.ProcessHiddenField = function()
+{
+ this.PageConfig = new Object() ;
+
+ // Get the hidden field.
+ var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ;
+
+ // Do nothing if the config field was not defined.
+ if ( ! oConfigField ) return ;
+
+ var aCouples = oConfigField.value.split('&') ;
+
+ for ( var i = 0 ; i < aCouples.length ; i++ )
+ {
+ if ( aCouples[i].length == 0 )
+ continue ;
+
+ var aConfig = aCouples[i].split( '=' ) ;
+ var sKey = decodeURIComponent( aConfig[0] ) ;
+ var sVal = decodeURIComponent( aConfig[1] ) ;
+
+ if ( sKey == 'CustomConfigurationsPath' ) // The Custom Config File path must be loaded immediately.
+ FCKConfig[ sKey ] = sVal ;
+
+ else if ( sVal.toLowerCase() == "true" ) // If it is a boolean TRUE.
+ this.PageConfig[ sKey ] = true ;
+
+ else if ( sVal.toLowerCase() == "false" ) // If it is a boolean FALSE.
+ this.PageConfig[ sKey ] = false ;
+
+ else if ( sVal.length > 0 && !isNaN( sVal ) ) // If it is a number.
+ this.PageConfig[ sKey ] = parseInt( sVal, 10 ) ;
+
+ else // In any other case it is a string.
+ this.PageConfig[ sKey ] = sVal ;
+ }
+}
+
+function FCKConfig_LoadPageConfig()
+{
+ var oPageConfig = FCKConfig.PageConfig ;
+ for ( var sKey in oPageConfig )
+ FCKConfig[ sKey ] = oPageConfig[ sKey ] ;
+}
+
+function FCKConfig_PreProcess()
+{
+ var oConfig = FCKConfig ;
+
+ // Force debug mode if fckdebug=true in the QueryString (main page).
+ if ( oConfig.AllowQueryStringDebug )
+ {
+ try
+ {
+ if ( (/fckdebug=true/i).test( window.top.location.search ) )
+ oConfig.Debug = true ;
+ }
+ catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
+ }
+
+ // Certifies that the "PluginsPath" configuration ends with a slash.
+ if ( !oConfig.PluginsPath.EndsWith('/') )
+ oConfig.PluginsPath += '/' ;
+
+ // If no ToolbarComboPreviewCSS, point it to EditorAreaCSS.
+ var sComboPreviewCSS = oConfig.ToolbarComboPreviewCSS ;
+ if ( !sComboPreviewCSS || sComboPreviewCSS.length == 0 )
+ oConfig.ToolbarComboPreviewCSS = oConfig.EditorAreaCSS ;
+
+ // Turn the attributes that will be removed in the RemoveFormat from a string to an array
+ oConfig.RemoveAttributesArray = (oConfig.RemoveAttributes || '').split( ',' );
+
+ if ( !FCKConfig.SkinEditorCSS || FCKConfig.SkinEditorCSS.length == 0 )
+ FCKConfig.SkinEditorCSS = FCKConfig.SkinPath + 'fck_editor.css' ;
+
+ if ( !FCKConfig.SkinDialogCSS || FCKConfig.SkinDialogCSS.length == 0 )
+ FCKConfig.SkinDialogCSS = FCKConfig.SkinPath + 'fck_dialog.css' ;
+}
+
+// Define toolbar sets collection.
+FCKConfig.ToolbarSets = new Object() ;
+
+// Defines the plugins collection.
+FCKConfig.Plugins = new Object() ;
+FCKConfig.Plugins.Items = new Array() ;
+
+FCKConfig.Plugins.Add = function( name, langs, path )
+{
+ FCKConfig.Plugins.Items.push( [name, langs, path] ) ;
+}
+
+// FCKConfig.ProtectedSource: object that holds a collection of Regular
+// Expressions that defined parts of the raw HTML that must remain untouched
+// like custom tags, scripts, server side code, etc...
+FCKConfig.ProtectedSource = new Object() ;
+
+// Generates a string used to identify and locate the Protected Tags comments.
+FCKConfig.ProtectedSource._CodeTag = (new Date()).valueOf() ;
+
+// Initialize the regex array with the default ones.
+FCKConfig.ProtectedSource.RegexEntries = [
+ // First of any other protection, we must protect all comments to avoid
+ // loosing them (of course, IE related).
+ /<!--[\s\S]*?-->/g ,
+
+ // Script tags will also be forced to be protected, otherwise IE will execute them.
+ /<script[\s\S]*?<\/script>/gi,
+
+ // <noscript> tags (get lost in IE and messed up in FF).
+ /<noscript[\s\S]*?<\/noscript>/gi
+] ;
+
+FCKConfig.ProtectedSource.Add = function( regexPattern )
+{
+ this.RegexEntries.push( regexPattern ) ;
+}
+
+FCKConfig.ProtectedSource.Protect = function( html )
+{
+ var codeTag = this._CodeTag ;
+ function _Replace( protectedSource )
+ {
+ var index = FCKTempBin.AddElement( protectedSource ) ;
+ return '<!--{' + codeTag + index + '}-->' ;
+ }
+
+ for ( var i = 0 ; i < this.RegexEntries.length ; i++ )
+ {
+ html = html.replace( this.RegexEntries[i], _Replace ) ;
+ }
+
+ return html ;
+}
+
+FCKConfig.ProtectedSource.Revert = function( html, clearBin )
+{
+ function _Replace( m, opener, index )
+ {
+ var protectedValue = clearBin ? FCKTempBin.RemoveElement( index ) : FCKTempBin.Elements[ index ] ;
+ // There could be protected source inside another one.
+ return FCKConfig.ProtectedSource.Revert( protectedValue, clearBin ) ;
+ }
+
+ var regex = new RegExp( "(<|&lt;)!--\\{" + this._CodeTag + "(\\d+)\\}--(>|&gt;)", "g" ) ;
+ return html.replace( regex, _Replace ) ;
+}
+
+// Returns a string with the attributes that must be appended to the body
+FCKConfig.GetBodyAttributes = function()
+{
+ var bodyAttributes = '' ;
+ // Add id and class to the body.
+ if ( this.BodyId && this.BodyId.length > 0 )
+ bodyAttributes += ' id="' + this.BodyId + '"' ;
+ if ( this.BodyClass && this.BodyClass.length > 0 )
+ bodyAttributes += ' class="' + this.BodyClass + '"' ;
+
+ return bodyAttributes ;
+}
+
+// Sets the body attributes directly on the node
+FCKConfig.ApplyBodyAttributes = function( oBody )
+{
+ // Add ID and Class to the body
+ if ( this.BodyId && this.BodyId.length > 0 )
+ oBody.id = FCKConfig.BodyId ;
+ if ( this.BodyClass && this.BodyClass.length > 0 )
+ oBody.className += ' ' + FCKConfig.BodyClass ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug.js
new file mode 100644
index 0000000..b3f262d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug.js
@@ -0,0 +1,59 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Debug window control and operations.
+ */
+
+// Public function defined here must be declared in fckdebug_empty.js.
+
+var FCKDebug =
+{
+ Output : function( message, color, noParse )
+ {
+ if ( ! FCKConfig.Debug )
+ return ;
+
+ try
+ {
+ this._GetWindow().Output( message, color, noParse ) ;
+ }
+ catch ( e ) {} // Ignore errors
+ },
+
+ OutputObject : function( anyObject, color )
+ {
+ if ( ! FCKConfig.Debug )
+ return ;
+
+ try
+ {
+ this._GetWindow().OutputObject( anyObject, color ) ;
+ }
+ catch ( e ) {} // Ignore errors
+ },
+
+ _GetWindow : function()
+ {
+ if ( !this.DebugWindow || this.DebugWindow.closed )
+ this.DebugWindow = window.open( FCKConfig.BasePath + 'fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500', true ) ;
+
+ return this.DebugWindow ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug_empty.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug_empty.js
new file mode 100644
index 0000000..7a27f25
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug_empty.js
@@ -0,0 +1,31 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Debug window control and operations (empty for the compressed files - #2043).
+ */
+
+var FCKDebug =
+{
+ Output : function()
+ {},
+
+ OutputObject : function()
+ {}
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdialog.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdialog.js
new file mode 100644
index 0000000..febc735
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdialog.js
@@ -0,0 +1,239 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dialog windows operations.
+ */
+
+var FCKDialog = ( function()
+{
+ var topDialog ;
+ var baseZIndex ;
+ var cover ;
+
+ // The document that holds the dialog.
+ var topWindow = window.parent ;
+
+ while ( topWindow.parent && topWindow.parent != topWindow )
+ {
+ try
+ {
+ if ( topWindow.parent.document.domain != document.domain )
+ break ;
+ if ( topWindow.parent.document.getElementsByTagName( 'frameset' ).length > 0 )
+ break ;
+ }
+ catch ( e )
+ {
+ break ;
+ }
+ topWindow = topWindow.parent ;
+ }
+
+ var topDocument = topWindow.document ;
+
+ var getZIndex = function()
+ {
+ if ( !baseZIndex )
+ baseZIndex = FCKConfig.FloatingPanelsZIndex + 999 ;
+ return ++baseZIndex ;
+ }
+
+ // TODO : This logic is not actually working when reducing the window, only
+ // when enlarging it.
+ var resizeHandler = function()
+ {
+ if ( !cover )
+ return ;
+
+ var relElement = FCKTools.IsStrictMode( topDocument ) ? topDocument.documentElement : topDocument.body ;
+
+ FCKDomTools.SetElementStyles( cover,
+ {
+ 'width' : Math.max( relElement.scrollWidth,
+ relElement.clientWidth,
+ topDocument.scrollWidth || 0 ) - 1 + 'px',
+ 'height' : Math.max( relElement.scrollHeight,
+ relElement.clientHeight,
+ topDocument.scrollHeight || 0 ) - 1 + 'px'
+ } ) ;
+ }
+
+ return {
+ /**
+ * Opens a dialog window using the standard dialog template.
+ */
+ OpenDialog : function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable )
+ {
+ if ( !topDialog )
+ this.DisplayMainCover() ;
+
+ // Setup the dialog info to be passed to the dialog.
+ var dialogInfo =
+ {
+ Title : dialogTitle,
+ Page : dialogPage,
+ Editor : window,
+ CustomValue : customValue, // Optional
+ TopWindow : topWindow
+ }
+
+ FCK.ToolbarSet.CurrentInstance.Selection.Save( true ) ;
+
+ // Calculate the dialog position, centering it on the screen.
+ var viewSize = FCKTools.GetViewPaneSize( topWindow ) ;
+ var scrollPosition = { 'X' : 0, 'Y' : 0 } ;
+ var useAbsolutePosition = FCKBrowserInfo.IsIE && ( !FCKBrowserInfo.IsIE7 || !FCKTools.IsStrictMode( topWindow.document ) ) ;
+ if ( useAbsolutePosition )
+ scrollPosition = FCKTools.GetScrollPosition( topWindow ) ;
+ var iTop = Math.max( scrollPosition.Y + ( viewSize.Height - height - 20 ) / 2, 0 ) ;
+ var iLeft = Math.max( scrollPosition.X + ( viewSize.Width - width - 20 ) / 2, 0 ) ;
+
+ // Setup the IFRAME that will hold the dialog.
+ var dialog = topDocument.createElement( 'iframe' ) ;
+ FCKTools.ResetStyles( dialog ) ;
+ dialog.src = FCKConfig.BasePath + 'fckdialog.html' ;
+
+ // Dummy URL for testing whether the code in fckdialog.js alone leaks memory.
+ // dialog.src = 'about:blank';
+
+ dialog.frameBorder = 0 ;
+ dialog.allowTransparency = true ;
+ FCKDomTools.SetElementStyles( dialog,
+ {
+ 'position' : ( useAbsolutePosition ) ? 'absolute' : 'fixed',
+ 'top' : iTop + 'px',
+ 'left' : iLeft + 'px',
+ 'width' : width + 'px',
+ 'height' : height + 'px',
+ 'zIndex' : getZIndex()
+ } ) ;
+
+ // Save the dialog info to be used by the dialog page once loaded.
+ dialog._DialogArguments = dialogInfo ;
+
+ // Append the IFRAME to the target document.
+ topDocument.body.appendChild( dialog ) ;
+
+ // Keep record of the dialog's parent/child relationships.
+ dialog._ParentDialog = topDialog ;
+ topDialog = dialog ;
+ },
+
+ /**
+ * (For internal use)
+ * Called when the top dialog is closed.
+ */
+ OnDialogClose : function( dialogWindow )
+ {
+ var dialog = dialogWindow.frameElement ;
+ FCKDomTools.RemoveNode( dialog ) ;
+
+ if ( dialog._ParentDialog ) // Nested Dialog.
+ {
+ topDialog = dialog._ParentDialog ;
+ dialog._ParentDialog.contentWindow.SetEnabled( true ) ;
+ }
+ else // First Dialog.
+ {
+ // Set the Focus in the browser, so the "OnBlur" event is not
+ // fired. In IE, there is no need to do that because the dialog
+ // already moved the selection to the editing area before
+ // closing (EnsureSelection). Also, the Focus() call here
+ // causes memory leak on IE7 (weird).
+ if ( !FCKBrowserInfo.IsIE )
+ FCK.Focus() ;
+
+ this.HideMainCover() ;
+ // Bug #1918: Assigning topDialog = null directly causes IE6 to crash.
+ setTimeout( function(){ topDialog = null ; }, 0 ) ;
+
+ // Release the previously saved selection.
+ FCK.ToolbarSet.CurrentInstance.Selection.Release() ;
+ }
+ },
+
+ DisplayMainCover : function()
+ {
+ // Setup the DIV that will be used to cover.
+ cover = topDocument.createElement( 'div' ) ;
+ FCKTools.ResetStyles( cover ) ;
+ FCKDomTools.SetElementStyles( cover,
+ {
+ 'position' : 'absolute',
+ 'zIndex' : getZIndex(),
+ 'top' : '0px',
+ 'left' : '0px',
+ 'backgroundColor' : FCKConfig.BackgroundBlockerColor
+ } ) ;
+ FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
+
+ // For IE6-, we need to fill the cover with a transparent IFRAME,
+ // to properly block <select> fields.
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ var iframe = topDocument.createElement( 'iframe' ) ;
+ FCKTools.ResetStyles( iframe ) ;
+ iframe.hideFocus = true ;
+ iframe.frameBorder = 0 ;
+ iframe.src = FCKTools.GetVoidUrl() ;
+ FCKDomTools.SetElementStyles( iframe,
+ {
+ 'width' : '100%',
+ 'height' : '100%',
+ 'position' : 'absolute',
+ 'left' : '0px',
+ 'top' : '0px',
+ 'filter' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'
+ } ) ;
+ cover.appendChild( iframe ) ;
+ }
+
+ // We need to manually adjust the cover size on resize.
+ FCKTools.AddEventListener( topWindow, 'resize', resizeHandler ) ;
+ resizeHandler() ;
+
+ topDocument.body.appendChild( cover ) ;
+
+ FCKFocusManager.Lock() ;
+
+ // Prevent the user from refocusing the disabled
+ // editing window by pressing Tab. (Bug #2065)
+ var el = FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'frameElement' ) ;
+ el._fck_originalTabIndex = el.tabIndex ;
+ el.tabIndex = -1 ;
+ },
+
+ HideMainCover : function()
+ {
+ FCKDomTools.RemoveNode( cover ) ;
+ FCKFocusManager.Unlock() ;
+
+ // Revert the tab index hack. (Bug #2065)
+ var el = FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'frameElement' ) ;
+ el.tabIndex = el._fck_originalTabIndex ;
+ FCKDomTools.ClearElementJSProperty( el, '_fck_originalTabIndex' ) ;
+ },
+
+ GetCover : function()
+ {
+ return cover ;
+ }
+ } ;
+} )() ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdocumentprocessor.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdocumentprocessor.js
new file mode 100644
index 0000000..55fd117
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdocumentprocessor.js
@@ -0,0 +1,270 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Advanced document processors.
+ */
+
+var FCKDocumentProcessor = new Object() ;
+FCKDocumentProcessor._Items = new Array() ;
+
+FCKDocumentProcessor.AppendNew = function()
+{
+ var oNewItem = new Object() ;
+ this._Items.push( oNewItem ) ;
+ return oNewItem ;
+}
+
+FCKDocumentProcessor.Process = function( document )
+{
+ var bIsDirty = FCK.IsDirty() ;
+ var oProcessor, i = 0 ;
+ while( ( oProcessor = this._Items[i++] ) )
+ oProcessor.ProcessDocument( document ) ;
+ if ( !bIsDirty )
+ FCK.ResetIsDirty() ;
+}
+
+var FCKDocumentProcessor_CreateFakeImage = function( fakeClass, realElement )
+{
+ var oImg = FCKTools.GetElementDocument( realElement ).createElement( 'IMG' ) ;
+ oImg.className = fakeClass ;
+ oImg.src = FCKConfig.BasePath + 'images/spacer.gif' ;
+ oImg.setAttribute( '_fckfakelement', 'true', 0 ) ;
+ oImg.setAttribute( '_fckrealelement', FCKTempBin.AddElement( realElement ), 0 ) ;
+ return oImg ;
+}
+
+// Link Anchors
+if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
+{
+ var FCKAnchorsProcessor = FCKDocumentProcessor.AppendNew() ;
+ FCKAnchorsProcessor.ProcessDocument = function( document )
+ {
+ var aLinks = document.getElementsByTagName( 'A' ) ;
+
+ var oLink ;
+ var i = aLinks.length - 1 ;
+ while ( i >= 0 && ( oLink = aLinks[i--] ) )
+ {
+ // If it is anchor. Doesn't matter if it's also a link (even better: we show that it's both a link and an anchor)
+ if ( oLink.name.length > 0 )
+ {
+ //if the anchor has some content then we just add a temporary class
+ if ( oLink.innerHTML !== '' )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ oLink.className += ' FCK__AnchorC' ;
+ }
+ else
+ {
+ var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oLink.cloneNode(true) ) ;
+ oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
+
+ oLink.parentNode.insertBefore( oImg, oLink ) ;
+ oLink.parentNode.removeChild( oLink ) ;
+ }
+ }
+ }
+ }
+}
+
+// Page Breaks
+var FCKPageBreaksProcessor = FCKDocumentProcessor.AppendNew() ;
+FCKPageBreaksProcessor.ProcessDocument = function( document )
+{
+ var aDIVs = document.getElementsByTagName( 'DIV' ) ;
+
+ var eDIV ;
+ var i = aDIVs.length - 1 ;
+ while ( i >= 0 && ( eDIV = aDIVs[i--] ) )
+ {
+ if ( eDIV.style.pageBreakAfter == 'always' && eDIV.childNodes.length == 1 && eDIV.childNodes[0].style && eDIV.childNodes[0].style.display == 'none' )
+ {
+ var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', eDIV.cloneNode(true) ) ;
+
+ eDIV.parentNode.insertBefore( oFakeImage, eDIV ) ;
+ eDIV.parentNode.removeChild( eDIV ) ;
+ }
+ }
+/*
+ var aCenters = document.getElementsByTagName( 'CENTER' ) ;
+
+ var oCenter ;
+ var i = aCenters.length - 1 ;
+ while ( i >= 0 && ( oCenter = aCenters[i--] ) )
+ {
+ if ( oCenter.style.pageBreakAfter == 'always' && oCenter.innerHTML.Trim().length == 0 )
+ {
+ var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', oCenter.cloneNode(true) ) ;
+
+ oCenter.parentNode.insertBefore( oFakeImage, oCenter ) ;
+ oCenter.parentNode.removeChild( oCenter ) ;
+ }
+ }
+*/
+}
+
+// EMBED and OBJECT tags.
+var FCKEmbedAndObjectProcessor = (function()
+{
+ var customProcessors = [] ;
+
+ var processElement = function( el )
+ {
+ var clone = el.cloneNode( true ) ;
+ var replaceElement ;
+ var fakeImg = replaceElement = FCKDocumentProcessor_CreateFakeImage( 'FCK__UnknownObject', clone ) ;
+ FCKEmbedAndObjectProcessor.RefreshView( fakeImg, el ) ;
+
+ for ( var i = 0 ; i < customProcessors.length ; i++ )
+ replaceElement = customProcessors[i]( el, replaceElement ) || replaceElement ;
+
+ if ( replaceElement != fakeImg )
+ FCKTempBin.RemoveElement( fakeImg.getAttribute( '_fckrealelement' ) ) ;
+
+ el.parentNode.replaceChild( replaceElement, el ) ;
+ }
+
+ var processElementsByName = function( elementName, doc )
+ {
+ var aObjects = doc.getElementsByTagName( elementName );
+ for ( var i = aObjects.length - 1 ; i >= 0 ; i-- )
+ processElement( aObjects[i] ) ;
+ }
+
+ var processObjectAndEmbed = function( doc )
+ {
+ processElementsByName( 'object', doc );
+ processElementsByName( 'embed', doc );
+ }
+
+ return FCKTools.Merge( FCKDocumentProcessor.AppendNew(),
+ {
+ ProcessDocument : function( doc )
+ {
+ // Firefox 3 would sometimes throw an unknown exception while accessing EMBEDs and OBJECTs
+ // without the setTimeout().
+ if ( FCKBrowserInfo.IsGecko )
+ FCKTools.RunFunction( processObjectAndEmbed, this, [ doc ] ) ;
+ else
+ processObjectAndEmbed( doc ) ;
+ },
+
+ RefreshView : function( placeHolder, original )
+ {
+ if ( original.getAttribute( 'width' ) > 0 )
+ placeHolder.style.width = FCKTools.ConvertHtmlSizeToStyle( original.getAttribute( 'width' ) ) ;
+
+ if ( original.getAttribute( 'height' ) > 0 )
+ placeHolder.style.height = FCKTools.ConvertHtmlSizeToStyle( original.getAttribute( 'height' ) ) ;
+ },
+
+ AddCustomHandler : function( func )
+ {
+ customProcessors.push( func ) ;
+ }
+ } ) ;
+} )() ;
+
+FCK.GetRealElement = function( fakeElement )
+{
+ var e = FCKTempBin.Elements[ fakeElement.getAttribute('_fckrealelement') ] ;
+
+ if ( fakeElement.getAttribute('_fckflash') )
+ {
+ if ( fakeElement.style.width.length > 0 )
+ e.width = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.width ) ;
+
+ if ( fakeElement.style.height.length > 0 )
+ e.height = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.height ) ;
+ }
+
+ return e ;
+}
+
+// HR Processor.
+// This is a IE only (tricky) thing. We protect all HR tags before loading them
+// (see FCK.ProtectTags). Here we put the HRs back.
+if ( FCKBrowserInfo.IsIE )
+{
+ FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )
+ {
+ var aHRs = document.getElementsByTagName( 'HR' ) ;
+
+ var eHR ;
+ var i = aHRs.length - 1 ;
+ while ( i >= 0 && ( eHR = aHRs[i--] ) )
+ {
+ // Create the replacement HR.
+ var newHR = document.createElement( 'hr' ) ;
+ newHR.mergeAttributes( eHR, true ) ;
+
+ // We must insert the new one after it. insertBefore will not work in all cases.
+ FCKDomTools.InsertAfterNode( eHR, newHR ) ;
+
+ eHR.parentNode.removeChild( eHR ) ;
+ }
+ }
+}
+
+// INPUT:hidden Processor.
+FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )
+{
+ var aInputs = document.getElementsByTagName( 'INPUT' ) ;
+
+ var oInput ;
+ var i = aInputs.length - 1 ;
+ while ( i >= 0 && ( oInput = aInputs[i--] ) )
+ {
+ if ( oInput.type == 'hidden' )
+ {
+ var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oInput.cloneNode(true) ) ;
+ oImg.setAttribute( '_fckinputhidden', 'true', 0 ) ;
+
+ oInput.parentNode.insertBefore( oImg, oInput ) ;
+ oInput.parentNode.removeChild( oInput ) ;
+ }
+ }
+}
+
+// Flash handler.
+FCKEmbedAndObjectProcessor.AddCustomHandler( function( el, fakeImg )
+ {
+ if ( ! ( el.nodeName.IEquals( 'embed' ) && ( el.type == 'application/x-shockwave-flash' || /\.swf($|#|\?)/i.test( el.src ) ) ) )
+ return ;
+ fakeImg.className = 'FCK__Flash' ;
+ fakeImg.setAttribute( '_fckflash', 'true', 0 );
+ } ) ;
+
+// Buggy <span class="Apple-style-span"> tags added by Safari.
+if ( FCKBrowserInfo.IsSafari )
+{
+ FCKDocumentProcessor.AppendNew().ProcessDocument = function( doc )
+ {
+ var spans = doc.getElementsByClassName ?
+ doc.getElementsByClassName( 'Apple-style-span' ) :
+ Array.prototype.filter.call(
+ doc.getElementsByTagName( 'span' ),
+ function( item ){ return item.className == 'Apple-style-span' ; }
+ ) ;
+ for ( var i = spans.length - 1 ; i >= 0 ; i-- )
+ FCKDomTools.RemoveNode( spans[i], true ) ;
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdomtools.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdomtools.js
new file mode 100644
index 0000000..7eaf3bd
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdomtools.js
@@ -0,0 +1,1057 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions to work with the DOM.
+ */
+
+var FCKDomTools =
+{
+ /**
+ * Move all child nodes from one node to another.
+ */
+ MoveChildren : function( source, target, toTargetStart )
+ {
+ if ( source == target )
+ return ;
+
+ var eChild ;
+
+ if ( toTargetStart )
+ {
+ while ( (eChild = source.lastChild) )
+ target.insertBefore( source.removeChild( eChild ), target.firstChild ) ;
+ }
+ else
+ {
+ while ( (eChild = source.firstChild) )
+ target.appendChild( source.removeChild( eChild ) ) ;
+ }
+ },
+
+ MoveNode : function( source, target, toTargetStart )
+ {
+ if ( toTargetStart )
+ target.insertBefore( FCKDomTools.RemoveNode( source ), target.firstChild ) ;
+ else
+ target.appendChild( FCKDomTools.RemoveNode( source ) ) ;
+ },
+
+ // Remove blank spaces from the beginning and the end of the contents of a node.
+ TrimNode : function( node )
+ {
+ this.LTrimNode( node ) ;
+ this.RTrimNode( node ) ;
+ },
+
+ LTrimNode : function( node )
+ {
+ var eChildNode ;
+
+ while ( (eChildNode = node.firstChild) )
+ {
+ if ( eChildNode.nodeType == 3 )
+ {
+ var sTrimmed = eChildNode.nodeValue.LTrim() ;
+ var iOriginalLength = eChildNode.nodeValue.length ;
+
+ if ( sTrimmed.length == 0 )
+ {
+ node.removeChild( eChildNode ) ;
+ continue ;
+ }
+ else if ( sTrimmed.length < iOriginalLength )
+ {
+ eChildNode.splitText( iOriginalLength - sTrimmed.length ) ;
+ node.removeChild( node.firstChild ) ;
+ }
+ }
+ break ;
+ }
+ },
+
+ RTrimNode : function( node )
+ {
+ var eChildNode ;
+
+ while ( (eChildNode = node.lastChild) )
+ {
+ if ( eChildNode.nodeType == 3 )
+ {
+ var sTrimmed = eChildNode.nodeValue.RTrim() ;
+ var iOriginalLength = eChildNode.nodeValue.length ;
+
+ if ( sTrimmed.length == 0 )
+ {
+ // If the trimmed text node is empty, just remove it.
+
+ // Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#81).
+ eChildNode.parentNode.removeChild( eChildNode ) ;
+ continue ;
+ }
+ else if ( sTrimmed.length < iOriginalLength )
+ {
+ // If the trimmed text length is less than the original
+ // length, strip all spaces from the end by splitting
+ // the text and removing the resulting useless node.
+
+ eChildNode.splitText( sTrimmed.length ) ;
+ // Use "node.lastChild.parentNode" instead of "node" to avoid IE bug (#81).
+ node.lastChild.parentNode.removeChild( node.lastChild ) ;
+ }
+ }
+ break ;
+ }
+
+ if ( !FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsOpera )
+ {
+ eChildNode = node.lastChild ;
+
+ if ( eChildNode && eChildNode.nodeType == 1 && eChildNode.nodeName.toLowerCase() == 'br' )
+ {
+ // Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324).
+ eChildNode.parentNode.removeChild( eChildNode ) ;
+ }
+ }
+ },
+
+ RemoveNode : function( node, excludeChildren )
+ {
+ if ( excludeChildren )
+ {
+ // Move all children before the node.
+ var eChild ;
+ while ( (eChild = node.firstChild) )
+ node.parentNode.insertBefore( node.removeChild( eChild ), node ) ;
+ }
+
+ return node.parentNode.removeChild( node ) ;
+ },
+
+ GetFirstChild : function( node, childNames )
+ {
+ // If childNames is a string, transform it in a Array.
+ if ( typeof ( childNames ) == 'string' )
+ childNames = [ childNames ] ;
+
+ var eChild = node.firstChild ;
+ while( eChild )
+ {
+ if ( eChild.nodeType == 1 && eChild.tagName.Equals.apply( eChild.tagName, childNames ) )
+ return eChild ;
+
+ eChild = eChild.nextSibling ;
+ }
+
+ return null ;
+ },
+
+ GetLastChild : function( node, childNames )
+ {
+ // If childNames is a string, transform it in a Array.
+ if ( typeof ( childNames ) == 'string' )
+ childNames = [ childNames ] ;
+
+ var eChild = node.lastChild ;
+ while( eChild )
+ {
+ if ( eChild.nodeType == 1 && ( !childNames || eChild.tagName.Equals( childNames ) ) )
+ return eChild ;
+
+ eChild = eChild.previousSibling ;
+ }
+
+ return null ;
+ },
+
+ /*
+ * Gets the previous element (nodeType=1) in the source order. Returns
+ * "null" If no element is found.
+ * @param {Object} currentNode The node to start searching from.
+ * @param {Boolean} ignoreSpaceTextOnly Sets how text nodes will be
+ * handled. If set to "true", only white spaces text nodes
+ * will be ignored, while non white space text nodes will stop
+ * the search, returning null. If "false" or omitted, all
+ * text nodes are ignored.
+ * @param {string[]} stopSearchElements An array of element names that
+ * will cause the search to stop when found, returning null.
+ * May be omitted (or null).
+ * @param {string[]} ignoreElements An array of element names that
+ * must be ignored during the search.
+ */
+ GetPreviousSourceElement : function( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements )
+ {
+ if ( !currentNode )
+ return null ;
+
+ if ( stopSearchElements && currentNode.nodeType == 1 && currentNode.nodeName.IEquals( stopSearchElements ) )
+ return null ;
+
+ if ( currentNode.previousSibling )
+ currentNode = currentNode.previousSibling ;
+ else
+ return this.GetPreviousSourceElement( currentNode.parentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+
+ while ( currentNode )
+ {
+ if ( currentNode.nodeType == 1 )
+ {
+ if ( stopSearchElements && currentNode.nodeName.IEquals( stopSearchElements ) )
+ break ;
+
+ if ( !ignoreElements || !currentNode.nodeName.IEquals( ignoreElements ) )
+ return currentNode ;
+ }
+ else if ( ignoreSpaceTextOnly && currentNode.nodeType == 3 && currentNode.nodeValue.RTrim().length > 0 )
+ break ;
+
+ if ( currentNode.lastChild )
+ currentNode = currentNode.lastChild ;
+ else
+ return this.GetPreviousSourceElement( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+ }
+
+ return null ;
+ },
+
+ /*
+ * Gets the next element (nodeType=1) in the source order. Returns
+ * "null" If no element is found.
+ * @param {Object} currentNode The node to start searching from.
+ * @param {Boolean} ignoreSpaceTextOnly Sets how text nodes will be
+ * handled. If set to "true", only white spaces text nodes
+ * will be ignored, while non white space text nodes will stop
+ * the search, returning null. If "false" or omitted, all
+ * text nodes are ignored.
+ * @param {string[]} stopSearchElements An array of element names that
+ * will cause the search to stop when found, returning null.
+ * May be omitted (or null).
+ * @param {string[]} ignoreElements An array of element names that
+ * must be ignored during the search.
+ */
+ GetNextSourceElement : function( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements, startFromSibling )
+ {
+ while( ( currentNode = this.GetNextSourceNode( currentNode, startFromSibling ) ) ) // Only one "=".
+ {
+ if ( currentNode.nodeType == 1 )
+ {
+ if ( stopSearchElements && currentNode.nodeName.IEquals( stopSearchElements ) )
+ break ;
+
+ if ( ignoreElements && currentNode.nodeName.IEquals( ignoreElements ) )
+ return this.GetNextSourceElement( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+
+ return currentNode ;
+ }
+ else if ( ignoreSpaceTextOnly && currentNode.nodeType == 3 && currentNode.nodeValue.RTrim().length > 0 )
+ break ;
+ }
+
+ return null ;
+ },
+
+ /*
+ * Get the next DOM node available in source order.
+ */
+ GetNextSourceNode : function( currentNode, startFromSibling, nodeType, stopSearchNode )
+ {
+ if ( !currentNode )
+ return null ;
+
+ var node ;
+
+ if ( !startFromSibling && currentNode.firstChild )
+ node = currentNode.firstChild ;
+ else
+ {
+ if ( stopSearchNode && currentNode == stopSearchNode )
+ return null ;
+
+ node = currentNode.nextSibling ;
+
+ if ( !node && ( !stopSearchNode || stopSearchNode != currentNode.parentNode ) )
+ return this.GetNextSourceNode( currentNode.parentNode, true, nodeType, stopSearchNode ) ;
+ }
+
+ if ( nodeType && node && node.nodeType != nodeType )
+ return this.GetNextSourceNode( node, false, nodeType, stopSearchNode ) ;
+
+ return node ;
+ },
+
+ /*
+ * Get the next DOM node available in source order.
+ */
+ GetPreviousSourceNode : function( currentNode, startFromSibling, nodeType, stopSearchNode )
+ {
+ if ( !currentNode )
+ return null ;
+
+ var node ;
+
+ if ( !startFromSibling && currentNode.lastChild )
+ node = currentNode.lastChild ;
+ else
+ {
+ if ( stopSearchNode && currentNode == stopSearchNode )
+ return null ;
+
+ node = currentNode.previousSibling ;
+
+ if ( !node && ( !stopSearchNode || stopSearchNode != currentNode.parentNode ) )
+ return this.GetPreviousSourceNode( currentNode.parentNode, true, nodeType, stopSearchNode ) ;
+ }
+
+ if ( nodeType && node && node.nodeType != nodeType )
+ return this.GetPreviousSourceNode( node, false, nodeType, stopSearchNode ) ;
+
+ return node ;
+ },
+
+ // Inserts a element after a existing one.
+ InsertAfterNode : function( existingNode, newNode )
+ {
+ return existingNode.parentNode.insertBefore( newNode, existingNode.nextSibling ) ;
+ },
+
+ GetParents : function( node )
+ {
+ var parents = new Array() ;
+
+ while ( node )
+ {
+ parents.unshift( node ) ;
+ node = node.parentNode ;
+ }
+
+ return parents ;
+ },
+
+ GetCommonParents : function( node1, node2 )
+ {
+ var p1 = this.GetParents( node1 ) ;
+ var p2 = this.GetParents( node2 ) ;
+ var retval = [] ;
+ for ( var i = 0 ; i < p1.length ; i++ )
+ {
+ if ( p1[i] == p2[i] )
+ retval.push( p1[i] ) ;
+ }
+ return retval ;
+ },
+
+ GetCommonParentNode : function( node1, node2, tagList )
+ {
+ var tagMap = {} ;
+ if ( ! tagList.pop )
+ tagList = [ tagList ] ;
+ while ( tagList.length > 0 )
+ tagMap[tagList.pop().toLowerCase()] = 1 ;
+
+ var commonParents = this.GetCommonParents( node1, node2 ) ;
+ var currentParent = null ;
+ while ( ( currentParent = commonParents.pop() ) )
+ {
+ if ( tagMap[currentParent.nodeName.toLowerCase()] )
+ return currentParent ;
+ }
+ return null ;
+ },
+
+ GetIndexOf : function( node )
+ {
+ var currentNode = node.parentNode ? node.parentNode.firstChild : null ;
+ var currentIndex = -1 ;
+
+ while ( currentNode )
+ {
+ currentIndex++ ;
+
+ if ( currentNode == node )
+ return currentIndex ;
+
+ currentNode = currentNode.nextSibling ;
+ }
+
+ return -1 ;
+ },
+
+ PaddingNode : null,
+
+ EnforcePaddingNode : function( doc, tagName )
+ {
+ // In IE it can happen when the page is reloaded that doc or doc.body is null, so exit here
+ try
+ {
+ if ( !doc || !doc.body )
+ return ;
+ }
+ catch (e)
+ {
+ return ;
+ }
+
+ this.CheckAndRemovePaddingNode( doc, tagName, true ) ;
+ try
+ {
+ if ( doc.body.lastChild && ( doc.body.lastChild.nodeType != 1
+ || doc.body.lastChild.tagName.toLowerCase() == tagName.toLowerCase() ) )
+ return ;
+ }
+ catch (e)
+ {
+ return ;
+ }
+
+ var node = doc.createElement( tagName ) ;
+ if ( FCKBrowserInfo.IsGecko && FCKListsLib.NonEmptyBlockElements[ tagName ] )
+ FCKTools.AppendBogusBr( node ) ;
+ this.PaddingNode = node ;
+ if ( doc.body.childNodes.length == 1
+ && doc.body.firstChild.nodeType == 1
+ && doc.body.firstChild.tagName.toLowerCase() == 'br'
+ && ( doc.body.firstChild.getAttribute( '_moz_dirty' ) != null
+ || doc.body.firstChild.getAttribute( 'type' ) == '_moz' ) )
+ doc.body.replaceChild( node, doc.body.firstChild ) ;
+ else
+ doc.body.appendChild( node ) ;
+ },
+
+ CheckAndRemovePaddingNode : function( doc, tagName, dontRemove )
+ {
+ var paddingNode = this.PaddingNode ;
+ if ( ! paddingNode )
+ return ;
+
+ // If the padding node is changed, remove its status as a padding node.
+ try
+ {
+ if ( paddingNode.parentNode != doc.body
+ || paddingNode.tagName.toLowerCase() != tagName
+ || ( paddingNode.childNodes.length > 1 )
+ || ( paddingNode.firstChild && paddingNode.firstChild.nodeValue != '\xa0'
+ && String(paddingNode.firstChild.tagName).toLowerCase() != 'br' ) )
+ {
+ this.PaddingNode = null ;
+ return ;
+ }
+ }
+ catch (e)
+ {
+ this.PaddingNode = null ;
+ return ;
+ }
+
+ // Now we're sure the padding node exists, and it is unchanged, and it
+ // isn't the only node in doc.body, remove it.
+ if ( !dontRemove )
+ {
+ if ( paddingNode.parentNode.childNodes.length > 1 )
+ paddingNode.parentNode.removeChild( paddingNode ) ;
+ this.PaddingNode = null ;
+ }
+ },
+
+ HasAttribute : function( element, attributeName )
+ {
+ if ( element.hasAttribute )
+ return element.hasAttribute( attributeName ) ;
+ else
+ {
+ var att = element.attributes[ attributeName ] ;
+ return ( att != undefined && att.specified ) ;
+ }
+ },
+
+ /**
+ * Checks if an element has "specified" attributes.
+ */
+ HasAttributes : function( element )
+ {
+ var attributes = element.attributes ;
+
+ for ( var i = 0 ; i < attributes.length ; i++ )
+ {
+ if ( FCKBrowserInfo.IsIE && attributes[i].nodeName == 'class' )
+ {
+ // IE has a strange bug. If calling removeAttribute('className'),
+ // the attributes collection will still contain the "class"
+ // attribute, which will be marked as "specified", even if the
+ // outerHTML of the element is not displaying the class attribute.
+ // Note : I was not able to reproduce it outside the editor,
+ // but I've faced it while working on the TC of #1391.
+ if ( element.className.length > 0 )
+ return true ;
+ }
+ else if ( attributes[i].specified )
+ return true ;
+ }
+
+ return false ;
+ },
+
+ /**
+ * Remove an attribute from an element.
+ */
+ RemoveAttribute : function( element, attributeName )
+ {
+ if ( FCKBrowserInfo.IsIE && attributeName.toLowerCase() == 'class' )
+ attributeName = 'className' ;
+
+ return element.removeAttribute( attributeName, 0 ) ;
+ },
+
+ /**
+ * Removes an array of attributes from an element
+ */
+ RemoveAttributes : function (element, aAttributes )
+ {
+ for ( var i = 0 ; i < aAttributes.length ; i++ )
+ this.RemoveAttribute( element, aAttributes[i] );
+ },
+
+ GetAttributeValue : function( element, att )
+ {
+ var attName = att ;
+
+ if ( typeof att == 'string' )
+ att = element.attributes[ att ] ;
+ else
+ attName = att.nodeName ;
+
+ if ( att && att.specified )
+ {
+ // IE returns "null" for the nodeValue of a "style" attribute.
+ if ( attName == 'style' )
+ return element.style.cssText ;
+ // There are two cases when the nodeValue must be used:
+ // - for the "class" attribute (all browsers).
+ // - for events attributes (IE only).
+ else if ( attName == 'class' || attName.indexOf('on') == 0 )
+ return att.nodeValue ;
+ else
+ {
+ // Use getAttribute to get its value exactly as it is
+ // defined.
+ return element.getAttribute( attName, 2 ) ;
+ }
+ }
+ return null ;
+ },
+
+ /**
+ * Checks whether one element contains the other.
+ */
+ Contains : function( mainElement, otherElement )
+ {
+ // IE supports contains, but only for element nodes.
+ if ( mainElement.contains && otherElement.nodeType == 1 )
+ return mainElement.contains( otherElement ) ;
+
+ while ( ( otherElement = otherElement.parentNode ) ) // Only one "="
+ {
+ if ( otherElement == mainElement )
+ return true ;
+ }
+ return false ;
+ },
+
+ /**
+ * Breaks a parent element in the position of one of its contained elements.
+ * For example, in the following case:
+ * <b>This <i>is some<span /> sample</i> test text</b>
+ * If element = <span />, we have these results:
+ * <b>This <i>is some</i><span /><i> sample</i> test text</b> (If parent = <i>)
+ * <b>This <i>is some</i></b><span /><b><i> sample</i> test text</b> (If parent = <b>)
+ */
+ BreakParent : function( element, parent, reusableRange )
+ {
+ var range = reusableRange || new FCKDomRange( FCKTools.GetElementWindow( element ) ) ;
+
+ // We'll be extracting part of this element, so let's use our
+ // range to get the correct piece.
+ range.SetStart( element, 4 ) ;
+ range.SetEnd( parent, 4 ) ;
+
+ // Extract it.
+ var docFrag = range.ExtractContents() ;
+
+ // Move the element outside the broken element.
+ range.InsertNode( element.parentNode.removeChild( element ) ) ;
+
+ // Re-insert the extracted piece after the element.
+ docFrag.InsertAfterNode( element ) ;
+
+ range.Release( !!reusableRange ) ;
+ },
+
+ /**
+ * Retrieves a uniquely identifiable tree address of a DOM tree node.
+ * The tree address returns is an array of integers, with each integer
+ * indicating a child index from a DOM tree node, starting from
+ * document.documentElement.
+ *
+ * For example, assuming <body> is the second child from <html> (<head>
+ * being the first), and we'd like to address the third child under the
+ * fourth child of body, the tree address returned would be:
+ * [1, 3, 2]
+ *
+ * The tree address cannot be used for finding back the DOM tree node once
+ * the DOM tree structure has been modified.
+ */
+ GetNodeAddress : function( node, normalized )
+ {
+ var retval = [] ;
+ while ( node && node != FCKTools.GetElementDocument( node ).documentElement )
+ {
+ var parentNode = node.parentNode ;
+ var currentIndex = -1 ;
+ for( var i = 0 ; i < parentNode.childNodes.length ; i++ )
+ {
+ var candidate = parentNode.childNodes[i] ;
+ if ( normalized === true &&
+ candidate.nodeType == 3 &&
+ candidate.previousSibling &&
+ candidate.previousSibling.nodeType == 3 )
+ continue;
+ currentIndex++ ;
+ if ( parentNode.childNodes[i] == node )
+ break ;
+ }
+ retval.unshift( currentIndex ) ;
+ node = node.parentNode ;
+ }
+ return retval ;
+ },
+
+ /**
+ * The reverse transformation of FCKDomTools.GetNodeAddress(). This
+ * function returns the DOM node pointed to by its index address.
+ */
+ GetNodeFromAddress : function( doc, addr, normalized )
+ {
+ var cursor = doc.documentElement ;
+ for ( var i = 0 ; i < addr.length ; i++ )
+ {
+ var target = addr[i] ;
+ if ( ! normalized )
+ {
+ cursor = cursor.childNodes[target] ;
+ continue ;
+ }
+
+ var currentIndex = -1 ;
+ for (var j = 0 ; j < cursor.childNodes.length ; j++ )
+ {
+ var candidate = cursor.childNodes[j] ;
+ if ( normalized === true &&
+ candidate.nodeType == 3 &&
+ candidate.previousSibling &&
+ candidate.previousSibling.nodeType == 3 )
+ continue ;
+ currentIndex++ ;
+ if ( currentIndex == target )
+ {
+ cursor = candidate ;
+ break ;
+ }
+ }
+ }
+ return cursor ;
+ },
+
+ CloneElement : function( element )
+ {
+ element = element.cloneNode( false ) ;
+
+ // The "id" attribute should never be cloned to avoid duplication.
+ element.removeAttribute( 'id', false ) ;
+
+ return element ;
+ },
+
+ ClearElementJSProperty : function( element, attrName )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ element.removeAttribute( attrName ) ;
+ else
+ delete element[attrName] ;
+ },
+
+ SetElementMarker : function ( markerObj, element, attrName, value)
+ {
+ var id = String( parseInt( Math.random() * 0xffffffff, 10 ) ) ;
+ element._FCKMarkerId = id ;
+ element[attrName] = value ;
+ if ( ! markerObj[id] )
+ markerObj[id] = { 'element' : element, 'markers' : {} } ;
+ markerObj[id]['markers'][attrName] = value ;
+ },
+
+ ClearElementMarkers : function( markerObj, element, clearMarkerObj )
+ {
+ var id = element._FCKMarkerId ;
+ if ( ! id )
+ return ;
+ this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
+ for ( var j in markerObj[id]['markers'] )
+ this.ClearElementJSProperty( element, j ) ;
+ if ( clearMarkerObj )
+ delete markerObj[id] ;
+ },
+
+ ClearAllMarkers : function( markerObj )
+ {
+ for ( var i in markerObj )
+ this.ClearElementMarkers( markerObj, markerObj[i]['element'], true ) ;
+ },
+
+ /**
+ * Convert a DOM list tree into a data structure that is easier to
+ * manipulate. This operation should be non-intrusive in the sense that it
+ * does not change the DOM tree, with the exception that it may add some
+ * markers to the list item nodes when markerObj is specified.
+ */
+ ListToArray : function( listNode, markerObj, baseArray, baseIndentLevel, grandparentNode )
+ {
+ if ( ! listNode.nodeName.IEquals( ['ul', 'ol'] ) )
+ return [] ;
+
+ if ( ! baseIndentLevel )
+ baseIndentLevel = 0 ;
+ if ( ! baseArray )
+ baseArray = [] ;
+ // Iterate over all list items to get their contents and look for inner lists.
+ for ( var i = 0 ; i < listNode.childNodes.length ; i++ )
+ {
+ var listItem = listNode.childNodes[i] ;
+ if ( ! listItem.nodeName.IEquals( 'li' ) )
+ continue ;
+ var itemObj = { 'parent' : listNode, 'indent' : baseIndentLevel, 'contents' : [] } ;
+ if ( ! grandparentNode )
+ {
+ itemObj.grandparent = listNode.parentNode ;
+ if ( itemObj.grandparent && itemObj.grandparent.nodeName.IEquals( 'li' ) )
+ itemObj.grandparent = itemObj.grandparent.parentNode ;
+ }
+ else
+ itemObj.grandparent = grandparentNode ;
+ if ( markerObj )
+ this.SetElementMarker( markerObj, listItem, '_FCK_ListArray_Index', baseArray.length ) ;
+ baseArray.push( itemObj ) ;
+ for ( var j = 0 ; j < listItem.childNodes.length ; j++ )
+ {
+ var child = listItem.childNodes[j] ;
+ if ( child.nodeName.IEquals( ['ul', 'ol'] ) )
+ // Note the recursion here, it pushes inner list items with
+ // +1 indentation in the correct order.
+ this.ListToArray( child, markerObj, baseArray, baseIndentLevel + 1, itemObj.grandparent ) ;
+ else
+ itemObj.contents.push( child ) ;
+ }
+ }
+ return baseArray ;
+ },
+
+ // Convert our internal representation of a list back to a DOM forest.
+ ArrayToList : function( listArray, markerObj, baseIndex )
+ {
+ if ( baseIndex == undefined )
+ baseIndex = 0 ;
+ if ( ! listArray || listArray.length < baseIndex + 1 )
+ return null ;
+ var doc = FCKTools.GetElementDocument( listArray[baseIndex].parent ) ;
+ var retval = doc.createDocumentFragment() ;
+ var rootNode = null ;
+ var currentIndex = baseIndex ;
+ var indentLevel = Math.max( listArray[baseIndex].indent, 0 ) ;
+ var currentListItem = null ;
+ while ( true )
+ {
+ var item = listArray[currentIndex] ;
+ if ( item.indent == indentLevel )
+ {
+ if ( ! rootNode || listArray[currentIndex].parent.nodeName != rootNode.nodeName )
+ {
+ rootNode = listArray[currentIndex].parent.cloneNode( false ) ;
+ retval.appendChild( rootNode ) ;
+ }
+ currentListItem = doc.createElement( 'li' ) ;
+ rootNode.appendChild( currentListItem ) ;
+ for ( var i = 0 ; i < item.contents.length ; i++ )
+ currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
+ currentIndex++ ;
+ }
+ else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
+ {
+ var listData = this.ArrayToList( listArray, null, currentIndex ) ;
+ currentListItem.appendChild( listData.listNode ) ;
+ currentIndex = listData.nextIndex ;
+ }
+ else if ( item.indent == -1 && baseIndex == 0 && item.grandparent )
+ {
+ var currentListItem ;
+ if ( item.grandparent.nodeName.IEquals( ['ul', 'ol'] ) )
+ currentListItem = doc.createElement( 'li' ) ;
+ else
+ {
+ if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) && ! item.grandparent.nodeName.IEquals( 'td' ) )
+ currentListItem = doc.createElement( FCKConfig.EnterMode ) ;
+ else
+ currentListItem = doc.createDocumentFragment() ;
+ }
+ for ( var i = 0 ; i < item.contents.length ; i++ )
+ currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
+ if ( currentListItem.nodeType == 11 )
+ {
+ if ( currentListItem.lastChild &&
+ currentListItem.lastChild.getAttribute &&
+ currentListItem.lastChild.getAttribute( 'type' ) == '_moz' )
+ currentListItem.removeChild( currentListItem.lastChild );
+ currentListItem.appendChild( doc.createElement( 'br' ) ) ;
+ }
+ if ( currentListItem.nodeName.IEquals( FCKConfig.EnterMode ) && currentListItem.firstChild )
+ {
+ this.TrimNode( currentListItem ) ;
+ if ( FCKListsLib.BlockBoundaries[currentListItem.firstChild.nodeName.toLowerCase()] )
+ {
+ var tmp = doc.createDocumentFragment() ;
+ while ( currentListItem.firstChild )
+ tmp.appendChild( currentListItem.removeChild( currentListItem.firstChild ) ) ;
+ currentListItem = tmp ;
+ }
+ }
+ if ( FCKBrowserInfo.IsGeckoLike && currentListItem.nodeName.IEquals( ['div', 'p'] ) )
+ FCKTools.AppendBogusBr( currentListItem ) ;
+ retval.appendChild( currentListItem ) ;
+ rootNode = null ;
+ currentIndex++ ;
+ }
+ else
+ return null ;
+
+ if ( listArray.length <= currentIndex || Math.max( listArray[currentIndex].indent, 0 ) < indentLevel )
+ {
+ break ;
+ }
+ }
+
+ // Clear marker attributes for the new list tree made of cloned nodes, if any.
+ if ( markerObj )
+ {
+ var currentNode = retval.firstChild ;
+ while ( currentNode )
+ {
+ if ( currentNode.nodeType == 1 )
+ this.ClearElementMarkers( markerObj, currentNode ) ;
+ currentNode = this.GetNextSourceNode( currentNode ) ;
+ }
+ }
+
+ return { 'listNode' : retval, 'nextIndex' : currentIndex } ;
+ },
+
+ /**
+ * Get the next sibling node for a node. If "includeEmpties" is false,
+ * only element or non empty text nodes are returned.
+ */
+ GetNextSibling : function( node, includeEmpties )
+ {
+ node = node.nextSibling ;
+
+ while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
+ node = node.nextSibling ;
+
+ return node ;
+ },
+
+ /**
+ * Get the previous sibling node for a node. If "includeEmpties" is false,
+ * only element or non empty text nodes are returned.
+ */
+ GetPreviousSibling : function( node, includeEmpties )
+ {
+ node = node.previousSibling ;
+
+ while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
+ node = node.previousSibling ;
+
+ return node ;
+ },
+
+ /**
+ * Checks if an element has no "useful" content inside of it
+ * node tree. No "useful" content means empty text node or a signle empty
+ * inline node.
+ * elementCheckCallback may point to a function that returns a boolean
+ * indicating that a child element must be considered in the element check.
+ */
+ CheckIsEmptyElement : function( element, elementCheckCallback )
+ {
+ var child = element.firstChild ;
+ var elementChild ;
+
+ while ( child )
+ {
+ if ( child.nodeType == 1 )
+ {
+ if ( elementChild || !FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] )
+ return false ;
+
+ if ( !elementCheckCallback || elementCheckCallback( child ) === true )
+ elementChild = child ;
+ }
+ else if ( child.nodeType == 3 && child.nodeValue.length > 0 )
+ return false ;
+
+ child = child.nextSibling ;
+ }
+
+ return elementChild ? this.CheckIsEmptyElement( elementChild, elementCheckCallback ) : true ;
+ },
+
+ SetElementStyles : function( element, styleDict )
+ {
+ var style = element.style ;
+ for ( var styleName in styleDict )
+ style[ styleName ] = styleDict[ styleName ] ;
+ },
+
+ SetOpacity : function( element, opacity )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ {
+ opacity = Math.round( opacity * 100 ) ;
+ element.style.filter = ( opacity > 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' ) ;
+ }
+ else
+ element.style.opacity = opacity ;
+ },
+
+ GetCurrentElementStyle : function( element, propertyName )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ return element.currentStyle[ propertyName ] ;
+ else
+ return element.ownerDocument.defaultView.getComputedStyle( element, '' ).getPropertyValue( propertyName ) ;
+ },
+
+ GetPositionedAncestor : function( element )
+ {
+ var currentElement = element ;
+
+ while ( currentElement != FCKTools.GetElementDocument( currentElement ).documentElement )
+ {
+ if ( this.GetCurrentElementStyle( currentElement, 'position' ) != 'static' )
+ return currentElement ;
+
+ if ( currentElement == FCKTools.GetElementDocument( currentElement ).documentElement
+ && currentWindow != w )
+ currentElement = currentWindow.frameElement ;
+ else
+ currentElement = currentElement.parentNode ;
+ }
+
+ return null ;
+ },
+
+ /**
+ * Current implementation for ScrollIntoView (due to #1462 and #2279). We
+ * don't have a complete implementation here, just the things that fit our
+ * needs.
+ */
+ ScrollIntoView : function( element, alignTop )
+ {
+ // Get the element window.
+ var window = FCKTools.GetElementWindow( element ) ;
+ var windowHeight = FCKTools.GetViewPaneSize( window ).Height ;
+
+ // Starts the offset that will be scrolled with the negative value of
+ // the visible window height.
+ var offset = windowHeight * -1 ;
+
+ // Appends the height it we are about to align the bottoms.
+ if ( alignTop === false )
+ {
+ offset += element.offsetHeight || 0 ;
+
+ // Consider the margin in the scroll, which is ok for our current
+ // needs, but needs investigation if we will be using this function
+ // in other places.
+ offset += parseInt( this.GetCurrentElementStyle( element, 'marginBottom' ) || 0, 10 ) || 0 ;
+ }
+
+ // Appends the offsets for the entire element hierarchy.
+ var elementPosition = FCKTools.GetDocumentPosition( window, element ) ;
+ offset += elementPosition.y ;
+
+ // Scroll the window to the desired position, if not already visible.
+ var currentScroll = FCKTools.GetScrollPosition( window ).Y ;
+ if ( offset > 0 && ( offset > currentScroll || offset < currentScroll - windowHeight ) )
+ window.scrollTo( 0, offset ) ;
+ },
+
+ /**
+ * Check if the element can be edited inside the browser.
+ */
+ CheckIsEditable : function( element )
+ {
+ // Get the element name.
+ var nodeName = element.nodeName.toLowerCase() ;
+
+ // Get the element DTD (defaults to span for unknown elements).
+ var childDTD = FCK.DTD[ nodeName ] || FCK.DTD.span ;
+
+ // In the DTD # == text node.
+ return ( childDTD['#'] && !FCKListsLib.NonEditableElements[ nodeName ] ) ;
+ },
+
+ GetSelectedDivContainers : function()
+ {
+ var currentBlocks = [] ;
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+
+ var startNode = range.GetTouchedStartNode() ;
+ var endNode = range.GetTouchedEndNode() ;
+ var currentNode = startNode ;
+
+ if ( startNode == endNode )
+ {
+ while ( endNode.nodeType == 1 && endNode.lastChild )
+ endNode = endNode.lastChild ;
+ endNode = FCKDomTools.GetNextSourceNode( endNode ) ;
+ }
+
+ while ( currentNode && currentNode != endNode )
+ {
+ if ( currentNode.nodeType != 3 || !/^[ \t\n]*$/.test( currentNode.nodeValue ) )
+ {
+ var path = new FCKElementPath( currentNode ) ;
+ var blockLimit = path.BlockLimit ;
+ if ( blockLimit && blockLimit.nodeName.IEquals( 'div' ) && currentBlocks.IndexOf( blockLimit ) == -1 )
+ currentBlocks.push( blockLimit ) ;
+ }
+
+ currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+ }
+
+ return currentBlocks ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklanguagemanager.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklanguagemanager.js
new file mode 100644
index 0000000..6efeb49
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklanguagemanager.js
@@ -0,0 +1,165 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKLanguageManager object that is used for language
+ * operations.
+ */
+
+var FCKLanguageManager = FCK.Language =
+{
+ AvailableLanguages :
+ {
+ af : 'Afrikaans',
+ ar : 'Arabic',
+ bg : 'Bulgarian',
+ bn : 'Bengali/Bangla',
+ bs : 'Bosnian',
+ ca : 'Catalan',
+ cs : 'Czech',
+ da : 'Danish',
+ de : 'German',
+ el : 'Greek',
+ en : 'English',
+ 'en-au' : 'English (Australia)',
+ 'en-ca' : 'English (Canadian)',
+ 'en-uk' : 'English (United Kingdom)',
+ eo : 'Esperanto',
+ es : 'Spanish',
+ et : 'Estonian',
+ eu : 'Basque',
+ fa : 'Persian',
+ fi : 'Finnish',
+ fo : 'Faroese',
+ fr : 'French',
+ 'fr-ca' : 'French (Canada)',
+ gl : 'Galician',
+ gu : 'Gujarati',
+ he : 'Hebrew',
+ hi : 'Hindi',
+ hr : 'Croatian',
+ hu : 'Hungarian',
+ is : 'Icelandic',
+ it : 'Italian',
+ ja : 'Japanese',
+ km : 'Khmer',
+ ko : 'Korean',
+ lt : 'Lithuanian',
+ lv : 'Latvian',
+ mn : 'Mongolian',
+ ms : 'Malay',
+ nb : 'Norwegian Bokmal',
+ nl : 'Dutch',
+ no : 'Norwegian',
+ pl : 'Polish',
+ pt : 'Portuguese (Portugal)',
+ 'pt-br' : 'Portuguese (Brazil)',
+ ro : 'Romanian',
+ ru : 'Russian',
+ sk : 'Slovak',
+ sl : 'Slovenian',
+ sr : 'Serbian (Cyrillic)',
+ 'sr-latn' : 'Serbian (Latin)',
+ sv : 'Swedish',
+ th : 'Thai',
+ tr : 'Turkish',
+ uk : 'Ukrainian',
+ vi : 'Vietnamese',
+ zh : 'Chinese Traditional',
+ 'zh-cn' : 'Chinese Simplified'
+ },
+
+ GetActiveLanguage : function()
+ {
+ if ( FCKConfig.AutoDetectLanguage )
+ {
+ var sUserLang ;
+
+ // IE accepts "navigator.userLanguage" while Gecko "navigator.language".
+ if ( navigator.userLanguage )
+ sUserLang = navigator.userLanguage.toLowerCase() ;
+ else if ( navigator.language )
+ sUserLang = navigator.language.toLowerCase() ;
+ else
+ {
+ // Firefox 1.0 PR has a bug: it doens't support the "language" property.
+ return FCKConfig.DefaultLanguage ;
+ }
+
+ // Some language codes are set in 5 characters,
+ // like "pt-br" for Brazilian Portuguese.
+ if ( sUserLang.length >= 5 )
+ {
+ sUserLang = sUserLang.substr(0,5) ;
+ if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+ }
+
+ // If the user's browser is set to, for example, "pt-br" but only the
+ // "pt" language file is available then get that file.
+ if ( sUserLang.length >= 2 )
+ {
+ sUserLang = sUserLang.substr(0,2) ;
+ if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+ }
+ }
+
+ return this.DefaultLanguage ;
+ },
+
+ TranslateElements : function( targetDocument, tag, propertyToSet, encode )
+ {
+ var e = targetDocument.getElementsByTagName(tag) ;
+ var sKey, s ;
+ for ( var i = 0 ; i < e.length ; i++ )
+ {
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ if ( (sKey = e[i].getAttribute( 'fckLang' )) )
+ {
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ if ( (s = FCKLang[ sKey ]) )
+ {
+ if ( encode )
+ s = FCKTools.HTMLEncode( s ) ;
+ e[i][ propertyToSet ] = s ;
+ }
+ }
+ }
+ },
+
+ TranslatePage : function( targetDocument )
+ {
+ this.TranslateElements( targetDocument, 'INPUT', 'value' ) ;
+ this.TranslateElements( targetDocument, 'SPAN', 'innerHTML' ) ;
+ this.TranslateElements( targetDocument, 'LABEL', 'innerHTML' ) ;
+ this.TranslateElements( targetDocument, 'OPTION', 'innerHTML', true ) ;
+ this.TranslateElements( targetDocument, 'LEGEND', 'innerHTML' ) ;
+ },
+
+ Initialize : function()
+ {
+ if ( this.AvailableLanguages[ FCKConfig.DefaultLanguage ] )
+ this.DefaultLanguage = FCKConfig.DefaultLanguage ;
+ else
+ this.DefaultLanguage = 'en' ;
+
+ this.ActiveLanguage = new Object() ;
+ this.ActiveLanguage.Code = this.GetActiveLanguage() ;
+ this.ActiveLanguage.Name = this.AvailableLanguages[ this.ActiveLanguage.Code ] ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklisthandler.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklisthandler.js
new file mode 100644
index 0000000..32c237f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklisthandler.js
@@ -0,0 +1,152 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Tool object to manage HTML lists items (UL, OL and LI).
+ */
+
+var FCKListHandler =
+{
+ OutdentListItem : function( listItem )
+ {
+ var eParent = listItem.parentNode ;
+
+ // It may happen that a LI is not in a UL or OL (Orphan).
+ if ( eParent.tagName.toUpperCase().Equals( 'UL','OL' ) )
+ {
+ var oDocument = FCKTools.GetElementDocument( listItem ) ;
+ var oDogFrag = new FCKDocumentFragment( oDocument ) ;
+
+ // All children and successive siblings will be moved to a a DocFrag.
+ var eNextSiblings = oDogFrag.RootNode ;
+ var eHasLiSibling = false ;
+
+ // If we have nested lists inside it, let's move it to the list of siblings.
+ var eChildList = FCKDomTools.GetFirstChild( listItem, ['UL','OL'] ) ;
+ if ( eChildList )
+ {
+ eHasLiSibling = true ;
+
+ var eChild ;
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ while ( (eChild = eChildList.firstChild) )
+ eNextSiblings.appendChild( eChildList.removeChild( eChild ) ) ;
+
+ FCKDomTools.RemoveNode( eChildList ) ;
+ }
+
+ // Move all successive siblings.
+ var eSibling ;
+ var eHasSuccessiveLiSibling = false ;
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ while ( (eSibling = listItem.nextSibling) )
+ {
+ if ( !eHasLiSibling && eSibling.nodeType == 1 && eSibling.nodeName.toUpperCase() == 'LI' )
+ eHasSuccessiveLiSibling = eHasLiSibling = true ;
+
+ eNextSiblings.appendChild( eSibling.parentNode.removeChild( eSibling ) ) ;
+
+ // If a sibling is a incorrectly nested UL or OL, consider only its children.
+ if ( !eHasSuccessiveLiSibling && eSibling.nodeType == 1 && eSibling.nodeName.toUpperCase().Equals( 'UL','OL' ) )
+ FCKDomTools.RemoveNode( eSibling, true ) ;
+ }
+
+ // If we are in a list chain.
+ var sParentParentTag = eParent.parentNode.tagName.toUpperCase() ;
+ var bWellNested = ( sParentParentTag == 'LI' ) ;
+ if ( bWellNested || sParentParentTag.Equals( 'UL','OL' ) )
+ {
+ if ( eHasLiSibling )
+ {
+ var eChildList = eParent.cloneNode( false ) ;
+ oDogFrag.AppendTo( eChildList ) ;
+ listItem.appendChild( eChildList ) ;
+ }
+ else if ( bWellNested )
+ oDogFrag.InsertAfterNode( eParent.parentNode ) ;
+ else
+ oDogFrag.InsertAfterNode( eParent ) ;
+
+ // Move the LI after its parent.parentNode (the upper LI in the hierarchy).
+ if ( bWellNested )
+ FCKDomTools.InsertAfterNode( eParent.parentNode, eParent.removeChild( listItem ) ) ;
+ else
+ FCKDomTools.InsertAfterNode( eParent, eParent.removeChild( listItem ) ) ;
+ }
+ else
+ {
+ if ( eHasLiSibling )
+ {
+ var eNextList = eParent.cloneNode( false ) ;
+ oDogFrag.AppendTo( eNextList ) ;
+ FCKDomTools.InsertAfterNode( eParent, eNextList ) ;
+ }
+
+ var eBlock = oDocument.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
+ FCKDomTools.MoveChildren( eParent.removeChild( listItem ), eBlock ) ;
+ FCKDomTools.InsertAfterNode( eParent, eBlock ) ;
+
+ if ( FCKConfig.EnterMode == 'br' )
+ {
+ // We need the bogus to make it work properly. In Gecko, we
+ // need it before the new block, on IE, after it.
+ if ( FCKBrowserInfo.IsGecko )
+ eBlock.parentNode.insertBefore( FCKTools.CreateBogusBR( oDocument ), eBlock ) ;
+ else
+ FCKDomTools.InsertAfterNode( eBlock, FCKTools.CreateBogusBR( oDocument ) ) ;
+
+ FCKDomTools.RemoveNode( eBlock, true ) ;
+ }
+ }
+
+ if ( this.CheckEmptyList( eParent ) )
+ FCKDomTools.RemoveNode( eParent, true ) ;
+ }
+ },
+
+ CheckEmptyList : function( listElement )
+ {
+ return ( FCKDomTools.GetFirstChild( listElement, 'LI' ) == null ) ;
+ },
+
+ // Check if the list has contents (excluding nested lists).
+ CheckListHasContents : function( listElement )
+ {
+ var eChildNode = listElement.firstChild ;
+
+ while ( eChildNode )
+ {
+ switch ( eChildNode.nodeType )
+ {
+ case 1 :
+ if ( !eChildNode.nodeName.IEquals( 'UL','LI' ) )
+ return true ;
+ break ;
+
+ case 3 :
+ if ( eChildNode.nodeValue.Trim().length > 0 )
+ return true ;
+ }
+
+ eChildNode = eChildNode.nextSibling ;
+ }
+
+ return false ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklistslib.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklistslib.js
new file mode 100644
index 0000000..ac2e0aa
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklistslib.js
@@ -0,0 +1,63 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Library of keys collections.
+ *
+ * Test have shown that check for the existence of a key in an object is the
+ * most efficient list entry check (10x faster that regex). Example:
+ * if ( FCKListsLib.<ListName>[key] != null )
+ */
+
+var FCKListsLib =
+{
+ // We are not handling <ins> and <del> as block elements, for now.
+ BlockElements : { address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },
+
+ // Block elements that may be filled with &nbsp; if empty.
+ NonEmptyBlockElements : { p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },
+
+ // Inline elements which MUST have child nodes.
+ InlineChildReqElements : { 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 },
+
+ // Inline elements which are not marked as empty "Empty" in the XHTML DTD.
+ InlineNonEmptyElements : { a:1,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 },
+
+ // Elements marked as empty "Empty" in the XHTML DTD.
+ EmptyElements : { base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },
+
+ // Elements that may be considered the "Block boundary" in an element path.
+ PathBlockElements : { 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,de:1 },
+
+ // Elements that may be considered the "Block limit" in an element path.
+ PathBlockLimitElements : { body:1,div:1,td:1,th:1,caption:1,form:1 },
+
+ // Block elements for the Styles System.
+ StyleBlockElements : { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },
+
+ // Object elements for the Styles System.
+ StyleObjectElements : { img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },
+
+ // Elements that accept text nodes, but are not possible to edit in the browser.
+ NonEditableElements : { button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },
+
+ // Elements used to separate block contents.
+ BlockBoundaries : { p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },
+ ListBoundaries : { p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckplugins.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckplugins.js
new file mode 100644
index 0000000..6e394ed
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckplugins.js
@@ -0,0 +1,46 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKPlugins object that is responsible for loading the Plugins.
+ */
+
+var FCKPlugins = FCK.Plugins = new Object() ;
+FCKPlugins.ItemsCount = 0 ;
+FCKPlugins.Items = new Object() ;
+
+FCKPlugins.Load = function()
+{
+ var oItems = FCKPlugins.Items ;
+
+ // build the plugins collection.
+ for ( var i = 0 ; i < FCKConfig.Plugins.Items.length ; i++ )
+ {
+ var oItem = FCKConfig.Plugins.Items[i] ;
+ var oPlugin = oItems[ oItem[0] ] = new FCKPlugin( oItem[0], oItem[1], oItem[2] ) ;
+ FCKPlugins.ItemsCount++ ;
+ }
+
+ // Load all items in the plugins collection.
+ for ( var s in oItems )
+ oItems[s].Load() ;
+
+ // This is a self destroyable function (must be called once).
+ FCKPlugins.Load = null ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckregexlib.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckregexlib.js
new file mode 100644
index 0000000..7c98f07
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckregexlib.js
@@ -0,0 +1,100 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * These are some Regular Expressions used by the editor.
+ */
+
+var FCKRegexLib =
+{
+// This is the Regular expression used by the SetData method for the "&apos;" entity.
+AposEntity : /&apos;/gi ,
+
+// Used by the Styles combo to identify styles that can't be applied to text.
+ObjectElements : /^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i ,
+
+// List all named commands (commands that can be interpreted by the browser "execCommand" method.
+NamedCommands : /^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i ,
+
+BeforeBody : /(^[\s\S]*\<body[^\>]*\>)/i,
+AfterBody : /(\<\/body\>[\s\S]*$)/i,
+
+// Temporary text used to solve some browser specific limitations.
+ToReplace : /___fcktoreplace:([\w]+)/ig ,
+
+// Get the META http-equiv attribute from the tag.
+MetaHttpEquiv : /http-equiv\s*=\s*["']?([^"' ]+)/i ,
+
+HasBaseTag : /<base /i ,
+HasBodyTag : /<body[\s|>]/i ,
+
+HtmlOpener : /<html\s?[^>]*>/i ,
+HeadOpener : /<head\s?[^>]*>/i ,
+HeadCloser : /<\/head\s*>/i ,
+
+// Temporary classes (Tables without border, Anchors with content) used in IE
+FCK_Class : /\s*FCK__[^ ]*(?=\s+|$)/ ,
+
+// Validate element names (it must be in lowercase).
+ElementName : /(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/ ,
+
+// Used in conjunction with the FCKConfig.ForceSimpleAmpersand configuration option.
+ForceSimpleAmpersand : /___FCKAmp___/g ,
+
+// Get the closing parts of the tags with no closing tags, like <br/>... gets the "/>" part.
+SpaceNoClose : /\/>/g ,
+
+// Empty elements may be <p></p> or even a simple opening <p> (see #211).
+EmptyParagraph : /^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/ ,
+
+EmptyOutParagraph : /^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/ ,
+
+TagBody : /></ ,
+
+GeckoEntitiesMarker : /#\?-\:/g ,
+
+// We look for the "src" and href attribute with the " or ' or without one of
+// them. We have to do all in one, otherwise we will have problems with URLs
+// like "thumbnail.php?src=someimage.jpg" (SF-BUG 1554141).
+ProtectUrlsImg : /<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+ProtectUrlsA : /<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+ProtectUrlsArea : /<area(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+
+Html4DocType : /HTML 4\.0 Transitional/i ,
+DocTypeTag : /<!DOCTYPE[^>]*>/i ,
+HtmlDocType : /DTD HTML/ ,
+
+// These regex are used to save the original event attributes in the HTML.
+TagsWithEvent : /<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g ,
+EventAttributes : /\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,
+ProtectedEvents : /\s\w+_fckprotectedatt="([^"]+)"/g,
+
+StyleProperties : /\S+\s*:/g,
+
+// [a-zA-Z0-9:]+ seams to be more efficient than [\w:]+
+InvalidSelfCloseTags : /(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,
+
+// All variables defined in a style attribute or style definition. The variable
+// name is returned with $2.
+StyleVariableAttName : /#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,
+
+RegExp : /^\/(.*)\/([gim]*)$/,
+
+HtmlTag : /<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection.js
new file mode 100644
index 0000000..3021fc7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection.js
@@ -0,0 +1,42 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions.
+ */
+
+var FCKSelection = FCK.Selection =
+{
+ GetParentBlock : function()
+ {
+ var retval = this.GetParentElement() ;
+ while ( retval )
+ {
+ if ( FCKListsLib.BlockBoundaries[retval.nodeName.toLowerCase()] )
+ break ;
+ retval = retval.parentNode ;
+ }
+ return retval ;
+ },
+
+ ApplyStyle : function( styleDefinition )
+ {
+ FCKStyles.ApplyStyle( new FCKStyle( styleDefinition ) ) ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_gecko.js
new file mode 100644
index 0000000..6a9e5f0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_gecko.js
@@ -0,0 +1,228 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions. (Gecko specific implementation)
+ */
+
+// Get the selection type (like document.select.type in IE).
+FCKSelection.GetType = function()
+{
+ // By default set the type to "Text".
+ var type = 'Text' ;
+
+ // Check if the actual selection is a Control (IMG, TABLE, HR, etc...).
+
+ var sel ;
+ try { sel = this.GetSelection() ; } catch (e) {}
+
+ if ( sel && sel.rangeCount == 1 )
+ {
+ var range = sel.getRangeAt(0) ;
+ if ( range.startContainer == range.endContainer
+ && ( range.endOffset - range.startOffset ) == 1
+ && range.startContainer.nodeType == 1
+ && FCKListsLib.StyleObjectElements[ range.startContainer.childNodes[ range.startOffset ].nodeName.toLowerCase() ] )
+ {
+ type = 'Control' ;
+ }
+ }
+
+ return type ;
+}
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+ var selection = !!FCK.EditorWindow && this.GetSelection() ;
+ if ( !selection || selection.rangeCount < 1 )
+ return null ;
+
+ var range = selection.getRangeAt( 0 ) ;
+ if ( range.startContainer != range.endContainer || range.startContainer.nodeType != 1 || range.startOffset != range.endOffset - 1 )
+ return null ;
+
+ var node = range.startContainer.childNodes[ range.startOffset ] ;
+ if ( node.nodeType != 1 )
+ return null ;
+
+ return node ;
+}
+
+FCKSelection.GetParentElement = function()
+{
+ if ( this.GetType() == 'Control' )
+ return FCKSelection.GetSelectedElement().parentNode ;
+ else
+ {
+ var oSel = this.GetSelection() ;
+ if ( oSel )
+ {
+ // if anchorNode == focusNode, see if the selection is text only or including nodes.
+ // if text only, return the parent node.
+ // if the selection includes DOM nodes, then the anchorNode is the nearest container.
+ if ( oSel.anchorNode && oSel.anchorNode == oSel.focusNode )
+ {
+ var oRange = oSel.getRangeAt( 0 ) ;
+ if ( oRange.collapsed || oRange.startContainer.nodeType == 3 )
+ return oSel.anchorNode.parentNode ;
+ else
+ return oSel.anchorNode ;
+ }
+
+ // looks like we're having a large selection here. To make the behavior same as IE's TextRange.parentElement(),
+ // we need to find the nearest ancestor node which encapsulates both the beginning and the end of the selection.
+ // TODO: A simpler logic can be found.
+ var anchorPath = new FCKElementPath( oSel.anchorNode ) ;
+ var focusPath = new FCKElementPath( oSel.focusNode ) ;
+ var deepPath = null ;
+ var shallowPath = null ;
+ if ( anchorPath.Elements.length > focusPath.Elements.length )
+ {
+ deepPath = anchorPath.Elements ;
+ shallowPath = focusPath.Elements ;
+ }
+ else
+ {
+ deepPath = focusPath.Elements ;
+ shallowPath = anchorPath.Elements ;
+ }
+
+ var deepPathBase = deepPath.length - shallowPath.length ;
+ for( var i = 0 ; i < shallowPath.length ; i++)
+ {
+ if ( deepPath[deepPathBase + i] == shallowPath[i])
+ return shallowPath[i];
+ }
+ return null ;
+ }
+ }
+ return null ;
+}
+
+FCKSelection.GetBoundaryParentElement = function( startBoundary )
+{
+ if ( ! FCK.EditorWindow )
+ return null ;
+ if ( this.GetType() == 'Control' )
+ return FCKSelection.GetSelectedElement().parentNode ;
+ else
+ {
+ var oSel = this.GetSelection() ;
+ if ( oSel && oSel.rangeCount > 0 )
+ {
+ var range = oSel.getRangeAt( startBoundary ? 0 : ( oSel.rangeCount - 1 ) ) ;
+
+ var element = startBoundary ? range.startContainer : range.endContainer ;
+
+ return ( element.nodeType == 1 ? element : element.parentNode ) ;
+ }
+ }
+ return null ;
+}
+
+FCKSelection.SelectNode = function( element )
+{
+ var oRange = FCK.EditorDocument.createRange() ;
+ oRange.selectNode( element ) ;
+
+ var oSel = this.GetSelection() ;
+ oSel.removeAllRanges() ;
+ oSel.addRange( oRange ) ;
+}
+
+FCKSelection.Collapse = function( toStart )
+{
+ var oSel = this.GetSelection() ;
+
+ if ( toStart == null || toStart === true )
+ oSel.collapseToStart() ;
+ else
+ oSel.collapseToEnd() ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+ var oContainer = this.GetSelectedElement() ;
+ if ( ! oContainer && FCK.EditorWindow )
+ {
+ try { oContainer = this.GetSelection().getRangeAt(0).startContainer ; }
+ catch(e){}
+ }
+
+ while ( oContainer )
+ {
+ if ( oContainer.nodeType == 1 && oContainer.nodeName.IEquals( nodeTagName ) ) return true ;
+ oContainer = oContainer.parentNode ;
+ }
+
+ return false ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+ var oNode ;
+
+ var oContainer = this.GetSelectedElement() ;
+ if ( ! oContainer )
+ oContainer = this.GetSelection().getRangeAt(0).startContainer ;
+
+ while ( oContainer )
+ {
+ if ( oContainer.nodeName.IEquals( nodeTagName ) )
+ return oContainer ;
+
+ oContainer = oContainer.parentNode ;
+ }
+ return null ;
+}
+
+FCKSelection.Delete = function()
+{
+ // Gets the actual selection.
+ var oSel = this.GetSelection() ;
+
+ // Deletes the actual selection contents.
+ for ( var i = 0 ; i < oSel.rangeCount ; i++ )
+ {
+ oSel.getRangeAt(i).deleteContents() ;
+ }
+
+ return oSel ;
+}
+
+/**
+ * Returns the native selection object.
+ */
+FCKSelection.GetSelection = function()
+{
+ return FCK.EditorWindow.getSelection() ;
+}
+
+// The following are IE only features (we don't need then in other browsers
+// currently).
+FCKSelection.Save = function()
+{}
+FCKSelection.Restore = function()
+{}
+FCKSelection.Release = function()
+{}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_ie.js
new file mode 100644
index 0000000..7dc180f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_ie.js
@@ -0,0 +1,287 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions. (IE specific implementation)
+ */
+
+// Get the selection type.
+FCKSelection.GetType = function()
+{
+ // It is possible that we can still get a text range object even when type=='None' is returned by IE.
+ // So we'd better check the object returned by createRange() rather than by looking at the type.
+ try
+ {
+ var ieType = FCKSelection.GetSelection().type ;
+ if ( ieType == 'Control' || ieType == 'Text' )
+ return ieType ;
+
+ if ( this.GetSelection().createRange().parentElement )
+ return 'Text' ;
+ }
+ catch(e)
+ {
+ // Nothing to do, it will return None properly.
+ }
+
+ return 'None' ;
+} ;
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+ if ( this.GetType() == 'Control' )
+ {
+ var oRange = this.GetSelection().createRange() ;
+
+ if ( oRange && oRange.item )
+ return this.GetSelection().createRange().item(0) ;
+ }
+ return null ;
+} ;
+
+FCKSelection.GetParentElement = function()
+{
+ switch ( this.GetType() )
+ {
+ case 'Control' :
+ var el = FCKSelection.GetSelectedElement() ;
+ return el ? el.parentElement : null ;
+
+ case 'None' :
+ return null ;
+
+ default :
+ return this.GetSelection().createRange().parentElement() ;
+ }
+} ;
+
+FCKSelection.GetBoundaryParentElement = function( startBoundary )
+{
+ switch ( this.GetType() )
+ {
+ case 'Control' :
+ var el = FCKSelection.GetSelectedElement() ;
+ return el ? el.parentElement : null ;
+
+ case 'None' :
+ return null ;
+
+ default :
+ var doc = FCK.EditorDocument ;
+
+ var range = doc.selection.createRange() ;
+ range.collapse( startBoundary !== false ) ;
+
+ var el = range.parentElement() ;
+
+ // It may happen that range is comming from outside "doc", so we
+ // must check it (#1204).
+ return FCKTools.GetElementDocument( el ) == doc ? el : null ;
+ }
+} ;
+
+FCKSelection.SelectNode = function( node )
+{
+ FCK.Focus() ;
+ this.GetSelection().empty() ;
+ var oRange ;
+ try
+ {
+ // Try to select the node as a control.
+ oRange = FCK.EditorDocument.body.createControlRange() ;
+ oRange.addElement( node ) ;
+ }
+ catch(e)
+ {
+ // If failed, select it as a text range.
+ oRange = FCK.EditorDocument.body.createTextRange() ;
+ oRange.moveToElementText( node ) ;
+ }
+
+ oRange.select() ;
+} ;
+
+FCKSelection.Collapse = function( toStart )
+{
+ FCK.Focus() ;
+ if ( this.GetType() == 'Text' )
+ {
+ var oRange = this.GetSelection().createRange() ;
+ oRange.collapse( toStart == null || toStart === true ) ;
+ oRange.select() ;
+ }
+} ;
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+ var oContainer ;
+
+ if ( this.GetSelection().type == "Control" )
+ {
+ oContainer = this.GetSelectedElement() ;
+ }
+ else
+ {
+ var oRange = this.GetSelection().createRange() ;
+ oContainer = oRange.parentElement() ;
+ }
+
+ while ( oContainer )
+ {
+ if ( oContainer.nodeName.IEquals( nodeTagName ) ) return true ;
+ oContainer = oContainer.parentNode ;
+ }
+
+ return false ;
+} ;
+
+// The "nodeTagName" parameter must be UPPER CASE.
+// It can be also an array of names
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+ var oNode, oRange ;
+
+ if ( ! FCK.EditorDocument )
+ return null ;
+
+ if ( this.GetSelection().type == "Control" )
+ {
+ oRange = this.GetSelection().createRange() ;
+ for ( i = 0 ; i < oRange.length ; i++ )
+ {
+ if (oRange(i).parentNode)
+ {
+ oNode = oRange(i).parentNode ;
+ break ;
+ }
+ }
+ }
+ else
+ {
+ oRange = this.GetSelection().createRange() ;
+ oNode = oRange.parentElement() ;
+ }
+
+ while ( oNode && !oNode.nodeName.Equals( nodeTagName ) )
+ oNode = oNode.parentNode ;
+
+ return oNode ;
+} ;
+
+FCKSelection.Delete = function()
+{
+ // Gets the actual selection.
+ var oSel = this.GetSelection() ;
+
+ // Deletes the actual selection contents.
+ if ( oSel.type.toLowerCase() != "none" )
+ {
+ oSel.clear() ;
+ }
+
+ return oSel ;
+} ;
+
+/**
+ * Returns the native selection object.
+ */
+FCKSelection.GetSelection = function()
+{
+ this.Restore() ;
+ return FCK.EditorDocument.selection ;
+}
+
+FCKSelection.Save = function( lock )
+{
+ var editorDocument = FCK.EditorDocument ;
+
+ if ( !editorDocument )
+ return ;
+
+ // Avoid saving again a selection while a dialog is open #2616
+ if ( this.locked )
+ return ;
+ this.locked = !!lock ;
+
+ var selection = editorDocument.selection ;
+ var range ;
+
+ if ( selection )
+ {
+ // The call might fail if the document doesn't have the focus (#1801),
+ // but we don't want to modify the current selection (#2495) with a call to FCK.Focus() ;
+ try {
+ range = selection.createRange() ;
+ }
+ catch(e) {}
+
+ // Ensure that the range comes from the editor document.
+ if ( range )
+ {
+ if ( range.parentElement && FCKTools.GetElementDocument( range.parentElement() ) != editorDocument )
+ range = null ;
+ else if ( range.item && FCKTools.GetElementDocument( range.item(0) )!= editorDocument )
+ range = null ;
+ }
+ }
+
+ this.SelectionData = range ;
+}
+
+FCKSelection._GetSelectionDocument = function( selection )
+{
+ var range = selection.createRange() ;
+ if ( !range )
+ return null;
+ else if ( range.item )
+ return FCKTools.GetElementDocument( range.item( 0 ) ) ;
+ else
+ return FCKTools.GetElementDocument( range.parentElement() ) ;
+}
+
+FCKSelection.Restore = function()
+{
+ if ( this.SelectionData )
+ {
+ FCK.IsSelectionChangeLocked = true ;
+
+ try
+ {
+ // Don't repeat the restore process if the editor document is already selected.
+ if ( String( this._GetSelectionDocument( FCK.EditorDocument.selection ).body.contentEditable ) == 'true' )
+ {
+ FCK.IsSelectionChangeLocked = false ;
+ return ;
+ }
+ this.SelectionData.select() ;
+ }
+ catch ( e ) {}
+
+ FCK.IsSelectionChangeLocked = false ;
+ }
+}
+
+FCKSelection.Release = function()
+{
+ this.locked = false ;
+ delete this.SelectionData ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckstyles.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckstyles.js
new file mode 100644
index 0000000..fd14fb5
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckstyles.js
@@ -0,0 +1,381 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Handles styles in a give document.
+ */
+
+var FCKStyles = FCK.Styles =
+{
+ _Callbacks : {},
+ _ObjectStyles : {},
+
+ ApplyStyle : function( style )
+ {
+ if ( typeof style == 'string' )
+ style = this.GetStyles()[ style ] ;
+
+ if ( style )
+ {
+ if ( style.GetType() == FCK_STYLE_OBJECT )
+ style.ApplyToObject( FCKSelection.GetSelectedElement() ) ;
+ else
+ style.ApplyToSelection( FCK.EditorWindow ) ;
+
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ }
+ },
+
+ RemoveStyle : function( style )
+ {
+ if ( typeof style == 'string' )
+ style = this.GetStyles()[ style ] ;
+
+ if ( style )
+ {
+ style.RemoveFromSelection( FCK.EditorWindow ) ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ }
+ },
+
+ /**
+ * Defines a callback function to be called when the current state of a
+ * specific style changes.
+ */
+ AttachStyleStateChange : function( styleName, callback, callbackOwner )
+ {
+ var callbacks = this._Callbacks[ styleName ] ;
+
+ if ( !callbacks )
+ callbacks = this._Callbacks[ styleName ] = [] ;
+
+ callbacks.push( [ callback, callbackOwner ] ) ;
+ },
+
+ CheckSelectionChanges : function()
+ {
+ var startElement = FCKSelection.GetBoundaryParentElement( true ) ;
+
+ if ( !startElement )
+ return ;
+
+ // Walks the start node parents path, checking all styles that are being listened.
+ var path = new FCKElementPath( startElement ) ;
+ var styles = this.GetStyles() ;
+
+ for ( var styleName in styles )
+ {
+ var callbacks = this._Callbacks[ styleName ] ;
+
+ if ( callbacks )
+ {
+ var style = styles[ styleName ] ;
+ var state = style.CheckActive( path ) ;
+
+ if ( state != ( style._LastState || null ) )
+ {
+ style._LastState = state ;
+
+ for ( var i = 0 ; i < callbacks.length ; i++ )
+ {
+ var callback = callbacks[i][0] ;
+ var callbackOwner = callbacks[i][1] ;
+
+ callback.call( callbackOwner || window, styleName, state ) ;
+ }
+ }
+ }
+ }
+ },
+
+ CheckStyleInSelection : function( styleName )
+ {
+ return false ;
+ },
+
+ _GetRemoveFormatTagsRegex : function ()
+ {
+ var regex = new RegExp( '^(?:' + FCKConfig.RemoveFormatTags.replace( /,/g,'|' ) + ')$', 'i' ) ;
+
+ return (this._GetRemoveFormatTagsRegex = function()
+ {
+ return regex ;
+ })
+ && regex ;
+ },
+
+ /**
+ * Remove all styles from the current selection.
+ * TODO:
+ * - This is almost a duplication of FCKStyle.RemoveFromRange. We should
+ * try to merge things.
+ */
+ RemoveAll : function()
+ {
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+
+ if ( range.CheckIsCollapsed() )
+ return ;
+
+ // Expand the range, if inside inline element boundaries.
+ range.Expand( 'inline_elements' ) ;
+
+ // Get the bookmark nodes.
+ // Bookmark the range so we can re-select it after processing.
+ var bookmark = range.CreateBookmark( true ) ;
+
+ // The style will be applied within the bookmark boundaries.
+ var startNode = range.GetBookmarkNode( bookmark, true ) ;
+ var endNode = range.GetBookmarkNode( bookmark, false ) ;
+
+ range.Release( true ) ;
+
+ var tagsRegex = this._GetRemoveFormatTagsRegex() ;
+
+ // We need to check the selection boundaries (bookmark spans) to break
+ // the code in a way that we can properly remove partially selected nodes.
+ // For example, removing a <b> style from
+ // <b>This is [some text</b> to show <b>the] problem</b>
+ // ... where [ and ] represent the selection, must result:
+ // <b>This is </b>[some text to show the]<b> problem</b>
+ // The strategy is simple, we just break the partial nodes before the
+ // removal logic, having something that could be represented this way:
+ // <b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>
+
+ // Let's start checking the start boundary.
+ var path = new FCKElementPath( startNode ) ;
+ var pathElements = path.Elements ;
+ var pathElement ;
+
+ for ( var i = 1 ; i < pathElements.length ; i++ )
+ {
+ pathElement = pathElements[i] ;
+
+ if ( pathElement == path.Block || pathElement == path.BlockLimit )
+ break ;
+
+ // If this element can be removed (even partially).
+ if ( tagsRegex.test( pathElement.nodeName ) )
+ FCKDomTools.BreakParent( startNode, pathElement, range ) ;
+ }
+
+ // Now the end boundary.
+ path = new FCKElementPath( endNode ) ;
+ pathElements = path.Elements ;
+
+ for ( var i = 1 ; i < pathElements.length ; i++ )
+ {
+ pathElement = pathElements[i] ;
+
+ if ( pathElement == path.Block || pathElement == path.BlockLimit )
+ break ;
+
+ elementName = pathElement.nodeName.toLowerCase() ;
+
+ // If this element can be removed (even partially).
+ if ( tagsRegex.test( pathElement.nodeName ) )
+ FCKDomTools.BreakParent( endNode, pathElement, range ) ;
+ }
+
+ // Navigate through all nodes between the bookmarks.
+ var currentNode = FCKDomTools.GetNextSourceNode( startNode, true, 1 ) ;
+
+ while ( currentNode )
+ {
+ // If we have reached the end of the selection, stop looping.
+ if ( currentNode == endNode )
+ break ;
+
+ // Cache the next node to be processed. Do it now, because
+ // currentNode may be removed.
+ var nextNode = FCKDomTools.GetNextSourceNode( currentNode, false, 1 ) ;
+
+ // Remove elements nodes that match with this style rules.
+ if ( tagsRegex.test( currentNode.nodeName ) )
+ FCKDomTools.RemoveNode( currentNode, true ) ;
+ else
+ FCKDomTools.RemoveAttributes( currentNode, FCKConfig.RemoveAttributesArray );
+
+ currentNode = nextNode ;
+ }
+
+ range.SelectBookmark( bookmark ) ;
+
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ },
+
+ GetStyle : function( styleName )
+ {
+ return this.GetStyles()[ styleName ] ;
+ },
+
+ GetStyles : function()
+ {
+ var styles = this._GetStyles ;
+ if ( !styles )
+ {
+ styles = this._GetStyles = FCKTools.Merge(
+ this._LoadStylesCore(),
+ this._LoadStylesCustom(),
+ this._LoadStylesXml() ) ;
+ }
+ return styles ;
+ },
+
+ CheckHasObjectStyle : function( elementName )
+ {
+ return !!this._ObjectStyles[ elementName ] ;
+ },
+
+ _LoadStylesCore : function()
+ {
+ var styles = {};
+ var styleDefs = FCKConfig.CoreStyles ;
+
+ for ( var styleName in styleDefs )
+ {
+ // Core styles are prefixed with _FCK_.
+ var style = styles[ '_FCK_' + styleName ] = new FCKStyle( styleDefs[ styleName ] ) ;
+ style.IsCore = true ;
+ }
+ return styles ;
+ },
+
+ _LoadStylesCustom : function()
+ {
+ var styles = {};
+ var styleDefs = FCKConfig.CustomStyles ;
+
+ if ( styleDefs )
+ {
+ for ( var styleName in styleDefs )
+ {
+ var style = styles[ styleName ] = new FCKStyle( styleDefs[ styleName ] ) ;
+ style.Name = styleName ;
+ }
+ }
+
+ return styles ;
+ },
+
+ _LoadStylesXml : function()
+ {
+ var styles = {};
+
+ var stylesXmlPath = FCKConfig.StylesXmlPath ;
+
+ if ( !stylesXmlPath || stylesXmlPath.length == 0 )
+ return styles ;
+
+ // Load the XML file into a FCKXml object.
+ var xml = new FCKXml() ;
+ xml.LoadUrl( stylesXmlPath ) ;
+
+ var stylesXmlObj = FCKXml.TransformToObject( xml.SelectSingleNode( 'Styles' ) ) ;
+
+ // Get the "Style" nodes defined in the XML file.
+ var styleNodes = stylesXmlObj.$Style ;
+
+ // Check that it did contain some valid nodes
+ if ( !styleNodes )
+ return styles ;
+
+ // Add each style to our "Styles" collection.
+ for ( var i = 0 ; i < styleNodes.length ; i++ )
+ {
+ var styleNode = styleNodes[i] ;
+
+ var element = ( styleNode.element || '' ).toLowerCase() ;
+
+ if ( element.length == 0 )
+ throw( 'The element name is required. Error loading "' + stylesXmlPath + '"' ) ;
+
+ var styleDef = {
+ Element : element,
+ Attributes : {},
+ Styles : {},
+ Overrides : []
+ } ;
+
+ // Get the attributes defined for the style (if any).
+ var attNodes = styleNode.$Attribute || [] ;
+
+ // Add the attributes to the style definition object.
+ for ( var j = 0 ; j < attNodes.length ; j++ )
+ {
+ styleDef.Attributes[ attNodes[j].name ] = attNodes[j].value ;
+ }
+
+ // Get the styles defined for the style (if any).
+ var cssStyleNodes = styleNode.$Style || [] ;
+
+ // Add the attributes to the style definition object.
+ for ( j = 0 ; j < cssStyleNodes.length ; j++ )
+ {
+ styleDef.Styles[ cssStyleNodes[j].name ] = cssStyleNodes[j].value ;
+ }
+
+ // Load override definitions.
+ var cssStyleOverrideNodes = styleNode.$Override ;
+ if ( cssStyleOverrideNodes )
+ {
+ for ( j = 0 ; j < cssStyleOverrideNodes.length ; j++ )
+ {
+ var overrideNode = cssStyleOverrideNodes[j] ;
+ var overrideDef =
+ {
+ Element : overrideNode.element
+ } ;
+
+ var overrideAttNode = overrideNode.$Attribute ;
+ if ( overrideAttNode )
+ {
+ overrideDef.Attributes = {} ;
+ for ( var k = 0 ; k < overrideAttNode.length ; k++ )
+ {
+ var overrideAttValue = overrideAttNode[k].value || null ;
+ if ( overrideAttValue )
+ {
+ // Check if the override attribute value is a regular expression.
+ var regexMatch = overrideAttValue && FCKRegexLib.RegExp.exec( overrideAttValue ) ;
+ if ( regexMatch )
+ overrideAttValue = new RegExp( regexMatch[1], regexMatch[2] || '' ) ;
+ }
+ overrideDef.Attributes[ overrideAttNode[k].name ] = overrideAttValue ;
+ }
+ }
+
+ styleDef.Overrides.push( overrideDef ) ;
+ }
+ }
+
+ var style = new FCKStyle( styleDef ) ;
+ style.Name = styleNode.name || element ;
+
+ if ( style.GetType() == FCK_STYLE_OBJECT )
+ this._ObjectStyles[ element ] = true ;
+
+ // Add the style to the "Styles" collection using it's name as the key.
+ styles[ style.Name ] = style ;
+ }
+
+ return styles ;
+ }
+} ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler.js
new file mode 100644
index 0000000..25069f0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler.js
@@ -0,0 +1,863 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations.
+ */
+
+var FCKTableHandler = new Object() ;
+
+FCKTableHandler.InsertRow = function( insertBefore )
+{
+ // Get the row where the selection is placed in.
+ var oRow = FCKSelection.MoveToAncestorNode( 'TR' ) ;
+ if ( !oRow ) return ;
+
+ // Create a clone of the row.
+ var oNewRow = oRow.cloneNode( true ) ;
+
+ // Insert the new row (copy) before of it.
+ oRow.parentNode.insertBefore( oNewRow, oRow ) ;
+
+ // Clean one of the rows to produce the illusion of inserting an empty row before or after.
+ FCKTableHandler.ClearRow( insertBefore ? oNewRow : oRow ) ;
+}
+
+FCKTableHandler.DeleteRows = function( row )
+{
+ // If no row has been passed as a parameter,
+ // then get the row( s ) containing the cells where the selection is placed in.
+ // If user selected multiple rows ( by selecting multiple cells ), walk
+ // the selected cell list and delete the rows containing the selected cells
+ if ( ! row )
+ {
+ var aCells = FCKTableHandler.GetSelectedCells() ;
+ var aRowsToDelete = new Array() ;
+ //queue up the rows -- it's possible ( and likely ) that we may get duplicates
+ for ( var i = 0; i < aCells.length; i++ )
+ {
+ var oRow = aCells[i].parentNode ;
+ aRowsToDelete[oRow.rowIndex] = oRow ;
+ }
+ for ( var i = aRowsToDelete.length; i >= 0; i-- )
+ {
+ if ( aRowsToDelete[i] )
+ FCKTableHandler.DeleteRows( aRowsToDelete[i] );
+ }
+ return ;
+ }
+
+ // Get the row's table.
+ var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;
+
+ // If just one row is available then delete the entire table.
+ if ( oTable.rows.length == 1 )
+ {
+ FCKTableHandler.DeleteTable( oTable ) ;
+ return ;
+ }
+
+ // Delete the row.
+ row.parentNode.removeChild( row ) ;
+}
+
+FCKTableHandler.DeleteTable = function( table )
+{
+ // If no table has been passed as a parameter,
+ // then get the table where the selection is placed in.
+ if ( !table )
+ {
+ table = FCKSelection.GetSelectedElement() ;
+ if ( !table || table.tagName != 'TABLE' )
+ table = FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+ }
+ if ( !table ) return ;
+
+ // Delete the table.
+ FCKSelection.SelectNode( table ) ;
+ FCKSelection.Collapse();
+
+ // if the table is wrapped with a singleton <p> ( or something similar ), remove
+ // the surrounding tag -- which likely won't show after deletion anyway
+ if ( table.parentNode.childNodes.length == 1 )
+ table.parentNode.parentNode.removeChild( table.parentNode );
+ else
+ table.parentNode.removeChild( table ) ;
+}
+
+FCKTableHandler.InsertColumn = function( insertBefore )
+{
+ // Get the cell where the selection is placed in.
+ var oCell = null ;
+ var nodes = this.GetSelectedCells() ;
+
+ if ( nodes && nodes.length )
+ oCell = nodes[ insertBefore ? 0 : ( nodes.length - 1 ) ] ;
+
+ if ( ! oCell )
+ return ;
+
+ // Get the cell's table.
+ var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+ var iIndex = oCell.cellIndex ;
+
+ // Loop through all rows available in the table.
+ for ( var i = 0 ; i < oTable.rows.length ; i++ )
+ {
+ // Get the row.
+ var oRow = oTable.rows[i] ;
+
+ // If the row doesn't have enough cells, ignore it.
+ if ( oRow.cells.length < ( iIndex + 1 ) )
+ continue ;
+
+ oCell = oRow.cells[iIndex].cloneNode(false) ;
+
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( oCell ) ;
+
+ // Get back the currently selected cell.
+ var oBaseCell = oRow.cells[iIndex] ;
+
+ oRow.insertBefore( oCell, ( insertBefore ? oBaseCell : oBaseCell.nextSibling ) ) ;
+ }
+}
+
+FCKTableHandler.DeleteColumns = function( oCell )
+{
+ // if user selected multiple cols ( by selecting multiple cells ), walk
+ // the selected cell list and delete the rows containing the selected cells
+ if ( !oCell )
+ {
+ var aColsToDelete = FCKTableHandler.GetSelectedCells();
+ for ( var i = aColsToDelete.length; i >= 0; i-- )
+ {
+ if ( aColsToDelete[i] )
+ FCKTableHandler.DeleteColumns( aColsToDelete[i] );
+ }
+ return;
+ }
+
+ if ( !oCell ) return ;
+
+ // Get the cell's table.
+ var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+ // Get the cell index.
+ var iIndex = oCell.cellIndex ;
+
+ // Loop throw all rows (from down to up, because it's possible that some
+ // rows will be deleted).
+ for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- )
+ {
+ // Get the row.
+ var oRow = oTable.rows[i] ;
+
+ // If the cell to be removed is the first one and the row has just one cell.
+ if ( iIndex == 0 && oRow.cells.length == 1 )
+ {
+ // Remove the entire row.
+ FCKTableHandler.DeleteRows( oRow ) ;
+ continue ;
+ }
+
+ // If the cell to be removed exists the delete it.
+ if ( oRow.cells[iIndex] )
+ oRow.removeChild( oRow.cells[iIndex] ) ;
+ }
+}
+
+FCKTableHandler.InsertCell = function( cell, insertBefore )
+{
+ // Get the cell where the selection is placed in.
+ var oCell = null ;
+ var nodes = this.GetSelectedCells() ;
+ if ( nodes && nodes.length )
+ oCell = nodes[ insertBefore ? 0 : ( nodes.length - 1 ) ] ;
+ if ( ! oCell )
+ return null ;
+
+ // Create the new cell element to be added.
+ var oNewCell = FCK.EditorDocument.createElement( 'TD' ) ;
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( oNewCell ) ;
+
+ if ( !insertBefore && oCell.cellIndex == oCell.parentNode.cells.length - 1 )
+ oCell.parentNode.appendChild( oNewCell ) ;
+ else
+ oCell.parentNode.insertBefore( oNewCell, insertBefore ? oCell : oCell.nextSibling ) ;
+
+ return oNewCell ;
+}
+
+FCKTableHandler.DeleteCell = function( cell )
+{
+ // If this is the last cell in the row.
+ if ( cell.parentNode.cells.length == 1 )
+ {
+ // Delete the entire row.
+ FCKTableHandler.DeleteRows( cell.parentNode ) ;
+ return ;
+ }
+
+ // Delete the cell from the row.
+ cell.parentNode.removeChild( cell ) ;
+}
+
+FCKTableHandler.DeleteCells = function()
+{
+ var aCells = FCKTableHandler.GetSelectedCells() ;
+
+ for ( var i = aCells.length - 1 ; i >= 0 ; i-- )
+ {
+ FCKTableHandler.DeleteCell( aCells[i] ) ;
+ }
+}
+
+FCKTableHandler._MarkCells = function( cells, label )
+{
+ for ( var i = 0 ; i < cells.length ; i++ )
+ cells[i][label] = true ;
+}
+
+FCKTableHandler._UnmarkCells = function( cells, label )
+{
+ for ( var i = 0 ; i < cells.length ; i++ )
+ {
+ FCKDomTools.ClearElementJSProperty(cells[i], label ) ;
+ }
+}
+
+FCKTableHandler._ReplaceCellsByMarker = function( tableMap, marker, substitute )
+{
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ for ( var j = 0 ; j < tableMap[i].length ; j++ )
+ {
+ if ( tableMap[i][j][marker] )
+ tableMap[i][j] = substitute ;
+ }
+ }
+}
+
+FCKTableHandler._GetMarkerGeometry = function( tableMap, rowIdx, colIdx, markerName )
+{
+ var selectionWidth = 0 ;
+ var selectionHeight = 0 ;
+ var cellsLeft = 0 ;
+ var cellsUp = 0 ;
+ for ( var i = colIdx ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i++ )
+ selectionWidth++ ;
+ for ( var i = colIdx - 1 ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i-- )
+ {
+ selectionWidth++ ;
+ cellsLeft++ ;
+ }
+ for ( var i = rowIdx ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i++ )
+ selectionHeight++ ;
+ for ( var i = rowIdx - 1 ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i-- )
+ {
+ selectionHeight++ ;
+ cellsUp++ ;
+ }
+ return { 'width' : selectionWidth, 'height' : selectionHeight, 'x' : cellsLeft, 'y' : cellsUp } ;
+}
+
+FCKTableHandler.CheckIsSelectionRectangular = function()
+{
+ // If every row and column in an area on a plane are of the same width and height,
+ // Then the area is a rectangle.
+ var cells = FCKTableHandler.GetSelectedCells() ;
+ if ( cells.length < 1 )
+ return false ;
+
+ // Check if the selected cells are all in the same table section (thead, tfoot or tbody)
+ for (var i = 0; i < cells.length; i++)
+ {
+ if ( cells[i].parentNode.parentNode != cells[0].parentNode.parentNode )
+ return false ;
+ }
+
+ this._MarkCells( cells, '_CellSelected' ) ;
+
+ var tableMap = this._CreateTableMap( cells[0] ) ;
+ var rowIdx = cells[0].parentNode.rowIndex ;
+ var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, cells[0] ) ;
+
+ var geometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+ var baseColIdx = colIdx - geometry.x ;
+ var baseRowIdx = rowIdx - geometry.y ;
+
+ if ( geometry.width >= geometry.height )
+ {
+ for ( colIdx = baseColIdx ; colIdx < baseColIdx + geometry.width ; colIdx++ )
+ {
+ rowIdx = baseRowIdx + ( colIdx - baseColIdx ) % geometry.height ;
+ if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] )
+ {
+ this._UnmarkCells( cells, '_CellSelected' ) ;
+ return false ;
+ }
+ var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+ if ( g.width != geometry.width || g.height != geometry.height )
+ {
+ this._UnmarkCells( cells, '_CellSelected' ) ;
+ return false ;
+ }
+ }
+ }
+ else
+ {
+ for ( rowIdx = baseRowIdx ; rowIdx < baseRowIdx + geometry.height ; rowIdx++ )
+ {
+ colIdx = baseColIdx + ( rowIdx - baseRowIdx ) % geometry.width ;
+ if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] )
+ {
+ this._UnmarkCells( cells, '_CellSelected' ) ;
+ return false ;
+ }
+ var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+ if ( g.width != geometry.width || g.height != geometry.height )
+ {
+ this._UnmarkCells( cells, '_CellSelected' ) ;
+ return false ;
+ }
+ }
+ }
+
+ this._UnmarkCells( cells, '_CellSelected' ) ;
+ return true ;
+}
+
+FCKTableHandler.MergeCells = function()
+{
+ // Get all selected cells.
+ var cells = this.GetSelectedCells() ;
+ if ( cells.length < 2 )
+ return ;
+
+ // Assume the selected cells are already in a rectangular geometry.
+ // Because the checking is already done by FCKTableCommand.
+ var refCell = cells[0] ;
+ var tableMap = this._CreateTableMap( refCell ) ;
+ var rowIdx = refCell.parentNode.rowIndex ;
+ var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+
+ this._MarkCells( cells, '_SelectedCells' ) ;
+ var selectionGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SelectedCells' ) ;
+
+ var baseColIdx = colIdx - selectionGeometry.x ;
+ var baseRowIdx = rowIdx - selectionGeometry.y ;
+ var cellContents = FCKTools.GetElementDocument( refCell ).createDocumentFragment() ;
+ for ( var i = 0 ; i < selectionGeometry.height ; i++ )
+ {
+ var rowChildNodesCount = 0 ;
+ for ( var j = 0 ; j < selectionGeometry.width ; j++ )
+ {
+ var currentCell = tableMap[baseRowIdx + i][baseColIdx + j] ;
+ while ( currentCell.childNodes.length > 0 )
+ {
+ var node = currentCell.removeChild( currentCell.firstChild ) ;
+ if ( node.nodeType != 1
+ || ( node.getAttribute( 'type', 2 ) != '_moz' && node.getAttribute( '_moz_dirty' ) != null ) )
+ {
+ cellContents.appendChild( node ) ;
+ rowChildNodesCount++ ;
+ }
+ }
+ }
+ if ( rowChildNodesCount > 0 )
+ cellContents.appendChild( FCK.EditorDocument.createElement( 'br' ) ) ;
+ }
+
+ this._ReplaceCellsByMarker( tableMap, '_SelectedCells', refCell ) ;
+ this._UnmarkCells( cells, '_SelectedCells' ) ;
+ this._InstallTableMap( tableMap, refCell.parentNode.parentNode.parentNode ) ;
+ refCell.appendChild( cellContents ) ;
+
+ if ( FCKBrowserInfo.IsGeckoLike && ( ! refCell.firstChild ) )
+ FCKTools.AppendBogusBr( refCell ) ;
+
+ this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.MergeRight = function()
+{
+ var target = this.GetMergeRightTarget() ;
+ if ( target == null )
+ return ;
+ var refCell = target.refCell ;
+ var tableMap = target.tableMap ;
+ var nextCell = target.nextCell ;
+
+ var cellContents = FCK.EditorDocument.createDocumentFragment() ;
+ while ( nextCell && nextCell.childNodes && nextCell.childNodes.length > 0 )
+ cellContents.appendChild( nextCell.removeChild( nextCell.firstChild ) ) ;
+
+ nextCell.parentNode.removeChild( nextCell ) ;
+ refCell.appendChild( cellContents ) ;
+ this._MarkCells( [nextCell], '_Replace' ) ;
+ this._ReplaceCellsByMarker( tableMap, '_Replace', refCell ) ;
+ this._InstallTableMap( tableMap, refCell.parentNode.parentNode.parentNode ) ;
+
+ this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.MergeDown = function()
+{
+ var target = this.GetMergeDownTarget() ;
+ if ( target == null )
+ return ;
+ var refCell = target.refCell ;
+ var tableMap = target.tableMap ;
+ var nextCell = target.nextCell ;
+
+ var cellContents = FCKTools.GetElementDocument( refCell ).createDocumentFragment() ;
+ while ( nextCell && nextCell.childNodes && nextCell.childNodes.length > 0 )
+ cellContents.appendChild( nextCell.removeChild( nextCell.firstChild ) ) ;
+ if ( cellContents.firstChild )
+ cellContents.insertBefore( FCK.EditorDocument.createElement( 'br' ), cellContents.firstChild ) ;
+ refCell.appendChild( cellContents ) ;
+ this._MarkCells( [nextCell], '_Replace' ) ;
+ this._ReplaceCellsByMarker( tableMap, '_Replace', refCell ) ;
+ this._InstallTableMap( tableMap, refCell.parentNode.parentNode.parentNode ) ;
+
+ this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.HorizontalSplitCell = function()
+{
+ var cells = FCKTableHandler.GetSelectedCells() ;
+ if ( cells.length != 1 )
+ return ;
+
+ var refCell = cells[0] ;
+ var tableMap = this._CreateTableMap( refCell ) ;
+ var rowIdx = refCell.parentNode.rowIndex ;
+ var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+ var cellSpan = isNaN( refCell.colSpan ) ? 1 : refCell.colSpan ;
+
+ if ( cellSpan > 1 )
+ {
+ // Splitting a multi-column cell - original cell gets ceil(colSpan/2) columns,
+ // new cell gets floor(colSpan/2).
+ var newCellSpan = Math.ceil( cellSpan / 2 ) ;
+ var newCell = FCK.EditorDocument.createElement( refCell.nodeName ) ;
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( newCell ) ;
+ var startIdx = colIdx + newCellSpan ;
+ var endIdx = colIdx + cellSpan ;
+ var rowSpan = isNaN( refCell.rowSpan ) ? 1 : refCell.rowSpan ;
+ for ( var r = rowIdx ; r < rowIdx + rowSpan ; r++ )
+ {
+ for ( var i = startIdx ; i < endIdx ; i++ )
+ tableMap[r][i] = newCell ;
+ }
+ }
+ else
+ {
+ // Splitting a single-column cell - add a new cell, and expand
+ // cells crossing the same column.
+ var newTableMap = [] ;
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ var newRow = tableMap[i].slice( 0, colIdx ) ;
+ if ( tableMap[i].length <= colIdx )
+ {
+ newTableMap.push( newRow ) ;
+ continue ;
+ }
+ if ( tableMap[i][colIdx] == refCell )
+ {
+ newRow.push( refCell ) ;
+ newRow.push( FCK.EditorDocument.createElement( refCell.nodeName ) ) ;
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( newRow[newRow.length - 1] ) ;
+ }
+ else
+ {
+ newRow.push( tableMap[i][colIdx] ) ;
+ newRow.push( tableMap[i][colIdx] ) ;
+ }
+ for ( var j = colIdx + 1 ; j < tableMap[i].length ; j++ )
+ newRow.push( tableMap[i][j] ) ;
+ newTableMap.push( newRow ) ;
+ }
+ tableMap = newTableMap ;
+ }
+
+ this._InstallTableMap( tableMap, refCell.parentNode.parentNode.parentNode ) ;
+}
+
+FCKTableHandler.VerticalSplitCell = function()
+{
+ var cells = FCKTableHandler.GetSelectedCells() ;
+ if ( cells.length != 1 )
+ return ;
+
+ var currentCell = cells[0] ;
+ var tableMap = this._CreateTableMap( currentCell ) ;
+ var currentRowIndex = currentCell.parentNode.rowIndex ;
+ var cellIndex = FCKTableHandler._GetCellIndexSpan( tableMap, currentRowIndex, currentCell ) ;
+ // Save current cell colSpan
+ var currentColSpan = isNaN( currentCell.colSpan ) ? 1 : currentCell.colSpan ;
+ var currentRowSpan = currentCell.rowSpan ;
+ if ( isNaN( currentRowSpan ) )
+ currentRowSpan = 1 ;
+
+ if ( currentRowSpan > 1 )
+ {
+ // 1. Set the current cell's rowSpan to 1.
+ currentCell.rowSpan = Math.ceil( currentRowSpan / 2 ) ;
+
+ // 2. Find the appropriate place to insert a new cell at the next row.
+ var newCellRowIndex = currentRowIndex + Math.ceil( currentRowSpan / 2 ) ;
+ var oRow = tableMap[newCellRowIndex] ;
+ var insertMarker = null ;
+ for ( var i = cellIndex+1 ; i < oRow.length ; i++ )
+ {
+ if ( oRow[i].parentNode.rowIndex == newCellRowIndex )
+ {
+ insertMarker = oRow[i] ;
+ break ;
+ }
+ }
+
+ // 3. Insert the new cell to the indicated place, with the appropriate rowSpan and colSpan, next row.
+ var newCell = FCK.EditorDocument.createElement( currentCell.nodeName ) ;
+ newCell.rowSpan = Math.floor( currentRowSpan / 2 ) ;
+ if ( currentColSpan > 1 )
+ newCell.colSpan = currentColSpan ;
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( newCell ) ;
+ currentCell.parentNode.parentNode.parentNode.rows[newCellRowIndex].insertBefore( newCell, insertMarker ) ;
+ }
+ else
+ {
+ // 1. Insert a new row.
+ var newSectionRowIdx = currentCell.parentNode.sectionRowIndex + 1 ;
+ var newRow = FCK.EditorDocument.createElement( 'tr' ) ;
+ var tSection = currentCell.parentNode.parentNode ;
+ if ( tSection.rows.length > newSectionRowIdx )
+ tSection.insertBefore( newRow, tSection.rows[newSectionRowIdx] ) ;
+ else
+ tSection.appendChild( newRow ) ;
+
+ // 2. +1 to rowSpan for all cells crossing currentCell's row.
+ for ( var i = 0 ; i < tableMap[currentRowIndex].length ; )
+ {
+ var colSpan = tableMap[currentRowIndex][i].colSpan ;
+ if ( isNaN( colSpan ) || colSpan < 1 )
+ colSpan = 1 ;
+ if ( i == cellIndex )
+ {
+ i += colSpan ;
+ continue ;
+ }
+ var rowSpan = tableMap[currentRowIndex][i].rowSpan ;
+ if ( isNaN( rowSpan ) )
+ rowSpan = 1 ;
+ tableMap[currentRowIndex][i].rowSpan = rowSpan + 1 ;
+ i += colSpan ;
+ }
+
+ // 3. Insert a new cell to new row. Set colSpan on the new cell.
+ var newCell = FCK.EditorDocument.createElement( currentCell.nodeName ) ;
+ if ( currentColSpan > 1 )
+ newCell.colSpan = currentColSpan ;
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( newCell ) ;
+ newRow.appendChild( newCell ) ;
+ }
+}
+
+// Get the cell index from a TableMap.
+FCKTableHandler._GetCellIndexSpan = function( tableMap, rowIndex, cell )
+{
+ if ( tableMap.length < rowIndex + 1 )
+ return null ;
+
+ var oRow = tableMap[ rowIndex ] ;
+
+ for ( var c = 0 ; c < oRow.length ; c++ )
+ {
+ if ( oRow[c] == cell )
+ return c ;
+ }
+
+ return null ;
+}
+
+// Get the cell location from a TableMap. Returns an array with an [x,y] location
+FCKTableHandler._GetCellLocation = function( tableMap, cell )
+{
+ for ( var i = 0 ; i < tableMap.length; i++ )
+ {
+ for ( var c = 0 ; c < tableMap[i].length ; c++ )
+ {
+ if ( tableMap[i][c] == cell ) return [i,c];
+ }
+ }
+ return null ;
+}
+
+// This function is quite hard to explain. It creates a matrix representing all cells in a table.
+// The difference here is that the "spanned" cells (colSpan and rowSpan) are duplicated on the matrix
+// cells that are "spanned". For example, a row with 3 cells where the second cell has colSpan=2 and rowSpan=3
+// will produce a bi-dimensional matrix with the following values (representing the cells):
+// Cell1, Cell2, Cell2, Cell3
+// Cell4, Cell2, Cell2, Cell5
+// Cell6, Cell2, Cell2, Cell7
+FCKTableHandler._CreateTableMap = function( refCell )
+{
+ var table = (refCell.nodeName == 'TABLE' ? refCell : refCell.parentNode.parentNode.parentNode ) ;
+
+ var aRows = table.rows ;
+
+ // Row and Column counters.
+ var r = -1 ;
+
+ var aMap = new Array() ;
+
+ for ( var i = 0 ; i < aRows.length ; i++ )
+ {
+ r++ ;
+ if ( !aMap[r] )
+ aMap[r] = new Array() ;
+
+ var c = -1 ;
+
+ for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
+ {
+ var oCell = aRows[i].cells[j] ;
+
+ c++ ;
+ while ( aMap[r][c] )
+ c++ ;
+
+ var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
+ var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
+
+ for ( var rs = 0 ; rs < iRowSpan ; rs++ )
+ {
+ if ( !aMap[r + rs] )
+ aMap[r + rs] = new Array() ;
+
+ for ( var cs = 0 ; cs < iColSpan ; cs++ )
+ {
+ aMap[r + rs][c + cs] = aRows[i].cells[j] ;
+ }
+ }
+
+ c += iColSpan - 1 ;
+ }
+ }
+ return aMap ;
+}
+
+// This function is the inverse of _CreateTableMap - it takes in a table map and converts it to an HTML table.
+FCKTableHandler._InstallTableMap = function( tableMap, table )
+{
+ // Workaround for #1917 : MSIE will always report a cell's rowSpan as 1 as long
+ // as the cell is not attached to a row. So we'll need an alternative attribute
+ // for storing the calculated rowSpan in IE.
+ var rowSpanAttr = FCKBrowserInfo.IsIE ? "_fckrowspan" : "rowSpan" ;
+
+ // Disconnect all the cells in tableMap from their parents, set all colSpan and rowSpan attributes to 1.
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ for ( var j = 0 ; j < tableMap[i].length ; j++ )
+ {
+ var cell = tableMap[i][j] ;
+ if ( cell.parentNode )
+ cell.parentNode.removeChild( cell ) ;
+ cell.colSpan = cell[rowSpanAttr] = 1 ;
+ }
+ }
+
+ // Scan by rows and set colSpan.
+ var maxCol = 0 ;
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ for ( var j = 0 ; j < tableMap[i].length ; j++ )
+ {
+ var cell = tableMap[i][j] ;
+ if ( ! cell)
+ continue ;
+ if ( j > maxCol )
+ maxCol = j ;
+ if ( cell._colScanned === true )
+ continue ;
+ if ( tableMap[i][j-1] == cell )
+ cell.colSpan++ ;
+ if ( tableMap[i][j+1] != cell )
+ cell._colScanned = true ;
+ }
+ }
+
+ // Scan by columns and set rowSpan.
+ for ( var i = 0 ; i <= maxCol ; i++ )
+ {
+ for ( var j = 0 ; j < tableMap.length ; j++ )
+ {
+ if ( ! tableMap[j] )
+ continue ;
+ var cell = tableMap[j][i] ;
+ if ( ! cell || cell._rowScanned === true )
+ continue ;
+ if ( tableMap[j-1] && tableMap[j-1][i] == cell )
+ cell[rowSpanAttr]++ ;
+ if ( ! tableMap[j+1] || tableMap[j+1][i] != cell )
+ cell._rowScanned = true ;
+ }
+ }
+
+ // Clear all temporary flags.
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ for ( var j = 0 ; j < tableMap[i].length ; j++)
+ {
+ var cell = tableMap[i][j] ;
+ FCKDomTools.ClearElementJSProperty(cell, '_colScanned' ) ;
+ FCKDomTools.ClearElementJSProperty(cell, '_rowScanned' ) ;
+ }
+ }
+
+ // Insert physical rows and columns to the table.
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ var rowObj = FCK.EditorDocument.createElement( 'tr' ) ;
+ for ( var j = 0 ; j < tableMap[i].length ; )
+ {
+ var cell = tableMap[i][j] ;
+ if ( tableMap[i-1] && tableMap[i-1][j] == cell )
+ {
+ j += cell.colSpan ;
+ continue ;
+ }
+ rowObj.appendChild( cell ) ;
+ if ( rowSpanAttr != 'rowSpan' )
+ {
+ cell.rowSpan = cell[rowSpanAttr] ;
+ cell.removeAttribute( rowSpanAttr ) ;
+ }
+ j += cell.colSpan ;
+ if ( cell.colSpan == 1 )
+ cell.removeAttribute( 'colspan' ) ;
+ if ( cell.rowSpan == 1 )
+ cell.removeAttribute( 'rowspan' ) ;
+ }
+ if ( FCKBrowserInfo.IsIE )
+ {
+ table.rows[i].replaceNode( rowObj ) ;
+ }
+ else
+ {
+ table.rows[i].innerHTML = '' ;
+ FCKDomTools.MoveChildren( rowObj, table.rows[i] ) ;
+ }
+ }
+}
+
+FCKTableHandler._MoveCaretToCell = function ( refCell, toStart )
+{
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToNodeContents( refCell ) ;
+ range.Collapse( toStart ) ;
+ range.Select() ;
+}
+
+FCKTableHandler.ClearRow = function( tr )
+{
+ // Get the array of row's cells.
+ var aCells = tr.cells ;
+
+ // Replace the contents of each cell with "nothing".
+ for ( var i = 0 ; i < aCells.length ; i++ )
+ {
+ aCells[i].innerHTML = '' ;
+
+ if ( FCKBrowserInfo.IsGeckoLike )
+ FCKTools.AppendBogusBr( aCells[i] ) ;
+ }
+}
+
+FCKTableHandler.GetMergeRightTarget = function()
+{
+ var cells = this.GetSelectedCells() ;
+ if ( cells.length != 1 )
+ return null ;
+
+ var refCell = cells[0] ;
+ var tableMap = this._CreateTableMap( refCell ) ;
+ var rowIdx = refCell.parentNode.rowIndex ;
+ var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+ var nextColIdx = colIdx + ( isNaN( refCell.colSpan ) ? 1 : refCell.colSpan ) ;
+ var nextCell = tableMap[rowIdx][nextColIdx] ;
+
+ if ( ! nextCell )
+ return null ;
+
+ // The two cells must have the same vertical geometry, otherwise merging does not make sense.
+ this._MarkCells( [refCell, nextCell], '_SizeTest' ) ;
+ var refGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SizeTest' ) ;
+ var nextGeometry = this._GetMarkerGeometry( tableMap, rowIdx, nextColIdx, '_SizeTest' ) ;
+ this._UnmarkCells( [refCell, nextCell], '_SizeTest' ) ;
+
+ if ( refGeometry.height != nextGeometry.height || refGeometry.y != nextGeometry.y )
+ return null ;
+
+ return { 'refCell' : refCell, 'nextCell' : nextCell, 'tableMap' : tableMap } ;
+}
+
+FCKTableHandler.GetMergeDownTarget = function()
+{
+ var cells = this.GetSelectedCells() ;
+ if ( cells.length != 1 )
+ return null ;
+
+ var refCell = cells[0] ;
+ var tableMap = this._CreateTableMap( refCell ) ;
+ var rowIdx = refCell.parentNode.rowIndex ;
+ var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+ var newRowIdx = rowIdx + ( isNaN( refCell.rowSpan ) ? 1 : refCell.rowSpan ) ;
+ if ( ! tableMap[newRowIdx] )
+ return null ;
+
+ var nextCell = tableMap[newRowIdx][colIdx] ;
+
+ if ( ! nextCell )
+ return null ;
+
+ // Check if the selected cells are both in the same table section (thead, tfoot or tbody).
+ if ( refCell.parentNode.parentNode != nextCell.parentNode.parentNode )
+ return null ;
+
+ // The two cells must have the same horizontal geometry, otherwise merging does not makes sense.
+ this._MarkCells( [refCell, nextCell], '_SizeTest' ) ;
+ var refGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SizeTest' ) ;
+ var nextGeometry = this._GetMarkerGeometry( tableMap, newRowIdx, colIdx, '_SizeTest' ) ;
+ this._UnmarkCells( [refCell, nextCell], '_SizeTest' ) ;
+
+ if ( refGeometry.width != nextGeometry.width || refGeometry.x != nextGeometry.x )
+ return null ;
+
+ return { 'refCell' : refCell, 'nextCell' : nextCell, 'tableMap' : tableMap } ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_gecko.js
new file mode 100644
index 0000000..66fa155
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_gecko.js
@@ -0,0 +1,56 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations (non-IE).
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+ var aCells = new Array() ;
+
+ var oSelection = FCKSelection.GetSelection() ;
+
+ // If the selection is a text.
+ if ( oSelection.rangeCount == 1 && oSelection.anchorNode.nodeType == 3 )
+ {
+ var oParent = FCKTools.GetElementAscensor( oSelection.anchorNode, 'TD,TH' ) ;
+
+ if ( oParent )
+ aCells[0] = oParent ;
+
+ return aCells ;
+ }
+
+ for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
+ {
+ var oRange = oSelection.getRangeAt(i) ;
+ var oCell ;
+
+ if ( oRange.startContainer.tagName.Equals( 'TD', 'TH' ) )
+ oCell = oRange.startContainer ;
+ else
+ oCell = oRange.startContainer.childNodes[ oRange.startOffset ] ;
+
+ if ( oCell.nodeName.Equals( 'TD', 'TH' ) )
+ aCells[aCells.length] = oCell ;
+ }
+
+ return aCells ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_ie.js
new file mode 100644
index 0000000..6e7da17
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_ie.js
@@ -0,0 +1,64 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations (IE specific).
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+ if ( FCKSelection.GetType() == 'Control' )
+ {
+ var td = FCKSelection.MoveToAncestorNode( ['TD', 'TH'] ) ;
+ return td ? [ td ] : [] ;
+ }
+
+ var aCells = new Array() ;
+
+ var oRange = FCKSelection.GetSelection().createRange() ;
+// var oParent = oRange.parentElement() ;
+ var oParent = FCKSelection.GetParentElement() ;
+
+ if ( oParent && oParent.tagName.Equals( 'TD', 'TH' ) )
+ aCells[0] = oParent ;
+ else
+ {
+ oParent = FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+
+ if ( oParent )
+ {
+ // Loops throw all cells checking if the cell is, or part of it, is inside the selection
+ // and then add it to the selected cells collection.
+ for ( var i = 0 ; i < oParent.cells.length ; i++ )
+ {
+ var oCellRange = FCK.EditorDocument.body.createTextRange() ;
+ oCellRange.moveToElementText( oParent.cells[i] ) ;
+
+ if ( oRange.inRange( oCellRange )
+ || ( oRange.compareEndPoints('StartToStart',oCellRange) >= 0 && oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 )
+ || ( oRange.compareEndPoints('EndToStart',oCellRange) >= 0 && oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) )
+ {
+ aCells[aCells.length] = oParent.cells[i] ;
+ }
+ }
+ }
+ }
+
+ return aCells ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbaritems.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbaritems.js
new file mode 100644
index 0000000..6810ead
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbaritems.js
@@ -0,0 +1,124 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Toolbar items definitions.
+ */
+
+var FCKToolbarItems = new Object() ;
+FCKToolbarItems.LoadedItems = new Object() ;
+
+FCKToolbarItems.RegisterItem = function( itemName, item )
+{
+ this.LoadedItems[ itemName ] = item ;
+}
+
+FCKToolbarItems.GetItem = function( itemName )
+{
+ var oItem = FCKToolbarItems.LoadedItems[ itemName ] ;
+
+ if ( oItem )
+ return oItem ;
+
+ switch ( itemName )
+ {
+ case 'Source' : oItem = new FCKToolbarButton( 'Source' , FCKLang.Source, null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ; break ;
+ case 'DocProps' : oItem = new FCKToolbarButton( 'DocProps' , FCKLang.DocProps, null, null, null, null, 2 ) ; break ;
+ case 'Save' : oItem = new FCKToolbarButton( 'Save' , FCKLang.Save, null, null, true, null, 3 ) ; break ;
+ case 'NewPage' : oItem = new FCKToolbarButton( 'NewPage' , FCKLang.NewPage, null, null, true, null, 4 ) ; break ;
+ case 'Preview' : oItem = new FCKToolbarButton( 'Preview' , FCKLang.Preview, null, null, true, null, 5 ) ; break ;
+ case 'Templates' : oItem = new FCKToolbarButton( 'Templates' , FCKLang.Templates, null, null, null, null, 6 ) ; break ;
+ case 'About' : oItem = new FCKToolbarButton( 'About' , FCKLang.About, null, null, true, null, 47 ) ; break ;
+
+ case 'Cut' : oItem = new FCKToolbarButton( 'Cut' , FCKLang.Cut, null, null, false, true, 7 ) ; break ;
+ case 'Copy' : oItem = new FCKToolbarButton( 'Copy' , FCKLang.Copy, null, null, false, true, 8 ) ; break ;
+ case 'Paste' : oItem = new FCKToolbarButton( 'Paste' , FCKLang.Paste, null, null, false, true, 9 ) ; break ;
+ case 'PasteText' : oItem = new FCKToolbarButton( 'PasteText' , FCKLang.PasteText, null, null, false, true, 10 ) ; break ;
+ case 'PasteWord' : oItem = new FCKToolbarButton( 'PasteWord' , FCKLang.PasteWord, null, null, false, true, 11 ) ; break ;
+ case 'Print' : oItem = new FCKToolbarButton( 'Print' , FCKLang.Print, null, null, false, true, 12 ) ; break ;
+ case 'SpellCheck' : oItem = new FCKToolbarButton( 'SpellCheck', FCKLang.SpellCheck, null, null, null, null, 13 ) ; break ;
+ case 'Undo' : oItem = new FCKToolbarButton( 'Undo' , FCKLang.Undo, null, null, false, true, 14 ) ; break ;
+ case 'Redo' : oItem = new FCKToolbarButton( 'Redo' , FCKLang.Redo, null, null, false, true, 15 ) ; break ;
+ case 'SelectAll' : oItem = new FCKToolbarButton( 'SelectAll' , FCKLang.SelectAll, null, null, true, null, 18 ) ; break ;
+ case 'RemoveFormat' : oItem = new FCKToolbarButton( 'RemoveFormat', FCKLang.RemoveFormat, null, null, false, true, 19 ) ; break ;
+ case 'FitWindow' : oItem = new FCKToolbarButton( 'FitWindow' , FCKLang.FitWindow, null, null, true, true, 66 ) ; break ;
+
+ case 'Bold' : oItem = new FCKToolbarButton( 'Bold' , FCKLang.Bold, null, null, false, true, 20 ) ; break ;
+ case 'Italic' : oItem = new FCKToolbarButton( 'Italic' , FCKLang.Italic, null, null, false, true, 21 ) ; break ;
+ case 'Underline' : oItem = new FCKToolbarButton( 'Underline' , FCKLang.Underline, null, null, false, true, 22 ) ; break ;
+ case 'StrikeThrough' : oItem = new FCKToolbarButton( 'StrikeThrough' , FCKLang.StrikeThrough, null, null, false, true, 23 ) ; break ;
+ case 'Subscript' : oItem = new FCKToolbarButton( 'Subscript' , FCKLang.Subscript, null, null, false, true, 24 ) ; break ;
+ case 'Superscript' : oItem = new FCKToolbarButton( 'Superscript' , FCKLang.Superscript, null, null, false, true, 25 ) ; break ;
+
+ case 'OrderedList' : oItem = new FCKToolbarButton( 'InsertOrderedList' , FCKLang.NumberedListLbl, FCKLang.NumberedList, null, false, true, 26 ) ; break ;
+ case 'UnorderedList' : oItem = new FCKToolbarButton( 'InsertUnorderedList' , FCKLang.BulletedListLbl, FCKLang.BulletedList, null, false, true, 27 ) ; break ;
+ case 'Outdent' : oItem = new FCKToolbarButton( 'Outdent' , FCKLang.DecreaseIndent, null, null, false, true, 28 ) ; break ;
+ case 'Indent' : oItem = new FCKToolbarButton( 'Indent' , FCKLang.IncreaseIndent, null, null, false, true, 29 ) ; break ;
+ case 'Blockquote' : oItem = new FCKToolbarButton( 'Blockquote' , FCKLang.Blockquote, null, null, false, true, 73 ) ; break ;
+ case 'CreateDiv' : oItem = new FCKToolbarButton( 'CreateDiv' , FCKLang.CreateDiv, null, null, false, true, 74 ) ; break ;
+
+ case 'Link' : oItem = new FCKToolbarButton( 'Link' , FCKLang.InsertLinkLbl, FCKLang.InsertLink, null, false, true, 34 ) ; break ;
+ case 'Unlink' : oItem = new FCKToolbarButton( 'Unlink' , FCKLang.RemoveLink, null, null, false, true, 35 ) ; break ;
+ case 'Anchor' : oItem = new FCKToolbarButton( 'Anchor' , FCKLang.Anchor, null, null, null, null, 36 ) ; break ;
+
+ case 'Image' : oItem = new FCKToolbarButton( 'Image' , FCKLang.InsertImageLbl, FCKLang.InsertImage, null, false, true, 37 ) ; break ;
+ case 'Flash' : oItem = new FCKToolbarButton( 'Flash' , FCKLang.InsertFlashLbl, FCKLang.InsertFlash, null, false, true, 38 ) ; break ;
+ case 'Table' : oItem = new FCKToolbarButton( 'Table' , FCKLang.InsertTableLbl, FCKLang.InsertTable, null, false, true, 39 ) ; break ;
+ case 'SpecialChar' : oItem = new FCKToolbarButton( 'SpecialChar' , FCKLang.InsertSpecialCharLbl, FCKLang.InsertSpecialChar, null, false, true, 42 ) ; break ;
+ case 'Smiley' : oItem = new FCKToolbarButton( 'Smiley' , FCKLang.InsertSmileyLbl, FCKLang.InsertSmiley, null, false, true, 41 ) ; break ;
+ case 'PageBreak' : oItem = new FCKToolbarButton( 'PageBreak' , FCKLang.PageBreakLbl, FCKLang.PageBreak, null, false, true, 43 ) ; break ;
+
+ case 'Rule' : oItem = new FCKToolbarButton( 'Rule' , FCKLang.InsertLineLbl, FCKLang.InsertLine, null, false, true, 40 ) ; break ;
+
+ case 'JustifyLeft' : oItem = new FCKToolbarButton( 'JustifyLeft' , FCKLang.LeftJustify, null, null, false, true, 30 ) ; break ;
+ case 'JustifyCenter' : oItem = new FCKToolbarButton( 'JustifyCenter' , FCKLang.CenterJustify, null, null, false, true, 31 ) ; break ;
+ case 'JustifyRight' : oItem = new FCKToolbarButton( 'JustifyRight' , FCKLang.RightJustify, null, null, false, true, 32 ) ; break ;
+ case 'JustifyFull' : oItem = new FCKToolbarButton( 'JustifyFull' , FCKLang.BlockJustify, null, null, false, true, 33 ) ; break ;
+
+ case 'Style' : oItem = new FCKToolbarStyleCombo() ; break ;
+ case 'FontName' : oItem = new FCKToolbarFontsCombo() ; break ;
+ case 'FontSize' : oItem = new FCKToolbarFontSizeCombo() ; break ;
+ case 'FontFormat' : oItem = new FCKToolbarFontFormatCombo() ; break ;
+
+ case 'TextColor' : oItem = new FCKToolbarPanelButton( 'TextColor', FCKLang.TextColor, null, null, 45 ) ; break ;
+ case 'BGColor' : oItem = new FCKToolbarPanelButton( 'BGColor' , FCKLang.BGColor, null, null, 46 ) ; break ;
+
+ case 'Find' : oItem = new FCKToolbarButton( 'Find' , FCKLang.Find, null, null, null, null, 16 ) ; break ;
+ case 'Replace' : oItem = new FCKToolbarButton( 'Replace' , FCKLang.Replace, null, null, null, null, 17 ) ; break ;
+
+ case 'Form' : oItem = new FCKToolbarButton( 'Form' , FCKLang.Form, null, null, null, null, 48 ) ; break ;
+ case 'Checkbox' : oItem = new FCKToolbarButton( 'Checkbox' , FCKLang.Checkbox, null, null, null, null, 49 ) ; break ;
+ case 'Radio' : oItem = new FCKToolbarButton( 'Radio' , FCKLang.RadioButton, null, null, null, null, 50 ) ; break ;
+ case 'TextField' : oItem = new FCKToolbarButton( 'TextField' , FCKLang.TextField, null, null, null, null, 51 ) ; break ;
+ case 'Textarea' : oItem = new FCKToolbarButton( 'Textarea' , FCKLang.Textarea, null, null, null, null, 52 ) ; break ;
+ case 'HiddenField' : oItem = new FCKToolbarButton( 'HiddenField' , FCKLang.HiddenField, null, null, null, null, 56 ) ; break ;
+ case 'Button' : oItem = new FCKToolbarButton( 'Button' , FCKLang.Button, null, null, null, null, 54 ) ; break ;
+ case 'Select' : oItem = new FCKToolbarButton( 'Select' , FCKLang.SelectionField, null, null, null, null, 53 ) ; break ;
+ case 'ImageButton' : oItem = new FCKToolbarButton( 'ImageButton' , FCKLang.ImageButton, null, null, null, null, 55 ) ; break ;
+ case 'ShowBlocks' : oItem = new FCKToolbarButton( 'ShowBlocks' , FCKLang.ShowBlocks, null, null, null, true, 72 ) ; break ;
+
+ default:
+ alert( FCKLang.UnknownToolbarItem.replace( /%1/g, itemName ) ) ;
+ return null ;
+ }
+
+ FCKToolbarItems.LoadedItems[ itemName ] = oItem ;
+
+ return oItem ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbarset.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbarset.js
new file mode 100644
index 0000000..e849f66
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbarset.js
@@ -0,0 +1,399 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKToolbarSet object that is used to load and draw the
+ * toolbar.
+ */
+
+function FCKToolbarSet_Create( overhideLocation )
+{
+ var oToolbarSet ;
+
+ var sLocation = overhideLocation || FCKConfig.ToolbarLocation ;
+ switch ( sLocation )
+ {
+ case 'In' :
+ document.getElementById( 'xToolbarRow' ).style.display = '' ;
+ oToolbarSet = new FCKToolbarSet( document ) ;
+ break ;
+ case 'None' :
+ oToolbarSet = new FCKToolbarSet( document ) ;
+ break ;
+
+// case 'OutTop' :
+ // Not supported.
+
+ default :
+ FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ;
+ FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ;
+
+ var eToolbarTarget ;
+
+ // Out:[TargetWindow]([TargetId])
+ var oOutMatch = sLocation.match( /^Out:(.+)\((\w+)\)$/ ) ;
+ if ( oOutMatch )
+ {
+ if ( FCKBrowserInfo.IsAIR )
+ FCKAdobeAIR.ToolbarSet_GetOutElement( window, oOutMatch ) ;
+ else
+ eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ;
+ }
+ else
+ {
+ // Out:[TargetId]
+ oOutMatch = sLocation.match( /^Out:(\w+)$/ ) ;
+ if ( oOutMatch )
+ eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ;
+ }
+
+ if ( !eToolbarTarget )
+ {
+ alert( 'Invalid value for "ToolbarLocation"' ) ;
+ return arguments.callee( 'In' );
+ }
+
+ // If it is a shared toolbar, it may be already available in the target element.
+ oToolbarSet = eToolbarTarget.__FCKToolbarSet ;
+ if ( oToolbarSet )
+ break ;
+
+ // Create the IFRAME that will hold the toolbar inside the target element.
+ var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ;
+ eToolbarIFrame.src = 'javascript:void(0)' ;
+ eToolbarIFrame.frameBorder = 0 ;
+ eToolbarIFrame.width = '100%' ;
+ eToolbarIFrame.height = '10' ;
+ eToolbarTarget.appendChild( eToolbarIFrame ) ;
+ eToolbarIFrame.unselectable = 'on' ;
+
+ // Write the basic HTML for the toolbar (copy from the editor main page).
+ var eTargetDocument = eToolbarIFrame.contentWindow.document ;
+
+ // Workaround for Safari 12256. Ticket #63
+ var sBase = '' ;
+ if ( FCKBrowserInfo.IsSafari )
+ sBase = '<base href="' + window.document.location + '">' ;
+
+ // Initialize the IFRAME document body.
+ eTargetDocument.open() ;
+ eTargetDocument.write( '<html><head>' + sBase + '<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; '
+ + 'window.onresize = window.onload = '
+ + 'function(){' // poll scrollHeight until it no longer changes for 1 sec.
+ + 'var timer = null;'
+ + 'var lastHeight = -1;'
+ + 'var lastChange = 0;'
+ + 'var poller = function(){'
+ + 'var currentHeight = document.body.scrollHeight || 0;'
+ + 'var currentTime = (new Date()).getTime();'
+ + 'if (currentHeight != lastHeight){'
+ + 'lastChange = currentTime;'
+ + 'adjust();'
+ + 'lastHeight = document.body.scrollHeight;'
+ + '}'
+ + 'if (lastChange < currentTime - 1000) clearInterval(timer);'
+ + '};'
+ + 'timer = setInterval(poller, 100);'
+ + '}'
+ + '</script></head><body style="overflow: hidden">' + document.getElementById( 'xToolbarSpace' ).innerHTML + '</body></html>' ) ;
+ eTargetDocument.close() ;
+
+ if( FCKBrowserInfo.IsAIR )
+ FCKAdobeAIR.ToolbarSet_InitOutFrame( eTargetDocument ) ;
+
+ FCKTools.AddEventListener( eTargetDocument, 'contextmenu', FCKTools.CancelEvent ) ;
+
+ // Load external resources (must be done here, otherwise Firefox will not
+ // have the document DOM ready to be used right away.
+ FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinEditorCSS ) ;
+
+ oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;
+ oToolbarSet._IFrame = eToolbarIFrame ;
+
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;
+ }
+
+ oToolbarSet.CurrentInstance = FCK ;
+ if ( !oToolbarSet.ToolbarItems )
+ oToolbarSet.ToolbarItems = FCKToolbarItems ;
+
+ FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;
+
+ return oToolbarSet ;
+}
+
+function FCK_OnBlur( editorInstance )
+{
+ var eToolbarSet = editorInstance.ToolbarSet ;
+
+ if ( eToolbarSet.CurrentInstance == editorInstance )
+ eToolbarSet.Disable() ;
+}
+
+function FCK_OnFocus( editorInstance )
+{
+ var oToolbarset = editorInstance.ToolbarSet ;
+ var oInstance = editorInstance || FCK ;
+
+ // Unregister the toolbar window from the current instance.
+ oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;
+
+ // Set the new current instance.
+ oToolbarset.CurrentInstance = oInstance ;
+
+ // Register the toolbar window in the current instance.
+ oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;
+
+ oToolbarset.Enable() ;
+}
+
+function FCKToolbarSet_Cleanup()
+{
+ this._TargetElement = null ;
+ this._IFrame = null ;
+}
+
+function FCKToolbarSet_Target_Cleanup()
+{
+ this.__FCKToolbarSet = null ;
+}
+
+var FCKToolbarSet = function( targetDocument )
+{
+ this._Document = targetDocument ;
+
+ // Get the element that will hold the elements structure.
+ this._TargetElement = targetDocument.getElementById( 'xToolbar' ) ;
+
+ // Setup the expand and collapse handlers.
+ var eExpandHandle = targetDocument.getElementById( 'xExpandHandle' ) ;
+ var eCollapseHandle = targetDocument.getElementById( 'xCollapseHandle' ) ;
+
+ eExpandHandle.title = FCKLang.ToolbarExpand ;
+ FCKTools.AddEventListener( eExpandHandle, 'click', FCKToolbarSet_Expand_OnClick ) ;
+
+ eCollapseHandle.title = FCKLang.ToolbarCollapse ;
+ FCKTools.AddEventListener( eCollapseHandle, 'click', FCKToolbarSet_Collapse_OnClick ) ;
+
+ // Set the toolbar state at startup.
+ if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
+ this.Expand() ;
+ else
+ this.Collapse() ;
+
+ // Enable/disable the collapse handler
+ eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
+
+ if ( FCKConfig.ToolbarCanCollapse )
+ eCollapseHandle.style.display = '' ;
+ else
+ targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;
+
+ // Set the default properties.
+ this.Toolbars = new Array() ;
+ this.IsLoaded = false ;
+
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;
+}
+
+function FCKToolbarSet_Expand_OnClick()
+{
+ FCK.ToolbarSet.Expand() ;
+}
+
+function FCKToolbarSet_Collapse_OnClick()
+{
+ FCK.ToolbarSet.Collapse() ;
+}
+
+FCKToolbarSet.prototype.Expand = function()
+{
+ this._ChangeVisibility( false ) ;
+}
+
+FCKToolbarSet.prototype.Collapse = function()
+{
+ this._ChangeVisibility( true ) ;
+}
+
+FCKToolbarSet.prototype._ChangeVisibility = function( collapse )
+{
+ this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;
+ this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;
+
+ if ( FCKBrowserInfo.IsGecko )
+ {
+ // I had to use "setTimeout" because Gecko was not responding in a right
+ // way when calling window.onresize() directly.
+ FCKTools.RunFunction( window.onresize ) ;
+ }
+}
+
+FCKToolbarSet.prototype.Load = function( toolbarSetName )
+{
+ this.Name = toolbarSetName ;
+
+ this.Items = new Array() ;
+
+ // Reset the array of toolbar items that are active only on WYSIWYG mode.
+ this.ItemsWysiwygOnly = new Array() ;
+
+ // Reset the array of toolbar items that are sensitive to the cursor position.
+ this.ItemsContextSensitive = new Array() ;
+
+ // Cleanup the target element.
+ this._TargetElement.innerHTML = '' ;
+
+ var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
+
+ if ( !ToolbarSet )
+ {
+ alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;
+ return ;
+ }
+
+ this.Toolbars = new Array() ;
+
+ for ( var x = 0 ; x < ToolbarSet.length ; x++ )
+ {
+ var oToolbarItems = ToolbarSet[x] ;
+
+ // If the configuration for the toolbar is missing some element or has any extra comma
+ // this item won't be valid, so skip it and keep on processing.
+ if ( !oToolbarItems )
+ continue ;
+
+ var oToolbar ;
+
+ if ( typeof( oToolbarItems ) == 'string' )
+ {
+ if ( oToolbarItems == '/' )
+ oToolbar = new FCKToolbarBreak() ;
+ }
+ else
+ {
+ oToolbar = new FCKToolbar() ;
+
+ for ( var j = 0 ; j < oToolbarItems.length ; j++ )
+ {
+ var sItem = oToolbarItems[j] ;
+
+ if ( sItem == '-')
+ oToolbar.AddSeparator() ;
+ else
+ {
+ var oItem = FCKToolbarItems.GetItem( sItem ) ;
+ if ( oItem )
+ {
+ oToolbar.AddItem( oItem ) ;
+
+ this.Items.push( oItem ) ;
+
+ if ( !oItem.SourceView )
+ this.ItemsWysiwygOnly.push( oItem ) ;
+
+ if ( oItem.ContextSensitive )
+ this.ItemsContextSensitive.push( oItem ) ;
+ }
+ }
+ }
+
+ // oToolbar.AddTerminator() ;
+ }
+
+ oToolbar.Create( this._TargetElement ) ;
+
+ this.Toolbars[ this.Toolbars.length ] = oToolbar ;
+ }
+
+ FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;
+
+ if ( FCK.Status != FCK_STATUS_COMPLETE )
+ FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;
+ else
+ this.RefreshModeState() ;
+
+ this.IsLoaded = true ;
+ this.IsEnabled = true ;
+
+ FCKTools.RunFunction( this.OnLoad ) ;
+}
+
+FCKToolbarSet.prototype.Enable = function()
+{
+ if ( this.IsEnabled )
+ return ;
+
+ this.IsEnabled = true ;
+
+ var aItems = this.Items ;
+ for ( var i = 0 ; i < aItems.length ; i++ )
+ aItems[i].RefreshState() ;
+}
+
+FCKToolbarSet.prototype.Disable = function()
+{
+ if ( !this.IsEnabled )
+ return ;
+
+ this.IsEnabled = false ;
+
+ var aItems = this.Items ;
+ for ( var i = 0 ; i < aItems.length ; i++ )
+ aItems[i].Disable() ;
+}
+
+FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )
+{
+ if ( FCK.Status != FCK_STATUS_COMPLETE )
+ return ;
+
+ var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;
+ var aItems = oToolbarSet.ItemsWysiwygOnly ;
+
+ if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+ {
+ // Enable all buttons that are available on WYSIWYG mode only.
+ for ( var i = 0 ; i < aItems.length ; i++ )
+ aItems[i].Enable() ;
+
+ // Refresh the buttons state.
+ oToolbarSet.RefreshItemsState( editorInstance ) ;
+ }
+ else
+ {
+ // Refresh the buttons state.
+ oToolbarSet.RefreshItemsState( editorInstance ) ;
+
+ // Disable all buttons that are available on WYSIWYG mode only.
+ for ( var j = 0 ; j < aItems.length ; j++ )
+ aItems[j].Disable() ;
+ }
+}
+
+FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )
+{
+
+ var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;
+
+ for ( var i = 0 ; i < aItems.length ; i++ )
+ aItems[i].RefreshState() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools.js
new file mode 100644
index 0000000..db64bdd
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools.js
@@ -0,0 +1,749 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions.
+ */
+
+var FCKTools = new Object() ;
+
+FCKTools.CreateBogusBR = function( targetDocument )
+{
+ var eBR = targetDocument.createElement( 'br' ) ;
+// eBR.setAttribute( '_moz_editor_bogus_node', 'TRUE' ) ;
+ eBR.setAttribute( 'type', '_moz' ) ;
+ return eBR ;
+}
+
+/**
+ * Fixes relative URL entries defined inside CSS styles by appending a prefix
+ * to them.
+ * @param (String) cssStyles The CSS styles definition possibly containing url()
+ * paths.
+ * @param (String) urlFixPrefix The prefix to append to relative URLs.
+ */
+FCKTools.FixCssUrls = function( urlFixPrefix, cssStyles )
+{
+ if ( !urlFixPrefix || urlFixPrefix.length == 0 )
+ return cssStyles ;
+
+ return cssStyles.replace( /url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g, function( match, opener, path, closer )
+ {
+ if ( /^\/|^\w?:/.test( path ) )
+ return match ;
+ else
+ return 'url(' + opener + urlFixPrefix + path + closer + ')' ;
+ } ) ;
+}
+
+FCKTools._GetUrlFixedCss = function( cssStyles, urlFixPrefix )
+{
+ var match = cssStyles.match( /^([^|]+)\|([\s\S]*)/ ) ;
+
+ if ( match )
+ return FCKTools.FixCssUrls( match[1], match[2] ) ;
+ else
+ return cssStyles ;
+}
+
+/**
+ * Appends a <link css> or <style> element to the document.
+ * @param (Object) documentElement The DOM document object to which append the
+ * stylesheet.
+ * @param (Variant) cssFileOrDef A String pointing to the CSS file URL or an
+ * Array with many CSS file URLs or the CSS definitions for the <style>
+ * element.
+ * @return {Array} An array containing all elements created in the target
+ * document. It may include <link> or <style> elements, depending on the
+ * value passed with cssFileOrDef.
+ */
+FCKTools.AppendStyleSheet = function( domDocument, cssFileOrArrayOrDef )
+{
+ if ( !cssFileOrArrayOrDef )
+ return [] ;
+
+ if ( typeof( cssFileOrArrayOrDef ) == 'string' )
+ {
+ // Test if the passed argument is an URL.
+ if ( /[\\\/\.][^{}]*$/.test( cssFileOrArrayOrDef ) )
+ {
+ // The string may have several URLs separated by comma.
+ return this.AppendStyleSheet( domDocument, cssFileOrArrayOrDef.split(',') ) ;
+ }
+ else
+ return [ this.AppendStyleString( domDocument, FCKTools._GetUrlFixedCss( cssFileOrArrayOrDef ) ) ] ;
+ }
+ else
+ {
+ var styles = [] ;
+ for ( var i = 0 ; i < cssFileOrArrayOrDef.length ; i++ )
+ styles.push( this._AppendStyleSheet( domDocument, cssFileOrArrayOrDef[i] ) ) ;
+ return styles ;
+ }
+}
+
+FCKTools.GetStyleHtml = (function()
+{
+ var getStyle = function( styleDef, markTemp )
+ {
+ if ( styleDef.length == 0 )
+ return '' ;
+
+ var temp = markTemp ? ' _fcktemp="true"' : '' ;
+ return '<' + 'style type="text/css"' + temp + '>' + styleDef + '<' + '/style>' ;
+ }
+
+ var getLink = function( cssFileUrl, markTemp )
+ {
+ if ( cssFileUrl.length == 0 )
+ return '' ;
+
+ var temp = markTemp ? ' _fcktemp="true"' : '' ;
+ return '<' + 'link href="' + cssFileUrl + '" type="text/css" rel="stylesheet" ' + temp + '/>' ;
+ }
+
+ return function( cssFileOrArrayOrDef, markTemp )
+ {
+ if ( !cssFileOrArrayOrDef )
+ return '' ;
+
+ if ( typeof( cssFileOrArrayOrDef ) == 'string' )
+ {
+ // Test if the passed argument is an URL.
+ if ( /[\\\/\.][^{}]*$/.test( cssFileOrArrayOrDef ) )
+ {
+ // The string may have several URLs separated by comma.
+ return this.GetStyleHtml( cssFileOrArrayOrDef.split(','), markTemp ) ;
+ }
+ else
+ return getStyle( this._GetUrlFixedCss( cssFileOrArrayOrDef ), markTemp ) ;
+ }
+ else
+ {
+ var html = '' ;
+
+ for ( var i = 0 ; i < cssFileOrArrayOrDef.length ; i++ )
+ html += getLink( cssFileOrArrayOrDef[i], markTemp ) ;
+
+ return html ;
+ }
+ }
+})() ;
+
+FCKTools.GetElementDocument = function ( element )
+{
+ return element.ownerDocument || element.document ;
+}
+
+// Get the window object where the element is placed in.
+FCKTools.GetElementWindow = function( element )
+{
+ return this.GetDocumentWindow( this.GetElementDocument( element ) ) ;
+}
+
+FCKTools.GetDocumentWindow = function( document )
+{
+ // With Safari, there is not way to retrieve the window from the document, so we must fix it.
+ if ( FCKBrowserInfo.IsSafari && !document.parentWindow )
+ this.FixDocumentParentWindow( window.top ) ;
+
+ return document.parentWindow || document.defaultView ;
+}
+
+/*
+ This is a Safari specific function that fix the reference to the parent
+ window from the document object.
+*/
+FCKTools.FixDocumentParentWindow = function( targetWindow )
+{
+ if ( targetWindow.document )
+ targetWindow.document.parentWindow = targetWindow ;
+
+ for ( var i = 0 ; i < targetWindow.frames.length ; i++ )
+ FCKTools.FixDocumentParentWindow( targetWindow.frames[i] ) ;
+}
+
+FCKTools.HTMLEncode = function( text )
+{
+ if ( !text )
+ return '' ;
+
+ text = text.replace( /&/g, '&amp;' ) ;
+ text = text.replace( /</g, '&lt;' ) ;
+ text = text.replace( />/g, '&gt;' ) ;
+
+ return text ;
+}
+
+FCKTools.HTMLDecode = function( text )
+{
+ if ( !text )
+ return '' ;
+
+ text = text.replace( /&gt;/g, '>' ) ;
+ text = text.replace( /&lt;/g, '<' ) ;
+ text = text.replace( /&amp;/g, '&' ) ;
+
+ return text ;
+}
+
+FCKTools._ProcessLineBreaksForPMode = function( oEditor, text, liState, node, strArray )
+{
+ var closeState = 0 ;
+ var blockStartTag = "<p>" ;
+ var blockEndTag = "</p>" ;
+ var lineBreakTag = "<br />" ;
+ if ( liState )
+ {
+ blockStartTag = "<li>" ;
+ blockEndTag = "</li>" ;
+ closeState = 1 ;
+ }
+
+ // Are we currently inside a <p> tag now?
+ // If yes, close it at the next double line break.
+ while ( node && node != oEditor.FCK.EditorDocument.body )
+ {
+ if ( node.tagName.toLowerCase() == 'p' )
+ {
+ closeState = 1 ;
+ break;
+ }
+ node = node.parentNode ;
+ }
+
+ for ( var i = 0 ; i < text.length ; i++ )
+ {
+ var c = text.charAt( i ) ;
+ if ( c == '\r' )
+ continue ;
+
+ if ( c != '\n' )
+ {
+ strArray.push( c ) ;
+ continue ;
+ }
+
+ // Now we have encountered a line break.
+ // Check if the next character is also a line break.
+ var n = text.charAt( i + 1 ) ;
+ if ( n == '\r' )
+ {
+ i++ ;
+ n = text.charAt( i + 1 ) ;
+ }
+ if ( n == '\n' )
+ {
+ i++ ; // ignore next character - we have already processed it.
+ if ( closeState )
+ strArray.push( blockEndTag ) ;
+ strArray.push( blockStartTag ) ;
+ closeState = 1 ;
+ }
+ else
+ strArray.push( lineBreakTag ) ;
+ }
+}
+
+FCKTools._ProcessLineBreaksForDivMode = function( oEditor, text, liState, node, strArray )
+{
+ var closeState = 0 ;
+ var blockStartTag = "<div>" ;
+ var blockEndTag = "</div>" ;
+ if ( liState )
+ {
+ blockStartTag = "<li>" ;
+ blockEndTag = "</li>" ;
+ closeState = 1 ;
+ }
+
+ // Are we currently inside a <div> tag now?
+ // If yes, close it at the next double line break.
+ while ( node && node != oEditor.FCK.EditorDocument.body )
+ {
+ if ( node.tagName.toLowerCase() == 'div' )
+ {
+ closeState = 1 ;
+ break ;
+ }
+ node = node.parentNode ;
+ }
+
+ for ( var i = 0 ; i < text.length ; i++ )
+ {
+ var c = text.charAt( i ) ;
+ if ( c == '\r' )
+ continue ;
+
+ if ( c != '\n' )
+ {
+ strArray.push( c ) ;
+ continue ;
+ }
+
+ if ( closeState )
+ {
+ if ( strArray[ strArray.length - 1 ] == blockStartTag )
+ {
+ // A div tag must have some contents inside for it to be visible.
+ strArray.push( "&nbsp;" ) ;
+ }
+ strArray.push( blockEndTag ) ;
+ }
+ strArray.push( blockStartTag ) ;
+ closeState = 1 ;
+ }
+ if ( closeState )
+ strArray.push( blockEndTag ) ;
+}
+
+FCKTools._ProcessLineBreaksForBrMode = function( oEditor, text, liState, node, strArray )
+{
+ var closeState = 0 ;
+ var blockStartTag = "<br />" ;
+ var blockEndTag = "" ;
+ if ( liState )
+ {
+ blockStartTag = "<li>" ;
+ blockEndTag = "</li>" ;
+ closeState = 1 ;
+ }
+
+ for ( var i = 0 ; i < text.length ; i++ )
+ {
+ var c = text.charAt( i ) ;
+ if ( c == '\r' )
+ continue ;
+
+ if ( c != '\n' )
+ {
+ strArray.push( c ) ;
+ continue ;
+ }
+
+ if ( closeState && blockEndTag.length )
+ strArray.push ( blockEndTag ) ;
+ strArray.push( blockStartTag ) ;
+ closeState = 1 ;
+ }
+}
+
+FCKTools.ProcessLineBreaks = function( oEditor, oConfig, text )
+{
+ var enterMode = oConfig.EnterMode.toLowerCase() ;
+ var strArray = [] ;
+
+ // Is the caret or selection inside an <li> tag now?
+ var liState = 0 ;
+ var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+ var node = range._Range.startContainer ;
+ while ( node && node.nodeType != 1 )
+ node = node.parentNode ;
+ if ( node && node.tagName.toLowerCase() == 'li' )
+ liState = 1 ;
+
+ if ( enterMode == 'p' )
+ this._ProcessLineBreaksForPMode( oEditor, text, liState, node, strArray ) ;
+ else if ( enterMode == 'div' )
+ this._ProcessLineBreaksForDivMode( oEditor, text, liState, node, strArray ) ;
+ else if ( enterMode == 'br' )
+ this._ProcessLineBreaksForBrMode( oEditor, text, liState, node, strArray ) ;
+ return strArray.join( "" ) ;
+}
+
+/**
+ * Adds an option to a SELECT element.
+ */
+FCKTools.AddSelectOption = function( selectElement, optionText, optionValue )
+{
+ var oOption = FCKTools.GetElementDocument( selectElement ).createElement( "OPTION" ) ;
+
+ oOption.text = optionText ;
+ oOption.value = optionValue ;
+
+ selectElement.options.add(oOption) ;
+
+ return oOption ;
+}
+
+FCKTools.RunFunction = function( func, thisObject, paramsArray, timerWindow )
+{
+ if ( func )
+ this.SetTimeout( func, 0, thisObject, paramsArray, timerWindow ) ;
+}
+
+FCKTools.SetTimeout = function( func, milliseconds, thisObject, paramsArray, timerWindow )
+{
+ return ( timerWindow || window ).setTimeout(
+ function()
+ {
+ if ( paramsArray )
+ func.apply( thisObject, [].concat( paramsArray ) ) ;
+ else
+ func.apply( thisObject ) ;
+ },
+ milliseconds ) ;
+}
+
+FCKTools.SetInterval = function( func, milliseconds, thisObject, paramsArray, timerWindow )
+{
+ return ( timerWindow || window ).setInterval(
+ function()
+ {
+ func.apply( thisObject, paramsArray || [] ) ;
+ },
+ milliseconds ) ;
+}
+
+FCKTools.ConvertStyleSizeToHtml = function( size )
+{
+ return size.EndsWith( '%' ) ? size : parseInt( size, 10 ) ;
+}
+
+FCKTools.ConvertHtmlSizeToStyle = function( size )
+{
+ return size.EndsWith( '%' ) ? size : ( size + 'px' ) ;
+}
+
+// START iCM MODIFICATIONS
+// Amended to accept a list of one or more ascensor tag names
+// Amended to check the element itself before working back up through the parent hierarchy
+FCKTools.GetElementAscensor = function( element, ascensorTagNames )
+{
+// var e = element.parentNode ;
+ var e = element ;
+ var lstTags = "," + ascensorTagNames.toUpperCase() + "," ;
+
+ while ( e )
+ {
+ if ( lstTags.indexOf( "," + e.nodeName.toUpperCase() + "," ) != -1 )
+ return e ;
+
+ e = e.parentNode ;
+ }
+ return null ;
+}
+// END iCM MODIFICATIONS
+
+FCKTools.CreateEventListener = function( func, params )
+{
+ var f = function()
+ {
+ var aAllParams = [] ;
+
+ for ( var i = 0 ; i < arguments.length ; i++ )
+ aAllParams.push( arguments[i] ) ;
+
+ func.apply( this, aAllParams.concat( params ) ) ;
+ }
+
+ return f ;
+}
+
+FCKTools.IsStrictMode = function( document )
+{
+ // There is no compatMode in Safari, but it seams that it always behave as
+ // CSS1Compat, so let's assume it as the default for that browser.
+ return ( 'CSS1Compat' == ( document.compatMode || ( FCKBrowserInfo.IsSafari ? 'CSS1Compat' : null ) ) ) ;
+}
+
+// Transforms a "arguments" object to an array.
+FCKTools.ArgumentsToArray = function( args, startIndex, maxLength )
+{
+ startIndex = startIndex || 0 ;
+ maxLength = maxLength || args.length ;
+
+ var argsArray = new Array() ;
+
+ for ( var i = startIndex ; i < startIndex + maxLength && i < args.length ; i++ )
+ argsArray.push( args[i] ) ;
+
+ return argsArray ;
+}
+
+FCKTools.CloneObject = function( sourceObject )
+{
+ var fCloneCreator = function() {} ;
+ fCloneCreator.prototype = sourceObject ;
+ return new fCloneCreator ;
+}
+
+// Appends a bogus <br> at the end of the element, if not yet available.
+FCKTools.AppendBogusBr = function( element )
+{
+ if ( !element )
+ return ;
+
+ var eLastChild = this.GetLastItem( element.getElementsByTagName('br') ) ;
+
+ if ( !eLastChild || ( eLastChild.getAttribute( 'type', 2 ) != '_moz' && eLastChild.getAttribute( '_moz_dirty' ) == null ) )
+ {
+ var doc = this.GetElementDocument( element ) ;
+
+ if ( FCKBrowserInfo.IsOpera )
+ element.appendChild( doc.createTextNode('') ) ;
+ else
+ element.appendChild( this.CreateBogusBR( doc ) ) ;
+ }
+}
+
+FCKTools.GetLastItem = function( list )
+{
+ if ( list.length > 0 )
+ return list[ list.length - 1 ] ;
+
+ return null ;
+}
+
+FCKTools.GetDocumentPosition = function( w, node )
+{
+ var x = 0 ;
+ var y = 0 ;
+ var curNode = node ;
+ var prevNode = null ;
+ var curWindow = FCKTools.GetElementWindow( curNode ) ;
+ while ( curNode && !( curWindow == w && ( curNode == w.document.body || curNode == w.document.documentElement ) ) )
+ {
+ x += curNode.offsetLeft - curNode.scrollLeft ;
+ y += curNode.offsetTop - curNode.scrollTop ;
+
+ if ( ! FCKBrowserInfo.IsOpera )
+ {
+ var scrollNode = prevNode ;
+ while ( scrollNode && scrollNode != curNode )
+ {
+ x -= scrollNode.scrollLeft ;
+ y -= scrollNode.scrollTop ;
+ scrollNode = scrollNode.parentNode ;
+ }
+ }
+
+ prevNode = curNode ;
+ if ( curNode.offsetParent )
+ curNode = curNode.offsetParent ;
+ else
+ {
+ if ( curWindow != w )
+ {
+ curNode = curWindow.frameElement ;
+ prevNode = null ;
+ if ( curNode )
+ curWindow = curNode.contentWindow.parent ;
+ }
+ else
+ curNode = null ;
+ }
+ }
+
+ // document.body is a special case when it comes to offsetTop and offsetLeft values.
+ // 1. It matters if document.body itself is a positioned element;
+ // 2. It matters is when we're in IE and the element has no positioned ancestor.
+ // Otherwise the values should be ignored.
+ if ( FCKDomTools.GetCurrentElementStyle( w.document.body, 'position') != 'static'
+ || ( FCKBrowserInfo.IsIE && FCKDomTools.GetPositionedAncestor( node ) == null ) )
+ {
+ x += w.document.body.offsetLeft ;
+ y += w.document.body.offsetTop ;
+ }
+
+ return { "x" : x, "y" : y } ;
+}
+
+FCKTools.GetWindowPosition = function( w, node )
+{
+ var pos = this.GetDocumentPosition( w, node ) ;
+ var scroll = FCKTools.GetScrollPosition( w ) ;
+ pos.x -= scroll.X ;
+ pos.y -= scroll.Y ;
+ return pos ;
+}
+
+FCKTools.ProtectFormStyles = function( formNode )
+{
+ if ( !formNode || formNode.nodeType != 1 || formNode.tagName.toLowerCase() != 'form' )
+ return [] ;
+ var hijackRecord = [] ;
+ var hijackNames = [ 'style', 'className' ] ;
+ for ( var i = 0 ; i < hijackNames.length ; i++ )
+ {
+ var name = hijackNames[i] ;
+ if ( formNode.elements.namedItem( name ) )
+ {
+ var hijackNode = formNode.elements.namedItem( name ) ;
+ hijackRecord.push( [ hijackNode, hijackNode.nextSibling ] ) ;
+ formNode.removeChild( hijackNode ) ;
+ }
+ }
+ return hijackRecord ;
+}
+
+FCKTools.RestoreFormStyles = function( formNode, hijackRecord )
+{
+ if ( !formNode || formNode.nodeType != 1 || formNode.tagName.toLowerCase() != 'form' )
+ return ;
+ if ( hijackRecord.length > 0 )
+ {
+ for ( var i = hijackRecord.length - 1 ; i >= 0 ; i-- )
+ {
+ var node = hijackRecord[i][0] ;
+ var sibling = hijackRecord[i][1] ;
+ if ( sibling )
+ formNode.insertBefore( node, sibling ) ;
+ else
+ formNode.appendChild( node ) ;
+ }
+ }
+}
+
+// Perform a one-step DFS walk.
+FCKTools.GetNextNode = function( node, limitNode )
+{
+ if ( node.firstChild )
+ return node.firstChild ;
+ else if ( node.nextSibling )
+ return node.nextSibling ;
+ else
+ {
+ var ancestor = node.parentNode ;
+ while ( ancestor )
+ {
+ if ( ancestor == limitNode )
+ return null ;
+ if ( ancestor.nextSibling )
+ return ancestor.nextSibling ;
+ else
+ ancestor = ancestor.parentNode ;
+ }
+ }
+ return null ;
+}
+
+FCKTools.GetNextTextNode = function( textnode, limitNode, checkStop )
+{
+ node = this.GetNextNode( textnode, limitNode ) ;
+ if ( checkStop && node && checkStop( node ) )
+ return null ;
+ while ( node && node.nodeType != 3 )
+ {
+ node = this.GetNextNode( node, limitNode ) ;
+ if ( checkStop && node && checkStop( node ) )
+ return null ;
+ }
+ return node ;
+}
+
+/**
+ * Merge all objects passed by argument into a single object.
+ */
+FCKTools.Merge = function()
+{
+ var args = arguments ;
+ var o = args[0] ;
+
+ for ( var i = 1 ; i < args.length ; i++ )
+ {
+ var arg = args[i] ;
+ for ( var p in arg )
+ o[p] = arg[p] ;
+ }
+
+ return o ;
+}
+
+/**
+ * Check if the passed argument is a real Array. It may not working when
+ * calling it cross windows.
+ */
+FCKTools.IsArray = function( it )
+{
+ return ( it instanceof Array ) ;
+}
+
+/**
+ * Appends a "length" property to an object, containing the number of
+ * properties available on it, excluded the append property itself.
+ */
+FCKTools.AppendLengthProperty = function( targetObject, propertyName )
+{
+ var counter = 0 ;
+
+ for ( var n in targetObject )
+ counter++ ;
+
+ return targetObject[ propertyName || 'length' ] = counter ;
+}
+
+/**
+ * Gets the browser parsed version of a css text (style attribute value). On
+ * some cases, the browser makes changes to the css text, returning a different
+ * value. For example, hexadecimal colors get transformed to rgb().
+ */
+FCKTools.NormalizeCssText = function( unparsedCssText )
+{
+ // Injects the style in a temporary span object, so the browser parses it,
+ // retrieving its final format.
+ var tempSpan = document.createElement( 'span' ) ;
+ tempSpan.style.cssText = unparsedCssText ;
+ return tempSpan.style.cssText ;
+}
+
+/**
+ * Binding the "this" reference to an object for a function.
+ */
+FCKTools.Bind = function( subject, func )
+{
+ return function(){ return func.apply( subject, arguments ) ; } ;
+}
+
+/**
+ * Retrieve the correct "empty iframe" URL for the current browser, which
+ * causes the minimum fuzz (e.g. security warnings in HTTPS, DNS error in
+ * IE5.5, etc.) for that browser, making the iframe ready to DOM use whithout
+ * having to loading an external file.
+ */
+FCKTools.GetVoidUrl = function()
+{
+ if ( FCK_IS_CUSTOM_DOMAIN )
+ return "javascript: void( function(){" +
+ "document.open();" +
+ "document.write('<html><head><title></title></head><body></body></html>');" +
+ "document.domain = '" + FCK_RUNTIME_DOMAIN + "';" +
+ "document.close();" +
+ "}() ) ;";
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ if ( FCKBrowserInfo.IsIE7 || !FCKBrowserInfo.IsIE6 )
+ return "" ; // IE7+ / IE5.5
+ else
+ return "javascript: '';" ; // IE6+
+ }
+
+ return "javascript: void(0);" ; // All other browsers.
+}
+
+FCKTools.ResetStyles = function( element )
+{
+ element.style.cssText = 'margin:0;' +
+ 'padding:0;' +
+ 'border:0;' +
+ 'background-color:transparent;' +
+ 'background-image:none;' ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_gecko.js
new file mode 100644
index 0000000..6bbca47
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_gecko.js
@@ -0,0 +1,282 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions. (Gecko version).
+ */
+
+FCKTools.CancelEvent = function( e )
+{
+ if ( e )
+ e.preventDefault() ;
+}
+
+FCKTools.DisableSelection = function( element )
+{
+ if ( FCKBrowserInfo.IsGecko )
+ element.style.MozUserSelect = 'none' ; // Gecko only.
+ else if ( FCKBrowserInfo.IsSafari )
+ element.style.KhtmlUserSelect = 'none' ; // WebKit only.
+ else
+ element.style.userSelect = 'none' ; // CSS3 (not supported yet).
+}
+
+// Appends a CSS file to a document.
+FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+ var e = documentElement.createElement( 'LINK' ) ;
+ e.rel = 'stylesheet' ;
+ e.type = 'text/css' ;
+ e.href = cssFileUrl ;
+ documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
+ return e ;
+}
+
+// Appends a CSS style string to a document.
+FCKTools.AppendStyleString = function( documentElement, cssStyles )
+{
+ if ( !cssStyles )
+ return null ;
+
+ var e = documentElement.createElement( "STYLE" ) ;
+ e.appendChild( documentElement.createTextNode( cssStyles ) ) ;
+ documentElement.getElementsByTagName( "HEAD" )[0].appendChild( e ) ;
+ return e ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+ // Loop throw all attributes in the element
+ for ( var i = 0 ; i < element.attributes.length ; i++ )
+ {
+ // Remove the element by name.
+ element.removeAttribute( element.attributes[i].name, 0 ) ; // 0 : Case Insensitive
+ }
+}
+
+// Returns an Array of strings with all defined in the elements inside another element.
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+ // Create the array that will hold all Ids.
+ var aIds = new Array() ;
+
+ // Define a recursive function that search for the Ids.
+ var fGetIds = function( parent )
+ {
+ for ( var i = 0 ; i < parent.childNodes.length ; i++ )
+ {
+ var sId = parent.childNodes[i].id ;
+
+ // Check if the Id is defined for the element.
+ if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
+
+ // Recursive call.
+ fGetIds( parent.childNodes[i] ) ;
+ }
+ }
+
+ // Start the recursive calls.
+ fGetIds( parentElement ) ;
+
+ return aIds ;
+}
+
+// Replaces a tag with its contents. For example "<span>My <b>tag</b></span>"
+// will be replaced with "My <b>tag</b>".
+FCKTools.RemoveOuterTags = function( e )
+{
+ var oFragment = e.ownerDocument.createDocumentFragment() ;
+
+ for ( var i = 0 ; i < e.childNodes.length ; i++ )
+ oFragment.appendChild( e.childNodes[i].cloneNode(true) ) ;
+
+ e.parentNode.replaceChild( oFragment, e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+ switch ( object )
+ {
+ case 'XmlHttp' :
+ return new XMLHttpRequest() ;
+
+ case 'DOMDocument' :
+ // Originaly, we were had the following here:
+ // return document.implementation.createDocument( '', '', null ) ;
+ // But that doesn't work if we're running under domain relaxation mode, so we need a workaround.
+ // See http://ajaxian.com/archives/xml-messages-with-cross-domain-json about the trick we're using.
+ var doc = ( new DOMParser() ).parseFromString( '<tmp></tmp>', 'text/xml' ) ;
+ FCKDomTools.RemoveNode( doc.firstChild ) ;
+ return doc ;
+ }
+ return null ;
+}
+
+FCKTools.GetScrollPosition = function( relativeWindow )
+{
+ return { X : relativeWindow.pageXOffset, Y : relativeWindow.pageYOffset } ;
+}
+
+FCKTools.AddEventListener = function( sourceObject, eventName, listener )
+{
+ sourceObject.addEventListener( eventName, listener, false ) ;
+}
+
+FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
+{
+ sourceObject.removeEventListener( eventName, listener, false ) ;
+}
+
+// Listeners attached with this function cannot be detached.
+FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
+{
+ sourceObject.addEventListener(
+ eventName,
+ function( e )
+ {
+ listener.apply( sourceObject, [ e ].concat( paramsArray || [] ) ) ;
+ },
+ false
+ ) ;
+}
+
+// Returns and object with the "Width" and "Height" properties.
+FCKTools.GetViewPaneSize = function( win )
+{
+ return { Width : win.innerWidth, Height : win.innerHeight } ;
+}
+
+FCKTools.SaveStyles = function( element )
+{
+ var data = FCKTools.ProtectFormStyles( element ) ;
+
+ var oSavedStyles = new Object() ;
+
+ if ( element.className.length > 0 )
+ {
+ oSavedStyles.Class = element.className ;
+ element.className = '' ;
+ }
+
+ var sInlineStyle = element.getAttribute( 'style' ) ;
+
+ if ( sInlineStyle && sInlineStyle.length > 0 )
+ {
+ oSavedStyles.Inline = sInlineStyle ;
+ element.setAttribute( 'style', '', 0 ) ; // 0 : Case Insensitive
+ }
+
+ FCKTools.RestoreFormStyles( element, data ) ;
+ return oSavedStyles ;
+}
+
+FCKTools.RestoreStyles = function( element, savedStyles )
+{
+ var data = FCKTools.ProtectFormStyles( element ) ;
+ element.className = savedStyles.Class || '' ;
+
+ if ( savedStyles.Inline )
+ element.setAttribute( 'style', savedStyles.Inline, 0 ) ; // 0 : Case Insensitive
+ else
+ element.removeAttribute( 'style', 0 ) ;
+ FCKTools.RestoreFormStyles( element, data ) ;
+}
+
+FCKTools.RegisterDollarFunction = function( targetWindow )
+{
+ targetWindow.$ = function( id )
+ {
+ return targetWindow.document.getElementById( id ) ;
+ } ;
+}
+
+FCKTools.AppendElement = function( target, elementName )
+{
+ return target.appendChild( target.ownerDocument.createElement( elementName ) ) ;
+}
+
+// Get the coordinates of an element.
+// @el : The element to get the position.
+// @relativeWindow: The window to which we want the coordinates relative to.
+FCKTools.GetElementPosition = function( el, relativeWindow )
+{
+ // Initializes the Coordinates object that will be returned by the function.
+ var c = { X:0, Y:0 } ;
+
+ var oWindow = relativeWindow || window ;
+
+ var oOwnerWindow = FCKTools.GetElementWindow( el ) ;
+
+ var previousElement = null ;
+ // Loop throw the offset chain.
+ while ( el )
+ {
+ var sPosition = oOwnerWindow.getComputedStyle(el, '').position ;
+
+ // Check for non "static" elements.
+ // 'FCKConfig.FloatingPanelsZIndex' -- Submenus are under a positioned IFRAME.
+ if ( sPosition && sPosition != 'static' && el.style.zIndex != FCKConfig.FloatingPanelsZIndex )
+ break ;
+
+ /*
+ FCKDebug.Output( el.tagName + ":" + "offset=" + el.offsetLeft + "," + el.offsetTop + " "
+ + "scroll=" + el.scrollLeft + "," + el.scrollTop ) ;
+ */
+
+ c.X += el.offsetLeft - el.scrollLeft ;
+ c.Y += el.offsetTop - el.scrollTop ;
+
+ // Backtrack due to offsetParent's calculation by the browser ignores scrollLeft and scrollTop.
+ // Backtracking is not needed for Opera
+ if ( ! FCKBrowserInfo.IsOpera )
+ {
+ var scrollElement = previousElement ;
+ while ( scrollElement && scrollElement != el )
+ {
+ c.X -= scrollElement.scrollLeft ;
+ c.Y -= scrollElement.scrollTop ;
+ scrollElement = scrollElement.parentNode ;
+ }
+ }
+
+ previousElement = el ;
+ if ( el.offsetParent )
+ el = el.offsetParent ;
+ else
+ {
+ if ( oOwnerWindow != oWindow )
+ {
+ el = oOwnerWindow.frameElement ;
+ previousElement = null ;
+ if ( el )
+ oOwnerWindow = FCKTools.GetElementWindow( el ) ;
+ }
+ else
+ {
+ c.X += el.scrollLeft ;
+ c.Y += el.scrollTop ;
+ break ;
+ }
+ }
+ }
+
+ // Return the Coordinates object
+ return c ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_ie.js
new file mode 100644
index 0000000..a849ee3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_ie.js
@@ -0,0 +1,234 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions. (IE version).
+ */
+
+FCKTools.CancelEvent = function( e )
+{
+ return false ;
+}
+
+// Appends one or more CSS files to a document.
+FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+ return documentElement.createStyleSheet( cssFileUrl ).owningElement ;
+}
+
+// Appends a CSS style string to a document.
+FCKTools.AppendStyleString = function( documentElement, cssStyles )
+{
+ if ( !cssStyles )
+ return null ;
+
+ var s = documentElement.createStyleSheet( "" ) ;
+ s.cssText = cssStyles ;
+ return s ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+ element.clearAttributes() ;
+}
+
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+ var aIds = new Array() ;
+ for ( var i = 0 ; i < parentElement.all.length ; i++ )
+ {
+ var sId = parentElement.all[i].id ;
+ if ( sId && sId.length > 0 )
+ aIds[ aIds.length ] = sId ;
+ }
+ return aIds ;
+}
+
+FCKTools.RemoveOuterTags = function( e )
+{
+ e.insertAdjacentHTML( 'beforeBegin', e.innerHTML ) ;
+ e.parentNode.removeChild( e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+ var aObjs ;
+
+ switch ( object )
+ {
+ case 'XmlHttp' :
+ // Try the native XMLHttpRequest introduced with IE7.
+ if ( document.location.protocol != 'file:' )
+ try { return new XMLHttpRequest() ; } catch (e) {}
+
+ aObjs = [ 'MSXML2.XmlHttp', 'Microsoft.XmlHttp' ] ;
+ break ;
+
+ case 'DOMDocument' :
+ aObjs = [ 'MSXML2.DOMDocument', 'Microsoft.XmlDom' ] ;
+ break ;
+ }
+
+ for ( var i = 0 ; i < 2 ; i++ )
+ {
+ try { return new ActiveXObject( aObjs[i] ) ; }
+ catch (e)
+ {}
+ }
+
+ if ( FCKLang.NoActiveX )
+ {
+ alert( FCKLang.NoActiveX ) ;
+ FCKLang.NoActiveX = null ;
+ }
+ return null ;
+}
+
+FCKTools.DisableSelection = function( element )
+{
+ element.unselectable = 'on' ;
+
+ var e, i = 0 ;
+ // The extra () is to avoid a warning with strict error checking. This is ok.
+ while ( (e = element.all[ i++ ]) )
+ {
+ switch ( e.tagName )
+ {
+ case 'IFRAME' :
+ case 'TEXTAREA' :
+ case 'INPUT' :
+ case 'SELECT' :
+ /* Ignore the above tags */
+ break ;
+ default :
+ e.unselectable = 'on' ;
+ }
+ }
+}
+
+FCKTools.GetScrollPosition = function( relativeWindow )
+{
+ var oDoc = relativeWindow.document ;
+
+ // Try with the doc element.
+ var oPos = { X : oDoc.documentElement.scrollLeft, Y : oDoc.documentElement.scrollTop } ;
+
+ if ( oPos.X > 0 || oPos.Y > 0 )
+ return oPos ;
+
+ // If no scroll, try with the body.
+ return { X : oDoc.body.scrollLeft, Y : oDoc.body.scrollTop } ;
+}
+
+FCKTools.AddEventListener = function( sourceObject, eventName, listener )
+{
+ sourceObject.attachEvent( 'on' + eventName, listener ) ;
+}
+
+FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
+{
+ sourceObject.detachEvent( 'on' + eventName, listener ) ;
+}
+
+// Listeners attached with this function cannot be detached.
+FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
+{
+ // Ok... this is a closures party, but is the only way to make it clean of memory leaks.
+ var o = new Object() ;
+ o.Source = sourceObject ;
+ o.Params = paramsArray || [] ; // Memory leak if we have DOM objects here.
+ o.Listener = function( ev )
+ {
+ return listener.apply( o.Source, [ ev ].concat( o.Params ) ) ;
+ }
+
+ if ( FCK.IECleanup )
+ FCK.IECleanup.AddItem( null, function() { o.Source = null ; o.Params = null ; } ) ;
+
+ sourceObject.attachEvent( 'on' + eventName, o.Listener ) ;
+
+ sourceObject = null ; // Memory leak cleaner (because of the above closure).
+ paramsArray = null ; // Memory leak cleaner (because of the above closure).
+}
+
+// Returns and object with the "Width" and "Height" properties.
+FCKTools.GetViewPaneSize = function( win )
+{
+ var oSizeSource ;
+
+ var oDoc = win.document.documentElement ;
+ if ( oDoc && oDoc.clientWidth ) // IE6 Strict Mode
+ oSizeSource = oDoc ;
+ else
+ oSizeSource = win.document.body ; // Other IEs
+
+ if ( oSizeSource )
+ return { Width : oSizeSource.clientWidth, Height : oSizeSource.clientHeight } ;
+ else
+ return { Width : 0, Height : 0 } ;
+}
+
+FCKTools.SaveStyles = function( element )
+{
+ var data = FCKTools.ProtectFormStyles( element ) ;
+
+ var oSavedStyles = new Object() ;
+
+ if ( element.className.length > 0 )
+ {
+ oSavedStyles.Class = element.className ;
+ element.className = '' ;
+ }
+
+ var sInlineStyle = element.style.cssText ;
+
+ if ( sInlineStyle.length > 0 )
+ {
+ oSavedStyles.Inline = sInlineStyle ;
+ element.style.cssText = '' ;
+ }
+
+ FCKTools.RestoreFormStyles( element, data ) ;
+ return oSavedStyles ;
+}
+
+FCKTools.RestoreStyles = function( element, savedStyles )
+{
+ var data = FCKTools.ProtectFormStyles( element ) ;
+ element.className = savedStyles.Class || '' ;
+ element.style.cssText = savedStyles.Inline || '' ;
+ FCKTools.RestoreFormStyles( element, data ) ;
+}
+
+FCKTools.RegisterDollarFunction = function( targetWindow )
+{
+ targetWindow.$ = targetWindow.document.getElementById ;
+}
+
+FCKTools.AppendElement = function( target, elementName )
+{
+ return target.appendChild( this.GetElementDocument( target ).createElement( elementName ) ) ;
+}
+
+// This function may be used by Regex replacements.
+FCKTools.ToLowerCase = function( strValue )
+{
+ return strValue.toLowerCase() ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckundo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckundo.js
new file mode 100644
index 0000000..404a5d9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckundo.js
@@ -0,0 +1,223 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+var FCKUndo = new Object() ;
+
+FCKUndo.SavedData = new Array() ;
+FCKUndo.CurrentIndex = -1 ;
+FCKUndo.TypesCount = 0 ;
+FCKUndo.Changed = false ; // Is the document changed in respect to its initial image?
+FCKUndo.MaxTypes = 25 ;
+FCKUndo.Typing = false ;
+FCKUndo.SaveLocked = false ;
+
+FCKUndo._GetBookmark = function()
+{
+ FCKSelection.Restore() ;
+
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ try
+ {
+ // There are some tricky cases where this might fail (e.g. having a lone empty table in IE)
+ range.MoveToSelection() ;
+ }
+ catch ( e )
+ {
+ return null ;
+ }
+ if ( FCKBrowserInfo.IsIE )
+ {
+ var bookmark = range.CreateBookmark() ;
+ var dirtyHtml = FCK.EditorDocument.body.innerHTML ;
+ range.MoveToBookmark( bookmark ) ;
+ return [ bookmark, dirtyHtml ] ;
+ }
+ return range.CreateBookmark2() ;
+}
+
+FCKUndo._SelectBookmark = function( bookmark )
+{
+ if ( ! bookmark )
+ return ;
+
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ if ( bookmark instanceof Object )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ range.MoveToBookmark( bookmark[0] ) ;
+ else
+ range.MoveToBookmark2( bookmark ) ;
+ try
+ {
+ // this does not always succeed, there are still some tricky cases where it fails
+ // e.g. add a special character at end of document, undo, redo -> error
+ range.Select() ;
+ }
+ catch ( e )
+ {
+ // if select restore fails, put the caret at the end of the document
+ range.MoveToPosition( FCK.EditorDocument.body, 4 ) ;
+ range.Select() ;
+ }
+ }
+}
+
+FCKUndo._CompareCursors = function( cursor1, cursor2 )
+{
+ for ( var i = 0 ; i < Math.min( cursor1.length, cursor2.length ) ; i++ )
+ {
+ if ( cursor1[i] < cursor2[i] )
+ return -1;
+ else if (cursor1[i] > cursor2[i] )
+ return 1;
+ }
+ if ( cursor1.length < cursor2.length )
+ return -1;
+ else if (cursor1.length > cursor2.length )
+ return 1;
+ return 0;
+}
+
+FCKUndo._CheckIsBookmarksEqual = function( bookmark1, bookmark2 )
+{
+ if ( ! ( bookmark1 && bookmark2 ) )
+ return false ;
+ if ( FCKBrowserInfo.IsIE )
+ {
+ var startOffset1 = bookmark1[1].search( bookmark1[0].StartId ) ;
+ var startOffset2 = bookmark2[1].search( bookmark2[0].StartId ) ;
+ var endOffset1 = bookmark1[1].search( bookmark1[0].EndId ) ;
+ var endOffset2 = bookmark2[1].search( bookmark2[0].EndId ) ;
+ return startOffset1 == startOffset2 && endOffset1 == endOffset2 ;
+ }
+ else
+ {
+ return this._CompareCursors( bookmark1.Start, bookmark2.Start ) == 0
+ && this._CompareCursors( bookmark1.End, bookmark2.End ) == 0 ;
+ }
+}
+
+FCKUndo.SaveUndoStep = function()
+{
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || this.SaveLocked )
+ return ;
+
+ // Assume the editor content is changed when SaveUndoStep() is called after the first time.
+ // This also enables the undo button in toolbar.
+ if ( this.SavedData.length )
+ this.Changed = true ;
+
+ // Get the HTML content.
+ var sHtml = FCK.EditorDocument.body.innerHTML ;
+ var bookmark = this._GetBookmark() ;
+
+ // Shrink the array to the current level.
+ this.SavedData = this.SavedData.slice( 0, this.CurrentIndex + 1 ) ;
+
+ // Cancel operation if the new step is identical to the previous one.
+ if ( this.CurrentIndex > 0
+ && sHtml == this.SavedData[ this.CurrentIndex ][0]
+ && this._CheckIsBookmarksEqual( bookmark, this.SavedData[ this.CurrentIndex ][1] ) )
+ return ;
+ // Save the selection and caret position in the first undo level for the first change.
+ else if ( this.CurrentIndex == 0 && this.SavedData.length && sHtml == this.SavedData[0][0] )
+ {
+ this.SavedData[0][1] = bookmark ;
+ return ;
+ }
+
+ // If we reach the Maximum number of undo levels, we must remove the first
+ // entry of the list shifting all elements.
+ if ( this.CurrentIndex + 1 >= FCKConfig.MaxUndoLevels )
+ this.SavedData.shift() ;
+ else
+ this.CurrentIndex++ ;
+
+ // Save the new level in front of the actual position.
+ this.SavedData[ this.CurrentIndex ] = [ sHtml, bookmark ] ;
+
+ FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCKUndo.CheckUndoState = function()
+{
+ return ( this.Changed || this.CurrentIndex > 0 ) ;
+}
+
+FCKUndo.CheckRedoState = function()
+{
+ return ( this.CurrentIndex < ( this.SavedData.length - 1 ) ) ;
+}
+
+FCKUndo.Undo = function()
+{
+ if ( this.CheckUndoState() )
+ {
+ // If it is the first step.
+ if ( this.CurrentIndex == ( this.SavedData.length - 1 ) )
+ {
+ // Save the actual state for a possible "Redo" call.
+ this.SaveUndoStep() ;
+ }
+
+ // Go a step back.
+ this._ApplyUndoLevel( --this.CurrentIndex ) ;
+
+ FCK.Events.FireEvent( "OnSelectionChange" ) ;
+ }
+}
+
+FCKUndo.Redo = function()
+{
+ if ( this.CheckRedoState() )
+ {
+ // Go a step forward.
+ this._ApplyUndoLevel( ++this.CurrentIndex ) ;
+
+ FCK.Events.FireEvent( "OnSelectionChange" ) ;
+ }
+}
+
+FCKUndo._ApplyUndoLevel = function( level )
+{
+ var oData = this.SavedData[ level ] ;
+
+ if ( !oData )
+ return ;
+
+ // Update the editor contents with that step data.
+ if ( FCKBrowserInfo.IsIE )
+ {
+ if ( oData[1] && oData[1][1] )
+ FCK.SetInnerHtml( oData[1][1] ) ;
+ else
+ FCK.SetInnerHtml( oData[0] ) ;
+ }
+ else
+ FCK.EditorDocument.body.innerHTML = oData[0] ;
+
+ // Restore the selection
+ this._SelectBookmark( oData[1] ) ;
+
+ this.TypesCount = 0 ;
+ this.Changed = false ;
+ this.Typing = false ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckurlparams.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckurlparams.js
new file mode 100644
index 0000000..49815c4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckurlparams.js
@@ -0,0 +1,39 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKURLParams object that is used to get all parameters
+ * passed by the URL QueryString (after the "?").
+ */
+
+// #### URLParams: holds all URL passed parameters (like ?Param1=Value1&Param2=Value2)
+var FCKURLParams = new Object() ;
+
+(function()
+{
+ var aParams = document.location.search.substr(1).split('&') ;
+ for ( var i = 0 ; i < aParams.length ; i++ )
+ {
+ var aParam = aParams[i].split('=') ;
+ var sParamName = decodeURIComponent( aParam[0] ) ;
+ var sParamValue = decodeURIComponent( aParam[1] ) ;
+
+ FCKURLParams[ sParamName ] = sParamValue ;
+ }
+})();
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml.js
new file mode 100644
index 0000000..130a3a9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ */
+
+var FCKXHtml = new Object() ;
+
+FCKXHtml.CurrentJobNum = 0 ;
+
+FCKXHtml.GetXHTML = function( node, includeNode, format )
+{
+ FCKDomTools.CheckAndRemovePaddingNode( FCKTools.GetElementDocument( node ), FCKConfig.EnterMode ) ;
+ FCKXHtmlEntities.Initialize() ;
+
+ // Set the correct entity to use for empty blocks.
+ this._NbspEntity = ( FCKConfig.ProcessHTMLEntities? 'nbsp' : '#160' ) ;
+
+ // Save the current IsDirty state. The XHTML processor may change the
+ // original HTML, dirtying it.
+ var bIsDirty = FCK.IsDirty() ;
+
+ // Special blocks are blocks of content that remain untouched during the
+ // process. It is used for SCRIPTs and STYLEs.
+ FCKXHtml.SpecialBlocks = new Array() ;
+
+ // Create the XML DOMDocument object.
+ this.XML = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+
+ // Add a root element that holds all child nodes.
+ this.MainNode = this.XML.appendChild( this.XML.createElement( 'xhtml' ) ) ;
+
+ FCKXHtml.CurrentJobNum++ ;
+
+// var dTimer = new Date() ;
+
+ if ( includeNode )
+ this._AppendNode( this.MainNode, node ) ;
+ else
+ this._AppendChildNodes( this.MainNode, node, false ) ;
+
+ // Get the resulting XHTML as a string.
+ var sXHTML = this._GetMainXmlString() ;
+
+// alert( 'Time: ' + ( ( ( new Date() ) - dTimer ) ) + ' ms' ) ;
+
+ this.XML = null ;
+
+ // Safari adds xmlns="http://www.w3.org/1999/xhtml" to the root node (#963)
+ if ( FCKBrowserInfo.IsSafari )
+ sXHTML = sXHTML.replace( /^<xhtml.*?>/, '<xhtml>' ) ;
+
+ // Strip the "XHTML" root node.
+ sXHTML = sXHTML.substr( 7, sXHTML.length - 15 ).Trim() ;
+
+ // According to the doctype set the proper end for self-closing tags
+ // HTML: <br>
+ // XHTML: Add a space, like <br/> -> <br />
+ if (FCKConfig.DocType.length > 0 && FCKRegexLib.HtmlDocType.test( FCKConfig.DocType ) )
+ sXHTML = sXHTML.replace( FCKRegexLib.SpaceNoClose, '>');
+ else
+ sXHTML = sXHTML.replace( FCKRegexLib.SpaceNoClose, ' />');
+
+ if ( FCKConfig.ForceSimpleAmpersand )
+ sXHTML = sXHTML.replace( FCKRegexLib.ForceSimpleAmpersand, '&' ) ;
+
+ if ( format )
+ sXHTML = FCKCodeFormatter.Format( sXHTML ) ;
+
+ // Now we put back the SpecialBlocks contents.
+ for ( var i = 0 ; i < FCKXHtml.SpecialBlocks.length ; i++ )
+ {
+ var oRegex = new RegExp( '___FCKsi___' + i ) ;
+ sXHTML = sXHTML.replace( oRegex, FCKXHtml.SpecialBlocks[i] ) ;
+ }
+
+ // Replace entities marker with the ampersand.
+ sXHTML = sXHTML.replace( FCKRegexLib.GeckoEntitiesMarker, '&' ) ;
+
+ // Restore the IsDirty state if it was not dirty.
+ if ( !bIsDirty )
+ FCK.ResetIsDirty() ;
+
+ FCKDomTools.EnforcePaddingNode( FCKTools.GetElementDocument( node ), FCKConfig.EnterMode ) ;
+ return sXHTML ;
+}
+
+FCKXHtml._AppendAttribute = function( xmlNode, attributeName, attributeValue )
+{
+ try
+ {
+ if ( attributeValue == undefined || attributeValue == null )
+ attributeValue = '' ;
+ else if ( attributeValue.replace )
+ {
+ if ( FCKConfig.ForceSimpleAmpersand )
+ attributeValue = attributeValue.replace( /&/g, '___FCKAmp___' ) ;
+
+ // Entities must be replaced in the attribute values.
+ attributeValue = attributeValue.replace( FCKXHtmlEntities.EntitiesRegex, FCKXHtml_GetEntity ) ;
+ }
+
+ // Create the attribute.
+ var oXmlAtt = this.XML.createAttribute( attributeName ) ;
+ oXmlAtt.value = attributeValue ;
+
+ // Set the attribute in the node.
+ xmlNode.attributes.setNamedItem( oXmlAtt ) ;
+ }
+ catch (e)
+ {}
+}
+
+FCKXHtml._AppendChildNodes = function( xmlNode, htmlNode, isBlockElement )
+{
+ var oNode = htmlNode.firstChild ;
+
+ while ( oNode )
+ {
+ this._AppendNode( xmlNode, oNode ) ;
+ oNode = oNode.nextSibling ;
+ }
+
+ // Trim block elements. This is also needed to avoid Firefox leaving extra
+ // BRs at the end of them.
+ if ( isBlockElement && htmlNode.tagName && htmlNode.tagName.toLowerCase() != 'pre' )
+ {
+ FCKDomTools.TrimNode( xmlNode ) ;
+
+ if ( FCKConfig.FillEmptyBlocks )
+ {
+ var lastChild = xmlNode.lastChild ;
+ if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName == 'br' )
+ this._AppendEntity( xmlNode, this._NbspEntity ) ;
+ }
+ }
+
+ // If the resulting node is empty.
+ if ( xmlNode.childNodes.length == 0 )
+ {
+ if ( isBlockElement && FCKConfig.FillEmptyBlocks )
+ {
+ this._AppendEntity( xmlNode, this._NbspEntity ) ;
+ return xmlNode ;
+ }
+
+ var sNodeName = xmlNode.nodeName ;
+
+ // Some inline elements are required to have something inside (span, strong, etc...).
+ if ( FCKListsLib.InlineChildReqElements[ sNodeName ] )
+ return null ;
+
+ // We can't use short representation of empty elements that are not marked
+ // as empty in th XHTML DTD.
+ if ( !FCKListsLib.EmptyElements[ sNodeName ] )
+ xmlNode.appendChild( this.XML.createTextNode('') ) ;
+ }
+
+ return xmlNode ;
+}
+
+FCKXHtml._AppendNode = function( xmlNode, htmlNode )
+{
+ if ( !htmlNode )
+ return false ;
+
+ switch ( htmlNode.nodeType )
+ {
+ // Element Node.
+ case 1 :
+ // If we detect a <br> inside a <pre> in Gecko, turn it into a line break instead.
+ // This is a workaround for the Gecko bug here: https://bugzilla.mozilla.org/show_bug.cgi?id=92921
+ if ( FCKBrowserInfo.IsGecko
+ && htmlNode.tagName.toLowerCase() == 'br'
+ && htmlNode.parentNode.tagName.toLowerCase() == 'pre' )
+ {
+ var val = '\r' ;
+ if ( htmlNode == htmlNode.parentNode.firstChild )
+ val += '\r' ;
+ return FCKXHtml._AppendNode( xmlNode, this.XML.createTextNode( val ) ) ;
+ }
+
+ // Here we found an element that is not the real element, but a
+ // fake one (like the Flash placeholder image), so we must get the real one.
+ if ( htmlNode.getAttribute('_fckfakelement') )
+ return FCKXHtml._AppendNode( xmlNode, FCK.GetRealElement( htmlNode ) ) ;
+
+ // Ignore bogus BR nodes in the DOM.
+ if ( FCKBrowserInfo.IsGecko &&
+ ( htmlNode.hasAttribute('_moz_editor_bogus_node') || htmlNode.getAttribute( 'type' ) == '_moz' ) )
+ {
+ if ( htmlNode.nextSibling )
+ return false ;
+ else
+ {
+ htmlNode.removeAttribute( '_moz_editor_bogus_node' ) ;
+ htmlNode.removeAttribute( 'type' ) ;
+ }
+ }
+
+ // This is for elements that are instrumental to FCKeditor and
+ // must be removed from the final HTML.
+ if ( htmlNode.getAttribute('_fcktemp') )
+ return false ;
+
+ // Get the element name.
+ var sNodeName = htmlNode.tagName.toLowerCase() ;
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // IE doens't include the scope name in the nodeName. So, add the namespace.
+ if ( htmlNode.scopeName && htmlNode.scopeName != 'HTML' && htmlNode.scopeName != 'FCK' )
+ sNodeName = htmlNode.scopeName.toLowerCase() + ':' + sNodeName ;
+ }
+ else
+ {
+ if ( sNodeName.StartsWith( 'fck:' ) )
+ sNodeName = sNodeName.Remove( 0,4 ) ;
+ }
+
+ // Check if the node name is valid, otherwise ignore this tag.
+ // If the nodeName starts with a slash, it is a orphan closing tag.
+ // On some strange cases, the nodeName is empty, even if the node exists.
+ if ( !FCKRegexLib.ElementName.test( sNodeName ) )
+ return false ;
+
+ // The already processed nodes must be marked to avoid then to be duplicated (bad formatted HTML).
+ // So here, the "mark" is checked... if the element is Ok, then mark it.
+ if ( htmlNode._fckxhtmljob && htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum )
+ return false ;
+
+ var oNode = this.XML.createElement( sNodeName ) ;
+
+ // Add all attributes.
+ FCKXHtml._AppendAttributes( xmlNode, htmlNode, oNode, sNodeName ) ;
+
+ htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ;
+
+ // Tag specific processing.
+ var oTagProcessor = FCKXHtml.TagProcessors[ sNodeName ] ;
+
+ if ( oTagProcessor )
+ oNode = oTagProcessor( oNode, htmlNode, xmlNode ) ;
+ else
+ oNode = this._AppendChildNodes( oNode, htmlNode, Boolean( FCKListsLib.NonEmptyBlockElements[ sNodeName ] ) ) ;
+
+ if ( !oNode )
+ return false ;
+
+ xmlNode.appendChild( oNode ) ;
+
+ break ;
+
+ // Text Node.
+ case 3 :
+ if ( htmlNode.parentNode && htmlNode.parentNode.nodeName.IEquals( 'pre' ) )
+ return this._AppendTextNode( xmlNode, htmlNode.nodeValue ) ;
+ return this._AppendTextNode( xmlNode, htmlNode.nodeValue.ReplaceNewLineChars(' ') ) ;
+
+ // Comment
+ case 8 :
+ // IE catches the <!DOTYPE ... > as a comment, but it has no
+ // innerHTML, so we can catch it, and ignore it.
+ if ( FCKBrowserInfo.IsIE && !htmlNode.innerHTML )
+ break ;
+
+ try { xmlNode.appendChild( this.XML.createComment( htmlNode.nodeValue ) ) ; }
+ catch (e) { /* Do nothing... probably this is a wrong format comment. */ }
+ break ;
+
+ // Unknown Node type.
+ default :
+ xmlNode.appendChild( this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) ) ;
+ break ;
+ }
+ return true ;
+}
+
+// Append an item to the SpecialBlocks array and returns the tag to be used.
+FCKXHtml._AppendSpecialItem = function( item )
+{
+ return '___FCKsi___' + ( FCKXHtml.SpecialBlocks.push( item ) - 1 ) ;
+}
+
+FCKXHtml._AppendEntity = function( xmlNode, entity )
+{
+ xmlNode.appendChild( this.XML.createTextNode( '#?-:' + entity + ';' ) ) ;
+}
+
+FCKXHtml._AppendTextNode = function( targetNode, textValue )
+{
+ var bHadText = textValue.length > 0 ;
+ if ( bHadText )
+ targetNode.appendChild( this.XML.createTextNode( textValue.replace( FCKXHtmlEntities.EntitiesRegex, FCKXHtml_GetEntity ) ) ) ;
+ return bHadText ;
+}
+
+// Retrieves a entity (internal format) for a given character.
+function FCKXHtml_GetEntity( character )
+{
+ // We cannot simply place the entities in the text, because the XML parser
+ // will translate & to &amp;. So we use a temporary marker which is replaced
+ // in the end of the processing.
+ var sEntity = FCKXHtmlEntities.Entities[ character ] || ( '#' + character.charCodeAt(0) ) ;
+ return '#?-:' + sEntity + ';' ;
+}
+
+// An object that hold tag specific operations.
+FCKXHtml.TagProcessors =
+{
+ a : function( node, htmlNode )
+ {
+ // Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1556878).
+ if ( htmlNode.innerHTML.Trim().length == 0 && !htmlNode.name )
+ return false ;
+
+ var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+ if ( sSavedUrl != null )
+ FCKXHtml._AppendAttribute( node, 'href', sSavedUrl ) ;
+
+
+ // Anchors with content has been marked with an additional class, now we must remove it.
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // Buggy IE, doesn't copy the name of changed anchors.
+ if ( htmlNode.name )
+ FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+ }
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+ return node ;
+ },
+
+ area : function( node, htmlNode )
+ {
+ var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+ if ( sSavedUrl != null )
+ FCKXHtml._AppendAttribute( node, 'href', sSavedUrl ) ;
+
+ // IE ignores the "COORDS" and "SHAPE" attribute so we must add it manually.
+ if ( FCKBrowserInfo.IsIE )
+ {
+ if ( ! node.attributes.getNamedItem( 'coords' ) )
+ {
+ var sCoords = htmlNode.getAttribute( 'coords', 2 ) ;
+ if ( sCoords && sCoords != '0,0,0' )
+ FCKXHtml._AppendAttribute( node, 'coords', sCoords ) ;
+ }
+
+ if ( ! node.attributes.getNamedItem( 'shape' ) )
+ {
+ var sShape = htmlNode.getAttribute( 'shape', 2 ) ;
+ if ( sShape && sShape.length > 0 )
+ FCKXHtml._AppendAttribute( node, 'shape', sShape.toLowerCase() ) ;
+ }
+ }
+
+ return node ;
+ },
+
+ body : function( node, htmlNode )
+ {
+ node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+ // Remove spellchecker attributes added for Firefox when converting to HTML code (Bug #1351).
+ node.removeAttribute( 'spellcheck' ) ;
+ return node ;
+ },
+
+ // IE loses contents of iframes, and Gecko does give it back HtmlEncoded
+ // Note: Opera does lose the content and doesn't provide it in the innerHTML string
+ iframe : function( node, htmlNode )
+ {
+ var sHtml = htmlNode.innerHTML ;
+
+ // Gecko does give back the encoded html
+ if ( FCKBrowserInfo.IsGecko )
+ sHtml = FCKTools.HTMLDecode( sHtml );
+
+ // Remove the saved urls here as the data won't be processed as nodes
+ sHtml = sHtml.replace( /\s_fcksavedurl="[^"]*"/g, '' ) ;
+
+ node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( sHtml ) ) ) ;
+
+ return node ;
+ },
+
+ img : function( node, htmlNode )
+ {
+ // The "ALT" attribute is required in XHTML.
+ if ( ! node.attributes.getNamedItem( 'alt' ) )
+ FCKXHtml._AppendAttribute( node, 'alt', '' ) ;
+
+ var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+ if ( sSavedUrl != null )
+ FCKXHtml._AppendAttribute( node, 'src', sSavedUrl ) ;
+
+ // Bug #768 : If the width and height are defined inline CSS,
+ // don't define it again in the HTML attributes.
+ if ( htmlNode.style.width )
+ node.removeAttribute( 'width' ) ;
+ if ( htmlNode.style.height )
+ node.removeAttribute( 'height' ) ;
+
+ return node ;
+ },
+
+ // Fix orphaned <li> nodes (Bug #503).
+ li : function( node, htmlNode, targetNode )
+ {
+ // If the XML parent node is already a <ul> or <ol>, then add the <li> as usual.
+ if ( targetNode.nodeName.IEquals( ['ul', 'ol'] ) )
+ return FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+ var newTarget = FCKXHtml.XML.createElement( 'ul' ) ;
+
+ // Reset the _fckxhtmljob so the HTML node is processed again.
+ htmlNode._fckxhtmljob = null ;
+
+ // Loop through all sibling LIs, adding them to the <ul>.
+ do
+ {
+ FCKXHtml._AppendNode( newTarget, htmlNode ) ;
+
+ // Look for the next element following this <li>.
+ do
+ {
+ htmlNode = FCKDomTools.GetNextSibling( htmlNode ) ;
+
+ } while ( htmlNode && htmlNode.nodeType == 3 && htmlNode.nodeValue.Trim().length == 0 )
+
+ } while ( htmlNode && htmlNode.nodeName.toLowerCase() == 'li' )
+
+ return newTarget ;
+ },
+
+ // Fix nested <ul> and <ol>.
+ ol : function( node, htmlNode, targetNode )
+ {
+ if ( htmlNode.innerHTML.Trim().length == 0 )
+ return false ;
+
+ var ePSibling = targetNode.lastChild ;
+
+ if ( ePSibling && ePSibling.nodeType == 3 )
+ ePSibling = ePSibling.previousSibling ;
+
+ if ( ePSibling && ePSibling.nodeName.toUpperCase() == 'LI' )
+ {
+ htmlNode._fckxhtmljob = null ;
+ FCKXHtml._AppendNode( ePSibling, htmlNode ) ;
+ return false ;
+ }
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+ return node ;
+ },
+
+ pre : function ( node, htmlNode )
+ {
+ var firstChild = htmlNode.firstChild ;
+
+ if ( firstChild && firstChild.nodeType == 3 )
+ node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( '\r\n' ) ) ) ;
+
+ FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+ return node ;
+ },
+
+ script : function( node, htmlNode )
+ {
+ // The "TYPE" attribute is required in XHTML.
+ if ( ! node.attributes.getNamedItem( 'type' ) )
+ FCKXHtml._AppendAttribute( node, 'type', 'text/javascript' ) ;
+
+ node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( htmlNode.text ) ) ) ;
+
+ return node ;
+ },
+
+ span : function( node, htmlNode )
+ {
+ // Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1084404).
+ if ( htmlNode.innerHTML.length == 0 )
+ return false ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+ return node ;
+ },
+
+ style : function( node, htmlNode )
+ {
+ // The "TYPE" attribute is required in XHTML.
+ if ( ! node.attributes.getNamedItem( 'type' ) )
+ FCKXHtml._AppendAttribute( node, 'type', 'text/css' ) ;
+
+ var cssText = htmlNode.innerHTML ;
+ if ( FCKBrowserInfo.IsIE ) // Bug #403 : IE always appends a \r\n to the beginning of StyleNode.innerHTML
+ cssText = cssText.replace( /^(\r\n|\n|\r)/, '' ) ;
+
+ node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( cssText ) ) ) ;
+
+ return node ;
+ },
+
+ title : function( node, htmlNode )
+ {
+ node.appendChild( FCKXHtml.XML.createTextNode( FCK.EditorDocument.title ) ) ;
+
+ return node ;
+ }
+} ;
+
+FCKXHtml.TagProcessors.ul = FCKXHtml.TagProcessors.ol ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_gecko.js
new file mode 100644
index 0000000..76c9938
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_gecko.js
@@ -0,0 +1,114 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ * Gecko specific.
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+ return ( new XMLSerializer() ).serializeToString( this.MainNode ) ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node )
+{
+ var aAttributes = htmlNode.attributes ;
+
+ for ( var n = 0 ; n < aAttributes.length ; n++ )
+ {
+ var oAttribute = aAttributes[n] ;
+
+ if ( oAttribute.specified )
+ {
+ var sAttName = oAttribute.nodeName.toLowerCase() ;
+ var sAttValue ;
+
+ // Ignore any attribute starting with "_fck".
+ if ( sAttName.StartsWith( '_fck' ) )
+ continue ;
+ // There is a bug in Mozilla that returns '_moz_xxx' attributes as specified.
+ else if ( sAttName.indexOf( '_moz' ) == 0 )
+ continue ;
+ // There are one cases (on Gecko) when the oAttribute.nodeValue must be used:
+ // - for the "class" attribute
+ else if ( sAttName == 'class' )
+ {
+ sAttValue = oAttribute.nodeValue.replace( FCKRegexLib.FCK_Class, '' ) ;
+ if ( sAttValue.length == 0 )
+ continue ;
+ }
+ // XHTML doens't support attribute minimization like "CHECKED". It must be transformed to checked="checked".
+ else if ( oAttribute.nodeValue === true )
+ sAttValue = sAttName ;
+ else
+ sAttValue = htmlNode.getAttribute( sAttName, 2 ) ; // We must use getAttribute to get it exactly as it is defined.
+
+ this._AppendAttribute( node, sAttName, sAttValue ) ;
+ }
+ }
+}
+
+if ( FCKBrowserInfo.IsOpera )
+{
+ // Opera moves the <FCK:meta> element outside head (#1166).
+
+ // Save a reference to the XML <head> node, so we can use it for
+ // orphan <meta>s.
+ FCKXHtml.TagProcessors['head'] = function( node, htmlNode )
+ {
+ FCKXHtml.XML._HeadElement = node ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+ return node ;
+ }
+
+ // Check whether a <meta> element is outside <head>, and move it to the
+ // proper place.
+ FCKXHtml.TagProcessors['meta'] = function( node, htmlNode, xmlNode )
+ {
+ if ( htmlNode.parentNode.nodeName.toLowerCase() != 'head' )
+ {
+ var headElement = FCKXHtml.XML._HeadElement ;
+
+ if ( headElement && xmlNode != headElement )
+ {
+ delete htmlNode._fckxhtmljob ;
+ FCKXHtml._AppendNode( headElement, htmlNode ) ;
+ return null ;
+ }
+ }
+
+ return node ;
+ }
+}
+
+if ( FCKBrowserInfo.IsGecko )
+{
+ // #2162, some Firefox extensions might add references to internal links
+ FCKXHtml.TagProcessors['link'] = function( node, htmlNode )
+ {
+ if ( htmlNode.href.substr(0, 9).toLowerCase() == 'chrome://' )
+ return false ;
+
+ return node ;
+ }
+
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_ie.js
new file mode 100644
index 0000000..94f2ef9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_ie.js
@@ -0,0 +1,213 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ * IE specific.
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+ return this.MainNode.xml ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node, nodeName )
+{
+ var aAttributes = htmlNode.attributes,
+ bHasStyle ;
+
+ for ( var n = 0 ; n < aAttributes.length ; n++ )
+ {
+ var oAttribute = aAttributes[n] ;
+
+ if ( oAttribute.specified )
+ {
+ var sAttName = oAttribute.nodeName.toLowerCase() ;
+ var sAttValue ;
+
+ // Ignore any attribute starting with "_fck".
+ if ( sAttName.StartsWith( '_fck' ) )
+ continue ;
+ // The following must be done because of a bug on IE regarding the style
+ // attribute. It returns "null" for the nodeValue.
+ else if ( sAttName == 'style' )
+ {
+ // Just mark it to do it later in this function.
+ bHasStyle = true ;
+ continue ;
+ }
+ // There are two cases when the oAttribute.nodeValue must be used:
+ // - for the "class" attribute
+ // - for events attributes (on IE only).
+ else if ( sAttName == 'class' )
+ {
+ sAttValue = oAttribute.nodeValue.replace( FCKRegexLib.FCK_Class, '' ) ;
+ if ( sAttValue.length == 0 )
+ continue ;
+ }
+ else if ( sAttName.indexOf('on') == 0 )
+ sAttValue = oAttribute.nodeValue ;
+ else if ( nodeName == 'body' && sAttName == 'contenteditable' )
+ continue ;
+ // XHTML doens't support attribute minimization like "CHECKED". It must be transformed to checked="checked".
+ else if ( oAttribute.nodeValue === true )
+ sAttValue = sAttName ;
+ else
+ {
+ // We must use getAttribute to get it exactly as it is defined.
+ // There are some rare cases that IE throws an error here, so we must try/catch.
+ try
+ {
+ sAttValue = htmlNode.getAttribute( sAttName, 2 ) ;
+ }
+ catch (e) {}
+ }
+ this._AppendAttribute( node, sAttName, sAttValue || oAttribute.nodeValue ) ;
+ }
+ }
+
+ // IE loses the style attribute in JavaScript-created elements tags. (#2390)
+ if ( bHasStyle || htmlNode.style.cssText.length > 0 )
+ {
+ var data = FCKTools.ProtectFormStyles( htmlNode ) ;
+ var sStyleValue = htmlNode.style.cssText.replace( FCKRegexLib.StyleProperties, FCKTools.ToLowerCase ) ;
+ FCKTools.RestoreFormStyles( htmlNode, data ) ;
+ this._AppendAttribute( node, 'style', sStyleValue ) ;
+ }
+}
+
+// On very rare cases, IE is loosing the "align" attribute for DIV. (right align and apply bulleted list)
+FCKXHtml.TagProcessors['div'] = function( node, htmlNode )
+{
+ if ( htmlNode.align.length > 0 )
+ FCKXHtml._AppendAttribute( node, 'align', htmlNode.align ) ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+ return node ;
+}
+
+// IE automatically changes <FONT> tags to <FONT size=+0>.
+FCKXHtml.TagProcessors['font'] = function( node, htmlNode )
+{
+ if ( node.attributes.length == 0 )
+ node = FCKXHtml.XML.createDocumentFragment() ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+ return node ;
+}
+
+FCKXHtml.TagProcessors['form'] = function( node, htmlNode )
+{
+ if ( htmlNode.acceptCharset && htmlNode.acceptCharset.length > 0 && htmlNode.acceptCharset != 'UNKNOWN' )
+ FCKXHtml._AppendAttribute( node, 'accept-charset', htmlNode.acceptCharset ) ;
+
+ // IE has a bug and htmlNode.attributes['name'].specified=false if there is
+ // no element with id="name" inside the form (#360 and SF-BUG-1155726).
+ var nameAtt = htmlNode.attributes['name'] ;
+
+ if ( nameAtt && nameAtt.value.length > 0 )
+ FCKXHtml._AppendAttribute( node, 'name', nameAtt.value ) ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+ return node ;
+}
+
+// IE doens't see the value attribute as an attribute for the <INPUT> tag.
+FCKXHtml.TagProcessors['input'] = function( node, htmlNode )
+{
+ if ( htmlNode.name )
+ FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+
+ if ( htmlNode.value && !node.attributes.getNamedItem( 'value' ) )
+ FCKXHtml._AppendAttribute( node, 'value', htmlNode.value ) ;
+
+ if ( !node.attributes.getNamedItem( 'type' ) )
+ FCKXHtml._AppendAttribute( node, 'type', 'text' ) ;
+
+ return node ;
+}
+
+FCKXHtml.TagProcessors['label'] = function( node, htmlNode )
+{
+ if ( htmlNode.htmlFor.length > 0 )
+ FCKXHtml._AppendAttribute( node, 'for', htmlNode.htmlFor ) ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+ return node ;
+}
+
+// Fix behavior for IE, it doesn't read back the .name on newly created maps
+FCKXHtml.TagProcessors['map'] = function( node, htmlNode )
+{
+ if ( ! node.attributes.getNamedItem( 'name' ) )
+ {
+ var name = htmlNode.name ;
+ if ( name )
+ FCKXHtml._AppendAttribute( node, 'name', name ) ;
+ }
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+ return node ;
+}
+
+FCKXHtml.TagProcessors['meta'] = function( node, htmlNode )
+{
+ var oHttpEquiv = node.attributes.getNamedItem( 'http-equiv' ) ;
+
+ if ( oHttpEquiv == null || oHttpEquiv.value.length == 0 )
+ {
+ // Get the http-equiv value from the outerHTML.
+ var sHttpEquiv = htmlNode.outerHTML.match( FCKRegexLib.MetaHttpEquiv ) ;
+
+ if ( sHttpEquiv )
+ {
+ sHttpEquiv = sHttpEquiv[1] ;
+ FCKXHtml._AppendAttribute( node, 'http-equiv', sHttpEquiv ) ;
+ }
+ }
+
+ return node ;
+}
+
+// IE ignores the "SELECTED" attribute so we must add it manually.
+FCKXHtml.TagProcessors['option'] = function( node, htmlNode )
+{
+ if ( htmlNode.selected && !node.attributes.getNamedItem( 'selected' ) )
+ FCKXHtml._AppendAttribute( node, 'selected', 'selected' ) ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+ return node ;
+}
+
+// IE doens't hold the name attribute as an attribute for the <TEXTAREA> and <SELECT> tags.
+FCKXHtml.TagProcessors['textarea'] = FCKXHtml.TagProcessors['select'] = function( node, htmlNode )
+{
+ if ( htmlNode.name )
+ FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+
+ node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+ return node ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtmlentities.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtmlentities.js
new file mode 100644
index 0000000..2ab7078
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtmlentities.js
@@ -0,0 +1,357 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file define the HTML entities handled by the editor.
+ */
+
+var FCKXHtmlEntities = new Object() ;
+
+FCKXHtmlEntities.Initialize = function()
+{
+ if ( FCKXHtmlEntities.Entities )
+ return ;
+
+ var sChars = '' ;
+ var oEntities, e ;
+
+ if ( FCKConfig.ProcessHTMLEntities )
+ {
+ FCKXHtmlEntities.Entities = {
+ // Latin-1 Entities
+ ' ':'nbsp',
+ '¡':'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',
+
+ // Symbols
+
+ 'Æ’':'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',
+ '\u2308':'lceil',
+ '\u2309':'rceil',
+ '\u230a':'lfloor',
+ '\u230b':'rfloor',
+ '\u2329':'lang',
+ '\u232a':'rang',
+ 'â—Š':'loz',
+ 'â™ ':'spades',
+ '♣':'clubs',
+ '♥':'hearts',
+ '♦':'diams',
+
+ // Other Special Characters
+
+ '"':'quot',
+ // '&':'amp', // This entity is automatically handled by the XHTML parser.
+ // '<':'lt', // This entity is automatically handled by the XHTML parser.
+ '>':'gt', // Opera and Safari don't encode it in their implementation
+ 'ˆ':'circ',
+ '˜':'tilde',
+ ' ':'ensp',
+ ' ':'emsp',
+ ' ':'thinsp',
+ '‌':'zwnj',
+ 'â€':'zwj',
+ '‎':'lrm',
+ 'â€':'rlm',
+ '–':'ndash',
+ '—':'mdash',
+ '‘':'lsquo',
+ '’':'rsquo',
+ '‚':'sbquo',
+ '“':'ldquo',
+ 'â€':'rdquo',
+ '„':'bdquo',
+ '†':'dagger',
+ '‡':'Dagger',
+ '‰':'permil',
+ '‹':'lsaquo',
+ '›':'rsaquo',
+ '€':'euro'
+ } ;
+
+ // Process Base Entities.
+ for ( e in FCKXHtmlEntities.Entities )
+ sChars += e ;
+
+ // Include Latin Letters Entities.
+ if ( FCKConfig.IncludeLatinEntities )
+ {
+ oEntities = {
+ 'À':'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'
+ } ;
+
+ for ( e in oEntities )
+ {
+ FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+ sChars += e ;
+ }
+
+ oEntities = null ;
+ }
+
+ // Include Greek Letters Entities.
+ if ( FCKConfig.IncludeGreekEntities )
+ {
+ oEntities = {
+ 'Α':'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',
+ '\u03d1':'thetasym',
+ '\u03d2':'upsih',
+ '\u03d6':'piv'
+ } ;
+
+ for ( e in oEntities )
+ {
+ FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+ sChars += e ;
+ }
+
+ oEntities = null ;
+ }
+ }
+ else
+ {
+ FCKXHtmlEntities.Entities = {
+ '>':'gt' // Opera and Safari don't encode it in their implementation
+ } ;
+ sChars = '>';
+
+ // Even if we are not processing the entities, we must render the &nbsp;
+ // correctly. As we don't want HTML entities, let's use its numeric
+ // representation (&#160).
+ sChars += ' ' ;
+ }
+
+ // Create the Regex used to find entities in the text.
+ var sRegexPattern = '[' + sChars + ']' ;
+
+ if ( FCKConfig.ProcessNumericEntities )
+ sRegexPattern = '[^ -~]|' + sRegexPattern ;
+
+ var sAdditional = FCKConfig.AdditionalNumericEntities ;
+
+ if ( sAdditional && sAdditional.length > 0 )
+ sRegexPattern += '|' + FCKConfig.AdditionalNumericEntities ;
+
+ FCKXHtmlEntities.EntitiesRegex = new RegExp( sRegexPattern, 'g' ) ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/disablehandles.htc b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/disablehandles.htc
new file mode 100644
index 0000000..8dfb661
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/disablehandles.htc
@@ -0,0 +1,15 @@
+<public:component lightweight="true">
+
+<script language="javascript">
+
+function CancelEvent()
+{
+ return false ;
+}
+
+this.onresizestart = CancelEvent ;
+this.onbeforeeditfocus = CancelEvent ;
+
+</script>
+
+</public:component>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/showtableborders.htc b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/showtableborders.htc
new file mode 100644
index 0000000..77418b9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/showtableborders.htc
@@ -0,0 +1,36 @@
+<public:component lightweight="true">
+
+<public:attach event="oncontentready" onevent="ShowBorders()" />
+<public:attach event="onpropertychange" onevent="OnPropertyChange()" />
+
+<script language="javascript">
+
+var oClassRegex = /\s*FCK__ShowTableBorders/ ;
+
+function ShowBorders()
+{
+ if ( this.border == 0 )
+ {
+ if ( !oClassRegex.test( this.className ) )
+ this.className += ' FCK__ShowTableBorders' ;
+ }
+ else
+ {
+ if ( oClassRegex.test( this.className ) )
+ {
+ this.className = this.className.replace( oClassRegex, '' ) ;
+ if ( this.className.length == 0 )
+ this.removeAttribute( 'className', 0 ) ;
+ }
+ }
+}
+
+function OnPropertyChange()
+{
+ if ( event.propertyName == 'border' || event.propertyName == 'className' )
+ ShowBorders.call(this) ;
+}
+
+</script>
+
+</public:component>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_editorarea.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_editorarea.css
new file mode 100644
index 0000000..8a328bb
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_editorarea.css
@@ -0,0 +1,110 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the default CSS file used by the editor area. It defines the
+ * initial font of the editor and background color.
+ *
+ * A user can configure the editor to use another CSS file. Just change
+ * the value of the FCKConfig.EditorAreaCSS key in the configuration
+ * file.
+ */
+
+/**
+ * The "body" styles should match your editor web site, mainly regarding
+ * background color and font family and size.
+ */
+
+body
+{
+ background-color: #ffffff;
+ padding: 5px 5px 5px 5px;
+ margin: 0px;
+}
+
+body, td
+{
+ font-family: Arial, Verdana, sans-serif;
+ font-size: 12px;
+}
+
+a[href]
+{
+ color: -moz-hyperlinktext !important; /* For Firefox... mark as important, otherwise it becomes black */
+ text-decoration: -moz-anchor-decoration; /* For Firefox 3, otherwise no underline will be used */
+}
+
+/**
+ * Just uncomment the following block if you want to avoid spaces between
+ * paragraphs. Remember to apply the same style in your output front end page.
+ */
+
+/*
+p, ul, li
+{
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+*/
+
+/**
+ * Uncomment the following block, or only selected lines if appropriate,
+ * if you have some style items that would break the styles combo box.
+ * You can also write other CSS overrides inside the style block below
+ * as needed and they will be applied to inside the style combo only.
+ */
+
+/*
+.SC_Item *, .SC_ItemSelected *
+{
+ margin: 0px !important;
+ padding: 0px !important;
+ text-indent: 0px !important;
+ clip: auto !important;
+ position: static !important;
+}
+*/
+
+/**
+ * The following are some sample styles used in the "Styles" toolbar command.
+ * You should instead remove them, and include the styles used by the site
+ * you are using the editor in.
+ */
+
+.Bold
+{
+ font-weight: bold;
+}
+
+.Title
+{
+ font-weight: bold;
+ font-size: 18px;
+ color: #cc3300;
+}
+
+.Code
+{
+ border: #8b4513 1px solid;
+ padding-right: 5px;
+ padding-left: 5px;
+ color: #000066;
+ font-family: 'Courier New' , Monospace;
+ background-color: #ff9933;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_internal.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_internal.css
new file mode 100644
index 0000000..725272f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_internal.css
@@ -0,0 +1,199 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This CSS Style Sheet defines rules used by the editor for its internal use.
+ */
+
+/* #########
+ * WARNING
+ * #########
+ * When changing this file, the minified version of it must be updated in the
+ * fckeditor.html file (see FCK_InternalCSS).
+ */
+
+/* Fix to allow putting the caret at the end of the content in Firefox if
+ clicking below the content. */
+html
+{
+ min-height: 100%;
+}
+
+table.FCK__ShowTableBorders, table.FCK__ShowTableBorders td, table.FCK__ShowTableBorders th
+{
+ border: #d3d3d3 1px solid;
+}
+
+form
+{
+ border: 1px dotted #FF0000;
+ padding: 2px;
+}
+
+.FCK__Flash
+{
+ border: #a9a9a9 1px solid;
+ background-position: center center;
+ background-image: url(images/fck_flashlogo.gif);
+ background-repeat: no-repeat;
+ width: 80px;
+ height: 80px;
+}
+
+.FCK__UnknownObject
+{
+ border: #a9a9a9 1px solid;
+ background-position: center center;
+ background-image: url(images/fck_plugin.gif);
+ background-repeat: no-repeat;
+ width: 80px;
+ height: 80px;
+}
+
+/* Empty anchors images */
+.FCK__Anchor
+{
+ border: 1px dotted #00F;
+ background-position: center center;
+ background-image: url(images/fck_anchor.gif);
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 15px;
+ vertical-align: middle;
+}
+
+/* Anchors with content */
+.FCK__AnchorC
+{
+ border: 1px dotted #00F;
+ background-position: 1px center;
+ background-image: url(images/fck_anchor.gif);
+ background-repeat: no-repeat;
+ padding-left: 18px;
+}
+
+/* Any anchor for non-IE, if we combine it with the previous rule IE ignores all. */
+a[name]
+{
+ border: 1px dotted #00F;
+ background-position: 0 center;
+ background-image: url(images/fck_anchor.gif);
+ background-repeat: no-repeat;
+ padding-left: 18px;
+}
+
+.FCK__PageBreak
+{
+ background-position: center center;
+ background-image: url(images/fck_pagebreak.gif);
+ background-repeat: no-repeat;
+ clear: both;
+ display: block;
+ float: none;
+ width: 100%;
+ border-top: #999999 1px dotted;
+ border-bottom: #999999 1px dotted;
+ border-right: 0px;
+ border-left: 0px;
+ height: 5px;
+}
+
+/* Hidden fields */
+.FCK__InputHidden
+{
+ width: 19px;
+ height: 18px;
+ background-image: url(images/fck_hiddenfield.gif);
+ background-repeat: no-repeat;
+ vertical-align: text-bottom;
+ background-position: center center;
+}
+
+.FCK__ShowBlocks p,
+.FCK__ShowBlocks div,
+.FCK__ShowBlocks pre,
+.FCK__ShowBlocks address,
+.FCK__ShowBlocks blockquote,
+.FCK__ShowBlocks h1,
+.FCK__ShowBlocks h2,
+.FCK__ShowBlocks h3,
+.FCK__ShowBlocks h4,
+.FCK__ShowBlocks h5,
+.FCK__ShowBlocks h6
+{
+ background-repeat: no-repeat;
+ border: 1px dotted gray;
+ padding-top: 8px;
+ padding-left: 8px;
+}
+
+.FCK__ShowBlocks p
+{
+ background-image: url(images/block_p.png);
+}
+
+.FCK__ShowBlocks div
+{
+ background-image: url(images/block_div.png);
+}
+
+.FCK__ShowBlocks pre
+{
+ background-image: url(images/block_pre.png);
+}
+
+.FCK__ShowBlocks address
+{
+ background-image: url(images/block_address.png);
+}
+
+.FCK__ShowBlocks blockquote
+{
+ background-image: url(images/block_blockquote.png);
+}
+
+.FCK__ShowBlocks h1
+{
+ background-image: url(images/block_h1.png);
+}
+
+.FCK__ShowBlocks h2
+{
+ background-image: url(images/block_h2.png);
+}
+
+.FCK__ShowBlocks h3
+{
+ background-image: url(images/block_h3.png);
+}
+
+.FCK__ShowBlocks h4
+{
+ background-image: url(images/block_h4.png);
+}
+
+.FCK__ShowBlocks h5
+{
+ background-image: url(images/block_h5.png);
+}
+
+.FCK__ShowBlocks h6
+{
+ background-image: url(images/block_h6.png);
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_showtableborders_gecko.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_showtableborders_gecko.css
new file mode 100644
index 0000000..87ab979
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_showtableborders_gecko.css
@@ -0,0 +1,49 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This CSS Style Sheet defines the rules to show table borders on Gecko.
+ */
+
+/* #########
+ * WARNING
+ * #########
+ * When changing this file, the minified version of it must be updated in the
+ * fckeditor.html file (see FCK_ShowTableBordersCSS).
+ */
+
+/* For tables with the "border" attribute set to "0" */
+table[border="0"],
+table[border="0"] > tr > td, table[border="0"] > tr > th,
+table[border="0"] > tbody > tr > td, table[border="0"] > tbody > tr > th,
+table[border="0"] > thead > tr > td, table[border="0"] > thead > tr > th,
+table[border="0"] > tfoot > tr > td, table[border="0"] > tfoot > tr > th
+{
+ border: #d3d3d3 1px dotted ;
+}
+
+/* For tables with no "border" attribute set */
+table:not([border]),
+table:not([border]) > tr > td, table:not([border]) > tr > th,
+table:not([border]) > tbody > tr > td, table:not([border]) > tbody > tr > th,
+table:not([border]) > thead > tr > td, table:not([border]) > thead > tr > th,
+table:not([border]) > tfoot > tr > td, table:not([border]) > tfoot > tr > th
+{
+ border: #d3d3d3 1px dotted ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_address.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_address.png
new file mode 100644
index 0000000..8bbae6e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_address.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_blockquote.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_blockquote.png
new file mode 100644
index 0000000..cf065ba
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_blockquote.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_div.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_div.png
new file mode 100644
index 0000000..a2806b1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_div.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h1.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h1.png
new file mode 100644
index 0000000..d43fbdb
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h1.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h2.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h2.png
new file mode 100644
index 0000000..27b5475
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h2.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h3.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h3.png
new file mode 100644
index 0000000..3c3034f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h3.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h4.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h4.png
new file mode 100644
index 0000000..ab3f64d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h4.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h5.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h5.png
new file mode 100644
index 0000000..93477d0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h5.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h6.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h6.png
new file mode 100644
index 0000000..11ea1c2
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h6.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_p.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_p.png
new file mode 100644
index 0000000..d055c51
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_p.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_pre.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_pre.png
new file mode 100644
index 0000000..be8ad26
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_pre.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_anchor.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_anchor.gif
new file mode 100644
index 0000000..5aa797b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_anchor.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_flashlogo.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_flashlogo.gif
new file mode 100644
index 0000000..141aac4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_flashlogo.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_hiddenfield.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_hiddenfield.gif
new file mode 100644
index 0000000..953f643
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_hiddenfield.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_pagebreak.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_pagebreak.gif
new file mode 100644
index 0000000..8d1cffd
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_pagebreak.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_plugin.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_plugin.gif
new file mode 100644
index 0000000..7d58463
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_plugin.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.css
new file mode 100644
index 0000000..4e06834
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.css
@@ -0,0 +1,85 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the CSS file used for interface details in some dialog
+ * windows.
+ */
+
+/* #########
+ * WARNING
+ * #########
+ * When changing this file, the minified version of it must be updated in the
+ * fck_dialog_common.js file (see GetCommonDialogCss).
+ */
+
+.ImagePreviewArea
+{
+ border: #000000 1px solid;
+ overflow: auto;
+ width: 100%;
+ height: 170px;
+ background-color: #ffffff;
+}
+
+.FlashPreviewArea
+{
+ border: #000000 1px solid;
+ padding: 5px;
+ overflow: auto;
+ width: 100%;
+ height: 170px;
+ background-color: #ffffff;
+}
+
+.BtnReset
+{
+ float: left;
+ background-position: center center;
+ background-image: url(images/reset.gif);
+ width: 16px;
+ height: 16px;
+ background-repeat: no-repeat;
+ border: 1px none;
+ font-size: 1px ;
+}
+
+.BtnLocked, .BtnUnlocked
+{
+ float: left;
+ background-position: center center;
+ background-image: url(images/locked.gif);
+ width: 16px;
+ height: 16px;
+ background-repeat: no-repeat;
+ border: none 1px;
+ font-size: 1px ;
+}
+
+.BtnUnlocked
+{
+ background-image: url(images/unlocked.gif);
+}
+
+.BtnOver
+{
+ border: outset 1px;
+ cursor: pointer;
+ cursor: hand;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.js
new file mode 100644
index 0000000..5536a83
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.js
@@ -0,0 +1,347 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Useful functions used by almost all dialog window pages.
+ * Dialogs should link to this file as the very first script on the page.
+ */
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+ var d = document.domain ;
+
+ while ( true )
+ {
+ // Test if we can access a parent property.
+ try
+ {
+ var test = window.parent.document.domain ;
+ break ;
+ }
+ catch( e ) {}
+
+ // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+ d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+ if ( d.length == 0 )
+ break ; // It was not able to detect the domain.
+
+ try
+ {
+ document.domain = d ;
+ }
+ catch (e)
+ {
+ break ;
+ }
+ }
+})() ;
+
+// Attention: FCKConfig must be available in the page.
+function GetCommonDialogCss( prefix )
+{
+ // CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+ return FCKConfig.BasePath + 'dialog/common/' + '|.ImagePreviewArea{border:#000 1px solid;overflow:auto;width:100%;height:170px;background-color:#fff}.FlashPreviewArea{border:#000 1px solid;padding:5px;overflow:auto;width:100%;height:170px;background-color:#fff}.BtnReset{float:left;background-position:center center;background-image:url(images/reset.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.BtnLocked,.BtnUnlocked{float:left;background-position:center center;background-image:url(images/locked.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.BtnUnlocked{background-image:url(images/unlocked.gif)}.BtnOver{border:outset 1px;cursor:pointer;cursor:hand}' ;
+}
+
+// Gets a element by its Id. Used for shorter coding.
+function GetE( elementId )
+{
+ return document.getElementById( elementId ) ;
+}
+
+function ShowE( element, isVisible )
+{
+ if ( typeof( element ) == 'string' )
+ element = GetE( element ) ;
+ element.style.display = isVisible ? '' : 'none' ;
+}
+
+function SetAttribute( element, attName, attValue )
+{
+ if ( attValue == null || attValue.length == 0 )
+ element.removeAttribute( attName, 0 ) ; // 0 : Case Insensitive
+ else
+ element.setAttribute( attName, attValue, 0 ) ; // 0 : Case Insensitive
+}
+
+function GetAttribute( element, attName, valueIfNull )
+{
+ var oAtt = element.attributes[attName] ;
+
+ if ( oAtt == null || !oAtt.specified )
+ return valueIfNull ? valueIfNull : '' ;
+
+ var oValue = element.getAttribute( attName, 2 ) ;
+
+ if ( oValue == null )
+ oValue = oAtt.nodeValue ;
+
+ return ( oValue == null ? valueIfNull : oValue ) ;
+}
+
+function SelectField( elementId )
+{
+ var element = GetE( elementId ) ;
+ element.focus() ;
+
+ // element.select may not be available for some fields (like <select>).
+ if ( element.select )
+ element.select() ;
+}
+
+// Functions used by text fields to accept numbers only.
+var IsDigit = ( function()
+ {
+ var KeyIdentifierMap =
+ {
+ End : 35,
+ Home : 36,
+ Left : 37,
+ Right : 39,
+ 'U+00007F' : 46 // Delete
+ } ;
+
+ return function ( e )
+ {
+ if ( !e )
+ e = event ;
+
+ var iCode = ( e.keyCode || e.charCode ) ;
+
+ if ( !iCode && e.keyIdentifier && ( e.keyIdentifier in KeyIdentifierMap ) )
+ iCode = KeyIdentifierMap[ e.keyIdentifier ] ;
+
+ return (
+ ( iCode >= 48 && iCode <= 57 ) // Numbers
+ || (iCode >= 35 && iCode <= 40) // Arrows, Home, End
+ || iCode == 8 // Backspace
+ || iCode == 46 // Delete
+ || iCode == 9 // Tab
+ ) ;
+ }
+ } )() ;
+
+String.prototype.Trim = function()
+{
+ return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
+}
+
+String.prototype.StartsWith = function( value )
+{
+ return ( this.substr( 0, value.length ) == value ) ;
+}
+
+String.prototype.Remove = function( start, length )
+{
+ var s = '' ;
+
+ if ( start > 0 )
+ s = this.substring( 0, start ) ;
+
+ if ( start + length < this.length )
+ s += this.substring( start + length , this.length ) ;
+
+ return s ;
+}
+
+String.prototype.ReplaceAll = function( searchArray, replaceArray )
+{
+ var replaced = this ;
+
+ for ( var i = 0 ; i < searchArray.length ; i++ )
+ {
+ replaced = replaced.replace( searchArray[i], replaceArray[i] ) ;
+ }
+
+ return replaced ;
+}
+
+function OpenFileBrowser( url, width, height )
+{
+ // oEditor must be defined.
+
+ var iLeft = ( oEditor.FCKConfig.ScreenWidth - width ) / 2 ;
+ var iTop = ( oEditor.FCKConfig.ScreenHeight - height ) / 2 ;
+
+ var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes" ;
+ sOptions += ",width=" + width ;
+ sOptions += ",height=" + height ;
+ sOptions += ",left=" + iLeft ;
+ sOptions += ",top=" + iTop ;
+
+ window.open( url, 'FCKBrowseWindow', sOptions ) ;
+}
+
+/**
+ Utility function to create/update an element with a name attribute in IE, so it behaves properly when moved around
+ It also allows to change the name or other special attributes in an existing node
+ oEditor : instance of FCKeditor where the element will be created
+ oOriginal : current element being edited or null if it has to be created
+ nodeName : string with the name of the element to create
+ oAttributes : Hash object with the attributes that must be set at creation time in IE
+ Those attributes will be set also after the element has been
+ created for any other browser to avoid redudant code
+*/
+function CreateNamedElement( oEditor, oOriginal, nodeName, oAttributes )
+{
+ var oNewNode ;
+
+ // IE doesn't allow easily to change properties of an existing object,
+ // so remove the old and force the creation of a new one.
+ var oldNode = null ;
+ if ( oOriginal && oEditor.FCKBrowserInfo.IsIE )
+ {
+ // Force the creation only if some of the special attributes have changed:
+ var bChanged = false;
+ for( var attName in oAttributes )
+ bChanged |= ( oOriginal.getAttribute( attName, 2) != oAttributes[attName] ) ;
+
+ if ( bChanged )
+ {
+ oldNode = oOriginal ;
+ oOriginal = null ;
+ }
+ }
+
+ // If the node existed (and it's not IE), then we just have to update its attributes
+ if ( oOriginal )
+ {
+ oNewNode = oOriginal ;
+ }
+ else
+ {
+ // #676, IE doesn't play nice with the name or type attribute
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ var sbHTML = [] ;
+ sbHTML.push( '<' + nodeName ) ;
+ for( var prop in oAttributes )
+ {
+ sbHTML.push( ' ' + prop + '="' + oAttributes[prop] + '"' ) ;
+ }
+ sbHTML.push( '>' ) ;
+ if ( !oEditor.FCKListsLib.EmptyElements[nodeName.toLowerCase()] )
+ sbHTML.push( '</' + nodeName + '>' ) ;
+
+ oNewNode = oEditor.FCK.EditorDocument.createElement( sbHTML.join('') ) ;
+ // Check if we are just changing the properties of an existing node: copy its properties
+ if ( oldNode )
+ {
+ CopyAttributes( oldNode, oNewNode, oAttributes ) ;
+ oEditor.FCKDomTools.MoveChildren( oldNode, oNewNode ) ;
+ oldNode.parentNode.removeChild( oldNode ) ;
+ oldNode = null ;
+
+ if ( oEditor.FCK.Selection.SelectionData )
+ {
+ // Trick to refresh the selection object and avoid error in
+ // fckdialog.html Selection.EnsureSelection
+ var oSel = oEditor.FCK.EditorDocument.selection ;
+ oEditor.FCK.Selection.SelectionData = oSel.createRange() ; // Now oSel.type will be 'None' reflecting the real situation
+ }
+ }
+ oNewNode = oEditor.FCK.InsertElement( oNewNode ) ;
+
+ // FCK.Selection.SelectionData is broken by now since we've
+ // deleted the previously selected element. So we need to reassign it.
+ if ( oEditor.FCK.Selection.SelectionData )
+ {
+ var range = oEditor.FCK.EditorDocument.body.createControlRange() ;
+ range.add( oNewNode ) ;
+ oEditor.FCK.Selection.SelectionData = range ;
+ }
+ }
+ else
+ {
+ oNewNode = oEditor.FCK.InsertElement( nodeName ) ;
+ }
+ }
+
+ // Set the basic attributes
+ for( var attName in oAttributes )
+ oNewNode.setAttribute( attName, oAttributes[attName], 0 ) ; // 0 : Case Insensitive
+
+ return oNewNode ;
+}
+
+// Copy all the attributes from one node to the other, kinda like a clone
+// But oSkipAttributes is an object with the attributes that must NOT be copied
+function CopyAttributes( oSource, oDest, oSkipAttributes )
+{
+ var aAttributes = oSource.attributes ;
+
+ for ( var n = 0 ; n < aAttributes.length ; n++ )
+ {
+ var oAttribute = aAttributes[n] ;
+
+ if ( oAttribute.specified )
+ {
+ var sAttName = oAttribute.nodeName ;
+ // We can set the type only once, so do it with the proper value, not copying it.
+ if ( sAttName in oSkipAttributes )
+ continue ;
+
+ var sAttValue = oSource.getAttribute( sAttName, 2 ) ;
+ if ( sAttValue == null )
+ sAttValue = oAttribute.nodeValue ;
+
+ oDest.setAttribute( sAttName, sAttValue, 0 ) ; // 0 : Case Insensitive
+ }
+ }
+ // The style:
+ if ( oSource.style.cssText !== '' )
+ oDest.style.cssText = oSource.style.cssText ;
+}
+
+/**
+* Replaces a tag with another one, keeping its contents:
+* for example TD --> TH, and TH --> TD.
+* input: the original node, and the new tag name
+* http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-renameNode
+*/
+function RenameNode( oNode , newTag )
+{
+ // TODO: if the browser natively supports document.renameNode call it.
+ // does any browser currently support it in order to test?
+
+ // Only rename element nodes.
+ if ( oNode.nodeType != 1 )
+ return null ;
+
+ // If it's already correct exit here.
+ if ( oNode.nodeName == newTag )
+ return oNode ;
+
+ var oDoc = oNode.ownerDocument ;
+ // Create the new node
+ var newNode = oDoc.createElement( newTag ) ;
+
+ // Copy all attributes
+ CopyAttributes( oNode, newNode, {} ) ;
+
+ // Move children to the new node
+ FCKDomTools.MoveChildren( oNode, newNode ) ;
+
+ // Finally replace the node and return the new one
+ oNode.parentNode.replaceChild( newNode, oNode ) ;
+
+ return newNode ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/locked.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/locked.gif
new file mode 100644
index 0000000..ea07870
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/locked.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/reset.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/reset.gif
new file mode 100644
index 0000000..5e9a2fc
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/reset.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/unlocked.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/unlocked.gif
new file mode 100644
index 0000000..801e423
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/unlocked.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about.html
new file mode 100644
index 0000000..2d0a50c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * "About" dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+
+window.parent.AddTab( 'About', FCKLang.DlgAboutAboutTab ) ;
+window.parent.AddTab( 'License', FCKLang.DlgAboutLicenseTab ) ;
+window.parent.AddTab( 'BrowserInfo', FCKLang.DlgAboutBrowserInfoTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+ ShowE('divAbout', ( tabCode == 'About' ) ) ;
+ ShowE('divLicense', ( tabCode == 'License' ) ) ;
+ ShowE('divInfo' , ( tabCode == 'BrowserInfo' ) ) ;
+}
+
+function SendEMail()
+{
+ var eMail = 'mailto:' ;
+ eMail += 'fredck' ;
+ eMail += '@' ;
+ eMail += 'fckeditor' ;
+ eMail += '.' ;
+ eMail += 'net' ;
+
+ window.location = eMail ;
+}
+
+window.onload = function()
+{
+ // Translate the dialog box texts.
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ window.parent.SetAutoSize( true ) ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <div id="divAbout">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="height: 100%">
+ <tr>
+ <td colspan="2">
+ <img alt="" src="fck_about/logo_fckeditor.gif" width="236" height="41" align="left" />
+ <table width="80" border="0" cellspacing="0" cellpadding="5" bgcolor="#ffffff" align="right">
+ <tr>
+ <td align="center" nowrap="nowrap" style="border-right: #000000 1px solid; border-top: #000000 1px solid;
+ border-left: #000000 1px solid; border-bottom: #000000 1px solid">
+ <span fcklang="DlgAboutVersion">version</span>
+ <br />
+ <b>2.6.4</b><br />
+ Build 21629</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="height: 100%">
+ <td align="center" valign="middle">
+ <span style="font-size: 14px" dir="ltr">
+ <b><a href="http://www.fckeditor.net/?about" target="_blank" title="Visit the FCKeditor web site">
+ Support <b>Open Source</b> Software</a></b> </span>
+ <div style="padding-top:15px">
+ <img alt="" src="fck_about/logo_fredck.gif" width="87" height="36" />
+ </div>
+ </td>
+ <td align="center" nowrap="nowrap" valign="middle">
+ <div>
+ <div style="margin-bottom:5px" dir="ltr">Selected Sponsor</div>
+ <a href="http://www.spellchecker.net/fckeditor/" target="_blank"><img alt="Selected Sponsor" border="0" src="fck_about/sponsors/spellchecker_net.gif" width="75" height="75" /></a>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="100%" nowrap="nowrap">
+ <span fcklang="DlgAboutInfo">For further information go to</span> <a href="http://www.fckeditor.net/?About"
+ target="_blank">http://www.fckeditor.net/</a>.
+ <br />
+ Copyright &copy; 2003-2009 <a href="#" onclick="SendEMail();">Frederico Caldeira Knabben</a>
+ </td>
+ <td align="center">
+ <a href="http://www.fckeditor.net/sponsors/apply" target="_blank">Become a Sponsor</a>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divLicense" style="display: none">
+ <p>
+ Licensed under the terms of any of the following licenses at your
+ choice:
+ </p>
+ <ul>
+ <li style="margin-bottom:15px">
+ <b>GNU General Public License</b> Version 2 or later (the "GPL")<br />
+ <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">http://www.gnu.org/licenses/gpl.html</a>
+ </li>
+ <li style="margin-bottom:15px">
+ <b>GNU Lesser General Public License</b> Version 2.1 or later (the "LGPL")<br />
+ <a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>
+ </li>
+ <li>
+ <b>Mozilla Public License</b> Version 1.1 or later (the "MPL")<br />
+ <a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>
+ </li>
+ </ul>
+ </div>
+ <div id="divInfo" style="display: none" dir="ltr">
+ <table align="center" width="80%" border="0">
+ <tr>
+ <td>
+ <script type="text/javascript">
+<!--
+document.write( '<b>User Agent<\/b><br />' + window.navigator.userAgent + '<br /><br />' ) ;
+document.write( '<b>Browser<\/b><br />' + window.navigator.appName + ' ' + window.navigator.appVersion + '<br /><br />' ) ;
+document.write( '<b>Platform<\/b><br />' + window.navigator.platform + '<br /><br />' ) ;
+
+var sUserLang = '?' ;
+
+if ( window.navigator.language )
+ sUserLang = window.navigator.language.toLowerCase() ;
+else if ( window.navigator.userLanguage )
+ sUserLang = window.navigator.userLanguage.toLowerCase() ;
+
+document.write( '<b>User Language<\/b><br />' + sUserLang ) ;
+//-->
+ </script>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fckeditor.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fckeditor.gif
new file mode 100644
index 0000000..b7d6bc6
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fckeditor.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fredck.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fredck.gif
new file mode 100644
index 0000000..3108dd9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fredck.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
new file mode 100644
index 0000000..f8586f9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_anchor.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_anchor.html
new file mode 100644
index 0000000..235535b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_anchor.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Anchor dialog window.
+-->
+<html>
+ <head>
+ <title>Anchor Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+var FCK = oEditor.FCK ;
+var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
+var FCKTools = oEditor.FCKTools ;
+var FCKRegexLib = oEditor.FCKRegexLib ;
+
+var oDOM = FCK.EditorDocument ;
+
+var oFakeImage = dialog.Selection.GetSelectedElement() ;
+
+var oAnchor ;
+
+if ( oFakeImage )
+{
+ if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
+ oAnchor = FCK.GetRealElement( oFakeImage ) ;
+ else
+ oFakeImage = null ;
+}
+
+//Search for a real anchor
+if ( !oFakeImage )
+{
+ oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+ if ( oAnchor )
+ FCK.Selection.SelectNode( oAnchor ) ;
+}
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oAnchor )
+ GetE('txtName').value = oAnchor.name ;
+ else
+ oAnchor = null ;
+
+ window.parent.SetOkButton( true ) ;
+ window.parent.SetAutoSize( true ) ;
+
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ var sNewName = GetE('txtName').value ;
+
+ // Remove any illegal character in a name attribute:
+ // A name should start with a letter, but the validator passes anyway.
+ sNewName = sNewName.replace( /[^\w-_\.:]/g, '_' ) ;
+
+ if ( sNewName.length == 0 )
+ {
+ // Remove the anchor if the user leaves the name blank
+ if ( oAnchor )
+ {
+ // Removes the current anchor from the document using the new command
+ FCK.Commands.GetCommand( 'AnchorDelete' ).Execute() ;
+ return true ;
+ }
+
+ alert( oEditor.FCKLang.DlgAnchorErrorName ) ;
+ return false ;
+ }
+
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ if ( oAnchor ) // Modifying an existent anchor.
+ {
+ ReadjustLinksToAnchor( oAnchor.name, sNewName );
+
+ // Buggy explorer, bad bad browser. http://alt-tag.com/blog/archives/2006/02/ie-dom-bugs/
+ // Instead of just replacing the .name for the existing anchor (in order to preserve the content), we must remove the .name
+ // and assign .name, although it won't appear until it's specially processed in fckxhtml.js
+
+ // We remove the previous name
+ oAnchor.removeAttribute( 'name' ) ;
+ // Now we set it, but later we must process it specially
+ oAnchor.name = sNewName ;
+
+ return true ;
+ }
+
+ // Create a new anchor preserving the current selection
+ var aNewAnchors = oEditor.FCK.CreateLink( '#' ) ;
+
+ if ( aNewAnchors.length == 0 )
+ aNewAnchors.push( oEditor.FCK.InsertElement( 'a' ) ) ;
+ else
+ {
+ // Remove the fake href
+ for ( var i = 0 ; i < aNewAnchors.length ; i++ )
+ aNewAnchors[i].removeAttribute( 'href' ) ;
+ }
+
+ // More than one anchors may have been created, so interact through all of them (see #220).
+ for ( var i = 0 ; i < aNewAnchors.length ; i++ )
+ {
+ oAnchor = aNewAnchors[i] ;
+
+ // Set the name
+ if ( FCKBrowserInfo.IsIE )
+ {
+ // Setting anchor names directly in IE will trash the HTML code stored
+ // in FCKTempBin after undos. See #2263.
+ var replaceAnchor = oEditor.FCK.EditorDocument.createElement( '<a name="' +
+ FCKTools.HTMLEncode( sNewName ).replace( '"', '&quot;' ) + '">' ) ;
+ oEditor.FCKDomTools.MoveChildren( oAnchor, replaceAnchor ) ;
+ oAnchor.parentNode.replaceChild( replaceAnchor, oAnchor ) ;
+ oAnchor = replaceAnchor ;
+ }
+ else
+ oAnchor.name = sNewName ;
+
+ // IE does require special processing to show the Anchor's image
+ // Opera doesn't allow to select empty anchors
+ if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
+ {
+ if ( oAnchor.innerHTML != '' )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ oAnchor.className += ' FCK__AnchorC' ;
+ }
+ else
+ {
+ // Create a fake image for both IE and Opera
+ var oImg = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oAnchor.cloneNode(true) ) ;
+ oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
+
+ oAnchor.parentNode.insertBefore( oImg, oAnchor ) ;
+ oAnchor.parentNode.removeChild( oAnchor ) ;
+ }
+
+ }
+ }
+
+ return true ;
+}
+
+// Checks all the links in the current page pointing to the current name and changes them to the new name
+function ReadjustLinksToAnchor( sCurrent, sNew )
+{
+ var oDoc = FCK.EditorDocument ;
+
+ var aLinks = oDoc.getElementsByTagName( 'A' ) ;
+
+ var sReference = '#' + sCurrent ;
+ // The url of the document, so we check absolute and partial references.
+ var sFullReference = oDoc.location.href.replace( /(#.*$)/, '') ;
+ sFullReference += sReference ;
+
+ var oLink ;
+ var i = aLinks.length - 1 ;
+ while ( i >= 0 && ( oLink = aLinks[i--] ) )
+ {
+ var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
+ if ( sHRef == null )
+ sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
+
+ if ( sHRef == sReference || sHRef == sFullReference )
+ {
+ oLink.href = '#' + sNew ;
+ SetAttribute( oLink, '_fcksavedurl', '#' + sNew ) ;
+ }
+ }
+}
+
+ </script>
+ </head>
+ <body style="overflow: hidden">
+ <table height="100%" width="100%">
+ <tr>
+ <td align="center">
+ <table border="0" cellpadding="0" cellspacing="0" width="80%">
+ <tr>
+ <td>
+ <span fckLang="DlgAnchorName">Anchor Name</span><BR>
+ <input id="txtName" style="WIDTH: 100%" type="text">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_button.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_button.html
new file mode 100644
index 0000000..6dc21b4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_button.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Button dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Button Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oActiveEl && oActiveEl.tagName.toUpperCase() == "INPUT" && ( oActiveEl.type == "button" || oActiveEl.type == "submit" || oActiveEl.type == "reset" ) )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtValue').value = oActiveEl.value ;
+ GetE('txtType').value = oActiveEl.type ;
+ }
+ else
+ oActiveEl = null ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: GetE('txtType').value } ) ;
+
+ SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+ return true ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table width="100%" style="height: 100%">
+ <tr>
+ <td align="center">
+ <table border="0" cellpadding="0" cellspacing="0" width="80%">
+ <tr>
+ <td colspan="">
+ <span fcklang="DlgCheckboxName">Name</span><br />
+ <input type="text" size="20" id="txtName" style="width: 100%" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgButtonText">Text (Value)</span><br />
+ <input type="text" id="txtValue" style="width: 100%" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgButtonType">Type</span><br />
+ <select id="txtType">
+ <option fcklang="DlgButtonTypeBtn" value="button" selected="selected">Button</option>
+ <option fcklang="DlgButtonTypeSbm" value="submit">Submit</option>
+ <option fcklang="DlgButtonTypeRst" value="reset">Reset</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_checkbox.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_checkbox.html
new file mode 100644
index 0000000..9a5d43c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_checkbox.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Checkbox dialog window.
+-->
+<html>
+ <head>
+ <title>Checkbox Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'checkbox' )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtValue').value = oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
+ GetE('txtSelected').checked = oActiveEl.checked ;
+ }
+ else
+ oActiveEl = null ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'checkbox' } ) ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ oActiveEl.value = GetE('txtValue').value ;
+ else
+ SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+ var bIsChecked = GetE('txtSelected').checked ;
+ SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ; // For Firefox
+ oActiveEl.checked = bIsChecked ;
+
+ return true ;
+}
+
+ </script>
+ </head>
+ <body style="OVERFLOW: hidden" scroll="no">
+ <table height="100%" width="100%">
+ <tr>
+ <td align="center">
+ <table border="0" cellpadding="0" cellspacing="0" width="80%">
+ <tr>
+ <td>
+ <span fckLang="DlgCheckboxName">Name</span><br>
+ <input type="text" size="20" id="txtName" style="WIDTH: 100%">
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fckLang="DlgCheckboxValue">Value</span><br>
+ <input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+ </td>
+ </tr>
+ <tr>
+ <td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_colorselector.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_colorselector.html
new file mode 100644
index 0000000..a6eac5c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_colorselector.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Color Selection dialog window.
+-->
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <style TYPE="text/css">
+ #ColorTable { cursor: pointer ; cursor: hand ; }
+ #hicolor { height: 74px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+ #hicolortext { width: 75px ; text-align: right ; margin-bottom: 7px ; }
+ #selhicolor { height: 20px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+ #selcolor { width: 75px ; height: 20px ; margin-top: 0px ; margin-bottom: 7px ; }
+ #btnClear { width: 75px ; height: 22px ; margin-bottom: 6px ; }
+ .ColorCell { height: 15px ; width: 15px ; }
+ </style>
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+function OnLoad()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ CreateColorTable() ;
+
+ window.parent.SetOkButton( true ) ;
+ window.parent.SetAutoSize( true ) ;
+}
+
+function CreateColorTable()
+{
+ // Get the target table.
+ var oTable = document.getElementById('ColorTable') ;
+
+ // Create the base colors array.
+ var aColors = ['00','33','66','99','cc','ff'] ;
+
+ // This function combines two ranges of three values from the color array into a row.
+ function AppendColorRow( rangeA, rangeB )
+ {
+ for ( var i = rangeA ; i < rangeA + 3 ; i++ )
+ {
+ var oRow = oTable.insertRow(-1) ;
+
+ for ( var j = rangeB ; j < rangeB + 3 ; j++ )
+ {
+ for ( var n = 0 ; n < 6 ; n++ )
+ {
+ AppendColorCell( oRow, '#' + aColors[j] + aColors[n] + aColors[i] ) ;
+ }
+ }
+ }
+ }
+
+ // This function create a single color cell in the color table.
+ function AppendColorCell( targetRow, color )
+ {
+ var oCell = targetRow.insertCell(-1) ;
+ oCell.className = 'ColorCell' ;
+ oCell.bgColor = color ;
+
+ oCell.onmouseover = function()
+ {
+ document.getElementById('hicolor').style.backgroundColor = this.bgColor ;
+ document.getElementById('hicolortext').innerHTML = this.bgColor ;
+ }
+
+ oCell.onclick = function()
+ {
+ document.getElementById('selhicolor').style.backgroundColor = this.bgColor ;
+ document.getElementById('selcolor').value = this.bgColor ;
+ }
+ }
+
+ AppendColorRow( 0, 0 ) ;
+ AppendColorRow( 3, 0 ) ;
+ AppendColorRow( 0, 3 ) ;
+ AppendColorRow( 3, 3 ) ;
+
+ // Create the last row.
+ var oRow = oTable.insertRow(-1) ;
+
+ // Create the gray scale colors cells.
+ for ( var n = 0 ; n < 6 ; n++ )
+ {
+ AppendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ;
+ }
+
+ // Fill the row with black cells.
+ for ( var i = 0 ; i < 12 ; i++ )
+ {
+ AppendColorCell( oRow, '#000000' ) ;
+ }
+}
+
+function Clear()
+{
+ document.getElementById('selhicolor').style.backgroundColor = '' ;
+ document.getElementById('selcolor').value = '' ;
+}
+
+function ClearActual()
+{
+ document.getElementById('hicolor').style.backgroundColor = '' ;
+ document.getElementById('hicolortext').innerHTML = '&nbsp;' ;
+}
+
+function UpdateColor()
+{
+ try { document.getElementById('selhicolor').style.backgroundColor = document.getElementById('selcolor').value ; }
+ catch (e) { Clear() ; }
+}
+
+function Ok()
+{
+ if ( typeof(window.parent.Args().CustomValue) == 'function' )
+ window.parent.Args().CustomValue( document.getElementById('selcolor').value ) ;
+
+ return true ;
+}
+ </script>
+ </head>
+ <body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+ <tr>
+ <td align="center" valign="middle">
+ <table border="0" cellspacing="5" cellpadding="0" width="100%">
+ <tr>
+ <td valign="top" align="center" nowrap width="100%">
+ <table id="ColorTable" border="0" cellspacing="0" cellpadding="0" width="270" onmouseout="ClearActual();">
+ </table>
+ </td>
+ <td valign="top" align="left" nowrap>
+ <span fckLang="DlgColorHighlight">Highlight</span>
+ <div id="hicolor"></div>
+ <div id="hicolortext">&nbsp;</div>
+ <span fckLang="DlgColorSelected">Selected</span>
+ <div id="selhicolor"></div>
+ <input id="selcolor" type="text" maxlength="20" onchange="UpdateColor();">
+ <br>
+ <input id="btnClear" type="button" fckLang="DlgColorBtnClear" value="Clear" onclick="Clear();" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_div.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_div.html
new file mode 100644
index 0000000..c5496e1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_div.html
@@ -0,0 +1,396 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Form dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+var FCKLang = oEditor.FCKLang ;
+var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
+var FCKStyles = oEditor.FCKStyles ;
+var FCKElementPath = oEditor.FCKElementPath ;
+var FCKDomRange = oEditor.FCKDomRange ;
+var FCKDomTools = oEditor.FCKDomTools ;
+var FCKDomRangeIterator = oEditor.FCKDomRangeIterator ;
+var FCKListsLib = oEditor.FCKListsLib ;
+var AlwaysCreate = dialog.Args().CustomValue ;
+
+String.prototype.IEquals = function()
+{
+ var thisUpper = this.toUpperCase() ;
+
+ var aArgs = arguments ;
+
+ // The arguments could also be a single array.
+ if ( aArgs.length == 1 && aArgs[0].pop )
+ aArgs = aArgs[0] ;
+
+ for ( var i = 0 ; i < aArgs.length ; i++ )
+ {
+ if ( thisUpper == aArgs[i].toUpperCase() )
+ return true ;
+ }
+ return false ;
+}
+
+var CurrentContainers = [] ;
+if ( !AlwaysCreate )
+{
+ dialog.Selection.EnsureSelection() ;
+ CurrentContainers = FCKDomTools.GetSelectedDivContainers() ;
+}
+
+// Add some tabs
+dialog.AddTab( 'General', FCKLang.DlgDivGeneralTab );
+dialog.AddTab( 'Advanced', FCKLang.DlgDivAdvancedTab ) ;
+
+function AddStyleOption( styleName )
+{
+ var el = GetE( 'selStyle' ) ;
+ var opt = document.createElement( 'option' ) ;
+ opt.text = opt.value = styleName ;
+
+ if ( FCKBrowserInfo.IsIE )
+ el.add( opt ) ;
+ else
+ el.add( opt, null ) ;
+}
+
+function OnDialogTabChange( tabCode )
+{
+ ShowE( 'divGeneral', tabCode == 'General' ) ;
+ ShowE( 'divAdvanced', tabCode == 'Advanced' ) ;
+ dialog.SetAutoSize( true ) ;
+}
+
+function GetNearestAncestorDirection( node )
+{
+ var dir = 'ltr' ; // HTML default.
+ while ( ( node = node.parentNode ) )
+ {
+ if ( node.dir )
+ dir = node.dir ;
+ }
+ return dir ;
+}
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+
+ // Popuplate the style menu
+ var styles = FCKStyles.GetStyles() ;
+ var selectableStyles = {} ;
+ for ( var i in styles )
+ {
+ if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )
+ selectableStyles[i] = styles[i] ;
+ }
+ if ( CurrentContainers.length <= 1 )
+ {
+ var target = CurrentContainers[0] ;
+ var match = null ;
+ for ( var i in selectableStyles )
+ {
+ if ( target && styles[i].CheckElementRemovable( target, true ) )
+ match = i ;
+ }
+ if ( !match )
+ AddStyleOption( "" ) ;
+ for ( var i in selectableStyles )
+ AddStyleOption( i ) ;
+ if ( match )
+ GetE( 'selStyle' ).value = match ;
+
+ // Set the value for other inputs
+ if ( target )
+ {
+ GetE( 'txtClass' ).value = target.className ;
+ GetE( 'txtId' ).value = target.id ;
+ GetE( 'txtLang' ).value = target.lang ;
+ GetE( 'txtInlineStyle').value = target.style.cssText ;
+ GetE( 'txtTitle' ).value = target.title ;
+ GetE( 'selLangDir').value = target.dir || GetNearestAncestorDirection( target ) ;
+ }
+ }
+ else
+ {
+ GetE( 'txtId' ).disabled = true ;
+ AddStyleOption( "" ) ;
+ for ( var i in selectableStyles )
+ AddStyleOption( i ) ;
+ }
+}
+
+function CreateDiv()
+{
+ var newBlocks = [] ;
+ var range = new FCKDomRange( FCK.EditorWindow ) ;
+ range.MoveToSelection() ;
+
+ var bookmark = range.CreateBookmark() ;
+
+ // Kludge for #1592: if the bookmark nodes are in the beginning of
+ // $tagName, then move them to the nearest block element in the
+ // $tagName.
+ if ( FCKBrowserInfo.IsIE )
+ {
+ var bStart = range.GetBookmarkNode( bookmark, true ) ;
+ var bEnd = range.GetBookmarkNode( bookmark, false ) ;
+
+ var cursor ;
+
+ if ( bStart
+ && bStart.parentNode.nodeName.IEquals( 'div' )
+ && !bStart.previousSibling )
+ {
+ cursor = bStart ;
+ while ( ( cursor = cursor.nextSibling ) )
+ {
+ if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+ FCKDomTools.MoveNode( bStart, cursor, true ) ;
+ }
+ }
+
+ if ( bEnd
+ && bEnd.parentNode.nodeName.IEquals( 'div' )
+ && !bEnd.previousSibling )
+ {
+ cursor = bEnd ;
+ while ( ( cursor = cursor.nextSibling ) )
+ {
+ if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+ {
+ if ( cursor.firstChild == bStart )
+ FCKDomTools.InsertAfterNode( bStart, bEnd ) ;
+ else
+ FCKDomTools.MoveNode( bEnd, cursor, true ) ;
+ }
+ }
+ }
+ }
+
+ var iterator = new FCKDomRangeIterator( range ) ;
+ var block ;
+
+ var paragraphs = [] ;
+ while ( ( block = iterator.GetNextParagraph() ) )
+ paragraphs.push( block ) ;
+
+ // Make sure all paragraphs have the same parent.
+ var commonParent = paragraphs[0].parentNode ;
+ var tmp = [] ;
+ for ( var i = 0 ; i < paragraphs.length ; i++ )
+ {
+ block = paragraphs[i] ;
+ commonParent = FCKDomTools.GetCommonParents( block.parentNode, commonParent ).pop() ;
+ }
+
+ // The common parent must not be the following tags: table, tbody, tr, ol, ul.
+ while ( commonParent.nodeName.IEquals( 'table', 'tbody', 'tr', 'ol', 'ul' ) )
+ commonParent = commonParent.parentNode ;
+
+ // Reconstruct the block list to be processed such that all resulting blocks
+ // satisfy parentNode == commonParent.
+ var lastBlock = null ;
+ while ( paragraphs.length > 0 )
+ {
+ block = paragraphs.shift() ;
+ while ( block.parentNode != commonParent )
+ block = block.parentNode ;
+ if ( block != lastBlock )
+ tmp.push( block ) ;
+ lastBlock = block ;
+ }
+ paragraphs = tmp ;
+
+ // Split the paragraphs into groups depending on their BlockLimit element.
+ var groups = [] ;
+ var lastBlockLimit = null ;
+ for ( var i = 0 ; i < paragraphs.length ; i++ )
+ {
+ block = paragraphs[i] ;
+ var elementPath = new FCKElementPath( block ) ;
+ if ( elementPath.BlockLimit != lastBlockLimit )
+ {
+ groups.push( [] ) ;
+ lastBlockLimit = elementPath.BlockLimit ;
+ }
+ groups[groups.length - 1].push( block ) ;
+ }
+
+ // Create a DIV container for each group.
+ for ( var i = 0 ; i < groups.length ; i++ )
+ {
+ var divNode = FCK.EditorDocument.createElement( 'div' ) ;
+ groups[i][0].parentNode.insertBefore( divNode, groups[i][0] ) ;
+ for ( var j = 0 ; j < groups[i].length ; j++ )
+ FCKDomTools.MoveNode( groups[i][j], divNode ) ;
+ newBlocks.push( divNode ) ;
+ }
+
+ range.MoveToBookmark( bookmark ) ;
+ range.Select() ;
+
+ FCK.Focus() ;
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+
+ return newBlocks ;
+}
+
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ if ( CurrentContainers.length < 1 )
+ CurrentContainers = CreateDiv();
+
+ var setValue = function( attrName, inputName )
+ {
+ var val = GetE( inputName ).value ;
+ for ( var i = 0 ; i < CurrentContainers.length ; i++ )
+ {
+ if ( val == '' )
+ CurrentContainers[i].removeAttribute( attrName ) ;
+ else
+ CurrentContainers[i].setAttribute( attrName, val ) ;
+ }
+ }
+
+ // Apply modifications to the DIV container according to dialog inputs.
+ if ( CurrentContainers.length == 1 )
+ {
+ setValue( 'class', 'txtClass' ) ;
+ setValue( 'id', 'txtId' ) ;
+ }
+ setValue( 'lang', 'txtLang' ) ;
+ if ( FCKBrowserInfo.IsIE )
+ {
+ for ( var i = 0 ; i < CurrentContainers.length ; i++ )
+ CurrentContainers[i].style.cssText = GetE( 'txtInlineStyle' ).value ;
+ }
+ else
+ setValue( 'style', 'txtInlineStyle' ) ;
+ setValue( 'title', 'txtTitle' ) ;
+ for ( var i = 0 ; i < CurrentContainers.length ; i++ )
+ {
+ var dir = GetE( 'selLangDir' ).value ;
+ var styleName = GetE( 'selStyle' ).value ;
+ if ( GetNearestAncestorDirection( CurrentContainers[i] ) != dir )
+ CurrentContainers[i].dir = dir ;
+ else
+ CurrentContainers[i].removeAttribute( 'dir' ) ;
+
+ if ( styleName )
+ FCKStyles.GetStyle( styleName ).ApplyToObject( CurrentContainers[i] ) ;
+ }
+
+ return true ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <div id="divGeneral">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <colgroup span="2">
+ <col width="49%" />
+ <col width="2%" />
+ <col width="49%" />
+ </colgroup>
+ <tr>
+ <td>
+ <span fcklang="DlgDivStyle">Style</span><br />
+ <select id="selStyle" style="width: 100%;">
+ </select>
+ </td>
+ <td>&nbsp;</td>
+ <td>
+ <span fcklang="DlgGenClass">Stylesheet Classes</span><br />
+ <input id="txtClass" style="width: 100%" type="text" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divAdvanced" style="display: none">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <colgroup span="2">
+ <col width="49%" />
+ <col width="2%" />
+ <col width="49%" />
+ </colgroup>
+ <tr>
+ <td>
+ <span fcklang="DlgGenId">Id</span><br />
+ <input style="width: 100%" type="text" id="txtId" />
+ </td>
+ <td>&nbsp;</td>
+ <td>
+ <span fcklang="DlgGenLangCode">Language Code</span><br />
+ <input style="width: 100%" type="text" id="txtLang" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <span fcklang="DlgDivInlineStyle">Inline Style</span><br />
+ <input style="width: 100%" type="text" id="txtInlineStyle" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <span fcklang="DlgGenTitle">Advisory Title</span><br />
+ <input style="width: 100%" type="text" id="txtTitle" />
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgGenLangDir">Language Direction</span><br />
+ <select id="selLangDir">
+ <option fcklang="DlgGenLangDirLtr" value="ltr">Left to Right (LTR)
+ <option fcklang="DlgGenLangDirRtl" value="rtl">Right to Left (RTL)
+ </select>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops.html
new file mode 100644
index 0000000..e1875d7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops.html
@@ -0,0 +1,600 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+var FCKLang = oEditor.FCKLang ;
+var FCKConfig = oEditor.FCKConfig ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'General' , FCKLang.DlgDocGeneralTab ) ;
+window.parent.AddTab( 'Background' , FCKLang.DlgDocBackTab ) ;
+window.parent.AddTab( 'Colors' , FCKLang.DlgDocColorsTab ) ;
+window.parent.AddTab( 'Meta' , FCKLang.DlgDocMetaTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+ ShowE( 'divGeneral' , ( tabCode == 'General' ) ) ;
+ ShowE( 'divBackground' , ( tabCode == 'Background' ) ) ;
+ ShowE( 'divColors' , ( tabCode == 'Colors' ) ) ;
+ ShowE( 'divMeta' , ( tabCode == 'Meta' ) ) ;
+
+ ShowE( 'ePreview' , ( tabCode == 'Background' || tabCode == 'Colors' ) ) ;
+}
+
+//#### Get Base elements from the document: BEGIN
+
+// The HTML element of the document.
+var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+// The HEAD element of the document.
+var oHead = oHTML.getElementsByTagName('head')[0] ;
+
+var oBody = FCK.EditorDocument.body ;
+
+// This object contains all META tags defined in the document.
+var oMetaTags = new Object() ;
+
+// Get all META tags defined in the document.
+AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('meta') ) ;
+AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('fck:meta') ) ;
+
+function AppendMetaCollection( targetObject, metaCollection )
+{
+ // Loop throw all METAs and put it in the HashTable.
+ for ( var i = 0 ; i < metaCollection.length ; i++ )
+ {
+ // Try to get the "name" attribute.
+ var sName = GetAttribute( metaCollection[i], 'name', GetAttribute( metaCollection[i], '___fcktoreplace:name', '' ) ) ;
+
+ // If no "name", try with the "http-equiv" attribute.
+ if ( sName.length == 0 )
+ {
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ // Get the http-equiv value from the outerHTML.
+ var oHttpEquivMatch = metaCollection[i].outerHTML.match( oEditor.FCKRegexLib.MetaHttpEquiv ) ;
+ if ( oHttpEquivMatch )
+ sName = oHttpEquivMatch[1] ;
+ }
+ else
+ sName = GetAttribute( metaCollection[i], 'http-equiv', '' ) ;
+ }
+
+ if ( sName.length > 0 )
+ targetObject[ sName.toLowerCase() ] = metaCollection[i] ;
+ }
+}
+
+//#### END
+
+// Set a META tag in the document.
+function SetMetadata( name, content, isHttp )
+{
+ if ( content.length == 0 )
+ {
+ RemoveMetadata( name ) ;
+ return ;
+ }
+
+ var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+ if ( !oMeta )
+ {
+ oMeta = oHead.appendChild( FCK.EditorDocument.createElement('META') ) ;
+
+ if ( isHttp )
+ SetAttribute( oMeta, 'http-equiv', name ) ;
+ else
+ {
+ // On IE, it is not possible to set the "name" attribute of the META tag.
+ // So a temporary attribute is used and it is replaced when getting the
+ // editor's HTML/XHTML value. This is sad, I know :(
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ SetAttribute( oMeta, '___fcktoreplace:name', name ) ;
+ else
+ SetAttribute( oMeta, 'name', name ) ;
+ }
+
+ oMetaTags[ name.toLowerCase() ] = oMeta ;
+ }
+
+ SetAttribute( oMeta, 'content', content ) ;
+// oMeta.content = content ;
+}
+
+function RemoveMetadata( name )
+{
+ var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+ if ( oMeta && oMeta != null )
+ {
+ oMeta.parentNode.removeChild( oMeta ) ;
+ oMetaTags[ name.toLowerCase() ] = null ;
+ }
+}
+
+function GetMetadata( name )
+{
+ var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+ if ( oMeta && oMeta != null )
+ return oMeta.getAttribute( 'content', 2 ) ;
+ else
+ return '' ;
+}
+
+window.onload = function ()
+{
+ // Show/Hide the "Browse Server" button.
+ GetE('tdBrowse').style.display = oEditor.FCKConfig.ImageBrowser ? "" : "none";
+
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+ FillFields() ;
+
+ UpdatePreview() ;
+
+ // Show the "Ok" button.
+ window.parent.SetOkButton( true ) ;
+
+ window.parent.SetAutoSize( true ) ;
+}
+
+function FillFields()
+{
+ // ### General Info
+ GetE('txtPageTitle').value = FCK.EditorDocument.title ;
+
+ GetE('selDirection').value = GetAttribute( oHTML, 'dir', '' ) ;
+ GetE('txtLang').value = GetAttribute( oHTML, 'xml:lang', GetAttribute( oHTML, 'lang', '' ) ) ; // "xml:lang" takes precedence to "lang".
+
+ // Character Set Encoding.
+// if ( oEditor.FCKBrowserInfo.IsIE )
+// var sCharSet = FCK.EditorDocument.charset ;
+// else
+ var sCharSet = GetMetadata( 'Content-Type' ) ;
+
+ if ( sCharSet != null && sCharSet.length > 0 )
+ {
+// if ( !oEditor.FCKBrowserInfo.IsIE )
+ sCharSet = sCharSet.match( /[^=]*$/ ) ;
+
+ GetE('selCharSet').value = sCharSet ;
+
+ if ( GetE('selCharSet').selectedIndex == -1 )
+ {
+ GetE('selCharSet').value = '...' ;
+ GetE('txtCustomCharSet').value = sCharSet ;
+
+ CheckOther( GetE('selCharSet'), 'txtCustomCharSet' ) ;
+ }
+ }
+
+ // Document Type.
+ if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+ {
+ GetE('selDocType').value = FCK.DocTypeDeclaration ;
+
+ if ( GetE('selDocType').selectedIndex == -1 )
+ {
+ GetE('selDocType').value = '...' ;
+ GetE('txtDocType').value = FCK.DocTypeDeclaration ;
+
+ CheckOther( GetE('selDocType'), 'txtDocType' ) ;
+ }
+ }
+
+ // Document Type.
+ GetE('chkIncXHTMLDecl').checked = ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 ) ;
+
+ // ### Background
+ GetE('txtBackColor').value = GetAttribute( oBody, 'bgColor' , '' ) ;
+ GetE('txtBackImage').value = GetAttribute( oBody, 'background' , '' ) ;
+ GetE('chkBackNoScroll').checked = ( GetAttribute( oBody, 'bgProperties', '' ).toLowerCase() == 'fixed' ) ;
+
+ // ### Colors
+ GetE('txtColorText').value = GetAttribute( oBody, 'text' , '' ) ;
+ GetE('txtColorLink').value = GetAttribute( oBody, 'link' , '' ) ;
+ GetE('txtColorVisited').value = GetAttribute( oBody, 'vLink' , '' ) ;
+ GetE('txtColorActive').value = GetAttribute( oBody, 'aLink' , '' ) ;
+
+ // ### Margins
+ GetE('txtMarginTop').value = GetAttribute( oBody, 'topMargin' , '' ) ;
+ GetE('txtMarginLeft').value = GetAttribute( oBody, 'leftMargin' , '' ) ;
+ GetE('txtMarginRight').value = GetAttribute( oBody, 'rightMargin' , '' ) ;
+ GetE('txtMarginBottom').value = GetAttribute( oBody, 'bottomMargin' , '' ) ;
+
+ // ### Meta Data
+ GetE('txtMetaKeywords').value = GetMetadata( 'keywords' ) ;
+ GetE('txtMetaDescription').value = GetMetadata( 'description' ) ;
+ GetE('txtMetaAuthor').value = GetMetadata( 'author' ) ;
+ GetE('txtMetaCopyright').value = GetMetadata( 'copyright' ) ;
+}
+
+// Called when the "Ok" button is clicked.
+function Ok()
+{
+ // ### General Info
+ FCK.EditorDocument.title = GetE('txtPageTitle').value ;
+
+ var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+ SetAttribute( oHTML, 'dir' , GetE('selDirection').value ) ;
+ SetAttribute( oHTML, 'lang' , GetE('txtLang').value ) ;
+ SetAttribute( oHTML, 'xml:lang' , GetE('txtLang').value ) ;
+
+ // Character Set Enconding.
+ var sCharSet = GetE('selCharSet').value ;
+ if ( sCharSet == '...' )
+ sCharSet = GetE('txtCustomCharSet').value ;
+
+ if ( sCharSet.length > 0 )
+ sCharSet = 'text/html; charset=' + sCharSet ;
+
+// if ( oEditor.FCKBrowserInfo.IsIE )
+// FCK.EditorDocument.charset = sCharSet ;
+// else
+ SetMetadata( 'Content-Type', sCharSet, true ) ;
+
+ // Document Type
+ var sDocType = GetE('selDocType').value ;
+ if ( sDocType == '...' )
+ sDocType = GetE('txtDocType').value ;
+
+ FCK.DocTypeDeclaration = sDocType ;
+
+ // XHTML Declarations.
+ if ( GetE('chkIncXHTMLDecl').checked )
+ {
+ if ( sCharSet.length == 0 )
+ sCharSet = 'utf-8' ;
+
+ FCK.XmlDeclaration = '<' + '?xml version="1.0" encoding="' + sCharSet + '"?>' ;
+
+ SetAttribute( oHTML, 'xmlns', 'http://www.w3.org/1999/xhtml' ) ;
+ }
+ else
+ {
+ FCK.XmlDeclaration = null ;
+ oHTML.removeAttribute( 'xmlns', 0 ) ;
+ }
+
+ // ### Background
+ SetAttribute( oBody, 'bgcolor' , GetE('txtBackColor').value ) ;
+ SetAttribute( oBody, 'background' , GetE('txtBackImage').value ) ;
+ SetAttribute( oBody, 'bgproperties' , GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+ // ### Colors
+ SetAttribute( oBody, 'text' , GetE('txtColorText').value ) ;
+ SetAttribute( oBody, 'link' , GetE('txtColorLink').value ) ;
+ SetAttribute( oBody, 'vlink', GetE('txtColorVisited').value ) ;
+ SetAttribute( oBody, 'alink', GetE('txtColorActive').value ) ;
+
+ // ### Margins
+ SetAttribute( oBody, 'topmargin' , GetE('txtMarginTop').value ) ;
+ SetAttribute( oBody, 'leftmargin' , GetE('txtMarginLeft').value ) ;
+ SetAttribute( oBody, 'rightmargin' , GetE('txtMarginRight').value ) ;
+ SetAttribute( oBody, 'bottommargin' , GetE('txtMarginBottom').value ) ;
+
+ // ### Meta data
+ SetMetadata( 'keywords' , GetE('txtMetaKeywords').value ) ;
+ SetMetadata( 'description' , GetE('txtMetaDescription').value ) ;
+ SetMetadata( 'author' , GetE('txtMetaAuthor').value ) ;
+ SetMetadata( 'copyright' , GetE('txtMetaCopyright').value ) ;
+
+ return true ;
+}
+
+var bPreviewIsLoaded = false ;
+var oPreviewWindow ;
+var oPreviewBody ;
+
+// Called by the Preview page when loaded.
+function OnPreviewLoad( previewWindow, previewBody )
+{
+ oPreviewWindow = previewWindow ;
+ oPreviewBody = previewBody ;
+
+ bPreviewIsLoaded = true ;
+ UpdatePreview() ;
+}
+
+function UpdatePreview()
+{
+ if ( !bPreviewIsLoaded )
+ return ;
+
+ // ### Background
+ SetAttribute( oPreviewBody, 'bgcolor' , GetE('txtBackColor').value ) ;
+ SetAttribute( oPreviewBody, 'background' , GetE('txtBackImage').value ) ;
+ SetAttribute( oPreviewBody, 'bgproperties' , GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+ // ### Colors
+ SetAttribute( oPreviewBody, 'text', GetE('txtColorText').value ) ;
+
+ oPreviewWindow.SetLinkColor( GetE('txtColorLink').value ) ;
+ oPreviewWindow.SetVisitedColor( GetE('txtColorVisited').value ) ;
+ oPreviewWindow.SetActiveColor( GetE('txtColorActive').value ) ;
+}
+
+function CheckOther( combo, txtField )
+{
+ var bNotOther = ( combo.value != '...' ) ;
+
+ GetE(txtField).style.backgroundColor = ( bNotOther ? '#cccccc' : '' ) ;
+ GetE(txtField).disabled = bNotOther ;
+}
+
+function SetColor( inputId, color )
+{
+ GetE( inputId ).value = color + '' ;
+ UpdatePreview() ;
+}
+
+function SelectBackColor( color ) { SetColor('txtBackColor', color ) ; }
+function SelectColorText( color ) { SetColor('txtColorText', color ) ; }
+function SelectColorLink( color ) { SetColor('txtColorLink', color ) ; }
+function SelectColorVisited( color ) { SetColor('txtColorVisited', color ) ; }
+function SelectColorActive( color ) { SetColor('txtColorActive', color ) ; }
+
+function SelectColor( wich )
+{
+ switch ( wich )
+ {
+ case 'Back' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectBackColor, window ) ; return ;
+ case 'ColorText' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorText, window ) ; return ;
+ case 'ColorLink' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorLink, window ) ; return ;
+ case 'ColorVisited' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorVisited, window ) ; return ;
+ case 'ColorActive' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorActive, window ) ; return ;
+ }
+}
+
+function BrowseServerBack()
+{
+ OpenFileBrowser( FCKConfig.ImageBrowserURL, FCKConfig.ImageBrowserWindowWidth, FCKConfig.ImageBrowserWindowHeight ) ;
+}
+
+function SetUrl( url )
+{
+ GetE('txtBackImage').value = url ;
+ UpdatePreview() ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
+ <tr>
+ <td valign="top" style="height: 100%">
+ <div id="divGeneral">
+ <span fcklang="DlgDocPageTitle">Page Title</span><br />
+ <input id="txtPageTitle" style="width: 100%" type="text" />
+ <br />
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td>
+ <span fcklang="DlgDocLangDir">Language Direction</span><br />
+ <select id="selDirection">
+ <option value="" selected="selected"></option>
+ <option value="ltr" fcklang="DlgDocLangDirLTR">Left to Right (LTR)</option>
+ <option value="rtl" fcklang="DlgDocLangDirRTL">Right to Left (RTL)</option>
+ </select>
+ </td>
+ <td>
+ &nbsp;&nbsp;&nbsp;</td>
+ <td>
+ <span fcklang="DlgDocLangCode">Language Code</span><br />
+ <input id="txtLang" type="text" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td style="white-space: nowrap">
+ <span fcklang="DlgDocCharSet">Character Set Encoding</span><br />
+ <select id="selCharSet" onchange="CheckOther( this, 'txtCustomCharSet' );">
+ <option value="" selected="selected"></option>
+ <option value="us-ascii">ASCII</option>
+ <option fcklang="DlgDocCharSetCE" value="iso-8859-2">Central European</option>
+ <option fcklang="DlgDocCharSetCT" value="big5">Chinese Traditional (Big5)</option>
+ <option fcklang="DlgDocCharSetCR" value="iso-8859-5">Cyrillic</option>
+ <option fcklang="DlgDocCharSetGR" value="iso-8859-7">Greek</option>
+ <option fcklang="DlgDocCharSetJP" value="iso-2022-jp">Japanese</option>
+ <option fcklang="DlgDocCharSetKR" value="iso-2022-kr">Korean</option>
+ <option fcklang="DlgDocCharSetTR" value="iso-8859-9">Turkish</option>
+ <option fcklang="DlgDocCharSetUN" value="utf-8">Unicode (UTF-8)</option>
+ <option fcklang="DlgDocCharSetWE" value="iso-8859-1">Western European</option>
+ <option fcklang="DlgOpOther" value="...">&lt;Other&gt;</option>
+ </select>
+ </td>
+ <td>
+ &nbsp;&nbsp;&nbsp;</td>
+ <td width="100%">
+ <span fcklang="DlgDocCharSetOther">Other Character Set Encoding</span><br />
+ <input id="txtCustomCharSet" style="width: 100%; background-color: #cccccc" disabled="disabled"
+ type="text" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgDocDocType">Document Type Heading</span><br />
+ <select id="selDocType" onchange="CheckOther( this, 'txtDocType' );">
+ <option value="" selected="selected"></option>
+ <option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'>HTML
+ 4.01 Transitional</option>
+ <option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'>
+ HTML 4.01 Strict</option>
+ <option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'>
+ HTML 4.01 Frameset</option>
+ <option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'>
+ XHTML 1.0 Transitional</option>
+ <option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'>
+ XHTML 1.0 Strict</option>
+ <option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'>
+ XHTML 1.0 Frameset</option>
+ <option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'>
+ XHTML 1.1</option>
+ <option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'>HTML 3.2</option>
+ <option value='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'>HTML 2.0</option>
+ <option value="..." fcklang="DlgOpOther">&lt;Other&gt;</option>
+ </select>
+ </td>
+ <td>
+ </td>
+ <td width="100%">
+ <span fcklang="DlgDocDocTypeOther">Other Document Type Heading</span><br />
+ <input id="txtDocType" style="width: 100%; background-color: #cccccc" disabled="disabled"
+ type="text" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <input id="chkIncXHTMLDecl" type="checkbox" />
+ <label for="chkIncXHTMLDecl" fcklang="DlgDocIncXHTML">
+ Include XHTML Declarations</label>
+ </div>
+ <div id="divBackground" style="display: none">
+ <span fcklang="DlgDocBgColor">Background Color</span><br />
+ <input id="txtBackColor" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" />&nbsp;<input
+ id="btnSelBackColor" onclick="SelectColor( 'Back' )" type="button" value="Select..."
+ fcklang="DlgCellBtnSelect" /><br />
+ <br />
+ <span fcklang="DlgDocBgImage">Background Image URL</span><br />
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td width="100%">
+ <input id="txtBackImage" style="width: 100%" type="text" onchange="UpdatePreview();"
+ onkeyup="UpdatePreview();" /></td>
+ <td id="tdBrowse" nowrap="nowrap">
+ &nbsp;<input id="btnBrowse" onclick="BrowseServerBack();" type="button" fcklang="DlgBtnBrowseServer"
+ value="Browse Server" /></td>
+ </tr>
+ </table>
+ <input id="chkBackNoScroll" type="checkbox" onclick="UpdatePreview();" />
+ <label for="chkBackNoScroll" fcklang="DlgDocBgNoScroll">
+ Nonscrolling Background</label>
+ </div>
+ <div id="divColors" style="display: none">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td>
+ <span fcklang="DlgDocCText">Text</span><br />
+ <input id="txtColorText" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+ onclick="SelectColor( 'ColorText' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+ <br />
+ <span fcklang="DlgDocCLink">Link</span><br />
+ <input id="txtColorLink" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+ onclick="SelectColor( 'ColorLink' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+ <br />
+ <span fcklang="DlgDocCVisited">Visited Link</span><br />
+ <input id="txtColorVisited" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+ onclick="SelectColor( 'ColorVisited' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+ <br />
+ <span fcklang="DlgDocCActive">Active Link</span><br />
+ <input id="txtColorActive" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+ onclick="SelectColor( 'ColorActive' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+ </td>
+ <td valign="middle" align="center">
+ <table cellspacing="2" cellpadding="0" border="0">
+ <tr>
+ <td>
+ <span fcklang="DlgDocMargins">Page Margins</span></td>
+ </tr>
+ <tr>
+ <td style="border: #000000 1px solid; padding: 5px">
+ <table cellpadding="0" cellspacing="0" border="0" dir="ltr">
+ <tr>
+ <td align="center" colspan="3">
+ <span fcklang="DlgDocMaTop">Top</span><br />
+ <input id="txtMarginTop" type="text" size="3" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left">
+ <span fcklang="DlgDocMaLeft">Left</span><br />
+ <input id="txtMarginLeft" type="text" size="3" />
+ </td>
+ <td>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td align="right">
+ <span fcklang="DlgDocMaRight">Right</span><br />
+ <input id="txtMarginRight" type="text" size="3" />
+ </td>
+ </tr>
+ <tr>
+ <td align="center" colspan="3">
+ <span fcklang="DlgDocMaBottom">Bottom</span><br />
+ <input id="txtMarginBottom" type="text" size="3" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divMeta" style="display: none">
+ <span fcklang="DlgDocMeIndex">Document Indexing Keywords (comma separated)</span><br />
+ <textarea id="txtMetaKeywords" style="width: 100%" rows="2" cols="20"></textarea>
+ <br />
+ <span fcklang="DlgDocMeDescr">Document Description</span><br />
+ <textarea id="txtMetaDescription" style="width: 100%" rows="4" cols="20"></textarea>
+ <br />
+ <span fcklang="DlgDocMeAuthor">Author</span><br />
+ <input id="txtMetaAuthor" style="width: 100%" type="text" /><br />
+ <br />
+ <span fcklang="DlgDocMeCopy">Copyright</span><br />
+ <input id="txtMetaCopyright" type="text" style="width: 100%" />
+ </div>
+ </td>
+ </tr>
+ <tr id="ePreview" style="display: none">
+ <td>
+ <span fcklang="DlgDocPreview">Preview</span><br />
+ <iframe id="frmPreview" src="fck_docprops/fck_document_preview.html" width="100%"
+ height="100"></iframe>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops/fck_document_preview.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops/fck_document_preview.html
new file mode 100644
index 0000000..368c839
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops/fck_document_preview.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview shown in the "Document Properties" dialog window.
+-->
+<html>
+ <head>
+ <title>Document Properties - Preview</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta name="robots" content="noindex, nofollow">
+ <script language="javascript">
+
+var eBase = parent.FCK.EditorDocument.getElementsByTagName( 'BASE' ) ;
+if ( eBase.length > 0 && eBase[0].href.length > 0 )
+{
+ document.write( '<base href="' + eBase[0].href + '">' ) ;
+}
+
+window.onload = function()
+{
+ if ( typeof( parent.OnPreviewLoad ) == 'function' )
+ parent.OnPreviewLoad( window, document.body ) ;
+}
+
+function SetBaseHRef( baseHref )
+{
+ var eBase = document.createElement( 'BASE' ) ;
+ eBase.href = baseHref ;
+
+ var eHead = document.getElementsByTagName( 'HEAD' )[0] ;
+ eHead.appendChild( eBase ) ;
+}
+
+function SetLinkColor( color )
+{
+ if ( color && color.length > 0 )
+ document.getElementById('eLink').style.color = color ;
+ else
+ document.getElementById('eLink').style.color = window.document.linkColor ;
+}
+
+function SetVisitedColor( color )
+{
+ if ( color && color.length > 0 )
+ document.getElementById('eVisited').style.color = color ;
+ else
+ document.getElementById('eVisited').style.color = window.document.vlinkColor ;
+}
+
+function SetActiveColor( color )
+{
+ if ( color && color.length > 0 )
+ document.getElementById('eActive').style.color = color ;
+ else
+ document.getElementById('eActive').style.color = window.document.alinkColor ;
+}
+ </script>
+ </head>
+ <body>
+ <table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td align="center" valign="middle">
+ Normal Text
+ </td>
+ <td id="eLink" align="center" valign="middle">
+ <u>Link Text</u>
+ </td>
+ </tr>
+ <tr>
+ <td id="eVisited" valign="middle" align="center">
+ <u>Visited Link</u>
+ </td>
+ <td id="eActive" valign="middle" align="center">
+ <u>Active Link</u>
+ </td>
+ </tr>
+ </table>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ <br>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash.html
new file mode 100644
index 0000000..2db4846
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Flash Properties dialog window.
+-->
+<html>
+ <head>
+ <title>Flash Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script src="fck_flash/fck_flash.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
+
+ </script>
+ </head>
+ <body scroll="no" style="OVERFLOW: hidden">
+ <div id="divInfo">
+ <table cellSpacing="1" cellPadding="1" width="100%" border="0">
+ <tr>
+ <td>
+ <table cellSpacing="0" cellPadding="0" width="100%" border="0">
+ <tr>
+ <td width="100%"><span fckLang="DlgImgURL">URL</span>
+ </td>
+ <td id="tdBrowse" style="DISPLAY: none" noWrap rowSpan="2">&nbsp; <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer">
+ </td>
+ </tr>
+ <tr>
+ <td vAlign="top"><input id="txtUrl" onblur="UpdatePreview();" style="WIDTH: 100%" type="text">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <TR>
+ <TD>
+ <table cellSpacing="0" cellPadding="0" border="0">
+ <TR>
+ <TD nowrap>
+ <span fckLang="DlgImgWidth">Width</span><br>
+ <input id="txtWidth" onkeypress="return IsDigit(event);" type="text" size="3">
+ </TD>
+ <TD>&nbsp;</TD>
+ <TD>
+ <span fckLang="DlgImgHeight">Height</span><br>
+ <input id="txtHeight" onkeypress="return IsDigit(event);" type="text" size="3">
+ </TD>
+ </TR>
+ </table>
+ </TD>
+ </TR>
+ <tr>
+ <td vAlign="top">
+ <table cellSpacing="0" cellPadding="0" width="100%" border="0">
+ <tr>
+ <td valign="top" width="100%">
+ <table cellSpacing="0" cellPadding="0" width="100%">
+ <tr>
+ <td><span fckLang="DlgImgPreview">Preview</span></td>
+ </tr>
+ <tr>
+ <td id="ePreviewCell" valign="top" class="FlashPreviewArea"><iframe src="fck_flash/fck_flash_preview.html" frameborder="0" marginheight="0" marginwidth="0"></iframe></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divUpload" style="DISPLAY: none">
+ <form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+ <span fckLang="DlgLnkUpload">Upload</span><br />
+ <input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+ <br />
+ <input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+ <script type="text/javascript">
+ document.write( '<iframe name="UploadWindow" style="DISPLAY: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
+ </script>
+ </form>
+ </div>
+ <div id="divAdvanced" style="DISPLAY: none">
+ <TABLE cellSpacing="0" cellPadding="0" border="0">
+ <TR>
+ <TD nowrap>
+ <span fckLang="DlgFlashScale">Scale</span><BR>
+ <select id="cmbScale">
+ <option value="" selected></option>
+ <option value="showall" fckLang="DlgFlashScaleAll">Show all</option>
+ <option value="noborder" fckLang="DlgFlashScaleNoBorder">No Border</option>
+ <option value="exactfit" fckLang="DlgFlashScaleFit">Exact Fit</option>
+ </select></TD>
+ <TD>&nbsp;&nbsp;&nbsp; &nbsp;
+ </TD>
+ <td valign="bottom">
+ <table>
+ <tr>
+ <td><input id="chkAutoPlay" type="checkbox" checked></td>
+ <td><label for="chkAutoPlay" nowrap fckLang="DlgFlashChkPlay">Auto Play</label>&nbsp;&nbsp;</td>
+ <td><input id="chkLoop" type="checkbox" checked></td>
+ <td><label for="chkLoop" nowrap fckLang="DlgFlashChkLoop">Loop</label>&nbsp;&nbsp;</td>
+ <td><input id="chkMenu" type="checkbox" checked></td>
+ <td><label for="chkMenu" nowrap fckLang="DlgFlashChkMenu">Enable Flash Menu</label></td>
+ </tr>
+ </table>
+ </td>
+ </TR>
+ </TABLE>
+ <br>
+ &nbsp;
+ <table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
+ <tr>
+ <td vAlign="top" width="50%"><span fckLang="DlgGenId">Id</span><br>
+ <input id="txtAttId" style="WIDTH: 100%" type="text">
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <td vAlign="top" nowrap><span fckLang="DlgGenClass">Stylesheet Classes</span><br>
+ <input id="txtAttClasses" style="WIDTH: 100%" type="text">
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <td vAlign="top" nowrap width="50%">&nbsp;<span fckLang="DlgGenTitle">Advisory Title</span><br>
+ <input id="txtAttTitle" style="WIDTH: 100%" type="text">
+ </td>
+ </tr>
+ </table>
+ <span fckLang="DlgGenStyle">Style</span><br>
+ <input id="txtAttStyle" style="WIDTH: 100%" type="text">
+ </div>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash.js
new file mode 100644
index 0000000..ca62ad0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash.js
@@ -0,0 +1,300 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Flash dialog window (see fck_flash.html).
+ */
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+var FCKLang = oEditor.FCKLang ;
+var FCKConfig = oEditor.FCKConfig ;
+var FCKTools = oEditor.FCKTools ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+dialog.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ;
+
+if ( FCKConfig.FlashUpload )
+ dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.FlashDlgHideAdvanced )
+ dialog.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+ ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
+ ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
+ ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected flash embed (if available).
+var oFakeImage = dialog.Selection.GetSelectedElement() ;
+var oEmbed ;
+
+if ( oFakeImage )
+{
+ if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash') )
+ oEmbed = FCK.GetRealElement( oFakeImage ) ;
+ else
+ oFakeImage = null ;
+}
+
+window.onload = function()
+{
+ // Translate the dialog box texts.
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ // Load the selected element information (if any).
+ LoadSelection() ;
+
+ // Show/Hide the "Browse Server" button.
+ GetE('tdBrowse').style.display = FCKConfig.FlashBrowser ? '' : 'none' ;
+
+ // Set the actual uploader URL.
+ if ( FCKConfig.FlashUpload )
+ GetE('frmUpload').action = FCKConfig.FlashUploadURL ;
+
+ dialog.SetAutoSize( true ) ;
+
+ // Activate the "OK" button.
+ dialog.SetOkButton( true ) ;
+
+ SelectField( 'txtUrl' ) ;
+}
+
+function LoadSelection()
+{
+ if ( ! oEmbed ) return ;
+
+ GetE('txtUrl').value = GetAttribute( oEmbed, 'src', '' ) ;
+ GetE('txtWidth').value = GetAttribute( oEmbed, 'width', '' ) ;
+ GetE('txtHeight').value = GetAttribute( oEmbed, 'height', '' ) ;
+
+ // Get Advances Attributes
+ GetE('txtAttId').value = oEmbed.id ;
+ GetE('chkAutoPlay').checked = GetAttribute( oEmbed, 'play', 'true' ) == 'true' ;
+ GetE('chkLoop').checked = GetAttribute( oEmbed, 'loop', 'true' ) == 'true' ;
+ GetE('chkMenu').checked = GetAttribute( oEmbed, 'menu', 'true' ) == 'true' ;
+ GetE('cmbScale').value = GetAttribute( oEmbed, 'scale', '' ).toLowerCase() ;
+
+ GetE('txtAttTitle').value = oEmbed.title ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ GetE('txtAttClasses').value = oEmbed.getAttribute('className') || '' ;
+ GetE('txtAttStyle').value = oEmbed.style.cssText ;
+ }
+ else
+ {
+ GetE('txtAttClasses').value = oEmbed.getAttribute('class',2) || '' ;
+ GetE('txtAttStyle').value = oEmbed.getAttribute('style',2) || '' ;
+ }
+
+ UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+ if ( GetE('txtUrl').value.length == 0 )
+ {
+ dialog.SetSelectedTab( 'Info' ) ;
+ GetE('txtUrl').focus() ;
+
+ alert( oEditor.FCKLang.DlgAlertUrl ) ;
+
+ return false ;
+ }
+
+ oEditor.FCKUndo.SaveUndoStep() ;
+ if ( !oEmbed )
+ {
+ oEmbed = FCK.EditorDocument.createElement( 'EMBED' ) ;
+ oFakeImage = null ;
+ }
+ UpdateEmbed( oEmbed ) ;
+
+ if ( !oFakeImage )
+ {
+ oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oEmbed ) ;
+ oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ;
+ oFakeImage = FCK.InsertElement( oFakeImage ) ;
+ }
+
+ oEditor.FCKEmbedAndObjectProcessor.RefreshView( oFakeImage, oEmbed ) ;
+
+ return true ;
+}
+
+function UpdateEmbed( e )
+{
+ SetAttribute( e, 'type' , 'application/x-shockwave-flash' ) ;
+ SetAttribute( e, 'pluginspage' , 'http://www.macromedia.com/go/getflashplayer' ) ;
+
+ SetAttribute( e, 'src', GetE('txtUrl').value ) ;
+ SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+ SetAttribute( e, "height", GetE('txtHeight').value ) ;
+
+ // Advances Attributes
+
+ SetAttribute( e, 'id' , GetE('txtAttId').value ) ;
+ SetAttribute( e, 'scale', GetE('cmbScale').value ) ;
+
+ SetAttribute( e, 'play', GetE('chkAutoPlay').checked ? 'true' : 'false' ) ;
+ SetAttribute( e, 'loop', GetE('chkLoop').checked ? 'true' : 'false' ) ;
+ SetAttribute( e, 'menu', GetE('chkMenu').checked ? 'true' : 'false' ) ;
+
+ SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ SetAttribute( e, 'className', GetE('txtAttClasses').value ) ;
+ e.style.cssText = GetE('txtAttStyle').value ;
+ }
+ else
+ {
+ SetAttribute( e, 'class', GetE('txtAttClasses').value ) ;
+ SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+ }
+}
+
+var ePreview ;
+
+function SetPreviewElement( previewEl )
+{
+ ePreview = previewEl ;
+
+ if ( GetE('txtUrl').value.length > 0 )
+ UpdatePreview() ;
+}
+
+function UpdatePreview()
+{
+ if ( !ePreview )
+ return ;
+
+ while ( ePreview.firstChild )
+ ePreview.removeChild( ePreview.firstChild ) ;
+
+ if ( GetE('txtUrl').value.length == 0 )
+ ePreview.innerHTML = '&nbsp;' ;
+ else
+ {
+ var oDoc = ePreview.ownerDocument || ePreview.document ;
+ var e = oDoc.createElement( 'EMBED' ) ;
+
+ SetAttribute( e, 'src', GetE('txtUrl').value ) ;
+ SetAttribute( e, 'type', 'application/x-shockwave-flash' ) ;
+ SetAttribute( e, 'width', '100%' ) ;
+ SetAttribute( e, 'height', '100%' ) ;
+
+ ePreview.appendChild( e ) ;
+ }
+}
+
+// <embed id="ePreview" src="fck_flash/claims.swf" width="100%" height="100%" style="visibility:hidden" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
+
+function BrowseServer()
+{
+ OpenFileBrowser( FCKConfig.FlashBrowserURL, FCKConfig.FlashBrowserWindowWidth, FCKConfig.FlashBrowserWindowHeight ) ;
+}
+
+function SetUrl( url, width, height )
+{
+ GetE('txtUrl').value = url ;
+
+ if ( width )
+ GetE('txtWidth').value = width ;
+
+ if ( height )
+ GetE('txtHeight').value = height ;
+
+ UpdatePreview() ;
+
+ dialog.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+ // Remove animation
+ window.parent.Throbber.Hide() ;
+ GetE( 'divUpload' ).style.display = '' ;
+
+ switch ( errorNumber )
+ {
+ case 0 : // No errors
+ alert( 'Your file has been successfully uploaded' ) ;
+ break ;
+ case 1 : // Custom error
+ alert( customMsg ) ;
+ return ;
+ case 101 : // Custom warning
+ alert( customMsg ) ;
+ break ;
+ case 201 :
+ alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+ break ;
+ case 202 :
+ alert( 'Invalid file type' ) ;
+ return ;
+ case 203 :
+ alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+ return ;
+ case 500 :
+ alert( 'The connector is disabled' ) ;
+ break ;
+ default :
+ alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+ return ;
+ }
+
+ SetUrl( fileUrl ) ;
+ GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex = new RegExp( FCKConfig.FlashUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex = new RegExp( FCKConfig.FlashUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+ var sFile = GetE('txtUploadFile').value ;
+
+ if ( sFile.length == 0 )
+ {
+ alert( 'Please select a file to upload' ) ;
+ return false ;
+ }
+
+ if ( ( FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+ ( FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+ {
+ OnUploadCompleted( 202 ) ;
+ return false ;
+ }
+
+ // Show animation
+ window.parent.Throbber.Show( 100 ) ;
+ GetE( 'divUpload' ).style.display = 'none' ;
+
+ return true ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash_preview.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash_preview.html
new file mode 100644
index 0000000..a590521
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash_preview.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview page for the Flash dialog window.
+-->
+<html>
+ <head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta name="robots" content="noindex, nofollow">
+ <script src="../common/fck_dialog_common.js" type="text/javascript"></script>
+ <script language="javascript">
+
+var FCKTools = window.parent.FCKTools ;
+var FCKConfig = window.parent.FCKConfig ;
+
+// Sets the Skin CSS
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss( '../' ) ) ) ;
+
+if ( window.parent.FCKConfig.BaseHref.length > 0 )
+ document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
+
+window.onload = function()
+{
+ window.parent.SetPreviewElement( document.body ) ;
+}
+
+ </script>
+ </head>
+ <body style="COLOR: #000000; BACKGROUND-COLOR: #ffffff"></body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_form.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_form.html
new file mode 100644
index 0000000..c724282
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_form.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Form dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( 'FORM' ) ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oActiveEl )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtAction').value = oActiveEl.getAttribute( 'action', 2 ) ;
+ GetE('txtMethod').value = oActiveEl.method ;
+ }
+ else
+ oActiveEl = null ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ if ( !oActiveEl )
+ {
+ oActiveEl = oEditor.FCK.InsertElement( 'form' ) ;
+
+ if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+ oEditor.FCKTools.AppendBogusBr( oActiveEl ) ;
+ }
+
+ oActiveEl.name = GetE('txtName').value ;
+ SetAttribute( oActiveEl, 'action', GetE('txtAction').value ) ;
+ oActiveEl.method = GetE('txtMethod').value ;
+
+ return true ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table width="100%" style="height: 100%">
+ <tr>
+ <td align="center">
+ <table cellspacing="0" cellpadding="0" width="80%" border="0">
+ <tr>
+ <td>
+ <span fcklang="DlgFormName">Name</span><br />
+ <input style="width: 100%" type="text" id="txtName" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgFormAction">Action</span><br />
+ <input style="width: 100%" type="text" id="txtAction" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgFormMethod">Method</span><br />
+ <select id="txtMethod">
+ <option value="get" selected="selected">GET</option>
+ <option value="post">POST</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_hiddenfield.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_hiddenfield.html
new file mode 100644
index 0000000..2d0e0b5
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_hiddenfield.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hidden Field dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Hidden Field Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+var FCK = oEditor.FCK ;
+
+// Gets the document DOM
+var oDOM = FCK.EditorDocument ;
+
+// Get the selected flash embed (if available).
+var oFakeImage = dialog.Selection.GetSelectedElement() ;
+var oActiveEl ;
+
+if ( oFakeImage )
+{
+ if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckinputhidden') )
+ oActiveEl = FCK.GetRealElement( oFakeImage ) ;
+ else
+ oFakeImage = null ;
+}
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oActiveEl )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtValue').value = oActiveEl.value ;
+ }
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'hidden' } ) ;
+
+ SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+ if ( !oFakeImage )
+ {
+ oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oActiveEl ) ;
+ oFakeImage.setAttribute( '_fckinputhidden', 'true', 0 ) ;
+
+ oActiveEl.parentNode.insertBefore( oFakeImage, oActiveEl ) ;
+ oActiveEl.parentNode.removeChild( oActiveEl ) ;
+ }
+ else
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ return true ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden" scroll="no">
+ <table height="100%" width="100%">
+ <tr>
+ <td align="center">
+ <table border="0" class="inhoud" cellpadding="0" cellspacing="0" width="80%">
+ <tr>
+ <td>
+ <span fcklang="DlgHiddenName">Name</span><br />
+ <input type="text" size="20" id="txtName" style="width: 100%" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgHiddenValue">Value</span><br />
+ <input type="text" size="30" id="txtValue" style="width: 100%" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image.html
new file mode 100644
index 0000000..75681bf
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Image Properties dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Image Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script src="fck_image/fck_image.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
+
+ </script>
+</head>
+<body scroll="no" style="overflow: hidden">
+ <div id="divInfo">
+ <table cellspacing="1" cellpadding="1" border="0" width="100%" height="100%">
+ <tr>
+ <td>
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td width="100%">
+ <span fcklang="DlgImgURL">URL</span>
+ </td>
+ <td id="tdBrowse" style="display: none" nowrap="nowrap" rowspan="2">
+ &nbsp;
+ <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server"
+ fcklang="DlgBtnBrowseServer" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <input id="txtUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgImgAlt">Short Description</span><br />
+ <input id="txtAlt" style="width: 100%" type="text" /><br />
+ </td>
+ </tr>
+ <tr height="100%">
+ <td valign="top">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
+ <tr>
+ <td valign="top">
+ <br />
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgImgWidth">Width</span>&nbsp;</td>
+ <td>
+ <input type="text" size="3" id="txtWidth" onkeyup="OnSizeChanged('Width',this.value);" /></td>
+ <td rowspan="2">
+ <div id="btnLockSizes" class="BtnLocked" onmouseover="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';"
+ onmouseout="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );" title="Lock Sizes"
+ onclick="SwitchLock(this);">
+ </div>
+ </td>
+ <td rowspan="2">
+ <div id="btnResetSize" class="BtnReset" onmouseover="this.className='BtnReset BtnOver';"
+ onmouseout="this.className='BtnReset';" title="Reset Size" onclick="ResetSizes();">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgImgHeight">Height</span>&nbsp;</td>
+ <td>
+ <input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);" /></td>
+ </tr>
+ </table>
+ <br />
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgImgBorder">Border</span>&nbsp;</td>
+ <td>
+ <input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgImgHSpace">HSpace</span>&nbsp;</td>
+ <td>
+ <input type="text" size="2" id="txtHSpace" onkeyup="UpdatePreview();" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgImgVSpace">VSpace</span>&nbsp;</td>
+ <td>
+ <input type="text" size="2" id="txtVSpace" onkeyup="UpdatePreview();" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgImgAlign">Align</span>&nbsp;</td>
+ <td>
+ <select id="cmbAlign" onchange="UpdatePreview();">
+ <option value="" selected="selected"></option>
+ <option fcklang="DlgImgAlignLeft" value="left">Left</option>
+ <option fcklang="DlgImgAlignAbsBottom" value="absBottom">Abs Bottom</option>
+ <option fcklang="DlgImgAlignAbsMiddle" value="absMiddle">Abs Middle</option>
+ <option fcklang="DlgImgAlignBaseline" value="baseline">Baseline</option>
+ <option fcklang="DlgImgAlignBottom" value="bottom">Bottom</option>
+ <option fcklang="DlgImgAlignMiddle" value="middle">Middle</option>
+ <option fcklang="DlgImgAlignRight" value="right">Right</option>
+ <option fcklang="DlgImgAlignTextTop" value="textTop">Text Top</option>
+ <option fcklang="DlgImgAlignTop" value="top">Top</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td>
+ &nbsp;&nbsp;&nbsp;</td>
+ <td width="100%" valign="top">
+ <table cellpadding="0" cellspacing="0" width="100%" style="table-layout: fixed">
+ <tr>
+ <td>
+ <span fcklang="DlgImgPreview">Preview</span></td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <iframe class="ImagePreviewArea" src="fck_image/fck_image_preview.html" frameborder="0"
+ marginheight="0" marginwidth="0"></iframe>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divUpload" style="display: none">
+ <form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data"
+ action="" onsubmit="return CheckUpload();">
+ <span fcklang="DlgLnkUpload">Upload</span><br />
+ <input id="txtUploadFile" style="width: 100%" type="file" size="40" name="NewFile" /><br />
+ <br />
+ <input id="btnUpload" type="submit" value="Send it to the Server" fcklang="DlgLnkBtnUpload" />
+ <script type="text/javascript">
+ document.write( '<iframe name="UploadWindow" style="display: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
+ </script>
+ </form>
+ </div>
+ <div id="divLink" style="display: none">
+ <table cellspacing="1" cellpadding="1" border="0" width="100%">
+ <tr>
+ <td>
+ <div>
+ <span fcklang="DlgLnkURL">URL</span><br />
+ <input id="txtLnkUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
+ </div>
+ <div id="divLnkBrowseServer" align="right">
+ <input type="button" value="Browse Server" fcklang="DlgBtnBrowseServer" onclick="LnkBrowseServer();" />
+ </div>
+ <div>
+ <span fcklang="DlgLnkTarget">Target</span><br />
+ <select id="cmbLnkTarget">
+ <option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+ <option value="_blank" fcklang="DlgLnkTargetBlank">New Window (_blank)</option>
+ <option value="_top" fcklang="DlgLnkTargetTop">Topmost Window (_top)</option>
+ <option value="_self" fcklang="DlgLnkTargetSelf">Same Window (_self)</option>
+ <option value="_parent" fcklang="DlgLnkTargetParent">Parent Window (_parent)</option>
+ </select>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divAdvanced" style="display: none">
+ <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+ <tr>
+ <td valign="top" width="50%">
+ <span fcklang="DlgGenId">Id</span><br />
+ <input id="txtAttId" style="width: 100%" type="text" />
+ </td>
+ <td width="1">
+ &nbsp;&nbsp;</td>
+ <td valign="top">
+ <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+ <tr>
+ <td width="60%">
+ <span fcklang="DlgGenLangDir">Language Direction</span><br />
+ <select id="cmbAttLangDir" style="width: 100%">
+ <option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+ <option value="ltr" fcklang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+ <option value="rtl" fcklang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+ </select>
+ </td>
+ <td width="1%">
+ &nbsp;&nbsp;</td>
+ <td nowrap="nowrap">
+ <span fcklang="DlgGenLangCode">Language Code</span><br />
+ <input id="txtAttLangCode" style="width: 100%" type="text" />&nbsp;
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <span fcklang="DlgGenLongDescr">Long Description URL</span><br />
+ <input id="txtLongDesc" style="width: 100%" type="text" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <span fcklang="DlgGenClass">Stylesheet Classes</span><br />
+ <input id="txtAttClasses" style="width: 100%" type="text" />
+ </td>
+ <td>
+ </td>
+ <td valign="top">
+ &nbsp;<span fcklang="DlgGenTitle">Advisory Title</span><br />
+ <input id="txtAttTitle" style="width: 100%" type="text" />
+ </td>
+ </tr>
+ </table>
+ <span fcklang="DlgGenStyle">Style</span><br />
+ <input id="txtAttStyle" style="width: 100%" type="text" />
+ </div>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image.js
new file mode 100644
index 0000000..a5cf73b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image.js
@@ -0,0 +1,512 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Image dialog window (see fck_image.html).
+ */
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+var FCKLang = oEditor.FCKLang ;
+var FCKConfig = oEditor.FCKConfig ;
+var FCKDebug = oEditor.FCKDebug ;
+var FCKTools = oEditor.FCKTools ;
+
+var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
+
+if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
+ dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
+
+if ( FCKConfig.ImageUpload )
+ dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.ImageDlgHideAdvanced )
+ dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+ ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
+ ShowE('divLink' , ( tabCode == 'Link' ) ) ;
+ ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
+ ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected image (if available).
+var oImage = dialog.Selection.GetSelectedElement() ;
+
+if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
+ oImage = null ;
+
+// Get the active link.
+var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
+
+var oImageOriginal ;
+
+function UpdateOriginal( resetSize )
+{
+ if ( !eImgPreview )
+ return ;
+
+ if ( GetE('txtUrl').value.length == 0 )
+ {
+ oImageOriginal = null ;
+ return ;
+ }
+
+ oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ;
+
+ if ( resetSize )
+ {
+ oImageOriginal.onload = function()
+ {
+ this.onload = null ;
+ ResetSizes() ;
+ }
+ }
+
+ oImageOriginal.src = eImgPreview.src ;
+}
+
+var bPreviewInitialized ;
+
+window.onload = function()
+{
+ // Translate the dialog box texts.
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
+ GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
+
+ // Load the selected element information (if any).
+ LoadSelection() ;
+
+ // Show/Hide the "Browse Server" button.
+ GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ;
+ GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
+
+ UpdateOriginal() ;
+
+ // Set the actual uploader URL.
+ if ( FCKConfig.ImageUpload )
+ GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
+
+ dialog.SetAutoSize( true ) ;
+
+ // Activate the "OK" button.
+ dialog.SetOkButton( true ) ;
+
+ SelectField( 'txtUrl' ) ;
+}
+
+function LoadSelection()
+{
+ if ( ! oImage ) return ;
+
+ var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
+ if ( sUrl == null )
+ sUrl = GetAttribute( oImage, 'src', '' ) ;
+
+ GetE('txtUrl').value = sUrl ;
+ GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ;
+ GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ;
+ GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ;
+ GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ;
+ GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ;
+
+ var iWidth, iHeight ;
+
+ var regexSize = /^\s*(\d+)px\s*$/i ;
+
+ if ( oImage.style.width )
+ {
+ var aMatchW = oImage.style.width.match( regexSize ) ;
+ if ( aMatchW )
+ {
+ iWidth = aMatchW[1] ;
+ oImage.style.width = '' ;
+ SetAttribute( oImage, 'width' , iWidth ) ;
+ }
+ }
+
+ if ( oImage.style.height )
+ {
+ var aMatchH = oImage.style.height.match( regexSize ) ;
+ if ( aMatchH )
+ {
+ iHeight = aMatchH[1] ;
+ oImage.style.height = '' ;
+ SetAttribute( oImage, 'height', iHeight ) ;
+ }
+ }
+
+ GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
+ GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
+
+ // Get Advances Attributes
+ GetE('txtAttId').value = oImage.id ;
+ GetE('cmbAttLangDir').value = oImage.dir ;
+ GetE('txtAttLangCode').value = oImage.lang ;
+ GetE('txtAttTitle').value = oImage.title ;
+ GetE('txtLongDesc').value = oImage.longDesc ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ GetE('txtAttClasses').value = oImage.className || '' ;
+ GetE('txtAttStyle').value = oImage.style.cssText ;
+ }
+ else
+ {
+ GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
+ GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
+ }
+
+ if ( oLink )
+ {
+ var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
+ if ( sLinkUrl == null )
+ sLinkUrl = oLink.getAttribute('href',2) ;
+
+ GetE('txtLnkUrl').value = sLinkUrl ;
+ GetE('cmbLnkTarget').value = oLink.target ;
+ }
+
+ UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+ if ( GetE('txtUrl').value.length == 0 )
+ {
+ dialog.SetSelectedTab( 'Info' ) ;
+ GetE('txtUrl').focus() ;
+
+ alert( FCKLang.DlgImgAlertUrl ) ;
+
+ return false ;
+ }
+
+ var bHasImage = ( oImage != null ) ;
+
+ if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
+ {
+ if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
+ oImage = null ;
+ }
+ else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
+ {
+ if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
+ oImage = null ;
+ }
+
+ oEditor.FCKUndo.SaveUndoStep() ;
+ if ( !bHasImage )
+ {
+ if ( bImageButton )
+ {
+ oImage = FCK.EditorDocument.createElement( 'input' ) ;
+ oImage.type = 'image' ;
+ oImage = FCK.InsertElement( oImage ) ;
+ }
+ else
+ oImage = FCK.InsertElement( 'img' ) ;
+ }
+
+ UpdateImage( oImage ) ;
+
+ var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
+
+ if ( sLnkUrl.length == 0 )
+ {
+ if ( oLink )
+ FCK.ExecuteNamedCommand( 'Unlink' ) ;
+ }
+ else
+ {
+ if ( oLink ) // Modifying an existent link.
+ oLink.href = sLnkUrl ;
+ else // Creating a new link.
+ {
+ if ( !bHasImage )
+ oEditor.FCKSelection.SelectNode( oImage ) ;
+
+ oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
+
+ if ( !bHasImage )
+ {
+ oEditor.FCKSelection.SelectNode( oLink ) ;
+ oEditor.FCKSelection.Collapse( false ) ;
+ }
+ }
+
+ SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
+ SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
+ }
+
+ return true ;
+}
+
+function UpdateImage( e, skipId )
+{
+ e.src = GetE('txtUrl').value ;
+ SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
+ SetAttribute( e, "alt" , GetE('txtAlt').value ) ;
+ SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+ SetAttribute( e, "height", GetE('txtHeight').value ) ;
+ SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
+ SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
+ SetAttribute( e, "border", GetE('txtBorder').value ) ;
+ SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
+
+ // Advances Attributes
+
+ if ( ! skipId )
+ SetAttribute( e, 'id', GetE('txtAttId').value ) ;
+
+ SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ;
+ SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ;
+ SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
+ SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ e.className = GetE('txtAttClasses').value ;
+ e.style.cssText = GetE('txtAttStyle').value ;
+ }
+ else
+ {
+ SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ;
+ SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+ }
+}
+
+var eImgPreview ;
+var eImgPreviewLink ;
+
+function SetPreviewElements( imageElement, linkElement )
+{
+ eImgPreview = imageElement ;
+ eImgPreviewLink = linkElement ;
+
+ UpdatePreview() ;
+ UpdateOriginal() ;
+
+ bPreviewInitialized = true ;
+}
+
+function UpdatePreview()
+{
+ if ( !eImgPreview || !eImgPreviewLink )
+ return ;
+
+ if ( GetE('txtUrl').value.length == 0 )
+ eImgPreviewLink.style.display = 'none' ;
+ else
+ {
+ UpdateImage( eImgPreview, true ) ;
+
+ if ( GetE('txtLnkUrl').value.Trim().length > 0 )
+ eImgPreviewLink.href = 'javascript:void(null);' ;
+ else
+ SetAttribute( eImgPreviewLink, 'href', '' ) ;
+
+ eImgPreviewLink.style.display = '' ;
+ }
+}
+
+var bLockRatio = true ;
+
+function SwitchLock( lockButton )
+{
+ bLockRatio = !bLockRatio ;
+ lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
+ lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
+
+ if ( bLockRatio )
+ {
+ if ( GetE('txtWidth').value.length > 0 )
+ OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
+ else
+ OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
+ }
+}
+
+// Fired when the width or height input texts change
+function OnSizeChanged( dimension, value )
+{
+ // Verifies if the aspect ration has to be maintained
+ if ( oImageOriginal && bLockRatio )
+ {
+ var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
+
+ if ( value.length == 0 || isNaN( value ) )
+ {
+ e.value = '' ;
+ return ;
+ }
+
+ if ( dimension == 'Width' )
+ value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ;
+ else
+ value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ;
+
+ if ( !isNaN( value ) )
+ e.value = value ;
+ }
+
+ UpdatePreview() ;
+}
+
+// Fired when the Reset Size button is clicked
+function ResetSizes()
+{
+ if ( ! oImageOriginal ) return ;
+ if ( oEditor.FCKBrowserInfo.IsGecko && !oImageOriginal.complete )
+ {
+ setTimeout( ResetSizes, 50 ) ;
+ return ;
+ }
+
+ GetE('txtWidth').value = oImageOriginal.width ;
+ GetE('txtHeight').value = oImageOriginal.height ;
+
+ UpdatePreview() ;
+}
+
+function BrowseServer()
+{
+ OpenServerBrowser(
+ 'Image',
+ FCKConfig.ImageBrowserURL,
+ FCKConfig.ImageBrowserWindowWidth,
+ FCKConfig.ImageBrowserWindowHeight ) ;
+}
+
+function LnkBrowseServer()
+{
+ OpenServerBrowser(
+ 'Link',
+ FCKConfig.LinkBrowserURL,
+ FCKConfig.LinkBrowserWindowWidth,
+ FCKConfig.LinkBrowserWindowHeight ) ;
+}
+
+function OpenServerBrowser( type, url, width, height )
+{
+ sActualBrowser = type ;
+ OpenFileBrowser( url, width, height ) ;
+}
+
+var sActualBrowser ;
+
+function SetUrl( url, width, height, alt )
+{
+ if ( sActualBrowser == 'Link' )
+ {
+ GetE('txtLnkUrl').value = url ;
+ UpdatePreview() ;
+ }
+ else
+ {
+ GetE('txtUrl').value = url ;
+ GetE('txtWidth').value = width ? width : '' ;
+ GetE('txtHeight').value = height ? height : '' ;
+
+ if ( alt )
+ GetE('txtAlt').value = alt;
+
+ UpdatePreview() ;
+ UpdateOriginal( true ) ;
+ }
+
+ dialog.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+ // Remove animation
+ window.parent.Throbber.Hide() ;
+ GetE( 'divUpload' ).style.display = '' ;
+
+ switch ( errorNumber )
+ {
+ case 0 : // No errors
+ alert( 'Your file has been successfully uploaded' ) ;
+ break ;
+ case 1 : // Custom error
+ alert( customMsg ) ;
+ return ;
+ case 101 : // Custom warning
+ alert( customMsg ) ;
+ break ;
+ case 201 :
+ alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+ break ;
+ case 202 :
+ alert( 'Invalid file type' ) ;
+ return ;
+ case 203 :
+ alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+ return ;
+ case 500 :
+ alert( 'The connector is disabled' ) ;
+ break ;
+ default :
+ alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+ return ;
+ }
+
+ sActualBrowser = '' ;
+ SetUrl( fileUrl ) ;
+ GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+ var sFile = GetE('txtUploadFile').value ;
+
+ if ( sFile.length == 0 )
+ {
+ alert( 'Please select a file to upload' ) ;
+ return false ;
+ }
+
+ if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+ ( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+ {
+ OnUploadCompleted( 202 ) ;
+ return false ;
+ }
+
+ // Show animation
+ window.parent.Throbber.Show( 100 ) ;
+ GetE( 'divUpload' ).style.display = 'none' ;
+
+ return true ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image_preview.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image_preview.html
new file mode 100644
index 0000000..1c6fe52
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image_preview.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview page for the Image dialog window.
+ *
+ * Curiosity: http://en.wikipedia.org/wiki/Lorem_ipsum
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script src="../common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var FCKTools = window.parent.FCKTools ;
+var FCKConfig = window.parent.FCKConfig ;
+
+// Set the preview CSS
+document.write( FCKTools.GetStyleHtml( FCKConfig.EditorAreaCSS ) ) ;
+document.write( FCKTools.GetStyleHtml( FCKConfig.EditorAreaStyles ) ) ;
+
+if ( window.parent.FCKConfig.BaseHref.length > 0 )
+ document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
+
+window.onload = function()
+{
+ window.parent.SetPreviewElements(
+ document.getElementById( 'imgPreview' ),
+ document.getElementById( 'lnkPreview' ) ) ;
+}
+
+ </script>
+</head>
+<body>
+ <div>
+ <a id="lnkPreview" onclick="return false;" style="cursor: default">
+ <img id="imgPreview" onload="window.parent.UpdateOriginal();"
+ style="display: none" alt="" /></a>Lorem ipsum dolor sit amet, consectetuer adipiscing
+ elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus
+ a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis,
+ nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed
+ velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper
+ nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices
+ a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus
+ faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget
+ tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit,
+ tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis
+ id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus,
+ eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur
+ ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.
+ </div>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link.html
new file mode 100644
index 0000000..061c84e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link.html
@@ -0,0 +1,295 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html>
+ <head>
+ <title>Link Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script src="fck_link/fck_link.js" type="text/javascript"></script>
+ </head>
+ <body scroll="no" style="OVERFLOW: hidden">
+ <div id="divInfo" style="DISPLAY: none">
+ <span fckLang="DlgLnkType">Link Type</span><br />
+ <select id="cmbLinkType" onchange="SetLinkType(this.value);">
+ <option value="url" fckLang="DlgLnkTypeURL" selected="selected">URL</option>
+ <option value="anchor" fckLang="DlgLnkTypeAnchor">Anchor in this page</option>
+ <option value="email" fckLang="DlgLnkTypeEMail">E-Mail</option>
+ </select>
+ <br />
+ <br />
+ <div id="divLinkTypeUrl">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0" dir="ltr">
+ <tr>
+ <td nowrap="nowrap">
+ <span fckLang="DlgLnkProto">Protocol</span><br />
+ <select id="cmbLinkProtocol">
+ <option value="http://" selected="selected">http://</option>
+ <option value="https://">https://</option>
+ <option value="ftp://">ftp://</option>
+ <option value="news://">news://</option>
+ <option value="" fckLang="DlgLnkProtoOther">&lt;other&gt;</option>
+ </select>
+ </td>
+ <td nowrap="nowrap">&nbsp;</td>
+ <td nowrap="nowrap" width="100%">
+ <span fckLang="DlgLnkURL">URL</span><br />
+ <input id="txtUrl" style="WIDTH: 100%" type="text" onkeyup="OnUrlChange();" onchange="OnUrlChange();" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <div id="divBrowseServer">
+ <input type="button" value="Browse Server" fckLang="DlgBtnBrowseServer" onclick="BrowseServer();" />
+ </div>
+ </div>
+ <div id="divLinkTypeAnchor" style="DISPLAY: none" align="center">
+ <div id="divSelAnchor" style="DISPLAY: none">
+ <table cellspacing="0" cellpadding="0" border="0" width="70%">
+ <tr>
+ <td colspan="3">
+ <span fckLang="DlgLnkAnchorSel">Select an Anchor</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="50%">
+ <span fckLang="DlgLnkAnchorByName">By Anchor Name</span><br />
+ <select id="cmbAnchorName" onchange="GetE('cmbAnchorId').value='';" style="WIDTH: 100%">
+ <option value="" selected="selected"></option>
+ </select>
+ </td>
+ <td>&nbsp;&nbsp;&nbsp;</td>
+ <td width="50%">
+ <span fckLang="DlgLnkAnchorById">By Element Id</span><br />
+ <select id="cmbAnchorId" onchange="GetE('cmbAnchorName').value='';" style="WIDTH: 100%">
+ <option value="" selected="selected"></option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divNoAnchor" style="DISPLAY: none">
+ <span fckLang="DlgLnkNoAnchors">&lt;No anchors available in the document&gt;</span>
+ </div>
+ </div>
+ <div id="divLinkTypeEMail" style="DISPLAY: none">
+ <span fckLang="DlgLnkEMail">E-Mail Address</span><br />
+ <input id="txtEMailAddress" style="WIDTH: 100%" type="text" /><br />
+ <span fckLang="DlgLnkEMailSubject">Message Subject</span><br />
+ <input id="txtEMailSubject" style="WIDTH: 100%" type="text" /><br />
+ <span fckLang="DlgLnkEMailBody">Message Body</span><br />
+ <textarea id="txtEMailBody" style="WIDTH: 100%" rows="3" cols="20"></textarea>
+ </div>
+ </div>
+ <div id="divUpload" style="DISPLAY: none">
+ <form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+ <span fckLang="DlgLnkUpload">Upload</span><br />
+ <input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+ <br />
+ <input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+ <script type="text/javascript">
+ document.write( '<iframe name="UploadWindow" style="display: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
+ </script>
+ </form>
+ </div>
+ <div id="divTarget" style="DISPLAY: none">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <span fckLang="DlgLnkTarget">Target</span><br />
+ <select id="cmbTarget" onchange="SetTarget(this.value);">
+ <option value="" fckLang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+ <option value="frame" fckLang="DlgLnkTargetFrame">&lt;frame&gt;</option>
+ <option value="popup" fckLang="DlgLnkTargetPopup">&lt;popup window&gt;</option>
+ <option value="_blank" fckLang="DlgLnkTargetBlank">New Window (_blank)</option>
+ <option value="_top" fckLang="DlgLnkTargetTop">Topmost Window (_top)</option>
+ <option value="_self" fckLang="DlgLnkTargetSelf">Same Window (_self)</option>
+ <option value="_parent" fckLang="DlgLnkTargetParent">Parent Window (_parent)</option>
+ </select>
+ </td>
+ <td>&nbsp;</td>
+ <td id="tdTargetFrame" nowrap="nowrap" width="100%">
+ <span fckLang="DlgLnkTargetFrameName">Target Frame Name</span><br />
+ <input id="txtTargetFrame" style="WIDTH: 100%" type="text" onkeyup="OnTargetNameChange();"
+ onchange="OnTargetNameChange();" />
+ </td>
+ <td id="tdPopupName" style="DISPLAY: none" nowrap="nowrap" width="100%">
+ <span fckLang="DlgLnkPopWinName">Popup Window Name</span><br />
+ <input id="txtPopupName" style="WIDTH: 100%" type="text" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <table id="tablePopupFeatures" style="DISPLAY: none" cellspacing="0" cellpadding="0" align="center"
+ border="0">
+ <tr>
+ <td>
+ <span fckLang="DlgLnkPopWinFeat">Popup Window Features</span><br />
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td valign="top" nowrap="nowrap" width="50%">
+ <input id="chkPopupResizable" name="chkFeature" value="resizable" type="checkbox" /><label for="chkPopupResizable" fckLang="DlgLnkPopResize">Resizable</label><br />
+ <input id="chkPopupLocationBar" name="chkFeature" value="location" type="checkbox" /><label for="chkPopupLocationBar" fckLang="DlgLnkPopLocation">Location
+ Bar</label><br />
+ <input id="chkPopupManuBar" name="chkFeature" value="menubar" type="checkbox" /><label for="chkPopupManuBar" fckLang="DlgLnkPopMenu">Menu
+ Bar</label><br />
+ <input id="chkPopupScrollBars" name="chkFeature" value="scrollbars" type="checkbox" /><label for="chkPopupScrollBars" fckLang="DlgLnkPopScroll">Scroll
+ Bars</label>
+ </td>
+ <td></td>
+ <td valign="top" nowrap="nowrap" width="50%">
+ <input id="chkPopupStatusBar" name="chkFeature" value="status" type="checkbox" /><label for="chkPopupStatusBar" fckLang="DlgLnkPopStatus">Status
+ Bar</label><br />
+ <input id="chkPopupToolbar" name="chkFeature" value="toolbar" type="checkbox" /><label for="chkPopupToolbar" fckLang="DlgLnkPopToolbar">Toolbar</label><br />
+ <input id="chkPopupFullScreen" name="chkFeature" value="fullscreen" type="checkbox" /><label for="chkPopupFullScreen" fckLang="DlgLnkPopFullScrn">Full
+ Screen (IE)</label><br />
+ <input id="chkPopupDependent" name="chkFeature" value="dependent" type="checkbox" /><label for="chkPopupDependent" fckLang="DlgLnkPopDependent">Dependent
+ (Netscape)</label>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" nowrap="nowrap" width="50%">&nbsp;</td>
+ <td></td>
+ <td valign="top" nowrap="nowrap" width="50%"></td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td nowrap="nowrap"><span fckLang="DlgLnkPopWidth">Width</span></td>
+ <td>&nbsp;<input id="txtPopupWidth" type="text" maxlength="4" size="4" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap"><span fckLang="DlgLnkPopHeight">Height</span></td>
+ <td>&nbsp;<input id="txtPopupHeight" type="text" maxlength="4" size="4" /></td>
+ </tr>
+ </table>
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <td valign="top">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td nowrap="nowrap"><span fckLang="DlgLnkPopLeft">Left Position</span></td>
+ <td>&nbsp;<input id="txtPopupLeft" type="text" maxlength="4" size="4" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap"><span fckLang="DlgLnkPopTop">Top Position</span></td>
+ <td>&nbsp;<input id="txtPopupTop" type="text" maxlength="4" size="4" /></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divAttribs" style="DISPLAY: none">
+ <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+ <tr>
+ <td valign="top" width="50%">
+ <span fckLang="DlgGenId">Id</span><br />
+ <input id="txtAttId" style="WIDTH: 100%" type="text" />
+ </td>
+ <td width="1"></td>
+ <td valign="top">
+ <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+ <tr>
+ <td width="60%">
+ <span fckLang="DlgGenLangDir">Language Direction</span><br />
+ <select id="cmbAttLangDir" style="WIDTH: 100%">
+ <option value="" fckLang="DlgGenNotSet" selected>&lt;not set&gt;</option>
+ <option value="ltr" fckLang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+ <option value="rtl" fckLang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+ </select>
+ </td>
+ <td width="1%">&nbsp;&nbsp;&nbsp;</td>
+ <td nowrap="nowrap"><span fckLang="DlgGenAccessKey">Access Key</span><br />
+ <input id="txtAttAccessKey" style="WIDTH: 100%" type="text" maxlength="1" size="1" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" width="50%">
+ <span fckLang="DlgGenName">Name</span><br />
+ <input id="txtAttName" style="WIDTH: 100%" type="text" />
+ </td>
+ <td width="1"></td>
+ <td valign="top">
+ <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+ <tr>
+ <td width="60%">
+ <span fckLang="DlgGenLangCode">Language Code</span><br />
+ <input id="txtAttLangCode" style="WIDTH: 100%" type="text" />
+ </td>
+ <td width="1%">&nbsp;&nbsp;&nbsp;</td>
+ <td nowrap="nowrap">
+ <span fckLang="DlgGenTabIndex">Tab Index</span><br />
+ <input id="txtAttTabIndex" style="WIDTH: 100%" type="text" maxlength="5" size="5" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" width="50%">&nbsp;</td>
+ <td width="1"></td>
+ <td valign="top"></td>
+ </tr>
+ <tr>
+ <td valign="top" width="50%">
+ <span fckLang="DlgGenTitle">Advisory Title</span><br />
+ <input id="txtAttTitle" style="WIDTH: 100%" type="text" />
+ </td>
+ <td width="1">&nbsp;&nbsp;&nbsp;</td>
+ <td valign="top">
+ <span fckLang="DlgGenContType">Advisory Content Type</span><br />
+ <input id="txtAttContentType" style="WIDTH: 100%" type="text" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <span fckLang="DlgGenClass">Stylesheet Classes</span><br />
+ <input id="txtAttClasses" style="WIDTH: 100%" type="text" />
+ </td>
+ <td></td>
+ <td valign="top">
+ <span fckLang="DlgGenLinkCharset">Linked Resource Charset</span><br />
+ <input id="txtAttCharSet" style="WIDTH: 100%" type="text" />
+ </td>
+ </tr>
+ </table>
+ <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+ <tr>
+ <td>
+ <span fckLang="DlgGenStyle">Style</span><br />
+ <input id="txtAttStyle" style="WIDTH: 100%" type="text" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link/fck_link.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link/fck_link.js
new file mode 100644
index 0000000..1c661eb
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link/fck_link.js
@@ -0,0 +1,893 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Link dialog window (see fck_link.html).
+ */
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+var FCK = oEditor.FCK ;
+var FCKLang = oEditor.FCKLang ;
+var FCKConfig = oEditor.FCKConfig ;
+var FCKRegexLib = oEditor.FCKRegexLib ;
+var FCKTools = oEditor.FCKTools ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+dialog.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
+
+if ( !FCKConfig.LinkDlgHideTarget )
+ dialog.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
+
+if ( FCKConfig.LinkUpload )
+ dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
+
+if ( !FCKConfig.LinkDlgHideAdvanced )
+ dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+ ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
+ ShowE('divTarget' , ( tabCode == 'Target' ) ) ;
+ ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
+ ShowE('divAttribs' , ( tabCode == 'Advanced' ) ) ;
+
+ dialog.SetAutoSize( true ) ;
+}
+
+//#### Regular Expressions library.
+var oRegex = new Object() ;
+
+oRegex.UriProtocol = /^(((http|https|ftp|news):\/\/)|mailto:)/gi ;
+
+oRegex.UrlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi ;
+
+oRegex.UrlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi ;
+
+oRegex.ReserveTarget = /^_(blank|self|top|parent)$/i ;
+
+oRegex.PopupUri = /^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$/ ;
+
+// Accessible popups
+oRegex.OnClickPopup = /^\s*on[cC]lick="\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*"$/ ;
+
+oRegex.PopupFeatures = /(?:^|,)([^=]+)=(\d+|yes|no)/gi ;
+
+//#### Parser Functions
+
+var oParser = new Object() ;
+
+// This method simply returns the two inputs in numerical order. You can even
+// provide strings, as the method would parseInt() the values.
+oParser.SortNumerical = function(a, b)
+{
+ return parseInt( a, 10 ) - parseInt( b, 10 ) ;
+}
+
+oParser.ParseEMailParams = function(sParams)
+{
+ // Initialize the oEMailParams object.
+ var oEMailParams = new Object() ;
+ oEMailParams.Subject = '' ;
+ oEMailParams.Body = '' ;
+
+ var aMatch = sParams.match( /(^|^\?|&)subject=([^&]+)/i ) ;
+ if ( aMatch ) oEMailParams.Subject = decodeURIComponent( aMatch[2] ) ;
+
+ aMatch = sParams.match( /(^|^\?|&)body=([^&]+)/i ) ;
+ if ( aMatch ) oEMailParams.Body = decodeURIComponent( aMatch[2] ) ;
+
+ return oEMailParams ;
+}
+
+// This method returns either an object containing the email info, or FALSE
+// if the parameter is not an email link.
+oParser.ParseEMailUri = function( sUrl )
+{
+ // Initializes the EMailInfo object.
+ var oEMailInfo = new Object() ;
+ oEMailInfo.Address = '' ;
+ oEMailInfo.Subject = '' ;
+ oEMailInfo.Body = '' ;
+
+ var aLinkInfo = sUrl.match( /^(\w+):(.*)$/ ) ;
+ if ( aLinkInfo && aLinkInfo[1] == 'mailto' )
+ {
+ // This seems to be an unprotected email link.
+ var aParts = aLinkInfo[2].match( /^([^\?]+)\??(.+)?/ ) ;
+ if ( aParts )
+ {
+ // Set the e-mail address.
+ oEMailInfo.Address = aParts[1] ;
+
+ // Look for the optional e-mail parameters.
+ if ( aParts[2] )
+ {
+ var oEMailParams = oParser.ParseEMailParams( aParts[2] ) ;
+ oEMailInfo.Subject = oEMailParams.Subject ;
+ oEMailInfo.Body = oEMailParams.Body ;
+ }
+ }
+ return oEMailInfo ;
+ }
+ else if ( aLinkInfo && aLinkInfo[1] == 'javascript' )
+ {
+ // This may be a protected email.
+
+ // Try to match the url against the EMailProtectionFunction.
+ var func = FCKConfig.EMailProtectionFunction ;
+ if ( func != null )
+ {
+ try
+ {
+ // Escape special chars.
+ func = func.replace( /([\/^$*+.?()\[\]])/g, '\\$1' ) ;
+
+ // Define the possible keys.
+ var keys = new Array('NAME', 'DOMAIN', 'SUBJECT', 'BODY') ;
+
+ // Get the order of the keys (hold them in the array <pos>) and
+ // the function replaced by regular expression patterns.
+ var sFunc = func ;
+ var pos = new Array() ;
+ for ( var i = 0 ; i < keys.length ; i ++ )
+ {
+ var rexp = new RegExp( keys[i] ) ;
+ var p = func.search( rexp ) ;
+ if ( p >= 0 )
+ {
+ sFunc = sFunc.replace( rexp, '\'([^\']*)\'' ) ;
+ pos[pos.length] = p + ':' + keys[i] ;
+ }
+ }
+
+ // Sort the available keys.
+ pos.sort( oParser.SortNumerical ) ;
+
+ // Replace the excaped single quotes in the url, such they do
+ // not affect the regexp afterwards.
+ aLinkInfo[2] = aLinkInfo[2].replace( /\\'/g, '###SINGLE_QUOTE###' ) ;
+
+ // Create the regexp and execute it.
+ var rFunc = new RegExp( '^' + sFunc + '$' ) ;
+ var aMatch = rFunc.exec( aLinkInfo[2] ) ;
+ if ( aMatch )
+ {
+ var aInfo = new Array();
+ for ( var i = 1 ; i < aMatch.length ; i ++ )
+ {
+ var k = pos[i-1].match(/^\d+:(.+)$/) ;
+ aInfo[k[1]] = aMatch[i].replace(/###SINGLE_QUOTE###/g, '\'') ;
+ }
+
+ // Fill the EMailInfo object that will be returned
+ oEMailInfo.Address = aInfo['NAME'] + '@' + aInfo['DOMAIN'] ;
+ oEMailInfo.Subject = decodeURIComponent( aInfo['SUBJECT'] ) ;
+ oEMailInfo.Body = decodeURIComponent( aInfo['BODY'] ) ;
+
+ return oEMailInfo ;
+ }
+ }
+ catch (e)
+ {
+ }
+ }
+
+ // Try to match the email against the encode protection.
+ var aMatch = aLinkInfo[2].match( /^(?:void\()?location\.href='mailto:'\+(String\.fromCharCode\([\d,]+\))\+'(.*)'\)?$/ ) ;
+ if ( aMatch )
+ {
+ // The link is encoded
+ oEMailInfo.Address = eval( aMatch[1] ) ;
+ if ( aMatch[2] )
+ {
+ var oEMailParams = oParser.ParseEMailParams( aMatch[2] ) ;
+ oEMailInfo.Subject = oEMailParams.Subject ;
+ oEMailInfo.Body = oEMailParams.Body ;
+ }
+ return oEMailInfo ;
+ }
+ }
+ return false;
+}
+
+oParser.CreateEMailUri = function( address, subject, body )
+{
+ // Switch for the EMailProtection setting.
+ switch ( FCKConfig.EMailProtection )
+ {
+ case 'function' :
+ var func = FCKConfig.EMailProtectionFunction ;
+ if ( func == null )
+ {
+ if ( FCKConfig.Debug )
+ {
+ alert('EMailProtection alert!\nNo function defined. Please set "FCKConfig.EMailProtectionFunction"') ;
+ }
+ return '';
+ }
+
+ // Split the email address into name and domain parts.
+ var aAddressParts = address.split( '@', 2 ) ;
+ if ( aAddressParts[1] == undefined )
+ {
+ aAddressParts[1] = '' ;
+ }
+
+ // Replace the keys by their values (embedded in single quotes).
+ func = func.replace(/NAME/g, "'" + aAddressParts[0].replace(/'/g, '\\\'') + "'") ;
+ func = func.replace(/DOMAIN/g, "'" + aAddressParts[1].replace(/'/g, '\\\'') + "'") ;
+ func = func.replace(/SUBJECT/g, "'" + encodeURIComponent( subject ).replace(/'/g, '\\\'') + "'") ;
+ func = func.replace(/BODY/g, "'" + encodeURIComponent( body ).replace(/'/g, '\\\'') + "'") ;
+
+ return 'javascript:' + func ;
+
+ case 'encode' :
+ var aParams = [] ;
+ var aAddressCode = [] ;
+
+ if ( subject.length > 0 )
+ aParams.push( 'subject='+ encodeURIComponent( subject ) ) ;
+ if ( body.length > 0 )
+ aParams.push( 'body=' + encodeURIComponent( body ) ) ;
+ for ( var i = 0 ; i < address.length ; i++ )
+ aAddressCode.push( address.charCodeAt( i ) ) ;
+
+ return 'javascript:void(location.href=\'mailto:\'+String.fromCharCode(' + aAddressCode.join( ',' ) + ')+\'?' + aParams.join( '&' ) + '\')' ;
+ }
+
+ // EMailProtection 'none'
+
+ var sBaseUri = 'mailto:' + address ;
+
+ var sParams = '' ;
+
+ if ( subject.length > 0 )
+ sParams = '?subject=' + encodeURIComponent( subject ) ;
+
+ if ( body.length > 0 )
+ {
+ sParams += ( sParams.length == 0 ? '?' : '&' ) ;
+ sParams += 'body=' + encodeURIComponent( body ) ;
+ }
+
+ return sBaseUri + sParams ;
+}
+
+//#### Initialization Code
+
+// oLink: The actual selected link in the editor.
+var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
+if ( oLink )
+ FCK.Selection.SelectNode( oLink ) ;
+
+window.onload = function()
+{
+ // Translate the dialog box texts.
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ // Fill the Anchor Names and Ids combos.
+ LoadAnchorNamesAndIds() ;
+
+ // Load the selected link information (if any).
+ LoadSelection() ;
+
+ // Update the dialog box.
+ SetLinkType( GetE('cmbLinkType').value ) ;
+
+ // Show/Hide the "Browse Server" button.
+ GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
+
+ // Show the initial dialog content.
+ GetE('divInfo').style.display = '' ;
+
+ // Set the actual uploader URL.
+ if ( FCKConfig.LinkUpload )
+ GetE('frmUpload').action = FCKConfig.LinkUploadURL ;
+
+ // Set the default target (from configuration).
+ SetDefaultTarget() ;
+
+ // Activate the "OK" button.
+ dialog.SetOkButton( true ) ;
+
+ // Select the first field.
+ switch( GetE('cmbLinkType').value )
+ {
+ case 'url' :
+ SelectField( 'txtUrl' ) ;
+ break ;
+ case 'email' :
+ SelectField( 'txtEMailAddress' ) ;
+ break ;
+ case 'anchor' :
+ if ( GetE('divSelAnchor').style.display != 'none' )
+ SelectField( 'cmbAnchorName' ) ;
+ else
+ SelectField( 'cmbLinkType' ) ;
+ }
+}
+
+var bHasAnchors ;
+
+function LoadAnchorNamesAndIds()
+{
+ // Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon
+ // to edit them. So, we must look for that images now.
+ var aAnchors = new Array() ;
+ var i ;
+ var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ;
+ for( i = 0 ; i < oImages.length ; i++ )
+ {
+ if ( oImages[i].getAttribute('_fckanchor') )
+ aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ;
+ }
+
+ // Add also real anchors
+ var oLinks = oEditor.FCK.EditorDocument.getElementsByTagName( 'A' ) ;
+ for( i = 0 ; i < oLinks.length ; i++ )
+ {
+ if ( oLinks[i].name && ( oLinks[i].name.length > 0 ) )
+ aAnchors[ aAnchors.length ] = oLinks[i] ;
+ }
+
+ var aIds = FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
+
+ bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ;
+
+ for ( i = 0 ; i < aAnchors.length ; i++ )
+ {
+ var sName = aAnchors[i].name ;
+ if ( sName && sName.length > 0 )
+ FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ;
+ }
+
+ for ( i = 0 ; i < aIds.length ; i++ )
+ {
+ FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ;
+ }
+
+ ShowE( 'divSelAnchor' , bHasAnchors ) ;
+ ShowE( 'divNoAnchor' , !bHasAnchors ) ;
+}
+
+function LoadSelection()
+{
+ if ( !oLink ) return ;
+
+ var sType = 'url' ;
+
+ // Get the actual Link href.
+ var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
+ if ( sHRef == null )
+ sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
+
+ // Look for a popup javascript link.
+ var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ;
+ if( oPopupMatch )
+ {
+ GetE('cmbTarget').value = 'popup' ;
+ sHRef = oPopupMatch[1] ;
+ FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ;
+ SetTarget( 'popup' ) ;
+ }
+
+ // Accessible popups, the popup data is in the onclick attribute
+ if ( !oPopupMatch )
+ {
+ var onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
+ if ( onclick )
+ {
+ // Decode the protected string
+ onclick = decodeURIComponent( onclick ) ;
+
+ oPopupMatch = oRegex.OnClickPopup.exec( onclick ) ;
+ if( oPopupMatch )
+ {
+ GetE( 'cmbTarget' ).value = 'popup' ;
+ FillPopupFields( oPopupMatch[1], oPopupMatch[2] ) ;
+ SetTarget( 'popup' ) ;
+ }
+ }
+ }
+
+ // Search for the protocol.
+ var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
+
+ // Search for a protected email link.
+ var oEMailInfo = oParser.ParseEMailUri( sHRef );
+
+ if ( oEMailInfo )
+ {
+ sType = 'email' ;
+
+ GetE('txtEMailAddress').value = oEMailInfo.Address ;
+ GetE('txtEMailSubject').value = oEMailInfo.Subject ;
+ GetE('txtEMailBody').value = oEMailInfo.Body ;
+ }
+ else if ( sProtocol )
+ {
+ sProtocol = sProtocol[0].toLowerCase() ;
+ GetE('cmbLinkProtocol').value = sProtocol ;
+
+ // Remove the protocol and get the remaining URL.
+ var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
+ sType = 'url' ;
+ GetE('txtUrl').value = sUrl ;
+ }
+ else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link.
+ {
+ sType = 'anchor' ;
+ GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ;
+ }
+ else // It is another type of link.
+ {
+ sType = 'url' ;
+
+ GetE('cmbLinkProtocol').value = '' ;
+ GetE('txtUrl').value = sHRef ;
+ }
+
+ if ( !oPopupMatch )
+ {
+ // Get the target.
+ var sTarget = oLink.target ;
+
+ if ( sTarget && sTarget.length > 0 )
+ {
+ if ( oRegex.ReserveTarget.test( sTarget ) )
+ {
+ sTarget = sTarget.toLowerCase() ;
+ GetE('cmbTarget').value = sTarget ;
+ }
+ else
+ GetE('cmbTarget').value = 'frame' ;
+ GetE('txtTargetFrame').value = sTarget ;
+ }
+ }
+
+ // Get Advances Attributes
+ GetE('txtAttId').value = oLink.id ;
+ GetE('txtAttName').value = oLink.name ;
+ GetE('cmbAttLangDir').value = oLink.dir ;
+ GetE('txtAttLangCode').value = oLink.lang ;
+ GetE('txtAttAccessKey').value = oLink.accessKey ;
+ GetE('txtAttTabIndex').value = oLink.tabIndex <= 0 ? '' : oLink.tabIndex ;
+ GetE('txtAttTitle').value = oLink.title ;
+ GetE('txtAttContentType').value = oLink.type ;
+ GetE('txtAttCharSet').value = oLink.charset ;
+
+ var sClass ;
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ sClass = oLink.getAttribute('className',2) || '' ;
+ // Clean up temporary classes for internal use:
+ sClass = sClass.replace( FCKRegexLib.FCK_Class, '' ) ;
+
+ GetE('txtAttStyle').value = oLink.style.cssText ;
+ }
+ else
+ {
+ sClass = oLink.getAttribute('class',2) || '' ;
+ GetE('txtAttStyle').value = oLink.getAttribute('style',2) || '' ;
+ }
+ GetE('txtAttClasses').value = sClass ;
+
+ // Update the Link type combo.
+ GetE('cmbLinkType').value = sType ;
+}
+
+//#### Link type selection.
+function SetLinkType( linkType )
+{
+ ShowE('divLinkTypeUrl' , (linkType == 'url') ) ;
+ ShowE('divLinkTypeAnchor' , (linkType == 'anchor') ) ;
+ ShowE('divLinkTypeEMail' , (linkType == 'email') ) ;
+
+ if ( !FCKConfig.LinkDlgHideTarget )
+ dialog.SetTabVisibility( 'Target' , (linkType == 'url') ) ;
+
+ if ( FCKConfig.LinkUpload )
+ dialog.SetTabVisibility( 'Upload' , (linkType == 'url') ) ;
+
+ if ( !FCKConfig.LinkDlgHideAdvanced )
+ dialog.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ;
+
+ if ( linkType == 'email' )
+ dialog.SetAutoSize( true ) ;
+}
+
+//#### Target type selection.
+function SetTarget( targetType )
+{
+ GetE('tdTargetFrame').style.display = ( targetType == 'popup' ? 'none' : '' ) ;
+ GetE('tdPopupName').style.display =
+ GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ;
+
+ switch ( targetType )
+ {
+ case "_blank" :
+ case "_self" :
+ case "_parent" :
+ case "_top" :
+ GetE('txtTargetFrame').value = targetType ;
+ break ;
+ case "" :
+ GetE('txtTargetFrame').value = '' ;
+ break ;
+ }
+
+ if ( targetType == 'popup' )
+ dialog.SetAutoSize( true ) ;
+}
+
+//#### Called while the user types the URL.
+function OnUrlChange()
+{
+ var sUrl = GetE('txtUrl').value ;
+ var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ;
+
+ if ( sProtocol )
+ {
+ sUrl = sUrl.substr( sProtocol[0].length ) ;
+ GetE('txtUrl').value = sUrl ;
+ GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ;
+ }
+ else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) )
+ {
+ GetE('cmbLinkProtocol').value = '' ;
+ }
+}
+
+//#### Called while the user types the target name.
+function OnTargetNameChange()
+{
+ var sFrame = GetE('txtTargetFrame').value ;
+
+ if ( sFrame.length == 0 )
+ GetE('cmbTarget').value = '' ;
+ else if ( oRegex.ReserveTarget.test( sFrame ) )
+ GetE('cmbTarget').value = sFrame.toLowerCase() ;
+ else
+ GetE('cmbTarget').value = 'frame' ;
+}
+
+// Accessible popups
+function BuildOnClickPopup()
+{
+ var sWindowName = "'" + GetE('txtPopupName').value.replace(/\W/gi, "") + "'" ;
+
+ var sFeatures = '' ;
+ var aChkFeatures = document.getElementsByName( 'chkFeature' ) ;
+ for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+ {
+ if ( i > 0 ) sFeatures += ',' ;
+ sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ;
+ }
+
+ if ( GetE('txtPopupWidth').value.length > 0 ) sFeatures += ',width=' + GetE('txtPopupWidth').value ;
+ if ( GetE('txtPopupHeight').value.length > 0 ) sFeatures += ',height=' + GetE('txtPopupHeight').value ;
+ if ( GetE('txtPopupLeft').value.length > 0 ) sFeatures += ',left=' + GetE('txtPopupLeft').value ;
+ if ( GetE('txtPopupTop').value.length > 0 ) sFeatures += ',top=' + GetE('txtPopupTop').value ;
+
+ if ( sFeatures != '' )
+ sFeatures = sFeatures + ",status" ;
+
+ return ( "window.open(this.href," + sWindowName + ",'" + sFeatures + "'); return false" ) ;
+}
+
+//#### Fills all Popup related fields.
+function FillPopupFields( windowName, features )
+{
+ if ( windowName )
+ GetE('txtPopupName').value = windowName ;
+
+ var oFeatures = new Object() ;
+ var oFeaturesMatch ;
+ while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null )
+ {
+ var sValue = oFeaturesMatch[2] ;
+ if ( sValue == ( 'yes' || '1' ) )
+ oFeatures[ oFeaturesMatch[1] ] = true ;
+ else if ( ! isNaN( sValue ) && sValue != 0 )
+ oFeatures[ oFeaturesMatch[1] ] = sValue ;
+ }
+
+ // Update all features check boxes.
+ var aChkFeatures = document.getElementsByName('chkFeature') ;
+ for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+ {
+ if ( oFeatures[ aChkFeatures[i].value ] )
+ aChkFeatures[i].checked = true ;
+ }
+
+ // Update position and size text boxes.
+ if ( oFeatures['width'] ) GetE('txtPopupWidth').value = oFeatures['width'] ;
+ if ( oFeatures['height'] ) GetE('txtPopupHeight').value = oFeatures['height'] ;
+ if ( oFeatures['left'] ) GetE('txtPopupLeft').value = oFeatures['left'] ;
+ if ( oFeatures['top'] ) GetE('txtPopupTop').value = oFeatures['top'] ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+ var sUri, sInnerHtml ;
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ switch ( GetE('cmbLinkType').value )
+ {
+ case 'url' :
+ sUri = GetE('txtUrl').value ;
+
+ if ( sUri.length == 0 )
+ {
+ alert( FCKLang.DlnLnkMsgNoUrl ) ;
+ return false ;
+ }
+
+ sUri = GetE('cmbLinkProtocol').value + sUri ;
+
+ break ;
+
+ case 'email' :
+ sUri = GetE('txtEMailAddress').value ;
+
+ if ( sUri.length == 0 )
+ {
+ alert( FCKLang.DlnLnkMsgNoEMail ) ;
+ return false ;
+ }
+
+ sUri = oParser.CreateEMailUri(
+ sUri,
+ GetE('txtEMailSubject').value,
+ GetE('txtEMailBody').value ) ;
+ break ;
+
+ case 'anchor' :
+ var sAnchor = GetE('cmbAnchorName').value ;
+ if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
+
+ if ( sAnchor.length == 0 )
+ {
+ alert( FCKLang.DlnLnkMsgNoAnchor ) ;
+ return false ;
+ }
+
+ sUri = '#' + sAnchor ;
+ break ;
+ }
+
+ // If no link is selected, create a new one (it may result in more than one link creation - #220).
+ var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri, true ) ;
+
+ // If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26)
+ var aHasSelection = ( aLinks.length > 0 ) ;
+ if ( !aHasSelection )
+ {
+ sInnerHtml = sUri;
+
+ // Built a better text for empty links.
+ switch ( GetE('cmbLinkType').value )
+ {
+ // anchor: use old behavior --> return true
+ case 'anchor':
+ sInnerHtml = sInnerHtml.replace( /^#/, '' ) ;
+ break ;
+
+ // url: try to get path
+ case 'url':
+ var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ;
+ var asLinkPath = oLinkPathRegEx.exec( sUri ) ;
+ if (asLinkPath != null)
+ sInnerHtml = asLinkPath[1]; // use matched path
+ break ;
+
+ // mailto: try to get email address
+ case 'email':
+ sInnerHtml = GetE('txtEMailAddress').value ;
+ break ;
+ }
+
+ // Create a new (empty) anchor.
+ aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ;
+ }
+
+ for ( var i = 0 ; i < aLinks.length ; i++ )
+ {
+ oLink = aLinks[i] ;
+
+ if ( aHasSelection )
+ sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL).
+
+ oLink.href = sUri ;
+ SetAttribute( oLink, '_fcksavedurl', sUri ) ;
+
+ var onclick;
+ // Accessible popups
+ if( GetE('cmbTarget').value == 'popup' )
+ {
+ onclick = BuildOnClickPopup() ;
+ // Encode the attribute
+ onclick = encodeURIComponent( " onclick=\"" + onclick + "\"" ) ;
+ SetAttribute( oLink, 'onclick_fckprotectedatt', onclick ) ;
+ }
+ else
+ {
+ // Check if the previous onclick was for a popup:
+ // In that case remove the onclick handler.
+ onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
+ if ( onclick )
+ {
+ // Decode the protected string
+ onclick = decodeURIComponent( onclick ) ;
+
+ if( oRegex.OnClickPopup.test( onclick ) )
+ SetAttribute( oLink, 'onclick_fckprotectedatt', '' ) ;
+ }
+ }
+
+ oLink.innerHTML = sInnerHtml ; // Set (or restore) the innerHTML
+
+ // Target
+ if( GetE('cmbTarget').value != 'popup' )
+ SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
+ else
+ SetAttribute( oLink, 'target', null ) ;
+
+ // Let's set the "id" only for the first link to avoid duplication.
+ if ( i == 0 )
+ SetAttribute( oLink, 'id', GetE('txtAttId').value ) ;
+
+ // Advances Attributes
+ SetAttribute( oLink, 'name' , GetE('txtAttName').value ) ;
+ SetAttribute( oLink, 'dir' , GetE('cmbAttLangDir').value ) ;
+ SetAttribute( oLink, 'lang' , GetE('txtAttLangCode').value ) ;
+ SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ;
+ SetAttribute( oLink, 'tabindex' , ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ;
+ SetAttribute( oLink, 'title' , GetE('txtAttTitle').value ) ;
+ SetAttribute( oLink, 'type' , GetE('txtAttContentType').value ) ;
+ SetAttribute( oLink, 'charset' , GetE('txtAttCharSet').value ) ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ {
+ var sClass = GetE('txtAttClasses').value ;
+ // If it's also an anchor add an internal class
+ if ( GetE('txtAttName').value.length != 0 )
+ sClass += ' FCK__AnchorC' ;
+ SetAttribute( oLink, 'className', sClass ) ;
+
+ oLink.style.cssText = GetE('txtAttStyle').value ;
+ }
+ else
+ {
+ SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ;
+ SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
+ }
+ }
+
+ // Select the (first) link.
+ oEditor.FCKSelection.SelectNode( aLinks[0] );
+
+ return true ;
+}
+
+function BrowseServer()
+{
+ OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ;
+}
+
+function SetUrl( url )
+{
+ GetE('txtUrl').value = url ;
+ OnUrlChange() ;
+ dialog.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+ // Remove animation
+ window.parent.Throbber.Hide() ;
+ GetE( 'divUpload' ).style.display = '' ;
+
+ switch ( errorNumber )
+ {
+ case 0 : // No errors
+ alert( 'Your file has been successfully uploaded' ) ;
+ break ;
+ case 1 : // Custom error
+ alert( customMsg ) ;
+ return ;
+ case 101 : // Custom warning
+ alert( customMsg ) ;
+ break ;
+ case 201 :
+ alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+ break ;
+ case 202 :
+ alert( 'Invalid file type' ) ;
+ return ;
+ case 203 :
+ alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+ return ;
+ case 500 :
+ alert( 'The connector is disabled' ) ;
+ break ;
+ default :
+ alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+ return ;
+ }
+
+ SetUrl( fileUrl ) ;
+ GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex = new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex = new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+ var sFile = GetE('txtUploadFile').value ;
+
+ if ( sFile.length == 0 )
+ {
+ alert( 'Please select a file to upload' ) ;
+ return false ;
+ }
+
+ if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+ ( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+ {
+ OnUploadCompleted( 202 ) ;
+ return false ;
+ }
+
+ // Show animation
+ window.parent.Throbber.Show( 100 ) ;
+ GetE( 'divUpload' ).style.display = 'none' ;
+
+ return true ;
+}
+
+function SetDefaultTarget()
+{
+ var target = FCKConfig.DefaultLinkTarget || '' ;
+
+ if ( oLink || target.length == 0 )
+ return ;
+
+ switch ( target )
+ {
+ case '_blank' :
+ case '_self' :
+ case '_parent' :
+ case '_top' :
+ GetE('cmbTarget').value = target ;
+ break ;
+ default :
+ GetE('cmbTarget').value = 'frame' ;
+ break ;
+ }
+
+ GetE('txtTargetFrame').value = target ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_listprop.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_listprop.html
new file mode 100644
index 0000000..55b337a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_listprop.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bulleted List dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+var sListType = ( location.search == '?OL' ? 'OL' : 'UL' ) ;
+
+var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( sListType ) ;
+var oActiveSel ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( sListType == 'UL' )
+ oActiveSel = GetE('selBulleted') ;
+ else
+ {
+ if ( oActiveEl )
+ {
+ oActiveSel = GetE('selNumbered') ;
+ GetE('eStart').style.display = '' ;
+ GetE('txtStartPosition').value = GetAttribute( oActiveEl, 'start' ) ;
+ }
+ }
+
+ oActiveSel.style.display = '' ;
+
+ if ( oActiveEl )
+ {
+ if ( oActiveEl.getAttribute('type') )
+ oActiveSel.value = oActiveEl.getAttribute('type') ;
+ }
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+
+ SelectField( sListType == 'OL' ? 'txtStartPosition' : 'selBulleted' ) ;
+}
+
+function Ok()
+{
+ if ( oActiveEl ){
+ SetAttribute( oActiveEl, 'type' , oActiveSel.value ) ;
+ if(oActiveEl.tagName == 'OL')
+ SetAttribute( oActiveEl, 'start', GetE('txtStartPosition').value ) ;
+ }
+
+ return true ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table width="100%" style="height: 100%">
+ <tr>
+ <td style="text-align:center">
+ <table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;">
+ <tr>
+ <td id="eStart" style="display: none; padding-right: 5px; padding-left: 5px">
+ <span fcklang="DlgLstStart">Start</span><br />
+ <input type="text" id="txtStartPosition" size="5" />
+ </td>
+ <td style="padding-right: 5px; padding-left: 5px">
+ <span fcklang="DlgLstType">List Type</span><br />
+ <select id="selBulleted" style="display: none">
+ <option value="" selected="selected"></option>
+ <option value="circle" fcklang="DlgLstTypeCircle">Circle</option>
+ <option value="disc" fcklang="DlgLstTypeDisc">Disc</option>
+ <option value="square" fcklang="DlgLstTypeSquare">Square</option>
+ </select>
+ <select id="selNumbered" style="display: none">
+ <option value="" selected="selected"></option>
+ <option value="1" fcklang="DlgLstTypeNumbers">Numbers (1, 2, 3)</option>
+ <option value="a" fcklang="DlgLstTypeLCase">Lowercase Letters (a, b, c)</option>
+ <option value="A" fcklang="DlgLstTypeUCase">Uppercase Letters (A, B, C)</option>
+ <option value="i" fcklang="DlgLstTypeSRoman">Small Roman Numerals (i, ii, iii)</option>
+ <option value="I" fcklang="DlgLstTypeLRoman">Large Roman Numerals (I, II, III)</option>
+ </select>
+ &nbsp;
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_paste.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_paste.html
new file mode 100644
index 0000000..e20a738
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_paste.html
@@ -0,0 +1,347 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This dialog is shown when, for some reason (usually security settings),
+ * the user is not able to paste data from the clipboard to the editor using
+ * the toolbar buttons or the context menu.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCK = oEditor.FCK;
+var FCKTools = oEditor.FCKTools ;
+var FCKConfig = oEditor.FCKConfig ;
+var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
+
+window.onload = function ()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ var sPastingType = dialog.Args().CustomValue ;
+
+ if ( sPastingType == 'Word' || sPastingType == 'Security' )
+ {
+ if ( sPastingType == 'Security' )
+ document.getElementById( 'xSecurityMsg' ).style.display = '' ;
+
+ // For document.domain compatibility (#123) we must do all the magic in
+ // the URL for IE.
+ var sFrameUrl = !oEditor.FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE ?
+ 'javascript:void(0)' :
+ 'javascript:void( (function(){' +
+ 'document.open() ;' +
+ 'document.domain=\'' + document.domain + '\' ;' +
+ 'document.write(\'<html><head><script>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>\') ;' +
+ 'document.close() ;' +
+ 'document.body.contentEditable = true ;' +
+ 'window.focus() ;' +
+ '})() )' ;
+
+ var eFrameSpace = document.getElementById( 'xFrameSpace' ) ;
+ eFrameSpace.innerHTML = '<iframe id="frmData" src="' + sFrameUrl + '" ' +
+ 'height="98%" width="99%" frameborder="0" style="border: #000000 1px; background-color: #ffffff"><\/iframe>' ;
+
+ var oFrame = eFrameSpace.firstChild ;
+
+ if ( !oEditor.FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE )
+ {
+ // Avoid errors if the pasted content has any script that fails: #389
+ var oDoc = oFrame.contentWindow.document ;
+ oDoc.open() ;
+ oDoc.write('<html><head><script>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>') ;
+ oDoc.close() ;
+
+ if ( FCKBrowserInfo.IsIE )
+ oDoc.body.contentEditable = true ;
+ else
+ oDoc.designMode = 'on' ;
+
+ oFrame.contentWindow.focus();
+ }
+ }
+ else
+ {
+ document.getElementById('txtData').style.display = '' ;
+ SelectField( 'txtData' ) ;
+ }
+
+ if ( sPastingType != 'Word' )
+ document.getElementById('oWordCommands').style.display = 'none' ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+}
+
+function Ok()
+{
+ // Before doing anything, save undo snapshot.
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ var sHtml ;
+
+ var sPastingType = dialog.Args().CustomValue ;
+
+ if ( sPastingType == 'Word' || sPastingType == 'Security' )
+ {
+ var oFrame = document.getElementById('frmData') ;
+ var oBody ;
+
+ if ( oFrame.contentDocument )
+ oBody = oFrame.contentDocument.body ;
+ else
+ oBody = oFrame.contentWindow.document.body ;
+
+ if ( sPastingType == 'Word' )
+ {
+ // If a plugin creates a FCK.CustomCleanWord function it will be called instead of the default one
+ if ( typeof( FCK.CustomCleanWord ) == 'function' )
+ sHtml = FCK.CustomCleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
+ else
+ sHtml = CleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
+ }
+ else
+ sHtml = oBody.innerHTML ;
+
+ // Fix relative anchor URLs (IE automatically adds the current page URL).
+ var re = new RegExp( window.location + "#", "g" ) ;
+ sHtml = sHtml.replace( re, '#') ;
+ }
+ else
+ {
+ sHtml = oEditor.FCKTools.HTMLEncode( document.getElementById('txtData').value ) ;
+ sHtml = FCKTools.ProcessLineBreaks( oEditor, FCKConfig, sHtml ) ;
+
+ // FCK.InsertHtml() does not work for us, since document fragments cannot contain node fragments. :(
+ // Use the marker method instead. It's primitive, but it works.
+ var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+ var oDoc = oEditor.FCK.EditorDocument ;
+ dialog.Selection.EnsureSelection() ;
+ range.MoveToSelection() ;
+ range.DeleteContents() ;
+ var marker = [] ;
+ for ( var i = 0 ; i < 5 ; i++ )
+ marker.push( parseInt(Math.random() * 100000, 10 ) ) ;
+ marker = marker.join( "" ) ;
+ range.InsertNode ( oDoc.createTextNode( marker ) ) ;
+ var bookmark = range.CreateBookmark() ;
+
+ // Now we've got a marker indicating the paste position in the editor document.
+ // Find its position in the HTML code.
+ var htmlString = oDoc.body.innerHTML ;
+ var index = htmlString.indexOf( marker ) ;
+
+ // Split it the HTML code up, add the code we generated, and put them back together.
+ var htmlList = [] ;
+ htmlList.push( htmlString.substr( 0, index ) ) ;
+ htmlList.push( sHtml ) ;
+ htmlList.push( htmlString.substr( index + marker.length ) ) ;
+ htmlString = htmlList.join( "" ) ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ oEditor.FCK.SetInnerHtml( htmlString ) ;
+ else
+ oDoc.body.innerHTML = htmlString ;
+
+ range.MoveToBookmark( bookmark ) ;
+ range.Collapse( false ) ;
+ range.Select() ;
+ range.Release() ;
+ return true ;
+ }
+
+ oEditor.FCK.InsertHtml( sHtml ) ;
+
+ return true ;
+}
+
+// This function will be called from the PasteFromWord dialog (fck_paste.html)
+// Input: oNode a DOM node that contains the raw paste from the clipboard
+// bIgnoreFont, bRemoveStyles booleans according to the values set in the dialog
+// Output: the cleaned string
+function CleanWord( oNode, bIgnoreFont, bRemoveStyles )
+{
+ var html = oNode.innerHTML ;
+
+ html = html.replace(/<o:p>\s*<\/o:p>/g, '') ;
+ html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, '&nbsp;') ;
+
+ // Remove mso-xxx styles.
+ html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ;
+
+ // Remove margin styles.
+ html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '' ) ;
+ html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;
+
+ html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ;
+ html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;
+
+ html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;
+
+ html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;
+
+ html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;
+
+ html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ;
+ html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ;
+
+ // Remove FONT face attributes.
+ if ( bIgnoreFont )
+ {
+ html = html.replace( /\s*face="[^"]*"/gi, '' ) ;
+ html = html.replace( /\s*face=[^ >]*/gi, '' ) ;
+
+ html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ;
+ }
+
+ // Remove Class attributes
+ html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+ // Remove styles.
+ if ( bRemoveStyles )
+ html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;
+
+ // Remove style, meta and link tags
+ html = html.replace( /<STYLE[^>]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ;
+ html = html.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ;
+
+ // Remove empty styles.
+ html = html.replace( /\s*style="\s*"/gi, '' ) ;
+
+ html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
+
+ html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
+
+ // Remove Lang attributes
+ html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+ html = html.replace( /<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;
+
+ html = html.replace( /<FONT\s*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;
+
+ // Remove XML elements and declarations
+ html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ;
+
+ // Remove w: tags with contents.
+ html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ;
+
+ // Remove Tags with XML namespace declarations: <o:p><\/o:p>
+ html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ;
+
+ // Remove comments [SF BUG-1481861].
+ html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ;
+
+ html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;
+
+ html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;
+
+ // Remove "display:none" tags.
+ html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ;
+
+ // Remove language tags
+ html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+ // Remove onmouseover and onmouseout events (from MS Word comments effect)
+ html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ;
+ html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ;
+
+ if ( FCKConfig.CleanWordKeepsStructure )
+ {
+ // The original <Hn> tag send from Word is something like this: <Hn style="margin-top:0px;margin-bottom:0px">
+ html = html.replace( /<H(\d)([^>]*)>/gi, '<h$1>' ) ;
+
+ // Word likes to insert extra <font> tags, when using MSIE. (Wierd).
+ html = html.replace( /<(H\d)><FONT[^>]*>([\s\S]*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' );
+ html = html.replace( /<(H\d)><EM>([\s\S]*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' );
+ }
+ else
+ {
+ html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
+ html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
+ html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
+ html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
+ html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
+ html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;
+
+ html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;
+
+ // Transform <P> to <DIV>
+ var re = new RegExp( '(<P)([^>]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ; // Different because of a IE 5.0 error
+ html = html.replace( re, '<div$2<\/div>' ) ;
+
+ // Remove empty tags (three times, just to be sure).
+ // This also removes any empty anchor
+ html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+ html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+ html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+ }
+
+ return html ;
+}
+
+ </script>
+
+</head>
+<body style="overflow: hidden">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 98%">
+ <tr>
+ <td>
+ <div id="xSecurityMsg" style="display: none">
+ <span fcklang="DlgPasteSec">Because of your browser security settings,
+ the editor is not able to access your clipboard data directly. You are required
+ to paste it again in this window.</span><br />
+ &nbsp;
+ </div>
+ <div>
+ <span fcklang="DlgPasteMsg2">Please paste inside the following box using the keyboard
+ (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.</span><br />
+ &nbsp;
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td id="xFrameSpace" valign="top" height="100%" style="border: #000000 1px solid">
+ <textarea id="txtData" cols="80" rows="5" style="border: #000000 1px; display: none;
+ width: 99%; height: 98%"></textarea>
+ </td>
+ </tr>
+ <tr id="oWordCommands">
+ <td>
+
+ <input id="chkRemoveFont" type="checkbox" checked="checked" />
+ <label for="chkRemoveFont" fcklang="DlgPasteIgnoreFont">
+ Ignore Font Face definitions</label>
+ <br />
+ <input id="chkRemoveStyles" type="checkbox" />
+ <label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles">
+ Remove Styles definitions</label>
+
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_radiobutton.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_radiobutton.html
new file mode 100644
index 0000000..80516e0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_radiobutton.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Radio Button dialog window.
+-->
+<html>
+ <head>
+ <title>Radio Button Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oActiveEl && oActiveEl.tagName.toUpperCase() == 'INPUT' && oActiveEl.type == 'radio' )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtValue').value = oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
+ GetE('txtSelected').checked = oActiveEl.checked ;
+ }
+ else
+ oActiveEl = null ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'radio' } ) ;
+
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ oActiveEl.value = GetE('txtValue').value ;
+ else
+ SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+ var bIsChecked = GetE('txtSelected').checked ;
+ SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ; // For Firefox
+ oActiveEl.checked = bIsChecked ;
+
+ return true ;
+}
+
+ </script>
+ </head>
+ <body style="OVERFLOW: hidden" scroll="no">
+ <table height="100%" width="100%">
+ <tr>
+ <td align="center">
+ <table border="0" cellpadding="0" cellspacing="0" width="80%">
+ <tr>
+ <td>
+ <span fckLang="DlgCheckboxName">Name</span><br>
+ <input type="text" size="20" id="txtName" style="WIDTH: 100%">
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fckLang="DlgCheckboxValue">Value</span><br>
+ <input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+ </td>
+ </tr>
+ <tr>
+ <td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_replace.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_replace.html
new file mode 100644
index 0000000..bf98335
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_replace.html
@@ -0,0 +1,650 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * "Find" and "Replace" dialog box window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var dialogArguments = dialog.Args() ;
+
+var FCKLang = oEditor.FCKLang ;
+var FCKDomTools = oEditor.FCKDomTools ;
+var FCKDomRange = oEditor.FCKDomRange ;
+var FCKListsLib = oEditor.FCKListsLib ;
+var FCKTools = oEditor.FCKTools ;
+var EditorDocument = oEditor.FCK.EditorDocument ;
+var HighlightStyle = oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' ) ;
+
+dialog.AddTab( 'Find', FCKLang.DlgFindTitle ) ;
+dialog.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;
+var idMap = {} ;
+
+function OnDialogTabChange( tabCode )
+{
+ ShowE( 'divFind', ( tabCode == 'Find' ) ) ;
+ ShowE( 'divReplace', ( tabCode == 'Replace' ) ) ;
+ idMap['FindText'] = 'txtFind' + tabCode ;
+ idMap['CheckCase'] = 'chkCase' + tabCode ;
+ idMap['CheckWord'] = 'chkWord' + tabCode ;
+
+ if ( tabCode == 'Replace' )
+ dialog.SetAutoSize( true ) ;
+}
+
+GetNextNonEmptyTextNode = function( node, stopNode )
+{
+ while ( ( node = FCKDomTools.GetNextSourceNode( node, false, 3, stopNode ) ) && node && node.length < 1 )
+ 1 ;
+ return node ;
+}
+
+CharacterCursor = function( arg )
+{
+ if ( arg.nodeType && arg.nodeType == 9 )
+ {
+ this._textNode = GetNextNonEmptyTextNode( arg.body, arg.documentElement ) ;
+ this._offset = 0 ;
+ this._doc = arg ;
+ }
+ else
+ {
+ this._textNode = arguments[0] ;
+ this._offset = arguments[1] ;
+ this._doc = FCKTools.GetElementDocument( arguments[0] ) ;
+ }
+}
+CharacterCursor.prototype =
+{
+ GetCharacter : function()
+ {
+ return ( this._textNode && this._textNode.nodeValue.charAt( this._offset ) ) || null ;
+ },
+
+ // Non-normalized.
+ GetTextNode : function()
+ {
+ return this._textNode ;
+ },
+
+ // Non-normalized.
+ GetIndex : function()
+ {
+ return this._offset ;
+ },
+
+ // Return value means whehther we've crossed a line break or a paragraph boundary.
+ MoveNext : function()
+ {
+ if ( this._offset < this._textNode.length - 1 )
+ {
+ this._offset++ ;
+ return false ;
+ }
+
+ var crossed = false ;
+ var curNode = this._textNode ;
+ while ( ( curNode = FCKDomTools.GetNextSourceNode( curNode ) )
+ && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )
+ {
+ var tag = curNode.nodeName.toLowerCase() ;
+ if ( FCKListsLib.BlockElements[tag] || tag == 'br' )
+ crossed = true ;
+ }
+
+ this._textNode = curNode ;
+ this._offset = 0 ;
+ return crossed ;
+ },
+
+ // Return value means whehther we've crossed a line break or a paragraph boundary.
+ MoveBack : function()
+ {
+ if ( this._offset > 0 && this._textNode.length > 0 )
+ {
+ this._offset = Math.min( this._offset - 1, this._textNode.length - 1 ) ;
+ return false ;
+ }
+
+ var crossed = false ;
+ var curNode = this._textNode ;
+ while ( ( curNode = FCKDomTools.GetPreviousSourceNode( curNode ) )
+ && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )
+ {
+ var tag = curNode.nodeName.toLowerCase() ;
+ if ( FCKListsLib.BlockElements[tag] || tag == 'br' )
+ crossed = true ;
+ }
+
+ this._textNode = curNode ;
+ this._offset = curNode && curNode.length - 1 ;
+ return crossed ;
+ },
+
+ Clone : function()
+ {
+ return new CharacterCursor( this._textNode, this._offset ) ;
+ }
+} ;
+
+CharacterRange = function( initCursor, maxLength )
+{
+ this._cursors = initCursor.push ? initCursor : [initCursor] ;
+ this._maxLength = maxLength ;
+ this._highlightRange = null ;
+}
+CharacterRange.prototype =
+{
+ ToDomRange : function()
+ {
+ var firstCursor = this._cursors[0] ;
+ var lastCursor = this._cursors[ this._cursors.length - 1 ] ;
+ var domRange = new FCKDomRange( FCKTools.GetElementWindow( firstCursor.GetTextNode() ) ) ;
+ var w3cRange = domRange._Range = domRange.CreateRange() ;
+ w3cRange.setStart( firstCursor.GetTextNode(), firstCursor.GetIndex() ) ;
+ w3cRange.setEnd( lastCursor.GetTextNode(), lastCursor.GetIndex() + 1 ) ;
+ domRange._UpdateElementInfo() ;
+ return domRange ;
+ },
+
+ Highlight : function()
+ {
+ if ( this._cursors.length < 1 )
+ return ;
+
+ var domRange = this.ToDomRange() ;
+ HighlightStyle.ApplyToRange( domRange, false, true ) ;
+ this._highlightRange = domRange ;
+
+ var charRange = CharacterRange.CreateFromDomRange( domRange ) ;
+ var focusNode = domRange.StartNode ;
+ if ( focusNode.nodeType != 1 )
+ focusNode = focusNode.parentNode ;
+ FCKDomTools.ScrollIntoView( focusNode, false ) ;
+ this._cursors = charRange._cursors ;
+ },
+
+ RemoveHighlight : function()
+ {
+ if ( this._highlightRange )
+ {
+ HighlightStyle.RemoveFromRange( this._highlightRange, false, true ) ;
+ var charRange = CharacterRange.CreateFromDomRange( this._highlightRange ) ;
+ this._cursors = charRange._cursors ;
+ this._highlightRange = null ;
+ }
+ },
+
+ GetHighlightDomRange : function()
+ {
+ return this._highlightRange;
+ },
+
+ MoveNext : function()
+ {
+ var next = this._cursors[ this._cursors.length - 1 ].Clone() ;
+ var retval = next.MoveNext() ;
+ if ( retval )
+ this._cursors = [] ;
+ this._cursors.push( next ) ;
+ if ( this._cursors.length > this._maxLength )
+ this._cursors.shift() ;
+ return retval ;
+ },
+
+ MoveBack : function()
+ {
+ var prev = this._cursors[0].Clone() ;
+ var retval = prev.MoveBack() ;
+ if ( retval )
+ this._cursors = [] ;
+ this._cursors.unshift( prev ) ;
+ if ( this._cursors.length > this._maxLength )
+ this._cursors.pop() ;
+ return retval ;
+ },
+
+ GetEndCharacter : function()
+ {
+ if ( this._cursors.length < 1 )
+ return null ;
+ var retval = this._cursors[ this._cursors.length - 1 ].GetCharacter() ;
+ return retval ;
+ },
+
+ GetNextRange : function( len )
+ {
+ if ( this._cursors.length == 0 )
+ return null ;
+ var cur = this._cursors[ this._cursors.length - 1 ].Clone() ;
+ cur.MoveNext() ;
+ return new CharacterRange( cur, len ) ;
+ },
+
+ GetCursors : function()
+ {
+ return this._cursors ;
+ }
+} ;
+
+CharacterRange.CreateFromDomRange = function( domRange )
+{
+ var w3cRange = domRange._Range ;
+ var startContainer = w3cRange.startContainer ;
+ var endContainer = w3cRange.endContainer ;
+ var startTextNode, startIndex, endTextNode, endIndex ;
+
+ if ( startContainer.nodeType == 3 )
+ {
+ startTextNode = startContainer ;
+ startIndex = w3cRange.startOffset ;
+ }
+ else if ( domRange.StartNode.nodeType == 3 )
+ {
+ startTextNode = domRange.StartNode ;
+ startIndex = 0 ;
+ }
+ else
+ {
+ startTextNode = GetNextNonEmptyTextNode( domRange.StartNode, domRange.StartNode.parentNode ) ;
+ if ( !startTextNode )
+ return null ;
+ startIndex = 0 ;
+ }
+
+ if ( endContainer.nodeType == 3 && w3cRange.endOffset > 0 )
+ {
+ endTextNode = endContainer ;
+ endIndex = w3cRange.endOffset - 1 ;
+ }
+ else
+ {
+ endTextNode = domRange.EndNode ;
+ while ( endTextNode.nodeType != 3 )
+ endTextNode = endTextNode.lastChild ;
+ endIndex = endTextNode.length - 1 ;
+ }
+
+ var cursors = [] ;
+ var current = new CharacterCursor( startTextNode, startIndex ) ;
+ cursors.push( current ) ;
+ if ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) && !domRange.CheckIsEmpty() )
+ {
+ do
+ {
+ current = current.Clone() ;
+ current.MoveNext() ;
+ cursors.push( current ) ;
+ }
+ while ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) ) ;
+ }
+
+ return new CharacterRange( cursors, cursors.length ) ;
+}
+
+// Knuth-Morris-Pratt Algorithm for stream input
+KMP_NOMATCH = 0 ;
+KMP_ADVANCED = 1 ;
+KMP_MATCHED = 2 ;
+KmpMatch = function( pattern, ignoreCase )
+{
+ var overlap = [ -1 ] ;
+ for ( var i = 0 ; i < pattern.length ; i++ )
+ {
+ overlap.push( overlap[i] + 1 ) ;
+ while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )
+ overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1 ;
+ }
+ this._Overlap = overlap ;
+ this._State = 0 ;
+ this._IgnoreCase = ( ignoreCase === true ) ;
+ if ( ignoreCase )
+ this.Pattern = pattern.toLowerCase();
+ else
+ this.Pattern = pattern ;
+}
+KmpMatch.prototype = {
+ FeedCharacter : function( c )
+ {
+ if ( this._IgnoreCase )
+ c = c.toLowerCase();
+
+ while ( true )
+ {
+ if ( c == this.Pattern.charAt( this._State ) )
+ {
+ this._State++ ;
+ if ( this._State == this.Pattern.length )
+ {
+ // found a match, start over, don't care about partial matches involving the current match
+ this._State = 0;
+ return KMP_MATCHED;
+ }
+ return KMP_ADVANCED ;
+ }
+ else if ( this._State == 0 )
+ return KMP_NOMATCH;
+ else
+ this._State = this._Overlap[ this._State ];
+ }
+
+ return null ;
+ },
+
+ Reset : function()
+ {
+ this._State = 0 ;
+ }
+};
+
+// Place a range at the start of document.
+function OnLoad()
+{
+ // First of all, translate the dialog box texts.
+ oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+ // Show the appropriate tab at startup.
+ if ( dialogArguments.CustomValue == 'Find' )
+ {
+ dialog.SetSelectedTab( 'Find' ) ;
+ dialog.SetAutoSize( true ) ;
+ }
+ else
+ dialog.SetSelectedTab( 'Replace' ) ;
+
+ SelectField( 'txtFind' + dialogArguments.CustomValue ) ;
+}
+
+function btnStat()
+{
+ GetE('btnReplace').disabled =
+ GetE('btnReplaceAll').disabled =
+ GetE('btnFind').disabled =
+ ( GetE(idMap["FindText"]).value.length == 0 ) ;
+}
+
+function btnStatDelayed()
+{
+ setTimeout( btnStat, 1 ) ;
+}
+
+function GetSearchString()
+{
+ return GetE(idMap['FindText']).value ;
+}
+
+function GetReplaceString()
+{
+ return GetE("txtReplace").value ;
+}
+
+function GetCheckCase()
+{
+ return !! ( GetE(idMap['CheckCase']).checked ) ;
+}
+
+function GetMatchWord()
+{
+ return !! ( GetE(idMap['CheckWord']).checked ) ;
+}
+
+/* Is this character a unicode whitespace or a punctuation mark?
+ * References:
+ * http://unicode.org/Public/UNIDATA/PropList.txt (whitespaces)
+ * http://php.chinaunix.net/manual/tw/ref.regex.php (punctuation marks)
+ */
+function CheckIsWordSeparator( c )
+{
+ if ( !c )
+ return true;
+ var code = c.charCodeAt( 0 );
+ if ( code >= 9 && code <= 0xd )
+ return true;
+ if ( code >= 0x2000 && code <= 0x200a )
+ return true;
+ switch ( code )
+ {
+ case 0x20:
+ case 0x85:
+ case 0xa0:
+ case 0x1680:
+ case 0x180e:
+ case 0x2028:
+ case 0x2029:
+ case 0x202f:
+ case 0x205f:
+ case 0x3000:
+ return true;
+ default:
+ }
+ return /[.,"'?!;:]/.test( c ) ;
+}
+
+FindRange = null ;
+function _Find()
+{
+ var searchString = GetSearchString() ;
+ if ( !FindRange )
+ FindRange = new CharacterRange( new CharacterCursor( EditorDocument ), searchString.length ) ;
+ else
+ {
+ FindRange.RemoveHighlight() ;
+ FindRange = FindRange.GetNextRange( searchString.length ) ;
+ }
+ var matcher = new KmpMatch( searchString, ! GetCheckCase() ) ;
+ var matchState = KMP_NOMATCH ;
+ var character = '%' ;
+
+ while ( character != null )
+ {
+ while ( ( character = FindRange.GetEndCharacter() ) )
+ {
+ matchState = matcher.FeedCharacter( character ) ;
+ if ( matchState == KMP_MATCHED )
+ break ;
+ if ( FindRange.MoveNext() )
+ matcher.Reset() ;
+ }
+
+ if ( matchState == KMP_MATCHED )
+ {
+ if ( GetMatchWord() )
+ {
+ var cursors = FindRange.GetCursors() ;
+ var head = cursors[ cursors.length - 1 ].Clone() ;
+ var tail = cursors[0].Clone() ;
+ if ( !head.MoveNext() && !CheckIsWordSeparator( head.GetCharacter() ) )
+ continue ;
+ if ( !tail.MoveBack() && !CheckIsWordSeparator( tail.GetCharacter() ) )
+ continue ;
+ }
+
+ FindRange.Highlight() ;
+ return true ;
+ }
+ }
+
+ FindRange = null ;
+ return false ;
+}
+
+function Find()
+{
+ if ( ! _Find() )
+ alert( FCKLang.DlgFindNotFoundMsg ) ;
+}
+
+function Replace()
+{
+ var saveUndoStep = function( selectRange )
+ {
+ var ieRange ;
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ ieRange = document.selection.createRange() ;
+
+ selectRange.Select() ;
+ oEditor.FCKUndo.SaveUndoStep() ;
+ var cloneRange = selectRange.Clone() ;
+ cloneRange.Collapse( false ) ;
+ cloneRange.Select() ;
+
+ if ( ieRange )
+ setTimeout( function(){ ieRange.select() ; }, 1 ) ;
+ }
+
+ if ( FindRange && FindRange.GetHighlightDomRange() )
+ {
+ var range = FindRange.GetHighlightDomRange() ;
+ var bookmark = range.CreateBookmark() ;
+ FindRange.RemoveHighlight() ;
+ range.MoveToBookmark( bookmark ) ;
+
+ saveUndoStep( range ) ;
+ range.DeleteContents() ;
+ range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;
+ range._UpdateElementInfo() ;
+
+ FindRange = CharacterRange.CreateFromDomRange( range ) ;
+ }
+ else
+ {
+ if ( ! _Find() )
+ {
+ FindRange && FindRange.RemoveHighlight() ;
+ alert( FCKLang.DlgFindNotFoundMsg ) ;
+ }
+ }
+}
+
+function ReplaceAll()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+ var replaceCount = 0 ;
+
+ while ( _Find() )
+ {
+ var range = FindRange.GetHighlightDomRange() ;
+ var bookmark = range.CreateBookmark() ;
+ FindRange.RemoveHighlight() ;
+ range.MoveToBookmark( bookmark) ;
+
+ range.DeleteContents() ;
+ range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;
+ range._UpdateElementInfo() ;
+
+ FindRange = CharacterRange.CreateFromDomRange( range ) ;
+ replaceCount++ ;
+ }
+ if ( replaceCount == 0 )
+ {
+ FindRange && FindRange.RemoveHighlight() ;
+ alert( FCKLang.DlgFindNotFoundMsg ) ;
+ }
+ dialog.Cancel() ;
+}
+
+window.onunload = function()
+{
+ if ( FindRange )
+ {
+ FindRange.RemoveHighlight() ;
+ FindRange.ToDomRange().Select() ;
+ }
+}
+ </script>
+</head>
+<body onload="OnLoad()" style="overflow: hidden">
+ <div id="divFind" style="display: none">
+ <table cellspacing="3" cellpadding="2" width="100%" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <label for="txtFindFind" fcklang="DlgReplaceFindLbl">
+ Find what:</label>
+ </td>
+ <td width="100%">
+ <input id="txtFindFind" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"
+ type="text" />
+ </td>
+ <td>
+ <input id="btnFind" style="width: 80px" disabled="disabled" onclick="Find();"
+ type="button" value="Find" fcklang="DlgFindFindBtn" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="bottom" colspan="3">
+ &nbsp;<input id="chkCaseFind" tabindex="3" type="checkbox" /><label for="chkCaseFind" fcklang="DlgReplaceCaseChk">Match
+ case</label>
+ <br />
+ &nbsp;<input id="chkWordFind" tabindex="4" type="checkbox" /><label for="chkWordFind" fcklang="DlgReplaceWordChk">Match
+ whole word</label>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="divReplace" style="display:none">
+ <table cellspacing="3" cellpadding="2" width="100%" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <label for="txtFindReplace" fcklang="DlgReplaceFindLbl">
+ Find what:</label>
+ </td>
+ <td width="100%">
+ <input id="txtFindReplace" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"
+ type="text" />
+ </td>
+ <td>
+ <input id="btnReplace" style="width: 80px" disabled="disabled" onclick="Replace();"
+ type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" nowrap="nowrap">
+ <label for="txtReplace" fcklang="DlgReplaceReplaceLbl">
+ Replace with:</label>
+ </td>
+ <td valign="top">
+ <input id="txtReplace" style="width: 100%" tabindex="2" type="text" />
+ </td>
+ <td>
+ <input id="btnReplaceAll" style="width: 80px" disabled="disabled" onclick="ReplaceAll()" type="button"
+ value="Replace All" fcklang="DlgReplaceReplAllBtn" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="bottom" colspan="3">
+ &nbsp;<input id="chkCaseReplace" tabindex="3" type="checkbox" /><label for="chkCaseReplace" fcklang="DlgReplaceCaseChk">Match
+ case</label>
+ <br />
+ &nbsp;<input id="chkWordReplace" tabindex="4" type="checkbox" /><label for="chkWordReplace" fcklang="DlgReplaceWordChk">Match
+ whole word</label>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select.html
new file mode 100644
index 0000000..633633a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Select dialog window.
+-->
+<html>
+ <head>
+ <title>Select Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript" src="fck_select/fck_select.js"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+var oListText ;
+var oListValue ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ oListText = document.getElementById( 'cmbText' ) ;
+ oListValue = document.getElementById( 'cmbValue' ) ;
+
+ // Fix the lists widths. (Bug #970)
+ oListText.style.width = oListText.offsetWidth ;
+ oListValue.style.width = oListValue.offsetWidth ;
+
+ if ( oActiveEl && oActiveEl.tagName == 'SELECT' )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtSelValue').value = oActiveEl.value ;
+ GetE('txtLines').value = GetAttribute( oActiveEl, 'size' ) ;
+ GetE('chkMultiple').checked = oActiveEl.multiple ;
+
+ // Load the actual options
+ for ( var i = 0 ; i < oActiveEl.options.length ; i++ )
+ {
+ var sText = HTMLDecode( oActiveEl.options[i].innerHTML ) ;
+ var sValue = oActiveEl.options[i].value ;
+
+ AddComboOption( oListText, sText, sText ) ;
+ AddComboOption( oListValue, sValue, sValue ) ;
+ }
+ }
+ else
+ oActiveEl = null ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ var sSize = GetE('txtLines').value ;
+ if ( sSize == null || isNaN( sSize ) || sSize <= 1 )
+ sSize = '' ;
+
+ oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'SELECT', {name: GetE('txtName').value} ) ;
+
+ SetAttribute( oActiveEl, 'size' , sSize ) ;
+ oActiveEl.multiple = ( sSize.length > 0 && GetE('chkMultiple').checked ) ;
+
+ // Remove all options.
+ while ( oActiveEl.options.length > 0 )
+ oActiveEl.remove(0) ;
+
+ // Add all available options.
+ for ( var i = 0 ; i < oListText.options.length ; i++ )
+ {
+ var sText = oListText.options[i].value ;
+ var sValue = oListValue.options[i].value ;
+ if ( sValue.length == 0 ) sValue = sText ;
+
+ var oOption = AddComboOption( oActiveEl, sText, sValue, oDOM ) ;
+
+ if ( sValue == GetE('txtSelValue').value )
+ {
+ SetAttribute( oOption, 'selected', 'selected' ) ;
+ oOption.selected = true ;
+ }
+ }
+
+ return true ;
+}
+
+ </script>
+ </head>
+ <body style="overflow: hidden">
+ <table width="100%" height="100%">
+ <tr>
+ <td>
+ <table width="100%">
+ <tr>
+ <td nowrap><span fckLang="DlgSelectName">Name</span>&nbsp;</td>
+ <td width="100%" colSpan="2"><input id="txtName" style="WIDTH: 100%" type="text"></td>
+ </tr>
+ <tr>
+ <td nowrap><span fckLang="DlgSelectValue">Value</span>&nbsp;</td>
+ <td width="100%" colSpan="2"><input id="txtSelValue" style="WIDTH: 100%; BACKGROUND-COLOR: buttonface" type="text" readonly></td>
+ </tr>
+ <tr>
+ <td nowrap><span fckLang="DlgSelectSize">Size</span>&nbsp;</td>
+ <td nowrap><input id="txtLines" type="text" size="2" value="">&nbsp;<span fckLang="DlgSelectLines">lines</span></td>
+ <td nowrap align="right"><input id="chkMultiple" type="checkbox"><label for="chkMultiple" fckLang="DlgSelectChkMulti">Allow
+ multiple selections</label></td>
+ </tr>
+ </table>
+ <br>
+ <hr style="POSITION: absolute">
+ <span style="LEFT: 10px; POSITION: relative; TOP: -7px" class="BackColor">&nbsp;<span fckLang="DlgSelectOpAvail">Available
+ Options</span>&nbsp;</span>
+ <table width="100%">
+ <tr>
+ <td width="50%"><span fckLang="DlgSelectOpText">Text</span><br>
+ <input id="txtText" style="WIDTH: 100%" type="text">
+ </td>
+ <td width="50%"><span fckLang="DlgSelectOpValue">Value</span><br>
+ <input id="txtValue" style="WIDTH: 100%" type="text">
+ </td>
+ <td vAlign="bottom"><input onclick="Add();" type="button" fckLang="DlgSelectBtnAdd" value="Add"></td>
+ <td vAlign="bottom"><input onclick="Modify();" type="button" fckLang="DlgSelectBtnModify" value="Modify"></td>
+ </tr>
+ <tr>
+ <td rowSpan="2"><select id="cmbText" style="WIDTH: 100%" onchange="GetE('cmbValue').selectedIndex = this.selectedIndex;Select(this);"
+ size="5"></select>
+ </td>
+ <td rowSpan="2"><select id="cmbValue" style="WIDTH: 100%" onchange="GetE('cmbText').selectedIndex = this.selectedIndex;Select(this);"
+ size="5"></select>
+ </td>
+ <td vAlign="top" colSpan="2">
+ </td>
+ </tr>
+ <tr>
+ <td vAlign="bottom" colSpan="2"><input style="WIDTH: 100%" onclick="Move(-1);" type="button" fckLang="DlgSelectBtnUp" value="Up">
+ <br>
+ <input style="WIDTH: 100%" onclick="Move(1);" type="button" fckLang="DlgSelectBtnDown"
+ value="Down">
+ </td>
+ </tr>
+ <TR>
+ <TD vAlign="bottom" colSpan="4"><INPUT onclick="SetSelectedValue();" type="button" fckLang="DlgSelectBtnSetValue" value="Set as selected value">&nbsp;&nbsp;
+ <input onclick="Delete();" type="button" fckLang="DlgSelectBtnDelete" value="Delete"></TD>
+ </TR>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select/fck_select.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select/fck_select.js
new file mode 100644
index 0000000..3a03475
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select/fck_select.js
@@ -0,0 +1,194 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts for the fck_select.html page.
+ */
+
+function Select( combo )
+{
+ var iIndex = combo.selectedIndex ;
+
+ oListText.selectedIndex = iIndex ;
+ oListValue.selectedIndex = iIndex ;
+
+ var oTxtText = document.getElementById( "txtText" ) ;
+ var oTxtValue = document.getElementById( "txtValue" ) ;
+
+ oTxtText.value = oListText.value ;
+ oTxtValue.value = oListValue.value ;
+}
+
+function Add()
+{
+ var oTxtText = document.getElementById( "txtText" ) ;
+ var oTxtValue = document.getElementById( "txtValue" ) ;
+
+ AddComboOption( oListText, oTxtText.value, oTxtText.value ) ;
+ AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ;
+
+ oListText.selectedIndex = oListText.options.length - 1 ;
+ oListValue.selectedIndex = oListValue.options.length - 1 ;
+
+ oTxtText.value = '' ;
+ oTxtValue.value = '' ;
+
+ oTxtText.focus() ;
+}
+
+function Modify()
+{
+ var iIndex = oListText.selectedIndex ;
+
+ if ( iIndex < 0 ) return ;
+
+ var oTxtText = document.getElementById( "txtText" ) ;
+ var oTxtValue = document.getElementById( "txtValue" ) ;
+
+ oListText.options[ iIndex ].innerHTML = HTMLEncode( oTxtText.value ) ;
+ oListText.options[ iIndex ].value = oTxtText.value ;
+
+ oListValue.options[ iIndex ].innerHTML = HTMLEncode( oTxtValue.value ) ;
+ oListValue.options[ iIndex ].value = oTxtValue.value ;
+
+ oTxtText.value = '' ;
+ oTxtValue.value = '' ;
+
+ oTxtText.focus() ;
+}
+
+function Move( steps )
+{
+ ChangeOptionPosition( oListText, steps ) ;
+ ChangeOptionPosition( oListValue, steps ) ;
+}
+
+function Delete()
+{
+ RemoveSelectedOptions( oListText ) ;
+ RemoveSelectedOptions( oListValue ) ;
+}
+
+function SetSelectedValue()
+{
+ var iIndex = oListValue.selectedIndex ;
+ if ( iIndex < 0 ) return ;
+
+ var oTxtValue = document.getElementById( "txtSelValue" ) ;
+
+ oTxtValue.value = oListValue.options[ iIndex ].value ;
+}
+
+// Moves the selected option by a number of steps (also negative)
+function ChangeOptionPosition( combo, steps )
+{
+ var iActualIndex = combo.selectedIndex ;
+
+ if ( iActualIndex < 0 )
+ return ;
+
+ var iFinalIndex = iActualIndex + steps ;
+
+ if ( iFinalIndex < 0 )
+ iFinalIndex = 0 ;
+
+ if ( iFinalIndex > ( combo.options.length - 1 ) )
+ iFinalIndex = combo.options.length - 1 ;
+
+ if ( iActualIndex == iFinalIndex )
+ return ;
+
+ var oOption = combo.options[ iActualIndex ] ;
+ var sText = HTMLDecode( oOption.innerHTML ) ;
+ var sValue = oOption.value ;
+
+ combo.remove( iActualIndex ) ;
+
+ oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ;
+
+ oOption.selected = true ;
+}
+
+// Remove all selected options from a SELECT object
+function RemoveSelectedOptions(combo)
+{
+ // Save the selected index
+ var iSelectedIndex = combo.selectedIndex ;
+
+ var oOptions = combo.options ;
+
+ // Remove all selected options
+ for ( var i = oOptions.length - 1 ; i >= 0 ; i-- )
+ {
+ if (oOptions[i].selected) combo.remove(i) ;
+ }
+
+ // Reset the selection based on the original selected index
+ if ( combo.options.length > 0 )
+ {
+ if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ;
+ combo.selectedIndex = iSelectedIndex ;
+ }
+}
+
+// Add a new option to a SELECT object (combo or list)
+function AddComboOption( combo, optionText, optionValue, documentObject, index )
+{
+ var oOption ;
+
+ if ( documentObject )
+ oOption = documentObject.createElement("OPTION") ;
+ else
+ oOption = document.createElement("OPTION") ;
+
+ if ( index != null )
+ combo.options.add( oOption, index ) ;
+ else
+ combo.options.add( oOption ) ;
+
+ oOption.innerHTML = optionText.length > 0 ? HTMLEncode( optionText ) : '&nbsp;' ;
+ oOption.value = optionValue ;
+
+ return oOption ;
+}
+
+function HTMLEncode( text )
+{
+ if ( !text )
+ return '' ;
+
+ text = text.replace( /&/g, '&amp;' ) ;
+ text = text.replace( /</g, '&lt;' ) ;
+ text = text.replace( />/g, '&gt;' ) ;
+
+ return text ;
+}
+
+
+function HTMLDecode( text )
+{
+ if ( !text )
+ return '' ;
+
+ text = text.replace( /&gt;/g, '>' ) ;
+ text = text.replace( /&lt;/g, '<' ) ;
+ text = text.replace( /&amp;/g, '&' ) ;
+
+ return text ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_smiley.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_smiley.html
new file mode 100644
index 0000000..bd2eaea
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_smiley.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Smileys (emoticons) dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <style type="text/css">
+ .Hand
+ {
+ cursor: pointer;
+ cursor: hand;
+ }
+ </style>
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+window.onload = function ()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ dialog.SetAutoSize( true ) ;
+}
+
+function InsertSmiley( url )
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ var oImg = oEditor.FCK.InsertElement( 'img' ) ;
+ oImg.src = url ;
+ oImg.setAttribute( '_fcksavedurl', url ) ;
+
+ // For long smileys list, it seams that IE continues loading the images in
+ // the background when you quickly select one image. so, let's clear
+ // everything before closing.
+ document.body.innerHTML = '' ;
+
+ dialog.Cancel() ;
+}
+
+function over(td)
+{
+ td.className = 'LightBackground Hand' ;
+}
+
+function out(td)
+{
+ td.className = 'DarkBackground Hand' ;
+}
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table cellpadding="2" cellspacing="2" align="center" border="0" width="100%" height="100%">
+ <script type="text/javascript">
+
+var FCKConfig = oEditor.FCKConfig ;
+
+var sBasePath = FCKConfig.SmileyPath ;
+var aImages = FCKConfig.SmileyImages ;
+var iCols = FCKConfig.SmileyColumns ;
+var iColWidth = parseInt( 100 / iCols, 10 ) ;
+
+var i = 0 ;
+while (i < aImages.length)
+{
+ document.write( '<tr>' ) ;
+ for(var j = 0 ; j < iCols ; j++)
+ {
+ if (aImages[i])
+ {
+ var sUrl = sBasePath + aImages[i] ;
+ document.write( '<td width="' + iColWidth + '%" align="center" class="DarkBackground Hand" onclick="InsertSmiley(\'' + sUrl.replace(/'/g, "\\'" ) + '\')" onmouseover="over(this)" onmouseout="out(this)">' ) ;
+ document.write( '<img src="' + sUrl + '" border="0" />' ) ;
+ }
+ else
+ document.write( '<td width="' + iColWidth + '%" class="DarkBackground">&nbsp;' ) ;
+ document.write( '<\/td>' ) ;
+ i++ ;
+ }
+ document.write('<\/tr>') ;
+}
+
+ </script>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_source.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_source.html
new file mode 100644
index 0000000..d61e710
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_source.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Source editor dialog window.
+-->
+<html>
+ <head>
+ <title>Source</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta name="robots" content="noindex, nofollow">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script language="javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+var FCKConfig = oEditor.FCKConfig ;
+var FCKTools = oEditor.FCKTools ;
+
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
+
+window.onload = function()
+{
+ // EnableXHTML and EnableSourceXHTML has been deprecated
+// document.getElementById('txtSource').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ;
+ document.getElementById('txtSource').value = FCK.GetXHTML( FCKConfig.FormatSource ) ;
+
+ // Activate the "OK" button.
+ window.parent.SetOkButton( true ) ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ FCK.SetData( document.getElementById('txtSource').value, false ) ;
+
+ return true ;
+}
+ </script>
+ </head>
+ <body scroll="no" style="OVERFLOW: hidden">
+ <table width="100%" height="100%">
+ <tr>
+ <td height="100%"><textarea id="txtSource" dir="ltr" style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; WIDTH: 100%; PADDING-TOP: 5px; FONT-FAMILY: Monospace; HEIGHT: 100%">Loading. Please wait...</textarea></td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_specialchar.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_specialchar.html
new file mode 100644
index 0000000..eb0238c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_specialchar.html
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Special Chars Selector dialog window.
+-->
+<html>
+ <head>
+ <meta name="robots" content="noindex, nofollow">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style type="text/css">
+ .Hand
+ {
+ cursor: pointer ;
+ cursor: hand ;
+ }
+ .Sample { font-size: 24px; }
+ </style>
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+var oSample ;
+
+function insertChar(charValue)
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+ oEditor.FCK.InsertHtml( charValue || "" ) ;
+ window.parent.Cancel() ;
+}
+
+function over(td)
+{
+ if ( ! oSample )
+ return ;
+ oSample.innerHTML = td.innerHTML ;
+ td.className = 'LightBackground SpecialCharsOver Hand' ;
+}
+
+function out(td)
+{
+ if ( ! oSample )
+ return ;
+ oSample.innerHTML = "&nbsp;" ;
+ td.className = 'DarkBackground SpecialCharsOut Hand' ;
+}
+
+function setDefaults()
+{
+ // Gets the sample placeholder.
+ oSample = document.getElementById("SampleTD") ;
+
+ // First of all, translates the dialog box texts.
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ window.parent.SetAutoSize( true ) ;
+}
+
+ </script>
+ </head>
+ <body onload="setDefaults()" style="overflow: hidden">
+ <table cellpadding="0" cellspacing="0" width="100%" height="100%">
+ <tr>
+ <td width="100%">
+ <table cellpadding="1" cellspacing="1" align="center" border="0" width="100%" height="100%">
+ <script type="text/javascript">
+var aChars = ["!","&quot;","#","$","%","&amp;","\\'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&lt;","=","&gt;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","&euro;","&lsquo;","&rsquo;","&rsquo;","&ldquo;","&rdquo;","&ndash;","&mdash;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;","&uml;","&copy;","&ordf;","&laquo;","&not;","&reg;","&macr;","&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;","&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;","&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;","&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;","&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;","&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;","&divide;","&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&uuml;","&yacute;","&thorn;","&yuml;","&OElig;","&oelig;","&#372;","&#374","&#373","&#375;","&sbquo;","&#8219;","&bdquo;","&hellip;","&trade;","&#9658;","&bull;","&rarr;","&rArr;","&hArr;","&diams;","&asymp;"] ;
+
+var cols = 20 ;
+
+var i = 0 ;
+while (i < aChars.length)
+{
+ document.write("<TR>") ;
+ for(var j = 0 ; j < cols ; j++)
+ {
+ if (aChars[i])
+ {
+ document.write('<TD width="1%" class="DarkBackground SpecialCharsOut Hand" align="center" onclick="insertChar(\'' + aChars[i].replace(/&/g, "&amp;") + '\')" onmouseover="over(this)" onmouseout="out(this)">') ;
+ document.write(aChars[i]) ;
+ }
+ else
+ document.write("<TD class='DarkBackground SpecialCharsOut'>&nbsp;") ;
+ document.write("<\/TD>") ;
+ i++ ;
+ }
+ document.write("<\/TR>") ;
+}
+ </script>
+ </table>
+ </td>
+ <td nowrap>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td valign="top">
+ <table width="40" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td id="SampleTD" width="40" height="40" align="center" class="DarkBackground SpecialCharsOut Sample">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages.html
new file mode 100644
index 0000000..cd2355d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Spell Check dialog window.
+-->
+<html>
+ <head>
+ <title>Spell Check</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script src="fck_spellerpages/spellerpages/spellChecker.js"></script>
+ <script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+
+window.onload = function()
+{
+ document.getElementById('txtHtml').value = oEditor.FCK.EditorDocument.body.innerHTML ;
+
+ var oSpeller = new spellChecker( document.getElementById('txtHtml') ) ;
+ oSpeller.spellCheckScript = oEditor.FCKConfig.SpellerPagesServerScript || 'server-scripts/spellchecker.php' ;
+ oSpeller.OnFinished = oSpeller_OnFinished ;
+ oSpeller.openChecker() ;
+}
+
+function OnSpellerControlsLoad( controlsWindow )
+{
+ // Translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage( controlsWindow.document ) ;
+}
+
+function oSpeller_OnFinished( numberOCorrections )
+{
+ if ( numberOCorrections > 0 )
+ {
+ oEditor.FCKUndo.SaveUndoStep() ;
+ oEditor.FCK.EditorDocument.body.innerHTML = document.getElementById('txtHtml').value ;
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ oEditor.FCKSelection.Collapse( true ) ;
+ }
+ window.parent.Cancel() ;
+}
+
+ </script>
+ </head>
+ <body style="OVERFLOW: hidden" scroll="no" style="padding:0px;">
+ <input type="hidden" id="txtHtml" value="">
+ <iframe id="frmSpell" src="javascript:void(0)" name="spellchecker" width="100%" height="100%" frameborder="0"></iframe>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
new file mode 100644
index 0000000..80af849
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
@@ -0,0 +1,87 @@
+////////////////////////////////////////////////////
+// controlWindow object
+////////////////////////////////////////////////////
+function controlWindow( controlForm ) {
+ // private properties
+ this._form = controlForm;
+
+ // public properties
+ this.windowType = "controlWindow";
+// this.noSuggestionSelection = "- No suggestions -"; // by FredCK
+ this.noSuggestionSelection = FCKLang.DlgSpellNoSuggestions ;
+ // set up the properties for elements of the given control form
+ this.suggestionList = this._form.sugg;
+ this.evaluatedText = this._form.misword;
+ this.replacementText = this._form.txtsugg;
+ this.undoButton = this._form.btnUndo;
+
+ // public methods
+ this.addSuggestion = addSuggestion;
+ this.clearSuggestions = clearSuggestions;
+ this.selectDefaultSuggestion = selectDefaultSuggestion;
+ this.resetForm = resetForm;
+ this.setSuggestedText = setSuggestedText;
+ this.enableUndo = enableUndo;
+ this.disableUndo = disableUndo;
+}
+
+function resetForm() {
+ if( this._form ) {
+ this._form.reset();
+ }
+}
+
+function setSuggestedText() {
+ var slct = this.suggestionList;
+ var txt = this.replacementText;
+ var str = "";
+ if( (slct.options[0].text) && slct.options[0].text != this.noSuggestionSelection ) {
+ str = slct.options[slct.selectedIndex].text;
+ }
+ txt.value = str;
+}
+
+function selectDefaultSuggestion() {
+ var slct = this.suggestionList;
+ var txt = this.replacementText;
+ if( slct.options.length == 0 ) {
+ this.addSuggestion( this.noSuggestionSelection );
+ } else {
+ slct.options[0].selected = true;
+ }
+ this.setSuggestedText();
+}
+
+function addSuggestion( sugg_text ) {
+ var slct = this.suggestionList;
+ if( sugg_text ) {
+ var i = slct.options.length;
+ var newOption = new Option( sugg_text, 'sugg_text'+i );
+ slct.options[i] = newOption;
+ }
+}
+
+function clearSuggestions() {
+ var slct = this.suggestionList;
+ for( var j = slct.length - 1; j > -1; j-- ) {
+ if( slct.options[j] ) {
+ slct.options[j] = null;
+ }
+ }
+}
+
+function enableUndo() {
+ if( this.undoButton ) {
+ if( this.undoButton.disabled == true ) {
+ this.undoButton.disabled = false;
+ }
+ }
+}
+
+function disableUndo() {
+ if( this.undoButton ) {
+ if( this.undoButton.disabled == false ) {
+ this.undoButton.disabled = true;
+ }
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
new file mode 100644
index 0000000..d91bcce
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
@@ -0,0 +1,153 @@
+<html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="spellerStyle.css" />
+ <script type="text/javascript" src="controlWindow.js"></script>
+ <script type="text/javascript">
+var spellerObject;
+var controlWindowObj;
+
+if( parent.opener ) {
+ spellerObject = parent.opener.speller;
+}
+
+function ignore_word() {
+ if( spellerObject ) {
+ spellerObject.ignoreWord();
+ }
+}
+
+function ignore_all() {
+ if( spellerObject ) {
+ spellerObject.ignoreAll();
+ }
+}
+
+function replace_word() {
+ if( spellerObject ) {
+ spellerObject.replaceWord();
+ }
+}
+
+function replace_all() {
+ if( spellerObject ) {
+ spellerObject.replaceAll();
+ }
+}
+
+function end_spell() {
+ if( spellerObject ) {
+ spellerObject.terminateSpell();
+ }
+}
+
+function undo() {
+ if( spellerObject ) {
+ spellerObject.undo();
+ }
+}
+
+function suggText() {
+ if( controlWindowObj ) {
+ controlWindowObj.setSuggestedText();
+ }
+}
+
+var FCKLang = window.parent.parent.FCKLang ; // by FredCK
+
+function init_spell() {
+ // By FredCK (fckLang attributes have been added to the HTML source of this page)
+ window.parent.parent.OnSpellerControlsLoad( this ) ;
+
+ var controlForm = document.spellcheck;
+
+ // create a new controlWindow object
+ controlWindowObj = new controlWindow( controlForm );
+
+ // call the init_spell() function in the parent frameset
+ if( parent.frames.length ) {
+ parent.init_spell( controlWindowObj );
+ } else {
+ alert( 'This page was loaded outside of a frameset. It might not display properly' );
+ }
+}
+
+</script>
+ </head>
+ <body class="controlWindowBody" onLoad="init_spell();" style="OVERFLOW: hidden" scroll="no"> <!-- by FredCK -->
+ <form name="spellcheck">
+ <table border="0" cellpadding="0" cellspacing="0" border="0" align="center">
+ <tr>
+ <td colspan="3" class="normalLabel"><span fckLang="DlgSpellNotInDic">Not in dictionary:</span></td>
+ </tr>
+ <tr>
+ <td colspan="3"><input class="readonlyInput" type="text" name="misword" readonly /></td>
+ </tr>
+ <tr>
+ <td colspan="3" height="5"></td>
+ </tr>
+ <tr>
+ <td class="normalLabel"><span fckLang="DlgSpellChangeTo">Change to:</span></td>
+ </tr>
+ <tr valign="top">
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="normalLabel">
+ <input class="textDefault" type="text" name="txtsugg" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select class="suggSlct" name="sugg" size="7" onChange="suggText();" onDblClick="replace_word();">
+ <option></option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td>
+ <input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnore" value="Ignore" onClick="ignore_word();">
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <td>
+ <input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnoreAll" value="Ignore All" onClick="ignore_all();">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3" height="5"></td>
+ </tr>
+ <tr>
+ <td>
+ <input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplace" value="Replace" onClick="replace_word();">
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <td>
+ <input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplaceAll" value="Replace All" onClick="replace_all();">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3" height="5"></td>
+ </tr>
+ <tr>
+ <td>
+ <input class="buttonDefault" type="button" name="btnUndo" fckLang="DlgSpellBtnUndo" value="Undo" onClick="undo();"
+ disabled>
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <td>
+ <!-- by FredCK
+ <input class="buttonDefault" type="button" value="Close" onClick="end_spell();">
+ -->
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
new file mode 100644
index 0000000..27e368e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
@@ -0,0 +1,148 @@
+<cfsetting enablecfoutputonly="true">
+<!---
+This code uses a CF User Defined Function and should work in CF version 5.0
+and up without alteration.
+
+Also if you are hosting your site at an ISP, you will have to check with them
+to see if the use of <CFEXECUTE> is allowed. In most cases ISP will not allow
+the use of that tag for security reasons. Clients would be able to access each
+others files in certain cases.
+--->
+
+<!--- The following variables values must reflect your installation. --->
+<cfset aspell_dir = "C:\Program Files\Aspell\bin">
+<cfset lang = "en_US">
+<cfset aspell_opts = "-a --lang=#lang# --encoding=utf-8 -H --rem-sgml-check=alt">
+<cfset tempfile_in = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset tempfile_out = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset spellercss = "../spellerStyle.css">
+<cfset word_win_src = "../wordWindow.js">
+
+<cfset form.checktext = form["textinputs[]"]>
+
+<!--- make no difference between URL and FORM scopes --->
+<cfparam name="url.checktext" default="">
+<cfparam name="form.checktext" default="#url.checktext#">
+
+<!--- Takes care of those pesky smart quotes from MS apps, replaces them with regular quotes --->
+<cfset submitted_text = ReplaceList(form.checktext,"%u201C,%u201D","%22,%22")>
+
+<!--- submitted_text now is ready for processing --->
+
+<!--- use carat on each line to escape possible aspell commands --->
+<cfset text = "">
+<cfset CRLF = Chr(13) & Chr(10)>
+
+<cfloop list="#submitted_text#" index="field" delimiters=",">
+ <cfset text = text & "%" & CRLF
+ & "^A" & CRLF
+ & "!" & CRLF>
+ <!--- Strip all tags for the text. (by FredCK - #339 / #681) --->
+ <cfset field = REReplace(URLDecode(field), "<[^>]+>", " ", "all")>
+ <cfloop list="#field#" index="line" delimiters="#CRLF#">
+ <cfset text = ListAppend(text, "^" & Trim(JSStringFormat(line)), CRLF)>
+ </cfloop>
+</cfloop>
+
+<!--- create temp file from the submitted text, this will be passed to aspell to be check for misspelled words --->
+<cffile action="write" file="#tempfile_in#" output="#text#" charset="utf-8">
+
+<!--- execute aspell in an UTF-8 console and redirect output to a file. UTF-8 encoding is lost if done differently --->
+<cfexecute name="cmd.exe" arguments='/c type "#tempfile_in#" | "#aspell_dir#\aspell.exe" #aspell_opts# > "#tempfile_out#"' timeout="100"/>
+
+<!--- read output file for further processing --->
+<cffile action="read" file="#tempfile_out#" variable="food" charset="utf-8">
+
+<!--- remove temp files --->
+<cffile action="delete" file="#tempfile_in#">
+<cffile action="delete" file="#tempfile_out#">
+
+<cfset texts = StructNew()>
+<cfset texts.textinputs = "">
+<cfset texts.words = "">
+<cfset texts.abort = "">
+
+<!--- Generate Text Inputs --->
+<cfset i = 0>
+<cfloop list="#submitted_text#" index="textinput">
+ <cfset texts.textinputs = ListAppend(texts.textinputs, 'textinputs[#i#] = decodeURIComponent("#textinput#");', CRLF)>
+ <cfset i = i + 1>
+</cfloop>
+
+<!--- Generate Words Lists --->
+<cfset word_cnt = 0>
+<cfset input_cnt = -1>
+<cfloop list="#food#" index="aspell_line" delimiters="#CRLF#">
+ <cfset leftChar = Left(aspell_line, 1)>
+ <cfif leftChar eq "*">
+ <cfset input_cnt = input_cnt + 1>
+ <cfset word_cnt = 0>
+ <cfset texts.words = ListAppend(texts.words, "words[#input_cnt#] = [];", CRLF)>
+ <cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#] = [];", CRLF)>
+ <cfelse>
+ <cfif leftChar eq "&" or leftChar eq "##">
+ <!--- word that misspelled --->
+ <cfset bad_word = Trim(ListGetAt(aspell_line, 2, " "))>
+ <cfset bad_word = Replace(bad_word, "'", "\'", "ALL")>
+ <!--- sugestions --->
+ <cfset sug_list = Trim(ListRest(aspell_line, ":"))>
+ <cfset sug_list = ListQualify(Replace(sug_list, "'", "\'", "ALL"), "'")>
+ <!--- javascript --->
+ <cfset texts.words = ListAppend(texts.words, "words[#input_cnt#][#word_cnt#] = '#bad_word#';", CRLF)>
+ <cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#][#word_cnt#] = [#sug_list#];", CRLF)>
+ <cfset word_cnt = word_cnt + 1>
+ </cfif>
+ </cfif>
+</cfloop>
+
+<cfif texts.words eq "">
+ <cfset texts.abort = "alert('Spell check complete.\n\nNo misspellings found.'); top.window.close();">
+</cfif>
+
+<cfcontent type="text/html; charset=utf-8">
+
+<cfoutput><html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="#spellercss#" />
+<script language="javascript" src="#word_win_src#"></script>
+<script language="javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+
+#texts.textinputs##CRLF#
+#texts.words#
+#texts.abort#
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+ // check if any error occured during server-side processing
+ if( error ) {
+ alert( error );
+ } else {
+ // call the init_spell() function in the parent frameset
+ if (parent.frames.length) {
+ parent.init_spell( wordWindowObj );
+ } else {
+ alert('This page was loaded outside of a frameset. It might not display properly');
+ }
+ }
+}
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html></cfoutput>
+<cfsetting enablecfoutputonly="false">
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
new file mode 100644
index 0000000..9c747c9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
@@ -0,0 +1,199 @@
+<?php
+header('Content-type: text/html; charset=utf-8');
+
+// The following variables values must reflect your installation needs.
+
+$aspell_prog = '"C:\Program Files\Aspell\bin\aspell.exe"'; // by FredCK (for Windows)
+//$aspell_prog = 'aspell'; // by FredCK (for Linux)
+
+$lang = 'en_US';
+$aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt"; // by FredCK
+
+$tempfiledir = "./";
+
+$spellercss = '../spellerStyle.css'; // by FredCK
+$word_win_src = '../wordWindow.js'; // by FredCK
+
+$textinputs = $_POST['textinputs']; # array
+$input_separator = "A";
+
+# set the JavaScript variable to the submitted text.
+# textinputs is an array, each element corresponding to the (url-encoded)
+# value of the text control submitted for spell-checking
+function print_textinputs_var() {
+ global $textinputs;
+ foreach( $textinputs as $key=>$val ) {
+ # $val = str_replace( "'", "%27", $val );
+ echo "textinputs[$key] = decodeURIComponent(\"" . $val . "\");\n";
+ }
+}
+
+# make declarations for the text input index
+function print_textindex_decl( $text_input_idx ) {
+ echo "words[$text_input_idx] = [];\n";
+ echo "suggs[$text_input_idx] = [];\n";
+}
+
+# set an element of the JavaScript 'words' array to a misspelled word
+function print_words_elem( $word, $index, $text_input_idx ) {
+ echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';\n";
+}
+
+
+# set an element of the JavaScript 'suggs' array to a list of suggestions
+function print_suggs_elem( $suggs, $index, $text_input_idx ) {
+ echo "suggs[$text_input_idx][$index] = [";
+ foreach( $suggs as $key=>$val ) {
+ if( $val ) {
+ echo "'" . escape_quote( $val ) . "'";
+ if ( $key+1 < count( $suggs )) {
+ echo ", ";
+ }
+ }
+ }
+ echo "];\n";
+}
+
+# escape single quote
+function escape_quote( $str ) {
+ return preg_replace ( "/'/", "\\'", $str );
+}
+
+
+# handle a server-side error.
+function error_handler( $err ) {
+ echo "error = '" . preg_replace( "/['\\\\]/", "\\\\$0", $err ) . "';\n";
+}
+
+## get the list of misspelled words. Put the results in the javascript words array
+## for each misspelled word, get suggestions and put in the javascript suggs array
+function print_checker_results() {
+
+ global $aspell_prog;
+ global $aspell_opts;
+ global $tempfiledir;
+ global $textinputs;
+ global $input_separator;
+ $aspell_err = "";
+ # create temp file
+ $tempfile = tempnam( $tempfiledir, 'aspell_data_' );
+
+ # open temp file, add the submitted text.
+ if( $fh = fopen( $tempfile, 'w' )) {
+ for( $i = 0; $i < count( $textinputs ); $i++ ) {
+ $text = urldecode( $textinputs[$i] );
+
+ // Strip all tags for the text. (by FredCK - #339 / #681)
+ $text = preg_replace( "/<[^>]+>/", " ", $text ) ;
+
+ $lines = explode( "\n", $text );
+ fwrite ( $fh, "%\n" ); # exit terse mode
+ fwrite ( $fh, "^$input_separator\n" );
+ fwrite ( $fh, "!\n" ); # enter terse mode
+ foreach( $lines as $key=>$value ) {
+ # use carat on each line to escape possible aspell commands
+ fwrite( $fh, "^$value\n" );
+ }
+ }
+ fclose( $fh );
+
+ # exec aspell command - redirect STDERR to STDOUT
+ $cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1";
+ if( $aspellret = shell_exec( $cmd )) {
+ $linesout = explode( "\n", $aspellret );
+ $index = 0;
+ $text_input_index = -1;
+ # parse each line of aspell return
+ foreach( $linesout as $key=>$val ) {
+ $chardesc = substr( $val, 0, 1 );
+ # if '&', then not in dictionary but has suggestions
+ # if '#', then not in dictionary and no suggestions
+ # if '*', then it is a delimiter between text inputs
+ # if '@' then version info
+ if( $chardesc == '&' || $chardesc == '#' ) {
+ $line = explode( " ", $val, 5 );
+ print_words_elem( $line[1], $index, $text_input_index );
+ if( isset( $line[4] )) {
+ $suggs = explode( ", ", $line[4] );
+ } else {
+ $suggs = array();
+ }
+ print_suggs_elem( $suggs, $index, $text_input_index );
+ $index++;
+ } elseif( $chardesc == '*' ) {
+ $text_input_index++;
+ print_textindex_decl( $text_input_index );
+ $index = 0;
+ } elseif( $chardesc != '@' && $chardesc != "" ) {
+ # assume this is error output
+ $aspell_err .= $val;
+ }
+ }
+ if( $aspell_err ) {
+ $aspell_err = "Error executing `$cmd`\\n$aspell_err";
+ error_handler( $aspell_err );
+ }
+ } else {
+ error_handler( "System error: Aspell program execution failed (`$cmd`)" );
+ }
+ } else {
+ error_handler( "System error: Could not open file '$tempfile' for writing" );
+ }
+
+ # close temp file, delete file
+ unlink( $tempfile );
+}
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="<?php echo $spellercss ?>" />
+<script language="javascript" src="<?php echo $word_win_src ?>"></script>
+<script language="javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+<?php
+
+print_textinputs_var();
+
+print_checker_results();
+
+?>
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+ // check if any error occured during server-side processing
+ if( error ) {
+ alert( error );
+ } else {
+ // call the init_spell() function in the parent frameset
+ if (parent.frames.length) {
+ parent.init_spell( wordWindowObj );
+ } else {
+ alert('This page was loaded outside of a frameset. It might not display properly');
+ }
+ }
+}
+
+
+
+</script>
+
+</head>
+<!-- <body onLoad="init_spell();"> by FredCK -->
+<body onLoad="init_spell();" bgcolor="#ffffff">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
new file mode 100644
index 0000000..fae010d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
@@ -0,0 +1,181 @@
+#!/usr/bin/perl
+
+use CGI qw/ :standard /;
+use File::Temp qw/ tempfile tempdir /;
+
+# my $spellercss = '/speller/spellerStyle.css'; # by FredCK
+my $spellercss = '../spellerStyle.css'; # by FredCK
+# my $wordWindowSrc = '/speller/wordWindow.js'; # by FredCK
+my $wordWindowSrc = '../wordWindow.js'; # by FredCK
+my @textinputs = param( 'textinputs[]' ); # array
+# my $aspell_cmd = 'aspell'; # by FredCK (for Linux)
+my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"'; # by FredCK (for Windows)
+my $lang = 'en_US';
+# my $aspell_opts = "-a --lang=$lang --encoding=utf-8"; # by FredCK
+my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt"; # by FredCK
+my $input_separator = "A";
+
+# set the 'wordtext' JavaScript variable to the submitted text.
+sub printTextVar {
+ for( my $i = 0; $i <= $#textinputs; $i++ ) {
+ print "textinputs[$i] = decodeURIComponent('" . escapeQuote( $textinputs[$i] ) . "')\n";
+ }
+}
+
+sub printTextIdxDecl {
+ my $idx = shift;
+ print "words[$idx] = [];\n";
+ print "suggs[$idx] = [];\n";
+}
+
+sub printWordsElem {
+ my( $textIdx, $wordIdx, $word ) = @_;
+ print "words[$textIdx][$wordIdx] = '" . escapeQuote( $word ) . "';\n";
+}
+
+sub printSuggsElem {
+ my( $textIdx, $wordIdx, @suggs ) = @_;
+ print "suggs[$textIdx][$wordIdx] = [";
+ for my $i ( 0..$#suggs ) {
+ print "'" . escapeQuote( $suggs[$i] ) . "'";
+ if( $i < $#suggs ) {
+ print ", ";
+ }
+ }
+ print "];\n";
+}
+
+sub printCheckerResults {
+ my $textInputIdx = -1;
+ my $wordIdx = 0;
+ my $unhandledText;
+ # create temp file
+ my $dir = tempdir( CLEANUP => 1 );
+ my( $fh, $tmpfilename ) = tempfile( DIR => $dir );
+
+ # temp file was created properly?
+
+ # open temp file, add the submitted text.
+ for( my $i = 0; $i <= $#textinputs; $i++ ) {
+ $text = url_decode( $textinputs[$i] );
+ # Strip all tags for the text. (by FredCK - #339 / #681)
+ $text =~ s/<[^>]+>/ /g;
+ @lines = split( /\n/, $text );
+ print $fh "\%\n"; # exit terse mode
+ print $fh "^$input_separator\n";
+ print $fh "!\n"; # enter terse mode
+ for my $line ( @lines ) {
+ # use carat on each line to escape possible aspell commands
+ print $fh "^$line\n";
+ }
+
+ }
+ # exec aspell command
+ my $cmd = "$aspell_cmd $aspell_opts < $tmpfilename 2>&1";
+ open ASPELL, "$cmd |" or handleError( "Could not execute `$cmd`\\n$!" ) and return;
+ # parse each line of aspell return
+ for my $ret ( <ASPELL> ) {
+ chomp( $ret );
+ # if '&', then not in dictionary but has suggestions
+ # if '#', then not in dictionary and no suggestions
+ # if '*', then it is a delimiter between text inputs
+ if( $ret =~ /^\*/ ) {
+ $textInputIdx++;
+ printTextIdxDecl( $textInputIdx );
+ $wordIdx = 0;
+
+ } elsif( $ret =~ /^(&|#)/ ) {
+ my @tokens = split( " ", $ret, 5 );
+ printWordsElem( $textInputIdx, $wordIdx, $tokens[1] );
+ my @suggs = ();
+ if( $tokens[4] ) {
+ @suggs = split( ", ", $tokens[4] );
+ }
+ printSuggsElem( $textInputIdx, $wordIdx, @suggs );
+ $wordIdx++;
+ } else {
+ $unhandledText .= $ret;
+ }
+ }
+ close ASPELL or handleError( "Error executing `$cmd`\\n$unhandledText" ) and return;
+}
+
+sub escapeQuote {
+ my $str = shift;
+ $str =~ s/'/\\'/g;
+ return $str;
+}
+
+sub handleError {
+ my $err = shift;
+ print "error = '" . escapeQuote( $err ) . "';\n";
+}
+
+sub url_decode {
+ local $_ = @_ ? shift : $_;
+ defined or return;
+ # change + signs to spaces
+ tr/+/ /;
+ # change hex escapes to the proper characters
+ s/%([a-fA-F0-9]{2})/pack "H2", $1/eg;
+ return $_;
+}
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# Display HTML
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+print <<EOF;
+Content-type: text/html; charset=utf-8
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="$spellercss"/>
+<script src="$wordWindowSrc"></script>
+<script type="text/javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+EOF
+
+printTextVar();
+
+printCheckerResults();
+
+print <<EOF;
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+
+function init_spell() {
+ // check if any error occured during server-side processing
+ if( error ) {
+ alert( error );
+ } else {
+ // call the init_spell() function in the parent frameset
+ if (parent.frames.length) {
+ parent.init_spell( wordWindowObj );
+ } else {
+ error = "This page was loaded outside of a frameset. ";
+ error += "It might not display properly";
+ alert( error );
+ }
+ }
+}
+
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+EOF
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
new file mode 100644
index 0000000..c85be9a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
@@ -0,0 +1,461 @@
+////////////////////////////////////////////////////
+// spellChecker.js
+//
+// spellChecker object
+//
+// This file is sourced on web pages that have a textarea object to evaluate
+// for spelling. It includes the implementation for the spellCheckObject.
+//
+////////////////////////////////////////////////////
+
+
+// constructor
+function spellChecker( textObject ) {
+
+ // public properties - configurable
+// this.popUpUrl = '/speller/spellchecker.html'; // by FredCK
+ this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html'; // by FredCK
+ this.popUpName = 'spellchecker';
+// this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes"; // by FredCK
+ this.popUpProps = null ; // by FredCK
+// this.spellCheckScript = '/speller/server-scripts/spellchecker.php'; // by FredCK
+ //this.spellCheckScript = '/cgi-bin/spellchecker.pl';
+
+ // values used to keep track of what happened to a word
+ this.replWordFlag = "R"; // single replace
+ this.ignrWordFlag = "I"; // single ignore
+ this.replAllFlag = "RA"; // replace all occurances
+ this.ignrAllFlag = "IA"; // ignore all occurances
+ this.fromReplAll = "~RA"; // an occurance of a "replace all" word
+ this.fromIgnrAll = "~IA"; // an occurance of a "ignore all" word
+ // properties set at run time
+ this.wordFlags = new Array();
+ this.currentTextIndex = 0;
+ this.currentWordIndex = 0;
+ this.spellCheckerWin = null;
+ this.controlWin = null;
+ this.wordWin = null;
+ this.textArea = textObject; // deprecated
+ this.textInputs = arguments;
+
+ // private methods
+ this._spellcheck = _spellcheck;
+ this._getSuggestions = _getSuggestions;
+ this._setAsIgnored = _setAsIgnored;
+ this._getTotalReplaced = _getTotalReplaced;
+ this._setWordText = _setWordText;
+ this._getFormInputs = _getFormInputs;
+
+ // public methods
+ this.openChecker = openChecker;
+ this.startCheck = startCheck;
+ this.checkTextBoxes = checkTextBoxes;
+ this.checkTextAreas = checkTextAreas;
+ this.spellCheckAll = spellCheckAll;
+ this.ignoreWord = ignoreWord;
+ this.ignoreAll = ignoreAll;
+ this.replaceWord = replaceWord;
+ this.replaceAll = replaceAll;
+ this.terminateSpell = terminateSpell;
+ this.undo = undo;
+
+ // set the current window's "speller" property to the instance of this class.
+ // this object can now be referenced by child windows/frames.
+ window.speller = this;
+}
+
+// call this method to check all text boxes (and only text boxes) in the HTML document
+function checkTextBoxes() {
+ this.textInputs = this._getFormInputs( "^text$" );
+ this.openChecker();
+}
+
+// call this method to check all textareas (and only textareas ) in the HTML document
+function checkTextAreas() {
+ this.textInputs = this._getFormInputs( "^textarea$" );
+ this.openChecker();
+}
+
+// call this method to check all text boxes and textareas in the HTML document
+function spellCheckAll() {
+ this.textInputs = this._getFormInputs( "^text(area)?$" );
+ this.openChecker();
+}
+
+// call this method to check text boxe(s) and/or textarea(s) that were passed in to the
+// object's constructor or to the textInputs property
+function openChecker() {
+ this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps );
+ if( !this.spellCheckerWin.opener ) {
+ this.spellCheckerWin.opener = window;
+ }
+}
+
+function startCheck( wordWindowObj, controlWindowObj ) {
+
+ // set properties from args
+ this.wordWin = wordWindowObj;
+ this.controlWin = controlWindowObj;
+
+ // reset properties
+ this.wordWin.resetForm();
+ this.controlWin.resetForm();
+ this.currentTextIndex = 0;
+ this.currentWordIndex = 0;
+ // initialize the flags to an array - one element for each text input
+ this.wordFlags = new Array( this.wordWin.textInputs.length );
+ // each element will be an array that keeps track of each word in the text
+ for( var i=0; i<this.wordFlags.length; i++ ) {
+ this.wordFlags[i] = [];
+ }
+
+ // start
+ this._spellcheck();
+
+ return true;
+}
+
+function ignoreWord() {
+ var wi = this.currentWordIndex;
+ var ti = this.currentTextIndex;
+ if( !this.wordWin ) {
+ alert( 'Error: Word frame not available.' );
+ return false;
+ }
+ if( !this.wordWin.getTextVal( ti, wi )) {
+ alert( 'Error: "Not in dictionary" text is missing.' );
+ return false;
+ }
+ // set as ignored
+ if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) {
+ this.currentWordIndex++;
+ this._spellcheck();
+ }
+ return true;
+}
+
+function ignoreAll() {
+ var wi = this.currentWordIndex;
+ var ti = this.currentTextIndex;
+ if( !this.wordWin ) {
+ alert( 'Error: Word frame not available.' );
+ return false;
+ }
+ // get the word that is currently being evaluated.
+ var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+ if( !s_word_to_repl ) {
+ alert( 'Error: "Not in dictionary" text is missing' );
+ return false;
+ }
+
+ // set this word as an "ignore all" word.
+ this._setAsIgnored( ti, wi, this.ignrAllFlag );
+
+ // loop through all the words after this word
+ for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+ for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+ if(( i == ti && j > wi ) || i > ti ) {
+ // future word: set as "from ignore all" if
+ // 1) do not already have a flag and
+ // 2) have the same value as current word
+ if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+ && ( !this.wordFlags[i][j] )) {
+ this._setAsIgnored( i, j, this.fromIgnrAll );
+ }
+ }
+ }
+ }
+
+ // finally, move on
+ this.currentWordIndex++;
+ this._spellcheck();
+ return true;
+}
+
+function replaceWord() {
+ var wi = this.currentWordIndex;
+ var ti = this.currentTextIndex;
+ if( !this.wordWin ) {
+ alert( 'Error: Word frame not available.' );
+ return false;
+ }
+ if( !this.wordWin.getTextVal( ti, wi )) {
+ alert( 'Error: "Not in dictionary" text is missing' );
+ return false;
+ }
+ if( !this.controlWin.replacementText ) {
+ return false ;
+ }
+ var txt = this.controlWin.replacementText;
+ if( txt.value ) {
+ var newspell = new String( txt.value );
+ if( this._setWordText( ti, wi, newspell, this.replWordFlag )) {
+ this.currentWordIndex++;
+ this._spellcheck();
+ }
+ }
+ return true;
+}
+
+function replaceAll() {
+ var ti = this.currentTextIndex;
+ var wi = this.currentWordIndex;
+ if( !this.wordWin ) {
+ alert( 'Error: Word frame not available.' );
+ return false;
+ }
+ var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+ if( !s_word_to_repl ) {
+ alert( 'Error: "Not in dictionary" text is missing' );
+ return false;
+ }
+ var txt = this.controlWin.replacementText;
+ if( !txt.value ) return false;
+ var newspell = new String( txt.value );
+
+ // set this word as a "replace all" word.
+ this._setWordText( ti, wi, newspell, this.replAllFlag );
+
+ // loop through all the words after this word
+ for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+ for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+ if(( i == ti && j > wi ) || i > ti ) {
+ // future word: set word text to s_word_to_repl if
+ // 1) do not already have a flag and
+ // 2) have the same value as s_word_to_repl
+ if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+ && ( !this.wordFlags[i][j] )) {
+ this._setWordText( i, j, newspell, this.fromReplAll );
+ }
+ }
+ }
+ }
+
+ // finally, move on
+ this.currentWordIndex++;
+ this._spellcheck();
+ return true;
+}
+
+function terminateSpell() {
+ // called when we have reached the end of the spell checking.
+ var msg = ""; // by FredCK
+ var numrepl = this._getTotalReplaced();
+ if( numrepl == 0 ) {
+ // see if there were no misspellings to begin with
+ if( !this.wordWin ) {
+ msg = "";
+ } else {
+ if( this.wordWin.totalMisspellings() ) {
+// msg += "No words changed."; // by FredCK
+ msg += FCKLang.DlgSpellNoChanges ; // by FredCK
+ } else {
+// msg += "No misspellings found."; // by FredCK
+ msg += FCKLang.DlgSpellNoMispell ; // by FredCK
+ }
+ }
+ } else if( numrepl == 1 ) {
+// msg += "One word changed."; // by FredCK
+ msg += FCKLang.DlgSpellOneChange ; // by FredCK
+ } else {
+// msg += numrepl + " words changed."; // by FredCK
+ msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ;
+ }
+ if( msg ) {
+// msg += "\n"; // by FredCK
+ alert( msg );
+ }
+
+ if( numrepl > 0 ) {
+ // update the text field(s) on the opener window
+ for( var i = 0; i < this.textInputs.length; i++ ) {
+ // this.textArea.value = this.wordWin.text;
+ if( this.wordWin ) {
+ if( this.wordWin.textInputs[i] ) {
+ this.textInputs[i].value = this.wordWin.textInputs[i];
+ }
+ }
+ }
+ }
+
+ // return back to the calling window
+// this.spellCheckerWin.close(); // by FredCK
+ if ( typeof( this.OnFinished ) == 'function' ) // by FredCK
+ this.OnFinished(numrepl) ; // by FredCK
+
+ return true;
+}
+
+function undo() {
+ // skip if this is the first word!
+ var ti = this.currentTextIndex;
+ var wi = this.currentWordIndex;
+
+ if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) {
+ this.wordWin.removeFocus( ti, wi );
+
+ // go back to the last word index that was acted upon
+ do {
+ // if the current word index is zero then reset the seed
+ if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) {
+ this.currentTextIndex--;
+ this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1;
+ if( this.currentWordIndex < 0 ) this.currentWordIndex = 0;
+ } else {
+ if( this.currentWordIndex > 0 ) {
+ this.currentWordIndex--;
+ }
+ }
+ } while (
+ this.wordWin.totalWords( this.currentTextIndex ) == 0
+ || this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll
+ || this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll
+ );
+
+ var text_idx = this.currentTextIndex;
+ var idx = this.currentWordIndex;
+ var preReplSpell = this.wordWin.originalSpellings[text_idx][idx];
+
+ // if we got back to the first word then set the Undo button back to disabled
+ if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) {
+ this.controlWin.disableUndo();
+ }
+
+ var i, j, origSpell ;
+ // examine what happened to this current word.
+ switch( this.wordFlags[text_idx][idx] ) {
+ // replace all: go through this and all the future occurances of the word
+ // and revert them all to the original spelling and clear their flags
+ case this.replAllFlag :
+ for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+ for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+ if(( i == text_idx && j >= idx ) || i > text_idx ) {
+ origSpell = this.wordWin.originalSpellings[i][j];
+ if( origSpell == preReplSpell ) {
+ this._setWordText ( i, j, origSpell, undefined );
+ }
+ }
+ }
+ }
+ break;
+
+ // ignore all: go through all the future occurances of the word
+ // and clear their flags
+ case this.ignrAllFlag :
+ for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+ for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+ if(( i == text_idx && j >= idx ) || i > text_idx ) {
+ origSpell = this.wordWin.originalSpellings[i][j];
+ if( origSpell == preReplSpell ) {
+ this.wordFlags[i][j] = undefined;
+ }
+ }
+ }
+ }
+ break;
+
+ // replace: revert the word to its original spelling
+ case this.replWordFlag :
+ this._setWordText ( text_idx, idx, preReplSpell, undefined );
+ break;
+ }
+
+ // For all four cases, clear the wordFlag of this word. re-start the process
+ this.wordFlags[text_idx][idx] = undefined;
+ this._spellcheck();
+ }
+}
+
+function _spellcheck() {
+ var ww = this.wordWin;
+
+ // check if this is the last word in the current text element
+ if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) {
+ this.currentTextIndex++;
+ this.currentWordIndex = 0;
+ // keep going if we're not yet past the last text element
+ if( this.currentTextIndex < this.wordWin.textInputs.length ) {
+ this._spellcheck();
+ return;
+ } else {
+ this.terminateSpell();
+ return;
+ }
+ }
+
+ // if this is after the first one make sure the Undo button is enabled
+ if( this.currentWordIndex > 0 ) {
+ this.controlWin.enableUndo();
+ }
+
+ // skip the current word if it has already been worked on
+ if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) {
+ // increment the global current word index and move on.
+ this.currentWordIndex++;
+ this._spellcheck();
+ } else {
+ var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex );
+ if( evalText ) {
+ this.controlWin.evaluatedText.value = evalText;
+ ww.setFocus( this.currentTextIndex, this.currentWordIndex );
+ this._getSuggestions( this.currentTextIndex, this.currentWordIndex );
+ }
+ }
+}
+
+function _getSuggestions( text_num, word_num ) {
+ this.controlWin.clearSuggestions();
+ // add suggestion in list for each suggested word.
+ // get the array of suggested words out of the
+ // three-dimensional array containing all suggestions.
+ var a_suggests = this.wordWin.suggestions[text_num][word_num];
+ if( a_suggests ) {
+ // got an array of suggestions.
+ for( var ii = 0; ii < a_suggests.length; ii++ ) {
+ this.controlWin.addSuggestion( a_suggests[ii] );
+ }
+ }
+ this.controlWin.selectDefaultSuggestion();
+}
+
+function _setAsIgnored( text_num, word_num, flag ) {
+ // set the UI
+ this.wordWin.removeFocus( text_num, word_num );
+ // do the bookkeeping
+ this.wordFlags[text_num][word_num] = flag;
+ return true;
+}
+
+function _getTotalReplaced() {
+ var i_replaced = 0;
+ for( var i = 0; i < this.wordFlags.length; i++ ) {
+ for( var j = 0; j < this.wordFlags[i].length; j++ ) {
+ if(( this.wordFlags[i][j] == this.replWordFlag )
+ || ( this.wordFlags[i][j] == this.replAllFlag )
+ || ( this.wordFlags[i][j] == this.fromReplAll )) {
+ i_replaced++;
+ }
+ }
+ }
+ return i_replaced;
+}
+
+function _setWordText( text_num, word_num, newText, flag ) {
+ // set the UI and form inputs
+ this.wordWin.setText( text_num, word_num, newText );
+ // keep track of what happened to this word:
+ this.wordFlags[text_num][word_num] = flag;
+ return true;
+}
+
+function _getFormInputs( inputPattern ) {
+ var inputs = new Array();
+ for( var i = 0; i < document.forms.length; i++ ) {
+ for( var j = 0; j < document.forms[i].elements.length; j++ ) {
+ if( document.forms[i].elements[j].type.match( inputPattern )) {
+ inputs[inputs.length] = document.forms[i].elements[j];
+ }
+ }
+ }
+ return inputs;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
new file mode 100644
index 0000000..cbcd7db
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
@@ -0,0 +1,71 @@
+
+<script>
+
+var wordWindow = null;
+var controlWindow = null;
+
+function init_spell( spellerWindow ) {
+
+ if( spellerWindow ) {
+ if( spellerWindow.windowType == "wordWindow" ) {
+ wordWindow = spellerWindow;
+ } else if ( spellerWindow.windowType == "controlWindow" ) {
+ controlWindow = spellerWindow;
+ }
+ }
+
+ if( controlWindow && wordWindow ) {
+ // populate the speller object and start it off!
+ var speller = opener.speller;
+ wordWindow.speller = speller;
+ speller.startCheck( wordWindow, controlWindow );
+ }
+}
+
+// encodeForPost
+function encodeForPost( str ) {
+ var s = new String( str );
+ s = encodeURIComponent( s );
+ // additionally encode single quotes to evade any PHP
+ // magic_quotes_gpc setting (it inserts escape characters and
+ // therefore skews the btye positions of misspelled words)
+ return s.replace( /\'/g, '%27' );
+}
+
+// post the text area data to the script that populates the speller
+function postWords() {
+ var bodyDoc = window.frames[0].document;
+ bodyDoc.open();
+ bodyDoc.write('<html>');
+ bodyDoc.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');
+ bodyDoc.write('<link rel="stylesheet" type="text/css" href="spellerStyle.css"/>');
+ if (opener) {
+ var speller = opener.speller;
+ bodyDoc.write('<body class="normalText" onLoad="document.forms[0].submit();">');
+ bodyDoc.write('<p>' + window.parent.FCKLang.DlgSpellProgress + '<\/p>'); // by FredCK
+ bodyDoc.write('<form action="'+speller.spellCheckScript+'" method="post">');
+ for( var i = 0; i < speller.textInputs.length; i++ ) {
+ bodyDoc.write('<input type="hidden" name="textinputs[]" value="'+encodeForPost(speller.textInputs[i].value)+'">');
+ }
+ bodyDoc.write('<\/form>');
+ bodyDoc.write('<\/body>');
+ } else {
+ bodyDoc.write('<body class="normalText">');
+ bodyDoc.write('<p><b>This page cannot be displayed<\/b><\/p><p>The window was not opened from another window.<\/p>');
+ bodyDoc.write('<\/body>');
+ }
+ bodyDoc.write('<\/html>');
+ bodyDoc.close();
+}
+</script>
+
+<html>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<head>
+<title>Speller Pages</title>
+</head>
+<frameset rows="*,201" onLoad="postWords();">
+<frame src="blank.html">
+<frame src="controls.html">
+</frameset>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
new file mode 100644
index 0000000..9928086
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
@@ -0,0 +1,49 @@
+.blend {
+ font-family: courier new;
+ font-size: 10pt;
+ border: 0;
+ margin-bottom:-1;
+}
+.normalLabel {
+ font-size:8pt;
+}
+.normalText {
+ font-family:arial, helvetica, sans-serif;
+ font-size:10pt;
+ color:000000;
+ background-color:FFFFFF;
+}
+.plainText {
+ font-family: courier new, courier, monospace;
+ font-size: 10pt;
+ color:000000;
+ background-color:FFFFFF;
+}
+.controlWindowBody {
+ font-family:arial, helvetica, sans-serif;
+ font-size:8pt;
+ padding: 7px ; /* by FredCK */
+ margin: 0px ; /* by FredCK */
+ /* color:000000; by FredCK */
+ /* background-color:DADADA; by FredCK */
+}
+.readonlyInput {
+ background-color:DADADA;
+ color:000000;
+ font-size:8pt;
+ width:392px;
+}
+.textDefault {
+ font-size:8pt;
+ width: 200px;
+}
+.buttonDefault {
+ width:90px;
+ height:22px;
+ font-size:8pt;
+}
+.suggSlct {
+ width:200px;
+ margin-top:2;
+ font-size:8pt;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
new file mode 100644
index 0000000..7990296
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
@@ -0,0 +1,272 @@
+////////////////////////////////////////////////////
+// wordWindow object
+////////////////////////////////////////////////////
+function wordWindow() {
+ // private properties
+ this._forms = [];
+
+ // private methods
+ this._getWordObject = _getWordObject;
+ //this._getSpellerObject = _getSpellerObject;
+ this._wordInputStr = _wordInputStr;
+ this._adjustIndexes = _adjustIndexes;
+ this._isWordChar = _isWordChar;
+ this._lastPos = _lastPos;
+
+ // public properties
+ this.wordChar = /[a-zA-Z]/;
+ this.windowType = "wordWindow";
+ this.originalSpellings = new Array();
+ this.suggestions = new Array();
+ this.checkWordBgColor = "pink";
+ this.normWordBgColor = "white";
+ this.text = "";
+ this.textInputs = new Array();
+ this.indexes = new Array();
+ //this.speller = this._getSpellerObject();
+
+ // public methods
+ this.resetForm = resetForm;
+ this.totalMisspellings = totalMisspellings;
+ this.totalWords = totalWords;
+ this.totalPreviousWords = totalPreviousWords;
+ //this.getTextObjectArray = getTextObjectArray;
+ this.getTextVal = getTextVal;
+ this.setFocus = setFocus;
+ this.removeFocus = removeFocus;
+ this.setText = setText;
+ //this.getTotalWords = getTotalWords;
+ this.writeBody = writeBody;
+ this.printForHtml = printForHtml;
+}
+
+function resetForm() {
+ if( this._forms ) {
+ for( var i = 0; i < this._forms.length; i++ ) {
+ this._forms[i].reset();
+ }
+ }
+ return true;
+}
+
+function totalMisspellings() {
+ var total_words = 0;
+ for( var i = 0; i < this.textInputs.length; i++ ) {
+ total_words += this.totalWords( i );
+ }
+ return total_words;
+}
+
+function totalWords( textIndex ) {
+ return this.originalSpellings[textIndex].length;
+}
+
+function totalPreviousWords( textIndex, wordIndex ) {
+ var total_words = 0;
+ for( var i = 0; i <= textIndex; i++ ) {
+ for( var j = 0; j < this.totalWords( i ); j++ ) {
+ if( i == textIndex && j == wordIndex ) {
+ break;
+ } else {
+ total_words++;
+ }
+ }
+ }
+ return total_words;
+}
+
+//function getTextObjectArray() {
+// return this._form.elements;
+//}
+
+function getTextVal( textIndex, wordIndex ) {
+ var word = this._getWordObject( textIndex, wordIndex );
+ if( word ) {
+ return word.value;
+ }
+}
+
+function setFocus( textIndex, wordIndex ) {
+ var word = this._getWordObject( textIndex, wordIndex );
+ if( word ) {
+ if( word.type == "text" ) {
+ word.focus();
+ word.style.backgroundColor = this.checkWordBgColor;
+ }
+ }
+}
+
+function removeFocus( textIndex, wordIndex ) {
+ var word = this._getWordObject( textIndex, wordIndex );
+ if( word ) {
+ if( word.type == "text" ) {
+ word.blur();
+ word.style.backgroundColor = this.normWordBgColor;
+ }
+ }
+}
+
+function setText( textIndex, wordIndex, newText ) {
+ var word = this._getWordObject( textIndex, wordIndex );
+ var beginStr;
+ var endStr;
+ if( word ) {
+ var pos = this.indexes[textIndex][wordIndex];
+ var oldText = word.value;
+ // update the text given the index of the string
+ beginStr = this.textInputs[textIndex].substring( 0, pos );
+ endStr = this.textInputs[textIndex].substring(
+ pos + oldText.length,
+ this.textInputs[textIndex].length
+ );
+ this.textInputs[textIndex] = beginStr + newText + endStr;
+
+ // adjust the indexes on the stack given the differences in
+ // length between the new word and old word.
+ var lengthDiff = newText.length - oldText.length;
+ this._adjustIndexes( textIndex, wordIndex, lengthDiff );
+
+ word.size = newText.length;
+ word.value = newText;
+ this.removeFocus( textIndex, wordIndex );
+ }
+}
+
+
+function writeBody() {
+ var d = window.document;
+ var is_html = false;
+
+ d.open();
+
+ // iterate through each text input.
+ for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {
+ var end_idx = 0;
+ var begin_idx = 0;
+ d.writeln( '<form name="textInput'+txtid+'">' );
+ var wordtxt = this.textInputs[txtid];
+ this.indexes[txtid] = [];
+
+ if( wordtxt ) {
+ var orig = this.originalSpellings[txtid];
+ if( !orig ) break;
+
+ //!!! plain text, or HTML mode?
+ d.writeln( '<div class="plainText">' );
+ // iterate through each occurrence of a misspelled word.
+ for( var i = 0; i < orig.length; i++ ) {
+ // find the position of the current misspelled word,
+ // starting at the last misspelled word.
+ // and keep looking if it's a substring of another word
+ do {
+ begin_idx = wordtxt.indexOf( orig[i], end_idx );
+ end_idx = begin_idx + orig[i].length;
+ // word not found? messed up!
+ if( begin_idx == -1 ) break;
+ // look at the characters immediately before and after
+ // the word. If they are word characters we'll keep looking.
+ var before_char = wordtxt.charAt( begin_idx - 1 );
+ var after_char = wordtxt.charAt( end_idx );
+ } while (
+ this._isWordChar( before_char )
+ || this._isWordChar( after_char )
+ );
+
+ // keep track of its position in the original text.
+ this.indexes[txtid][i] = begin_idx;
+
+ // write out the characters before the current misspelled word
+ for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
+ // !!! html mode? make it html compatible
+ d.write( this.printForHtml( wordtxt.charAt( j )));
+ }
+
+ // write out the misspelled word.
+ d.write( this._wordInputStr( orig[i] ));
+
+ // if it's the last word, write out the rest of the text
+ if( i == orig.length-1 ){
+ d.write( printForHtml( wordtxt.substr( end_idx )));
+ }
+ }
+
+ d.writeln( '</div>' );
+
+ }
+ d.writeln( '</form>' );
+ }
+ //for ( var j = 0; j < d.forms.length; j++ ) {
+ // alert( d.forms[j].name );
+ // for( var k = 0; k < d.forms[j].elements.length; k++ ) {
+ // alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
+ // }
+ //}
+
+ // set the _forms property
+ this._forms = d.forms;
+ d.close();
+}
+
+// return the character index in the full text after the last word we evaluated
+function _lastPos( txtid, idx ) {
+ if( idx > 0 )
+ return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
+ else
+ return 0;
+}
+
+function printForHtml( n ) {
+ return n ; // by FredCK
+/*
+ var htmlstr = n;
+ if( htmlstr.length == 1 ) {
+ // do simple case statement if it's just one character
+ switch ( n ) {
+ case "\n":
+ htmlstr = '<br/>';
+ break;
+ case "<":
+ htmlstr = '&lt;';
+ break;
+ case ">":
+ htmlstr = '&gt;';
+ break;
+ }
+ return htmlstr;
+ } else {
+ htmlstr = htmlstr.replace( /</g, '&lt' );
+ htmlstr = htmlstr.replace( />/g, '&gt' );
+ htmlstr = htmlstr.replace( /\n/g, '<br/>' );
+ return htmlstr;
+ }
+*/
+}
+
+function _isWordChar( letter ) {
+ if( letter.search( this.wordChar ) == -1 ) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+function _getWordObject( textIndex, wordIndex ) {
+ if( this._forms[textIndex] ) {
+ if( this._forms[textIndex].elements[wordIndex] ) {
+ return this._forms[textIndex].elements[wordIndex];
+ }
+ }
+ return null;
+}
+
+function _wordInputStr( word ) {
+ var str = '<input readonly ';
+ str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">';
+ return str;
+}
+
+function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
+ for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
+ this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;
+ }
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_table.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_table.html
new file mode 100644
index 0000000..06b91a5
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_table.html
@@ -0,0 +1,439 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Table dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Table Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+var FCKDomTools = oEditor.FCKDomTools ;
+
+// Gets the table if there is one selected.
+var table ;
+var e = dialog.Selection.GetSelectedElement() ;
+var hasColumnHeaders ;
+
+if ( ( !e && document.location.search.substr(1) == 'Parent' ) || ( e && e.tagName != 'TABLE' ) )
+ e = oEditor.FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+
+if ( e && e.tagName == "TABLE" )
+ table = e ;
+
+// Fired when the window loading process is finished. It sets the fields with the
+// actual values if a table is selected in the editor.
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if (table)
+ {
+ document.getElementById('txtRows').value = table.rows.length ;
+ document.getElementById('txtColumns').value = table.rows[0].cells.length ;
+
+ // Gets the value from the Width or the Style attribute
+ var iWidth = (table.style.width ? table.style.width : table.width ) ;
+ var iHeight = (table.style.height ? table.style.height : table.height ) ;
+
+ if (iWidth.indexOf('%') >= 0) // Percentual = %
+ {
+ iWidth = parseInt( iWidth.substr(0,iWidth.length - 1), 10 ) ;
+ document.getElementById('selWidthType').value = "percent" ;
+ }
+ else if (iWidth.indexOf('px') >= 0) // Style Pixel = px
+ { //
+ iWidth = iWidth.substr(0,iWidth.length - 2);
+ document.getElementById('selWidthType').value = "pixels" ;
+ }
+
+ if (iHeight && iHeight.indexOf('px') >= 0) // Style Pixel = px
+ iHeight = iHeight.substr(0,iHeight.length - 2);
+
+ document.getElementById('txtWidth').value = iWidth || '' ;
+ document.getElementById('txtHeight').value = iHeight || '' ;
+ document.getElementById('txtBorder').value = GetAttribute( table, 'border', '' ) ;
+ document.getElementById('selAlignment').value = GetAttribute( table, 'align', '' ) ;
+ document.getElementById('txtCellPadding').value = GetAttribute( table, 'cellPadding', '' ) ;
+ document.getElementById('txtCellSpacing').value = GetAttribute( table, 'cellSpacing', '' ) ;
+ document.getElementById('txtSummary').value = GetAttribute( table, 'summary', '' ) ;
+// document.getElementById('cmbFontStyle').value = table.className ;
+
+ var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
+ if ( eCaption ) document.getElementById('txtCaption').value = eCaption.innerHTML ;
+
+ hasColumnHeaders = true ;
+ // Check if all the first cells in every row are TH
+ for (var row=0; row<table.rows.length; row++)
+ {
+ // If just one cell isn't a TH then it isn't a header column
+ if ( table.rows[row].cells[0].nodeName != 'TH' )
+ {
+ hasColumnHeaders = false ;
+
+ break;
+ }
+ }
+
+ // Check if the table contains <thead>
+ if ((table.tHead !== null) )
+ {
+ if (hasColumnHeaders)
+ GetE('selHeaders').value = 'both' ;
+ else
+ GetE('selHeaders').value = 'row' ;
+ }
+ else
+ {
+ if (hasColumnHeaders)
+ GetE('selHeaders').value = 'col' ;
+ else
+ GetE('selHeaders').value = '' ;
+ }
+
+
+ document.getElementById('txtRows').disabled = true ;
+ document.getElementById('txtColumns').disabled = true ;
+ SelectField( 'txtWidth' ) ;
+ }
+ else
+ SelectField( 'txtRows' ) ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+ var bExists = ( table != null ) ;
+
+ var oDoc = oEditor.FCK.EditorDocument ;
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ if ( ! bExists )
+ table = oDoc.createElement( "TABLE" ) ;
+
+ // Removes the Width and Height styles
+ if ( bExists && table.style.width ) table.style.width = null ; //.removeAttribute("width") ;
+ if ( bExists && table.style.height ) table.style.height = null ; //.removeAttribute("height") ;
+
+ var sWidth = GetE('txtWidth').value ;
+ if ( sWidth.length > 0 && GetE('selWidthType').value == 'percent' )
+ sWidth += '%' ;
+
+ SetAttribute( table, 'width' , sWidth ) ;
+ SetAttribute( table, 'height' , GetE('txtHeight').value ) ;
+ SetAttribute( table, 'border' , GetE('txtBorder').value ) ;
+ SetAttribute( table, 'align' , GetE('selAlignment').value ) ;
+ SetAttribute( table, 'cellPadding' , GetE('txtCellPadding').value ) ;
+ SetAttribute( table, 'cellSpacing' , GetE('txtCellSpacing').value ) ;
+ SetAttribute( table, 'summary' , GetE('txtSummary').value ) ;
+
+ var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
+
+ if ( document.getElementById('txtCaption').value != '')
+ {
+ if ( !eCaption )
+ {
+ eCaption = oDoc.createElement( 'CAPTION' ) ;
+ table.insertBefore( eCaption, table.firstChild ) ;
+ }
+
+ eCaption.innerHTML = document.getElementById('txtCaption').value ;
+ }
+ else if ( bExists && eCaption )
+ {
+ // TODO: It causes an IE internal error if using removeChild or
+ // table.deleteCaption() (see #505).
+ if ( oEditor.FCKBrowserInfo.IsIE )
+ eCaption.innerHTML = '' ;
+ else
+ eCaption.parentNode.removeChild( eCaption ) ;
+ }
+
+ var headers = GetE('selHeaders').value ;
+ if ( bExists )
+ {
+ // Should we make a <thead>?
+ if ( table.tHead==null && (headers=='row' || headers=='both') )
+ {
+ var oThead = table.createTHead() ;
+ var tbody = FCKDomTools.GetFirstChild( table, 'TBODY' ) ;
+ var theRow= FCKDomTools.GetFirstChild( tbody, 'TR' ) ;
+
+ //now change TD to TH:
+ for (var i = 0; i<theRow.childNodes.length ; i++)
+ {
+ var th = RenameNode(theRow.childNodes[i], 'TH') ;
+ if (th != null)
+ th.scope='col' ;
+ }
+ oThead.appendChild( theRow ) ;
+ }
+
+ if ( table.tHead!==null && !(headers=='row' || headers=='both') )
+ {
+ // Move the row out of the THead and put it in the TBody:
+ var tHead = table.tHead ;
+ var tbody = FCKDomTools.GetFirstChild( table, 'TBODY' ) ;
+
+ var previousFirstRow = tbody.firstChild ;
+ while ( tHead.firstChild )
+ {
+ var theRow = tHead.firstChild ;
+ for (var i = 0; i < theRow.childNodes.length ; i++ )
+ {
+ var newCell = RenameNode( theRow.childNodes[i], 'TD' ) ;
+ if ( newCell != null )
+ newCell.removeAttribute( 'scope' ) ;
+ }
+ tbody.insertBefore( theRow, previousFirstRow ) ;
+ }
+ table.removeChild( tHead ) ;
+ }
+
+ // Should we make all first cells in a row TH?
+ if ( (!hasColumnHeaders) && (headers=='col' || headers=='both') )
+ {
+ for( var row=0 ; row < table.rows.length ; row++ )
+ {
+ var newCell = RenameNode(table.rows[row].cells[0], 'TH') ;
+ if ( newCell != null )
+ newCell.scope = 'row' ;
+ }
+ }
+
+ // Should we make all first TH-cells in a row make TD? If 'yes' we do it the other way round :-)
+ if ( (hasColumnHeaders) && !(headers=='col' || headers=='both') )
+ {
+ for( var row=0 ; row < table.rows.length ; row++ )
+ {
+ var oRow = table.rows[row] ;
+ if ( oRow.parentNode.nodeName == 'TBODY' )
+ {
+ var newCell = RenameNode(oRow.cells[0], 'TD') ;
+ if (newCell != null)
+ newCell.removeAttribute( 'scope' ) ;
+ }
+ }
+ }
+ }
+
+ if (! bExists)
+ {
+ var iRows = GetE('txtRows').value ;
+ var iCols = GetE('txtColumns').value ;
+
+ var startRow = 0 ;
+ // Should we make a <thead> ?
+ if (headers=='row' || headers=='both')
+ {
+ startRow++ ;
+ var oThead = table.createTHead() ;
+ var oRow = table.insertRow(-1) ;
+ oThead.appendChild(oRow);
+
+ for ( var c = 0 ; c < iCols ; c++ )
+ {
+ var oThcell = oDoc.createElement( 'TH' ) ;
+ oThcell.scope = 'col' ;
+ oRow.appendChild( oThcell ) ;
+ if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+ oEditor.FCKTools.AppendBogusBr( oThcell ) ;
+ }
+ }
+
+ // Opera automatically creates a tbody when a thead has been added
+ var oTbody = FCKDomTools.GetFirstChild( table, 'TBODY' ) ;
+ if ( !oTbody )
+ {
+ // make TBODY if it doesn't exist
+ oTbody = oDoc.createElement( 'TBODY' ) ;
+ table.appendChild( oTbody ) ;
+ }
+ for ( var r = startRow ; r < iRows; r++ )
+ {
+ var oRow = oDoc.createElement( 'TR' ) ;
+ oTbody.appendChild(oRow) ;
+
+ var startCol = 0 ;
+ // Is the first column a header?
+ if (headers=='col' || headers=='both')
+ {
+ var oThcell = oDoc.createElement( 'TH' ) ;
+ oThcell.scope = 'row' ;
+ oRow.appendChild( oThcell ) ;
+ if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+ oEditor.FCKTools.AppendBogusBr( oThcell ) ;
+
+ startCol++ ;
+ }
+ for ( var c = startCol ; c < iCols ; c++ )
+ {
+ // IE will leave the TH at the end of the row if we use now oRow.insertCell(-1)
+ var oCell = oDoc.createElement( 'TD' ) ;
+ oRow.appendChild( oCell ) ;
+ if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+ oEditor.FCKTools.AppendBogusBr( oCell ) ;
+ }
+ }
+
+ oEditor.FCK.InsertElement( table ) ;
+ }
+
+ return true ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table id="otable" cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
+ <tr>
+ <td>
+ <table cellspacing="1" cellpadding="1" width="100%" border="0">
+ <tr>
+ <td valign="top">
+ <table cellspacing="1" cellpadding="0" border="0">
+ <tr>
+ <td>
+ <span fcklang="DlgTableRows">Rows</span>:</td>
+ <td>
+ &nbsp;<input id="txtRows" type="text" maxlength="3" size="2" value="3"
+ onkeypress="return IsDigit(event);" /></td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgTableColumns">Columns</span>:</td>
+ <td>
+ &nbsp;<input id="txtColumns" type="text" maxlength="2" size="2" value="2"
+ onkeypress="return IsDigit(event);" /></td>
+ </tr>
+ <tr>
+ <td><span fcklang="DlgTableHeaders">Headers</span>:</td>
+ <td>
+ &nbsp;<select id="selHeaders">
+ <option fcklang="DlgTableHeadersNone" value="">None</option>
+ <option fcklang="DlgTableHeadersRow" value="row">First row</option>
+ <option fcklang="DlgTableHeadersColumn" value="col">First column</option>
+ <option fcklang="DlgTableHeadersBoth" value="both">Both</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgTableBorder">Border size</span>:</td>
+ <td>
+ &nbsp;<input id="txtBorder" type="text" maxlength="2" size="2" value="1"
+ onkeypress="return IsDigit(event);" /></td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgTableAlign">Alignment</span>:</td>
+ <td>
+ &nbsp;<select id="selAlignment">
+ <option fcklang="DlgTableAlignNotSet" value="" selected="selected">&lt;Not set&gt;</option>
+ <option fcklang="DlgTableAlignLeft" value="left">Left</option>
+ <option fcklang="DlgTableAlignCenter" value="center">Center</option>
+ <option fcklang="DlgTableAlignRight" value="right">Right</option>
+ </select></td>
+ </tr>
+ </table>
+ </td>
+ <td>
+ &nbsp;&nbsp;&nbsp;</td>
+ <td align="right" valign="top">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td>
+ <span fcklang="DlgTableWidth">Width</span>:</td>
+ <td>
+ &nbsp;<input id="txtWidth" type="text" maxlength="4" size="3" value="200"
+ onkeypress="return IsDigit(event);" /></td>
+ <td>
+ &nbsp;<select id="selWidthType">
+ <option fcklang="DlgTableWidthPx" value="pixels" selected="selected">pixels</option>
+ <option fcklang="DlgTableWidthPc" value="percent">percent</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgTableHeight">Height</span>:</td>
+ <td>
+ &nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" onkeypress="return IsDigit(event);" /></td>
+ <td>
+ &nbsp;<span fcklang="DlgTableWidthPx">pixels</span></td>
+ </tr>
+ <tr>
+ <td colspan="3">&nbsp;</td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgTableCellSpace">Cell spacing</span>:</td>
+ <td>
+ &nbsp;<input id="txtCellSpacing" type="text" maxlength="2" size="2" value="1"
+ onkeypress="return IsDigit(event);" /></td>
+ <td>
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgTableCellPad">Cell padding</span>:</td>
+ <td>
+ &nbsp;<input id="txtCellPadding" type="text" maxlength="2" size="2" value="1"
+ onkeypress="return IsDigit(event);" /></td>
+ <td>
+ &nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgTableCaption">Caption</span>:&nbsp;</td>
+ <td>
+ &nbsp;</td>
+ <td width="100%" nowrap="nowrap">
+ <input id="txtCaption" type="text" style="width: 100%" /></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgTableSummary">Summary</span>:&nbsp;</td>
+ <td>
+ &nbsp;</td>
+ <td width="100%" nowrap="nowrap">
+ <input id="txtSummary" type="text" style="width: 100%" /></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_tablecell.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_tablecell.html
new file mode 100644
index 0000000..ce882d3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_tablecell.html
@@ -0,0 +1,293 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Cell properties dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Table Cell Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+var FCKDomTools = oEditor.FCKDomTools ;
+
+// Array of selected Cells
+var aCells = oEditor.FCKTableHandler.GetSelectedCells() ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+ SetStartupValue() ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtWidth' ) ;
+}
+
+function SetStartupValue()
+{
+ if ( aCells.length > 0 )
+ {
+ var oCell = aCells[0] ;
+ var iWidth = GetAttribute( oCell, 'width' ) ;
+
+ if ( iWidth.indexOf && iWidth.indexOf( '%' ) >= 0 )
+ {
+ iWidth = iWidth.substr( 0, iWidth.length - 1 ) ;
+ GetE('selWidthType').value = 'percent' ;
+ }
+
+ if ( oCell.attributes['noWrap'] != null && oCell.attributes['noWrap'].specified )
+ GetE('selWordWrap').value = !oCell.noWrap ;
+
+ GetE('txtWidth').value = iWidth ;
+ GetE('txtHeight').value = GetAttribute( oCell, 'height' ) ;
+ GetE('selHAlign').value = GetAttribute( oCell, 'align' ) ;
+ GetE('selVAlign').value = GetAttribute( oCell, 'vAlign' ) ;
+ GetE('txtRowSpan').value = GetAttribute( oCell, 'rowSpan' ) ;
+ GetE('txtCollSpan').value = GetAttribute( oCell, 'colSpan' ) ;
+ GetE('txtBackColor').value = GetAttribute( oCell, 'bgColor' ) ;
+ GetE('txtBorderColor').value = GetAttribute( oCell, 'borderColor' ) ;
+ GetE('selCellType').value = oCell.nodeName.toLowerCase() ;
+ }
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ for( i = 0 ; i < aCells.length ; i++ )
+ {
+ if ( GetE('txtWidth').value.length > 0 )
+ aCells[i].width = GetE('txtWidth').value + ( GetE('selWidthType').value == 'percent' ? '%' : '') ;
+ else
+ aCells[i].removeAttribute( 'width', 0 ) ;
+
+ if ( GetE('selWordWrap').value == 'false' )
+ SetAttribute( aCells[i], 'noWrap', 'nowrap' ) ;
+ else
+ aCells[i].removeAttribute( 'noWrap' ) ;
+
+ SetAttribute( aCells[i], 'height' , GetE('txtHeight').value ) ;
+ SetAttribute( aCells[i], 'align' , GetE('selHAlign').value ) ;
+ SetAttribute( aCells[i], 'vAlign' , GetE('selVAlign').value ) ;
+ SetAttribute( aCells[i], 'rowSpan' , GetE('txtRowSpan').value ) ;
+ SetAttribute( aCells[i], 'colSpan' , GetE('txtCollSpan').value ) ;
+ SetAttribute( aCells[i], 'bgColor' , GetE('txtBackColor').value ) ;
+ SetAttribute( aCells[i], 'borderColor' , GetE('txtBorderColor').value ) ;
+
+ var cellType = GetE('selCellType').value ;
+ if ( aCells[i].nodeName.toLowerCase() != cellType )
+ aCells[i] = RenameNode( aCells[i], cellType ) ;
+ }
+
+ // The cells need to be reselected, otherwise the caret will appear inside the table borders (Gecko)
+ // or sent back to the beginning of the document (Opera and Safari).
+ // Strangely, IE works ok so no change is needed for IE.
+ if ( !oEditor.FCKBrowserInfo.IsIE )
+ {
+ var selection = oEditor.FCK.EditorWindow.getSelection() ;
+ selection.removeAllRanges() ;
+ for ( var i = 0 ; i < aCells.length ; i++ )
+ {
+ var range = oEditor.FCK.EditorDocument.createRange() ;
+ range.selectNode( aCells[i] ) ;
+ selection.addRange( range ) ;
+ }
+ }
+
+ return true ;
+}
+
+function SelectBackColor( color )
+{
+ if ( color && color.length > 0 )
+ GetE('txtBackColor').value = color ;
+}
+
+function SelectBorderColor( color )
+{
+ if ( color && color.length > 0 )
+ GetE('txtBorderColor').value = color ;
+}
+
+function SelectColor( wich )
+{
+ oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ;
+}
+
+ </script>
+</head>
+<body scroll="no" style="overflow: hidden">
+ <table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
+ <tr>
+ <td>
+ <table cellspacing="1" cellpadding="1" width="100%" border="0">
+ <tr>
+ <td>
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellWidth">Width</span>:</td>
+ <td>
+ &nbsp;<input onkeypress="return IsDigit(event);" id="txtWidth" type="text" maxlength="4"
+ size="3" />&nbsp;<select id="selWidthType">
+ <option fcklang="DlgCellWidthPx" value="pixels" selected="selected">pixels</option>
+ <option fcklang="DlgCellWidthPc" value="percent">percent</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellHeight">Height</span>:</td>
+ <td>
+ &nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" onkeypress="return IsDigit(event);" />&nbsp;<span
+ fcklang="DlgCellWidthPx">pixels</span></td>
+ </tr>
+ <tr>
+ <td>
+ &nbsp;</td>
+ <td>
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellWordWrap">Word Wrap</span>:</td>
+ <td>
+ &nbsp;<select id="selWordWrap">
+ <option fcklang="DlgCellWordWrapYes" value="true" selected="selected">Yes</option>
+ <option fcklang="DlgCellWordWrapNo" value="false">No</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td>
+ &nbsp;</td>
+ <td>
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellHorAlign">Horizontal Alignment</span>:</td>
+ <td>
+ &nbsp;<select id="selHAlign">
+ <option fcklang="DlgCellHorAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+ <option fcklang="DlgCellHorAlignLeft" value="left">Left</option>
+ <option fcklang="DlgCellHorAlignCenter" value="center">Center</option>
+ <option fcklang="DlgCellHorAlignRight" value="right">Right</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellVerAlign">Vertical Alignment</span>:</td>
+ <td>
+ &nbsp;<select id="selVAlign">
+ <option fcklang="DlgCellVerAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+ <option fcklang="DlgCellVerAlignTop" value="top">Top</option>
+ <option fcklang="DlgCellVerAlignMiddle" value="middle">Middle</option>
+ <option fcklang="DlgCellVerAlignBottom" value="bottom">Bottom</option>
+ <option fcklang="DlgCellVerAlignBaseline" value="baseline">Baseline</option>
+ </select></td>
+ </tr>
+ </table>
+ </td>
+ <td>
+ &nbsp;&nbsp;&nbsp;</td>
+ <td align="right">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellType">Cell Type</span>:</td>
+ <td colspan="2">
+ &nbsp; <select id="selCellType">
+ <option fcklang="DlgCellTypeData" value="td" />Data
+ <option fcklang="DlgCellTypeHeader" value="th" />Header
+ </select>
+ </tr>
+ <tr>
+ <td>
+ &nbsp;</td>
+ <td>
+ &nbsp;</td>
+ <td>
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellRowSpan">Rows Span</span>:</td>
+ <td>
+ &nbsp;
+ <input onkeypress="return IsDigit(event);" id="txtRowSpan" type="text" maxlength="3" size="2"
+ ></td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellCollSpan">Columns Span</span>:</td>
+ <td>
+ &nbsp;
+ <input onkeypress="return IsDigit(event);" id="txtCollSpan" type="text" maxlength="2"
+ size="2"></td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ &nbsp;</td>
+ <td>
+ &nbsp;</td>
+ <td>
+ &nbsp;</td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellBackColor">Background Color</span>:</td>
+ <td>
+ &nbsp;<input id="txtBackColor" type="text" size="8" /></td>
+ <td>
+ &nbsp;
+ <input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Back' )"></td>
+ </tr>
+ <tr>
+ <td nowrap="nowrap">
+ <span fcklang="DlgCellBorderColor">Border Color</span>:</td>
+ <td>
+ &nbsp;<input id="txtBorderColor" type="text" size="8" /></td>
+ <td>
+ &nbsp;
+ <input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Border' )" /></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template.html
new file mode 100644
index 0000000..084dc6d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template.html
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Template selection dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <style type="text/css">
+ .TplList
+ {
+ border: #dcdcdc 2px solid;
+ background-color: #ffffff;
+ overflow: auto;
+ width: 90%;
+ }
+
+ .TplItem
+ {
+ margin: 5px;
+ padding: 7px;
+ border: #eeeeee 1px solid;
+ }
+
+ .TplItem TABLE
+ {
+ display: inline;
+ }
+
+ .TplTitle
+ {
+ font-weight: bold;
+ }
+ </style>
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+var FCKLang = oEditor.FCKLang ;
+var FCKConfig = oEditor.FCKConfig ;
+
+window.onload = function()
+{
+ // Set the right box height (browser dependent).
+ GetE('eList').style.height = document.all ? '100%' : '295px' ;
+
+ // Translate the dialog box texts.
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ GetE('xChkReplaceAll').checked = ( FCKConfig.TemplateReplaceAll !== false ) ;
+
+ if ( FCKConfig.TemplateReplaceCheckbox !== false )
+ GetE('xReplaceBlock').style.display = '' ;
+
+ window.parent.SetAutoSize( true ) ;
+
+ LoadTemplatesXml() ;
+}
+
+function LoadTemplatesXml()
+{
+ var oTemplate ;
+
+ if ( !FCK._Templates )
+ {
+ GetE('eLoading').style.display = '' ;
+
+ // Create the Templates array.
+ FCK._Templates = new Array() ;
+
+ // Load the XML file.
+ var oXml = new oEditor.FCKXml() ;
+ oXml.LoadUrl( FCKConfig.TemplatesXmlPath ) ;
+
+ // Get the Images Base Path.
+ var oAtt = oXml.SelectSingleNode( 'Templates/@imagesBasePath' ) ;
+ var sImagesBasePath = oAtt ? oAtt.value : '' ;
+
+ // Get the "Template" nodes defined in the XML file.
+ var aTplNodes = oXml.SelectNodes( 'Templates/Template' ) ;
+
+ for ( var i = 0 ; i < aTplNodes.length ; i++ )
+ {
+ var oNode = aTplNodes[i] ;
+
+ oTemplate = new Object() ;
+
+ var oPart ;
+
+ // Get the Template Title.
+ if ( (oPart = oNode.attributes.getNamedItem('title')) )
+ oTemplate.Title = oPart.value ;
+ else
+ oTemplate.Title = 'Template ' + ( i + 1 ) ;
+
+ // Get the Template Description.
+ if ( (oPart = oXml.SelectSingleNode( 'Description', oNode )) )
+ oTemplate.Description = oPart.text ? oPart.text : oPart.textContent ;
+
+ // Get the Template Image.
+ if ( (oPart = oNode.attributes.getNamedItem('image')) )
+ oTemplate.Image = sImagesBasePath + oPart.value ;
+
+ // Get the Template HTML.
+ if ( (oPart = oXml.SelectSingleNode( 'Html', oNode )) )
+ oTemplate.Html = oPart.text ? oPart.text : oPart.textContent ;
+ else
+ {
+ alert( 'No HTML defined for template index ' + i + '. Please review the "' + FCKConfig.TemplatesXmlPath + '" file.' ) ;
+ continue ;
+ }
+
+ FCK._Templates[ FCK._Templates.length ] = oTemplate ;
+ }
+
+ GetE('eLoading').style.display = 'none' ;
+ }
+
+ if ( FCK._Templates.length == 0 )
+ GetE('eEmpty').style.display = '' ;
+ else
+ {
+ for ( var j = 0 ; j < FCK._Templates.length ; j++ )
+ {
+ oTemplate = FCK._Templates[j] ;
+
+ var oItemDiv = GetE('eList').appendChild( document.createElement( 'DIV' ) ) ;
+ oItemDiv.TplIndex = j ;
+ oItemDiv.className = 'TplItem' ;
+
+ // Build the inner HTML of our new item DIV.
+ var sInner = '<table><tr>' ;
+
+ if ( oTemplate.Image )
+ sInner += '<td valign="top"><img src="' + oTemplate.Image + '"><\/td>' ;
+
+ sInner += '<td valign="top"><div class="TplTitle">' + oTemplate.Title + '<\/div>' ;
+
+ if ( oTemplate.Description )
+ sInner += '<div>' + oTemplate.Description + '<\/div>' ;
+
+ sInner += '<\/td><\/tr><\/table>' ;
+
+ oItemDiv.innerHTML = sInner ;
+
+ oItemDiv.onmouseover = ItemDiv_OnMouseOver ;
+ oItemDiv.onmouseout = ItemDiv_OnMouseOut ;
+ oItemDiv.onclick = ItemDiv_OnClick ;
+ }
+ }
+}
+
+function ItemDiv_OnMouseOver()
+{
+ this.className += ' PopupSelectionBox' ;
+}
+
+function ItemDiv_OnMouseOut()
+{
+ this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ;
+}
+
+function ItemDiv_OnClick()
+{
+ SelectTemplate( this.TplIndex ) ;
+}
+
+function SelectTemplate( index )
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ if ( GetE('xChkReplaceAll').checked )
+ FCK.SetData( FCK._Templates[index].Html ) ;
+ else
+ FCK.InsertHtml( FCK._Templates[index].Html ) ;
+
+ window.parent.Cancel( true ) ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table width="100%" style="height: 100%">
+ <tr>
+ <td align="center">
+ <span fcklang="DlgTemplatesSelMsg">Please select the template to open in the editor<br />
+ (the actual contents will be lost):</span>
+ </td>
+ </tr>
+ <tr>
+ <td height="100%" align="center">
+ <div id="eList" align="left" class="TplList">
+ <div id="eLoading" align="center" style="display: none">
+ <br />
+ <span fcklang="DlgTemplatesLoading">Loading templates list. Please wait...</span>
+ </div>
+ <div id="eEmpty" align="center" style="display: none">
+ <br />
+ <span fcklang="DlgTemplatesNoTpl">(No templates defined)</span>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr id="xReplaceBlock" style="display: none">
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <input id="xChkReplaceAll" type="checkbox" /></td>
+ <td>
+ &nbsp;</td>
+ <td>
+ <label for="xChkReplaceAll" fcklang="DlgTemplatesReplace">
+ Replace actual contents</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template1.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template1.gif
new file mode 100644
index 0000000..efdabbe
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template1.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template2.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template2.gif
new file mode 100644
index 0000000..d1cebb3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template2.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template3.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template3.gif
new file mode 100644
index 0000000..db41cb4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template3.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textarea.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textarea.html
new file mode 100644
index 0000000..e4edae9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textarea.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Text Area dialog window.
+-->
+<html>
+ <head>
+ <title>Text Area Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oActiveEl && oActiveEl.tagName == 'TEXTAREA' )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtCols').value = GetAttribute( oActiveEl, 'cols' ) ;
+ GetE('txtRows').value = GetAttribute( oActiveEl, 'rows' ) ;
+ }
+ else
+ oActiveEl = null ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'TEXTAREA', {name: GetE('txtName').value} ) ;
+
+ SetAttribute( oActiveEl, 'cols', GetE('txtCols').value ) ;
+ SetAttribute( oActiveEl, 'rows', GetE('txtRows').value ) ;
+
+ return true ;
+}
+
+ </script>
+ </head>
+ <body style="overflow: hidden">
+ <table height="100%" width="100%">
+ <tr>
+ <td align="center">
+ <table border="0" cellpadding="0" cellspacing="0" width="80%">
+ <tr>
+ <td>
+ <span fckLang="DlgTextareaName">Name</span><br>
+ <input type="text" id="txtName" style="WIDTH: 100%">
+ <span fckLang="DlgTextareaCols">Collumns</span><br>
+ <input id="txtCols" type="text" size="5">
+ <br>
+ <span fckLang="DlgTextareaRows">Rows</span><br>
+ <input id="txtRows" type="text" size="5">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textfield.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textfield.html
new file mode 100644
index 0000000..efde66d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textfield.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Text field dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta content="noindex, nofollow" name="robots" />
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>
+ <script type="text/javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+ if ( oActiveEl && oActiveEl.tagName == 'INPUT' && ( oActiveEl.type == 'text' || oActiveEl.type == 'password' ) )
+ {
+ GetE('txtName').value = oActiveEl.name ;
+ GetE('txtValue').value = oActiveEl.value ;
+ GetE('txtSize').value = GetAttribute( oActiveEl, 'size' ) ;
+ GetE('txtMax').value = GetAttribute( oActiveEl, 'maxLength' ) ;
+ GetE('txtType').value = oActiveEl.type ;
+ }
+ else
+ oActiveEl = null ;
+
+ dialog.SetOkButton( true ) ;
+ dialog.SetAutoSize( true ) ;
+ SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+ if ( isNaN( GetE('txtMax').value ) || GetE('txtMax').value < 0 )
+ {
+ alert( "Maximum characters must be a positive number." ) ;
+ GetE('txtMax').focus() ;
+ return false ;
+ }
+ else if( isNaN( GetE('txtSize').value ) || GetE('txtSize').value < 0 )
+ {
+ alert( "Width must be a positive number." ) ;
+ GetE('txtSize').focus() ;
+ return false ;
+ }
+
+ oEditor.FCKUndo.SaveUndoStep() ;
+
+ oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: GetE('txtType').value } ) ;
+
+ SetAttribute( oActiveEl, 'value' , GetE('txtValue').value ) ;
+ SetAttribute( oActiveEl, 'size' , GetE('txtSize').value ) ;
+ SetAttribute( oActiveEl, 'maxlength', GetE('txtMax').value ) ;
+
+ return true ;
+}
+
+ </script>
+</head>
+<body style="overflow: hidden">
+ <table width="100%" style="height: 100%">
+ <tr>
+ <td align="center">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td>
+ <span fcklang="DlgTextName">Name</span><br />
+ <input id="txtName" type="text" size="20" />
+ </td>
+ <td>
+ </td>
+ <td>
+ <span fcklang="DlgTextValue">Value</span><br />
+ <input id="txtValue" type="text" size="25" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgTextCharWidth">Character Width</span><br />
+ <input id="txtSize" type="text" size="5" />
+ </td>
+ <td>
+ </td>
+ <td>
+ <span fcklang="DlgTextMaxChars">Maximum Characters</span><br />
+ <input id="txtMax" type="text" size="5" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span fcklang="DlgTextType">Type</span><br />
+ <select id="txtType">
+ <option value="text" selected="selected" fcklang="DlgTextTypeText">Text</option>
+ <option value="password" fcklang="DlgTextTypePass">Password</option>
+ </select>
+ </td>
+ <td>
+ &nbsp;</td>
+ <td>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_dtd_test.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_dtd_test.html
new file mode 100644
index 0000000..c149d15
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_dtd_test.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>DTD Test Page</title>
+ <script type="text/javascript">
+
+ // Define an object for this test page, so the assignment to FCK.DTD works
+ var FCK = {} ;
+ </script>
+ <script type="text/javascript" src="../_source/internals/fcktools.js"></script>
+ <script type="text/javascript" src="fck_xhtml10transitional.js"></script>
+</head>
+<body>
+ <h1>
+ DTD Contents
+ </h1>
+ <table border="1">
+ <script type="text/javascript">
+
+for ( var p in FCK.DTD )
+{
+ document.write( '<tr><td><b>' + p + '</b></td><td>' ) ;
+
+ var isFirst = true ;
+
+ for ( var c in FCK.DTD[p] )
+ {
+ if ( !isFirst )
+ document.write( ', ' ) ;
+ isFirst = false ;
+
+ document.write( c ) ;
+ }
+
+
+ document.write( '</td></tr>' ) ;
+}
+ </script>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10strict.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10strict.js
new file mode 100644
index 0000000..81c2670
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10strict.js
@@ -0,0 +1,116 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains the DTD mapping for XHTML 1.0 Strict.
+ * This file was automatically generated from the file: xhtml10-strict.dtd
+ */
+FCK.DTD = (function()
+{
+ var X = FCKTools.Merge ;
+
+ var H,I,J,K,C,L,M,A,B,D,E,G,N,F ;
+ A = {ins:1, del:1, script:1} ;
+ B = {hr:1, ul:1, div:1, blockquote:1, noscript:1, table:1, address:1, pre:1, p:1, h5:1, dl:1, h4:1, ol:1, h6:1, h1:1, h3:1, h2:1} ;
+ C = X({fieldset:1}, B) ;
+ D = X({sub:1, bdo:1, 'var':1, sup:1, br:1, kbd:1, map:1, samp:1, b:1, acronym:1, '#':1, abbr:1, code:1, i:1, cite:1, tt:1, strong:1, q:1, em:1, big:1, small:1, span:1, dfn:1}, A) ;
+ E = X({img:1, object:1}, D) ;
+ F = {input:1, button:1, textarea:1, select:1, label:1} ;
+ G = X({a:1}, F) ;
+ H = {img:1, noscript:1, br:1, kbd:1, button:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, select:1, '#':1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, strong:1, textarea:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, map:1, dl:1, del:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, address:1, tt:1, q:1, pre:1, p:1, em:1, dfn:1} ;
+
+ I = X({form:1, fieldset:1}, B, E, G) ;
+ J = {tr:1} ;
+ K = {'#':1} ;
+ L = X(E, G) ;
+ M = {li:1} ;
+ N = X({form:1}, A, C) ;
+
+ return {
+ col: {},
+ tr: {td:1, th:1},
+ img: {},
+ colgroup: {col:1},
+ noscript: N,
+ td: I,
+ br: {},
+ th: I,
+ kbd: L,
+ button: X(B, E),
+ h5: L,
+ h4: L,
+ samp: L,
+ h6: L,
+ ol: M,
+ h1: L,
+ h3: L,
+ option: K,
+ h2: L,
+ form: X(A, C),
+ select: {optgroup:1, option:1},
+ ins: I,
+ abbr: L,
+ label: L,
+ code: L,
+ table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1},
+ script: K,
+ tfoot: J,
+ cite: L,
+ li: I,
+ input: {},
+ strong: L,
+ textarea: K,
+ big: L,
+ small: L,
+ span: L,
+ dt: L,
+ hr: {},
+ sub: L,
+ optgroup: {option:1},
+ bdo: L,
+ param: {},
+ 'var': L,
+ div: I,
+ object: X({param:1}, H),
+ sup: L,
+ dd: I,
+ area: {},
+ map: X({form:1, area:1}, A, C),
+ dl: {dt:1, dd:1},
+ del: I,
+ fieldset: X({legend:1}, H),
+ thead: J,
+ ul: M,
+ acronym: L,
+ b: L,
+ a: X({img:1, object:1}, D, F),
+ blockquote: N,
+ caption: L,
+ i: L,
+ tbody: J,
+ address: L,
+ tt: L,
+ legend: L,
+ q: L,
+ pre: X({a:1}, D, F),
+ p: L,
+ em: L,
+ dfn: L
+ } ;
+})() ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10transitional.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10transitional.js
new file mode 100644
index 0000000..ce056a1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10transitional.js
@@ -0,0 +1,140 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains the DTD mapping for XHTML 1.0 Transitional.
+ * This file was automatically generated from the file: xhtml10-transitional.dtd
+ */
+FCK.DTD = (function()
+{
+ var X = FCKTools.Merge ;
+
+ var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I ;
+ A = {isindex:1, fieldset:1} ;
+ B = {input:1, button:1, select:1, textarea:1, label:1} ;
+ C = X({a:1}, B) ;
+ D = X({iframe:1}, C) ;
+ E = {hr:1, ul:1, menu:1, div:1, blockquote:1, noscript:1, table:1, center:1, address:1, dir:1, pre:1, h5:1, dl:1, h4:1, noframes:1, h6:1, ol:1, h1:1, h3:1, h2:1} ;
+ F = {ins:1, del:1, script:1} ;
+ G = X({b:1, acronym:1, bdo:1, 'var':1, '#':1, abbr:1, code:1, br:1, i:1, cite:1, kbd:1, u:1, strike:1, s:1, tt:1, strong:1, q:1, samp:1, em:1, dfn:1, span:1}, F) ;
+ H = X({sub:1, img:1, object:1, sup:1, basefont:1, map:1, applet:1, font:1, big:1, small:1}, G) ;
+ I = X({p:1}, H) ;
+ J = X({iframe:1}, H, B) ;
+ K = {img:1, noscript:1, br:1, kbd:1, center:1, button:1, basefont:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, font:1, '#':1, select:1, menu:1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, iframe:1, strong:1, textarea:1, noframes:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, strike:1, dir:1, map:1, dl:1, applet:1, del:1, isindex:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, u:1, s:1, tt:1, address:1, q:1, pre:1, p:1, em:1, dfn:1} ;
+
+ L = X({a:1}, J) ;
+ M = {tr:1} ;
+ N = {'#':1} ;
+ O = X({param:1}, K) ;
+ P = X({form:1}, A, D, E, I) ;
+ Q = {li:1} ;
+
+ return {
+ col: {},
+ tr: {td:1, th:1},
+ img: {},
+ colgroup: {col:1},
+ noscript: P,
+ td: P,
+ br: {},
+ th: P,
+ center: P,
+ kbd: L,
+ button: X(I, E),
+ basefont: {},
+ h5: L,
+ h4: L,
+ samp: L,
+ h6: L,
+ ol: Q,
+ h1: L,
+ h3: L,
+ option: N,
+ h2: L,
+ form: X(A, D, E, I),
+ select: {optgroup:1, option:1},
+ font: J, // Changed from L to J (see (1))
+ ins: P,
+ menu: Q,
+ abbr: L,
+ label: L,
+ table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1},
+ code: L,
+ script: N,
+ tfoot: M,
+ cite: L,
+ li: P,
+ input: {},
+ iframe: P,
+ strong: J, // Changed from L to J (see (1))
+ textarea: N,
+ noframes: P,
+ big: J, // Changed from L to J (see (1))
+ small: J, // Changed from L to J (see (1))
+ span: J, // Changed from L to J (see (1))
+ hr: {},
+ dt: L,
+ sub: J, // Changed from L to J (see (1))
+ optgroup: {option:1},
+ param: {},
+ bdo: L,
+ 'var': J, // Changed from L to J (see (1))
+ div: P,
+ object: O,
+ sup: J, // Changed from L to J (see (1))
+ dd: P,
+ strike: J, // Changed from L to J (see (1))
+ area: {},
+ dir: Q,
+ map: X({area:1, form:1, p:1}, A, F, E),
+ applet: O,
+ dl: {dt:1, dd:1},
+ del: P,
+ isindex: {},
+ fieldset: X({legend:1}, K),
+ thead: M,
+ ul: Q,
+ acronym: L,
+ b: J, // Changed from L to J (see (1))
+ a: J,
+ blockquote: P,
+ caption: L,
+ i: J, // Changed from L to J (see (1))
+ u: J, // Changed from L to J (see (1))
+ tbody: M,
+ s: L,
+ address: X(D, I),
+ tt: J, // Changed from L to J (see (1))
+ legend: L,
+ q: L,
+ pre: X(G, C),
+ p: L,
+ em: J, // Changed from L to J (see (1))
+ dfn: L
+ } ;
+})() ;
+
+/*
+ Notes:
+ (1) According to the DTD, many elements, like <b> accept <a> elements
+ inside of them. But, to produce better output results, we have manually
+ changed the map to avoid breaking the links on pieces, having
+ "<b>this is a </b><a><b>link</b> test</a>", instead of
+ "<b>this is a <a>link</a></b><a> test</a>".
+*/
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdebug.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdebug.html
new file mode 100644
index 0000000..35dd663
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdebug.html
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the Debug window.
+ * It automatically popups if the Debug = true in the configuration file.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>FCKeditor Debug Window</title>
+ <meta name="robots" content="noindex, nofollow" />
+ <script type="text/javascript">
+
+var oWindow ;
+var oDiv ;
+
+if ( !window.FCKMessages )
+ window.FCKMessages = new Array() ;
+
+window.onload = function()
+{
+ oWindow = document.getElementById('xOutput').contentWindow ;
+ oWindow.document.open() ;
+ oWindow.document.write( '<div id="divMsg"><\/div>' ) ;
+ oWindow.document.close() ;
+ oDiv = oWindow.document.getElementById('divMsg') ;
+}
+
+function Output( message, color, noParse )
+{
+ if ( !noParse && message != null && isNaN( message ) )
+ message = message.replace(/</g, "&lt;") ;
+
+ if ( color )
+ message = '<font color="' + color + '">' + message + '<\/font>' ;
+
+ window.FCKMessages[ window.FCKMessages.length ] = message ;
+ StartTimer() ;
+}
+
+function OutputObject( anyObject, color )
+{
+ var message ;
+
+ if ( anyObject != null )
+ {
+ message = 'Properties of: ' + anyObject + '</b><blockquote>' ;
+
+ for (var prop in anyObject)
+ {
+ try
+ {
+ var sVal = anyObject[ prop ] != null ? anyObject[ prop ] + '' : '[null]' ;
+ message += '<b>' + prop + '</b> : ' + sVal.replace(/</g, '&lt;') + '<br>' ;
+ }
+ catch (e)
+ {
+ try
+ {
+ message += '<b>' + prop + '</b> : [' + typeof( anyObject[ prop ] ) + ']<br>' ;
+ }
+ catch (e)
+ {
+ message += '<b>' + prop + '</b> : [-error-]<br>' ;
+ }
+ }
+ }
+
+ message += '</blockquote><b>' ;
+ } else
+ message = 'OutputObject : Object is "null".' ;
+
+ Output( message, color, true ) ;
+}
+
+function StartTimer()
+{
+ window.setTimeout( 'CheckMessages()', 100 ) ;
+}
+
+function CheckMessages()
+{
+ if ( window.FCKMessages.length > 0 )
+ {
+ // Get the first item in the queue
+ var sMessage = window.FCKMessages[0] ;
+
+ // Removes the first item from the queue
+ var oTempArray = new Array() ;
+ for ( i = 1 ; i < window.FCKMessages.length ; i++ )
+ oTempArray[ i - 1 ] = window.FCKMessages[ i ] ;
+ window.FCKMessages = oTempArray ;
+
+ var d = new Date() ;
+ var sTime =
+ ( d.getHours() + 100 + '' ).substr( 1,2 ) + ':' +
+ ( d.getMinutes() + 100 + '' ).substr( 1,2 ) + ':' +
+ ( d.getSeconds() + 100 + '' ).substr( 1,2 ) + ':' +
+ ( d.getMilliseconds() + 1000 + '' ).substr( 1,3 ) ;
+
+ var oMsgDiv = oWindow.document.createElement( 'div' ) ;
+ oMsgDiv.innerHTML = sTime + ': <b>' + sMessage + '<\/b>' ;
+ oDiv.appendChild( oMsgDiv ) ;
+ oMsgDiv.scrollIntoView() ;
+ }
+}
+
+function Clear()
+{
+ oDiv.innerHTML = '' ;
+}
+ </script>
+</head>
+<body style="margin: 10px">
+ <table style="height: 100%" cellspacing="5" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td>
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <td style="font-weight: bold; font-size: 1.2em;">
+ FCKeditor Debug Window</td>
+ <td align="right">
+ <input type="button" value="Clear" onclick="Clear();" /></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="height: 100%">
+ <td style="border: #696969 1px solid">
+ <iframe id="xOutput" width="100%" height="100%" scrolling="auto" src="javascript:void(0)"
+ frameborder="0"></iframe>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdialog.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdialog.html
new file mode 100644
index 0000000..706e4b1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdialog.html
@@ -0,0 +1,819 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page is used by all dialog box as the container.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <script type="text/javascript">
+// <![CDATA[
+
+// Domain relaxation logic.
+(function()
+{
+ var d = document.domain ;
+
+ while ( true )
+ {
+ // Test if we can access a parent property.
+ try
+ {
+ var parentDomain = ( Args().TopWindow || E ).document.domain ;
+
+ if ( document.domain != parentDomain )
+ document.domain = parentDomain ;
+
+ break ;
+ }
+ catch( e ) {}
+
+ // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+ d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+ if ( d.length == 0 )
+ break ; // It was not able to detect the domain.
+
+ document.domain = d ;
+ }
+})() ;
+
+var E = frameElement._DialogArguments.Editor ;
+
+// It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE.
+// So let's use functions to access its members instead.
+function Args()
+{
+ return frameElement._DialogArguments ;
+}
+
+function ParentDialog( dialog )
+{
+ return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
+}
+
+var FCK = E.FCK ;
+var FCKTools = E.FCKTools ;
+var FCKDomTools = E.FCKDomTools ;
+var FCKDialog = E.FCKDialog ;
+var FCKBrowserInfo = E.FCKBrowserInfo ;
+var FCKConfig = E.FCKConfig ;
+
+// Steal the focus so that the caret would no longer stay in the editor iframe.
+window.focus() ;
+
+// Sets the Skin CSS
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
+
+// Sets the language direction.
+var langDir = E.FCKLang.Dir ;
+
+// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
+if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;
+
+FCKTools.RegisterDollarFunction( window ) ;
+
+// Resize related functions.
+var Sizer = function()
+{
+ var bAutoSize = false ;
+
+ var retval = {
+ // Sets whether the dialog should auto-resize according to its content's height.
+ SetAutoSize : function( autoSize )
+ {
+ bAutoSize = autoSize ;
+ this.RefreshSize() ;
+ },
+
+ // Fit the dialog container's layout to the inner iframe's external size.
+ RefreshContainerSize : function()
+ {
+ var frmMain = $( 'frmMain' ) ;
+
+ if ( frmMain )
+ {
+ // Get the container size.
+ var height = $( 'contents' ).offsetHeight ;
+
+ // Subtract the size of other elements.
+ height -= $( 'TitleArea' ).offsetHeight ;
+ height -= $( 'TabsRow' ).offsetHeight ;
+ height -= $( 'PopupButtons' ).offsetHeight ;
+
+ frmMain.style.height = Math.max( height, 0 ) + 'px' ;
+ }
+ },
+
+ // Resize and re-layout the dialog.
+ // Triggers the onresize event for the layout logic.
+ ResizeDialog : function( width, height )
+ {
+ FCKDomTools.SetElementStyles( window.frameElement,
+ {
+ 'width' : width + 'px',
+ 'height' : height + 'px'
+ } ) ;
+
+ // If the skin have defined a function for resize fixes, call it now.
+ if ( typeof window.DoResizeFixes == 'function' )
+ window.DoResizeFixes() ;
+ },
+
+ // if bAutoSize is true, automatically fit the dialog size and layout to
+ // accomodate the inner iframe's internal height.
+ // if bAutoSize is false, then only the layout logic for the dialog decorations
+ // is run to accomodate the inner iframe's external height.
+ RefreshSize : function()
+ {
+ if ( bAutoSize )
+ {
+ var frmMain = $( 'frmMain' ) ;
+ var innerDoc = frmMain.contentWindow.document ;
+ var isStrict = FCKTools.IsStrictMode( innerDoc ) ;
+
+ // Get the size of the frame contents.
+ var innerWidth = isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ;
+ var innerHeight = isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ;
+
+ // Get the current frame size.
+ var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ;
+
+ var deltaWidth = innerWidth - frameSize.Width ;
+ var deltaHeight = innerHeight - frameSize.Height ;
+
+ // If the contents fits the current size.
+ if ( deltaWidth <= 0 && deltaHeight <= 0 )
+ return ;
+
+ var dialogWidth = frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ;
+ var dialogHeight = frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ;
+
+ this.ResizeDialog( dialogWidth, dialogHeight ) ;
+ }
+ this.RefreshContainerSize() ;
+ }
+ }
+
+ /**
+ * Safari seems to have a bug with the time when RefreshSize() is executed - it
+ * thinks frmMain's innerHeight is 0 if we query the value too soon after the
+ * page is loaded in some circumstances. (#1316)
+ * TODO : Maybe this is not needed anymore after #35.
+ */
+ if ( FCKBrowserInfo.IsSafari )
+ {
+ var originalRefreshSize = retval.RefreshSize ;
+
+ retval.RefreshSize = function()
+ {
+ FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ;
+ }
+ }
+
+ /**
+ * IE6 has a similar bug where it sometimes thinks $('contents') has an
+ * offsetHeight of 0 (#2114).
+ */
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ var originalRefreshContainerSize = retval.RefreshContainerSize ;
+ retval.RefreshContainerSize = function()
+ {
+ FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ;
+ }
+ }
+
+ window.onresize = function()
+ {
+ retval.RefreshContainerSize() ;
+ }
+
+ window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ;
+
+ return retval ;
+}() ;
+
+// Manages the throbber image that appears if the inner part of dialog is taking too long to load.
+var Throbber = function()
+{
+ var timer ;
+
+ var updateThrobber = function()
+ {
+ var throbberParent = $( 'throbberBlock' ) ;
+ var throbberBlocks = throbberParent.childNodes ;
+ var lastClass = throbberParent.lastChild.className ;
+
+ // From the last to the second one, copy the class from the previous one.
+ for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- )
+ throbberBlocks[i].className = throbberBlocks[i-1].className ;
+
+ // For the first one, copy the last class (rotation).
+ throbberBlocks[0].className = lastClass ;
+ }
+
+ return {
+ Show : function( waitMilliseconds )
+ {
+ // Auto-setup the Show function to be called again after the
+ // requested amount of time.
+ if ( waitMilliseconds && waitMilliseconds > 0 )
+ {
+ timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ;
+ return ;
+ }
+
+ var throbberParent = $( 'throbberBlock' ) ;
+
+ if (throbberParent.childNodes.length == 0)
+ {
+ // Create the throbber blocks.
+ var classIds = [ 1,2,3,4,5,4,3,2 ] ;
+ while ( classIds.length > 0 )
+ throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ;
+ }
+
+ // Center the throbber.
+ var frm = $( 'contents' ) ;
+ var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ;
+ var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ;
+ var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ;
+ throbberParent.style.left = parseInt( x, 10 ) + 'px' ;
+ throbberParent.style.top = parseInt( y, 10 ) + 'px' ;
+
+ // Show it.
+ throbberParent.style.visibility = '' ;
+
+ // Hide tabs and buttons:
+ $( 'Tabs' ).style.visibility = 'hidden' ;
+ $( 'PopupButtons' ).style.visibility = 'hidden' ;
+
+ // Setup the animation interval.
+ timer = setInterval( updateThrobber, 100 ) ;
+ },
+
+ Hide : function()
+ {
+ if ( timer )
+ {
+ clearInterval( timer ) ;
+ timer = null ;
+ }
+
+ $( 'throbberBlock' ).style.visibility = 'hidden' ;
+
+ // Show tabs and buttons:
+ $( 'Tabs' ).style.visibility = '' ;
+ $( 'PopupButtons' ).style.visibility = '' ;
+ }
+ } ;
+}() ;
+
+// Drag and drop handlers.
+var DragAndDrop = function()
+{
+ var registeredWindows = [] ;
+ var lastCoords ;
+ var currentPos ;
+
+ var cleanUpHandlers = function()
+ {
+ for ( var i = 0 ; i < registeredWindows.length ; i++ )
+ {
+ FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
+ FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
+ }
+ }
+
+ var dragMouseMoveHandler = function( evt )
+ {
+ if ( !lastCoords )
+ return ;
+
+ if ( !evt )
+ evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
+
+ // Updated the last coordinates.
+ var currentCoords =
+ {
+ x : evt.screenX,
+ y : evt.screenY
+ } ;
+
+ currentPos =
+ {
+ x : currentPos.x + ( currentCoords.x - lastCoords.x ),
+ y : currentPos.y + ( currentCoords.y - lastCoords.y )
+ } ;
+
+ lastCoords = currentCoords ;
+
+ frameElement.style.left = currentPos.x + 'px' ;
+ frameElement.style.top = currentPos.y + 'px' ;
+
+ if ( evt.preventDefault )
+ evt.preventDefault() ;
+ else
+ evt.returnValue = false ;
+ }
+
+ var dragMouseUpHandler = function( evt )
+ {
+ if ( !lastCoords )
+ return ;
+ if ( !evt )
+ evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
+ cleanUpHandlers() ;
+ lastCoords = null ;
+ }
+
+ return {
+
+ MouseDownHandler : function( evt )
+ {
+ var view = null ;
+ if ( !evt )
+ {
+ view = FCKTools.GetElementDocument( this ).parentWindow ;
+ evt = view.event ;
+ }
+ else
+ view = evt.view ;
+
+ var target = evt.srcElement || evt.target ;
+ if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' )
+ return ;
+
+ lastCoords =
+ {
+ x : evt.screenX,
+ y : evt.screenY
+ } ;
+
+ // Save the current IFRAME position.
+ currentPos =
+ {
+ x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ),
+ y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 )
+ } ;
+
+ for ( var i = 0 ; i < registeredWindows.length ; i++ )
+ {
+ FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
+ FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
+ }
+
+ if ( evt.preventDefault )
+ evt.preventDefault() ;
+ else
+ evt.returnValue = false ;
+ },
+
+ RegisterHandlers : function( w )
+ {
+ registeredWindows.push( w ) ;
+ }
+ }
+}() ;
+
+// Selection related functions.
+//(Became simple shortcuts after the fix for #1990)
+var Selection =
+{
+ /**
+ * Ensures that the editing area contains an active selection. This is a
+ * requirement for IE, as it looses the selection when the focus moves to other
+ * frames.
+ */
+ EnsureSelection : function()
+ {
+ // Move the focus to the Cancel button so even if the dialog contains a
+ // contentEditable element the selection is properly restored in the editor #2496
+ window.focus() ;
+ $( 'btnCancel' ).focus() ;
+
+ FCK.Selection.Restore() ;
+ },
+
+ /**
+ * Get the FCKSelection object for the editor instance.
+ */
+ GetSelection : function()
+ {
+ return FCK.Selection ;
+ },
+
+ /**
+ * Get the selected element in the editing area (for object selections).
+ */
+ GetSelectedElement : function()
+ {
+ return FCK.Selection.GetSelectedElement() ;
+ }
+}
+
+// Tab related functions.
+var Tabs = function()
+{
+ // Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick
+ // would build circular references with the element references inside and cause memory leaks in IE6.
+ var oTabs = new Object() ;
+
+ var setSelectedTab = function( tabCode )
+ {
+ for ( var sCode in oTabs )
+ {
+ if ( sCode == tabCode )
+ $( oTabs[sCode] ).className = 'PopupTabSelected' ;
+ else
+ $( oTabs[sCode] ).className = 'PopupTab' ;
+ }
+
+ if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
+ window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
+ }
+
+ function TabDiv_OnClick()
+ {
+ setSelectedTab( this.TabCode ) ;
+ }
+
+ window.AddTab = function( tabCode, tabText, startHidden )
+ {
+ if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
+ return ;
+
+ var eTabsRow = $( 'Tabs' ) ;
+
+ var oCell = eTabsRow.insertCell( eTabsRow.cells.length - 1 ) ;
+ oCell.noWrap = true ;
+
+ var oDiv = document.createElement( 'DIV' ) ;
+ oDiv.className = 'PopupTab' ;
+ oDiv.innerHTML = tabText ;
+ oDiv.TabCode = tabCode ;
+ oDiv.onclick = TabDiv_OnClick ;
+ oDiv.id = Math.random() ;
+
+ if ( startHidden )
+ oDiv.style.display = 'none' ;
+
+ eTabsRow = $( 'TabsRow' ) ;
+
+ oCell.appendChild( oDiv ) ;
+
+ if ( eTabsRow.style.display == 'none' )
+ {
+ var eTitleArea = $( 'TitleArea' ) ;
+ eTitleArea.className = 'PopupTitle' ;
+
+ oDiv.className = 'PopupTabSelected' ;
+ eTabsRow.style.display = '' ;
+
+ if ( window.onresize )
+ window.onresize() ;
+ }
+
+ oTabs[ tabCode ] = oDiv.id ;
+
+ FCKTools.DisableSelection( oDiv ) ;
+ } ;
+
+ window.SetSelectedTab = setSelectedTab ;
+
+ window.SetTabVisibility = function( tabCode, isVisible )
+ {
+ var oTab = $( oTabs[ tabCode ] ) ;
+ oTab.style.display = isVisible ? '' : 'none' ;
+
+ if ( ! isVisible && oTab.className == 'PopupTabSelected' )
+ {
+ for ( var sCode in oTabs )
+ {
+ if ( $( oTabs[sCode] ).style.display != 'none' )
+ {
+ setSelectedTab( sCode ) ;
+ break ;
+ }
+ }
+ }
+ } ;
+}() ;
+
+// readystatechange handler for registering drag and drop handlers in cover
+// iframes, defined out here to avoid memory leak.
+// Do NOT put this function as a private function as it will induce memory leak
+// in IE and it's not detectable with Drip or sIEve and undetectable leaks are
+// really nasty (sigh).
+var onReadyRegister = function()
+{
+ if ( this.readyState != 'complete' )
+ return ;
+ DragAndDrop.RegisterHandlers( this.contentWindow ) ;
+} ;
+
+// The business logic of the dialog, dealing with operational things like
+// dialog open/dialog close/enable/disable/etc.
+(function()
+{
+ var setOnKeyDown = function( targetDocument )
+ {
+ targetDocument.onkeydown = function ( e )
+ {
+ e = e || event || this.parentWindow.event ;
+ switch ( e.keyCode )
+ {
+ case 13 : // ENTER
+ var oTarget = e.srcElement || e.target ;
+ if ( oTarget.tagName == 'TEXTAREA' )
+ return true ;
+ Ok() ;
+ return false ;
+
+ case 27 : // ESC
+ Cancel() ;
+ return false ;
+ }
+ return true ;
+ }
+ } ;
+
+ var contextMenuBlocker = function( e )
+ {
+ var sTagName = e.target.tagName ;
+ if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
+ e.preventDefault() ;
+ } ;
+
+ var disableContextMenu = function( targetDocument )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ return ;
+
+ targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ;
+ } ;
+
+ // Program entry point.
+ window.Init = function()
+ {
+ $( 'contents' ).dir = langDir;
+
+ // Start the throbber timer.
+ Throbber.Show( 1000 ) ;
+
+ Sizer.RefreshContainerSize() ;
+ LoadInnerDialog() ;
+
+ FCKTools.DisableSelection( document.body ) ;
+
+ // Make the title area draggable.
+ var titleElement = $( 'header' ) ;
+ titleElement.onmousedown = DragAndDrop.MouseDownHandler ;
+
+ // Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
+ DragAndDrop.RegisterHandlers( window ) ;
+ DragAndDrop.RegisterHandlers( Args().TopWindow ) ;
+
+ // Disable the previous dialog if it exists.
+ if ( ParentDialog() )
+ {
+ ParentDialog().contentWindow.SetEnabled( false ) ;
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ var currentParent = ParentDialog() ;
+ while ( currentParent )
+ {
+ var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ;
+ if ( blockerFrame.readyState == 'complete' )
+ DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
+ else
+ blockerFrame.onreadystatechange = onReadyRegister ;
+ currentParent = ParentDialog( currentParent ) ;
+ }
+ }
+ else
+ {
+ var currentParent = ParentDialog() ;
+ while ( currentParent )
+ {
+ DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ;
+ currentParent = ParentDialog( currentParent ) ;
+ }
+ }
+ }
+
+ // If this is the only dialog on screen, enable the background cover.
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ var blockerFrame = FCKDialog.GetCover().firstChild ;
+ if ( blockerFrame.readyState == 'complete' )
+ DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
+ else
+ blockerFrame.onreadystatechange = onReadyRegister;
+ }
+
+ // Add Enter/Esc hotkeys and disable context menu for the dialog.
+ setOnKeyDown( document ) ;
+ disableContextMenu( document ) ;
+ } ;
+
+ window.LoadInnerDialog = function()
+ {
+ if ( window.onresize )
+ window.onresize() ;
+
+ // First of all, translate the dialog box contents.
+ E.FCKLanguageManager.TranslatePage( document ) ;
+
+ // Create the IFRAME that holds the dialog contents.
+ $( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
+ } ;
+
+ window.InnerDialogLoaded = function()
+ {
+ // If the dialog has been closed before the iframe is loaded, do nothing.
+ if ( !frameElement.parentNode )
+ return null ;
+
+ Throbber.Hide() ;
+
+ var frmMain = $('frmMain') ;
+ var innerWindow = frmMain.contentWindow ;
+ var innerDoc = innerWindow.document ;
+
+ // Show the loaded iframe.
+ frmMain.style.visibility = '' ;
+
+ // Set the language direction.
+ innerDoc.documentElement.dir = langDir ;
+
+ // Sets the Skin CSS.
+ innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
+
+ setOnKeyDown( innerDoc ) ;
+ disableContextMenu( innerDoc ) ;
+
+ Sizer.RefreshContainerSize();
+
+ DragAndDrop.RegisterHandlers( innerWindow ) ;
+
+ innerWindow.focus() ;
+
+ return E ;
+ } ;
+
+ window.SetOkButton = function( showIt )
+ {
+ $('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
+ } ;
+
+ window.Ok = function()
+ {
+ Selection.EnsureSelection() ;
+
+ var frmMain = window.frames["frmMain"] ;
+
+ if ( frmMain.Ok && frmMain.Ok() )
+ CloseDialog() ;
+ else
+ frmMain.focus() ;
+ } ;
+
+ window.Cancel = function( dontFireChange )
+ {
+ Selection.EnsureSelection() ;
+ return CloseDialog( dontFireChange ) ;
+ } ;
+
+ window.CloseDialog = function( dontFireChange )
+ {
+ Throbber.Hide() ;
+
+ // Points the src to a non-existent location to avoid loading errors later, in case the dialog
+ // haven't been completed loaded at this point.
+ if ( $( 'frmMain' ) )
+ $( 'frmMain' ).src = FCKTools.GetVoidUrl() ;
+
+ if ( !dontFireChange && !FCK.EditMode )
+ {
+ // All dialog windows, by default, will fire the "OnSelectionChange"
+ // event, no matter the Ok or Cancel button has been pressed.
+ // It seems that OnSelectionChange may enter on a concurrency state
+ // on some situations (#1965), so we should put the event firing in
+ // the execution queue instead of executing it immediately.
+ setTimeout( function()
+ {
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ }, 0 ) ;
+ }
+
+ FCKDialog.OnDialogClose( window ) ;
+ } ;
+
+ window.SetEnabled = function( isEnabled )
+ {
+ var cover = $( 'cover' ) ;
+ cover.style.display = isEnabled ? 'none' : '' ;
+
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ if ( !isEnabled )
+ {
+ // Inser the blocker IFRAME before the cover.
+ var blocker = document.createElement( 'iframe' ) ;
+ blocker.src = FCKTools.GetVoidUrl() ;
+ blocker.hideFocus = true ;
+ blocker.frameBorder = 0 ;
+ blocker.id = blocker.className = 'blocker' ;
+ cover.appendChild( blocker ) ;
+ }
+ else
+ {
+ var blocker = $( 'blocker' ) ;
+ if ( blocker && blocker.parentNode )
+ blocker.parentNode.removeChild( blocker ) ;
+ }
+ }
+ } ;
+})() ;
+// ]]>
+ </script>
+ </head>
+ <body onload="Init();" class="PopupBody">
+ <div class="contents" id="contents">
+ <div id="header">
+ <div id="TitleArea" class="PopupTitle PopupTitleBorder">
+ <script type="text/javascript">
+// <![CDATA[
+document.write( Args().Title ) ;
+// ]]>
+ </script>
+ <div id="closeButton" onclick="Cancel();"></div>
+ </div>
+ <div id="TabsRow" class="PopupTabArea" style="display: none">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr id="Tabs">
+ <td class="PopupTabEmptyArea">&nbsp;</td>
+ <td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div id="innerContents"></div>
+ <div id="PopupButtons" class="PopupButtons">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="100%">&nbsp;</td>
+ <td nowrap="nowrap">
+ <input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
+ &nbsp;
+ <input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="tl"></div>
+ <div class="tc"></div>
+ <div class="tr"></div>
+ <div class="ml"></div>
+ <div class="mr"></div>
+ <div class="bl"></div>
+ <div class="bc"></div>
+ <div class="br"></div>
+ <div class="cover" id="cover" style="display:none"></div>
+ <div id="throbberBlock" style="position: absolute; visibility: hidden"></div>
+ <script type="text/javascript">
+// <![CDATA[
+ // Set the class name for language direction.
+ document.body.className += ' ' + langDir ;
+
+ var cover = $( 'cover' ) ;
+ cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ;
+ FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
+// ]]>
+ </script>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.html
new file mode 100644
index 0000000..b6ada3e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.html
@@ -0,0 +1,317 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Main page that holds the editor.
+-->
+<html>
+<head>
+ <title>FCKeditor</title>
+ <meta name="robots" content="noindex, nofollow">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta http-equiv="Cache-Control" content="public">
+ <script type="text/javascript">
+
+// #1645: Alert the user if opening FCKeditor in FF3 from local filesystem
+// without security.fileuri.strict_origin_policy disabled.
+if ( document.location.protocol == 'file:' )
+{
+ try
+ {
+ window.parent.document.domain ;
+ }
+ catch ( e )
+ {
+ window.addEventListener( 'load', function()
+ {
+ document.body.innerHTML = '\
+ <div style="border: 1px red solid; font-family: arial; font-size: 12px; color: red; padding:10px;">\
+ <p>\
+ <b>Your browser security settings don\'t allow FCKeditor to be opened from\
+ the local filesystem.<\/b>\
+ <\/p>\
+ <p>\
+ Please open the <b>about:config<\/b> page and disable the\
+ &quot;security.fileuri.strict_origin_policy&quot; option; then load this page again.\
+ <\/p>\
+ <p>\
+ Check our <a href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/FAQ#ff3perms">FAQ<\/a>\
+ for more information.\
+ <\/p>\
+ <\/div>' ;
+ }, false ) ;
+ }
+}
+
+// Save a reference to the default domain.
+var FCK_ORIGINAL_DOMAIN ;
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+ var d = FCK_ORIGINAL_DOMAIN = document.domain ;
+
+ while ( true )
+ {
+ // Test if we can access a parent property.
+ try
+ {
+ var test = window.parent.document.domain ;
+ break ;
+ }
+ catch( e ) {}
+
+ // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+ d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+ if ( d.length == 0 )
+ break ; // It was not able to detect the domain.
+
+ try
+ {
+ document.domain = d ;
+ }
+ catch (e)
+ {
+ break ;
+ }
+ }
+})() ;
+
+// Save a reference to the detected runtime domain.
+var FCK_RUNTIME_DOMAIN = document.domain ;
+
+var FCK_IS_CUSTOM_DOMAIN = ( FCK_ORIGINAL_DOMAIN != FCK_RUNTIME_DOMAIN ) ;
+
+// Instead of loading scripts and CSSs using inline tags, all scripts are
+// loaded by code. In this way we can guarantee the correct processing order,
+// otherwise external scripts and inline scripts could be executed in an
+// unwanted order (IE).
+
+function LoadScript( url )
+{
+ document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
+}
+
+// Main editor scripts.
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
+
+LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
+
+// Base configuration file.
+LoadScript( '../fckconfig.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// Adobe AIR compatibility file.
+if ( FCKBrowserInfo.IsAIR )
+ LoadScript( 'js/fckadobeair.js' ) ;
+
+if ( FCKBrowserInfo.IsIE )
+{
+ // Remove IE mouse flickering.
+ try
+ {
+ document.execCommand( 'BackgroundImageCache', false, true ) ;
+ }
+ catch (e)
+ {
+ // We have been reported about loading problems caused by the above
+ // line. For safety, let's just ignore errors.
+ }
+
+ // Create the default cleanup object used by the editor.
+ FCK.IECleanup = new FCKIECleanup( window ) ;
+ FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ;
+ FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
+}
+
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
+// The config hidden field is processed immediately, because
+// CustomConfigurationsPath may be set in the page.
+FCKConfig.ProcessHiddenField() ;
+
+// Load the custom configurations file (if defined).
+if ( FCKConfig.CustomConfigurationsPath.length > 0 )
+ LoadScript( FCKConfig.CustomConfigurationsPath ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// Load configurations defined at page level.
+FCKConfig_LoadPageConfig() ;
+
+FCKConfig_PreProcess() ;
+
+// Load the full debug script.
+if ( FCKConfig.Debug )
+ LoadScript( '_source/internals/fckdebug.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+var FCK_InternalCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'html{min-height:100%}table.FCK__ShowTableBorders,table.FCK__ShowTableBorders td,table.FCK__ShowTableBorders th{border:#d3d3d3 1px solid}form{border:1px dotted #F00;padding:2px}.FCK__Flash{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_flashlogo.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__UnknownObject{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_plugin.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__Anchor{border:1px dotted #00F;background-position:center center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;width:16px;height:15px;vertical-align:middle}.FCK__AnchorC{border:1px dotted #00F;background-position:1px center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}a[name]{border:1px dotted #00F;background-position:0 center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}.FCK__PageBreak{background-position:center center;background-image:url(images/fck_pagebreak.gif);background-repeat:no-repeat;clear:both;display:block;float:none;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;border-right:0;border-left:0;height:5px}.FCK__InputHidden{width:19px;height:18px;background-image:url(images/fck_hiddenfield.gif);background-repeat:no-repeat;vertical-align:text-bottom;background-position:center center}.FCK__ShowBlocks p,.FCK__ShowBlocks div,.FCK__ShowBlocks pre,.FCK__ShowBlocks address,.FCK__ShowBlocks blockquote,.FCK__ShowBlocks h1,.FCK__ShowBlocks h2,.FCK__ShowBlocks h3,.FCK__ShowBlocks h4,.FCK__ShowBlocks h5,.FCK__ShowBlocks h6{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px;padding-left:8px}.FCK__ShowBlocks p{background-image:url(images/block_p.png)}.FCK__ShowBlocks div{background-image:url(images/block_div.png)}.FCK__ShowBlocks pre{background-image:url(images/block_pre.png)}.FCK__ShowBlocks address{background-image:url(images/block_address.png)}.FCK__ShowBlocks blockquote{background-image:url(images/block_blockquote.png)}.FCK__ShowBlocks h1{background-image:url(images/block_h1.png)}.FCK__ShowBlocks h2{background-image:url(images/block_h2.png)}.FCK__ShowBlocks h3{background-image:url(images/block_h3.png)}.FCK__ShowBlocks h4{background-image:url(images/block_h4.png)}.FCK__ShowBlocks h5{background-image:url(images/block_h5.png)}.FCK__ShowBlocks h6{background-image:url(images/block_h6.png)}' ) ;
+var FCK_ShowTableBordersCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'table:not([border]),table:not([border]) > tr > td,table:not([border]) > tr > th,table:not([border]) > tbody > tr > td,table:not([border]) > tbody > tr > th,table:not([border]) > thead > tr > td,table:not([border]) > thead > tr > th,table:not([border]) > tfoot > tr > td,table:not([border]) > tfoot > tr > th,table[border=\"0\"],table[border=\"0\"] > tr > td,table[border=\"0\"] > tr > th,table[border=\"0\"] > tbody > tr > td,table[border=\"0\"] > tbody > tr > th,table[border=\"0\"] > thead > tr > td,table[border=\"0\"] > thead > tr > th,table[border=\"0\"] > tfoot > tr > td,table[border=\"0\"] > tfoot > tr > th{border:#d3d3d3 1px dotted}' ) ;
+
+// Popup the debug window if debug mode is set to true. It guarantees that the
+// first debug message will not be lost.
+if ( FCKConfig.Debug )
+ FCKDebug._GetWindow() ;
+
+// Load the active skin CSS.
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinEditorCSS ) ) ;
+
+// Load the language file.
+FCKLanguageManager.Initialize() ;
+LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// Initialize the editing area context menu.
+FCK_ContextMenu_Init() ;
+
+FCKPlugins.Load() ;
+
+ </script>
+ <script type="text/javascript">
+
+// Set the editor interface direction.
+window.document.dir = FCKLang.Dir ;
+
+ </script>
+ <script type="text/javascript">
+
+window.onload = function()
+{
+ InitializeAPI() ;
+
+ if ( FCKBrowserInfo.IsIE )
+ FCK_PreloadImages() ;
+ else
+ LoadToolbarSetup() ;
+}
+
+function LoadToolbarSetup()
+{
+ FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ;
+}
+
+function LoadToolbar()
+{
+ var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ;
+
+ if ( oToolbarSet.IsLoaded )
+ StartEditor() ;
+ else
+ {
+ oToolbarSet.OnLoad = StartEditor ;
+ oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ;
+ }
+}
+
+function StartEditor()
+{
+ // Remove the onload listener.
+ FCK.ToolbarSet.OnLoad = null ;
+
+ FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ;
+
+ FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ;
+
+ // Start the editor.
+ FCK.StartEditor() ;
+}
+
+function WaitForActive( editorInstance, newStatus )
+{
+ if ( newStatus == FCK_STATUS_ACTIVE )
+ {
+ if ( FCKBrowserInfo.IsGecko )
+ FCKTools.RunFunction( window.onresize ) ;
+
+ if ( !FCKConfig.PreventSubmitHandler )
+ _AttachFormSubmitToAPI() ;
+
+ FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
+
+ // Call the special "FCKeditor_OnComplete" function that should be present in
+ // the HTML page where the editor is located.
+ if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
+ window.parent.FCKeditor_OnComplete( FCK ) ;
+ }
+}
+
+// Gecko browsers doesn't calculate well the IFRAME size so we must
+// recalculate it every time the window size changes.
+if ( FCKBrowserInfo.IsGecko && !FCKBrowserInfo.IsOpera )
+{
+ window.onresize = function( e )
+ {
+ // Running in Chrome makes the window receive the event including subframes.
+ // we care only about this window. Ticket #1642.
+ // #2002: The originalTarget from the event can be the current document, the window, or the editing area.
+ if ( e && e.originalTarget !== document && e.originalTarget !== window && (!e.originalTarget.ownerDocument || e.originalTarget.ownerDocument != document ))
+ return ;
+
+ var oCell = document.getElementById( 'xEditingArea' ) ;
+
+ var eInnerElement = oCell.firstChild ;
+ if ( eInnerElement )
+ {
+ eInnerElement.style.height = '0px' ;
+ eInnerElement.style.height = ( oCell.scrollHeight - 2 ) + 'px' ;
+ }
+ }
+}
+
+ </script>
+</head>
+<body>
+ <table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed">
+ <tr id="xToolbarRow" style="display: none">
+ <td id="xToolbarSpace" style="overflow: hidden">
+ <table width="100%" cellpadding="0" cellspacing="0">
+ <tr id="xCollapsed" style="display: none">
+ <td id="xExpandHandle" class="TB_Expand" colspan="3">
+ <img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+ </tr>
+ <tr id="xExpanded" style="display: none">
+ <td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td>
+ <td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom">
+ <img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+ <td id="xToolbar" class="TB_ToolbarSet"></td>
+ <td class="TB_SideBorder" style="width: 1px"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td id="xEditingArea" valign="top" style="height: 100%"></td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.original.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.original.html
new file mode 100644
index 0000000..1e00431
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.original.html
@@ -0,0 +1,424 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Main page that holds the editor.
+-->
+<html>
+<head>
+ <title>FCKeditor</title>
+ <meta name="robots" content="noindex, nofollow">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <!-- @Packager.RemoveLine
+ <meta http-equiv="Cache-Control" content="public">
+ @Packager.RemoveLine -->
+ <script type="text/javascript">
+
+// #1645: Alert the user if opening FCKeditor in FF3 from local filesystem
+// without security.fileuri.strict_origin_policy disabled.
+if ( document.location.protocol == 'file:' )
+{
+ try
+ {
+ window.parent.document.domain ;
+ }
+ catch ( e )
+ {
+ window.addEventListener( 'load', function()
+ {
+ document.body.innerHTML = '\
+ <div style="border: 1px red solid; font-family: arial; font-size: 12px; color: red; padding:10px;">\
+ <p>\
+ <b>Your browser security settings don\'t allow FCKeditor to be opened from\
+ the local filesystem.<\/b>\
+ <\/p>\
+ <p>\
+ Please open the <b>about:config<\/b> page and disable the\
+ &quot;security.fileuri.strict_origin_policy&quot; option; then load this page again.\
+ <\/p>\
+ <p>\
+ Check our <a href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/FAQ#ff3perms">FAQ<\/a>\
+ for more information.\
+ <\/p>\
+ <\/div>' ;
+ }, false ) ;
+ }
+}
+
+// Save a reference to the default domain.
+var FCK_ORIGINAL_DOMAIN ;
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+ var d = FCK_ORIGINAL_DOMAIN = document.domain ;
+
+ while ( true )
+ {
+ // Test if we can access a parent property.
+ try
+ {
+ var test = window.parent.document.domain ;
+ break ;
+ }
+ catch( e ) {}
+
+ // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+ d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+ if ( d.length == 0 )
+ break ; // It was not able to detect the domain.
+
+ try
+ {
+ document.domain = d ;
+ }
+ catch (e)
+ {
+ break ;
+ }
+ }
+})() ;
+
+// Save a reference to the detected runtime domain.
+var FCK_RUNTIME_DOMAIN = document.domain ;
+
+var FCK_IS_CUSTOM_DOMAIN = ( FCK_ORIGINAL_DOMAIN != FCK_RUNTIME_DOMAIN ) ;
+
+// Instead of loading scripts and CSSs using inline tags, all scripts are
+// loaded by code. In this way we can guarantee the correct processing order,
+// otherwise external scripts and inline scripts could be executed in an
+// unwanted order (IE).
+
+function LoadScript( url )
+{
+ document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
+}
+
+// Main editor scripts.
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
+
+/* @Packager.RemoveLine
+LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
+@Packager.RemoveLine */
+// @Packager.Remove.Start
+
+LoadScript( '_source/fckconstants.js' ) ;
+LoadScript( '_source/fckjscoreextensions.js' ) ;
+
+if ( sSuffix == 'ie' )
+ LoadScript( '_source/classes/fckiecleanup.js' ) ;
+
+LoadScript( '_source/internals/fckbrowserinfo.js' ) ;
+LoadScript( '_source/internals/fckurlparams.js' ) ;
+LoadScript( '_source/classes/fckevents.js' ) ;
+LoadScript( '_source/classes/fckdataprocessor.js' ) ;
+LoadScript( '_source/internals/fck.js' ) ;
+LoadScript( '_source/internals/fck_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fckconfig.js' ) ;
+
+LoadScript( '_source/internals/fckdebug_empty.js' ) ;
+LoadScript( '_source/internals/fckdomtools.js' ) ;
+LoadScript( '_source/internals/fcktools.js' ) ;
+LoadScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ;
+LoadScript( '_source/fckeditorapi.js' ) ;
+LoadScript( '_source/classes/fckimagepreloader.js' ) ;
+LoadScript( '_source/internals/fckregexlib.js' ) ;
+LoadScript( '_source/internals/fcklistslib.js' ) ;
+LoadScript( '_source/internals/fcklanguagemanager.js' ) ;
+LoadScript( '_source/internals/fckxhtmlentities.js' ) ;
+LoadScript( '_source/internals/fckxhtml.js' ) ;
+LoadScript( '_source/internals/fckxhtml_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fckcodeformatter.js' ) ;
+LoadScript( '_source/internals/fckundo.js' ) ;
+LoadScript( '_source/classes/fckeditingarea.js' ) ;
+LoadScript( '_source/classes/fckkeystrokehandler.js' ) ;
+
+LoadScript( 'dtd/fck_xhtml10transitional.js' ) ;
+LoadScript( '_source/classes/fckstyle.js' ) ;
+LoadScript( '_source/internals/fckstyles.js' ) ;
+
+LoadScript( '_source/internals/fcklisthandler.js' ) ;
+LoadScript( '_source/classes/fckelementpath.js' ) ;
+LoadScript( '_source/classes/fckdomrange.js' ) ;
+LoadScript( '_source/classes/fckdocumentfragment_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckw3crange.js' ) ;
+LoadScript( '_source/classes/fckdomrange_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckdomrangeiterator.js' ) ;
+LoadScript( '_source/classes/fckenterkey.js' ) ;
+
+LoadScript( '_source/internals/fckdocumentprocessor.js' ) ;
+LoadScript( '_source/internals/fckselection.js' ) ;
+LoadScript( '_source/internals/fckselection_' + sSuffix + '.js' ) ;
+
+LoadScript( '_source/internals/fcktablehandler.js' ) ;
+LoadScript( '_source/internals/fcktablehandler_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckxml.js' ) ;
+LoadScript( '_source/classes/fckxml_' + sSuffix + '.js' ) ;
+
+LoadScript( '_source/commandclasses/fcknamedcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckstylecommand.js' ) ;
+LoadScript( '_source/commandclasses/fck_othercommands.js' ) ;
+LoadScript( '_source/commandclasses/fckshowblocks.js' ) ;
+LoadScript( '_source/commandclasses/fckspellcheckcommand_' + sSuffix + '.js' ) ;
+LoadScript( '_source/commandclasses/fcktextcolorcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckpasteplaintextcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckpastewordcommand.js' ) ;
+LoadScript( '_source/commandclasses/fcktablecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckfitwindow.js' ) ;
+LoadScript( '_source/commandclasses/fcklistcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckjustifycommands.js' ) ;
+LoadScript( '_source/commandclasses/fckindentcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckblockquotecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckcorestylecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckremoveformatcommand.js' ) ;
+LoadScript( '_source/internals/fckcommands.js' ) ;
+
+LoadScript( '_source/classes/fckpanel.js' ) ;
+LoadScript( '_source/classes/fckicon.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbuttonui.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbutton.js' ) ;
+LoadScript( '_source/classes/fckspecialcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarspecialcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarstylecombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontformatcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontscombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontsizecombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarpanelbutton.js' ) ;
+LoadScript( '_source/internals/fcktoolbaritems.js' ) ;
+LoadScript( '_source/classes/fcktoolbar.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbreak_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fcktoolbarset.js' ) ;
+LoadScript( '_source/internals/fckdialog.js' ) ;
+LoadScript( '_source/classes/fckmenuitem.js' ) ;
+LoadScript( '_source/classes/fckmenublock.js' ) ;
+LoadScript( '_source/classes/fckmenublockpanel.js' ) ;
+LoadScript( '_source/classes/fckcontextmenu.js' ) ;
+LoadScript( '_source/internals/fck_contextmenu.js' ) ;
+LoadScript( '_source/classes/fckhtmliterator.js' ) ;
+LoadScript( '_source/classes/fckplugin.js' ) ;
+LoadScript( '_source/internals/fckplugins.js' ) ;
+
+// @Packager.Remove.End
+
+// Base configuration file.
+LoadScript( '../fckconfig.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// Adobe AIR compatibility file.
+if ( FCKBrowserInfo.IsAIR )
+ LoadScript( 'js/fckadobeair.js' ) ;
+
+if ( FCKBrowserInfo.IsIE )
+{
+ // Remove IE mouse flickering.
+ try
+ {
+ document.execCommand( 'BackgroundImageCache', false, true ) ;
+ }
+ catch (e)
+ {
+ // We have been reported about loading problems caused by the above
+ // line. For safety, let's just ignore errors.
+ }
+
+ // Create the default cleanup object used by the editor.
+ FCK.IECleanup = new FCKIECleanup( window ) ;
+ FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ;
+ FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
+}
+
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
+// The config hidden field is processed immediately, because
+// CustomConfigurationsPath may be set in the page.
+FCKConfig.ProcessHiddenField() ;
+
+// Load the custom configurations file (if defined).
+if ( FCKConfig.CustomConfigurationsPath.length > 0 )
+ LoadScript( FCKConfig.CustomConfigurationsPath ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// Load configurations defined at page level.
+FCKConfig_LoadPageConfig() ;
+
+FCKConfig_PreProcess() ;
+
+// Load the full debug script.
+if ( FCKConfig.Debug )
+ LoadScript( '_source/internals/fckdebug.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+var FCK_InternalCSS = FCKConfig.BasePath + 'css/fck_internal.css' ; // @Packager.RemoveLine
+var FCK_ShowTableBordersCSS = FCKConfig.BasePath + 'css/fck_showtableborders_gecko.css' ; // @Packager.RemoveLine
+/* @Packager.RemoveLine
+// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+var FCK_InternalCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'html{min-height:100%}table.FCK__ShowTableBorders,table.FCK__ShowTableBorders td,table.FCK__ShowTableBorders th{border:#d3d3d3 1px solid}form{border:1px dotted #F00;padding:2px}.FCK__Flash{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_flashlogo.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__UnknownObject{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_plugin.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__Anchor{border:1px dotted #00F;background-position:center center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;width:16px;height:15px;vertical-align:middle}.FCK__AnchorC{border:1px dotted #00F;background-position:1px center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}a[name]{border:1px dotted #00F;background-position:0 center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}.FCK__PageBreak{background-position:center center;background-image:url(images/fck_pagebreak.gif);background-repeat:no-repeat;clear:both;display:block;float:none;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;border-right:0;border-left:0;height:5px}.FCK__InputHidden{width:19px;height:18px;background-image:url(images/fck_hiddenfield.gif);background-repeat:no-repeat;vertical-align:text-bottom;background-position:center center}.FCK__ShowBlocks p,.FCK__ShowBlocks div,.FCK__ShowBlocks pre,.FCK__ShowBlocks address,.FCK__ShowBlocks blockquote,.FCK__ShowBlocks h1,.FCK__ShowBlocks h2,.FCK__ShowBlocks h3,.FCK__ShowBlocks h4,.FCK__ShowBlocks h5,.FCK__ShowBlocks h6{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px;padding-left:8px}.FCK__ShowBlocks p{background-image:url(images/block_p.png)}.FCK__ShowBlocks div{background-image:url(images/block_div.png)}.FCK__ShowBlocks pre{background-image:url(images/block_pre.png)}.FCK__ShowBlocks address{background-image:url(images/block_address.png)}.FCK__ShowBlocks blockquote{background-image:url(images/block_blockquote.png)}.FCK__ShowBlocks h1{background-image:url(images/block_h1.png)}.FCK__ShowBlocks h2{background-image:url(images/block_h2.png)}.FCK__ShowBlocks h3{background-image:url(images/block_h3.png)}.FCK__ShowBlocks h4{background-image:url(images/block_h4.png)}.FCK__ShowBlocks h5{background-image:url(images/block_h5.png)}.FCK__ShowBlocks h6{background-image:url(images/block_h6.png)}' ) ;
+var FCK_ShowTableBordersCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'table:not([border]),table:not([border]) > tr > td,table:not([border]) > tr > th,table:not([border]) > tbody > tr > td,table:not([border]) > tbody > tr > th,table:not([border]) > thead > tr > td,table:not([border]) > thead > tr > th,table:not([border]) > tfoot > tr > td,table:not([border]) > tfoot > tr > th,table[border=\"0\"],table[border=\"0\"] > tr > td,table[border=\"0\"] > tr > th,table[border=\"0\"] > tbody > tr > td,table[border=\"0\"] > tbody > tr > th,table[border=\"0\"] > thead > tr > td,table[border=\"0\"] > thead > tr > th,table[border=\"0\"] > tfoot > tr > td,table[border=\"0\"] > tfoot > tr > th{border:#d3d3d3 1px dotted}' ) ;
+@Packager.RemoveLine */
+
+// Popup the debug window if debug mode is set to true. It guarantees that the
+// first debug message will not be lost.
+if ( FCKConfig.Debug )
+ FCKDebug._GetWindow() ;
+
+// Load the active skin CSS.
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinEditorCSS ) ) ;
+
+// Load the language file.
+FCKLanguageManager.Initialize() ;
+LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// Initialize the editing area context menu.
+FCK_ContextMenu_Init() ;
+
+FCKPlugins.Load() ;
+
+ </script>
+ <script type="text/javascript">
+
+// Set the editor interface direction.
+window.document.dir = FCKLang.Dir ;
+
+ </script>
+ <script type="text/javascript">
+
+window.onload = function()
+{
+ InitializeAPI() ;
+
+ if ( FCKBrowserInfo.IsIE )
+ FCK_PreloadImages() ;
+ else
+ LoadToolbarSetup() ;
+}
+
+function LoadToolbarSetup()
+{
+ FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ;
+}
+
+function LoadToolbar()
+{
+ var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ;
+
+ if ( oToolbarSet.IsLoaded )
+ StartEditor() ;
+ else
+ {
+ oToolbarSet.OnLoad = StartEditor ;
+ oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ;
+ }
+}
+
+function StartEditor()
+{
+ // Remove the onload listener.
+ FCK.ToolbarSet.OnLoad = null ;
+
+ FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ;
+
+ FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ;
+
+ // Start the editor.
+ FCK.StartEditor() ;
+}
+
+function WaitForActive( editorInstance, newStatus )
+{
+ if ( newStatus == FCK_STATUS_ACTIVE )
+ {
+ if ( FCKBrowserInfo.IsGecko )
+ FCKTools.RunFunction( window.onresize ) ;
+
+ if ( !FCKConfig.PreventSubmitHandler )
+ _AttachFormSubmitToAPI() ;
+
+ FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
+
+ // Call the special "FCKeditor_OnComplete" function that should be present in
+ // the HTML page where the editor is located.
+ if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
+ window.parent.FCKeditor_OnComplete( FCK ) ;
+ }
+}
+
+// Gecko browsers doesn't calculate well the IFRAME size so we must
+// recalculate it every time the window size changes.
+if ( FCKBrowserInfo.IsGecko && !FCKBrowserInfo.IsOpera )
+{
+ window.onresize = function( e )
+ {
+ // Running in Chrome makes the window receive the event including subframes.
+ // we care only about this window. Ticket #1642.
+ // #2002: The originalTarget from the event can be the current document, the window, or the editing area.
+ if ( e && e.originalTarget !== document && e.originalTarget !== window && (!e.originalTarget.ownerDocument || e.originalTarget.ownerDocument != document ))
+ return ;
+
+ var oCell = document.getElementById( 'xEditingArea' ) ;
+
+ var eInnerElement = oCell.firstChild ;
+ if ( eInnerElement )
+ {
+ eInnerElement.style.height = '0px' ;
+ eInnerElement.style.height = ( oCell.scrollHeight - 2 ) + 'px' ;
+ }
+ }
+}
+
+ </script>
+</head>
+<body>
+ <table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed">
+ <tr id="xToolbarRow" style="display: none">
+ <td id="xToolbarSpace" style="overflow: hidden">
+ <table width="100%" cellpadding="0" cellspacing="0">
+ <tr id="xCollapsed" style="display: none">
+ <td id="xExpandHandle" class="TB_Expand" colspan="3">
+ <img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+ </tr>
+ <tr id="xExpanded" style="display: none">
+ <td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td>
+ <td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom">
+ <img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+ <td id="xToolbar" class="TB_ToolbarSet"></td>
+ <td class="TB_SideBorder" style="width: 1px"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td id="xEditingArea" valign="top" style="height: 100%"></td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/anchor.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/anchor.gif
new file mode 100644
index 0000000..5aa797b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/anchor.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_ltr.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_ltr.gif
new file mode 100644
index 0000000..9c59bfe
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_ltr.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_rtl.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_rtl.gif
new file mode 100644
index 0000000..22e8649
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_rtl.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angel_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angel_smile.gif
new file mode 100644
index 0000000..a95e053
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angel_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angry_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angry_smile.gif
new file mode 100644
index 0000000..c667c5d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angry_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/broken_heart.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/broken_heart.gif
new file mode 100644
index 0000000..938cce1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/broken_heart.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cake.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cake.gif
new file mode 100644
index 0000000..f6489d7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cake.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/confused_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/confused_smile.gif
new file mode 100644
index 0000000..aeb0539
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/confused_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cry_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cry_smile.gif
new file mode 100644
index 0000000..0758f42
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cry_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/devil_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/devil_smile.gif
new file mode 100644
index 0000000..15518d7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/devil_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif
new file mode 100644
index 0000000..c431946
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/envelope.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/envelope.gif
new file mode 100644
index 0000000..66d3656
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/envelope.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/heart.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/heart.gif
new file mode 100644
index 0000000..305714f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/heart.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/kiss.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/kiss.gif
new file mode 100644
index 0000000..f840ea6
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/kiss.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/lightbulb.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/lightbulb.gif
new file mode 100644
index 0000000..863be6e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/lightbulb.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/omg_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/omg_smile.gif
new file mode 100644
index 0000000..aabc7fd
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/omg_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/regular_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/regular_smile.gif
new file mode 100644
index 0000000..33f297e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/regular_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/sad_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/sad_smile.gif
new file mode 100644
index 0000000..dfb78ef
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/sad_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/shades_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/shades_smile.gif
new file mode 100644
index 0000000..157df77
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/shades_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/teeth_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/teeth_smile.gif
new file mode 100644
index 0000000..26b5a55
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/teeth_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_down.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_down.gif
new file mode 100644
index 0000000..f53ee72
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_down.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_up.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_up.gif
new file mode 100644
index 0000000..7e8c746
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_up.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/tounge_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/tounge_smile.gif
new file mode 100644
index 0000000..b87ec44
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/tounge_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif
new file mode 100644
index 0000000..c074122
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/wink_smile.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/wink_smile.gif
new file mode 100644
index 0000000..eefe61d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/wink_smile.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/spacer.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/spacer.gif
new file mode 100644
index 0000000..5bfd67a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/images/spacer.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckadobeair.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckadobeair.js
new file mode 100644
index 0000000..468164c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckadobeair.js
@@ -0,0 +1,176 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Compatibility code for Adobe AIR.
+ */
+
+if ( FCKBrowserInfo.IsAIR )
+{
+ var FCKAdobeAIR = (function()
+ {
+ /*
+ * ### Private functions.
+ */
+
+ var getDocumentHead = function( doc )
+ {
+ var head ;
+ var heads = doc.getElementsByTagName( 'head' ) ;
+
+ if( heads && heads[0] )
+ head = heads[0] ;
+ else
+ {
+ head = doc.createElement( 'head' ) ;
+ doc.documentElement.insertBefore( head, doc.documentElement.firstChild ) ;
+ }
+
+ return head ;
+ } ;
+
+ /*
+ * ### Public interface.
+ */
+ return {
+ FCKeditorAPI_Evaluate : function( parentWindow, script )
+ {
+ // TODO : This one doesn't work always. The parent window will
+ // point to an anonymous function in this window. If this
+ // window is destroyied the parent window will be pointing to
+ // an invalid reference.
+
+ // Evaluate the script in this window.
+ eval( script ) ;
+
+ // Point the FCKeditorAPI property of the parent window to the
+ // local reference.
+ parentWindow.FCKeditorAPI = window.FCKeditorAPI ;
+ },
+
+ EditingArea_Start : function( doc, html )
+ {
+ // Get the HTML for the <head>.
+ var headInnerHtml = html.match( /<head>([\s\S]*)<\/head>/i )[1] ;
+
+ if ( headInnerHtml && headInnerHtml.length > 0 )
+ {
+ // Inject the <head> HTML inside a <div>.
+ // Do that before getDocumentHead because WebKit moves
+ // <link css> elements to the <head> at this point.
+ var div = doc.createElement( 'div' ) ;
+ div.innerHTML = headInnerHtml ;
+
+ // Move the <div> nodes to <head>.
+ FCKDomTools.MoveChildren( div, getDocumentHead( doc ) ) ;
+ }
+
+ doc.body.innerHTML = html.match( /<body>([\s\S]*)<\/body>/i )[1] ;
+
+ //prevent clicking on hyperlinks and navigating away
+ doc.addEventListener('click', function( ev )
+ {
+ ev.preventDefault() ;
+ ev.stopPropagation() ;
+ }, true ) ;
+ },
+
+ Panel_Contructor : function( doc, baseLocation )
+ {
+ var head = getDocumentHead( doc ) ;
+
+ // Set the <base> href.
+ head.appendChild( doc.createElement('base') ).href = baseLocation ;
+
+ doc.body.style.margin = '0px' ;
+ doc.body.style.padding = '0px' ;
+ },
+
+ ToolbarSet_GetOutElement : function( win, outMatch )
+ {
+ var toolbarTarget = win.parent ;
+
+ var targetWindowParts = outMatch[1].split( '.' ) ;
+ while ( targetWindowParts.length > 0 )
+ {
+ var part = targetWindowParts.shift() ;
+ if ( part.length > 0 )
+ toolbarTarget = toolbarTarget[ part ] ;
+ }
+
+ toolbarTarget = toolbarTarget.document.getElementById( outMatch[2] ) ;
+ },
+
+ ToolbarSet_InitOutFrame : function( doc )
+ {
+ var head = getDocumentHead( doc ) ;
+
+ head.appendChild( doc.createElement('base') ).href = window.document.location ;
+
+ var targetWindow = doc.defaultView;
+
+ targetWindow.adjust = function()
+ {
+ targetWindow.frameElement.height = doc.body.scrollHeight;
+ } ;
+
+ targetWindow.onresize = targetWindow.adjust ;
+ targetWindow.setTimeout( targetWindow.adjust, 0 ) ;
+
+ doc.body.style.overflow = 'hidden';
+ doc.body.innerHTML = document.getElementById( 'xToolbarSpace' ).innerHTML ;
+ }
+ } ;
+ })();
+
+ /*
+ * ### Overrides
+ */
+ ( function()
+ {
+ // Save references for override reuse.
+ var _Original_FCKPanel_Window_OnFocus = FCKPanel_Window_OnFocus ;
+ var _Original_FCKPanel_Window_OnBlur = FCKPanel_Window_OnBlur ;
+ var _Original_FCK_StartEditor = FCK.StartEditor ;
+
+ FCKPanel_Window_OnFocus = function( e, panel )
+ {
+ // Call the original implementation.
+ _Original_FCKPanel_Window_OnFocus.call( this, e, panel ) ;
+
+ if ( panel._focusTimer )
+ clearTimeout( panel._focusTimer ) ;
+ }
+
+ FCKPanel_Window_OnBlur = function( e, panel )
+ {
+ // Delay the execution of the original function.
+ panel._focusTimer = FCKTools.SetTimeout( _Original_FCKPanel_Window_OnBlur, 100, this, [ e, panel ] ) ;
+ }
+
+ FCK.StartEditor = function()
+ {
+ // Force pointing to the CSS files instead of using the inline CSS cached styles.
+ window.FCK_InternalCSS = FCKConfig.BasePath + 'css/fck_internal.css' ;
+ window.FCK_ShowTableBordersCSS = FCKConfig.BasePath + 'css/fck_showtableborders_gecko.css' ;
+
+ _Original_FCK_StartEditor.apply( this, arguments ) ;
+ }
+ })();
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_gecko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_gecko.js
new file mode 100644
index 0000000..7b28c8d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_gecko.js
@@ -0,0 +1,108 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+
+var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2;
+String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;i<A.length;i++){if (this==A[i]) return true;};return false;};String.prototype.IEquals=function(){var A=this.toUpperCase();var B=arguments;if (B.length==1&&B[0].pop) B=B[0];for (var i=0;i<B.length;i++){if (A==B[i].toUpperCase()) return true;};return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};String.prototype.StartsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.EndsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.Trim=function(){return this.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,'');};String.prototype.LTrim=function(){return this.replace(/^[ \t\n\r]*/g,'');};String.prototype.RTrim=function(){return this.replace(/[ \t\n\r]*$/g,'');};String.prototype.ReplaceNewLineChars=function(A){return this.replace(/\n/g,A);};String.prototype.Replace=function(A,B,C){if (typeof B=='function'){return this.replace(A,function(){return B.apply(C||this,arguments);});}else return this.replace(A,B);};Array.prototype.IndexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};
+var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false&&(parseInt(s.match(/msie (\d+)/)[1],10)>=7),IsIE6:/*@cc_on!@*/false&&(parseInt(s.match(/msie (\d+)/)[1],10)>=6),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGecko=(navigator.product=='Gecko')&&!A.IsSafari&&!A.IsOpera;A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/rv:(\d+\.\d+)/);var C=B&&parseFloat(B[1]);if (C){A.IsGecko10=(C<1.8);A.IsGecko19=(C>1.8);}}})(FCKBrowserInfo);
+var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i<A.length;i++){var B=A[i].split('=');var C=decodeURIComponent(B[0]);var D=decodeURIComponent(B[1]);FCKURLParams[C]=D;}})();
+var FCKEvents=function(A){this.Owner=A;this._RegisteredEvents={};};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this._RegisteredEvents[A])) this._RegisteredEvents[A]=[B];else{if (C.IndexOf(B)==-1) C.push(B);}};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this._RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++){try{C=(D[i](this.Owner,B)&&C);}catch(e){if (e.number!=-2146823277) throw e;}}};return C;};
+var FCKDataProcessor=function(){};FCKDataProcessor.prototype={ConvertToHtml:function(A){if (FCKConfig.FullPage){FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (!FCKRegexLib.HasBodyTag.test(A)) A='<body>'+A+'</body>';if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&<head><title></title></head>');return A;}else{var B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&FCKConfig.DocType.length>0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title></head><body'+FCKConfig.GetBodyAttributes()+'>'+A+'</body></html>';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}};
+var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;break;case 8:if (E) F=true;break;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i<B.length;i++) B[i](A);};B=FCK.RegisteredDoubleClickHandlers['*'];if (B){for (var i=0;i<B.length;i++) B[i](A);}},RegisterDoubleClickHandler:function(A,B){var C=B||'*';C=C.toUpperCase();var D;if (!(D=FCK.RegisteredDoubleClickHandlers[C])) FCK.RegisteredDoubleClickHandlers[C]=[A];else{if (D.IndexOf(A)==-1) D.push(A);}},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsArea,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'<FCK:$1');C=new RegExp('<\/('+B+')>','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'<FCK:$1 />');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};FCKTempBin.Reset();FCK.Selection.Release();if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1></$2>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"><head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+_FCK_GetEditorAreaStyleTags()+'</head><body'+FCKConfig.GetBodyAttributes()+'>'+FCK.GetXHTML()+'</body></html>';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (FCKBrowserInfo.IsIE) FCKTempBin.ToHtml();if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);C.MoveToSelection();C.DeleteContents();if (FCKListsLib.BlockElements[B]!=null){if (C.StartBlock){if (C.CheckStartOfBlock()) C.MoveToPosition(C.StartBlock,3);else if (C.CheckEndOfBlock()) C.MoveToPosition(C.StartBlock,4);else C.SplitBlock();};C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGeckoLike){if (D) FCKDomTools.ScrollIntoView(D,false);FCKDomTools.ScrollIntoView(A,false);}}else{C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){if (FCKSelection._GetSelectionDocument(FCK.EditorDocument.selection)!=FCK.EditorDocument) return;var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;if (FCKBrowserInfo.IsIE) FCKTempBin.ToElements();FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i<this.Elements.length) this.Elements[i++]=null;this.Elements.length=0;},ToHtml:function(){for (var i=0;i<this.Elements.length;i++){this.Elements[i]='<div>&nbsp;'+this.Elements[i].outerHTML+'</div>';this.Elements[i].isHtml=true;}},ToElements:function(){var A=FCK.EditorDocument.createElement('div');for (var i=0;i<this.Elements.length;i++){if (this.Elements[i].isHtml){A.innerHTML=this.Elements[i];this.Elements[i]=A.firstChild.removeChild(A.firstChild.lastChild);}}}};var FCKFocusManager=FCK.FocusManager={IsLocked:false,AddWindow:function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else if (FCKBrowserInfo.IsSafari) C=A;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);},RemoveWindow:function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);},Lock:function(){this.IsLocked=true;},Unlock:function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;},_ResetTimer:function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){if (FCKFocusManager._IsFocusing) return;FCKFocusManager._IsFocusing=true;FCK.Focus();FCKFocusManager_Win_OnFocus();FCKTools.RunFunction(function(){delete FCKFocusManager._IsFocusing;});};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}};(function(){var A=window.frameElement;var B=A.width;var C=A.height;if (/^\d+$/.test(B)) B+='px';if (/^\d+$/.test(C)) C+='px';var D=A.style;D.border=D.padding=D.margin=0;D.backgroundColor='transparent';D.backgroundImage='none';D.width=B;D.height=C;})();
+FCK.Description="FCKeditor for Gecko Browsers";FCK.InitializeBehaviors=function(){if (window.onresize) window.onresize();FCKFocusManager.AddWindow(this.EditorWindow);this.ExecOnSelectionChange=function(){FCK.Events.FireEvent("OnSelectionChange");};this._ExecDrop=function(evt){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){if (evt.dataTransfer){var A=evt.dataTransfer.getData('Text');A=FCKTools.HTMLEncode(A);A=FCKTools.ProcessLineBreaks(window,FCKConfig,A);FCK.InsertHtml(A);}else if (FCKConfig.ShowDropDialog) FCK.PasteAsPlainText();evt.preventDefault();evt.stopPropagation();}};this._ExecCheckCaret=function(evt){if (FCK.EditMode!=0) return;if (evt.type=='keypress'){var B=evt.keyCode;if (B<33||B>40) return;};var C=function(H){if (H.nodeType!=1) return false;var D=H.tagName.toLowerCase();return (FCKListsLib.BlockElements[D]||FCKListsLib.EmptyElements[D]);};var E=function(){var F=FCKSelection.GetSelection();var G=F.getRangeAt(0);if (!G||!G.collapsed) return;var H=G.endContainer;if (H.nodeType!=3) return;if (H.nodeValue.length!=G.endOffset) return;var I=H.parentNode.tagName.toLowerCase();if (!(I=='a'||(!FCKBrowserInfo.IsOpera&&String(H.parentNode.contentEditable)=='false')||(!(FCKListsLib.BlockElements[I]||FCKListsLib.NonEmptyBlockElements[I])&&B==35))) return;var J=FCKTools.GetNextTextNode(H,H.parentNode,C);if (J) return;G=FCK.EditorDocument.createRange();J=FCKTools.GetNextTextNode(H,H.parentNode.parentNode,C);if (J){if (FCKBrowserInfo.IsOpera&&B==37) return;G.setStart(J,0);G.setEnd(J,0);}else{while (H.parentNode&&H.parentNode!=FCK.EditorDocument.body&&H.parentNode!=FCK.EditorDocument.documentElement&&H==H.parentNode.lastChild&&(!FCKListsLib.BlockElements[H.parentNode.tagName.toLowerCase()]&&!FCKListsLib.NonEmptyBlockElements[H.parentNode.tagName.toLowerCase()])) H=H.parentNode;if (FCKListsLib.BlockElements[I]||FCKListsLib.EmptyElements[I]||H==FCK.EditorDocument.body){G.setStart(H,H.childNodes.length);G.setEnd(H,H.childNodes.length);}else{var K=H.nextSibling;while (K){if (K.nodeType!=1){K=K.nextSibling;continue;};var L=K.tagName.toLowerCase();if (FCKListsLib.BlockElements[L]||FCKListsLib.EmptyElements[L]||FCKListsLib.NonEmptyBlockElements[L]) break;K=K.nextSibling;};var M=FCK.EditorDocument.createTextNode('');if (K) H.parentNode.insertBefore(M,K);else H.parentNode.appendChild(M);G.setStart(M,0);G.setEnd(M,0);}};F.removeAllRanges();F.addRange(G);FCK.Events.FireEvent("OnSelectionChange");};setTimeout(E,1);};this.ExecOnSelectionChangeTimer=function(){if (FCK.LastOnChangeTimer) window.clearTimeout(FCK.LastOnChangeTimer);FCK.LastOnChangeTimer=window.setTimeout(FCK.ExecOnSelectionChange,100);};this.EditorDocument.addEventListener('mouseup',this.ExecOnSelectionChange,false);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);this.EditorDocument.addEventListener('keydown',this._KeyDownListener,false);if (FCKBrowserInfo.IsGecko){this.EditorWindow.addEventListener('dragdrop',this._ExecDrop,true);}else if (FCKBrowserInfo.IsSafari){this.EditorDocument.addEventListener('dragover',function (evt){ if (!FCK.MouseDownFlag&&FCK.Config.ForcePasteAsPlainText) evt.returnValue=false;},true);this.EditorDocument.addEventListener('drop',this._ExecDrop,true);this.EditorDocument.addEventListener('mousedown',function(ev){var N=ev.srcElement;if (N.nodeName.IEquals('IMG','HR','INPUT','TEXTAREA','SELECT')){FCKSelection.SelectNode(N);}},true);this.EditorDocument.addEventListener('mouseup',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);this.EditorDocument.addEventListener('click',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);};if (FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsOpera){this.EditorDocument.addEventListener('keypress',this._ExecCheckCaret,false);this.EditorDocument.addEventListener('click',this._ExecCheckCaret,false);};FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow(FCK.EditorWindow);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument);};FCK.MakeEditable=function(){this.EditingArea.MakeEditable();};function Document_OnContextMenu(e){if (!e.target._FCKShowContextMenu) e.preventDefault();};document.oncontextmenu=Document_OnContextMenu;FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?0:-1;default:return FCK._BaseGetNamedCommandState(A);}};FCK.RedirectNamedCommands={Print:true,Paste:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try{if (FCKBrowserInfo.IsSafari) throw '';if (FCK.Paste()) FCK.ExecuteNamedCommand('Paste',null,true);}catch (e) {if (FCKConfig.ForcePasteAsPlainText) FCK.PasteAsPlainText();else FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security');};break;default:FCK.ExecuteNamedCommand(A,B);}};FCK._ExecPaste=function(){FCKUndo.SaveUndoStep();if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};return true;};FCK.InsertHtml=function(A){var B=FCK.EditorDocument,range;A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGecko){A=A.replace(/&nbsp;$/,'$&<span _fcktemp="1"/>');var C=new FCKDocumentFragment(this.EditorDocument);C.AppendHtml(A);var D=C.RootNode.lastChild;range=new FCKDomRange(this.EditorWindow);range.MoveToSelection();range.DeleteContents();range.InsertNode(C.RootNode);range.MoveToPosition(D,4);}else B.execCommand('inserthtml',false,A);this.Focus();if (!range){range=new FCKDomRange(this.EditorWindow);range.MoveToSelection();};var E=range.CreateBookmark();FCKDocumentProcessor.Process(B);try{range.MoveToBookmark(E);range.Select();}catch (e) {};this.Events.FireEvent("OnSelectionChange");};FCK.PasteAsPlainText=function(){FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText']);};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A,B){var C=[];if (FCKSelection.GetSelection().isCollapsed) return C;FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){var D='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',D,false,!!B);var E=this.EditorDocument.evaluate("//a[@href='"+D+"']",this.EditorDocument.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for (var i=0;i<E.snapshotLength;i++){var F=E.snapshotItem(i);F.href=A;C.push(F);}};return C;};FCK._FillEmptyBlock=function(A){if (!A||A.nodeType!=1) return;var B=A.tagName.toLowerCase();if (B!='p'&&B!='div') return;if (A.firstChild) return;FCKTools.AppendBogusBr(A);};FCK._ExecCheckEmptyBlock=function(){FCK._FillEmptyBlock(FCK.EditorDocument.body.firstChild);var A=FCKSelection.GetSelection();if (!A||A.rangeCount<1) return;var B=A.getRangeAt(0);FCK._FillEmptyBlock(B.startContainer);};
+var FCKConfig=FCK.Config={};if (document.location.protocol=='file:'){FCKConfig.BasePath=decodeURIComponent(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi,'/');var sFullProtocol=document.location.href.match(/^(file\:\/{2,3})/)[1];if (FCKBrowserInfo.IsOpera) sFullProtocol+='localhost/';FCKConfig.BasePath=sFullProtocol+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);}else FCKConfig.BasePath=document.location.protocol+'//'+document.location.host+document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig={};var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=decodeURIComponent(C[0]);var E=decodeURIComponent(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) { }};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.push([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.push(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '<!--{'+B+C+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};var D=new RegExp("(<|&lt;)!--\\{"+this._CodeTag+"(\\d+)\\}--(>|&gt;)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;};
+var FCKDebug={Output:function(){},OutputObject:function(){}};
+var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length<D){B.splitText(D-C.length);A.removeChild(A.firstChild);}};break;}},RTrimNode:function(A){var B;while ((B=A.lastChild)){if (B.nodeType==3){var C=B.nodeValue.RTrim();var D=B.nodeValue.length;if (C.length==0){B.parentNode.removeChild(B);continue;}else if (C.length<D){B.splitText(C.length);A.lastChild.parentNode.removeChild(A.lastChild);}};break;};if (!FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsOpera){B=A.lastChild;if (B&&B.nodeType==1&&B.nodeName.toLowerCase()=='br'){B.parentNode.removeChild(B);}}},RemoveNode:function(A,B){if (B){var C;while ((C=A.firstChild)) A.parentNode.insertBefore(A.removeChild(C),A);};return A.parentNode.removeChild(A);},GetFirstChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.firstChild;while(C){if (C.nodeType==1&&C.tagName.Equals.apply(C.tagName,B)) return C;C=C.nextSibling;};return null;},GetLastChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.lastChild;while(C){if (C.nodeType==1&&(!B||C.tagName.Equals(B))) return C;C=C.previousSibling;};return null;},GetPreviousSourceElement:function(A,B,C,D){if (!A) return null;if (C&&A.nodeType==1&&A.nodeName.IEquals(C)) return null;if (A.previousSibling) A=A.previousSibling;else return this.GetPreviousSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i<C.length;i++){if (C[i]==D[i]) E.push(C[i]);};return E;},GetCommonParentNode:function(A,B,C){var D={};if (!C.pop) C=[C];while (C.length>0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsIE&&B[i].nodeName=='class'){if (A.className.length>0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i<B.length;i++) this.RemoveAttribute(A,B[i]);},GetAttributeValue:function(A,B){var C=B;if (typeof B=='string') B=A.attributes[B];else C=B.nodeName;if (B&&B.specified){if (C=='style') return A.style.cssText;else if (C=='class'||C.indexOf('on')==0) return B.nodeValue;else{return A.getAttribute(C,2);}};return null;},Contains:function(A,B){if (A.contains&&B.nodeType==1) return A.contains(B);while ((B=B.parentNode)){if (B==A) return true;};return false;},BreakParent:function(A,B,C){var D=C||new FCKDomRange(FCKTools.GetElementWindow(A));D.SetStart(A,4);D.SetEnd(B,4);var E=D.ExtractContents();D.InsertNode(A.parentNode.removeChild(A));E.InsertAfterNode(A);D.Release(!!C);},GetNodeAddress:function(A,B){var C=[];while (A&&A!=FCKTools.GetElementDocument(A).documentElement){var D=A.parentNode;var E=-1;for(var i=0;i<D.childNodes.length;i++){var F=D.childNodes[i];if (B===true&&F.nodeType==3&&F.previousSibling&&F.previousSibling.nodeType==3) continue;E++;if (D.childNodes[i]==A) break;};C.unshift(E);A=A.parentNode;};return C;},GetNodeFromAddress:function(A,B,C){var D=A.documentElement;for (var i=0;i<B.length;i++){var E=B[i];if (!C){D=D.childNodes[E];continue;};var F=-1;for (var j=0;j<D.childNodes.length;j++){var G=D.childNodes[j];if (C===true&&G.nodeType==3&&G.previousSibling&&G.previousSibling.nodeType==3) continue;F++;if (F==E){D=G;break;}}};return D;},CloneElement:function(A){A=A.cloneNode(false);A.removeAttribute('id',false);return A;},ClearElementJSProperty:function(A,B){if (FCKBrowserInfo.IsIE) A.removeAttribute(B);else delete A[B];},SetElementMarker:function (A,B,C,D){var E=String(parseInt(Math.random()*0xffffffff,10));B._FCKMarkerId=E;B[C]=D;if (!A[E]) A[E]={ 'element':B,'markers':{} };A[E]['markers'][C]=D;},ClearElementMarkers:function(A,B,C){var D=B._FCKMarkerId;if (!D) return;this.ClearElementJSProperty(B,'_FCKMarkerId');for (var j in A[D]['markers']) this.ClearElementJSProperty(B,j);if (C) delete A[D];},ClearAllMarkers:function(A){for (var i in A) this.ClearElementMarkers(A,A[i]['element'],true);},ListToArray:function(A,B,C,D,E){if (!A.nodeName.IEquals(['ul','ol'])) return [];if (!D) D=0;if (!C) C=[];for (var i=0;i<A.childNodes.length;i++){var F=A.childNodes[i];if (!F.nodeName.IEquals('li')) continue;var G={ 'parent':A,'indent':D,'contents':[] };if (!E){G.grandparent=A.parentNode;if (G.grandparent&&G.grandparent.nodeName.IEquals('li')) G.grandparent=G.grandparent.parentNode;}else G.grandparent=E;if (B) this.SetElementMarker(B,F,'_FCK_ListArray_Index',C.length);C.push(G);for (var j=0;j<F.childNodes.length;j++){var H=F.childNodes[j];if (H.nodeName.IEquals(['ul','ol'])) this.ListToArray(H,B,C,D+1,G.grandparent);else G.contents.push(H);}};return C;},ArrayToList:function(A,B,C){if (C==undefined) C=0;if (!A||A.length<C+1) return null;var D=FCKTools.GetElementDocument(A[C].parent);var E=D.createDocumentFragment();var F=null;var G=C;var H=Math.max(A[C].indent,0);var I=null;while (true){var J=A[G];if (J.indent==H){if (!F||A[G].parent.nodeName!=F.nodeName){F=A[G].parent.cloneNode(false);E.appendChild(F);};I=D.createElement('li');F.appendChild(I);for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));G++;}else if (J.indent==Math.max(H,0)+1){var K=this.ArrayToList(A,null,G);I.appendChild(K.listNode);G=K.nextIndex;}else if (J.indent==-1&&C==0&&J.grandparent){var I;if (J.grandparent.nodeName.IEquals(['ul','ol'])) I=D.createElement('li');else{if (FCKConfig.EnterMode.IEquals(['div','p'])&&!J.grandparent.nodeName.IEquals('td')) I=D.createElement(FCKConfig.EnterMode);else I=D.createDocumentFragment();};for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));if (I.nodeType==11){if (I.lastChild&&I.lastChild.getAttribute&&I.lastChild.getAttribute('type')=='_moz') I.removeChild(I.lastChild);I.appendChild(D.createElement('br'));};if (I.nodeName.IEquals(FCKConfig.EnterMode)&&I.firstChild){this.TrimNode(I);if (FCKListsLib.BlockBoundaries[I.firstChild.nodeName.toLowerCase()]){var M=D.createDocumentFragment();while (I.firstChild) M.appendChild(I.removeChild(I.firstChild));I=M;}};if (FCKBrowserInfo.IsGeckoLike&&I.nodeName.IEquals(['div','p'])) FCKTools.AppendBogusBr(I);E.appendChild(I);F=null;G++;}else return null;if (A.length<=G||Math.max(A[G].indent,0)<H){break;}};if (B){var N=E.firstChild;while (N){if (N.nodeType==1) this.ClearElementMarkers(B,N);N=this.GetNextSourceNode(N);}};return { 'listNode':E,'nextIndex':G };},GetNextSibling:function(A,B){A=A.nextSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.nextSibling;return A;},GetPreviousSibling:function(A,B){A=A.previousSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.previousSibling;return A;},CheckIsEmptyElement:function(A,B){var C=A.firstChild;var D;while (C){if (C.nodeType==1){if (D||!FCKListsLib.InlineNonEmptyElements[C.nodeName.toLowerCase()]) return false;if (!B||B(C)===true) D=C;}else if (C.nodeType==3&&C.nodeValue.length>0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&&currentWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight||0;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10)||0;};var F=FCKTools.GetDocumentPosition(C,A);E+=F.y;var G=FCKTools.GetScrollPosition(C).Y;if (E>0&&(E>G||E<G-D)) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);},GetSelectedDivContainers:function(){var A=[];var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.GetTouchedStartNode();var D=B.GetTouchedEndNode();var E=C;if (C==D){while (D.nodeType==1&&D.lastChild) D=D.lastChild;D=FCKDomTools.GetNextSourceNode(D);}while (E&&E!=D){if (E.nodeType!=3||!/^[ \t\n]*$/.test(E.nodeValue)){var F=new FCKElementPath(E);var G=F.BlockLimit;if (G&&G.nodeName.IEquals('div')&&A.IndexOf(G)==-1) A.push(G);};E=FCKDomTools.GetNextSourceNode(E);};return A;}};
+var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.][^{}]*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i<B.length;i++) C.push(this._AppendStyleSheet(A,B[i]));return C;}};FCKTools.GetStyleHtml=(function(){var A=function(styleDef,markTemp){if (styleDef.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<style type="text/css"'+B+'>'+styleDef+'</style>';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<link href="'+cssFileUrl+'" type="text/css" rel="stylesheet" '+B+'/>';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.][^{}]*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i<cssFileOrArrayOrDef.length;i++) E+=C(cssFileOrArrayOrDef[i],markTemp);return E;}}})();FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){if (A.document) A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&amp;');A=A.replace(/</g,'&lt;');A=A.replace(/>/g,'&gt;');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/&gt;/g,'>');A=A.replace(/&lt;/g,'<');A=A.replace(/&amp;/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="<p>";var H="</p>";var I="<br />";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};var n=B.charAt(i+1);if (n=='\r'){i++;n=B.charAt(i+1);};if (n=='\n'){i++;if (F) E.push(H);E.push(G);F=1;}else E.push(I);}};FCKTools._ProcessLineBreaksForDivMode=function(A,B,C,D,E){var F=0;var G="<div>";var H="</div>";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='div'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F){if (E[E.length-1]==G){E.push("&nbsp;");};E.push(H);};E.push(G);F=1;};if (F) E.push(H);};FCKTools._ProcessLineBreaksForBrMode=function(A,B,C,D,E){var F=0;var G="<br />";var H="";if (C){G="<li>";H="</li>";F=1;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F&&H.length) E.push (H);E.push(G);F=1;}};FCKTools.ProcessLineBreaks=function(A,B,C){var D=B.EnterMode.toLowerCase();var E=[];var F=0;var G=new A.FCKDomRange(A.FCK.EditorWindow);G.MoveToSelection();var H=G._Range.startContainer;while (H&&H.nodeType!=1) H=H.parentNode;if (H&&H.tagName.toLowerCase()=='li') F=1;if (D=='p') this._ProcessLineBreaksForPMode(A,C,F,H,E);else if (D=='div') this._ProcessLineBreaksForDivMode(A,C,F,H,E);else if (D=='br') this._ProcessLineBreaksForBrMode(A,C,F,H,E);return E.join("");};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.IsStrictMode=function(A){return ('CSS1Compat'==(A.compatMode||(FCKBrowserInfo.IsSafari?'CSS1Compat':null)));};FCKTools.ArgumentsToArray=function(A,B,C){B=B||0;C=C||A.length;var D=[];for (var i=B;i<B+C&&i<A.length;i++) D.push(A[i]);return D;};FCKTools.CloneObject=function(A){var B=function() {};B.prototype=A;return new B;};FCKTools.AppendBogusBr=function(A){if (!A) return;var B=this.GetLastItem(A.getElementsByTagName('br'));if (!B||(B.getAttribute('type',2)!='_moz'&&B.getAttribute('_moz_dirty')==null)){var C=this.GetElementDocument(A);if (FCKBrowserInfo.IsOpera) A.appendChild(C.createTextNode(''));else A.appendChild(this.CreateBogusBR(C));}};FCKTools.GetLastItem=function(A){if (A.length>0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i<C.length;i++){var D=C[i];if (A.elements.namedItem(D)){var E=A.elements.namedItem(D);B.push([E,E.nextSibling]);A.removeChild(E);}};return B;};FCKTools.RestoreFormStyles=function(A,B){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return;if (B.length>0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i<A.length;i++){var B=A[i];for (var p in B) o[p]=B[p];};return o;};FCKTools.IsArray=function(A){return (A instanceof Array);};FCKTools.AppendLengthProperty=function(A,B){var C=0;for (var n in A) C++;return A[B||'length']=C;};FCKTools.NormalizeCssText=function(A){var B=document.createElement('span');B.style.cssText=A;return B.style.cssText;};FCKTools.Bind=function(A,B){return function(){ return B.apply(A,arguments);};};FCKTools.GetVoidUrl=function(){if (FCK_IS_CUSTOM_DOMAIN) return "javascript: void( function(){document.open();document.write('<html><head><title></title></head><body></body></html>');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";};FCKTools.ResetStyles=function(A){A.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};
+FCKTools.CancelEvent=function(e){if (e) e.preventDefault();};FCKTools.DisableSelection=function(A){if (FCKBrowserInfo.IsGecko) A.style.MozUserSelect='none';else if (FCKBrowserInfo.IsSafari) A.style.KhtmlUserSelect='none';else A.style.userSelect='none';};FCKTools._AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var e=A.createElement("STYLE");e.appendChild(A.createTextNode(B));A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i<A.attributes.length;i++){A.removeAttribute(A.attributes[i].name,0);}};FCKTools.GetAllChildrenIds=function(A){var B=[];var C=function(parent){for (var i=0;i<parent.childNodes.length;i++){var D=parent.childNodes[i].id;if (D&&D.length>0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i<e.childNodes.length;i++) A.appendChild(e.childNodes[i].cloneNode(true));e.parentNode.replaceChild(A,e);};FCKTools.CreateXmlObject=function(A){switch (A){case 'XmlHttp':return new XMLHttpRequest();case 'DOMDocument':var B=(new DOMParser()).parseFromString('<tmp></tmp>','text/xml');FCKDomTools.RemoveNode(B.firstChild);return B;};return null;};FCKTools.GetScrollPosition=function(A){return { X:A.pageXOffset,Y:A.pageYOffset };};FCKTools.AddEventListener=function(A,B,C){A.addEventListener(B,C,false);};FCKTools.RemoveEventListener=function(A,B,C){A.removeEventListener(B,C,false);};FCKTools.AddEventListenerEx=function(A,B,C,D){A.addEventListener(B,function(e){C.apply(A,[e].concat(D||[]));},false);};FCKTools.GetViewPaneSize=function(A){return { Width:A.innerWidth,Height:A.innerHeight };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.getAttribute('style');if (D&&D.length>0){C.Inline=D;A.setAttribute('style','',0);};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return A.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);var E=null;while (A){var F=D.getComputedStyle(A,'').position;if (F&&F!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (!FCKBrowserInfo.IsOpera){var G=E;while (G&&G!=A){c.X-=G.scrollLeft;c.Y-=G.scrollTop;G=G.parentNode;}};E=A;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){A=D.frameElement;E=null;if (A) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;};
+var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6.4",VersionBuild : "21629",Instances : window.FCKeditorAPI && window.FCKeditorAPI.Instances || {},GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : window.FCKeditorAPI && window.FCKeditorAPI._FunctionQueue || {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat) window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup);
+var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i<A.length;i++){var B=document.createElement('img');FCKTools.AddEventListenerEx(B,'load',_FCKImagePreloader_OnImage,this);FCKTools.AddEventListenerEx(B,'error',_FCKImagePreloader_OnImage,this);B.src=A[i];_FCKImagePreloader_ImageCache.push(B);}}};var _FCKImagePreloader_ImageCache=[];function _FCKImagePreloader_OnImage(A,B){if ((--B._PreloadCount)==0&&B.OnComplete) B.OnComplete();};
+var FCKRegexLib={AposEntity:/&apos;/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BeforeBody:/(^[\s\S]*\<body[^\>]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HasBodyTag:/<body[\s|>]/i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/,TagBody:/></,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsA:/<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsArea:/<area(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,HtmlDocType:/DTD HTML/,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/};
+var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ 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 },InlineNonEmptyElements:{ a:1,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 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ 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,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }};
+var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if ((E=e[i].getAttribute('fckLang'))){if ((s=FCKLang[E])){if (D) s=FCKTools.HTMLEncode(s);e[i][C]=s;}}}},TranslatePage:function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);this.TranslateElements(A,'LEGEND','innerHTML');},Initialize:function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage={};this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];}};
+var FCKXHtmlEntities={};FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';var B,e;if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'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','\u2308':'lceil','\u2309':'rceil','\u230a':'lfloor','\u230b':'rfloor','\u2329':'lang','\u232a':'rang','â—Š':'loz','â™ ':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','>':'gt','ˆ':'circ','Ëœ':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','â€':'zwj','‎':'lrm','â€':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','â€':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'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'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'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','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={'>':'gt'};A='>';A+=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');};
+var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^<xhtml.*?>/,'<xhtml>');E=E.substr(7,E.length-15).Trim();if (FCKConfig.DocType.length>0&&FCKRegexLib.HtmlDocType.test(FCKConfig.DocType)) E=E.replace(FCKRegexLib.SpaceNoClose,'>');else E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();FCKDomTools.EnforcePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);return E;};FCKXHtml._AppendAttribute=function(A,B,C){try{if (C==undefined||C==null) C='';else if (C.replace){if (FCKConfig.ForceSimpleAmpersand) C=C.replace(/&/g,'___FCKAmp___');C=C.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity);};var D=this.XML.createAttribute(B);D.value=C;A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=B.firstChild;while (D){this._AppendNode(A,D);D=D.nextSibling;};if (C&&B.tagName&&B.tagName.toLowerCase()!='pre'){FCKDomTools.TrimNode(A);if (FCKConfig.FillEmptyBlocks){var E=A.lastChild;if (E&&E.nodeType==1&&E.nodeName=='br') this._AppendEntity(A,this._NbspEntity);}};if (A.childNodes.length==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,this._NbspEntity);return A;};var F=A.nodeName;if (FCKListsLib.InlineChildReqElements[F]) return null;if (!FCKListsLib.EmptyElements[F]) A.appendChild(this.XML.createTextNode(''));};return A;};FCKXHtml._AppendNode=function(A,B){if (!B) return false;switch (B.nodeType){case 1:if (FCKBrowserInfo.IsGecko&&B.tagName.toLowerCase()=='br'&&B.parentNode.tagName.toLowerCase()=='pre'){var C='\r';if (B==B.parentNode.firstChild) C+='\r';return FCKXHtml._AppendNode(A,this.XML.createTextNode(C));};if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&(B.hasAttribute('_moz_editor_bogus_node')||B.getAttribute('type')=='_moz')){if (B.nextSibling) return false;else{B.removeAttribute('_moz_editor_bogus_node');B.removeAttribute('type');}};if (B.getAttribute('_fcktemp')) return false;var D=B.tagName.toLowerCase();if (FCKBrowserInfo.IsIE){if (B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') D=B.scopeName.toLowerCase()+':'+D;}else{if (D.StartsWith('fck:')) D=D.Remove(0,4);};if (!FCKRegexLib.ElementName.test(D)) return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var E=this.XML.createElement(D);FCKXHtml._AppendAttributes(A,B,E,D);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var F=FCKXHtml.TagProcessors[D];if (F) E=F(E,B,A);else E=this._AppendChildNodes(E,B,Boolean(FCKListsLib.NonEmptyBlockElements[D]));if (!E) return false;A.appendChild(E);break;case 3:if (B.parentNode&&B.parentNode.nodeName.IEquals('pre')) return this._AppendTextNode(A,B.nodeValue);return this._AppendTextNode(A,B.nodeValue.ReplaceNewLineChars(' '));case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) {};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+(FCKXHtml.SpecialBlocks.push(A)-1);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){var C=B.length>0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);if (B.style.width) A.removeAttribute('width');if (B.style.height) A.removeAttribute('height');return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol;
+FCKXHtml._GetMainXmlString=function(){return (new XMLSerializer()).serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n<D.length;n++){var E=D[n];if (E.specified){var F=E.nodeName.toLowerCase();var G;if (F.StartsWith('_fck')) continue;else if (F.indexOf('_moz')==0) continue;else if (F=='class'){G=E.nodeValue.replace(FCKRegexLib.FCK_Class,'');if (G.length==0) continue;}else if (E.nodeValue===true) G=F;else G=B.getAttribute(F,2);this._AppendAttribute(C,F,G);}}};if (FCKBrowserInfo.IsOpera){FCKXHtml.TagProcessors['head']=function(A,B){FCKXHtml.XML._HeadElement=A;A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B,C){if (B.parentNode.nodeName.toLowerCase()!='head'){var D=FCKXHtml.XML._HeadElement;if (D&&C!=D){delete B._fckxhtmljob;FCKXHtml._AppendNode(D,B);return null;}};return A;}};if (FCKBrowserInfo.IsGecko){FCKXHtml.TagProcessors['link']=function(A,B){if (B.href.substr(0,9).toLowerCase()=='chrome://') return false;return A;}};
+var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+(FCKCodeFormatter.ProtectedData.push(C)-1)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var j=0;j<FCKCodeFormatter.ProtectedData.length;j++){var F=new RegExp('___FCKpd___'+j);B=B.replace(F,FCKCodeFormatter.ProtectedData[j].replace(/\$/g,'$$$$'));};return B.Trim();};
+var FCKUndo={};FCKUndo.SavedData=[];FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=0;FCKUndo.Changed=false;FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo.SaveLocked=false;FCKUndo._GetBookmark=function(){FCKSelection.Restore();var A=new FCKDomRange(FCK.EditorWindow);try{A.MoveToSelection();}catch (e){return null;};if (FCKBrowserInfo.IsIE){var B=A.CreateBookmark();var C=FCK.EditorDocument.body.innerHTML;A.MoveToBookmark(B);return [B,C];};return A.CreateBookmark2();};FCKUndo._SelectBookmark=function(A){if (!A) return;var B=new FCKDomRange(FCK.EditorWindow);if (A instanceof Object){if (FCKBrowserInfo.IsIE) B.MoveToBookmark(A[0]);else B.MoveToBookmark2(A);try{B.Select();}catch (e){B.MoveToPosition(FCK.EditorDocument.body,4);B.Select();}}};FCKUndo._CompareCursors=function(A,B){for (var i=0;i<Math.min(A.length,B.length);i++){if (A[i]<B[i]) return-1;else if (A[i]>B[i]) return 1;};if (A.length<B.length) return-1;else if (A.length>B.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;};
+var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A='<script>document.domain="'+FCK_RUNTIME_DOMAIN+'";</script>'+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+'&nbsp;'+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='<br type="_moz">';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='<script type="text/javascript" _fcktemp="true">window.onerror=function(){return true;};</script>';H.frameBorder=0;H.style.width=H.style.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A.replace(/<head>/i,'<head>'+I);H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(A.replace(/<head>/i,'<head>'+I));J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;setTimeout(function(){try{K.Window.document.documentElement.doScroll("left");}catch(e){setTimeout(arguments.callee,0);return;};K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);},0);}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;A.body.offsetLeft;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}};
+var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i<arguments.length;i++){var A=arguments[i];if (!A) continue;if (typeof(A[0])=='object') this.SetKeystrokes.apply(this,A);else{if (A.length==1) delete this.Keystrokes[A[0]];else this.Keystrokes[A[0]]=A[1]===true?true:A;}}};function _FCKKeystrokeHandler_OnKeyDown(A,B){var C=A.keyCode||A.which;var D=0;if (A.ctrlKey||A.metaKey) D+=CTRL;if (A.shiftKey) D+=SHIFT;if (A.altKey) D+=ALT;var E=C+D;var F=B._CancelIt=false;var G=B.Keystrokes[E];if (G){if (G===true||!(B.OnKeystroke&&B.OnKeystroke.apply(B,G))) return true;F=true;};if (F||(B.CancelCtrlDefaults&&D==CTRL&&(C<33||C>40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;};
+FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})();
+var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i<I.Elements.length;i++){var O=I.Elements[i];if (this.CheckElementRemovable(O)){if (L&&!FCKDomTools.CheckIsEmptyElement(O,function(el){return (el!=H);})){M=O;N=J.length-1;}else{var P=O.nodeName.toLowerCase();if (P==this.Element){for (var Q in E){if (FCKDomTools.HasAttribute(O,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(O);break;case 'class':if (FCKDomTools.GetAttributeValue(O,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(O,Q);}}}};this._RemoveOverrides(O,F[P]);if (this.GetType()==1) this._RemoveNoAttribElement(O);}}else if (L) J.push(O);L=L&&((K&&!FCKDomTools.GetNextSibling(O))||(!K&&!FCKDomTools.GetPreviousSibling(O)));if (M&&(!L||(i==I.Elements.length-1))){var R=FCKDomTools.RemoveNode(H);for (var j=0;j<=N;j++){var S=FCKDomTools.CloneElement(J[j]);S.appendChild(R);R=S;};if (K) FCKDomTools.InsertAfterNode(M,R);else M.parentNode.insertBefore(R,M);L=false;M=null;}};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);return;};A.Expand('inline_elements');D=A.CreateBookmark(true);var T=A.GetBookmarkNode(D,true);var U=A.GetBookmarkNode(D,false);A.Release(true);var I=new FCKElementPath(T);var X=I.Elements;var O;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(T,O,A);};I=new FCKElementPath(U);X=I.Elements;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;b=O.nodeName.toLowerCase();if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(U,O,A);};var Z=FCKDomTools.GetNextSourceNode(T,true);while (Z){var a=FCKDomTools.GetNextSourceNode(Z);if (Z.nodeType==1){var b=Z.nodeName.toLowerCase();var c=(b==this.Element);if (c){for (var Q in E){if (FCKDomTools.HasAttribute(Z,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(Z);break;case 'class':if (FCKDomTools.GetAttributeValue(Z,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(Z,Q);}}}}else c=!!F[b];if (c){this._RemoveOverrides(Z,F[b]);this._RemoveNoAttribElement(Z);}};if (a==U) break;Z=a;};this._FixBookmarkStart(T);if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},CheckElementRemovable:function(A,B){if (!A) return false;var C=A.nodeName.toLowerCase();if (C==this.Element){if (!B&&!FCKDomTools.HasAttributes(A)) return true;var D=this._GetAttribsForComparison();var E=(D._length==0);for (var F in D){if (F=='_length') continue;if (this._CompareAttributeValues(F,FCKDomTools.GetAttributeValue(A,F),(this.GetFinalAttributeValue(F)||''))){E=true;if (!B) break;}else{E=false;if (B) return false;}};if (E) return true;};var G=this._GetOverridesForComparison()[C];if (G){if (!(D=G.Attributes)) return true;for (var i=0;i<D.length;i++){var H=D[i][0];if (FCKDomTools.HasAttribute(A,H)){var I=D[i][1];if (I==null||(typeof I=='string'&&FCKDomTools.GetAttributeValue(A,H)==I)||I.test(FCKDomTools.GetAttributeValue(A,H))) return true;}}};return false;},CheckActive:function(A){switch (this.GetType()){case 0:return this.CheckElementRemovable(A.Block||A.BlockLimit,true);case 1:var B=A.Elements;for (var i=0;i<B.length;i++){var C=B[i];if (C==A.Block||C==A.BlockLimit) continue;if (this.CheckElementRemovable(C,true)) return true;}};return false;},RemoveFromElement:function(A){var B=this._GetAttribsForComparison();var C=this._GetOverridesForComparison();var D=A.getElementsByTagName(this.Element);for (var i=D.length-1;i>=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i<C.length;i++){var D=C[i][0];if (FCKDomTools.HasAttribute(A,D)){var E=C[i][1];if (E==null||(E.test&&E.test(FCKDomTools.GetAttributeValue(A,D)))||(typeof E=='string'&&FCKDomTools.GetAttributeValue(A,D)==E)) FCKDomTools.RemoveAttribute(A,D);}}}},_RemoveNoAttribElement:function(A){if (!FCKDomTools.HasAttributes(A)){var B=A.firstChild;var C=A.lastChild;FCKDomTools.RemoveNode(A,true);this._MergeSiblings(B);if (B!=C) this._MergeSiblings(C);}},BuildElement:function(A,B){var C=B||A.createElement(this.Element);var D=this._StyleDesc.Attributes;var E;if (D){for (var F in D){E=this.GetFinalAttributeValue(F);if (F.toLowerCase()=='class') C.className=E;else C.setAttribute(F,E);}};if (this._GetStyleText().length>0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return '&nbsp;';else if (offset==0) return new Array(match.length).join('&nbsp;')+' ';else return ' '+new Array(match.length).join('&nbsp;');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'<br>');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join('&nbsp;')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'<br />');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+|&nbsp;)/g,' ');else if (isTag&&value=='<br />') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='<pre>\n'+F.join('')+'</pre>';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_CheckAndMergePre:function(A,B){if (A!=FCKDomTools.GetPreviousSourceElement(B,true)) return;var C=A.innerHTML.replace(/\n$/,'')+'\n\n'+B.innerHTML.replace(/^\n/,'');if (FCKBrowserInfo.IsIE) B.outerHTML='<pre>'+C+'</pre>';else B.innerHTML=C;FCKDomTools.RemoveNode(A);},_CheckAndSplitPre:function(A){var B;var C=A.firstChild;C=C&&C.nextSibling;while (C){var D=C.nextSibling;if (D&&D.nextSibling&&C.nodeName.IEquals('br')&&D.nodeName.IEquals('br')){FCKDomTools.RemoveNode(C);C=D.nextSibling;FCKDomTools.RemoveNode(D);B=FCKDomTools.InsertAfterNode(B||A,FCKDomTools.CloneElement(A));continue;};if (B){C=C.previousSibling;FCKDomTools.MoveNode(C.nextSibling,B);};C=C.nextSibling;}},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H;while((F=E.GetNextParagraph())){var I=this.BuildElement(G);var J=I.nodeName.IEquals('pre');var K=F.nodeName.IEquals('pre');var L=J&&!K;var M=!J&&K;if (L) I=this._ToPre(G,F,I);else if (M) I=this._FromPre(G,F,I);else FCKDomTools.MoveChildren(F,I);F.parentNode.insertBefore(I,F);FCKDomTools.RemoveNode(F);if (J){if (H) this._CheckAndMergePre(H,I);H=I;}else if (M) this._CheckAndSplitPre(I);};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},_ApplyInlineStyle:function(A,B,C){var D=A.Window.document;if (A.CheckIsCollapsed()){var E=this.BuildElement(D);A.InsertNode(E);A.MoveToPosition(E,2);A.Select();return;};var F=this.Element;var G=FCK.DTD[F]||FCK.DTD.span;var H=this._GetAttribsForComparison();var I;A.Expand('inline_elements');var J=A.CreateBookmark(true);var K=A.GetBookmarkNode(J,true);var L=A.GetBookmarkNode(J,false);A.Release(true);var M=FCKDomTools.GetNextSourceNode(K,true);while (M){var N=false;var O=M.nodeType;var P=O==1?M.nodeName.toLowerCase():null;if (!P||G[P]){if ((FCK.DTD[M.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[F]||!FCK.DTD[F]){if (!A.CheckHasRange()) A.SetStart(M,3);if (O!=1||M.childNodes.length==0){var Q=M;var R=Q.parentNode;while (Q==R.lastChild&&G[R.nodeName.toLowerCase()]){Q=R;};A.SetEnd(Q,4);if (Q==Q.parentNode.lastChild&&!G[Q.parentNode.nodeName.toLowerCase()]) N=true;}else{A.SetEnd(M,3);}}else N=true;}else N=true;M=FCKDomTools.GetNextSourceNode(M);if (M==L){M=null;N=true;};if (N&&A.CheckHasRange()&&!A.CheckIsCollapsed()){I=this.BuildElement(D);A.ExtractContents().AppendTo(I);if (I.innerHTML.RTrim().length>0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i<B.length;i++){var C=B[i];var D;var E;var F;if (typeof C=='string') D=C.toLowerCase();else{D=C.Element?C.Element.toLowerCase():this.Element;F=C.Attributes;};E=A[D]||(A[D]={});if (F){var G=(E.Attributes=E.Attributes||[]);for (var H in F){G.push([H.toLowerCase(),F[H]]);}}}};return (this._GetOverridesForComparison_$=A);},_CreateElementAttribsForComparison:function(A){var B={};var C=0;for (var i=0;i<A.attributes.length;i++){var D=A.attributes[i];if (D.specified){B[D.nodeName.toLowerCase()]=FCKDomTools.GetAttributeValue(A,D).toLowerCase();C++;}};B._length=C;return B;},_CheckAttributesMatch:function(A,B){var C=A.attributes;var D=0;for (var i=0;i<C.length;i++){var E=C[i];if (E.specified){var F=E.nodeName.toLowerCase();var G=B[F];if (!G) break;if (G!=FCKDomTools.GetAttributeValue(A,E).toLowerCase()) break;D++;}};return (D==B._length);}};
+var FCKStyles=FCK.Styles={_Callbacks:{},_ObjectStyles:{},ApplyStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){if (A.GetType()==2) A.ApplyToObject(FCKSelection.GetSelectedElement());else A.ApplyToSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},RemoveStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){A.RemoveFromSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},AttachStyleStateChange:function(A,B,C){var D=this._Callbacks[A];if (!D) D=this._Callbacks[A]=[];D.push([B,C]);},CheckSelectionChanges:function(){var A=FCKSelection.GetBoundaryParentElement(true);if (!A) return;var B=new FCKElementPath(A);var C=this.GetStyles();for (var D in C){var E=this._Callbacks[D];if (E){var F=C[D];var G=F.CheckActive(B);if (G!=(F._LastState||null)){F._LastState=G;for (var i=0;i<E.length;i++){var H=E[i][0];var I=E[i][1];H.call(I||window,D,G);}}}}},CheckStyleInSelection:function(A){return false;},_GetRemoveFormatTagsRegex:function (){var A=new RegExp('^(?:'+FCKConfig.RemoveFormatTags.replace(/,/g,'|')+')$','i');return (this._GetRemoveFormatTagsRegex=function(){return A;})&&A;},RemoveAll:function(){var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();if (A.CheckIsCollapsed()) return;A.Expand('inline_elements');var B=A.CreateBookmark(true);var C=A.GetBookmarkNode(B,true);var D=A.GetBookmarkNode(B,false);A.Release(true);var E=this._GetRemoveFormatTagsRegex();var F=new FCKElementPath(C);var G=F.Elements;var H;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;if (E.test(H.nodeName)) FCKDomTools.BreakParent(C,H,A);};F=new FCKElementPath(D);G=F.Elements;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;elementName=H.nodeName.toLowerCase();if (E.test(H.nodeName)) FCKDomTools.BreakParent(D,H,A);};var I=FCKDomTools.GetNextSourceNode(C,true,1);while (I){if (I==D) break;var J=FCKDomTools.GetNextSourceNode(I,false,1);if (E.test(I.nodeName)) FCKDomTools.RemoveNode(I,true);else FCKDomTools.RemoveAttributes(I,FCKConfig.RemoveAttributesArray);I=J;};A.SelectBookmark(B);FCK.Events.FireEvent('OnSelectionChange');},GetStyle:function(A){return this.GetStyles()[A];},GetStyles:function(){var A=this._GetStyles;if (!A){A=this._GetStyles=FCKTools.Merge(this._LoadStylesCore(),this._LoadStylesCustom(),this._LoadStylesXml());};return A;},CheckHasObjectStyle:function(A){return!!this._ObjectStyles[A];},_LoadStylesCore:function(){var A={};var B=FCKConfig.CoreStyles;for (var C in B){var D=A['_FCK_'+C]=new FCKStyle(B[C]);D.IsCore=true;};return A;},_LoadStylesCustom:function(){var A={};var B=FCKConfig.CustomStyles;if (B){for (var C in B){var D=A[C]=new FCKStyle(B[C]);D.Name=C;}};return A;},_LoadStylesXml:function(){var A={};var B=FCKConfig.StylesXmlPath;if (!B||B.length==0) return A;var C=new FCKXml();C.LoadUrl(B);var D=FCKXml.TransformToObject(C.SelectSingleNode('Styles'));var E=D.$Style;if (!E) return A;for (var i=0;i<E.length;i++){var F=E[i];var G=(F.element||'').toLowerCase();if (G.length==0) throw('The element name is required. Error loading "'+B+'"');var H={Element:G,Attributes:{},Styles:{},Overrides:[]};var I=F.$Attribute||[];for (var j=0;j<I.length;j++){H.Attributes[I[j].name]=I[j].value;};var J=F.$Style||[];for (j=0;j<J.length;j++){H.Styles[J[j].name]=J[j].value;};var K=F.$Override;if (K){for (j=0;j<K.length;j++){var L=K[j];var M={Element:L.element};var N=L.$Attribute;if (N){M.Attributes={};for (var k=0;k<N.length;k++){var O=N[k].value||null;if (O){var P=O&&FCKRegexLib.RegExp.exec(O);if (P) O=new RegExp(P[1],P[2]||'');};M.Attributes[N[k].name]=O;}};H.Overrides.push(M);}};var Q=new FCKStyle(H);Q.Name=F.name||G;if (Q.GetType()==2) this._ObjectStyles[G]=true;A[Q.Name]=Q;};return A;}};
+var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}};
+var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i<count;i++){var C=B[i];if (C.nodeType==1&&FCKListsLib.BlockElements[C.nodeName.toLowerCase()]) return true;};return false;};
+var FCKDomRange=function(A){this.Window=A;this._Cache={};};FCKDomRange.prototype={_UpdateElementInfo:function(){var A=this._Range;if (!A) this.Release(true);else{var B=A.startContainer;var C=new FCKElementPath(B);this.StartNode=B.nodeType==3?B:B.childNodes[A.startOffset];this.StartContainer=B;this.StartBlock=C.Block;this.StartBlockLimit=C.BlockLimit;if (A.collapsed){this.EndNode=this.StartNode;this.EndContainer=this.StartContainer;this.EndBlock=this.StartBlock;this.EndBlockLimit=this.StartBlockLimit;}else{var D=A.endContainer;if (B!=D) C=new FCKElementPath(D);var E=D;if (A.endOffset==0){while (E&&!E.previousSibling) E=E.parentNode;if (E) E=E.previousSibling;}else if (E.nodeType==1) E=E.childNodes[A.endOffset-1];this.EndNode=E;this.EndContainer=D;this.EndBlock=C.Block;this.EndBlockLimit=C.BlockLimit;}};this._Cache={};},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;};return null;},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;return false;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while (A&&A.nodeType==1){if (FCKDomTools.CheckIsEditable(A)) B=A;else if (B) break;A=A.firstChild;};if (B) this.MoveToElementStart(B);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(){if (this.CheckIsCollapsed()) return true;var A=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(A);FCKDomTools.TrimNode(A);return (A.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this._Cache;var B=A.IsStartOfBlock;if (B!=undefined) return B;var C=this.StartBlock||this.StartBlockLimit;var D=this._Range.startContainer;var E=this._Range.startOffset;var F;if (E>0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E<G.length){G=G.substr(E);if (G.Trim().length!=0) return this._Cache.IsEndOfBlock=false;}}else F=D.childNodes[E];if (!F) F=FCKDomTools.GetNextSourceNode(D,true,null,C);var H=false;while (F){switch (F.nodeType){case 1:var I=F.nodeName.toLowerCase();if (FCKListsLib.InlineChildReqElements[I]) break;if (I=='br'&&!H){H=true;break;};return this._Cache.IsEndOfBlock=false;case 3:if (F.nodeValue.Trim().length>0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML='&nbsp;';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML='&nbsp;';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3&&D.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;}while (C&&C.nodeType==3&&E.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;}while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;}while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);if (FCKDomTools.CheckIsEmptyElement(D,function(element) { return element.getAttribute('_fck_bookmark')!='true';})&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}};
+FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);var A=this.Window.getSelection();if (A&&A.rangeCount>0){this._Range=FCKW3CRange.CreateFromRange(this.Window.document,A.getRangeAt(0));this._UpdateElementInfo();}else if (this.Window.document) this.MoveToElementStart(this.Window.document.body);};FCKDomRange.prototype.Select=function(){var A=this._Range;if (A){var B=A.startContainer;if (A.collapsed&&B.nodeType==1&&B.childNodes.length==0) B.appendChild(A._Document.createTextNode(''));var C=this.Window.document.createRange();C.setStart(B,A.startOffset);try{C.setEnd(A.endContainer,A.endOffset);}catch (e){if (e.toString().Contains('NS_ERROR_ILLEGAL_VALUE')){A.collapse(true);C.setEnd(A.endContainer,A.endOffset);}else throw(e);};var D=this.Window.getSelection();D.removeAllRanges();D.addRange(C);}};FCKDomRange.prototype.SelectBookmark=function(A){var B=this.Window.document.createRange();var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);B.setStart(C.parentNode,FCKDomTools.GetIndexOf(C));FCKDomTools.RemoveNode(C);if (D){B.setEnd(D.parentNode,FCKDomTools.GetIndexOf(D));FCKDomTools.RemoveNode(D);};var E=this.Window.getSelection();E.removeAllRanges();E.addRange(B);};
+var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=FCKDomTools.GetNextSourceNode(H,true,null,I)||H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}};
+var FCKDocumentFragment=function(A,B){this.RootNode=B||A.createDocumentFragment();};FCKDocumentFragment.prototype={AppendTo:function(A){A.appendChild(this.RootNode);},AppendHtml:function(A){var B=this.RootNode.ownerDocument.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){FCKDomTools.InsertAfterNode(A,this.RootNode);}};
+var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i<I.length;i++){topStart=I[i];topEnd=J[i];if (topStart!=topEnd) break;};var K,levelStartNode,levelClone,currentNode,currentSibling;if (B) K=B.RootNode;for (var j=i;j<I.length;j++){levelStartNode=I[j];if (K&&levelStartNode!=C) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==C));currentNode=levelStartNode.nextSibling;while(currentNode){if (currentNode==J[j]||currentNode==D) break;currentSibling=currentNode.nextSibling;if (A==2) K.appendChild(currentNode.cloneNode(true));else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.appendChild(currentNode);};currentNode=currentSibling;};if (K) K=levelClone;};if (B) K=B.RootNode;for (var k=i;k<J.length;k++){levelStartNode=J[k];if (A>0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}};
+var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);this.TabText='';if (D>0||FCKBrowserInfo.IsSafari){while (D--) this.TabText+='\xa0';E.SetKeystrokes([9,'Tab']);};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};if (FCKBrowserInfo.IsIE){var F=FCKDomTools.GetPreviousSourceElement(B.StartNode,true);if (F&&F.nodeName.toLowerCase()=='br'){var G=B.Clone();G.SetStart(F,4);if (G.CheckIsEmpty()){F.parentNode.removeChild(F);return true;}}};var H=B.StartBlock;var I=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&H&&I){if (!C){var J=B.CheckEndOfBlock();B.DeleteContents();if (H!=I){B.SetStart(I,1);B.SetEnd(I,1);};B.Select();A=(H==I);};if (B.CheckStartOfBlock()){var K=B.StartBlock;var L=FCKDomTools.GetPreviousSourceElement(K,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,L,K);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i<len;i++){var L=K.Elements[i];if (L==K.Block||L==K.BlockLimit) break;if (FCKListsLib.InlineChildReqElements[L.nodeName.toLowerCase()]){L=FCKDomTools.CloneElement(L);FCKDomTools.MoveChildren(I,L);I.appendChild(L);}}};if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);C.InsertNode(I);if (FCKBrowserInfo.IsIE){C.MoveToElementEditStart(I);C.Select();};C.MoveToElementEditStart(G&&!H?F:I);};if (FCKBrowserInfo.IsGeckoLike){if (F){var M=this.Window.document.createElement('span');M.innerHTML='&nbsp;';C.InsertNode(M);FCKDomTools.ScrollIntoView(M,false);C.DeleteContents();}else{FCKDomTools.ScrollIntoView(F||I,false);}};C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;var G=false;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{var H;G=E.IEquals('pre');if (G) H=this.Window.document.createTextNode(FCKBrowserInfo.IsIE?'\r':'\n');else H=this.Window.document.createElement('br');B.InsertNode(H);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(H,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(H,4);else B.SetStart(H.nextSibling,1);if (!FCKBrowserInfo.IsIE){var I=null;if (FCKBrowserInfo.IsOpera) I=this.Window.document.createElement('span');else I=this.Window.document.createElement('br');H.parentNode.insertBefore(I,H.nextSibling);FCKDomTools.ScrollIntoView(I,false);I.parentNode.removeChild(I);}};B.Collapse(true);B.Select(G);};B.Release();return true;};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();};FCKEnterKey.prototype._CheckIsAllContentsIncluded=function(A,B){var C=false;var D=false;if (A.StartContainer==B||A.StartContainer==B.firstChild) C=(A._Range.startOffset==0);if (A.EndContainer==B||A.EndContainer==B.lastChild){var E=A.EndContainer.nodeType==3?A.EndContainer.length:A.EndContainer.childNodes.length;D=(A._Range.endOffset==E);};return C&&D;};FCKEnterKey.prototype._FixIESelectAllBug=function(A){var B=this.Window.document;B.body.innerHTML='';var C;if (FCKConfig.EnterMode.IEquals(['div','p'])){C=B.createElement(FCKConfig.EnterMode);B.body.appendChild(C);}else C=B.body;A.MoveToNodeContents(C);A.Collapse(true);A.Select();A.Release();};
+var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.push(A);return A;};FCKDocumentProcessor.Process=function(A){var B=FCK.IsDirty();var C,i=0;while((C=this._Items[i++])) C.ProcessDocument(A);if (!B) FCK.ResetIsDirty();};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCKTools.GetElementDocument(B).createElement('IMG');C.className=A;C.src=FCKConfig.BasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i<A.length;i++) D=A[i](el,D)||D;if (D!=E) FCKTempBin.RemoveElement(E.getAttribute('_fckrealelement'));el.parentNode.replaceChild(D,el);};var F=function(elementName,doc){var G=doc.getElementsByTagName(elementName);for (var i=G.length-1;i>=0;i--) B(G[i]);};var H=function(doc){F('object',doc);F('embed',doc);};return FCKTools.Merge(FCKDocumentProcessor.AppendNew(),{ProcessDocument:function(doc){if (FCKBrowserInfo.IsGecko) FCKTools.RunFunction(H,this,[doc]);else H(doc);},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);});if (FCKBrowserInfo.IsSafari){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByClassName?A.getElementsByClassName('Apple-style-span'):Array.prototype.filter.call(A.getElementsByTagName('span'),function(item){ return item.className=='Apple-style-span';});for (var i=B.length-1;i>=0;i--) FCKDomTools.RemoveNode(B[i],true);}};
+var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}};
+FCKSelection.GetType=function(){var A='Text';var B;try { B=this.GetSelection();} catch (e) {};if (B&&B.rangeCount==1){var C=B.getRangeAt(0);if (C.startContainer==C.endContainer&&(C.endOffset-C.startOffset)==1&&C.startContainer.nodeType==1&&FCKListsLib.StyleObjectElements[C.startContainer.childNodes[C.startOffset].nodeName.toLowerCase()]){A='Control';}};return A;};FCKSelection.GetSelectedElement=function(){var A=!!FCK.EditorWindow&&this.GetSelection();if (!A||A.rangeCount<1) return null;var B=A.getRangeAt(0);if (B.startContainer!=B.endContainer||B.startContainer.nodeType!=1||B.startOffset!=B.endOffset-1) return null;var C=B.startContainer.childNodes[B.startOffset];if (C.nodeType!=1) return null;return C;};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=this.GetSelection();if (A){if (A.anchorNode&&A.anchorNode==A.focusNode){var B=A.getRangeAt(0);if (B.collapsed||B.startContainer.nodeType==3) return A.anchorNode.parentNode;else return A.anchorNode;};var C=new FCKElementPath(A.anchorNode);var D=new FCKElementPath(A.focusNode);var E=null;var F=null;if (C.Elements.length>D.Elements.length){E=C.Elements;F=D.Elements;}else{E=D.Elements;F=C.Elements;};var G=E.length-F.length;for(var i=0;i<F.length;i++){if (E[G+i]==F[i]) return F[i];};return null;}};return null;};FCKSelection.GetBoundaryParentElement=function(A){if (!FCK.EditorWindow) return null;if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var B=this.GetSelection();if (B&&B.rangeCount>0){var C=B.getRangeAt(A?0:(B.rangeCount-1));var D=A?C.startContainer:C.endContainer;return (D.nodeType==1?D:D.parentNode);}};return null;};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=this.GetSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=this.GetSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try { B=this.GetSelection().getRangeAt(0).startContainer;}catch(e){}}while (B){if (B.nodeType==1&&B.nodeName.IEquals(A)) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=this.GetSelection().getRangeAt(0).startContainer;while (C){if (C.nodeName.IEquals(A)) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=this.GetSelection();for (var i=0;i<A.rangeCount;i++){A.getRangeAt(i).deleteContents();};return A;};FCKSelection.GetSelection=function(){return FCK.EditorWindow.getSelection();};FCKSelection.Save=function(){};FCKSelection.Restore=function(){};FCKSelection.Release=function(){};
+var FCKTableHandler={};FCKTableHandler.InsertRow=function(A){var B=FCKSelection.MoveToAncestorNode('TR');if (!B) return;var C=B.cloneNode(true);B.parentNode.insertBefore(C,B);FCKTableHandler.ClearRow(A?C:B);};FCKTableHandler.DeleteRows=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();var C=[];for (var i=0;i<B.length;i++){var D=B[i].parentNode;C[D.rowIndex]=D;};for (var i=C.length;i>=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i<D.rows.length;i++){var F=D.rows[i];if (F.cells.length<(E+1)) continue;B=F.cells[E].cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B);var G=F.cells[E];F.insertBefore(B,(A?G:G.nextSibling));}};FCKTableHandler.DeleteColumns=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();for (var i=B.length;i>=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(A.parentNode);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i<A.length;i++) A[i][B]=true;};FCKTableHandler._UnmarkCells=function(A,B){for (var i=0;i<A.length;i++){FCKDomTools.ClearElementJSProperty(A[i],B);}};FCKTableHandler._ReplaceCellsByMarker=function(A,B,C){for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){if (A[i][j][B]) A[i][j]=C;}}};FCKTableHandler._GetMarkerGeometry=function(A,B,C,D){var E=0;var F=0;var G=0;var H=0;for (var i=C;A[B][i]&&A[B][i][D];i++) E++;for (var i=C-1;A[B][i]&&A[B][i][D];i--){E++;G++;};for (var i=B;A[i]&&A[i][C]&&A[i][C][D];i++) F++;for (var i=B-1;A[i]&&A[i][C]&&A[i][C][D];i--){F++;H++;};return { 'width':E,'height':F,'x':G,'y':H };};FCKTableHandler.CheckIsSelectionRectangular=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<1) return false;for (var i=0;i<A.length;i++){if (A[i].parentNode.parentNode!=A[0].parentNode.parentNode) return false;};this._MarkCells(A,'_CellSelected');var B=this._CreateTableMap(A[0]);var C=A[0].parentNode.rowIndex;var D=this._GetCellIndexSpan(B,C,A[0]);var E=this._GetMarkerGeometry(B,C,D,'_CellSelected');var F=D-E.x;var G=C-E.y;if (E.width>=E.height){for (D=F;D<F+E.width;D++){C=G+(D-F) % E.height;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}}else{for (C=G;C<G+E.height;C++){D=F+(C-G) % E.width;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}};this._UnmarkCells(A,'_CellSelected');return true;};FCKTableHandler.MergeCells=function(){var A=this.GetSelectedCells();if (A.length<2) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);this._MarkCells(A,'_SelectedCells');var F=this._GetMarkerGeometry(C,D,E,'_SelectedCells');var G=E-F.x;var H=D-F.y;var I=FCKTools.GetElementDocument(B).createDocumentFragment();for (var i=0;i<F.height;i++){var J=0;for (var j=0;j<F.width;j++){var K=C[H+i][G+j];while (K.childNodes.length>0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCK.EditorDocument.createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCK.EditorDocument.createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCK.EditorDocument.createElement(B.nodeName);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r<D+K;r++){for (var i=I;i<J;i++) C[r][i]=H;}}else{var L=[];for (var i=0;i<C.length;i++){var M=C[i].slice(0,E);if (C[i].length<=E){L.push(M);continue;};if (C[i][E]==B){M.push(B);M.push(FCK.EditorDocument.createElement(B.nodeName));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(M[M.length-1]);}else{M.push(C[i][E]);M.push(C[i][E]);};for (var j=E+1;j<C[i].length;j++) M.push(C[i][j]);L.push(M);};C=L;};this._InstallTableMap(C,B.parentNode.parentNode.parentNode);};FCKTableHandler.VerticalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;var G=B.rowSpan;if (isNaN(G)) G=1;if (G>1){B.rowSpan=Math.ceil(G/2);var H=D+Math.ceil(G/2);var I=C[H];var J=null;for (var i=E+1;i<I.length;i++){if (I[i].parentNode.rowIndex==H){J=I[i];break;}};var K=FCK.EditorDocument.createElement(B.nodeName);K.rowSpan=Math.floor(G/2);if (F>1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);B.parentNode.parentNode.parentNode.rows[H].insertBefore(K,J);}else{var L=B.parentNode.sectionRowIndex+1;var M=FCK.EditorDocument.createElement('tr');var N=B.parentNode.parentNode;if (N.rows.length>L) N.insertBefore(M,N.rows[L]);else N.appendChild(M);for (var i=0;i<C[D].length;){var O=C[D][i].colSpan;if (isNaN(O)||O<1) O=1;if (i==E){i+=O;continue;};var P=C[D][i].rowSpan;if (isNaN(P)) P=1;C[D][i].rowSpan=P+1;i+=O;};var K=FCK.EditorDocument.createElement(B.nodeName);if (F>1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);M.appendChild(K);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCellLocation=function(A,B){for (var i=0;i<A.length;i++){for (var c=0;c<A[i].length;c++){if (A[i][c]==B) return [i,c];}};return null;};FCKTableHandler._CreateTableMap=function(A){var B=(A.nodeName=='TABLE'?A:A.parentNode.parentNode.parentNode);var C=B.rows;var r=-1;var D=[];for (var i=0;i<C.length;i++){r++;if (!D[r]) D[r]=[];var c=-1;for (var j=0;j<C[i].cells.length;j++){var E=C[i].cells[j];c++;while (D[r][c]) c++;var F=isNaN(E.colSpan)?1:E.colSpan;var G=isNaN(E.rowSpan)?1:E.rowSpan;for (var H=0;H<G;H++){if (!D[r+H]) D[r+H]=[];for (var I=0;I<F;I++){D[r+H][c+I]=C[i].cells[j];}};c+=F-1;}};return D;};FCKTableHandler._InstallTableMap=function(A,B){var C=FCKBrowserInfo.IsIE?"_fckrowspan":"rowSpan";for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (D.parentNode) D.parentNode.removeChild(D);D.colSpan=D[C]=1;}};var E=0;for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (!D) continue;if (j>E) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j<A.length;j++){if (!A[j]) continue;var D=A[j][i];if (!D||D._rowScanned===true) continue;if (A[j-1]&&A[j-1][i]==D) D[C]++;if (!A[j+1]||A[j+1][i]!=D) D._rowScanned=true;}};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];FCKDomTools.ClearElementJSProperty(D,'_colScanned');FCKDomTools.ClearElementJSProperty(D,'_rowScanned');}};for (var i=0;i<A.length;i++){var I=FCK.EditorDocument.createElement('tr');for (var j=0;j<A[i].length;){var D=A[i][j];if (A[i-1]&&A[i-1][j]==D){j+=D.colSpan;continue;};I.appendChild(D);if (C!='rowSpan'){D.rowSpan=D[C];D.removeAttribute(C);};j+=D.colSpan;if (D.colSpan==1) D.removeAttribute('colspan');if (D.rowSpan==1) D.removeAttribute('rowspan');};if (FCKBrowserInfo.IsIE){B.rows[i].replaceNode(I);}else{B.rows[i].innerHTML='';FCKDomTools.MoveChildren(I,B.rows[i]);}}};FCKTableHandler._MoveCaretToCell=function (A,B){var C=new FCKDomRange(FCK.EditorWindow);C.MoveToNodeContents(A);C.Collapse(B);C.Select();};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){B[i].innerHTML='';if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B[i]);}};FCKTableHandler.GetMergeRightTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=E+(isNaN(B.colSpan)?1:B.colSpan);var G=C[D][F];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,D,F,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.height!=I.height||H.y!=I.y) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};FCKTableHandler.GetMergeDownTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=D+(isNaN(B.rowSpan)?1:B.rowSpan);if (!C[F]) return null;var G=C[F][E];if (!G) return null;if (B.parentNode.parentNode!=G.parentNode.parentNode) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,F,E,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.width!=I.width||H.x!=I.x) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};
+FCKTableHandler.GetSelectedCells=function(){var A=[];var B=FCKSelection.GetSelection();if (B.rangeCount==1&&B.anchorNode.nodeType==3){var C=FCKTools.GetElementAscensor(B.anchorNode,'TD,TH');if (C) A[0]=C;return A;};for (var i=0;i<B.rangeCount;i++){var D=B.getRangeAt(i);var E;if (D.startContainer.tagName.Equals('TD','TH')) E=D.startContainer;else E=D.startContainer.childNodes[D.startOffset];if (E.nodeName.Equals('TD','TH')) A[A.length]=E;};return A;};
+var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i<C.length;i++){var D=C[i];B[D.name]=D.value;};var E=A.childNodes;for (i=0;i<E.length;i++){var F=E[i];if (F.nodeType==1){var G='$'+F.nodeName;var H=B[G];if (!H) H=B[G]=[];H.push(this.TransformToObject(F));}};return B;};
+FCKXml.prototype={LoadUrl:function(A){this.Error=false;var B;var C=FCKTools.CreateXmlObject('XmlHttp');C.open('GET',A,false);C.send(null);if (C.status==200||C.status==304||(C.status==0&&C.readyState==4)){B=C.responseXML;if (!B) B=(new DOMParser()).parseFromString(C.responseText,'text/xml');}else B=null;if (B){try{var D=B.firstChild;}catch (e){B=(new DOMParser()).parseFromString(C.responseText,'text/xml');}};if (!B||!B.firstChild){this.Error=true;if (window.confirm('Error loading "'+A+'" (HTTP Status: '+C.status+').\r\nDo you want to see the server response dump?')) alert(C.responseText);};this.DOMDocument=B;},SelectNodes:function(A,B){if (this.Error) return [];var C=[];var D=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);if (D){var E=D.iterateNext();while(E){C[C.length]=E;E=D.iterateNext();}};return C;},SelectSingleNode:function(A,B){if (this.Error) return null;var C=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),9,null);if (C&&C.singleNodeValue) return C.singleNodeValue;else return null;}};
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState(this.Name);};
+var FCKStyleCommand=function(){};FCKStyleCommand.prototype={Name:'Style',Execute:function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) FCK.Styles.RemoveStyle(B.Style);else FCK.Styles.ApplyStyle(B.Style);FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorDocument) return -1;if (FCKSelection.GetType()=='Control'){var A=FCKSelection.GetSelectedElement();if (!A||!FCKStyles.CheckHasObjectStyle(A.nodeName.toLowerCase())) return -1;};return 0;}};
+var FCKDialogCommand=function(A,B,C,D,E,F,G,H){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.CustomValue=H;this.GetStateFunction=F;this.GetStateParam=G;this.Resizable=false;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height,this.CustomValue,null,this.Resizable);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK.EditMode==0?0:-1;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return 0;};var FCKFormatBlockCommand=function(){};FCKFormatBlockCommand.prototype={Name:'FormatBlock',Execute:FCKStyleCommand.prototype.Execute,GetState:function(){return FCK.EditorDocument?0:-1;}};var FCKFontNameCommand=function(){};FCKFontNameCommand.prototype={Name:'FontName',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKFontSizeCommand=function(){};FCKFontSizeCommand.prototype={Name:'FontSize',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};if (typeof(A.submit)=='function') A.submit();else A.submit.click();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetData('');FCKUndo.Typing=true;FCK.Focus();};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){FCKUndo.Undo();};FCKUndoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckUndoState()?0:-1);};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){FCKUndo.Redo();};FCKRedoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckRedoState()?0:-1);};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none">&nbsp;</span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKVisitLinkCommand=function(){this.Name='VisitLink';};FCKVisitLinkCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState('Unlink');if (A==0){var B=FCKSelection.MoveToAncestorNode('A');if (!B.href) A=-1;};return A;},Execute:function(){var A=FCKSelection.MoveToAncestorNode('A');var B=A.getAttribute('_fcksavedurl')||A.getAttribute('href',2);if (!/:\/\//.test(B)){var C=FCKConfig.BaseHref;var D=FCK.GetInstanceObject('parent');if (!C){C=D.document.location.href;C=C.substring(0,C.lastIndexOf('/')+1);};if (/^\//.test(B)){try{C=C.match(/^.*:\/\/+[^\/]+/)[0];}catch (e){C=D.document.location.protocol+'://'+D.parent.document.location.host;}};B=C+B;};if (!window.open(B,'_blank')) alert(FCKLang.VisitLinkBlocked);}};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}};var FCKDeleteDivCommand=function(){};FCKDeleteDivCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCKSelection.GetParentElement();var B=new FCKElementPath(A);return B.BlockLimit&&B.BlockLimit.nodeName.IEquals('div')?0:-1;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCKDomTools.GetSelectedDivContainers();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();for (var i=0;i<A.length;i++) FCKDomTools.RemoveNode(A[i],true);B.MoveToBookmark(C);B.Select();}};var FCKNbsp=function(){this.Name='Non Breaking Space';};FCKNbsp.prototype={Execute:function(){FCK.InsertHtml('&nbsp;');},GetState:function(){return (FCK.EditMode!=0?-1:0);}};
+var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';if (FCKBrowserInfo.IsIE){try{FCK.EditorDocument.selection.createRange().select();}catch (e){}}else{var C=FCK.EditorWindow.getSelection().focusNode;if (C){if (C.nodeType!=1) C=C.parentNode;FCKDomTools.ScrollIntoView(C,false);}};FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();};
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker!='ieSpell');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;case 'WSC':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','wsc/w.html',530,480);}};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;};
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\n <tr>\n <td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\n <td nowrap width="100%" align="center">'+FCKLang.ColorAutomatic+'</td>\n </tr>\n </table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8;i++,H++){if (H<G.length){var J=G[H].split('/');var K='#'+J[0];var L=J[1]||K;};C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: '+K+'"></div></div>';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';};
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;};
+var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;var H,oEditorScrollPos;if (FCK.EditMode==0){H=new FCKDomRange(FCK.EditorWindow);H.MoveToSelection();oEditorScrollPos=FCKTools.GetScrollPosition(FCK.EditorWindow);}else{var I=FCK.EditingArea.Textarea;H=!FCKBrowserInfo.IsIE&&[I.selectionStart,I.selectionEnd];oEditorScrollPos=[I.scrollLeft,I.scrollTop];};if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var J=FCKTools.GetViewPaneSize(C);B.position="absolute";A.offsetLeft;B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=J.Width+"px";B.height=J.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var K=FCKTools.GetWindowPosition(C,A);if (K.x!=0) B.left=(-1*K.x)+"px";if (K.y!=0) B.top=(-1*K.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();if (FCK.EditMode==0){H.Select();FCK.EditorWindow.scrollTo(oEditorScrollPos.X,oEditorScrollPos.Y);}else{if (!FCKBrowserInfo.IsIE){I.selectionStart=H[0];I.selectionEnd=H[1];};I.scrollLeft=oEditorScrollPos[0];I.scrollTop=oEditorScrollPos[1];}};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';};
+var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i<T.rangeCount;i++) K.push(T.getRangeAt(i));};if (K.length<1) J=false;else{var U=FCKW3CRange.CreateFromRange(A,K.shift());B._Range=U;B._UpdateElementInfo();if (B.StartNode.nodeName.IEquals('td')) B.SetStart(B.StartNode,1);if (B.EndNode.nodeName.IEquals('td')) B.SetEnd(B.EndNode,2);H=new FCKDomRangeIterator(B);H.ForceBrBreak=(C==0);}}};var W=[];while (F.length>0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;i<W.length;i++){var M=W[i];var Z=false;var a=M;while (!Z){a=a.nextSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.firstChild) M.appendChild(a.removeChild(a.firstChild));};Z=false;a=M;while (!Z){a=a.previousSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.lastChild) M.insertBefore(a.removeChild(a.lastChild),M.firstChild);}};FCKDomTools.ClearAllMarkers(G);B.MoveToBookmark(E);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},_ChangeListType:function(A,B,C){var D=FCKDomTools.ListToArray(A.root,B);var E=[];for (var i=0;i<A.contents.length;i++){var F=A.contents[i];F=FCKTools.GetElementAscensor(F,'li');if (!F||F._FCK_ListItem_Processed) continue;E.push(F);FCKDomTools.SetElementMarker(B,F,'_FCK_ListItem_Processed',true);};var G=FCKTools.GetElementDocument(A.root).createElement(this.TagName);for (var i=0;i<E.length;i++){var H=E[i]._FCK_ListArray_Index;D[H].parent=G;};var I=FCKDomTools.ArrayToList(D,B);for (var i=0;i<I.listNode.childNodes.length;i++){if (I.listNode.childNodes[i].nodeName.IEquals(this.TagName)) C.push(I.listNode.childNodes[i]);};A.root.parentNode.replaceChild(I.listNode,A.root);},_CreateList:function(A,B){var C=A.contents;var D=FCKTools.GetElementDocument(A.root);var E=[];if (C.length==1&&C[0]==A.root){var F=D.createElement('div');while (C[0].firstChild) F.appendChild(C[0].removeChild(C[0].firstChild));C[0].appendChild(F);C[0]=F;};var G=A.contents[0].parentNode;for (var i=0;i<C.length;i++) G=FCKDomTools.GetCommonParents(G,C[i].parentNode).pop();for (var i=0;i<C.length;i++){var H=C[i];while (H.parentNode){if (H.parentNode==G){E.push(H);break;};H=H.parentNode;}};if (E.length<1) return;var I=E[E.length-1].nextSibling;var J=D.createElement(this.TagName);B.push(J);while (E.length){var K=E.shift();var L=D.createDocumentFragment();while (K.firstChild) L.appendChild(K.removeChild(K.firstChild));K.parentNode.removeChild(K);var M=D.createElement('li');M.appendChild(L);J.appendChild(M);};G.insertBefore(J,I);},_RemoveList:function(A,B){var C=FCKDomTools.ListToArray(A.root,B);var D=[];for (var i=0;i<A.contents.length;i++){var E=A.contents[i];E=FCKTools.GetElementAscensor(E,'li');if (!E||E._FCK_ListItem_Processed) continue;D.push(E);FCKDomTools.SetElementMarker(B,E,'_FCK_ListItem_Processed',true);};var F=null;for (var i=0;i<D.length;i++){var G=D[i]._FCK_ListArray_Index;C[G].indent=-1;F=G;};for (var i=F+1;i<C.length;i++){if (C[i].indent>C[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}};
+var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}};
+var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i<FCKConfig.IndentClasses.length;i++) this._IndentClassMap[FCKConfig.IndentClasses[i]]=i+1;this._ClassNameRegex=new RegExp('(?:^|\\s+)('+FCKConfig.IndentClasses.join('|')+')(?=$|\\s)');}else this._UseIndentClasses=false;};FCKIndentCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=A.CreateBookmark();var C=FCKDomTools.GetCommonParentNode(A.StartNode||A.StartContainer,A.EndNode||A.EndContainer,['ul','ol']);if (C) this._IndentList(A,C);else this._IndentBlock(A);A.MoveToBookmark(B);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;if (FCKIndentCommand._UseIndentClasses==undefined) FCKIndentCommand._InitIndentModeParameters();var A=FCKSelection.GetBoundaryParentElement(true);var B=FCKSelection.GetBoundaryParentElement(false);var C=FCKDomTools.GetCommonParentNode(A,B,['ul','ol']);if (C){if (this.Name.IEquals('outdent')) return 0;var D=FCKTools.GetElementAscensor(A,'li');if (!D||!D.previousSibling) return -1;return 0;};if (!FCKIndentCommand._UseIndentClasses&&this.Name.IEquals('indent')) return 0;var E=new FCKElementPath(A);var F=E.Block||E.BlockLimit;if (!F) return -1;if (FCKIndentCommand._UseIndentClasses){var G=F.className.match(FCKIndentCommand._ClassNameRegex);var H=0;if (G!=null){G=G[1];H=FCKIndentCommand._IndentClassMap[G];};if ((this.Name=='outdent'&&H==0)||(this.Name=='indent'&&H==FCKConfig.IndentClasses.length)) return -1;return 0;}else{var I=parseInt(F.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;if (I<=0) return -1;return 0;}},_IndentBlock:function(A){var B=new FCKDomRangeIterator(A);B.EnforceRealBlocks=true;A.Expand('block_contents');var C=FCKDomTools.GetCommonParents(A.StartContainer,A.EndContainer);var D=C[C.length-1];var E;while ((E=B.GetNextParagraph())){if (!(E==D||E.parentNode==D)) continue;if (FCKIndentCommand._UseIndentClasses){var F=E.className.match(FCKIndentCommand._ClassNameRegex);var G=0;if (F!=null){F=F[1];G=FCKIndentCommand._IndentClassMap[F];};if (this.Name.IEquals('outdent')) G--;else if (this.Name.IEquals('indent')) G++;G=Math.min(G,FCKConfig.IndentClasses.length);G=Math.max(G,0);var H=E.className.replace(FCKIndentCommand._ClassNameRegex,'');if (G<1) E.className=H;else E.className=(H.length>0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;i<H.length;i++){if (H[i].nodeName.IEquals(['ul','ol'])){B=H[i];break;}};var I=this.Name.IEquals('indent')?1:-1;var J=F[0];var K=F[F.length-1];var L={};var M=FCKDomTools.ListToArray(B,L);var N=M[K._FCK_ListArray_Index].indent;for (var i=J._FCK_ListArray_Index;i<=K._FCK_ListArray_Index;i++) M[i].indent+=I;for (var i=K._FCK_ListArray_Index+1;i<M.length&&M[i].indent>N;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}};
+var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i<I.length;i++){H=I[i];J=FCKDomTools.GetCommonParents(H.parentNode,J).pop();}while (J.nodeName.IEquals('table','tbody','tr','ol','ul')) J=J.parentNode;var L=null;while (I.length>0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;}while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];var P={};while ((H=G.GetNextParagraph())){var Q=null;var R=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){Q=H.parentNode;R=H;break;};H=H.parentNode;};if (Q&&R&&!R._fckblockquotemoveout){O.push(R);FCKDomTools.SetElementMarker(P,R,'_fckblockquotemoveout',true);}};FCKDomTools.ClearAllMarkers(P);var S=[];var T=[],P={};var U=function(N){for (var i=0;i<N.childNodes.length;i++){if (FCKListsLib.BlockElements[N.childNodes[i].nodeName.toLowerCase()]) return false;};return true;};while (O.length>0){var W=O.shift();var N=W.parentNode;if (W==W.parentNode.firstChild) N.parentNode.insertBefore(N.removeChild(W),N);else if (W==W.parentNode.lastChild) N.parentNode.insertBefore(N.removeChild(W),N.nextSibling);else FCKDomTools.BreakParent(W,W.parentNode,B);if (!N._fckbqprocessed){T.push(N);FCKDomTools.SetElementMarker(P,N,'_fckbqprocessed',true);};S.push(W);};for (var i=T.length-1;i>=0;i--){var N=T[i];if (U(N)) FCKDomTools.RemoveNode(N);};FCKDomTools.ClearAllMarkers(P);if (FCKConfig.EnterMode.IEquals('br')){while (S.length){var W=S.shift();var a=true;if (W.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(W).createDocumentFragment();var c=a&&W.previousSibling&&!FCKListsLib.BlockBoundaries[W.previousSibling.nodeName.toLowerCase()];if (a&&c) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));var d=W.nextSibling&&!FCKListsLib.BlockBoundaries[W.nextSibling.nodeName.toLowerCase()];while (W.firstChild) M.appendChild(W.removeChild(W.firstChild));if (d) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));W.parentNode.replaceChild(M,W);a=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i<A.Elements.length;i++){if (A.Elements[i].nodeName.IEquals('blockquote')) return 1;};return 0;}};
+var FCKCoreStyleCommand=function(A){this.Name='CoreStyle';this.StyleName='_FCK_'+A;this.IsActive=false;FCKStyles.AttachStyleStateChange(this.StyleName,this._OnStyleStateChange,this);};FCKCoreStyleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();if (this.IsActive) FCKStyles.RemoveStyle(this.StyleName);else FCKStyles.ApplyStyle(this.StyleName);FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0) return -1;return this.IsActive?1:0;},_OnStyleStateChange:function(A,B){this.IsActive=B;}};
+var FCKRemoveFormatCommand=function(){this.Name='RemoveFormat';};FCKRemoveFormatCommand.prototype={Execute:function(){FCKStyles.RemoveAll();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return FCK.EditorWindow?0:-1;}};
+var FCKCommands=FCK.Commands={};FCKCommands.LoadedCommands={};FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'Bold':case 'Italic':case 'Underline':case 'StrikeThrough':case 'Subscript':case 'Superscript':B=new FCKCoreStyleCommand(A);break;case 'RemoveFormat':B=new FCKRemoveFormatCommand();break;case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,380,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,300);break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'VisitLink':B=new FCKVisitLinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,160);break;case 'AnchorDelete':B=new FCKAnchorDeleteCommand();break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html?UL',370,160);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html?OL',370,160);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',420,330,function(){ return 0;});break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Find');break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Replace');break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,390);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,390);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,290);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',480,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',480,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,240);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'Rule':B=new FCKRuleCommand();break;case 'Nbsp':B=new FCKNbsp();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'Paste':B=new FCKPasteCommand();break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'JustifyLeft':B=new FCKJustifyCommand('left');break;case 'JustifyCenter':B=new FCKJustifyCommand('center');break;case 'JustifyRight':B=new FCKJustifyCommand('right');break;case 'JustifyFull':B=new FCKJustifyCommand('justify');break;case 'Indent':B=new FCKIndentCommand('indent',FCKConfig.IndentLength);break;case 'Outdent':B=new FCKIndentCommand('outdent',FCKConfig.IndentLength*-1);break;case 'Blockquote':B=new FCKBlockQuoteCommand();break;case 'CreateDiv':B=new FCKDialogCommand('CreateDiv',FCKLang.CreateDiv,'dialog/fck_div.html',380,210,null,null,true);break;case 'EditDiv':B=new FCKDialogCommand('EditDiv',FCKLang.EditDiv,'dialog/fck_div.html',380,210,null,null,false);break;case 'DeleteDiv':B=new FCKDeleteDivCommand();break;case 'TableInsertRowAfter':B=new FCKTableCommand('TableInsertRowAfter');break;case 'TableInsertRowBefore':B=new FCKTableCommand('TableInsertRowBefore');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumnAfter':B=new FCKTableCommand('TableInsertColumnAfter');break;case 'TableInsertColumnBefore':B=new FCKTableCommand('TableInsertColumnBefore');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCellAfter':B=new FCKTableCommand('TableInsertCellAfter');break;case 'TableInsertCellBefore':B=new FCKTableCommand('TableInsertCellBefore');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableMergeRight':B=new FCKTableCommand('TableMergeRight');break;case 'TableMergeDown':B=new FCKTableCommand('TableMergeDown');break;case 'TableHorizontalSplitCell':B=new FCKTableCommand('TableHorizontalSplitCell');break;case 'TableVerticalSplitCell':B=new FCKTableCommand('TableVerticalSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,210);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,200);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,200);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,210);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,210);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,190);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,210);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,340);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,390);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Copy':B=new FCKCutCopyCommand(false);break;case 'Cut':B=new FCKCutCopyCommand(true);break;case 'SelectAll':B=new FCKSelectAllCommand();break;case 'InsertOrderedList':B=new FCKListCommand('insertorderedlist','ol');break;case 'InsertUnorderedList':B=new FCKListCommand('insertunorderedlist','ul');break;case 'ShowBlocks':B=new FCKShowBlockCommand('ShowBlocks',FCKConfig.StartupShowBlocks?1:0);break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?0:-1;};FCKCommands.GetBooleanState=function(A){return A?-1:0;};
+var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();var C=this._Window.document;if (FCK_IS_CUSTOM_DOMAIN&&!FCKBrowserInfo.IsIE7){C.domain=FCK_ORIGINAL_DOMAIN;document.domain=FCK_ORIGINAL_DOMAIN;};B=this.Document=this._Popup.document;if (FCK_IS_CUSTOM_DOMAIN){B.domain=FCK_RUNTIME_DOMAIN;C.domain=FCK_RUNTIME_DOMAIN;document.domain=FCK_RUNTIME_DOMAIN;};FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);}else{var D=this._IFrame=this._Window.document.createElement('iframe');FCKTools.ResetStyles(D);D.src='javascript:void(0)';D.allowTransparency=true;D.frameBorder='0';D.scrolling='no';D.style.width=D.style.height='0px';FCKDomTools.SetElementStyles(D,{position:'absolute',zIndex:FCKConfig.FloatingPanelsZIndex});this._Window.document.body.appendChild(D);var E=D.contentWindow;B=this.Document=E.document;var F='';if (FCKBrowserInfo.IsSafari) F='<base href="'+window.document.location+'">';B.open();B.write('<html><head>'+F+'<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.ResizeForSubpanel=function(A,B,C){if (!FCKBrowserInfo.IsIE7) return false;if (!this._Popup.isOpen){this.Subpanel=null;return false;};if (B==0&&C==0){if (this.Subpanel!==A) return false;this.Subpanel=null;this.IncreasedX=0;}else{this.Subpanel=A;if ((this.IncreasedX>=B)&&(this.IncreasedY>=C)) return false;this.IncreasedX=Math.max(this.IncreasedX,B);this.IncreasedY=Math.max(this.IncreasedY,C);};var x=this.ShowRect.x;var w=this.IncreasedX;if (this.IsRTL) x=x-w;var D=this.ShowRect.w+w;var E=Math.max(this.ShowRect.h,this.IncreasedY);if (this.ParentPanel) this.ParentPanel.ResizeForSubpanel(this,D,E);this._Popup.show(x,this.ShowRect.y,D,E,this.RelativeElement);return this.IsRTL;};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (FCKBrowserInfo.IsIE7){if (this.ParentPanel&&this.ParentPanel.ResizeForSubpanel(this,D,E.offsetHeight)){FCKTools.RunFunction(this.Show,this,[x,y,A]);return;}};if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};if (FCKBrowserInfo.IsIE7){this.ShowRect={x:x,y:y,w:D,h:E.offsetHeight};this.IncreasedX=0;this.IncreasedY=0;this.RelativeElement=A;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.style.width=N+'px';M._IFrame.style.height=O+'px';},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.style.width=this._IFrame.style.height='0px';this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;if (this._Popup&&this.ParentPanel&&!A) this.ParentPanel.ResizeForSubpanel(this,0,0);FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;this.RelativeElement=null;};
+var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;};
+var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;};
+var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);};
+var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?'&nbsp;':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0"><tr><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_Text">'+this.Caption+'</td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td></tr></table>';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);};
+var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e<D.length;e++){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D[e],true)){A.SetLabel(F.Label||F.Name);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B;var C;var D;var E=FCK.ToolbarSet.CurrentInstance.Selection;if (E.GetType()=='Control'){B=E.GetSelectedElement();D=B.nodeName.toLowerCase();}else{B=E.GetBoundaryParentElement(true);C=new FCKElementPath(B);};for (var i in A.Items){var F=A.Items[i];var G=F.Style;if ((D&&G.Element==D)||(!D&&G.GetType()!=2)){F.style.display='';if ((C&&G.CheckActive(C))||(!C&&G.CheckElementRemovable(B,true))) A.SelectItem(G.Name);}else F.style.display='none';}};function FCKToolbarStyleCombo_BuildPreview(A,B){var C=A.GetType();var D=[];if (C==0) D.push('<div class="BaseFont">');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'</',E,'>');if (C==0) D.push('</div>');return D.join('');};
+var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=FCKStyles.GetStyle('_FCK_'+E);if (F){F.Label=C[E];A['_FCK_'+E]=F;}else alert("The FCKConfig.CoreStyles['"+E+"'] setting was not found. Please check the fckconfig.js file");};return A;};FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;if (D){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SetLabel(F.Label);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SelectItem(E);return;}}}};
+var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontLabel||'';};FCKToolbarFontsCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_FontFace');if (!A){alert("The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontNames.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Font',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontsCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCKSelection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);for (var i in A.Items){var D=A.Items[i];var E=D.Style;if (E.CheckActive(C)){A.SelectItem(D);return;}}}};
+var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontSizeLabel||'';this.FieldWidth=70;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_Size');if (!A){alert("The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontSizes.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Size',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontSizeCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick=FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick;
+var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;this.RegisterPanel(B);};FCKToolbarPanelButton.prototype.RegisterPanel=function(A){if (A._FCKToolbarPanelButton) return;A._FCKToolbarPanelButton=this;var B=A.Document.body.appendChild(A.Document.createElement('div'));B.style.position='absolute';B.style.top='0px';var C=A._FCKToolbarPanelButtonLineDiv=B.appendChild(A.Document.createElement('IMG'));C.className='TB_ConnectionLine';C.style.position='absolute';C.src=FCK_SPACER_PATH;A.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(A){var B=this._FCKToolbarPanelButton;var e=B._UIButton.MainElement;B._UIButton.ChangeState(1);var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(B.CommandName);var D=C._Panel;D._FCKToolbarPanelButtonLineDiv.style.width=(e.offsetWidth-2)+'px';C.Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var A=this._FCKToolbarPanelButton;A._UIButton.ChangeState(0);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems={};FCKToolbarItems.LoadedItems={};FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,2,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,true,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Blockquote':B=new FCKToolbarButton('Blockquote',FCKLang.Blockquote,null,null,false,true,73);break;case 'CreateDiv':B=new FCKToolbarButton('CreateDiv',FCKLang.CreateDiv,null,null,false,true,74);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'Rule':B=new FCKToolbarButton('Rule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;case 'ShowBlocks':B=new FCKToolbarButton('ShowBlocks',FCKLang.ShowBlocks,null,null,null,true,72);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;};
+var FCKToolbar=function(){this.Items=[];};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(A){var B=A._FCKToolbar;if (B.OnItemClick) B.OnItemClick(B,A);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var e=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;var C=e.insertRow(-1);var D;if (!this.HideStart){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(C.insertCell(-1));};if (!this.HideEnd){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';};
+var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=A.ownerDocument.createElement('div');B.style.clear=B.style.cssFloat=FCKLang.Dir=='rtl'?'right':'left';A.appendChild(B);};
+function FCKToolbarSet_Create(A){var B;var C=A||FCKConfig.ToolbarLocation;switch (C){case 'In':document.getElementById('xToolbarRow').style.display='';B=new FCKToolbarSet(document);break;case 'None':B=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var D;var E=C.match(/^Out:(.+)\((\w+)\)$/);if (E){if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_GetOutElement(window,E);else D=eval('parent.'+E[1]).document.getElementById(E[2]);}else{E=C.match(/^Out:(\w+)$/);if (E) D=parent.document.getElementById(E[1]);};if (!D){alert('Invalid value for "ToolbarLocation"');return arguments.callee('In');};B=D.__FCKToolbarSet;if (B) break;var F=FCKTools.GetElementDocument(D).createElement('iframe');F.src='javascript:void(0)';F.frameBorder=0;F.width='100%';F.height='10';D.appendChild(F);F.unselectable='on';var G=F.contentWindow.document;var H='';if (FCKBrowserInfo.IsSafari) H='<base href="'+window.document.location+'">';G.open();G.write('<html><head>'+H+'<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; window.onresize = window.onload = function(){var timer = null;var lastHeight = -1;var lastChange = 0;var poller = function(){var currentHeight = document.body.scrollHeight || 0;var currentTime = (new Date()).getTime();if (currentHeight != lastHeight){lastChange = currentTime;adjust();lastHeight = document.body.scrollHeight;}if (lastChange < currentTime - 1000) clearInterval(timer);};timer = setInterval(poller, 100);}</script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x<B.length;x++){var C=B[x];if (!C) continue;var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=2) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=2) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==0){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var j=0;j<C.length;j++) C[j].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();};
+var FCKDialog=(function(){var A;var B;var C;var D=window.parent;while (D.parent&&D.parent!=D){try{if (D.parent.document.domain!=document.domain) break;if (D.parent.document.getElementsByTagName('frameset').length>0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var I={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save(true);var J=FCKTools.GetViewPaneSize(D);var K={ 'X':0,'Y':0 };var L=FCKBrowserInfo.IsIE&&(!FCKBrowserInfo.IsIE7||!FCKTools.IsStrictMode(D.document));if (L) K=FCKTools.GetScrollPosition(D);var M=Math.max(K.Y+(J.Height-height-20)/2,0);var N=Math.max(K.X+(J.Width-width-20)/2,0);var O=E.createElement('iframe');FCKTools.ResetStyles(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':(L)?'absolute':'fixed','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=I;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');FCKTools.ResetStyles(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');FCKTools.ResetStyles(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R._fck_originalTabIndex=R.tabIndex;R.tabIndex=-1;},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R.tabIndex=R._fck_originalTabIndex;FCKDomTools.ClearElementJSProperty(R,'_fck_originalTabIndex');},GetCover:function(){return C;}};})();
+var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;};
+var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};function FCKMenuBlock_Item_OnClick(A,B){if (B.Hide) B.Hide();FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuBlock_Item_OnActivate(A){var B=A._ActiveItem;if (B&&B!=this){if (!FCKBrowserInfo.IsIE&&B.HasSubMenu&&!this.HasSubMenu){A._Window.focus();A.Panel.HasFocus=true;};B.Deactivate();};A._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';};
+var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinEditorCSS);FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();};
+var FCKContextMenu=function(A,B){this.CtrlDisable=false;var C=this._Panel=new FCKPanel(A);C.AppendStyleSheet(FCKConfig.SkinEditorCSS);C.IsContextMenu=true;if (FCKBrowserInfo.IsGecko) C.Document.addEventListener('draggesture',function(e) {e.preventDefault();return false;},true);var D=this._MenuBlock=new FCKMenuBlock();D.Panel=C;D.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;if (FCKBrowserInfo.IsOpera&&!('oncontextmenu' in document.createElement('foo'))){this._Document.addEventListener('mousedown',FCKContextMenu_Document_OnMouseDown,false);this._Document.addEventListener('mouseup',FCKContextMenu_Document_OnMouseUp,false);};this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D,E){var F=this._MenuBlock.AddItem(A,B,C,D,E);this._Redraw=true;return F;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){if (FCKConfig.BrowserContextMenu) return true;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,A._FCKContextMenu,A);return false;};A=A.parentNode;};return true;};var FCKContextMenu_OverrideButton;function FCKContextMenu_Document_OnMouseDown(e){if(!e||e.button!=2) return false;if (FCKConfig.BrowserContextMenu) return true;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;var B=FCKContextMenu_OverrideButton;if(!B){var C=FCKTools.GetElementDocument(e.target);B=FCKContextMenu_OverrideButton=C.createElement('input');B.type='button';var D=C.createElement('p');C.body.appendChild(D);D.appendChild(B);};B.style.cssText='position:absolute;top:'+(e.clientY-2)+'px;left:'+(e.clientX-2)+'px;width:5px;height:5px;opacity:0.01';};A=A.parentNode;};return false;};function FCKContextMenu_Document_OnMouseUp(e){if (FCKConfig.BrowserContextMenu) return true;var A=FCKContextMenu_OverrideButton;if (A){var B=A.parentNode;B.parentNode.removeChild(B);FCKContextMenu_OverrideButton=undefined;if(e&&e.button==2){FCKContextMenu_Document_OnContextMenu(e);return false;}};return true;};function FCKContextMenu_AttachedElement_OnContextMenu(A,B,C){if ((B.CtrlDisable&&(A.ctrlKey||A.metaKey))||FCKConfig.BrowserContextMenu) return true;var D=C||this;if (B.OnBeforeOpen) B.OnBeforeOpen.call(B,D);if (B._MenuBlock.Count()==0) return false;if (B._Redraw){B._MenuBlock.Create(B._Panel.MainNode);B._Redraw=false;};FCKTools.DisableSelection(B._Panel.Document.body);var x=0;var y=0;if (FCKBrowserInfo.IsIE){x=A.screenX;y=A.screenY;}else if (FCKBrowserInfo.IsSafari){x=A.clientX;y=A.clientY;}else{x=A.pageX;y=A.pageY;};B._Panel.Show(x,y,A.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(A,B){B._Panel.Hide();FCKTools.RunFunction(B.OnItemClick,B,A);};
+FCK.ContextMenu={};FCK.ContextMenu.Listeners=[];FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var A=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCKLang.Dir);A.CtrlDisable=FCKConfig.BrowserContextMenuOnCtrl;A.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;A.OnItemClick=FCK_ContextMenu_OnItemClick;var B=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) B.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(A){switch (A){case 'Generic':return {AddItems:function(menu,tag,tagName){menu.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==-1);menu.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==-1);menu.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==-1);}};case 'Table':return {AddItems:function(menu,tag,tagName){var B=(tagName=='TABLE');var C=(!B&&FCKSelection.HasAncestorNode('TABLE'));if (C){menu.AddSeparator();var D=menu.AddItem('Cell',FCKLang.CellCM);D.AddItem('TableInsertCellBefore',FCKLang.InsertCellBefore,69);D.AddItem('TableInsertCellAfter',FCKLang.InsertCellAfter,58);D.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);if (FCKBrowserInfo.IsGecko) D.AddItem('TableMergeCells',FCKLang.MergeCells,60,FCKCommands.GetCommand('TableMergeCells').GetState()==-1);else{D.AddItem('TableMergeRight',FCKLang.MergeRight,60,FCKCommands.GetCommand('TableMergeRight').GetState()==-1);D.AddItem('TableMergeDown',FCKLang.MergeDown,60,FCKCommands.GetCommand('TableMergeDown').GetState()==-1);};D.AddItem('TableHorizontalSplitCell',FCKLang.HorizontalSplitCell,61,FCKCommands.GetCommand('TableHorizontalSplitCell').GetState()==-1);D.AddItem('TableVerticalSplitCell',FCKLang.VerticalSplitCell,61,FCKCommands.GetCommand('TableVerticalSplitCell').GetState()==-1);D.AddSeparator();D.AddItem('TableCellProp',FCKLang.CellProperties,57,FCKCommands.GetCommand('TableCellProp').GetState()==-1);menu.AddSeparator();D=menu.AddItem('Row',FCKLang.RowCM);D.AddItem('TableInsertRowBefore',FCKLang.InsertRowBefore,70);D.AddItem('TableInsertRowAfter',FCKLang.InsertRowAfter,62);D.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);menu.AddSeparator();D=menu.AddItem('Column',FCKLang.ColumnCM);D.AddItem('TableInsertColumnBefore',FCKLang.InsertColumnBefore,71);D.AddItem('TableInsertColumnAfter',FCKLang.InsertColumnAfter,64);D.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (B||C){menu.AddSeparator();menu.AddItem('TableDelete',FCKLang.TableDelete);menu.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(menu,tag,tagName){var E=(tagName=='A'||FCKSelection.HasAncestorNode('A'));if (E||FCK.GetNamedCommandState('Unlink')!=-1){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0&&F.href.length==0);if (G) return;menu.AddSeparator();menu.AddItem('VisitLink',FCKLang.VisitLink);menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};case 'DivContainer':return {AddItems:function(menu,tag,tagName){var J=FCKDomTools.GetSelectedDivContainers();if (J.length>0){menu.AddSeparator();menu.AddItem('EditDiv',FCKLang.EditDiv,75);menu.AddItem('DeleteDiv',FCKLang.DeleteDiv,76);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i<C.length;i++) C[i].AddItems(B,A,sTagName);};function FCK_ContextMenu_OnItemClick(A){if (!FCKBrowserInfo.IsIE) FCK.Focus();FCKCommands.GetCommand(A.Name).Execute(A.CustomData);};
+var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};
+var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');};
+var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_ie.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_ie.js
new file mode 100644
index 0000000..95d8ac8
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_ie.js
@@ -0,0 +1,109 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+
+var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2;
+String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;i<A.length;i++){if (this==A[i]) return true;};return false;};String.prototype.IEquals=function(){var A=this.toUpperCase();var B=arguments;if (B.length==1&&B[0].pop) B=B[0];for (var i=0;i<B.length;i++){if (A==B[i].toUpperCase()) return true;};return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};String.prototype.StartsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.EndsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.Trim=function(){return this.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,'');};String.prototype.LTrim=function(){return this.replace(/^[ \t\n\r]*/g,'');};String.prototype.RTrim=function(){return this.replace(/[ \t\n\r]*$/g,'');};String.prototype.ReplaceNewLineChars=function(A){return this.replace(/\n/g,A);};String.prototype.Replace=function(A,B,C){if (typeof B=='function'){return this.replace(A,function(){return B.apply(C||this,arguments);});}else return this.replace(A,B);};Array.prototype.IndexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};
+var FCKIECleanup=function(A){if (A._FCKCleanupObj) this.Items=A._FCKCleanupObj.Items;else{this.Items=[];A._FCKCleanupObj=this;FCKTools.AddEventListenerEx(A,'unload',FCKIECleanup_Cleanup);}};FCKIECleanup.prototype.AddItem=function(A,B){this.Items.push([A,B]);};function FCKIECleanup_Cleanup(){if (!this._FCKCleanupObj||(FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag)) return;var A=this._FCKCleanupObj.Items;while (A.length>0){var B=A.pop();if (B) B[1].call(B[0]);};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();};
+var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false&&(parseInt(s.match(/msie (\d+)/)[1],10)>=7),IsIE6:/*@cc_on!@*/false&&(parseInt(s.match(/msie (\d+)/)[1],10)>=6),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGecko=(navigator.product=='Gecko')&&!A.IsSafari&&!A.IsOpera;A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/rv:(\d+\.\d+)/);var C=B&&parseFloat(B[1]);if (C){A.IsGecko10=(C<1.8);A.IsGecko19=(C>1.8);}}})(FCKBrowserInfo);
+var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i<A.length;i++){var B=A[i].split('=');var C=decodeURIComponent(B[0]);var D=decodeURIComponent(B[1]);FCKURLParams[C]=D;}})();
+var FCKEvents=function(A){this.Owner=A;this._RegisteredEvents={};};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this._RegisteredEvents[A])) this._RegisteredEvents[A]=[B];else{if (C.IndexOf(B)==-1) C.push(B);}};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this._RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++){try{C=(D[i](this.Owner,B)&&C);}catch(e){if (e.number!=-2146823277) throw e;}}};return C;};
+var FCKDataProcessor=function(){};FCKDataProcessor.prototype={ConvertToHtml:function(A){if (FCKConfig.FullPage){FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (!FCKRegexLib.HasBodyTag.test(A)) A='<body>'+A+'</body>';if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&<head><title></title></head>');return A;}else{var B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&FCKConfig.DocType.length>0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title></head><body'+FCKConfig.GetBodyAttributes()+'>'+A+'</body></html>';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}};
+var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;break;case 8:if (E) F=true;break;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i<B.length;i++) B[i](A);};B=FCK.RegisteredDoubleClickHandlers['*'];if (B){for (var i=0;i<B.length;i++) B[i](A);}},RegisterDoubleClickHandler:function(A,B){var C=B||'*';C=C.toUpperCase();var D;if (!(D=FCK.RegisteredDoubleClickHandlers[C])) FCK.RegisteredDoubleClickHandlers[C]=[A];else{if (D.IndexOf(A)==-1) D.push(A);}},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsArea,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'<FCK:$1');C=new RegExp('<\/('+B+')>','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'<FCK:$1 />');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};FCKTempBin.Reset();FCK.Selection.Release();if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1></$2>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"><head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+_FCK_GetEditorAreaStyleTags()+'</head><body'+FCKConfig.GetBodyAttributes()+'>'+FCK.GetXHTML()+'</body></html>';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (FCKBrowserInfo.IsIE) FCKTempBin.ToHtml();if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);C.MoveToSelection();C.DeleteContents();if (FCKListsLib.BlockElements[B]!=null){if (C.StartBlock){if (C.CheckStartOfBlock()) C.MoveToPosition(C.StartBlock,3);else if (C.CheckEndOfBlock()) C.MoveToPosition(C.StartBlock,4);else C.SplitBlock();};C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGeckoLike){if (D) FCKDomTools.ScrollIntoView(D,false);FCKDomTools.ScrollIntoView(A,false);}}else{C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){if (FCKSelection._GetSelectionDocument(FCK.EditorDocument.selection)!=FCK.EditorDocument) return;var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;if (FCKBrowserInfo.IsIE) FCKTempBin.ToElements();FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i<this.Elements.length) this.Elements[i++]=null;this.Elements.length=0;},ToHtml:function(){for (var i=0;i<this.Elements.length;i++){this.Elements[i]='<div>&nbsp;'+this.Elements[i].outerHTML+'</div>';this.Elements[i].isHtml=true;}},ToElements:function(){var A=FCK.EditorDocument.createElement('div');for (var i=0;i<this.Elements.length;i++){if (this.Elements[i].isHtml){A.innerHTML=this.Elements[i];this.Elements[i]=A.firstChild.removeChild(A.firstChild.lastChild);}}}};var FCKFocusManager=FCK.FocusManager={IsLocked:false,AddWindow:function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else if (FCKBrowserInfo.IsSafari) C=A;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);},RemoveWindow:function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);},Lock:function(){this.IsLocked=true;},Unlock:function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;},_ResetTimer:function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){if (FCKFocusManager._IsFocusing) return;FCKFocusManager._IsFocusing=true;FCK.Focus();FCKFocusManager_Win_OnFocus();FCKTools.RunFunction(function(){delete FCKFocusManager._IsFocusing;});};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}};(function(){var A=window.frameElement;var B=A.width;var C=A.height;if (/^\d+$/.test(B)) B+='px';if (/^\d+$/.test(C)) C+='px';var D=A.style;D.border=D.padding=D.margin=0;D.backgroundColor='transparent';D.backgroundImage='none';D.width=B;D.height=C;})();
+FCK.Description="FCKeditor for Internet Explorer 5.5+";FCK._GetBehaviorsStyle=function(){if (!FCK._BehaviorsStyle){var A=FCKConfig.BasePath;var B='';var C;C='<style type="text/css" _fcktemp="true">';if (FCKConfig.ShowBorders) B='url('+A+'css/behaviors/showtableborders.htc)';C+='INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak,.FCK__InputHidden';if (FCKConfig.DisableObjectResizing){C+=',IMG';B+=' url('+A+'css/behaviors/disablehandles.htc)';};C+=' { behavior: url('+A+'css/behaviors/disablehandles.htc) ; }';if (B.length>0) C+='TABLE { behavior: '+B+' ; }';C+='</style>';FCK._BehaviorsStyle=C;};return FCK._BehaviorsStyle;};function Doc_OnMouseUp(){if (FCK.EditorWindow.event.srcElement.tagName=='HTML'){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;}};function Doc_OnPaste(){var A=FCK.EditorDocument.body;A.detachEvent('onpaste',Doc_OnPaste);var B=FCK.Paste(!FCKConfig.ForcePasteAsPlainText&&!FCKConfig.AutoDetectPasteFromWord);A.attachEvent('onpaste',Doc_OnPaste);return B;};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){if (!FCK.IsSelectionChangeLocked&&FCK.EditorDocument) FCK.Events.FireEvent("OnSelectionChange");};function Doc_OnDrop(){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){var A=FCK.EditorWindow.event;if (FCK._CheckIsPastingEnabled()||FCKConfig.ShowDropDialog) FCK.PasteAsPlainText(A.dataTransfer.getData('Text'));A.returnValue=false;A.cancelBubble=true;}};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);this.EditorDocument.body.attachEvent('ondrop',Doc_OnDrop);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);this.EditorDocument.attachEvent("onkeydown",FCK._KeyDownListener);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onbeforedeactivate",function(){ FCKSelection.Save();});this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',Doc_OnMouseDown);};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKSelection.Restore();FCK.EditorWindow.focus();FCKUndo.SaveUndoStep();var B=FCKSelection.GetSelection();if (B.type.toLowerCase()=='control') B.clear();A='<span id="__fakeFCKRemove__" style="display:none;">fakeFCKRemove</span>'+A;B.createRange().pasteHTML(A);FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode(true);FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='<div id="__fakeFCKRemove__">&nbsp;</div>'+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};function FCK_PreloadImages(){var A=new FCKImagePreloader();A.AddImages(FCKConfig.PreloadImages);A.AddImages(FCKConfig.SkinPath+'fck_strip.gif');A.OnComplete=LoadToolbarSetup;A.Start();};function Document_OnContextMenu(){return (event.srcElement._FCKShowContextMenu==true);};document.oncontextmenu=Document_OnContextMenu;function FCK_Cleanup(){this.LinkedField=null;this.EditorWindow=null;this.EditorDocument=null;};FCK._ExecPaste=function(){if (FCK._PasteIsRunning) return true;if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};var A=FCK._CheckIsPastingEnabled(true);if (A===false) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);else{if (FCKConfig.AutoDetectPasteFromWord&&A.length>0){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang.PasteWordConfirm)){FCK.PasteFromWord();return false;}}};FCK._PasteIsRunning=true;FCK.ExecuteNamedCommand('Paste');delete FCK._PasteIsRunning;};return false;};FCK.PasteAsPlainText=function(A){if (!FCK._CheckIsPastingEnabled()){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');return;};var B=null;if (!A) B=clipboardData.getData("Text");else B=A;if (B&&B.length>0){B=FCKTools.HTMLEncode(B);B=FCKTools.ProcessLineBreaks(window,FCKConfig,B);var C=B.search('</p>');var D=B.search('<p>');if ((C!=-1&&D!=-1&&C<D)||(C!=-1&&D==-1)){var E=B.substr(0,C);B=B.substr(C+4);this.InsertHtml(E);};FCKUndo.SaveLocked=true;this.InsertHtml(B);FCKUndo.SaveLocked=false;}};FCK._CheckIsPastingEnabled=function(A){FCK._PasteIsEnabled=false;document.body.attachEvent('onpaste',FCK_CheckPasting_Listener);var B=FCK.GetClipboardHTML();document.body.detachEvent('onpaste',FCK_CheckPasting_Listener);if (FCK._PasteIsEnabled){if (!A) B=true;}else B=false;delete FCK._PasteIsEnabled;return B;};function FCK_CheckPasting_Listener(){FCK._PasteIsEnabled=true;};FCK.GetClipboardHTML=function(){var A=document.getElementById('___FCKHiddenDiv');if (!A){A=document.createElement('DIV');A.id='___FCKHiddenDiv';var B=A.style;B.position='absolute';B.visibility=B.overflow='hidden';B.width=B.height=1;document.body.appendChild(A);};A.innerHTML='';var C=document.body.createTextRange();C.moveToElementText(A);C.execCommand('Paste');var D=A.innerHTML;A.innerHTML='';return D;};FCK.CreateLink=function(A,B){var C=[];FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){if (FCKSelection.GetType()=='Control'){var D=this.EditorDocument.createElement('A');D.href=A;var E=FCKSelection.GetSelectedElement();E.parentNode.insertBefore(D,E);E.parentNode.removeChild(E);D.appendChild(E);return [D];};var F='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',F,false,!!B);var G=this.EditorDocument.links;for (i=0;i<G.length;i++){var D=G[i];if (D.getAttribute('href',2)==F){var I=D.innerHTML;D.href=A;D.innerHTML=I;var J=D.lastChild;if (J&&J.nodeName=='BR'){FCKDomTools.InsertAfterNode(D,D.removeChild(J));};C.push(D);}}};return C;};function _FCK_RemoveDisabledAtt(){this.removeAttribute('disabled');};function Doc_OnMouseDown(A){var e=A.srcElement;if (e.nodeName.IEquals('input')&&e.type.IEquals(['radio','checkbox'])&&!e.disabled){e.disabled=true;FCKTools.SetTimeout(_FCK_RemoveDisabledAtt,1,e);}};
+var FCKConfig=FCK.Config={};if (document.location.protocol=='file:'){FCKConfig.BasePath=decodeURIComponent(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi,'/');var sFullProtocol=document.location.href.match(/^(file\:\/{2,3})/)[1];if (FCKBrowserInfo.IsOpera) sFullProtocol+='localhost/';FCKConfig.BasePath=sFullProtocol+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);}else FCKConfig.BasePath=document.location.protocol+'//'+document.location.host+document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig={};var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=decodeURIComponent(C[0]);var E=decodeURIComponent(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) { }};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.push([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.push(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '<!--{'+B+C+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};var D=new RegExp("(<|&lt;)!--\\{"+this._CodeTag+"(\\d+)\\}--(>|&gt;)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;};
+var FCKDebug={Output:function(){},OutputObject:function(){}};
+var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length<D){B.splitText(D-C.length);A.removeChild(A.firstChild);}};break;}},RTrimNode:function(A){var B;while ((B=A.lastChild)){if (B.nodeType==3){var C=B.nodeValue.RTrim();var D=B.nodeValue.length;if (C.length==0){B.parentNode.removeChild(B);continue;}else if (C.length<D){B.splitText(C.length);A.lastChild.parentNode.removeChild(A.lastChild);}};break;};if (!FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsOpera){B=A.lastChild;if (B&&B.nodeType==1&&B.nodeName.toLowerCase()=='br'){B.parentNode.removeChild(B);}}},RemoveNode:function(A,B){if (B){var C;while ((C=A.firstChild)) A.parentNode.insertBefore(A.removeChild(C),A);};return A.parentNode.removeChild(A);},GetFirstChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.firstChild;while(C){if (C.nodeType==1&&C.tagName.Equals.apply(C.tagName,B)) return C;C=C.nextSibling;};return null;},GetLastChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.lastChild;while(C){if (C.nodeType==1&&(!B||C.tagName.Equals(B))) return C;C=C.previousSibling;};return null;},GetPreviousSourceElement:function(A,B,C,D){if (!A) return null;if (C&&A.nodeType==1&&A.nodeName.IEquals(C)) return null;if (A.previousSibling) A=A.previousSibling;else return this.GetPreviousSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i<C.length;i++){if (C[i]==D[i]) E.push(C[i]);};return E;},GetCommonParentNode:function(A,B,C){var D={};if (!C.pop) C=[C];while (C.length>0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsIE&&B[i].nodeName=='class'){if (A.className.length>0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i<B.length;i++) this.RemoveAttribute(A,B[i]);},GetAttributeValue:function(A,B){var C=B;if (typeof B=='string') B=A.attributes[B];else C=B.nodeName;if (B&&B.specified){if (C=='style') return A.style.cssText;else if (C=='class'||C.indexOf('on')==0) return B.nodeValue;else{return A.getAttribute(C,2);}};return null;},Contains:function(A,B){if (A.contains&&B.nodeType==1) return A.contains(B);while ((B=B.parentNode)){if (B==A) return true;};return false;},BreakParent:function(A,B,C){var D=C||new FCKDomRange(FCKTools.GetElementWindow(A));D.SetStart(A,4);D.SetEnd(B,4);var E=D.ExtractContents();D.InsertNode(A.parentNode.removeChild(A));E.InsertAfterNode(A);D.Release(!!C);},GetNodeAddress:function(A,B){var C=[];while (A&&A!=FCKTools.GetElementDocument(A).documentElement){var D=A.parentNode;var E=-1;for(var i=0;i<D.childNodes.length;i++){var F=D.childNodes[i];if (B===true&&F.nodeType==3&&F.previousSibling&&F.previousSibling.nodeType==3) continue;E++;if (D.childNodes[i]==A) break;};C.unshift(E);A=A.parentNode;};return C;},GetNodeFromAddress:function(A,B,C){var D=A.documentElement;for (var i=0;i<B.length;i++){var E=B[i];if (!C){D=D.childNodes[E];continue;};var F=-1;for (var j=0;j<D.childNodes.length;j++){var G=D.childNodes[j];if (C===true&&G.nodeType==3&&G.previousSibling&&G.previousSibling.nodeType==3) continue;F++;if (F==E){D=G;break;}}};return D;},CloneElement:function(A){A=A.cloneNode(false);A.removeAttribute('id',false);return A;},ClearElementJSProperty:function(A,B){if (FCKBrowserInfo.IsIE) A.removeAttribute(B);else delete A[B];},SetElementMarker:function (A,B,C,D){var E=String(parseInt(Math.random()*0xffffffff,10));B._FCKMarkerId=E;B[C]=D;if (!A[E]) A[E]={ 'element':B,'markers':{} };A[E]['markers'][C]=D;},ClearElementMarkers:function(A,B,C){var D=B._FCKMarkerId;if (!D) return;this.ClearElementJSProperty(B,'_FCKMarkerId');for (var j in A[D]['markers']) this.ClearElementJSProperty(B,j);if (C) delete A[D];},ClearAllMarkers:function(A){for (var i in A) this.ClearElementMarkers(A,A[i]['element'],true);},ListToArray:function(A,B,C,D,E){if (!A.nodeName.IEquals(['ul','ol'])) return [];if (!D) D=0;if (!C) C=[];for (var i=0;i<A.childNodes.length;i++){var F=A.childNodes[i];if (!F.nodeName.IEquals('li')) continue;var G={ 'parent':A,'indent':D,'contents':[] };if (!E){G.grandparent=A.parentNode;if (G.grandparent&&G.grandparent.nodeName.IEquals('li')) G.grandparent=G.grandparent.parentNode;}else G.grandparent=E;if (B) this.SetElementMarker(B,F,'_FCK_ListArray_Index',C.length);C.push(G);for (var j=0;j<F.childNodes.length;j++){var H=F.childNodes[j];if (H.nodeName.IEquals(['ul','ol'])) this.ListToArray(H,B,C,D+1,G.grandparent);else G.contents.push(H);}};return C;},ArrayToList:function(A,B,C){if (C==undefined) C=0;if (!A||A.length<C+1) return null;var D=FCKTools.GetElementDocument(A[C].parent);var E=D.createDocumentFragment();var F=null;var G=C;var H=Math.max(A[C].indent,0);var I=null;while (true){var J=A[G];if (J.indent==H){if (!F||A[G].parent.nodeName!=F.nodeName){F=A[G].parent.cloneNode(false);E.appendChild(F);};I=D.createElement('li');F.appendChild(I);for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));G++;}else if (J.indent==Math.max(H,0)+1){var K=this.ArrayToList(A,null,G);I.appendChild(K.listNode);G=K.nextIndex;}else if (J.indent==-1&&C==0&&J.grandparent){var I;if (J.grandparent.nodeName.IEquals(['ul','ol'])) I=D.createElement('li');else{if (FCKConfig.EnterMode.IEquals(['div','p'])&&!J.grandparent.nodeName.IEquals('td')) I=D.createElement(FCKConfig.EnterMode);else I=D.createDocumentFragment();};for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));if (I.nodeType==11){if (I.lastChild&&I.lastChild.getAttribute&&I.lastChild.getAttribute('type')=='_moz') I.removeChild(I.lastChild);I.appendChild(D.createElement('br'));};if (I.nodeName.IEquals(FCKConfig.EnterMode)&&I.firstChild){this.TrimNode(I);if (FCKListsLib.BlockBoundaries[I.firstChild.nodeName.toLowerCase()]){var M=D.createDocumentFragment();while (I.firstChild) M.appendChild(I.removeChild(I.firstChild));I=M;}};if (FCKBrowserInfo.IsGeckoLike&&I.nodeName.IEquals(['div','p'])) FCKTools.AppendBogusBr(I);E.appendChild(I);F=null;G++;}else return null;if (A.length<=G||Math.max(A[G].indent,0)<H){break;}};if (B){var N=E.firstChild;while (N){if (N.nodeType==1) this.ClearElementMarkers(B,N);N=this.GetNextSourceNode(N);}};return { 'listNode':E,'nextIndex':G };},GetNextSibling:function(A,B){A=A.nextSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.nextSibling;return A;},GetPreviousSibling:function(A,B){A=A.previousSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.previousSibling;return A;},CheckIsEmptyElement:function(A,B){var C=A.firstChild;var D;while (C){if (C.nodeType==1){if (D||!FCKListsLib.InlineNonEmptyElements[C.nodeName.toLowerCase()]) return false;if (!B||B(C)===true) D=C;}else if (C.nodeType==3&&C.nodeValue.length>0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&&currentWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight||0;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10)||0;};var F=FCKTools.GetDocumentPosition(C,A);E+=F.y;var G=FCKTools.GetScrollPosition(C).Y;if (E>0&&(E>G||E<G-D)) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);},GetSelectedDivContainers:function(){var A=[];var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.GetTouchedStartNode();var D=B.GetTouchedEndNode();var E=C;if (C==D){while (D.nodeType==1&&D.lastChild) D=D.lastChild;D=FCKDomTools.GetNextSourceNode(D);}while (E&&E!=D){if (E.nodeType!=3||!/^[ \t\n]*$/.test(E.nodeValue)){var F=new FCKElementPath(E);var G=F.BlockLimit;if (G&&G.nodeName.IEquals('div')&&A.IndexOf(G)==-1) A.push(G);};E=FCKDomTools.GetNextSourceNode(E);};return A;}};
+var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.][^{}]*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i<B.length;i++) C.push(this._AppendStyleSheet(A,B[i]));return C;}};FCKTools.GetStyleHtml=(function(){var A=function(styleDef,markTemp){if (styleDef.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<style type="text/css"'+B+'>'+styleDef+'</style>';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<link href="'+cssFileUrl+'" type="text/css" rel="stylesheet" '+B+'/>';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.][^{}]*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i<cssFileOrArrayOrDef.length;i++) E+=C(cssFileOrArrayOrDef[i],markTemp);return E;}}})();FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){if (A.document) A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&amp;');A=A.replace(/</g,'&lt;');A=A.replace(/>/g,'&gt;');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/&gt;/g,'>');A=A.replace(/&lt;/g,'<');A=A.replace(/&amp;/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="<p>";var H="</p>";var I="<br />";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};var n=B.charAt(i+1);if (n=='\r'){i++;n=B.charAt(i+1);};if (n=='\n'){i++;if (F) E.push(H);E.push(G);F=1;}else E.push(I);}};FCKTools._ProcessLineBreaksForDivMode=function(A,B,C,D,E){var F=0;var G="<div>";var H="</div>";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='div'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F){if (E[E.length-1]==G){E.push("&nbsp;");};E.push(H);};E.push(G);F=1;};if (F) E.push(H);};FCKTools._ProcessLineBreaksForBrMode=function(A,B,C,D,E){var F=0;var G="<br />";var H="";if (C){G="<li>";H="</li>";F=1;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F&&H.length) E.push (H);E.push(G);F=1;}};FCKTools.ProcessLineBreaks=function(A,B,C){var D=B.EnterMode.toLowerCase();var E=[];var F=0;var G=new A.FCKDomRange(A.FCK.EditorWindow);G.MoveToSelection();var H=G._Range.startContainer;while (H&&H.nodeType!=1) H=H.parentNode;if (H&&H.tagName.toLowerCase()=='li') F=1;if (D=='p') this._ProcessLineBreaksForPMode(A,C,F,H,E);else if (D=='div') this._ProcessLineBreaksForDivMode(A,C,F,H,E);else if (D=='br') this._ProcessLineBreaksForBrMode(A,C,F,H,E);return E.join("");};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.IsStrictMode=function(A){return ('CSS1Compat'==(A.compatMode||(FCKBrowserInfo.IsSafari?'CSS1Compat':null)));};FCKTools.ArgumentsToArray=function(A,B,C){B=B||0;C=C||A.length;var D=[];for (var i=B;i<B+C&&i<A.length;i++) D.push(A[i]);return D;};FCKTools.CloneObject=function(A){var B=function() {};B.prototype=A;return new B;};FCKTools.AppendBogusBr=function(A){if (!A) return;var B=this.GetLastItem(A.getElementsByTagName('br'));if (!B||(B.getAttribute('type',2)!='_moz'&&B.getAttribute('_moz_dirty')==null)){var C=this.GetElementDocument(A);if (FCKBrowserInfo.IsOpera) A.appendChild(C.createTextNode(''));else A.appendChild(this.CreateBogusBR(C));}};FCKTools.GetLastItem=function(A){if (A.length>0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i<C.length;i++){var D=C[i];if (A.elements.namedItem(D)){var E=A.elements.namedItem(D);B.push([E,E.nextSibling]);A.removeChild(E);}};return B;};FCKTools.RestoreFormStyles=function(A,B){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return;if (B.length>0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i<A.length;i++){var B=A[i];for (var p in B) o[p]=B[p];};return o;};FCKTools.IsArray=function(A){return (A instanceof Array);};FCKTools.AppendLengthProperty=function(A,B){var C=0;for (var n in A) C++;return A[B||'length']=C;};FCKTools.NormalizeCssText=function(A){var B=document.createElement('span');B.style.cssText=A;return B.style.cssText;};FCKTools.Bind=function(A,B){return function(){ return B.apply(A,arguments);};};FCKTools.GetVoidUrl=function(){if (FCK_IS_CUSTOM_DOMAIN) return "javascript: void( function(){document.open();document.write('<html><head><title></title></head><body></body></html>');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";};FCKTools.ResetStyles=function(A){A.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};
+FCKTools.CancelEvent=function(e){return false;};FCKTools._AppendStyleSheet=function(A,B){return A.createStyleSheet(B).owningElement;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var s=A.createStyleSheet("");s.cssText=B;return s;};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=[];for (var i=0;i<A.all.length;i++){var C=A.all[i].id;if (C&&C.length>0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':if (document.location.protocol!='file:') try { return new XMLHttpRequest();} catch (e) {};B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};return null;};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while ((e=A.all[i++])){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o={};o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=A.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.style.cssText;if (D.length>0){C.Inline=D;A.style.cssText='';};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';A.style.cssText=B.Inline||'';FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));};FCKTools.ToLowerCase=function(A){return A.toLowerCase();};
+var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6.4",VersionBuild : "21629",Instances : window.FCKeditorAPI && window.FCKeditorAPI.Instances || {},GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : window.FCKeditorAPI && window.FCKeditorAPI._FunctionQueue || {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat) window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup);
+var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i<A.length;i++){var B=document.createElement('img');FCKTools.AddEventListenerEx(B,'load',_FCKImagePreloader_OnImage,this);FCKTools.AddEventListenerEx(B,'error',_FCKImagePreloader_OnImage,this);B.src=A[i];_FCKImagePreloader_ImageCache.push(B);}}};var _FCKImagePreloader_ImageCache=[];function _FCKImagePreloader_OnImage(A,B){if ((--B._PreloadCount)==0&&B.OnComplete) B.OnComplete();};
+var FCKRegexLib={AposEntity:/&apos;/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BeforeBody:/(^[\s\S]*\<body[^\>]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HasBodyTag:/<body[\s|>]/i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/,TagBody:/></,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsA:/<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsArea:/<area(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,HtmlDocType:/DTD HTML/,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/};
+var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ 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 },InlineNonEmptyElements:{ a:1,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 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ 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,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }};
+var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if ((E=e[i].getAttribute('fckLang'))){if ((s=FCKLang[E])){if (D) s=FCKTools.HTMLEncode(s);e[i][C]=s;}}}},TranslatePage:function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);this.TranslateElements(A,'LEGEND','innerHTML');},Initialize:function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage={};this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];}};
+var FCKXHtmlEntities={};FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';var B,e;if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'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','\u2308':'lceil','\u2309':'rceil','\u230a':'lfloor','\u230b':'rfloor','\u2329':'lang','\u232a':'rang','â—Š':'loz','â™ ':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','>':'gt','ˆ':'circ','Ëœ':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','â€':'zwj','‎':'lrm','â€':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','â€':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'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'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'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','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={'>':'gt'};A='>';A+=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');};
+var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^<xhtml.*?>/,'<xhtml>');E=E.substr(7,E.length-15).Trim();if (FCKConfig.DocType.length>0&&FCKRegexLib.HtmlDocType.test(FCKConfig.DocType)) E=E.replace(FCKRegexLib.SpaceNoClose,'>');else E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();FCKDomTools.EnforcePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);return E;};FCKXHtml._AppendAttribute=function(A,B,C){try{if (C==undefined||C==null) C='';else if (C.replace){if (FCKConfig.ForceSimpleAmpersand) C=C.replace(/&/g,'___FCKAmp___');C=C.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity);};var D=this.XML.createAttribute(B);D.value=C;A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=B.firstChild;while (D){this._AppendNode(A,D);D=D.nextSibling;};if (C&&B.tagName&&B.tagName.toLowerCase()!='pre'){FCKDomTools.TrimNode(A);if (FCKConfig.FillEmptyBlocks){var E=A.lastChild;if (E&&E.nodeType==1&&E.nodeName=='br') this._AppendEntity(A,this._NbspEntity);}};if (A.childNodes.length==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,this._NbspEntity);return A;};var F=A.nodeName;if (FCKListsLib.InlineChildReqElements[F]) return null;if (!FCKListsLib.EmptyElements[F]) A.appendChild(this.XML.createTextNode(''));};return A;};FCKXHtml._AppendNode=function(A,B){if (!B) return false;switch (B.nodeType){case 1:if (FCKBrowserInfo.IsGecko&&B.tagName.toLowerCase()=='br'&&B.parentNode.tagName.toLowerCase()=='pre'){var C='\r';if (B==B.parentNode.firstChild) C+='\r';return FCKXHtml._AppendNode(A,this.XML.createTextNode(C));};if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&(B.hasAttribute('_moz_editor_bogus_node')||B.getAttribute('type')=='_moz')){if (B.nextSibling) return false;else{B.removeAttribute('_moz_editor_bogus_node');B.removeAttribute('type');}};if (B.getAttribute('_fcktemp')) return false;var D=B.tagName.toLowerCase();if (FCKBrowserInfo.IsIE){if (B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') D=B.scopeName.toLowerCase()+':'+D;}else{if (D.StartsWith('fck:')) D=D.Remove(0,4);};if (!FCKRegexLib.ElementName.test(D)) return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var E=this.XML.createElement(D);FCKXHtml._AppendAttributes(A,B,E,D);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var F=FCKXHtml.TagProcessors[D];if (F) E=F(E,B,A);else E=this._AppendChildNodes(E,B,Boolean(FCKListsLib.NonEmptyBlockElements[D]));if (!E) return false;A.appendChild(E);break;case 3:if (B.parentNode&&B.parentNode.nodeName.IEquals('pre')) return this._AppendTextNode(A,B.nodeValue);return this._AppendTextNode(A,B.nodeValue.ReplaceNewLineChars(' '));case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) {};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+(FCKXHtml.SpecialBlocks.push(A)-1);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){var C=B.length>0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);if (B.style.width) A.removeAttribute('width');if (B.style.height) A.removeAttribute('height');return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol;
+FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes,bHasStyle;for (var n=0;n<E.length;n++){var F=E[n];if (F.specified){var G=F.nodeName.toLowerCase();var H;if (G.StartsWith('_fck')) continue;else if (G=='style'){bHasStyle=true;continue;}else if (G=='class'){H=F.nodeValue.replace(FCKRegexLib.FCK_Class,'');if (H.length==0) continue;}else if (G.indexOf('on')==0) H=F.nodeValue;else if (D=='body'&&G=='contenteditable') continue;else if (F.nodeValue===true) H=G;else{try{H=B.getAttribute(G,2);}catch (e) {}};this._AppendAttribute(C,G,H||F.nodeValue);}};if (bHasStyle||B.style.cssText.length>0){var I=FCKTools.ProtectFormStyles(B);var J=B.style.cssText.replace(FCKRegexLib.StyleProperties,FCKTools.ToLowerCase);FCKTools.RestoreFormStyles(B,I);this._AppendAttribute(C,'style',J);}};FCKXHtml.TagProcessors['div']=function(A,B){if (B.align.length>0) FCKXHtml._AppendAttribute(A,'align',B.align);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);var C=B.attributes['name'];if (C&&C.value.length>0) FCKXHtml._AppendAttribute(A,'name',C.value);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text');return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['map']=function(A,B){if (!A.attributes.getNamedItem('name')){var C=B.name;if (C) FCKXHtml._AppendAttribute(A,'name',C);};A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);}};return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;};
+var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+(FCKCodeFormatter.ProtectedData.push(C)-1)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var j=0;j<FCKCodeFormatter.ProtectedData.length;j++){var F=new RegExp('___FCKpd___'+j);B=B.replace(F,FCKCodeFormatter.ProtectedData[j].replace(/\$/g,'$$$$'));};return B.Trim();};
+var FCKUndo={};FCKUndo.SavedData=[];FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=0;FCKUndo.Changed=false;FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo.SaveLocked=false;FCKUndo._GetBookmark=function(){FCKSelection.Restore();var A=new FCKDomRange(FCK.EditorWindow);try{A.MoveToSelection();}catch (e){return null;};if (FCKBrowserInfo.IsIE){var B=A.CreateBookmark();var C=FCK.EditorDocument.body.innerHTML;A.MoveToBookmark(B);return [B,C];};return A.CreateBookmark2();};FCKUndo._SelectBookmark=function(A){if (!A) return;var B=new FCKDomRange(FCK.EditorWindow);if (A instanceof Object){if (FCKBrowserInfo.IsIE) B.MoveToBookmark(A[0]);else B.MoveToBookmark2(A);try{B.Select();}catch (e){B.MoveToPosition(FCK.EditorDocument.body,4);B.Select();}}};FCKUndo._CompareCursors=function(A,B){for (var i=0;i<Math.min(A.length,B.length);i++){if (A[i]<B[i]) return-1;else if (A[i]>B[i]) return 1;};if (A.length<B.length) return-1;else if (A.length>B.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;};
+var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A='<script>document.domain="'+FCK_RUNTIME_DOMAIN+'";</script>'+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+'&nbsp;'+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='<br type="_moz">';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='<script type="text/javascript" _fcktemp="true">window.onerror=function(){return true;};</script>';H.frameBorder=0;H.style.width=H.style.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A.replace(/<head>/i,'<head>'+I);H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(A.replace(/<head>/i,'<head>'+I));J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;setTimeout(function(){try{K.Window.document.documentElement.doScroll("left");}catch(e){setTimeout(arguments.callee,0);return;};K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);},0);}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;A.body.offsetLeft;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}};
+var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i<arguments.length;i++){var A=arguments[i];if (!A) continue;if (typeof(A[0])=='object') this.SetKeystrokes.apply(this,A);else{if (A.length==1) delete this.Keystrokes[A[0]];else this.Keystrokes[A[0]]=A[1]===true?true:A;}}};function _FCKKeystrokeHandler_OnKeyDown(A,B){var C=A.keyCode||A.which;var D=0;if (A.ctrlKey||A.metaKey) D+=CTRL;if (A.shiftKey) D+=SHIFT;if (A.altKey) D+=ALT;var E=C+D;var F=B._CancelIt=false;var G=B.Keystrokes[E];if (G){if (G===true||!(B.OnKeystroke&&B.OnKeystroke.apply(B,G))) return true;F=true;};if (F||(B.CancelCtrlDefaults&&D==CTRL&&(C<33||C>40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;};
+FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})();
+var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i<I.Elements.length;i++){var O=I.Elements[i];if (this.CheckElementRemovable(O)){if (L&&!FCKDomTools.CheckIsEmptyElement(O,function(el){return (el!=H);})){M=O;N=J.length-1;}else{var P=O.nodeName.toLowerCase();if (P==this.Element){for (var Q in E){if (FCKDomTools.HasAttribute(O,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(O);break;case 'class':if (FCKDomTools.GetAttributeValue(O,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(O,Q);}}}};this._RemoveOverrides(O,F[P]);if (this.GetType()==1) this._RemoveNoAttribElement(O);}}else if (L) J.push(O);L=L&&((K&&!FCKDomTools.GetNextSibling(O))||(!K&&!FCKDomTools.GetPreviousSibling(O)));if (M&&(!L||(i==I.Elements.length-1))){var R=FCKDomTools.RemoveNode(H);for (var j=0;j<=N;j++){var S=FCKDomTools.CloneElement(J[j]);S.appendChild(R);R=S;};if (K) FCKDomTools.InsertAfterNode(M,R);else M.parentNode.insertBefore(R,M);L=false;M=null;}};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);return;};A.Expand('inline_elements');D=A.CreateBookmark(true);var T=A.GetBookmarkNode(D,true);var U=A.GetBookmarkNode(D,false);A.Release(true);var I=new FCKElementPath(T);var X=I.Elements;var O;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(T,O,A);};I=new FCKElementPath(U);X=I.Elements;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;b=O.nodeName.toLowerCase();if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(U,O,A);};var Z=FCKDomTools.GetNextSourceNode(T,true);while (Z){var a=FCKDomTools.GetNextSourceNode(Z);if (Z.nodeType==1){var b=Z.nodeName.toLowerCase();var c=(b==this.Element);if (c){for (var Q in E){if (FCKDomTools.HasAttribute(Z,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(Z);break;case 'class':if (FCKDomTools.GetAttributeValue(Z,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(Z,Q);}}}}else c=!!F[b];if (c){this._RemoveOverrides(Z,F[b]);this._RemoveNoAttribElement(Z);}};if (a==U) break;Z=a;};this._FixBookmarkStart(T);if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},CheckElementRemovable:function(A,B){if (!A) return false;var C=A.nodeName.toLowerCase();if (C==this.Element){if (!B&&!FCKDomTools.HasAttributes(A)) return true;var D=this._GetAttribsForComparison();var E=(D._length==0);for (var F in D){if (F=='_length') continue;if (this._CompareAttributeValues(F,FCKDomTools.GetAttributeValue(A,F),(this.GetFinalAttributeValue(F)||''))){E=true;if (!B) break;}else{E=false;if (B) return false;}};if (E) return true;};var G=this._GetOverridesForComparison()[C];if (G){if (!(D=G.Attributes)) return true;for (var i=0;i<D.length;i++){var H=D[i][0];if (FCKDomTools.HasAttribute(A,H)){var I=D[i][1];if (I==null||(typeof I=='string'&&FCKDomTools.GetAttributeValue(A,H)==I)||I.test(FCKDomTools.GetAttributeValue(A,H))) return true;}}};return false;},CheckActive:function(A){switch (this.GetType()){case 0:return this.CheckElementRemovable(A.Block||A.BlockLimit,true);case 1:var B=A.Elements;for (var i=0;i<B.length;i++){var C=B[i];if (C==A.Block||C==A.BlockLimit) continue;if (this.CheckElementRemovable(C,true)) return true;}};return false;},RemoveFromElement:function(A){var B=this._GetAttribsForComparison();var C=this._GetOverridesForComparison();var D=A.getElementsByTagName(this.Element);for (var i=D.length-1;i>=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i<C.length;i++){var D=C[i][0];if (FCKDomTools.HasAttribute(A,D)){var E=C[i][1];if (E==null||(E.test&&E.test(FCKDomTools.GetAttributeValue(A,D)))||(typeof E=='string'&&FCKDomTools.GetAttributeValue(A,D)==E)) FCKDomTools.RemoveAttribute(A,D);}}}},_RemoveNoAttribElement:function(A){if (!FCKDomTools.HasAttributes(A)){var B=A.firstChild;var C=A.lastChild;FCKDomTools.RemoveNode(A,true);this._MergeSiblings(B);if (B!=C) this._MergeSiblings(C);}},BuildElement:function(A,B){var C=B||A.createElement(this.Element);var D=this._StyleDesc.Attributes;var E;if (D){for (var F in D){E=this.GetFinalAttributeValue(F);if (F.toLowerCase()=='class') C.className=E;else C.setAttribute(F,E);}};if (this._GetStyleText().length>0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return '&nbsp;';else if (offset==0) return new Array(match.length).join('&nbsp;')+' ';else return ' '+new Array(match.length).join('&nbsp;');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'<br>');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join('&nbsp;')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'<br />');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+|&nbsp;)/g,' ');else if (isTag&&value=='<br />') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='<pre>\n'+F.join('')+'</pre>';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_CheckAndMergePre:function(A,B){if (A!=FCKDomTools.GetPreviousSourceElement(B,true)) return;var C=A.innerHTML.replace(/\n$/,'')+'\n\n'+B.innerHTML.replace(/^\n/,'');if (FCKBrowserInfo.IsIE) B.outerHTML='<pre>'+C+'</pre>';else B.innerHTML=C;FCKDomTools.RemoveNode(A);},_CheckAndSplitPre:function(A){var B;var C=A.firstChild;C=C&&C.nextSibling;while (C){var D=C.nextSibling;if (D&&D.nextSibling&&C.nodeName.IEquals('br')&&D.nodeName.IEquals('br')){FCKDomTools.RemoveNode(C);C=D.nextSibling;FCKDomTools.RemoveNode(D);B=FCKDomTools.InsertAfterNode(B||A,FCKDomTools.CloneElement(A));continue;};if (B){C=C.previousSibling;FCKDomTools.MoveNode(C.nextSibling,B);};C=C.nextSibling;}},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H;while((F=E.GetNextParagraph())){var I=this.BuildElement(G);var J=I.nodeName.IEquals('pre');var K=F.nodeName.IEquals('pre');var L=J&&!K;var M=!J&&K;if (L) I=this._ToPre(G,F,I);else if (M) I=this._FromPre(G,F,I);else FCKDomTools.MoveChildren(F,I);F.parentNode.insertBefore(I,F);FCKDomTools.RemoveNode(F);if (J){if (H) this._CheckAndMergePre(H,I);H=I;}else if (M) this._CheckAndSplitPre(I);};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},_ApplyInlineStyle:function(A,B,C){var D=A.Window.document;if (A.CheckIsCollapsed()){var E=this.BuildElement(D);A.InsertNode(E);A.MoveToPosition(E,2);A.Select();return;};var F=this.Element;var G=FCK.DTD[F]||FCK.DTD.span;var H=this._GetAttribsForComparison();var I;A.Expand('inline_elements');var J=A.CreateBookmark(true);var K=A.GetBookmarkNode(J,true);var L=A.GetBookmarkNode(J,false);A.Release(true);var M=FCKDomTools.GetNextSourceNode(K,true);while (M){var N=false;var O=M.nodeType;var P=O==1?M.nodeName.toLowerCase():null;if (!P||G[P]){if ((FCK.DTD[M.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[F]||!FCK.DTD[F]){if (!A.CheckHasRange()) A.SetStart(M,3);if (O!=1||M.childNodes.length==0){var Q=M;var R=Q.parentNode;while (Q==R.lastChild&&G[R.nodeName.toLowerCase()]){Q=R;};A.SetEnd(Q,4);if (Q==Q.parentNode.lastChild&&!G[Q.parentNode.nodeName.toLowerCase()]) N=true;}else{A.SetEnd(M,3);}}else N=true;}else N=true;M=FCKDomTools.GetNextSourceNode(M);if (M==L){M=null;N=true;};if (N&&A.CheckHasRange()&&!A.CheckIsCollapsed()){I=this.BuildElement(D);A.ExtractContents().AppendTo(I);if (I.innerHTML.RTrim().length>0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i<B.length;i++){var C=B[i];var D;var E;var F;if (typeof C=='string') D=C.toLowerCase();else{D=C.Element?C.Element.toLowerCase():this.Element;F=C.Attributes;};E=A[D]||(A[D]={});if (F){var G=(E.Attributes=E.Attributes||[]);for (var H in F){G.push([H.toLowerCase(),F[H]]);}}}};return (this._GetOverridesForComparison_$=A);},_CreateElementAttribsForComparison:function(A){var B={};var C=0;for (var i=0;i<A.attributes.length;i++){var D=A.attributes[i];if (D.specified){B[D.nodeName.toLowerCase()]=FCKDomTools.GetAttributeValue(A,D).toLowerCase();C++;}};B._length=C;return B;},_CheckAttributesMatch:function(A,B){var C=A.attributes;var D=0;for (var i=0;i<C.length;i++){var E=C[i];if (E.specified){var F=E.nodeName.toLowerCase();var G=B[F];if (!G) break;if (G!=FCKDomTools.GetAttributeValue(A,E).toLowerCase()) break;D++;}};return (D==B._length);}};
+var FCKStyles=FCK.Styles={_Callbacks:{},_ObjectStyles:{},ApplyStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){if (A.GetType()==2) A.ApplyToObject(FCKSelection.GetSelectedElement());else A.ApplyToSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},RemoveStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){A.RemoveFromSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},AttachStyleStateChange:function(A,B,C){var D=this._Callbacks[A];if (!D) D=this._Callbacks[A]=[];D.push([B,C]);},CheckSelectionChanges:function(){var A=FCKSelection.GetBoundaryParentElement(true);if (!A) return;var B=new FCKElementPath(A);var C=this.GetStyles();for (var D in C){var E=this._Callbacks[D];if (E){var F=C[D];var G=F.CheckActive(B);if (G!=(F._LastState||null)){F._LastState=G;for (var i=0;i<E.length;i++){var H=E[i][0];var I=E[i][1];H.call(I||window,D,G);}}}}},CheckStyleInSelection:function(A){return false;},_GetRemoveFormatTagsRegex:function (){var A=new RegExp('^(?:'+FCKConfig.RemoveFormatTags.replace(/,/g,'|')+')$','i');return (this._GetRemoveFormatTagsRegex=function(){return A;})&&A;},RemoveAll:function(){var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();if (A.CheckIsCollapsed()) return;A.Expand('inline_elements');var B=A.CreateBookmark(true);var C=A.GetBookmarkNode(B,true);var D=A.GetBookmarkNode(B,false);A.Release(true);var E=this._GetRemoveFormatTagsRegex();var F=new FCKElementPath(C);var G=F.Elements;var H;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;if (E.test(H.nodeName)) FCKDomTools.BreakParent(C,H,A);};F=new FCKElementPath(D);G=F.Elements;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;elementName=H.nodeName.toLowerCase();if (E.test(H.nodeName)) FCKDomTools.BreakParent(D,H,A);};var I=FCKDomTools.GetNextSourceNode(C,true,1);while (I){if (I==D) break;var J=FCKDomTools.GetNextSourceNode(I,false,1);if (E.test(I.nodeName)) FCKDomTools.RemoveNode(I,true);else FCKDomTools.RemoveAttributes(I,FCKConfig.RemoveAttributesArray);I=J;};A.SelectBookmark(B);FCK.Events.FireEvent('OnSelectionChange');},GetStyle:function(A){return this.GetStyles()[A];},GetStyles:function(){var A=this._GetStyles;if (!A){A=this._GetStyles=FCKTools.Merge(this._LoadStylesCore(),this._LoadStylesCustom(),this._LoadStylesXml());};return A;},CheckHasObjectStyle:function(A){return!!this._ObjectStyles[A];},_LoadStylesCore:function(){var A={};var B=FCKConfig.CoreStyles;for (var C in B){var D=A['_FCK_'+C]=new FCKStyle(B[C]);D.IsCore=true;};return A;},_LoadStylesCustom:function(){var A={};var B=FCKConfig.CustomStyles;if (B){for (var C in B){var D=A[C]=new FCKStyle(B[C]);D.Name=C;}};return A;},_LoadStylesXml:function(){var A={};var B=FCKConfig.StylesXmlPath;if (!B||B.length==0) return A;var C=new FCKXml();C.LoadUrl(B);var D=FCKXml.TransformToObject(C.SelectSingleNode('Styles'));var E=D.$Style;if (!E) return A;for (var i=0;i<E.length;i++){var F=E[i];var G=(F.element||'').toLowerCase();if (G.length==0) throw('The element name is required. Error loading "'+B+'"');var H={Element:G,Attributes:{},Styles:{},Overrides:[]};var I=F.$Attribute||[];for (var j=0;j<I.length;j++){H.Attributes[I[j].name]=I[j].value;};var J=F.$Style||[];for (j=0;j<J.length;j++){H.Styles[J[j].name]=J[j].value;};var K=F.$Override;if (K){for (j=0;j<K.length;j++){var L=K[j];var M={Element:L.element};var N=L.$Attribute;if (N){M.Attributes={};for (var k=0;k<N.length;k++){var O=N[k].value||null;if (O){var P=O&&FCKRegexLib.RegExp.exec(O);if (P) O=new RegExp(P[1],P[2]||'');};M.Attributes[N[k].name]=O;}};H.Overrides.push(M);}};var Q=new FCKStyle(H);Q.Name=F.name||G;if (Q.GetType()==2) this._ObjectStyles[G]=true;A[Q.Name]=Q;};return A;}};
+var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}};
+var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i<count;i++){var C=B[i];if (C.nodeType==1&&FCKListsLib.BlockElements[C.nodeName.toLowerCase()]) return true;};return false;};
+var FCKDomRange=function(A){this.Window=A;this._Cache={};};FCKDomRange.prototype={_UpdateElementInfo:function(){var A=this._Range;if (!A) this.Release(true);else{var B=A.startContainer;var C=new FCKElementPath(B);this.StartNode=B.nodeType==3?B:B.childNodes[A.startOffset];this.StartContainer=B;this.StartBlock=C.Block;this.StartBlockLimit=C.BlockLimit;if (A.collapsed){this.EndNode=this.StartNode;this.EndContainer=this.StartContainer;this.EndBlock=this.StartBlock;this.EndBlockLimit=this.StartBlockLimit;}else{var D=A.endContainer;if (B!=D) C=new FCKElementPath(D);var E=D;if (A.endOffset==0){while (E&&!E.previousSibling) E=E.parentNode;if (E) E=E.previousSibling;}else if (E.nodeType==1) E=E.childNodes[A.endOffset-1];this.EndNode=E;this.EndContainer=D;this.EndBlock=C.Block;this.EndBlockLimit=C.BlockLimit;}};this._Cache={};},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;};return null;},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;return false;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while (A&&A.nodeType==1){if (FCKDomTools.CheckIsEditable(A)) B=A;else if (B) break;A=A.firstChild;};if (B) this.MoveToElementStart(B);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(){if (this.CheckIsCollapsed()) return true;var A=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(A);FCKDomTools.TrimNode(A);return (A.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this._Cache;var B=A.IsStartOfBlock;if (B!=undefined) return B;var C=this.StartBlock||this.StartBlockLimit;var D=this._Range.startContainer;var E=this._Range.startOffset;var F;if (E>0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E<G.length){G=G.substr(E);if (G.Trim().length!=0) return this._Cache.IsEndOfBlock=false;}}else F=D.childNodes[E];if (!F) F=FCKDomTools.GetNextSourceNode(D,true,null,C);var H=false;while (F){switch (F.nodeType){case 1:var I=F.nodeName.toLowerCase();if (FCKListsLib.InlineChildReqElements[I]) break;if (I=='br'&&!H){H=true;break;};return this._Cache.IsEndOfBlock=false;case 3:if (F.nodeValue.Trim().length>0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML='&nbsp;';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML='&nbsp;';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3&&D.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;}while (C&&C.nodeType==3&&E.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;}while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;}while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);if (FCKDomTools.CheckIsEmptyElement(D,function(element) { return element.getAttribute('_fck_bookmark')!='true';})&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}};
+FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var A=this.Window.document.selection;if (A.type!='Control'){var B=this._GetSelectionMarkerTag(true);var C=this._GetSelectionMarkerTag(false);if (!B&&!C){this._Range.setStart(this.Window.document.body,0);this._UpdateElementInfo();return;};this._Range.setStart(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);this._Range.setEnd(C.parentNode,FCKDomTools.GetIndexOf(C));C.parentNode.removeChild(C);this._UpdateElementInfo();}else{var D=A.createRange().item(0);if (D){this._Range.setStartBefore(D);this._Range.setEndAfter(D);this._UpdateElementInfo();}}};FCKDomRange.prototype.Select=function(A){if (this._Range) this.SelectBookmark(this.CreateBookmark(true),A);};FCKDomRange.prototype.SelectBookmark=function(A,B){var C=this.CheckIsCollapsed();var D;var E;var F=this.GetBookmarkNode(A,true);if (!F) return;var G;if (!C) G=this.GetBookmarkNode(A,false);var H=this.Window.document.body.createTextRange();H.moveToElementText(F);H.moveStart('character',1);if (G){var I=this.Window.document.body.createTextRange();I.moveToElementText(G);H.setEndPoint('EndToEnd',I);H.moveEnd('character',-1);}else{D=(B||!F.previousSibling||F.previousSibling.nodeName.toLowerCase()=='br')&&!F.nextSibing;E=this.Window.document.createElement('span');E.innerHTML='&#65279;';F.parentNode.insertBefore(E,F);if (D){F.parentNode.insertBefore(this.Window.document.createTextNode('\ufeff'),F);}};if (!this._Range) this._Range=this.CreateRange();this._Range.setStartBefore(F);F.parentNode.removeChild(F);if (C){if (D){H.moveStart('character',-1);H.select();this.Window.document.selection.clear();}else H.select();FCKDomTools.RemoveNode(E);}else{this._Range.setEndBefore(G);G.parentNode.removeChild(G);H.select();}};FCKDomRange.prototype._GetSelectionMarkerTag=function(A){var B=this.Window.document;var C=B.selection;var D;try{D=C.createRange();}catch (e){return null;};if (D.parentElement().document!=B) return null;D.collapse(A===true);var E='fck_dom_range_temp_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000);D.pasteHTML('<span id="'+E+'"></span>');return B.getElementById(E);};
+var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=FCKDomTools.GetNextSourceNode(H,true,null,I)||H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}};
+var FCKDocumentFragment=function(A){this._Document=A;this.RootNode=A.createElement('div');};FCKDocumentFragment.prototype={AppendTo:function(A){FCKDomTools.MoveChildren(this.RootNode,A);},AppendHtml:function(A){var B=this._Document.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){var B=this.RootNode;var C;while((C=B.lastChild)) FCKDomTools.InsertAfterNode(A,B.removeChild(C));}};
+var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i<I.length;i++){topStart=I[i];topEnd=J[i];if (topStart!=topEnd) break;};var K,levelStartNode,levelClone,currentNode,currentSibling;if (B) K=B.RootNode;for (var j=i;j<I.length;j++){levelStartNode=I[j];if (K&&levelStartNode!=C) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==C));currentNode=levelStartNode.nextSibling;while(currentNode){if (currentNode==J[j]||currentNode==D) break;currentSibling=currentNode.nextSibling;if (A==2) K.appendChild(currentNode.cloneNode(true));else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.appendChild(currentNode);};currentNode=currentSibling;};if (K) K=levelClone;};if (B) K=B.RootNode;for (var k=i;k<J.length;k++){levelStartNode=J[k];if (A>0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}};
+var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);this.TabText='';if (D>0||FCKBrowserInfo.IsSafari){while (D--) this.TabText+='\xa0';E.SetKeystrokes([9,'Tab']);};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};if (FCKBrowserInfo.IsIE){var F=FCKDomTools.GetPreviousSourceElement(B.StartNode,true);if (F&&F.nodeName.toLowerCase()=='br'){var G=B.Clone();G.SetStart(F,4);if (G.CheckIsEmpty()){F.parentNode.removeChild(F);return true;}}};var H=B.StartBlock;var I=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&H&&I){if (!C){var J=B.CheckEndOfBlock();B.DeleteContents();if (H!=I){B.SetStart(I,1);B.SetEnd(I,1);};B.Select();A=(H==I);};if (B.CheckStartOfBlock()){var K=B.StartBlock;var L=FCKDomTools.GetPreviousSourceElement(K,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,L,K);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i<len;i++){var L=K.Elements[i];if (L==K.Block||L==K.BlockLimit) break;if (FCKListsLib.InlineChildReqElements[L.nodeName.toLowerCase()]){L=FCKDomTools.CloneElement(L);FCKDomTools.MoveChildren(I,L);I.appendChild(L);}}};if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);C.InsertNode(I);if (FCKBrowserInfo.IsIE){C.MoveToElementEditStart(I);C.Select();};C.MoveToElementEditStart(G&&!H?F:I);};if (FCKBrowserInfo.IsGeckoLike){if (F){var M=this.Window.document.createElement('span');M.innerHTML='&nbsp;';C.InsertNode(M);FCKDomTools.ScrollIntoView(M,false);C.DeleteContents();}else{FCKDomTools.ScrollIntoView(F||I,false);}};C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;var G=false;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{var H;G=E.IEquals('pre');if (G) H=this.Window.document.createTextNode(FCKBrowserInfo.IsIE?'\r':'\n');else H=this.Window.document.createElement('br');B.InsertNode(H);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(H,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(H,4);else B.SetStart(H.nextSibling,1);if (!FCKBrowserInfo.IsIE){var I=null;if (FCKBrowserInfo.IsOpera) I=this.Window.document.createElement('span');else I=this.Window.document.createElement('br');H.parentNode.insertBefore(I,H.nextSibling);FCKDomTools.ScrollIntoView(I,false);I.parentNode.removeChild(I);}};B.Collapse(true);B.Select(G);};B.Release();return true;};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();};FCKEnterKey.prototype._CheckIsAllContentsIncluded=function(A,B){var C=false;var D=false;if (A.StartContainer==B||A.StartContainer==B.firstChild) C=(A._Range.startOffset==0);if (A.EndContainer==B||A.EndContainer==B.lastChild){var E=A.EndContainer.nodeType==3?A.EndContainer.length:A.EndContainer.childNodes.length;D=(A._Range.endOffset==E);};return C&&D;};FCKEnterKey.prototype._FixIESelectAllBug=function(A){var B=this.Window.document;B.body.innerHTML='';var C;if (FCKConfig.EnterMode.IEquals(['div','p'])){C=B.createElement(FCKConfig.EnterMode);B.body.appendChild(C);}else C=B.body;A.MoveToNodeContents(C);A.Collapse(true);A.Select();A.Release();};
+var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.push(A);return A;};FCKDocumentProcessor.Process=function(A){var B=FCK.IsDirty();var C,i=0;while((C=this._Items[i++])) C.ProcessDocument(A);if (!B) FCK.ResetIsDirty();};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCKTools.GetElementDocument(B).createElement('IMG');C.className=A;C.src=FCKConfig.BasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i<A.length;i++) D=A[i](el,D)||D;if (D!=E) FCKTempBin.RemoveElement(E.getAttribute('_fckrealelement'));el.parentNode.replaceChild(D,el);};var F=function(elementName,doc){var G=doc.getElementsByTagName(elementName);for (var i=G.length-1;i>=0;i--) B(G[i]);};var H=function(doc){F('object',doc);F('embed',doc);};return FCKTools.Merge(FCKDocumentProcessor.AppendNew(),{ProcessDocument:function(doc){if (FCKBrowserInfo.IsGecko) FCKTools.RunFunction(H,this,[doc]);else H(doc);},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);});if (FCKBrowserInfo.IsSafari){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByClassName?A.getElementsByClassName('Apple-style-span'):Array.prototype.filter.call(A.getElementsByTagName('span'),function(item){ return item.className=='Apple-style-span';});for (var i=B.length-1;i>=0;i--) FCKDomTools.RemoveNode(B[i],true);}};
+var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}};
+FCKSelection.GetType=function(){try{var A=FCKSelection.GetSelection().type;if (A=='Control'||A=='Text') return A;if (this.GetSelection().createRange().parentElement) return 'Text';}catch(e){};return 'None';};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=this.GetSelection().createRange();if (A&&A.item) return this.GetSelection().createRange().item(0);};return null;};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':var A=FCKSelection.GetSelectedElement();return A?A.parentElement:null;case 'None':return null;default:return this.GetSelection().createRange().parentElement();}};FCKSelection.GetBoundaryParentElement=function(A){switch (this.GetType()){case 'Control':var B=FCKSelection.GetSelectedElement();return B?B.parentElement:null;case 'None':return null;default:var C=FCK.EditorDocument;var D=C.selection.createRange();D.collapse(A!==false);var B=D.parentElement();return FCKTools.GetElementDocument(B)==C?B:null;}};FCKSelection.SelectNode=function(A){FCK.Focus();this.GetSelection().empty();var B;try{B=FCK.EditorDocument.body.createControlRange();B.addElement(A);}catch(e){B=FCK.EditorDocument.body.createTextRange();B.moveToElementText(A);};B.select();};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=this.GetSelection().createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (this.GetSelection().type=="Control"){B=this.GetSelectedElement();}else{var C=this.GetSelection().createRange();B=C.parentElement();}while (B){if (B.nodeName.IEquals(A)) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B,oRange;if (!FCK.EditorDocument) return null;if (this.GetSelection().type=="Control"){oRange=this.GetSelection().createRange();for (i=0;i<oRange.length;i++){if (oRange(i).parentNode){B=oRange(i).parentNode;break;}}}else{oRange=this.GetSelection().createRange();B=oRange.parentElement();}while (B&&!B.nodeName.Equals(A)) B=B.parentNode;return B;};FCKSelection.Delete=function(){var A=this.GetSelection();if (A.type.toLowerCase()!="none"){A.clear();};return A;};FCKSelection.GetSelection=function(){this.Restore();return FCK.EditorDocument.selection;};FCKSelection.Save=function(A){var B=FCK.EditorDocument;if (!B) return;if (this.locked) return;this.locked=!!A;var C=B.selection;var D;if (C){try {D=C.createRange();}catch(e) {};if (D){if (D.parentElement&&FCKTools.GetElementDocument(D.parentElement())!=B) D=null;else if (D.item&&FCKTools.GetElementDocument(D.item(0))!=B) D=null;}};this.SelectionData=D;};FCKSelection._GetSelectionDocument=function(A){var B=A.createRange();if (!B) return null;else if (B.item) return FCKTools.GetElementDocument(B.item(0));else return FCKTools.GetElementDocument(B.parentElement());};FCKSelection.Restore=function(){if (this.SelectionData){FCK.IsSelectionChangeLocked=true;try{if (String(this._GetSelectionDocument(FCK.EditorDocument.selection).body.contentEditable)=='true'){FCK.IsSelectionChangeLocked=false;return;};this.SelectionData.select();}catch (e) {};FCK.IsSelectionChangeLocked=false;}};FCKSelection.Release=function(){this.locked=false;delete this.SelectionData;};
+var FCKTableHandler={};FCKTableHandler.InsertRow=function(A){var B=FCKSelection.MoveToAncestorNode('TR');if (!B) return;var C=B.cloneNode(true);B.parentNode.insertBefore(C,B);FCKTableHandler.ClearRow(A?C:B);};FCKTableHandler.DeleteRows=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();var C=[];for (var i=0;i<B.length;i++){var D=B[i].parentNode;C[D.rowIndex]=D;};for (var i=C.length;i>=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i<D.rows.length;i++){var F=D.rows[i];if (F.cells.length<(E+1)) continue;B=F.cells[E].cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B);var G=F.cells[E];F.insertBefore(B,(A?G:G.nextSibling));}};FCKTableHandler.DeleteColumns=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();for (var i=B.length;i>=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(A.parentNode);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i<A.length;i++) A[i][B]=true;};FCKTableHandler._UnmarkCells=function(A,B){for (var i=0;i<A.length;i++){FCKDomTools.ClearElementJSProperty(A[i],B);}};FCKTableHandler._ReplaceCellsByMarker=function(A,B,C){for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){if (A[i][j][B]) A[i][j]=C;}}};FCKTableHandler._GetMarkerGeometry=function(A,B,C,D){var E=0;var F=0;var G=0;var H=0;for (var i=C;A[B][i]&&A[B][i][D];i++) E++;for (var i=C-1;A[B][i]&&A[B][i][D];i--){E++;G++;};for (var i=B;A[i]&&A[i][C]&&A[i][C][D];i++) F++;for (var i=B-1;A[i]&&A[i][C]&&A[i][C][D];i--){F++;H++;};return { 'width':E,'height':F,'x':G,'y':H };};FCKTableHandler.CheckIsSelectionRectangular=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<1) return false;for (var i=0;i<A.length;i++){if (A[i].parentNode.parentNode!=A[0].parentNode.parentNode) return false;};this._MarkCells(A,'_CellSelected');var B=this._CreateTableMap(A[0]);var C=A[0].parentNode.rowIndex;var D=this._GetCellIndexSpan(B,C,A[0]);var E=this._GetMarkerGeometry(B,C,D,'_CellSelected');var F=D-E.x;var G=C-E.y;if (E.width>=E.height){for (D=F;D<F+E.width;D++){C=G+(D-F) % E.height;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}}else{for (C=G;C<G+E.height;C++){D=F+(C-G) % E.width;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}};this._UnmarkCells(A,'_CellSelected');return true;};FCKTableHandler.MergeCells=function(){var A=this.GetSelectedCells();if (A.length<2) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);this._MarkCells(A,'_SelectedCells');var F=this._GetMarkerGeometry(C,D,E,'_SelectedCells');var G=E-F.x;var H=D-F.y;var I=FCKTools.GetElementDocument(B).createDocumentFragment();for (var i=0;i<F.height;i++){var J=0;for (var j=0;j<F.width;j++){var K=C[H+i][G+j];while (K.childNodes.length>0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCK.EditorDocument.createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCK.EditorDocument.createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCK.EditorDocument.createElement(B.nodeName);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r<D+K;r++){for (var i=I;i<J;i++) C[r][i]=H;}}else{var L=[];for (var i=0;i<C.length;i++){var M=C[i].slice(0,E);if (C[i].length<=E){L.push(M);continue;};if (C[i][E]==B){M.push(B);M.push(FCK.EditorDocument.createElement(B.nodeName));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(M[M.length-1]);}else{M.push(C[i][E]);M.push(C[i][E]);};for (var j=E+1;j<C[i].length;j++) M.push(C[i][j]);L.push(M);};C=L;};this._InstallTableMap(C,B.parentNode.parentNode.parentNode);};FCKTableHandler.VerticalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;var G=B.rowSpan;if (isNaN(G)) G=1;if (G>1){B.rowSpan=Math.ceil(G/2);var H=D+Math.ceil(G/2);var I=C[H];var J=null;for (var i=E+1;i<I.length;i++){if (I[i].parentNode.rowIndex==H){J=I[i];break;}};var K=FCK.EditorDocument.createElement(B.nodeName);K.rowSpan=Math.floor(G/2);if (F>1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);B.parentNode.parentNode.parentNode.rows[H].insertBefore(K,J);}else{var L=B.parentNode.sectionRowIndex+1;var M=FCK.EditorDocument.createElement('tr');var N=B.parentNode.parentNode;if (N.rows.length>L) N.insertBefore(M,N.rows[L]);else N.appendChild(M);for (var i=0;i<C[D].length;){var O=C[D][i].colSpan;if (isNaN(O)||O<1) O=1;if (i==E){i+=O;continue;};var P=C[D][i].rowSpan;if (isNaN(P)) P=1;C[D][i].rowSpan=P+1;i+=O;};var K=FCK.EditorDocument.createElement(B.nodeName);if (F>1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);M.appendChild(K);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCellLocation=function(A,B){for (var i=0;i<A.length;i++){for (var c=0;c<A[i].length;c++){if (A[i][c]==B) return [i,c];}};return null;};FCKTableHandler._CreateTableMap=function(A){var B=(A.nodeName=='TABLE'?A:A.parentNode.parentNode.parentNode);var C=B.rows;var r=-1;var D=[];for (var i=0;i<C.length;i++){r++;if (!D[r]) D[r]=[];var c=-1;for (var j=0;j<C[i].cells.length;j++){var E=C[i].cells[j];c++;while (D[r][c]) c++;var F=isNaN(E.colSpan)?1:E.colSpan;var G=isNaN(E.rowSpan)?1:E.rowSpan;for (var H=0;H<G;H++){if (!D[r+H]) D[r+H]=[];for (var I=0;I<F;I++){D[r+H][c+I]=C[i].cells[j];}};c+=F-1;}};return D;};FCKTableHandler._InstallTableMap=function(A,B){var C=FCKBrowserInfo.IsIE?"_fckrowspan":"rowSpan";for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (D.parentNode) D.parentNode.removeChild(D);D.colSpan=D[C]=1;}};var E=0;for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (!D) continue;if (j>E) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j<A.length;j++){if (!A[j]) continue;var D=A[j][i];if (!D||D._rowScanned===true) continue;if (A[j-1]&&A[j-1][i]==D) D[C]++;if (!A[j+1]||A[j+1][i]!=D) D._rowScanned=true;}};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];FCKDomTools.ClearElementJSProperty(D,'_colScanned');FCKDomTools.ClearElementJSProperty(D,'_rowScanned');}};for (var i=0;i<A.length;i++){var I=FCK.EditorDocument.createElement('tr');for (var j=0;j<A[i].length;){var D=A[i][j];if (A[i-1]&&A[i-1][j]==D){j+=D.colSpan;continue;};I.appendChild(D);if (C!='rowSpan'){D.rowSpan=D[C];D.removeAttribute(C);};j+=D.colSpan;if (D.colSpan==1) D.removeAttribute('colspan');if (D.rowSpan==1) D.removeAttribute('rowspan');};if (FCKBrowserInfo.IsIE){B.rows[i].replaceNode(I);}else{B.rows[i].innerHTML='';FCKDomTools.MoveChildren(I,B.rows[i]);}}};FCKTableHandler._MoveCaretToCell=function (A,B){var C=new FCKDomRange(FCK.EditorWindow);C.MoveToNodeContents(A);C.Collapse(B);C.Select();};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){B[i].innerHTML='';if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B[i]);}};FCKTableHandler.GetMergeRightTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=E+(isNaN(B.colSpan)?1:B.colSpan);var G=C[D][F];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,D,F,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.height!=I.height||H.y!=I.y) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};FCKTableHandler.GetMergeDownTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=D+(isNaN(B.rowSpan)?1:B.rowSpan);if (!C[F]) return null;var G=C[F][E];if (!G) return null;if (B.parentNode.parentNode!=G.parentNode.parentNode) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,F,E,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.width!=I.width||H.x!=I.x) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};
+FCKTableHandler.GetSelectedCells=function(){if (FCKSelection.GetType()=='Control'){var A=FCKSelection.MoveToAncestorNode(['TD','TH']);return A?[A]:[];};var B=[];var C=FCKSelection.GetSelection().createRange();var D=FCKSelection.GetParentElement();if (D&&D.tagName.Equals('TD','TH')) B[0]=D;else{D=FCKSelection.MoveToAncestorNode('TABLE');if (D){for (var i=0;i<D.cells.length;i++){var E=FCK.EditorDocument.body.createTextRange();E.moveToElementText(D.cells[i]);if (C.inRange(E)||(C.compareEndPoints('StartToStart',E)>=0&&C.compareEndPoints('StartToEnd',E)<=0)||(C.compareEndPoints('EndToStart',E)>=0&&C.compareEndPoints('EndToEnd',E)<=0)){B[B.length]=D.cells[i];}}}};return B;};
+var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i<C.length;i++){var D=C[i];B[D.name]=D.value;};var E=A.childNodes;for (i=0;i<E.length;i++){var F=E[i];if (F.nodeType==1){var G='$'+F.nodeName;var H=B[G];if (!H) H=B[G]=[];H.push(this.TransformToObject(F));}};return B;};
+FCKXml.prototype={LoadUrl:function(A){this.Error=false;var B=FCKTools.CreateXmlObject('XmlHttp');if (!B){this.Error=true;return;};B.open("GET",A,false);B.send(null);if (B.status==200||B.status==304||(B.status==0&&B.readyState==4)){this.DOMDocument=B.responseXML;if (!this.DOMDocument||this.DOMDocument.firstChild==null){this.DOMDocument=FCKTools.CreateXmlObject('DOMDocument');this.DOMDocument.async=false;this.DOMDocument.resolveExternals=false;this.DOMDocument.loadXML(B.responseText);}}else{this.DOMDocument=null;};if (this.DOMDocument==null||this.DOMDocument.firstChild==null){this.Error=true;if (window.confirm('Error loading "'+A+'"\r\nDo you want to see more info?')) alert('URL requested: "'+A+'"\r\nServer response:\r\nStatus: '+B.status+'\r\nResponse text:\r\n'+B.responseText);}},SelectNodes:function(A,B){if (this.Error) return [];if (B) return B.selectNodes(A);else return this.DOMDocument.selectNodes(A);},SelectSingleNode:function(A,B){if (this.Error) return null;if (B) return B.selectSingleNode(A);else return this.DOMDocument.selectSingleNode(A);}};
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState(this.Name);};
+var FCKStyleCommand=function(){};FCKStyleCommand.prototype={Name:'Style',Execute:function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) FCK.Styles.RemoveStyle(B.Style);else FCK.Styles.ApplyStyle(B.Style);FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorDocument) return -1;if (FCKSelection.GetType()=='Control'){var A=FCKSelection.GetSelectedElement();if (!A||!FCKStyles.CheckHasObjectStyle(A.nodeName.toLowerCase())) return -1;};return 0;}};
+var FCKDialogCommand=function(A,B,C,D,E,F,G,H){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.CustomValue=H;this.GetStateFunction=F;this.GetStateParam=G;this.Resizable=false;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height,this.CustomValue,null,this.Resizable);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK.EditMode==0?0:-1;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return 0;};var FCKFormatBlockCommand=function(){};FCKFormatBlockCommand.prototype={Name:'FormatBlock',Execute:FCKStyleCommand.prototype.Execute,GetState:function(){return FCK.EditorDocument?0:-1;}};var FCKFontNameCommand=function(){};FCKFontNameCommand.prototype={Name:'FontName',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKFontSizeCommand=function(){};FCKFontSizeCommand.prototype={Name:'FontSize',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};if (typeof(A.submit)=='function') A.submit();else A.submit.click();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetData('');FCKUndo.Typing=true;FCK.Focus();};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){FCKUndo.Undo();};FCKUndoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckUndoState()?0:-1);};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){FCKUndo.Redo();};FCKRedoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckRedoState()?0:-1);};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none">&nbsp;</span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKVisitLinkCommand=function(){this.Name='VisitLink';};FCKVisitLinkCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState('Unlink');if (A==0){var B=FCKSelection.MoveToAncestorNode('A');if (!B.href) A=-1;};return A;},Execute:function(){var A=FCKSelection.MoveToAncestorNode('A');var B=A.getAttribute('_fcksavedurl')||A.getAttribute('href',2);if (!/:\/\//.test(B)){var C=FCKConfig.BaseHref;var D=FCK.GetInstanceObject('parent');if (!C){C=D.document.location.href;C=C.substring(0,C.lastIndexOf('/')+1);};if (/^\//.test(B)){try{C=C.match(/^.*:\/\/+[^\/]+/)[0];}catch (e){C=D.document.location.protocol+'://'+D.parent.document.location.host;}};B=C+B;};if (!window.open(B,'_blank')) alert(FCKLang.VisitLinkBlocked);}};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}};var FCKDeleteDivCommand=function(){};FCKDeleteDivCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCKSelection.GetParentElement();var B=new FCKElementPath(A);return B.BlockLimit&&B.BlockLimit.nodeName.IEquals('div')?0:-1;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCKDomTools.GetSelectedDivContainers();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();for (var i=0;i<A.length;i++) FCKDomTools.RemoveNode(A[i],true);B.MoveToBookmark(C);B.Select();}};var FCKNbsp=function(){this.Name='Non Breaking Space';};FCKNbsp.prototype={Execute:function(){FCK.InsertHtml('&nbsp;');},GetState:function(){return (FCK.EditMode!=0?-1:0);}};
+var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';if (FCKBrowserInfo.IsIE){try{FCK.EditorDocument.selection.createRange().select();}catch (e){}}else{var C=FCK.EditorWindow.getSelection().focusNode;if (C){if (C.nodeType!=1) C=C.parentNode;FCKDomTools.ScrollIntoView(C,false);}};FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();};
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=true;};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;case 'WSC':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','wsc/w.html',530,480);}};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');}};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;};
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\n <tr>\n <td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\n <td nowrap width="100%" align="center">'+FCKLang.ColorAutomatic+'</td>\n </tr>\n </table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8;i++,H++){if (H<G.length){var J=G[H].split('/');var K='#'+J[0];var L=J[1]||K;};C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: '+K+'"></div></div>';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';};
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;};
+var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;var H,oEditorScrollPos;if (FCK.EditMode==0){H=new FCKDomRange(FCK.EditorWindow);H.MoveToSelection();oEditorScrollPos=FCKTools.GetScrollPosition(FCK.EditorWindow);}else{var I=FCK.EditingArea.Textarea;H=!FCKBrowserInfo.IsIE&&[I.selectionStart,I.selectionEnd];oEditorScrollPos=[I.scrollLeft,I.scrollTop];};if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var J=FCKTools.GetViewPaneSize(C);B.position="absolute";A.offsetLeft;B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=J.Width+"px";B.height=J.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var K=FCKTools.GetWindowPosition(C,A);if (K.x!=0) B.left=(-1*K.x)+"px";if (K.y!=0) B.top=(-1*K.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();if (FCK.EditMode==0){H.Select();FCK.EditorWindow.scrollTo(oEditorScrollPos.X,oEditorScrollPos.Y);}else{if (!FCKBrowserInfo.IsIE){I.selectionStart=H[0];I.selectionEnd=H[1];};I.scrollLeft=oEditorScrollPos[0];I.scrollTop=oEditorScrollPos[1];}};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';};
+var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i<T.rangeCount;i++) K.push(T.getRangeAt(i));};if (K.length<1) J=false;else{var U=FCKW3CRange.CreateFromRange(A,K.shift());B._Range=U;B._UpdateElementInfo();if (B.StartNode.nodeName.IEquals('td')) B.SetStart(B.StartNode,1);if (B.EndNode.nodeName.IEquals('td')) B.SetEnd(B.EndNode,2);H=new FCKDomRangeIterator(B);H.ForceBrBreak=(C==0);}}};var W=[];while (F.length>0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;i<W.length;i++){var M=W[i];var Z=false;var a=M;while (!Z){a=a.nextSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.firstChild) M.appendChild(a.removeChild(a.firstChild));};Z=false;a=M;while (!Z){a=a.previousSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.lastChild) M.insertBefore(a.removeChild(a.lastChild),M.firstChild);}};FCKDomTools.ClearAllMarkers(G);B.MoveToBookmark(E);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},_ChangeListType:function(A,B,C){var D=FCKDomTools.ListToArray(A.root,B);var E=[];for (var i=0;i<A.contents.length;i++){var F=A.contents[i];F=FCKTools.GetElementAscensor(F,'li');if (!F||F._FCK_ListItem_Processed) continue;E.push(F);FCKDomTools.SetElementMarker(B,F,'_FCK_ListItem_Processed',true);};var G=FCKTools.GetElementDocument(A.root).createElement(this.TagName);for (var i=0;i<E.length;i++){var H=E[i]._FCK_ListArray_Index;D[H].parent=G;};var I=FCKDomTools.ArrayToList(D,B);for (var i=0;i<I.listNode.childNodes.length;i++){if (I.listNode.childNodes[i].nodeName.IEquals(this.TagName)) C.push(I.listNode.childNodes[i]);};A.root.parentNode.replaceChild(I.listNode,A.root);},_CreateList:function(A,B){var C=A.contents;var D=FCKTools.GetElementDocument(A.root);var E=[];if (C.length==1&&C[0]==A.root){var F=D.createElement('div');while (C[0].firstChild) F.appendChild(C[0].removeChild(C[0].firstChild));C[0].appendChild(F);C[0]=F;};var G=A.contents[0].parentNode;for (var i=0;i<C.length;i++) G=FCKDomTools.GetCommonParents(G,C[i].parentNode).pop();for (var i=0;i<C.length;i++){var H=C[i];while (H.parentNode){if (H.parentNode==G){E.push(H);break;};H=H.parentNode;}};if (E.length<1) return;var I=E[E.length-1].nextSibling;var J=D.createElement(this.TagName);B.push(J);while (E.length){var K=E.shift();var L=D.createDocumentFragment();while (K.firstChild) L.appendChild(K.removeChild(K.firstChild));K.parentNode.removeChild(K);var M=D.createElement('li');M.appendChild(L);J.appendChild(M);};G.insertBefore(J,I);},_RemoveList:function(A,B){var C=FCKDomTools.ListToArray(A.root,B);var D=[];for (var i=0;i<A.contents.length;i++){var E=A.contents[i];E=FCKTools.GetElementAscensor(E,'li');if (!E||E._FCK_ListItem_Processed) continue;D.push(E);FCKDomTools.SetElementMarker(B,E,'_FCK_ListItem_Processed',true);};var F=null;for (var i=0;i<D.length;i++){var G=D[i]._FCK_ListArray_Index;C[G].indent=-1;F=G;};for (var i=F+1;i<C.length;i++){if (C[i].indent>C[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}};
+var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}};
+var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i<FCKConfig.IndentClasses.length;i++) this._IndentClassMap[FCKConfig.IndentClasses[i]]=i+1;this._ClassNameRegex=new RegExp('(?:^|\\s+)('+FCKConfig.IndentClasses.join('|')+')(?=$|\\s)');}else this._UseIndentClasses=false;};FCKIndentCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=A.CreateBookmark();var C=FCKDomTools.GetCommonParentNode(A.StartNode||A.StartContainer,A.EndNode||A.EndContainer,['ul','ol']);if (C) this._IndentList(A,C);else this._IndentBlock(A);A.MoveToBookmark(B);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;if (FCKIndentCommand._UseIndentClasses==undefined) FCKIndentCommand._InitIndentModeParameters();var A=FCKSelection.GetBoundaryParentElement(true);var B=FCKSelection.GetBoundaryParentElement(false);var C=FCKDomTools.GetCommonParentNode(A,B,['ul','ol']);if (C){if (this.Name.IEquals('outdent')) return 0;var D=FCKTools.GetElementAscensor(A,'li');if (!D||!D.previousSibling) return -1;return 0;};if (!FCKIndentCommand._UseIndentClasses&&this.Name.IEquals('indent')) return 0;var E=new FCKElementPath(A);var F=E.Block||E.BlockLimit;if (!F) return -1;if (FCKIndentCommand._UseIndentClasses){var G=F.className.match(FCKIndentCommand._ClassNameRegex);var H=0;if (G!=null){G=G[1];H=FCKIndentCommand._IndentClassMap[G];};if ((this.Name=='outdent'&&H==0)||(this.Name=='indent'&&H==FCKConfig.IndentClasses.length)) return -1;return 0;}else{var I=parseInt(F.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;if (I<=0) return -1;return 0;}},_IndentBlock:function(A){var B=new FCKDomRangeIterator(A);B.EnforceRealBlocks=true;A.Expand('block_contents');var C=FCKDomTools.GetCommonParents(A.StartContainer,A.EndContainer);var D=C[C.length-1];var E;while ((E=B.GetNextParagraph())){if (!(E==D||E.parentNode==D)) continue;if (FCKIndentCommand._UseIndentClasses){var F=E.className.match(FCKIndentCommand._ClassNameRegex);var G=0;if (F!=null){F=F[1];G=FCKIndentCommand._IndentClassMap[F];};if (this.Name.IEquals('outdent')) G--;else if (this.Name.IEquals('indent')) G++;G=Math.min(G,FCKConfig.IndentClasses.length);G=Math.max(G,0);var H=E.className.replace(FCKIndentCommand._ClassNameRegex,'');if (G<1) E.className=H;else E.className=(H.length>0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;i<H.length;i++){if (H[i].nodeName.IEquals(['ul','ol'])){B=H[i];break;}};var I=this.Name.IEquals('indent')?1:-1;var J=F[0];var K=F[F.length-1];var L={};var M=FCKDomTools.ListToArray(B,L);var N=M[K._FCK_ListArray_Index].indent;for (var i=J._FCK_ListArray_Index;i<=K._FCK_ListArray_Index;i++) M[i].indent+=I;for (var i=K._FCK_ListArray_Index+1;i<M.length&&M[i].indent>N;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}};
+var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i<I.length;i++){H=I[i];J=FCKDomTools.GetCommonParents(H.parentNode,J).pop();}while (J.nodeName.IEquals('table','tbody','tr','ol','ul')) J=J.parentNode;var L=null;while (I.length>0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;}while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];var P={};while ((H=G.GetNextParagraph())){var Q=null;var R=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){Q=H.parentNode;R=H;break;};H=H.parentNode;};if (Q&&R&&!R._fckblockquotemoveout){O.push(R);FCKDomTools.SetElementMarker(P,R,'_fckblockquotemoveout',true);}};FCKDomTools.ClearAllMarkers(P);var S=[];var T=[],P={};var U=function(N){for (var i=0;i<N.childNodes.length;i++){if (FCKListsLib.BlockElements[N.childNodes[i].nodeName.toLowerCase()]) return false;};return true;};while (O.length>0){var W=O.shift();var N=W.parentNode;if (W==W.parentNode.firstChild) N.parentNode.insertBefore(N.removeChild(W),N);else if (W==W.parentNode.lastChild) N.parentNode.insertBefore(N.removeChild(W),N.nextSibling);else FCKDomTools.BreakParent(W,W.parentNode,B);if (!N._fckbqprocessed){T.push(N);FCKDomTools.SetElementMarker(P,N,'_fckbqprocessed',true);};S.push(W);};for (var i=T.length-1;i>=0;i--){var N=T[i];if (U(N)) FCKDomTools.RemoveNode(N);};FCKDomTools.ClearAllMarkers(P);if (FCKConfig.EnterMode.IEquals('br')){while (S.length){var W=S.shift();var a=true;if (W.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(W).createDocumentFragment();var c=a&&W.previousSibling&&!FCKListsLib.BlockBoundaries[W.previousSibling.nodeName.toLowerCase()];if (a&&c) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));var d=W.nextSibling&&!FCKListsLib.BlockBoundaries[W.nextSibling.nodeName.toLowerCase()];while (W.firstChild) M.appendChild(W.removeChild(W.firstChild));if (d) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));W.parentNode.replaceChild(M,W);a=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i<A.Elements.length;i++){if (A.Elements[i].nodeName.IEquals('blockquote')) return 1;};return 0;}};
+var FCKCoreStyleCommand=function(A){this.Name='CoreStyle';this.StyleName='_FCK_'+A;this.IsActive=false;FCKStyles.AttachStyleStateChange(this.StyleName,this._OnStyleStateChange,this);};FCKCoreStyleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();if (this.IsActive) FCKStyles.RemoveStyle(this.StyleName);else FCKStyles.ApplyStyle(this.StyleName);FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0) return -1;return this.IsActive?1:0;},_OnStyleStateChange:function(A,B){this.IsActive=B;}};
+var FCKRemoveFormatCommand=function(){this.Name='RemoveFormat';};FCKRemoveFormatCommand.prototype={Execute:function(){FCKStyles.RemoveAll();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return FCK.EditorWindow?0:-1;}};
+var FCKCommands=FCK.Commands={};FCKCommands.LoadedCommands={};FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'Bold':case 'Italic':case 'Underline':case 'StrikeThrough':case 'Subscript':case 'Superscript':B=new FCKCoreStyleCommand(A);break;case 'RemoveFormat':B=new FCKRemoveFormatCommand();break;case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,380,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,300);break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'VisitLink':B=new FCKVisitLinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,160);break;case 'AnchorDelete':B=new FCKAnchorDeleteCommand();break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html?UL',370,160);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html?OL',370,160);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',420,330,function(){ return 0;});break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Find');break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Replace');break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,390);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,390);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,290);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',480,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',480,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,240);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'Rule':B=new FCKRuleCommand();break;case 'Nbsp':B=new FCKNbsp();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'Paste':B=new FCKPasteCommand();break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'JustifyLeft':B=new FCKJustifyCommand('left');break;case 'JustifyCenter':B=new FCKJustifyCommand('center');break;case 'JustifyRight':B=new FCKJustifyCommand('right');break;case 'JustifyFull':B=new FCKJustifyCommand('justify');break;case 'Indent':B=new FCKIndentCommand('indent',FCKConfig.IndentLength);break;case 'Outdent':B=new FCKIndentCommand('outdent',FCKConfig.IndentLength*-1);break;case 'Blockquote':B=new FCKBlockQuoteCommand();break;case 'CreateDiv':B=new FCKDialogCommand('CreateDiv',FCKLang.CreateDiv,'dialog/fck_div.html',380,210,null,null,true);break;case 'EditDiv':B=new FCKDialogCommand('EditDiv',FCKLang.EditDiv,'dialog/fck_div.html',380,210,null,null,false);break;case 'DeleteDiv':B=new FCKDeleteDivCommand();break;case 'TableInsertRowAfter':B=new FCKTableCommand('TableInsertRowAfter');break;case 'TableInsertRowBefore':B=new FCKTableCommand('TableInsertRowBefore');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumnAfter':B=new FCKTableCommand('TableInsertColumnAfter');break;case 'TableInsertColumnBefore':B=new FCKTableCommand('TableInsertColumnBefore');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCellAfter':B=new FCKTableCommand('TableInsertCellAfter');break;case 'TableInsertCellBefore':B=new FCKTableCommand('TableInsertCellBefore');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableMergeRight':B=new FCKTableCommand('TableMergeRight');break;case 'TableMergeDown':B=new FCKTableCommand('TableMergeDown');break;case 'TableHorizontalSplitCell':B=new FCKTableCommand('TableHorizontalSplitCell');break;case 'TableVerticalSplitCell':B=new FCKTableCommand('TableVerticalSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,210);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,200);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,200);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,210);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,210);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,190);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,210);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,340);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,390);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Copy':B=new FCKCutCopyCommand(false);break;case 'Cut':B=new FCKCutCopyCommand(true);break;case 'SelectAll':B=new FCKSelectAllCommand();break;case 'InsertOrderedList':B=new FCKListCommand('insertorderedlist','ol');break;case 'InsertUnorderedList':B=new FCKListCommand('insertunorderedlist','ul');break;case 'ShowBlocks':B=new FCKShowBlockCommand('ShowBlocks',FCKConfig.StartupShowBlocks?1:0);break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?0:-1;};FCKCommands.GetBooleanState=function(A){return A?-1:0;};
+var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();var C=this._Window.document;if (FCK_IS_CUSTOM_DOMAIN&&!FCKBrowserInfo.IsIE7){C.domain=FCK_ORIGINAL_DOMAIN;document.domain=FCK_ORIGINAL_DOMAIN;};B=this.Document=this._Popup.document;if (FCK_IS_CUSTOM_DOMAIN){B.domain=FCK_RUNTIME_DOMAIN;C.domain=FCK_RUNTIME_DOMAIN;document.domain=FCK_RUNTIME_DOMAIN;};FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);}else{var D=this._IFrame=this._Window.document.createElement('iframe');FCKTools.ResetStyles(D);D.src='javascript:void(0)';D.allowTransparency=true;D.frameBorder='0';D.scrolling='no';D.style.width=D.style.height='0px';FCKDomTools.SetElementStyles(D,{position:'absolute',zIndex:FCKConfig.FloatingPanelsZIndex});this._Window.document.body.appendChild(D);var E=D.contentWindow;B=this.Document=E.document;var F='';if (FCKBrowserInfo.IsSafari) F='<base href="'+window.document.location+'">';B.open();B.write('<html><head>'+F+'<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.ResizeForSubpanel=function(A,B,C){if (!FCKBrowserInfo.IsIE7) return false;if (!this._Popup.isOpen){this.Subpanel=null;return false;};if (B==0&&C==0){if (this.Subpanel!==A) return false;this.Subpanel=null;this.IncreasedX=0;}else{this.Subpanel=A;if ((this.IncreasedX>=B)&&(this.IncreasedY>=C)) return false;this.IncreasedX=Math.max(this.IncreasedX,B);this.IncreasedY=Math.max(this.IncreasedY,C);};var x=this.ShowRect.x;var w=this.IncreasedX;if (this.IsRTL) x=x-w;var D=this.ShowRect.w+w;var E=Math.max(this.ShowRect.h,this.IncreasedY);if (this.ParentPanel) this.ParentPanel.ResizeForSubpanel(this,D,E);this._Popup.show(x,this.ShowRect.y,D,E,this.RelativeElement);return this.IsRTL;};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (FCKBrowserInfo.IsIE7){if (this.ParentPanel&&this.ParentPanel.ResizeForSubpanel(this,D,E.offsetHeight)){FCKTools.RunFunction(this.Show,this,[x,y,A]);return;}};if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};if (FCKBrowserInfo.IsIE7){this.ShowRect={x:x,y:y,w:D,h:E.offsetHeight};this.IncreasedX=0;this.IncreasedY=0;this.RelativeElement=A;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.style.width=N+'px';M._IFrame.style.height=O+'px';},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.style.width=this._IFrame.style.height='0px';this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;if (this._Popup&&this.ParentPanel&&!A) this.ParentPanel.ResizeForSubpanel(this,0,0);FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;this.RelativeElement=null;};
+var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;};
+var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;};
+var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);};
+var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?'&nbsp;':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0"><tr><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_Text">'+this.Caption+'</td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td></tr></table>';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);};
+var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e<D.length;e++){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D[e],true)){A.SetLabel(F.Label||F.Name);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B;var C;var D;var E=FCK.ToolbarSet.CurrentInstance.Selection;if (E.GetType()=='Control'){B=E.GetSelectedElement();D=B.nodeName.toLowerCase();}else{B=E.GetBoundaryParentElement(true);C=new FCKElementPath(B);};for (var i in A.Items){var F=A.Items[i];var G=F.Style;if ((D&&G.Element==D)||(!D&&G.GetType()!=2)){F.style.display='';if ((C&&G.CheckActive(C))||(!C&&G.CheckElementRemovable(B,true))) A.SelectItem(G.Name);}else F.style.display='none';}};function FCKToolbarStyleCombo_BuildPreview(A,B){var C=A.GetType();var D=[];if (C==0) D.push('<div class="BaseFont">');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'</',E,'>');if (C==0) D.push('</div>');return D.join('');};
+var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=FCKStyles.GetStyle('_FCK_'+E);if (F){F.Label=C[E];A['_FCK_'+E]=F;}else alert("The FCKConfig.CoreStyles['"+E+"'] setting was not found. Please check the fckconfig.js file");};return A;};FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;if (D){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SetLabel(F.Label);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SelectItem(E);return;}}}};
+var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontLabel||'';};FCKToolbarFontsCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_FontFace');if (!A){alert("The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontNames.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Font',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontsCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCKSelection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);for (var i in A.Items){var D=A.Items[i];var E=D.Style;if (E.CheckActive(C)){A.SelectItem(D);return;}}}};
+var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontSizeLabel||'';this.FieldWidth=70;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_Size');if (!A){alert("The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontSizes.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Size',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontSizeCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick=FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick;
+var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;this.RegisterPanel(B);};FCKToolbarPanelButton.prototype.RegisterPanel=function(A){if (A._FCKToolbarPanelButton) return;A._FCKToolbarPanelButton=this;var B=A.Document.body.appendChild(A.Document.createElement('div'));B.style.position='absolute';B.style.top='0px';var C=A._FCKToolbarPanelButtonLineDiv=B.appendChild(A.Document.createElement('IMG'));C.className='TB_ConnectionLine';C.style.position='absolute';C.src=FCK_SPACER_PATH;A.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(A){var B=this._FCKToolbarPanelButton;var e=B._UIButton.MainElement;B._UIButton.ChangeState(1);var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(B.CommandName);var D=C._Panel;D._FCKToolbarPanelButtonLineDiv.style.width=(e.offsetWidth-2)+'px';C.Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var A=this._FCKToolbarPanelButton;A._UIButton.ChangeState(0);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems={};FCKToolbarItems.LoadedItems={};FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,2,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,true,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Blockquote':B=new FCKToolbarButton('Blockquote',FCKLang.Blockquote,null,null,false,true,73);break;case 'CreateDiv':B=new FCKToolbarButton('CreateDiv',FCKLang.CreateDiv,null,null,false,true,74);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'Rule':B=new FCKToolbarButton('Rule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;case 'ShowBlocks':B=new FCKToolbarButton('ShowBlocks',FCKLang.ShowBlocks,null,null,null,true,72);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;};
+var FCKToolbar=function(){this.Items=[];};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(A){var B=A._FCKToolbar;if (B.OnItemClick) B.OnItemClick(B,A);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var e=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;var C=e.insertRow(-1);var D;if (!this.HideStart){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(C.insertCell(-1));};if (!this.HideEnd){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';};
+var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A).createElement('div');B.className='TB_Break';B.style.clear=FCKLang.Dir=='rtl'?'left':'right';A.appendChild(B);};
+function FCKToolbarSet_Create(A){var B;var C=A||FCKConfig.ToolbarLocation;switch (C){case 'In':document.getElementById('xToolbarRow').style.display='';B=new FCKToolbarSet(document);break;case 'None':B=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var D;var E=C.match(/^Out:(.+)\((\w+)\)$/);if (E){if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_GetOutElement(window,E);else D=eval('parent.'+E[1]).document.getElementById(E[2]);}else{E=C.match(/^Out:(\w+)$/);if (E) D=parent.document.getElementById(E[1]);};if (!D){alert('Invalid value for "ToolbarLocation"');return arguments.callee('In');};B=D.__FCKToolbarSet;if (B) break;var F=FCKTools.GetElementDocument(D).createElement('iframe');F.src='javascript:void(0)';F.frameBorder=0;F.width='100%';F.height='10';D.appendChild(F);F.unselectable='on';var G=F.contentWindow.document;var H='';if (FCKBrowserInfo.IsSafari) H='<base href="'+window.document.location+'">';G.open();G.write('<html><head>'+H+'<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; window.onresize = window.onload = function(){var timer = null;var lastHeight = -1;var lastChange = 0;var poller = function(){var currentHeight = document.body.scrollHeight || 0;var currentTime = (new Date()).getTime();if (currentHeight != lastHeight){lastChange = currentTime;adjust();lastHeight = document.body.scrollHeight;}if (lastChange < currentTime - 1000) clearInterval(timer);};timer = setInterval(poller, 100);}</script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x<B.length;x++){var C=B[x];if (!C) continue;var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=2) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=2) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==0){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var j=0;j<C.length;j++) C[j].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();};
+var FCKDialog=(function(){var A;var B;var C;var D=window.parent;while (D.parent&&D.parent!=D){try{if (D.parent.document.domain!=document.domain) break;if (D.parent.document.getElementsByTagName('frameset').length>0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var I={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save(true);var J=FCKTools.GetViewPaneSize(D);var K={ 'X':0,'Y':0 };var L=FCKBrowserInfo.IsIE&&(!FCKBrowserInfo.IsIE7||!FCKTools.IsStrictMode(D.document));if (L) K=FCKTools.GetScrollPosition(D);var M=Math.max(K.Y+(J.Height-height-20)/2,0);var N=Math.max(K.X+(J.Width-width-20)/2,0);var O=E.createElement('iframe');FCKTools.ResetStyles(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':(L)?'absolute':'fixed','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=I;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');FCKTools.ResetStyles(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');FCKTools.ResetStyles(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R._fck_originalTabIndex=R.tabIndex;R.tabIndex=-1;},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R.tabIndex=R._fck_originalTabIndex;FCKDomTools.ClearElementJSProperty(R,'_fck_originalTabIndex');},GetCover:function(){return C;}};})();
+var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;};
+var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};function FCKMenuBlock_Item_OnClick(A,B){if (B.Hide) B.Hide();FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuBlock_Item_OnActivate(A){var B=A._ActiveItem;if (B&&B!=this){if (!FCKBrowserInfo.IsIE&&B.HasSubMenu&&!this.HasSubMenu){A._Window.focus();A.Panel.HasFocus=true;};B.Deactivate();};A._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';};
+var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinEditorCSS);FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();};
+var FCKContextMenu=function(A,B){this.CtrlDisable=false;var C=this._Panel=new FCKPanel(A);C.AppendStyleSheet(FCKConfig.SkinEditorCSS);C.IsContextMenu=true;if (FCKBrowserInfo.IsGecko) C.Document.addEventListener('draggesture',function(e) {e.preventDefault();return false;},true);var D=this._MenuBlock=new FCKMenuBlock();D.Panel=C;D.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;if (FCKBrowserInfo.IsOpera&&!('oncontextmenu' in document.createElement('foo'))){this._Document.addEventListener('mousedown',FCKContextMenu_Document_OnMouseDown,false);this._Document.addEventListener('mouseup',FCKContextMenu_Document_OnMouseUp,false);};this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D,E){var F=this._MenuBlock.AddItem(A,B,C,D,E);this._Redraw=true;return F;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){if (FCKConfig.BrowserContextMenu) return true;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,A._FCKContextMenu,A);return false;};A=A.parentNode;};return true;};var FCKContextMenu_OverrideButton;function FCKContextMenu_Document_OnMouseDown(e){if(!e||e.button!=2) return false;if (FCKConfig.BrowserContextMenu) return true;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;var B=FCKContextMenu_OverrideButton;if(!B){var C=FCKTools.GetElementDocument(e.target);B=FCKContextMenu_OverrideButton=C.createElement('input');B.type='button';var D=C.createElement('p');C.body.appendChild(D);D.appendChild(B);};B.style.cssText='position:absolute;top:'+(e.clientY-2)+'px;left:'+(e.clientX-2)+'px;width:5px;height:5px;opacity:0.01';};A=A.parentNode;};return false;};function FCKContextMenu_Document_OnMouseUp(e){if (FCKConfig.BrowserContextMenu) return true;var A=FCKContextMenu_OverrideButton;if (A){var B=A.parentNode;B.parentNode.removeChild(B);FCKContextMenu_OverrideButton=undefined;if(e&&e.button==2){FCKContextMenu_Document_OnContextMenu(e);return false;}};return true;};function FCKContextMenu_AttachedElement_OnContextMenu(A,B,C){if ((B.CtrlDisable&&(A.ctrlKey||A.metaKey))||FCKConfig.BrowserContextMenu) return true;var D=C||this;if (B.OnBeforeOpen) B.OnBeforeOpen.call(B,D);if (B._MenuBlock.Count()==0) return false;if (B._Redraw){B._MenuBlock.Create(B._Panel.MainNode);B._Redraw=false;};FCKTools.DisableSelection(B._Panel.Document.body);var x=0;var y=0;if (FCKBrowserInfo.IsIE){x=A.screenX;y=A.screenY;}else if (FCKBrowserInfo.IsSafari){x=A.clientX;y=A.clientY;}else{x=A.pageX;y=A.pageY;};B._Panel.Show(x,y,A.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(A,B){B._Panel.Hide();FCKTools.RunFunction(B.OnItemClick,B,A);};
+FCK.ContextMenu={};FCK.ContextMenu.Listeners=[];FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var A=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCKLang.Dir);A.CtrlDisable=FCKConfig.BrowserContextMenuOnCtrl;A.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;A.OnItemClick=FCK_ContextMenu_OnItemClick;var B=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) B.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(A){switch (A){case 'Generic':return {AddItems:function(menu,tag,tagName){menu.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==-1);menu.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==-1);menu.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==-1);}};case 'Table':return {AddItems:function(menu,tag,tagName){var B=(tagName=='TABLE');var C=(!B&&FCKSelection.HasAncestorNode('TABLE'));if (C){menu.AddSeparator();var D=menu.AddItem('Cell',FCKLang.CellCM);D.AddItem('TableInsertCellBefore',FCKLang.InsertCellBefore,69);D.AddItem('TableInsertCellAfter',FCKLang.InsertCellAfter,58);D.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);if (FCKBrowserInfo.IsGecko) D.AddItem('TableMergeCells',FCKLang.MergeCells,60,FCKCommands.GetCommand('TableMergeCells').GetState()==-1);else{D.AddItem('TableMergeRight',FCKLang.MergeRight,60,FCKCommands.GetCommand('TableMergeRight').GetState()==-1);D.AddItem('TableMergeDown',FCKLang.MergeDown,60,FCKCommands.GetCommand('TableMergeDown').GetState()==-1);};D.AddItem('TableHorizontalSplitCell',FCKLang.HorizontalSplitCell,61,FCKCommands.GetCommand('TableHorizontalSplitCell').GetState()==-1);D.AddItem('TableVerticalSplitCell',FCKLang.VerticalSplitCell,61,FCKCommands.GetCommand('TableVerticalSplitCell').GetState()==-1);D.AddSeparator();D.AddItem('TableCellProp',FCKLang.CellProperties,57,FCKCommands.GetCommand('TableCellProp').GetState()==-1);menu.AddSeparator();D=menu.AddItem('Row',FCKLang.RowCM);D.AddItem('TableInsertRowBefore',FCKLang.InsertRowBefore,70);D.AddItem('TableInsertRowAfter',FCKLang.InsertRowAfter,62);D.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);menu.AddSeparator();D=menu.AddItem('Column',FCKLang.ColumnCM);D.AddItem('TableInsertColumnBefore',FCKLang.InsertColumnBefore,71);D.AddItem('TableInsertColumnAfter',FCKLang.InsertColumnAfter,64);D.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (B||C){menu.AddSeparator();menu.AddItem('TableDelete',FCKLang.TableDelete);menu.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(menu,tag,tagName){var E=(tagName=='A'||FCKSelection.HasAncestorNode('A'));if (E||FCK.GetNamedCommandState('Unlink')!=-1){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0&&F.href.length==0);if (G) return;menu.AddSeparator();menu.AddItem('VisitLink',FCKLang.VisitLink);menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};case 'DivContainer':return {AddItems:function(menu,tag,tagName){var J=FCKDomTools.GetSelectedDivContainers();if (J.length>0){menu.AddSeparator();menu.AddItem('EditDiv',FCKLang.EditDiv,75);menu.AddItem('DeleteDiv',FCKLang.DeleteDiv,76);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i<C.length;i++) C[i].AddItems(B,A,sTagName);};function FCK_ContextMenu_OnItemClick(A){if (!FCKBrowserInfo.IsIE) FCK.Focus();FCKCommands.GetCommand(A.Name).Execute(A.CustomData);};
+var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};
+var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');};
+var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/_translationstatus.txt b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/_translationstatus.txt
new file mode 100644
index 0000000..5eaae40
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/_translationstatus.txt
@@ -0,0 +1,79 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Translations Status.
+ */
+
+af.js Found: 396 Missing: 32
+ar.js Found: 420 Missing: 8
+bg.js Found: 373 Missing: 55
+bn.js Found: 380 Missing: 48
+bs.js Found: 226 Missing: 202
+ca.js Found: 420 Missing: 8
+cs.js Found: 420 Missing: 8
+da.js Found: 419 Missing: 9
+de.js Found: 420 Missing: 8
+el.js Found: 396 Missing: 32
+en-au.js Found: 423 Missing: 5
+en-ca.js Found: 423 Missing: 5
+en-uk.js Found: 423 Missing: 5
+eo.js Found: 346 Missing: 82
+es.js Found: 428 Missing: 0
+et.js Found: 411 Missing: 17
+eu.js Found: 420 Missing: 8
+fa.js Found: 413 Missing: 15
+fi.js Found: 411 Missing: 17
+fo.js Found: 420 Missing: 8
+fr-ca.js Found: 419 Missing: 9
+fr.js Found: 428 Missing: 0
+gl.js Found: 381 Missing: 47
+gu.js Found: 411 Missing: 17
+he.js Found: 428 Missing: 0
+hi.js Found: 420 Missing: 8
+hr.js Found: 420 Missing: 8
+hu.js Found: 411 Missing: 17
+is.js Found: 428 Missing: 0
+it.js Found: 410 Missing: 18
+ja.js Found: 420 Missing: 8
+km.js Found: 370 Missing: 58
+ko.js Found: 390 Missing: 38
+lt.js Found: 376 Missing: 52
+lv.js Found: 381 Missing: 47
+mn.js Found: 411 Missing: 17
+ms.js Found: 352 Missing: 76
+nb.js Found: 414 Missing: 14
+nl.js Found: 420 Missing: 8
+no.js Found: 414 Missing: 14
+pl.js Found: 411 Missing: 17
+pt-br.js Found: 411 Missing: 17
+pt.js Found: 381 Missing: 47
+ro.js Found: 410 Missing: 18
+ru.js Found: 427 Missing: 1
+sk.js Found: 420 Missing: 8
+sl.js Found: 411 Missing: 17
+sr-latn.js Found: 368 Missing: 60
+sr.js Found: 368 Missing: 60
+sv.js Found: 409 Missing: 19
+th.js Found: 393 Missing: 35
+tr.js Found: 428 Missing: 0
+uk.js Found: 419 Missing: 9
+vi.js Found: 419 Missing: 9
+zh-cn.js Found: 428 Missing: 0
+zh.js Found: 423 Missing: 5
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/af.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/af.js
new file mode 100644
index 0000000..bf69f98
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/af.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Afrikaans language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Vou Gereedskaps balk toe",
+ToolbarExpand : "Vou Gereedskaps balk oop",
+
+// Toolbar Items and Context Menu
+Save : "Bewaar",
+NewPage : "Nuwe Bladsy",
+Preview : "Voorskou",
+Cut : "Uitsny ",
+Copy : "Kopieer",
+Paste : "Byvoeg",
+PasteText : "Slegs inhoud byvoeg",
+PasteWord : "Van Word af byvoeg",
+Print : "Druk",
+SelectAll : "Selekteer alles",
+RemoveFormat : "Formaat verweider",
+InsertLinkLbl : "Skakel",
+InsertLink : "Skakel byvoeg/verander",
+RemoveLink : "Skakel verweider",
+VisitLink : "Open Link", //MISSING
+Anchor : "Plekhouer byvoeg/verander",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Beeld",
+InsertImage : "Beeld byvoeg/verander",
+InsertFlashLbl : "Flash",
+InsertFlash : "Flash byvoeg/verander",
+InsertTableLbl : "Tabel",
+InsertTable : "Tabel byvoeg/verander",
+InsertLineLbl : "Lyn",
+InsertLine : "Horisontale lyn byvoeg",
+InsertSpecialCharLbl: "Spesiaale karakter",
+InsertSpecialChar : "Spesiaale Karakter byvoeg",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Smiley byvoeg",
+About : "Meer oor FCKeditor",
+Bold : "Vet",
+Italic : "Skuins",
+Underline : "Onderstreep",
+StrikeThrough : "Gestreik",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Links rig",
+CenterJustify : "Rig Middel",
+RightJustify : "Regs rig",
+BlockJustify : "Blok paradeer",
+DecreaseIndent : "Paradeering verkort",
+IncreaseIndent : "Paradeering verleng",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Ont-skep",
+Redo : "Her-skep",
+NumberedListLbl : "Genommerde lys",
+NumberedList : "Genommerde lys byvoeg/verweider",
+BulletedListLbl : "Gepunkte lys",
+BulletedList : "Gepunkte lys byvoeg/verweider",
+ShowTableBorders : "Wys tabel kante",
+ShowDetails : "Wys informasie",
+Style : "Styl",
+FontFormat : "Karakter formaat",
+Font : "Karakters",
+FontSize : "Karakter grote",
+TextColor : "Karakter kleur",
+BGColor : "Agtergrond kleur",
+Source : "Source",
+Find : "Vind",
+Replace : "Vervang",
+SpellCheck : "Spelling nagaan",
+UniversalKeyboard : "Universeele Sleutelbord",
+PageBreakLbl : "Bladsy breek",
+PageBreak : "Bladsy breek byvoeg",
+
+Form : "Form",
+Checkbox : "HakBox",
+RadioButton : "PuntBox",
+TextField : "Byvoegbare karakter strook",
+Textarea : "Byvoegbare karakter area",
+HiddenField : "Blinde strook",
+Button : "Knop",
+SelectionField : "Opklapbare keuse strook",
+ImageButton : "Beeld knop",
+
+FitWindow : "Maksimaliseer venster grote",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Verander skakel",
+CellCM : "Cell",
+RowCM : "Ry",
+ColumnCM : "Kolom",
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Ry verweider",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Kolom verweider",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Cell verweider",
+MergeCells : "Cell verenig",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Tabel verweider",
+CellProperties : "Cell eienskappe",
+TableProperties : "Tabel eienskappe",
+ImageProperties : "Beeld eienskappe",
+FlashProperties : "Flash eienskappe",
+
+AnchorProp : "Plekhouer eienskappe",
+ButtonProp : "Knop eienskappe",
+CheckboxProp : "HakBox eienskappe",
+HiddenFieldProp : "Blinde strook eienskappe",
+RadioButtonProp : "PuntBox eienskappe",
+ImageButtonProp : "Beeld knop eienskappe",
+TextFieldProp : "Karakter strook eienskappe",
+SelectionFieldProp : "Opklapbare keuse strook eienskappe",
+TextareaProp : "Karakter area eienskappe",
+FormProp : "Form eienskappe",
+
+FontFormats : "Normaal;Geformateerd;Adres;Opskrif 1;Opskrif 2;Opskrif 3;Opskrif 4;Opskrif 5;Opskrif 6;Normaal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML word verarbeit. U geduld asseblief...",
+Done : "Kompleet",
+PasteWordConfirm : "Die informasie wat U probeer byvoeg is warskynlik van Word. Wil U dit reinig voor die byvoeging?",
+NotCompatiblePaste : "Die instruksie is beskikbaar vir Internet Explorer weergawe 5.5 of hor. Wil U dir byvoeg sonder reiniging?",
+UnknownToolbarItem : "Unbekende gereedskaps balk item \"%1\"",
+UnknownCommand : "Unbekende instruksie naam \"%1\"",
+NotImplemented : "Instruksie is nie geimplementeer nie.",
+UnknownToolbarSet : "Gereedskaps balk \"%1\" bestaan nie",
+NoActiveX : "U browser sekuriteit instellings kan die funksies van die editor behinder. U moet die opsie \"Run ActiveX controls and plug-ins\" aktiveer. U ondervinding mag problematies geskiet of sekere funksionaliteit mag verhinder word.",
+BrowseServerBlocked : "Die vorraad venster word geblok! Verseker asseblief dat U die \"popup blocker\" instelling verander.",
+DialogBlocked : "Die dialoog venster vir verdere informasie word geblok. De-aktiveer asseblief die \"popup blocker\" instellings wat dit behinder.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Kanseleer",
+DlgBtnClose : "Sluit",
+DlgBtnBrowseServer : "Server deurblaai",
+DlgAdvancedTag : "Ingewikkeld",
+DlgOpOther : "<Ander>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Voeg asseblief die URL in",
+
+// General Dialogs Labels
+DlgGenNotSet : "<geen instelling>",
+DlgGenId : "Id",
+DlgGenLangDir : "Taal rigting",
+DlgGenLangDirLtr : "Links na regs (LTR)",
+DlgGenLangDirRtl : "Regs na links (RTL)",
+DlgGenLangCode : "Taal kode",
+DlgGenAccessKey : "Toegang sleutel",
+DlgGenName : "Naam",
+DlgGenTabIndex : "Tab Index",
+DlgGenLongDescr : "Lang beskreiwing URL",
+DlgGenClass : "Skakel Tiepe",
+DlgGenTitle : "Voorbeveelings Titel",
+DlgGenContType : "Voorbeveelings inhoud soort",
+DlgGenLinkCharset : "Geskakelde voorbeeld karakterstel",
+DlgGenStyle : "Styl",
+
+// Image Dialog
+DlgImgTitle : "Beeld eienskappe",
+DlgImgInfoTab : "Beeld informasie",
+DlgImgBtnUpload : "Stuur dit na die Server",
+DlgImgURL : "URL",
+DlgImgUpload : "Uplaai",
+DlgImgAlt : "Alternatiewe beskrywing",
+DlgImgWidth : "Weidte",
+DlgImgHeight : "Hoogde",
+DlgImgLockRatio : "Behou preporsie",
+DlgBtnResetSize : "Herstel groote",
+DlgImgBorder : "Kant",
+DlgImgHSpace : "HSpasie",
+DlgImgVSpace : "VSpasie",
+DlgImgAlign : "Paradeer",
+DlgImgAlignLeft : "Links",
+DlgImgAlignAbsBottom: "Abs Onder",
+DlgImgAlignAbsMiddle: "Abs Middel",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Onder",
+DlgImgAlignMiddle : "Middel",
+DlgImgAlignRight : "Regs",
+DlgImgAlignTextTop : "Text Bo",
+DlgImgAlignTop : "Bo",
+DlgImgPreview : "Voorskou",
+DlgImgAlertUrl : "Voeg asseblief Beeld URL in.",
+DlgImgLinkTab : "Skakel",
+
+// Flash Dialog
+DlgFlashTitle : "Flash eienskappe",
+DlgFlashChkPlay : "Automaties Speel",
+DlgFlashChkLoop : "Herhaling",
+DlgFlashChkMenu : "Laat Flash Menu toe",
+DlgFlashScale : "Scale",
+DlgFlashScaleAll : "Wys alles",
+DlgFlashScaleNoBorder : "Geen kante",
+DlgFlashScaleFit : "Presiese pas",
+
+// Link Dialog
+DlgLnkWindowTitle : "Skakel",
+DlgLnkInfoTab : "Skakel informasie",
+DlgLnkTargetTab : "Mikpunt",
+
+DlgLnkType : "Skakel soort",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Skakel na plekhouers in text",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<ander>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Kies 'n plekhouer",
+DlgLnkAnchorByName : "Volgens plekhouer naam",
+DlgLnkAnchorById : "Volgens element Id",
+DlgLnkNoAnchors : "(Geen plekhouers beskikbaar in dokument}",
+DlgLnkEMail : "E-Mail Adres",
+DlgLnkEMailSubject : "Boodskap Opskrif",
+DlgLnkEMailBody : "Boodskap Inhoud",
+DlgLnkUpload : "Oplaai",
+DlgLnkBtnUpload : "Stuur na Server",
+
+DlgLnkTarget : "Mikpunt",
+DlgLnkTargetFrame : "<raam>",
+DlgLnkTargetPopup : "<popup venster>",
+DlgLnkTargetBlank : "Nuwe Venster (_blank)",
+DlgLnkTargetParent : "Vorige Venster (_parent)",
+DlgLnkTargetSelf : "Selfde Venster (_self)",
+DlgLnkTargetTop : "Boonste Venster (_top)",
+DlgLnkTargetFrameName : "Mikpunt Venster Naam",
+DlgLnkPopWinName : "Popup Venster Naam",
+DlgLnkPopWinFeat : "Popup Venster Geaartheid",
+DlgLnkPopResize : "Verstelbare Groote",
+DlgLnkPopLocation : "Adres Balk",
+DlgLnkPopMenu : "Menu Balk",
+DlgLnkPopScroll : "Gleibalkstuk",
+DlgLnkPopStatus : "Status Balk",
+DlgLnkPopToolbar : "Gereedskap Balk",
+DlgLnkPopFullScrn : "Voll Skerm (IE)",
+DlgLnkPopDependent : "Afhanklik (Netscape)",
+DlgLnkPopWidth : "Weite",
+DlgLnkPopHeight : "Hoogde",
+DlgLnkPopLeft : "Links Posisie",
+DlgLnkPopTop : "Bo Posisie",
+
+DlnLnkMsgNoUrl : "Voeg asseblief die URL in",
+DlnLnkMsgNoEMail : "Voeg asseblief die e-mail adres in",
+DlnLnkMsgNoAnchor : "Kies asseblief 'n plekhouer",
+DlnLnkMsgInvPopName : "Die popup naam moet begin met alphabetiese karakters sonder spasies.",
+
+// Color Dialog
+DlgColorTitle : "Kies Kleur",
+DlgColorBtnClear : "Maak skoon",
+DlgColorHighlight : "Highlight",
+DlgColorSelected : "Geselekteer",
+
+// Smiley Dialog
+DlgSmileyTitle : "Voeg Smiley by",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Kies spesiale karakter",
+
+// Table Dialog
+DlgTableTitle : "Tabel eienskappe",
+DlgTableRows : "Reie",
+DlgTableColumns : "Kolome",
+DlgTableBorder : "Kant groote",
+DlgTableAlign : "Parideering",
+DlgTableAlignNotSet : "<geen instelling>",
+DlgTableAlignLeft : "Links",
+DlgTableAlignCenter : "Middel",
+DlgTableAlignRight : "Regs",
+DlgTableWidth : "Weite",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "percent",
+DlgTableHeight : "Hoogde",
+DlgTableCellSpace : "Cell spasieering",
+DlgTableCellPad : "Cell buffer",
+DlgTableCaption : "Beskreiwing",
+DlgTableSummary : "Opsomming",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Cell eienskappe",
+DlgCellWidth : "Weite",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "percent",
+DlgCellHeight : "Hoogde",
+DlgCellWordWrap : "Woord Wrap",
+DlgCellWordWrapNotSet : "<geen instelling>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nee",
+DlgCellHorAlign : "Horisontale rigting",
+DlgCellHorAlignNotSet : "<geen instelling>",
+DlgCellHorAlignLeft : "Links",
+DlgCellHorAlignCenter : "Middel",
+DlgCellHorAlignRight: "Regs",
+DlgCellVerAlign : "Vertikale rigting",
+DlgCellVerAlignNotSet : "<geen instelling>",
+DlgCellVerAlignTop : "Bo",
+DlgCellVerAlignMiddle : "Middel",
+DlgCellVerAlignBottom : "Onder",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Rei strekking",
+DlgCellCollSpan : "Kolom strekking",
+DlgCellBackColor : "Agtergrond Kleur",
+DlgCellBorderColor : "Kant Kleur",
+DlgCellBtnSelect : "Keuse...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Vind",
+DlgFindFindBtn : "Vind",
+DlgFindNotFoundMsg : "Die gespesifiseerde karakters word nie gevind nie.",
+
+// Replace Dialog
+DlgReplaceTitle : "Vervang",
+DlgReplaceFindLbl : "Soek wat:",
+DlgReplaceReplaceLbl : "Vervang met:",
+DlgReplaceCaseChk : "Vergelyk karakter skryfweise",
+DlgReplaceReplaceBtn : "Vervang",
+DlgReplaceReplAllBtn : "Vervang alles",
+DlgReplaceWordChk : "Vergelyk komplete woord",
+
+// Paste Operations / Dialog
+PasteErrorCut : "U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+X).",
+PasteErrorCopy : "U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+C).",
+
+PasteAsText : "Voeg slegs karakters by",
+PasteFromWord : "Byvoeging uit Word",
+
+DlgPasteMsg2 : "Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl+V</STRONG>) en druk <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignoreer karakter soort defenisies",
+DlgPasteRemoveStyles : "Verweider Styl defenisies",
+
+// Color Picker
+ColorAutomatic : "Automaties",
+ColorMoreColors : "Meer Kleure...",
+
+// Document Properties
+DocProps : "Dokument Eienskappe",
+
+// Anchor Dialog
+DlgAnchorTitle : "Plekhouer Eienskappe",
+DlgAnchorName : "Plekhouer Naam",
+DlgAnchorErrorName : "Voltooi die plekhouer naam asseblief",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Nie in woordeboek nie",
+DlgSpellChangeTo : "Verander na",
+DlgSpellBtnIgnore : "Ignoreer",
+DlgSpellBtnIgnoreAll : "Ignoreer na-volgende",
+DlgSpellBtnReplace : "Vervang",
+DlgSpellBtnReplaceAll : "vervang na-volgende",
+DlgSpellBtnUndo : "Ont-skep",
+DlgSpellNoSuggestions : "- Geen voorstel -",
+DlgSpellProgress : "Spelling word beproef...",
+DlgSpellNoMispell : "Spellproef kompleet: Geen foute",
+DlgSpellNoChanges : "Spellproef kompleet: Geen woord veranderings",
+DlgSpellOneChange : "Spellproef kompleet: Een woord verander",
+DlgSpellManyChanges : "Spellproef kompleet: %1 woorde verander",
+
+IeSpellDownload : "Geen Spellproefer geinstaleer nie. Wil U dit aflaai?",
+
+// Button Dialog
+DlgButtonText : "Karakters (Waarde)",
+DlgButtonType : "Soort",
+DlgButtonTypeBtn : "Knop",
+DlgButtonTypeSbm : "Indien",
+DlgButtonTypeRst : "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Naam",
+DlgCheckboxValue : "Waarde",
+DlgCheckboxSelected : "Uitgekies",
+
+// Form Dialog
+DlgFormName : "Naam",
+DlgFormAction : "Aksie",
+DlgFormMethod : "Metode",
+
+// Select Field Dialog
+DlgSelectName : "Naam",
+DlgSelectValue : "Waarde",
+DlgSelectSize : "Grote",
+DlgSelectLines : "lyne",
+DlgSelectChkMulti : "Laat meerere keuses toe",
+DlgSelectOpAvail : "Beskikbare Opsies",
+DlgSelectOpText : "Karakters",
+DlgSelectOpValue : "Waarde",
+DlgSelectBtnAdd : "Byvoeg",
+DlgSelectBtnModify : "Verander",
+DlgSelectBtnUp : "Op",
+DlgSelectBtnDown : "Af",
+DlgSelectBtnSetValue : "Stel as uitgekiesde waarde",
+DlgSelectBtnDelete : "Verweider",
+
+// Textarea Dialog
+DlgTextareaName : "Naam",
+DlgTextareaCols : "Kolom",
+DlgTextareaRows : "Reie",
+
+// Text Field Dialog
+DlgTextName : "Naam",
+DlgTextValue : "Waarde",
+DlgTextCharWidth : "Karakter weite",
+DlgTextMaxChars : "Maximale karakters",
+DlgTextType : "Soort",
+DlgTextTypeText : "Karakters",
+DlgTextTypePass : "Wagwoord",
+
+// Hidden Field Dialog
+DlgHiddenName : "Naam",
+DlgHiddenValue : "Waarde",
+
+// Bulleted List Dialog
+BulletedListProp : "Gepunkte lys eienskappe",
+NumberedListProp : "Genommerde lys eienskappe",
+DlgLstStart : "Begin",
+DlgLstType : "Soort",
+DlgLstTypeCircle : "Sirkel",
+DlgLstTypeDisc : "Skyf",
+DlgLstTypeSquare : "Vierkant",
+DlgLstTypeNumbers : "Nommer (1, 2, 3)",
+DlgLstTypeLCase : "Klein Letters (a, b, c)",
+DlgLstTypeUCase : "Hoof Letters (A, B, C)",
+DlgLstTypeSRoman : "Klein Romeinse nommers (i, ii, iii)",
+DlgLstTypeLRoman : "Groot Romeinse nommers (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Algemeen",
+DlgDocBackTab : "Agtergrond",
+DlgDocColorsTab : "Kleure en Rante",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Bladsy Opskrif",
+DlgDocLangDir : "Taal rigting",
+DlgDocLangDirLTR : "Link na Regs (LTR)",
+DlgDocLangDirRTL : "Regs na Links (RTL)",
+DlgDocLangCode : "Taal Kode",
+DlgDocCharSet : "Karakterstel Kodeering",
+DlgDocCharSetCE : "Sentraal Europa",
+DlgDocCharSetCT : "Chinees Traditioneel (Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Grieks",
+DlgDocCharSetJP : "Japanees",
+DlgDocCharSetKR : "Koreans",
+DlgDocCharSetTR : "Turks",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Western European",
+DlgDocCharSetOther : "Ander Karakterstel Kodeering",
+
+DlgDocDocType : "Dokument Opskrif Soort",
+DlgDocDocTypeOther : "Ander Dokument Opskrif Soort",
+DlgDocIncXHTML : "Voeg XHTML verklaring by",
+DlgDocBgColor : "Agtergrond kleur",
+DlgDocBgImage : "Agtergrond Beeld URL",
+DlgDocBgNoScroll : "Vasgeklemde Agtergrond",
+DlgDocCText : "Karakters",
+DlgDocCLink : "Skakel",
+DlgDocCVisited : "Besoekte Skakel",
+DlgDocCActive : "Aktiewe Skakel",
+DlgDocMargins : "Bladsy Rante",
+DlgDocMaTop : "Bo",
+DlgDocMaLeft : "Links",
+DlgDocMaRight : "Regs",
+DlgDocMaBottom : "Onder",
+DlgDocMeIndex : "Dokument Index Sleutelwoorde(comma verdeelt)",
+DlgDocMeDescr : "Dokument Beskrywing",
+DlgDocMeAuthor : "Skrywer",
+DlgDocMeCopy : "Kopiereg",
+DlgDocPreview : "Voorskou",
+
+// Templates Dialog
+Templates : "Templates",
+DlgTemplatesTitle : "Inhoud Templates",
+DlgTemplatesSelMsg : "Kies die template om te gebruik in die editor<br>(Inhoud word vervang!):",
+DlgTemplatesLoading : "Templates word gelaai. U geduld asseblief...",
+DlgTemplatesNoTpl : "(Geen templates gedefinieerd)",
+DlgTemplatesReplace : "Vervang bestaande inhoud",
+
+// About Dialog
+DlgAboutAboutTab : "Meer oor",
+DlgAboutBrowserInfoTab : "Blaai Informasie deur",
+DlgAboutLicenseTab : "Lesensie",
+DlgAboutVersion : "weergawe",
+DlgAboutInfo : "Vir meer informasie gaan na ",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ar.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ar.js
new file mode 100644
index 0000000..5efa4ee
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ar.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Arabic language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "rtl",
+
+ToolbarCollapse : "ضم شريط الأدوات",
+ToolbarExpand : "تمدد شريط الأدوات",
+
+// Toolbar Items and Context Menu
+Save : "Ø­Ùظ",
+NewPage : "صÙحة جديدة",
+Preview : "معاينة الصÙحة",
+Cut : "قص",
+Copy : "نسخ",
+Paste : "لصق",
+PasteText : "لصق كنص بسيط",
+PasteWord : "لصق من وورد",
+Print : "طباعة",
+SelectAll : "تحديد الكل",
+RemoveFormat : "إزالة التنسيقات",
+InsertLinkLbl : "رابط",
+InsertLink : "إدراج/تحرير رابط",
+RemoveLink : "إزالة رابط",
+VisitLink : "اÙتح الرابط",
+Anchor : "إدراج/تحرير إشارة مرجعية",
+AnchorDelete : "إزالة إشارة مرجعية",
+InsertImageLbl : "صورة",
+InsertImage : "إدراج/تحرير صورة",
+InsertFlashLbl : "Ùلاش",
+InsertFlash : "إدراج/تحرير Ùيلم Ùلاش",
+InsertTableLbl : "جدول",
+InsertTable : "إدراج/تحرير جدول",
+InsertLineLbl : "خط Ùاصل",
+InsertLine : "إدراج خط Ùاصل",
+InsertSpecialCharLbl: "رموز",
+InsertSpecialChar : "إدراج رموز..Ù",
+InsertSmileyLbl : "ابتسامات",
+InsertSmiley : "إدراج ابتسامات",
+About : "حول FCKeditor",
+Bold : "غامق",
+Italic : "مائل",
+Underline : "تسطير",
+StrikeThrough : "يتوسطه خط",
+Subscript : "منخÙض",
+Superscript : "مرتÙع",
+LeftJustify : "محاذاة إلى اليسار",
+CenterJustify : "توسيط",
+RightJustify : "محاذاة إلى اليمين",
+BlockJustify : "ضبط",
+DecreaseIndent : "إنقاص المساÙØ© البادئة",
+IncreaseIndent : "زيادة المساÙØ© البادئة",
+Blockquote : "اقتباس",
+CreateDiv : "إنشاء حاوية Div",
+EditDiv : "تعديل حاوية Div",
+DeleteDiv : "إزالة حاوية Div",
+Undo : "تراجع",
+Redo : "إعادة",
+NumberedListLbl : "تعداد رقمي",
+NumberedList : "إدراج/إلغاء تعداد رقمي",
+BulletedListLbl : "تعداد نقطي",
+BulletedList : "إدراج/إلغاء تعداد نقطي",
+ShowTableBorders : "معاينة حدود الجداول",
+ShowDetails : "معاينة التÙاصيل",
+Style : "نمط",
+FontFormat : "تنسيق",
+Font : "خط",
+FontSize : "حجم الخط",
+TextColor : "لون النص",
+BGColor : "لون الخلÙية",
+Source : "Ø´Ùرة المصدر",
+Find : "بحث",
+Replace : "إستبدال",
+SpellCheck : "تدقيق إملائي",
+UniversalKeyboard : "لوحة المÙاتيح العالمية",
+PageBreakLbl : "Ùصل الصÙحة",
+PageBreak : "إدخال صÙحة جديدة",
+
+Form : "نموذج",
+Checkbox : "خانة إختيار",
+RadioButton : "زر خيار",
+TextField : "مربع نص",
+Textarea : "ناحية نص",
+HiddenField : "إدراج حقل Ø®ÙÙŠ",
+Button : "زر ضغط",
+SelectionField : "قائمة منسدلة",
+ImageButton : "زر صورة",
+
+FitWindow : "تكبير حجم المحرر",
+ShowBlocks : "مخطط تÙصيلي",
+
+// Context Menu
+EditLink : "تحرير رابط",
+CellCM : "خلية",
+RowCM : "صÙ",
+ColumnCM : "عمود",
+InsertRowAfter : "إدراج ص٠بعد",
+InsertRowBefore : "إدراج ص٠قبل",
+DeleteRows : "حذ٠صÙÙˆÙ",
+InsertColumnAfter : "إدراج عمود بعد",
+InsertColumnBefore : "إدراج عمود قبل",
+DeleteColumns : "حذ٠أعمدة",
+InsertCellAfter : "إدراج خلية بعد",
+InsertCellBefore : "إدراج خلية قبل",
+DeleteCells : "حذ٠خلايا",
+MergeCells : "دمج خلايا",
+MergeRight : "دمج لليمين",
+MergeDown : "دمج للأسÙÙ„",
+HorizontalSplitCell : "تقسيم الخلية Ø£Ùقياً",
+VerticalSplitCell : "تقسيم الخلية عمودياً",
+TableDelete : "حذ٠الجدول",
+CellProperties : "خصائص الخلية",
+TableProperties : "خصائص الجدول",
+ImageProperties : "خصائص الصورة",
+FlashProperties : "خصائص Ùيلم الÙلاش",
+
+AnchorProp : "خصائص الإشارة المرجعية",
+ButtonProp : "خصائص زر الضغط",
+CheckboxProp : "خصائص خانة الإختيار",
+HiddenFieldProp : "خصائص الحقل الخÙÙŠ",
+RadioButtonProp : "خصائص زر الخيار",
+ImageButtonProp : "خصائص زر الصورة",
+TextFieldProp : "خصائص مربع النص",
+SelectionFieldProp : "خصائص القائمة المنسدلة",
+TextareaProp : "خصائص ناحية النص",
+FormProp : "خصائص النموذج",
+
+FontFormats : "عادي;منسّق;دوس;العنوان 1;العنوان 2;العنوان 3;العنوان 4;العنوان 5;العنوان 6",
+
+// Alerts and Messages
+ProcessingXHTML : "إنتظر قليلاً ريثما تتم معالَجة†XHTML. لن يستغرق طويلاً...",
+Done : "تم",
+PasteWordConfirm : "يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيÙÙ‡ قبل الشروع ÙÙŠ عملية اللصق؟",
+NotCompatiblePaste : "هذه الميزة تحتاج لمتصÙØ­ من النوعInternet Explorer إصدار 5.5 Ùما Ùوق. هل تود اللصق دون تنظي٠الكود؟",
+UnknownToolbarItem : "عنصر شريط أدوات غير معرو٠\"%1\"",
+UnknownCommand : "أمر غير معرو٠\"%1\"",
+NotImplemented : "لم يتم دعم هذا الأمر",
+UnknownToolbarSet : "لم أتمكن من العثور على طقم الأدوات \"%1\" ",
+NoActiveX : "لتأمين متصÙحك يجب أن تحدد بعض مميزات المحرر. يتوجب عليك تمكين الخيار \"Run ActiveX controls and plug-ins\". قد تواجة أخطاء وتلاحظ مميزات Ù…Ùقودة",
+BrowseServerBlocked : "لايمكن Ùتح مصدر المتصÙØ­. Ùضلا يجب التأكد بأن جميع موانع النواÙØ° المنبثقة معطلة",
+DialogBlocked : "لايمكن Ùتح ناÙذة الحوار . Ùضلا تأكد من أن مانع النواÙØ° المنبثة معطل .",
+VisitLinkBlocked : "لا يمكن Ùتح ناÙذة جديدة. تأكد من إيقا٠كل مانعي Ùتح النواÙØ° من العمل.",
+
+// Dialogs
+DlgBtnOK : "مواÙÙ‚",
+DlgBtnCancel : "إلغاء الأمر",
+DlgBtnClose : "إغلاق",
+DlgBtnBrowseServer : "تصÙØ­ الخادم",
+DlgAdvancedTag : "متقدم",
+DlgOpOther : "<أخرى>",
+DlgInfoTab : "معلومات",
+DlgAlertUrl : "الرجاء كتابة عنوان الإنترنت",
+
+// General Dialogs Labels
+DlgGenNotSet : "<بدون تحديد>",
+DlgGenId : "الرقم",
+DlgGenLangDir : "إتجاه النص",
+DlgGenLangDirLtr : "اليسار لليمين (LTR)",
+DlgGenLangDirRtl : "اليمين لليسار (RTL)",
+DlgGenLangCode : "رمز اللغة",
+DlgGenAccessKey : "Ù…Ùاتيح الإختصار",
+DlgGenName : "الاسم",
+DlgGenTabIndex : "الترتيب",
+DlgGenLongDescr : "عنوان الوص٠المÙصّل",
+DlgGenClass : "Ùئات التنسيق",
+DlgGenTitle : "تلميح الشاشة",
+DlgGenContType : "نوع التلميح",
+DlgGenLinkCharset : "ترميز المادة المطلوبة",
+DlgGenStyle : "نمط",
+
+// Image Dialog
+DlgImgTitle : "خصائص الصورة",
+DlgImgInfoTab : "معلومات الصورة",
+DlgImgBtnUpload : "أرسلها للخادم",
+DlgImgURL : "موقع الصورة",
+DlgImgUpload : "رÙع",
+DlgImgAlt : "الوصÙ",
+DlgImgWidth : "العرض",
+DlgImgHeight : "الإرتÙاع",
+DlgImgLockRatio : "تناسق الحجم",
+DlgBtnResetSize : "إستعادة الحجم الأصلي",
+DlgImgBorder : "سمك الحدود",
+DlgImgHSpace : "تباعد Ø£Ùقي",
+DlgImgVSpace : "تباعد عمودي",
+DlgImgAlign : "محاذاة",
+DlgImgAlignLeft : "يسار",
+DlgImgAlignAbsBottom: "أسÙÙ„ النص",
+DlgImgAlignAbsMiddle: "وسط السطر",
+DlgImgAlignBaseline : "على السطر",
+DlgImgAlignBottom : "أسÙÙ„",
+DlgImgAlignMiddle : "وسط",
+DlgImgAlignRight : "يمين",
+DlgImgAlignTextTop : "أعلى النص",
+DlgImgAlignTop : "أعلى",
+DlgImgPreview : "معاينة",
+DlgImgAlertUrl : "Ùضلاً أكتب الموقع الذي توجد عليه هذه الصورة.",
+DlgImgLinkTab : "الرابط",
+
+// Flash Dialog
+DlgFlashTitle : "خصائص Ùيلم الÙلاش",
+DlgFlashChkPlay : "تشغيل تلقائي",
+DlgFlashChkLoop : "تكرار",
+DlgFlashChkMenu : "تمكين قائمة Ùيلم الÙلاش",
+DlgFlashScale : "الحجم",
+DlgFlashScaleAll : "إظهار الكل",
+DlgFlashScaleNoBorder : "بلا حدود",
+DlgFlashScaleFit : "ضبط تام",
+
+// Link Dialog
+DlgLnkWindowTitle : "إرتباط تشعبي",
+DlgLnkInfoTab : "معلومات الرابط",
+DlgLnkTargetTab : "الهدÙ",
+
+DlgLnkType : "نوع الربط",
+DlgLnkTypeURL : "العنوان",
+DlgLnkTypeAnchor : "مكان ÙÙŠ هذا المستند",
+DlgLnkTypeEMail : "بريد إلكتروني",
+DlgLnkProto : "البروتوكول",
+DlgLnkProtoOther : "<أخرى>",
+DlgLnkURL : "الموقع",
+DlgLnkAnchorSel : "اختر علامة مرجعية",
+DlgLnkAnchorByName : "حسب اسم العلامة",
+DlgLnkAnchorById : "حسب تعري٠العنصر",
+DlgLnkNoAnchors : "(لا يوجد علامات مرجعية ÙÙŠ هذا المستند)",
+DlgLnkEMail : "عنوان بريد إلكتروني",
+DlgLnkEMailSubject : "موضوع الرسالة",
+DlgLnkEMailBody : "محتوى الرسالة",
+DlgLnkUpload : "رÙع",
+DlgLnkBtnUpload : "أرسلها للخادم",
+
+DlgLnkTarget : "الهدÙ",
+DlgLnkTargetFrame : "<إطار>",
+DlgLnkTargetPopup : "<ناÙذة منبثقة>",
+DlgLnkTargetBlank : "إطار جديد (_blank)",
+DlgLnkTargetParent : "الإطار الأصل (_parent)",
+DlgLnkTargetSelf : "Ù†Ùس الإطار (_self)",
+DlgLnkTargetTop : "صÙحة كاملة (_top)",
+DlgLnkTargetFrameName : "اسم الإطار الهدÙ",
+DlgLnkPopWinName : "تسمية الناÙذة المنبثقة",
+DlgLnkPopWinFeat : "خصائص الناÙذة المنبثقة",
+DlgLnkPopResize : "قابلة للتحجيم",
+DlgLnkPopLocation : "شريط العنوان",
+DlgLnkPopMenu : "القوائم الرئيسية",
+DlgLnkPopScroll : "أشرطة التمرير",
+DlgLnkPopStatus : "شريط الحالة السÙلي",
+DlgLnkPopToolbar : "شريط الأدوات",
+DlgLnkPopFullScrn : "ملئ الشاشة (IE)",
+DlgLnkPopDependent : "تابع (Netscape)",
+DlgLnkPopWidth : "العرض",
+DlgLnkPopHeight : "الإرتÙاع",
+DlgLnkPopLeft : "التمركز لليسار",
+DlgLnkPopTop : "التمركز للأعلى",
+
+DlnLnkMsgNoUrl : "Ùضلاً أدخل عنوان الموقع الذي يشير إليه الرابط",
+DlnLnkMsgNoEMail : "Ùضلاً أدخل عنوان البريد الإلكتروني",
+DlnLnkMsgNoAnchor : "Ùضلاً حدد العلامة المرجعية المرغوبة",
+DlnLnkMsgInvPopName : "اسم الناÙذة المنبثقة يجب أن يبدأ بحر٠أبجدي دون مساÙات",
+
+// Color Dialog
+DlgColorTitle : "اختر لوناً",
+DlgColorBtnClear : "مسح",
+DlgColorHighlight : "تحديد",
+DlgColorSelected : "إختيار",
+
+// Smiley Dialog
+DlgSmileyTitle : "إدراج إبتسامات ",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "إدراج رمز",
+
+// Table Dialog
+DlgTableTitle : "إدراج جدول",
+DlgTableRows : "صÙÙˆÙ",
+DlgTableColumns : "أعمدة",
+DlgTableBorder : "سمك الحدود",
+DlgTableAlign : "المحاذاة",
+DlgTableAlignNotSet : "<بدون تحديد>",
+DlgTableAlignLeft : "يسار",
+DlgTableAlignCenter : "وسط",
+DlgTableAlignRight : "يمين",
+DlgTableWidth : "العرض",
+DlgTableWidthPx : "بكسل",
+DlgTableWidthPc : "بالمئة",
+DlgTableHeight : "الإرتÙاع",
+DlgTableCellSpace : "تباعد الخلايا",
+DlgTableCellPad : "المساÙØ© البادئة",
+DlgTableCaption : "الوصÙ",
+DlgTableSummary : "الخلاصة",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "خصائص الخلية",
+DlgCellWidth : "العرض",
+DlgCellWidthPx : "بكسل",
+DlgCellWidthPc : "بالمئة",
+DlgCellHeight : "الإرتÙاع",
+DlgCellWordWrap : "التÙا٠النص",
+DlgCellWordWrapNotSet : "<بدون تحديد>",
+DlgCellWordWrapYes : "نعم",
+DlgCellWordWrapNo : "لا",
+DlgCellHorAlign : "المحاذاة الأÙقية",
+DlgCellHorAlignNotSet : "<بدون تحديد>",
+DlgCellHorAlignLeft : "يسار",
+DlgCellHorAlignCenter : "وسط",
+DlgCellHorAlignRight: "يمين",
+DlgCellVerAlign : "المحاذاة العمودية",
+DlgCellVerAlignNotSet : "<بدون تحديد>",
+DlgCellVerAlignTop : "أعلى",
+DlgCellVerAlignMiddle : "وسط",
+DlgCellVerAlignBottom : "أسÙÙ„",
+DlgCellVerAlignBaseline : "على السطر",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "إمتداد الصÙÙˆÙ",
+DlgCellCollSpan : "إمتداد الأعمدة",
+DlgCellBackColor : "لون الخلÙية",
+DlgCellBorderColor : "لون الحدود",
+DlgCellBtnSelect : "حدّد...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "بحث واستبدال",
+
+// Find Dialog
+DlgFindTitle : "بحث",
+DlgFindFindBtn : "ابحث",
+DlgFindNotFoundMsg : "لم يتم العثور على النص المحدد.",
+
+// Replace Dialog
+DlgReplaceTitle : "إستبدال",
+DlgReplaceFindLbl : "البحث عن:",
+DlgReplaceReplaceLbl : "إستبدال بـ:",
+DlgReplaceCaseChk : "مطابقة حالة الأحرÙ",
+DlgReplaceReplaceBtn : "إستبدال",
+DlgReplaceReplAllBtn : "إستبدال الكل",
+DlgReplaceWordChk : "الكلمة بالكامل Ùقط",
+
+// Paste Operations / Dialog
+PasteErrorCut : "الإعدادات الأمنية للمتصÙØ­ الذي تستخدمه تمنع القص التلقائي. Ùضلاً إستخدم لوحة المÙاتيح Ù„Ùعل ذلك (Ctrl+X).",
+PasteErrorCopy : "الإعدادات الأمنية للمتصÙØ­ الذي تستخدمه تمنع النسخ التلقائي. Ùضلاً إستخدم لوحة المÙاتيح Ù„Ùعل ذلك (Ctrl+C).",
+
+PasteAsText : "لصق كنص بسيط",
+PasteFromWord : "لصق من وورد",
+
+DlgPasteMsg2 : "الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) ÙÙŠ لوحة المÙاتيح، ثم اضغط زر <STRONG>مواÙÙ‚</STRONG>.",
+DlgPasteSec : "نظراً لإعدادات الأمان الخاصة بمتصÙحك، لن يتمكن هذا المحرر من الوصول لمحتوى حاÙظتك، لذا وجب عليك لصق المحتوى مرة أخرى ÙÙŠ هذه الناÙذة.",
+DlgPasteIgnoreFont : "تجاهل تعريÙات أسماء الخطوط",
+DlgPasteRemoveStyles : "إزالة تعريÙات الأنماط",
+
+// Color Picker
+ColorAutomatic : "تلقائي",
+ColorMoreColors : "ألوان إضاÙية...",
+
+// Document Properties
+DocProps : "خصائص الصÙحة",
+
+// Anchor Dialog
+DlgAnchorTitle : "خصائص إشارة مرجعية",
+DlgAnchorName : "اسم الإشارة المرجعية",
+DlgAnchorErrorName : "الرجاء كتابة اسم الإشارة المرجعية",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "ليست ÙÙŠ القاموس",
+DlgSpellChangeTo : "التغيير إلى",
+DlgSpellBtnIgnore : "تجاهل",
+DlgSpellBtnIgnoreAll : "تجاهل الكل",
+DlgSpellBtnReplace : "تغيير",
+DlgSpellBtnReplaceAll : "تغيير الكل",
+DlgSpellBtnUndo : "تراجع",
+DlgSpellNoSuggestions : "- لا توجد إقتراحات -",
+DlgSpellProgress : "جاري التدقيق إملائياً",
+DlgSpellNoMispell : "تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية",
+DlgSpellNoChanges : "تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة",
+DlgSpellOneChange : "تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة Ùقط",
+DlgSpellManyChanges : "تم إكمال التدقيق الإملائي: تم تغيير %1 كلمات\كلمة",
+
+IeSpellDownload : "المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟",
+
+// Button Dialog
+DlgButtonText : "القيمة/التسمية",
+DlgButtonType : "نوع الزر",
+DlgButtonTypeBtn : "زر",
+DlgButtonTypeSbm : "إرسال",
+DlgButtonTypeRst : "إعادة تعيين",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "الاسم",
+DlgCheckboxValue : "القيمة",
+DlgCheckboxSelected : "محدد",
+
+// Form Dialog
+DlgFormName : "الاسم",
+DlgFormAction : "اسم الملÙ",
+DlgFormMethod : "الأسلوب",
+
+// Select Field Dialog
+DlgSelectName : "الاسم",
+DlgSelectValue : "القيمة",
+DlgSelectSize : "الحجم",
+DlgSelectLines : "الأسطر",
+DlgSelectChkMulti : "السماح بتحديدات متعددة",
+DlgSelectOpAvail : "الخيارات المتاحة",
+DlgSelectOpText : "النص",
+DlgSelectOpValue : "القيمة",
+DlgSelectBtnAdd : "إضاÙØ©",
+DlgSelectBtnModify : "تعديل",
+DlgSelectBtnUp : "تحريك لأعلى",
+DlgSelectBtnDown : "تحريك لأسÙÙ„",
+DlgSelectBtnSetValue : "إجعلها محددة",
+DlgSelectBtnDelete : "إزالة",
+
+// Textarea Dialog
+DlgTextareaName : "الاسم",
+DlgTextareaCols : "الأعمدة",
+DlgTextareaRows : "الصÙÙˆÙ",
+
+// Text Field Dialog
+DlgTextName : "الاسم",
+DlgTextValue : "القيمة",
+DlgTextCharWidth : "العرض بالأحرÙ",
+DlgTextMaxChars : "عدد الحرو٠الأقصى",
+DlgTextType : "نوع المحتوى",
+DlgTextTypeText : "نص",
+DlgTextTypePass : "كلمة مرور",
+
+// Hidden Field Dialog
+DlgHiddenName : "الاسم",
+DlgHiddenValue : "القيمة",
+
+// Bulleted List Dialog
+BulletedListProp : "خصائص التعداد النقطي",
+NumberedListProp : "خصائص التعداد الرقمي",
+DlgLstStart : "البدء عند",
+DlgLstType : "النوع",
+DlgLstTypeCircle : "دائرة",
+DlgLstTypeDisc : "قرص",
+DlgLstTypeSquare : "مربع",
+DlgLstTypeNumbers : "أرقام (1، 2، 3)َ",
+DlgLstTypeLCase : "حرو٠صغيرة (a, b, c)َ",
+DlgLstTypeUCase : "حرو٠كبيرة (A, B, C)َ",
+DlgLstTypeSRoman : "ترقيم روماني صغير (i, ii, iii)َ",
+DlgLstTypeLRoman : "ترقيم روماني كبير (I, II, III)َ",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "عام",
+DlgDocBackTab : "الخلÙية",
+DlgDocColorsTab : "الألوان والهوامش",
+DlgDocMetaTab : "المعرّÙات الرأسية",
+
+DlgDocPageTitle : "عنوان الصÙحة",
+DlgDocLangDir : "إتجاه اللغة",
+DlgDocLangDirLTR : "اليسار لليمين (LTR)",
+DlgDocLangDirRTL : "اليمين لليسار (RTL)",
+DlgDocLangCode : "رمز اللغة",
+DlgDocCharSet : "ترميز الحروÙ",
+DlgDocCharSetCE : "أوروبا الوسطى",
+DlgDocCharSetCT : "الصينية التقليدية (Big5)",
+DlgDocCharSetCR : "السيريلية",
+DlgDocCharSetGR : "اليونانية",
+DlgDocCharSetJP : "اليابانية",
+DlgDocCharSetKR : "الكورية",
+DlgDocCharSetTR : "التركية",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "أوروبا الغربية",
+DlgDocCharSetOther : "ترميز آخر",
+
+DlgDocDocType : "ترويسة نوع الصÙحة",
+DlgDocDocTypeOther : "ترويسة نوع صÙحة أخرى",
+DlgDocIncXHTML : "تضمين إعلانات†لغة XHTMLَ",
+DlgDocBgColor : "لون الخلÙية",
+DlgDocBgImage : "رابط الصورة الخلÙية",
+DlgDocBgNoScroll : "جعلها علامة مائية",
+DlgDocCText : "النص",
+DlgDocCLink : "الروابط",
+DlgDocCVisited : "المزارة",
+DlgDocCActive : "النشطة",
+DlgDocMargins : "هوامش الصÙحة",
+DlgDocMaTop : "علوي",
+DlgDocMaLeft : "أيسر",
+DlgDocMaRight : "أيمن",
+DlgDocMaBottom : "سÙلي",
+DlgDocMeIndex : "الكلمات الأساسية (Ù…Ùصولة بÙواصل)ÙŽ",
+DlgDocMeDescr : "وص٠الصÙحة",
+DlgDocMeAuthor : "الكاتب",
+DlgDocMeCopy : "المالك",
+DlgDocPreview : "معاينة",
+
+// Templates Dialog
+Templates : "القوالب",
+DlgTemplatesTitle : "قوالب المحتوى",
+DlgTemplatesSelMsg : "اختر القالب الذي تود وضعه ÙÙŠ المحرر <br>(سيتم Ùقدان المحتوى الحالي):",
+DlgTemplatesLoading : "جاري تحميل قائمة القوالب، الرجاء الإنتظار...",
+DlgTemplatesNoTpl : "(لم يتم تعري٠أي قالب)",
+DlgTemplatesReplace : "استبدال المحتوى",
+
+// About Dialog
+DlgAboutAboutTab : "نبذة",
+DlgAboutBrowserInfoTab : "معلومات متصÙحك",
+DlgAboutLicenseTab : "الترخيص",
+DlgAboutVersion : "الإصدار",
+DlgAboutInfo : "لمزيد من المعلومات تÙضل بزيارة",
+
+// Div Dialog
+DlgDivGeneralTab : "عام",
+DlgDivAdvancedTab : "متقدم",
+DlgDivStyle : "المظهر",
+DlgDivInlineStyle : "المظهر المضمن"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bg.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bg.js
new file mode 100644
index 0000000..923e31f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bg.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bulgarian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Скрий панела Ñ Ð¸Ð½Ñтрументите",
+ToolbarExpand : "Покажи панела Ñ Ð¸Ð½Ñтрументите",
+
+// Toolbar Items and Context Menu
+Save : "Запази",
+NewPage : "Ðова Ñтраница",
+Preview : "Предварителен изглед",
+Cut : "Изрежи",
+Copy : "Запамети",
+Paste : "Вмъкни",
+PasteText : "Вмъкни Ñамо текÑÑ‚",
+PasteWord : "Вмъкни от MS Word",
+Print : "Печат",
+SelectAll : "Селектирай вÑичко",
+RemoveFormat : "Изтрий форматирането",
+InsertLinkLbl : "Връзка",
+InsertLink : "Добави/Редактирай връзка",
+RemoveLink : "Изтрий връзка",
+VisitLink : "Open Link", //MISSING
+Anchor : "Добави/Редактирай котва",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Изображение",
+InsertImage : "Добави/Редактирай изображение",
+InsertFlashLbl : "Flash",
+InsertFlash : "Добави/Редактиай Flash обект",
+InsertTableLbl : "Таблица",
+InsertTable : "Добави/Редактирай таблица",
+InsertLineLbl : "ЛиниÑ",
+InsertLine : "Вмъкни хоризонтална линиÑ",
+InsertSpecialCharLbl: "Специален Ñимвол",
+InsertSpecialChar : "Вмъкни Ñпециален Ñимвол",
+InsertSmileyLbl : "УÑмивка",
+InsertSmiley : "Добави уÑмивка",
+About : "За FCKeditor",
+Bold : "Удебелен",
+Italic : "КурÑив",
+Underline : "Подчертан",
+StrikeThrough : "Зачертан",
+Subscript : "Ð˜Ð½Ð´ÐµÐºÑ Ð·Ð° база",
+Superscript : "Ð˜Ð½Ð´ÐµÐºÑ Ð·Ð° Ñтепен",
+LeftJustify : "ПодравнÑване в лÑво",
+CenterJustify : "ПодравнÑвне в Ñредата",
+RightJustify : "ПодравнÑване в дÑÑно",
+BlockJustify : "ДвуÑтранно подравнÑване",
+DecreaseIndent : "Ðамали отÑтъпа",
+IncreaseIndent : "Увеличи отÑтъпа",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Отмени",
+Redo : "Повтори",
+NumberedListLbl : "Ðумериран ÑпиÑък",
+NumberedList : "Добави/Изтрий нумериран ÑпиÑък",
+BulletedListLbl : "Ðенумериран ÑпиÑък",
+BulletedList : "Добави/Изтрий ненумериран ÑпиÑък",
+ShowTableBorders : "Покажи рамките на таблицата",
+ShowDetails : "Покажи подробноÑти",
+Style : "Стил",
+FontFormat : "Формат",
+Font : "Шрифт",
+FontSize : "Размер",
+TextColor : "ЦвÑÑ‚ на текÑта",
+BGColor : "ЦвÑÑ‚ на фона",
+Source : "Код",
+Find : "ТърÑи",
+Replace : "ЗамеÑти",
+SpellCheck : "Провери правопиÑа",
+UniversalKeyboard : "УниверÑална клавиатура",
+PageBreakLbl : "Ðов ред",
+PageBreak : "Вмъкни нов ред",
+
+Form : "ФормулÑÑ€",
+Checkbox : "Поле за отметка",
+RadioButton : "Поле за опциÑ",
+TextField : "ТекÑтово поле",
+Textarea : "ТекÑтова облаÑÑ‚",
+HiddenField : "Скрито поле",
+Button : "Бутон",
+SelectionField : "Падащо меню Ñ Ð¾Ð¿Ñ†Ð¸Ð¸",
+ImageButton : "Бутон-изображение",
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Редактирай връзка",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Изтрий редовете",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Изтрий колоните",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Изтрий клетките",
+MergeCells : "Обедини клетките",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Изтрий таблицата",
+CellProperties : "Параметри на клетката",
+TableProperties : "Параметри на таблицата",
+ImageProperties : "Параметри на изображението",
+FlashProperties : "Параметри на Flash обекта",
+
+AnchorProp : "Параметри на котвата",
+ButtonProp : "Параметри на бутона",
+CheckboxProp : "Параметри на полето за отметка",
+HiddenFieldProp : "Параметри на Ñкритото поле",
+RadioButtonProp : "Параметри на полето за опциÑ",
+ImageButtonProp : "Параметри на бутона-изображение",
+TextFieldProp : "Параметри на текÑтовото-поле",
+SelectionFieldProp : "Параметри на падащото меню Ñ Ð¾Ð¿Ñ†Ð¸Ð¸",
+TextareaProp : "Параметри на текÑтовата облаÑÑ‚",
+FormProp : "Параметри на формулÑра",
+
+FontFormats : "Ðормален;Форматиран;ÐдреÑ;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Обработка на XHTML. ÐœÐ¾Ð»Ñ Ð¸Ð·Ñ‡Ð°ÐºÐ°Ð¹Ñ‚Ðµ...",
+Done : "Готово",
+PasteWordConfirm : "ТекÑÑ‚ÑŠÑ‚, който иÑкате да вмъкнете е копиран от MS Word. Желаете ли да бъде изчиÑтен преди вмъкването?",
+NotCompatiblePaste : "Тази Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð¸Ñква MS Internet Explorer верÑÐ¸Ñ 5.5 или по-виÑока. Желаете ли да вмъкнете запаметеното без изчиÑтване?",
+UnknownToolbarItem : "Ðепознат инÑтрумент \"%1\"",
+UnknownCommand : "Ðепозната команда \"%1\"",
+NotImplemented : "Командата не е имплементирана",
+UnknownToolbarSet : "Панелът \"%1\" не ÑъщеÑтвува",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "ОК",
+DlgBtnCancel : "Отказ",
+DlgBtnClose : "Затвори",
+DlgBtnBrowseServer : "Разгледай Ñървъра",
+DlgAdvancedTag : "ПодробноÑти...",
+DlgOpOther : "<Друго>",
+DlgInfoTab : "ИнформациÑ",
+DlgAlertUrl : "МолÑ, въведете Ð¿ÑŠÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚ (URL)",
+
+// General Dialogs Labels
+DlgGenNotSet : "<не е наÑтроен>",
+DlgGenId : "Идентификатор",
+DlgGenLangDir : "поÑока на речта",
+DlgGenLangDirLtr : "От лÑво на дÑÑно",
+DlgGenLangDirRtl : "От дÑÑно на лÑво",
+DlgGenLangCode : "Код на езика",
+DlgGenAccessKey : "Бърз клавиш",
+DlgGenName : "Име",
+DlgGenTabIndex : "Ред на доÑтъп",
+DlgGenLongDescr : "ОпиÑание на връзката",
+DlgGenClass : "ÐšÐ»Ð°Ñ Ð¾Ñ‚ Ñтиловите таблици",
+DlgGenTitle : "Препоръчително заглавие",
+DlgGenContType : "Препоръчителен тип на Ñъдържанието",
+DlgGenLinkCharset : "Тип на ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ€ÐµÑурÑ",
+DlgGenStyle : "Стил",
+
+// Image Dialog
+DlgImgTitle : "Параметри на изображението",
+DlgImgInfoTab : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изображението",
+DlgImgBtnUpload : "Прати към Ñървъра",
+DlgImgURL : "Пълен път (URL)",
+DlgImgUpload : "Качи",
+DlgImgAlt : "Ðлтернативен текÑÑ‚",
+DlgImgWidth : "Ширина",
+DlgImgHeight : "ВиÑочина",
+DlgImgLockRatio : "Запази пропорциÑта",
+DlgBtnResetSize : "ВъзÑтанови размера",
+DlgImgBorder : "Рамка",
+DlgImgHSpace : "Хоризонтален отÑтъп",
+DlgImgVSpace : "Вертикален отÑтъп",
+DlgImgAlign : "ПодравнÑване",
+DlgImgAlignLeft : "ЛÑво",
+DlgImgAlignAbsBottom: "Ðай-долу",
+DlgImgAlignAbsMiddle: "Точно по Ñредата",
+DlgImgAlignBaseline : "По базовата линиÑ",
+DlgImgAlignBottom : "Долу",
+DlgImgAlignMiddle : "По Ñредата",
+DlgImgAlignRight : "ДÑÑно",
+DlgImgAlignTextTop : "Върху текÑта",
+DlgImgAlignTop : "Отгоре",
+DlgImgPreview : "Изглед",
+DlgImgAlertUrl : "МолÑ, въведете Ð¿ÑŠÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚ до изображението",
+DlgImgLinkTab : "Връзка",
+
+// Flash Dialog
+DlgFlashTitle : "Параметри на Flash обекта",
+DlgFlashChkPlay : "Ðвтоматично Ñтартиране",
+DlgFlashChkLoop : "Ðово Ñтартиране Ñлед завършването",
+DlgFlashChkMenu : "Разрешено Flash меню",
+DlgFlashScale : "ОразмерÑване",
+DlgFlashScaleAll : "Покажи Ñ†ÐµÐ»Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚",
+DlgFlashScaleNoBorder : "Без рамка",
+DlgFlashScaleFit : "Според мÑÑтото",
+
+// Link Dialog
+DlgLnkWindowTitle : "Връзка",
+DlgLnkInfoTab : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° връзката",
+DlgLnkTargetTab : "Цел",
+
+DlgLnkType : "Вид на връзката",
+DlgLnkTypeURL : "Пълен път (URL)",
+DlgLnkTypeAnchor : "Котва в текущата Ñтраница",
+DlgLnkTypeEMail : "Е-поща",
+DlgLnkProto : "Протокол",
+DlgLnkProtoOther : "<друго>",
+DlgLnkURL : "Пълен път (URL)",
+DlgLnkAnchorSel : "Изберете котва",
+DlgLnkAnchorByName : "По име на котвата",
+DlgLnkAnchorById : "По идентификатор на елемент",
+DlgLnkNoAnchors : "(ÐÑма котви в Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚)",
+DlgLnkEMail : "ÐÐ´Ñ€ÐµÑ Ð·Ð° е-поща",
+DlgLnkEMailSubject : "Тема на пиÑмото",
+DlgLnkEMailBody : "ТекÑÑ‚ на пиÑмото",
+DlgLnkUpload : "Качи",
+DlgLnkBtnUpload : "Прати на Ñървъра",
+
+DlgLnkTarget : "Цел",
+DlgLnkTargetFrame : "<рамка>",
+DlgLnkTargetPopup : "<дъщерен прозорец>",
+DlgLnkTargetBlank : "Ðов прозорец (_blank)",
+DlgLnkTargetParent : "РодителÑки прозорец (_parent)",
+DlgLnkTargetSelf : "ÐÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† (_self)",
+DlgLnkTargetTop : "Ð¦ÐµÐ»Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† (_top)",
+DlgLnkTargetFrameName : "Име на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†",
+DlgLnkPopWinName : "Име на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†",
+DlgLnkPopWinFeat : "Параметри на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†",
+DlgLnkPopResize : "С променливи размери",
+DlgLnkPopLocation : "Поле за адреÑ",
+DlgLnkPopMenu : "Меню",
+DlgLnkPopScroll : "Плъзгач",
+DlgLnkPopStatus : "Поле за ÑтатуÑ",
+DlgLnkPopToolbar : "Панел Ñ Ð±ÑƒÑ‚Ð¾Ð½Ð¸",
+DlgLnkPopFullScrn : "ГолÑм екран (MS IE)",
+DlgLnkPopDependent : "ЗавиÑим (Netscape)",
+DlgLnkPopWidth : "Ширина",
+DlgLnkPopHeight : "ВиÑочина",
+DlgLnkPopLeft : "Координати - X",
+DlgLnkPopTop : "Координати - Y",
+
+DlnLnkMsgNoUrl : "МолÑ, напишете Ð¿ÑŠÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚ (URL)",
+DlnLnkMsgNoEMail : "МолÑ, напишете адреÑа за е-поща",
+DlnLnkMsgNoAnchor : "МолÑ, изберете котва",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Изберете цвÑÑ‚",
+DlgColorBtnClear : "ИзчиÑти",
+DlgColorHighlight : "Текущ",
+DlgColorSelected : "Избран",
+
+// Smiley Dialog
+DlgSmileyTitle : "Добави уÑмивка",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Изберете Ñпециален Ñимвол",
+
+// Table Dialog
+DlgTableTitle : "Параметри на таблицата",
+DlgTableRows : "Редове",
+DlgTableColumns : "Колони",
+DlgTableBorder : "Размер на рамката",
+DlgTableAlign : "ПодравнÑване",
+DlgTableAlignNotSet : "<Ðе е избрано>",
+DlgTableAlignLeft : "ЛÑво",
+DlgTableAlignCenter : "Център",
+DlgTableAlignRight : "ДÑÑно",
+DlgTableWidth : "Ширина",
+DlgTableWidthPx : "пикÑели",
+DlgTableWidthPc : "проценти",
+DlgTableHeight : "ВиÑочина",
+DlgTableCellSpace : "РазÑтоÑние между клетките",
+DlgTableCellPad : "ОтÑтъп на Ñъдържанието в клетките",
+DlgTableCaption : "Заглавие",
+DlgTableSummary : "Резюме",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Параметри на клетката",
+DlgCellWidth : "Ширина",
+DlgCellWidthPx : "пикÑели",
+DlgCellWidthPc : "проценти",
+DlgCellHeight : "ВиÑочина",
+DlgCellWordWrap : "пренаÑÑне на нов ред",
+DlgCellWordWrapNotSet : "<Ðе е наÑтроено>",
+DlgCellWordWrapYes : "Да",
+DlgCellWordWrapNo : "не",
+DlgCellHorAlign : "Хоризонтално подравнÑване",
+DlgCellHorAlignNotSet : "<Ðе е наÑтроено>",
+DlgCellHorAlignLeft : "ЛÑво",
+DlgCellHorAlignCenter : "Център",
+DlgCellHorAlignRight: "ДÑÑно",
+DlgCellVerAlign : "Вертикално подравнÑване",
+DlgCellVerAlignNotSet : "<Ðе е наÑтроено>",
+DlgCellVerAlignTop : "Горе",
+DlgCellVerAlignMiddle : "По Ñредата",
+DlgCellVerAlignBottom : "Долу",
+DlgCellVerAlignBaseline : "По базовата линиÑ",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "повече от един ред",
+DlgCellCollSpan : "повече от една колона",
+DlgCellBackColor : "фонов цвÑÑ‚",
+DlgCellBorderColor : "цвÑÑ‚ на рамката",
+DlgCellBtnSelect : "Изберете...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "ТърÑи",
+DlgFindFindBtn : "ТърÑи",
+DlgFindNotFoundMsg : "Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑÑ‚ не беше намерен.",
+
+// Replace Dialog
+DlgReplaceTitle : "ЗамеÑти",
+DlgReplaceFindLbl : "ТърÑи:",
+DlgReplaceReplaceLbl : "ЗамеÑти Ñ:",
+DlgReplaceCaseChk : "Ð¡ÑŠÑ ÑÑŠÑ‰Ð¸Ñ Ñ€ÐµÐ³Ð¸ÑÑ‚ÑŠÑ€",
+DlgReplaceReplaceBtn : "ЗамеÑти",
+DlgReplaceReplAllBtn : "ЗамеÑти вÑички",
+DlgReplaceWordChk : "ТърÑи Ñъщата дума",
+
+// Paste Operations / Dialog
+PasteErrorCut : "ÐаÑтройките за ÑигурноÑÑ‚ на Ð²Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°Ð·ÑƒÑŠÑ€ не разрешават на редактора да изпълни изрÑзването. За целта използвайте клавиатурата (Ctrl+X).",
+PasteErrorCopy : "ÐаÑтройките за ÑигурноÑÑ‚ на Ð²Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°Ð·ÑƒÑŠÑ€ не разрешават на редактора да изпълни запаметÑването. За целта използвайте клавиатурата (Ctrl+C).",
+
+PasteAsText : "Вмъкни като чиÑÑ‚ текÑÑ‚",
+PasteFromWord : "Вмъкни от MS Word",
+
+DlgPasteMsg2 : "Вмъкнете тук Ñъдъжанието Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÐ°Ñ€Ð°Ñ‚Ð° (<STRONG>Ctrl+V</STRONG>) и натиÑнете <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Игнорирай шрифтовите дефиниции",
+DlgPasteRemoveStyles : "Изтрий Ñтиловите дефиниции",
+
+// Color Picker
+ColorAutomatic : "По подразбиране",
+ColorMoreColors : "Други цветове...",
+
+// Document Properties
+DocProps : "Параметри на документа",
+
+// Anchor Dialog
+DlgAnchorTitle : "Параметри на котвата",
+DlgAnchorName : "Име на котвата",
+DlgAnchorErrorName : "МолÑ, въведете име на котвата",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "ЛипÑва в речника",
+DlgSpellChangeTo : "Промени на",
+DlgSpellBtnIgnore : "Игнорирай",
+DlgSpellBtnIgnoreAll : "Игнорирай вÑички",
+DlgSpellBtnReplace : "ЗамеÑти",
+DlgSpellBtnReplaceAll : "ЗамеÑти вÑички",
+DlgSpellBtnUndo : "Отмени",
+DlgSpellNoSuggestions : "- ÐÑма Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ -",
+DlgSpellProgress : "Извършване на проверката за правопиÑ...",
+DlgSpellNoMispell : "Проверката за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑŠÑ€ÑˆÐµÐ½Ð°: не Ñа открити правопиÑни грешки",
+DlgSpellNoChanges : "Проверката за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑŠÑ€ÑˆÐµÐ½Ð°: нÑма променени думи",
+DlgSpellOneChange : "Проверката за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑŠÑ€ÑˆÐµÐ½Ð°: една дума е променена",
+DlgSpellManyChanges : "Проверката за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑŠÑ€ÑˆÐµÐ½Ð°: %1 думи Ñа променени",
+
+IeSpellDownload : "ИнÑтрументът за проверка на Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð½Ðµ е инÑталиран. Желаете ли да го инÑталирате ?",
+
+// Button Dialog
+DlgButtonText : "ТекÑÑ‚ (СтойноÑÑ‚)",
+DlgButtonType : "Тип",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Име",
+DlgCheckboxValue : "СтойноÑÑ‚",
+DlgCheckboxSelected : "Отметнато",
+
+// Form Dialog
+DlgFormName : "Име",
+DlgFormAction : "ДейÑтвие",
+DlgFormMethod : "Метод",
+
+// Select Field Dialog
+DlgSelectName : "Име",
+DlgSelectValue : "СтойноÑÑ‚",
+DlgSelectSize : "Размер",
+DlgSelectLines : "линии",
+DlgSelectChkMulti : "Разрешено множеÑтвено Ñелектиране",
+DlgSelectOpAvail : "Възможни опции",
+DlgSelectOpText : "ТекÑÑ‚",
+DlgSelectOpValue : "СтойноÑÑ‚",
+DlgSelectBtnAdd : "Добави",
+DlgSelectBtnModify : "Промени",
+DlgSelectBtnUp : "Ðагоре",
+DlgSelectBtnDown : "Ðадолу",
+DlgSelectBtnSetValue : "ÐаÑтрой като избрана ÑтойноÑÑ‚",
+DlgSelectBtnDelete : "Изтрий",
+
+// Textarea Dialog
+DlgTextareaName : "Име",
+DlgTextareaCols : "Колони",
+DlgTextareaRows : "Редове",
+
+// Text Field Dialog
+DlgTextName : "Име",
+DlgTextValue : "СтойноÑÑ‚",
+DlgTextCharWidth : "Ширина на Ñимволите",
+DlgTextMaxChars : "МакÑимум Ñимволи",
+DlgTextType : "Тип",
+DlgTextTypeText : "ТекÑÑ‚",
+DlgTextTypePass : "Парола",
+
+// Hidden Field Dialog
+DlgHiddenName : "Име",
+DlgHiddenValue : "СтойноÑÑ‚",
+
+// Bulleted List Dialog
+BulletedListProp : "Параметри на Ð½ÐµÐ½ÑƒÐ¼ÐµÑ€Ð¸Ñ€Ð°Ð½Ð¸Ñ ÑпиÑък",
+NumberedListProp : "Параметри на Ð½ÑƒÐ¼ÐµÑ€Ð¸Ñ€Ð°Ð½Ð¸Ñ ÑпиÑък",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Тип",
+DlgLstTypeCircle : "ОкръжноÑÑ‚",
+DlgLstTypeDisc : "Кръг",
+DlgLstTypeSquare : "Квадрат",
+DlgLstTypeNumbers : "ЧиÑла (1, 2, 3)",
+DlgLstTypeLCase : "Малки букви (a, b, c)",
+DlgLstTypeUCase : "Големи букви (A, B, C)",
+DlgLstTypeSRoman : "Малки римÑки чиÑла (i, ii, iii)",
+DlgLstTypeLRoman : "Големи римÑки чиÑла (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Общи",
+DlgDocBackTab : "Фон",
+DlgDocColorsTab : "Цветове и отÑтъпи",
+DlgDocMetaTab : "Мета данни",
+
+DlgDocPageTitle : "Заглавие на Ñтраницата",
+DlgDocLangDir : "ПоÑока на речта",
+DlgDocLangDirLTR : "От лÑво на дÑÑно",
+DlgDocLangDirRTL : "От дÑÑно на лÑво",
+DlgDocLangCode : "Код на езика",
+DlgDocCharSet : "Кодиране на Ñимволите",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Друго кодиране на Ñимволите",
+
+DlgDocDocType : "Тип на документа",
+DlgDocDocTypeOther : "Друг тип на документа",
+DlgDocIncXHTML : "Включи XHTML декларациÑ",
+DlgDocBgColor : "ЦвÑÑ‚ на фона",
+DlgDocBgImage : "Пълен път до фоновото изображение",
+DlgDocBgNoScroll : "Ðе-повтарÑщо Ñе фоново изображение",
+DlgDocCText : "ТекÑÑ‚",
+DlgDocCLink : "Връзка",
+DlgDocCVisited : "ПоÑетена връзка",
+DlgDocCActive : "Ðктивна връзка",
+DlgDocMargins : "ОтÑтъпи на Ñтраницата",
+DlgDocMaTop : "Горе",
+DlgDocMaLeft : "ЛÑво",
+DlgDocMaRight : "ДÑÑно",
+DlgDocMaBottom : "Долу",
+DlgDocMeIndex : "Ключови думи за документа (разделени ÑÑŠÑ Ð·Ð°Ð¿ÐµÑ‚Ð°Ð¸)",
+DlgDocMeDescr : "ОпиÑание на документа",
+DlgDocMeAuthor : "Ðвтор",
+DlgDocMeCopy : "ÐвторÑки права",
+DlgDocPreview : "Изглед",
+
+// Templates Dialog
+Templates : "Шаблони",
+DlgTemplatesTitle : "Шаблони",
+DlgTemplatesSelMsg : "Изберете шаблон <br>(текущото Ñъдържание на редактора ще бъде загубено):",
+DlgTemplatesLoading : "Зареждане на ÑпиÑъка Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸Ñ‚Ðµ. ÐœÐ¾Ð»Ñ Ð¸Ð·Ñ‡Ð°ÐºÐ°Ð¹Ñ‚Ðµ...",
+DlgTemplatesNoTpl : "(ÐÑма дефинирани шаблони)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "За",
+DlgAboutBrowserInfoTab : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° браузъра",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "верÑиÑ",
+DlgAboutInfo : "За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ñетете",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bn.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bn.js
new file mode 100644
index 0000000..6382546
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bn.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bengali/Bangla language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "টূলবার গà§à¦Ÿà¦¿à§Ÿà§‡ দাও",
+ToolbarExpand : "টূলবার ছড়িয়ে দাও",
+
+// Toolbar Items and Context Menu
+Save : "সংরকà§à¦·à¦¨ কর",
+NewPage : "নতà§à¦¨ পেজ",
+Preview : "পà§à¦°à¦¿à¦­à¦¿à¦‰",
+Cut : "কাট",
+Copy : "কপি",
+Paste : "পেসà§à¦Ÿ",
+PasteText : "পেসà§à¦Ÿ (সাদা টেকà§à¦¸à¦Ÿ)",
+PasteWord : "পেসà§à¦Ÿ (শবà§à¦¦)",
+Print : "পà§à¦°à¦¿à¦¨à§à¦Ÿ",
+SelectAll : "সব সিলেকà§à¦Ÿ কর",
+RemoveFormat : "ফরমেট সরাও",
+InsertLinkLbl : "লিংকের যà§à¦•à§à¦¤ করার লেবেল",
+InsertLink : "লিংক যà§à¦•à§à¦¤ কর",
+RemoveLink : "লিংক সরাও",
+VisitLink : "Open Link", //MISSING
+Anchor : "নোঙà§à¦—র",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "ছবির লেবেল যà§à¦•à§à¦¤ কর",
+InsertImage : "ছবি যà§à¦•à§à¦¤ কর",
+InsertFlashLbl : "ফà§à¦²à¦¾à¦¶ লেবেল যà§à¦•à§à¦¤ কর",
+InsertFlash : "ফà§à¦²à¦¾à¦¶ যà§à¦•à§à¦¤ কর",
+InsertTableLbl : "টেবিলের লেবেল যà§à¦•à§à¦¤ কর",
+InsertTable : "টেবিল যà§à¦•à§à¦¤ কর",
+InsertLineLbl : "রেখা যà§à¦•à§à¦¤ কর",
+InsertLine : "রেখা যà§à¦•à§à¦¤ কর",
+InsertSpecialCharLbl: "বিশেষ অকà§à¦·à¦°à§‡à¦° লেবেল যà§à¦•à§à¦¤ কর",
+InsertSpecialChar : "বিশেষ অকà§à¦·à¦° যà§à¦•à§à¦¤ কর",
+InsertSmileyLbl : "সà§à¦®à¦¾à¦‡à¦²à§€",
+InsertSmiley : "সà§à¦®à¦¾à¦‡à¦²à§€ যà§à¦•à§à¦¤ কর",
+About : "FCKeditor কে বানিয়েছে",
+Bold : "বোলà§à¦¡",
+Italic : "ইটালিক",
+Underline : "আনà§à¦¡à¦¾à¦°à¦²à¦¾à¦‡à¦¨",
+StrikeThrough : "সà§à¦Ÿà§à¦°à¦¾à¦‡à¦• থà§à¦°à§",
+Subscript : "অধোলেখ",
+Superscript : "অভিলেখ",
+LeftJustify : "বা দিকে ঘেà¦à¦·à¦¾",
+CenterJustify : "মাঠবরাবর ঘেষা",
+RightJustify : "ডান দিকে ঘেà¦à¦·à¦¾",
+BlockJustify : "বà§à¦²à¦• জাসà§à¦Ÿà¦¿à¦«à¦¾à¦‡",
+DecreaseIndent : "ইনডেনà§à¦Ÿ কমাও",
+IncreaseIndent : "ইনডেনà§à¦Ÿ বাড়াও",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "আনডà§",
+Redo : "রি-ডà§",
+NumberedListLbl : "সাংখà§à¦¯à¦¿à¦• লিসà§à¦Ÿà§‡à¦° লেবেল",
+NumberedList : "সাংখà§à¦¯à¦¿à¦• লিসà§à¦Ÿ",
+BulletedListLbl : "বà§à¦²à§‡à¦Ÿ লিসà§à¦Ÿ লেবেল",
+BulletedList : "বà§à¦²à§‡à¦Ÿà§‡à¦¡ লিসà§à¦Ÿ",
+ShowTableBorders : "টেবিল বরà§à¦¡à¦¾à¦°",
+ShowDetails : "সবটà§à¦•à§ দেখাও",
+Style : "সà§à¦Ÿà¦¾à¦‡à¦²",
+FontFormat : "ফনà§à¦Ÿ ফরমেট",
+Font : "ফনà§à¦Ÿ",
+FontSize : "সাইজ",
+TextColor : "টেকà§à¦¸à§à¦Ÿ রং",
+BGColor : "বেকগà§à¦°à¦¾à¦‰à¦¨à§à¦¡ রং",
+Source : "সোরà§à¦¸",
+Find : "খোজো",
+Replace : "রিপà§à¦²à§‡à¦¸",
+SpellCheck : "বানান চেক",
+UniversalKeyboard : "সারà§à¦¬à¦œà¦¨à§€à¦¨ কিবোরà§à¦¡",
+PageBreakLbl : "পেজ বà§à¦°à§‡à¦• লেবেল",
+PageBreak : "পেজ বà§à¦°à§‡à¦•",
+
+Form : "ফরà§à¦®",
+Checkbox : "চেক বাকà§à¦¸",
+RadioButton : "রেডিও বাটন",
+TextField : "টেকà§à¦¸à¦Ÿ ফীলà§à¦¡",
+Textarea : "টেকà§à¦¸à¦Ÿ à¦à¦°à¦¿à§Ÿà¦¾",
+HiddenField : "গà§à¦ªà§à¦¤ ফীলà§à¦¡",
+Button : "বাটন",
+SelectionField : "বাছাই ফীলà§à¦¡",
+ImageButton : "ছবির বাটন",
+
+FitWindow : "উইনà§à¦¡à§‹ ফিট কর",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "লিংক সমà§à¦ªà¦¾à¦¦à¦¨",
+CellCM : "সেল",
+RowCM : "রো",
+ColumnCM : "কলাম",
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "রো মà§à¦›à§‡ দাও",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "কলাম মà§à¦›à§‡ দাও",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "সেল মà§à¦›à§‡ দাও",
+MergeCells : "সেল জোড়া দাও",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "টেবিল ডিলীট কর",
+CellProperties : "সেলের পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦œ",
+TableProperties : "টেবিল পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+ImageProperties : "ছবি পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+FlashProperties : "ফà§à¦²à¦¾à¦¶ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+
+AnchorProp : "নোঙর পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+ButtonProp : "বাটন পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+CheckboxProp : "চেক বকà§à¦¸ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+HiddenFieldProp : "গà§à¦ªà§à¦¤ ফীলà§à¦¡ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+RadioButtonProp : "রেডিও বাটন পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+ImageButtonProp : "ছবি বাটন পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+TextFieldProp : "টেকà§à¦¸à¦Ÿ ফীলà§à¦¡ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+SelectionFieldProp : "বাছাই ফীলà§à¦¡ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+TextareaProp : "টেকà§à¦¸à¦Ÿ à¦à¦°à¦¿à§Ÿà¦¾ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+FormProp : "ফরà§à¦® পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+
+FontFormats : "সাধারণ;ফরà§à¦®à§‡à¦Ÿà§‡à¦¡;ঠিকানা;শীরà§à¦·à¦• ১;শীরà§à¦·à¦• ২;শীরà§à¦·à¦• ৩;শীরà§à¦·à¦• ৪;শীরà§à¦·à¦• ৫;শীরà§à¦·à¦• ৬;শীরà§à¦·à¦• (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML পà§à¦°à¦¸à§‡à¦¸ করা হচà§à¦›à§‡",
+Done : "শেষ হয়েছে",
+PasteWordConfirm : "যে টেকসà§à¦Ÿà¦Ÿà¦¿ আপনি পেসà§à¦Ÿ করতে চাচà§à¦›à§‡à¦¨ মনে হচà§à¦›à§‡ সেটি ওয়ারà§à¦¡ থেকে কপি করা। আপনি কি পেসà§à¦Ÿ করার আগে à¦à¦•à§‡ পরিষà§à¦•à¦¾à¦° করতে চান?",
+NotCompatiblePaste : "à¦à¦‡ কমানà§à¦¡à¦Ÿà¦¿ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ইনà§à¦Ÿà¦¾à¦°à¦¨à§‡à¦Ÿ à¦à¦•à§à¦¸à¦ªà§à¦²à§‹à¦°à¦¾à¦° ৫.০ বা তার পরের ভারà§à¦¸à¦¨à§‡ পাওয়া সমà§à¦­à¦¬à¥¤ আপনি কি পরিষà§à¦•à¦¾à¦° না করেই পেসà§à¦Ÿ করতে চান?",
+UnknownToolbarItem : "অজানা টà§à¦²à¦¬à¦¾à¦° আইটেম \"%1\"",
+UnknownCommand : "অজানা কমানà§à¦¡ \"%1\"",
+NotImplemented : "কমানà§à¦¡ ইমপà§à¦²à¦¿à¦®à§‡à¦¨à§à¦Ÿ করা হয়নি",
+UnknownToolbarSet : "টà§à¦²à¦¬à¦¾à¦° সেট \"%1\" à¦à¦° অসà§à¦¤à¦¿à¦¤à§à¦¬ নেই",
+NoActiveX : "আপনার বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° সà§à¦°à¦•à§à¦·à¦¾ সেটিংস কারনে à¦à¦¡à¦¿à¦Ÿà¦°à§‡à¦° কিছৠফিচার পাওয়া নাও যেতে পারে। আপনাকে অবশà§à¦¯à¦‡ \"Run ActiveX controls and plug-ins\" à¦à¦¨à¦¾à¦¬à§‡à¦² করে নিতে হবে। আপনি ভà§à¦²à¦­à§à¦°à¦¾à¦¨à§à¦¤à¦¿ কিছৠকিছৠফিচারের অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¦¿ উপলবà§à¦§à¦¿ করতে পারেন।",
+BrowseServerBlocked : "রিসোরà§à¦¸ বà§à¦°à¦¾à¦‰à¦œà¦¾à¦° খোলা গেল না। নিশà§à¦šà¦¿à¦¤ করà§à¦¨ যে সব পপআপ বà§à¦²à¦•à¦¾à¦° বনà§à¦§ করা আছে।",
+DialogBlocked : "ডায়ালগ ইউনà§à¦¡à§‹ খোলা গেল না। নিশà§à¦šà¦¿à¦¤ করà§à¦¨ যে সব পপআপ বà§à¦²à¦•à¦¾à¦° বনà§à¦§ করা আছে।",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "ওকে",
+DlgBtnCancel : "বাতিল",
+DlgBtnClose : "বনà§à¦§ কর",
+DlgBtnBrowseServer : "বà§à¦°à¦¾à¦‰à¦œ সারà§à¦­à¦¾à¦°",
+DlgAdvancedTag : "à¦à¦¡à¦­à¦¾à¦¨à§à¦¸à¦¡",
+DlgOpOther : "<অনà§à¦¯>",
+DlgInfoTab : "তথà§à¦¯",
+DlgAlertUrl : "দয়া করে URL যà§à¦•à§à¦¤ করà§à¦¨",
+
+// General Dialogs Labels
+DlgGenNotSet : "<সেট নেই>",
+DlgGenId : "আইডি",
+DlgGenLangDir : "ভাষা লেখার দিক",
+DlgGenLangDirLtr : "বাম থেকে ডান (LTR)",
+DlgGenLangDirRtl : "ডান থেকে বাম (RTL)",
+DlgGenLangCode : "ভাষা কোড",
+DlgGenAccessKey : "à¦à¦•à§à¦¸à§‡à¦¸ কী",
+DlgGenName : "নাম",
+DlgGenTabIndex : "টà§à¦¯à¦¾à¦¬ ইনà§à¦¡à§‡à¦•à§à¦¸",
+DlgGenLongDescr : "URL à¦à¦° লমà§à¦¬à¦¾ বরà§à¦£à¦¨à¦¾",
+DlgGenClass : "সà§à¦Ÿà¦¾à¦‡à¦²-শীট কà§à¦²à¦¾à¦¸",
+DlgGenTitle : "পরামরà§à¦¶ শীরà§à¦·à¦•",
+DlgGenContType : "পরামরà§à¦¶ কনà§à¦Ÿà§‡à¦¨à§à¦Ÿà§‡à¦° পà§à¦°à¦•à¦¾à¦°",
+DlgGenLinkCharset : "লিংক রিসোরà§à¦¸ কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦° সেট",
+DlgGenStyle : "সà§à¦Ÿà¦¾à¦‡à¦²",
+
+// Image Dialog
+DlgImgTitle : "ছবির পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+DlgImgInfoTab : "ছবির তথà§à¦¯",
+DlgImgBtnUpload : "ইহাকে সারà§à¦­à¦¾à¦°à§‡ পà§à¦°à§‡à¦°à¦¨ কর",
+DlgImgURL : "URL",
+DlgImgUpload : "আপলোড",
+DlgImgAlt : "বিকলà§à¦ª টেকà§à¦¸à¦Ÿ",
+DlgImgWidth : "পà§à¦°à¦¸à§à¦¥",
+DlgImgHeight : "দৈরà§à¦˜à§à¦¯",
+DlgImgLockRatio : "অনà§à¦ªà¦¾à¦¤ লক কর",
+DlgBtnResetSize : "সাইজ পূরà§à¦¬à¦¾à¦¬à¦¸à§à¦¥à¦¾à§Ÿ ফিরিয়ে দাও",
+DlgImgBorder : "বরà§à¦¡à¦¾à¦°",
+DlgImgHSpace : "হরাইজনà§à¦Ÿà¦¾à¦² সà§à¦ªà§‡à¦¸",
+DlgImgVSpace : "ভারà§à¦Ÿà¦¿à¦•à§‡à¦² সà§à¦ªà§‡à¦¸",
+DlgImgAlign : "à¦à¦²à¦¾à¦‡à¦¨",
+DlgImgAlignLeft : "বামে",
+DlgImgAlignAbsBottom: "Abs নীচে",
+DlgImgAlignAbsMiddle: "Abs উপর",
+DlgImgAlignBaseline : "মূল রেখা",
+DlgImgAlignBottom : "নীচে",
+DlgImgAlignMiddle : "মধà§à¦¯",
+DlgImgAlignRight : "ডানে",
+DlgImgAlignTextTop : "টেকà§à¦¸à¦Ÿ উপর",
+DlgImgAlignTop : "উপর",
+DlgImgPreview : "পà§à¦°à§€à¦­à¦¿à¦‰",
+DlgImgAlertUrl : "অনà§à¦—à§à¦°à¦¹à¦• করে ছবির URL টাইপ করà§à¦¨",
+DlgImgLinkTab : "লিংক",
+
+// Flash Dialog
+DlgFlashTitle : "ফà§à¦²à§à¦¯à¦¾à¦¶ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+DlgFlashChkPlay : "অটো পà§à¦²à§‡",
+DlgFlashChkLoop : "লূপ",
+DlgFlashChkMenu : "ফà§à¦²à§à¦¯à¦¾à¦¶ মেনৠà¦à¦¨à¦¾à¦¬à¦² কর",
+DlgFlashScale : "সà§à¦•à§‡à¦²",
+DlgFlashScaleAll : "সব দেখাও",
+DlgFlashScaleNoBorder : "কোনো বরà§à¦¡à¦¾à¦° নেই",
+DlgFlashScaleFit : "নিখà§à¦à¦¤ ফিট",
+
+// Link Dialog
+DlgLnkWindowTitle : "লিংক",
+DlgLnkInfoTab : "লিংক তথà§à¦¯",
+DlgLnkTargetTab : "টারà§à¦—েট",
+
+DlgLnkType : "লিংক পà§à¦°à¦•à¦¾à¦°",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "à¦à¦‡ পেজে নোঙর কর",
+DlgLnkTypeEMail : "ইমেইল",
+DlgLnkProto : "পà§à¦°à§‹à¦Ÿà§‹à¦•à¦²",
+DlgLnkProtoOther : "<অনà§à¦¯>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "নোঙর বাছাই",
+DlgLnkAnchorByName : "নোঙরের নাম দিয়ে",
+DlgLnkAnchorById : "নোঙরের আইডি দিয়ে",
+DlgLnkNoAnchors : "(No anchors available in the document)", //MISSING
+DlgLnkEMail : "ইমেইল ঠিকানা",
+DlgLnkEMailSubject : "মেসেজের বিষয়",
+DlgLnkEMailBody : "মেসেজের দেহ",
+DlgLnkUpload : "আপলোড",
+DlgLnkBtnUpload : "à¦à¦•à§‡ সারà§à¦­à¦¾à¦°à§‡ পাঠাও",
+
+DlgLnkTarget : "টারà§à¦—েট",
+DlgLnkTargetFrame : "<ফà§à¦°à§‡à¦®>",
+DlgLnkTargetPopup : "<পপআপ উইনà§à¦¡à§‹>",
+DlgLnkTargetBlank : "নতà§à¦¨ উইনà§à¦¡à§‹ (_blank)",
+DlgLnkTargetParent : "মূল উইনà§à¦¡à§‹ (_parent)",
+DlgLnkTargetSelf : "à¦à¦‡ উইনà§à¦¡à§‹ (_self)",
+DlgLnkTargetTop : "শীরà§à¦· উইনà§à¦¡à§‹ (_top)",
+DlgLnkTargetFrameName : "টারà§à¦—েট ফà§à¦°à§‡à¦®à§‡à¦° নাম",
+DlgLnkPopWinName : "পপআপ উইনà§à¦¡à§‹à¦° নাম",
+DlgLnkPopWinFeat : "পপআপ উইনà§à¦¡à§‹ ফীচার সমূহ",
+DlgLnkPopResize : "রিসাইজ করা সমà§à¦­à¦¬",
+DlgLnkPopLocation : "লোকেশন বার",
+DlgLnkPopMenu : "মেনà§à¦¯à§ বার",
+DlgLnkPopScroll : "সà§à¦•à§à¦°à¦² বার",
+DlgLnkPopStatus : "সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¾à¦¸ বার",
+DlgLnkPopToolbar : "টà§à¦² বার",
+DlgLnkPopFullScrn : "পূরà§à¦£ পরà§à¦¦à¦¾ জà§à§œà§‡ (IE)",
+DlgLnkPopDependent : "ডিপেনà§à¦¡à§‡à¦¨à§à¦Ÿ (Netscape)",
+DlgLnkPopWidth : "পà§à¦°à¦¸à§à¦¥",
+DlgLnkPopHeight : "দৈরà§à¦˜à§à¦¯",
+DlgLnkPopLeft : "বামের পজিশন",
+DlgLnkPopTop : "ডানের পজিশন",
+
+DlnLnkMsgNoUrl : "অনà§à¦—à§à¦°à¦¹ করে URL লিংক টাইপ করà§à¦¨",
+DlnLnkMsgNoEMail : "অনà§à¦—à§à¦°à¦¹ করে ইমেইল à¦à¦¡à§à¦°à§‡à¦¸ টাইপ করà§à¦¨",
+DlnLnkMsgNoAnchor : "অনà§à¦—à§à¦°à¦¹ করে নোঙর বাছাই করà§à¦¨",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "রং বাছাই কর",
+DlgColorBtnClear : "পরিষà§à¦•à¦¾à¦° কর",
+DlgColorHighlight : "হাইলাইট",
+DlgColorSelected : "সিলেকà§à¦Ÿà§‡à¦¡",
+
+// Smiley Dialog
+DlgSmileyTitle : "সà§à¦®à¦¾à¦‡à¦²à§€ যà§à¦•à§à¦¤ কর",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "বিশেষ কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° বাছাই কর",
+
+// Table Dialog
+DlgTableTitle : "টেবিল পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+DlgTableRows : "রো",
+DlgTableColumns : "কলাম",
+DlgTableBorder : "বরà§à¦¡à¦¾à¦° সাইজ",
+DlgTableAlign : "à¦à¦²à¦¾à¦‡à¦¨à¦®à§‡à¦¨à§à¦Ÿ",
+DlgTableAlignNotSet : "<সেট নেই>",
+DlgTableAlignLeft : "বামে",
+DlgTableAlignCenter : "মাà¦à¦–ানে",
+DlgTableAlignRight : "ডানে",
+DlgTableWidth : "পà§à¦°à¦¸à§à¦¥",
+DlgTableWidthPx : "পিকà§à¦¸à§‡à¦²",
+DlgTableWidthPc : "শতকরা",
+DlgTableHeight : "দৈরà§à¦˜à§à¦¯",
+DlgTableCellSpace : "সেল সà§à¦ªà§‡à¦¸",
+DlgTableCellPad : "সেল পà§à¦¯à¦¾à¦¡à¦¿à¦‚",
+DlgTableCaption : "শীরà§à¦·à¦•",
+DlgTableSummary : "সারাংশ",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "সেল পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+DlgCellWidth : "পà§à¦°à¦¸à§à¦¥",
+DlgCellWidthPx : "পিকà§à¦¸à§‡à¦²",
+DlgCellWidthPc : "শতকরা",
+DlgCellHeight : "দৈরà§à¦˜à§à¦¯",
+DlgCellWordWrap : "ওয়ারà§à¦¡ রেপ",
+DlgCellWordWrapNotSet : "<সেট নেই>",
+DlgCellWordWrapYes : "হাà¦",
+DlgCellWordWrapNo : "না",
+DlgCellHorAlign : "হরাইজনà§à¦Ÿà¦¾à¦² à¦à¦²à¦¾à¦‡à¦¨à¦®à§‡à¦¨à§à¦Ÿ",
+DlgCellHorAlignNotSet : "<সেট নেই>",
+DlgCellHorAlignLeft : "বামে",
+DlgCellHorAlignCenter : "মাà¦à¦–ানে",
+DlgCellHorAlignRight: "ডানে",
+DlgCellVerAlign : "ভারà§à¦Ÿà¦¿à¦•à§à¦¯à¦¾à¦² à¦à¦²à¦¾à¦‡à¦¨à¦®à§‡à¦¨à§à¦Ÿ",
+DlgCellVerAlignNotSet : "<সেট নেই>",
+DlgCellVerAlignTop : "উপর",
+DlgCellVerAlignMiddle : "মধà§à¦¯",
+DlgCellVerAlignBottom : "নীচে",
+DlgCellVerAlignBaseline : "মূলরেখা",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "রো সà§à¦ªà§à¦¯à¦¾à¦¨",
+DlgCellCollSpan : "কলাম সà§à¦ªà§à¦¯à¦¾à¦¨",
+DlgCellBackColor : "বà§à¦¯à¦¾à¦•à¦—à§à¦°à¦¾à¦‰à¦¨à§à¦¡ রং",
+DlgCellBorderColor : "বরà§à¦¡à¦¾à¦°à§‡à¦° রং",
+DlgCellBtnSelect : "বাছাই কর",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "খোà¦à¦œà§‹",
+DlgFindFindBtn : "খোà¦à¦œà§‹",
+DlgFindNotFoundMsg : "আপনার উলà§à¦²à§‡à¦–িত টেকসà§à¦Ÿ পাওয়া যায়নি",
+
+// Replace Dialog
+DlgReplaceTitle : "বদলে দাও",
+DlgReplaceFindLbl : "যা খà§à¦à¦œà¦¤à§‡ হবে:",
+DlgReplaceReplaceLbl : "যার সাথে বদলাতে হবে:",
+DlgReplaceCaseChk : "কেস মিলাও",
+DlgReplaceReplaceBtn : "বদলে দাও",
+DlgReplaceReplAllBtn : "সব বদলে দাও",
+DlgReplaceWordChk : "পà§à¦°à¦¾ শবà§à¦¦ মেলাও",
+
+// Paste Operations / Dialog
+PasteErrorCut : "আপনার বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° সà§à¦°à¦•à§à¦·à¦¾ সেটিংস à¦à¦¡à¦¿à¦Ÿà¦°à¦•à§‡ অটোমেটিক কাট করার অনà§à¦®à¦¤à¦¿ দেয়নি। দয়া করে à¦à¦‡ কাজের জনà§à¦¯ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ (Ctrl+X)।",
+PasteErrorCopy : "আপনার বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° সà§à¦°à¦•à§à¦·à¦¾ সেটিংস à¦à¦¡à¦¿à¦Ÿà¦°à¦•à§‡ অটোমেটিক কপি করার অনà§à¦®à¦¤à¦¿ দেয়নি। দয়া করে à¦à¦‡ কাজের জনà§à¦¯ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ (Ctrl+C)।",
+
+PasteAsText : "সাদা টেকà§à¦¸à¦Ÿ হিসেবে পেসà§à¦Ÿ কর",
+PasteFromWord : "ওয়ারà§à¦¡ থেকে পেসà§à¦Ÿ কর",
+
+DlgPasteMsg2 : "অনà§à¦—à§à¦°à¦¹ করে নীচের বাকà§à¦¸à§‡ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করে (<STRONG>Ctrl+V</STRONG>) পেসà§à¦Ÿ করà§à¦¨ à¦à¦¬à¦‚ <STRONG>OK</STRONG> চাপ দিন",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "ফনà§à¦Ÿ ফেস ডেফিনেশন ইগনোর করà§à¦¨",
+DlgPasteRemoveStyles : "সà§à¦Ÿà¦¾à¦‡à¦² ডেফিনেশন সরিয়ে দিন",
+
+// Color Picker
+ColorAutomatic : "অটোমেটিক",
+ColorMoreColors : "আরও রং...",
+
+// Document Properties
+DocProps : "ডকà§à¦¯à§à¦®à§‡à¦¨à§à¦Ÿ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+
+// Anchor Dialog
+DlgAnchorTitle : "নোঙরের পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+DlgAnchorName : "নোঙরের নাম",
+DlgAnchorErrorName : "নোঙরের নাম টাইপ করà§à¦¨",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "শবà§à¦¦à¦•à§‹à¦·à§‡ নেই",
+DlgSpellChangeTo : "à¦à¦¤à§‡ বদলাও",
+DlgSpellBtnIgnore : "ইগনোর কর",
+DlgSpellBtnIgnoreAll : "সব ইগনোর কর",
+DlgSpellBtnReplace : "বদলে দাও",
+DlgSpellBtnReplaceAll : "সব বদলে দাও",
+DlgSpellBtnUndo : "আনà§à¦¡à§",
+DlgSpellNoSuggestions : "- কোন সাজেশন নেই -",
+DlgSpellProgress : "বানান পরীকà§à¦·à¦¾ চলছে...",
+DlgSpellNoMispell : "বানান পরীকà§à¦·à¦¾ শেষ: কোন ভà§à¦² বানান পাওয়া যায়নি",
+DlgSpellNoChanges : "বানান পরীকà§à¦·à¦¾ শেষ: কোন শবà§à¦¦ পরিবরà§à¦¤à¦¨ করা হয়নি",
+DlgSpellOneChange : "বানান পরীকà§à¦·à¦¾ শেষ: à¦à¦•à¦Ÿà¦¿ মাতà§à¦° শবà§à¦¦ পরিবরà§à¦¤à¦¨ করা হয়েছে",
+DlgSpellManyChanges : "বানান পরীকà§à¦·à¦¾ শেষ: %1 গà§à¦²à§‹ শবà§à¦¦ বদলে গà§à¦¯à¦¾à¦›à§‡",
+
+IeSpellDownload : "বানান পরীকà§à¦·à¦• ইনসà§à¦Ÿà¦² করা নেই। আপনি কি à¦à¦–নই à¦à¦Ÿà¦¾ ডাউনলোড করতে চান?",
+
+// Button Dialog
+DlgButtonText : "টেকà§à¦¸à¦Ÿ (ভà§à¦¯à¦¾à¦²à§)",
+DlgButtonType : "পà§à¦°à¦•à¦¾à¦°",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "নাম",
+DlgCheckboxValue : "ভà§à¦¯à¦¾à¦²à§",
+DlgCheckboxSelected : "সিলেকà§à¦Ÿà§‡à¦¡",
+
+// Form Dialog
+DlgFormName : "নাম",
+DlgFormAction : "à¦à¦•à¦¶à§à¦¯à¦¨",
+DlgFormMethod : "পদà§à¦§à¦¤à¦¿",
+
+// Select Field Dialog
+DlgSelectName : "নাম",
+DlgSelectValue : "ভà§à¦¯à¦¾à¦²à§",
+DlgSelectSize : "সাইজ",
+DlgSelectLines : "লাইন সমূহ",
+DlgSelectChkMulti : "à¦à¦•à¦¾à¦§à¦¿à¦• সিলেকশন à¦à¦²à¦¾à¦‰ কর",
+DlgSelectOpAvail : "অনà§à¦¯à¦¾à¦¨à§à¦¯ বিকলà§à¦ª",
+DlgSelectOpText : "টেকà§à¦¸à¦Ÿ",
+DlgSelectOpValue : "ভà§à¦¯à¦¾à¦²à§",
+DlgSelectBtnAdd : "যà§à¦•à§à¦¤",
+DlgSelectBtnModify : "বদলে দাও",
+DlgSelectBtnUp : "উপর",
+DlgSelectBtnDown : "নীচে",
+DlgSelectBtnSetValue : "বাছাই করা ভà§à¦¯à¦¾à¦²à§ হিসেবে সেট কর",
+DlgSelectBtnDelete : "ডিলীট",
+
+// Textarea Dialog
+DlgTextareaName : "নাম",
+DlgTextareaCols : "কলাম",
+DlgTextareaRows : "রো",
+
+// Text Field Dialog
+DlgTextName : "নাম",
+DlgTextValue : "ভà§à¦¯à¦¾à¦²à§",
+DlgTextCharWidth : "কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° পà§à¦°à¦¶à¦¸à§à¦¤à¦¤à¦¾",
+DlgTextMaxChars : "সরà§à¦¬à¦¾à¦§à¦¿à¦• কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦°",
+DlgTextType : "টাইপ",
+DlgTextTypeText : "টেকà§à¦¸à¦Ÿ",
+DlgTextTypePass : "পাসওয়ারà§à¦¡",
+
+// Hidden Field Dialog
+DlgHiddenName : "নাম",
+DlgHiddenValue : "ভà§à¦¯à¦¾à¦²à§",
+
+// Bulleted List Dialog
+BulletedListProp : "বà§à¦²à§‡à¦Ÿà§‡à¦¡ সূচী পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+NumberedListProp : "সাংখà§à¦¯à¦¿à¦• সূচী পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "পà§à¦°à¦•à¦¾à¦°",
+DlgLstTypeCircle : "গোল",
+DlgLstTypeDisc : "ডিসà§à¦•",
+DlgLstTypeSquare : "চৌকোণা",
+DlgLstTypeNumbers : "সংখà§à¦¯à¦¾ (1, 2, 3)",
+DlgLstTypeLCase : "ছোট অকà§à¦·à¦° (a, b, c)",
+DlgLstTypeUCase : "বড় অকà§à¦·à¦° (A, B, C)",
+DlgLstTypeSRoman : "ছোট রোমান সংখà§à¦¯à¦¾ (i, ii, iii)",
+DlgLstTypeLRoman : "বড় রোমান সংখà§à¦¯à¦¾ (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "সাধারন",
+DlgDocBackTab : "বà§à¦¯à¦¾à¦•à¦—à§à¦°à¦¾à¦‰à¦¨à§à¦¡",
+DlgDocColorsTab : "রং à¦à¦¬à¦‚ মারà§à¦œà¦¿à¦¨",
+DlgDocMetaTab : "মেটাডেটা",
+
+DlgDocPageTitle : "পেজ শীরà§à¦·à¦•",
+DlgDocLangDir : "ভাষা লিখার দিক",
+DlgDocLangDirLTR : "বাম থেকে ডানে (LTR)",
+DlgDocLangDirRTL : "ডান থেকে বামে (RTL)",
+DlgDocLangCode : "ভাষা কোড",
+DlgDocCharSet : "কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° সেট à¦à¦¨à¦•à§‹à¦¡à¦¿à¦‚",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "অনà§à¦¯ কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° সেট à¦à¦¨à¦•à§‹à¦¡à¦¿à¦‚",
+
+DlgDocDocType : "ডকà§à¦¯à§à¦®à§‡à¦¨à§à¦Ÿ টাইপ হেডিং",
+DlgDocDocTypeOther : "অনà§à¦¯ ডকà§à¦¯à§à¦®à§‡à¦¨à§à¦Ÿ টাইপ হেডিং",
+DlgDocIncXHTML : "XHTML ডেকà§à¦²à¦¾à¦°à§‡à¦¶à¦¨ যà§à¦•à§à¦¤ কর",
+DlgDocBgColor : "বà§à¦¯à¦¾à¦•à¦—à§à¦°à¦¾à¦‰à¦¨à§à¦¡ রং",
+DlgDocBgImage : "বà§à¦¯à¦¾à¦•à¦—à§à¦°à¦¾à¦‰à¦¨à§à¦¡ ছবির URL",
+DlgDocBgNoScroll : "সà§à¦•à§à¦°à¦²à¦¹à§€à¦¨ বà§à¦¯à¦¾à¦•à¦—à§à¦°à¦¾à¦‰à¦¨à§à¦¡",
+DlgDocCText : "টেকà§à¦¸à¦Ÿ",
+DlgDocCLink : "লিংক",
+DlgDocCVisited : "ভিজিট করা লিংক",
+DlgDocCActive : "সকà§à¦°à¦¿à§Ÿ লিংক",
+DlgDocMargins : "পেজ মারà§à¦œà¦¿à¦¨",
+DlgDocMaTop : "উপর",
+DlgDocMaLeft : "বামে",
+DlgDocMaRight : "ডানে",
+DlgDocMaBottom : "নীচে",
+DlgDocMeIndex : "ডকà§à¦¯à§à¦®à§‡à¦¨à§à¦Ÿ ইনà§à¦¡à§‡à¦•à§à¦¸ কিওয়ারà§à¦¡ (কমা দà§à¦¬à¦¾à¦°à¦¾ বিচà§à¦›à¦¿à¦¨à§à¦¨)",
+DlgDocMeDescr : "ডকà§à¦¯à§‚মেনà§à¦Ÿ বরà§à¦£à¦¨à¦¾",
+DlgDocMeAuthor : "লেখক",
+DlgDocMeCopy : "কপীরাইট",
+DlgDocPreview : "পà§à¦°à§€à¦­à¦¿à¦‰",
+
+// Templates Dialog
+Templates : "টেমপà§à¦²à§‡à¦Ÿ",
+DlgTemplatesTitle : "কনটেনà§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿ",
+DlgTemplatesSelMsg : "অনà§à¦—à§à¦°à¦¹ করে à¦à¦¡à¦¿à¦Ÿà¦°à§‡ ওপেন করার জনà§à¦¯ টেমপà§à¦²à§‡à¦Ÿ বাছাই করà§à¦¨<br>(আসল কনটেনà§à¦Ÿ হারিয়ে যাবে):",
+DlgTemplatesLoading : "টেমপà§à¦²à§‡à¦Ÿ লিসà§à¦Ÿ হারিয়ে যাবে। অনà§à¦—à§à¦°à¦¹ করে অপেকà§à¦·à¦¾ করà§à¦¨...",
+DlgTemplatesNoTpl : "(কোন টেমপà§à¦²à§‡à¦Ÿ ডিফাইন করা নেই)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "কে বানিয়েছে",
+DlgAboutBrowserInfoTab : "বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° বà§à¦¯à¦¾à¦ªà¦¾à¦°à§‡ তথà§à¦¯",
+DlgAboutLicenseTab : "লাইসেনà§à¦¸",
+DlgAboutVersion : "ভারà§à¦¸à¦¨",
+DlgAboutInfo : "আরও তথà§à¦¯à§‡à¦° জনà§à¦¯ যান",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bs.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bs.js
new file mode 100644
index 0000000..1040901
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bs.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bosnian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Skupi trake sa alatima",
+ToolbarExpand : "Otvori trake sa alatima",
+
+// Toolbar Items and Context Menu
+Save : "Snimi",
+NewPage : "Novi dokument",
+Preview : "Prikaži",
+Cut : "Izreži",
+Copy : "Kopiraj",
+Paste : "Zalijepi",
+PasteText : "Zalijepi kao obièan tekst",
+PasteWord : "Zalijepi iz Word-a",
+Print : "Å tampaj",
+SelectAll : "Selektuj sve",
+RemoveFormat : "Poništi format",
+InsertLinkLbl : "Link",
+InsertLink : "Ubaci/Izmjeni link",
+RemoveLink : "Izbriši link",
+VisitLink : "Open Link", //MISSING
+Anchor : "Insert/Edit Anchor", //MISSING
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Slika",
+InsertImage : "Ubaci/Izmjeni sliku",
+InsertFlashLbl : "Flash", //MISSING
+InsertFlash : "Insert/Edit Flash", //MISSING
+InsertTableLbl : "Tabela",
+InsertTable : "Ubaci/Izmjeni tabelu",
+InsertLineLbl : "Linija",
+InsertLine : "Ubaci horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakter",
+InsertSpecialChar : "Ubaci specijalni karater",
+InsertSmileyLbl : "Smješko",
+InsertSmiley : "Ubaci smješka",
+About : "O FCKeditor-u",
+Bold : "Boldiraj",
+Italic : "Ukosi",
+Underline : "Podvuci",
+StrikeThrough : "Precrtaj",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Lijevo poravnanje",
+CenterJustify : "Centralno poravnanje",
+RightJustify : "Desno poravnanje",
+BlockJustify : "Puno poravnanje",
+DecreaseIndent : "Smanji uvod",
+IncreaseIndent : "Poveæaj uvod",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Vrati",
+Redo : "Ponovi",
+NumberedListLbl : "Numerisana lista",
+NumberedList : "Ubaci/Izmjeni numerisanu listu",
+BulletedListLbl : "Lista",
+BulletedList : "Ubaci/Izmjeni listu",
+ShowTableBorders : "Pokaži okvire tabela",
+ShowDetails : "Pokaži detalje",
+Style : "Stil",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "Velièina",
+TextColor : "Boja teksta",
+BGColor : "Boja pozadine",
+Source : "HTML kôd",
+Find : "Naði",
+Replace : "Zamjeni",
+SpellCheck : "Check Spelling", //MISSING
+UniversalKeyboard : "Universal Keyboard", //MISSING
+PageBreakLbl : "Page Break", //MISSING
+PageBreak : "Insert Page Break", //MISSING
+
+Form : "Form", //MISSING
+Checkbox : "Checkbox", //MISSING
+RadioButton : "Radio Button", //MISSING
+TextField : "Text Field", //MISSING
+Textarea : "Textarea", //MISSING
+HiddenField : "Hidden Field", //MISSING
+Button : "Button", //MISSING
+SelectionField : "Selection Field", //MISSING
+ImageButton : "Image Button", //MISSING
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Izmjeni link",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Briši redove",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Briši kolone",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Briši æelije",
+MergeCells : "Spoji æelije",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Delete Table", //MISSING
+CellProperties : "Svojstva æelije",
+TableProperties : "Svojstva tabele",
+ImageProperties : "Svojstva slike",
+FlashProperties : "Flash Properties", //MISSING
+
+AnchorProp : "Anchor Properties", //MISSING
+ButtonProp : "Button Properties", //MISSING
+CheckboxProp : "Checkbox Properties", //MISSING
+HiddenFieldProp : "Hidden Field Properties", //MISSING
+RadioButtonProp : "Radio Button Properties", //MISSING
+ImageButtonProp : "Image Button Properties", //MISSING
+TextFieldProp : "Text Field Properties", //MISSING
+SelectionFieldProp : "Selection Field Properties", //MISSING
+TextareaProp : "Textarea Properties", //MISSING
+FormProp : "Form Properties", //MISSING
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Procesiram XHTML. Molim saèekajte...",
+Done : "Gotovo",
+PasteWordConfirm : "Tekst koji želite zalijepiti èini se da je kopiran iz Worda. Da li želite da se prvo oèisti?",
+NotCompatiblePaste : "Ova komanda je podržana u Internet Explorer-u verzijama 5.5 ili novijim. Da li želite da izvršite lijepljenje teksta bez èišæenja?",
+UnknownToolbarItem : "Nepoznata stavka sa trake sa alatima \"%1\"",
+UnknownCommand : "Nepoznata komanda \"%1\"",
+NotImplemented : "Komanda nije implementirana",
+UnknownToolbarSet : "Traka sa alatima \"%1\" ne postoji",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Odustani",
+DlgBtnClose : "Zatvori",
+DlgBtnBrowseServer : "Browse Server", //MISSING
+DlgAdvancedTag : "Naprednije",
+DlgOpOther : "<Other>", //MISSING
+DlgInfoTab : "Info", //MISSING
+DlgAlertUrl : "Please insert the URL", //MISSING
+
+// General Dialogs Labels
+DlgGenNotSet : "<nije podešeno>",
+DlgGenId : "Id",
+DlgGenLangDir : "Smjer pisanja",
+DlgGenLangDirLtr : "S lijeva na desno (LTR)",
+DlgGenLangDirRtl : "S desna na lijevo (RTL)",
+DlgGenLangCode : "Jezièni kôd",
+DlgGenAccessKey : "Pristupna tipka",
+DlgGenName : "Naziv",
+DlgGenTabIndex : "Tab indeks",
+DlgGenLongDescr : "Dugaèki opis URL-a",
+DlgGenClass : "Klase CSS stilova",
+DlgGenTitle : "Advisory title",
+DlgGenContType : "Advisory vrsta sadržaja",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Stil",
+
+// Image Dialog
+DlgImgTitle : "Svojstva slike",
+DlgImgInfoTab : "Info slike",
+DlgImgBtnUpload : "Å alji na server",
+DlgImgURL : "URL",
+DlgImgUpload : "Å alji",
+DlgImgAlt : "Tekst na slici",
+DlgImgWidth : "Å irina",
+DlgImgHeight : "Visina",
+DlgImgLockRatio : "Zakljuèaj odnos",
+DlgBtnResetSize : "Resetuj dimenzije",
+DlgImgBorder : "Okvir",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Poravnanje",
+DlgImgAlignLeft : "Lijevo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline : "Bazno",
+DlgImgAlignBottom : "Dno",
+DlgImgAlignMiddle : "Sredina",
+DlgImgAlignRight : "Desno",
+DlgImgAlignTextTop : "Vrh teksta",
+DlgImgAlignTop : "Vrh",
+DlgImgPreview : "Prikaz",
+DlgImgAlertUrl : "Molimo ukucajte URL od slike.",
+DlgImgLinkTab : "Link", //MISSING
+
+// Flash Dialog
+DlgFlashTitle : "Flash Properties", //MISSING
+DlgFlashChkPlay : "Auto Play", //MISSING
+DlgFlashChkLoop : "Loop", //MISSING
+DlgFlashChkMenu : "Enable Flash Menu", //MISSING
+DlgFlashScale : "Scale", //MISSING
+DlgFlashScaleAll : "Show all", //MISSING
+DlgFlashScaleNoBorder : "No Border", //MISSING
+DlgFlashScaleFit : "Exact Fit", //MISSING
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link info",
+DlgLnkTargetTab : "Prozor",
+
+DlgLnkType : "Tip linka",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Sidro na ovoj stranici",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<drugi>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Izaberi sidro",
+DlgLnkAnchorByName : "Po nazivu sidra",
+DlgLnkAnchorById : "Po Id-u elementa",
+DlgLnkNoAnchors : "(Nema dostupnih sidra na stranici)",
+DlgLnkEMail : "E-Mail Adresa",
+DlgLnkEMailSubject : "Subjekt poruke",
+DlgLnkEMailBody : "Poruka",
+DlgLnkUpload : "Å alji",
+DlgLnkBtnUpload : "Å alji na server",
+
+DlgLnkTarget : "Prozor",
+DlgLnkTargetFrame : "<frejm>",
+DlgLnkTargetPopup : "<popup prozor>",
+DlgLnkTargetBlank : "Novi prozor (_blank)",
+DlgLnkTargetParent : "Glavni prozor (_parent)",
+DlgLnkTargetSelf : "Isti prozor (_self)",
+DlgLnkTargetTop : "Najgornji prozor (_top)",
+DlgLnkTargetFrameName : "Target Frame Name", //MISSING
+DlgLnkPopWinName : "Naziv popup prozora",
+DlgLnkPopWinFeat : "Moguænosti popup prozora",
+DlgLnkPopResize : "Promjenljive velièine",
+DlgLnkPopLocation : "Traka za lokaciju",
+DlgLnkPopMenu : "Izborna traka",
+DlgLnkPopScroll : "Scroll traka",
+DlgLnkPopStatus : "Statusna traka",
+DlgLnkPopToolbar : "Traka sa alatima",
+DlgLnkPopFullScrn : "Cijeli ekran (IE)",
+DlgLnkPopDependent : "Ovisno (Netscape)",
+DlgLnkPopWidth : "Å irina",
+DlgLnkPopHeight : "Visina",
+DlgLnkPopLeft : "Lijeva pozicija",
+DlgLnkPopTop : "Gornja pozicija",
+
+DlnLnkMsgNoUrl : "Molimo ukucajte URL link",
+DlnLnkMsgNoEMail : "Molimo ukucajte e-mail adresu",
+DlnLnkMsgNoAnchor : "Molimo izaberite sidro",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Izaberi boju",
+DlgColorBtnClear : "Oèisti",
+DlgColorHighlight : "Igled",
+DlgColorSelected : "Selektovana",
+
+// Smiley Dialog
+DlgSmileyTitle : "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Izaberi specijalni karakter",
+
+// Table Dialog
+DlgTableTitle : "Svojstva tabele",
+DlgTableRows : "Redova",
+DlgTableColumns : "Kolona",
+DlgTableBorder : "Okvir",
+DlgTableAlign : "Poravnanje",
+DlgTableAlignNotSet : "<Nije podešeno>",
+DlgTableAlignLeft : "Lijevo",
+DlgTableAlignCenter : "Centar",
+DlgTableAlignRight : "Desno",
+DlgTableWidth : "Å irina",
+DlgTableWidthPx : "piksela",
+DlgTableWidthPc : "posto",
+DlgTableHeight : "Visina",
+DlgTableCellSpace : "Razmak æelija",
+DlgTableCellPad : "Uvod æelija",
+DlgTableCaption : "Naslov",
+DlgTableSummary : "Summary", //MISSING
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Svojstva æelije",
+DlgCellWidth : "Å irina",
+DlgCellWidthPx : "piksela",
+DlgCellWidthPc : "posto",
+DlgCellHeight : "Visina",
+DlgCellWordWrap : "Vrapuj tekst",
+DlgCellWordWrapNotSet : "<Nije podešeno>",
+DlgCellWordWrapYes : "Da",
+DlgCellWordWrapNo : "Ne",
+DlgCellHorAlign : "Horizontalno poravnanje",
+DlgCellHorAlignNotSet : "<Nije podešeno>",
+DlgCellHorAlignLeft : "Lijevo",
+DlgCellHorAlignCenter : "Centar",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign : "Vertikalno poravnanje",
+DlgCellVerAlignNotSet : "<Nije podešeno>",
+DlgCellVerAlignTop : "Gore",
+DlgCellVerAlignMiddle : "Sredina",
+DlgCellVerAlignBottom : "Dno",
+DlgCellVerAlignBaseline : "Bazno",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Spajanje æelija",
+DlgCellCollSpan : "Spajanje kolona",
+DlgCellBackColor : "Boja pozadine",
+DlgCellBorderColor : "Boja okvira",
+DlgCellBtnSelect : "Selektuj...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Naði",
+DlgFindFindBtn : "Naði",
+DlgFindNotFoundMsg : "Traženi tekst nije pronaðen.",
+
+// Replace Dialog
+DlgReplaceTitle : "Zamjeni",
+DlgReplaceFindLbl : "Naði šta:",
+DlgReplaceReplaceLbl : "Zamjeni sa:",
+DlgReplaceCaseChk : "Uporeðuj velika/mala slova",
+DlgReplaceReplaceBtn : "Zamjeni",
+DlgReplaceReplAllBtn : "Zamjeni sve",
+DlgReplaceWordChk : "Uporeðuj samo cijelu rijeè",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).",
+PasteErrorCopy : "Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).",
+
+PasteAsText : "Zalijepi kao obièan tekst",
+PasteFromWord : "Zalijepi iz Word-a",
+
+DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.", //MISSING
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING
+DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING
+
+// Color Picker
+ColorAutomatic : "Automatska",
+ColorMoreColors : "Više boja...",
+
+// Document Properties
+DocProps : "Document Properties", //MISSING
+
+// Anchor Dialog
+DlgAnchorTitle : "Anchor Properties", //MISSING
+DlgAnchorName : "Anchor Name", //MISSING
+DlgAnchorErrorName : "Please type the anchor name", //MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Not in dictionary", //MISSING
+DlgSpellChangeTo : "Change to", //MISSING
+DlgSpellBtnIgnore : "Ignore", //MISSING
+DlgSpellBtnIgnoreAll : "Ignore All", //MISSING
+DlgSpellBtnReplace : "Replace", //MISSING
+DlgSpellBtnReplaceAll : "Replace All", //MISSING
+DlgSpellBtnUndo : "Undo", //MISSING
+DlgSpellNoSuggestions : "- No suggestions -", //MISSING
+DlgSpellProgress : "Spell check in progress...", //MISSING
+DlgSpellNoMispell : "Spell check complete: No misspellings found", //MISSING
+DlgSpellNoChanges : "Spell check complete: No words changed", //MISSING
+DlgSpellOneChange : "Spell check complete: One word changed", //MISSING
+DlgSpellManyChanges : "Spell check complete: %1 words changed", //MISSING
+
+IeSpellDownload : "Spell checker not installed. Do you want to download it now?", //MISSING
+
+// Button Dialog
+DlgButtonText : "Text (Value)", //MISSING
+DlgButtonType : "Type", //MISSING
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Name", //MISSING
+DlgCheckboxValue : "Value", //MISSING
+DlgCheckboxSelected : "Selected", //MISSING
+
+// Form Dialog
+DlgFormName : "Name", //MISSING
+DlgFormAction : "Action", //MISSING
+DlgFormMethod : "Method", //MISSING
+
+// Select Field Dialog
+DlgSelectName : "Name", //MISSING
+DlgSelectValue : "Value", //MISSING
+DlgSelectSize : "Size", //MISSING
+DlgSelectLines : "lines", //MISSING
+DlgSelectChkMulti : "Allow multiple selections", //MISSING
+DlgSelectOpAvail : "Available Options", //MISSING
+DlgSelectOpText : "Text", //MISSING
+DlgSelectOpValue : "Value", //MISSING
+DlgSelectBtnAdd : "Add", //MISSING
+DlgSelectBtnModify : "Modify", //MISSING
+DlgSelectBtnUp : "Up", //MISSING
+DlgSelectBtnDown : "Down", //MISSING
+DlgSelectBtnSetValue : "Set as selected value", //MISSING
+DlgSelectBtnDelete : "Delete", //MISSING
+
+// Textarea Dialog
+DlgTextareaName : "Name", //MISSING
+DlgTextareaCols : "Columns", //MISSING
+DlgTextareaRows : "Rows", //MISSING
+
+// Text Field Dialog
+DlgTextName : "Name", //MISSING
+DlgTextValue : "Value", //MISSING
+DlgTextCharWidth : "Character Width", //MISSING
+DlgTextMaxChars : "Maximum Characters", //MISSING
+DlgTextType : "Type", //MISSING
+DlgTextTypeText : "Text", //MISSING
+DlgTextTypePass : "Password", //MISSING
+
+// Hidden Field Dialog
+DlgHiddenName : "Name", //MISSING
+DlgHiddenValue : "Value", //MISSING
+
+// Bulleted List Dialog
+BulletedListProp : "Bulleted List Properties", //MISSING
+NumberedListProp : "Numbered List Properties", //MISSING
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Type", //MISSING
+DlgLstTypeCircle : "Circle", //MISSING
+DlgLstTypeDisc : "Disc", //MISSING
+DlgLstTypeSquare : "Square", //MISSING
+DlgLstTypeNumbers : "Numbers (1, 2, 3)", //MISSING
+DlgLstTypeLCase : "Lowercase Letters (a, b, c)", //MISSING
+DlgLstTypeUCase : "Uppercase Letters (A, B, C)", //MISSING
+DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", //MISSING
+DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", //MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General", //MISSING
+DlgDocBackTab : "Background", //MISSING
+DlgDocColorsTab : "Colors and Margins", //MISSING
+DlgDocMetaTab : "Meta Data", //MISSING
+
+DlgDocPageTitle : "Page Title", //MISSING
+DlgDocLangDir : "Language Direction", //MISSING
+DlgDocLangDirLTR : "Left to Right (LTR)", //MISSING
+DlgDocLangDirRTL : "Right to Left (RTL)", //MISSING
+DlgDocLangCode : "Language Code", //MISSING
+DlgDocCharSet : "Character Set Encoding", //MISSING
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Other Character Set Encoding", //MISSING
+
+DlgDocDocType : "Document Type Heading", //MISSING
+DlgDocDocTypeOther : "Other Document Type Heading", //MISSING
+DlgDocIncXHTML : "Include XHTML Declarations", //MISSING
+DlgDocBgColor : "Background Color", //MISSING
+DlgDocBgImage : "Background Image URL", //MISSING
+DlgDocBgNoScroll : "Nonscrolling Background", //MISSING
+DlgDocCText : "Text", //MISSING
+DlgDocCLink : "Link", //MISSING
+DlgDocCVisited : "Visited Link", //MISSING
+DlgDocCActive : "Active Link", //MISSING
+DlgDocMargins : "Page Margins", //MISSING
+DlgDocMaTop : "Top", //MISSING
+DlgDocMaLeft : "Left", //MISSING
+DlgDocMaRight : "Right", //MISSING
+DlgDocMaBottom : "Bottom", //MISSING
+DlgDocMeIndex : "Document Indexing Keywords (comma separated)", //MISSING
+DlgDocMeDescr : "Document Description", //MISSING
+DlgDocMeAuthor : "Author", //MISSING
+DlgDocMeCopy : "Copyright", //MISSING
+DlgDocPreview : "Preview", //MISSING
+
+// Templates Dialog
+Templates : "Templates", //MISSING
+DlgTemplatesTitle : "Content Templates", //MISSING
+DlgTemplatesSelMsg : "Please select the template to open in the editor<br />(the actual contents will be lost):", //MISSING
+DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING
+DlgTemplatesNoTpl : "(No templates defined)", //MISSING
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "About", //MISSING
+DlgAboutBrowserInfoTab : "Browser Info", //MISSING
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "verzija",
+DlgAboutInfo : "Za više informacija posjetite",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ca.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ca.js
new file mode 100644
index 0000000..7cce7fc
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ca.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Catalan language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Redueix la barra d'eines",
+ToolbarExpand : "Amplia la barra d'eines",
+
+// Toolbar Items and Context Menu
+Save : "Desa",
+NewPage : "Nova Pàgina",
+Preview : "Visualització prèvia",
+Cut : "Retalla",
+Copy : "Copia",
+Paste : "Enganxa",
+PasteText : "Enganxa com a text no formatat",
+PasteWord : "Enganxa des del Word",
+Print : "Imprimeix",
+SelectAll : "Selecciona-ho tot",
+RemoveFormat : "Elimina Format",
+InsertLinkLbl : "Enllaç",
+InsertLink : "Insereix/Edita enllaç",
+RemoveLink : "Elimina l'enllaç",
+VisitLink : "Obre l'enllaç",
+Anchor : "Insereix/Edita àncora",
+AnchorDelete : "Elimina àncora",
+InsertImageLbl : "Imatge",
+InsertImage : "Insereix/Edita imatge",
+InsertFlashLbl : "Flash",
+InsertFlash : "Insereix/Edita Flash",
+InsertTableLbl : "Taula",
+InsertTable : "Insereix/Edita taula",
+InsertLineLbl : "Línia",
+InsertLine : "Insereix línia horitzontal",
+InsertSpecialCharLbl: "Caràcter Especial",
+InsertSpecialChar : "Insereix caràcter especial",
+InsertSmileyLbl : "Icona",
+InsertSmiley : "Insereix icona",
+About : "Quant a l'FCKeditor",
+Bold : "Negreta",
+Italic : "Cursiva",
+Underline : "Subratllat",
+StrikeThrough : "Barrat",
+Subscript : "Subíndex",
+Superscript : "Superíndex",
+LeftJustify : "Alinia a l'esquerra",
+CenterJustify : "Centrat",
+RightJustify : "Alinia a la dreta",
+BlockJustify : "Justificat",
+DecreaseIndent : "Redueix el sagnat",
+IncreaseIndent : "Augmenta el sagnat",
+Blockquote : "Bloc de cita",
+CreateDiv : "Crea un contenidor Div",
+EditDiv : "Edita el contenidor Div",
+DeleteDiv : "Elimina el contenidor Div",
+Undo : "Desfés",
+Redo : "Refés",
+NumberedListLbl : "Llista numerada",
+NumberedList : "Numeració activada/desactivada",
+BulletedListLbl : "Llista de pics",
+BulletedList : "Pics activats/descativats",
+ShowTableBorders : "Mostra les vores de les taules",
+ShowDetails : "Mostra detalls",
+Style : "Estil",
+FontFormat : "Format",
+Font : "Tipus de lletra",
+FontSize : "Mida",
+TextColor : "Color de Text",
+BGColor : "Color de Fons",
+Source : "Codi font",
+Find : "Cerca",
+Replace : "Reemplaça",
+SpellCheck : "Revisa l'ortografia",
+UniversalKeyboard : "Teclat universal",
+PageBreakLbl : "Salt de pàgina",
+PageBreak : "Insereix salt de pàgina",
+
+Form : "Formulari",
+Checkbox : "Casella de verificació",
+RadioButton : "Botó d'opció",
+TextField : "Camp de text",
+Textarea : "Àrea de text",
+HiddenField : "Camp ocult",
+Button : "Botó",
+SelectionField : "Camp de selecció",
+ImageButton : "Botó d'imatge",
+
+FitWindow : "Maximiza la mida de l'editor",
+ShowBlocks : "Mostra els blocs",
+
+// Context Menu
+EditLink : "Edita l'enllaç",
+CellCM : "Cel·la",
+RowCM : "Fila",
+ColumnCM : "Columna",
+InsertRowAfter : "Insereix fila darrera",
+InsertRowBefore : "Insereix fila abans de",
+DeleteRows : "Suprimeix una fila",
+InsertColumnAfter : "Insereix columna darrera",
+InsertColumnBefore : "Insereix columna abans de",
+DeleteColumns : "Suprimeix una columna",
+InsertCellAfter : "Insereix cel·la darrera",
+InsertCellBefore : "Insereix cel·la abans de",
+DeleteCells : "Suprimeix les cel·les",
+MergeCells : "Fusiona les cel·les",
+MergeRight : "Fusiona cap a la dreta",
+MergeDown : "Fusiona cap avall",
+HorizontalSplitCell : "Divideix la cel·la horitzontalment",
+VerticalSplitCell : "Divideix la cel·la verticalment",
+TableDelete : "Suprimeix la taula",
+CellProperties : "Propietats de la cel·la",
+TableProperties : "Propietats de la taula",
+ImageProperties : "Propietats de la imatge",
+FlashProperties : "Propietats del Flash",
+
+AnchorProp : "Propietats de l'àncora",
+ButtonProp : "Propietats del botó",
+CheckboxProp : "Propietats de la casella de verificació",
+HiddenFieldProp : "Propietats del camp ocult",
+RadioButtonProp : "Propietats del botó d'opció",
+ImageButtonProp : "Propietats del botó d'imatge",
+TextFieldProp : "Propietats del camp de text",
+SelectionFieldProp : "Propietats del camp de selecció",
+TextareaProp : "Propietats de l'àrea de text",
+FormProp : "Propietats del formulari",
+
+FontFormats : "Normal;Formatejat;Adreça;Encapçalament 1;Encapçalament 2;Encapçalament 3;Encapçalament 4;Encapçalament 5;Encapçalament 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Processant XHTML. Si us plau esperi...",
+Done : "Fet",
+PasteWordConfirm : "El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?",
+NotCompatiblePaste : "Aquesta funció és disponible per a Internet Explorer versió 5.5 o superior. Voleu enganxar sense netejar?",
+UnknownToolbarItem : "Element de la barra d'eines desconegut \"%1\"",
+UnknownCommand : "Nom de comanda desconegut \"%1\"",
+NotImplemented : "Mètode no implementat",
+UnknownToolbarSet : "Conjunt de barra d'eines \"%1\" inexistent",
+NoActiveX : "Les preferències del navegador poden limitar algunes funcions d'aquest editor. Cal habilitar l'opció \"Executa controls ActiveX i plug-ins\". Poden sorgir errors i poden faltar algunes funcions.",
+BrowseServerBlocked : "El visualitzador de recursos no s'ha pogut obrir. Assegura't de que els bloquejos de finestres emergents estan desactivats.",
+DialogBlocked : "No ha estat possible obrir una finestra de diàleg. Assegureu-vos que els bloquejos de finestres emergents estan desactivats.",
+VisitLinkBlocked : "No ha estat possible obrir una nova finestra. Assegureu-vos que els bloquejos de finestres emergents estan desactivats.",
+
+// Dialogs
+DlgBtnOK : "D'acord",
+DlgBtnCancel : "Cancel·la",
+DlgBtnClose : "Tanca",
+DlgBtnBrowseServer : "Veure servidor",
+DlgAdvancedTag : "Avançat",
+DlgOpOther : "Altres",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Si us plau, afegiu la URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<no definit>",
+DlgGenId : "Id",
+DlgGenLangDir : "Direcció de l'idioma",
+DlgGenLangDirLtr : "D'esquerra a dreta (LTR)",
+DlgGenLangDirRtl : "De dreta a esquerra (RTL)",
+DlgGenLangCode : "Codi d'idioma",
+DlgGenAccessKey : "Clau d'accés",
+DlgGenName : "Nom",
+DlgGenTabIndex : "Index de Tab",
+DlgGenLongDescr : "Descripció llarga de la URL",
+DlgGenClass : "Classes del full d'estil",
+DlgGenTitle : "Títol consultiu",
+DlgGenContType : "Tipus de contingut consultiu",
+DlgGenLinkCharset : "Conjunt de caràcters font enllaçat",
+DlgGenStyle : "Estil",
+
+// Image Dialog
+DlgImgTitle : "Propietats de la imatge",
+DlgImgInfoTab : "Informació de la imatge",
+DlgImgBtnUpload : "Envia-la al servidor",
+DlgImgURL : "URL",
+DlgImgUpload : "Puja",
+DlgImgAlt : "Text alternatiu",
+DlgImgWidth : "Amplada",
+DlgImgHeight : "Alçada",
+DlgImgLockRatio : "Bloqueja les proporcions",
+DlgBtnResetSize : "Restaura la mida",
+DlgImgBorder : "Vora",
+DlgImgHSpace : "Espaiat horit.",
+DlgImgVSpace : "Espaiat vert.",
+DlgImgAlign : "Alineació",
+DlgImgAlignLeft : "Ajusta a l'esquerra",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Bottom",
+DlgImgAlignMiddle : "Middle",
+DlgImgAlignRight : "Ajusta a la dreta",
+DlgImgAlignTextTop : "Text Top",
+DlgImgAlignTop : "Top",
+DlgImgPreview : "Vista prèvia",
+DlgImgAlertUrl : "Si us plau, escriviu la URL de la imatge",
+DlgImgLinkTab : "Enllaç",
+
+// Flash Dialog
+DlgFlashTitle : "Propietats del Flash",
+DlgFlashChkPlay : "Reprodució automàtica",
+DlgFlashChkLoop : "Bucle",
+DlgFlashChkMenu : "Habilita menú Flash",
+DlgFlashScale : "Escala",
+DlgFlashScaleAll : "Mostra-ho tot",
+DlgFlashScaleNoBorder : "Sense vores",
+DlgFlashScaleFit : "Mida exacta",
+
+// Link Dialog
+DlgLnkWindowTitle : "Enllaç",
+DlgLnkInfoTab : "Informació de l'enllaç",
+DlgLnkTargetTab : "Destí",
+
+DlgLnkType : "Tipus d'enllaç",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Àncora en aquesta pàgina",
+DlgLnkTypeEMail : "Correu electrònic",
+DlgLnkProto : "Protocol",
+DlgLnkProtoOther : "<altra>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Selecciona una àncora",
+DlgLnkAnchorByName : "Per nom d'àncora",
+DlgLnkAnchorById : "Per Id d'element",
+DlgLnkNoAnchors : "(No hi ha àncores disponibles en aquest document)",
+DlgLnkEMail : "Adreça de correu electrònic",
+DlgLnkEMailSubject : "Assumpte del missatge",
+DlgLnkEMailBody : "Cos del missatge",
+DlgLnkUpload : "Puja",
+DlgLnkBtnUpload : "Envia al servidor",
+
+DlgLnkTarget : "Destí",
+DlgLnkTargetFrame : "<marc>",
+DlgLnkTargetPopup : "<finestra emergent>",
+DlgLnkTargetBlank : "Nova finestra (_blank)",
+DlgLnkTargetParent : "Finestra pare (_parent)",
+DlgLnkTargetSelf : "Mateixa finestra (_self)",
+DlgLnkTargetTop : "Finestra Major (_top)",
+DlgLnkTargetFrameName : "Nom del marc de destí",
+DlgLnkPopWinName : "Nom finestra popup",
+DlgLnkPopWinFeat : "Característiques finestra popup",
+DlgLnkPopResize : "Redimensionable",
+DlgLnkPopLocation : "Barra d'adreça",
+DlgLnkPopMenu : "Barra de menú",
+DlgLnkPopScroll : "Barres d'scroll",
+DlgLnkPopStatus : "Barra d'estat",
+DlgLnkPopToolbar : "Barra d'eines",
+DlgLnkPopFullScrn : "Pantalla completa (IE)",
+DlgLnkPopDependent : "Depenent (Netscape)",
+DlgLnkPopWidth : "Amplada",
+DlgLnkPopHeight : "Alçada",
+DlgLnkPopLeft : "Posició esquerra",
+DlgLnkPopTop : "Posició dalt",
+
+DlnLnkMsgNoUrl : "Si us plau, escrigui l'enllaç URL",
+DlnLnkMsgNoEMail : "Si us plau, escrigui l'adreça correu electrònic",
+DlnLnkMsgNoAnchor : "Si us plau, escrigui l'àncora",
+DlnLnkMsgInvPopName : "El nom de la finestra emergent ha de començar amb una lletra i no pot tenir espais",
+
+// Color Dialog
+DlgColorTitle : "Selecciona el color",
+DlgColorBtnClear : "Neteja",
+DlgColorHighlight : "Realça",
+DlgColorSelected : "Selecciona",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insereix una icona",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Selecciona el caràcter especial",
+
+// Table Dialog
+DlgTableTitle : "Propietats de la taula",
+DlgTableRows : "Files",
+DlgTableColumns : "Columnes",
+DlgTableBorder : "Mida vora",
+DlgTableAlign : "Alineació",
+DlgTableAlignNotSet : "<No Definit>",
+DlgTableAlignLeft : "Esquerra",
+DlgTableAlignCenter : "Centre",
+DlgTableAlignRight : "Dreta",
+DlgTableWidth : "Amplada",
+DlgTableWidthPx : "píxels",
+DlgTableWidthPc : "percentatge",
+DlgTableHeight : "Alçada",
+DlgTableCellSpace : "Espaiat de cel·les",
+DlgTableCellPad : "Encoixinament de cel·les",
+DlgTableCaption : "Títol",
+DlgTableSummary : "Resum",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Propietats de la cel·la",
+DlgCellWidth : "Amplada",
+DlgCellWidthPx : "píxels",
+DlgCellWidthPc : "percentatge",
+DlgCellHeight : "Alçada",
+DlgCellWordWrap : "Ajust de paraula",
+DlgCellWordWrapNotSet : "<No Definit>",
+DlgCellWordWrapYes : "Si",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "Alineació horitzontal",
+DlgCellHorAlignNotSet : "<No Definit>",
+DlgCellHorAlignLeft : "Esquerra",
+DlgCellHorAlignCenter : "Centre",
+DlgCellHorAlignRight: "Dreta",
+DlgCellVerAlign : "Alineació vertical",
+DlgCellVerAlignNotSet : "<No definit>",
+DlgCellVerAlignTop : "Top",
+DlgCellVerAlignMiddle : "Middle",
+DlgCellVerAlignBottom : "Bottom",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Rows Span",
+DlgCellCollSpan : "Columns Span",
+DlgCellBackColor : "Color de fons",
+DlgCellBorderColor : "Color de la vora",
+DlgCellBtnSelect : "Seleccioneu...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Cerca i reemplaça",
+
+// Find Dialog
+DlgFindTitle : "Cerca",
+DlgFindFindBtn : "Cerca",
+DlgFindNotFoundMsg : "El text especificat no s'ha trobat.",
+
+// Replace Dialog
+DlgReplaceTitle : "Reemplaça",
+DlgReplaceFindLbl : "Cerca:",
+DlgReplaceReplaceLbl : "Remplaça amb:",
+DlgReplaceCaseChk : "Distingeix majúscules/minúscules",
+DlgReplaceReplaceBtn : "Reemplaça",
+DlgReplaceReplAllBtn : "Reemplaça-ho tot",
+DlgReplaceWordChk : "Només paraules completes",
+
+// Paste Operations / Dialog
+PasteErrorCut : "La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).",
+PasteErrorCopy : "La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).",
+
+PasteAsText : "Enganxa com a text no formatat",
+PasteFromWord : "Enganxa com a Word",
+
+DlgPasteMsg2 : "Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.",
+DlgPasteSec : "A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.",
+DlgPasteIgnoreFont : "Ignora definicions de font",
+DlgPasteRemoveStyles : "Elimina definicions d'estil",
+
+// Color Picker
+ColorAutomatic : "Automàtic",
+ColorMoreColors : "Més colors...",
+
+// Document Properties
+DocProps : "Propietats del document",
+
+// Anchor Dialog
+DlgAnchorTitle : "Propietats de l'àncora",
+DlgAnchorName : "Nom de l'àncora",
+DlgAnchorErrorName : "Si us plau, escriviu el nom de l'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "No és al diccionari",
+DlgSpellChangeTo : "Reemplaça amb",
+DlgSpellBtnIgnore : "Ignora",
+DlgSpellBtnIgnoreAll : "Ignora-les totes",
+DlgSpellBtnReplace : "Canvia",
+DlgSpellBtnReplaceAll : "Canvia-les totes",
+DlgSpellBtnUndo : "Desfés",
+DlgSpellNoSuggestions : "Cap suggeriment",
+DlgSpellProgress : "Verificació ortogràfica en curs...",
+DlgSpellNoMispell : "Verificació ortogràfica acabada: no hi ha cap paraula mal escrita",
+DlgSpellNoChanges : "Verificació ortogràfica: no s'ha canviat cap paraula",
+DlgSpellOneChange : "Verificació ortogràfica: s'ha canviat una paraula",
+DlgSpellManyChanges : "Verificació ortogràfica: s'han canviat %1 paraules",
+
+IeSpellDownload : "Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?",
+
+// Button Dialog
+DlgButtonText : "Text (Valor)",
+DlgButtonType : "Tipus",
+DlgButtonTypeBtn : "Botó",
+DlgButtonTypeSbm : "Transmet formulari",
+DlgButtonTypeRst : "Reinicia formulari",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nom",
+DlgCheckboxValue : "Valor",
+DlgCheckboxSelected : "Seleccionat",
+
+// Form Dialog
+DlgFormName : "Nom",
+DlgFormAction : "Acció",
+DlgFormMethod : "Mètode",
+
+// Select Field Dialog
+DlgSelectName : "Nom",
+DlgSelectValue : "Valor",
+DlgSelectSize : "Mida",
+DlgSelectLines : "Línies",
+DlgSelectChkMulti : "Permet múltiples seleccions",
+DlgSelectOpAvail : "Opcions disponibles",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Valor",
+DlgSelectBtnAdd : "Afegeix",
+DlgSelectBtnModify : "Modifica",
+DlgSelectBtnUp : "Amunt",
+DlgSelectBtnDown : "Avall",
+DlgSelectBtnSetValue : "Selecciona per defecte",
+DlgSelectBtnDelete : "Elimina",
+
+// Textarea Dialog
+DlgTextareaName : "Nom",
+DlgTextareaCols : "Columnes",
+DlgTextareaRows : "Files",
+
+// Text Field Dialog
+DlgTextName : "Nom",
+DlgTextValue : "Valor",
+DlgTextCharWidth : "Amplada",
+DlgTextMaxChars : "Nombre màxim de caràcters",
+DlgTextType : "Tipus",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Contrasenya",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nom",
+DlgHiddenValue : "Valor",
+
+// Bulleted List Dialog
+BulletedListProp : "Propietats de la llista de pics",
+NumberedListProp : "Propietats de llista numerada",
+DlgLstStart : "Inici",
+DlgLstType : "Tipus",
+DlgLstTypeCircle : "Cercle",
+DlgLstTypeDisc : "Disc",
+DlgLstTypeSquare : "Quadrat",
+DlgLstTypeNumbers : "Números (1, 2, 3)",
+DlgLstTypeLCase : "Lletres minúscules (a, b, c)",
+DlgLstTypeUCase : "Lletres majúscules (A, B, C)",
+DlgLstTypeSRoman : "Números romans en minúscules (i, ii, iii)",
+DlgLstTypeLRoman : "Números romans en majúscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General",
+DlgDocBackTab : "Fons",
+DlgDocColorsTab : "Colors i marges",
+DlgDocMetaTab : "Metadades",
+
+DlgDocPageTitle : "Títol de la pàgina",
+DlgDocLangDir : "Direcció idioma",
+DlgDocLangDirLTR : "Esquerra a dreta (LTR)",
+DlgDocLangDirRTL : "Dreta a esquerra (RTL)",
+DlgDocLangCode : "Codi d'idioma",
+DlgDocCharSet : "Codificació de conjunt de caràcters",
+DlgDocCharSetCE : "Centreeuropeu",
+DlgDocCharSetCT : "Xinès tradicional (Big5)",
+DlgDocCharSetCR : "Ciríl·lic",
+DlgDocCharSetGR : "Grec",
+DlgDocCharSetJP : "Japonès",
+DlgDocCharSetKR : "Coreà",
+DlgDocCharSetTR : "Turc",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Europeu occidental",
+DlgDocCharSetOther : "Una altra codificació de caràcters",
+
+DlgDocDocType : "Capçalera de tipus de document",
+DlgDocDocTypeOther : "Un altra capçalera de tipus de document",
+DlgDocIncXHTML : "Incloure declaracions XHTML",
+DlgDocBgColor : "Color de fons",
+DlgDocBgImage : "URL de la imatge de fons",
+DlgDocBgNoScroll : "Fons fixe",
+DlgDocCText : "Text",
+DlgDocCLink : "Enllaç",
+DlgDocCVisited : "Enllaç visitat",
+DlgDocCActive : "Enllaç actiu",
+DlgDocMargins : "Marges de pàgina",
+DlgDocMaTop : "Cap",
+DlgDocMaLeft : "Esquerra",
+DlgDocMaRight : "Dreta",
+DlgDocMaBottom : "Peu",
+DlgDocMeIndex : "Mots clau per a indexació (separats per coma)",
+DlgDocMeDescr : "Descripció del document",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Vista prèvia",
+
+// Templates Dialog
+Templates : "Plantilles",
+DlgTemplatesTitle : "Contingut plantilles",
+DlgTemplatesSelMsg : "Si us plau, seleccioneu la plantilla per obrir a l'editor<br>(el contingut actual no serà enregistrat):",
+DlgTemplatesLoading : "Carregant la llista de plantilles. Si us plau, espereu...",
+DlgTemplatesNoTpl : "(No hi ha plantilles definides)",
+DlgTemplatesReplace : "Reemplaça el contingut actual",
+
+// About Dialog
+DlgAboutAboutTab : "Quant a",
+DlgAboutBrowserInfoTab : "Informació del navegador",
+DlgAboutLicenseTab : "Llicència",
+DlgAboutVersion : "versió",
+DlgAboutInfo : "Per a més informació aneu a",
+
+// Div Dialog
+DlgDivGeneralTab : "General",
+DlgDivAdvancedTab : "Avançat",
+DlgDivStyle : "Estil",
+DlgDivInlineStyle : "Estil en línia"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/cs.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/cs.js
new file mode 100644
index 0000000..1f3181a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/cs.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Czech language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Skrýt panel nástrojů",
+ToolbarExpand : "Zobrazit panel nástrojů",
+
+// Toolbar Items and Context Menu
+Save : "Uložit",
+NewPage : "Nová stránka",
+Preview : "Náhled",
+Cut : "Vyjmout",
+Copy : "Kopírovat",
+Paste : "Vložit",
+PasteText : "Vložit jako Äistý text",
+PasteWord : "Vložit z Wordu",
+Print : "Tisk",
+SelectAll : "Vybrat vše",
+RemoveFormat : "Odstranit formátování",
+InsertLinkLbl : "Odkaz",
+InsertLink : "Vložit/změnit odkaz",
+RemoveLink : "Odstranit odkaz",
+VisitLink : "Otevřít odkaz",
+Anchor : "Vložít/změnit záložku",
+AnchorDelete : "Odstranit kotvu",
+InsertImageLbl : "Obrázek",
+InsertImage : "Vložit/změnit obrázek",
+InsertFlashLbl : "Flash",
+InsertFlash : "Vložit/Upravit Flash",
+InsertTableLbl : "Tabulka",
+InsertTable : "Vložit/změnit tabulku",
+InsertLineLbl : "Linka",
+InsertLine : "Vložit vodorovnou linku",
+InsertSpecialCharLbl: "Speciální znaky",
+InsertSpecialChar : "Vložit speciální znaky",
+InsertSmileyLbl : "Smajlíky",
+InsertSmiley : "Vložit smajlík",
+About : "O aplikaci FCKeditor",
+Bold : "TuÄné",
+Italic : "Kurzíva",
+Underline : "Podtržené",
+StrikeThrough : "Přeškrtnuté",
+Subscript : "Dolní index",
+Superscript : "Horní index",
+LeftJustify : "Zarovnat vlevo",
+CenterJustify : "Zarovnat na střed",
+RightJustify : "Zarovnat vpravo",
+BlockJustify : "Zarovnat do bloku",
+DecreaseIndent : "Zmenšit odsazení",
+IncreaseIndent : "Zvětšit odsazení",
+Blockquote : "Citace",
+CreateDiv : "Vytvořit Div kontejner",
+EditDiv : "Upravit Div kontejner",
+DeleteDiv : "Odstranit Div kontejner",
+Undo : "Zpět",
+Redo : "Znovu",
+NumberedListLbl : "Číslování",
+NumberedList : "Vložit/odstranit Äíslovaný seznam",
+BulletedListLbl : "Odrážky",
+BulletedList : "Vložit/odstranit odrážky",
+ShowTableBorders : "Zobrazit okraje tabulek",
+ShowDetails : "Zobrazit podrobnosti",
+Style : "Styl",
+FontFormat : "Formát",
+Font : "Písmo",
+FontSize : "Velikost",
+TextColor : "Barva textu",
+BGColor : "Barva pozadí",
+Source : "Zdroj",
+Find : "Hledat",
+Replace : "Nahradit",
+SpellCheck : "Zkontrolovat pravopis",
+UniversalKeyboard : "Univerzální klávesnice",
+PageBreakLbl : "Konec stránky",
+PageBreak : "Vložit konec stránky",
+
+Form : "Formulář",
+Checkbox : "ZaÅ¡krtávací políÄko",
+RadioButton : "PÅ™epínaÄ",
+TextField : "Textové pole",
+Textarea : "Textová oblast",
+HiddenField : "Skryté pole",
+Button : "TlaÄítko",
+SelectionField : "Seznam",
+ImageButton : "Obrázkové tlaÄítko",
+
+FitWindow : "Maximalizovat velikost editoru",
+ShowBlocks : "Ukázat bloky",
+
+// Context Menu
+EditLink : "Změnit odkaz",
+CellCM : "Buňka",
+RowCM : "Řádek",
+ColumnCM : "Sloupec",
+InsertRowAfter : "Vložit řádek za",
+InsertRowBefore : "Vložit řádek před",
+DeleteRows : "Smazat řádky",
+InsertColumnAfter : "Vložit sloupec za",
+InsertColumnBefore : "Vložit sloupec před",
+DeleteColumns : "Smazat sloupec",
+InsertCellAfter : "Vložit buňku za",
+InsertCellBefore : "Vložit buňku před",
+DeleteCells : "Smazat buňky",
+MergeCells : "SlouÄit buňky",
+MergeRight : "SlouÄit doprava",
+MergeDown : "SlouÄit dolů",
+HorizontalSplitCell : "Rozdělit buňky vodorovně",
+VerticalSplitCell : "Rozdělit buňky svisle",
+TableDelete : "Smazat tabulku",
+CellProperties : "Vlastnosti buňky",
+TableProperties : "Vlastnosti tabulky",
+ImageProperties : "Vlastnosti obrázku",
+FlashProperties : "Vlastnosti Flashe",
+
+AnchorProp : "Vlastnosti záložky",
+ButtonProp : "Vlastnosti tlaÄítka",
+CheckboxProp : "Vlastnosti zaÅ¡krtávacího políÄka",
+HiddenFieldProp : "Vlastnosti skrytého pole",
+RadioButtonProp : "Vlastnosti pÅ™epínaÄe",
+ImageButtonProp : "Vlastností obrázkového tlaÄítka",
+TextFieldProp : "Vlastnosti textového pole",
+SelectionFieldProp : "Vlastnosti seznamu",
+TextareaProp : "Vlastnosti textové oblasti",
+FormProp : "Vlastnosti formuláře",
+
+FontFormats : "Normální;Naformátováno;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Normální (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Probíhá zpracování XHTML. Prosím Äekejte...",
+Done : "Hotovo",
+PasteWordConfirm : "Jak je vidÄ›t, vkládaný text je kopírován z Wordu. Chcete jej pÅ™ed vložením vyÄistit?",
+NotCompatiblePaste : "Tento příkaz je dostupný pouze v Internet Exploreru verze 5.5 nebo vyšší. Chcete vložit text bez vyÄiÅ¡tÄ›ní?",
+UnknownToolbarItem : "Neznámá položka panelu nástrojů \"%1\"",
+UnknownCommand : "Neznámý příkaz \"%1\"",
+NotImplemented : "Příkaz není implementován",
+UnknownToolbarSet : "Panel nástrojů \"%1\" neexistuje",
+NoActiveX : "Nastavení bezpeÄnosti VaÅ¡eho prohlížeÄe omezuje funkÄnost nÄ›kterých jeho možností. Je tÅ™eba zapnout volbu \"SpouÅ¡tÄ›t ovládáací prvky ActiveX a moduly plug-in\", jinak nebude možné využívat vÅ¡echny dosputné schopnosti editoru.",
+BrowseServerBlocked : "Průzkumník zdrojů nelze otevřít. Prověřte, zda nemáte aktivováno blokování popup oken.",
+DialogBlocked : "Nelze otevřít dialogové okno. Prověřte, zda nemáte aktivováno blokování popup oken.",
+VisitLinkBlocked : "Není možné otevřít nové okno. Prověřte, zda všechny nástroje pro blokování vyskakovacích oken jsou vypnuty.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Storno",
+DlgBtnClose : "Zavřít",
+DlgBtnBrowseServer : "Vybrat na serveru",
+DlgAdvancedTag : "Rozšířené",
+DlgOpOther : "<Ostatní>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Prosím vložte URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nenastaveno>",
+DlgGenId : "Id",
+DlgGenLangDir : "Orientace jazyka",
+DlgGenLangDirLtr : "Zleva do prava (LTR)",
+DlgGenLangDirRtl : "Zprava do leva (RTL)",
+DlgGenLangCode : "Kód jazyka",
+DlgGenAccessKey : "Přístupový klíÄ",
+DlgGenName : "Jméno",
+DlgGenTabIndex : "Pořadí prvku",
+DlgGenLongDescr : "Dlouhý popis URL",
+DlgGenClass : "Třída stylu",
+DlgGenTitle : "Pomocný titulek",
+DlgGenContType : "Pomocný typ obsahu",
+DlgGenLinkCharset : "Přiřazená znaková sada",
+DlgGenStyle : "Styl",
+
+// Image Dialog
+DlgImgTitle : "Vlastnosti obrázku",
+DlgImgInfoTab : "Informace o obrázku",
+DlgImgBtnUpload : "Odeslat na server",
+DlgImgURL : "URL",
+DlgImgUpload : "Odeslat",
+DlgImgAlt : "Alternativní text",
+DlgImgWidth : "Šířka",
+DlgImgHeight : "Výška",
+DlgImgLockRatio : "Zámek",
+DlgBtnResetSize : "Původní velikost",
+DlgImgBorder : "Okraje",
+DlgImgHSpace : "H-mezera",
+DlgImgVSpace : "V-mezera",
+DlgImgAlign : "Zarovnání",
+DlgImgAlignLeft : "Vlevo",
+DlgImgAlignAbsBottom: "Zcela dolů",
+DlgImgAlignAbsMiddle: "Doprostřed",
+DlgImgAlignBaseline : "Na úÄaří",
+DlgImgAlignBottom : "Dolů",
+DlgImgAlignMiddle : "Na střed",
+DlgImgAlignRight : "Vpravo",
+DlgImgAlignTextTop : "Na horní okraj textu",
+DlgImgAlignTop : "Nahoru",
+DlgImgPreview : "Náhled",
+DlgImgAlertUrl : "Zadejte prosím URL obrázku",
+DlgImgLinkTab : "Odkaz",
+
+// Flash Dialog
+DlgFlashTitle : "Vlastnosti Flashe",
+DlgFlashChkPlay : "Automatické spuštění",
+DlgFlashChkLoop : "Opakování",
+DlgFlashChkMenu : "Nabídka Flash",
+DlgFlashScale : "Zobrazit",
+DlgFlashScaleAll : "Zobrazit vše",
+DlgFlashScaleNoBorder : "Bez okraje",
+DlgFlashScaleFit : "Přizpůsobit",
+
+// Link Dialog
+DlgLnkWindowTitle : "Odkaz",
+DlgLnkInfoTab : "Informace o odkazu",
+DlgLnkTargetTab : "Cíl",
+
+DlgLnkType : "Typ odkazu",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Kotva v této stránce",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<jiný>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Vybrat kotvu",
+DlgLnkAnchorByName : "Podle jména kotvy",
+DlgLnkAnchorById : "Podle Id objektu",
+DlgLnkNoAnchors : "(Ve stránce není definována žádná kotva!)",
+DlgLnkEMail : "E-Mailová adresa",
+DlgLnkEMailSubject : "Předmět zprávy",
+DlgLnkEMailBody : "Tělo zprávy",
+DlgLnkUpload : "Odeslat",
+DlgLnkBtnUpload : "Odeslat na Server",
+
+DlgLnkTarget : "Cíl",
+DlgLnkTargetFrame : "<rámec>",
+DlgLnkTargetPopup : "<vyskakovací okno>",
+DlgLnkTargetBlank : "Nové okno (_blank)",
+DlgLnkTargetParent : "RodiÄovské okno (_parent)",
+DlgLnkTargetSelf : "Stejné okno (_self)",
+DlgLnkTargetTop : "Hlavní okno (_top)",
+DlgLnkTargetFrameName : "Název cílového rámu",
+DlgLnkPopWinName : "Název vyskakovacího okna",
+DlgLnkPopWinFeat : "Vlastnosti vyskakovacího okna",
+DlgLnkPopResize : "Měnitelná velikost",
+DlgLnkPopLocation : "Panel umístění",
+DlgLnkPopMenu : "Panel nabídky",
+DlgLnkPopScroll : "Posuvníky",
+DlgLnkPopStatus : "Stavový řádek",
+DlgLnkPopToolbar : "Panel nástrojů",
+DlgLnkPopFullScrn : "Celá obrazovka (IE)",
+DlgLnkPopDependent : "Závislost (Netscape)",
+DlgLnkPopWidth : "Šířka",
+DlgLnkPopHeight : "Výška",
+DlgLnkPopLeft : "Levý okraj",
+DlgLnkPopTop : "Horní okraj",
+
+DlnLnkMsgNoUrl : "Zadejte prosím URL odkazu",
+DlnLnkMsgNoEMail : "Zadejte prosím e-mailovou adresu",
+DlnLnkMsgNoAnchor : "Vyberte prosím kotvu",
+DlnLnkMsgInvPopName : "Název vyskakovacího okna musí zaÄínat písmenem a nesmí obsahovat mezery",
+
+// Color Dialog
+DlgColorTitle : "Výběr barvy",
+DlgColorBtnClear : "Vymazat",
+DlgColorHighlight : "Zvýrazněná",
+DlgColorSelected : "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle : "Vkládání smajlíků",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Výběr speciálního znaku",
+
+// Table Dialog
+DlgTableTitle : "Vlastnosti tabulky",
+DlgTableRows : "Řádky",
+DlgTableColumns : "Sloupce",
+DlgTableBorder : "OhraniÄení",
+DlgTableAlign : "Zarovnání",
+DlgTableAlignNotSet : "<nenastaveno>",
+DlgTableAlignLeft : "Vlevo",
+DlgTableAlignCenter : "Na střed",
+DlgTableAlignRight : "Vpravo",
+DlgTableWidth : "Šířka",
+DlgTableWidthPx : "bodů",
+DlgTableWidthPc : "procent",
+DlgTableHeight : "Výška",
+DlgTableCellSpace : "Vzdálenost buněk",
+DlgTableCellPad : "Odsazení obsahu",
+DlgTableCaption : "Popis",
+DlgTableSummary : "Souhrn",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Vlastnosti buňky",
+DlgCellWidth : "Šířka",
+DlgCellWidthPx : "bodů",
+DlgCellWidthPc : "procent",
+DlgCellHeight : "Výška",
+DlgCellWordWrap : "Zalamování",
+DlgCellWordWrapNotSet : "<nenanstaveno>",
+DlgCellWordWrapYes : "Ano",
+DlgCellWordWrapNo : "Ne",
+DlgCellHorAlign : "Vodorovné zarovnání",
+DlgCellHorAlignNotSet : "<nenastaveno>",
+DlgCellHorAlignLeft : "Vlevo",
+DlgCellHorAlignCenter : "Na střed",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign : "Svislé zarovnání",
+DlgCellVerAlignNotSet : "<nenastaveno>",
+DlgCellVerAlignTop : "Nahoru",
+DlgCellVerAlignMiddle : "Doprostřed",
+DlgCellVerAlignBottom : "Dolů",
+DlgCellVerAlignBaseline : "Na úÄaří",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "SlouÄené řádky",
+DlgCellCollSpan : "SlouÄené sloupce",
+DlgCellBackColor : "Barva pozadí",
+DlgCellBorderColor : "Barva ohraniÄení",
+DlgCellBtnSelect : "Výběr...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Najít a nahradit",
+
+// Find Dialog
+DlgFindTitle : "Hledat",
+DlgFindFindBtn : "Hledat",
+DlgFindNotFoundMsg : "Hledaný text nebyl nalezen.",
+
+// Replace Dialog
+DlgReplaceTitle : "Nahradit",
+DlgReplaceFindLbl : "Co hledat:",
+DlgReplaceReplaceLbl : "Čím nahradit:",
+DlgReplaceCaseChk : "Rozlišovat velikost písma",
+DlgReplaceReplaceBtn : "Nahradit",
+DlgReplaceReplAllBtn : "Nahradit vše",
+DlgReplaceWordChk : "Pouze celá slova",
+
+// Paste Operations / Dialog
+PasteErrorCut : "BezpeÄnostní nastavení VaÅ¡eho prohlížeÄe nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjmÄ›te zvolený text do schránky pomocí klávesnice (Ctrl+X).",
+PasteErrorCopy : "BezpeÄnostní nastavení VaÅ¡eho prohlížeÄe nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).",
+
+PasteAsText : "Vložit jako Äistý text",
+PasteFromWord : "Vložit text z Wordu",
+
+DlgPasteMsg2 : "Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.",
+DlgPasteSec : "Z důvodů nastavení bezpeÄnosti VaÅ¡eho prohlížeÄe nemůže editor pÅ™istupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.",
+DlgPasteIgnoreFont : "Ignorovat písmo",
+DlgPasteRemoveStyles : "Odstranit styly",
+
+// Color Picker
+ColorAutomatic : "Automaticky",
+ColorMoreColors : "Více barev...",
+
+// Document Properties
+DocProps : "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle : "Vlastnosti záložky",
+DlgAnchorName : "Název záložky",
+DlgAnchorErrorName : "Zadejte prosím název záložky",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Není ve slovníku",
+DlgSpellChangeTo : "Změnit na",
+DlgSpellBtnIgnore : "PÅ™eskoÄit",
+DlgSpellBtnIgnoreAll : "Přeskakovat vše",
+DlgSpellBtnReplace : "Zaměnit",
+DlgSpellBtnReplaceAll : "Zaměňovat vše",
+DlgSpellBtnUndo : "Zpět",
+DlgSpellNoSuggestions : "- žádné návrhy -",
+DlgSpellProgress : "Probíhá kontrola pravopisu...",
+DlgSpellNoMispell : "Kontrola pravopisu dokonÄena: Žádné pravopisné chyby nenalezeny",
+DlgSpellNoChanges : "Kontrola pravopisu dokonÄena: Beze zmÄ›n",
+DlgSpellOneChange : "Kontrola pravopisu dokonÄena: Jedno slovo zmÄ›nÄ›no",
+DlgSpellManyChanges : "Kontrola pravopisu dokonÄena: %1 slov zmÄ›nÄ›no",
+
+IeSpellDownload : "Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?",
+
+// Button Dialog
+DlgButtonText : "Popisek",
+DlgButtonType : "Typ",
+DlgButtonTypeBtn : "TlaÄítko",
+DlgButtonTypeSbm : "Odeslat",
+DlgButtonTypeRst : "Obnovit",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Název",
+DlgCheckboxValue : "Hodnota",
+DlgCheckboxSelected : "Zaškrtnuto",
+
+// Form Dialog
+DlgFormName : "Název",
+DlgFormAction : "Akce",
+DlgFormMethod : "Metoda",
+
+// Select Field Dialog
+DlgSelectName : "Název",
+DlgSelectValue : "Hodnota",
+DlgSelectSize : "Velikost",
+DlgSelectLines : "Řádků",
+DlgSelectChkMulti : "Povolit mnohonásobné výběry",
+DlgSelectOpAvail : "Dostupná nastavení",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Hodnota",
+DlgSelectBtnAdd : "Přidat",
+DlgSelectBtnModify : "Změnit",
+DlgSelectBtnUp : "Nahoru",
+DlgSelectBtnDown : "Dolů",
+DlgSelectBtnSetValue : "Nastavit jako vybranou hodnotu",
+DlgSelectBtnDelete : "Smazat",
+
+// Textarea Dialog
+DlgTextareaName : "Název",
+DlgTextareaCols : "Sloupců",
+DlgTextareaRows : "Řádků",
+
+// Text Field Dialog
+DlgTextName : "Název",
+DlgTextValue : "Hodnota",
+DlgTextCharWidth : "Šířka ve znacích",
+DlgTextMaxChars : "Maximální poÄet znaků",
+DlgTextType : "Typ",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName : "Název",
+DlgHiddenValue : "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp : "Vlastnosti odrážek",
+NumberedListProp : "Vlastnosti Äíslovaného seznamu",
+DlgLstStart : "ZaÄátek",
+DlgLstType : "Typ",
+DlgLstTypeCircle : "Kružnice",
+DlgLstTypeDisc : "Kruh",
+DlgLstTypeSquare : "ÄŒtverec",
+DlgLstTypeNumbers : "Čísla (1, 2, 3)",
+DlgLstTypeLCase : "Malá písmena (a, b, c)",
+DlgLstTypeUCase : "Velká písmena (A, B, C)",
+DlgLstTypeSRoman : "Malé římská Äíslice (i, ii, iii)",
+DlgLstTypeLRoman : "Velké římské Äíslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Obecné",
+DlgDocBackTab : "Pozadí",
+DlgDocColorsTab : "Barvy a okraje",
+DlgDocMetaTab : "Metadata",
+
+DlgDocPageTitle : "Titulek stránky",
+DlgDocLangDir : "Směr jazyku",
+DlgDocLangDirLTR : "Zleva do prava ",
+DlgDocLangDirRTL : "Zprava doleva",
+DlgDocLangCode : "Kód jazyku",
+DlgDocCharSet : "Znaková sada",
+DlgDocCharSetCE : "Středoevropské jazyky",
+DlgDocCharSetCT : "TradiÄní ÄínÅ¡tina (Big5)",
+DlgDocCharSetCR : "Cyrilice",
+DlgDocCharSetGR : "ŘeÄtina",
+DlgDocCharSetJP : "Japonština",
+DlgDocCharSetKR : "Korejština",
+DlgDocCharSetTR : "TureÄtina",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Západoevropské jazyky",
+DlgDocCharSetOther : "Další znaková sada",
+
+DlgDocDocType : "Typ dokumentu",
+DlgDocDocTypeOther : "Jiný typ dokumetu",
+DlgDocIncXHTML : "Zahrnou deklarace XHTML",
+DlgDocBgColor : "Barva pozadí",
+DlgDocBgImage : "URL obrázku na pozadí",
+DlgDocBgNoScroll : "Nerolovatelné pozadí",
+DlgDocCText : "Text",
+DlgDocCLink : "Odkaz",
+DlgDocCVisited : "Navštívený odkaz",
+DlgDocCActive : "Vybraný odkaz",
+DlgDocMargins : "Okraje stránky",
+DlgDocMaTop : "Horní",
+DlgDocMaLeft : "Levý",
+DlgDocMaRight : "Pravý",
+DlgDocMaBottom : "Dolní",
+DlgDocMeIndex : "KlíÄová slova (oddÄ›lená Äárkou)",
+DlgDocMeDescr : "Popis dokumentu",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Autorská práva",
+DlgDocPreview : "Náhled",
+
+// Templates Dialog
+Templates : "Å ablony",
+DlgTemplatesTitle : "Å ablony obsahu",
+DlgTemplatesSelMsg : "Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):",
+DlgTemplatesLoading : "Nahrávám pÅ™eheld Å¡ablon. Prosím Äekejte...",
+DlgTemplatesNoTpl : "(Není definována žádná šablona)",
+DlgTemplatesReplace : "Nahradit aktuální obsah",
+
+// About Dialog
+DlgAboutAboutTab : "O aplikaci",
+DlgAboutBrowserInfoTab : "Informace o prohlížeÄi",
+DlgAboutLicenseTab : "Licence",
+DlgAboutVersion : "verze",
+DlgAboutInfo : "Více informací získáte na",
+
+// Div Dialog
+DlgDivGeneralTab : "Obecné",
+DlgDivAdvancedTab : "Rozšířené",
+DlgDivStyle : "Styl",
+DlgDivInlineStyle : "Vložený styl"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/da.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/da.js
new file mode 100644
index 0000000..9f33e5e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/da.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Danish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Skjul værktøjslinier",
+ToolbarExpand : "Vis værktøjslinier",
+
+// Toolbar Items and Context Menu
+Save : "Gem",
+NewPage : "Ny side",
+Preview : "Vis eksempel",
+Cut : "Klip",
+Copy : "Kopier",
+Paste : "Indsæt",
+PasteText : "Indsæt som ikke-formateret tekst",
+PasteWord : "Indsæt fra Word",
+Print : "Udskriv",
+SelectAll : "Vælg alt",
+RemoveFormat : "Fjern formatering",
+InsertLinkLbl : "Hyperlink",
+InsertLink : "Indsæt/rediger hyperlink",
+RemoveLink : "Fjern hyperlink",
+VisitLink : "Ã…bn hyperlink",
+Anchor : "Indsæt/rediger bogmærke",
+AnchorDelete : "Fjern bogmærke",
+InsertImageLbl : "Indsæt billede",
+InsertImage : "Indsæt/rediger billede",
+InsertFlashLbl : "Flash",
+InsertFlash : "Indsæt/rediger Flash",
+InsertTableLbl : "Table",
+InsertTable : "Indsæt/rediger tabel",
+InsertLineLbl : "Linie",
+InsertLine : "Indsæt vandret linie",
+InsertSpecialCharLbl: "Symbol",
+InsertSpecialChar : "Indsæt symbol",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Indsæt smiley",
+About : "Om FCKeditor",
+Bold : "Fed",
+Italic : "Kursiv",
+Underline : "Understreget",
+StrikeThrough : "Overstreget",
+Subscript : "Sænket skrift",
+Superscript : "Hævet skrift",
+LeftJustify : "Venstrestillet",
+CenterJustify : "Centreret",
+RightJustify : "Højrestillet",
+BlockJustify : "Lige margener",
+DecreaseIndent : "Formindsk indrykning",
+IncreaseIndent : "Forøg indrykning",
+Blockquote : "Blokcitat",
+CreateDiv : "Opret div container",
+EditDiv : "Rediger div container",
+DeleteDiv : "Fjern div container",
+Undo : "Fortryd",
+Redo : "Annuller fortryd",
+NumberedListLbl : "Talopstilling",
+NumberedList : "Indsæt/fjern talopstilling",
+BulletedListLbl : "Punktopstilling",
+BulletedList : "Indsæt/fjern punktopstilling",
+ShowTableBorders : "Vis tabelkanter",
+ShowDetails : "Vis detaljer",
+Style : "Typografi",
+FontFormat : "Formatering",
+Font : "Skrifttype",
+FontSize : "Skriftstørrelse",
+TextColor : "Tekstfarve",
+BGColor : "Baggrundsfarve",
+Source : "Kilde",
+Find : "Søg",
+Replace : "Erstat",
+SpellCheck : "Stavekontrol",
+UniversalKeyboard : "Universaltastatur",
+PageBreakLbl : "Sidskift",
+PageBreak : "Indsæt sideskift",
+
+Form : "Indsæt formular",
+Checkbox : "Indsæt afkrydsningsfelt",
+RadioButton : "Indsæt alternativknap",
+TextField : "Indsæt tekstfelt",
+Textarea : "Indsæt tekstboks",
+HiddenField : "Indsæt skjult felt",
+Button : "Indsæt knap",
+SelectionField : "Indsæt liste",
+ImageButton : "Indsæt billedknap",
+
+FitWindow : "Maksimer editor vinduet",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Rediger hyperlink",
+CellCM : "Celle",
+RowCM : "Række",
+ColumnCM : "Kolonne",
+InsertRowAfter : "Indsæt række efter",
+InsertRowBefore : "Indsæt række før",
+DeleteRows : "Slet række",
+InsertColumnAfter : "Indsæt kolonne efter",
+InsertColumnBefore : "Indsæt kolonne før",
+DeleteColumns : "Slet kolonne",
+InsertCellAfter : "Indsæt celle efter",
+InsertCellBefore : "Indsæt celle før",
+DeleteCells : "Slet celle",
+MergeCells : "Flet celler",
+MergeRight : "Flet til højre",
+MergeDown : "Flet nedad",
+HorizontalSplitCell : "Del celle vandret",
+VerticalSplitCell : "Del celle lodret",
+TableDelete : "Slet tabel",
+CellProperties : "Egenskaber for celle",
+TableProperties : "Egenskaber for tabel",
+ImageProperties : "Egenskaber for billede",
+FlashProperties : "Egenskaber for Flash",
+
+AnchorProp : "Egenskaber for bogmærke",
+ButtonProp : "Egenskaber for knap",
+CheckboxProp : "Egenskaber for afkrydsningsfelt",
+HiddenFieldProp : "Egenskaber for skjult felt",
+RadioButtonProp : "Egenskaber for alternativknap",
+ImageButtonProp : "Egenskaber for billedknap",
+TextFieldProp : "Egenskaber for tekstfelt",
+SelectionFieldProp : "Egenskaber for liste",
+TextareaProp : "Egenskaber for tekstboks",
+FormProp : "Egenskaber for formular",
+
+FontFormats : "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Behandler XHTML...",
+Done : "Færdig",
+PasteWordConfirm : "Den tekst du forsøger at indsætte ser ud til at komme fra Word.<br>Vil du rense teksten før den indsættes?",
+NotCompatiblePaste : "Denne kommando er tilgændelig i Internet Explorer 5.5 eller senere.<br>Vil du indsætte teksten uden at rense den ?",
+UnknownToolbarItem : "Ukendt værktøjslinjeobjekt \"%1\"!",
+UnknownCommand : "Ukendt kommandonavn \"%1\"!",
+NotImplemented : "Kommandoen er ikke implementeret!",
+UnknownToolbarSet : "Værktøjslinjen \"%1\" eksisterer ikke!",
+NoActiveX : "Din browsers sikkerhedsindstillinger begrænser nogle af editorens muligheder.<br>Slå \"Kør ActiveX-objekter og plug-ins\" til, ellers vil du opleve fejl og manglende muligheder.",
+BrowseServerBlocked : "Browseren kunne ikke åbne de nødvendige ressourcer!<br>Slå pop-up blokering fra.",
+DialogBlocked : "Dialogvinduet kunne ikke åbnes!<br>Slå pop-up blokering fra.",
+VisitLinkBlocked : "Det var ikke muligt at åbne et nyt vindue. Tjek, at ingen popup-blokkere er aktive.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Annuller",
+DlgBtnClose : "Luk",
+DlgBtnBrowseServer : "Gennemse...",
+DlgAdvancedTag : "Avanceret",
+DlgOpOther : "<Andet>",
+DlgInfoTab : "Generelt",
+DlgAlertUrl : "Indtast URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<intet valgt>",
+DlgGenId : "Id",
+DlgGenLangDir : "Tekstretning",
+DlgGenLangDirLtr : "Fra venstre mod højre (LTR)",
+DlgGenLangDirRtl : "Fra højre mod venstre (RTL)",
+DlgGenLangCode : "Sprogkode",
+DlgGenAccessKey : "Genvejstast",
+DlgGenName : "Navn",
+DlgGenTabIndex : "Tabulator indeks",
+DlgGenLongDescr : "Udvidet beskrivelse",
+DlgGenClass : "Typografiark",
+DlgGenTitle : "Titel",
+DlgGenContType : "Indholdstype",
+DlgGenLinkCharset : "Tegnsæt",
+DlgGenStyle : "Typografi",
+
+// Image Dialog
+DlgImgTitle : "Egenskaber for billede",
+DlgImgInfoTab : "Generelt",
+DlgImgBtnUpload : "Upload",
+DlgImgURL : "URL",
+DlgImgUpload : "Upload",
+DlgImgAlt : "Alternativ tekst",
+DlgImgWidth : "Bredde",
+DlgImgHeight : "Højde",
+DlgImgLockRatio : "Lås størrelsesforhold",
+DlgBtnResetSize : "Nulstil størrelse",
+DlgImgBorder : "Ramme",
+DlgImgHSpace : "HMargen",
+DlgImgVSpace : "VMargen",
+DlgImgAlign : "Justering",
+DlgImgAlignLeft : "Venstre",
+DlgImgAlignAbsBottom: "Absolut nederst",
+DlgImgAlignAbsMiddle: "Absolut centreret",
+DlgImgAlignBaseline : "Grundlinje",
+DlgImgAlignBottom : "Nederst",
+DlgImgAlignMiddle : "Centreret",
+DlgImgAlignRight : "Højre",
+DlgImgAlignTextTop : "Toppen af teksten",
+DlgImgAlignTop : "Øverst",
+DlgImgPreview : "Vis eksempel",
+DlgImgAlertUrl : "Indtast stien til billedet",
+DlgImgLinkTab : "Hyperlink",
+
+// Flash Dialog
+DlgFlashTitle : "Egenskaber for Flash",
+DlgFlashChkPlay : "Automatisk afspilning",
+DlgFlashChkLoop : "Gentagelse",
+DlgFlashChkMenu : "Vis Flash menu",
+DlgFlashScale : "Skalér",
+DlgFlashScaleAll : "Vis alt",
+DlgFlashScaleNoBorder : "Ingen ramme",
+DlgFlashScaleFit : "Tilpas størrelse",
+
+// Link Dialog
+DlgLnkWindowTitle : "Egenskaber for hyperlink",
+DlgLnkInfoTab : "Generelt",
+DlgLnkTargetTab : "MÃ¥l",
+
+DlgLnkType : "Hyperlink type",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Bogmærke på denne side",
+DlgLnkTypeEMail : "E-mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<anden>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Vælg et anker",
+DlgLnkAnchorByName : "Efter anker navn",
+DlgLnkAnchorById : "Efter element Id",
+DlgLnkNoAnchors : "(Ingen bogmærker dokumentet)",
+DlgLnkEMail : "E-mailadresse",
+DlgLnkEMailSubject : "Emne",
+DlgLnkEMailBody : "Brødtekst",
+DlgLnkUpload : "Upload",
+DlgLnkBtnUpload : "Upload",
+
+DlgLnkTarget : "MÃ¥l",
+DlgLnkTargetFrame : "<ramme>",
+DlgLnkTargetPopup : "<popup vindue>",
+DlgLnkTargetBlank : "Nyt vindue (_blank)",
+DlgLnkTargetParent : "Overordnet ramme (_parent)",
+DlgLnkTargetSelf : "Samme vindue (_self)",
+DlgLnkTargetTop : "Hele vinduet (_top)",
+DlgLnkTargetFrameName : "Destinationsvinduets navn",
+DlgLnkPopWinName : "Pop-up vinduets navn",
+DlgLnkPopWinFeat : "Egenskaber for pop-up",
+DlgLnkPopResize : "Skalering",
+DlgLnkPopLocation : "Adresselinje",
+DlgLnkPopMenu : "Menulinje",
+DlgLnkPopScroll : "Scrollbars",
+DlgLnkPopStatus : "Statuslinje",
+DlgLnkPopToolbar : "Værktøjslinje",
+DlgLnkPopFullScrn : "Fuld skærm (IE)",
+DlgLnkPopDependent : "Koblet/dependent (Netscape)",
+DlgLnkPopWidth : "Bredde",
+DlgLnkPopHeight : "Højde",
+DlgLnkPopLeft : "Position fra venstre",
+DlgLnkPopTop : "Position fra toppen",
+
+DlnLnkMsgNoUrl : "Indtast hyperlink URL!",
+DlnLnkMsgNoEMail : "Indtast e-mailaddresse!",
+DlnLnkMsgNoAnchor : "Vælg bogmærke!",
+DlnLnkMsgInvPopName : "Navnet på popup'en skal starte med et bogstav og må ikke indeholde mellemrum",
+
+// Color Dialog
+DlgColorTitle : "Vælg farve",
+DlgColorBtnClear : "Nulstil",
+DlgColorHighlight : "Markeret",
+DlgColorSelected : "Valgt",
+
+// Smiley Dialog
+DlgSmileyTitle : "Vælg smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Vælg symbol",
+
+// Table Dialog
+DlgTableTitle : "Egenskaber for tabel",
+DlgTableRows : "Rækker",
+DlgTableColumns : "Kolonner",
+DlgTableBorder : "Rammebredde",
+DlgTableAlign : "Justering",
+DlgTableAlignNotSet : "<intet valgt>",
+DlgTableAlignLeft : "Venstrestillet",
+DlgTableAlignCenter : "Centreret",
+DlgTableAlignRight : "Højrestillet",
+DlgTableWidth : "Bredde",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "procent",
+DlgTableHeight : "Højde",
+DlgTableCellSpace : "Celleafstand",
+DlgTableCellPad : "Cellemargen",
+DlgTableCaption : "Titel",
+DlgTableSummary : "Resume",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Egenskaber for celle",
+DlgCellWidth : "Bredde",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "procent",
+DlgCellHeight : "Højde",
+DlgCellWordWrap : "Orddeling",
+DlgCellWordWrapNotSet : "<intet valgt>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nej",
+DlgCellHorAlign : "Vandret justering",
+DlgCellHorAlignNotSet : "<intet valgt>",
+DlgCellHorAlignLeft : "Venstrestillet",
+DlgCellHorAlignCenter : "Centreret",
+DlgCellHorAlignRight: "Højrestillet",
+DlgCellVerAlign : "Lodret justering",
+DlgCellVerAlignNotSet : "<intet valgt>",
+DlgCellVerAlignTop : "Øverst",
+DlgCellVerAlignMiddle : "Centreret",
+DlgCellVerAlignBottom : "Nederst",
+DlgCellVerAlignBaseline : "Grundlinje",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Højde i antal rækker",
+DlgCellCollSpan : "Bredde i antal kolonner",
+DlgCellBackColor : "Baggrundsfarve",
+DlgCellBorderColor : "Rammefarve",
+DlgCellBtnSelect : "Vælg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Søg og erstat",
+
+// Find Dialog
+DlgFindTitle : "Find",
+DlgFindFindBtn : "Find",
+DlgFindNotFoundMsg : "Søgeteksten blev ikke fundet!",
+
+// Replace Dialog
+DlgReplaceTitle : "Erstat",
+DlgReplaceFindLbl : "Søg efter:",
+DlgReplaceReplaceLbl : "Erstat med:",
+DlgReplaceCaseChk : "Forskel på store og små bogstaver",
+DlgReplaceReplaceBtn : "Erstat",
+DlgReplaceReplAllBtn : "Erstat alle",
+DlgReplaceWordChk : "Kun hele ord",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!<br>Brug i stedet tastaturet til at klippe teksten (Ctrl+X).",
+PasteErrorCopy : "Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!<br>Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).",
+
+PasteAsText : "Indsæt som ikke-formateret tekst",
+PasteFromWord : "Indsæt fra Word",
+
+DlgPasteMsg2 : "Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.",
+DlgPasteSec : "På grund af browserens sikkerhedsindstillinger kan editoren ikke tilgå udklipsholderen direkte. Du skal indsætte udklipsholderens indhold i dette vindue igen.",
+DlgPasteIgnoreFont : "Ignorer font definitioner",
+DlgPasteRemoveStyles : "Ignorer typografi",
+
+// Color Picker
+ColorAutomatic : "Automatisk",
+ColorMoreColors : "Flere farver...",
+
+// Document Properties
+DocProps : "Egenskaber for dokument",
+
+// Anchor Dialog
+DlgAnchorTitle : "Egenskaber for bogmærke",
+DlgAnchorName : "Bogmærke navn",
+DlgAnchorErrorName : "Indtast bogmærke navn!",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ikke i ordbogen",
+DlgSpellChangeTo : "Forslag",
+DlgSpellBtnIgnore : "Ignorer",
+DlgSpellBtnIgnoreAll : "Ignorer alle",
+DlgSpellBtnReplace : "Erstat",
+DlgSpellBtnReplaceAll : "Erstat alle",
+DlgSpellBtnUndo : "Tilbage",
+DlgSpellNoSuggestions : "- ingen forslag -",
+DlgSpellProgress : "Stavekontrolen arbejder...",
+DlgSpellNoMispell : "Stavekontrol færdig: Ingen fejl fundet",
+DlgSpellNoChanges : "Stavekontrol færdig: Ingen ord ændret",
+DlgSpellOneChange : "Stavekontrol færdig: Et ord ændret",
+DlgSpellManyChanges : "Stavekontrol færdig: %1 ord ændret",
+
+IeSpellDownload : "Stavekontrol ikke installeret.<br>Vil du hente den nu?",
+
+// Button Dialog
+DlgButtonText : "Tekst",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Knap",
+DlgButtonTypeSbm : "Send",
+DlgButtonTypeRst : "Nulstil",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Navn",
+DlgCheckboxValue : "Værdi",
+DlgCheckboxSelected : "Valgt",
+
+// Form Dialog
+DlgFormName : "Navn",
+DlgFormAction : "Handling",
+DlgFormMethod : "Metod",
+
+// Select Field Dialog
+DlgSelectName : "Navn",
+DlgSelectValue : "Værdi",
+DlgSelectSize : "Størrelse",
+DlgSelectLines : "linier",
+DlgSelectChkMulti : "Tillad flere valg",
+DlgSelectOpAvail : "Valgmuligheder",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Værdi",
+DlgSelectBtnAdd : "Tilføj",
+DlgSelectBtnModify : "Rediger",
+DlgSelectBtnUp : "Op",
+DlgSelectBtnDown : "Ned",
+DlgSelectBtnSetValue : "Sæt som valgt",
+DlgSelectBtnDelete : "Slet",
+
+// Textarea Dialog
+DlgTextareaName : "Navn",
+DlgTextareaCols : "Kolonner",
+DlgTextareaRows : "Rækker",
+
+// Text Field Dialog
+DlgTextName : "Navn",
+DlgTextValue : "Værdi",
+DlgTextCharWidth : "Bredde (tegn)",
+DlgTextMaxChars : "Max antal tegn",
+DlgTextType : "Type",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Adgangskode",
+
+// Hidden Field Dialog
+DlgHiddenName : "Navn",
+DlgHiddenValue : "Værdi",
+
+// Bulleted List Dialog
+BulletedListProp : "Egenskaber for punktopstilling",
+NumberedListProp : "Egenskaber for talopstilling",
+DlgLstStart : "Start",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Cirkel",
+DlgLstTypeDisc : "Udfyldt cirkel",
+DlgLstTypeSquare : "Firkant",
+DlgLstTypeNumbers : "Nummereret (1, 2, 3)",
+DlgLstTypeLCase : "Små bogstaver (a, b, c)",
+DlgLstTypeUCase : "Store bogstaver (A, B, C)",
+DlgLstTypeSRoman : "Små romertal (i, ii, iii)",
+DlgLstTypeLRoman : "Store romertal (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Generelt",
+DlgDocBackTab : "Baggrund",
+DlgDocColorsTab : "Farver og margen",
+DlgDocMetaTab : "Metadata",
+
+DlgDocPageTitle : "Sidetitel",
+DlgDocLangDir : "Sprog",
+DlgDocLangDirLTR : "Fra venstre mod højre (LTR)",
+DlgDocLangDirRTL : "Fra højre mod venstre (RTL)",
+DlgDocLangCode : "Landekode",
+DlgDocCharSet : "Tegnsæt kode",
+DlgDocCharSetCE : "Centraleuropæisk",
+DlgDocCharSetCT : "Traditionel kinesisk (Big5)",
+DlgDocCharSetCR : "Kyrillisk",
+DlgDocCharSetGR : "Græsk",
+DlgDocCharSetJP : "Japansk",
+DlgDocCharSetKR : "Koreansk",
+DlgDocCharSetTR : "Tyrkisk",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Vesteuropæisk",
+DlgDocCharSetOther : "Anden tegnsæt kode",
+
+DlgDocDocType : "Dokumenttype kategori",
+DlgDocDocTypeOther : "Anden dokumenttype kategori",
+DlgDocIncXHTML : "Inkludere XHTML deklartion",
+DlgDocBgColor : "Baggrundsfarve",
+DlgDocBgImage : "Baggrundsbillede URL",
+DlgDocBgNoScroll : "Fastlåst baggrund",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Hyperlink",
+DlgDocCVisited : "Besøgt hyperlink",
+DlgDocCActive : "Aktivt hyperlink",
+DlgDocMargins : "Sidemargen",
+DlgDocMaTop : "Øverst",
+DlgDocMaLeft : "Venstre",
+DlgDocMaRight : "Højre",
+DlgDocMaBottom : "Nederst",
+DlgDocMeIndex : "Dokument index nøgleord (kommasepareret)",
+DlgDocMeDescr : "Dokument beskrivelse",
+DlgDocMeAuthor : "Forfatter",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Vis",
+
+// Templates Dialog
+Templates : "Skabeloner",
+DlgTemplatesTitle : "Indholdsskabeloner",
+DlgTemplatesSelMsg : "Vælg den skabelon, som skal åbnes i editoren.<br>(Nuværende indhold vil blive overskrevet!):",
+DlgTemplatesLoading : "Henter liste over skabeloner...",
+DlgTemplatesNoTpl : "(Der er ikke defineret nogen skabelon!)",
+DlgTemplatesReplace : "Erstat det faktiske indhold",
+
+// About Dialog
+DlgAboutAboutTab : "Om",
+DlgAboutBrowserInfoTab : "Generelt",
+DlgAboutLicenseTab : "Licens",
+DlgAboutVersion : "version",
+DlgAboutInfo : "For yderlig information gå til",
+
+// Div Dialog
+DlgDivGeneralTab : "Generelt",
+DlgDivAdvancedTab : "Avanceret",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Inline style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/de.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/de.js
new file mode 100644
index 0000000..b2724e3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/de.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * German language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Symbolleiste einklappen",
+ToolbarExpand : "Symbolleiste ausklappen",
+
+// Toolbar Items and Context Menu
+Save : "Speichern",
+NewPage : "Neue Seite",
+Preview : "Vorschau",
+Cut : "Ausschneiden",
+Copy : "Kopieren",
+Paste : "Einfügen",
+PasteText : "aus Textdatei einfügen",
+PasteWord : "aus MS-Word einfügen",
+Print : "Drucken",
+SelectAll : "Alles auswählen",
+RemoveFormat : "Formatierungen entfernen",
+InsertLinkLbl : "Link",
+InsertLink : "Link einfügen/editieren",
+RemoveLink : "Link entfernen",
+VisitLink : "Link aufrufen",
+Anchor : "Anker einfügen/editieren",
+AnchorDelete : "Anker entfernen",
+InsertImageLbl : "Bild",
+InsertImage : "Bild einfügen/editieren",
+InsertFlashLbl : "Flash",
+InsertFlash : "Flash einfügen/editieren",
+InsertTableLbl : "Tabelle",
+InsertTable : "Tabelle einfügen/editieren",
+InsertLineLbl : "Linie",
+InsertLine : "Horizontale Linie einfügen",
+InsertSpecialCharLbl: "Sonderzeichen",
+InsertSpecialChar : "Sonderzeichen einfügen/editieren",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Smiley einfügen",
+About : "Ãœber FCKeditor",
+Bold : "Fett",
+Italic : "Kursiv",
+Underline : "Unterstrichen",
+StrikeThrough : "Durchgestrichen",
+Subscript : "Tiefgestellt",
+Superscript : "Hochgestellt",
+LeftJustify : "Linksbündig",
+CenterJustify : "Zentriert",
+RightJustify : "Rechtsbündig",
+BlockJustify : "Blocksatz",
+DecreaseIndent : "Einzug verringern",
+IncreaseIndent : "Einzug erhöhen",
+Blockquote : "Zitatblock",
+CreateDiv : "Erzeuge Div Block",
+EditDiv : "Bearbeite Div Block",
+DeleteDiv : "Entferne Div Block",
+Undo : "Rückgängig",
+Redo : "Wiederherstellen",
+NumberedListLbl : "Nummerierte Liste",
+NumberedList : "Nummerierte Liste einfügen/entfernen",
+BulletedListLbl : "Liste",
+BulletedList : "Liste einfügen/entfernen",
+ShowTableBorders : "Zeige Tabellenrahmen",
+ShowDetails : "Zeige Details",
+Style : "Stil",
+FontFormat : "Format",
+Font : "Schriftart",
+FontSize : "Größe",
+TextColor : "Textfarbe",
+BGColor : "Hintergrundfarbe",
+Source : "Quellcode",
+Find : "Suchen",
+Replace : "Ersetzen",
+SpellCheck : "Rechtschreibprüfung",
+UniversalKeyboard : "Universal-Tastatur",
+PageBreakLbl : "Seitenumbruch",
+PageBreak : "Seitenumbruch einfügen",
+
+Form : "Formular",
+Checkbox : "Checkbox",
+RadioButton : "Radiobutton",
+TextField : "Textfeld einzeilig",
+Textarea : "Textfeld mehrzeilig",
+HiddenField : "verstecktes Feld",
+Button : "Klickbutton",
+SelectionField : "Auswahlfeld",
+ImageButton : "Bildbutton",
+
+FitWindow : "Editor maximieren",
+ShowBlocks : "Blöcke anzeigen",
+
+// Context Menu
+EditLink : "Link editieren",
+CellCM : "Zelle",
+RowCM : "Zeile",
+ColumnCM : "Spalte",
+InsertRowAfter : "Zeile unterhalb einfügen",
+InsertRowBefore : "Zeile oberhalb einfügen",
+DeleteRows : "Zeile entfernen",
+InsertColumnAfter : "Spalte rechts danach einfügen",
+InsertColumnBefore : "Spalte links davor einfügen",
+DeleteColumns : "Spalte löschen",
+InsertCellAfter : "Zelle danach einfügen",
+InsertCellBefore : "Zelle davor einfügen",
+DeleteCells : "Zelle löschen",
+MergeCells : "Zellen verbinden",
+MergeRight : "nach rechts verbinden",
+MergeDown : "nach unten verbinden",
+HorizontalSplitCell : "Zelle horizontal teilen",
+VerticalSplitCell : "Zelle vertikal teilen",
+TableDelete : "Tabelle löschen",
+CellProperties : "Zellen-Eigenschaften",
+TableProperties : "Tabellen-Eigenschaften",
+ImageProperties : "Bild-Eigenschaften",
+FlashProperties : "Flash-Eigenschaften",
+
+AnchorProp : "Anker-Eigenschaften",
+ButtonProp : "Button-Eigenschaften",
+CheckboxProp : "Checkbox-Eigenschaften",
+HiddenFieldProp : "Verstecktes Feld-Eigenschaften",
+RadioButtonProp : "Optionsfeld-Eigenschaften",
+ImageButtonProp : "Bildbutton-Eigenschaften",
+TextFieldProp : "Textfeld (einzeilig) Eigenschaften",
+SelectionFieldProp : "Auswahlfeld-Eigenschaften",
+TextareaProp : "Textfeld (mehrzeilig) Eigenschaften",
+FormProp : "Formular-Eigenschaften",
+
+FontFormats : "Normal;Formatiert;Addresse;Ãœberschrift 1;Ãœberschrift 2;Ãœberschrift 3;Ãœberschrift 4;Ãœberschrift 5;Ãœberschrift 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Bearbeite XHTML. Bitte warten...",
+Done : "Fertig",
+PasteWordConfirm : "Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?",
+NotCompatiblePaste : "Diese Funktion steht nur im Internet Explorer ab Version 5.5 zur Verfügung. Möchten Sie den Text unbereinigt einfügen?",
+UnknownToolbarItem : "Unbekanntes Menüleisten-Objekt \"%1\"",
+UnknownCommand : "Unbekannter Befehl \"%1\"",
+NotImplemented : "Befehl nicht implementiert",
+UnknownToolbarSet : "Menüleiste \"%1\" existiert nicht",
+NoActiveX : "Die Sicherheitseinstellungen Ihres Browsers beschränken evtl. einige Funktionen des Editors. Aktivieren Sie die Option \"ActiveX-Steuerelemente und Plugins ausführen\" in den Sicherheitseinstellungen, um diese Funktionen nutzen zu können",
+BrowseServerBlocked : "Ein Auswahlfenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.",
+DialogBlocked : "Das Dialog-Fenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.",
+VisitLinkBlocked : "Es war leider nicht möglich ein neues Fenster zu öffnen. Bitte versichern Sie sich das der Popup-Blocker ausgeschaltet ist.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Abbrechen",
+DlgBtnClose : "Schließen",
+DlgBtnBrowseServer : "Server durchsuchen",
+DlgAdvancedTag : "Erweitert",
+DlgOpOther : "<andere>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Bitte tragen Sie die URL ein",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nichts>",
+DlgGenId : "ID",
+DlgGenLangDir : "Schreibrichtung",
+DlgGenLangDirLtr : "Links nach Rechts (LTR)",
+DlgGenLangDirRtl : "Rechts nach Links (RTL)",
+DlgGenLangCode : "Sprachenkürzel",
+DlgGenAccessKey : "Zugriffstaste",
+DlgGenName : "Name",
+DlgGenTabIndex : "Tab-Index",
+DlgGenLongDescr : "Langform URL",
+DlgGenClass : "Stylesheet Klasse",
+DlgGenTitle : "Titel Beschreibung",
+DlgGenContType : "Inhaltstyp",
+DlgGenLinkCharset : "Ziel-Zeichensatz",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Bild-Eigenschaften",
+DlgImgInfoTab : "Bild-Info",
+DlgImgBtnUpload : "Zum Server senden",
+DlgImgURL : "Bildauswahl",
+DlgImgUpload : "Upload",
+DlgImgAlt : "Alternativer Text",
+DlgImgWidth : "Breite",
+DlgImgHeight : "Höhe",
+DlgImgLockRatio : "Größenverhältniss beibehalten",
+DlgBtnResetSize : "Größe zurücksetzen",
+DlgImgBorder : "Rahmen",
+DlgImgHSpace : "Horizontal-Abstand",
+DlgImgVSpace : "Vertikal-Abstand",
+DlgImgAlign : "Ausrichtung",
+DlgImgAlignLeft : "Links",
+DlgImgAlignAbsBottom: "Abs Unten",
+DlgImgAlignAbsMiddle: "Abs Mitte",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Unten",
+DlgImgAlignMiddle : "Mitte",
+DlgImgAlignRight : "Rechts",
+DlgImgAlignTextTop : "Text Oben",
+DlgImgAlignTop : "Oben",
+DlgImgPreview : "Vorschau",
+DlgImgAlertUrl : "Bitte geben Sie die Bild-URL an",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Flash-Eigenschaften",
+DlgFlashChkPlay : "autom. Abspielen",
+DlgFlashChkLoop : "Endlosschleife",
+DlgFlashChkMenu : "Flash-Menü aktivieren",
+DlgFlashScale : "Skalierung",
+DlgFlashScaleAll : "Alles anzeigen",
+DlgFlashScaleNoBorder : "ohne Rand",
+DlgFlashScaleFit : "Passgenau",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link-Info",
+DlgLnkTargetTab : "Zielseite",
+
+DlgLnkType : "Link-Typ",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Anker in dieser Seite",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokoll",
+DlgLnkProtoOther : "<anderes>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Anker auswählen",
+DlgLnkAnchorByName : "nach Anker Name",
+DlgLnkAnchorById : "nach Element Id",
+DlgLnkNoAnchors : "(keine Anker im Dokument vorhanden)",
+DlgLnkEMail : "E-Mail Addresse",
+DlgLnkEMailSubject : "Betreffzeile",
+DlgLnkEMailBody : "Nachrichtentext",
+DlgLnkUpload : "Upload",
+DlgLnkBtnUpload : "Zum Server senden",
+
+DlgLnkTarget : "Zielseite",
+DlgLnkTargetFrame : "<Frame>",
+DlgLnkTargetPopup : "<Pop-up Fenster>",
+DlgLnkTargetBlank : "Neues Fenster (_blank)",
+DlgLnkTargetParent : "Oberes Fenster (_parent)",
+DlgLnkTargetSelf : "Gleiches Fenster (_self)",
+DlgLnkTargetTop : "Oberstes Fenster (_top)",
+DlgLnkTargetFrameName : "Ziel-Fenster-Name",
+DlgLnkPopWinName : "Pop-up Fenster-Name",
+DlgLnkPopWinFeat : "Pop-up Fenster-Eigenschaften",
+DlgLnkPopResize : "Vergrößerbar",
+DlgLnkPopLocation : "Adress-Leiste",
+DlgLnkPopMenu : "Menü-Leiste",
+DlgLnkPopScroll : "Rollbalken",
+DlgLnkPopStatus : "Statusleiste",
+DlgLnkPopToolbar : "Werkzeugleiste",
+DlgLnkPopFullScrn : "Vollbild (IE)",
+DlgLnkPopDependent : "Abhängig (Netscape)",
+DlgLnkPopWidth : "Breite",
+DlgLnkPopHeight : "Höhe",
+DlgLnkPopLeft : "Linke Position",
+DlgLnkPopTop : "Obere Position",
+
+DlnLnkMsgNoUrl : "Bitte geben Sie die Link-URL an",
+DlnLnkMsgNoEMail : "Bitte geben Sie e-Mail Adresse an",
+DlnLnkMsgNoAnchor : "Bitte wählen Sie einen Anker aus",
+DlnLnkMsgInvPopName : "Der Name des Popups muss mit einem Buchstaben beginnen und darf keine Leerzeichen enthalten",
+
+// Color Dialog
+DlgColorTitle : "Farbauswahl",
+DlgColorBtnClear : "Keine Farbe",
+DlgColorHighlight : "Vorschau",
+DlgColorSelected : "Ausgewählt",
+
+// Smiley Dialog
+DlgSmileyTitle : "Smiley auswählen",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Sonderzeichen auswählen",
+
+// Table Dialog
+DlgTableTitle : "Tabellen-Eigenschaften",
+DlgTableRows : "Zeile",
+DlgTableColumns : "Spalte",
+DlgTableBorder : "Rahmen",
+DlgTableAlign : "Ausrichtung",
+DlgTableAlignNotSet : "<keine>",
+DlgTableAlignLeft : "Links",
+DlgTableAlignCenter : "Zentriert",
+DlgTableAlignRight : "Rechts",
+DlgTableWidth : "Breite",
+DlgTableWidthPx : "Pixel",
+DlgTableWidthPc : "%",
+DlgTableHeight : "Höhe",
+DlgTableCellSpace : "Zellenabstand außen",
+DlgTableCellPad : "Zellenabstand innen",
+DlgTableCaption : "Ãœberschrift",
+DlgTableSummary : "Inhaltsübersicht",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Zellen-Eigenschaften",
+DlgCellWidth : "Breite",
+DlgCellWidthPx : "Pixel",
+DlgCellWidthPc : "%",
+DlgCellHeight : "Höhe",
+DlgCellWordWrap : "Umbruch",
+DlgCellWordWrapNotSet : "<keiner>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nein",
+DlgCellHorAlign : "Horizontale Ausrichtung",
+DlgCellHorAlignNotSet : "<keine>",
+DlgCellHorAlignLeft : "Links",
+DlgCellHorAlignCenter : "Zentriert",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign : "Vertikale Ausrichtung",
+DlgCellVerAlignNotSet : "<keine>",
+DlgCellVerAlignTop : "Oben",
+DlgCellVerAlignMiddle : "Mitte",
+DlgCellVerAlignBottom : "Unten",
+DlgCellVerAlignBaseline : "Grundlinie",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Zeilen zusammenfassen",
+DlgCellCollSpan : "Spalten zusammenfassen",
+DlgCellBackColor : "Hintergrundfarbe",
+DlgCellBorderColor : "Rahmenfarbe",
+DlgCellBtnSelect : "Auswahl...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Suchen und Ersetzen",
+
+// Find Dialog
+DlgFindTitle : "Finden",
+DlgFindFindBtn : "Finden",
+DlgFindNotFoundMsg : "Der gesuchte Text wurde nicht gefunden.",
+
+// Replace Dialog
+DlgReplaceTitle : "Ersetzen",
+DlgReplaceFindLbl : "Suche nach:",
+DlgReplaceReplaceLbl : "Ersetze mit:",
+DlgReplaceCaseChk : "Groß-Kleinschreibung beachten",
+DlgReplaceReplaceBtn : "Ersetzen",
+DlgReplaceReplAllBtn : "Alle Ersetzen",
+DlgReplaceWordChk : "Nur ganze Worte suchen",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).",
+PasteErrorCopy : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).",
+
+PasteAsText : "Als Text einfügen",
+PasteFromWord : "Aus Word einfügen",
+
+DlgPasteMsg2 : "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.",
+DlgPasteSec : "Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.",
+DlgPasteIgnoreFont : "Ignoriere Schriftart-Definitionen",
+DlgPasteRemoveStyles : "Entferne Style-Definitionen",
+
+// Color Picker
+ColorAutomatic : "Automatisch",
+ColorMoreColors : "Weitere Farben...",
+
+// Document Properties
+DocProps : "Dokument-Eigenschaften",
+
+// Anchor Dialog
+DlgAnchorTitle : "Anker-Eigenschaften",
+DlgAnchorName : "Anker Name",
+DlgAnchorErrorName : "Bitte geben Sie den Namen des Ankers ein",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Nicht im Wörterbuch",
+DlgSpellChangeTo : "Ändern in",
+DlgSpellBtnIgnore : "Ignorieren",
+DlgSpellBtnIgnoreAll : "Alle Ignorieren",
+DlgSpellBtnReplace : "Ersetzen",
+DlgSpellBtnReplaceAll : "Alle Ersetzen",
+DlgSpellBtnUndo : "Rückgängig",
+DlgSpellNoSuggestions : " - keine Vorschläge - ",
+DlgSpellProgress : "Rechtschreibprüfung läuft...",
+DlgSpellNoMispell : "Rechtschreibprüfung abgeschlossen - keine Fehler gefunden",
+DlgSpellNoChanges : "Rechtschreibprüfung abgeschlossen - keine Worte geändert",
+DlgSpellOneChange : "Rechtschreibprüfung abgeschlossen - ein Wort geändert",
+DlgSpellManyChanges : "Rechtschreibprüfung abgeschlossen - %1 Wörter geändert",
+
+IeSpellDownload : "Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?",
+
+// Button Dialog
+DlgButtonText : "Text (Wert)",
+DlgButtonType : "Typ",
+DlgButtonTypeBtn : "Button",
+DlgButtonTypeSbm : "Absenden",
+DlgButtonTypeRst : "Zurücksetzen",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Name",
+DlgCheckboxValue : "Wert",
+DlgCheckboxSelected : "ausgewählt",
+
+// Form Dialog
+DlgFormName : "Name",
+DlgFormAction : "Action",
+DlgFormMethod : "Method",
+
+// Select Field Dialog
+DlgSelectName : "Name",
+DlgSelectValue : "Wert",
+DlgSelectSize : "Größe",
+DlgSelectLines : "Linien",
+DlgSelectChkMulti : "Erlaube Mehrfachauswahl",
+DlgSelectOpAvail : "Mögliche Optionen",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Wert",
+DlgSelectBtnAdd : "Hinzufügen",
+DlgSelectBtnModify : "Ändern",
+DlgSelectBtnUp : "Hoch",
+DlgSelectBtnDown : "Runter",
+DlgSelectBtnSetValue : "Setze als Standardwert",
+DlgSelectBtnDelete : "Entfernen",
+
+// Textarea Dialog
+DlgTextareaName : "Name",
+DlgTextareaCols : "Spalten",
+DlgTextareaRows : "Reihen",
+
+// Text Field Dialog
+DlgTextName : "Name",
+DlgTextValue : "Wert",
+DlgTextCharWidth : "Zeichenbreite",
+DlgTextMaxChars : "Max. Zeichen",
+DlgTextType : "Typ",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Passwort",
+
+// Hidden Field Dialog
+DlgHiddenName : "Name",
+DlgHiddenValue : "Wert",
+
+// Bulleted List Dialog
+BulletedListProp : "Listen-Eigenschaften",
+NumberedListProp : "Nummerierte Listen-Eigenschaften",
+DlgLstStart : "Start",
+DlgLstType : "Typ",
+DlgLstTypeCircle : "Ring",
+DlgLstTypeDisc : "Kreis",
+DlgLstTypeSquare : "Quadrat",
+DlgLstTypeNumbers : "Nummern (1, 2, 3)",
+DlgLstTypeLCase : "Kleinbuchstaben (a, b, c)",
+DlgLstTypeUCase : "Großbuchstaben (A, B, C)",
+DlgLstTypeSRoman : "Kleine römische Zahlen (i, ii, iii)",
+DlgLstTypeLRoman : "Große römische Zahlen (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Allgemein",
+DlgDocBackTab : "Hintergrund",
+DlgDocColorsTab : "Farben und Abstände",
+DlgDocMetaTab : "Metadaten",
+
+DlgDocPageTitle : "Seitentitel",
+DlgDocLangDir : "Schriftrichtung",
+DlgDocLangDirLTR : "Links nach Rechts",
+DlgDocLangDirRTL : "Rechts nach Links",
+DlgDocLangCode : "Sprachkürzel",
+DlgDocCharSet : "Zeichenkodierung",
+DlgDocCharSetCE : "Zentraleuropäisch",
+DlgDocCharSetCT : "traditionell Chinesisch (Big5)",
+DlgDocCharSetCR : "Kyrillisch",
+DlgDocCharSetGR : "Griechisch",
+DlgDocCharSetJP : "Japanisch",
+DlgDocCharSetKR : "Koreanisch",
+DlgDocCharSetTR : "Türkisch",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Westeuropäisch",
+DlgDocCharSetOther : "Andere Zeichenkodierung",
+
+DlgDocDocType : "Dokumententyp",
+DlgDocDocTypeOther : "Anderer Dokumententyp",
+DlgDocIncXHTML : "Beziehe XHTML Deklarationen ein",
+DlgDocBgColor : "Hintergrundfarbe",
+DlgDocBgImage : "Hintergrundbild URL",
+DlgDocBgNoScroll : "feststehender Hintergrund",
+DlgDocCText : "Text",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Besuchter Link",
+DlgDocCActive : "Aktiver Link",
+DlgDocMargins : "Seitenränder",
+DlgDocMaTop : "Oben",
+DlgDocMaLeft : "Links",
+DlgDocMaRight : "Rechts",
+DlgDocMaBottom : "Unten",
+DlgDocMeIndex : "Schlüsselwörter (durch Komma getrennt)",
+DlgDocMeDescr : "Dokument-Beschreibung",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Vorschau",
+
+// Templates Dialog
+Templates : "Vorlagen",
+DlgTemplatesTitle : "Vorlagen",
+DlgTemplatesSelMsg : "Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):",
+DlgTemplatesLoading : "Liste der Vorlagen wird geladen. Bitte warten...",
+DlgTemplatesNoTpl : "(keine Vorlagen definiert)",
+DlgTemplatesReplace : "Aktuellen Inhalt ersetzen",
+
+// About Dialog
+DlgAboutAboutTab : "Ãœber",
+DlgAboutBrowserInfoTab : "Browser-Info",
+DlgAboutLicenseTab : "Lizenz",
+DlgAboutVersion : "Version",
+DlgAboutInfo : "Für weitere Informationen siehe",
+
+// Div Dialog
+DlgDivGeneralTab : "Allgemein",
+DlgDivAdvancedTab : "Erweitert",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Inline Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/el.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/el.js
new file mode 100644
index 0000000..fe4bc46
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/el.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Greek language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "ΑπόκÏυψη ΜπάÏας ΕÏγαλείων",
+ToolbarExpand : "Εμφάνιση ΜπάÏας ΕÏγαλείων",
+
+// Toolbar Items and Context Menu
+Save : "Αποθήκευση",
+NewPage : "Îέα Σελίδα",
+Preview : "ΠÏοεπισκόπιση",
+Cut : "Αποκοπή",
+Copy : "ΑντιγÏαφή",
+Paste : "Επικόλληση",
+PasteText : "Επικόλληση (απλό κείμενο)",
+PasteWord : "Επικόλληση από το Word",
+Print : "ΕκτÏπωση",
+SelectAll : "Επιλογή όλων",
+RemoveFormat : "ΑφαίÏεση ΜοÏφοποίησης",
+InsertLinkLbl : "ΣÏνδεσμος (Link)",
+InsertLink : "Εισαγωγή/Μεταβολή Συνδέσμου (Link)",
+RemoveLink : "ΑφαίÏεση Συνδέσμου (Link)",
+VisitLink : "Open Link", //MISSING
+Anchor : "Εισαγωγή/επεξεÏγασία Anchor",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Εικόνα",
+InsertImage : "Εισαγωγή/Μεταβολή Εικόνας",
+InsertFlashLbl : "Εισαγωγή Flash",
+InsertFlash : "Εισαγωγή/επεξεÏγασία Flash",
+InsertTableLbl : "Πίνακας",
+InsertTable : "Εισαγωγή/Μεταβολή Πίνακα",
+InsertLineLbl : "ΓÏαμμή",
+InsertLine : "Εισαγωγή ΟÏιζόντιας ΓÏαμμής",
+InsertSpecialCharLbl: "Ειδικό ΣÏμβολο",
+InsertSpecialChar : "Εισαγωγή Î•Î¹Î´Î¹ÎºÎ¿Ï Î£Ï…Î¼Î²ÏŒÎ»Î¿Ï…",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Εισαγωγή Smiley",
+About : "ΠεÏί του FCKeditor",
+Bold : "Έντονα",
+Italic : "Πλάγια",
+Underline : "ΥπογÏάμμιση",
+StrikeThrough : "ΔιαγÏάμμιση",
+Subscript : "Δείκτης",
+Superscript : "Εκθέτης",
+LeftJustify : "Στοίχιση ΑÏιστεÏά",
+CenterJustify : "Στοίχιση στο ΚέντÏο",
+RightJustify : "Στοίχιση Δεξιά",
+BlockJustify : "ΠλήÏης Στοίχιση (Block)",
+DecreaseIndent : "Μείωση Εσοχής",
+IncreaseIndent : "ΑÏξηση Εσοχής",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "ΑναίÏεση",
+Redo : "ΕπαναφοÏά",
+NumberedListLbl : "Λίστα με ΑÏιθμοÏÏ‚",
+NumberedList : "Εισαγωγή/ΔιαγÏαφή Λίστας με ΑÏιθμοÏÏ‚",
+BulletedListLbl : "Λίστα με Bullets",
+BulletedList : "Εισαγωγή/ΔιαγÏαφή Λίστας με Bullets",
+ShowTableBorders : "ΠÏοβολή ΟÏίων Πίνακα",
+ShowDetails : "ΠÏοβολή ΛεπτομεÏειών",
+Style : "Στυλ",
+FontFormat : "ΜοÏφή ΓÏαμματοσειÏάς",
+Font : "ΓÏαμματοσειÏά",
+FontSize : "Μέγεθος",
+TextColor : "ΧÏώμα ΓÏαμμάτων",
+BGColor : "ΧÏώμα ΥποβάθÏου",
+Source : "HTML κώδικας",
+Find : "Αναζήτηση",
+Replace : "Αντικατάσταση",
+SpellCheck : "ΟÏθογÏαφικός έλεγχος",
+UniversalKeyboard : "Διεθνής πληκτÏολόγιο",
+PageBreakLbl : "Τέλος σελίδας",
+PageBreak : "Εισαγωγή τέλους σελίδας",
+
+Form : "ΦόÏμα",
+Checkbox : "Κουτί επιλογής",
+RadioButton : "Κουμπί Radio",
+TextField : "Πεδίο κειμένου",
+Textarea : "ΠεÏιοχή κειμένου",
+HiddenField : "ΚÏυφό πεδίο",
+Button : "Κουμπί",
+SelectionField : "Πεδίο επιλογής",
+ImageButton : "Κουμπί εικόνας",
+
+FitWindow : "Μεγιστοποίηση Ï€ÏογÏάμματος",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Μεταβολή Συνδέσμου (Link)",
+CellCM : "Κελί",
+RowCM : "ΣειÏά",
+ColumnCM : "Στήλη",
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "ΔιαγÏαφή ΓÏαμμών",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "ΔιαγÏαφή Κολωνών",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "ΔιαγÏαφή Κελιών",
+MergeCells : "Ενοποίηση Κελιών",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "ΔιαγÏαφή πίνακα",
+CellProperties : "Ιδιότητες ΚελιοÏ",
+TableProperties : "Ιδιότητες Πίνακα",
+ImageProperties : "Ιδιότητες Εικόνας",
+FlashProperties : "Ιδιότητες Flash",
+
+AnchorProp : "Ιδιότητες άγκυÏας",
+ButtonProp : "Ιδιότητες κουμπιοÏ",
+CheckboxProp : "Ιδιότητες ÎºÎ¿Ï…Î¼Ï€Î¹Î¿Ï ÎµÏ€Î¹Î»Î¿Î³Î®Ï‚",
+HiddenFieldProp : "Ιδιότητες κÏÏ…Ï†Î¿Ï Ï€ÎµÎ´Î¯Î¿Ï…",
+RadioButtonProp : "Ιδιότητες ÎºÎ¿Ï…Î¼Ï€Î¹Î¿Ï radio",
+ImageButtonProp : "Ιδιότητες ÎºÎ¿Ï…Î¼Ï€Î¹Î¿Ï ÎµÎ¹ÎºÏŒÎ½Î±Ï‚",
+TextFieldProp : "Ιδιότητες πεδίου κειμένου",
+SelectionFieldProp : "Ιδιότητες πεδίου επιλογής",
+TextareaProp : "Ιδιότητες πεÏιοχής κειμένου",
+FormProp : "Ιδιότητες φόÏμας",
+
+FontFormats : "Κανονικό;ΜοÏφοποιημένο;ΔιεÏθυνση;Επικεφαλίδα 1;Επικεφαλίδα 2;Επικεφαλίδα 3;Επικεφαλίδα 4;Επικεφαλίδα 5;Επικεφαλίδα 6",
+
+// Alerts and Messages
+ProcessingXHTML : "ΕπεξεÏγασία XHTML. ΠαÏακαλώ πεÏιμένετε...",
+Done : "Έτοιμο",
+PasteWordConfirm : "Το κείμενο που θέλετε να επικολήσετε, φαίνεται πως Ï€ÏοέÏχεται από το Word. Θέλετε να καθαÏιστεί Ï€Ïιν επικοληθεί;",
+NotCompatiblePaste : "Αυτή η επιλογή είναι διαθέσιμη στον Internet Explorer έκδοση 5.5+. Θέλετε να γίνει η επικόλληση χωÏίς καθαÏισμό;",
+UnknownToolbarItem : "Άγνωστο αντικείμενο της μπάÏας εÏγαλείων \"%1\"",
+UnknownCommand : "Άγνωστή εντολή \"%1\"",
+NotImplemented : "Η εντολή δεν έχει ενεÏγοποιηθεί",
+UnknownToolbarSet : "Η μπάÏα εÏγαλείων \"%1\" δεν υπάÏχει",
+NoActiveX : "Οι Ïυθμίσεις ασφαλείας του browser σας μποÏεί να πεÏιοÏίσουν κάποιες Ïυθμίσεις του Ï€ÏογÏάμματος. ΧÏειάζεται να ενεÏγοποιήσετε την επιλογή \"Run ActiveX controls and plug-ins\". Ίσως παÏουσιαστοÏν λάθη και παÏατηÏήσετε ελειπείς λειτουÏγίες.",
+BrowseServerBlocked : "Οι πόÏοι του browser σας δεν είναι Ï€Ïοσπελάσιμοι. ΣιγουÏευτείτε ότι δεν υπάÏχουν ενεÏγοί popup blockers.",
+DialogBlocked : "Δεν ήταν δυνατό να ανοίξει το παÏάθυÏο διαλόγου. ΣιγουÏευτείτε ότι δεν υπάÏχουν ενεÏγοί popup blockers.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "ΑκÏÏωση",
+DlgBtnClose : "Κλείσιμο",
+DlgBtnBrowseServer : "ΕξεÏεÏνηση διακομιστή",
+DlgAdvancedTag : "Για Ï€ÏοχωÏημένους",
+DlgOpOther : "<Άλλα>",
+DlgInfoTab : "ΠληÏοφοÏίες",
+DlgAlertUrl : "ΠαÏακαλώ εισάγετε URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<χωÏίς>",
+DlgGenId : "Id",
+DlgGenLangDir : "ΚατεÏθυνση κειμένου",
+DlgGenLangDirLtr : "ΑÏιστεÏά Ï€Ïος Δεξιά (LTR)",
+DlgGenLangDirRtl : "Δεξιά Ï€Ïος ΑÏιστεÏά (RTL)",
+DlgGenLangCode : "Κωδικός Γλώσσας",
+DlgGenAccessKey : "Συντόμευση (Access Key)",
+DlgGenName : "Όνομα",
+DlgGenTabIndex : "Tab Index",
+DlgGenLongDescr : "Αναλυτική πεÏιγÏαφή URL",
+DlgGenClass : "Stylesheet Classes",
+DlgGenTitle : "Συμβουλευτικός τίτλος",
+DlgGenContType : "Συμβουλευτικός τίτλος πεÏιεχομένου",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "ΣτÏλ",
+
+// Image Dialog
+DlgImgTitle : "Ιδιότητες Εικόνας",
+DlgImgInfoTab : "ΠληÏοφοÏίες Εικόνας",
+DlgImgBtnUpload : "Αποστολή στον Διακομιστή",
+DlgImgURL : "URL",
+DlgImgUpload : "Αποστολή",
+DlgImgAlt : "Εναλλακτικό Κείμενο (ALT)",
+DlgImgWidth : "Πλάτος",
+DlgImgHeight : "Ύψος",
+DlgImgLockRatio : "Κλείδωμα Αναλογίας",
+DlgBtnResetSize : "ΕπαναφοÏά ΑÏÏ‡Î¹ÎºÎ¿Ï ÎœÎµÎ³Î­Î¸Î¿Ï…Ï‚",
+DlgImgBorder : "ΠεÏιθώÏιο",
+DlgImgHSpace : "ΟÏιζόντιος ΧώÏος (HSpace)",
+DlgImgVSpace : "Κάθετος ΧώÏος (VSpace)",
+DlgImgAlign : "ΕυθυγÏάμμιση (Align)",
+DlgImgAlignLeft : "ΑÏιστεÏά",
+DlgImgAlignAbsBottom: "Απόλυτα Κάτω (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Απόλυτα στη Μέση (Abs Middle)",
+DlgImgAlignBaseline : "ΓÏαμμή Βάσης (Baseline)",
+DlgImgAlignBottom : "Κάτω (Bottom)",
+DlgImgAlignMiddle : "Μέση (Middle)",
+DlgImgAlignRight : "Δεξιά (Right)",
+DlgImgAlignTextTop : "ΚοÏυφή Κειμένου (Text Top)",
+DlgImgAlignTop : "Πάνω (Top)",
+DlgImgPreview : "ΠÏοεπισκόπιση",
+DlgImgAlertUrl : "Εισάγετε την τοποθεσία (URL) της εικόνας",
+DlgImgLinkTab : "ΣÏνδεσμος",
+
+// Flash Dialog
+DlgFlashTitle : "Ιδιότητες flash",
+DlgFlashChkPlay : "Αυτόματη έναÏξη",
+DlgFlashChkLoop : "Επανάληψη",
+DlgFlashChkMenu : "ΕνεÏγοποίηση Flash Menu",
+DlgFlashScale : "Κλίμακα",
+DlgFlashScaleAll : "Εμφάνιση όλων",
+DlgFlashScaleNoBorder : "ΧωÏίς ÏŒÏια",
+DlgFlashScaleFit : "ΑκÏιβής εφαÏμογή",
+
+// Link Dialog
+DlgLnkWindowTitle : "ΣÏνδεσμος (Link)",
+DlgLnkInfoTab : "Link",
+DlgLnkTargetTab : "ΠαÏάθυÏο Στόχος (Target)",
+
+DlgLnkType : "ΤÏπος συνδέσμου (Link)",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "ΆγκυÏα σε αυτή τη σελίδα",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "ΠÏοτόκολο",
+DlgLnkProtoOther : "<άλλο>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Επιλέξτε μια άγκυÏα",
+DlgLnkAnchorByName : "Βάσει του Ονόματος (Name) της άγκυÏας",
+DlgLnkAnchorById : "Βάσει του Element Id",
+DlgLnkNoAnchors : "(Δεν υπάÏχουν άγκυÏες στο κείμενο)",
+DlgLnkEMail : "ΔιεÏθυνση ΗλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Î¤Î±Ï‡Ï…Î´Ïομείου",
+DlgLnkEMailSubject : "Θέμα ΜηνÏματος",
+DlgLnkEMailBody : "Κείμενο ΜηνÏματος",
+DlgLnkUpload : "Αποστολή",
+DlgLnkBtnUpload : "Αποστολή στον Διακομιστή",
+
+DlgLnkTarget : "ΠαÏάθυÏο Στόχος (Target)",
+DlgLnkTargetFrame : "<πλαίσιο>",
+DlgLnkTargetPopup : "<παÏάθυÏο popup>",
+DlgLnkTargetBlank : "Îέο ΠαÏάθυÏο (_blank)",
+DlgLnkTargetParent : "Γονικό ΠαÏάθυÏο (_parent)",
+DlgLnkTargetSelf : "Ίδιο ΠαÏάθυÏο (_self)",
+DlgLnkTargetTop : "Ανώτατο ΠαÏάθυÏο (_top)",
+DlgLnkTargetFrameName : "Όνομα πλαισίου στόχου",
+DlgLnkPopWinName : "Όνομα Popup Window",
+DlgLnkPopWinFeat : "Επιλογές Popup Window",
+DlgLnkPopResize : "Με αλλαγή Μεγέθους",
+DlgLnkPopLocation : "ΜπάÏα Τοποθεσίας",
+DlgLnkPopMenu : "ΜπάÏα Menu",
+DlgLnkPopScroll : "ΜπάÏες ΚÏλισης",
+DlgLnkPopStatus : "ΜπάÏα Status",
+DlgLnkPopToolbar : "ΜπάÏα ΕÏγαλείων",
+DlgLnkPopFullScrn : "ΟλόκληÏη η Οθόνη (IE)",
+DlgLnkPopDependent : "Dependent (Netscape)",
+DlgLnkPopWidth : "Πλάτος",
+DlgLnkPopHeight : "Ύψος",
+DlgLnkPopLeft : "Τοποθεσία ΑÏιστεÏής ΆκÏης",
+DlgLnkPopTop : "Τοποθεσία Πάνω ΆκÏης",
+
+DlnLnkMsgNoUrl : "Εισάγετε την τοποθεσία (URL) του υπεÏσυνδέσμου (Link)",
+DlnLnkMsgNoEMail : "Εισάγετε την διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου",
+DlnLnkMsgNoAnchor : "Επιλέξτε ένα Anchor",
+DlnLnkMsgInvPopName : "Το όνομα του popup Ï€Ïέπει να αÏχίζει με χαÏακτήÏα της αλφαβήτου και να μην πεÏιέχει κενά",
+
+// Color Dialog
+DlgColorTitle : "Επιλογή χÏώματος",
+DlgColorBtnClear : "ΚαθαÏισμός",
+DlgColorHighlight : "ΠÏοεπισκόπιση",
+DlgColorSelected : "Επιλεγμένο",
+
+// Smiley Dialog
+DlgSmileyTitle : "Επιλέξτε ένα Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Επιλέξτε ένα Ειδικό ΣÏμβολο",
+
+// Table Dialog
+DlgTableTitle : "Ιδιότητες Πίνακα",
+DlgTableRows : "ΓÏαμμές",
+DlgTableColumns : "Κολώνες",
+DlgTableBorder : "Μέγεθος ΠεÏιθωÏίου",
+DlgTableAlign : "Στοίχιση",
+DlgTableAlignNotSet : "<χωÏίς>",
+DlgTableAlignLeft : "ΑÏιστεÏά",
+DlgTableAlignCenter : "ΚέντÏο",
+DlgTableAlignRight : "Δεξιά",
+DlgTableWidth : "Πλάτος",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "\%",
+DlgTableHeight : "Ύψος",
+DlgTableCellSpace : "Απόσταση κελιών",
+DlgTableCellPad : "Γέμισμα κελιών",
+DlgTableCaption : "ΥπέÏτιτλος",
+DlgTableSummary : "ΠεÏίληψη",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Ιδιότητες ΚελιοÏ",
+DlgCellWidth : "Πλάτος",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "\%",
+DlgCellHeight : "Ύψος",
+DlgCellWordWrap : "Με αλλαγή γÏαμμής",
+DlgCellWordWrapNotSet : "<χωÏίς>",
+DlgCellWordWrapYes : "Îαι",
+DlgCellWordWrapNo : "Όχι",
+DlgCellHorAlign : "ΟÏιζόντια Στοίχιση",
+DlgCellHorAlignNotSet : "<χωÏίς>",
+DlgCellHorAlignLeft : "ΑÏιστεÏά",
+DlgCellHorAlignCenter : "ΚέντÏο",
+DlgCellHorAlignRight: "Δεξιά",
+DlgCellVerAlign : "Κάθετη Στοίχιση",
+DlgCellVerAlignNotSet : "<χωÏίς>",
+DlgCellVerAlignTop : "Πάνω (Top)",
+DlgCellVerAlignMiddle : "Μέση (Middle)",
+DlgCellVerAlignBottom : "Κάτω (Bottom)",
+DlgCellVerAlignBaseline : "ΓÏαμμή Βάσης (Baseline)",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "ΑÏιθμός ΓÏαμμών (Rows Span)",
+DlgCellCollSpan : "ΑÏιθμός Κολωνών (Columns Span)",
+DlgCellBackColor : "ΧÏώμα ΥποβάθÏου",
+DlgCellBorderColor : "ΧÏώμα ΠεÏιθωÏίου",
+DlgCellBtnSelect : "Επιλογή...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Αναζήτηση",
+DlgFindFindBtn : "Αναζήτηση",
+DlgFindNotFoundMsg : "Το κείμενο δεν βÏέθηκε.",
+
+// Replace Dialog
+DlgReplaceTitle : "Αντικατάσταση",
+DlgReplaceFindLbl : "Αναζήτηση:",
+DlgReplaceReplaceLbl : "Αντικατάσταση με:",
+DlgReplaceCaseChk : "Έλεγχος πεζών/κεφαλαίων",
+DlgReplaceReplaceBtn : "Αντικατάσταση",
+DlgReplaceReplAllBtn : "Αντικατάσταση Όλων",
+DlgReplaceWordChk : "ΕÏÏεση πλήÏους λέξης",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Οι Ïυθμίσεις ασφαλείας του φυλλομετÏητή σας δεν επιτÏέπουν την επιλεγμένη εÏγασία αποκοπής. ΧÏησιμοποιείστε το πληκτÏολόγιο (Ctrl+X).",
+PasteErrorCopy : "Οι Ïυθμίσεις ασφαλείας του φυλλομετÏητή σας δεν επιτÏέπουν την επιλεγμένη εÏγασία αντιγÏαφής. ΧÏησιμοποιείστε το πληκτÏολόγιο (Ctrl+C).",
+
+PasteAsText : "Επικόλληση ως Απλό Κείμενο",
+PasteFromWord : "Επικόλληση από το Word",
+
+DlgPasteMsg2 : "ΠαÏακαλώ επικολήστε στο ακόλουθο κουτί χÏησιμοποιόντας το πληκτÏολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Αγνόηση Ï€ÏοδιαγÏαφών γÏαμματοσειÏάς",
+DlgPasteRemoveStyles : "ΑφαίÏεση Ï€ÏοδιαγÏαφών στÏλ",
+
+// Color Picker
+ColorAutomatic : "Αυτόματο",
+ColorMoreColors : "ΠεÏισσότεÏα χÏώματα...",
+
+// Document Properties
+DocProps : "Ιδιότητες εγγÏάφου",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ιδιότητες άγκυÏας",
+DlgAnchorName : "Όνομα άγκυÏας",
+DlgAnchorErrorName : "ΠαÏακαλοÏμε εισάγετε όνομα άγκυÏας",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Δεν υπάÏχει στο λεξικό",
+DlgSpellChangeTo : "Αλλαγή σε",
+DlgSpellBtnIgnore : "Αγνόηση",
+DlgSpellBtnIgnoreAll : "Αγνόηση όλων",
+DlgSpellBtnReplace : "Αντικατάσταση",
+DlgSpellBtnReplaceAll : "Αντικατάσταση όλων",
+DlgSpellBtnUndo : "ΑναίÏεση",
+DlgSpellNoSuggestions : "- Δεν υπάÏχουν Ï€Ïοτάσεις -",
+DlgSpellProgress : "ΟÏθογÏαφικός έλεγχος σε εξέλιξη...",
+DlgSpellNoMispell : "Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: Δεν βÏέθηκαν λάθη",
+DlgSpellNoChanges : "Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: Δεν άλλαξαν λέξεις",
+DlgSpellOneChange : "Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: Μια λέξη άλλαξε",
+DlgSpellManyChanges : "Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: %1 λέξεις άλλαξαν",
+
+IeSpellDownload : "Δεν υπάÏχει εγκατεστημένος οÏθογÏάφος. Θέλετε να τον κατεβάσετε Ï„ÏŽÏα;",
+
+// Button Dialog
+DlgButtonText : "Κείμενο (Τιμή)",
+DlgButtonType : "ΤÏπος",
+DlgButtonTypeBtn : "Κουμπί",
+DlgButtonTypeSbm : "ΚαταχώÏηση",
+DlgButtonTypeRst : "ΕπαναφοÏά",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Όνομα",
+DlgCheckboxValue : "Τιμή",
+DlgCheckboxSelected : "Επιλεγμένο",
+
+// Form Dialog
+DlgFormName : "Όνομα",
+DlgFormAction : "ΔÏάση",
+DlgFormMethod : "Μάθοδος",
+
+// Select Field Dialog
+DlgSelectName : "Όνομα",
+DlgSelectValue : "Τιμή",
+DlgSelectSize : "Μέγεθος",
+DlgSelectLines : "γÏαμμές",
+DlgSelectChkMulti : "Πολλαπλές επιλογές",
+DlgSelectOpAvail : "Διαθέσιμες επιλογές",
+DlgSelectOpText : "Κείμενο",
+DlgSelectOpValue : "Τιμή",
+DlgSelectBtnAdd : "ΠÏοσθήκη",
+DlgSelectBtnModify : "Αλλαγή",
+DlgSelectBtnUp : "Πάνω",
+DlgSelectBtnDown : "Κάτω",
+DlgSelectBtnSetValue : "ΠÏοεπιλεγμένη επιλογή",
+DlgSelectBtnDelete : "ΔιαγÏαφή",
+
+// Textarea Dialog
+DlgTextareaName : "Όνομα",
+DlgTextareaCols : "Στήλες",
+DlgTextareaRows : "ΣειÏές",
+
+// Text Field Dialog
+DlgTextName : "Όνομα",
+DlgTextValue : "Τιμή",
+DlgTextCharWidth : "Μήκος χαÏακτήÏων",
+DlgTextMaxChars : "Μέγιστοι χαÏακτήÏες",
+DlgTextType : "ΤÏπος",
+DlgTextTypeText : "Κείμενο",
+DlgTextTypePass : "Κωδικός",
+
+// Hidden Field Dialog
+DlgHiddenName : "Όνομα",
+DlgHiddenValue : "Τιμή",
+
+// Bulleted List Dialog
+BulletedListProp : "Ιδιότητες λίστας Bulleted",
+NumberedListProp : "Ιδιότητες αÏιθμημένης λίστας ",
+DlgLstStart : "ΑÏχή",
+DlgLstType : "ΤÏπος",
+DlgLstTypeCircle : "ΚÏκλος",
+DlgLstTypeDisc : "Δίσκος",
+DlgLstTypeSquare : "ΤετÏάγωνο",
+DlgLstTypeNumbers : "ΑÏιθμοί (1, 2, 3)",
+DlgLstTypeLCase : "Πεζά γÏάμματα (a, b, c)",
+DlgLstTypeUCase : "Κεφαλαία γÏάμματα (A, B, C)",
+DlgLstTypeSRoman : "ΜικÏά λατινικά αÏιθμητικά (i, ii, iii)",
+DlgLstTypeLRoman : "Μεγάλα λατινικά αÏιθμητικά (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Γενικά",
+DlgDocBackTab : "Φόντο",
+DlgDocColorsTab : "ΧÏώματα και πεÏιθώÏια",
+DlgDocMetaTab : "Δεδομένα Meta",
+
+DlgDocPageTitle : "Τίτλος σελίδας",
+DlgDocLangDir : "ΚατεÏθυνση γÏαφής",
+DlgDocLangDirLTR : "αÏιστεÏά Ï€Ïος δεξιά (LTR)",
+DlgDocLangDirRTL : "δεξιά Ï€Ïος αÏιστεÏά (RTL)",
+DlgDocLangCode : "Κωδικός γλώσσας",
+DlgDocCharSet : "Κωδικοποίηση χαÏακτήÏων",
+DlgDocCharSetCE : "ΚεντÏικής ΕυÏώπης",
+DlgDocCharSetCT : "ΠαÏαδοσιακά κινέζικα (Big5)",
+DlgDocCharSetCR : "ΚυÏιλλική",
+DlgDocCharSetGR : "Ελληνική",
+DlgDocCharSetJP : "Ιαπωνική",
+DlgDocCharSetKR : "ΚοÏεάτικη",
+DlgDocCharSetTR : "ΤουÏκική",
+DlgDocCharSetUN : "Διεθνής (UTF-8)",
+DlgDocCharSetWE : "Δυτικής ΕυÏώπης",
+DlgDocCharSetOther : "Άλλη κωδικοποίηση χαÏακτήÏων",
+
+DlgDocDocType : "Επικεφαλίδα Ï„Ïπου εγγÏάφου",
+DlgDocDocTypeOther : "Άλλη επικεφαλίδα Ï„Ïπου εγγÏάφου",
+DlgDocIncXHTML : "Îα συμπεÏιληφθοÏν οι δηλώσεις XHTML",
+DlgDocBgColor : "ΧÏώμα φόντου",
+DlgDocBgImage : "ΔιεÏθυνση εικόνας φόντου",
+DlgDocBgNoScroll : "Φόντο χωÏίς κÏλιση",
+DlgDocCText : "Κείμενο",
+DlgDocCLink : "ΣÏνδεσμος",
+DlgDocCVisited : "ΣÏνδεσμος που έχει επισκευθεί",
+DlgDocCActive : "ΕνεÏγός σÏνδεσμος",
+DlgDocMargins : "ΠεÏιθώÏια σελίδας",
+DlgDocMaTop : "ΚοÏυφή",
+DlgDocMaLeft : "ΑÏιστεÏά",
+DlgDocMaRight : "Δεξιά",
+DlgDocMaBottom : "Κάτω",
+DlgDocMeIndex : "Λέξεις κλειδιά δείκτες εγγÏάφου (διαχωÏισμός με κόμμα)",
+DlgDocMeDescr : "ΠεÏιγÏαφή εγγÏάφου",
+DlgDocMeAuthor : "ΣυγγÏαφέας",
+DlgDocMeCopy : "Πνευματικά δικαιώματα",
+DlgDocPreview : "ΠÏοεπισκόπηση",
+
+// Templates Dialog
+Templates : "ΠÏότυπα",
+DlgTemplatesTitle : "ΠÏότυπα πεÏιεχομένου",
+DlgTemplatesSelMsg : "ΠαÏακαλώ επιλέξτε Ï€Ïότυπο για εισαγωγή στο Ï€ÏόγÏαμμα<br>(τα υπάÏχοντα πεÏιεχόμενα θα χαθοÏν):",
+DlgTemplatesLoading : "ΦόÏτωση καταλόγου Ï€ÏοτÏπων. ΠαÏακαλώ πεÏιμένετε...",
+DlgTemplatesNoTpl : "(Δεν έχουν καθοÏιστεί Ï€Ïότυπα)",
+DlgTemplatesReplace : "Αντικατάσταση υπάÏχοντων πεÏιεχομένων",
+
+// About Dialog
+DlgAboutAboutTab : "Σχετικά",
+DlgAboutBrowserInfoTab : "ΠληÏοφοÏίες Browser",
+DlgAboutLicenseTab : "Άδεια",
+DlgAboutVersion : "έκδοση",
+DlgAboutInfo : "Για πεÏισσότεÏες πληÏοφοÏίες",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-au.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-au.js
new file mode 100644
index 0000000..9d68d70
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-au.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (Australia) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Collapse Toolbar",
+ToolbarExpand : "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save : "Save",
+NewPage : "New Page",
+Preview : "Preview",
+Cut : "Cut",
+Copy : "Copy",
+Paste : "Paste",
+PasteText : "Paste as plain text",
+PasteWord : "Paste from Word",
+Print : "Print",
+SelectAll : "Select All",
+RemoveFormat : "Remove Format",
+InsertLinkLbl : "Link",
+InsertLink : "Insert/Edit Link",
+RemoveLink : "Remove Link",
+VisitLink : "Open Link",
+Anchor : "Insert/Edit Anchor",
+AnchorDelete : "Remove Anchor",
+InsertImageLbl : "Image",
+InsertImage : "Insert/Edit Image",
+InsertFlashLbl : "Flash",
+InsertFlash : "Insert/Edit Flash",
+InsertTableLbl : "Table",
+InsertTable : "Insert/Edit Table",
+InsertLineLbl : "Line",
+InsertLine : "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar : "Insert Special Character",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Insert Smiley",
+About : "About FCKeditor",
+Bold : "Bold",
+Italic : "Italic",
+Underline : "Underline",
+StrikeThrough : "Strike Through",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Left Justify",
+CenterJustify : "Centre Justify",
+RightJustify : "Right Justify",
+BlockJustify : "Block Justify",
+DecreaseIndent : "Decrease Indent",
+IncreaseIndent : "Increase Indent",
+Blockquote : "Blockquote",
+CreateDiv : "Create Div Container",
+EditDiv : "Edit Div Container",
+DeleteDiv : "Remove Div Container",
+Undo : "Undo",
+Redo : "Redo",
+NumberedListLbl : "Numbered List",
+NumberedList : "Insert/Remove Numbered List",
+BulletedListLbl : "Bulleted List",
+BulletedList : "Insert/Remove Bulleted List",
+ShowTableBorders : "Show Table Borders",
+ShowDetails : "Show Details",
+Style : "Style",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "Size",
+TextColor : "Text Colour",
+BGColor : "Background Colour",
+Source : "Source",
+Find : "Find",
+Replace : "Replace",
+SpellCheck : "Check Spelling",
+UniversalKeyboard : "Universal Keyboard",
+PageBreakLbl : "Page Break",
+PageBreak : "Insert Page Break",
+
+Form : "Form",
+Checkbox : "Checkbox",
+RadioButton : "Radio Button",
+TextField : "Text Field",
+Textarea : "Textarea",
+HiddenField : "Hidden Field",
+Button : "Button",
+SelectionField : "Selection Field",
+ImageButton : "Image Button",
+
+FitWindow : "Maximize the editor size",
+ShowBlocks : "Show Blocks",
+
+// Context Menu
+EditLink : "Edit Link",
+CellCM : "Cell",
+RowCM : "Row",
+ColumnCM : "Column",
+InsertRowAfter : "Insert Row After",
+InsertRowBefore : "Insert Row Before",
+DeleteRows : "Delete Rows",
+InsertColumnAfter : "Insert Column After",
+InsertColumnBefore : "Insert Column Before",
+DeleteColumns : "Delete Columns",
+InsertCellAfter : "Insert Cell After",
+InsertCellBefore : "Insert Cell Before",
+DeleteCells : "Delete Cells",
+MergeCells : "Merge Cells",
+MergeRight : "Merge Right",
+MergeDown : "Merge Down",
+HorizontalSplitCell : "Split Cell Horizontally",
+VerticalSplitCell : "Split Cell Vertically",
+TableDelete : "Delete Table",
+CellProperties : "Cell Properties",
+TableProperties : "Table Properties",
+ImageProperties : "Image Properties",
+FlashProperties : "Flash Properties",
+
+AnchorProp : "Anchor Properties",
+ButtonProp : "Button Properties",
+CheckboxProp : "Checkbox Properties",
+HiddenFieldProp : "Hidden Field Properties",
+RadioButtonProp : "Radio Button Properties",
+ImageButtonProp : "Image Button Properties",
+TextFieldProp : "Text Field Properties",
+SelectionFieldProp : "Selection Field Properties",
+TextareaProp : "Textarea Properties",
+FormProp : "Form Properties",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Processing XHTML. Please wait...",
+Done : "Done",
+PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem : "Unknown toolbar item \"%1\"",
+UnknownCommand : "Unknown command name \"%1\"",
+NotImplemented : "Command not implemented",
+UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancel",
+DlgBtnClose : "Close",
+DlgBtnBrowseServer : "Browse Server",
+DlgAdvancedTag : "Advanced",
+DlgOpOther : "<Other>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<not set>",
+DlgGenId : "Id",
+DlgGenLangDir : "Language Direction",
+DlgGenLangDirLtr : "Left to Right (LTR)",
+DlgGenLangDirRtl : "Right to Left (RTL)",
+DlgGenLangCode : "Language Code",
+DlgGenAccessKey : "Access Key",
+DlgGenName : "Name",
+DlgGenTabIndex : "Tab Index",
+DlgGenLongDescr : "Long Description URL",
+DlgGenClass : "Stylesheet Classes",
+DlgGenTitle : "Advisory Title",
+DlgGenContType : "Advisory Content Type",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Image Properties",
+DlgImgInfoTab : "Image Info",
+DlgImgBtnUpload : "Send it to the Server",
+DlgImgURL : "URL",
+DlgImgUpload : "Upload",
+DlgImgAlt : "Alternative Text",
+DlgImgWidth : "Width",
+DlgImgHeight : "Height",
+DlgImgLockRatio : "Lock Ratio",
+DlgBtnResetSize : "Reset Size",
+DlgImgBorder : "Border",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Align",
+DlgImgAlignLeft : "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Bottom",
+DlgImgAlignMiddle : "Middle",
+DlgImgAlignRight : "Right",
+DlgImgAlignTextTop : "Text Top",
+DlgImgAlignTop : "Top",
+DlgImgPreview : "Preview",
+DlgImgAlertUrl : "Please type the image URL",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Flash Properties",
+DlgFlashChkPlay : "Auto Play",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Enable Flash Menu",
+DlgFlashScale : "Scale",
+DlgFlashScaleAll : "Show all",
+DlgFlashScaleNoBorder : "No Border",
+DlgFlashScaleFit : "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link Info",
+DlgLnkTargetTab : "Target",
+
+DlgLnkType : "Link Type",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Link to anchor in the text",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocol",
+DlgLnkProtoOther : "<other>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Select an Anchor",
+DlgLnkAnchorByName : "By Anchor Name",
+DlgLnkAnchorById : "By Element Id",
+DlgLnkNoAnchors : "(No anchors available in the document)",
+DlgLnkEMail : "E-Mail Address",
+DlgLnkEMailSubject : "Message Subject",
+DlgLnkEMailBody : "Message Body",
+DlgLnkUpload : "Upload",
+DlgLnkBtnUpload : "Send it to the Server",
+
+DlgLnkTarget : "Target",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<popup window>",
+DlgLnkTargetBlank : "New Window (_blank)",
+DlgLnkTargetParent : "Parent Window (_parent)",
+DlgLnkTargetSelf : "Same Window (_self)",
+DlgLnkTargetTop : "Topmost Window (_top)",
+DlgLnkTargetFrameName : "Target Frame Name",
+DlgLnkPopWinName : "Popup Window Name",
+DlgLnkPopWinFeat : "Popup Window Features",
+DlgLnkPopResize : "Resizable",
+DlgLnkPopLocation : "Location Bar",
+DlgLnkPopMenu : "Menu Bar",
+DlgLnkPopScroll : "Scroll Bars",
+DlgLnkPopStatus : "Status Bar",
+DlgLnkPopToolbar : "Toolbar",
+DlgLnkPopFullScrn : "Full Screen (IE)",
+DlgLnkPopDependent : "Dependent (Netscape)",
+DlgLnkPopWidth : "Width",
+DlgLnkPopHeight : "Height",
+DlgLnkPopLeft : "Left Position",
+DlgLnkPopTop : "Top Position",
+
+DlnLnkMsgNoUrl : "Please type the link URL",
+DlnLnkMsgNoEMail : "Please type the e-mail address",
+DlnLnkMsgNoAnchor : "Please select an anchor",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle : "Select Colour",
+DlgColorBtnClear : "Clear",
+DlgColorHighlight : "Highlight",
+DlgColorSelected : "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Select Special Character",
+
+// Table Dialog
+DlgTableTitle : "Table Properties",
+DlgTableRows : "Rows",
+DlgTableColumns : "Columns",
+DlgTableBorder : "Border size",
+DlgTableAlign : "Alignment",
+DlgTableAlignNotSet : "<Not set>",
+DlgTableAlignLeft : "Left",
+DlgTableAlignCenter : "Centre",
+DlgTableAlignRight : "Right",
+DlgTableWidth : "Width",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "percent",
+DlgTableHeight : "Height",
+DlgTableCellSpace : "Cell spacing",
+DlgTableCellPad : "Cell padding",
+DlgTableCaption : "Caption",
+DlgTableSummary : "Summary",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Cell Properties",
+DlgCellWidth : "Width",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "percent",
+DlgCellHeight : "Height",
+DlgCellWordWrap : "Word Wrap",
+DlgCellWordWrapNotSet : "<Not set>",
+DlgCellWordWrapYes : "Yes",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "Horizontal Alignment",
+DlgCellHorAlignNotSet : "<Not set>",
+DlgCellHorAlignLeft : "Left",
+DlgCellHorAlignCenter : "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign : "Vertical Alignment",
+DlgCellVerAlignNotSet : "<Not set>",
+DlgCellVerAlignTop : "Top",
+DlgCellVerAlignMiddle : "Middle",
+DlgCellVerAlignBottom : "Bottom",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type",
+DlgCellTypeData : "Data",
+DlgCellTypeHeader : "Header",
+DlgCellRowSpan : "Rows Span",
+DlgCellCollSpan : "Columns Span",
+DlgCellBackColor : "Background Colour",
+DlgCellBorderColor : "Border Colour",
+DlgCellBtnSelect : "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace",
+
+// Find Dialog
+DlgFindTitle : "Find",
+DlgFindFindBtn : "Find",
+DlgFindNotFoundMsg : "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle : "Replace",
+DlgReplaceFindLbl : "Find what:",
+DlgReplaceReplaceLbl : "Replace with:",
+DlgReplaceCaseChk : "Match case",
+DlgReplaceReplaceBtn : "Replace",
+DlgReplaceReplAllBtn : "Replace All",
+DlgReplaceWordChk : "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText : "Paste as Plain Text",
+PasteFromWord : "Paste from Word",
+
+DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont : "Ignore Font Face definitions",
+DlgPasteRemoveStyles : "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic : "Automatic",
+ColorMoreColors : "More Colours...",
+
+// Document Properties
+DocProps : "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle : "Anchor Properties",
+DlgAnchorName : "Anchor Name",
+DlgAnchorErrorName : "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Not in dictionary",
+DlgSpellChangeTo : "Change to",
+DlgSpellBtnIgnore : "Ignore",
+DlgSpellBtnIgnoreAll : "Ignore All",
+DlgSpellBtnReplace : "Replace",
+DlgSpellBtnReplaceAll : "Replace All",
+DlgSpellBtnUndo : "Undo",
+DlgSpellNoSuggestions : "- No suggestions -",
+DlgSpellProgress : "Spell check in progress...",
+DlgSpellNoMispell : "Spell check complete: No misspellings found",
+DlgSpellNoChanges : "Spell check complete: No words changed",
+DlgSpellOneChange : "Spell check complete: One word changed",
+DlgSpellManyChanges : "Spell check complete: %1 words changed",
+
+IeSpellDownload : "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText : "Text (Value)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Button",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Name",
+DlgCheckboxValue : "Value",
+DlgCheckboxSelected : "Selected",
+
+// Form Dialog
+DlgFormName : "Name",
+DlgFormAction : "Action",
+DlgFormMethod : "Method",
+
+// Select Field Dialog
+DlgSelectName : "Name",
+DlgSelectValue : "Value",
+DlgSelectSize : "Size",
+DlgSelectLines : "lines",
+DlgSelectChkMulti : "Allow multiple selections",
+DlgSelectOpAvail : "Available Options",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Value",
+DlgSelectBtnAdd : "Add",
+DlgSelectBtnModify : "Modify",
+DlgSelectBtnUp : "Up",
+DlgSelectBtnDown : "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete : "Delete",
+
+// Textarea Dialog
+DlgTextareaName : "Name",
+DlgTextareaCols : "Columns",
+DlgTextareaRows : "Rows",
+
+// Text Field Dialog
+DlgTextName : "Name",
+DlgTextValue : "Value",
+DlgTextCharWidth : "Character Width",
+DlgTextMaxChars : "Maximum Characters",
+DlgTextType : "Type",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Password",
+
+// Hidden Field Dialog
+DlgHiddenName : "Name",
+DlgHiddenValue : "Value",
+
+// Bulleted List Dialog
+BulletedListProp : "Bulleted List Properties",
+NumberedListProp : "Numbered List Properties",
+DlgLstStart : "Start",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Circle",
+DlgLstTypeDisc : "Disc",
+DlgLstTypeSquare : "Square",
+DlgLstTypeNumbers : "Numbers (1, 2, 3)",
+DlgLstTypeLCase : "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase : "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General",
+DlgDocBackTab : "Background",
+DlgDocColorsTab : "Colours and Margins",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Page Title",
+DlgDocLangDir : "Language Direction",
+DlgDocLangDirLTR : "Left to Right (LTR)",
+DlgDocLangDirRTL : "Right to Left (RTL)",
+DlgDocLangCode : "Language Code",
+DlgDocCharSet : "Character Set Encoding",
+DlgDocCharSetCE : "Central European",
+DlgDocCharSetCT : "Chinese Traditional (Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Greek",
+DlgDocCharSetJP : "Japanese",
+DlgDocCharSetKR : "Korean",
+DlgDocCharSetTR : "Turkish",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Western European",
+DlgDocCharSetOther : "Other Character Set Encoding",
+
+DlgDocDocType : "Document Type Heading",
+DlgDocDocTypeOther : "Other Document Type Heading",
+DlgDocIncXHTML : "Include XHTML Declarations",
+DlgDocBgColor : "Background Colour",
+DlgDocBgImage : "Background Image URL",
+DlgDocBgNoScroll : "Nonscrolling Background",
+DlgDocCText : "Text",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Visited Link",
+DlgDocCActive : "Active Link",
+DlgDocMargins : "Page Margins",
+DlgDocMaTop : "Top",
+DlgDocMaLeft : "Left",
+DlgDocMaRight : "Right",
+DlgDocMaBottom : "Bottom",
+DlgDocMeIndex : "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr : "Document Description",
+DlgDocMeAuthor : "Author",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Preview",
+
+// Templates Dialog
+Templates : "Templates",
+DlgTemplatesTitle : "Content Templates",
+DlgTemplatesSelMsg : "Please select the template to open in the editor<br />(the actual contents will be lost):",
+DlgTemplatesLoading : "Loading templates list. Please wait...",
+DlgTemplatesNoTpl : "(No templates defined)",
+DlgTemplatesReplace : "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab : "About",
+DlgAboutBrowserInfoTab : "Browser Info",
+DlgAboutLicenseTab : "License",
+DlgAboutVersion : "version",
+DlgAboutInfo : "For further information go to",
+
+// Div Dialog
+DlgDivGeneralTab : "General",
+DlgDivAdvancedTab : "Advanced",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Inline Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-ca.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-ca.js
new file mode 100644
index 0000000..f34d87a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-ca.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (Canadian) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Collapse Toolbar",
+ToolbarExpand : "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save : "Save",
+NewPage : "New Page",
+Preview : "Preview",
+Cut : "Cut",
+Copy : "Copy",
+Paste : "Paste",
+PasteText : "Paste as plain text",
+PasteWord : "Paste from Word",
+Print : "Print",
+SelectAll : "Select All",
+RemoveFormat : "Remove Format",
+InsertLinkLbl : "Link",
+InsertLink : "Insert/Edit Link",
+RemoveLink : "Remove Link",
+VisitLink : "Open Link",
+Anchor : "Insert/Edit Anchor",
+AnchorDelete : "Remove Anchor",
+InsertImageLbl : "Image",
+InsertImage : "Insert/Edit Image",
+InsertFlashLbl : "Flash",
+InsertFlash : "Insert/Edit Flash",
+InsertTableLbl : "Table",
+InsertTable : "Insert/Edit Table",
+InsertLineLbl : "Line",
+InsertLine : "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar : "Insert Special Character",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Insert Smiley",
+About : "About FCKeditor",
+Bold : "Bold",
+Italic : "Italic",
+Underline : "Underline",
+StrikeThrough : "Strike Through",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Left Justify",
+CenterJustify : "Centre Justify",
+RightJustify : "Right Justify",
+BlockJustify : "Block Justify",
+DecreaseIndent : "Decrease Indent",
+IncreaseIndent : "Increase Indent",
+Blockquote : "Blockquote",
+CreateDiv : "Create Div Container",
+EditDiv : "Edit Div Container",
+DeleteDiv : "Remove Div Container",
+Undo : "Undo",
+Redo : "Redo",
+NumberedListLbl : "Numbered List",
+NumberedList : "Insert/Remove Numbered List",
+BulletedListLbl : "Bulleted List",
+BulletedList : "Insert/Remove Bulleted List",
+ShowTableBorders : "Show Table Borders",
+ShowDetails : "Show Details",
+Style : "Style",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "Size",
+TextColor : "Text Colour",
+BGColor : "Background Colour",
+Source : "Source",
+Find : "Find",
+Replace : "Replace",
+SpellCheck : "Check Spelling",
+UniversalKeyboard : "Universal Keyboard",
+PageBreakLbl : "Page Break",
+PageBreak : "Insert Page Break",
+
+Form : "Form",
+Checkbox : "Checkbox",
+RadioButton : "Radio Button",
+TextField : "Text Field",
+Textarea : "Textarea",
+HiddenField : "Hidden Field",
+Button : "Button",
+SelectionField : "Selection Field",
+ImageButton : "Image Button",
+
+FitWindow : "Maximize the editor size",
+ShowBlocks : "Show Blocks",
+
+// Context Menu
+EditLink : "Edit Link",
+CellCM : "Cell",
+RowCM : "Row",
+ColumnCM : "Column",
+InsertRowAfter : "Insert Row After",
+InsertRowBefore : "Insert Row Before",
+DeleteRows : "Delete Rows",
+InsertColumnAfter : "Insert Column After",
+InsertColumnBefore : "Insert Column Before",
+DeleteColumns : "Delete Columns",
+InsertCellAfter : "Insert Cell After",
+InsertCellBefore : "Insert Cell Before",
+DeleteCells : "Delete Cells",
+MergeCells : "Merge Cells",
+MergeRight : "Merge Right",
+MergeDown : "Merge Down",
+HorizontalSplitCell : "Split Cell Horizontally",
+VerticalSplitCell : "Split Cell Vertically",
+TableDelete : "Delete Table",
+CellProperties : "Cell Properties",
+TableProperties : "Table Properties",
+ImageProperties : "Image Properties",
+FlashProperties : "Flash Properties",
+
+AnchorProp : "Anchor Properties",
+ButtonProp : "Button Properties",
+CheckboxProp : "Checkbox Properties",
+HiddenFieldProp : "Hidden Field Properties",
+RadioButtonProp : "Radio Button Properties",
+ImageButtonProp : "Image Button Properties",
+TextFieldProp : "Text Field Properties",
+SelectionFieldProp : "Selection Field Properties",
+TextareaProp : "Textarea Properties",
+FormProp : "Form Properties",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Processing XHTML. Please wait...",
+Done : "Done",
+PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem : "Unknown toolbar item \"%1\"",
+UnknownCommand : "Unknown command name \"%1\"",
+NotImplemented : "Command not implemented",
+UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancel",
+DlgBtnClose : "Close",
+DlgBtnBrowseServer : "Browse Server",
+DlgAdvancedTag : "Advanced",
+DlgOpOther : "<Other>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<not set>",
+DlgGenId : "Id",
+DlgGenLangDir : "Language Direction",
+DlgGenLangDirLtr : "Left to Right (LTR)",
+DlgGenLangDirRtl : "Right to Left (RTL)",
+DlgGenLangCode : "Language Code",
+DlgGenAccessKey : "Access Key",
+DlgGenName : "Name",
+DlgGenTabIndex : "Tab Index",
+DlgGenLongDescr : "Long Description URL",
+DlgGenClass : "Stylesheet Classes",
+DlgGenTitle : "Advisory Title",
+DlgGenContType : "Advisory Content Type",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Image Properties",
+DlgImgInfoTab : "Image Info",
+DlgImgBtnUpload : "Send it to the Server",
+DlgImgURL : "URL",
+DlgImgUpload : "Upload",
+DlgImgAlt : "Alternative Text",
+DlgImgWidth : "Width",
+DlgImgHeight : "Height",
+DlgImgLockRatio : "Lock Ratio",
+DlgBtnResetSize : "Reset Size",
+DlgImgBorder : "Border",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Align",
+DlgImgAlignLeft : "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Bottom",
+DlgImgAlignMiddle : "Middle",
+DlgImgAlignRight : "Right",
+DlgImgAlignTextTop : "Text Top",
+DlgImgAlignTop : "Top",
+DlgImgPreview : "Preview",
+DlgImgAlertUrl : "Please type the image URL",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Flash Properties",
+DlgFlashChkPlay : "Auto Play",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Enable Flash Menu",
+DlgFlashScale : "Scale",
+DlgFlashScaleAll : "Show all",
+DlgFlashScaleNoBorder : "No Border",
+DlgFlashScaleFit : "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link Info",
+DlgLnkTargetTab : "Target",
+
+DlgLnkType : "Link Type",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Link to anchor in the text",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocol",
+DlgLnkProtoOther : "<other>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Select an Anchor",
+DlgLnkAnchorByName : "By Anchor Name",
+DlgLnkAnchorById : "By Element Id",
+DlgLnkNoAnchors : "(No anchors available in the document)",
+DlgLnkEMail : "E-Mail Address",
+DlgLnkEMailSubject : "Message Subject",
+DlgLnkEMailBody : "Message Body",
+DlgLnkUpload : "Upload",
+DlgLnkBtnUpload : "Send it to the Server",
+
+DlgLnkTarget : "Target",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<popup window>",
+DlgLnkTargetBlank : "New Window (_blank)",
+DlgLnkTargetParent : "Parent Window (_parent)",
+DlgLnkTargetSelf : "Same Window (_self)",
+DlgLnkTargetTop : "Topmost Window (_top)",
+DlgLnkTargetFrameName : "Target Frame Name",
+DlgLnkPopWinName : "Popup Window Name",
+DlgLnkPopWinFeat : "Popup Window Features",
+DlgLnkPopResize : "Resizable",
+DlgLnkPopLocation : "Location Bar",
+DlgLnkPopMenu : "Menu Bar",
+DlgLnkPopScroll : "Scroll Bars",
+DlgLnkPopStatus : "Status Bar",
+DlgLnkPopToolbar : "Toolbar",
+DlgLnkPopFullScrn : "Full Screen (IE)",
+DlgLnkPopDependent : "Dependent (Netscape)",
+DlgLnkPopWidth : "Width",
+DlgLnkPopHeight : "Height",
+DlgLnkPopLeft : "Left Position",
+DlgLnkPopTop : "Top Position",
+
+DlnLnkMsgNoUrl : "Please type the link URL",
+DlnLnkMsgNoEMail : "Please type the e-mail address",
+DlnLnkMsgNoAnchor : "Please select an anchor",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle : "Select Colour",
+DlgColorBtnClear : "Clear",
+DlgColorHighlight : "Highlight",
+DlgColorSelected : "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Select Special Character",
+
+// Table Dialog
+DlgTableTitle : "Table Properties",
+DlgTableRows : "Rows",
+DlgTableColumns : "Columns",
+DlgTableBorder : "Border size",
+DlgTableAlign : "Alignment",
+DlgTableAlignNotSet : "<Not set>",
+DlgTableAlignLeft : "Left",
+DlgTableAlignCenter : "Centre",
+DlgTableAlignRight : "Right",
+DlgTableWidth : "Width",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "percent",
+DlgTableHeight : "Height",
+DlgTableCellSpace : "Cell spacing",
+DlgTableCellPad : "Cell padding",
+DlgTableCaption : "Caption",
+DlgTableSummary : "Summary",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Cell Properties",
+DlgCellWidth : "Width",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "percent",
+DlgCellHeight : "Height",
+DlgCellWordWrap : "Word Wrap",
+DlgCellWordWrapNotSet : "<Not set>",
+DlgCellWordWrapYes : "Yes",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "Horizontal Alignment",
+DlgCellHorAlignNotSet : "<Not set>",
+DlgCellHorAlignLeft : "Left",
+DlgCellHorAlignCenter : "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign : "Vertical Alignment",
+DlgCellVerAlignNotSet : "<Not set>",
+DlgCellVerAlignTop : "Top",
+DlgCellVerAlignMiddle : "Middle",
+DlgCellVerAlignBottom : "Bottom",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type",
+DlgCellTypeData : "Data",
+DlgCellTypeHeader : "Header",
+DlgCellRowSpan : "Rows Span",
+DlgCellCollSpan : "Columns Span",
+DlgCellBackColor : "Background Colour",
+DlgCellBorderColor : "Border Colour",
+DlgCellBtnSelect : "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace",
+
+// Find Dialog
+DlgFindTitle : "Find",
+DlgFindFindBtn : "Find",
+DlgFindNotFoundMsg : "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle : "Replace",
+DlgReplaceFindLbl : "Find what:",
+DlgReplaceReplaceLbl : "Replace with:",
+DlgReplaceCaseChk : "Match case",
+DlgReplaceReplaceBtn : "Replace",
+DlgReplaceReplAllBtn : "Replace All",
+DlgReplaceWordChk : "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText : "Paste as Plain Text",
+PasteFromWord : "Paste from Word",
+
+DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont : "Ignore Font Face definitions",
+DlgPasteRemoveStyles : "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic : "Automatic",
+ColorMoreColors : "More Colours...",
+
+// Document Properties
+DocProps : "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle : "Anchor Properties",
+DlgAnchorName : "Anchor Name",
+DlgAnchorErrorName : "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Not in dictionary",
+DlgSpellChangeTo : "Change to",
+DlgSpellBtnIgnore : "Ignore",
+DlgSpellBtnIgnoreAll : "Ignore All",
+DlgSpellBtnReplace : "Replace",
+DlgSpellBtnReplaceAll : "Replace All",
+DlgSpellBtnUndo : "Undo",
+DlgSpellNoSuggestions : "- No suggestions -",
+DlgSpellProgress : "Spell check in progress...",
+DlgSpellNoMispell : "Spell check complete: No misspellings found",
+DlgSpellNoChanges : "Spell check complete: No words changed",
+DlgSpellOneChange : "Spell check complete: One word changed",
+DlgSpellManyChanges : "Spell check complete: %1 words changed",
+
+IeSpellDownload : "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText : "Text (Value)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Button",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Name",
+DlgCheckboxValue : "Value",
+DlgCheckboxSelected : "Selected",
+
+// Form Dialog
+DlgFormName : "Name",
+DlgFormAction : "Action",
+DlgFormMethod : "Method",
+
+// Select Field Dialog
+DlgSelectName : "Name",
+DlgSelectValue : "Value",
+DlgSelectSize : "Size",
+DlgSelectLines : "lines",
+DlgSelectChkMulti : "Allow multiple selections",
+DlgSelectOpAvail : "Available Options",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Value",
+DlgSelectBtnAdd : "Add",
+DlgSelectBtnModify : "Modify",
+DlgSelectBtnUp : "Up",
+DlgSelectBtnDown : "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete : "Delete",
+
+// Textarea Dialog
+DlgTextareaName : "Name",
+DlgTextareaCols : "Columns",
+DlgTextareaRows : "Rows",
+
+// Text Field Dialog
+DlgTextName : "Name",
+DlgTextValue : "Value",
+DlgTextCharWidth : "Character Width",
+DlgTextMaxChars : "Maximum Characters",
+DlgTextType : "Type",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Password",
+
+// Hidden Field Dialog
+DlgHiddenName : "Name",
+DlgHiddenValue : "Value",
+
+// Bulleted List Dialog
+BulletedListProp : "Bulleted List Properties",
+NumberedListProp : "Numbered List Properties",
+DlgLstStart : "Start",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Circle",
+DlgLstTypeDisc : "Disc",
+DlgLstTypeSquare : "Square",
+DlgLstTypeNumbers : "Numbers (1, 2, 3)",
+DlgLstTypeLCase : "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase : "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General",
+DlgDocBackTab : "Background",
+DlgDocColorsTab : "Colours and Margins",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Page Title",
+DlgDocLangDir : "Language Direction",
+DlgDocLangDirLTR : "Left to Right (LTR)",
+DlgDocLangDirRTL : "Right to Left (RTL)",
+DlgDocLangCode : "Language Code",
+DlgDocCharSet : "Character Set Encoding",
+DlgDocCharSetCE : "Central European",
+DlgDocCharSetCT : "Chinese Traditional (Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Greek",
+DlgDocCharSetJP : "Japanese",
+DlgDocCharSetKR : "Korean",
+DlgDocCharSetTR : "Turkish",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Western European",
+DlgDocCharSetOther : "Other Character Set Encoding",
+
+DlgDocDocType : "Document Type Heading",
+DlgDocDocTypeOther : "Other Document Type Heading",
+DlgDocIncXHTML : "Include XHTML Declarations",
+DlgDocBgColor : "Background Colour",
+DlgDocBgImage : "Background Image URL",
+DlgDocBgNoScroll : "Nonscrolling Background",
+DlgDocCText : "Text",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Visited Link",
+DlgDocCActive : "Active Link",
+DlgDocMargins : "Page Margins",
+DlgDocMaTop : "Top",
+DlgDocMaLeft : "Left",
+DlgDocMaRight : "Right",
+DlgDocMaBottom : "Bottom",
+DlgDocMeIndex : "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr : "Document Description",
+DlgDocMeAuthor : "Author",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Preview",
+
+// Templates Dialog
+Templates : "Templates",
+DlgTemplatesTitle : "Content Templates",
+DlgTemplatesSelMsg : "Please select the template to open in the editor<br />(the actual contents will be lost):",
+DlgTemplatesLoading : "Loading templates list. Please wait...",
+DlgTemplatesNoTpl : "(No templates defined)",
+DlgTemplatesReplace : "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab : "About",
+DlgAboutBrowserInfoTab : "Browser Info",
+DlgAboutLicenseTab : "License",
+DlgAboutVersion : "version",
+DlgAboutInfo : "For further information go to",
+
+// Div Dialog
+DlgDivGeneralTab : "General",
+DlgDivAdvancedTab : "Advanced",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Inline Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-uk.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-uk.js
new file mode 100644
index 0000000..0093c75
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-uk.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (United Kingdom) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Collapse Toolbar",
+ToolbarExpand : "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save : "Save",
+NewPage : "New Page",
+Preview : "Preview",
+Cut : "Cut",
+Copy : "Copy",
+Paste : "Paste",
+PasteText : "Paste as plain text",
+PasteWord : "Paste from Word",
+Print : "Print",
+SelectAll : "Select All",
+RemoveFormat : "Remove Format",
+InsertLinkLbl : "Link",
+InsertLink : "Insert/Edit Link",
+RemoveLink : "Remove Link",
+VisitLink : "Open Link",
+Anchor : "Insert/Edit Anchor",
+AnchorDelete : "Remove Anchor",
+InsertImageLbl : "Image",
+InsertImage : "Insert/Edit Image",
+InsertFlashLbl : "Flash",
+InsertFlash : "Insert/Edit Flash",
+InsertTableLbl : "Table",
+InsertTable : "Insert/Edit Table",
+InsertLineLbl : "Line",
+InsertLine : "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar : "Insert Special Character",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Insert Smiley",
+About : "About FCKeditor",
+Bold : "Bold",
+Italic : "Italic",
+Underline : "Underline",
+StrikeThrough : "Strike Through",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Left Justify",
+CenterJustify : "Centre Justify",
+RightJustify : "Right Justify",
+BlockJustify : "Block Justify",
+DecreaseIndent : "Decrease Indent",
+IncreaseIndent : "Increase Indent",
+Blockquote : "Blockquote",
+CreateDiv : "Create Div Container",
+EditDiv : "Edit Div Container",
+DeleteDiv : "Remove Div Container",
+Undo : "Undo",
+Redo : "Redo",
+NumberedListLbl : "Numbered List",
+NumberedList : "Insert/Remove Numbered List",
+BulletedListLbl : "Bulleted List",
+BulletedList : "Insert/Remove Bulleted List",
+ShowTableBorders : "Show Table Borders",
+ShowDetails : "Show Details",
+Style : "Style",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "Size",
+TextColor : "Text Colour",
+BGColor : "Background Colour",
+Source : "Source",
+Find : "Find",
+Replace : "Replace",
+SpellCheck : "Check Spelling",
+UniversalKeyboard : "Universal Keyboard",
+PageBreakLbl : "Page Break",
+PageBreak : "Insert Page Break",
+
+Form : "Form",
+Checkbox : "Checkbox",
+RadioButton : "Radio Button",
+TextField : "Text Field",
+Textarea : "Textarea",
+HiddenField : "Hidden Field",
+Button : "Button",
+SelectionField : "Selection Field",
+ImageButton : "Image Button",
+
+FitWindow : "Maximize the editor size",
+ShowBlocks : "Show Blocks",
+
+// Context Menu
+EditLink : "Edit Link",
+CellCM : "Cell",
+RowCM : "Row",
+ColumnCM : "Column",
+InsertRowAfter : "Insert Row After",
+InsertRowBefore : "Insert Row Before",
+DeleteRows : "Delete Rows",
+InsertColumnAfter : "Insert Column After",
+InsertColumnBefore : "Insert Column Before",
+DeleteColumns : "Delete Columns",
+InsertCellAfter : "Insert Cell After",
+InsertCellBefore : "Insert Cell Before",
+DeleteCells : "Delete Cells",
+MergeCells : "Merge Cells",
+MergeRight : "Merge Right",
+MergeDown : "Merge Down",
+HorizontalSplitCell : "Split Cell Horizontally",
+VerticalSplitCell : "Split Cell Vertically",
+TableDelete : "Delete Table",
+CellProperties : "Cell Properties",
+TableProperties : "Table Properties",
+ImageProperties : "Image Properties",
+FlashProperties : "Flash Properties",
+
+AnchorProp : "Anchor Properties",
+ButtonProp : "Button Properties",
+CheckboxProp : "Checkbox Properties",
+HiddenFieldProp : "Hidden Field Properties",
+RadioButtonProp : "Radio Button Properties",
+ImageButtonProp : "Image Button Properties",
+TextFieldProp : "Text Field Properties",
+SelectionFieldProp : "Selection Field Properties",
+TextareaProp : "Textarea Properties",
+FormProp : "Form Properties",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Processing XHTML. Please wait...",
+Done : "Done",
+PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem : "Unknown toolbar item \"%1\"",
+UnknownCommand : "Unknown command name \"%1\"",
+NotImplemented : "Command not implemented",
+UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancel",
+DlgBtnClose : "Close",
+DlgBtnBrowseServer : "Browse Server",
+DlgAdvancedTag : "Advanced",
+DlgOpOther : "<Other>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<not set>",
+DlgGenId : "Id",
+DlgGenLangDir : "Language Direction",
+DlgGenLangDirLtr : "Left to Right (LTR)",
+DlgGenLangDirRtl : "Right to Left (RTL)",
+DlgGenLangCode : "Language Code",
+DlgGenAccessKey : "Access Key",
+DlgGenName : "Name",
+DlgGenTabIndex : "Tab Index",
+DlgGenLongDescr : "Long Description URL",
+DlgGenClass : "Stylesheet Classes",
+DlgGenTitle : "Advisory Title",
+DlgGenContType : "Advisory Content Type",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Image Properties",
+DlgImgInfoTab : "Image Info",
+DlgImgBtnUpload : "Send it to the Server",
+DlgImgURL : "URL",
+DlgImgUpload : "Upload",
+DlgImgAlt : "Alternative Text",
+DlgImgWidth : "Width",
+DlgImgHeight : "Height",
+DlgImgLockRatio : "Lock Ratio",
+DlgBtnResetSize : "Reset Size",
+DlgImgBorder : "Border",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Align",
+DlgImgAlignLeft : "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Bottom",
+DlgImgAlignMiddle : "Middle",
+DlgImgAlignRight : "Right",
+DlgImgAlignTextTop : "Text Top",
+DlgImgAlignTop : "Top",
+DlgImgPreview : "Preview",
+DlgImgAlertUrl : "Please type the image URL",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Flash Properties",
+DlgFlashChkPlay : "Auto Play",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Enable Flash Menu",
+DlgFlashScale : "Scale",
+DlgFlashScaleAll : "Show all",
+DlgFlashScaleNoBorder : "No Border",
+DlgFlashScaleFit : "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link Info",
+DlgLnkTargetTab : "Target",
+
+DlgLnkType : "Link Type",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Link to anchor in the text",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocol",
+DlgLnkProtoOther : "<other>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Select an Anchor",
+DlgLnkAnchorByName : "By Anchor Name",
+DlgLnkAnchorById : "By Element Id",
+DlgLnkNoAnchors : "(No anchors available in the document)",
+DlgLnkEMail : "E-Mail Address",
+DlgLnkEMailSubject : "Message Subject",
+DlgLnkEMailBody : "Message Body",
+DlgLnkUpload : "Upload",
+DlgLnkBtnUpload : "Send it to the Server",
+
+DlgLnkTarget : "Target",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<popup window>",
+DlgLnkTargetBlank : "New Window (_blank)",
+DlgLnkTargetParent : "Parent Window (_parent)",
+DlgLnkTargetSelf : "Same Window (_self)",
+DlgLnkTargetTop : "Topmost Window (_top)",
+DlgLnkTargetFrameName : "Target Frame Name",
+DlgLnkPopWinName : "Popup Window Name",
+DlgLnkPopWinFeat : "Popup Window Features",
+DlgLnkPopResize : "Resizable",
+DlgLnkPopLocation : "Location Bar",
+DlgLnkPopMenu : "Menu Bar",
+DlgLnkPopScroll : "Scroll Bars",
+DlgLnkPopStatus : "Status Bar",
+DlgLnkPopToolbar : "Toolbar",
+DlgLnkPopFullScrn : "Full Screen (IE)",
+DlgLnkPopDependent : "Dependent (Netscape)",
+DlgLnkPopWidth : "Width",
+DlgLnkPopHeight : "Height",
+DlgLnkPopLeft : "Left Position",
+DlgLnkPopTop : "Top Position",
+
+DlnLnkMsgNoUrl : "Please type the link URL",
+DlnLnkMsgNoEMail : "Please type the e-mail address",
+DlnLnkMsgNoAnchor : "Please select an anchor",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle : "Select Colour",
+DlgColorBtnClear : "Clear",
+DlgColorHighlight : "Highlight",
+DlgColorSelected : "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Select Special Character",
+
+// Table Dialog
+DlgTableTitle : "Table Properties",
+DlgTableRows : "Rows",
+DlgTableColumns : "Columns",
+DlgTableBorder : "Border size",
+DlgTableAlign : "Alignment",
+DlgTableAlignNotSet : "<Not set>",
+DlgTableAlignLeft : "Left",
+DlgTableAlignCenter : "Centre",
+DlgTableAlignRight : "Right",
+DlgTableWidth : "Width",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "percent",
+DlgTableHeight : "Height",
+DlgTableCellSpace : "Cell spacing",
+DlgTableCellPad : "Cell padding",
+DlgTableCaption : "Caption",
+DlgTableSummary : "Summary",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Cell Properties",
+DlgCellWidth : "Width",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "percent",
+DlgCellHeight : "Height",
+DlgCellWordWrap : "Word Wrap",
+DlgCellWordWrapNotSet : "<Not set>",
+DlgCellWordWrapYes : "Yes",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "Horizontal Alignment",
+DlgCellHorAlignNotSet : "<Not set>",
+DlgCellHorAlignLeft : "Left",
+DlgCellHorAlignCenter : "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign : "Vertical Alignment",
+DlgCellVerAlignNotSet : "<Not set>",
+DlgCellVerAlignTop : "Top",
+DlgCellVerAlignMiddle : "Middle",
+DlgCellVerAlignBottom : "Bottom",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type",
+DlgCellTypeData : "Data",
+DlgCellTypeHeader : "Header",
+DlgCellRowSpan : "Rows Span",
+DlgCellCollSpan : "Columns Span",
+DlgCellBackColor : "Background Colour",
+DlgCellBorderColor : "Border Colour",
+DlgCellBtnSelect : "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace",
+
+// Find Dialog
+DlgFindTitle : "Find",
+DlgFindFindBtn : "Find",
+DlgFindNotFoundMsg : "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle : "Replace",
+DlgReplaceFindLbl : "Find what:",
+DlgReplaceReplaceLbl : "Replace with:",
+DlgReplaceCaseChk : "Match case",
+DlgReplaceReplaceBtn : "Replace",
+DlgReplaceReplAllBtn : "Replace All",
+DlgReplaceWordChk : "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText : "Paste as Plain Text",
+PasteFromWord : "Paste from Word",
+
+DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont : "Ignore Font Face definitions",
+DlgPasteRemoveStyles : "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic : "Automatic",
+ColorMoreColors : "More Colours...",
+
+// Document Properties
+DocProps : "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle : "Anchor Properties",
+DlgAnchorName : "Anchor Name",
+DlgAnchorErrorName : "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Not in dictionary",
+DlgSpellChangeTo : "Change to",
+DlgSpellBtnIgnore : "Ignore",
+DlgSpellBtnIgnoreAll : "Ignore All",
+DlgSpellBtnReplace : "Replace",
+DlgSpellBtnReplaceAll : "Replace All",
+DlgSpellBtnUndo : "Undo",
+DlgSpellNoSuggestions : "- No suggestions -",
+DlgSpellProgress : "Spell check in progress...",
+DlgSpellNoMispell : "Spell check complete: No misspellings found",
+DlgSpellNoChanges : "Spell check complete: No words changed",
+DlgSpellOneChange : "Spell check complete: One word changed",
+DlgSpellManyChanges : "Spell check complete: %1 words changed",
+
+IeSpellDownload : "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText : "Text (Value)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Button",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Name",
+DlgCheckboxValue : "Value",
+DlgCheckboxSelected : "Selected",
+
+// Form Dialog
+DlgFormName : "Name",
+DlgFormAction : "Action",
+DlgFormMethod : "Method",
+
+// Select Field Dialog
+DlgSelectName : "Name",
+DlgSelectValue : "Value",
+DlgSelectSize : "Size",
+DlgSelectLines : "lines",
+DlgSelectChkMulti : "Allow multiple selections",
+DlgSelectOpAvail : "Available Options",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Value",
+DlgSelectBtnAdd : "Add",
+DlgSelectBtnModify : "Modify",
+DlgSelectBtnUp : "Up",
+DlgSelectBtnDown : "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete : "Delete",
+
+// Textarea Dialog
+DlgTextareaName : "Name",
+DlgTextareaCols : "Columns",
+DlgTextareaRows : "Rows",
+
+// Text Field Dialog
+DlgTextName : "Name",
+DlgTextValue : "Value",
+DlgTextCharWidth : "Character Width",
+DlgTextMaxChars : "Maximum Characters",
+DlgTextType : "Type",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Password",
+
+// Hidden Field Dialog
+DlgHiddenName : "Name",
+DlgHiddenValue : "Value",
+
+// Bulleted List Dialog
+BulletedListProp : "Bulleted List Properties",
+NumberedListProp : "Numbered List Properties",
+DlgLstStart : "Start",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Circle",
+DlgLstTypeDisc : "Disc",
+DlgLstTypeSquare : "Square",
+DlgLstTypeNumbers : "Numbers (1, 2, 3)",
+DlgLstTypeLCase : "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase : "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General",
+DlgDocBackTab : "Background",
+DlgDocColorsTab : "Colours and Margins",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Page Title",
+DlgDocLangDir : "Language Direction",
+DlgDocLangDirLTR : "Left to Right (LTR)",
+DlgDocLangDirRTL : "Right to Left (RTL)",
+DlgDocLangCode : "Language Code",
+DlgDocCharSet : "Character Set Encoding",
+DlgDocCharSetCE : "Central European",
+DlgDocCharSetCT : "Chinese Traditional (Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Greek",
+DlgDocCharSetJP : "Japanese",
+DlgDocCharSetKR : "Korean",
+DlgDocCharSetTR : "Turkish",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Western European",
+DlgDocCharSetOther : "Other Character Set Encoding",
+
+DlgDocDocType : "Document Type Heading",
+DlgDocDocTypeOther : "Other Document Type Heading",
+DlgDocIncXHTML : "Include XHTML Declarations",
+DlgDocBgColor : "Background Colour",
+DlgDocBgImage : "Background Image URL",
+DlgDocBgNoScroll : "Nonscrolling Background",
+DlgDocCText : "Text",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Visited Link",
+DlgDocCActive : "Active Link",
+DlgDocMargins : "Page Margins",
+DlgDocMaTop : "Top",
+DlgDocMaLeft : "Left",
+DlgDocMaRight : "Right",
+DlgDocMaBottom : "Bottom",
+DlgDocMeIndex : "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr : "Document Description",
+DlgDocMeAuthor : "Author",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Preview",
+
+// Templates Dialog
+Templates : "Templates",
+DlgTemplatesTitle : "Content Templates",
+DlgTemplatesSelMsg : "Please select the template to open in the editor<br />(the actual contents will be lost):",
+DlgTemplatesLoading : "Loading templates list. Please wait...",
+DlgTemplatesNoTpl : "(No templates defined)",
+DlgTemplatesReplace : "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab : "About",
+DlgAboutBrowserInfoTab : "Browser Info",
+DlgAboutLicenseTab : "License",
+DlgAboutVersion : "version",
+DlgAboutInfo : "For further information go to",
+
+// Div Dialog
+DlgDivGeneralTab : "General",
+DlgDivAdvancedTab : "Advanced",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Inline Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en.js
new file mode 100644
index 0000000..5e26de2
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Collapse Toolbar",
+ToolbarExpand : "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save : "Save",
+NewPage : "New Page",
+Preview : "Preview",
+Cut : "Cut",
+Copy : "Copy",
+Paste : "Paste",
+PasteText : "Paste as plain text",
+PasteWord : "Paste from Word",
+Print : "Print",
+SelectAll : "Select All",
+RemoveFormat : "Remove Format",
+InsertLinkLbl : "Link",
+InsertLink : "Insert/Edit Link",
+RemoveLink : "Remove Link",
+VisitLink : "Open Link",
+Anchor : "Insert/Edit Anchor",
+AnchorDelete : "Remove Anchor",
+InsertImageLbl : "Image",
+InsertImage : "Insert/Edit Image",
+InsertFlashLbl : "Flash",
+InsertFlash : "Insert/Edit Flash",
+InsertTableLbl : "Table",
+InsertTable : "Insert/Edit Table",
+InsertLineLbl : "Line",
+InsertLine : "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar : "Insert Special Character",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Insert Smiley",
+About : "About FCKeditor",
+Bold : "Bold",
+Italic : "Italic",
+Underline : "Underline",
+StrikeThrough : "Strike Through",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Left Justify",
+CenterJustify : "Center Justify",
+RightJustify : "Right Justify",
+BlockJustify : "Block Justify",
+DecreaseIndent : "Decrease Indent",
+IncreaseIndent : "Increase Indent",
+Blockquote : "Blockquote",
+CreateDiv : "Create Div Container",
+EditDiv : "Edit Div Container",
+DeleteDiv : "Remove Div Container",
+Undo : "Undo",
+Redo : "Redo",
+NumberedListLbl : "Numbered List",
+NumberedList : "Insert/Remove Numbered List",
+BulletedListLbl : "Bulleted List",
+BulletedList : "Insert/Remove Bulleted List",
+ShowTableBorders : "Show Table Borders",
+ShowDetails : "Show Details",
+Style : "Style",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "Size",
+TextColor : "Text Color",
+BGColor : "Background Color",
+Source : "Source",
+Find : "Find",
+Replace : "Replace",
+SpellCheck : "Check Spelling",
+UniversalKeyboard : "Universal Keyboard",
+PageBreakLbl : "Page Break",
+PageBreak : "Insert Page Break",
+
+Form : "Form",
+Checkbox : "Checkbox",
+RadioButton : "Radio Button",
+TextField : "Text Field",
+Textarea : "Textarea",
+HiddenField : "Hidden Field",
+Button : "Button",
+SelectionField : "Selection Field",
+ImageButton : "Image Button",
+
+FitWindow : "Maximize the editor size",
+ShowBlocks : "Show Blocks",
+
+// Context Menu
+EditLink : "Edit Link",
+CellCM : "Cell",
+RowCM : "Row",
+ColumnCM : "Column",
+InsertRowAfter : "Insert Row After",
+InsertRowBefore : "Insert Row Before",
+DeleteRows : "Delete Rows",
+InsertColumnAfter : "Insert Column After",
+InsertColumnBefore : "Insert Column Before",
+DeleteColumns : "Delete Columns",
+InsertCellAfter : "Insert Cell After",
+InsertCellBefore : "Insert Cell Before",
+DeleteCells : "Delete Cells",
+MergeCells : "Merge Cells",
+MergeRight : "Merge Right",
+MergeDown : "Merge Down",
+HorizontalSplitCell : "Split Cell Horizontally",
+VerticalSplitCell : "Split Cell Vertically",
+TableDelete : "Delete Table",
+CellProperties : "Cell Properties",
+TableProperties : "Table Properties",
+ImageProperties : "Image Properties",
+FlashProperties : "Flash Properties",
+
+AnchorProp : "Anchor Properties",
+ButtonProp : "Button Properties",
+CheckboxProp : "Checkbox Properties",
+HiddenFieldProp : "Hidden Field Properties",
+RadioButtonProp : "Radio Button Properties",
+ImageButtonProp : "Image Button Properties",
+TextFieldProp : "Text Field Properties",
+SelectionFieldProp : "Selection Field Properties",
+TextareaProp : "Textarea Properties",
+FormProp : "Form Properties",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Processing XHTML. Please wait...",
+Done : "Done",
+PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem : "Unknown toolbar item \"%1\"",
+UnknownCommand : "Unknown command name \"%1\"",
+NotImplemented : "Command not implemented",
+UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancel",
+DlgBtnClose : "Close",
+DlgBtnBrowseServer : "Browse Server",
+DlgAdvancedTag : "Advanced",
+DlgOpOther : "<Other>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<not set>",
+DlgGenId : "Id",
+DlgGenLangDir : "Language Direction",
+DlgGenLangDirLtr : "Left to Right (LTR)",
+DlgGenLangDirRtl : "Right to Left (RTL)",
+DlgGenLangCode : "Language Code",
+DlgGenAccessKey : "Access Key",
+DlgGenName : "Name",
+DlgGenTabIndex : "Tab Index",
+DlgGenLongDescr : "Long Description URL",
+DlgGenClass : "Stylesheet Classes",
+DlgGenTitle : "Advisory Title",
+DlgGenContType : "Advisory Content Type",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Image Properties",
+DlgImgInfoTab : "Image Info",
+DlgImgBtnUpload : "Send it to the Server",
+DlgImgURL : "URL",
+DlgImgUpload : "Upload",
+DlgImgAlt : "Alternative Text",
+DlgImgWidth : "Width",
+DlgImgHeight : "Height",
+DlgImgLockRatio : "Lock Ratio",
+DlgBtnResetSize : "Reset Size",
+DlgImgBorder : "Border",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Align",
+DlgImgAlignLeft : "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Bottom",
+DlgImgAlignMiddle : "Middle",
+DlgImgAlignRight : "Right",
+DlgImgAlignTextTop : "Text Top",
+DlgImgAlignTop : "Top",
+DlgImgPreview : "Preview",
+DlgImgAlertUrl : "Please type the image URL",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Flash Properties",
+DlgFlashChkPlay : "Auto Play",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Enable Flash Menu",
+DlgFlashScale : "Scale",
+DlgFlashScaleAll : "Show all",
+DlgFlashScaleNoBorder : "No Border",
+DlgFlashScaleFit : "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link Info",
+DlgLnkTargetTab : "Target",
+
+DlgLnkType : "Link Type",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Link to anchor in the text",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocol",
+DlgLnkProtoOther : "<other>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Select an Anchor",
+DlgLnkAnchorByName : "By Anchor Name",
+DlgLnkAnchorById : "By Element Id",
+DlgLnkNoAnchors : "(No anchors available in the document)",
+DlgLnkEMail : "E-Mail Address",
+DlgLnkEMailSubject : "Message Subject",
+DlgLnkEMailBody : "Message Body",
+DlgLnkUpload : "Upload",
+DlgLnkBtnUpload : "Send it to the Server",
+
+DlgLnkTarget : "Target",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<popup window>",
+DlgLnkTargetBlank : "New Window (_blank)",
+DlgLnkTargetParent : "Parent Window (_parent)",
+DlgLnkTargetSelf : "Same Window (_self)",
+DlgLnkTargetTop : "Topmost Window (_top)",
+DlgLnkTargetFrameName : "Target Frame Name",
+DlgLnkPopWinName : "Popup Window Name",
+DlgLnkPopWinFeat : "Popup Window Features",
+DlgLnkPopResize : "Resizable",
+DlgLnkPopLocation : "Location Bar",
+DlgLnkPopMenu : "Menu Bar",
+DlgLnkPopScroll : "Scroll Bars",
+DlgLnkPopStatus : "Status Bar",
+DlgLnkPopToolbar : "Toolbar",
+DlgLnkPopFullScrn : "Full Screen (IE)",
+DlgLnkPopDependent : "Dependent (Netscape)",
+DlgLnkPopWidth : "Width",
+DlgLnkPopHeight : "Height",
+DlgLnkPopLeft : "Left Position",
+DlgLnkPopTop : "Top Position",
+
+DlnLnkMsgNoUrl : "Please type the link URL",
+DlnLnkMsgNoEMail : "Please type the e-mail address",
+DlnLnkMsgNoAnchor : "Please select an anchor",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle : "Select Color",
+DlgColorBtnClear : "Clear",
+DlgColorHighlight : "Highlight",
+DlgColorSelected : "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Select Special Character",
+
+// Table Dialog
+DlgTableTitle : "Table Properties",
+DlgTableRows : "Rows",
+DlgTableColumns : "Columns",
+DlgTableBorder : "Border size",
+DlgTableAlign : "Alignment",
+DlgTableAlignNotSet : "<Not set>",
+DlgTableAlignLeft : "Left",
+DlgTableAlignCenter : "Center",
+DlgTableAlignRight : "Right",
+DlgTableWidth : "Width",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "percent",
+DlgTableHeight : "Height",
+DlgTableCellSpace : "Cell spacing",
+DlgTableCellPad : "Cell padding",
+DlgTableCaption : "Caption",
+DlgTableSummary : "Summary",
+DlgTableHeaders : "Headers",
+DlgTableHeadersNone : "None",
+DlgTableHeadersColumn : "First column",
+DlgTableHeadersRow : "First Row",
+DlgTableHeadersBoth : "Both",
+
+// Table Cell Dialog
+DlgCellTitle : "Cell Properties",
+DlgCellWidth : "Width",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "percent",
+DlgCellHeight : "Height",
+DlgCellWordWrap : "Word Wrap",
+DlgCellWordWrapNotSet : "<Not set>",
+DlgCellWordWrapYes : "Yes",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "Horizontal Alignment",
+DlgCellHorAlignNotSet : "<Not set>",
+DlgCellHorAlignLeft : "Left",
+DlgCellHorAlignCenter : "Center",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign : "Vertical Alignment",
+DlgCellVerAlignNotSet : "<Not set>",
+DlgCellVerAlignTop : "Top",
+DlgCellVerAlignMiddle : "Middle",
+DlgCellVerAlignBottom : "Bottom",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type",
+DlgCellTypeData : "Data",
+DlgCellTypeHeader : "Header",
+DlgCellRowSpan : "Rows Span",
+DlgCellCollSpan : "Columns Span",
+DlgCellBackColor : "Background Color",
+DlgCellBorderColor : "Border Color",
+DlgCellBtnSelect : "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace",
+
+// Find Dialog
+DlgFindTitle : "Find",
+DlgFindFindBtn : "Find",
+DlgFindNotFoundMsg : "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle : "Replace",
+DlgReplaceFindLbl : "Find what:",
+DlgReplaceReplaceLbl : "Replace with:",
+DlgReplaceCaseChk : "Match case",
+DlgReplaceReplaceBtn : "Replace",
+DlgReplaceReplAllBtn : "Replace All",
+DlgReplaceWordChk : "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText : "Paste as Plain Text",
+PasteFromWord : "Paste from Word",
+
+DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont : "Ignore Font Face definitions",
+DlgPasteRemoveStyles : "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic : "Automatic",
+ColorMoreColors : "More Colors...",
+
+// Document Properties
+DocProps : "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle : "Anchor Properties",
+DlgAnchorName : "Anchor Name",
+DlgAnchorErrorName : "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Not in dictionary",
+DlgSpellChangeTo : "Change to",
+DlgSpellBtnIgnore : "Ignore",
+DlgSpellBtnIgnoreAll : "Ignore All",
+DlgSpellBtnReplace : "Replace",
+DlgSpellBtnReplaceAll : "Replace All",
+DlgSpellBtnUndo : "Undo",
+DlgSpellNoSuggestions : "- No suggestions -",
+DlgSpellProgress : "Spell check in progress...",
+DlgSpellNoMispell : "Spell check complete: No misspellings found",
+DlgSpellNoChanges : "Spell check complete: No words changed",
+DlgSpellOneChange : "Spell check complete: One word changed",
+DlgSpellManyChanges : "Spell check complete: %1 words changed",
+
+IeSpellDownload : "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText : "Text (Value)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Button",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Name",
+DlgCheckboxValue : "Value",
+DlgCheckboxSelected : "Selected",
+
+// Form Dialog
+DlgFormName : "Name",
+DlgFormAction : "Action",
+DlgFormMethod : "Method",
+
+// Select Field Dialog
+DlgSelectName : "Name",
+DlgSelectValue : "Value",
+DlgSelectSize : "Size",
+DlgSelectLines : "lines",
+DlgSelectChkMulti : "Allow multiple selections",
+DlgSelectOpAvail : "Available Options",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Value",
+DlgSelectBtnAdd : "Add",
+DlgSelectBtnModify : "Modify",
+DlgSelectBtnUp : "Up",
+DlgSelectBtnDown : "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete : "Delete",
+
+// Textarea Dialog
+DlgTextareaName : "Name",
+DlgTextareaCols : "Columns",
+DlgTextareaRows : "Rows",
+
+// Text Field Dialog
+DlgTextName : "Name",
+DlgTextValue : "Value",
+DlgTextCharWidth : "Character Width",
+DlgTextMaxChars : "Maximum Characters",
+DlgTextType : "Type",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Password",
+
+// Hidden Field Dialog
+DlgHiddenName : "Name",
+DlgHiddenValue : "Value",
+
+// Bulleted List Dialog
+BulletedListProp : "Bulleted List Properties",
+NumberedListProp : "Numbered List Properties",
+DlgLstStart : "Start",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Circle",
+DlgLstTypeDisc : "Disc",
+DlgLstTypeSquare : "Square",
+DlgLstTypeNumbers : "Numbers (1, 2, 3)",
+DlgLstTypeLCase : "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase : "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General",
+DlgDocBackTab : "Background",
+DlgDocColorsTab : "Colors and Margins",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Page Title",
+DlgDocLangDir : "Language Direction",
+DlgDocLangDirLTR : "Left to Right (LTR)",
+DlgDocLangDirRTL : "Right to Left (RTL)",
+DlgDocLangCode : "Language Code",
+DlgDocCharSet : "Character Set Encoding",
+DlgDocCharSetCE : "Central European",
+DlgDocCharSetCT : "Chinese Traditional (Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Greek",
+DlgDocCharSetJP : "Japanese",
+DlgDocCharSetKR : "Korean",
+DlgDocCharSetTR : "Turkish",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Western European",
+DlgDocCharSetOther : "Other Character Set Encoding",
+
+DlgDocDocType : "Document Type Heading",
+DlgDocDocTypeOther : "Other Document Type Heading",
+DlgDocIncXHTML : "Include XHTML Declarations",
+DlgDocBgColor : "Background Color",
+DlgDocBgImage : "Background Image URL",
+DlgDocBgNoScroll : "Nonscrolling Background",
+DlgDocCText : "Text",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Visited Link",
+DlgDocCActive : "Active Link",
+DlgDocMargins : "Page Margins",
+DlgDocMaTop : "Top",
+DlgDocMaLeft : "Left",
+DlgDocMaRight : "Right",
+DlgDocMaBottom : "Bottom",
+DlgDocMeIndex : "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr : "Document Description",
+DlgDocMeAuthor : "Author",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Preview",
+
+// Templates Dialog
+Templates : "Templates",
+DlgTemplatesTitle : "Content Templates",
+DlgTemplatesSelMsg : "Please select the template to open in the editor<br />(the actual contents will be lost):",
+DlgTemplatesLoading : "Loading templates list. Please wait...",
+DlgTemplatesNoTpl : "(No templates defined)",
+DlgTemplatesReplace : "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab : "About",
+DlgAboutBrowserInfoTab : "Browser Info",
+DlgAboutLicenseTab : "License",
+DlgAboutVersion : "version",
+DlgAboutInfo : "For further information go to",
+
+// Div Dialog
+DlgDivGeneralTab : "General",
+DlgDivAdvancedTab : "Advanced",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Inline Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eo.js
new file mode 100644
index 0000000..f2e6c67
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eo.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Esperanto language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "KaÅi Ilobreton",
+ToolbarExpand : "Vidigi Ilojn",
+
+// Toolbar Items and Context Menu
+Save : "Sekurigi",
+NewPage : "Nova PaÄo",
+Preview : "Vidigi Aspekton",
+Cut : "Eltondi",
+Copy : "Kopii",
+Paste : "Interglui",
+PasteText : "Interglui kiel Tekston",
+PasteWord : "Interglui el Word",
+Print : "Presi",
+SelectAll : "Elekti ĉion",
+RemoveFormat : "Forigi Formaton",
+InsertLinkLbl : "Ligilo",
+InsertLink : "Enmeti/ÅœanÄi Ligilon",
+RemoveLink : "Forigi Ligilon",
+VisitLink : "Open Link", //MISSING
+Anchor : "Enmeti/ÅœanÄi Ankron",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Bildo",
+InsertImage : "Enmeti/ÅœanÄi Bildon",
+InsertFlashLbl : "Flash", //MISSING
+InsertFlash : "Insert/Edit Flash", //MISSING
+InsertTableLbl : "Tabelo",
+InsertTable : "Enmeti/ÅœanÄi Tabelon",
+InsertLineLbl : "Horizonta Linio",
+InsertLine : "Enmeti Horizonta Linio",
+InsertSpecialCharLbl: "Speciala Signo",
+InsertSpecialChar : "Enmeti Specialan Signon",
+InsertSmileyLbl : "Mienvinjeto",
+InsertSmiley : "Enmeti Mienvinjeton",
+About : "Pri FCKeditor",
+Bold : "Grasa",
+Italic : "Kursiva",
+Underline : "Substreko",
+StrikeThrough : "Trastreko",
+Subscript : "Subskribo",
+Superscript : "Superskribo",
+LeftJustify : "Maldekstrigi",
+CenterJustify : "Centrigi",
+RightJustify : "Dekstrigi",
+BlockJustify : "Äœisrandigi AmbaÅ­flanke",
+DecreaseIndent : "Malpligrandigi KrommarÄenon",
+IncreaseIndent : "Pligrandigi KrommarÄenon",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Malfari",
+Redo : "Refari",
+NumberedListLbl : "Numera Listo",
+NumberedList : "Enmeti/Forigi Numeran Liston",
+BulletedListLbl : "Bula Listo",
+BulletedList : "Enmeti/Forigi Bulan Liston",
+ShowTableBorders : "Vidigi Borderojn de Tabelo",
+ShowDetails : "Vidigi Detalojn",
+Style : "Stilo",
+FontFormat : "Formato",
+Font : "Tiparo",
+FontSize : "Grando",
+TextColor : "Teksta Koloro",
+BGColor : "Fona Koloro",
+Source : "Fonto",
+Find : "Serĉi",
+Replace : "AnstataÅ­igi",
+SpellCheck : "Literumada Kontrolilo",
+UniversalKeyboard : "Universala Klavaro",
+PageBreakLbl : "Page Break", //MISSING
+PageBreak : "Insert Page Break", //MISSING
+
+Form : "Formularo",
+Checkbox : "Markobutono",
+RadioButton : "Radiobutono",
+TextField : "Teksta kampo",
+Textarea : "Teksta Areo",
+HiddenField : "KaÅita Kampo",
+Button : "Butono",
+SelectionField : "Elekta Kampo",
+ImageButton : "Bildbutono",
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Modifier Ligilon",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Forigi Liniojn",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Forigi Kolumnojn",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Forigi Ĉelojn",
+MergeCells : "Kunfandi Ĉelojn",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Delete Table", //MISSING
+CellProperties : "Atributoj de Ĉelo",
+TableProperties : "Atributoj de Tabelo",
+ImageProperties : "Atributoj de Bildo",
+FlashProperties : "Flash Properties", //MISSING
+
+AnchorProp : "Ankraj Atributoj",
+ButtonProp : "Butonaj Atributoj",
+CheckboxProp : "Markobutonaj Atributoj",
+HiddenFieldProp : "Atributoj de KaÅita Kampo",
+RadioButtonProp : "Radiobutonaj Atributoj",
+ImageButtonProp : "Bildbutonaj Atributoj",
+TextFieldProp : "Atributoj de Teksta Kampo",
+SelectionFieldProp : "Atributoj de Elekta Kampo",
+TextareaProp : "Atributoj de Teksta Areo",
+FormProp : "Formularaj Atributoj",
+
+FontFormats : "Normala;Formatita;Adreso;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Traktado de XHTML. Bonvolu pacienci...",
+Done : "Finita",
+PasteWordConfirm : "La algluota teksto Åajnas esti Word-devena. Ĉu vi volas purigi Äin antaÅ­ ol interglui?",
+NotCompatiblePaste : "Tiu ĉi komando bezonas almenaŭ Internet Explorer 5.5. Ĉu vi volas daŭrigi sen purigado?",
+UnknownToolbarItem : "Ilobretero nekonata \"%1\"",
+UnknownCommand : "Komandonomo nekonata \"%1\"",
+NotImplemented : "Komando ne ankoraÅ­ realigita",
+UnknownToolbarSet : "La ilobreto \"%1\" ne ekzistas",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "Akcepti",
+DlgBtnCancel : "Rezigni",
+DlgBtnClose : "Fermi",
+DlgBtnBrowseServer : "Foliumi en la Servilo",
+DlgAdvancedTag : "Speciala",
+DlgOpOther : "<Alia>",
+DlgInfoTab : "Info", //MISSING
+DlgAlertUrl : "Please insert the URL", //MISSING
+
+// General Dialogs Labels
+DlgGenNotSet : "<DefaÅ­lta>",
+DlgGenId : "Id",
+DlgGenLangDir : "Skribdirekto",
+DlgGenLangDirLtr : "De maldekstro dekstren (LTR)",
+DlgGenLangDirRtl : "De dekstro maldekstren (RTL)",
+DlgGenLangCode : "Lingva Kodo",
+DlgGenAccessKey : "Fulmoklavo",
+DlgGenName : "Nomo",
+DlgGenTabIndex : "Taba Ordo",
+DlgGenLongDescr : "URL de Longa Priskribo",
+DlgGenClass : "Klasoj de Stilfolioj",
+DlgGenTitle : "Indika Titolo",
+DlgGenContType : "Indika Enhavotipo",
+DlgGenLinkCharset : "Signaro de la Ligita Rimedo",
+DlgGenStyle : "Stilo",
+
+// Image Dialog
+DlgImgTitle : "Atributoj de Bildo",
+DlgImgInfoTab : "Informoj pri Bildo",
+DlgImgBtnUpload : "Sendu al Servilo",
+DlgImgURL : "URL",
+DlgImgUpload : "AlÅuti",
+DlgImgAlt : "AnstataÅ­iga Teksto",
+DlgImgWidth : "LarÄo",
+DlgImgHeight : "Alto",
+DlgImgLockRatio : "Konservi Proporcion",
+DlgBtnResetSize : "Origina Grando",
+DlgImgBorder : "Bordero",
+DlgImgHSpace : "HSpaco",
+DlgImgVSpace : "VSpaco",
+DlgImgAlign : "Äœisrandigo",
+DlgImgAlignLeft : "Maldekstre",
+DlgImgAlignAbsBottom: "Abs Malsupre",
+DlgImgAlignAbsMiddle: "Abs Centre",
+DlgImgAlignBaseline : "Je Malsupro de Teksto",
+DlgImgAlignBottom : "Malsupre",
+DlgImgAlignMiddle : "Centre",
+DlgImgAlignRight : "Dekstre",
+DlgImgAlignTextTop : "Je Supro de Teksto",
+DlgImgAlignTop : "Supre",
+DlgImgPreview : "Vidigi Aspekton",
+DlgImgAlertUrl : "Bonvolu tajpi la URL de la bildo",
+DlgImgLinkTab : "Link", //MISSING
+
+// Flash Dialog
+DlgFlashTitle : "Flash Properties", //MISSING
+DlgFlashChkPlay : "Auto Play", //MISSING
+DlgFlashChkLoop : "Loop", //MISSING
+DlgFlashChkMenu : "Enable Flash Menu", //MISSING
+DlgFlashScale : "Scale", //MISSING
+DlgFlashScaleAll : "Show all", //MISSING
+DlgFlashScaleNoBorder : "No Border", //MISSING
+DlgFlashScaleFit : "Exact Fit", //MISSING
+
+// Link Dialog
+DlgLnkWindowTitle : "Ligilo",
+DlgLnkInfoTab : "Informoj pri la Ligilo",
+DlgLnkTargetTab : "Celo",
+
+DlgLnkType : "Tipo de Ligilo",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ankri en tiu ĉi paÄo",
+DlgLnkTypeEMail : "RetpoÅto",
+DlgLnkProto : "Protokolo",
+DlgLnkProtoOther : "<alia>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Elekti Ankron",
+DlgLnkAnchorByName : "Per Ankronomo",
+DlgLnkAnchorById : "Per Elementidentigilo",
+DlgLnkNoAnchors : "<Ne disponeblas ankroj en la dokumento>",
+DlgLnkEMail : "Retadreso",
+DlgLnkEMailSubject : "Temlinio",
+DlgLnkEMailBody : "MesaÄa korpo",
+DlgLnkUpload : "AlÅuti",
+DlgLnkBtnUpload : "Sendi al Servilo",
+
+DlgLnkTarget : "Celo",
+DlgLnkTargetFrame : "<kadro>",
+DlgLnkTargetPopup : "<Åprucfenestro>",
+DlgLnkTargetBlank : "Nova Fenestro (_blank)",
+DlgLnkTargetParent : "Gepatra Fenestro (_parent)",
+DlgLnkTargetSelf : "Sama Fenestro (_self)",
+DlgLnkTargetTop : "Plej Supra Fenestro (_top)",
+DlgLnkTargetFrameName : "Nomo de Kadro",
+DlgLnkPopWinName : "Nomo de Åœprucfenestro",
+DlgLnkPopWinFeat : "Atributoj de la Åœprucfenestro",
+DlgLnkPopResize : "Grando ÅœanÄebla",
+DlgLnkPopLocation : "Adresobreto",
+DlgLnkPopMenu : "Menubreto",
+DlgLnkPopScroll : "Rulumlisteloj",
+DlgLnkPopStatus : "Statobreto",
+DlgLnkPopToolbar : "Ilobreto",
+DlgLnkPopFullScrn : "Tutekrane (IE)",
+DlgLnkPopDependent : "Dependa (Netscape)",
+DlgLnkPopWidth : "LarÄo",
+DlgLnkPopHeight : "Alto",
+DlgLnkPopLeft : "Pozicio de Maldekstro",
+DlgLnkPopTop : "Pozicio de Supro",
+
+DlnLnkMsgNoUrl : "Bonvolu entajpi la URL-on",
+DlnLnkMsgNoEMail : "Bonvolu entajpi la retadreson",
+DlnLnkMsgNoAnchor : "Bonvolu elekti ankron",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Elekti",
+DlgColorBtnClear : "Forigi",
+DlgColorHighlight : "Emfazi",
+DlgColorSelected : "Elektita",
+
+// Smiley Dialog
+DlgSmileyTitle : "Enmeti Mienvinjeton",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Enmeti Specialan Signon",
+
+// Table Dialog
+DlgTableTitle : "Atributoj de Tabelo",
+DlgTableRows : "Linioj",
+DlgTableColumns : "Kolumnoj",
+DlgTableBorder : "Bordero",
+DlgTableAlign : "Äœisrandigo",
+DlgTableAlignNotSet : "<DefaÅ­lte>",
+DlgTableAlignLeft : "Maldekstre",
+DlgTableAlignCenter : "Centre",
+DlgTableAlignRight : "Dekstre",
+DlgTableWidth : "LarÄo",
+DlgTableWidthPx : "Bitbilderoj",
+DlgTableWidthPc : "elcentoj",
+DlgTableHeight : "Alto",
+DlgTableCellSpace : "Interspacigo de Ĉeloj",
+DlgTableCellPad : "Ĉirkaŭenhava Plenigado",
+DlgTableCaption : "Titolo",
+DlgTableSummary : "Summary", //MISSING
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Atributoj de Celo",
+DlgCellWidth : "LarÄo",
+DlgCellWidthPx : "bitbilderoj",
+DlgCellWidthPc : "elcentoj",
+DlgCellHeight : "Alto",
+DlgCellWordWrap : "Linifaldo",
+DlgCellWordWrapNotSet : "<DefaÅ­lte>",
+DlgCellWordWrapYes : "Jes",
+DlgCellWordWrapNo : "Ne",
+DlgCellHorAlign : "Horizonta Äœisrandigo",
+DlgCellHorAlignNotSet : "<DefaÅ­lte>",
+DlgCellHorAlignLeft : "Maldekstre",
+DlgCellHorAlignCenter : "Centre",
+DlgCellHorAlignRight: "Dekstre",
+DlgCellVerAlign : "Vertikala Äœisrandigo",
+DlgCellVerAlignNotSet : "<DefaÅ­lte>",
+DlgCellVerAlignTop : "Supre",
+DlgCellVerAlignMiddle : "Centre",
+DlgCellVerAlignBottom : "Malsupre",
+DlgCellVerAlignBaseline : "Je Malsupro de Teksto",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Linioj Kunfanditaj",
+DlgCellCollSpan : "Kolumnoj Kunfanditaj",
+DlgCellBackColor : "Fono",
+DlgCellBorderColor : "Bordero",
+DlgCellBtnSelect : "Elekti...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Serĉi",
+DlgFindFindBtn : "Serĉi",
+DlgFindNotFoundMsg : "La celteksto ne estas trovita.",
+
+// Replace Dialog
+DlgReplaceTitle : "AnstataÅ­igi",
+DlgReplaceFindLbl : "Serĉi:",
+DlgReplaceReplaceLbl : "AnstataÅ­igi per:",
+DlgReplaceCaseChk : "Kongruigi Usklecon",
+DlgReplaceReplaceBtn : "AnstataÅ­igi",
+DlgReplaceReplAllBtn : "Anstataŭigi Ĉiun",
+DlgReplaceWordChk : "Tuta Vorto",
+
+// Paste Operations / Dialog
+PasteErrorCut : "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).",
+PasteErrorCopy : "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).",
+
+PasteAsText : "Interglui kiel Tekston",
+PasteFromWord : "Interglui el Word",
+
+DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.", //MISSING
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING
+DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING
+
+// Color Picker
+ColorAutomatic : "AÅ­tomata",
+ColorMoreColors : "Pli da Koloroj...",
+
+// Document Properties
+DocProps : "Dokumentaj Atributoj",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ankraj Atributoj",
+DlgAnchorName : "Ankra Nomo",
+DlgAnchorErrorName : "Bv tajpi la ankran nomon",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ne trovita en la vortaro",
+DlgSpellChangeTo : "ÅœanÄi al",
+DlgSpellBtnIgnore : "Malatenti",
+DlgSpellBtnIgnoreAll : "Malatenti Ĉiun",
+DlgSpellBtnReplace : "AnstataÅ­igi",
+DlgSpellBtnReplaceAll : "Anstataŭigi Ĉiun",
+DlgSpellBtnUndo : "Malfari",
+DlgSpellNoSuggestions : "- Neniu propono -",
+DlgSpellProgress : "Literumkontrolado daÅ­ras...",
+DlgSpellNoMispell : "Literumkontrolado finita: neniu fuÅo trovita",
+DlgSpellNoChanges : "Literumkontrolado finita: neniu vorto ÅanÄita",
+DlgSpellOneChange : "Literumkontrolado finita: unu vorto ÅanÄita",
+DlgSpellManyChanges : "Literumkontrolado finita: %1 vortoj ÅanÄitaj",
+
+IeSpellDownload : "Literumada Kontrolilo ne instalita. Ĉu vi volas elÅuti Äin nun?",
+
+// Button Dialog
+DlgButtonText : "Teksto (Valoro)",
+DlgButtonType : "Tipo",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nomo",
+DlgCheckboxValue : "Valoro",
+DlgCheckboxSelected : "Elektita",
+
+// Form Dialog
+DlgFormName : "Nomo",
+DlgFormAction : "Ago",
+DlgFormMethod : "Metodo",
+
+// Select Field Dialog
+DlgSelectName : "Nomo",
+DlgSelectValue : "Valoro",
+DlgSelectSize : "Grando",
+DlgSelectLines : "Linioj",
+DlgSelectChkMulti : "Permesi Plurajn Elektojn",
+DlgSelectOpAvail : "Elektoj Disponeblaj",
+DlgSelectOpText : "Teksto",
+DlgSelectOpValue : "Valoro",
+DlgSelectBtnAdd : "Aldoni",
+DlgSelectBtnModify : "Modifi",
+DlgSelectBtnUp : "Supren",
+DlgSelectBtnDown : "Malsupren",
+DlgSelectBtnSetValue : "Agordi kiel Elektitan Valoron",
+DlgSelectBtnDelete : "Forigi",
+
+// Textarea Dialog
+DlgTextareaName : "Nomo",
+DlgTextareaCols : "Kolumnoj",
+DlgTextareaRows : "Vicoj",
+
+// Text Field Dialog
+DlgTextName : "Nomo",
+DlgTextValue : "Valoro",
+DlgTextCharWidth : "SignolarÄo",
+DlgTextMaxChars : "Maksimuma Nombro da Signoj",
+DlgTextType : "Tipo",
+DlgTextTypeText : "Teksto",
+DlgTextTypePass : "Pasvorto",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nomo",
+DlgHiddenValue : "Valoro",
+
+// Bulleted List Dialog
+BulletedListProp : "Atributoj de Bula Listo",
+NumberedListProp : "Atributoj de Numera Listo",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Tipo",
+DlgLstTypeCircle : "Cirklo",
+DlgLstTypeDisc : "Disc", //MISSING
+DlgLstTypeSquare : "Kvadrato",
+DlgLstTypeNumbers : "Ciferoj (1, 2, 3)",
+DlgLstTypeLCase : "Minusklaj Literoj (a, b, c)",
+DlgLstTypeUCase : "Majusklaj Literoj (A, B, C)",
+DlgLstTypeSRoman : "Malgrandaj Romanaj Ciferoj (i, ii, iii)",
+DlgLstTypeLRoman : "Grandaj Romanaj Ciferoj (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Ĝeneralaĵoj",
+DlgDocBackTab : "Fono",
+DlgDocColorsTab : "Koloroj kaj MarÄenoj",
+DlgDocMetaTab : "Metadatumoj",
+
+DlgDocPageTitle : "PaÄotitolo",
+DlgDocLangDir : "Skribdirekto de la Lingvo",
+DlgDocLangDirLTR : "De maldekstro dekstren (LTR)",
+DlgDocLangDirRTL : "De dekstro maldekstren (LTR)",
+DlgDocLangCode : "Lingvokodo",
+DlgDocCharSet : "Signara Kodo",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Alia Signara Kodo",
+
+DlgDocDocType : "Dokumenta Tipo",
+DlgDocDocTypeOther : "Alia Dokumenta Tipo",
+DlgDocIncXHTML : "Inkluzivi XHTML Deklaroj",
+DlgDocBgColor : "Fona Koloro",
+DlgDocBgImage : "URL de Fona Bildo",
+DlgDocBgNoScroll : "Neruluma Fono",
+DlgDocCText : "Teksto",
+DlgDocCLink : "Ligilo",
+DlgDocCVisited : "Vizitita Ligilo",
+DlgDocCActive : "Aktiva Ligilo",
+DlgDocMargins : "PaÄaj MarÄenoj",
+DlgDocMaTop : "Supra",
+DlgDocMaLeft : "Maldekstra",
+DlgDocMaRight : "Dekstra",
+DlgDocMaBottom : "Malsupra",
+DlgDocMeIndex : "Åœlosilvortoj de la Dokumento (apartigita de komoj)",
+DlgDocMeDescr : "Dokumenta Priskribo",
+DlgDocMeAuthor : "Verkinto",
+DlgDocMeCopy : "Kopirajto",
+DlgDocPreview : "Aspekto",
+
+// Templates Dialog
+Templates : "Templates", //MISSING
+DlgTemplatesTitle : "Content Templates", //MISSING
+DlgTemplatesSelMsg : "Please select the template to open in the editor<br />(the actual contents will be lost):", //MISSING
+DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING
+DlgTemplatesNoTpl : "(No templates defined)", //MISSING
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "Pri",
+DlgAboutBrowserInfoTab : "Informoj pri TTT-legilo",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "versio",
+DlgAboutInfo : "Por pli da informoj, vizitu",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/es.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/es.js
new file mode 100644
index 0000000..4b2043d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/es.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Spanish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Contraer Barra",
+ToolbarExpand : "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save : "Guardar",
+NewPage : "Nueva Página",
+Preview : "Vista Previa",
+Cut : "Cortar",
+Copy : "Copiar",
+Paste : "Pegar",
+PasteText : "Pegar como texto plano",
+PasteWord : "Pegar desde Word",
+Print : "Imprimir",
+SelectAll : "Seleccionar Todo",
+RemoveFormat : "Eliminar Formato",
+InsertLinkLbl : "Vínculo",
+InsertLink : "Insertar/Editar Vínculo",
+RemoveLink : "Eliminar Vínculo",
+VisitLink : "Abrir enlace",
+Anchor : "Referencia",
+AnchorDelete : "Eliminar Referencia",
+InsertImageLbl : "Imagen",
+InsertImage : "Insertar/Editar Imagen",
+InsertFlashLbl : "Flash",
+InsertFlash : "Insertar/Editar Flash",
+InsertTableLbl : "Tabla",
+InsertTable : "Insertar/Editar Tabla",
+InsertLineLbl : "Línea",
+InsertLine : "Insertar Línea Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar : "Insertar Caracter Especial",
+InsertSmileyLbl : "Emoticons",
+InsertSmiley : "Insertar Emoticons",
+About : "Acerca de FCKeditor",
+Bold : "Negrita",
+Italic : "Cursiva",
+Underline : "Subrayado",
+StrikeThrough : "Tachado",
+Subscript : "Subíndice",
+Superscript : "Superíndice",
+LeftJustify : "Alinear a Izquierda",
+CenterJustify : "Centrar",
+RightJustify : "Alinear a Derecha",
+BlockJustify : "Justificado",
+DecreaseIndent : "Disminuir Sangría",
+IncreaseIndent : "Aumentar Sangría",
+Blockquote : "Cita",
+CreateDiv : "Crear contenedor (div)",
+EditDiv : "Editar contenedor (div)",
+DeleteDiv : "Eliminar contenedor (div)",
+Undo : "Deshacer",
+Redo : "Rehacer",
+NumberedListLbl : "Numeración",
+NumberedList : "Insertar/Eliminar Numeración",
+BulletedListLbl : "Viñetas",
+BulletedList : "Insertar/Eliminar Viñetas",
+ShowTableBorders : "Mostrar Bordes de Tablas",
+ShowDetails : "Mostrar saltos de Párrafo",
+Style : "Estilo",
+FontFormat : "Formato",
+Font : "Fuente",
+FontSize : "Tamaño",
+TextColor : "Color de Texto",
+BGColor : "Color de Fondo",
+Source : "Fuente HTML",
+Find : "Buscar",
+Replace : "Reemplazar",
+SpellCheck : "Ortografía",
+UniversalKeyboard : "Teclado Universal",
+PageBreakLbl : "Salto de Página",
+PageBreak : "Insertar Salto de Página",
+
+Form : "Formulario",
+Checkbox : "Casilla de Verificación",
+RadioButton : "Botones de Radio",
+TextField : "Campo de Texto",
+Textarea : "Area de Texto",
+HiddenField : "Campo Oculto",
+Button : "Botón",
+SelectionField : "Campo de Selección",
+ImageButton : "Botón Imagen",
+
+FitWindow : "Maximizar el tamaño del editor",
+ShowBlocks : "Mostrar bloques",
+
+// Context Menu
+EditLink : "Editar Vínculo",
+CellCM : "Celda",
+RowCM : "Fila",
+ColumnCM : "Columna",
+InsertRowAfter : "Insertar fila en la parte inferior",
+InsertRowBefore : "Insertar fila en la parte superior",
+DeleteRows : "Eliminar Filas",
+InsertColumnAfter : "Insertar columna a la derecha",
+InsertColumnBefore : "Insertar columna a la izquierda",
+DeleteColumns : "Eliminar Columnas",
+InsertCellAfter : "Insertar celda a la derecha",
+InsertCellBefore : "Insertar celda a la izquierda",
+DeleteCells : "Eliminar Celdas",
+MergeCells : "Combinar Celdas",
+MergeRight : "Combinar a la derecha",
+MergeDown : "Combinar hacia abajo",
+HorizontalSplitCell : "Dividir la celda horizontalmente",
+VerticalSplitCell : "Dividir la celda verticalmente",
+TableDelete : "Eliminar Tabla",
+CellProperties : "Propiedades de Celda",
+TableProperties : "Propiedades de Tabla",
+ImageProperties : "Propiedades de Imagen",
+FlashProperties : "Propiedades de Flash",
+
+AnchorProp : "Propiedades de Referencia",
+ButtonProp : "Propiedades de Botón",
+CheckboxProp : "Propiedades de Casilla",
+HiddenFieldProp : "Propiedades de Campo Oculto",
+RadioButtonProp : "Propiedades de Botón de Radio",
+ImageButtonProp : "Propiedades de Botón de Imagen",
+TextFieldProp : "Propiedades de Campo de Texto",
+SelectionFieldProp : "Propiedades de Campo de Selección",
+TextareaProp : "Propiedades de Area de Texto",
+FormProp : "Propiedades de Formulario",
+
+FontFormats : "Normal;Con formato;Dirección;Encabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Procesando XHTML. Por favor, espere...",
+Done : "Hecho",
+PasteWordConfirm : "El texto que desea parece provenir de Word. Desea depurarlo antes de pegarlo?",
+NotCompatiblePaste : "Este comando está disponible sólo para Internet Explorer version 5.5 or superior. Desea pegar sin depurar?",
+UnknownToolbarItem : "Item de barra desconocido \"%1\"",
+UnknownCommand : "Nombre de comando desconocido \"%1\"",
+NotImplemented : "Comando no implementado",
+UnknownToolbarSet : "Nombre de barra \"%1\" no definido",
+NoActiveX : "La configuración de las opciones de seguridad de su navegador puede estar limitando algunas características del editor. Por favor active la opción \"Ejecutar controles y complementos de ActiveX \", de lo contrario puede experimentar errores o ausencia de funcionalidades.",
+BrowseServerBlocked : "La ventana de visualización del servidor no pudo ser abierta. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).",
+DialogBlocked : "No se ha podido abrir la ventana de diálogo. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).",
+VisitLinkBlocked : "Nose ha podido abrir la ventana. Asegurese de que todos los bloqueadores de popups están deshabilitados.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancelar",
+DlgBtnClose : "Cerrar",
+DlgBtnBrowseServer : "Ver Servidor",
+DlgAdvancedTag : "Avanzado",
+DlgOpOther : "<Otro>",
+DlgInfoTab : "Información",
+DlgAlertUrl : "Inserte el URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<No definido>",
+DlgGenId : "Id",
+DlgGenLangDir : "Orientación",
+DlgGenLangDirLtr : "Izquierda a Derecha (LTR)",
+DlgGenLangDirRtl : "Derecha a Izquierda (RTL)",
+DlgGenLangCode : "Cód. de idioma",
+DlgGenAccessKey : "Clave de Acceso",
+DlgGenName : "Nombre",
+DlgGenTabIndex : "Indice de tabulación",
+DlgGenLongDescr : "Descripción larga URL",
+DlgGenClass : "Clases de hojas de estilo",
+DlgGenTitle : "Título",
+DlgGenContType : "Tipo de Contenido",
+DlgGenLinkCharset : "Fuente de caracteres vinculado",
+DlgGenStyle : "Estilo",
+
+// Image Dialog
+DlgImgTitle : "Propiedades de Imagen",
+DlgImgInfoTab : "Información de Imagen",
+DlgImgBtnUpload : "Enviar al Servidor",
+DlgImgURL : "URL",
+DlgImgUpload : "Cargar",
+DlgImgAlt : "Texto Alternativo",
+DlgImgWidth : "Anchura",
+DlgImgHeight : "Altura",
+DlgImgLockRatio : "Proporcional",
+DlgBtnResetSize : "Tamaño Original",
+DlgImgBorder : "Borde",
+DlgImgHSpace : "Esp.Horiz",
+DlgImgVSpace : "Esp.Vert",
+DlgImgAlign : "Alineación",
+DlgImgAlignLeft : "Izquierda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline : "Línea de base",
+DlgImgAlignBottom : "Pie",
+DlgImgAlignMiddle : "Centro",
+DlgImgAlignRight : "Derecha",
+DlgImgAlignTextTop : "Tope del texto",
+DlgImgAlignTop : "Tope",
+DlgImgPreview : "Vista Previa",
+DlgImgAlertUrl : "Por favor escriba la URL de la imagen",
+DlgImgLinkTab : "Vínculo",
+
+// Flash Dialog
+DlgFlashTitle : "Propiedades de Flash",
+DlgFlashChkPlay : "Autoejecución",
+DlgFlashChkLoop : "Repetir",
+DlgFlashChkMenu : "Activar Menú Flash",
+DlgFlashScale : "Escala",
+DlgFlashScaleAll : "Mostrar todo",
+DlgFlashScaleNoBorder : "Sin Borde",
+DlgFlashScaleFit : "Ajustado",
+
+// Link Dialog
+DlgLnkWindowTitle : "Vínculo",
+DlgLnkInfoTab : "Información de Vínculo",
+DlgLnkTargetTab : "Destino",
+
+DlgLnkType : "Tipo de vínculo",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Referencia en esta página",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocolo",
+DlgLnkProtoOther : "<otro>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Seleccionar una referencia",
+DlgLnkAnchorByName : "Por Nombre de Referencia",
+DlgLnkAnchorById : "Por ID de elemento",
+DlgLnkNoAnchors : "(No hay referencias disponibles en el documento)",
+DlgLnkEMail : "Dirección de E-Mail",
+DlgLnkEMailSubject : "Título del Mensaje",
+DlgLnkEMailBody : "Cuerpo del Mensaje",
+DlgLnkUpload : "Cargar",
+DlgLnkBtnUpload : "Enviar al Servidor",
+
+DlgLnkTarget : "Destino",
+DlgLnkTargetFrame : "<marco>",
+DlgLnkTargetPopup : "<ventana emergente>",
+DlgLnkTargetBlank : "Nueva Ventana(_blank)",
+DlgLnkTargetParent : "Ventana Padre (_parent)",
+DlgLnkTargetSelf : "Misma Ventana (_self)",
+DlgLnkTargetTop : "Ventana primaria (_top)",
+DlgLnkTargetFrameName : "Nombre del Marco Destino",
+DlgLnkPopWinName : "Nombre de Ventana Emergente",
+DlgLnkPopWinFeat : "Características de Ventana Emergente",
+DlgLnkPopResize : "Ajustable",
+DlgLnkPopLocation : "Barra de ubicación",
+DlgLnkPopMenu : "Barra de Menú",
+DlgLnkPopScroll : "Barras de desplazamiento",
+DlgLnkPopStatus : "Barra de Estado",
+DlgLnkPopToolbar : "Barra de Herramientas",
+DlgLnkPopFullScrn : "Pantalla Completa (IE)",
+DlgLnkPopDependent : "Dependiente (Netscape)",
+DlgLnkPopWidth : "Anchura",
+DlgLnkPopHeight : "Altura",
+DlgLnkPopLeft : "Posición Izquierda",
+DlgLnkPopTop : "Posición Derecha",
+
+DlnLnkMsgNoUrl : "Por favor tipee el vínculo URL",
+DlnLnkMsgNoEMail : "Por favor tipee la dirección de e-mail",
+DlnLnkMsgNoAnchor : "Por favor seleccione una referencia",
+DlnLnkMsgInvPopName : "El nombre debe empezar con un caracter alfanumérico y no debe contener espacios",
+
+// Color Dialog
+DlgColorTitle : "Seleccionar Color",
+DlgColorBtnClear : "Ninguno",
+DlgColorHighlight : "Resaltado",
+DlgColorSelected : "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insertar un Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Seleccione un caracter especial",
+
+// Table Dialog
+DlgTableTitle : "Propiedades de Tabla",
+DlgTableRows : "Filas",
+DlgTableColumns : "Columnas",
+DlgTableBorder : "Tamaño de Borde",
+DlgTableAlign : "Alineación",
+DlgTableAlignNotSet : "<No establecido>",
+DlgTableAlignLeft : "Izquierda",
+DlgTableAlignCenter : "Centrado",
+DlgTableAlignRight : "Derecha",
+DlgTableWidth : "Anchura",
+DlgTableWidthPx : "pixeles",
+DlgTableWidthPc : "porcentaje",
+DlgTableHeight : "Altura",
+DlgTableCellSpace : "Esp. e/celdas",
+DlgTableCellPad : "Esp. interior",
+DlgTableCaption : "Título",
+DlgTableSummary : "Síntesis",
+DlgTableHeaders : "Encabezados",
+DlgTableHeadersNone : "Ninguno",
+DlgTableHeadersColumn : "Primera columna",
+DlgTableHeadersRow : "Primera fila",
+DlgTableHeadersBoth : "Ambas",
+
+// Table Cell Dialog
+DlgCellTitle : "Propiedades de Celda",
+DlgCellWidth : "Anchura",
+DlgCellWidthPx : "pixeles",
+DlgCellWidthPc : "porcentaje",
+DlgCellHeight : "Altura",
+DlgCellWordWrap : "Cortar Línea",
+DlgCellWordWrapNotSet : "<No establecido>",
+DlgCellWordWrapYes : "Si",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "Alineación Horizontal",
+DlgCellHorAlignNotSet : "<No establecido>",
+DlgCellHorAlignLeft : "Izquierda",
+DlgCellHorAlignCenter : "Centrado",
+DlgCellHorAlignRight: "Derecha",
+DlgCellVerAlign : "Alineación Vertical",
+DlgCellVerAlignNotSet : "<Not establecido>",
+DlgCellVerAlignTop : "Tope",
+DlgCellVerAlignMiddle : "Medio",
+DlgCellVerAlignBottom : "ie",
+DlgCellVerAlignBaseline : "Línea de Base",
+DlgCellType : "Tipo de celda",
+DlgCellTypeData : "Datos",
+DlgCellTypeHeader : "Encabezado",
+DlgCellRowSpan : "Abarcar Filas",
+DlgCellCollSpan : "Abarcar Columnas",
+DlgCellBackColor : "Color de Fondo",
+DlgCellBorderColor : "Color de Borde",
+DlgCellBtnSelect : "Seleccione...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Buscar y Reemplazar",
+
+// Find Dialog
+DlgFindTitle : "Buscar",
+DlgFindFindBtn : "Buscar",
+DlgFindNotFoundMsg : "El texto especificado no ha sido encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle : "Reemplazar",
+DlgReplaceFindLbl : "Texto a buscar:",
+DlgReplaceReplaceLbl : "Reemplazar con:",
+DlgReplaceCaseChk : "Coincidir may/min",
+DlgReplaceReplaceBtn : "Reemplazar",
+DlgReplaceReplAllBtn : "Reemplazar Todo",
+DlgReplaceWordChk : "Coincidir toda la palabra",
+
+// Paste Operations / Dialog
+PasteErrorCut : "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).",
+PasteErrorCopy : "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).",
+
+PasteAsText : "Pegar como Texto Plano",
+PasteFromWord : "Pegar desde Word",
+
+DlgPasteMsg2 : "Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.",
+DlgPasteSec : "Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles. Es necesario que lo pegue de nuevo en esta ventana.",
+DlgPasteIgnoreFont : "Ignorar definiciones de fuentes",
+DlgPasteRemoveStyles : "Remover definiciones de estilo",
+
+// Color Picker
+ColorAutomatic : "Automático",
+ColorMoreColors : "Más Colores...",
+
+// Document Properties
+DocProps : "Propiedades del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle : "Propiedades de la Referencia",
+DlgAnchorName : "Nombre de la Referencia",
+DlgAnchorErrorName : "Por favor, complete el nombre de la Referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "No se encuentra en el Diccionario",
+DlgSpellChangeTo : "Cambiar a",
+DlgSpellBtnIgnore : "Ignorar",
+DlgSpellBtnIgnoreAll : "Ignorar Todo",
+DlgSpellBtnReplace : "Reemplazar",
+DlgSpellBtnReplaceAll : "Reemplazar Todo",
+DlgSpellBtnUndo : "Deshacer",
+DlgSpellNoSuggestions : "- No hay sugerencias -",
+DlgSpellProgress : "Control de Ortografía en progreso...",
+DlgSpellNoMispell : "Control finalizado: no se encontraron errores",
+DlgSpellNoChanges : "Control finalizado: no se ha cambiado ninguna palabra",
+DlgSpellOneChange : "Control finalizado: se ha cambiado una palabra",
+DlgSpellManyChanges : "Control finalizado: se ha cambiado %1 palabras",
+
+IeSpellDownload : "Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?",
+
+// Button Dialog
+DlgButtonText : "Texto (Valor)",
+DlgButtonType : "Tipo",
+DlgButtonTypeBtn : "Boton",
+DlgButtonTypeSbm : "Enviar",
+DlgButtonTypeRst : "Reestablecer",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nombre",
+DlgCheckboxValue : "Valor",
+DlgCheckboxSelected : "Seleccionado",
+
+// Form Dialog
+DlgFormName : "Nombre",
+DlgFormAction : "Acción",
+DlgFormMethod : "Método",
+
+// Select Field Dialog
+DlgSelectName : "Nombre",
+DlgSelectValue : "Valor",
+DlgSelectSize : "Tamaño",
+DlgSelectLines : "Lineas",
+DlgSelectChkMulti : "Permitir múltiple selección",
+DlgSelectOpAvail : "Opciones disponibles",
+DlgSelectOpText : "Texto",
+DlgSelectOpValue : "Valor",
+DlgSelectBtnAdd : "Agregar",
+DlgSelectBtnModify : "Modificar",
+DlgSelectBtnUp : "Subir",
+DlgSelectBtnDown : "Bajar",
+DlgSelectBtnSetValue : "Establecer como predeterminado",
+DlgSelectBtnDelete : "Eliminar",
+
+// Textarea Dialog
+DlgTextareaName : "Nombre",
+DlgTextareaCols : "Columnas",
+DlgTextareaRows : "Filas",
+
+// Text Field Dialog
+DlgTextName : "Nombre",
+DlgTextValue : "Valor",
+DlgTextCharWidth : "Caracteres de ancho",
+DlgTextMaxChars : "Máximo caracteres",
+DlgTextType : "Tipo",
+DlgTextTypeText : "Texto",
+DlgTextTypePass : "Contraseña",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nombre",
+DlgHiddenValue : "Valor",
+
+// Bulleted List Dialog
+BulletedListProp : "Propiedades de Viñetas",
+NumberedListProp : "Propiedades de Numeraciones",
+DlgLstStart : "Inicio",
+DlgLstType : "Tipo",
+DlgLstTypeCircle : "Círculo",
+DlgLstTypeDisc : "Disco",
+DlgLstTypeSquare : "Cuadrado",
+DlgLstTypeNumbers : "Números (1, 2, 3)",
+DlgLstTypeLCase : "letras en minúsculas (a, b, c)",
+DlgLstTypeUCase : "letras en mayúsculas (A, B, C)",
+DlgLstTypeSRoman : "Números Romanos (i, ii, iii)",
+DlgLstTypeLRoman : "Números Romanos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General",
+DlgDocBackTab : "Fondo",
+DlgDocColorsTab : "Colores y Márgenes",
+DlgDocMetaTab : "Meta Información",
+
+DlgDocPageTitle : "Título de Página",
+DlgDocLangDir : "Orientación de idioma",
+DlgDocLangDirLTR : "Izq. a Derecha (LTR)",
+DlgDocLangDirRTL : "Der. a Izquierda (RTL)",
+DlgDocLangCode : "Código de Idioma",
+DlgDocCharSet : "Codif. de Conjunto de Caracteres",
+DlgDocCharSetCE : "Centro Europeo",
+DlgDocCharSetCT : "Chino Tradicional (Big5)",
+DlgDocCharSetCR : "Cirílico",
+DlgDocCharSetGR : "Griego",
+DlgDocCharSetJP : "Japonés",
+DlgDocCharSetKR : "Coreano",
+DlgDocCharSetTR : "Turco",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Europeo occidental",
+DlgDocCharSetOther : "Otra Codificación",
+
+DlgDocDocType : "Encabezado de Tipo de Documento",
+DlgDocDocTypeOther : "Otro Encabezado",
+DlgDocIncXHTML : "Incluir Declaraciones XHTML",
+DlgDocBgColor : "Color de Fondo",
+DlgDocBgImage : "URL de Imagen de Fondo",
+DlgDocBgNoScroll : "Fondo sin rolido",
+DlgDocCText : "Texto",
+DlgDocCLink : "Vínculo",
+DlgDocCVisited : "Vínculo Visitado",
+DlgDocCActive : "Vínculo Activo",
+DlgDocMargins : "Márgenes de Página",
+DlgDocMaTop : "Tope",
+DlgDocMaLeft : "Izquierda",
+DlgDocMaRight : "Derecha",
+DlgDocMaBottom : "Pie",
+DlgDocMeIndex : "Claves de indexación del Documento (separados por comas)",
+DlgDocMeDescr : "Descripción del Documento",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Vista Previa",
+
+// Templates Dialog
+Templates : "Plantillas",
+DlgTemplatesTitle : "Contenido de Plantillas",
+DlgTemplatesSelMsg : "Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):",
+DlgTemplatesLoading : "Cargando lista de Plantillas. Por favor, aguarde...",
+DlgTemplatesNoTpl : "(No hay plantillas definidas)",
+DlgTemplatesReplace : "Reemplazar el contenido actual",
+
+// About Dialog
+DlgAboutAboutTab : "Acerca de",
+DlgAboutBrowserInfoTab : "Información de Navegador",
+DlgAboutLicenseTab : "Licencia",
+DlgAboutVersion : "versión",
+DlgAboutInfo : "Para mayor información por favor dirigirse a",
+
+// Div Dialog
+DlgDivGeneralTab : "General",
+DlgDivAdvancedTab : "Avanzado",
+DlgDivStyle : "Estilo",
+DlgDivInlineStyle : "Estilos CSS"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/et.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/et.js
new file mode 100644
index 0000000..290957a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/et.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Estonian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Voldi tööriistariba",
+ToolbarExpand : "Laienda tööriistariba",
+
+// Toolbar Items and Context Menu
+Save : "Salvesta",
+NewPage : "Uus leht",
+Preview : "Eelvaade",
+Cut : "Lõika",
+Copy : "Kopeeri",
+Paste : "Kleebi",
+PasteText : "Kleebi tavalise tekstina",
+PasteWord : "Kleebi Wordist",
+Print : "Prindi",
+SelectAll : "Vali kõik",
+RemoveFormat : "Eemalda vorming",
+InsertLinkLbl : "Link",
+InsertLink : "Sisesta link / Muuda linki",
+RemoveLink : "Eemalda link",
+VisitLink : "Open Link", //MISSING
+Anchor : "Sisesta ankur / Muuda ankrut",
+AnchorDelete : "Eemalda ankur",
+InsertImageLbl : "Pilt",
+InsertImage : "Sisesta pilt / Muuda pilti",
+InsertFlashLbl : "Flash",
+InsertFlash : "Sisesta flash / Muuda flashi",
+InsertTableLbl : "Tabel",
+InsertTable : "Sisesta tabel / Muuda tabelit",
+InsertLineLbl : "Joon",
+InsertLine : "Sisesta horisontaaljoon",
+InsertSpecialCharLbl: "Erimärgid",
+InsertSpecialChar : "Sisesta erimärk",
+InsertSmileyLbl : "Emotikon",
+InsertSmiley : "Sisesta emotikon",
+About : "FCKeditor teave",
+Bold : "Paks",
+Italic : "Kursiiv",
+Underline : "Allajoonitud",
+StrikeThrough : "Läbijoonitud",
+Subscript : "Allindeks",
+Superscript : "Ãœlaindeks",
+LeftJustify : "Vasakjoondus",
+CenterJustify : "Keskjoondus",
+RightJustify : "Paremjoondus",
+BlockJustify : "Rööpjoondus",
+DecreaseIndent : "Vähenda taanet",
+IncreaseIndent : "Suurenda taanet",
+Blockquote : "Blokktsitaat",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Võta tagasi",
+Redo : "Korda toimingut",
+NumberedListLbl : "Nummerdatud loetelu",
+NumberedList : "Sisesta/Eemalda nummerdatud loetelu",
+BulletedListLbl : "Punktiseeritud loetelu",
+BulletedList : "Sisesta/Eemalda punktiseeritud loetelu",
+ShowTableBorders : "Näita tabeli jooni",
+ShowDetails : "Näita üksikasju",
+Style : "Laad",
+FontFormat : "Vorming",
+Font : "Kiri",
+FontSize : "Suurus",
+TextColor : "Teksti värv",
+BGColor : "Tausta värv",
+Source : "Lähtekood",
+Find : "Otsi",
+Replace : "Asenda",
+SpellCheck : "Kontrolli õigekirja",
+UniversalKeyboard : "Universaalne klaviatuur",
+PageBreakLbl : "Lehepiir",
+PageBreak : "Sisesta lehevahetuskoht",
+
+Form : "Vorm",
+Checkbox : "Märkeruut",
+RadioButton : "Raadionupp",
+TextField : "Tekstilahter",
+Textarea : "Tekstiala",
+HiddenField : "Varjatud lahter",
+Button : "Nupp",
+SelectionField : "Valiklahter",
+ImageButton : "Piltnupp",
+
+FitWindow : "Maksimeeri redaktori mõõtmed",
+ShowBlocks : "Näita blokke",
+
+// Context Menu
+EditLink : "Muuda linki",
+CellCM : "Lahter",
+RowCM : "Rida",
+ColumnCM : "Veerg",
+InsertRowAfter : "Sisesta rida peale",
+InsertRowBefore : "Sisesta rida enne",
+DeleteRows : "Eemalda read",
+InsertColumnAfter : "Sisesta veerg peale",
+InsertColumnBefore : "Sisesta veerg enne",
+DeleteColumns : "Eemalda veerud",
+InsertCellAfter : "Sisesta lahter peale",
+InsertCellBefore : "Sisesta lahter enne",
+DeleteCells : "Eemalda lahtrid",
+MergeCells : "Ãœhenda lahtrid",
+MergeRight : "Ãœhenda paremale",
+MergeDown : "Ãœhenda alla",
+HorizontalSplitCell : "Poolita lahter horisontaalselt",
+VerticalSplitCell : "Poolita lahter vertikaalselt",
+TableDelete : "Kustuta tabel",
+CellProperties : "Lahtri atribuudid",
+TableProperties : "Tabeli atribuudid",
+ImageProperties : "Pildi atribuudid",
+FlashProperties : "Flash omadused",
+
+AnchorProp : "Ankru omadused",
+ButtonProp : "Nupu omadused",
+CheckboxProp : "Märkeruudu omadused",
+HiddenFieldProp : "Varjatud lahtri omadused",
+RadioButtonProp : "Raadionupu omadused",
+ImageButtonProp : "Piltnupu omadused",
+TextFieldProp : "Tekstilahtri omadused",
+SelectionFieldProp : "Valiklahtri omadused",
+TextareaProp : "Tekstiala omadused",
+FormProp : "Vormi omadused",
+
+FontFormats : "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6;Tavaline (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Töötlen XHTML'i. Palun oota...",
+Done : "Tehtud",
+PasteWordConfirm : "Tekst, mida soovid lisada paistab pärinevat Word'ist. Kas soovid seda enne kleepimist puhastada?",
+NotCompatiblePaste : "See käsk on saadaval ainult Internet Explorer versioon 5.5 või uuema puhul. Kas soovid kleepida ilma puhastamata?",
+UnknownToolbarItem : "Tundmatu tööriistarea üksus \"%1\"",
+UnknownCommand : "Tundmatu käsunimi \"%1\"",
+NotImplemented : "Käsku ei täidetud",
+UnknownToolbarSet : "Tööriistariba \"%1\" ei eksisteeri",
+NoActiveX : "Sinu veebisirvija turvalisuse seaded võivad limiteerida mõningaid tekstirdaktori kasutusvõimalusi. Sa peaksid võimaldama valiku \"Run ActiveX controls and plug-ins\" oma veebisirvija seadetes. Muidu võid sa täheldada vigu tekstiredaktori töös ja märgata puuduvaid funktsioone.",
+BrowseServerBlocked : "Ressursside sirvija avamine ebaõnnestus. Võimalda pop-up akende avanemine.",
+DialogBlocked : "Ei olenud võimalik avada dialoogi akent. Võimalda pop-up akende avanemine.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Loobu",
+DlgBtnClose : "Sulge",
+DlgBtnBrowseServer : "Sirvi serverit",
+DlgAdvancedTag : "Täpsemalt",
+DlgOpOther : "<Teine>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Palun sisesta URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<määramata>",
+DlgGenId : "Id",
+DlgGenLangDir : "Keele suund",
+DlgGenLangDirLtr : "Vasakult paremale (LTR)",
+DlgGenLangDirRtl : "Paremalt vasakule (RTL)",
+DlgGenLangCode : "Keele kood",
+DlgGenAccessKey : "Juurdepääsu võti",
+DlgGenName : "Nimi",
+DlgGenTabIndex : "Tab indeks",
+DlgGenLongDescr : "Pikk kirjeldus URL",
+DlgGenClass : "Stiilistiku klassid",
+DlgGenTitle : "Juhendav tiitel",
+DlgGenContType : "Juhendava sisu tüüp",
+DlgGenLinkCharset : "Lingitud ressurssi märgistik",
+DlgGenStyle : "Laad",
+
+// Image Dialog
+DlgImgTitle : "Pildi atribuudid",
+DlgImgInfoTab : "Pildi info",
+DlgImgBtnUpload : "Saada serverissee",
+DlgImgURL : "URL",
+DlgImgUpload : "Lae üles",
+DlgImgAlt : "Alternatiivne tekst",
+DlgImgWidth : "Laius",
+DlgImgHeight : "Kõrgus",
+DlgImgLockRatio : "Lukusta kuvasuhe",
+DlgBtnResetSize : "Lähtesta suurus",
+DlgImgBorder : "Joon",
+DlgImgHSpace : "H. vaheruum",
+DlgImgVSpace : "V. vaheruum",
+DlgImgAlign : "Joondus",
+DlgImgAlignLeft : "Vasak",
+DlgImgAlignAbsBottom: "Abs alla",
+DlgImgAlignAbsMiddle: "Abs keskele",
+DlgImgAlignBaseline : "Baasjoonele",
+DlgImgAlignBottom : "Alla",
+DlgImgAlignMiddle : "Keskele",
+DlgImgAlignRight : "Paremale",
+DlgImgAlignTextTop : "Tekstit üles",
+DlgImgAlignTop : "Ãœles",
+DlgImgPreview : "Eelvaade",
+DlgImgAlertUrl : "Palun kirjuta pildi URL",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Flash omadused",
+DlgFlashChkPlay : "Automaatne start ",
+DlgFlashChkLoop : "Korduv",
+DlgFlashChkMenu : "Võimalda flash menüü",
+DlgFlashScale : "Mastaap",
+DlgFlashScaleAll : "Näita kõike",
+DlgFlashScaleNoBorder : "Äärist ei ole",
+DlgFlashScaleFit : "Täpne sobivus",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Lingi info",
+DlgLnkTargetTab : "Sihtkoht",
+
+DlgLnkType : "Lingi tüüp",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ankur sellel lehel",
+DlgLnkTypeEMail : "E-post",
+DlgLnkProto : "Protokoll",
+DlgLnkProtoOther : "<muu>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Vali ankur",
+DlgLnkAnchorByName : "Ankru nime järgi",
+DlgLnkAnchorById : "Elemendi id järgi",
+DlgLnkNoAnchors : "(Selles dokumendis ei ole ankruid)",
+DlgLnkEMail : "E-posti aadress",
+DlgLnkEMailSubject : "Sõnumi teema",
+DlgLnkEMailBody : "Sõnumi tekst",
+DlgLnkUpload : "Lae üles",
+DlgLnkBtnUpload : "Saada serverisse",
+
+DlgLnkTarget : "Sihtkoht",
+DlgLnkTargetFrame : "<raam>",
+DlgLnkTargetPopup : "<hüpikaken>",
+DlgLnkTargetBlank : "Uus aken (_blank)",
+DlgLnkTargetParent : "Esivanem aken (_parent)",
+DlgLnkTargetSelf : "Sama aken (_self)",
+DlgLnkTargetTop : "Pealmine aken (_top)",
+DlgLnkTargetFrameName : "Sihtmärk raami nimi",
+DlgLnkPopWinName : "Hüpikakna nimi",
+DlgLnkPopWinFeat : "Hüpikakna omadused",
+DlgLnkPopResize : "Suurendatav",
+DlgLnkPopLocation : "Aadressiriba",
+DlgLnkPopMenu : "Menüüriba",
+DlgLnkPopScroll : "Kerimisribad",
+DlgLnkPopStatus : "Olekuriba",
+DlgLnkPopToolbar : "Tööriistariba",
+DlgLnkPopFullScrn : "Täisekraan (IE)",
+DlgLnkPopDependent : "Sõltuv (Netscape)",
+DlgLnkPopWidth : "Laius",
+DlgLnkPopHeight : "Kõrgus",
+DlgLnkPopLeft : "Vasak asukoht",
+DlgLnkPopTop : "Ãœlemine asukoht",
+
+DlnLnkMsgNoUrl : "Palun kirjuta lingi URL",
+DlnLnkMsgNoEMail : "Palun kirjuta E-Posti aadress",
+DlnLnkMsgNoAnchor : "Palun vali ankur",
+DlnLnkMsgInvPopName : "Hüpikakna nimi peab algama alfabeetilise tähega ja ei tohi sisaldada tühikuid",
+
+// Color Dialog
+DlgColorTitle : "Vali värv",
+DlgColorBtnClear : "Tühjenda",
+DlgColorHighlight : "Märgi",
+DlgColorSelected : "Valitud",
+
+// Smiley Dialog
+DlgSmileyTitle : "Sisesta emotikon",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Vali erimärk",
+
+// Table Dialog
+DlgTableTitle : "Tabeli atribuudid",
+DlgTableRows : "Read",
+DlgTableColumns : "Veerud",
+DlgTableBorder : "Joone suurus",
+DlgTableAlign : "Joondus",
+DlgTableAlignNotSet : "<Määramata>",
+DlgTableAlignLeft : "Vasak",
+DlgTableAlignCenter : "Kesk",
+DlgTableAlignRight : "Parem",
+DlgTableWidth : "Laius",
+DlgTableWidthPx : "pikslit",
+DlgTableWidthPc : "protsenti",
+DlgTableHeight : "Kõrgus",
+DlgTableCellSpace : "Lahtri vahe",
+DlgTableCellPad : "Lahtri täidis",
+DlgTableCaption : "Tabeli tiitel",
+DlgTableSummary : "Kokkuvõte",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Lahtri atribuudid",
+DlgCellWidth : "Laius",
+DlgCellWidthPx : "pikslit",
+DlgCellWidthPc : "protsenti",
+DlgCellHeight : "Kõrgus",
+DlgCellWordWrap : "Sõna ülekanne",
+DlgCellWordWrapNotSet : "<Määramata>",
+DlgCellWordWrapYes : "Jah",
+DlgCellWordWrapNo : "Ei",
+DlgCellHorAlign : "Horisontaaljoondus",
+DlgCellHorAlignNotSet : "<Määramata>",
+DlgCellHorAlignLeft : "Vasak",
+DlgCellHorAlignCenter : "Kesk",
+DlgCellHorAlignRight: "Parem",
+DlgCellVerAlign : "Vertikaaljoondus",
+DlgCellVerAlignNotSet : "<Määramata>",
+DlgCellVerAlignTop : "Ãœles",
+DlgCellVerAlignMiddle : "Keskele",
+DlgCellVerAlignBottom : "Alla",
+DlgCellVerAlignBaseline : "Baasjoonele",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Reaulatus",
+DlgCellCollSpan : "Veeruulatus",
+DlgCellBackColor : "Tausta värv",
+DlgCellBorderColor : "Joone värv",
+DlgCellBtnSelect : "Vali...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Otsi ja asenda",
+
+// Find Dialog
+DlgFindTitle : "Otsi",
+DlgFindFindBtn : "Otsi",
+DlgFindNotFoundMsg : "Valitud teksti ei leitud.",
+
+// Replace Dialog
+DlgReplaceTitle : "Asenda",
+DlgReplaceFindLbl : "Leia mida:",
+DlgReplaceReplaceLbl : "Asenda millega:",
+DlgReplaceCaseChk : "Erista suur- ja väiketähti",
+DlgReplaceReplaceBtn : "Asenda",
+DlgReplaceReplAllBtn : "Asenda kõik",
+DlgReplaceWordChk : "Otsi terviklike sõnu",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).",
+PasteErrorCopy : "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).",
+
+PasteAsText : "Kleebi tavalise tekstina",
+PasteFromWord : "Kleebi Wordist",
+
+DlgPasteMsg2 : "Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.",
+DlgPasteSec : "Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.",
+DlgPasteIgnoreFont : "Ignoreeri kirja definitsioone",
+DlgPasteRemoveStyles : "Eemalda stiilide definitsioonid",
+
+// Color Picker
+ColorAutomatic : "Automaatne",
+ColorMoreColors : "Rohkem värve...",
+
+// Document Properties
+DocProps : "Dokumendi omadused",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ankru omadused",
+DlgAnchorName : "Ankru nimi",
+DlgAnchorErrorName : "Palun sisest ankru nimi",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Puudub sõnastikust",
+DlgSpellChangeTo : "Muuda",
+DlgSpellBtnIgnore : "Ignoreeri",
+DlgSpellBtnIgnoreAll : "Ignoreeri kõiki",
+DlgSpellBtnReplace : "Asenda",
+DlgSpellBtnReplaceAll : "Asenda kõik",
+DlgSpellBtnUndo : "Võta tagasi",
+DlgSpellNoSuggestions : "- Soovitused puuduvad -",
+DlgSpellProgress : "Toimub õigekirja kontroll...",
+DlgSpellNoMispell : "Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud",
+DlgSpellNoChanges : "Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud",
+DlgSpellOneChange : "Õigekirja kontroll sooritatud: üks sõna muudeti",
+DlgSpellManyChanges : "Õigekirja kontroll sooritatud: %1 sõna muudetud",
+
+IeSpellDownload : "Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?",
+
+// Button Dialog
+DlgButtonText : "Tekst (väärtus)",
+DlgButtonType : "Tüüp",
+DlgButtonTypeBtn : "Nupp",
+DlgButtonTypeSbm : "Saada",
+DlgButtonTypeRst : "Lähtesta",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nimi",
+DlgCheckboxValue : "Väärtus",
+DlgCheckboxSelected : "Valitud",
+
+// Form Dialog
+DlgFormName : "Nimi",
+DlgFormAction : "Toiming",
+DlgFormMethod : "Meetod",
+
+// Select Field Dialog
+DlgSelectName : "Nimi",
+DlgSelectValue : "Väärtus",
+DlgSelectSize : "Suurus",
+DlgSelectLines : "ridu",
+DlgSelectChkMulti : "Võimalda mitu valikut",
+DlgSelectOpAvail : "Võimalikud valikud",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Väärtus",
+DlgSelectBtnAdd : "Lisa",
+DlgSelectBtnModify : "Muuda",
+DlgSelectBtnUp : "Ãœles",
+DlgSelectBtnDown : "Alla",
+DlgSelectBtnSetValue : "Sea valitud olekuna",
+DlgSelectBtnDelete : "Kustuta",
+
+// Textarea Dialog
+DlgTextareaName : "Nimi",
+DlgTextareaCols : "Veerge",
+DlgTextareaRows : "Ridu",
+
+// Text Field Dialog
+DlgTextName : "Nimi",
+DlgTextValue : "Väärtus",
+DlgTextCharWidth : "Laius (tähemärkides)",
+DlgTextMaxChars : "Maksimaalselt tähemärke",
+DlgTextType : "Tüüp",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Parool",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nimi",
+DlgHiddenValue : "Väärtus",
+
+// Bulleted List Dialog
+BulletedListProp : "Täpitud loetelu omadused",
+NumberedListProp : "Nummerdatud loetelu omadused",
+DlgLstStart : "Alusta",
+DlgLstType : "Tüüp",
+DlgLstTypeCircle : "Ring",
+DlgLstTypeDisc : "Ketas",
+DlgLstTypeSquare : "Ruut",
+DlgLstTypeNumbers : "Numbrid (1, 2, 3)",
+DlgLstTypeLCase : "Väiketähed (a, b, c)",
+DlgLstTypeUCase : "Suurtähed (A, B, C)",
+DlgLstTypeSRoman : "Väiksed Rooma numbrid (i, ii, iii)",
+DlgLstTypeLRoman : "Suured Rooma numbrid (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Ãœldine",
+DlgDocBackTab : "Taust",
+DlgDocColorsTab : "Värvid ja veerised",
+DlgDocMetaTab : "Meta andmed",
+
+DlgDocPageTitle : "Lehekülje tiitel",
+DlgDocLangDir : "Kirja suund",
+DlgDocLangDirLTR : "Vasakult paremale (LTR)",
+DlgDocLangDirRTL : "Paremalt vasakule (RTL)",
+DlgDocLangCode : "Keele kood",
+DlgDocCharSet : "Märgistiku kodeering",
+DlgDocCharSetCE : "Kesk-Euroopa",
+DlgDocCharSetCT : "Hiina traditsiooniline (Big5)",
+DlgDocCharSetCR : "Kirillisa",
+DlgDocCharSetGR : "Kreeka",
+DlgDocCharSetJP : "Jaapani",
+DlgDocCharSetKR : "Korea",
+DlgDocCharSetTR : "Türgi",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Lääne-Euroopa",
+DlgDocCharSetOther : "Ülejäänud märgistike kodeeringud",
+
+DlgDocDocType : "Dokumendi tüüppäis",
+DlgDocDocTypeOther : "Teised dokumendi tüüppäised",
+DlgDocIncXHTML : "Arva kaasa XHTML deklaratsioonid",
+DlgDocBgColor : "Taustavärv",
+DlgDocBgImage : "Taustapildi URL",
+DlgDocBgNoScroll : "Mittekeritav tagataust",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Külastatud link",
+DlgDocCActive : "Aktiivne link",
+DlgDocMargins : "Lehekülje äärised",
+DlgDocMaTop : "Ãœlaserv",
+DlgDocMaLeft : "Vasakserv",
+DlgDocMaRight : "Paremserv",
+DlgDocMaBottom : "Alaserv",
+DlgDocMeIndex : "Dokumendi võtmesõnad (eraldatud komadega)",
+DlgDocMeDescr : "Dokumendi kirjeldus",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Autoriõigus",
+DlgDocPreview : "Eelvaade",
+
+// Templates Dialog
+Templates : "Å abloon",
+DlgTemplatesTitle : "Sisu Å¡abloonid",
+DlgTemplatesSelMsg : "Palun vali šabloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):",
+DlgTemplatesLoading : "Laen Å¡abloonide nimekirja. Palun oota...",
+DlgTemplatesNoTpl : "(Ãœhtegi Å¡ablooni ei ole defineeritud)",
+DlgTemplatesReplace : "Asenda tegelik sisu",
+
+// About Dialog
+DlgAboutAboutTab : "Teave",
+DlgAboutBrowserInfoTab : "Veebisirvija info",
+DlgAboutLicenseTab : "Litsents",
+DlgAboutVersion : "versioon",
+DlgAboutInfo : "Täpsema info saamiseks mine",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eu.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eu.js
new file mode 100644
index 0000000..e335a20
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eu.js
@@ -0,0 +1,535 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Basque language file.
+ * Euskara hizkuntza fitxategia.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Estutu Tresna Barra",
+ToolbarExpand : "Hedatu Tresna Barra",
+
+// Toolbar Items and Context Menu
+Save : "Gorde",
+NewPage : "Orrialde Berria",
+Preview : "Aurrebista",
+Cut : "Ebaki",
+Copy : "Kopiatu",
+Paste : "Itsatsi",
+PasteText : "Itsatsi testu bezala",
+PasteWord : "Itsatsi Word-etik",
+Print : "Inprimatu",
+SelectAll : "Hautatu dena",
+RemoveFormat : "Kendu Formatua",
+InsertLinkLbl : "Esteka",
+InsertLink : "Txertatu/Editatu Esteka",
+RemoveLink : "Kendu Esteka",
+VisitLink : "Ireki Esteka",
+Anchor : "Aingura",
+AnchorDelete : "Ezabatu Aingura",
+InsertImageLbl : "Irudia",
+InsertImage : "Txertatu/Editatu Irudia",
+InsertFlashLbl : "Flasha",
+InsertFlash : "Txertatu/Editatu Flasha",
+InsertTableLbl : "Taula",
+InsertTable : "Txertatu/Editatu Taula",
+InsertLineLbl : "Lerroa",
+InsertLine : "Txertatu Marra Horizontala",
+InsertSpecialCharLbl: "Karaktere Berezia",
+InsertSpecialChar : "Txertatu Karaktere Berezia",
+InsertSmileyLbl : "Aurpegierak",
+InsertSmiley : "Txertatu Aurpegierak",
+About : "FCKeditor-ri buruz",
+Bold : "Lodia",
+Italic : "Etzana",
+Underline : "Azpimarratu",
+StrikeThrough : "Marratua",
+Subscript : "Azpi-indize",
+Superscript : "Goi-indize",
+LeftJustify : "Lerrokatu Ezkerrean",
+CenterJustify : "Lerrokatu Erdian",
+RightJustify : "Lerrokatu Eskuman",
+BlockJustify : "Justifikatu",
+DecreaseIndent : "Txikitu Koska",
+IncreaseIndent : "Handitu Koska",
+Blockquote : "Aipamen blokea",
+CreateDiv : "Sortu Div Edukitzailea",
+EditDiv : "Editatu Div Edukitzailea",
+DeleteDiv : "Ezabatu Div Edukitzailea",
+Undo : "Desegin",
+Redo : "Berregin",
+NumberedListLbl : "Zenbakidun Zerrenda",
+NumberedList : "Txertatu/Kendu Zenbakidun zerrenda",
+BulletedListLbl : "Buletdun Zerrenda",
+BulletedList : "Txertatu/Kendu Buletdun zerrenda",
+ShowTableBorders : "Erakutsi Taularen Ertzak",
+ShowDetails : "Erakutsi Xehetasunak",
+Style : "Estiloa",
+FontFormat : "Formatua",
+Font : "Letra-tipoa",
+FontSize : "Tamaina",
+TextColor : "Testu Kolorea",
+BGColor : "Atzeko kolorea",
+Source : "HTML Iturburua",
+Find : "Bilatu",
+Replace : "Ordezkatu",
+SpellCheck : "Ortografia",
+UniversalKeyboard : "Teklatu Unibertsala",
+PageBreakLbl : "Orrialde-jauzia",
+PageBreak : "Txertatu Orrialde-jauzia",
+
+Form : "Formularioa",
+Checkbox : "Kontrol-laukia",
+RadioButton : "Aukera-botoia",
+TextField : "Testu Eremua",
+Textarea : "Testu-area",
+HiddenField : "Ezkutuko Eremua",
+Button : "Botoia",
+SelectionField : "Hautespen Eremua",
+ImageButton : "Irudi Botoia",
+
+FitWindow : "Maximizatu editorearen tamaina",
+ShowBlocks : "Blokeak erakutsi",
+
+// Context Menu
+EditLink : "Aldatu Esteka",
+CellCM : "Gelaxka",
+RowCM : "Errenkada",
+ColumnCM : "Zutabea",
+InsertRowAfter : "Txertatu Lerroa Ostean",
+InsertRowBefore : "Txertatu Lerroa Aurretik",
+DeleteRows : "Ezabatu Errenkadak",
+InsertColumnAfter : "Txertatu Zutabea Ostean",
+InsertColumnBefore : "Txertatu Zutabea Aurretik",
+DeleteColumns : "Ezabatu Zutabeak",
+InsertCellAfter : "Txertatu Gelaxka Ostean",
+InsertCellBefore : "Txertatu Gelaxka Aurretik",
+DeleteCells : "Kendu Gelaxkak",
+MergeCells : "Batu Gelaxkak",
+MergeRight : "Elkartu Eskumara",
+MergeDown : "Elkartu Behera",
+HorizontalSplitCell : "Banatu Gelaxkak Horizontalki",
+VerticalSplitCell : "Banatu Gelaxkak Bertikalki",
+TableDelete : "Ezabatu Taula",
+CellProperties : "Gelaxkaren Ezaugarriak",
+TableProperties : "Taularen Ezaugarriak",
+ImageProperties : "Irudiaren Ezaugarriak",
+FlashProperties : "Flasharen Ezaugarriak",
+
+AnchorProp : "Ainguraren Ezaugarriak",
+ButtonProp : "Botoiaren Ezaugarriak",
+CheckboxProp : "Kontrol-laukiko Ezaugarriak",
+HiddenFieldProp : "Ezkutuko Eremuaren Ezaugarriak",
+RadioButtonProp : "Aukera-botoiaren Ezaugarriak",
+ImageButtonProp : "Irudi Botoiaren Ezaugarriak",
+TextFieldProp : "Testu Eremuaren Ezaugarriak",
+SelectionFieldProp : "Hautespen Eremuaren Ezaugarriak",
+TextareaProp : "Testu-arearen Ezaugarriak",
+FormProp : "Formularioaren Ezaugarriak",
+
+FontFormats : "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML Prozesatzen. Itxaron mesedez...",
+Done : "Eginda",
+PasteWordConfirm : "Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?",
+NotCompatiblePaste : "Komando hau Internet Explorer 5.5 bertsiorako edo ondorengoentzako erabilgarria dago. Garbitu gabe itsatsi nahi duzu?",
+UnknownToolbarItem : "Ataza barrako elementu ezezaguna \"%1\"",
+UnknownCommand : "Komando izen ezezaguna \"%1\"",
+NotImplemented : "Komando ez inplementatua",
+UnknownToolbarSet : "Ataza barra \"%1\" taldea ez da existitzen",
+NoActiveX : "Zure nabigatzailearen segurtasun hobespenak editore honen zenbait ezaugarri mugatu ditzake. \"ActiveX kontrolak eta pluginak\" aktibatu beharko zenituzke, bestela erroreak eta ezaugarrietan mugak egon daitezke.",
+BrowseServerBlocked : "Baliabideen arakatzailea ezin da ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.",
+DialogBlocked : "Ezin da elkarrizketa-leihoa ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.",
+VisitLinkBlocked : "Ezin da leiho berri bat ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.",
+
+// Dialogs
+DlgBtnOK : "Ados",
+DlgBtnCancel : "Utzi",
+DlgBtnClose : "Itxi",
+DlgBtnBrowseServer : "Zerbitzaria arakatu",
+DlgAdvancedTag : "Aurreratua",
+DlgOpOther : "<Bestelakoak>",
+DlgInfoTab : "Informazioa",
+DlgAlertUrl : "Mesedez URLa idatzi ezazu",
+
+// General Dialogs Labels
+DlgGenNotSet : "<Ezarri gabe>",
+DlgGenId : "Id",
+DlgGenLangDir : "Hizkuntzaren Norabidea",
+DlgGenLangDirLtr : "Ezkerretik Eskumara(LTR)",
+DlgGenLangDirRtl : "Eskumatik Ezkerrera (RTL)",
+DlgGenLangCode : "Hizkuntza Kodea",
+DlgGenAccessKey : "Sarbide-gakoa",
+DlgGenName : "Izena",
+DlgGenTabIndex : "Tabulazio Indizea",
+DlgGenLongDescr : "URL Deskribapen Luzea",
+DlgGenClass : "Estilo-orriko Klaseak",
+DlgGenTitle : "Izenburua",
+DlgGenContType : "Eduki Mota (Content Type)",
+DlgGenLinkCharset : "Estekatutako Karaktere Multzoa",
+DlgGenStyle : "Estiloa",
+
+// Image Dialog
+DlgImgTitle : "Irudi Ezaugarriak",
+DlgImgInfoTab : "Irudi informazioa",
+DlgImgBtnUpload : "Zerbitzarira bidalia",
+DlgImgURL : "URL",
+DlgImgUpload : "Gora Kargatu",
+DlgImgAlt : "Ordezko Testua",
+DlgImgWidth : "Zabalera",
+DlgImgHeight : "Altuera",
+DlgImgLockRatio : "Erlazioa Blokeatu",
+DlgBtnResetSize : "Tamaina Berrezarri",
+DlgImgBorder : "Ertza",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Lerrokatu",
+DlgImgAlignLeft : "Ezkerrera",
+DlgImgAlignAbsBottom: "Abs Behean",
+DlgImgAlignAbsMiddle: "Abs Erdian",
+DlgImgAlignBaseline : "Oinan",
+DlgImgAlignBottom : "Behean",
+DlgImgAlignMiddle : "Erdian",
+DlgImgAlignRight : "Eskuman",
+DlgImgAlignTextTop : "Testua Goian",
+DlgImgAlignTop : "Goian",
+DlgImgPreview : "Aurrebista",
+DlgImgAlertUrl : "Mesedez Irudiaren URLa idatzi",
+DlgImgLinkTab : "Esteka",
+
+// Flash Dialog
+DlgFlashTitle : "Flasharen Ezaugarriak",
+DlgFlashChkPlay : "Automatikoki Erreproduzitu",
+DlgFlashChkLoop : "Begizta",
+DlgFlashChkMenu : "Flasharen Menua Gaitu",
+DlgFlashScale : "Eskalatu",
+DlgFlashScaleAll : "Dena erakutsi",
+DlgFlashScaleNoBorder : "Ertzik gabe",
+DlgFlashScaleFit : "Doitu",
+
+// Link Dialog
+DlgLnkWindowTitle : "Esteka",
+DlgLnkInfoTab : "Estekaren Informazioa",
+DlgLnkTargetTab : "Helburua",
+
+DlgLnkType : "Esteka Mota",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Aingura orrialde honetan",
+DlgLnkTypeEMail : "ePosta",
+DlgLnkProto : "Protokoloa",
+DlgLnkProtoOther : "<Beste batzuk>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Aingura bat hautatu",
+DlgLnkAnchorByName : "Aingura izenagatik",
+DlgLnkAnchorById : "Elementuaren ID-gatik",
+DlgLnkNoAnchors : "(Ez daude aingurak eskuragarri dokumentuan)",
+DlgLnkEMail : "ePosta Helbidea",
+DlgLnkEMailSubject : "Mezuaren Gaia",
+DlgLnkEMailBody : "Mezuaren Gorputza",
+DlgLnkUpload : "Gora kargatu",
+DlgLnkBtnUpload : "Zerbitzarira bidali",
+
+DlgLnkTarget : "Target (Helburua)",
+DlgLnkTargetFrame : "<marko>",
+DlgLnkTargetPopup : "<popup leihoa>",
+DlgLnkTargetBlank : "Leiho Berria (_blank)",
+DlgLnkTargetParent : "Leiho Gurasoa (_parent)",
+DlgLnkTargetSelf : "Leiho Berdina (_self)",
+DlgLnkTargetTop : "Goiko Leihoa (_top)",
+DlgLnkTargetFrameName : "Marko Helburuaren Izena",
+DlgLnkPopWinName : "Popup Leihoaren Izena",
+DlgLnkPopWinFeat : "Popup Leihoaren Ezaugarriak",
+DlgLnkPopResize : "Tamaina Aldakorra",
+DlgLnkPopLocation : "Kokaleku Barra",
+DlgLnkPopMenu : "Menu Barra",
+DlgLnkPopScroll : "Korritze Barrak",
+DlgLnkPopStatus : "Egoera Barra",
+DlgLnkPopToolbar : "Tresna Barra",
+DlgLnkPopFullScrn : "Pantaila Osoa (IE)",
+DlgLnkPopDependent : "Menpekoa (Netscape)",
+DlgLnkPopWidth : "Zabalera",
+DlgLnkPopHeight : "Altuera",
+DlgLnkPopLeft : "Ezkerreko Posizioa",
+DlgLnkPopTop : "Goiko Posizioa",
+
+DlnLnkMsgNoUrl : "Mesedez URL esteka idatzi",
+DlnLnkMsgNoEMail : "Mesedez ePosta helbidea idatzi",
+DlnLnkMsgNoAnchor : "Mesedez aingura bat aukeratu",
+DlnLnkMsgInvPopName : "Popup leihoaren izenak karaktere alfabetiko batekin hasi behar du eta eta ezin du zuriunerik izan",
+
+// Color Dialog
+DlgColorTitle : "Kolore Aukeraketa",
+DlgColorBtnClear : "Garbitu",
+DlgColorHighlight : "Nabarmendu",
+DlgColorSelected : "Aukeratuta",
+
+// Smiley Dialog
+DlgSmileyTitle : "Aurpegiera Sartu",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Karaktere Berezia Aukeratu",
+
+// Table Dialog
+DlgTableTitle : "Taularen Ezaugarriak",
+DlgTableRows : "Lerroak",
+DlgTableColumns : "Zutabeak",
+DlgTableBorder : "Ertzaren Zabalera",
+DlgTableAlign : "Lerrokatu",
+DlgTableAlignNotSet : "<Ezarri gabe>",
+DlgTableAlignLeft : "Ezkerrean",
+DlgTableAlignCenter : "Erdian",
+DlgTableAlignRight : "Eskuman",
+DlgTableWidth : "Zabalera",
+DlgTableWidthPx : "pixel",
+DlgTableWidthPc : "ehuneko",
+DlgTableHeight : "Altuera",
+DlgTableCellSpace : "Gelaxka arteko tartea",
+DlgTableCellPad : "Gelaxken betegarria",
+DlgTableCaption : "Epigrafea",
+DlgTableSummary : "Laburpena",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Gelaxken Ezaugarriak",
+DlgCellWidth : "Zabalera",
+DlgCellWidthPx : "pixel",
+DlgCellWidthPc : "ehuneko",
+DlgCellHeight : "Altuera",
+DlgCellWordWrap : "Itzulbira",
+DlgCellWordWrapNotSet : "<Ezarri gabe>",
+DlgCellWordWrapYes : "Bai",
+DlgCellWordWrapNo : "Ez",
+DlgCellHorAlign : "Lerrokatu Horizontalki",
+DlgCellHorAlignNotSet : "<Ezarri gabe>",
+DlgCellHorAlignLeft : "Ezkerrean",
+DlgCellHorAlignCenter : "Erdian",
+DlgCellHorAlignRight: "Eskuman",
+DlgCellVerAlign : "Lerrokatu Bertikalki",
+DlgCellVerAlignNotSet : "<Ezarri gabe>",
+DlgCellVerAlignTop : "Goian",
+DlgCellVerAlignMiddle : "Erdian",
+DlgCellVerAlignBottom : "Behean",
+DlgCellVerAlignBaseline : "Oinean",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Lerroak Hedatu",
+DlgCellCollSpan : "Zutabeak Hedatu",
+DlgCellBackColor : "Atzeko Kolorea",
+DlgCellBorderColor : "Ertzako Kolorea",
+DlgCellBtnSelect : "Aukeratu...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Bilatu eta Ordeztu",
+
+// Find Dialog
+DlgFindTitle : "Bilaketa",
+DlgFindFindBtn : "Bilatu",
+DlgFindNotFoundMsg : "Idatzitako testua ez da topatu.",
+
+// Replace Dialog
+DlgReplaceTitle : "Ordeztu",
+DlgReplaceFindLbl : "Zer bilatu:",
+DlgReplaceReplaceLbl : "Zerekin ordeztu:",
+DlgReplaceCaseChk : "Maiuskula/minuskula",
+DlgReplaceReplaceBtn : "Ordeztu",
+DlgReplaceReplAllBtn : "Ordeztu Guztiak",
+DlgReplaceWordChk : "Esaldi osoa bilatu",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).",
+PasteErrorCopy : "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).",
+
+PasteAsText : "Testu Arrunta bezala Itsatsi",
+PasteFromWord : "Word-etik itsatsi",
+
+DlgPasteMsg2 : "Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.",
+DlgPasteSec : "Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.",
+DlgPasteIgnoreFont : "Letra Motaren definizioa ezikusi",
+DlgPasteRemoveStyles : "Estilo definizioak kendu",
+
+// Color Picker
+ColorAutomatic : "Automatikoa",
+ColorMoreColors : "Kolore gehiago...",
+
+// Document Properties
+DocProps : "Dokumentuaren Ezarpenak",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ainguraren Ezaugarriak",
+DlgAnchorName : "Ainguraren Izena",
+DlgAnchorErrorName : "Idatzi ainguraren izena",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ez dago hiztegian",
+DlgSpellChangeTo : "Honekin ordezkatu",
+DlgSpellBtnIgnore : "Ezikusi",
+DlgSpellBtnIgnoreAll : "Denak Ezikusi",
+DlgSpellBtnReplace : "Ordezkatu",
+DlgSpellBtnReplaceAll : "Denak Ordezkatu",
+DlgSpellBtnUndo : "Desegin",
+DlgSpellNoSuggestions : "- Iradokizunik ez -",
+DlgSpellProgress : "Zuzenketa ortografikoa martxan...",
+DlgSpellNoMispell : "Zuzenketa ortografikoa bukatuta: Akatsik ez",
+DlgSpellNoChanges : "Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu",
+DlgSpellOneChange : "Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da",
+DlgSpellManyChanges : "Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira",
+
+IeSpellDownload : "Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?",
+
+// Button Dialog
+DlgButtonText : "Testua (Balorea)",
+DlgButtonType : "Mota",
+DlgButtonTypeBtn : "Botoia",
+DlgButtonTypeSbm : "Bidali",
+DlgButtonTypeRst : "Garbitu",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Izena",
+DlgCheckboxValue : "Balorea",
+DlgCheckboxSelected : "Hautatuta",
+
+// Form Dialog
+DlgFormName : "Izena",
+DlgFormAction : "Ekintza",
+DlgFormMethod : "Metodoa",
+
+// Select Field Dialog
+DlgSelectName : "Izena",
+DlgSelectValue : "Balorea",
+DlgSelectSize : "Tamaina",
+DlgSelectLines : "lerro kopurura",
+DlgSelectChkMulti : "Hautaketa anitzak baimendu",
+DlgSelectOpAvail : "Aukera Eskuragarriak",
+DlgSelectOpText : "Testua",
+DlgSelectOpValue : "Balorea",
+DlgSelectBtnAdd : "Gehitu",
+DlgSelectBtnModify : "Aldatu",
+DlgSelectBtnUp : "Gora",
+DlgSelectBtnDown : "Behera",
+DlgSelectBtnSetValue : "Aukeratutako balorea ezarri",
+DlgSelectBtnDelete : "Ezabatu",
+
+// Textarea Dialog
+DlgTextareaName : "Izena",
+DlgTextareaCols : "Zutabeak",
+DlgTextareaRows : "Lerroak",
+
+// Text Field Dialog
+DlgTextName : "Izena",
+DlgTextValue : "Balorea",
+DlgTextCharWidth : "Zabalera",
+DlgTextMaxChars : "Zenbat karaktere gehienez",
+DlgTextType : "Mota",
+DlgTextTypeText : "Testua",
+DlgTextTypePass : "Pasahitza",
+
+// Hidden Field Dialog
+DlgHiddenName : "Izena",
+DlgHiddenValue : "Balorea",
+
+// Bulleted List Dialog
+BulletedListProp : "Buletdun Zerrendaren Ezarpenak",
+NumberedListProp : "Zenbakidun Zerrendaren Ezarpenak",
+DlgLstStart : "Hasiera",
+DlgLstType : "Mota",
+DlgLstTypeCircle : "Zirkulua",
+DlgLstTypeDisc : "Diskoa",
+DlgLstTypeSquare : "Karratua",
+DlgLstTypeNumbers : "Zenbakiak (1, 2, 3)",
+DlgLstTypeLCase : "Letra xeheak (a, b, c)",
+DlgLstTypeUCase : "Letra larriak (A, B, C)",
+DlgLstTypeSRoman : "Erromatar zenbaki zeheak (i, ii, iii)",
+DlgLstTypeLRoman : "Erromatar zenbaki larriak (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Orokorra",
+DlgDocBackTab : "Atzealdea",
+DlgDocColorsTab : "Koloreak eta Marjinak",
+DlgDocMetaTab : "Meta Informazioa",
+
+DlgDocPageTitle : "Orriaren Izenburua",
+DlgDocLangDir : "Hizkuntzaren Norabidea",
+DlgDocLangDirLTR : "Ezkerretik eskumara (LTR)",
+DlgDocLangDirRTL : "Eskumatik ezkerrera (RTL)",
+DlgDocLangCode : "Hizkuntzaren Kodea",
+DlgDocCharSet : "Karaktere Multzoaren Kodeketa",
+DlgDocCharSetCE : "Erdialdeko Europakoa",
+DlgDocCharSetCT : "Txinatar Tradizionala (Big5)",
+DlgDocCharSetCR : "Zirilikoa",
+DlgDocCharSetGR : "Grekoa",
+DlgDocCharSetJP : "Japoniarra",
+DlgDocCharSetKR : "Korearra",
+DlgDocCharSetTR : "Turkiarra",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Mendebaldeko Europakoa",
+DlgDocCharSetOther : "Beste Karaktere Multzoko Kodeketa",
+
+DlgDocDocType : "Document Type Goiburua",
+DlgDocDocTypeOther : "Beste Document Type Goiburua",
+DlgDocIncXHTML : "XHTML Ezarpenak",
+DlgDocBgColor : "Atzeko Kolorea",
+DlgDocBgImage : "Atzeko Irudiaren URL-a",
+DlgDocBgNoScroll : "Korritze gabeko Atzealdea",
+DlgDocCText : "Testua",
+DlgDocCLink : "Estekak",
+DlgDocCVisited : "Bisitatutako Estekak",
+DlgDocCActive : "Esteka Aktiboa",
+DlgDocMargins : "Orrialdearen marjinak",
+DlgDocMaTop : "Goian",
+DlgDocMaLeft : "Ezkerrean",
+DlgDocMaRight : "Eskuman",
+DlgDocMaBottom : "Behean",
+DlgDocMeIndex : "Dokumentuaren Gako-hitzak (komarekin bananduta)",
+DlgDocMeDescr : "Dokumentuaren Deskribapena",
+DlgDocMeAuthor : "Egilea",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Aurrebista",
+
+// Templates Dialog
+Templates : "Txantiloiak",
+DlgTemplatesTitle : "Eduki Txantiloiak",
+DlgTemplatesSelMsg : "Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):",
+DlgTemplatesLoading : "Txantiloiak kargatzen. Itxaron mesedez...",
+DlgTemplatesNoTpl : "(Ez dago definitutako txantiloirik)",
+DlgTemplatesReplace : "Ordeztu oraingo edukiak",
+
+// About Dialog
+DlgAboutAboutTab : "Honi buruz",
+DlgAboutBrowserInfoTab : "Nabigatzailearen Informazioa",
+DlgAboutLicenseTab : "Lizentzia",
+DlgAboutVersion : "bertsioa",
+DlgAboutInfo : "Informazio gehiago eskuratzeko hona joan",
+
+// Div Dialog
+DlgDivGeneralTab : "Orokorra",
+DlgDivAdvancedTab : "Aurreratua",
+DlgDivStyle : "Estiloa",
+DlgDivInlineStyle : "Inline Estiloa"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fa.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fa.js
new file mode 100644
index 0000000..d529f25
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fa.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Persian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "rtl",
+
+ToolbarCollapse : "برچیدن نوارابزار",
+ToolbarExpand : "گستردن نوارابزار",
+
+// Toolbar Items and Context Menu
+Save : "ذخیره",
+NewPage : "برگهٴ تازه",
+Preview : "پیش‌نمایش",
+Cut : "برش",
+Copy : "کپی",
+Paste : "چسباندن",
+PasteText : "چسباندن به عنوان متن Ùساده",
+PasteWord : "چسباندن از Word",
+Print : "چاپ",
+SelectAll : "گزینش همه",
+RemoveFormat : "برداشتن Ùرمت",
+InsertLinkLbl : "پیوند",
+InsertLink : "گنجاندن/ویرایش Ùپیوند",
+RemoveLink : "برداشتن پیوند",
+VisitLink : "باز کردن پیوند",
+Anchor : "گنجاندن/ویرایش Ùلنگر",
+AnchorDelete : "برداشتن لنگر",
+InsertImageLbl : "تصویر",
+InsertImage : "گنجاندن/ویرایش Ùتصویر",
+InsertFlashLbl : "Flash",
+InsertFlash : "گنجاندن/ویرایش ÙFlash",
+InsertTableLbl : "جدول",
+InsertTable : "گنجاندن/ویرایش Ùجدول",
+InsertLineLbl : "خط",
+InsertLine : "گنجاندن خط ÙاÙÙ‚ÛŒ",
+InsertSpecialCharLbl: "نویسهٴ ویژه",
+InsertSpecialChar : "گنجاندن نویسهٴ ویژه",
+InsertSmileyLbl : "خندانک",
+InsertSmiley : "گنجاندن خندانک",
+About : "دربارهٴ FCKeditor",
+Bold : "درشت",
+Italic : "خمیده",
+Underline : "خط‌زیردار",
+StrikeThrough : "میان‌خط",
+Subscript : "زیرنویس",
+Superscript : "بالانویس",
+LeftJustify : "چپ‌چین",
+CenterJustify : "میان‌چین",
+RightJustify : "راست‌چین",
+BlockJustify : "بلوک‌چین",
+DecreaseIndent : "کاهش تورÙتگی",
+IncreaseIndent : "اÙزایش تورÙتگی",
+Blockquote : "بلوک نقل قول",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "واچیدن",
+Redo : "بازچیدن",
+NumberedListLbl : "Ùهرست شماره‌دار",
+NumberedList : "گنجاندن/برداشتن Ùهرست شماره‌دار",
+BulletedListLbl : "Ùهرست نقطه‌ای",
+BulletedList : "گنجاندن/برداشتن Ùهرست نقطه‌ای",
+ShowTableBorders : "نمایش لبهٴ جدول",
+ShowDetails : "نمایش جزئیات",
+Style : "سبک",
+FontFormat : "Ùرمت",
+Font : "قلم",
+FontSize : "اندازه",
+TextColor : "رنگ متن",
+BGColor : "رنگ پس‌زمینه",
+Source : "منبع",
+Find : "جستجو",
+Replace : "جایگزینی",
+SpellCheck : "بررسی املا",
+UniversalKeyboard : "صÙحه‌کلید جهانی",
+PageBreakLbl : "شکستگی Ùپایان Ùبرگه",
+PageBreak : "گنجاندن شکستگی Ùپایان Ùبرگه",
+
+Form : "Ùرم",
+Checkbox : "خانهٴ گزینه‌ای",
+RadioButton : "دکمهٴ رادیویی",
+TextField : "Ùیلد متنی",
+Textarea : "ناحیهٴ متنی",
+HiddenField : "Ùیلد پنهان",
+Button : "دکمه",
+SelectionField : "Ùیلد چندگزینه‌ای",
+ImageButton : "دکمهٴ تصویری",
+
+FitWindow : "بیشینه‌سازی Ùاندازهٴ ویرایشگر",
+ShowBlocks : "نمایش بلوک‌ها",
+
+// Context Menu
+EditLink : "ویرایش پیوند",
+CellCM : "سلول",
+RowCM : "سطر",
+ColumnCM : "ستون",
+InsertRowAfter : "اÙزودن سطر بعد از",
+InsertRowBefore : "اÙزودن سطر قبل از",
+DeleteRows : "حذ٠سطرها",
+InsertColumnAfter : "اÙزودن ستون بعد از",
+InsertColumnBefore : "اÙزودن ستون قبل از",
+DeleteColumns : "حذ٠ستونها",
+InsertCellAfter : "اÙزودن سلول بعد از",
+InsertCellBefore : "اÙزودن سلول قبل از",
+DeleteCells : "حذ٠سلولها",
+MergeCells : "ادغام سلولها",
+MergeRight : "ادغام به راست",
+MergeDown : "ادغام به پایین",
+HorizontalSplitCell : "جدا کردن اÙÙ‚ÛŒ سلول",
+VerticalSplitCell : "جدا کردن عمودی سلول",
+TableDelete : "پاک‌کردن جدول",
+CellProperties : "ویژگیهای سلول",
+TableProperties : "ویژگیهای جدول",
+ImageProperties : "ویژگیهای تصویر",
+FlashProperties : "ویژگیهای Flash",
+
+AnchorProp : "ویژگیهای لنگر",
+ButtonProp : "ویژگیهای دکمه",
+CheckboxProp : "ویژگیهای خانهٴ گزینه‌ای",
+HiddenFieldProp : "ویژگیهای Ùیلد پنهان",
+RadioButtonProp : "ویژگیهای دکمهٴ رادیویی",
+ImageButtonProp : "ویژگیهای دکمهٴ تصویری",
+TextFieldProp : "ویژگیهای Ùیلد متنی",
+SelectionFieldProp : "ویژگیهای Ùیلد چندگزینه‌ای",
+TextareaProp : "ویژگیهای ناحیهٴ متنی",
+FormProp : "ویژگیهای Ùرم",
+
+FontFormats : "نرمال;Ùرمت‌شده;آدرس;سرنویس 1;سرنویس 2;سرنویس 3;سرنویس 4;سرنویس 5;سرنویس 6;بند;(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "پردازش XHTML. لطÙا صبر کنید...",
+Done : "انجام شد",
+PasteWordConfirm : "متنی که می‌خواهید بچسبانید به نظر می‌رسد از Word کپی شده است. آیا می‌خواهید قبل از چسباندن آن را پاک‌سازی کنید؟",
+NotCompatiblePaste : "این Ùرمان برای مرورگر Internet Explorer از نگارش 5.5 یا بالاتر در دسترس است. آیا می‌خواهید بدون پاک‌سازی، متن را بچسبانید؟",
+UnknownToolbarItem : "Ùقرهٴ نوارابزار ناشناخته \"%1\"",
+UnknownCommand : "نام دستور ناشناخته \"%1\"",
+NotImplemented : "دستور پیاده‌سازی‌نشده",
+UnknownToolbarSet : "مجموعهٴ نوارابزار \"%1\" وجود ندارد",
+NoActiveX : "تنظیمات امنیتی مرورگر شما ممکن است در بعضی از ویژگیهای مرورگر محدودیت ایجاد کند. شما باید گزینهٴ \"Run ActiveX controls and plug-ins\" را Ùعال کنید. ممکن است شما با خطاهایی روبرو باشید Ùˆ متوجه کمبود ویژگیهایی شوید.",
+BrowseServerBlocked : "توانایی بازگشایی مرورگر منابع Ùراهم نیست. اطمینان حاصل کنید Ú©Ù‡ تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.",
+DialogBlocked : "توانایی بازگشایی پنجرهٴ Ú©ÙˆÚ†Ú© ÙÚ¯Ùتگو Ùراهم نیست. اطمینان حاصل کنید Ú©Ù‡ تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.",
+VisitLinkBlocked : "امکان بازکردن یک پنجره جدید نیست. اطمینان حاصل کنید که تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.",
+
+// Dialogs
+DlgBtnOK : "پذیرش",
+DlgBtnCancel : "انصراÙ",
+DlgBtnClose : "بستن",
+DlgBtnBrowseServer : "Ùهرست‌نمایی سرور",
+DlgAdvancedTag : "پیشرÙته",
+DlgOpOther : "<غیره>",
+DlgInfoTab : "اطلاعات",
+DlgAlertUrl : "لطÙاً URL را بنویسید",
+
+// General Dialogs Labels
+DlgGenNotSet : "<تعین‌نشده>",
+DlgGenId : "شناسه",
+DlgGenLangDir : "جهت‌نمای زبان",
+DlgGenLangDirLtr : "چپ به راست (LTR)",
+DlgGenLangDirRtl : "راست به چپ (RTL)",
+DlgGenLangCode : "کد زبان",
+DlgGenAccessKey : "کلید دستیابی",
+DlgGenName : "نام",
+DlgGenTabIndex : "نمایهٴ دسترسی با Tab",
+DlgGenLongDescr : "URL توصی٠طولانی",
+DlgGenClass : "کلاسهای شیوه‌نامه(Stylesheet)",
+DlgGenTitle : "عنوان کمکی",
+DlgGenContType : "نوع محتوای کمکی",
+DlgGenLinkCharset : "نویسه‌گان منبع Ùپیوندشده",
+DlgGenStyle : "شیوه(style)",
+
+// Image Dialog
+DlgImgTitle : "ویژگیهای تصویر",
+DlgImgInfoTab : "اطلاعات تصویر",
+DlgImgBtnUpload : "به سرور بÙرست",
+DlgImgURL : "URL",
+DlgImgUpload : "انتقال به سرور",
+DlgImgAlt : "متن جایگزین",
+DlgImgWidth : "پهنا",
+DlgImgHeight : "درازا",
+DlgImgLockRatio : "Ù‚Ùل‌کردن Ùنسبت",
+DlgBtnResetSize : "بازنشانی اندازه",
+DlgImgBorder : "لبه",
+DlgImgHSpace : "Ùاصلهٴ اÙÙ‚ÛŒ",
+DlgImgVSpace : "Ùاصلهٴ عمودی",
+DlgImgAlign : "چینش",
+DlgImgAlignLeft : "Ú†Ù¾",
+DlgImgAlignAbsBottom: "پائین مطلق",
+DlgImgAlignAbsMiddle: "وسط مطلق",
+DlgImgAlignBaseline : "خط‌پایه",
+DlgImgAlignBottom : "پائین",
+DlgImgAlignMiddle : "وسط",
+DlgImgAlignRight : "راست",
+DlgImgAlignTextTop : "متن بالا",
+DlgImgAlignTop : "بالا",
+DlgImgPreview : "پیش‌نمایش",
+DlgImgAlertUrl : "لطÙا URL تصویر را بنویسید",
+DlgImgLinkTab : "پیوند",
+
+// Flash Dialog
+DlgFlashTitle : "ویژگیهای Flash",
+DlgFlashChkPlay : "آغاز Ùخودکار",
+DlgFlashChkLoop : "اجرای پیاپی",
+DlgFlashChkMenu : "دردسترس‌بودن منوی Flash",
+DlgFlashScale : "مقیاس",
+DlgFlashScaleAll : "نمایش همه",
+DlgFlashScaleNoBorder : "بدون کران",
+DlgFlashScaleFit : "جایگیری کامل",
+
+// Link Dialog
+DlgLnkWindowTitle : "پیوند",
+DlgLnkInfoTab : "اطلاعات پیوند",
+DlgLnkTargetTab : "مقصد",
+
+DlgLnkType : "نوع پیوند",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "لنگر در همین صÙحه",
+DlgLnkTypeEMail : "پست الکترونیکی",
+DlgLnkProto : "پروتکل",
+DlgLnkProtoOther : "<دیگر>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "یک لنگر برگزینید",
+DlgLnkAnchorByName : "با نام لنگر",
+DlgLnkAnchorById : "با شناسهٴ المان",
+DlgLnkNoAnchors : "(در این سند لنگری دردسترس نیست)",
+DlgLnkEMail : "نشانی پست الکترونیکی",
+DlgLnkEMailSubject : "موضوع پیام",
+DlgLnkEMailBody : "متن پیام",
+DlgLnkUpload : "انتقال به سرور",
+DlgLnkBtnUpload : "به سرور بÙرست",
+
+DlgLnkTarget : "مقصد",
+DlgLnkTargetFrame : "<Ùریم>",
+DlgLnkTargetPopup : "<پنجرهٴ پاپاپ>",
+DlgLnkTargetBlank : "پنجرهٴ دیگر (_blank)",
+DlgLnkTargetParent : "پنجرهٴ والد (_parent)",
+DlgLnkTargetSelf : "همان پنجره (_self)",
+DlgLnkTargetTop : "بالاترین پنجره (_top)",
+DlgLnkTargetFrameName : "نام Ùریم مقصد",
+DlgLnkPopWinName : "نام پنجرهٴ پاپاپ",
+DlgLnkPopWinFeat : "ویژگیهای پنجرهٴ پاپاپ",
+DlgLnkPopResize : "قابل تغییر اندازه",
+DlgLnkPopLocation : "نوار موقعیت",
+DlgLnkPopMenu : "نوار منو",
+DlgLnkPopScroll : "میله‌های پیمایش",
+DlgLnkPopStatus : "نوار وضعیت",
+DlgLnkPopToolbar : "نوارابزار",
+DlgLnkPopFullScrn : "تمام‌صÙحه (IE)",
+DlgLnkPopDependent : "وابسته (Netscape)",
+DlgLnkPopWidth : "پهنا",
+DlgLnkPopHeight : "درازا",
+DlgLnkPopLeft : "موقعیت ÙÚ†Ù¾",
+DlgLnkPopTop : "موقعیت Ùبالا",
+
+DlnLnkMsgNoUrl : "لطÙا URL پیوند را بنویسید",
+DlnLnkMsgNoEMail : "لطÙا نشانی پست الکترونیکی را بنویسید",
+DlnLnkMsgNoAnchor : "لطÙا لنگری را برگزینید",
+DlnLnkMsgInvPopName : "نام پنجرهٴ پاپاپ باید با یک نویسهٴ الÙبایی آغاز گردد Ùˆ نباید Ùاصله‌های خالی در آن باشند",
+
+// Color Dialog
+DlgColorTitle : "گزینش رنگ",
+DlgColorBtnClear : "پاک‌کردن",
+DlgColorHighlight : "نمونه",
+DlgColorSelected : "برگزیده",
+
+// Smiley Dialog
+DlgSmileyTitle : "گنجاندن خندانک",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "گزینش نویسهٴ‌ویژه",
+
+// Table Dialog
+DlgTableTitle : "ویژگیهای جدول",
+DlgTableRows : "سطرها",
+DlgTableColumns : "ستونها",
+DlgTableBorder : "اندازهٴ لبه",
+DlgTableAlign : "چینش",
+DlgTableAlignNotSet : "<تعین‌نشده>",
+DlgTableAlignLeft : "Ú†Ù¾",
+DlgTableAlignCenter : "وسط",
+DlgTableAlignRight : "راست",
+DlgTableWidth : "پهنا",
+DlgTableWidthPx : "پیکسل",
+DlgTableWidthPc : "درصد",
+DlgTableHeight : "درازا",
+DlgTableCellSpace : "Ùاصلهٴ میان سلولها",
+DlgTableCellPad : "Ùاصلهٴ پرشده در سلول",
+DlgTableCaption : "عنوان",
+DlgTableSummary : "خلاصه",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "ویژگیهای سلول",
+DlgCellWidth : "پهنا",
+DlgCellWidthPx : "پیکسل",
+DlgCellWidthPc : "درصد",
+DlgCellHeight : "درازا",
+DlgCellWordWrap : "شکستن واژه‌ها",
+DlgCellWordWrapNotSet : "<تعین‌نشده>",
+DlgCellWordWrapYes : "بله",
+DlgCellWordWrapNo : "خیر",
+DlgCellHorAlign : "چینش ÙاÙÙ‚ÛŒ",
+DlgCellHorAlignNotSet : "<تعین‌نشده>",
+DlgCellHorAlignLeft : "Ú†Ù¾",
+DlgCellHorAlignCenter : "وسط",
+DlgCellHorAlignRight: "راست",
+DlgCellVerAlign : "چینش Ùعمودی",
+DlgCellVerAlignNotSet : "<تعین‌نشده>",
+DlgCellVerAlignTop : "بالا",
+DlgCellVerAlignMiddle : "میان",
+DlgCellVerAlignBottom : "پائین",
+DlgCellVerAlignBaseline : "خط‌پایه",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "گستردگی سطرها",
+DlgCellCollSpan : "گستردگی ستونها",
+DlgCellBackColor : "رنگ پس‌زمینه",
+DlgCellBorderColor : "رنگ لبه",
+DlgCellBtnSelect : "برگزینید...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "جستجو و جایگزینی",
+
+// Find Dialog
+DlgFindTitle : "یاÙتن",
+DlgFindFindBtn : "یاÙتن",
+DlgFindNotFoundMsg : "متن موردنظر یاÙت نشد.",
+
+// Replace Dialog
+DlgReplaceTitle : "جایگزینی",
+DlgReplaceFindLbl : "چه‌چیز را می‌یابید:",
+DlgReplaceReplaceLbl : "جایگزینی با:",
+DlgReplaceCaseChk : "همسانی در بزرگی و کوچکی نویسه‌ها",
+DlgReplaceReplaceBtn : "جایگزینی",
+DlgReplaceReplAllBtn : "جایگزینی همهٴ یاÙته‌ها",
+DlgReplaceWordChk : "همسانی با واژهٴ کامل",
+
+// Paste Operations / Dialog
+PasteErrorCut : "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد Ú©Ù‡ ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطÙا با دکمه‌های صÙحه‌کلید این کار را انجام دهید (Ctrl+X).",
+PasteErrorCopy : "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد Ú©Ù‡ ویرایشگر به طور خودکار عملکردهای کپی‌کردن را انجام دهد. لطÙا با دکمه‌های صÙحه‌کلید این کار را انجام دهید (Ctrl+C).",
+
+PasteAsText : "چسباندن به عنوان متن Ùساده",
+PasteFromWord : "چسباندن از Word",
+
+DlgPasteMsg2 : "لطÙا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید Ùˆ <STRONG>پذیرش</STRONG> را بزنید.",
+DlgPasteSec : "به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمی‌تواند دسترسی مستقیم به داده‌های clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.",
+DlgPasteIgnoreFont : "چشم‌پوشی از تعاری٠نوع قلم",
+DlgPasteRemoveStyles : "چشم‌پوشی از تعاری٠سبک (style)",
+
+// Color Picker
+ColorAutomatic : "خودکار",
+ColorMoreColors : "رنگهای بیشتر...",
+
+// Document Properties
+DocProps : "ویژگیهای سند",
+
+// Anchor Dialog
+DlgAnchorTitle : "ویژگیهای لنگر",
+DlgAnchorName : "نام لنگر",
+DlgAnchorErrorName : "لطÙا نام لنگر را بنویسید",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "در واژه‌نامه یاÙت نشد",
+DlgSpellChangeTo : "تغییر به",
+DlgSpellBtnIgnore : "چشم‌پوشی",
+DlgSpellBtnIgnoreAll : "چشم‌پوشی همه",
+DlgSpellBtnReplace : "جایگزینی",
+DlgSpellBtnReplaceAll : "جایگزینی همه",
+DlgSpellBtnUndo : "واچینش",
+DlgSpellNoSuggestions : "- پیشنهادی نیست -",
+DlgSpellProgress : "بررسی املا در حال انجام...",
+DlgSpellNoMispell : "بررسی املا انجام شد. هیچ غلط‌املائی یاÙت نشد",
+DlgSpellNoChanges : "بررسی املا انجام شد. هیچ واژه‌ای تغییر نیاÙت",
+DlgSpellOneChange : "بررسی املا انجام شد. یک واژه تغییر یاÙت",
+DlgSpellManyChanges : "بررسی املا انجام شد. %1 واژه تغییر یاÙت",
+
+IeSpellDownload : "بررسی‌کنندهٴ املا نصب نشده است. آیا می‌خواهید آن را هم‌اکنون دریاÙت کنید؟",
+
+// Button Dialog
+DlgButtonText : "متن (مقدار)",
+DlgButtonType : "نوع",
+DlgButtonTypeBtn : "دکمه",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "بازنشانی (Reset)",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "نام",
+DlgCheckboxValue : "مقدار",
+DlgCheckboxSelected : "برگزیده",
+
+// Form Dialog
+DlgFormName : "نام",
+DlgFormAction : "رویداد",
+DlgFormMethod : "متد",
+
+// Select Field Dialog
+DlgSelectName : "نام",
+DlgSelectValue : "مقدار",
+DlgSelectSize : "اندازه",
+DlgSelectLines : "خطوط",
+DlgSelectChkMulti : "گزینش چندگانه Ùراهم باشد",
+DlgSelectOpAvail : "گزینه‌های دردسترس",
+DlgSelectOpText : "متن",
+DlgSelectOpValue : "مقدار",
+DlgSelectBtnAdd : "اÙزودن",
+DlgSelectBtnModify : "ویرایش",
+DlgSelectBtnUp : "بالا",
+DlgSelectBtnDown : "پائین",
+DlgSelectBtnSetValue : "تنظیم به عنوان مقدار Ùبرگزیده",
+DlgSelectBtnDelete : "پاک‌کردن",
+
+// Textarea Dialog
+DlgTextareaName : "نام",
+DlgTextareaCols : "ستونها",
+DlgTextareaRows : "سطرها",
+
+// Text Field Dialog
+DlgTextName : "نام",
+DlgTextValue : "مقدار",
+DlgTextCharWidth : "پهنای نویسه",
+DlgTextMaxChars : "بیشینهٴ نویسه‌ها",
+DlgTextType : "نوع",
+DlgTextTypeText : "متن",
+DlgTextTypePass : "گذرواژه",
+
+// Hidden Field Dialog
+DlgHiddenName : "نام",
+DlgHiddenValue : "مقدار",
+
+// Bulleted List Dialog
+BulletedListProp : "ویژگیهای Ùهرست نقطه‌ای",
+NumberedListProp : "ویژگیهای Ùهرست شماره‌دار",
+DlgLstStart : "آغاز",
+DlgLstType : "نوع",
+DlgLstTypeCircle : "دایره",
+DlgLstTypeDisc : "قرص",
+DlgLstTypeSquare : "چهارگوش",
+DlgLstTypeNumbers : "شماره‌ها (1، 2، 3)",
+DlgLstTypeLCase : "نویسه‌های کوچک (a، b، c)",
+DlgLstTypeUCase : "نویسه‌های بزرگ (A، B، C)",
+DlgLstTypeSRoman : "شمارگان رومی کوچک (i، ii، iii)",
+DlgLstTypeLRoman : "شمارگان رومی بزرگ (I، II، III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "عمومی",
+DlgDocBackTab : "پس‌زمینه",
+DlgDocColorsTab : "رنگها و حاشیه‌ها",
+DlgDocMetaTab : "Ùراداده",
+
+DlgDocPageTitle : "عنوان صÙحه",
+DlgDocLangDir : "جهت زبان",
+DlgDocLangDirLTR : "چپ به راست (LTR(",
+DlgDocLangDirRTL : "راست به چپ (RTL(",
+DlgDocLangCode : "کد زبان",
+DlgDocCharSet : "رمزگذاری نویسه‌گان",
+DlgDocCharSetCE : "اروپای مرکزی",
+DlgDocCharSetCT : "چینی رسمی (Big5)",
+DlgDocCharSetCR : "سیریلیک",
+DlgDocCharSetGR : "یونانی",
+DlgDocCharSetJP : "ژاپنی",
+DlgDocCharSetKR : "کره‌ای",
+DlgDocCharSetTR : "ترکی",
+DlgDocCharSetUN : "یونیکÙد (UTF-8)",
+DlgDocCharSetWE : "اروپای غربی",
+DlgDocCharSetOther : "رمزگذاری نویسه‌گان دیگر",
+
+DlgDocDocType : "عنوان نوع سند",
+DlgDocDocTypeOther : "عنوان نوع سند دیگر",
+DlgDocIncXHTML : "شامل تعاری٠XHTML",
+DlgDocBgColor : "رنگ پس‌زمینه",
+DlgDocBgImage : "URL تصویر پس‌زمینه",
+DlgDocBgNoScroll : "پس‌زمینهٴ پیمایش‌ناپذیر",
+DlgDocCText : "متن",
+DlgDocCLink : "پیوند",
+DlgDocCVisited : "پیوند مشاهده‌شده",
+DlgDocCActive : "پیوند Ùعال",
+DlgDocMargins : "حاشیه‌های صÙحه",
+DlgDocMaTop : "بالا",
+DlgDocMaLeft : "Ú†Ù¾",
+DlgDocMaRight : "راست",
+DlgDocMaBottom : "پایین",
+DlgDocMeIndex : "کلیدواژگان نمایه‌گذاری سند (با کاما جدا شوند)",
+DlgDocMeDescr : "توصی٠سند",
+DlgDocMeAuthor : "نویسنده",
+DlgDocMeCopy : "کپی‌رایت",
+DlgDocPreview : "پیش‌نمایش",
+
+// Templates Dialog
+Templates : "الگوها",
+DlgTemplatesTitle : "الگوهای محتویات",
+DlgTemplatesSelMsg : "لطÙا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات کنونی از دست خواهند رÙت):",
+DlgTemplatesLoading : "بارگذاری Ùهرست الگوها. لطÙا صبر کنید...",
+DlgTemplatesNoTpl : "(الگوئی تعری٠نشده است)",
+DlgTemplatesReplace : "محتویات کنونی جایگزین شوند",
+
+// About Dialog
+DlgAboutAboutTab : "درباره",
+DlgAboutBrowserInfoTab : "اطلاعات مرورگر",
+DlgAboutLicenseTab : "گواهینامه",
+DlgAboutVersion : "نگارش",
+DlgAboutInfo : "برای آگاهی بیشتر به این نشانی بروید",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fi.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fi.js
new file mode 100644
index 0000000..f59fda2
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fi.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Finnish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Piilota työkalurivi",
+ToolbarExpand : "Näytä työkalurivi",
+
+// Toolbar Items and Context Menu
+Save : "Tallenna",
+NewPage : "Tyhjennä",
+Preview : "Esikatsele",
+Cut : "Leikkaa",
+Copy : "Kopioi",
+Paste : "Liitä",
+PasteText : "Liitä tekstinä",
+PasteWord : "Liitä Wordista",
+Print : "Tulosta",
+SelectAll : "Valitse kaikki",
+RemoveFormat : "Poista muotoilu",
+InsertLinkLbl : "Linkki",
+InsertLink : "Lisää linkki/muokkaa linkkiä",
+RemoveLink : "Poista linkki",
+VisitLink : "Open Link", //MISSING
+Anchor : "Lisää ankkuri/muokkaa ankkuria",
+AnchorDelete : "Poista ankkuri",
+InsertImageLbl : "Kuva",
+InsertImage : "Lisää kuva/muokkaa kuvaa",
+InsertFlashLbl : "Flash",
+InsertFlash : "Lisää/muokkaa Flashia",
+InsertTableLbl : "Taulu",
+InsertTable : "Lisää taulu/muokkaa taulua",
+InsertLineLbl : "Murtoviiva",
+InsertLine : "Lisää murtoviiva",
+InsertSpecialCharLbl: "Erikoismerkki",
+InsertSpecialChar : "Lisää erikoismerkki",
+InsertSmileyLbl : "Hymiö",
+InsertSmiley : "Lisää hymiö",
+About : "FCKeditorista",
+Bold : "Lihavoitu",
+Italic : "Kursivoitu",
+Underline : "Alleviivattu",
+StrikeThrough : "Yliviivattu",
+Subscript : "Alaindeksi",
+Superscript : "Yläindeksi",
+LeftJustify : "Tasaa vasemmat reunat",
+CenterJustify : "Keskitä",
+RightJustify : "Tasaa oikeat reunat",
+BlockJustify : "Tasaa molemmat reunat",
+DecreaseIndent : "Pienennä sisennystä",
+IncreaseIndent : "Suurenna sisennystä",
+Blockquote : "Lainaus",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Kumoa",
+Redo : "Toista",
+NumberedListLbl : "Numerointi",
+NumberedList : "Lisää/poista numerointi",
+BulletedListLbl : "Luottelomerkit",
+BulletedList : "Lisää/poista luottelomerkit",
+ShowTableBorders : "Näytä taulun rajat",
+ShowDetails : "Näytä muotoilu",
+Style : "Tyyli",
+FontFormat : "Muotoilu",
+Font : "Fontti",
+FontSize : "Koko",
+TextColor : "Tekstiväri",
+BGColor : "Taustaväri",
+Source : "Koodi",
+Find : "Etsi",
+Replace : "Korvaa",
+SpellCheck : "Tarkista oikeinkirjoitus",
+UniversalKeyboard : "Universaali näppäimistö",
+PageBreakLbl : "Sivun vaihto",
+PageBreak : "Lisää sivun vaihto",
+
+Form : "Lomake",
+Checkbox : "Valintaruutu",
+RadioButton : "Radiopainike",
+TextField : "Tekstikenttä",
+Textarea : "Tekstilaatikko",
+HiddenField : "Piilokenttä",
+Button : "Painike",
+SelectionField : "Valintakenttä",
+ImageButton : "Kuvapainike",
+
+FitWindow : "Suurenna editori koko ikkunaan",
+ShowBlocks : "Näytä elementit",
+
+// Context Menu
+EditLink : "Muokkaa linkkiä",
+CellCM : "Solu",
+RowCM : "Rivi",
+ColumnCM : "Sarake",
+InsertRowAfter : "Lisää rivi alapuolelle",
+InsertRowBefore : "Lisää rivi yläpuolelle",
+DeleteRows : "Poista rivit",
+InsertColumnAfter : "Lisää sarake oikealle",
+InsertColumnBefore : "Lisää sarake vasemmalle",
+DeleteColumns : "Poista sarakkeet",
+InsertCellAfter : "Lisää solu perään",
+InsertCellBefore : "Lisää solu eteen",
+DeleteCells : "Poista solut",
+MergeCells : "Yhdistä solut",
+MergeRight : "Yhdistä oikealla olevan kanssa",
+MergeDown : "Yhdistä alla olevan kanssa",
+HorizontalSplitCell : "Jaa solu vaakasuunnassa",
+VerticalSplitCell : "Jaa solu pystysuunnassa",
+TableDelete : "Poista taulu",
+CellProperties : "Solun ominaisuudet",
+TableProperties : "Taulun ominaisuudet",
+ImageProperties : "Kuvan ominaisuudet",
+FlashProperties : "Flash ominaisuudet",
+
+AnchorProp : "Ankkurin ominaisuudet",
+ButtonProp : "Painikkeen ominaisuudet",
+CheckboxProp : "Valintaruudun ominaisuudet",
+HiddenFieldProp : "Piilokentän ominaisuudet",
+RadioButtonProp : "Radiopainikkeen ominaisuudet",
+ImageButtonProp : "Kuvapainikkeen ominaisuudet",
+TextFieldProp : "Tekstikentän ominaisuudet",
+SelectionFieldProp : "Valintakentän ominaisuudet",
+TextareaProp : "Tekstilaatikon ominaisuudet",
+FormProp : "Lomakkeen ominaisuudet",
+
+FontFormats : "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Prosessoidaan XHTML:ää. Odota hetki...",
+Done : "Valmis",
+PasteWordConfirm : "Teksti, jonka haluat liittää, näyttää olevan kopioitu Wordista. Haluatko puhdistaa sen ennen liittämistä?",
+NotCompatiblePaste : "Tämä komento toimii vain Internet Explorer 5.5:ssa tai uudemmassa. Haluatko liittää ilman puhdistusta?",
+UnknownToolbarItem : "Tuntemanton työkalu \"%1\"",
+UnknownCommand : "Tuntematon komento \"%1\"",
+NotImplemented : "Komentoa ei ole liitetty sovellukseen",
+UnknownToolbarSet : "Työkalukokonaisuus \"%1\" ei ole olemassa",
+NoActiveX : "Selaimesi turvallisuusasetukset voivat rajoittaa joitain editorin ominaisuuksia. Sinun pitää ottaa käyttöön asetuksista \"Suorita ActiveX komponentit ja -plugin-laajennukset\". Saatat kohdata virheitä ja huomata puuttuvia ominaisuuksia.",
+BrowseServerBlocked : "Resurssiselainta ei voitu avata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.",
+DialogBlocked : "Apuikkunaa ei voitu avaata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Peruuta",
+DlgBtnClose : "Sulje",
+DlgBtnBrowseServer : "Selaa palvelinta",
+DlgAdvancedTag : "Lisäominaisuudet",
+DlgOpOther : "Muut",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Lisää URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ei asetettu>",
+DlgGenId : "Tunniste",
+DlgGenLangDir : "Kielen suunta",
+DlgGenLangDirLtr : "Vasemmalta oikealle (LTR)",
+DlgGenLangDirRtl : "Oikealta vasemmalle (RTL)",
+DlgGenLangCode : "Kielikoodi",
+DlgGenAccessKey : "Pikanäppäin",
+DlgGenName : "Nimi",
+DlgGenTabIndex : "Tabulaattori indeksi",
+DlgGenLongDescr : "Pitkän kuvauksen URL",
+DlgGenClass : "Tyyliluokat",
+DlgGenTitle : "Avustava otsikko",
+DlgGenContType : "Avustava sisällön tyyppi",
+DlgGenLinkCharset : "Linkitetty kirjaimisto",
+DlgGenStyle : "Tyyli",
+
+// Image Dialog
+DlgImgTitle : "Kuvan ominaisuudet",
+DlgImgInfoTab : "Kuvan tiedot",
+DlgImgBtnUpload : "Lähetä palvelimelle",
+DlgImgURL : "Osoite",
+DlgImgUpload : "Lisää kuva",
+DlgImgAlt : "Vaihtoehtoinen teksti",
+DlgImgWidth : "Leveys",
+DlgImgHeight : "Korkeus",
+DlgImgLockRatio : "Lukitse suhteet",
+DlgBtnResetSize : "Alkuperäinen koko",
+DlgImgBorder : "Raja",
+DlgImgHSpace : "Vaakatila",
+DlgImgVSpace : "Pystytila",
+DlgImgAlign : "Kohdistus",
+DlgImgAlignLeft : "Vasemmalle",
+DlgImgAlignAbsBottom: "Aivan alas",
+DlgImgAlignAbsMiddle: "Aivan keskelle",
+DlgImgAlignBaseline : "Alas (teksti)",
+DlgImgAlignBottom : "Alas",
+DlgImgAlignMiddle : "Keskelle",
+DlgImgAlignRight : "Oikealle",
+DlgImgAlignTextTop : "Ylös (teksti)",
+DlgImgAlignTop : "Ylös",
+DlgImgPreview : "Esikatselu",
+DlgImgAlertUrl : "Kirjoita kuvan osoite (URL)",
+DlgImgLinkTab : "Linkki",
+
+// Flash Dialog
+DlgFlashTitle : "Flash ominaisuudet",
+DlgFlashChkPlay : "Automaattinen käynnistys",
+DlgFlashChkLoop : "Toisto",
+DlgFlashChkMenu : "Näytä Flash-valikko",
+DlgFlashScale : "Levitä",
+DlgFlashScaleAll : "Näytä kaikki",
+DlgFlashScaleNoBorder : "Ei rajaa",
+DlgFlashScaleFit : "Tarkka koko",
+
+// Link Dialog
+DlgLnkWindowTitle : "Linkki",
+DlgLnkInfoTab : "Linkin tiedot",
+DlgLnkTargetTab : "Kohde",
+
+DlgLnkType : "Linkkityyppi",
+DlgLnkTypeURL : "Osoite",
+DlgLnkTypeAnchor : "Ankkuri tässä sivussa",
+DlgLnkTypeEMail : "Sähköposti",
+DlgLnkProto : "Protokolla",
+DlgLnkProtoOther : "<muu>",
+DlgLnkURL : "Osoite",
+DlgLnkAnchorSel : "Valitse ankkuri",
+DlgLnkAnchorByName : "Ankkurin nimen mukaan",
+DlgLnkAnchorById : "Ankkurin ID:n mukaan",
+DlgLnkNoAnchors : "(Ei ankkureita tässä dokumentissa)",
+DlgLnkEMail : "Sähköpostiosoite",
+DlgLnkEMailSubject : "Aihe",
+DlgLnkEMailBody : "Viesti",
+DlgLnkUpload : "Lisää tiedosto",
+DlgLnkBtnUpload : "Lähetä palvelimelle",
+
+DlgLnkTarget : "Kohde",
+DlgLnkTargetFrame : "<kehys>",
+DlgLnkTargetPopup : "<popup ikkuna>",
+DlgLnkTargetBlank : "Uusi ikkuna (_blank)",
+DlgLnkTargetParent : "Emoikkuna (_parent)",
+DlgLnkTargetSelf : "Sama ikkuna (_self)",
+DlgLnkTargetTop : "Päällimmäisin ikkuna (_top)",
+DlgLnkTargetFrameName : "Kohdekehyksen nimi",
+DlgLnkPopWinName : "Popup ikkunan nimi",
+DlgLnkPopWinFeat : "Popup ikkunan ominaisuudet",
+DlgLnkPopResize : "Venytettävä",
+DlgLnkPopLocation : "Osoiterivi",
+DlgLnkPopMenu : "Valikkorivi",
+DlgLnkPopScroll : "Vierityspalkit",
+DlgLnkPopStatus : "Tilarivi",
+DlgLnkPopToolbar : "Vakiopainikkeet",
+DlgLnkPopFullScrn : "Täysi ikkuna (IE)",
+DlgLnkPopDependent : "Riippuva (Netscape)",
+DlgLnkPopWidth : "Leveys",
+DlgLnkPopHeight : "Korkeus",
+DlgLnkPopLeft : "Vasemmalta (px)",
+DlgLnkPopTop : "Ylhäältä (px)",
+
+DlnLnkMsgNoUrl : "Linkille on kirjoitettava URL",
+DlnLnkMsgNoEMail : "Kirjoita sähköpostiosoite",
+DlnLnkMsgNoAnchor : "Valitse ankkuri",
+DlnLnkMsgInvPopName : "Popup-ikkunan nimi pitää alkaa aakkosella ja ei saa sisältää välejä",
+
+// Color Dialog
+DlgColorTitle : "Valitse väri",
+DlgColorBtnClear : "Tyhjennä",
+DlgColorHighlight : "Kohdalla",
+DlgColorSelected : "Valittu",
+
+// Smiley Dialog
+DlgSmileyTitle : "Lisää hymiö",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Valitse erikoismerkki",
+
+// Table Dialog
+DlgTableTitle : "Taulun ominaisuudet",
+DlgTableRows : "Rivit",
+DlgTableColumns : "Sarakkeet",
+DlgTableBorder : "Rajan paksuus",
+DlgTableAlign : "Kohdistus",
+DlgTableAlignNotSet : "<ei asetettu>",
+DlgTableAlignLeft : "Vasemmalle",
+DlgTableAlignCenter : "Keskelle",
+DlgTableAlignRight : "Oikealle",
+DlgTableWidth : "Leveys",
+DlgTableWidthPx : "pikseliä",
+DlgTableWidthPc : "prosenttia",
+DlgTableHeight : "Korkeus",
+DlgTableCellSpace : "Solujen väli",
+DlgTableCellPad : "Solujen sisennys",
+DlgTableCaption : "Otsikko",
+DlgTableSummary : "Yhteenveto",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Solun ominaisuudet",
+DlgCellWidth : "Leveys",
+DlgCellWidthPx : "pikseliä",
+DlgCellWidthPc : "prosenttia",
+DlgCellHeight : "Korkeus",
+DlgCellWordWrap : "Tekstikierrätys",
+DlgCellWordWrapNotSet : "<Ei asetettu>",
+DlgCellWordWrapYes : "Kyllä",
+DlgCellWordWrapNo : "Ei",
+DlgCellHorAlign : "Vaakakohdistus",
+DlgCellHorAlignNotSet : "<Ei asetettu>",
+DlgCellHorAlignLeft : "Vasemmalle",
+DlgCellHorAlignCenter : "Keskelle",
+DlgCellHorAlignRight: "Oikealle",
+DlgCellVerAlign : "Pystykohdistus",
+DlgCellVerAlignNotSet : "<Ei asetettu>",
+DlgCellVerAlignTop : "Ylös",
+DlgCellVerAlignMiddle : "Keskelle",
+DlgCellVerAlignBottom : "Alas",
+DlgCellVerAlignBaseline : "Tekstin alas",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Rivin jatkuvuus",
+DlgCellCollSpan : "Sarakkeen jatkuvuus",
+DlgCellBackColor : "Taustaväri",
+DlgCellBorderColor : "Rajan väri",
+DlgCellBtnSelect : "Valitse...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Etsi ja korvaa",
+
+// Find Dialog
+DlgFindTitle : "Etsi",
+DlgFindFindBtn : "Etsi",
+DlgFindNotFoundMsg : "Etsittyä tekstiä ei löytynyt.",
+
+// Replace Dialog
+DlgReplaceTitle : "Korvaa",
+DlgReplaceFindLbl : "Etsi mitä:",
+DlgReplaceReplaceLbl : "Korvaa tällä:",
+DlgReplaceCaseChk : "Sama kirjainkoko",
+DlgReplaceReplaceBtn : "Korvaa",
+DlgReplaceReplAllBtn : "Korvaa kaikki",
+DlgReplaceWordChk : "Koko sana",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).",
+PasteErrorCopy : "Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).",
+
+PasteAsText : "Liitä tekstinä",
+PasteFromWord : "Liitä Wordista",
+
+DlgPasteMsg2 : "Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.",
+DlgPasteSec : "Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.",
+DlgPasteIgnoreFont : "Jätä huomioimatta fonttimääritykset",
+DlgPasteRemoveStyles : "Poista tyylimääritykset",
+
+// Color Picker
+ColorAutomatic : "Automaattinen",
+ColorMoreColors : "Lisää värejä...",
+
+// Document Properties
+DocProps : "Dokumentin ominaisuudet",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ankkurin ominaisuudet",
+DlgAnchorName : "Nimi",
+DlgAnchorErrorName : "Ankkurille on kirjoitettava nimi",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ei sanakirjassa",
+DlgSpellChangeTo : "Vaihda",
+DlgSpellBtnIgnore : "Jätä huomioimatta",
+DlgSpellBtnIgnoreAll : "Jätä kaikki huomioimatta",
+DlgSpellBtnReplace : "Korvaa",
+DlgSpellBtnReplaceAll : "Korvaa kaikki",
+DlgSpellBtnUndo : "Kumoa",
+DlgSpellNoSuggestions : "Ei ehdotuksia",
+DlgSpellProgress : "Tarkistus käynnissä...",
+DlgSpellNoMispell : "Tarkistus valmis: Ei virheitä",
+DlgSpellNoChanges : "Tarkistus valmis: Yhtään sanaa ei muutettu",
+DlgSpellOneChange : "Tarkistus valmis: Yksi sana muutettiin",
+DlgSpellManyChanges : "Tarkistus valmis: %1 sanaa muutettiin",
+
+IeSpellDownload : "Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?",
+
+// Button Dialog
+DlgButtonText : "Teksti (arvo)",
+DlgButtonType : "Tyyppi",
+DlgButtonTypeBtn : "Painike",
+DlgButtonTypeSbm : "Lähetä",
+DlgButtonTypeRst : "Tyhjennä",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nimi",
+DlgCheckboxValue : "Arvo",
+DlgCheckboxSelected : "Valittu",
+
+// Form Dialog
+DlgFormName : "Nimi",
+DlgFormAction : "Toiminto",
+DlgFormMethod : "Tapa",
+
+// Select Field Dialog
+DlgSelectName : "Nimi",
+DlgSelectValue : "Arvo",
+DlgSelectSize : "Koko",
+DlgSelectLines : "Rivit",
+DlgSelectChkMulti : "Salli usea valinta",
+DlgSelectOpAvail : "Ominaisuudet",
+DlgSelectOpText : "Teksti",
+DlgSelectOpValue : "Arvo",
+DlgSelectBtnAdd : "Lisää",
+DlgSelectBtnModify : "Muuta",
+DlgSelectBtnUp : "Ylös",
+DlgSelectBtnDown : "Alas",
+DlgSelectBtnSetValue : "Aseta valituksi",
+DlgSelectBtnDelete : "Poista",
+
+// Textarea Dialog
+DlgTextareaName : "Nimi",
+DlgTextareaCols : "Sarakkeita",
+DlgTextareaRows : "Rivejä",
+
+// Text Field Dialog
+DlgTextName : "Nimi",
+DlgTextValue : "Arvo",
+DlgTextCharWidth : "Leveys",
+DlgTextMaxChars : "Maksimi merkkimäärä",
+DlgTextType : "Tyyppi",
+DlgTextTypeText : "Teksti",
+DlgTextTypePass : "Salasana",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nimi",
+DlgHiddenValue : "Arvo",
+
+// Bulleted List Dialog
+BulletedListProp : "Luettelon ominaisuudet",
+NumberedListProp : "Numeroinnin ominaisuudet",
+DlgLstStart : "Alku",
+DlgLstType : "Tyyppi",
+DlgLstTypeCircle : "Kehä",
+DlgLstTypeDisc : "Ympyrä",
+DlgLstTypeSquare : "Neliö",
+DlgLstTypeNumbers : "Numerot (1, 2, 3)",
+DlgLstTypeLCase : "Pienet kirjaimet (a, b, c)",
+DlgLstTypeUCase : "Isot kirjaimet (A, B, C)",
+DlgLstTypeSRoman : "Pienet roomalaiset numerot (i, ii, iii)",
+DlgLstTypeLRoman : "Isot roomalaiset numerot (Ii, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Yleiset",
+DlgDocBackTab : "Tausta",
+DlgDocColorsTab : "Värit ja marginaalit",
+DlgDocMetaTab : "Meta-tieto",
+
+DlgDocPageTitle : "Sivun nimi",
+DlgDocLangDir : "Kielen suunta",
+DlgDocLangDirLTR : "Vasemmalta oikealle (LTR)",
+DlgDocLangDirRTL : "Oikealta vasemmalle (RTL)",
+DlgDocLangCode : "Kielikoodi",
+DlgDocCharSet : "Merkistökoodaus",
+DlgDocCharSetCE : "Keskieurooppalainen",
+DlgDocCharSetCT : "Kiina, perinteinen (Big5)",
+DlgDocCharSetCR : "Kyrillinen",
+DlgDocCharSetGR : "Kreikka",
+DlgDocCharSetJP : "Japani",
+DlgDocCharSetKR : "Korealainen",
+DlgDocCharSetTR : "Turkkilainen",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Länsieurooppalainen",
+DlgDocCharSetOther : "Muu merkistökoodaus",
+
+DlgDocDocType : "Dokumentin tyyppi",
+DlgDocDocTypeOther : "Muu dokumentin tyyppi",
+DlgDocIncXHTML : "Lisää XHTML julistukset",
+DlgDocBgColor : "Taustaväri",
+DlgDocBgImage : "Taustakuva",
+DlgDocBgNoScroll : "Paikallaanpysyvä tausta",
+DlgDocCText : "Teksti",
+DlgDocCLink : "Linkki",
+DlgDocCVisited : "Vierailtu linkki",
+DlgDocCActive : "Aktiivinen linkki",
+DlgDocMargins : "Sivun marginaalit",
+DlgDocMaTop : "Ylä",
+DlgDocMaLeft : "Vasen",
+DlgDocMaRight : "Oikea",
+DlgDocMaBottom : "Ala",
+DlgDocMeIndex : "Hakusanat (pilkulla erotettuna)",
+DlgDocMeDescr : "Kuvaus",
+DlgDocMeAuthor : "Tekijä",
+DlgDocMeCopy : "Tekijänoikeudet",
+DlgDocPreview : "Esikatselu",
+
+// Templates Dialog
+Templates : "Pohjat",
+DlgTemplatesTitle : "Sisältöpohjat",
+DlgTemplatesSelMsg : "Valitse pohja editoriin<br>(aiempi sisältö menetetään):",
+DlgTemplatesLoading : "Ladataan listaa pohjista. Hetkinen...",
+DlgTemplatesNoTpl : "(Ei määriteltyjä pohjia)",
+DlgTemplatesReplace : "Korvaa editorin koko sisältö",
+
+// About Dialog
+DlgAboutAboutTab : "Editorista",
+DlgAboutBrowserInfoTab : "Selaimen tiedot",
+DlgAboutLicenseTab : "Lisenssi",
+DlgAboutVersion : "versio",
+DlgAboutInfo : "Lisää tietoa osoitteesta",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fo.js
new file mode 100644
index 0000000..24e4c6f
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fo.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Faroese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Fjal amboðsbjálkan",
+ToolbarExpand : "Vís amboðsbjálkan",
+
+// Toolbar Items and Context Menu
+Save : "Goym",
+NewPage : "Nýggj síða",
+Preview : "Frumsýning",
+Cut : "Kvett",
+Copy : "Avrita",
+Paste : "Innrita",
+PasteText : "Innrita reinan tekst",
+PasteWord : "Innrita frá Word",
+Print : "Prenta",
+SelectAll : "Markera alt",
+RemoveFormat : "Strika sniðgeving",
+InsertLinkLbl : "Tilknýti",
+InsertLink : "Ger/broyt tilknýti",
+RemoveLink : "Strika tilknýti",
+VisitLink : "Opna tilknýti",
+Anchor : "Ger/broyt marknastein",
+AnchorDelete : "Strika marknastein",
+InsertImageLbl : "Myndir",
+InsertImage : "Set inn/broyt mynd",
+InsertFlashLbl : "Flash",
+InsertFlash : "Set inn/broyt Flash",
+InsertTableLbl : "Tabell",
+InsertTable : "Set inn/broyt tabell",
+InsertLineLbl : "Linja",
+InsertLine : "Ger vatnrætta linju",
+InsertSpecialCharLbl: "Sertekn",
+InsertSpecialChar : "Set inn sertekn",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Set inn Smiley",
+About : "Um FCKeditor",
+Bold : "Feit skrift",
+Italic : "Skráskrift",
+Underline : "Undirstrikað",
+StrikeThrough : "Yvirstrikað",
+Subscript : "Lækkað skrift",
+Superscript : "Hækkað skrift",
+LeftJustify : "Vinstrasett",
+CenterJustify : "Miðsett",
+RightJustify : "Høgrasett",
+BlockJustify : "Javnir tekstkantar",
+DecreaseIndent : "Minka reglubrotarinntriv",
+IncreaseIndent : "Økja reglubrotarinntriv",
+Blockquote : "Blockquote",
+CreateDiv : "Ger DIV øki",
+EditDiv : "Broyt DIV øki",
+DeleteDiv : "Strika DIV øki",
+Undo : "Angra",
+Redo : "Vend aftur",
+NumberedListLbl : "Talmerktur listi",
+NumberedList : "Ger/strika talmerktan lista",
+BulletedListLbl : "Punktmerktur listi",
+BulletedList : "Ger/strika punktmerktan lista",
+ShowTableBorders : "Vís tabellbordar",
+ShowDetails : "Vís í smálutum",
+Style : "Typografi",
+FontFormat : "Skriftsnið",
+Font : "Skrift",
+FontSize : "Skriftstødd",
+TextColor : "Tekstlitur",
+BGColor : "Bakgrundslitur",
+Source : "Kelda",
+Find : "Leita",
+Replace : "Yvirskriva",
+SpellCheck : "Kanna stavseting",
+UniversalKeyboard : "Knappaborð",
+PageBreakLbl : "Síðuskift",
+PageBreak : "Ger síðuskift",
+
+Form : "Formur",
+Checkbox : "Flugubein",
+RadioButton : "Radioknøttur",
+TextField : "Tekstteigur",
+Textarea : "Tekstumráði",
+HiddenField : "Fjaldur teigur",
+Button : "Knøttur",
+SelectionField : "Valskrá",
+ImageButton : "Myndaknøttur",
+
+FitWindow : "Set tekstviðgera til fulla stødd",
+ShowBlocks : "Vís blokkar",
+
+// Context Menu
+EditLink : "Broyt tilknýti",
+CellCM : "Meski",
+RowCM : "Rað",
+ColumnCM : "Kolonna",
+InsertRowAfter : "Set rað inn aftaná",
+InsertRowBefore : "Set rað inn áðrenn",
+DeleteRows : "Strika røðir",
+InsertColumnAfter : "Set kolonnu inn aftaná",
+InsertColumnBefore : "Set kolonnu inn áðrenn",
+DeleteColumns : "Strika kolonnur",
+InsertCellAfter : "Set meska inn aftaná",
+InsertCellBefore : "Set meska inn áðrenn",
+DeleteCells : "Strika meskar",
+MergeCells : "Flætta meskar",
+MergeRight : "Flætta meskar til høgru",
+MergeDown : "Flætta saman",
+HorizontalSplitCell : "Kloyv meska vatnrætt",
+VerticalSplitCell : "Kloyv meska loddrætt",
+TableDelete : "Strika tabell",
+CellProperties : "Meskueginleikar",
+TableProperties : "Tabelleginleikar",
+ImageProperties : "Myndaeginleikar",
+FlashProperties : "Flash eginleikar",
+
+AnchorProp : "Eginleikar fyri marknastein",
+ButtonProp : "Eginleikar fyri knøtt",
+CheckboxProp : "Eginleikar fyri flugubein",
+HiddenFieldProp : "Eginleikar fyri fjaldan teig",
+RadioButtonProp : "Eginleikar fyri radioknøtt",
+ImageButtonProp : "Eginleikar fyri myndaknøtt",
+TextFieldProp : "Eginleikar fyri tekstteig",
+SelectionFieldProp : "Eginleikar fyri valskrá",
+TextareaProp : "Eginleikar fyri tekstumráði",
+FormProp : "Eginleikar fyri Form",
+
+FontFormats : "Vanligt;Sniðgivið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML verður viðgjørt. Bíða við...",
+Done : "Liðugt",
+PasteWordConfirm : "Teksturin, royndur verður at seta inn, tykist at stava frá Word. Vilt tú reinsa tekstin, áðrenn hann verður settur inn?",
+NotCompatiblePaste : "Hetta er bert tøkt í Internet Explorer 5.5 og nýggjari. Vilt tú seta tekstin inn kortini - óreinsaðan?",
+UnknownToolbarItem : "Ókendur lutur í amboðsbjálkanum \"%1\"",
+UnknownCommand : "Ókend kommando \"%1\"",
+NotImplemented : "Hetta er ikki tøkt í hesi útgávuni",
+UnknownToolbarSet : "Amboðsbjálkin \"%1\" finst ikki",
+NoActiveX : "Trygdaruppsetingin í alnótskaganum kann sum er avmarka onkrar hentleikar í tekstviðgeranum. Tú mást loyva møguleikanum \"Run/Kør ActiveX controls and plug-ins\". Tú kanst uppliva feilir og ávaringar um tvørrandi hentleikar.",
+BrowseServerBlocked : "Ambætarakagin kundi ikki opnast. Tryggja tær, at allar pop-up forðingar eru óvirknar.",
+DialogBlocked : "Tað eyðnaðist ikki at opna samskiftisrútin. Tryggja tær, at allar pop-up forðingar eru óvirknar.",
+VisitLinkBlocked : "Tað eyðnaðist ikki at opna nýggjan rút. Tryggja tær, at allar pop-up forðingar eru óvirknar.",
+
+// Dialogs
+DlgBtnOK : "Góðkent",
+DlgBtnCancel : "Avlýst",
+DlgBtnClose : "Lat aftur",
+DlgBtnBrowseServer : "Ambætarakagi",
+DlgAdvancedTag : "Fjølbroytt",
+DlgOpOther : "<Annað>",
+DlgInfoTab : "Upplýsingar",
+DlgAlertUrl : "Vinarliga veit ein URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ikki sett>",
+DlgGenId : "Id",
+DlgGenLangDir : "Tekstkós",
+DlgGenLangDirLtr : "Frá vinstru til høgru (LTR)",
+DlgGenLangDirRtl : "Frá høgru til vinstru (RTL)",
+DlgGenLangCode : "Málkoda",
+DlgGenAccessKey : "Snarvegisknappur",
+DlgGenName : "Navn",
+DlgGenTabIndex : "Inntriv indeks",
+DlgGenLongDescr : "Víðkað URL frágreiðing",
+DlgGenClass : "Typografi klassar",
+DlgGenTitle : "Vegleiðandi heiti",
+DlgGenContType : "Vegleiðandi innihaldsslag",
+DlgGenLinkCharset : "Atknýtt teknsett",
+DlgGenStyle : "Typografi",
+
+// Image Dialog
+DlgImgTitle : "Myndaeginleikar",
+DlgImgInfoTab : "Myndaupplýsingar",
+DlgImgBtnUpload : "Send til ambætaran",
+DlgImgURL : "URL",
+DlgImgUpload : "Send",
+DlgImgAlt : "Alternativur tekstur",
+DlgImgWidth : "Breidd",
+DlgImgHeight : "Hædd",
+DlgImgLockRatio : "Læs lutfallið",
+DlgBtnResetSize : "Upprunastødd",
+DlgImgBorder : "Bordi",
+DlgImgHSpace : "Høgri breddi",
+DlgImgVSpace : "Vinstri breddi",
+DlgImgAlign : "Justering",
+DlgImgAlignLeft : "Vinstra",
+DlgImgAlignAbsBottom: "Abs botnur",
+DlgImgAlignAbsMiddle: "Abs miðja",
+DlgImgAlignBaseline : "Basislinja",
+DlgImgAlignBottom : "Botnur",
+DlgImgAlignMiddle : "Miðja",
+DlgImgAlignRight : "Høgra",
+DlgImgAlignTextTop : "Tekst toppur",
+DlgImgAlignTop : "Ovast",
+DlgImgPreview : "Frumsýning",
+DlgImgAlertUrl : "Rita slóðina til myndina",
+DlgImgLinkTab : "Tilknýti",
+
+// Flash Dialog
+DlgFlashTitle : "Flash eginleikar",
+DlgFlashChkPlay : "Avspælingin byrjar sjálv",
+DlgFlashChkLoop : "Endurspæl",
+DlgFlashChkMenu : "Ger Flash skrá virkna",
+DlgFlashScale : "Skalering",
+DlgFlashScaleAll : "Vís alt",
+DlgFlashScaleNoBorder : "Eingin bordi",
+DlgFlashScaleFit : "Neyv skalering",
+
+// Link Dialog
+DlgLnkWindowTitle : "Tilknýti",
+DlgLnkInfoTab : "Tilknýtis upplýsingar",
+DlgLnkTargetTab : "Mál",
+
+DlgLnkType : "Tilknýtisslag",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Tilknýti til marknastein í tekstinum",
+DlgLnkTypeEMail : "Teldupostur",
+DlgLnkProto : "Protokoll",
+DlgLnkProtoOther : "<Annað>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Vel ein marknastein",
+DlgLnkAnchorByName : "Eftir navni á marknasteini",
+DlgLnkAnchorById : "Eftir element Id",
+DlgLnkNoAnchors : "(Eingir marknasteinar eru í hesum dokumentið)",
+DlgLnkEMail : "Teldupost-adressa",
+DlgLnkEMailSubject : "Evni",
+DlgLnkEMailBody : "Breyðtekstur",
+DlgLnkUpload : "Send til ambætaran",
+DlgLnkBtnUpload : "Send til ambætaran",
+
+DlgLnkTarget : "Mál",
+DlgLnkTargetFrame : "<ramma>",
+DlgLnkTargetPopup : "<popup vindeyga>",
+DlgLnkTargetBlank : "Nýtt vindeyga (_blank)",
+DlgLnkTargetParent : "Upphavliga vindeygað (_parent)",
+DlgLnkTargetSelf : "Sama vindeygað (_self)",
+DlgLnkTargetTop : "Alt vindeygað (_top)",
+DlgLnkTargetFrameName : "Vís navn vindeygans",
+DlgLnkPopWinName : "Popup vindeygans navn",
+DlgLnkPopWinFeat : "Popup vindeygans víðkaðu eginleikar",
+DlgLnkPopResize : "Kann broyta stødd",
+DlgLnkPopLocation : "Adressulinja",
+DlgLnkPopMenu : "Skrábjálki",
+DlgLnkPopScroll : "Rullibjálki",
+DlgLnkPopStatus : "Støðufrágreiðingarbjálki",
+DlgLnkPopToolbar : "Amboðsbjálki",
+DlgLnkPopFullScrn : "Fullur skermur (IE)",
+DlgLnkPopDependent : "Bundið (Netscape)",
+DlgLnkPopWidth : "Breidd",
+DlgLnkPopHeight : "Hædd",
+DlgLnkPopLeft : "Frástøða frá vinstru",
+DlgLnkPopTop : "Frástøða frá íerva",
+
+DlnLnkMsgNoUrl : "Vinarliga skriva tilknýti (URL)",
+DlnLnkMsgNoEMail : "Vinarliga skriva teldupost-adressu",
+DlnLnkMsgNoAnchor : "Vinarliga vel marknastein",
+DlnLnkMsgInvPopName : "Popup navnið má byrja við bókstavi og má ikki hava millumrúm",
+
+// Color Dialog
+DlgColorTitle : "Vel lit",
+DlgColorBtnClear : "Strika alt",
+DlgColorHighlight : "Framhevja",
+DlgColorSelected : "Valt",
+
+// Smiley Dialog
+DlgSmileyTitle : "Vel Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Vel sertekn",
+
+// Table Dialog
+DlgTableTitle : "Eginleikar fyri tabell",
+DlgTableRows : "Røðir",
+DlgTableColumns : "Kolonnur",
+DlgTableBorder : "Bordabreidd",
+DlgTableAlign : "Justering",
+DlgTableAlignNotSet : "<Einki valt>",
+DlgTableAlignLeft : "Vinstrasett",
+DlgTableAlignCenter : "Miðsett",
+DlgTableAlignRight : "Høgrasett",
+DlgTableWidth : "Breidd",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "prosent",
+DlgTableHeight : "Hædd",
+DlgTableCellSpace : "Fjarstøða millum meskar",
+DlgTableCellPad : "Meskubreddi",
+DlgTableCaption : "Tabellfrágreiðing",
+DlgTableSummary : "Samandráttur",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Mesku eginleikar",
+DlgCellWidth : "Breidd",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "prosent",
+DlgCellHeight : "Hædd",
+DlgCellWordWrap : "Orðkloyving",
+DlgCellWordWrapNotSet : "<Einki valt>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nei",
+DlgCellHorAlign : "Vatnrøtt justering",
+DlgCellHorAlignNotSet : "<Einki valt>",
+DlgCellHorAlignLeft : "Vinstrasett",
+DlgCellHorAlignCenter : "Miðsett",
+DlgCellHorAlignRight: "Høgrasett",
+DlgCellVerAlign : "Lodrøtt justering",
+DlgCellVerAlignNotSet : "<Ikki sett>",
+DlgCellVerAlignTop : "Ovast",
+DlgCellVerAlignMiddle : "Miðjan",
+DlgCellVerAlignBottom : "Niðast",
+DlgCellVerAlignBaseline : "Basislinja",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Røðir, meskin fevnir um",
+DlgCellCollSpan : "Kolonnur, meskin fevnir um",
+DlgCellBackColor : "Bakgrundslitur",
+DlgCellBorderColor : "Litur á borda",
+DlgCellBtnSelect : "Vel...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Finn og broyt",
+
+// Find Dialog
+DlgFindTitle : "Finn",
+DlgFindFindBtn : "Finn",
+DlgFindNotFoundMsg : "Leititeksturin varð ikki funnin",
+
+// Replace Dialog
+DlgReplaceTitle : "Yvirskriva",
+DlgReplaceFindLbl : "Finn:",
+DlgReplaceReplaceLbl : "Yvirskriva við:",
+DlgReplaceCaseChk : "Munur á stórum og smáðum bókstavum",
+DlgReplaceReplaceBtn : "Yvirskriva",
+DlgReplaceReplAllBtn : "Yvirskriva alt",
+DlgReplaceWordChk : "Bert heil orð",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (CTRL+X).",
+PasteErrorCopy : "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (CTRL+C).",
+
+PasteAsText : "Innrita som reinan tekst",
+PasteFromWord : "Innrita fra Word",
+
+DlgPasteMsg2 : "Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>CTRL+V</strong>) og klikk á <strong>Góðtak</strong>.",
+DlgPasteSec : "Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.",
+DlgPasteIgnoreFont : "Forfjóna Font definitiónirnar",
+DlgPasteRemoveStyles : "Strika typografi definitiónir",
+
+// Color Picker
+ColorAutomatic : "Automatiskt",
+ColorMoreColors : "Fleiri litir...",
+
+// Document Properties
+DocProps : "Eginleikar fyri dokument",
+
+// Anchor Dialog
+DlgAnchorTitle : "Eginleikar fyri marknastein",
+DlgAnchorName : "Heiti marknasteinsins",
+DlgAnchorErrorName : "Vinarliga rita marknasteinsins heiti",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Finst ikki í orðabókini",
+DlgSpellChangeTo : "Broyt til",
+DlgSpellBtnIgnore : "Forfjóna",
+DlgSpellBtnIgnoreAll : "Forfjóna alt",
+DlgSpellBtnReplace : "Yvirskriva",
+DlgSpellBtnReplaceAll : "Yvirskriva alt",
+DlgSpellBtnUndo : "Angra",
+DlgSpellNoSuggestions : "- Einki uppskot -",
+DlgSpellProgress : "Rættstavarin arbeiðir...",
+DlgSpellNoMispell : "Rættstavarain liðugur: Eingin feilur funnin",
+DlgSpellNoChanges : "Rættstavarain liðugur: Einki orð varð broytt",
+DlgSpellOneChange : "Rættstavarain liðugur: Eitt orð er broytt",
+DlgSpellManyChanges : "Rættstavarain liðugur: %1 orð broytt",
+
+IeSpellDownload : "Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?",
+
+// Button Dialog
+DlgButtonText : "Tekstur",
+DlgButtonType : "Slag",
+DlgButtonTypeBtn : "Knøttur",
+DlgButtonTypeSbm : "Send",
+DlgButtonTypeRst : "Nullstilla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Navn",
+DlgCheckboxValue : "Virði",
+DlgCheckboxSelected : "Valt",
+
+// Form Dialog
+DlgFormName : "Navn",
+DlgFormAction : "Hending",
+DlgFormMethod : "Háttur",
+
+// Select Field Dialog
+DlgSelectName : "Navn",
+DlgSelectValue : "Virði",
+DlgSelectSize : "Stødd",
+DlgSelectLines : "Linjur",
+DlgSelectChkMulti : "Loyv fleiri valmøguleikum samstundis",
+DlgSelectOpAvail : "Tøkir møguleikar",
+DlgSelectOpText : "Tekstur",
+DlgSelectOpValue : "Virði",
+DlgSelectBtnAdd : "Legg afturat",
+DlgSelectBtnModify : "Broyt",
+DlgSelectBtnUp : "Upp",
+DlgSelectBtnDown : "Niður",
+DlgSelectBtnSetValue : "Set sum valt virði",
+DlgSelectBtnDelete : "Strika",
+
+// Textarea Dialog
+DlgTextareaName : "Navn",
+DlgTextareaCols : "kolonnur",
+DlgTextareaRows : "røðir",
+
+// Text Field Dialog
+DlgTextName : "Navn",
+DlgTextValue : "Virði",
+DlgTextCharWidth : "Breidd (sjónlig tekn)",
+DlgTextMaxChars : "Mest loyvdu tekn",
+DlgTextType : "Slag",
+DlgTextTypeText : "Tekstur",
+DlgTextTypePass : "Loyniorð",
+
+// Hidden Field Dialog
+DlgHiddenName : "Navn",
+DlgHiddenValue : "Virði",
+
+// Bulleted List Dialog
+BulletedListProp : "Eginleikar fyri punktmerktan lista",
+NumberedListProp : "Eginleikar fyri talmerktan lista",
+DlgLstStart : "Byrjan",
+DlgLstType : "Slag",
+DlgLstTypeCircle : "Sirkul",
+DlgLstTypeDisc : "Fyltur sirkul",
+DlgLstTypeSquare : "Fjórhyrningur",
+DlgLstTypeNumbers : "Talmerkt (1, 2, 3)",
+DlgLstTypeLCase : "Smáir bókstavir (a, b, c)",
+DlgLstTypeUCase : "Stórir bókstavir (A, B, C)",
+DlgLstTypeSRoman : "Smá rómaratøl (i, ii, iii)",
+DlgLstTypeLRoman : "Stór rómaratøl (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Generelt",
+DlgDocBackTab : "Bakgrund",
+DlgDocColorsTab : "Litir og breddar",
+DlgDocMetaTab : "META-upplýsingar",
+
+DlgDocPageTitle : "Síðuheiti",
+DlgDocLangDir : "Tekstkós",
+DlgDocLangDirLTR : "Frá vinstru móti høgru (LTR)",
+DlgDocLangDirRTL : "Frá høgru móti vinstru (RTL)",
+DlgDocLangCode : "Málkoda",
+DlgDocCharSet : "Teknsett koda",
+DlgDocCharSetCE : "Miðeuropa",
+DlgDocCharSetCT : "Kinesiskt traditionelt (Big5)",
+DlgDocCharSetCR : "Cyrilliskt",
+DlgDocCharSetGR : "Grikst",
+DlgDocCharSetJP : "Japanskt",
+DlgDocCharSetKR : "Koreanskt",
+DlgDocCharSetTR : "Turkiskt",
+DlgDocCharSetUN : "UNICODE (UTF-8)",
+DlgDocCharSetWE : "Vestureuropa",
+DlgDocCharSetOther : "Onnur teknsett koda",
+
+DlgDocDocType : "Dokumentslag yvirskrift",
+DlgDocDocTypeOther : "Annað dokumentslag yvirskrift",
+DlgDocIncXHTML : "Viðfest XHTML deklaratiónir",
+DlgDocBgColor : "Bakgrundslitur",
+DlgDocBgImage : "Leið til bakgrundsmynd (URL)",
+DlgDocBgNoScroll : "Læst bakgrund (rullar ikki)",
+DlgDocCText : "Tekstur",
+DlgDocCLink : "Tilknýti",
+DlgDocCVisited : "Vitjaði tilknýti",
+DlgDocCActive : "Virkin tilknýti",
+DlgDocMargins : "Síðubreddar",
+DlgDocMaTop : "Ovast",
+DlgDocMaLeft : "Vinstra",
+DlgDocMaRight : "Høgra",
+DlgDocMaBottom : "Niðast",
+DlgDocMeIndex : "Dokument index lyklaorð (sundurbýtt við komma)",
+DlgDocMeDescr : "Dokumentlýsing",
+DlgDocMeAuthor : "Høvundur",
+DlgDocMeCopy : "Upphavsrættindi",
+DlgDocPreview : "Frumsýning",
+
+// Templates Dialog
+Templates : "Skabelónir",
+DlgTemplatesTitle : "Innihaldsskabelónir",
+DlgTemplatesSelMsg : "Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):",
+DlgTemplatesLoading : "Heinti yvirlit yvir skabelónir. Vinarliga bíða við...",
+DlgTemplatesNoTpl : "(Ongar skabelónir tøkar)",
+DlgTemplatesReplace : "Yvirskriva núverandi innihald",
+
+// About Dialog
+DlgAboutAboutTab : "Um",
+DlgAboutBrowserInfoTab : "Upplýsingar um alnótskagan",
+DlgAboutLicenseTab : "License",
+DlgAboutVersion : "version",
+DlgAboutInfo : "Fyri fleiri upplýsingar, far til",
+
+// Div Dialog
+DlgDivGeneralTab : "Generelt",
+DlgDivAdvancedTab : "Fjølbroytt",
+DlgDivStyle : "Typografi",
+DlgDivInlineStyle : "Inline typografi"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr-ca.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr-ca.js
new file mode 100644
index 0000000..9521c67
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr-ca.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Canadian French language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Masquer Outils",
+ToolbarExpand : "Afficher Outils",
+
+// Toolbar Items and Context Menu
+Save : "Sauvegarder",
+NewPage : "Nouvelle page",
+Preview : "Previsualiser",
+Cut : "Couper",
+Copy : "Copier",
+Paste : "Coller",
+PasteText : "Coller en tant que texte",
+PasteWord : "Coller en tant que Word (formaté)",
+Print : "Imprimer",
+SelectAll : "Tout sélectionner",
+RemoveFormat : "Supprimer le formatage",
+InsertLinkLbl : "Lien",
+InsertLink : "Insérer/modifier le lien",
+RemoveLink : "Supprimer le lien",
+VisitLink : "Suivre le lien",
+Anchor : "Insérer/modifier l'ancre",
+AnchorDelete : "Supprimer l'ancre",
+InsertImageLbl : "Image",
+InsertImage : "Insérer/modifier l'image",
+InsertFlashLbl : "Animation Flash",
+InsertFlash : "Insérer/modifier l'animation Flash",
+InsertTableLbl : "Tableau",
+InsertTable : "Insérer/modifier le tableau",
+InsertLineLbl : "Séparateur",
+InsertLine : "Insérer un séparateur",
+InsertSpecialCharLbl: "Caractères spéciaux",
+InsertSpecialChar : "Insérer un caractère spécial",
+InsertSmileyLbl : "Emoticon",
+InsertSmiley : "Insérer un Emoticon",
+About : "A propos de FCKeditor",
+Bold : "Gras",
+Italic : "Italique",
+Underline : "Souligné",
+StrikeThrough : "Barrer",
+Subscript : "Indice",
+Superscript : "Exposant",
+LeftJustify : "Aligner à gauche",
+CenterJustify : "Centrer",
+RightJustify : "Aligner à Droite",
+BlockJustify : "Texte justifié",
+DecreaseIndent : "Diminuer le retrait",
+IncreaseIndent : "Augmenter le retrait",
+Blockquote : "Citation",
+CreateDiv : "Créer Balise Div",
+EditDiv : "Modifier Balise Div",
+DeleteDiv : "Supprimer Balise Div",
+Undo : "Annuler",
+Redo : "Refaire",
+NumberedListLbl : "Liste numérotée",
+NumberedList : "Insérer/supprimer la liste numérotée",
+BulletedListLbl : "Liste à puces",
+BulletedList : "Insérer/supprimer la liste à puces",
+ShowTableBorders : "Afficher les bordures du tableau",
+ShowDetails : "Afficher les caractères invisibles",
+Style : "Style",
+FontFormat : "Format",
+Font : "Police",
+FontSize : "Taille",
+TextColor : "Couleur de caractère",
+BGColor : "Couleur de fond",
+Source : "Source",
+Find : "Chercher",
+Replace : "Remplacer",
+SpellCheck : "Orthographe",
+UniversalKeyboard : "Clavier universel",
+PageBreakLbl : "Saut de page",
+PageBreak : "Insérer un saut de page",
+
+Form : "Formulaire",
+Checkbox : "Case à cocher",
+RadioButton : "Bouton radio",
+TextField : "Champ texte",
+Textarea : "Zone de texte",
+HiddenField : "Champ caché",
+Button : "Bouton",
+SelectionField : "Champ de sélection",
+ImageButton : "Bouton image",
+
+FitWindow : "Edition pleine page",
+ShowBlocks : "Afficher les blocs",
+
+// Context Menu
+EditLink : "Modifier le lien",
+CellCM : "Cellule",
+RowCM : "Ligne",
+ColumnCM : "Colonne",
+InsertRowAfter : "Insérer une ligne après",
+InsertRowBefore : "Insérer une ligne avant",
+DeleteRows : "Supprimer des lignes",
+InsertColumnAfter : "Insérer une colonne après",
+InsertColumnBefore : "Insérer une colonne avant",
+DeleteColumns : "Supprimer des colonnes",
+InsertCellAfter : "Insérer une cellule après",
+InsertCellBefore : "Insérer une cellule avant",
+DeleteCells : "Supprimer des cellules",
+MergeCells : "Fusionner les cellules",
+MergeRight : "Fusionner à droite",
+MergeDown : "Fusionner en bas",
+HorizontalSplitCell : "Scinder la cellule horizontalement",
+VerticalSplitCell : "Scinder la cellule verticalement",
+TableDelete : "Supprimer le tableau",
+CellProperties : "Propriétés de cellule",
+TableProperties : "Propriétés du tableau",
+ImageProperties : "Propriétés de l'image",
+FlashProperties : "Propriétés de l'animation Flash",
+
+AnchorProp : "Propriétés de l'ancre",
+ButtonProp : "Propriétés du bouton",
+CheckboxProp : "Propriétés de la case à cocher",
+HiddenFieldProp : "Propriétés du champ caché",
+RadioButtonProp : "Propriétés du bouton radio",
+ImageButtonProp : "Propriétés du bouton image",
+TextFieldProp : "Propriétés du champ texte",
+SelectionFieldProp : "Propriétés de la liste/du menu",
+TextareaProp : "Propriétés de la zone de texte",
+FormProp : "Propriétés du formulaire",
+
+FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Calcul XHTML. Veuillez patienter...",
+Done : "Terminé",
+PasteWordConfirm : "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?",
+NotCompatiblePaste : "Cette commande nécessite Internet Explorer version 5.5 et plus. Souhaitez-vous coller sans nettoyage?",
+UnknownToolbarItem : "Élément de barre d'outil inconnu \"%1\"",
+UnknownCommand : "Nom de commande inconnu \"%1\"",
+NotImplemented : "Commande indisponible",
+UnknownToolbarSet : "La barre d'outils \"%1\" n'existe pas",
+NoActiveX : "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.",
+BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.",
+DialogBlocked : "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Annuler",
+DlgBtnClose : "Fermer",
+DlgBtnBrowseServer : "Parcourir le serveur",
+DlgAdvancedTag : "Avancée",
+DlgOpOther : "<autre>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Veuillez saisir l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<Par défaut>",
+DlgGenId : "Id",
+DlgGenLangDir : "Sens d'écriture",
+DlgGenLangDirLtr : "De gauche à droite (LTR)",
+DlgGenLangDirRtl : "De droite à gauche (RTL)",
+DlgGenLangCode : "Code langue",
+DlgGenAccessKey : "Équivalent clavier",
+DlgGenName : "Nom",
+DlgGenTabIndex : "Ordre de tabulation",
+DlgGenLongDescr : "URL de description longue",
+DlgGenClass : "Classes de feuilles de style",
+DlgGenTitle : "Titre",
+DlgGenContType : "Type de contenu",
+DlgGenLinkCharset : "Encodage de caractère",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Propriétés de l'image",
+DlgImgInfoTab : "Informations sur l'image",
+DlgImgBtnUpload : "Envoyer sur le serveur",
+DlgImgURL : "URL",
+DlgImgUpload : "Télécharger",
+DlgImgAlt : "Texte de remplacement",
+DlgImgWidth : "Largeur",
+DlgImgHeight : "Hauteur",
+DlgImgLockRatio : "Garder les proportions",
+DlgBtnResetSize : "Taille originale",
+DlgImgBorder : "Bordure",
+DlgImgHSpace : "Espacement horizontal",
+DlgImgVSpace : "Espacement vertical",
+DlgImgAlign : "Alignement",
+DlgImgAlignLeft : "Gauche",
+DlgImgAlignAbsBottom: "Abs Bas",
+DlgImgAlignAbsMiddle: "Abs Milieu",
+DlgImgAlignBaseline : "Bas du texte",
+DlgImgAlignBottom : "Bas",
+DlgImgAlignMiddle : "Milieu",
+DlgImgAlignRight : "Droite",
+DlgImgAlignTextTop : "Haut du texte",
+DlgImgAlignTop : "Haut",
+DlgImgPreview : "Prévisualisation",
+DlgImgAlertUrl : "Veuillez saisir l'URL de l'image",
+DlgImgLinkTab : "Lien",
+
+// Flash Dialog
+DlgFlashTitle : "Propriétés de l'animation Flash",
+DlgFlashChkPlay : "Lecture automatique",
+DlgFlashChkLoop : "Boucle",
+DlgFlashChkMenu : "Activer le menu Flash",
+DlgFlashScale : "Affichage",
+DlgFlashScaleAll : "Par défaut (tout montrer)",
+DlgFlashScaleNoBorder : "Sans bordure",
+DlgFlashScaleFit : "Ajuster aux dimensions",
+
+// Link Dialog
+DlgLnkWindowTitle : "Propriétés du lien",
+DlgLnkInfoTab : "Informations sur le lien",
+DlgLnkTargetTab : "Destination",
+
+DlgLnkType : "Type de lien",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ancre dans cette page",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocole",
+DlgLnkProtoOther : "<autre>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Sélectionner une ancre",
+DlgLnkAnchorByName : "Par nom",
+DlgLnkAnchorById : "Par id",
+DlgLnkNoAnchors : "(Pas d'ancre disponible dans le document)",
+DlgLnkEMail : "Adresse E-Mail",
+DlgLnkEMailSubject : "Sujet du message",
+DlgLnkEMailBody : "Corps du message",
+DlgLnkUpload : "Télécharger",
+DlgLnkBtnUpload : "Envoyer sur le serveur",
+
+DlgLnkTarget : "Destination",
+DlgLnkTargetFrame : "<Cadre>",
+DlgLnkTargetPopup : "<fenêtre popup>",
+DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)",
+DlgLnkTargetParent : "Fenêtre mère (_parent)",
+DlgLnkTargetSelf : "Même fenêtre (_self)",
+DlgLnkTargetTop : "Fenêtre supérieure (_top)",
+DlgLnkTargetFrameName : "Nom du cadre de destination",
+DlgLnkPopWinName : "Nom de la fenêtre popup",
+DlgLnkPopWinFeat : "Caractéristiques de la fenêtre popup",
+DlgLnkPopResize : "Taille modifiable",
+DlgLnkPopLocation : "Barre d'adresses",
+DlgLnkPopMenu : "Barre de menu",
+DlgLnkPopScroll : "Barres de défilement",
+DlgLnkPopStatus : "Barre d'état",
+DlgLnkPopToolbar : "Barre d'outils",
+DlgLnkPopFullScrn : "Plein écran (IE)",
+DlgLnkPopDependent : "Dépendante (Netscape)",
+DlgLnkPopWidth : "Largeur",
+DlgLnkPopHeight : "Hauteur",
+DlgLnkPopLeft : "Position à partir de la gauche",
+DlgLnkPopTop : "Position à partir du haut",
+
+DlnLnkMsgNoUrl : "Veuillez saisir l'URL",
+DlnLnkMsgNoEMail : "Veuillez saisir l'adresse e-mail",
+DlnLnkMsgNoAnchor : "Veuillez sélectionner une ancre",
+DlnLnkMsgInvPopName : "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace",
+
+// Color Dialog
+DlgColorTitle : "Sélectionner",
+DlgColorBtnClear : "Effacer",
+DlgColorHighlight : "Prévisualisation",
+DlgColorSelected : "Sélectionné",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insérer un Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Insérer un caractère spécial",
+
+// Table Dialog
+DlgTableTitle : "Propriétés du tableau",
+DlgTableRows : "Lignes",
+DlgTableColumns : "Colonnes",
+DlgTableBorder : "Taille de la bordure",
+DlgTableAlign : "Alignement",
+DlgTableAlignNotSet : "<Par défaut>",
+DlgTableAlignLeft : "Gauche",
+DlgTableAlignCenter : "Centré",
+DlgTableAlignRight : "Droite",
+DlgTableWidth : "Largeur",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "pourcentage",
+DlgTableHeight : "Hauteur",
+DlgTableCellSpace : "Espacement",
+DlgTableCellPad : "Contour",
+DlgTableCaption : "Titre",
+DlgTableSummary : "Résumé",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Propriétés de la cellule",
+DlgCellWidth : "Largeur",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "pourcentage",
+DlgCellHeight : "Hauteur",
+DlgCellWordWrap : "Retour à la ligne",
+DlgCellWordWrapNotSet : "<Par défaut>",
+DlgCellWordWrapYes : "Oui",
+DlgCellWordWrapNo : "Non",
+DlgCellHorAlign : "Alignement horizontal",
+DlgCellHorAlignNotSet : "<Par défaut>",
+DlgCellHorAlignLeft : "Gauche",
+DlgCellHorAlignCenter : "Centré",
+DlgCellHorAlignRight: "Droite",
+DlgCellVerAlign : "Alignement vertical",
+DlgCellVerAlignNotSet : "<Par défaut>",
+DlgCellVerAlignTop : "Haut",
+DlgCellVerAlignMiddle : "Milieu",
+DlgCellVerAlignBottom : "Bas",
+DlgCellVerAlignBaseline : "Bas du texte",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Lignes fusionnées",
+DlgCellCollSpan : "Colonnes fusionnées",
+DlgCellBackColor : "Couleur de fond",
+DlgCellBorderColor : "Couleur de bordure",
+DlgCellBtnSelect : "Sélectionner...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Chercher et Remplacer",
+
+// Find Dialog
+DlgFindTitle : "Chercher",
+DlgFindFindBtn : "Chercher",
+DlgFindNotFoundMsg : "Le texte indiqué est introuvable.",
+
+// Replace Dialog
+DlgReplaceTitle : "Remplacer",
+DlgReplaceFindLbl : "Rechercher:",
+DlgReplaceReplaceLbl : "Remplacer par:",
+DlgReplaceCaseChk : "Respecter la casse",
+DlgReplaceReplaceBtn : "Remplacer",
+DlgReplaceReplAllBtn : "Tout remplacer",
+DlgReplaceWordChk : "Mot entier",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).",
+PasteErrorCopy : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).",
+
+PasteAsText : "Coller comme texte",
+PasteFromWord : "Coller à partir de Word",
+
+DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.",
+DlgPasteSec : "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.",
+DlgPasteIgnoreFont : "Ignorer les polices de caractères",
+DlgPasteRemoveStyles : "Supprimer les styles",
+
+// Color Picker
+ColorAutomatic : "Automatique",
+ColorMoreColors : "Plus de couleurs...",
+
+// Document Properties
+DocProps : "Propriétés du document",
+
+// Anchor Dialog
+DlgAnchorTitle : "Propriétés de l'ancre",
+DlgAnchorName : "Nom de l'ancre",
+DlgAnchorErrorName : "Veuillez saisir le nom de l'ancre",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Pas dans le dictionnaire",
+DlgSpellChangeTo : "Changer en",
+DlgSpellBtnIgnore : "Ignorer",
+DlgSpellBtnIgnoreAll : "Ignorer tout",
+DlgSpellBtnReplace : "Remplacer",
+DlgSpellBtnReplaceAll : "Remplacer tout",
+DlgSpellBtnUndo : "Annuler",
+DlgSpellNoSuggestions : "- Pas de suggestion -",
+DlgSpellProgress : "Vérification d'orthographe en cours...",
+DlgSpellNoMispell : "Vérification d'orthographe terminée: pas d'erreur trouvée",
+DlgSpellNoChanges : "Vérification d'orthographe terminée: Pas de modifications",
+DlgSpellOneChange : "Vérification d'orthographe terminée: Un mot modifié",
+DlgSpellManyChanges : "Vérification d'orthographe terminée: %1 mots modifiés",
+
+IeSpellDownload : "Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?",
+
+// Button Dialog
+DlgButtonText : "Texte (Valeur)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Bouton",
+DlgButtonTypeSbm : "Soumettre",
+DlgButtonTypeRst : "Réinitialiser",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nom",
+DlgCheckboxValue : "Valeur",
+DlgCheckboxSelected : "Sélectionné",
+
+// Form Dialog
+DlgFormName : "Nom",
+DlgFormAction : "Action",
+DlgFormMethod : "Méthode",
+
+// Select Field Dialog
+DlgSelectName : "Nom",
+DlgSelectValue : "Valeur",
+DlgSelectSize : "Taille",
+DlgSelectLines : "lignes",
+DlgSelectChkMulti : "Sélection multiple",
+DlgSelectOpAvail : "Options disponibles",
+DlgSelectOpText : "Texte",
+DlgSelectOpValue : "Valeur",
+DlgSelectBtnAdd : "Ajouter",
+DlgSelectBtnModify : "Modifier",
+DlgSelectBtnUp : "Monter",
+DlgSelectBtnDown : "Descendre",
+DlgSelectBtnSetValue : "Valeur sélectionnée",
+DlgSelectBtnDelete : "Supprimer",
+
+// Textarea Dialog
+DlgTextareaName : "Nom",
+DlgTextareaCols : "Colonnes",
+DlgTextareaRows : "Lignes",
+
+// Text Field Dialog
+DlgTextName : "Nom",
+DlgTextValue : "Valeur",
+DlgTextCharWidth : "Largeur en caractères",
+DlgTextMaxChars : "Nombre maximum de caractères",
+DlgTextType : "Type",
+DlgTextTypeText : "Texte",
+DlgTextTypePass : "Mot de passe",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nom",
+DlgHiddenValue : "Valeur",
+
+// Bulleted List Dialog
+BulletedListProp : "Propriétés de liste à puces",
+NumberedListProp : "Propriétés de liste numérotée",
+DlgLstStart : "Début",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Cercle",
+DlgLstTypeDisc : "Disque",
+DlgLstTypeSquare : "Carré",
+DlgLstTypeNumbers : "Nombres (1, 2, 3)",
+DlgLstTypeLCase : "Lettres minuscules (a, b, c)",
+DlgLstTypeUCase : "Lettres majuscules (A, B, C)",
+DlgLstTypeSRoman : "Chiffres romains minuscules (i, ii, iii)",
+DlgLstTypeLRoman : "Chiffres romains majuscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Général",
+DlgDocBackTab : "Fond",
+DlgDocColorsTab : "Couleurs et Marges",
+DlgDocMetaTab : "Méta-Données",
+
+DlgDocPageTitle : "Titre de la page",
+DlgDocLangDir : "Sens d'écriture",
+DlgDocLangDirLTR : "De la gauche vers la droite (LTR)",
+DlgDocLangDirRTL : "De la droite vers la gauche (RTL)",
+DlgDocLangCode : "Code langue",
+DlgDocCharSet : "Encodage de caractère",
+DlgDocCharSetCE : "Europe Centrale",
+DlgDocCharSetCT : "Chinois Traditionnel (Big5)",
+DlgDocCharSetCR : "Cyrillique",
+DlgDocCharSetGR : "Grecque",
+DlgDocCharSetJP : "Japonais",
+DlgDocCharSetKR : "Coréen",
+DlgDocCharSetTR : "Turcque",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Occidental",
+DlgDocCharSetOther : "Autre encodage de caractère",
+
+DlgDocDocType : "Type de document",
+DlgDocDocTypeOther : "Autre type de document",
+DlgDocIncXHTML : "Inclure les déclarations XHTML",
+DlgDocBgColor : "Couleur de fond",
+DlgDocBgImage : "Image de fond",
+DlgDocBgNoScroll : "Image fixe sans défilement",
+DlgDocCText : "Texte",
+DlgDocCLink : "Lien",
+DlgDocCVisited : "Lien visité",
+DlgDocCActive : "Lien activé",
+DlgDocMargins : "Marges",
+DlgDocMaTop : "Haut",
+DlgDocMaLeft : "Gauche",
+DlgDocMaRight : "Droite",
+DlgDocMaBottom : "Bas",
+DlgDocMeIndex : "Mots-clés (séparés par des virgules)",
+DlgDocMeDescr : "Description",
+DlgDocMeAuthor : "Auteur",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Prévisualisation",
+
+// Templates Dialog
+Templates : "Modèles",
+DlgTemplatesTitle : "Modèles de contenu",
+DlgTemplatesSelMsg : "Sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",
+DlgTemplatesLoading : "Chargement de la liste des modèles. Veuillez patienter...",
+DlgTemplatesNoTpl : "(Aucun modèle disponible)",
+DlgTemplatesReplace : "Remplacer tout le contenu actuel",
+
+// About Dialog
+DlgAboutAboutTab : "Ã propos de",
+DlgAboutBrowserInfoTab : "Navigateur",
+DlgAboutLicenseTab : "License",
+DlgAboutVersion : "Version",
+DlgAboutInfo : "Pour plus d'informations, visiter",
+
+// Div Dialog
+DlgDivGeneralTab : "Général",
+DlgDivAdvancedTab : "Avancé",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Attribut Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr.js
new file mode 100644
index 0000000..935f8f7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * French language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Masquer Outils",
+ToolbarExpand : "Afficher Outils",
+
+// Toolbar Items and Context Menu
+Save : "Enregistrer",
+NewPage : "Nouvelle page",
+Preview : "Prévisualisation",
+Cut : "Couper",
+Copy : "Copier",
+Paste : "Coller",
+PasteText : "Coller comme texte",
+PasteWord : "Coller de Word",
+Print : "Imprimer",
+SelectAll : "Tout sélectionner",
+RemoveFormat : "Supprimer le format",
+InsertLinkLbl : "Lien",
+InsertLink : "Insérer/modifier le lien",
+RemoveLink : "Supprimer le lien",
+VisitLink : "Suivre le lien",
+Anchor : "Insérer/modifier l'ancre",
+AnchorDelete : "Supprimer l'ancre",
+InsertImageLbl : "Image",
+InsertImage : "Insérer/modifier l'image",
+InsertFlashLbl : "Animation Flash",
+InsertFlash : "Insérer/modifier l'animation Flash",
+InsertTableLbl : "Tableau",
+InsertTable : "Insérer/modifier le tableau",
+InsertLineLbl : "Séparateur",
+InsertLine : "Insérer un séparateur",
+InsertSpecialCharLbl: "Caractères spéciaux",
+InsertSpecialChar : "Insérer un caractère spécial",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Insérer un Smiley",
+About : "A propos de FCKeditor",
+Bold : "Gras",
+Italic : "Italique",
+Underline : "Souligné",
+StrikeThrough : "Barré",
+Subscript : "Indice",
+Superscript : "Exposant",
+LeftJustify : "Aligné à gauche",
+CenterJustify : "Centré",
+RightJustify : "Aligné à Droite",
+BlockJustify : "Texte justifié",
+DecreaseIndent : "Diminuer le retrait",
+IncreaseIndent : "Augmenter le retrait",
+Blockquote : "Citation",
+CreateDiv : "Créer Balise Div",
+EditDiv : "Modifier Balise Div",
+DeleteDiv : "Supprimer Balise Div",
+Undo : "Annuler",
+Redo : "Refaire",
+NumberedListLbl : "Liste numérotée",
+NumberedList : "Insérer/supprimer la liste numérotée",
+BulletedListLbl : "Liste à puces",
+BulletedList : "Insérer/supprimer la liste à puces",
+ShowTableBorders : "Afficher les bordures du tableau",
+ShowDetails : "Afficher les caractères invisibles",
+Style : "Style",
+FontFormat : "Format",
+Font : "Police",
+FontSize : "Taille",
+TextColor : "Couleur de caractère",
+BGColor : "Couleur de fond",
+Source : "Source",
+Find : "Chercher",
+Replace : "Remplacer",
+SpellCheck : "Orthographe",
+UniversalKeyboard : "Clavier universel",
+PageBreakLbl : "Saut de page",
+PageBreak : "Insérer un saut de page",
+
+Form : "Formulaire",
+Checkbox : "Case à cocher",
+RadioButton : "Bouton radio",
+TextField : "Champ texte",
+Textarea : "Zone de texte",
+HiddenField : "Champ caché",
+Button : "Bouton",
+SelectionField : "Liste/menu",
+ImageButton : "Bouton image",
+
+FitWindow : "Edition pleine page",
+ShowBlocks : "Afficher les blocs",
+
+// Context Menu
+EditLink : "Modifier le lien",
+CellCM : "Cellule",
+RowCM : "Ligne",
+ColumnCM : "Colonne",
+InsertRowAfter : "Insérer une ligne après",
+InsertRowBefore : "Insérer une ligne avant",
+DeleteRows : "Supprimer des lignes",
+InsertColumnAfter : "Insérer une colonne après",
+InsertColumnBefore : "Insérer une colonne avant",
+DeleteColumns : "Supprimer des colonnes",
+InsertCellAfter : "Insérer une cellule après",
+InsertCellBefore : "Insérer une cellule avant",
+DeleteCells : "Supprimer des cellules",
+MergeCells : "Fusionner les cellules",
+MergeRight : "Fusionner à droite",
+MergeDown : "Fusionner en bas",
+HorizontalSplitCell : "Scinder la cellule horizontalement",
+VerticalSplitCell : "Scinder la cellule verticalement",
+TableDelete : "Supprimer le tableau",
+CellProperties : "Propriétés de cellule",
+TableProperties : "Propriétés du tableau",
+ImageProperties : "Propriétés de l'image",
+FlashProperties : "Propriétés de l'animation Flash",
+
+AnchorProp : "Propriétés de l'ancre",
+ButtonProp : "Propriétés du bouton",
+CheckboxProp : "Propriétés de la case à cocher",
+HiddenFieldProp : "Propriétés du champ caché",
+RadioButtonProp : "Propriétés du bouton radio",
+ImageButtonProp : "Propriétés du bouton image",
+TextFieldProp : "Propriétés du champ texte",
+SelectionFieldProp : "Propriétés de la liste/du menu",
+TextareaProp : "Propriétés de la zone de texte",
+FormProp : "Propriétés du formulaire",
+
+FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Calcul XHTML. Veuillez patienter...",
+Done : "Terminé",
+PasteWordConfirm : "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?",
+NotCompatiblePaste : "Cette commande nécessite Internet Explorer version 5.5 minimum. Souhaitez-vous coller sans nettoyage?",
+UnknownToolbarItem : "Elément de barre d'outil inconnu \"%1\"",
+UnknownCommand : "Nom de commande inconnu \"%1\"",
+NotImplemented : "Commande non encore écrite",
+UnknownToolbarSet : "La barre d'outils \"%1\" n'existe pas",
+NoActiveX : "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.",
+BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.",
+DialogBlocked : "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.",
+VisitLinkBlocked : "Impossible d'ouvrir une nouvelle fenêtre. Assurez-vous que les bloqueurs de popups soient désactivés.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Annuler",
+DlgBtnClose : "Fermer",
+DlgBtnBrowseServer : "Parcourir le serveur",
+DlgAdvancedTag : "Avancé",
+DlgOpOther : "<Autre>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Veuillez saisir l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<Par défaut>",
+DlgGenId : "Id",
+DlgGenLangDir : "Sens d'écriture",
+DlgGenLangDirLtr : "De gauche à droite (LTR)",
+DlgGenLangDirRtl : "De droite à gauche (RTL)",
+DlgGenLangCode : "Code langue",
+DlgGenAccessKey : "Equivalent clavier",
+DlgGenName : "Nom",
+DlgGenTabIndex : "Ordre de tabulation",
+DlgGenLongDescr : "URL de description longue",
+DlgGenClass : "Classes de feuilles de style",
+DlgGenTitle : "Titre",
+DlgGenContType : "Type de contenu",
+DlgGenLinkCharset : "Encodage de caractère",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Propriétés de l'image",
+DlgImgInfoTab : "Informations sur l'image",
+DlgImgBtnUpload : "Envoyer sur le serveur",
+DlgImgURL : "URL",
+DlgImgUpload : "Télécharger",
+DlgImgAlt : "Texte de remplacement",
+DlgImgWidth : "Largeur",
+DlgImgHeight : "Hauteur",
+DlgImgLockRatio : "Garder les proportions",
+DlgBtnResetSize : "Taille originale",
+DlgImgBorder : "Bordure",
+DlgImgHSpace : "Espacement horizontal",
+DlgImgVSpace : "Espacement vertical",
+DlgImgAlign : "Alignement",
+DlgImgAlignLeft : "Gauche",
+DlgImgAlignAbsBottom: "Abs Bas",
+DlgImgAlignAbsMiddle: "Abs Milieu",
+DlgImgAlignBaseline : "Bas du texte",
+DlgImgAlignBottom : "Bas",
+DlgImgAlignMiddle : "Milieu",
+DlgImgAlignRight : "Droite",
+DlgImgAlignTextTop : "Haut du texte",
+DlgImgAlignTop : "Haut",
+DlgImgPreview : "Prévisualisation",
+DlgImgAlertUrl : "Veuillez saisir l'URL de l'image",
+DlgImgLinkTab : "Lien",
+
+// Flash Dialog
+DlgFlashTitle : "Propriétés de l'animation Flash",
+DlgFlashChkPlay : "Lecture automatique",
+DlgFlashChkLoop : "Boucle",
+DlgFlashChkMenu : "Activer le menu Flash",
+DlgFlashScale : "Affichage",
+DlgFlashScaleAll : "Par défaut (tout montrer)",
+DlgFlashScaleNoBorder : "Sans bordure",
+DlgFlashScaleFit : "Ajuster aux dimensions",
+
+// Link Dialog
+DlgLnkWindowTitle : "Propriétés du lien",
+DlgLnkInfoTab : "Informations sur le lien",
+DlgLnkTargetTab : "Destination",
+
+DlgLnkType : "Type de lien",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ancre dans cette page",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocole",
+DlgLnkProtoOther : "<autre>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Sélectionner une ancre",
+DlgLnkAnchorByName : "Par nom",
+DlgLnkAnchorById : "Par id",
+DlgLnkNoAnchors : "(Pas d'ancre disponible dans le document)",
+DlgLnkEMail : "Adresse E-Mail",
+DlgLnkEMailSubject : "Sujet du message",
+DlgLnkEMailBody : "Corps du message",
+DlgLnkUpload : "Télécharger",
+DlgLnkBtnUpload : "Envoyer sur le serveur",
+
+DlgLnkTarget : "Destination",
+DlgLnkTargetFrame : "<Cadre>",
+DlgLnkTargetPopup : "<fenêtre popup>",
+DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)",
+DlgLnkTargetParent : "Fenêtre mère (_parent)",
+DlgLnkTargetSelf : "Même fenêtre (_self)",
+DlgLnkTargetTop : "Fenêtre supérieure (_top)",
+DlgLnkTargetFrameName : "Nom du cadre de destination",
+DlgLnkPopWinName : "Nom de la fenêtre popup",
+DlgLnkPopWinFeat : "Caractéristiques de la fenêtre popup",
+DlgLnkPopResize : "Taille modifiable",
+DlgLnkPopLocation : "Barre d'adresses",
+DlgLnkPopMenu : "Barre de menu",
+DlgLnkPopScroll : "Barres de défilement",
+DlgLnkPopStatus : "Barre d'état",
+DlgLnkPopToolbar : "Barre d'outils",
+DlgLnkPopFullScrn : "Plein écran (IE)",
+DlgLnkPopDependent : "Dépendante (Netscape)",
+DlgLnkPopWidth : "Largeur",
+DlgLnkPopHeight : "Hauteur",
+DlgLnkPopLeft : "Position à partir de la gauche",
+DlgLnkPopTop : "Position à partir du haut",
+
+DlnLnkMsgNoUrl : "Veuillez saisir l'URL",
+DlnLnkMsgNoEMail : "Veuillez saisir l'adresse e-mail",
+DlnLnkMsgNoAnchor : "Veuillez sélectionner une ancre",
+DlnLnkMsgInvPopName : "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace",
+
+// Color Dialog
+DlgColorTitle : "Sélectionner",
+DlgColorBtnClear : "Effacer",
+DlgColorHighlight : "Prévisualisation",
+DlgColorSelected : "Sélectionné",
+
+// Smiley Dialog
+DlgSmileyTitle : "Insérer un Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Insérer un caractère spécial",
+
+// Table Dialog
+DlgTableTitle : "Propriétés du tableau",
+DlgTableRows : "Lignes",
+DlgTableColumns : "Colonnes",
+DlgTableBorder : "Bordure",
+DlgTableAlign : "Alignement",
+DlgTableAlignNotSet : "<Par défaut>",
+DlgTableAlignLeft : "Gauche",
+DlgTableAlignCenter : "Centré",
+DlgTableAlignRight : "Droite",
+DlgTableWidth : "Largeur",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "pourcentage",
+DlgTableHeight : "Hauteur",
+DlgTableCellSpace : "Espacement",
+DlgTableCellPad : "Contour",
+DlgTableCaption : "Titre",
+DlgTableSummary : "Résumé",
+DlgTableHeaders : "Entêtes",
+DlgTableHeadersNone : "Sans",
+DlgTableHeadersColumn : "Première colonne",
+DlgTableHeadersRow : "Première Ligne",
+DlgTableHeadersBoth : "Les 2",
+
+// Table Cell Dialog
+DlgCellTitle : "Propriétés de la cellule",
+DlgCellWidth : "Largeur",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "pourcentage",
+DlgCellHeight : "Hauteur",
+DlgCellWordWrap : "Retour à la ligne",
+DlgCellWordWrapNotSet : "<Par défaut>",
+DlgCellWordWrapYes : "Oui",
+DlgCellWordWrapNo : "Non",
+DlgCellHorAlign : "Alignement horizontal",
+DlgCellHorAlignNotSet : "<Par défaut>",
+DlgCellHorAlignLeft : "Gauche",
+DlgCellHorAlignCenter : "Centré",
+DlgCellHorAlignRight: "Droite",
+DlgCellVerAlign : "Alignement vertical",
+DlgCellVerAlignNotSet : "<Par défaut>",
+DlgCellVerAlignTop : "Haut",
+DlgCellVerAlignMiddle : "Milieu",
+DlgCellVerAlignBottom : "Bas",
+DlgCellVerAlignBaseline : "Bas du texte",
+DlgCellType : "Type de Cellule",
+DlgCellTypeData : "Données",
+DlgCellTypeHeader : "Entête",
+DlgCellRowSpan : "Lignes fusionnées",
+DlgCellCollSpan : "Colonnes fusionnées",
+DlgCellBackColor : "Fond",
+DlgCellBorderColor : "Bordure",
+DlgCellBtnSelect : "Choisir...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Chercher et Remplacer",
+
+// Find Dialog
+DlgFindTitle : "Chercher",
+DlgFindFindBtn : "Chercher",
+DlgFindNotFoundMsg : "Le texte indiqué est introuvable.",
+
+// Replace Dialog
+DlgReplaceTitle : "Remplacer",
+DlgReplaceFindLbl : "Rechercher:",
+DlgReplaceReplaceLbl : "Remplacer par:",
+DlgReplaceCaseChk : "Respecter la casse",
+DlgReplaceReplaceBtn : "Remplacer",
+DlgReplaceReplAllBtn : "Tout remplacer",
+DlgReplaceWordChk : "Mot entier",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).",
+PasteErrorCopy : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).",
+
+PasteAsText : "Coller comme texte",
+PasteFromWord : "Coller à partir de Word",
+
+DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et cliquez sur <STRONG>OK</STRONG>.",
+DlgPasteSec : "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.",
+DlgPasteIgnoreFont : "Ignorer les polices de caractères",
+DlgPasteRemoveStyles : "Supprimer les styles",
+
+// Color Picker
+ColorAutomatic : "Automatique",
+ColorMoreColors : "Plus de couleurs...",
+
+// Document Properties
+DocProps : "Propriétés du document",
+
+// Anchor Dialog
+DlgAnchorTitle : "Propriétés de l'ancre",
+DlgAnchorName : "Nom de l'ancre",
+DlgAnchorErrorName : "Veuillez saisir le nom de l'ancre",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Pas dans le dictionnaire",
+DlgSpellChangeTo : "Changer en",
+DlgSpellBtnIgnore : "Ignorer",
+DlgSpellBtnIgnoreAll : "Ignorer tout",
+DlgSpellBtnReplace : "Remplacer",
+DlgSpellBtnReplaceAll : "Remplacer tout",
+DlgSpellBtnUndo : "Annuler",
+DlgSpellNoSuggestions : "- Aucune suggestion -",
+DlgSpellProgress : "Vérification d'orthographe en cours...",
+DlgSpellNoMispell : "Vérification d'orthographe terminée: Aucune erreur trouvée",
+DlgSpellNoChanges : "Vérification d'orthographe terminée: Pas de modifications",
+DlgSpellOneChange : "Vérification d'orthographe terminée: Un mot modifié",
+DlgSpellManyChanges : "Vérification d'orthographe terminée: %1 mots modifiés",
+
+IeSpellDownload : "Le Correcteur n'est pas installé. Souhaitez-vous le télécharger maintenant?",
+
+// Button Dialog
+DlgButtonText : "Texte (valeur)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Bouton",
+DlgButtonTypeSbm : "Envoyer",
+DlgButtonTypeRst : "Réinitialiser",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nom",
+DlgCheckboxValue : "Valeur",
+DlgCheckboxSelected : "Sélectionné",
+
+// Form Dialog
+DlgFormName : "Nom",
+DlgFormAction : "Action",
+DlgFormMethod : "Méthode",
+
+// Select Field Dialog
+DlgSelectName : "Nom",
+DlgSelectValue : "Valeur",
+DlgSelectSize : "Taille",
+DlgSelectLines : "lignes",
+DlgSelectChkMulti : "Sélection multiple",
+DlgSelectOpAvail : "Options disponibles",
+DlgSelectOpText : "Texte",
+DlgSelectOpValue : "Valeur",
+DlgSelectBtnAdd : "Ajouter",
+DlgSelectBtnModify : "Modifier",
+DlgSelectBtnUp : "Monter",
+DlgSelectBtnDown : "Descendre",
+DlgSelectBtnSetValue : "Valeur sélectionnée",
+DlgSelectBtnDelete : "Supprimer",
+
+// Textarea Dialog
+DlgTextareaName : "Nom",
+DlgTextareaCols : "Colonnes",
+DlgTextareaRows : "Lignes",
+
+// Text Field Dialog
+DlgTextName : "Nom",
+DlgTextValue : "Valeur",
+DlgTextCharWidth : "Largeur en caractères",
+DlgTextMaxChars : "Nombre maximum de caractères",
+DlgTextType : "Type",
+DlgTextTypeText : "Texte",
+DlgTextTypePass : "Mot de passe",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nom",
+DlgHiddenValue : "Valeur",
+
+// Bulleted List Dialog
+BulletedListProp : "Propriétés de liste à puces",
+NumberedListProp : "Propriétés de liste numérotée",
+DlgLstStart : "Début",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Cercle",
+DlgLstTypeDisc : "Disque",
+DlgLstTypeSquare : "Carré",
+DlgLstTypeNumbers : "Nombres (1, 2, 3)",
+DlgLstTypeLCase : "Lettres minuscules (a, b, c)",
+DlgLstTypeUCase : "Lettres majuscules (A, B, C)",
+DlgLstTypeSRoman : "Chiffres romains minuscules (i, ii, iii)",
+DlgLstTypeLRoman : "Chiffres romains majuscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Général",
+DlgDocBackTab : "Fond",
+DlgDocColorsTab : "Couleurs et marges",
+DlgDocMetaTab : "Métadonnées",
+
+DlgDocPageTitle : "Titre de la page",
+DlgDocLangDir : "Sens d'écriture",
+DlgDocLangDirLTR : "De la gauche vers la droite (LTR)",
+DlgDocLangDirRTL : "De la droite vers la gauche (RTL)",
+DlgDocLangCode : "Code langue",
+DlgDocCharSet : "Encodage de caractère",
+DlgDocCharSetCE : "Europe Centrale",
+DlgDocCharSetCT : "Chinois Traditionnel (Big5)",
+DlgDocCharSetCR : "Cyrillique",
+DlgDocCharSetGR : "Grec",
+DlgDocCharSetJP : "Japonais",
+DlgDocCharSetKR : "Coréen",
+DlgDocCharSetTR : "Turc",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Occidental",
+DlgDocCharSetOther : "Autre encodage de caractère",
+
+DlgDocDocType : "Type de document",
+DlgDocDocTypeOther : "Autre type de document",
+DlgDocIncXHTML : "Inclure les déclarations XHTML",
+DlgDocBgColor : "Couleur de fond",
+DlgDocBgImage : "Image de fond",
+DlgDocBgNoScroll : "Image fixe sans défilement",
+DlgDocCText : "Texte",
+DlgDocCLink : "Lien",
+DlgDocCVisited : "Lien visité",
+DlgDocCActive : "Lien activé",
+DlgDocMargins : "Marges",
+DlgDocMaTop : "Haut",
+DlgDocMaLeft : "Gauche",
+DlgDocMaRight : "Droite",
+DlgDocMaBottom : "Bas",
+DlgDocMeIndex : "Mots-clés (séparés par des virgules)",
+DlgDocMeDescr : "Description",
+DlgDocMeAuthor : "Auteur",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Prévisualisation",
+
+// Templates Dialog
+Templates : "Modèles",
+DlgTemplatesTitle : "Modèles de contenu",
+DlgTemplatesSelMsg : "Veuillez sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",
+DlgTemplatesLoading : "Chargement de la liste des modèles. Veuillez patienter...",
+DlgTemplatesNoTpl : "(Aucun modèle disponible)",
+DlgTemplatesReplace : "Remplacer tout le contenu",
+
+// About Dialog
+DlgAboutAboutTab : "A propos de",
+DlgAboutBrowserInfoTab : "Navigateur",
+DlgAboutLicenseTab : "Licence",
+DlgAboutVersion : "Version",
+DlgAboutInfo : "Pour plus d'informations, aller à",
+
+// Div Dialog
+DlgDivGeneralTab : "Général",
+DlgDivAdvancedTab : "Avancé",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Attribut Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gl.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gl.js
new file mode 100644
index 0000000..06cba17
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gl.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Galician language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Ocultar Ferramentas",
+ToolbarExpand : "Mostrar Ferramentas",
+
+// Toolbar Items and Context Menu
+Save : "Gardar",
+NewPage : "Nova Páxina",
+Preview : "Vista Previa",
+Cut : "Cortar",
+Copy : "Copiar",
+Paste : "Pegar",
+PasteText : "Pegar como texto plano",
+PasteWord : "Pegar dende Word",
+Print : "Imprimir",
+SelectAll : "Seleccionar todo",
+RemoveFormat : "Eliminar Formato",
+InsertLinkLbl : "Ligazón",
+InsertLink : "Inserir/Editar Ligazón",
+RemoveLink : "Eliminar Ligazón",
+VisitLink : "Open Link", //MISSING
+Anchor : "Inserir/Editar Referencia",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Imaxe",
+InsertImage : "Inserir/Editar Imaxe",
+InsertFlashLbl : "Flash",
+InsertFlash : "Inserir/Editar Flash",
+InsertTableLbl : "Tabla",
+InsertTable : "Inserir/Editar Tabla",
+InsertLineLbl : "Liña",
+InsertLine : "Inserir Liña Horizontal",
+InsertSpecialCharLbl: "Carácter Special",
+InsertSpecialChar : "Inserir Carácter Especial",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Inserir Smiley",
+About : "Acerca de FCKeditor",
+Bold : "Negrita",
+Italic : "Cursiva",
+Underline : "Sub-raiado",
+StrikeThrough : "Tachado",
+Subscript : "Subíndice",
+Superscript : "Superíndice",
+LeftJustify : "Aliñar á Esquerda",
+CenterJustify : "Centrado",
+RightJustify : "Aliñar á Dereita",
+BlockJustify : "Xustificado",
+DecreaseIndent : "Disminuir Sangría",
+IncreaseIndent : "Aumentar Sangría",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Desfacer",
+Redo : "Refacer",
+NumberedListLbl : "Lista Numerada",
+NumberedList : "Inserir/Eliminar Lista Numerada",
+BulletedListLbl : "Marcas",
+BulletedList : "Inserir/Eliminar Marcas",
+ShowTableBorders : "Mostrar Bordes das Táboas",
+ShowDetails : "Mostrar Marcas Parágrafo",
+Style : "Estilo",
+FontFormat : "Formato",
+Font : "Tipo",
+FontSize : "Tamaño",
+TextColor : "Cor do Texto",
+BGColor : "Cor do Fondo",
+Source : "Código Fonte",
+Find : "Procurar",
+Replace : "Substituir",
+SpellCheck : "Corrección Ortográfica",
+UniversalKeyboard : "Teclado Universal",
+PageBreakLbl : "Salto de Páxina",
+PageBreak : "Inserir Salto de Páxina",
+
+Form : "Formulario",
+Checkbox : "Cadro de Verificación",
+RadioButton : "Botón de Radio",
+TextField : "Campo de Texto",
+Textarea : "Ãrea de Texto",
+HiddenField : "Campo Oculto",
+Button : "Botón",
+SelectionField : "Campo de Selección",
+ImageButton : "Botón de Imaxe",
+
+FitWindow : "Maximizar o tamaño do editor",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Editar Ligazón",
+CellCM : "Cela",
+RowCM : "Fila",
+ColumnCM : "Columna",
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Borrar Filas",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Borrar Columnas",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Borrar Cela",
+MergeCells : "Unir Celas",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Borrar Táboa",
+CellProperties : "Propriedades da Cela",
+TableProperties : "Propriedades da Táboa",
+ImageProperties : "Propriedades Imaxe",
+FlashProperties : "Propriedades Flash",
+
+AnchorProp : "Propriedades da Referencia",
+ButtonProp : "Propriedades do Botón",
+CheckboxProp : "Propriedades do Cadro de Verificación",
+HiddenFieldProp : "Propriedades do Campo Oculto",
+RadioButtonProp : "Propriedades do Botón de Radio",
+ImageButtonProp : "Propriedades do Botón de Imaxe",
+TextFieldProp : "Propriedades do Campo de Texto",
+SelectionFieldProp : "Propriedades do Campo de Selección",
+TextareaProp : "Propriedades da Ãrea de Texto",
+FormProp : "Propriedades do Formulario",
+
+FontFormats : "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Procesando XHTML. Por facor, agarde...",
+Done : "Feiro",
+PasteWordConfirm : "Parece que o texto que quere pegar está copiado do Word.¿Quere limpar o formato antes de pegalo?",
+NotCompatiblePaste : "Este comando está disponible para Internet Explorer versión 5.5 ou superior. ¿Quere pegalo sen limpar o formato?",
+UnknownToolbarItem : "Ãtem de ferramentas descoñecido \"%1\"",
+UnknownCommand : "Nome de comando descoñecido \"%1\"",
+NotImplemented : "Comando non implementado",
+UnknownToolbarSet : "O conxunto de ferramentas \"%1\" non existe",
+NoActiveX : "As opcións de seguridade do seu navegador poderían limitar algunha das características de editor. Debe activar a opción \"Executar controis ActiveX e plug-ins\". Pode notar que faltan características e experimentar erros",
+BrowseServerBlocked : "Non se poido abrir o navegador de recursos. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes",
+DialogBlocked : "Non foi posible abrir a xanela de diálogo. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancelar",
+DlgBtnClose : "Pechar",
+DlgBtnBrowseServer : "Navegar no Servidor",
+DlgAdvancedTag : "Advanzado",
+DlgOpOther : "<Outro>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Por favor, insira a URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<non definido>",
+DlgGenId : "Id",
+DlgGenLangDir : "Orientación do Idioma",
+DlgGenLangDirLtr : "Esquerda a Dereita (LTR)",
+DlgGenLangDirRtl : "Dereita a Esquerda (RTL)",
+DlgGenLangCode : "Código do Idioma",
+DlgGenAccessKey : "Chave de Acceso",
+DlgGenName : "Nome",
+DlgGenTabIndex : "Ãndice de Tabulación",
+DlgGenLongDescr : "Descrición Completa da URL",
+DlgGenClass : "Clases da Folla de Estilos",
+DlgGenTitle : "Título",
+DlgGenContType : "Tipo de Contido",
+DlgGenLinkCharset : "Fonte de Caracteres Vinculado",
+DlgGenStyle : "Estilo",
+
+// Image Dialog
+DlgImgTitle : "Propriedades da Imaxe",
+DlgImgInfoTab : "Información da Imaxe",
+DlgImgBtnUpload : "Enviar ó Servidor",
+DlgImgURL : "URL",
+DlgImgUpload : "Carregar",
+DlgImgAlt : "Texto Alternativo",
+DlgImgWidth : "Largura",
+DlgImgHeight : "Altura",
+DlgImgLockRatio : "Proporcional",
+DlgBtnResetSize : "Tamaño Orixinal",
+DlgImgBorder : "Límite",
+DlgImgHSpace : "Esp. Horiz.",
+DlgImgVSpace : "Esp. Vert.",
+DlgImgAlign : "Aliñamento",
+DlgImgAlignLeft : "Esquerda",
+DlgImgAlignAbsBottom: "Abs Inferior",
+DlgImgAlignAbsMiddle: "Abs Centro",
+DlgImgAlignBaseline : "Liña Base",
+DlgImgAlignBottom : "Pé",
+DlgImgAlignMiddle : "Centro",
+DlgImgAlignRight : "Dereita",
+DlgImgAlignTextTop : "Tope do Texto",
+DlgImgAlignTop : "Tope",
+DlgImgPreview : "Vista Previa",
+DlgImgAlertUrl : "Por favor, escriba a URL da imaxe",
+DlgImgLinkTab : "Ligazón",
+
+// Flash Dialog
+DlgFlashTitle : "Propriedades Flash",
+DlgFlashChkPlay : "Auto Execución",
+DlgFlashChkLoop : "Bucle",
+DlgFlashChkMenu : "Activar Menú Flash",
+DlgFlashScale : "Escalar",
+DlgFlashScaleAll : "Amosar Todo",
+DlgFlashScaleNoBorder : "Sen Borde",
+DlgFlashScaleFit : "Encaixar axustando",
+
+// Link Dialog
+DlgLnkWindowTitle : "Ligazón",
+DlgLnkInfoTab : "Información da Ligazón",
+DlgLnkTargetTab : "Referencia a esta páxina",
+
+DlgLnkType : "Tipo de Ligazón",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Referencia nesta páxina",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocolo",
+DlgLnkProtoOther : "<outro>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Seleccionar unha Referencia",
+DlgLnkAnchorByName : "Por Nome de Referencia",
+DlgLnkAnchorById : "Por Element Id",
+DlgLnkNoAnchors : "(Non hai referencias disponibles no documento)",
+DlgLnkEMail : "Enderezo de E-Mail",
+DlgLnkEMailSubject : "Asunto do Mensaxe",
+DlgLnkEMailBody : "Corpo do Mensaxe",
+DlgLnkUpload : "Carregar",
+DlgLnkBtnUpload : "Enviar ó servidor",
+
+DlgLnkTarget : "Destino",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<Xanela Emerxente>",
+DlgLnkTargetBlank : "Nova Xanela (_blank)",
+DlgLnkTargetParent : "Xanela Pai (_parent)",
+DlgLnkTargetSelf : "Mesma Xanela (_self)",
+DlgLnkTargetTop : "Xanela Primaria (_top)",
+DlgLnkTargetFrameName : "Nome do Marco Destino",
+DlgLnkPopWinName : "Nome da Xanela Emerxente",
+DlgLnkPopWinFeat : "Características da Xanela Emerxente",
+DlgLnkPopResize : "Axustable",
+DlgLnkPopLocation : "Barra de Localización",
+DlgLnkPopMenu : "Barra de Menú",
+DlgLnkPopScroll : "Barras de Desplazamento",
+DlgLnkPopStatus : "Barra de Estado",
+DlgLnkPopToolbar : "Barra de Ferramentas",
+DlgLnkPopFullScrn : "A Toda Pantalla (IE)",
+DlgLnkPopDependent : "Dependente (Netscape)",
+DlgLnkPopWidth : "Largura",
+DlgLnkPopHeight : "Altura",
+DlgLnkPopLeft : "Posición Esquerda",
+DlgLnkPopTop : "Posición dende Arriba",
+
+DlnLnkMsgNoUrl : "Por favor, escriba a ligazón URL",
+DlnLnkMsgNoEMail : "Por favor, escriba o enderezo de e-mail",
+DlnLnkMsgNoAnchor : "Por favor, seleccione un destino",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Seleccionar Color",
+DlgColorBtnClear : "Nengunha",
+DlgColorHighlight : "Destacado",
+DlgColorSelected : "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle : "Inserte un Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Seleccione Caracter Especial",
+
+// Table Dialog
+DlgTableTitle : "Propiedades da Táboa",
+DlgTableRows : "Filas",
+DlgTableColumns : "Columnas",
+DlgTableBorder : "Tamaño do Borde",
+DlgTableAlign : "Aliñamento",
+DlgTableAlignNotSet : "<Non Definido>",
+DlgTableAlignLeft : "Esquerda",
+DlgTableAlignCenter : "Centro",
+DlgTableAlignRight : "Ereita",
+DlgTableWidth : "Largura",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "percent",
+DlgTableHeight : "Altura",
+DlgTableCellSpace : "Marxe entre Celas",
+DlgTableCellPad : "Marxe interior",
+DlgTableCaption : "Título",
+DlgTableSummary : "Sumario",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Propriedades da Cela",
+DlgCellWidth : "Largura",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "percent",
+DlgCellHeight : "Altura",
+DlgCellWordWrap : "Axustar Liñas",
+DlgCellWordWrapNotSet : "<Non Definido>",
+DlgCellWordWrapYes : "Si",
+DlgCellWordWrapNo : "Non",
+DlgCellHorAlign : "Aliñamento Horizontal",
+DlgCellHorAlignNotSet : "<Non definido>",
+DlgCellHorAlignLeft : "Esquerda",
+DlgCellHorAlignCenter : "Centro",
+DlgCellHorAlignRight: "Dereita",
+DlgCellVerAlign : "Aliñamento Vertical",
+DlgCellVerAlignNotSet : "<Non definido>",
+DlgCellVerAlignTop : "Arriba",
+DlgCellVerAlignMiddle : "Medio",
+DlgCellVerAlignBottom : "Abaixo",
+DlgCellVerAlignBaseline : "Liña de Base",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Ocupar Filas",
+DlgCellCollSpan : "Ocupar Columnas",
+DlgCellBackColor : "Color de Fondo",
+DlgCellBorderColor : "Color de Borde",
+DlgCellBtnSelect : "Seleccionar...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Procurar",
+DlgFindFindBtn : "Procurar",
+DlgFindNotFoundMsg : "Non te atopou o texto indicado.",
+
+// Replace Dialog
+DlgReplaceTitle : "Substituir",
+DlgReplaceFindLbl : "Texto a procurar:",
+DlgReplaceReplaceLbl : "Substituir con:",
+DlgReplaceCaseChk : "Coincidir Mai./min.",
+DlgReplaceReplaceBtn : "Substituir",
+DlgReplaceReplAllBtn : "Substitiur Todo",
+DlgReplaceWordChk : "Coincidir con toda a palabra",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).",
+PasteErrorCopy : "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).",
+
+PasteAsText : "Pegar como texto plano",
+PasteFromWord : "Pegar dende Word",
+
+DlgPasteMsg2 : "Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignorar as definicións de Tipografía",
+DlgPasteRemoveStyles : "Eliminar as definicións de Estilos",
+
+// Color Picker
+ColorAutomatic : "Automático",
+ColorMoreColors : "Máis Cores...",
+
+// Document Properties
+DocProps : "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle : "Propriedades da Referencia",
+DlgAnchorName : "Nome da Referencia",
+DlgAnchorErrorName : "Por favor, escriba o nome da referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Non está no diccionario",
+DlgSpellChangeTo : "Cambiar a",
+DlgSpellBtnIgnore : "Ignorar",
+DlgSpellBtnIgnoreAll : "Ignorar Todas",
+DlgSpellBtnReplace : "Substituir",
+DlgSpellBtnReplaceAll : "Substituir Todas",
+DlgSpellBtnUndo : "Desfacer",
+DlgSpellNoSuggestions : "- Sen candidatos -",
+DlgSpellProgress : "Corrección ortográfica en progreso...",
+DlgSpellNoMispell : "Corrección ortográfica rematada: Non se atoparon erros",
+DlgSpellNoChanges : "Corrección ortográfica rematada: Non se substituiu nengunha verba",
+DlgSpellOneChange : "Corrección ortográfica rematada: Unha verba substituida",
+DlgSpellManyChanges : "Corrección ortográfica rematada: %1 verbas substituidas",
+
+IeSpellDownload : "O corrector ortográfico non está instalado. ¿Quere descargalo agora?",
+
+// Button Dialog
+DlgButtonText : "Texto (Valor)",
+DlgButtonType : "Tipo",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nome",
+DlgCheckboxValue : "Valor",
+DlgCheckboxSelected : "Seleccionado",
+
+// Form Dialog
+DlgFormName : "Nome",
+DlgFormAction : "Acción",
+DlgFormMethod : "Método",
+
+// Select Field Dialog
+DlgSelectName : "Nome",
+DlgSelectValue : "Valor",
+DlgSelectSize : "Tamaño",
+DlgSelectLines : "liñas",
+DlgSelectChkMulti : "Permitir múltiples seleccións",
+DlgSelectOpAvail : "Opcións Disponibles",
+DlgSelectOpText : "Texto",
+DlgSelectOpValue : "Valor",
+DlgSelectBtnAdd : "Engadir",
+DlgSelectBtnModify : "Modificar",
+DlgSelectBtnUp : "Subir",
+DlgSelectBtnDown : "Baixar",
+DlgSelectBtnSetValue : "Definir como valor por defecto",
+DlgSelectBtnDelete : "Borrar",
+
+// Textarea Dialog
+DlgTextareaName : "Nome",
+DlgTextareaCols : "Columnas",
+DlgTextareaRows : "Filas",
+
+// Text Field Dialog
+DlgTextName : "Nome",
+DlgTextValue : "Valor",
+DlgTextCharWidth : "Tamaño do Caracter",
+DlgTextMaxChars : "Máximo de Caracteres",
+DlgTextType : "Tipo",
+DlgTextTypeText : "Texto",
+DlgTextTypePass : "Chave",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nome",
+DlgHiddenValue : "Valor",
+
+// Bulleted List Dialog
+BulletedListProp : "Propriedades das Marcas",
+NumberedListProp : "Propriedades da Lista de Numeración",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Tipo",
+DlgLstTypeCircle : "Círculo",
+DlgLstTypeDisc : "Disco",
+DlgLstTypeSquare : "Cuadrado",
+DlgLstTypeNumbers : "Números (1, 2, 3)",
+DlgLstTypeLCase : "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase : "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman : "Números Romanos en minúscula (i, ii, iii)",
+DlgLstTypeLRoman : "Números Romanos en Maiúscula (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Xeral",
+DlgDocBackTab : "Fondo",
+DlgDocColorsTab : "Cores e Marxes",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Título da Páxina",
+DlgDocLangDir : "Orientación do Idioma",
+DlgDocLangDirLTR : "Esquerda a Dereita (LTR)",
+DlgDocLangDirRTL : "Dereita a Esquerda (RTL)",
+DlgDocLangCode : "Código de Idioma",
+DlgDocCharSet : "Codificación do Xogo de Caracteres",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Outra Codificación do Xogo de Caracteres",
+
+DlgDocDocType : "Encabezado do Tipo de Documento",
+DlgDocDocTypeOther : "Outro Encabezado do Tipo de Documento",
+DlgDocIncXHTML : "Incluir Declaracións XHTML",
+DlgDocBgColor : "Cor de Fondo",
+DlgDocBgImage : "URL da Imaxe de Fondo",
+DlgDocBgNoScroll : "Fondo Fixo",
+DlgDocCText : "Texto",
+DlgDocCLink : "Ligazóns",
+DlgDocCVisited : "Ligazón Visitada",
+DlgDocCActive : "Ligazón Activa",
+DlgDocMargins : "Marxes da Páxina",
+DlgDocMaTop : "Arriba",
+DlgDocMaLeft : "Esquerda",
+DlgDocMaRight : "Dereita",
+DlgDocMaBottom : "Abaixo",
+DlgDocMeIndex : "Palabras Chave de Indexación do Documento (separadas por comas)",
+DlgDocMeDescr : "Descripción do Documento",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Vista Previa",
+
+// Templates Dialog
+Templates : "Plantillas",
+DlgTemplatesTitle : "Plantillas de Contido",
+DlgTemplatesSelMsg : "Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):",
+DlgTemplatesLoading : "Cargando listado de plantillas. Por favor, espere...",
+DlgTemplatesNoTpl : "(Non hai plantillas definidas)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "Acerca de",
+DlgAboutBrowserInfoTab : "Información do Navegador",
+DlgAboutLicenseTab : "Licencia",
+DlgAboutVersion : "versión",
+DlgAboutInfo : "Para máis información visitar:",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gu.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gu.js
new file mode 100644
index 0000000..b8d5776
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gu.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Gujarati language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "ટૂલબાર નાનà«àª‚ કરવà«àª‚",
+ToolbarExpand : "ટૂલબાર મોટà«àª‚ કરવà«àª‚",
+
+// Toolbar Items and Context Menu
+Save : "સેવ",
+NewPage : "નવૠપાનà«àª‚",
+Preview : "પૂરà«àªµàª¦àª°à«àª¶àª¨",
+Cut : "કાપવà«àª‚",
+Copy : "નકલ",
+Paste : "પેસà«àªŸ",
+PasteText : "પેસà«àªŸ (સાદી ટેકà«àª¸à«àªŸ)",
+PasteWord : "પેસà«àªŸ (વડૅ ટેકà«àª¸à«àªŸ)",
+Print : "પà«àª°àª¿àª¨à«àªŸ",
+SelectAll : "બઘà«àª‚ પસંદ કરવà«àª‚",
+RemoveFormat : "ફૉરà«àª®àªŸ કાઢવà«àª‚",
+InsertLinkLbl : "સંબંધન, લિંક",
+InsertLink : "લિંક ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી",
+RemoveLink : "લિંક કાઢવી",
+VisitLink : "Open Link", //MISSING
+Anchor : "àªàª‚કર ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી",
+AnchorDelete : "àªàª‚કર કાઢવી",
+InsertImageLbl : "ચિતà«àª°",
+InsertImage : "ચિતà«àª° ઇનà«àª¸àª°à«àªŸ/દાખલ કરવà«àª‚",
+InsertFlashLbl : "ફà«àª²à«…શ",
+InsertFlash : "ફà«àª²à«…શ ઇનà«àª¸àª°à«àªŸ/દાખલ કરવà«àª‚",
+InsertTableLbl : "ટેબલ, કોઠો",
+InsertTable : "ટેબલ, કોઠો ઇનà«àª¸àª°à«àªŸ/દાખલ કરવà«àª‚",
+InsertLineLbl : "રેખા",
+InsertLine : "સમસà«àª¤àª°à«€àª¯ રેખા ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી",
+InsertSpecialCharLbl: "વિશિષà«àªŸ અકà«àª·àª°",
+InsertSpecialChar : "વિશિષà«àªŸ અકà«àª·àª° ઇનà«àª¸àª°à«àªŸ/દાખલ કરવà«àª‚",
+InsertSmileyLbl : "સà«àª®àª¾àª‡àª²à«€",
+InsertSmiley : "સà«àª®àª¾àª‡àª²à«€ ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી",
+About : "FCKeditorના વિષે",
+Bold : "બોલà«àª¡/સà«àªªàª·à«àªŸ",
+Italic : "ઇટેલિક, તà«àª°àª¾àª‚સા",
+Underline : "અનà«àª¡àª°à«àª²àª¾àª‡àª¨, નીચે લીટી",
+StrikeThrough : "છેકી નાખવà«àª‚",
+Subscript : "àªàª• ચિહà«àª¨àª¨à«€ નીચે કરેલà«àª‚ બીજà«àª‚ ચિહà«àª¨",
+Superscript : "àªàª• ચિહà«àª¨ ઉપર કરેલà«àª‚ બીજà«àª‚ ચિહà«àª¨.",
+LeftJustify : "ડાબી બાજà«àª/બાજૠતરફ",
+CenterJustify : "સંકેંદà«àª°àª£/સેંટરિંગ",
+RightJustify : "જમણી બાજà«àª/બાજૠતરફ",
+BlockJustify : "બà«àª²à«‰àª•, અંતરાય જસà«àªŸàª¿àª«àª¾àª‡",
+DecreaseIndent : "ઇનà«àª¡à«‡àª¨à«àªŸ લીટીના આરંભમાં જગà«àª¯àª¾ ઘટાડવી",
+IncreaseIndent : "ઇનà«àª¡à«‡àª¨à«àªŸ, લીટીના આરંભમાં જગà«àª¯àª¾ વધારવી",
+Blockquote : "બà«àª²à«‰àª•-કોટ, અવતરણચિહà«àª¨à«‹",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "રદ કરવà«àª‚; પહેલાં હતી àªàªµà«€ સà«àª¥àª¿àª¤àª¿ પાછી લાવવી",
+Redo : "રિડૂ; પછી હતી àªàªµà«€ સà«àª¥àª¿àª¤àª¿ પાછી લાવવી",
+NumberedListLbl : "સંખà«àª¯àª¾àª‚કન સૂચિ",
+NumberedList : "સંખà«àª¯àª¾àª‚કન સૂચિ ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી",
+BulletedListLbl : "બà«àª²à«‡àªŸ સૂચિ",
+BulletedList : "બà«àª²à«‡àªŸ સૂચિ ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી",
+ShowTableBorders : "ટેબલ, કોઠાની બાજà«(બોરà«àª¡àª°) બતાવવી",
+ShowDetails : "વિસà«àª¤à«ƒàª¤ વિગતવાર બતાવવà«àª‚",
+Style : "શૈલી/રીત",
+FontFormat : "ફૉનà«àªŸ ફૉરà«àª®àªŸ, રચનાની શૈલી",
+Font : "ફૉનà«àªŸ",
+FontSize : "ફૉનà«àªŸ સાઇàª/કદ",
+TextColor : "શબà«àª¦àª¨à«‹ રંગ",
+BGColor : "બૅકગà«àª°àª¾àª‰àª¨à«àª¡ રંગ,",
+Source : "મૂળ કે પà«àª°àª¾àª¥àª®àª¿àª• દસà«àª¤àª¾àªµà«‡àªœ",
+Find : "શોધવà«àª‚",
+Replace : "રિપà«àª²à«‡àª¸/બદલવà«àª‚",
+SpellCheck : "જોડણી (સà«àªªà«‡àª²àª¿àª‚ગ) તપાસવી",
+UniversalKeyboard : "યૂનિવરà«àª¸àª²/વિશà«àªµàªµà«àª¯àª¾àªªàª• કીબૉરà«àª¡",
+PageBreakLbl : "પેજબà«àª°à«‡àª•/પાનાને અલગ કરવà«àª‚",
+PageBreak : "ઇનà«àª¸àª°à«àªŸ પેજબà«àª°à«‡àª•/પાનાને અલગ કરવà«àª‚/દાખલ કરવà«àª‚",
+
+Form : "ફૉરà«àª®/પતà«àª°àª•",
+Checkbox : "ચેક બોકà«àª¸",
+RadioButton : "રેડિઓ બટન",
+TextField : "ટેકà«àª¸à«àªŸ ફીલà«àª¡, શબà«àª¦ કà«àª·à«‡àª¤à«àª°",
+Textarea : "ટેકà«àª¸à«àªŸ àªàª°àª¿àª†, શબà«àª¦ વિસà«àª¤àª¾àª°",
+HiddenField : "ગà«àªªà«àª¤ કà«àª·à«‡àª¤à«àª°",
+Button : "બટન",
+SelectionField : "પસંદગી કà«àª·à«‡àª¤à«àª°",
+ImageButton : "ચિતà«àª° બટન",
+
+FitWindow : "àªàª¡àª¿àªŸàª°àª¨à«€ સાઇઠઅધિકતમ કરવી",
+ShowBlocks : "બà«àª²à«‰àª• બતાવવà«àª‚",
+
+// Context Menu
+EditLink : " લિંક àªàª¡àª¿àªŸ/માં ફેરફાર કરવો",
+CellCM : "કોષના ખાના",
+RowCM : "પંકà«àª¤àª¿àª¨àª¾ ખાના",
+ColumnCM : "કૉલમ/ઊભી કટાર",
+InsertRowAfter : "પછી પંકà«àª¤àª¿ ઉમેરવી",
+InsertRowBefore : "પહેલાં પંકà«àª¤àª¿ ઉમેરવી",
+DeleteRows : "પંકà«àª¤àª¿àª“ ડિલીટ/કાઢી નાખવી",
+InsertColumnAfter : "પછી કૉલમ/ઊભી કટાર ઉમેરવી",
+InsertColumnBefore : "પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી",
+DeleteColumns : "કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી",
+InsertCellAfter : "પછી કોષ ઉમેરવો",
+InsertCellBefore : "પહેલાં કોષ ઉમેરવો",
+DeleteCells : "કોષ ડિલીટ/કાઢી નાખવો",
+MergeCells : "કોષ ભેગા કરવા",
+MergeRight : "જમણી બાજૠભેગા કરવા",
+MergeDown : "નીચે ભેગા કરવા",
+HorizontalSplitCell : "કોષને સમસà«àª¤àª°à«€àª¯ વિભાજન કરવà«àª‚",
+VerticalSplitCell : "કોષને સીધà«àª‚ ને ઊભà«àª‚ વિભાજન કરવà«àª‚",
+TableDelete : "કોઠો ડિલીટ/કાઢી નાખવà«àª‚",
+CellProperties : "કોષના ગà«àª£",
+TableProperties : "કોઠાના ગà«àª£",
+ImageProperties : "ચિતà«àª°àª¨àª¾ ગà«àª£",
+FlashProperties : "ફà«àª²à«…શના ગà«àª£",
+
+AnchorProp : "àªàª‚કરના ગà«àª£",
+ButtonProp : "બટનના ગà«àª£",
+CheckboxProp : "ચેક બોકà«àª¸ ગà«àª£",
+HiddenFieldProp : "ગà«àªªà«àª¤ કà«àª·à«‡àª¤à«àª°àª¨àª¾ ગà«àª£",
+RadioButtonProp : "રેડિઓ બટનના ગà«àª£",
+ImageButtonProp : "ચિતà«àª° બટનના ગà«àª£",
+TextFieldProp : "ટેકà«àª¸à«àªŸ ફીલà«àª¡, શબà«àª¦ કà«àª·à«‡àª¤à«àª°àª¨àª¾ ગà«àª£",
+SelectionFieldProp : "પસંદગી કà«àª·à«‡àª¤à«àª°àª¨àª¾ ગà«àª£",
+TextareaProp : "ટેકà«àª¸à«àªŸ àªàª…રિઆ, શબà«àª¦ વિસà«àª¤àª¾àª°àª¨àª¾ ગà«àª£",
+FormProp : "ફૉરà«àª®/પતà«àª°àª•àª¨àª¾ ગà«àª£",
+
+FontFormats : "સામાનà«àª¯;ફૉરà«àª®àªŸà«‡àª¡;સરનામà«àª‚;શીરà«àª·àª• 1;શીરà«àª·àª• 2;શીરà«àª·àª• 3;શીરà«àª·àª• 4;શીરà«àª·àª• 5;શીરà«àª·àª• 6;શીરà«àª·àª• (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML પà«àª°àª•à«àª°àª¿àª¯àª¾ ચાલૠછે. મહેરબાની કરીને રાહ જોવો...",
+Done : "પતી ગયà«àª‚",
+PasteWordConfirm : "તમે જે ટેકà«àª¸à«àªŸ પેસà«àªŸ કરવા માંગો છો, તે વડૅમાંથી કોપી કરેલૠલાગે છે. પેસà«àªŸ કરતા પહેલાં ટેકà«àª¸à«àªŸ સાફ કરવી છે?",
+NotCompatiblePaste : "આ કમાનà«àª¡ ઈનટરનેટ àªàª•à«àª¸àªªà«àª²à«‹àª°àª°(Internet Explorer) 5.5 અથવા àªàª¨àª¾ પછીના વરà«àªàª¨ માટેજ છે. ટેકà«àª¸à«àªŸàª¨à«‡ સાફ કયૅા પહેલાં પેસà«àªŸ કરવી છે?",
+UnknownToolbarItem : "અજાણી ટૂલબાર આઇટમ \"%1\"",
+UnknownCommand : "અજાણયો કમાનà«àª¡ \"%1\"",
+NotImplemented : "કમાનà«àª¡ ઇમà«àªªà«àª²àª¿àª®àª¨à«àªŸ નથી કરોયો",
+UnknownToolbarSet : "ટૂલબાર સેટ \"%1\" ઉપલબà«àª§ નથી",
+NoActiveX : "તમારા બà«àª°àª¾àª‰àªàª°àª¨à«€ સà«àª°àª•à«àª·àª¾ સેટિંગસ àªàª¡àª¿àªŸàª°àª¨àª¾ અમà«àª• ફીચરને પરવાનગી આપતી નથી. કૃપયા \"Run ActiveX controls and plug-ins\" વિકલà«àªªàª¨à«‡ ઇનેબલ/સમરà«àª¥ કરો. તમારા બà«àª°àª¾àª‰àªàª°àª®àª¾àª‚ àªàª°àª° ઇનà«àªµàª¿àªàª¿àª¬àª² ફીચરનો અનà«àª­àªµ થઈ શકે છે. કૃપયા પૉપ-અપ બà«àª²à«‰àª•àª° ડિસેબલ કરો.",
+BrowseServerBlocked : "રિસૉરà«àª¸ બà«àª°àª¾àª‰àªàª° ખોલી ન સકાયà«àª‚.",
+DialogBlocked : "ડાયલૉગ વિનà«àª¡à«‹ ખોલી ન સકાયà«àª‚. કૃપયા પૉપ-અપ બà«àª²à«‰àª•àª° ડિસેબલ કરો.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "ઠીક છે",
+DlgBtnCancel : "રદ કરવà«àª‚",
+DlgBtnClose : "બંધ કરવà«àª‚",
+DlgBtnBrowseServer : "સરà«àªµàª° બà«àª°àª¾àª‰àª કરો",
+DlgAdvancedTag : "અડà«àªµàª¾àª¨à«àª¸àª¡",
+DlgOpOther : "<અનà«àª¯>",
+DlgInfoTab : "સૂચના",
+DlgAlertUrl : "URL ઇનà«àª¸àª°à«àªŸ કરો",
+
+// General Dialogs Labels
+DlgGenNotSet : "<સેટ નથી>",
+DlgGenId : "Id",
+DlgGenLangDir : "ભાષા લેખવાની પદà«àª§àª¤àª¿",
+DlgGenLangDirLtr : "ડાબે થી જમણે (LTR)",
+DlgGenLangDirRtl : "જમણે થી ડાબે (RTL)",
+DlgGenLangCode : "ભાષા કોડ",
+DlgGenAccessKey : "àªàª•à«àª¸à«‡àª¸ કી",
+DlgGenName : "નામ",
+DlgGenTabIndex : "ટૅબ ઇનà«àª¡à«‡àª•à«àª¸",
+DlgGenLongDescr : "વધારે માહિતી માટે URL",
+DlgGenClass : "સà«àªŸàª¾àª‡àª²-શીટ કà«àª²àª¾àª¸",
+DlgGenTitle : "મà«àª–à«àª¯ મથાળà«àª‚",
+DlgGenContType : "મà«àª–à«àª¯ કનà«àªŸà«‡àª¨à«àªŸ પà«àª°àª•àª¾àª°",
+DlgGenLinkCharset : "લિંક રિસૉરà«àª¸ કૅરિકà«àªŸàª° સેટ",
+DlgGenStyle : "સà«àªŸàª¾àª‡àª²",
+
+// Image Dialog
+DlgImgTitle : "ચિતà«àª°àª¨àª¾ ગà«àª£",
+DlgImgInfoTab : "ચિતà«àª° ની જાણકારી",
+DlgImgBtnUpload : "આ સરà«àªµàª°àª¨à«‡ મોકલવà«àª‚",
+DlgImgURL : "URL",
+DlgImgUpload : "અપલોડ",
+DlgImgAlt : "ઑલà«àªŸàª°à«àª¨àªŸ ટેકà«àª¸à«àªŸ",
+DlgImgWidth : "પહોળાઈ",
+DlgImgHeight : "ઊંચાઈ",
+DlgImgLockRatio : "લૉક ગà«àª£à«‹àª¤à«àª¤àª°",
+DlgBtnResetSize : "રીસેટ સાઇàª",
+DlgImgBorder : "બોરà«àª¡àª°",
+DlgImgHSpace : "સમસà«àª¤àª°à«€àª¯ જગà«àª¯àª¾",
+DlgImgVSpace : "લંબરૂપ જગà«àª¯àª¾",
+DlgImgAlign : "લાઇનદોરીમાં ગોઠવવà«àª‚",
+DlgImgAlignLeft : "ડાબી બાજૠગોઠવવà«àª‚",
+DlgImgAlignAbsBottom: "Abs નીચે",
+DlgImgAlignAbsMiddle: "Abs ઉપર",
+DlgImgAlignBaseline : "આધાર લીટી",
+DlgImgAlignBottom : "નીચે",
+DlgImgAlignMiddle : "વચà«àªšà«‡",
+DlgImgAlignRight : "જમણી",
+DlgImgAlignTextTop : "ટેકà«àª¸à«àªŸ ઉપર",
+DlgImgAlignTop : "ઉપર",
+DlgImgPreview : "પૂરà«àªµàª¦àª°à«àª¶àª¨",
+DlgImgAlertUrl : "ચિતà«àª°àª¨à«€ URL ટાઇપ કરો",
+DlgImgLinkTab : "લિંક",
+
+// Flash Dialog
+DlgFlashTitle : "ફà«àª²à«…શ ગà«àª£",
+DlgFlashChkPlay : "ઑટો/સà«àªµàª¯àª‚ પà«àª²à«‡",
+DlgFlashChkLoop : "લૂપ",
+DlgFlashChkMenu : "ફà«àª²à«…શ મેનà«àª¯à«‚ નો પà«àª°àª¯à«‹àª— કરો",
+DlgFlashScale : "સà«àª•à«‡àª²",
+DlgFlashScaleAll : "સà«àª•à«‡àª² ઓલ/બધૠબતાવો",
+DlgFlashScaleNoBorder : "સà«àª•à«‡àª² બોરà«àª¡àª° વગર",
+DlgFlashScaleFit : "સà«àª•à«‡àª² àªàª•àª¦àª® ફીટ",
+
+// Link Dialog
+DlgLnkWindowTitle : "લિંક",
+DlgLnkInfoTab : "લિંક ઇનà«àª«à«‰ ટૅબ",
+DlgLnkTargetTab : "ટારà«àª—ેટ/લકà«àª·à«àª¯ ટૅબ",
+
+DlgLnkType : "લિંક પà«àª°àª•àª¾àª°",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "આ પેજનો àªàª‚કર",
+DlgLnkTypeEMail : "ઈ-મેલ",
+DlgLnkProto : "પà«àª°à«‹àªŸà«‹àª•à«‰àª²",
+DlgLnkProtoOther : "<અનà«àª¯>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "àªàª‚કર પસંદ કરો",
+DlgLnkAnchorByName : "àªàª‚કર નામથી પસંદ કરો",
+DlgLnkAnchorById : "àªàª‚કર àªàª²àª¿àª®àª¨à«àªŸ Id થી પસંદ કરો",
+DlgLnkNoAnchors : "(ડૉકà«àª¯à«àª®àª¨à«àªŸàª®àª¾àª‚ àªàª‚કરની સંખà«àª¯àª¾)",
+DlgLnkEMail : "ઈ-મેલ સરનામà«àª‚",
+DlgLnkEMailSubject : "ઈ-મેલ વિષય",
+DlgLnkEMailBody : "સંદેશ",
+DlgLnkUpload : "અપલોડ",
+DlgLnkBtnUpload : "આ સરà«àªµàª°àª¨à«‡ મોકલવà«àª‚",
+
+DlgLnkTarget : "ટારà«àª—ેટ/લકà«àª·à«àª¯",
+DlgLnkTargetFrame : "<ફà«àª°à«‡àª®>",
+DlgLnkTargetPopup : "<પૉપ-અપ વિનà«àª¡à«‹>",
+DlgLnkTargetBlank : "નવી વિનà«àª¡à«‹ (_blank)",
+DlgLnkTargetParent : "મૂળ વિનà«àª¡à«‹ (_parent)",
+DlgLnkTargetSelf : "આજ વિનà«àª¡à«‹ (_self)",
+DlgLnkTargetTop : "ઉપરની વિનà«àª¡à«‹ (_top)",
+DlgLnkTargetFrameName : "ટારà«àª—ેટ ફà«àª°à«‡àª® નà«àª‚ નામ",
+DlgLnkPopWinName : "પૉપ-અપ વિનà«àª¡à«‹ નà«àª‚ નામ",
+DlgLnkPopWinFeat : "પૉપ-અપ વિનà«àª¡à«‹ ફીચરસૅ",
+DlgLnkPopResize : "સાઇઠબદલી સકાય છે",
+DlgLnkPopLocation : "લોકેશન બાર",
+DlgLnkPopMenu : "મેનà«àª¯à«‚ બાર",
+DlgLnkPopScroll : "સà«àª•à«àª°à«‹àª² બાર",
+DlgLnkPopStatus : "સà«àªŸà«…ટસ બાર",
+DlgLnkPopToolbar : "ટૂલ બાર",
+DlgLnkPopFullScrn : "ફà«àª² સà«àª•à«àª°à«€àª¨ (IE)",
+DlgLnkPopDependent : "ડિપેનà«àª¡àª¨à«àªŸ (Netscape)",
+DlgLnkPopWidth : "પહોળાઈ",
+DlgLnkPopHeight : "ઊંચાઈ",
+DlgLnkPopLeft : "ડાબી બાજà«",
+DlgLnkPopTop : "જમણી બાજà«",
+
+DlnLnkMsgNoUrl : "લિંક URL ટાઇપ કરો",
+DlnLnkMsgNoEMail : "ઈ-મેલ સરનામà«àª‚ ટાઇપ કરો",
+DlnLnkMsgNoAnchor : "àªàª‚કર પસંદ કરો",
+DlnLnkMsgInvPopName : "પૉપ-અપ વિનà«àª¡à«‹ નà«àª‚ નામ àªàª²à«àª«àª¬à«‡àªŸàª¥à«€ શરૂ કરવો અને તેમાં સà«àªªà«‡àª‡àª¸ ન હોવી જોઈàª",
+
+// Color Dialog
+DlgColorTitle : "રંગ પસંદ કરો",
+DlgColorBtnClear : "સાફ કરો",
+DlgColorHighlight : "હાઈલાઇટ",
+DlgColorSelected : "સિલેકà«àªŸà«‡àª¡/પસંદ કરવà«àª‚",
+
+// Smiley Dialog
+DlgSmileyTitle : "સà«àª®àª¾àª‡àª²à«€ પસંદ કરો",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "સà«àªªà«‡àª¶àª¿àª…લ વિશિષà«àªŸ અકà«àª·àª° પસંદ કરો",
+
+// Table Dialog
+DlgTableTitle : "ટેબલ, કોઠાનà«àª‚ મથાળà«àª‚",
+DlgTableRows : "પંકà«àª¤àª¿àª¨àª¾ ખાના",
+DlgTableColumns : "કૉલમ/ઊભી કટાર",
+DlgTableBorder : "કોઠાની બાજà«(બોરà«àª¡àª°) સાઇàª",
+DlgTableAlign : "અલાઇનમનà«àªŸ/ગોઠવાયેલà«àª‚ ",
+DlgTableAlignNotSet : "<સેટ નથી>",
+DlgTableAlignLeft : "ડાબી બાજà«",
+DlgTableAlignCenter : "મધà«àª¯ સેનà«àªŸàª°",
+DlgTableAlignRight : "જમણી બાજà«",
+DlgTableWidth : "પહોળાઈ",
+DlgTableWidthPx : "પિકસલ",
+DlgTableWidthPc : "પà«àª°àª¤àª¿àª¶àª¤",
+DlgTableHeight : "ઊંચાઈ",
+DlgTableCellSpace : "સેલ અંતર",
+DlgTableCellPad : "સેલ પૅડિંગ",
+DlgTableCaption : "મથાળà«àª‚/કૅપà«àª¶àª¨ ",
+DlgTableSummary : "ટૂંકો àªàª¹à«‡àªµàª¾àª²",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "પંકà«àª¤àª¿àª¨àª¾ ખાનાના ગà«àª£",
+DlgCellWidth : "પહોળાઈ",
+DlgCellWidthPx : "પિકસલ",
+DlgCellWidthPc : "પà«àª°àª¤àª¿àª¶àª¤",
+DlgCellHeight : "ઊંચાઈ",
+DlgCellWordWrap : "વરà«àª¡ રૅપ",
+DlgCellWordWrapNotSet : "<સેટ નથી>",
+DlgCellWordWrapYes : "હા",
+DlgCellWordWrapNo : "ના",
+DlgCellHorAlign : "સમસà«àª¤àª°à«€àª¯ ગોઠવવà«àª‚",
+DlgCellHorAlignNotSet : "<સેટ નથી>",
+DlgCellHorAlignLeft : "ડાબી બાજà«",
+DlgCellHorAlignCenter : "મધà«àª¯ સેનà«àªŸàª°",
+DlgCellHorAlignRight: "જમણી બાજà«",
+DlgCellVerAlign : "લંબરૂપ ગોઠવવà«àª‚",
+DlgCellVerAlignNotSet : "<સેટ નથી>",
+DlgCellVerAlignTop : "ઉપર",
+DlgCellVerAlignMiddle : "મધà«àª¯ સેનà«àªŸàª°",
+DlgCellVerAlignBottom : "નીચે",
+DlgCellVerAlignBaseline : "મૂળ રેખા",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "પંકà«àª¤àª¿ સà«àªªàª¾àª¨",
+DlgCellCollSpan : "કૉલમ/ઊભી કટાર સà«àªªàª¾àª¨",
+DlgCellBackColor : "બૅકગà«àª°àª¾àª‰àª¨à«àª¡ રંગ",
+DlgCellBorderColor : "બોરà«àª¡àª°àª¨à«‹ રંગ",
+DlgCellBtnSelect : "પસંદ કરો...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "શોધવà«àª‚ અને બદલવà«àª‚",
+
+// Find Dialog
+DlgFindTitle : "શોધવà«àª‚",
+DlgFindFindBtn : "શોધવà«àª‚",
+DlgFindNotFoundMsg : "તમે શોધેલી ટેકà«àª¸à«àªŸ નથી મળી",
+
+// Replace Dialog
+DlgReplaceTitle : "બદલવà«àª‚",
+DlgReplaceFindLbl : "આ શોધો",
+DlgReplaceReplaceLbl : "આનાથી બદલો",
+DlgReplaceCaseChk : "કેસ સરખા રાખો",
+DlgReplaceReplaceBtn : "બદલવà«àª‚",
+DlgReplaceReplAllBtn : "બઘા બદલી ",
+DlgReplaceWordChk : "બઘા શબà«àª¦ સરખા રાખો",
+
+// Paste Operations / Dialog
+PasteErrorCut : "તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl+X) નો ઉપયોગ કરો.",
+PasteErrorCopy : "તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl+C) का पà¥à¤°à¤¯à¥‹à¤— करें।",
+
+PasteAsText : "પેસà«àªŸ (ટેકà«àª¸à«àªŸ)",
+PasteFromWord : "પેસà«àªŸ (વરà«àª¡ થી)",
+
+DlgPasteMsg2 : "Ctrl+V નો પà«àª°àª¯à«‹àª— કરી પેસà«àªŸ કરો",
+DlgPasteSec : "તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસના કારણે,àªàª¡àª¿àªŸàª° તમારા કિલà«àªªàª¬à«‹àª°à«àª¡ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિનà«àª¡à«‹àª®àª¾àª‚ ફરીથી પેસà«àªŸ કરવà«àª‚ પડશે.",
+DlgPasteIgnoreFont : "ફૉનà«àªŸàª«à«‡àª¸ વà«àª¯àª¾àª–à«àª¯àª¾àª¨à«€ અવગણના",
+DlgPasteRemoveStyles : "સà«àªŸàª¾àª‡àª² વà«àª¯àª¾àª–à«àª¯àª¾ કાઢી નાખવી",
+
+// Color Picker
+ColorAutomatic : "સà«àªµàªšàª¾àª²àª¿àª¤",
+ColorMoreColors : "ઔર રંગ...",
+
+// Document Properties
+DocProps : "ડૉકà«àª¯à«àª®àª¨à«àªŸ ગà«àª£/પà«àª°à«‰àªªàª°à«àªŸàª¿àª",
+
+// Anchor Dialog
+DlgAnchorTitle : "àªàª‚કર ગà«àª£/પà«àª°à«‰àªªàª°à«àªŸàª¿àª",
+DlgAnchorName : "àªàª‚કરનà«àª‚ નામ",
+DlgAnchorErrorName : "àªàª‚કરનà«àª‚ નામ ટાઈપ કરો",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "શબà«àª¦àª•à«‹àª¶àª®àª¾àª‚ નથી",
+DlgSpellChangeTo : "આનાથી બદલવà«àª‚",
+DlgSpellBtnIgnore : "ઇગà«àª¨à«‹àª°/અવગણના કરવી",
+DlgSpellBtnIgnoreAll : "બધાની ઇગà«àª¨à«‹àª°/અવગણના કરવી",
+DlgSpellBtnReplace : "બદલવà«àª‚",
+DlgSpellBtnReplaceAll : "બધા બદલી કરો",
+DlgSpellBtnUndo : "અનà«àª¡à«‚",
+DlgSpellNoSuggestions : "- કઇ સજેશન નથી -",
+DlgSpellProgress : "શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક ચાલૠછે...",
+DlgSpellNoMispell : "શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: ખોટી જોડણી મળી નથી",
+DlgSpellNoChanges : "શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: àªàª•àªªàª£ શબà«àª¦ બદલયો નથી",
+DlgSpellOneChange : "શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: àªàª• શબà«àª¦ બદલયો છે",
+DlgSpellManyChanges : "શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: %1 શબà«àª¦ બદલયા છે",
+
+IeSpellDownload : "સà«àªªà«‡àª²-ચેકર ઇનà«àª¸à«àªŸà«‹àª² નથી. શà«àª‚ તમે ડાઉનલોડ કરવા માંગો છો?",
+
+// Button Dialog
+DlgButtonText : "ટેકà«àª¸à«àªŸ (વૅલà«àª¯à«‚)",
+DlgButtonType : "પà«àª°àª•àª¾àª°",
+DlgButtonTypeBtn : "બટન",
+DlgButtonTypeSbm : "સબà«àª®àª¿àªŸ",
+DlgButtonTypeRst : "રિસેટ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "નામ",
+DlgCheckboxValue : "વૅલà«àª¯à«‚",
+DlgCheckboxSelected : "સિલેકà«àªŸà«‡àª¡",
+
+// Form Dialog
+DlgFormName : "નામ",
+DlgFormAction : "કà«àª°àª¿àª¯àª¾",
+DlgFormMethod : "પદà«àª§àª¤àª¿",
+
+// Select Field Dialog
+DlgSelectName : "નામ",
+DlgSelectValue : "વૅલà«àª¯à«‚",
+DlgSelectSize : "સાઇàª",
+DlgSelectLines : "લીટીઓ",
+DlgSelectChkMulti : "àªàª•àª¥à«€ વધારે પસંદ કરી શકો",
+DlgSelectOpAvail : "ઉપલબà«àª§ વિકલà«àªª",
+DlgSelectOpText : "ટેકà«àª¸à«àªŸ",
+DlgSelectOpValue : "વૅલà«àª¯à«‚",
+DlgSelectBtnAdd : "ઉમેરવà«àª‚",
+DlgSelectBtnModify : "બદલવà«àª‚",
+DlgSelectBtnUp : "ઉપર",
+DlgSelectBtnDown : "નીચે",
+DlgSelectBtnSetValue : "પસંદ કરલી વૅલà«àª¯à«‚ સેટ કરો",
+DlgSelectBtnDelete : "રદ કરવà«àª‚",
+
+// Textarea Dialog
+DlgTextareaName : "નામ",
+DlgTextareaCols : "કૉલમ/ઊભી કટાર",
+DlgTextareaRows : "પંકà«àª¤àª¿àª“",
+
+// Text Field Dialog
+DlgTextName : "નામ",
+DlgTextValue : "વૅલà«àª¯à«‚",
+DlgTextCharWidth : "કેરેકà«àªŸàª°àª¨à«€ પહોળાઈ",
+DlgTextMaxChars : "અધિકતમ કેરેકà«àªŸàª°",
+DlgTextType : "ટાઇપ",
+DlgTextTypeText : "ટેકà«àª¸à«àªŸ",
+DlgTextTypePass : "પાસવરà«àª¡",
+
+// Hidden Field Dialog
+DlgHiddenName : "નામ",
+DlgHiddenValue : "વૅલà«àª¯à«‚",
+
+// Bulleted List Dialog
+BulletedListProp : "બà«àª²à«‡àªŸ સૂચિ ગà«àª£",
+NumberedListProp : "સંખà«àª¯àª¾àª‚કà«àª¤àª¿ સૂચિ ગà«àª£",
+DlgLstStart : "શરૂઆતથી",
+DlgLstType : "પà«àª°àª•àª¾àª°",
+DlgLstTypeCircle : "વરà«àª¤à«àª³",
+DlgLstTypeDisc : "ડિસà«àª•",
+DlgLstTypeSquare : "ચોરસ",
+DlgLstTypeNumbers : "સંખà«àª¯àª¾ (1, 2, 3)",
+DlgLstTypeLCase : "નાના અકà«àª·àª° (a, b, c)",
+DlgLstTypeUCase : "મોટા અકà«àª·àª° (A, B, C)",
+DlgLstTypeSRoman : "નાના રોમન આંક (i, ii, iii)",
+DlgLstTypeLRoman : "મોટા રોમન આંક (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "સાધારણ",
+DlgDocBackTab : "બૅકગà«àª°àª¾àª‰àª¨à«àª¡",
+DlgDocColorsTab : "રંગ અને મારà«àªœàª¿àª¨/કિનાર",
+DlgDocMetaTab : "મેટાડૅટા",
+
+DlgDocPageTitle : "પેજ મથાળà«àª‚/ટાઇટલ",
+DlgDocLangDir : "ભાષા લેખવાની પદà«àª§àª¤àª¿",
+DlgDocLangDirLTR : "ડાબે થી જમણે (LTR)",
+DlgDocLangDirRTL : "જમણે થી ડાબે (RTL)",
+DlgDocLangCode : "ભાષા કોડ",
+DlgDocCharSet : "કેરેકà«àªŸàª° સેટ àªàª¨à«àª•à«‹àª¡àª¿àª‚ગ",
+DlgDocCharSetCE : "મધà«àª¯ યà«àª°à«‹àªªàª¿àª…ન (Central European)",
+DlgDocCharSetCT : "ચાઇનીઠ(Chinese Traditional Big5)",
+DlgDocCharSetCR : "સિરીલિક (Cyrillic)",
+DlgDocCharSetGR : "ગà«àª°à«€àª• (Greek)",
+DlgDocCharSetJP : "જાપાનિઠ(Japanese)",
+DlgDocCharSetKR : "કોરીયન (Korean)",
+DlgDocCharSetTR : "ટરà«àª•àª¿ (Turkish)",
+DlgDocCharSetUN : "યૂનિકોડ (UTF-8)",
+DlgDocCharSetWE : "પશà«àªšàª¿àª® યà«àª°à«‹àªªàª¿àª…ન (Western European)",
+DlgDocCharSetOther : "અનà«àª¯ કેરેકà«àªŸàª° સેટ àªàª¨à«àª•à«‹àª¡àª¿àª‚ગ",
+
+DlgDocDocType : "ડૉકà«àª¯à«àª®àª¨à«àªŸ પà«àª°àª•àª¾àª° શીરà«àª·àª•",
+DlgDocDocTypeOther : "અનà«àª¯ ડૉકà«àª¯à«àª®àª¨à«àªŸ પà«àª°àª•àª¾àª° શીરà«àª·àª•",
+DlgDocIncXHTML : "XHTML સૂચના સમાવિષà«àªŸ કરવી",
+DlgDocBgColor : "બૅકગà«àª°àª¾àª‰àª¨à«àª¡ રંગ",
+DlgDocBgImage : "બૅકગà«àª°àª¾àª‰àª¨à«àª¡ ચિતà«àª° URL",
+DlgDocBgNoScroll : "સà«àª•à«àª°à«‹àª² ન થાય તેવà«àª‚ બૅકગà«àª°àª¾àª‰àª¨à«àª¡",
+DlgDocCText : "ટેકà«àª¸à«àªŸ",
+DlgDocCLink : "લિંક",
+DlgDocCVisited : "વિàªàª¿àªŸà«‡àª¡ લિંક",
+DlgDocCActive : "સકà«àª°àª¿àª¯ લિંક",
+DlgDocMargins : "પેજ મારà«àªœàª¿àª¨",
+DlgDocMaTop : "ઉપર",
+DlgDocMaLeft : "ડાબી",
+DlgDocMaRight : "જમણી",
+DlgDocMaBottom : "નીચે",
+DlgDocMeIndex : "ડૉકà«àª¯à«àª®àª¨à«àªŸ ઇનà«àª¡à«‡àª•à«àª¸ સંકેતશબà«àª¦ (અલà«àªªàªµàª¿àª°àª¾àª® (,) થી અલગ કરો)",
+DlgDocMeDescr : "ડૉકà«àª¯à«àª®àª¨à«àªŸ વરà«àª£àª¨",
+DlgDocMeAuthor : "લેખક",
+DlgDocMeCopy : "કૉપિરાઇટ",
+DlgDocPreview : "પૂરà«àªµàª¦àª°à«àª¶àª¨",
+
+// Templates Dialog
+Templates : "ટેમà«àªªà«àª²à«‡àªŸ",
+DlgTemplatesTitle : "કનà«àªŸà«‡àª¨à«àªŸ ટેમà«àªªà«àª²à«‡àªŸ",
+DlgTemplatesSelMsg : "àªàª¡àª¿àªŸàª°àª®àª¾àª‚ ઓપન કરવા ટેમà«àªªà«àª²à«‡àªŸ પસંદ કરો (વરà«àª¤àª®àª¾àª¨ કનà«àªŸà«‡àª¨à«àªŸ સેવ નહીં થાય):",
+DlgTemplatesLoading : "ટેમà«àªªà«àª²à«‡àªŸ સૂચિ લોડ થાય છે. રાહ જà«àª“...",
+DlgTemplatesNoTpl : "(કોઈ ટેમà«àªªà«àª²à«‡àªŸ ડિફાઇન નથી)",
+DlgTemplatesReplace : "મૂળ શબà«àª¦àª¨à«‡ બદલો",
+
+// About Dialog
+DlgAboutAboutTab : "FCKEditor ના વિષે",
+DlgAboutBrowserInfoTab : "બà«àª°àª¾àª‰àªàª° ના વિષે",
+DlgAboutLicenseTab : "લાઇસનà«àª¸",
+DlgAboutVersion : "વરà«àªàª¨",
+DlgAboutInfo : "વધારે માહિતી માટે:",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/he.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/he.js
new file mode 100644
index 0000000..c352137
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/he.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hebrew language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "rtl",
+
+ToolbarCollapse : "כיווץ סרגל הכלי×",
+ToolbarExpand : "פתיחת סרגל הכלי×",
+
+// Toolbar Items and Context Menu
+Save : "שמירה",
+NewPage : "דף חדש",
+Preview : "תצוגה מקדימה",
+Cut : "גזירה",
+Copy : "העתקה",
+Paste : "הדבקה",
+PasteText : "הדבקה כטקסט פשוט",
+PasteWord : "הדבקה מ-וורד",
+Print : "הדפסה",
+SelectAll : "בחירת הכל",
+RemoveFormat : "הסרת העיצוב",
+InsertLinkLbl : "קישור",
+InsertLink : "הוספת/עריכת קישור",
+RemoveLink : "הסרת הקישור",
+VisitLink : "פתח קישור",
+Anchor : "הוספת/עריכת נקודת עיגון",
+AnchorDelete : "הסר נקודת עיגון",
+InsertImageLbl : "תמונה",
+InsertImage : "הוספת/עריכת תמונה",
+InsertFlashLbl : "פל×ש",
+InsertFlash : "הוסף/ערוך פל×ש",
+InsertTableLbl : "טבלה",
+InsertTable : "הוספת/עריכת טבלה",
+InsertLineLbl : "קו",
+InsertLine : "הוספת קו ×ופקי",
+InsertSpecialCharLbl: "תו מיוחד",
+InsertSpecialChar : "הוספת תו מיוחד",
+InsertSmileyLbl : "סמיילי",
+InsertSmiley : "הוספת סמיילי",
+About : "×ודות FCKeditor",
+Bold : "מודגש",
+Italic : "נטוי",
+Underline : "קו תחתון",
+StrikeThrough : "כתיב מחוק",
+Subscript : "כתיב תחתון",
+Superscript : "כתיב עליון",
+LeftJustify : "יישור לשמ×ל",
+CenterJustify : "מרכוז",
+RightJustify : "יישור לימין",
+BlockJustify : "יישור לשוליי×",
+DecreaseIndent : "הקטנת ×ינדנטציה",
+IncreaseIndent : "הגדלת ×ינדנטציה",
+Blockquote : "בלוק ציטוט",
+CreateDiv : "צור מיכל(תג)DIV",
+EditDiv : "ערוך מיכל (תג)DIV",
+DeleteDiv : "הסר מיכל(תג) DIV",
+Undo : "ביטול צעד ×חרון",
+Redo : "חזרה על צעד ×חרון",
+NumberedListLbl : "רשימה ממוספרת",
+NumberedList : "הוספת/הסרת רשימה ממוספרת",
+BulletedListLbl : "רשימת נקודות",
+BulletedList : "הוספת/הסרת רשימת נקודות",
+ShowTableBorders : "הצגת מסגרת הטבלה",
+ShowDetails : "הצגת פרטי×",
+Style : "סגנון",
+FontFormat : "עיצוב",
+Font : "גופן",
+FontSize : "גודל",
+TextColor : "צבע טקסט",
+BGColor : "צבע רקע",
+Source : "מקור",
+Find : "חיפוש",
+Replace : "החלפה",
+SpellCheck : "בדיקת ×יות",
+UniversalKeyboard : "מקלדת ×וניברסלית",
+PageBreakLbl : "שבירת דף",
+PageBreak : "הוסף שבירת דף",
+
+Form : "טופס",
+Checkbox : "תיבת סימון",
+RadioButton : "לחצן ×פשרויות",
+TextField : "שדה טקסט",
+Textarea : "×יזור טקסט",
+HiddenField : "שדה חבוי",
+Button : "כפתור",
+SelectionField : "שדה בחירה",
+ImageButton : "כפתור תמונה",
+
+FitWindow : "הגדל ×ת גודל העורך",
+ShowBlocks : "הצג בלוקי×",
+
+// Context Menu
+EditLink : "עריכת קישור",
+CellCM : "ת×",
+RowCM : "שורה",
+ColumnCM : "עמודה",
+InsertRowAfter : "הוסף שורה ×חרי",
+InsertRowBefore : "הוסף שורה לפני",
+DeleteRows : "מחיקת שורות",
+InsertColumnAfter : "הוסף עמודה ×חרי",
+InsertColumnBefore : "הוסף עמודה לפני",
+DeleteColumns : "מחיקת עמודות",
+InsertCellAfter : "הוסף ×ª× ×חרי",
+InsertCellBefore : "הוסף ×ª× ×חרי",
+DeleteCells : "מחיקת ת××™×",
+MergeCells : "מיזוג ת××™×",
+MergeRight : "מזג ימינה",
+MergeDown : "מזג למטה",
+HorizontalSplitCell : "פצל ×ª× ×ופקית",
+VerticalSplitCell : "פצל ×ª× ×נכית",
+TableDelete : "מחק טבלה",
+CellProperties : "תכונות הת×",
+TableProperties : "תכונות הטבלה",
+ImageProperties : "תכונות התמונה",
+FlashProperties : "מ×פייני פל×ש",
+
+AnchorProp : "מ×פייני נקודת עיגון",
+ButtonProp : "מ×פייני כפתור",
+CheckboxProp : "מ×פייני תיבת סימון",
+HiddenFieldProp : "מ×פיני שדה חבוי",
+RadioButtonProp : "מ×פייני לחצן ×פשרויות",
+ImageButtonProp : "מ×פיני כפתור תמונה",
+TextFieldProp : "מ×פייני שדה טקסט",
+SelectionFieldProp : "מ×פייני שדה בחירה",
+TextareaProp : "מ×פיני ×יזור טקסט",
+FormProp : "מ×פיני טופס",
+
+FontFormats : "נורמלי;קוד;כתובת;כותרת;כותרת 2;כותרת 3;כותרת 4;כותרת 5;כותרת 6",
+
+// Alerts and Messages
+ProcessingXHTML : "מעבד XHTML, × × ×œ×”×ž×ª×™×Ÿ...",
+Done : "המשימה הושלמה",
+PasteWordConfirm : "נר××” הטקסט שבכוונתך להדביק מקורו בקובץ וורד. ×”×× ×‘×¨×¦×•× ×š לנקות ×ותו ×˜×¨× ×”×”×“×‘×§×”?",
+NotCompatiblePaste : "פעולה זו זמינה לדפדפן ×ינטרנט ×קספלורר ×ž×’×™×¨×¡× 5.5 ומעלה. ×”×× ×œ×”×ž×©×™×š בהדבקה ×œ×œ× ×”× ×™×§×•×™?",
+UnknownToolbarItem : "פריט ×œ× ×™×“×•×¢ בסרגל ×”×›×œ×™× \"%1\"",
+UnknownCommand : "×©× ×¤×¢×•×œ×” ×œ× ×™×“×•×¢ \"%1\"",
+NotImplemented : "הפקודה ×œ× ×ž×™×•×©×ž×ª",
+UnknownToolbarSet : "ערכת סרגל ×”×›×œ×™× \"%1\" ×œ× ×§×™×™×ž×ª",
+NoActiveX : "הגדרות ×בטחה של הדפדפן עלולות לגביל ×ת ×פשרויות העריכה.יש ל×פשר ×ת ×”×ופציה \"הרץ ×¤×§×“×™× ×¤×¢×™×œ×™× ×•×ª×•×¡×¤×•×ª\". תוכל לחוות טעויות ×•×—×™×•×•×™× ×©×œ ×פשרויות שחסרי×.",
+BrowseServerBlocked : "×œ× × ×™×ª×Ÿ לגשת לדפדפן מש×בי×.×× × ×•×•×“× ×©×—×•×¡× ×—×œ×•× ×•×ª ×”×§×•×¤×¦×™× ×œ× ×¤×¢×™×œ.",
+DialogBlocked : "×œ× ×”×™×” ניתן לפתוח חלון די×לוג. ×× × ×•×•×“× ×©×—×•×¡× ×—×œ×•× ×•×ª ×§×•×¤×¦×™× ×œ× ×¤×¢×™×œ.",
+VisitLinkBlocked : "×œ× × ×™×ª×Ÿ לפתוח חלון חדש.× × ×œ×•×•×“× ×©×—×•×¡×ž×™ החלונות ×”×§×•×¤×¦×™× ×œ× ×¤×¢×™×œ×™×.",
+
+// Dialogs
+DlgBtnOK : "×ישור",
+DlgBtnCancel : "ביטול",
+DlgBtnClose : "סגירה",
+DlgBtnBrowseServer : "סייר השרת",
+DlgAdvancedTag : "×פשרויות מתקדמות",
+DlgOpOther : "<×חר>",
+DlgInfoTab : "מידע",
+DlgAlertUrl : "×× × ×”×–×Ÿ URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<×œ× × ×§×‘×¢>",
+DlgGenId : "זיהוי (Id)",
+DlgGenLangDir : "כיוון שפה",
+DlgGenLangDirLtr : "שמ×ל לימין (LTR)",
+DlgGenLangDirRtl : "ימין לשמ×ל (RTL)",
+DlgGenLangCode : "קוד שפה",
+DlgGenAccessKey : "מקש גישה",
+DlgGenName : "ש×",
+DlgGenTabIndex : "מספר ט×ב",
+DlgGenLongDescr : "קישור לתי×ור מפורט",
+DlgGenClass : "גיליונות עיצוב קבוצות",
+DlgGenTitle : "כותרת מוצעת",
+DlgGenContType : "Content Type מוצע",
+DlgGenLinkCharset : "קידוד המש×ב המקושר",
+DlgGenStyle : "סגנון",
+
+// Image Dialog
+DlgImgTitle : "תכונות התמונה",
+DlgImgInfoTab : "מידע על התמונה",
+DlgImgBtnUpload : "שליחה לשרת",
+DlgImgURL : "כתובת (URL)",
+DlgImgUpload : "העל××”",
+DlgImgAlt : "טקסט חלופי",
+DlgImgWidth : "רוחב",
+DlgImgHeight : "גובה",
+DlgImgLockRatio : "נעילת היחס",
+DlgBtnResetSize : "×יפוס הגודל",
+DlgImgBorder : "מסגרת",
+DlgImgHSpace : "מרווח ×ופקי",
+DlgImgVSpace : "מרווח ×× ×›×™",
+DlgImgAlign : "יישור",
+DlgImgAlignLeft : "לשמ×ל",
+DlgImgAlignAbsBottom: "לתחתית ×”×בסולוטית",
+DlgImgAlignAbsMiddle: "מרכוז ×בסולוטי",
+DlgImgAlignBaseline : "לקו התחתית",
+DlgImgAlignBottom : "לתחתית",
+DlgImgAlignMiddle : "ל×מצע",
+DlgImgAlignRight : "לימין",
+DlgImgAlignTextTop : "לר×ש הטקסט",
+DlgImgAlignTop : "למעלה",
+DlgImgPreview : "תצוגה מקדימה",
+DlgImgAlertUrl : "× × ×œ×”×§×œ×™×“ ×ת כתובת התמונה",
+DlgImgLinkTab : "קישור",
+
+// Flash Dialog
+DlgFlashTitle : "מ×פיני פל×ש",
+DlgFlashChkPlay : "נגן ×וטומטי",
+DlgFlashChkLoop : "לול××”",
+DlgFlashChkMenu : "×פשר תפריט פל×ש",
+DlgFlashScale : "גודל",
+DlgFlashScaleAll : "הצג הכל",
+DlgFlashScaleNoBorder : "×œ×œ× ×’×‘×•×œ×•×ª",
+DlgFlashScaleFit : "הת×מה מושלמת",
+
+// Link Dialog
+DlgLnkWindowTitle : "קישור",
+DlgLnkInfoTab : "מידע על הקישור",
+DlgLnkTargetTab : "מטרה",
+
+DlgLnkType : "סוג קישור",
+DlgLnkTypeURL : "כתובת (URL)",
+DlgLnkTypeAnchor : "עוגן בעמוד זה",
+DlgLnkTypeEMail : "דו×''ל",
+DlgLnkProto : "פרוטוקול",
+DlgLnkProtoOther : "<×חר>",
+DlgLnkURL : "כתובת (URL)",
+DlgLnkAnchorSel : "בחירת עוגן",
+DlgLnkAnchorByName : "עפ''×™ ×©× ×”×¢×•×’×Ÿ",
+DlgLnkAnchorById : "עפ''י זיהוי (Id) הרכיב",
+DlgLnkNoAnchors : "(×ין ×¢×•×’× ×™× ×–×ž×™× ×™× ×‘×“×£)",
+DlgLnkEMail : "כתובת הדו×''ל",
+DlgLnkEMailSubject : "× ×•×©× ×”×”×•×“×¢×”",
+DlgLnkEMailBody : "גוף ההודעה",
+DlgLnkUpload : "העל××”",
+DlgLnkBtnUpload : "שליחה לשרת",
+
+DlgLnkTarget : "מטרה",
+DlgLnkTargetFrame : "<מסגרת>",
+DlgLnkTargetPopup : "<חלון קופץ>",
+DlgLnkTargetBlank : "חלון חדש (_blank)",
+DlgLnkTargetParent : "חלון ×”×ב (_parent)",
+DlgLnkTargetSelf : "ב×ותו החלון (_self)",
+DlgLnkTargetTop : "חלון ר×שי (_top)",
+DlgLnkTargetFrameName : "×©× ×ž×¡×’×¨×ª היעד",
+DlgLnkPopWinName : "×©× ×”×—×œ×•×Ÿ הקופץ",
+DlgLnkPopWinFeat : "תכונות החלון הקופץ",
+DlgLnkPopResize : "בעל גודל ניתן לשינוי",
+DlgLnkPopLocation : "סרגל כתובת",
+DlgLnkPopMenu : "סרגל תפריט",
+DlgLnkPopScroll : "ניתן לגלילה",
+DlgLnkPopStatus : "סרגל חיווי",
+DlgLnkPopToolbar : "סרגל הכלי×",
+DlgLnkPopFullScrn : "מסך ×ž×œ× (IE)",
+DlgLnkPopDependent : "תלוי (Netscape)",
+DlgLnkPopWidth : "רוחב",
+DlgLnkPopHeight : "גובה",
+DlgLnkPopLeft : "×ž×™×§×•× ×¦×“ שמ×ל",
+DlgLnkPopTop : "×ž×™×§×•× ×¦×“ עליון",
+
+DlnLnkMsgNoUrl : "× × ×œ×”×§×œ×™×“ ×ת כתובת הקישור (URL)",
+DlnLnkMsgNoEMail : "× × ×œ×”×§×œ×™×“ ×ת כתובת הדו×''ל",
+DlnLnkMsgNoAnchor : "× × ×œ×‘×—×•×¨ עוגן במסמך",
+DlnLnkMsgInvPopName : "×©× ×”×—×œ×•×Ÿ הקופץ חייב להתחיל ב×ותיות ו×סור לכלול רווחי×",
+
+// Color Dialog
+DlgColorTitle : "בחירת צבע",
+DlgColorBtnClear : "×יפוס",
+DlgColorHighlight : "נוכחי",
+DlgColorSelected : "נבחר",
+
+// Smiley Dialog
+DlgSmileyTitle : "הוספת סמיילי",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "בחירת תו מיוחד",
+
+// Table Dialog
+DlgTableTitle : "תכונות טבלה",
+DlgTableRows : "שורות",
+DlgTableColumns : "עמודות",
+DlgTableBorder : "גודל מסגרת",
+DlgTableAlign : "יישור",
+DlgTableAlignNotSet : "<×œ× × ×§×‘×¢>",
+DlgTableAlignLeft : "שמ×ל",
+DlgTableAlignCenter : "מרכז",
+DlgTableAlignRight : "ימין",
+DlgTableWidth : "רוחב",
+DlgTableWidthPx : "פיקסלי×",
+DlgTableWidthPc : "×חוז",
+DlgTableHeight : "גובה",
+DlgTableCellSpace : "מרווח ת×",
+DlgTableCellPad : "ריפוד ת×",
+DlgTableCaption : "כיתוב",
+DlgTableSummary : "סיכו×",
+DlgTableHeaders : "כותרות",
+DlgTableHeadersNone : "×ין",
+DlgTableHeadersColumn : "עמודה ר×שונה",
+DlgTableHeadersRow : "שורה ר×שונה",
+DlgTableHeadersBoth : "שניה×",
+
+// Table Cell Dialog
+DlgCellTitle : "תכונות ת×",
+DlgCellWidth : "רוחב",
+DlgCellWidthPx : "פיקסלי×",
+DlgCellWidthPc : "×חוז",
+DlgCellHeight : "גובה",
+DlgCellWordWrap : "גלילת שורות",
+DlgCellWordWrapNotSet : "<×œ× × ×§×‘×¢>",
+DlgCellWordWrapYes : "כן",
+DlgCellWordWrapNo : "ל×",
+DlgCellHorAlign : "יישור ×ופקי",
+DlgCellHorAlignNotSet : "<×œ× × ×§×‘×¢>",
+DlgCellHorAlignLeft : "שמ×ל",
+DlgCellHorAlignCenter : "מרכז",
+DlgCellHorAlignRight: "ימין",
+DlgCellVerAlign : "יישור ×× ×›×™",
+DlgCellVerAlignNotSet : "<×œ× × ×§×‘×¢>",
+DlgCellVerAlignTop : "למעלה",
+DlgCellVerAlignMiddle : "ל×מצע",
+DlgCellVerAlignBottom : "לתחתית",
+DlgCellVerAlignBaseline : "קו תחתית",
+DlgCellType : "סוג ת×",
+DlgCellTypeData : "סוג",
+DlgCellTypeHeader : "כותרת",
+DlgCellRowSpan : "טווח שורות",
+DlgCellCollSpan : "טווח עמודות",
+DlgCellBackColor : "צבע רקע",
+DlgCellBorderColor : "צבע מסגרת",
+DlgCellBtnSelect : "בחירה...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "חפש והחלף",
+
+// Find Dialog
+DlgFindTitle : "חיפוש",
+DlgFindFindBtn : "חיפוש",
+DlgFindNotFoundMsg : "הטקסט המבוקש ×œ× × ×ž×¦×.",
+
+// Replace Dialog
+DlgReplaceTitle : "החלפה",
+DlgReplaceFindLbl : "חיפוש מחרוזת:",
+DlgReplaceReplaceLbl : "החלפה במחרוזת:",
+DlgReplaceCaseChk : "הת×מת סוג ×ותיות (Case)",
+DlgReplaceReplaceBtn : "החלפה",
+DlgReplaceReplAllBtn : "החלפה בכל העמוד",
+DlgReplaceWordChk : "הת×מה למילה המל××”",
+
+// Paste Operations / Dialog
+PasteErrorCut : "הגדרות ×”×בטחה בדפדפן שלך ×œ× ×ž×פשרות לעורך לבצע פעולות גזירה ×וטומטיות. יש להשתמש במקלדת ×œ×©× ×›×š (Ctrl+X).",
+PasteErrorCopy : "הגדרות ×”×בטחה בדפדפן שלך ×œ× ×ž×פשרות לעורך לבצע פעולות העתקה ×וטומטיות. יש להשתמש במקלדת ×œ×©× ×›×š (Ctrl+C).",
+
+PasteAsText : "הדבקה כטקסט פשוט",
+PasteFromWord : "הדבקה מ-וורד",
+
+DlgPasteMsg2 : "×× × ×”×“×‘×§ בתוך הקופסה ב×מצעות (<STRONG>Ctrl+V</STRONG>) ולחץ על <STRONG>×ישור</STRONG>.",
+DlgPasteSec : "עקב הגדרות ×בטחה בדפדפן, ×œ× × ×™×ª×Ÿ לגשת ×ל לוח ×”×’×–×™×¨×™× (clipboard) בצורה ישירה.×× × ×‘×¦×¢ הדבק שוב בחלון ×–×”.",
+DlgPasteIgnoreFont : "×”×ª×¢×œ× ×ž×”×’×“×¨×•×ª סוג פונט",
+DlgPasteRemoveStyles : "הסר הגדרות סגנון",
+
+// Color Picker
+ColorAutomatic : "×וטומטי",
+ColorMoreColors : "×¦×‘×¢×™× × ×•×¡×¤×™×...",
+
+// Document Properties
+DocProps : "מ×פיני מסמך",
+
+// Anchor Dialog
+DlgAnchorTitle : "מ×פיני נקודת עיגון",
+DlgAnchorName : "×©× ×œ× ×§×•×“×ª עיגון",
+DlgAnchorErrorName : "×× × ×”×–×Ÿ ×©× ×œ× ×§×•×“×ª עיגון",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "×œ× × ×ž×¦× ×‘×ž×™×œ×•×Ÿ",
+DlgSpellChangeTo : "שנה ל",
+DlgSpellBtnIgnore : "התעל×",
+DlgSpellBtnIgnoreAll : "×”×ª×¢×œ× ×ž×”×›×œ",
+DlgSpellBtnReplace : "החלף",
+DlgSpellBtnReplaceAll : "החלף הכל",
+DlgSpellBtnUndo : "החזר",
+DlgSpellNoSuggestions : "- ×ין הצעות -",
+DlgSpellProgress : "בדיקות ×יות בתהליך ....",
+DlgSpellNoMispell : "בדיקות ×יות הסתיימה: ×œ× × ×ž×¦×ו שגיעות כתיב",
+DlgSpellNoChanges : "בדיקות ×יות הסתיימה: ×œ× ×©×•× ×ª×” ××£ מילה",
+DlgSpellOneChange : "בדיקות ×יות הסתיימה: שונתה מילה ×חת",
+DlgSpellManyChanges : "בדיקות ×יות הסתיימה: %1 ×ž×™×œ×™× ×©×•× ×•",
+
+IeSpellDownload : "בודק ×”×יות ×œ× ×ž×•×ª×§×Ÿ, ×”×× ×תה מעוניין להוריד?",
+
+// Button Dialog
+DlgButtonText : "טקסט (ערך)",
+DlgButtonType : "סוג",
+DlgButtonTypeBtn : "כפתור",
+DlgButtonTypeSbm : "שלח",
+DlgButtonTypeRst : "×פס",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "ש×",
+DlgCheckboxValue : "ערך",
+DlgCheckboxSelected : "בחור",
+
+// Form Dialog
+DlgFormName : "ש×",
+DlgFormAction : "שלח ×ל",
+DlgFormMethod : "סוג שליחה",
+
+// Select Field Dialog
+DlgSelectName : "ש×",
+DlgSelectValue : "ערך",
+DlgSelectSize : "גודל",
+DlgSelectLines : "שורות",
+DlgSelectChkMulti : "×פשר בחירות מרובות",
+DlgSelectOpAvail : "×פשרויות זמינות",
+DlgSelectOpText : "טקסט",
+DlgSelectOpValue : "ערך",
+DlgSelectBtnAdd : "הוסף",
+DlgSelectBtnModify : "שנה",
+DlgSelectBtnUp : "למעלה",
+DlgSelectBtnDown : "למטה",
+DlgSelectBtnSetValue : "קבע כברירת מחדל",
+DlgSelectBtnDelete : "מחק",
+
+// Textarea Dialog
+DlgTextareaName : "ש×",
+DlgTextareaCols : "עמודות",
+DlgTextareaRows : "שורות",
+
+// Text Field Dialog
+DlgTextName : "ש×",
+DlgTextValue : "ערך",
+DlgTextCharWidth : "רוחב ב×ותיות",
+DlgTextMaxChars : "מקסימות ×ותיות",
+DlgTextType : "סוג",
+DlgTextTypeText : "טקסט",
+DlgTextTypePass : "סיסמה",
+
+// Hidden Field Dialog
+DlgHiddenName : "ש×",
+DlgHiddenValue : "ערך",
+
+// Bulleted List Dialog
+BulletedListProp : "מ×פייני רשימה",
+NumberedListProp : "מ×פייני רשימה ממוספרת",
+DlgLstStart : "התחלה",
+DlgLstType : "סוג",
+DlgLstTypeCircle : "עיגול",
+DlgLstTypeDisc : "דיסק",
+DlgLstTypeSquare : "מרובע",
+DlgLstTypeNumbers : "×ž×¡×¤×¨×™× (1, 2, 3)",
+DlgLstTypeLCase : "×ותיות קטנות (a, b, c)",
+DlgLstTypeUCase : "×ותיות גדולות (A, B, C)",
+DlgLstTypeSRoman : "ספרות רומ×יות קטנות (i, ii, iii)",
+DlgLstTypeLRoman : "ספרות רומ×יות גדולות (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "כללי",
+DlgDocBackTab : "רקע",
+DlgDocColorsTab : "×¦×‘×¢×™× ×•×’×‘×•×œ×•×ª",
+DlgDocMetaTab : "נתוני META",
+
+DlgDocPageTitle : "כותרת דף",
+DlgDocLangDir : "כיוון שפה",
+DlgDocLangDirLTR : "שמ×ל לימין (LTR)",
+DlgDocLangDirRTL : "ימין לשמ×ל (RTL)",
+DlgDocLangCode : "קוד שפה",
+DlgDocCharSet : "קידוד ×ותיות",
+DlgDocCharSetCE : "מרכז ×ירופה",
+DlgDocCharSetCT : "סיני מסורתי (Big5)",
+DlgDocCharSetCR : "קירילי",
+DlgDocCharSetGR : "יוונית",
+DlgDocCharSetJP : "יפנית",
+DlgDocCharSetKR : "קור×נית",
+DlgDocCharSetTR : "טורקית",
+DlgDocCharSetUN : "יוני קוד (UTF-8)",
+DlgDocCharSetWE : "מערב ×ירופה",
+DlgDocCharSetOther : "קידוד ×ותיות ×חר",
+
+DlgDocDocType : "הגדרות סוג מסמך",
+DlgDocDocTypeOther : "הגדרות סוג מסמך ×חרות",
+DlgDocIncXHTML : "כלול הגדרות XHTML",
+DlgDocBgColor : "צבע רקע",
+DlgDocBgImage : "URL לתמונת רקע",
+DlgDocBgNoScroll : "רגע ×œ×œ× ×’×œ×™×œ×”",
+DlgDocCText : "טקסט",
+DlgDocCLink : "קישור",
+DlgDocCVisited : "קישור שבוקר",
+DlgDocCActive : " קישור פעיל",
+DlgDocMargins : "גבולות דף",
+DlgDocMaTop : "למעלה",
+DlgDocMaLeft : "שמ×לה",
+DlgDocMaRight : "ימינה",
+DlgDocMaBottom : "למטה",
+DlgDocMeIndex : "מפתח ×¢× ×™×™× ×™× ×©×œ המסמך )מופרד בפסיק(",
+DlgDocMeDescr : "ת×ור מסמך",
+DlgDocMeAuthor : "מחבר",
+DlgDocMeCopy : "זכויות יוצרי×",
+DlgDocPreview : "תצוגה מקדימה",
+
+// Templates Dialog
+Templates : "תבניות",
+DlgTemplatesTitle : "תביות תוכן",
+DlgTemplatesSelMsg : "×× × ×‘×—×¨ תבנית לפתיחה בעורך <BR>התוכן המקורי ימחק:",
+DlgTemplatesLoading : "מעלה רשימת תבניות ×× × ×”×ž×ª×Ÿ",
+DlgTemplatesNoTpl : "(×œ× ×”×•×’×“×¨×• תבניות)",
+DlgTemplatesReplace : "החלפת תוכן ממשי",
+
+// About Dialog
+DlgAboutAboutTab : "×ודות",
+DlgAboutBrowserInfoTab : "גירסת דפדפן",
+DlgAboutLicenseTab : "רשיון",
+DlgAboutVersion : "גירס×",
+DlgAboutInfo : "מידע נוסף ניתן ×œ×ž×¦×•× ×›×ן:",
+
+// Div Dialog
+DlgDivGeneralTab : "כללי",
+DlgDivAdvancedTab : "מתקד×",
+DlgDivStyle : "סגנון",
+DlgDivInlineStyle : "סגנון בתוך השורה"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hi.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hi.js
new file mode 100644
index 0000000..e68131b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hi.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hindi language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "टूलबार सिमटायें",
+ToolbarExpand : "टूलबार का विसà¥à¤¤à¤¾à¤° करें",
+
+// Toolbar Items and Context Menu
+Save : "सेव",
+NewPage : "नया पेज",
+Preview : "पà¥à¤°à¥€à¤µà¥à¤¯à¥‚",
+Cut : "कट",
+Copy : "कॉपी",
+Paste : "पेसà¥à¤Ÿ",
+PasteText : "पेसà¥à¤Ÿ (सादा टॅकà¥à¤¸à¥à¤Ÿ)",
+PasteWord : "पेसà¥à¤Ÿ (वरà¥à¤¡ से)",
+Print : "पà¥à¤°à¤¿à¤¨à¥à¤Ÿ",
+SelectAll : "सब सॅलॅकà¥à¤Ÿ करें",
+RemoveFormat : "फ़ॉरà¥à¤®à¥ˆà¤Ÿ हटायें",
+InsertLinkLbl : "लिंक",
+InsertLink : "लिंक इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन",
+RemoveLink : "लिंक हटायें",
+VisitLink : "लिंक खोलें",
+Anchor : "à¤à¤‚कर इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन",
+AnchorDelete : "à¤à¤‚कर हटायें",
+InsertImageLbl : "तसà¥à¤µà¥€à¤°",
+InsertImage : "तसà¥à¤µà¥€à¤° इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन",
+InsertFlashLbl : "फ़à¥à¤²à¥ˆà¤¶",
+InsertFlash : "फ़à¥à¤²à¥ˆà¤¶ इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन",
+InsertTableLbl : "टेबल",
+InsertTable : "टेबल इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन",
+InsertLineLbl : "रेखा",
+InsertLine : "हॉरिज़ॉनà¥à¤Ÿà¤² रेखा इनà¥à¤¸à¤°à¥à¤Ÿ करें",
+InsertSpecialCharLbl: "विशेष करॅकà¥à¤Ÿà¤°",
+InsertSpecialChar : "विशेष करॅकà¥à¤Ÿà¤° इनà¥à¤¸à¤°à¥à¤Ÿ करें",
+InsertSmileyLbl : "सà¥à¤®à¤¾à¤‡à¤²à¥€",
+InsertSmiley : "सà¥à¤®à¤¾à¤‡à¤²à¥€ इनà¥à¤¸à¤°à¥à¤Ÿ करें",
+About : "FCKeditor के बारे में",
+Bold : "बोलà¥à¤¡",
+Italic : "इटैलिक",
+Underline : "रेखांकण",
+StrikeThrough : "सà¥à¤Ÿà¥à¤°à¤¾à¤‡à¤• थà¥à¤°à¥‚",
+Subscript : "अधोलेख",
+Superscript : "अभिलेख",
+LeftJustify : "बायीं तरफ",
+CenterJustify : "बीच में",
+RightJustify : "दायीं तरफ",
+BlockJustify : "बà¥à¤²à¥‰à¤• जसà¥à¤Ÿà¥€à¥žà¤¾à¤ˆ",
+DecreaseIndent : "इनà¥à¤¡à¥…नà¥à¤Ÿ कम करें",
+IncreaseIndent : "इनà¥à¤¡à¥…नà¥à¤Ÿ बà¥à¤¾à¤¯à¥‡à¤‚",
+Blockquote : "बà¥à¤²à¥‰à¤•-कोट",
+CreateDiv : "डिव (Div) कनà¥à¤Ÿà¥‡à¤¨à¤° बनायें",
+EditDiv : "डिव (Div) कनà¥à¤Ÿà¥‡à¤¨à¤° बदलें",
+DeleteDiv : "डिव कनà¥à¤Ÿà¥‡à¤¨à¤° हटायें",
+Undo : "अनà¥à¤¡à¥‚",
+Redo : "रीडू",
+NumberedListLbl : "अंकीय सूची",
+NumberedList : "अंकीय सूची इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन",
+BulletedListLbl : "बà¥à¤²à¥…ट सूची",
+BulletedList : "बà¥à¤²à¥…ट सूची इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन",
+ShowTableBorders : "टेबल बॉरà¥à¤¡à¤°à¤¯à¥‡à¤‚ दिखायें",
+ShowDetails : "जà¥à¤¯à¤¾à¤¦à¤¾ दिखायें",
+Style : "सà¥à¤Ÿà¤¾à¤‡à¤²",
+FontFormat : "फ़ॉरà¥à¤®à¥ˆà¤Ÿ",
+Font : "फ़ॉनà¥à¤Ÿ",
+FontSize : "साइज़",
+TextColor : "टेकà¥à¤¸à¥à¤Ÿ रंग",
+BGColor : "बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡ रंग",
+Source : "सोरà¥à¤¸",
+Find : "खोजें",
+Replace : "रीपà¥à¤²à¥‡à¤¸",
+SpellCheck : "वरà¥à¤¤à¤¨à¥€ (सà¥à¤ªà¥‡à¤²à¤¿à¤‚ग) जाà¤à¤š",
+UniversalKeyboard : "यूनीवरà¥à¤¸à¤² कीबोरà¥à¤¡",
+PageBreakLbl : "पेज बà¥à¤°à¥‡à¤•",
+PageBreak : "पेज बà¥à¤°à¥‡à¤• इनà¥à¤¸à¤°à¥à¤Ÿà¥ करें",
+
+Form : "फ़ॉरà¥à¤®",
+Checkbox : "चॅक बॉकà¥à¤¸",
+RadioButton : "रेडिओ बटन",
+TextField : "टेकà¥à¤¸à¥à¤Ÿ फ़ीलà¥à¤¡",
+Textarea : "टेकà¥à¤¸à¥à¤Ÿ à¤à¤°à¤¿à¤¯à¤¾",
+HiddenField : "गà¥à¤ªà¥à¤¤ फ़ीलà¥à¤¡",
+Button : "बटन",
+SelectionField : "चà¥à¤¨à¤¾à¤µ फ़ीलà¥à¤¡",
+ImageButton : "तसà¥à¤µà¥€à¤° बटन",
+
+FitWindow : "à¤à¤¡à¤¿à¤Ÿà¤° साइज़ को चरम सीमा तक बà¥à¤¾à¤¯à¥‡à¤‚",
+ShowBlocks : "बà¥à¤²à¥‰à¤• दिखायें",
+
+// Context Menu
+EditLink : "लिंक संपादन",
+CellCM : "खाना",
+RowCM : "पंकà¥à¤¤à¤¿",
+ColumnCM : "कालम",
+InsertRowAfter : "बाद में पंकà¥à¤¤à¤¿ डालें",
+InsertRowBefore : "पहले पंकà¥à¤¤à¤¿ डालें",
+DeleteRows : "पंकà¥à¤¤à¤¿à¤¯à¤¾à¤ डिलीट करें",
+InsertColumnAfter : "बाद में कालम डालें",
+InsertColumnBefore : "पहले कालम डालें",
+DeleteColumns : "कालम डिलीट करें",
+InsertCellAfter : "बाद में सैल डालें",
+InsertCellBefore : "पहले सैल डालें",
+DeleteCells : "सैल डिलीट करें",
+MergeCells : "सैल मिलायें",
+MergeRight : "बाà¤à¤¯à¤¾ विलय",
+MergeDown : "नीचे विलय करें",
+HorizontalSplitCell : "सैल को कà¥à¤·à¥ˆà¤¤à¤¿à¤œ सà¥à¤¥à¤¿à¤¤à¤¿ में विभाजित करें",
+VerticalSplitCell : "सैल को लमà¥à¤¬à¤¾à¤•à¤¾à¤° में विभाजित करें",
+TableDelete : "टेबल डिलीट करें",
+CellProperties : "सैल पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+TableProperties : "टेबल पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+ImageProperties : "तसà¥à¤µà¥€à¤° पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+FlashProperties : "फ़à¥à¤²à¥ˆà¤¶ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+
+AnchorProp : "à¤à¤‚कर पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+ButtonProp : "बटन पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+CheckboxProp : "चॅक बॉकà¥à¤¸ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+HiddenFieldProp : "गà¥à¤ªà¥à¤¤ फ़ीलà¥à¤¡ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+RadioButtonProp : "रेडिओ बटन पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+ImageButtonProp : "तसà¥à¤µà¥€à¤° बटन पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+TextFieldProp : "टेकà¥à¤¸à¥à¤Ÿ फ़ीलà¥à¤¡ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+SelectionFieldProp : "चà¥à¤¨à¤¾à¤µ फ़ीलà¥à¤¡ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+TextareaProp : "टेकà¥à¤¸à¥à¤¤ à¤à¤°à¤¿à¤¯à¤¾ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+FormProp : "फ़ॉरà¥à¤® पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+
+FontFormats : "साधारण;फ़ॉरà¥à¤®à¥ˆà¤Ÿà¥…ड;पता;शीरà¥à¤·à¤• 1;शीरà¥à¤·à¤• 2;शीरà¥à¤·à¤• 3;शीरà¥à¤·à¤• 4;शीरà¥à¤·à¤• 5;शीरà¥à¤·à¤• 6;शीरà¥à¤·à¤• (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML पà¥à¤°à¥‹à¤¸à¥…स हो रहा है। ज़रा ठहरें...",
+Done : "पूरा हà¥à¤†",
+PasteWordConfirm : "आप जो टेकà¥à¤¸à¥à¤Ÿ पेसà¥à¤Ÿ करना चाहते हैं, वह वरà¥à¤¡ से कॉपी किया हà¥à¤† लग रहा है। कà¥à¤¯à¤¾ पेसà¥à¤Ÿ करने से पहले आप इसे साफ़ करना चाहेंगे?",
+NotCompatiblePaste : "यह कमांड इनà¥à¤Ÿà¤°à¤¨à¥…ट à¤à¤•à¥à¤¸à¥à¤ªà¥à¤²à¥‹à¤°à¤°(Internet Explorer) 5.5 या उसके बाद के वरà¥à¥›à¤¨ के लिठही उपलबà¥à¤§ है। कà¥à¤¯à¤¾ आप बिना साफ़ किठपेसà¥à¤Ÿ करना चाहेंगे?",
+UnknownToolbarItem : "अनजान टूलबार आइटम \"%1\"",
+UnknownCommand : "अनजान कमानà¥à¤¡ \"%1\"",
+NotImplemented : "कमानà¥à¤¡ इमà¥à¤ªà¥à¤²à¥€à¤®à¥…नà¥à¤Ÿ नहीं किया गया है",
+UnknownToolbarSet : "टूलबार सॅट \"%1\" उपलबà¥à¤§ नहीं है",
+NoActiveX : "आपके बà¥à¤°à¤¾à¤‰à¥›à¤°à¥ की सà¥à¤°à¤•à¥à¤¶à¤¾ सेटिंगà¥à¤¸à¥ à¤à¤¡à¤¿à¤Ÿà¤° की कà¥à¤›à¥ फ़ीचरों को सीमित करॠसकती हैं। कà¥à¤°à¤¿à¤ªà¤¯à¤¾ \"Run ActiveX controls and plug-ins\" विकलà¥à¤ª को à¤à¤¨à¥‡à¤¬à¤² करें. आपको à¤à¤°à¤°à¥à¤¸à¥ और गायब फ़ीचरà¥à¤¸à¥ का अनà¥à¤­à¤µ हो सकता है।",
+BrowseServerBlocked : "रिसोरà¥à¤¸à¥‡à¥› बà¥à¤°à¤¾à¤‰à¥›à¤°à¥ नहीं खोला जा सका। कà¥à¤°à¤¿à¤ªà¤¯à¤¾ सभी पॉपà¥-अपॠबà¥à¤²à¥‰à¤•à¤°à¥à¤¸à¥ को निषà¥à¤•à¥à¤°à¤¿à¤¯ करें।",
+DialogBlocked : "डायलग विनà¥à¤¡à¥‹ नहीं खोला जा सका। कà¥à¤°à¤¿à¤ªà¤¯à¤¾ सभी पॉपà¥-अपॠबà¥à¤²à¥‰à¤•à¤°à¥à¤¸à¥ को निषà¥à¤•à¥à¤°à¤¿à¤¯ करें।",
+VisitLinkBlocked : "नया विनà¥à¤¡à¥‹ नहीं खोला जा सका। कà¥à¤°à¤¿à¤ªà¤¯à¤¾ सभी पॉपà¥-अपॠबà¥à¤²à¥‰à¤•à¤°à¥à¤¸à¥ को निषà¥à¤•à¥à¤°à¤¿à¤¯ करें।",
+
+// Dialogs
+DlgBtnOK : "ठीक है",
+DlgBtnCancel : "रदà¥à¤¦ करें",
+DlgBtnClose : "बनà¥à¤¦ करें",
+DlgBtnBrowseServer : "सरà¥à¤µà¤° बà¥à¤°à¤¾à¤‰à¥› करें",
+DlgAdvancedTag : "à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡",
+DlgOpOther : "<अनà¥à¤¯>",
+DlgInfoTab : "सूचना",
+DlgAlertUrl : "URL इनà¥à¤¸à¤°à¥à¤Ÿ करें",
+
+// General Dialogs Labels
+DlgGenNotSet : "<सॅट नहीं>",
+DlgGenId : "Id",
+DlgGenLangDir : "भाषा लिखने की दिशा",
+DlgGenLangDirLtr : "बायें से दायें (LTR)",
+DlgGenLangDirRtl : "दायें से बायें (RTL)",
+DlgGenLangCode : "भाषा कोड",
+DlgGenAccessKey : "à¤à¤•à¥à¤¸à¥…स की",
+DlgGenName : "नाम",
+DlgGenTabIndex : "टैब इनà¥à¤¡à¥…कà¥à¤¸",
+DlgGenLongDescr : "अधिक विवरण के लिठURL",
+DlgGenClass : "सà¥à¤Ÿà¤¾à¤‡à¤²-शीट कà¥à¤²à¤¾à¤¸",
+DlgGenTitle : "परामरà¥à¤¶ शीरà¥à¤¶à¤•",
+DlgGenContType : "परामरà¥à¤¶ कनà¥à¤Ÿà¥…नà¥à¤Ÿ पà¥à¤°à¤•à¤¾à¤°",
+DlgGenLinkCharset : "लिंक रिसोरà¥à¤¸ करॅकà¥à¤Ÿà¤° सॅट",
+DlgGenStyle : "सà¥à¤Ÿà¤¾à¤‡à¤²",
+
+// Image Dialog
+DlgImgTitle : "तसà¥à¤µà¥€à¤° पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+DlgImgInfoTab : "तसà¥à¤µà¥€à¤° की जानकारी",
+DlgImgBtnUpload : "इसे सरà¥à¤µà¤° को भेजें",
+DlgImgURL : "URL",
+DlgImgUpload : "अपलोड",
+DlgImgAlt : "वैकलà¥à¤ªà¤¿à¤• टेकà¥à¤¸à¥à¤Ÿ",
+DlgImgWidth : "चौड़ाई",
+DlgImgHeight : "ऊà¤à¤šà¤¾à¤ˆ",
+DlgImgLockRatio : "लॉक अनà¥à¤ªà¤¾à¤¤",
+DlgBtnResetSize : "रीसॅट साइज़",
+DlgImgBorder : "बॉरà¥à¤¡à¤°",
+DlgImgHSpace : "हॉरिज़ॉनà¥à¤Ÿà¤² सà¥à¤ªà¥‡à¤¸",
+DlgImgVSpace : "वरà¥à¤Ÿà¤¿à¤•à¤² सà¥à¤ªà¥‡à¤¸",
+DlgImgAlign : "à¤à¤²à¤¾à¤‡à¤¨",
+DlgImgAlignLeft : "दायें",
+DlgImgAlignAbsBottom: "Abs नीचे",
+DlgImgAlignAbsMiddle: "Abs ऊपर",
+DlgImgAlignBaseline : "मूल रेखा",
+DlgImgAlignBottom : "नीचे",
+DlgImgAlignMiddle : "मधà¥à¤¯",
+DlgImgAlignRight : "दायें",
+DlgImgAlignTextTop : "टेकà¥à¤¸à¥à¤Ÿ ऊपर",
+DlgImgAlignTop : "ऊपर",
+DlgImgPreview : "पà¥à¤°à¥€à¤µà¥à¤¯à¥‚",
+DlgImgAlertUrl : "तसà¥à¤µà¥€à¤° का URL टाइप करें ",
+DlgImgLinkTab : "लिंक",
+
+// Flash Dialog
+DlgFlashTitle : "फ़à¥à¤²à¥ˆà¤¶ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+DlgFlashChkPlay : "ऑटो पà¥à¤²à¥‡",
+DlgFlashChkLoop : "लूप",
+DlgFlashChkMenu : "फ़à¥à¤²à¥ˆà¤¶ मॅनà¥à¤¯à¥‚ का पà¥à¤°à¤¯à¥‹à¤— करें",
+DlgFlashScale : "सà¥à¤•à¥‡à¤²",
+DlgFlashScaleAll : "सभी दिखायें",
+DlgFlashScaleNoBorder : "कोई बॉरà¥à¤¡à¤° नहीं",
+DlgFlashScaleFit : "बिलà¥à¤•à¥à¤² फ़िट",
+
+// Link Dialog
+DlgLnkWindowTitle : "लिंक",
+DlgLnkInfoTab : "लिंक ",
+DlgLnkTargetTab : "टारà¥à¤—ेट",
+
+DlgLnkType : "लिंक पà¥à¤°à¤•à¤¾à¤°",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "इस पेज का à¤à¤‚कर",
+DlgLnkTypeEMail : "ई-मेल",
+DlgLnkProto : "पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤²",
+DlgLnkProtoOther : "<अनà¥à¤¯>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "à¤à¤‚कर चà¥à¤¨à¥‡à¤‚",
+DlgLnkAnchorByName : "à¤à¤‚कर नाम से",
+DlgLnkAnchorById : "à¤à¤²à¥€à¤®à¥…नà¥à¤Ÿ Id से",
+DlgLnkNoAnchors : "(डॉकà¥à¤¯à¥‚मॅनà¥à¤Ÿ में à¤à¤‚करà¥à¤¸ की संखà¥à¤¯à¤¾)",
+DlgLnkEMail : "ई-मेल पता",
+DlgLnkEMailSubject : "संदेश विषय",
+DlgLnkEMailBody : "संदेश",
+DlgLnkUpload : "अपलोड",
+DlgLnkBtnUpload : "इसे सरà¥à¤µà¤° को भेजें",
+
+DlgLnkTarget : "टारà¥à¤—ेट",
+DlgLnkTargetFrame : "<फ़à¥à¤°à¥‡à¤®>",
+DlgLnkTargetPopup : "<पॉप-अप विनà¥à¤¡à¥‹>",
+DlgLnkTargetBlank : "नया विनà¥à¤¡à¥‹ (_blank)",
+DlgLnkTargetParent : "मूल विनà¥à¤¡à¥‹ (_parent)",
+DlgLnkTargetSelf : "इसी विनà¥à¤¡à¥‹ (_self)",
+DlgLnkTargetTop : "शीरà¥à¤· विनà¥à¤¡à¥‹ (_top)",
+DlgLnkTargetFrameName : "टारà¥à¤—ेट फ़à¥à¤°à¥‡à¤® का नाम",
+DlgLnkPopWinName : "पॉप-अप विनà¥à¤¡à¥‹ का नाम",
+DlgLnkPopWinFeat : "पॉप-अप विनà¥à¤¡à¥‹ फ़ीचरà¥à¤¸",
+DlgLnkPopResize : "साइज़ बदला जा सकता है",
+DlgLnkPopLocation : "लोकेशन बार",
+DlgLnkPopMenu : "मॅनà¥à¤¯à¥‚ बार",
+DlgLnkPopScroll : "सà¥à¤•à¥à¤°à¥‰à¤² बार",
+DlgLnkPopStatus : "सà¥à¤Ÿà¥‡à¤Ÿà¤¸ बार",
+DlgLnkPopToolbar : "टूल बार",
+DlgLnkPopFullScrn : "फ़à¥à¤² सà¥à¤•à¥à¤°à¥€à¤¨ (IE)",
+DlgLnkPopDependent : "डिपेनà¥à¤¡à¥…नà¥à¤Ÿ (Netscape)",
+DlgLnkPopWidth : "चौड़ाई",
+DlgLnkPopHeight : "ऊà¤à¤šà¤¾à¤ˆ",
+DlgLnkPopLeft : "बायीं तरफ",
+DlgLnkPopTop : "दायीं तरफ",
+
+DlnLnkMsgNoUrl : "लिंक URL टाइप करें",
+DlnLnkMsgNoEMail : "ई-मेल पता टाइप करें",
+DlnLnkMsgNoAnchor : "à¤à¤‚कर चà¥à¤¨à¥‡à¤‚",
+DlnLnkMsgInvPopName : "पॉप-अप का नाम अलà¥à¤«à¤¾à¤¬à¥‡à¤Ÿ से शà¥à¤°à¥‚ होना चाहिये और उसमें सà¥à¤ªà¥‡à¤¸ नहीं होने चाहिà¤",
+
+// Color Dialog
+DlgColorTitle : "रंग चà¥à¤¨à¥‡à¤‚",
+DlgColorBtnClear : "साफ़ करें",
+DlgColorHighlight : "हाइलाइट",
+DlgColorSelected : "सॅलॅकà¥à¤Ÿà¥…ड",
+
+// Smiley Dialog
+DlgSmileyTitle : "सà¥à¤®à¤¾à¤‡à¤²à¥€ इनà¥à¤¸à¤°à¥à¤Ÿ करें",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "विशेष करॅकà¥à¤Ÿà¤° चà¥à¤¨à¥‡à¤‚",
+
+// Table Dialog
+DlgTableTitle : "टेबल पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+DlgTableRows : "पंकà¥à¤¤à¤¿à¤¯à¤¾à¤",
+DlgTableColumns : "कालम",
+DlgTableBorder : "बॉरà¥à¤¡à¤° साइज़",
+DlgTableAlign : "à¤à¤²à¤¾à¤‡à¤¨à¥à¤®à¥…नà¥à¤Ÿ",
+DlgTableAlignNotSet : "<सॅट नहीं>",
+DlgTableAlignLeft : "दायें",
+DlgTableAlignCenter : "बीच में",
+DlgTableAlignRight : "बायें",
+DlgTableWidth : "चौड़ाई",
+DlgTableWidthPx : "पिकà¥à¤¸à¥ˆà¤²",
+DlgTableWidthPc : "पà¥à¤°à¤¤à¤¿à¤¶à¤¤",
+DlgTableHeight : "ऊà¤à¤šà¤¾à¤ˆ",
+DlgTableCellSpace : "सैल अंतर",
+DlgTableCellPad : "सैल पैडिंग",
+DlgTableCaption : "शीरà¥à¤·à¤•",
+DlgTableSummary : "सारांश",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "सैल पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+DlgCellWidth : "चौड़ाई",
+DlgCellWidthPx : "पिकà¥à¤¸à¥ˆà¤²",
+DlgCellWidthPc : "पà¥à¤°à¤¤à¤¿à¤¶à¤¤",
+DlgCellHeight : "ऊà¤à¤šà¤¾à¤ˆ",
+DlgCellWordWrap : "वरà¥à¤¡ रैप",
+DlgCellWordWrapNotSet : "<सॅट नहीं>",
+DlgCellWordWrapYes : "हाà¤",
+DlgCellWordWrapNo : "नहीं",
+DlgCellHorAlign : "हॉरिज़ॉनà¥à¤Ÿà¤² à¤à¤²à¤¾à¤‡à¤¨à¥à¤®à¥…नà¥à¤Ÿ",
+DlgCellHorAlignNotSet : "<सॅट नहीं>",
+DlgCellHorAlignLeft : "दायें",
+DlgCellHorAlignCenter : "बीच में",
+DlgCellHorAlignRight: "बायें",
+DlgCellVerAlign : "वरà¥à¤Ÿà¤¿à¤•à¤² à¤à¤²à¤¾à¤‡à¤¨à¥à¤®à¥…नà¥à¤Ÿ",
+DlgCellVerAlignNotSet : "<सॅट नहीं>",
+DlgCellVerAlignTop : "ऊपर",
+DlgCellVerAlignMiddle : "मधà¥à¤¯",
+DlgCellVerAlignBottom : "नीचे",
+DlgCellVerAlignBaseline : "मूलरेखा",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "पंकà¥à¤¤à¤¿ सà¥à¤ªà¥ˆà¤¨",
+DlgCellCollSpan : "कालम सà¥à¤ªà¥ˆà¤¨",
+DlgCellBackColor : "बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡ रंग",
+DlgCellBorderColor : "बॉरà¥à¤¡à¤° का रंग",
+DlgCellBtnSelect : "चà¥à¤¨à¥‡à¤‚...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "खोजें और बदलें",
+
+// Find Dialog
+DlgFindTitle : "खोजें",
+DlgFindFindBtn : "खोजें",
+DlgFindNotFoundMsg : "आपके दà¥à¤µà¤¾à¤°à¤¾ दिया गया टेकà¥à¤¸à¥à¤Ÿ नहीं मिला",
+
+// Replace Dialog
+DlgReplaceTitle : "रिपà¥à¤²à¥‡à¤¸",
+DlgReplaceFindLbl : "यह खोजें:",
+DlgReplaceReplaceLbl : "इससे रिपà¥à¤²à¥‡à¤¸ करें:",
+DlgReplaceCaseChk : "केस मिलायें",
+DlgReplaceReplaceBtn : "रिपà¥à¤²à¥‡à¤¸",
+DlgReplaceReplAllBtn : "सभी रिपà¥à¤²à¥‡à¤¸ करें",
+DlgReplaceWordChk : "पूरा शबà¥à¤¦ मिलायें",
+
+// Paste Operations / Dialog
+PasteErrorCut : "आपके बà¥à¤°à¤¾à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ सॅटिनà¥à¤—à¥à¤¸ ने कट करने की अनà¥à¤®à¤¤à¤¿ नहीं पà¥à¤°à¤¦à¤¾à¤¨ की है। (Ctrl+X) का पà¥à¤°à¤¯à¥‹à¤— करें।",
+PasteErrorCopy : "आपके बà¥à¤°à¤¾à¤†à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ सॅटिनà¥à¤—à¥à¤¸ ने कॉपी करने की अनà¥à¤®à¤¤à¤¿ नहीं पà¥à¤°à¤¦à¤¾à¤¨ की है। (Ctrl+C) का पà¥à¤°à¤¯à¥‹à¤— करें।",
+
+PasteAsText : "पेसà¥à¤Ÿ (सादा टॅकà¥à¤¸à¥à¤Ÿ)",
+PasteFromWord : "पेसà¥à¤Ÿ (वरà¥à¤¡ से)",
+
+DlgPasteMsg2 : "Ctrl+V का पà¥à¤°à¤¯à¥‹à¤— करके पेसà¥à¤Ÿ करें और ठीक है करें.",
+DlgPasteSec : "आपके बà¥à¤°à¤¾à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ आपके बà¥à¤°à¤¾à¤‰à¥›à¤° की सà¥à¤°Kश सैटिंग के कारण, à¤à¤¡à¤¿à¤Ÿà¤° आपके कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ डेटा को नहीं पा सकता है. आपको उसे इस विनà¥à¤¡à¥‹ में दोबारा पेसà¥à¤Ÿ करना होगा.",
+DlgPasteIgnoreFont : "फ़ॉनà¥à¤Ÿ परिभाषा निकालें",
+DlgPasteRemoveStyles : "सà¥à¤Ÿà¤¾à¤‡à¤² परिभाषा निकालें",
+
+// Color Picker
+ColorAutomatic : "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤",
+ColorMoreColors : "और रंग...",
+
+// Document Properties
+DocProps : "डॉकà¥à¤¯à¥‚मॅनà¥à¤Ÿ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+
+// Anchor Dialog
+DlgAnchorTitle : "à¤à¤‚कर पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+DlgAnchorName : "à¤à¤‚कर का नाम",
+DlgAnchorErrorName : "à¤à¤‚कर का नाम टाइप करें",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "शबà¥à¤¦à¤•à¥‹à¤¶ में नहीं",
+DlgSpellChangeTo : "इसमें बदलें",
+DlgSpellBtnIgnore : "इगà¥à¤¨à¥‹à¤°",
+DlgSpellBtnIgnoreAll : "सभी इगà¥à¤¨à¥‹à¤° करें",
+DlgSpellBtnReplace : "रिपà¥à¤²à¥‡à¤¸",
+DlgSpellBtnReplaceAll : "सभी रिपà¥à¤²à¥‡à¤¸ करें",
+DlgSpellBtnUndo : "अनà¥à¤¡à¥‚",
+DlgSpellNoSuggestions : "- कोई सà¥à¤à¤¾à¤µ नहीं -",
+DlgSpellProgress : "वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š (सà¥à¤ªà¥…ल-चॅक) जारी है...",
+DlgSpellNoMispell : "वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š : कोई गलत वरà¥à¤¤à¤¨à¥€ (सà¥à¤ªà¥…लिंग) नहीं पाई गई",
+DlgSpellNoChanges : "वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š :कोई शबà¥à¤¦ नहीं बदला गया",
+DlgSpellOneChange : "वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š : à¤à¤• शबà¥à¤¦ बदला गया",
+DlgSpellManyChanges : "वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š : %1 शबà¥à¤¦ बदले गये",
+
+IeSpellDownload : "सà¥à¤ªà¥…ल-चॅकर इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया गया है। कà¥à¤¯à¤¾ आप इसे डा‌उनलोड करना चाहेंगे?",
+
+// Button Dialog
+DlgButtonText : "टेकà¥à¤¸à¥à¤Ÿ (वैलà¥à¤¯à¥‚)",
+DlgButtonType : "पà¥à¤°à¤•à¤¾à¤°",
+DlgButtonTypeBtn : "बटन",
+DlgButtonTypeSbm : "सबà¥à¤®à¤¿à¤Ÿ",
+DlgButtonTypeRst : "रिसेट",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "नाम",
+DlgCheckboxValue : "वैलà¥à¤¯à¥‚",
+DlgCheckboxSelected : "सॅलॅकà¥à¤Ÿà¥…ड",
+
+// Form Dialog
+DlgFormName : "नाम",
+DlgFormAction : "कà¥à¤°à¤¿à¤¯à¤¾",
+DlgFormMethod : "तरीका",
+
+// Select Field Dialog
+DlgSelectName : "नाम",
+DlgSelectValue : "वैलà¥à¤¯à¥‚",
+DlgSelectSize : "साइज़",
+DlgSelectLines : "पंकà¥à¤¤à¤¿à¤¯à¤¾à¤",
+DlgSelectChkMulti : "à¤à¤• से जà¥à¤¯à¤¾à¤¦à¤¾ विकलà¥à¤ª चà¥à¤¨à¤¨à¥‡ दें",
+DlgSelectOpAvail : "उपलबà¥à¤§ विकलà¥à¤ª",
+DlgSelectOpText : "टेकà¥à¤¸à¥à¤Ÿ",
+DlgSelectOpValue : "वैलà¥à¤¯à¥‚",
+DlgSelectBtnAdd : "जोड़ें",
+DlgSelectBtnModify : "बदलें",
+DlgSelectBtnUp : "ऊपर",
+DlgSelectBtnDown : "नीचे",
+DlgSelectBtnSetValue : "चà¥à¤¨à¥€ गई वैलà¥à¤¯à¥‚ सॅट करें",
+DlgSelectBtnDelete : "डिलीट",
+
+// Textarea Dialog
+DlgTextareaName : "नाम",
+DlgTextareaCols : "कालम",
+DlgTextareaRows : "पंकà¥à¤¤à¤¿à¤¯à¤¾à¤‚",
+
+// Text Field Dialog
+DlgTextName : "नाम",
+DlgTextValue : "वैलà¥à¤¯à¥‚",
+DlgTextCharWidth : "करॅकà¥à¤Ÿà¤° की चौà¥à¤¾à¤ˆ",
+DlgTextMaxChars : "अधिकतम करॅकà¥à¤Ÿà¤°",
+DlgTextType : "टाइप",
+DlgTextTypeText : "टेकà¥à¤¸à¥à¤Ÿ",
+DlgTextTypePass : "पासà¥à¤µà¤°à¥à¤¡",
+
+// Hidden Field Dialog
+DlgHiddenName : "नाम",
+DlgHiddenValue : "वैलà¥à¤¯à¥‚",
+
+// Bulleted List Dialog
+BulletedListProp : "बà¥à¤²à¥…ट सूची पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+NumberedListProp : "अंकीय सूची पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›",
+DlgLstStart : "पà¥à¤°à¤¾à¤°à¤®à¥à¤­",
+DlgLstType : "पà¥à¤°à¤•à¤¾à¤°",
+DlgLstTypeCircle : "गोल",
+DlgLstTypeDisc : "डिसà¥à¤•",
+DlgLstTypeSquare : "चौकॊण",
+DlgLstTypeNumbers : "अंक (1, 2, 3)",
+DlgLstTypeLCase : "छोटे अकà¥à¤·à¤° (a, b, c)",
+DlgLstTypeUCase : "बड़े अकà¥à¤·à¤° (A, B, C)",
+DlgLstTypeSRoman : "छोटे रोमन अंक (i, ii, iii)",
+DlgLstTypeLRoman : "बड़े रोमन अंक (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "आम",
+DlgDocBackTab : "बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡",
+DlgDocColorsTab : "रंग और मारà¥à¤œà¤¿à¤¨",
+DlgDocMetaTab : "मॅटाडेटा",
+
+DlgDocPageTitle : "पेज शीरà¥à¤·à¤•",
+DlgDocLangDir : "भाषा लिखने की दिशा",
+DlgDocLangDirLTR : "बायें से दायें (LTR)",
+DlgDocLangDirRTL : "दायें से बायें (RTL)",
+DlgDocLangCode : "भाषा कोड",
+DlgDocCharSet : "करेकà¥à¤Ÿà¤° सॅट à¤à¤¨à¥à¤•à¥‹à¤¡à¤¿à¤‚ग",
+DlgDocCharSetCE : "मधà¥à¤¯ यूरोपीय (Central European)",
+DlgDocCharSetCT : "चीनी (Chinese Traditional Big5)",
+DlgDocCharSetCR : "सिरीलिक (Cyrillic)",
+DlgDocCharSetGR : "यवन (Greek)",
+DlgDocCharSetJP : "जापानी (Japanese)",
+DlgDocCharSetKR : "कोरीयन (Korean)",
+DlgDocCharSetTR : "तà¥à¤°à¥à¤•à¥€ (Turkish)",
+DlgDocCharSetUN : "यूनीकोड (UTF-8)",
+DlgDocCharSetWE : "पशà¥à¤šà¤¿à¤® यूरोपीय (Western European)",
+DlgDocCharSetOther : "अनà¥à¤¯ करेकà¥à¤Ÿà¤° सॅट à¤à¤¨à¥à¤•à¥‹à¤¡à¤¿à¤‚ग",
+
+DlgDocDocType : "डॉकà¥à¤¯à¥‚मॅनà¥à¤Ÿ पà¥à¤°à¤•à¤¾à¤° शीरà¥à¤·à¤•",
+DlgDocDocTypeOther : "अनà¥à¤¯ डॉकà¥à¤¯à¥‚मॅनà¥à¤Ÿ पà¥à¤°à¤•à¤¾à¤° शीरà¥à¤·à¤•",
+DlgDocIncXHTML : "XHTML सूचना समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें",
+DlgDocBgColor : "बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡ रंग",
+DlgDocBgImage : "बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡ तसà¥à¤µà¥€à¤° URL",
+DlgDocBgNoScroll : "सà¥à¤•à¥à¤°à¥‰à¤² न करने वाला बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡",
+DlgDocCText : "टेकà¥à¤¸à¥à¤Ÿ",
+DlgDocCLink : "लिंक",
+DlgDocCVisited : "विज़िट किया गया लिंक",
+DlgDocCActive : "सकà¥à¤°à¤¿à¤¯ लिंक",
+DlgDocMargins : "पेज मारà¥à¤œà¤¿à¤¨",
+DlgDocMaTop : "ऊपर",
+DlgDocMaLeft : "बायें",
+DlgDocMaRight : "दायें",
+DlgDocMaBottom : "नीचे",
+DlgDocMeIndex : "डॉकà¥à¤¯à¥à¤®à¥…नà¥à¤Ÿ इनà¥à¤¡à¥‡à¤•à¥à¤¸ संकेतशबà¥à¤¦ (अलà¥à¤ªà¤µà¤¿à¤°à¤¾à¤® से अलग करें)",
+DlgDocMeDescr : "डॉकà¥à¤¯à¥‚मॅनà¥à¤Ÿ करॅकà¥à¤Ÿà¤°à¤¨",
+DlgDocMeAuthor : "लेखक",
+DlgDocMeCopy : "कॉपीराइट",
+DlgDocPreview : "पà¥à¤°à¥€à¤µà¥à¤¯à¥‚",
+
+// Templates Dialog
+Templates : "टॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ",
+DlgTemplatesTitle : "कनà¥à¤Ÿà¥‡à¤¨à¥à¤Ÿ टॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ",
+DlgTemplatesSelMsg : "à¤à¤¡à¤¿à¤Ÿà¤° में ओपन करने हेतॠटॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ चà¥à¤¨à¥‡à¤‚(वरà¥à¤¤à¤®à¤¾à¤¨ कनà¥à¤Ÿà¥…नà¥à¤Ÿ सेव नहीं होंगे):",
+DlgTemplatesLoading : "टॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ सूची लोड की जा रही है। ज़रा ठहरें...",
+DlgTemplatesNoTpl : "(कोई टॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ डिफ़ाइन नहीं किया गया है)",
+DlgTemplatesReplace : "मूल शबà¥à¤¦à¥‹à¤‚ को बदलें",
+
+// About Dialog
+DlgAboutAboutTab : "FCKEditor के बारे में",
+DlgAboutBrowserInfoTab : "बà¥à¤°à¤¾à¤‰à¥›à¤° के बारे में",
+DlgAboutLicenseTab : "लाइसैनà¥à¤¸",
+DlgAboutVersion : "वरà¥à¥›à¤¨",
+DlgAboutInfo : "अधिक जानकारी के लिये यहाठजायें:",
+
+// Div Dialog
+DlgDivGeneralTab : "सामानà¥à¤¯",
+DlgDivAdvancedTab : "à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡",
+DlgDivStyle : "सà¥à¤Ÿà¤¾à¤‡à¤²",
+DlgDivInlineStyle : "इनलाइन सà¥à¤Ÿà¤¾à¤‡à¤²"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hr.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hr.js
new file mode 100644
index 0000000..85840f1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hr.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Croatian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Smanji trake s alatima",
+ToolbarExpand : "Proširi trake s alatima",
+
+// Toolbar Items and Context Menu
+Save : "Snimi",
+NewPage : "Nova stranica",
+Preview : "Pregledaj",
+Cut : "Izreži",
+Copy : "Kopiraj",
+Paste : "Zalijepi",
+PasteText : "Zalijepi kao Äisti tekst",
+PasteWord : "Zalijepi iz Worda",
+Print : "Ispiši",
+SelectAll : "Odaberi sve",
+RemoveFormat : "Ukloni formatiranje",
+InsertLinkLbl : "Link",
+InsertLink : "Ubaci/promijeni link",
+RemoveLink : "Ukloni link",
+VisitLink : "Otvori link",
+Anchor : "Ubaci/promijeni sidro",
+AnchorDelete : "Ukloni sidro",
+InsertImageLbl : "Slika",
+InsertImage : "Ubaci/promijeni sliku",
+InsertFlashLbl : "Flash",
+InsertFlash : "Ubaci/promijeni Flash",
+InsertTableLbl : "Tablica",
+InsertTable : "Ubaci/promijeni tablicu",
+InsertLineLbl : "Linija",
+InsertLine : "Ubaci vodoravnu liniju",
+InsertSpecialCharLbl: "Posebni karakteri",
+InsertSpecialChar : "Ubaci posebne znakove",
+InsertSmileyLbl : "Smješko",
+InsertSmiley : "Ubaci smješka",
+About : "O FCKeditoru",
+Bold : "Podebljaj",
+Italic : "Ukosi",
+Underline : "Potcrtano",
+StrikeThrough : "Precrtano",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Lijevo poravnanje",
+CenterJustify : "Središnje poravnanje",
+RightJustify : "Desno poravnanje",
+BlockJustify : "Blok poravnanje",
+DecreaseIndent : "Pomakni ulijevo",
+IncreaseIndent : "Pomakni udesno",
+Blockquote : "Blockquote",
+CreateDiv : "Napravi Div kontejner",
+EditDiv : "Uredi Div kontejner",
+DeleteDiv : "Ukloni Div kontejner",
+Undo : "Poništi",
+Redo : "Ponovi",
+NumberedListLbl : "BrojÄana lista",
+NumberedList : "Ubaci/ukloni brojÄanu listu",
+BulletedListLbl : "ObiÄna lista",
+BulletedList : "Ubaci/ukloni obiÄnu listu",
+ShowTableBorders : "Prikaži okvir tablice",
+ShowDetails : "Prikaži detalje",
+Style : "Stil",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "VeliÄina",
+TextColor : "Boja teksta",
+BGColor : "Boja pozadine",
+Source : "Kôd",
+Find : "Pronađi",
+Replace : "Zamijeni",
+SpellCheck : "Provjeri pravopis",
+UniversalKeyboard : "Univerzalna tipkovnica",
+PageBreakLbl : "Prijelom stranice",
+PageBreak : "Ubaci prijelom stranice",
+
+Form : "Form",
+Checkbox : "Checkbox",
+RadioButton : "Radio Button",
+TextField : "Text Field",
+Textarea : "Textarea",
+HiddenField : "Hidden Field",
+Button : "Button",
+SelectionField : "Selection Field",
+ImageButton : "Image Button",
+
+FitWindow : "Povećaj veliÄinu editora",
+ShowBlocks : "Prikaži blokove",
+
+// Context Menu
+EditLink : "Promijeni link",
+CellCM : "Ćelija",
+RowCM : "Red",
+ColumnCM : "Kolona",
+InsertRowAfter : "Ubaci red poslije",
+InsertRowBefore : "Ubaci red prije",
+DeleteRows : "Izbriši redove",
+InsertColumnAfter : "Ubaci kolonu poslije",
+InsertColumnBefore : "Ubaci kolonu prije",
+DeleteColumns : "Izbriši kolone",
+InsertCellAfter : "Ubaci ćeliju poslije",
+InsertCellBefore : "Ubaci ćeliju prije",
+DeleteCells : "Izbriši ćelije",
+MergeCells : "Spoji ćelije",
+MergeRight : "Spoji desno",
+MergeDown : "Spoji dolje",
+HorizontalSplitCell : "Podijeli ćeliju vodoravno",
+VerticalSplitCell : "Podijeli ćeliju okomito",
+TableDelete : "Izbriši tablicu",
+CellProperties : "Svojstva ćelije",
+TableProperties : "Svojstva tablice",
+ImageProperties : "Svojstva slike",
+FlashProperties : "Flash svojstva",
+
+AnchorProp : "Svojstva sidra",
+ButtonProp : "Image Button svojstva",
+CheckboxProp : "Checkbox svojstva",
+HiddenFieldProp : "Hidden Field svojstva",
+RadioButtonProp : "Radio Button svojstva",
+ImageButtonProp : "Image Button svojstva",
+TextFieldProp : "Text Field svojstva",
+SelectionFieldProp : "Selection svojstva",
+TextareaProp : "Textarea svojstva",
+FormProp : "Form svojstva",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "ObraÄ‘ujem XHTML. Molimo priÄekajte...",
+Done : "Završio",
+PasteWordConfirm : "Tekst koji želite zalijepiti Äini se da je kopiran iz Worda. Želite li prije oÄistiti tekst?",
+NotCompatiblePaste : "Ova naredba je dostupna samo u Internet Exploreru 5.5 ili novijem. Želite li nastaviti bez Äišćenja?",
+UnknownToolbarItem : "Nepoznati Älan trake s alatima \"%1\"",
+UnknownCommand : "Nepoznata naredba \"%1\"",
+NotImplemented : "Naredba nije implementirana",
+UnknownToolbarSet : "Traka s alatima \"%1\" ne postoji",
+NoActiveX : "VaÅ¡e postavke pretraživaÄa mogle bi ograniÄiti neke od mogućnosti editora. Morate ukljuÄiti opciju \"Run ActiveX controls and plug-ins\" u postavkama. Ukoliko to ne uÄinite, moguće su razliite greÅ¡ke tijekom rada.",
+BrowseServerBlocked : "PretraivaÄ nije moguće otvoriti. Provjerite da li je ukljuÄeno blokiranje pop-up prozora.",
+DialogBlocked : "Nije moguće otvoriti novi prozor. Provjerite da li je ukljuÄeno blokiranje pop-up prozora.",
+VisitLinkBlocked : "Nije moguće otvoriti novi prozor. Provjerite da li je ukljuÄeno blokiranje pop-up prozora.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Poništi",
+DlgBtnClose : "Zatvori",
+DlgBtnBrowseServer : "Pretraži server",
+DlgAdvancedTag : "Napredno",
+DlgOpOther : "<Drugo>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Molimo unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nije postavljeno>",
+DlgGenId : "Id",
+DlgGenLangDir : "Smjer jezika",
+DlgGenLangDirLtr : "S lijeva na desno (LTR)",
+DlgGenLangDirRtl : "S desna na lijevo (RTL)",
+DlgGenLangCode : "Kôd jezika",
+DlgGenAccessKey : "Pristupna tipka",
+DlgGenName : "Naziv",
+DlgGenTabIndex : "Tab Indeks",
+DlgGenLongDescr : "DugaÄki opis URL",
+DlgGenClass : "Stylesheet klase",
+DlgGenTitle : "Advisory naslov",
+DlgGenContType : "Advisory vrsta sadržaja",
+DlgGenLinkCharset : "Kodna stranica povezanih resursa",
+DlgGenStyle : "Stil",
+
+// Image Dialog
+DlgImgTitle : "Svojstva slika",
+DlgImgInfoTab : "Info slike",
+DlgImgBtnUpload : "Pošalji na server",
+DlgImgURL : "URL",
+DlgImgUpload : "Pošalji",
+DlgImgAlt : "Alternativni tekst",
+DlgImgWidth : "Å irina",
+DlgImgHeight : "Visina",
+DlgImgLockRatio : "ZakljuÄaj odnos",
+DlgBtnResetSize : "ObriÅ¡i veliÄinu",
+DlgImgBorder : "Okvir",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Poravnaj",
+DlgImgAlignLeft : "Lijevo",
+DlgImgAlignAbsBottom: "Abs dolje",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline : "Bazno",
+DlgImgAlignBottom : "Dolje",
+DlgImgAlignMiddle : "Sredina",
+DlgImgAlignRight : "Desno",
+DlgImgAlignTextTop : "Vrh teksta",
+DlgImgAlignTop : "Vrh",
+DlgImgPreview : "Pregledaj",
+DlgImgAlertUrl : "Unesite URL slike",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Flash svojstva",
+DlgFlashChkPlay : "Auto Play",
+DlgFlashChkLoop : "Ponavljaj",
+DlgFlashChkMenu : "Omogući Flash izbornik",
+DlgFlashScale : "Omjer",
+DlgFlashScaleAll : "Prikaži sve",
+DlgFlashScaleNoBorder : "Bez okvira",
+DlgFlashScaleFit : "ToÄna veliÄina",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link Info",
+DlgLnkTargetTab : "Meta",
+
+DlgLnkType : "Link vrsta",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Sidro na ovoj stranici",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<drugo>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Odaberi sidro",
+DlgLnkAnchorByName : "Po nazivu sidra",
+DlgLnkAnchorById : "Po Id elementa",
+DlgLnkNoAnchors : "(Nema dostupnih sidra)",
+DlgLnkEMail : "E-Mail adresa",
+DlgLnkEMailSubject : "Naslov",
+DlgLnkEMailBody : "Sadržaj poruke",
+DlgLnkUpload : "Pošalji",
+DlgLnkBtnUpload : "Pošalji na server",
+
+DlgLnkTarget : "Meta",
+DlgLnkTargetFrame : "<okvir>",
+DlgLnkTargetPopup : "<popup prozor>",
+DlgLnkTargetBlank : "Novi prozor (_blank)",
+DlgLnkTargetParent : "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf : "Isti prozor (_self)",
+DlgLnkTargetTop : "Vršni prozor (_top)",
+DlgLnkTargetFrameName : "Ime ciljnog okvira",
+DlgLnkPopWinName : "Naziv popup prozora",
+DlgLnkPopWinFeat : "Mogućnosti popup prozora",
+DlgLnkPopResize : "Promjenljive veliÄine",
+DlgLnkPopLocation : "Traka za lokaciju",
+DlgLnkPopMenu : "Izborna traka",
+DlgLnkPopScroll : "Scroll traka",
+DlgLnkPopStatus : "Statusna traka",
+DlgLnkPopToolbar : "Traka s alatima",
+DlgLnkPopFullScrn : "Cijeli ekran (IE)",
+DlgLnkPopDependent : "Ovisno (Netscape)",
+DlgLnkPopWidth : "Å irina",
+DlgLnkPopHeight : "Visina",
+DlgLnkPopLeft : "Lijeva pozicija",
+DlgLnkPopTop : "Gornja pozicija",
+
+DlnLnkMsgNoUrl : "Molimo upišite URL link",
+DlnLnkMsgNoEMail : "Molimo upišite e-mail adresu",
+DlnLnkMsgNoAnchor : "Molimo odaberite sidro",
+DlnLnkMsgInvPopName : "Ime popup prozora mora poÄeti sa slovom i ne smije sadržavati razmake",
+
+// Color Dialog
+DlgColorTitle : "Odaberite boju",
+DlgColorBtnClear : "Obriši",
+DlgColorHighlight : "Osvijetli",
+DlgColorSelected : "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle : "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Odaberite posebni karakter",
+
+// Table Dialog
+DlgTableTitle : "Svojstva tablice",
+DlgTableRows : "Redova",
+DlgTableColumns : "Kolona",
+DlgTableBorder : "VeliÄina okvira",
+DlgTableAlign : "Poravnanje",
+DlgTableAlignNotSet : "<nije postavljeno>",
+DlgTableAlignLeft : "Lijevo",
+DlgTableAlignCenter : "Središnje",
+DlgTableAlignRight : "Desno",
+DlgTableWidth : "Å irina",
+DlgTableWidthPx : "piksela",
+DlgTableWidthPc : "postotaka",
+DlgTableHeight : "Visina",
+DlgTableCellSpace : "Prostornost ćelija",
+DlgTableCellPad : "Razmak ćelija",
+DlgTableCaption : "Naslov",
+DlgTableSummary : "Sažetak",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Svojstva ćelije",
+DlgCellWidth : "Å irina",
+DlgCellWidthPx : "piksela",
+DlgCellWidthPc : "postotaka",
+DlgCellHeight : "Visina",
+DlgCellWordWrap : "Word Wrap",
+DlgCellWordWrapNotSet : "<nije postavljeno>",
+DlgCellWordWrapYes : "Da",
+DlgCellWordWrapNo : "Ne",
+DlgCellHorAlign : "Vodoravno poravnanje",
+DlgCellHorAlignNotSet : "<nije postavljeno>",
+DlgCellHorAlignLeft : "Lijevo",
+DlgCellHorAlignCenter : "Središnje",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign : "Okomito poravnanje",
+DlgCellVerAlignNotSet : "<nije postavljeno>",
+DlgCellVerAlignTop : "Gornje",
+DlgCellVerAlignMiddle : "Srednišnje",
+DlgCellVerAlignBottom : "Donje",
+DlgCellVerAlignBaseline : "Bazno",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Spajanje redova",
+DlgCellCollSpan : "Spajanje kolona",
+DlgCellBackColor : "Boja pozadine",
+DlgCellBorderColor : "Boja okvira",
+DlgCellBtnSelect : "Odaberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Pronađi i zamijeni",
+
+// Find Dialog
+DlgFindTitle : "Pronađi",
+DlgFindFindBtn : "Pronađi",
+DlgFindNotFoundMsg : "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle : "Zamijeni",
+DlgReplaceFindLbl : "Pronađi:",
+DlgReplaceReplaceLbl : "Zamijeni s:",
+DlgReplaceCaseChk : "Usporedi mala/velika slova",
+DlgReplaceReplaceBtn : "Zamijeni",
+DlgReplaceReplAllBtn : "Zamijeni sve",
+DlgReplaceWordChk : "Usporedi cijele rijeÄi",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).",
+PasteErrorCopy : "Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).",
+
+PasteAsText : "Zalijepi kao Äisti tekst",
+PasteFromWord : "Zalijepi iz Worda",
+
+DlgPasteMsg2 : "Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.",
+DlgPasteSec : "Zbog sigurnosnih postavki VaÅ¡eg pretraživaÄa, editor nema direktan pristup VaÅ¡em meÄ‘uspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.",
+DlgPasteIgnoreFont : "Zanemari definiciju vrste fonta",
+DlgPasteRemoveStyles : "Ukloni definicije stilova",
+
+// Color Picker
+ColorAutomatic : "Automatski",
+ColorMoreColors : "Više boja...",
+
+// Document Properties
+DocProps : "Svojstva dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle : "Svojstva sidra",
+DlgAnchorName : "Ime sidra",
+DlgAnchorErrorName : "Molimo unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Nije u rjeÄniku",
+DlgSpellChangeTo : "Promijeni u",
+DlgSpellBtnIgnore : "Zanemari",
+DlgSpellBtnIgnoreAll : "Zanemari sve",
+DlgSpellBtnReplace : "Zamijeni",
+DlgSpellBtnReplaceAll : "Zamijeni sve",
+DlgSpellBtnUndo : "Vrati",
+DlgSpellNoSuggestions : "-Nema preporuke-",
+DlgSpellProgress : "Provjera u tijeku...",
+DlgSpellNoMispell : "Provjera završena: Nema grešaka",
+DlgSpellNoChanges : "Provjera završena: Nije napravljena promjena",
+DlgSpellOneChange : "Provjera zavrÅ¡ena: Jedna rijeÄ promjenjena",
+DlgSpellManyChanges : "Provjera zavrÅ¡ena: Promijenjeno %1 rijeÄi",
+
+IeSpellDownload : "Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?",
+
+// Button Dialog
+DlgButtonText : "Tekst (vrijednost)",
+DlgButtonType : "Vrsta",
+DlgButtonTypeBtn : "Gumb",
+DlgButtonTypeSbm : "Pošalji",
+DlgButtonTypeRst : "Poništi",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Ime",
+DlgCheckboxValue : "Vrijednost",
+DlgCheckboxSelected : "Odabrano",
+
+// Form Dialog
+DlgFormName : "Ime",
+DlgFormAction : "Akcija",
+DlgFormMethod : "Metoda",
+
+// Select Field Dialog
+DlgSelectName : "Ime",
+DlgSelectValue : "Vrijednost",
+DlgSelectSize : "VeliÄina",
+DlgSelectLines : "linija",
+DlgSelectChkMulti : "Dozvoli višestruki odabir",
+DlgSelectOpAvail : "Dostupne opcije",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Vrijednost",
+DlgSelectBtnAdd : "Dodaj",
+DlgSelectBtnModify : "Promijeni",
+DlgSelectBtnUp : "Gore",
+DlgSelectBtnDown : "Dolje",
+DlgSelectBtnSetValue : "Postavi kao odabranu vrijednost",
+DlgSelectBtnDelete : "Obriši",
+
+// Textarea Dialog
+DlgTextareaName : "Ime",
+DlgTextareaCols : "Kolona",
+DlgTextareaRows : "Redova",
+
+// Text Field Dialog
+DlgTextName : "Ime",
+DlgTextValue : "Vrijednost",
+DlgTextCharWidth : "Å irina",
+DlgTextMaxChars : "Najviše karaktera",
+DlgTextType : "Vrsta",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Å ifra",
+
+// Hidden Field Dialog
+DlgHiddenName : "Ime",
+DlgHiddenValue : "Vrijednost",
+
+// Bulleted List Dialog
+BulletedListProp : "Svojstva liste",
+NumberedListProp : "Svojstva brojÄane liste",
+DlgLstStart : "PoÄetak",
+DlgLstType : "Vrsta",
+DlgLstTypeCircle : "Krug",
+DlgLstTypeDisc : "Disk",
+DlgLstTypeSquare : "Kvadrat",
+DlgLstTypeNumbers : "Brojevi (1, 2, 3)",
+DlgLstTypeLCase : "Mala slova (a, b, c)",
+DlgLstTypeUCase : "Velika slova (A, B, C)",
+DlgLstTypeSRoman : "Male rimske brojke (i, ii, iii)",
+DlgLstTypeLRoman : "Velike rimske brojke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Općenito",
+DlgDocBackTab : "Pozadina",
+DlgDocColorsTab : "Boje i margine",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Naslov stranice",
+DlgDocLangDir : "Smjer jezika",
+DlgDocLangDirLTR : "S lijeva na desno",
+DlgDocLangDirRTL : "S desna na lijevo",
+DlgDocLangCode : "Kôd jezika",
+DlgDocCharSet : "Enkodiranje znakova",
+DlgDocCharSetCE : "Središnja Europa",
+DlgDocCharSetCT : "Tradicionalna kineska (Big5)",
+DlgDocCharSetCR : "Ćirilica",
+DlgDocCharSetGR : "GrÄka",
+DlgDocCharSetJP : "Japanska",
+DlgDocCharSetKR : "Koreanska",
+DlgDocCharSetTR : "Turska",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Zapadna Europa",
+DlgDocCharSetOther : "Ostalo enkodiranje znakova",
+
+DlgDocDocType : "Zaglavlje vrste dokumenta",
+DlgDocDocTypeOther : "Ostalo zaglavlje vrste dokumenta",
+DlgDocIncXHTML : "Ubaci XHTML deklaracije",
+DlgDocBgColor : "Boja pozadine",
+DlgDocBgImage : "URL slike pozadine",
+DlgDocBgNoScroll : "Pozadine se ne pomiÄe",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Posjećeni link",
+DlgDocCActive : "Aktivni link",
+DlgDocMargins : "Margine stranice",
+DlgDocMaTop : "Vrh",
+DlgDocMaLeft : "Lijevo",
+DlgDocMaRight : "Desno",
+DlgDocMaBottom : "Dolje",
+DlgDocMeIndex : "KljuÄne rijeÄi dokumenta (odvojene zarezom)",
+DlgDocMeDescr : "Opis dokumenta",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Autorska prava",
+DlgDocPreview : "Pregledaj",
+
+// Templates Dialog
+Templates : "Predlošci",
+DlgTemplatesTitle : "Predlošci sadržaja",
+DlgTemplatesSelMsg : "Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):",
+DlgTemplatesLoading : "UÄitavam listu predložaka. Molimo priÄekajte...",
+DlgTemplatesNoTpl : "(Nema definiranih predložaka)",
+DlgTemplatesReplace : "Zamijeni trenutne sadržaje",
+
+// About Dialog
+DlgAboutAboutTab : "O FCKEditoru",
+DlgAboutBrowserInfoTab : "Podaci o pretraživaÄu",
+DlgAboutLicenseTab : "Licenca",
+DlgAboutVersion : "inaÄica",
+DlgAboutInfo : "Za više informacija posjetite",
+
+// Div Dialog
+DlgDivGeneralTab : "Općenito",
+DlgDivAdvancedTab : "Napredno",
+DlgDivStyle : "Stil",
+DlgDivInlineStyle : "Stil u redu"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hu.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hu.js
new file mode 100644
index 0000000..55e707b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hu.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hungarian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Eszköztár elrejtése",
+ToolbarExpand : "Eszköztár megjelenítése",
+
+// Toolbar Items and Context Menu
+Save : "Mentés",
+NewPage : "Új oldal",
+Preview : "Előnézet",
+Cut : "Kivágás",
+Copy : "Másolás",
+Paste : "Beillesztés",
+PasteText : "Beillesztés formázás nélkül",
+PasteWord : "Beillesztés Word-ből",
+Print : "Nyomtatás",
+SelectAll : "Mindent kijelöl",
+RemoveFormat : "Formázás eltávolítása",
+InsertLinkLbl : "Hivatkozás",
+InsertLink : "Hivatkozás beillesztése/módosítása",
+RemoveLink : "Hivatkozás törlése",
+VisitLink : "Open Link", //MISSING
+Anchor : "Horgony beillesztése/szerkesztése",
+AnchorDelete : "Horgony eltávolítása",
+InsertImageLbl : "Kép",
+InsertImage : "Kép beillesztése/módosítása",
+InsertFlashLbl : "Flash",
+InsertFlash : "Flash beillesztése, módosítása",
+InsertTableLbl : "Táblázat",
+InsertTable : "Táblázat beillesztése/módosítása",
+InsertLineLbl : "Vonal",
+InsertLine : "Elválasztóvonal beillesztése",
+InsertSpecialCharLbl: "Speciális karakter",
+InsertSpecialChar : "Speciális karakter beillesztése",
+InsertSmileyLbl : "Hangulatjelek",
+InsertSmiley : "Hangulatjelek beillesztése",
+About : "FCKeditor névjegy",
+Bold : "Félkövér",
+Italic : "DÅ‘lt",
+Underline : "Aláhúzott",
+StrikeThrough : "Ãthúzott",
+Subscript : "Alsó index",
+Superscript : "Felső index",
+LeftJustify : "Balra",
+CenterJustify : "Középre",
+RightJustify : "Jobbra",
+BlockJustify : "Sorkizárt",
+DecreaseIndent : "Behúzás csökkentése",
+IncreaseIndent : "Behúzás növelése",
+Blockquote : "Idézet blokk",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Visszavonás",
+Redo : "Ismétlés",
+NumberedListLbl : "Számozás",
+NumberedList : "Számozás beillesztése/törlése",
+BulletedListLbl : "Felsorolás",
+BulletedList : "Felsorolás beillesztése/törlése",
+ShowTableBorders : "Táblázat szegély mutatása",
+ShowDetails : "Részletek mutatása",
+Style : "Stílus",
+FontFormat : "Formátum",
+Font : "Betűtípus",
+FontSize : "Méret",
+TextColor : "Betűszín",
+BGColor : "Háttérszín",
+Source : "Forráskód",
+Find : "Keresés",
+Replace : "Csere",
+SpellCheck : "Helyesírás-ellenőrzés",
+UniversalKeyboard : "Univerzális billentyűzet",
+PageBreakLbl : "Oldaltörés",
+PageBreak : "Oldaltörés beillesztése",
+
+Form : "Å°rlap",
+Checkbox : "Jelölőnégyzet",
+RadioButton : "Választógomb",
+TextField : "Szövegmező",
+Textarea : "Szövegterület",
+HiddenField : "Rejtettmező",
+Button : "Gomb",
+SelectionField : "Legördülő lista",
+ImageButton : "Képgomb",
+
+FitWindow : "Maximalizálás",
+ShowBlocks : "Blokkok megjelenítése",
+
+// Context Menu
+EditLink : "Hivatkozás módosítása",
+CellCM : "Cella",
+RowCM : "Sor",
+ColumnCM : "Oszlop",
+InsertRowAfter : "Sor beillesztése az aktuális sor mögé",
+InsertRowBefore : "Sor beillesztése az aktuális sor elé",
+DeleteRows : "Sorok törlése",
+InsertColumnAfter : "Oszlop beillesztése az aktuális oszlop mögé",
+InsertColumnBefore : "Oszlop beillesztése az aktuális oszlop elé",
+DeleteColumns : "Oszlopok törlése",
+InsertCellAfter : "Cella beillesztése az aktuális cella mögé",
+InsertCellBefore : "Cella beillesztése az aktuális cella elé",
+DeleteCells : "Cellák törlése",
+MergeCells : "Cellák egyesítése",
+MergeRight : "Cellák egyesítése jobbra",
+MergeDown : "Cellák egyesítése lefelé",
+HorizontalSplitCell : "Cellák szétválasztása vízszintesen",
+VerticalSplitCell : "Cellák szétválasztása függőlegesen",
+TableDelete : "Táblázat törlése",
+CellProperties : "Cella tulajdonságai",
+TableProperties : "Táblázat tulajdonságai",
+ImageProperties : "Kép tulajdonságai",
+FlashProperties : "Flash tulajdonságai",
+
+AnchorProp : "Horgony tulajdonságai",
+ButtonProp : "Gomb tulajdonságai",
+CheckboxProp : "Jelölőnégyzet tulajdonságai",
+HiddenFieldProp : "Rejtett mező tulajdonságai",
+RadioButtonProp : "Választógomb tulajdonságai",
+ImageButtonProp : "Képgomb tulajdonságai",
+TextFieldProp : "Szövegmező tulajdonságai",
+SelectionFieldProp : "Legördülő lista tulajdonságai",
+TextareaProp : "Szövegterület tulajdonságai",
+FormProp : "Űrlap tulajdonságai",
+
+FontFormats : "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML feldolgozása. Kérem várjon...",
+Done : "Kész",
+PasteWordConfirm : "A beilleszteni kívánt szöveg Word-ből van másolva. El kívánja távolítani a formázást a beillesztés előtt?",
+NotCompatiblePaste : "Ez a parancs csak Internet Explorer 5.5 verziótól használható. Megpróbálja beilleszteni a szöveget az eredeti formázással?",
+UnknownToolbarItem : "Ismeretlen eszköztár elem \"%1\"",
+UnknownCommand : "Ismeretlen parancs \"%1\"",
+NotImplemented : "A parancs nem hajtható végre",
+UnknownToolbarSet : "Az eszközkészlet \"%1\" nem létezik",
+NoActiveX : "A böngésző biztonsági beállításai korlátozzák a szerkesztő lehetőségeit. Engedélyezni kell ezt az opciót: \"Run ActiveX controls and plug-ins\". Ettől függetlenül előfordulhatnak hibaüzenetek ill. bizonyos funkciók hiányozhatnak.",
+BrowseServerBlocked : "Nem lehet megnyitni a fájlböngészőt. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.",
+DialogBlocked : "Nem lehet megnyitni a párbeszédablakot. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "Rendben",
+DlgBtnCancel : "Mégsem",
+DlgBtnClose : "Bezárás",
+DlgBtnBrowseServer : "Böngészés a szerveren",
+DlgAdvancedTag : "További opciók",
+DlgOpOther : "Egyéb",
+DlgInfoTab : "Alaptulajdonságok",
+DlgAlertUrl : "Illessze be a webcímet",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nincs beállítva>",
+DlgGenId : "Azonosító",
+DlgGenLangDir : "Ãrás iránya",
+DlgGenLangDirLtr : "Balról jobbra",
+DlgGenLangDirRtl : "Jobbról balra",
+DlgGenLangCode : "Nyelv kódja",
+DlgGenAccessKey : "Billentyűkombináció",
+DlgGenName : "Név",
+DlgGenTabIndex : "Tabulátor index",
+DlgGenLongDescr : "Részletes leírás webcíme",
+DlgGenClass : "Stíluskészlet",
+DlgGenTitle : "Súgócimke",
+DlgGenContType : "Súgó tartalomtípusa",
+DlgGenLinkCharset : "Hivatkozott tartalom kódlapja",
+DlgGenStyle : "Stílus",
+
+// Image Dialog
+DlgImgTitle : "Kép tulajdonságai",
+DlgImgInfoTab : "Alaptulajdonságok",
+DlgImgBtnUpload : "Küldés a szerverre",
+DlgImgURL : "Hivatkozás",
+DlgImgUpload : "Feltöltés",
+DlgImgAlt : "Buborék szöveg",
+DlgImgWidth : "Szélesség",
+DlgImgHeight : "Magasság",
+DlgImgLockRatio : "Arány megtartása",
+DlgBtnResetSize : "Eredeti méret",
+DlgImgBorder : "Keret",
+DlgImgHSpace : "Vízsz. táv",
+DlgImgVSpace : "Függ. táv",
+DlgImgAlign : "Igazítás",
+DlgImgAlignLeft : "Bal",
+DlgImgAlignAbsBottom: "Legaljára",
+DlgImgAlignAbsMiddle: "Közepére",
+DlgImgAlignBaseline : "Alapvonalhoz",
+DlgImgAlignBottom : "Aljára",
+DlgImgAlignMiddle : "Középre",
+DlgImgAlignRight : "Jobbra",
+DlgImgAlignTextTop : "Szöveg tetejére",
+DlgImgAlignTop : "Tetejére",
+DlgImgPreview : "Előnézet",
+DlgImgAlertUrl : "Töltse ki a kép webcímét",
+DlgImgLinkTab : "Hivatkozás",
+
+// Flash Dialog
+DlgFlashTitle : "Flash tulajdonságai",
+DlgFlashChkPlay : "Automata lejátszás",
+DlgFlashChkLoop : "Folyamatosan",
+DlgFlashChkMenu : "Flash menü engedélyezése",
+DlgFlashScale : "Méretezés",
+DlgFlashScaleAll : "Mindent mutat",
+DlgFlashScaleNoBorder : "Keret nélkül",
+DlgFlashScaleFit : "Teljes kitöltés",
+
+// Link Dialog
+DlgLnkWindowTitle : "Hivatkozás tulajdonságai",
+DlgLnkInfoTab : "Alaptulajdonságok",
+DlgLnkTargetTab : "Megjelenítés",
+
+DlgLnkType : "Hivatkozás típusa",
+DlgLnkTypeURL : "Webcím",
+DlgLnkTypeAnchor : "Horgony az oldalon",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokoll",
+DlgLnkProtoOther : "<más>",
+DlgLnkURL : "Webcím",
+DlgLnkAnchorSel : "Horgony választása",
+DlgLnkAnchorByName : "Horgony név szerint",
+DlgLnkAnchorById : "Azonosító szerint",
+DlgLnkNoAnchors : "(Nincs horgony a dokumentumban)",
+DlgLnkEMail : "E-Mail cím",
+DlgLnkEMailSubject : "Üzenet tárgya",
+DlgLnkEMailBody : "Ãœzenet",
+DlgLnkUpload : "Feltöltés",
+DlgLnkBtnUpload : "Küldés a szerverre",
+
+DlgLnkTarget : "Tartalom megjelenítése",
+DlgLnkTargetFrame : "<keretben>",
+DlgLnkTargetPopup : "<felugró ablakban>",
+DlgLnkTargetBlank : "Új ablakban (_blank)",
+DlgLnkTargetParent : "Szülő ablakban (_parent)",
+DlgLnkTargetSelf : "Azonos ablakban (_self)",
+DlgLnkTargetTop : "Legfelső ablakban (_top)",
+DlgLnkTargetFrameName : "Keret neve",
+DlgLnkPopWinName : "Felugró ablak neve",
+DlgLnkPopWinFeat : "Felugró ablak jellemzői",
+DlgLnkPopResize : "Méretezhető",
+DlgLnkPopLocation : "Címsor",
+DlgLnkPopMenu : "Menü sor",
+DlgLnkPopScroll : "Gördítősáv",
+DlgLnkPopStatus : "Ãllapotsor",
+DlgLnkPopToolbar : "Eszköztár",
+DlgLnkPopFullScrn : "Teljes képernyő (csak IE)",
+DlgLnkPopDependent : "Szülőhöz kapcsolt (csak Netscape)",
+DlgLnkPopWidth : "Szélesség",
+DlgLnkPopHeight : "Magasság",
+DlgLnkPopLeft : "Bal pozíció",
+DlgLnkPopTop : "Felső pozíció",
+
+DlnLnkMsgNoUrl : "Adja meg a hivatkozás webcímét",
+DlnLnkMsgNoEMail : "Adja meg az E-Mail címet",
+DlnLnkMsgNoAnchor : "Válasszon egy horgonyt",
+DlnLnkMsgInvPopName : "A felbukkanó ablak neve alfanumerikus karakterrel kezdôdjön, valamint ne tartalmazzon szóközt",
+
+// Color Dialog
+DlgColorTitle : "Színválasztás",
+DlgColorBtnClear : "Törlés",
+DlgColorHighlight : "Előnézet",
+DlgColorSelected : "Kiválasztott",
+
+// Smiley Dialog
+DlgSmileyTitle : "Hangulatjel beszúrása",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Speciális karakter választása",
+
+// Table Dialog
+DlgTableTitle : "Táblázat tulajdonságai",
+DlgTableRows : "Sorok",
+DlgTableColumns : "Oszlopok",
+DlgTableBorder : "Szegélyméret",
+DlgTableAlign : "Igazítás",
+DlgTableAlignNotSet : "<Nincs beállítva>",
+DlgTableAlignLeft : "Balra",
+DlgTableAlignCenter : "Középre",
+DlgTableAlignRight : "Jobbra",
+DlgTableWidth : "Szélesség",
+DlgTableWidthPx : "képpont",
+DlgTableWidthPc : "százalék",
+DlgTableHeight : "Magasság",
+DlgTableCellSpace : "Cella térköz",
+DlgTableCellPad : "Cella belső margó",
+DlgTableCaption : "Felirat",
+DlgTableSummary : "Leírás",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Cella tulajdonságai",
+DlgCellWidth : "Szélesség",
+DlgCellWidthPx : "képpont",
+DlgCellWidthPc : "százalék",
+DlgCellHeight : "Magasság",
+DlgCellWordWrap : "Sortörés",
+DlgCellWordWrapNotSet : "<Nincs beállítva>",
+DlgCellWordWrapYes : "Igen",
+DlgCellWordWrapNo : "Nem",
+DlgCellHorAlign : "Vízsz. igazítás",
+DlgCellHorAlignNotSet : "<Nincs beállítva>",
+DlgCellHorAlignLeft : "Balra",
+DlgCellHorAlignCenter : "Középre",
+DlgCellHorAlignRight: "Jobbra",
+DlgCellVerAlign : "Függ. igazítás",
+DlgCellVerAlignNotSet : "<Nincs beállítva>",
+DlgCellVerAlignTop : "Tetejére",
+DlgCellVerAlignMiddle : "Középre",
+DlgCellVerAlignBottom : "Aljára",
+DlgCellVerAlignBaseline : "Egyvonalba",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Sorok egyesítése",
+DlgCellCollSpan : "Oszlopok egyesítése",
+DlgCellBackColor : "Háttérszín",
+DlgCellBorderColor : "Szegélyszín",
+DlgCellBtnSelect : "Kiválasztás...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Keresés és csere",
+
+// Find Dialog
+DlgFindTitle : "Keresés",
+DlgFindFindBtn : "Keresés",
+DlgFindNotFoundMsg : "A keresett szöveg nem található.",
+
+// Replace Dialog
+DlgReplaceTitle : "Csere",
+DlgReplaceFindLbl : "Keresett szöveg:",
+DlgReplaceReplaceLbl : "Csere erre:",
+DlgReplaceCaseChk : "kis- és nagybetű megkülönböztetése",
+DlgReplaceReplaceBtn : "Csere",
+DlgReplaceReplAllBtn : "Az összes cseréje",
+DlgReplaceWordChk : "csak ha ez a teljes szó",
+
+// Paste Operations / Dialog
+PasteErrorCut : "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).",
+PasteErrorCopy : "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).",
+
+PasteAsText : "Beillesztés formázatlan szövegként",
+PasteFromWord : "Beillesztés Word-ből",
+
+DlgPasteMsg2 : "Másolja be az alábbi mezőbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.",
+DlgPasteSec : "A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.",
+DlgPasteIgnoreFont : "Betű formázások megszüntetése",
+DlgPasteRemoveStyles : "Stílusok eltávolítása",
+
+// Color Picker
+ColorAutomatic : "Automatikus",
+ColorMoreColors : "További színek...",
+
+// Document Properties
+DocProps : "Dokumentum tulajdonságai",
+
+// Anchor Dialog
+DlgAnchorTitle : "Horgony tulajdonságai",
+DlgAnchorName : "Horgony neve",
+DlgAnchorErrorName : "Kérem adja meg a horgony nevét",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Nincs a szótárban",
+DlgSpellChangeTo : "Módosítás",
+DlgSpellBtnIgnore : "Kihagyja",
+DlgSpellBtnIgnoreAll : "Mindet kihagyja",
+DlgSpellBtnReplace : "Csere",
+DlgSpellBtnReplaceAll : "Összes cseréje",
+DlgSpellBtnUndo : "Visszavonás",
+DlgSpellNoSuggestions : "Nincs javaslat",
+DlgSpellProgress : "Helyesírás-ellenőrzés folyamatban...",
+DlgSpellNoMispell : "Helyesírás-ellenőrzés kész: Nem találtam hibát",
+DlgSpellNoChanges : "Helyesírás-ellenőrzés kész: Nincs változtatott szó",
+DlgSpellOneChange : "Helyesírás-ellenőrzés kész: Egy szó cserélve",
+DlgSpellManyChanges : "Helyesírás-ellenőrzés kész: %1 szó cserélve",
+
+IeSpellDownload : "A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?",
+
+// Button Dialog
+DlgButtonText : "Szöveg (Érték)",
+DlgButtonType : "Típus",
+DlgButtonTypeBtn : "Gomb",
+DlgButtonTypeSbm : "Küldés",
+DlgButtonTypeRst : "Alaphelyzet",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Név",
+DlgCheckboxValue : "Érték",
+DlgCheckboxSelected : "Kiválasztott",
+
+// Form Dialog
+DlgFormName : "Név",
+DlgFormAction : "Adatfeldolgozást végző hivatkozás",
+DlgFormMethod : "Adatküldés módja",
+
+// Select Field Dialog
+DlgSelectName : "Név",
+DlgSelectValue : "Érték",
+DlgSelectSize : "Méret",
+DlgSelectLines : "sor",
+DlgSelectChkMulti : "több sor is kiválasztható",
+DlgSelectOpAvail : "Elérhető opciók",
+DlgSelectOpText : "Szöveg",
+DlgSelectOpValue : "Érték",
+DlgSelectBtnAdd : "Hozzáad",
+DlgSelectBtnModify : "Módosít",
+DlgSelectBtnUp : "Fel",
+DlgSelectBtnDown : "Le",
+DlgSelectBtnSetValue : "Legyen az alapértelmezett érték",
+DlgSelectBtnDelete : "Töröl",
+
+// Textarea Dialog
+DlgTextareaName : "Név",
+DlgTextareaCols : "Karakterek száma egy sorban",
+DlgTextareaRows : "Sorok száma",
+
+// Text Field Dialog
+DlgTextName : "Név",
+DlgTextValue : "Érték",
+DlgTextCharWidth : "Megjelenített karakterek száma",
+DlgTextMaxChars : "Maximális karakterszám",
+DlgTextType : "Típus",
+DlgTextTypeText : "Szöveg",
+DlgTextTypePass : "Jelszó",
+
+// Hidden Field Dialog
+DlgHiddenName : "Név",
+DlgHiddenValue : "Érték",
+
+// Bulleted List Dialog
+BulletedListProp : "Felsorolás tulajdonságai",
+NumberedListProp : "Számozás tulajdonságai",
+DlgLstStart : "Start",
+DlgLstType : "Formátum",
+DlgLstTypeCircle : "Kör",
+DlgLstTypeDisc : "Lemez",
+DlgLstTypeSquare : "Négyzet",
+DlgLstTypeNumbers : "Számok (1, 2, 3)",
+DlgLstTypeLCase : "Kisbetűk (a, b, c)",
+DlgLstTypeUCase : "Nagybetűk (A, B, C)",
+DlgLstTypeSRoman : "Kis római számok (i, ii, iii)",
+DlgLstTypeLRoman : "Nagy római számok (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Ãltalános",
+DlgDocBackTab : "Háttér",
+DlgDocColorsTab : "Színek és margók",
+DlgDocMetaTab : "Meta adatok",
+
+DlgDocPageTitle : "Oldalcím",
+DlgDocLangDir : "Ãrás iránya",
+DlgDocLangDirLTR : "Balról jobbra",
+DlgDocLangDirRTL : "Jobbról balra",
+DlgDocLangCode : "Nyelv kód",
+DlgDocCharSet : "Karakterkódolás",
+DlgDocCharSetCE : "Közép-Európai",
+DlgDocCharSetCT : "Kínai Tradicionális (Big5)",
+DlgDocCharSetCR : "Cyrill",
+DlgDocCharSetGR : "Görög",
+DlgDocCharSetJP : "Japán",
+DlgDocCharSetKR : "Koreai",
+DlgDocCharSetTR : "Török",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Nyugat-Európai",
+DlgDocCharSetOther : "Más karakterkódolás",
+
+DlgDocDocType : "Dokumentum típus fejléc",
+DlgDocDocTypeOther : "Más dokumentum típus fejléc",
+DlgDocIncXHTML : "XHTML deklarációk beillesztése",
+DlgDocBgColor : "Háttérszín",
+DlgDocBgImage : "Háttérkép cím",
+DlgDocBgNoScroll : "Nem gördíthető háttér",
+DlgDocCText : "Szöveg",
+DlgDocCLink : "Cím",
+DlgDocCVisited : "Látogatott cím",
+DlgDocCActive : "Aktív cím",
+DlgDocMargins : "Oldal margók",
+DlgDocMaTop : "Felső",
+DlgDocMaLeft : "Bal",
+DlgDocMaRight : "Jobb",
+DlgDocMaBottom : "Alsó",
+DlgDocMeIndex : "Dokumentum keresőszavak (vesszővel elválasztva)",
+DlgDocMeDescr : "Dokumentum leírás",
+DlgDocMeAuthor : "Szerző",
+DlgDocMeCopy : "Szerzői jog",
+DlgDocPreview : "Előnézet",
+
+// Templates Dialog
+Templates : "Sablonok",
+DlgTemplatesTitle : "Elérhető sablonok",
+DlgTemplatesSelMsg : "Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):",
+DlgTemplatesLoading : "Sablon lista betöltése. Kis türelmet...",
+DlgTemplatesNoTpl : "(Nincs sablon megadva)",
+DlgTemplatesReplace : "Kicseréli a jelenlegi tartalmat",
+
+// About Dialog
+DlgAboutAboutTab : "Névjegy",
+DlgAboutBrowserInfoTab : "Böngésző információ",
+DlgAboutLicenseTab : "Licensz",
+DlgAboutVersion : "verzió",
+DlgAboutInfo : "További információkért látogasson el ide:",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/is.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/is.js
new file mode 100644
index 0000000..1a31cac
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/is.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Icelandic language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Fela verkstiku",
+ToolbarExpand : "Sýna verkstiku",
+
+// Toolbar Items and Context Menu
+Save : "Vista",
+NewPage : "Ný síða",
+Preview : "Forskoða",
+Cut : "Klippa",
+Copy : "Afrita",
+Paste : "Líma",
+PasteText : "Líma ósniðinn texta",
+PasteWord : "Líma úr Word",
+Print : "Prenta",
+SelectAll : "Velja allt",
+RemoveFormat : "Fjarlægja snið",
+InsertLinkLbl : "Stikla",
+InsertLink : "Stofna/breyta stiklu",
+RemoveLink : "Fjarlægja stiklu",
+VisitLink : "Opna stiklusíðu",
+Anchor : "Stofna/breyta kaflamerki",
+AnchorDelete : "Eyða kaflamerki",
+InsertImageLbl : "Setja inn mynd",
+InsertImage : "Setja inn/breyta mynd",
+InsertFlashLbl : "Flash",
+InsertFlash : "Setja inn/breyta Flash",
+InsertTableLbl : "Tafla",
+InsertTable : "Setja inn/breyta töflu",
+InsertLineLbl : "Lína",
+InsertLine : "Lóðrétt lína",
+InsertSpecialCharLbl: "Merki",
+InsertSpecialChar : "Setja inn merki",
+InsertSmileyLbl : "Svipur",
+InsertSmiley : "Setja upp svip",
+About : "Um FCKeditor",
+Bold : "Feitletrað",
+Italic : "Skáletrað",
+Underline : "Undirstrikað",
+StrikeThrough : "Yfirstrikað",
+Subscript : "Niðurskrifað",
+Superscript : "Uppskrifað",
+LeftJustify : "Vinstrijöfnun",
+CenterJustify : "Miðja texta",
+RightJustify : "Hægrijöfnun",
+BlockJustify : "Jafna báðum megin",
+DecreaseIndent : "Auka inndrátt",
+IncreaseIndent : "Minnka inndrátt",
+Blockquote : "Inndráttur",
+CreateDiv : "Búa til DIV-hýsil",
+EditDiv : "Breyta DIV-hýsli",
+DeleteDiv : "Eyða DIV-hýsli",
+Undo : "Afturkalla",
+Redo : "Hætta við afturköllun",
+NumberedListLbl : "Númeraður listi",
+NumberedList : "Setja inn/fella númeraðan lista",
+BulletedListLbl : "Punktalisti",
+BulletedList : "Setja inn/fella punktalista",
+ShowTableBorders : "Sýna töflugrind",
+ShowDetails : "Sýna smáatriði",
+Style : "Stílflokkur",
+FontFormat : "Stílsnið",
+Font : "Leturgerð ",
+FontSize : "Leturstærð ",
+TextColor : "Litur texta",
+BGColor : "Bakgrunnslitur",
+Source : "Kóði",
+Find : "Leita",
+Replace : "Skipta út",
+SpellCheck : "Villuleit",
+UniversalKeyboard : "Hnattrænt lyklaborð",
+PageBreakLbl : "Síðuskil",
+PageBreak : "Setja inn síðuskil",
+
+Form : "Setja inn innsláttarform",
+Checkbox : "Setja inn hökunarreit",
+RadioButton : "Setja inn valhnapp",
+TextField : "Setja inn textareit",
+Textarea : "Setja inn textasvæði",
+HiddenField : "Setja inn falið svæði",
+Button : "Setja inn hnapp",
+SelectionField : "Setja inn lista",
+ImageButton : "Setja inn myndahnapp",
+
+FitWindow : "Skoða ritil í fullri stærð",
+ShowBlocks : "Sýna blokkir",
+
+// Context Menu
+EditLink : "Breyta stiklu",
+CellCM : "Reitur",
+RowCM : "Röð",
+ColumnCM : "Dálkur",
+InsertRowAfter : "Skjóta inn röð fyrir neðan",
+InsertRowBefore : "Skjóta inn röð fyrir ofan",
+DeleteRows : "Eyða röð",
+InsertColumnAfter : "Skjóta inn dálki hægra megin",
+InsertColumnBefore : "Skjóta inn dálki vinstra megin",
+DeleteColumns : "Fella dálk",
+InsertCellAfter : "Skjóta inn reiti fyrir framan",
+InsertCellBefore : "Skjóta inn reiti fyrir aftan",
+DeleteCells : "Fella reit",
+MergeCells : "Sameina reiti",
+MergeRight : "Sameina til hægri",
+MergeDown : "Sameina niður á við",
+HorizontalSplitCell : "Kljúfa reit lárétt",
+VerticalSplitCell : "Kljúfa reit lóðrétt",
+TableDelete : "Fella töflu",
+CellProperties : "Eigindi reits",
+TableProperties : "Eigindi töflu",
+ImageProperties : "Eigindi myndar",
+FlashProperties : "Eigindi Flash",
+
+AnchorProp : "Eigindi kaflamerkis",
+ButtonProp : "Eigindi hnapps",
+CheckboxProp : "Eigindi markreits",
+HiddenFieldProp : "Eigindi falins svæðis",
+RadioButtonProp : "Eigindi valhnapps",
+ImageButtonProp : "Eigindi myndahnapps",
+TextFieldProp : "Eigindi textareits",
+SelectionFieldProp : "Eigindi lista",
+TextareaProp : "Eigindi textasvæðis",
+FormProp : "Eigindi innsláttarforms",
+
+FontFormats : "Venjulegt letur;Forsniðið;Vistfang;Fyrirsögn 1;Fyrirsögn 2;Fyrirsögn 3;Fyrirsögn 4;Fyrirsögn 5;Fyrirsögn 6;Venjulegt (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Meðhöndla XHTML...",
+Done : "Tilbúið",
+PasteWordConfirm : "Textinn sem þú ætlar að líma virðist koma úr Word. Viltu hreinsa óþarfar Word-skipanir úr honum?",
+NotCompatiblePaste : "Þessi aðgerð er bundin við Internet Explorer 5.5 og nýrri. Viltu líma textann án þess að hreinsa hann?",
+UnknownToolbarItem : "Óþekktur hlutur í verkstiku \"%1\"!",
+UnknownCommand : "Óþekkt skipanaheiti \"%1\"!",
+NotImplemented : "Skipun ekki virkjuð!",
+UnknownToolbarSet : "Verkstikan \"%1\" ekki til!",
+NoActiveX : "Öryggisstillingarnar í vafranum þínum leyfa ekki alla möguleika ritilsins.<br>Láttu vafrann leyfa Active-X og viðbætur til að komast hjá villum og takmörkunum.",
+BrowseServerBlocked : "Ritillinn getur ekki opnað nauðsynlega hjálparglugga!<br>Láttu hann leyfa þessari síðu að opna sprettiglugga.",
+DialogBlocked : "Ekki var hægt að opna skipanaglugga!<br>Nauðsynlegt er að leyfa síðunni að opna sprettiglugga.",
+VisitLinkBlocked : "Ekki var hægt að opna nýjan glugga. Gangtu úr skugga um að engir sprettigluggabanar séu virkir.",
+
+// Dialogs
+DlgBtnOK : "Ã lagi",
+DlgBtnCancel : "Hætta við",
+DlgBtnClose : "Loka",
+DlgBtnBrowseServer : "Fletta í skjalasafni",
+DlgAdvancedTag : "Tæknilegt",
+DlgOpOther : "<Annað>",
+DlgInfoTab : "Upplýsingar",
+DlgAlertUrl : "Sláðu inn slóð",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ekkert valið>",
+DlgGenId : "Auðkenni",
+DlgGenLangDir : "Lesstefna",
+DlgGenLangDirLtr : "Frá vinstri til hægri (LTR)",
+DlgGenLangDirRtl : "Frá hægri til vinstri (RTL)",
+DlgGenLangCode : "Tungumálakóði",
+DlgGenAccessKey : "Skammvalshnappur",
+DlgGenName : "Nafn",
+DlgGenTabIndex : "Raðnúmer innsláttarreits",
+DlgGenLongDescr : "Nánari lýsing",
+DlgGenClass : "Stílsniðsflokkur",
+DlgGenTitle : "Titill",
+DlgGenContType : "Tegund innihalds",
+DlgGenLinkCharset : "Táknróf",
+DlgGenStyle : "Stíll",
+
+// Image Dialog
+DlgImgTitle : "Eigindi myndar",
+DlgImgInfoTab : "Almennt",
+DlgImgBtnUpload : "Hlaða upp",
+DlgImgURL : "Vefslóð",
+DlgImgUpload : "Hlaða upp",
+DlgImgAlt : "Baklægur texti",
+DlgImgWidth : "Breidd",
+DlgImgHeight : "Hæð",
+DlgImgLockRatio : "Festa stærðarhlutfall",
+DlgBtnResetSize : "Reikna stærð",
+DlgImgBorder : "Rammi",
+DlgImgHSpace : "Vinstri bil",
+DlgImgVSpace : "Hægri bil",
+DlgImgAlign : "Jöfnun",
+DlgImgAlignLeft : "Vinstri",
+DlgImgAlignAbsBottom: "Abs neðst",
+DlgImgAlignAbsMiddle: "Abs miðjuð",
+DlgImgAlignBaseline : "Grunnlína",
+DlgImgAlignBottom : "Neðst",
+DlgImgAlignMiddle : "Miðjuð",
+DlgImgAlignRight : "Hægri",
+DlgImgAlignTextTop : "Efri brún texta",
+DlgImgAlignTop : "Efst",
+DlgImgPreview : "Sýna dæmi",
+DlgImgAlertUrl : "Sláðu inn slóðina að myndinni",
+DlgImgLinkTab : "Stikla",
+
+// Flash Dialog
+DlgFlashTitle : "Eigindi Flash",
+DlgFlashChkPlay : "Sjálfvirk spilun",
+DlgFlashChkLoop : "Endurtekning",
+DlgFlashChkMenu : "Sýna Flash-valmynd",
+DlgFlashScale : "Skali",
+DlgFlashScaleAll : "Sýna allt",
+DlgFlashScaleNoBorder : "Ãn ramma",
+DlgFlashScaleFit : "Fella skala að stærð",
+
+// Link Dialog
+DlgLnkWindowTitle : "Stikla",
+DlgLnkInfoTab : "Almennt",
+DlgLnkTargetTab : "Mark",
+
+DlgLnkType : "Stikluflokkur",
+DlgLnkTypeURL : "Vefslóð",
+DlgLnkTypeAnchor : "Bókamerki á þessari síðu",
+DlgLnkTypeEMail : "Netfang",
+DlgLnkProto : "Samskiptastaðall",
+DlgLnkProtoOther : "<annað>",
+DlgLnkURL : "Vefslóð",
+DlgLnkAnchorSel : "Veldu akkeri",
+DlgLnkAnchorByName : "Eftir akkerisnafni",
+DlgLnkAnchorById : "Eftir auðkenni einingar",
+DlgLnkNoAnchors : "<Engin bókamerki á skrá>",
+DlgLnkEMail : "Netfang",
+DlgLnkEMailSubject : "Efni",
+DlgLnkEMailBody : "Meginmál",
+DlgLnkUpload : "Senda upp",
+DlgLnkBtnUpload : "Senda upp",
+
+DlgLnkTarget : "Mark",
+DlgLnkTargetFrame : "<rammi>",
+DlgLnkTargetPopup : "<sprettigluggi>",
+DlgLnkTargetBlank : "Nýr gluggi (_blank)",
+DlgLnkTargetParent : "Yfirsettur rammi (_parent)",
+DlgLnkTargetSelf : "Sami gluggi (_self)",
+DlgLnkTargetTop : "Allur glugginn (_top)",
+DlgLnkTargetFrameName : "Nafn markglugga",
+DlgLnkPopWinName : "Nafn sprettiglugga",
+DlgLnkPopWinFeat : "Eigindi sprettiglugga",
+DlgLnkPopResize : "Skölun",
+DlgLnkPopLocation : "Fanglína",
+DlgLnkPopMenu : "Vallína",
+DlgLnkPopScroll : "Skrunstikur",
+DlgLnkPopStatus : "Stöðustika",
+DlgLnkPopToolbar : "Verkfærastika",
+DlgLnkPopFullScrn : "Heilskjár (IE)",
+DlgLnkPopDependent : "Háð venslum (Netscape)",
+DlgLnkPopWidth : "Breidd",
+DlgLnkPopHeight : "Hæð",
+DlgLnkPopLeft : "Fjarlægð frá vinstri",
+DlgLnkPopTop : "Fjarlægð frá efri brún",
+
+DlnLnkMsgNoUrl : "Sláðu inn veffang stiklunnar!",
+DlnLnkMsgNoEMail : "Sláðu inn netfang!",
+DlnLnkMsgNoAnchor : "Veldu fyrst eitthvert bókamerki!",
+DlnLnkMsgInvPopName : "Sprettisíðan verður að byrja á bókstaf (a-z) og má ekki innihalda stafabil",
+
+// Color Dialog
+DlgColorTitle : "Velja lit",
+DlgColorBtnClear : "Núllstilla",
+DlgColorHighlight : "Litmerkja",
+DlgColorSelected : "Valið",
+
+// Smiley Dialog
+DlgSmileyTitle : "Velja svip",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Velja tákn",
+
+// Table Dialog
+DlgTableTitle : "Eigindi töflu",
+DlgTableRows : "Raðir",
+DlgTableColumns : "Dálkar",
+DlgTableBorder : "Breidd ramma",
+DlgTableAlign : "Jöfnun",
+DlgTableAlignNotSet : "<ekkert valið>",
+DlgTableAlignLeft : "Vinstrijafnað",
+DlgTableAlignCenter : "Miðjað",
+DlgTableAlignRight : "Hægrijafnað",
+DlgTableWidth : "Breidd",
+DlgTableWidthPx : "myndeindir",
+DlgTableWidthPc : "prósent",
+DlgTableHeight : "Hæð",
+DlgTableCellSpace : "Bil milli reita",
+DlgTableCellPad : "Reitaspássía",
+DlgTableCaption : "Titill",
+DlgTableSummary : "Ãfram",
+DlgTableHeaders : "Fyrirsagnir",
+DlgTableHeadersNone : "Engar",
+DlgTableHeadersColumn : "Fyrsti dálkur",
+DlgTableHeadersRow : "Fyrsta röð",
+DlgTableHeadersBoth : "Hvort tveggja",
+
+// Table Cell Dialog
+DlgCellTitle : "Eigindi reits",
+DlgCellWidth : "Breidd",
+DlgCellWidthPx : "myndeindir",
+DlgCellWidthPc : "prósent",
+DlgCellHeight : "Hæð",
+DlgCellWordWrap : "Línuskipting",
+DlgCellWordWrapNotSet : "<ekkert valið>",
+DlgCellWordWrapYes : "Já",
+DlgCellWordWrapNo : "Nei",
+DlgCellHorAlign : "Lárétt jöfnun",
+DlgCellHorAlignNotSet : "<ekkert valið>",
+DlgCellHorAlignLeft : "Vinstrijafnað",
+DlgCellHorAlignCenter : "Miðjað",
+DlgCellHorAlignRight: "Hægrijafnað",
+DlgCellVerAlign : "Lóðrétt jöfnun",
+DlgCellVerAlignNotSet : "<ekkert valið>",
+DlgCellVerAlignTop : "Efst",
+DlgCellVerAlignMiddle : "Miðjað",
+DlgCellVerAlignBottom : "Neðst",
+DlgCellVerAlignBaseline : "Grunnlína",
+DlgCellType : "Tegund reits",
+DlgCellTypeData : "Gögn",
+DlgCellTypeHeader : "Fyrirsögn",
+DlgCellRowSpan : "Hæð í röðum talið",
+DlgCellCollSpan : "Breidd í dálkum talið",
+DlgCellBackColor : "Bakgrunnslitur",
+DlgCellBorderColor : "Rammalitur",
+DlgCellBtnSelect : "Veldu...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Finna og skipta",
+
+// Find Dialog
+DlgFindTitle : "Finna",
+DlgFindFindBtn : "Finna",
+DlgFindNotFoundMsg : "Leitartexti fannst ekki!",
+
+// Replace Dialog
+DlgReplaceTitle : "Skipta út",
+DlgReplaceFindLbl : "Leita að:",
+DlgReplaceReplaceLbl : "Skipta út fyrir:",
+DlgReplaceCaseChk : "Gera greinarmun á¡ há¡- og lágstöfum",
+DlgReplaceReplaceBtn : "Skipta út",
+DlgReplaceReplAllBtn : "Skipta út allsstaðar",
+DlgReplaceWordChk : "Aðeins heil orð",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl+X).",
+PasteErrorCopy : "Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl+C).",
+
+PasteAsText : "Líma sem ósniðinn texta",
+PasteFromWord : "Líma úr Word",
+
+DlgPasteMsg2 : "Límdu í svæðið hér að neðan og (<STRONG>Ctrl+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.",
+DlgPasteSec : "Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.",
+DlgPasteIgnoreFont : "Hunsa leturskilgreiningar",
+DlgPasteRemoveStyles : "Hunsa letureigindi",
+
+// Color Picker
+ColorAutomatic : "Sjálfval",
+ColorMoreColors : "Fleiri liti...",
+
+// Document Properties
+DocProps : "Eigindi skjals",
+
+// Anchor Dialog
+DlgAnchorTitle : "Eigindi bókamerkis",
+DlgAnchorName : "Nafn bókamerkis",
+DlgAnchorErrorName : "Sláðu inn nafn bókamerkis!",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ekki í orðabókinni",
+DlgSpellChangeTo : "Tillaga",
+DlgSpellBtnIgnore : "Hunsa",
+DlgSpellBtnIgnoreAll : "Hunsa allt",
+DlgSpellBtnReplace : "Skipta",
+DlgSpellBtnReplaceAll : "Skipta öllu",
+DlgSpellBtnUndo : "Til baka",
+DlgSpellNoSuggestions : "- engar tillögur -",
+DlgSpellProgress : "Villuleit í gangi...",
+DlgSpellNoMispell : "Villuleit lokið: Engin villa fannst",
+DlgSpellNoChanges : "Villuleit lokið: Engu orði breytt",
+DlgSpellOneChange : "Villuleit lokið: Einu orði breytt",
+DlgSpellManyChanges : "Villuleit lokið: %1 orðum breytt",
+
+IeSpellDownload : "Villuleit ekki sett upp.<br>Viltu setja hana upp?",
+
+// Button Dialog
+DlgButtonText : "Texti",
+DlgButtonType : "Gerð",
+DlgButtonTypeBtn : "Hnappur",
+DlgButtonTypeSbm : "Staðfesta",
+DlgButtonTypeRst : "Hreinsa",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nafn",
+DlgCheckboxValue : "Gildi",
+DlgCheckboxSelected : "Valið",
+
+// Form Dialog
+DlgFormName : "Nafn",
+DlgFormAction : "Aðgerð",
+DlgFormMethod : "Aðferð",
+
+// Select Field Dialog
+DlgSelectName : "Nafn",
+DlgSelectValue : "Gildi",
+DlgSelectSize : "Stærð",
+DlgSelectLines : "línur",
+DlgSelectChkMulti : "Leyfa fleiri kosti",
+DlgSelectOpAvail : "Kostir",
+DlgSelectOpText : "Texti",
+DlgSelectOpValue : "Gildi",
+DlgSelectBtnAdd : "Bæta við",
+DlgSelectBtnModify : "Breyta",
+DlgSelectBtnUp : "Upp",
+DlgSelectBtnDown : "Niður",
+DlgSelectBtnSetValue : "Merkja sem valið",
+DlgSelectBtnDelete : "Eyða",
+
+// Textarea Dialog
+DlgTextareaName : "Nafn",
+DlgTextareaCols : "Dálkar",
+DlgTextareaRows : "Línur",
+
+// Text Field Dialog
+DlgTextName : "Nafn",
+DlgTextValue : "Gildi",
+DlgTextCharWidth : "Breidd (leturtákn)",
+DlgTextMaxChars : "Hámarksfjöldi leturtákna",
+DlgTextType : "Gerð",
+DlgTextTypeText : "Texti",
+DlgTextTypePass : "Lykilorð",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nafn",
+DlgHiddenValue : "Gildi",
+
+// Bulleted List Dialog
+BulletedListProp : "Eigindi depillista",
+NumberedListProp : "Eigindi tölusetts lista",
+DlgLstStart : "Byrja",
+DlgLstType : "Gerð",
+DlgLstTypeCircle : "Hringur",
+DlgLstTypeDisc : "Fylltur hringur",
+DlgLstTypeSquare : "Ferningur",
+DlgLstTypeNumbers : "Tölusett (1, 2, 3)",
+DlgLstTypeLCase : "Lágstafir (a, b, c)",
+DlgLstTypeUCase : "Hástafir (A, B, C)",
+DlgLstTypeSRoman : "Rómverkar lágstafatölur (i, ii, iii)",
+DlgLstTypeLRoman : "Rómverkar hástafatölur (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Almennt",
+DlgDocBackTab : "Bakgrunnur",
+DlgDocColorsTab : "Litir og rammar",
+DlgDocMetaTab : "Lýsigögn",
+
+DlgDocPageTitle : "Titill síðu",
+DlgDocLangDir : "Tungumál",
+DlgDocLangDirLTR : "Vinstri til hægri (LTR)",
+DlgDocLangDirRTL : "Hægri til vinstri (RTL)",
+DlgDocLangCode : "Tungumálakóði",
+DlgDocCharSet : "Letursett",
+DlgDocCharSetCE : "Mið-evrópskt",
+DlgDocCharSetCT : "Kínverskt, hefðbundið (Big5)",
+DlgDocCharSetCR : "Kýrilskt",
+DlgDocCharSetGR : "Grískt",
+DlgDocCharSetJP : "Japanskt",
+DlgDocCharSetKR : "Kóreskt",
+DlgDocCharSetTR : "Tyrkneskt",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Vestur-evrópst",
+DlgDocCharSetOther : "Annað letursett",
+
+DlgDocDocType : "Flokkur skjalategunda",
+DlgDocDocTypeOther : "Annar flokkur skjalategunda",
+DlgDocIncXHTML : "Fella inn XHTML lýsingu",
+DlgDocBgColor : "Bakgrunnslitur",
+DlgDocBgImage : "Slóð bakgrunnsmyndar",
+DlgDocBgNoScroll : "Læstur bakgrunnur",
+DlgDocCText : "Texti",
+DlgDocCLink : "Stikla",
+DlgDocCVisited : "Heimsótt stikla",
+DlgDocCActive : "Virk stikla",
+DlgDocMargins : "Hliðarspássía",
+DlgDocMaTop : "Efst",
+DlgDocMaLeft : "Vinstri",
+DlgDocMaRight : "Hægri",
+DlgDocMaBottom : "Neðst",
+DlgDocMeIndex : "Lykilorð efnisorðaskrár (aðgreind með kommum)",
+DlgDocMeDescr : "Lýsing skjals",
+DlgDocMeAuthor : "Höfundur",
+DlgDocMeCopy : "Höfundarréttur",
+DlgDocPreview : "Sýna",
+
+// Templates Dialog
+Templates : "Sniðmát",
+DlgTemplatesTitle : "Innihaldssniðmát",
+DlgTemplatesSelMsg : "Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):",
+DlgTemplatesLoading : "Sæki lista yfir sniðmát...",
+DlgTemplatesNoTpl : "(Ekkert sniðmát er skilgreint!)",
+DlgTemplatesReplace : "Skipta út raunverulegu innihaldi",
+
+// About Dialog
+DlgAboutAboutTab : "Um",
+DlgAboutBrowserInfoTab : "Almennt",
+DlgAboutLicenseTab : "Leyfi",
+DlgAboutVersion : "útgáfa",
+DlgAboutInfo : "Nánari upplýsinar, sjá:",
+
+// Div Dialog
+DlgDivGeneralTab : "Almennt",
+DlgDivAdvancedTab : "Sérhæft",
+DlgDivStyle : "Stíll",
+DlgDivInlineStyle : "Línulægur stíll"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/it.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/it.js
new file mode 100644
index 0000000..353abfb
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/it.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Italian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Nascondi la barra degli strumenti",
+ToolbarExpand : "Mostra la barra degli strumenti",
+
+// Toolbar Items and Context Menu
+Save : "Salva",
+NewPage : "Nuova pagina vuota",
+Preview : "Anteprima",
+Cut : "Taglia",
+Copy : "Copia",
+Paste : "Incolla",
+PasteText : "Incolla come testo semplice",
+PasteWord : "Incolla da Word",
+Print : "Stampa",
+SelectAll : "Seleziona tutto",
+RemoveFormat : "Elimina formattazione",
+InsertLinkLbl : "Collegamento",
+InsertLink : "Inserisci/Modifica collegamento",
+RemoveLink : "Elimina collegamento",
+VisitLink : "Open Link", //MISSING
+Anchor : "Inserisci/Modifica Ancora",
+AnchorDelete : "Rimuovi Ancora",
+InsertImageLbl : "Immagine",
+InsertImage : "Inserisci/Modifica immagine",
+InsertFlashLbl : "Oggetto Flash",
+InsertFlash : "Inserisci/Modifica Oggetto Flash",
+InsertTableLbl : "Tabella",
+InsertTable : "Inserisci/Modifica tabella",
+InsertLineLbl : "Riga orizzontale",
+InsertLine : "Inserisci riga orizzontale",
+InsertSpecialCharLbl: "Caratteri speciali",
+InsertSpecialChar : "Inserisci carattere speciale",
+InsertSmileyLbl : "Emoticon",
+InsertSmiley : "Inserisci emoticon",
+About : "Informazioni su FCKeditor",
+Bold : "Grassetto",
+Italic : "Corsivo",
+Underline : "Sottolineato",
+StrikeThrough : "Barrato",
+Subscript : "Pedice",
+Superscript : "Apice",
+LeftJustify : "Allinea a sinistra",
+CenterJustify : "Centra",
+RightJustify : "Allinea a destra",
+BlockJustify : "Giustifica",
+DecreaseIndent : "Riduci rientro",
+IncreaseIndent : "Aumenta rientro",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Annulla",
+Redo : "Ripristina",
+NumberedListLbl : "Elenco numerato",
+NumberedList : "Inserisci/Modifica elenco numerato",
+BulletedListLbl : "Elenco puntato",
+BulletedList : "Inserisci/Modifica elenco puntato",
+ShowTableBorders : "Mostra bordi tabelle",
+ShowDetails : "Mostra dettagli",
+Style : "Stile",
+FontFormat : "Formato",
+Font : "Font",
+FontSize : "Dimensione",
+TextColor : "Colore testo",
+BGColor : "Colore sfondo",
+Source : "Codice Sorgente",
+Find : "Trova",
+Replace : "Sostituisci",
+SpellCheck : "Correttore ortografico",
+UniversalKeyboard : "Tastiera universale",
+PageBreakLbl : "Interruzione di pagina",
+PageBreak : "Inserisci interruzione di pagina",
+
+Form : "Modulo",
+Checkbox : "Checkbox",
+RadioButton : "Radio Button",
+TextField : "Campo di testo",
+Textarea : "Area di testo",
+HiddenField : "Campo nascosto",
+Button : "Bottone",
+SelectionField : "Menu di selezione",
+ImageButton : "Bottone immagine",
+
+FitWindow : "Massimizza l'area dell'editor",
+ShowBlocks : "Visualizza Blocchi",
+
+// Context Menu
+EditLink : "Modifica collegamento",
+CellCM : "Cella",
+RowCM : "Riga",
+ColumnCM : "Colonna",
+InsertRowAfter : "Inserisci Riga Dopo",
+InsertRowBefore : "Inserisci Riga Prima",
+DeleteRows : "Elimina righe",
+InsertColumnAfter : "Inserisci Colonna Dopo",
+InsertColumnBefore : "Inserisci Colonna Prima",
+DeleteColumns : "Elimina colonne",
+InsertCellAfter : "Inserisci Cella Dopo",
+InsertCellBefore : "Inserisci Cella Prima",
+DeleteCells : "Elimina celle",
+MergeCells : "Unisce celle",
+MergeRight : "Unisci a Destra",
+MergeDown : "Unisci in Basso",
+HorizontalSplitCell : "Dividi Cella Orizzontalmente",
+VerticalSplitCell : "Dividi Cella Verticalmente",
+TableDelete : "Cancella Tabella",
+CellProperties : "Proprietà cella",
+TableProperties : "Proprietà tabella",
+ImageProperties : "Proprietà immagine",
+FlashProperties : "Proprietà Oggetto Flash",
+
+AnchorProp : "Proprietà ancora",
+ButtonProp : "Proprietà bottone",
+CheckboxProp : "Proprietà checkbox",
+HiddenFieldProp : "Proprietà campo nascosto",
+RadioButtonProp : "Proprietà radio button",
+ImageButtonProp : "Proprietà bottone immagine",
+TextFieldProp : "Proprietà campo di testo",
+SelectionFieldProp : "Proprietà menu di selezione",
+TextareaProp : "Proprietà area di testo",
+FormProp : "Proprietà modulo",
+
+FontFormats : "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Elaborazione XHTML in corso. Attendere prego...",
+Done : "Completato",
+PasteWordConfirm : "Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?",
+NotCompatiblePaste : "Questa funzione è disponibile solo per Internet Explorer 5.5 o superiore. Desideri incollare il testo senza pulirlo?",
+UnknownToolbarItem : "Elemento della barra strumenti sconosciuto \"%1\"",
+UnknownCommand : "Comando sconosciuto \"%1\"",
+NotImplemented : "Comando non implementato",
+UnknownToolbarSet : "La barra di strumenti \"%1\" non esiste",
+NoActiveX : "Le impostazioni di sicurezza del tuo browser potrebbero limitare alcune funzionalità dell'editor. Devi abilitare l'opzione \"Esegui controlli e plug-in ActiveX\". Potresti avere errori e notare funzionalità mancanti.",
+BrowseServerBlocked : "Non è possibile aprire la finestra di espolorazione risorse. Verifica che tutti i blocca popup siano bloccati.",
+DialogBlocked : "Non è possibile aprire la finestra di dialogo. Verifica che tutti i blocca popup siano bloccati.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Annulla",
+DlgBtnClose : "Chiudi",
+DlgBtnBrowseServer : "Cerca sul server",
+DlgAdvancedTag : "Avanzate",
+DlgOpOther : "<Altro>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Devi inserire l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<non impostato>",
+DlgGenId : "Id",
+DlgGenLangDir : "Direzione scrittura",
+DlgGenLangDirLtr : "Da Sinistra a Destra (LTR)",
+DlgGenLangDirRtl : "Da Destra a Sinistra (RTL)",
+DlgGenLangCode : "Codice Lingua",
+DlgGenAccessKey : "Scorciatoia<br />da tastiera",
+DlgGenName : "Nome",
+DlgGenTabIndex : "Ordine di tabulazione",
+DlgGenLongDescr : "URL descrizione estesa",
+DlgGenClass : "Nome classe CSS",
+DlgGenTitle : "Titolo",
+DlgGenContType : "Tipo della risorsa collegata",
+DlgGenLinkCharset : "Set di caretteri della risorsa collegata",
+DlgGenStyle : "Stile",
+
+// Image Dialog
+DlgImgTitle : "Proprietà immagine",
+DlgImgInfoTab : "Informazioni immagine",
+DlgImgBtnUpload : "Invia al server",
+DlgImgURL : "URL",
+DlgImgUpload : "Carica",
+DlgImgAlt : "Testo alternativo",
+DlgImgWidth : "Larghezza",
+DlgImgHeight : "Altezza",
+DlgImgLockRatio : "Blocca rapporto",
+DlgBtnResetSize : "Reimposta dimensione",
+DlgImgBorder : "Bordo",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Allineamento",
+DlgImgAlignLeft : "Sinistra",
+DlgImgAlignAbsBottom: "In basso assoluto",
+DlgImgAlignAbsMiddle: "Centrato assoluto",
+DlgImgAlignBaseline : "Linea base",
+DlgImgAlignBottom : "In Basso",
+DlgImgAlignMiddle : "Centrato",
+DlgImgAlignRight : "Destra",
+DlgImgAlignTextTop : "In alto al testo",
+DlgImgAlignTop : "In Alto",
+DlgImgPreview : "Anteprima",
+DlgImgAlertUrl : "Devi inserire l'URL per l'immagine",
+DlgImgLinkTab : "Collegamento",
+
+// Flash Dialog
+DlgFlashTitle : "Proprietà Oggetto Flash",
+DlgFlashChkPlay : "Avvio Automatico",
+DlgFlashChkLoop : "Cicla",
+DlgFlashChkMenu : "Abilita Menu di Flash",
+DlgFlashScale : "Ridimensiona",
+DlgFlashScaleAll : "Mostra Tutto",
+DlgFlashScaleNoBorder : "Senza Bordo",
+DlgFlashScaleFit : "Dimensione Esatta",
+
+// Link Dialog
+DlgLnkWindowTitle : "Collegamento",
+DlgLnkInfoTab : "Informazioni collegamento",
+DlgLnkTargetTab : "Destinazione",
+
+DlgLnkType : "Tipo di Collegamento",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ancora nella pagina",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocollo",
+DlgLnkProtoOther : "<altro>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Scegli Ancora",
+DlgLnkAnchorByName : "Per Nome",
+DlgLnkAnchorById : "Per id elemento",
+DlgLnkNoAnchors : "(Nessuna ancora disponibile nel documento)",
+DlgLnkEMail : "Indirizzo E-Mail",
+DlgLnkEMailSubject : "Oggetto del messaggio",
+DlgLnkEMailBody : "Corpo del messaggio",
+DlgLnkUpload : "Carica",
+DlgLnkBtnUpload : "Invia al Server",
+
+DlgLnkTarget : "Destinazione",
+DlgLnkTargetFrame : "<riquadro>",
+DlgLnkTargetPopup : "<finestra popup>",
+DlgLnkTargetBlank : "Nuova finestra (_blank)",
+DlgLnkTargetParent : "Finestra padre (_parent)",
+DlgLnkTargetSelf : "Stessa finestra (_self)",
+DlgLnkTargetTop : "Finestra superiore (_top)",
+DlgLnkTargetFrameName : "Nome del riquadro di destinazione",
+DlgLnkPopWinName : "Nome finestra popup",
+DlgLnkPopWinFeat : "Caratteristiche finestra popup",
+DlgLnkPopResize : "Ridimensionabile",
+DlgLnkPopLocation : "Barra degli indirizzi",
+DlgLnkPopMenu : "Barra del menu",
+DlgLnkPopScroll : "Barre di scorrimento",
+DlgLnkPopStatus : "Barra di stato",
+DlgLnkPopToolbar : "Barra degli strumenti",
+DlgLnkPopFullScrn : "A tutto schermo (IE)",
+DlgLnkPopDependent : "Dipendente (Netscape)",
+DlgLnkPopWidth : "Larghezza",
+DlgLnkPopHeight : "Altezza",
+DlgLnkPopLeft : "Posizione da sinistra",
+DlgLnkPopTop : "Posizione dall'alto",
+
+DlnLnkMsgNoUrl : "Devi inserire l'URL del collegamento",
+DlnLnkMsgNoEMail : "Devi inserire un'indirizzo e-mail",
+DlnLnkMsgNoAnchor : "Devi selezionare un'ancora",
+DlnLnkMsgInvPopName : "Il nome del popup deve iniziare con una lettera, e non può contenere spazi",
+
+// Color Dialog
+DlgColorTitle : "Seleziona colore",
+DlgColorBtnClear : "Vuota",
+DlgColorHighlight : "Evidenziato",
+DlgColorSelected : "Selezionato",
+
+// Smiley Dialog
+DlgSmileyTitle : "Inserisci emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Seleziona carattere speciale",
+
+// Table Dialog
+DlgTableTitle : "Proprietà tabella",
+DlgTableRows : "Righe",
+DlgTableColumns : "Colonne",
+DlgTableBorder : "Dimensione bordo",
+DlgTableAlign : "Allineamento",
+DlgTableAlignNotSet : "<non impostato>",
+DlgTableAlignLeft : "Sinistra",
+DlgTableAlignCenter : "Centrato",
+DlgTableAlignRight : "Destra",
+DlgTableWidth : "Larghezza",
+DlgTableWidthPx : "pixel",
+DlgTableWidthPc : "percento",
+DlgTableHeight : "Altezza",
+DlgTableCellSpace : "Spaziatura celle",
+DlgTableCellPad : "Padding celle",
+DlgTableCaption : "Intestazione",
+DlgTableSummary : "Indice",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Proprietà cella",
+DlgCellWidth : "Larghezza",
+DlgCellWidthPx : "pixel",
+DlgCellWidthPc : "percento",
+DlgCellHeight : "Altezza",
+DlgCellWordWrap : "A capo automatico",
+DlgCellWordWrapNotSet : "<non impostato>",
+DlgCellWordWrapYes : "Si",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "Allineamento orizzontale",
+DlgCellHorAlignNotSet : "<non impostato>",
+DlgCellHorAlignLeft : "Sinistra",
+DlgCellHorAlignCenter : "Centrato",
+DlgCellHorAlignRight: "Destra",
+DlgCellVerAlign : "Allineamento verticale",
+DlgCellVerAlignNotSet : "<non impostato>",
+DlgCellVerAlignTop : "In Alto",
+DlgCellVerAlignMiddle : "Centrato",
+DlgCellVerAlignBottom : "In Basso",
+DlgCellVerAlignBaseline : "Linea base",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Righe occupate",
+DlgCellCollSpan : "Colonne occupate",
+DlgCellBackColor : "Colore sfondo",
+DlgCellBorderColor : "Colore bordo",
+DlgCellBtnSelect : "Scegli...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Cerca e Sostituisci",
+
+// Find Dialog
+DlgFindTitle : "Trova",
+DlgFindFindBtn : "Trova",
+DlgFindNotFoundMsg : "L'elemento cercato non è stato trovato.",
+
+// Replace Dialog
+DlgReplaceTitle : "Sostituisci",
+DlgReplaceFindLbl : "Trova:",
+DlgReplaceReplaceLbl : "Sostituisci con:",
+DlgReplaceCaseChk : "Maiuscole/minuscole",
+DlgReplaceReplaceBtn : "Sostituisci",
+DlgReplaceReplAllBtn : "Sostituisci tutto",
+DlgReplaceWordChk : "Solo parole intere",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).",
+PasteErrorCopy : "Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).",
+
+PasteAsText : "Incolla come testo semplice",
+PasteFromWord : "Incolla da Word",
+
+DlgPasteMsg2 : "Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.",
+DlgPasteSec : "A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.",
+DlgPasteIgnoreFont : "Ignora le definizioni di Font",
+DlgPasteRemoveStyles : "Rimuovi le definizioni di Stile",
+
+// Color Picker
+ColorAutomatic : "Automatico",
+ColorMoreColors : "Altri colori...",
+
+// Document Properties
+DocProps : "Proprietà del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle : "Proprietà ancora",
+DlgAnchorName : "Nome ancora",
+DlgAnchorErrorName : "Inserici il nome dell'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Non nel dizionario",
+DlgSpellChangeTo : "Cambia in",
+DlgSpellBtnIgnore : "Ignora",
+DlgSpellBtnIgnoreAll : "Ignora tutto",
+DlgSpellBtnReplace : "Cambia",
+DlgSpellBtnReplaceAll : "Cambia tutto",
+DlgSpellBtnUndo : "Annulla",
+DlgSpellNoSuggestions : "- Nessun suggerimento -",
+DlgSpellProgress : "Controllo ortografico in corso",
+DlgSpellNoMispell : "Controllo ortografico completato: nessun errore trovato",
+DlgSpellNoChanges : "Controllo ortografico completato: nessuna parola cambiata",
+DlgSpellOneChange : "Controllo ortografico completato: 1 parola cambiata",
+DlgSpellManyChanges : "Controllo ortografico completato: %1 parole cambiate",
+
+IeSpellDownload : "Contollo ortografico non installato. Lo vuoi scaricare ora?",
+
+// Button Dialog
+DlgButtonText : "Testo (Value)",
+DlgButtonType : "Tipo",
+DlgButtonTypeBtn : "Bottone",
+DlgButtonTypeSbm : "Invio",
+DlgButtonTypeRst : "Annulla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nome",
+DlgCheckboxValue : "Valore",
+DlgCheckboxSelected : "Selezionato",
+
+// Form Dialog
+DlgFormName : "Nome",
+DlgFormAction : "Azione",
+DlgFormMethod : "Metodo",
+
+// Select Field Dialog
+DlgSelectName : "Nome",
+DlgSelectValue : "Valore",
+DlgSelectSize : "Dimensione",
+DlgSelectLines : "righe",
+DlgSelectChkMulti : "Permetti selezione multipla",
+DlgSelectOpAvail : "Opzioni disponibili",
+DlgSelectOpText : "Testo",
+DlgSelectOpValue : "Valore",
+DlgSelectBtnAdd : "Aggiungi",
+DlgSelectBtnModify : "Modifica",
+DlgSelectBtnUp : "Su",
+DlgSelectBtnDown : "Gi",
+DlgSelectBtnSetValue : "Imposta come predefinito",
+DlgSelectBtnDelete : "Rimuovi",
+
+// Textarea Dialog
+DlgTextareaName : "Nome",
+DlgTextareaCols : "Colonne",
+DlgTextareaRows : "Righe",
+
+// Text Field Dialog
+DlgTextName : "Nome",
+DlgTextValue : "Valore",
+DlgTextCharWidth : "Larghezza",
+DlgTextMaxChars : "Numero massimo di caratteri",
+DlgTextType : "Tipo",
+DlgTextTypeText : "Testo",
+DlgTextTypePass : "Password",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nome",
+DlgHiddenValue : "Valore",
+
+// Bulleted List Dialog
+BulletedListProp : "Proprietà lista puntata",
+NumberedListProp : "Proprietà lista numerata",
+DlgLstStart : "Inizio",
+DlgLstType : "Tipo",
+DlgLstTypeCircle : "Tondo",
+DlgLstTypeDisc : "Disco",
+DlgLstTypeSquare : "Quadrato",
+DlgLstTypeNumbers : "Numeri (1, 2, 3)",
+DlgLstTypeLCase : "Caratteri minuscoli (a, b, c)",
+DlgLstTypeUCase : "Caratteri maiuscoli (A, B, C)",
+DlgLstTypeSRoman : "Numeri Romani minuscoli (i, ii, iii)",
+DlgLstTypeLRoman : "Numeri Romani maiuscoli (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Genarale",
+DlgDocBackTab : "Sfondo",
+DlgDocColorsTab : "Colori e margini",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Titolo pagina",
+DlgDocLangDir : "Direzione scrittura",
+DlgDocLangDirLTR : "Da Sinistra a Destra (LTR)",
+DlgDocLangDirRTL : "Da Destra a Sinistra (RTL)",
+DlgDocLangCode : "Codice Lingua",
+DlgDocCharSet : "Set di caretteri",
+DlgDocCharSetCE : "Europa Centrale",
+DlgDocCharSetCT : "Cinese Tradizionale (Big5)",
+DlgDocCharSetCR : "Cirillico",
+DlgDocCharSetGR : "Greco",
+DlgDocCharSetJP : "Giapponese",
+DlgDocCharSetKR : "Coreano",
+DlgDocCharSetTR : "Turco",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Europa Occidentale",
+DlgDocCharSetOther : "Altro set di caretteri",
+
+DlgDocDocType : "Intestazione DocType",
+DlgDocDocTypeOther : "Altra intestazione DocType",
+DlgDocIncXHTML : "Includi dichiarazione XHTML",
+DlgDocBgColor : "Colore di sfondo",
+DlgDocBgImage : "Immagine di sfondo",
+DlgDocBgNoScroll : "Sfondo fissato",
+DlgDocCText : "Testo",
+DlgDocCLink : "Collegamento",
+DlgDocCVisited : "Collegamento visitato",
+DlgDocCActive : "Collegamento attivo",
+DlgDocMargins : "Margini",
+DlgDocMaTop : "In Alto",
+DlgDocMaLeft : "A Sinistra",
+DlgDocMaRight : "A Destra",
+DlgDocMaBottom : "In Basso",
+DlgDocMeIndex : "Chiavi di indicizzazione documento (separate da virgola)",
+DlgDocMeDescr : "Descrizione documento",
+DlgDocMeAuthor : "Autore",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Anteprima",
+
+// Templates Dialog
+Templates : "Modelli",
+DlgTemplatesTitle : "Contenuto dei modelli",
+DlgTemplatesSelMsg : "Seleziona il modello da aprire nell'editor<br />(il contenuto attuale verrà eliminato):",
+DlgTemplatesLoading : "Caricamento modelli in corso. Attendere prego...",
+DlgTemplatesNoTpl : "(Nessun modello definito)",
+DlgTemplatesReplace : "Cancella il contenuto corrente",
+
+// About Dialog
+DlgAboutAboutTab : "Informazioni",
+DlgAboutBrowserInfoTab : "Informazioni Browser",
+DlgAboutLicenseTab : "Licenza",
+DlgAboutVersion : "versione",
+DlgAboutInfo : "Per maggiori informazioni visitare",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ja.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ja.js
new file mode 100644
index 0000000..b4a6635
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ja.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Japanese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "ツールãƒãƒ¼ã‚’éš ã™",
+ToolbarExpand : "ツールãƒãƒ¼ã‚’表示",
+
+// Toolbar Items and Context Menu
+Save : "ä¿å­˜",
+NewPage : "æ–°ã—ã„ページ",
+Preview : "プレビュー",
+Cut : "切りå–ã‚Š",
+Copy : "コピー",
+Paste : "貼り付ã‘",
+PasteText : "プレーンテキスト貼り付ã‘",
+PasteWord : "ワード文章ã‹ã‚‰è²¼ã‚Šä»˜ã‘",
+Print : "å°åˆ·",
+SelectAll : "ã™ã¹ã¦é¸æŠž",
+RemoveFormat : "フォーマット削除",
+InsertLinkLbl : "リンク",
+InsertLink : "リンク挿入/編集",
+RemoveLink : "リンク削除",
+VisitLink : "リンクを開ã",
+Anchor : "アンカー挿入/編集",
+AnchorDelete : "アンカー削除",
+InsertImageLbl : "イメージ",
+InsertImage : "イメージ挿入/編集",
+InsertFlashLbl : "Flash",
+InsertFlash : "Flash挿入/編集",
+InsertTableLbl : "テーブル",
+InsertTable : "テーブル挿入/編集",
+InsertLineLbl : "ライン",
+InsertLine : "横罫線",
+InsertSpecialCharLbl: "特殊文字",
+InsertSpecialChar : "特殊文字挿入",
+InsertSmileyLbl : "絵文字",
+InsertSmiley : "絵文字挿入",
+About : "FCKeditorヘルプ",
+Bold : "太字",
+Italic : "斜体",
+Underline : "下線",
+StrikeThrough : "打ã¡æ¶ˆã—ç·š",
+Subscript : "æ·»ãˆå­—",
+Superscript : "上付ã文字",
+LeftJustify : "å·¦æƒãˆ",
+CenterJustify : "中央æƒãˆ",
+RightJustify : "å³æƒãˆ",
+BlockJustify : "両端æƒãˆ",
+DecreaseIndent : "インデント解除",
+IncreaseIndent : "インデント",
+Blockquote : "ブロック引用",
+CreateDiv : "Div 作æˆ",
+EditDiv : "Div 編集",
+DeleteDiv : "Div 削除",
+Undo : "å…ƒã«æˆ»ã™",
+Redo : "ã‚„ã‚Šç›´ã—",
+NumberedListLbl : "段è½ç•ªå·",
+NumberedList : "段è½ç•ªå·ã®è¿½åŠ /削除",
+BulletedListLbl : "箇æ¡æ›¸ã",
+BulletedList : "箇æ¡æ›¸ãã®è¿½åŠ /削除",
+ShowTableBorders : "テーブルボーダー表示",
+ShowDetails : "詳細表示",
+Style : "スタイル",
+FontFormat : "フォーマット",
+Font : "フォント",
+FontSize : "サイズ",
+TextColor : "テキスト色",
+BGColor : "背景色",
+Source : "ソース",
+Find : "検索",
+Replace : "ç½®ãæ›ãˆ",
+SpellCheck : "スペルãƒã‚§ãƒƒã‚¯",
+UniversalKeyboard : "ユニãƒãƒ¼ã‚µãƒ«ãƒ»ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰",
+PageBreakLbl : "改ページ",
+PageBreak : "改ページ挿入",
+
+Form : "フォーム",
+Checkbox : "ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹",
+RadioButton : "ラジオボタン",
+TextField : "1行テキスト",
+Textarea : "テキストエリア",
+HiddenField : "ä¸å¯è¦–フィールド",
+Button : "ボタン",
+SelectionField : "é¸æŠžãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰",
+ImageButton : "ç”»åƒãƒœã‚¿ãƒ³",
+
+FitWindow : "エディタサイズを最大ã«ã—ã¾ã™",
+ShowBlocks : "ブロック表示",
+
+// Context Menu
+EditLink : "リンク編集",
+CellCM : "セル",
+RowCM : "行",
+ColumnCM : "カラム",
+InsertRowAfter : "列ã®å¾Œã«æŒ¿å…¥",
+InsertRowBefore : "列ã®å‰ã«æŒ¿å…¥",
+DeleteRows : "行削除",
+InsertColumnAfter : "カラムã®å¾Œã«æŒ¿å…¥",
+InsertColumnBefore : "カラムã®å‰ã«æŒ¿å…¥",
+DeleteColumns : "列削除",
+InsertCellAfter : "セルã®å¾Œã«æŒ¿å…¥",
+InsertCellBefore : "セルã®å‰ã«æŒ¿å…¥",
+DeleteCells : "セル削除",
+MergeCells : "セルçµåˆ",
+MergeRight : "å³ã«çµåˆ",
+MergeDown : "下ã«çµåˆ",
+HorizontalSplitCell : "セルを水平方å‘分割",
+VerticalSplitCell : "セルを垂直方å‘ã«åˆ†å‰²",
+TableDelete : "テーブル削除",
+CellProperties : "セル プロパティ",
+TableProperties : "テーブル プロパティ",
+ImageProperties : "イメージ プロパティ",
+FlashProperties : "Flash プロパティ",
+
+AnchorProp : "アンカー プロパティ",
+ButtonProp : "ボタン プロパティ",
+CheckboxProp : "ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ プロパティ",
+HiddenFieldProp : "ä¸å¯è¦–フィールド プロパティ",
+RadioButtonProp : "ラジオボタン プロパティ",
+ImageButtonProp : "ç”»åƒãƒœã‚¿ãƒ³ プロパティ",
+TextFieldProp : "1行テキスト プロパティ",
+SelectionFieldProp : "é¸æŠžãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ プロパティ",
+TextareaProp : "テキストエリア プロパティ",
+FormProp : "フォーム プロパティ",
+
+FontFormats : "標準;書å¼ä»˜ã;アドレス;見出㗠1;見出㗠2;見出㗠3;見出㗠4;見出㗠5;見出㗠6;標準 (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML処ç†ä¸­. ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„...",
+Done : "完了",
+PasteWordConfirm : "貼り付ã‘ã‚’è¡Œã†ãƒ†ã‚­ã‚¹ãƒˆã¯ã€ãƒ¯ãƒ¼ãƒ‰æ–‡ç« ã‹ã‚‰ã‚³ãƒ”ーã•ã‚Œã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚貼り付ã‘ã‚‹å‰ã«ã‚¯ãƒªãƒ¼ãƒ‹ãƒ³ã‚°ã‚’è¡Œã„ã¾ã™ã‹ï¼Ÿ",
+NotCompatiblePaste : "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ã‚¨ã‚¯ã‚¹ãƒ—ローラーãƒãƒ¼ã‚¸ãƒ§ãƒ³5.5以上ã§åˆ©ç”¨å¯èƒ½ã§ã™ã€‚クリーニングã—ãªã„ã§è²¼ã‚Šä»˜ã‘ã‚’è¡Œã„ã¾ã™ã‹ï¼Ÿ",
+UnknownToolbarItem : "未知ã®ãƒ„ールãƒãƒ¼é …ç›® \"%1\"",
+UnknownCommand : "未知ã®ã‚³ãƒžãƒ³ãƒ‰å \"%1\"",
+NotImplemented : "コマンドã¯ã‚¤ãƒ³ãƒ—リメントã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚",
+UnknownToolbarSet : "ツールãƒãƒ¼è¨­å®š \"%1\" 存在ã—ã¾ã›ã‚“。",
+NoActiveX : "エラーã€è­¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãªã©ãŒç™ºç”Ÿã—ãŸå ´åˆã€ãƒ–ラウザーã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã‚¨ãƒ‡ã‚£ã‚¿ã®ã„ãã¤ã‹ã®æ©Ÿèƒ½ãŒåˆ¶é™ã•ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚セキュリティ設定ã®ã‚ªãƒ—ションã§\"ActiveXコントロールã¨ãƒ—ラグインã®å®Ÿè¡Œ\"を有効ã«ã™ã‚‹ã«ã—ã¦ãã ã•ã„。",
+BrowseServerBlocked : "サーãƒãƒ¼ãƒ–ラウザーを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ãƒãƒƒãƒ—アップ・ブロック機能ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。",
+DialogBlocked : "ダイアログウィンドウを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ãƒãƒƒãƒ—アップ・ブロック機能ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。",
+VisitLinkBlocked : "æ–°ã—ã„ウィンドウを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ãƒãƒƒãƒ—アップ・ブロック機能ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "キャンセル",
+DlgBtnClose : "é–‰ã˜ã‚‹",
+DlgBtnBrowseServer : "サーãƒãƒ¼ãƒ–ラウザー",
+DlgAdvancedTag : "高度ãªè¨­å®š",
+DlgOpOther : "<ãã®ä»–>",
+DlgInfoTab : "情報",
+DlgAlertUrl : "URLを挿入ã—ã¦ãã ã•ã„",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ãªã—>",
+DlgGenId : "Id",
+DlgGenLangDir : "文字表記ã®æ–¹å‘",
+DlgGenLangDirLtr : "å·¦ã‹ã‚‰å³ (LTR)",
+DlgGenLangDirRtl : "å³ã‹ã‚‰å·¦ (RTL)",
+DlgGenLangCode : "言語コード",
+DlgGenAccessKey : "アクセスキー",
+DlgGenName : "Name属性",
+DlgGenTabIndex : "タブインデックス",
+DlgGenLongDescr : "longdesc属性(長文説明)",
+DlgGenClass : "スタイルシートクラス",
+DlgGenTitle : "Title属性",
+DlgGenContType : "Content Type属性",
+DlgGenLinkCharset : "リンクcharset属性",
+DlgGenStyle : "スタイルシート",
+
+// Image Dialog
+DlgImgTitle : "イメージ プロパティ",
+DlgImgInfoTab : "イメージ 情報",
+DlgImgBtnUpload : "サーãƒãƒ¼ã«é€ä¿¡",
+DlgImgURL : "URL",
+DlgImgUpload : "アップロード",
+DlgImgAlt : "代替テキスト",
+DlgImgWidth : "å¹…",
+DlgImgHeight : "高ã•",
+DlgImgLockRatio : "ロック比率",
+DlgBtnResetSize : "サイズリセット",
+DlgImgBorder : "ボーダー",
+DlgImgHSpace : "横間隔",
+DlgImgVSpace : "縦間隔",
+DlgImgAlign : "è¡Œæƒãˆ",
+DlgImgAlignLeft : "å·¦",
+DlgImgAlignAbsBottom: "下部(絶対的)",
+DlgImgAlignAbsMiddle: "中央(絶対的)",
+DlgImgAlignBaseline : "ベースライン",
+DlgImgAlignBottom : "下",
+DlgImgAlignMiddle : "中央",
+DlgImgAlignRight : "å³",
+DlgImgAlignTextTop : "テキスト上部",
+DlgImgAlignTop : "上",
+DlgImgPreview : "プレビュー",
+DlgImgAlertUrl : "イメージã®URLを入力ã—ã¦ãã ã•ã„。",
+DlgImgLinkTab : "リンク",
+
+// Flash Dialog
+DlgFlashTitle : "Flash プロパティ",
+DlgFlashChkPlay : "å†ç”Ÿ",
+DlgFlashChkLoop : "ループå†ç”Ÿ",
+DlgFlashChkMenu : "Flashメニューå¯èƒ½",
+DlgFlashScale : "拡大縮å°è¨­å®š",
+DlgFlashScaleAll : "ã™ã¹ã¦è¡¨ç¤º",
+DlgFlashScaleNoBorder : "外ãŒè¦‹ãˆãªã„様ã«æ‹¡å¤§",
+DlgFlashScaleFit : "上下左å³ã«ãƒ•ã‚£ãƒƒãƒˆ",
+
+// Link Dialog
+DlgLnkWindowTitle : "ãƒã‚¤ãƒ‘ーリンク",
+DlgLnkInfoTab : "ãƒã‚¤ãƒ‘ーリンク 情報",
+DlgLnkTargetTab : "ターゲット",
+
+DlgLnkType : "リンクタイプ",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "ã“ã®ãƒšãƒ¼ã‚¸ã®ã‚¢ãƒ³ã‚«ãƒ¼",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "プロトコル",
+DlgLnkProtoOther : "<ãã®ä»–>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "アンカーをé¸æŠž",
+DlgLnkAnchorByName : "アンカーå",
+DlgLnkAnchorById : "エレメントID",
+DlgLnkNoAnchors : "(ドキュメントã«ãŠã„ã¦åˆ©ç”¨å¯èƒ½ãªã‚¢ãƒ³ã‚«ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“。)",
+DlgLnkEMail : "E-Mail アドレス",
+DlgLnkEMailSubject : "件å",
+DlgLnkEMailBody : "本文",
+DlgLnkUpload : "アップロード",
+DlgLnkBtnUpload : "サーãƒãƒ¼ã«é€ä¿¡",
+
+DlgLnkTarget : "ターゲット",
+DlgLnkTargetFrame : "<フレーム>",
+DlgLnkTargetPopup : "<ãƒãƒƒãƒ—アップウィンドウ>",
+DlgLnkTargetBlank : "æ–°ã—ã„ウィンドウ (_blank)",
+DlgLnkTargetParent : "親ウィンドウ (_parent)",
+DlgLnkTargetSelf : "åŒã˜ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ (_self)",
+DlgLnkTargetTop : "最上ä½ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ (_top)",
+DlgLnkTargetFrameName : "目的ã®ãƒ•ãƒ¬ãƒ¼ãƒ å",
+DlgLnkPopWinName : "ãƒãƒƒãƒ—アップウィンドウå",
+DlgLnkPopWinFeat : "ãƒãƒƒãƒ—アップウィンドウ特徴",
+DlgLnkPopResize : "リサイズå¯èƒ½",
+DlgLnkPopLocation : "ロケーションãƒãƒ¼",
+DlgLnkPopMenu : "メニューãƒãƒ¼",
+DlgLnkPopScroll : "スクロールãƒãƒ¼",
+DlgLnkPopStatus : "ステータスãƒãƒ¼",
+DlgLnkPopToolbar : "ツールãƒãƒ¼",
+DlgLnkPopFullScrn : "全画é¢ãƒ¢ãƒ¼ãƒ‰(IE)",
+DlgLnkPopDependent : "é–‹ã„ãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«é€£å‹•ã—ã¦é–‰ã˜ã‚‹ (Netscape)",
+DlgLnkPopWidth : "å¹…",
+DlgLnkPopHeight : "高ã•",
+DlgLnkPopLeft : "左端ã‹ã‚‰ã®åº§æ¨™ã§æŒ‡å®š",
+DlgLnkPopTop : "上端ã‹ã‚‰ã®åº§æ¨™ã§æŒ‡å®š",
+
+DlnLnkMsgNoUrl : "リンクURLを入力ã—ã¦ãã ã•ã„。",
+DlnLnkMsgNoEMail : "メールアドレスを入力ã—ã¦ãã ã•ã„。",
+DlnLnkMsgNoAnchor : "アンカーをé¸æŠžã—ã¦ãã ã•ã„。",
+DlnLnkMsgInvPopName : "ãƒãƒƒãƒ—・アップåã¯è‹±å­—ã§å§‹ã¾ã‚‹æ–‡å­—ã§æŒ‡å®šã—ã¦ãã ã„。ãƒãƒƒãƒ—・アップåã«ã‚¹ãƒšãƒ¼ã‚¹ã¯å«ã‚ã¾ã›ã‚“",
+
+// Color Dialog
+DlgColorTitle : "色é¸æŠž",
+DlgColorBtnClear : "クリア",
+DlgColorHighlight : "ãƒã‚¤ãƒ©ã‚¤ãƒˆ",
+DlgColorSelected : "é¸æŠžè‰²",
+
+// Smiley Dialog
+DlgSmileyTitle : "顔文字挿入",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "特殊文字é¸æŠž",
+
+// Table Dialog
+DlgTableTitle : "テーブル プロパティ",
+DlgTableRows : "行",
+DlgTableColumns : "列",
+DlgTableBorder : "ボーダーサイズ",
+DlgTableAlign : "キャプションã®æ•´åˆ—",
+DlgTableAlignNotSet : "<ãªã—>",
+DlgTableAlignLeft : "å·¦",
+DlgTableAlignCenter : "中央",
+DlgTableAlignRight : "å³",
+DlgTableWidth : "テーブル幅",
+DlgTableWidthPx : "ピクセル",
+DlgTableWidthPc : "パーセント",
+DlgTableHeight : "テーブル高ã•",
+DlgTableCellSpace : "セル内余白",
+DlgTableCellPad : "セル内間隔",
+DlgTableCaption : "キャプショï¾",
+DlgTableSummary : "テーブル目的/構造",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "セル プロパティ",
+DlgCellWidth : "å¹…",
+DlgCellWidthPx : "ピクセル",
+DlgCellWidthPc : "パーセント",
+DlgCellHeight : "高ã•",
+DlgCellWordWrap : "折り返ã—",
+DlgCellWordWrapNotSet : "<ãªã—>",
+DlgCellWordWrapYes : "Yes",
+DlgCellWordWrapNo : "No",
+DlgCellHorAlign : "セル横ã®æ•´åˆ—",
+DlgCellHorAlignNotSet : "<ãªã—>",
+DlgCellHorAlignLeft : "å·¦",
+DlgCellHorAlignCenter : "中央",
+DlgCellHorAlignRight: "å³",
+DlgCellVerAlign : "セル縦ã®æ•´åˆ—",
+DlgCellVerAlignNotSet : "<ãªã—>",
+DlgCellVerAlignTop : "上",
+DlgCellVerAlignMiddle : "中央",
+DlgCellVerAlignBottom : "下",
+DlgCellVerAlignBaseline : "ベースライン",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "縦幅(行数)",
+DlgCellCollSpan : "横幅(列数)",
+DlgCellBackColor : "背景色",
+DlgCellBorderColor : "ボーダーカラー",
+DlgCellBtnSelect : "é¸æŠž...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "検索ã—ã¦ç½®æ›",
+
+// Find Dialog
+DlgFindTitle : "検索",
+DlgFindFindBtn : "検索",
+DlgFindNotFoundMsg : "指定ã•ã‚ŒãŸæ–‡å­—列ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚",
+
+// Replace Dialog
+DlgReplaceTitle : "ç½®ãæ›ãˆ",
+DlgReplaceFindLbl : "検索ã™ã‚‹æ–‡å­—列:",
+DlgReplaceReplaceLbl : "ç½®æ›ãˆã™ã‚‹æ–‡å­—列:",
+DlgReplaceCaseChk : "部分一致",
+DlgReplaceReplaceBtn : "ç½®æ›ãˆ",
+DlgReplaceReplAllBtn : "ã™ã¹ã¦ç½®æ›ãˆ",
+DlgReplaceWordChk : "å˜èªžå˜ä½ã§ä¸€è‡´",
+
+// Paste Operations / Dialog
+PasteErrorCut : "ブラウザーã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã‚¨ãƒ‡ã‚£ã‚¿ã®åˆ‡ã‚Šå–ã‚Šæ“作ãŒè‡ªå‹•ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。実行ã™ã‚‹ã«ã¯æ‰‹å‹•ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®(Ctrl+X)を使用ã—ã¦ãã ã•ã„。",
+PasteErrorCopy : "ブラウザーã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã‚¨ãƒ‡ã‚£ã‚¿ã®ã‚³ãƒ”ーæ“作ãŒè‡ªå‹•ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。実行ã™ã‚‹ã«ã¯æ‰‹å‹•ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®(Ctrl+C)を使用ã—ã¦ãã ã•ã„。",
+
+PasteAsText : "プレーンテキスト貼り付ã‘",
+PasteFromWord : "ワード文章ã‹ã‚‰è²¼ã‚Šä»˜ã‘",
+
+DlgPasteMsg2 : "キーボード(<STRONG>Ctrl+V</STRONG>)を使用ã—ã¦ã€æ¬¡ã®å…¥åŠ›ã‚¨ãƒªã‚¢å†…ã§è²¼ã£ã¦ã€<STRONG>OK</STRONG>を押ã—ã¦ãã ã•ã„。",
+DlgPasteSec : "ブラウザã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã€ã‚¨ãƒ‡ã‚£ã‚¿ã¯ã‚¯ãƒªãƒƒãƒ—ボード・データã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯è²¼ã‚Šä»˜ã‘æ“作を行ã†åº¦ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚",
+DlgPasteIgnoreFont : "Fontã‚¿ã‚°ã®Face属性を無視ã—ã¾ã™ã€‚",
+DlgPasteRemoveStyles : "スタイル定義を削除ã—ã¾ã™ã€‚",
+
+// Color Picker
+ColorAutomatic : "自動",
+ColorMoreColors : "ãã®ä»–ã®è‰²...",
+
+// Document Properties
+DocProps : "文書 プロパティ",
+
+// Anchor Dialog
+DlgAnchorTitle : "アンカー プロパティ",
+DlgAnchorName : "アンカーå",
+DlgAnchorErrorName : "アンカーåã‚’å¿…ãšå…¥åŠ›ã—ã¦ãã ã•ã„。",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "辞書ã«ã‚ã‚Šã¾ã›ã‚“",
+DlgSpellChangeTo : "変更",
+DlgSpellBtnIgnore : "無視",
+DlgSpellBtnIgnoreAll : "ã™ã¹ã¦ç„¡è¦–",
+DlgSpellBtnReplace : "ç½®æ›",
+DlgSpellBtnReplaceAll : "ã™ã¹ã¦ç½®æ›",
+DlgSpellBtnUndo : "ã‚„ã‚Šç›´ã—",
+DlgSpellNoSuggestions : "- 該当ãªã— -",
+DlgSpellProgress : "スペルãƒã‚§ãƒƒã‚¯å‡¦ç†ä¸­...",
+DlgSpellNoMispell : "スペルãƒã‚§ãƒƒã‚¯å®Œäº†: スペルã®èª¤ã‚Šã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ",
+DlgSpellNoChanges : "スペルãƒã‚§ãƒƒã‚¯å®Œäº†: 語å¥ã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ",
+DlgSpellOneChange : "スペルãƒã‚§ãƒƒã‚¯å®Œäº†: 1語å¥å¤‰æ›´ã•ã‚Œã¾ã—ãŸ",
+DlgSpellManyChanges : "スペルãƒã‚§ãƒƒã‚¯å®Œäº†: %1 語å¥å¤‰æ›´ã•ã‚Œã¾ã—ãŸ",
+
+IeSpellDownload : "スペルãƒã‚§ãƒƒã‚«ãƒ¼ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。今ã™ãダウンロードã—ã¾ã™ã‹?",
+
+// Button Dialog
+DlgButtonText : "テキスト (値)",
+DlgButtonType : "タイプ",
+DlgButtonTypeBtn : "ボタン",
+DlgButtonTypeSbm : "é€ä¿¡",
+DlgButtonTypeRst : "リセット",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "åå‰",
+DlgCheckboxValue : "値",
+DlgCheckboxSelected : "é¸æŠžæ¸ˆã¿",
+
+// Form Dialog
+DlgFormName : "フォームå",
+DlgFormAction : "アクション",
+DlgFormMethod : "メソッド",
+
+// Select Field Dialog
+DlgSelectName : "åå‰",
+DlgSelectValue : "値",
+DlgSelectSize : "サイズ",
+DlgSelectLines : "行",
+DlgSelectChkMulti : "複数項目é¸æŠžã‚’許å¯",
+DlgSelectOpAvail : "利用å¯èƒ½ãªã‚ªãƒ—ション",
+DlgSelectOpText : "é¸æŠžé …ç›®å",
+DlgSelectOpValue : "é¸æŠžé …目値",
+DlgSelectBtnAdd : "追加",
+DlgSelectBtnModify : "編集",
+DlgSelectBtnUp : "上ã¸",
+DlgSelectBtnDown : "下ã¸",
+DlgSelectBtnSetValue : "é¸æŠžã—ãŸå€¤ã‚’設定",
+DlgSelectBtnDelete : "削除",
+
+// Textarea Dialog
+DlgTextareaName : "åå‰",
+DlgTextareaCols : "列",
+DlgTextareaRows : "行",
+
+// Text Field Dialog
+DlgTextName : "åå‰",
+DlgTextValue : "値",
+DlgTextCharWidth : "サイズ",
+DlgTextMaxChars : "最大長",
+DlgTextType : "タイプ",
+DlgTextTypeText : "テキスト",
+DlgTextTypePass : "パスワード入力",
+
+// Hidden Field Dialog
+DlgHiddenName : "åå‰",
+DlgHiddenValue : "値",
+
+// Bulleted List Dialog
+BulletedListProp : "箇æ¡æ›¸ã プロパティ",
+NumberedListProp : "段è½ç•ªå· プロパティ",
+DlgLstStart : "開始文字",
+DlgLstType : "タイプ",
+DlgLstTypeCircle : "白丸",
+DlgLstTypeDisc : "黒丸",
+DlgLstTypeSquare : "四角",
+DlgLstTypeNumbers : "アラビア数字 (1, 2, 3)",
+DlgLstTypeLCase : "英字å°æ–‡å­— (a, b, c)",
+DlgLstTypeUCase : "英字大文字 (A, B, C)",
+DlgLstTypeSRoman : "ローマ数字å°æ–‡å­— (i, ii, iii)",
+DlgLstTypeLRoman : "ローマ数字大文字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "全般",
+DlgDocBackTab : "背景",
+DlgDocColorsTab : "色ã¨ãƒžãƒ¼ã‚¸ãƒ³",
+DlgDocMetaTab : "メタデータ",
+
+DlgDocPageTitle : "ページタイトル",
+DlgDocLangDir : "言語文字表記ã®æ–¹å‘",
+DlgDocLangDirLTR : "å·¦ã‹ã‚‰å³ã«è¡¨è¨˜(LTR)",
+DlgDocLangDirRTL : "å³ã‹ã‚‰å·¦ã«è¡¨è¨˜(RTL)",
+DlgDocLangCode : "言語コード",
+DlgDocCharSet : "文字セット符å·åŒ–",
+DlgDocCharSetCE : "Central European",
+DlgDocCharSetCT : "Chinese Traditional (Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Greek",
+DlgDocCharSetJP : "Japanese",
+DlgDocCharSetKR : "Korean",
+DlgDocCharSetTR : "Turkish",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Western European",
+DlgDocCharSetOther : "ä»–ã®æ–‡å­—セット符å·åŒ–",
+
+DlgDocDocType : "文書タイプヘッダー",
+DlgDocDocTypeOther : "ãã®ä»–文書タイプヘッダー",
+DlgDocIncXHTML : "XHTML宣言をインクルード",
+DlgDocBgColor : "背景色",
+DlgDocBgImage : "èƒŒæ™¯ç”»åƒ URL",
+DlgDocBgNoScroll : "スクロールã—ãªã„背景",
+DlgDocCText : "テキスト",
+DlgDocCLink : "リンク",
+DlgDocCVisited : "アクセス済ã¿ãƒªãƒ³ã‚¯",
+DlgDocCActive : "アクセス中リンク",
+DlgDocMargins : "ページ・マージン",
+DlgDocMaTop : "上部",
+DlgDocMaLeft : "å·¦",
+DlgDocMaRight : "å³",
+DlgDocMaBottom : "下部",
+DlgDocMeIndex : "文書ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰(カンマ区切り)",
+DlgDocMeDescr : "文書ã®æ¦‚è¦",
+DlgDocMeAuthor : "文書ã®ä½œè€…",
+DlgDocMeCopy : "文書ã®è‘—作権",
+DlgDocPreview : "プレビュー",
+
+// Templates Dialog
+Templates : "テンプレート(雛形)",
+DlgTemplatesTitle : "テンプレート内容",
+DlgTemplatesSelMsg : "エディターã§ä½¿ç”¨ã™ã‚‹ãƒ†ãƒ³ãƒ—レートをé¸æŠžã—ã¦ãã ã•ã„。<br>(ç¾åœ¨ã®ã‚¨ãƒ‡ã‚£ã‚¿ã®å†…容ã¯å¤±ã‚ã‚Œã¾ã™):",
+DlgTemplatesLoading : "テンプレート一覧読ã¿è¾¼ã¿ä¸­. ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„...",
+DlgTemplatesNoTpl : "(テンプレートãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“)",
+DlgTemplatesReplace : "ç¾åœ¨ã®ã‚¨ãƒ‡ã‚£ã‚¿ã®å†…容ã¨ç½®æ›ãˆã‚’ã—ã¾ã™",
+
+// About Dialog
+DlgAboutAboutTab : "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±",
+DlgAboutBrowserInfoTab : "ブラウザ情報",
+DlgAboutLicenseTab : "ライセンス",
+DlgAboutVersion : "ãƒãƒ¼ã‚¸ãƒ§ãƒ³",
+DlgAboutInfo : "より詳ã—ã„情報ã¯ã“ã¡ã‚‰ã§",
+
+// Div Dialog
+DlgDivGeneralTab : "全般",
+DlgDivAdvancedTab : "高度ãªè¨­å®š",
+DlgDivStyle : "スタイル",
+DlgDivInlineStyle : "インラインスタイル"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/km.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/km.js
new file mode 100644
index 0000000..a52b8b0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/km.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Khmer language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "បង្រួមរបាឧបរកណáŸ",
+ToolbarExpand : "ពង្រីករបាឧបរណáŸ",
+
+// Toolbar Items and Context Menu
+Save : "រក្សាទុក",
+NewPage : "ទំពáŸážšážáŸ’មី",
+Preview : "មើលសាកល្បង",
+Cut : "កាážáŸ‹áž™áž€",
+Copy : "ចំលងយក",
+Paste : "ចំលងដាក់",
+PasteText : "ចំលងដាក់ជាអážáŸ’ážáž”ទធម្មážáž¶",
+PasteWord : "ចំលងដាក់ពី Word",
+Print : "បោះពុម្ភ",
+SelectAll : "ជ្រើសរើសទាំងអស់",
+RemoveFormat : "លប់ចោល ការរចនា",
+InsertLinkLbl : "ឈ្នាប់",
+InsertLink : "បន្ážáŸ‚ម/កែប្រែ ឈ្នាប់",
+RemoveLink : "លប់ឈ្នាប់",
+VisitLink : "Open Link", //MISSING
+Anchor : "បន្ážáŸ‚ម/កែប្រែ យុážáŸ’កា",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "រូបភាព",
+InsertImage : "បន្ážáŸ‚ម/កែប្រែ រូបភាព",
+InsertFlashLbl : "Flash",
+InsertFlash : "បន្ážáŸ‚ម/កែប្រែ Flash",
+InsertTableLbl : "ážáž¶ážšáž¶áž„",
+InsertTable : "បន្ážáŸ‚ម/កែប្រែ ážáž¶ážšáž¶áž„",
+InsertLineLbl : "បន្ទាážáŸ‹",
+InsertLine : "បន្ážáŸ‚មបន្ទាážáŸ‹áž•áŸ’ážáŸáž€",
+InsertSpecialCharLbl: "អក្សរពិសáŸážŸ",
+InsertSpecialChar : "បន្ážáŸ‚មអក្សរពិសáŸážŸ",
+InsertSmileyLbl : "រូបភាព",
+InsertSmiley : "បន្ážáŸ‚ម រូបភាព",
+About : "អំពី FCKeditor",
+Bold : "អក្សរដិážáž’ំ",
+Italic : "អក្សរផ្ážáŸáž€",
+Underline : "ដិážáž”ន្ទាážáŸ‹áž–ីក្រោមអក្សរ",
+StrikeThrough : "ដិážáž”ន្ទាážáŸ‹áž–ាក់កណ្ážáž¶áž›áž¢áž€áŸ’សរ",
+Subscript : "អក្សរážáž¼áž…ក្រោម",
+Superscript : "អក្សរážáž¼áž…លើ",
+LeftJustify : "ážáŸ†ážšáž¹áž˜áž†áŸ’ážœáŸáž„",
+CenterJustify : "ážáŸ†ážšáž¹áž˜áž€ážŽáŸ’ážáž¶áž›",
+RightJustify : "ážáŸ†ážšáž¹áž˜ážŸáŸ’ážáž¶áŸ†",
+BlockJustify : "ážáŸ†ážšáž¹áž˜ážŸáž„ážáž¶áž„",
+DecreaseIndent : "បន្ážáž™áž€áž¶ážšáž…ូលបន្ទាážáŸ‹",
+IncreaseIndent : "បន្ážáŸ‚មការចូលបន្ទាážáŸ‹",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "សារឡើងវិញ",
+Redo : "ធ្វើឡើងវិញ",
+NumberedListLbl : "បញ្ជីជាអក្សរ",
+NumberedList : "បន្ážáŸ‚ម/លប់ បញ្ជីជាអក្សរ",
+BulletedListLbl : "បញ្ជីជារង្វង់មូល",
+BulletedList : "បន្ážáŸ‚ម/លប់ បញ្ជីជារង្វង់មូល",
+ShowTableBorders : "បង្ហាញស៊ុមážáž¶ážšáž¶áž„",
+ShowDetails : "បង្ហាញពិស្ážáž¶ážš",
+Style : "ម៉ូáž",
+FontFormat : "រចនា",
+Font : "ហ្វុង",
+FontSize : "ទំហំ",
+TextColor : "ពណ៌អក្សរ",
+BGColor : "ពណ៌ផ្ទៃážáž¶áž„ក្រោយ",
+Source : "កូáž",
+Find : "ស្វែងរក",
+Replace : "ជំនួស",
+SpellCheck : "áž–áž·áž“áž·ážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ",
+UniversalKeyboard : "ក្ážáž¶ážšáž–ុម្ភអក្សរសកល",
+PageBreakLbl : "ការផ្ážáž¶áž…់ទំពáŸážš",
+PageBreak : "បន្ážáŸ‚ម ការផ្ážáž¶áž…់ទំពáŸážš",
+
+Form : "បែបបទ",
+Checkbox : "ប្រអប់ជ្រើសរើស",
+RadioButton : "ប៉ូážáž»áž“រង្វង់មូល",
+TextField : "ជួរសរសáŸážšáž¢ážáŸ’ážáž”áž‘",
+Textarea : "ážáŸ†áž”ន់សរសáŸážšáž¢ážáŸ’ážáž”áž‘",
+HiddenField : "ជួរលាក់",
+Button : "ប៉ូážáž»áž“",
+SelectionField : "ជួរជ្រើសរើស",
+ImageButton : "ប៉ូážáž»áž“រូបភាព",
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "កែប្រែឈ្នាប់",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "លប់ជួរផ្ážáŸáž€",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "លប់ជួរឈរ",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "លប់សែល",
+MergeCells : "បញ្ជូលសែល",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "លប់ážáž¶ážšáž¶áž„",
+CellProperties : "ការកំណážáŸ‹ážŸáŸ‚áž›",
+TableProperties : "ការកំណážáŸ‹ážáž¶ážšáž¶áž„",
+ImageProperties : "ការកំណážáŸ‹ážšáž¼áž”ភាព",
+FlashProperties : "ការកំណážáŸ‹ Flash",
+
+AnchorProp : "ការកំណážáŸ‹áž™áž»ážáŸ’កា",
+ButtonProp : "ការកំណážáŸ‹ ប៉ូážáž»áž“",
+CheckboxProp : "ការកំណážáŸ‹áž”្រអប់ជ្រើសរើស",
+HiddenFieldProp : "ការកំណážáŸ‹áž‡áž½ážšáž›áž¶áž€áŸ‹",
+RadioButtonProp : "ការកំណážáŸ‹áž”៉ូážáž»áž“រង្វង់",
+ImageButtonProp : "ការកំណážáŸ‹áž”៉ូážáž»áž“រូបភាព",
+TextFieldProp : "ការកំណážáŸ‹áž‡áž½ážšáž¢ážáŸ’ážáž”áž‘",
+SelectionFieldProp : "ការកំណážáŸ‹áž‡áž½ážšáž‡áŸ’រើសរើស",
+TextareaProp : "ការកំណážáŸ‹áž€áž“្លែងសរសáŸážšáž¢ážáŸ’ážáž”áž‘",
+FormProp : "ការកំណážáŸ‹áž”ែបបទ",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "កំពុងដំណើរការ XHTML ។ សូមរងចាំ...",
+Done : "ចប់រួចរាល់",
+PasteWordConfirm : "អážáŸ’ážáž”ទដែលលោកអ្នកបំរុងចំលងដាក់ ហាក់បីដូចជាážáŸ’រូវចំលងមកពីកម្មវិធី​Word​។ ážáž¾áž›áŸ„កអ្នកចង់សំអាážáž˜áž»áž“ចំលងអážáŸ’ážáž”ទដាក់ទáŸ?",
+NotCompatiblePaste : "ពាក្យបញ្ជានáŸáŸ‡áž”្រើបានážáŸ‚ជាមួយ Internet Explorer កំរិហ5.5 រឺ លើសនáŸáŸ‡ ។ ážáž¾áž›áŸ„កអ្នកចង់ចំលងដាក់ដោយមិនចាំបាច់សំអាážáž‘áŸ?",
+UnknownToolbarItem : "ážœážáŸ’ážáž»áž›áž¾ážšáž”ាឧបរកណ០មិនស្គាល់ \"%1\"",
+UnknownCommand : "ឈ្មោះពាក្យបញ្ជា មិនស្គាល់ \"%1\"",
+NotImplemented : "ពាក្យបញ្ជា មិនបានអនុវážáŸ’áž",
+UnknownToolbarSet : "របាឧបរកណ០\"%1\" ពុំមាន ។",
+NoActiveX : "ការកំណážáŸ‹ážŸáž»ážœážáŸ’ážáž—ាពរបស់កម្មវិធីរុករករបស់លោកអ្នក áž“áŸáŸ‡â€‹áž¢áž¶áž…ធ្វើអោយលោកអ្នកមិនអាចប្រើមុážáž„ារážáŸ’លះរបស់កម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘áž“áŸáŸ‡ ។ លោកអ្នកážáŸ’រូវកំណážáŸ‹áž¢áŸ„áž™ \"ActiveX និង​កម្មវិធីជំនួយក្នុង (plug-ins)\" អោយដំណើរការ ។ លោកអ្នកអាចជួបប្រទះនឹង បញ្ហា ព្រមជាមួយនឹងការបាážáŸ‹áž”ង់មុážáž„ារណាមួយរបស់កម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘áž“áŸáŸ‡ ។",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING
+DialogBlocked : "វីនដូវមិនអាចបើកបានទ០។ សូមពិនិážáŸ’យចំពោះកម្មវិធីបិទ វីនដូវលោហ(popup) ážáž¶ážáž¾ážœáž¶ážŠáŸ†ážŽáž¾ážšáž€áž¶ážšážšážºáž‘០។",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "យល់ព្រម",
+DlgBtnCancel : "មិនយល់ព្រម",
+DlgBtnClose : "បិទ",
+DlgBtnBrowseServer : "មើល",
+DlgAdvancedTag : "កំរិážážáŸ’ពស់",
+DlgOpOther : "<ផ្សáŸáž„ទៅáž>",
+DlgInfoTab : "áž–ážáŸŒáž˜áž¶áž“",
+DlgAlertUrl : "សូមសរសáŸážš URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<មិនមែន>",
+DlgGenId : "Id",
+DlgGenLangDir : "ទិសដៅភាសា",
+DlgGenLangDirLtr : "ពីឆ្វáŸáž„ទៅស្ážáž¶áŸ†(LTR)",
+DlgGenLangDirRtl : "ពីស្ážáž¶áŸ†áž‘ៅឆ្វáŸáž„(RTL)",
+DlgGenLangCode : "áž›áŸážáž€áž¼ážáž—ាសា",
+DlgGenAccessKey : "ឃី សំរាប់ចូល",
+DlgGenName : "ឈ្មោះ",
+DlgGenTabIndex : "áž›áŸáž Tab",
+DlgGenLongDescr : "អធិប្បាយ URL វែង",
+DlgGenClass : "Stylesheet Classes",
+DlgGenTitle : "ចំណងជើង ប្រឹក្សា",
+DlgGenContType : "ប្រភáŸáž‘អážáŸ’ážáž”áž‘ ប្រឹក្សា",
+DlgGenLinkCharset : "áž›áŸážáž€áž¼ážáž¢áž€áŸ’សររបស់ឈ្នាប់",
+DlgGenStyle : "ម៉ូáž",
+
+// Image Dialog
+DlgImgTitle : "ការកំណážáŸ‹ážšáž¼áž”ភាព",
+DlgImgInfoTab : "áž–ážáŸŒáž˜áž¶áž“អំពីរូបភាព",
+DlgImgBtnUpload : "បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្ážáž›áŸ‹ážŸáŸážœáž¶",
+DlgImgURL : "URL",
+DlgImgUpload : "ទាញយក",
+DlgImgAlt : "អážáŸ’ážáž”ទជំនួស",
+DlgImgWidth : "ទទឹង",
+DlgImgHeight : "កំពស់",
+DlgImgLockRatio : "អážáŸ’រាឡុក",
+DlgBtnResetSize : "កំណážáŸ‹áž‘ំហំឡើងវិញ",
+DlgImgBorder : "ស៊ុម",
+DlgImgHSpace : "គំលាážáž‘ទឹង",
+DlgImgVSpace : "គំលាážáž”ណ្ážáŸ„áž™",
+DlgImgAlign : "កំណážáŸ‹áž‘ីážáž¶áŸ†áž„",
+DlgImgAlignLeft : "ážáž¶áž„ឆ្វង",
+DlgImgAlignAbsBottom: "Abs Bottom", //MISSING
+DlgImgAlignAbsMiddle: "Abs Middle", //MISSING
+DlgImgAlignBaseline : "បន្ទាážáŸ‹áž‡áž¶áž˜áž¼áž›ážŠáŸ’ឋាន",
+DlgImgAlignBottom : "ážáž¶áž„ក្រោម",
+DlgImgAlignMiddle : "កណ្ážáž¶áž›",
+DlgImgAlignRight : "ážáž¶áž„ស្ážáž¶áŸ†",
+DlgImgAlignTextTop : "លើអážáŸ’ážáž”áž‘",
+DlgImgAlignTop : "ážáž¶áž„លើ",
+DlgImgPreview : "មើលសាកល្បង",
+DlgImgAlertUrl : "សូមសរសáŸážšáž„ាសáŸáž™ážŠáŸ’ឋានរបស់រូបភាព",
+DlgImgLinkTab : "ឈ្នាប់",
+
+// Flash Dialog
+DlgFlashTitle : "ការកំណážáŸ‹ Flash",
+DlgFlashChkPlay : "áž›áŸáž„ដោយស្វáŸáž™áž”្រវážáŸ’áž",
+DlgFlashChkLoop : "ចំនួនដង",
+DlgFlashChkMenu : "បង្ហាញ មឺនុយរបស់ Flash",
+DlgFlashScale : "ទំហំ",
+DlgFlashScaleAll : "បង្ហាញទាំងអស់",
+DlgFlashScaleNoBorder : "មិនបង្ហាញស៊ុម",
+DlgFlashScaleFit : "ážáŸ’រូវល្មម",
+
+// Link Dialog
+DlgLnkWindowTitle : "ឈ្នាប់",
+DlgLnkInfoTab : "áž–ážáŸŒáž˜áž¶áž“អំពីឈ្នាប់",
+DlgLnkTargetTab : "គោលដៅ",
+
+DlgLnkType : "ប្រភáŸáž‘ឈ្នាប់",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "យុážáŸ’កានៅក្នុងទំពáŸážšáž“áŸáŸ‡",
+DlgLnkTypeEMail : "អ៊ីមែល",
+DlgLnkProto : "ប្រូážáž¼áž€áž¼áž›",
+DlgLnkProtoOther : "<ផ្សáŸáž„ទៀáž>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "ជ្រើសរើសយុážáŸ’កា",
+DlgLnkAnchorByName : "ážáž¶áž˜ážˆáŸ’មោះរបស់យុážáŸ’កា",
+DlgLnkAnchorById : "ážáž¶áž˜ Id",
+DlgLnkNoAnchors : "(No anchors available in the document)", //MISSING
+DlgLnkEMail : "អ៊ីមែល",
+DlgLnkEMailSubject : "ចំណងជើងអážáŸ’ážáž”áž‘",
+DlgLnkEMailBody : "អážáŸ’ážáž”áž‘",
+DlgLnkUpload : "ទាញយក",
+DlgLnkBtnUpload : "ទាញយក",
+
+DlgLnkTarget : "គោលដៅ",
+DlgLnkTargetFrame : "<ហ្វ្រáŸáž˜>",
+DlgLnkTargetPopup : "<វីនដូវ លោáž>",
+DlgLnkTargetBlank : "វីនដូវážáŸ’មី (_blank)",
+DlgLnkTargetParent : "វីនដូវម០(_parent)",
+DlgLnkTargetSelf : "វីនដូវដដែល (_self)",
+DlgLnkTargetTop : "វីនដូវនៅលើគáŸ(_top)",
+DlgLnkTargetFrameName : "ឈ្មោះហ្រ្វáŸáž˜ážŠáŸ‚លជាគោលដៅ",
+DlgLnkPopWinName : "ឈ្មោះវីនដូវលោáž",
+DlgLnkPopWinFeat : "លក្ážážŽáŸ‡ážšáž”ស់វីនដូលលោáž",
+DlgLnkPopResize : "ទំហំអាចផ្លាស់ប្ážáž¼ážš",
+DlgLnkPopLocation : "របា ទីážáž¶áŸ†áž„",
+DlgLnkPopMenu : "របា មឺនុយ",
+DlgLnkPopScroll : "របា ទាញ",
+DlgLnkPopStatus : "របា áž–ážáŸŒáž˜áž¶áž“",
+DlgLnkPopToolbar : "របា ឩបករណáŸ",
+DlgLnkPopFullScrn : "អáŸáž€áŸ’រុងពáŸáž‰(IE)",
+DlgLnkPopDependent : "អាស្រáŸáž™áž›áž¾ (Netscape)",
+DlgLnkPopWidth : "ទទឹង",
+DlgLnkPopHeight : "កំពស់",
+DlgLnkPopLeft : "ទីážáž¶áŸ†áž„ážáž¶áž„ឆ្វáŸáž„",
+DlgLnkPopTop : "ទីážáž¶áŸ†áž„ážáž¶áž„លើ",
+
+DlnLnkMsgNoUrl : "សូមសរសáŸážš អាសáŸáž™ážŠáŸ’ឋាន URL",
+DlnLnkMsgNoEMail : "សូមសរសáŸážš អាសáŸáž™ážŠáŸ’ឋាន អ៊ីមែល",
+DlnLnkMsgNoAnchor : "សូមជ្រើសរើស យុážáŸ’កា",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "ជ្រើសរើស ពណ៌",
+DlgColorBtnClear : "លប់",
+DlgColorHighlight : "ផាážáŸ‹áž–ណ៌",
+DlgColorSelected : "បានជ្រើសរើស",
+
+// Smiley Dialog
+DlgSmileyTitle : "បញ្ជូលរូបភាព",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "ážáž¼áž¢áž€áŸ’សរពិសáŸážŸ",
+
+// Table Dialog
+DlgTableTitle : "ការកំណážáŸ‹ ážáž¶ážšáž¶áž„",
+DlgTableRows : "ជួរផ្ážáŸáž€",
+DlgTableColumns : "ជួរឈរ",
+DlgTableBorder : "ទំហំស៊ុម",
+DlgTableAlign : "ការកំណážáŸ‹áž‘ីážáž¶áŸ†áž„",
+DlgTableAlignNotSet : "<មិនកំណážáŸ‹>",
+DlgTableAlignLeft : "ážáž¶áž„ឆ្វáŸáž„",
+DlgTableAlignCenter : "កណ្ážáž¶áž›",
+DlgTableAlignRight : "ážáž¶áž„ស្ážáž¶áŸ†",
+DlgTableWidth : "ទទឹង",
+DlgTableWidthPx : "ភីកសែល",
+DlgTableWidthPc : "ភាគរយ",
+DlgTableHeight : "កំពស់",
+DlgTableCellSpace : "គំលាážážŸáŸ‚áž›",
+DlgTableCellPad : "គែមសែល",
+DlgTableCaption : "ចំណងជើង",
+DlgTableSummary : "សáŸáž…ក្ážáž¸ážŸáž„្ážáŸáž”",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "ការកំណážáŸ‹ សែល",
+DlgCellWidth : "ទទឹង",
+DlgCellWidthPx : "ភីកសែល",
+DlgCellWidthPc : "ភាគរយ",
+DlgCellHeight : "កំពស់",
+DlgCellWordWrap : "បង្ហាញអážáŸ’ážáž”ទទាំងអស់",
+DlgCellWordWrapNotSet : "<មិនកំណážáŸ‹>",
+DlgCellWordWrapYes : "បាទ(ចា)",
+DlgCellWordWrapNo : "áž‘áŸ",
+DlgCellHorAlign : "ážáŸ†ážšáž¹áž˜áž•áŸ’ážáŸáž€",
+DlgCellHorAlignNotSet : "<មិនកំណážáŸ‹>",
+DlgCellHorAlignLeft : "ážáž¶áž„ឆ្វáŸáž„",
+DlgCellHorAlignCenter : "កណ្ážáž¶áž›",
+DlgCellHorAlignRight: "Right", //MISSING
+DlgCellVerAlign : "ážáŸ†ážšáž¹áž˜ážˆážš",
+DlgCellVerAlignNotSet : "<មិនកណážáŸ‹>",
+DlgCellVerAlignTop : "ážáž¶áž„លើ",
+DlgCellVerAlignMiddle : "កណ្ážáž¶áž›",
+DlgCellVerAlignBottom : "ážáž¶áž„ក្រោម",
+DlgCellVerAlignBaseline : "បន្ទាážáŸ‹áž‡áž¶áž˜áž¼áž›ážŠáŸ’ឋាន",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "បញ្ជូលជួរផ្ážáŸáž€",
+DlgCellCollSpan : "បញ្ជូលជួរឈរ",
+DlgCellBackColor : "ពណ៌ផ្នែកážáž¶áž„ក្រោម",
+DlgCellBorderColor : "ពណ៌ស៊ុម",
+DlgCellBtnSelect : "ជ្រើសរើស...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "ស្វែងរក",
+DlgFindFindBtn : "ស្វែងរក",
+DlgFindNotFoundMsg : "ពាក្យនáŸáŸ‡ រកមិនឃើញទ០។",
+
+// Replace Dialog
+DlgReplaceTitle : "ជំនួស",
+DlgReplaceFindLbl : "ស្វែងរកអ្វី:",
+DlgReplaceReplaceLbl : "ជំនួសជាមួយ:",
+DlgReplaceCaseChk : "ករណ៉ážáŸ’រូវរក",
+DlgReplaceReplaceBtn : "ជំនួស",
+DlgReplaceReplAllBtn : "ជំនួសទាំងអស់",
+DlgReplaceWordChk : "ážáŸ’រូវពាក្យទាំងអស់",
+
+// Paste Operations / Dialog
+PasteErrorCut : "ការកំណážáŸ‹ážŸáž»ážœážáŸ’ážáž—ាពរបស់កម្មវិធីរុករករបស់លោកអ្នក áž“áŸáŸ‡â€‹áž˜áž·áž“អាចធ្វើកម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘ កាážáŸ‹áž¢ážáŸ’ážáž”ទយកដោយស្វáŸáž™áž”្រវážáŸ’ážáž”ានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនáŸáŸ‡ (Ctrl+X) ។",
+PasteErrorCopy : "ការកំណážáŸ‹ážŸáž»ážœážáŸ’ážáž—ាពរបស់កម្មវិធីរុករករបស់លោកអ្នក áž“áŸáŸ‡â€‹áž˜áž·áž“អាចធ្វើកម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘ ចំលងអážáŸ’ážáž”ទយកដោយស្វáŸáž™áž”្រវážáŸ’ážáž”ានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនáŸáŸ‡ (Ctrl+C)។",
+
+PasteAsText : "ចំលងដាក់អážáŸ’ážáž”ទធម្មážáž¶",
+PasteFromWord : "ចំលងពាក្យពីកម្មវិធី Word",
+
+DlgPasteMsg2 : "សូមចំលងអážáŸ’ážáž”ទទៅដាក់ក្នុងប្រអប់ដូចážáž¶áž„ក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "មិនគិážáž¢áŸ†áž–ីប្រភáŸáž‘ពុម្ភអក្សរ",
+DlgPasteRemoveStyles : "លប់ម៉ូáž",
+
+// Color Picker
+ColorAutomatic : "ស្វáŸáž™áž”្រវážáŸ’áž",
+ColorMoreColors : "ពណ៌ផ្សáŸáž„ទៀáž..",
+
+// Document Properties
+DocProps : "ការកំណážáŸ‹ ឯកសារ",
+
+// Anchor Dialog
+DlgAnchorTitle : "ការកំណážáŸ‹áž…ំណងជើងយុទ្ធážáŸ’កា",
+DlgAnchorName : "ឈ្មោះយុទ្ធážáŸ’កា",
+DlgAnchorErrorName : "សូមសរសáŸážš ឈ្មោះយុទ្ធážáŸ’កា",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "គ្មានក្នុងវចនានុក្រម",
+DlgSpellChangeTo : "ផ្លាស់ប្ážáž¼ážšáž‘ៅ",
+DlgSpellBtnIgnore : "មិនផ្លាស់ប្ážáž¼ážš",
+DlgSpellBtnIgnoreAll : "មិនផ្លាស់ប្ážáž¼ážš ទាំងអស់",
+DlgSpellBtnReplace : "ជំនួស",
+DlgSpellBtnReplaceAll : "ជំនួសទាំងអស់",
+DlgSpellBtnUndo : "សារឡើងវិញ",
+DlgSpellNoSuggestions : "- គ្មានសំណើរ -",
+DlgSpellProgress : "កំពុងពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ...",
+DlgSpellNoMispell : "ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: គ្មានកំហុស",
+DlgSpellNoChanges : "ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: ពុំមានផ្លាស់ប្ážáž¼ážš",
+DlgSpellOneChange : "ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: ពាក្យមួយážáŸ’រូចបានផ្លាស់ប្ážáž¼ážš",
+DlgSpellManyChanges : "ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្ážáž¼ážš",
+
+IeSpellDownload : "ពុំមានកម្មវិធីពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ ។ ážáž¾áž…ង់ទាញយកពីណា?",
+
+// Button Dialog
+DlgButtonText : "អážáŸ’ážáž”áž‘(ážáŸ†áž›áŸƒ)",
+DlgButtonType : "ប្រភáŸáž‘",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "ឈ្មោះ",
+DlgCheckboxValue : "ážáŸ†áž›áŸƒ",
+DlgCheckboxSelected : "បានជ្រើសរើស",
+
+// Form Dialog
+DlgFormName : "ឈ្មោះ",
+DlgFormAction : "សកម្មភាព",
+DlgFormMethod : "វិធី",
+
+// Select Field Dialog
+DlgSelectName : "ឈ្មោះ",
+DlgSelectValue : "ážáŸ†áž›áŸƒ",
+DlgSelectSize : "ទំហំ",
+DlgSelectLines : "បន្ទាážáŸ‹",
+DlgSelectChkMulti : "អនុញ្ញាážáž¢áŸ„យជ្រើសរើសច្រើន",
+DlgSelectOpAvail : "ការកំណážáŸ‹áž‡áŸ’រើសរើស ដែលអាចកំណážáŸ‹áž”ាន",
+DlgSelectOpText : "ពាក្យ",
+DlgSelectOpValue : "ážáŸ†áž›áŸƒ",
+DlgSelectBtnAdd : "បន្ážáŸ‚ម",
+DlgSelectBtnModify : "ផ្លាស់ប្ážáž¼ážš",
+DlgSelectBtnUp : "លើ",
+DlgSelectBtnDown : "ក្រោម",
+DlgSelectBtnSetValue : "Set as selected value", //MISSING
+DlgSelectBtnDelete : "លប់",
+
+// Textarea Dialog
+DlgTextareaName : "ឈ្មោះ",
+DlgTextareaCols : "ជូរឈរ",
+DlgTextareaRows : "ជូរផ្ážáŸáž€",
+
+// Text Field Dialog
+DlgTextName : "ឈ្មោះ",
+DlgTextValue : "ážáŸ†áž›áŸƒ",
+DlgTextCharWidth : "ទទឹង អក្សរ",
+DlgTextMaxChars : "អក្សរអážáž·áž”រិមា",
+DlgTextType : "ប្រភáŸáž‘",
+DlgTextTypeText : "ពាក្យ",
+DlgTextTypePass : "ពាក្យសំងាážáŸ‹",
+
+// Hidden Field Dialog
+DlgHiddenName : "ឈ្មោះ",
+DlgHiddenValue : "ážáŸ†áž›áŸƒ",
+
+// Bulleted List Dialog
+BulletedListProp : "កំណážáŸ‹áž”ញ្ជីរង្វង់",
+NumberedListProp : "កំណážáŸ‹áž”ញ្áŸáž‡áž¸áž›áŸáž",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "ប្រភáŸáž‘",
+DlgLstTypeCircle : "រង្វង់",
+DlgLstTypeDisc : "Disc",
+DlgLstTypeSquare : "ការáŸ",
+DlgLstTypeNumbers : "áž›áŸáž(1, 2, 3)",
+DlgLstTypeLCase : "អក្សរážáž¼áž…(a, b, c)",
+DlgLstTypeUCase : "អក្សរធំ(A, B, C)",
+DlgLstTypeSRoman : "អក្សរឡាážáž¶áŸ†áž„ážáž¼áž…(i, ii, iii)",
+DlgLstTypeLRoman : "អក្សរឡាážáž¶áŸ†áž„ធំ(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "ទូទៅ",
+DlgDocBackTab : "ផ្នែកážáž¶áž„ក្រោយ",
+DlgDocColorsTab : "ទំពáŸážšâ€‹áž“áž·áž„ ស៊ុម",
+DlgDocMetaTab : "ទិន្ននáŸáž™áž˜áŸ",
+
+DlgDocPageTitle : "ចំណងជើងទំពáŸážš",
+DlgDocLangDir : "ទិសដៅសរសáŸážšáž—ាសា",
+DlgDocLangDirLTR : "ពីឆ្វáŸáž„ទៅស្ដាំ(LTR)",
+DlgDocLangDirRTL : "ពីស្ដាំទៅឆ្វáŸáž„(RTL)",
+DlgDocLangCode : "áž›áŸážáž€áž¼ážáž—ាសា",
+DlgDocCharSet : "កំណážáŸ‹áž›áŸážáž€áž¼ážáž—ាសា",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "កំណážáŸ‹áž›áŸážáž€áž¼ážáž—ាសាផ្សáŸáž„ទៀáž",
+
+DlgDocDocType : "ប្រភáŸáž‘ក្បាលទំពáŸážš",
+DlgDocDocTypeOther : "ប្រភáŸáž‘ក្បាលទំពáŸážšáž•áŸ’សáŸáž„ទៀáž",
+DlgDocIncXHTML : "បញ្ជូល XHTML",
+DlgDocBgColor : "ពណ៌ážáž¶áž„ក្រោម",
+DlgDocBgImage : "URL របស់រូបភាពážáž¶áž„ក្រោម",
+DlgDocBgNoScroll : "ទំពáŸážšáž€áŸ’រោមមិនប្ážáž¼ážš",
+DlgDocCText : "អážáŸ’ážáž”áž‘",
+DlgDocCLink : "ឈ្នាប់",
+DlgDocCVisited : "ឈ្នាប់មើលហើយ",
+DlgDocCActive : "ឈ្នាប់កំពុងមើល",
+DlgDocMargins : "ស៊ុមទំពáŸážš",
+DlgDocMaTop : "លើ",
+DlgDocMaLeft : "ឆ្វáŸáž„",
+DlgDocMaRight : "ស្ដាំ",
+DlgDocMaBottom : "ក្រោម",
+DlgDocMeIndex : "ពាក្យនៅក្នុងឯកសារ (ផ្ážáž¶áž…់ពីគ្នាដោយក្បៀស)",
+DlgDocMeDescr : "សáŸáž…ក្ážáž¸áž¢ážáŸ’ážáž¶áž’ិប្បាយអំពីឯកសារ",
+DlgDocMeAuthor : "អ្នកនិពន្ធ",
+DlgDocMeCopy : "រក្សាសិទ្ធិáŸ",
+DlgDocPreview : "មើលសាកល្បង",
+
+// Templates Dialog
+Templates : "ឯកសារគំរូ",
+DlgTemplatesTitle : "ឯកសារគំរូ របស់អážáŸ’ážáž“áŸáž™",
+DlgTemplatesSelMsg : "សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘<br>(អážáŸ’ážáž”ទនឹងបាážáŸ‹áž”ង់):",
+DlgTemplatesLoading : "កំពុងអានបញ្ជីឯកសារគំរូ ។ សូមរងចាំ...",
+DlgTemplatesNoTpl : "(ពុំមានឯកសារគំរូážáŸ’រូវបានកំណážáŸ‹)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "អំពី",
+DlgAboutBrowserInfoTab : "ព៌ážáž˜áž¶áž“កម្មវិធីរុករក",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "ជំនាន់",
+DlgAboutInfo : "សំរាប់ព៌ážáž˜áž¶áž“ផ្សáŸáž„ទៀហសូមទាក់ទង",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ko.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ko.js
new file mode 100644
index 0000000..a5d2e0c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ko.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Korean language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "툴바 ê°ì¶”기",
+ToolbarExpand : "툴바 ë³´ì´ê¸°",
+
+// Toolbar Items and Context Menu
+Save : "저장하기",
+NewPage : "새 문서",
+Preview : "미리보기",
+Cut : "잘ë¼ë‚´ê¸°",
+Copy : "복사하기",
+Paste : "붙여넣기",
+PasteText : "í…스트로 붙여넣기",
+PasteWord : "MS Word 형ì‹ì—ì„œ 붙여넣기",
+Print : "ì¸ì‡„하기",
+SelectAll : "ì „ì²´ì„ íƒ",
+RemoveFormat : "í¬ë§· 지우기",
+InsertLinkLbl : "ë§í¬",
+InsertLink : "ë§í¬ 삽입/변경",
+RemoveLink : "ë§í¬ ì‚­ì œ",
+VisitLink : "Open Link", //MISSING
+Anchor : "책갈피 삽입/변경",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "ì´ë¯¸ì§€",
+InsertImage : "ì´ë¯¸ì§€ 삽입/변경",
+InsertFlashLbl : "플래쉬",
+InsertFlash : "플래쉬 삽입/변경",
+InsertTableLbl : "표",
+InsertTable : "표 삽입/변경",
+InsertLineLbl : "수í‰ì„ ",
+InsertLine : "수í‰ì„  삽입",
+InsertSpecialCharLbl: "íŠ¹ìˆ˜ë¬¸ìž ì‚½ìž…",
+InsertSpecialChar : "íŠ¹ìˆ˜ë¬¸ìž ì‚½ìž…",
+InsertSmileyLbl : "ì•„ì´ì½˜",
+InsertSmiley : "ì•„ì´ì½˜ 삽입",
+About : "FCKeditorì— ëŒ€í•˜ì—¬",
+Bold : "진하게",
+Italic : "ì´í…”릭",
+Underline : "밑줄",
+StrikeThrough : "취소선",
+Subscript : "아래 첨ìž",
+Superscript : "위 첨ìž",
+LeftJustify : "왼쪽 정렬",
+CenterJustify : "ê°€ìš´ë° ì •ë ¬",
+RightJustify : "오른쪽 정렬",
+BlockJustify : "양쪽 맞춤",
+DecreaseIndent : "내어쓰기",
+IncreaseIndent : "들여쓰기",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "취소",
+Redo : "재실행",
+NumberedListLbl : "순서있는 목ë¡",
+NumberedList : "순서있는 목ë¡",
+BulletedListLbl : "순서없는 목ë¡",
+BulletedList : "순서없는 목ë¡",
+ShowTableBorders : "í‘œ í…Œë‘리 보기",
+ShowDetails : "문서기호 보기",
+Style : "스타ì¼",
+FontFormat : "í¬ë§·",
+Font : "í°íŠ¸",
+FontSize : "ê¸€ìž í¬ê¸°",
+TextColor : "ê¸€ìž ìƒ‰ìƒ",
+BGColor : "ë°°ê²½ 색ìƒ",
+Source : "소스",
+Find : "찾기",
+Replace : "바꾸기",
+SpellCheck : "ì² ìžê²€ì‚¬",
+UniversalKeyboard : "다국어 입력기",
+PageBreakLbl : "Page Break", //MISSING
+PageBreak : "Insert Page Break", //MISSING
+
+Form : "í¼",
+Checkbox : "ì²´í¬ë°•ìŠ¤",
+RadioButton : "ë¼ë””오버튼",
+TextField : "입력필드",
+Textarea : "ìž…ë ¥ì˜ì—­",
+HiddenField : "숨김필드",
+Button : "버튼",
+SelectionField : "펼침목ë¡",
+ImageButton : "ì´ë¯¸ì§€ë²„튼",
+
+FitWindow : "ì—디터 최대화",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "ë§í¬ 수정",
+CellCM : "셀/칸(Cell)",
+RowCM : "í–‰(Row)",
+ColumnCM : "ì—´(Column)",
+InsertRowAfter : "ë’¤ì— í–‰ 삽입",
+InsertRowBefore : "ì•žì— í–‰ 삽입",
+DeleteRows : "가로줄 삭제",
+InsertColumnAfter : "ë’¤ì— ì—´ 삽입",
+InsertColumnBefore : "ì•žì— ì—´ 삽입",
+DeleteColumns : "세로줄 삭제",
+InsertCellAfter : "ë’¤ì— ì…€/칸 삽입",
+InsertCellBefore : "ì•žì— ì…€/칸 삽입",
+DeleteCells : "셀 삭제",
+MergeCells : "셀 합치기",
+MergeRight : "오른쪽 뭉치기",
+MergeDown : "왼쪽 뭉치기",
+HorizontalSplitCell : "ìˆ˜í‰ ë‚˜ëˆ„ê¸°",
+VerticalSplitCell : "ìˆ˜ì§ ë‚˜ëˆ„ê¸°",
+TableDelete : "표 삭제",
+CellProperties : "ì…€ ì†ì„±",
+TableProperties : "í‘œ ì†ì„±",
+ImageProperties : "ì´ë¯¸ì§€ ì†ì„±",
+FlashProperties : "플래쉬 ì†ì„±",
+
+AnchorProp : "책갈피 ì†ì„±",
+ButtonProp : "버튼 ì†ì„±",
+CheckboxProp : "ì²´í¬ë°•ìŠ¤ ì†ì„±",
+HiddenFieldProp : "숨김필드 ì†ì„±",
+RadioButtonProp : "ë¼ë””오버튼 ì†ì„±",
+ImageButtonProp : "ì´ë¯¸ì§€ë²„튼 ì†ì„±",
+TextFieldProp : "입력필드 ì†ì„±",
+SelectionFieldProp : "íŽ¼ì¹¨ëª©ë¡ ì†ì„±",
+TextareaProp : "ìž…ë ¥ì˜ì—­ ì†ì„±",
+FormProp : "í¼ ì†ì„±",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML 처리중. 잠시만 기다려주십시요.",
+Done : "완료",
+PasteWordConfirm : "붙여넣기 í•  í…스트는 MS Wordì—ì„œ 복사한 것입니다. 붙여넣기 ì „ì— MS Word í¬ë©§ì„ 삭제하시겠습니까?",
+NotCompatiblePaste : "ì´ ëª…ë ¹ì€ ì¸í„°ë„·ìµìŠ¤í”Œë¡œëŸ¬ 5.5 버전 ì´ìƒì—서만 ìž‘ë™í•©ë‹ˆë‹¤. í¬ë©§ì„ 삭제하지 ì•Šê³  붙여넣기 하시겠습니까?",
+UnknownToolbarItem : "알수없는 툴바입니다. : \"%1\"",
+UnknownCommand : "알수없는 기능입니다. : \"%1\"",
+NotImplemented : "ê¸°ëŠ¥ì´ ì‹¤í–‰ë˜ì§€ 않았습니다.",
+UnknownToolbarSet : "툴바 ì„¤ì •ì´ ì—†ìŠµë‹ˆë‹¤. : \"%1\"",
+NoActiveX : "ë¸ŒëŸ¬ìš°ì €ì˜ ë³´ì•ˆ 설정으로 ì¸í•´ 몇몇 ê¸°ëŠ¥ì˜ ìž‘ë™ì— 장애가 ìžˆì„ ìˆ˜ 있습니다. \"액티브-액스 기능과 플러그 ì¸\" ì˜µì…˜ì„ í—ˆìš©í•˜ì—¬ 주시지 않으면 오류가 ë°œìƒí•  수 있습니다.",
+BrowseServerBlocked : "브러우저 요소가 열리지 않습니다. íŒì—…차단 ì„¤ì •ì´ êº¼ì ¸ìžˆëŠ”ì§€ 확ì¸í•˜ì—¬ 주십시오.",
+DialogBlocked : "윈ë„ìš° ëŒ€í™”ì°½ì„ ì—´ 수 없습니다. íŒì—…차단 ì„¤ì •ì´ êº¼ì ¸ìžˆëŠ”ì§€ 확ì¸í•˜ì—¬ 주십시오.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "예",
+DlgBtnCancel : "아니오",
+DlgBtnClose : "닫기",
+DlgBtnBrowseServer : "서버 보기",
+DlgAdvancedTag : "ìžì„¸ížˆ",
+DlgOpOther : "<기타>",
+DlgInfoTab : "ì •ë³´",
+DlgAlertUrl : "URLì„ ìž…ë ¥í•˜ì‹­ì‹œìš”",
+
+// General Dialogs Labels
+DlgGenNotSet : "<설정ë˜ì§€ ì•ŠìŒ>",
+DlgGenId : "ID",
+DlgGenLangDir : "쓰기 방향",
+DlgGenLangDirLtr : "왼쪽ì—ì„œ 오른쪽 (LTR)",
+DlgGenLangDirRtl : "오른쪽ì—ì„œ 왼쪽 (RTL)",
+DlgGenLangCode : "언어 코드",
+DlgGenAccessKey : "엑세스 키",
+DlgGenName : "Name",
+DlgGenTabIndex : "탭 순서",
+DlgGenLongDescr : "URL 설명",
+DlgGenClass : "Stylesheet Classes",
+DlgGenTitle : "Advisory Title",
+DlgGenContType : "Advisory Content Type",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "ì´ë¯¸ì§€ 설정",
+DlgImgInfoTab : "ì´ë¯¸ì§€ ì •ë³´",
+DlgImgBtnUpload : "서버로 전송",
+DlgImgURL : "URL",
+DlgImgUpload : "업로드",
+DlgImgAlt : "ì´ë¯¸ì§€ 설명",
+DlgImgWidth : "너비",
+DlgImgHeight : "높ì´",
+DlgImgLockRatio : "비율 유지",
+DlgBtnResetSize : "ì›ëž˜ í¬ê¸°ë¡œ",
+DlgImgBorder : "í…Œë‘리",
+DlgImgHSpace : "수í‰ì—¬ë°±",
+DlgImgVSpace : "수ì§ì—¬ë°±",
+DlgImgAlign : "ì •ë ¬",
+DlgImgAlignLeft : "왼쪽",
+DlgImgAlignAbsBottom: "줄아래(Abs Bottom)",
+DlgImgAlignAbsMiddle: "줄중간(Abs Middle)",
+DlgImgAlignBaseline : "기준선",
+DlgImgAlignBottom : "아래",
+DlgImgAlignMiddle : "중간",
+DlgImgAlignRight : "오른쪽",
+DlgImgAlignTextTop : "글ìžìƒë‹¨",
+DlgImgAlignTop : "위",
+DlgImgPreview : "미리보기",
+DlgImgAlertUrl : "ì´ë¯¸ì§€ URLì„ ìž…ë ¥í•˜ì‹­ì‹œìš”",
+DlgImgLinkTab : "ë§í¬",
+
+// Flash Dialog
+DlgFlashTitle : "플래쉬 등ë¡ì •ë³´",
+DlgFlashChkPlay : "ìžë™ìž¬ìƒ",
+DlgFlashChkLoop : "반복",
+DlgFlashChkMenu : "플래쉬메뉴 가능",
+DlgFlashScale : "ì˜ì—­",
+DlgFlashScaleAll : "모ë‘보기",
+DlgFlashScaleNoBorder : "경계선없ìŒ",
+DlgFlashScaleFit : "ì˜ì—­ìžë™ì¡°ì ˆ",
+
+// Link Dialog
+DlgLnkWindowTitle : "ë§í¬",
+DlgLnkInfoTab : "ë§í¬ ì •ë³´",
+DlgLnkTargetTab : "타겟",
+
+DlgLnkType : "ë§í¬ 종류",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "책갈피",
+DlgLnkTypeEMail : "ì´ë©”ì¼",
+DlgLnkProto : "프로토콜",
+DlgLnkProtoOther : "<기타>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "책갈피 ì„ íƒ",
+DlgLnkAnchorByName : "책갈피 ì´ë¦„",
+DlgLnkAnchorById : "책갈피 ID",
+DlgLnkNoAnchors : "(ë¬¸ì„œì— ì±…ê°ˆí”¼ê°€ 없습니다.)",
+DlgLnkEMail : "ì´ë©”ì¼ ì£¼ì†Œ",
+DlgLnkEMailSubject : "제목",
+DlgLnkEMailBody : "ë‚´ìš©",
+DlgLnkUpload : "업로드",
+DlgLnkBtnUpload : "서버로 전송",
+
+DlgLnkTarget : "타겟",
+DlgLnkTargetFrame : "<프레임>",
+DlgLnkTargetPopup : "<íŒì—…ì°½>",
+DlgLnkTargetBlank : "새 창 (_blank)",
+DlgLnkTargetParent : "부모 창 (_parent)",
+DlgLnkTargetSelf : "현재 창 (_self)",
+DlgLnkTargetTop : "최 ìƒìœ„ ì°½ (_top)",
+DlgLnkTargetFrameName : "타겟 프레임 ì´ë¦„",
+DlgLnkPopWinName : "íŒì—…ì°½ ì´ë¦„",
+DlgLnkPopWinFeat : "íŒì—…ì°½ 설정",
+DlgLnkPopResize : "í¬ê¸°ì¡°ì •",
+DlgLnkPopLocation : "주소표시줄",
+DlgLnkPopMenu : "메뉴바",
+DlgLnkPopScroll : "스í¬ë¡¤ë°”",
+DlgLnkPopStatus : "ìƒíƒœë°”",
+DlgLnkPopToolbar : "툴바",
+DlgLnkPopFullScrn : "전체화면 (IE)",
+DlgLnkPopDependent : "Dependent (Netscape)",
+DlgLnkPopWidth : "너비",
+DlgLnkPopHeight : "높ì´",
+DlgLnkPopLeft : "왼쪽 위치",
+DlgLnkPopTop : "윗쪽 위치",
+
+DlnLnkMsgNoUrl : "ë§í¬ URLì„ ìž…ë ¥í•˜ì‹­ì‹œìš”.",
+DlnLnkMsgNoEMail : "ì´ë©”ì¼ì£¼ì†Œë¥¼ 입력하십시요.",
+DlnLnkMsgNoAnchor : "ì±…ê°ˆí”¼ëª…ì„ ìž…ë ¥í•˜ì‹­ì‹œìš”.",
+DlnLnkMsgInvPopName : "íŒì—…ì°½ì˜ íƒ€ì´í‹€ì€ ê³µë°±ì„ í—ˆìš©í•˜ì§€ 않습니다.",
+
+// Color Dialog
+DlgColorTitle : "ìƒ‰ìƒ ì„ íƒ",
+DlgColorBtnClear : "지우기",
+DlgColorHighlight : "현재",
+DlgColorSelected : "ì„ íƒë¨",
+
+// Smiley Dialog
+DlgSmileyTitle : "ì•„ì´ì½˜ 삽입",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "íŠ¹ìˆ˜ë¬¸ìž ì„ íƒ",
+
+// Table Dialog
+DlgTableTitle : "표 설정",
+DlgTableRows : "가로줄",
+DlgTableColumns : "세로줄",
+DlgTableBorder : "í…Œë‘리 í¬ê¸°",
+DlgTableAlign : "ì •ë ¬",
+DlgTableAlignNotSet : "<설정ë˜ì§€ ì•ŠìŒ>",
+DlgTableAlignLeft : "왼쪽",
+DlgTableAlignCenter : "가운ë°",
+DlgTableAlignRight : "오른쪽",
+DlgTableWidth : "너비",
+DlgTableWidthPx : "픽셀",
+DlgTableWidthPc : "í¼ì„¼íŠ¸",
+DlgTableHeight : "높ì´",
+DlgTableCellSpace : "셀 간격",
+DlgTableCellPad : "셀 여백",
+DlgTableCaption : "캡션",
+DlgTableSummary : "Summary", //MISSING
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "셀 설정",
+DlgCellWidth : "너비",
+DlgCellWidthPx : "픽셀",
+DlgCellWidthPc : "í¼ì„¼íŠ¸",
+DlgCellHeight : "높ì´",
+DlgCellWordWrap : "워드랩",
+DlgCellWordWrapNotSet : "<설정ë˜ì§€ ì•ŠìŒ>",
+DlgCellWordWrapYes : "예",
+DlgCellWordWrapNo : "아니오",
+DlgCellHorAlign : "ìˆ˜í‰ ì •ë ¬",
+DlgCellHorAlignNotSet : "<설정ë˜ì§€ ì•ŠìŒ>",
+DlgCellHorAlignLeft : "왼쪽",
+DlgCellHorAlignCenter : "가운ë°",
+DlgCellHorAlignRight: "오른쪽",
+DlgCellVerAlign : "ìˆ˜ì§ ì •ë ¬",
+DlgCellVerAlignNotSet : "<설정ë˜ì§€ ì•ŠìŒ>",
+DlgCellVerAlignTop : "위",
+DlgCellVerAlignMiddle : "중간",
+DlgCellVerAlignBottom : "아래",
+DlgCellVerAlignBaseline : "기준선",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "세로 합치기",
+DlgCellCollSpan : "가로 합치기",
+DlgCellBackColor : "ë°°ê²½ 색ìƒ",
+DlgCellBorderColor : "í…Œë‘리 색ìƒ",
+DlgCellBtnSelect : "ì„ íƒ",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "찾기 & 바꾸기",
+
+// Find Dialog
+DlgFindTitle : "찾기",
+DlgFindFindBtn : "찾기",
+DlgFindNotFoundMsg : "문ìžì—´ì„ ì°¾ì„ ìˆ˜ 없습니다.",
+
+// Replace Dialog
+DlgReplaceTitle : "바꾸기",
+DlgReplaceFindLbl : "ì°¾ì„ ë¬¸ìžì—´:",
+DlgReplaceReplaceLbl : "바꿀 문ìžì—´:",
+DlgReplaceCaseChk : "ëŒ€ì†Œë¬¸ìž êµ¬ë¶„",
+DlgReplaceReplaceBtn : "바꾸기",
+DlgReplaceReplAllBtn : "ëª¨ë‘ ë°”ê¾¸ê¸°",
+DlgReplaceWordChk : "온전한 단어",
+
+// Paste Operations / Dialog
+PasteErrorCut : "브ë¼ìš°ì €ì˜ ë³´ì•ˆì„¤ì •ë•Œë¬¸ì— ìž˜ë¼ë‚´ê¸° ê¸°ëŠ¥ì„ ì‹¤í–‰í•  수 없습니다. 키보드 ëª…ë ¹ì„ ì‚¬ìš©í•˜ì‹­ì‹œìš”. (Ctrl+X).",
+PasteErrorCopy : "브ë¼ìš°ì €ì˜ ë³´ì•ˆì„¤ì •ë•Œë¬¸ì— ë³µì‚¬í•˜ê¸° ê¸°ëŠ¥ì„ ì‹¤í–‰í•  수 없습니다. 키보드 ëª…ë ¹ì„ ì‚¬ìš©í•˜ì‹­ì‹œìš”. (Ctrl+C).",
+
+PasteAsText : "í…스트로 붙여넣기",
+PasteFromWord : "MS Word 형ì‹ì—ì„œ 붙여넣기",
+
+DlgPasteMsg2 : "í‚¤ë³´ë“œì˜ (<STRONG>Ctrl+V</STRONG>) 를 ì´ìš©í•´ì„œ ìƒìžì•ˆì— 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.",
+DlgPasteSec : "브러우저 보안 설정으로 ì¸í•´, í´ë¦½ë³´ë“œì˜ ìžë£Œë¥¼ ì§ì ‘ 접근할 수 없습니다. ì´ ì°½ì— ë‹¤ì‹œ 붙여넣기 하십시오.",
+DlgPasteIgnoreFont : "í°íŠ¸ 설정 무시",
+DlgPasteRemoveStyles : "ìŠ¤íƒ€ì¼ ì •ì˜ ì œê±°",
+
+// Color Picker
+ColorAutomatic : "기본색ìƒ",
+ColorMoreColors : "색ìƒì„ íƒ...",
+
+// Document Properties
+DocProps : "문서 ì†ì„±",
+
+// Anchor Dialog
+DlgAnchorTitle : "책갈피 ì†ì„±",
+DlgAnchorName : "책갈피 ì´ë¦„",
+DlgAnchorErrorName : "책갈피 ì´ë¦„ì„ ìž…ë ¥í•˜ì‹­ì‹œìš”.",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "ì‚¬ì „ì— ì—†ëŠ” 단어",
+DlgSpellChangeTo : "변경할 단어",
+DlgSpellBtnIgnore : "건너뜀",
+DlgSpellBtnIgnoreAll : "ëª¨ë‘ ê±´ë„ˆëœ€",
+DlgSpellBtnReplace : "변경",
+DlgSpellBtnReplaceAll : "ëª¨ë‘ ë³€ê²½",
+DlgSpellBtnUndo : "취소",
+DlgSpellNoSuggestions : "- 추천단어 ì—†ìŒ -",
+DlgSpellProgress : "ì² ìžê²€ì‚¬ë¥¼ 진행중입니다...",
+DlgSpellNoMispell : "ì² ìžê²€ì‚¬ 완료: ìž˜ëª»ëœ ì² ìžê°€ 없습니다.",
+DlgSpellNoChanges : "ì² ìžê²€ì‚¬ 완료: ë³€ê²½ëœ ë‹¨ì–´ê°€ 없습니다.",
+DlgSpellOneChange : "ì² ìžê²€ì‚¬ 완료: 단어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤.",
+DlgSpellManyChanges : "ì² ìžê²€ì‚¬ 완료: %1 단어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤.",
+
+IeSpellDownload : "ì² ìž ê²€ì‚¬ê¸°ê°€ 철치ë˜ì§€ 않았습니다. 지금 다운로드하시겠습니까?",
+
+// Button Dialog
+DlgButtonText : "버튼글ìž(ê°’)",
+DlgButtonType : "버튼종류",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "ì´ë¦„",
+DlgCheckboxValue : "ê°’",
+DlgCheckboxSelected : "ì„ íƒë¨",
+
+// Form Dialog
+DlgFormName : "í¼ì´ë¦„",
+DlgFormAction : "실행경로(Action)",
+DlgFormMethod : "방법(Method)",
+
+// Select Field Dialog
+DlgSelectName : "ì´ë¦„",
+DlgSelectValue : "ê°’",
+DlgSelectSize : "세로í¬ê¸°",
+DlgSelectLines : "줄",
+DlgSelectChkMulti : "여러항목 ì„ íƒ í—ˆìš©",
+DlgSelectOpAvail : "ì„ íƒì˜µì…˜",
+DlgSelectOpText : "ì´ë¦„",
+DlgSelectOpValue : "ê°’",
+DlgSelectBtnAdd : "추가",
+DlgSelectBtnModify : "변경",
+DlgSelectBtnUp : "위로",
+DlgSelectBtnDown : "아래로",
+DlgSelectBtnSetValue : "ì„ íƒëœê²ƒìœ¼ë¡œ 설정",
+DlgSelectBtnDelete : "삭제",
+
+// Textarea Dialog
+DlgTextareaName : "ì´ë¦„",
+DlgTextareaCols : "칸수",
+DlgTextareaRows : "줄수",
+
+// Text Field Dialog
+DlgTextName : "ì´ë¦„",
+DlgTextValue : "ê°’",
+DlgTextCharWidth : "ê¸€ìž ë„ˆë¹„",
+DlgTextMaxChars : "최대 글ìžìˆ˜",
+DlgTextType : "종류",
+DlgTextTypeText : "문ìžì—´",
+DlgTextTypePass : "비밀번호",
+
+// Hidden Field Dialog
+DlgHiddenName : "ì´ë¦„",
+DlgHiddenValue : "ê°’",
+
+// Bulleted List Dialog
+BulletedListProp : "순서없는 ëª©ë¡ ì†ì„±",
+NumberedListProp : "순서있는 ëª©ë¡ ì†ì„±",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "종류",
+DlgLstTypeCircle : "ì›(Circle)",
+DlgLstTypeDisc : "Disc", //MISSING
+DlgLstTypeSquare : "네모ì (Square)",
+DlgLstTypeNumbers : "번호 (1, 2, 3)",
+DlgLstTypeLCase : "ì†Œë¬¸ìž (a, b, c)",
+DlgLstTypeUCase : "ëŒ€ë¬¸ìž (A, B, C)",
+DlgLstTypeSRoman : "ë¡œë§ˆìž ìˆ˜ë¬¸ìž (i, ii, iii)",
+DlgLstTypeLRoman : "ë¡œë§ˆìž ëŒ€ë¬¸ìž (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "ì¼ë°˜",
+DlgDocBackTab : "ë°°ê²½",
+DlgDocColorsTab : "ìƒ‰ìƒ ë° ì—¬ë°±",
+DlgDocMetaTab : "메타ë°ì´í„°",
+
+DlgDocPageTitle : "페ì´ì§€ëª…",
+DlgDocLangDir : "ë¬¸ìž ì“°ê¸°ë°©í–¥",
+DlgDocLangDirLTR : "왼쪽ì—ì„œ 오른쪽 (LTR)",
+DlgDocLangDirRTL : "오른쪽ì—ì„œ 왼쪽 (RTL)",
+DlgDocLangCode : "언어코드",
+DlgDocCharSet : "ìºë¦­í„°ì…‹ ì¸ì½”딩",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "다른 ìºë¦­í„°ì…‹ ì¸ì½”딩",
+
+DlgDocDocType : "문서 헤드",
+DlgDocDocTypeOther : "다른 문서헤드",
+DlgDocIncXHTML : "XHTML ë¬¸ì„œì •ì˜ í¬í•¨",
+DlgDocBgColor : "배경색ìƒ",
+DlgDocBgImage : "ë°°ê²½ì´ë¯¸ì§€ URL",
+DlgDocBgNoScroll : "스í¬ë¡¤ë˜ì§€ì•ŠëŠ” ë°°ê²½",
+DlgDocCText : "í…스트",
+DlgDocCLink : "ë§í¬",
+DlgDocCVisited : "방문한 ë§í¬(Visited)",
+DlgDocCActive : "í™œì„±í™”ëœ ë§í¬(Active)",
+DlgDocMargins : "페ì´ì§€ 여백",
+DlgDocMaTop : "위",
+DlgDocMaLeft : "왼쪽",
+DlgDocMaRight : "오른쪽",
+DlgDocMaBottom : "아래",
+DlgDocMeIndex : "문서 키워드 (콤마로 구분)",
+DlgDocMeDescr : "문서 설명",
+DlgDocMeAuthor : "작성ìž",
+DlgDocMeCopy : "저작권",
+DlgDocPreview : "미리보기",
+
+// Templates Dialog
+Templates : "템플릿",
+DlgTemplatesTitle : "내용 템플릿",
+DlgTemplatesSelMsg : "ì—디터ì—ì„œ 사용할 í…œí”Œë¦¿ì„ ì„ íƒí•˜ì‹­ì‹œìš”.<br>(지금까지 ìž‘ì„±ëœ ë‚´ìš©ì€ ì‚¬ë¼ì§‘니다.):",
+DlgTemplatesLoading : "템플릿 목ë¡ì„ 불러오는중입니다. 잠시만 기다려주십시요.",
+DlgTemplatesNoTpl : "(í…œí”Œë¦¿ì´ ì—†ìŠµë‹ˆë‹¤.)",
+DlgTemplatesReplace : "현재 내용 바꾸기",
+
+// About Dialog
+DlgAboutAboutTab : "About",
+DlgAboutBrowserInfoTab : "브ë¼ìš°ì € ì •ë³´",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "버전",
+DlgAboutInfo : "ë” ë§Žì€ ì •ë³´ë¥¼ 보시려면 ë‹¤ìŒ ì‚¬ì´íŠ¸ë¡œ 가십시오.",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lt.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lt.js
new file mode 100644
index 0000000..3b9e6d6
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lt.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Lithuanian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Sutraukti mygtukų juostą",
+ToolbarExpand : "Išplėsti mygtukų juostą",
+
+// Toolbar Items and Context Menu
+Save : "IÅ¡saugoti",
+NewPage : "Naujas puslapis",
+Preview : "Peržiūra",
+Cut : "IÅ¡kirpti",
+Copy : "Kopijuoti",
+Paste : "Įdėti",
+PasteText : "Įdėti kaip gryną tekstą",
+PasteWord : "Įdėti iš Word",
+Print : "Spausdinti",
+SelectAll : "Pažymėti viską",
+RemoveFormat : "Panaikinti formatÄ…",
+InsertLinkLbl : "Nuoroda",
+InsertLink : "Įterpti/taisyti nuorodą",
+RemoveLink : "Panaikinti nuorodÄ…",
+VisitLink : "Open Link", //MISSING
+Anchor : "Įterpti/modifikuoti žymę",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Vaizdas",
+InsertImage : "Įterpti/taisyti vaizdą",
+InsertFlashLbl : "Flash",
+InsertFlash : "Įterpti/taisyti Flash",
+InsertTableLbl : "LentelÄ—",
+InsertTable : "Įterpti/taisyti lentelę",
+InsertLineLbl : "Linija",
+InsertLine : "Įterpti horizontalią liniją",
+InsertSpecialCharLbl: "Spec. simbolis",
+InsertSpecialChar : "Įterpti specialų simbolį",
+InsertSmileyLbl : "Veideliai",
+InsertSmiley : "Įterpti veidelį",
+About : "Apie FCKeditor",
+Bold : "Pusjuodis",
+Italic : "Kursyvas",
+Underline : "Pabrauktas",
+StrikeThrough : "Perbrauktas",
+Subscript : "Apatinis indeksas",
+Superscript : "Viršutinis indeksas",
+LeftJustify : "Lygiuoti kairÄ™",
+CenterJustify : "Centruoti",
+RightJustify : "Lygiuoti dešinę",
+BlockJustify : "Lygiuoti abi puses",
+DecreaseIndent : "Sumažinti įtrauką",
+IncreaseIndent : "Padidinti įtrauką",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Atšaukti",
+Redo : "Atstatyti",
+NumberedListLbl : "Numeruotas sąrašas",
+NumberedList : "Įterpti/Panaikinti numeruotą sąrašą",
+BulletedListLbl : "Suženklintas sąrašas",
+BulletedList : "Įterpti/Panaikinti suženklintą sąrašą",
+ShowTableBorders : "Rodyti lentelÄ—s rÄ—mus",
+ShowDetails : "Rodyti detales",
+Style : "Stilius",
+FontFormat : "Å rifto formatas",
+Font : "Å riftas",
+FontSize : "Å rifto dydis",
+TextColor : "Teksto spalva",
+BGColor : "Fono spalva",
+Source : "Å altinis",
+Find : "Rasti",
+Replace : "Pakeisti",
+SpellCheck : "Rašybos tikrinimas",
+UniversalKeyboard : "Universali klaviatūra",
+PageBreakLbl : "Puslapių skirtukas",
+PageBreak : "Įterpti puslapių skirtuką",
+
+Form : "Forma",
+Checkbox : "Žymimasis langelis",
+RadioButton : "Žymimoji akutė",
+TextField : "Teksto laukas",
+Textarea : "Teksto sritis",
+HiddenField : "Nerodomas laukas",
+Button : "Mygtukas",
+SelectionField : "Atrankos laukas",
+ImageButton : "Vaizdinis mygtukas",
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Taisyti nuorodÄ…",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Å alinti eilutes",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Å alinti stulpelius",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Å alinti langelius",
+MergeCells : "Sujungti langelius",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Å alinti lentelÄ™",
+CellProperties : "Langelio savybÄ—s",
+TableProperties : "LentelÄ—s savybÄ—s",
+ImageProperties : "Vaizdo savybÄ—s",
+FlashProperties : "Flash savybÄ—s",
+
+AnchorProp : "Žymės savybės",
+ButtonProp : "Mygtuko savybÄ—s",
+CheckboxProp : "Žymimojo langelio savybės",
+HiddenFieldProp : "Nerodomo lauko savybÄ—s",
+RadioButtonProp : "Žymimosios akutės savybės",
+ImageButtonProp : "Vaizdinio mygtuko savybÄ—s",
+TextFieldProp : "Teksto lauko savybÄ—s",
+SelectionFieldProp : "Atrankos lauko savybÄ—s",
+TextareaProp : "Teksto srities savybÄ—s",
+FormProp : "Formos savybÄ—s",
+
+FontFormats : "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Apdorojamas XHTML. Prašome palaukti...",
+Done : "Baigta",
+PasteWordConfirm : "Įdedamas tekstas yra panašus į kopiją iš Word. Ar Jūs norite prieš įdėjimą išvalyti jį?",
+NotCompatiblePaste : "Ši komanda yra prieinama tik per Internet Explorer 5.5 ar aukštesnę versiją. Ar Jūs norite įterpti be valymo?",
+UnknownToolbarItem : "Nežinomas mygtukų juosta elementas \"%1\"",
+UnknownCommand : "Nežinomas komandos vardas \"%1\"",
+NotImplemented : "Komanda nėra įgyvendinta",
+UnknownToolbarSet : "Mygtukų juostos rinkinys \"%1\" neegzistuoja",
+NoActiveX : "Jūsų naršyklės saugumo nuostatos gali riboti kai kurias redaktoriaus savybes. Jūs turite aktyvuoti opciją \"Run ActiveX controls and plug-ins\". Kitu atveju Jums bus pranešama apie klaidas ir trūkstamas savybes.",
+BrowseServerBlocked : "Neįmanoma atidaryti naujo narÅ¡yklÄ—s lango. Ä®sitikinkite, kad iÅ¡kylanÄių langų blokavimo programos neveiksnios.",
+DialogBlocked : "Neįmanoma atidaryti dialogo lango. Ä®sitikinkite, kad iÅ¡kylanÄių langų blokavimo programos neveiksnios.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Nutraukti",
+DlgBtnClose : "Uždaryti",
+DlgBtnBrowseServer : "Naršyti po serverį",
+DlgAdvancedTag : "Papildomas",
+DlgOpOther : "<Kita>",
+DlgInfoTab : "Informacija",
+DlgAlertUrl : "Prašome įrašyti URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nÄ—ra nustatyta>",
+DlgGenId : "Id",
+DlgGenLangDir : "Teksto kryptis",
+DlgGenLangDirLtr : "Iš kairės į dešinę (LTR)",
+DlgGenLangDirRtl : "Iš dešinės į kairę (RTL)",
+DlgGenLangCode : "Kalbos kodas",
+DlgGenAccessKey : "Prieigos raktas",
+DlgGenName : "Vardas",
+DlgGenTabIndex : "Tabuliavimo indeksas",
+DlgGenLongDescr : "Ilgas aprašymas URL",
+DlgGenClass : "Stilių lentelės klasės",
+DlgGenTitle : "Konsultacinė antraštė",
+DlgGenContType : "Konsultacinio turinio tipas",
+DlgGenLinkCharset : "Susietų išteklių simbolių lentelė",
+DlgGenStyle : "Stilius",
+
+// Image Dialog
+DlgImgTitle : "Vaizdo savybÄ—s",
+DlgImgInfoTab : "Vaizdo informacija",
+DlgImgBtnUpload : "Siųsti į serverį",
+DlgImgURL : "URL",
+DlgImgUpload : "Nusiųsti",
+DlgImgAlt : "Alternatyvus Tekstas",
+DlgImgWidth : "Plotis",
+DlgImgHeight : "Aukštis",
+DlgImgLockRatio : "IÅ¡laikyti proporcijÄ…",
+DlgBtnResetSize : "Atstatyti dydį",
+DlgImgBorder : "RÄ—melis",
+DlgImgHSpace : "Hor.ErdvÄ—",
+DlgImgVSpace : "Vert.ErdvÄ—",
+DlgImgAlign : "Lygiuoti",
+DlgImgAlignLeft : "KairÄ™",
+DlgImgAlignAbsBottom: "AbsoliuÄiÄ… apaÄiÄ…",
+DlgImgAlignAbsMiddle: "Absoliutų vidurį",
+DlgImgAlignBaseline : "ApatinÄ™ linijÄ…",
+DlgImgAlignBottom : "ApaÄiÄ…",
+DlgImgAlignMiddle : "Vidurį",
+DlgImgAlignRight : "Dešinę",
+DlgImgAlignTextTop : "Teksto viršūnę",
+DlgImgAlignTop : "Viršūnę",
+DlgImgPreview : "Peržiūra",
+DlgImgAlertUrl : "Prašome įvesti vaizdo URL",
+DlgImgLinkTab : "Nuoroda",
+
+// Flash Dialog
+DlgFlashTitle : "Flash savybÄ—s",
+DlgFlashChkPlay : "Automatinis paleidimas",
+DlgFlashChkLoop : "Ciklas",
+DlgFlashChkMenu : "Leisti Flash meniu",
+DlgFlashScale : "Mastelis",
+DlgFlashScaleAll : "Rodyti visÄ…",
+DlgFlashScaleNoBorder : "Be rÄ—melio",
+DlgFlashScaleFit : "Tikslus atitikimas",
+
+// Link Dialog
+DlgLnkWindowTitle : "Nuoroda",
+DlgLnkInfoTab : "Nuorodos informacija",
+DlgLnkTargetTab : "Paskirtis",
+
+DlgLnkType : "Nuorodos tipas",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Žymė šiame puslapyje",
+DlgLnkTypeEMail : "El.paštas",
+DlgLnkProto : "Protokolas",
+DlgLnkProtoOther : "<kitas>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Pasirinkite žymę",
+DlgLnkAnchorByName : "Pagal žymės vardą",
+DlgLnkAnchorById : "Pagal žymės Id",
+DlgLnkNoAnchors : "(Šiame dokumente žymių nėra)",
+DlgLnkEMail : "El.pašto adresas",
+DlgLnkEMailSubject : "Žinutės tema",
+DlgLnkEMailBody : "Žinutės turinys",
+DlgLnkUpload : "Siųsti",
+DlgLnkBtnUpload : "Siųsti į serverį",
+
+DlgLnkTarget : "Paskirties vieta",
+DlgLnkTargetFrame : "<kadras>",
+DlgLnkTargetPopup : "<išskleidžiamas langas>",
+DlgLnkTargetBlank : "Naujas langas (_blank)",
+DlgLnkTargetParent : "Pirminis langas (_parent)",
+DlgLnkTargetSelf : "Tas pats langas (_self)",
+DlgLnkTargetTop : "Svarbiausias langas (_top)",
+DlgLnkTargetFrameName : "Paskirties kadro vardas",
+DlgLnkPopWinName : "Paskirties lango vardas",
+DlgLnkPopWinFeat : "Išskleidžiamo lango savybės",
+DlgLnkPopResize : "KeiÄiamas dydis",
+DlgLnkPopLocation : "Adreso juosta",
+DlgLnkPopMenu : "Meniu juosta",
+DlgLnkPopScroll : "Slinkties juostos",
+DlgLnkPopStatus : "BÅ«senos juosta",
+DlgLnkPopToolbar : "Mygtukų juosta",
+DlgLnkPopFullScrn : "Visas ekranas (IE)",
+DlgLnkPopDependent : "Priklausomas (Netscape)",
+DlgLnkPopWidth : "Plotis",
+DlgLnkPopHeight : "Aukštis",
+DlgLnkPopLeft : "KairÄ— pozicija",
+DlgLnkPopTop : "Viršutinė pozicija",
+
+DlnLnkMsgNoUrl : "Prašome įvesti nuorodos URL",
+DlnLnkMsgNoEMail : "Prašome įvesti el.pašto adresą",
+DlnLnkMsgNoAnchor : "Prašome pasirinkti žymę",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Pasirinkite spalvÄ…",
+DlgColorBtnClear : "Trinti",
+DlgColorHighlight : "Paryškinta",
+DlgColorSelected : "Pažymėta",
+
+// Smiley Dialog
+DlgSmileyTitle : "Įterpti veidelį",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Pasirinkite specialų simbolį",
+
+// Table Dialog
+DlgTableTitle : "LentelÄ—s savybÄ—s",
+DlgTableRows : "EilutÄ—s",
+DlgTableColumns : "Stulpeliai",
+DlgTableBorder : "RÄ—melio dydis",
+DlgTableAlign : "Lygiuoti",
+DlgTableAlignNotSet : "<Nenustatyta>",
+DlgTableAlignLeft : "KairÄ™",
+DlgTableAlignCenter : "CentrÄ…",
+DlgTableAlignRight : "Dešinę",
+DlgTableWidth : "Plotis",
+DlgTableWidthPx : "taškais",
+DlgTableWidthPc : "procentais",
+DlgTableHeight : "Aukštis",
+DlgTableCellSpace : "Tarpas tarp langelių",
+DlgTableCellPad : "Trapas nuo langelio rÄ—mo iki teksto",
+DlgTableCaption : "Antraštė",
+DlgTableSummary : "Santrauka",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Langelio savybÄ—s",
+DlgCellWidth : "Plotis",
+DlgCellWidthPx : "taškais",
+DlgCellWidthPc : "procentais",
+DlgCellHeight : "Aukštis",
+DlgCellWordWrap : "Teksto laužymas",
+DlgCellWordWrapNotSet : "<Nenustatyta>",
+DlgCellWordWrapYes : "Taip",
+DlgCellWordWrapNo : "Ne",
+DlgCellHorAlign : "Horizontaliai lygiuoti",
+DlgCellHorAlignNotSet : "<Nenustatyta>",
+DlgCellHorAlignLeft : "KairÄ™",
+DlgCellHorAlignCenter : "CentrÄ…",
+DlgCellHorAlignRight: "Dešinę",
+DlgCellVerAlign : "Vertikaliai lygiuoti",
+DlgCellVerAlignNotSet : "<Nenustatyta>",
+DlgCellVerAlignTop : "Viršų",
+DlgCellVerAlignMiddle : "Vidurį",
+DlgCellVerAlignBottom : "ApaÄiÄ…",
+DlgCellVerAlignBaseline : "ApatinÄ™ linijÄ…",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "EiluÄių apjungimas",
+DlgCellCollSpan : "Stulpelių apjungimas",
+DlgCellBackColor : "Fono spalva",
+DlgCellBorderColor : "RÄ—melio spalva",
+DlgCellBtnSelect : "Pažymėti...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Paieška",
+DlgFindFindBtn : "Surasti",
+DlgFindNotFoundMsg : "Nurodytas tekstas nerastas.",
+
+// Replace Dialog
+DlgReplaceTitle : "Pakeisti",
+DlgReplaceFindLbl : "Surasti tekstÄ…:",
+DlgReplaceReplaceLbl : "Pakeisti tekstu:",
+DlgReplaceCaseChk : "Skirti didžiąsias ir mažąsias raides",
+DlgReplaceReplaceBtn : "Pakeisti",
+DlgReplaceReplAllBtn : "Pakeisti viskÄ…",
+DlgReplaceWordChk : "Atitikti pilną žodį",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).",
+PasteErrorCopy : "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).",
+
+PasteAsText : "Įdėti kaip gryną tekstą",
+PasteFromWord : "Įdėti iš Word",
+
+DlgPasteMsg2 : "Žemiau esanÄiame įvedimo lauke įdÄ—kite tekstÄ…, naudodami klaviatÅ«rÄ… (<STRONG>Ctrl+V</STRONG>) ir spÅ«stelkite mygtukÄ… <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignoruoti šriftų nustatymus",
+DlgPasteRemoveStyles : "Pašalinti stilių nustatymus",
+
+// Color Picker
+ColorAutomatic : "Automatinis",
+ColorMoreColors : "Daugiau spalvų...",
+
+// Document Properties
+DocProps : "Dokumento savybÄ—s",
+
+// Anchor Dialog
+DlgAnchorTitle : "Žymės savybės",
+DlgAnchorName : "Žymės vardas",
+DlgAnchorErrorName : "Prašome įvesti žymės vardą",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Žodyne nerastas",
+DlgSpellChangeTo : "Pakeisti į",
+DlgSpellBtnIgnore : "Ignoruoti",
+DlgSpellBtnIgnoreAll : "Ignoruoti visus",
+DlgSpellBtnReplace : "Pakeisti",
+DlgSpellBtnReplaceAll : "Pakeisti visus",
+DlgSpellBtnUndo : "Atšaukti",
+DlgSpellNoSuggestions : "- Nėra pasiūlymų -",
+DlgSpellProgress : "Vyksta rašybos tikrinimas...",
+DlgSpellNoMispell : "Rašybos tikrinimas baigtas: Nerasta rašybos klaidų",
+DlgSpellNoChanges : "Rašybos tikrinimas baigtas: Nėra pakeistų žodžių",
+DlgSpellOneChange : "Rašybos tikrinimas baigtas: Vienas žodis pakeistas",
+DlgSpellManyChanges : "Rašybos tikrinimas baigtas: Pakeista %1 žodžių",
+
+IeSpellDownload : "Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?",
+
+// Button Dialog
+DlgButtonText : "Tekstas (Reikšmė)",
+DlgButtonType : "Tipas",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Vardas",
+DlgCheckboxValue : "Reikšmė",
+DlgCheckboxSelected : "Pažymėtas",
+
+// Form Dialog
+DlgFormName : "Vardas",
+DlgFormAction : "Veiksmas",
+DlgFormMethod : "Metodas",
+
+// Select Field Dialog
+DlgSelectName : "Vardas",
+DlgSelectValue : "Reikšmė",
+DlgSelectSize : "Dydis",
+DlgSelectLines : "eiluÄių",
+DlgSelectChkMulti : "Leisti daugeriopÄ… atrankÄ…",
+DlgSelectOpAvail : "Galimos parinktys",
+DlgSelectOpText : "Tekstas",
+DlgSelectOpValue : "Reikšmė",
+DlgSelectBtnAdd : "Įtraukti",
+DlgSelectBtnModify : "Modifikuoti",
+DlgSelectBtnUp : "Aukštyn",
+DlgSelectBtnDown : "Žemyn",
+DlgSelectBtnSetValue : "Laikyti pažymėta reikšme",
+DlgSelectBtnDelete : "Trinti",
+
+// Textarea Dialog
+DlgTextareaName : "Vardas",
+DlgTextareaCols : "Ilgis",
+DlgTextareaRows : "Plotis",
+
+// Text Field Dialog
+DlgTextName : "Vardas",
+DlgTextValue : "Reikšmė",
+DlgTextCharWidth : "Ilgis simboliais",
+DlgTextMaxChars : "Maksimalus simbolių skaiÄius",
+DlgTextType : "Tipas",
+DlgTextTypeText : "Tekstas",
+DlgTextTypePass : "Slaptažodis",
+
+// Hidden Field Dialog
+DlgHiddenName : "Vardas",
+DlgHiddenValue : "Reikšmė",
+
+// Bulleted List Dialog
+BulletedListProp : "Suženklinto sąrašo savybės",
+NumberedListProp : "Numeruoto sąrašo savybės",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Tipas",
+DlgLstTypeCircle : "Apskritimas",
+DlgLstTypeDisc : "Diskas",
+DlgLstTypeSquare : "Kvadratas",
+DlgLstTypeNumbers : "SkaiÄiai (1, 2, 3)",
+DlgLstTypeLCase : "Mažosios raidės (a, b, c)",
+DlgLstTypeUCase : "Didžiosios raidės (A, B, C)",
+DlgLstTypeSRoman : "RomÄ—nų mažieji skaiÄiai (i, ii, iii)",
+DlgLstTypeLRoman : "RomÄ—nų didieji skaiÄiai (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Bendros savybÄ—s",
+DlgDocBackTab : "Fonas",
+DlgDocColorsTab : "Spalvos ir kraštinės",
+DlgDocMetaTab : "Meta duomenys",
+
+DlgDocPageTitle : "Puslapio antraštė",
+DlgDocLangDir : "Kalbos kryptis",
+DlgDocLangDirLTR : "Iš kairės į dešinę (LTR)",
+DlgDocLangDirRTL : "Iš dešinės į kairę (RTL)",
+DlgDocLangCode : "Kalbos kodas",
+DlgDocCharSet : "Simbolių kodavimo lentelė",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Kita simbolių kodavimo lentelė",
+
+DlgDocDocType : "Dokumento tipo antraštė",
+DlgDocDocTypeOther : "Kita dokumento tipo antraštė",
+DlgDocIncXHTML : "Įtraukti XHTML deklaracijas",
+DlgDocBgColor : "Fono spalva",
+DlgDocBgImage : "Fono paveikslÄ—lio nuoroda (URL)",
+DlgDocBgNoScroll : "Neslenkantis fonas",
+DlgDocCText : "Tekstas",
+DlgDocCLink : "Nuoroda",
+DlgDocCVisited : "Aplankyta nuoroda",
+DlgDocCActive : "Aktyvi nuoroda",
+DlgDocMargins : "Puslapio kraštinės",
+DlgDocMaTop : "Viršuje",
+DlgDocMaLeft : "KairÄ—je",
+DlgDocMaRight : "Dešinėje",
+DlgDocMaBottom : "ApaÄioje",
+DlgDocMeIndex : "Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)",
+DlgDocMeDescr : "Dokumento apibūdinimas",
+DlgDocMeAuthor : "Autorius",
+DlgDocMeCopy : "AutorinÄ—s teisÄ—s",
+DlgDocPreview : "Peržiūra",
+
+// Templates Dialog
+Templates : "Å ablonai",
+DlgTemplatesTitle : "Turinio Å¡ablonai",
+DlgTemplatesSelMsg : "Pasirinkite norimÄ… Å¡ablonÄ…<br>(<b>DÄ—mesio!</b> esamas turinys bus prarastas):",
+DlgTemplatesLoading : "Įkeliamas šablonų sąrašas. Prašome palaukti...",
+DlgTemplatesNoTpl : "(Å ablonų sÄ…raÅ¡as tuÅ¡Äias)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "Apie",
+DlgAboutBrowserInfoTab : "Naršyklės informacija",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "versija",
+DlgAboutInfo : "PapildomÄ… informacijÄ… galima gauti",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lv.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lv.js
new file mode 100644
index 0000000..bfb09c1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lv.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Latvian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "SamazinÄt rÄ«ku joslu",
+ToolbarExpand : "PaplaÅ¡inÄt rÄ«ku joslu",
+
+// Toolbar Items and Context Menu
+Save : "SaglabÄt",
+NewPage : "Jauna lapa",
+Preview : "PÄrskatÄ«t",
+Cut : "Izgriezt",
+Copy : "Kopēt",
+Paste : "Ievietot",
+PasteText : "Ievietot kÄ vienkÄrÅ¡u tekstu",
+PasteWord : "Ievietot no Worda",
+Print : "DrukÄt",
+SelectAll : "Iezīmēt visu",
+RemoveFormat : "Noņemt stilus",
+InsertLinkLbl : "Hipersaite",
+InsertLink : "Ievietot/Labot hipersaiti",
+RemoveLink : "Noņemt hipersaiti",
+VisitLink : "Open Link", //MISSING
+Anchor : "Ievietot/Labot iezīmi",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Attēls",
+InsertImage : "Ievietot/Labot Attēlu",
+InsertFlashLbl : "Flash",
+InsertFlash : "Ievietot/Labot Flash",
+InsertTableLbl : "Tabula",
+InsertTable : "Ievietot/Labot Tabulu",
+InsertLineLbl : "AtdalÄ«tÄjsvÄ«tra",
+InsertLine : "Ievietot horizontÄlu AtdalÄ«tÄjsvÄ«tru",
+InsertSpecialCharLbl: "Īpašs simbols",
+InsertSpecialChar : "Ievietot speciÄlo simbolu",
+InsertSmileyLbl : "Smaidiņi",
+InsertSmiley : "Ievietot smaidiņu",
+About : "ĪsumÄ par FCKeditor",
+Bold : "Treknu Å¡riftu",
+Italic : "SlÄ«prakstÄ",
+Underline : "Apakšsvītra",
+StrikeThrough : "PÄrsvÄ«trots",
+Subscript : "ZemrakstÄ",
+Superscript : "AugÅ¡rakstÄ",
+LeftJustify : "IzlÄ«dzinÄt pa kreisi",
+CenterJustify : "IzlÄ«dzinÄt pret centru",
+RightJustify : "IzlÄ«dzinÄt pa labi",
+BlockJustify : "IzlÄ«dzinÄt malas",
+DecreaseIndent : "SamazinÄt atkÄpi",
+IncreaseIndent : "PalielinÄt atkÄpi",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Atcelt",
+Redo : "AtkÄrtot",
+NumberedListLbl : "Numurēts saraksts",
+NumberedList : "Ievietot/Noņemt numerēto sarakstu",
+BulletedListLbl : "Izcelts saraksts",
+BulletedList : "Ievietot/Noņemt izceltu sarakstu",
+ShowTableBorders : "ParÄdÄ«t tabulas robežas",
+ShowDetails : "ParÄdÄ«t sÄ«kÄku informÄciju",
+Style : "Stils",
+FontFormat : "FormÄts",
+Font : "Å rifts",
+FontSize : "Izmērs",
+TextColor : "Teksta krÄsa",
+BGColor : "Fona krÄsa",
+Source : "HTML kods",
+Find : "Meklēt",
+Replace : "Nomainīt",
+SpellCheck : "PareizrakstÄ«bas pÄrbaude",
+UniversalKeyboard : "UniversÄla klaviatÅ«ra",
+PageBreakLbl : "Lapas pÄrtraukums",
+PageBreak : "Ievietot lapas pÄrtraukumu",
+
+Form : "Forma",
+Checkbox : "Atzīmēšanas kastīte",
+RadioButton : "Izvēles poga",
+TextField : "Teksta rinda",
+Textarea : "Teksta laukums",
+HiddenField : "Paslēpta teksta rinda",
+Button : "Poga",
+SelectionField : "Iezīmēšanas lauks",
+ImageButton : "Attēlpoga",
+
+FitWindow : "Maksimizēt redaktora izmēru",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Labot hipersaiti",
+CellCM : "Å Å«na",
+RowCM : "Rinda",
+ColumnCM : "Kolonna",
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Dzēst rindas",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Dzēst kolonnas",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Dzēst rūtiņas",
+MergeCells : "Apvienot rūtiņas",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Dzēst tabulu",
+CellProperties : "Rūtiņas īpašības",
+TableProperties : "Tabulas īpašības",
+ImageProperties : "Attēla īpašības",
+FlashProperties : "Flash īpašības",
+
+AnchorProp : "Iezīmes īpašības",
+ButtonProp : "Pogas īpašības",
+CheckboxProp : "Atzīmēšanas kastītes īpašības",
+HiddenFieldProp : "PaslÄ“ptÄs teksta rindas Ä«paÅ¡Ä«bas",
+RadioButtonProp : "Izvēles poga īpašības",
+ImageButtonProp : "Attēlpogas īpašības",
+TextFieldProp : "Teksta rindas īpašības",
+SelectionFieldProp : "Iezīmēšanas lauka īpašības",
+TextareaProp : "Teksta laukuma īpašības",
+FormProp : "Formas īpašības",
+
+FontFormats : "NormÄls teksts;FormatÄ“ts teksts;Adrese;Virsraksts 1;Virsraksts 2;Virsraksts 3;Virsraksts 4;Virsraksts 5;Virsraksts 6;Rindkopa (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Tiek apstrÄdÄts XHTML. LÅ«dzu uzgaidiet...",
+Done : "Darīts",
+PasteWordConfirm : "Teksta fragments, kas tiek ievietots, izskatÄs, ka bÅ«tu sagatavots Word'Ä. Vai vÄ“laties to apstrÄdÄt pirms ievietoÅ¡anas?",
+NotCompatiblePaste : "Å Ä« darbÄ«ba ir pieejama Internet Explorer'Ä«, kas jaunÄks par 5.5 versiju. Vai vÄ“laties ievietot bez apstrÄdes?",
+UnknownToolbarItem : "NezinÄms rÄ«ku joslas objekts \"%1\"",
+UnknownCommand : "NezinÄmas darbÄ«bas nosaukums \"%1\"",
+NotImplemented : "Darbība netika paveikta",
+UnknownToolbarSet : "Rīku joslas komplekts \"%1\" neeksistē",
+NoActiveX : "Interneta pÄrlÅ«kprogrammas droÅ¡Ä«bas uzstÄdÄ«jumi varÄ“tu ietekmÄ“t dažas no redaktora Ä«paÅ¡Ä«bÄm. JÄbÅ«t aktivizÄ“tai sadaļai \"Run ActiveX controls and plug-ins\". SavÄdÄk ir iespÄ“jamas kļūdas darbÄ«bÄ un kļūdu paziņojumu parÄdÄ«Å¡anÄs.",
+BrowseServerBlocked : "Resursu pÄrlÅ«ks nevar tikt atvÄ“rts. PÄrliecinieties, ka uznirstoÅ¡o logu bloÄ·Ä“tÄji ir atslÄ“gti.",
+DialogBlocked : "Nav iespÄ“jams atvÄ“rt dialoglogu. PÄrliecinieties, ka uznirstoÅ¡o logu bloÄ·Ä“tÄji ir atslÄ“gti.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "Darīts!",
+DlgBtnCancel : "Atcelt",
+DlgBtnClose : "Aizvērt",
+DlgBtnBrowseServer : "Skatīt servera saturu",
+DlgAdvancedTag : "Izvērstais",
+DlgOpOther : "<Cits>",
+DlgInfoTab : "InformÄcija",
+DlgAlertUrl : "LÅ«dzu, ievietojiet hipersaiti",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nav iestatīts>",
+DlgGenId : "Id",
+DlgGenLangDir : "Valodas lasīšanas virziens",
+DlgGenLangDirLtr : "No kreisÄs uz labo (LTR)",
+DlgGenLangDirRtl : "No labÄs uz kreiso (RTL)",
+DlgGenLangCode : "Valodas kods",
+DlgGenAccessKey : "Pieejas kods",
+DlgGenName : "Nosaukums",
+DlgGenTabIndex : "Ciļņu indekss",
+DlgGenLongDescr : "Gara apraksta Hipersaite",
+DlgGenClass : "Stilu saraksta klases",
+DlgGenTitle : "Konsultatīvs virsraksts",
+DlgGenContType : "Konsultatīvs satura tips",
+DlgGenLinkCharset : "PievienotÄ resursa kodu tabula",
+DlgGenStyle : "Stils",
+
+// Image Dialog
+DlgImgTitle : "Attēla īpašības",
+DlgImgInfoTab : "InformÄcija par attÄ“lu",
+DlgImgBtnUpload : "Nosūtīt serverim",
+DlgImgURL : "URL",
+DlgImgUpload : "AugÅ¡upielÄdÄ“t",
+DlgImgAlt : "Alternatīvais teksts",
+DlgImgWidth : "Platums",
+DlgImgHeight : "Augstums",
+DlgImgLockRatio : "Nemainīga Augstuma/Platuma attiecība",
+DlgBtnResetSize : "Atjaunot sÄkotnÄ“jo izmÄ“ru",
+DlgImgBorder : "RÄmis",
+DlgImgHSpace : "HorizontÄlÄ telpa",
+DlgImgVSpace : "VertikÄlÄ telpa",
+DlgImgAlign : "NolÄ«dzinÄt",
+DlgImgAlignLeft : "Pa kreisi",
+DlgImgAlignAbsBottom: "AbsolÅ«ti apakÅ¡Ä",
+DlgImgAlignAbsMiddle: "AbsolÅ«ti vertikÄli centrÄ“ts",
+DlgImgAlignBaseline : "PamatrindÄ",
+DlgImgAlignBottom : "ApakÅ¡Ä",
+DlgImgAlignMiddle : "VertikÄli centrÄ“ts",
+DlgImgAlignRight : "Pa labi",
+DlgImgAlignTextTop : "Teksta augÅ¡Ä",
+DlgImgAlignTop : "AugÅ¡Ä",
+DlgImgPreview : "PÄrskats",
+DlgImgAlertUrl : "LÅ«dzu norÄdÄ«t attÄ“la hipersaiti",
+DlgImgLinkTab : "Hipersaite",
+
+// Flash Dialog
+DlgFlashTitle : "Flash īpašības",
+DlgFlashChkPlay : "AutomÄtiska atskaņoÅ¡ana",
+DlgFlashChkLoop : "NepÄrtraukti",
+DlgFlashChkMenu : "Atļaut Flash izvēlni",
+DlgFlashScale : "Mainīt izmēru",
+DlgFlashScaleAll : "RÄdÄ«t visu",
+DlgFlashScaleNoBorder : "Bez rÄmja",
+DlgFlashScaleFit : "Precīzs izmērs",
+
+// Link Dialog
+DlgLnkWindowTitle : "Hipersaite",
+DlgLnkInfoTab : "Hipersaites informÄcija",
+DlgLnkTargetTab : "MÄ“rÄ·is",
+
+DlgLnkType : "Hipersaites tips",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "IezÄ«me Å¡ajÄ lapÄ",
+DlgLnkTypeEMail : "E-pasts",
+DlgLnkProto : "Protokols",
+DlgLnkProtoOther : "<cits>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Izvēlēties iezīmi",
+DlgLnkAnchorByName : "Pēc iezīmes nosaukuma",
+DlgLnkAnchorById : "PÄ“c elementa ID",
+DlgLnkNoAnchors : "(Å ajÄ dokumentÄ nav iezÄ«mju)",
+DlgLnkEMail : "E-pasta adrese",
+DlgLnkEMailSubject : "Ziņas tēma",
+DlgLnkEMailBody : "Ziņas saturs",
+DlgLnkUpload : "AugÅ¡upielÄdÄ“t",
+DlgLnkBtnUpload : "Nosūtīt serverim",
+
+DlgLnkTarget : "MÄ“rÄ·is",
+DlgLnkTargetFrame : "<ietvars>",
+DlgLnkTargetPopup : "<uznirstoÅ¡Ä logÄ>",
+DlgLnkTargetBlank : "JaunÄ logÄ (_blank)",
+DlgLnkTargetParent : "EsoÅ¡ajÄ logÄ (_parent)",
+DlgLnkTargetSelf : "TajÄ paÅ¡Ä logÄ (_self)",
+DlgLnkTargetTop : "VisredzamÄkajÄ logÄ (_top)",
+DlgLnkTargetFrameName : "MÄ“rÄ·a ietvara nosaukums",
+DlgLnkPopWinName : "UznirstoÅ¡Ä loga nosaukums",
+DlgLnkPopWinFeat : "UznirstoÅ¡Ä loga nosaukums Ä«paÅ¡Ä«bas",
+DlgLnkPopResize : "Ar mainÄmu izmÄ“ru",
+DlgLnkPopLocation : "AtraÅ¡anÄs vietas josla",
+DlgLnkPopMenu : "Izvēlnes josla",
+DlgLnkPopScroll : "Ritjoslas",
+DlgLnkPopStatus : "Statusa josla",
+DlgLnkPopToolbar : "RÄ«ku josla",
+DlgLnkPopFullScrn : "PilnÄ ekrÄnÄ (IE)",
+DlgLnkPopDependent : "Atkarīgs (Netscape)",
+DlgLnkPopWidth : "Platums",
+DlgLnkPopHeight : "Augstums",
+DlgLnkPopLeft : "KreisÄ koordinÄte",
+DlgLnkPopTop : "AugÅ¡Ä“jÄ koordinÄte",
+
+DlnLnkMsgNoUrl : "LÅ«dzu norÄdi hipersaiti",
+DlnLnkMsgNoEMail : "LÅ«dzu norÄdi e-pasta adresi",
+DlnLnkMsgNoAnchor : "LÅ«dzu norÄdi iezÄ«mi",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "IzvÄ“lies krÄsu",
+DlgColorBtnClear : "Dzēst",
+DlgColorHighlight : "Izcelt",
+DlgColorSelected : "Iezīmētais",
+
+// Smiley Dialog
+DlgSmileyTitle : "Ievietot smaidiņu",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Ievietot īpašu simbolu",
+
+// Table Dialog
+DlgTableTitle : "Tabulas īpašības",
+DlgTableRows : "Rindas",
+DlgTableColumns : "Kolonnas",
+DlgTableBorder : "RÄmja izmÄ“rs",
+DlgTableAlign : "Novietojums",
+DlgTableAlignNotSet : "<nav norÄdÄ«ts>",
+DlgTableAlignLeft : "Pa kreisi",
+DlgTableAlignCenter : "Centrēti",
+DlgTableAlignRight : "Pa labi",
+DlgTableWidth : "Platums",
+DlgTableWidthPx : "pikseļos",
+DlgTableWidthPc : "procentuÄli",
+DlgTableHeight : "Augstums",
+DlgTableCellSpace : "Rūtiņu atstatums",
+DlgTableCellPad : "Rūtiņu nobīde",
+DlgTableCaption : "Leģenda",
+DlgTableSummary : "AnotÄcija",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Rūtiņas īpašības",
+DlgCellWidth : "Platums",
+DlgCellWidthPx : "pikseļi",
+DlgCellWidthPc : "procentos",
+DlgCellHeight : "Augstums",
+DlgCellWordWrap : "Teksta pÄrnese",
+DlgCellWordWrapNotSet : "<nav norÄdÄ«ta>",
+DlgCellWordWrapYes : "JÄ",
+DlgCellWordWrapNo : "NÄ“",
+DlgCellHorAlign : "HorizontÄla novietojums",
+DlgCellHorAlignNotSet : "<Nav norÄdÄ«ts>",
+DlgCellHorAlignLeft : "Pa kreisi",
+DlgCellHorAlignCenter : "Centrēti",
+DlgCellHorAlignRight: "Pa labi",
+DlgCellVerAlign : "VertikÄlais novietojums",
+DlgCellVerAlignNotSet : "<nav norÄdÄ«ts>",
+DlgCellVerAlignTop : "Augša",
+DlgCellVerAlignMiddle : "Vidus",
+DlgCellVerAlignBottom : "Apakša",
+DlgCellVerAlignBaseline : "PamatrindÄ",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Rindu pÄrnese",
+DlgCellCollSpan : "Kolonnu pÄrnese",
+DlgCellBackColor : "Fona krÄsa",
+DlgCellBorderColor : "RÄmja krÄsa",
+DlgCellBtnSelect : "Iezīmē...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "MeklÄ“tÄjs",
+DlgFindFindBtn : "Meklēt",
+DlgFindNotFoundMsg : "NorÄdÄ«tÄ frÄze netika atrasta.",
+
+// Replace Dialog
+DlgReplaceTitle : "Aizvietošana",
+DlgReplaceFindLbl : "Meklēt:",
+DlgReplaceReplaceLbl : "Nomainīt uz:",
+DlgReplaceCaseChk : "Reģistrjūtīgs",
+DlgReplaceReplaceBtn : "Aizvietot",
+DlgReplaceReplAllBtn : "Aizvietot visu",
+DlgReplaceWordChk : "JÄsakrÄ«t pilnÄ«bÄ",
+
+// Paste Operations / Dialog
+PasteErrorCut : "JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj editoram automÄtiski veikt izgrieÅ¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl+X, lai veiktu Å¡o darbÄ«bu.",
+PasteErrorCopy : "JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj editoram automÄtiski veikt kopÄ“Å¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl+C), lai veiktu Å¡o darbÄ«bu.",
+
+PasteAsText : "Ievietot kÄ vienkÄrÅ¡u tekstu",
+PasteFromWord : "Ievietot no Worda",
+
+DlgPasteMsg2 : "LÅ«dzu, ievietojiet tekstu Å¡ajÄ laukumÄ, izmantojot klaviatÅ«ru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>DarÄ«ts!</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "IgnorÄ“t iepriekÅ¡ norÄdÄ«tos fontus",
+DlgPasteRemoveStyles : "Noņemt norÄdÄ«tos stilus",
+
+// Color Picker
+ColorAutomatic : "AutomÄtiska",
+ColorMoreColors : "PlaÅ¡Äka palete...",
+
+// Document Properties
+DocProps : "Dokumenta īpašības",
+
+// Anchor Dialog
+DlgAnchorTitle : "Iezīmes īpašības",
+DlgAnchorName : "Iezīmes nosaukums",
+DlgAnchorErrorName : "LÅ«dzu norÄdiet iezÄ«mes nosaukumu",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Netika atrasts vÄrdnÄ«cÄ",
+DlgSpellChangeTo : "Nomainīt uz",
+DlgSpellBtnIgnore : "Ignorēt",
+DlgSpellBtnIgnoreAll : "Ignorēt visu",
+DlgSpellBtnReplace : "Aizvietot",
+DlgSpellBtnReplaceAll : "Aizvietot visu",
+DlgSpellBtnUndo : "Atcelt",
+DlgSpellNoSuggestions : "- Nav ieteikumu -",
+DlgSpellProgress : "Notiek pareizrakstÄ«bas pÄrbaude...",
+DlgSpellNoMispell : "PareizrakstÄ«bas pÄrbaude pabeigta: kļūdas netika atrastas",
+DlgSpellNoChanges : "PareizrakstÄ«bas pÄrbaude pabeigta: nekas netika labots",
+DlgSpellOneChange : "PareizrakstÄ«bas pÄrbaude pabeigta: 1 vÄrds izmainÄ«ts",
+DlgSpellManyChanges : "PareizrakstÄ«bas pÄrbaude pabeigta: %1 vÄrdi tika mainÄ«ti",
+
+IeSpellDownload : "PareizrakstÄ«bas pÄrbaudÄ«tÄjs nav pievienots. Vai vÄ“laties to lejupielÄdÄ“t tagad?",
+
+// Button Dialog
+DlgButtonText : "Teksts (vērtība)",
+DlgButtonType : "Tips",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nosaukums",
+DlgCheckboxValue : "Vērtība",
+DlgCheckboxSelected : "Iezīmēts",
+
+// Form Dialog
+DlgFormName : "Nosaukums",
+DlgFormAction : "Darbība",
+DlgFormMethod : "Metode",
+
+// Select Field Dialog
+DlgSelectName : "Nosaukums",
+DlgSelectValue : "Vērtība",
+DlgSelectSize : "Izmērs",
+DlgSelectLines : "rindas",
+DlgSelectChkMulti : "Atļaut vairÄkus iezÄ«mÄ“jumus",
+DlgSelectOpAvail : "PieejamÄs iespÄ“jas",
+DlgSelectOpText : "Teksts",
+DlgSelectOpValue : "Vērtība",
+DlgSelectBtnAdd : "Pievienot",
+DlgSelectBtnModify : "Veikt izmaiņas",
+DlgSelectBtnUp : "Augšup",
+DlgSelectBtnDown : "Lejup",
+DlgSelectBtnSetValue : "Noteikt kÄ iezÄ«mÄ“to vÄ“rtÄ«bu",
+DlgSelectBtnDelete : "Dzēst",
+
+// Textarea Dialog
+DlgTextareaName : "Nosaukums",
+DlgTextareaCols : "Kolonnas",
+DlgTextareaRows : "Rindas",
+
+// Text Field Dialog
+DlgTextName : "Nosaukums",
+DlgTextValue : "Vērtība",
+DlgTextCharWidth : "Simbolu platums",
+DlgTextMaxChars : "Simbolu maksimÄlais daudzums",
+DlgTextType : "Tips",
+DlgTextTypeText : "Teksts",
+DlgTextTypePass : "Parole",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nosaukums",
+DlgHiddenValue : "Vērtība",
+
+// Bulleted List Dialog
+BulletedListProp : "Aizzīmju saraksta īpašības",
+NumberedListProp : "NumerÄ“tÄ saraksta Ä«paÅ¡Ä«bas",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Tips",
+DlgLstTypeCircle : "Aplis",
+DlgLstTypeDisc : "Disks",
+DlgLstTypeSquare : "KvadrÄts",
+DlgLstTypeNumbers : "Skaitļi (1, 2, 3)",
+DlgLstTypeLCase : "Maziem burtiem (a, b, c)",
+DlgLstTypeUCase : "Lieliem burtiem (A, B, C)",
+DlgLstTypeSRoman : "Maziem romiešu cipariem (i, ii, iii)",
+DlgLstTypeLRoman : "Lieliem romiešu cipariem (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "VispÄrÄ«ga informÄcija",
+DlgDocBackTab : "Fons",
+DlgDocColorsTab : "KrÄsas un robežu nobÄ«des",
+DlgDocMetaTab : "META dati",
+
+DlgDocPageTitle : "Dokumenta virsraksts <Title>",
+DlgDocLangDir : "Valodas lasīšanas virziens",
+DlgDocLangDirLTR : "No kreisÄs uz labo (LTR)",
+DlgDocLangDirRTL : "No labÄs uz kreiso (RTL)",
+DlgDocLangCode : "Valodas kods",
+DlgDocCharSet : "Simbolu kodējums",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Cits simbolu kodējums",
+
+DlgDocDocType : "Dokumenta tips",
+DlgDocDocTypeOther : "Cits dokumenta tips",
+DlgDocIncXHTML : "Ietvert XHTML deklarÄcijas",
+DlgDocBgColor : "Fona krÄsa",
+DlgDocBgImage : "Fona attēla hipersaite",
+DlgDocBgNoScroll : "Fona attēls ir fiksēts",
+DlgDocCText : "Teksts",
+DlgDocCLink : "Hipersaite",
+DlgDocCVisited : "Apmeklēta hipersaite",
+DlgDocCActive : "Aktīva hipersaite",
+DlgDocMargins : "Lapas robežas",
+DlgDocMaTop : "AugÅ¡Ä",
+DlgDocMaLeft : "Pa kreisi",
+DlgDocMaRight : "Pa labi",
+DlgDocMaBottom : "ApakÅ¡Ä",
+DlgDocMeIndex : "Dokumentu aprakstoÅ¡i atslÄ“gvÄrdi (atdalÄ«ti ar komatu)",
+DlgDocMeDescr : "Dokumenta apraksts",
+DlgDocMeAuthor : "Autors",
+DlgDocMeCopy : "Autortiesības",
+DlgDocPreview : "Priekšskats",
+
+// Templates Dialog
+Templates : "Sagataves",
+DlgTemplatesTitle : "Satura sagataves",
+DlgTemplatesSelMsg : "LÅ«dzu, norÄdiet sagatavi, ko atvÄ“rt editorÄ<br>(patreizÄ“jie dati tiks zaudÄ“ti):",
+DlgTemplatesLoading : "Notiek sagatavju saraksta ielÄde. LÅ«dzu, uzgaidiet...",
+DlgTemplatesNoTpl : "(Nav norÄdÄ«tas sagataves)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "Par",
+DlgAboutBrowserInfoTab : "InformÄcija par pÄrlÅ«kprogrammu",
+DlgAboutLicenseTab : "Licence",
+DlgAboutVersion : "versija",
+DlgAboutInfo : "Papildus informÄcija ir pieejama",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/mn.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/mn.js
new file mode 100644
index 0000000..b3803fc
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/mn.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Mongolian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Багажны Ñ…ÑÑÑг ÑвдÑÑ…",
+ToolbarExpand : "Багажны Ñ…ÑÑÑг өргөтгөх",
+
+// Toolbar Items and Context Menu
+Save : "Хадгалах",
+NewPage : "Ð¨Ð¸Ð½Ñ Ñ…ÑƒÑƒÐ´Ð°Ñ",
+Preview : "Уридчлан харах",
+Cut : "Хайчлах",
+Copy : "Хуулах",
+Paste : "Буулгах",
+PasteText : "plain text-ÑÑÑ Ð±ÑƒÑƒÐ»Ð³Ð°Ñ…",
+PasteWord : "Word-Ð¾Ð¾Ñ Ð±ÑƒÑƒÐ»Ð³Ð°Ñ…",
+Print : "Ð¥ÑвлÑÑ…",
+SelectAll : "Бүгдийг нь Ñонгох",
+RemoveFormat : "Формат авч хаÑÑ…",
+InsertLinkLbl : "Линк",
+InsertLink : "Линк Оруулах/ЗаÑварлах",
+RemoveLink : "Линк авч хаÑÑ…",
+VisitLink : "Open Link", //MISSING
+Anchor : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÐžÑ€ÑƒÑƒÐ»Ð°Ñ…/ЗаÑварлах",
+AnchorDelete : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ðвах",
+InsertImageLbl : "Зураг",
+InsertImage : "Зураг Оруулах/ЗаÑварлах",
+InsertFlashLbl : "Флаш",
+InsertFlash : "Флаш Оруулах/ЗаÑварлах",
+InsertTableLbl : "Ð¥Ò¯ÑнÑгт",
+InsertTable : "Ð¥Ò¯ÑнÑгт Оруулах/ЗаÑварлах",
+InsertLineLbl : "ЗурааÑ",
+InsertLine : "Хөндлөн Ð·ÑƒÑ€Ð°Ð°Ñ Ð¾Ñ€ÑƒÑƒÐ»Ð°Ñ…",
+InsertSpecialCharLbl: "Онцгой Ñ‚ÑмдÑгт",
+InsertSpecialChar : "Онцгой Ñ‚ÑмдÑгт оруулах",
+InsertSmileyLbl : "Тодорхойлолт",
+InsertSmiley : "Тодорхойлолт оруулах",
+About : "FCKeditor-н тухай",
+Bold : "Тод бүдүүн",
+Italic : "Ðалуу",
+Underline : "Доогуур нь зурааÑтай болгох",
+StrikeThrough : "Дундуур нь зурааÑтай болгох",
+Subscript : "Суурь болгох",
+Superscript : "ЗÑÑ€Ñг болгох",
+LeftJustify : "Зүүн талд байрлуулах",
+CenterJustify : "Төвд байрлуулах",
+RightJustify : "Баруун талд байрлуулах",
+BlockJustify : "Блок Ñ…ÑлбÑÑ€ÑÑÑ€ байрлуулах",
+DecreaseIndent : "Догол мөр нÑмÑÑ…",
+IncreaseIndent : "Догол мөр хаÑах",
+Blockquote : "Хайрцаглах",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Хүчингүй болгох",
+Redo : "Өмнөх үйлдлÑÑ ÑÑргÑÑÑ…",
+NumberedListLbl : "ДугаарлагдÑан жагÑаалт",
+NumberedList : "ДугаарлагдÑан жагÑаалт Оруулах/Ðвах",
+BulletedListLbl : "ЦÑгтÑй жагÑаалт",
+BulletedList : "ЦÑгтÑй жагÑаалт Оруулах/Ðвах",
+ShowTableBorders : "Ð¥Ò¯ÑнÑгтийн хүрÑÑг үзүүлÑÑ…",
+ShowDetails : "Деталчлан үзүүлÑÑ…",
+Style : "Загвар",
+FontFormat : "Формат",
+Font : "Фонт",
+FontSize : "Ð¥ÑмжÑÑ",
+TextColor : "Фонтны өнгө",
+BGColor : "Фонны өнгө",
+Source : "Код",
+Find : "Хайх",
+Replace : "Солих",
+SpellCheck : "Үгийн дүрÑÑ… шалгах",
+UniversalKeyboard : "УниварÑал гар",
+PageBreakLbl : "Ð¥ÑƒÑƒÐ´Ð°Ñ Ñ‚ÑƒÑгаарлах",
+PageBreak : "Ð¥ÑƒÑƒÐ´Ð°Ñ Ñ‚ÑƒÑгаарлагч оруулах",
+
+Form : "Форм",
+Checkbox : "ЧекбокÑ",
+RadioButton : "Радио товч",
+TextField : "Техт талбар",
+Textarea : "Техт орчин",
+HiddenField : "Ðууц талбар",
+Button : "Товч",
+SelectionField : "Сонгогч талбар",
+ImageButton : "Зурагтай товч",
+
+FitWindow : "editor-н Ñ…ÑмжÑÑг томруулах",
+ShowBlocks : "Block-уудыг үзүүлÑÑ…",
+
+// Context Menu
+EditLink : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð·Ð°Ñварлах",
+CellCM : "Ðүх/зай",
+RowCM : "Мөр",
+ColumnCM : "Багана",
+InsertRowAfter : "Мөр дараа нь оруулах",
+InsertRowBefore : "Мөр өмнө нь оруулах",
+DeleteRows : "Мөр уÑтгах",
+InsertColumnAfter : "Багана дараа нь оруулах",
+InsertColumnBefore : "Багана өмнө нь оруулах",
+DeleteColumns : "Багана уÑтгах",
+InsertCellAfter : "Ðүх/зай дараа нь оруулах",
+InsertCellBefore : "Ðүх/зай өмнө нь оруулах",
+DeleteCells : "Ðүх уÑтгах",
+MergeCells : "Ðүх нÑгтÑÑ…",
+MergeRight : "Баруун тийш нÑгтгÑÑ…",
+MergeDown : "Доош нÑгтгÑÑ…",
+HorizontalSplitCell : "Ðүх/зайг боÑоогоор нь туÑгаарлах",
+VerticalSplitCell : "Ðүх/зайг хөндлөнгөөр нь туÑгаарлах",
+TableDelete : "Ð¥Ò¯ÑнÑгт уÑтгах",
+CellProperties : "Ðүх/зай зайн шинж чанар",
+TableProperties : "Ð¥Ò¯ÑнÑгт",
+ImageProperties : "Зураг",
+FlashProperties : "Флаш шинж чанар",
+
+AnchorProp : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÑˆÐ¸Ð½Ð¶ чанар",
+ButtonProp : "Товчны шинж чанар",
+CheckboxProp : "ЧекбокÑны шинж чанар",
+HiddenFieldProp : "Ðууц талбарын шинж чанар",
+RadioButtonProp : "Радио товчны шинж чанар",
+ImageButtonProp : "Зурган товчны шинж чанар",
+TextFieldProp : "ТекÑÑ‚ талбарын шинж чанар",
+SelectionFieldProp : "Согогч талбарын шинж чанар",
+TextareaProp : "ТекÑÑ‚ орчны шинж чанар",
+FormProp : "Форм шинж чанар",
+
+FontFormats : "Ð¥Ñвийн;Formatted;ХаÑг;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML үйл Ñвц Ñвагдаж байна. ХүлÑÑÐ½Ñ Ò¯Ò¯...",
+Done : "Хийх",
+PasteWordConfirm : "Word-Ð¾Ð¾Ñ Ñ…ÑƒÑƒÐ»Ñан текÑÑ‚ÑÑ Ñанаж байгааг нь буулгахыг та Ñ…Ò¯Ñч байна уу. Та текÑÑ‚-ÑÑ Ð±ÑƒÑƒÐ»Ð³Ð°Ñ…Ñ‹Ð½ өмнө цÑвÑрлÑÑ… Ò¯Ò¯?",
+NotCompatiblePaste : "Ð­Ð½Ñ ÐºÐ¾Ð¼Ð¼Ð°Ð½Ð´ Internet Explorer-ын 5.5 буюу түүнÑÑÑ Ð´ÑÑш хувилбарт идвÑхшинÑ. Та цÑвÑрлÑхгүйгÑÑÑ€ буулгахыг Ñ…Ò¯Ñч байна?",
+UnknownToolbarItem : "Багажны Ñ…ÑÑгийн \"%1\" item мÑдÑгдÑхгүй байна",
+UnknownCommand : "\"%1\" комманд нÑÑ€ мÑдагдÑхгүй байна",
+NotImplemented : "Зөвшөөрөгдөхгүй комманд",
+UnknownToolbarSet : "Багажны Ñ…ÑÑÑгт \"%1\" оноох, Ò¯Ò¯ÑÑÑгүй байна",
+NoActiveX : "Таны үзүүлÑгч/browser-н хамгаалалтын тохиргоо editor-н зарим боломжийг Ñ…Ñзгаарлаж байна. Та \"Run ActiveX controls ба plug-ins\" Ñонголыг идвÑхитÑй болго.",
+BrowseServerBlocked : "Ðөөц үзүүгч нÑÑж чадÑангүй. Бүх popup blocker-г disabled болгоно уу.",
+DialogBlocked : "Харилцах цонхонд Ñнийг нÑÑÑ…Ñд боломжгүй ÑÑ. Бүх popup blocker-г disabled болгоно уу.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Болих",
+DlgBtnClose : "Хаах",
+DlgBtnBrowseServer : "Сервер харуулах",
+DlgAdvancedTag : "ÐÑмÑлт",
+DlgOpOther : "<БуÑад>",
+DlgInfoTab : "ÐœÑдÑÑлÑл",
+DlgAlertUrl : "URL оруулна уу",
+
+// General Dialogs Labels
+DlgGenNotSet : "<Оноохгүй>",
+DlgGenId : "Id",
+DlgGenLangDir : "Ð¥Ñлний чиглÑл",
+DlgGenLangDirLtr : "ЗүүнÑÑÑ Ð±Ð°Ñ€ÑƒÑƒÐ½ (LTR)",
+DlgGenLangDirRtl : "Ð‘Ð°Ñ€ÑƒÑƒÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ (RTL)",
+DlgGenLangCode : "Ð¥Ñлний код",
+DlgGenAccessKey : "Холбох түлхүүр",
+DlgGenName : "ÐÑÑ€",
+DlgGenTabIndex : "Tab индекÑ",
+DlgGenLongDescr : "URL-ын тайлбар",
+DlgGenClass : "Stylesheet клаÑÑууд",
+DlgGenTitle : "Зөвлөлдөх гарчиг",
+DlgGenContType : "Зөвлөлдөх төрлийн агуулга",
+DlgGenLinkCharset : "ТÑмдÑгт оноох нөөцөд холбогдÑон",
+DlgGenStyle : "Загвар",
+
+// Image Dialog
+DlgImgTitle : "Зураг",
+DlgImgInfoTab : "Зурагны мÑдÑÑлÑл",
+DlgImgBtnUpload : "Үүнийг ÑервÑррүү илгÑÑ",
+DlgImgURL : "URL",
+DlgImgUpload : "Хуулах",
+DlgImgAlt : "Тайлбар текÑÑ‚",
+DlgImgWidth : "Өргөн",
+DlgImgHeight : "Өндөр",
+DlgImgLockRatio : "Радио түгжих",
+DlgBtnResetSize : "Ñ…ÑмжÑÑ Ð´Ð°Ñ…Ð¸Ð½ оноох",
+DlgImgBorder : "ХүрÑÑ",
+DlgImgHSpace : "Хөндлөн зай",
+DlgImgVSpace : "БоÑоо зай",
+DlgImgAlign : "ЭгнÑÑ",
+DlgImgAlignLeft : "Зүүн",
+DlgImgAlignAbsBottom: "Abs доод талд",
+DlgImgAlignAbsMiddle: "Abs Дунд талд",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Доод талд",
+DlgImgAlignMiddle : "Дунд талд",
+DlgImgAlignRight : "Баруун",
+DlgImgAlignTextTop : "ТекÑÑ‚ дÑÑÑ€",
+DlgImgAlignTop : "ДÑÑд талд",
+DlgImgPreview : "Уридчлан харах",
+DlgImgAlertUrl : "Зурагны URL-ын төрлийн Ñонгоно уу",
+DlgImgLinkTab : "Линк",
+
+// Flash Dialog
+DlgFlashTitle : "Флаш шинж чанар",
+DlgFlashChkPlay : "Ðвтоматаар тоглох",
+DlgFlashChkLoop : "Давтах",
+DlgFlashChkMenu : "Флаш цÑÑ Ð¸Ð´Ð²ÑхжүүлÑÑ…",
+DlgFlashScale : "Өргөгтгөх",
+DlgFlashScaleAll : "Бүгдийг харуулах",
+DlgFlashScaleNoBorder : "ХүрÑÑгүй",
+DlgFlashScaleFit : "Яг тааруулах",
+
+// Link Dialog
+DlgLnkWindowTitle : "Линк",
+DlgLnkInfoTab : "Линкийн мÑдÑÑлÑл",
+DlgLnkTargetTab : "Байрлал",
+
+DlgLnkType : "Линкийн төрөл",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ð­Ð½Ñ Ñ…ÑƒÑƒÐ´Ð°Ñандах холбооÑ",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Протокол",
+DlgLnkProtoOther : "<буÑад>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ñонгох",
+DlgLnkAnchorByName : "ХолбооÑын нÑÑ€ÑÑÑ€",
+DlgLnkAnchorById : "ЭлемÑнт Id-гаар",
+DlgLnkNoAnchors : "(Баримт бичиг холбооÑгүй байна)",
+DlgLnkEMail : "E-Mail ХаÑг",
+DlgLnkEMailSubject : "Message гарчиг",
+DlgLnkEMailBody : "Message-ийн агуулга",
+DlgLnkUpload : "Хуулах",
+DlgLnkBtnUpload : "Үүнийг Ñерверрүү илгÑÑ",
+
+DlgLnkTarget : "Байрлал",
+DlgLnkTargetFrame : "<Ðгуулах хүрÑÑ>",
+DlgLnkTargetPopup : "<popup цонх>",
+DlgLnkTargetBlank : "Ð¨Ð¸Ð½Ñ Ñ†Ð¾Ð½Ñ… (_blank)",
+DlgLnkTargetParent : "ЭцÑг цонх (_parent)",
+DlgLnkTargetSelf : "ТөÑÑ‚Ñй цонх (_self)",
+DlgLnkTargetTop : "Хамгийн түрүүн байх цонх (_top)",
+DlgLnkTargetFrameName : "Очих фремын нÑÑ€",
+DlgLnkPopWinName : "Popup цонхны нÑÑ€",
+DlgLnkPopWinFeat : "Popup цонхны онцлог",
+DlgLnkPopResize : "Ð¥ÑмжÑÑ Ó©Ó©Ñ€Ñ‡Ð»Ó©Ñ…",
+DlgLnkPopLocation : "Location Ñ…ÑÑÑг",
+DlgLnkPopMenu : "Meню Ñ…ÑÑÑг",
+DlgLnkPopScroll : "Скрол Ñ…ÑÑÑгүүд",
+DlgLnkPopStatus : "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ…ÑÑÑг",
+DlgLnkPopToolbar : "Багажны Ñ…ÑÑÑг",
+DlgLnkPopFullScrn : "Цонх дүүргÑÑ… (IE)",
+DlgLnkPopDependent : "Хамаатай (Netscape)",
+DlgLnkPopWidth : "Өргөн",
+DlgLnkPopHeight : "Өндөр",
+DlgLnkPopLeft : "Зүүн байрлал",
+DlgLnkPopTop : "ДÑÑд байрлал",
+
+DlnLnkMsgNoUrl : "Линк URL-ÑÑ Ñ‚Ó©Ñ€Ó©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯",
+DlnLnkMsgNoEMail : "Е-mail хаÑгаа Ñ‚Ó©Ñ€Ó©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯",
+DlnLnkMsgNoAnchor : "ХолбооÑоо Ñонгоно уу",
+DlnLnkMsgInvPopName : "popup нÑÑ€ нь Ò¯ÑгÑн Ñ‚ÑмдÑгтÑÑÑ€ ÑÑ…ÑлÑÑн байх ба хооÑон зай агуулаагүй байх Ñ‘Ñтой.",
+
+// Color Dialog
+DlgColorTitle : "Өнгө Ñонгох",
+DlgColorBtnClear : "ЦÑвÑрлÑÑ…",
+DlgColorHighlight : "Өнгө",
+DlgColorSelected : "СонгогдÑон",
+
+// Smiley Dialog
+DlgSmileyTitle : "Тодорхойлолт оруулах",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Онцгой Ñ‚ÑмдÑгт Ñонгох",
+
+// Table Dialog
+DlgTableTitle : "Ð¥Ò¯ÑнÑгт",
+DlgTableRows : "Мөр",
+DlgTableColumns : "Багана",
+DlgTableBorder : "ХүрÑÑний Ñ…ÑмжÑÑ",
+DlgTableAlign : "ЭгнÑÑ",
+DlgTableAlignNotSet : "<Оноохгүй>",
+DlgTableAlignLeft : "Зүүн талд",
+DlgTableAlignCenter : "Төвд",
+DlgTableAlignRight : "Баруун талд",
+DlgTableWidth : "Өргөн",
+DlgTableWidthPx : "цÑг",
+DlgTableWidthPc : "хувь",
+DlgTableHeight : "Өндөр",
+DlgTableCellSpace : "Ðүх хоорондын зай (spacing)",
+DlgTableCellPad : "Ðүх доторлох(padding)",
+DlgTableCaption : "Тайлбар",
+DlgTableSummary : "Тайлбар",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "ХооÑон зайн шинж чанар",
+DlgCellWidth : "Өргөн",
+DlgCellWidthPx : "цÑг",
+DlgCellWidthPc : "хувь",
+DlgCellHeight : "Өндөр",
+DlgCellWordWrap : "Үг таÑлах",
+DlgCellWordWrapNotSet : "<Оноохгүй>",
+DlgCellWordWrapYes : "Тийм",
+DlgCellWordWrapNo : "Үгүй",
+DlgCellHorAlign : "БоÑоо ÑгнÑÑ",
+DlgCellHorAlignNotSet : "<Оноохгүй>",
+DlgCellHorAlignLeft : "Зүүн",
+DlgCellHorAlignCenter : "Төв",
+DlgCellHorAlignRight: "Баруун",
+DlgCellVerAlign : "Хөндлөн ÑгнÑÑ",
+DlgCellVerAlignNotSet : "<Оноохгүй>",
+DlgCellVerAlignTop : "ДÑÑд тал",
+DlgCellVerAlignMiddle : "Дунд",
+DlgCellVerAlignBottom : "Доод тал",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Ðийт мөр (span)",
+DlgCellCollSpan : "Ðийт багана (span)",
+DlgCellBackColor : "Фонны өнгө",
+DlgCellBorderColor : "ХүрÑÑний өнгө",
+DlgCellBtnSelect : "Сонго...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Хай мөн Дарж бич",
+
+// Find Dialog
+DlgFindTitle : "Хайх",
+DlgFindFindBtn : "Хайх",
+DlgFindNotFoundMsg : "ХайÑан текÑÑ‚ олÑонгүй.",
+
+// Replace Dialog
+DlgReplaceTitle : "Солих",
+DlgReplaceFindLbl : "Хайх үг/Ò¯ÑÑг:",
+DlgReplaceReplaceLbl : "Солих үг:",
+DlgReplaceCaseChk : "ТÑнцÑÑ… төлөв",
+DlgReplaceReplaceBtn : "Солих",
+DlgReplaceReplAllBtn : "Бүгдийг нь Солих",
+DlgReplaceWordChk : "ТÑнцÑÑ… бүтÑн үг",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдÑлийг зөвшөөрөхгүй байна. (Ctrl+X) товчны хоÑлолыг ашиглана уу.",
+PasteErrorCopy : "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдÑлийг зөвшөөрөхгүй байна. (Ctrl+C) товчны хоÑлолыг ашиглана уу.",
+
+PasteAsText : "Plain Text-ÑÑÑ Ð±ÑƒÑƒÐ»Ð³Ð°Ñ…",
+PasteFromWord : "Word-Ð¾Ð¾Ñ Ð±ÑƒÑƒÐ»Ð³Ð°Ñ…",
+
+DlgPasteMsg2 : "(<strong>Ctrl+V</strong>) товчийг ашиглан paste Ñ…Ð¸Ð¹Ð½Ñ Ò¯Ò¯. Мөн <strong>OK</strong> дар.",
+DlgPasteSec : "Таны үзүүлÑгч/browser/-н хамгаалалтын Ñ‚Ð¾Ñ…Ð¸Ñ€Ð³Ð¾Ð¾Ð½Ð¾Ð¾Ñ Ð±Ð¾Ð»Ð¾Ð¾Ð´ editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Ð­Ð½Ñ Ñ†Ð¾Ð½Ñ…Ð¾Ð´ дахин paste хийхийг оролд.",
+DlgPasteIgnoreFont : "ТодорхойлогдÑон Font Face зөвшөөрнө",
+DlgPasteRemoveStyles : "ТодорхойлогдÑон загварыг авах",
+
+// Color Picker
+ColorAutomatic : "Ðвтоматаар",
+ColorMoreColors : "ÐÑмÑлт өнгөнүүд...",
+
+// Document Properties
+DocProps : "Баримт бичиг шинж чанар",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÑˆÐ¸Ð½Ð¶ чанар",
+DlgAnchorName : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð½ÑÑ€",
+DlgAnchorErrorName : "Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ñ‚Ó©Ñ€Ó©Ð» оруулна уу",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Толь бичиггүй",
+DlgSpellChangeTo : "Өөрчлөх",
+DlgSpellBtnIgnore : "Зөвшөөрөх",
+DlgSpellBtnIgnoreAll : "Бүгдийг зөвшөөрөх",
+DlgSpellBtnReplace : "Дарж бичих",
+DlgSpellBtnReplaceAll : "Бүгдийг Дарж бичих",
+DlgSpellBtnUndo : "Буцаах",
+DlgSpellNoSuggestions : "- Тайлбаргүй -",
+DlgSpellProgress : "ДүрÑм шалгаж байгаа үйл Ñвц...",
+DlgSpellNoMispell : "ДүрÑм шалгаад дууÑÑан: Ðлдаа олдÑонгүй",
+DlgSpellNoChanges : "ДүрÑм шалгаад дууÑÑан: үг өөрчлөгдөөгүй",
+DlgSpellOneChange : "ДүрÑм шалгаад дууÑÑан: 1 үг өөрчлөгдÑөн",
+DlgSpellManyChanges : "ДүрÑм шалгаад дууÑÑан: %1 үг өөрчлөгдÑөн",
+
+IeSpellDownload : "ДүрÑм шалгагч Ñуугаагүй байна. Татаж авахыг Ñ…Ò¯Ñч байна уу?",
+
+// Button Dialog
+DlgButtonText : "ТÑкÑÑ‚ (Утга)",
+DlgButtonType : "Төрөл",
+DlgButtonTypeBtn : "Товч",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "Болих",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "ÐÑÑ€",
+DlgCheckboxValue : "Утга",
+DlgCheckboxSelected : "СонгогдÑон",
+
+// Form Dialog
+DlgFormName : "ÐÑÑ€",
+DlgFormAction : "ҮйлдÑл",
+DlgFormMethod : "Ðрга",
+
+// Select Field Dialog
+DlgSelectName : "ÐÑÑ€",
+DlgSelectValue : "Утга",
+DlgSelectSize : "Ð¥ÑмжÑÑ",
+DlgSelectLines : "Мөр",
+DlgSelectChkMulti : "Олон Ñонголт зөвшөөрөх",
+DlgSelectOpAvail : "ИдвÑÑ…Ñ‚Ñй Ñонголт",
+DlgSelectOpText : "ТÑкÑÑ‚",
+DlgSelectOpValue : "Утга",
+DlgSelectBtnAdd : "ÐÑмÑÑ…",
+DlgSelectBtnModify : "Өөрчлөх",
+DlgSelectBtnUp : "ДÑÑш",
+DlgSelectBtnDown : "Доош",
+DlgSelectBtnSetValue : "СонгогдÑан утга оноох",
+DlgSelectBtnDelete : "УÑтгах",
+
+// Textarea Dialog
+DlgTextareaName : "ÐÑÑ€",
+DlgTextareaCols : "Багана",
+DlgTextareaRows : "Мөр",
+
+// Text Field Dialog
+DlgTextName : "ÐÑÑ€",
+DlgTextValue : "Утга",
+DlgTextCharWidth : "ТÑмдÑгтын өргөн",
+DlgTextMaxChars : "Хамгийн их Ñ‚ÑмдÑгт",
+DlgTextType : "Төрөл",
+DlgTextTypeText : "ТекÑÑ‚",
+DlgTextTypePass : "Ðууц үг",
+
+// Hidden Field Dialog
+DlgHiddenName : "ÐÑÑ€",
+DlgHiddenValue : "Утга",
+
+// Bulleted List Dialog
+BulletedListProp : "Bulleted жагÑаалын шинж чанар",
+NumberedListProp : "ДугаарлаÑан жагÑаалын шинж чанар",
+DlgLstStart : "ЭхлÑÑ…",
+DlgLstType : "Төрөл",
+DlgLstTypeCircle : "Тойрог",
+DlgLstTypeDisc : "Тайлбар",
+DlgLstTypeSquare : "Square",
+DlgLstTypeNumbers : "Тоо (1, 2, 3)",
+DlgLstTypeLCase : "Жижиг Ò¯ÑÑг (a, b, c)",
+DlgLstTypeUCase : "Том Ò¯ÑÑг (A, B, C)",
+DlgLstTypeSRoman : "Жижиг Ром тоо (i, ii, iii)",
+DlgLstTypeLRoman : "Том Ром тоо (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Ерөнхий",
+DlgDocBackTab : "Фоно",
+DlgDocColorsTab : "Захын зай ба Өнгө",
+DlgDocMetaTab : "Meta өгөгдөл",
+
+DlgDocPageTitle : "ХуудаÑны гарчиг",
+DlgDocLangDir : "Ð¥Ñлний чиглÑл",
+DlgDocLangDirLTR : "ЗүүнÑÑÑ Ð±Ð°Ñ€ÑƒÑƒÐ½Ñ€ÑƒÑƒ (LTR)",
+DlgDocLangDirRTL : "Ð‘Ð°Ñ€ÑƒÑƒÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½Ñ€Ò¯Ò¯ (RTL)",
+DlgDocLangCode : "Ð¥Ñлний код",
+DlgDocCharSet : "Encoding Ñ‚ÑмдÑгт",
+DlgDocCharSetCE : "Төв европ",
+DlgDocCharSetCT : "Ð¥Ñтадын уламжлалт (Big5)",
+DlgDocCharSetCR : "Крил",
+DlgDocCharSetGR : "Гред",
+DlgDocCharSetJP : "Япон",
+DlgDocCharSetKR : "СолонгоÑ",
+DlgDocCharSetTR : "Tурк",
+DlgDocCharSetUN : "Юникод (UTF-8)",
+DlgDocCharSetWE : "Баруун европ",
+DlgDocCharSetOther : "Encoding-д Ó©Ó©Ñ€ Ñ‚ÑмдÑгт оноох",
+
+DlgDocDocType : "Баримт бичгийн төрөл Heading",
+DlgDocDocTypeOther : "БуÑад баримт бичгийн төрөл Heading",
+DlgDocIncXHTML : "XHTML агуулж зарлах",
+DlgDocBgColor : "Фоно өнгө",
+DlgDocBgImage : "Фоно зурагны URL",
+DlgDocBgNoScroll : "ГүйдÑггүй фоно",
+DlgDocCText : "ТекÑÑ‚",
+DlgDocCLink : "Линк",
+DlgDocCVisited : "ЗочилÑон линк",
+DlgDocCActive : "ИдвÑхитÑй линк",
+DlgDocMargins : "ХуудаÑны захын зай",
+DlgDocMaTop : "ДÑÑд тал",
+DlgDocMaLeft : "Зүүн тал",
+DlgDocMaRight : "Баруун тал",
+DlgDocMaBottom : "Доод тал",
+DlgDocMeIndex : "Баримт бичгийн Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ò¯Ð»Ñ…Ò¯Ò¯Ñ€ үг (таÑлалаар туÑгаарлагдана)",
+DlgDocMeDescr : "Баримт бичгийн тайлбар",
+DlgDocMeAuthor : "Зохиогч",
+DlgDocMeCopy : "Зохиогчийн Ñрх",
+DlgDocPreview : "Харах",
+
+// Templates Dialog
+Templates : "Загварууд",
+DlgTemplatesTitle : "Загварын агуулга",
+DlgTemplatesSelMsg : "Загварыг нÑÑж editor-Ñ€Ò¯Ò¯ Ñонгож оруулна уу<br />(Одоогийн агууллагыг уÑтаж магадгүй):",
+DlgTemplatesLoading : "Загваруудыг ачааллаж байна. Түр хүлÑÑÐ½Ñ Ò¯Ò¯...",
+DlgTemplatesNoTpl : "(Загвар тодорхойлогдоогүй байна)",
+DlgTemplatesReplace : "Одоогийн агууллагыг дарж бичих",
+
+// About Dialog
+DlgAboutAboutTab : "Тухай",
+DlgAboutBrowserInfoTab : "ÐœÑдÑÑлÑл үзүүлÑгч",
+DlgAboutLicenseTab : "Лиценз",
+DlgAboutVersion : "Хувилбар",
+DlgAboutInfo : "ÐœÑдÑÑллÑÑÑ€ туÑлах",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ms.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ms.js
new file mode 100644
index 0000000..307a1fb
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ms.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Malay language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Collapse Toolbar",
+ToolbarExpand : "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save : "Simpan",
+NewPage : "Helaian Baru",
+Preview : "Prebiu",
+Cut : "Potong",
+Copy : "Salin",
+Paste : "Tampal",
+PasteText : "Tampal sebagai Text Biasa",
+PasteWord : "Tampal dari Word",
+Print : "Cetak",
+SelectAll : "Pilih Semua",
+RemoveFormat : "Buang Format",
+InsertLinkLbl : "Sambungan",
+InsertLink : "Masukkan/Sunting Sambungan",
+RemoveLink : "Buang Sambungan",
+VisitLink : "Open Link", //MISSING
+Anchor : "Masukkan/Sunting Pautan",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Gambar",
+InsertImage : "Masukkan/Sunting Gambar",
+InsertFlashLbl : "Flash", //MISSING
+InsertFlash : "Insert/Edit Flash", //MISSING
+InsertTableLbl : "Jadual",
+InsertTable : "Masukkan/Sunting Jadual",
+InsertLineLbl : "Garisan",
+InsertLine : "Masukkan Garisan Membujur",
+InsertSpecialCharLbl: "Huruf Istimewa",
+InsertSpecialChar : "Masukkan Huruf Istimewa",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Masukkan Smiley",
+About : "Tentang FCKeditor",
+Bold : "Bold",
+Italic : "Italic",
+Underline : "Underline",
+StrikeThrough : "Strike Through",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Jajaran Kiri",
+CenterJustify : "Jajaran Tengah",
+RightJustify : "Jajaran Kanan",
+BlockJustify : "Jajaran Blok",
+DecreaseIndent : "Kurangkan Inden",
+IncreaseIndent : "Tambahkan Inden",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Batalkan",
+Redo : "Ulangkan",
+NumberedListLbl : "Senarai bernombor",
+NumberedList : "Masukkan/Sunting Senarai bernombor",
+BulletedListLbl : "Senarai tidak bernombor",
+BulletedList : "Masukkan/Sunting Senarai tidak bernombor",
+ShowTableBorders : "Tunjukkan Border Jadual",
+ShowDetails : "Tunjukkan Butiran",
+Style : "Stail",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "Saiz",
+TextColor : "Warna Text",
+BGColor : "Warna Latarbelakang",
+Source : "Sumber",
+Find : "Cari",
+Replace : "Ganti",
+SpellCheck : "Semak Ejaan",
+UniversalKeyboard : "Papan Kekunci Universal",
+PageBreakLbl : "Page Break", //MISSING
+PageBreak : "Insert Page Break", //MISSING
+
+Form : "Borang",
+Checkbox : "Checkbox",
+RadioButton : "Butang Radio",
+TextField : "Text Field",
+Textarea : "Textarea",
+HiddenField : "Field Tersembunyi",
+Button : "Butang",
+SelectionField : "Field Pilihan",
+ImageButton : "Butang Bergambar",
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Sunting Sambungan",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Buangkan Baris",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Buangkan Lajur",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Buangkan Sel-sel",
+MergeCells : "Cantumkan Sel-sel",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Delete Table", //MISSING
+CellProperties : "Ciri-ciri Sel",
+TableProperties : "Ciri-ciri Jadual",
+ImageProperties : "Ciri-ciri Gambar",
+FlashProperties : "Flash Properties", //MISSING
+
+AnchorProp : "Ciri-ciri Pautan",
+ButtonProp : "Ciri-ciri Butang",
+CheckboxProp : "Ciri-ciri Checkbox",
+HiddenFieldProp : "Ciri-ciri Field Tersembunyi",
+RadioButtonProp : "Ciri-ciri Butang Radio",
+ImageButtonProp : "Ciri-ciri Butang Bergambar",
+TextFieldProp : "Ciri-ciri Text Field",
+SelectionFieldProp : "Ciri-ciri Selection Field",
+TextareaProp : "Ciri-ciri Textarea",
+FormProp : "Ciri-ciri Borang",
+
+FontFormats : "Normal;Telah Diformat;Alamat;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Perenggan (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Memproses XHTML. Sila tunggu...",
+Done : "Siap",
+PasteWordConfirm : "Text yang anda hendak tampal adalah berasal dari Word. Adakah anda mahu membuang semua format Word sebelum tampal ke dalam text?",
+NotCompatiblePaste : "Arahan ini bole dilakukan jika anda mempuunyai Internet Explorer version 5.5 atau yang lebih tinggi. Adakah anda hendak tampal text tanpa membuang format Word?",
+UnknownToolbarItem : "Toolbar item tidak diketahui\"%1\"",
+UnknownCommand : "Arahan tidak diketahui \"%1\"",
+NotImplemented : "Arahan tidak terdapat didalam sistem",
+UnknownToolbarSet : "Set toolbar \"%1\" tidak wujud",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Batal",
+DlgBtnClose : "Tutup",
+DlgBtnBrowseServer : "Browse Server",
+DlgAdvancedTag : "Advanced",
+DlgOpOther : "<Lain-lain>",
+DlgInfoTab : "Info", //MISSING
+DlgAlertUrl : "Please insert the URL", //MISSING
+
+// General Dialogs Labels
+DlgGenNotSet : "<tidak di set>",
+DlgGenId : "Id",
+DlgGenLangDir : "Arah Tulisan",
+DlgGenLangDirLtr : "Kiri ke Kanan (LTR)",
+DlgGenLangDirRtl : "Kanan ke Kiri (RTL)",
+DlgGenLangCode : "Kod Bahasa",
+DlgGenAccessKey : "Kunci Akses",
+DlgGenName : "Nama",
+DlgGenTabIndex : "Indeks Tab ",
+DlgGenLongDescr : "Butiran Panjang URL",
+DlgGenClass : "Kelas-kelas Stylesheet",
+DlgGenTitle : "Tajuk Makluman",
+DlgGenContType : "Jenis Kandungan Makluman",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Stail",
+
+// Image Dialog
+DlgImgTitle : "Ciri-ciri Imej",
+DlgImgInfoTab : "Info Imej",
+DlgImgBtnUpload : "Hantar ke Server",
+DlgImgURL : "URL",
+DlgImgUpload : "Muat Naik",
+DlgImgAlt : "Text Alternatif",
+DlgImgWidth : "Lebar",
+DlgImgHeight : "Tinggi",
+DlgImgLockRatio : "Tetapkan Nisbah",
+DlgBtnResetSize : "Saiz Set Semula",
+DlgImgBorder : "Border",
+DlgImgHSpace : "Ruang Melintang",
+DlgImgVSpace : "Ruang Menegak",
+DlgImgAlign : "Jajaran",
+DlgImgAlignLeft : "Kiri",
+DlgImgAlignAbsBottom: "Bawah Mutlak",
+DlgImgAlignAbsMiddle: "Pertengahan Mutlak",
+DlgImgAlignBaseline : "Garis Dasar",
+DlgImgAlignBottom : "Bawah",
+DlgImgAlignMiddle : "Pertengahan",
+DlgImgAlignRight : "Kanan",
+DlgImgAlignTextTop : "Atas Text",
+DlgImgAlignTop : "Atas",
+DlgImgPreview : "Prebiu",
+DlgImgAlertUrl : "Sila taip URL untuk fail gambar",
+DlgImgLinkTab : "Sambungan",
+
+// Flash Dialog
+DlgFlashTitle : "Flash Properties", //MISSING
+DlgFlashChkPlay : "Auto Play", //MISSING
+DlgFlashChkLoop : "Loop", //MISSING
+DlgFlashChkMenu : "Enable Flash Menu", //MISSING
+DlgFlashScale : "Scale", //MISSING
+DlgFlashScaleAll : "Show all", //MISSING
+DlgFlashScaleNoBorder : "No Border", //MISSING
+DlgFlashScaleFit : "Exact Fit", //MISSING
+
+// Link Dialog
+DlgLnkWindowTitle : "Sambungan",
+DlgLnkInfoTab : "Butiran Sambungan",
+DlgLnkTargetTab : "Sasaran",
+
+DlgLnkType : "Jenis Sambungan",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Pautan dalam muka surat ini",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<lain-lain>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Sila pilih pautan",
+DlgLnkAnchorByName : "dengan menggunakan nama pautan",
+DlgLnkAnchorById : "dengan menggunakan ID elemen",
+DlgLnkNoAnchors : "(Tiada pautan terdapat dalam dokumen ini)",
+DlgLnkEMail : "Alamat E-Mail",
+DlgLnkEMailSubject : "Subjek Mesej",
+DlgLnkEMailBody : "Isi Kandungan Mesej",
+DlgLnkUpload : "Muat Naik",
+DlgLnkBtnUpload : "Hantar ke Server",
+
+DlgLnkTarget : "Sasaran",
+DlgLnkTargetFrame : "<bingkai>",
+DlgLnkTargetPopup : "<tetingkap popup>",
+DlgLnkTargetBlank : "Tetingkap Baru (_blank)",
+DlgLnkTargetParent : "Tetingkap Parent (_parent)",
+DlgLnkTargetSelf : "Tetingkap yang Sama (_self)",
+DlgLnkTargetTop : "Tetingkap yang paling atas (_top)",
+DlgLnkTargetFrameName : "Nama Bingkai Sasaran",
+DlgLnkPopWinName : "Nama Tetingkap Popup",
+DlgLnkPopWinFeat : "Ciri Tetingkap Popup",
+DlgLnkPopResize : "Saiz bolehubah",
+DlgLnkPopLocation : "Bar Lokasi",
+DlgLnkPopMenu : "Bar Menu",
+DlgLnkPopScroll : "Bar-bar skrol",
+DlgLnkPopStatus : "Bar Status",
+DlgLnkPopToolbar : "Toolbar",
+DlgLnkPopFullScrn : "Skrin Penuh (IE)",
+DlgLnkPopDependent : "Bergantungan (Netscape)",
+DlgLnkPopWidth : "Lebar",
+DlgLnkPopHeight : "Tinggi",
+DlgLnkPopLeft : "Posisi Kiri",
+DlgLnkPopTop : "Posisi Atas",
+
+DlnLnkMsgNoUrl : "Sila taip sambungan URL",
+DlnLnkMsgNoEMail : "Sila taip alamat e-mail",
+DlnLnkMsgNoAnchor : "Sila pilih pautan berkenaaan",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Pilihan Warna",
+DlgColorBtnClear : "Nyahwarna",
+DlgColorHighlight : "Terang",
+DlgColorSelected : "Dipilih",
+
+// Smiley Dialog
+DlgSmileyTitle : "Masukkan Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Sila pilih huruf istimewa",
+
+// Table Dialog
+DlgTableTitle : "Ciri-ciri Jadual",
+DlgTableRows : "Barisan",
+DlgTableColumns : "Jaluran",
+DlgTableBorder : "Saiz Border",
+DlgTableAlign : "Penjajaran",
+DlgTableAlignNotSet : "<Tidak diset>",
+DlgTableAlignLeft : "Kiri",
+DlgTableAlignCenter : "Tengah",
+DlgTableAlignRight : "Kanan",
+DlgTableWidth : "Lebar",
+DlgTableWidthPx : "piksel-piksel",
+DlgTableWidthPc : "peratus",
+DlgTableHeight : "Tinggi",
+DlgTableCellSpace : "Ruangan Antara Sel",
+DlgTableCellPad : "Tambahan Ruang Sel",
+DlgTableCaption : "Keterangan",
+DlgTableSummary : "Summary", //MISSING
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Ciri-ciri Sel",
+DlgCellWidth : "Lebar",
+DlgCellWidthPx : "piksel-piksel",
+DlgCellWidthPc : "peratus",
+DlgCellHeight : "Tinggi",
+DlgCellWordWrap : "Mengulung Perkataan",
+DlgCellWordWrapNotSet : "<Tidak diset>",
+DlgCellWordWrapYes : "Ya",
+DlgCellWordWrapNo : "Tidak",
+DlgCellHorAlign : "Jajaran Membujur",
+DlgCellHorAlignNotSet : "<Tidak diset>",
+DlgCellHorAlignLeft : "Kiri",
+DlgCellHorAlignCenter : "Tengah",
+DlgCellHorAlignRight: "Kanan",
+DlgCellVerAlign : "Jajaran Menegak",
+DlgCellVerAlignNotSet : "<Tidak diset>",
+DlgCellVerAlignTop : "Atas",
+DlgCellVerAlignMiddle : "Tengah",
+DlgCellVerAlignBottom : "Bawah",
+DlgCellVerAlignBaseline : "Garis Dasar",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Penggunaan Baris",
+DlgCellCollSpan : "Penggunaan Lajur",
+DlgCellBackColor : "Warna Latarbelakang",
+DlgCellBorderColor : "Warna Border",
+DlgCellBtnSelect : "Pilih...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Carian",
+DlgFindFindBtn : "Cari",
+DlgFindNotFoundMsg : "Text yang dicari tidak dijumpai.",
+
+// Replace Dialog
+DlgReplaceTitle : "Gantian",
+DlgReplaceFindLbl : "Perkataan yang dicari:",
+DlgReplaceReplaceLbl : "Diganti dengan:",
+DlgReplaceCaseChk : "Padanan case huruf",
+DlgReplaceReplaceBtn : "Ganti",
+DlgReplaceReplAllBtn : "Ganti semua",
+DlgReplaceWordChk : "Padana Keseluruhan perkataan",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl+X).",
+PasteErrorCopy : "Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl+C).",
+
+PasteAsText : "Tampal sebagai text biasa",
+PasteFromWord : "Tampal dari perisian \"Word\"",
+
+DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.", //MISSING
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING
+DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING
+
+// Color Picker
+ColorAutomatic : "Otomatik",
+ColorMoreColors : "Warna lain-lain...",
+
+// Document Properties
+DocProps : "Ciri-ciri dokumen",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ciri-ciri Pautan",
+DlgAnchorName : "Nama Pautan",
+DlgAnchorErrorName : "Sila taip nama pautan",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Tidak terdapat didalam kamus",
+DlgSpellChangeTo : "Tukarkan kepada",
+DlgSpellBtnIgnore : "Biar",
+DlgSpellBtnIgnoreAll : "Biarkan semua",
+DlgSpellBtnReplace : "Ganti",
+DlgSpellBtnReplaceAll : "Gantikan Semua",
+DlgSpellBtnUndo : "Batalkan",
+DlgSpellNoSuggestions : "- Tiada cadangan -",
+DlgSpellProgress : "Pemeriksaan ejaan sedang diproses...",
+DlgSpellNoMispell : "Pemeriksaan ejaan siap: Tiada salah ejaan",
+DlgSpellNoChanges : "Pemeriksaan ejaan siap: Tiada perkataan diubah",
+DlgSpellOneChange : "Pemeriksaan ejaan siap: Satu perkataan telah diubah",
+DlgSpellManyChanges : "Pemeriksaan ejaan siap: %1 perkataan diubah",
+
+IeSpellDownload : "Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?",
+
+// Button Dialog
+DlgButtonText : "Teks (Nilai)",
+DlgButtonType : "Jenis",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nama",
+DlgCheckboxValue : "Nilai",
+DlgCheckboxSelected : "Dipilih",
+
+// Form Dialog
+DlgFormName : "Nama",
+DlgFormAction : "Tindakan borang",
+DlgFormMethod : "Cara borang dihantar",
+
+// Select Field Dialog
+DlgSelectName : "Nama",
+DlgSelectValue : "Nilai",
+DlgSelectSize : "Saiz",
+DlgSelectLines : "garisan",
+DlgSelectChkMulti : "Benarkan pilihan pelbagai",
+DlgSelectOpAvail : "Pilihan sediada",
+DlgSelectOpText : "Teks",
+DlgSelectOpValue : "Nilai",
+DlgSelectBtnAdd : "Tambah Pilihan",
+DlgSelectBtnModify : "Ubah Pilihan",
+DlgSelectBtnUp : "Naik ke atas",
+DlgSelectBtnDown : "Turun ke bawah",
+DlgSelectBtnSetValue : "Set sebagai nilai terpilih",
+DlgSelectBtnDelete : "Padam",
+
+// Textarea Dialog
+DlgTextareaName : "Nama",
+DlgTextareaCols : "Lajur",
+DlgTextareaRows : "Baris",
+
+// Text Field Dialog
+DlgTextName : "Nama",
+DlgTextValue : "Nilai",
+DlgTextCharWidth : "Lebar isian",
+DlgTextMaxChars : "Isian Maksimum",
+DlgTextType : "Jenis",
+DlgTextTypeText : "Teks",
+DlgTextTypePass : "Kata Laluan",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nama",
+DlgHiddenValue : "Nilai",
+
+// Bulleted List Dialog
+BulletedListProp : "Ciri-ciri senarai berpeluru",
+NumberedListProp : "Ciri-ciri senarai bernombor",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Jenis",
+DlgLstTypeCircle : "Circle",
+DlgLstTypeDisc : "Disc", //MISSING
+DlgLstTypeSquare : "Square",
+DlgLstTypeNumbers : "Nombor-nombor (1, 2, 3)",
+DlgLstTypeLCase : "Huruf-huruf kecil (a, b, c)",
+DlgLstTypeUCase : "Huruf-huruf besar (A, B, C)",
+DlgLstTypeSRoman : "Nombor Roman Kecil (i, ii, iii)",
+DlgLstTypeLRoman : "Nombor Roman Besar (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Umum",
+DlgDocBackTab : "Latarbelakang",
+DlgDocColorsTab : "Warna dan margin",
+DlgDocMetaTab : "Data Meta",
+
+DlgDocPageTitle : "Tajuk Muka Surat",
+DlgDocLangDir : "Arah Tulisan",
+DlgDocLangDirLTR : "Kiri ke Kanan (LTR)",
+DlgDocLangDirRTL : "Kanan ke Kiri (RTL)",
+DlgDocLangCode : "Kod Bahasa",
+DlgDocCharSet : "Enkod Set Huruf",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Enkod Set Huruf yang Lain",
+
+DlgDocDocType : "Jenis Kepala Dokumen",
+DlgDocDocTypeOther : "Jenis Kepala Dokumen yang Lain",
+DlgDocIncXHTML : "Masukkan pemula kod XHTML",
+DlgDocBgColor : "Warna Latarbelakang",
+DlgDocBgImage : "URL Gambar Latarbelakang",
+DlgDocBgNoScroll : "Imej Latarbelakang tanpa Skrol",
+DlgDocCText : "Teks",
+DlgDocCLink : "Sambungan",
+DlgDocCVisited : "Sambungan telah Dilawati",
+DlgDocCActive : "Sambungan Aktif",
+DlgDocMargins : "Margin Muka Surat",
+DlgDocMaTop : "Atas",
+DlgDocMaLeft : "Kiri",
+DlgDocMaRight : "Kanan",
+DlgDocMaBottom : "Bawah",
+DlgDocMeIndex : "Kata Kunci Indeks Dokumen (dipisahkan oleh koma)",
+DlgDocMeDescr : "Keterangan Dokumen",
+DlgDocMeAuthor : "Penulis",
+DlgDocMeCopy : "Hakcipta",
+DlgDocPreview : "Prebiu",
+
+// Templates Dialog
+Templates : "Templat",
+DlgTemplatesTitle : "Templat Kandungan",
+DlgTemplatesSelMsg : "Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):",
+DlgTemplatesLoading : "Senarai Templat sedang diproses. Sila Tunggu...",
+DlgTemplatesNoTpl : "(Tiada Templat Disimpan)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "Tentang",
+DlgAboutBrowserInfoTab : "Maklumat Perisian Browser",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "versi",
+DlgAboutInfo : "Untuk maklumat lanjut sila pergi ke",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nb.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nb.js
new file mode 100644
index 0000000..fef2a7d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nb.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Norwegian Bokmål language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Skjul verktøylinje",
+ToolbarExpand : "Vis verktøylinje",
+
+// Toolbar Items and Context Menu
+Save : "Lagre",
+NewPage : "Ny Side",
+Preview : "Forhåndsvis",
+Cut : "Klipp ut",
+Copy : "Kopier",
+Paste : "Lim inn",
+PasteText : "Lim inn som ren tekst",
+PasteWord : "Lim inn fra Word",
+Print : "Skriv ut",
+SelectAll : "Merk alt",
+RemoveFormat : "Fjern format",
+InsertLinkLbl : "Lenke",
+InsertLink : "Sett inn/Rediger lenke",
+RemoveLink : "Fjern lenke",
+VisitLink : "Ã…pne lenke",
+Anchor : "Sett inn/Rediger anker",
+AnchorDelete : "Fjern anker",
+InsertImageLbl : "Bilde",
+InsertImage : "Sett inn/Rediger bilde",
+InsertFlashLbl : "Flash",
+InsertFlash : "Sett inn/Rediger Flash",
+InsertTableLbl : "Tabell",
+InsertTable : "Sett inn/Rediger tabell",
+InsertLineLbl : "Linje",
+InsertLine : "Sett inn horisontal linje",
+InsertSpecialCharLbl: "Spesielt tegn",
+InsertSpecialChar : "Sett inn spesielt tegn",
+InsertSmileyLbl : "Smil",
+InsertSmiley : "Sett inn smil",
+About : "Om FCKeditor",
+Bold : "Fet",
+Italic : "Kursiv",
+Underline : "Understrek",
+StrikeThrough : "Gjennomstrek",
+Subscript : "Senket skrift",
+Superscript : "Hevet skrift",
+LeftJustify : "Venstrejuster",
+CenterJustify : "Midtjuster",
+RightJustify : "Høyrejuster",
+BlockJustify : "Blokkjuster",
+DecreaseIndent : "Senk nivå",
+IncreaseIndent : "Øk nivå",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Angre",
+Redo : "Gjør om",
+NumberedListLbl : "Nummerert liste",
+NumberedList : "Sett inn/Fjern nummerert liste",
+BulletedListLbl : "Uordnet liste",
+BulletedList : "Sett inn/Fjern uordnet liste",
+ShowTableBorders : "Vis tabellrammer",
+ShowDetails : "Vis detaljer",
+Style : "Stil",
+FontFormat : "Format",
+Font : "Skrift",
+FontSize : "Størrelse",
+TextColor : "Tekstfarge",
+BGColor : "Bakgrunnsfarge",
+Source : "Kilde",
+Find : "Søk",
+Replace : "Erstatt",
+SpellCheck : "Stavekontroll",
+UniversalKeyboard : "Universelt tastatur",
+PageBreakLbl : "Sideskift",
+PageBreak : "Sett inn sideskift",
+
+Form : "Skjema",
+Checkbox : "Avmerkingsboks",
+RadioButton : "Alternativknapp",
+TextField : "Tekstboks",
+Textarea : "Tekstområde",
+HiddenField : "Skjult felt",
+Button : "Knapp",
+SelectionField : "Rullegardinliste",
+ImageButton : "Bildeknapp",
+
+FitWindow : "Maksimer størrelsen på redigeringsverktøyet",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Rediger lenke",
+CellCM : "Celle",
+RowCM : "Rader",
+ColumnCM : "Kolonne",
+InsertRowAfter : "Sett inn rad etter",
+InsertRowBefore : "Sett inn rad før",
+DeleteRows : "Slett rader",
+InsertColumnAfter : "Sett inn kolonne etter",
+InsertColumnBefore : "Sett inn kolonne før",
+DeleteColumns : "Slett kolonner",
+InsertCellAfter : "Sett inn celle etter",
+InsertCellBefore : "Sett inn celle før",
+DeleteCells : "Slett celler",
+MergeCells : "Slå sammen celler",
+MergeRight : "Slå sammen høyre",
+MergeDown : "Slå sammen ned",
+HorizontalSplitCell : "Del celle horisontalt",
+VerticalSplitCell : "Del celle vertikalt",
+TableDelete : "Slett tabell",
+CellProperties : "Egenskaper for celle",
+TableProperties : "Egenskaper for tabell",
+ImageProperties : "Egenskaper for bilde",
+FlashProperties : "Egenskaper for Flash-objekt",
+
+AnchorProp : "Egenskaper for anker",
+ButtonProp : "Egenskaper for knapp",
+CheckboxProp : "Egenskaper for avmerkingsboks",
+HiddenFieldProp : "Egenskaper for skjult felt",
+RadioButtonProp : "Egenskaper for alternativknapp",
+ImageButtonProp : "Egenskaper for bildeknapp",
+TextFieldProp : "Egenskaper for tekstfelt",
+SelectionFieldProp : "Egenskaper for rullegardinliste",
+TextareaProp : "Egenskaper for tekstområde",
+FormProp : "Egenskaper for skjema",
+
+FontFormats : "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Lager XHTML. Vennligst vent...",
+Done : "Ferdig",
+PasteWordConfirm : "Teksten du prøver å lime inn ser ut som om den kommer fra Word. Vil du rense den for unødvendig kode før du limer inn?",
+NotCompatiblePaste : "Denne kommandoen er kun tilgjenglig for Internet Explorer versjon 5.5 eller bedre. Vil du fortsette uten å rense? (Du kan lime inn som ren tekst)",
+UnknownToolbarItem : "Ukjent menyvalg \"%1\"",
+UnknownCommand : "Ukjent kommando \"%1\"",
+NotImplemented : "Kommando ikke implimentert",
+UnknownToolbarSet : "Verktøylinjesett \"%1\" finnes ikke",
+NoActiveX : "Din nettlesers sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveX-kontroller og plugin-modeller\". Du kan oppleve feil og advarsler om manglende funksjoner",
+BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Sjekk at popup-blokkering er deaktivert.",
+DialogBlocked : "Kunne ikke åpne dialogboksen. Sjekk at popup-blokkering er deaktivert.",
+VisitLinkBlocked : "Kunne ikke åpne et nytt vindu. Sjekk at popup-blokkering er deaktivert.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Avbryt",
+DlgBtnClose : "Lukk",
+DlgBtnBrowseServer : "Bla igjennom server",
+DlgAdvancedTag : "Avansert",
+DlgOpOther : "<Annet>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Vennligst skriv inn URL-en",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ikke satt>",
+DlgGenId : "Id",
+DlgGenLangDir : "Språkretning",
+DlgGenLangDirLtr : "Venstre til høyre (VTH)",
+DlgGenLangDirRtl : "Høyre til venstre (HTV)",
+DlgGenLangCode : "Språkkode",
+DlgGenAccessKey : "Aksessknapp",
+DlgGenName : "Navn",
+DlgGenTabIndex : "Tab Indeks",
+DlgGenLongDescr : "Utvidet beskrivelse",
+DlgGenClass : "Stilarkklasser",
+DlgGenTitle : "Tittel",
+DlgGenContType : "Type",
+DlgGenLinkCharset : "Lenket språkkart",
+DlgGenStyle : "Stil",
+
+// Image Dialog
+DlgImgTitle : "Bildeegenskaper",
+DlgImgInfoTab : "Bildeinformasjon",
+DlgImgBtnUpload : "Send det til serveren",
+DlgImgURL : "URL",
+DlgImgUpload : "Last opp",
+DlgImgAlt : "Alternativ tekst",
+DlgImgWidth : "Bredde",
+DlgImgHeight : "Høyde",
+DlgImgLockRatio : "LÃ¥s forhold",
+DlgBtnResetSize : "Tilbakestill størrelse",
+DlgImgBorder : "Ramme",
+DlgImgHSpace : "HMarg",
+DlgImgVSpace : "VMarg",
+DlgImgAlign : "Juster",
+DlgImgAlignLeft : "Venstre",
+DlgImgAlignAbsBottom: "Abs bunn",
+DlgImgAlignAbsMiddle: "Abs midten",
+DlgImgAlignBaseline : "Bunnlinje",
+DlgImgAlignBottom : "Bunn",
+DlgImgAlignMiddle : "Midten",
+DlgImgAlignRight : "Høyre",
+DlgImgAlignTextTop : "Tekst topp",
+DlgImgAlignTop : "Topp",
+DlgImgPreview : "Forhåndsvis",
+DlgImgAlertUrl : "Vennligst skriv bilde-urlen",
+DlgImgLinkTab : "Lenke",
+
+// Flash Dialog
+DlgFlashTitle : "Flash-egenskaper",
+DlgFlashChkPlay : "Autospill",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Slå på Flash-meny",
+DlgFlashScale : "Skaler",
+DlgFlashScaleAll : "Vis alt",
+DlgFlashScaleNoBorder : "Ingen ramme",
+DlgFlashScaleFit : "Skaler til å passe",
+
+// Link Dialog
+DlgLnkWindowTitle : "Lenke",
+DlgLnkInfoTab : "Lenkeinfo",
+DlgLnkTargetTab : "MÃ¥l",
+
+DlgLnkType : "Lenketype",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Lenke til anker i teksten",
+DlgLnkTypeEMail : "E-post",
+DlgLnkProto : "Protokoll",
+DlgLnkProtoOther : "<annet>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Velg et anker",
+DlgLnkAnchorByName : "Anker etter navn",
+DlgLnkAnchorById : "Element etter ID",
+DlgLnkNoAnchors : "(Ingen anker i dokumentet)",
+DlgLnkEMail : "E-postadresse",
+DlgLnkEMailSubject : "Meldingsemne",
+DlgLnkEMailBody : "Melding",
+DlgLnkUpload : "Last opp",
+DlgLnkBtnUpload : "Send til server",
+
+DlgLnkTarget : "MÃ¥l",
+DlgLnkTargetFrame : "<ramme>",
+DlgLnkTargetPopup : "<popup vindu>",
+DlgLnkTargetBlank : "Nytt vindu (_blank)",
+DlgLnkTargetParent : "Foreldrevindu (_parent)",
+DlgLnkTargetSelf : "Samme vindu (_self)",
+DlgLnkTargetTop : "Hele vindu (_top)",
+DlgLnkTargetFrameName : "MÃ¥lramme",
+DlgLnkPopWinName : "Navn på popup-vindus",
+DlgLnkPopWinFeat : "Egenskaper for popup-vindu",
+DlgLnkPopResize : "Endre størrelse",
+DlgLnkPopLocation : "Adresselinje",
+DlgLnkPopMenu : "Menylinje",
+DlgLnkPopScroll : "Scrollbar",
+DlgLnkPopStatus : "Statuslinje",
+DlgLnkPopToolbar : "Verktøylinje",
+DlgLnkPopFullScrn : "Full skjerm (IE)",
+DlgLnkPopDependent : "Avhenging (Netscape)",
+DlgLnkPopWidth : "Bredde",
+DlgLnkPopHeight : "Høyde",
+DlgLnkPopLeft : "Venstre posisjon",
+DlgLnkPopTop : "Topp-posisjon",
+
+DlnLnkMsgNoUrl : "Vennligst skriv inn lenkens url",
+DlnLnkMsgNoEMail : "Vennligst skriv inn e-postadressen",
+DlnLnkMsgNoAnchor : "Vennligst velg et anker",
+DlnLnkMsgInvPopName : "Popup-vinduets navn må begynne med en bokstav, og kan ikke inneholde mellomrom",
+
+// Color Dialog
+DlgColorTitle : "Velg farge",
+DlgColorBtnClear : "Tøm",
+DlgColorHighlight : "Marker",
+DlgColorSelected : "Valgt",
+
+// Smiley Dialog
+DlgSmileyTitle : "Sett inn smil",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Velg spesielt tegn",
+
+// Table Dialog
+DlgTableTitle : "Egenskaper for tabell",
+DlgTableRows : "Rader",
+DlgTableColumns : "Kolonner",
+DlgTableBorder : "Rammestørrelse",
+DlgTableAlign : "Justering",
+DlgTableAlignNotSet : "<Ikke satt>",
+DlgTableAlignLeft : "Venstre",
+DlgTableAlignCenter : "Midtjuster",
+DlgTableAlignRight : "Høyre",
+DlgTableWidth : "Bredde",
+DlgTableWidthPx : "piksler",
+DlgTableWidthPc : "prosent",
+DlgTableHeight : "Høyde",
+DlgTableCellSpace : "Cellemarg",
+DlgTableCellPad : "Cellepolstring",
+DlgTableCaption : "Tittel",
+DlgTableSummary : "Sammendrag",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Celleegenskaper",
+DlgCellWidth : "Bredde",
+DlgCellWidthPx : "piksler",
+DlgCellWidthPc : "prosent",
+DlgCellHeight : "Høyde",
+DlgCellWordWrap : "Tekstbrytning",
+DlgCellWordWrapNotSet : "<Ikke satt>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nei",
+DlgCellHorAlign : "Horisontal justering",
+DlgCellHorAlignNotSet : "<Ikke satt>",
+DlgCellHorAlignLeft : "Venstre",
+DlgCellHorAlignCenter : "Midtjuster",
+DlgCellHorAlignRight: "Høyre",
+DlgCellVerAlign : "Vertikal justering",
+DlgCellVerAlignNotSet : "<Ikke satt>",
+DlgCellVerAlignTop : "Topp",
+DlgCellVerAlignMiddle : "Midten",
+DlgCellVerAlignBottom : "Bunn",
+DlgCellVerAlignBaseline : "Bunnlinje",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Radspenn",
+DlgCellCollSpan : "Kolonnespenn",
+DlgCellBackColor : "Bakgrunnsfarge",
+DlgCellBorderColor : "Rammefarge",
+DlgCellBtnSelect : "Velg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Søk og erstatt",
+
+// Find Dialog
+DlgFindTitle : "Søk",
+DlgFindFindBtn : "Søk",
+DlgFindNotFoundMsg : "Fant ikke søketeksten.",
+
+// Replace Dialog
+DlgReplaceTitle : "Erstatt",
+DlgReplaceFindLbl : "Søk etter:",
+DlgReplaceReplaceLbl : "Erstatt med:",
+DlgReplaceCaseChk : "Skill mellom store og små bokstaver",
+DlgReplaceReplaceBtn : "Erstatt",
+DlgReplaceReplAllBtn : "Erstatt alle",
+DlgReplaceWordChk : "Bare hele ord",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).",
+PasteErrorCopy : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).",
+
+PasteAsText : "Lim inn som ren tekst",
+PasteFromWord : "Lim inn fra Word",
+
+DlgPasteMsg2 : "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.",
+DlgPasteSec : "Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.",
+DlgPasteIgnoreFont : "Fjern skrifttyper",
+DlgPasteRemoveStyles : "Fjern stildefinisjoner",
+
+// Color Picker
+ColorAutomatic : "Automatisk",
+ColorMoreColors : "Flere farger...",
+
+// Document Properties
+DocProps : "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ankeregenskaper",
+DlgAnchorName : "Ankernavn",
+DlgAnchorErrorName : "Vennligst skriv inn ankernavnet",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ikke i ordboken",
+DlgSpellChangeTo : "Endre til",
+DlgSpellBtnIgnore : "Ignorer",
+DlgSpellBtnIgnoreAll : "Ignorer alle",
+DlgSpellBtnReplace : "Erstatt",
+DlgSpellBtnReplaceAll : "Erstatt alle",
+DlgSpellBtnUndo : "Angre",
+DlgSpellNoSuggestions : "- Ingen forslag -",
+DlgSpellProgress : "Stavekontroll pågår...",
+DlgSpellNoMispell : "Stavekontroll fullført: ingen feilstavinger funnet",
+DlgSpellNoChanges : "Stavekontroll fullført: ingen ord endret",
+DlgSpellOneChange : "Stavekontroll fullført: Ett ord endret",
+DlgSpellManyChanges : "Stavekontroll fullført: %1 ord endret",
+
+IeSpellDownload : "Stavekontroll er ikke installert. Vil du laste den ned nå?",
+
+// Button Dialog
+DlgButtonText : "Tekst (verdi)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Knapp",
+DlgButtonTypeSbm : "Send",
+DlgButtonTypeRst : "Nullstill",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Navn",
+DlgCheckboxValue : "Verdi",
+DlgCheckboxSelected : "Valgt",
+
+// Form Dialog
+DlgFormName : "Navn",
+DlgFormAction : "Handling",
+DlgFormMethod : "Metode",
+
+// Select Field Dialog
+DlgSelectName : "Navn",
+DlgSelectValue : "Verdi",
+DlgSelectSize : "Størrelse",
+DlgSelectLines : "Linjer",
+DlgSelectChkMulti : "Tillat flervalg",
+DlgSelectOpAvail : "Tilgjenglige alternativer",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Verdi",
+DlgSelectBtnAdd : "Legg til",
+DlgSelectBtnModify : "Endre",
+DlgSelectBtnUp : "Opp",
+DlgSelectBtnDown : "Ned",
+DlgSelectBtnSetValue : "Sett som valgt",
+DlgSelectBtnDelete : "Slett",
+
+// Textarea Dialog
+DlgTextareaName : "Navn",
+DlgTextareaCols : "Kolonner",
+DlgTextareaRows : "Rader",
+
+// Text Field Dialog
+DlgTextName : "Navn",
+DlgTextValue : "Verdi",
+DlgTextCharWidth : "Tegnbredde",
+DlgTextMaxChars : "Maks antall tegn",
+DlgTextType : "Type",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Passord",
+
+// Hidden Field Dialog
+DlgHiddenName : "Navn",
+DlgHiddenValue : "Verdi",
+
+// Bulleted List Dialog
+BulletedListProp : "Egenskaper for uordnet liste",
+NumberedListProp : "Egenskaper for ordnet liste",
+DlgLstStart : "Start",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Sirkel",
+DlgLstTypeDisc : "Hel sirkel",
+DlgLstTypeSquare : "Firkant",
+DlgLstTypeNumbers : "Numre (1, 2, 3)",
+DlgLstTypeLCase : "Små bokstaver (a, b, c)",
+DlgLstTypeUCase : "Store bokstaver (A, B, C)",
+DlgLstTypeSRoman : "Små romerske tall (i, ii, iii)",
+DlgLstTypeLRoman : "Store romerske tall (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Generelt",
+DlgDocBackTab : "Bakgrunn",
+DlgDocColorsTab : "Farger og marginer",
+DlgDocMetaTab : "Meta-data",
+
+DlgDocPageTitle : "Sidetittel",
+DlgDocLangDir : "Språkretning",
+DlgDocLangDirLTR : "Venstre til høyre (LTR)",
+DlgDocLangDirRTL : "Høyre til venstre (RTL)",
+DlgDocLangCode : "Språkkode",
+DlgDocCharSet : "Tegnsett",
+DlgDocCharSetCE : "Sentraleuropeisk",
+DlgDocCharSetCT : "Tradisonell kinesisk(Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Gresk",
+DlgDocCharSetJP : "Japansk",
+DlgDocCharSetKR : "Koreansk",
+DlgDocCharSetTR : "Tyrkisk",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Vesteuropeisk",
+DlgDocCharSetOther : "Annet tegnsett",
+
+DlgDocDocType : "Dokumenttype header",
+DlgDocDocTypeOther : "Annet dokumenttype header",
+DlgDocIncXHTML : "Inkluder XHTML-deklarasjon",
+DlgDocBgColor : "Bakgrunnsfarge",
+DlgDocBgImage : "URL for bakgrunnsbilde",
+DlgDocBgNoScroll : "LÃ¥s bakgrunnsbilde",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Besøkt lenke",
+DlgDocCActive : "Aktiv lenke",
+DlgDocMargins : "Sidemargin",
+DlgDocMaTop : "Topp",
+DlgDocMaLeft : "Venstre",
+DlgDocMaRight : "Høyre",
+DlgDocMaBottom : "Bunn",
+DlgDocMeIndex : "Dokument nøkkelord (kommaseparert)",
+DlgDocMeDescr : "Dokumentbeskrivelse",
+DlgDocMeAuthor : "Forfatter",
+DlgDocMeCopy : "Kopirett",
+DlgDocPreview : "Forhåndsvising",
+
+// Templates Dialog
+Templates : "Maler",
+DlgTemplatesTitle : "Innholdsmaler",
+DlgTemplatesSelMsg : "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):",
+DlgTemplatesLoading : "Laster malliste. Vennligst vent...",
+DlgTemplatesNoTpl : "(Ingen maler definert)",
+DlgTemplatesReplace : "Erstatt faktisk innold",
+
+// About Dialog
+DlgAboutAboutTab : "Om",
+DlgAboutBrowserInfoTab : "Nettleserinfo",
+DlgAboutLicenseTab : "Lisens",
+DlgAboutVersion : "versjon",
+DlgAboutInfo : "For mer informasjon, se",
+
+// Div Dialog
+DlgDivGeneralTab : "Generelt",
+DlgDivAdvancedTab : "Avansert",
+DlgDivStyle : "Stil",
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nl.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nl.js
new file mode 100644
index 0000000..1adb834
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nl.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dutch language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Menubalk inklappen",
+ToolbarExpand : "Menubalk uitklappen",
+
+// Toolbar Items and Context Menu
+Save : "Opslaan",
+NewPage : "Nieuwe pagina",
+Preview : "Voorbeeld",
+Cut : "Knippen",
+Copy : "Kopiëren",
+Paste : "Plakken",
+PasteText : "Plakken als platte tekst",
+PasteWord : "Plakken als Word-gegevens",
+Print : "Printen",
+SelectAll : "Alles selecteren",
+RemoveFormat : "Opmaak verwijderen",
+InsertLinkLbl : "Link",
+InsertLink : "Link invoegen/wijzigen",
+RemoveLink : "Link verwijderen",
+VisitLink : "Link volgen",
+Anchor : "Interne link",
+AnchorDelete : "Anker verwijderen",
+InsertImageLbl : "Afbeelding",
+InsertImage : "Afbeelding invoegen/wijzigen",
+InsertFlashLbl : "Flash",
+InsertFlash : "Flash invoegen/wijzigen",
+InsertTableLbl : "Tabel",
+InsertTable : "Tabel invoegen/wijzigen",
+InsertLineLbl : "Lijn",
+InsertLine : "Horizontale lijn invoegen",
+InsertSpecialCharLbl: "Speciale tekens",
+InsertSpecialChar : "Speciaal teken invoegen",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Smiley invoegen",
+About : "Over FCKeditor",
+Bold : "Vet",
+Italic : "Schuingedrukt",
+Underline : "Onderstreept",
+StrikeThrough : "Doorhalen",
+Subscript : "Subscript",
+Superscript : "Superscript",
+LeftJustify : "Links uitlijnen",
+CenterJustify : "Centreren",
+RightJustify : "Rechts uitlijnen",
+BlockJustify : "Uitvullen",
+DecreaseIndent : "Inspringen verkleinen",
+IncreaseIndent : "Inspringen vergroten",
+Blockquote : "Citaatblok",
+CreateDiv : "DIV aanmaken",
+EditDiv : "DIV wijzigen",
+DeleteDiv : "DIV verwijderen",
+Undo : "Ongedaan maken",
+Redo : "Opnieuw uitvoeren",
+NumberedListLbl : "Genummerde lijst",
+NumberedList : "Genummerde lijst invoegen/verwijderen",
+BulletedListLbl : "Opsomming",
+BulletedList : "Opsomming invoegen/verwijderen",
+ShowTableBorders : "Randen tabel weergeven",
+ShowDetails : "Details weergeven",
+Style : "Stijl",
+FontFormat : "Opmaak",
+Font : "Lettertype",
+FontSize : "Grootte",
+TextColor : "Tekstkleur",
+BGColor : "Achtergrondkleur",
+Source : "Code",
+Find : "Zoeken",
+Replace : "Vervangen",
+SpellCheck : "Spellingscontrole",
+UniversalKeyboard : "Universeel toetsenbord",
+PageBreakLbl : "Pagina-einde",
+PageBreak : "Pagina-einde invoegen",
+
+Form : "Formulier",
+Checkbox : "Aanvinkvakje",
+RadioButton : "Selectievakje",
+TextField : "Tekstveld",
+Textarea : "Tekstvak",
+HiddenField : "Verborgen veld",
+Button : "Knop",
+SelectionField : "Selectieveld",
+ImageButton : "Afbeeldingsknop",
+
+FitWindow : "De editor maximaliseren",
+ShowBlocks : "Toon blokken",
+
+// Context Menu
+EditLink : "Link wijzigen",
+CellCM : "Cel",
+RowCM : "Rij",
+ColumnCM : "Kolom",
+InsertRowAfter : "Voeg rij in achter",
+InsertRowBefore : "Voeg rij in voor",
+DeleteRows : "Rijen verwijderen",
+InsertColumnAfter : "Voeg kolom in achter",
+InsertColumnBefore : "Voeg kolom in voor",
+DeleteColumns : "Kolommen verwijderen",
+InsertCellAfter : "Voeg cel in achter",
+InsertCellBefore : "Voeg cel in voor",
+DeleteCells : "Cellen verwijderen",
+MergeCells : "Cellen samenvoegen",
+MergeRight : "Voeg samen naar rechts",
+MergeDown : "Voeg samen naar beneden",
+HorizontalSplitCell : "Splits cellen horizontaal",
+VerticalSplitCell : "Splits cellen verticaal",
+TableDelete : "Tabel verwijderen",
+CellProperties : "Eigenschappen cel",
+TableProperties : "Eigenschappen tabel",
+ImageProperties : "Eigenschappen afbeelding",
+FlashProperties : "Eigenschappen Flash",
+
+AnchorProp : "Eigenschappen interne link",
+ButtonProp : "Eigenschappen knop",
+CheckboxProp : "Eigenschappen aanvinkvakje",
+HiddenFieldProp : "Eigenschappen verborgen veld",
+RadioButtonProp : "Eigenschappen selectievakje",
+ImageButtonProp : "Eigenschappen afbeeldingsknop",
+TextFieldProp : "Eigenschappen tekstveld",
+SelectionFieldProp : "Eigenschappen selectieveld",
+TextareaProp : "Eigenschappen tekstvak",
+FormProp : "Eigenschappen formulier",
+
+FontFormats : "Normaal;Met opmaak;Adres;Kop 1;Kop 2;Kop 3;Kop 4;Kop 5;Kop 6;Normaal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Bezig met verwerken XHTML. Even geduld aub...",
+Done : "Klaar",
+PasteWordConfirm : "De tekst die u plakte lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?",
+NotCompatiblePaste : "Deze opdracht is beschikbaar voor Internet Explorer versie 5.5 of hoger. Wilt u plakken zonder op te schonen?",
+UnknownToolbarItem : "Onbekend item op menubalk \"%1\"",
+UnknownCommand : "Onbekende opdrachtnaam: \"%1\"",
+NotImplemented : "Opdracht niet geïmplementeerd.",
+UnknownToolbarSet : "Menubalk \"%1\" bestaat niet.",
+NoActiveX : "De beveilingsinstellingen van uw browser zouden sommige functies van de editor kunnen beperken. De optie \"Activeer ActiveX-elementen en plug-ins\" dient ingeschakeld te worden. Het kan zijn dat er nu functies ontbreken of niet werken.",
+BrowseServerBlocked : "De bestandsbrowser kon niet geopend worden. Zorg ervoor dat pop-up-blokkeerders uit staan.",
+DialogBlocked : "Kan het dialoogvenster niet weergeven. Zorg ervoor dat pop-up-blokkeerders uit staan.",
+VisitLinkBlocked : "Het was niet mogelijk een nieuw venster te openen. Controleer of er geen pop-up-blocker aktief is.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Annuleren",
+DlgBtnClose : "Afsluiten",
+DlgBtnBrowseServer : "Bladeren op server",
+DlgAdvancedTag : "Geavanceerd",
+DlgOpOther : "<Anders>",
+DlgInfoTab : "Informatie",
+DlgAlertUrl : "Geef URL op",
+
+// General Dialogs Labels
+DlgGenNotSet : "<niet ingevuld>",
+DlgGenId : "Kenmerk",
+DlgGenLangDir : "Schrijfrichting",
+DlgGenLangDirLtr : "Links naar rechts (LTR)",
+DlgGenLangDirRtl : "Rechts naar links (RTL)",
+DlgGenLangCode : "Taalcode",
+DlgGenAccessKey : "Toegangstoets",
+DlgGenName : "Naam",
+DlgGenTabIndex : "Tabvolgorde",
+DlgGenLongDescr : "Lange URL-omschrijving",
+DlgGenClass : "Stylesheet-klassen",
+DlgGenTitle : "Aanbevolen titel",
+DlgGenContType : "Aanbevolen content-type",
+DlgGenLinkCharset : "Karakterset van gelinkte bron",
+DlgGenStyle : "Stijl",
+
+// Image Dialog
+DlgImgTitle : "Eigenschappen afbeelding",
+DlgImgInfoTab : "Informatie afbeelding",
+DlgImgBtnUpload : "Naar server verzenden",
+DlgImgURL : "URL",
+DlgImgUpload : "Upload",
+DlgImgAlt : "Alternatieve tekst",
+DlgImgWidth : "Breedte",
+DlgImgHeight : "Hoogte",
+DlgImgLockRatio : "Afmetingen vergrendelen",
+DlgBtnResetSize : "Afmetingen resetten",
+DlgImgBorder : "Rand",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Uitlijning",
+DlgImgAlignLeft : "Links",
+DlgImgAlignAbsBottom: "Absoluut-onder",
+DlgImgAlignAbsMiddle: "Absoluut-midden",
+DlgImgAlignBaseline : "Basislijn",
+DlgImgAlignBottom : "Beneden",
+DlgImgAlignMiddle : "Midden",
+DlgImgAlignRight : "Rechts",
+DlgImgAlignTextTop : "Boven tekst",
+DlgImgAlignTop : "Boven",
+DlgImgPreview : "Voorbeeld",
+DlgImgAlertUrl : "Geef de URL van de afbeelding",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Eigenschappen Flash",
+DlgFlashChkPlay : "Automatisch afspelen",
+DlgFlashChkLoop : "Herhalen",
+DlgFlashChkMenu : "Flashmenu\'s inschakelen",
+DlgFlashScale : "Schaal",
+DlgFlashScaleAll : "Alles tonen",
+DlgFlashScaleNoBorder : "Geen rand",
+DlgFlashScaleFit : "Precies passend",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Linkomschrijving",
+DlgLnkTargetTab : "Doel",
+
+DlgLnkType : "Linktype",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Interne link in pagina",
+DlgLnkTypeEMail : "E-mail",
+DlgLnkProto : "Protocol",
+DlgLnkProtoOther : "<anders>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Kies een interne link",
+DlgLnkAnchorByName : "Op naam interne link",
+DlgLnkAnchorById : "Op kenmerk interne link",
+DlgLnkNoAnchors : "(Geen interne links in document gevonden)",
+DlgLnkEMail : "E-mailadres",
+DlgLnkEMailSubject : "Onderwerp bericht",
+DlgLnkEMailBody : "Inhoud bericht",
+DlgLnkUpload : "Upload",
+DlgLnkBtnUpload : "Naar de server versturen",
+
+DlgLnkTarget : "Doel",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<popup window>",
+DlgLnkTargetBlank : "Nieuw venster (_blank)",
+DlgLnkTargetParent : "Origineel venster (_parent)",
+DlgLnkTargetSelf : "Zelfde venster (_self)",
+DlgLnkTargetTop : "Hele venster (_top)",
+DlgLnkTargetFrameName : "Naam doelframe",
+DlgLnkPopWinName : "Naam popupvenster",
+DlgLnkPopWinFeat : "Instellingen popupvenster",
+DlgLnkPopResize : "Grootte wijzigen",
+DlgLnkPopLocation : "Locatiemenu",
+DlgLnkPopMenu : "Menubalk",
+DlgLnkPopScroll : "Schuifbalken",
+DlgLnkPopStatus : "Statusbalk",
+DlgLnkPopToolbar : "Menubalk",
+DlgLnkPopFullScrn : "Volledig scherm (IE)",
+DlgLnkPopDependent : "Afhankelijk (Netscape)",
+DlgLnkPopWidth : "Breedte",
+DlgLnkPopHeight : "Hoogte",
+DlgLnkPopLeft : "Positie links",
+DlgLnkPopTop : "Positie boven",
+
+DlnLnkMsgNoUrl : "Geef de link van de URL",
+DlnLnkMsgNoEMail : "Geef een e-mailadres",
+DlnLnkMsgNoAnchor : "Selecteer een interne link",
+DlnLnkMsgInvPopName : "De naam van de popup moet met een alfa-numerieke waarde beginnen, en mag geen spaties bevatten.",
+
+// Color Dialog
+DlgColorTitle : "Selecteer kleur",
+DlgColorBtnClear : "Opschonen",
+DlgColorHighlight : "Accentueren",
+DlgColorSelected : "Geselecteerd",
+
+// Smiley Dialog
+DlgSmileyTitle : "Smiley invoegen",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Selecteer speciaal teken",
+
+// Table Dialog
+DlgTableTitle : "Eigenschappen tabel",
+DlgTableRows : "Rijen",
+DlgTableColumns : "Kolommen",
+DlgTableBorder : "Breedte rand",
+DlgTableAlign : "Uitlijning",
+DlgTableAlignNotSet : "<Niet ingevoerd>",
+DlgTableAlignLeft : "Links",
+DlgTableAlignCenter : "Centreren",
+DlgTableAlignRight : "Rechts",
+DlgTableWidth : "Breedte",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "procent",
+DlgTableHeight : "Hoogte",
+DlgTableCellSpace : "Afstand tussen cellen",
+DlgTableCellPad : "Afstand vanaf rand cel",
+DlgTableCaption : "Naam",
+DlgTableSummary : "Samenvatting",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Eigenschappen cel",
+DlgCellWidth : "Breedte",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "procent",
+DlgCellHeight : "Hoogte",
+DlgCellWordWrap : "Afbreken woorden",
+DlgCellWordWrapNotSet : "<Niet ingevoerd>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nee",
+DlgCellHorAlign : "Horizontale uitlijning",
+DlgCellHorAlignNotSet : "<Niet ingevoerd>",
+DlgCellHorAlignLeft : "Links",
+DlgCellHorAlignCenter : "Centreren",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign : "Verticale uitlijning",
+DlgCellVerAlignNotSet : "<Niet ingevoerd>",
+DlgCellVerAlignTop : "Boven",
+DlgCellVerAlignMiddle : "Midden",
+DlgCellVerAlignBottom : "Beneden",
+DlgCellVerAlignBaseline : "Basislijn",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Overkoepeling rijen",
+DlgCellCollSpan : "Overkoepeling kolommen",
+DlgCellBackColor : "Achtergrondkleur",
+DlgCellBorderColor : "Randkleur",
+DlgCellBtnSelect : "Selecteren...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Zoeken en vervangen",
+
+// Find Dialog
+DlgFindTitle : "Zoeken",
+DlgFindFindBtn : "Zoeken",
+DlgFindNotFoundMsg : "De opgegeven tekst is niet gevonden.",
+
+// Replace Dialog
+DlgReplaceTitle : "Vervangen",
+DlgReplaceFindLbl : "Zoeken naar:",
+DlgReplaceReplaceLbl : "Vervangen met:",
+DlgReplaceCaseChk : "Hoofdlettergevoelig",
+DlgReplaceReplaceBtn : "Vervangen",
+DlgReplaceReplAllBtn : "Alles vervangen",
+DlgReplaceWordChk : "Hele woord moet voorkomen",
+
+// Paste Operations / Dialog
+PasteErrorCut : "De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl+X van het toetsenbord.",
+PasteErrorCopy : "De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl+C van het toetsenbord.",
+
+PasteAsText : "Plakken als platte tekst",
+PasteFromWord : "Plakken als Word-gegevens",
+
+DlgPasteMsg2 : "Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl+V</strong>) en klik op <strong>OK</strong>.",
+DlgPasteSec : "Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.",
+DlgPasteIgnoreFont : "Negeer \"Font Face\"-definities",
+DlgPasteRemoveStyles : "Verwijder \"Style\"-definities",
+
+// Color Picker
+ColorAutomatic : "Automatisch",
+ColorMoreColors : "Meer kleuren...",
+
+// Document Properties
+DocProps : "Eigenschappen document",
+
+// Anchor Dialog
+DlgAnchorTitle : "Eigenschappen interne link",
+DlgAnchorName : "Naam interne link",
+DlgAnchorErrorName : "Geef de naam van de interne link op",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Niet in het woordenboek",
+DlgSpellChangeTo : "Wijzig in",
+DlgSpellBtnIgnore : "Negeren",
+DlgSpellBtnIgnoreAll : "Alles negeren",
+DlgSpellBtnReplace : "Vervangen",
+DlgSpellBtnReplaceAll : "Alles vervangen",
+DlgSpellBtnUndo : "Ongedaan maken",
+DlgSpellNoSuggestions : "-Geen suggesties-",
+DlgSpellProgress : "Bezig met spellingscontrole...",
+DlgSpellNoMispell : "Klaar met spellingscontrole: geen fouten gevonden",
+DlgSpellNoChanges : "Klaar met spellingscontrole: geen woorden aangepast",
+DlgSpellOneChange : "Klaar met spellingscontrole: één woord aangepast",
+DlgSpellManyChanges : "Klaar met spellingscontrole: %1 woorden aangepast",
+
+IeSpellDownload : "De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?",
+
+// Button Dialog
+DlgButtonText : "Tekst (waarde)",
+DlgButtonType : "Soort",
+DlgButtonTypeBtn : "Knop",
+DlgButtonTypeSbm : "Versturen",
+DlgButtonTypeRst : "Leegmaken",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Naam",
+DlgCheckboxValue : "Waarde",
+DlgCheckboxSelected : "Geselecteerd",
+
+// Form Dialog
+DlgFormName : "Naam",
+DlgFormAction : "Actie",
+DlgFormMethod : "Methode",
+
+// Select Field Dialog
+DlgSelectName : "Naam",
+DlgSelectValue : "Waarde",
+DlgSelectSize : "Grootte",
+DlgSelectLines : "Regels",
+DlgSelectChkMulti : "Gecombineerde selecties toestaan",
+DlgSelectOpAvail : "Beschikbare opties",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Waarde",
+DlgSelectBtnAdd : "Toevoegen",
+DlgSelectBtnModify : "Wijzigen",
+DlgSelectBtnUp : "Omhoog",
+DlgSelectBtnDown : "Omlaag",
+DlgSelectBtnSetValue : "Als geselecteerde waarde instellen",
+DlgSelectBtnDelete : "Verwijderen",
+
+// Textarea Dialog
+DlgTextareaName : "Naam",
+DlgTextareaCols : "Kolommen",
+DlgTextareaRows : "Rijen",
+
+// Text Field Dialog
+DlgTextName : "Naam",
+DlgTextValue : "Waarde",
+DlgTextCharWidth : "Breedte (tekens)",
+DlgTextMaxChars : "Maximum aantal tekens",
+DlgTextType : "Soort",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Wachtwoord",
+
+// Hidden Field Dialog
+DlgHiddenName : "Naam",
+DlgHiddenValue : "Waarde",
+
+// Bulleted List Dialog
+BulletedListProp : "Eigenschappen opsommingslijst",
+NumberedListProp : "Eigenschappen genummerde opsommingslijst",
+DlgLstStart : "Start",
+DlgLstType : "Soort",
+DlgLstTypeCircle : "Cirkel",
+DlgLstTypeDisc : "Schijf",
+DlgLstTypeSquare : "Vierkant",
+DlgLstTypeNumbers : "Nummers (1, 2, 3)",
+DlgLstTypeLCase : "Kleine letters (a, b, c)",
+DlgLstTypeUCase : "Hoofdletters (A, B, C)",
+DlgLstTypeSRoman : "Klein Romeins (i, ii, iii)",
+DlgLstTypeLRoman : "Groot Romeins (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Algemeen",
+DlgDocBackTab : "Achtergrond",
+DlgDocColorsTab : "Kleuring en marges",
+DlgDocMetaTab : "META-data",
+
+DlgDocPageTitle : "Paginatitel",
+DlgDocLangDir : "Schrijfrichting",
+DlgDocLangDirLTR : "Links naar rechts",
+DlgDocLangDirRTL : "Rechts naar links",
+DlgDocLangCode : "Taalcode",
+DlgDocCharSet : "Karakterset-encoding",
+DlgDocCharSetCE : "Centraal Europees",
+DlgDocCharSetCT : "Traditioneel Chinees (Big5)",
+DlgDocCharSetCR : "Cyriliaans",
+DlgDocCharSetGR : "Grieks",
+DlgDocCharSetJP : "Japans",
+DlgDocCharSetKR : "Koreaans",
+DlgDocCharSetTR : "Turks",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "West europees",
+DlgDocCharSetOther : "Andere karakterset-encoding",
+
+DlgDocDocType : "Opschrift documentsoort",
+DlgDocDocTypeOther : "Ander opschrift documentsoort",
+DlgDocIncXHTML : "XHTML-declaraties meenemen",
+DlgDocBgColor : "Achtergrondkleur",
+DlgDocBgImage : "URL achtergrondplaatje",
+DlgDocBgNoScroll : "Vaste achtergrond",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Bezochte link",
+DlgDocCActive : "Active link",
+DlgDocMargins : "Afstandsinstellingen document",
+DlgDocMaTop : "Boven",
+DlgDocMaLeft : "Links",
+DlgDocMaRight : "Rechts",
+DlgDocMaBottom : "Onder",
+DlgDocMeIndex : "Trefwoorden betreffende document (kommagescheiden)",
+DlgDocMeDescr : "Beschrijving document",
+DlgDocMeAuthor : "Auteur",
+DlgDocMeCopy : "Copyright",
+DlgDocPreview : "Voorbeeld",
+
+// Templates Dialog
+Templates : "Sjablonen",
+DlgTemplatesTitle : "Inhoud sjabonen",
+DlgTemplatesSelMsg : "Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):",
+DlgTemplatesLoading : "Bezig met laden sjabonen. Even geduld alstublieft...",
+DlgTemplatesNoTpl : "(Geen sjablonen gedefinieerd)",
+DlgTemplatesReplace : "Vervang de huidige inhoud",
+
+// About Dialog
+DlgAboutAboutTab : "Over",
+DlgAboutBrowserInfoTab : "Browserinformatie",
+DlgAboutLicenseTab : "Licentie",
+DlgAboutVersion : "Versie",
+DlgAboutInfo : "Voor meer informatie ga naar ",
+
+// Div Dialog
+DlgDivGeneralTab : "Algemeen",
+DlgDivAdvancedTab : "Geavanceerd",
+DlgDivStyle : "Style",
+DlgDivInlineStyle : "Inline Style"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/no.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/no.js
new file mode 100644
index 0000000..600d7bd
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/no.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Norwegian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Skjul verktøylinje",
+ToolbarExpand : "Vis verktøylinje",
+
+// Toolbar Items and Context Menu
+Save : "Lagre",
+NewPage : "Ny Side",
+Preview : "Forhåndsvis",
+Cut : "Klipp ut",
+Copy : "Kopier",
+Paste : "Lim inn",
+PasteText : "Lim inn som ren tekst",
+PasteWord : "Lim inn fra Word",
+Print : "Skriv ut",
+SelectAll : "Merk alt",
+RemoveFormat : "Fjern format",
+InsertLinkLbl : "Lenke",
+InsertLink : "Sett inn/Rediger lenke",
+RemoveLink : "Fjern lenke",
+VisitLink : "Ã…pne lenke",
+Anchor : "Sett inn/Rediger anker",
+AnchorDelete : "Fjern anker",
+InsertImageLbl : "Bilde",
+InsertImage : "Sett inn/Rediger bilde",
+InsertFlashLbl : "Flash",
+InsertFlash : "Sett inn/Rediger Flash",
+InsertTableLbl : "Tabell",
+InsertTable : "Sett inn/Rediger tabell",
+InsertLineLbl : "Linje",
+InsertLine : "Sett inn horisontal linje",
+InsertSpecialCharLbl: "Spesielt tegn",
+InsertSpecialChar : "Sett inn spesielt tegn",
+InsertSmileyLbl : "Smil",
+InsertSmiley : "Sett inn smil",
+About : "Om FCKeditor",
+Bold : "Fet",
+Italic : "Kursiv",
+Underline : "Understrek",
+StrikeThrough : "Gjennomstrek",
+Subscript : "Senket skrift",
+Superscript : "Hevet skrift",
+LeftJustify : "Venstrejuster",
+CenterJustify : "Midtjuster",
+RightJustify : "Høyrejuster",
+BlockJustify : "Blokkjuster",
+DecreaseIndent : "Senk nivå",
+IncreaseIndent : "Øk nivå",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Angre",
+Redo : "Gjør om",
+NumberedListLbl : "Nummerert liste",
+NumberedList : "Sett inn/Fjern nummerert liste",
+BulletedListLbl : "Uordnet liste",
+BulletedList : "Sett inn/Fjern uordnet liste",
+ShowTableBorders : "Vis tabellrammer",
+ShowDetails : "Vis detaljer",
+Style : "Stil",
+FontFormat : "Format",
+Font : "Skrift",
+FontSize : "Størrelse",
+TextColor : "Tekstfarge",
+BGColor : "Bakgrunnsfarge",
+Source : "Kilde",
+Find : "Søk",
+Replace : "Erstatt",
+SpellCheck : "Stavekontroll",
+UniversalKeyboard : "Universelt tastatur",
+PageBreakLbl : "Sideskift",
+PageBreak : "Sett inn sideskift",
+
+Form : "Skjema",
+Checkbox : "Avmerkingsboks",
+RadioButton : "Alternativknapp",
+TextField : "Tekstboks",
+Textarea : "Tekstområde",
+HiddenField : "Skjult felt",
+Button : "Knapp",
+SelectionField : "Rullegardinliste",
+ImageButton : "Bildeknapp",
+
+FitWindow : "Maksimer størrelsen på redigeringsverktøyet",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Rediger lenke",
+CellCM : "Celle",
+RowCM : "Rader",
+ColumnCM : "Kolonne",
+InsertRowAfter : "Sett inn rad etter",
+InsertRowBefore : "Sett inn rad før",
+DeleteRows : "Slett rader",
+InsertColumnAfter : "Sett inn kolonne etter",
+InsertColumnBefore : "Sett inn kolonne før",
+DeleteColumns : "Slett kolonner",
+InsertCellAfter : "Sett inn celle etter",
+InsertCellBefore : "Sett inn celle før",
+DeleteCells : "Slett celler",
+MergeCells : "Slå sammen celler",
+MergeRight : "Slå sammen høyre",
+MergeDown : "Slå sammen ned",
+HorizontalSplitCell : "Del celle horisontalt",
+VerticalSplitCell : "Del celle vertikalt",
+TableDelete : "Slett tabell",
+CellProperties : "Egenskaper for celle",
+TableProperties : "Egenskaper for tabell",
+ImageProperties : "Egenskaper for bilde",
+FlashProperties : "Egenskaper for Flash-objekt",
+
+AnchorProp : "Egenskaper for anker",
+ButtonProp : "Egenskaper for knapp",
+CheckboxProp : "Egenskaper for avmerkingsboks",
+HiddenFieldProp : "Egenskaper for skjult felt",
+RadioButtonProp : "Egenskaper for alternativknapp",
+ImageButtonProp : "Egenskaper for bildeknapp",
+TextFieldProp : "Egenskaper for tekstfelt",
+SelectionFieldProp : "Egenskaper for rullegardinliste",
+TextareaProp : "Egenskaper for tekstområde",
+FormProp : "Egenskaper for skjema",
+
+FontFormats : "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Lager XHTML. Vennligst vent...",
+Done : "Ferdig",
+PasteWordConfirm : "Teksten du prøver å lime inn ser ut som om den kommer fra Word. Vil du rense den for unødvendig kode før du limer inn?",
+NotCompatiblePaste : "Denne kommandoen er kun tilgjenglig for Internet Explorer versjon 5.5 eller bedre. Vil du fortsette uten å rense? (Du kan lime inn som ren tekst)",
+UnknownToolbarItem : "Ukjent menyvalg \"%1\"",
+UnknownCommand : "Ukjent kommando \"%1\"",
+NotImplemented : "Kommando ikke implimentert",
+UnknownToolbarSet : "Verktøylinjesett \"%1\" finnes ikke",
+NoActiveX : "Din nettlesers sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveX-kontroller og plugin-modeller\". Du kan oppleve feil og advarsler om manglende funksjoner",
+BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Sjekk at popup-blokkering er deaktivert.",
+DialogBlocked : "Kunne ikke åpne dialogboksen. Sjekk at popup-blokkering er deaktivert.",
+VisitLinkBlocked : "Kunne ikke åpne et nytt vindu. Sjekk at popup-blokkering er deaktivert.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Avbryt",
+DlgBtnClose : "Lukk",
+DlgBtnBrowseServer : "Bla igjennom server",
+DlgAdvancedTag : "Avansert",
+DlgOpOther : "<Annet>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Vennligst skriv inn URL-en",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ikke satt>",
+DlgGenId : "Id",
+DlgGenLangDir : "Språkretning",
+DlgGenLangDirLtr : "Venstre til høyre (VTH)",
+DlgGenLangDirRtl : "Høyre til venstre (HTV)",
+DlgGenLangCode : "Språkkode",
+DlgGenAccessKey : "Aksessknapp",
+DlgGenName : "Navn",
+DlgGenTabIndex : "Tab Indeks",
+DlgGenLongDescr : "Utvidet beskrivelse",
+DlgGenClass : "Stilarkklasser",
+DlgGenTitle : "Tittel",
+DlgGenContType : "Type",
+DlgGenLinkCharset : "Lenket språkkart",
+DlgGenStyle : "Stil",
+
+// Image Dialog
+DlgImgTitle : "Bildeegenskaper",
+DlgImgInfoTab : "Bildeinformasjon",
+DlgImgBtnUpload : "Send det til serveren",
+DlgImgURL : "URL",
+DlgImgUpload : "Last opp",
+DlgImgAlt : "Alternativ tekst",
+DlgImgWidth : "Bredde",
+DlgImgHeight : "Høyde",
+DlgImgLockRatio : "LÃ¥s forhold",
+DlgBtnResetSize : "Tilbakestill størrelse",
+DlgImgBorder : "Ramme",
+DlgImgHSpace : "HMarg",
+DlgImgVSpace : "VMarg",
+DlgImgAlign : "Juster",
+DlgImgAlignLeft : "Venstre",
+DlgImgAlignAbsBottom: "Abs bunn",
+DlgImgAlignAbsMiddle: "Abs midten",
+DlgImgAlignBaseline : "Bunnlinje",
+DlgImgAlignBottom : "Bunn",
+DlgImgAlignMiddle : "Midten",
+DlgImgAlignRight : "Høyre",
+DlgImgAlignTextTop : "Tekst topp",
+DlgImgAlignTop : "Topp",
+DlgImgPreview : "Forhåndsvis",
+DlgImgAlertUrl : "Vennligst skriv bilde-urlen",
+DlgImgLinkTab : "Lenke",
+
+// Flash Dialog
+DlgFlashTitle : "Flash-egenskaper",
+DlgFlashChkPlay : "Autospill",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Slå på Flash-meny",
+DlgFlashScale : "Skaler",
+DlgFlashScaleAll : "Vis alt",
+DlgFlashScaleNoBorder : "Ingen ramme",
+DlgFlashScaleFit : "Skaler til å passe",
+
+// Link Dialog
+DlgLnkWindowTitle : "Lenke",
+DlgLnkInfoTab : "Lenkeinfo",
+DlgLnkTargetTab : "MÃ¥l",
+
+DlgLnkType : "Lenketype",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Lenke til anker i teksten",
+DlgLnkTypeEMail : "E-post",
+DlgLnkProto : "Protokoll",
+DlgLnkProtoOther : "<annet>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Velg et anker",
+DlgLnkAnchorByName : "Anker etter navn",
+DlgLnkAnchorById : "Element etter ID",
+DlgLnkNoAnchors : "(Ingen anker i dokumentet)",
+DlgLnkEMail : "E-postadresse",
+DlgLnkEMailSubject : "Meldingsemne",
+DlgLnkEMailBody : "Melding",
+DlgLnkUpload : "Last opp",
+DlgLnkBtnUpload : "Send til server",
+
+DlgLnkTarget : "MÃ¥l",
+DlgLnkTargetFrame : "<ramme>",
+DlgLnkTargetPopup : "<popup vindu>",
+DlgLnkTargetBlank : "Nytt vindu (_blank)",
+DlgLnkTargetParent : "Foreldrevindu (_parent)",
+DlgLnkTargetSelf : "Samme vindu (_self)",
+DlgLnkTargetTop : "Hele vindu (_top)",
+DlgLnkTargetFrameName : "MÃ¥lramme",
+DlgLnkPopWinName : "Navn på popup-vindus",
+DlgLnkPopWinFeat : "Egenskaper for popup-vindu",
+DlgLnkPopResize : "Endre størrelse",
+DlgLnkPopLocation : "Adresselinje",
+DlgLnkPopMenu : "Menylinje",
+DlgLnkPopScroll : "Scrollbar",
+DlgLnkPopStatus : "Statuslinje",
+DlgLnkPopToolbar : "Verktøylinje",
+DlgLnkPopFullScrn : "Full skjerm (IE)",
+DlgLnkPopDependent : "Avhenging (Netscape)",
+DlgLnkPopWidth : "Bredde",
+DlgLnkPopHeight : "Høyde",
+DlgLnkPopLeft : "Venstre posisjon",
+DlgLnkPopTop : "Topp-posisjon",
+
+DlnLnkMsgNoUrl : "Vennligst skriv inn lenkens url",
+DlnLnkMsgNoEMail : "Vennligst skriv inn e-postadressen",
+DlnLnkMsgNoAnchor : "Vennligst velg et anker",
+DlnLnkMsgInvPopName : "Popup-vinduets navn må begynne med en bokstav, og kan ikke inneholde mellomrom",
+
+// Color Dialog
+DlgColorTitle : "Velg farge",
+DlgColorBtnClear : "Tøm",
+DlgColorHighlight : "Marker",
+DlgColorSelected : "Valgt",
+
+// Smiley Dialog
+DlgSmileyTitle : "Sett inn smil",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Velg spesielt tegn",
+
+// Table Dialog
+DlgTableTitle : "Egenskaper for tabell",
+DlgTableRows : "Rader",
+DlgTableColumns : "Kolonner",
+DlgTableBorder : "Rammestørrelse",
+DlgTableAlign : "Justering",
+DlgTableAlignNotSet : "<Ikke satt>",
+DlgTableAlignLeft : "Venstre",
+DlgTableAlignCenter : "Midtjuster",
+DlgTableAlignRight : "Høyre",
+DlgTableWidth : "Bredde",
+DlgTableWidthPx : "piksler",
+DlgTableWidthPc : "prosent",
+DlgTableHeight : "Høyde",
+DlgTableCellSpace : "Cellemarg",
+DlgTableCellPad : "Cellepolstring",
+DlgTableCaption : "Tittel",
+DlgTableSummary : "Sammendrag",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Celleegenskaper",
+DlgCellWidth : "Bredde",
+DlgCellWidthPx : "piksler",
+DlgCellWidthPc : "prosent",
+DlgCellHeight : "Høyde",
+DlgCellWordWrap : "Tekstbrytning",
+DlgCellWordWrapNotSet : "<Ikke satt>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nei",
+DlgCellHorAlign : "Horisontal justering",
+DlgCellHorAlignNotSet : "<Ikke satt>",
+DlgCellHorAlignLeft : "Venstre",
+DlgCellHorAlignCenter : "Midtjuster",
+DlgCellHorAlignRight: "Høyre",
+DlgCellVerAlign : "Vertikal justering",
+DlgCellVerAlignNotSet : "<Ikke satt>",
+DlgCellVerAlignTop : "Topp",
+DlgCellVerAlignMiddle : "Midten",
+DlgCellVerAlignBottom : "Bunn",
+DlgCellVerAlignBaseline : "Bunnlinje",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Radspenn",
+DlgCellCollSpan : "Kolonnespenn",
+DlgCellBackColor : "Bakgrunnsfarge",
+DlgCellBorderColor : "Rammefarge",
+DlgCellBtnSelect : "Velg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Søk og erstatt",
+
+// Find Dialog
+DlgFindTitle : "Søk",
+DlgFindFindBtn : "Søk",
+DlgFindNotFoundMsg : "Fant ikke søketeksten.",
+
+// Replace Dialog
+DlgReplaceTitle : "Erstatt",
+DlgReplaceFindLbl : "Søk etter:",
+DlgReplaceReplaceLbl : "Erstatt med:",
+DlgReplaceCaseChk : "Skill mellom store og små bokstaver",
+DlgReplaceReplaceBtn : "Erstatt",
+DlgReplaceReplAllBtn : "Erstatt alle",
+DlgReplaceWordChk : "Bare hele ord",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).",
+PasteErrorCopy : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).",
+
+PasteAsText : "Lim inn som ren tekst",
+PasteFromWord : "Lim inn fra Word",
+
+DlgPasteMsg2 : "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.",
+DlgPasteSec : "Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.",
+DlgPasteIgnoreFont : "Fjern skrifttyper",
+DlgPasteRemoveStyles : "Fjern stildefinisjoner",
+
+// Color Picker
+ColorAutomatic : "Automatisk",
+ColorMoreColors : "Flere farger...",
+
+// Document Properties
+DocProps : "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ankeregenskaper",
+DlgAnchorName : "Ankernavn",
+DlgAnchorErrorName : "Vennligst skriv inn ankernavnet",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ikke i ordboken",
+DlgSpellChangeTo : "Endre til",
+DlgSpellBtnIgnore : "Ignorer",
+DlgSpellBtnIgnoreAll : "Ignorer alle",
+DlgSpellBtnReplace : "Erstatt",
+DlgSpellBtnReplaceAll : "Erstatt alle",
+DlgSpellBtnUndo : "Angre",
+DlgSpellNoSuggestions : "- Ingen forslag -",
+DlgSpellProgress : "Stavekontroll pågår...",
+DlgSpellNoMispell : "Stavekontroll fullført: ingen feilstavinger funnet",
+DlgSpellNoChanges : "Stavekontroll fullført: ingen ord endret",
+DlgSpellOneChange : "Stavekontroll fullført: Ett ord endret",
+DlgSpellManyChanges : "Stavekontroll fullført: %1 ord endret",
+
+IeSpellDownload : "Stavekontroll er ikke installert. Vil du laste den ned nå?",
+
+// Button Dialog
+DlgButtonText : "Tekst (verdi)",
+DlgButtonType : "Type",
+DlgButtonTypeBtn : "Knapp",
+DlgButtonTypeSbm : "Send",
+DlgButtonTypeRst : "Nullstill",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Navn",
+DlgCheckboxValue : "Verdi",
+DlgCheckboxSelected : "Valgt",
+
+// Form Dialog
+DlgFormName : "Navn",
+DlgFormAction : "Handling",
+DlgFormMethod : "Metode",
+
+// Select Field Dialog
+DlgSelectName : "Navn",
+DlgSelectValue : "Verdi",
+DlgSelectSize : "Størrelse",
+DlgSelectLines : "Linjer",
+DlgSelectChkMulti : "Tillat flervalg",
+DlgSelectOpAvail : "Tilgjenglige alternativer",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Verdi",
+DlgSelectBtnAdd : "Legg til",
+DlgSelectBtnModify : "Endre",
+DlgSelectBtnUp : "Opp",
+DlgSelectBtnDown : "Ned",
+DlgSelectBtnSetValue : "Sett som valgt",
+DlgSelectBtnDelete : "Slett",
+
+// Textarea Dialog
+DlgTextareaName : "Navn",
+DlgTextareaCols : "Kolonner",
+DlgTextareaRows : "Rader",
+
+// Text Field Dialog
+DlgTextName : "Navn",
+DlgTextValue : "Verdi",
+DlgTextCharWidth : "Tegnbredde",
+DlgTextMaxChars : "Maks antall tegn",
+DlgTextType : "Type",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Passord",
+
+// Hidden Field Dialog
+DlgHiddenName : "Navn",
+DlgHiddenValue : "Verdi",
+
+// Bulleted List Dialog
+BulletedListProp : "Egenskaper for uordnet liste",
+NumberedListProp : "Egenskaper for ordnet liste",
+DlgLstStart : "Start",
+DlgLstType : "Type",
+DlgLstTypeCircle : "Sirkel",
+DlgLstTypeDisc : "Hel sirkel",
+DlgLstTypeSquare : "Firkant",
+DlgLstTypeNumbers : "Numre (1, 2, 3)",
+DlgLstTypeLCase : "Små bokstaver (a, b, c)",
+DlgLstTypeUCase : "Store bokstaver (A, B, C)",
+DlgLstTypeSRoman : "Små romerske tall (i, ii, iii)",
+DlgLstTypeLRoman : "Store romerske tall (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Generelt",
+DlgDocBackTab : "Bakgrunn",
+DlgDocColorsTab : "Farger og marginer",
+DlgDocMetaTab : "Meta-data",
+
+DlgDocPageTitle : "Sidetittel",
+DlgDocLangDir : "Språkretning",
+DlgDocLangDirLTR : "Venstre til høyre (LTR)",
+DlgDocLangDirRTL : "Høyre til venstre (RTL)",
+DlgDocLangCode : "Språkkode",
+DlgDocCharSet : "Tegnsett",
+DlgDocCharSetCE : "Sentraleuropeisk",
+DlgDocCharSetCT : "Tradisonell kinesisk(Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Gresk",
+DlgDocCharSetJP : "Japansk",
+DlgDocCharSetKR : "Koreansk",
+DlgDocCharSetTR : "Tyrkisk",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Vesteuropeisk",
+DlgDocCharSetOther : "Annet tegnsett",
+
+DlgDocDocType : "Dokumenttype header",
+DlgDocDocTypeOther : "Annet dokumenttype header",
+DlgDocIncXHTML : "Inkluder XHTML-deklarasjon",
+DlgDocBgColor : "Bakgrunnsfarge",
+DlgDocBgImage : "URL for bakgrunnsbilde",
+DlgDocBgNoScroll : "LÃ¥s bakgrunnsbilde",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Besøkt lenke",
+DlgDocCActive : "Aktiv lenke",
+DlgDocMargins : "Sidemargin",
+DlgDocMaTop : "Topp",
+DlgDocMaLeft : "Venstre",
+DlgDocMaRight : "Høyre",
+DlgDocMaBottom : "Bunn",
+DlgDocMeIndex : "Dokument nøkkelord (kommaseparert)",
+DlgDocMeDescr : "Dokumentbeskrivelse",
+DlgDocMeAuthor : "Forfatter",
+DlgDocMeCopy : "Kopirett",
+DlgDocPreview : "Forhåndsvising",
+
+// Templates Dialog
+Templates : "Maler",
+DlgTemplatesTitle : "Innholdsmaler",
+DlgTemplatesSelMsg : "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):",
+DlgTemplatesLoading : "Laster malliste. Vennligst vent...",
+DlgTemplatesNoTpl : "(Ingen maler definert)",
+DlgTemplatesReplace : "Erstatt faktisk innold",
+
+// About Dialog
+DlgAboutAboutTab : "Om",
+DlgAboutBrowserInfoTab : "Nettleserinfo",
+DlgAboutLicenseTab : "Lisens",
+DlgAboutVersion : "versjon",
+DlgAboutInfo : "For mer informasjon, se",
+
+// Div Dialog
+DlgDivGeneralTab : "Generelt",
+DlgDivAdvancedTab : "Avansert",
+DlgDivStyle : "Stil",
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pl.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pl.js
new file mode 100644
index 0000000..de1bc3b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pl.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Polish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Zwiń pasek narzędzi",
+ToolbarExpand : "Rozwiń pasek narzędzi",
+
+// Toolbar Items and Context Menu
+Save : "Zapisz",
+NewPage : "Nowa strona",
+Preview : "PodglÄ…d",
+Cut : "Wytnij",
+Copy : "Kopiuj",
+Paste : "Wklej",
+PasteText : "Wklej jako czysty tekst",
+PasteWord : "Wklej z Worda",
+Print : "Drukuj",
+SelectAll : "Zaznacz wszystko",
+RemoveFormat : "Usuń formatowanie",
+InsertLinkLbl : "Hiperłącze",
+InsertLink : "Wstaw/edytuj hiperłącze",
+RemoveLink : "Usuń hiperłącze",
+VisitLink : "Open Link", //MISSING
+Anchor : "Wstaw/edytuj kotwicÄ™",
+AnchorDelete : "Usuń kotwicę",
+InsertImageLbl : "Obrazek",
+InsertImage : "Wstaw/edytuj obrazek",
+InsertFlashLbl : "Flash",
+InsertFlash : "Dodaj/Edytuj element Flash",
+InsertTableLbl : "Tabela",
+InsertTable : "Wstaw/edytuj tabelÄ™",
+InsertLineLbl : "Linia pozioma",
+InsertLine : "Wstaw poziomÄ… liniÄ™",
+InsertSpecialCharLbl: "Znak specjalny",
+InsertSpecialChar : "Wstaw znak specjalny",
+InsertSmileyLbl : "Emotikona",
+InsertSmiley : "Wstaw emotikonÄ™",
+About : "O programie FCKeditor",
+Bold : "Pogrubienie",
+Italic : "Kursywa",
+Underline : "Podkreślenie",
+StrikeThrough : "Przekreślenie",
+Subscript : "Indeks dolny",
+Superscript : "Indeks górny",
+LeftJustify : "Wyrównaj do lewej",
+CenterJustify : "Wyrównaj do środka",
+RightJustify : "Wyrównaj do prawej",
+BlockJustify : "Wyrównaj do lewej i prawej",
+DecreaseIndent : "Zmniejsz wcięcie",
+IncreaseIndent : "Zwiększ wcięcie",
+Blockquote : "Cytat",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Cofnij",
+Redo : "Ponów",
+NumberedListLbl : "Lista numerowana",
+NumberedList : "Wstaw/usuń numerowanie listy",
+BulletedListLbl : "Lista wypunktowana",
+BulletedList : "Wstaw/usuń wypunktowanie listy",
+ShowTableBorders : "Pokazuj ramkÄ™ tabeli",
+ShowDetails : "Pokaż szczegóły",
+Style : "Styl",
+FontFormat : "Format",
+Font : "Czcionka",
+FontSize : "Rozmiar",
+TextColor : "Kolor tekstu",
+BGColor : "Kolor tła",
+Source : "Źródło dokumentu",
+Find : "Znajdź",
+Replace : "Zamień",
+SpellCheck : "Sprawdź pisownię",
+UniversalKeyboard : "Klawiatura Uniwersalna",
+PageBreakLbl : "Odstęp",
+PageBreak : "Wstaw odstęp",
+
+Form : "Formularz",
+Checkbox : "Pole wyboru (checkbox)",
+RadioButton : "Pole wyboru (radio)",
+TextField : "Pole tekstowe",
+Textarea : "Obszar tekstowy",
+HiddenField : "Pole ukryte",
+Button : "Przycisk",
+SelectionField : "Lista wyboru",
+ImageButton : "Przycisk-obrazek",
+
+FitWindow : "Maksymalizuj rozmiar edytora",
+ShowBlocks : "Pokaż bloki",
+
+// Context Menu
+EditLink : "Edytuj hiperłącze",
+CellCM : "Komórka",
+RowCM : "Wiersz",
+ColumnCM : "Kolumna",
+InsertRowAfter : "Wstaw wiersz poniżej",
+InsertRowBefore : "Wstaw wiersz powyżej",
+DeleteRows : "Usuń wiersze",
+InsertColumnAfter : "Wstaw kolumnÄ™ z prawej",
+InsertColumnBefore : "Wstaw kolumnÄ™ z lewej",
+DeleteColumns : "Usuń kolumny",
+InsertCellAfter : "Wstaw komórkę z prawej",
+InsertCellBefore : "Wstaw komórkę z lewej",
+DeleteCells : "Usuń komórki",
+MergeCells : "Połącz komórki",
+MergeRight : "Połącz z komórką z prawej",
+MergeDown : "Połącz z komórką poniżej",
+HorizontalSplitCell : "Podziel komórkę poziomo",
+VerticalSplitCell : "Podziel komórkę pionowo",
+TableDelete : "Usuń tabelę",
+CellProperties : "Właściwości komórki",
+TableProperties : "Właściwości tabeli",
+ImageProperties : "Właściwości obrazka",
+FlashProperties : "Właściwości elementu Flash",
+
+AnchorProp : "Właściwości kotwicy",
+ButtonProp : "Właściwości przycisku",
+CheckboxProp : "Właściwości pola wyboru (checkbox)",
+HiddenFieldProp : "Właściwości pola ukrytego",
+RadioButtonProp : "Właściwości pola wyboru (radio)",
+ImageButtonProp : "Właściwości przycisku obrazka",
+TextFieldProp : "Właściwości pola tekstowego",
+SelectionFieldProp : "Właściwości listy wyboru",
+TextareaProp : "Właściwości obszaru tekstowego",
+FormProp : "Właściwości formularza",
+
+FontFormats : "Normalny;Tekst sformatowany;Adres;Nagłówek 1;Nagłówek 2;Nagłówek 3;Nagłówek 4;Nagłówek 5;Nagłówek 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Przetwarzanie XHTML. Proszę czekać...",
+Done : "Gotowe",
+PasteWordConfirm : "Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Word. Czy chcesz go wyczyścic przed wklejeniem?",
+NotCompatiblePaste : "Ta funkcja jest dostępna w programie Internet Explorer w wersji 5.5 lub wyższej. Czy chcesz wkleić tekst bez czyszczenia?",
+UnknownToolbarItem : "Nieznany element paska narzędzi \"%1\"",
+UnknownCommand : "Nieznana komenda \"%1\"",
+NotImplemented : "Komenda niezaimplementowana",
+UnknownToolbarSet : "Pasek narzędzi \"%1\" nie istnieje",
+NoActiveX : "Ustawienia zabezpieczeń twojej przeglądarki mogą ograniczyć niektóre funkcje edytora. Musisz włączyć opcję \"Uruchamianie formantów Activex i dodatków plugin\". W przeciwnym wypadku mogą pojawiać się błędy.",
+BrowseServerBlocked : "Nie można otworzyć okno menadżera plików. Upewnij się, że wszystkie blokady wyskakujących okienek są wyłączone.",
+DialogBlocked : "Nie można otworzyć okna dialogowego. Upewnij się, że wszystkie blokady wyskakujących okienek są wyłączone.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Anuluj",
+DlgBtnClose : "Zamknij",
+DlgBtnBrowseServer : "PrzeglÄ…daj",
+DlgAdvancedTag : "Zaawansowane",
+DlgOpOther : "<Inny>",
+DlgInfoTab : "Informacje",
+DlgAlertUrl : "Proszę podać URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nie ustawione>",
+DlgGenId : "Id",
+DlgGenLangDir : "Kierunek tekstu",
+DlgGenLangDirLtr : "Od lewej do prawej (LTR)",
+DlgGenLangDirRtl : "Od prawej do lewej (RTL)",
+DlgGenLangCode : "Kod języka",
+DlgGenAccessKey : "Klawisz dostępu",
+DlgGenName : "Nazwa",
+DlgGenTabIndex : "Indeks tabeli",
+DlgGenLongDescr : "Długi opis hiperłącza",
+DlgGenClass : "Nazwa klasy CSS",
+DlgGenTitle : "Opis obiektu docelowego",
+DlgGenContType : "Typ MIME obiektu docelowego",
+DlgGenLinkCharset : "Kodowanie znaków obiektu docelowego",
+DlgGenStyle : "Styl",
+
+// Image Dialog
+DlgImgTitle : "Właściwości obrazka",
+DlgImgInfoTab : "Informacje o obrazku",
+DlgImgBtnUpload : "Wyślij",
+DlgImgURL : "Adres URL",
+DlgImgUpload : "Wyślij",
+DlgImgAlt : "Tekst zastępczy",
+DlgImgWidth : "Szerokość",
+DlgImgHeight : "Wysokość",
+DlgImgLockRatio : "Zablokuj proporcje",
+DlgBtnResetSize : "Przywróć rozmiar",
+DlgImgBorder : "Ramka",
+DlgImgHSpace : "Odstęp poziomy",
+DlgImgVSpace : "Odstęp pionowy",
+DlgImgAlign : "Wyrównaj",
+DlgImgAlignLeft : "Do lewej",
+DlgImgAlignAbsBottom: "Do dołu",
+DlgImgAlignAbsMiddle: "Do środka w pionie",
+DlgImgAlignBaseline : "Do linii bazowej",
+DlgImgAlignBottom : "Do dołu",
+DlgImgAlignMiddle : "Do środka",
+DlgImgAlignRight : "Do prawej",
+DlgImgAlignTextTop : "Do góry tekstu",
+DlgImgAlignTop : "Do góry",
+DlgImgPreview : "PodglÄ…d",
+DlgImgAlertUrl : "Podaj adres obrazka.",
+DlgImgLinkTab : "Hiperłącze",
+
+// Flash Dialog
+DlgFlashTitle : "Właściwości elementu Flash",
+DlgFlashChkPlay : "Auto Odtwarzanie",
+DlgFlashChkLoop : "Pętla",
+DlgFlashChkMenu : "WÅ‚Ä…cz menu",
+DlgFlashScale : "Skaluj",
+DlgFlashScaleAll : "Pokaż wszystko",
+DlgFlashScaleNoBorder : "Bez Ramki",
+DlgFlashScaleFit : "Dokładne dopasowanie",
+
+// Link Dialog
+DlgLnkWindowTitle : "Hiperłącze",
+DlgLnkInfoTab : "Informacje ",
+DlgLnkTargetTab : "Cel",
+
+DlgLnkType : "Typ hiperłącza",
+DlgLnkTypeURL : "Adres URL",
+DlgLnkTypeAnchor : "Odnośnik wewnątrz strony",
+DlgLnkTypeEMail : "Adres e-mail",
+DlgLnkProto : "Protokół",
+DlgLnkProtoOther : "<inny>",
+DlgLnkURL : "Adres URL",
+DlgLnkAnchorSel : "Wybierz etykietÄ™",
+DlgLnkAnchorByName : "Wg etykiety",
+DlgLnkAnchorById : "Wg identyfikatora elementu",
+DlgLnkNoAnchors : "(W dokumencie nie zdefiniowano żadnych etykiet)",
+DlgLnkEMail : "Adres e-mail",
+DlgLnkEMailSubject : "Temat",
+DlgLnkEMailBody : "Treść",
+DlgLnkUpload : "Wyślij",
+DlgLnkBtnUpload : "Wyślij",
+
+DlgLnkTarget : "Cel",
+DlgLnkTargetFrame : "<ramka>",
+DlgLnkTargetPopup : "<wyskakujÄ…ce okno>",
+DlgLnkTargetBlank : "Nowe okno (_blank)",
+DlgLnkTargetParent : "Okno nadrzędne (_parent)",
+DlgLnkTargetSelf : "To samo okno (_self)",
+DlgLnkTargetTop : "Okno najwyższe w hierarchii (_top)",
+DlgLnkTargetFrameName : "Nazwa Ramki Docelowej",
+DlgLnkPopWinName : "Nazwa wyskakujÄ…cego okna",
+DlgLnkPopWinFeat : "Właściwości wyskakującego okna",
+DlgLnkPopResize : "Możliwa zmiana rozmiaru",
+DlgLnkPopLocation : "Pasek adresu",
+DlgLnkPopMenu : "Pasek menu",
+DlgLnkPopScroll : "Paski przewijania",
+DlgLnkPopStatus : "Pasek statusu",
+DlgLnkPopToolbar : "Pasek narzędzi",
+DlgLnkPopFullScrn : "Pełny ekran (IE)",
+DlgLnkPopDependent : "Okno zależne (Netscape)",
+DlgLnkPopWidth : "Szerokość",
+DlgLnkPopHeight : "Wysokość",
+DlgLnkPopLeft : "Pozycja w poziomie",
+DlgLnkPopTop : "Pozycja w pionie",
+
+DlnLnkMsgNoUrl : "Podaj adres URL",
+DlnLnkMsgNoEMail : "Podaj adres e-mail",
+DlnLnkMsgNoAnchor : "Wybierz etykietÄ™",
+DlnLnkMsgInvPopName : "Nazwa wyskakującego okienka musi zaczynać się od znaku alfanumerycznego i nie może zawierać spacji",
+
+// Color Dialog
+DlgColorTitle : "Wybierz kolor",
+DlgColorBtnClear : "Wyczyść",
+DlgColorHighlight : "PodglÄ…d",
+DlgColorSelected : "Wybrane",
+
+// Smiley Dialog
+DlgSmileyTitle : "Wstaw emotikonÄ™",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Wybierz znak specjalny",
+
+// Table Dialog
+DlgTableTitle : "Właściwości tabeli",
+DlgTableRows : "Liczba wierszy",
+DlgTableColumns : "Liczba kolumn",
+DlgTableBorder : "Grubość ramki",
+DlgTableAlign : "Wyrównanie",
+DlgTableAlignNotSet : "<brak ustawień>",
+DlgTableAlignLeft : "Do lewej",
+DlgTableAlignCenter : "Do środka",
+DlgTableAlignRight : "Do prawej",
+DlgTableWidth : "Szerokość",
+DlgTableWidthPx : "piksele",
+DlgTableWidthPc : "%",
+DlgTableHeight : "Wysokość",
+DlgTableCellSpace : "Odstęp pomiędzy komórkami",
+DlgTableCellPad : "Margines wewnętrzny komórek",
+DlgTableCaption : "Tytuł",
+DlgTableSummary : "Podsumowanie",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Właściwości komórki",
+DlgCellWidth : "Szerokość",
+DlgCellWidthPx : "piksele",
+DlgCellWidthPc : "%",
+DlgCellHeight : "Wysokość",
+DlgCellWordWrap : "Zawijanie tekstu",
+DlgCellWordWrapNotSet : "<brak ustawień>",
+DlgCellWordWrapYes : "Tak",
+DlgCellWordWrapNo : "Nie",
+DlgCellHorAlign : "Wyrównanie poziome",
+DlgCellHorAlignNotSet : "<brak ustawień>",
+DlgCellHorAlignLeft : "Do lewej",
+DlgCellHorAlignCenter : "Do środka",
+DlgCellHorAlignRight: "Do prawej",
+DlgCellVerAlign : "Wyrównanie pionowe",
+DlgCellVerAlignNotSet : "<brak ustawień>",
+DlgCellVerAlignTop : "Do góry",
+DlgCellVerAlignMiddle : "Do środka",
+DlgCellVerAlignBottom : "Do dołu",
+DlgCellVerAlignBaseline : "Do linii bazowej",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Zajętość wierszy",
+DlgCellCollSpan : "Zajętość kolumn",
+DlgCellBackColor : "Kolor tła",
+DlgCellBorderColor : "Kolor ramki",
+DlgCellBtnSelect : "Wybierz...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Znajdź i zamień",
+
+// Find Dialog
+DlgFindTitle : "Znajdź",
+DlgFindFindBtn : "Znajdź",
+DlgFindNotFoundMsg : "Nie znaleziono szukanego hasła.",
+
+// Replace Dialog
+DlgReplaceTitle : "Zamień",
+DlgReplaceFindLbl : "Znajdź:",
+DlgReplaceReplaceLbl : "ZastÄ…p przez:",
+DlgReplaceCaseChk : "Uwzględnij wielkość liter",
+DlgReplaceReplaceBtn : "ZastÄ…p",
+DlgReplaceReplAllBtn : "ZastÄ…p wszystko",
+DlgReplaceWordChk : "Całe słowa",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl+X.",
+PasteErrorCopy : "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl+C.",
+
+PasteAsText : "Wklej jako czysty tekst",
+PasteFromWord : "Wklej z Worda",
+
+DlgPasteMsg2 : "Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.",
+DlgPasteSec : "Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę dane wkleić ponownie w tym okienku.",
+DlgPasteIgnoreFont : "Ignoruj definicje 'Font Face'",
+DlgPasteRemoveStyles : "Usuń definicje Stylów",
+
+// Color Picker
+ColorAutomatic : "Automatycznie",
+ColorMoreColors : "Więcej kolorów...",
+
+// Document Properties
+DocProps : "Właściwości dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle : "Właściwości kotwicy",
+DlgAnchorName : "Nazwa kotwicy",
+DlgAnchorErrorName : "Wpisz nazwÄ™ kotwicy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Słowa nie ma w słowniku",
+DlgSpellChangeTo : "Zmień na",
+DlgSpellBtnIgnore : "Ignoruj",
+DlgSpellBtnIgnoreAll : "Ignoruj wszystkie",
+DlgSpellBtnReplace : "Zmień",
+DlgSpellBtnReplaceAll : "Zmień wszystkie",
+DlgSpellBtnUndo : "Cofnij",
+DlgSpellNoSuggestions : "- Brak sugestii -",
+DlgSpellProgress : "Trwa sprawdzanie ...",
+DlgSpellNoMispell : "Sprawdzanie zakończone: nie znaleziono błędów",
+DlgSpellNoChanges : "Sprawdzanie zakończone: nie zmieniono żadnego słowa",
+DlgSpellOneChange : "Sprawdzanie zakończone: zmieniono jedno słowo",
+DlgSpellManyChanges : "Sprawdzanie zakończone: zmieniono %l słów",
+
+IeSpellDownload : "Słownik nie jest zainstalowany. Chcesz go ściągnąć?",
+
+// Button Dialog
+DlgButtonText : "Tekst (Wartość)",
+DlgButtonType : "Typ",
+DlgButtonTypeBtn : "Przycisk",
+DlgButtonTypeSbm : "Wyślij",
+DlgButtonTypeRst : "Wyzeruj",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nazwa",
+DlgCheckboxValue : "Wartość",
+DlgCheckboxSelected : "Zaznaczone",
+
+// Form Dialog
+DlgFormName : "Nazwa",
+DlgFormAction : "Akcja",
+DlgFormMethod : "Metoda",
+
+// Select Field Dialog
+DlgSelectName : "Nazwa",
+DlgSelectValue : "Wartość",
+DlgSelectSize : "Rozmiar",
+DlgSelectLines : "linii",
+DlgSelectChkMulti : "Wielokrotny wybór",
+DlgSelectOpAvail : "Dostępne opcje",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Wartość",
+DlgSelectBtnAdd : "Dodaj",
+DlgSelectBtnModify : "Zmień",
+DlgSelectBtnUp : "Do góry",
+DlgSelectBtnDown : "Do dołu",
+DlgSelectBtnSetValue : "Ustaw wartość zaznaczoną",
+DlgSelectBtnDelete : "Usuń",
+
+// Textarea Dialog
+DlgTextareaName : "Nazwa",
+DlgTextareaCols : "Kolumnu",
+DlgTextareaRows : "Wiersze",
+
+// Text Field Dialog
+DlgTextName : "Nazwa",
+DlgTextValue : "Wartość",
+DlgTextCharWidth : "Szerokość w znakach",
+DlgTextMaxChars : "Max. szerokość",
+DlgTextType : "Typ",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Hasło",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nazwa",
+DlgHiddenValue : "Wartość",
+
+// Bulleted List Dialog
+BulletedListProp : "Właściwości listy punktowanej",
+NumberedListProp : "Właściwości listy numerowanej",
+DlgLstStart : "PoczÄ…tek",
+DlgLstType : "Typ",
+DlgLstTypeCircle : "Koło",
+DlgLstTypeDisc : "Dysk",
+DlgLstTypeSquare : "Kwadrat",
+DlgLstTypeNumbers : "Cyfry (1, 2, 3)",
+DlgLstTypeLCase : "Małe litery (a, b, c)",
+DlgLstTypeUCase : "Duże litery (A, B, C)",
+DlgLstTypeSRoman : "Numeracja rzymska (i, ii, iii)",
+DlgLstTypeLRoman : "Numeracja rzymska (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Ogólne",
+DlgDocBackTab : "TÅ‚o",
+DlgDocColorsTab : "Kolory i marginesy",
+DlgDocMetaTab : "Meta Dane",
+
+DlgDocPageTitle : "Tytuł strony",
+DlgDocLangDir : "Kierunek pisania",
+DlgDocLangDirLTR : "Od lewej do prawej (LTR)",
+DlgDocLangDirRTL : "Od prawej do lewej (RTL)",
+DlgDocLangCode : "Kod języka",
+DlgDocCharSet : "Kodowanie znaków",
+DlgDocCharSetCE : "Åšrodkowoeuropejskie",
+DlgDocCharSetCT : "Chińskie tradycyjne (Big5)",
+DlgDocCharSetCR : "Cyrylica",
+DlgDocCharSetGR : "Greckie",
+DlgDocCharSetJP : "Japońskie",
+DlgDocCharSetKR : "Koreańskie",
+DlgDocCharSetTR : "Tureckie",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Zachodnioeuropejskie",
+DlgDocCharSetOther : "Inne kodowanie znaków",
+
+DlgDocDocType : "Nagłówek typu dokumentu",
+DlgDocDocTypeOther : "Inny typ dokumentu",
+DlgDocIncXHTML : "Dołącz deklarację XHTML",
+DlgDocBgColor : "Kolor tła",
+DlgDocBgImage : "Obrazek tła",
+DlgDocBgNoScroll : "TÅ‚o nieruchome",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Hiperłącze",
+DlgDocCVisited : "Odwiedzane hiperłącze",
+DlgDocCActive : "Aktywne hiperłącze",
+DlgDocMargins : "Marginesy strony",
+DlgDocMaTop : "Górny",
+DlgDocMaLeft : "Lewy",
+DlgDocMaRight : "Prawy",
+DlgDocMaBottom : "Dolny",
+DlgDocMeIndex : "SÅ‚owa kluczowe (oddzielone przecinkami)",
+DlgDocMeDescr : "Opis dokumentu",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Prawa autorskie",
+DlgDocPreview : "PodglÄ…d",
+
+// Templates Dialog
+Templates : "Sablony",
+DlgTemplatesTitle : "Szablony zawartości",
+DlgTemplatesSelMsg : "Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):",
+DlgTemplatesLoading : "Åadowanie listy szablonów. ProszÄ™ czekać...",
+DlgTemplatesNoTpl : "(Brak zdefiniowanych szablonów)",
+DlgTemplatesReplace : "Zastąp aktualną zawartość",
+
+// About Dialog
+DlgAboutAboutTab : "O ...",
+DlgAboutBrowserInfoTab : "O przeglÄ…darce",
+DlgAboutLicenseTab : "Licencja",
+DlgAboutVersion : "wersja",
+DlgAboutInfo : "Więcej informacji uzyskasz pod adresem",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt-br.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt-br.js
new file mode 100644
index 0000000..6da14d9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt-br.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Brazilian Portuguese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Ocultar Barra de Ferramentas",
+ToolbarExpand : "Exibir Barra de Ferramentas",
+
+// Toolbar Items and Context Menu
+Save : "Salvar",
+NewPage : "Novo",
+Preview : "Visualizar",
+Cut : "Recortar",
+Copy : "Copiar",
+Paste : "Colar",
+PasteText : "Colar como Texto sem Formatação",
+PasteWord : "Colar do Word",
+Print : "Imprimir",
+SelectAll : "Selecionar Tudo",
+RemoveFormat : "Remover Formatação",
+InsertLinkLbl : "Hiperlink",
+InsertLink : "Inserir/Editar Hiperlink",
+RemoveLink : "Remover Hiperlink",
+VisitLink : "Open Link", //MISSING
+Anchor : "Inserir/Editar Âncora",
+AnchorDelete : "Remover Âncora",
+InsertImageLbl : "Figura",
+InsertImage : "Inserir/Editar Figura",
+InsertFlashLbl : "Flash",
+InsertFlash : "Insere/Edita Flash",
+InsertTableLbl : "Tabela",
+InsertTable : "Inserir/Editar Tabela",
+InsertLineLbl : "Linha",
+InsertLine : "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracteres Especiais",
+InsertSpecialChar : "Inserir Caractere Especial",
+InsertSmileyLbl : "Emoticon",
+InsertSmiley : "Inserir Emoticon",
+About : "Sobre FCKeditor",
+Bold : "Negrito",
+Italic : "Itálico",
+Underline : "Sublinhado",
+StrikeThrough : "Tachado",
+Subscript : "Subscrito",
+Superscript : "Sobrescrito",
+LeftJustify : "Alinhar Esquerda",
+CenterJustify : "Centralizar",
+RightJustify : "Alinhar Direita",
+BlockJustify : "Justificado",
+DecreaseIndent : "Diminuir Recuo",
+IncreaseIndent : "Aumentar Recuo",
+Blockquote : "Recuo",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Desfazer",
+Redo : "Refazer",
+NumberedListLbl : "Numeração",
+NumberedList : "Inserir/Remover Numeração",
+BulletedListLbl : "Marcadores",
+BulletedList : "Inserir/Remover Marcadores",
+ShowTableBorders : "Exibir Bordas da Tabela",
+ShowDetails : "Exibir Detalhes",
+Style : "Estilo",
+FontFormat : "Formatação",
+Font : "Fonte",
+FontSize : "Tamanho",
+TextColor : "Cor do Texto",
+BGColor : "Cor do Plano de Fundo",
+Source : "Código-Fonte",
+Find : "Localizar",
+Replace : "Substituir",
+SpellCheck : "Verificar Ortografia",
+UniversalKeyboard : "Teclado Universal",
+PageBreakLbl : "Quebra de Página",
+PageBreak : "Inserir Quebra de Página",
+
+Form : "Formulário",
+Checkbox : "Caixa de Seleção",
+RadioButton : "Botão de Opção",
+TextField : "Caixa de Texto",
+Textarea : "Ãrea de Texto",
+HiddenField : "Campo Oculto",
+Button : "Botão",
+SelectionField : "Caixa de Listagem",
+ImageButton : "Botão de Imagem",
+
+FitWindow : "Maximizar o tamanho do editor",
+ShowBlocks : "Mostrar blocos",
+
+// Context Menu
+EditLink : "Editar Hiperlink",
+CellCM : "Célula",
+RowCM : "Linha",
+ColumnCM : "Coluna",
+InsertRowAfter : "Inserir linha abaixo",
+InsertRowBefore : "Inserir linha acima",
+DeleteRows : "Remover Linhas",
+InsertColumnAfter : "Inserir coluna à direita",
+InsertColumnBefore : "Inserir coluna à esquerda",
+DeleteColumns : "Remover Colunas",
+InsertCellAfter : "Inserir célula à direita",
+InsertCellBefore : "Inserir célula à esquerda",
+DeleteCells : "Remover Células",
+MergeCells : "Mesclar Células",
+MergeRight : "Mesclar com célula à direita",
+MergeDown : "Mesclar com célula abaixo",
+HorizontalSplitCell : "Dividir célula horizontalmente",
+VerticalSplitCell : "Dividir célula verticalmente",
+TableDelete : "Apagar Tabela",
+CellProperties : "Formatar Célula",
+TableProperties : "Formatar Tabela",
+ImageProperties : "Formatar Figura",
+FlashProperties : "Propriedades Flash",
+
+AnchorProp : "Formatar Âncora",
+ButtonProp : "Formatar Botão",
+CheckboxProp : "Formatar Caixa de Seleção",
+HiddenFieldProp : "Formatar Campo Oculto",
+RadioButtonProp : "Formatar Botão de Opção",
+ImageButtonProp : "Formatar Botão de Imagem",
+TextFieldProp : "Formatar Caixa de Texto",
+SelectionFieldProp : "Formatar Caixa de Listagem",
+TextareaProp : "Formatar Ãrea de Texto",
+FormProp : "Formatar Formulário",
+
+FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Processando XHTML. Por favor, aguarde...",
+Done : "Pronto",
+PasteWordConfirm : "O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?",
+NotCompatiblePaste : "Este comando está disponível para o navegador Internet Explorer 5.5 ou superior. Você gostaria de colar sem remover a formatação?",
+UnknownToolbarItem : "O item da barra de ferramentas \"%1\" não é reconhecido",
+UnknownCommand : "O comando \"%1\" não é reconhecido",
+NotImplemented : "O comando não foi implementado",
+UnknownToolbarSet : "A barra de ferramentas \"%1\" não existe",
+NoActiveX : "As configurações de segurança do seu browser podem limitar algumas características do editor. Você precisa habilitar a opção \"Executar controles e plug-ins ActiveX\". Você pode experimentar erros e alertas de características faltantes.",
+BrowseServerBlocked : "Os recursos do browser não puderam ser abertos. Tenha certeza que todos os bloqueadores de popup estão desabilitados.",
+DialogBlocked : "Não foi possível abrir a janela de diálogo. Tenha certeza que todos os bloqueadores de popup estão desabilitados.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancelar",
+DlgBtnClose : "Fechar",
+DlgBtnBrowseServer : "Localizar no Servidor",
+DlgAdvancedTag : "Avançado",
+DlgOpOther : "<Outros>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Inserir a URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<não ajustado>",
+DlgGenId : "Id",
+DlgGenLangDir : "Direção do idioma",
+DlgGenLangDirLtr : "Esquerda para Direita (LTR)",
+DlgGenLangDirRtl : "Direita para Esquerda (RTL)",
+DlgGenLangCode : "Idioma",
+DlgGenAccessKey : "Chave de Acesso",
+DlgGenName : "Nome",
+DlgGenTabIndex : "Ãndice de Tabulação",
+DlgGenLongDescr : "Descrição da URL",
+DlgGenClass : "Classe de Folhas de Estilo",
+DlgGenTitle : "Título",
+DlgGenContType : "Tipo de Conteúdo",
+DlgGenLinkCharset : "Conjunto de Caracteres do Hiperlink",
+DlgGenStyle : "Estilos",
+
+// Image Dialog
+DlgImgTitle : "Formatar Figura",
+DlgImgInfoTab : "Informações da Figura",
+DlgImgBtnUpload : "Enviar para o Servidor",
+DlgImgURL : "URL",
+DlgImgUpload : "Submeter",
+DlgImgAlt : "Texto Alternativo",
+DlgImgWidth : "Largura",
+DlgImgHeight : "Altura",
+DlgImgLockRatio : "Manter proporções",
+DlgBtnResetSize : "Redefinir para o Tamanho Original",
+DlgImgBorder : "Borda",
+DlgImgHSpace : "Horizontal",
+DlgImgVSpace : "Vertical",
+DlgImgAlign : "Alinhamento",
+DlgImgAlignLeft : "Esquerda",
+DlgImgAlignAbsBottom: "Inferior Absoluto",
+DlgImgAlignAbsMiddle: "Centralizado Absoluto",
+DlgImgAlignBaseline : "Baseline",
+DlgImgAlignBottom : "Inferior",
+DlgImgAlignMiddle : "Centralizado",
+DlgImgAlignRight : "Direita",
+DlgImgAlignTextTop : "Superior Absoluto",
+DlgImgAlignTop : "Superior",
+DlgImgPreview : "Visualização",
+DlgImgAlertUrl : "Por favor, digite o URL da figura.",
+DlgImgLinkTab : "Hiperlink",
+
+// Flash Dialog
+DlgFlashTitle : "Propriedades Flash",
+DlgFlashChkPlay : "Tocar Automaticamente",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Habilita Menu Flash",
+DlgFlashScale : "Escala",
+DlgFlashScaleAll : "Mostrar tudo",
+DlgFlashScaleNoBorder : "Sem Borda",
+DlgFlashScaleFit : "Escala Exata",
+
+// Link Dialog
+DlgLnkWindowTitle : "Hiperlink",
+DlgLnkInfoTab : "Informações",
+DlgLnkTargetTab : "Destino",
+
+DlgLnkType : "Tipo de hiperlink",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Âncora nesta página",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocolo",
+DlgLnkProtoOther : "<outro>",
+DlgLnkURL : "URL do hiperlink",
+DlgLnkAnchorSel : "Selecione uma âncora",
+DlgLnkAnchorByName : "Pelo Nome da âncora",
+DlgLnkAnchorById : "Pelo Id do Elemento",
+DlgLnkNoAnchors : "(Não há âncoras disponíveis neste documento)",
+DlgLnkEMail : "Endereço E-Mail",
+DlgLnkEMailSubject : "Assunto da Mensagem",
+DlgLnkEMailBody : "Corpo da Mensagem",
+DlgLnkUpload : "Enviar ao Servidor",
+DlgLnkBtnUpload : "Enviar ao Servidor",
+
+DlgLnkTarget : "Destino",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<janela popup>",
+DlgLnkTargetBlank : "Nova Janela (_blank)",
+DlgLnkTargetParent : "Janela Pai (_parent)",
+DlgLnkTargetSelf : "Mesma Janela (_self)",
+DlgLnkTargetTop : "Janela Superior (_top)",
+DlgLnkTargetFrameName : "Nome do Frame de Destino",
+DlgLnkPopWinName : "Nome da Janela Pop-up",
+DlgLnkPopWinFeat : "Atributos da Janela Pop-up",
+DlgLnkPopResize : "Redimensionável",
+DlgLnkPopLocation : "Barra de Endereços",
+DlgLnkPopMenu : "Barra de Menus",
+DlgLnkPopScroll : "Barras de Rolagem",
+DlgLnkPopStatus : "Barra de Status",
+DlgLnkPopToolbar : "Barra de Ferramentas",
+DlgLnkPopFullScrn : "Modo Tela Cheia (IE)",
+DlgLnkPopDependent : "Dependente (Netscape)",
+DlgLnkPopWidth : "Largura",
+DlgLnkPopHeight : "Altura",
+DlgLnkPopLeft : "Esquerda",
+DlgLnkPopTop : "Superior",
+
+DlnLnkMsgNoUrl : "Por favor, digite o endereço do Hiperlink",
+DlnLnkMsgNoEMail : "Por favor, digite o endereço de e-mail",
+DlnLnkMsgNoAnchor : "Por favor, selecione uma âncora",
+DlnLnkMsgInvPopName : "O nome da janela popup deve começar com uma letra ou sublinhado (_) e não pode conter espaços",
+
+// Color Dialog
+DlgColorTitle : "Selecione uma Cor",
+DlgColorBtnClear : "Limpar",
+DlgColorHighlight : "Visualização",
+DlgColorSelected : "Selecionada",
+
+// Smiley Dialog
+DlgSmileyTitle : "Inserir Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Selecione um Caractere Especial",
+
+// Table Dialog
+DlgTableTitle : "Formatar Tabela",
+DlgTableRows : "Linhas",
+DlgTableColumns : "Colunas",
+DlgTableBorder : "Borda",
+DlgTableAlign : "Alinhamento",
+DlgTableAlignNotSet : "<Não ajustado>",
+DlgTableAlignLeft : "Esquerda",
+DlgTableAlignCenter : "Centralizado",
+DlgTableAlignRight : "Direita",
+DlgTableWidth : "Largura",
+DlgTableWidthPx : "pixels",
+DlgTableWidthPc : "%",
+DlgTableHeight : "Altura",
+DlgTableCellSpace : "Espaçamento",
+DlgTableCellPad : "Enchimento",
+DlgTableCaption : "Legenda",
+DlgTableSummary : "Resumo",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Formatar célula",
+DlgCellWidth : "Largura",
+DlgCellWidthPx : "pixels",
+DlgCellWidthPc : "%",
+DlgCellHeight : "Altura",
+DlgCellWordWrap : "Quebra de Linha",
+DlgCellWordWrapNotSet : "<Não ajustado>",
+DlgCellWordWrapYes : "Sim",
+DlgCellWordWrapNo : "Não",
+DlgCellHorAlign : "Alinhamento Horizontal",
+DlgCellHorAlignNotSet : "<Não ajustado>",
+DlgCellHorAlignLeft : "Esquerda",
+DlgCellHorAlignCenter : "Centralizado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign : "Alinhamento Vertical",
+DlgCellVerAlignNotSet : "<Não ajustado>",
+DlgCellVerAlignTop : "Superior",
+DlgCellVerAlignMiddle : "Centralizado",
+DlgCellVerAlignBottom : "Inferior",
+DlgCellVerAlignBaseline : "Baseline",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Transpor Linhas",
+DlgCellCollSpan : "Transpor Colunas",
+DlgCellBackColor : "Cor do Plano de Fundo",
+DlgCellBorderColor : "Cor da Borda",
+DlgCellBtnSelect : "Selecionar...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Localizar e Substituir",
+
+// Find Dialog
+DlgFindTitle : "Localizar...",
+DlgFindFindBtn : "Localizar",
+DlgFindNotFoundMsg : "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle : "Substituir",
+DlgReplaceFindLbl : "Procurar por:",
+DlgReplaceReplaceLbl : "Substituir por:",
+DlgReplaceCaseChk : "Coincidir Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn : "Substituir",
+DlgReplaceReplAllBtn : "Substituir Tudo",
+DlgReplaceWordChk : "Coincidir a palavra inteira",
+
+// Paste Operations / Dialog
+PasteErrorCut : "As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl+X).",
+PasteErrorCopy : "As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl+C).",
+
+PasteAsText : "Colar como Texto sem Formatação",
+PasteFromWord : "Colar do Word",
+
+DlgPasteMsg2 : "Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.",
+DlgPasteSec : "As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo novamente nesta janela.",
+DlgPasteIgnoreFont : "Ignorar definições de fonte",
+DlgPasteRemoveStyles : "Remove definições de estilo",
+
+// Color Picker
+ColorAutomatic : "Automático",
+ColorMoreColors : "Mais Cores...",
+
+// Document Properties
+DocProps : "Propriedades Documento",
+
+// Anchor Dialog
+DlgAnchorTitle : "Formatar Âncora",
+DlgAnchorName : "Nome da Âncora",
+DlgAnchorErrorName : "Por favor, digite o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Não encontrada",
+DlgSpellChangeTo : "Alterar para",
+DlgSpellBtnIgnore : "Ignorar uma vez",
+DlgSpellBtnIgnoreAll : "Ignorar Todas",
+DlgSpellBtnReplace : "Alterar",
+DlgSpellBtnReplaceAll : "Alterar Todas",
+DlgSpellBtnUndo : "Desfazer",
+DlgSpellNoSuggestions : "-sem sugestões de ortografia-",
+DlgSpellProgress : "Verificação ortográfica em andamento...",
+DlgSpellNoMispell : "Verificação encerrada: Não foram encontrados erros de ortografia",
+DlgSpellNoChanges : "Verificação ortográfica encerrada: Não houve alterações",
+DlgSpellOneChange : "Verificação ortográfica encerrada: Uma palavra foi alterada",
+DlgSpellManyChanges : "Verificação ortográfica encerrada: %1 foram alteradas",
+
+IeSpellDownload : "A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?",
+
+// Button Dialog
+DlgButtonText : "Texto (Valor)",
+DlgButtonType : "Tipo",
+DlgButtonTypeBtn : "Botão",
+DlgButtonTypeSbm : "Enviar",
+DlgButtonTypeRst : "Limpar",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nome",
+DlgCheckboxValue : "Valor",
+DlgCheckboxSelected : "Selecionado",
+
+// Form Dialog
+DlgFormName : "Nome",
+DlgFormAction : "Action",
+DlgFormMethod : "Método",
+
+// Select Field Dialog
+DlgSelectName : "Nome",
+DlgSelectValue : "Valor",
+DlgSelectSize : "Tamanho",
+DlgSelectLines : "linhas",
+DlgSelectChkMulti : "Permitir múltiplas seleções",
+DlgSelectOpAvail : "Opções disponíveis",
+DlgSelectOpText : "Texto",
+DlgSelectOpValue : "Valor",
+DlgSelectBtnAdd : "Adicionar",
+DlgSelectBtnModify : "Modificar",
+DlgSelectBtnUp : "Para cima",
+DlgSelectBtnDown : "Para baixo",
+DlgSelectBtnSetValue : "Definir como selecionado",
+DlgSelectBtnDelete : "Remover",
+
+// Textarea Dialog
+DlgTextareaName : "Nome",
+DlgTextareaCols : "Colunas",
+DlgTextareaRows : "Linhas",
+
+// Text Field Dialog
+DlgTextName : "Nome",
+DlgTextValue : "Valor",
+DlgTextCharWidth : "Comprimento (em caracteres)",
+DlgTextMaxChars : "Número Máximo de Caracteres",
+DlgTextType : "Tipo",
+DlgTextTypeText : "Texto",
+DlgTextTypePass : "Senha",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nome",
+DlgHiddenValue : "Valor",
+
+// Bulleted List Dialog
+BulletedListProp : "Formatar Marcadores",
+NumberedListProp : "Formatar Numeração",
+DlgLstStart : "Iniciar",
+DlgLstType : "Tipo",
+DlgLstTypeCircle : "Círculo",
+DlgLstTypeDisc : "Disco",
+DlgLstTypeSquare : "Quadrado",
+DlgLstTypeNumbers : "Números (1, 2, 3)",
+DlgLstTypeLCase : "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase : "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman : "Números Romanos Minúsculos (i, ii, iii)",
+DlgLstTypeLRoman : "Números Romanos Maiúsculos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Geral",
+DlgDocBackTab : "Plano de Fundo",
+DlgDocColorsTab : "Cores e Margens",
+DlgDocMetaTab : "Meta Dados",
+
+DlgDocPageTitle : "Título da Página",
+DlgDocLangDir : "Direção do Idioma",
+DlgDocLangDirLTR : "Esquerda para Direita (LTR)",
+DlgDocLangDirRTL : "Direita para Esquerda (RTL)",
+DlgDocLangCode : "Código do Idioma",
+DlgDocCharSet : "Codificação de Caracteres",
+DlgDocCharSetCE : "Europa Central",
+DlgDocCharSetCT : "Chinês Tradicional (Big5)",
+DlgDocCharSetCR : "Cirílico",
+DlgDocCharSetGR : "Grego",
+DlgDocCharSetJP : "Japonês",
+DlgDocCharSetKR : "Coreano",
+DlgDocCharSetTR : "Turco",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Europa Ocidental",
+DlgDocCharSetOther : "Outra Codificação de Caracteres",
+
+DlgDocDocType : "Cabeçalho Tipo de Documento",
+DlgDocDocTypeOther : "Other Document Type Heading",
+DlgDocIncXHTML : "Incluir Declarações XHTML",
+DlgDocBgColor : "Cor do Plano de Fundo",
+DlgDocBgImage : "URL da Imagem de Plano de Fundo",
+DlgDocBgNoScroll : "Plano de Fundo Fixo",
+DlgDocCText : "Texto",
+DlgDocCLink : "Hiperlink",
+DlgDocCVisited : "Hiperlink Visitado",
+DlgDocCActive : "Hiperlink Ativo",
+DlgDocMargins : "Margens da Página",
+DlgDocMaTop : "Superior",
+DlgDocMaLeft : "Inferior",
+DlgDocMaRight : "Direita",
+DlgDocMaBottom : "Inferior",
+DlgDocMeIndex : "Palavras-chave de Indexação do Documento (separadas por vírgula)",
+DlgDocMeDescr : "Descrição do Documento",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Direitos Autorais",
+DlgDocPreview : "Visualizar",
+
+// Templates Dialog
+Templates : "Modelos de layout",
+DlgTemplatesTitle : "Modelo de layout do conteúdo",
+DlgTemplatesSelMsg : "Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):",
+DlgTemplatesLoading : "Carregando a lista de modelos de layout. Aguarde...",
+DlgTemplatesNoTpl : "(Não foram definidos modelos de layout)",
+DlgTemplatesReplace : "Substituir o conteúdo atual",
+
+// About Dialog
+DlgAboutAboutTab : "Sobre",
+DlgAboutBrowserInfoTab : "Informações do Navegador",
+DlgAboutLicenseTab : "Licença",
+DlgAboutVersion : "versão",
+DlgAboutInfo : "Para maiores informações visite",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt.js
new file mode 100644
index 0000000..0ae67a7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Portuguese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Fechar Barra",
+ToolbarExpand : "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save : "Guardar",
+NewPage : "Nova Página",
+Preview : "Pré-visualizar",
+Cut : "Cortar",
+Copy : "Copiar",
+Paste : "Colar",
+PasteText : "Colar como texto não formatado",
+PasteWord : "Colar do Word",
+Print : "Imprimir",
+SelectAll : "Seleccionar Tudo",
+RemoveFormat : "Eliminar Formato",
+InsertLinkLbl : "Hiperligação",
+InsertLink : "Inserir/Editar Hiperligação",
+RemoveLink : "Eliminar Hiperligação",
+VisitLink : "Open Link", //MISSING
+Anchor : " Inserir/Editar Âncora",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Imagem",
+InsertImage : "Inserir/Editar Imagem",
+InsertFlashLbl : "Flash",
+InsertFlash : "Inserir/Editar Flash",
+InsertTableLbl : "Tabela",
+InsertTable : "Inserir/Editar Tabela",
+InsertLineLbl : "Linha",
+InsertLine : "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar : "Inserir Caracter Especial",
+InsertSmileyLbl : "Emoticons",
+InsertSmiley : "Inserir Emoticons",
+About : "Acerca do FCKeditor",
+Bold : "Negrito",
+Italic : "Itálico",
+Underline : "Sublinhado",
+StrikeThrough : "Rasurado",
+Subscript : "Superior à Linha",
+Superscript : "Inferior à Linha",
+LeftJustify : "Alinhar à Esquerda",
+CenterJustify : "Alinhar ao Centro",
+RightJustify : "Alinhar à Direita",
+BlockJustify : "Justificado",
+DecreaseIndent : "Diminuir Avanço",
+IncreaseIndent : "Aumentar Avanço",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Anular",
+Redo : "Repetir",
+NumberedListLbl : "Numeração",
+NumberedList : "Inserir/Eliminar Numeração",
+BulletedListLbl : "Marcas",
+BulletedList : "Inserir/Eliminar Marcas",
+ShowTableBorders : "Mostrar Limites da Tabelas",
+ShowDetails : "Mostrar Parágrafo",
+Style : "Estilo",
+FontFormat : "Formato",
+Font : "Tipo de Letra",
+FontSize : "Tamanho",
+TextColor : "Cor do Texto",
+BGColor : "Cor de Fundo",
+Source : "Fonte",
+Find : "Procurar",
+Replace : "Substituir",
+SpellCheck : "Verificação Ortográfica",
+UniversalKeyboard : "Teclado Universal",
+PageBreakLbl : "Quebra de Página",
+PageBreak : "Inserir Quebra de Página",
+
+Form : "Formulário",
+Checkbox : "Caixa de Verificação",
+RadioButton : "Botão de Opção",
+TextField : "Campo de Texto",
+Textarea : "Ãrea de Texto",
+HiddenField : "Campo Escondido",
+Button : "Botão",
+SelectionField : "Caixa de Combinação",
+ImageButton : "Botão de Imagem",
+
+FitWindow : "Maximizar o tamanho do editor",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Editar Hiperligação",
+CellCM : "Célula",
+RowCM : "Linha",
+ColumnCM : "Coluna",
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Eliminar Linhas",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Eliminar Coluna",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Eliminar Célula",
+MergeCells : "Unir Células",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Eliminar Tabela",
+CellProperties : "Propriedades da Célula",
+TableProperties : "Propriedades da Tabela",
+ImageProperties : "Propriedades da Imagem",
+FlashProperties : "Propriedades do Flash",
+
+AnchorProp : "Propriedades da Âncora",
+ButtonProp : "Propriedades do Botão",
+CheckboxProp : "Propriedades da Caixa de Verificação",
+HiddenFieldProp : "Propriedades do Campo Escondido",
+RadioButtonProp : "Propriedades do Botão de Opção",
+ImageButtonProp : "Propriedades do Botão de imagens",
+TextFieldProp : "Propriedades do Campo de Texto",
+SelectionFieldProp : "Propriedades da Caixa de Combinação",
+TextareaProp : "Propriedades da Ãrea de Texto",
+FormProp : "Propriedades do Formulário",
+
+FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML : "A Processar XHTML. Por favor, espere...",
+Done : "Concluído",
+PasteWordConfirm : "O texto que deseja parece ter sido copiado do Word. Deseja limpar a formatação antes de colar?",
+NotCompatiblePaste : "Este comando só está disponível para Internet Explorer versão 5.5 ou superior. Deseja colar sem limpar a formatação?",
+UnknownToolbarItem : "Item de barra desconhecido \"%1\"",
+UnknownCommand : "Nome de comando desconhecido \"%1\"",
+NotImplemented : "Comando não implementado",
+UnknownToolbarSet : "Nome de barra \"%1\" não definido",
+NoActiveX : "As definições de segurança do navegador podem limitar algumas potencalidades do editr. Deve activar a opção \"Executar controlos e extensões ActiveX\". Pode ocorrer erros ou verificar que faltam potencialidades.",
+BrowseServerBlocked : "Não foi possível abrir o navegador de recursos. Certifique-se que todos os bloqueadores de popup estão desactivados.",
+DialogBlocked : "Não foi possível abrir a janela de diálogo. Certifique-se que todos os bloqueadores de popup estão desactivados.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Cancelar",
+DlgBtnClose : "Fechar",
+DlgBtnBrowseServer : "Navegar no Servidor",
+DlgAdvancedTag : "Avançado",
+DlgOpOther : "<Outro>",
+DlgInfoTab : "Informação",
+DlgAlertUrl : "Por favor introduza o URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<Não definido>",
+DlgGenId : "Id",
+DlgGenLangDir : "Orientação de idioma",
+DlgGenLangDirLtr : "Esquerda à Direita (LTR)",
+DlgGenLangDirRtl : "Direita a Esquerda (RTL)",
+DlgGenLangCode : "Código de Idioma",
+DlgGenAccessKey : "Chave de Acesso",
+DlgGenName : "Nome",
+DlgGenTabIndex : "Ãndice de Tubulação",
+DlgGenLongDescr : "Descrição Completa do URL",
+DlgGenClass : "Classes de Estilo de Folhas Classes",
+DlgGenTitle : "Título",
+DlgGenContType : "Tipo de Conteúdo",
+DlgGenLinkCharset : "Fonte de caracteres vinculado",
+DlgGenStyle : "Estilo",
+
+// Image Dialog
+DlgImgTitle : "Propriedades da Imagem",
+DlgImgInfoTab : "Informação da Imagem",
+DlgImgBtnUpload : "Enviar para o Servidor",
+DlgImgURL : "URL",
+DlgImgUpload : "Carregar",
+DlgImgAlt : "Texto Alternativo",
+DlgImgWidth : "Largura",
+DlgImgHeight : "Altura",
+DlgImgLockRatio : "Proporcional",
+DlgBtnResetSize : "Tamanho Original",
+DlgImgBorder : "Limite",
+DlgImgHSpace : "Esp.Horiz",
+DlgImgVSpace : "Esp.Vert",
+DlgImgAlign : "Alinhamento",
+DlgImgAlignLeft : "Esquerda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline : "Linha de base",
+DlgImgAlignBottom : "Fundo",
+DlgImgAlignMiddle : "Centro",
+DlgImgAlignRight : "Direita",
+DlgImgAlignTextTop : "Topo do texto",
+DlgImgAlignTop : "Topo",
+DlgImgPreview : "Pré-visualizar",
+DlgImgAlertUrl : "Por favor introduza o URL da imagem",
+DlgImgLinkTab : "Hiperligação",
+
+// Flash Dialog
+DlgFlashTitle : "Propriedades do Flash",
+DlgFlashChkPlay : "Reproduzir automaticamente",
+DlgFlashChkLoop : "Loop",
+DlgFlashChkMenu : "Permitir Menu do Flash",
+DlgFlashScale : "Escala",
+DlgFlashScaleAll : "Mostrar tudo",
+DlgFlashScaleNoBorder : "Sem Limites",
+DlgFlashScaleFit : "Tamanho Exacto",
+
+// Link Dialog
+DlgLnkWindowTitle : "Hiperligação",
+DlgLnkInfoTab : "Informação de Hiperligação",
+DlgLnkTargetTab : "Destino",
+
+DlgLnkType : "Tipo de Hiperligação",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Referência a esta página",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocolo",
+DlgLnkProtoOther : "<outro>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Seleccionar una referência",
+DlgLnkAnchorByName : "Por Nome de Referência",
+DlgLnkAnchorById : "Por ID de elemento",
+DlgLnkNoAnchors : "(Não há referências disponíveis no documento)",
+DlgLnkEMail : "Endereço de E-Mail",
+DlgLnkEMailSubject : "Título de Mensagem",
+DlgLnkEMailBody : "Corpo da Mensagem",
+DlgLnkUpload : "Carregar",
+DlgLnkBtnUpload : "Enviar ao Servidor",
+
+DlgLnkTarget : "Destino",
+DlgLnkTargetFrame : "<Frame>",
+DlgLnkTargetPopup : "<Janela de popup>",
+DlgLnkTargetBlank : "Nova Janela(_blank)",
+DlgLnkTargetParent : "Janela Pai (_parent)",
+DlgLnkTargetSelf : "Mesma janela (_self)",
+DlgLnkTargetTop : "Janela primaria (_top)",
+DlgLnkTargetFrameName : "Nome do Frame Destino",
+DlgLnkPopWinName : "Nome da Janela de Popup",
+DlgLnkPopWinFeat : "Características de Janela de Popup",
+DlgLnkPopResize : "Ajustável",
+DlgLnkPopLocation : "Barra de localização",
+DlgLnkPopMenu : "Barra de Menu",
+DlgLnkPopScroll : "Barras de deslocamento",
+DlgLnkPopStatus : "Barra de Estado",
+DlgLnkPopToolbar : "Barra de Ferramentas",
+DlgLnkPopFullScrn : "Janela Completa (IE)",
+DlgLnkPopDependent : "Dependente (Netscape)",
+DlgLnkPopWidth : "Largura",
+DlgLnkPopHeight : "Altura",
+DlgLnkPopLeft : "Posição Esquerda",
+DlgLnkPopTop : "Posição Direita",
+
+DlnLnkMsgNoUrl : "Por favor introduza a hiperligação URL",
+DlnLnkMsgNoEMail : "Por favor introduza o endereço de e-mail",
+DlnLnkMsgNoAnchor : "Por favor seleccione uma referência",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Seleccionar Cor",
+DlgColorBtnClear : "Nenhuma",
+DlgColorHighlight : "Destacado",
+DlgColorSelected : "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle : "Inserir um Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Seleccione um caracter especial",
+
+// Table Dialog
+DlgTableTitle : "Propriedades da Tabela",
+DlgTableRows : "Linhas",
+DlgTableColumns : "Colunas",
+DlgTableBorder : "Tamanho do Limite",
+DlgTableAlign : "Alinhamento",
+DlgTableAlignNotSet : "<Não definido>",
+DlgTableAlignLeft : "Esquerda",
+DlgTableAlignCenter : "Centrado",
+DlgTableAlignRight : "Direita",
+DlgTableWidth : "Largura",
+DlgTableWidthPx : "pixeis",
+DlgTableWidthPc : "percentagem",
+DlgTableHeight : "Altura",
+DlgTableCellSpace : "Esp. e/células",
+DlgTableCellPad : "Esp. interior",
+DlgTableCaption : "Título",
+DlgTableSummary : "Sumário",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Propriedades da Célula",
+DlgCellWidth : "Largura",
+DlgCellWidthPx : "pixeis",
+DlgCellWidthPc : "percentagem",
+DlgCellHeight : "Altura",
+DlgCellWordWrap : "Moldar Texto",
+DlgCellWordWrapNotSet : "<Não definido>",
+DlgCellWordWrapYes : "Sim",
+DlgCellWordWrapNo : "Não",
+DlgCellHorAlign : "Alinhamento Horizontal",
+DlgCellHorAlignNotSet : "<Não definido>",
+DlgCellHorAlignLeft : "Esquerda",
+DlgCellHorAlignCenter : "Centrado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign : "Alinhamento Vertical",
+DlgCellVerAlignNotSet : "<Não definido>",
+DlgCellVerAlignTop : "Topo",
+DlgCellVerAlignMiddle : "Médio",
+DlgCellVerAlignBottom : "Fundi",
+DlgCellVerAlignBaseline : "Linha de Base",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Unir Linhas",
+DlgCellCollSpan : "Unir Colunas",
+DlgCellBackColor : "Cor do Fundo",
+DlgCellBorderColor : "Cor do Limite",
+DlgCellBtnSelect : "Seleccione...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Procurar",
+DlgFindFindBtn : "Procurar",
+DlgFindNotFoundMsg : "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle : "Substituir",
+DlgReplaceFindLbl : "Texto a Procurar:",
+DlgReplaceReplaceLbl : "Substituir por:",
+DlgReplaceCaseChk : "Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn : "Substituir",
+DlgReplaceReplAllBtn : "Substituir Tudo",
+DlgReplaceWordChk : "Coincidir com toda a palavra",
+
+// Paste Operations / Dialog
+PasteErrorCut : "A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl+X).",
+PasteErrorCopy : "A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl+C).",
+
+PasteAsText : "Colar como Texto Simples",
+PasteFromWord : "Colar do Word",
+
+DlgPasteMsg2 : "Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignorar da definições do Tipo de Letra ",
+DlgPasteRemoveStyles : "Remover as definições de Estilos",
+
+// Color Picker
+ColorAutomatic : "Automático",
+ColorMoreColors : "Mais Cores...",
+
+// Document Properties
+DocProps : "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle : "Propriedades da Âncora",
+DlgAnchorName : "Nome da Âncora",
+DlgAnchorErrorName : "Por favor, introduza o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Não está num directório",
+DlgSpellChangeTo : "Mudar para",
+DlgSpellBtnIgnore : "Ignorar",
+DlgSpellBtnIgnoreAll : "Ignorar Tudo",
+DlgSpellBtnReplace : "Substituir",
+DlgSpellBtnReplaceAll : "Substituir Tudo",
+DlgSpellBtnUndo : "Anular",
+DlgSpellNoSuggestions : "- Sem sugestões -",
+DlgSpellProgress : "Verificação ortográfica em progresso…",
+DlgSpellNoMispell : "Verificação ortográfica completa: não foram encontrados erros",
+DlgSpellNoChanges : "Verificação ortográfica completa: não houve alteração de palavras",
+DlgSpellOneChange : "Verificação ortográfica completa: uma palavra alterada",
+DlgSpellManyChanges : "Verificação ortográfica completa: %1 palavras alteradas",
+
+IeSpellDownload : " Verificação ortográfica não instalada. Quer descarregar agora?",
+
+// Button Dialog
+DlgButtonText : "Texto (Valor)",
+DlgButtonType : "Tipo",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nome",
+DlgCheckboxValue : "Valor",
+DlgCheckboxSelected : "Seleccionado",
+
+// Form Dialog
+DlgFormName : "Nome",
+DlgFormAction : "Acção",
+DlgFormMethod : "Método",
+
+// Select Field Dialog
+DlgSelectName : "Nome",
+DlgSelectValue : "Valor",
+DlgSelectSize : "Tamanho",
+DlgSelectLines : "linhas",
+DlgSelectChkMulti : "Permitir selecções múltiplas",
+DlgSelectOpAvail : "Opções Possíveis",
+DlgSelectOpText : "Texto",
+DlgSelectOpValue : "Valor",
+DlgSelectBtnAdd : "Adicionar",
+DlgSelectBtnModify : "Modificar",
+DlgSelectBtnUp : "Para cima",
+DlgSelectBtnDown : "Para baixo",
+DlgSelectBtnSetValue : "Definir um valor por defeito",
+DlgSelectBtnDelete : "Apagar",
+
+// Textarea Dialog
+DlgTextareaName : "Nome",
+DlgTextareaCols : "Colunas",
+DlgTextareaRows : "Linhas",
+
+// Text Field Dialog
+DlgTextName : "Nome",
+DlgTextValue : "Valor",
+DlgTextCharWidth : "Tamanho do caracter",
+DlgTextMaxChars : "Nr. Máximo de Caracteres",
+DlgTextType : "Tipo",
+DlgTextTypeText : "Texto",
+DlgTextTypePass : "Palavra-chave",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nome",
+DlgHiddenValue : "Valor",
+
+// Bulleted List Dialog
+BulletedListProp : "Propriedades da Marca",
+NumberedListProp : "Propriedades da Numeração",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Tipo",
+DlgLstTypeCircle : "Circulo",
+DlgLstTypeDisc : "Disco",
+DlgLstTypeSquare : "Quadrado",
+DlgLstTypeNumbers : "Números (1, 2, 3)",
+DlgLstTypeLCase : "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase : "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman : "Numeração Romana em Minúsculas (i, ii, iii)",
+DlgLstTypeLRoman : "Numeração Romana em Maiúsculas (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Geral",
+DlgDocBackTab : "Fundo",
+DlgDocColorsTab : "Cores e Margens",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Título da Página",
+DlgDocLangDir : "Orientação de idioma",
+DlgDocLangDirLTR : "Esquerda à Direita (LTR)",
+DlgDocLangDirRTL : "Direita à Esquerda (RTL)",
+DlgDocLangCode : "Código de Idioma",
+DlgDocCharSet : "Codificação de Caracteres",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Outra Codificação de Caracteres",
+
+DlgDocDocType : "Tipo de Cabeçalho do Documento",
+DlgDocDocTypeOther : "Outro Tipo de Cabeçalho do Documento",
+DlgDocIncXHTML : "Incluir Declarações XHTML",
+DlgDocBgColor : "Cor de Fundo",
+DlgDocBgImage : "Caminho para a Imagem de Fundo",
+DlgDocBgNoScroll : "Fundo Fixo",
+DlgDocCText : "Texto",
+DlgDocCLink : "Hiperligação",
+DlgDocCVisited : "Hiperligação Visitada",
+DlgDocCActive : "Hiperligação Activa",
+DlgDocMargins : "Margem das Páginas",
+DlgDocMaTop : "Topo",
+DlgDocMaLeft : "Esquerda",
+DlgDocMaRight : "Direita",
+DlgDocMaBottom : "Fundo",
+DlgDocMeIndex : "Palavras de Indexação do Documento (separadas por virgula)",
+DlgDocMeDescr : "Descrição do Documento",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Direitos de Autor",
+DlgDocPreview : "Pré-visualizar",
+
+// Templates Dialog
+Templates : "Modelos",
+DlgTemplatesTitle : "Modelo de Conteúdo",
+DlgTemplatesSelMsg : "Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):",
+DlgTemplatesLoading : "A carregar a lista de modelos. Aguarde por favor...",
+DlgTemplatesNoTpl : "(Sem modelos definidos)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "Acerca",
+DlgAboutBrowserInfoTab : "Informação do Nevegador",
+DlgAboutLicenseTab : "Licença",
+DlgAboutVersion : "versão",
+DlgAboutInfo : "Para mais informações por favor dirija-se a",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ro.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ro.js
new file mode 100644
index 0000000..9cd31ba
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ro.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Romanian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Ascunde bara cu opţiuni",
+ToolbarExpand : "Expandează bara cu opţiuni",
+
+// Toolbar Items and Context Menu
+Save : "Salvează",
+NewPage : "Pagină nouă",
+Preview : "Previzualizare",
+Cut : "Taie",
+Copy : "Copiază",
+Paste : "Adaugă",
+PasteText : "Adaugă ca text simplu",
+PasteWord : "Adaugă din Word",
+Print : "Printează",
+SelectAll : "Selectează tot",
+RemoveFormat : "Înlătură formatarea",
+InsertLinkLbl : "Link (Legătură web)",
+InsertLink : "Inserează/Editează link (legătură web)",
+RemoveLink : "Înlătură link (legătură web)",
+VisitLink : "Open Link", //MISSING
+Anchor : "Inserează/Editează ancoră",
+AnchorDelete : "Şterge ancoră",
+InsertImageLbl : "Imagine",
+InsertImage : "Inserează/Editează imagine",
+InsertFlashLbl : "Flash",
+InsertFlash : "Inserează/Editează flash",
+InsertTableLbl : "Tabel",
+InsertTable : "Inserează/Editează tabel",
+InsertLineLbl : "Linie",
+InsertLine : "Inserează linie orizontă",
+InsertSpecialCharLbl: "Caracter special",
+InsertSpecialChar : "Inserează caracter special",
+InsertSmileyLbl : "Figură expresivă (Emoticon)",
+InsertSmiley : "Inserează Figură expresivă (Emoticon)",
+About : "Despre FCKeditor",
+Bold : "ÃŽngroÅŸat (bold)",
+Italic : "ÃŽnclinat (italic)",
+Underline : "Subliniat (underline)",
+StrikeThrough : "Tăiat (strike through)",
+Subscript : "Indice (subscript)",
+Superscript : "Putere (superscript)",
+LeftJustify : "Aliniere la stânga",
+CenterJustify : "Aliniere centrală",
+RightJustify : "Aliniere la dreapta",
+BlockJustify : "Aliniere în bloc (Block Justify)",
+DecreaseIndent : "Scade indentarea",
+IncreaseIndent : "CreÅŸte indentarea",
+Blockquote : "Citat",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Starea anterioară (undo)",
+Redo : "Starea ulterioară (redo)",
+NumberedListLbl : "Listă numerotată",
+NumberedList : "Inserează/Şterge listă numerotată",
+BulletedListLbl : "Listă cu puncte",
+BulletedList : "Inserează/Şterge listă cu puncte",
+ShowTableBorders : "Arată marginile tabelului",
+ShowDetails : "Arată detalii",
+Style : "Stil",
+FontFormat : "Formatare",
+Font : "Font",
+FontSize : "Mărime",
+TextColor : "Culoarea textului",
+BGColor : "Coloarea fundalului",
+Source : "Sursa",
+Find : "Găseşte",
+Replace : "ÃŽnlocuieÅŸte",
+SpellCheck : "Verifică text",
+UniversalKeyboard : "Tastatură universală",
+PageBreakLbl : "Separator de pagină (Page Break)",
+PageBreak : "Inserează separator de pagină (Page Break)",
+
+Form : "Formular (Form)",
+Checkbox : "Bifă (Checkbox)",
+RadioButton : "Buton radio (RadioButton)",
+TextField : "Câmp text (TextField)",
+Textarea : "Suprafaţă text (Textarea)",
+HiddenField : "Câmp ascuns (HiddenField)",
+Button : "Buton",
+SelectionField : "Câmp selecţie (SelectionField)",
+ImageButton : "Buton imagine (ImageButton)",
+
+FitWindow : "Maximizează mărimea editorului",
+ShowBlocks : "Arată blocurile",
+
+// Context Menu
+EditLink : "Editează Link",
+CellCM : "Celulă",
+RowCM : "Linie",
+ColumnCM : "Coloană",
+InsertRowAfter : "Inserează linie după",
+InsertRowBefore : "Inserează linie înainte",
+DeleteRows : "Åžterge linii",
+InsertColumnAfter : "Inserează coloană după",
+InsertColumnBefore : "Inserează coloană înainte",
+DeleteColumns : "Åžterge celule",
+InsertCellAfter : "Inserează celulă după",
+InsertCellBefore : "Inserează celulă înainte",
+DeleteCells : "Åžterge celule",
+MergeCells : "UneÅŸte celule",
+MergeRight : "UneÅŸte la dreapta",
+MergeDown : "UneÅŸte jos",
+HorizontalSplitCell : "Împarte celula pe orizontală",
+VerticalSplitCell : "Împarte celula pe verticală",
+TableDelete : "Åžterge tabel",
+CellProperties : "Proprietăţile celulei",
+TableProperties : "Proprietăţile tabelului",
+ImageProperties : "Proprietăţile imaginii",
+FlashProperties : "Proprietăţile flash-ului",
+
+AnchorProp : "Proprietăţi ancoră",
+ButtonProp : "Proprietăţi buton",
+CheckboxProp : "Proprietăţi bifă (Checkbox)",
+HiddenFieldProp : "Proprietăţi câmp ascuns (Hidden Field)",
+RadioButtonProp : "Proprietăţi buton radio (Radio Button)",
+ImageButtonProp : "Proprietăţi buton imagine (Image Button)",
+TextFieldProp : "Proprietăţi câmp text (Text Field)",
+SelectionFieldProp : "Proprietăţi câmp selecţie (Selection Field)",
+TextareaProp : "Proprietăţi suprafaţă text (Textarea)",
+FormProp : "Proprietăţi formular (Form)",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", //MISSING
+
+// Alerts and Messages
+ProcessingXHTML : "Procesăm XHTML. Vă rugăm aşteptaţi...",
+Done : "Am terminat",
+PasteWordConfirm : "Textul pe care doriţi să-l adăugaţi pare a fi formatat pentru Word. Doriţi să-l curăţaţi de această formatare înainte de a-l adăuga?",
+NotCompatiblePaste : "Această facilitate e disponibilă doar pentru Microsoft Internet Explorer, versiunea 5.5 sau ulterioară. Vreţi să-l adăugaţi fără a-i fi înlăturat formatarea?",
+UnknownToolbarItem : "Obiectul \"%1\" din bara cu opţiuni necunoscut",
+UnknownCommand : "Comanda \"%1\" necunoscută",
+NotImplemented : "Comandă neimplementată",
+UnknownToolbarSet : "Grupul din bara cu opţiuni \"%1\" nu există",
+NoActiveX : "Setările de securitate ale programului dvs. cu care navigaţi pe internet (browser) pot limita anumite funcţionalităţi ale editorului. Pentru a evita asta, trebuie să activaţi opţiunea \"Run ActiveX controls and plug-ins\". Poate veţi întâlni erori sau veţi observa funcţionalităţi lipsă.",
+BrowseServerBlocked : "The resources browser could not be opened. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).",
+DialogBlocked : "Nu a fost posibilă deschiderea unei ferestre de dialog. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "Bine",
+DlgBtnCancel : "Anulare",
+DlgBtnClose : "ÃŽnchidere",
+DlgBtnBrowseServer : "Răsfoieşte server",
+DlgAdvancedTag : "Avansat",
+DlgOpOther : "<Altul>",
+DlgInfoTab : "Informaţii",
+DlgAlertUrl : "Vă rugăm să scrieţi URL-ul",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nesetat>",
+DlgGenId : "Id",
+DlgGenLangDir : "Direcţia cuvintelor",
+DlgGenLangDirLtr : "stânga-dreapta (LTR)",
+DlgGenLangDirRtl : "dreapta-stânga (RTL)",
+DlgGenLangCode : "Codul limbii",
+DlgGenAccessKey : "Tasta de acces",
+DlgGenName : "Nume",
+DlgGenTabIndex : "Indexul tabului",
+DlgGenLongDescr : "Descrierea lungă URL",
+DlgGenClass : "Clasele cu stilul paginii (CSS)",
+DlgGenTitle : "Titlul consultativ",
+DlgGenContType : "Tipul consultativ al titlului",
+DlgGenLinkCharset : "Setul de caractere al resursei legate",
+DlgGenStyle : "Stil",
+
+// Image Dialog
+DlgImgTitle : "Proprietăţile imaginii",
+DlgImgInfoTab : "Informaţii despre imagine",
+DlgImgBtnUpload : "Trimite la server",
+DlgImgURL : "URL",
+DlgImgUpload : "Încarcă",
+DlgImgAlt : "Text alternativ",
+DlgImgWidth : "Lăţime",
+DlgImgHeight : "Înălţime",
+DlgImgLockRatio : "Păstrează proporţiile",
+DlgBtnResetSize : "Resetează mărimea",
+DlgImgBorder : "Margine",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Aliniere",
+DlgImgAlignLeft : "Stânga",
+DlgImgAlignAbsBottom: "Jos absolut (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Mijloc absolut (Abs Middle)",
+DlgImgAlignBaseline : "Linia de jos (Baseline)",
+DlgImgAlignBottom : "Jos",
+DlgImgAlignMiddle : "Mijloc",
+DlgImgAlignRight : "Dreapta",
+DlgImgAlignTextTop : "Text sus",
+DlgImgAlignTop : "Sus",
+DlgImgPreview : "Previzualizare",
+DlgImgAlertUrl : "Vă rugăm să scrieţi URL-ul imaginii",
+DlgImgLinkTab : "Link (Legătură web)",
+
+// Flash Dialog
+DlgFlashTitle : "Proprietăţile flash-ului",
+DlgFlashChkPlay : "Rulează automat",
+DlgFlashChkLoop : "Repetă (Loop)",
+DlgFlashChkMenu : "Activează meniul flash",
+DlgFlashScale : "Scală",
+DlgFlashScaleAll : "Arată tot",
+DlgFlashScaleNoBorder : "Fără margini (No border)",
+DlgFlashScaleFit : "PotriveÅŸte",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link (Legătură web)",
+DlgLnkInfoTab : "Informaţii despre link (Legătură web)",
+DlgLnkTargetTab : "Ţintă (Target)",
+
+DlgLnkType : "Tipul link-ului (al legăturii web)",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ancoră în această pagină",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protocol",
+DlgLnkProtoOther : "<altul>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Selectaţi o ancoră",
+DlgLnkAnchorByName : "după numele ancorei",
+DlgLnkAnchorById : "după Id-ul elementului",
+DlgLnkNoAnchors : "(Nicio ancoră disponibilă în document)",
+DlgLnkEMail : "Adresă de e-mail",
+DlgLnkEMailSubject : "Subiectul mesajului",
+DlgLnkEMailBody : "Conţinutul mesajului",
+DlgLnkUpload : "Încarcă",
+DlgLnkBtnUpload : "Trimite la server",
+
+DlgLnkTarget : "Ţintă (Target)",
+DlgLnkTargetFrame : "<frame>",
+DlgLnkTargetPopup : "<fereastra popup>",
+DlgLnkTargetBlank : "Fereastră nouă (_blank)",
+DlgLnkTargetParent : "Fereastra părinte (_parent)",
+DlgLnkTargetSelf : "Aceeaşi fereastră (_self)",
+DlgLnkTargetTop : "Fereastra din topul ierarhiei (_top)",
+DlgLnkTargetFrameName : "Numele frame-ului ţintă",
+DlgLnkPopWinName : "Numele ferestrei popup",
+DlgLnkPopWinFeat : "Proprietăţile ferestrei popup",
+DlgLnkPopResize : "Scalabilă",
+DlgLnkPopLocation : "Bara de locaţie",
+DlgLnkPopMenu : "Bara de meniu",
+DlgLnkPopScroll : "Scroll Bars",
+DlgLnkPopStatus : "Bara de status",
+DlgLnkPopToolbar : "Bara de opţiuni",
+DlgLnkPopFullScrn : "Tot ecranul (Full Screen)(IE)",
+DlgLnkPopDependent : "Dependent (Netscape)",
+DlgLnkPopWidth : "Lăţime",
+DlgLnkPopHeight : "Înălţime",
+DlgLnkPopLeft : "Poziţia la stânga",
+DlgLnkPopTop : "Poziţia la dreapta",
+
+DlnLnkMsgNoUrl : "Vă rugăm să scrieţi URL-ul",
+DlnLnkMsgNoEMail : "Vă rugăm să scrieţi adresa de e-mail",
+DlnLnkMsgNoAnchor : "Vă rugăm să selectaţi o ancoră",
+DlnLnkMsgInvPopName : "Numele 'popup'-ului trebuie să înceapă cu un caracter alfabetic şi trebuie să nu conţină spaţii",
+
+// Color Dialog
+DlgColorTitle : "Selectează culoare",
+DlgColorBtnClear : "Curăţă",
+DlgColorHighlight : "Subliniază (Highlight)",
+DlgColorSelected : "Selectat",
+
+// Smiley Dialog
+DlgSmileyTitle : "Inserează o figură expresivă (Emoticon)",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Selectează caracter special",
+
+// Table Dialog
+DlgTableTitle : "Proprietăţile tabelului",
+DlgTableRows : "Linii",
+DlgTableColumns : "Coloane",
+DlgTableBorder : "Mărimea marginii",
+DlgTableAlign : "Aliniament",
+DlgTableAlignNotSet : "<Nesetat>",
+DlgTableAlignLeft : "Stânga",
+DlgTableAlignCenter : "Centru",
+DlgTableAlignRight : "Dreapta",
+DlgTableWidth : "Lăţime",
+DlgTableWidthPx : "pixeli",
+DlgTableWidthPc : "procente",
+DlgTableHeight : "Înălţime",
+DlgTableCellSpace : "Spaţiu între celule",
+DlgTableCellPad : "Spaţiu în cadrul celulei",
+DlgTableCaption : "Titlu (Caption)",
+DlgTableSummary : "Rezumat",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Proprietăţile celulei",
+DlgCellWidth : "Lăţime",
+DlgCellWidthPx : "pixeli",
+DlgCellWidthPc : "procente",
+DlgCellHeight : "Înălţime",
+DlgCellWordWrap : "Desparte cuvintele (Wrap)",
+DlgCellWordWrapNotSet : "<Nesetat>",
+DlgCellWordWrapYes : "Da",
+DlgCellWordWrapNo : "Nu",
+DlgCellHorAlign : "Aliniament orizontal",
+DlgCellHorAlignNotSet : "<Nesetat>",
+DlgCellHorAlignLeft : "Stânga",
+DlgCellHorAlignCenter : "Centru",
+DlgCellHorAlignRight: "Dreapta",
+DlgCellVerAlign : "Aliniament vertical",
+DlgCellVerAlignNotSet : "<Nesetat>",
+DlgCellVerAlignTop : "Sus",
+DlgCellVerAlignMiddle : "Mijloc",
+DlgCellVerAlignBottom : "Jos",
+DlgCellVerAlignBaseline : "Linia de jos (Baseline)",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Lungimea în linii (Span)",
+DlgCellCollSpan : "Lungimea în coloane (Span)",
+DlgCellBackColor : "Culoarea fundalului",
+DlgCellBorderColor : "Culoarea marginii",
+DlgCellBtnSelect : "Selectaţi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Găseşte şi înlocuieşte",
+
+// Find Dialog
+DlgFindTitle : "Găseşte",
+DlgFindFindBtn : "Găseşte",
+DlgFindNotFoundMsg : "Textul specificat nu a fost găsit.",
+
+// Replace Dialog
+DlgReplaceTitle : "Replace",
+DlgReplaceFindLbl : "Găseşte:",
+DlgReplaceReplaceLbl : "ÃŽnlocuieÅŸte cu:",
+DlgReplaceCaseChk : "DeosebeÅŸte majuscule de minuscule (Match case)",
+DlgReplaceReplaceBtn : "ÃŽnlocuieÅŸte",
+DlgReplaceReplAllBtn : "ÃŽnlocuieÅŸte tot",
+DlgReplaceWordChk : "Doar cuvintele întregi",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl+X).",
+PasteErrorCopy : "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl+C).",
+
+PasteAsText : "Adaugă ca text simplu (Plain Text)",
+PasteFromWord : "Adaugă din Word",
+
+DlgPasteMsg2 : "Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.",
+DlgPasteSec : "Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.",
+DlgPasteIgnoreFont : "Ignoră definiţiile Font Face",
+DlgPasteRemoveStyles : "Şterge definiţiile stilurilor",
+
+// Color Picker
+ColorAutomatic : "Automatic",
+ColorMoreColors : "Mai multe culori...",
+
+// Document Properties
+DocProps : "Proprietăţile documentului",
+
+// Anchor Dialog
+DlgAnchorTitle : "Proprietăţile ancorei",
+DlgAnchorName : "Numele ancorei",
+DlgAnchorErrorName : "Vă rugăm scrieţi numele ancorei",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Nu e în dicţionar",
+DlgSpellChangeTo : "Schimbă în",
+DlgSpellBtnIgnore : "Ignoră",
+DlgSpellBtnIgnoreAll : "Ignoră toate",
+DlgSpellBtnReplace : "ÃŽnlocuieÅŸte",
+DlgSpellBtnReplaceAll : "ÃŽnlocuieÅŸte tot",
+DlgSpellBtnUndo : "Starea anterioară (undo)",
+DlgSpellNoSuggestions : "- Fără sugestii -",
+DlgSpellProgress : "Verificarea textului în desfăşurare...",
+DlgSpellNoMispell : "Verificarea textului terminată: Nicio greşeală găsită",
+DlgSpellNoChanges : "Verificarea textului terminată: Niciun cuvânt modificat",
+DlgSpellOneChange : "Verificarea textului terminată: Un cuvânt modificat",
+DlgSpellManyChanges : "Verificarea textului terminată: 1% cuvinte modificate",
+
+IeSpellDownload : "Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?",
+
+// Button Dialog
+DlgButtonText : "Text (Valoare)",
+DlgButtonType : "Tip",
+DlgButtonTypeBtn : "Button",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Nume",
+DlgCheckboxValue : "Valoare",
+DlgCheckboxSelected : "Selectat",
+
+// Form Dialog
+DlgFormName : "Nume",
+DlgFormAction : "Acţiune",
+DlgFormMethod : "Metodă",
+
+// Select Field Dialog
+DlgSelectName : "Nume",
+DlgSelectValue : "Valoare",
+DlgSelectSize : "Mărime",
+DlgSelectLines : "linii",
+DlgSelectChkMulti : "Permite selecţii multiple",
+DlgSelectOpAvail : "Opţiuni disponibile",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Valoare",
+DlgSelectBtnAdd : "Adaugă",
+DlgSelectBtnModify : "Modifică",
+DlgSelectBtnUp : "Sus",
+DlgSelectBtnDown : "Jos",
+DlgSelectBtnSetValue : "Setează ca valoare selectată",
+DlgSelectBtnDelete : "Åžterge",
+
+// Textarea Dialog
+DlgTextareaName : "Nume",
+DlgTextareaCols : "Coloane",
+DlgTextareaRows : "Linii",
+
+// Text Field Dialog
+DlgTextName : "Nume",
+DlgTextValue : "Valoare",
+DlgTextCharWidth : "Lărgimea caracterului",
+DlgTextMaxChars : "Caractere maxime",
+DlgTextType : "Tip",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Parolă",
+
+// Hidden Field Dialog
+DlgHiddenName : "Nume",
+DlgHiddenValue : "Valoare",
+
+// Bulleted List Dialog
+BulletedListProp : "Proprietăţile listei punctate (Bulleted List)",
+NumberedListProp : "Proprietăţile listei numerotate (Numbered List)",
+DlgLstStart : "Start",
+DlgLstType : "Tip",
+DlgLstTypeCircle : "Cerc",
+DlgLstTypeDisc : "Disc",
+DlgLstTypeSquare : "Pătrat",
+DlgLstTypeNumbers : "Numere (1, 2, 3)",
+DlgLstTypeLCase : "Minuscule-litere mici (a, b, c)",
+DlgLstTypeUCase : "Majuscule (A, B, C)",
+DlgLstTypeSRoman : "Cifre romane mici (i, ii, iii)",
+DlgLstTypeLRoman : "Cifre romane mari (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "General",
+DlgDocBackTab : "Fundal",
+DlgDocColorsTab : "Culori si margini",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Titlul paginii",
+DlgDocLangDir : "Descrierea limbii",
+DlgDocLangDirLTR : "stânga-dreapta (LTR)",
+DlgDocLangDirRTL : "dreapta-stânga (RTL)",
+DlgDocLangCode : "Codul limbii",
+DlgDocCharSet : "Encoding setului de caractere",
+DlgDocCharSetCE : "Central european",
+DlgDocCharSetCT : "Chinezesc tradiţional (Big5)",
+DlgDocCharSetCR : "Chirilic",
+DlgDocCharSetGR : "Grecesc",
+DlgDocCharSetJP : "Japonez",
+DlgDocCharSetKR : "Corean",
+DlgDocCharSetTR : "Turcesc",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Vest european",
+DlgDocCharSetOther : "Alt encoding al setului de caractere",
+
+DlgDocDocType : "Document Type Heading",
+DlgDocDocTypeOther : "Alt Document Type Heading",
+DlgDocIncXHTML : "Include declaraţii XHTML",
+DlgDocBgColor : "Culoarea fundalului (Background Color)",
+DlgDocBgImage : "URL-ul imaginii din fundal (Background Image URL)",
+DlgDocBgNoScroll : "Fundal neflotant, fix (Nonscrolling Background)",
+DlgDocCText : "Text",
+DlgDocCLink : "Link (Legătură web)",
+DlgDocCVisited : "Link (Legătură web) vizitat",
+DlgDocCActive : "Link (Legătură web) activ",
+DlgDocMargins : "Marginile paginii",
+DlgDocMaTop : "Sus",
+DlgDocMaLeft : "Stânga",
+DlgDocMaRight : "Dreapta",
+DlgDocMaBottom : "Jos",
+DlgDocMeIndex : "Cuvinte cheie după care se va indexa documentul (separate prin virgulă)",
+DlgDocMeDescr : "Descrierea documentului",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Drepturi de autor",
+DlgDocPreview : "Previzualizare",
+
+// Templates Dialog
+Templates : "Template-uri (ÅŸabloane)",
+DlgTemplatesTitle : "Template-uri (şabloane) de conţinut",
+DlgTemplatesSelMsg : "Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):",
+DlgTemplatesLoading : "Se încarcă lista cu template-uri (şabloane). Vă rugăm aşteptaţi...",
+DlgTemplatesNoTpl : "(Niciun template (ÅŸablon) definit)",
+DlgTemplatesReplace : "ÃŽnlocuieÅŸte cuprinsul actual",
+
+// About Dialog
+DlgAboutAboutTab : "Despre",
+DlgAboutBrowserInfoTab : "Informaţii browser",
+DlgAboutLicenseTab : "Licenţă",
+DlgAboutVersion : "versiune",
+DlgAboutInfo : "Pentru informaţii amănunţite, vizitaţi",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ru.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ru.js
new file mode 100644
index 0000000..513ebe4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ru.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Russian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Свернуть панель инÑтрументов",
+ToolbarExpand : "Развернуть панель инÑтрументов",
+
+// Toolbar Items and Context Menu
+Save : "Сохранить",
+NewPage : "ÐÐ¾Ð²Ð°Ñ Ñтраница",
+Preview : "Предварительный проÑмотр",
+Cut : "Вырезать",
+Copy : "Копировать",
+Paste : "Ð’Ñтавить",
+PasteText : "Ð’Ñтавить только текÑÑ‚",
+PasteWord : "Ð’Ñтавить из Word",
+Print : "Печать",
+SelectAll : "Выделить вÑе",
+RemoveFormat : "Убрать форматирование",
+InsertLinkLbl : "СÑылка",
+InsertLink : "Ð’Ñтавить/Редактировать ÑÑылку",
+RemoveLink : "Убрать ÑÑылку",
+VisitLink : "Перейти по ÑÑылке",
+Anchor : "Ð’Ñтавить/Редактировать Ñкорь",
+AnchorDelete : "Убрать Ñкорь",
+InsertImageLbl : "Изображение",
+InsertImage : "Ð’Ñтавить/Редактировать изображение",
+InsertFlashLbl : "Flash",
+InsertFlash : "Ð’Ñтавить/Редактировать Flash",
+InsertTableLbl : "Таблица",
+InsertTable : "Ð’Ñтавить/Редактировать таблицу",
+InsertLineLbl : "ЛиниÑ",
+InsertLine : "Ð’Ñтавить горизонтальную линию",
+InsertSpecialCharLbl: "Специальный Ñимвол",
+InsertSpecialChar : "Ð’Ñтавить Ñпециальный Ñимвол",
+InsertSmileyLbl : "Смайлик",
+InsertSmiley : "Ð’Ñтавить Ñмайлик",
+About : "О FCKeditor",
+Bold : "Жирный",
+Italic : "КурÑив",
+Underline : "Подчеркнутый",
+StrikeThrough : "Зачеркнутый",
+Subscript : "ПодÑтрочный индекÑ",
+Superscript : "ÐадÑтрочный индекÑ",
+LeftJustify : "По левому краю",
+CenterJustify : "По центру",
+RightJustify : "По правому краю",
+BlockJustify : "По ширине",
+DecreaseIndent : "Уменьшить отÑтуп",
+IncreaseIndent : "Увеличить отÑтуп",
+Blockquote : "Цитата",
+CreateDiv : "Создать Div контейнер",
+EditDiv : "Редактировать Div контейнер",
+DeleteDiv : "Удалить Div контейнер",
+Undo : "Отменить",
+Redo : "Повторить",
+NumberedListLbl : "Ðумерованный ÑпиÑок",
+NumberedList : "Ð’Ñтавить/Удалить нумерованный ÑпиÑок",
+BulletedListLbl : "Маркированный ÑпиÑок",
+BulletedList : "Ð’Ñтавить/Удалить маркированный ÑпиÑок",
+ShowTableBorders : "Показать бордюры таблицы",
+ShowDetails : "Показать детали",
+Style : "Стиль",
+FontFormat : "Форматирование",
+Font : "Шрифт",
+FontSize : "Размер",
+TextColor : "Цвет текÑта",
+BGColor : "Цвет фона",
+Source : "ИÑточник",
+Find : "Ðайти",
+Replace : "Заменить",
+SpellCheck : "Проверить орфографию",
+UniversalKeyboard : "УниверÑÐ°Ð»ÑŒÐ½Ð°Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð°",
+PageBreakLbl : "Разрыв Ñтраницы",
+PageBreak : "Ð’Ñтавить разрыв Ñтраницы",
+
+Form : "Форма",
+Checkbox : "Ð¤Ð»Ð°Ð³Ð¾Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°",
+RadioButton : "Кнопка выбора",
+TextField : "ТекÑтовое поле",
+Textarea : "ТекÑÑ‚Ð¾Ð²Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ",
+HiddenField : "Скрытое поле",
+Button : "Кнопка",
+SelectionField : "СпиÑок",
+ImageButton : "Кнопка Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼",
+
+FitWindow : "Развернуть окно редактора",
+ShowBlocks : "Показать блоки",
+
+// Context Menu
+EditLink : "Ð’Ñтавить ÑÑылку",
+CellCM : "Ячейка",
+RowCM : "Строка",
+ColumnCM : "Колонка",
+InsertRowAfter : "Ð’Ñтавить Ñтроку поÑле",
+InsertRowBefore : "Ð’Ñтавить Ñтроку до",
+DeleteRows : "Удалить Ñтроки",
+InsertColumnAfter : "Ð’Ñтавить колонку поÑле",
+InsertColumnBefore : "Ð’Ñтавить колонку до",
+DeleteColumns : "Удалить колонки",
+InsertCellAfter : "Ð’Ñтавить Ñчейку поÑле",
+InsertCellBefore : "Ð’Ñтавить Ñчейку до",
+DeleteCells : "Удалить Ñчейки",
+MergeCells : "Соединить Ñчейки",
+MergeRight : "Соединить вправо",
+MergeDown : "Соединить вниз",
+HorizontalSplitCell : "Разбить Ñчейку горизонтально",
+VerticalSplitCell : "Разбить Ñчейку вертикально",
+TableDelete : "Удалить таблицу",
+CellProperties : "СвойÑтва Ñчейки",
+TableProperties : "СвойÑтва таблицы",
+ImageProperties : "СвойÑтва изображениÑ",
+FlashProperties : "СвойÑтва Flash",
+
+AnchorProp : "СвойÑтва ÑкорÑ",
+ButtonProp : "СвойÑтва кнопки",
+CheckboxProp : "СвойÑтва флаговой кнопки",
+HiddenFieldProp : "СвойÑтва Ñкрытого полÑ",
+RadioButtonProp : "СвойÑтва кнопки выбора",
+ImageButtonProp : "СвойÑтва кнопки Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼",
+TextFieldProp : "СвойÑтва текÑтового полÑ",
+SelectionFieldProp : "СвойÑтва ÑпиÑка",
+TextareaProp : "СвойÑтва текÑтовой облаÑти",
+FormProp : "СвойÑтва формы",
+
+FontFormats : "Ðормальный;Форматированный;ÐдреÑ;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Ðормальный (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Обработка XHTML. ПожалуйÑта, подождите...",
+Done : "Сделано",
+PasteWordConfirm : "ТекÑÑ‚, который вы хотите вÑтавить, похож на копируемый из Word. Ð’Ñ‹ хотите очиÑтить его перед вÑтавкой?",
+NotCompatiblePaste : "Эта команда доÑтупна Ð´Ð»Ñ Internet Explorer верÑии 5.5 или выше. Ð’Ñ‹ хотите вÑтавить без очиÑтки?",
+UnknownToolbarItem : "Ðе извеÑтный Ñлемент панели инÑтрументов \"%1\"",
+UnknownCommand : "Ðе извеÑтное Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ \"%1\"",
+NotImplemented : "Команда не реализована",
+UnknownToolbarSet : "Панель инÑтрументов \"%1\" не ÑущеÑтвует",
+NoActiveX : "ÐаÑтройки безопаÑноÑти вашего браузера могут ограничивать некоторые ÑвойÑтва редактора. Ð’Ñ‹ должны включить опцию \"ЗапуÑкать Ñлементы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ActiveX и плугины\". Ð’Ñ‹ можете видеть ошибки и замечать отÑутÑтвие возможноÑтей.",
+BrowseServerBlocked : "РеÑурÑÑ‹ браузера не могут быть открыты. Проверьте что блокировки вÑплывающих окон выключены.",
+DialogBlocked : "Ðевозможно открыть окно диалога. Проверьте что блокировки вÑплывающих окон выключены.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "ОК",
+DlgBtnCancel : "Отмена",
+DlgBtnClose : "Закрыть",
+DlgBtnBrowseServer : "ПроÑмотреть на Ñервере",
+DlgAdvancedTag : "РаÑширенный",
+DlgOpOther : "<Другое>",
+DlgInfoTab : "ИнформациÑ",
+DlgAlertUrl : "ПожалуйÑта, вÑтавьте URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<не определено>",
+DlgGenId : "Идентификатор",
+DlgGenLangDir : "Ðаправление Ñзыка",
+DlgGenLangDirLtr : "Слева на право (LTR)",
+DlgGenLangDirRtl : "Справа на лево (RTL)",
+DlgGenLangCode : "Язык",
+DlgGenAccessKey : "ГорÑÑ‡Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°",
+DlgGenName : "ИмÑ",
+DlgGenTabIndex : "ПоÑледовательноÑÑ‚ÑŒ перехода",
+DlgGenLongDescr : "Длинное опиÑание URL",
+DlgGenClass : "КлаÑÑ CSS",
+DlgGenTitle : "Заголовок",
+DlgGenContType : "Тип Ñодержимого",
+DlgGenLinkCharset : "Кодировка",
+DlgGenStyle : "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle : "СвойÑтва изображениÑ",
+DlgImgInfoTab : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ изображении",
+DlgImgBtnUpload : "ПоÑлать на Ñервер",
+DlgImgURL : "URL",
+DlgImgUpload : "Закачать",
+DlgImgAlt : "Ðльтернативный текÑÑ‚",
+DlgImgWidth : "Ширина",
+DlgImgHeight : "Ð’Ñ‹Ñота",
+DlgImgLockRatio : "СохранÑÑ‚ÑŒ пропорции",
+DlgBtnResetSize : "СброÑить размер",
+DlgImgBorder : "Бордюр",
+DlgImgHSpace : "Горизонтальный отÑтуп",
+DlgImgVSpace : "Вертикальный отÑтуп",
+DlgImgAlign : "Выравнивание",
+DlgImgAlignLeft : "По левому краю",
+DlgImgAlignAbsBottom: "ÐÐ±Ñ Ð¿Ð¾Ð½Ð¸Ð·Ñƒ",
+DlgImgAlignAbsMiddle: "ÐÐ±Ñ Ð¿Ð¾Ñередине",
+DlgImgAlignBaseline : "По базовой линии",
+DlgImgAlignBottom : "Понизу",
+DlgImgAlignMiddle : "ПоÑередине",
+DlgImgAlignRight : "По правому краю",
+DlgImgAlignTextTop : "ТекÑÑ‚ наверху",
+DlgImgAlignTop : "По верху",
+DlgImgPreview : "Предварительный проÑмотр",
+DlgImgAlertUrl : "ПожалуйÑта, введите URL изображениÑ",
+DlgImgLinkTab : "СÑылка",
+
+// Flash Dialog
+DlgFlashTitle : "СвойÑтва Flash",
+DlgFlashChkPlay : "Ðвто проигрывание",
+DlgFlashChkLoop : "Повтор",
+DlgFlashChkMenu : "Включить меню Flash",
+DlgFlashScale : "МаÑштабировать",
+DlgFlashScaleAll : "Показывать вÑе",
+DlgFlashScaleNoBorder : "Без бордюра",
+DlgFlashScaleFit : "Точное Ñовпадение",
+
+// Link Dialog
+DlgLnkWindowTitle : "СÑылка",
+DlgLnkInfoTab : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑÑылки",
+DlgLnkTargetTab : "Цель",
+
+DlgLnkType : "Тип ÑÑылки",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Якорь на Ñту Ñтраницу",
+DlgLnkTypeEMail : "Эл. почта",
+DlgLnkProto : "Протокол",
+DlgLnkProtoOther : "<другое>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Выберите Ñкорь",
+DlgLnkAnchorByName : "По имени ÑкорÑ",
+DlgLnkAnchorById : "По идентификатору Ñлемента",
+DlgLnkNoAnchors : "(Ðет Ñкорей доÑтупных в Ñтом документе)",
+DlgLnkEMail : "ÐÐ´Ñ€ÐµÑ Ñл. почты",
+DlgLnkEMailSubject : "Заголовок ÑообщениÑ",
+DlgLnkEMailBody : "Тело ÑообщениÑ",
+DlgLnkUpload : "Закачать",
+DlgLnkBtnUpload : "ПоÑлать на Ñервер",
+
+DlgLnkTarget : "Цель",
+DlgLnkTargetFrame : "<фрейм>",
+DlgLnkTargetPopup : "<вÑплывающее окно>",
+DlgLnkTargetBlank : "Ðовое окно (_blank)",
+DlgLnkTargetParent : "РодительÑкое окно (_parent)",
+DlgLnkTargetSelf : "Тоже окно (_self)",
+DlgLnkTargetTop : "Самое верхнее окно (_top)",
+DlgLnkTargetFrameName : "Ð˜Ð¼Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ фрейма",
+DlgLnkPopWinName : "Ð˜Ð¼Ñ Ð²Ñплывающего окна",
+DlgLnkPopWinFeat : "СвойÑтва вÑплывающего окна",
+DlgLnkPopResize : "ИзменÑющееÑÑ Ð² размерах",
+DlgLnkPopLocation : "Панель локации",
+DlgLnkPopMenu : "Панель меню",
+DlgLnkPopScroll : "ПолоÑÑ‹ прокрутки",
+DlgLnkPopStatus : "Строка ÑоÑтоÑниÑ",
+DlgLnkPopToolbar : "Панель инÑтрументов",
+DlgLnkPopFullScrn : "Полный Ñкран (IE)",
+DlgLnkPopDependent : "ЗавиÑимый (Netscape)",
+DlgLnkPopWidth : "Ширина",
+DlgLnkPopHeight : "Ð’Ñ‹Ñота",
+DlgLnkPopLeft : "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ñлева",
+DlgLnkPopTop : "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ñверху",
+
+DlnLnkMsgNoUrl : "ПожалуйÑта, введите URL ÑÑылки",
+DlnLnkMsgNoEMail : "ПожалуйÑта, введите Ð°Ð´Ñ€ÐµÑ Ñл. почты",
+DlnLnkMsgNoAnchor : "ПожалуйÑта, выберете Ñкорь",
+DlnLnkMsgInvPopName : "Ðазвание вÑпывающего окна должно начинатьÑÑ Ð±ÑƒÐºÐ²Ñ‹ и не может Ñодержать пробелов",
+
+// Color Dialog
+DlgColorTitle : "Выберите цвет",
+DlgColorBtnClear : "ОчиÑтить",
+DlgColorHighlight : "ПодÑвеченный",
+DlgColorSelected : "Выбранный",
+
+// Smiley Dialog
+DlgSmileyTitle : "Ð’Ñтавить Ñмайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Выберите Ñпециальный Ñимвол",
+
+// Table Dialog
+DlgTableTitle : "СвойÑтва таблицы",
+DlgTableRows : "Строки",
+DlgTableColumns : "Колонки",
+DlgTableBorder : "Размер бордюра",
+DlgTableAlign : "Выравнивание",
+DlgTableAlignNotSet : "<Ðе уÑÑ‚.>",
+DlgTableAlignLeft : "Слева",
+DlgTableAlignCenter : "По центру",
+DlgTableAlignRight : "Справа",
+DlgTableWidth : "Ширина",
+DlgTableWidthPx : "пикÑелей",
+DlgTableWidthPc : "процентов",
+DlgTableHeight : "Ð’Ñ‹Ñота",
+DlgTableCellSpace : "Промежуток (spacing)",
+DlgTableCellPad : "ОтÑтуп (padding)",
+DlgTableCaption : "Заголовок",
+DlgTableSummary : "Резюме",
+DlgTableHeaders : "Заголовки",
+DlgTableHeadersNone : "Ðет",
+DlgTableHeadersColumn : "Первый Ñтолбец",
+DlgTableHeadersRow : "ÐŸÐµÑ€Ð²Ð°Ñ Ñтрока",
+DlgTableHeadersBoth : "Оба варианта",
+
+// Table Cell Dialog
+DlgCellTitle : "СвойÑтва Ñчейки",
+DlgCellWidth : "Ширина",
+DlgCellWidthPx : "пикÑелей",
+DlgCellWidthPc : "процентов",
+DlgCellHeight : "Ð’Ñ‹Ñота",
+DlgCellWordWrap : "Заворачивание текÑта",
+DlgCellWordWrapNotSet : "<Ðе уÑÑ‚.>",
+DlgCellWordWrapYes : "Да",
+DlgCellWordWrapNo : "Ðет",
+DlgCellHorAlign : "Гор. выравнивание",
+DlgCellHorAlignNotSet : "<Ðе уÑÑ‚.>",
+DlgCellHorAlignLeft : "Слева",
+DlgCellHorAlignCenter : "По центру",
+DlgCellHorAlignRight: "Справа",
+DlgCellVerAlign : "Верт. выравнивание",
+DlgCellVerAlignNotSet : "<Ðе уÑÑ‚.>",
+DlgCellVerAlignTop : "Сверху",
+DlgCellVerAlignMiddle : "ПоÑередине",
+DlgCellVerAlignBottom : "Снизу",
+DlgCellVerAlignBaseline : "По базовой линии",
+DlgCellType : "Тип Ñчейки",
+DlgCellTypeData : "Данные",
+DlgCellTypeHeader : "Заголовок",
+DlgCellRowSpan : "Диапазон Ñтрок (span)",
+DlgCellCollSpan : "Диапазон колонок (span)",
+DlgCellBackColor : "Цвет фона",
+DlgCellBorderColor : "Цвет бордюра",
+DlgCellBtnSelect : "Выберите...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Ðайти и заменить",
+
+// Find Dialog
+DlgFindTitle : "Ðайти",
+DlgFindFindBtn : "Ðайти",
+DlgFindNotFoundMsg : "Указанный текÑÑ‚ не найден.",
+
+// Replace Dialog
+DlgReplaceTitle : "Заменить",
+DlgReplaceFindLbl : "Ðайти:",
+DlgReplaceReplaceLbl : "Заменить на:",
+DlgReplaceCaseChk : "Учитывать региÑÑ‚Ñ€",
+DlgReplaceReplaceBtn : "Заменить",
+DlgReplaceReplAllBtn : "Заменить вÑе",
+DlgReplaceWordChk : "Совпадение целых Ñлов",
+
+// Paste Operations / Dialog
+PasteErrorCut : "ÐаÑтройки безопаÑноÑти вашего браузера не позволÑÑŽÑ‚ редактору автоматичеÑки выполнÑÑ‚ÑŒ операции вырезаниÑ. ПожалуйÑта, иÑпользуйте клавиатуру Ð´Ð»Ñ Ñтого (Ctrl+X).",
+PasteErrorCopy : "ÐаÑтройки безопаÑноÑти вашего браузера не позволÑÑŽÑ‚ редактору автоматичеÑки выполнÑÑ‚ÑŒ операции копированиÑ. ПожалуйÑта, иÑпользуйте клавиатуру Ð´Ð»Ñ Ñтого (Ctrl+C).",
+
+PasteAsText : "Ð’Ñтавить только текÑÑ‚",
+PasteFromWord : "Ð’Ñтавить из Word",
+
+DlgPasteMsg2 : "ПожалуйÑта, вÑтавьте текÑÑ‚ в прÑмоугольник, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñочетание клавиш (<STRONG>Ctrl+V</STRONG>), и нажмите <STRONG>OK</STRONG>.",
+DlgPasteSec : "По причине наÑтроек безопаÑноÑти браузера, редактор не имеет доÑтупа к данным буфера обмена напрÑмую. Вам необходимо вÑтавить текÑÑ‚ Ñнова в Ñто окно.",
+DlgPasteIgnoreFont : "Игнорировать Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð³Ð°Ñ€Ð½Ð¸Ñ‚ÑƒÑ€Ñ‹",
+DlgPasteRemoveStyles : "Убрать Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñтилей",
+
+// Color Picker
+ColorAutomatic : "ÐвтоматичеÑкий",
+ColorMoreColors : "Цвета...",
+
+// Document Properties
+DocProps : "СвойÑтва документа",
+
+// Anchor Dialog
+DlgAnchorTitle : "СвойÑтва ÑкорÑ",
+DlgAnchorName : "Ð˜Ð¼Ñ ÑкорÑ",
+DlgAnchorErrorName : "ПожалуйÑта, введите Ð¸Ð¼Ñ ÑкорÑ",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ðет в Ñловаре",
+DlgSpellChangeTo : "Заменить на",
+DlgSpellBtnIgnore : "Игнорировать",
+DlgSpellBtnIgnoreAll : "Игнорировать вÑе",
+DlgSpellBtnReplace : "Заменить",
+DlgSpellBtnReplaceAll : "Заменить вÑе",
+DlgSpellBtnUndo : "Отменить",
+DlgSpellNoSuggestions : "- Ðет предположений -",
+DlgSpellProgress : "Идет проверка орфографии...",
+DlgSpellNoMispell : "Проверка орфографии закончена: ошибок не найдено",
+DlgSpellNoChanges : "Проверка орфографии закончена: ни одного Ñлова не изменено",
+DlgSpellOneChange : "Проверка орфографии закончена: одно Ñлово изменено",
+DlgSpellManyChanges : "Проверка орфографии закончена: 1% Ñлов изменен",
+
+IeSpellDownload : "Модуль проверки орфографии не уÑтановлен. Хотите Ñкачать его ÑейчаÑ?",
+
+// Button Dialog
+DlgButtonText : "ТекÑÑ‚ (Значение)",
+DlgButtonType : "Тип",
+DlgButtonTypeBtn : "Кнопка",
+DlgButtonTypeSbm : "Отправить",
+DlgButtonTypeRst : "СброÑить",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "ИмÑ",
+DlgCheckboxValue : "Значение",
+DlgCheckboxSelected : "ВыбраннаÑ",
+
+// Form Dialog
+DlgFormName : "ИмÑ",
+DlgFormAction : "ДейÑтвие",
+DlgFormMethod : "Метод",
+
+// Select Field Dialog
+DlgSelectName : "ИмÑ",
+DlgSelectValue : "Значение",
+DlgSelectSize : "Размер",
+DlgSelectLines : "линии",
+DlgSelectChkMulti : "Разрешить множеÑтвенный выбор",
+DlgSelectOpAvail : "ДоÑтупные варианты",
+DlgSelectOpText : "ТекÑÑ‚",
+DlgSelectOpValue : "Значение",
+DlgSelectBtnAdd : "Добавить",
+DlgSelectBtnModify : "Модифицировать",
+DlgSelectBtnUp : "Вверх",
+DlgSelectBtnDown : "Вниз",
+DlgSelectBtnSetValue : "УÑтановить как выбранное значение",
+DlgSelectBtnDelete : "Удалить",
+
+// Textarea Dialog
+DlgTextareaName : "ИмÑ",
+DlgTextareaCols : "Колонки",
+DlgTextareaRows : "Строки",
+
+// Text Field Dialog
+DlgTextName : "ИмÑ",
+DlgTextValue : "Значение",
+DlgTextCharWidth : "Ширина",
+DlgTextMaxChars : "МакÑ. кол-во Ñимволов",
+DlgTextType : "Тип",
+DlgTextTypeText : "ТекÑÑ‚",
+DlgTextTypePass : "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName : "ИмÑ",
+DlgHiddenValue : "Значение",
+
+// Bulleted List Dialog
+BulletedListProp : "СвойÑтва маркированного ÑпиÑка",
+NumberedListProp : "СвойÑтва нумерованного ÑпиÑка",
+DlgLstStart : "Ðачало",
+DlgLstType : "Тип",
+DlgLstTypeCircle : "Круг",
+DlgLstTypeDisc : "ДиÑк",
+DlgLstTypeSquare : "Квадрат",
+DlgLstTypeNumbers : "Ðомера (1, 2, 3)",
+DlgLstTypeLCase : "Буквы нижнего региÑтра (a, b, c)",
+DlgLstTypeUCase : "Буквы верхнего региÑтра (A, B, C)",
+DlgLstTypeSRoman : "Малые римÑкие буквы (i, ii, iii)",
+DlgLstTypeLRoman : "Большие римÑкие буквы (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Общие",
+DlgDocBackTab : "Задний фон",
+DlgDocColorsTab : "Цвета и отÑтупы",
+DlgDocMetaTab : "Мета данные",
+
+DlgDocPageTitle : "Заголовок Ñтраницы",
+DlgDocLangDir : "Ðаправление текÑта",
+DlgDocLangDirLTR : "Слева направо (LTR)",
+DlgDocLangDirRTL : "Справа налево (RTL)",
+DlgDocLangCode : "Код Ñзыка",
+DlgDocCharSet : "Кодировка набора Ñимволов",
+DlgDocCharSetCE : "Центрально-европейÑкаÑ",
+DlgDocCharSetCT : "КитайÑÐºÐ°Ñ Ñ‚Ñ€Ð°Ð´Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ (Big5)",
+DlgDocCharSetCR : "Кириллица",
+DlgDocCharSetGR : "ГречеÑкаÑ",
+DlgDocCharSetJP : "ЯпонÑкаÑ",
+DlgDocCharSetKR : "КорейÑкаÑ",
+DlgDocCharSetTR : "ТурецкаÑ",
+DlgDocCharSetUN : "Юникод (UTF-8)",
+DlgDocCharSetWE : "Западно-европейÑкаÑ",
+DlgDocCharSetOther : "Ð”Ñ€ÑƒÐ³Ð°Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ° набора Ñимволов",
+
+DlgDocDocType : "Заголовок типа документа",
+DlgDocDocTypeOther : "Другой заголовок типа документа",
+DlgDocIncXHTML : "Включить XHTML объÑвлениÑ",
+DlgDocBgColor : "Цвет фона",
+DlgDocBgImage : "URL Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ„Ð¾Ð½Ð°",
+DlgDocBgNoScroll : "ÐеÑкроллируемый фон",
+DlgDocCText : "ТекÑÑ‚",
+DlgDocCLink : "СÑылка",
+DlgDocCVisited : "ПоÑÐµÑ‰ÐµÐ½Ð½Ð°Ñ ÑÑылка",
+DlgDocCActive : "ÐÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÑÑылка",
+DlgDocMargins : "ОтÑтупы Ñтраницы",
+DlgDocMaTop : "Верхний",
+DlgDocMaLeft : "Левый",
+DlgDocMaRight : "Правый",
+DlgDocMaBottom : "Ðижний",
+DlgDocMeIndex : "Ключевые Ñлова документа (разделенные запÑтой)",
+DlgDocMeDescr : "ОпиÑание документа",
+DlgDocMeAuthor : "Ðвтор",
+DlgDocMeCopy : "ÐвторÑкие права",
+DlgDocPreview : "Предварительный проÑмотр",
+
+// Templates Dialog
+Templates : "Шаблоны",
+DlgTemplatesTitle : "Шаблоны Ñодержимого",
+DlgTemplatesSelMsg : "ПожалуйÑта, выберете шаблон Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð² редакторе<br>(текущее Ñодержимое будет потерÑно):",
+DlgTemplatesLoading : "Загрузка ÑпиÑка шаблонов. ПожалуйÑта, подождите...",
+DlgTemplatesNoTpl : "(Ðи одного шаблона не определено)",
+DlgTemplatesReplace : "Заменить текущее Ñодержание",
+
+// About Dialog
+DlgAboutAboutTab : "О программе",
+DlgAboutBrowserInfoTab : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð°",
+DlgAboutLicenseTab : "ЛицензиÑ",
+DlgAboutVersion : "ВерÑиÑ",
+DlgAboutInfo : "Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ информации, поÑетите",
+
+// Div Dialog
+DlgDivGeneralTab : "ИнформациÑ",
+DlgDivAdvancedTab : "РаÑширенные наÑтройки",
+DlgDivStyle : "Стиль",
+DlgDivInlineStyle : "Ð’Ñтроенные Ñтили"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sk.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sk.js
new file mode 100644
index 0000000..9c4bfda
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sk.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Slovak language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Skryť panel nástrojov",
+ToolbarExpand : "Zobraziť panel nástrojov",
+
+// Toolbar Items and Context Menu
+Save : "Uložiť",
+NewPage : "Nová stránka",
+Preview : "Náhľad",
+Cut : "Vystrihnúť",
+Copy : "Kopírovať",
+Paste : "Vložiť",
+PasteText : "VložiÅ¥ ako Äistý text",
+PasteWord : "Vložiť z Wordu",
+Print : "TlaÄ",
+SelectAll : "Vybrať všetko",
+RemoveFormat : "Odstrániť formátovanie",
+InsertLinkLbl : "Odkaz",
+InsertLink : "Vložiť/zmeniť odkaz",
+RemoveLink : "Odstrániť odkaz",
+VisitLink : "ÃsÅ¥ na odkaz",
+Anchor : "Vložiť/zmeniť kotvu",
+AnchorDelete : "Odstrániť kotvu",
+InsertImageLbl : "Obrázok",
+InsertImage : "Vložiť/zmeniť obrázok",
+InsertFlashLbl : "Flash",
+InsertFlash : "Vložiť/zmeniť Flash",
+InsertTableLbl : "Tabuľka",
+InsertTable : "Vložiť/zmeniť tabuľku",
+InsertLineLbl : "ÄŒiara",
+InsertLine : "VložiÅ¥ vodorovnú Äiaru",
+InsertSpecialCharLbl: "Špeciálne znaky",
+InsertSpecialChar : "Vložiť špeciálne znaky",
+InsertSmileyLbl : "Smajlíky",
+InsertSmiley : "Vložiť smajlíka",
+About : "O aplikácii FCKeditor",
+Bold : "TuÄné",
+Italic : "Kurzíva",
+Underline : "PodÄiarknuté",
+StrikeThrough : "PreÄiarknuté",
+Subscript : "Dolný index",
+Superscript : "Horný index",
+LeftJustify : "Zarovnať vľavo",
+CenterJustify : "Zarovnať na stred",
+RightJustify : "Zarovnať vpravo",
+BlockJustify : "Zarovnať do bloku",
+DecreaseIndent : "Zmenšiť odsadenie",
+IncreaseIndent : "ZväÄÅ¡iÅ¥ odsadenie",
+Blockquote : "Citácia",
+CreateDiv : "Vytvoriť Div kontajner",
+EditDiv : "Editovať Div kontajner",
+DeleteDiv : "Odstrániť Div kontajner",
+Undo : "Späť",
+Redo : "Znovu",
+NumberedListLbl : "Číslovanie",
+NumberedList : "VložiÅ¥/odstrániÅ¥ Äíslovanie",
+BulletedListLbl : "Odrážky",
+BulletedList : "Vložiť/odstraniť odrážky",
+ShowTableBorders : "Zobraziť okraje tabuliek",
+ShowDetails : "Zobraziť podrobnosti",
+Style : "Štýl",
+FontFormat : "Formát",
+Font : "Písmo",
+FontSize : "Veľkosť",
+TextColor : "Farba textu",
+BGColor : "Farba pozadia",
+Source : "Zdroj",
+Find : "Hľadať",
+Replace : "Nahradiť",
+SpellCheck : "Kontrola pravopisu",
+UniversalKeyboard : "Univerzálna klávesnica",
+PageBreakLbl : "OddeľovaÄ stránky",
+PageBreak : "VložiÅ¥ oddeľovaÄ stránky",
+
+Form : "Formulár",
+Checkbox : "ZaÅ¡krtávacie políÄko",
+RadioButton : "PrepínaÄ",
+TextField : "Textové pole",
+Textarea : "Textová oblasť",
+HiddenField : "Skryté pole",
+Button : "TlaÄidlo",
+SelectionField : "Rozbaľovací zoznam",
+ImageButton : "Obrázkové tlaÄidlo",
+
+FitWindow : "Maximalizovať veľkosť okna editora",
+ShowBlocks : "Ukázať bloky",
+
+// Context Menu
+EditLink : "Zmeniť odkaz",
+CellCM : "Bunka",
+RowCM : "Riadok",
+ColumnCM : "Stĺpec",
+InsertRowAfter : "Vložiť riadok pred",
+InsertRowBefore : "Vložiť riadok za",
+DeleteRows : "Vymazať riadok",
+InsertColumnAfter : "Vložiť stĺpec pred",
+InsertColumnBefore : "Vložiť stĺpec za",
+DeleteColumns : "Zmazať stĺpec",
+InsertCellAfter : "Vložiť bunku za",
+InsertCellBefore : "Vložiť bunku pred",
+DeleteCells : "Vymazať bunky",
+MergeCells : "ZlúÄiÅ¥ bunky",
+MergeRight : "ZlúÄiÅ¥ doprava",
+MergeDown : "ZlúÄiÅ¥ dole",
+HorizontalSplitCell : "Rozdeliť bunky horizontálne",
+VerticalSplitCell : "Rozdeliť bunky vertikálne",
+TableDelete : "Vymazať tabuľku",
+CellProperties : "Vlastnosti bunky",
+TableProperties : "Vlastnosti tabuľky",
+ImageProperties : "Vlastnosti obrázku",
+FlashProperties : "Vlastnosti Flashu",
+
+AnchorProp : "Vlastnosti kotvy",
+ButtonProp : "Vlastnosti tlaÄidla",
+CheckboxProp : "Vlastnosti zaÅ¡krtávacieho políÄka",
+HiddenFieldProp : "Vlastnosti skrytého poľa",
+RadioButtonProp : "Vlastnosti prepínaÄa",
+ImageButtonProp : "Vlastnosti obrázkového tlaÄidla",
+TextFieldProp : "Vlastnosti textového poľa",
+SelectionFieldProp : "Vlastnosti rozbaľovacieho zoznamu",
+TextareaProp : "Vlastnosti textovej oblasti",
+FormProp : "Vlastnosti formulára",
+
+FontFormats : "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Odsek (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Prebieha spracovanie XHTML. Čakajte prosím...",
+Done : "DokonÄené.",
+PasteWordConfirm : "Vyzerá to tak, že vkladaný text je kopírovaný z Wordu. Chcete ho pred vložením vyÄistiÅ¥?",
+NotCompatiblePaste : "Tento príkaz je dostupný len v prehliadaÄi Internet Explorer verzie 5.5 alebo vyÅ¡Å¡ej. Chcete vložiÅ¥ text bez vyÄistenia?",
+UnknownToolbarItem : "Neznáma položka panela nástrojov \"%1\"",
+UnknownCommand : "Neznámy príkaz \"%1\"",
+NotImplemented : "Príkaz nie je implementovaný",
+UnknownToolbarSet : "Panel nástrojov \"%1\" neexistuje",
+NoActiveX : "BezpeÄnostné nastavenia vášho prehliadaÄa môžu obmedzovaÅ¥ niektoré funkcie editora. Pre ich plnú funkÄnosÅ¥ musíte zapnúť voľbu \"SpúšťaÅ¥ ActiveX moduly a zásuvné moduly\", inak sa môžete stretnúť s chybami a nefunkÄnosÅ¥ou niektorých funkcií.",
+BrowseServerBlocked : "PrehliadaÄ zdrojových prvkov nebolo možné otvoriÅ¥. Uistite sa, že máte vypnutú službu blokovania popup okien.",
+DialogBlocked : "Dialógové okno nebolo možné otvoriť. Uistite sa, že máte vypnutú službu blokovania popup okien.",
+VisitLinkBlocked : "Nebolo možné otvoriť nové okno. Uistite sa, že máte vypnutú službu blokovania popup okien.",
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Zrušiť",
+DlgBtnClose : "Zavrieť",
+DlgBtnBrowseServer : "Prechádzať server",
+DlgAdvancedTag : "Rozšírené",
+DlgOpOther : "<Ďalšie>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Prosím vložte URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nenastavené>",
+DlgGenId : "Id",
+DlgGenLangDir : "Orientácia jazyka",
+DlgGenLangDirLtr : "Zľava doprava (LTR)",
+DlgGenLangDirRtl : "Sprava doľava (RTL)",
+DlgGenLangCode : "Kód jazyka",
+DlgGenAccessKey : "Prístupový kľúÄ",
+DlgGenName : "Meno",
+DlgGenTabIndex : "Poradie prvku",
+DlgGenLongDescr : "Dlhý popis URL",
+DlgGenClass : "Trieda štýlu",
+DlgGenTitle : "Pomocný titulok",
+DlgGenContType : "Pomocný typ obsahu",
+DlgGenLinkCharset : "Priradená znaková sada",
+DlgGenStyle : "Štýl",
+
+// Image Dialog
+DlgImgTitle : "Vlastnosti obrázku",
+DlgImgInfoTab : "Informácie o obrázku",
+DlgImgBtnUpload : "Odoslať na server",
+DlgImgURL : "URL",
+DlgImgUpload : "Odoslať",
+DlgImgAlt : "Alternatívny text",
+DlgImgWidth : "Šírka",
+DlgImgHeight : "Výška",
+DlgImgLockRatio : "Zámok",
+DlgBtnResetSize : "Pôvodná veľkosť",
+DlgImgBorder : "Okraje",
+DlgImgHSpace : "H-medzera",
+DlgImgVSpace : "V-medzera",
+DlgImgAlign : "Zarovnanie",
+DlgImgAlignLeft : "Vľavo",
+DlgImgAlignAbsBottom: "Úplne dole",
+DlgImgAlignAbsMiddle: "Do stredu",
+DlgImgAlignBaseline : "Na základňu",
+DlgImgAlignBottom : "Dole",
+DlgImgAlignMiddle : "Na stred",
+DlgImgAlignRight : "Vpravo",
+DlgImgAlignTextTop : "Na horný okraj textu",
+DlgImgAlignTop : "Nahor",
+DlgImgPreview : "Náhľad",
+DlgImgAlertUrl : "Zadajte prosím URL obrázku",
+DlgImgLinkTab : "Odkaz",
+
+// Flash Dialog
+DlgFlashTitle : "Vlastnosti Flashu",
+DlgFlashChkPlay : "Automatické prehrávanie",
+DlgFlashChkLoop : "Opakovanie",
+DlgFlashChkMenu : "Povoliť Flash Menu",
+DlgFlashScale : "Mierka",
+DlgFlashScaleAll : "Zobraziť mierku",
+DlgFlashScaleNoBorder : "Bez okrajov",
+DlgFlashScaleFit : "Roztiahnuť na celé",
+
+// Link Dialog
+DlgLnkWindowTitle : "Odkaz",
+DlgLnkInfoTab : "Informácie o odkaze",
+DlgLnkTargetTab : "Cieľ",
+
+DlgLnkType : "Typ odkazu",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Kotva v tejto stránke",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<iný>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Vybrať kotvu",
+DlgLnkAnchorByName : "Podľa mena kotvy",
+DlgLnkAnchorById : "Podľa Id objektu",
+DlgLnkNoAnchors : "(V stránke nie je definovaná žiadna kotva)",
+DlgLnkEMail : "E-Mailová adresa",
+DlgLnkEMailSubject : "Predmet správy",
+DlgLnkEMailBody : "Telo správy",
+DlgLnkUpload : "Odoslať",
+DlgLnkBtnUpload : "Odoslať na server",
+
+DlgLnkTarget : "Cieľ",
+DlgLnkTargetFrame : "<rámec>",
+DlgLnkTargetPopup : "<vyskakovacie okno>",
+DlgLnkTargetBlank : "Nové okno (_blank)",
+DlgLnkTargetParent : "RodiÄovské okno (_parent)",
+DlgLnkTargetSelf : "Rovnaké okno (_self)",
+DlgLnkTargetTop : "Hlavné okno (_top)",
+DlgLnkTargetFrameName : "Meno rámu cieľa",
+DlgLnkPopWinName : "Názov vyskakovacieho okna",
+DlgLnkPopWinFeat : "Vlastnosti vyskakovacieho okna",
+DlgLnkPopResize : "Meniteľná veľkosť",
+DlgLnkPopLocation : "Panel umiestnenia",
+DlgLnkPopMenu : "Panel ponuky",
+DlgLnkPopScroll : "Posuvníky",
+DlgLnkPopStatus : "Stavový riadok",
+DlgLnkPopToolbar : "Panel nástrojov",
+DlgLnkPopFullScrn : "Celá obrazovka (IE)",
+DlgLnkPopDependent : "Závislosť (Netscape)",
+DlgLnkPopWidth : "Šírka",
+DlgLnkPopHeight : "Výška",
+DlgLnkPopLeft : "Ľavý okraj",
+DlgLnkPopTop : "Horný okraj",
+
+DlnLnkMsgNoUrl : "Zadajte prosím URL odkazu",
+DlnLnkMsgNoEMail : "Zadajte prosím e-mailovú adresu",
+DlnLnkMsgNoAnchor : "Vyberte prosím kotvu",
+DlnLnkMsgInvPopName : "Názov vyskakovacieho okna sa musá zaÄínaÅ¥ písmenom a nemôže obsahovaÅ¥ medzery",
+
+// Color Dialog
+DlgColorTitle : "Výber farby",
+DlgColorBtnClear : "Vymazať",
+DlgColorHighlight : "Zvýraznená",
+DlgColorSelected : "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle : "Vkladanie smajlíkov",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Výber špeciálneho znaku",
+
+// Table Dialog
+DlgTableTitle : "Vlastnosti tabuľky",
+DlgTableRows : "Riadky",
+DlgTableColumns : "Stĺpce",
+DlgTableBorder : "OhraniÄenie",
+DlgTableAlign : "Zarovnanie",
+DlgTableAlignNotSet : "<nenastavené>",
+DlgTableAlignLeft : "Vľavo",
+DlgTableAlignCenter : "Na stred",
+DlgTableAlignRight : "Vpravo",
+DlgTableWidth : "Šírka",
+DlgTableWidthPx : "pixelov",
+DlgTableWidthPc : "percent",
+DlgTableHeight : "Výška",
+DlgTableCellSpace : "Vzdialenosť buniek",
+DlgTableCellPad : "Odsadenie obsahu",
+DlgTableCaption : "Popis",
+DlgTableSummary : "Prehľad",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Vlastnosti bunky",
+DlgCellWidth : "Šírka",
+DlgCellWidthPx : "bodov",
+DlgCellWidthPc : "percent",
+DlgCellHeight : "Výška",
+DlgCellWordWrap : "Zalamovannie",
+DlgCellWordWrapNotSet : "<nenastavené>",
+DlgCellWordWrapYes : "Ãno",
+DlgCellWordWrapNo : "Nie",
+DlgCellHorAlign : "Vodorovné zarovnanie",
+DlgCellHorAlignNotSet : "<nenastavené>",
+DlgCellHorAlignLeft : "Vľavo",
+DlgCellHorAlignCenter : "Na stred",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign : "Zvislé zarovnanie",
+DlgCellVerAlignNotSet : "<nenastavené>",
+DlgCellVerAlignTop : "Nahor",
+DlgCellVerAlignMiddle : "Doprostred",
+DlgCellVerAlignBottom : "Dole",
+DlgCellVerAlignBaseline : "Na základňu",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "ZlúÄené riadky",
+DlgCellCollSpan : "ZlúÄené stĺpce",
+DlgCellBackColor : "Farba pozadia",
+DlgCellBorderColor : "Farba ohraniÄenia",
+DlgCellBtnSelect : "Výber...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Nájsť a nahradiť",
+
+// Find Dialog
+DlgFindTitle : "Hľadať",
+DlgFindFindBtn : "Hľadať",
+DlgFindNotFoundMsg : "Hľadaný text nebol nájdený.",
+
+// Replace Dialog
+DlgReplaceTitle : "Nahradiť",
+DlgReplaceFindLbl : "Čo hľadať:",
+DlgReplaceReplaceLbl : "Čím nahradiť:",
+DlgReplaceCaseChk : "Rozlišovať malé/veľké písmená",
+DlgReplaceReplaceBtn : "Nahradiť",
+DlgReplaceReplAllBtn : "Nahradiť všetko",
+DlgReplaceWordChk : "Len celé slová",
+
+// Paste Operations / Dialog
+PasteErrorCut : "BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).",
+PasteErrorCopy : "BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).",
+
+PasteAsText : "VložiÅ¥ ako Äistý text",
+PasteFromWord : "Vložiť text z Wordu",
+
+DlgPasteMsg2 : "Prosím vložte nasledovný rámÄek použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlaÄte <STRONG>OK</STRONG>.",
+DlgPasteSec : "BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru pristupovaÅ¥ priamo k datám v schránke. Musíte ich vložiÅ¥ znovu do tohto okna.",
+DlgPasteIgnoreFont : "Ignorovať nastavenia typu písma",
+DlgPasteRemoveStyles : "Odstrániť formátovanie",
+
+// Color Picker
+ColorAutomatic : "Automaticky",
+ColorMoreColors : "Viac farieb...",
+
+// Document Properties
+DocProps : "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle : "Vlastnosti kotvy",
+DlgAnchorName : "Meno kotvy",
+DlgAnchorErrorName : "Zadajte prosím meno kotvy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Nie je v slovníku",
+DlgSpellChangeTo : "Zmeniť na",
+DlgSpellBtnIgnore : "Ignorovať",
+DlgSpellBtnIgnoreAll : "Ignorovať všetko",
+DlgSpellBtnReplace : "Prepísat",
+DlgSpellBtnReplaceAll : "Prepísat všetko",
+DlgSpellBtnUndo : "Späť",
+DlgSpellNoSuggestions : "- Žiadny návrh -",
+DlgSpellProgress : "Prebieha kontrola pravopisu...",
+DlgSpellNoMispell : "Kontrola pravopisu dokonÄená: bez chýb",
+DlgSpellNoChanges : "Kontrola pravopisu dokonÄená: žiadne slová nezmenené",
+DlgSpellOneChange : "Kontrola pravopisu dokonÄená: zmenené jedno slovo",
+DlgSpellManyChanges : "Kontrola pravopisu dokonÄená: zmenených %1 slov",
+
+IeSpellDownload : "Kontrola pravopisu nie je naiÅ¡talovaná. Chcete ju hneÄ stiahnuÅ¥?",
+
+// Button Dialog
+DlgButtonText : "Text",
+DlgButtonType : "Typ",
+DlgButtonTypeBtn : "TlaÄidlo",
+DlgButtonTypeSbm : "Odoslať",
+DlgButtonTypeRst : "Vymazať",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Názov",
+DlgCheckboxValue : "Hodnota",
+DlgCheckboxSelected : "Vybrané",
+
+// Form Dialog
+DlgFormName : "Názov",
+DlgFormAction : "Akcie",
+DlgFormMethod : "Metóda",
+
+// Select Field Dialog
+DlgSelectName : "Názov",
+DlgSelectValue : "Hodnota",
+DlgSelectSize : "Veľkosť",
+DlgSelectLines : "riadkov",
+DlgSelectChkMulti : "Povoliť viacnásobný výber",
+DlgSelectOpAvail : "Dostupné možnosti",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Hodnota",
+DlgSelectBtnAdd : "Pridať",
+DlgSelectBtnModify : "Zmeniť",
+DlgSelectBtnUp : "Hore",
+DlgSelectBtnDown : "Dole",
+DlgSelectBtnSetValue : "Nastaviť ako vybranú hodnotu",
+DlgSelectBtnDelete : "Zmazať",
+
+// Textarea Dialog
+DlgTextareaName : "Názov",
+DlgTextareaCols : "Stĺpce",
+DlgTextareaRows : "Riadky",
+
+// Text Field Dialog
+DlgTextName : "Názov",
+DlgTextValue : "Hodnota",
+DlgTextCharWidth : "Šírka pola (znakov)",
+DlgTextMaxChars : "Maximálny poÄet znakov",
+DlgTextType : "Typ",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName : "Názov",
+DlgHiddenValue : "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp : "Vlastnosti odrážok",
+NumberedListProp : "Vlastnosti Äíslovania",
+DlgLstStart : "Å tart",
+DlgLstType : "Typ",
+DlgLstTypeCircle : "Krúžok",
+DlgLstTypeDisc : "Disk",
+DlgLstTypeSquare : "Å tvorec",
+DlgLstTypeNumbers : "Číslovanie (1, 2, 3)",
+DlgLstTypeLCase : "Malé písmená (a, b, c)",
+DlgLstTypeUCase : "Veľké písmená (A, B, C)",
+DlgLstTypeSRoman : "Malé rímske Äíslice (i, ii, iii)",
+DlgLstTypeLRoman : "Veľké rímske Äíslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Všeobecné",
+DlgDocBackTab : "Pozadie",
+DlgDocColorsTab : "Farby a okraje",
+DlgDocMetaTab : "Meta Data",
+
+DlgDocPageTitle : "Titulok",
+DlgDocLangDir : "Orientácie jazyka",
+DlgDocLangDirLTR : "Zľava doprava (LTR)",
+DlgDocLangDirRTL : "Sprava doľava (RTL)",
+DlgDocLangCode : "Kód jazyka",
+DlgDocCharSet : "Kódová stránka",
+DlgDocCharSetCE : "Stredoeurópske",
+DlgDocCharSetCT : "ČínÅ¡tina tradiÄná (Big5)",
+DlgDocCharSetCR : "Cyrillika",
+DlgDocCharSetGR : "GréÄtina",
+DlgDocCharSetJP : "JaponÄina",
+DlgDocCharSetKR : "KorejÄina",
+DlgDocCharSetTR : "TureÄtina",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Západná európa",
+DlgDocCharSetOther : "Iná kódová stránka",
+
+DlgDocDocType : "Typ záhlavia dokumentu",
+DlgDocDocTypeOther : "Iný typ záhlavia dokumentu",
+DlgDocIncXHTML : "Obsahuje deklarácie XHTML",
+DlgDocBgColor : "Farba pozadia",
+DlgDocBgImage : "URL adresa obrázku na pozadí",
+DlgDocBgNoScroll : "Fixné pozadie",
+DlgDocCText : "Text",
+DlgDocCLink : "Odkaz",
+DlgDocCVisited : "Navštívený odkaz",
+DlgDocCActive : "Aktívny odkaz",
+DlgDocMargins : "Okraje stránky",
+DlgDocMaTop : "Horný",
+DlgDocMaLeft : "Ľavý",
+DlgDocMaRight : "Pravý",
+DlgDocMaBottom : "Dolný",
+DlgDocMeIndex : "KľúÄové slová pre indexovanie (oddelené Äiarkou)",
+DlgDocMeDescr : "Popis stránky",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Autorské práva",
+DlgDocPreview : "Náhľad",
+
+// Templates Dialog
+Templates : "Šablóny",
+DlgTemplatesTitle : "Šablóny obsahu",
+DlgTemplatesSelMsg : "Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):",
+DlgTemplatesLoading : "Nahrávam zoznam šablón. Čakajte prosím...",
+DlgTemplatesNoTpl : "(žiadne šablóny nenájdené)",
+DlgTemplatesReplace : "Nahradiť aktuálny obsah",
+
+// About Dialog
+DlgAboutAboutTab : "O aplikáci",
+DlgAboutBrowserInfoTab : "Informácie o prehliadaÄi",
+DlgAboutLicenseTab : "Licencia",
+DlgAboutVersion : "verzia",
+DlgAboutInfo : "Viac informácií získate na",
+
+// Div Dialog
+DlgDivGeneralTab : "Hlavné",
+DlgDivAdvancedTab : "Rozšírené",
+DlgDivStyle : "Štýl",
+DlgDivInlineStyle : "Inline štýl"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sl.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sl.js
new file mode 100644
index 0000000..c00fbf6
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sl.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Slovenian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Zloži orodno vrstico",
+ToolbarExpand : "Razširi orodno vrstico",
+
+// Toolbar Items and Context Menu
+Save : "Shrani",
+NewPage : "Nova stran",
+Preview : "Predogled",
+Cut : "Izreži",
+Copy : "Kopiraj",
+Paste : "Prilepi",
+PasteText : "Prilepi kot golo besedilo",
+PasteWord : "Prilepi iz Worda",
+Print : "Natisni",
+SelectAll : "Izberi vse",
+RemoveFormat : "Odstrani oblikovanje",
+InsertLinkLbl : "Povezava",
+InsertLink : "Vstavi/uredi povezavo",
+RemoveLink : "Odstrani povezavo",
+VisitLink : "Open Link", //MISSING
+Anchor : "Vstavi/uredi zaznamek",
+AnchorDelete : "Odstrani zaznamek",
+InsertImageLbl : "Slika",
+InsertImage : "Vstavi/uredi sliko",
+InsertFlashLbl : "Flash",
+InsertFlash : "Vstavi/Uredi Flash",
+InsertTableLbl : "Tabela",
+InsertTable : "Vstavi/uredi tabelo",
+InsertLineLbl : "ÄŒrta",
+InsertLine : "Vstavi vodoravno Ärto",
+InsertSpecialCharLbl: "Posebni znak",
+InsertSpecialChar : "Vstavi posebni znak",
+InsertSmileyLbl : "Smeško",
+InsertSmiley : "Vstavi smeška",
+About : "O FCKeditorju",
+Bold : "Krepko",
+Italic : "LežeÄe",
+Underline : "PodÄrtano",
+StrikeThrough : "PreÄrtano",
+Subscript : "Podpisano",
+Superscript : "Nadpisano",
+LeftJustify : "Leva poravnava",
+CenterJustify : "Sredinska poravnava",
+RightJustify : "Desna poravnava",
+BlockJustify : "Obojestranska poravnava",
+DecreaseIndent : "Zmanjšaj zamik",
+IncreaseIndent : "PoveÄaj zamik",
+Blockquote : "Citat",
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Razveljavi",
+Redo : "Ponovi",
+NumberedListLbl : "OÅ¡tevilÄen seznam",
+NumberedList : "Vstavi/odstrani oÅ¡tevilÄevanje",
+BulletedListLbl : "OznaÄen seznam",
+BulletedList : "Vstavi/odstrani oznaÄevanje",
+ShowTableBorders : "Pokaži meje tabele",
+ShowDetails : "Pokaži podrobnosti",
+Style : "Slog",
+FontFormat : "Oblika",
+Font : "Pisava",
+FontSize : "Velikost",
+TextColor : "Barva besedila",
+BGColor : "Barva ozadja",
+Source : "Izvorna koda",
+Find : "Najdi",
+Replace : "Zamenjaj",
+SpellCheck : "Preveri Ärkovanje",
+UniversalKeyboard : "VeÄjeziÄna tipkovnica",
+PageBreakLbl : "Prelom strani",
+PageBreak : "Vstavi prelom strani",
+
+Form : "Obrazec",
+Checkbox : "Potrditveno polje",
+RadioButton : "Izbirno polje",
+TextField : "Vnosno polje",
+Textarea : "Vnosno obmoÄje",
+HiddenField : "Skrito polje",
+Button : "Gumb",
+SelectionField : "Spustni seznam",
+ImageButton : "Gumb s sliko",
+
+FitWindow : "RazÅ¡iri velikost urejevalnika Äez cel zaslon",
+ShowBlocks : "Prikaži ograde",
+
+// Context Menu
+EditLink : "Uredi povezavo",
+CellCM : "Celica",
+RowCM : "Vrstica",
+ColumnCM : "Stolpec",
+InsertRowAfter : "Vstavi vrstico za",
+InsertRowBefore : "Vstavi vrstico pred",
+DeleteRows : "Izbriši vrstice",
+InsertColumnAfter : "Vstavi stolpec za",
+InsertColumnBefore : "Vstavi stolpec pred",
+DeleteColumns : "Izbriši stolpce",
+InsertCellAfter : "Vstavi celico za",
+InsertCellBefore : "Vstavi celico pred",
+DeleteCells : "Izbriši celice",
+MergeCells : "Združi celice",
+MergeRight : "Združi desno",
+MergeDown : "Druži navzdol",
+HorizontalSplitCell : "Razdeli celico vodoravno",
+VerticalSplitCell : "Razdeli celico navpiÄno",
+TableDelete : "Izbriši tabelo",
+CellProperties : "Lastnosti celice",
+TableProperties : "Lastnosti tabele",
+ImageProperties : "Lastnosti slike",
+FlashProperties : "Lastnosti Flash",
+
+AnchorProp : "Lastnosti zaznamka",
+ButtonProp : "Lastnosti gumba",
+CheckboxProp : "Lastnosti potrditvenega polja",
+HiddenFieldProp : "Lastnosti skritega polja",
+RadioButtonProp : "Lastnosti izbirnega polja",
+ImageButtonProp : "Lastnosti gumba s sliko",
+TextFieldProp : "Lastnosti vnosnega polja",
+SelectionFieldProp : "Lastnosti spustnega seznama",
+TextareaProp : "Lastnosti vnosnega obmoÄja",
+FormProp : "Lastnosti obrazca",
+
+FontFormats : "Navaden;Oblikovan;Napis;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Obdelujem XHTML. Prosim poÄakajte...",
+Done : "Narejeno",
+PasteWordConfirm : "Izgleda, da želite prilepiti besedilo iz Worda. Ali ga želite oÄistiti, preden ga prilepite?",
+NotCompatiblePaste : "Ta ukaz deluje le v Internet Explorerje razliÄice 5.5 ali viÅ¡je. Ali želite prilepiti brez ÄiÅ¡Äenja?",
+UnknownToolbarItem : "Neznan element orodne vrstice \"%1\"",
+UnknownCommand : "Neznano ime ukaza \"%1\"",
+NotImplemented : "Ukaz ni izdelan",
+UnknownToolbarSet : "Skupina orodnih vrstic \"%1\" ne obstoja",
+NoActiveX : "Varnostne nastavitve vaÅ¡ega brskalnika lahko omejijo delovanje nekaterih zmožnosti urejevalnika. ÄŒe ne želite zaznavati napak in sporoÄil o manjkajoÄih zmožnostih, omogoÄite možnost \"Zaženi ActiveX kontrolnike in vtiÄnike\".",
+BrowseServerBlocked : "Brskalnik virov se ne more odpreti. PrepriÄajte se, da je prepreÄevanje pojavnih oken onemogoÄeno.",
+DialogBlocked : "Pogovorno okno se ni moglo odpreti. PrepriÄajte se, da je prepreÄevanje pojavnih oken onemogoÄeno.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "V redu",
+DlgBtnCancel : "PrekliÄi",
+DlgBtnClose : "Zapri",
+DlgBtnBrowseServer : "Prebrskaj na strežniku",
+DlgAdvancedTag : "Napredno",
+DlgOpOther : "<Ostalo>",
+DlgInfoTab : "Podatki",
+DlgAlertUrl : "Prosim vpiši spletni naslov",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ni postavljen>",
+DlgGenId : "Id",
+DlgGenLangDir : "Smer jezika",
+DlgGenLangDirLtr : "Od leve proti desni (LTR)",
+DlgGenLangDirRtl : "Od desne proti levi (RTL)",
+DlgGenLangCode : "Oznaka jezika",
+DlgGenAccessKey : "Vstopno geslo",
+DlgGenName : "Ime",
+DlgGenTabIndex : "Å tevilka tabulatorja",
+DlgGenLongDescr : "Dolg opis URL-ja",
+DlgGenClass : "Razred stilne predloge",
+DlgGenTitle : "Predlagani naslov",
+DlgGenContType : "Predlagani tip vsebine (content-type)",
+DlgGenLinkCharset : "Kodna tabela povezanega vira",
+DlgGenStyle : "Slog",
+
+// Image Dialog
+DlgImgTitle : "Lastnosti slike",
+DlgImgInfoTab : "Podatki o sliki",
+DlgImgBtnUpload : "Pošlji na strežnik",
+DlgImgURL : "URL",
+DlgImgUpload : "Pošlji",
+DlgImgAlt : "Nadomestno besedilo",
+DlgImgWidth : "Å irina",
+DlgImgHeight : "Višina",
+DlgImgLockRatio : "Zakleni razmerje",
+DlgBtnResetSize : "Ponastavi velikost",
+DlgImgBorder : "Obroba",
+DlgImgHSpace : "Vodoravni razmik",
+DlgImgVSpace : "NavpiÄni razmik",
+DlgImgAlign : "Poravnava",
+DlgImgAlignLeft : "Levo",
+DlgImgAlignAbsBottom: "Popolnoma na dno",
+DlgImgAlignAbsMiddle: "Popolnoma v sredino",
+DlgImgAlignBaseline : "Na osnovno Ärto",
+DlgImgAlignBottom : "Na dno",
+DlgImgAlignMiddle : "V sredino",
+DlgImgAlignRight : "Desno",
+DlgImgAlignTextTop : "Besedilo na vrh",
+DlgImgAlignTop : "Na vrh",
+DlgImgPreview : "Predogled",
+DlgImgAlertUrl : "Vnesite URL slike",
+DlgImgLinkTab : "Povezava",
+
+// Flash Dialog
+DlgFlashTitle : "Lastnosti Flash",
+DlgFlashChkPlay : "Samodejno predvajaj",
+DlgFlashChkLoop : "Ponavljanje",
+DlgFlashChkMenu : "OmogoÄi Flash Meni",
+DlgFlashScale : "PoveÄava",
+DlgFlashScaleAll : "Pokaži vse",
+DlgFlashScaleNoBorder : "Brez obrobe",
+DlgFlashScaleFit : "NatanÄno prileganje",
+
+// Link Dialog
+DlgLnkWindowTitle : "Povezava",
+DlgLnkInfoTab : "Podatki o povezavi",
+DlgLnkTargetTab : "Cilj",
+
+DlgLnkType : "Vrsta povezave",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Zaznamek na tej strani",
+DlgLnkTypeEMail : "Elektronski naslov",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<drugo>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Izberi zaznamek",
+DlgLnkAnchorByName : "Po imenu zaznamka",
+DlgLnkAnchorById : "Po ID-ju elementa",
+DlgLnkNoAnchors : "(V tem dokumentu ni zaznamkov)",
+DlgLnkEMail : "Elektronski naslov",
+DlgLnkEMailSubject : "Predmet sporoÄila",
+DlgLnkEMailBody : "Vsebina sporoÄila",
+DlgLnkUpload : "Prenesi",
+DlgLnkBtnUpload : "Pošlji na strežnik",
+
+DlgLnkTarget : "Cilj",
+DlgLnkTargetFrame : "<okvir>",
+DlgLnkTargetPopup : "<pojavno okno>",
+DlgLnkTargetBlank : "Novo okno (_blank)",
+DlgLnkTargetParent : "Starševsko okno (_parent)",
+DlgLnkTargetSelf : "Isto okno (_self)",
+DlgLnkTargetTop : "Najvišje okno (_top)",
+DlgLnkTargetFrameName : "Ime ciljnega okvirja",
+DlgLnkPopWinName : "Ime pojavnega okna",
+DlgLnkPopWinFeat : "ZnaÄilnosti pojavnega okna",
+DlgLnkPopResize : "Spremenljive velikosti",
+DlgLnkPopLocation : "Naslovna vrstica",
+DlgLnkPopMenu : "Menijska vrstica",
+DlgLnkPopScroll : "Drsniki",
+DlgLnkPopStatus : "Vrstica stanja",
+DlgLnkPopToolbar : "Orodna vrstica",
+DlgLnkPopFullScrn : "Celozaslonska slika (IE)",
+DlgLnkPopDependent : "Podokno (Netscape)",
+DlgLnkPopWidth : "Å irina",
+DlgLnkPopHeight : "Višina",
+DlgLnkPopLeft : "Lega levo",
+DlgLnkPopTop : "Lega na vrhu",
+
+DlnLnkMsgNoUrl : "Vnesite URL povezave",
+DlnLnkMsgNoEMail : "Vnesite elektronski naslov",
+DlnLnkMsgNoAnchor : "Izberite zaznamek",
+DlnLnkMsgInvPopName : "Ime pojavnega okna se mora zaÄeti s Ärko ali Å¡tevilko in ne sme vsebovati presledkov",
+
+// Color Dialog
+DlgColorTitle : "Izberite barvo",
+DlgColorBtnClear : "PoÄisti",
+DlgColorHighlight : "OznaÄi",
+DlgColorSelected : "Izbrano",
+
+// Smiley Dialog
+DlgSmileyTitle : "Vstavi smeška",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Izberi posebni znak",
+
+// Table Dialog
+DlgTableTitle : "Lastnosti tabele",
+DlgTableRows : "Vrstice",
+DlgTableColumns : "Stolpci",
+DlgTableBorder : "Velikost obrobe",
+DlgTableAlign : "Poravnava",
+DlgTableAlignNotSet : "<Ni nastavljeno>",
+DlgTableAlignLeft : "Levo",
+DlgTableAlignCenter : "Sredinsko",
+DlgTableAlignRight : "Desno",
+DlgTableWidth : "Å irina",
+DlgTableWidthPx : "pik",
+DlgTableWidthPc : "procentov",
+DlgTableHeight : "Višina",
+DlgTableCellSpace : "Razmik med celicami",
+DlgTableCellPad : "Polnilo med celicami",
+DlgTableCaption : "Naslov",
+DlgTableSummary : "Povzetek",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Lastnosti celice",
+DlgCellWidth : "Å irina",
+DlgCellWidthPx : "pik",
+DlgCellWidthPc : "procentov",
+DlgCellHeight : "Višina",
+DlgCellWordWrap : "Pomikanje besedila",
+DlgCellWordWrapNotSet : "<Ni nastavljeno>",
+DlgCellWordWrapYes : "Da",
+DlgCellWordWrapNo : "Ne",
+DlgCellHorAlign : "Vodoravna poravnava",
+DlgCellHorAlignNotSet : "<Ni nastavljeno>",
+DlgCellHorAlignLeft : "Levo",
+DlgCellHorAlignCenter : "Sredinsko",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign : "NavpiÄna poravnava",
+DlgCellVerAlignNotSet : "<Ni nastavljeno>",
+DlgCellVerAlignTop : "Na vrh",
+DlgCellVerAlignMiddle : "V sredino",
+DlgCellVerAlignBottom : "Na dno",
+DlgCellVerAlignBaseline : "Na osnovno Ärto",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Spojenih vrstic (row-span)",
+DlgCellCollSpan : "Spojenih stolpcev (col-span)",
+DlgCellBackColor : "Barva ozadja",
+DlgCellBorderColor : "Barva obrobe",
+DlgCellBtnSelect : "Izberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Najdi in zamenjaj",
+
+// Find Dialog
+DlgFindTitle : "Najdi",
+DlgFindFindBtn : "Najdi",
+DlgFindNotFoundMsg : "Navedeno besedilo ni bilo najdeno.",
+
+// Replace Dialog
+DlgReplaceTitle : "Zamenjaj",
+DlgReplaceFindLbl : "Najdi:",
+DlgReplaceReplaceLbl : "Zamenjaj z:",
+DlgReplaceCaseChk : "Razlikuj velike in male Ärke",
+DlgReplaceReplaceBtn : "Zamenjaj",
+DlgReplaceReplAllBtn : "Zamenjaj vse",
+DlgReplaceWordChk : "Samo cele besede",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+X).",
+PasteErrorCopy : "Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+C).",
+
+PasteAsText : "Prilepi kot golo besedilo",
+PasteFromWord : "Prilepi iz Worda",
+
+DlgPasteMsg2 : "Prosim prilepite v sleÄi okvir s pomoÄjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.",
+DlgPasteSec : "Zaradi varnostnih nastavitev vaÅ¡ega brskalnika urejevalnik ne more neposredno dostopati do odložiÅ¡Äa. Vsebino odložiÅ¡Äa ponovno prilepite v to okno.",
+DlgPasteIgnoreFont : "Prezri obliko pisave",
+DlgPasteRemoveStyles : "Odstrani nastavitve stila",
+
+// Color Picker
+ColorAutomatic : "Samodejno",
+ColorMoreColors : "VeÄ barv...",
+
+// Document Properties
+DocProps : "Lastnosti dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle : "Lastnosti zaznamka",
+DlgAnchorName : "Ime zaznamka",
+DlgAnchorErrorName : "Prosim vnesite ime zaznamka",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ni v slovarju",
+DlgSpellChangeTo : "Spremeni v",
+DlgSpellBtnIgnore : "Prezri",
+DlgSpellBtnIgnoreAll : "Prezri vse",
+DlgSpellBtnReplace : "Zamenjaj",
+DlgSpellBtnReplaceAll : "Zamenjaj vse",
+DlgSpellBtnUndo : "Razveljavi",
+DlgSpellNoSuggestions : "- Ni predlogov -",
+DlgSpellProgress : "Preverjanje Ärkovanja se izvaja...",
+DlgSpellNoMispell : "ÄŒrkovanje je konÄano: Brez napak",
+DlgSpellNoChanges : "ÄŒrkovanje je konÄano: Nobena beseda ni bila spremenjena",
+DlgSpellOneChange : "ÄŒrkovanje je konÄano: Spremenjena je bila ena beseda",
+DlgSpellManyChanges : "ÄŒrkovanje je konÄano: Spremenjenih je bilo %1 besed",
+
+IeSpellDownload : "ÄŒrkovalnik ni nameÅ¡Äen. Ali ga želite prenesti sedaj?",
+
+// Button Dialog
+DlgButtonText : "Besedilo (Vrednost)",
+DlgButtonType : "Tip",
+DlgButtonTypeBtn : "Gumb",
+DlgButtonTypeSbm : "Potrdi",
+DlgButtonTypeRst : "Ponastavi",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Ime",
+DlgCheckboxValue : "Vrednost",
+DlgCheckboxSelected : "Izbrano",
+
+// Form Dialog
+DlgFormName : "Ime",
+DlgFormAction : "Akcija",
+DlgFormMethod : "Metoda",
+
+// Select Field Dialog
+DlgSelectName : "Ime",
+DlgSelectValue : "Vrednost",
+DlgSelectSize : "Velikost",
+DlgSelectLines : "vrstic",
+DlgSelectChkMulti : "Dovoli izbor veÄih vrstic",
+DlgSelectOpAvail : "Razpoložljive izbire",
+DlgSelectOpText : "Besedilo",
+DlgSelectOpValue : "Vrednost",
+DlgSelectBtnAdd : "Dodaj",
+DlgSelectBtnModify : "Spremeni",
+DlgSelectBtnUp : "Gor",
+DlgSelectBtnDown : "Dol",
+DlgSelectBtnSetValue : "Postavi kot privzeto izbiro",
+DlgSelectBtnDelete : "Izbriši",
+
+// Textarea Dialog
+DlgTextareaName : "Ime",
+DlgTextareaCols : "Stolpcev",
+DlgTextareaRows : "Vrstic",
+
+// Text Field Dialog
+DlgTextName : "Ime",
+DlgTextValue : "Vrednost",
+DlgTextCharWidth : "Dolžina",
+DlgTextMaxChars : "NajveÄje Å¡tevilo znakov",
+DlgTextType : "Tip",
+DlgTextTypeText : "Besedilo",
+DlgTextTypePass : "Geslo",
+
+// Hidden Field Dialog
+DlgHiddenName : "Ime",
+DlgHiddenValue : "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp : "Lastnosti oznaÄenega seznama",
+NumberedListProp : "Lastnosti oÅ¡tevilÄenega seznama",
+DlgLstStart : "ZaÄetek",
+DlgLstType : "Tip",
+DlgLstTypeCircle : "Pikica",
+DlgLstTypeDisc : "Kroglica",
+DlgLstTypeSquare : "Kvadratek",
+DlgLstTypeNumbers : "Å tevilke (1, 2, 3)",
+DlgLstTypeLCase : "Male Ärke (a, b, c)",
+DlgLstTypeUCase : "Velike Ärke (A, B, C)",
+DlgLstTypeSRoman : "Male rimske Å¡tevilke (i, ii, iii)",
+DlgLstTypeLRoman : "Velike rimske Å¡tevilke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Splošno",
+DlgDocBackTab : "Ozadje",
+DlgDocColorsTab : "Barve in zamiki",
+DlgDocMetaTab : "Meta podatki",
+
+DlgDocPageTitle : "Naslov strani",
+DlgDocLangDir : "Smer jezika",
+DlgDocLangDirLTR : "Od leve proti desni (LTR)",
+DlgDocLangDirRTL : "Od desne proti levi (RTL)",
+DlgDocLangCode : "Oznaka jezika",
+DlgDocCharSet : "Kodna tabela",
+DlgDocCharSetCE : "Srednjeevropsko",
+DlgDocCharSetCT : "Tradicionalno Kitajsko (Big5)",
+DlgDocCharSetCR : "Cirilica",
+DlgDocCharSetGR : "Grško",
+DlgDocCharSetJP : "Japonsko",
+DlgDocCharSetKR : "Korejsko",
+DlgDocCharSetTR : "Turško",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Zahodnoevropsko",
+DlgDocCharSetOther : "Druga kodna tabela",
+
+DlgDocDocType : "Glava tipa dokumenta",
+DlgDocDocTypeOther : "Druga glava tipa dokumenta",
+DlgDocIncXHTML : "Vstavi XHTML deklaracije",
+DlgDocBgColor : "Barva ozadja",
+DlgDocBgImage : "URL slike za ozadje",
+DlgDocBgNoScroll : "NepremiÄno ozadje",
+DlgDocCText : "Besedilo",
+DlgDocCLink : "Povezava",
+DlgDocCVisited : "Obiskana povezava",
+DlgDocCActive : "Aktivna povezava",
+DlgDocMargins : "Zamiki strani",
+DlgDocMaTop : "Na vrhu",
+DlgDocMaLeft : "Levo",
+DlgDocMaRight : "Desno",
+DlgDocMaBottom : "Spodaj",
+DlgDocMeIndex : "KljuÄne besede (loÄene z vejicami)",
+DlgDocMeDescr : "Opis strani",
+DlgDocMeAuthor : "Avtor",
+DlgDocMeCopy : "Avtorske pravice",
+DlgDocPreview : "Predogled",
+
+// Templates Dialog
+Templates : "Predloge",
+DlgTemplatesTitle : "Vsebinske predloge",
+DlgTemplatesSelMsg : "Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):",
+DlgTemplatesLoading : "Nalagam seznam predlog. Prosim poÄakajte...",
+DlgTemplatesNoTpl : "(Ni pripravljenih predlog)",
+DlgTemplatesReplace : "Zamenjaj trenutno vsebino",
+
+// About Dialog
+DlgAboutAboutTab : "Vizitka",
+DlgAboutBrowserInfoTab : "Informacije o brskalniku",
+DlgAboutLicenseTab : "Dovoljenja",
+DlgAboutVersion : "razliÄica",
+DlgAboutInfo : "Za veÄ informacij obiÅ¡Äite",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr-latn.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr-latn.js
new file mode 100644
index 0000000..8770605
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr-latn.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Serbian (Latin) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Smanji liniju sa alatkama",
+ToolbarExpand : "Proiri liniju sa alatkama",
+
+// Toolbar Items and Context Menu
+Save : "SaÄuvaj",
+NewPage : "Nova stranica",
+Preview : "Izgled stranice",
+Cut : "Iseci",
+Copy : "Kopiraj",
+Paste : "Zalepi",
+PasteText : "Zalepi kao neformatiran tekst",
+PasteWord : "Zalepi iz Worda",
+Print : "Å tampa",
+SelectAll : "OznaÄi sve",
+RemoveFormat : "Ukloni formatiranje",
+InsertLinkLbl : "Link",
+InsertLink : "Unesi/izmeni link",
+RemoveLink : "Ukloni link",
+VisitLink : "Open Link", //MISSING
+Anchor : "Unesi/izmeni sidro",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Slika",
+InsertImage : "Unesi/izmeni sliku",
+InsertFlashLbl : "Fleš",
+InsertFlash : "Unesi/izmeni fleš",
+InsertTableLbl : "Tabela",
+InsertTable : "Unesi/izmeni tabelu",
+InsertLineLbl : "Linija",
+InsertLine : "Unesi horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakteri",
+InsertSpecialChar : "Unesi specijalni karakter",
+InsertSmileyLbl : "Smajli",
+InsertSmiley : "Unesi smajlija",
+About : "O FCKeditoru",
+Bold : "Podebljano",
+Italic : "Kurziv",
+Underline : "PodvuÄeno",
+StrikeThrough : "Precrtano",
+Subscript : "Indeks",
+Superscript : "Stepen",
+LeftJustify : "Levo ravnanje",
+CenterJustify : "Centriran tekst",
+RightJustify : "Desno ravnanje",
+BlockJustify : "Obostrano ravnanje",
+DecreaseIndent : "Smanji levu marginu",
+IncreaseIndent : "Uvećaj levu marginu",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Poni�ti akciju",
+Redo : "Ponovi akciju",
+NumberedListLbl : "Nabrojiva lista",
+NumberedList : "Unesi/ukloni nabrojivu listu",
+BulletedListLbl : "Nenabrojiva lista",
+BulletedList : "Unesi/ukloni nenabrojivu listu",
+ShowTableBorders : "Prikaži okvir tabele",
+ShowDetails : "Prikaži detalje",
+Style : "Stil",
+FontFormat : "Format",
+Font : "Font",
+FontSize : "VeliÄina fonta",
+TextColor : "Boja teksta",
+BGColor : "Boja pozadine",
+Source : "Kôd",
+Find : "Pretraga",
+Replace : "Zamena",
+SpellCheck : "Proveri spelovanje",
+UniversalKeyboard : "Univerzalna tastatura",
+PageBreakLbl : "Page Break", //MISSING
+PageBreak : "Insert Page Break", //MISSING
+
+Form : "Forma",
+Checkbox : "Polje za potvrdu",
+RadioButton : "Radio-dugme",
+TextField : "Tekstualno polje",
+Textarea : "Zona teksta",
+HiddenField : "Skriveno polje",
+Button : "Dugme",
+SelectionField : "Izborno polje",
+ImageButton : "Dugme sa slikom",
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Izmeni link",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Obriši redove",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Obriši kolone",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Obriši ćelije",
+MergeCells : "Spoj celije",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Delete Table", //MISSING
+CellProperties : "Osobine celije",
+TableProperties : "Osobine tabele",
+ImageProperties : "Osobine slike",
+FlashProperties : "Osobine fleša",
+
+AnchorProp : "Osobine sidra",
+ButtonProp : "Osobine dugmeta",
+CheckboxProp : "Osobine polja za potvrdu",
+HiddenFieldProp : "Osobine skrivenog polja",
+RadioButtonProp : "Osobine radio-dugmeta",
+ImageButtonProp : "Osobine dugmeta sa slikom",
+TextFieldProp : "Osobine tekstualnog polja",
+SelectionFieldProp : "Osobine izbornog polja",
+TextareaProp : "Osobine zone teksta",
+FormProp : "Osobine forme",
+
+FontFormats : "Normal;Formatirano;Adresa;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Obradujem XHTML. Malo strpljenja...",
+Done : "Završio",
+PasteWordConfirm : "Tekst koji želite da nalepite kopiran je iz Worda. Da li želite da bude oÄišćen od formata pre lepljenja?",
+NotCompatiblePaste : "Ova komanda je dostupna samo za Internet Explorer od verzije 5.5. Da li želite da nalepim tekst bez Äišćenja?",
+UnknownToolbarItem : "Nepoznata stavka toolbara \"%1\"",
+UnknownCommand : "Nepoznata naredba \"%1\"",
+NotImplemented : "Naredba nije implementirana",
+UnknownToolbarSet : "Toolbar \"%1\" ne postoji",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Otkaži",
+DlgBtnClose : "Zatvori",
+DlgBtnBrowseServer : "Pretraži server",
+DlgAdvancedTag : "Napredni tagovi",
+DlgOpOther : "<Ostali>",
+DlgInfoTab : "Info",
+DlgAlertUrl : "Molimo Vas, unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<nije postavljeno>",
+DlgGenId : "Id",
+DlgGenLangDir : "Smer jezika",
+DlgGenLangDirLtr : "S leva na desno (LTR)",
+DlgGenLangDirRtl : "S desna na levo (RTL)",
+DlgGenLangCode : "Kôd jezika",
+DlgGenAccessKey : "Pristupni taster",
+DlgGenName : "Naziv",
+DlgGenTabIndex : "Tab indeks",
+DlgGenLongDescr : "Pun opis URL",
+DlgGenClass : "Stylesheet klase",
+DlgGenTitle : "Advisory naslov",
+DlgGenContType : "Advisory vrsta sadržaja",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Stil",
+
+// Image Dialog
+DlgImgTitle : "Osobine slika",
+DlgImgInfoTab : "Info slike",
+DlgImgBtnUpload : "Pošalji na server",
+DlgImgURL : "URL",
+DlgImgUpload : "Pošalji",
+DlgImgAlt : "Alternativni tekst",
+DlgImgWidth : "Å irina",
+DlgImgHeight : "Visina",
+DlgImgLockRatio : "ZakljuÄaj odnos",
+DlgBtnResetSize : "Resetuj veliÄinu",
+DlgImgBorder : "Okvir",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Ravnanje",
+DlgImgAlignLeft : "Levo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline : "Bazno",
+DlgImgAlignBottom : "Dole",
+DlgImgAlignMiddle : "Sredina",
+DlgImgAlignRight : "Desno",
+DlgImgAlignTextTop : "Vrh teksta",
+DlgImgAlignTop : "Vrh",
+DlgImgPreview : "Izgled",
+DlgImgAlertUrl : "Unesite URL slike",
+DlgImgLinkTab : "Link",
+
+// Flash Dialog
+DlgFlashTitle : "Osobine fleša",
+DlgFlashChkPlay : "Automatski start",
+DlgFlashChkLoop : "Ponavljaj",
+DlgFlashChkMenu : "UkljuÄi fleÅ¡ meni",
+DlgFlashScale : "Skaliraj",
+DlgFlashScaleAll : "Prikaži sve",
+DlgFlashScaleNoBorder : "Bez ivice",
+DlgFlashScaleFit : "Popuni površinu",
+
+// Link Dialog
+DlgLnkWindowTitle : "Link",
+DlgLnkInfoTab : "Link Info",
+DlgLnkTargetTab : "Meta",
+
+DlgLnkType : "Vrsta linka",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Sidro na ovoj stranici",
+DlgLnkTypeEMail : "E-Mail",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<drugo>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Odaberi sidro",
+DlgLnkAnchorByName : "Po nazivu sidra",
+DlgLnkAnchorById : "Po Id-ju elementa",
+DlgLnkNoAnchors : "(Nema dostupnih sidra)",
+DlgLnkEMail : "E-Mail adresa",
+DlgLnkEMailSubject : "Naslov",
+DlgLnkEMailBody : "Sadržaj poruke",
+DlgLnkUpload : "Pošalji",
+DlgLnkBtnUpload : "Pošalji na server",
+
+DlgLnkTarget : "Meta",
+DlgLnkTargetFrame : "<okvir>",
+DlgLnkTargetPopup : "<popup prozor>",
+DlgLnkTargetBlank : "Novi prozor (_blank)",
+DlgLnkTargetParent : "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf : "Isti prozor (_self)",
+DlgLnkTargetTop : "Prozor na vrhu (_top)",
+DlgLnkTargetFrameName : "Naziv odredišnog frejma",
+DlgLnkPopWinName : "Naziv popup prozora",
+DlgLnkPopWinFeat : "Mogućnosti popup prozora",
+DlgLnkPopResize : "Promenljiva velicina",
+DlgLnkPopLocation : "Lokacija",
+DlgLnkPopMenu : "Kontekstni meni",
+DlgLnkPopScroll : "Scroll bar",
+DlgLnkPopStatus : "Statusna linija",
+DlgLnkPopToolbar : "Toolbar",
+DlgLnkPopFullScrn : "Prikaz preko celog ekrana (IE)",
+DlgLnkPopDependent : "Zavisno (Netscape)",
+DlgLnkPopWidth : "Å irina",
+DlgLnkPopHeight : "Visina",
+DlgLnkPopLeft : "Od leve ivice ekrana (px)",
+DlgLnkPopTop : "Od vrha ekrana (px)",
+
+DlnLnkMsgNoUrl : "Unesite URL linka",
+DlnLnkMsgNoEMail : "Otkucajte adresu elektronske pote",
+DlnLnkMsgNoAnchor : "Odaberite sidro",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Odaberite boju",
+DlgColorBtnClear : "Obriši",
+DlgColorHighlight : "Posvetli",
+DlgColorSelected : "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle : "Unesi smajlija",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Odaberite specijalni karakter",
+
+// Table Dialog
+DlgTableTitle : "Osobine tabele",
+DlgTableRows : "Redova",
+DlgTableColumns : "Kolona",
+DlgTableBorder : "VeliÄina okvira",
+DlgTableAlign : "Ravnanje",
+DlgTableAlignNotSet : "<nije postavljeno>",
+DlgTableAlignLeft : "Levo",
+DlgTableAlignCenter : "Sredina",
+DlgTableAlignRight : "Desno",
+DlgTableWidth : "Å irina",
+DlgTableWidthPx : "piksela",
+DlgTableWidthPc : "procenata",
+DlgTableHeight : "Visina",
+DlgTableCellSpace : "Ćelijski prostor",
+DlgTableCellPad : "Razmak ćelija",
+DlgTableCaption : "Naslov tabele",
+DlgTableSummary : "Summary", //MISSING
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Osobine ćelije",
+DlgCellWidth : "Å irina",
+DlgCellWidthPx : "piksela",
+DlgCellWidthPc : "procenata",
+DlgCellHeight : "Visina",
+DlgCellWordWrap : "Deljenje reÄi",
+DlgCellWordWrapNotSet : "<nije postavljeno>",
+DlgCellWordWrapYes : "Da",
+DlgCellWordWrapNo : "Ne",
+DlgCellHorAlign : "Vodoravno ravnanje",
+DlgCellHorAlignNotSet : "<nije postavljeno>",
+DlgCellHorAlignLeft : "Levo",
+DlgCellHorAlignCenter : "Sredina",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign : "Vertikalno ravnanje",
+DlgCellVerAlignNotSet : "<nije postavljeno>",
+DlgCellVerAlignTop : "Gornje",
+DlgCellVerAlignMiddle : "Sredina",
+DlgCellVerAlignBottom : "Donje",
+DlgCellVerAlignBaseline : "Bazno",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Spajanje redova",
+DlgCellCollSpan : "Spajanje kolona",
+DlgCellBackColor : "Boja pozadine",
+DlgCellBorderColor : "Boja okvira",
+DlgCellBtnSelect : "Odaberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Pronađi",
+DlgFindFindBtn : "Pronađi",
+DlgFindNotFoundMsg : "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle : "Zameni",
+DlgReplaceFindLbl : "Pronadi:",
+DlgReplaceReplaceLbl : "Zameni sa:",
+DlgReplaceCaseChk : "Razlikuj mala i velika slova",
+DlgReplaceReplaceBtn : "Zameni",
+DlgReplaceReplAllBtn : "Zameni sve",
+DlgReplaceWordChk : "Uporedi cele reci",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl+X).",
+PasteErrorCopy : "Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl+C).",
+
+PasteAsText : "Zalepi kao Äist tekst",
+PasteFromWord : "Zalepi iz Worda",
+
+DlgPasteMsg2 : "Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu preÄicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Ignoriši definicije fontova",
+DlgPasteRemoveStyles : "Ukloni definicije stilova",
+
+// Color Picker
+ColorAutomatic : "Automatski",
+ColorMoreColors : "Više boja...",
+
+// Document Properties
+DocProps : "Osobine dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle : "Osobine sidra",
+DlgAnchorName : "Ime sidra",
+DlgAnchorErrorName : "Unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Nije u reÄniku",
+DlgSpellChangeTo : "Izmeni",
+DlgSpellBtnIgnore : "Ignoriši",
+DlgSpellBtnIgnoreAll : "Ignoriši sve",
+DlgSpellBtnReplace : "Zameni",
+DlgSpellBtnReplaceAll : "Zameni sve",
+DlgSpellBtnUndo : "Vrati akciju",
+DlgSpellNoSuggestions : "- Bez sugestija -",
+DlgSpellProgress : "Provera spelovanja u toku...",
+DlgSpellNoMispell : "Provera spelovanja završena: greške nisu pronadene",
+DlgSpellNoChanges : "Provera spelovanja završena: Nije izmenjena nijedna rec",
+DlgSpellOneChange : "Provera spelovanja zavrÅ¡ena: Izmenjena je jedna reÄ",
+DlgSpellManyChanges : "Provera spelovanja zavrÅ¡ena: %1 reÄ(i) je izmenjeno",
+
+IeSpellDownload : "Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?",
+
+// Button Dialog
+DlgButtonText : "Tekst (vrednost)",
+DlgButtonType : "Tip",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Naziv",
+DlgCheckboxValue : "Vrednost",
+DlgCheckboxSelected : "OznaÄeno",
+
+// Form Dialog
+DlgFormName : "Naziv",
+DlgFormAction : "Akcija",
+DlgFormMethod : "Metoda",
+
+// Select Field Dialog
+DlgSelectName : "Naziv",
+DlgSelectValue : "Vrednost",
+DlgSelectSize : "VeliÄina",
+DlgSelectLines : "linija",
+DlgSelectChkMulti : "Dozvoli višestruku selekciju",
+DlgSelectOpAvail : "Dostupne opcije",
+DlgSelectOpText : "Tekst",
+DlgSelectOpValue : "Vrednost",
+DlgSelectBtnAdd : "Dodaj",
+DlgSelectBtnModify : "Izmeni",
+DlgSelectBtnUp : "Gore",
+DlgSelectBtnDown : "Dole",
+DlgSelectBtnSetValue : "Podesi kao oznaÄenu vrednost",
+DlgSelectBtnDelete : "Obriši",
+
+// Textarea Dialog
+DlgTextareaName : "Naziv",
+DlgTextareaCols : "Broj kolona",
+DlgTextareaRows : "Broj redova",
+
+// Text Field Dialog
+DlgTextName : "Naziv",
+DlgTextValue : "Vrednost",
+DlgTextCharWidth : "Å irina (karaktera)",
+DlgTextMaxChars : "Maksimalno karaktera",
+DlgTextType : "Tip",
+DlgTextTypeText : "Tekst",
+DlgTextTypePass : "Lozinka",
+
+// Hidden Field Dialog
+DlgHiddenName : "Naziv",
+DlgHiddenValue : "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp : "Osobine nenabrojive liste",
+NumberedListProp : "Osobine nabrojive liste",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Tip",
+DlgLstTypeCircle : "Krug",
+DlgLstTypeDisc : "Disc", //MISSING
+DlgLstTypeSquare : "Kvadrat",
+DlgLstTypeNumbers : "Brojevi (1, 2, 3)",
+DlgLstTypeLCase : "mala slova (a, b, c)",
+DlgLstTypeUCase : "VELIKA slova (A, B, C)",
+DlgLstTypeSRoman : "Male rimske cifre (i, ii, iii)",
+DlgLstTypeLRoman : "Velike rimske cifre (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Opšte osobine",
+DlgDocBackTab : "Pozadina",
+DlgDocColorsTab : "Boje i margine",
+DlgDocMetaTab : "Metapodaci",
+
+DlgDocPageTitle : "Naslov stranice",
+DlgDocLangDir : "Smer jezika",
+DlgDocLangDirLTR : "Sleva nadesno (LTR)",
+DlgDocLangDirRTL : "Zdesna nalevo (RTL)",
+DlgDocLangCode : "Å ifra jezika",
+DlgDocCharSet : "Kodiranje skupa karaktera",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "Ostala kodiranja skupa karaktera",
+
+DlgDocDocType : "Zaglavlje tipa dokumenta",
+DlgDocDocTypeOther : "Ostala zaglavlja tipa dokumenta",
+DlgDocIncXHTML : "Ukljuci XHTML deklaracije",
+DlgDocBgColor : "Boja pozadine",
+DlgDocBgImage : "URL pozadinske slike",
+DlgDocBgNoScroll : "Fiksirana pozadina",
+DlgDocCText : "Tekst",
+DlgDocCLink : "Link",
+DlgDocCVisited : "Posećeni link",
+DlgDocCActive : "Aktivni link",
+DlgDocMargins : "Margine stranice",
+DlgDocMaTop : "Gornja",
+DlgDocMaLeft : "Leva",
+DlgDocMaRight : "Desna",
+DlgDocMaBottom : "Donja",
+DlgDocMeIndex : "KljuÄne reci za indeksiranje dokumenta (razdvojene zarezima)",
+DlgDocMeDescr : "Opis dokumenta",
+DlgDocMeAuthor : "Autor",
+DlgDocMeCopy : "Autorska prava",
+DlgDocPreview : "Izgled stranice",
+
+// Templates Dialog
+Templates : "Obrasci",
+DlgTemplatesTitle : "Obrasci za sadržaj",
+DlgTemplatesSelMsg : "Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):",
+DlgTemplatesLoading : "UÄitavam listu obrazaca. Malo strpljenja...",
+DlgTemplatesNoTpl : "(Nema definisanih obrazaca)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "O editoru",
+DlgAboutBrowserInfoTab : "Informacije o pretraživacu",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "verzija",
+DlgAboutInfo : "Za više informacija posetite",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr.js
new file mode 100644
index 0000000..86353e0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Serbian (Cyrillic) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Смањи линију Ñа алаткама",
+ToolbarExpand : "Прошири линију Ñа алаткама",
+
+// Toolbar Items and Context Menu
+Save : "Сачувај",
+NewPage : "Ðова Ñтраница",
+Preview : "Изглед Ñтранице",
+Cut : "ИÑеци",
+Copy : "Копирај",
+Paste : "Залепи",
+PasteText : "Залепи као неформатиран текÑÑ‚",
+PasteWord : "Залепи из Worda",
+Print : "Штампа",
+SelectAll : "Означи Ñве",
+RemoveFormat : "Уклони форматирање",
+InsertLinkLbl : "Линк",
+InsertLink : "УнеÑи/измени линк",
+RemoveLink : "Уклони линк",
+VisitLink : "Open Link", //MISSING
+Anchor : "УнеÑи/измени Ñидро",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "Слика",
+InsertImage : "УнеÑи/измени Ñлику",
+InsertFlashLbl : "Флеш елемент",
+InsertFlash : "УнеÑи/измени флеш",
+InsertTableLbl : "Табела",
+InsertTable : "УнеÑи/измени табелу",
+InsertLineLbl : "Линија",
+InsertLine : "УнеÑи хоризонталну линију",
+InsertSpecialCharLbl: "Специјални карактери",
+InsertSpecialChar : "УнеÑи Ñпецијални карактер",
+InsertSmileyLbl : "Смајли",
+InsertSmiley : "УнеÑи Ñмајлија",
+About : "О ФЦКедитору",
+Bold : "Подебљано",
+Italic : "Курзив",
+Underline : "Подвучено",
+StrikeThrough : "Прецртано",
+Subscript : "ИндекÑ",
+Superscript : "Степен",
+LeftJustify : "Лево равнање",
+CenterJustify : "Центриран текÑÑ‚",
+RightJustify : "ДеÑно равнање",
+BlockJustify : "ОбоÑтрано равнање",
+DecreaseIndent : "Смањи леву маргину",
+IncreaseIndent : "Увећај леву маргину",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Поништи акцију",
+Redo : "Понови акцију",
+NumberedListLbl : "Ðабројиву лиÑту",
+NumberedList : "УнеÑи/уклони набројиву лиÑту",
+BulletedListLbl : "Ðенабројива лиÑта",
+BulletedList : "УнеÑи/уклони ненабројиву лиÑту",
+ShowTableBorders : "Прикажи оквир табеле",
+ShowDetails : "Прикажи детаље",
+Style : "Стил",
+FontFormat : "Формат",
+Font : "Фонт",
+FontSize : "Величина фонта",
+TextColor : "Боја текÑта",
+BGColor : "Боја позадине",
+Source : "Kôд",
+Find : "Претрага",
+Replace : "Замена",
+SpellCheck : "Провери Ñпеловање",
+UniversalKeyboard : "Универзална таÑтатура",
+PageBreakLbl : "Page Break", //MISSING
+PageBreak : "Insert Page Break", //MISSING
+
+Form : "Форма",
+Checkbox : "Поље за потврду",
+RadioButton : "Радио-дугме",
+TextField : "ТекÑтуално поље",
+Textarea : "Зона текÑта",
+HiddenField : "Скривено поље",
+Button : "Дугме",
+SelectionField : "Изборно поље",
+ImageButton : "Дугме Ñа Ñликом",
+
+FitWindow : "Maximize the editor size", //MISSING
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Промени линк",
+CellCM : "Cell", //MISSING
+RowCM : "Row", //MISSING
+ColumnCM : "Column", //MISSING
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "Обриши редове",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "Обриши колоне",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "Обриши ћелије",
+MergeCells : "Спој ћелије",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "Delete Table", //MISSING
+CellProperties : "ОÑобине ћелије",
+TableProperties : "ОÑобине табеле",
+ImageProperties : "ОÑобине Ñлике",
+FlashProperties : "ОÑобине Флеша",
+
+AnchorProp : "ОÑобине Ñидра",
+ButtonProp : "ОÑобине дугмета",
+CheckboxProp : "ОÑобине поља за потврду",
+HiddenFieldProp : "ОÑобине Ñкривеног поља",
+RadioButtonProp : "ОÑобине радио-дугмета",
+ImageButtonProp : "ОÑобине дугмета Ñа Ñликом",
+TextFieldProp : "ОÑобине текÑтуалног поља",
+SelectionFieldProp : "ОÑобине изборног поља",
+TextareaProp : "ОÑобине зоне текÑта",
+FormProp : "ОÑобине форме",
+
+FontFormats : "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML : "Обрађујем XHTML. Maлo Ñтрпљења...",
+Done : "Завршио",
+PasteWordConfirm : "ТекÑÑ‚ који желите да налепите копиран је из Worda. Да ли желите да буде очишћен од формата пре лепљења?",
+NotCompatiblePaste : "Ова команда је доÑтупна Ñамо за Интернет Екплорер од верзије 5.5. Да ли желите да налепим текÑÑ‚ без чишћења?",
+UnknownToolbarItem : "Ðепозната Ñтавка toolbara \"%1\"",
+UnknownCommand : "Ðепозната наредба \"%1\"",
+NotImplemented : "Ðаредба није имплементирана",
+UnknownToolbarSet : "Toolbar \"%1\" не поÑтоји",
+NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING
+DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Oткажи",
+DlgBtnClose : "Затвори",
+DlgBtnBrowseServer : "Претражи Ñервер",
+DlgAdvancedTag : "Ðапредни тагови",
+DlgOpOther : "<ОÑтали>",
+DlgInfoTab : "Инфо",
+DlgAlertUrl : "Молимо ВаÑ, унеÑите УРЛ",
+
+// General Dialogs Labels
+DlgGenNotSet : "<није поÑтављено>",
+DlgGenId : "Ид",
+DlgGenLangDir : "Смер језика",
+DlgGenLangDirLtr : "С лева на деÑно (LTR)",
+DlgGenLangDirRtl : "С деÑна на лево (RTL)",
+DlgGenLangCode : "Kôд језика",
+DlgGenAccessKey : "ПриÑтупни таÑтер",
+DlgGenName : "Ðазив",
+DlgGenTabIndex : "Таб индекÑ",
+DlgGenLongDescr : "Пун Ð¾Ð¿Ð¸Ñ Ð£Ð Ð›",
+DlgGenClass : "Stylesheet клаÑе",
+DlgGenTitle : "Advisory наÑлов",
+DlgGenContType : "Advisory врÑта Ñадржаја",
+DlgGenLinkCharset : "Linked Resource Charset",
+DlgGenStyle : "Стил",
+
+// Image Dialog
+DlgImgTitle : "ОÑобине Ñлика",
+DlgImgInfoTab : "Инфо Ñлике",
+DlgImgBtnUpload : "Пошаљи на Ñервер",
+DlgImgURL : "УРЛ",
+DlgImgUpload : "Пошаљи",
+DlgImgAlt : "Ðлтернативни текÑÑ‚",
+DlgImgWidth : "Ширина",
+DlgImgHeight : "ВиÑина",
+DlgImgLockRatio : "Закључај одноÑ",
+DlgBtnResetSize : "РеÑетуј величину",
+DlgImgBorder : "Оквир",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Равнање",
+DlgImgAlignLeft : "Лево",
+DlgImgAlignAbsBottom: "Abs доле",
+DlgImgAlignAbsMiddle: "Abs Ñредина",
+DlgImgAlignBaseline : "Базно",
+DlgImgAlignBottom : "Доле",
+DlgImgAlignMiddle : "Средина",
+DlgImgAlignRight : "ДеÑно",
+DlgImgAlignTextTop : "Врх текÑта",
+DlgImgAlignTop : "Врх",
+DlgImgPreview : "Изглед",
+DlgImgAlertUrl : "УнеÑите УРЛ Ñлике",
+DlgImgLinkTab : "Линк",
+
+// Flash Dialog
+DlgFlashTitle : "ОÑобине флеша",
+DlgFlashChkPlay : "ÐутоматÑки Ñтарт",
+DlgFlashChkLoop : "Понављај",
+DlgFlashChkMenu : "Укључи флеш мени",
+DlgFlashScale : "Скалирај",
+DlgFlashScaleAll : "Прикажи Ñве",
+DlgFlashScaleNoBorder : "Без ивице",
+DlgFlashScaleFit : "Попуни површину",
+
+// Link Dialog
+DlgLnkWindowTitle : "Линк",
+DlgLnkInfoTab : "Линк инфо",
+DlgLnkTargetTab : "Мета",
+
+DlgLnkType : "Ð’Ñ€Ñта линка",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Сидро на овој Ñтраници",
+DlgLnkTypeEMail : "EлектронÑка пошта",
+DlgLnkProto : "Протокол",
+DlgLnkProtoOther : "<друго>",
+DlgLnkURL : "УРЛ",
+DlgLnkAnchorSel : "Одабери Ñидро",
+DlgLnkAnchorByName : "По називу Ñидра",
+DlgLnkAnchorById : "Пo Ид-jу елемента",
+DlgLnkNoAnchors : "(Ðема доÑтупних Ñидра)",
+DlgLnkEMail : "ÐдреÑа електронÑке поште",
+DlgLnkEMailSubject : "ÐаÑлов",
+DlgLnkEMailBody : "Садржај поруке",
+DlgLnkUpload : "Пошаљи",
+DlgLnkBtnUpload : "Пошаљи на Ñервер",
+
+DlgLnkTarget : "Meтa",
+DlgLnkTargetFrame : "<оквир>",
+DlgLnkTargetPopup : "<иÑкачући прозор>",
+DlgLnkTargetBlank : "Ðови прозор (_blank)",
+DlgLnkTargetParent : "РодитељÑки прозор (_parent)",
+DlgLnkTargetSelf : "ИÑти прозор (_self)",
+DlgLnkTargetTop : "Прозор на врху (_top)",
+DlgLnkTargetFrameName : "Ðазив одредишног фрејма",
+DlgLnkPopWinName : "Ðазив иÑкачућег прозора",
+DlgLnkPopWinFeat : "МогућноÑти иÑкачућег прозора",
+DlgLnkPopResize : "Променљива величина",
+DlgLnkPopLocation : "Локација",
+DlgLnkPopMenu : "КонтекÑтни мени",
+DlgLnkPopScroll : "Скрол бар",
+DlgLnkPopStatus : "СтатуÑна линија",
+DlgLnkPopToolbar : "Toolbar",
+DlgLnkPopFullScrn : "Приказ преко целог екрана (ИE)",
+DlgLnkPopDependent : "ЗавиÑно (Netscape)",
+DlgLnkPopWidth : "Ширина",
+DlgLnkPopHeight : "ВиÑина",
+DlgLnkPopLeft : "Од леве ивице екрана (пикÑела)",
+DlgLnkPopTop : "Од врха екрана (пикÑела)",
+
+DlnLnkMsgNoUrl : "УнеÑите УРЛ линка",
+DlnLnkMsgNoEMail : "Откуцајте адреÑу електронÑке поште",
+DlnLnkMsgNoAnchor : "Одаберите Ñидро",
+DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING
+
+// Color Dialog
+DlgColorTitle : "Одаберите боју",
+DlgColorBtnClear : "Обриши",
+DlgColorHighlight : "ПоÑветли",
+DlgColorSelected : "Одабери",
+
+// Smiley Dialog
+DlgSmileyTitle : "УнеÑи Ñмајлија",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Одаберите Ñпецијални карактер",
+
+// Table Dialog
+DlgTableTitle : "ОÑобине табеле",
+DlgTableRows : "Редова",
+DlgTableColumns : "Kолона",
+DlgTableBorder : "Величина оквира",
+DlgTableAlign : "Равнање",
+DlgTableAlignNotSet : "<није поÑтављено>",
+DlgTableAlignLeft : "Лево",
+DlgTableAlignCenter : "Средина",
+DlgTableAlignRight : "ДеÑно",
+DlgTableWidth : "Ширина",
+DlgTableWidthPx : "пикÑела",
+DlgTableWidthPc : "процената",
+DlgTableHeight : "ВиÑина",
+DlgTableCellSpace : "ЋелијÑки проÑтор",
+DlgTableCellPad : "Размак ћелија",
+DlgTableCaption : "ÐаÑлов табеле",
+DlgTableSummary : "Summary", //MISSING
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "ОÑобине ћелије",
+DlgCellWidth : "Ширина",
+DlgCellWidthPx : "пикÑела",
+DlgCellWidthPc : "процената",
+DlgCellHeight : "ВиÑина",
+DlgCellWordWrap : "Дељење речи",
+DlgCellWordWrapNotSet : "<није поÑтављено>",
+DlgCellWordWrapYes : "Да",
+DlgCellWordWrapNo : "Ðе",
+DlgCellHorAlign : "Водоравно равнање",
+DlgCellHorAlignNotSet : "<није поÑтављено>",
+DlgCellHorAlignLeft : "Лево",
+DlgCellHorAlignCenter : "Средина",
+DlgCellHorAlignRight: "ДеÑно",
+DlgCellVerAlign : "Вертикално равнање",
+DlgCellVerAlignNotSet : "<није поÑтављено>",
+DlgCellVerAlignTop : "Горње",
+DlgCellVerAlignMiddle : "Средина",
+DlgCellVerAlignBottom : "Доње",
+DlgCellVerAlignBaseline : "Базно",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Спајање редова",
+DlgCellCollSpan : "Спајање колона",
+DlgCellBackColor : "Боја позадине",
+DlgCellBorderColor : "Боја оквира",
+DlgCellBtnSelect : "Oдабери...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "Пронађи",
+DlgFindFindBtn : "Пронађи",
+DlgFindNotFoundMsg : "Тражени текÑÑ‚ није пронађен.",
+
+// Replace Dialog
+DlgReplaceTitle : "Замени",
+DlgReplaceFindLbl : "Пронађи:",
+DlgReplaceReplaceLbl : "Замени Ñа:",
+DlgReplaceCaseChk : "Разликуј велика и мала Ñлова",
+DlgReplaceReplaceBtn : "Замени",
+DlgReplaceReplAllBtn : "Замени Ñве",
+DlgReplaceWordChk : "Упореди целе речи",
+
+// Paste Operations / Dialog
+PasteErrorCut : "СигурноÑна подешавања Вашег претраживача не дозвољавају операције аутоматÑког иÑецања текÑта. Молимо Ð’Ð°Ñ Ð´Ð° кориÑтите пречицу Ñа таÑтатуре (Ctrl+X).",
+PasteErrorCopy : "СигурноÑна подешавања Вашег претраживача не дозвољавају операције аутоматÑког копирања текÑта. Молимо Ð’Ð°Ñ Ð´Ð° кориÑтите пречицу Ñа таÑтатуре (Ctrl+C).",
+
+PasteAsText : "Залепи као чиÑÑ‚ текÑÑ‚",
+PasteFromWord : "Залепи из Worda",
+
+DlgPasteMsg2 : "Молимо Ð’Ð°Ñ Ð´Ð° залепите унутар доње површине кориÑтећи таÑтатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиÑнете <STRONG>OK</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Игнориши Font Face дефиниције",
+DlgPasteRemoveStyles : "Уклони дефиниције Ñтилова",
+
+// Color Picker
+ColorAutomatic : "ÐутоматÑки",
+ColorMoreColors : "Више боја...",
+
+// Document Properties
+DocProps : "ОÑобине документа",
+
+// Anchor Dialog
+DlgAnchorTitle : "ОÑобине Ñидра",
+DlgAnchorName : "Име Ñидра",
+DlgAnchorErrorName : "Молимо Ð’Ð°Ñ Ð´Ð° унеÑете име Ñидра",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ðије у речнику",
+DlgSpellChangeTo : "Измени",
+DlgSpellBtnIgnore : "Игнориши",
+DlgSpellBtnIgnoreAll : "Игнориши Ñве",
+DlgSpellBtnReplace : "Замени",
+DlgSpellBtnReplaceAll : "Замени Ñве",
+DlgSpellBtnUndo : "Врати акцију",
+DlgSpellNoSuggestions : "- Без ÑугеÑтија -",
+DlgSpellProgress : "Провера Ñпеловања у току...",
+DlgSpellNoMispell : "Провера Ñпеловања завршена: грешке ниÑу пронађене",
+DlgSpellNoChanges : "Провера Ñпеловања завршена: Ðије измењена ниједна реч",
+DlgSpellOneChange : "Провера Ñпеловања завршена: Измењена је једна реч",
+DlgSpellManyChanges : "Провера Ñпеловања завршена: %1 реч(и) је измењено",
+
+IeSpellDownload : "Провера Ñпеловања није инÑталирана. Да ли желите да је Ñкинете Ñа Интернета?",
+
+// Button Dialog
+DlgButtonText : "ТекÑÑ‚ (вредноÑÑ‚)",
+DlgButtonType : "Tип",
+DlgButtonTypeBtn : "Button", //MISSING
+DlgButtonTypeSbm : "Submit", //MISSING
+DlgButtonTypeRst : "Reset", //MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Ðазив",
+DlgCheckboxValue : "ВредноÑÑ‚",
+DlgCheckboxSelected : "Означено",
+
+// Form Dialog
+DlgFormName : "Ðазив",
+DlgFormAction : "Aкција",
+DlgFormMethod : "Mетода",
+
+// Select Field Dialog
+DlgSelectName : "Ðазив",
+DlgSelectValue : "ВредноÑÑ‚",
+DlgSelectSize : "Величина",
+DlgSelectLines : "линија",
+DlgSelectChkMulti : "Дозволи вишеÑтруку Ñелекцију",
+DlgSelectOpAvail : "ДоÑтупне опције",
+DlgSelectOpText : "ТекÑÑ‚",
+DlgSelectOpValue : "ВредноÑÑ‚",
+DlgSelectBtnAdd : "Додај",
+DlgSelectBtnModify : "Измени",
+DlgSelectBtnUp : "Горе",
+DlgSelectBtnDown : "Доле",
+DlgSelectBtnSetValue : "ПодеÑи као означену вредноÑÑ‚",
+DlgSelectBtnDelete : "Обриши",
+
+// Textarea Dialog
+DlgTextareaName : "Ðазив",
+DlgTextareaCols : "Број колона",
+DlgTextareaRows : "Број редова",
+
+// Text Field Dialog
+DlgTextName : "Ðазив",
+DlgTextValue : "ВредноÑÑ‚",
+DlgTextCharWidth : "Ширина (карактера)",
+DlgTextMaxChars : "МакÑимално карактера",
+DlgTextType : "Тип",
+DlgTextTypeText : "ТекÑÑ‚",
+DlgTextTypePass : "Лозинка",
+
+// Hidden Field Dialog
+DlgHiddenName : "Ðазив",
+DlgHiddenValue : "ВредноÑÑ‚",
+
+// Bulleted List Dialog
+BulletedListProp : "ОÑобине Bulleted лиÑте",
+NumberedListProp : "ОÑобине набројиве лиÑте",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "Тип",
+DlgLstTypeCircle : "Круг",
+DlgLstTypeDisc : "Disc", //MISSING
+DlgLstTypeSquare : "Квадрат",
+DlgLstTypeNumbers : "Бројеви (1, 2, 3)",
+DlgLstTypeLCase : "мала Ñлова (a, b, c)",
+DlgLstTypeUCase : "ВЕЛИКРСЛОВР(A, B, C)",
+DlgLstTypeSRoman : "Мале римÑке цифре (i, ii, iii)",
+DlgLstTypeLRoman : "Велике римÑке цифре (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Опште оÑобине",
+DlgDocBackTab : "Позадина",
+DlgDocColorsTab : "Боје и маргине",
+DlgDocMetaTab : "Метаподаци",
+
+DlgDocPageTitle : "ÐаÑлов Ñтранице",
+DlgDocLangDir : "Смер језика",
+DlgDocLangDirLTR : "Слева надеÑно (LTR)",
+DlgDocLangDirRTL : "ЗдеÑна налево (RTL)",
+DlgDocLangCode : "Шифра језика",
+DlgDocCharSet : "Кодирање Ñкупа карактера",
+DlgDocCharSetCE : "Central European", //MISSING
+DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING
+DlgDocCharSetCR : "Cyrillic", //MISSING
+DlgDocCharSetGR : "Greek", //MISSING
+DlgDocCharSetJP : "Japanese", //MISSING
+DlgDocCharSetKR : "Korean", //MISSING
+DlgDocCharSetTR : "Turkish", //MISSING
+DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING
+DlgDocCharSetWE : "Western European", //MISSING
+DlgDocCharSetOther : "ОÑтала кодирања Ñкупа карактера",
+
+DlgDocDocType : "Заглавље типа документа",
+DlgDocDocTypeOther : "ОÑтала заглавља типа документа",
+DlgDocIncXHTML : "Улључи XHTML декларације",
+DlgDocBgColor : "Боја позадине",
+DlgDocBgImage : "УРЛ позадинÑке Ñлике",
+DlgDocBgNoScroll : "ФикÑирана позадина",
+DlgDocCText : "ТекÑÑ‚",
+DlgDocCLink : "Линк",
+DlgDocCVisited : "ПоÑећени линк",
+DlgDocCActive : "Ðктивни линк",
+DlgDocMargins : "Маргине Ñтранице",
+DlgDocMaTop : "Горња",
+DlgDocMaLeft : "Лева",
+DlgDocMaRight : "ДеÑна",
+DlgDocMaBottom : "Доња",
+DlgDocMeIndex : "Кључне речи за индекÑирање документа (раздвојене зарезом)",
+DlgDocMeDescr : "ÐžÐ¿Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°",
+DlgDocMeAuthor : "Ðутор",
+DlgDocMeCopy : "ÐуторÑка права",
+DlgDocPreview : "Изглед Ñтранице",
+
+// Templates Dialog
+Templates : "ОбраÑци",
+DlgTemplatesTitle : "ОбраÑци за Ñадржај",
+DlgTemplatesSelMsg : "Молимо Ð’Ð°Ñ Ð´Ð° одаберете образац који ће бити примењен на Ñтраницу (тренутни Ñадржај ће бити обриÑан):",
+DlgTemplatesLoading : "Учитавам лиÑту образаца. Мало Ñтрпљења...",
+DlgTemplatesNoTpl : "(Ðема дефиниÑаних образаца)",
+DlgTemplatesReplace : "Replace actual contents", //MISSING
+
+// About Dialog
+DlgAboutAboutTab : "О едитору",
+DlgAboutBrowserInfoTab : "Информације о претраживачу",
+DlgAboutLicenseTab : "License", //MISSING
+DlgAboutVersion : "верзија",
+DlgAboutInfo : "За више информација поÑетите",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sv.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sv.js
new file mode 100644
index 0000000..8a02170
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sv.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Swedish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Dölj verktygsfält",
+ToolbarExpand : "Visa verktygsfält",
+
+// Toolbar Items and Context Menu
+Save : "Spara",
+NewPage : "Ny sida",
+Preview : "Förhandsgranska",
+Cut : "Klipp ut",
+Copy : "Kopiera",
+Paste : "Klistra in",
+PasteText : "Klistra in som text",
+PasteWord : "Klistra in från Word",
+Print : "Skriv ut",
+SelectAll : "Markera allt",
+RemoveFormat : "Radera formatering",
+InsertLinkLbl : "Länk",
+InsertLink : "Infoga/Redigera länk",
+RemoveLink : "Radera länk",
+VisitLink : "Open Link", //MISSING
+Anchor : "Infoga/Redigera ankarlänk",
+AnchorDelete : "Radera ankarlänk",
+InsertImageLbl : "Bild",
+InsertImage : "Infoga/Redigera bild",
+InsertFlashLbl : "Flash",
+InsertFlash : "Infoga/Redigera Flash",
+InsertTableLbl : "Tabell",
+InsertTable : "Infoga/Redigera tabell",
+InsertLineLbl : "Linje",
+InsertLine : "Infoga horisontal linje",
+InsertSpecialCharLbl: "Utökade tecken",
+InsertSpecialChar : "Klistra in utökat tecken",
+InsertSmileyLbl : "Smiley",
+InsertSmiley : "Infoga Smiley",
+About : "Om FCKeditor",
+Bold : "Fet",
+Italic : "Kursiv",
+Underline : "Understruken",
+StrikeThrough : "Genomstruken",
+Subscript : "Nedsänkta tecken",
+Superscript : "Upphöjda tecken",
+LeftJustify : "Vänsterjustera",
+CenterJustify : "Centrera",
+RightJustify : "Högerjustera",
+BlockJustify : "Justera till marginaler",
+DecreaseIndent : "Minska indrag",
+IncreaseIndent : "Öka indrag",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "Ã…ngra",
+Redo : "Gör om",
+NumberedListLbl : "Numrerad lista",
+NumberedList : "Infoga/Radera numrerad lista",
+BulletedListLbl : "Punktlista",
+BulletedList : "Infoga/Radera punktlista",
+ShowTableBorders : "Visa tabellkant",
+ShowDetails : "Visa radbrytningar",
+Style : "Anpassad stil",
+FontFormat : "Teckenformat",
+Font : "Typsnitt",
+FontSize : "Storlek",
+TextColor : "Textfärg",
+BGColor : "Bakgrundsfärg",
+Source : "Källa",
+Find : "Sök",
+Replace : "Ersätt",
+SpellCheck : "Stavningskontroll",
+UniversalKeyboard : "Universellt tangentbord",
+PageBreakLbl : "Sidbrytning",
+PageBreak : "Infoga sidbrytning",
+
+Form : "Formulär",
+Checkbox : "Kryssruta",
+RadioButton : "Alternativknapp",
+TextField : "Textfält",
+Textarea : "Textruta",
+HiddenField : "Dolt fält",
+Button : "Knapp",
+SelectionField : "Flervalslista",
+ImageButton : "Bildknapp",
+
+FitWindow : "Anpassa till fönstrets storlek",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "Redigera länk",
+CellCM : "Cell",
+RowCM : "Rad",
+ColumnCM : "Kolumn",
+InsertRowAfter : "Lägg till Rad Efter",
+InsertRowBefore : "Lägg till Rad Före",
+DeleteRows : "Radera rad",
+InsertColumnAfter : "Lägg till Kolumn Efter",
+InsertColumnBefore : "Lägg till Kolumn Före",
+DeleteColumns : "Radera kolumn",
+InsertCellAfter : "Lägg till Cell Efter",
+InsertCellBefore : "Lägg till Cell Före",
+DeleteCells : "Radera celler",
+MergeCells : "Sammanfoga celler",
+MergeRight : "Sammanfoga Höger",
+MergeDown : "Sammanfoga Ner",
+HorizontalSplitCell : "Dela Cell Horisontellt",
+VerticalSplitCell : "Dela Cell Vertikalt",
+TableDelete : "Radera tabell",
+CellProperties : "Cellegenskaper",
+TableProperties : "Tabellegenskaper",
+ImageProperties : "Bildegenskaper",
+FlashProperties : "Flashegenskaper",
+
+AnchorProp : "Egenskaper för ankarlänk",
+ButtonProp : "Egenskaper för knapp",
+CheckboxProp : "Egenskaper för kryssruta",
+HiddenFieldProp : "Egenskaper för dolt fält",
+RadioButtonProp : "Egenskaper för alternativknapp",
+ImageButtonProp : "Egenskaper för bildknapp",
+TextFieldProp : "Egenskaper för textfält",
+SelectionFieldProp : "Egenskaper för flervalslista",
+TextareaProp : "Egenskaper för textruta",
+FormProp : "Egenskaper för formulär",
+
+FontFormats : "Normal;Formaterad;Adress;Rubrik 1;Rubrik 2;Rubrik 3;Rubrik 4;Rubrik 5;Rubrik 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Bearbetar XHTML. Var god vänta...",
+Done : "Klar",
+PasteWordConfirm : "Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistar in?",
+NotCompatiblePaste : "Denna åtgärd är inte tillgängligt för Internet Explorer version 5.5 eller högre. Vill du klistra in utan att rensa?",
+UnknownToolbarItem : "Okänt verktygsfält \"%1\"",
+UnknownCommand : "Okänt kommando \"%1\"",
+NotImplemented : "Kommandot finns ej",
+UnknownToolbarSet : "Verktygsfält \"%1\" finns ej",
+NoActiveX : "Din webläsares säkerhetsinställningar kan begränsa funktionaliteten. Du bör aktivera \"Kör ActiveX kontroller och plug-ins\". Fel och avsaknad av funktioner kan annars uppstå.",
+BrowseServerBlocked : "Kunde Ej öppna resursfönstret. Var god och avaktivera alla popup-blockerare.",
+DialogBlocked : "Kunde Ej öppna dialogfönstret. Var god och avaktivera alla popup-blockerare.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "OK",
+DlgBtnCancel : "Avbryt",
+DlgBtnClose : "Stäng",
+DlgBtnBrowseServer : "Bläddra på server",
+DlgAdvancedTag : "Avancerad",
+DlgOpOther : "Övrigt",
+DlgInfoTab : "Information",
+DlgAlertUrl : "Var god och ange en URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ej angivet>",
+DlgGenId : "Id",
+DlgGenLangDir : "Språkriktning",
+DlgGenLangDirLtr : "Vänster till Höger (VTH)",
+DlgGenLangDirRtl : "Höger till Vänster (HTV)",
+DlgGenLangCode : "Språkkod",
+DlgGenAccessKey : "Behörighetsnyckel",
+DlgGenName : "Namn",
+DlgGenTabIndex : "Tabindex",
+DlgGenLongDescr : "URL-beskrivning",
+DlgGenClass : "Stylesheet class",
+DlgGenTitle : "Titel",
+DlgGenContType : "Innehållstyp",
+DlgGenLinkCharset : "Teckenuppställning",
+DlgGenStyle : "Style",
+
+// Image Dialog
+DlgImgTitle : "Bildegenskaper",
+DlgImgInfoTab : "Bildinformation",
+DlgImgBtnUpload : "Skicka till server",
+DlgImgURL : "URL",
+DlgImgUpload : "Ladda upp",
+DlgImgAlt : "Alternativ text",
+DlgImgWidth : "Bredd",
+DlgImgHeight : "Höjd",
+DlgImgLockRatio : "Lås höjd/bredd förhållanden",
+DlgBtnResetSize : "Återställ storlek",
+DlgImgBorder : "Kant",
+DlgImgHSpace : "Horis. marginal",
+DlgImgVSpace : "Vert. marginal",
+DlgImgAlign : "Justering",
+DlgImgAlignLeft : "Vänster",
+DlgImgAlignAbsBottom: "Absolut nederkant",
+DlgImgAlignAbsMiddle: "Absolut centrering",
+DlgImgAlignBaseline : "Baslinje",
+DlgImgAlignBottom : "Nederkant",
+DlgImgAlignMiddle : "Mitten",
+DlgImgAlignRight : "Höger",
+DlgImgAlignTextTop : "Text överkant",
+DlgImgAlignTop : "Överkant",
+DlgImgPreview : "Förhandsgranska",
+DlgImgAlertUrl : "Var god och ange bildens URL",
+DlgImgLinkTab : "Länk",
+
+// Flash Dialog
+DlgFlashTitle : "Flashegenskaper",
+DlgFlashChkPlay : "Automatisk uppspelning",
+DlgFlashChkLoop : "Upprepa/Loopa",
+DlgFlashChkMenu : "Aktivera Flashmeny",
+DlgFlashScale : "Skala",
+DlgFlashScaleAll : "Visa allt",
+DlgFlashScaleNoBorder : "Ingen ram",
+DlgFlashScaleFit : "Exakt passning",
+
+// Link Dialog
+DlgLnkWindowTitle : "Länk",
+DlgLnkInfoTab : "Länkinformation",
+DlgLnkTargetTab : "MÃ¥l",
+
+DlgLnkType : "Länktyp",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Ankare i sidan",
+DlgLnkTypeEMail : "E-post",
+DlgLnkProto : "Protokoll",
+DlgLnkProtoOther : "<övrigt>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Välj ett ankare",
+DlgLnkAnchorByName : "efter ankarnamn",
+DlgLnkAnchorById : "efter objektid",
+DlgLnkNoAnchors : "(Inga ankare kunde hittas)",
+DlgLnkEMail : "E-postadress",
+DlgLnkEMailSubject : "Ämne",
+DlgLnkEMailBody : "Innehåll",
+DlgLnkUpload : "Ladda upp",
+DlgLnkBtnUpload : "Skicka till servern",
+
+DlgLnkTarget : "MÃ¥l",
+DlgLnkTargetFrame : "<ram>",
+DlgLnkTargetPopup : "<popup-fönster>",
+DlgLnkTargetBlank : "Nytt fönster (_blank)",
+DlgLnkTargetParent : "Föregående Window (_parent)",
+DlgLnkTargetSelf : "Detta fönstret (_self)",
+DlgLnkTargetTop : "Översta fönstret (_top)",
+DlgLnkTargetFrameName : "MÃ¥lets ramnamn",
+DlgLnkPopWinName : "Popup-fönstrets namn",
+DlgLnkPopWinFeat : "Popup-fönstrets egenskaper",
+DlgLnkPopResize : "Kan ändra storlek",
+DlgLnkPopLocation : "Adressfält",
+DlgLnkPopMenu : "Menyfält",
+DlgLnkPopScroll : "Scrolllista",
+DlgLnkPopStatus : "Statusfält",
+DlgLnkPopToolbar : "Verktygsfält",
+DlgLnkPopFullScrn : "Helskärm (endast IE)",
+DlgLnkPopDependent : "Beroende (endest Netscape)",
+DlgLnkPopWidth : "Bredd",
+DlgLnkPopHeight : "Höjd",
+DlgLnkPopLeft : "Position från vänster",
+DlgLnkPopTop : "Position från sidans topp",
+
+DlnLnkMsgNoUrl : "Var god ange länkens URL",
+DlnLnkMsgNoEMail : "Var god ange E-postadress",
+DlnLnkMsgNoAnchor : "Var god ange ett ankare",
+DlnLnkMsgInvPopName : "Popup-rutans namn måste börja med en alfabetisk bokstav och får inte innehålla mellanslag",
+
+// Color Dialog
+DlgColorTitle : "Välj färg",
+DlgColorBtnClear : "Rensa",
+DlgColorHighlight : "Markera",
+DlgColorSelected : "Vald",
+
+// Smiley Dialog
+DlgSmileyTitle : "Infoga smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Välj utökat tecken",
+
+// Table Dialog
+DlgTableTitle : "Tabellegenskaper",
+DlgTableRows : "Rader",
+DlgTableColumns : "Kolumner",
+DlgTableBorder : "Kantstorlek",
+DlgTableAlign : "Justering",
+DlgTableAlignNotSet : "<ej angivet>",
+DlgTableAlignLeft : "Vänster",
+DlgTableAlignCenter : "Centrerad",
+DlgTableAlignRight : "Höger",
+DlgTableWidth : "Bredd",
+DlgTableWidthPx : "pixlar",
+DlgTableWidthPc : "procent",
+DlgTableHeight : "Höjd",
+DlgTableCellSpace : "Cellavstånd",
+DlgTableCellPad : "Cellutfyllnad",
+DlgTableCaption : "Rubrik",
+DlgTableSummary : "Sammanfattning",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Cellegenskaper",
+DlgCellWidth : "Bredd",
+DlgCellWidthPx : "pixlar",
+DlgCellWidthPc : "procent",
+DlgCellHeight : "Höjd",
+DlgCellWordWrap : "Automatisk radbrytning",
+DlgCellWordWrapNotSet : "<Ej angivet>",
+DlgCellWordWrapYes : "Ja",
+DlgCellWordWrapNo : "Nej",
+DlgCellHorAlign : "Horisontal justering",
+DlgCellHorAlignNotSet : "<Ej angivet>",
+DlgCellHorAlignLeft : "Vänster",
+DlgCellHorAlignCenter : "Centrerad",
+DlgCellHorAlignRight: "Höger",
+DlgCellVerAlign : "Vertikal justering",
+DlgCellVerAlignNotSet : "<Ej angivet>",
+DlgCellVerAlignTop : "Topp",
+DlgCellVerAlignMiddle : "Mitten",
+DlgCellVerAlignBottom : "Nederkant",
+DlgCellVerAlignBaseline : "Underst",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Radomfång",
+DlgCellCollSpan : "Kolumnomfång",
+DlgCellBackColor : "Bakgrundsfärg",
+DlgCellBorderColor : "Kantfärg",
+DlgCellBtnSelect : "Välj...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Sök och ersätt",
+
+// Find Dialog
+DlgFindTitle : "Sök",
+DlgFindFindBtn : "Sök",
+DlgFindNotFoundMsg : "Angiven text kunde ej hittas.",
+
+// Replace Dialog
+DlgReplaceTitle : "Ersätt",
+DlgReplaceFindLbl : "Sök efter:",
+DlgReplaceReplaceLbl : "Ersätt med:",
+DlgReplaceCaseChk : "Skiftläge",
+DlgReplaceReplaceBtn : "Ersätt",
+DlgReplaceReplAllBtn : "Ersätt alla",
+DlgReplaceWordChk : "Inkludera hela ord",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl+X) istället.",
+PasteErrorCopy : "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl+C) istället",
+
+PasteAsText : "Klistra in som vanlig text",
+PasteFromWord : "Klistra in från Word",
+
+DlgPasteMsg2 : "Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.",
+DlgPasteSec : "På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.",
+DlgPasteIgnoreFont : "Ignorera typsnittsdefinitioner",
+DlgPasteRemoveStyles : "Radera Stildefinitioner",
+
+// Color Picker
+ColorAutomatic : "Automatisk",
+ColorMoreColors : "Fler färger...",
+
+// Document Properties
+DocProps : "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle : "Ankaregenskaper",
+DlgAnchorName : "Ankarnamn",
+DlgAnchorErrorName : "Var god ange ett ankarnamn",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Saknas i ordlistan",
+DlgSpellChangeTo : "Ändra till",
+DlgSpellBtnIgnore : "Ignorera",
+DlgSpellBtnIgnoreAll : "Ignorera alla",
+DlgSpellBtnReplace : "Ersätt",
+DlgSpellBtnReplaceAll : "Ersätt alla",
+DlgSpellBtnUndo : "Ã…ngra",
+DlgSpellNoSuggestions : "- Förslag saknas -",
+DlgSpellProgress : "Stavningskontroll pågår...",
+DlgSpellNoMispell : "Stavningskontroll slutförd: Inga stavfel påträffades.",
+DlgSpellNoChanges : "Stavningskontroll slutförd: Inga ord rättades.",
+DlgSpellOneChange : "Stavningskontroll slutförd: Ett ord rättades.",
+DlgSpellManyChanges : "Stavningskontroll slutförd: %1 ord rättades.",
+
+IeSpellDownload : "Stavningskontrollen är ej installerad. Vill du göra det nu?",
+
+// Button Dialog
+DlgButtonText : "Text (Värde)",
+DlgButtonType : "Typ",
+DlgButtonTypeBtn : "Knapp",
+DlgButtonTypeSbm : "Skicka",
+DlgButtonTypeRst : "Återställ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Namn",
+DlgCheckboxValue : "Värde",
+DlgCheckboxSelected : "Vald",
+
+// Form Dialog
+DlgFormName : "Namn",
+DlgFormAction : "Funktion",
+DlgFormMethod : "Metod",
+
+// Select Field Dialog
+DlgSelectName : "Namn",
+DlgSelectValue : "Värde",
+DlgSelectSize : "Storlek",
+DlgSelectLines : "Linjer",
+DlgSelectChkMulti : "Tillåt flerval",
+DlgSelectOpAvail : "Befintliga val",
+DlgSelectOpText : "Text",
+DlgSelectOpValue : "Värde",
+DlgSelectBtnAdd : "Lägg till",
+DlgSelectBtnModify : "Redigera",
+DlgSelectBtnUp : "Upp",
+DlgSelectBtnDown : "Ner",
+DlgSelectBtnSetValue : "Markera som valt värde",
+DlgSelectBtnDelete : "Radera",
+
+// Textarea Dialog
+DlgTextareaName : "Namn",
+DlgTextareaCols : "Kolumner",
+DlgTextareaRows : "Rader",
+
+// Text Field Dialog
+DlgTextName : "Namn",
+DlgTextValue : "Värde",
+DlgTextCharWidth : "Teckenbredd",
+DlgTextMaxChars : "Max antal tecken",
+DlgTextType : "Typ",
+DlgTextTypeText : "Text",
+DlgTextTypePass : "Lösenord",
+
+// Hidden Field Dialog
+DlgHiddenName : "Namn",
+DlgHiddenValue : "Värde",
+
+// Bulleted List Dialog
+BulletedListProp : "Egenskaper för punktlista",
+NumberedListProp : "Egenskaper för numrerad lista",
+DlgLstStart : "Start",
+DlgLstType : "Typ",
+DlgLstTypeCircle : "Cirkel",
+DlgLstTypeDisc : "Punkt",
+DlgLstTypeSquare : "Ruta",
+DlgLstTypeNumbers : "Nummer (1, 2, 3)",
+DlgLstTypeLCase : "Gemener (a, b, c)",
+DlgLstTypeUCase : "Versaler (A, B, C)",
+DlgLstTypeSRoman : "Små romerska siffror (i, ii, iii)",
+DlgLstTypeLRoman : "Stora romerska siffror (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Allmän",
+DlgDocBackTab : "Bakgrund",
+DlgDocColorsTab : "Färg och marginal",
+DlgDocMetaTab : "Metadata",
+
+DlgDocPageTitle : "Sidtitel",
+DlgDocLangDir : "Språkriktning",
+DlgDocLangDirLTR : "Vänster till Höger",
+DlgDocLangDirRTL : "Höger till Vänster",
+DlgDocLangCode : "Språkkod",
+DlgDocCharSet : "Teckenuppsättningar",
+DlgDocCharSetCE : "Central Europa",
+DlgDocCharSetCT : "Traditionell Kinesisk (Big5)",
+DlgDocCharSetCR : "Kyrillisk",
+DlgDocCharSetGR : "Grekiska",
+DlgDocCharSetJP : "Japanska",
+DlgDocCharSetKR : "Koreanska",
+DlgDocCharSetTR : "Turkiska",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Väst Europa",
+DlgDocCharSetOther : "Övriga teckenuppsättningar",
+
+DlgDocDocType : "Sidhuvud",
+DlgDocDocTypeOther : "Övriga sidhuvuden",
+DlgDocIncXHTML : "Inkludera XHTML deklaration",
+DlgDocBgColor : "Bakgrundsfärg",
+DlgDocBgImage : "Bakgrundsbildens URL",
+DlgDocBgNoScroll : "Fast bakgrund",
+DlgDocCText : "Text",
+DlgDocCLink : "Länk",
+DlgDocCVisited : "Besökt länk",
+DlgDocCActive : "Aktiv länk",
+DlgDocMargins : "Sidmarginal",
+DlgDocMaTop : "Topp",
+DlgDocMaLeft : "Vänster",
+DlgDocMaRight : "Höger",
+DlgDocMaBottom : "Botten",
+DlgDocMeIndex : "Sidans nyckelord",
+DlgDocMeDescr : "Sidans beskrivning",
+DlgDocMeAuthor : "Författare",
+DlgDocMeCopy : "Upphovsrätt",
+DlgDocPreview : "Förhandsgranska",
+
+// Templates Dialog
+Templates : "Sidmallar",
+DlgTemplatesTitle : "Sidmallar",
+DlgTemplatesSelMsg : "Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):",
+DlgTemplatesLoading : "Laddar mallar. Var god vänta...",
+DlgTemplatesNoTpl : "(Ingen mall är vald)",
+DlgTemplatesReplace : "Ersätt aktuellt innehåll",
+
+// About Dialog
+DlgAboutAboutTab : "Om",
+DlgAboutBrowserInfoTab : "Webläsare",
+DlgAboutLicenseTab : "Licens",
+DlgAboutVersion : "version",
+DlgAboutInfo : "För mer information se",
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/th.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/th.js
new file mode 100644
index 0000000..17da6be
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/th.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Thai language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "ซ่อนà¹à¸–บเครื่องมือ",
+ToolbarExpand : "à¹à¸ªà¸”งà¹à¸–บเครื่องมือ",
+
+// Toolbar Items and Context Menu
+Save : "บันทึà¸",
+NewPage : "สร้างหน้าเอà¸à¸ªà¸²à¸£à¹ƒà¸«à¸¡à¹ˆ",
+Preview : "ดูหน้าเอà¸à¸ªà¸²à¸£à¸•à¸±à¸§à¸­à¸¢à¹ˆà¸²à¸‡",
+Cut : "ตัด",
+Copy : "สำเนา",
+Paste : "วาง",
+PasteText : "วางสำเนาจาà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸˜à¸£à¸£à¸¡à¸”า",
+PasteWord : "วางสำเนาจาà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¹€à¸§à¸´à¸£à¹Œà¸”",
+Print : "สั่งพิมพ์",
+SelectAll : "เลือà¸à¸—ั้งหมด",
+RemoveFormat : "ล้างรูปà¹à¸šà¸š",
+InsertLinkLbl : "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+InsertLink : "à¹à¸—รà¸/à¹à¸à¹‰à¹„ข ลิงค์",
+RemoveLink : "ลบ ลิงค์",
+VisitLink : "Open Link", //MISSING
+Anchor : "à¹à¸—รà¸/à¹à¸à¹‰à¹„ข Anchor",
+AnchorDelete : "Remove Anchor", //MISSING
+InsertImageLbl : "รูปภาพ",
+InsertImage : "à¹à¸—รà¸/à¹à¸à¹‰à¹„ข รูปภาพ",
+InsertFlashLbl : "ไฟล์ Flash",
+InsertFlash : "à¹à¸—รà¸/à¹à¸à¹‰à¹„ข ไฟล์ Flash",
+InsertTableLbl : "ตาราง",
+InsertTable : "à¹à¸—รà¸/à¹à¸à¹‰à¹„ข ตาราง",
+InsertLineLbl : "เส้นคั่นบรรทัด",
+InsertLine : "à¹à¸—รà¸à¹€à¸ªà¹‰à¸™à¸„ั่นบรรทัด",
+InsertSpecialCharLbl: "ตัวอัà¸à¸©à¸£à¸žà¸´à¹€à¸¨à¸©",
+InsertSpecialChar : "à¹à¸—รà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸žà¸´à¹€à¸¨à¸©",
+InsertSmileyLbl : "รูปสื่ออารมณ์",
+InsertSmiley : "à¹à¸—รà¸à¸£à¸¹à¸›à¸ªà¸·à¹ˆà¸­à¸­à¸²à¸£à¸¡à¸“์",
+About : "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹‚ปรà¹à¸à¸£à¸¡ FCKeditor",
+Bold : "ตัวหนา",
+Italic : "ตัวเอียง",
+Underline : "ตัวขีดเส้นใต้",
+StrikeThrough : "ตัวขีดเส้นทับ",
+Subscript : "ตัวห้อย",
+Superscript : "ตัวยà¸",
+LeftJustify : "จัดชิดซ้าย",
+CenterJustify : "จัดà¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡",
+RightJustify : "จัดชิดขวา",
+BlockJustify : "จัดพอดีหน้าà¸à¸£à¸°à¸”าษ",
+DecreaseIndent : "ลดระยะย่อหน้า",
+IncreaseIndent : "เพิ่มระยะย่อหน้า",
+Blockquote : "Blockquote", //MISSING
+CreateDiv : "Create Div Container", //MISSING
+EditDiv : "Edit Div Container", //MISSING
+DeleteDiv : "Remove Div Container", //MISSING
+Undo : "ยà¸à¹€à¸¥à¸´à¸à¸„ำสั่ง",
+Redo : "ทำซ้ำคำสั่ง",
+NumberedListLbl : "ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸•à¸±à¸§à¹€à¸¥à¸‚",
+NumberedList : "à¹à¸—รà¸/à¹à¸à¹‰à¹„ข ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸•à¸±à¸§à¹€à¸¥à¸‚",
+BulletedListLbl : "ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์",
+BulletedList : "à¹à¸—รà¸/à¹à¸à¹‰à¹„ข ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์",
+ShowTableBorders : "à¹à¸ªà¸”งขอบของตาราง",
+ShowDetails : "à¹à¸ªà¸”งรายละเอียด",
+Style : "ลัà¸à¸©à¸“ะ",
+FontFormat : "รูปà¹à¸šà¸š",
+Font : "à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£",
+FontSize : "ขนาด",
+TextColor : "สีตัวอัà¸à¸©à¸£",
+BGColor : "สีพื้นหลัง",
+Source : "ดูรหัส HTML",
+Find : "ค้นหา",
+Replace : "ค้นหาà¹à¸¥à¸°à¹à¸—นที่",
+SpellCheck : "ตรวจà¸à¸²à¸£à¸ªà¸°à¸à¸”คำ",
+UniversalKeyboard : "คีย์บอร์ดหลาà¸à¸ à¸²à¸©à¸²",
+PageBreakLbl : "ใส่ตัวà¹à¸šà¹ˆà¸‡à¸«à¸™à¹‰à¸² Page Break",
+PageBreak : "à¹à¸—รà¸à¸•à¸±à¸§à¹à¸šà¹ˆà¸‡à¸«à¸™à¹‰à¸² Page Break",
+
+Form : "à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡",
+Checkbox : "เช็คบ๊อà¸",
+RadioButton : "เรดิโอบัตตอน",
+TextField : "เท็à¸à¸‹à¹Œà¸Ÿà¸´à¸¥à¸”์",
+Textarea : "เท็à¸à¸‹à¹Œà¹à¸­à¹€à¸£à¸µà¸¢",
+HiddenField : "ฮิดเดนฟิลด์",
+Button : "ปุ่ม",
+SelectionField : "à¹à¸–บตัวเลือà¸",
+ImageButton : "ปุ่มà¹à¸šà¸šà¸£à¸¹à¸›à¸ à¸²à¸ž",
+
+FitWindow : "ขยายขนาดตัวอีดิตเตอร์",
+ShowBlocks : "Show Blocks", //MISSING
+
+// Context Menu
+EditLink : "à¹à¸à¹‰à¹„ข ลิงค์",
+CellCM : "ช่องตาราง",
+RowCM : "à¹à¸–ว",
+ColumnCM : "คอลัมน์",
+InsertRowAfter : "Insert Row After", //MISSING
+InsertRowBefore : "Insert Row Before", //MISSING
+DeleteRows : "ลบà¹à¸–ว",
+InsertColumnAfter : "Insert Column After", //MISSING
+InsertColumnBefore : "Insert Column Before", //MISSING
+DeleteColumns : "ลบสดมน์",
+InsertCellAfter : "Insert Cell After", //MISSING
+InsertCellBefore : "Insert Cell Before", //MISSING
+DeleteCells : "ลบช่อง",
+MergeCells : "ผสานช่อง",
+MergeRight : "Merge Right", //MISSING
+MergeDown : "Merge Down", //MISSING
+HorizontalSplitCell : "Split Cell Horizontally", //MISSING
+VerticalSplitCell : "Split Cell Vertically", //MISSING
+TableDelete : "ลบตาราง",
+CellProperties : "คุณสมบัติของช่อง",
+TableProperties : "คุณสมบัติของตาราง",
+ImageProperties : "คุณสมบัติของรูปภาพ",
+FlashProperties : "คุณสมบัติของไฟล์ Flash",
+
+AnchorProp : "รายละเอียด Anchor",
+ButtonProp : "รายละเอียดของ ปุ่ม",
+CheckboxProp : "คุณสมบัติของ เช็คบ๊อà¸",
+HiddenFieldProp : "คุณสมบัติของ ฮิดเดนฟิลด์",
+RadioButtonProp : "คุณสมบัติของ เรดิโอบัตตอน",
+ImageButtonProp : "คุณสมบัติของ ปุ่มà¹à¸šà¸šà¸£à¸¹à¸›à¸ à¸²à¸ž",
+TextFieldProp : "คุณสมบัติของ เท็à¸à¸‹à¹Œà¸Ÿà¸´à¸¥à¸”์",
+SelectionFieldProp : "คุณสมบัติของ à¹à¸–บตัวเลือà¸",
+TextareaProp : "คุณสมบัติของ เท็à¸à¹à¸­à¹€à¸£à¸µà¸¢",
+FormProp : "คุณสมบัติของ à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "โปรà¹à¸à¸£à¸¡à¸à¸³à¸¥à¸±à¸‡à¸—ำงานด้วยเทคโนโลยี XHTML à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่...",
+Done : "โปรà¹à¸à¸£à¸¡à¸—ำงานเสร็จสมบูรณ์",
+PasteWordConfirm : "ข้อมูลที่ท่านต้องà¸à¸²à¸£à¸§à¸²à¸‡à¸¥à¸‡à¹ƒà¸™à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™ ถูà¸à¸ˆà¸±à¸”รูปà¹à¸šà¸šà¸ˆà¸²à¸à¹‚ปรà¹à¸à¸£à¸¡à¹€à¸§à¸´à¸£à¹Œà¸”. ท่านต้องà¸à¸²à¸£à¸¥à¹‰à¸²à¸‡à¸£à¸¹à¸›à¹à¸šà¸šà¸—ี่มาจาà¸à¹‚ปรà¹à¸à¸£à¸¡à¹€à¸§à¸´à¸£à¹Œà¸”หรือไม่?",
+NotCompatiblePaste : "คำสั่งนี้ทำงานในโปรà¹à¸à¸£à¸¡à¸—่องเว็บ Internet Explorer version รุ่น 5.5 หรือใหม่à¸à¸§à¹ˆà¸²à¹€à¸—่านั้น. ท่านต้องà¸à¸²à¸£à¸§à¸²à¸‡à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¹‚ดยไม่ล้างรูปà¹à¸šà¸šà¸—ี่มาจาà¸à¹‚ปรà¹à¸à¸£à¸¡à¹€à¸§à¸´à¸£à¹Œà¸”หรือไม่?",
+UnknownToolbarItem : "ไม่สามารถระบุปุ่มเครื่องมือได้ \"%1\"",
+UnknownCommand : "ไม่สามารถระบุชื่อคำสั่งได้ \"%1\"",
+NotImplemented : "ไม่สามารถใช้งานคำสั่งได้",
+UnknownToolbarSet : "ไม่มีà¸à¸²à¸£à¸•à¸´à¸”ตั้งชุดคำสั่งในà¹à¸–บเครื่องมือ \"%1\" à¸à¸£à¸¸à¸“าติดต่อผู้ดูà¹à¸¥à¸£à¸°à¸šà¸š",
+NoActiveX : "โปรà¹à¸à¸£à¸¡à¸—่องอินเตอร์เน็ตของท่านไม่อนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¸­à¸µà¸”ิตเตอร์ทำงาน \"Run ActiveX controls and plug-ins\". หาà¸à¹„ม่อนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ ActiveX controls ท่านจะไม่สามารถใช้งานได้อย่างเต็มประสิทธิภาพ.",
+BrowseServerBlocked : "เปิดหน้าต่างป๊อบอัพเพื่อทำงานต่อไม่ได้ à¸à¸£à¸¸à¸“าปิดเครื่องมือป้องà¸à¸±à¸™à¸›à¹Šà¸­à¸šà¸­à¸±à¸žà¹ƒà¸™à¹‚ปรà¹à¸à¸£à¸¡à¸—่องอินเตอร์เน็ตของท่านด้วย",
+DialogBlocked : "เปิดหน้าต่างป๊อบอัพเพื่อทำงานต่อไม่ได้ à¸à¸£à¸¸à¸“าปิดเครื่องมือป้องà¸à¸±à¸™à¸›à¹Šà¸­à¸šà¸­à¸±à¸žà¹ƒà¸™à¹‚ปรà¹à¸à¸£à¸¡à¸—่องอินเตอร์เน็ตของท่านด้วย",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "ตà¸à¸¥à¸‡",
+DlgBtnCancel : "ยà¸à¹€à¸¥à¸´à¸",
+DlgBtnClose : "ปิด",
+DlgBtnBrowseServer : "เปิดหน้าต่างจัดà¸à¸²à¸£à¹„ฟล์อัพโหลด",
+DlgAdvancedTag : "ขั้นสูง",
+DlgOpOther : "<อื่นๆ>",
+DlgInfoTab : "อินโฟ",
+DlgAlertUrl : "à¸à¸£à¸¸à¸“าระบุ URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<ไม่ระบุ>",
+DlgGenId : "ไอดี",
+DlgGenLangDir : "à¸à¸²à¸£à¹€à¸‚ียน-อ่านภาษา",
+DlgGenLangDirLtr : "จาà¸à¸‹à¹‰à¸²à¸¢à¹„ปขวา (LTR)",
+DlgGenLangDirRtl : "จาà¸à¸‚วามาซ้าย (RTL)",
+DlgGenLangCode : "รหัสภาษา",
+DlgGenAccessKey : "à¹à¸­à¸„เซส คีย์",
+DlgGenName : "ชื่อ",
+DlgGenTabIndex : "ลำดับของ à¹à¸—็บ",
+DlgGenLongDescr : "คำอธิบายประà¸à¸­à¸š URL",
+DlgGenClass : "คลาสของไฟล์à¸à¸³à¸«à¸™à¸”ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล",
+DlgGenTitle : "คำเà¸à¸£à¸´à¹ˆà¸™à¸™à¸³",
+DlgGenContType : "ชนิดของคำเà¸à¸£à¸´à¹ˆà¸™à¸™à¸³",
+DlgGenLinkCharset : "ลิงค์เชื่อมโยงไปยังชุดตัวอัà¸à¸©à¸£",
+DlgGenStyle : "ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล",
+
+// Image Dialog
+DlgImgTitle : "คุณสมบัติของ รูปภาพ",
+DlgImgInfoTab : "ข้อมูลของรูปภาพ",
+DlgImgBtnUpload : "อัพโหลดไฟล์ไปเà¸à¹‡à¸šà¹„ว้ที่เครื่องà¹à¸¡à¹ˆà¸‚่าย (เซิร์ฟเวอร์)",
+DlgImgURL : "ที่อยู่อ้างอิง URL",
+DlgImgUpload : "อัพโหลดไฟล์",
+DlgImgAlt : "คำประà¸à¸­à¸šà¸£à¸¹à¸›à¸ à¸²à¸ž",
+DlgImgWidth : "ความà¸à¸§à¹‰à¸²à¸‡",
+DlgImgHeight : "ความสูง",
+DlgImgLockRatio : "à¸à¸³à¸«à¸™à¸”อัตราส่วน à¸à¸§à¹‰à¸²à¸‡-สูง à¹à¸šà¸šà¸„งที่",
+DlgBtnResetSize : "à¸à¸³à¸«à¸™à¸”รูปเท่าขนาดจริง",
+DlgImgBorder : "ขนาดขอบรูป",
+DlgImgHSpace : "ระยะà¹à¸™à¸§à¸™à¸­à¸™",
+DlgImgVSpace : "ระยะà¹à¸™à¸§à¸•à¸±à¹‰à¸‡",
+DlgImgAlign : "à¸à¸²à¸£à¸ˆà¸±à¸”วาง",
+DlgImgAlignLeft : "ชิดซ้าย",
+DlgImgAlignAbsBottom: "ชิดด้านล่างสุด",
+DlgImgAlignAbsMiddle: "à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡",
+DlgImgAlignBaseline : "ชิดบรรทัด",
+DlgImgAlignBottom : "ชิดด้านล่าง",
+DlgImgAlignMiddle : "à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡à¹à¸™à¸§à¸•à¸±à¹‰à¸‡",
+DlgImgAlignRight : "ชิดขวา",
+DlgImgAlignTextTop : "ใต้ตัวอัà¸à¸©à¸£",
+DlgImgAlignTop : "บนสุด",
+DlgImgPreview : "หน้าเอà¸à¸ªà¸²à¸£à¸•à¸±à¸§à¸­à¸¢à¹ˆà¸²à¸‡",
+DlgImgAlertUrl : "à¸à¸£à¸¸à¸“าระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)",
+DlgImgLinkTab : "ลิ้งค์",
+
+// Flash Dialog
+DlgFlashTitle : "คุณสมบัติของไฟล์ Flash",
+DlgFlashChkPlay : "เล่นอัตโนมัติ Auto Play",
+DlgFlashChkLoop : "เล่นวนรอบ Loop",
+DlgFlashChkMenu : "ให้ใช้งานเมนูของ Flash",
+DlgFlashScale : "อัตราส่วน Scale",
+DlgFlashScaleAll : "à¹à¸ªà¸”งให้เห็นทั้งหมด Show all",
+DlgFlashScaleNoBorder : "ไม่à¹à¸ªà¸”งเส้นขอบ No Border",
+DlgFlashScaleFit : "à¹à¸ªà¸”งให้พอดีà¸à¸±à¸šà¸žà¸·à¹‰à¸™à¸—ี่ Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle : "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+DlgLnkInfoTab : "รายละเอียด",
+DlgLnkTargetTab : "à¸à¸²à¸£à¹€à¸›à¸´à¸”หน้าจอ",
+
+DlgLnkType : "ประเภทของลิงค์",
+DlgLnkTypeURL : "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkTypeAnchor : "จุดเชื่อมโยง (Anchor)",
+DlgLnkTypeEMail : "ส่งอีเมล์ (E-Mail)",
+DlgLnkProto : "โปรโตคอล",
+DlgLnkProtoOther : "<อื่นๆ>",
+DlgLnkURL : "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkAnchorSel : "ระบุข้อมูลของจุดเชื่อมโยง (Anchor)",
+DlgLnkAnchorByName : "ชื่อ",
+DlgLnkAnchorById : "ไอดี",
+DlgLnkNoAnchors : "(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอà¸à¸ªà¸²à¸£à¸™à¸µà¹‰)",
+DlgLnkEMail : "อีเมล์ (E-Mail)",
+DlgLnkEMailSubject : "หัวเรื่อง",
+DlgLnkEMailBody : "ข้อความ",
+DlgLnkUpload : "อัพโหลดไฟล์",
+DlgLnkBtnUpload : "บันทึà¸à¹„ฟล์ไว้บนเซิร์ฟเวอร์",
+
+DlgLnkTarget : "à¸à¸²à¸£à¹€à¸›à¸´à¸”หน้าลิงค์",
+DlgLnkTargetFrame : "<เปิดในเฟรม>",
+DlgLnkTargetPopup : "<เปิดหน้าจอเล็ภ(Pop-up)>",
+DlgLnkTargetBlank : "เปิดหน้าจอใหม่ (_blank)",
+DlgLnkTargetParent : "เปิดในหน้าหลัภ(_parent)",
+DlgLnkTargetSelf : "เปิดในหน้าปัจจุบัน (_self)",
+DlgLnkTargetTop : "เปิดในหน้าบนสุด (_top)",
+DlgLnkTargetFrameName : "ชื่อทาร์เà¸à¹‡à¸•à¹€à¸Ÿà¸£à¸¡",
+DlgLnkPopWinName : "ระบุชื่อหน้าจอเล็ภ(Pop-up)",
+DlgLnkPopWinFeat : "คุณสมบัติของหน้าจอเล็ภ(Pop-up)",
+DlgLnkPopResize : "ปรับขนาดหน้าจอ",
+DlgLnkPopLocation : "à¹à¸ªà¸”งที่อยู่ของไฟล์",
+DlgLnkPopMenu : "à¹à¸ªà¸”งà¹à¸–บเมนู",
+DlgLnkPopScroll : "à¹à¸ªà¸”งà¹à¸–บเลื่อน",
+DlgLnkPopStatus : "à¹à¸ªà¸”งà¹à¸–บสถานะ",
+DlgLnkPopToolbar : "à¹à¸ªà¸”งà¹à¸–บเครื่องมือ",
+DlgLnkPopFullScrn : "à¹à¸ªà¸”งเต็มหน้าจอ (IE5.5++ เท่านั้น)",
+DlgLnkPopDependent : "à¹à¸ªà¸”งเต็มหน้าจอ (Netscape)",
+DlgLnkPopWidth : "à¸à¸§à¹‰à¸²à¸‡",
+DlgLnkPopHeight : "สูง",
+DlgLnkPopLeft : "พิà¸à¸±à¸”ซ้าย (Left Position)",
+DlgLnkPopTop : "พิà¸à¸±à¸”บน (Top Position)",
+
+DlnLnkMsgNoUrl : "à¸à¸£à¸¸à¸“าระบุที่อยู่อ้างอิงออนไลน์ (URL)",
+DlnLnkMsgNoEMail : "à¸à¸£à¸¸à¸“าระบุอีเมล์ (E-mail)",
+DlnLnkMsgNoAnchor : "à¸à¸£à¸¸à¸“าระบุจุดเชื่อมโยง (Anchor)",
+DlnLnkMsgInvPopName : "ชื่อของหน้าต่างป๊อบอัพ จะต้องขึ้นต้นด้วยตัวอัà¸à¸©à¸£à¹€à¸—่านั้น à¹à¸¥à¸°à¸•à¹‰à¸­à¸‡à¹„ม่มีช่องว่างในชื่อ",
+
+// Color Dialog
+DlgColorTitle : "เลือà¸à¸ªà¸µ",
+DlgColorBtnClear : "ล้างค่ารหัสสี",
+DlgColorHighlight : "ตัวอย่างสี",
+DlgColorSelected : "สีที่เลือà¸",
+
+// Smiley Dialog
+DlgSmileyTitle : "à¹à¸—รà¸à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์สื่ออารมณ์",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "à¹à¸—รà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸žà¸´à¹€à¸¨à¸©",
+
+// Table Dialog
+DlgTableTitle : "คุณสมบัติของ ตาราง",
+DlgTableRows : "à¹à¸–ว",
+DlgTableColumns : "สดมน์",
+DlgTableBorder : "ขนาดเส้นขอบ",
+DlgTableAlign : "à¸à¸²à¸£à¸ˆà¸±à¸”ตำà¹à¸«à¸™à¹ˆà¸‡",
+DlgTableAlignNotSet : "<ไม่ระบุ>",
+DlgTableAlignLeft : "ชิดซ้าย",
+DlgTableAlignCenter : "à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡",
+DlgTableAlignRight : "ชิดขวา",
+DlgTableWidth : "à¸à¸§à¹‰à¸²à¸‡",
+DlgTableWidthPx : "จุดสี",
+DlgTableWidthPc : "เปอร์เซ็น",
+DlgTableHeight : "สูง",
+DlgTableCellSpace : "ระยะà¹à¸™à¸§à¸™à¸­à¸™à¸™",
+DlgTableCellPad : "ระยะà¹à¸™à¸§à¸•à¸±à¹‰à¸‡",
+DlgTableCaption : "หัวเรื่องของตาราง",
+DlgTableSummary : "สรุปความ",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "คุณสมบัติของ ช่อง",
+DlgCellWidth : "à¸à¸§à¹‰à¸²à¸‡",
+DlgCellWidthPx : "จุดสี",
+DlgCellWidthPc : "เปอร์เซ็น",
+DlgCellHeight : "สูง",
+DlgCellWordWrap : "ตัดบรรทัดอัตโนมัติ",
+DlgCellWordWrapNotSet : "<ไม่ระบุ>",
+DlgCellWordWrapYes : "ใ่ช่",
+DlgCellWordWrapNo : "ไม่",
+DlgCellHorAlign : "à¸à¸²à¸£à¸ˆà¸±à¸”วางà¹à¸™à¸§à¸™à¸­à¸™",
+DlgCellHorAlignNotSet : "<ไม่ระบุ>",
+DlgCellHorAlignLeft : "ชิดซ้าย",
+DlgCellHorAlignCenter : "à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡",
+DlgCellHorAlignRight: "ชิดขวา",
+DlgCellVerAlign : "à¸à¸²à¸£à¸ˆà¸±à¸”วางà¹à¸™à¸§à¸•à¸±à¹‰à¸‡",
+DlgCellVerAlignNotSet : "<ไม่ระบุ>",
+DlgCellVerAlignTop : "บนสุด",
+DlgCellVerAlignMiddle : "à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡",
+DlgCellVerAlignBottom : "ล่างสุด",
+DlgCellVerAlignBaseline : "อิงบรรทัด",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "จำนวนà¹à¸–วที่คร่อมà¸à¸±à¸™",
+DlgCellCollSpan : "จำนวนสดมน์ที่คร่อมà¸à¸±à¸™",
+DlgCellBackColor : "สีพื้นหลัง",
+DlgCellBorderColor : "สีเส้นขอบ",
+DlgCellBtnSelect : "เลือà¸..",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Find and Replace", //MISSING
+
+// Find Dialog
+DlgFindTitle : "ค้นหา",
+DlgFindFindBtn : "ค้นหา",
+DlgFindNotFoundMsg : "ไม่พบคำที่ค้นหา.",
+
+// Replace Dialog
+DlgReplaceTitle : "ค้นหาà¹à¸¥à¸°à¹à¸—นที่",
+DlgReplaceFindLbl : "ค้นหาคำว่า:",
+DlgReplaceReplaceLbl : "à¹à¸—นที่ด้วย:",
+DlgReplaceCaseChk : "ตัวโหà¸à¹ˆ-เล็ภต้องตรงà¸à¸±à¸™",
+DlgReplaceReplaceBtn : "à¹à¸—นที่",
+DlgReplaceReplAllBtn : "à¹à¸—นที่ทั้งหมดที่พบ",
+DlgReplaceWordChk : "ต้องตรงà¸à¸±à¸™à¸—ุà¸à¸„ำ",
+
+// Paste Operations / Dialog
+PasteErrorCut : "ไม่สามารถตัดข้อความที่เลือà¸à¹„ว้ได้เนื่องจาà¸à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าระดับความปลอดภัย. à¸à¸£à¸¸à¸“าใช้ปุ่มลัดเพื่อวางข้อความà¹à¸—น (à¸à¸”ปุ่ม Ctrl à¹à¸¥à¸°à¸•à¸±à¸§ X พร้อมà¸à¸±à¸™).",
+PasteErrorCopy : "ไม่สามารถสำเนาข้อความที่เลือà¸à¹„ว้ได้เนื่องจาà¸à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าระดับความปลอดภัย. à¸à¸£à¸¸à¸“าใช้ปุ่มลัดเพื่อวางข้อความà¹à¸—น (à¸à¸”ปุ่ม Ctrl à¹à¸¥à¸°à¸•à¸±à¸§ C พร้อมà¸à¸±à¸™).",
+
+PasteAsText : "วางà¹à¸šà¸šà¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸˜à¸£à¸£à¸¡à¸”า",
+PasteFromWord : "วางà¹à¸šà¸šà¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸ˆà¸²à¸à¹‚ปรà¹à¸à¸£à¸¡à¹€à¸§à¸´à¸£à¹Œà¸”",
+
+DlgPasteMsg2 : "à¸à¸£à¸¸à¸“าใช้คีย์บอร์ดเท่านั้น โดยà¸à¸”ปุ๋ม (<strong>Ctrl à¹à¸¥à¸° V</strong>)พร้อมๆà¸à¸±à¸™ à¹à¸¥à¸°à¸à¸” <strong>OK</strong>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "ไม่สนใจ Font Face definitions",
+DlgPasteRemoveStyles : "ลบ Styles definitions",
+
+// Color Picker
+ColorAutomatic : "สีอัตโนมัติ",
+ColorMoreColors : "เลือà¸à¸ªà¸µà¸­à¸·à¹ˆà¸™à¹†...",
+
+// Document Properties
+DocProps : "คุณสมบัติของเอà¸à¸ªà¸²à¸£",
+
+// Anchor Dialog
+DlgAnchorTitle : "คุณสมบัติของ Anchor",
+DlgAnchorName : "ชื่อ Anchor",
+DlgAnchorErrorName : "à¸à¸£à¸¸à¸“าระบุชื่อของ Anchor",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "ไม่พบในดิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µ",
+DlgSpellChangeTo : "à¹à¸à¹‰à¹„ขเป็น",
+DlgSpellBtnIgnore : "ยà¸à¹€à¸§à¹‰à¸™",
+DlgSpellBtnIgnoreAll : "ยà¸à¹€à¸§à¹‰à¸™à¸—ั้งหมด",
+DlgSpellBtnReplace : "à¹à¸—นที่",
+DlgSpellBtnReplaceAll : "à¹à¸—นที่ทั้งหมด",
+DlgSpellBtnUndo : "ยà¸à¹€à¸¥à¸´à¸",
+DlgSpellNoSuggestions : "- ไม่มีคำà¹à¸™à¸°à¸™à¸³à¹ƒà¸”ๆ -",
+DlgSpellProgress : "à¸à¸³à¸¥à¸±à¸‡à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¸„ำสะà¸à¸”...",
+DlgSpellNoMispell : "ตรวจสอบคำสะà¸à¸”เสร็จสิ้น: ไม่พบคำสะà¸à¸”ผิด",
+DlgSpellNoChanges : "ตรวจสอบคำสะà¸à¸”เสร็จสิ้น: ไม่มีà¸à¸²à¸£à¹à¸à¹‰à¸„ำใดๆ",
+DlgSpellOneChange : "ตรวจสอบคำสะà¸à¸”เสร็จสิ้น: à¹à¸à¹‰à¹„ข1คำ",
+DlgSpellManyChanges : "ตรวจสอบคำสะà¸à¸”เสร็จสิ้น:: à¹à¸à¹‰à¹„ข %1 คำ",
+
+IeSpellDownload : "ไม่ได้ติดตั้งระบบตรวจสอบคำสะà¸à¸”. ต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้งไหมครับ?",
+
+// Button Dialog
+DlgButtonText : "ข้อความ (ค่าตัวà¹à¸›à¸£)",
+DlgButtonType : "ข้อความ",
+DlgButtonTypeBtn : "Button",
+DlgButtonTypeSbm : "Submit",
+DlgButtonTypeRst : "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "ชื่อ",
+DlgCheckboxValue : "ค่าตัวà¹à¸›à¸£",
+DlgCheckboxSelected : "เลือà¸à¹€à¸›à¹‡à¸™à¸„่าเริ่มต้น",
+
+// Form Dialog
+DlgFormName : "ชื่อ",
+DlgFormAction : "à¹à¸­à¸„ชั่น",
+DlgFormMethod : "เมธอด",
+
+// Select Field Dialog
+DlgSelectName : "ชื่อ",
+DlgSelectValue : "ค่าตัวà¹à¸›à¸£",
+DlgSelectSize : "ขนาด",
+DlgSelectLines : "บรรทัด",
+DlgSelectChkMulti : "เลือà¸à¸«à¸¥à¸²à¸¢à¸„่าได้",
+DlgSelectOpAvail : "รายà¸à¸²à¸£à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸",
+DlgSelectOpText : "ข้อความ",
+DlgSelectOpValue : "ค่าตัวà¹à¸›à¸£",
+DlgSelectBtnAdd : "เพิ่ม",
+DlgSelectBtnModify : "à¹à¸à¹‰à¹„ข",
+DlgSelectBtnUp : "บน",
+DlgSelectBtnDown : "ล่าง",
+DlgSelectBtnSetValue : "เลือà¸à¹€à¸›à¹‡à¸™à¸„่าเริ่มต้น",
+DlgSelectBtnDelete : "ลบ",
+
+// Textarea Dialog
+DlgTextareaName : "ชื่อ",
+DlgTextareaCols : "สดมภ์",
+DlgTextareaRows : "à¹à¸–ว",
+
+// Text Field Dialog
+DlgTextName : "ชื่อ",
+DlgTextValue : "ค่าตัวà¹à¸›à¸£",
+DlgTextCharWidth : "ความà¸à¸§à¹‰à¸²à¸‡",
+DlgTextMaxChars : "จำนวนตัวอัà¸à¸©à¸£à¸ªà¸¹à¸‡à¸ªà¸¸à¸”",
+DlgTextType : "ชนิด",
+DlgTextTypeText : "ข้อความ",
+DlgTextTypePass : "รหัสผ่าน",
+
+// Hidden Field Dialog
+DlgHiddenName : "ชื่อ",
+DlgHiddenValue : "ค่าตัวà¹à¸›à¸£",
+
+// Bulleted List Dialog
+BulletedListProp : "คุณสมบัติของ บูลเล็ตลิสต์",
+NumberedListProp : "คุณสมบัติของ นัมเบอร์ลิสต์",
+DlgLstStart : "Start", //MISSING
+DlgLstType : "ชนิด",
+DlgLstTypeCircle : "รูปวงà¸à¸¥à¸¡",
+DlgLstTypeDisc : "Disc", //MISSING
+DlgLstTypeSquare : "รูปสี่เหลี่ยม",
+DlgLstTypeNumbers : "หมายเลข (1, 2, 3)",
+DlgLstTypeLCase : "ตัวพิมพ์เล็ภ(a, b, c)",
+DlgLstTypeUCase : "ตัวพิมพ์ใหà¸à¹ˆ (A, B, C)",
+DlgLstTypeSRoman : "เลขโรมันพิมพ์เล็ภ(i, ii, iii)",
+DlgLstTypeLRoman : "เลขโรมันพิมพ์ใหà¸à¹ˆ (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "ลัà¸à¸©à¸“ะทั่วไปของเอà¸à¸ªà¸²à¸£",
+DlgDocBackTab : "พื้นหลัง",
+DlgDocColorsTab : "สีà¹à¸¥à¸°à¸£à¸°à¸¢à¸°à¸‚อบ",
+DlgDocMetaTab : "ข้อมูลสำหรับเสิร์ชเอนจิ้น",
+
+DlgDocPageTitle : "ชื่อไตเติ้ล",
+DlgDocLangDir : "à¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸ à¸²à¸©à¸²",
+DlgDocLangDirLTR : "จาà¸à¸‹à¹‰à¸²à¸¢à¹„ปขวา (LTR)",
+DlgDocLangDirRTL : "จาà¸à¸‚วาไปซ้าย (RTL)",
+DlgDocLangCode : "รหัสภาษา",
+DlgDocCharSet : "ชุดตัวอัà¸à¸©à¸£",
+DlgDocCharSetCE : "Central European",
+DlgDocCharSetCT : "Chinese Traditional (Big5)",
+DlgDocCharSetCR : "Cyrillic",
+DlgDocCharSetGR : "Greek",
+DlgDocCharSetJP : "Japanese",
+DlgDocCharSetKR : "Korean",
+DlgDocCharSetTR : "Turkish",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Western European",
+DlgDocCharSetOther : "ชุดตัวอัà¸à¸©à¸£à¸­à¸·à¹ˆà¸™à¹†",
+
+DlgDocDocType : "ประเภทของเอà¸à¸ªà¸²à¸£",
+DlgDocDocTypeOther : "ประเภทเอà¸à¸ªà¸²à¸£à¸­à¸·à¹ˆà¸™à¹†",
+DlgDocIncXHTML : "รวมเอา XHTML Declarations ไว้ด้วย",
+DlgDocBgColor : "สีพื้นหลัง",
+DlgDocBgImage : "ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)",
+DlgDocBgNoScroll : "พื้นหลังà¹à¸šà¸šà¹„ม่มีà¹à¸–บเลื่อน",
+DlgDocCText : "ข้อความ",
+DlgDocCLink : "ลิงค์",
+DlgDocCVisited : "ลิงค์ที่เคยคลิ้à¸à¹à¸¥à¹‰à¸§ Visited Link",
+DlgDocCActive : "ลิงค์ที่à¸à¸³à¸¥à¸±à¸‡à¸„ลิ้ภActive Link",
+DlgDocMargins : "ระยะขอบของหน้าเอà¸à¸ªà¸²à¸£",
+DlgDocMaTop : "ด้านบน",
+DlgDocMaLeft : "ด้านซ้าย",
+DlgDocMaRight : "ด้านขวา",
+DlgDocMaBottom : "ด้านล่าง",
+DlgDocMeIndex : "คำสำคัà¸à¸­à¸˜à¸´à¸šà¸²à¸¢à¹€à¸­à¸à¸ªà¸²à¸£ (คั่นคำด้วย คอมม่า)",
+DlgDocMeDescr : "ประโยคอธิบายเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹€à¸­à¸à¸ªà¸²à¸£",
+DlgDocMeAuthor : "ผู้สร้างเอà¸à¸ªà¸²à¸£",
+DlgDocMeCopy : "สงวนลิขสิทธิ์",
+DlgDocPreview : "ตัวอย่างหน้าเอà¸à¸ªà¸²à¸£",
+
+// Templates Dialog
+Templates : "เทมเพลต",
+DlgTemplatesTitle : "เทมเพลตของส่วนเนื้อหาเว็บไซต์",
+DlgTemplatesSelMsg : "à¸à¸£à¸¸à¸“าเลือภเทมเพลต เพื่อนำไปà¹à¸à¹‰à¹„ขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):",
+DlgTemplatesLoading : "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดรายà¸à¸²à¸£à¹€à¸—มเพลตทั้งหมด...",
+DlgTemplatesNoTpl : "(ยังไม่มีà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”เทมเพลต)",
+DlgTemplatesReplace : "à¹à¸—นที่เนื้อหาเว็บไซต์ที่เลือà¸",
+
+// About Dialog
+DlgAboutAboutTab : "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹‚ปรà¹à¸à¸£à¸¡",
+DlgAboutBrowserInfoTab : "โปรà¹à¸à¸£à¸¡à¸—่องเว็บที่ท่านใช้",
+DlgAboutLicenseTab : "ลิขสิทธิ์",
+DlgAboutVersion : "รุ่น",
+DlgAboutInfo : "For further information go to", //MISSING
+
+// Div Dialog
+DlgDivGeneralTab : "General", //MISSING
+DlgDivAdvancedTab : "Advanced", //MISSING
+DlgDivStyle : "Style", //MISSING
+DlgDivInlineStyle : "Inline Style" //MISSING
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/tr.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/tr.js
new file mode 100644
index 0000000..666be28
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/tr.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Turkish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Araç Çubuğunu Kapat",
+ToolbarExpand : "Araç Çubuğunu Aç",
+
+// Toolbar Items and Context Menu
+Save : "Kaydet",
+NewPage : "Yeni Sayfa",
+Preview : "Ön İzleme",
+Cut : "Kes",
+Copy : "Kopyala",
+Paste : "Yapıştır",
+PasteText : "Düzyazı Olarak Yapıştır",
+PasteWord : "Word'den Yapıştır",
+Print : "Yazdır",
+SelectAll : "Tümünü Seç",
+RemoveFormat : "Biçimi Kaldır",
+InsertLinkLbl : "Köprü",
+InsertLink : "Köprü Ekle/Düzenle",
+RemoveLink : "Köprü Kaldır",
+VisitLink : "Köprü Aç",
+Anchor : "Çapa Ekle/Düzenle",
+AnchorDelete : "Çapa Sil",
+InsertImageLbl : "Resim",
+InsertImage : "Resim Ekle/Düzenle",
+InsertFlashLbl : "Flash",
+InsertFlash : "Flash Ekle/Düzenle",
+InsertTableLbl : "Tablo",
+InsertTable : "Tablo Ekle/Düzenle",
+InsertLineLbl : "Satır",
+InsertLine : "Yatay Satır Ekle",
+InsertSpecialCharLbl: "Özel Karakter",
+InsertSpecialChar : "Özel Karakter Ekle",
+InsertSmileyLbl : "Ä°fade",
+InsertSmiley : "Ä°fade Ekle",
+About : "FCKeditor Hakkında",
+Bold : "Kalın",
+Italic : "Ä°talik",
+Underline : "Altı Çizgili",
+StrikeThrough : "Üstü Çizgili",
+Subscript : "Alt Simge",
+Superscript : "Ãœst Simge",
+LeftJustify : "Sola Dayalı",
+CenterJustify : "Ortalanmış",
+RightJustify : "Sağa Dayalı",
+BlockJustify : "İki Kenara Yaslanmış",
+DecreaseIndent : "Sekme Azalt",
+IncreaseIndent : "Sekme Arttır",
+Blockquote : "Blok OluÅŸtur",
+CreateDiv : "Div Ekle",
+EditDiv : "Div Düzenle",
+DeleteDiv : "Div Sil",
+Undo : "Geri Al",
+Redo : "Tekrarla",
+NumberedListLbl : "Numaralı Liste",
+NumberedList : "Numaralı Liste Ekle/Kaldır",
+BulletedListLbl : "Simgeli Liste",
+BulletedList : "Simgeli Liste Ekle/Kaldır",
+ShowTableBorders : "Tablo Kenarlarını Göster",
+ShowDetails : "Detayları Göster",
+Style : "Biçem",
+FontFormat : "Biçim",
+Font : "Yazı Türü",
+FontSize : "Boyut",
+TextColor : "Yazı Rengi",
+BGColor : "Arka Renk",
+Source : "Kaynak",
+Find : "Bul",
+Replace : "DeÄŸiÅŸtir",
+SpellCheck : "Yazım Denetimi",
+UniversalKeyboard : "Evrensel Klavye",
+PageBreakLbl : "Sayfa sonu",
+PageBreak : "Sayfa Sonu Ekle",
+
+Form : "Form",
+Checkbox : "Onay Kutusu",
+RadioButton : "Seçenek Düğmesi",
+TextField : "Metin GiriÅŸi",
+Textarea : "Çok Satırlı Metin",
+HiddenField : "Gizli Veri",
+Button : "Düğme",
+SelectionField : "Seçim Menüsü",
+ImageButton : "Resimli Düğme",
+
+FitWindow : "Düzenleyici boyutunu büyüt",
+ShowBlocks : "Blokları Göster",
+
+// Context Menu
+EditLink : "Köprü Düzenle",
+CellCM : "Hücre",
+RowCM : "Satır",
+ColumnCM : "Sütun",
+InsertRowAfter : "Satır Ekle - Sonra",
+InsertRowBefore : "Satır Ekle - Önce",
+DeleteRows : "Satır Sil",
+InsertColumnAfter : "Kolon Ekle - Sonra",
+InsertColumnBefore : "Kolon Ekle - Önce",
+DeleteColumns : "Sütun Sil",
+InsertCellAfter : "Hücre Ekle - Sonra",
+InsertCellBefore : "Hücre Ekle - Önce",
+DeleteCells : "Hücre Sil",
+MergeCells : "Hücreleri Birleştir",
+MergeRight : "BirleÅŸtir - SaÄŸdaki Ä°le ",
+MergeDown : "Birleştir - Aşağıdaki İle ",
+HorizontalSplitCell : "Hücreyi Yatay Böl",
+VerticalSplitCell : "Hücreyi Dikey Böl",
+TableDelete : "Tabloyu Sil",
+CellProperties : "Hücre Özellikleri",
+TableProperties : "Tablo Özellikleri",
+ImageProperties : "Resim Özellikleri",
+FlashProperties : "Flash Özellikleri",
+
+AnchorProp : "Çapa Özellikleri",
+ButtonProp : "Düğme Özellikleri",
+CheckboxProp : "Onay Kutusu Özellikleri",
+HiddenFieldProp : "Gizli Veri Özellikleri",
+RadioButtonProp : "Seçenek Düğmesi Özellikleri",
+ImageButtonProp : "Resimli Düğme Özellikleri",
+TextFieldProp : "Metin Girişi Özellikleri",
+SelectionFieldProp : "Seçim Menüsü Özellikleri",
+TextareaProp : "Çok Satırlı Metin Özellikleri",
+FormProp : "Form Özellikleri",
+
+FontFormats : "Normal;Biçimli;Adres;Başlık 1;Başlık 2;Başlık 3;Başlık 4;Başlık 5;Başlık 6;Paragraf (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "XHTML işleniyor. Lütfen bekleyin...",
+Done : "Bitti",
+PasteWordConfirm : "Yapıştırdığınız yazı Word'den gelmişe benziyor. Yapıştırmadan önce gereksiz eklentileri silmek ister misiniz?",
+NotCompatiblePaste : "Bu komut Internet Explorer 5.5 ve ileriki sürümleri için mevcuttur. Temizlenmeden yapıştırılmasını ister misiniz ?",
+UnknownToolbarItem : "Bilinmeyen araç çubugu öğesi \"%1\"",
+UnknownCommand : "Bilinmeyen komut \"%1\"",
+NotImplemented : "Komut uyarlanamadı",
+UnknownToolbarSet : "\"%1\" araç çubuğu öğesi mevcut değil",
+NoActiveX : "Kullandığınız tarayıcının güvenlik ayarları bazı özelliklerin kullanılmasını engelliyor. Bu özelliklerin çalışması için \"Run ActiveX controls and plug-ins (Activex ve eklentileri çalıştır)\" seçeneğinin aktif yapılması gerekiyor. Kullanılamayan eklentiler ve hatalar konusunda daha fazla bilgi sahibi olun.",
+BrowseServerBlocked : "Kaynak tarayıcısı açılamadı. Tüm \"popup blocker\" programlarının devre dışı olduğundan emin olun. (Yahoo toolbar, Msn toolbar, Google toolbar gibi)",
+DialogBlocked : "Diyalog açmak mümkün olmadı. Tüm \"Popup Blocker\" programlarının devre dışı olduğundan emin olun.",
+VisitLinkBlocked : "Yeni pencere açmak mümkün olmadı. Tüm \"Popup Blocker\" programlarının devre dışı olduğundan emin olun",
+
+// Dialogs
+DlgBtnOK : "Tamam",
+DlgBtnCancel : "Ä°ptal",
+DlgBtnClose : "Kapat",
+DlgBtnBrowseServer : "Sunucuyu Gez",
+DlgAdvancedTag : "GeliÅŸmiÅŸ",
+DlgOpOther : "<DiÄŸer>",
+DlgInfoTab : "Bilgi",
+DlgAlertUrl : "Lütfen URL girin",
+
+// General Dialogs Labels
+DlgGenNotSet : "<tanımlanmamış>",
+DlgGenId : "Kimlik",
+DlgGenLangDir : "Dil Yönü",
+DlgGenLangDirLtr : "Soldan SaÄŸa (LTR)",
+DlgGenLangDirRtl : "SaÄŸdan Sola (RTL)",
+DlgGenLangCode : "Dil Kodlaması",
+DlgGenAccessKey : "EriÅŸim TuÅŸu",
+DlgGenName : "Ad",
+DlgGenTabIndex : "Sekme Ä°ndeksi",
+DlgGenLongDescr : "Uzun Tanımlı URL",
+DlgGenClass : "Biçem Sayfası Sınıfları",
+DlgGenTitle : "Danışma Başlığı",
+DlgGenContType : "Danışma İçerik Türü",
+DlgGenLinkCharset : "Bağlı Kaynak Karakter Gurubu",
+DlgGenStyle : "Biçem",
+
+// Image Dialog
+DlgImgTitle : "Resim Özellikleri",
+DlgImgInfoTab : "Resim Bilgisi",
+DlgImgBtnUpload : "Sunucuya Yolla",
+DlgImgURL : "URL",
+DlgImgUpload : "Karşıya Yükle",
+DlgImgAlt : "Alternatif Yazı",
+DlgImgWidth : "GeniÅŸlik",
+DlgImgHeight : "Yükseklik",
+DlgImgLockRatio : "Oranı Kilitle",
+DlgBtnResetSize : "Boyutu Başa Döndür",
+DlgImgBorder : "Kenar",
+DlgImgHSpace : "Yatay BoÅŸluk",
+DlgImgVSpace : "Dikey BoÅŸluk",
+DlgImgAlign : "Hizalama",
+DlgImgAlignLeft : "Sol",
+DlgImgAlignAbsBottom: "Tam Altı",
+DlgImgAlignAbsMiddle: "Tam Ortası",
+DlgImgAlignBaseline : "Taban Çizgisi",
+DlgImgAlignBottom : "Alt",
+DlgImgAlignMiddle : "Orta",
+DlgImgAlignRight : "SaÄŸ",
+DlgImgAlignTextTop : "Yazı Tepeye",
+DlgImgAlignTop : "Tepe",
+DlgImgPreview : "Ön İzleme",
+DlgImgAlertUrl : "Lütfen resmin URL'sini yazınız",
+DlgImgLinkTab : "Köprü",
+
+// Flash Dialog
+DlgFlashTitle : "Flash Özellikleri",
+DlgFlashChkPlay : "Otomatik Oynat",
+DlgFlashChkLoop : "Döngü",
+DlgFlashChkMenu : "Flash Menüsünü Kullan",
+DlgFlashScale : "Boyutlandır",
+DlgFlashScaleAll : "Hepsini Göster",
+DlgFlashScaleNoBorder : "Kenar Yok",
+DlgFlashScaleFit : "Tam Sığdır",
+
+// Link Dialog
+DlgLnkWindowTitle : "Köprü",
+DlgLnkInfoTab : "Köprü Bilgisi",
+DlgLnkTargetTab : "Hedef",
+
+DlgLnkType : "Köprü Türü",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Bu sayfada çapa",
+DlgLnkTypeEMail : "E-Posta",
+DlgLnkProto : "Protokol",
+DlgLnkProtoOther : "<diÄŸer>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Çapa Seç",
+DlgLnkAnchorByName : "Çapa Adı ile",
+DlgLnkAnchorById : "Eleman Kimlik Numarası ile",
+DlgLnkNoAnchors : "(Bu belgede hiç çapa yok)",
+DlgLnkEMail : "E-Posta Adresi",
+DlgLnkEMailSubject : "Ä°leti Konusu",
+DlgLnkEMailBody : "İleti Gövdesi",
+DlgLnkUpload : "Karşıya Yükle",
+DlgLnkBtnUpload : "Sunucuya Gönder",
+
+DlgLnkTarget : "Hedef",
+DlgLnkTargetFrame : "<çerçeve>",
+DlgLnkTargetPopup : "<yeni açılan pencere>",
+DlgLnkTargetBlank : "Yeni Pencere(_blank)",
+DlgLnkTargetParent : "Anne Pencere (_parent)",
+DlgLnkTargetSelf : "Kendi Penceresi (_self)",
+DlgLnkTargetTop : "En Ãœst Pencere (_top)",
+DlgLnkTargetFrameName : "Hedef Çerçeve Adı",
+DlgLnkPopWinName : "Yeni Açılan Pencere Adı",
+DlgLnkPopWinFeat : "Yeni Açılan Pencere Özellikleri",
+DlgLnkPopResize : "Boyutlandırılabilir",
+DlgLnkPopLocation : "Yer Çubuğu",
+DlgLnkPopMenu : "Menü Çubuğu",
+DlgLnkPopScroll : "Kaydırma Çubukları",
+DlgLnkPopStatus : "Durum Çubuğu",
+DlgLnkPopToolbar : "Araç Çubuğu",
+DlgLnkPopFullScrn : "Tam Ekran (IE)",
+DlgLnkPopDependent : "Bağımlı (Netscape)",
+DlgLnkPopWidth : "GeniÅŸlik",
+DlgLnkPopHeight : "Yükseklik",
+DlgLnkPopLeft : "Sola Göre Konum",
+DlgLnkPopTop : "Yukarıya Göre Konum",
+
+DlnLnkMsgNoUrl : "Lütfen köprü URL'sini yazın",
+DlnLnkMsgNoEMail : "Lütfen E-posta adresini yazın",
+DlnLnkMsgNoAnchor : "Lütfen bir çapa seçin",
+DlnLnkMsgInvPopName : "Açılır pencere adı abecesel bir karakterle başlamalı ve boşluk içermemelidir",
+
+// Color Dialog
+DlgColorTitle : "Renk Seç",
+DlgColorBtnClear : "Temizle",
+DlgColorHighlight : "Vurgula",
+DlgColorSelected : "Seçilmiş",
+
+// Smiley Dialog
+DlgSmileyTitle : "Ä°fade Ekle",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Özel Karakter Seç",
+
+// Table Dialog
+DlgTableTitle : "Tablo Özellikleri",
+DlgTableRows : "Satırlar",
+DlgTableColumns : "Sütunlar",
+DlgTableBorder : "Kenar Kalınlığı",
+DlgTableAlign : "Hizalama",
+DlgTableAlignNotSet : "<Tanımlanmamış>",
+DlgTableAlignLeft : "Sol",
+DlgTableAlignCenter : "Merkez",
+DlgTableAlignRight : "SaÄŸ",
+DlgTableWidth : "GeniÅŸlik",
+DlgTableWidthPx : "piksel",
+DlgTableWidthPc : "yüzde",
+DlgTableHeight : "Yükseklik",
+DlgTableCellSpace : "Izgara kalınlığı",
+DlgTableCellPad : "Izgara yazı arası",
+DlgTableCaption : "Başlık",
+DlgTableSummary : "Özet",
+DlgTableHeaders : "Başlıklar",
+DlgTableHeadersNone : "Yok",
+DlgTableHeadersColumn : "İlk Sütun",
+DlgTableHeadersRow : "İlk Satır",
+DlgTableHeadersBoth : "Her Ä°kisi",
+
+// Table Cell Dialog
+DlgCellTitle : "Hücre Özellikleri",
+DlgCellWidth : "GeniÅŸlik",
+DlgCellWidthPx : "piksel",
+DlgCellWidthPc : "yüzde",
+DlgCellHeight : "Yükseklik",
+DlgCellWordWrap : "Sözcük Kaydır",
+DlgCellWordWrapNotSet : "<Tanımlanmamış>",
+DlgCellWordWrapYes : "Evet",
+DlgCellWordWrapNo : "Hayır",
+DlgCellHorAlign : "Yatay Hizalama",
+DlgCellHorAlignNotSet : "<Tanımlanmamış>",
+DlgCellHorAlignLeft : "Sol",
+DlgCellHorAlignCenter : "Merkez",
+DlgCellHorAlignRight: "SaÄŸ",
+DlgCellVerAlign : "Dikey Hizalama",
+DlgCellVerAlignNotSet : "<Tanımlanmamış>",
+DlgCellVerAlignTop : "Tepe",
+DlgCellVerAlignMiddle : "Orta",
+DlgCellVerAlignBottom : "Alt",
+DlgCellVerAlignBaseline : "Taban Çizgisi",
+DlgCellType : "Hücre Tipi",
+DlgCellTypeData : "Veri",
+DlgCellTypeHeader : "Başlık",
+DlgCellRowSpan : "Satır Kapla",
+DlgCellCollSpan : "Sütun Kapla",
+DlgCellBackColor : "Arka Plan Rengi",
+DlgCellBorderColor : "Kenar Rengi",
+DlgCellBtnSelect : "Seç...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Bul ve DeÄŸiÅŸtir",
+
+// Find Dialog
+DlgFindTitle : "Bul",
+DlgFindFindBtn : "Bul",
+DlgFindNotFoundMsg : "Belirtilen yazı bulunamadı.",
+
+// Replace Dialog
+DlgReplaceTitle : "DeÄŸiÅŸtir",
+DlgReplaceFindLbl : "Aranan:",
+DlgReplaceReplaceLbl : "Bununla deÄŸiÅŸtir:",
+DlgReplaceCaseChk : "Büyük/küçük harf duyarlı",
+DlgReplaceReplaceBtn : "DeÄŸiÅŸtir",
+DlgReplaceReplAllBtn : "Tümünü Değiştir",
+DlgReplaceWordChk : "Kelimenin tamamı uysun",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl+X) tuşlarını kullanın.",
+PasteErrorCopy : "Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl+C) tuşlarını kullanın.",
+
+PasteAsText : "Düz Metin Olarak Yapıştır",
+PasteFromWord : "Word'den yapıştır",
+
+DlgPasteMsg2 : "Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.",
+DlgPasteSec : "Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..",
+DlgPasteIgnoreFont : "Yazı Tipi tanımlarını yoksay",
+DlgPasteRemoveStyles : "Biçem Tanımlarını çıkar",
+
+// Color Picker
+ColorAutomatic : "Otomatik",
+ColorMoreColors : "DiÄŸer renkler...",
+
+// Document Properties
+DocProps : "Belge Özellikleri",
+
+// Anchor Dialog
+DlgAnchorTitle : "Çapa Özellikleri",
+DlgAnchorName : "Çapa Adı",
+DlgAnchorErrorName : "Lütfen çapa için ad giriniz",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Sözlükte Yok",
+DlgSpellChangeTo : "Åžuna deÄŸiÅŸtir:",
+DlgSpellBtnIgnore : "Yoksay",
+DlgSpellBtnIgnoreAll : "Tümünü Yoksay",
+DlgSpellBtnReplace : "DeÄŸiÅŸtir",
+DlgSpellBtnReplaceAll : "Tümünü Değiştir",
+DlgSpellBtnUndo : "Geri Al",
+DlgSpellNoSuggestions : "- Öneri Yok -",
+DlgSpellProgress : "Yazım denetimi işlemde...",
+DlgSpellNoMispell : "Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı",
+DlgSpellNoChanges : "Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi",
+DlgSpellOneChange : "Yazım denetimi tamamlandı: Bir kelime değiştirildi",
+DlgSpellManyChanges : "Yazım denetimi tamamlandı: %1 kelime değiştirildi",
+
+IeSpellDownload : "Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?",
+
+// Button Dialog
+DlgButtonText : "Metin (DeÄŸer)",
+DlgButtonType : "Tip",
+DlgButtonTypeBtn : "Düğme",
+DlgButtonTypeSbm : "Gönder",
+DlgButtonTypeRst : "Sıfırla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Ad",
+DlgCheckboxValue : "DeÄŸer",
+DlgCheckboxSelected : "Seçili",
+
+// Form Dialog
+DlgFormName : "Ad",
+DlgFormAction : "Ä°ÅŸlem",
+DlgFormMethod : "Yöntem",
+
+// Select Field Dialog
+DlgSelectName : "Ad",
+DlgSelectValue : "DeÄŸer",
+DlgSelectSize : "Boyut",
+DlgSelectLines : "satır",
+DlgSelectChkMulti : "Çoklu seçime izin ver",
+DlgSelectOpAvail : "Mevcut Seçenekler",
+DlgSelectOpText : "Metin",
+DlgSelectOpValue : "DeÄŸer",
+DlgSelectBtnAdd : "Ekle",
+DlgSelectBtnModify : "Düzenle",
+DlgSelectBtnUp : "Yukarı",
+DlgSelectBtnDown : "Aşağı",
+DlgSelectBtnSetValue : "Seçili değer olarak ata",
+DlgSelectBtnDelete : "Sil",
+
+// Textarea Dialog
+DlgTextareaName : "Ad",
+DlgTextareaCols : "Sütunlar",
+DlgTextareaRows : "Satırlar",
+
+// Text Field Dialog
+DlgTextName : "Ad",
+DlgTextValue : "DeÄŸer",
+DlgTextCharWidth : "Karakter GeniÅŸliÄŸi",
+DlgTextMaxChars : "En Fazla Karakter",
+DlgTextType : "Tür",
+DlgTextTypeText : "Metin",
+DlgTextTypePass : "Parola",
+
+// Hidden Field Dialog
+DlgHiddenName : "Ad",
+DlgHiddenValue : "DeÄŸer",
+
+// Bulleted List Dialog
+BulletedListProp : "Simgeli Liste Özellikleri",
+NumberedListProp : "Numaralı Liste Özellikleri",
+DlgLstStart : "Başlangıç",
+DlgLstType : "Tip",
+DlgLstTypeCircle : "Çember",
+DlgLstTypeDisc : "Disk",
+DlgLstTypeSquare : "Kare",
+DlgLstTypeNumbers : "Sayılar (1, 2, 3)",
+DlgLstTypeLCase : "Küçük Harfler (a, b, c)",
+DlgLstTypeUCase : "Büyük Harfler (A, B, C)",
+DlgLstTypeSRoman : "Küçük Romen Rakamları (i, ii, iii)",
+DlgLstTypeLRoman : "Büyük Romen Rakamları (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Genel",
+DlgDocBackTab : "Arka Plan",
+DlgDocColorsTab : "Renkler ve Kenar Boşlukları",
+DlgDocMetaTab : "Tanım Bilgisi (Meta)",
+
+DlgDocPageTitle : "Sayfa Başlığı",
+DlgDocLangDir : "Dil Yönü",
+DlgDocLangDirLTR : "Soldan SaÄŸa (LTR)",
+DlgDocLangDirRTL : "SaÄŸdan Sola (RTL)",
+DlgDocLangCode : "Dil Kodu",
+DlgDocCharSet : "Karakter Kümesi Kodlaması",
+DlgDocCharSetCE : "Orta Avrupa",
+DlgDocCharSetCT : "Geleneksel Çince (Big5)",
+DlgDocCharSetCR : "Kiril",
+DlgDocCharSetGR : "Yunanca",
+DlgDocCharSetJP : "Japonca",
+DlgDocCharSetKR : "Korece",
+DlgDocCharSetTR : "Türkçe",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Batı Avrupa",
+DlgDocCharSetOther : "Diğer Karakter Kümesi Kodlaması",
+
+DlgDocDocType : "Belge Türü Başlığı",
+DlgDocDocTypeOther : "Diğer Belge Türü Başlığı",
+DlgDocIncXHTML : "XHTML Bildirimlerini Dahil Et",
+DlgDocBgColor : "Arka Plan Rengi",
+DlgDocBgImage : "Arka Plan Resim URLsi",
+DlgDocBgNoScroll : "Sabit Arka Plan",
+DlgDocCText : "Metin",
+DlgDocCLink : "Köprü",
+DlgDocCVisited : "Ziyaret Edilmiş Köprü",
+DlgDocCActive : "Etkin Köprü",
+DlgDocMargins : "Kenar Boşlukları",
+DlgDocMaTop : "Tepe",
+DlgDocMaLeft : "Sol",
+DlgDocMaRight : "SaÄŸ",
+DlgDocMaBottom : "Alt",
+DlgDocMeIndex : "Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmış)",
+DlgDocMeDescr : "Belge Tanımı",
+DlgDocMeAuthor : "Yazar",
+DlgDocMeCopy : "Telif",
+DlgDocPreview : "Ön İzleme",
+
+// Templates Dialog
+Templates : "Åžablonlar",
+DlgTemplatesTitle : "İçerik Şablonları",
+DlgTemplatesSelMsg : "Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):",
+DlgTemplatesLoading : "Şablon listesi yüklenmekte. Lütfen bekleyiniz...",
+DlgTemplatesNoTpl : "(Belirli bir şablon seçilmedi)",
+DlgTemplatesReplace : "Mevcut içerik ile değiştir",
+
+// About Dialog
+DlgAboutAboutTab : "Hakkında",
+DlgAboutBrowserInfoTab : "Gezgin Bilgisi",
+DlgAboutLicenseTab : "Lisans",
+DlgAboutVersion : "sürüm",
+DlgAboutInfo : "Daha fazla bilgi için:",
+
+// Div Dialog
+DlgDivGeneralTab : "Genel",
+DlgDivAdvancedTab : "GeliÅŸmiÅŸ",
+DlgDivStyle : "Sitil",
+DlgDivInlineStyle : "Satıriçi Sitil"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/uk.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/uk.js
new file mode 100644
index 0000000..2ddec75
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/uk.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Ukrainian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Згорнути панель інÑтрументів",
+ToolbarExpand : "Розгорнути панель інÑтрументів",
+
+// Toolbar Items and Context Menu
+Save : "Зберегти",
+NewPage : "Ðова Ñторінка",
+Preview : "Попередній переглÑд",
+Cut : "Вирізати",
+Copy : "Копіювати",
+Paste : "Ð’Ñтавити",
+PasteText : "Ð’Ñтавити тільки текÑÑ‚",
+PasteWord : "Ð’Ñтавити з Word",
+Print : "Друк",
+SelectAll : "Виділити вÑе",
+RemoveFormat : "Прибрати форматуваннÑ",
+InsertLinkLbl : "ПоÑиланнÑ",
+InsertLink : "Ð’Ñтавити/Редагувати поÑиланнÑ",
+RemoveLink : "Знищити поÑиланнÑ",
+VisitLink : "Відкрити поÑиланнÑ",
+Anchor : "Ð’Ñтавити/Редагувати Ñкір",
+AnchorDelete : "Видалити Ñкір",
+InsertImageLbl : "ЗображеннÑ",
+InsertImage : "Ð’Ñтавити/Редагувати зображеннÑ",
+InsertFlashLbl : "Flash",
+InsertFlash : "Ð’Ñтавити/Редагувати Flash",
+InsertTableLbl : "ТаблицÑ",
+InsertTable : "Ð’Ñтавити/Редагувати таблицю",
+InsertLineLbl : "ЛініÑ",
+InsertLine : "Ð’Ñтавити горизонтальну лінію",
+InsertSpecialCharLbl: "Спеціальний Ñимвол",
+InsertSpecialChar : "Ð’Ñтавити Ñпеціальний Ñимвол",
+InsertSmileyLbl : "Смайлик",
+InsertSmiley : "Ð’Ñтавити Ñмайлик",
+About : "Про FCKeditor",
+Bold : "Жирний",
+Italic : "КурÑив",
+Underline : "ПідкреÑлений",
+StrikeThrough : "ЗакреÑлений",
+Subscript : "ПідрÑдковий індекÑ",
+Superscript : "ÐадрÑдковий индекÑ",
+LeftJustify : "По лівому краю",
+CenterJustify : "По центру",
+RightJustify : "По правому краю",
+BlockJustify : "По ширині",
+DecreaseIndent : "Зменшити відÑтуп",
+IncreaseIndent : "Збільшити відÑтуп",
+Blockquote : "Цитата",
+CreateDiv : "Створити Div контейнер",
+EditDiv : "Редагувати Div контейнер",
+DeleteDiv : "Видалити Div контейнер",
+Undo : "Повернути",
+Redo : "Повторити",
+NumberedListLbl : "Ðумерований ÑпиÑок",
+NumberedList : "Ð’Ñтавити/Видалити нумерований ÑпиÑок",
+BulletedListLbl : "Маркований ÑпиÑок",
+BulletedList : "Ð’Ñтавити/Видалити маркований ÑпиÑок",
+ShowTableBorders : "Показати бордюри таблиці",
+ShowDetails : "Показати деталі",
+Style : "Стиль",
+FontFormat : "ФорматуваннÑ",
+Font : "Шрифт",
+FontSize : "Розмір",
+TextColor : "Колір текÑту",
+BGColor : "Колір фону",
+Source : "Джерело",
+Find : "Пошук",
+Replace : "Заміна",
+SpellCheck : "Перевірити орфографію",
+UniversalKeyboard : "УніверÑальна клавіатура",
+PageBreakLbl : "Розривши Ñторінки",
+PageBreak : "Ð’Ñтавити розривши Ñторінки",
+
+Form : "Форма",
+Checkbox : "Флагова кнопка",
+RadioButton : "Кнопка вибору",
+TextField : "ТекÑтове поле",
+Textarea : "ТекÑтова облаÑÑ‚ÑŒ",
+HiddenField : "Приховане поле",
+Button : "Кнопка",
+SelectionField : "СпиÑок",
+ImageButton : "Кнопка із зображеннÑм",
+
+FitWindow : "Розвернути вікно редактора",
+ShowBlocks : "Показувати блоки",
+
+// Context Menu
+EditLink : "Ð’Ñтавити поÑиланнÑ",
+CellCM : "ОÑередок",
+RowCM : "РÑдок",
+ColumnCM : "Колонка",
+InsertRowAfter : "Ð’Ñтавити Ñ€Ñдок піÑлÑ",
+InsertRowBefore : "Ð’Ñтавити Ñ€Ñдок до",
+DeleteRows : "Видалити Ñтроки",
+InsertColumnAfter : "Ð’Ñтавити колонку піÑлÑ",
+InsertColumnBefore : "Ð’Ñтавити колонку до",
+DeleteColumns : "Видалити колонки",
+InsertCellAfter : "Ð’Ñтавити комірку піÑлÑ",
+InsertCellBefore : "Ð’Ñтавити комірку до",
+DeleteCells : "Видалити комірки",
+MergeCells : "Об'єднати комірки",
+MergeRight : "Об'єднати зправа",
+MergeDown : "Об'єднати до низу",
+HorizontalSplitCell : "Розділити комірку по горизонталі",
+VerticalSplitCell : "Розділити комірку по вертикалі",
+TableDelete : "Видалити таблицю",
+CellProperties : "ВлаÑтивоÑÑ‚Ñ– комірки",
+TableProperties : "ВлаÑтивоÑÑ‚Ñ– таблиці",
+ImageProperties : "ВлаÑтивоÑÑ‚Ñ– зображеннÑ",
+FlashProperties : "ВлаÑтивоÑÑ‚Ñ– Flash",
+
+AnchorProp : "ВлаÑтивоÑÑ‚Ñ– ÑкорÑ",
+ButtonProp : "ВлаÑтивоÑÑ‚Ñ– кнопки",
+CheckboxProp : "ВлаÑтивоÑÑ‚Ñ– флагової кнопки",
+HiddenFieldProp : "ВлаÑтивоÑÑ‚Ñ– прихованого полÑ",
+RadioButtonProp : "ВлаÑтивоÑÑ‚Ñ– кнопки вибору",
+ImageButtonProp : "ВлаÑтивоÑÑ‚Ñ– кнопки із зображеннÑм",
+TextFieldProp : "ВлаÑтивоÑÑ‚Ñ– текÑтового полÑ",
+SelectionFieldProp : "ВлаÑтивоÑÑ‚Ñ– ÑпиÑку",
+TextareaProp : "ВлаÑтивоÑÑ‚Ñ– текÑтової облаÑÑ‚Ñ–",
+FormProp : "ВлаÑтивоÑÑ‚Ñ– форми",
+
+FontFormats : "Ðормальний;Форматований;ÐдреÑа;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Ðормальний (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Обробка XHTML. Зачекайте, будь лаÑка...",
+Done : "Зроблено",
+PasteWordConfirm : "ТекÑÑ‚, що ви хочете вÑтавити, Ñхожий на копійований з Word. Ви хочете очиÑтити його перед вÑтавкою?",
+NotCompatiblePaste : "Ð¦Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° доÑтупна Ð´Ð»Ñ Internet Explorer верÑÑ–Ñ— 5.5 або вище. Ви хочете вÑтавити без очищеннÑ?",
+UnknownToolbarItem : "Ðевідомий елемент панелі інÑтрументів \"%1\"",
+UnknownCommand : "Ðевідоме ім'Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ \"%1\"",
+NotImplemented : "Команда не реалізована",
+UnknownToolbarSet : "Панель інÑтрументів \"%1\" не Ñ–Ñнує",
+NoActiveX : "ÐаÑтройки безпеки вашого браузера можуть обмежувати деÑкі влаÑтивоÑÑ‚Ñ– редактора. Ви повинні включити опцію \"ЗапуÑкати елементи ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ ACTIVEX Ñ– плугіни\". Ви можете бачити помилки Ñ– помічати відÑутніÑÑ‚ÑŒ можливоÑтей.",
+BrowseServerBlocked : "РеÑурÑи браузера не можуть бути відкриті. Перевірте що Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñпливаючих вікон вимкнені.",
+DialogBlocked : "Ðе можливо відкрити вікно діалогу. Перевірте що Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñпливаючих вікон вимкнені.",
+VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING
+
+// Dialogs
+DlgBtnOK : "ОК",
+DlgBtnCancel : "СкаÑувати",
+DlgBtnClose : "Зачинити",
+DlgBtnBrowseServer : "ПередивитиÑÑ Ð½Ð° Ñервері",
+DlgAdvancedTag : "Розширений",
+DlgOpOther : "<Інше>",
+DlgInfoTab : "Інфо",
+DlgAlertUrl : "Ð’Ñтавте, будь-лаÑка, URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<не визначено>",
+DlgGenId : "Ідентифікатор",
+DlgGenLangDir : "ÐапрÑмок мови",
+DlgGenLangDirLtr : "Зліва на право (LTR)",
+DlgGenLangDirRtl : "Зправа на ліво (RTL)",
+DlgGenLangCode : "Мова",
+DlgGenAccessKey : "ГарÑча клавіша",
+DlgGenName : "Им'Ñ",
+DlgGenTabIndex : "ПоÑлідовніÑÑ‚ÑŒ переходу",
+DlgGenLongDescr : "Довгий Ð¾Ð¿Ð¸Ñ URL",
+DlgGenClass : "ÐšÐ»Ð°Ñ CSS",
+DlgGenTitle : "Заголовок",
+DlgGenContType : "Тип вміÑту",
+DlgGenLinkCharset : "Кодировка",
+DlgGenStyle : "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle : "ВлаÑтивоÑÑ‚Ñ– зображеннÑ",
+DlgImgInfoTab : "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ изображении",
+DlgImgBtnUpload : "ÐадіÑлати на Ñервер",
+DlgImgURL : "URL",
+DlgImgUpload : "Закачати",
+DlgImgAlt : "Ðльтернативний текÑÑ‚",
+DlgImgWidth : "Ширина",
+DlgImgHeight : "ВиÑота",
+DlgImgLockRatio : "Зберегти пропорції",
+DlgBtnResetSize : "Скинути розмір",
+DlgImgBorder : "Бордюр",
+DlgImgHSpace : "Горизонтальний відÑтуп",
+DlgImgVSpace : "Вертикальний відÑтуп",
+DlgImgAlign : "ВирівнюваннÑ",
+DlgImgAlignLeft : "По лівому краю",
+DlgImgAlignAbsBottom: "ÐÐ±Ñ Ð¿Ð¾ низу",
+DlgImgAlignAbsMiddle: "ÐÐ±Ñ Ð¿Ð¾ Ñередині",
+DlgImgAlignBaseline : "По базовій лінії",
+DlgImgAlignBottom : "По низу",
+DlgImgAlignMiddle : "По Ñередині",
+DlgImgAlignRight : "По правому краю",
+DlgImgAlignTextTop : "ТекÑÑ‚ на верху",
+DlgImgAlignTop : "По верху",
+DlgImgPreview : "Попередній переглÑд",
+DlgImgAlertUrl : "Будь лаÑка, введіть URL зображеннÑ",
+DlgImgLinkTab : "ПоÑиланнÑ",
+
+// Flash Dialog
+DlgFlashTitle : "ВлаÑтивоÑÑ‚Ñ– Flash",
+DlgFlashChkPlay : "Ðвто програваннÑ",
+DlgFlashChkLoop : "Зациклити",
+DlgFlashChkMenu : "Дозволити меню Flash",
+DlgFlashScale : "МаÑштаб",
+DlgFlashScaleAll : "Показати вÑÑ–",
+DlgFlashScaleNoBorder : "Без рамки",
+DlgFlashScaleFit : "ДійÑний розмір",
+
+// Link Dialog
+DlgLnkWindowTitle : "ПоÑиланнÑ",
+DlgLnkInfoTab : "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ð¾ÑиланнÑ",
+DlgLnkTargetTab : "Ціль",
+
+DlgLnkType : "Тип поÑиланнÑ",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Якір на цю Ñторінку",
+DlgLnkTypeEMail : "Эл. пошта",
+DlgLnkProto : "Протокол",
+DlgLnkProtoOther : "<інше>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Оберіть Ñкір",
+DlgLnkAnchorByName : "За ім'Ñм ÑкорÑ",
+DlgLnkAnchorById : "За ідентифікатором елемента",
+DlgLnkNoAnchors : "(Ðемає Ñкорів доÑтупних в цьому документі)",
+DlgLnkEMail : "ÐдреÑа ел. пошти",
+DlgLnkEMailSubject : "Тема лиÑта",
+DlgLnkEMailBody : "Тіло повідомленнÑ",
+DlgLnkUpload : "Закачати",
+DlgLnkBtnUpload : "ПереÑлати на Ñервер",
+
+DlgLnkTarget : "Ціль",
+DlgLnkTargetFrame : "<фрейм>",
+DlgLnkTargetPopup : "<Ñпливаюче вікно>",
+DlgLnkTargetBlank : "Ðове вікно (_blank)",
+DlgLnkTargetParent : "БатьківÑьке вікно (_parent)",
+DlgLnkTargetSelf : "Теж вікно (_self)",
+DlgLnkTargetTop : "Ðайвище вікно (_top)",
+DlgLnkTargetFrameName : "Ім'Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ фрейма",
+DlgLnkPopWinName : "Ім'Ñ Ñпливаючого вікна",
+DlgLnkPopWinFeat : "ВлаÑтивоÑÑ‚Ñ– Ñпливаючого вікна",
+DlgLnkPopResize : "ЗмінюєтьÑÑ Ð² розмірах",
+DlgLnkPopLocation : "Панель локації",
+DlgLnkPopMenu : "Панель меню",
+DlgLnkPopScroll : "ПолоÑи прокрутки",
+DlgLnkPopStatus : "Строка ÑтатуÑу",
+DlgLnkPopToolbar : "Панель інÑтрументів",
+DlgLnkPopFullScrn : "Повний екран (IE)",
+DlgLnkPopDependent : "Залежний (Netscape)",
+DlgLnkPopWidth : "Ширина",
+DlgLnkPopHeight : "ВиÑота",
+DlgLnkPopLeft : "ÐŸÐ¾Ð·Ð¸Ñ†Ñ–Ñ Ð·Ð»Ñ–Ð²Ð°",
+DlgLnkPopTop : "ÐŸÐ¾Ð·Ð¸Ñ†Ñ–Ñ Ð·Ð²ÐµÑ€Ñ…Ñƒ",
+
+DlnLnkMsgNoUrl : "Будь лаÑка, занеÑÑ–Ñ‚ÑŒ URL поÑиланнÑ",
+DlnLnkMsgNoEMail : "Будь лаÑка, занеÑÑ–Ñ‚ÑŒ Ð°Ð´Ñ€ÐµÑ Ñл. почты",
+DlnLnkMsgNoAnchor : "Будь лаÑка, оберіть Ñкір",
+DlnLnkMsgInvPopName : "Ðазва Ñпливаючого вікна повинна починатиÑÑ Ð±ÑƒÐºÐ²Ð¸ Ñ– не може міÑтити пропуÑків",
+
+// Color Dialog
+DlgColorTitle : "Оберіть колір",
+DlgColorBtnClear : "ОчиÑтити",
+DlgColorHighlight : "ПідÑвічений",
+DlgColorSelected : "Обраний",
+
+// Smiley Dialog
+DlgSmileyTitle : "Ð’Ñтавити Ñмайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Оберіть Ñпеціальний Ñимвол",
+
+// Table Dialog
+DlgTableTitle : "ВлаÑтивоÑÑ‚Ñ– таблиці",
+DlgTableRows : "Строки",
+DlgTableColumns : "Колонки",
+DlgTableBorder : "Розмір бордюра",
+DlgTableAlign : "ВирівнюваннÑ",
+DlgTableAlignNotSet : "<Ðе вÑÑ‚.>",
+DlgTableAlignLeft : "Зліва",
+DlgTableAlignCenter : "По центру",
+DlgTableAlignRight : "Зправа",
+DlgTableWidth : "Ширина",
+DlgTableWidthPx : "пікÑелів",
+DlgTableWidthPc : "відÑотків",
+DlgTableHeight : "ВиÑота",
+DlgTableCellSpace : "Проміжок (spacing)",
+DlgTableCellPad : "ВідÑтуп (padding)",
+DlgTableCaption : "Заголовок",
+DlgTableSummary : "Резюме",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "ВлаÑтивоÑÑ‚Ñ– комірки",
+DlgCellWidth : "Ширина",
+DlgCellWidthPx : "пікÑелів",
+DlgCellWidthPc : "відÑотків",
+DlgCellHeight : "ВиÑота",
+DlgCellWordWrap : "Ð—Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑта",
+DlgCellWordWrapNotSet : "<Ðе вÑÑ‚.>",
+DlgCellWordWrapYes : "Так",
+DlgCellWordWrapNo : "ÐÑ–",
+DlgCellHorAlign : "Горизонтальне вирівнюваннÑ",
+DlgCellHorAlignNotSet : "<Ðе вÑÑ‚.>",
+DlgCellHorAlignLeft : "Зліва",
+DlgCellHorAlignCenter : "По центру",
+DlgCellHorAlignRight: "Зправа",
+DlgCellVerAlign : "Вертикальное вирівнюваннÑ",
+DlgCellVerAlignNotSet : "<Ðе вÑÑ‚.>",
+DlgCellVerAlignTop : "Зверху",
+DlgCellVerAlignMiddle : "ПоÑередині",
+DlgCellVerAlignBottom : "Знизу",
+DlgCellVerAlignBaseline : "По базовій лінії",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Діапазон Ñтрок (span)",
+DlgCellCollSpan : "Діапазон колонок (span)",
+DlgCellBackColor : "Колір фона",
+DlgCellBorderColor : "Колір бордюра",
+DlgCellBtnSelect : "Оберіть...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Знайти і замінити",
+
+// Find Dialog
+DlgFindTitle : "Пошук",
+DlgFindFindBtn : "Пошук",
+DlgFindNotFoundMsg : "Вказаний текÑÑ‚ не знайдений.",
+
+// Replace Dialog
+DlgReplaceTitle : "Замінити",
+DlgReplaceFindLbl : "Шукати:",
+DlgReplaceReplaceLbl : "Замінити на:",
+DlgReplaceCaseChk : "Учитывать региÑÑ‚Ñ€",
+DlgReplaceReplaceBtn : "Замінити",
+DlgReplaceReplAllBtn : "Замінити вÑе",
+DlgReplaceWordChk : "Збіг цілих Ñлів",
+
+// Paste Operations / Dialog
+PasteErrorCut : "ÐаÑтройки безпеки вашого браузера не дозволÑÑŽÑ‚ÑŒ редактору автоматично виконувати операції вирізуваннÑ. Будь лаÑка, викориÑтовуйте клавіатуру Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ (Ctrl+X).",
+PasteErrorCopy : "ÐаÑтройки безпеки вашого браузера не дозволÑÑŽÑ‚ÑŒ редактору автоматично виконувати операції копіюваннÑ. Будь лаÑка, викориÑтовуйте клавіатуру Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ (Ctrl+C).",
+
+PasteAsText : "Ð’Ñтавити тільки текÑÑ‚",
+PasteFromWord : "Ð’Ñтавити з Word",
+
+DlgPasteMsg2 : "Будь-лаÑка, вÑтавте з буфера обміну в цю облаÑÑ‚ÑŒ, кориÑтуючиÑÑŒ комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натиÑніть <STRONG>OK</STRONG>.",
+DlgPasteSec : "Редактор не може отримати прÑмий доÑтуп до буферу обміну у зв'Ñзку з налаштуваннÑми вашого браузера. Вам потрібно вÑтавити інформацію повторно в це вікно.",
+DlgPasteIgnoreFont : "Ігнорувати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñ–Ð²",
+DlgPasteRemoveStyles : "Видалити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñтилів",
+
+// Color Picker
+ColorAutomatic : "Ðвтоматичний",
+ColorMoreColors : "Кольори...",
+
+// Document Properties
+DocProps : "ВлаÑтивоÑÑ‚Ñ– документа",
+
+// Anchor Dialog
+DlgAnchorTitle : "ВлаÑтивоÑÑ‚Ñ– ÑкорÑ",
+DlgAnchorName : "Ім'Ñ ÑкорÑ",
+DlgAnchorErrorName : "Будь лаÑка, занеÑÑ–Ñ‚ÑŒ ім'Ñ ÑкорÑ",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Ðе має в Ñловнику",
+DlgSpellChangeTo : "Замінити на",
+DlgSpellBtnIgnore : "Ігнорувати",
+DlgSpellBtnIgnoreAll : "Ігнорувати вÑе",
+DlgSpellBtnReplace : "Замінити",
+DlgSpellBtnReplaceAll : "Замінити вÑе",
+DlgSpellBtnUndo : "Ðазад",
+DlgSpellNoSuggestions : "- Ðемає припущень -",
+DlgSpellProgress : "ВиконуєтьÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° орфографії...",
+DlgSpellNoMispell : "Перевірку орфографії завершено: помилок не знайдено",
+DlgSpellNoChanges : "Перевірку орфографії завершено: жодне Ñлово не змінено",
+DlgSpellOneChange : "Перевірку орфографії завершено: змінено одно Ñлово",
+DlgSpellManyChanges : "Перевірку орфографії завершено: 1% Ñлів змінено",
+
+IeSpellDownload : "Модуль перевірки орфографії не вÑтановлено. Бажаєтн завантажити його зараз?",
+
+// Button Dialog
+DlgButtonText : "ТекÑÑ‚ (ЗначеннÑ)",
+DlgButtonType : "Тип",
+DlgButtonTypeBtn : "Кнопка",
+DlgButtonTypeSbm : "Відправити",
+DlgButtonTypeRst : "Скинути",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Ім'Ñ",
+DlgCheckboxValue : "ЗначеннÑ",
+DlgCheckboxSelected : "Обрана",
+
+// Form Dialog
+DlgFormName : "Ім'Ñ",
+DlgFormAction : "ДіÑ",
+DlgFormMethod : "Метод",
+
+// Select Field Dialog
+DlgSelectName : "Ім'Ñ",
+DlgSelectValue : "ЗначеннÑ",
+DlgSelectSize : "Розмір",
+DlgSelectLines : "лінії",
+DlgSelectChkMulti : "Дозволити Ð¾Ð±Ñ€Ð°Ð½Ð½Ñ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ¾Ñ… позицій",
+DlgSelectOpAvail : "ДоÑтупні варіанти",
+DlgSelectOpText : "ТекÑÑ‚",
+DlgSelectOpValue : "ЗначеннÑ",
+DlgSelectBtnAdd : "Добавити",
+DlgSelectBtnModify : "Змінити",
+DlgSelectBtnUp : "Вгору",
+DlgSelectBtnDown : "Вниз",
+DlgSelectBtnSetValue : "Ð’Ñтановити Ñк вибране значеннÑ",
+DlgSelectBtnDelete : "Видалити",
+
+// Textarea Dialog
+DlgTextareaName : "Ім'Ñ",
+DlgTextareaCols : "Колонки",
+DlgTextareaRows : "Строки",
+
+// Text Field Dialog
+DlgTextName : "Ім'Ñ",
+DlgTextValue : "ЗначеннÑ",
+DlgTextCharWidth : "Ширина",
+DlgTextMaxChars : "МакÑ. кіл-Ñ‚ÑŒ Ñимволів",
+DlgTextType : "Тип",
+DlgTextTypeText : "ТекÑÑ‚",
+DlgTextTypePass : "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName : "Ім'Ñ",
+DlgHiddenValue : "ЗначеннÑ",
+
+// Bulleted List Dialog
+BulletedListProp : "ВлаÑтивоÑÑ‚Ñ– маркованого ÑпиÑка",
+NumberedListProp : "ВлаÑтивоÑÑ‚Ñ– нумерованного ÑпиÑка",
+DlgLstStart : "Початок",
+DlgLstType : "Тип",
+DlgLstTypeCircle : "Коло",
+DlgLstTypeDisc : "ДиÑк",
+DlgLstTypeSquare : "Квадрат",
+DlgLstTypeNumbers : "Ðомери (1, 2, 3)",
+DlgLstTypeLCase : "Літери нижнього регіÑтра(a, b, c)",
+DlgLstTypeUCase : "Букви верхнього регіÑтра (A, B, C)",
+DlgLstTypeSRoman : "Малі римÑькі літери (i, ii, iii)",
+DlgLstTypeLRoman : "Великі римÑькі літери (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Загальні",
+DlgDocBackTab : "Заднє тло",
+DlgDocColorsTab : "Кольори та відÑтупи",
+DlgDocMetaTab : "Мета дані",
+
+DlgDocPageTitle : "Заголовок Ñторінки",
+DlgDocLangDir : "ÐапрÑмок текÑту",
+DlgDocLangDirLTR : "Зліва на право (LTR)",
+DlgDocLangDirRTL : "Зправа на лево (RTL)",
+DlgDocLangCode : "Код мови",
+DlgDocCharSet : "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ Ñимволів",
+DlgDocCharSetCE : "Центрально-європейÑька",
+DlgDocCharSetCT : "КитайÑька традиційна (Big5)",
+DlgDocCharSetCR : "КирилицÑ",
+DlgDocCharSetGR : "Грецька",
+DlgDocCharSetJP : "ЯпонÑька",
+DlgDocCharSetKR : "КорейÑька",
+DlgDocCharSetTR : "Турецька",
+DlgDocCharSetUN : "Юнікод (UTF-8)",
+DlgDocCharSetWE : "Західно-европейÑкаÑ",
+DlgDocCharSetOther : "Інше ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ Ñимволів",
+
+DlgDocDocType : "Заголовок типу документу",
+DlgDocDocTypeOther : "Інший заголовок типу документу",
+DlgDocIncXHTML : "Ввімкнути XHTML оголошеннÑ",
+DlgDocBgColor : "Колір тла",
+DlgDocBgImage : "URL Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð»Ð°",
+DlgDocBgNoScroll : "Тло без прокрутки",
+DlgDocCText : "ТекÑÑ‚",
+DlgDocCLink : "ПоÑиланнÑ",
+DlgDocCVisited : "Відвідане поÑиланнÑ",
+DlgDocCActive : "Ðктивне поÑиланнÑ",
+DlgDocMargins : "ВідÑтупи Ñторінки",
+DlgDocMaTop : "Верхній",
+DlgDocMaLeft : "Лівий",
+DlgDocMaRight : "Правий",
+DlgDocMaBottom : "Ðижній",
+DlgDocMeIndex : "Ключові Ñлова документа (розділені комами)",
+DlgDocMeDescr : "ÐžÐ¿Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°",
+DlgDocMeAuthor : "Ðвтор",
+DlgDocMeCopy : "ÐвторÑькі права",
+DlgDocPreview : "Попередній переглÑд",
+
+// Templates Dialog
+Templates : "Шаблони",
+DlgTemplatesTitle : "Шаблони зміÑту",
+DlgTemplatesSelMsg : "Оберіть, будь лаÑка, шаблон Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð² редакторі<br>(поточний зміÑÑ‚ буде втрачено):",
+DlgTemplatesLoading : "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÑпиÑку шаблонів. Зачекайте, будь лаÑка...",
+DlgTemplatesNoTpl : "(Ðе визначено жодного шаблону)",
+DlgTemplatesReplace : "Замінити поточний вміÑÑ‚",
+
+// About Dialog
+DlgAboutAboutTab : "Про програму",
+DlgAboutBrowserInfoTab : "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð°",
+DlgAboutLicenseTab : "ЛіцензіÑ",
+DlgAboutVersion : "ВерÑÑ–Ñ",
+DlgAboutInfo : "Додаткову інформацію дивітьÑÑ Ð½Ð° ",
+
+// Div Dialog
+DlgDivGeneralTab : "Загальна",
+DlgDivAdvancedTab : "Розширена",
+DlgDivStyle : "Стиль",
+DlgDivInlineStyle : "Inline Ñтиль"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/vi.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/vi.js
new file mode 100644
index 0000000..c2b2f64
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/vi.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Vietnamese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "Thu gá»n Thanh công cụ",
+ToolbarExpand : "Mở rộng Thanh công cụ",
+
+// Toolbar Items and Context Menu
+Save : "LÆ°u",
+NewPage : "Trang má»›i",
+Preview : "Xem trÆ°á»›c",
+Cut : "Cắt",
+Copy : "Sao chép",
+Paste : "Dán",
+PasteText : "Dán theo dạng văn bản thuần",
+PasteWord : "Dán với định dạng Word",
+Print : "In",
+SelectAll : "Chá»n Tất cả",
+RemoveFormat : "Xoá Äịnh dạng",
+InsertLinkLbl : "Liên kết",
+InsertLink : "Chèn/Sửa Liên kết",
+RemoveLink : "Xoá Liên kết",
+VisitLink : "Mở Liên Kết",
+Anchor : "Chèn/Sửa Neo",
+AnchorDelete : "Gỡ bỠNeo",
+InsertImageLbl : "Hình ảnh",
+InsertImage : "Chèn/Sửa Hình ảnh",
+InsertFlashLbl : "Flash",
+InsertFlash : "Chèn/Sửa Flash",
+InsertTableLbl : "Bảng",
+InsertTable : "Chèn/Sửa Bảng",
+InsertLineLbl : "ÄÆ°á»ng phân cách ngang",
+InsertLine : "Chèn ÄÆ°á»ng phân cách ngang",
+InsertSpecialCharLbl: "Ký tự đặc biệt",
+InsertSpecialChar : "Chèn Ký tự đặc biệt",
+InsertSmileyLbl : "Hình biểu lá»™ cảm xúc (mặt cÆ°á»i)",
+InsertSmiley : "Chèn Hình biểu lá»™ cảm xúc (mặt cÆ°á»i)",
+About : "Giới thiệu vỠFCKeditor",
+Bold : "Äậm",
+Italic : "Nghiêng",
+Underline : "Gạch chân",
+StrikeThrough : "Gạch xuyên ngang",
+Subscript : "Chỉ số dưới",
+Superscript : "Chỉ số trên",
+LeftJustify : "Canh trái",
+CenterJustify : "Canh giữa",
+RightJustify : "Canh phải",
+BlockJustify : "Canh Ä‘á»u",
+DecreaseIndent : "Dịch ra ngoài",
+IncreaseIndent : "Dịch vào trong",
+Blockquote : "Khối Trích dẫn",
+CreateDiv : "Tạo Div Container",
+EditDiv : "Chỉnh sửa Div Container",
+DeleteDiv : "Gỡ bỠDiv Container",
+Undo : "Khôi phục thao tác",
+Redo : "Làm lại thao tác",
+NumberedListLbl : "Danh sách có thứ tự",
+NumberedList : "Chèn/Xoá Danh sách có thứ tự",
+BulletedListLbl : "Danh sách không thứ tự",
+BulletedList : "Chèn/Xoá Danh sách không thứ tự",
+ShowTableBorders : "Hiển thị ÄÆ°á»ng viá»n bảng",
+ShowDetails : "Hiển thị Chi tiết",
+Style : "Mẫu",
+FontFormat : "Äịnh dạng",
+Font : "Phông",
+FontSize : "Cỡ chữ",
+TextColor : "Màu chữ",
+BGColor : "Màu ná»n",
+Source : "Mã HTML",
+Find : "Tìm kiếm",
+Replace : "Thay thế",
+SpellCheck : "Kiểm tra Chính tả",
+UniversalKeyboard : "Bàn phím Quốc tế",
+PageBreakLbl : "Ngắt trang",
+PageBreak : "Chèn Ngắt trang",
+
+Form : "Biểu mẫu",
+Checkbox : "Nút kiểm",
+RadioButton : "Nút chá»n",
+TextField : "TrÆ°á»ng văn bản",
+Textarea : "Vùng văn bản",
+HiddenField : "TrÆ°á»ng ẩn",
+Button : "Nút",
+SelectionField : "Ô chá»n",
+ImageButton : "Nút hình ảnh",
+
+FitWindow : "Mở rộng tối đa kích thước trình biên tập",
+ShowBlocks : "Hiển thị các Khối",
+
+// Context Menu
+EditLink : "Sửa Liên kết",
+CellCM : "Ô",
+RowCM : "Hàng",
+ColumnCM : "Cá»™t",
+InsertRowAfter : "Chèn Hàng Phía sau",
+InsertRowBefore : "Chèn Hàng Phía trước",
+DeleteRows : "Xoá Hàng",
+InsertColumnAfter : "Chèn Cột Phía sau",
+InsertColumnBefore : "Chèn Cột Phía trước",
+DeleteColumns : "Xoá Cột",
+InsertCellAfter : "Chèn Ô Phía sau",
+InsertCellBefore : "Chèn Ô Phía trước",
+DeleteCells : "Xoá Ô",
+MergeCells : "Kết hợp Ô",
+MergeRight : "Kết hợp Sang phải",
+MergeDown : "Kết hợp Xuống dưới",
+HorizontalSplitCell : "Tách ngang Ô",
+VerticalSplitCell : "Tách dá»c Ô",
+TableDelete : "Xóa Bảng",
+CellProperties : "Thuộc tính Ô",
+TableProperties : "Thuộc tính Bảng",
+ImageProperties : "Thuộc tính Hình ảnh",
+FlashProperties : "Thuộc tính Flash",
+
+AnchorProp : "Thuộc tính Neo",
+ButtonProp : "Thuộc tính Nút",
+CheckboxProp : "Thuộc tính Nút kiểm",
+HiddenFieldProp : "Thuá»™c tính TrÆ°á»ng ẩn",
+RadioButtonProp : "Thuá»™c tính Nút chá»n",
+ImageButtonProp : "Thuộc tính Nút hình ảnh",
+TextFieldProp : "Thuá»™c tính TrÆ°á»ng văn bản",
+SelectionFieldProp : "Thuá»™c tính Ô chá»n",
+TextareaProp : "Thuộc tính Vùng văn bản",
+FormProp : "Thuộc tính Biểu mẫu",
+
+FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "Äang xá»­ lý XHTML. Vui lòng đợi trong giây lát...",
+Done : "Äã hoàn thành",
+PasteWordConfirm : "Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỠđịnh dạng Word trước khi dán?",
+NotCompatiblePaste : "Lệnh này chỉ được hỗ trợ từ trình duyệt Internet Explorer phiên bản 5.5 hoặc mới hơn. Bạn có muốn dán nguyên mẫu?",
+UnknownToolbarItem : "Không rõ mục trên thanh công cụ \"%1\"",
+UnknownCommand : "Không rõ lệnh \"%1\"",
+NotImplemented : "Lệnh không được thực hiện",
+UnknownToolbarSet : "Thanh công cụ \"%1\" không tồn tại",
+NoActiveX : "Các thiết lập bảo mật của trình duyệt có thể giá»›i hạn má»™t số chức năng của trình biên tập. Bạn phải bật tùy chá»n \"Run ActiveX controls and plug-ins\". Bạn có thể gặp má»™t số lá»—i và thấy thiếu má»™t số chức năng.",
+BrowseServerBlocked : "Không thể mở được bộ duyệt tài nguyên. Hãy đảm bảo chức năng chặn popup đã bị vô hiệu hóa.",
+DialogBlocked : "Không thể mở được cửa sổ hộp thoại. Hãy đảm bảo chức năng chặn popup đã bị vô hiệu hóa.",
+VisitLinkBlocked : "Không thể mở được cửa sổ trình duyệt mới. Hãy đảm bảo chức năng chặn popup đã bị vô hiệu hóa.",
+
+// Dialogs
+DlgBtnOK : "Äồng ý",
+DlgBtnCancel : "Bá» qua",
+DlgBtnClose : "Äóng",
+DlgBtnBrowseServer : "Duyệt trên máy chủ",
+DlgAdvancedTag : "Mở rộng",
+DlgOpOther : "<Khác>",
+DlgInfoTab : "Thông tin",
+DlgAlertUrl : "Hãy nhập vào một URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<không thiết lập>",
+DlgGenId : "Äịnh danh",
+DlgGenLangDir : "ÄÆ°á»ng dẫn Ngôn ngữ",
+DlgGenLangDirLtr : "Trái sang Phải (LTR)",
+DlgGenLangDirRtl : "Phải sang Trái (RTL)",
+DlgGenLangCode : "Mã Ngôn ngữ",
+DlgGenAccessKey : "Phím Hỗ trợ truy cập",
+DlgGenName : "Tên",
+DlgGenTabIndex : "Chỉ số của Tab",
+DlgGenLongDescr : "Mô tả URL",
+DlgGenClass : "Lá»›p Stylesheet",
+DlgGenTitle : "Advisory Title",
+DlgGenContType : "Advisory Content Type",
+DlgGenLinkCharset : "Bảng mã của tài nguyên được liên kết đến",
+DlgGenStyle : "Mẫu",
+
+// Image Dialog
+DlgImgTitle : "Thuộc tính Hình ảnh",
+DlgImgInfoTab : "Thông tin Hình ảnh",
+DlgImgBtnUpload : "Tải lên Máy chủ",
+DlgImgURL : "URL",
+DlgImgUpload : "Tải lên",
+DlgImgAlt : "Chú thích Hình ảnh",
+DlgImgWidth : "Rá»™ng",
+DlgImgHeight : "Cao",
+DlgImgLockRatio : "Giữ nguyên tỷ lệ",
+DlgBtnResetSize : "Kích thước gốc",
+DlgImgBorder : "ÄÆ°á»ng viá»n",
+DlgImgHSpace : "HSpace",
+DlgImgVSpace : "VSpace",
+DlgImgAlign : "Vị trí",
+DlgImgAlignLeft : "Trái",
+DlgImgAlignAbsBottom: "Dưới tuyệt đối",
+DlgImgAlignAbsMiddle: "Giữa tuyệt đối",
+DlgImgAlignBaseline : "ÄÆ°á»ng cÆ¡ sở",
+DlgImgAlignBottom : "DÆ°á»›i",
+DlgImgAlignMiddle : "Giữa",
+DlgImgAlignRight : "Phải",
+DlgImgAlignTextTop : "Phía trên chữ",
+DlgImgAlignTop : "Trên",
+DlgImgPreview : "Xem trÆ°á»›c",
+DlgImgAlertUrl : "Hãy đưa vào URL của hình ảnh",
+DlgImgLinkTab : "Liên kết",
+
+// Flash Dialog
+DlgFlashTitle : "Thuộc tính Flash",
+DlgFlashChkPlay : "Tự động chạy",
+DlgFlashChkLoop : "Lặp",
+DlgFlashChkMenu : "Cho phép bật Menu của Flash",
+DlgFlashScale : "Tỷ lệ",
+DlgFlashScaleAll : "Hiển thị tất cả",
+DlgFlashScaleNoBorder : "Không Ä‘Æ°á»ng viá»n",
+DlgFlashScaleFit : "Vừa vặn",
+
+// Link Dialog
+DlgLnkWindowTitle : "Liên kết",
+DlgLnkInfoTab : "Thông tin Liên kết",
+DlgLnkTargetTab : "Äích",
+
+DlgLnkType : "Kiểu Liên kết",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "Neo trong trang này",
+DlgLnkTypeEMail : "Thư điện tử",
+DlgLnkProto : "Giao thức",
+DlgLnkProtoOther : "<khác>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "Chá»n má»™t Neo",
+DlgLnkAnchorByName : "Theo Tên Neo",
+DlgLnkAnchorById : "Theo Äịnh danh Element",
+DlgLnkNoAnchors : "(Không có Neo nào trong tài liệu)",
+DlgLnkEMail : "Thư điện tử",
+DlgLnkEMailSubject : "Tiêu đỠThông điệp",
+DlgLnkEMailBody : "Nội dung Thông điệp",
+DlgLnkUpload : "Tải lên",
+DlgLnkBtnUpload : "Tải lên Máy chủ",
+
+DlgLnkTarget : "Äích",
+DlgLnkTargetFrame : "<khung>",
+DlgLnkTargetPopup : "<cửa sổ popup>",
+DlgLnkTargetBlank : "Cửa sổ mới (_blank)",
+DlgLnkTargetParent : "Cửa sổ cha (_parent)",
+DlgLnkTargetSelf : "Cùng cửa sổ (_self)",
+DlgLnkTargetTop : "Cửa sổ trên cùng(_top)",
+DlgLnkTargetFrameName : "Tên Khung đích",
+DlgLnkPopWinName : "Tên Cửa sổ Popup",
+DlgLnkPopWinFeat : "Äặc Ä‘iểm của Cá»­a sổ Popup",
+DlgLnkPopResize : "Kích thước thay đổi",
+DlgLnkPopLocation : "Thanh vị trí",
+DlgLnkPopMenu : "Thanh Menu",
+DlgLnkPopScroll : "Thanh cuá»™n",
+DlgLnkPopStatus : "Thanh trạng thái",
+DlgLnkPopToolbar : "Thanh công cụ",
+DlgLnkPopFullScrn : "Toàn màn hình (IE)",
+DlgLnkPopDependent : "Phụ thuộc (Netscape)",
+DlgLnkPopWidth : "Rá»™ng",
+DlgLnkPopHeight : "Cao",
+DlgLnkPopLeft : "Vị trí Trái",
+DlgLnkPopTop : "Vị trí Trên",
+
+DlnLnkMsgNoUrl : "Hãy đưa vào Liên kết URL",
+DlnLnkMsgNoEMail : "Hãy đưa vào địa chỉ thư điện tử",
+DlnLnkMsgNoAnchor : "Hãy chá»n má»™t Neo",
+DlnLnkMsgInvPopName : "Tên của cửa sổ Popup phải bắt đầu bằng một ký tự và không được chứa khoảng trắng",
+
+// Color Dialog
+DlgColorTitle : "Chá»n màu",
+DlgColorBtnClear : "Xoá",
+DlgColorHighlight : "Tô sáng",
+DlgColorSelected : "Äã chá»n",
+
+// Smiley Dialog
+DlgSmileyTitle : "Chèn Hình biểu lá»™ cảm xúc (mặt cÆ°á»i)",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "Hãy chá»n Ký tá»± đặc biệt",
+
+// Table Dialog
+DlgTableTitle : "Thuộc tính bảng",
+DlgTableRows : "Hàng",
+DlgTableColumns : "Cá»™t",
+DlgTableBorder : "Cỡ ÄÆ°á»ng viá»n",
+DlgTableAlign : "Canh lá»",
+DlgTableAlignNotSet : "<Chưa thiết lập>",
+DlgTableAlignLeft : "Trái",
+DlgTableAlignCenter : "Giữa",
+DlgTableAlignRight : "Phải",
+DlgTableWidth : "Rá»™ng",
+DlgTableWidthPx : "điểm (px)",
+DlgTableWidthPc : "%",
+DlgTableHeight : "Cao",
+DlgTableCellSpace : "Khoảng cách Ô",
+DlgTableCellPad : "Äệm Ô",
+DlgTableCaption : "Äầu Ä‘á»",
+DlgTableSummary : "Tóm lược",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "Thuộc tính Ô",
+DlgCellWidth : "Rá»™ng",
+DlgCellWidthPx : "điểm (px)",
+DlgCellWidthPc : "%",
+DlgCellHeight : "Cao",
+DlgCellWordWrap : "Bá»c từ",
+DlgCellWordWrapNotSet : "<Chưa thiết lập>",
+DlgCellWordWrapYes : "Äồng ý",
+DlgCellWordWrapNo : "Không",
+DlgCellHorAlign : "Canh theo Chiá»u ngang",
+DlgCellHorAlignNotSet : "<Chưa thiết lập>",
+DlgCellHorAlignLeft : "Trái",
+DlgCellHorAlignCenter : "Giữa",
+DlgCellHorAlignRight: "Phải",
+DlgCellVerAlign : "Canh theo Chiá»u dá»c",
+DlgCellVerAlignNotSet : "<Chưa thiết lập>",
+DlgCellVerAlignTop : "Trên",
+DlgCellVerAlignMiddle : "Giữa",
+DlgCellVerAlignBottom : "DÆ°á»›i",
+DlgCellVerAlignBaseline : "ÄÆ°á»ng cÆ¡ sở",
+DlgCellType : "Cell Type", //MISSING
+DlgCellTypeData : "Data", //MISSING
+DlgCellTypeHeader : "Header", //MISSING
+DlgCellRowSpan : "Nối Hàng",
+DlgCellCollSpan : "Nối Cột",
+DlgCellBackColor : "Màu ná»n",
+DlgCellBorderColor : "Màu viá»n",
+DlgCellBtnSelect : "Chá»n...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "Tìm kiếm và Thay Thế",
+
+// Find Dialog
+DlgFindTitle : "Tìm kiếm",
+DlgFindFindBtn : "Tìm kiếm",
+DlgFindNotFoundMsg : "Không tìm thấy chuỗi cần tìm.",
+
+// Replace Dialog
+DlgReplaceTitle : "Thay thế",
+DlgReplaceFindLbl : "Tìm chuỗi:",
+DlgReplaceReplaceLbl : "Thay bằng:",
+DlgReplaceCaseChk : "Phân biệt chữ hoa/thÆ°á»ng",
+DlgReplaceReplaceBtn : "Thay thế",
+DlgReplaceReplAllBtn : "Thay thế Tất cả",
+DlgReplaceWordChk : "Äúng toàn bá»™ từ",
+
+// Paste Operations / Dialog
+PasteErrorCut : "Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl+X).",
+PasteErrorCopy : "Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl+C).",
+
+PasteAsText : "Dán theo định dạng văn bản thuần",
+PasteFromWord : "Dán với định dạng Word",
+
+DlgPasteMsg2 : "Hãy dán ná»™i dung vào trong khung bên dÆ°á»›i, sá»­ dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Äồng ý</STRONG>.",
+DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING
+DlgPasteIgnoreFont : "Chấp nhận các định dạng phông",
+DlgPasteRemoveStyles : "Gỡ bỠcác định dạng Styles",
+
+// Color Picker
+ColorAutomatic : "Tá»± Ä‘á»™ng",
+ColorMoreColors : "Màu khác...",
+
+// Document Properties
+DocProps : "Thuộc tính Tài liệu",
+
+// Anchor Dialog
+DlgAnchorTitle : "Thuộc tính Neo",
+DlgAnchorName : "Tên của Neo",
+DlgAnchorErrorName : "Hãy nhập vào tên của Neo",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "Không có trong từ điển",
+DlgSpellChangeTo : "Chuyển thành",
+DlgSpellBtnIgnore : "Bá» qua",
+DlgSpellBtnIgnoreAll : "BỠqua Tất cả",
+DlgSpellBtnReplace : "Thay thế",
+DlgSpellBtnReplaceAll : "Thay thế Tất cả",
+DlgSpellBtnUndo : "Phục hồi lại",
+DlgSpellNoSuggestions : "- Không đưa ra gợi ý vỠtừ -",
+DlgSpellProgress : "Äang tiến hành kiểm tra chính tả...",
+DlgSpellNoMispell : "Hoàn tất kiểm tra chính tả: Không có lỗi chính tả",
+DlgSpellNoChanges : "Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi",
+DlgSpellOneChange : "Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi",
+DlgSpellManyChanges : "Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi",
+
+IeSpellDownload : "Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải vỠngay bây gi�",
+
+// Button Dialog
+DlgButtonText : "Chuỗi hiển thị (Giá trị)",
+DlgButtonType : "Kiểu",
+DlgButtonTypeBtn : "Nút Bấm",
+DlgButtonTypeSbm : "Nút Gửi",
+DlgButtonTypeRst : "Nút Nhập lại",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "Tên",
+DlgCheckboxValue : "Giá trị",
+DlgCheckboxSelected : "Äược chá»n",
+
+// Form Dialog
+DlgFormName : "Tên",
+DlgFormAction : "Hành động",
+DlgFormMethod : "Phương thức",
+
+// Select Field Dialog
+DlgSelectName : "Tên",
+DlgSelectValue : "Giá trị",
+DlgSelectSize : "Kích cỡ",
+DlgSelectLines : "dòng",
+DlgSelectChkMulti : "Cho phép chá»n nhiá»u",
+DlgSelectOpAvail : "Các tùy chá»n có thể sá»­ dụng",
+DlgSelectOpText : "Văn bản",
+DlgSelectOpValue : "Giá trị",
+DlgSelectBtnAdd : "Thêm",
+DlgSelectBtnModify : "Thay đổi",
+DlgSelectBtnUp : "Lên",
+DlgSelectBtnDown : "Xuống",
+DlgSelectBtnSetValue : "Giá trị được chá»n",
+DlgSelectBtnDelete : "Xoá",
+
+// Textarea Dialog
+DlgTextareaName : "Tên",
+DlgTextareaCols : "Cá»™t",
+DlgTextareaRows : "Hàng",
+
+// Text Field Dialog
+DlgTextName : "Tên",
+DlgTextValue : "Giá trị",
+DlgTextCharWidth : "Rá»™ng",
+DlgTextMaxChars : "Số Ký tự tối đa",
+DlgTextType : "Kiểu",
+DlgTextTypeText : "Ký tự",
+DlgTextTypePass : "Mật khẩu",
+
+// Hidden Field Dialog
+DlgHiddenName : "Tên",
+DlgHiddenValue : "Giá trị",
+
+// Bulleted List Dialog
+BulletedListProp : "Thuộc tính Danh sách không thứ tự",
+NumberedListProp : "Thuộc tính Danh sách có thứ tự",
+DlgLstStart : "Bắt đầu",
+DlgLstType : "Kiểu",
+DlgLstTypeCircle : "Hình tròn",
+DlgLstTypeDisc : "Hình đĩa",
+DlgLstTypeSquare : "Hình vuông",
+DlgLstTypeNumbers : "Số thứ tự (1, 2, 3)",
+DlgLstTypeLCase : "Chữ cái thÆ°á»ng (a, b, c)",
+DlgLstTypeUCase : "Chữ cái hoa (A, B, C)",
+DlgLstTypeSRoman : "Số La Mã thÆ°á»ng (i, ii, iii)",
+DlgLstTypeLRoman : "Số La Mã hoa (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "Toàn thể",
+DlgDocBackTab : "Ná»n",
+DlgDocColorsTab : "Màu sắc và ÄÆ°á»ng biên",
+DlgDocMetaTab : "Siêu dữ liệu",
+
+DlgDocPageTitle : "Tiêu đỠTrang",
+DlgDocLangDir : "ÄÆ°á»ng dẫn Ngôn ngữ",
+DlgDocLangDirLTR : "Trái sang Phải (LTR)",
+DlgDocLangDirRTL : "Phải sang Trái (RTL)",
+DlgDocLangCode : "Mã Ngôn ngữ",
+DlgDocCharSet : "Bảng mã ký tự",
+DlgDocCharSetCE : "Trung Âu",
+DlgDocCharSetCT : "Tiếng Trung Quốc (Big5)",
+DlgDocCharSetCR : "Tiếng Kirin",
+DlgDocCharSetGR : "Tiếng Hy Lạp",
+DlgDocCharSetJP : "Tiếng Nhật",
+DlgDocCharSetKR : "Tiếng Hàn",
+DlgDocCharSetTR : "Tiếng Thổ Nhĩ Kỳ",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "Tây Âu",
+DlgDocCharSetOther : "Bảng mã ký tự khác",
+
+DlgDocDocType : "Kiểu Äá» mục Tài liệu",
+DlgDocDocTypeOther : "Kiểu Äá» mục Tài liệu khác",
+DlgDocIncXHTML : "Bao gồm cả định nghĩa XHTML",
+DlgDocBgColor : "Màu ná»n",
+DlgDocBgImage : "URL của Hình ảnh ná»n",
+DlgDocBgNoScroll : "Không cuá»™n ná»n",
+DlgDocCText : "Văn bản",
+DlgDocCLink : "Liên kết",
+DlgDocCVisited : "Liên kết Äã ghé thăm",
+DlgDocCActive : "Liên kết Hiện hành",
+DlgDocMargins : "ÄÆ°á»ng biên của Trang",
+DlgDocMaTop : "Trên",
+DlgDocMaLeft : "Trái",
+DlgDocMaRight : "Phải",
+DlgDocMaBottom : "DÆ°á»›i",
+DlgDocMeIndex : "Các từ khóa chỉ mục tài liệu (phân cách bởi dấu phẩy)",
+DlgDocMeDescr : "Mô tả tài liệu",
+DlgDocMeAuthor : "Tác giả",
+DlgDocMeCopy : "Bản quyá»n",
+DlgDocPreview : "Xem trÆ°á»›c",
+
+// Templates Dialog
+Templates : "Mẫu dựng sẵn",
+DlgTemplatesTitle : "Nội dung Mẫu dựng sẵn",
+DlgTemplatesSelMsg : "Hãy chá»n Mẫu dá»±ng sẵn để mở trong trình biên tập<br>(ná»™i dung hiện tại sẽ bị mất):",
+DlgTemplatesLoading : "Äang nạp Danh sách Mẫu dá»±ng sẵn. Vui lòng đợi trong giây lát...",
+DlgTemplatesNoTpl : "(Không có Mẫu dựng sẵn nào được định nghĩa)",
+DlgTemplatesReplace : "Thay thế nội dung hiện tại",
+
+// About Dialog
+DlgAboutAboutTab : "Giới thiệu",
+DlgAboutBrowserInfoTab : "Thông tin trình duyệt",
+DlgAboutLicenseTab : "Giấy phép",
+DlgAboutVersion : "phiên bản",
+DlgAboutInfo : "Äể biết thêm thông tin, hãy truy cập",
+
+// Div Dialog
+DlgDivGeneralTab : "Chung",
+DlgDivAdvancedTab : "Nâng cao",
+DlgDivStyle : "Kiểu Style",
+DlgDivInlineStyle : "Kiểu Style Trực tiếp"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh-cn.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh-cn.js
new file mode 100644
index 0000000..955d8f6
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh-cn.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Chinese Simplified language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "折å å·¥å…·æ ",
+ToolbarExpand : "展开工具æ ",
+
+// Toolbar Items and Context Menu
+Save : "ä¿å­˜",
+NewPage : "新建",
+Preview : "预览",
+Cut : "剪切",
+Copy : "å¤åˆ¶",
+Paste : "粘贴",
+PasteText : "粘贴为无格å¼æ–‡æœ¬",
+PasteWord : "从 MS Word 粘贴",
+Print : "打å°",
+SelectAll : "全选",
+RemoveFormat : "清除格å¼",
+InsertLinkLbl : "超链接",
+InsertLink : "æ’å…¥/编辑超链接",
+RemoveLink : "å–消超链接",
+VisitLink : "打开超链接",
+Anchor : "æ’å…¥/编辑锚点链接",
+AnchorDelete : "清除锚点链接",
+InsertImageLbl : "图象",
+InsertImage : "æ’å…¥/编辑图象",
+InsertFlashLbl : "Flash",
+InsertFlash : "æ’å…¥/编辑 Flash",
+InsertTableLbl : "表格",
+InsertTable : "æ’å…¥/编辑表格",
+InsertLineLbl : "水平线",
+InsertLine : "æ’入水平线",
+InsertSpecialCharLbl: "特殊符å·",
+InsertSpecialChar : "æ’入特殊符å·",
+InsertSmileyLbl : "表情符",
+InsertSmiley : "æ’入表情图标",
+About : "关于 FCKeditor",
+Bold : "加粗",
+Italic : "倾斜",
+Underline : "下划线",
+StrikeThrough : "删除线",
+Subscript : "下标",
+Superscript : "上标",
+LeftJustify : "左对é½",
+CenterJustify : "居中对é½",
+RightJustify : "å³å¯¹é½",
+BlockJustify : "两端对é½",
+DecreaseIndent : "å‡å°‘缩进é‡",
+IncreaseIndent : "增加缩进é‡",
+Blockquote : "å—引用",
+CreateDiv : "æ’å…¥ Div 标签",
+EditDiv : "编辑 Div 标签",
+DeleteDiv : "删除 Div 标签",
+Undo : "撤消",
+Redo : "é‡åš",
+NumberedListLbl : "ç¼–å·åˆ—表",
+NumberedList : "æ’å…¥/删除编å·åˆ—表",
+BulletedListLbl : "项目列表",
+BulletedList : "æ’å…¥/删除项目列表",
+ShowTableBorders : "显示表格边框",
+ShowDetails : "显示详细资料",
+Style : "æ ·å¼",
+FontFormat : "æ ¼å¼",
+Font : "字体",
+FontSize : "大å°",
+TextColor : "文本颜色",
+BGColor : "背景颜色",
+Source : "æºä»£ç ",
+Find : "查找",
+Replace : "替æ¢",
+SpellCheck : "拼写检查",
+UniversalKeyboard : "软键盘",
+PageBreakLbl : "分页符",
+PageBreak : "æ’入分页符",
+
+Form : "表å•",
+Checkbox : "å¤é€‰æ¡†",
+RadioButton : "å•é€‰æŒ‰é’®",
+TextField : "å•è¡Œæ–‡æœ¬",
+Textarea : "多行文本",
+HiddenField : "éšè—域",
+Button : "按钮",
+SelectionField : "列表/èœå•",
+ImageButton : "图åƒåŸŸ",
+
+FitWindow : "å…¨å±ç¼–辑",
+ShowBlocks : "显示区å—",
+
+// Context Menu
+EditLink : "编辑超链接",
+CellCM : "å•å…ƒæ ¼",
+RowCM : "行",
+ColumnCM : "列",
+InsertRowAfter : "在下方æ’入行",
+InsertRowBefore : "在上方æ’入行",
+DeleteRows : "删除行",
+InsertColumnAfter : "在å³ä¾§æ’入列",
+InsertColumnBefore : "在左侧æ’入列",
+DeleteColumns : "删除列",
+InsertCellAfter : "在å³ä¾§æ’å…¥å•å…ƒæ ¼",
+InsertCellBefore : "在左侧æ’å…¥å•å…ƒæ ¼",
+DeleteCells : "删除å•å…ƒæ ¼",
+MergeCells : "åˆå¹¶å•å…ƒæ ¼",
+MergeRight : "å‘å³åˆå¹¶å•å…ƒæ ¼",
+MergeDown : "å‘下åˆå¹¶å•å…ƒæ ¼",
+HorizontalSplitCell : "水平拆分å•å…ƒæ ¼",
+VerticalSplitCell : "垂直拆分å•å…ƒæ ¼",
+TableDelete : "删除表格",
+CellProperties : "å•å…ƒæ ¼å±žæ€§",
+TableProperties : "表格属性",
+ImageProperties : "图象属性",
+FlashProperties : "Flash 属性",
+
+AnchorProp : "锚点链接属性",
+ButtonProp : "按钮属性",
+CheckboxProp : "å¤é€‰æ¡†å±žæ€§",
+HiddenFieldProp : "éšè—域属性",
+RadioButtonProp : "å•é€‰æŒ‰é’®å±žæ€§",
+ImageButtonProp : "图åƒåŸŸå±žæ€§",
+TextFieldProp : "å•è¡Œæ–‡æœ¬å±žæ€§",
+SelectionFieldProp : "èœå•/列表属性",
+TextareaProp : "多行文本属性",
+FormProp : "表å•å±žæ€§",
+
+FontFormats : "普通;已编排格å¼;地å€;标题 1;标题 2;标题 3;标题 4;标题 5;标题 6;段è½(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "æ­£åœ¨å¤„ç† XHTML,请ç¨ç­‰...",
+Done : "完æˆ",
+PasteWordConfirm : "您è¦ç²˜è´´çš„内容好åƒæ˜¯æ¥è‡ª MS Word,是å¦è¦æ¸…除 MS Word æ ¼å¼åŽå†ç²˜è´´ï¼Ÿ",
+NotCompatiblePaste : "è¯¥å‘½ä»¤éœ€è¦ Internet Explorer 5.5 或更高版本的支æŒï¼Œæ˜¯å¦æŒ‰å¸¸è§„粘贴进行?",
+UnknownToolbarItem : "未知工具æ é¡¹ç›® \"%1\"",
+UnknownCommand : "未知命令å称 \"%1\"",
+NotImplemented : "命令无法执行",
+UnknownToolbarSet : "工具æ è®¾ç½® \"%1\" ä¸å­˜åœ¨",
+NoActiveX : "æµè§ˆå™¨å®‰å…¨è®¾ç½®é™åˆ¶äº†æœ¬ç¼–辑器的æŸäº›åŠŸèƒ½ã€‚您必须å¯ç”¨å®‰å…¨è®¾ç½®ä¸­çš„“è¿è¡Œ ActiveX 控件和æ’件â€ï¼Œå¦åˆ™å°†å‡ºçŽ°æŸäº›é”™è¯¯å¹¶ç¼ºå°‘功能。",
+BrowseServerBlocked : "无法打开资æºæµè§ˆå™¨ï¼Œè¯·ç¡®è®¤æ˜¯å¦å¯ç”¨äº†ç¦æ­¢å¼¹å‡ºçª—å£ã€‚",
+DialogBlocked : "无法打开对è¯æ¡†çª—å£ï¼Œè¯·ç¡®è®¤æ˜¯å¦å¯ç”¨äº†ç¦æ­¢å¼¹å‡ºçª—å£æˆ–网页对è¯æ¡†ï¼ˆIE)。",
+VisitLinkBlocked : "无法打开新窗å£ï¼Œè¯·ç¡®è®¤æ˜¯å¦å¯ç”¨äº†ç¦æ­¢å¼¹å‡ºçª—å£æˆ–网页对è¯æ¡†ï¼ˆIE)。",
+
+// Dialogs
+DlgBtnOK : "确定",
+DlgBtnCancel : "å–消",
+DlgBtnClose : "关闭",
+DlgBtnBrowseServer : "æµè§ˆæœåŠ¡å™¨",
+DlgAdvancedTag : "高级",
+DlgOpOther : "<其它>",
+DlgInfoTab : "ä¿¡æ¯",
+DlgAlertUrl : "请æ’å…¥ URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<没有设置>",
+DlgGenId : "ID",
+DlgGenLangDir : "语言方å‘",
+DlgGenLangDirLtr : "ä»Žå·¦åˆ°å³ (LTR)",
+DlgGenLangDirRtl : "从å³åˆ°å·¦ (RTL)",
+DlgGenLangCode : "语言代ç ",
+DlgGenAccessKey : "访问键",
+DlgGenName : "å称",
+DlgGenTabIndex : "Tab 键次åº",
+DlgGenLongDescr : "详细说明地å€",
+DlgGenClass : "æ ·å¼ç±»å称",
+DlgGenTitle : "标题",
+DlgGenContType : "内容类型",
+DlgGenLinkCharset : "字符编ç ",
+DlgGenStyle : "行内样å¼",
+
+// Image Dialog
+DlgImgTitle : "图象属性",
+DlgImgInfoTab : "图象",
+DlgImgBtnUpload : "å‘é€åˆ°æœåŠ¡å™¨ä¸Š",
+DlgImgURL : "æºæ–‡ä»¶",
+DlgImgUpload : "上传",
+DlgImgAlt : "替æ¢æ–‡æœ¬",
+DlgImgWidth : "宽度",
+DlgImgHeight : "高度",
+DlgImgLockRatio : "é”定比例",
+DlgBtnResetSize : "æ¢å¤å°ºå¯¸",
+DlgImgBorder : "边框大å°",
+DlgImgHSpace : "水平间è·",
+DlgImgVSpace : "åž‚ç›´é—´è·",
+DlgImgAlign : "对é½æ–¹å¼",
+DlgImgAlignLeft : "左对é½",
+DlgImgAlignAbsBottom: "ç»å¯¹åº•è¾¹",
+DlgImgAlignAbsMiddle: "ç»å¯¹å±…中",
+DlgImgAlignBaseline : "基线",
+DlgImgAlignBottom : "底边",
+DlgImgAlignMiddle : "居中",
+DlgImgAlignRight : "å³å¯¹é½",
+DlgImgAlignTextTop : "文本上方",
+DlgImgAlignTop : "顶端",
+DlgImgPreview : "预览",
+DlgImgAlertUrl : "请输入图象地å€",
+DlgImgLinkTab : "链接",
+
+// Flash Dialog
+DlgFlashTitle : "Flash 属性",
+DlgFlashChkPlay : "自动播放",
+DlgFlashChkLoop : "循环",
+DlgFlashChkMenu : "å¯ç”¨ Flash èœå•",
+DlgFlashScale : "缩放",
+DlgFlashScaleAll : "全部显示",
+DlgFlashScaleNoBorder : "无边框",
+DlgFlashScaleFit : "严格匹é…",
+
+// Link Dialog
+DlgLnkWindowTitle : "超链接",
+DlgLnkInfoTab : "超链接信æ¯",
+DlgLnkTargetTab : "目标",
+
+DlgLnkType : "超链接类型",
+DlgLnkTypeURL : "超链接",
+DlgLnkTypeAnchor : "页内锚点链接",
+DlgLnkTypeEMail : "电å­é‚®ä»¶",
+DlgLnkProto : "åè®®",
+DlgLnkProtoOther : "<其它>",
+DlgLnkURL : "地å€",
+DlgLnkAnchorSel : "选择一个锚点",
+DlgLnkAnchorByName : "按锚点å称",
+DlgLnkAnchorById : "按锚点 ID",
+DlgLnkNoAnchors : "(此文档没有å¯ç”¨çš„锚点)",
+DlgLnkEMail : "地å€",
+DlgLnkEMailSubject : "主题",
+DlgLnkEMailBody : "内容",
+DlgLnkUpload : "上传",
+DlgLnkBtnUpload : "å‘é€åˆ°æœåŠ¡å™¨ä¸Š",
+
+DlgLnkTarget : "目标",
+DlgLnkTargetFrame : "<框架>",
+DlgLnkTargetPopup : "<弹出窗å£>",
+DlgLnkTargetBlank : "æ–°çª—å£ (_blank)",
+DlgLnkTargetParent : "çˆ¶çª—å£ (_parent)",
+DlgLnkTargetSelf : "æœ¬çª—å£ (_self)",
+DlgLnkTargetTop : "整页 (_top)",
+DlgLnkTargetFrameName : "目标框架å称",
+DlgLnkPopWinName : "弹出窗å£å称",
+DlgLnkPopWinFeat : "弹出窗å£å±žæ€§",
+DlgLnkPopResize : "调整大å°",
+DlgLnkPopLocation : "地å€æ ",
+DlgLnkPopMenu : "èœå•æ ",
+DlgLnkPopScroll : "滚动æ¡",
+DlgLnkPopStatus : "状æ€æ ",
+DlgLnkPopToolbar : "工具æ ",
+DlgLnkPopFullScrn : "å…¨å± (IE)",
+DlgLnkPopDependent : "ä¾é™„ (NS)",
+DlgLnkPopWidth : "宽",
+DlgLnkPopHeight : "高",
+DlgLnkPopLeft : "å·¦",
+DlgLnkPopTop : "å³",
+
+DlnLnkMsgNoUrl : "请输入超链接地å€",
+DlnLnkMsgNoEMail : "请输入电å­é‚®ä»¶åœ°å€",
+DlnLnkMsgNoAnchor : "请选择一个锚点",
+DlnLnkMsgInvPopName : "弹出窗å£å称必须以字æ¯å¼€å¤´ï¼Œå¹¶ä¸”ä¸èƒ½å«æœ‰ç©ºæ ¼ã€‚",
+
+// Color Dialog
+DlgColorTitle : "选择颜色",
+DlgColorBtnClear : "清除",
+DlgColorHighlight : "预览",
+DlgColorSelected : "选择",
+
+// Smiley Dialog
+DlgSmileyTitle : "æ’入表情图标",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "选择特殊符å·",
+
+// Table Dialog
+DlgTableTitle : "表格属性",
+DlgTableRows : "行数",
+DlgTableColumns : "列数",
+DlgTableBorder : "边框",
+DlgTableAlign : "对é½",
+DlgTableAlignNotSet : "<没有设置>",
+DlgTableAlignLeft : "左对é½",
+DlgTableAlignCenter : "居中",
+DlgTableAlignRight : "å³å¯¹é½",
+DlgTableWidth : "宽度",
+DlgTableWidthPx : "åƒç´ ",
+DlgTableWidthPc : "百分比",
+DlgTableHeight : "高度",
+DlgTableCellSpace : "é—´è·",
+DlgTableCellPad : "è¾¹è·",
+DlgTableCaption : "标题",
+DlgTableSummary : "摘è¦",
+DlgTableHeaders : "标题å•å…ƒæ ¼",
+DlgTableHeadersNone : "æ— ",
+DlgTableHeadersColumn : "第一列",
+DlgTableHeadersRow : "第一行",
+DlgTableHeadersBoth : "第一列和第一行",
+
+// Table Cell Dialog
+DlgCellTitle : "å•å…ƒæ ¼å±žæ€§",
+DlgCellWidth : "宽度",
+DlgCellWidthPx : "åƒç´ ",
+DlgCellWidthPc : "百分比",
+DlgCellHeight : "高度",
+DlgCellWordWrap : "自动æ¢è¡Œ",
+DlgCellWordWrapNotSet : "<没有设置>",
+DlgCellWordWrapYes : "是",
+DlgCellWordWrapNo : "å¦",
+DlgCellHorAlign : "水平对é½",
+DlgCellHorAlignNotSet : "<没有设置>",
+DlgCellHorAlignLeft : "左对é½",
+DlgCellHorAlignCenter : "居中",
+DlgCellHorAlignRight: "å³å¯¹é½",
+DlgCellVerAlign : "垂直对é½",
+DlgCellVerAlignNotSet : "<没有设置>",
+DlgCellVerAlignTop : "顶端",
+DlgCellVerAlignMiddle : "居中",
+DlgCellVerAlignBottom : "底部",
+DlgCellVerAlignBaseline : "基线",
+DlgCellType : "å•å…ƒæ ¼ç±»åž‹",
+DlgCellTypeData : "资料",
+DlgCellTypeHeader : "标题",
+DlgCellRowSpan : "纵跨行数",
+DlgCellCollSpan : "横跨列数",
+DlgCellBackColor : "背景颜色",
+DlgCellBorderColor : "边框颜色",
+DlgCellBtnSelect : "选择...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "查找和替æ¢",
+
+// Find Dialog
+DlgFindTitle : "查找",
+DlgFindFindBtn : "查找",
+DlgFindNotFoundMsg : "指定文本没有找到。",
+
+// Replace Dialog
+DlgReplaceTitle : "替æ¢",
+DlgReplaceFindLbl : "查找:",
+DlgReplaceReplaceLbl : "替æ¢:",
+DlgReplaceCaseChk : "区分大å°å†™",
+DlgReplaceReplaceBtn : "替æ¢",
+DlgReplaceReplAllBtn : "全部替æ¢",
+DlgReplaceWordChk : "全字匹é…",
+
+// Paste Operations / Dialog
+PasteErrorCut : "您的æµè§ˆå™¨å®‰å…¨è®¾ç½®ä¸å…许编辑器自动执行剪切æ“作,请使用键盘快æ·é”®(Ctrl+X)æ¥å®Œæˆã€‚",
+PasteErrorCopy : "您的æµè§ˆå™¨å®‰å…¨è®¾ç½®ä¸å…许编辑器自动执行å¤åˆ¶æ“作,请使用键盘快æ·é”®(Ctrl+C)æ¥å®Œæˆã€‚",
+
+PasteAsText : "粘贴为无格å¼æ–‡æœ¬",
+PasteFromWord : "从 MS Word 粘贴",
+
+DlgPasteMsg2 : "请使用键盘快æ·é”®(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下é¢çš„方框里,å†æŒ‰ <STRONG>确定</STRONG>。",
+DlgPasteSec : "因为你的æµè§ˆå™¨çš„安全设置原因,本编辑器ä¸èƒ½ç›´æŽ¥è®¿é—®ä½ çš„剪贴æ¿å†…容,你需è¦åœ¨æœ¬çª—å£é‡æ–°ç²˜è´´ä¸€æ¬¡ã€‚",
+DlgPasteIgnoreFont : "忽略 Font 标签",
+DlgPasteRemoveStyles : "æ¸…ç† CSS æ ·å¼",
+
+// Color Picker
+ColorAutomatic : "自动",
+ColorMoreColors : "其它颜色...",
+
+// Document Properties
+DocProps : "页é¢å±žæ€§",
+
+// Anchor Dialog
+DlgAnchorTitle : "命å锚点",
+DlgAnchorName : "锚点å称",
+DlgAnchorErrorName : "请输入锚点å称",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "没有在字典里",
+DlgSpellChangeTo : "更改为",
+DlgSpellBtnIgnore : "忽略",
+DlgSpellBtnIgnoreAll : "全部忽略",
+DlgSpellBtnReplace : "替æ¢",
+DlgSpellBtnReplaceAll : "全部替æ¢",
+DlgSpellBtnUndo : "撤消",
+DlgSpellNoSuggestions : "- 没有建议 -",
+DlgSpellProgress : "正在进行拼写检查...",
+DlgSpellNoMispell : "拼写检查完æˆï¼šæ²¡æœ‰å‘现拼写错误",
+DlgSpellNoChanges : "拼写检查完æˆï¼šæ²¡æœ‰æ›´æ”¹ä»»ä½•å•è¯",
+DlgSpellOneChange : "拼写检查完æˆï¼šæ›´æ”¹äº†ä¸€ä¸ªå•è¯",
+DlgSpellManyChanges : "拼写检查完æˆï¼šæ›´æ”¹äº† %1 个å•è¯",
+
+IeSpellDownload : "拼写检查æ’件还没安装,你是å¦æƒ³çŽ°åœ¨å°±ä¸‹è½½ï¼Ÿ",
+
+// Button Dialog
+DlgButtonText : "标签(值)",
+DlgButtonType : "类型",
+DlgButtonTypeBtn : "按钮",
+DlgButtonTypeSbm : "æ交",
+DlgButtonTypeRst : "é‡è®¾",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "å称",
+DlgCheckboxValue : "选定值",
+DlgCheckboxSelected : "已勾选",
+
+// Form Dialog
+DlgFormName : "å称",
+DlgFormAction : "动作",
+DlgFormMethod : "方法",
+
+// Select Field Dialog
+DlgSelectName : "å称",
+DlgSelectValue : "选定",
+DlgSelectSize : "高度",
+DlgSelectLines : "行",
+DlgSelectChkMulti : "å…许多选",
+DlgSelectOpAvail : "列表值",
+DlgSelectOpText : "标签",
+DlgSelectOpValue : "值",
+DlgSelectBtnAdd : "新增",
+DlgSelectBtnModify : "修改",
+DlgSelectBtnUp : "上移",
+DlgSelectBtnDown : "下移",
+DlgSelectBtnSetValue : "设为åˆå§‹åŒ–时选定",
+DlgSelectBtnDelete : "删除",
+
+// Textarea Dialog
+DlgTextareaName : "å称",
+DlgTextareaCols : "字符宽度",
+DlgTextareaRows : "行数",
+
+// Text Field Dialog
+DlgTextName : "å称",
+DlgTextValue : "åˆå§‹å€¼",
+DlgTextCharWidth : "字符宽度",
+DlgTextMaxChars : "最多字符数",
+DlgTextType : "类型",
+DlgTextTypeText : "文本",
+DlgTextTypePass : "密ç ",
+
+// Hidden Field Dialog
+DlgHiddenName : "å称",
+DlgHiddenValue : "åˆå§‹å€¼",
+
+// Bulleted List Dialog
+BulletedListProp : "项目列表属性",
+NumberedListProp : "ç¼–å·åˆ—表属性",
+DlgLstStart : "开始åºå·",
+DlgLstType : "列表类型",
+DlgLstTypeCircle : "圆圈",
+DlgLstTypeDisc : "圆点",
+DlgLstTypeSquare : "æ–¹å—",
+DlgLstTypeNumbers : "æ•°å­— (1, 2, 3)",
+DlgLstTypeLCase : "å°å†™å­—æ¯ (a, b, c)",
+DlgLstTypeUCase : "å¤§å†™å­—æ¯ (A, B, C)",
+DlgLstTypeSRoman : "å°å†™ç½—马数字 (i, ii, iii)",
+DlgLstTypeLRoman : "大写罗马数字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "常规",
+DlgDocBackTab : "背景",
+DlgDocColorsTab : "颜色和边è·",
+DlgDocMetaTab : "Meta æ•°æ®",
+
+DlgDocPageTitle : "页é¢æ ‡é¢˜",
+DlgDocLangDir : "语言方å‘",
+DlgDocLangDirLTR : "ä»Žå·¦åˆ°å³ (LTR)",
+DlgDocLangDirRTL : "从å³åˆ°å·¦ (RTL)",
+DlgDocLangCode : "语言代ç ",
+DlgDocCharSet : "字符编ç ",
+DlgDocCharSetCE : "中欧",
+DlgDocCharSetCT : "ç¹ä½“中文 (Big5)",
+DlgDocCharSetCR : "西里尔文",
+DlgDocCharSetGR : "希腊文",
+DlgDocCharSetJP : "日文",
+DlgDocCharSetKR : "韩文",
+DlgDocCharSetTR : "土耳其文",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "西欧",
+DlgDocCharSetOther : "其它字符编ç ",
+
+DlgDocDocType : "文档类型",
+DlgDocDocTypeOther : "其它文档类型",
+DlgDocIncXHTML : "åŒ…å« XHTML 声明",
+DlgDocBgColor : "背景颜色",
+DlgDocBgImage : "背景图åƒ",
+DlgDocBgNoScroll : "ä¸æ»šåŠ¨èƒŒæ™¯å›¾åƒ",
+DlgDocCText : "文本",
+DlgDocCLink : "超链接",
+DlgDocCVisited : "已访问的超链接",
+DlgDocCActive : "活动超链接",
+DlgDocMargins : "页é¢è¾¹è·",
+DlgDocMaTop : "上",
+DlgDocMaLeft : "å·¦",
+DlgDocMaRight : "å³",
+DlgDocMaBottom : "下",
+DlgDocMeIndex : "页é¢ç´¢å¼•å…³é”®å­— (用åŠè§’逗å·[,]分隔)",
+DlgDocMeDescr : "页é¢è¯´æ˜Ž",
+DlgDocMeAuthor : "作者",
+DlgDocMeCopy : "版æƒ",
+DlgDocPreview : "预览",
+
+// Templates Dialog
+Templates : "模æ¿",
+DlgTemplatesTitle : "内容模æ¿",
+DlgTemplatesSelMsg : "请选择编辑器内容模æ¿:",
+DlgTemplatesLoading : "正在加载模æ¿åˆ—表,请ç¨ç­‰...",
+DlgTemplatesNoTpl : "(没有模æ¿)",
+DlgTemplatesReplace : "替æ¢å½“å‰å†…容",
+
+// About Dialog
+DlgAboutAboutTab : "关于",
+DlgAboutBrowserInfoTab : "æµè§ˆå™¨ä¿¡æ¯",
+DlgAboutLicenseTab : "许å¯è¯",
+DlgAboutVersion : "版本",
+DlgAboutInfo : "è¦èŽ·å¾—更多信æ¯è¯·è®¿é—® ",
+
+// Div Dialog
+DlgDivGeneralTab : "常规",
+DlgDivAdvancedTab : "高级",
+DlgDivStyle : "æ ·å¼",
+DlgDivInlineStyle : "CSS æ ·å¼"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh.js
new file mode 100644
index 0000000..c43afdf
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh.js
@@ -0,0 +1,534 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Chinese Traditional language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir : "ltr",
+
+ToolbarCollapse : "éš±è—é¢æ¿",
+ToolbarExpand : "顯示é¢æ¿",
+
+// Toolbar Items and Context Menu
+Save : "儲存",
+NewPage : "開新檔案",
+Preview : "é è¦½",
+Cut : "剪下",
+Copy : "複製",
+Paste : "貼上",
+PasteText : "貼為純文字格å¼",
+PasteWord : "自 Word 貼上",
+Print : "列å°",
+SelectAll : "å…¨é¸",
+RemoveFormat : "清除格å¼",
+InsertLinkLbl : "超連çµ",
+InsertLink : "æ’å…¥/編輯超連çµ",
+RemoveLink : "移除超連çµ",
+VisitLink : "開啟超連çµ",
+Anchor : "æ’å…¥/編輯錨點",
+AnchorDelete : "移除錨點",
+InsertImageLbl : "å½±åƒ",
+InsertImage : "æ’å…¥/編輯影åƒ",
+InsertFlashLbl : "Flash",
+InsertFlash : "æ’å…¥/編輯 Flash",
+InsertTableLbl : "表格",
+InsertTable : "æ’å…¥/編輯表格",
+InsertLineLbl : "水平線",
+InsertLine : "æ’入水平線",
+InsertSpecialCharLbl: "特殊符號",
+InsertSpecialChar : "æ’入特殊符號",
+InsertSmileyLbl : "表情符號",
+InsertSmiley : "æ’入表情符號",
+About : "關於 FCKeditor",
+Bold : "ç²—é«”",
+Italic : "斜體",
+Underline : "底線",
+StrikeThrough : "刪除線",
+Subscript : "下標",
+Superscript : "上標",
+LeftJustify : "é å·¦å°é½Š",
+CenterJustify : "置中",
+RightJustify : "é å³å°é½Š",
+BlockJustify : "å·¦å³å°é½Š",
+DecreaseIndent : "減少縮排",
+IncreaseIndent : "增加縮排",
+Blockquote : "引用文字",
+CreateDiv : "新增 Div 標籤",
+EditDiv : "變更 Div 標籤",
+DeleteDiv : "移除 Div 標籤",
+Undo : "復原",
+Redo : "é‡è¤‡",
+NumberedListLbl : "編號清單",
+NumberedList : "æ’å…¥/移除編號清單",
+BulletedListLbl : "項目清單",
+BulletedList : "æ’å…¥/移除項目清單",
+ShowTableBorders : "顯示表格邊框",
+ShowDetails : "顯示詳細資料",
+Style : "樣å¼",
+FontFormat : "æ ¼å¼",
+Font : "å­—é«”",
+FontSize : "大å°",
+TextColor : "文字é¡è‰²",
+BGColor : "背景é¡è‰²",
+Source : "原始碼",
+Find : "尋找",
+Replace : "å–代",
+SpellCheck : "拼字檢查",
+UniversalKeyboard : "è¬åœ‹éµç›¤",
+PageBreakLbl : "分é ç¬¦è™Ÿ",
+PageBreak : "æ’入分é ç¬¦è™Ÿ",
+
+Form : "表單",
+Checkbox : "æ ¸å–方塊",
+RadioButton : "é¸é …按鈕",
+TextField : "文字方塊",
+Textarea : "文字å€åŸŸ",
+HiddenField : "éš±è—欄ä½",
+Button : "按鈕",
+SelectionField : "清單/é¸å–®",
+ImageButton : "å½±åƒæŒ‰éˆ•",
+
+FitWindow : "編輯器最大化",
+ShowBlocks : "顯示å€å¡Š",
+
+// Context Menu
+EditLink : "編輯超連çµ",
+CellCM : "儲存格",
+RowCM : "列",
+ColumnCM : "欄",
+InsertRowAfter : "å‘下æ’入列",
+InsertRowBefore : "å‘上æ’入列",
+DeleteRows : "刪除列",
+InsertColumnAfter : "å‘å³æ’入欄",
+InsertColumnBefore : "å‘å·¦æ’入欄",
+DeleteColumns : "刪除欄",
+InsertCellAfter : "å‘å³æ’入儲存格",
+InsertCellBefore : "å‘å·¦æ’入儲存格",
+DeleteCells : "刪除儲存格",
+MergeCells : "åˆä½µå„²å­˜æ ¼",
+MergeRight : "å‘å³åˆä½µå„²å­˜æ ¼",
+MergeDown : "å‘下åˆä½µå„²å­˜æ ¼",
+HorizontalSplitCell : "æ©«å‘分割儲存格",
+VerticalSplitCell : "縱å‘分割儲存格",
+TableDelete : "刪除表格",
+CellProperties : "儲存格屬性",
+TableProperties : "表格屬性",
+ImageProperties : "å½±åƒå±¬æ€§",
+FlashProperties : "Flash 屬性",
+
+AnchorProp : "錨點屬性",
+ButtonProp : "按鈕屬性",
+CheckboxProp : "æ ¸å–方塊屬性",
+HiddenFieldProp : "éš±è—欄ä½å±¬æ€§",
+RadioButtonProp : "é¸é …按鈕屬性",
+ImageButtonProp : "å½±åƒæŒ‰éˆ•å±¬æ€§",
+TextFieldProp : "文字方塊屬性",
+SelectionFieldProp : "清單/é¸å–®å±¬æ€§",
+TextareaProp : "文字å€åŸŸå±¬æ€§",
+FormProp : "表單屬性",
+
+FontFormats : "一般;已格å¼åŒ–;ä½å€;標題 1;標題 2;標題 3;標題 4;標題 5;標題 6;一般 (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML : "è™•ç† XHTML 中,請ç¨å€™â€¦",
+Done : "完æˆ",
+PasteWordConfirm : "您想貼上的文字似乎是自 Word 複製而來,請å•æ‚¨æ˜¯å¦è¦å…ˆæ¸…除 Word çš„æ ¼å¼å¾Œå†è¡Œè²¼ä¸Šï¼Ÿ",
+NotCompatiblePaste : "此指令僅在 Internet Explorer 5.5 或以上的版本有效。請å•æ‚¨æ˜¯å¦åŒæ„ä¸æ¸…除格å¼å³è²¼ä¸Šï¼Ÿ",
+UnknownToolbarItem : "未知工具列項目 \"%1\"",
+UnknownCommand : "未知指令å稱 \"%1\"",
+NotImplemented : "尚未安è£æ­¤æŒ‡ä»¤",
+UnknownToolbarSet : "工具列設定 \"%1\" ä¸å­˜åœ¨",
+NoActiveX : "ç€è¦½å™¨çš„安全性設定é™åˆ¶äº†æœ¬ç·¨è¼¯å™¨çš„æŸäº›åŠŸèƒ½ã€‚您必須啟用安全性設定中的「執行ActiveX控制項與外掛程å¼ã€é …目,å¦å‰‡æœ¬ç·¨è¼¯å™¨å°‡æœƒå‡ºç¾éŒ¯èª¤ä¸¦ç¼ºå°‘æŸäº›åŠŸèƒ½",
+BrowseServerBlocked : "無法開啟資æºç€è¦½å™¨ï¼Œè«‹ç¢ºå®šæ‰€æœ‰å¿«é¡¯è¦–窗å°éŽ–程å¼æ˜¯å¦é—œé–‰",
+DialogBlocked : "無法開啟å°è©±è¦–窗,請確定所有快顯視窗å°éŽ–程å¼æ˜¯å¦é—œé–‰",
+VisitLinkBlocked : "無法開啟新視窗,請確定所有快顯視窗å°éŽ–程å¼æ˜¯å¦é—œé–‰",
+
+// Dialogs
+DlgBtnOK : "確定",
+DlgBtnCancel : "å–消",
+DlgBtnClose : "關閉",
+DlgBtnBrowseServer : "ç€è¦½ä¼ºæœå™¨ç«¯",
+DlgAdvancedTag : "進階",
+DlgOpOther : "<其他>",
+DlgInfoTab : "資訊",
+DlgAlertUrl : "è«‹æ’å…¥ URL",
+
+// General Dialogs Labels
+DlgGenNotSet : "<尚未設定>",
+DlgGenId : "ID",
+DlgGenLangDir : "語言方å‘",
+DlgGenLangDirLtr : "ç”±å·¦è€Œå³ (LTR)",
+DlgGenLangDirRtl : "ç”±å³è€Œå·¦ (RTL)",
+DlgGenLangCode : "語言代碼",
+DlgGenAccessKey : "å­˜å–éµ",
+DlgGenName : "å稱",
+DlgGenTabIndex : "定ä½é †åº",
+DlgGenLongDescr : "詳細 URL",
+DlgGenClass : "樣å¼è¡¨é¡žåˆ¥",
+DlgGenTitle : "標題",
+DlgGenContType : "內容類型",
+DlgGenLinkCharset : "連çµè³‡æºä¹‹ç·¨ç¢¼",
+DlgGenStyle : "樣å¼",
+
+// Image Dialog
+DlgImgTitle : "å½±åƒå±¬æ€§",
+DlgImgInfoTab : "å½±åƒè³‡è¨Š",
+DlgImgBtnUpload : "上傳至伺æœå™¨",
+DlgImgURL : "URL",
+DlgImgUpload : "上傳",
+DlgImgAlt : "替代文字",
+DlgImgWidth : "寬度",
+DlgImgHeight : "高度",
+DlgImgLockRatio : "等比例",
+DlgBtnResetSize : "é‡è¨­ç‚ºåŽŸå¤§å°",
+DlgImgBorder : "邊框",
+DlgImgHSpace : "æ°´å¹³è·é›¢",
+DlgImgVSpace : "åž‚ç›´è·é›¢",
+DlgImgAlign : "å°é½Š",
+DlgImgAlignLeft : "é å·¦å°é½Š",
+DlgImgAlignAbsBottom: "絕å°ä¸‹æ–¹",
+DlgImgAlignAbsMiddle: "絕å°ä¸­é–“",
+DlgImgAlignBaseline : "基準線",
+DlgImgAlignBottom : "é ä¸‹å°é½Š",
+DlgImgAlignMiddle : "置中å°é½Š",
+DlgImgAlignRight : "é å³å°é½Š",
+DlgImgAlignTextTop : "文字上方",
+DlgImgAlignTop : "é ä¸Šå°é½Š",
+DlgImgPreview : "é è¦½",
+DlgImgAlertUrl : "è«‹è¼¸å…¥å½±åƒ URL",
+DlgImgLinkTab : "超連çµ",
+
+// Flash Dialog
+DlgFlashTitle : "Flash 屬性",
+DlgFlashChkPlay : "自動播放",
+DlgFlashChkLoop : "é‡è¤‡",
+DlgFlashChkMenu : "é–‹å•Ÿé¸å–®",
+DlgFlashScale : "縮放",
+DlgFlashScaleAll : "全部顯示",
+DlgFlashScaleNoBorder : "無邊框",
+DlgFlashScaleFit : "精確符åˆ",
+
+// Link Dialog
+DlgLnkWindowTitle : "超連çµ",
+DlgLnkInfoTab : "超連çµè³‡è¨Š",
+DlgLnkTargetTab : "目標",
+
+DlgLnkType : "超連接類型",
+DlgLnkTypeURL : "URL",
+DlgLnkTypeAnchor : "本é éŒ¨é»ž",
+DlgLnkTypeEMail : "é›»å­éƒµä»¶",
+DlgLnkProto : "通訊å”定",
+DlgLnkProtoOther : "<其他>",
+DlgLnkURL : "URL",
+DlgLnkAnchorSel : "è«‹é¸æ“‡éŒ¨é»ž",
+DlgLnkAnchorByName : "ä¾éŒ¨é»žå稱",
+DlgLnkAnchorById : "ä¾å…ƒä»¶ ID",
+DlgLnkNoAnchors : "(本文件尚無å¯ç”¨ä¹‹éŒ¨é»ž)",
+DlgLnkEMail : "é›»å­éƒµä»¶",
+DlgLnkEMailSubject : "郵件主旨",
+DlgLnkEMailBody : "郵件內容",
+DlgLnkUpload : "上傳",
+DlgLnkBtnUpload : "傳é€è‡³ä¼ºæœå™¨",
+
+DlgLnkTarget : "目標",
+DlgLnkTargetFrame : "<框架>",
+DlgLnkTargetPopup : "<快顯視窗>",
+DlgLnkTargetBlank : "新視窗 (_blank)",
+DlgLnkTargetParent : "父視窗 (_parent)",
+DlgLnkTargetSelf : "本視窗 (_self)",
+DlgLnkTargetTop : "最上層視窗 (_top)",
+DlgLnkTargetFrameName : "目標框架å稱",
+DlgLnkPopWinName : "快顯視窗å稱",
+DlgLnkPopWinFeat : "快顯視窗屬性",
+DlgLnkPopResize : "å¯èª¿æ•´å¤§å°",
+DlgLnkPopLocation : "網å€åˆ—",
+DlgLnkPopMenu : "é¸å–®åˆ—",
+DlgLnkPopScroll : "æ²è»¸",
+DlgLnkPopStatus : "狀態列",
+DlgLnkPopToolbar : "工具列",
+DlgLnkPopFullScrn : "全螢幕 (IE)",
+DlgLnkPopDependent : "從屬 (NS)",
+DlgLnkPopWidth : "寬",
+DlgLnkPopHeight : "高",
+DlgLnkPopLeft : "å·¦",
+DlgLnkPopTop : "å³",
+
+DlnLnkMsgNoUrl : "請輸入欲連çµçš„ URL",
+DlnLnkMsgNoEMail : "請輸入電å­éƒµä»¶ä½å€",
+DlnLnkMsgNoAnchor : "è«‹é¸æ“‡éŒ¨é»ž",
+DlnLnkMsgInvPopName : "快顯å稱必須以「英文字æ¯ã€ç‚ºé–‹é ­ï¼Œä¸”ä¸å¾—å«æœ‰ç©ºç™½",
+
+// Color Dialog
+DlgColorTitle : "è«‹é¸æ“‡é¡è‰²",
+DlgColorBtnClear : "清除",
+DlgColorHighlight : "é è¦½",
+DlgColorSelected : "é¸æ“‡",
+
+// Smiley Dialog
+DlgSmileyTitle : "æ’入表情符號",
+
+// Special Character Dialog
+DlgSpecialCharTitle : "è«‹é¸æ“‡ç‰¹æ®Šç¬¦è™Ÿ",
+
+// Table Dialog
+DlgTableTitle : "表格屬性",
+DlgTableRows : "列數",
+DlgTableColumns : "欄數",
+DlgTableBorder : "邊框",
+DlgTableAlign : "å°é½Š",
+DlgTableAlignNotSet : "<未設定>",
+DlgTableAlignLeft : "é å·¦å°é½Š",
+DlgTableAlignCenter : "置中",
+DlgTableAlignRight : "é å³å°é½Š",
+DlgTableWidth : "寬度",
+DlgTableWidthPx : "åƒç´ ",
+DlgTableWidthPc : "百分比",
+DlgTableHeight : "高度",
+DlgTableCellSpace : "é–“è·",
+DlgTableCellPad : "å…§è·",
+DlgTableCaption : "標題",
+DlgTableSummary : "摘è¦",
+DlgTableHeaders : "Headers", //MISSING
+DlgTableHeadersNone : "None", //MISSING
+DlgTableHeadersColumn : "First column", //MISSING
+DlgTableHeadersRow : "First Row", //MISSING
+DlgTableHeadersBoth : "Both", //MISSING
+
+// Table Cell Dialog
+DlgCellTitle : "儲存格屬性",
+DlgCellWidth : "寬度",
+DlgCellWidthPx : "åƒç´ ",
+DlgCellWidthPc : "百分比",
+DlgCellHeight : "高度",
+DlgCellWordWrap : "自動æ›è¡Œ",
+DlgCellWordWrapNotSet : "<尚未設定>",
+DlgCellWordWrapYes : "是",
+DlgCellWordWrapNo : "å¦",
+DlgCellHorAlign : "æ°´å¹³å°é½Š",
+DlgCellHorAlignNotSet : "<尚未設定>",
+DlgCellHorAlignLeft : "é å·¦å°é½Š",
+DlgCellHorAlignCenter : "置中",
+DlgCellHorAlignRight: "é å³å°é½Š",
+DlgCellVerAlign : "åž‚ç›´å°é½Š",
+DlgCellVerAlignNotSet : "<尚未設定>",
+DlgCellVerAlignTop : "é ä¸Šå°é½Š",
+DlgCellVerAlignMiddle : "置中",
+DlgCellVerAlignBottom : "é ä¸‹å°é½Š",
+DlgCellVerAlignBaseline : "基準線",
+DlgCellType : "儲存格類型",
+DlgCellTypeData : "資料",
+DlgCellTypeHeader : "標題",
+DlgCellRowSpan : "åˆä½µåˆ—數",
+DlgCellCollSpan : "åˆä½µæ¬„æ•°",
+DlgCellBackColor : "背景é¡è‰²",
+DlgCellBorderColor : "邊框é¡è‰²",
+DlgCellBtnSelect : "è«‹é¸æ“‡â€¦",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle : "尋找與å–代",
+
+// Find Dialog
+DlgFindTitle : "尋找",
+DlgFindFindBtn : "尋找",
+DlgFindNotFoundMsg : "未找到指定的文字。",
+
+// Replace Dialog
+DlgReplaceTitle : "å–代",
+DlgReplaceFindLbl : "尋找:",
+DlgReplaceReplaceLbl : "å–代:",
+DlgReplaceCaseChk : "大å°å¯«é ˆç›¸ç¬¦",
+DlgReplaceReplaceBtn : "å–代",
+DlgReplaceReplAllBtn : "全部å–代",
+DlgReplaceWordChk : "全字相符",
+
+// Paste Operations / Dialog
+PasteErrorCut : "ç€è¦½å™¨çš„安全性設定ä¸å…許編輯器自動執行剪下動作。請使用快æ·éµ (Ctrl+X) 剪下。",
+PasteErrorCopy : "ç€è¦½å™¨çš„安全性設定ä¸å…許編輯器自動執行複製動作。請使用快æ·éµ (Ctrl+C) 複製。",
+
+PasteAsText : "貼為純文字格å¼",
+PasteFromWord : "自 Word 貼上",
+
+DlgPasteMsg2 : "請使用快æ·éµ (<strong>Ctrl+V</strong>) 貼到下方å€åŸŸä¸­ä¸¦æŒ‰ä¸‹ <strong>確定</strong>",
+DlgPasteSec : "因為ç€è¦½å™¨çš„安全性設定,本編輯器無法直接存å–您的剪貼簿資料,請您自行在本視窗進行貼上動作。",
+DlgPasteIgnoreFont : "移除字型設定",
+DlgPasteRemoveStyles : "移除樣å¼è¨­å®š",
+
+// Color Picker
+ColorAutomatic : "自動",
+ColorMoreColors : "更多é¡è‰²â€¦",
+
+// Document Properties
+DocProps : "文件屬性",
+
+// Anchor Dialog
+DlgAnchorTitle : "命å錨點",
+DlgAnchorName : "錨點å稱",
+DlgAnchorErrorName : "請輸入錨點å稱",
+
+// Speller Pages Dialog
+DlgSpellNotInDic : "ä¸åœ¨å­—典中",
+DlgSpellChangeTo : "更改為",
+DlgSpellBtnIgnore : "忽略",
+DlgSpellBtnIgnoreAll : "全部忽略",
+DlgSpellBtnReplace : "å–代",
+DlgSpellBtnReplaceAll : "全部å–代",
+DlgSpellBtnUndo : "復原",
+DlgSpellNoSuggestions : "- 無建議值 -",
+DlgSpellProgress : "進行拼字檢查中…",
+DlgSpellNoMispell : "拼字檢查完æˆï¼šæœªç™¼ç¾æ‹¼å­—錯誤",
+DlgSpellNoChanges : "拼字檢查完æˆï¼šæœªæ›´æ”¹ä»»ä½•å–®å­—",
+DlgSpellOneChange : "拼字檢查完æˆï¼šæ›´æ”¹äº† 1 個單字",
+DlgSpellManyChanges : "拼字檢查完æˆï¼šæ›´æ”¹äº† %1 個單字",
+
+IeSpellDownload : "尚未安è£æ‹¼å­—檢查元件。您是å¦æƒ³è¦ç¾åœ¨ä¸‹è¼‰ï¼Ÿ",
+
+// Button Dialog
+DlgButtonText : "顯示文字 (值)",
+DlgButtonType : "é¡žåž‹",
+DlgButtonTypeBtn : "按鈕 (Button)",
+DlgButtonTypeSbm : "é€å‡º (Submit)",
+DlgButtonTypeRst : "é‡è¨­ (Reset)",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName : "å稱",
+DlgCheckboxValue : "é¸å–值",
+DlgCheckboxSelected : "å·²é¸å–",
+
+// Form Dialog
+DlgFormName : "å稱",
+DlgFormAction : "動作",
+DlgFormMethod : "方法",
+
+// Select Field Dialog
+DlgSelectName : "å稱",
+DlgSelectValue : "é¸å–值",
+DlgSelectSize : "大å°",
+DlgSelectLines : "行",
+DlgSelectChkMulti : "å¯å¤šé¸",
+DlgSelectOpAvail : "å¯ç”¨é¸é …",
+DlgSelectOpText : "顯示文字",
+DlgSelectOpValue : "值",
+DlgSelectBtnAdd : "新增",
+DlgSelectBtnModify : "修改",
+DlgSelectBtnUp : "上移",
+DlgSelectBtnDown : "下移",
+DlgSelectBtnSetValue : "設為é è¨­å€¼",
+DlgSelectBtnDelete : "刪除",
+
+// Textarea Dialog
+DlgTextareaName : "å稱",
+DlgTextareaCols : "字元寬度",
+DlgTextareaRows : "列數",
+
+// Text Field Dialog
+DlgTextName : "å稱",
+DlgTextValue : "值",
+DlgTextCharWidth : "字元寬度",
+DlgTextMaxChars : "最多字元數",
+DlgTextType : "é¡žåž‹",
+DlgTextTypeText : "文字",
+DlgTextTypePass : "密碼",
+
+// Hidden Field Dialog
+DlgHiddenName : "å稱",
+DlgHiddenValue : "值",
+
+// Bulleted List Dialog
+BulletedListProp : "項目清單屬性",
+NumberedListProp : "編號清單屬性",
+DlgLstStart : "起始編號",
+DlgLstType : "清單類型",
+DlgLstTypeCircle : "圓圈",
+DlgLstTypeDisc : "圓點",
+DlgLstTypeSquare : "方塊",
+DlgLstTypeNumbers : "數字 (1, 2, 3)",
+DlgLstTypeLCase : "å°å¯«å­—æ¯ (a, b, c)",
+DlgLstTypeUCase : "å¤§å¯«å­—æ¯ (A, B, C)",
+DlgLstTypeSRoman : "å°å¯«ç¾…馬數字 (i, ii, iii)",
+DlgLstTypeLRoman : "大寫羅馬數字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab : "一般",
+DlgDocBackTab : "背景",
+DlgDocColorsTab : "顯色與邊界",
+DlgDocMetaTab : "Meta 資料",
+
+DlgDocPageTitle : "é é¢æ¨™é¡Œ",
+DlgDocLangDir : "語言方å‘",
+DlgDocLangDirLTR : "ç”±å·¦è€Œå³ (LTR)",
+DlgDocLangDirRTL : "ç”±å³è€Œå·¦ (RTL)",
+DlgDocLangCode : "語言代碼",
+DlgDocCharSet : "字元編碼",
+DlgDocCharSetCE : "中æ­èªžç³»",
+DlgDocCharSetCT : "正體中文 (Big5)",
+DlgDocCharSetCR : "斯拉夫文",
+DlgDocCharSetGR : "希臘文",
+DlgDocCharSetJP : "日文",
+DlgDocCharSetKR : "韓文",
+DlgDocCharSetTR : "土耳其文",
+DlgDocCharSetUN : "Unicode (UTF-8)",
+DlgDocCharSetWE : "西æ­èªžç³»",
+DlgDocCharSetOther : "其他字元編碼",
+
+DlgDocDocType : "文件類型",
+DlgDocDocTypeOther : "其他文件類型",
+DlgDocIncXHTML : "åŒ…å« XHTML 定義",
+DlgDocBgColor : "背景é¡è‰²",
+DlgDocBgImage : "背景影åƒ",
+DlgDocBgNoScroll : "浮水å°",
+DlgDocCText : "文字",
+DlgDocCLink : "超連çµ",
+DlgDocCVisited : "å·²ç€è¦½éŽçš„超連çµ",
+DlgDocCActive : "作用中的超連çµ",
+DlgDocMargins : "é é¢é‚Šç•Œ",
+DlgDocMaTop : "上",
+DlgDocMaLeft : "å·¦",
+DlgDocMaRight : "å³",
+DlgDocMaBottom : "下",
+DlgDocMeIndex : "文件索引關éµå­— (用åŠå½¢é€—號[,]分隔)",
+DlgDocMeDescr : "文件說明",
+DlgDocMeAuthor : "作者",
+DlgDocMeCopy : "版權所有",
+DlgDocPreview : "é è¦½",
+
+// Templates Dialog
+Templates : "樣版",
+DlgTemplatesTitle : "內容樣版",
+DlgTemplatesSelMsg : "è«‹é¸æ“‡æ¬²é–‹å•Ÿçš„樣版<br> (原有的內容將會被清除):",
+DlgTemplatesLoading : "讀å–樣版清單中,請ç¨å€™â€¦",
+DlgTemplatesNoTpl : "(無樣版)",
+DlgTemplatesReplace : "å–代原有內容",
+
+// About Dialog
+DlgAboutAboutTab : "關於",
+DlgAboutBrowserInfoTab : "ç€è¦½å™¨è³‡è¨Š",
+DlgAboutLicenseTab : "許å¯è­‰",
+DlgAboutVersion : "版本",
+DlgAboutInfo : "想ç²å¾—更多資訊請至 ",
+
+// Div Dialog
+DlgDivGeneralTab : "一般",
+DlgDivAdvancedTab : "進階",
+DlgDivStyle : "樣å¼",
+DlgDivInlineStyle : "CSS 樣å¼"
+};
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/autogrow/fckplugin.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/autogrow/fckplugin.js
new file mode 100644
index 0000000..3e6e3a3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/autogrow/fckplugin.js
@@ -0,0 +1,111 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Plugin: automatically resizes the editor until a configurable maximun
+ * height (FCKConfig.AutoGrowMax), based on its contents.
+ */
+
+var FCKAutoGrow = {
+ MIN_HEIGHT : window.frameElement.offsetHeight,
+
+ Check : function()
+ {
+ var delta = FCKAutoGrow.GetHeightDelta() ;
+ if ( delta != 0 )
+ {
+ var newHeight = window.frameElement.offsetHeight + delta ;
+
+ newHeight = FCKAutoGrow.GetEffectiveHeight( newHeight ) ;
+
+ if ( newHeight != window.frameElement.height )
+ {
+ window.frameElement.style.height = newHeight + "px" ;
+
+ // Gecko browsers use an onresize handler to update the innermost
+ // IFRAME's height. If the document is modified before the onresize
+ // is triggered, the plugin will miscalculate the new height. Thus,
+ // forcibly trigger onresize. #1336
+ if ( typeof window.onresize == 'function' )
+ {
+ window.onresize() ;
+ }
+ }
+ }
+ },
+
+ CheckEditorStatus : function( sender, status )
+ {
+ if ( status == FCK_STATUS_COMPLETE )
+ FCKAutoGrow.Check() ;
+ },
+
+ GetEffectiveHeight : function( height )
+ {
+ if ( height < FCKAutoGrow.MIN_HEIGHT )
+ height = FCKAutoGrow.MIN_HEIGHT;
+ else
+ {
+ var max = FCKConfig.AutoGrowMax;
+ if ( max && max > 0 && height > max )
+ height = max;
+ }
+
+ return height;
+ },
+
+ GetHeightDelta : function()
+ {
+ var oInnerDoc = FCK.EditorDocument ;
+
+ var iFrameHeight ;
+ var iInnerHeight ;
+
+ if ( FCKBrowserInfo.IsIE )
+ {
+ iFrameHeight = FCK.EditorWindow.frameElement.offsetHeight ;
+ iInnerHeight = oInnerDoc.body.scrollHeight ;
+ }
+ else
+ {
+ iFrameHeight = FCK.EditorWindow.innerHeight ;
+ iInnerHeight = oInnerDoc.body.offsetHeight +
+ ( parseInt( FCKDomTools.GetCurrentElementStyle( oInnerDoc.body, 'margin-top' ), 10 ) || 0 ) +
+ ( parseInt( FCKDomTools.GetCurrentElementStyle( oInnerDoc.body, 'margin-bottom' ), 10 ) || 0 ) ;
+ }
+
+ return iInnerHeight - iFrameHeight ;
+ },
+
+ SetListeners : function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return ;
+
+ FCK.EditorWindow.attachEvent( 'onscroll', FCKAutoGrow.Check ) ;
+ FCK.EditorDocument.attachEvent( 'onkeyup', FCKAutoGrow.Check ) ;
+ }
+};
+
+FCK.AttachToOnSelectionChange( FCKAutoGrow.Check ) ;
+
+if ( FCKBrowserInfo.IsIE )
+ FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKAutoGrow.SetListeners ) ;
+
+FCK.Events.AttachEvent( 'OnStatusChange', FCKAutoGrow.CheckEditorStatus ) ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.config.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.config.js
new file mode 100644
index 0000000..d597ee2
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.config.js
@@ -0,0 +1,26 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Sample custom configuration settings used by the BBCode plugin. It simply
+ * loads the plugin. All the rest is done by the plugin itself.
+ */
+
+// Add the BBCode plugin.
+FCKConfig.Plugins.Add( 'bbcode' ) ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.html
new file mode 100644
index 0000000..75db189
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Sample page.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>FCKeditor - BBCode Sample</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow" />
+ <link href="../../../../_samples/sample.css" rel="stylesheet" type="text/css" />
+ <script type="text/javascript" src="../../../../fckeditor.js"></script>
+</head>
+<body>
+ <h1>
+ FCKeditor - BBCode Sample</h1>
+ <p>
+ This is a sample of custom Data Processor implementation for (very) basic BBCode
+ syntax. Only <strong>[b]</strong>, <strong>[i]</strong>, <strong>[u]</strong> and
+ <strong>[url]</strong> may be used. It may be extended, but this is out of this
+ sample purpose.
+ </p>
+ <p>
+ Note that the input and output of the editor is not HTML, but BBCode
+ </p>
+ <hr />
+ <form action="../../../../_samples/html/sampleposteddata.asp" method="post" target="_blank">
+ <script type="text/javascript">
+<!--
+// Automatically calculates the editor base path based on the _samples directory.
+// This is usefull only for these samples. A real application should use something like this:
+// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
+var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('editor')) ;
+
+var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
+oFCKeditor.BasePath = sBasePath ;
+
+// Set the custom configurations file path (in this way the original file is mantained).
+oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + 'editor/plugins/bbcode/_sample/sample.config.js' ;
+
+oFCKeditor.Value = 'This is some [b]sample text[/b]. You are using [url=http://www.fckeditor.net/]FCKeditor[/url].' ;
+oFCKeditor.Create() ;
+//-->
+ </script>
+ <br />
+ <input type="submit" value="Submit" />
+ </form>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/fckplugin.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/fckplugin.js
new file mode 100644
index 0000000..dc26134
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/fckplugin.js
@@ -0,0 +1,123 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a sample implementation for a custom Data Processor for basic BBCode.
+ */
+
+FCK.DataProcessor =
+{
+ /*
+ * Returns a string representing the HTML format of "data". The returned
+ * value will be loaded in the editor.
+ * The HTML must be from <html> to </html>, eventually including
+ * the DOCTYPE.
+ * @param {String} data The data to be converted in the
+ * DataProcessor specific format.
+ */
+ ConvertToHtml : function( data )
+ {
+ // Convert < and > to their HTML entities.
+ data = data.replace( /</g, '&lt;' ) ;
+ data = data.replace( />/g, '&gt;' ) ;
+
+ // Convert line breaks to <br>.
+ data = data.replace( /(?:\r\n|\n|\r)/g, '<br>' ) ;
+
+ // [url]
+ data = data.replace( /\[url\](.+?)\[\/url]/gi, '<a href="$1">$1</a>' ) ;
+ data = data.replace( /\[url\=([^\]]+)](.+?)\[\/url]/gi, '<a href="$1">$2</a>' ) ;
+
+ // [b]
+ data = data.replace( /\[b\](.+?)\[\/b]/gi, '<b>$1</b>' ) ;
+
+ // [i]
+ data = data.replace( /\[i\](.+?)\[\/i]/gi, '<i>$1</i>' ) ;
+
+ // [u]
+ data = data.replace( /\[u\](.+?)\[\/u]/gi, '<u>$1</u>' ) ;
+
+ return '<html><head><title></title></head><body>' + data + '</body></html>' ;
+ },
+
+ /*
+ * Converts a DOM (sub-)tree to a string in the data format.
+ * @param {Object} rootNode The node that contains the DOM tree to be
+ * converted to the data format.
+ * @param {Boolean} excludeRoot Indicates that the root node must not
+ * be included in the conversion, only its children.
+ * @param {Boolean} format Indicates that the data must be formatted
+ * for human reading. Not all Data Processors may provide it.
+ */
+ ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
+ {
+ var data = rootNode.innerHTML ;
+
+ // Convert <br> to line breaks.
+ data = data.replace( /<br(?=[ \/>]).*?>/gi, '\r\n') ;
+
+ // [url]
+ data = data.replace( /<a .*?href=(["'])(.+?)\1.*?>(.+?)<\/a>/gi, '[url=$2]$3[/url]') ;
+
+ // [b]
+ data = data.replace( /<(?:b|strong)>/gi, '[b]') ;
+ data = data.replace( /<\/(?:b|strong)>/gi, '[/b]') ;
+
+ // [i]
+ data = data.replace( /<(?:i|em)>/gi, '[i]') ;
+ data = data.replace( /<\/(?:i|em)>/gi, '[/i]') ;
+
+ // [u]
+ data = data.replace( /<u>/gi, '[u]') ;
+ data = data.replace( /<\/u>/gi, '[/u]') ;
+
+ // Remove remaining tags.
+ data = data.replace( /<[^>]+>/g, '') ;
+
+ return data ;
+ },
+
+ /*
+ * Makes any necessary changes to a piece of HTML for insertion in the
+ * editor selection position.
+ * @param {String} html The HTML to be fixed.
+ */
+ FixHtml : function( html )
+ {
+ return html ;
+ }
+} ;
+
+// This Data Processor doesn't support <p>, so let's use <br>.
+FCKConfig.EnterMode = 'br' ;
+
+// To avoid pasting invalid markup (which is discarded in any case), let's
+// force pasting to plain text.
+FCKConfig.ForcePasteAsPlainText = true ;
+
+// Rename the "Source" buttom to "BBCode".
+FCKToolbarItems.RegisterItem( 'Source', new FCKToolbarButton( 'Source', 'BBCode', null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ) ;
+
+// Let's enforce the toolbar to the limits of this Data Processor. A custom
+// toolbar set may be defined in the configuration file with more or less entries.
+FCKConfig.ToolbarSets["Default"] = [
+ ['Source'],
+ ['Bold','Italic','Underline','-','Link'],
+ ['About']
+] ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/dragresizetable/fckplugin.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/dragresizetable/fckplugin.js
new file mode 100644
index 0000000..87061ff
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/dragresizetable/fckplugin.js
@@ -0,0 +1,529 @@
+var FCKDragTableHandler =
+{
+ "_DragState" : 0,
+ "_LeftCell" : null,
+ "_RightCell" : null,
+ "_MouseMoveMode" : 0, // 0 - find candidate cells for resizing, 1 - drag to resize
+ "_ResizeBar" : null,
+ "_OriginalX" : null,
+ "_MinimumX" : null,
+ "_MaximumX" : null,
+ "_LastX" : null,
+ "_TableMap" : null,
+ "_doc" : document,
+ "_IsInsideNode" : function( w, domNode, pos )
+ {
+ var myCoords = FCKTools.GetWindowPosition( w, domNode ) ;
+ var xMin = myCoords.x ;
+ var yMin = myCoords.y ;
+ var xMax = parseInt( xMin, 10 ) + parseInt( domNode.offsetWidth, 10 ) ;
+ var yMax = parseInt( yMin, 10 ) + parseInt( domNode.offsetHeight, 10 ) ;
+ if ( pos.x >= xMin && pos.x <= xMax && pos.y >= yMin && pos.y <= yMax )
+ return true;
+ return false;
+ },
+ "_GetBorderCells" : function( w, tableNode, tableMap, mouse )
+ {
+ // Enumerate all the cells in the table.
+ var cells = [] ;
+ for ( var i = 0 ; i < tableNode.rows.length ; i++ )
+ {
+ var r = tableNode.rows[i] ;
+ for ( var j = 0 ; j < r.cells.length ; j++ )
+ cells.push( r.cells[j] ) ;
+ }
+
+ if ( cells.length < 1 )
+ return null ;
+
+ // Get the cells whose right or left border is nearest to the mouse cursor's x coordinate.
+ var minRxDist = null ;
+ var lxDist = null ;
+ var minYDist = null ;
+ var rbCell = null ;
+ var lbCell = null ;
+ for ( var i = 0 ; i < cells.length ; i++ )
+ {
+ var pos = FCKTools.GetWindowPosition( w, cells[i] ) ;
+ var rightX = pos.x + parseInt( cells[i].clientWidth, 10 ) ;
+ var rxDist = mouse.x - rightX ;
+ var yDist = mouse.y - ( pos.y + ( cells[i].clientHeight / 2 ) ) ;
+ if ( minRxDist == null ||
+ ( Math.abs( rxDist ) <= Math.abs( minRxDist ) &&
+ ( minYDist == null || Math.abs( yDist ) <= Math.abs( minYDist ) ) ) )
+ {
+ minRxDist = rxDist ;
+ minYDist = yDist ;
+ rbCell = cells[i] ;
+ }
+ }
+ /*
+ var rowNode = FCKTools.GetElementAscensor( rbCell, "tr" ) ;
+ var cellIndex = rbCell.cellIndex + 1 ;
+ if ( cellIndex >= rowNode.cells.length )
+ return null ;
+ lbCell = rowNode.cells.item( cellIndex ) ;
+ */
+ var rowIdx = rbCell.parentNode.rowIndex ;
+ var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, rbCell ) ;
+ var colSpan = isNaN( rbCell.colSpan ) ? 1 : rbCell.colSpan ;
+ lbCell = tableMap[rowIdx][colIdx + colSpan] ;
+
+ if ( ! lbCell )
+ return null ;
+
+ // Abort if too far from the border.
+ lxDist = mouse.x - FCKTools.GetWindowPosition( w, lbCell ).x ;
+ if ( lxDist < 0 && minRxDist < 0 && minRxDist < -2 )
+ return null ;
+ if ( lxDist > 0 && minRxDist > 0 && lxDist > 3 )
+ return null ;
+
+ return { "leftCell" : rbCell, "rightCell" : lbCell } ;
+ },
+ "_GetResizeBarPosition" : function()
+ {
+ var row = FCKTools.GetElementAscensor( this._RightCell, "tr" ) ;
+ return FCKTableHandler._GetCellIndexSpan( this._TableMap, row.rowIndex, this._RightCell ) ;
+ },
+ "_ResizeBarMouseDownListener" : function( evt )
+ {
+ if ( FCKDragTableHandler._LeftCell )
+ FCKDragTableHandler._MouseMoveMode = 1 ;
+ if ( FCKBrowserInfo.IsIE )
+ FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 50 ;
+ else
+ FCKDragTableHandler._ResizeBar.style.opacity = 0.5 ;
+ FCKDragTableHandler._OriginalX = evt.clientX ;
+
+ // Calculate maximum and minimum x-coordinate delta.
+ var borderIndex = FCKDragTableHandler._GetResizeBarPosition() ;
+ var offset = FCKDragTableHandler._GetIframeOffset();
+ var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" );
+ var minX = null ;
+ var maxX = null ;
+ for ( var r = 0 ; r < FCKDragTableHandler._TableMap.length ; r++ )
+ {
+ var leftCell = FCKDragTableHandler._TableMap[r][borderIndex - 1] ;
+ var rightCell = FCKDragTableHandler._TableMap[r][borderIndex] ;
+ var leftPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, leftCell ) ;
+ var rightPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, rightCell ) ;
+ var leftPadding = FCKDragTableHandler._GetCellPadding( table, leftCell ) ;
+ var rightPadding = FCKDragTableHandler._GetCellPadding( table, rightCell ) ;
+ if ( minX == null || leftPosition.x + leftPadding > minX )
+ minX = leftPosition.x + leftPadding ;
+ if ( maxX == null || rightPosition.x + rightCell.clientWidth - rightPadding < maxX )
+ maxX = rightPosition.x + rightCell.clientWidth - rightPadding ;
+ }
+
+ FCKDragTableHandler._MinimumX = minX + offset.x ;
+ FCKDragTableHandler._MaximumX = maxX + offset.x ;
+ FCKDragTableHandler._LastX = null ;
+
+ if (evt.preventDefault)
+ evt.preventDefault();
+ else
+ evt.returnValue = false;
+ },
+ "_ResizeBarMouseUpListener" : function( evt )
+ {
+ FCKDragTableHandler._MouseMoveMode = 0 ;
+ FCKDragTableHandler._HideResizeBar() ;
+
+ if ( FCKDragTableHandler._LastX == null )
+ return ;
+
+ // Calculate the delta value.
+ var deltaX = FCKDragTableHandler._LastX - FCKDragTableHandler._OriginalX ;
+
+ // Then, build an array of current column width values.
+ // This algorithm can be very slow if the cells have insane colSpan values. (e.g. colSpan=1000).
+ var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ) ;
+ var colArray = [] ;
+ var tableMap = FCKDragTableHandler._TableMap ;
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ for ( var j = 0 ; j < tableMap[i].length ; j++ )
+ {
+ var cell = tableMap[i][j] ;
+ var width = FCKDragTableHandler._GetCellWidth( table, cell ) ;
+ var colSpan = isNaN( cell.colSpan) ? 1 : cell.colSpan ;
+ if ( colArray.length <= j )
+ colArray.push( { width : width / colSpan, colSpan : colSpan } ) ;
+ else
+ {
+ var guessItem = colArray[j] ;
+ if ( guessItem.colSpan > colSpan )
+ {
+ guessItem.width = width / colSpan ;
+ guessItem.colSpan = colSpan ;
+ }
+ }
+ }
+ }
+
+ // Find out the equivalent column index of the two cells selected for resizing.
+ colIndex = FCKDragTableHandler._GetResizeBarPosition() ;
+
+ // Note that colIndex must be at least 1 here, so it's safe to subtract 1 from it.
+ colIndex-- ;
+
+ // Modify the widths in the colArray according to the mouse coordinate delta value.
+ colArray[colIndex].width += deltaX ;
+ colArray[colIndex + 1].width -= deltaX ;
+
+ // Clear all cell widths, delete all <col> elements from the table.
+ for ( var r = 0 ; r < table.rows.length ; r++ )
+ {
+ var row = table.rows.item( r ) ;
+ for ( var c = 0 ; c < row.cells.length ; c++ )
+ {
+ var cell = row.cells.item( c ) ;
+ cell.width = "" ;
+ cell.style.width = "" ;
+ }
+ }
+ var colElements = table.getElementsByTagName( "col" ) ;
+ for ( var i = colElements.length - 1 ; i >= 0 ; i-- )
+ colElements[i].parentNode.removeChild( colElements[i] ) ;
+
+ // Set new cell widths.
+ var processedCells = [] ;
+ for ( var i = 0 ; i < tableMap.length ; i++ )
+ {
+ for ( var j = 0 ; j < tableMap[i].length ; j++ )
+ {
+ var cell = tableMap[i][j] ;
+ if ( cell._Processed )
+ continue ;
+ if ( tableMap[i][j-1] != cell )
+ cell.width = colArray[j].width ;
+ else
+ cell.width = parseInt( cell.width, 10 ) + parseInt( colArray[j].width, 10 ) ;
+ if ( tableMap[i][j+1] != cell )
+ {
+ processedCells.push( cell ) ;
+ cell._Processed = true ;
+ }
+ }
+ }
+ for ( var i = 0 ; i < processedCells.length ; i++ )
+ {
+ if ( FCKBrowserInfo.IsIE )
+ processedCells[i].removeAttribute( '_Processed' ) ;
+ else
+ delete processedCells[i]._Processed ;
+ }
+
+ FCKDragTableHandler._LastX = null ;
+ },
+ "_ResizeBarMouseMoveListener" : function( evt )
+ {
+ if ( FCKDragTableHandler._MouseMoveMode == 0 )
+ return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
+ else
+ return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+ },
+ // Calculate the padding of a table cell.
+ // It returns the value of paddingLeft + paddingRight of a table cell.
+ // This function is used, in part, to calculate the width parameter that should be used for setting cell widths.
+ // The equation in question is clientWidth = paddingLeft + paddingRight + width.
+ // So that width = clientWidth - paddingLeft - paddingRight.
+ // The return value of this function must be pixel accurate acorss all supported browsers, so be careful if you need to modify it.
+ "_GetCellPadding" : function( table, cell )
+ {
+ var attrGuess = parseInt( table.cellPadding, 10 ) * 2 ;
+ var cssGuess = null ;
+ if ( typeof( window.getComputedStyle ) == "function" )
+ {
+ var styleObj = window.getComputedStyle( cell, null ) ;
+ cssGuess = parseInt( styleObj.getPropertyValue( "padding-left" ), 10 ) +
+ parseInt( styleObj.getPropertyValue( "padding-right" ), 10 ) ;
+ }
+ else
+ cssGuess = parseInt( cell.currentStyle.paddingLeft, 10 ) + parseInt (cell.currentStyle.paddingRight, 10 ) ;
+
+ var cssRuntime = cell.style.padding ;
+ if ( isFinite( cssRuntime ) )
+ cssGuess = parseInt( cssRuntime, 10 ) * 2 ;
+ else
+ {
+ cssRuntime = cell.style.paddingLeft ;
+ if ( isFinite( cssRuntime ) )
+ cssGuess = parseInt( cssRuntime, 10 ) ;
+ cssRuntime = cell.style.paddingRight ;
+ if ( isFinite( cssRuntime ) )
+ cssGuess += parseInt( cssRuntime, 10 ) ;
+ }
+
+ attrGuess = parseInt( attrGuess, 10 ) ;
+ cssGuess = parseInt( cssGuess, 10 ) ;
+ if ( isNaN( attrGuess ) )
+ attrGuess = 0 ;
+ if ( isNaN( cssGuess ) )
+ cssGuess = 0 ;
+ return Math.max( attrGuess, cssGuess ) ;
+ },
+ // Calculate the real width of the table cell.
+ // The real width of the table cell is the pixel width that you can set to the width attribute of the table cell and after
+ // that, the table cell should be of exactly the same width as before.
+ // The real width of a table cell can be calculated as:
+ // width = clientWidth - paddingLeft - paddingRight.
+ "_GetCellWidth" : function( table, cell )
+ {
+ var clientWidth = cell.clientWidth ;
+ if ( isNaN( clientWidth ) )
+ clientWidth = 0 ;
+ return clientWidth - this._GetCellPadding( table, cell ) ;
+ },
+ "MouseMoveListener" : function( FCK, evt )
+ {
+ if ( FCKDragTableHandler._MouseMoveMode == 0 )
+ return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
+ else
+ return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+ },
+ "_MouseFindHandler" : function( FCK, evt )
+ {
+ if ( FCK.MouseDownFlag )
+ return ;
+ var node = evt.srcElement || evt.target ;
+ try
+ {
+ if ( ! node || node.nodeType != 1 )
+ {
+ this._HideResizeBar() ;
+ return ;
+ }
+ }
+ catch ( e )
+ {
+ this._HideResizeBar() ;
+ return ;
+ }
+
+ // Since this function might be called from the editing area iframe or the outer fckeditor iframe,
+ // the mouse point coordinates from evt.clientX/Y can have different reference points.
+ // We need to resolve the mouse pointer position relative to the editing area iframe.
+ var mouseX = evt.clientX ;
+ var mouseY = evt.clientY ;
+ if ( FCKTools.GetElementDocument( node ) == document )
+ {
+ var offset = this._GetIframeOffset() ;
+ mouseX -= offset.x ;
+ mouseY -= offset.y ;
+ }
+
+
+ if ( this._ResizeBar && this._LeftCell )
+ {
+ var leftPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._LeftCell ) ;
+ var rightPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._RightCell ) ;
+ var rxDist = mouseX - ( leftPos.x + this._LeftCell.clientWidth ) ;
+ var lxDist = mouseX - rightPos.x ;
+ var inRangeFlag = false ;
+ if ( lxDist >= 0 && rxDist <= 0 )
+ inRangeFlag = true ;
+ else if ( rxDist > 0 && lxDist <= 3 )
+ inRangeFlag = true ;
+ else if ( lxDist < 0 && rxDist >= -2 )
+ inRangeFlag = true ;
+ if ( inRangeFlag )
+ {
+ this._ShowResizeBar( FCK.EditorWindow,
+ FCKTools.GetElementAscensor( this._LeftCell, "table" ),
+ { "x" : mouseX, "y" : mouseY } ) ;
+ return ;
+ }
+ }
+
+ var tagName = node.tagName.toLowerCase() ;
+ if ( tagName != "table" && tagName != "td" && tagName != "th" )
+ {
+ if ( this._LeftCell )
+ this._LeftCell = this._RightCell = this._TableMap = null ;
+ this._HideResizeBar() ;
+ return ;
+ }
+ node = FCKTools.GetElementAscensor( node, "table" ) ;
+ var tableMap = FCKTableHandler._CreateTableMap( node ) ;
+ var cellTuple = this._GetBorderCells( FCK.EditorWindow, node, tableMap, { "x" : mouseX, "y" : mouseY } ) ;
+
+ if ( cellTuple == null )
+ {
+ if ( this._LeftCell )
+ this._LeftCell = this._RightCell = this._TableMap = null ;
+ this._HideResizeBar() ;
+ }
+ else
+ {
+ this._LeftCell = cellTuple["leftCell"] ;
+ this._RightCell = cellTuple["rightCell"] ;
+ this._TableMap = tableMap ;
+ this._ShowResizeBar( FCK.EditorWindow,
+ FCKTools.GetElementAscensor( this._LeftCell, "table" ),
+ { "x" : mouseX, "y" : mouseY } ) ;
+ }
+ },
+ "_MouseDragHandler" : function( FCK, evt )
+ {
+ var mouse = { "x" : evt.clientX, "y" : evt.clientY } ;
+
+ // Convert mouse coordinates in reference to the outer iframe.
+ var node = evt.srcElement || evt.target ;
+ if ( FCKTools.GetElementDocument( node ) == FCK.EditorDocument )
+ {
+ var offset = this._GetIframeOffset() ;
+ mouse.x += offset.x ;
+ mouse.y += offset.y ;
+ }
+
+ // Calculate the mouse position delta and see if we've gone out of range.
+ if ( mouse.x >= this._MaximumX - 5 )
+ mouse.x = this._MaximumX - 5 ;
+ if ( mouse.x <= this._MinimumX + 5 )
+ mouse.x = this._MinimumX + 5 ;
+
+ var docX = mouse.x + FCKTools.GetScrollPosition( window ).X ;
+ this._ResizeBar.style.left = ( docX - this._ResizeBar.offsetWidth / 2 ) + "px" ;
+ this._LastX = mouse.x ;
+ },
+ "_ShowResizeBar" : function( w, table, mouse )
+ {
+ if ( this._ResizeBar == null )
+ {
+ this._ResizeBar = this._doc.createElement( "div" ) ;
+ var paddingBar = this._ResizeBar ;
+ var paddingStyles = { 'position' : 'absolute', 'cursor' : 'e-resize' } ;
+ if ( FCKBrowserInfo.IsIE )
+ paddingStyles.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=10,enabled=true)" ;
+ else
+ paddingStyles.opacity = 0.10 ;
+ FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
+ this._avoidStyles( paddingBar );
+ paddingBar.setAttribute('_fcktemp', true);
+ this._doc.body.appendChild( paddingBar ) ;
+ FCKTools.AddEventListener( paddingBar, "mousemove", this._ResizeBarMouseMoveListener ) ;
+ FCKTools.AddEventListener( paddingBar, "mousedown", this._ResizeBarMouseDownListener ) ;
+ FCKTools.AddEventListener( document, "mouseup", this._ResizeBarMouseUpListener ) ;
+ FCKTools.AddEventListener( FCK.EditorDocument, "mouseup", this._ResizeBarMouseUpListener ) ;
+
+ // IE doesn't let the tranparent part of the padding block to receive mouse events unless there's something inside.
+ // So we need to create a spacer image to fill the block up.
+ var filler = this._doc.createElement( "img" ) ;
+ filler.setAttribute('_fcktemp', true);
+ filler.border = 0 ;
+ filler.src = FCKConfig.BasePath + "images/spacer.gif" ;
+ filler.style.position = "absolute" ;
+ paddingBar.appendChild( filler ) ;
+
+ // Disable drag and drop, and selection for the filler image.
+ var disabledListener = function( evt )
+ {
+ if ( evt.preventDefault )
+ evt.preventDefault() ;
+ else
+ evt.returnValue = false ;
+ }
+ FCKTools.AddEventListener( filler, "dragstart", disabledListener ) ;
+ FCKTools.AddEventListener( filler, "selectstart", disabledListener ) ;
+ }
+
+ var paddingBar = this._ResizeBar ;
+ var offset = this._GetIframeOffset() ;
+ var tablePos = this._GetTablePosition( w, table ) ;
+ var barHeight = table.offsetHeight ;
+ var barTop = offset.y + tablePos.y ;
+ // Do not let the resize bar intrude into the toolbar area.
+ if ( tablePos.y < 0 )
+ {
+ barHeight += tablePos.y ;
+ barTop -= tablePos.y ;
+ }
+ var bw = parseInt( table.border, 10 ) ;
+ if ( isNaN( bw ) )
+ bw = 0 ;
+ var cs = parseInt( table.cellSpacing, 10 ) ;
+ if ( isNaN( cs ) )
+ cs = 0 ;
+ var barWidth = Math.max( bw+100, cs+100 ) ;
+ var paddingStyles =
+ {
+ 'top' : barTop + 'px',
+ 'height' : barHeight + 'px',
+ 'width' : barWidth + 'px',
+ 'left' : ( offset.x + mouse.x + FCKTools.GetScrollPosition( w ).X - barWidth / 2 ) + 'px'
+ } ;
+ if ( FCKBrowserInfo.IsIE )
+ paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ;
+ else
+ paddingStyles.opacity = 0.1 ;
+
+ FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
+ var filler = paddingBar.getElementsByTagName( "img" )[0] ;
+
+ FCKDomTools.SetElementStyles( filler,
+ {
+ width : paddingBar.offsetWidth + 'px',
+ height : barHeight + 'px'
+ } ) ;
+
+ barWidth = Math.max( bw, cs, 3 ) ;
+ var visibleBar = null ;
+ if ( paddingBar.getElementsByTagName( "div" ).length < 1 )
+ {
+ visibleBar = this._doc.createElement( "div" ) ;
+ this._avoidStyles( visibleBar );
+ visibleBar.setAttribute('_fcktemp', true);
+ paddingBar.appendChild( visibleBar ) ;
+ }
+ else
+ visibleBar = paddingBar.getElementsByTagName( "div" )[0] ;
+
+ FCKDomTools.SetElementStyles( visibleBar,
+ {
+ position : 'absolute',
+ backgroundColor : 'blue',
+ width : barWidth + 'px',
+ height : barHeight + 'px',
+ left : '50px',
+ top : '0px'
+ } ) ;
+ },
+ "_HideResizeBar" : function()
+ {
+ if ( this._ResizeBar )
+ // IE bug: display : none does not hide the resize bar for some reason.
+ // so set the position to somewhere invisible.
+ FCKDomTools.SetElementStyles( this._ResizeBar,
+ {
+ top : '-100000px',
+ left : '-100000px'
+ } ) ;
+ },
+ "_GetIframeOffset" : function ()
+ {
+ return FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+ },
+ "_GetTablePosition" : function ( w, table )
+ {
+ return FCKTools.GetWindowPosition( w, table ) ;
+ },
+ "_avoidStyles" : function( element )
+ {
+ FCKDomTools.SetElementStyles( element,
+ {
+ padding : '0',
+ backgroundImage : 'none',
+ border : '0'
+ } ) ;
+ },
+ "Reset" : function()
+ {
+ FCKDragTableHandler._LeftCell = FCKDragTableHandler._RightCell = FCKDragTableHandler._TableMap = null ;
+ }
+
+};
+
+FCK.Events.AttachEvent( "OnMouseMove", FCKDragTableHandler.MouseMoveListener ) ;
+FCK.Events.AttachEvent( "OnAfterSetHTML", FCKDragTableHandler.Reset ) ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fck_placeholder.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fck_placeholder.html
new file mode 100644
index 0000000..0f83984
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fck_placeholder.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placeholder Plugin.
+-->
+<html>
+ <head>
+ <title>Placeholder Properties</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta content="noindex, nofollow" name="robots">
+ <script src="../../dialog/common/fck_dialog_common.js" type="text/javascript"></script>
+ <script language="javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+var FCKPlaceholders = oEditor.FCKPlaceholders ;
+
+window.onload = function ()
+{
+ // First of all, translate the dialog box texts
+ oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+ LoadSelected() ;
+
+ // Show the "Ok" button.
+ dialog.SetOkButton( true ) ;
+
+ // Select text field on load.
+ SelectField( 'txtName' ) ;
+}
+
+var eSelected = dialog.Selection.GetSelectedElement() ;
+
+function LoadSelected()
+{
+ if ( !eSelected )
+ return ;
+
+ if ( eSelected.tagName == 'SPAN' && eSelected._fckplaceholder )
+ document.getElementById('txtName').value = eSelected._fckplaceholder ;
+ else
+ eSelected == null ;
+}
+
+function Ok()
+{
+ var sValue = document.getElementById('txtName').value ;
+
+ if ( eSelected && eSelected._fckplaceholder == sValue )
+ return true ;
+
+ if ( sValue.length == 0 )
+ {
+ alert( FCKLang.PlaceholderErrNoName ) ;
+ return false ;
+ }
+
+ if ( FCKPlaceholders.Exist( sValue ) )
+ {
+ alert( FCKLang.PlaceholderErrNameInUse ) ;
+ return false ;
+ }
+
+ FCKPlaceholders.Add( sValue ) ;
+ return true ;
+}
+
+ </script>
+ </head>
+ <body scroll="no" style="OVERFLOW: hidden">
+ <table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+ <tr>
+ <td>
+ <table cellSpacing="0" cellPadding="0" align="center" border="0">
+ <tr>
+ <td>
+ <span fckLang="PlaceholderDlgName">Placeholder Name</span><br>
+ <input id="txtName" type="text">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fckplugin.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fckplugin.js
new file mode 100644
index 0000000..b61a5b3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fckplugin.js
@@ -0,0 +1,187 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Plugin to insert "Placeholders" in the editor.
+ */
+
+// Register the related command.
+FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 160 ) ) ;
+
+// Create the "Plaholder" toolbar button.
+var oPlaceholderItem = new FCKToolbarButton( 'Placeholder', FCKLang.PlaceholderBtn ) ;
+oPlaceholderItem.IconPath = FCKPlugins.Items['placeholder'].Path + 'placeholder.gif' ;
+
+FCKToolbarItems.RegisterItem( 'Placeholder', oPlaceholderItem ) ;
+
+
+// The object used for all Placeholder operations.
+var FCKPlaceholders = new Object() ;
+
+// Add a new placeholder at the actual selection.
+FCKPlaceholders.Add = function( name )
+{
+ var oSpan = FCK.InsertElement( 'span' ) ;
+ this.SetupSpan( oSpan, name ) ;
+}
+
+FCKPlaceholders.SetupSpan = function( span, name )
+{
+ span.innerHTML = '[[ ' + name + ' ]]' ;
+
+ span.style.backgroundColor = '#ffff00' ;
+ span.style.color = '#000000' ;
+
+ if ( FCKBrowserInfo.IsGecko )
+ span.style.cursor = 'default' ;
+
+ span._fckplaceholder = name ;
+ span.contentEditable = false ;
+
+ // To avoid it to be resized.
+ span.onresizestart = function()
+ {
+ FCK.EditorWindow.event.returnValue = false ;
+ return false ;
+ }
+}
+
+// On Gecko we must do this trick so the user select all the SPAN when clicking on it.
+FCKPlaceholders._SetupClickListener = function()
+{
+ FCKPlaceholders._ClickListener = function( e )
+ {
+ if ( e.target.tagName == 'SPAN' && e.target._fckplaceholder )
+ FCKSelection.SelectNode( e.target ) ;
+ }
+
+ FCK.EditorDocument.addEventListener( 'click', FCKPlaceholders._ClickListener, true ) ;
+}
+
+// Open the Placeholder dialog on double click.
+FCKPlaceholders.OnDoubleClick = function( span )
+{
+ if ( span.tagName == 'SPAN' && span._fckplaceholder )
+ FCKCommands.GetCommand( 'Placeholder' ).Execute() ;
+}
+
+FCK.RegisterDoubleClickHandler( FCKPlaceholders.OnDoubleClick, 'SPAN' ) ;
+
+// Check if a Placholder name is already in use.
+FCKPlaceholders.Exist = function( name )
+{
+ var aSpans = FCK.EditorDocument.getElementsByTagName( 'SPAN' ) ;
+
+ for ( var i = 0 ; i < aSpans.length ; i++ )
+ {
+ if ( aSpans[i]._fckplaceholder == name )
+ return true ;
+ }
+
+ return false ;
+}
+
+if ( FCKBrowserInfo.IsIE )
+{
+ FCKPlaceholders.Redraw = function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return ;
+
+ var aPlaholders = FCK.EditorDocument.body.innerText.match( /\[\[[^\[\]]+\]\]/g ) ;
+ if ( !aPlaholders )
+ return ;
+
+ var oRange = FCK.EditorDocument.body.createTextRange() ;
+
+ for ( var i = 0 ; i < aPlaholders.length ; i++ )
+ {
+ if ( oRange.findText( aPlaholders[i] ) )
+ {
+ var sName = aPlaholders[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+ oRange.pasteHTML( '<span style="color: #000000; background-color: #ffff00" contenteditable="false" _fckplaceholder="' + sName + '">' + aPlaholders[i] + '</span>' ) ;
+ }
+ }
+ }
+}
+else
+{
+ FCKPlaceholders.Redraw = function()
+ {
+ if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+ return ;
+
+ var oInteractor = FCK.EditorDocument.createTreeWalker( FCK.EditorDocument.body, NodeFilter.SHOW_TEXT, FCKPlaceholders._AcceptNode, true ) ;
+
+ var aNodes = new Array() ;
+
+ while ( ( oNode = oInteractor.nextNode() ) )
+ {
+ aNodes[ aNodes.length ] = oNode ;
+ }
+
+ for ( var n = 0 ; n < aNodes.length ; n++ )
+ {
+ var aPieces = aNodes[n].nodeValue.split( /(\[\[[^\[\]]+\]\])/g ) ;
+
+ for ( var i = 0 ; i < aPieces.length ; i++ )
+ {
+ if ( aPieces[i].length > 0 )
+ {
+ if ( aPieces[i].indexOf( '[[' ) == 0 )
+ {
+ var sName = aPieces[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+
+ var oSpan = FCK.EditorDocument.createElement( 'span' ) ;
+ FCKPlaceholders.SetupSpan( oSpan, sName ) ;
+
+ aNodes[n].parentNode.insertBefore( oSpan, aNodes[n] ) ;
+ }
+ else
+ aNodes[n].parentNode.insertBefore( FCK.EditorDocument.createTextNode( aPieces[i] ) , aNodes[n] ) ;
+ }
+ }
+
+ aNodes[n].parentNode.removeChild( aNodes[n] ) ;
+ }
+
+ FCKPlaceholders._SetupClickListener() ;
+ }
+
+ FCKPlaceholders._AcceptNode = function( node )
+ {
+ if ( /\[\[[^\[\]]+\]\]/.test( node.nodeValue ) )
+ return NodeFilter.FILTER_ACCEPT ;
+ else
+ return NodeFilter.FILTER_SKIP ;
+ }
+}
+
+FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKPlaceholders.Redraw ) ;
+
+// We must process the SPAN tags to replace then with the real resulting value of the placeholder.
+FCKXHtml.TagProcessors['span'] = function( node, htmlNode )
+{
+ if ( htmlNode._fckplaceholder )
+ node = FCKXHtml.XML.createTextNode( '[[' + htmlNode._fckplaceholder + ']]' ) ;
+ else
+ FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+ return node ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/de.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/de.js
new file mode 100644
index 0000000..d55bee4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/de.js
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder German language file.
+ */
+FCKLang.PlaceholderBtn = 'Einfügen/editieren Platzhalter' ;
+FCKLang.PlaceholderDlgTitle = 'Platzhalter Eigenschaften' ;
+FCKLang.PlaceholderDlgName = 'Platzhalter Name' ;
+FCKLang.PlaceholderErrNoName = 'Bitte den Namen des Platzhalters schreiben' ;
+FCKLang.PlaceholderErrNameInUse = 'Der angegebene Namen ist schon in Gebrauch' ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/en.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/en.js
new file mode 100644
index 0000000..466c0c8
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/en.js
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder English language file.
+ */
+FCKLang.PlaceholderBtn = 'Insert/Edit Placeholder' ;
+FCKLang.PlaceholderDlgTitle = 'Placeholder Properties' ;
+FCKLang.PlaceholderDlgName = 'Placeholder Name' ;
+FCKLang.PlaceholderErrNoName = 'Please type the placeholder name' ;
+FCKLang.PlaceholderErrNameInUse = 'The specified name is already in use' ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/es.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/es.js
new file mode 100644
index 0000000..7a0e0e0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/es.js
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Spanish language file.
+ */
+FCKLang.PlaceholderBtn = 'Insertar/Editar contenedor' ;
+FCKLang.PlaceholderDlgTitle = 'Propiedades del contenedor ' ;
+FCKLang.PlaceholderDlgName = 'Nombre de contenedor' ;
+FCKLang.PlaceholderErrNoName = 'Por favor escriba el nombre de contenedor' ;
+FCKLang.PlaceholderErrNameInUse = 'El nombre especificado ya esta en uso' ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/fr.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/fr.js
new file mode 100644
index 0000000..4a2bd20
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/fr.js
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placeholder French language file.
+ */
+FCKLang.PlaceholderBtn = "Insérer/Modifier l'Espace réservé" ;
+FCKLang.PlaceholderDlgTitle = "Propriétés de l'Espace réservé" ;
+FCKLang.PlaceholderDlgName = "Nom de l'Espace réservé" ;
+FCKLang.PlaceholderErrNoName = "Veuillez saisir le nom de l'Espace réservé" ;
+FCKLang.PlaceholderErrNameInUse = "Ce nom est déjà utilisé" ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/it.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/it.js
new file mode 100644
index 0000000..007e2d0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/it.js
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Italian language file.
+ */
+FCKLang.PlaceholderBtn = 'Aggiungi/Modifica Placeholder' ;
+FCKLang.PlaceholderDlgTitle = 'Proprietà del Placeholder' ;
+FCKLang.PlaceholderDlgName = 'Nome del Placeholder' ;
+FCKLang.PlaceholderErrNoName = 'Digitare il nome del placeholder' ;
+FCKLang.PlaceholderErrNameInUse = 'Il nome inserito è già in uso' ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/pl.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/pl.js
new file mode 100644
index 0000000..90fa3e9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/pl.js
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Polish language file.
+ */
+FCKLang.PlaceholderBtn = 'Wstaw/Edytuj nagłówek' ;
+FCKLang.PlaceholderDlgTitle = 'Właśności nagłówka' ;
+FCKLang.PlaceholderDlgName = 'Nazwa nagłówka' ;
+FCKLang.PlaceholderErrNoName = 'Proszę wprowadzić nazwę nagłówka' ;
+FCKLang.PlaceholderErrNameInUse = 'Podana nazwa jest już w użyciu' ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/placeholder.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/placeholder.gif
new file mode 100644
index 0000000..c07078c
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/placeholder.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/simplecommands/fckplugin.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/simplecommands/fckplugin.js
new file mode 100644
index 0000000..c43feb3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/simplecommands/fckplugin.js
@@ -0,0 +1,29 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This plugin register Toolbar items for the combos modifying the style to
+ * not show the box.
+ */
+
+FCKToolbarItems.RegisterItem( 'SourceSimple' , new FCKToolbarButton( 'Source', FCKLang.Source, null, FCK_TOOLBARITEM_ONLYICON, true, true, 1 ) ) ;
+FCKToolbarItems.RegisterItem( 'StyleSimple' , new FCKToolbarStyleCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontNameSimple' , new FCKToolbarFontsCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontSizeSimple' , new FCKToolbarFontSizeCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontFormatSimple', new FCKToolbarFontFormatCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/tablecommands/fckplugin.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/tablecommands/fckplugin.js
new file mode 100644
index 0000000..867b1d0
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/tablecommands/fckplugin.js
@@ -0,0 +1,33 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This plugin register the required Toolbar items to be able to insert the
+ * table commands in the toolbar.
+ */
+
+FCKToolbarItems.RegisterItem( 'TableInsertRowAfter' , new FCKToolbarButton( 'TableInsertRowAfter' , FCKLang.InsertRowAfter, null, null, null, true, 62 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteRows' , new FCKToolbarButton( 'TableDeleteRows' , FCKLang.DeleteRows, null, null, null, true, 63 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertColumnAfter' , new FCKToolbarButton( 'TableInsertColumnAfter' , FCKLang.InsertColumnAfter, null, null, null, true, 64 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteColumns' , new FCKToolbarButton( 'TableDeleteColumns', FCKLang.DeleteColumns, null, null, null, true, 65 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertCellAfter' , new FCKToolbarButton( 'TableInsertCellAfter' , FCKLang.InsertCellAfter, null, null, null, true, 58 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteCells' , new FCKToolbarButton( 'TableDeleteCells' , FCKLang.DeleteCells, null, null, null, true, 59 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableMergeCells' , new FCKToolbarButton( 'TableMergeCells' , FCKLang.MergeCells, null, null, null, true, 60 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableHorizontalSplitCell' , new FCKToolbarButton( 'TableHorizontalSplitCell' , FCKLang.SplitCell, null, null, null, true, 61 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableCellProp' , new FCKToolbarButton( 'TableCellProp' , FCKLang.CellProperties, null, null, null, true, 57 ) ) ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/_fckviewstrips.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/_fckviewstrips.html
new file mode 100644
index 0000000..e2337b7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/_fckviewstrips.html
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Useful page that enumerates all icons in the skins strips.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>FCKeditor - View Icons Strips</title>
+ <style type="text/css">
+ .TB_Button_Image
+ {
+ overflow: hidden;
+ width: 16px;
+ height: 16px;
+ margin: 3px;
+ background-repeat: no-repeat;
+ }
+
+ .TB_Button_Image img
+ {
+ position: relative;
+ }
+ </style>
+ <script type="text/javascript">
+
+window.onload = function()
+{
+ var eImg1 = document.createElement( 'img' ) ;
+ eImg1.onload = Img_OnLoad ;
+ eImg1.src = 'default/fck_strip.gif' ;
+
+ var eImg2 = document.createElement( 'img' ) ;
+ eImg2.onload = Img_OnLoad ;
+ eImg2.src = 'office2003/fck_strip.gif' ;
+
+ var eImg3 = document.createElement( 'img' ) ;
+ eImg3.onload = Img_OnLoad ;
+ eImg3.src = 'silver/fck_strip.gif' ;
+}
+
+var iTotalStrips = 3 ;
+var iMaxHeight = 0 ;
+
+function Img_OnLoad()
+{
+ if ( iMaxHeight < this.height )
+ iMaxHeight = this.height ;
+
+ iTotalStrips-- ;
+
+ if ( iTotalStrips == 0 )
+ LoadIcons( iMaxHeight / 16 ) ;
+}
+
+function LoadIcons( total )
+{
+ var xIconsTable = document.getElementById( 'xIconsTable' ) ;
+
+ for ( var i = 0 ; i < total ; i++ )
+ {
+ var eRow = xIconsTable.insertRow(-1) ;
+
+ var eCell = eRow.insertCell(-1) ;
+ eCell.innerHTML = i + 1 ;
+
+ eCell = eRow.insertCell(-1) ;
+ eCell.align = 'center' ;
+ eCell.style.border = '#dcdcdc 1px solid' ;
+ eCell.innerHTML = '<div class="TB_Button_Image"><img src="default/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+
+ eCell = eRow.insertCell(-1) ;
+ eCell.align = 'center' ;
+ eCell.style.border = '#dcdcdc 1px solid' ;
+ eCell.innerHTML = '<div class="TB_Button_Image"><img src="office2003/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+
+ eCell = eRow.insertCell(-1) ;
+ eCell.align = 'center' ;
+ eCell.style.border = '#dcdcdc 1px solid' ;
+ eCell.innerHTML = '<div class="TB_Button_Image"><img src="silver/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+ }
+}
+
+ </script>
+</head>
+<body>
+ <table id="xIconsTable">
+ <tr>
+ <td rowspan="2">
+ Index</td>
+ <td align="center" colspan="3">
+ Skins</td>
+ </tr>
+ <tr>
+ <td width="80" align="center">
+ default</td>
+ <td width="80" align="center">
+ office2003</td>
+ <td width="80" align="center">
+ silver</td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog.css
new file mode 100644
index 0000000..6b149d7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog.css
@@ -0,0 +1,402 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+ background-color: transparent;
+ margin: 0px;
+ padding: 0px;
+}
+
+body
+{
+ padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+ background-color: #f1f1e3;
+}
+
+.PopupBody
+{
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+ background-color: transparent;
+ padding: 0px;
+}
+
+#header
+{
+ cursor: move;
+}
+
+.PopupTitle
+{
+ font-weight: bold;
+ font-size: 14pt;
+ color: #737357;
+ background-color: #e3e3c7;
+ padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+ position: absolute;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ border-top: #d5d59d 1px solid;
+ background-color: #e3e3c7;
+ padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+ border: #737357 1px solid;
+ color: #3b3b1f;
+ background-color: #c7c78f;
+}
+
+#btnOk
+{
+ width: 100px;
+}
+
+.DarkBackground
+{
+ background-color: #eaead1;
+}
+
+.LightBackground
+{
+ background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+ border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+ color: #737357;
+ background-color: #e3e3c7;
+}
+
+.PopupTabEmptyArea
+{
+ padding-left: 10px;
+ border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+ border-right: #d5d59d 1px solid;
+ border-top: #d5d59d 1px solid;
+ border-left: #d5d59d 1px solid;
+ padding: 3px 5px 3px 5px;
+ color: #737357;
+}
+
+.PopupTab
+{
+ margin-top: 1px;
+ border-bottom: #d5d59d 1px solid;
+ cursor: pointer;
+ cursor: hand;
+}
+
+.PopupTabSelected
+{
+ font-weight: bold;
+ cursor: default;
+ padding-top: 4px;
+ border-bottom: #f1f1e3 1px solid;
+ background-color: #f1f1e3;
+}
+
+.PopupSelectionBox
+{
+ border: #ff9933 1px solid !important;
+ background-color: #fffacd !important;
+ cursor: pointer;
+ cursor: hand;
+}
+
+#tdBrowse
+{
+ vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+ position: absolute;
+ top: 2px;
+ left: 16px;
+ right: 16px;
+ bottom: 20px;
+ background-color: #f1f1e3;
+ overflow: hidden;
+ z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+ position: absolute;
+ background-image: url(images/sprites.png);
+ background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+ background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+ position: absolute;
+ background-image: url(images/dialog.sides.png);
+ background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+ background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+ position: absolute;
+ background-image: url(images/dialog.sides.rtl.png);
+ background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+ background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+ top: 0px;
+ left: 0px;
+ width: 16px;
+ height: 16px;
+ background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+ background-position: -16px -397px;
+}
+
+.tr
+{
+ top: 0px;
+ right: 0px;
+ width: 16px;
+ height: 16px;
+ background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+ background-position: -16px -457px;
+}
+
+.tc
+{
+ top: 0px;
+ right: 16px;
+ left: 16px;
+ height: 16px;
+ background-position: 0px -136px;
+ background-repeat: repeat-x;
+}
+
+.ml
+{
+ top: 16px;
+ left: 0px;
+ width: 16px;
+ bottom: 51px;
+ background-position: 0px 0px;
+}
+
+.mr
+{
+ top: 16px;
+ right: 0px;
+ width: 16px;
+ bottom: 51px;
+ background-position: -16px 0px;
+}
+
+.bl
+{
+ bottom: 0px;
+ left: 0px;
+ width: 30px;
+ height: 51px;
+ background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+ background-position: -16px -517px;
+}
+
+.br
+{
+ bottom: 0px;
+ right: 0px;
+ width: 30px;
+ height: 51px;
+ background-position: -16px -263px;
+}
+
+.rtl .br
+{
+ background-position: -16px -584px;
+}
+
+.bc
+{
+ bottom: 0px;
+ right: 30px;
+ left: 30px;
+ height: 51px;
+ background-position: 0px -330px;
+ background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 12;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+ position: absolute;
+ top: 0px;
+ left: 14px;
+ right: 14px;
+ bottom: 18px;
+ z-index: 11;
+}
+
+#closeButton
+{
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ margin-top: 5px;
+ margin-right: 10px;
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+ background-image: url(images/sprites.png);
+ background-repeat: no-repeat;
+ background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+ cursor: hand;
+ background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+ right: auto;
+ left: 10px;
+ margin-right: 0px;
+}
+
+#closeButton:hover
+{
+ background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+ z-index: 10;
+}
+
+#throbberBlock div
+{
+ float: left;
+ width: 8px;
+ height: 9px;
+ margin-left: 2px;
+ margin-right: 2px;
+ font-size: 1px; /* IE6 */
+}
+
+/*
+ Color Gradient Generator:
+ http://www.herethere.net/~samson/php/color_gradient/?cbegin=737357&cend=E3E3C7&steps=4
+*/
+
+.throbber_1
+{
+ background-color: #737357;
+}
+
+.throbber_2
+{
+ background-color: #8f8f73;
+}
+
+.throbber_3
+{
+ background-color: #abab8f;
+}
+
+.throbber_4
+{
+ background-color: #c7c7ab;
+}
+
+.throbber_5
+{
+ background-color: #e3e3c7;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog_ie6.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog_ie6.js
new file mode 100644
index 0000000..7599800
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog_ie6.js
@@ -0,0 +1,110 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+ // IE6 doens't handle absolute positioning properly (it is always in quirks
+ // mode). This function fixes the sizes and positions of many elements that
+ // compose the skin (this is skin specific).
+ var fixSizes = window.DoResizeFixes = function()
+ {
+ var fckDlg = window.document.body ;
+
+ for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+ {
+ var child = fckDlg.childNodes[i] ;
+ switch ( child.className )
+ {
+ case 'contents' :
+ child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ; // -left -right
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ; // -bottom -top
+ break ;
+
+ case 'blocker' :
+ case 'cover' :
+ child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ; // -left -right + 4
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ; // -bottom -top + 4
+ break ;
+
+ case 'tr' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+ break ;
+
+ case 'tc' :
+ child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+ break ;
+
+ case 'ml' :
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+ break ;
+
+ case 'mr' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+ break ;
+
+ case 'bl' :
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+
+ case 'br' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+
+ case 'bc' :
+ child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+ }
+ }
+ }
+
+ var closeButtonOver = function()
+ {
+ this.style.backgroundPosition = '-16px -687px' ;
+ } ;
+
+ var closeButtonOut = function()
+ {
+ this.style.backgroundPosition = '-16px -651px' ;
+ } ;
+
+ var fixCloseButton = function()
+ {
+ var closeButton = document.getElementById ( 'closeButton' ) ;
+
+ closeButton.onmouseover = closeButtonOver ;
+ closeButton.onmouseout = closeButtonOut ;
+ }
+
+ var onLoad = function()
+ {
+ fixSizes() ;
+ fixCloseButton() ;
+
+ window.attachEvent( 'onresize', fixSizes ) ;
+ window.detachEvent( 'onload', onLoad ) ;
+ }
+
+ window.attachEvent( 'onload', onLoad ) ;
+
+})() ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_editor.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_editor.css
new file mode 100644
index 0000000..436131e
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_editor.css
@@ -0,0 +1,464 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+ ### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+ padding: 1px;
+ margin: 0;
+ background-color: #ffffff;
+}
+
+#xEditingArea
+{
+ border: #696969 1px solid;
+}
+
+.SourceField
+{
+ padding: 5px;
+ margin: 0px;
+ font-family: Monospace;
+}
+
+/*
+ Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+ cursor: default;
+ background-color: #efefde;
+}
+
+.TB_ToolbarSet
+{
+ border-top: #efefde 1px outset;
+ border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+ height: 24px;
+ display: inline-table; /* inline = Opera jumping buttons bug */
+}
+
+.TB_Separator
+{
+ width: 1px;
+ height: 16px;
+ margin: 2px;
+ background-color: #999966;
+}
+
+.TB_Start
+{
+ background-image: url(images/toolbar.start.gif);
+ margin: 2px;
+ width: 3px;
+ background-repeat: no-repeat;
+ height: 16px;
+}
+
+.TB_End
+{
+ display: none;
+}
+
+.TB_ExpandImg
+{
+ background-image: url(images/toolbar.expand.gif);
+ background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+ background-image: url(images/toolbar.collapse.gif);
+ background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+ background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+ padding: 2px 2px 2px 2px;
+ border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+ width: 5px;
+}
+
+.TB_Break
+{
+ height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+ Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+ border: #efefde 1px solid; /* This is the default border */
+ height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+ border: #316ac5 1px solid;
+ background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+ border: #316ac5 1px solid;
+ background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+ filter: alpha(opacity=70); /* IE */
+ opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+ filter: gray() alpha(opacity=30); /* IE */
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+ visibility: hidden;
+ width: 3px;
+ height: 22px;
+}
+
+.TB_Button_Image
+{
+ overflow: hidden;
+ width: 16px;
+ height: 16px;
+ margin: 3px;
+ background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+ position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+ background-color: #efefde; /* Needed because of a bug on Clear Type */
+}
+
+.TB_ConnectionLine
+{
+ background-color: #ffffff;
+ height: 1px;
+ margin-left: 1px; /* ltr */
+ margin-right: 1px; /* rtl */
+}
+
+.TB_Text
+{
+ height: 22px;
+}
+
+.TB_Button_Off .TB_Text
+{
+ background-color: #efefde ; /* Needed because of a bug on ClearType */
+}
+
+.TB_Button_On_Over .TB_Text
+{
+ background-color: #dff1ff ; /* Needed because of a bug on ClearType */
+}
+
+/*
+ Menu
+*/
+
+.MN_Menu
+{
+ border: 1px solid #8f8f73;
+ padding: 2px;
+ background-color: #ffffff;
+ cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+ visibility: hidden;
+ width: 3px;
+ height: 20px;
+}
+
+.MN_Icon
+{
+ background-color: #e3e3c7;
+ text-align: center;
+ height: 20px;
+}
+
+.MN_Label
+{
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+.MN_Separator
+{
+ height: 3px;
+}
+
+.MN_Separator_Line
+{
+ border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+ filter: alpha(opacity=70);
+ opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+ color: #ffffff;
+ background-color: #8f8f73;
+}
+
+.MN_Item_Over .MN_Icon
+{
+ background-color: #737357;
+}
+
+.MN_Item_Disabled IMG
+{
+ filter: gray() alpha(opacity=30); /* IE */
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+ color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+ padding-right: 3px;
+ padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+ background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+ border: #8f8f73 1px solid;
+ background-color: #ffffff;
+}
+
+/*
+ ### Panel Styles
+*/
+
+.FCK_Panel
+{
+ border: #8f8f73 1px solid;
+ padding: 2px;
+ background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+ font-size: 11px;
+}
+
+/*
+ ### Special Combos
+*/
+
+.SC_Panel
+{
+ overflow: auto;
+ white-space: nowrap;
+ cursor: default;
+ border: 1px solid #8f8f73;
+ padding-left: 2px;
+ padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+ margin-top: 2px;
+ margin-bottom: 2px;
+ background-position: left center;
+ padding-left: 11px;
+ padding-right: 3px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ background-repeat: no-repeat;
+ border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+ border: #9a9afb 1px solid;
+ background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+ border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+ border: #b7b7a6 1px solid;
+ cursor: default;
+}
+
+.SC_FieldCaption
+{
+ overflow: visible;
+ padding-right: 5px;
+ padding-left: 5px;
+ opacity: 0.75; /* Safari, Opera and Mozilla */
+ filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+ height: 23px;
+ background-color: #efefde;
+}
+
+.SC_FieldLabel
+{
+ white-space: nowrap;
+ padding: 2px;
+ width: 100%;
+ cursor: default;
+ background-color: #ffffff;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.SC_FieldButton
+{
+ background-position: center center;
+ background-image: url(images/toolbar.buttonarrow.gif);
+ border-left: #b7b7a6 1px solid;
+ width: 14px;
+ background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+ filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+ border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+ border-left: #316ac5 1px solid;
+}
+
+/*
+ ### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+ border: #808080 1px solid;
+ position: static;
+}
+
+.ColorBox
+{
+ font-size: 1px;
+ width: 10px;
+ position: static;
+ height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+ cursor: default;
+}
+
+.ColorDeselected
+{
+ border: #ffffff 1px solid;
+ padding: 2px;
+ float: left;
+}
+
+.ColorSelected
+{
+ border: #330066 1px solid;
+ padding: 2px;
+ float: left;
+ background-color: #c4cdd6;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_strip.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_strip.gif
new file mode 100644
index 0000000..a6ca532
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_strip.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.gif
new file mode 100644
index 0000000..8f91b47
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.png
new file mode 100644
index 0000000..1042a61
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.rtl.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.rtl.png
new file mode 100644
index 0000000..d7f7b49
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/dialog.sides.rtl.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.gif
new file mode 100644
index 0000000..2f57d93
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.png
new file mode 100644
index 0000000..5be90ed
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif
new file mode 100644
index 0000000..6843c8d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif
new file mode 100644
index 0000000..ea60995
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.collapse.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.collapse.gif
new file mode 100644
index 0000000..87aa56d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.collapse.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.end.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.end.gif
new file mode 100644
index 0000000..5bfd67a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.end.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.expand.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.expand.gif
new file mode 100644
index 0000000..79075e7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.expand.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.separator.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.separator.gif
new file mode 100644
index 0000000..eaed04a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.separator.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.start.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.start.gif
new file mode 100644
index 0000000..1774246
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.start.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog.css
new file mode 100644
index 0000000..8fb1616
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog.css
@@ -0,0 +1,402 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+ background-color: transparent;
+ margin: 0px;
+ padding: 0px;
+}
+
+body
+{
+ padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+ background-color: #f7f8fd;
+}
+
+.PopupBody
+{
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+ background-color: transparent;
+ padding: 0px;
+}
+
+#header
+{
+ cursor: move;
+}
+
+.PopupTitle
+{
+ font-weight: bold;
+ font-size: 14pt;
+ color: #0e3460;
+ background-color: #8cb2fd;
+ padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+ position: absolute;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ border-top: #466ca6 1px solid;
+ background-color: #8cb2fd;
+ padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+ border: #1c3460 1px solid;
+ color: #000a28;
+ background-color: #7096d3;
+}
+
+#btnOk
+{
+ width: 100px;
+}
+
+.DarkBackground
+{
+ background-color: #eaf2f8;
+}
+
+.LightBackground
+{
+ background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+ border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+ color: #0e3460;
+ background-color: #8cb2fd;
+}
+
+.PopupTabEmptyArea
+{
+ padding-left: 10px ;
+ border-bottom: #466ca6 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+ border-right: #466ca6 1px solid;
+ border-top: #466ca6 1px solid;
+ border-left: #466ca6 1px solid;
+ padding: 3px 5px 3px 5px;
+ color: #0e3460;
+}
+
+.PopupTab
+{
+ margin-top: 1px;
+ border-bottom: #466ca6 1px solid;
+ cursor: pointer;
+ cursor: hand;
+}
+
+.PopupTabSelected
+{
+ font-weight: bold;
+ cursor: default;
+ padding-top: 4px;
+ border-bottom: #f7f8fd 1px solid;
+ background-color: #f7f8fd;
+}
+
+.PopupSelectionBox
+{
+ border: #1e90ff 1px solid !important;
+ background-color: #add8e6 !important;
+ cursor: pointer;
+ cursor: hand;
+}
+
+#tdBrowse
+{
+ vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+ position: absolute;
+ top: 2px;
+ left: 16px;
+ right: 16px;
+ bottom: 20px;
+ background-color: #f7f8fD;
+ overflow: hidden;
+ z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+ position: absolute;
+ background-image: url(images/sprites.png);
+ background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+ background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+ position: absolute;
+ background-image: url(images/dialog.sides.png);
+ background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+ background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+ position: absolute;
+ background-image: url(images/dialog.sides.rtl.png);
+ background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+ background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+ top: 0px;
+ left: 0px;
+ width: 16px;
+ height: 16px;
+ background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+ background-position: -16px -397px;
+}
+
+.tr
+{
+ top: 0px;
+ right: 0px;
+ width: 16px;
+ height: 16px;
+ background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+ background-position: -16px -457px;
+}
+
+.tc
+{
+ top: 0px;
+ right: 16px;
+ left: 16px;
+ height: 16px;
+ background-position: 0px -136px;
+ background-repeat: repeat-x;
+}
+
+.ml
+{
+ top: 16px;
+ left: 0px;
+ width: 16px;
+ bottom: 51px;
+ background-position: 0px 0px;
+}
+
+.mr
+{
+ top: 16px;
+ right: 0px;
+ width: 16px;
+ bottom: 51px;
+ background-position: -16px 0px;
+}
+
+.bl
+{
+ bottom: 0px;
+ left: 0px;
+ width: 30px;
+ height: 51px;
+ background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+ background-position: -16px -517px;
+}
+
+.br
+{
+ bottom: 0px;
+ right: 0px;
+ width: 30px;
+ height: 51px;
+ background-position: -16px -263px;
+}
+
+.rtl .br
+{
+ background-position: -16px -584px;
+}
+
+.bc
+{
+ bottom: 0px;
+ right: 30px;
+ left: 30px;
+ height: 51px;
+ background-position: 0px -330px;
+ background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 12;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+ position: absolute;
+ top: 0px;
+ left: 14px;
+ right: 14px;
+ bottom: 18px;
+ z-index: 11;
+}
+
+#closeButton
+{
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ margin-top: 5px;
+ margin-right: 10px;
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+ background-image: url(images/sprites.png);
+ background-repeat: no-repeat;
+ background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+ cursor: hand;
+ background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+ right: auto;
+ left: 10px;
+ margin-right: 0px;
+}
+
+#closeButton:hover
+{
+ background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+ z-index: 10;
+}
+
+#throbberBlock div
+{
+ float: left;
+ width: 8px;
+ height: 9px;
+ margin-left: 2px;
+ margin-right: 2px;
+ font-size: 1px; /* IE6 */
+}
+
+/*
+ Color Gradient Generator:
+ http://www.herethere.net/~samson/php/color_gradient/?cbegin=0E3460&cend=8cb2fd&steps=4
+*/
+
+.throbber_1
+{
+ background-color: #0E3460;
+}
+
+.throbber_2
+{
+ background-color: #2D5387;
+}
+
+.throbber_3
+{
+ background-color: #4D73AE;
+}
+
+.throbber_4
+{
+ background-color: #6C92D5;
+}
+
+.throbber_5
+{
+ background-color: #8CB2FD;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog_ie6.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog_ie6.js
new file mode 100644
index 0000000..7599800
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog_ie6.js
@@ -0,0 +1,110 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+ // IE6 doens't handle absolute positioning properly (it is always in quirks
+ // mode). This function fixes the sizes and positions of many elements that
+ // compose the skin (this is skin specific).
+ var fixSizes = window.DoResizeFixes = function()
+ {
+ var fckDlg = window.document.body ;
+
+ for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+ {
+ var child = fckDlg.childNodes[i] ;
+ switch ( child.className )
+ {
+ case 'contents' :
+ child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ; // -left -right
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ; // -bottom -top
+ break ;
+
+ case 'blocker' :
+ case 'cover' :
+ child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ; // -left -right + 4
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ; // -bottom -top + 4
+ break ;
+
+ case 'tr' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+ break ;
+
+ case 'tc' :
+ child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+ break ;
+
+ case 'ml' :
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+ break ;
+
+ case 'mr' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+ break ;
+
+ case 'bl' :
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+
+ case 'br' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+
+ case 'bc' :
+ child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+ }
+ }
+ }
+
+ var closeButtonOver = function()
+ {
+ this.style.backgroundPosition = '-16px -687px' ;
+ } ;
+
+ var closeButtonOut = function()
+ {
+ this.style.backgroundPosition = '-16px -651px' ;
+ } ;
+
+ var fixCloseButton = function()
+ {
+ var closeButton = document.getElementById ( 'closeButton' ) ;
+
+ closeButton.onmouseover = closeButtonOver ;
+ closeButton.onmouseout = closeButtonOut ;
+ }
+
+ var onLoad = function()
+ {
+ fixSizes() ;
+ fixCloseButton() ;
+
+ window.attachEvent( 'onresize', fixSizes ) ;
+ window.detachEvent( 'onload', onLoad ) ;
+ }
+
+ window.attachEvent( 'onload', onLoad ) ;
+
+})() ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_editor.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_editor.css
new file mode 100644
index 0000000..9d582e5
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_editor.css
@@ -0,0 +1,476 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+ ### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+ padding: 1px;
+ margin: 0;
+ background-color: #ffffff;
+}
+
+#xEditingArea
+{
+ border: #696969 1px solid;
+}
+
+.SourceField
+{
+ padding: 5px;
+ margin: 0px;
+ font-family: Monospace;
+}
+
+/*
+ Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+ cursor: default;
+ background-color: #f7f8fd;
+}
+
+.TB_ToolbarSet
+{
+ border-top: #f7f8fd 1px outset;
+ border-bottom: #f7f8fd 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+ background-color: #d6dff7;
+ background-image: url(images/toolbar.bg.gif);
+ background-repeat: repeat-x;
+ display: inline-table;
+}
+
+.TB_Separator
+{
+ width: 1px;
+ height: 16px;
+ margin: 2px;
+ background-color: #B2CBFF;
+}
+
+.TB_Start
+{
+ background-image: url(images/toolbar.start.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ margin: 0px;
+ width: 7px;
+ height: 24px;
+}
+
+.TB_End
+{
+ background-image: url(images/toolbar.end.gif);
+ background-repeat: no-repeat;
+ background-position: center left;
+ height: 24px;
+ width: 4px;
+}
+
+.TB_ExpandImg
+{
+ background-image: url(images/toolbar.expand.gif);
+ background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+ background-image: url(images/toolbar.collapse.gif);
+ background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+ background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+ padding: 2px 2px 2px 2px;
+ border: #f7f8fd 1px outset;
+}
+
+.TB_Collapse
+{
+ width: 5px;
+}
+
+.TB_Break
+{
+ height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+ Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+ margin: 1px;
+ height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+ margin: 0px;
+ border: #316ac5 1px solid;
+ background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+ margin: 0px ;
+ border: #316ac5 1px solid;
+ background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+ filter: alpha(opacity=70); /* IE */
+ opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+ filter: gray() alpha(opacity=30); /* IE */
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+ visibility: hidden;
+ width: 3px;
+ height: 22px;
+}
+
+.TB_Button_Image
+{
+ overflow: hidden;
+ width: 16px;
+ height: 16px;
+ margin: 3px;
+ background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+ position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+ background-color: #d6dff7; /* Needed because of a bug on ClearType */
+ background-image: url(images/toolbar.bg.gif);
+ background-repeat: repeat-x;
+}
+
+.TB_ConnectionLine
+{
+ background-color: #f7f8fd;
+ height: 1px;
+ margin-left: 1px; /* ltr */
+ margin-right: 1px; /* rtl */
+}
+
+.TB_Button_Off .TB_Text
+{
+ background-color: #d6dff7; /* Needed because of a bug on ClearType */
+ background-image: url(images/toolbar.bg.gif);
+ background-repeat: repeat-x;
+}
+
+.TB_Button_On_Over .TB_Text
+{
+ background-color: #dff1ff ; /* Needed because of a bug on ClearType */
+}
+
+/*
+ Menu
+*/
+
+.MN_Menu
+{
+ border: 1px solid #8f8f73;
+ padding: 2px;
+ background-color: #f7f8fd;
+ cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+ visibility: hidden;
+ width: 3px;
+ height: 20px;
+}
+
+.MN_Icon
+{
+ background-color: #d6dff7;
+ text-align: center;
+ height: 20px;
+}
+
+.MN_Label
+{
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+.MN_Separator
+{
+ height: 3px;
+}
+
+.MN_Separator_Line
+{
+ border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+ filter: alpha(opacity=70);
+ opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+ color: #ffffff;
+ background-color: #7096FA;
+}
+
+.MN_Item_Over .MN_Icon
+{
+ background-color: #466ca6;
+}
+
+.MN_Item_Disabled IMG
+{
+ filter: gray() alpha(opacity=30); /* IE */
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+ color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+ padding-right: 3px;
+ padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+ background-color: #f7f8fd;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+ border: #8f8f73 1px solid;
+ background-color: #f7f8fd;
+}
+
+/*
+ ### Panel Styles
+*/
+
+.FCK_Panel
+{
+ border: #8f8f73 1px solid;
+ padding: 2px;
+ background-color: #f7f8fd;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+ font-size: 11px;
+}
+
+/*
+ ### Special Combos
+*/
+
+.SC_Panel
+{
+ overflow: auto;
+ white-space: nowrap;
+ cursor: default;
+ border: 1px solid #8f8f73;
+ padding-left: 2px;
+ padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+ margin-top: 2px;
+ margin-bottom: 2px;
+ background-position: left center;
+ padding-left: 11px;
+ padding-right: 3px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ background-repeat: no-repeat;
+ border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+ border: #9a9afb 1px solid;
+ background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+ border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+ margin-top: 2px ;
+ border: #b7b7a6 1px solid;
+ cursor: default;
+}
+
+.SC_FieldCaption
+{
+ overflow: visible;
+ padding-right: 5px;
+ padding-left: 5px;
+ opacity: 0.75; /* Safari, Opera and Mozilla */
+ filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+ height: 23px;
+ background-color: #d6dff7; /* Needed because of a bug on ClearType */
+ background-image: url(images/toolbar.bg.gif);
+ background-repeat: repeat-x;
+/* background-color: inherit; Maybe this is needed wait to check */
+}
+
+.SC_FieldLabel
+{
+ white-space: nowrap;
+ padding: 2px;
+ width: 100%;
+ cursor: default;
+ background-color: #ffffff;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.SC_FieldButton
+{
+ background-position: center center;
+ background-image: url(images/toolbar.buttonarrow.gif);
+ border-left: #b7b7a6 1px solid;
+ width: 14px;
+ background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+ filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+ border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+ border-left: #316ac5 1px solid;
+}
+
+/*
+ ### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+ border: #808080 1px solid;
+ position: static;
+}
+
+.ColorBox
+{
+ font-size: 1px;
+ width: 10px;
+ position: static;
+ height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+ cursor: default;
+}
+
+.ColorDeselected
+{
+ border: #ffffff 1px solid;
+ padding: 2px;
+ float: left;
+}
+
+.ColorSelected
+{
+ border: #330066 1px solid;
+ padding: 2px;
+ float: left;
+ background-color: #c4cdd6;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_strip.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_strip.gif
new file mode 100644
index 0000000..5607cc8
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_strip.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.gif
new file mode 100644
index 0000000..921fa1a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.png
new file mode 100644
index 0000000..be15730
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.rtl.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.rtl.png
new file mode 100644
index 0000000..e18f13d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.rtl.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.gif
new file mode 100644
index 0000000..8763e48
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.png
new file mode 100644
index 0000000..7f4e196
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.arrowright.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.arrowright.gif
new file mode 100644
index 0000000..6843c8d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.arrowright.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.bg.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.bg.gif
new file mode 100644
index 0000000..b03960b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.bg.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif
new file mode 100644
index 0000000..ea60995
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.collapse.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.collapse.gif
new file mode 100644
index 0000000..d549166
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.collapse.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.end.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.end.gif
new file mode 100644
index 0000000..7ff599d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.end.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.expand.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.expand.gif
new file mode 100644
index 0000000..c4a7326
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.expand.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.separator.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.separator.gif
new file mode 100644
index 0000000..27db9c3
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.separator.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.start.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.start.gif
new file mode 100644
index 0000000..41f1241
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.start.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog.css
new file mode 100644
index 0000000..96be593
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog.css
@@ -0,0 +1,402 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+ background-color: transparent;
+ margin: 0px;
+ padding: 0px;
+}
+
+body
+{
+ padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+ background-color: #f7f7f7;
+}
+
+.PopupBody
+{
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+ background-color: transparent;
+ padding: 0px;
+}
+
+#header
+{
+ cursor: move;
+}
+
+.PopupTitle
+{
+ font-weight: bold;
+ font-size: 14pt;
+ color: #504845;
+ background-color: #dedede;
+ padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+ position: absolute;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ border-top: #cec6b5 1px solid;
+ background-color: #DEDEDE;
+ padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+ border: #7a7261 1px solid;
+ color: #504845;
+ background-color: #cec6b5;
+}
+
+#btnOk
+{
+ width: 100px;
+}
+
+.DarkBackground
+{
+ background-color: #f2f2f2;
+}
+
+.LightBackground
+{
+ background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+ border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTabArea
+{
+ color: #504845;
+ background-color: #DEDEDE;
+}
+
+.PopupTabEmptyArea
+{
+ padding-left: 10px ;
+ border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+ border-right: #cec6b5 1px solid;
+ border-top: #cec6b5 1px solid;
+ border-left: #cec6b5 1px solid;
+ padding: 3px 5px 3px 5px;
+ color: #504845;
+}
+
+.PopupTab
+{
+ margin-top: 1px;
+ border-bottom: #cec6b5 1px solid;
+ cursor: pointer;
+ cursor: hand;
+}
+
+.PopupTabSelected
+{
+ font-weight:bold;
+ cursor: default;
+ padding-top: 4px;
+ border-bottom: #f1f1e3 1px solid;
+ background-color: #f7f7f7;
+}
+
+.PopupSelectionBox
+{
+ border: #a9a9a9 1px solid !important;
+ background-color: #dcdcdc !important;
+ cursor: pointer;
+ cursor: hand;
+}
+
+#tdBrowse
+{
+ vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+ position: absolute;
+ top: 2px;
+ left: 16px;
+ right: 16px;
+ bottom: 20px;
+ background-color: #f7f7f7;
+ overflow: hidden;
+ z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+ position: absolute;
+ background-image: url(images/sprites.png);
+ background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+ background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+ position: absolute;
+ background-image: url(images/dialog.sides.png);
+ background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+ background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+ position: absolute;
+ background-image: url(images/dialog.sides.rtl.png);
+ background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+ background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+ top: 0px;
+ left: 0px;
+ width: 16px;
+ height: 16px;
+ background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+ background-position: -16px -397px;
+}
+
+.tr
+{
+ top: 0px;
+ right: 0px;
+ width: 16px;
+ height: 16px;
+ background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+ background-position: -16px -457px;
+}
+
+.tc
+{
+ top: 0px;
+ right: 16px;
+ left: 16px;
+ height: 16px;
+ background-position: 0px -136px;
+ background-repeat: repeat-x;
+}
+
+.ml
+{
+ top: 16px;
+ left: 0px;
+ width: 16px;
+ bottom: 51px;
+ background-position: 0px 0px;
+}
+
+.mr
+{
+ top: 16px;
+ right: 0px;
+ width: 16px;
+ bottom: 51px;
+ background-position: -16px 0px;
+}
+
+.bl
+{
+ bottom: 0px;
+ left: 0px;
+ width: 30px;
+ height: 51px;
+ background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+ background-position: -16px -517px;
+}
+
+.br
+{
+ bottom: 0px;
+ right: 0px;
+ width: 30px;
+ height: 51px;
+ background-position: -16px -263px;
+}
+
+.rtl .br
+{
+ background-position: -16px -584px;
+}
+
+.bc
+{
+ bottom: 0px;
+ right: 30px;
+ left: 30px;
+ height: 51px;
+ background-position: 0px -330px;
+ background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 12;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+ position: absolute;
+ top: 0px;
+ left: 14px;
+ right: 14px;
+ bottom: 18px;
+ z-index: 11;
+}
+
+#closeButton
+{
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ margin-top: 5px;
+ margin-right: 10px;
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+ background-image: url(images/sprites.png);
+ background-repeat: no-repeat;
+ background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+ cursor: hand;
+ background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+ right: auto;
+ left: 10px;
+ margin-right: 0px;
+}
+
+#closeButton:hover
+{
+ background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+ z-index: 10;
+}
+
+#throbberBlock div
+{
+ float: left;
+ width: 8px;
+ height: 9px;
+ margin-left: 2px;
+ margin-right: 2px;
+ font-size: 1px; /* IE6 */
+}
+
+/*
+ Color Gradient Generator:
+ http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
+*/
+
+.throbber_1
+{
+ background-color: #504845;
+}
+
+.throbber_2
+{
+ background-color: #736D6B;
+}
+
+.throbber_3
+{
+ background-color: #979391;
+}
+
+.throbber_4
+{
+ background-color: #BAB8B7;
+}
+
+.throbber_5
+{
+ background-color: #DEDEDE;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog_ie6.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog_ie6.js
new file mode 100644
index 0000000..7599800
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog_ie6.js
@@ -0,0 +1,110 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+ // IE6 doens't handle absolute positioning properly (it is always in quirks
+ // mode). This function fixes the sizes and positions of many elements that
+ // compose the skin (this is skin specific).
+ var fixSizes = window.DoResizeFixes = function()
+ {
+ var fckDlg = window.document.body ;
+
+ for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+ {
+ var child = fckDlg.childNodes[i] ;
+ switch ( child.className )
+ {
+ case 'contents' :
+ child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ; // -left -right
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ; // -bottom -top
+ break ;
+
+ case 'blocker' :
+ case 'cover' :
+ child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ; // -left -right + 4
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ; // -bottom -top + 4
+ break ;
+
+ case 'tr' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+ break ;
+
+ case 'tc' :
+ child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+ break ;
+
+ case 'ml' :
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+ break ;
+
+ case 'mr' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+ child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+ break ;
+
+ case 'bl' :
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+
+ case 'br' :
+ child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+
+ case 'bc' :
+ child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+ child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+ break ;
+ }
+ }
+ }
+
+ var closeButtonOver = function()
+ {
+ this.style.backgroundPosition = '-16px -687px' ;
+ } ;
+
+ var closeButtonOut = function()
+ {
+ this.style.backgroundPosition = '-16px -651px' ;
+ } ;
+
+ var fixCloseButton = function()
+ {
+ var closeButton = document.getElementById ( 'closeButton' ) ;
+
+ closeButton.onmouseover = closeButtonOver ;
+ closeButton.onmouseout = closeButtonOut ;
+ }
+
+ var onLoad = function()
+ {
+ fixSizes() ;
+ fixCloseButton() ;
+
+ window.attachEvent( 'onresize', fixSizes ) ;
+ window.detachEvent( 'onload', onLoad ) ;
+ }
+
+ window.attachEvent( 'onload', onLoad ) ;
+
+})() ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_editor.css b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_editor.css
new file mode 100644
index 0000000..f1a5007
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_editor.css
@@ -0,0 +1,473 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+ ### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+ padding: 1px;
+ margin: 0;
+ background-color: #ffffff;
+}
+
+#xEditingArea
+{
+ border: #696969 1px solid;
+}
+
+.SourceField
+{
+ padding: 5px;
+ margin: 0px;
+ font-family: Monospace;
+}
+
+/*
+ Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+ cursor: default;
+ background-color: #f7f7f7;
+}
+
+.TB_ToolbarSet
+{
+ padding: 1px;
+ border-top: #efefde 1px outset;
+ border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+ display: inline-table;
+}
+
+.TB_Separator
+{
+ width: 1px;
+ height: 21px;
+ margin: 2px;
+ background-color: #C6C3BD;
+}
+
+.TB_Start
+{
+ background-image: url(images/toolbar.start.gif);
+ margin-left: 2px;
+ margin-right: 2px;
+ width: 3px;
+ background-repeat: no-repeat;
+ height: 27px;
+ background-position: center center;
+}
+
+.TB_End
+{
+ display: none;
+}
+
+.TB_ExpandImg
+{
+ background-image: url(images/toolbar.expand.gif);
+ background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+ background-image: url(images/toolbar.collapse.gif);
+ background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+ background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+ padding: 2px 2px 2px 2px;
+ border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+ border: #efefde 1px outset;
+ width: 5px;
+}
+
+.TB_Break
+{
+ height: 27px;
+}
+
+/*
+ Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+ padding: 1px ;
+ margin:1px;
+ height: 21px;
+}
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+ border: #cec6b5 1px solid;
+}
+
+.TB_Button_On
+{
+ border-color: #316ac5;
+ background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+ border: #316ac5 1px solid;
+ background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+ background: #efefef url(images/toolbar.buttonbg.gif) repeat-x;
+}
+
+.TB_Button_Off, .TB_Combo_Off
+{
+ opacity: 0.70; /* Safari, Opera and Mozilla */
+ filter: alpha(opacity=70); /* IE */
+ /* -moz-opacity: 0.70; Mozilla (Old) */
+}
+
+.TB_Button_Disabled
+{
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+ filter: gray() alpha(opacity=30); /* IE */
+}
+
+.TB_Button_Padding
+{
+ visibility: hidden;
+ width: 3px;
+ height: 21px;
+}
+
+.TB_Button_Image
+{
+ overflow: hidden;
+ width: 16px;
+ height: 16px;
+ margin: 3px;
+ margin-top: 4px;
+ margin-bottom: 2px;
+ background-repeat: no-repeat;
+}
+
+/* For composed button ( icon + text, icon + arrow ), we must compensate the table */
+.TB_Button_On TABLE .TB_Button_Image,
+.TB_Button_Off TABLE .TB_Button_Image,
+.TB_Button_On_Over TABLE .TB_Button_Image,
+.TB_Button_Off_Over TABLE .TB_Button_Image,
+.TB_Button_Disabled TABLE .TB_Button_Image
+{
+ margin-top: 3px;
+}
+
+.TB_Button_Image img
+{
+ position: relative;
+}
+
+.TB_ConnectionLine
+{
+ background-color: #ffffff;
+ height: 1px;
+ margin-left: 1px; /* ltr */
+ margin-right: 1px; /* rtl */
+}
+
+/*
+ Menu
+*/
+
+.MN_Menu
+{
+ border: 1px solid #8f8f73;
+ padding: 2px;
+ background-color: #f7f7f7;
+ cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+ visibility: hidden;
+ width: 3px;
+ height: 20px;
+}
+
+.MN_Icon
+{
+ background-color: #dedede;
+ text-align: center;
+ height: 20px;
+}
+
+.MN_Label
+{
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+.MN_Separator
+{
+ height: 3px;
+}
+
+.MN_Separator_Line
+{
+ border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+ filter: alpha(opacity=70);
+ opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+ color: #ffffff;
+ background-color: #8a857d;
+}
+
+.MN_Item_Over .MN_Icon
+{
+ background-color: #6c6761;
+}
+
+.MN_Item_Disabled IMG
+{
+ filter: gray() alpha(opacity=30); /* IE */
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+ color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+ padding-right: 3px;
+ padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+ background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+ border: #8f8f73 1px solid;
+ background-color: #ffffff;
+}
+
+/*
+ ### Panel Styles
+*/
+
+.FCK_Panel
+{
+ border: #8f8f73 1px solid;
+ padding: 2px;
+ background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+ font-size: 11px;
+}
+
+/*
+ ### Special Combos
+*/
+
+.SC_Panel
+{
+ overflow: auto;
+ white-space: nowrap;
+ cursor: default;
+ border: 1px solid #8f8f73;
+ padding-left: 2px;
+ padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+ font-size: 11px;
+ font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+ margin-top: 2px;
+ margin-bottom: 2px;
+ background-position: left center;
+ padding-left: 11px;
+ padding-right: 3px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ background-repeat: no-repeat;
+ border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+ border: #9a9afb 1px solid;
+ background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+ border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+ margin-top:1px ;
+ border: #b7b7a6 1px solid;
+ cursor: default;
+}
+
+.SC_FieldCaption
+{
+ padding-top: 1px ;
+ overflow: visible;
+ padding-right: 5px;
+ padding-left: 5px;
+ opacity: 0.75; /* Safari, Opera and Mozilla */
+ filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+ height: 23px;
+ background-color: #f7f7f7;
+}
+
+.SC_FieldLabel
+{
+ white-space: nowrap;
+ padding: 2px;
+ width: 100%;
+ cursor: default;
+ background-color: #ffffff;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.SC_FieldButton
+{
+ background-position: center center;
+ background-image: url(images/toolbar.buttonarrow.gif);
+ border-left: #b7b7a6 1px solid;
+ width: 14px;
+ background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+ opacity: 0.30; /* Safari, Opera and Mozilla */
+ filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+ border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+ border-left: #316ac5 1px solid;
+}
+
+/*
+ ### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+ border: #808080 1px solid;
+ position: static;
+}
+
+.ColorBox
+{
+ font-size: 1px;
+ width: 10px;
+ position: static;
+ height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+ cursor: default;
+}
+
+.ColorDeselected
+{
+ border: #ffffff 1px solid;
+ padding: 2px;
+ float: left;
+}
+
+.ColorSelected
+{
+ border: #316ac5 1px solid;
+ padding: 2px;
+ float: left;
+ background-color: #c1d2ee;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_strip.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_strip.gif
new file mode 100644
index 0000000..a6ca532
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_strip.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.gif
new file mode 100644
index 0000000..49a4d8d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.png
new file mode 100644
index 0000000..ab1ff32
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.rtl.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.rtl.png
new file mode 100644
index 0000000..e0a7aa7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.rtl.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.gif
new file mode 100644
index 0000000..6a17ed1
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.png b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.png
new file mode 100644
index 0000000..0ab5219
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.png
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.arrowright.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.arrowright.gif
new file mode 100644
index 0000000..6843c8d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.arrowright.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonarrow.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonarrow.gif
new file mode 100644
index 0000000..ea60995
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonarrow.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonbg.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonbg.gif
new file mode 100644
index 0000000..a93ffca
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonbg.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.collapse.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.collapse.gif
new file mode 100644
index 0000000..87aa56d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.collapse.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.end.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.end.gif
new file mode 100644
index 0000000..5bfd67a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.end.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.expand.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.expand.gif
new file mode 100644
index 0000000..79075e7
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.expand.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.separator.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.separator.gif
new file mode 100644
index 0000000..eaed04a
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.separator.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.start.gif b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.start.gif
new file mode 100644
index 0000000..1774246
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.start.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/ciframe.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/ciframe.html
new file mode 100644
index 0000000..f4c5b23
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/ciframe.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html>
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <script type="text/javascript">
+
+function gup( name )
+{
+ name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;
+ var regexS = '[\\?&]' + name + '=([^&#]*)' ;
+ var regex = new RegExp( regexS ) ;
+ var results = regex.exec( window.location.href ) ;
+
+ if( results == null )
+ return '' ;
+ else
+ return results[ 1 ] ;
+}
+
+function sendData2Master()
+{
+ var destination = parent.parent ;
+ try
+ {
+ if ( destination.XDTMaster )
+ {
+ var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;
+ window.clearInterval( interval ) ;
+ }
+ }
+ catch (e) {}
+}
+
+function onLoad()
+{
+ interval = window.setInterval( sendData2Master, 100 );
+}
+
+ </script>
+</head>
+<body onload="onLoad()">
+ <p></p>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/tmpFrameset.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/tmpFrameset.html
new file mode 100644
index 0000000..a861a67
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/tmpFrameset.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html>
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <script type="text/javascript">
+
+function doLoadScript( url )
+{
+ if ( !url )
+ return false ;
+
+ var s = document.createElement( "script" ) ;
+ s.type = "text/javascript" ;
+ s.src = url ;
+ document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ;
+
+ return true ;
+}
+
+function tryLoad ()
+{
+ if ( typeof( opener ) == 'undefined' || !opener )
+ opener = parent ;
+
+ // get access to global parameters
+ oParams = opener.oldFramesetPageParams ;
+
+ // make frameset rows string prepare
+ sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;
+ document.getElementById( 'itFrameset' ).rows = sFramesetRows ;
+
+ // dynamic including init frames and crossdomain transport code
+ // from config sproxy_js_frameset url
+ var addScriptUrl = oParams.sproxy_js_frameset ;
+ doLoadScript( addScriptUrl ) ;
+}
+
+ </script>
+</head>
+<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0">
+ <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame>
+ <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame>
+ <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame>
+ <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame>
+</frameset>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/w.html b/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/w.html
new file mode 100644
index 0000000..85f5421
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/w.html
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html>
+<head>
+ <title></title>
+ <style>
+ #wsc_frames , #errorMessage{
+ position:absolute;
+ top:0px;
+ left:0px;
+ width:500px;
+ height:395px;
+ margin:0px;
+ padding:0px;
+ border:0px;
+ display:block;
+ overflow: hidden;
+ }
+ #wsc_frames { z-index:10;}
+ #errorMessage {
+ color:red;
+ display:none;
+ font-size:16px;
+ font-weight:bold;
+ padding-top:160px;
+ text-align:center;
+ z-index:11;
+ }
+ #errorMessage p {
+ color:#000;
+ font-size:11px;
+ text-align:left;
+ font-weight: normal;
+ padding-left:80px;
+ }
+
+ </style>
+ <script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKConfig = oEditor.FCKConfig;
+
+function doLoadScript(url)
+{
+ if (!url)
+ return false ;
+
+ var s = document.createElement('script') ;
+ s.type = 'text/javascript' ;
+ s.src = url ;
+
+ document.getElementsByTagName('head')[0].appendChild(s) ;
+
+ return true ;
+}
+
+function Ok()
+{
+ return window.parent.Cancel() ;
+}
+
+function _callOnCancel( dT )
+{
+ window.parent.Cancel() ;
+}
+
+function _callOnFinish( dT )
+{
+ oEditor.FCK.SetData( dT.value ) ;
+ window.parent.CloseDialog( true ) ;
+}
+
+function _cancelOnError(m)
+{
+ var _conId = 'errorMessage' ;
+ var message = m || 'Sorry, but service is unavailable now.' ;
+
+ if ( typeof( WSC_Error ) == 'undefined' )
+ {
+ var _con = document.createElement( 'div' ) ;
+ _con.setAttribute( 'id', _conId ) ;
+ document.body.appendChild( _con ) ;
+ dom_con = document.getElementById( _conId ) ;
+ dom_con.innerHTML = message ;
+ dom_con.style.display = 'block' ;
+ }
+ //return Ok() ;
+}
+
+function URL_abs2full( uri )
+{
+ return uri.match( 'http' )
+ ? uri
+ : document.location.protocol + '//' + document.location.host + uri ;
+}
+
+function clearErrorUsermessage()
+{
+ // empty error container
+ var _con = document.getElementById( 'errorMessage' ) ;
+
+ if ( !_con )
+ return ;
+
+ _con.innerHTML = '' ;
+ _con.style.display = 'none' ;
+}
+
+var gInterval ;
+
+function onLoad()
+{
+ clearErrorUsermessage() ;
+ var _errorMessage = 'The SpellChecker Service is currently unavailable.' ;
+ if ( 'undefined' != typeof( oEditor.FCK.Config.WSChLoaderScript ) )
+ _errorMessage = '<div>The SpellChecker Service is currently unavailable.</div><p>Error loading application<br>service host: ' + oEditor.FCK.Config.WSChLoaderScript + '</p>';
+
+ var burnSpelling = function( oName, _eMessage )
+ {
+ var i = 0 ;
+
+ return function ()
+ {
+ if ( typeof( window[oName] ) == 'function' )
+ initAndSpell() ;
+ else if ( i++ == 180 )
+ _cancelOnError( _eMessage ) ;
+ }
+ }
+
+ gInterval = window.setInterval( burnSpelling( 'doSpell', _errorMessage ), 250 ) ;
+
+ // WSC CORE init section
+ var protocol = document.location.protocol || 'http:' ;
+ var baseUrl = protocol + '//loader.spellchecker.net/sproxy_fck/sproxy.php' ;
+ var plugin = "fck2" ;
+ var customerid = oEditor.FCK.Config.WSCnCustomerId
+ || "1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk" ;
+ var wscCoreUrl = oEditor.FCK.Config.WSChLoaderScript
+ || ( baseUrl + '?'
+ + 'plugin=' + plugin + '&'
+ + 'customerid='+ customerid + '&'
+ + 'cmd=script&doc=wsc&schema=22' ) ;
+
+ // load WSC core
+ doLoadScript( wscCoreUrl ) ;
+}
+
+function initAndSpell()
+{
+ //xall from window.setInteval expected at once
+ if ( typeof( gInterval ) == 'undefined' )
+ return null ;
+ window.clearInterval( gInterval ) ;
+
+ // global var is used in FCK specific core
+ // change on equal var used in fckplugin.js
+ gFCKPluginName = 'wsc' ;
+
+ // get the data to be checked
+ var sData = oEditor.FCK.GetData() ;
+
+ // prepare content
+ var ctrlId = 'myEditor' ;
+ var dCurT = document.getElementById( ctrlId ) ;
+ dCurT.value = sData ;
+
+ // service paths corecting/preparing
+ var sPath2Scin = URL_abs2full( oEditor.FCK.Config.SkinDialogCSS ) ;
+ var sPathCiframe = FCKConfig.BasePath + 'wsc/ciframe.html' ;
+ var sPathFrameset = FCKConfig.BasePath + 'wsc/tmpFrameset.html' ;
+
+ // language abbr standarts comparer
+ var LangComparer = new _SP_FCK_LangCompare() ;
+ LangComparer.setDefaulLangCode( oEditor.FCK.Language.DefaultLanguage ) ;
+
+ // clear user message console (if application was loaded more then after 2 seconds)
+ clearErrorUsermessage() ;
+
+ doSpell( {
+ ctrl : ctrlId,
+ lang : LangComparer.getSPLangCode( oEditor.FCK.Language.GetActiveLanguage() ),
+ winType : 'wsc_frames',// if not defined app will run on winpopup
+
+ // callback binding section
+ onCancel :window._callOnCancel,
+ onFinish :window._callOnFinish,
+
+ // @TODO: basePath assingning
+
+ // some manipulations with client static pages
+ framesetPath : sPathFrameset,
+ iframePath : sPathCiframe,
+
+ // styles defining
+ schemaURI : sPath2Scin
+ } ) ;
+
+ return true ;
+}
+
+ </script>
+</head>
+<body onload="onLoad()" style="padding: 0px; overflow: hidden;">
+ <textarea style="display: none;" id="myEditor" rows="10" cols="40"></textarea>
+ <iframe src="" name="wsc_frames" id="wsc_frames"></iframe>
+</body>
+</html>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/fckconfig.js b/rt/share/html/NoAuth/RichText/FCKeditor/fckconfig.js
new file mode 100644
index 0000000..3678d8b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/fckconfig.js
@@ -0,0 +1,327 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Editor configuration settings.
+ *
+ * Follow this link for more information:
+ * http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options
+ */
+
+FCKConfig.CustomConfigurationsPath = '' ;
+
+FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ;
+FCKConfig.EditorAreaStyles = '' ;
+FCKConfig.ToolbarComboPreviewCSS = '' ;
+
+FCKConfig.DocType = '' ;
+
+FCKConfig.BaseHref = '' ;
+
+FCKConfig.FullPage = false ;
+
+// The following option determines whether the "Show Blocks" feature is enabled or not at startup.
+FCKConfig.StartupShowBlocks = false ;
+
+FCKConfig.Debug = false ;
+FCKConfig.AllowQueryStringDebug = true ;
+
+FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
+FCKConfig.SkinEditorCSS = '' ; // FCKConfig.SkinPath + "|<minified css>" ;
+FCKConfig.SkinDialogCSS = '' ; // FCKConfig.SkinPath + "|<minified css>" ;
+
+FCKConfig.PreloadImages = [ FCKConfig.SkinPath + 'images/toolbar.start.gif', FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ] ;
+
+FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ;
+
+// FCKConfig.Plugins.Add( 'autogrow' ) ;
+// FCKConfig.Plugins.Add( 'dragresizetable' );
+FCKConfig.AutoGrowMax = 400 ;
+
+// FCKConfig.ProtectedSource.Add( /<%[\s\S]*?%>/g ) ; // ASP style server side code <%...%>
+// FCKConfig.ProtectedSource.Add( /<\?[\s\S]*?\?>/g ) ; // PHP style server side code
+// FCKConfig.ProtectedSource.Add( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ) ; // ASP.Net style tags <asp:control>
+
+FCKConfig.AutoDetectLanguage = true ;
+FCKConfig.DefaultLanguage = 'en' ;
+FCKConfig.ContentLangDirection = 'ltr' ;
+
+FCKConfig.ProcessHTMLEntities = true ;
+FCKConfig.IncludeLatinEntities = true ;
+FCKConfig.IncludeGreekEntities = true ;
+
+FCKConfig.ProcessNumericEntities = false ;
+
+FCKConfig.AdditionalNumericEntities = '' ; // Single Quote: "'"
+
+FCKConfig.FillEmptyBlocks = true ;
+
+FCKConfig.FormatSource = true ;
+FCKConfig.FormatOutput = true ;
+FCKConfig.FormatIndentator = ' ' ;
+
+FCKConfig.EMailProtection = 'encode' ; // none | encode | function
+FCKConfig.EMailProtectionFunction = 'mt(NAME,DOMAIN,SUBJECT,BODY)' ;
+
+FCKConfig.StartupFocus = false ;
+FCKConfig.ForcePasteAsPlainText = false ;
+FCKConfig.AutoDetectPasteFromWord = true ; // IE only.
+FCKConfig.ShowDropDialog = true ;
+FCKConfig.ForceSimpleAmpersand = false ;
+FCKConfig.TabSpaces = 0 ;
+FCKConfig.ShowBorders = true ;
+FCKConfig.SourcePopup = false ;
+FCKConfig.ToolbarStartExpanded = false ;
+FCKConfig.ToolbarCanCollapse = true ;
+FCKConfig.IgnoreEmptyParagraphValue = true ;
+FCKConfig.FloatingPanelsZIndex = 10000 ;
+FCKConfig.HtmlEncodeOutput = false ;
+
+FCKConfig.TemplateReplaceAll = true ;
+FCKConfig.TemplateReplaceCheckbox = true ;
+
+FCKConfig.ToolbarLocation = 'In' ;
+
+FCKConfig.ToolbarSets["Default"] = [
+// ['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
+ ['Source','DocProps'],
+ ['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
+ ['Undo','Redo','-','Replace','-','SelectAll','RemoveFormat'],
+// ['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
+ '/',
+ ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
+ ['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'],
+ ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
+ ['Link','Unlink'],
+// ['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'],
+ ['Rule','SpecialChar'],
+ '/',
+ ['Style','FontFormat','FontName','FontSize'],
+ ['TextColor','BGColor'],
+ ['FitWindow','-','About'] // No comma for the last row.
+] ;
+
+FCKConfig.ToolbarSets["Basic"] = [
+ ['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']
+] ;
+
+FCKConfig.EnterMode = 'br' ; // p | div | br
+FCKConfig.ShiftEnterMode = 'p' ; // p | div | br
+
+FCKConfig.Keystrokes = [
+ [ CTRL + 65 /*A*/, true ],
+ [ CTRL + 67 /*C*/, true ],
+ [ CTRL + 70 /*F*/, true ],
+ [ CTRL + 83 /*S*/, true ],
+ [ CTRL + 84 /*T*/, true ],
+ [ CTRL + 88 /*X*/, true ],
+ [ CTRL + 86 /*V*/, 'Paste' ],
+ [ CTRL + 45 /*INS*/, true ],
+ [ SHIFT + 45 /*INS*/, 'Paste' ],
+ [ CTRL + 88 /*X*/, 'Cut' ],
+ [ SHIFT + 46 /*DEL*/, 'Cut' ],
+ [ CTRL + 90 /*Z*/, 'Undo' ],
+ [ CTRL + 89 /*Y*/, 'Redo' ],
+ [ CTRL + SHIFT + 90 /*Z*/, 'Redo' ],
+ [ CTRL + 76 /*L*/, 'Link' ],
+ [ CTRL + 66 /*B*/, 'Bold' ],
+ [ CTRL + 73 /*I*/, 'Italic' ],
+ [ CTRL + 85 /*U*/, 'Underline' ],
+ [ CTRL + SHIFT + 83 /*S*/, 'Save' ],
+ [ CTRL + ALT + 13 /*ENTER*/, 'FitWindow' ],
+ [ SHIFT + 32 /*SPACE*/, 'Nbsp' ]
+] ;
+
+FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form','DivContainer'] ;
+FCKConfig.BrowserContextMenuOnCtrl = true ;
+FCKConfig.BrowserContextMenu = false ;
+
+FCKConfig.EnableMoreFontColors = true ;
+FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ;
+
+FCKConfig.FontFormats = 'p;h1;h2;h3;h4;h5;h6;pre;address;div' ;
+FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
+FCKConfig.FontSizes = 'smaller;larger;xx-small;x-small;small;medium;large;x-large;xx-large' ;
+
+FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'fckstyles.xml' ;
+FCKConfig.TemplatesXmlPath = FCKConfig.EditorPath + 'fcktemplates.xml' ;
+
+FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages'
+FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/download.php' ;
+FCKConfig.SpellerPagesServerScript = 'server-scripts/spellchecker.php' ; // Available extension: .php .cfm .pl
+FCKConfig.FirefoxSpellChecker = true ;
+
+FCKConfig.MaxUndoLevels = 15 ;
+
+FCKConfig.DisableObjectResizing = false ;
+FCKConfig.DisableFFTableHandles = true ;
+
+FCKConfig.LinkDlgHideTarget = false ;
+FCKConfig.LinkDlgHideAdvanced = false ;
+
+FCKConfig.ImageDlgHideLink = false ;
+FCKConfig.ImageDlgHideAdvanced = false ;
+
+FCKConfig.FlashDlgHideAdvanced = false ;
+
+FCKConfig.ProtectedTags = '' ;
+
+// This will be applied to the body element of the editor
+FCKConfig.BodyId = '' ;
+FCKConfig.BodyClass = '' ;
+
+FCKConfig.DefaultStyleLabel = '' ;
+FCKConfig.DefaultFontFormatLabel = '' ;
+FCKConfig.DefaultFontLabel = '' ;
+FCKConfig.DefaultFontSizeLabel = '' ;
+
+FCKConfig.DefaultLinkTarget = '' ;
+
+// The option switches between trying to keep the html structure or do the changes so the content looks like it was in Word
+FCKConfig.CleanWordKeepsStructure = false ;
+
+// Only inline elements are valid.
+FCKConfig.RemoveFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var' ;
+
+// Attributes that will be removed
+FCKConfig.RemoveAttributes = 'class,style,lang,width,height,align,hspace,valign' ;
+
+FCKConfig.CustomStyles =
+{
+ 'Red Title' : { Element : 'h3', Styles : { 'color' : 'Red' } }
+};
+
+// Do not add, rename or remove styles here. Only apply definition changes.
+FCKConfig.CoreStyles =
+{
+ // Basic Inline Styles.
+ 'Bold' : { Element : 'strong', Overrides : 'b' },
+ 'Italic' : { Element : 'em', Overrides : 'i' },
+ 'Underline' : { Element : 'u' },
+ 'StrikeThrough' : { Element : 'strike' },
+ 'Subscript' : { Element : 'sub' },
+ 'Superscript' : { Element : 'sup' },
+
+ // Basic Block Styles (Font Format Combo).
+ 'p' : { Element : 'p' },
+ 'div' : { Element : 'div' },
+ 'pre' : { Element : 'pre' },
+ 'address' : { Element : 'address' },
+ 'h1' : { Element : 'h1' },
+ 'h2' : { Element : 'h2' },
+ 'h3' : { Element : 'h3' },
+ 'h4' : { Element : 'h4' },
+ 'h5' : { Element : 'h5' },
+ 'h6' : { Element : 'h6' },
+
+ // Other formatting features.
+ 'FontFace' :
+ {
+ Element : 'span',
+ Styles : { 'font-family' : '#("Font")' },
+ Overrides : [ { Element : 'font', Attributes : { 'face' : null } } ]
+ },
+
+ 'Size' :
+ {
+ Element : 'span',
+ Styles : { 'font-size' : '#("Size","fontSize")' },
+ Overrides : [ { Element : 'font', Attributes : { 'size' : null } } ]
+ },
+
+ 'Color' :
+ {
+ Element : 'span',
+ Styles : { 'color' : '#("Color","color")' },
+ Overrides : [ { Element : 'font', Attributes : { 'color' : null } } ]
+ },
+
+ 'BackColor' : { Element : 'span', Styles : { 'background-color' : '#("Color","color")' } },
+
+ 'SelectionHighlight' : { Element : 'span', Styles : { 'background-color' : 'navy', 'color' : 'white' } }
+};
+
+// The distance of an indentation step.
+FCKConfig.IndentLength = 40 ;
+FCKConfig.IndentUnit = 'px' ;
+
+// Alternatively, FCKeditor allows the use of CSS classes for block indentation.
+// This overrides the IndentLength/IndentUnit settings.
+FCKConfig.IndentClasses = [] ;
+
+// [ Left, Center, Right, Justified ]
+FCKConfig.JustifyClasses = [] ;
+
+// The following value defines which File Browser connector and Quick Upload
+// "uploader" to use. It is valid for the default implementaion and it is here
+// just to make this configuration file cleaner.
+// It is not possible to change this value using an external file or even
+// inline when creating the editor instance. In that cases you must set the
+// values of LinkBrowserURL, ImageBrowserURL and so on.
+// Custom implementations should just ignore it.
+var _FileBrowserLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py
+var _QuickUploadLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py
+
+// Don't care about the following two lines. It just calculates the correct connector
+// extension to use for the default File Browser (Perl uses "cgi").
+var _FileBrowserExtension = _FileBrowserLanguage == 'perl' ? 'cgi' : _FileBrowserLanguage ;
+var _QuickUploadExtension = _QuickUploadLanguage == 'perl' ? 'cgi' : _QuickUploadLanguage ;
+
+FCKConfig.LinkBrowser = true ;
+FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;
+FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70%
+FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70%
+
+FCKConfig.ImageBrowser = true ;
+FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;
+FCKConfig.ImageBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% ;
+FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% ;
+
+FCKConfig.FlashBrowser = true ;
+FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;
+FCKConfig.FlashBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; //70% ;
+FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; //70% ;
+
+FCKConfig.LinkUpload = true ;
+FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension ;
+FCKConfig.LinkUploadAllowedExtensions = ".(7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip)$" ; // empty for all
+FCKConfig.LinkUploadDeniedExtensions = "" ; // empty for no one
+
+FCKConfig.ImageUpload = true ;
+FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Image' ;
+FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif|jpeg|png|bmp)$" ; // empty for all
+FCKConfig.ImageUploadDeniedExtensions = "" ; // empty for no one
+
+FCKConfig.FlashUpload = true ;
+FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Flash' ;
+FCKConfig.FlashUploadAllowedExtensions = ".(swf|flv)$" ; // empty for all
+FCKConfig.FlashUploadDeniedExtensions = "" ; // empty for no one
+
+FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/' ;
+FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;
+FCKConfig.SmileyColumns = 8 ;
+FCKConfig.SmileyWindowWidth = 320 ;
+FCKConfig.SmileyWindowHeight = 210 ;
+
+FCKConfig.BackgroundBlockerColor = '#ffffff' ;
+FCKConfig.BackgroundBlockerOpacity = 0.50 ;
+
+FCKConfig.MsWebBrowserControlCompat = false ;
+
+FCKConfig.PreventSubmitHandler = false ;
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/fckeditor.js b/rt/share/html/NoAuth/RichText/FCKeditor/fckeditor.js
new file mode 100644
index 0000000..1216e4b
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/fckeditor.js
@@ -0,0 +1,330 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for JavaScript.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in a HTML page in the client side. For server side
+ * operations, use the specific integration system.
+ */
+
+// FCKeditor Class
+var FCKeditor = function( instanceName, width, height, toolbarSet, value )
+{
+ // Properties
+ this.InstanceName = instanceName ;
+ this.Width = width || '100%' ;
+ this.Height = height || '200' ;
+ this.ToolbarSet = toolbarSet || 'Default' ;
+ this.Value = value || '' ;
+ this.BasePath = FCKeditor.BasePath ;
+ this.CheckBrowser = true ;
+ this.DisplayErrors = true ;
+
+ this.Config = new Object() ;
+
+ // Events
+ this.OnError = null ; // function( source, errorNumber, errorDescription )
+}
+
+/**
+ * This is the default BasePath used by all editor instances.
+ */
+FCKeditor.BasePath = '/fckeditor/' ;
+
+/**
+ * The minimum height used when replacing textareas.
+ */
+FCKeditor.MinHeight = 200 ;
+
+/**
+ * The minimum width used when replacing textareas.
+ */
+FCKeditor.MinWidth = 750 ;
+
+FCKeditor.prototype.Version = '2.6.4' ;
+FCKeditor.prototype.VersionBuild = '21629' ;
+
+FCKeditor.prototype.Create = function()
+{
+ document.write( this.CreateHtml() ) ;
+}
+
+FCKeditor.prototype.CreateHtml = function()
+{
+ // Check for errors
+ if ( !this.InstanceName || this.InstanceName.length == 0 )
+ {
+ this._ThrowError( 701, 'You must specify an instance name.' ) ;
+ return '' ;
+ }
+
+ var sHtml = '' ;
+
+ if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+ {
+ sHtml += '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '" style="display:none" />' ;
+ sHtml += this._GetConfigHtml() ;
+ sHtml += this._GetIFrameHtml() ;
+ }
+ else
+ {
+ var sWidth = this.Width.toString().indexOf('%') > 0 ? this.Width : this.Width + 'px' ;
+ var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ;
+
+ sHtml += '<textarea name="' + this.InstanceName +
+ '" rows="4" cols="40" style="width:' + sWidth +
+ ';height:' + sHeight ;
+
+ if ( this.TabIndex )
+ sHtml += '" tabindex="' + this.TabIndex ;
+
+ sHtml += '">' +
+ this._HTMLEncode( this.Value ) +
+ '<\/textarea>' ;
+ }
+
+ return sHtml ;
+}
+
+FCKeditor.prototype.ReplaceTextarea = function()
+{
+ if ( document.getElementById( this.InstanceName + '___Frame' ) )
+ return ;
+ if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+ {
+ // We must check the elements firstly using the Id and then the name.
+ var oTextarea = document.getElementById( this.InstanceName ) ;
+ var colElementsByName = document.getElementsByName( this.InstanceName ) ;
+ var i = 0;
+ while ( oTextarea || i == 0 )
+ {
+ if ( oTextarea && oTextarea.tagName.toLowerCase() == 'textarea' )
+ break ;
+ oTextarea = colElementsByName[i++] ;
+ }
+
+ if ( !oTextarea )
+ {
+ alert( 'Error: The TEXTAREA with id or name set to "' + this.InstanceName + '" was not found' ) ;
+ return ;
+ }
+
+ oTextarea.style.display = 'none' ;
+
+ if ( oTextarea.tabIndex )
+ this.TabIndex = oTextarea.tabIndex ;
+
+ this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
+ this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
+ }
+}
+
+FCKeditor.prototype._InsertHtmlBefore = function( html, element )
+{
+ if ( element.insertAdjacentHTML ) // IE
+ element.insertAdjacentHTML( 'beforeBegin', html ) ;
+ else // Gecko
+ {
+ var oRange = document.createRange() ;
+ oRange.setStartBefore( element ) ;
+ var oFragment = oRange.createContextualFragment( html );
+ element.parentNode.insertBefore( oFragment, element ) ;
+ }
+}
+
+FCKeditor.prototype._GetConfigHtml = function()
+{
+ var sConfig = '' ;
+ for ( var o in this.Config )
+ {
+ if ( sConfig.length > 0 ) sConfig += '&amp;' ;
+ sConfig += encodeURIComponent( o ) + '=' + encodeURIComponent( this.Config[o] ) ;
+ }
+
+ return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '" style="display:none" />' ;
+}
+
+FCKeditor.prototype._GetIFrameHtml = function()
+{
+ var sFile = 'fckeditor.html' ;
+
+ try
+ {
+ if ( (/fcksource=true/i).test( window.top.location.search ) )
+ sFile = 'fckeditor.original.html' ;
+ }
+ catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
+
+ var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + encodeURIComponent( this.InstanceName ) ;
+ if (this.ToolbarSet)
+ sLink += '&amp;Toolbar=' + this.ToolbarSet ;
+
+ var html = '<iframe id="' + this.InstanceName +
+ '___Frame" src="' + sLink +
+ '" width="' + this.Width +
+ '" height="' + this.Height ;
+
+ if ( this.TabIndex )
+ html += '" tabindex="' + this.TabIndex ;
+
+ html += '" frameborder="0" scrolling="no"></iframe>' ;
+
+ return html ;
+}
+
+FCKeditor.prototype._IsCompatibleBrowser = function()
+{
+ return FCKeditor_IsCompatibleBrowser() ;
+}
+
+FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
+{
+ this.ErrorNumber = errorNumber ;
+ this.ErrorDescription = errorDescription ;
+
+ if ( this.DisplayErrors )
+ {
+ document.write( '<div style="COLOR: #ff0000">' ) ;
+ document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ;
+ document.write( '</div>' ) ;
+ }
+
+ if ( typeof( this.OnError ) == 'function' )
+ this.OnError( this, errorNumber, errorDescription ) ;
+}
+
+FCKeditor.prototype._HTMLEncode = function( text )
+{
+ if ( typeof( text ) != "string" )
+ text = text.toString() ;
+
+ text = text.replace(
+ /&/g, "&amp;").replace(
+ /"/g, "&quot;").replace(
+ /</g, "&lt;").replace(
+ />/g, "&gt;") ;
+
+ return text ;
+}
+
+;(function()
+{
+ var textareaToEditor = function( textarea )
+ {
+ var editor = new FCKeditor( textarea.name ) ;
+
+ editor.Width = Math.max( textarea.offsetWidth, FCKeditor.MinWidth ) ;
+ editor.Height = Math.max( textarea.offsetHeight, FCKeditor.MinHeight ) ;
+
+ return editor ;
+ }
+
+ /**
+ * Replace all <textarea> elements available in the document with FCKeditor
+ * instances.
+ *
+ * // Replace all <textarea> elements in the page.
+ * FCKeditor.ReplaceAllTextareas() ;
+ *
+ * // Replace all <textarea class="myClassName"> elements in the page.
+ * FCKeditor.ReplaceAllTextareas( 'myClassName' ) ;
+ *
+ * // Selectively replace <textarea> elements, based on custom assertions.
+ * FCKeditor.ReplaceAllTextareas( function( textarea, editor )
+ * {
+ * // Custom code to evaluate the replace, returning false if it
+ * // must not be done.
+ * // It also passes the "editor" parameter, so the developer can
+ * // customize the instance.
+ * } ) ;
+ */
+ FCKeditor.ReplaceAllTextareas = function()
+ {
+ var textareas = document.getElementsByTagName( 'textarea' ) ;
+
+ for ( var i = 0 ; i < textareas.length ; i++ )
+ {
+ var editor = null ;
+ var textarea = textareas[i] ;
+ var name = textarea.name ;
+
+ // The "name" attribute must exist.
+ if ( !name || name.length == 0 )
+ continue ;
+
+ if ( typeof arguments[0] == 'string' )
+ {
+ // The textarea class name could be passed as the function
+ // parameter.
+
+ var classRegex = new RegExp( '(?:^| )' + arguments[0] + '(?:$| )' ) ;
+
+ if ( !classRegex.test( textarea.className ) )
+ continue ;
+ }
+ else if ( typeof arguments[0] == 'function' )
+ {
+ // An assertion function could be passed as the function parameter.
+ // It must explicitly return "false" to ignore a specific <textarea>.
+ editor = textareaToEditor( textarea ) ;
+ if ( arguments[0]( textarea, editor ) === false )
+ continue ;
+ }
+
+ if ( !editor )
+ editor = textareaToEditor( textarea ) ;
+
+ editor.ReplaceTextarea() ;
+ }
+ }
+})() ;
+
+function FCKeditor_IsCompatibleBrowser()
+{
+ var sAgent = navigator.userAgent.toLowerCase() ;
+
+ // Internet Explorer 5.5+
+ if ( /*@cc_on!@*/false && sAgent.indexOf("mac") == -1 )
+ {
+ var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
+ return ( sBrowserVersion >= 5.5 ) ;
+ }
+
+ // Gecko (Opera 9 tries to behave like Gecko at this point).
+ if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 && !( typeof(opera) == 'object' && opera.postError ) )
+ return true ;
+
+ // Opera 9.50+
+ if ( window.opera && window.opera.version && parseFloat( window.opera.version() ) >= 9.5 )
+ return true ;
+
+ // Adobe AIR
+ // Checked before Safari because AIR have the WebKit rich text editor
+ // features from Safari 3.0.4, but the version reported is 420.
+ if ( sAgent.indexOf( ' adobeair/' ) != -1 )
+ return ( sAgent.match( / adobeair\/(\d+)/ )[1] >= 1 ) ; // Build must be at least v1
+
+ // Safari 3+
+ if ( sAgent.indexOf( ' applewebkit/' ) != -1 )
+ return ( sAgent.match( / applewebkit\/(\d+)/ )[1] >= 522 ) ; // Build must be at least 522 (v3)
+
+ return false ;
+}
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/fckpackager.xml b/rt/share/html/NoAuth/RichText/FCKeditor/fckpackager.xml
new file mode 100644
index 0000000..145c912
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/fckpackager.xml
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the configuration file to be used with FCKpackager to generate the
+ * compressed code files in the "js" folder.
+ *
+ * Please check http://www.fckeditor.net for more info.
+-->
+<Package>
+ <Header><![CDATA[/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+]]></Header>
+ <Constants removeDeclaration="false">
+ <Constant name="FCK_STATUS_NOTLOADED" value="0" />
+ <Constant name="FCK_STATUS_ACTIVE" value="1" />
+ <Constant name="FCK_STATUS_COMPLETE" value="2" />
+ <Constant name="FCK_TRISTATE_OFF" value="0" />
+ <Constant name="FCK_TRISTATE_ON" value="1" />
+ <Constant name="FCK_TRISTATE_DISABLED" value="-1" />
+ <Constant name="FCK_UNKNOWN" value="-9" />
+ <Constant name="FCK_TOOLBARITEM_ONLYICON" value="0" />
+ <Constant name="FCK_TOOLBARITEM_ONLYTEXT" value="1" />
+ <Constant name="FCK_TOOLBARITEM_ICONTEXT" value="2" />
+ <Constant name="FCK_EDITMODE_WYSIWYG" value="0" />
+ <Constant name="FCK_EDITMODE_SOURCE" value="1" />
+ <Constant name="FCK_STYLE_BLOCK" value="0" />
+ <Constant name="FCK_STYLE_INLINE" value="1" />
+ <Constant name="FCK_STYLE_OBJECT" value="2" />
+ </Constants>
+ <PackageFile path="editor/js/fckeditorcode_ie.js">
+ <File path="editor/_source/fckconstants.js" />
+ <File path="editor/_source/fckjscoreextensions.js" />
+ <File path="editor/_source/classes/fckiecleanup.js" />
+ <File path="editor/_source/internals/fckbrowserinfo.js" />
+ <File path="editor/_source/internals/fckurlparams.js" />
+ <File path="editor/_source/classes/fckevents.js" />
+ <File path="editor/_source/classes/fckdataprocessor.js" />
+ <File path="editor/_source/internals/fck.js" />
+ <File path="editor/_source/internals/fck_ie.js" />
+ <File path="editor/_source/internals/fckconfig.js" />
+ <File path="editor/_source/internals/fckdebug_empty.js" />
+ <File path="editor/_source/internals/fckdomtools.js" />
+ <File path="editor/_source/internals/fcktools.js" />
+ <File path="editor/_source/internals/fcktools_ie.js" />
+ <File path="editor/_source/fckeditorapi.js" />
+ <File path="editor/_source/classes/fckimagepreloader.js" />
+
+ <File path="editor/_source/internals/fckregexlib.js" />
+ <File path="editor/_source/internals/fcklistslib.js" />
+ <File path="editor/_source/internals/fcklanguagemanager.js" />
+ <File path="editor/_source/internals/fckxhtmlentities.js" />
+ <File path="editor/_source/internals/fckxhtml.js" />
+ <File path="editor/_source/internals/fckxhtml_ie.js" />
+ <File path="editor/_source/internals/fckcodeformatter.js" />
+ <File path="editor/_source/internals/fckundo.js" />
+ <File path="editor/_source/classes/fckeditingarea.js" />
+ <File path="editor/_source/classes/fckkeystrokehandler.js" />
+
+ <File path="editor/dtd/fck_xhtml10transitional.js" />
+ <File path="editor/_source/classes/fckstyle.js" />
+ <File path="editor/_source/internals/fckstyles.js" />
+
+ <File path="editor/_source/internals/fcklisthandler.js" />
+ <File path="editor/_source/classes/fckelementpath.js" />
+ <File path="editor/_source/classes/fckdomrange.js" />
+ <File path="editor/_source/classes/fckdomrange_ie.js" />
+ <File path="editor/_source/classes/fckdomrangeiterator.js" />
+ <File path="editor/_source/classes/fckdocumentfragment_ie.js" />
+ <File path="editor/_source/classes/fckw3crange.js" />
+ <File path="editor/_source/classes/fckenterkey.js" />
+
+ <File path="editor/_source/internals/fckdocumentprocessor.js" />
+ <File path="editor/_source/internals/fckselection.js" />
+ <File path="editor/_source/internals/fckselection_ie.js" />
+
+ <File path="editor/_source/internals/fcktablehandler.js" />
+ <File path="editor/_source/internals/fcktablehandler_ie.js" />
+ <File path="editor/_source/classes/fckxml.js" />
+ <File path="editor/_source/classes/fckxml_ie.js" />
+
+ <File path="editor/_source/commandclasses/fcknamedcommand.js" />
+ <File path="editor/_source/commandclasses/fckstylecommand.js" />
+ <File path="editor/_source/commandclasses/fck_othercommands.js" />
+ <File path="editor/_source/commandclasses/fckshowblocks.js" />
+ <File path="editor/_source/commandclasses/fckspellcheckcommand_ie.js" />
+ <File path="editor/_source/commandclasses/fcktextcolorcommand.js" />
+ <File path="editor/_source/commandclasses/fckpasteplaintextcommand.js" />
+ <File path="editor/_source/commandclasses/fckpastewordcommand.js" />
+ <File path="editor/_source/commandclasses/fcktablecommand.js" />
+ <File path="editor/_source/commandclasses/fckfitwindow.js" />
+ <File path="editor/_source/commandclasses/fcklistcommands.js" />
+ <File path="editor/_source/commandclasses/fckjustifycommands.js" />
+ <File path="editor/_source/commandclasses/fckindentcommands.js" />
+ <File path="editor/_source/commandclasses/fckblockquotecommand.js" />
+ <File path="editor/_source/commandclasses/fckcorestylecommand.js" />
+ <File path="editor/_source/commandclasses/fckremoveformatcommand.js" />
+ <File path="editor/_source/internals/fckcommands.js" />
+
+ <File path="editor/_source/classes/fckpanel.js" />
+ <File path="editor/_source/classes/fckicon.js" />
+ <File path="editor/_source/classes/fcktoolbarbuttonui.js" />
+ <File path="editor/_source/classes/fcktoolbarbutton.js" />
+ <File path="editor/_source/classes/fckspecialcombo.js" />
+ <File path="editor/_source/classes/fcktoolbarspecialcombo.js" />
+ <File path="editor/_source/classes/fcktoolbarstylecombo.js" />
+ <File path="editor/_source/classes/fcktoolbarfontformatcombo.js" />
+ <File path="editor/_source/classes/fcktoolbarfontscombo.js" />
+ <File path="editor/_source/classes/fcktoolbarfontsizecombo.js" />
+ <File path="editor/_source/classes/fcktoolbarpanelbutton.js" />
+ <File path="editor/_source/internals/fcktoolbaritems.js" />
+ <File path="editor/_source/classes/fcktoolbar.js" />
+ <File path="editor/_source/classes/fcktoolbarbreak_ie.js" />
+ <File path="editor/_source/internals/fcktoolbarset.js" />
+ <File path="editor/_source/internals/fckdialog.js" />
+
+ <File path="editor/_source/classes/fckmenuitem.js" />
+ <File path="editor/_source/classes/fckmenublock.js" />
+ <File path="editor/_source/classes/fckmenublockpanel.js" />
+ <File path="editor/_source/classes/fckcontextmenu.js" />
+ <File path="editor/_source/internals/fck_contextmenu.js" />
+ <File path="editor/_source/classes/fckhtmliterator.js" />
+
+ <File path="editor/_source/classes/fckplugin.js" />
+ <File path="editor/_source/internals/fckplugins.js" />
+ </PackageFile>
+
+ <PackageFile path="editor/js/fckeditorcode_gecko.js">
+ <File path="editor/_source/fckconstants.js" />
+ <File path="editor/_source/fckjscoreextensions.js" />
+ <File path="editor/_source/internals/fckbrowserinfo.js" />
+ <File path="editor/_source/internals/fckurlparams.js" />
+ <File path="editor/_source/classes/fckevents.js" />
+ <File path="editor/_source/classes/fckdataprocessor.js" />
+ <File path="editor/_source/internals/fck.js" />
+ <File path="editor/_source/internals/fck_gecko.js" />
+ <File path="editor/_source/internals/fckconfig.js" />
+ <File path="editor/_source/internals/fckdebug_empty.js" />
+ <File path="editor/_source/internals/fckdomtools.js" />
+ <File path="editor/_source/internals/fcktools.js" />
+ <File path="editor/_source/internals/fcktools_gecko.js" />
+ <File path="editor/_source/fckeditorapi.js" />
+ <File path="editor/_source/classes/fckimagepreloader.js" />
+
+ <File path="editor/_source/internals/fckregexlib.js" />
+ <File path="editor/_source/internals/fcklistslib.js" />
+ <File path="editor/_source/internals/fcklanguagemanager.js" />
+ <File path="editor/_source/internals/fckxhtmlentities.js" />
+ <File path="editor/_source/internals/fckxhtml.js" />
+ <File path="editor/_source/internals/fckxhtml_gecko.js" />
+ <File path="editor/_source/internals/fckcodeformatter.js" />
+ <File path="editor/_source/internals/fckundo.js" />
+ <File path="editor/_source/classes/fckeditingarea.js" />
+ <File path="editor/_source/classes/fckkeystrokehandler.js" />
+
+ <File path="editor/dtd/fck_xhtml10transitional.js" />
+ <File path="editor/_source/classes/fckstyle.js" />
+ <File path="editor/_source/internals/fckstyles.js" />
+
+ <File path="editor/_source/internals/fcklisthandler.js" />
+ <File path="editor/_source/classes/fckelementpath.js" />
+ <File path="editor/_source/classes/fckdomrange.js" />
+ <File path="editor/_source/classes/fckdomrange_gecko.js" />
+ <File path="editor/_source/classes/fckdomrangeiterator.js" />
+ <File path="editor/_source/classes/fckdocumentfragment_gecko.js" />
+ <File path="editor/_source/classes/fckw3crange.js" />
+ <File path="editor/_source/classes/fckenterkey.js" />
+
+ <File path="editor/_source/internals/fckdocumentprocessor.js" />
+ <File path="editor/_source/internals/fckselection.js" />
+ <File path="editor/_source/internals/fckselection_gecko.js" />
+
+ <File path="editor/_source/internals/fcktablehandler.js" />
+ <File path="editor/_source/internals/fcktablehandler_gecko.js" />
+ <File path="editor/_source/classes/fckxml.js" />
+ <File path="editor/_source/classes/fckxml_gecko.js" />
+
+ <File path="editor/_source/commandclasses/fcknamedcommand.js" />
+ <File path="editor/_source/commandclasses/fckstylecommand.js" />
+ <File path="editor/_source/commandclasses/fck_othercommands.js" />
+ <File path="editor/_source/commandclasses/fckshowblocks.js" />
+ <File path="editor/_source/commandclasses/fckspellcheckcommand_gecko.js" />
+ <File path="editor/_source/commandclasses/fcktextcolorcommand.js" />
+ <File path="editor/_source/commandclasses/fckpasteplaintextcommand.js" />
+ <File path="editor/_source/commandclasses/fckpastewordcommand.js" />
+ <File path="editor/_source/commandclasses/fcktablecommand.js" />
+ <File path="editor/_source/commandclasses/fckfitwindow.js" />
+ <File path="editor/_source/commandclasses/fcklistcommands.js" />
+ <File path="editor/_source/commandclasses/fckjustifycommands.js" />
+ <File path="editor/_source/commandclasses/fckindentcommands.js" />
+ <File path="editor/_source/commandclasses/fckblockquotecommand.js" />
+ <File path="editor/_source/commandclasses/fckcorestylecommand.js" />
+ <File path="editor/_source/commandclasses/fckremoveformatcommand.js" />
+ <File path="editor/_source/internals/fckcommands.js" />
+
+ <File path="editor/_source/classes/fckpanel.js" />
+ <File path="editor/_source/classes/fckicon.js" />
+ <File path="editor/_source/classes/fcktoolbarbuttonui.js" />
+ <File path="editor/_source/classes/fcktoolbarbutton.js" />
+ <File path="editor/_source/classes/fckspecialcombo.js" />
+ <File path="editor/_source/classes/fcktoolbarspecialcombo.js" />
+ <File path="editor/_source/classes/fcktoolbarstylecombo.js" />
+ <File path="editor/_source/classes/fcktoolbarfontformatcombo.js" />
+ <File path="editor/_source/classes/fcktoolbarfontscombo.js" />
+ <File path="editor/_source/classes/fcktoolbarfontsizecombo.js" />
+ <File path="editor/_source/classes/fcktoolbarpanelbutton.js" />
+ <File path="editor/_source/internals/fcktoolbaritems.js" />
+ <File path="editor/_source/classes/fcktoolbar.js" />
+ <File path="editor/_source/classes/fcktoolbarbreak_gecko.js" />
+ <File path="editor/_source/internals/fcktoolbarset.js" />
+ <File path="editor/_source/internals/fckdialog.js" />
+
+ <File path="editor/_source/classes/fckmenuitem.js" />
+ <File path="editor/_source/classes/fckmenublock.js" />
+ <File path="editor/_source/classes/fckmenublockpanel.js" />
+ <File path="editor/_source/classes/fckcontextmenu.js" />
+ <File path="editor/_source/internals/fck_contextmenu.js" />
+ <File path="editor/_source/classes/fckhtmliterator.js" />
+
+ <File path="editor/_source/classes/fckplugin.js" />
+ <File path="editor/_source/internals/fckplugins.js" />
+ </PackageFile>
+
+</Package>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/fckstyles.xml b/rt/share/html/NoAuth/RichText/FCKeditor/fckstyles.xml
new file mode 100644
index 0000000..49718f9
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/fckstyles.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the sample style definitions file. It makes the styles combo
+ * completely customizable.
+ *
+ * See FCKConfig.StylesXmlPath in the configuration file.
+-->
+<Styles>
+
+ <!-- Block Styles -->
+
+ <!--
+ # These styles are already available in the "Format" combo, so they are not
+ # needed here by default.
+
+ <Style name="Heading 1" element="h1" />
+ <Style name="Heading 2" element="h2" />
+ <Style name="Heading 3" element="h3" />
+ <Style name="Heading 4" element="h4" />
+ <Style name="Heading 5" element="h5" />
+ <Style name="Heading 6" element="h6" />
+ <Style name="Paragraph" element="p" />
+ <Style name="Document Block" element="div" />
+ <Style name="Preformatted Text" element="pre" />
+ <Style name="Address" element="address" />
+ -->
+
+ <!-- Inline Styles -->
+
+ <!--
+ # These are core styles available as toolbar buttons.
+
+ <Style name="Bold" element="b">
+ <Override element="strong" />
+ </Style>
+ <Style name="Italic" element="i">
+ <Override element="em" />
+ </Style>
+ <Style name="Underline" element="u" />
+ <Style name="Strikethrough" element="strike" />
+ <Style name="Subscript" element="sub" />
+ <Style name="Superscript" element="sup" />
+ -->
+
+ <Style name="Marker: Yellow" element="span">
+ <Style name="background-color" value="Yellow" />
+ </Style>
+ <Style name="Marker: Green" element="span">
+ <Style name="background-color" value="Lime" />
+ </Style>
+
+ <Style name="Big" element="big" />
+ <Style name="Small" element="small" />
+ <Style name="Typewriter" element="tt" />
+
+ <Style name="Computer Code" element="code" />
+ <Style name="Keyboard Phrase" element="kbd" />
+ <Style name="Sample Text" element="samp" />
+ <Style name="Variable" element="var" />
+
+ <Style name="Deleted Text" element="del" />
+ <Style name="Inserted Text" element="ins" />
+
+ <Style name="Cited Work" element="cite" />
+ <Style name="Inline Quotation" element="q" />
+
+ <Style name="Language: RTL" element="span">
+ <Attribute name="dir" value="rtl" />
+ </Style>
+ <Style name="Language: LTR" element="span">
+ <Attribute name="dir" value="ltr" />
+ </Style>
+ <Style name="Language: RTL Strong" element="bdo">
+ <Attribute name="dir" value="rtl" />
+ </Style>
+ <Style name="Language: LTR Strong" element="bdo">
+ <Attribute name="dir" value="ltr" />
+ </Style>
+
+ <!-- Object Styles -->
+
+ <Style name="Image on Left" element="img">
+ <Attribute name="style" value="padding: 5px; margin-right: 5px" />
+ <Attribute name="border" value="2" />
+ <Attribute name="align" value="left" />
+ </Style>
+ <Style name="Image on Right" element="img">
+ <Attribute name="style" value="padding: 5px; margin-left: 5px" />
+ <Attribute name="border" value="2" />
+ <Attribute name="align" value="right" />
+ </Style>
+</Styles>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/fcktemplates.xml b/rt/share/html/NoAuth/RichText/FCKeditor/fcktemplates.xml
new file mode 100644
index 0000000..8d82fc4
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/fcktemplates.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the sample templates definitions file. It makes the "templates"
+ * command completely customizable.
+ *
+ * See FCKConfig.TemplatesXmlPath in the configuration file.
+-->
+<Templates imagesBasePath="fck_template/images/">
+ <Template title="Image and Title" image="template1.gif">
+ <Description>One main image with a title and text that surround the image.</Description>
+ <Html>
+ <![CDATA[
+ <img style="MARGIN-RIGHT: 10px" height="100" alt="" width="100" align="left"/>
+ <h3>Type the title here</h3>
+ Type the text here
+ ]]>
+ </Html>
+ </Template>
+ <Template title="Strange Template" image="template2.gif">
+ <Description>A template that defines two colums, each one with a title, and some text.</Description>
+ <Html>
+ <![CDATA[
+ <table cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tbody>
+ <tr>
+ <td width="50%">
+ <h3>Title 1</h3>
+ </td>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
+ <td width="50%">
+ <h3>Title 2</h3>
+ </td>
+ </tr>
+ <tr>
+ <td>Text 1</td>
+ <td>&nbsp;</td>
+ <td>Text 2</td>
+ </tr>
+ </tbody>
+ </table>
+ More text goes here.
+ ]]>
+ </Html>
+ </Template>
+ <Template title="Text and Table" image="template3.gif">
+ <Description>A title with some text and a table.</Description>
+ <Html>
+ <![CDATA[
+ <table align="left" width="80%" border="0" cellspacing="0" cellpadding="0"><tr><td>
+ <h3>Title goes here</h3>
+ <p>
+ <table style="FLOAT: right" cellspacing="0" cellpadding="0" width="150" border="1">
+ <tbody>
+ <tr>
+ <td align="center" colspan="3"><strong>Table title</strong></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ </tbody>
+ </table>
+ Type the text here</p>
+ </td></tr></table>
+ ]]>
+ </Html>
+ </Template>
+</Templates>
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/license.txt b/rt/share/html/NoAuth/RichText/FCKeditor/license.txt
new file mode 100644
index 0000000..9d0fd6d
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/FCKeditor/license.txt
@@ -0,0 +1,1246 @@
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2009 Frederico Caldeira Knabben
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+ http://www.gnu.org/licenses/gpl.html
+ (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ http://www.gnu.org/licenses/lgpl.html
+ (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+ http://www.mozilla.org/MPL/MPL-1.1.html
+ (See Appendix C)
+
+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.
+
+Appendix A: The GPL License
+===========================
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+============================
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+===========================
+
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
diff --git a/rt/share/html/NoAuth/RichText/dhandler b/rt/share/html/NoAuth/RichText/dhandler
new file mode 100644
index 0000000..c8bafe5
--- /dev/null
+++ b/rt/share/html/NoAuth/RichText/dhandler
@@ -0,0 +1,69 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+use File::Basename;
+my $arg = $m->dhandler_arg;
+my $file = dirname($m->current_comp->source_file) . '/FCKeditor/' . $arg;
+return $m->decline unless -f $file && -r _;
+
+my $suffix = $1 if $file =~ /([^.]+)$/;
+
+my $type = {qw(
+ xml text/xml
+ html text/html
+ js application/javascript
+ css text/css
+ gif image/gif
+ jpg image/jpeg
+ png image/png
+)}->{$suffix} || 'application/octet-stream';
+
+RT::Interface::Web->SendStaticFile( File => $file, Type => $type );
+
+$m->abort;
+</%INIT>
diff --git a/rt/share/html/NoAuth/css/3.4-compat/body.css b/rt/share/html/NoAuth/css/3.4-compat/body.css
new file mode 100644
index 0000000..635bc9f
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/body.css
@@ -0,0 +1,75 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#body {
+ margin: 0.5em 0.5em 0 0.5em;
+ float: left;
+ width: 80%;
+}
+
+#body h1 { font-size: 1.5em; }
+#body h2 { font-size: 1.3em; }
+#body h3 { font-size: 1.1em; }
+#body h4 { font-size: 1em; }
+#body h5 { font-size: 0.9em; }
+#body h6 { font-size: 0.8em; }
+
+#body h1, #body h2, #body h3, #body h4, #body h5, #body h6 {
+ font-weight: bold;
+}
+
+#body :link { color: black; }
+
+#body :link, #body :visited {
+ font-weight: bold;
+ text-decoration: none;
+}
+
+#body :link:hover, #body :visited:hover {
+ text-decoration: underline;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.4-compat/footer.css b/rt/share/html/NoAuth/css/3.4-compat/footer.css
new file mode 100644
index 0000000..e1f53b4
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/footer.css
@@ -0,0 +1,61 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#footer {
+ clear: both;
+ font-size: 0.8em;
+ margin-top: 5em;
+ padding-bottom: 2em;
+ color: #888;
+}
+
+#footer p {
+ text-align: right;
+ padding: 0 0.5em 0 0;
+ margin: 0;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.4-compat/forms.css b/rt/share/html/NoAuth/css/3.4-compat/forms.css
new file mode 100644
index 0000000..cbfb829
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/forms.css
@@ -0,0 +1,110 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+form .label, form label {
+ font-weight: bold;
+}
+
+.submit {
+ background: #069;
+%# These borders are needed so the container actually surrounds the floats inside it
+ border-top: 1px solid white;
+ border-bottom: 1px solid white;
+ color: #ffdb00;
+ font-weight: bold;
+}
+
+.submit .buttons { float: right; }
+.submit .extra-buttons { float: left; }
+.submit .button { font-size: 0.9em; }
+
+.submit .submit-clear { clear: right; }
+
+.input-row {
+ clear: both;
+ padding: 0.25em;
+}
+
+%# ComboBox styles... some properties like height and width must be dynamically
+%# set in the JS (at least for now).
+.combobox {
+ position: relative;
+ border: 2px inset ButtonHighlight;
+ padding-left: 0.5em;
+ padding-bottom: 0.1em;
+}
+
+.combobox .combo-button {
+ padding: 0 2px 0 2px;
+ margin: 0;
+ background: ButtonFace;
+ color: ButtonText;
+ border: 2px outset ButtonHighlight;
+ cursor: default;
+ font-size: 8pt;
+}
+
+.combobox .combo-text {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+.combobox .combo-list {
+ z-index: 200;
+}
+
+#quickbar #topactions form {
+ display: inline;
+ margin-left: 2em;
+}
+
+.cfinvalidfield {
+ font-style: italic;
+ color: red;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.4-compat/header.css b/rt/share/html/NoAuth/css/3.4-compat/header.css
new file mode 100644
index 0000000..9df95da
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/header.css
@@ -0,0 +1,88 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#header #page-menu {
+ display: none;
+}
+
+#header {
+ background: #4282b5;
+ margin-top: 0;
+ padding-bottom: 0.2em;
+ float: left;
+ width: 82%;
+}
+
+#header h1 {
+ background: #4282b5;
+ color: white;
+ font-size: 1.7em;
+ margin: 0;
+ padding: 0;
+}
+
+#header #actions-menu {
+ display: block;
+ margin: 0 1em 0 0;
+ padding: 0;
+ color: white;
+ text-align: right;
+ font-size: 1.2em;
+}
+
+#header #actions-menu li {
+ display: inline;
+}
+
+#header #actions-menu :link, #header #actions-menu :visited {
+ color: white;
+ text-decoration: none;
+}
+
+#header #actions-menu :link:hover, #header #actions-menu :visited:hover {
+ text-decoration: underline;
+}
diff --git a/rt/share/html/NoAuth/css/3.4-compat/login.css b/rt/share/html/NoAuth/css/3.4-compat/login.css
new file mode 100644
index 0000000..8544e56
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/login.css
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#body.login-body {
+ width: 98%;
+}
+
+#login-box {
+ width: 30em;
+}
diff --git a/rt/share/html/NoAuth/css/3.4-compat/main.css b/rt/share/html/NoAuth/css/3.4-compat/main.css
new file mode 100644
index 0000000..b5506d5
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/main.css
@@ -0,0 +1,75 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback(CallbackName => 'Begin');
+
+%# Import the 3.5 styles we want to build off of...
+@import "../3.5-default/logo.css";
+@import "../3.5-default/misc.css";
+@import "../3.5-default/transactions.css";
+@import "../3.5-default/approvals.css";
+@import "../3.5-default/login.css";
+@import "../3.5-default/quickbar.css";
+@import "../3.5-default/ticket.css";
+
+% $m->callback(CallbackName => 'Post3.5');
+
+%# ...and then import the 3.4 compat styles afterwards so they can cascade
+@import "nav.css";
+@import "footer.css";
+@import "body.css";
+@import "titlebox.css";
+@import "header.css";
+@import "forms.css";
+@import "transactions.css";
+@import "ticket.css";
+@import "login.css";
+@import "quickbar.css";
+@import "misc.css";
+
+% $m->callback(CallbackName => 'End');
+
diff --git a/rt/share/html/NoAuth/css/3.4-compat/misc.css b/rt/share/html/NoAuth/css/3.4-compat/misc.css
new file mode 100644
index 0000000..2a58b13
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/misc.css
@@ -0,0 +1,78 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.oddline { background: white; }
+.evenline { background: #cecfef; }
+
+
+#comp-Search-Build .titlebox-content {
+ padding-left: 0.7em;
+ padding-right: 0.3em;
+}
+
+#editsearches {
+ width: 55%;
+ float:right;
+ text-align: left;
+ padding-right: 1em;
+}
+
+#editsearches .titlebox-content {
+ padding: 1em;
+}
+
+
+#editquery {
+ width: 40%;
+ float: left;
+ padding-left: 1em;
+}
+
+#pick-criteria {
+ clear: both;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.4-compat/nav.css b/rt/share/html/NoAuth/css/3.4-compat/nav.css
new file mode 100644
index 0000000..87381bd
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/nav.css
@@ -0,0 +1,106 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#nav {
+ clear: left;
+ float: left;
+ width: 18%;
+ font-size: 1.4em;
+ color: #eee;
+ margin: 0;
+ background: #4282b5 url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right;
+}
+
+#nav #system-menu {
+ padding: 0 0.2em 0.2em 0.2em;
+ margin-top: 0;
+/* background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right; */
+}
+
+#nav ul {
+ list-style: none;
+ padding-left: 0.5em;
+ margin-left: 0;
+}
+
+#nav ul .bullet, #nav ul .separator {
+ display: none;
+}
+
+#nav ul li {
+ padding: 0.4em 0 0.4em 0.2em;
+ border-bottom: 1px solid white;
+}
+
+#nav li ul {
+ font-size: 0.9em;
+}
+
+#nav li ul li {
+ border-bottom: none;
+ padding: 0.2em 0 0 0;
+}
+
+#nav :link, #nav :visited {
+ text-decoration: none;
+ color: #eee;
+}
+
+#nav :link:hover,
+#nav :visited:hover,
+#nav :link.selected,
+#nav :visited.selected
+{
+ color: #ff6;
+}
+
+#nav :link.selected,
+#nav :visited.selected
+{
+ text-decoration: underline;
+ font-weight: bold;
+}
diff --git a/rt/share/html/NoAuth/css/3.4-compat/quickbar.css b/rt/share/html/NoAuth/css/3.4-compat/quickbar.css
new file mode 100644
index 0000000..26a5699
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/quickbar.css
@@ -0,0 +1,82 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#quickbar {
+ border: 1px solid transparent;
+}
+
+#quickbar #quick-personal {
+ display: inline;
+ color: #888;
+ padding: 0.5em 1em 0 0;
+ float: right;
+}
+
+#quickbar #quick-personal span {
+ font-weight: bold;
+}
+
+#quickbar #quick-personal :link,
+#quickbar #quick-personal :visited
+{
+ color: #888;
+ font-weight: bold;
+}
+
+#quickbar #quick-personal :link:hover,
+#quickbar #quick-personal :visited:hover
+{
+ color: black;
+}
+
+#quickbar #topactions {
+ color: white;
+ font-size: 0.9em;
+ position: relative;
+ right: 1em;
+ float: right;
+}
diff --git a/rt/share/html/NoAuth/css/3.4-compat/ticket.css b/rt/share/html/NoAuth/css/3.4-compat/ticket.css
new file mode 100644
index 0000000..a4dad36
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/ticket.css
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.value {
+ font-weight: bold;
+}
diff --git a/rt/share/html/NoAuth/css/3.4-compat/titlebox.css b/rt/share/html/NoAuth/css/3.4-compat/titlebox.css
new file mode 100644
index 0000000..9b31b29
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/titlebox.css
@@ -0,0 +1,103 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.titlebox {
+ margin: 0.5em 0;
+}
+
+.titlebox .titlebox-content {
+ padding: 0.05em;
+}
+
+.titlebox .titlebox-title {
+ background: #069;
+ padding: 0.2em 0.5em;
+ color: white;
+ border-top: 1px solid black;
+ border-bottom: 1px solid black;
+ font-weight: bold;
+ position: relative;
+}
+
+.titlebox .titlebox-title .right {
+ position: absolute;
+ right: 1.5em;
+ font-size: 0.9em;
+}
+
+#body .titlebox .titlebox-title :link, #body .titlebox .titlebox-title :visited {
+ color: white;
+}
+
+#body .titlebox .titlebox-title .widget :link, #body .titlebox .titlebox-title .widget :visited {
+ color: black;
+}
+
+.titlebox .titlebox-content hr.clear {
+ visibility: hidden;
+}
+
+%# TRS: I wish there was a more elegant way to do this... I essentially need to
+%# select all elements X that do NOT have element Y as a descendant... which I can
+%# fake with the child selector of CSS2, but IE is stupid and does not support that.
+
+% for (qw(index
+% Search-Build
+% User-Prefs
+% Approvals
+% Admin-Users-Modify
+% SelfService
+% SelfService-Closed
+% Ticket-ModifyAll
+% ))
+% {
+#comp-<%$_%> .titlebox .titlebox-content,
+% }
+.titlebox .titlebox .titlebox-content
+{
+ background: #cecfce;
+}
diff --git a/rt/share/html/NoAuth/css/3.4-compat/transactions.css b/rt/share/html/NoAuth/css/3.4-compat/transactions.css
new file mode 100644
index 0000000..72a3eb3
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.4-compat/transactions.css
@@ -0,0 +1,83 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.ticket-transaction {
+ margin: 0;
+ border: none;
+}
+
+.ticket-transaction .type {
+ width: 1em;
+}
+
+.ticket-transaction.even {
+ background: #cecfef;
+}
+
+.ticket-transaction.basics { border-color: #9c3031; }
+.ticket-transaction.basics .type { background: #9c3031; }
+.ticket-summary .ticket-info-basics .titlebox-content { border-left: none; }
+.ticket-summary .ticket-info-basics .titlebox-title { background: #9c3031; }
+
+.ticket-transaction.people { border-color: #31309c; }
+.ticket-transaction.people .type { background: #31309c; }
+.ticket-summary .ticket-info-people .titlebox-content { border-left: none; }
+.ticket-summary .ticket-info-people .titlebox-title { background: #31309c; }
+
+.ticket-transaction.links { border-color: #316531; }
+.ticket-transaction.links .type { background: #316531; }
+.ticket-summary .ticket-info-links .titlebox-content { border-left: none; }
+.ticket-summary .ticket-info-links .titlebox-title { background: #316531; }
+
+.ticket-transaction.dates { border-color: #633063; }
+.ticket-transaction.dates .type { background: #633063; }
+.ticket-summary .ticket-info-dates .titlebox-content { border-left: none; }
+.ticket-summary .ticket-info-dates .titlebox-title { background: #633063; }
+
+.ticket-transaction.message { border-color: #069; }
+.ticket-transaction.message .type { background: #069; }
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/approvals.css b/rt/share/html/NoAuth/css/3.5-default/approvals.css
new file mode 100644
index 0000000..82c8120
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/approvals.css
@@ -0,0 +1,97 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.approval {
+ margin-bottom: 3em;
+ padding: 0 0 1em 0;
+ border: 1px solid #069;
+}
+
+.approval .name {
+ background: #069;
+ color: white;
+ font-size: 1.1em;
+ padding: 0.2em 0 0.4em 0.2em;
+}
+
+#body .approval .name :link, #body .approval .name :visited {
+ color: white;
+}
+
+.approval .originating-ticket {
+ margin: 0.5em;
+ border: 1px solid #aaa;
+}
+
+.approval .originating-ticket .link {
+ display: block;
+ background: #aaa;
+ padding: 0.2em 0 0.4em 0.2em;
+}
+
+.approval .originating-ticket .info {
+ padding: 0.5em;
+}
+
+#body .approval .originating-ticket .link :link,
+#body .approval .originating-ticket .link :visited {
+ color: black;
+}
+
+.approval .form {
+ margin: 1em 0.5em 0.5em 0.5em;
+}
+
+.approval .form .action, .approval .form .notes {
+ float: left;
+ margin-left: 1em;
+}
+
+.approval .form .action { padding-top: 1em; }
+
+.approval .form .action label { font-weight: normal; }
+.approval .form .notes label { display: block; }
diff --git a/rt/share/html/NoAuth/css/3.5-default/body.css b/rt/share/html/NoAuth/css/3.5-default/body.css
new file mode 100755
index 0000000..3c0bf37
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/body.css
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#body {
+ clear: both;
+ margin: 0 0.75em 0 2em;
+ padding-top: 0.5em;
+}
+
+#body h1 {
+ border-bottom: 1px dotted #069;
+ padding-left: 0.5em;
+}
+
+#body h1 { font-size: 1.5em; }
+#body h2 { font-size: 1.3em; }
+#body h3 { font-size: 1.1em; }
+#body h4 { font-size: 1em; }
+#body h5 { font-size: 0.9em; }
+#body h6 { font-size: 0.8em; }
+
+#body h1, #body h2, #body h3, #body h4, #body h5, #body h6 {
+ color: #930;
+ font-weight: bold;
+}
+
+#body :link { color: #069; }
+
+#body :link, #body :visited {
+ font-weight: bold;
+ text-decoration: none;
+}
+
+#body :link:hover, #body :visited:hover {
+ text-decoration: underline;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/footer.css b/rt/share/html/NoAuth/css/3.5-default/footer.css
new file mode 100644
index 0000000..3bfe8ad
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/footer.css
@@ -0,0 +1,91 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#footer {
+ clear: both;
+ font-size: 0.8em;
+ margin-top: 5em;
+ padding-bottom: 3em;
+}
+
+#footer p { float: left; }
+
+#footer #time {
+ color: white;
+ background: #069 url(<%RT->Config->Get('WebImagesURL')%>/css/ctr-b2g.gif) no-repeat top right;
+ padding: 0.2em 0 0.3em 0;
+ margin: 0;
+ position: relative;
+ z-index: 2;
+}
+
+#footer #time span {
+ padding: 0.2em 2em 0.3em 3em;
+ background: url(<%RT->Config->Get('WebImagesURL')%>/css/cbr-b2g.gif) no-repeat bottom right;
+}
+
+#footer #bpscredits {
+ background: #ccc url(<%RT->Config->Get('WebImagesURL')%>/css/ctr-gray.gif) no-repeat top right;
+ padding: 0.2em 0 0.3em 0;
+ margin: 0;
+ position: relative;
+ left: -10px;
+ z-index: 1;
+}
+
+#footer #bpscredits span {
+ padding: 0.2em 2em 0.3em 3em;
+ background: url(<%RT->Config->Get('WebImagesURL')%>/css/cbr-gray.gif) no-repeat bottom right;
+}
+
+#footer #legal {
+ float: none;
+ color: #888;
+ padding: 1em 0 0 2em;
+ clear: both;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/forms.css b/rt/share/html/NoAuth/css/3.5-default/forms.css
new file mode 100755
index 0000000..6dfde46
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/forms.css
@@ -0,0 +1,148 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+form input.button {
+ border: 3px double #069;
+ border-top-color: #08c;
+ border-left-color: #08c;
+ padding: 0.25em;
+ background: white;
+ font-weight: bold;
+ font-size: 1em;
+ margin: 0.5em 0.5em 0 0.5em;
+}
+
+form input.button:active {
+ border: 3px double #08c;
+ border-top-color: #069;
+ border-left-color: #069;
+}
+
+form select {
+ border: 1px solid #069;
+ padding: 1px;
+}
+
+form input.field, form input, form textarea {
+ border: 1px solid #069;
+ padding: 3px;
+}
+
+form input.checkbox, form input.radio {
+ border: none;
+ padding: 0;
+}
+
+/* form .entry input, form .value input */
+
+.label, form label, .labeltop {
+ font-weight: bold;
+}
+
+.label-comment {
+ font-weight: normal;
+ font-size: 0.9em;
+}
+
+.labeltop {
+ vertical-align: top;
+}
+
+.submit {
+ font-weight: bold;
+ color: #a00;
+ font-size: 1.1em;
+ padding: 0.3em 1.5em 0 1.5em;
+ border-top: 1px solid #930;
+ margin: 1.5em 0 2.5em 0;
+}
+
+.submit .buttons { float: right; }
+.submit .extra-buttons { float: left; }
+.submit .button { font-size: 0.9em; }
+.submit .submit-clear { display: none; }
+
+.input-row {
+ clear: both;
+ padding: 0.25em;
+}
+
+%# ComboBox styles... some properties like height and width must be dynamically
+%# set in the JS (at least for now).
+.combobox {
+ position: relative;
+ z-index: 100;
+}
+
+.combobox .combo-button {
+ margin: 0;
+ margin-top: -0.2em;
+ margin-left: -0.3em;
+ background: ButtonFace;
+ color: ButtonText;
+ border: 2px outset ButtonHighlight;
+ cursor: default;
+ font-size: 1em;
+ z-index: 200;
+}
+
+.combobox .combo-text {
+ margin: 0;
+ padding: 1px;
+ z-index: 110;
+}
+
+.combobox .combo-list {
+ border: 1px outset;
+
+}
+
+.cfinvalidfield {
+ font-style: italic;
+ color: red;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/header.css b/rt/share/html/NoAuth/css/3.5-default/header.css
new file mode 100644
index 0000000..b72cbba
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/header.css
@@ -0,0 +1,152 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#header {
+ clear: both;
+ margin: 0 0.75em 0 0.75em;
+ padding-top: 1em;
+}
+
+#header h1 {
+ margin: 0;
+ padding: 0;
+ color: #930;
+ position: relative;
+ font-size: 2em;
+ font-weight: bold;
+ left: 1.3em;
+ top: 0.15em;
+ z-index: 3;
+ width: 95%;
+}
+
+#header ul {
+ margin: 0;
+ padding: 0;
+ color: #eee;
+ float: left;
+}
+
+#header #page-menu {
+ position: relative;
+ z-index: 2;
+ background: #069 url(<%RT->Config->Get('WebImagesURL')%>/css/ct.gif) no-repeat top left;
+ min-width: 65%;
+}
+
+%# This is an interesting bit of CSS. expression() is an IE-only extension to
+%# it's CSS implementation. Just in case other browsers might choke on it,
+%# the rule is enclosed in a selector only IE will (wrongly) match to an element.
+%#
+%# The expression() function takes Javascript, and basically what it's doing here
+%# is checking to see if the width of the menu would be greater than 65% of the body
+%# width. If it is, great, leave it alone to automatically resize. If it is not, set
+%# it to 65% of the body width. This amounts to emulating the min-width rule that
+%# compliant browsers understand above.
+* html #header ul#page-menu {
+ width: expression(document.body.clientWidth*0.65 < document.getElementById('page-menu').clientWidth ? "auto" : "65%");
+ overflow: visible;
+}
+
+#page-menu div {
+ position: relative;
+ z-index: 3;
+}
+
+#page-menu div { background: url(<%RT->Config->Get('WebImagesURL')%>/css/cb.gif) no-repeat bottom left; }
+#page-menu div div { background: url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+#page-menu div div div {
+ background: url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right;
+ padding: 0.2em 1em 0.4em 1em;
+}
+
+#page-menu.actions-present div div { background: url(<%RT->Config->Get('WebImagesURL')%>/css/cbr-b2lb.gif) no-repeat bottom right; }
+#page-menu.actions-present div div div { background: url(<%RT->Config->Get('WebImagesURL')%>/css/ctr-b2lb.gif) no-repeat top right; }
+
+#header ul li {
+ display: inline;
+}
+
+#header #actions-menu {
+ position: relative;
+ background: #08c;
+}
+
+#actions-menu div {
+ position: relative;
+ z-index: 2;
+}
+
+/*#actions-menu div { background: url(<%RT->Config->Get('WebImagesURL')%>/css/cb.gif) no-repeat bottom left; }*/
+#actions-menu div div { background: url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+#actions-menu div div div {
+ background: url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right;
+ padding: 0.2em 1em 0.4em 1em;
+}
+
+#header :link,
+#header :visited
+{
+ color: white;
+ text-decoration: none;
+}
+
+#header :link.selected,
+#header :visited.selected,
+#header :link:hover,
+#header :visited:hover
+{
+ color: #fc6; /*#ff6;*/
+}
+
+#header :link.selected,
+#header :visited.selected
+{
+ font-weight: bold;
+ text-decoration: underline;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/local.css b/rt/share/html/NoAuth/css/3.5-default/local.css
new file mode 100644
index 0000000..22265bc
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/local.css
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# This is the file you want to override in local/html for adding
+%# custom css.
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/login.css b/rt/share/html/NoAuth/css/3.5-default/login.css
new file mode 100644
index 0000000..10e5e32
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/login.css
@@ -0,0 +1,85 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#login-box {
+ width: 50%;
+ margin: 0 auto 4em auto;
+}
+
+%# More rules only IE will recognize (but are still valid!) to correct for
+%# IE's incorrect handling of auto margins and the W3C defined behavior.
+%# text-align will affect a block element in IE, therefore centering it, like
+%# left and right auto margins *should*
+* html #login-box {
+ text-align: center;
+}
+
+%# ... and align the text back the way it should be
+* html #login-box .titlebox {
+ text-align: left;
+}
+
+#login-box .input-row {
+ padding: 0.5em;
+}
+
+#login-box .input-row .label {
+ width: 8em;
+ float: left;
+ text-align: right;
+ padding: 0.2em 1em 0 0;
+}
+
+#login-box .input-row .input {
+ float: left;
+}
+
+#login-box .button-row {
+ clear: both;
+ padding: 0.5em;
+ float: right;
+}
diff --git a/rt/share/html/NoAuth/css/3.5-default/logo.css b/rt/share/html/NoAuth/css/3.5-default/logo.css
new file mode 100644
index 0000000..206b437
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/logo.css
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#logo {
+ float: left;
+ clear: left;
+
+ margin: 0.5em 0 0.5em 10px;
+}
+
+#logo img { border: none; }
+#logo .rtname {
+ text-align: center;
+ font-weight: bold;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/main.css b/rt/share/html/NoAuth/css/3.5-default/main.css
new file mode 100644
index 0000000..78c7f62
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/main.css
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback(CallbackName => 'Begin');
+
+@import "misc.css";
+@import "login.css";
+@import "logo.css";
+@import "quickbar.css";
+@import "body.css";
+@import "approvals.css";
+@import "titlebox.css";
+@import "forms.css";
+@import "ticket.css";
+@import "transactions.css";
+@import "nav.css";
+@import "header.css";
+@import "footer.css";
+@import "ticket-search.css";
+@import "local.css";
+
+% $m->callback(CallbackName => 'End');
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/misc.css b/rt/share/html/NoAuth/css/3.5-default/misc.css
new file mode 100755
index 0000000..67b5e19
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/misc.css
@@ -0,0 +1,125 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+body {
+ font-family: Verdana, sans-serif;
+ font-size: 76%;
+ margin: 0;
+ background-color: white;
+}
+
+.hide, .hidden { display: none !important; }
+
+#body.calpopup {
+ margin-left: 2em;
+}
+
+.calendar {
+ text-align: center;
+ margin: 2em 0 0 0;
+}
+
+.calendar td, .calendar th { padding: 0.1em 0.25em 0.1em 0.25em; }
+
+.calendar caption .month {
+ padding: 0 1em 0 1em;
+ font-size: 1.5em;
+}
+
+.evenline { background-color: white; }
+.oddline { background-color: #ddd; }
+
+td {
+ padding: 0.1em 0.5em 0.1em 0.5em;
+}
+
+.clear { clear: both; }
+
+ul.action-results {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+div.autocomplete {
+ position: absolute;
+ background-color: white;
+ border: 1px solid #888;
+ margin: 0px;
+ padding: 0px;
+}
+div.autocomplete ul {
+ list-style-type: none;
+ margin: 0px;
+ padding: 0px;
+}
+div.autocomplete ul li.selected {
+ background-color: #0088cc;
+ color: #eee;
+}
+div.autocomplete ul li {
+ list-style-type: none;
+ display: block;
+ margin: 0;
+ padding: 2px;
+}
+
+.shredder-form { line-height: 3em }
+.shredder-form span { margin-left: 1em; margin-right: 1em }
+.shredder-help {
+ background-color: #ffe99d;
+ margin: 1em 2em;
+ padding: 1em;
+ border-style: solid;
+ border-color: black;
+ border-width: 1px;
+}
+#shredder-select-plugin { border-style: solid; border-color: black; border-width: 1px }
+#shredder-plugin-results { border-style: solid; border-color: black; border-width: 1px; margin-top: 1em; }
+#shredder-plugin-results input { margin-left: 1em; }
+
+.pod-sequence-C { background-color: #eee }
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/nav-left.css b/rt/share/html/NoAuth/css/3.5-default/nav-left.css
new file mode 100644
index 0000000..55f0a95
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/nav-left.css
@@ -0,0 +1,86 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#logo {
+ float: right;
+ clear: right;
+}
+#nav ul { float: left; }
+#nav ul div { text-align: left; }
+
+#nav li ul {
+ right: 2em;
+ left: 0;
+}
+
+%# Hide from IE... it can't handle relative positioning with both a
+%# left and right set
+html>body #nav li ul {
+ left: 0;
+ right: 2em;
+}
+
+#nav ul,
+#nav ul.odd,
+#nav ul .first,
+#nav ul.odd .first
+{
+ background-image: none;
+}
+
+#nav ul { background: #069 url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right; }
+#nav ul div { background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+#nav ul.odd { background: #08c url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right; }
+#nav ul.odd div { background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+
+#nav ul div {
+ display: block;
+ padding: 0.2em 1em 0.4em 0;
+}
+
+#nav ul { padding: 0; }
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/nav.css b/rt/share/html/NoAuth/css/3.5-default/nav.css
new file mode 100644
index 0000000..3f38f89
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/nav.css
@@ -0,0 +1,163 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#nav {
+ clear: both;
+ font-size: 1.1em;
+}
+
+#nav #system-menu,
+#nav ul
+{
+ min-width: 85%;
+}
+
+%# This is an interesting bit of CSS. expression() is an IE-only extension to
+%# it's CSS implementation. Just in case other browsers might choke on it,
+%# the rule is enclosed in a selector only IE will (wrongly) match to an element.
+%#
+%# The expression() function takes Javascript, and basically what it's doing here
+%# is checking to see if the width of the menu would be greater than 85% of the body
+%# width. If it is, great, leave it alone to automatically resize. If it is not, set
+%# it to 85% of the body width. This amounts to emulating the min-width rule that
+%# compliant browsers understand above.
+* html #nav #system-menu {
+ width: expression(document.body.clientWidth*0.85 < document.getElementById('page-menu').clientWidth ? "auto" : "85%");
+ overflow: visible;
+}
+
+#nav ul {
+ float: left;
+ clear: left;
+
+ color: #eee;
+ font-weight: bold;
+
+ margin: 0;
+ padding: 0;
+
+ list-style: none;
+}
+
+#nav li ul {
+ margin-top: 0.75em;
+}
+
+/*
+%# We need the extra padding above for browsers where we display the arrows
+%# but those don't work in IE so we don't want as much spacing
+%#
+%# IE wrongly matches the selector below even though there isn't an element
+%# above <html> in the doc tree
+*/
+* html #nav li ul {
+ margin-top: 0.25em;
+}
+
+#nav li {
+ display: inline;
+ margin-bottom: 1em;
+ padding: 0.2em 0 0.4em 0;
+}
+
+#nav li.first { padding-left: 1em; }
+
+#nav ul div div.wrapper {
+ text-align: left;
+ padding: 0.2em 1em 0.4em 0;
+}
+
+/****/
+
+#nav :link,
+#nav :visited
+{
+ color: #ececec;
+ text-decoration: none;
+}
+
+#nav :link.selected,
+#nav :visited.selected,
+#nav :link:hover,
+#nav :visited:hover
+{
+ color: #fc6; /*#ff6;*/
+}
+
+#nav :link.selected,
+#nav :visited.selected
+{
+ text-decoration: underline;
+}
+
+html>body #nav :link.selected,
+html>body #nav :visited.selected
+{
+ padding-bottom: 0.8em;
+ background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/dark-arrow.png) no-repeat bottom center;
+}
+
+html>body #nav :link.selected.odd,
+html>body #nav :visited.selected.odd
+{
+ padding-bottom: 0.8em;
+ background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/light-arrow.png) no-repeat bottom center;
+}
+
+/*
+#nav ul { background: #069 url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right; }
+#nav ul div { background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+#nav ul.odd { background: #08c url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right; }
+#nav ul.odd div { background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+*/
+
+
+#nav ul div.wrapper { background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right; }
+#nav ul div { background: #069 url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+#nav ul.odd div.wrapper { background: transparent url(<%RT->Config->Get('WebImagesURL')%>/css/ctr.gif) no-repeat top right; }
+#nav ul div.odd { background: #08c url(<%RT->Config->Get('WebImagesURL')%>/css/cbr.gif) no-repeat bottom right; }
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/quickbar.css b/rt/share/html/NoAuth/css/3.5-default/quickbar.css
new file mode 100644
index 0000000..dce6a7f
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/quickbar.css
@@ -0,0 +1,98 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#quickbar #quick-personal {
+ display: inline;
+ color: #888;
+ padding: 0.5em 1em 0 0;
+ float: right;
+}
+
+#quickbar #quick-personal span {
+ font-weight: bold;
+}
+
+#quickbar #quick-personal :link,
+#quickbar #quick-personal :visited
+{
+ color: #888;
+ font-weight: bold;
+}
+
+#quickbar #quick-personal :link:hover,
+#quickbar #quick-personal :visited:hover
+{
+ color: black;
+}
+
+#quickbar #topactions {
+ float: right;
+ clear: right;
+
+ font-size: 0.9em;
+ padding: 1em;
+}
+
+#quickbar #topactions form {
+ display: inline;
+ margin-left: 1em;
+}
+
+#quickbar #topactions form .button {
+ padding: 0 2px 0 2px;
+ font-size: 1em;
+ margin: 0;
+}
+
+#quickbar #topactions form .field {
+ padding: 1px;
+ font-size: 0.9em;
+}
+
+#quickbar #topactions form input.field {
+ padding: 3px;
+}
diff --git a/rt/share/html/NoAuth/css/3.5-default/ticket-search.css b/rt/share/html/NoAuth/css/3.5-default/ticket-search.css
new file mode 100644
index 0000000..f483cab
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/ticket-search.css
@@ -0,0 +1,86 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#comp-Search-Build #body {
+ position: relative;
+}
+
+#editquery, #editsearches{
+ position: absolute;
+ right: 1em;
+ width: 40%;
+}
+
+#editsearches {
+ top: 24em;
+}
+
+
+#pick-criteria {
+ width: 58%;
+}
+
+#comp-Search-Build .submit {
+ width: 58%;
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+
+#sorting.titlebox {
+ width: 58%;
+ margin-top: 4em;
+}
+
+#formatbuttons .submit {
+ width: 100%;
+}
+
+.refresh {
+ float: left;
+}
diff --git a/rt/share/html/NoAuth/css/3.5-default/ticket.css b/rt/share/html/NoAuth/css/3.5-default/ticket.css
new file mode 100644
index 0000000..cb60336
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/ticket.css
@@ -0,0 +1,57 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.ticket-info-cfs .label {
+ vertical-align: top;
+}
+
+.ticket-info-cfs ul {
+ margin: 0;
+ padding: 0;
+ margin-left: 0.5em;
+ list-style: none;
+}
diff --git a/rt/share/html/NoAuth/css/3.5-default/titlebox.css b/rt/share/html/NoAuth/css/3.5-default/titlebox.css
new file mode 100644
index 0000000..329cf8f
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/titlebox.css
@@ -0,0 +1,162 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.titlebox {
+ margin-bottom: 1em;
+}
+
+.titlebox .titlebox-content {
+ margin-top: -1px;
+ padding: 1em 2em 0.5em 2em;
+ margin: 0;
+ /*margin: 1em 2em 0.5em 2em;*/
+}
+
+.titlebox th { font-size: 0.8em; }
+
+%# TRS: I wish there was a more elegant way to do this... I essentially need to
+%# select all elements X that do NOT have element Y as a descendant... which I can
+%# fake with the child selector of CSS2, but IE is stupid and does not support that.
+
+% my @pages = qw(index Search-Build User-Prefs Approvals Admin-Users-Modify SelfService SelfService-Closed);
+% $m->callback(pages => \@pages, %ARGS);
+
+% for (@pages)
+% {
+#comp-<%$_%> .titlebox .titlebox-content,
+% }
+.titlebox .titlebox .titlebox-content
+{
+ background: #eee;
+ border-bottom: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+ border-left: 0.5em solid #069;
+}
+
+#login-box .titlebox .titlebox-content
+{
+ background: none;
+ border: none;
+}
+
+.titlebox .titlebox-title {
+ position: relative;
+ font-weight: bold;
+ color: #930;
+ font-size: 1.2em;
+ padding: 0.2em 0 0.2em 4em;
+ border-bottom: 1px solid #069;
+}
+
+.titlebox .titlebox-title .right {
+ position: absolute;
+ top: 0.5em;
+ right: 1.5em;
+ font-size: 0.9em;
+ color: #888;
+}
+
+.titlebox .titlebox-title .right .selected { color: #930; }
+
+#body .titlebox .titlebox-title .right :link,
+#body .titlebox .titlebox-title .right :visited {
+ color: #888;
+}
+
+#body .titlebox .titlebox-title .right :link:hover,
+#body .titlebox .titlebox-title .right :visited:hover {
+ color: #930;
+}
+
+.titlebox .titlebox-title .widget a {
+ display: block;
+ margin: 0;
+ margin-top: 0.5em;
+ width: 20px;
+
+ background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/css/rollup-arrow.gif) no-repeat center center;
+
+ position: absolute;
+ top: -0.75em;
+ left: 0.15em;
+ float: left;
+
+ padding: 11px 0 0 0;
+}
+
+
+* html .titlebox .titlebox-title .widget a {
+ background-position: center 0.3em;
+ top: 0em;
+ left: -1.5em;
+}
+
+.titlebox.rolled-up .titlebox-title .widget a {
+ background-image: url(<%RT->Config->Get('WebImagesURL')%>/css/rolldown-arrow.gif);
+}
+
+#body .titlebox .titlebox-title :link,
+#body .titlebox .titlebox-title :visited
+{
+ color: #930;
+ text-decoration: none;
+}
+
+#body .titlebox .titlebox-title :link:hover,
+#body .titlebox .titlebox-title :visited:hover
+{
+ text-decoration: underline;
+}
+
+.titlebox .titlebox-content hr.clear {
+ visibility: hidden;
+}
+
+.titlebox .titlebox-title .left {
+ position: relative;
+}
+
diff --git a/rt/share/html/NoAuth/css/3.5-default/transactions.css b/rt/share/html/NoAuth/css/3.5-default/transactions.css
new file mode 100755
index 0000000..5196098
--- /dev/null
+++ b/rt/share/html/NoAuth/css/3.5-default/transactions.css
@@ -0,0 +1,146 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.ticket-transaction {
+ border-bottom: 1px solid #ddd;
+ border-right: 3px solid #069;
+}
+
+#ticket-history .ticket-transaction {
+ border-bottom-color: #ccc;
+}
+
+.ticket-transaction.even {
+ background: #eee;
+}
+
+.ticket-transaction .date {
+ font-size: 0.9em;
+ width: 10em;
+}
+
+.ticket-transaction .description {
+ font-weight: bold;
+ font-size: 0.9em;
+ text-align: left;
+}
+
+.ticket-transaction .actions {
+ text-align: right;
+ font-weight: bold;
+}
+
+.ticket-transaction .type {
+ background: #888;
+ width: 1.2em;
+ color: white;
+ text-align: center;
+ font-size: 1em;
+}
+
+#body .ticket-transaction .type :link,
+#body .ticket-transaction .type :visited
+{
+ color: white;
+ font-weight: normal;
+}
+
+.ticket-transaction.basics { border-color: #b32; }
+.ticket-transaction.basics .type { background: #b32; }
+.ticket-summary .ticket-info-basics .titlebox-content { border-left: 0.5em solid #b32; }
+
+.ticket-transaction.people { border-color: #48c; }
+.ticket-transaction.people .type { background: #48c; }
+.ticket-summary .ticket-info-people .titlebox-content { border-left: 0.5em solid #48c; }
+
+%# light green - #ad8
+.ticket-transaction.links { border-color: #316531; }
+.ticket-transaction.links .type { background: #316531; }
+.ticket-summary .ticket-info-links .titlebox-content { border-left: 0.5em solid #316531; }
+
+%# orange - #d71
+.ticket-transaction.dates { border-color: #633063; }
+.ticket-transaction.dates .type { background: #633063; }
+.ticket-summary .ticket-info-dates .titlebox-content { border-left: 0.5em solid #633063; }
+
+.ticket-transaction.message { border-color: #069; }
+.ticket-transaction.message .type { background: #069; }
+
+.ticket-transaction.other { border-color: #888; }
+
+.ticket-transaction td .message-header-value {
+ padding: 0;
+}
+
+.ticket-transaction td .message-header-key {
+ padding: 0 1em 0 1.5em;
+ font-weight: bold;
+}
+
+.ticket-transaction .downloadattachment {
+ float: right;
+ font-size: 0.9em;
+ text-align: right;
+}
+
+.ticket-transaction .messagebody {
+ clear: both;
+ padding-left: 3em;
+ padding-bottom: 1em;
+}
+
+%# Message stanza colors
+.message-stanza-depth-0 { color: #000; }
+.message-stanza-depth-1 { color: #600; }
+.message-stanza-depth-2 { color: #060; }
+.message-stanza-depth-3 { color: #006; }
+.message-stanza-depth-4 { color: #c00; }
+.message-stanza-depth-5 { color: #0c0; }
+.message-stanza-depth-6 { color: #00c; }
+.message-stanza-depth-7 { color: #f00; }
+.message-stanza-depth-8 { color: #0f0; }
+.message-stanza-depth-9 { color: #00f; }
diff --git a/rt/share/html/NoAuth/css/autohandler b/rt/share/html/NoAuth/css/autohandler
new file mode 100644
index 0000000..a92cfd1
--- /dev/null
+++ b/rt/share/html/NoAuth/css/autohandler
@@ -0,0 +1,59 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+my $file = $m->base_comp->source_file;
+
+if ($file =~ /\.(gif|png|jpe?g)$/i) {
+ RT::Interface::Web->SendStaticFile( File => $file );
+} else {
+ RT::Interface::Web::StaticFileHeaders();
+ $r->content_type('text/css') ;
+ $m->call_next();
+ return();
+}
+</%init>
diff --git a/rt/share/html/NoAuth/css/dhandler b/rt/share/html/NoAuth/css/dhandler
new file mode 100644
index 0000000..8c51c95
--- /dev/null
+++ b/rt/share/html/NoAuth/css/dhandler
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ONCE>
+my $squisher;
+</%ONCE>
+<%INIT>
+my $arg = $m->dhandler_arg;
+my $path;
+if ( $arg =~ m{^(.*)-squished(\.[^\.]+)$} ) {
+ $path = $m->current_comp->dir_path .'/'. $1 . $2;
+}
+else {
+ return $m->decline;
+}
+
+$squisher = new RT::CSS::Squish unless $squisher;
+$squisher->{'mason'} = $m;
+
+$m->out( $squisher->concatenate( $path ) );
+
+package RT::CSS::Squish;
+use CSS::Squish '0.06';
+use base qw(CSS::Squish);
+sub file_handle {
+ my $self = shift;
+ my $file = shift;
+ my $content = $self->{'mason'}->scomp($file) || '';
+ open my $fh, '<', \$content or die "$!";
+ return $fh;
+}
+
+</%INIT>
diff --git a/rt/share/html/NoAuth/css/print.css b/rt/share/html/NoAuth/css/print.css
new file mode 100644
index 0000000..aaa1e8a
--- /dev/null
+++ b/rt/share/html/NoAuth/css/print.css
@@ -0,0 +1,94 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+* {
+ float: none;
+ position: static;
+}
+
+body {
+ margin: 1em;
+ font-size: 10pt;
+}
+
+div#body {
+ margin: 0;
+ margin-top: 1em;
+ border-style: none;
+}
+
+div#header h1 {
+ margin-bottom: 2em;
+ position: relative;
+ margin-top: 2em;
+ height: 0;
+ width: auto;
+ left: 0;
+ overflow: visible;
+}
+
+#header {
+ padding: 0 !important;
+}
+
+#quickbar,
+#nav,
+#header #page-menu,
+#header #actions-menu,
+#header #page-navigation,
+.titlebox .title .widget,
+#footer
+{
+display: none;
+}
+
+a:link, a:visited {
+ background: transparent;
+ font-weight: bold !important;
+ text-decoration: underline !important;
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/InHeader b/rt/share/html/NoAuth/css/web2/InHeader
new file mode 100644
index 0000000..753b9d7
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/InHeader
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<!--[if lt IE 8]>
+<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/web2/msie.css" type="text/css" media="all" />
+
+<![endif]-->
+<!--[if lt IE 7]>
+<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/web2/msie6.css" type="text/css" media="all" />
+<![endif]-->
diff --git a/rt/share/html/NoAuth/css/web2/admin.css b/rt/share/html/NoAuth/css/web2/admin.css
new file mode 100644
index 0000000..63385bf
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/admin.css
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+ul.list-menu .menu-item {
+ font-size: 1.25em;
+}
+ul.list-menu {
+ list-style: none;
+
+}
+ul.list-menu .description {
+ display: block;
+ padding: 0.5em;
+ font-style: italic;
+ padding-left: 1em;
+}
diff --git a/rt/share/html/NoAuth/css/web2/base.css b/rt/share/html/NoAuth/css/web2/base.css
new file mode 100644
index 0000000..b98253a
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/base.css
@@ -0,0 +1,70 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.hide { display: none; }
+.clear { display: none;}
+
+
+
+
+
+a {
+ color: #000;
+ text-decoration: none;
+}
+
+
+div#body a:visited {
+ color: #666;
+
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+textarea:focus, input:focus { background-color: #ffd; }
diff --git a/rt/share/html/NoAuth/css/web2/boxes.css b/rt/share/html/NoAuth/css/web2/boxes.css
new file mode 100644
index 0000000..0f2f20c
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/boxes.css
@@ -0,0 +1,192 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.titlebox {
+ border-left: 1px solid #ccc;
+ border-top: 1px solid #ccc;
+ background-color: #efefef;
+ padding-top: 1em;
+ margin-top: 1em;
+ margin-left: 1em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ margin-bottom: 2em;
+ border-bottom: 2px solid #aaa;
+ border-right: 2px solid #aaa;
+ padding-right: 1em;
+}
+
+* html .titlebox {
+ border-top: none;
+ border-left: none;
+}
+
+.titlebox .titlebox {
+
+ background-color: #ffffff;
+ margin-top: 1em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ margin-right: 0.25em;
+
+}
+
+
+.titlebox {
+ margin-left: 0em;
+ margin-right: 0em;
+ min-height: 1.25em;
+
+}
+
+
+
+.titlebox .titlebox-title {
+ position: relative;
+ margin-top: -1.5em;
+ padding-bottom: 0.25em;
+ padding-left: 1em;
+ margin-right: -1em;
+
+}
+
+.titlebox .titlebox-title a {
+ text-decoration: none;
+ color: black;
+
+}
+
+.titlebox .titlebox-title a:hover {
+ text-decoration: underline;
+
+}
+
+.titlebox .titlebox-title a:visited {
+ color: #fff;
+}
+
+.titlebox .titlebox-title .left {
+ font-weight: bold;
+ background: #ccc;
+ margin-left: 0.75em;
+ padding:0.5em;
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ border-bottom: 2px solid #aaa;
+ border-right: 2px solid #aaa;
+
+
+}
+
+.titlebox .titlebox-title .right-empty {
+ display:none;
+}
+
+.titlebox .titlebox-title .right {
+ position: absolute;
+ right: 0;
+ top: 0.5em;
+ font-size: 0.9em;
+ background: #dedede;
+ border-left: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+ padding-right: 0.4em;
+ padding-left: 0.4em;
+ padding-bottom: 0.2em;
+ padding-top: 0.5em;
+ -moz-border-radius-bottomleft: 0.25em;
+ -webkit-border-bottom-left-radius: 0.25em;
+
+
+ -moz-border-radius-topright: 0.25em;
+ -webkit-border-top-right-radius: 0.25em;
+
+}
+
+.titlebox .titlebox-title .right a {
+ color: #000;
+}
+
+.titlebox .titlebox-content {
+ padding-top: 0.5em;
+ padding-left: 1em;
+ padding-bottom: 1em;
+
+}
+
+.hidden {
+ display: none;
+}
+
+.titlebox .titlebox-title .widget a {
+ display: block;
+ margin: 0;
+ margin-top: 0.5em;
+ width: 20px;
+
+ background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/css/rollup-arrow.gif) no-repeat center center;
+
+ position: absolute;
+ top: -1em;
+ left: 0.15em;
+ float: left;
+
+ padding: 11px 0 0 0;
+ overflow: hidden;
+}
+
+* html .titlebox .titlebox-title .widget a {
+ background-position: center 0.3em;
+ top: 0em;
+ left: -1.5em;
+}
+
+.titlebox.rolled-up .titlebox-title .widget a {
+ background-image: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/css/rolldown-arrow.gif);
+}
diff --git a/rt/share/html/NoAuth/css/web2/forms.css b/rt/share/html/NoAuth/css/web2/forms.css
new file mode 100755
index 0000000..8afedcb
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/forms.css
@@ -0,0 +1,242 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+form {
+
+ background: none;
+ border: none;
+ margin: 0;
+}
+
+
+.input-row .label {
+ position: relative;
+ text-align: right;
+ width: 4em;
+}
+
+.input-row .input {
+ position: relative;
+ left: 1em;
+ width: 10em;
+ text-align: right;
+}
+
+.value {
+ font-size: 0.85em;
+
+}
+
+
+
+div.button-row {
+ text-align: right;
+ padding-right: 0.5em;
+}
+
+
+input[type=reset], input[type=submit], input[class=button] {
+ color: #fff;
+ background: #3858a3;
+ padding: 0.25em;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+}
+
+input.button:hover, button:hover, input[type=reset]:hover, input[type=submit]:hover, input[class=button]:hover {
+ background: #1D3B7D;
+}
+
+input.button:focus, button:focus, input[type=reset]:focus, input[type=submit]:focus, input[class=button]:focus {
+ background: #1D3B7D;
+}
+
+div.error div.error {
+ border: 2px solid #aa0000;
+ border-top: 1px solid #bb0000;
+ border-left: 1px solid #bb0000;
+ background-color: #fcc;
+}
+
+div.error .titlebox-title span.left {
+ background-color: #f00;
+ color: #fff;
+ border: 1px solid #cc0000;
+ border-right: 2px solid #bb0000;
+ border-bottom: 2px solid #bb0000;
+
+}
+
+
+div.results .titlebox-title .left, div.results .titlebox {
+ border: 1px solid #aa9;
+ border-bottom: 2px solid #990;
+ border-right: 2px solid #990;
+}
+
+div.results .titlebox-title .left {
+ background: #ff9;
+
+}
+
+div.results .titlebox {
+ background: #ffc;
+
+}
+
+div.results .titlebox-content {
+ padding: 0;
+}
+
+
+.label, .labeltop {
+ text-align: right;
+ font-size: 0.8em;
+ padding-right: .5em;
+
+}
+
+.cflabel {
+ text-align: right;
+ font-size: 0.8em;
+ padding-right: .5em;
+ width: 25%;
+}
+
+.labeltop, .label, .value {
+ padding-top: 0.25em;
+}
+
+div.ticket-info-basics div.titlebox-content .labeltop{
+ width: 10em;
+}
+
+div.submit {
+ text-align: right;
+}
+
+div.submit .extra-buttons {
+ text-align: left;
+}
+
+
+div.widget {
+ padding-bottom: 0.5em;
+}
+
+div.widget .label {
+ text-align: right;
+ display: block;
+ width: 15em;
+ float: left;
+ clear: both;
+ font-size: 0.9em;
+ padding-right: 0.5em;
+}
+
+div.widget .hints {
+
+ display: block;
+ padding-left: 14em;
+ font-style: italic;
+}
+
+
+%# ComboBox styles... some properties like height and width must be dynamically
+%# set in the JS (at least for now).
+.combobox {
+ position: relative;
+ width: 11.5em;
+}
+
+.combobox .combo-button {
+ right: 0;
+ padding: 0;
+ margin-top: 0;
+ cursor: default;
+ color: ButtonFace;
+ background: ButtonFace;
+ border: 2px outset ButtonHighlight;
+}
+
+/* this style replaces the default down-triangle with one that looks more like
+ * native widget sets. It does not work in IE as it's an :after pseudo element
+ * with a "content" value. but that's ok because IE can't display unicode 25be
+ * anyway */
+
+.combobox .combo-button:after {
+ color: ButtonText;
+ margin: 0;
+ padding: 0;
+ margin-top: -0.5em;
+ margin-left: -0.8em;
+ content: "\25be";
+}
+
+.combobox .combo-text {
+ border: 1px inset ButtonHighlight;
+ margin: 0;
+ padding: 0;
+}
+
+.combobox .combo-list {
+ border: 1px outset;
+ z-index: 150;
+}
+
+.value .TimeUnits{
+ margin-left: .5em;
+ width: 7em;
+}
+
+.cfinvalidfield {
+ font-style: italic;
+ color: red;
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/images/dhandler b/rt/share/html/NoAuth/css/web2/images/dhandler
new file mode 100644
index 0000000..6ec9dea
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/images/dhandler
@@ -0,0 +1,8 @@
+<%INIT>
+use File::Basename;
+my $arg = $m->dhandler_arg;
+my $file = dirname($m->current_comp->source_file) . '/source/'. $arg;
+RT::Interface::Web->SendStaticFile( File => $file );
+
+$m->abort;
+</%INIT>
diff --git a/rt/share/html/NoAuth/css/web2/images/source/background-gradient.png b/rt/share/html/NoAuth/css/web2/images/source/background-gradient.png
new file mode 100644
index 0000000..9c126c7
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/images/source/background-gradient.png
Binary files differ
diff --git a/rt/share/html/NoAuth/css/web2/layout.css b/rt/share/html/NoAuth/css/web2/layout.css
new file mode 100644
index 0000000..8b53b2f
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/layout.css
@@ -0,0 +1,234 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+/* body */
+
+body {
+
+
+ padding:0;
+ margin:0;
+
+ background: #547CCC url(<%RT->Config->Get('WebPath')%>/NoAuth/css/web2/images/background-gradient.png) top left repeat-x ;
+ font-family: arial, helvetica, sans-serif;
+
+ color: #000000;
+}
+
+div#body {
+ position: relative;
+ padding: 1em;
+ padding-top: 1.8em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ margin-left: 10.5em;
+ margin-top: 5.2em;
+ margin-right: 1em;
+ margin-bottom: 0em;
+ min-height: 10%;
+ background: #fff;
+ border-top: 2px solid #ccc;
+ border-left: 2px solid #ccc;
+ z-index:1;
+
+
+}
+
+#topactions {
+ position: absolute;
+ background: transparent;
+ top: 3.8em;
+ right: 1em;
+ width: auto;
+ min-width: 42em;
+ font-size: 0.9em;
+ z-index: 99;
+}
+
+#topactions form * {
+ vertical-align: top;
+}
+
+#topactions button, #topactions select, #topactions input{
+ padding-top: 0em;
+ padding-bottom: 0em;
+ width: 8em;
+
+}
+
+#topactions form {
+ display: block;
+
+}
+
+#topactions #CreateTicketInQueue {
+ text-align: right;
+
+}
+#topactions #simple-search {
+ float: right;
+}
+
+#topactions #simple-search .field{
+ margin-left: 1em;
+ color: #787;
+ }
+
+#topactions #simple-search .field:focus {
+ color: #000;
+ }
+
+#topactions #GotoTicket {
+ text-align: right;
+
+}
+
+div#footer {
+ position: absolute;
+ right: 0;
+ text-align: right;
+ font-size: 0.9em;
+ margin-top: 2em;
+ background: #fff;
+ margin-bottom: 0;
+ padding-left: 3em;
+ padding-right: 1em;
+
+
+
+
+
+ border-top: 2px solid #aaa;
+ border-left: 2px solid #aaa;
+
+
+
+ -moz-border-radius-topleft: 0.5em;
+ -webkit-border-top-left-radius: 0.5em;
+ -moz-border-radius-bottomleft: 0.5em;
+ -webkit-border-bottom-left-radius: 0.5em;
+}
+
+div#footer #time {
+display: none ;
+}
+
+div#footer #bpscredits {
+ text-align: right;
+ background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images//bplogo.gif) no-repeat top right;
+ padding-top: 4em;
+}
+
+
+/* logo stuff */
+
+div#logo {
+}
+
+
+div#logo a {
+ display: none;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+}
+div#logo a img {
+ border: 0;
+}
+div#logo .rtname {
+ position: absolute;
+ font-weight: bold;
+ top: 1em;
+ left: 1em;
+}
+
+
+div#quickbar, div#logo {
+ font-size: 0.9em;
+}
+div#quickbar a, div#logo a {
+ color: #000;
+}
+
+
+div#quickbar {
+ background: #eaeaea;
+ padding-top: 1em;
+ padding-left: 1em;
+ padding-bottom: 0.5em;
+ height: 1em;
+ border-bottom: 1px solid #ccc;
+
+}
+div#quick-personal {
+ float: right;
+ margin-right: 1em;
+}
+
+
+div#header h1 {
+ position: absolute;
+ left: 7.25em;
+ right: 20em;
+ overflow: hidden;
+ height: 1em;
+ font-size: 1.4em;
+ margin-top: 0.4em;
+ padding: 0.25em;
+ color: #fff;
+}
+
+/* in multi-column layouts, make sure we have an internal gutter */
+
+tr .boxcontainer {
+ padding-right: 1em;
+}
+
+tr .boxcontainer:last-child {
+ padding-right: 0;
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/login.css b/rt/share/html/NoAuth/css/web2/login.css
new file mode 100644
index 0000000..2eb4238
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/login.css
@@ -0,0 +1,82 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#login-box hr {
+ display: none;
+}
+
+#login-box {
+
+ width: 30em;
+
+margin-right:auto;margin-left:auto;
+ padding-top: 2em;
+ padding-bottom: 2em;
+
+
+}
+
+
+#login-box .input-row {
+ position: relative;
+ height: 1.5em;
+ padding-top: 1em;
+}
+
+#login-box .input-row .label {
+
+ float: left;
+ width: 8em;
+ text-align: right;
+ font-weight: bold;
+
+
+}
+
+#login-box .button-row {
+ margin-top: 0.5em;
+}
diff --git a/rt/share/html/NoAuth/css/web2/main.css b/rt/share/html/NoAuth/css/web2/main.css
new file mode 100644
index 0000000..5ca5614
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/main.css
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback(CallbackName => 'Begin');
+
+@import "yui-fonts.css";
+@import "base.css";
+
+@import "layout.css";
+@import "nav.css";
+@import "forms.css";
+@import "boxes.css";
+
+@import "login.css";
+@import "ticket-lists.css";
+@import "ticket-search.css";
+@import "portlets.css";
+@import "ticket.css";
+@import "tools.css";
+@import "admin.css";
+@import "misc.css";
+
+% $m->callback(CallbackName => 'End');
+
diff --git a/rt/share/html/NoAuth/css/web2/misc.css b/rt/share/html/NoAuth/css/web2/misc.css
new file mode 100644
index 0000000..eef5f48
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/misc.css
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#body.calpopup {
+ margin-left: 1em;
+ margin-top: 1em;
+}
+
+#body.calpopup a.today {
+ font-size: 1em;
+ font-weight: bold;
+}
+
+#body.calpopup a {
+ font-size: 0.8em;
+}
+
+.calendar {
+ text-align: center;
+ margin: 0 0 0 0;
+}
+
+.calendar td, .calendar th { padding: 0.1em 0.1em 0.1em 0.1em; }
+
+.calendar caption .month {
+ padding: 0 0.25em 0 0.25em;
+ font-size: 1.5em;
+}
+
+div.autocomplete {
+ position: absolute;
+ background-color: white;
+ border: 1px solid #888;
+ margin: 0px;
+ padding: 0px;
+}
+div.autocomplete ul {
+ list-style-type: none;
+ margin: 0px;
+ padding: 0px;
+}
+div.autocomplete ul li.selected {
+ background-color: #0088cc;
+ color: #eee;
+}
+div.autocomplete ul li {
+ list-style-type: none;
+ display: block;
+ margin: 0;
+ padding: 2px;
+}
+
+.comment {
+ padding-left: 0.5em;
+ color: #999;
+
+}
+
+#comp-Ticket-ShowEmailRecord #body {
+ margin-left: 1em;
+ margin-top: 1em;
+ overflow: auto;
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/msie.css b/rt/share/html/NoAuth/css/web2/msie.css
new file mode 100644
index 0000000..184ac1d
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/msie.css
@@ -0,0 +1,239 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+div#body {
+ left: 0.25em;
+ height: 100%;
+ top: 1em;
+
+}
+
+
+#footer {
+ padding: 1em;
+}
+
+
+div#header h1 {
+ position: absolute;
+ left: 7.25em;
+ overflow: hidden;
+ height: 1em;
+ font-size: 1.4em;
+ margin-top: 0.4em;
+ right: 23.5em;
+ padding: 0.25em;
+}
+
+
+#topactions {
+ top: 4.1em;
+ width: auto;
+}
+.topaction form * {
+ vertical-align: top;
+}
+
+.topaction form button, .topaction form input {
+ height: 2em;
+}
+
+.topaction form input.field {
+ height: 1.6em;
+}
+
+.topaction .select-queue {
+ margin-top: 0.2em;
+}
+
+div#page-navigation ul#actions-menu {
+ margin-top: -2.9em;
+ margin-right: -0.2em;
+ border-top: 1px solid #ccc;
+ border-right: none;
+}
+
+
+div#page-navigation {
+ position: absolute;
+ top: 6.2em;
+ height: 1.8em;
+ background: #fff;
+ border-top: 2px solid #ccc;
+}
+
+
+
+div#page-navigation ul#page-menu {
+ margin-top: -2.5em;
+ margin-left: 4em;
+ background: none;
+ border: none;
+}
+
+
+div#quickbar { height: 1.2em;
+
+
+}
+
+#pick-criteria td.label select {
+ width: 10em;
+}
+
+
+#editquery {
+ margin-top: 0.2em;
+ width: 39%;
+ left: 60%;
+}
+
+div#nav li.first {
+ margin-top: 0.75em;
+ border-top: none;
+}
+div#nav ul ul li.first {
+ border-top: 1px solid #cccccc;
+ margin-top: 0.25em;
+}
+
+div#nav li.last {
+ border-bottom: none;
+ padding-bottom: 0;
+ margin-bottom: 0;
+}
+
+
+.ticket-transaction .type a { font-weight: normal; text-decoration: none; color: #fff; }
+
+
+.titlebox {
+ border-top: none;
+ border-left: none;
+}
+
+.titlebox .titlebox-title .left {
+ padding: 0.25em;
+ padding-left: 0.5em;
+}
+
+.titlebox {
+}
+
+.titlebox .titlebox-title .right {
+ border-right: 2px solid #aaa;
+
+}
+
+
+.titlebox .titlebox-content {
+ padding-top: 2.2em;
+}
+
+.titlebox table.ticket-list, .titlebox table.queue-summary {
+ width: 95%;
+ padding: 0.5em;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+th.collection-as-table {
+ padding: 0.25em;
+}
+
+table.queue-summary td, td.collection-as-table {
+ padding: 0.25em;
+}
+
+ .titlebox-title {
+ position: relative;
+}
+
+.titlebox-title .widget {
+ position: absolute;
+ top: -0.25em;
+ left: -0.25em;
+
+}
+.titlebox-title .left {
+ position: absolute;
+ top: -0.75em;
+ left: 0.5em;
+}
+
+
+.titlebox .titlebox-title .right{
+ top: 0.2em;
+ right: -0.2em;
+}
+
+/* nested things. like the ticket dates tab */
+.titlebox .titlebox .titlebox-title .right{
+ top: 0.25em;
+}
+
+.combobox {
+ float: left;
+}
+
+.combobox .combo-button {
+ color: ButtonText;
+ padding: 0;
+}
+
+.combobox .combo-list {
+ margin-top:0.5em;
+ margin-left: -0.2em;
+}
+
+#pick-criteria td.label {
+ width: auto;
+}
+
+#pick-criteria td.operator {
+ width: 7.5em;
+}
diff --git a/rt/share/html/NoAuth/css/web2/msie6.css b/rt/share/html/NoAuth/css/web2/msie6.css
new file mode 100644
index 0000000..bf6b1ed
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/msie6.css
@@ -0,0 +1,88 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.topaction .select-queue {
+ margin-top: 0;
+}
+
+div#page-navigation ul#page-menu {
+ margin-top: -3.2em;
+}
+
+.titlebox-title .widget {
+ top: -1em;
+ left: 0.5em;
+
+}
+.titlebox .titlebox-title .right{
+ position: absolute;
+ top: 0.25em;
+ right: 1em;
+}
+
+/* nested things. like the ticket dates tab */
+.titlebox .titlebox .titlebox-title .right{
+ right: 1.3em;
+}
+
+#login-box .titlebox .titlebox-title .right {
+ margin-top: -0.1em;
+ right: 0em;
+}
+
+.titlebox
+{
+ height: auto !important;
+ height: 1.25em;
+}
+
+
+.ticket-transaction .messagebody img {
+ /* ie6 does not support max-width */
+ width: expression(this.width > 401 ? 400 : true);
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/nav.css b/rt/share/html/NoAuth/css/web2/nav.css
new file mode 100644
index 0000000..b8e5da3
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/nav.css
@@ -0,0 +1,203 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+div#nav {
+ position: absolute;
+ left: 0;
+ font-size: 0.9em;
+ top: 3.2em;
+ width: 10.5em;
+ background: #fff;
+ -moz-border-radius-bottomright: 0.5em;
+ -webkit-border-bottom-right-radius: 0.5em;
+ border-left: 1px solid #999;
+border-top: 1px solid #999;
+
+ -moz-border-radius-topright: 0.5em;
+ -webkit-border-top-right-radius: 0.5em;
+ z-index: 99;
+
+
+}
+
+div#nav ul {
+ padding-left: 0.75em;
+ margin-left: 0;
+ padding-right: 0.75em;
+ list-style-type: none;
+}
+
+div#nav li:first-child {
+ border-top: 1px solid #ccc;
+ padding-top: 0.25em;
+
+}
+
+div#nav li {
+ padding: 0.125em;
+ padding-bottom: 0.25em;
+ margin-bottom: 0.25em;
+ border-bottom: 1px solid #ccc;
+ padding-left: 0.5em;
+ margin-right: 0.25em;
+ margin-left: 0em;
+}
+
+div#nav li li:first-child {
+ margin-top: 0.25em;
+}
+div#nav li li {
+ margin-left: -0.5em;
+ padding-left: 0.25em;
+ margin-right: -0.5em;
+}
+
+div#nav li li:last-child {
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border: none;
+}
+
+div#nav .bullet {
+ display: none;
+}
+
+div#nav .separator {
+display: none;
+}
+
+
+div#nav a, div#page-navigation a{
+ text-decoration: none;
+ font-weight: normal;
+ color: #000;
+}
+
+div#nav a:hover, div#page-navigation a:hover {
+ text-decoration: underline;
+}
+
+
+
+div#nav a.selected, div#page-navigation a.selected {
+ font-weight: bold;
+}
+
+
+div#nav a.selected:after {
+/* content: " > " */
+}
+
+div#page-navigation {
+ background: white;
+ position: relative;
+ width:100%;
+ z-index: 10;
+
+}
+
+
+div#page-navigation ul {
+
+}
+
+div#page-navigation ul#page-menu {
+ display: block;
+ position: absolute;
+ left: 8em;
+ font-size: 0.9em;
+ top: 2.3em;
+ min-height: 1em;
+ background-color: white;
+ right: 0em;
+ padding-top:0.3em;
+ padding-bottom:0.5em;
+ border-top: 1px solid #aaa;
+
+}
+
+/* ie hack */
+* html div#page-navigation ul#page-menu {
+ left: 6.5em;
+ top: 3.2em;
+ padding-left: 2em;
+}
+
+
+div#page-navigation ul#actions-menu {
+ position: absolute;
+ right: 1em;
+ top: 5.2em;
+ margin-top: 0em;
+ padding: 0.25em;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+
+ background: #dedede;
+ border-left: 1px solid #aaa;
+ border-bottom: 2px solid #aaa;
+ -moz-border-radius-bottomleft: 0.5em;
+ -webkit-border-bottom-left-radius: 0.5em;
+ -moz-border-radius-topright: 0.25em;
+ -webkit-border-top-right-radius: 0.25em;
+
+
+
+}
+
+
+
+div#page-navigation ul li{
+ display: inline;
+
+}
+
+
+ul.page-navigation ul.page-menu {
+ float: right;
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/portlets.css b/rt/share/html/NoAuth/css/web2/portlets.css
new file mode 100644
index 0000000..947f49d
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/portlets.css
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+table.myrt {
+ width: 100%;
+}
+
+table.dashboard {
+ width: 100%;
+ border: 0;
+}
+
+.quick-create .select-queue {
+ width: 12em;
+}
+
+.quick-create input[type="text"], .quick-create textarea {
+ width: 100%;
+
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/ticket-lists.css b/rt/share/html/NoAuth/css/web2/ticket-lists.css
new file mode 100644
index 0000000..799a391
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/ticket-lists.css
@@ -0,0 +1,172 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+table.ticket-list, table.queue-summary, table.collection {
+ margin-top: 0.75em;
+ font-size: 0.9em;
+ border: 1px solid #aaa;
+ border-bottom: 2px solid #999;
+ border-right: 2px solid #999;
+
+
+}
+
+table.queue-summary tr>*:first-child {
+ padding-left: 1em;
+
+}
+
+
+table.queue-summary tr>*:last-child {
+ padding-right: 1em;
+
+}
+
+table.ticket-list a, table.queue-summary a, table.collection a {
+ font-weight: bold;
+}
+
+
+table.ticket-list th.collection-as-table, table.collection th.collection-as-table {
+ background: #ddd;
+ font-size: 0.9em;
+ margin-bottom: 0.5em;
+ text-align: left;
+
+}
+
+
+table.queue-summary th.collection-as-table {
+ font-size: 0.9em;
+ margin-bottom: 0.5em;
+ text-align: right;
+
+}
+
+table.queue-summary th.collection-as-table:first-child {
+ text-align: left;
+
+}
+
+
+tr.collection-as-table+tr.collection-as-table th {
+ border-bottom: 2px solid grey;
+
+}
+
+
+
+
+table.queue-summary td {
+ background: #efefef;
+ border-bottom: 1px solid #ccc;
+}
+
+
+
+tr.evenline td {
+ background: #eee;
+}
+
+tr.oddline td {
+ background: #fff;
+
+}
+
+tr.evenline td, tr.oddline td {
+ padding-top: 0.5em;
+}
+
+
+
+tr.evenline+tr.evenline td, tr.oddline+tr.oddline td{
+ padding-top: 0;
+ border: none;
+}
+
+
+
+table.ticket-list td:first-child, table.ticket-list th:first-child {
+ padding-left: 1em;
+}
+
+table.ticket-list td:last-child, table.ticket-list th:last-child {
+ padding-right: 1em;
+}
+
+th.collection-as-table , td.collection-as-table {
+ padding-right: 0.5em;
+}
+
+.pagenum.a:hover, .paging a.nav:hover{
+text-decoration: underline;
+}
+
+
+.pagenum *, .paging a.nav{
+padding: .5em;
+}
+
+.currentpage{
+text-decoration: none;
+font-weight: bold;
+background: #eee;
+}
+
+div.paging{
+text-align: center;
+padding-bottom: 1em;
+}
+
+
+/* full-page ticket lists */
+#body>table.ticket-list {
+ margin-bottom: 2em;
+
+}
+
+
diff --git a/rt/share/html/NoAuth/css/web2/ticket-search.css b/rt/share/html/NoAuth/css/web2/ticket-search.css
new file mode 100644
index 0000000..7a31d3e
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/ticket-search.css
@@ -0,0 +1,199 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#comp-Search-Build #body {
+ position: relative;
+}
+
+#pick-criteria select {
+ width: 8em;
+}
+
+#pick-criteria tr {
+ height: 1.5em;
+}
+
+#pick-criteria td.label {
+ font: message-box;
+ padding-right: 0.5em;
+ width: 11em;
+}
+
+#pick-criteria td.label * {
+ width: 8.5em;
+}
+
+#pick-criteria td.label select {
+ text-align: right;
+}
+
+#pick-criteria td.operator {
+ padding-right: 0.5em;
+ text-align: left;
+ vertical-align: bottom;
+ width: 7em;
+}
+
+#pick-criteria td.operator select {
+ text-align: right;
+}
+
+#pick-criteria td.value input,
+#pick-criteria td.value select {
+ width: 10em;
+}
+
+#pick-criteria td.value #ValueOfDate {
+ width: 6em;
+}
+
+
+#pick-criteria td.value #ValueOfTime {
+ width: 4em;
+
+}
+
+#pick-criteria td.value #ValueOfTime-TimeUnits{
+ width: 5.5em;
+}
+
+#pick-criteria td.value {
+ padding-right: 0.5em;
+ text-align: left;
+ font: message-box;
+}
+
+#editquery, #editsearches{
+ position: absolute;
+ margin-top: 0.2em;
+ right: 1em;
+ left: 60%;
+ top: 1em;
+/* margin-top: -1em; */
+}
+
+#editquery {
+ top: 1.3em;
+}
+
+
+#editsearches {
+ top: 24em;
+}
+
+
+#pick-criteria {
+ width: 58%;
+ padding-top: 0em;
+ margin-top: 0em;
+}
+
+#pick-criteria .titlebox-content {
+ overflow-x: auto;
+}
+
+#comp-Search-Build .submit {
+ width: 58%;
+}
+
+
+#sorting.titlebox {
+ width: 55%;
+ padding-right: 1em;
+}
+
+#comp-Search-Build #columns {
+}
+
+#display-options .submit {
+ width: 100%;
+}
+
+
+
+.search-result-views {
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin-top: -2px;
+ margin-right: 0em;
+ padding: 0.25em;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ background-color: #ccc;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+ -moz-border-radius-bottomleft: 0.5em;
+ -webkit-border-bottom-left-radius: 0.5em;
+}
+
+
+
+.search-result-views li {
+
+ display: inline;
+}
+
+.search-result-views li:after {
+ content: " \00b7 ";
+}
+
+.search-result-views li:last-child:after {
+ content: "";
+
+}
+
+
+.refresh {
+ float: left;
+}
+
+/* Force some widget to fit at max parent box */
+#HomeRefreshInterval, #SavedSearchLoad, #SavedSearchOwner {
+ max-width: 100%;
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/ticket.css b/rt/share/html/NoAuth/css/web2/ticket.css
new file mode 100644
index 0000000..78477e0
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/ticket.css
@@ -0,0 +1,230 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+div#ticket-history div.ticket-transaction {
+ border-top: 1px solid #ccc;
+ padding-bottom: 0.25em;
+
+}
+
+div#ticket-history div.odd {
+ background-color: #fff;
+}
+
+div#ticket-history {
+
+ margin-top: 0.75em;
+ border-left: 1px solid #ccc;
+
+ border-right: 2px solid #999;
+ border-bottom: 2px solid #999;
+
+}
+
+.ticket-transaction div.metadata span.actions {
+ position: absolute;
+ right: 2.3em;
+ padding: 0em;
+ background: #ccc;
+ text-align: right;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+ color: #ccc;
+ -moz-border-radius-bottomleft: 0.5em;
+ -webkit-border-bottom-left-radius: 0.5em;
+ white-space: nowrap;
+}
+
+.ticket-transaction div.metadata span.type {
+ text-align: center;
+ float: left;
+ margin: 0.25em 0.70em 0.25em 0.25em;
+ width: 1em;
+ height: 1.25em;
+ padding: 0.75em 0 0 0;
+ border-right: 1px solid #999;
+ border-bottom: 1px solid #999;
+ -moz-border-radius: 0.25em;
+ -webkit-border-bottom-right-radius: 0.25em;
+}
+
+div#ticket-history span.type a {
+ color: #fff;
+}
+
+
+div#ticket-history span.date {
+ width: 10em;
+}
+
+
+div#ticket-history span.description {
+ margin-left: 1em;
+ font-weight: bold;
+}
+
+div#ticket-history span.time-taken {
+ margin-left: 1em;
+}
+
+div#ticket-history div.content {
+ padding-right: 1em;
+ padding-bottom: 0.7em;
+ font-size: 1.1em;
+ margin-left: 1.5em;
+}
+
+.plain-text-white-space {
+ white-space: pre-wrap;
+ font-family: monospace;
+}
+
+.ticket-transaction .messagebody {
+ font-size: 1em;
+ padding-left: 1em;
+ margin-top: 0.5em;
+ padding-top: 0.5em;
+ border-top: 1px solid #ccc;
+ /*overflow: auto; */
+ min-height: 2.5em;
+ /* To avoid overlapping of "downloadattachment" by messagebody */
+ clear: left;
+}
+
+.ticket-transaction .messagebody img {
+ max-width: 100%;
+}
+
+div#ticket-history div.downloadattachment {
+float: right;
+clear: both;
+font-size: 0.9em;
+text-align: right;
+background: #ddd;
+padding: 0.5em;
+margin-left: 1em;
+
+border: 1px solid #ccc;
+border-right: 2px solid #aaa;
+border-bottom: 2px solid #aaa;
+margin-top: 0.5em;
+-moz-border-radius: 0.5em;
+-webkit-border-radius: 0.5em;
+
+}
+
+div#ticket-history div.downloadattachment .downloadcontenttype{
+color: #666;
+padding-right:0.25em;
+}
+
+
+div#ticket-history .message-header-key {
+ width: 7em;
+ font-weight: bold;
+ color: #666;
+}
+
+
+div#ticket-history .messagebody .messagebody{
+ font-size: 1em;
+ padding: 0;
+ border: 0;
+ margin: 0;
+}
+
+
+
+.ticket-transaction.basics .type { background: #b32; }
+.ticket-transaction.cfs .type { background: #b32; }
+.ticket-transaction.people .type { background: #48c; }
+.ticket-transaction.links .type { background: #316531; }
+.ticket-transaction.dates .type { background: #633063; }
+.ticket-transaction.message .type { background: #069; }
+.ticket-transaction.reminders .type { background: #369; }
+.ticket-transaction.other .type { background: #abc; }
+
+
+
+
+.ticket-info-cfs .titlebox-title .left { background-color: #b32; color: #fff;}
+.ticket-info-basics .titlebox-title .left { background-color: #b32; color: #fff;}
+.ticket-info-people .titlebox-title .left { background-color: #48c; color: #fff;}
+.ticket-info-requestor .titlebox-title .left { white-space: nowrap; background-color: #48c; color: #fff;}
+.ticket-info-links .titlebox-title .left { background-color: #316531; color: #fff;}
+.ticket-info-reminders .titlebox-title .left { background-color: #369; color: #fff;}
+.ticket-info-dates .titlebox-title .left { background-color: #633063; color: #fff;}
+.ticket-info-attachments .titlebox-title .left { background-color: #993366; color: #fff;}
+
+
+.ticket-summary .titlebox-title a, div#body .ticket-summary .titlebox-title a:visited { color: #fff;}
+
+.unread-messages .titlebox , .unread-messages .titlebox-title .left {
+ border: 1px solid #99a;
+ border-right: 2px solid #aab;
+ border-bottom: 2px solid #aab;
+
+}
+
+
+.unread-messages .titlebox {
+ background-color: #dde;
+}
+
+.unread-messages .titlebox-title .left {
+ background-color: #cce;
+}
+
+.ticket-inactive {
+ text-decoration: line-through;
+ color: #666
+}
+
+table.ticket-summary td.boxcontainer:first-child {
+ width: 50%;
+}
+
diff --git a/rt/share/html/NoAuth/css/web2/tools.css b/rt/share/html/NoAuth/css/web2/tools.css
new file mode 100644
index 0000000..843feb2
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/tools.css
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+table.myday td {
+ padding: 1em;
+}
+
+ol.dashboard-queries {
+ padding-left: 1.5em;
+}
+
+
diff --git a/rt/share/html/NoAuth/css/web2/yui-fonts.css b/rt/share/html/NoAuth/css/web2/yui-fonts.css
new file mode 100644
index 0000000..fdae8d9
--- /dev/null
+++ b/rt/share/html/NoAuth/css/web2/yui-fonts.css
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.5.1
+*/
+body {font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
diff --git a/rt/share/html/NoAuth/iCal/dhandler b/rt/share/html/NoAuth/iCal/dhandler
new file mode 100644
index 0000000..0eeeb20
--- /dev/null
+++ b/rt/share/html/NoAuth/iCal/dhandler
@@ -0,0 +1,122 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+use Data::ICal;
+use Data::ICal::Entry::Event;
+use Encode ();
+
+my $path = $m->dhandler_arg;
+
+my $notfound = sub {
+ $r->headers_out->{'Status'} = '404 Not Found';
+ $m->clear_and_abort;
+};
+
+$notfound->() unless $path =~ m!^([^/]+)/([^/]+)/(.*)(\.(ical|ics))?!;
+
+my ($name, $auth, $search) = ($1, $2, $3);
+# Unescape parts
+$_ =~ s/\%([0-9a-z]{2})/chr(hex($1))/gei for $name, $search;
+# convert to perl strings
+$_ = Encode::decode_utf8( $_ ) for $name, $search;
+
+my $user = RT::User->new( $RT::SystemUser );
+$user->Load( $name );
+$notfound->() unless $user->id;
+
+$notfound->() unless $user->ValidateAuthString( $auth, $search );
+
+my $cu = RT::CurrentUser->new;
+$cu->Load($user);
+my $tickets = RT::Tickets->new( $cu );
+$tickets->FromSQL($search);
+
+$r->headers_out->{'Content-Type'} = 'text/calendar; charset=utf-8';
+
+my $feed = Data::ICal->new();
+$feed->add_properties('x-wr-calname' => ["RT due dates" => {value => "TEXT"}]);
+$feed->add_properties('x-wr-caldesc' => ["Due dates for RT tickets: $search" => {value => "TEXT"}]);
+$feed->add_properties('calscale' => ['gregorian']);
+$feed->add_properties('method' => ['publish']);
+$feed->add_properties('prodid' => ["-//" . RT->Config->Get('rtname') ."//"]);
+
+while (my $t = $tickets->Next) {
+ next unless $t->DueObj->Unix > 0;
+
+ my $starttime = $t->StartsObj->Unix > 0 ? $t->StartsObj : $t->CreatedObj;
+
+ my $now = RT::Date->new( $cu ); $now->SetToNow;
+ my $start = Data::ICal::Entry::Event->new;
+ my $end = Data::ICal::Entry::Event->new;
+ $_->add_properties(
+ url => RT->Config->Get('WebURL') . "?q=".$t->id,
+ organizer => $t->OwnerObj->Name,
+ dtstamp => $now->iCal,
+ created => $t->CreatedObj->iCal,
+ 'last-modified' => $t->LastUpdatedObj->iCal,
+ ) for $start, $end;
+
+ $start->add_properties(
+ summary => "Start: ".$t->Subject,
+ dtstart => [$starttime->iCal( Time => 0 ) => { value => 'DATE' }],
+ dtend => [$starttime->iCal( Time => 0 ) => { value => 'DATE'}],
+ );
+ $end->add_properties(
+ summary => "Due: ".$t->Subject,
+ dtstart => [$t->DueObj->iCal( Time => 0 ) => { value => 'DATE' }],
+ dtend => [$t->DueObj->iCal( Time => 0 ) => { value => 'DATE' }],
+ );
+
+ $feed->add_entry($start);
+ $feed->add_entry($end);
+}
+
+$m->clear_buffer;
+$m->out($feed->as_string);
+$m->abort;
+</%init>
diff --git a/rt/share/html/NoAuth/images/autohandler b/rt/share/html/NoAuth/images/autohandler
new file mode 100644
index 0000000..431a44f
--- /dev/null
+++ b/rt/share/html/NoAuth/images/autohandler
@@ -0,0 +1,7 @@
+<%INIT>
+# This autohandler will spit out RT's images if the user hasn't
+# properly configured their webserver to stop RT from passing
+# images through the mason handler.
+my $file = $m->base_comp->source_file;
+RT::Interface::Web->SendStaticFile( File => $file );
+</%INIT>
diff --git a/rt/share/html/NoAuth/images/bplogo.gif b/rt/share/html/NoAuth/images/bplogo.gif
new file mode 100755
index 0000000..1bb0adf
--- /dev/null
+++ b/rt/share/html/NoAuth/images/bplogo.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/cb-light.gif b/rt/share/html/NoAuth/images/css/cb-light.gif
new file mode 100644
index 0000000..d5e3059
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/cb-light.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/cb.gif b/rt/share/html/NoAuth/images/css/cb.gif
new file mode 100644
index 0000000..53bb2ae
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/cb.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/cbr-b2g.gif b/rt/share/html/NoAuth/images/css/cbr-b2g.gif
new file mode 100644
index 0000000..6bca03d
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/cbr-b2g.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/cbr-b2lb.gif b/rt/share/html/NoAuth/images/css/cbr-b2lb.gif
new file mode 100644
index 0000000..d207f84
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/cbr-b2lb.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/cbr-gray.gif b/rt/share/html/NoAuth/images/css/cbr-gray.gif
new file mode 100644
index 0000000..d732710
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/cbr-gray.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/cbr-trans.gif b/rt/share/html/NoAuth/images/css/cbr-trans.gif
new file mode 100644
index 0000000..dc272ee
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/cbr-trans.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/cbr.gif b/rt/share/html/NoAuth/images/css/cbr.gif
new file mode 100644
index 0000000..754cee1
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/cbr.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/ct-light.gif b/rt/share/html/NoAuth/images/css/ct-light.gif
new file mode 100644
index 0000000..55125b0
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/ct-light.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/ct.gif b/rt/share/html/NoAuth/images/css/ct.gif
new file mode 100644
index 0000000..d16a5c5
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/ct.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/ctr-b2g.gif b/rt/share/html/NoAuth/images/css/ctr-b2g.gif
new file mode 100644
index 0000000..540e6d0
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/ctr-b2g.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/ctr-b2lb.gif b/rt/share/html/NoAuth/images/css/ctr-b2lb.gif
new file mode 100644
index 0000000..c98b18c
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/ctr-b2lb.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/ctr-gray.gif b/rt/share/html/NoAuth/images/css/ctr-gray.gif
new file mode 100644
index 0000000..8d5e5dd
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/ctr-gray.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/ctr-trans.gif b/rt/share/html/NoAuth/images/css/ctr-trans.gif
new file mode 100644
index 0000000..bb316cf
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/ctr-trans.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/ctr.gif b/rt/share/html/NoAuth/images/css/ctr.gif
new file mode 100644
index 0000000..9754e15
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/ctr.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/dark-arrow-up.png b/rt/share/html/NoAuth/images/css/dark-arrow-up.png
new file mode 100644
index 0000000..443096a
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/dark-arrow-up.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/dark-arrow.png b/rt/share/html/NoAuth/images/css/dark-arrow.png
new file mode 100644
index 0000000..a83500a
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/dark-arrow.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/fieldbg-autocomplete.gif b/rt/share/html/NoAuth/images/css/fieldbg-autocomplete.gif
new file mode 100644
index 0000000..aa7eed0
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/fieldbg-autocomplete.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/light-arrow-up.png b/rt/share/html/NoAuth/images/css/light-arrow-up.png
new file mode 100644
index 0000000..c209d43
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/light-arrow-up.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/light-arrow.png b/rt/share/html/NoAuth/images/css/light-arrow.png
new file mode 100644
index 0000000..575d4e5
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/light-arrow.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/rolldown-arrow.gif b/rt/share/html/NoAuth/images/css/rolldown-arrow.gif
new file mode 100644
index 0000000..3c296dc
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/rolldown-arrow.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/rolldown-arrow.png b/rt/share/html/NoAuth/images/css/rolldown-arrow.png
new file mode 100644
index 0000000..33d8ab1
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/rolldown-arrow.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/css/rollup-arrow.gif b/rt/share/html/NoAuth/images/css/rollup-arrow.gif
new file mode 100644
index 0000000..f009ff4
--- /dev/null
+++ b/rt/share/html/NoAuth/images/css/rollup-arrow.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/empty_star.gif b/rt/share/html/NoAuth/images/empty_star.gif
new file mode 100644
index 0000000..388e11c
--- /dev/null
+++ b/rt/share/html/NoAuth/images/empty_star.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/favicon.png b/rt/share/html/NoAuth/images/favicon.png
new file mode 100755
index 0000000..ed1ee37
--- /dev/null
+++ b/rt/share/html/NoAuth/images/favicon.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/star.gif b/rt/share/html/NoAuth/images/star.gif
new file mode 100644
index 0000000..c72d4ce
--- /dev/null
+++ b/rt/share/html/NoAuth/images/star.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/images/test.png b/rt/share/html/NoAuth/images/test.png
new file mode 100644
index 0000000..1dcb2a2
--- /dev/null
+++ b/rt/share/html/NoAuth/images/test.png
@@ -0,0 +1,2 @@
+This file exists to support t/web/basic.t's image handling test.
+<& SYNTAX ERROR
diff --git a/rt/share/html/NoAuth/js/IE7/IE7.js b/rt/share/html/NoAuth/js/IE7/IE7.js
new file mode 100644
index 0000000..9f2b47f
--- /dev/null
+++ b/rt/share/html/NoAuth/js/IE7/IE7.js
@@ -0,0 +1,2 @@
+/* IE7/IE8.js - copyright 2004-2008, Dean Edwards */
+(function(){IE7={toString:function(){return"IE7 version 2.0 (beta3)"}};var k=IE7.appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(top.location.search)||k<5)return;var Q=bG();var C=document.compatMode!="CSS1Compat";var bm=document.documentElement,v,s;var bA="!";var G=":link{ie7-link:link}:visited{ie7-link:visited}";var cj=/^[\w\.]+[^:]*$/;function W(a,b){if(cj.test(a))a=(b||"")+a;return a};function bn(a,b){a=W(a,b);return a.slice(0,a.lastIndexOf("/")+1)};var bB=document.scripts[document.scripts.length-1];var ck=bn(bB.src);try{var H=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}var X={};function cl(a,b){try{a=W(a,b);if(!X[a]){H.open("GET",a,false);H.send();if(H.status==0||H.status==200){X[a]=H.responseText}}}catch(e){}finally{return X[a]||""}};if(k<5.5){undefined=Q();bA="HTML:!";var cm=/(g|gi)$/;var cn=String.prototype.replace;String.prototype.replace=function(a,b){if(typeof b=="function"){if(a&&a.constructor==RegExp){var c=a;var d=c.global;if(d==null)d=cm.test(c);if(d)c=new RegExp(c.source)}else{c=new RegExp(bb(a))}var f,g=this,h="";while(g&&(f=c.exec(g))){h+=g.slice(0,f.index)+b.apply(this,f);g=g.slice(f.index+f[0].length);if(!d)break}return h+g}return cn.apply(this,arguments)};Array.prototype.pop=function(){if(this.length){var a=this[this.length-1];this.length--;return a}return undefined};Array.prototype.push=function(){for(var a=0;a<arguments.length;a++){this[this.length]=arguments[a]}return this.length};var co=this;Function.prototype.apply=function(a,b){if(a===undefined)a=co;else if(a==null)a=window;else if(typeof a=="string")a=new String(a);else if(typeof a=="number")a=new Number(a);else if(typeof a=="boolean")a=new Boolean(a);if(arguments.length==1)b=[];else if(b[0]&&b[0].writeln)b[0]=b[0].documentElement.document||b[0];var c="#ie7_apply",d;a[c]=this;switch(b.length){case 0:d=a[c]();break;case 1:d=a[c](b[0]);break;case 2:d=a[c](b[0],b[1]);break;case 3:d=a[c](b[0],b[1],b[2]);break;case 4:d=a[c](b[0],b[1],b[2],b[3]);break;case 5:d=a[c](b[0],b[1],b[2],b[3],b[4]);break;default:var f=[],g=b.length-1;do f[g]="a["+g+"]";while(g--);eval("r=o[$]("+f+")")}if(typeof a.valueOf=="function"){delete a[c]}else{a[c]=undefined;if(d&&d.writeln)d=d.documentElement.document||d}return d};Function.prototype.call=function(a){return this.apply(a,bC.apply(arguments,[1]))};G+="address,blockquote,body,dd,div,dt,fieldset,form,"+"frame,frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,"+"hr,applet,center,dir,menu,pre,dl,li,ol,ul{display:block}"}var bC=Array.prototype.slice;var cJ=/%([1-9])/g;var cp=/^\s\s*/;var cq=/\s\s*$/;var cr=/([\/()[\]{}|*+-.,^$?\\])/g;var bD=/\bbase\b/;var bE=["constructor","toString"];var Y;function z(){};z.extend=function(a,b){Y=true;var c=new this;ba(c,a);Y=false;var d=c.constructor;function f(){if(!Y)d.apply(this,arguments)};c.constructor=f;f.extend=arguments.callee;ba(f,b);f.prototype=c;return f};z.prototype.extend=function(a){return ba(this,a)};var bo="#";var Z="~";var cs=/\\./g;var ct=/\(\?[:=!]|\[[^\]]+\]/g;var cu=/\(/g;var D=z.extend({constructor:function(a){this[Z]=[];this.merge(a)},exec:function(g){var h=this,p=this[Z];return String(g).replace(new RegExp(this,this.ignoreCase?"gi":"g"),function(){var a,b=1,c=0;while((a=h[bo+p[c++]])){var d=b+a.length+1;if(arguments[b]){var f=a.replacement;switch(typeof f){case"function":return f.apply(h,bC.call(arguments,b,d));case"number":return arguments[b+f];default:return f}}b=d}})},add:function(a,b){if(a instanceof RegExp){a=a.source}if(!this[bo+a])this[Z].push(String(a));this[bo+a]=new D.Item(a,b)},merge:function(a){for(var b in a)this.add(b,a[b])},toString:function(){return"("+this[Z].join(")|(")+")"}},{IGNORE:"$0",Item:z.extend({constructor:function(a,b){a=a instanceof RegExp?a.source:String(a);if(typeof b=="number")b=String(b);else if(b==null)b="";if(typeof b=="string"&&/\$(\d+)/.test(b)){if(/^\$\d+$/.test(b)){b=parseInt(b.slice(1))}else{var c=/'/.test(b.replace(/\\./g,""))?'"':"'";b=b.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\$(\d+)/g,c+"+(arguments[$1]||"+c+c+")+"+c);b=new Function("return "+c+b.replace(/(['"])\1\+(.*)\+\1\1$/,"$1")+c)}}this.length=D.count(a);this.replacement=b;this.toString=bG(a)}}),count:function(a){a=String(a).replace(cs,"").replace(ct,"");return I(a,cu).length}});function ba(a,b){if(a&&b){var c=(typeof b=="function"?Function:Object).prototype;var d=bE.length,f;if(Y)while(f=bE[--d]){var g=b[f];if(g!=c[f]){if(bD.test(g)){bF(a,f,g)}else{a[f]=g}}}for(f in b)if(c[f]===undefined){var g=b[f];if(a[f]&&typeof g=="function"&&bD.test(g)){bF(a,f,g)}else{a[f]=g}}}return a};function bF(c,d,f){var g=c[d];c[d]=function(){var a=this.base;this.base=g;var b=f.apply(this,arguments);this.base=a;return b}};function cv(a,b){if(!b)b=a;var c={};for(var d in a)c[d]=b[d];return c};function i(c){var d=arguments;var f=new RegExp("%([1-"+arguments.length+"])","g");return String(c).replace(f,function(a,b){return b<d.length?d[b]:a})};function I(a,b){return String(a).match(b)||[]};function bb(a){return String(a).replace(cr,"\\$1")};function cK(a){return String(a).replace(cp,"").replace(cq,"")};function bG(a){return function(){return a}};var bH=D.extend({ignoreCase:true});var cw=/\x01(\d+)/g,cx=/'/g,cy=/^\x01/,cz=/\\([\da-fA-F]{1,4})/g;var bp=[];var cA=new bH({"<!\\-\\-|\\-\\->":"","\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/":"","@(namespace|import)[^;\\n]+[;\\n]":"","'(\\\\.|[^'\\\\])*'":bJ,'"(\\\\.|[^"\\\\])*"':bJ,"\\s+":" "});function cB(a){return cA.exec(a)};function bI(c){return c.replace(cw,function(a,b){return bp[b-1]})};function bJ(c){return"\x01"+bp.push(c.replace(cz,function(a,b){return eval("'\\u"+"0000".slice(b.length)+b+"'")}).slice(1,-1).replace(cx,"\\'"))};function cC(a){return cy.test(a)?bp[a.slice(1)-1]:a};var cD=new D({Width:"Height",width:"height",Left:"Top",left:"top",Right:"Bottom",right:"bottom",onX:"onY"});function A(a){return cD.exec(a)};var bK=[];function bq(a){cF(a);w(window,"onresize",a)};function w(a,b,c){a.attachEvent(b,c);bK.push(arguments)};function cE(a,b,c){try{a.detachEvent(b,c)}catch(ignore){}};w(window,"onunload",function(){var a;while(a=bK.pop()){cE(a[0],a[1],a[2])}});function R(a,b,c){if(!a.elements)a.elements={};if(c)a.elements[b.uniqueID]=b;else delete a.elements[b.uniqueID];return c};w(window,"onbeforeprint",function(){if(!IE7.CSS.print)new bw("print");IE7.CSS.print.recalc()});var bL=/^\d+(px)?$/i;var J=/^\d+%$/;var E=function(a,b){if(bL.test(b))return parseInt(b);var c=a.style.left;var d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=b||0;b=a.style.pixelLeft;a.style.left=c;a.runtimeStyle.left=d;return b};var br="ie7-";var bM=z.extend({constructor:function(){this.fixes=[];this.recalcs=[]},init:Q});var bs=[];function cF(a){bs.push(a)};IE7.recalc=function(){IE7.HTML.recalc();IE7.CSS.recalc();for(var a=0;a<bs.length;a++)bs[a]()};function bc(a){return a.currentStyle["ie7-position"]=="fixed"};function bt(a,b){return a.currentStyle[br+b]||a.currentStyle[b]};function K(a,b,c){if(a.currentStyle[br+b]==null){a.runtimeStyle[br+b]=a.currentStyle[b]}a.runtimeStyle[b]=c};function bN(a){var b=document.createElement(a||"object");b.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";b.ie7_anon=true;return b};function B(a,b,c){if(!be[a]){F=[];var d="";var f=T.escape(a).split(",");for(var g=0;g<f.length;g++){o=m=x=0;S=f.length>1?2:0;var h=T.exec(f[g])||"if(0){";if(o){h+=i("if(e%1.nodeName!='!'){",m)}var p=S>1?bV:"";h+=i(p+bW,m);h+=Array(I(h,/\{/g).length+1).join("}");d+=h}eval(i(bX,F)+T.unescape(d)+"return s?null:r}");be[a]=_h}return be[a](b||document,c)};var bd=k<6;var bO=/^(href|src)$/;var bu={"class":"className","for":"htmlFor"};IE7._5=1;IE7._e=function(a,b){var c=a.all[b]||null;if(!c||c.id==b)return c;for(var d=0;d<c.length;d++){if(c[d].id==b)return c[d]}return null};IE7._f=function(a,b){if(b=="src"&&a.pngSrc)return a.pngSrc;var c=bd?(a.attributes[b]||a.attributes[bu[b.toLowerCase()]]):a.getAttributeNode(b);if(c&&(c.specified||b=="value")){if(bO.test(b)){return a.getAttribute(b,2)}else if(b=="class"){return a.className.replace(/\sie7_\w+/g,"")}else if(b=="style"){return a.style.cssText}else{return c.nodeValue}}return null};var bP="colSpan,rowSpan,vAlign,dateTime,accessKey,tabIndex,encType,maxLength,readOnly,longDesc";ba(bu,cv(bP.toLowerCase().split(","),bP.split(",")));IE7._a=function(a){while(a&&(a=a.nextSibling)&&(a.nodeType!=1||a.nodeName=="!"))continue;return a};IE7._b=function(a){while(a&&(a=a.previousSibling)&&(a.nodeType!=1||a.nodeName=="!"))continue;return a};var cG=/([\s>+~,]|[^(]\+|^)([#.:\[])/g,cH=/(^|,)([^\s>+~])/g,cI=/\s*([\s>+~(),]|^|$)\s*/g,bQ=/\s\*\s/g;var bR=D.extend({constructor:function(a){this.base(a);this.sorter=new D;this.sorter.add(/:not\([^)]*\)/,D.IGNORE);this.sorter.add(/([ >](\*|[\w-]+))([^: >+~]*)(:\w+-child(\([^)]+\))?)([^: >+~]*)/,"$1$3$6$4")},ignoreCase:true,escape:function(a){return this.optimise(this.format(a))},format:function(a){return a.replace(cI,"$1").replace(cH,"$1 $2").replace(cG,"$1*$2")},optimise:function(a){return this.sorter.exec(a.replace(bQ,">* "))},unescape:function(a){return bI(a)}});var bS={"":"%1!=null","=":"%1=='%2'","~=":/(^| )%1( |$)/,"|=":/^%1(-|$)/,"^=":/^%1/,"$=":/%1$/,"*=":/%1/};var bT={"first-child":"!IE7._b(e%1)","link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'"};var bv="var p%2=0,i%2,e%2,n%2=e%1.";var bU="e%1.sourceIndex";var bV="var g="+bU+";if(!p[g]){p[g]=1;";var bW="r[r.length]=e%1;if(s)return e%1;";var bX="var _h=function(e0,s){IE7._5++;var r=[],p={},reg=[%1],d=document;";var F;var m;var o;var x;var S;var be={};var T=new bR({" (\\*|[\\w-]+)#([\\w-]+)":function(a,b,c){o=false;var d="var e%2=IE7._e(d,'%4');if(e%2&&";if(b!="*")d+="e%2.nodeName=='%3'&&";d+="(e%1==d||e%1.contains(e%2))){";if(x)d+=i("i%1=n%1.length;",x);return i(d,m++,m,b.toUpperCase(),c)}," (\\*|[\\w-]+)":function(a,b){S++;o=b=="*";var c=bv;c+=(o&&bd)?"all":"getElementsByTagName('%3')";c+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";return i(c,m++,x=m,b.toUpperCase())},">(\\*|[\\w-]+)":function(a,b){var c=x;o=b=="*";var d=bv;d+=c?"children":"childNodes";if(!o&&c)d+=".tags('%3')";d+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";if(o){d+="if(e%2.nodeType==1){";o=bd}else{if(!c)d+="if(e%2.nodeName=='%3'){"}return i(d,m++,x=m,b.toUpperCase())},"\\+(\\*|[\\w-]+)":function(a,b){var c="";if(o)c+="if(e%1.nodeName!='!'){";o=false;c+="e%1=IE7._a(e%1);if(e%1";if(b!="*")c+="&&e%1.nodeName=='%2'";c+="){";return i(c,m,b.toUpperCase())},"~(\\*|[\\w-]+)":function(a,b){var c="";if(o)c+="if(e%1.nodeName!='!'){";o=false;S=2;c+="while(e%1=e%1.nextSibling){if(e%1.ie7_adjacent==IE7._5)break;if(";if(b=="*"){c+="e%1.nodeType==1";if(bd)c+="&&e%1.nodeName!='!'"}else c+="e%1.nodeName=='%2'";c+="){e%1.ie7_adjacent=IE7._5;";return i(c,m,b.toUpperCase())},"#([\\w-]+)":function(a,b){o=false;var c="if(e%1.id=='%2'){";if(x)c+=i("i%1=n%1.length;",x);return i(c,m,b)},"\\.([\\w-]+)":function(a,b){o=false;F.push(new RegExp("(^|\\s)"+bb(b)+"(\\s|$)"));return i("if(e%1.className&&reg[%2].test(e%1.className)){",m,F.length-1)},"\\[([\\w-]+)\\s*([^=]?=)?\\s*([^\\]]*)\\]":function(a,b,c,d){var f=bu[b]||b;if(c){var g="e%1.getAttribute('%2',2)";if(!bO.test(b)){g="e%1.%3||"+g}b=i("("+g+")",m,b,f)}else{b=i("IE7._f(e%1,'%2')",m,b)}var h=bS[c||""]||"0";if(h&&h.source){F.push(new RegExp(i(h.source,bb(T.unescape(d)))));h="reg[%2].test(%1)";d=F.length-1}return"if("+i(h,b,d)+"){"},":+([\\w-]+)(\\(([^)]+)\\))?":function(a,b,c,d){b=bT[b];return"if("+(b?i(b,m,d||""):"0")+"){"}});var bY=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var bZ=/\s*\{\s*/,ca=/\s*\}\s*/,cb=/\s*\,\s*/;var cc=/(.*)(:first-(line|letter))/;var y=document.styleSheets;IE7.CSS=new(bM.extend({parser:new bH,screen:"",print:"",styles:[],rules:[],pseudoClasses:k<7?"first\\-child":"",dynamicPseudoClasses:{toString:function(){var a=[];for(var b in this)a.push(b);return a.join("|")}},init:function(){var a="^\x01$";var b="\\[class=?[^\\]]*\\]";var c=[];if(this.pseudoClasses)c.push(this.pseudoClasses);var d=this.dynamicPseudoClasses.toString();if(d)c.push(d);c=c.join("|");var f=k<7?["[>+~[(]|([:.])\\w+\\1"]:[b];if(c)f.push(":("+c+")");this.UNKNOWN=new RegExp(f.join("|")||a,"i");var g=k<7?["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"]:[b];var h=g.concat();if(c)h.push(":("+c+")");n.COMPLEX=new RegExp(h.join("|")||a,"ig");if(this.pseudoClasses)g.push(":("+this.pseudoClasses+")");L.COMPLEX=new RegExp(g.join("|")||a,"i");L.MATCH=new RegExp(d?"(.*):("+d+")(.*)":a,"i");this.createStyleSheet();this.refresh()},addEventHandler:function(){w.apply(null,arguments)},addFix:function(a,b){this.parser.add(a,b)},addRecalc:function(c,d,f,g){d=new RegExp("([{;\\s])"+c+"\\s*:\\s*"+d+"[^;}]*");var h=this.recalcs.length;if(g)g=c+":"+g;this.addFix(d,function(a,b){return(g?b+g:a)+";ie7-"+a.slice(1)+";ie7_recalc"+h+":1"});this.recalcs.push(arguments);return h},apply:function(){this.getInlineStyles();new bw("screen");this.trash()},createStyleSheet:function(){this.styleSheet=document.createStyleSheet();this.styleSheet.ie7=true;this.styleSheet.owningElement.ie7=true;this.styleSheet.cssText=G},getInlineStyles:function(){var a=document.getElementsByTagName("style"),b;for(var c=a.length-1;(b=a[c]);c--){if(!b.disabled&&!b.ie7){this.styles.push(b.innerHTML)}}},getText:function(a,b){try{var c=a.cssText}catch(e){c=""}if(H)c=cl(a.href,b)||c;return c},recalc:function(){this.screen.recalc();var a=/ie7_recalc\d+/g;var b=G.match(/[{,]/g).length;var c=b+(this.screen.cssText.match(/\{/g)||"").length;var d=this.styleSheet.rules,f;var g,h,p,t,q,j,u,l;for(q=b;q<c;q++){f=d[q];var r=f.style.cssText;if(f&&(g=r.match(a))){p=B(f.selectorText);if(p.length)for(j=0;j<g.length;j++){l=g[j];h=IE7.CSS.recalcs[l.slice(10)][2];for(u=0;(t=p[u]);u++){if(t.currentStyle[l])h(t,r)}}}}},refresh:function(){this.styleSheet.cssText=G+this.screen+this.print},trash:function(){for(var a=0;a<y.length;a++){if(!y[a].ie7){try{var b=y[a].cssText}catch(e){b=""}if(b)y[a].cssText=""}}}}));var bw=z.extend({constructor:function(a){this.media=a;this.load();IE7.CSS[a]=this;IE7.CSS.refresh()},createRule:function(a,b){if(IE7.CSS.UNKNOWN.test(a)){var c;if(bf&&(c=a.match(bf.MATCH))){return new bf(c[1],c[2],b)}else if(c=a.match(L.MATCH)){if(!bY.test(c[0])||L.COMPLEX.test(c[0])){return new L(a,c[1],c[2],c[3],b)}}else return new n(a,b)}return a+" {"+b+"}"},getText:function(){var h=[].concat(IE7.CSS.styles);var p=/@media\s+([^{]*)\{([^@]+\})\s*\}/gi;var t=/\ball\b|^$/i,q=/\bscreen\b/i,j=/\bprint\b/i;function u(a,b){l.value=b;return a.replace(p,l)};function l(a,b,c){b=r(b);switch(b){case"screen":case"print":if(b!=l.value)return"";case"all":return c}return""};function r(a){if(t.test(a))return"all";else if(q.test(a))return(j.test(a))?"all":"screen";else if(j.test(a))return"print"};var N=this;function O(a,b,c,d){var f="";if(!d){c=r(a.media);d=0}if(c=="all"||c==N.media){if(d<3){for(var g=0;g<a.imports.length;g++){f+=O(a.imports[g],bn(a.href,b),c,d+1)}}f+=cB(a.href?cg(a,b):h.pop()||"");f=u(f,N.media)}return f};var bl={};function cg(a,b){var c=W(a.href,b);if(bl[c])return"";bl[c]=(a.disabled)?"":ci(IE7.CSS.getText(a,b),bn(a.href,b));return bl[c]};var ch=/(url\s*\(\s*['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function ci(a,b){return a.replace(ch,"$1"+b.slice(0,b.lastIndexOf("/")+1)+"$2")};for(var P=0;P<y.length;P++){if(!y[P].disabled&&!y[P].ie7){this.cssText+=O(y[P])}}},load:function(){this.cssText="";this.getText();this.parse();this.cssText=bI(this.cssText);X={}},parse:function(){this.cssText=IE7.CSS.parser.exec(this.cssText);var a=IE7.CSS.rules.length;var b=this.cssText.split(ca),c;var d,f,g,h;for(g=0;g<b.length;g++){c=b[g].split(bZ);d=c[0].split(cb);f=c[1];for(h=0;h<d.length;h++){d[h]=f?this.createRule(d[h],f):""}b[g]=d.join("\n")}this.cssText=b.join("\n");this.rules=IE7.CSS.rules.slice(a)},recalc:function(){var a,b;for(b=0;(a=this.rules[b]);b++)a.recalc()},toString:function(){return"@media "+this.media+"{"+this.cssText+"}"}});var bf;var n=IE7.Rule=z.extend({constructor:function(a,b){this.id=IE7.CSS.rules.length;this.className=n.PREFIX+this.id;a=a.match(cc)||a||"*";this.selector=a[1]||a;this.selectorText=this.parse(this.selector)+(a[2]||"");this.cssText=b;this.MATCH=new RegExp("\\s"+this.className+"(\\s|$)","g");IE7.CSS.rules.push(this);this.init()},init:Q,add:function(a){a.className+=" "+this.className},recalc:function(){var a=B(this.selector);for(var b=0;b<a.length;b++)this.add(a[b])},parse:function(a){var b=a.replace(n.CHILD," ").replace(n.COMPLEX,"");if(k<7)b=b.replace(n.MULTI,"");var c=I(b,n.TAGS).length-I(a,n.TAGS).length;var d=I(b,n.CLASSES).length-I(a,n.CLASSES).length+1;while(d>0&&n.CLASS.test(b)){b=b.replace(n.CLASS,"");d--}while(c>0&&n.TAG.test(b)){b=b.replace(n.TAG,"$1*");c--}b+="."+this.className;d=Math.min(d,2);c=Math.min(c,2);var f=-10*d-c;if(f>0){b=b+","+n.MAP[f]+" "+b}return b},remove:function(a){a.className=a.className.replace(this.MATCH,"$1")},toString:function(){return i("%1 {%2}",this.selectorText,this.cssText)}},{CHILD:/>/g,CLASS:/\.[\w-]+/,CLASSES:/[.:\[]/g,MULTI:/(\.[\w-]+)+/g,PREFIX:"ie7_class",TAG:/^\w+|([\s>+~])\w+/,TAGS:/^\w|[\s>+~]\w/g,MAP:{1:"html",2:"html body",10:".ie7_html",11:"html.ie7_html",12:"html.ie7_html body",20:".ie7_html .ie7_body",21:"html.ie7_html .ie7_body",22:"html.ie7_html body.ie7_body"}});var L=n.extend({constructor:function(a,b,c,d,f){this.attach=b||"*";this.dynamicPseudoClass=IE7.CSS.dynamicPseudoClasses[c];this.target=d;this.base(a,f)},recalc:function(){var a=B(this.attach),b;for(var c=0;b=a[c];c++){var d=this.target?B(this.target,b):[b];if(d.length)this.dynamicPseudoClass.apply(b,d,this)}}});var cd=z.extend({constructor:function(a,b){this.name=a;this.apply=b;this.instances={};IE7.CSS.dynamicPseudoClasses[a]=this},register:function(a){var b=a[2];a.id=b.id+a[0].uniqueID;if(!this.instances[a.id]){var c=a[1],d;for(d=0;d<c.length;d++)b.add(c[d]);this.instances[a.id]=a}},unregister:function(a){if(this.instances[a.id]){var b=a[2];var c=a[1],d;for(d=0;d<c.length;d++)b.remove(c[d]);delete this.instances[a.id]}}});if(k<7){var U=new cd("hover",function(a){var b=arguments;IE7.CSS.addEventHandler(a,k<5.5?"onmouseover":"onmouseenter",function(){U.register(b)});IE7.CSS.addEventHandler(a,k<5.5?"onmouseout":"onmouseleave",function(){U.unregister(b)})});w(document,"onmouseup",function(){var a=U.instances;for(var b in a)if(!a[b][0].contains(event.srcElement))U.unregister(a[b])})}IE7.CSS.addRecalc("[\\w-]+","inherit",function(c,d){var f=d.match(/[\w-]+\s*:\s*inherit/g);for(var g=0;g<f.length;g++){var h=f[g].replace(/ie7\-|\s*:\s*inherit/g,"").replace(/\-([a-z])/g,function(a,b){return b.toUpperCase()});c.runtimeStyle[h]=c.parentElement.currentStyle[h]}});IE7.HTML=new(bM.extend({fixed:{},init:Q,addFix:function(){this.fixes.push(arguments)},apply:function(){for(var a=0;a<this.fixes.length;a++){var b=B(this.fixes[a][0]);var c=this.fixes[a][1];for(var d=0;d<b.length;d++)c(b[d])}},addRecalc:function(){this.recalcs.push(arguments)},recalc:function(){for(var a=0;a<this.recalcs.length;a++){var b=B(this.recalcs[a][0]);var c=this.recalcs[a][1],d;var f=Math.pow(2,a);for(var g=0;(d=b[g]);g++){var h=d.uniqueID;if((this.fixed[h]&f)==0){d=c(d)||d;this.fixed[h]|=f}}}}}));if(k<7){document.createElement("abbr");IE7.HTML.addRecalc("label",function(a){if(!a.htmlFor){var b=B("input,textarea",a,true);if(b){w(a,"onclick",function(){b.click()})}}})}var V="[.\\d]";new function(_){var layout=IE7.Layout=this;G+="*{boxSizing:content-box}";IE7.hasLayout=k<5.5?function(a){return a.clientWidth}:function(a){return a.currentStyle.hasLayout};layout.boxSizing=function(a){if(!IE7.hasLayout(a)){a.style.height="0cm";if(a.currentStyle.verticalAlign=="auto")a.runtimeStyle.verticalAlign="top";collapseMargins(a)}};function collapseMargins(a){if(a!=s&&a.currentStyle.position!="absolute"){collapseMargin(a,"marginTop");collapseMargin(a,"marginBottom")}};function collapseMargin(a,b){if(!a.runtimeStyle[b]){var c=a.parentElement;if(c&&IE7.hasLayout(c)&&!IE7[b=="marginTop"?"_b":"_a"](a))return;var d=B(">*:"+(b=="marginTop"?"first":"last")+"-child",a,true);if(d&&d.currentStyle.styleFloat=="none"&&IE7.hasLayout(d)){collapseMargin(d,b);margin=_9(a,a.currentStyle[b]);childMargin=_9(d,d.currentStyle[b]);if(margin<0||childMargin<0){a.runtimeStyle[b]=margin+childMargin}else{a.runtimeStyle[b]=Math.max(childMargin,margin)}d.runtimeStyle[b]="0px"}}};function _9(a,b){return b=="auto"?0:E(a,b)};var UNIT=/^[.\d][\w%]*$/,AUTO=/^(auto|0cm)$/;var applyWidth,applyHeight;IE7.Layout.borderBox=function(a){applyWidth(a);applyHeight(a)};var fixWidth=function(g){applyWidth=function(a){if(!J.test(a.currentStyle.width))h(a);collapseMargins(a)};function h(a,b){if(!a.runtimeStyle.fixedWidth){if(!b)b=a.currentStyle.width;a.runtimeStyle.fixedWidth=(UNIT.test(b))?Math.max(0,q(a,b)):b;K(a,"width",a.runtimeStyle.fixedWidth)}};function p(a){if(!bc(a)){var b=a.offsetParent;while(b&&!IE7.hasLayout(b))b=b.offsetParent}return(b||s).clientWidth};function t(a,b){if(J.test(b))return parseInt(parseFloat(b)/100*p(a));return E(a,b)};var q=function(a,b){var c=a.currentStyle["box-sizing"]=="border-box";var d=0;if(C&&!c)d+=j(a)+u(a,"padding");else if(!C&&c)d-=j(a)+u(a,"padding");return t(a,b)+d};function j(a){return a.offsetWidth-a.clientWidth};function u(a,b){return t(a,a.currentStyle[b+"Left"])+t(a,a.currentStyle[b+"Right"])};G+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";layout.minWidth=function(a){if(a.currentStyle["min-width"]!=null){a.style.minWidth=a.currentStyle["min-width"]}if(R(arguments.callee,a,a.currentStyle.minWidth!="none")){layout.boxSizing(a);h(a);l(a)}};eval("IE7.Layout.maxWidth="+String(layout.minWidth).replace(/min/g,"max"));function l(a){var b=a.getBoundingClientRect();var c=b.right-b.left;if(a.currentStyle.minWidth!="none"&&c<=q(a,a.currentStyle.minWidth)){a.runtimeStyle.width=a.currentStyle.minWidth}else if(a.currentStyle.maxWidth!="none"&&c>=q(a,a.currentStyle.maxWidth)){a.runtimeStyle.width=a.currentStyle.maxWidth}else{a.runtimeStyle.width=a.runtimeStyle.fixedWidth}};function r(a){if(R(r,a,/^(fixed|absolute)$/.test(a.currentStyle.position)&&bt(a,"left")!="auto"&&bt(a,"right")!="auto"&&AUTO.test(bt(a,"width")))){N(a);IE7.Layout.boxSizing(a)}};IE7.Layout.fixRight=r;function N(a){var b=t(a,a.runtimeStyle._c||a.currentStyle.left);var c=p(a)-t(a,a.currentStyle.right)-b-u(a,"margin");if(parseInt(a.runtimeStyle.width)==c)return;a.runtimeStyle.width="";if(bc(a)||g||a.offsetWidth<c){if(!C)c-=j(a)+u(a,"padding");if(c<0)c=0;a.runtimeStyle.fixedWidth=c;K(a,"width",c)}};var O=0;bq(function(){if(!s)return;var a,b=(O<s.clientWidth);O=s.clientWidth;var c=layout.minWidth.elements;for(a in c){var d=c[a];var f=(parseInt(d.runtimeStyle.width)==q(d,d.currentStyle.minWidth));if(b&&f)d.runtimeStyle.width="";if(b==f)l(d)}var c=layout.maxWidth.elements;for(a in c){var d=c[a];var f=(parseInt(d.runtimeStyle.width)==q(d,d.currentStyle.maxWidth));if(!b&&f)d.runtimeStyle.width="";if(b!=f)l(d)}for(a in r.elements)N(r.elements[a])});if(C){IE7.CSS.addRecalc("width",V,applyWidth)}if(k<7){IE7.CSS.addRecalc("min-width",V,layout.minWidth);IE7.CSS.addRecalc("max-width",V,layout.maxWidth);IE7.CSS.addRecalc("right",V,r)}};eval("var fixHeight="+A(fixWidth));fixWidth();fixHeight(true)};var bg=W("blank.gif",ck);var bh="DXImageTransform.Microsoft.AlphaImageLoader";var bx="progid:"+bh+"(src='%1',sizingMethod='%2')";var bi;var M=[];function by(a){if(bi.test(a.src)){var b=new Image(a.width,a.height);b.onload=function(){a.width=b.width;a.height=b.height;b=null};b.src=a.src;a.pngSrc=a.src;bz(a)}};if(k>=5.5&&k<7){IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/,function(a,b,c,d,f){d=cC(d);return bi.test(d)?"filter:"+i(bx,d,"crop")+";zoom:1;background"+(b||"")+":"+(c||"")+"none"+(f||""):a});IE7.HTML.addRecalc("img,input",function(a){if(a.tagName=="INPUT"&&a.type!="image")return;by(a);w(a,"onpropertychange",function(){if(!bj&&event.propertyName=="src"&&a.src.indexOf(bg)==-1)by(a)})});var bj=false;w(window,"onbeforeprint",function(){bj=true;for(var a=0;a<M.length;a++)ce(M[a])});w(window,"onafterprint",function(){for(var a=0;a<M.length;a++)bz(M[a]);bj=false})}function bz(a,b){var c=a.filters[bh];if(c){c.src=a.src;c.enabled=true}else{a.runtimeStyle.filter=i(bx,a.src,b||"scale");M.push(a)}a.src=bg};function ce(a){a.src=a.pngSrc;a.filters[bh].enabled=false};new function(_){if(k>=7)return;IE7.CSS.addRecalc("position","fixed",_6,"absolute");IE7.CSS.addRecalc("background(-attachment)?","[^};]*fixed",_2);var $viewport=C?"body":"documentElement";function _3(){if(v.currentStyle.backgroundAttachment!="fixed"){if(v.currentStyle.backgroundImage=="none"){v.runtimeStyle.backgroundRepeat="no-repeat";v.runtimeStyle.backgroundImage="url("+bg+")"}v.runtimeStyle.backgroundAttachment="fixed"}_3=Q};var _0=bN("img");function _1(a){return a?bc(a)||_1(a.parentElement):false};function _d(a,b,c){setTimeout("document.all."+a.uniqueID+".runtimeStyle.setExpression('"+b+"','"+c+"')",0)};function _2(a){if(R(_2,a,a.currentStyle.backgroundAttachment=="fixed"&&!a.contains(v))){_3();bgLeft(a);bgTop(a);_8(a)}};function _8(a){_0.src=a.currentStyle.backgroundImage.slice(5,-2);var b=a.canHaveChildren?a:a.parentElement;b.appendChild(_0);setOffsetLeft(a);setOffsetTop(a);b.removeChild(_0)};function bgLeft(a){a.style.backgroundPositionX=a.currentStyle.backgroundPositionX;if(!_1(a)){_d(a,"backgroundPositionX","(parseInt(runtimeStyle.offsetLeft)+document."+$viewport+".scrollLeft)||0")}};eval(A(bgLeft));function setOffsetLeft(a){var b=_1(a)?"backgroundPositionX":"offsetLeft";a.runtimeStyle[b]=getOffsetLeft(a,a.style.backgroundPositionX)-a.getBoundingClientRect().left-a.clientLeft+2};eval(A(setOffsetLeft));function getOffsetLeft(a,b){switch(b){case"left":case"top":return 0;case"right":case"bottom":return s.clientWidth-_0.offsetWidth;case"center":return(s.clientWidth-_0.offsetWidth)/2;default:if(J.test(b)){return parseInt((s.clientWidth-_0.offsetWidth)*parseFloat(b)/100)}_0.style.left=b;return _0.offsetLeft}};eval(A(getOffsetLeft));function _6(a){if(R(_6,a,bc(a))){K(a,"position","absolute");K(a,"left",a.currentStyle.left);K(a,"top",a.currentStyle.top);_3();IE7.Layout.fixRight(a);_4(a)}};function _4(a,b){positionTop(a,b);positionLeft(a,b,true);if(!a.runtimeStyle.autoLeft&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.right!="auto"){var c=s.clientWidth-getPixelWidth(a,a.currentStyle.right)-getPixelWidth(a,a.runtimeStyle._c)-a.clientWidth;if(a.currentStyle.marginRight=="auto")c=parseInt(c/2);if(_1(a.offsetParent))a.runtimeStyle.pixelLeft+=c;else a.runtimeStyle.shiftLeft=c}clipWidth(a);clipHeight(a)};function clipWidth(a){var b=a.runtimeStyle.fixWidth;a.runtimeStyle.borderRightWidth="";a.runtimeStyle.width=b?getPixelWidth(a,b):"";if(a.currentStyle.width!="auto"){var c=a.getBoundingClientRect();var d=a.offsetWidth-s.clientWidth+c.left-2;if(d>=0){a.runtimeStyle.borderRightWidth="0px";d=Math.max(E(a,a.currentStyle.width)-d,0);K(a,"width",d);return d}}};eval(A(clipWidth));function positionLeft(a,b){if(!b&&J.test(a.currentStyle.width)){a.runtimeStyle.fixWidth=a.currentStyle.width}if(a.runtimeStyle.fixWidth){a.runtimeStyle.width=getPixelWidth(a,a.runtimeStyle.fixWidth)}a.runtimeStyle.shiftLeft=0;a.runtimeStyle._c=a.currentStyle.left;a.runtimeStyle.autoLeft=a.currentStyle.right!="auto"&&a.currentStyle.left=="auto";a.runtimeStyle.left="";a.runtimeStyle.screenLeft=getScreenLeft(a);a.runtimeStyle.pixelLeft=a.runtimeStyle.screenLeft;if(!b&&!_1(a.offsetParent)){_d(a,"pixelLeft","runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+$viewport+".scrollLeft")}};eval(A(positionLeft));function getScreenLeft(a){var b=a.offsetLeft,c=1;if(a.runtimeStyle.autoLeft){b=s.clientWidth-a.offsetWidth-getPixelWidth(a,a.currentStyle.right)}if(a.currentStyle.marginLeft!="auto"){b-=getPixelWidth(a,a.currentStyle.marginLeft)}while(a=a.offsetParent){if(a.currentStyle.position!="static")c=-1;b+=a.offsetLeft*c}return b};eval(A(getScreenLeft));function getPixelWidth(a,b){return J.test(b)?parseInt(parseFloat(b)/100*s.clientWidth):E(a,b)};eval(A(getPixelWidth));function _g(){var a=_2.elements;for(var b in a)_8(a[b]);a=_6.elements;for(b in a){_4(a[b],true);_4(a[b],true)}_7=0};var _7;bq(function(){if(!_7)_7=setTimeout(_g,0)})};var bk={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};IE7.CSS.addRecalc("overflow","visible",function(a){if(a.parentNode.ie7_wrapped)return;if(IE7.Layout&&a.currentStyle["max-height"]!="auto"){IE7.Layout.maxHeight(a)}if(a.currentStyle.marginLeft=="auto")a.style.marginLeft=0;if(a.currentStyle.marginRight=="auto")a.style.marginRight=0;var b=document.createElement(bA);b.ie7_wrapped=a;for(var c in bk){b.style[c]=a.currentStyle[c];if(bk[c]!=null){a.runtimeStyle[c]=bk[c]}}b.style.display="block";b.style.position="relative";a.runtimeStyle.position="absolute";a.parentNode.insertBefore(b,a);b.appendChild(a)});function cf(){var f="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var g=0;g<f.length;g++){f[f[g]]=f[g-1]||"0.67em"}IE7.CSS.addFix(/(font(-size)?\s*:\s*)([\w.-]+)/,function(a,b,c,d){return b+(f[d]||d)});if(k<6){var h=/^\-/,p=/(em|ex)$/i;var t=/em$/i,q=/ex$/i;E=function(a,b){if(bL.test(b))return parseInt(b)||0;var c=h.test(b)?-1:1;if(p.test(b))c*=u(a);j.style.width=(c<0)?b.slice(1):b;v.appendChild(j);b=c*j.offsetWidth;j.removeNode();return parseInt(b)};var j=bN();function u(a){var b=1;j.style.fontFamily=a.currentStyle.fontFamily;j.style.lineHeight=a.currentStyle.lineHeight;while(a!=v){var c=a.currentStyle["ie7-font-size"];if(c){if(t.test(c))b*=parseFloat(c);else if(J.test(c))b*=(parseFloat(c)/100);else if(q.test(c))b*=(parseFloat(c)/2);else{j.style.fontSize=c;return 1}}a=a.parentElement}return b};IE7.CSS.addFix(/cursor\s*:\s*pointer/,"cursor:hand");IE7.CSS.addFix(/display\s*:\s*list-item/,"display:block")}function l(a){if(k<5.5)IE7.Layout.boxSizing(a.parentElement);var b=a.parentElement;var c=b.offsetWidth-a.offsetWidth-r(b);var d=(a.currentStyle["ie7-margin"]&&a.currentStyle.marginRight=="auto")||a.currentStyle["ie7-margin-right"]=="auto";switch(b.currentStyle.textAlign){case"right":c=d?parseInt(c/2):0;a.runtimeStyle.marginRight=c+"px";break;case"center":if(d)c=0;default:if(d)c/=2;a.runtimeStyle.marginLeft=parseInt(c)+"px"}};function r(a){return E(a,a.currentStyle.paddingLeft)+E(a,a.currentStyle.paddingRight)};IE7.CSS.addRecalc("margin(-left|-right)?","[^};]*auto",function(a){if(R(l,a,a.parentElement&&a.currentStyle.display=="block"&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.position!="absolute")){l(a)}});bq(function(){for(var a in l.elements){var b=l.elements[a];b.runtimeStyle.marginLeft=b.runtimeStyle.marginRight="";l(b)}})};IE7.loaded=true;(function(){try{bm.doScroll("left")}catch(e){setTimeout(arguments.callee,1);return}try{eval(bB.innerHTML)}catch(e){}bi=new RegExp(bb(typeof IE7_PNG_SUFFIX=="string"?IE7_PNG_SUFFIX:"-trans.png")+"$","i");v=document.body;s=C?v:bm;v.className+=" ie7_body";bm.className+=" ie7_html";if(C)cf();IE7.CSS.init();IE7.HTML.init();IE7.HTML.apply();IE7.CSS.apply();IE7.recalc()})()})(); \ No newline at end of file
diff --git a/rt/share/html/NoAuth/js/IE7/IE8.js b/rt/share/html/NoAuth/js/IE7/IE8.js
new file mode 100644
index 0000000..efa7758
--- /dev/null
+++ b/rt/share/html/NoAuth/js/IE7/IE8.js
@@ -0,0 +1,2 @@
+/* IE7/IE8.js - copyright 2004-2008, Dean Edwards */
+(function(){IE7={toString:function(){return"IE7 version 2.0 (beta3)"}};var m=IE7.appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(top.location.search)||m<5)return;var U=bT();var G=document.compatMode!="CSS1Compat";var bx=document.documentElement,w,t;var bN="!";var J=":link{ie7-link:link}:visited{ie7-link:visited}";var cB=/^[\w\.]+[^:]*$/;function bc(a,b){if(cB.test(a))a=(b||"")+a;return a};function by(a,b){a=bc(a,b);return a.slice(0,a.lastIndexOf("/")+1)};var bO=document.scripts[document.scripts.length-1];var cC=by(bO.src);try{var K=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}var bd={};function cD(a,b){try{a=bc(a,b);if(!bd[a]){K.open("GET",a,false);K.send();if(K.status==0||K.status==200){bd[a]=K.responseText}}}catch(e){}finally{return bd[a]||""}};if(m<5.5){undefined=U();bN="HTML:!";var cE=/(g|gi)$/;var cF=String.prototype.replace;String.prototype.replace=function(a,b){if(typeof b=="function"){if(a&&a.constructor==RegExp){var c=a;var d=c.global;if(d==null)d=cE.test(c);if(d)c=new RegExp(c.source)}else{c=new RegExp(W(a))}var f,g=this,h="";while(g&&(f=c.exec(g))){h+=g.slice(0,f.index)+b.apply(this,f);g=g.slice(f.index+f[0].length);if(!d)break}return h+g}return cF.apply(this,arguments)};Array.prototype.pop=function(){if(this.length){var a=this[this.length-1];this.length--;return a}return undefined};Array.prototype.push=function(){for(var a=0;a<arguments.length;a++){this[this.length]=arguments[a]}return this.length};var cG=this;Function.prototype.apply=function(a,b){if(a===undefined)a=cG;else if(a==null)a=window;else if(typeof a=="string")a=new String(a);else if(typeof a=="number")a=new Number(a);else if(typeof a=="boolean")a=new Boolean(a);if(arguments.length==1)b=[];else if(b[0]&&b[0].writeln)b[0]=b[0].documentElement.document||b[0];var c="#ie7_apply",d;a[c]=this;switch(b.length){case 0:d=a[c]();break;case 1:d=a[c](b[0]);break;case 2:d=a[c](b[0],b[1]);break;case 3:d=a[c](b[0],b[1],b[2]);break;case 4:d=a[c](b[0],b[1],b[2],b[3]);break;case 5:d=a[c](b[0],b[1],b[2],b[3],b[4]);break;default:var f=[],g=b.length-1;do f[g]="a["+g+"]";while(g--);eval("r=o[$]("+f+")")}if(typeof a.valueOf=="function"){delete a[c]}else{a[c]=undefined;if(d&&d.writeln)d=d.documentElement.document||d}return d};Function.prototype.call=function(a){return this.apply(a,bP.apply(arguments,[1]))};J+="address,blockquote,body,dd,div,dt,fieldset,form,"+"frame,frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,"+"hr,applet,center,dir,menu,pre,dl,li,ol,ul{display:block}"}var bP=Array.prototype.slice;var cZ=/%([1-9])/g;var cH=/^\s\s*/;var cI=/\s\s*$/;var cJ=/([\/()[\]{}|*+-.,^$?\\])/g;var bQ=/\bbase\b/;var bR=["constructor","toString"];var be;function B(){};B.extend=function(a,b){be=true;var c=new this;bf(c,a);be=false;var d=c.constructor;function f(){if(!be)d.apply(this,arguments)};c.constructor=f;f.extend=arguments.callee;bf(f,b);f.prototype=c;return f};B.prototype.extend=function(a){return bf(this,a)};var bz="#";var V="~";var cK=/\\./g;var cL=/\(\?[:=!]|\[[^\]]+\]/g;var cM=/\(/g;var H=B.extend({constructor:function(a){this[V]=[];this.merge(a)},exec:function(g){var h=this,j=this[V];return String(g).replace(new RegExp(this,this.ignoreCase?"gi":"g"),function(){var a,b=1,c=0;while((a=h[bz+j[c++]])){var d=b+a.length+1;if(arguments[b]){var f=a.replacement;switch(typeof f){case"function":return f.apply(h,bP.call(arguments,b,d));case"number":return arguments[b+f];default:return f}}b=d}})},add:function(a,b){if(a instanceof RegExp){a=a.source}if(!this[bz+a])this[V].push(String(a));this[bz+a]=new H.Item(a,b)},merge:function(a){for(var b in a)this.add(b,a[b])},toString:function(){return"("+this[V].join(")|(")+")"}},{IGNORE:"$0",Item:B.extend({constructor:function(a,b){a=a instanceof RegExp?a.source:String(a);if(typeof b=="number")b=String(b);else if(b==null)b="";if(typeof b=="string"&&/\$(\d+)/.test(b)){if(/^\$\d+$/.test(b)){b=parseInt(b.slice(1))}else{var c=/'/.test(b.replace(/\\./g,""))?'"':"'";b=b.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\$(\d+)/g,c+"+(arguments[$1]||"+c+c+")+"+c);b=new Function("return "+c+b.replace(/(['"])\1\+(.*)\+\1\1$/,"$1")+c)}}this.length=H.count(a);this.replacement=b;this.toString=bT(a)}}),count:function(a){a=String(a).replace(cK,"").replace(cL,"");return L(a,cM).length}});function bf(a,b){if(a&&b){var c=(typeof b=="function"?Function:Object).prototype;var d=bR.length,f;if(be)while(f=bR[--d]){var g=b[f];if(g!=c[f]){if(bQ.test(g)){bS(a,f,g)}else{a[f]=g}}}for(f in b)if(c[f]===undefined){var g=b[f];if(a[f]&&typeof g=="function"&&bQ.test(g)){bS(a,f,g)}else{a[f]=g}}}return a};function bS(c,d,f){var g=c[d];c[d]=function(){var a=this.base;this.base=g;var b=f.apply(this,arguments);this.base=a;return b}};function cN(a,b){if(!b)b=a;var c={};for(var d in a)c[d]=b[d];return c};function i(c){var d=arguments;var f=new RegExp("%([1-"+arguments.length+"])","g");return String(c).replace(f,function(a,b){return b<d.length?d[b]:a})};function L(a,b){return String(a).match(b)||[]};function W(a){return String(a).replace(cJ,"\\$1")};function da(a){return String(a).replace(cH,"").replace(cI,"")};function bT(a){return function(){return a}};var bU=H.extend({ignoreCase:true});var cO=/\x01(\d+)/g,cP=/'/g,cQ=/^\x01/,cR=/\\([\da-fA-F]{1,4})/g;var bA=[];var bV=new bU({"<!\\-\\-|\\-\\->":"","\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/":"","@(namespace|import)[^;\\n]+[;\\n]":"","'(\\\\.|[^'\\\\])*'":bW,'"(\\\\.|[^"\\\\])*"':bW,"\\s+":" "});function cS(a){return bV.exec(a)};function bg(c){return c.replace(cO,function(a,b){return bA[b-1]})};function bW(c){return"\x01"+bA.push(c.replace(cR,function(a,b){return eval("'\\u"+"0000".slice(b.length)+b+"'")}).slice(1,-1).replace(cP,"\\'"))};function bB(a){return cQ.test(a)?bA[a.slice(1)-1]:a};var cT=new H({Width:"Height",width:"height",Left:"Top",left:"top",Right:"Bottom",right:"bottom",onX:"onY"});function C(a){return cT.exec(a)};var bX=[];function bC(a){cV(a);v(window,"onresize",a)};function v(a,b,c){a.attachEvent(b,c);bX.push(arguments)};function cU(a,b,c){try{a.detachEvent(b,c)}catch(ignore){}};v(window,"onunload",function(){var a;while(a=bX.pop()){cU(a[0],a[1],a[2])}});function X(a,b,c){if(!a.elements)a.elements={};if(c)a.elements[b.uniqueID]=b;else delete a.elements[b.uniqueID];return c};v(window,"onbeforeprint",function(){if(!IE7.CSS.print)new bJ("print");IE7.CSS.print.recalc()});var bY=/^\d+(px)?$/i;var M=/^\d+%$/;var D=function(a,b){if(bY.test(b))return parseInt(b);var c=a.style.left;var d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=b||0;b=a.style.pixelLeft;a.style.left=c;a.runtimeStyle.left=d;return b};var bD="ie7-";var bZ=B.extend({constructor:function(){this.fixes=[];this.recalcs=[]},init:U});var bE=[];function cV(a){bE.push(a)};IE7.recalc=function(){IE7.HTML.recalc();IE7.CSS.recalc();for(var a=0;a<bE.length;a++)bE[a]()};function bh(a){return a.currentStyle["ie7-position"]=="fixed"};function bF(a,b){return a.currentStyle[bD+b]||a.currentStyle[b]};function N(a,b,c){if(a.currentStyle[bD+b]==null){a.runtimeStyle[bD+b]=a.currentStyle[b]}a.runtimeStyle[b]=c};function ca(a){var b=document.createElement(a||"object");b.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";b.ie7_anon=true;return b};function x(a,b,c){if(!bj[a]){I=[];var d="";var f=E.escape(a).split(",");for(var g=0;g<f.length;g++){p=l=y=0;Y=f.length>1?2:0;var h=E.exec(f[g])||"if(0){";if(p){h+=i("if(e%1.nodeName!='!'){",l)}var j=Y>1?ch:"";h+=i(j+ci,l);h+=Array(L(h,/\{/g).length+1).join("}");d+=h}eval(i(cj,I)+E.unescape(d)+"return s?null:r}");bj[a]=_k}return bj[a](b||document,c)};var bi=m<6;var cb=/^(href|src)$/;var bG={"class":"className","for":"htmlFor"};IE7._1=1;IE7._e=function(a,b){var c=a.all[b]||null;if(!c||c.id==b)return c;for(var d=0;d<c.length;d++){if(c[d].id==b)return c[d]}return null};IE7._f=function(a,b){if(b=="src"&&a.pngSrc)return a.pngSrc;var c=bi?(a.attributes[b]||a.attributes[bG[b.toLowerCase()]]):a.getAttributeNode(b);if(c&&(c.specified||b=="value")){if(cb.test(b)){return a.getAttribute(b,2)}else if(b=="class"){return a.className.replace(/\sie7_\w+/g,"")}else if(b=="style"){return a.style.cssText}else{return c.nodeValue}}return null};var cc="colSpan,rowSpan,vAlign,dateTime,accessKey,tabIndex,encType,maxLength,readOnly,longDesc";bf(bG,cN(cc.toLowerCase().split(","),cc.split(",")));IE7._3=function(a){while(a&&(a=a.nextSibling)&&(a.nodeType!=1||a.nodeName=="!"))continue;return a};IE7._4=function(a){while(a&&(a=a.previousSibling)&&(a.nodeType!=1||a.nodeName=="!"))continue;return a};var cW=/([\s>+~,]|[^(]\+|^)([#.:\[])/g,cX=/(^|,)([^\s>+~])/g,cY=/\s*([\s>+~(),]|^|$)\s*/g,cd=/\s\*\s/g;var ce=H.extend({constructor:function(a){this.base(a);this.sorter=new H;this.sorter.add(/:not\([^)]*\)/,H.IGNORE);this.sorter.add(/([ >](\*|[\w-]+))([^: >+~]*)(:\w+-child(\([^)]+\))?)([^: >+~]*)/,"$1$3$6$4")},ignoreCase:true,escape:function(a){return this.optimise(this.format(a))},format:function(a){return a.replace(cY,"$1").replace(cX,"$1 $2").replace(cW,"$1*$2")},optimise:function(a){return this.sorter.exec(a.replace(cd,">* "))},unescape:function(a){return bg(a)}});var cf={"":"%1!=null","=":"%1=='%2'","~=":/(^| )%1( |$)/,"|=":/^%1(-|$)/,"^=":/^%1/,"$=":/%1$/,"*=":/%1/};var bH={"first-child":"!IE7._4(e%1)","link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'"};var bI="var p%2=0,i%2,e%2,n%2=e%1.";var cg="e%1.sourceIndex";var ch="var g="+cg+";if(!p[g]){p[g]=1;";var ci="r[r.length]=e%1;if(s)return e%1;";var cj="var _k=function(e0,s){IE7._1++;var r=[],p={},reg=[%1],d=document;";var I;var l;var p;var y;var Y;var bj={};var E=new ce({" (\\*|[\\w-]+)#([\\w-]+)":function(a,b,c){p=false;var d="var e%2=IE7._e(d,'%4');if(e%2&&";if(b!="*")d+="e%2.nodeName=='%3'&&";d+="(e%1==d||e%1.contains(e%2))){";if(y)d+=i("i%1=n%1.length;",y);return i(d,l++,l,b.toUpperCase(),c)}," (\\*|[\\w-]+)":function(a,b){Y++;p=b=="*";var c=bI;c+=(p&&bi)?"all":"getElementsByTagName('%3')";c+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";return i(c,l++,y=l,b.toUpperCase())},">(\\*|[\\w-]+)":function(a,b){var c=y;p=b=="*";var d=bI;d+=c?"children":"childNodes";if(!p&&c)d+=".tags('%3')";d+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";if(p){d+="if(e%2.nodeType==1){";p=bi}else{if(!c)d+="if(e%2.nodeName=='%3'){"}return i(d,l++,y=l,b.toUpperCase())},"\\+(\\*|[\\w-]+)":function(a,b){var c="";if(p)c+="if(e%1.nodeName!='!'){";p=false;c+="e%1=IE7._3(e%1);if(e%1";if(b!="*")c+="&&e%1.nodeName=='%2'";c+="){";return i(c,l,b.toUpperCase())},"~(\\*|[\\w-]+)":function(a,b){var c="";if(p)c+="if(e%1.nodeName!='!'){";p=false;Y=2;c+="while(e%1=e%1.nextSibling){if(e%1.ie7_adjacent==IE7._1)break;if(";if(b=="*"){c+="e%1.nodeType==1";if(bi)c+="&&e%1.nodeName!='!'"}else c+="e%1.nodeName=='%2'";c+="){e%1.ie7_adjacent=IE7._1;";return i(c,l,b.toUpperCase())},"#([\\w-]+)":function(a,b){p=false;var c="if(e%1.id=='%2'){";if(y)c+=i("i%1=n%1.length;",y);return i(c,l,b)},"\\.([\\w-]+)":function(a,b){p=false;I.push(new RegExp("(^|\\s)"+W(b)+"(\\s|$)"));return i("if(e%1.className&&reg[%2].test(e%1.className)){",l,I.length-1)},"\\[([\\w-]+)\\s*([^=]?=)?\\s*([^\\]]*)\\]":function(a,b,c,d){var f=bG[b]||b;if(c){var g="e%1.getAttribute('%2',2)";if(!cb.test(b)){g="e%1.%3||"+g}b=i("("+g+")",l,b,f)}else{b=i("IE7._f(e%1,'%2')",l,b)}var h=cf[c||""]||"0";if(h&&h.source){I.push(new RegExp(i(h.source,W(E.unescape(d)))));h="reg[%2].test(%1)";d=I.length-1}return"if("+i(h,b,d)+"){"},":+([\\w-]+)(\\(([^)]+)\\))?":function(a,b,c,d){b=bH[b];return"if("+(b?i(b,l,d||""):"0")+"){"}});var ck=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var cl=/\s*\{\s*/,cm=/\s*\}\s*/,cn=/\s*\,\s*/;var co=/(.*)(:first-(line|letter))/;var z=document.styleSheets;IE7.CSS=new(bZ.extend({parser:new bU,screen:"",print:"",styles:[],rules:[],pseudoClasses:m<7?"first\\-child":"",dynamicPseudoClasses:{toString:function(){var a=[];for(var b in this)a.push(b);return a.join("|")}},init:function(){var a="^\x01$";var b="\\[class=?[^\\]]*\\]";var c=[];if(this.pseudoClasses)c.push(this.pseudoClasses);var d=this.dynamicPseudoClasses.toString();if(d)c.push(d);c=c.join("|");var f=m<7?["[>+~[(]|([:.])\\w+\\1"]:[b];if(c)f.push(":("+c+")");this.UNKNOWN=new RegExp(f.join("|")||a,"i");var g=m<7?["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"]:[b];var h=g.concat();if(c)h.push(":("+c+")");o.COMPLEX=new RegExp(h.join("|")||a,"ig");if(this.pseudoClasses)g.push(":("+this.pseudoClasses+")");O.COMPLEX=new RegExp(g.join("|")||a,"i");O.MATCH=new RegExp(d?"(.*):("+d+")(.*)":a,"i");this.createStyleSheet();this.refresh()},addEventHandler:function(){v.apply(null,arguments)},addFix:function(a,b){this.parser.add(a,b)},addRecalc:function(c,d,f,g){d=new RegExp("([{;\\s])"+c+"\\s*:\\s*"+d+"[^;}]*");var h=this.recalcs.length;if(g)g=c+":"+g;this.addFix(d,function(a,b){return(g?b+g:a)+";ie7-"+a.slice(1)+";ie7_recalc"+h+":1"});this.recalcs.push(arguments);return h},apply:function(){this.getInlineStyles();new bJ("screen");this.trash()},createStyleSheet:function(){this.styleSheet=document.createStyleSheet();this.styleSheet.ie7=true;this.styleSheet.owningElement.ie7=true;this.styleSheet.cssText=J},getInlineStyles:function(){var a=document.getElementsByTagName("style"),b;for(var c=a.length-1;(b=a[c]);c--){if(!b.disabled&&!b.ie7){this.styles.push(b.innerHTML)}}},getText:function(a,b){try{var c=a.cssText}catch(e){c=""}if(K)c=cD(a.href,b)||c;return c},recalc:function(){this.screen.recalc();var a=/ie7_recalc\d+/g;var b=J.match(/[{,]/g).length;var c=b+(this.screen.cssText.match(/\{/g)||"").length;var d=this.styleSheet.rules,f;var g,h,j,q,r,k,u,n;for(r=b;r<c;r++){f=d[r];var s=f.style.cssText;if(f&&(g=s.match(a))){j=x(f.selectorText);if(j.length)for(k=0;k<g.length;k++){n=g[k];h=IE7.CSS.recalcs[n.slice(10)][2];for(u=0;(q=j[u]);u++){if(q.currentStyle[n])h(q,s)}}}}},refresh:function(){this.styleSheet.cssText=J+this.screen+this.print},trash:function(){for(var a=0;a<z.length;a++){if(!z[a].ie7){try{var b=z[a].cssText}catch(e){b=""}if(b)z[a].cssText=""}}}}));var bJ=B.extend({constructor:function(a){this.media=a;this.load();IE7.CSS[a]=this;IE7.CSS.refresh()},createRule:function(a,b){if(IE7.CSS.UNKNOWN.test(a)){var c;if(F&&(c=a.match(F.MATCH))){return new F(c[1],c[2],b)}else if(c=a.match(O.MATCH)){if(!ck.test(c[0])||O.COMPLEX.test(c[0])){return new O(a,c[1],c[2],c[3],b)}}else return new o(a,b)}return a+" {"+b+"}"},getText:function(){var h=[].concat(IE7.CSS.styles);var j=/@media\s+([^{]*)\{([^@]+\})\s*\}/gi;var q=/\ball\b|^$/i,r=/\bscreen\b/i,k=/\bprint\b/i;function u(a,b){n.value=b;return a.replace(j,n)};function n(a,b,c){b=s(b);switch(b){case"screen":case"print":if(b!=n.value)return"";case"all":return c}return""};function s(a){if(q.test(a))return"all";else if(r.test(a))return(k.test(a))?"all":"screen";else if(k.test(a))return"print"};var R=this;function S(a,b,c,d){var f="";if(!d){c=s(a.media);d=0}if(c=="all"||c==R.media){if(d<3){for(var g=0;g<a.imports.length;g++){f+=S(a.imports[g],by(a.href,b),c,d+1)}}f+=cS(a.href?cy(a,b):h.pop()||"");f=u(f,R.media)}return f};var bw={};function cy(a,b){var c=bc(a.href,b);if(bw[c])return"";bw[c]=(a.disabled)?"":cA(IE7.CSS.getText(a,b),by(a.href,b));return bw[c]};var cz=/(url\s*\(\s*['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function cA(a,b){return a.replace(cz,"$1"+b.slice(0,b.lastIndexOf("/")+1)+"$2")};for(var T=0;T<z.length;T++){if(!z[T].disabled&&!z[T].ie7){this.cssText+=S(z[T])}}},load:function(){this.cssText="";this.getText();this.parse();this.cssText=bg(this.cssText);bd={}},parse:function(){this.cssText=IE7.CSS.parser.exec(this.cssText);var a=IE7.CSS.rules.length;var b=this.cssText.split(cm),c;var d,f,g,h;for(g=0;g<b.length;g++){c=b[g].split(cl);d=c[0].split(cn);f=c[1];for(h=0;h<d.length;h++){d[h]=f?this.createRule(d[h],f):""}b[g]=d.join("\n")}this.cssText=b.join("\n");this.rules=IE7.CSS.rules.slice(a)},recalc:function(){var a,b;for(b=0;(a=this.rules[b]);b++)a.recalc()},toString:function(){return"@media "+this.media+"{"+this.cssText+"}"}});var F;var o=IE7.Rule=B.extend({constructor:function(a,b){this.id=IE7.CSS.rules.length;this.className=o.PREFIX+this.id;a=a.match(co)||a||"*";this.selector=a[1]||a;this.selectorText=this.parse(this.selector)+(a[2]||"");this.cssText=b;this.MATCH=new RegExp("\\s"+this.className+"(\\s|$)","g");IE7.CSS.rules.push(this);this.init()},init:U,add:function(a){a.className+=" "+this.className},recalc:function(){var a=x(this.selector);for(var b=0;b<a.length;b++)this.add(a[b])},parse:function(a){var b=a.replace(o.CHILD," ").replace(o.COMPLEX,"");if(m<7)b=b.replace(o.MULTI,"");var c=L(b,o.TAGS).length-L(a,o.TAGS).length;var d=L(b,o.CLASSES).length-L(a,o.CLASSES).length+1;while(d>0&&o.CLASS.test(b)){b=b.replace(o.CLASS,"");d--}while(c>0&&o.TAG.test(b)){b=b.replace(o.TAG,"$1*");c--}b+="."+this.className;d=Math.min(d,2);c=Math.min(c,2);var f=-10*d-c;if(f>0){b=b+","+o.MAP[f]+" "+b}return b},remove:function(a){a.className=a.className.replace(this.MATCH,"$1")},toString:function(){return i("%1 {%2}",this.selectorText,this.cssText)}},{CHILD:/>/g,CLASS:/\.[\w-]+/,CLASSES:/[.:\[]/g,MULTI:/(\.[\w-]+)+/g,PREFIX:"ie7_class",TAG:/^\w+|([\s>+~])\w+/,TAGS:/^\w|[\s>+~]\w/g,MAP:{1:"html",2:"html body",10:".ie7_html",11:"html.ie7_html",12:"html.ie7_html body",20:".ie7_html .ie7_body",21:"html.ie7_html .ie7_body",22:"html.ie7_html body.ie7_body"}});var O=o.extend({constructor:function(a,b,c,d,f){this.attach=b||"*";this.dynamicPseudoClass=IE7.CSS.dynamicPseudoClasses[c];this.target=d;this.base(a,f)},recalc:function(){var a=x(this.attach),b;for(var c=0;b=a[c];c++){var d=this.target?x(this.target,b):[b];if(d.length)this.dynamicPseudoClass.apply(b,d,this)}}});var A=B.extend({constructor:function(a,b){this.name=a;this.apply=b;this.instances={};IE7.CSS.dynamicPseudoClasses[a]=this},register:function(a){var b=a[2];a.id=b.id+a[0].uniqueID;if(!this.instances[a.id]){var c=a[1],d;for(d=0;d<c.length;d++)b.add(c[d]);this.instances[a.id]=a}},unregister:function(a){if(this.instances[a.id]){var b=a[2];var c=a[1],d;for(d=0;d<c.length;d++)b.remove(c[d]);delete this.instances[a.id]}}});if(m<7){var Z=new A("hover",function(a){var b=arguments;IE7.CSS.addEventHandler(a,m<5.5?"onmouseover":"onmouseenter",function(){Z.register(b)});IE7.CSS.addEventHandler(a,m<5.5?"onmouseout":"onmouseleave",function(){Z.unregister(b)})});v(document,"onmouseup",function(){var a=Z.instances;for(var b in a)if(!a[b][0].contains(event.srcElement))Z.unregister(a[b])})}IE7.CSS.addRecalc("[\\w-]+","inherit",function(c,d){var f=d.match(/[\w-]+\s*:\s*inherit/g);for(var g=0;g<f.length;g++){var h=f[g].replace(/ie7\-|\s*:\s*inherit/g,"").replace(/\-([a-z])/g,function(a,b){return b.toUpperCase()});c.runtimeStyle[h]=c.parentElement.currentStyle[h]}});IE7.HTML=new(bZ.extend({fixed:{},init:U,addFix:function(){this.fixes.push(arguments)},apply:function(){for(var a=0;a<this.fixes.length;a++){var b=x(this.fixes[a][0]);var c=this.fixes[a][1];for(var d=0;d<b.length;d++)c(b[d])}},addRecalc:function(){this.recalcs.push(arguments)},recalc:function(){for(var a=0;a<this.recalcs.length;a++){var b=x(this.recalcs[a][0]);var c=this.recalcs[a][1],d;var f=Math.pow(2,a);for(var g=0;(d=b[g]);g++){var h=d.uniqueID;if((this.fixed[h]&f)==0){d=c(d)||d;this.fixed[h]|=f}}}}}));if(m<7){document.createElement("abbr");IE7.HTML.addRecalc("label",function(a){if(!a.htmlFor){var b=x("input,textarea",a,true);if(b){v(a,"onclick",function(){b.click()})}}})}var P="[.\\d]";new function(_){var layout=IE7.Layout=this;J+="*{boxSizing:content-box}";IE7.hasLayout=m<5.5?function(a){return a.clientWidth}:function(a){return a.currentStyle.hasLayout};layout.boxSizing=function(a){if(!IE7.hasLayout(a)){a.style.height="0cm";if(a.currentStyle.verticalAlign=="auto")a.runtimeStyle.verticalAlign="top";collapseMargins(a)}};function collapseMargins(a){if(a!=t&&a.currentStyle.position!="absolute"){collapseMargin(a,"marginTop");collapseMargin(a,"marginBottom")}};function collapseMargin(a,b){if(!a.runtimeStyle[b]){var c=a.parentElement;if(c&&IE7.hasLayout(c)&&!IE7[b=="marginTop"?"_4":"_3"](a))return;var d=x(">*:"+(b=="marginTop"?"first":"last")+"-child",a,true);if(d&&d.currentStyle.styleFloat=="none"&&IE7.hasLayout(d)){collapseMargin(d,b);margin=_b(a,a.currentStyle[b]);childMargin=_b(d,d.currentStyle[b]);if(margin<0||childMargin<0){a.runtimeStyle[b]=margin+childMargin}else{a.runtimeStyle[b]=Math.max(childMargin,margin)}d.runtimeStyle[b]="0px"}}};function _b(a,b){return b=="auto"?0:D(a,b)};var UNIT=/^[.\d][\w%]*$/,AUTO=/^(auto|0cm)$/;var applyWidth,applyHeight;IE7.Layout.borderBox=function(a){applyWidth(a);applyHeight(a)};var fixWidth=function(g){applyWidth=function(a){if(!M.test(a.currentStyle.width))h(a);collapseMargins(a)};function h(a,b){if(!a.runtimeStyle.fixedWidth){if(!b)b=a.currentStyle.width;a.runtimeStyle.fixedWidth=(UNIT.test(b))?Math.max(0,r(a,b)):b;N(a,"width",a.runtimeStyle.fixedWidth)}};function j(a){if(!bh(a)){var b=a.offsetParent;while(b&&!IE7.hasLayout(b))b=b.offsetParent}return(b||t).clientWidth};function q(a,b){if(M.test(b))return parseInt(parseFloat(b)/100*j(a));return D(a,b)};var r=function(a,b){var c=a.currentStyle["box-sizing"]=="border-box";var d=0;if(G&&!c)d+=k(a)+u(a,"padding");else if(!G&&c)d-=k(a)+u(a,"padding");return q(a,b)+d};function k(a){return a.offsetWidth-a.clientWidth};function u(a,b){return q(a,a.currentStyle[b+"Left"])+q(a,a.currentStyle[b+"Right"])};J+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";layout.minWidth=function(a){if(a.currentStyle["min-width"]!=null){a.style.minWidth=a.currentStyle["min-width"]}if(X(arguments.callee,a,a.currentStyle.minWidth!="none")){layout.boxSizing(a);h(a);n(a)}};eval("IE7.Layout.maxWidth="+String(layout.minWidth).replace(/min/g,"max"));function n(a){var b=a.getBoundingClientRect();var c=b.right-b.left;if(a.currentStyle.minWidth!="none"&&c<=r(a,a.currentStyle.minWidth)){a.runtimeStyle.width=a.currentStyle.minWidth}else if(a.currentStyle.maxWidth!="none"&&c>=r(a,a.currentStyle.maxWidth)){a.runtimeStyle.width=a.currentStyle.maxWidth}else{a.runtimeStyle.width=a.runtimeStyle.fixedWidth}};function s(a){if(X(s,a,/^(fixed|absolute)$/.test(a.currentStyle.position)&&bF(a,"left")!="auto"&&bF(a,"right")!="auto"&&AUTO.test(bF(a,"width")))){R(a);IE7.Layout.boxSizing(a)}};IE7.Layout.fixRight=s;function R(a){var b=q(a,a.runtimeStyle._c||a.currentStyle.left);var c=j(a)-q(a,a.currentStyle.right)-b-u(a,"margin");if(parseInt(a.runtimeStyle.width)==c)return;a.runtimeStyle.width="";if(bh(a)||g||a.offsetWidth<c){if(!G)c-=k(a)+u(a,"padding");if(c<0)c=0;a.runtimeStyle.fixedWidth=c;N(a,"width",c)}};var S=0;bC(function(){if(!t)return;var a,b=(S<t.clientWidth);S=t.clientWidth;var c=layout.minWidth.elements;for(a in c){var d=c[a];var f=(parseInt(d.runtimeStyle.width)==r(d,d.currentStyle.minWidth));if(b&&f)d.runtimeStyle.width="";if(b==f)n(d)}var c=layout.maxWidth.elements;for(a in c){var d=c[a];var f=(parseInt(d.runtimeStyle.width)==r(d,d.currentStyle.maxWidth));if(!b&&f)d.runtimeStyle.width="";if(b!=f)n(d)}for(a in s.elements)R(s.elements[a])});if(G){IE7.CSS.addRecalc("width",P,applyWidth)}if(m<7){IE7.CSS.addRecalc("min-width",P,layout.minWidth);IE7.CSS.addRecalc("max-width",P,layout.maxWidth);IE7.CSS.addRecalc("right",P,s)}};eval("var fixHeight="+C(fixWidth));fixWidth();fixHeight(true)};var bk=bc("blank.gif",cC);var bl="DXImageTransform.Microsoft.AlphaImageLoader";var bK="progid:"+bl+"(src='%1',sizingMethod='%2')";var bm;var Q=[];function bL(a){if(bm.test(a.src)){var b=new Image(a.width,a.height);b.onload=function(){a.width=b.width;a.height=b.height;b=null};b.src=a.src;a.pngSrc=a.src;bo(a)}};if(m>=5.5&&m<7){IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/,function(a,b,c,d,f){d=bB(d);return bm.test(d)?"filter:"+i(bK,d,"crop")+";zoom:1;background"+(b||"")+":"+(c||"")+"none"+(f||""):a});IE7.HTML.addRecalc("img,input",function(a){if(a.tagName=="INPUT"&&a.type!="image")return;bL(a);v(a,"onpropertychange",function(){if(!bn&&event.propertyName=="src"&&a.src.indexOf(bk)==-1)bL(a)})});var bn=false;v(window,"onbeforeprint",function(){bn=true;for(var a=0;a<Q.length;a++)cp(Q[a])});v(window,"onafterprint",function(){for(var a=0;a<Q.length;a++)bo(Q[a]);bn=false})}function bo(a,b){var c=a.filters[bl];if(c){c.src=a.src;c.enabled=true}else{a.runtimeStyle.filter=i(bK,a.src,b||"scale");Q.push(a)}a.src=bk};function cp(a){a.src=a.pngSrc;a.filters[bl].enabled=false};new function(_){if(m>=7)return;IE7.CSS.addRecalc("position","fixed",_8,"absolute");IE7.CSS.addRecalc("background(-attachment)?","[^};]*fixed",_5);var $viewport=G?"body":"documentElement";function _6(){if(w.currentStyle.backgroundAttachment!="fixed"){if(w.currentStyle.backgroundImage=="none"){w.runtimeStyle.backgroundRepeat="no-repeat";w.runtimeStyle.backgroundImage="url("+bk+")"}w.runtimeStyle.backgroundAttachment="fixed"}_6=U};var _0=ca("img");function _2(a){return a?bh(a)||_2(a.parentElement):false};function _d(a,b,c){setTimeout("document.all."+a.uniqueID+".runtimeStyle.setExpression('"+b+"','"+c+"')",0)};function _5(a){if(X(_5,a,a.currentStyle.backgroundAttachment=="fixed"&&!a.contains(w))){_6();bgLeft(a);bgTop(a);_a(a)}};function _a(a){_0.src=a.currentStyle.backgroundImage.slice(5,-2);var b=a.canHaveChildren?a:a.parentElement;b.appendChild(_0);setOffsetLeft(a);setOffsetTop(a);b.removeChild(_0)};function bgLeft(a){a.style.backgroundPositionX=a.currentStyle.backgroundPositionX;if(!_2(a)){_d(a,"backgroundPositionX","(parseInt(runtimeStyle.offsetLeft)+document."+$viewport+".scrollLeft)||0")}};eval(C(bgLeft));function setOffsetLeft(a){var b=_2(a)?"backgroundPositionX":"offsetLeft";a.runtimeStyle[b]=getOffsetLeft(a,a.style.backgroundPositionX)-a.getBoundingClientRect().left-a.clientLeft+2};eval(C(setOffsetLeft));function getOffsetLeft(a,b){switch(b){case"left":case"top":return 0;case"right":case"bottom":return t.clientWidth-_0.offsetWidth;case"center":return(t.clientWidth-_0.offsetWidth)/2;default:if(M.test(b)){return parseInt((t.clientWidth-_0.offsetWidth)*parseFloat(b)/100)}_0.style.left=b;return _0.offsetLeft}};eval(C(getOffsetLeft));function _8(a){if(X(_8,a,bh(a))){N(a,"position","absolute");N(a,"left",a.currentStyle.left);N(a,"top",a.currentStyle.top);_6();IE7.Layout.fixRight(a);_7(a)}};function _7(a,b){positionTop(a,b);positionLeft(a,b,true);if(!a.runtimeStyle.autoLeft&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.right!="auto"){var c=t.clientWidth-getPixelWidth(a,a.currentStyle.right)-getPixelWidth(a,a.runtimeStyle._c)-a.clientWidth;if(a.currentStyle.marginRight=="auto")c=parseInt(c/2);if(_2(a.offsetParent))a.runtimeStyle.pixelLeft+=c;else a.runtimeStyle.shiftLeft=c}clipWidth(a);clipHeight(a)};function clipWidth(a){var b=a.runtimeStyle.fixWidth;a.runtimeStyle.borderRightWidth="";a.runtimeStyle.width=b?getPixelWidth(a,b):"";if(a.currentStyle.width!="auto"){var c=a.getBoundingClientRect();var d=a.offsetWidth-t.clientWidth+c.left-2;if(d>=0){a.runtimeStyle.borderRightWidth="0px";d=Math.max(D(a,a.currentStyle.width)-d,0);N(a,"width",d);return d}}};eval(C(clipWidth));function positionLeft(a,b){if(!b&&M.test(a.currentStyle.width)){a.runtimeStyle.fixWidth=a.currentStyle.width}if(a.runtimeStyle.fixWidth){a.runtimeStyle.width=getPixelWidth(a,a.runtimeStyle.fixWidth)}a.runtimeStyle.shiftLeft=0;a.runtimeStyle._c=a.currentStyle.left;a.runtimeStyle.autoLeft=a.currentStyle.right!="auto"&&a.currentStyle.left=="auto";a.runtimeStyle.left="";a.runtimeStyle.screenLeft=getScreenLeft(a);a.runtimeStyle.pixelLeft=a.runtimeStyle.screenLeft;if(!b&&!_2(a.offsetParent)){_d(a,"pixelLeft","runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+$viewport+".scrollLeft")}};eval(C(positionLeft));function getScreenLeft(a){var b=a.offsetLeft,c=1;if(a.runtimeStyle.autoLeft){b=t.clientWidth-a.offsetWidth-getPixelWidth(a,a.currentStyle.right)}if(a.currentStyle.marginLeft!="auto"){b-=getPixelWidth(a,a.currentStyle.marginLeft)}while(a=a.offsetParent){if(a.currentStyle.position!="static")c=-1;b+=a.offsetLeft*c}return b};eval(C(getScreenLeft));function getPixelWidth(a,b){return M.test(b)?parseInt(parseFloat(b)/100*t.clientWidth):D(a,b)};eval(C(getPixelWidth));function _j(){var a=_5.elements;for(var b in a)_a(a[b]);a=_8.elements;for(b in a){_7(a[b],true);_7(a[b],true)}_9=0};var _9;bC(function(){if(!_9)_9=setTimeout(_j,0)})};var bp={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};IE7.CSS.addRecalc("overflow","visible",function(a){if(a.parentNode.ie7_wrapped)return;if(IE7.Layout&&a.currentStyle["max-height"]!="auto"){IE7.Layout.maxHeight(a)}if(a.currentStyle.marginLeft=="auto")a.style.marginLeft=0;if(a.currentStyle.marginRight=="auto")a.style.marginRight=0;var b=document.createElement(bN);b.ie7_wrapped=a;for(var c in bp){b.style[c]=a.currentStyle[c];if(bp[c]!=null){a.runtimeStyle[c]=bp[c]}}b.style.display="block";b.style.position="relative";a.runtimeStyle.position="absolute";a.parentNode.insertBefore(b,a);b.appendChild(a)});function cq(){var f="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var g=0;g<f.length;g++){f[f[g]]=f[g-1]||"0.67em"}IE7.CSS.addFix(/(font(-size)?\s*:\s*)([\w.-]+)/,function(a,b,c,d){return b+(f[d]||d)});if(m<6){var h=/^\-/,j=/(em|ex)$/i;var q=/em$/i,r=/ex$/i;D=function(a,b){if(bY.test(b))return parseInt(b)||0;var c=h.test(b)?-1:1;if(j.test(b))c*=u(a);k.style.width=(c<0)?b.slice(1):b;w.appendChild(k);b=c*k.offsetWidth;k.removeNode();return parseInt(b)};var k=ca();function u(a){var b=1;k.style.fontFamily=a.currentStyle.fontFamily;k.style.lineHeight=a.currentStyle.lineHeight;while(a!=w){var c=a.currentStyle["ie7-font-size"];if(c){if(q.test(c))b*=parseFloat(c);else if(M.test(c))b*=(parseFloat(c)/100);else if(r.test(c))b*=(parseFloat(c)/2);else{k.style.fontSize=c;return 1}}a=a.parentElement}return b};IE7.CSS.addFix(/cursor\s*:\s*pointer/,"cursor:hand");IE7.CSS.addFix(/display\s*:\s*list-item/,"display:block")}function n(a){if(m<5.5)IE7.Layout.boxSizing(a.parentElement);var b=a.parentElement;var c=b.offsetWidth-a.offsetWidth-s(b);var d=(a.currentStyle["ie7-margin"]&&a.currentStyle.marginRight=="auto")||a.currentStyle["ie7-margin-right"]=="auto";switch(b.currentStyle.textAlign){case"right":c=d?parseInt(c/2):0;a.runtimeStyle.marginRight=c+"px";break;case"center":if(d)c=0;default:if(d)c/=2;a.runtimeStyle.marginLeft=parseInt(c)+"px"}};function s(a){return D(a,a.currentStyle.paddingLeft)+D(a,a.currentStyle.paddingRight)};IE7.CSS.addRecalc("margin(-left|-right)?","[^};]*auto",function(a){if(X(n,a,a.parentElement&&a.currentStyle.display=="block"&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.position!="absolute")){n(a)}});bC(function(){for(var a in n.elements){var b=n.elements[a];b.runtimeStyle.marginLeft=b.runtimeStyle.marginRight="";n(b)}})};IE7._g=function(a){a=a.firstChild;while(a){if(a.nodeType==3||(a.nodeType==1&&a.nodeName!="!"))return false;a=a.nextSibling}return true};IE7._h=function(a,b){while(a&&!a.getAttribute("lang"))a=a.parentNode;return a&&new RegExp("^"+W(b),"i").test(a.getAttribute("lang"))};function cr(a,b,c,d){d=/last/i.test(a)?d+"+1-":"";if(!isNaN(b))b="0n+"+b;else if(b=="even")b="2n";else if(b=="odd")b="2n+1";b=b.split("n");var f=b[0]?(b[0]=="-")?-1:parseInt(b[0]):1;var g=parseInt(b[1])||0;var h=f<0;if(h){f=-f;if(f==1)g++}var j=i(f==0?"%3%7"+(d+g):"(%4%3-%2)%6%1%70%5%4%3>=%2",f,g,c,d,"&&","%","==");if(h)j="!("+j+")";return j};bH={"link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'","checked":"e%1.checked","contains":"e%1.innerText.indexOf('%2')!=-1","disabled":"e%1.isDisabled","empty":"IE7._g(e%1)","enabled":"e%1.disabled===false","first-child":"!IE7._4(e%1)","lang":"IE7._h(e%1,'%2')","last-child":"!IE7._3(e%1)","only-child":"!IE7._4(e%1)&&!IE7._3(e%1)","target":"e%1.id==location.hash.slice(1)","indeterminate":"e%1.indeterminate"};IE7._i=function(a){if(a.rows){a.ie7_length=a.rows.length;a.ie7_lookup="rowIndex"}else if(a.cells){a.ie7_length=a.cells.length;a.ie7_lookup="cellIndex"}else if(a.ie7_indexed!=IE7._1){var b=0;var c=a.firstChild;while(c){if(c.nodeType==1&&c.nodeName!="!"){c.ie7_index=++b}c=c.nextSibling}a.ie7_length=b;a.ie7_lookup="ie7_index"}a.ie7_indexed=IE7._1;return a};var ba=E[V];var cs=ba[ba.length-1];ba.length--;E.merge({":not\\((\\*|[\\w-]+)?([^)]*)\\)":function(a,b,c){var d=(b&&b!="*")?i("if(e%1.nodeName=='%2'){",l,b.toUpperCase()):"";d+=E.exec(c);return"if(!"+d.slice(2,-1).replace(/\)\{if\(/g,"&&")+"){"},":nth(-last)?-child\\(([^)]+)\\)":function(a,b,c){p=false;b=i("e%1.parentNode.ie7_length",l);var d="if(p%1!==e%1.parentNode)p%1=IE7._i(e%1.parentNode);";d+="var i=e%1[p%1.ie7_lookup];if(p%1.ie7_lookup!='ie7_index')i++;if(";return i(d,l)+cr(a,c,"i",b)+"){"}});ba.push(cs);var bM="\\([^)]*\\)";if(IE7.CSS.pseudoClasses)IE7.CSS.pseudoClasses+="|";IE7.CSS.pseudoClasses+="before|after|last\\-child|only\\-child|empty|root|"+"not|nth\\-child|nth\\-last\\-child|contains|lang".split("|").join(bM+"|")+bM;bV.add(/::/,":");var bb=new A("focus",function(a){var b=arguments;IE7.CSS.addEventHandler(a,"onfocus",function(){bb.unregister(b);bb.register(b)});IE7.CSS.addEventHandler(a,"onblur",function(){bb.unregister(b)});if(a==document.activeElement){bb.register(b)}});var bq=new A("active",function(a){var b=arguments;IE7.CSS.addEventHandler(a,"onmousedown",function(){bq.register(b)})});v(document,"onmouseup",function(){var a=bq.instances;for(var b in a)bq.unregister(a[b])});var br=new A("checked",function(a){if(typeof a.checked!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="checked"){if(a.checked)br.register(b);else br.unregister(b)}});if(a.checked)br.register(b)});var bs=new A("enabled",function(a){if(typeof a.disabled!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="disabled"){if(!a.isDisabled)bs.register(b);else bs.unregister(b)}});if(!a.isDisabled)bs.register(b)});var bt=new A("disabled",function(a){if(typeof a.disabled!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="disabled"){if(a.isDisabled)bt.register(b);else bt.unregister(b)}});if(a.isDisabled)bt.register(b)});var bu=new A("indeterminate",function(a){if(typeof a.indeterminate!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="indeterminate"){if(a.indeterminate)bu.register(b);else bu.unregister(b)}});IE7.CSS.addEventHandler(a,"onclick",function(){bu.unregister(b)})});var bv=new A("target",function(a){var b=arguments;if(!a.tabIndex)a.tabIndex=0;IE7.CSS.addEventHandler(document,"onpropertychange",function(){if(event.propertyName=="activeElement"){if(a.id&&a.id==location.hash.slice(1))bv.register(b);else bv.unregister(b)}});if(a.id&&a.id==location.hash.slice(1))bv.register(b)});var ct=/^attr/;var cu=/^url\s*\(\s*([^)]*)\)$/;var cv={before0:"beforeBegin",before1:"afterBegin",after0:"afterEnd",after1:"beforeEnd"};var F=IE7.PseudoElement=o.extend({constructor:function(a,b,c){this.position=b;var d=c.match(F.CONTENT),f,g;if(d){d=d[1];f=d.split(/\s+/);for(var h=0;(g=f[h]);h++){f[h]=ct.test(g)?{attr:g.slice(5,-1)}:(g.charAt(0)=="'")?bB(g):bg(g)}d=f}this.content=d;this.base(a,bg(c))},init:function(){this.match=x(this.selector);for(var a=0;a<this.match.length;a++){var b=this.match[a].runtimeStyle;if(!b[this.position])b[this.position]={cssText:""};b[this.position].cssText+=";"+this.cssText;if(this.content!=null)b[this.position].content=this.content}},create:function(a){var b=a.runtimeStyle[this.position];if(b){var c=[].concat(b.content||"");for(var d=0;d<c.length;d++){if(typeof c[d]=="object"){c[d]=a.getAttribute(c[d].attr)}}c=c.join("");var f=c.match(cu);var g="overflow:hidden;"+b.cssText.replace(/'/g,'"');if(a.currentStyle.styleFloat!="none"){}var h=cv[this.position+Number(a.canHaveChildren)];var j='ie7_pseudo'+F.count++;a.insertAdjacentHTML(h,i(F.ANON,this.className,j,g,f?"":c));if(f){var q=document.getElementById(j);q.src=bB(f[1]);bo(q,"crop")}a.runtimeStyle[this.position]=null}},recalc:function(){if(this.content==null)return;for(var a=0;a<this.match.length;a++){this.create(this.match[a])}},toString:function(){return"."+this.className+"{display:inline}"}},{CONTENT:/content\s*:\s*([^;]*)(;|$)/,ANON:"<ie7:! class='ie7_anon %1' id=%2 style='%3'>%4</ie7:!>",MATCH:/(.*):(before|after).*/,count:0});var cw=/^(submit|reset|button)$/;IE7.HTML.addRecalc("button,input",function(a){if(a.tagName=="BUTTON"){var b=a.outerHTML.match(/ value="([^"]*)"/i);a.runtimeStyle.value=(b)?b[1]:""}if(a.type=="submit"){v(a,"onclick",function(){a.runtimeStyle.clicked=true;setTimeout("document.all."+a.uniqueID+".runtimeStyle.clicked=false",1)})}});IE7.HTML.addRecalc("form",function(c){v(c,"onsubmit",function(){for(var a,b=0;a=c[b];b++){if(cw.test(a.type)&&!a.disabled&&!a.runtimeStyle.clicked){a.disabled=true;setTimeout("document.all."+a.uniqueID+".disabled=false",1)}else if(a.tagName=="BUTTON"&&a.type=="submit"){setTimeout("document.all."+a.uniqueID+".value='"+a.value+"'",1);a.value=a.runtimeStyle.value}}})});IE7.HTML.addRecalc("img",function(a){if(a.alt&&!a.title)a.title=""});IE7.CSS.addRecalc("border-spacing",P,function(a){if(a.currentStyle.borderCollapse!="collapse"){a.cellSpacing=D(a,a.currentStyle["border-spacing"])}});IE7.CSS.addRecalc("box-sizing","content-box",IE7.Layout.boxSizing);IE7.CSS.addRecalc("box-sizing","border-box",IE7.Layout.borderBox);IE7.CSS.addFix(/opacity\s*:\s*([\d.]+)/,function(a,b){return"zoom:1;filter:Alpha(opacity="+((b*100)||1)+")"});var cx=/^image/i;IE7.HTML.addRecalc("object",function(a){if(cx.test(a.type)){a.body.style.cssText="margin:0;padding:0;border:none;overflow:hidden";return a}});IE7.loaded=true;(function(){try{bx.doScroll("left")}catch(e){setTimeout(arguments.callee,1);return}try{eval(bO.innerHTML)}catch(e){}bm=new RegExp(W(typeof IE7_PNG_SUFFIX=="string"?IE7_PNG_SUFFIX:"-trans.png")+"$","i");w=document.body;t=G?w:bx;w.className+=" ie7_body";bx.className+=" ie7_html";if(G)cq();IE7.CSS.init();IE7.HTML.init();IE7.HTML.apply();IE7.CSS.apply();IE7.recalc()})()})(); \ No newline at end of file
diff --git a/rt/share/html/NoAuth/js/IE7/blank.gif b/rt/share/html/NoAuth/js/IE7/blank.gif
new file mode 100644
index 0000000..a4fe2e6
--- /dev/null
+++ b/rt/share/html/NoAuth/js/IE7/blank.gif
Binary files differ
diff --git a/rt/share/html/NoAuth/js/IE7/ie7-recalc.js b/rt/share/html/NoAuth/js/IE7/ie7-recalc.js
new file mode 100644
index 0000000..f07c5a6
--- /dev/null
+++ b/rt/share/html/NoAuth/js/IE7/ie7-recalc.js
@@ -0,0 +1,2 @@
+/* IE7/IE8.js - copyright 2004-2008, Dean Edwards */
+(function(){if(!IE7.loaded)return;CLASSES=/\sie7_class\d+/g;IE7.CSS.extend({elements:{},handlers:[],reset:function(){this.removeEventHandlers();var a=this.elements;for(var b in a)a[b].runtimeStyle.cssText="";this.elements={};var a=IE7.Rule.elements;for(var b in a){with(a[b])className=className.replace(CLASSES,"")}IE7.Rule.elements={}},reload:function(){this.rules=[];this.getInlineStyles();this.screen.load();if(this.print)this.print.load();this.refresh();this.trash()},addRecalc:function(b,c,d,e){this.base(b,c,function(a){d(a);IE7.CSS.elements[a.uniqueID]=a},e)},recalc:function(){this.reset();this.base()},addEventHandler:function(a,b,c){a.attachEvent(b,c);this.handlers.push(arguments)},removeEventHandlers:function(){var a;while(a=this.handlers.pop()){a[0].detachEvent(a[1],a[2])}},getInlineStyles:function(){var a=document.getElementsByTagName("style"),b;for(var c=a.length-1;(b=a[c]);c--){if(!b.disabled&&!b.ie7){var d=b.cssText||b.innerHTML;this.styles.push(d);b.cssText=d}}},trash:function(){var a=document.styleSheets,b,c;for(c=0;c<a.length;c++){b=a[c];if(!b.ie7&&!b.cssText){b.cssText=b.cssText}}this.base()},getText:function(a){return a.cssText||this.base(a)}});IE7.CSS.addEventHandler(window,"onunload",function(){IE7.CSS.removeEventHandlers()});IE7.Rule.elements={};IE7.Rule.prototype.extend({add:function(a){this.base(a);IE7.Rule.elements[a.uniqueID]=a}});if(IE7.PseudoElement){IE7.PseudoElement.hash={};IE7.PseudoElement.prototype.extend({create:function(a){var b=this.selector+":"+a.uniqueID;if(!IE7.PseudoElement.hash[b]){IE7.PseudoElement.hash[b]=true;this.base(a)}}})}IE7.HTML.extend({elements:{},addRecalc:function(b,c){this.base(b,function(a){if(!this.elements[a.uniqueID]){c(a);this.elements[a.uniqueID]=a}})}});document.recalc=function(a){if(IE7.CSS.screen){if(a)IE7.CSS.reload();IE7.recalc()}}})(); \ No newline at end of file
diff --git a/rt/share/html/NoAuth/js/IE7/ie7-squish.js b/rt/share/html/NoAuth/js/IE7/ie7-squish.js
new file mode 100644
index 0000000..71128f5
--- /dev/null
+++ b/rt/share/html/NoAuth/js/IE7/ie7-squish.js
@@ -0,0 +1,36 @@
+/* IE7/IE8.js - copyright 2004-2008, Dean Edwards */
+/* ---------------------------------------------------------------------
+
+ Squish some IE bugs!
+
+ Some of these bug fixes may have adverse effects so they are
+ not included in the standard library. Add your own if you want.
+
+--------------------------------------------------------------------- */
+
+// @NOTE: ie7Layout.boxSizing is the same as the "Holly Hack"
+
+if (IE7.loaded && IE7.appVersion < 7) {
+
+ // "doubled margin" bug
+ // http://www.positioniseverything.net/explorer/doubled-margin.html
+ IE7.CSS.addFix(/(float\s*:\s*(left|right))/, "display:inline;$1");
+
+ // "peekaboo" bug
+ // http://www.positioniseverything.net/explorer/peekaboo.html
+ if (IE7.appVersion >= 6) IE7.CSS.addRecalc("float", "(left|right)", function(element) {
+ IE7.Layout.boxSizing(element.parentElement); // assing "hasLayout" to parent element
+ // "doubled margin" bug
+ element.style.display = "inline";
+ });
+
+ // "unscrollable content" bug
+ // http://www.positioniseverything.net/explorer/unscrollable.html
+ IE7.CSS.addRecalc("position", "absolute|fixed", function(element) {
+ if (element.offsetParent && element.offsetParent.currentStyle.position == "relative")
+ IE7.Layout.boxSizing(element.offsetParent); // assing "hasLayout"
+ });
+}
+
+//# // get rid of Microsoft's pesky image toolbar
+//# document.write('<meta http-equiv="imagetoolbar" content="no">');
diff --git a/rt/share/html/NoAuth/js/ahah.js b/rt/share/html/NoAuth/js/ahah.js
new file mode 100644
index 0000000..b10b271
--- /dev/null
+++ b/rt/share/html/NoAuth/js/ahah.js
@@ -0,0 +1,48 @@
+/*
+% $r->content_type('application/x-javascript');
+*/
+// Fetched from http://www.opendarwin.org/~drernie/src/ahah.js - No Copyright - Public Domain
+function ahah(url, target, delay) {
+ // document.getElementById(target).innerHTML = 'Loading <a href="'+url+'">'+url +'</a>...';
+ if (window.XMLHttpRequest) {
+ req = new XMLHttpRequest();
+ } else if (window.ActiveXObject) {
+ req = new ActiveXObject("Microsoft.XMLHTTP");
+ }
+
+ var use_get;
+ if ( /webkit|firefox\/2/i.test( navigator.userAgent ) ) {
+ // seems safari has weird problem with post:
+ // it does remove the old content of target
+ // while doesn't replace that with new content
+ // so is firefox 2
+ use_get = 1;
+ }
+
+ if (req != undefined) {
+ req.onreadystatechange = function() {ahahDone(url, target, delay);};
+ if ( use_get == 1 ) {
+ req.open("GET", url, true);
+ }
+ else{
+ req.open("POST", url, true);
+ }
+ req.send("");
+ }
+}
+
+function ahahDone(url, target, delay) {
+ if (req.readyState == 4) { // only if req is "loaded"
+ if (req.status == 200) { // only if "OK"
+ document.getElementById(target).innerHTML = req.responseText;
+ } else {
+ document.getElementById(target).innerHTML="Error loading '"+url+"':\n"+req.statusText;
+ }
+ if (delay != undefined) {
+ setTimeout("ahah(url,target,delay)", delay); // resubmit after delay
+ //server should ALSO delay before responding
+ }
+ }
+}
+
+% $m->abort();
diff --git a/rt/share/html/NoAuth/js/autohandler b/rt/share/html/NoAuth/js/autohandler
new file mode 100644
index 0000000..74028f8
--- /dev/null
+++ b/rt/share/html/NoAuth/js/autohandler
@@ -0,0 +1,61 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+
+my $type;
+my $file = $m->base_comp->source_file;
+
+if ($file =~ /\.(gif|png|jpe?g)$/i) {
+ RT::Interface::Web->SendStaticFile( File => $file );
+} else {
+ &RT::Interface::Web::StaticFileHeaders();
+ $r->content_type('application/x-javascript');
+ $m->call_next();
+ return();
+}
+</%init>
diff --git a/rt/share/html/NoAuth/js/cascaded.js b/rt/share/html/NoAuth/js/cascaded.js
new file mode 100644
index 0000000..e980b29
--- /dev/null
+++ b/rt/share/html/NoAuth/js/cascaded.js
@@ -0,0 +1,102 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+function filter_cascade (id, val) {
+ var select = document.getElementById(id);
+ var complete_select = document.getElementById(id + "-Complete" );
+
+ if (!select) { return };
+ var i;
+ var children = select.childNodes;
+
+ if ( complete_select ) {
+ while (select.hasChildNodes()){
+ select.removeChild(select.firstChild);
+ }
+
+ var complete_children = complete_select.childNodes;
+
+ if ( val == '' && arguments.length == 3 ) {
+ // no category, and the category is from a hierchical cf;
+ // leave this set of options empty
+ } else if ( val == '' ) {
+ // no category, let's clone all node
+ for (i in complete_children) {
+ if ( complete_children[i].cloneNode ) {
+ new_option = complete_children[i].cloneNode(true);
+ select.appendChild(new_option);
+ }
+ }
+ }
+ else {
+ for (i in complete_children) {
+ if (!complete_children[i].label ||
+ complete_children[i].label.substr(0, val.length) == val ) {
+ if ( complete_children[i].cloneNode ) {
+ new_option = complete_children[i].cloneNode(true);
+ select.appendChild(new_option);
+ }
+ }
+ }
+ }
+ }
+ else {
+// for back compatibility
+ for (i in children) {
+ if (!children[i].label) { continue };
+ if ( val == '' && arguments.length == 3 ) {
+ hide(children[i]);
+ continue;
+ }
+ if ( val == '' || children[i].label.substr(0, val.length) == val) {
+ show(children[i]);
+ continue;
+ }
+ hide(children[i]);
+ }
+ }
+}
diff --git a/rt/share/html/NoAuth/js/class.js b/rt/share/html/NoAuth/js/class.js
new file mode 100644
index 0000000..b823c69
--- /dev/null
+++ b/rt/share/html/NoAuth/js/class.js
@@ -0,0 +1,15 @@
+/* by TKirby, released under GPL */
+
+ function _ClassSetup(Object) {
+ this.prototype = Object;
+ return this;
+ }
+
+ function Class(name) {
+ var _newclass_;
+ eval("window."+name+" = new Function('this."+name+".apply(this,arguments);');");
+ eval("window."+name+".define = _ClassSetup;");
+ eval("_newclass_ = window."+name+";");
+ return _newclass_;
+ }
+
diff --git a/rt/share/html/NoAuth/js/combobox.js b/rt/share/html/NoAuth/js/combobox.js
new file mode 100644
index 0000000..cc0c032
--- /dev/null
+++ b/rt/share/html/NoAuth/js/combobox.js
@@ -0,0 +1,262 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+function ComboBox_InitWith(n) {
+ if ( typeof( window.addEventListener ) != "undefined" ) {
+ window.addEventListener("load", ComboBox_Init(n), false);
+ } else if ( typeof( window.attachEvent ) != "undefined" ) {
+ window.attachEvent("onload", ComboBox_Init(n));
+ } else {
+ ComboBox_Init(n)();
+ }
+}
+function ComboBox_Init(n) {
+ return function () {
+ if ( ComboBox_UplevelBrowser( n ) ) {
+ ComboBox_Load( n );
+ }
+ }
+}
+function ComboBox_UplevelBrowser( n ) {
+ if( typeof( document.getElementById ) == "undefined" ) return false;
+ var combo = document.getElementById( n + "_Container" );
+ if( combo == null || typeof( combo ) == "undefined" ) return false;
+ if( typeof( combo.style ) == "undefined" ) return false;
+ if( typeof( combo.innerHTML ) == "undefined" ) return false;
+ return true;
+}
+function ComboBox_Load( comboId ) {
+ var combo = document.getElementById( comboId + "_Container" );
+ var button = document.getElementById( comboId + "_Button" );
+ var list = document.getElementById( comboId + "_List" );
+ var text = document.getElementById( comboId );
+
+
+ combo.List = list;
+ combo.Button = button;
+ combo.Text = text;
+
+ button.Container = combo;
+ button.Toggle = ComboBox_ToggleList;
+ button.onclick = button.Toggle;
+ button.onmouseover = function(e) { this.Container.List.DisableBlur(e); };
+ button.onmouseout = function(e) { this.Container.List.EnableBlur(e); };
+ button.onselectstart = function(e){ return false; };
+ button.style.height = ( list.offsetHeight - 4 ) + "px";
+
+ text.Container = combo;
+ text.TypeDown = ComboBox_TextTypeDown;
+ text.KeyAccess = ComboBox_TextKeyAccess;
+ text.onkeyup = function(e) { this.KeyAccess(e); this.TypeDown(e); };
+
+ list.Container = combo;
+ list.Show = ComboBox_ShowList;
+ list.Hide = ComboBox_HideList;
+ list.EnableBlur = ComboBox_ListEnableBlur;
+ list.DisableBlur = ComboBox_ListDisableBlur;
+ list.Select = ComboBox_ListItemSelect;
+ list.ClearSelection = ComboBox_ListClearSelection;
+ list.KeyAccess = ComboBox_ListKeyAccess;
+ list.FireTextChange = ComboBox_ListFireTextChange;
+ list.onchange = null;
+ list.onclick = function(e){ this.Select(e); this.ClearSelection(); this.FireTextChange(); };
+ list.onkeyup = function(e) { this.KeyAccess(e); };
+ list.EnableBlur(null);
+ list.style.position = "absolute";
+ list.size = ComboBox_GetListSize( list );
+ list.IsShowing = true;
+ list.Hide();
+
+}
+function ComboBox_InitEvent( e ) {
+ if( typeof( e ) == "undefined" && typeof( window.event ) != "undefined" ) e = window.event;
+ if( e == null ) e = new Object();
+ return e;
+}
+function ComboBox_ListClearSelection() {
+ if ( typeof( this.Container.Text.createTextRange ) == "undefined" ) return;
+ var rNew = this.Container.Text.createTextRange();
+ rNew.moveStart('character', this.Container.Text.value.length) ;
+ rNew.select();
+}
+function ComboBox_GetListSize( theList ) {
+ ComboBox_EnsureListSize( theList );
+ return theList.listSize;
+}
+function ComboBox_EnsureListSize( theList ) {
+ if ( typeof( theList.listSize ) == "undefined" ) {
+ if( typeof( theList.getAttribute ) != "undefined" ) {
+ if( theList.getAttribute( "size" ) != null && theList.getAttribute( "size" ) != "" ) {
+ theList.listSize = theList.getAttribute( "size" );
+ return;
+ }
+ }
+ if( theList.options.length > 0 ) {
+ theList.listSize = theList.options.length;
+ return;
+ }
+ theList.listSize = 4;
+ }
+}
+function ComboBox_ListKeyAccess(e) { //Make enter/space and escape do the right thing :)
+ e = ComboBox_InitEvent( e );
+ if( e.keyCode == 13 || e.keyCode == 32 ) {
+ this.Select();
+ return;
+ }
+ if( e.keyCode == 27 ) {
+ this.Hide();
+ this.Container.Text.focus();
+ return;
+ }
+}
+function ComboBox_TextKeyAccess(e) { //Make alt+arrow expand the list
+ e = ComboBox_InitEvent( e );
+ if( e.altKey && (e.keyCode == 38 || e.keyCode == 40) ) {
+ this.Container.List.Show();
+ }
+}
+function ComboBox_TextTypeDown(e) { //Make the textbox do a type-down on the list
+ e = ComboBox_InitEvent( e );
+ var items = this.Container.List.options;
+ if( this.value == "" ) return;
+ var ctrlKeys = Array( 8, 46, 37, 38, 39, 40, 33, 34, 35, 36, 45, 16, 20 );
+ for( var i = 0; i < ctrlKeys.length; i++ ) {
+ if( e.keyCode == ctrlKeys[i] ) return;
+ }
+ for( var i = 0; i < items.length; i++ ) {
+ var item = items[i];
+ if( item.text.toLowerCase().indexOf( this.value.toLowerCase() ) == 0 ) {
+ this.Container.List.selectedIndex = i;
+ if ( typeof( this.Container.Text.createTextRange ) != "undefined" ) {
+ this.Container.List.Select();
+ }
+ break;
+ }
+ }
+}
+function ComboBox_ListFireTextChange() {
+ var textOnChange = this.Container.Text.onchange;
+ if ( textOnChange != null && typeof(textOnChange) == "function" ) {
+ textOnChange();
+ }
+}
+function ComboBox_ListEnableBlur(e) {
+ this.onblur = this.Hide;
+}
+function ComboBox_ListDisableBlur(e) {
+ this.onblur = null;
+}
+function ComboBox_ListItemSelect(e) {
+ if( this.options.length > 0 ) {
+ var text = this.Container.Text;
+ var oldValue = text.value;
+ var newValue = this.options[ this.selectedIndex ].text;
+ text.value = newValue;
+ if ( typeof( text.createTextRange ) != "undefined" ) {
+ if (newValue != oldValue) {
+ var rNew = text.createTextRange();
+ rNew.moveStart('character', oldValue.length) ;
+ rNew.select();
+ }
+ }
+ }
+ this.Hide();
+ this.Container.Text.focus();
+}
+function ComboBox_ToggleList(e) {
+ if( this.Container.List.IsShowing == true ) {
+ this.Container.List.Hide();
+ } else {
+ this.Container.List.Show();
+ }
+}
+function ComboBox_ShowList(e) {
+ if ( !this.IsShowing && !this.disabled ) {
+ this.style.top = '1.2em';//( this.Container.offsetHeight + ComboBox_RecursiveOffsetTop(this.Container,true) ) + "px";
+ this.style.left = '0px';// ( ComboBox_RecursiveOffsetLeft(this.Container,true) + 1 ) + "px";
+ ComboBox_SetVisibility(this,true);
+ this.focus();
+ this.IsShowing = true;
+ }
+}
+function ComboBox_HideList(e) {
+ if( this.IsShowing ) {
+ ComboBox_SetVisibility(this,false);
+ this.IsShowing = false;
+ }
+}
+function ComboBox_SetVisibility(theList, isVisible) {
+ setVisibility(theList, isVisible);
+}
+function ComboBox_RecursiveOffsetTop(thisObject,isFirst) {
+ if(thisObject.offsetParent) {
+ if ( thisObject.style.position == "absolute" && !isFirst && typeof(document.designMode) != "undefined" ) {
+ return 0;
+ }
+ return (thisObject.offsetTop + ComboBox_RecursiveOffsetTop(thisObject.offsetParent,false));
+ } else {
+ return thisObject.offsetTop;
+ }
+}
+function ComboBox_RecursiveOffsetLeft(thisObject,isFirst) {
+ if(thisObject.offsetParent) {
+ if ( thisObject.style.position == "absolute" && !isFirst && typeof(document.designMode) != "undefined" ) {
+ return 0;
+ }
+ return (thisObject.offsetLeft + ComboBox_RecursiveOffsetLeft(thisObject.offsetParent,false));
+ } else {
+ return thisObject.offsetLeft;
+ }
+}
+function ComboBox_SimpleAttach(selectElement,textElement) {
+ textElement.value = selectElement.options[ selectElement.options.selectedIndex ].text;
+ var textOnChange = textElement.onchange;
+ if ( textOnChange != null && typeof( textOnChange ) == "function" ) {
+ textOnChange();
+ }
+}
diff --git a/rt/share/html/NoAuth/js/list.js b/rt/share/html/NoAuth/js/list.js
new file mode 100644
index 0000000..feb5527
--- /dev/null
+++ b/rt/share/html/NoAuth/js/list.js
@@ -0,0 +1,112 @@
+/* by TKirby, released under GPL */
+/* Define the "list" Class */
+Class("list").define({
+ name : null,
+ xml : null,
+ sels : null,
+ list : function (src, esrc, name) { this.init(src, esrc, name); },
+ read : function () {
+ var i = 0;
+ if(this.xml.readyState!=4) { setTimeout(this.name+".read()", 100); }
+ else if(this.xml.status!=200) alert("Document not available.");
+ else {
+ var doc = this.xml.responseXML;
+ var nNode = null;
+ if(doc.childNodes[0].nodeName=="parseerror") alert("Parse Error.");
+ doc = doc.getElementsByTagName("list")[0];
+ for(i=0;i<doc.childNodes.length;i++) {
+ if(doc.childNodes[i].childNodes.length>0) {
+ nNode = document.createElement("option");
+ nNode.appendChild(document.createTextNode(doc.childNodes[i].childNodes[0].nodeValue));
+ this.sels[0].appendChild(nNode);
+ }
+ }
+ }
+ },
+
+ init : function (src,esrc,name) {
+ if(!src) return;
+ this.name = name;
+ this.sels = new Array();
+ var i = 0;
+ for(i=0;i<src.childNodes.length;i++) {
+ if(src.childNodes[i].nodeName=="select" || src.childNodes[i].nodeName=="SELECT") {
+ this.sels.push(src.childNodes[i]);
+ }
+
+ if((src.childNodes[i].nodeName=="input" || src.childNodes[i].nodeName=="INPUT")
+ && (src.childNodes[i].name=="fromjs")) {
+ src.childNodes[i].value = 1;
+ }
+
+ if((src.childNodes[i].nodeName=="input" || src.childNodes[i].nodeName=="INPUT")
+ && (src.childNodes[i].type=="submit" || src.childNodes[i].type=="SUBMIT")) {
+
+ if (src.childNodes[i].name.indexOf("Save") < 0) {
+ var tmp = document.createElement("input");
+ tmp.type = "button";
+ tmp.name = src.childNodes[i].name;
+ tmp.value = src.childNodes[i].value;
+ src.replaceChild(tmp,src.childNodes[i]);
+ }
+
+ if(src.childNodes[i].name=="add")
+ src.childNodes[i].onclick = new Function(this.name+".add();");
+ if(src.childNodes[i].name=="remove")
+ src.childNodes[i].onclick = new Function(this.name+".remove();");
+ if(src.childNodes[i].name=="moveup")
+ src.childNodes[i].onclick = new Function(this.name+".moveup();");
+ if(src.childNodes[i].name=="movedown")
+ src.childNodes[i].onclick = new Function(this.name+".movedown();");
+ }
+ }
+ if (esrc) {
+ this.xml = (window.navigator.appName!="Microsoft Internet Explorer"
+ ?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
+ this.xml.open("GET", esrc);
+ this.xml.send("");
+ setTimeout(this.name+".read()", 100);
+ }
+ },
+
+ add : function() {
+ var i, j = 0;
+ var dNode = null;
+ for(i=0;i<this.sels[0].length;i++) if(this.sels[0][i].selected) {
+ for(j=0;j<this.sels[1].length;j++) if(this.sels[1][j].value==this.sels[0][i].value) break;
+ if(j==this.sels[1].length) dNode = this.sels[0][i].cloneNode(true),
+ this.sels[1].appendChild(dNode);
+ }
+ },
+
+ moveup : function() { this.move(-1); },
+ movedown : function() { this.move(1); },
+ move : function(v) {
+ var i = 0;
+ if(v<0) for(i=0;i<this.sels[1].length;i++) this.moveOne(v, i);
+ else if(v>0) for(i=this.sels[1].length-1;i>=0;i--)this.moveOne(v, i);
+ },
+
+ moveOne : function(v, i) {
+ var ins = v + i;
+ if(ins<0 || ins>=this.sels[1].length) return;
+ if(this.sels[1][ins].selected) return;
+ if(this.sels[1][i].selected) {
+ Node = this.sels[1][i];
+ this.sels[1].removeChild(Node);
+ this.sels[1].insertBefore(Node, this.sels[1][ins]);
+ }
+ },
+
+ remove : function() {
+ var i = 0;
+ for(i=this.sels[1].length-1;i>=0;i--) if(this.sels[1][i].selected)
+ this.sels[1].removeChild(this.sels[1][i]);
+ },
+
+ selectAll: function() {
+ var i = 0;
+ for(i=0;i<this.sels[0].length;i++) this.sels[0][i].selected = false;
+ for(i=0;i<this.sels[1].length;i++) this.sels[1][i].selected = true;
+ }
+});
diff --git a/rt/share/html/NoAuth/js/prototype/prototype.js b/rt/share/html/NoAuth/js/prototype/prototype.js
new file mode 100644
index 0000000..dfe8ab4
--- /dev/null
+++ b/rt/share/html/NoAuth/js/prototype/prototype.js
@@ -0,0 +1,4320 @@
+/* Prototype JavaScript framework, version 1.6.0.3
+ * (c) 2005-2008 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.0.3',
+
+ Browser: {
+ IE: !!(window.attachEvent &&
+ navigator.userAgent.indexOf('Opera') === -1),
+ Opera: navigator.userAgent.indexOf('Opera') > -1,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 &&
+ navigator.userAgent.indexOf('KHTML') === -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ },
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ SelectorsAPI: !!document.querySelector,
+ ElementExtensions: !!window.HTMLElement,
+ SpecificElementExtensions:
+ document.createElement('div')['__proto__'] &&
+ document.createElement('div')['__proto__'] !==
+ document.createElement('form')['__proto__']
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+ create: function() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ var subclass = function() { };
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+
+ return klass;
+ }
+};
+
+Class.Methods = {
+ addMethods: function(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length)
+ properties.push("toString", "valueOf");
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments) };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+};
+
+Object.extend(Object, {
+ inspect: function(object) {
+ try {
+ if (Object.isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ },
+
+ toJSON: function(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (Object.isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = Object.toJSON(object[property]);
+ if (!Object.isUndefined(value))
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ },
+
+ toQueryString: function(object) {
+ return $H(object).toQueryString();
+ },
+
+ toHTML: function(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ },
+
+ keys: function(object) {
+ var keys = [];
+ for (var property in object)
+ keys.push(property);
+ return keys;
+ },
+
+ values: function(object) {
+ var values = [];
+ for (var property in object)
+ values.push(object[property]);
+ return values;
+ },
+
+ clone: function(object) {
+ return Object.extend({ }, object);
+ },
+
+ isElement: function(object) {
+ return !!(object && object.nodeType == 1);
+ },
+
+ isArray: function(object) {
+ return object != null && typeof object == "object" &&
+ 'splice' in object && 'join' in object;
+ },
+
+ isHash: function(object) {
+ return object instanceof Hash;
+ },
+
+ isFunction: function(object) {
+ return typeof object == "function";
+ },
+
+ isString: function(object) {
+ return typeof object == "string";
+ },
+
+ isNumber: function(object) {
+ return typeof object == "number";
+ },
+
+ isUndefined: function(object) {
+ return typeof object == "undefined";
+ }
+});
+
+Object.extend(Function.prototype, {
+ argumentNames: function() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ },
+
+ bind: function() {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+ },
+
+ bindAsEventListener: function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [event || window.event].concat(args));
+ }
+ },
+
+ curry: function() {
+ if (!arguments.length) return this;
+ var __method = this, args = $A(arguments);
+ return function() {
+ return __method.apply(this, args.concat($A(arguments)));
+ }
+ },
+
+ delay: function() {
+ var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ },
+
+ defer: function() {
+ var args = [0.01].concat($A(arguments));
+ return this.delay.apply(this, args);
+ },
+
+ wrap: function(wrapper) {
+ var __method = this;
+ return function() {
+ return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+ }
+ },
+
+ methodize: function() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ return __method.apply(null, [this].concat($A(arguments)));
+ };
+ }
+});
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, {
+ gsub: function(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = arguments.callee.prepareReplacement(replacement);
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ },
+
+ sub: function(pattern, replacement, count) {
+ replacement = this.gsub.prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ },
+
+ scan: function(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ },
+
+ truncate: function(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ },
+
+ strip: function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ },
+
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ stripScripts: function() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ },
+
+ extractScripts: function() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ },
+
+ evalScripts: function() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ },
+
+ escapeHTML: function() {
+ var self = arguments.callee;
+ self.text.data = this;
+ return self.div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = new Element('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
+ $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+ div.childNodes[0].nodeValue) : '';
+ },
+
+ toQueryParams: function(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ },
+
+ toArray: function() {
+ return this.split('');
+ },
+
+ succ: function() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ },
+
+ times: function(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ },
+
+ camelize: function() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ },
+
+ capitalize: function() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ },
+
+ underscore: function() {
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+ },
+
+ dasherize: function() {
+ return this.gsub(/_/,'-');
+ },
+
+ inspect: function(useDoubleQuotes) {
+ var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+ var character = String.specialChar[match[0]];
+ return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ },
+
+ toJSON: function() {
+ return this.inspect(true);
+ },
+
+ unfilterJSON: function(filter) {
+ return this.sub(filter || Prototype.JSONFilter, '#{1}');
+ },
+
+ isJSON: function() {
+ var str = this;
+ if (str.blank()) return false;
+ str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ },
+
+ evalJSON: function(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ },
+
+ include: function(pattern) {
+ return this.indexOf(pattern) > -1;
+ },
+
+ startsWith: function(pattern) {
+ return this.indexOf(pattern) === 0;
+ },
+
+ endsWith: function(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ },
+
+ empty: function() {
+ return this == '';
+ },
+
+ blank: function() {
+ return /^\s*$/.test(this);
+ },
+
+ interpolate: function(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+ escapeHTML: function() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ },
+ unescapeHTML: function() {
+ return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+ }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+ div: document.createElement('div'),
+ text: document.createTextNode('')
+});
+
+String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return '';
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+ match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ });
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+ each: function(iterator, context) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ iterator.call(context, value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ },
+
+ eachSlice: function(number, iterator, context) {
+ var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ },
+
+ all: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator.call(context, value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ },
+
+ any: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator.call(context, value, index))
+ throw $break;
+ });
+ return result;
+ },
+
+ collect: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ },
+
+ detect: function(iterator, context) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(filter);
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ },
+
+ include: function(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ },
+
+ inGroupsOf: function(number, fillWith) {
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ },
+
+ inject: function(memo, iterator, context) {
+ this.each(function(value, index) {
+ memo = iterator.call(context, memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value >= result)
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value < result)
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator.call(context, value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator, context) {
+ return this.map(function(value, index) {
+ return {
+ value: value,
+ criteria: iterator.call(context, value, index)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.map();
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ },
+
+ size: function() {
+ return this.toArray().length;
+ },
+
+ inspect: function() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+};
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ filter: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray,
+ every: Enumerable.all,
+ some: Enumerable.any
+});
+function $A(iterable) {
+ if (!iterable) return [];
+ if (iterable.toArray) return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+if (Prototype.Browser.WebKit) {
+ $A = function(iterable) {
+ if (!iterable) return [];
+ // In Safari, only use the `toArray` method if it's not a NodeList.
+ // A NodeList is a function, has an function `item` property, and a numeric
+ // `length` property. Adapted from Google Doctype.
+ if (!(typeof iterable === 'function' && typeof iterable.length ===
+ 'number' && typeof iterable.item === 'function') && iterable.toArray)
+ return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+ };
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ },
+
+ clear: function() {
+ this.length = 0;
+ return this;
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ },
+
+ compact: function() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ },
+
+ flatten: function() {
+ return this.inject([], function(array, value) {
+ return array.concat(Object.isArray(value) ?
+ value.flatten() : [value]);
+ });
+ },
+
+ without: function() {
+ var values = $A(arguments);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ },
+
+ reverse: function(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ },
+
+ reduce: function() {
+ return this.length > 1 ? this : this[0];
+ },
+
+ uniq: function(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ },
+
+ intersect: function(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ },
+
+ clone: function() {
+ return [].concat(this);
+ },
+
+ size: function() {
+ return this.length;
+ },
+
+ inspect: function() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ },
+
+ toJSON: function() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (!Object.isUndefined(value)) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+ Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+ Array.prototype.concat = function() {
+ var array = [];
+ for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ if (Object.isArray(arguments[i])) {
+ for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+ array.push(arguments[i][j]);
+ } else {
+ array.push(arguments[i]);
+ }
+ }
+ return array;
+ };
+}
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ return this.toPaddedString(2, 16);
+ },
+
+ succ: function() {
+ return this + 1;
+ },
+
+ times: function(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ },
+
+ toPaddedString: function(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ },
+
+ toJSON: function() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+});
+
+$w('abs round ceil floor').each(function(method){
+ Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ return {
+ initialize: function(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ },
+
+ _each: function(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ },
+
+ set: function(key, value) {
+ return this._object[key] = value;
+ },
+
+ get: function(key) {
+ // simulating poorly supported hasOwnProperty
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ },
+
+ unset: function(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ },
+
+ toObject: function() {
+ return Object.clone(this._object);
+ },
+
+ keys: function() {
+ return this.pluck('key');
+ },
+
+ values: function() {
+ return this.pluck('value');
+ },
+
+ index: function(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ },
+
+ merge: function(object) {
+ return this.clone().update(object);
+ },
+
+ update: function(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ },
+
+ toQueryString: function() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return results.concat(values.map(toQueryPair.curry(key)));
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ },
+
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ },
+
+ toJSON: function() {
+ return Object.toJSON(this.toObject());
+ },
+
+ clone: function() {
+ return new Hash(this);
+ }
+ }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+ initialize: function(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ },
+
+ _each: function(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ },
+
+ include: function(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+});
+
+var $R = function(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ else if (Object.isHash(this.options.parameters))
+ this.options.parameters = this.options.parameters.toObject();
+ }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ // simulate other verbs over post
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ // when GET, append parameters to URL
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ // user-defined headers
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && this.isSameOrigin() && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ // avoid memory leak in MSIE: clean up
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ isSameOrigin: function() {
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+ protocol: location.protocol,
+ domain: document.domain,
+ port: location.port ? ':' + location.port : ''
+ }));
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name) || null;
+ } catch (e) { return null }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
+ this.responseText.blank())
+ return null;
+ try {
+ return this.responseText.evalJSON(options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = Object.clone(options);
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, json) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, json);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ // DOM level 2 ECMAScript Language Binding
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+(function() {
+ var element = this.Element;
+ this.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (Prototype.Browser.IE && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(this.Element, element || { });
+ if (element) this.Element.prototype = element.prototype;
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ element = $(element);
+ element.style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ element = $(element);
+ element.style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+ content = Object.toHTML(content);
+ element.innerHTML = content.stripScripts();
+ content.evalScripts.bind(content).defer();
+ return element;
+ },
+
+ replace: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, insert, tagName, childNodes;
+
+ for (var position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ insert = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+ if (position == 'top' || position == 'after') childNodes.reverse();
+ childNodes.each(insert.curry(element));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = $(element);
+ if (Object.isElement(wrapper))
+ $(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = $(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return $(element).recursivelyCollect('parentNode');
+ },
+
+ descendants: function(element) {
+ return $(element).select("*");
+ },
+
+ firstDescendant: function(element) {
+ element = $(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return $(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = $(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat($(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return $(element).recursivelyCollect('previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return $(element).recursivelyCollect('nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match($(element));
+ },
+
+ up: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(element.parentNode);
+ var ancestors = element.ancestors();
+ return Object.isNumber(expression) ? ancestors[expression] :
+ Selector.findElement(ancestors, expression, index);
+ },
+
+ down: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? element.descendants()[expression] :
+ Element.select(element, expression)[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = element.previousSiblings();
+ return Object.isNumber(expression) ? previousSiblings[expression] :
+ Selector.findElement(previousSiblings, expression, index);
+ },
+
+ next: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = element.nextSiblings();
+ return Object.isNumber(expression) ? nextSiblings[expression] :
+ Selector.findElement(nextSiblings, expression, index);
+ },
+
+ select: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = $(element);
+ var id = element.readAttribute('id'), self = arguments.callee;
+ if (id) return id;
+ do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+ element.writeAttribute('id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = $(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = Object.isUndefined(value) ? true : value;
+
+ for (var attr in attributes) {
+ name = t.names[attr] || attr;
+ value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return $(element).getDimensions().height;
+ },
+
+ getWidth: function(element) {
+ return $(element).getDimensions().width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ if (!element.hasClassName(className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ return element[element.hasClassName(className) ?
+ 'removeClassName' : 'addClassName'](className);
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = element.cumulativeOffset();
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value || value == 'auto') {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return $(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = $(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = $(element);
+ var display = element.getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ // Opera returns the offset relative to the positioning context, when an
+ // element is position relative but top and left have not been defined
+ if (Prototype.Browser.Opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName.toUpperCase() == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p !== 'static') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'absolute') return element;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ var offsets = element.positionedOffset();
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'relative') return element;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return $(element.offsetParent);
+ if (element == document.body) return $(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return $(element);
+
+ return $(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ // find page position of source
+ source = $(source);
+ var p = source.viewportOffset();
+
+ // find coordinate system to use
+ element = $(element);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = element.getOffsetParent();
+ delta = parent.viewportOffset();
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+if (Prototype.Browser.Opera) {
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+ function(proceed, element, style) {
+ switch (style) {
+ case 'left': case 'top': case 'right': case 'bottom':
+ if (proceed(element, 'position') === 'static') return null;
+ case 'height': case 'width':
+ // returns '0px' for hidden elements; we want it to return null
+ if (!Element.visible(element)) return null;
+
+ // returns the border-box dimensions rather than the content-box
+ // dimensions, so we subtract padding and borders from the value
+ var dim = parseInt(proceed(element, style), 10);
+
+ if (dim !== element['offset' + style.capitalize()])
+ return dim + 'px';
+
+ var properties;
+ if (style === 'height') {
+ properties = ['border-top-width', 'padding-top',
+ 'padding-bottom', 'border-bottom-width'];
+ }
+ else {
+ properties = ['border-left-width', 'padding-left',
+ 'padding-right', 'border-right-width'];
+ }
+ return properties.inject(dim, function(memo, property) {
+ var val = proceed(element, property);
+ return val === null ? memo : memo - parseInt(val, 10);
+ }) + 'px';
+ default: return proceed(element, style);
+ }
+ }
+ );
+
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+ function(proceed, element, attribute) {
+ if (attribute === 'title') return element.title;
+ return proceed(element, attribute);
+ }
+ );
+}
+
+else if (Prototype.Browser.IE) {
+ // IE doesn't report offsets correctly for static elements, so we change them
+ // to "relative" to get the values, then change them back.
+ Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+ function(proceed, element) {
+ element = $(element);
+ // IE throws an error if element is not in document
+ try { element.offsetParent }
+ catch(e) { return $(document.body) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+
+ $w('positionedOffset viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = $(element);
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ // Trigger hasLayout on the offset parent so that IE6 reports
+ // accurate offsetTop and offsetLeft values for position: fixed.
+ var offsetParent = element.getOffsetParent();
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+ offsetParent.setStyle({ zoom: 1 });
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+ function(proceed, element) {
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ return proceed(element);
+ }
+ );
+
+ Element.Methods.getStyle = function(element, style) {
+ element = $(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = $(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = {
+ read: {
+ names: {
+ 'class': 'className',
+ 'for': 'htmlFor'
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ return attribute ? attribute.toString().slice(23, -2) : null;
+ },
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ };
+
+ Element._attributeTranslations.write = {
+ names: Object.extend({
+ cellpadding: 'cellPadding',
+ cellspacing: 'cellSpacing'
+ }, Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr,
+ src: v._getAttr,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ // Safari returns margins on body which is incorrect if the child is absolutely
+ // positioned. For performance reasons, redefine Element#cumulativeOffset for
+ // KHTML/WebKit only.
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+ // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+ Element.Methods.update = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+
+ content = Object.toHTML(content);
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName in Element._insertionTranslations.tags) {
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) { element.appendChild(node) });
+ }
+ else element.innerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+if ('outerHTML' in document.createElement('div')) {
+ Element.Methods.replace = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ if (t) {
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ } else div.innerHTML = html;
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ top: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ bottom: function(element, node) {
+ element.appendChild(node);
+ },
+ after: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ Object.extend(this.tags, {
+ THEAD: this.tags.TBODY,
+ TFOOT: this.tags.TBODY,
+ TH: this.tags.TD
+ });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = $(element).getAttributeNode(attribute);
+ return !!(node && node.specified);
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+ document.createElement('div')['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = document.createElement('div')['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+ if (Prototype.BrowserFeatures.SpecificElementExtensions)
+ return Prototype.K;
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || element._extendedByPrototype ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName.toUpperCase(), property, value;
+
+ // extend methods for specific tags
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ for (property in methods) {
+ value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ // extend methods for all tags (Safari doesn't need this)
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ window[klass] = { };
+ window[klass].prototype = document.createElement(tagName)['__proto__'];
+ return window[klass];
+ }
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+document.viewport = {
+ getDimensions: function() {
+ var dimensions = { }, B = Prototype.Browser;
+ $w('width height').each(function(d) {
+ var D = d.capitalize();
+ if (B.WebKit && !document.evaluate) {
+ // Safari <3.0 needs self.innerWidth/Height
+ dimensions[d] = self['inner' + D];
+ } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
+ // Opera <9.5 needs document.body.clientWidth/Height
+ dimensions[d] = document.body['client' + D]
+ } else {
+ dimensions[d] = document.documentElement['client' + D];
+ }
+ });
+ return dimensions;
+ },
+
+ getWidth: function() {
+ return this.getDimensions().width;
+ },
+
+ getHeight: function() {
+ return this.getDimensions().height;
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+
+ if (this.shouldUseSelectorsAPI()) {
+ this.mode = 'selectorsAPI';
+ } else if (this.shouldUseXPath()) {
+ this.mode = 'xpath';
+ this.compileXPathMatcher();
+ } else {
+ this.mode = "normal";
+ this.compileMatcher();
+ }
+
+ },
+
+ shouldUseXPath: function() {
+ if (!Prototype.BrowserFeatures.XPath) return false;
+
+ var e = this.expression;
+
+ // Safari 3 chokes on :*-of-type and :empty
+ if (Prototype.Browser.WebKit &&
+ (e.include("-of-type") || e.include(":empty")))
+ return false;
+
+ // XPath can't do namespaced attributes, nor can it read
+ // the "checked" property from DOM nodes
+ if ((/(\[[\w-]*?:|:checked)/).test(e))
+ return false;
+
+ return true;
+ },
+
+ shouldUseSelectorsAPI: function() {
+ if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+ if (!Selector._div) Selector._div = new Element('div');
+
+ // Make sure the browser treats the selector as valid. Test on an
+ // isolated element to minimize cost of this check.
+ try {
+ Selector._div.querySelector(this.expression);
+ } catch(e) {
+ return false;
+ }
+
+ return true;
+ },
+
+ compileMatcher: function() {
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+ new Template(c[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ if (m = e.match(ps[i])) {
+ this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+ new Template(x[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ var e = this.expression, results;
+
+ switch (this.mode) {
+ case 'selectorsAPI':
+ // querySelectorAll queries document-wide, then filters to descendants
+ // of the context element. That's not what we want.
+ // Add an explicit context to the selector if necessary.
+ if (root !== document) {
+ var oldId = root.id, id = $(root).identify();
+ e = "#" + id + " " + e;
+ }
+
+ results = $A(root.querySelectorAll(e)).map(Element.extend);
+ root.id = oldId;
+
+ return results;
+ case 'xpath':
+ return document._getElementsByXPath(this.xpath, root);
+ default:
+ return this.matcher(root);
+ }
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ // use the Selector.assertions methods unless the selector
+ // is too complex.
+ if (as[i]) {
+ this.tokens.push([i, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ // reluctantly do a document-wide search
+ // and look for a match in the array
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: function(m) {
+ m[1] = m[1].toLowerCase();
+ return new Template("[@#{1}]").evaluate(m);
+ },
+ attr: function(m) {
+ m[1] = m[1].toLowerCase();
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0)]",
+ 'checked': "[@checked]",
+ 'disabled': "[(@disabled) and (@type!='hidden')]",
+ 'enabled': "[not(@disabled) and (@type!='hidden')]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, v;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in p) {
+ if (m = e.match(p[i])) {
+ v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: {
+ // combinators must be listed first
+ // (and descendant needs to be last combinator)
+ laterSibling: /^\s*~\s*/,
+ child: /^\s*>\s*/,
+ adjacent: /^\s*\+\s*/,
+ descendant: /^\s/,
+
+ // selectors follow
+ tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
+ id: /^#([\w\-\*]+)(\b|$)/,
+ className: /^\.([\w\-\*]+)(\b|$)/,
+ pseudo:
+/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
+ attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+ },
+
+ // for Selector.match and Element#match
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+ }
+ },
+
+ handlers: {
+ // UTILITY FUNCTIONS
+ // joins two collections
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ // marks an array of nodes for counting
+ mark: function(nodes) {
+ var _true = Prototype.emptyFunction;
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = _true;
+ return nodes;
+ },
+
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = undefined;
+ return nodes;
+ },
+
+ // mark each child node with its position (for nth calls)
+ // "ofType" flag indicates whether we're indexing for nth-of-type
+ // rather than nth-child
+ index: function(parentNode, reverse, ofType) {
+ parentNode._countedByPrototype = Prototype.emptyFunction;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ },
+
+ // filters out duplicates and extends all nodes
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (!(n = nodes[i])._countedByPrototype) {
+ n._countedByPrototype = Prototype.emptyFunction;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ // COMBINATOR FUNCTIONS
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ // TOKEN FUNCTIONS
+ tagName: function(nodes, root, tagName, combinator) {
+ var uTagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ // fastlane for ordinary descendant combinators
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() === uTagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = $(id), h = Selector.handlers;
+ if (!targetNode) return [];
+ if (!nodes && root == document) return [targetNode];
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ // handles the an+b logic
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._countedByPrototype) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ // IE treats comments as element nodes
+ if (node.tagName == '!' || node.firstChild) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._countedByPrototype) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled && (!node.type || node.type !== 'hidden'))
+ results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+ '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+ '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+ '$=': function(nv, v) { return nv.endsWith(v); },
+ '*=': function(nv, v) { return nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+ '-').include('-' + (v || "").toUpperCase() + '-'); }
+ },
+
+ split: function(expression) {
+ var expressions = [];
+ expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ return expressions;
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = $$(expression), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._countedByPrototype) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ expressions = Selector.split(expressions.join(','));
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+if (Prototype.Browser.IE) {
+ Object.extend(Selector.handlers, {
+ // IE returns comment nodes on getElementsByTagName("*").
+ // Filter them out.
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ if (node.tagName !== "!") a.push(node);
+ return a;
+ },
+
+ // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node.removeAttribute('_countedByPrototype');
+ return nodes;
+ }
+ });
+}
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (Object.isUndefined(options.hash)) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = $(element).getValue();
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ // a key is already present; construct an array of values
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = $(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = $(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type)))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (Object.isUndefined(value)) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (Object.isUndefined(value)) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, value) {
+ if (Object.isUndefined(value))
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, currentValue, single = !Object.isArray(value);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ currentValue = this.optionValue(opt);
+ if (single) {
+ if (currentValue == value) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = value.include(currentValue);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = $(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: { },
+
+ relatedTarget: function(event) {
+ var element;
+ switch(event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+});
+
+Event.Methods = (function() {
+ var isButton;
+
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ isButton = function(event, code) {
+ return event.button == buttonMap[code];
+ };
+
+ } else if (Prototype.Browser.WebKit) {
+ isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+
+ } else {
+ isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ return {
+ isLeftClick: function(event) { return isButton(event, 0) },
+ isMiddleClick: function(event) { return isButton(event, 1) },
+ isRightClick: function(event) { return isButton(event, 2) },
+
+ element: function(event) {
+ event = Event.extend(event);
+
+ var node = event.target,
+ type = event.type,
+ currentTarget = event.currentTarget;
+
+ if (currentTarget && currentTarget.tagName) {
+ // Firefox screws up the "click" event when moving between radio buttons
+ // via arrow keys. It also screws up the "load" and "error" events on images,
+ // reporting the document as the target instead of the original image.
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
+ }
+ if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
+ return Element.extend(node);
+ },
+
+ findElement: function(event, expression) {
+ var element = Event.element(event);
+ if (!expression) return element;
+ var elements = [element].concat(element.ancestors());
+ return Selector.findElement(elements, expression, 0);
+ },
+
+ pointer: function(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0, scrollTop: 0 };
+ return {
+ x: event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0)),
+ y: event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0))
+ };
+ },
+
+ pointerX: function(event) { return Event.pointer(event).x },
+ pointerY: function(event) { return Event.pointer(event).y },
+
+ stop: function(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopped = true;
+ }
+ };
+})();
+
+Event.extend = (function() {
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return "[object Event]" }
+ });
+
+ return function(event) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+ Object.extend(event, {
+ target: event.srcElement,
+ relatedTarget: Event.relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+ return Object.extend(event, methods);
+ };
+
+ } else {
+ Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
+ Object.extend(Event.prototype, methods);
+ return Prototype.K;
+ }
+})();
+
+Object.extend(Event, (function() {
+ var cache = Event.cache;
+
+ function getEventID(element) {
+ if (element._prototypeEventID) return element._prototypeEventID[0];
+ arguments.callee.id = arguments.callee.id || 1;
+ return element._prototypeEventID = [++arguments.callee.id];
+ }
+
+ function getDOMEventName(eventName) {
+ if (eventName && eventName.include(':')) return "dataavailable";
+ return eventName;
+ }
+
+ function getCacheForID(id) {
+ return cache[id] = cache[id] || { };
+ }
+
+ function getWrappersForEventName(id, eventName) {
+ var c = getCacheForID(id);
+ return c[eventName] = c[eventName] || [];
+ }
+
+ function createWrapper(element, eventName, handler) {
+ var id = getEventID(element);
+ var c = getWrappersForEventName(id, eventName);
+ if (c.pluck("handler").include(handler)) return false;
+
+ var wrapper = function(event) {
+ if (!Event || !Event.extend ||
+ (event.eventName && event.eventName != eventName))
+ return false;
+
+ Event.extend(event);
+ handler.call(element, event);
+ };
+
+ wrapper.handler = handler;
+ c.push(wrapper);
+ return wrapper;
+ }
+
+ function findWrapper(id, eventName, handler) {
+ var c = getWrappersForEventName(id, eventName);
+ return c.find(function(wrapper) { return wrapper.handler == handler });
+ }
+
+ function destroyWrapper(id, eventName, handler) {
+ var c = getCacheForID(id);
+ if (!c[eventName]) return false;
+ c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+ }
+
+ function destroyCache() {
+ for (var id in cache)
+ for (var eventName in cache[id])
+ cache[id][eventName] = null;
+ }
+
+
+ // Internet Explorer needs to remove event handlers on page unload
+ // in order to avoid memory leaks.
+ if (window.attachEvent) {
+ window.attachEvent("onunload", destroyCache);
+ }
+
+ // Safari has a dummy event handler on page unload so that it won't
+ // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
+ // object when page is returned to via the back button using its bfcache.
+ if (Prototype.Browser.WebKit) {
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+ }
+
+ return {
+ observe: function(element, eventName, handler) {
+ element = $(element);
+ var name = getDOMEventName(eventName);
+
+ var wrapper = createWrapper(element, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.addEventListener) {
+ element.addEventListener(name, wrapper, false);
+ } else {
+ element.attachEvent("on" + name, wrapper);
+ }
+
+ return element;
+ },
+
+ stopObserving: function(element, eventName, handler) {
+ element = $(element);
+ var id = getEventID(element), name = getDOMEventName(eventName);
+
+ if (!handler && eventName) {
+ getWrappersForEventName(id, eventName).each(function(wrapper) {
+ element.stopObserving(eventName, wrapper.handler);
+ });
+ return element;
+
+ } else if (!eventName) {
+ Object.keys(getCacheForID(id)).each(function(eventName) {
+ element.stopObserving(eventName);
+ });
+ return element;
+ }
+
+ var wrapper = findWrapper(id, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, wrapper, false);
+ } else {
+ element.detachEvent("on" + name, wrapper);
+ }
+
+ destroyWrapper(id, eventName, handler);
+
+ return element;
+ },
+
+ fire: function(element, eventName, memo) {
+ element = $(element);
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent("HTMLEvents");
+ event.initEvent("dataavailable", true, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = "ondataavailable";
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent) {
+ element.dispatchEvent(event);
+ } else {
+ element.fireEvent(event.eventType, event);
+ }
+
+ return Event.extend(event);
+ }
+ };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+ fire: Event.fire,
+ observe: Event.observe,
+ stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+ fire: Element.Methods.fire.methodize(),
+ observe: Element.Methods.observe.methodize(),
+ stopObserving: Element.Methods.stopObserving.methodize(),
+ loaded: false
+});
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards and John Resig. */
+
+ var timer;
+
+ function fireContentLoadedEvent() {
+ if (document.loaded) return;
+ if (timer) window.clearInterval(timer);
+ document.fire("dom:loaded");
+ document.loaded = true;
+ }
+
+ if (document.addEventListener) {
+ if (Prototype.Browser.WebKit) {
+ timer = window.setInterval(function() {
+ if (/loaded|complete/.test(document.readyState))
+ fireContentLoadedEvent();
+ }, 0);
+
+ Event.observe(window, "load", fireContentLoadedEvent);
+
+ } else {
+ document.addEventListener("DOMContentLoaded",
+ fireContentLoadedEvent, false);
+ }
+
+ } else {
+ document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+ $("__onDOMContentLoaded").onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ this.onreadystatechange = null;
+ fireContentLoadedEvent();
+ }
+ };
+ }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ // Deprecation layer -- use newer Element methods now (1.5.2).
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = $(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return $(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods(); \ No newline at end of file
diff --git a/rt/share/html/NoAuth/js/scriptaculous/controls.js b/rt/share/html/NoAuth/js/scriptaculous/controls.js
new file mode 100644
index 0000000..99a6fa0
--- /dev/null
+++ b/rt/share/html/NoAuth/js/scriptaculous/controls.js
@@ -0,0 +1,971 @@
+// LOCAL BEST PRACTICAL MODIFICATIONS
+// lines 218 and 224, removing scrollIntoView
+// Leaving these in causes autocomplete lists to flip out and jump
+// the screen around if the length of the returned list is anywhere
+// near the size of the viewport
+//
+// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+// (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+// Richard Livsey
+// Rahul Bhargava
+// Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == 'undefined')
+ throw("controls.js requires including script.aculo.us' effects.js library");
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+ baseInitialize: function(element, update, options) {
+ element = $(element);
+ this.element = element;
+ this.update = $(update);
+ this.hasFocus = false;
+ this.changed = false;
+ this.active = false;
+ this.index = 0;
+ this.entryCount = 0;
+ this.oldElementValue = this.element.value;
+
+ if(this.setOptions)
+ this.setOptions(options);
+ else
+ this.options = options || { };
+
+ this.options.paramName = this.options.paramName || this.element.name;
+ this.options.tokens = this.options.tokens || [];
+ this.options.frequency = this.options.frequency || 0.4;
+ this.options.minChars = this.options.minChars || 1;
+ this.options.onShow = this.options.onShow ||
+ function(element, update){
+ if(!update.style.position || update.style.position=='absolute') {
+ update.style.position = 'absolute';
+ Position.clone(element, update, {
+ setHeight: false,
+ offsetTop: element.offsetHeight
+ });
+ }
+ Effect.Appear(update,{duration:0.15});
+ };
+ this.options.onHide = this.options.onHide ||
+ function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+ if(typeof(this.options.tokens) == 'string')
+ this.options.tokens = new Array(this.options.tokens);
+ // Force carriage returns as token delimiters anyway
+ if (!this.options.tokens.include('\n'))
+ this.options.tokens.push('\n');
+
+ this.observer = null;
+
+ this.element.setAttribute('autocomplete','off');
+
+ Element.hide(this.update);
+
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+ },
+
+ show: function() {
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+ if(!this.iefix &&
+ (Prototype.Browser.IE) &&
+ (Element.getStyle(this.update, 'position')=='absolute')) {
+ new Insertion.After(this.update,
+ '<iframe id="' + this.update.id + '_iefix" '+
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+ this.iefix = $(this.update.id+'_iefix');
+ }
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+ },
+
+ fixIEOverlapping: function() {
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+ this.iefix.style.zIndex = 1;
+ this.update.style.zIndex = 2;
+ Element.show(this.iefix);
+ },
+
+ hide: function() {
+ this.stopIndicator();
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+ if(this.iefix) Element.hide(this.iefix);
+ },
+
+ startIndicator: function() {
+ if(this.options.indicator) Element.show(this.options.indicator);
+ },
+
+ stopIndicator: function() {
+ if(this.options.indicator) Element.hide(this.options.indicator);
+ },
+
+ onKeyPress: function(event) {
+ if(this.active)
+ switch(event.keyCode) {
+ case Event.KEY_TAB:
+ case Event.KEY_RETURN:
+ this.selectEntry();
+ Event.stop(event);
+ case Event.KEY_ESC:
+ this.hide();
+ this.active = false;
+ Event.stop(event);
+ return;
+ case Event.KEY_LEFT:
+ case Event.KEY_RIGHT:
+ return;
+ case Event.KEY_UP:
+ this.markPrevious();
+ this.render();
+ Event.stop(event);
+ return;
+ case Event.KEY_DOWN:
+ this.markNext();
+ this.render();
+ Event.stop(event);
+ return;
+ }
+ else
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
+
+ this.changed = true;
+ this.hasFocus = true;
+
+ if(this.observer) clearTimeout(this.observer);
+ this.observer =
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+ },
+
+ activate: function() {
+ this.changed = false;
+ this.hasFocus = true;
+ this.getUpdatedChoices();
+ },
+
+ onHover: function(event) {
+ var element = Event.findElement(event, 'LI');
+ if(this.index != element.autocompleteIndex)
+ {
+ this.index = element.autocompleteIndex;
+ this.render();
+ }
+ Event.stop(event);
+ },
+
+ onClick: function(event) {
+ var element = Event.findElement(event, 'LI');
+ this.index = element.autocompleteIndex;
+ this.selectEntry();
+ this.hide();
+ },
+
+ onBlur: function(event) {
+ // needed to make click events working
+ setTimeout(this.hide.bind(this), 250);
+ this.hasFocus = false;
+ this.active = false;
+ },
+
+ render: function() {
+ if(this.entryCount > 0) {
+ for (var i = 0; i < this.entryCount; i++)
+ this.index==i ?
+ Element.addClassName(this.getEntry(i),"selected") :
+ Element.removeClassName(this.getEntry(i),"selected");
+ if(this.hasFocus) {
+ this.show();
+ this.active = true;
+ }
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ },
+
+ markPrevious: function() {
+ if(this.index > 0) this.index--;
+ else this.index = this.entryCount-1;
+ //this.getEntry(this.index).scrollIntoView(true);
+ },
+
+ markNext: function() {
+ if(this.index < this.entryCount-1) this.index++;
+ else this.index = 0;
+ //this.getEntry(this.index).scrollIntoView(false);
+ },
+
+ getEntry: function(index) {
+ return this.update.firstChild.childNodes[index];
+ },
+
+ getCurrentEntry: function() {
+ return this.getEntry(this.index);
+ },
+
+ selectEntry: function() {
+ this.active = false;
+ this.updateElement(this.getCurrentEntry());
+ },
+
+ updateElement: function(selectedElement) {
+ if (this.options.updateElement) {
+ this.options.updateElement(selectedElement);
+ return;
+ }
+ var value = '';
+ if (this.options.select) {
+ var nodes = $(selectedElement).select('.' + this.options.select) || [];
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+ } else
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+ var bounds = this.getTokenBounds();
+ if (bounds[0] != -1) {
+ var newValue = this.element.value.substr(0, bounds[0]);
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+ if (whitespace)
+ newValue += whitespace[0];
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+ } else {
+ this.element.value = value;
+ }
+ this.oldElementValue = this.element.value;
+ this.element.focus();
+
+ if (this.options.afterUpdateElement)
+ this.options.afterUpdateElement(this.element, selectedElement);
+ },
+
+ updateChoices: function(choices) {
+ if(!this.changed && this.hasFocus) {
+ this.update.innerHTML = choices;
+ Element.cleanWhitespace(this.update);
+ Element.cleanWhitespace(this.update.down());
+
+ if(this.update.firstChild && this.update.down().childNodes) {
+ this.entryCount =
+ this.update.down().childNodes.length;
+ for (var i = 0; i < this.entryCount; i++) {
+ var entry = this.getEntry(i);
+ entry.autocompleteIndex = i;
+ this.addObservers(entry);
+ }
+ } else {
+ this.entryCount = 0;
+ }
+
+ this.stopIndicator();
+ this.index = 0;
+
+ if(this.entryCount==1 && this.options.autoSelect) {
+ this.selectEntry();
+ this.hide();
+ } else {
+ this.render();
+ }
+ }
+ },
+
+ addObservers: function(element) {
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+ },
+
+ onObserverEvent: function() {
+ this.changed = false;
+ this.tokenBounds = null;
+ if(this.getToken().length>=this.options.minChars) {
+ this.getUpdatedChoices();
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ this.oldElementValue = this.element.value;
+ },
+
+ getToken: function() {
+ var bounds = this.getTokenBounds();
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
+ },
+
+ getTokenBounds: function() {
+ if (null != this.tokenBounds) return this.tokenBounds;
+ var value = this.element.value;
+ if (value.strip().empty()) return [-1, 0];
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
+ var prevTokenPos = -1, nextTokenPos = value.length;
+ var tp;
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+ if (tp > prevTokenPos) prevTokenPos = tp;
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+ }
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+ }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+ var boundary = Math.min(newS.length, oldS.length);
+ for (var index = 0; index < boundary; ++index)
+ if (newS[index] != oldS[index])
+ return index;
+ return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, url, options) {
+ this.baseInitialize(element, update, options);
+ this.options.asynchronous = true;
+ this.options.onComplete = this.onComplete.bind(this);
+ this.options.defaultParams = this.options.parameters || null;
+ this.url = url;
+ },
+
+ getUpdatedChoices: function() {
+ this.startIndicator();
+
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
+ encodeURIComponent(this.getToken());
+
+ this.options.parameters = this.options.callback ?
+ this.options.callback(this.element, entry) : entry;
+
+ if(this.options.defaultParams)
+ this.options.parameters += '&' + this.options.defaultParams;
+
+ new Ajax.Request(this.url, this.options);
+ },
+
+ onComplete: function(request) {
+ this.updateChoices(request.responseText);
+ }
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+// text only at the beginning of strings in the
+// autocomplete array. Defaults to true, which will
+// match text at the beginning of any *word* in the
+// strings in the autocomplete array. If you want to
+// search anywhere in the string, additionally set
+// the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+// a partial match (unlike minChars, which defines
+// how many characters are required to do any match
+// at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+// Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, array, options) {
+ this.baseInitialize(element, update, options);
+ this.options.array = array;
+ },
+
+ getUpdatedChoices: function() {
+ this.updateChoices(this.options.selector(this));
+ },
+
+ setOptions: function(options) {
+ this.options = Object.extend({
+ choices: 10,
+ partialSearch: true,
+ partialChars: 2,
+ ignoreCase: true,
+ fullSearch: false,
+ selector: function(instance) {
+ var ret = []; // Beginning matches
+ var partial = []; // Inside matches
+ var entry = instance.getToken();
+ var count = 0;
+
+ for (var i = 0; i < instance.options.array.length &&
+ ret.length < instance.options.choices ; i++) {
+
+ var elem = instance.options.array[i];
+ var foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
+ elem.indexOf(entry);
+
+ while (foundPos != -1) {
+ if (foundPos == 0 && elem.length != entry.length) {
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+ elem.substr(entry.length) + "</li>");
+ break;
+ } else if (entry.length >= instance.options.partialChars &&
+ instance.options.partialSearch && foundPos != -1) {
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+ foundPos + entry.length) + "</li>");
+ break;
+ }
+ }
+
+ foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+ elem.indexOf(entry, foundPos + 1);
+
+ }
+ }
+ if (partial.length)
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+ return "<ul>" + ret.join('') + "</ul>";
+ }
+ }, options || { });
+ }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+ setTimeout(function() {
+ Field.activate(field);
+ }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+ initialize: function(element, url, options) {
+ this.url = url;
+ this.element = element = $(element);
+ this.prepareOptions();
+ this._controls = { };
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+ Object.extend(this.options, options || { });
+ if (!this.options.formId && this.element.id) {
+ this.options.formId = this.element.id + '-inplaceeditor';
+ if ($(this.options.formId))
+ this.options.formId = '';
+ }
+ if (this.options.externalControl)
+ this.options.externalControl = $(this.options.externalControl);
+ if (!this.options.externalControl)
+ this.options.externalControlOnly = false;
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+ this.element.title = this.options.clickToEditText;
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+ this._boundWrapperHandler = this.wrapUp.bind(this);
+ this.registerListeners();
+ },
+ checkForEscapeOrReturn: function(e) {
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+ if (Event.KEY_ESC == e.keyCode)
+ this.handleFormCancellation(e);
+ else if (Event.KEY_RETURN == e.keyCode)
+ this.handleFormSubmission(e);
+ },
+ createControl: function(mode, handler, extraClasses) {
+ var control = this.options[mode + 'Control'];
+ var text = this.options[mode + 'Text'];
+ if ('button' == control) {
+ var btn = document.createElement('input');
+ btn.type = 'submit';
+ btn.value = text;
+ btn.className = 'editor_' + mode + '_button';
+ if ('cancel' == mode)
+ btn.onclick = this._boundCancelHandler;
+ this._form.appendChild(btn);
+ this._controls[mode] = btn;
+ } else if ('link' == control) {
+ var link = document.createElement('a');
+ link.href = '#';
+ link.appendChild(document.createTextNode(text));
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+ link.className = 'editor_' + mode + '_link';
+ if (extraClasses)
+ link.className += ' ' + extraClasses;
+ this._form.appendChild(link);
+ this._controls[mode] = link;
+ }
+ },
+ createEditField: function() {
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+ var fld;
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
+ fld = document.createElement('input');
+ fld.type = 'text';
+ var size = this.options.size || this.options.cols || 0;
+ if (0 < size) fld.size = size;
+ } else {
+ fld = document.createElement('textarea');
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
+ fld.cols = this.options.cols || 40;
+ }
+ fld.name = this.options.paramName;
+ fld.value = text; // No HTML breaks conversion anymore
+ fld.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ fld.onblur = this._boundSubmitHandler;
+ this._controls.editor = fld;
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+ createForm: function() {
+ var ipe = this;
+ function addText(mode, condition) {
+ var text = ipe.options['text' + mode + 'Controls'];
+ if (!text || condition === false) return;
+ ipe._form.appendChild(document.createTextNode(text));
+ };
+ this._form = $(document.createElement('form'));
+ this._form.id = this.options.formId;
+ this._form.addClassName(this.options.formClassName);
+ this._form.onsubmit = this._boundSubmitHandler;
+ this.createEditField();
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
+ this._form.appendChild(document.createElement('br'));
+ if (this.options.onFormCustomization)
+ this.options.onFormCustomization(this, this._form);
+ addText('Before', this.options.okControl || this.options.cancelControl);
+ this.createControl('ok', this._boundSubmitHandler);
+ addText('Between', this.options.okControl && this.options.cancelControl);
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
+ addText('After', this.options.okControl || this.options.cancelControl);
+ },
+ destroy: function() {
+ if (this._oldInnerHTML)
+ this.element.innerHTML = this._oldInnerHTML;
+ this.leaveEditMode();
+ this.unregisterListeners();
+ },
+ enterEditMode: function(e) {
+ if (this._saving || this._editing) return;
+ this._editing = true;
+ this.triggerCallback('onEnterEditMode');
+ if (this.options.externalControl)
+ this.options.externalControl.hide();
+ this.element.hide();
+ this.createForm();
+ this.element.parentNode.insertBefore(this._form, this.element);
+ if (!this.options.loadTextURL)
+ this.postProcessEditField();
+ if (e) Event.stop(e);
+ },
+ enterHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.addClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onEnterHover');
+ },
+ getText: function() {
+ return this.element.innerHTML.unescapeHTML();
+ },
+ handleAJAXFailure: function(transport) {
+ this.triggerCallback('onFailure', transport);
+ if (this._oldInnerHTML) {
+ this.element.innerHTML = this._oldInnerHTML;
+ this._oldInnerHTML = null;
+ }
+ },
+ handleFormCancellation: function(e) {
+ this.wrapUp();
+ if (e) Event.stop(e);
+ },
+ handleFormSubmission: function(e) {
+ var form = this._form;
+ var value = $F(this._controls.editor);
+ this.prepareSubmission();
+ var params = this.options.callback(form, value) || '';
+ if (Object.isString(params))
+ params = params.toQueryParams();
+ params.editorId = this.element.id;
+ if (this.options.htmlResponse) {
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Updater({ success: this.element }, this.url, options);
+ } else {
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.url, options);
+ }
+ if (e) Event.stop(e);
+ },
+ leaveEditMode: function() {
+ this.element.removeClassName(this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ if (this.options.externalControl)
+ this.options.externalControl.show();
+ this._saving = false;
+ this._editing = false;
+ this._oldInnerHTML = null;
+ this.triggerCallback('onLeaveEditMode');
+ },
+ leaveHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.removeClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onLeaveHover');
+ },
+ loadExternalText: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this._controls.editor.disabled = true;
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._form.removeClassName(this.options.loadingClassName);
+ var text = transport.responseText;
+ if (this.options.stripLoadedTextTags)
+ text = text.stripTags();
+ this._controls.editor.value = text;
+ this._controls.editor.disabled = false;
+ this.postProcessEditField();
+ }.bind(this),
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+ postProcessEditField: function() {
+ var fpc = this.options.fieldPostCreation;
+ if (fpc)
+ $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
+ },
+ prepareOptions: function() {
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+ Object.extend(this.options, defs);
+ }.bind(this));
+ },
+ prepareSubmission: function() {
+ this._saving = true;
+ this.removeForm();
+ this.leaveHover();
+ this.showSaving();
+ },
+ registerListeners: function() {
+ this._listeners = { };
+ var listener;
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+ listener = this[pair.value].bind(this);
+ this._listeners[pair.key] = listener;
+ if (!this.options.externalControlOnly)
+ this.element.observe(pair.key, listener);
+ if (this.options.externalControl)
+ this.options.externalControl.observe(pair.key, listener);
+ }.bind(this));
+ },
+ removeForm: function() {
+ if (!this._form) return;
+ this._form.remove();
+ this._form = null;
+ this._controls = { };
+ },
+ showSaving: function() {
+ this._oldInnerHTML = this.element.innerHTML;
+ this.element.innerHTML = this.options.savingText;
+ this.element.addClassName(this.options.savingClassName);
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ },
+ triggerCallback: function(cbName, arg) {
+ if ('function' == typeof this.options[cbName]) {
+ this.options[cbName](this, arg);
+ }
+ },
+ unregisterListeners: function() {
+ $H(this._listeners).each(function(pair) {
+ if (!this.options.externalControlOnly)
+ this.element.stopObserving(pair.key, pair.value);
+ if (this.options.externalControl)
+ this.options.externalControl.stopObserving(pair.key, pair.value);
+ }.bind(this));
+ },
+ wrapUp: function(transport) {
+ this.leaveEditMode();
+ // Can't use triggerCallback due to backward compatibility: requires
+ // binding + direct element
+ this._boundComplete(transport, this.element);
+ }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+ dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+ initialize: function($super, element, url, options) {
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+ $super(element, url, options);
+ },
+
+ createEditField: function() {
+ var list = document.createElement('select');
+ list.name = this.options.paramName;
+ list.size = 1;
+ this._controls.editor = list;
+ this._collection = this.options.collection || [];
+ if (this.options.loadCollectionURL)
+ this.loadCollection();
+ else
+ this.checkForExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+
+ loadCollection: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this.showLoadingText(this.options.loadingCollectionText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ var js = transport.responseText.strip();
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+ throw('Server returned an invalid collection representation.');
+ this._collection = eval(js);
+ this.checkForExternalText();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadCollectionURL, options);
+ },
+
+ showLoadingText: function(text) {
+ this._controls.editor.disabled = true;
+ var tempOption = this._controls.editor.firstChild;
+ if (!tempOption) {
+ tempOption = document.createElement('option');
+ tempOption.value = '';
+ this._controls.editor.appendChild(tempOption);
+ tempOption.selected = true;
+ }
+ tempOption.update((text || '').stripScripts().stripTags());
+ },
+
+ checkForExternalText: function() {
+ this._text = this.getText();
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ else
+ this.buildOptionList();
+ },
+
+ loadExternalText: function() {
+ this.showLoadingText(this.options.loadingText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._text = transport.responseText.strip();
+ this.buildOptionList();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+
+ buildOptionList: function() {
+ this._form.removeClassName(this.options.loadingClassName);
+ this._collection = this._collection.map(function(entry) {
+ return 2 === entry.length ? entry : [entry, entry].flatten();
+ });
+ var marker = ('value' in this.options) ? this.options.value : this._text;
+ var textFound = this._collection.any(function(entry) {
+ return entry[0] == marker;
+ }.bind(this));
+ this._controls.editor.update('');
+ var option;
+ this._collection.each(function(entry, index) {
+ option = document.createElement('option');
+ option.value = entry[0];
+ option.selected = textFound ? entry[0] == marker : 0 == index;
+ option.appendChild(document.createTextNode(entry[1]));
+ this._controls.editor.appendChild(option);
+ }.bind(this));
+ this._controls.editor.disabled = false;
+ Field.scrollFreeActivate(this._controls.editor);
+ }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only exists for a while, in order to let ****
+//**** users adapt to the new API. Read up on the new ****
+//**** API and convert your code to it ASAP! ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+ if (!options) return;
+ function fallback(name, expr) {
+ if (name in options || expr === undefined) return;
+ options[name] = expr;
+ };
+ fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
+ fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
+ options.okLink == options.okButton == false ? false : undefined)));
+ fallback('highlightColor', options.highlightcolor);
+ fallback('highlightEndColor', options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+ DefaultOptions: {
+ ajaxOptions: { },
+ autoRows: 3, // Use when multi-line w/ rows == 1
+ cancelControl: 'link', // 'link'|'button'|false
+ cancelText: 'cancel',
+ clickToEditText: 'Click to edit',
+ externalControl: null, // id|elt
+ externalControlOnly: false,
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
+ formClassName: 'inplaceeditor-form',
+ formId: null, // id|elt
+ highlightColor: '#ffff99',
+ highlightEndColor: '#ffffff',
+ hoverClassName: '',
+ htmlResponse: true,
+ loadingClassName: 'inplaceeditor-loading',
+ loadingText: 'Loading...',
+ okControl: 'button', // 'link'|'button'|false
+ okText: 'ok',
+ paramName: 'value',
+ rows: 1, // If 1 and multi-line, uses autoRows
+ savingClassName: 'inplaceeditor-saving',
+ savingText: 'Saving...',
+ size: 0,
+ stripLoadedTextTags: false,
+ submitOnBlur: false,
+ textAfterControls: '',
+ textBeforeControls: '',
+ textBetweenControls: ''
+ },
+ DefaultCallbacks: {
+ callback: function(form) {
+ return Form.serialize(form);
+ },
+ onComplete: function(transport, element) {
+ // For backward compatibility, this one is bound to the IPE, and passes
+ // the element directly. It was too often customized, so we don't break it.
+ new Effect.Highlight(element, {
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
+ },
+ onEnterEditMode: null,
+ onEnterHover: function(ipe) {
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
+ if (ipe._effect)
+ ipe._effect.cancel();
+ },
+ onFailure: function(transport, ipe) {
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
+ },
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+ onLeaveEditMode: null,
+ onLeaveHover: function(ipe) {
+ ipe._effect = new Effect.Highlight(ipe.element, {
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
+ });
+ }
+ },
+ Listeners: {
+ click: 'enterEditMode',
+ keydown: 'checkForEscapeOrReturn',
+ mouseover: 'enterHover',
+ mouseout: 'leaveHover'
+ }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+ loadingCollectionText: 'Loading options...'
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+ initialize: function(element, delay, callback) {
+ this.delay = delay || 0.5;
+ this.element = $(element);
+ this.callback = callback;
+ this.timer = null;
+ this.lastValue = $F(this.element);
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+ },
+ delayedListener: function(event) {
+ if(this.lastValue == $F(this.element)) return;
+ if(this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+ this.lastValue = $F(this.element);
+ },
+ onTimerEvent: function() {
+ this.timer = null;
+ this.callback(this.element, $F(this.element));
+ }
+});
diff --git a/rt/share/html/NoAuth/js/scriptaculous/effects.js b/rt/share/html/NoAuth/js/scriptaculous/effects.js
new file mode 100644
index 0000000..f31a81a
--- /dev/null
+++ b/rt/share/html/NoAuth/js/scriptaculous/effects.js
@@ -0,0 +1,1130 @@
+// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+// Justin Palmer (http://encytemedia.com/)
+// Mark Pilgrim (http://diveintomark.org/)
+// Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+ var color = '#';
+ if (this.slice(0,4) == 'rgb(') {
+ var cols = this.slice(4,this.length-1).split(',');
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+ } else {
+ if (this.slice(0,1) == '#') {
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if (this.length==7) color = this.toLowerCase();
+ }
+ }
+ return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+ }).flatten().join('');
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
+ }).flatten().join('');
+};
+
+Element.setContentZoom = function(element, percent) {
+ element = $(element);
+ element.setStyle({fontSize: (percent/100) + 'em'});
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ return element;
+};
+
+Element.getInlineOpacity = function(element){
+ return $(element).style.opacity || '';
+};
+
+Element.forceRerendering = function(element) {
+ try {
+ element = $(element);
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+ _elementDoesNotExistError: {
+ name: 'ElementDoesNotExistError',
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
+ },
+ Transitions: {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + .5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+ return pos > 1 ? 1 : pos;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+ },
+ pulse: function(pos, pulses) {
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+ },
+ spring: function(pos) {
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+ },
+ DefaultOptions: {
+ duration: 1.0, // seconds
+ fps: 100, // 100= assume 66fps max.
+ sync: false, // true for combining
+ from: 0.0,
+ to: 1.0,
+ delay: 0.0,
+ queue: 'parallel'
+ },
+ tagifyText: function(element) {
+ var tagifyStyle = 'position:relative';
+ if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+
+ element = $(element);
+ $A(element.childNodes).each( function(child) {
+ if (child.nodeType==3) {
+ child.nodeValue.toArray().each( function(character) {
+ element.insertBefore(
+ new Element('span', {style: tagifyStyle}).update(
+ character == ' ' ? String.fromCharCode(160) : character),
+ child);
+ });
+ Element.remove(child);
+ }
+ });
+ },
+ multiple: function(element, effect) {
+ var elements;
+ if (((typeof element == 'object') ||
+ Object.isFunction(element)) &&
+ (element.length))
+ elements = element;
+ else
+ elements = $(element).childNodes;
+
+ var options = Object.extend({
+ speed: 0.1,
+ delay: 0.0
+ }, arguments[2] || { });
+ var masterDelay = options.delay;
+
+ $A(elements).each( function(element, index) {
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+ });
+ },
+ PAIRS: {
+ 'slide': ['SlideDown','SlideUp'],
+ 'blind': ['BlindDown','BlindUp'],
+ 'appear': ['Appear','Fade']
+ },
+ toggle: function(element, effect) {
+ element = $(element);
+ effect = (effect || 'appear').toLowerCase();
+ var options = Object.extend({
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+ }, arguments[2] || { });
+ Effect[element.visible() ?
+ Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
+ }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+ initialize: function() {
+ this.effects = [];
+ this.interval = null;
+ },
+ _each: function(iterator) {
+ this.effects._each(iterator);
+ },
+ add: function(effect) {
+ var timestamp = new Date().getTime();
+
+ var position = Object.isString(effect.options.queue) ?
+ effect.options.queue : effect.options.queue.position;
+
+ switch(position) {
+ case 'front':
+ // move unstarted effects after this effect
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+ e.startOn += effect.finishOn;
+ e.finishOn += effect.finishOn;
+ });
+ break;
+ case 'with-last':
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
+ break;
+ case 'end':
+ // start effect after last queued effect has finished
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
+ break;
+ }
+
+ effect.startOn += timestamp;
+ effect.finishOn += timestamp;
+
+ if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ this.effects.push(effect);
+
+ if (!this.interval)
+ this.interval = setInterval(this.loop.bind(this), 15);
+ },
+ remove: function(effect) {
+ this.effects = this.effects.reject(function(e) { return e==effect });
+ if (this.effects.length == 0) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ },
+ loop: function() {
+ var timePos = new Date().getTime();
+ for(var i=0, len=this.effects.length;i<len;i++)
+ this.effects[i] && this.effects[i].loop(timePos);
+ }
+});
+
+Effect.Queues = {
+ instances: $H(),
+ get: function(queueName) {
+ if (!Object.isString(queueName)) return queueName;
+
+ return this.instances.get(queueName) ||
+ this.instances.set(queueName, new Effect.ScopedQueue());
+ }
+};
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.Base = Class.create({
+ position: null,
+ start: function(options) {
+ function codeForEvent(options,eventName){
+ return (
+ (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
+ (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
+ );
+ }
+ if (options && options.transition === false) options.transition = Effect.Transitions.linear;
+ this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+ this.currentFrame = 0;
+ this.state = 'idle';
+ this.startOn = this.options.delay*1000;
+ this.finishOn = this.startOn+(this.options.duration*1000);
+ this.fromToDelta = this.options.to-this.options.from;
+ this.totalTime = this.finishOn-this.startOn;
+ this.totalFrames = this.options.fps*this.options.duration;
+
+ this.render = (function() {
+ function dispatch(effect, eventName) {
+ if (effect.options[eventName + 'Internal'])
+ effect.options[eventName + 'Internal'](effect);
+ if (effect.options[eventName])
+ effect.options[eventName](effect);
+ }
+
+ return function(pos) {
+ if (this.state === "idle") {
+ this.state = "running";
+ dispatch(this, 'beforeSetup');
+ if (this.setup) this.setup();
+ dispatch(this, 'afterSetup');
+ }
+ if (this.state === "running") {
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+ this.position = pos;
+ dispatch(this, 'beforeUpdate');
+ if (this.update) this.update(pos);
+ dispatch(this, 'afterUpdate');
+ }
+ };
+ })();
+
+ this.event('beforeStart');
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).add(this);
+ },
+ loop: function(timePos) {
+ if (timePos >= this.startOn) {
+ if (timePos >= this.finishOn) {
+ this.render(1.0);
+ this.cancel();
+ this.event('beforeFinish');
+ if (this.finish) this.finish();
+ this.event('afterFinish');
+ return;
+ }
+ var pos = (timePos - this.startOn) / this.totalTime,
+ frame = (pos * this.totalFrames).round();
+ if (frame > this.currentFrame) {
+ this.render(pos);
+ this.currentFrame = frame;
+ }
+ }
+ },
+ cancel: function() {
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).remove(this);
+ this.state = 'finished';
+ },
+ event: function(eventName) {
+ if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+ if (this.options[eventName]) this.options[eventName](this);
+ },
+ inspect: function() {
+ var data = $H();
+ for(property in this)
+ if (!Object.isFunction(this[property])) data.set(property, this[property]);
+ return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
+ }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+ initialize: function(effects) {
+ this.effects = effects || [];
+ this.start(arguments[1]);
+ },
+ update: function(position) {
+ this.effects.invoke('render', position);
+ },
+ finish: function(position) {
+ this.effects.each( function(effect) {
+ effect.render(1.0);
+ effect.cancel();
+ effect.event('beforeFinish');
+ if (effect.finish) effect.finish(position);
+ effect.event('afterFinish');
+ });
+ }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+ initialize: function(object, from, to) {
+ object = Object.isString(object) ? $(object) : object;
+ var args = $A(arguments), method = args.last(),
+ options = args.length == 5 ? args[3] : null;
+ this.method = Object.isFunction(method) ? method.bind(object) :
+ Object.isFunction(object[method]) ? object[method].bind(object) :
+ function(value) { object[method] = value };
+ this.start(Object.extend({ from: from, to: to }, options || { }));
+ },
+ update: function(position) {
+ this.method(position);
+ }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+ initialize: function() {
+ this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+ },
+ update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ // make this work on IE on elements without 'layout'
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ var options = Object.extend({
+ from: this.element.getOpacity() || 0.0,
+ to: 1.0
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ update: function(position) {
+ this.element.setOpacity(position);
+ }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ x: 0,
+ y: 0,
+ mode: 'relative'
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.element.makePositioned();
+ this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+ this.originalTop = parseFloat(this.element.getStyle('top') || '0');
+ if (this.options.mode == 'absolute') {
+ this.options.x = this.options.x - this.originalLeft;
+ this.options.y = this.options.y - this.originalTop;
+ }
+ },
+ update: function(position) {
+ this.element.setStyle({
+ left: (this.options.x * position + this.originalLeft).round() + 'px',
+ top: (this.options.y * position + this.originalTop).round() + 'px'
+ });
+ }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+ return new Effect.Move(element,
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+ initialize: function(element, percent) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ scaleX: true,
+ scaleY: true,
+ scaleContent: true,
+ scaleFromCenter: false,
+ scaleMode: 'box', // 'box' or 'contents' or { } with provided values
+ scaleFrom: 100.0,
+ scaleTo: percent
+ }, arguments[2] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+ this.elementPositioning = this.element.getStyle('position');
+
+ this.originalStyle = { };
+ ['top','left','width','height','fontSize'].each( function(k) {
+ this.originalStyle[k] = this.element.style[k];
+ }.bind(this));
+
+ this.originalTop = this.element.offsetTop;
+ this.originalLeft = this.element.offsetLeft;
+
+ var fontSize = this.element.getStyle('font-size') || '100%';
+ ['em','px','%','pt'].each( function(fontSizeType) {
+ if (fontSize.indexOf(fontSizeType)>0) {
+ this.fontSize = parseFloat(fontSize);
+ this.fontSizeType = fontSizeType;
+ }
+ }.bind(this));
+
+ this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+ this.dims = null;
+ if (this.options.scaleMode=='box')
+ this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+ if (/^content/.test(this.options.scaleMode))
+ this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+ if (!this.dims)
+ this.dims = [this.options.scaleMode.originalHeight,
+ this.options.scaleMode.originalWidth];
+ },
+ update: function(position) {
+ var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+ if (this.options.scaleContent && this.fontSize)
+ this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+ this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+ },
+ finish: function(position) {
+ if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+ },
+ setDimensions: function(height, width) {
+ var d = { };
+ if (this.options.scaleX) d.width = width.round() + 'px';
+ if (this.options.scaleY) d.height = height.round() + 'px';
+ if (this.options.scaleFromCenter) {
+ var topd = (height - this.dims[0])/2;
+ var leftd = (width - this.dims[1])/2;
+ if (this.elementPositioning == 'absolute') {
+ if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
+ if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+ } else {
+ if (this.options.scaleY) d.top = -topd + 'px';
+ if (this.options.scaleX) d.left = -leftd + 'px';
+ }
+ }
+ this.element.setStyle(d);
+ }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ // Prevent executing on elements not in the layout flow
+ if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+ // Disable background image during the effect
+ this.oldStyle = { };
+ if (!this.options.keepBackgroundImage) {
+ this.oldStyle.backgroundImage = this.element.getStyle('background-image');
+ this.element.setStyle({backgroundImage: 'none'});
+ }
+ if (!this.options.endcolor)
+ this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+ if (!this.options.restorecolor)
+ this.options.restorecolor = this.element.getStyle('background-color');
+ // init color calculations
+ this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+ this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+ },
+ update: function(position) {
+ this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+ },
+ finish: function() {
+ this.element.setStyle(Object.extend(this.oldStyle, {
+ backgroundColor: this.options.restorecolor
+ }));
+ }
+});
+
+Effect.ScrollTo = function(element) {
+ var options = arguments[1] || { },
+ scrollOffsets = document.viewport.getScrollOffsets(),
+ elementOffsets = $(element).cumulativeOffset();
+
+ if (options.offset) elementOffsets[1] += options.offset;
+
+ return new Effect.Tween(null,
+ scrollOffsets.top,
+ elementOffsets[1],
+ options,
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
+ );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+ element = $(element);
+ var oldOpacity = element.getInlineOpacity();
+ var options = Object.extend({
+ from: element.getOpacity() || 1.0,
+ to: 0.0,
+ afterFinishInternal: function(effect) {
+ if (effect.options.to!=0) return;
+ effect.element.hide().setStyle({opacity: oldOpacity});
+ }
+ }, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+ to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ effect.element.forceRerendering();
+ },
+ beforeSetup: function(effect) {
+ effect.element.setOpacity(effect.options.from).show();
+ }}, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+ element = $(element);
+ var oldStyle = {
+ opacity: element.getInlineOpacity(),
+ position: element.getStyle('position'),
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height
+ };
+ return new Effect.Parallel(
+ [ new Effect.Scale(element, 200,
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+ Object.extend({ duration: 1.0,
+ beforeSetupInternal: function(effect) {
+ Position.absolutize(effect.effects[0].element);
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().setStyle(oldStyle); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindUp = function(element) {
+ element = $(element);
+ element.makeClipping();
+ return new Effect.Scale(element, 0,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ restoreAfterFinish: true,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindDown = function(element) {
+ element = $(element);
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: 0,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping();
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+ element = $(element);
+ var oldOpacity = element.getInlineOpacity();
+ return new Effect.Appear(element, Object.extend({
+ duration: 0.4,
+ from: 0,
+ transition: Effect.Transitions.flicker,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(effect.element, 1, {
+ duration: 0.3, scaleFromCenter: true,
+ scaleX: false, scaleContent: false, restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+ }
+ });
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+ element = $(element);
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left'),
+ opacity: element.getInlineOpacity() };
+ return new Effect.Parallel(
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+ Object.extend(
+ { duration: 0.5,
+ beforeSetup: function(effect) {
+ effect.effects[0].element.makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ distance: 20,
+ duration: 0.5
+ }, arguments[1] || {});
+ var distance = parseFloat(options.distance);
+ var split = parseFloat(options.duration) / 10.0;
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left') };
+ return new Effect.Move(element,
+ { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ effect.element.undoPositioned().setStyle(oldStyle);
+ }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+ element = $(element).cleanWhitespace();
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.SlideUp = function(element) {
+ element = $(element).cleanWhitespace();
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ }
+ }, arguments[1] || { })
+ );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
+ restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ });
+};
+
+Effect.Grow = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.full
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var initialMoveX, initialMoveY;
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ initialMoveX = initialMoveY = moveX = moveY = 0;
+ break;
+ case 'top-right':
+ initialMoveX = dims.width;
+ initialMoveY = moveY = 0;
+ moveX = -dims.width;
+ break;
+ case 'bottom-left':
+ initialMoveX = moveX = 0;
+ initialMoveY = dims.height;
+ moveY = -dims.height;
+ break;
+ case 'bottom-right':
+ initialMoveX = dims.width;
+ initialMoveY = dims.height;
+ moveX = -dims.width;
+ moveY = -dims.height;
+ break;
+ case 'center':
+ initialMoveX = dims.width / 2;
+ initialMoveY = dims.height / 2;
+ moveX = -dims.width / 2;
+ moveY = -dims.height / 2;
+ break;
+ }
+
+ return new Effect.Move(element, {
+ x: initialMoveX,
+ y: initialMoveY,
+ duration: 0.01,
+ beforeSetup: function(effect) {
+ effect.element.hide().makeClipping().makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ new Effect.Parallel(
+ [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+ new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+ new Effect.Scale(effect.element, 100, {
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+ sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+ ], Object.extend({
+ beforeSetup: function(effect) {
+ effect.effects[0].element.setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+ }
+ }, options)
+ );
+ }
+ });
+};
+
+Effect.Shrink = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.none
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ moveX = moveY = 0;
+ break;
+ case 'top-right':
+ moveX = dims.width;
+ moveY = 0;
+ break;
+ case 'bottom-left':
+ moveX = 0;
+ moveY = dims.height;
+ break;
+ case 'bottom-right':
+ moveX = dims.width;
+ moveY = dims.height;
+ break;
+ case 'center':
+ moveX = dims.width / 2;
+ moveY = dims.height / 2;
+ break;
+ }
+
+ return new Effect.Parallel(
+ [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+ new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+ new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+ ], Object.extend({
+ beforeStartInternal: function(effect) {
+ effect.effects[0].element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+ }, options)
+ );
+};
+
+Effect.Pulsate = function(element) {
+ element = $(element);
+ var options = arguments[1] || { },
+ oldOpacity = element.getInlineOpacity(),
+ transition = options.transition || Effect.Transitions.linear,
+ reverser = function(pos){
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+ };
+
+ return new Effect.Opacity(element,
+ Object.extend(Object.extend({ duration: 2.0, from: 0,
+ afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+ }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+ element = $(element);
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height };
+ element.makeClipping();
+ return new Effect.Scale(element, 5, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(element, 1, {
+ scaleContent: false,
+ scaleY: false,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().setStyle(oldStyle);
+ } });
+ }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ style: { }
+ }, arguments[1] || { });
+
+ if (!Object.isString(options.style)) this.style = $H(options.style);
+ else {
+ if (options.style.include(':'))
+ this.style = options.style.parseStyle();
+ else {
+ this.element.addClassName(options.style);
+ this.style = $H(this.element.getStyles());
+ this.element.removeClassName(options.style);
+ var css = this.element.getStyles();
+ this.style = this.style.reject(function(style) {
+ return style.value == css[style.key];
+ });
+ options.afterFinishInternal = function(effect) {
+ effect.element.addClassName(effect.options.style);
+ effect.transforms.each(function(transform) {
+ effect.element.style[transform.style] = '';
+ });
+ };
+ }
+ }
+ this.start(options);
+ },
+
+ setup: function(){
+ function parseColor(color){
+ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+ color = color.parseColor();
+ return $R(0,2).map(function(i){
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
+ });
+ }
+ this.transforms = this.style.map(function(pair){
+ var property = pair[0], value = pair[1], unit = null;
+
+ if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+ value = value.parseColor();
+ unit = 'color';
+ } else if (property == 'opacity') {
+ value = parseFloat(value);
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ } else if (Element.CSS_LENGTH.test(value)) {
+ var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+ value = parseFloat(components[1]);
+ unit = (components.length == 3) ? components[2] : null;
+ }
+
+ var originalValue = this.element.getStyle(property);
+ return {
+ style: property.camelize(),
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
+ targetValue: unit=='color' ? parseColor(value) : value,
+ unit: unit
+ };
+ }.bind(this)).reject(function(transform){
+ return (
+ (transform.originalValue == transform.targetValue) ||
+ (
+ transform.unit != 'color' &&
+ (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+ )
+ );
+ });
+ },
+ update: function(position) {
+ var style = { }, transform, i = this.transforms.length;
+ while(i--)
+ style[(transform = this.transforms[i]).style] =
+ transform.unit=='color' ? '#'+
+ (Math.round(transform.originalValue[0]+
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+ (Math.round(transform.originalValue[1]+
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+ (Math.round(transform.originalValue[2]+
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+ (transform.originalValue +
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+ (transform.unit === null ? '' : transform.unit);
+ this.element.setStyle(style, true);
+ }
+});
+
+Effect.Transform = Class.create({
+ initialize: function(tracks){
+ this.tracks = [];
+ this.options = arguments[1] || { };
+ this.addTracks(tracks);
+ },
+ addTracks: function(tracks){
+ tracks.each(function(track){
+ track = $H(track);
+ var data = track.values().first();
+ this.tracks.push($H({
+ ids: track.keys().first(),
+ effect: Effect.Morph,
+ options: { style: data }
+ }));
+ }.bind(this));
+ return this;
+ },
+ play: function(){
+ return new Effect.Parallel(
+ this.tracks.map(function(track){
+ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
+ var elements = [$(ids) || $$(ids)].flatten();
+ return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+ }).flatten(),
+ this.options
+ );
+ }
+});
+
+Element.CSS_PROPERTIES = $w(
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
+ 'fontSize fontWeight height left letterSpacing lineHeight ' +
+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
+ 'right textIndent top width wordSpacing zIndex');
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement('div');
+String.prototype.parseStyle = function(){
+ var style, styleRules = $H();
+ if (Prototype.Browser.WebKit)
+ style = new Element('div',{style:this}).style;
+ else {
+ String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
+ style = String.__parseStyleElement.childNodes[0].style;
+ }
+
+ Element.CSS_PROPERTIES.each(function(property){
+ if (style[property]) styleRules.set(property, style[property]);
+ });
+
+ if (Prototype.Browser.IE && this.include('opacity'))
+ styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+ return styleRules;
+};
+
+if (document.defaultView && document.defaultView.getComputedStyle) {
+ Element.getStyles = function(element) {
+ var css = document.defaultView.getComputedStyle($(element), null);
+ return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+ styles[property] = css[property];
+ return styles;
+ });
+ };
+} else {
+ Element.getStyles = function(element) {
+ element = $(element);
+ var css = element.currentStyle, styles;
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+ results[property] = css[property];
+ return results;
+ });
+ if (!styles.opacity) styles.opacity = element.getOpacity();
+ return styles;
+ };
+}
+
+Effect.Methods = {
+ morph: function(element, style) {
+ element = $(element);
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+ return element;
+ },
+ visualEffect: function(element, effect, options) {
+ element = $(element);
+ var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+ new Effect[klass](element, options);
+ return element;
+ },
+ highlight: function(element, options) {
+ element = $(element);
+ new Effect.Highlight(element, options);
+ return element;
+ }
+};
+
+$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
+ 'pulsate shake puff squish switchOff dropOut').each(
+ function(effect) {
+ Effect.Methods[effect] = function(element, options){
+ element = $(element);
+ Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+ return element;
+ };
+ }
+);
+
+$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
+ function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods); \ No newline at end of file
diff --git a/rt/share/html/NoAuth/js/scriptaculous/scriptaculous.js b/rt/share/html/NoAuth/js/scriptaculous/scriptaculous.js
new file mode 100644
index 0000000..3e5543b
--- /dev/null
+++ b/rt/share/html/NoAuth/js/scriptaculous/scriptaculous.js
@@ -0,0 +1,60 @@
+// script.aculo.us scriptaculous.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+ Version: '1.8.2',
+ require: function(libraryName) {
+ // inserting via DOM fails in Safari 2.0, so brute force approach
+ document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+ },
+ REQUIRED_PROTOTYPE: '1.6.0.3',
+ load: function() {
+ function convertVersionString(versionString) {
+ var v = versionString.replace(/_.*|\./g, '');
+ v = parseInt(v + '0'.times(4-v.length));
+ return versionString.indexOf('_') > -1 ? v-1 : v;
+ }
+
+ if((typeof Prototype=='undefined') ||
+ (typeof Element == 'undefined') ||
+ (typeof Element.Methods=='undefined') ||
+ (convertVersionString(Prototype.Version) <
+ convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+ throw("script.aculo.us requires the Prototype JavaScript framework >= " +
+ Scriptaculous.REQUIRED_PROTOTYPE);
+
+ var js = /scriptaculous\.js(\?.*)?$/;
+ $$('head script[src]').findAll(function(s) {
+ return s.src.match(js);
+ }).each(function(s) {
+ var path = s.src.replace(js, ''),
+ includes = s.src.match(/\?.*load=([a-z,]*)/);
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
+ function(include) { Scriptaculous.require(path+include+'.js') });
+ });
+ }
+};
+
+Scriptaculous.load(); \ No newline at end of file
diff --git a/rt/share/html/NoAuth/js/titlebox-state.js b/rt/share/html/NoAuth/js/titlebox-state.js
new file mode 100644
index 0000000..72ffbd4
--- /dev/null
+++ b/rt/share/html/NoAuth/js/titlebox-state.js
@@ -0,0 +1,83 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+function createCookie(name,value,days) {
+ var path = "<%RT->Config->Get('WebPath')%>" ? "<%RT->Config->Get('WebPath')%>" : "/";
+
+ if (days) {
+ var date = new Date();
+ date.setTime(date.getTime()+(days*24*60*60*1000));
+ var expires = "; expires="+date.toGMTString();
+ }
+ else
+ expires = "";
+
+ document.cookie = name+"="+value+expires+"; path="+path;
+}
+
+function loadTitleBoxStates() {
+ var cookies = document.cookie.split(/;\s*/);
+ var len = cookies.length;
+
+ for (var i = 0; i < len; i++) {
+ var c = cookies[i].split('=');
+
+ if (c[0].match(/^TitleBox--/)) {
+ var e = document.getElementById(c[0]);
+ if (e) {
+ var e2 = e.parentNode;
+
+ if (c[1] != 0) {
+ set_rollup_state(e,e2,'shown');
+ }
+ else {
+ set_rollup_state(e,e2,'hidden');
+ }
+ }
+ }
+ }
+}
diff --git a/rt/share/html/NoAuth/js/util.js b/rt/share/html/NoAuth/js/util.js
new file mode 100644
index 0000000..a0d3579
--- /dev/null
+++ b/rt/share/html/NoAuth/js/util.js
@@ -0,0 +1,317 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+/* $(...)
+ Returns DOM node or array of nodes (if more then one argument passed).
+ If argument is node object allready then do nothing.
+ // Stolen from Prototype
+*/
+function $() {
+ var elements = new Array();
+
+ for (var i = 0; i < arguments.length; i++) {
+ var element = arguments[i];
+ if (typeof element == 'string')
+ element = document.getElementById(element);
+
+ if (arguments.length == 1)
+ return element;
+
+ elements.push(element);
+ }
+
+ return elements;
+}
+
+/* Visibility */
+
+function show(id) { delClass( id, 'hidden' ) }
+function hide(id) { addClass( id, 'hidden' ) }
+
+function hideshow(id) { return toggleVisibility( id ) }
+function toggleVisibility(id) {
+ var e = $(id);
+
+ if ( e.className.match( /\bhidden\b/ ) )
+ show(e);
+ else
+ hide(e);
+
+ return false;
+}
+
+function setVisibility(id, visibility) {
+ if ( visibility ) show(id);
+ else hide(id);
+}
+
+function switchVisibility(id1, id2) {
+ // Show both and then hide the one we want
+ show(id1);
+ show(id2);
+ hide(id2);
+ return false;
+}
+
+/* Classes */
+
+function addClass(id, value) {
+ var e = $(id);
+ if ( e.className.match( new RegExp('\b'+ value +'\b') ) )
+ return;
+ e.className += e.className? ' '+value : value;
+}
+
+function delClass(id, value) {
+ var e = $(id);
+ e.className = e.className.replace( new RegExp('\\s?\\b'+ value +'\\b', 'g'), '' );
+}
+
+/* Rollups */
+
+function rollup(id) {
+ var e = $(id);
+ var e2 = e.parentNode;
+
+ if (e.className.match(/\bhidden\b/)) {
+ set_rollup_state(e,e2,'shown');
+ createCookie(id,1,365);
+ }
+ else {
+ set_rollup_state(e,e2,'hidden');
+ createCookie(id,0,365);
+ }
+ return false;
+}
+
+function set_rollup_state(e,e2,state) {
+ if (e && e2) {
+ if (state == 'shown') {
+ show(e);
+ delClass( e2, 'rolled-up' );
+ }
+ else if (state == 'hidden') {
+ hide(e);
+ addClass( e2, 'rolled-up' );
+ }
+ }
+}
+
+
+/* onload handlers */
+/* New code should be using doOnLoad which makes use of prototype
+ instead. See HeaderJavascript. It works better than clobbering
+ window.onload. Left around in case other code is using them */
+
+var onLoadStack = new Array();
+var onLoadLastStack = new Array();
+var onLoadExecuted = 0;
+
+function onLoadHook(commandStr) {
+ if(typeof(commandStr) == "string") {
+ onLoadStack[ onLoadStack.length ] = commandStr;
+ return true;
+ }
+ return false;
+}
+
+// some things *really* need to be done after everything else
+function onLoadLastHook(commandStr) {
+ if(typeof(commandStr) == "string"){
+ onLoadLastStack[onLoadLastStack.length] = commandStr;
+ return true;
+ }
+ return false;
+}
+
+function doOnLoadHooks() {
+ if(onLoadExecuted) return;
+
+ var i;
+ for ( i in onLoadStack ) {
+ eval( onLoadStack[i] );
+ }
+ for ( i in onLoadLastStack ) {
+ eval( onLoadLastStack[i] );
+ }
+ onLoadExecuted = 1;
+}
+
+window.onload = doOnLoadHooks;
+
+/* new onLoad code */
+
+function doOnLoad(handler) {
+ Event.observe(window, 'load', handler);
+}
+
+/* calendar functions */
+
+function openCalWindow(field) {
+ var objWindow = window.open('<%RT->Config->Get('WebPath')%>/Helpers/CalPopup.html?field='+field,
+ 'RT_Calendar',
+ 'height=235,width=285,scrollbars=1');
+ objWindow.focus();
+}
+
+function createCalendarLink(input) {
+ var e = $(input);
+ if (e) {
+ var link = document.createElement('a');
+ link.setAttribute('href', '#');
+ $(link).observe('click', function(ev) { openCalWindow(input); ev.stop(); });
+ //link.setAttribute('onclick', "openCalWindow('"+input+"'); return false;");
+
+ var text = document.createTextNode('<% loc("Calendar") %>');
+ link.appendChild(text);
+
+ var space = document.createTextNode(' ');
+
+ e.parentNode.insertBefore(link, e.nextSibling);
+ e.parentNode.insertBefore(space, e.nextSibling);
+
+ return true;
+ }
+ return false;
+}
+
+/* other utils */
+
+function focusElementById(id) {
+ var e = $(id);
+ if (e) e.focus();
+}
+
+function updateParentField(field, value) {
+ if (window.opener) {
+ window.opener.$(field).value = value;
+ window.close();
+ }
+}
+
+function setCheckbox(form, name, val) {
+ var myfield = form.getElementsByTagName('input');
+ for ( var i = 0; i < myfield.length; i++ ) {
+ if ( name && myfield[i].name != name ) continue;
+ if ( myfield[i].type != 'checkbox' ) continue;
+
+ myfield[i].checked = val;
+ }
+}
+
+/* apply callback to nodes or elements */
+
+function walkChildNodes(parent, callback)
+{
+ if( !parent || !parent.childNodes ) return;
+ var list = parent.childNodes;
+ for( var i = 0; i < list.length; i++ ) {
+ callback( list[i] );
+ }
+}
+
+function walkChildElements(parent, callback)
+{
+ walkChildNodes( parent, function(node) {
+ if( node.nodeType != 1 ) return;
+ return callback( node );
+ } );
+}
+
+/* shredder things */
+
+function showShredderPluginTab( plugin )
+{
+ var plugin_tab_id = 'shredder-plugin-'+ plugin +'-tab';
+ var root = $('shredder-plugin-tabs');
+ walkChildElements( root, function(node) {
+ if( node.id == plugin_tab_id ) {
+ show( node );
+ } else {
+ hide( node );
+ }
+ } );
+ if( plugin ) {
+ show('shredder-submit-button');
+ } else {
+ hide('shredder-submit-button');
+ }
+}
+
+function checkAllObjects()
+{
+ var check = $('shredder-select-all-objects-checkbox').checked;
+ var elements = $('shredder-search-form').elements;
+ for( var i = 0; i < elements.length; i++ ) {
+ if( elements[i].name != 'WipeoutObject' ) {
+ continue;
+ }
+ if( elements[i].type != 'checkbox' ) {
+ continue;
+ }
+ if( check ) {
+ elements[i].checked = true;
+ } else {
+ elements[i].checked = false;
+ }
+ }
+}
+
+function checkboxToInput(target,checkbox,val){
+ var tar=$(target);
+ var box = $(checkbox);
+ if(box.checked){
+ if (tar.value==''){
+ tar.value=val;
+ }else{
+ tar.value=val+', '+tar.value; }
+ }else{
+ tar.value=tar.value.replace(val+', ','');
+ tar.value=tar.value.replace(val,'');
+ }
+}
+
diff --git a/rt/share/html/Prefs/Elements/Tabs b/rt/share/html/Prefs/Elements/Tabs
new file mode 100644
index 0000000..3a63b73
--- /dev/null
+++ b/rt/share/html/Prefs/Elements/Tabs
@@ -0,0 +1,76 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /User/Elements/Tabs,
+ subtabs => $tabs,
+ current_tab => 'Prefs/Other.html',
+ current_subtab => $current_subtab,
+ Title => $Title &>
+
+<%INIT>
+my $tabs;
+$Searches ||= [$m->comp("/Search/Elements/SearchesForObject", Object => RT::System->new($session{'CurrentUser'}))];
+
+$tabs->{a} = {
+ title => loc('Quick search'),
+ path => 'Prefs/Quicksearch.html',
+};
+
+for my $search (@$Searches) {
+ $tabs->{ $search->[0] } = {
+ title => $search->[0],
+ path => "Prefs/Search.html?"
+ .$m->comp('/Elements/QueryString', name => ref($search->[1]).'-'.$search->[1]->Id),
+ };
+}
+</%INIT>
+<%ARGS>
+$GroupObj => undef
+$current_subtab => undef
+$Title => undef
+$Searches => undef
+</%ARGS>
diff --git a/rt/share/html/Prefs/MyRT.html b/rt/share/html/Prefs/MyRT.html
new file mode 100644
index 0000000..c91e0f7
--- /dev/null
+++ b/rt/share/html/Prefs/MyRT.html
@@ -0,0 +1,157 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Prefs/Elements/Tabs,
+ current_tab => 'Prefs/MyRT.html',
+ Title => $title,
+ Searches => \@sys_searches
+&>
+<& /Elements/ListActions, actions => \@results &>
+
+<& /Widgets/SelectionBox:header, nojs => 1 &>
+
+<form method="post" action="MyRT.html">
+<input type="hidden" name="Reset" value="1" />
+<input type="submit" class="button" value="<% loc('Reset to default') %>">
+</form>
+
+<br />
+
+% for my $pane ( @panes ) {
+<&|/Widgets/TitleBox,
+ title => loc('RT at a glance') .': '. loc( $pane->{Name} ),
+ bodyclass => ""
+&>
+<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &>
+</&>
+% }
+
+<&|/Widgets/TitleBox, title => loc('Options'), bodyclass => "" &>
+<form method="post" action="MyRT.html">
+<&|/l&>Rows per box</&>:
+<input name="SummaryRows" value="<% $ARGS{SummaryRows} %>" />
+<input type="submit" class="button" name="UpdateSummaryRows" value="<% loc('Save') %>" />
+</form>
+</&>
+
+<%INIT>
+my @results;
+my $title = loc("Customize").' '.loc("RT at a glance");
+my $user = $session{'CurrentUser'}->UserObj;
+
+if ( $ARGS{'UpdateSummaryRows'} ) {
+ unless ( $ARGS{SummaryRows} && int $ARGS{SummaryRows} > 0 ) {
+ push @results, loc ("Illegal '[_1]' preference value.", loc('summary rows'));
+ $ARGS{SummaryRows} = 0;
+ }
+ else {
+ my ($ok, $msg) = $user->SetPreferences( 'SummaryRows', int $ARGS{SummaryRows} );
+ push @results, $ok ? loc('Preferences saved for [_1].', loc('summary rows')) : $msg;
+ }
+}
+$ARGS{'SummaryRows'} ||= $user->Preferences('SummaryRows', RT->Config->Get('DefaultSummaryRows'));
+
+if ($ARGS{Reset}) {
+ my ($ok, $msg) = $user->SetPreferences('HomepageSettings', {});
+ push @results, $ok ? loc('Preferences saved.') : $msg;
+ delete $session{'my_rt_portlets'};
+}
+
+unless (exists $session{'my_rt_portlets'}) {
+ my ($default_portlets) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings');
+ my $portlets = $default_portlets ? $default_portlets->Content : {};
+ $session{'my_rt_portlets'} = $user->Preferences('HomepageSettings', $portlets);
+}
+my $portlets = $session{'my_rt_portlets'};
+
+my %seen;
+my @items = map ["component-$_", $_], grep !$seen{$_}++, @{RT->Config->Get('HomepageComponents')};
+
+my $sys = RT::System->new($session{'CurrentUser'});
+my @objs = ($sys);
+
+push @objs, RT::SavedSearches->new( $session{CurrentUser} )->_PrivacyObjects
+ if $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch',
+ Object => $RT::System );
+
+my @sys_searches;
+for my $object (@objs) {
+ for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) {
+ my ($desc, $search) = @$_;
+ my $SearchType = $search->Content->{'SearchType'} || 'Ticket';
+ if ($object eq $sys && $SearchType eq 'Ticket') {
+ push @items, ["system-$desc", $desc];
+ push @sys_searches, [$desc, $search];
+ }
+ 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"];
+ }
+ }
+}
+
+my @panes = $m->comp(
+ '/Admin/Elements/ConfigureMyRT',
+ panes => ['body', 'summary'],
+ Action => 'MyRT.html',
+ items => \@items,
+ current_portlets => $portlets,
+ OnSave => sub {
+ my ( $conf, $pane ) = @_;
+ my ($ok, $msg) = $user->SetPreferences( 'HomepageSettings', $conf );
+ push @results, $ok ? loc('Preferences saved for [_1].', $pane) : $msg;
+ delete $session{'my_rt_portlets'};
+ }
+);
+
+$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1 )
+ for @panes;
+
+</%INIT>
diff --git a/rt/share/html/Prefs/Other.html b/rt/share/html/Prefs/Other.html
new file mode 100644
index 0000000..9608fb6
--- /dev/null
+++ b/rt/share/html/Prefs/Other.html
@@ -0,0 +1,111 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /User/Elements/Tabs,
+ current_tab => 'Prefs/Other.html',
+ Title => $title,
+&>
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="Other.html">
+% foreach my $section( RT->Config->Sections ) {
+<&|/Widgets/TitleBox, title => loc( $section ) &>
+% foreach my $option( RT->Config->Options( Section => $section ) ) {
+% my $meta = RT->Config->Meta( $option );
+<& $meta->{'Widget'},
+ Default => 1,
+ %{ $m->comp('/Widgets/FinalizeWidgetArguments', WidgetArguments =>
+ $meta->{'WidgetArguments'} ) },
+ Name => $option,
+ DefaultValue => scalar RT->Config->Get( $option ),
+ CurrentValue => $preferences->{ $option },
+&>
+% }
+</&>
+% }
+
+% if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
+<&|/Widgets/TitleBox, title => loc( 'Cryptography' ) &>
+<&|/l&>Preferred key</&>: <& /Elements/GnuPG/SelectKeyForEncryption, EmailAddress => $UserObj->EmailAddress, Default => $UserObj->PreferredKey &>
+</&>
+% }
+
+<& /Elements/Submit, Name => 'Update', Label => loc('Save Changes') &>
+</form>
+<%INIT>
+my @results;
+my $title = loc("Settings");
+
+my $UserObj = $session{'CurrentUser'}->UserObj;
+my $preferences = $UserObj->Preferences( $RT::System );
+
+if ((defined $PreferredKey) && $PreferredKey ne $UserObj->FirstAttribute('PreferredKey')) {
+ my ($code, $msg) = $UserObj->SetAttribute(Name => 'PreferredKey', Content => $PreferredKey);
+ push @results, loc('Preferred Key: [_1]', loc_fuzzy($msg));
+}
+
+if ( $Update ) {
+ $preferences ||= {};
+ $m->comp( '/Widgets/BulkProcess', Meta => {
+ map { $_ => RT->Config->Meta($_) } RT->Config->Options
+ },
+ Store => $preferences,
+ Types => [RT->Config->Options], Default => 1, Arguments => \%ARGS,
+ DefaultValue => { map { $_ => RT->Config->Get($_) }
+ RT->Config->Options
+ }, );
+
+ my ($ok, $msg) = $UserObj->SetPreferences( $RT::System, $preferences );
+ push @results, $ok ? loc("Preferences saved.") : $msg;
+}
+</%INIT>
+<%ARGS>
+$Update => 0,
+$User => undef,
+$PreferredKey => undef,
+</%ARGS>
diff --git a/rt/share/html/Prefs/Quicksearch.html b/rt/share/html/Prefs/Quicksearch.html
new file mode 100644
index 0000000..fc14577
--- /dev/null
+++ b/rt/share/html/Prefs/Quicksearch.html
@@ -0,0 +1,97 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Prefs/Elements/Tabs,
+ current_tab => 'Prefs/MyRT.html',
+ current_subtab => 'Prefs/Quicksearch.html',
+ Title => $title
+&>
+<& /Elements/ListActions, actions => \@actions &>
+<h1><&|/l&>Select queues to be displayed on the "RT at a glance" page</&></h1>
+<form method="post" action="Quicksearch.html" name="Preferences">
+<ul>
+% for my $queue (@queues) {
+<li><input type="checkbox" class="checkbox" name="Want-<%$queue->Name%>" value="1"
+% unless ($unwanted->{$queue->Name}) {
+checked="checked"
+% }
+/><%$queue->Name%>: <%$queue->Description%></li>
+% }
+</ul>
+<& /Elements/Submit, Caption => loc("Save Changes"), Label => loc('Save'), Name => 'Save'&>
+
+</form>
+
+<%INIT>
+my @actions;
+my $title = loc("Customize").' '.loc("Quick search");
+# The queue list is not loaded from cache, so it might be a bit inconsistent
+my $user = $session{'CurrentUser'}->UserObj;
+my $unwanted = $user->Preferences('QuickSearch', {});
+my $Queues = RT::Queues->new($session{'CurrentUser'});
+$Queues->UnLimit;
+my @queues = grep {$_->CurrentUserHasRight('ShowTicket')} @{$Queues->ItemsArrayRef};
+
+if ($ARGS{'Save'}) {
+ for my $queue (@queues) {
+ if ($ARGS{"Want-".$queue->Name}) {
+ delete $unwanted->{$queue->Name};
+ }
+ else {
+ ++$unwanted->{$queue->Name};
+ }
+ }
+
+ my ($ok, $msg) = $user->SetPreferences('QuickSearch', $unwanted);
+ push @actions, $ok ? loc('Preferences saved.') : $msg;
+
+ # Let QueueSummary rebuild the cache
+ delete $session{'quick_search_queues'};
+}
+
+</%INIT>
diff --git a/rt/share/html/Prefs/Search.html b/rt/share/html/Prefs/Search.html
new file mode 100644
index 0000000..c64078b
--- /dev/null
+++ b/rt/share/html/Prefs/Search.html
@@ -0,0 +1,111 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Prefs/Elements/Tabs,
+ current_tab => 'Prefs/MyRT.html',
+# current_subtab => 'Prefs/Search.html?name='.$m->comp('/Elements/QueryString', name => $ARGS{name}),
+ current_subtab => 'Prefs/Search.html?name='.$ARGS{name},
+ Title => $title
+&>
+<& /Elements/ListActions, actions => \@actions &>
+% if ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) {
+<p>
+ <&|/l&>You can also edit the predefined search itself</&>:
+ <a href="<% RT->Config->Get('WebPath').'/Search/Build.html?'.
+ $m->comp('/Elements/QueryString',
+ SavedSearchLoad => 'RT::System-1-SavedSearch-'.$id) %>"><% $search->Name %></a>
+</p>
+% }
+
+<form method="post" action="Search.html" name="BuildQuery">
+<input type="hidden" name="name" value="<%$ARGS{name}%>" class="hidden" />
+<input type="hidden" name="Format" value="<%$ARGS{Format}%>" class="hidden" />
+
+<& /Search/Elements/DisplayOptions, %$SearchArg, %ARGS,
+ AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat &>
+<& /Elements/Submit, Caption => loc("Save Changes"), Label => loc('Save'), Name => 'Save'&>
+
+</form>
+
+<%INIT>
+my @actions;
+my $title = loc("Customize").' ';
+
+my @fields = qw(Format Order OrderBy RowsPerPage);
+$ARGS{name} ||= '';
+my ($class, $id) = ( $ARGS{name} =~ m/^(.*)-(\d+)$/ );
+
+Abort('No search specified')
+ unless defined $class and $class eq 'RT::Attribute';
+
+my $search = $class->new ($session{'CurrentUser'});
+$search->LoadById ($id);
+$title .= loc ($search->Description, loc ('"N"'));
+my $user = $session{'CurrentUser'}->UserObj;
+my $SearchArg = $user->Preferences($search, $search->Content);
+$ARGS{Order} = (ref $ARGS{Order} ? join('|',grep {/\S/} @{$ARGS{Order}}) : $ARGS{Order});
+$ARGS{OrderBy} = (ref $ARGS{OrderBy} ? join('|',grep {/\S/} @{$ARGS{OrderBy}}) : $ARGS{OrderBy});
+for (@fields) {
+ $ARGS{$_} = $SearchArg->{$_} unless defined $ARGS{$_};
+}
+$ARGS{'Order'} = join '|', grep defined && /\S/, (ref $ARGS{'Order'})? @{$ARGS{'Order'}}: $ARGS{'Order'};
+$ARGS{'OrderBy'} = join '|', grep defined && /\S/, (ref $ARGS{'OrderBy'})? @{$ARGS{'OrderBy'}}: $ARGS{'OrderBy'};
+
+my ( $AvailableColumns, $CurrentFormat );
+( $ARGS{Format}, $AvailableColumns, $CurrentFormat ) = $m->comp(
+ '/Search/Elements/BuildFormatString',
+ cfqueues => {}, %ARGS
+);
+
+if ($ARGS{'Save'}) {
+ my $hash = {map { $_ => $ARGS{$_}} @fields};
+ my ($ok, $msg) = $user->SetPreferences($search, $hash);
+ push @actions, $ok ? loc('Preferences saved.') : $msg;
+}
+
+</%INIT>
diff --git a/rt/share/html/Prefs/SearchOptions.html b/rt/share/html/Prefs/SearchOptions.html
new file mode 100644
index 0000000..e40265f
--- /dev/null
+++ b/rt/share/html/Prefs/SearchOptions.html
@@ -0,0 +1,111 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Search Preferences") &>
+<& /User/Elements/Tabs,
+ current_tab => "Prefs/SearchOptions.html",
+ Title => loc("Search Preferences")
+&>
+<& /Elements/ListActions, actions => \@actions &>
+
+<form method="post" action="SearchOptions.html">
+<input type="hidden" class="hidden" name="Format" value="<%$Format%>" />
+ <& /Search/Elements/DisplayOptions, %ARGS,
+ Format=> $Format,
+ AvailableColumns => $AvailableColumns,
+ CurrentFormat => $CurrentFormat,
+ RowsPerPage => $RowsPerPage,
+ OrderBy => $OrderBy,
+ Order => $Order &>
+
+<& /Elements/Submit, Name => 'SavePreferences', Label => loc('Save Changes') &>
+</form>
+<%INIT>
+my @actions;
+
+# {{{ If we're saving search preferences, do that now
+$Order = join '|', grep defined && /\S/, (ref $Order)? @{$Order}: $Order;
+$OrderBy = join '|', grep defined && /\S/, (ref $OrderBy)? @{$OrderBy}: $OrderBy;
+
+$Order = (ref $Order ? join('|',grep {/\S/} @{$Order}) : $Order);
+$OrderBy = (ref $OrderBy ? join('|',grep {/\S/} @{$OrderBy}) : $OrderBy);
+if ($ARGS{'SavePreferences'}) {
+ my ($ok, $msg) = $session{'CurrentUser'}->UserObj->SetPreferences("SearchDisplay",
+ {
+ Format => $Format,
+ Order => $Order,
+ OrderBy => $OrderBy,
+ RowsPerPage => $RowsPerPage,
+ });
+ push @actions, $ok ? loc("Preferences saved.") : $msg;
+}
+
+# }}}
+
+# Read from user preferences
+my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {};
+
+$Format ||= $prefs->{'Format'};
+$Order ||= ($prefs->{'Order'} || 'ASC');
+$OrderBy ||= ($prefs->{'OrderBy'} || 'id');
+($RowsPerPage = defined( $prefs->{'RowsPerPage'} ) ? $prefs->{'RowsPerPage'} : 50) unless defined ($RowsPerPage);
+
+my ( $AvailableColumns, $CurrentFormat );
+( $Format, $AvailableColumns, $CurrentFormat ) = $m->comp(
+ '/Search/Elements/BuildFormatString',
+ %ARGS, Format => $Format
+);
+</%INIT>
+
+<%ARGS>
+$Format => undef
+$Description => undef
+$Order => undef
+$OrderBy => undef
+$RowsPerPage => undef
+</%ARGS>
+
diff --git a/rt/share/html/REST/1.0/Forms/attachment/default b/rt/share/html/REST/1.0/Forms/attachment/default
new file mode 100644
index 0000000..05ef02c
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/attachment/default
@@ -0,0 +1,102 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/attachment/default
+%#
+<%ARGS>
+$id
+$args => undef
+</%ARGS>
+<%INIT>
+my @data;
+my ($c, $o, $k, $e) = ("", [], {}, "");
+my $attachment = new RT::Attachment $session{CurrentUser};
+
+$attachment->Load($id);
+unless ( $attachment->Id ) {
+ return [ "# Attachment $id does not exist.", [], {}, 1 ];
+}
+unless ( $attachment->Id eq $id ) {
+ return [ "# Invalid attachment id: $id", [], {}, 1 ];
+}
+
+my @arglist = split( '/', $args || "" );
+my $content;
+
+if ( @argslist and $arglist[0] eq 'content' ) {
+ $c = $attachment->OriginalContent;
+} else {
+ my @data;
+ push @data, [ id => "attachment/" . $attachment->Id ];
+ push @data, [ Subject => $attachment->Subject ];
+ push @data, [ Creator => $attachment->Creator ];
+ push @data, [ Created => $attachment->Created ];
+ push @data, [ Transaction => $attachment->TransactionId ];
+ push @data, [ Parent => "attachment/" . $attachment->Parent ];
+ push @data, [ MessageId => $attachment->MessageId ];
+ push @data, [ Filename => $attachment->Filename ];
+ push @data, [ ContentType => $attachment->ContentType ];
+ push @data, [ ContentEncoding => $attachment->ContentEncoding ];
+ push @data, [ Headers => $attachment->Headers ];
+ if ( $attachment->ContentType =~ m|^text/| ) {
+ push @data, [ Content => $attachment->Content ];
+ } else {
+ push @data,
+ [ Content =>
+ "Content is not text and will not be displayed!\n"
+ . "Use \"rt show attachment/<id>/content [> file.ext]\" to get the content."
+ ];
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map { $_->[0] } @data ];
+ $k = \%k;
+}
+
+return [ $c, $o, $k, $e ];
+
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/group/customfields b/rt/share/html/REST/1.0/Forms/group/customfields
new file mode 100644
index 0000000..7341bac
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/group/customfields
@@ -0,0 +1,96 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/group/customfields
+%#
+<%ARGS>
+$id
+$format => 's'
+$changes => {}
+</%ARGS>
+<%perl>
+my @comments;
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my $group = new RT::Group $session{CurrentUser};
+
+$group->Load($id);
+if (!$group->Id) {
+ return [ "# Group $id does not exist.", [], {}, 1 ];
+}
+
+if (%$changes) {
+ $e = 1;
+ $c = "Cannot modify Group CF definitions via REST";
+ goto DONE;
+}
+
+my @data;
+
+push @data, [ id => "group/" . $group->Id ];
+my $gcfs = $group->CustomFields;
+while ( my $gcf = $gcfs->Next() ) {
+ if ( $format eq "l" ) {
+ my $cfadmin
+ = ( $gcf->SingleValue ? 'SingleValue' : 'MultiValue' )
+ . $gcf->Type
+ . ( $gcf->Pattern ? ( ' ' . $gcf->FriendlyPattern ) : '' );
+
+ push @data,
+ [ $gcf->Name . ' (' . $gcf->Description . ')' => $cfadmin ];
+ } else {
+ push @data, [ $gcf->Name => "" ];
+ }
+}
+
+my %k = map {@$_} @data;
+$o = [ map { $_->[0] } @data ];
+$k = \%k;
+
+DONE:
+$c ||= join("\n", @comments) if @comments;
+return [ $c, $o, $k, $e ];
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/group/default b/rt/share/html/REST/1.0/Forms/group/default
new file mode 100644
index 0000000..b286c85
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/group/default
@@ -0,0 +1,203 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/group/default
+%#
+<%ARGS>
+$id
+$format => 's'
+$fields => undef # these are the fields passed to the rt "-f" flag.
+$changes => {}
+</%ARGS>
+<%perl>
+my @comments;
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my %data = %$changes;
+my $group = new RT::Group $session{CurrentUser};
+my @fields = qw(Name Description);
+my %fields = map { lc $_ => $_ } @fields;
+
+if ($id ne 'new') {
+ $group->Load($id);
+ if (!$group->Id) {
+ return [ "# Group $id does not exist.", [], {}, 1 ];
+ }
+}
+else {
+ if (%data == 0) {
+ return [
+ "# Required: Name",
+ [ qw(id Name Description) ],
+ {
+ id => "group/new",
+ Name => "",
+ Description => ""
+ },
+ 0
+ ];
+ }
+ else {
+ my %v;
+ my %create = %fields;
+ $create{name} = "Name";
+ $create{description} = "Description";
+ # Do any fields need to be excluded here?
+
+ foreach my $k (keys %data) {
+ if (exists $create{lc $k}) {
+ $v{$create{lc $k}} = delete $data{$k};
+ }
+ }
+
+ $group->CreateUserDefinedGroup(%v);
+ unless ($group->Id) {
+ return [ "# Could not create group.", [], {}, 1 ];
+ }
+
+ $id = $group->Id;
+ delete $data{id};
+ push(@comments, "# Group $id created.");
+ goto DONE if %data == 0;
+ }
+}
+
+if (%data == 0) {
+ my @data;
+
+ push @data, [ id => "group/".$group->Id ];
+ push @data, [ Name => $group->Name ];
+ push @data, [ Description => $group->Description ];
+
+
+ # Members
+ my $gms = [];
+ my $GroupMembers = $group->MembersObj();
+ while ( my $mo = $GroupMembers->Next() ) {
+ if ( $mo->MemberObj->IsGroup ) {
+ my $us = $mo->MemberObj->Object->UserMembersObj();
+ my @users;
+ while ( my $u = $us->Next() ) {
+ push @users, $u->RealName . ' <' . $u->EmailAddress . '>';
+ }
+ push @$gms,
+ 'GROUP ['
+ . $mo->MemberObj->Object->Name . ']' . ' ('
+ . join( ';', @users ) . ')';
+ } elsif ( $mo->MemberObj->IsUser ) {
+ push @$gms,
+ $mo->MemberObj->Object->RealName . ' <'
+ . $mo->MemberObj->Object->EmailAddress . '>';
+ }
+ }
+ push @data, [ Members => $gms ];
+
+ # Custom fields
+ my $CustomFields = $group->CustomFields;
+ while ( my $CustomField = $CustomFields->Next() ) {
+ next
+ unless ( !%$fields
+ || exists $fields->{ lc "CF-" . $CustomField->Name } );
+ next unless $CustomField->CurrentUserHasRight('SeeCustomField');
+ my $CFvalues = $group->CustomFieldValues( $CustomField->Id );
+ my @CFvalues;
+ while ( my $CFvalue = $CFvalues->Next() ) {
+ push @CFvalues, $CFvalue->Content;
+ }
+ push @data, [ "CF-" . $CustomField->Name => \@CFvalues ];
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+}
+else {
+ my ($get, $set, $key, $val, $n, $s);
+
+ foreach $key (keys %data) {
+ $val = $data{$key};
+ $key = lc $key;
+ $n = 1;
+
+ if ($key eq 'name' || $key eq 'description' || exists $fields{$key})
+ {
+ if (exists $fields{$key}) {
+ $key = $fields{$key};
+ }
+ else {
+ $key = "Description" if $key eq 'description';
+ $key = "Name" if $key eq 'name';
+ }
+ $set = "Set$key";
+
+ next if $val eq $group->$key;
+ ($n, $s) = $group->$set($val);
+ }
+ elsif ($key ne 'id') {
+ $n = 0;
+ $s = "Unknown field.";
+ }
+
+ SET:
+ if ($n == 0) {
+ $e = 1;
+ push @comments, "# $key: $s";
+ unless (@$o) {
+ my %o = keys %$changes;
+ delete @o{"id", @fields};
+ @$o = ("id", @fields, keys %o);
+ $k = $changes;
+ }
+ }
+ }
+
+ push(@comments, "# Group $id updated.") unless $n == 0;
+}
+
+DONE:
+$c ||= join("\n", @comments) if @comments;
+return [ $c, $o, $k, $e ];
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/group/ns b/rt/share/html/REST/1.0/Forms/group/ns
new file mode 100644
index 0000000..c2359b2
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/group/ns
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/group/ns
+%#
+<%ARGS>
+$id
+</%ARGS>
+<%perl>
+use RT::Groups;
+
+my $groups = new RT::Groups $session{CurrentUser};
+$groups->Limit(FIELD => 'Name', OPERATOR => '=', VALUE => $id);
+if ($groups->Count == 0) {
+ return (0, "No group named $id exists.");
+}
+return $groups->Next->Id;
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/queue/customfields b/rt/share/html/REST/1.0/Forms/queue/customfields
new file mode 100644
index 0000000..a4f05fc
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/queue/customfields
@@ -0,0 +1,96 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/queue/customfields
+%#
+<%ARGS>
+$id
+$format => 's'
+$changes => {}
+</%ARGS>
+<%perl>
+my @comments;
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my $queue = new RT::Queue $session{CurrentUser};
+
+$queue->Load($id);
+if (!$queue->Id) {
+ return [ "# Queue $id does not exist.", [], {}, 1 ];
+}
+
+if (%$changes) {
+ $e = 1;
+ $c = "Cannot modify Queue CF definitions via REST";
+ goto DONE;
+}
+
+my @data;
+
+push @data, [ id => "queue/" . $queue->Id ];
+my $qcfs = $queue->CustomFields;
+while ( my $qcf = $qcfs->Next() ) {
+ if ( $format eq "l" ) {
+ my $cfadmin
+ = ( $qcf->SingleValue ? 'SingleValue' : 'MultiValue' )
+ . $qcf->Type
+ . ( $qcf->Pattern ? ( ' ' . $qcf->FriendlyPattern ) : '' );
+
+ push @data,
+ [ $qcf->Name . ' (' . $qcf->Description . ')' => $cfadmin ];
+ } else {
+ push @data, [ $qcf->Name => "" ];
+ }
+}
+
+my %k = map {@$_} @data;
+$o = [ map { $_->[0] } @data ];
+$k = \%k;
+
+DONE:
+$c ||= join("\n", @comments) if @comments;
+return [ $c, $o, $k, $e ];
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/queue/default b/rt/share/html/REST/1.0/Forms/queue/default
new file mode 100755
index 0000000..58691dd
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/queue/default
@@ -0,0 +1,186 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/queue/default
+%#
+<%ARGS>
+$id
+$format => 's'
+$fields => undef # these are the fields passed to the rt "-f" flag.
+$changes => {}
+</%ARGS>
+<%perl>
+my @comments;
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my %data = %$changes;
+my $queue = new RT::Queue $session{CurrentUser};
+my @fields = qw(Name Description CorrespondAddress CommentAddress
+ InitialPriority FinalPriority DefaultDueIn);
+my %fields = map { lc $_ => $_ } @fields;
+
+if ($id ne 'new') {
+ $queue->Load($id);
+ if (!$queue->Id) {
+ return [ "# Queue $id does not exist.", [], {}, 1 ];
+ }
+}
+else {
+ if (keys %data == 0) {
+ return [
+ "# Required: Name",
+ [ "id", @fields ],
+ {
+ id => 'queue/new',
+ Name => '<queue name>',
+ Description => "",
+ CommentAddress => "",
+ CorrespondAddress => "",
+ InitialPriority => "",
+ FinalPriority => "",
+ DefaultDueIn => "",
+ },
+ 0
+ ];
+ }
+ else {
+ my %v;
+ my %create = %fields;
+
+ foreach my $k (keys %data) {
+ if (exists $create{lc $k}) {
+ $v{$create{lc $k}} = delete $data{$k};
+ }
+ }
+
+ if ($v{Name} eq '<queue name>') {
+ my %o = keys %$changes;
+ delete @o{"id", @fields};
+ return [
+ "# Please set the queue name.",
+ [ "id", @fields, keys %o ], $changes, 1
+ ];
+ }
+
+ $queue->Create(%v);
+ unless ($queue->Id) {
+ return [ "# Could not create queue.", [], {}, 1 ];
+ }
+
+ delete $data{id};
+ $id = $queue->Id;
+ push(@comments, "# Queue $id created.");
+ goto DONE if keys %data == 0;
+ }
+}
+
+if ( keys %data == 0) {
+ my @data;
+
+ push @data, [ id => "queue/".$queue->Id ];
+ foreach my $key (@fields) {
+ push @data, [ $key => $queue->$key ];
+ }
+
+ # Custom fields
+ my $CustomFields = $queue->CustomFields;
+ while ( my $CustomField = $CustomFields->Next() ) {
+ next
+ unless ( !%$fields
+ || exists $fields->{ lc "CF-" . $CustomField->Name } );
+ next unless $CustomField->CurrentUserHasRight('SeeCustomField');
+ my $CFvalues = $queue->CustomFieldValues( $CustomField->Id );
+ my @CFvalues;
+ while ( my $CFvalue = $CFvalues->Next() ) {
+ push @CFvalues, $CFvalue->Content;
+ }
+ push @data, [ "CF-" . $CustomField->Name => \@CFvalues ];
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+}
+else {
+ my ($get, $set, $key, $val, $n, $s);
+
+ foreach $key (keys %data) {
+ $val = $data{$key};
+ $key = lc $key;
+ $n = 1;
+
+ if (exists $fields{$key}) {
+ $key = $fields{$key};
+ $set = "Set$key";
+
+ next if $val eq $queue->$key;
+ ($n, $s) = $queue->$set($val);
+ }
+ elsif ($key ne 'id') {
+ $n = 0;
+ $s = "Unknown field.";
+ }
+
+ SET:
+ if ($n == 0) {
+ $e = 1;
+ push @comments, "# $key: $s";
+ unless (@$o) {
+ my %o = keys %$changes;
+ delete @o{"id", @fields};
+ @$o = ("id", @fields, keys %o);
+ $k = $changes;
+ }
+ }
+ }
+
+ push(@comments, "# Queue $id updated.") unless $n == 0;
+}
+
+DONE:
+$c ||= join("\n", @comments) if @comments;
+return [ $c, $o, $k, $e ];
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/queue/ns b/rt/share/html/REST/1.0/Forms/queue/ns
new file mode 100755
index 0000000..dea51f6
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/queue/ns
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/queue/ns
+%#
+<%ARGS>
+$id
+</%ARGS>
+<%perl>
+use RT::Queues;
+
+my $queues = new RT::Queues $session{CurrentUser};
+$queues->Limit(FIELD => 'Name', OPERATOR => '=', VALUE => $id);
+if ($queues->Count == 0) {
+ return (0, "No queue named $id exists.");
+}
+return $queues->Next->Id;
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/queue/ticketcustomfields b/rt/share/html/REST/1.0/Forms/queue/ticketcustomfields
new file mode 100644
index 0000000..27db934
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/queue/ticketcustomfields
@@ -0,0 +1,97 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/queue/ticketcustomfields
+%#
+<%ARGS>
+$id
+$format => 's'
+$changes => {}
+</%ARGS>
+<%perl>
+my @comments;
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my $queue = new RT::Queue $session{CurrentUser};
+
+$queue->Load($id);
+if (!$queue->Id) {
+ return [ "# Queue $id does not exist.", [], {}, 1 ];
+}
+
+if (%$changes) {
+ $e = 1;
+ $c = "Cannot modify Queue CF definitions via REST";
+ goto DONE;
+}
+
+my @data;
+
+push @data, [ id => "queue/" . $queue->Id ];
+my $qcfs = RT::CustomFields->new($session{CurrentUser});
+$qcfs->LimitToGlobalOrQueue($id);
+while ( my $qcf = $qcfs->Next() ) {
+ if ( $format eq "l" ) {
+ my $cfadmin
+ = ( $qcf->SingleValue ? 'SingleValue' : 'MultiValue' )
+ . $qcf->Type
+ . ( $qcf->Pattern ? ( ' ' . $qcf->FriendlyPattern ) : '' );
+
+ push @data,
+ [ $qcf->Name . ' (' . $qcf->Description . ')' => $cfadmin ];
+ } else {
+ push @data, [ $qcf->Name => "" ];
+ }
+}
+
+my %k = map {@$_} @data;
+$o = [ map {$_->[0]} @data ];
+$k = \%k;
+
+DONE:
+$c ||= join("\n", @comments) if @comments;
+return [ $c, $o, $k, $e ];
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/ticket/attachments b/rt/share/html/REST/1.0/Forms/ticket/attachments
new file mode 100755
index 0000000..33dd888
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/ticket/attachments
@@ -0,0 +1,135 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/ticket/attachments
+%#
+<%ARGS>
+$id
+$args => undef
+</%ARGS>
+<%INIT>
+my @data;
+my ($c, $o, $k, $e) = ("", [], {}, "");
+my $ticket = new RT::Ticket $session{CurrentUser};
+
+$ticket->Load($id);
+unless ($ticket->Id) {
+ return [ "# Ticket $id does not exist.", [], {}, 1 ];
+}
+
+my @arglist = split('/', $args || '');
+my ($aid, $content);
+
+if ( defined $arglist[1] && $arglist[1] eq 'content') {
+ $aid = $arglist[0];
+ $content = 1;
+} else {
+ $aid = $args;
+ $content = 0;
+}
+
+if ($aid) {
+ unless ($aid =~ /^\d+$/) {
+ return [ "# Invalid attachment id: $aid", [], {}, 1 ];
+ }
+ my $attachment = new RT::Attachment $session{CurrentUser};
+ $attachment->Load($aid);
+ unless ($attachment->Id eq $aid) {
+ return [ "# Invalid attachment id: $aid", [], {}, 1 ];
+ }
+ if ($content) {
+ $c = $attachment->OriginalContent;
+ # if we're sending a binary attachment (and only the attachment)
+ # flag it so bin/rt knows to special case it
+ if ($attachment->ContentType !~ /^text\//) {
+ $r->content_type($attachment->ContentType);
+ }
+ } else {
+ my @data;
+ push @data, [ id => $attachment->Id ];
+ push @data, [ Subject => $attachment->Subject ];
+ push @data, [ Creator => $attachment->Creator ];
+ push @data, [ Created => $attachment->Created ];
+ push @data, [ Transaction => $attachment->TransactionId ];
+ push @data, [ Parent => $attachment->Parent ];
+ push @data, [ MessageId => $attachment->MessageId ];
+ push @data, [ Filename => $attachment->Filename ];
+ push @data, [ ContentType => $attachment->ContentType ];
+ push @data, [ ContentEncoding => $attachment->ContentEncoding ];
+ push @data, [ Headers => $attachment->Headers ];
+ push @data, [ Content => $attachment->Content ];
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+ }
+
+}
+else {
+ my @attachments;
+ my $transactions = $ticket->Transactions;
+ while (my $t = $transactions->Next) {
+ my $attachments = $t->Attachments;
+ while (my $a = $attachments->Next) {
+ my $size = length($a->Content || '');
+ if ($size > 1024) { $size = int($size/102.4)/10 . "k" }
+ else { $size .= "b" }
+ push @attachments, $a->Id.": ".($a->Filename || '(Unnamed)')." (".$a->ContentType . " / ".$size.")";
+ }
+ }
+
+ if (@attachments) {
+ $o = [ "id", "Attachments" ];
+ $k = {
+ id => "ticket/".$ticket->Id."/attachments",
+ Attachments => \@attachments
+ };
+ }
+}
+
+return [ $c, $o, $k, $e ];
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/ticket/comment b/rt/share/html/REST/1.0/Forms/ticket/comment
new file mode 100755
index 0000000..a7d59ed
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/ticket/comment
@@ -0,0 +1,152 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/ticket/comment
+%#
+<%ARGS>
+$id
+%changes
+</%ARGS>
+<%INIT>
+use MIME::Entity;
+use LWP::MediaTypes;
+use RT::Interface::REST;
+use File::Temp qw(tempfile);
+
+$RT::Logger->debug("Got ticket id=$id for comment");
+$RT::Logger->debug("Got args @{[keys(%changes)]}.");
+
+my $ticket = new RT::Ticket $session{CurrentUser};
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+
+# http://.../REST/1.0/ticket/1/comment
+$ticket->Load($id);
+if (!$ticket->Id) {
+ $e = 1;
+ $c = "# Ticket $id does not exist.";
+ goto OUTPUT;
+}
+
+my $action;
+($action = $changes{Action}) =~ s/^(.)(.*)$/\U$1\L$2\E/;
+unless ($action =~ /^(?:Comment|Correspond)$/) {
+ $e = 1;
+ $c = "# Invalid action: `$action'.";
+ goto OUTPUT;
+}
+
+my $text = $changes{Text};
+my @atts = @{ vsplit($changes{Attachment}) };
+
+if (!$changes{Text} && @atts == 0) {
+ $e = 1;
+ $c = "# Empty comment with no attachments submitted.";
+ goto OUTPUT;
+}
+
+my $cgi = $m->cgi_object;
+my $ent = MIME::Entity->build(Type => "multipart/mixed");
+$ent->attach(Data => $changes{Text}) if $changes{Text};
+
+my $i = 1;
+foreach my $att (@atts) {
+ local $/=undef;
+ my $file = $att;
+ $file =~ s#^.*[\\/]##;
+
+ my $fh = $cgi->upload("attachment_$i");
+ if ($fh) {
+ my $buf;
+ my ($w, $tmp) = tempfile();
+ my $info = $cgi->uploadInfo($fh);
+
+ while (sysread($fh, $buf, 8192)) {
+ syswrite($w, $buf);
+ }
+
+ $ent->attach(
+ Path => $tmp,
+ Type => $info->{'Content-Type'} || guess_media_type($tmp),
+ Filename => $file,
+ Disposition => "attachment"
+ );
+ }
+ else {
+ $e = 1;
+ $c = "# No attachment for $att.";
+ goto OUTPUT;
+ }
+
+ $i++;
+}
+
+unless ($ticket->CurrentUserHasRight('ModifyTicket') ||
+ ($action eq "Comment" &&
+ $ticket->CurrentUserHasRight("CommentOnTicket")) ||
+ ($action eq "Correspond" &&
+ $ticket->CurrentUserHasRight("ReplyToTicket")))
+{
+ $e = 1;
+ $c = "# You are not allowed to $action on ticket $id.";
+ goto OUTPUT;
+}
+
+my $cc = join ", ", @{ vsplit($changes{Cc}) };
+my $bcc = join ", ", @{ vsplit($changes{Bcc}) };
+my ($n, $s) = $ticket->$action(MIMEObj => $ent,
+ CcMessageTo => $cc,
+ BccMessageTo => $bcc,
+ TimeTaken => $changes{TimeWorked} || 0);
+$c = "# ".$s;
+if ($changes{Status}) {
+ my ($status_n, $status_s) = $ticket->SetStatus($changes{'Status'} );
+ $c .= "\n# ".$status_s;
+}
+
+OUTPUT:
+return [ $c, $o, $k, $e ];
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/ticket/default b/rt/share/html/REST/1.0/Forms/ticket/default
new file mode 100755
index 0000000..b82cb5e
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/ticket/default
@@ -0,0 +1,447 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/ticket/default
+%#
+<%ARGS>
+$id
+$changes => {}
+$fields => undef
+$args => undef
+</%ARGS>
+<%INIT>
+use MIME::Entity;
+use RT::Interface::REST;
+
+my $cf_spec = RT::Interface::REST->custom_field_spec(1);
+
+my @comments;
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my %data = %$changes;
+my $ticket = new RT::Ticket $session{CurrentUser};
+my @dates = qw(Created Starts Started Due Resolved Told LastUpdated);
+my @people = qw(Requestors Cc AdminCc);
+my @create = qw(Queue Requestor Subject Cc AdminCc Owner Status Priority
+ InitialPriority FinalPriority TimeEstimated TimeWorked
+ TimeLeft Starts Started Due Resolved);
+my @simple = qw(Subject Status Priority Disabled TimeEstimated TimeWorked
+ TimeLeft InitialPriority FinalPriority);
+my %dates = map {lc $_ => $_} @dates;
+my %people = map {lc $_ => $_} @people;
+my %create = map {lc $_ => $_} @create;
+my %simple = map {lc $_ => $_} @simple;
+
+# Are we dealing with an existing ticket?
+if ($id ne 'new') {
+ $ticket->Load($id);
+ if (!$ticket->Id) {
+ return [ "# Ticket $id does not exist.", [], {}, 1 ];
+ }
+ elsif (!$ticket->CurrentUserHasRight('ShowTicket') ||
+ (%data && !$ticket->CurrentUserHasRight('ModifyTicket')))
+ {
+ my $act = %data ? "modify" : "display";
+ return [ "# You are not allowed to $act ticket $id.", [], {}, 1 ];
+ }
+}
+else {
+ if (!keys(%data)) {
+ # GET ticket/new: Return a suitable default form.
+ # We get defaults from queue/1 (XXX: What if it isn't there?).
+ my $due = new RT::Date $session{CurrentUser};
+ my $queue = new RT::Queue $session{CurrentUser};
+ my $starts = new RT::Date $session{CurrentUser};
+ $queue->Load(1);
+ $due->SetToNow;
+ $due->AddDays($queue->DefaultDueIn) if $queue->DefaultDueIn;
+ $starts->SetToNow;
+
+ return [
+ "# Required: id, Queue",
+ [ qw(id Queue Requestor Subject Cc AdminCc Owner Status Priority
+ InitialPriority FinalPriority TimeEstimated Starts Due Text) ],
+ {
+ id => "ticket/new",
+ Queue => $queue->Name,
+ Requestor => $session{CurrentUser}->Name,
+ Subject => "",
+ Cc => [],
+ AdminCc => [],
+ Owner => "",
+ Status => "new",
+ Priority => $queue->InitialPriority,
+ InitialPriority => $queue->InitialPriority,
+ FinalPriority => $queue->FinalPriority,
+ TimeEstimated => 0,
+ Starts => $starts->ISO,
+ Due => $due->ISO,
+ Text => "",
+ },
+ 0
+ ];
+ }
+ else {
+ # We'll create a new ticket, and fall through to set fields that
+ # can't be set in the call to Create().
+ my (%v, $text);
+
+ foreach my $k (keys %data) {
+ # flexibly parse any dates
+ if ($dates{lc $k}) {
+ my $time = new RT::Date $session{CurrentUser};
+ $time->Set(Format => 'unknown', Value => $data{$k});
+ $data{$k} = $time->ISO;
+ }
+
+ if (exists $create{lc $k}) {
+ $v{$create{lc $k}} = delete $data{$k};
+ }
+ # Set custom field
+ elsif ($k =~ /^$cf_spec/) {
+ my $cf = RT::CustomField->new( $RT::SystemUser );
+ my $cfk = $1 || $2;
+ unless($cf->LoadByName( Name => $cfk )) {
+ push @comments, "# Invalid custom field name ($cfk)";
+ delete $data{$k};
+ next;
+ }
+ $v{"CustomField-".$cf->Id()} = delete $data{$k};
+ }
+ elsif (lc $k eq 'text') {
+ $text = delete $data{$k};
+ }
+ }
+
+ # people fields allow multiple values
+ $v{$_} = vsplit($v{$_}) foreach ( grep $create{lc $_}, @people );
+
+ if ($text) {
+ $v{MIMEObj} =
+ MIME::Entity->build(
+ From => $session{CurrentUser}->EmailAddress,
+ Subject => $v{Subject},
+ Data => $text
+ );
+ }
+
+ my($tid,$trid,$terr) = $ticket->Create(%v);
+ unless ($tid) {
+ push(@comments, "# Could not create ticket.");
+ push(@comments, "# " . $terr);
+ goto DONE;
+ }
+
+ delete $data{id};
+ $id = $ticket->Id;
+ push(@comments, "# Ticket $id created.");
+ # see if the hash is empty
+ goto DONE if ! keys(%data);
+ }
+}
+
+# Now we know we're dealing with an existing ticket.
+if (!keys(%data)) {
+ my ($time, $key, $val, @data);
+
+ push @data, [ id => "ticket/".$ticket->Id ];
+ push @data, [ Queue => $ticket->QueueObj->Name ]
+ if (!%$fields || exists $fields->{lc 'Queue'});
+ push @data, [ Owner => $ticket->OwnerObj->Name ]
+ if (!%$fields || exists $fields->{lc 'Owner'});
+ push @data, [ Creator => $ticket->CreatorObj->Name ]
+ if (!%$fields || exists $fields->{lc 'Creator'});
+
+ foreach (qw(Subject Status Priority InitialPriority FinalPriority)) {
+ next unless (!%$fields || (exists $fields->{lc $_}));
+ push @data, [$_ => $ticket->$_ ];
+ }
+
+ foreach $key (@people) {
+ next unless (!%$fields || (exists $fields->{lc $key}));
+ push @data, [ $key => [ $ticket->$key->MemberEmailAddresses ] ];
+ }
+
+ $time = new RT::Date ($session{CurrentUser});
+ foreach $key (@dates) {
+ next unless (!%$fields || (exists $fields->{lc $key}));
+ $time->Set(Format => 'sql', Value => $ticket->$key);
+ push @data, [ $key => $time->AsString ];
+ }
+
+ $time = new RT::Date ($session{CurrentUser});
+ foreach $key (qw(TimeEstimated TimeWorked TimeLeft)) {
+ next unless (!%$fields || (exists $fields->{lc $key}));
+ $val = $ticket->$key || 0;
+ $val = "$val minutes" if $val;
+ push @data, [ $key => $val ];
+ }
+
+ # Display custom fields
+ my $CustomFields = $ticket->CustomFields;
+ while (my $cf = $CustomFields->Next()) {
+ next unless !%$fields
+ || exists $fields->{"cf.{".lc($cf->Name)."}"}
+ || exists $fields->{"cf-".lc $cf->Name};
+
+ my $vals = $ticket->CustomFieldValues($cf->Id());
+ my @out = ();
+ if ( $cf->SingleValue ) {
+ my $v = $vals->Next;
+ push @out, $v->Content if $v;
+ }
+ else {
+ while (my $v = $vals->Next()) {
+ my $content = $v->Content;
+ $content =~ s/'/\\'/g;
+ if ( $v->Content =~ /,/ ) {
+ push @out, q{'} . $content . q{'};
+ }
+ else {
+ push @out, $content;
+ }
+ }
+ }
+ push @data, [ ('CF.{' . $cf->Name . '}') => join ',', @out ];
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+}
+else {
+ my ($get, $set, $key, $val, $n, $s);
+
+ foreach $key (keys %data) {
+ $val = $data{$key};
+ $key = lc $key;
+ $n = 1;
+
+ if (ref $val eq 'ARRAY') {
+ unless ($key =~ /^(?:Requestors|Cc|AdminCc)$/i) {
+ $n = 0;
+ $s = "$key may have only one value.";
+ goto SET;
+ }
+ }
+
+ if ($key =~ /^queue$/i) {
+ next if $val eq $ticket->QueueObj->Name;
+ ($n, $s) = $ticket->SetQueue($val);
+ }
+ elsif ($key =~ /^owner$/i) {
+ next if $val eq $ticket->OwnerObj->Name;
+ ($n, $s) = $ticket->SetOwner($val);
+ }
+ elsif (exists $simple{$key}) {
+ $key = $simple{$key};
+ $set = "Set$key";
+
+ next if (($val eq $ticket->$key)|| ($ticket->$key =~ /^\d+$/ && $val == $ticket->$key));
+ ($n, $s) = $ticket->$set("$val");
+ }
+ elsif (exists $dates{$key}) {
+ $key = $dates{$key};
+
+ # We try to detect whether it should update a field by checking
+ # whether its current value equals the entered value. Since the
+ # LastUpdated field is automatically updated as other columns are
+ # changed, it is not properly skipped. Users cannot update this
+ # field anyway.
+ next if $key eq 'LastUpdated';
+
+ $set = "Set$key";
+
+ my $time = new RT::Date $session{CurrentUser};
+ $time->Set(Format => 'sql', Value => $ticket->$key);
+ next if ($val =~ /^not set$/i || $val eq $time->AsString);
+
+ $time->Set(Format => 'unknown', Value => $val);
+ ($n, $s) = $ticket->$set($time->ISO);
+ }
+ elsif (exists $people{$key}) {
+ $key = $people{$key};
+ my ($p, @msgs);
+
+ my %new = map {$_=>1} @{ vsplit($val) };
+ my %old = map {$_=>1} $ticket->$key->MemberEmailAddresses;
+ my $type = $key eq 'Requestors' ? 'Requestor' : $key;
+
+ foreach $p (keys %old) {
+ unless (exists $new{$p}) {
+ ($s, $n) = $ticket->DeleteWatcher(Type => $type,
+ Email => $p);
+ push @msgs, [ $s, $n ];
+ }
+ }
+ foreach $p (keys %new) {
+ # XXX: This is a stupid test.
+ unless ($p =~ /^[\w.+-]+\@([\w.-]+\.)*\w+.?$/) {
+ $s = 0;
+ $n = "$p is not a valid email address.";
+ push @msgs, [ $s, $n ];
+ next;
+ }
+ unless ($ticket->IsWatcher(Type => $type, Email => $p)) {
+ ($s, $n) = $ticket->AddWatcher(Type => $type,
+ Email => $p);
+ push @msgs, [ $s, $n ];
+ }
+ }
+
+ $n = 1;
+ if (@msgs = grep {$_->[0] == 0} @msgs) {
+ $n = 0;
+ $s = join "\n", map {"# ".$_->[1]} @msgs;
+ $s =~ s/^# //;
+ }
+ }
+ # Set custom field
+ elsif ($key =~ /^$cf_spec/) {
+ my $cf = RT::CustomField->new( $RT::SystemUser );
+ $key = $1 || $2;
+ if (not $cf->LoadByName( Name => $key )) {
+ $n = 0;
+ $s = "Unknown custom field.";
+ }
+ else {
+ my $vals = $ticket->CustomFieldValues($cf->id);
+
+ if ( $cf->SingleValue ) {
+ my $old = $vals->Next;
+ if ( $old ) {
+ if ( $val ne $old->Content ) {
+ $old->Delete;
+ ($n, $s) = $ticket->AddCustomFieldValue(
+ Field => $cf, Value => $val );
+ $s =~ s/^# // if defined $s;
+ }
+ }
+ else {
+ ($n, $s) = $ticket->AddCustomFieldValue(
+ Field => $cf, Value => $val );
+ $s =~ s/^# // if defined $s;
+ }
+ }
+ else {
+ my @new;
+ my ( $a, $b ) = split /,/, $val, 2;
+ while ($a) {
+ no warnings 'uninitialized';
+ if ( $a =~ /^'/ ) {
+ my $s = $a;
+ while ( $a !~ /'$/ || ( $a !~ /(\\\\)+'$/
+ && $a =~ /(\\)+'$/ ) ) {
+ ( $a, $b ) = split /,/, $b, 2;
+ $s .= ',' . $a;
+ }
+ $s =~ s/^'//;
+ $s =~ s/'$//;
+ $s =~ s/\\'/'/g;
+ push @new, $s;
+ }
+ elsif ( $a =~ /^q{/ ) {
+ my $s = $a;
+ while ( $a !~ /}$/ ) {
+ ( $a, $b ) = split /,/, $b, 2;
+ $s .= ',' . $a;
+ }
+ $s =~ s/^q{//;
+ $s =~ s/}//;
+ push @new, $s;
+ }
+ else {
+ push @new, $a;
+ }
+ ( $a, $b ) = split /,/, $b, 2;
+ }
+
+ my %new;
+ $new{$_}++ for @new;
+
+ while (my $v = $vals->Next()) {
+ my $c = $v->Content;
+ if ( $new{$c} ) {
+ $new{$c}--;
+ }
+ else {
+ $v->Delete();
+ }
+ }
+ for ( @new ) {
+ while ( $new{$_} && $new{$_}-- ) {
+ ($n, $s) = $ticket->AddCustomFieldValue(
+ Field => $cf, Value => $_ );
+ $s =~ s/^# // if defined $s;
+ }
+ }
+ }
+ }
+ }
+ elsif ($key ne 'id' && $key ne 'type' && $key ne 'creator') {
+ $n = 0;
+ $s = "Unknown field.";
+ }
+
+ SET:
+ if ($n == 0) {
+ $e = 1;
+ push @comments, "# $key: $s";
+ unless (@$o) {
+ # move id forward
+ @$o = ("id", grep { $_ ne 'id' } keys %$changes);
+ $k = $changes;
+ }
+ }
+ }
+ push(@comments, "# Ticket ".$ticket->id." updated.") unless $n == 0;
+}
+
+DONE:
+$c ||= join("\n", @comments) if @comments;
+return [$c, $o, $k, $e];
+
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/ticket/history b/rt/share/html/REST/1.0/Forms/ticket/history
new file mode 100755
index 0000000..4f14f42
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/ticket/history
@@ -0,0 +1,205 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/ticket/history
+%#
+<%ARGS>
+$id
+$args => undef
+$format => undef
+$fields => undef
+</%ARGS>
+<%INIT>
+my $ticket = new RT::Ticket $session{CurrentUser};
+my ($c, $o, $k, $e) = ("", [], {}, "");
+
+$ticket->Load($id);
+unless ($ticket->Id) {
+ return [ "# Ticket $id does not exist.", [], {}, 1 ];
+}
+
+my $trans = $ticket->Transactions();
+my $total = $trans->Count();
+
+if ( $args ) {
+ chomp $args;
+}
+else {
+ $args = '';
+}
+
+my @arglist = split('/', $args );
+my ($type, $tid);
+if (defined $arglist[0] && $arglist[0] eq 'type') {
+ $type = $arglist[1];
+} elsif ( defined $arglist[0] && $arglist[0] eq 'id') {
+ $tid = $arglist[1];
+} else {
+ $type = $args;
+}
+
+if ($type) {
+ # Create, Set, Status, Correspond, Comment, Give, Steal, Take, Told
+ # CustomField, AddLink, DeleteLink, AddWatcher, DelWatcher
+ if ($args =~ /^links?$/) {
+ $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Link');
+ }
+ elsif ($args =~ /^watchers?$/) {
+ $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Watcher');
+ }
+ else {
+ $trans->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => $type);
+ }
+} elsif ($tid) {
+ $trans->Limit(FIELD => 'Id', OPERATOR => '=', VALUE => $tid);
+}
+
+if ($tid) {
+ my @data;
+ my $t = new RT::Transaction $session{CurrentUser};
+
+ # this paragraph limits the transaction ID query to transactions on this ticket.
+ # Otherwise you can query any transaction from any ticket, which makes no sense.
+ my $Transactions = $ticket->Transactions;
+ my $tok=0;
+ while (my $T = $Transactions->Next()) {
+ $tok=1 if ($T->Id == $tid)
+ }
+ if ($tok) {
+ $t->Load($tid);
+ } else {
+ return [ "# Transaction $tid is not related to Ticket $id", [], {}, 1 ];
+ }
+
+ push @data, [ id => $t->Id ];
+ push @data, [ Ticket => $t->Ticket ]
+ if (!%$fields || exists $fields->{lc 'Ticket'});
+ push @data, [ TimeTaken => $t->TimeTaken ]
+ if (!%$fields || exists $fields->{lc 'TimeTaken'});
+ push @data, [ Type => $t->Type ]
+ if (!%$fields || exists $fields->{lc 'Type'});
+ push @data, [ Field => $t->Field ]
+ if (!%$fields || exists $fields->{lc 'Field'});
+ push @data, [ OldValue => $t->OldValue ]
+ if (!%$fields || exists $fields->{lc 'OldValue'});
+ push @data, [ NewValue => $t->NewValue ]
+ if (!%$fields || exists $fields->{lc 'NewValue'});
+ push @data, [ Data => $t->Data ]
+ if (!%$fields || exists $fields->{lc 'Data'});
+ push @data, [ Description => $t->Description ]
+ if (!%$fields || exists $fields->{lc 'Description'});
+ push @data, [ Content => $t->Content ]
+ if (!%$fields || exists $fields->{lc 'Content'});
+
+
+ if (!%$fields || exists $fields->{lc 'Content'}) {
+ my $creator = new RT::User $session{CurrentUser};
+ $creator->Load($t->Creator);
+ push @data, [ Creator => $creator->Name ];
+ }
+ push @data, [ Created => $t->Created ]
+ if (!%$fields || exists $fields->{lc 'Created'});
+
+ if (!%$fields || exists $fields->{lc 'Attachments'}) {
+ my $attachlist;
+ my $attachments = $t->Attachments;
+ while (my $a = $attachments->Next) {
+ my $size = length($a->Content||'');
+ if ($size > 1024) { $size = int($size/102.4)/10 . "k" }
+ else { $size .= "b" }
+ $attachlist .= "\n" . $a->Id.": ".($a->Filename || "untitled")." (".$size.")";
+ }
+
+ push @data, [Attachments => $attachlist];
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+
+} else {
+ my (@data, $tids);
+ $format ||= "s";
+ $format = "l" if (%$fields);
+
+ while (my $t = $trans->Next) {
+ my $tid = $t->Id;
+
+ if ($format eq "l") {
+ $tids .= "," if $tids;
+ $tids .= $tid;
+ } else {
+ push @$o, $tid;
+ $k->{$tid} = $t->Description;
+ }
+ }
+
+ if ($format eq "l") {
+ my @tid;
+ push @tid, "ticket/$id/history/id/$tids";
+ my $fieldstring;
+ foreach my $key (keys %$fields) {
+ $fieldstring .= "," if $fieldstring;
+ $fieldstring .= $key;
+ }
+ my ($content, $forms);
+ $m->subexec("/REST/1.0/show",
+ id => \@tid,
+ format => $format,
+ fields => $fieldstring);
+ return [ $c, $o, $k, $e ];
+ }
+}
+
+if (!$c) {
+ my $sub = $trans->Count();
+ $c = "# $sub/$total ($args/total)";
+}
+
+return [ $c, $o, $k, $e ];
+
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/ticket/links b/rt/share/html/REST/1.0/Forms/ticket/links
new file mode 100755
index 0000000..783ac73
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/ticket/links
@@ -0,0 +1,172 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/ticket/links
+%#
+<%ARGS>
+$id
+$format => 's'
+$changes => undef
+</%ARGS>
+<%INIT>
+my @data;
+my $ticket = new RT::Ticket $session{CurrentUser};
+
+$ticket->Load($id);
+if (!$ticket->Id) {
+ return [ "# Ticket $id does not exist.", [], {}, 1 ];
+}
+
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my @fields = qw(DependsOn DependedOnBy RefersTo ReferredToBy Members MemberOf);
+my %fields = map { lc $_ => $_ } @fields;
+
+my %lfields = (
+ Members => { Type => 'MemberOf', Mode => 'Base' },
+ ReferredToBy => { Type => 'RefersTo', Mode => 'Base' },
+ DependedOnBy => { Type => 'DependsOn', Mode => 'Base' },
+ MemberOf => { Type => 'MemberOf', Mode => 'Target' },
+ RefersTo => { Type => 'RefersTo', Mode => 'Target' },
+ DependsOn => { Type => 'DependsOn', Mode => 'Target' },
+);
+
+if ($changes) {
+ my ($get, $set, $key, $val, $n, $s);
+ my %data = %$changes;
+ my @comments;
+
+ foreach $key (keys %data) {
+ $val = $data{$key};
+ $key = lc $key;
+ $n = 1;
+
+ if (exists $fields{$key}) {
+ $key = $fields{$key};
+
+ my %old;
+ my $field = $lfields{$key}->{Mode};
+ while (my $link = $ticket->$key->Next) {
+ $old{$link->$field} = 1;
+ }
+
+ my %new;
+ foreach my $nkey (@{vsplit($val)}) {
+ if ($nkey =~ /^\d+$/) {
+ my $uri = new RT::URI $session{CurrentUser};
+ my $tick = new RT::Ticket $session{CurrentUser};
+ $tick->Load($nkey);
+ if ($tick->Id) {
+ $nkey = $uri->FromObject($tick);
+ }
+ else {
+ $n = 0;
+ $s = "Ticket $nkey does not exist.";
+ goto SET;
+ }
+ }
+ $new{$nkey} = 1;
+ }
+
+ foreach my $u (keys %old) {
+ if (exists $new{$u}) {
+ delete $new{$u};
+ }
+ else {
+ my $type = $lfields{$key}->{Type};
+ my $mode = $lfields{$key}->{Mode};
+ ($n, $s) = $ticket->DeleteLink(Type => $type, $mode => $u);
+ goto SET;
+ }
+ }
+ foreach my $u (keys %new) {
+ my $type = $lfields{$key}->{Type};
+ my $mode = $lfields{$key}->{Mode};
+ ($n, $s) = $ticket->AddLink(Type => $type, $mode => $u);
+ goto SET;
+ }
+ }
+ elsif ($key ne 'id' && $key ne 'type') {
+ $n = 0;
+ $s = "Unknown field: $key";
+ }
+
+ SET:
+ if ($n == 0) {
+ $e = 1;
+ push @comments, "# $key: $s";
+ unless (@$o) {
+ @$o = ("id", @fields);
+ %$k = %data;
+ }
+ }
+ }
+
+ push(@comments, "# Links for ticket $id updated.") unless @comments;
+ $c = join("\n", @comments) if @comments;
+}
+else {
+ my @data;
+
+ push @data, [ id => "ticket/".$ticket->Id."/links" ];
+ foreach my $key (@fields) {
+ my @val;
+
+ my $field = $lfields{$key}->{Mode};
+ while (my $link = $ticket->$key->Next) {
+ push @val, $link->$field;
+ }
+ push(@val, "") if (@val == 0 && defined $format && $format eq 'l');
+ push @data, [ $key => [ @val ] ] if @val;
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+}
+
+return [ $c, $o, $k, $e ];
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/ticket/merge b/rt/share/html/REST/1.0/Forms/ticket/merge
new file mode 100755
index 0000000..3d91819
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/ticket/merge
@@ -0,0 +1,96 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/ticket/merge
+%#
+<%ARGS>
+$id
+$args
+</%ARGS>
+<%INIT>
+use RT::Interface::REST;
+
+my $into = $args;
+
+my $ticket = new RT::Ticket $session{CurrentUser};
+my $ticket_into = new RT::Ticket $session{CurrentUser};
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+
+# http://.../REST/1.0/ticket/1/merge/6 (merges ticket 1 into ticket 6)
+
+$ticket->Load($id);
+if (!$ticket->Id) {
+ $e = 1;
+ $c = "# Ticket $id does not exist.";
+ goto OUTPUT;
+}
+$ticket_into->Load($into);
+if (!$ticket_into->Id) {
+ $e = 1;
+ $c = "# Ticket $into does not exist.";
+ goto OUTPUT;
+}
+
+if (!$ticket->CurrentUserHasRight('ModifyTicket')) {
+ $e = 1;
+ $c = "# You are not allowed to modify ticket $id.";
+ goto OUTPUT;
+}
+
+my ($n, $s) = $ticket->MergeInto($into);
+
+if ($n == 0) {
+ $e = 1;
+ $c = "# Could not complete the merge.";
+}
+else {
+ $c = "# Merge completed.";
+}
+
+OUTPUT:
+return [ $c, $o, $k, $e ];
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/ticket/take b/rt/share/html/REST/1.0/Forms/ticket/take
new file mode 100755
index 0000000..0b886b0
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/ticket/take
@@ -0,0 +1,135 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/ticket/take
+%#
+<%ARGS>
+$id
+%changes
+</%ARGS>
+<%INIT>
+use RT::Interface::REST;
+
+my $ticket = new RT::Ticket $session{CurrentUser};
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+
+# http://.../REST/1.0/ticket/1/take
+$ticket->Load( $id );
+unless ( $ticket->Id ) {
+ $e = 1;
+ $c = "# Ticket $id does not exist.";
+ goto OUTPUT;
+}
+
+my $action;
+
+my @comments;
+
+($action = $changes{Action}) =~ s/^(.)(.*)$/\U$1\L$2\E/;
+unless ($action =~ /^(?:Take|Steal|Untake)$/) {
+ $e = 1;
+ $c = "# Invalid action: `$action'.";
+ goto OUTPUT;
+}
+
+my ($status, $msg) = $ticket->$action();
+$c = "# $msg";
+$e = 1 unless $status;
+goto OUTPUT;
+
+#unless ($ticket->CurrentUserHasRight('ModifyTicket') ||
+# ( ($action eq "Take" || $action eq 'Untake') &&
+# $ticket->CurrentUserHasRight("TakeTicket")) ||
+# ($action eq "Steal" &&
+# $ticket->CurrentUserHasRight("StealTicket")))
+#{
+# $e = 1;
+# $c = "# You are not allowed to $action ticket $id.";
+# goto OUTPUT;
+#}
+
+#if ( keys %changes ) {
+#}
+#else {
+# # process the form data structure
+# my ($key, $val);
+#
+# foreach $key (keys %data) {
+# $val = $data{$key};
+#
+# if ($key =~ /^force$/i) {
+# if ($val !~ /^(?:0|1)$/) {
+# push(@comments, "# invalid value for 'force': $val");
+# goto DONE;
+# }
+# my ($ret_id, $msg);
+#
+# ### take
+# if ($val == 0) {
+# ($ret_id, $msg) = $ticket->Take;
+# if (!$ret_id) {
+# push(@comments, "# Couldn't take ticket $id: $msg");
+# goto DONE;
+# }
+# push(@comments, "# Ticket $id taken.");
+# }
+# ### steal
+# else {
+# ($ret_id, $msg) = $ticket->Steal;
+# if (!$ret_id) {
+# push(@comments, "# Couldn't steal ticket $id: $msg");
+# goto DONE;
+# }
+# push(@comments, "# Ticket $id stolen.");
+# }
+# }
+# }
+#}
+
+OUTPUT:
+return [ $c, $o, $k, $e ];
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/transaction/default b/rt/share/html/REST/1.0/Forms/transaction/default
new file mode 100644
index 0000000..387dcef
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/transaction/default
@@ -0,0 +1,143 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/transaction
+%#
+<%ARGS>
+$id
+$args => undef
+$format => undef
+$fields => undef
+</%ARGS>
+<%INIT>
+my $trans = new RT::Transactions $session{CurrentUser};
+my ($c, $o, $k, $e) = ("", [], {} , "");
+
+chomp $args;
+my @arglist = split('/', $args);
+my $tid = $id;
+
+$trans->Limit(FIELD => 'Id', OPERATOR => '=', VALUE => $tid);
+
+if ($tid) {
+ my @data;
+ my $t = new RT::Transaction $session{CurrentUser};
+ $t->Load($tid);
+ if ($format eq "l") {
+ push @data, [ id => $t->Id ];
+ push @data, [ Ticket => $t->Ticket ]
+ if (!%$fields || exists $fields->{lc 'Ticket'});
+ push @data, [ TimeTaken => $t->TimeTaken ]
+ if (!%$fields || exists $fields->{lc 'TimeTaken'});
+ push @data, [ Type => $t->Type ]
+ if (!%$fields || exists $fields->{lc 'Type'});
+ push @data, [ Field => $t->Field ]
+ if (!%$fields || exists $fields->{lc 'Field'});
+ push @data, [ OldValue => $t->OldValue ]
+ if (!%$fields || exists $fields->{lc 'OldValue'});
+ push @data, [ NewValue => $t->NewValue ]
+ if (!%$fields || exists $fields->{lc 'NewValue'});
+ push @data, [ Data => $t->Data ]
+ if (!%$fields || exists $fields->{lc 'Data'});
+ push @data, [ Description => $t->Description ]
+ if (!%$fields || exists $fields->{lc 'Description'});
+ push @data, [ Content => $t->Content ]
+ if (!%$fields || exists $fields->{lc 'Content'});
+
+ if (!%$fields || exists $fields->{lc 'Content'}) {
+ my $creator = new RT::User $session{CurrentUser};
+ $creator->Load($t->Creator);
+ push @data, [ Creator => $creator->Name ];
+ }
+ push @data, [ Created => $t->Created ]
+ if (!%$fields || exists $fields->{lc 'Created'});
+
+ if (!%$fields || exists $fields->{lc 'Attachments'}) {
+ my $attachlist;
+ my $attachments = $t->Attachments;
+ while (my $a = $attachments->Next) {
+ my $size = length($a->Content);
+ if ($size > 1024) {
+ $size = int($size/102.4)/10 . "k";
+ }
+ else {
+ $size .= "b";
+ }
+ $attachlist .= "\n" . $a->Id.": ".($a->Filename || "untitled")." (".$size.")";
+ }
+ push @data, [Attachments => $attachlist];
+ }
+
+ } else {
+ push @data, [ id => $t->Id ];
+ push @data, [ Description => $t->Description ];
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+}
+#else {
+# my (@data, $tids);
+# $format ||= "s";
+# $format = "l" if (%$fields);
+#
+# while (my $t = $trans->Next) {
+# my $tid = $t->Id;
+# if ($format eq "l") {
+# $tids .= "," if $tids;
+# $tids .= $tid;
+# } else {
+# push @$o, $tid;
+# $k->{$tid} = $t->Description;
+# }
+# }
+#}
+
+return [ $c, $o, $k, $e ];
+
+</%INIT>
diff --git a/rt/share/html/REST/1.0/Forms/user/default b/rt/share/html/REST/1.0/Forms/user/default
new file mode 100755
index 0000000..036a862
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/user/default
@@ -0,0 +1,188 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/user/default
+%#
+<%ARGS>
+$id
+$format => 's'
+$changes => {}
+</%ARGS>
+<%perl>
+my @comments;
+my ($c, $o, $k, $e) = ("", [], {}, 0);
+my %data = %$changes;
+my $user = new RT::User $session{CurrentUser};
+my @fields = qw(RealName NickName Gecos Organization Address1 Address2 City
+ State Zip Country HomePhone WorkPhone MobilePhone PagerPhone
+ FreeformContactInfo Comments Signature Lang EmailEncoding
+ WebEncoding ExternalContactInfoId ContactInfoSystem
+ ExternalAuthId AuthSystem Privileged Disabled);
+my %fields = map { lc $_ => $_ } @fields;
+
+if ($id ne 'new') {
+ $user->Load($id);
+ if (!$user->Id) {
+ return [ "# User $id does not exist.", [], {}, 1 ];
+ }
+}
+else {
+ if (keys %data == 0) {
+ return [
+ "# Required: Name, EmailAddress",
+ [ qw(id Name EmailAddress Organization Password Comments) ],
+ {
+ id => "user/new",
+ Name => "",
+ EmailAddress => "",
+ Organization => "",
+ Password => "",
+ Comments => ""
+ },
+ 0
+ ];
+ }
+ else {
+ my %v;
+ my %create = %fields;
+ $create{name} = "Name";
+ $create{password} = "Password";
+ $create{emailaddress} = "EmailAddress";
+ $create{contactinfo} = "FreeformContactInfo";
+ # Do any fields need to be excluded here?
+
+ foreach my $k (keys %data) {
+ if (exists $create{lc $k}) {
+ $v{$create{lc $k}} = delete $data{$k};
+ }
+ }
+
+ $user->Create(%v);
+ unless ($user->Id) {
+ return [ "# Could not create user.", [], {}, 1 ];
+ }
+
+ $id = $user->Id;
+ delete $data{id};
+ push(@comments, "# User $id created.");
+ goto DONE if keys %data == 0;
+ }
+}
+
+if (keys %data == 0) {
+ my @data;
+
+ push @data, [ id => "user/".$user->Id ];
+ push @data, [ Name => $user->Name ];
+ push @data, [ Password => '********' ];
+ push @data, [ EmailAddress => $user->EmailAddress ];
+
+ foreach my $key (@fields) {
+ my $val = $user->$key;
+
+ if ( (defined ($format) && $format eq 'l') || (defined $val && $val ne '')) {
+ $key = "ContactInfo" if $key eq 'FreeformContactInfo';
+ push @data, [ $key => $val ];
+ }
+ }
+
+ my %k = map {@$_} @data;
+ $o = [ map {$_->[0]} @data ];
+ $k = \%k;
+}
+else {
+ my ($get, $set, $key, $val, $n, $s);
+
+ foreach $key (keys %data) {
+ $val = $data{$key};
+ $key = lc $key;
+ $n = 1;
+
+ if ($key eq 'name' || $key eq 'emailaddress' ||
+ $key eq 'contactinfo' || exists $fields{$key})
+ {
+ if (exists $fields{$key}) {
+ $key = $fields{$key};
+ }
+ else {
+ $key = "FreeformContactInfo" if $key eq 'contactinfo';
+ $key = "EmailAddress" if $key eq 'emailaddress';
+ $key = "Name" if $key eq 'name';
+ }
+ $set = "Set$key";
+
+ next if $val eq $user->$key;
+ ($n, $s) = $user->$set($val);
+ }
+ elsif ($key eq 'password') {
+ ($n, $s) = $user->SetPassword($val) unless $val =~ /^\**$/;
+ }
+ elsif ($key ne 'id') {
+ $n = 0;
+ $s = "Unknown field.";
+ }
+
+ SET:
+ if ($n == 0) {
+ $e = 1;
+ push @comments, "# $key: $s";
+ unless (@$o) {
+ my %o = keys %$changes;
+ delete @o{"id", @fields};
+ @$o = ("id", @fields, keys %o);
+ $k = $changes;
+ }
+ }
+ }
+
+ push(@comments, "# User $id updated.") unless $n == 0;
+}
+
+DONE:
+$c ||= join("\n", @comments) if @comments;
+return [ $c, $o, $k, $e ];
+</%perl>
diff --git a/rt/share/html/REST/1.0/Forms/user/ns b/rt/share/html/REST/1.0/Forms/user/ns
new file mode 100755
index 0000000..8f4678d
--- /dev/null
+++ b/rt/share/html/REST/1.0/Forms/user/ns
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/Forms/user/ns
+%#
+<%ARGS>
+$id
+</%ARGS>
+<%perl>
+use RT::Users;
+
+my $field = "Name";
+$field = "EmailAddress" if $id =~ /\@/;
+
+my $users = new RT::Users $session{CurrentUser};
+$users->Limit(FIELD => $field, OPERATOR => '=', VALUE => $id);
+if ($users->Count == 0) {
+ return (0, "No user named $id exists.");
+}
+return $users->Next->Id;
+</%perl>
diff --git a/rt/share/html/REST/1.0/NoAuth/mail-gateway b/rt/share/html/REST/1.0/NoAuth/mail-gateway
new file mode 100755
index 0000000..20d28ec
--- /dev/null
+++ b/rt/share/html/REST/1.0/NoAuth/mail-gateway
@@ -0,0 +1,84 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%flags>
+inherit => undef # inhibit UTF8 conversion done in /autohandler
+</%flags>
+<%ARGS>
+$queue => 1
+$action => "correspond"
+$ticket => undef
+</%ARGS>
+<%init>
+$m->callback( %ARGS, CallbackName => 'Pre' );
+use RT::Interface::Email (); # It's an exporter, but we don't care
+$r->content_type('text/plain; charset=utf-8');
+$m->error_format('text');
+my ( $status, $error, $Ticket ) = RT::Interface::Email::Gateway( \%ARGS );
+if ( $status == 1 ) {
+ $m->out('ok');
+ if ( $Ticket && $Ticket->Id ) {
+ $m->out( 'Ticket: ' . ($Ticket->Id || '') );
+ $m->out( 'Queue: ' . ($Ticket->QueueObj->Name || '') );
+ $m->out( 'Owner: ' . ($Ticket->OwnerObj->Name || '') );
+ $m->out( 'Status: ' . ($Ticket->Status || '') );
+ $m->out( 'Subject: ' . ($Ticket->Subject || '') );
+ $m->out(
+ 'Requestor: ' . ($Ticket->Requestors->MemberEmailAddressesAsString || '') );
+ }
+}
+else {
+ $RT::Logger->error( "Could not record email: " . $error );
+ if ( $status == -75 ) {
+ $m->out( "temporary failure - " . $error );
+ }
+ else {
+ $m->out( 'not ok - ' . $error );
+ }
+}
+$m->abort();
+</%init>
diff --git a/rt/share/html/REST/1.0/autohandler b/rt/share/html/REST/1.0/autohandler
new file mode 100755
index 0000000..8354e56
--- /dev/null
+++ b/rt/share/html/REST/1.0/autohandler
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/autohandler
+%#
+<%INIT>
+use RT::Interface::REST;
+$r->content_type('text/plain; charset=utf-8');
+$m->error_format('text');
+$m->call_next();
+$m->abort();
+</%INIT>
diff --git a/rt/share/html/REST/1.0/dhandler b/rt/share/html/REST/1.0/dhandler
new file mode 100755
index 0000000..085bbb3
--- /dev/null
+++ b/rt/share/html/REST/1.0/dhandler
@@ -0,0 +1,326 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/dhandler
+%#
+<%ARGS>
+@id => ()
+$fields => undef
+$format => undef
+$content => undef
+</%ARGS>
+<%INIT>
+use RT::Interface::REST;
+
+my $output = "";
+my $status = "200 Ok";
+my $object = $m->dhandler_arg;
+
+my $name = qr{[\w.-]+};
+my $list = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+';
+my $label = '[a-zA-Z0-9@_.+-]+';
+my $field = RT::Interface::REST->field_spec;
+my $labels = "(?:$label,)*$label";
+
+# We must handle requests such as the following:
+#
+# 1. http://.../REST/1.0/show (with a list of object specifications).
+# 2. http://.../REST/1.0/edit (with a self-contained list of forms).
+# 3. http://.../REST/1.0/ticket/show (implicit type specification).
+# http://.../REST/1.0/ticket/edit
+# 4. http://.../REST/1.0/ticket/nn (all possibly with a single form).
+# http://.../REST/1.0/ticket/nn/history
+# http://.../REST/1.0/ticket/nn/comment
+# http://.../REST/1.0/ticket/nn/attachment/1
+#
+# Objects are specified by their type, and either a unique numeric ID,
+# or a unique name (e.g. ticket/1, queue/foo). Multiple objects of the
+# same type may be specified by a comma-separated list of identifiers
+# (e.g., user/ams,rai or ticket/1-3,5-7).
+#
+# Ultimately, we want a list of object specifications to operate upon.
+# The URLs in (4) provide enough information to identify an object. We
+# will assemble submitted information into that format in other cases.
+#
+my (@objects, $forms);
+my $utype;
+
+if ($object eq 'show' || # $REST/show
+ (($utype) = ($object =~ m{^($name)/show$}))) # $REST/ticket/show
+{
+ # We'll convert type/range specifications ("ticket/1-3,7-9/history")
+ # into a list of singular object specifications ("ticket/1/history").
+ # If the URL specifies a type, we'll accept only that one.
+ foreach my $id (@id) {
+ $id =~ s|^(?:$utype/)?|$utype/| if $utype;
+ if (my ($type, $oids, $extra) =
+ ($id =~ m#^($name)/($list|$labels)(?:(/.*))?$#o))
+ {
+ $extra ||= '';
+ my ($attr, $args) = $extra =~ m{^(?:/($name)(?:/(.*))?)?$}o;
+ my $tids;
+ if ($attr and $attr eq 'history' and $args) {
+ ($tids) = $args =~ m#id/(\d.*)#o;
+ }
+ # expand transaction and attachment range specifications
+ # (if applicable)
+ foreach my $oid (expand_list($oids)) {
+ if ($tids) {
+ push(@objects, "$type/$oid/$attr/id/$_") for expand_list($tids);
+ } else {
+ push(@objects, "$type/$oid$extra");
+ }
+ }
+ }
+ else {
+ $status = "400 Bad Request";
+ $output = "Invalid object ID specified: '$id'";
+ goto OUTPUT;
+ }
+ }
+}
+elsif ($object eq 'edit' || # $REST/edit
+ (($utype) = ($object =~ m{^($name)/edit$}))) # $REST/ticket/edit
+{
+ # We'll make sure each of the submitted forms is syntactically valid
+ # and sufficiently identifies an object to operate upon, then add to
+ # the object list as above.
+ my @output;
+
+ $forms = form_parse($content);
+ foreach my $form (@$forms) {
+ my ($c, $o, $k, $e) = @$form;
+
+ if ($e) {
+ push @output, [ "# Syntax error.", $o, $k, $e ];
+ }
+ else {
+ my ($type, $id);
+
+ # Look for matching types in the ID, form, and URL.
+ $type = $utype || $k->{id};
+ $type =~ s|^([^/]+)/\d+$|$1| if !$utype;
+ $type =~ s|^(?:$utype)?|$utype/| if $utype;
+ $type =~ s|/$|| if $type;
+
+ if (exists $k->{id}) {
+ $id = $k->{id};
+ $id =~ s|^(?:$type/)?|$type/| if $type;
+
+ if ($id =~ m#^$name/(?:$label|\d+)(?:/.*)?#o) {
+ push @objects, $id;
+ }
+ else {
+ push @output, [ "# Invalid object ID: '$id'", $o, $k, $e ];
+ }
+ }
+ else {
+ push @output, [ "# No object ID specified.", $o, $k, $e ];
+ }
+ }
+ }
+ # If we saw any errors at this stage, we won't process any part of
+ # the submitted data.
+ if (@output) {
+ unshift @output, [ "# Please resubmit with errors corrected." ];
+ $status = "409 Syntax Error";
+ $output = form_compose(\@output);
+ goto OUTPUT;
+ }
+}
+else {
+ # We'll assume that this is in the correct format already. Otherwise
+ # it will be caught by the loop below.
+ push @objects, $object;
+
+ if ($content) {
+ $forms = form_parse($content);
+
+ if (@$forms > 1) {
+ $status = "400 Bad Request";
+ $output = "You may submit only one form to this object.";
+ goto OUTPUT;
+ }
+
+ my ($c, $o, $k, $e) = @{ $forms->[0] };
+ if ($e) {
+ $status = "409 Syntax Error";
+ $output = form_compose([ ["# Syntax error.", $o, $k, $e] ]);
+ goto OUTPUT;
+ }
+ }
+}
+
+# Make sure we have something to do.
+unless (@objects) {
+ $status = "400 Bad Request";
+ $output = "No objects specified.";
+ goto OUTPUT;
+}
+
+# Parse and validate any field specifications.
+my (%fields, @fields);
+if ($fields) {
+ unless ($fields =~ /^(?:$field,)*$field$/) {
+ $status = "400 Bad Request";
+ $output = "Invalid field specification: $fields";
+ goto OUTPUT;
+ }
+ @fields = map lc, split /,/, $fields;
+ @fields{@fields} = ();
+ unless (exists $fields{id}) {
+ unshift @fields, "id";
+ $fields{id} = ();
+ }
+
+ # canonicalize cf-foo to cf.{foo}
+ for my $field (@fields) {
+ if ($field =~ /^(c(?:ustom)?f(?:ield)?)-(.+)/) {
+ $fields{"cf.{$2}"} = delete $fields{"$1-$2"};
+
+ # overwrite the element in @fields
+ $field = "cf.{$2}";
+ }
+ }
+}
+
+my (@comments, @output);
+
+foreach $object (@objects) {
+ my ($handler, $type, $id, $attr, $args);
+ my ($c, $o, $k, $e) = ("", ["id"], {id => $object}, 0);
+
+ my $i = 0;
+ if ($object =~ m{^($name)/(\d+|$label)(?:/($name)(?:/(.*))?)?$}o ||
+ $object =~ m{^($name)/(new)$}o)
+ {
+ ($type, $id, $attr, $args) = ($1, $2, ($3 || 'default'), $4);
+ $handler = "Forms/$type/$attr";
+
+ unless ($m->comp_exists($handler)) {
+ $args = "$attr/$args";
+ $handler = "Forms/$type/default";
+
+ unless ($m->comp_exists($handler)) {
+ $i = 2;
+ $c = "# Unknown object type: $type";
+ }
+ }
+ elsif ($id ne 'new' && $id !~ /^\d+$/) {
+ my $ns = "Forms/$type/ns";
+
+ # Can we resolve named objects?
+ unless ($m->comp_exists($ns)) {
+ $i = 3;
+ $c = "# Objects of type $type must be specified by numeric id.";
+ }
+ else {
+ my ($n, $s) = $m->comp("Forms/$type/ns", id => $id);
+ if ($n <= 0) { $i = 4; $c = "# $s"; }
+ else { $i = 0; $id = $n; }
+ }
+ }
+ else {
+ $i = 0;
+ }
+ }
+ else {
+ $i = 1;
+ $c = "# Invalid object specification: '$object'";
+ }
+
+ if ($i != 0) {
+ if ($content) {
+ (undef, $o, $k, $e) = @{ shift @$forms };
+ }
+ push @output, [ $c, $o, $k ];
+ next;
+ }
+
+ unless ($content) {
+ my $d = $m->comp($handler, id => $id, args => $args, format => $format, fields => \%fields);
+ my ($c, $o, $k, $e) = @$d;
+
+ if (!$e && @$o && keys %fields) {
+ my %lk = map { lc $_ => $_ } keys %$k;
+ @$o = map { $lk{$_} } @fields;
+ foreach my $key (keys %$k) {
+ delete $k->{$key} unless exists $fields{lc $key};
+ }
+ }
+ push(@output, [ $c, $o, $k ]) if ($c || @$o || keys %$k);
+ }
+ else {
+ my ($c, $o, $k, $e) = @{ shift @$forms };
+ my $d = $m->comp($handler, id => $id, args => $args, format => $format,
+ changes => $k);
+ ($c, $o, $k, $e) = @$d;
+
+ # We won't pass $e through to compose, trusting instead that the
+ # handler added suitable comments for the user.
+ if ($e) {
+ if (@$o) {
+ $status = "409 Syntax Error";
+ }
+ else {
+ $status = "400 Bad Request";
+ }
+ push @output, [ $c, $o, $k ];
+ }
+ else {
+ push @comments, $c;
+ }
+ }
+}
+
+unshift(@output, [ join "\n", @comments ]) if @comments;
+$output = form_compose(\@output);
+
+OUTPUT:
+$m->out("RT/".$RT::VERSION ." ".$status ."\n\n$output\n") if ($output || $status !~ /^200/);
+return;
+</%INIT>
diff --git a/rt/share/html/REST/1.0/logout b/rt/share/html/REST/1.0/logout
new file mode 100755
index 0000000..f800ce3
--- /dev/null
+++ b/rt/share/html/REST/1.0/logout
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%PERL>
+tied(%session)->delete if (defined %session);
+</%PERL>
+RT/<% $RT::VERSION %> 200 Ok
diff --git a/rt/share/html/REST/1.0/search/dhandler b/rt/share/html/REST/1.0/search/dhandler
new file mode 100755
index 0000000..86d33b3
--- /dev/null
+++ b/rt/share/html/REST/1.0/search/dhandler
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/search/dhandler
+%#
+<%INIT>
+my $status = "500 Server Error";
+my $output = "Unsupported object type.";
+</%INIT>
+RT/<% $RT::VERSION %> <% $status %>
+
+<% $output |n %>
diff --git a/rt/share/html/REST/1.0/search/ticket b/rt/share/html/REST/1.0/search/ticket
new file mode 100755
index 0000000..46eb5ff
--- /dev/null
+++ b/rt/share/html/REST/1.0/search/ticket
@@ -0,0 +1,159 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/search/ticket
+%#
+<%ARGS>
+$query
+$format => undef
+$orderby => undef
+$fields => undef
+</%ARGS>
+<%INIT>
+use RT::Interface::REST;
+my $output = "";
+my $status = "200 Ok";
+my $tickets = new RT::Tickets $session{CurrentUser};
+
+# Parse and validate any field specifications.
+my $field = RT::Interface::REST->field_spec;
+my (%fields, @fields);
+if ($fields) {
+ $format ||= "l";
+ unless ($fields =~ /^(?:$field,)*$field$/) {
+ $status = "400 Bad Request";
+ $output = "Invalid field specification: $fields";
+ goto OUTPUT;
+ }
+ @fields = map lc, split /,/, $fields;
+ @fields{@fields} = ();
+ unless (exists $fields{id}) {
+ unshift @fields, "id";
+ $fields{id} = ();
+ }
+}
+
+$format ||= "s";
+if ($format !~ /^[isl]$/) {
+ $status = "400 Bad request";
+ $output = "Unknown listing format: $format. (Use i, s, or l.)\n";
+ goto OUTPUT;
+}
+
+my ($n, $s);
+eval {
+ ($n, $s) = $tickets->FromSQL($query);
+};
+my $sortstring = "";
+if ($orderby) {
+ $sortstring = 'FIELD => ';
+ my $order = substr($orderby, 0, 1);
+ if ($order eq '+' || $order eq '-') {
+ $sortstring .= 'substr($orderby, 1)';
+ if ($order eq '+') {
+ $sortstring .= ", ORDER => 'ASC'";
+ } elsif ($order eq '-') {
+ $sortstring .= ", ORDER => 'DESC'";
+ }
+ } else {
+ $sortstring .= '$orderby';
+ }
+ my $foo = 'FIELD => ';
+ $foo .= '$orderby';
+ $tickets->OrderBy(eval $sortstring);
+}
+if ($@ || $n == 0) {
+ $s ||= $@;
+ $status = "400 Bad request";
+ $output = "Invalid query: '$s'.\n";
+ goto OUTPUT;
+}
+
+$n = 0;
+my @output;
+while (my $ticket = $tickets->Next) {
+ $n++;
+
+ my $id = $ticket->Id;
+ if ($format eq "i") {
+ $output .= "ticket/" . $id . "\n";
+ }
+ elsif ($format eq "s") {
+ if ($fields) {
+ my $result = $m->comp("/REST/1.0/Forms/ticket/default", id => $id, format => $format, fields => \%fields);
+ my ($notes, $order, $key_values, $errors) = @$result;
+ # If it's the first time through, add our header
+ if ($n == 1) {
+ $output .= join("\t",@$order)."\n";
+ }
+ # Cut off the annoying ticket/ before the id;
+ $key_values->{'id'} = $id;
+ $output .= join("\t", map {$key_values->{$_}} @$order)."\n";
+
+
+ } else {
+ $output .= $ticket->Id . ": ". $ticket->Subject . "\n";
+ }
+ }
+ else {
+ my $d = $m->comp("/REST/1.0/Forms/ticket/default", id => $id, format => $format, fields => \%fields);
+ my ($c, $o, $k, $e) = @$d;
+ push @output, [ $c, $o, $k ];
+ }
+}
+if ($n == 0 && $format ne "i") {
+ $output = "No matching results.\n";
+}
+
+$output = form_compose(\@output) if @output;
+
+OUTPUT:
+$m->out("RT/". $RT::VERSION . " " . $status ."\n\n");
+
+$m->out($output );
+return();
+</%INIT>
diff --git a/rt/share/html/REST/1.0/ticket/comment b/rt/share/html/REST/1.0/ticket/comment
new file mode 100755
index 0000000..000f352
--- /dev/null
+++ b/rt/share/html/REST/1.0/ticket/comment
@@ -0,0 +1,177 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/ticket/comment
+%#
+<%ARGS>
+$content
+</%ARGS>
+<%INIT>
+use MIME::Entity;
+use LWP::MediaTypes;
+use RT::Interface::REST;
+use File::Temp qw(tempfile);
+
+my $ticket = new RT::Ticket $session{CurrentUser};
+my $object = $r->path_info;
+my $status = "200 Ok";
+my $output;
+my $action;
+
+# http://.../REST/1.0/ticket/1/comment
+my ($c, $o, $k, $e) = @{ form_parse($content)->[0] };
+if ($e || !$o) {
+ if (!$o) {
+ $output = "Empty form submitted.\n";
+ }
+ else {
+ $c = "# Syntax error.";
+ $output = form_compose([[$c, $o, $k, $e]]);
+ }
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+
+$object =~ s#^/##;
+$object ||= $k->{Ticket};
+unless ($object =~ /^\d+/) {
+ $output = "Invalid ticket id: `$object'.\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+if ($k->{Ticket} && $object ne $k->{Ticket}) {
+ $output = "The submitted form and URL specify different tickets.\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+
+($action = $k->{Action}) =~ s/^(.)(.*)$/\U$1\L$2\E/;
+unless ($action =~ /^(?:Comment|Correspond)$/) {
+ $output = "Invalid action: `$action'.\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+
+my $text = $k->{Text};
+my @atts = @{ vsplit($k->{Attachment}) };
+
+if (!$k->{Text} && @atts == 0) {
+ $status = "400 Bad Request";
+ $output = "Empty comment with no attachments submitted.\n";
+ goto OUTPUT;
+}
+
+my $cgi = $m->cgi_object;
+my $ent = MIME::Entity->build(Type => "multipart/mixed");
+$ent->attach(Data => $k->{Text}) if $k->{Text};
+
+my $i = 1;
+foreach my $att (@atts) {
+ local $/=undef;
+ my $file = $att;
+ $file =~ s#^.*[\\/]##;
+
+ my $fh = $cgi->upload("attachment_$i");
+ if ($fh) {
+ my $buf;
+ my ($w, $tmp) = tempfile();
+ my $info = $cgi->uploadInfo();
+
+ while (sysread($fh, $buf, 8192)) {
+ syswrite($w, $buf);
+ }
+
+ $ent->attach(
+ Path => $tmp,
+ Type => $info->{'Content-Type'} || guess_media_type($tmp),
+ Filename => $file,
+ Disposition => "attachment"
+ );
+ }
+ else {
+ $status = "400 Bad Request";
+ $output = "No attachment for $att.\n";
+ goto OUTPUT;
+ }
+
+ $i++;
+}
+
+$ticket->Load($object);
+unless ($ticket->Id) {
+ $output = "Couldn't load ticket id: `$object'.\n";
+ $status = "404 Ticket not found";
+ goto OUTPUT;
+}
+unless ($ticket->CurrentUserHasRight('ModifyTicket') ||
+ ($action eq "Comment" &&
+ $ticket->CurrentUserHasRight("CommentOnTicket")) ||
+ ($action eq "Correspond" &&
+ $ticket->CurrentUserHasRight("ReplyToTicket")))
+{
+ $output = "You are not allowed to $action on ticket $object.\n";
+ $status = "403 Permission denied";
+ goto OUTPUT;
+}
+
+my $cc = join ", ", @{ vsplit($k->{Cc}) };
+my $bcc = join ", ", @{ vsplit($k->{Bcc}) };
+my ($n, $s) = $ticket->$action(MIMEObj => $ent,
+ CcMessageTo => $cc,
+ BccMessageTo => $bcc,
+ TimeTaken => $k->{TimeWorked} || 0);
+$output = $s;
+if ($k->{Status}) {
+ my ($status_n, $status_s) = $ticket->SetStatus($k->{'Status'} );
+ $output .= "\n".$status_s;
+}
+
+OUTPUT:
+</%INIT>
+RT/<% $RT::VERSION %> <% $status %>
+
+<% $output |n %>
diff --git a/rt/share/html/REST/1.0/ticket/link b/rt/share/html/REST/1.0/ticket/link
new file mode 100755
index 0000000..a5e8ae2
--- /dev/null
+++ b/rt/share/html/REST/1.0/ticket/link
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/ticket/link
+%#
+<%ARGS>
+$id => undef
+$del => 0
+$rel
+$to
+</%ARGS>
+<%INIT>
+use RT::Interface::REST;
+
+my $output;
+my $status = "200 Ok";
+my $ticket = new RT::Ticket $session{CurrentUser};
+my $object = $r->path_info;
+
+my @fields = qw(DependsOn DependedOnBy RefersTo ReferredToBy HasMember MemberOf);
+my %fields = map { lc $_ => $_ } @fields;
+my %lfields = (
+ HasMember => { Type => 'MemberOf', Mode => 'Base' },
+ ReferredToBy => { Type => 'RefersTo', Mode => 'Base' },
+ DependedOnBy => { Type => 'DependsOn', Mode => 'Base' },
+ MemberOf => { Type => 'MemberOf', Mode => 'Target' },
+ RefersTo => { Type => 'RefersTo', Mode => 'Target' },
+ DependsOn => { Type => 'DependsOn', Mode => 'Target' },
+);
+
+# http://.../REST/1.0/ticket/link/1
+
+$object =~ s#^/REST/1.0/ticket/link##;
+if ($id && $object && $id != $object) {
+ $output = "Different ids in URL (`$object') and submitted form (`$id').\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+$id ||= $object;
+unless ($id =~ /^\d+$/ && $to =~ /^\d+$/) {
+ my $bad = ($id !~ /^\d+$/) ? $id : $to;
+ $output = $r->path_info. "\n";
+ $output .= "Invalid ticket id: '$bad'.\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+unless (exists $fields{lc $rel}) {
+ $output = "Invalid link: '$rel'.\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+$rel = $fields{lc $rel};
+
+$ticket->Load($id);
+unless ($ticket->Id) {
+ $output = "Couldn't load ticket id: '$id'.\n";
+ $status = "404 Ticket not found";
+ goto OUTPUT;
+}
+
+my $type = $lfields{$rel}->{Type};
+my $mode = $lfields{$rel}->{Mode};
+
+my $n = 1;
+my $op = $del ? "DeleteLink" : "AddLink";
+
+($n, $output) = $ticket->$op(Type => $type, $mode => $to);
+if ($n == 0) {
+ $status = "500 Error";
+} else {
+ my $action = $del ? "Deleted" : "Created";
+ $output .= " $action link " . $ticket->Id . " $rel $to";
+}
+
+OUTPUT:
+</%INIT>
+RT/<% $RT::VERSION %> <% $status %>
+
+<% $output |n %>
diff --git a/rt/share/html/REST/1.0/ticket/merge b/rt/share/html/REST/1.0/ticket/merge
new file mode 100755
index 0000000..24c9829
--- /dev/null
+++ b/rt/share/html/REST/1.0/ticket/merge
@@ -0,0 +1,102 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# REST/1.0/ticket/merge
+%#
+<%ARGS>
+$id => undef
+$into
+</%ARGS>
+<%INIT>
+use RT::Interface::REST;
+
+my $output;
+my $status = "200 Ok";
+my $ticket = new RT::Ticket $session{CurrentUser};
+my $object = $r->path_info;
+
+# http://.../REST/1.0/ticket/merge/1
+
+$object =~ s#^/##;
+if ($id && $object && $id != $object) {
+ $output = "Different ids in URL (`$object') and submitted form (`$id').\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+$id ||= $object;
+unless ($id =~ /^\d+$/ && $into =~ /^\d+$/) {
+ my $bad = ($id !~ /^\d+$/) ? $id : $into;
+ $output = $r->path_info. "\n";
+ $output .= "Invalid ticket id: `$bad'.\n";
+ $status = "400 Bad Request";
+ goto OUTPUT;
+}
+
+$ticket->Load($id);
+unless ($ticket->Id) {
+ $output = "Couldn't load ticket id: `$id'.\n";
+ $status = "404 Ticket not found";
+ goto OUTPUT;
+}
+unless ($ticket->CurrentUserHasRight('ModifyTicket')) {
+ $output = "You are not allowed to modify ticket $id.\n";
+ $status = "403 Permission denied";
+ goto OUTPUT;
+}
+
+my ($n, $s) = $ticket->MergeInto($into);
+
+if ($n == 0) {
+ $status = "500 Error";
+}
+$output = $s;
+
+OUTPUT:
+</%INIT>
+RT/<% $RT::VERSION %> <% $status %>
+
+<% $output |n %>
diff --git a/rt/share/html/Search/Build.html b/rt/share/html/Search/Build.html
new file mode 100644
index 0000000..0fd7974
--- /dev/null
+++ b/rt/share/html/Search/Build.html
@@ -0,0 +1,323 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%#
+%# Data flow here:
+%# The page receives a Query from the previous page, and maybe arguments
+%# corresponding to actions. (If it doesn't get a Query argument, it pulls
+%# one out of the session hash. Also, it could be getting just a raw query from
+%# Build/Edit.html (Advanced).)
+%#
+%# After doing some stuff with default arguments and saved searches, the ParseQuery
+%# function (which is similar to, but not the same as, _parser in RT/Tickets_Overlay_SQL)
+%# converts the Query into a RT::Interface::Web::QueryBuilder::Tree. This mason file
+%# then adds stuff to or modifies the tree based on the actions that had been requested
+%# by clicking buttons. It then calls GetQueryAndOptionList on the tree to generate
+%# the SQL query (which is saved as a hidden input) and the option list for the Clauses
+%# box in the top right corner.
+%#
+%# Worthwhile refactoring: the tree manipulation code for the actions could use some cleaning
+%# up. The node-adding code is different in the "add" actions from in ParseQuery, which leads
+%# to things like ParseQuery correctly not quoting numbers in numerical fields, while the "add"
+%# action does quote it (this breaks SQLite).
+%#
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs,
+ current_tab => "Search/Build.html?".$QueryString,
+ Title => $title,
+ %query,
+ SavedSearchId => $saved_search{'Id'},
+ SavedChartSearchId => $ARGS{SavedChartSearchId},
+&>
+
+<form method="post" action="Build.html" name="BuildQuery">
+<input type="hidden" class="hidden" name="SavedSearchId" value="<% $saved_search{'Id'} %>" />
+<input type="hidden" class="hidden" name="SavedChartSearchId" value="<% $ARGS{'SavedChartSearchId'} %>" />
+<input type="hidden" class="hidden" name="Query" value="<% $query{'Query'} %>" />
+<input type="hidden" class="hidden" name="Format" value="<% $query{'Format'} %>" />
+
+
+
+
+<div id="pick-criteria">
+ <& Elements/PickCriteria, query => $query{'Query'}, cfqueues => $queues &>
+</div>
+<& /Elements/Submit, Label => loc('Add these terms'), Name => 'AddClause'&>
+<& /Elements/Submit, Label => loc('Add these terms and Search'), Name => 'DoSearch'&>
+
+
+<div id="editquery">
+<& Elements/EditQuery,
+ %ARGS,
+ actions => \@actions,
+ optionlist => $optionlist,
+ Description => $saved_search{'Description'},
+ &>
+</div>
+<div id="editsearches">
+ <& Elements/EditSearches, %saved_search, CurrentSearch => \%query &>
+</div>
+
+<span id="display-options">
+<& Elements/DisplayOptions,
+ %ARGS, %query,
+ AvailableColumns => $AvailableColumns,
+ CurrentFormat => $CurrentFormat,
+&>
+<& /Elements/Submit, Label => loc('Update format and Search'), Name => 'DoSearch', id=>"formatbuttons"&>
+</span>
+</form>
+
+<%INIT>
+use RT::Interface::Web::QueryBuilder;
+use RT::Interface::Web::QueryBuilder::Tree;
+
+$ARGS{SavedChartSearchId} ||= 'new';
+
+my $title = loc("Query Builder");
+
+my %query;
+for( qw(Query Format OrderBy Order RowsPerPage) ) {
+ $query{$_} = $ARGS{$_};
+}
+
+my %saved_search;
+my @actions = $m->comp( 'Elements/EditSearches:Init', %ARGS, Query => \%query, SavedSearch => \%saved_search);
+
+if ( $NewQuery ) {
+
+ # Wipe all data-carrying variables clear if we want a new
+ # search, or we're deleting an old one..
+ %query = ();
+ %saved_search = ( Id => 'new' );
+
+ # ..then wipe the session out..
+ delete $session{'CurrentSearchHash'};
+
+ # ..and the search results.
+ $session{'tickets'}->CleanSlate if defined $session{'tickets'};
+}
+
+{ # Attempt to load what we can from the session and preferences, set defaults
+
+ my $current = $session{'CurrentSearchHash'};
+ my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {};
+ my $default = { Query => '', Format => '', OrderBy => 'id', Order => 'ASC', RowsPerPage => 50 };
+
+ for( qw(Query Format OrderBy Order RowsPerPage) ) {
+ $query{$_} = $current->{$_} unless defined $query{$_};
+ $query{$_} = $prefs->{$_} unless defined $query{$_};
+ $query{$_} = $default->{$_} unless defined $query{$_};
+ }
+
+ for( qw(Order OrderBy) ) {
+ if (ref $query{$_} eq "ARRAY") {
+ $query{$_} = join( '|', @{ $query{$_} } );
+ }
+ }
+ if ( $query{'Format'} ) {
+ # Clean unwanted junk from the format
+ $query{'Format'} = $m->comp( '/Elements/ScrubHTML', Content => $query{'Format'} );
+ }
+}
+
+my $ParseQuery = sub {
+ my ($string, $results) = @_;
+
+ my $tree = RT::Interface::Web::QueryBuilder::Tree->new('AND');
+ @$results = $tree->ParseSQL( Query => $string, CurrentUser => $session{'CurrentUser'} );
+
+ return $tree;
+};
+
+my @parse_results;
+my $tree = $ParseQuery->( $query{'Query'}, \@parse_results );
+
+# if parsing went poorly, send them to the edit page to fix it
+if ( @parse_results ) {
+ return $m->comp( "Edit.html", Query => $query{'Query'}, actions => \@actions );
+}
+
+my @options = $tree->GetDisplayedNodes;
+my @current_values = grep defined, @options[@clauses];
+my @new_values = ();
+
+# {{{ Try to find if we're adding a clause
+foreach my $arg ( keys %ARGS ) {
+ next unless $arg =~ m/^ValueOf(\w+|'CF.{.*?}')$/
+ && ( ref $ARGS{$arg} eq "ARRAY"
+ ? grep $_ ne '', @{ $ARGS{$arg} }
+ : $ARGS{$arg} ne '' );
+
+ # We're adding a $1 clause
+ my $field = $1;
+
+ my ($op, $value);
+
+ #figure out if it's a grouping
+ my $keyword = $ARGS{ $field . "Field" } || $field;
+
+ my ( @ops, @values );
+ if ( ref $ARGS{ 'ValueOf' . $field } eq "ARRAY" ) {
+ # we have many keys/values to iterate over, because there is
+ # more than one CF with the same name.
+ @ops = @{ $ARGS{ $field . 'Op' } };
+ @values = @{ $ARGS{ 'ValueOf' . $field } };
+ }
+ else {
+ @ops = ( $ARGS{ $field . 'Op' } );
+ @values = ( $ARGS{ 'ValueOf' . $field } );
+ }
+ $RT::Logger->error("Bad Parameters passed into Query Builder")
+ unless @ops == @values;
+
+ for ( my $i = 0; $i < @ops; $i++ ) {
+ my ( $op, $value ) = ( $ops[$i], $values[$i] );
+ next if !defined $value || $value eq '';
+
+ if ( $value eq 'NULL' && $op =~ /=/ ) {
+ if ( $op eq '=' ) {
+ $op = "IS";
+ }
+ elsif ( $op eq '!=' ) {
+ $op = "IS NOT";
+ }
+
+ # This isn't "right", but...
+ # It has to be this way until #5182 is fixed
+ $value = "'NULL'";
+ }
+ else {
+ $value =~ s/'/\\'/g;
+ $value = "'$value'" unless $value =~ /^\d+$/;
+ }
+
+ my $clause = {
+ Key => $keyword,
+ Op => $op,
+ Value => $value
+ };
+
+ push @new_values, RT::Interface::Web::QueryBuilder::Tree->new($clause);
+ }
+}
+
+# }}}
+
+push @actions, $m->comp('Elements/EditQuery:Process',
+ %ARGS,
+ Tree => $tree,
+ Selected => \@current_values,
+ New => \@new_values,
+);
+
+# {{{ Rebuild $Query based on the additions / movements
+
+my $optionlist_arrayref;
+($query{'Query'}, $optionlist_arrayref) = $tree->GetQueryAndOptionList(\@current_values);
+
+my $optionlist = join "\n", map { qq(<option value="$_->{INDEX}" $_->{SELECTED}>)
+ . ("&nbsp;" x (5 * $_->{DEPTH}))
+ . $m->interp->apply_escapes($_->{TEXT}, 'h') . qq(</option>) } @$optionlist_arrayref;
+
+# }}}
+
+my $queues = $tree->GetReferencedQueues;
+
+# {{{ Deal with format changes
+my ( $AvailableColumns, $CurrentFormat );
+( $query{'Format'}, $AvailableColumns, $CurrentFormat ) = $m->comp(
+ 'Elements/BuildFormatString',
+ %ARGS,
+ cfqueues => $queues,
+ Format => $query{'Format'},
+);
+
+# }}}
+
+# if we're asked to save the current search, save it
+push @actions, $m->comp( 'Elements/EditSearches:Save', %ARGS, Query => \%query, SavedSearch => \%saved_search);
+
+# {{{ Push the updates into the session so we don't loose 'em
+
+$session{'CurrentSearchHash'} = {
+ %query,
+ SearchId => $saved_search{'Id'},
+ Object => $saved_search{'Object'},
+ Description => $saved_search{'Description'},
+};
+
+# }}}
+
+# {{{ Show the results, if we were asked.
+
+if ( $ARGS{'DoSearch'} ) {
+ $m->comp( 'Results.html', %query, SavedChartSearchId => $ARGS{'SavedChartSearchId'}, );
+ $m->comp( '/Elements/Footer' );
+ $m->abort;
+}
+
+# }}}
+
+# {{{ Build a querystring for the tabs
+
+my $QueryString = '';
+if ($NewQuery) {
+ $QueryString = 'NewQuery=1';
+}
+elsif ( $query{'Query'} ) {
+ $QueryString = $m->comp('/Elements/QueryString', %query );
+}
+
+# }}}
+
+</%INIT>
+
+<%ARGS>
+$NewQuery => 0
+@clauses => ()
+</%ARGS>
diff --git a/rt/share/html/Search/Bulk.html b/rt/share/html/Search/Bulk.html
new file mode 100755
index 0000000..fa20e33
--- /dev/null
+++ b/rt/share/html/Search/Bulk.html
@@ -0,0 +1,446 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs,
+ current_tab => "Search/Bulk.html",
+ Title => $title,
+ Format => $ARGS{'Format'}, # we don't want the locally modified one
+ Query => $Query,
+ Rows => $Rows,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ SavedSearchId => $SavedSearchId,
+ SavedChartSearchId => $SavedChartSearchId,
+ &>
+
+<& /Elements/ListActions, actions => \@results &>
+<form method="post" action="<% RT->Config->Get('WebPath') %>/Search/Bulk.html" enctype="multipart/form-data">
+% foreach my $var qw(Query Format OrderBy Order Rows Page SavedChartSearchId) {
+<input type="hidden" class="hidden" name="<%$var%>" value="<%$ARGS{$var} || ''%>" />
+%}
+<& /Elements/CollectionList,
+ Query => $Query,
+ DisplayFormat => $Format,
+ Format => $ARGS{'Format'},
+ Verbatim => 1,
+ AllowSorting => 1,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ Rows => $Rows,
+ Page => $Page,
+ BaseURL => RT->Config->Get('WebPath')."/Search/Bulk.html?",
+ Class => 'RT::Tickets'
+ &>
+
+% $m->callback(CallbackName => 'AfterTicketList', ARGSRef => \%ARGS);
+
+<hr />
+
+<& /Elements/Submit, Label => loc('Update'), CheckAll => 1, ClearAll => 1 &>
+<br />
+<&|/Widgets/TitleBox, title => $title &>
+<table>
+<tr>
+<td valign="top">
+<table>
+<tr><td class="label"> <&|/l&>Make Owner</&>: </td>
+<td class="value"> <& /Elements/SelectOwner, Name => "Owner" &> (<input type="checkbox" class="checkbox" name="ForceOwnerChange" /> <&|/l&>Force change</&>) </td></tr>
+<tr><td class="label"> <&|/l&>Add Requestor</&>: </td>
+<td class="value"> <input name="AddRequestor" size="20" /> </td></tr>
+<tr><td class="label"> <&|/l&>Remove Requestor</&>: </td>
+<td class="value"> <input name="DeleteRequestor" size="20" /> </td></tr>
+<tr><td class="label"> <&|/l&>Add Cc</&>: </td>
+<td class="value"> <input name="AddCc" size="20" /> </td></tr>
+<tr><td class="label"> <&|/l&>Remove Cc</&>: </td>
+<td class="value"> <input name="DeleteCc" size="20" /> </td></tr>
+<tr><td class="label"> <&|/l&>Add AdminCc</&>: </td>
+<td class="value"> <input name="AddAdminCc" size="20" /> </td></tr>
+<tr><td class="label"> <&|/l&>Remove AdminCc</&>: </td>
+<td class="value"> <input name="DeleteAdminCc" size="20" /> </td></tr>
+</table>
+</td>
+<td valign="top">
+<table>
+<tr><td class="label"> <&|/l&>Make subject</&>: </td>
+<td class="value"> <input name="Subject" size="20" /> </td></tr>
+<tr><td class="label"> <&|/l&>Make priority</&>: </td>
+<td class="value"> <& /Elements/SelectPriority, Name => "Priority" &> </td></tr>
+<tr><td class="label"> <&|/l&>Make queue</&>: </td>
+<td class="value"> <& /Elements/SelectQueue, Name => "Queue" &> </td></tr>
+<tr><td class="label"> <&|/l&>Make Status</&>: </td>
+<td class="value"> <& /Elements/SelectStatus, Name => "Status" &> </td></tr>
+<tr><td class="label"> <&|/l&>Make date Starts</&>: </td>
+<td class="value"> <& /Elements/SelectDate, Name => "Starts_Date", ShowTime => 0, Default => '' &> </td></tr>
+<tr><td class="label"> <&|/l&>Make date Started</&>: </td>
+<td class="value"> <& /Elements/SelectDate, Name => "Started_Date", ShowTime => 0, Default => '' &> </td></tr>
+<tr><td class="label"> <&|/l&>Make date Told</&>: </td>
+<td class="value"> <& /Elements/SelectDate, Name => "Told_Date", ShowTime => 0, Default => '' &> </td></tr>
+<tr><td class="label"> <&|/l&>Make date Due</&>: </td>
+<td class="value"> <& /Elements/SelectDate, Name => "Due_Date", ShowTime => 0, Default => '' &> </td></tr>
+<tr><td class="label"> <&|/l&>Make date Resolved</&>: </td>
+<td class="value"> <& /Elements/SelectDate, Name => "Resolved_Date", ShowTime => 0, Default => '' &> </td></tr>
+</table>
+
+</td>
+</tr>
+</table>
+</&>
+<&| /Widgets/TitleBox, title => loc('Add comments or replies to selected tickets') &>
+<table>
+<tr><td align="right"><&|/l&>Update Type</&>:</td>
+<td><select name="UpdateType">
+ <option value="private" ><&|/l&>Comments (not sent to requestors)</&></option>
+<option value="response" ><&|/l&>Reply to requestors</&></option>
+</select>
+</td></tr>
+<tr><td align="right"><&|/l&>Subject</&>:</td><td> <input name="UpdateSubject" size="60" value="" /></td></tr>
+% while (my $CF = $TxnCFs->Next()) {
+<tr>
+<td align="right"><% $CF->Name %>:</td>
+<td><& /Elements/EditCustomField,
+ CustomField => $CF,
+ NamePrefix => "Object-RT::Transaction--CustomField-"
+ &><em><% $CF->FriendlyType %></em></td>
+</td></tr>
+% } # end if while
+% if (exists $session{'Attachments'}) {
+<tr><td><&|/l&>Attached file</&>:</td>
+<td>
+<&|/l&>Check box to delete</&><br />
+% foreach my $attach_name (keys %{$session{'Attachments'}}) {
+<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
+% } # end of foreach
+</td>
+</tr>
+% } # end of if
+
+ <tr><td align="right"><&|/l&>Attach</&>:</td><td><input name="Attach" type="file" />
+ <input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" />
+ <input type="hidden" class="hidden" name="UpdateAttach" value="1" /></td></tr>
+ <tr><td class="labeltop"><&|/l&>Message</&>:</td><td>
+ <& /Elements/MessageBox, Name=>"UpdateContent"&>
+ </td></tr>
+ </table>
+
+</&>
+
+<%perl>
+my $cfs = RT::CustomFields->new($session{'CurrentUser'});
+$cfs->LimitToGlobal();
+$cfs->LimitToQueue($_) for keys %$seen_queues;
+</%perl>
+
+% if ($cfs->Count) {
+<&|/Widgets/TitleBox, title => loc('Edit Custom Fields'), color => "#336633"&>
+<table>
+<tr>
+<th><&|/l&>Name</&></th>
+<th><&|/l&>Add values</&></th>
+<th><&|/l&>Delete values</&></th>
+</tr>
+% while (my $cf = $cfs->Next()) {
+<tr>
+<td class="label"><% loc($cf->Name) %><br />
+<em>(<%$cf->FriendlyType%>)</em></td>
+% my $rows = 5;
+% my @add = (NamePrefix => 'Bulk-Add-CustomField-', CustomField => $cf, Rows => $rows, Multiple => ($cf->MaxValues ==1 ? 0 : 1) , Cols => 25);
+% my @del = (NamePrefix => 'Bulk-Delete-CustomField-', CustomField => $cf, Rows => $rows, Multiple => 1, Cols => 25);
+% if ($cf->Type eq 'Select') {
+<td><& /Elements/EditCustomFieldSelect, @add &></td>
+<td><& /Elements/EditCustomFieldSelect, @del &></td>
+% } elsif ($cf->Type eq 'Combobox') {
+<td><& /Elements/EditCustomFieldCombobox, @add &></td>
+<td><& /Elements/EditCustomFieldCombobox, @del &></td>
+% } elsif ($cf->Type eq 'Freeform') {
+<td><& /Elements/EditCustomFieldFreeform, @add &></td>
+<td><& /Elements/EditCustomFieldFreeform, @del &></td>
+% } elsif ($cf->Type eq 'Text') {
+<td><& /Elements/EditCustomFieldText, @add &></td>
+<td>&nbsp;</td>
+% } else {
+% $RT::Logger->crit("Unknown CustomField type: " . $cf->Type);
+% }
+</tr>
+% }
+</table>
+</&>
+% }
+
+<&|/Widgets/TitleBox, title => loc('Edit Links'), color => "#336633"&>
+<em><&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.</&></em><br />
+<& /Ticket/Elements/BulkLinks, Tickets => $Tickets &>
+</&>
+
+<& /Elements/Submit, Label => loc('Update') &>
+
+
+</form>
+
+
+<%INIT>
+unless ( defined $Rows ) {
+ $Rows = $RowsPerPage;
+ $ARGS{Rows} = $RowsPerPage;
+}
+my $title = loc("Update multiple tickets");
+
+# Iterate through the ARGS hash and remove anything with a null value.
+map ( $ARGS{$_} =~ /^$/ && ( delete $ARGS{$_} ), keys %ARGS );
+
+my (@results);
+
+# {{{ deal with deleting uploaded attachments
+foreach my $key (keys %ARGS) {
+ if ($key =~ m/^DeleteAttach-(.+)$/) {
+ delete $session{'Attachments'}{$1};
+ }
+ $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
+}
+# }}}
+
+# {{{ store the uploaded attachment in session
+if ($ARGS{'Attach'}) { # attachment?
+ my $attachment = MakeMIMEEntity(
+ AttachmentFieldName => 'Attach'
+ );
+
+ my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
+ $session{'Attachments'} = {
+ %{$session{'Attachments'} || {}},
+ $file_path => $attachment,
+ };
+}
+# }}}
+
+# delete temporary storage entry to make WebUI clean
+unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
+ delete $session{'Attachments'};
+}
+# }}}
+
+$Page ||= 1;
+
+$Format ||= RT->Config->Get('DefaultSearchResultFormat');
+
+# inject _CHECKBOX to the first field.
+$Format =~ s/'?([^']+)'?,/'___CHECKBOX__$1',/;
+
+my $Tickets = RT::Tickets->new( $session{'CurrentUser'} );
+$Tickets->FromSQL($Query);
+if ( $OrderBy =~ /\|/ ) {
+
+ # Multiple Sorts
+ my @OrderBy = split /\|/, $OrderBy;
+ my @Order = split /\|/, $Order;
+ $Tickets->OrderByCols(
+ map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } }
+ ( 0 .. $#OrderBy ) );
+}
+else {
+ $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order );
+}
+
+$Tickets->RowsPerPage($Rows) if ($Rows);
+$Tickets->GotoPage( $Page - 1 ); # SB uses page 0 as the first page
+
+Abort( loc("No search to operate on.") ) unless ($Tickets);
+
+# build up a list of all custom fields for tickets that we're displaying, so
+# we can display sane edit widgets.
+
+my $fields = {};
+my $seen_queues = {};
+while ( my $ticket = $Tickets->Next ) {
+ next if $seen_queues->{ $ticket->Queue }++;
+
+ my $custom_fields = $ticket->CustomFields;
+ while ( my $field = $custom_fields->Next ) {
+ $fields->{ $field->id } = $field;
+ }
+}
+
+#Iterate through each ticket we've been handed
+my @linkresults;
+my %queues;
+
+$Tickets->RedoSearch();
+
+# pull out the labels for any custom fields we want to update
+
+my $cf_del_keys;
+@$cf_del_keys = grep { /^Bulk-Delete-CustomField/ } keys %ARGS;
+my $cf_add_keys;
+@$cf_add_keys = grep { /^Bulk-Add-CustomField/ } keys %ARGS;
+
+unless ( $ARGS{'AddMoreAttach'} ) {
+ # Add session attachments if any to be processed by ProcessUpdateMessage
+ $ARGS{'UpdateAttachments'} = $session{'Attachments'} if ( $session{'Attachments'} );
+
+ while ( my $Ticket = $Tickets->Next ) {
+ next unless ( $ARGS{ "UpdateTicket" . $Ticket->Id } );
+
+ #Update the links
+ $ARGS{'id'} = $Ticket->id;
+ $queues{ $Ticket->QueueObj->Id }++;
+
+ my @updateresults = ProcessUpdateMessage(
+ TicketObj => $Ticket,
+ ARGSRef => \%ARGS,
+ );
+
+ #Update the basics.
+ my @basicresults =
+ ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS );
+ my @dateresults =
+ ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS );
+
+ #Update the watchers
+ my @watchresults =
+ ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS );
+
+ foreach my $type qw(MergeInto DependsOn MemberOf RefersTo) {
+ $ARGS{ $Ticket->id . "-" . $type } = $ARGS{"Ticket-$type"};
+ $ARGS{ $type . "-" . $Ticket->id } = $ARGS{"$type-Ticket"};
+ }
+ @linkresults =
+ ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS );
+ foreach my $type qw(MergeInto DependsOn MemberOf RefersTo) {
+ delete $ARGS{ $type . "-" . $Ticket->id };
+ delete $ARGS{ $Ticket->id . "-" . $type };
+ }
+
+ my @cfresults;
+
+ foreach my $list ( $cf_add_keys, $cf_del_keys ) {
+ next unless $list->[0];
+
+
+ my $op;
+ if ( $list->[0] =~ /Add/ ) {
+ $op = 'add';
+
+ }
+ elsif ( $list->[0] =~ /Del/ ) {
+ $op = 'del';
+ }
+ else {
+ $RT::Logger->crit(
+ "Got an op that was neither add nor delete. can never happen"
+ . $list->[0] );
+ last;
+ }
+
+ foreach my $key (@$list) {
+ my ( $cfid, $cf );
+ next if $key =~ /CustomField-(\d+)-Category$/;
+ if ( $key =~ /CustomField-(\d+)-/ ) {
+ $cfid = $1;
+ $cf = RT::CustomField->new( $session{'CurrentUser'} );
+ $cf->Load($cfid);
+ }
+ else {next}
+ my @values =
+ ref( $ARGS{$key} ) eq 'ARRAY'
+ ? @{ $ARGS{$key} }
+ : ( $ARGS{$key} );
+ map { s/(\r\n|\r)/\n/g; } @values; # fix the newlines
+ # now break the multiline values into multivalues
+ @values = map { split( /\n/, $_ ) } @values
+ unless ( $cf->SingleValue );
+
+ my $current_values = $Ticket->CustomFieldValues($cfid);
+ foreach my $value (@values) {
+ if ( $op eq 'del' && $current_values->HasEntry($value) ) {
+ my ( $id, $msg ) = $Ticket->DeleteCustomFieldValue(
+ Field => $cfid,
+ Value => $value
+ );
+ push @cfresults, $msg;
+ }
+
+ elsif ( $op eq 'add' && !$current_values->HasEntry($value) ) {
+ my ( $id, $msg ) = $Ticket->AddCustomFieldValue(
+ Field => $cfid,
+ Value => $value
+ );
+ push @cfresults, $msg;
+ }
+ }
+ }
+ }
+ my @tempresults = (
+ @watchresults, @basicresults, @dateresults,
+ @updateresults, @linkresults, @cfresults
+ );
+
+ @tempresults =
+ map { loc( "Ticket [_1]: [_2]", $Ticket->Id, $_ ) } @tempresults;
+
+ @results = ( @results, @tempresults );
+ }
+
+ # Cleanup WebUI
+ delete $session{'Attachments'};
+}
+
+my $TxnCFs = RT::CustomFields->new( $session{CurrentUser} );
+$TxnCFs->LimitToLookupType( RT::Transaction->CustomFieldLookupType );
+$TxnCFs->LimitToGlobalOrObjectId( sort keys %queues );
+
+</%INIT>
+<%args>
+$Format => undef
+$Page => 1
+$Rows => undef
+$RowsPerPage => undef
+$Order => 'ASC'
+$OrderBy => 'id'
+$Query => undef
+$SavedSearchId => undef
+$SavedChartSearchId => undef
+</%args>
diff --git a/rt/share/html/Search/Chart b/rt/share/html/Search/Chart
new file mode 100644
index 0000000..59e9fc6
--- /dev/null
+++ b/rt/share/html/Search/Chart
@@ -0,0 +1,186 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Query => "id > 0"
+$PrimaryGroupBy => 'Queue'
+$SecondaryGroupBy => undef
+$ChartStyle => 'bars'
+</%args>
+<%init>
+my $chart_class;
+use GD;
+use GD::Text;
+
+if ($ChartStyle eq 'pie') {
+ require GD::Graph::pie;
+ $chart_class = "GD::Graph::pie";
+} else {
+ require GD::Graph::bars;
+ $chart_class = "GD::Graph::bars";
+}
+
+use RT::Report::Tickets;
+my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} );
+my ($count_name, $value_name) = $tix->SetupGroupings(
+ Query => $Query, GroupBy => $PrimaryGroupBy,
+);
+
+my $chart = $chart_class->new( 600 => 400 );
+
+my $font = RT->Config->Get('ChartFont') || ['verdana', 'arial', gdMediumBoldFont];
+$chart->set_title_font( $font, 12 ) if $chart->can('set_title_font');
+$chart->set_legend_font( $font, 12 ) if $chart->can('set_legend_font');
+$chart->set_x_label_font( $font, 10 ) if $chart->can('set_x_label_font');
+$chart->set_y_label_font( $font, 10 ) if $chart->can('set_y_label_font');
+$chart->set_label_font( $font, 10 ) if $chart->can('set_label_font');
+$chart->set_x_axis_font( $font, 9 ) if $chart->can('set_x_axis_font');
+$chart->set_y_axis_font( $font, 9 ) if $chart->can('set_y_axis_font');
+$chart->set_values_font( $font, 9 ) if $chart->can('set_values_font');
+$chart->set_value_font( $font, 9 ) if $chart->can('set_value_font');
+
+# Pie charts don't like having no input, so we show a special image
+# that indicates an error message. Because this is used in an <img>
+# context, it can't be a simple error message. Without this check,
+# the chart will just be a non-loading image.
+if ($tix->Count == 0) {
+ my $plot = GD::Image->new(600 => 400);
+ $plot->colorAllocate(255, 255, 255); # background
+ my $black = $plot->colorAllocate(0, 0, 0);
+
+ require GD::Text::Wrap;
+ my $error = GD::Text::Wrap->new($plot,
+ color => $black,
+ text => loc("No tickets found."),
+ );
+ $error->set_font( $font, 12 );
+ $error->draw(0, 0);
+
+ $m->comp( 'SELF:Plot', plot => $plot, %ARGS );
+}
+
+if ($chart_class eq "GD::Graph::bars") {
+ $chart->set(
+ x_label => $tix->Label( $PrimaryGroupBy ),
+ x_labels_vertical => 1,
+ y_label => loc('Tickets'),
+ show_values => 1
+ );
+}
+
+my %class = (
+ Queue => 'RT::Queue',
+ Owner => 'RT::User',
+ Creator => 'RT::User',
+ LastUpdatedBy => 'RT::User',
+);
+my $class = $class{ $PrimaryGroupBy };
+
+my %data;
+while ( my $entry = $tix->Next ) {
+ my $key;
+ if ( $class ) {
+ my $q = $class->new( $session{'CurrentUser'} );
+ $q->Load( $entry->__Value( $value_name ) );
+ $key = $q->Name;
+ }
+ else {
+ $key = $entry->__Value($value_name);
+ }
+ $key ||= '(no value)';
+
+ my $value = $entry->__Value( $count_name );
+ if ($chart_class eq 'GD::Graph::pie') {
+ $key = loc($key) ." - ". $value;
+ } else {
+ $key = loc($key);
+ }
+ $data{ $key } = $value;
+}
+
+# XXX: Convert 1970-01-01 date to the 'Not Set'
+# this code should be generalized!!!
+if ( $PrimaryGroupBy =~ /(Daily|Monthly|Annually)$/ ) {
+ my $re;
+ $re = qr{1970-01-01} if $PrimaryGroupBy =~ /Daily$/;
+ $re = qr{1970-01} if $PrimaryGroupBy =~ /Monthly$/;
+ $re = qr{1970} if $PrimaryGroupBy =~ /Annually$/;
+ foreach my $k (keys %data) {
+ my $tmp = $k;
+ $tmp =~ s/^$re/loc('Not Set')/e or next;
+ $data{$tmp} = delete $data{$k};
+ }
+}
+
+unless (keys %data) {
+ $data{''} = 0;
+}
+
+my $plot = $chart->plot( [ [sort keys %data], [map $data{$_}, sort keys %data] ] ) or die $chart->error;
+$m->comp( 'SELF:Plot', plot => $plot, %ARGS );
+</%init>
+
+<%METHOD Plot>
+<%ARGS>
+$plot => undef
+</%ARGS>
+<%INIT>
+my @types = ('png', 'gif');
+
+for my $type (@types) {
+ $plot->can($type)
+ or next;
+
+ $r->content_type("image/$type");
+ $m->out( $plot->$type );
+ $m->abort();
+}
+
+die "Your GD library appears to support none of the following image types: " . join(', ', @types);
+</%INIT>
+
+</%METHOD>
diff --git a/rt/share/html/Search/Chart.html b/rt/share/html/Search/Chart.html
new file mode 100644
index 0000000..fb9f45c
--- /dev/null
+++ b/rt/share/html/Search/Chart.html
@@ -0,0 +1,98 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$PrimaryGroupBy => 'Queue'
+$SecondaryGroupBy => ''
+$ChartStyle => 'bars'
+$Description => undef
+</%args>
+<%init>
+$ARGS{SecondaryGroupBy} ||= '';
+$ARGS{Query} ||= 'id > 0';
+
+# FIXME: should be factored with RT::Report::Tickets::Label :(
+my $PrimaryGroupByLabel;
+if ( $PrimaryGroupBy =~ /^(?:CF|CustomField)\.{(.*)}$/ ) {
+ my $cf = $1;
+ if ( $cf =~ /\D/ ) {
+ $PrimaryGroupByLabel = loc( "custom field '[_1]'", $cf );
+ } else {
+ my $obj = RT::CustomField->new( $session{'CurrentUser'} );
+ $obj->Load( $cf );
+ $PrimaryGroupByLabel = loc( "custom field '[_1]'", $obj->Name );
+ }
+} else {
+ $PrimaryGroupByLabel = loc( $PrimaryGroupBy );
+}
+
+my $title = loc( "Search results grouped by [_1]", $PrimaryGroupByLabel );
+
+my $saved_search = $m->comp( '/Widgets/SavedSearch:new',
+ SearchType => 'Chart',
+ SearchFields => [qw(Query PrimaryGroupBy SecondaryGroupBy ChartStyle)] );
+
+my @actions = $m->comp( '/Widgets/SavedSearch:process', args => \%ARGS, self => $saved_search );
+
+</%init>
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs, Title => $title, Query => $ARGS{Query},
+ SavedChartSearchId => $saved_search->{SearchId} &>
+<& /Elements/ListActions, actions => \@actions &>
+<& /Search/Elements/Chart, %ARGS &>
+
+<br />
+<&| /Widgets/TitleBox, title => loc('Graph Properties')&>
+<form method="get" action="<%RT->Config->Get('WebPath')%>/Search/Chart.html">
+<input type="hidden" class="hidden" name="Query" value="<% $ARGS{Query} %>" />
+<input type="hidden" class="hidden" name="SavedChartSearchId" value="<% $saved_search->{SearchId} || 'new' %>" />
+<&|/l, $m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $ARGS{Query}, Default => $PrimaryGroupBy)
+&>[_1] chart by [_2]</&><input type="submit" class="button" value="<%loc('Update Graph')%>" />
+</form>
+</&>
+
+<& /Widgets/SavedSearch:show, %ARGS, Action => 'Chart.html', self => $saved_search, Title => loc('Saved charts') &>
diff --git a/rt/share/html/Search/Edit.html b/rt/share/html/Search/Edit.html
new file mode 100755
index 0000000..e3e2da2
--- /dev/null
+++ b/rt/share/html/Search/Edit.html
@@ -0,0 +1,99 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title&>
+<& /Ticket/Elements/Tabs,
+ current_tab => "Search/Edit.html?".$QueryString,
+ Title => $title,
+ Format => $Format,
+ Query => $Query,
+ Rows => $Rows,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ SavedSearchId => $SavedSearchId,
+ SavedChartSearchId => $SavedChartSearchId,
+&>
+
+<& Elements/NewListActions, actions => \@actions &>
+
+<form method="post" action="Build.html">
+<input type="hidden" class="hidden" name="SavedSearchId" value="<% $SavedSearchId %>" />
+<input type="hidden" class="hidden" name="SavedChartSearchId" value="<% $SavedChartSearchId %>" />
+<&|/Widgets/TitleBox, title => loc('Query'), &>
+<textarea name="Query" rows="8" cols="72"><% $Query %></textarea>
+</&>
+<&|/Widgets/TitleBox, title => loc('Format'), &>
+<textarea name="Format" rows="8" cols="72"><% $Format %></textarea>
+</&>
+<& /Elements/Submit, Label => loc("Apply"), Reset => 1, Caption => loc("Apply your changes")&>
+</form>
+
+<%INIT>
+my $title = loc("Edit Query");
+$Format = $m->comp('/Elements/ScrubHTML', Content => $Format);
+my $QueryString = $m->comp('/Elements/QueryString',
+ Query => $Query,
+ Format => $Format,
+ RowsPerPage => $Rows,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ );
+
+</%INIT>
+
+
+<%ARGS>
+$SavedSearchId => 'new'
+$SavedChartSearchId => 'new'
+$Query => ''
+$Format => ''
+$Rows => '50'
+$OrderBy => 'id'
+$Order => 'ASC'
+
+@actions => ()
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/BuildFormatString b/rt/share/html/Search/Elements/BuildFormatString
new file mode 100644
index 0000000..9728511
--- /dev/null
+++ b/rt/share/html/Search/Elements/BuildFormatString
@@ -0,0 +1,250 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Format => RT->Config->Get('DefaultSearchResultFormat')
+
+%cfqueues => ()
+
+$Face => undef
+$Size => undef
+$Link => undef
+$Title => undef
+
+$AddCol => undef
+$RemoveCol => undef
+$ColUp => undef
+$ColDown => undef
+
+$SelectDisplayColumns => undef
+$CurrentDisplayColumns => undef
+</%ARGS>
+<%init>
+# This can't be in a <once> block, because otherwise we return the
+# same \@fields every request, and keep tacking more CustomFields onto
+# it -- and it grows per request.
+
+# All the things we can display in the format string by default
+my @fields = qw(
+ id QueueName Subject
+ Status ExtendedStatus UpdateStatus
+ Type
+
+ OwnerName Requestors Cc AdminCc CreatedBy LastUpdatedBy
+
+ Priority InitialPriority FinalPriority
+
+ TimeWorked TimeLeft TimeEstimated
+
+ Starts StartsRelative
+ Started StartedRelative
+ Created CreatedRelative
+ LastUpdated LastUpdatedRelative
+ Told ToldRelative
+ Due DueRelative
+ Resolved ResolvedRelative
+
+ RefersTo ReferredToBy
+ DependsOn DependedOnBy
+ MemberOf Members
+ Parents Children
+
+ Bookmark
+
+ NEWLINE
+); # loc_qw
+
+$m->callback( CallbackOnce => 1, CallbackName => 'SetFieldsOnce', Fields => \@fields );
+
+my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'});
+foreach my $id (keys %cfqueues) {
+ # Gotta load up the $queue object, since queues get stored by name now. my $id
+ my $queue = RT::Queue->new($session{'CurrentUser'});
+ $queue->Load($id);
+ unless ($queue->id) {
+ # XXX TODO: This ancient code dates from a former developer
+ # we have no idea what it means or why cfqueues are so encoded.
+ $id =~ s/^.'*(.*).'*$/$1/;
+ $queue->Load($id);
+ }
+ $CustomFields->LimitToQueue($queue->Id);
+}
+$CustomFields->LimitToGlobal;
+
+while ( my $CustomField = $CustomFields->Next ) {
+ push @fields, "CustomField.{" . $CustomField->Name . "}";
+}
+
+$m->callback( Fields => \@fields, ARGSRef => \%ARGS );
+
+my ( @seen);
+
+$Format ||= RT->Config->Get('DefaultSearchResultFormat');
+my @format = split( /,\s*/, $Format );
+foreach my $field (@format) {
+ my %column = ();
+ $field =~ s/'(.*)'/$1/;
+ my ( $prefix, $suffix );
+ if ( $field =~ m/(.*)__(.*)__(.*)/ ) {
+ $prefix = $1;
+ $suffix = $3;
+ $field = $2;
+ }
+ $field = "<blank>" if !$field;
+ $column{Prefix} = $prefix;
+ $column{Suffix} = $suffix;
+ $field =~ s/\s*(.*)\s*/$1/;
+ $column{Column} = $field;
+ push @seen, \%column;
+}
+
+if ( $RemoveCol ) {
+ # we do this regex match to avoid a non-numeric warning
+ my ($index) = $CurrentDisplayColumns =~ /^(\d+)/;
+ my $column = $seen[$index];
+ if ($index) {
+ delete $seen[$index];
+ my @temp = @seen;
+ @seen = ();
+ foreach my $element (@temp) {
+ next unless $element;
+ push @seen, $element;
+ }
+ }
+}
+elsif ( $AddCol ) {
+ if ( defined $SelectDisplayColumns ) {
+ my $selected = $SelectDisplayColumns;
+ my @columns;
+ if (ref($selected) eq 'ARRAY') {
+ @columns = @$selected;
+ } else {
+ push @columns, $selected;
+ }
+ foreach my $col (@columns) {
+ my %column = ();
+ $column{Column} = $col;
+
+ if ( $Face eq "Bold" ) {
+ $column{Prefix} .= "<b>";
+ $column{Suffix} .= "</b>";
+ }
+ if ( $Face eq "Italic" ) {
+ $column{Prefix} .= "<i>";
+ $column{Suffix} .= "</i>";
+ }
+ if ($Size) {
+ $column{Prefix} .= "<" . $m->interp->apply_escapes( $Size, 'h' ) . ">";
+ $column{Suffix} .= "</" . $m->interp->apply_escapes( $Size, 'h' ) . ">";
+ }
+ if ( $Link eq "Display" ) {
+ $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Display.html?id=__id__">};
+ $column{Suffix} .= "</a>";
+ }
+ elsif ( $Link eq "Take" ) {
+ $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Display.html?Action=Take&id=__id__">};
+ $column{Suffix} .= "</a>";
+ }
+ elsif ( $Link eq "Respond" ) {
+ $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Update.html?Action=Respond&id=__id__">};
+ $column{Suffix} .= "</a>";
+ }
+ elsif ( $Link eq "Comment" ) {
+ $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Update.html?Action=Comment&id=__id__">};
+ $column{Suffix} .= "</a>";
+ }
+ elsif ( $Link eq "Resolve" ) {
+ $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Update.html?Action=Comment&DefaultStatus=resolved&id=__id__">};
+ $column{Suffix} .= "</a>";
+ }
+
+ if ($Title) {
+ $column{Suffix} .= "/TITLE:" . $m->interp->apply_escapes( $Title, 'h' );
+ }
+ push @seen, \%column;
+ }
+ }
+}
+elsif ( $ColUp ) {
+ my $index = $CurrentDisplayColumns;
+ if ( defined $index && ( $index - 1 ) >= 0 ) {
+ my $column = $seen[$index];
+ $seen[$index] = $seen[ $index - 1 ];
+ $seen[ $index - 1 ] = $column;
+ $CurrentDisplayColumns = $index - 1;
+ }
+}
+elsif ( $ColDown ) {
+ my $index = $CurrentDisplayColumns;
+ if ( defined $index && ( $index + 1 ) < scalar @seen ) {
+ my $column = $seen[$index];
+ $seen[$index] = $seen[ $index + 1 ];
+ $seen[ $index + 1 ] = $column;
+ $CurrentDisplayColumns = $index + 1;
+ }
+}
+
+
+my @format_string;
+foreach my $field (@seen) {
+ next unless $field;
+ my $row = "'";
+ $row .= $field->{'Prefix'} if defined $field->{'Prefix'};
+ $row .= "__" . ($field->{'Column'} =~ m/\(/ ? $field->{'Column'} # func, don't escape
+ : $m->interp->apply_escapes( $field->{'Column'}, 'h' )) . "__"
+ unless ( $field->{'Column'} eq "<blank>" );
+ $row .= $field->{'Suffix'} if defined $field->{'Suffix'};
+ $row .= "'";
+ push( @format_string, $row );
+}
+
+$Format = join(",\n", @format_string);
+
+
+return($Format, \@fields, \@seen);
+
+</%init>
diff --git a/rt/share/html/Search/Elements/Chart b/rt/share/html/Search/Elements/Chart
new file mode 100644
index 0000000..3db92c4
--- /dev/null
+++ b/rt/share/html/Search/Elements/Chart
@@ -0,0 +1,147 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Query => "id > 0"
+$PrimaryGroupBy => 'Queue'
+$SecondaryGroupBy => undef
+$ChartStyle => 'bars'
+</%args>
+<%init>
+use RT::Report::Tickets;
+$PrimaryGroupBy ||= 'Queue'; # make sure PrimaryGroupBy is not undef
+
+my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} );
+my ($count_name, $value_name) = $tix->SetupGroupings(
+ Query => $Query, GroupBy => $PrimaryGroupBy,
+);
+
+my %class = (
+ Queue => 'RT::Queue',
+ Owner => 'RT::User',
+ Creator => 'RT::User',
+ LastUpdatedBy => 'RT::User',
+);
+my $class = $class{ $PrimaryGroupBy };
+
+my (@keys, @values);
+while ( my $entry = $tix->Next ) {
+ if ($class) {
+ my $q = $class->new( $session{'CurrentUser'} );
+ $q->Load( $entry->__Value( $value_name ) );
+ push @keys, $q->Name;
+ }
+ else {
+ push @keys, $entry->__Value( $value_name );
+ }
+ $keys[-1] ||= loc('(no value)');
+ push @values, $entry->__Value( $count_name );
+}
+
+# XXX: Convert 1970-01-01 date to the 'Not Set'
+# this code should be generalized!!!
+if ( $PrimaryGroupBy =~ /(Daily|Monthly|Annually)$/ ) {
+ my $re;
+ $re = qr{1970-01-01} if $PrimaryGroupBy =~ /Daily$/;
+ $re = qr{1970-01} if $PrimaryGroupBy =~ /Monthly$/;
+ $re = qr{1970} if $PrimaryGroupBy =~ /Annually$/;
+ foreach (@keys) {
+ s/^$re/loc('Not Set')/e;
+ }
+}
+
+my %data;
+my %loc_keys;
+foreach my $key (@keys) { $data{$key} = shift @values; $loc_keys{$key} = loc($key); }
+my @sorted_keys = map { $loc_keys{$_}} sort { $loc_keys{$a} cmp $loc_keys{$b} } keys %loc_keys;
+my @sorted_values = map { $data{$_}} sort { $loc_keys{$a} cmp $loc_keys{$b} } keys %loc_keys;
+
+
+my $query_string = $m->comp('/Elements/QueryString', %ARGS);
+</%init>
+
+<% loc('Query:') %>&nbsp;<% $Query %><br />
+
+% if (RT->Config->Get('DisableGD')) {
+<% loc('Graphical charts are not available.') %><br />
+% } else {
+<img src="<%RT->Config->Get('WebPath')%>/Search/Chart?<%$query_string|n%>" /><br />
+% }
+
+<table class="collection-as-table">
+<tr>
+<th class="collection-as-table"><% loc($tix->Label($PrimaryGroupBy)) %>
+</th>
+<th class="collection-as-table"><&|/l&>Tickets</&>
+</th>
+</tr>
+% my ($i,$total);
+% while (my $key = shift @sorted_keys) {
+% $i++;
+% my $value = shift @sorted_values;
+% $total += $value;
+<tr class="<%$i%2 ? 'evenline' : 'oddline' %>">
+<td class="label collection-as-table">
+<%$key%>
+</td>
+<td class="value collection-as-table">
+<%$value%>
+</td>
+</tr>
+% }
+
+%$i++;
+<tr class="<%$i%2 ? 'evenline' : 'oddline' %>">
+<td class="label collection-as-table">
+<%loc('Total')%>
+</td>
+<td class="value collection-as-table">
+<%$total||''%>
+</td>
+</tr>
+
+</table>
diff --git a/rt/share/html/Search/Elements/ConditionRow b/rt/share/html/Search/Elements/ConditionRow
new file mode 100644
index 0000000..d45c662
--- /dev/null
+++ b/rt/share/html/Search/Elements/ConditionRow
@@ -0,0 +1,97 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<tr>
+<td class="label"><% $handle_block->( $Condition->{'Field'}, $Condition->{'Name'} .'Field' ) |n %></td>
+<td class="operator"><% $handle_block->( $Condition->{'Op'}, $Condition->{'Name'} .'Op') |n %></td>
+<td class="value"><% $handle_block->( $Condition->{'Value'}, 'ValueOf'. $Condition->{'Name'} ) |n %></td>
+</tr>
+<%INIT>
+return unless $Condition && $Condition->{'Name'};
+
+$m->callback( Condition => \$Condition );
+return unless $Condition;
+
+my $handle_block;
+$handle_block = sub {
+ my $box = shift;
+ return $box unless ref $box;
+
+ my $name = shift;
+ if ( UNIVERSAL::isa($box, 'ARRAY') ) {
+ my $res = '';
+ $res .= $handle_block->( $_, $name ) foreach @$box;
+ return $res;
+ }
+
+ return undef unless UNIVERSAL::isa($box, 'HASH');
+ if ( $box->{'Type'} eq 'component' ) {
+ $box->{'Arguments'} ||= {},
+ return $m->scomp( $box->{'Path'}, %{ $box->{'Arguments'} }, Name => $name );
+ }
+ if ( $box->{'Type'} eq 'text' ) {
+ my $default = $box->{'Default'} || '';
+ my $size = $box->{'Size'}? qq{size="$box->{'Size'}"} : '';
+ return qq{<input id="$name" name="$name" value="$default" $size />};
+ }
+ if ( $box->{'Type'} eq 'select' ) {
+ my $res = '';
+ $res .= qq{<select id="$name" name="$name">};
+ my @options = @{ $box->{'Options'} };
+ while( my $k = shift @options ) {
+ my $v = shift @options;
+ $res .= qq{<option value="$k">$v</option>};
+ }
+ $res .= qq{</select>};
+ return $res;
+ }
+};
+
+</%INIT>
+<%ARGS>
+$Condition => {}
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/DisplayOptions b/rt/share/html/Search/Elements/DisplayOptions
new file mode 100644
index 0000000..40d976c
--- /dev/null
+++ b/rt/share/html/Search/Elements/DisplayOptions
@@ -0,0 +1,134 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => loc("Sorting"), id => 'sorting' &>
+<table valign="top">
+
+% for my $o (0..3) {
+% $Order[$o] ||= ''; $OrderBy[$o] ||= '';
+<tr>
+<td class="label">
+% if ($o == 0) {
+<&|/l&>Order by</&>:
+% }
+</td>
+<td class="value">
+<select name="OrderBy">
+% if ($o > 0) {
+<option value=""><&|/l&>~[none~]</&></option>
+% }
+% foreach my $field (sort keys %fields) {
+% next unless $field;
+<option value="<%$field%>"
+% if (defined $OrderBy[$o] and $field eq $OrderBy[$o]) {
+selected="selected"
+% }
+><% loc($field) %></option>
+% }
+</select>
+<select name="Order">
+<option value="ASC"
+% unless ( ($Order[$o]||'') eq "DESC" ) {
+selected="selected"
+% }
+><&|/l&>Asc</&></option>
+<option value="DESC"
+% if ( ($Order[$o]||'') eq "DESC" ) {
+selected="selected"
+% }
+><&|/l&>Desc</&></option>
+</select>
+</td>
+</tr>
+% }
+<tr>
+<td class="label">
+<&|/l&>Rows per page</&>:
+</td><td class="value">
+<& /Elements/SelectResultsPerPage,
+ Name => "RowsPerPage",
+ Default => $RowsPerPage &>
+</td>
+</tr>
+</table>
+</&>
+<&| /Widgets/TitleBox, title => loc("Display Columns"), id => 'columns' &>
+<& EditFormat, %ARGS &>
+</&>
+
+<%INIT>
+my $tickets = new RT::Tickets($session{'CurrentUser'});
+my %fields = %{$tickets->FIELDS};
+map { $fields{$_}->[0] =~ /^(?:ENUM|INT|DATE|STRING|ID)$/ || delete $fields{$_} } keys %fields;
+delete $fields{'EffectiveId'};
+$fields{'Owner'} = 1;
+$fields{ $_ . '.EmailAddress' } = 1 foreach( qw(Requestor Cc AdminCc) );
+
+# Add all available CustomFields to the list of sortable columns.
+my @cfs = grep /^CustomField/, @{$ARGS{AvailableColumns}};
+$fields{$_}=1 for @cfs;
+
+# Add PAW sort
+$fields{'Custom.Ownership'} = 1;
+
+my @Order = split /\|/, $Order;
+my @OrderBy = split /\|/, $OrderBy;
+if ($Order =~ /\|/) {
+ @Order = split /\|/, $Order;
+} else {
+ @Order = ( $Order );
+}
+
+</%INIT>
+
+<%ARGS>
+$Order => undef
+$OrderBy => undef
+$RowsPerPage => undef
+$Format => undef
+$GroupBy => 'id'
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/EditFormat b/rt/share/html/Search/Elements/EditFormat
new file mode 100644
index 0000000..9dd6160
--- /dev/null
+++ b/rt/share/html/Search/Elements/EditFormat
@@ -0,0 +1,113 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+
+<tr>
+<th><&|/l&>Add Columns</&>:</th>
+<th><&|/l&>Format</&>:</th>
+<th></th>
+<th><&|/l&>Show Columns</&>:</th>
+</tr>
+
+<tr>
+
+<td valign="top"><select size="6" name="SelectDisplayColumns" multiple="multiple">
+% my %seen;
+% foreach my $field ( grep !$seen{lc $_}++, @$AvailableColumns) {
+<option value="<% $field %>"><% loc($field) %></option>
+% }
+</select></td>
+
+<td><&|/l&>Link</&>:
+<select name="Link">
+<option value="None">-</option>
+<option value="Display"><&|/l&>Display</&></option>
+<option value="Take"><&|/l&>Take</&></option>
+<option value="Respond"><&|/l&>Respond</&></option>
+<option value="Comment"><&|/l&>Comment</&></option>
+<option value="Resolve"><&|/l&>Resolve</&></option>
+</select>
+<br /><&|/l&>Title</&>: <input name="Title" size="10" />
+<br /><&|/l&>Size</&>:
+<select name="Size">
+<option value="">-</option>
+<option value="Small"><&|/l&>Small</&></option>
+<option value="Large"><&|/l&>Large</&></option>
+</select>
+<br /><&|/l&>Style</&>:
+<select name="Face">
+<option value="">-</option>
+<option value="Bold"><&|/l&>Bold</&></option>
+<option value="Italic"><&|/l&>Italic</&></option>
+</select>
+</td>
+
+<td><input type="submit" class="button" name="AddCol" value=" &rarr; " /></td>
+
+<td valign="top">
+<select size="4" name="CurrentDisplayColumns">
+% my $i=0;
+% foreach my $field ( @$CurrentFormat ) {
+<option value="<% $i++ %>><% $field->{Column} %>"><% loc( $field->{Column} ) %></option>
+% }
+</select>
+<br />
+<center>
+<input type="submit" class="button" name="ColUp" value=" &uarr; " />
+<input type="submit" class="button" name="ColDown" value=" &darr; " />
+<input type="submit" class="button" name="RemoveCol" value="<%loc('Delete')%>" />
+</center>
+</td>
+
+</tr>
+</table>
+
+<%ARGS>
+$CurrentFormat => undef
+$AvailableColumns => undef
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/EditQuery b/rt/share/html/Search/Elements/EditQuery
new file mode 100644
index 0000000..9a10ddf
--- /dev/null
+++ b/rt/share/html/Search/Elements/EditQuery
@@ -0,0 +1,243 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& NewListActions, actions => $actions &>
+<&|/Widgets/TitleBox, title => join(': ', grep defined, loc("Current search"), $Description) &>
+
+<select size="10" name="clauses" style="width: 100%" multiple="multiple">
+% $m->out($optionlist);
+</select>
+
+<p align="center">
+<input type="submit" class="button" name="Up" value=" &uarr; " />
+<input type="submit" class="button" name="Down" value=" &darr; " />
+<input type="submit" class="button" name="Left" value=" &larr; " />
+<input type="submit" class="button" name="Right" value=" &rarr; " />
+<input type="submit" class="button" name="Toggle" value="<&|/l&>And/Or</&>" />
+<input type="submit" class="button" name="DeleteClause" value="<&|/l&>Delete</&>" />
+%#<input type="submit" class="button" name="EditQuery" value="Advanced" />
+</p>
+
+</&>
+<%ARGS>
+$Description => undef
+$optionlist => ''
+$actions => []
+</%ARGS>
+
+<%METHOD Process>
+<%ARGS>
+$Tree
+$Selected
+@New => ()
+</%ARGS>
+<%INIT>
+
+my @NewSelection = ();
+
+my @results;
+if ( $ARGS{'Up'} || $ARGS{'Down'} ) {
+ if (@$Selected) {
+ foreach my $value (@$Selected) {
+ my $parent = $value->getParent;
+ my $index = $value->getIndex;
+ my $newindex = $index;
+ $newindex++ if $ARGS{'Down'};
+ $newindex-- if $ARGS{'Up'};
+ if ( $newindex < 0 || $newindex >= $parent->getChildCount ) {
+ push( @results, [ loc("error: can't move up"), -1 ] ) if $ARGS{'Up'};
+ push( @results, [ loc("error: can't move down"), -1 ] ) if $ARGS{'Down'};
+ next;
+ }
+
+ $parent->removeChild( $index );
+ $parent->insertChild( $newindex, $value );
+ }
+ }
+ else {
+ push( @results, [ loc("error: nothing to move"), -1 ] );
+ }
+}
+elsif ( $ARGS{"Left"} ) {
+ if (@$Selected) {
+ foreach my $value (@$Selected) {
+ my $parent = $value->getParent;
+ if( $value->isRoot || $parent->isRoot ) {
+ push( @results, [ loc("error: can't move left"), -1 ] );
+ next;
+ }
+
+ my $grandparent = $parent->getParent;
+ if( $grandparent->isRoot ) {
+ push( @results, [ loc("error: can't move left"), -1 ] );
+ next;
+ }
+
+ my $index = $parent->getIndex;
+ $parent->removeChild($value);
+ $grandparent->insertChild( $index, $value );
+ if ( $parent->isLeaf ) {
+ $grandparent->removeChild($parent);
+ }
+ }
+ }
+ else {
+ push( @results, [ loc("error: nothing to move"), -1 ] );
+ }
+}
+elsif ( $ARGS{"Right"} ) {
+ if (@$Selected) {
+ foreach my $value (@$Selected) {
+ my $parent = $value->getParent;
+ my $index = $value->getIndex;
+
+ my $newparent;
+ if ( $index > 0 ) {
+ my $sibling = $parent->getChild( $index - 1 );
+ $newparent = $sibling unless $sibling->isLeaf;
+ }
+ $newparent ||= RT::Interface::Web::QueryBuilder::Tree->new( $ARGS{'AndOr'} || 'AND', $parent );
+
+ $parent->removeChild($value);
+ $newparent->addChild($value);
+ }
+ }
+ else {
+ push( @results, [ loc("error: nothing to move"), -1 ] );
+ }
+}
+elsif ( $ARGS{"DeleteClause"} ) {
+ if (@$Selected) {
+ my (@top);
+ my %Selected = map { $_ => 1 } @$Selected;
+ foreach my $node ( @$Selected ) {
+ my $tmp = $node->getParent;
+ while ( !$Selected{ $tmp } && !$tmp->isRoot ) {
+ $tmp = $tmp->getParent;
+ }
+ next if $Selected{ $tmp };
+ push @top, $node;
+ }
+
+ my %seen;
+ my @non_siblings_top = grep !$seen{ $_->getParent }++, @top;
+
+ foreach ( @New ) {
+ my $add = $_->clone;
+ foreach my $selected( @non_siblings_top ) {
+ my $newindex = $selected->getIndex + 1;
+ $selected->insertSibling( $newindex, $add );
+ }
+ $add->getParent->setNodeValue( $ARGS{'AndOr'} );
+ push @NewSelection, $add;
+ }
+ @New = ();
+
+ while( my $node = shift @top ) {
+ my $parent = $node->getParent;
+ $parent->removeChild($node);
+ $node->DESTROY;
+ }
+ @$Selected = ();
+ }
+ else {
+ push( @results, [ loc("error: nothing to delete"), -1 ] );
+ }
+}
+elsif ( $ARGS{"Toggle"} ) {
+ if (@$Selected) {
+ my %seen;
+ my @unique_nodes = grep !$seen{ $_ + 0 }++,
+ map ref $_->getNodeValue? $_->getParent: $_,
+ @$Selected;
+
+ foreach my $node ( @unique_nodes ) {
+ if ( $node->getNodeValue eq 'AND' ) {
+ $node->setNodeValue('OR');
+ }
+ else {
+ $node->setNodeValue('AND');
+ }
+ }
+ }
+ else {
+ push( @results, [ loc("error: nothing to toggle"), -1 ] );
+ }
+}
+
+if ( @New && @$Selected ) {
+ my %seen;
+ my @non_siblings_selected = grep !$seen{ $_->getParent }++, @$Selected;
+
+ foreach ( @New ) {
+ my $add = $_->clone;
+ foreach my $selected( @non_siblings_selected ) {
+ my $newindex = $selected->getIndex + 1;
+ $selected->insertSibling( $newindex, $add );
+ }
+ $add->getParent->setNodeValue( $ARGS{'AndOr'} );
+ push @NewSelection, $add;
+ }
+ @$Selected = ();
+}
+elsif ( @New ) {
+ foreach ( @New ) {
+ my $add = $_->clone;
+ $Tree->addChild( $add );
+ push @NewSelection, $add;
+ }
+ $Tree->setNodeValue( $ARGS{'AndOr'} );
+}
+$_->DESTROY foreach @New;
+
+push @$Selected, @NewSelection;
+
+$Tree->PruneChildlessAggregators;
+
+return @results;
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Search/Elements/EditSearches b/rt/share/html/Search/Elements/EditSearches
new file mode 100644
index 0000000..62871fd
--- /dev/null
+++ b/rt/share/html/Search/Elements/EditSearches
@@ -0,0 +1,296 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => loc($Title)&>
+
+%# Hide all the save functionality if the user shouldn't see it.
+% if ( $can_modify ) {
+<&|/l&>Privacy:</&>
+<& SelectSearchObject, Name => 'SavedSearchOwner', Objects => \@Objects, Object => ( $Object && $Object->id ) ? $Object->Object : '' &>
+<br />
+<&|/l&>Description</&>:
+<input size="25" name="SavedSearchDescription" value="<% $Description || '' %>" />
+
+% if ($Id ne 'new') {
+<nobr>
+% if ( $Dirty ) {
+<input type="submit" class="button" name="SavedSearchRevert" value="<%loc('Revert')%>" />
+% }
+<input type="submit" class="button" name="SavedSearchDelete" value="<%loc('Delete')%>" />
+% if ( $AllowCopy ) {
+<input type="submit" class="button" name="SavedSearchCopy" value="<%loc('Save as New')%>" />
+% }
+</nobr>
+% }
+% if ( $Object && $Object->Id ) {
+<input type="submit" class="button" name="SavedSearchSave" value="<%loc('Update')%>" />
+% } else {
+<input type="submit" class="button" name="SavedSearchSave" value="<%loc('Save')%>" />
+%}
+% }
+<br />
+<hr />
+<&|/l&>Load saved search:</&>
+<& SelectSearchesForObjects, Name => 'SavedSearchLoad', Objects => \@Objects, SearchType => $Type &>
+<input type="submit" value="<% loc('Load') %>" class="button" />
+
+</&>
+
+<%INIT>
+return unless $session{'CurrentUser'}->HasRight(
+ Right => 'LoadSavedSearch',
+ Object => $RT::System,
+);
+
+my $can_modify = $session{'CurrentUser'}->HasRight(
+ Right => 'CreateSavedSearch',
+ Object => $RT::System,
+);
+
+use RT::SavedSearches;
+my @Objects = RT::SavedSearches->new($session{CurrentUser})->_PrivacyObjects;
+push @Objects, RT::System->new( $session{'CurrentUser'} )
+ if $session{'CurrentUser'}->HasRight( Object=> $RT::System,
+ Right => 'SuperUser' );
+
+my $is_dirty = sub {
+ my %arg = (
+ Query => {},
+ SavedSearch => {},
+ SearchFields => [qw(Query Format OrderBy Order RowsPerPage)],
+ @_
+ );
+
+ my $obj = $arg{'SavedSearch'}->{'Object'};
+ return 0 unless $obj && $obj->id;
+
+ foreach( @{ $arg{'SearchFields'} } ) {
+ return 1 if $obj->SubValue( $_ ) ne $arg{'Query'}->{$_};
+ }
+
+ return 0;
+};
+
+# If we're modifying an old query, check if it's been changed
+my $Dirty = $is_dirty->(
+ Query => $CurrentSearch,
+ SavedSearch => { Id => $Id, Object => $Object, Description => $Description },
+ SearchFields => \@SearchFields,
+);
+
+</%INIT>
+
+<%ARGS>
+$Id => 'new'
+$Object => undef
+$Type => 'Ticket'
+$Description => ''
+$CurrentSearch => {}
+@SearchFields => ()
+$AllowCopy => 1
+$Title => loc('Saved searches')
+</%ARGS>
+
+<%METHOD Init>
+<%ARGS>
+$Query => {}
+$SavedSearch => {}
+@SearchFields => qw(Query Format OrderBy Order RowsPerPage)
+</%ARGS>
+<%INIT>
+
+$SavedSearch->{'Id'} = ( $ARGS{Type} && $ARGS{Type} eq 'Chart' ?
+$ARGS{'SavedChartSearchId'} : $ARGS{'SavedSearchId'} ) || 'new';
+$SavedSearch->{'Description'} = $ARGS{'SavedSearchDescription'} || undef;
+$SavedSearch->{'Privacy'} = $ARGS{'SavedSearchOwner'} || undef;
+
+my @results;
+
+if ( $ARGS{'SavedSearchRevert'} ) {
+ $ARGS{'SavedSearchLoad'} = $SavedSearch->{'Id'};
+}
+
+if ( $ARGS{'SavedSearchLoad'} ) {
+ my ($container, $id ) = _parse_saved_search ($ARGS{'SavedSearchLoad'});
+ if ( $container ) {
+ my $search = $container->Attributes->WithId( $id );
+ $SavedSearch->{'Id'} = $ARGS{'SavedSearchLoad'};
+ $SavedSearch->{'Object'} = $search;
+ $SavedSearch->{'Description'} = $search->Description;
+ $Query->{$_} = $search->SubValue($_) foreach @SearchFields;
+
+ if ( $ARGS{'SavedSearchRevert'} ) {
+ push @results, loc('Loaded original "[_1]" saved search', $SavedSearch->{'Description'} );
+ } else {
+ push @results, loc('Loaded saved search "[_1]"', $SavedSearch->{'Description'} );
+ }
+ }
+ else {
+ push @results, loc( 'Can not load saved search "[_1]"',
+ $ARGS{'SavedSearchLoad'} );
+ return @results;
+ }
+}
+elsif ( $ARGS{'SavedSearchDelete'} ) {
+ # We set $SearchId to 'new' above already, so peek into the %ARGS
+ my ($container, $id) = _parse_saved_search( $SavedSearch->{'Id'} );
+ if ( $container && $container->id ) {
+ # We have the object the entry is an attribute on; delete the entry...
+ $container->Attributes->DeleteEntry( Name => 'SavedSearch', id => $id );
+ }
+ $SavedSearch->{'Id'} = 'new';
+ $SavedSearch->{'Object'} = undef;
+ $SavedSearch->{'Description'} = undef;
+ push @results, loc("Deleted saved search");
+}
+elsif ( $ARGS{'SavedSearchCopy'} ) {
+ my ($container, $id ) = _parse_saved_search( $ARGS{'SavedSearchId'} );
+ $SavedSearch->{'Object'} = $container->Attributes->WithId( $id );
+ if ( $ARGS{'SavedSearchDescription'} && $ARGS{'SavedSearchDescription'} ne $SavedSearch->{'Object'}->Description ) {
+ $SavedSearch->{'Description'} = $ARGS{'SavedSearchDescription'};
+ } else {
+ $SavedSearch->{'Description'} = loc( "[_1] copy", $SavedSearch->{'Object'}->Description );
+ }
+ $SavedSearch->{'Id'} = 'new';
+ $SavedSearch->{'Object'} = undef;
+}
+
+if ( $SavedSearch->{'Id'} && $SavedSearch->{'Id'} ne 'new'
+ && !$SavedSearch->{'Object'} )
+{
+ my ($container, $id ) = _parse_saved_search( $ARGS{'SavedSearchId'} );
+ $SavedSearch->{'Object'} = $container->Attributes->WithId( $id );
+ $SavedSearch->{'Description'} ||= $SavedSearch->{'Object'}->Description;
+}
+
+return @results;
+
+</%INIT>
+</%METHOD>
+
+<%METHOD Save>
+<%ARGS>
+$Query => {}
+$SavedSearch => {}
+@SearchFields => qw(Query Format OrderBy Order RowsPerPage)
+</%ARGS>
+<%INIT>
+
+return unless $ARGS{'SavedSearchSave'} || $ARGS{'SavedSearchCopy'};
+
+my @results;
+my $obj = $SavedSearch->{'Object'};
+my $id = $SavedSearch->{'Id'};
+my $desc = $SavedSearch->{'Description'};
+my $privacy = $SavedSearch->{'Privacy'};
+
+my %params = map { $_ => $Query->{$_} } @SearchFields;
+my ($new_obj_type, $new_obj_id) = split(/\-/, ($privacy || ''));
+
+if ( $obj && $obj->id ) {
+ # permission check
+ if ($obj->Object->isa('RT::System')) {
+ unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) {
+ push @results, loc("No permission to save system-wide searches");
+ return @results;
+ }
+ }
+
+ $obj->SetSubValues( %params );
+ $obj->SetDescription( $desc );
+
+ my $obj_type = ref($obj->Object);
+ # We need to get current obj_id now, because when we change obj_type to
+ # RT::System, $obj->Object->Id returns 1, not the old one :(
+ my $obj_id = $obj->Object->Id;
+
+ if ( $new_obj_type && $new_obj_id ) {
+ my ($val, $msg);
+ if ( $new_obj_type ne $obj_type ) {
+ ($val, $msg ) = $obj->SetObjectType($new_obj_type);
+ push @results, loc ('Unable to set privacy object: [_1]', $msg) unless ( $val );
+ }
+ if ( $new_obj_id != $obj_id ) {
+ ($val, $msg) = $obj->SetObjectId($new_obj_id);
+ push @results, loc ('Unable to set privacy id: [_1]', $msg) unless ( $val );
+ }
+ } else {
+ push @results, loc('Unable to determine object type or id');
+ }
+ push @results, loc('Updated saved search "[_1]"', $desc);
+}
+elsif ( $id eq 'new' ) {
+ my $saved_search = RT::SavedSearch->new( $session{'CurrentUser'} );
+ my ($status, $msg) = $saved_search->Save(
+ Privacy => $privacy,
+ Name => $desc,
+ Type => $SavedSearch->{'Type'},
+ SearchParams => \%params,
+ );
+
+ if ( $status ) {
+ $SavedSearch->{'Object'} =
+ $session{'CurrentUser'}->UserObj->Attributes->WithId( $saved_search->Id );
+ # Build new SearchId
+ $SavedSearch->{'Id'} =
+ ref( $session{'CurrentUser'}->UserObj ) . '-'
+ . $session{'CurrentUser'}->UserObj->Id
+ . '-SavedSearch-'
+ . $SavedSearch->{'Object'}->Id;
+ }
+ else {
+ push @results, loc("Can't find a saved search to work with").': '.loc($msg);
+ }
+}
+else {
+ push @results, loc("Can't save this search");
+}
+
+return @results;
+
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Search/Elements/Graph b/rt/share/html/Search/Elements/Graph
new file mode 100644
index 0000000..620cbc5
--- /dev/null
+++ b/rt/share/html/Search/Elements/Graph
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+return $m->comp('/Ticket/Graphs/Elements/ShowGraph', %ARGS);
+</%INIT>
diff --git a/rt/share/html/Search/Elements/NewListActions b/rt/share/html/Search/Elements/NewListActions
new file mode 100644
index 0000000..8e2cbab
--- /dev/null
+++ b/rt/share/html/Search/Elements/NewListActions
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<b><%loc('Results')%></b><br />
+% foreach my $action (@actions) {
+% my @item = @$action;
+% if ($item[1] < 0) {
+<font color="red">
+% }
+&nbsp;<%$item[0]%><br />
+% if ($item[1] < 0) {
+</font>
+% }
+% }
+<br />
+<%init>
+@actions = map ref $_? $_: [$_, 0], grep defined && length, @actions;
+return unless @actions;
+</%init>
+<%ARGS>
+@actions => undef
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/PickBasics b/rt/share/html/Search/Elements/PickBasics
new file mode 100644
index 0000000..7e4bc73
--- /dev/null
+++ b/rt/share/html/Search/Elements/PickBasics
@@ -0,0 +1,214 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% foreach( @lines ) {
+<& ConditionRow, Condition => $_ &>
+% }
+<%INIT>
+
+my @lines = (
+ {
+ Name => 'id',
+ Field => loc('id'),
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectEqualityOperator',
+ },
+ Value => { Type => 'text', Size => 5 }
+ },
+ {
+ Name => 'Attachment',
+ Field => {
+ Type => 'component',
+ Path => '/Elements/SelectAttachmentField',
+ },
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => {
+ True => loc("matches"),
+ False => loc("doesn't match"),
+ TrueVal => 'LIKE',
+ FalseVal => 'NOT LIKE',
+ },
+ },
+ Value => { Type => 'text', Size => 20 },
+ },
+ {
+ Name => 'Queue',
+ Field => loc('Queue'),
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => { TrueVal=> '=', FalseVal => '!=' },
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectQueue',
+ Arguments => { NamedValues => 1, CheckQueueRight => 'ShowTicket' },
+ },
+ },
+ {
+ Name => 'Status',
+ Field => loc('Status'),
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => { TrueVal=> '=', FalseVal => '!=' },
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectStatus',
+ Arguments => { SkipDeleted => 1 },
+ },
+ },
+ {
+ Name => 'Actor',
+ Field => {
+ Type => 'select',
+ Options => [
+ Owner => loc('Owner'),
+ Creator => loc('Creator'),
+ LastUpdatedBy => loc('Last updated by'),
+ ],
+ },
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => { TrueVal=> '=', FalseVal => '!=' },
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectOwner',
+ Arguments => { ValueAttribute => 'Name' },
+ },
+ },
+ {
+ Name => 'Watcher',
+ Field => {
+ Type => 'component',
+ Path => 'SelectPersonType',
+ Arguments => { Default => 'Requestor' },
+ },
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectMatch',
+ },
+ Value => { Type => 'text', Size => 20 }
+ },
+ {
+ Name => 'Date',
+ Field => {
+ Type => 'component',
+ Path => '/Elements/SelectDateType',
+ },
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectDateRelation',
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectDate',
+ Arguments => { ShowTime => 0, Default => '' },
+ },
+ },
+ {
+ Name => 'Time',
+ Field => {
+ Type => 'select',
+ Options => [
+ TimeWorked => loc('Time Worked'),
+ TimeEstimated => loc('Time Estimated'),
+ TimeLeft => loc('Time Left'),
+ ],
+ },
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectEqualityOperator',
+ },
+ Value => [
+ { Type => 'text', Size => 5 },
+ {
+ Type => 'component',
+ Path => '/Elements/SelectTimeUnits',
+ },
+ ],
+ },
+ {
+ Name => 'Priority',
+ Field => {
+ Type => 'select',
+ Options => [
+ Priority => loc('Priority'),
+ InitialPriority => loc('Initial Priority'),
+ FinalPriority => loc('Final Priority'),
+ ],
+ },
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectEqualityOperator',
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectPriority',
+ },
+ },
+ {
+ Name => 'Links',
+ Field => { Type => 'component', Path => 'SelectLinks' },
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => { TrueVal=> '=', FalseVal => '!=' },
+ },
+ Value => { Type => 'text', Size => 5 }
+ },
+);
+
+$m->callback( Conditions => \@lines );
+
+</%INIT>
diff --git a/rt/share/html/Search/Elements/PickCFs b/rt/share/html/Search/Elements/PickCFs
new file mode 100644
index 0000000..ba25cde
--- /dev/null
+++ b/rt/share/html/Search/Elements/PickCFs
@@ -0,0 +1,104 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% foreach( @lines ) {
+<& ConditionRow, Condition => $_ &>
+% }
+<%INIT>
+my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'});
+foreach my $id (keys %cfqueues) {
+ # Gotta load up the $queue object, since queues get stored by name now. my $id
+ my $queue = RT::Queue->new($session{'CurrentUser'});
+ $queue->Load($id);
+ unless ($queue->id) {
+ # XXX TODO: This ancient code dates from a former developer
+ # we have no idea what it means or why cfqueues are so encoded.
+ $id =~ s/^.'*(.*).'*$/$1/;
+
+ # unescape internal quotes
+ $id =~ s/(\\(.))/$2 eq "'" ? "'" : $1/eg;
+
+ $queue->Load($id);
+ }
+ $CustomFields->LimitToQueue($queue->Id);
+}
+$CustomFields->LimitToGlobal;
+$m->callback(
+ CallbackName => 'MassageCustomFields',
+ CustomFields => $CustomFields,
+);
+
+
+my @lines;
+while ( my $CustomField = $CustomFields->Next ) {
+ my %line;
+ $line{'Name'} = "'CF.{" . $CustomField->Name . "}'";
+ $line{'Field'} = $CustomField->Name;
+ $line{'Op'} = {
+ Type => 'component',
+ Path => '/Elements/SelectCustomFieldOperator',
+ Arguments => { True => loc("is"),
+ False => loc("isn't"),
+ TrueVal=> '=',
+ FalseVal => '!=',
+ },
+ };
+ $line{'Value'} = {
+ Type => 'component',
+ Path => '/Elements/SelectCustomFieldValue',
+ Arguments => { CustomField => $CustomField },
+ };
+ push @lines, \%line;
+}
+
+$m->callback( Conditions => \@lines, Queues => \%cfqueues );
+
+</%INIT>
+
+<%ARGS>
+%cfqueues => undef
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/PickCriteria b/rt/share/html/Search/Elements/PickCriteria
new file mode 100644
index 0000000..b024775
--- /dev/null
+++ b/rt/share/html/Search/Elements/PickCriteria
@@ -0,0 +1,72 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => loc('Add Criteria')&>
+
+<table width="100%" cellspacing="0" cellpadding="0" border="0">
+
+
+
+<& PickBasics &>
+<& PickCFs, cfqueues => \%cfqueues &>
+
+<tr class="separator"><td colspan="3"><hr /></td></tr>
+<tr>
+<td class="label"><&|/l&>Aggregator</&></td>
+<td class="operator" colspan="2"><& SelectAndOr, Name => "AndOr" &></td>
+
+</tr>
+
+</table>
+
+</&>
+
+<%ARGS>
+$addquery => 0
+$query => undef
+%cfqueues => undef
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/ResultViews b/rt/share/html/Search/Elements/ResultViews
new file mode 100644
index 0000000..b438b56
--- /dev/null
+++ b/rt/share/html/Search/Elements/ResultViews
@@ -0,0 +1,80 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$QueryString => undef
+$Query => undef
+$Format => undef
+$Rows => undef
+$OrderBy => undef
+$Order => undef
+$RSSFeedURL => undef
+$ShortQueryString => undef
+
+</%args>
+<ul class="search-result-views">
+<li><a href="<%RT->Config->Get('WebPath')%>/Search/Results.tsv<%$QueryString%>"><&|/l&>Spreadsheet</&></a></li>
+<li><a href="<%$RSSFeedURL%>"><&|/l&>RSS</&></a></li>
+<li><a href="<%RT->Config->Get('WebURL')%>/NoAuth/iCal/<% $ical_path %>"><% loc('iCal') %></a></li>
+<li><a href="<%RT->Config->Get('WebPath')%>/Tools/Offline.html<%$ShortQueryString%>"><&|/l&>Editable text</&></a></li>
+% # Now let callbacks add their extra tools
+% $m->callback( %ARGS, CallbackName => 'AfterTools' );
+</ul>
+<form method="get" action="<%RT->Config->Get('WebPath')%>/Search/Chart.html">
+% my %hiddens = (Query => $Query, Format => $Format, Rows => $Rows, OrderBy => $OrderBy, Order => $Order);
+% foreach my $key (keys(%hiddens)) {
+<input type="hidden" class="hidden" name="<%$key%>" value="<%defined($hiddens{$key})?$hiddens{$key}:''%>" />
+% }
+<&|/l, $m->scomp('SelectChartType', Name => 'ChartStyle'), $m->scomp('SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)
+&>[_1] chart by [_2]</&><input type="submit" class="button" value="<%loc('Go')%>" />
+</form>
+<%init>
+my $ical_path = join '/', map $m->interp->apply_escapes($_, 'u'),
+ $session{'CurrentUser'}->UserObj->Name,
+ $session{'CurrentUser'}->UserObj->GenerateAuthString( $Query ),
+ $Query;
+</%init>
diff --git a/rt/share/html/Search/Elements/SearchPrivacy b/rt/share/html/Search/Elements/SearchPrivacy
new file mode 100644
index 0000000..a3640fb
--- /dev/null
+++ b/rt/share/html/Search/Elements/SearchPrivacy
@@ -0,0 +1,55 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Object => undef
+</%args>
+% if (ref($Object) eq 'RT::User' && $Object->id == $session{'CurrentUser'}->Id) {
+<&|/l&>My saved searches</&>
+% } else {
+<&|/l, $Object->Name&>[_1]'s saved searches</&>
+% }
diff --git a/rt/share/html/Search/Elements/SearchesForObject b/rt/share/html/Search/Elements/SearchesForObject
new file mode 100644
index 0000000..8534f8d
--- /dev/null
+++ b/rt/share/html/Search/Elements/SearchesForObject
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Object => undef
+</%args>
+<%init>
+# Returns an array of search objects associated on $Object,
+# in the form of [Description, searchObj]
+my @result;
+while (my $search = $Object->Attributes->Next) {
+ my $desc;
+ if ($search->Name eq 'SavedSearch') {
+ push @result, [$search->Description, $search];
+ }
+ elsif ($search->Name =~ m/^Search - (.*)/) {
+ push @result, [$1, $search];
+ }
+}
+return @result;
+</%init>
diff --git a/rt/share/html/Search/Elements/SelectAndOr b/rt/share/html/Search/Elements/SelectAndOr
new file mode 100644
index 0000000..52685ba
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectAndOr
@@ -0,0 +1,53 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<input type="radio" class="radio" name="<%$Name%>" checked="checked" value="AND" /><&|/l&>AND</&>
+<input type="radio" class="radio" name="<%$Name%>" value="OR" /><&|/l&>OR</&>
+
+<%ARGS>
+$Name => "Operator"
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/SelectChartType b/rt/share/html/Search/Elements/SelectChartType
new file mode 100644
index 0000000..fcb7234
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectChartType
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Name => 'ChartType'
+$Default => 'bar'
+</%args>
+<select id="<%$Name%>" name="<%$Name%>">
+% foreach my $option qw(bar pie) {
+% # 'bar' # loc
+% # 'pie' # loc
+<option value="<%$option%>"<% $option eq $Default ? qq[ selected="selected"] : '' |n %>><%loc($option)%></option>
+% }
+</select>
diff --git a/rt/share/html/Search/Elements/SelectGroup b/rt/share/html/Search/Elements/SelectGroup
new file mode 100644
index 0000000..f6583b1
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectGroup
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select id="<%$Name%>" name="<%$Name%>">
+% if ($AllowNull) {
+<option value="">-</option>
+% }
+%while (my $group = $groups->Next) {
+<option value="<%$group->id%>"<%$group->id eq $Default && qq[ selected="selected"] |n %>><%$group->Name%></option>
+%}
+</select>
+
+<%INIT>
+my $groups = new RT::Groups($session{'CurrentUser'});
+$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain);
+
+</%INIT>
+<%ARGS>
+$AllowNull => 1
+$Default=> ''
+$Name => 'Group'
+$Domain => 'UserDefined';
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/SelectGroupBy b/rt/share/html/Search/Elements/SelectGroupBy
new file mode 100644
index 0000000..2a1b387
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectGroupBy
@@ -0,0 +1,63 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Name => 'GroupBy'
+$Default => 'Status'
+$Query => ''
+</%args>
+<select id="<% $Name %>" name="<% $Name %>">
+% while (@options) {
+% my ($text, $value) = (shift @options, shift @options);
+<option value="<% $value %>" <% $value eq $Default ? 'selected="selected"' : '' |n%>><% loc($text) %></option>
+% }
+</select>
+<%init>
+use RT::Report::Tickets;
+my $report = RT::Report::Tickets->new( $session{'CurrentUser'} );
+my @options = $report->Groupings( Query => $Query );
+</%init>
diff --git a/rt/share/html/Search/Elements/SelectLinks b/rt/share/html/Search/Elements/SelectLinks
new file mode 100644
index 0000000..219a192
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectLinks
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select name="<%$Name%>">
+% foreach (@fields) {
+<option value="<%$_%>"><% loc($_) %></option>
+% }
+</select>
+<%ARGS>
+$Name => 'LinksField'
+</%ARGS>
+
+<%INIT>
+my @fields = ('HasMember',
+ 'MemberOf',
+ 'DependsOn',
+ 'DependedOnBy',
+ 'RefersTo',
+ 'ReferredToBy',
+ 'LinkedTo',
+ );
+</%INIT>
diff --git a/rt/share/html/Search/Elements/SelectPersonType b/rt/share/html/Search/Elements/SelectPersonType
new file mode 100644
index 0000000..5f6ac73
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectPersonType
@@ -0,0 +1,84 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<select id="<%$Name%>" name="<%$Name%>">
+% if ($AllowNull) {
+<option value="">-</option>
+% }
+% for my $option (@types) {
+% if ($Suffix) {
+<option value="<% $option %><% $Suffix %>"<%$option eq $Default && qq[ selected="selected"] |n %> ><%loc($option)%></option>
+% next;
+% }
+% foreach my $subtype (@subtypes) {
+<option value="<%"$option.$subtype"%>"<%$option eq $Default && $subtype eq 'EmailAddress' && qq[ selected="selected"] |n %> ><% loc($option) %> <% loc($subtype) %></option>
+% }
+% }
+</select>
+
+<%INIT>
+my @types;
+if ($Scope =~ 'queue') {
+ @types = qw(Cc AdminCc);
+}
+elsif ($Suffix eq 'Group') {
+ @types = qw(Requestor Cc AdminCc Watcher);
+}
+else {
+ @types = qw(Requestor Cc AdminCc Watcher Owner QueueCc QueueAdminCc QueueWatcher);
+}
+
+my @subtypes = qw(EmailAddress Name RealName Nickname Organization Address1 Address2 WorkPhone HomePhone MobilePhone PagerPhone id);
+
+</%INIT>
+<%ARGS>
+$AllowNull => 1
+$Suffix => ''
+$Default=>undef
+$Scope => 'ticket'
+$Name => 'WatcherType'
+</%ARGS>
diff --git a/rt/share/html/Search/Elements/SelectSearchObject b/rt/share/html/Search/Elements/SelectSearchObject
new file mode 100644
index 0000000..c38f5c3
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectSearchObject
@@ -0,0 +1,68 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+@Objects => undef
+$Name => undef
+$Object => undef
+</%args>
+<%init>
+my $default_privacy = '';
+if ( $Object && $Object->Id ) {
+ $default_privacy = ref($Object).'-'.$Object->Id;
+}
+</%init>
+<select id="<%$Name%>" name="<%$Name%>">
+% foreach my $object (@Objects) {
+% my $privacy = ref($object).'-'.$object->id;
+% if (ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id) {
+<option value="<%$privacy%>" <% ( $privacy eq $default_privacy ) ? "selected='selected'" : '' |n %> ><&|/l&>My saved searches</&></option>
+% } else {
+<option value="<%$privacy%>" <% ( $privacy eq $default_privacy ) ? "selected='selected'" : '' |n %> ><&|/l, $object->Name&>[_1]'s saved searches</&></option>
+% }
+% }
+</select>
diff --git a/rt/share/html/Search/Elements/SelectSearchesForObjects b/rt/share/html/Search/Elements/SelectSearchesForObjects
new file mode 100644
index 0000000..1a53ad9
--- /dev/null
+++ b/rt/share/html/Search/Elements/SelectSearchesForObjects
@@ -0,0 +1,69 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+@Objects => undef
+$Name => undef
+$SearchType => 'Ticket',
+</%args>
+<select id="<%$Name%>" name="<%$Name%>">
+% foreach my $object (@Objects) {
+% if (ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id) {
+<option value=""><&|/l&>My saved searches</&></option>
+% } else {
+<option value=""></option>
+<option value=""><&|/l, $object->Name&>[_1]'s saved searches</&></option>
+% }
+% my @searches = $object->Attributes->Named('SavedSearch');
+% foreach my $search (@searches) {
+% # Skip it if it is not of search type we want.
+% next if ($search->SubValue('SearchType')
+% && $search->SubValue('SearchType') ne $SearchType);
+<option value="<%ref($object)%>-<%$object->id%>-SavedSearch-<%$search->Id%>"> -<%$search->Description||loc('Unnamed search')%></option>
+% }
+% }
+</select>
diff --git a/rt/share/html/Search/Graph.html b/rt/share/html/Search/Graph.html
new file mode 100644
index 0000000..4ceb544
--- /dev/null
+++ b/rt/share/html/Search/Graph.html
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+return $m->comp('/Ticket/Graphs/index.html', %ARGS );
+</%INIT>
diff --git a/rt/share/html/Search/Results.html b/rt/share/html/Search/Results.html
new file mode 100755
index 0000000..13252ee
--- /dev/null
+++ b/rt/share/html/Search/Results.html
@@ -0,0 +1,201 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title,
+ Refresh => $session{'tickets_refresh_interval'} || RT->Config->Get('SearchResultsRefreshInterval', $session{'CurrentUser'} ),
+ RSSAutoDiscovery => $RSSFeedURL,
+ LinkRel => \%link_rel &>
+<& /Ticket/Elements/Tabs,
+ current_tab => "Search/Results.html".$QueryString,
+ Title => $title,
+ Format => $Format,
+ Query => $Query,
+ Rows => $Rows,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ SavedSearchId => $SavedSearchId,
+ SavedChartSearchId => $SavedChartSearchId,
+ &>
+<& /Elements/CollectionList,
+ Query => $Query,
+ AllowSorting => 1,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ Rows => $Rows,
+ Page => $Page,
+ Format => $Format,
+ Class => 'RT::Tickets',
+ BaseURL => $BaseURL
+
+ &>
+% my %hiddens = (Query => $Query, Format => $Format, Rows => $Rows, OrderBy => $OrderBy, Order => $Order, HideResults => $HideResults, Page => $Page, SavedChartSearchId => $SavedChartSearchId );
+<div align="right" class="refresh">
+<form method="get" action="<%RT->Config->Get('WebPath')%>/Search/Results.html">
+% foreach my $key (keys(%hiddens)) {
+<input type="hidden" class="hidden" name="<%$key%>" value="<% defined($hiddens{$key})?$hiddens{$key}:'' %>" />
+% }
+<& /Elements/Refresh, Name => 'TicketsRefreshInterval', Default => $session{'tickets_refresh_interval'}||RT->Config->Get('SearchResultsRefreshInterval', $session{'CurrentUser'}) &>
+<input type="submit" class="button" value="<&|/l&>Change</&>" />
+</form>
+</div>
+<div align="right" class="search-result-actions">
+<& Elements/ResultViews,
+ QueryString => $QueryString,
+ Query => $Query,
+ Format => $Format,
+ Rows => $Rows,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ RSSFeedURL => $RSSFeedURL,
+ ShortQueryString => $ShortQueryString,
+&>
+
+% $m->callback( QueryString => $QueryString, CallbackName => 'SearchActions' );
+</div>
+<%INIT>
+# Read from user preferences
+my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {};
+
+# These variables are what define a search_hash; this is also
+# where we give sane defaults.
+$Format ||= $prefs->{'Format'} || RT->Config->Get('DefaultSearchResultFormat');
+$Order ||= $prefs->{'Order'} || 'ASC';
+$OrderBy ||= $prefs->{'OrderBy'} || 'id';
+
+# Some forms pass in "RowsPerPage" rather than "Rows"
+# We call it RowsPerPage everywhere else.
+
+if ( !defined($Rows) ) {
+ if (defined $ARGS{'RowsPerPage'} ) {
+ $Rows = $ARGS{'RowsPerPage'};
+ } elsif ( defined $prefs->{'RowsPerPage'} ) {
+ $Rows = $prefs->{'RowsPerPage'};
+ } else {
+ $Rows = 50;
+ }
+}
+
+my ($title, $ticketcount);
+$session{'i'}++;
+$session{'tickets'} = RT::Tickets->new($session{'CurrentUser'}) ;
+$session{'tickets'}->FromSQL($Query) if ($Query);
+
+if ($OrderBy =~ /\|/) {
+ # Multiple Sorts
+ my @OrderBy = split /\|/,$OrderBy;
+ my @Order = split /\|/,$Order;
+ $session{'tickets'}->OrderByCols(
+ map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0
+ .. $#OrderBy ) );;
+} else {
+ $session{'tickets'}->OrderBy(FIELD => $OrderBy, ORDER => $Order);
+}
+
+$session{'CurrentSearchHash'} = {
+ Format => $Format,
+ Query => $Query,
+ Page => $Page,
+ Order => $Order,
+ OrderBy => $OrderBy,
+ RowsPerPage => $Rows
+ };
+
+
+if ( $session{'tickets'}->Query()) {
+ $ticketcount = $session{tickets}->CountAll();
+ $title = loc('Found [quant,_1,ticket]', $ticketcount);
+} else {
+ $title = loc("Find tickets");
+}
+
+my $QueryString = "?".$m->comp('/Elements/QueryString',
+ Query => $Query,
+ Format => $Format,
+ Rows => $Rows,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ Page => $Page);
+my $ShortQueryString = "?".$m->comp('/Elements/QueryString', Query => $Query);
+my $RSSQueryString = "?".$m->comp('/Elements/QueryString', Query => $Query, Order => $Order, OrderBy => $OrderBy);
+my $RSSFeedURL = RT->Config->Get('WebPath')."/Search/Results.rdf$RSSQueryString";
+
+if ($ARGS{'TicketsRefreshInterval'}) {
+ $session{'tickets_refresh_interval'} = $ARGS{'TicketsRefreshInterval'};
+}
+
+my %link_rel;
+my $genpage = sub {
+ return $m->comp(
+ '/Elements/QueryString',
+ Query => $Query,
+ Format => $Format,
+ Rows => $Rows,
+ OrderBy => $OrderBy,
+ Order => $Order,
+ Page => shift(@_),
+ );
+};
+my $BaseURL = RT->Config->Get('WebPath')."/Search/Results.html?";
+$link_rel{first} = $BaseURL . $genpage->(1) if $Page > 1;
+$link_rel{prev} = $BaseURL . $genpage->($Page - 1) if $Page > 1;
+$link_rel{next} = $BaseURL . $genpage->($Page + 1) if ($Page * $Rows) < $ticketcount;
+$link_rel{last} = $BaseURL . $genpage->(POSIX::ceil($ticketcount/$Rows)) if $Rows and ($Page * $Rows) < $ticketcount;
+</%INIT>
+<%CLEANUP>
+$session{'tickets'}->PrepForSerialization();
+</%CLEANUP>
+<%ARGS>
+$Query => undef
+$Format => undef
+$HideResults => 0
+$Rows => undef
+$Page => 1
+$OrderBy => undef
+$Order => undef
+$SavedSearchId => undef
+$SavedChartSearchId => undef
+</%ARGS>
diff --git a/rt/share/html/Search/Results.rdf b/rt/share/html/Search/Results.rdf
new file mode 100644
index 0000000..0a19430
--- /dev/null
+++ b/rt/share/html/Search/Results.rdf
@@ -0,0 +1,103 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+
+my $Tickets = RT::Tickets->new($session{'CurrentUser'});
+$Tickets->FromSQL($ARGS{'Query'});
+if ($OrderBy =~ /\|/) {
+ # Multiple Sorts
+ my @OrderBy = split /\|/,$OrderBy;
+ my @Order = split /\|/,$Order;
+ $Tickets->OrderByCols(
+ map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0
+ .. $#OrderBy ) );;
+} else {
+ $Tickets->OrderBy(FIELD => $OrderBy, ORDER => $Order);
+}
+$r->content_type('application/rss+xml');
+
+
+
+ # create an RSS 1.0 file (http://purl.org/rss/1.0/)
+ use XML::RSS;
+ my $rss = new XML::RSS (version => '1.0');
+ $rss->channel(
+ title => RT->Config->Get('rtname').": Search" . $ARGS{'Query'},
+ link => RT->Config->Get('WebURL'),
+ description => "",
+ dc => {
+ },
+ generator => "RT v" . $RT::VERSION,
+ syn => {
+ updatePeriod => "hourly",
+ updateFrequency => "1",
+ updateBase => "1901-01-01T00:00+00:00",
+ },
+ );
+
+
+ while ( my $Ticket = $Tickets->Next()) {
+ my $creator_str = $m->scomp('/Elements/ShowUser', User => $Ticket->CreatorObj);
+ $creator_str =~ s/[\r\n]//g;
+ $rss->add_item(
+ title => $Ticket->Subject || loc('No Subject'),
+ link => RT->Config->Get('WebURL')."Ticket/Display.html?id=".$Ticket->id,
+ description => $Ticket->Transactions->First->Content,
+ dc => { creator => $creator_str,
+ date => $Ticket->CreatedObj->RFC2822,
+ },
+ guid => $Ticket->Queue . '_' . $Ticket->id,
+ );
+ }
+$m->out($rss->as_string);
+$m->abort();
+</%INIT>
+<%ARGS>
+$OrderBy => 'Created'
+$Order => 'ASC'
+</%ARGS>
diff --git a/rt/share/html/Search/Results.tsv b/rt/share/html/Search/Results.tsv
new file mode 100644
index 0000000..bb3ac44
--- /dev/null
+++ b/rt/share/html/Search/Results.tsv
@@ -0,0 +1,162 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Query => ''
+$OrderBy => 'id'
+$Order => 'ASC'
+</%ARGS>
+<%INIT>
+
+my $Tickets = RT::Tickets->new( $session{'CurrentUser'} );
+$Tickets->FromSQL( $Query );
+if ( $OrderBy =~ /\|/ ) {
+ # Multiple Sorts
+ my @OrderBy = split /\|/, $OrderBy;
+ my @Order = split /\|/, $Order;
+ $Tickets->OrderByCols(
+ map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } }
+ ( 0 .. $#OrderBy )
+ );
+}
+else {
+ $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order );
+}
+
+my %cf_id_to_name;
+my %cf_name_to_pos;
+{
+ my $cfs = RT::SQL::PossibleCustomFields(
+ Query => $Query, CurrentUser => $session{'CurrentUser'},
+ );
+ while ( my $cf = $cfs->Next ) {
+ my $name = $cf->Name;
+ $cf_id_to_name{ $cf->id } = $name;
+ next if $cf_name_to_pos{ $name };
+
+ $cf_name_to_pos{ $name } =
+ (sort { $b <=> $a } values %cf_name_to_pos)[0] + 1;
+ }
+}
+
+my @attrs = qw(
+ id QueueObj->Name Subject Status
+ TimeEstimated TimeWorked TimeLeft
+ Priority FinalPriority
+ OwnerObj->Name
+ Requestors->MemberEmailAddressesAsString
+ Cc->MemberEmailAddressesAsString
+ AdminCc->MemberEmailAddressesAsString
+ DueObj->ISO ToldObj->ISO CreatedObj->ISO
+ ResolvedObj->ISO LastUpdatedObj->ISO
+);
+
+$r->content_type('application/vnd.ms-excel');
+{
+ my @header;
+ foreach my $attr (@attrs) {
+ my $label = $attr;
+ $label =~ s'Obj-.(?:AsString|Name|ISO)''g;
+ $label =~ s'-\>MemberEmailAddressesAsString''g;
+ push @header, $label;
+ }
+
+ $_ += @header - 1 foreach values %cf_name_to_pos;
+
+ foreach my $name ( sort { $cf_name_to_pos{$a} <=> $cf_name_to_pos{$a} } keys %cf_name_to_pos ) {
+ push @header, "CF-". $name;
+ }
+ $m->out(join("\t", @header));
+ $m->out("\n");
+ $m->flush_buffer;
+}
+
+my $i = 0;
+while ( my $Ticket = $Tickets->Next()) {
+ my @row;
+ foreach my $attr (@attrs) {
+ my $value;
+ if ($attr =~ /(.*)->ISO$/ and $Ticket->$1->Unix <= 0) {
+ $value = '';
+ } else {
+ my $method = '$Ticket->'.$attr.'()';
+ $method =~ s/->ISO\(\)$/->ISO( Timezone => 'user' )/;
+ $value = eval $method;
+ if ($@) {die "Failed to find $attr - ". $@};
+ }
+ push @row, $value;
+ }
+
+ my $values = $Ticket->CustomFieldValues;
+ $values->OrderByCols; # don't sort them
+ while (my $value = $values->Next) {
+ my $pos = $cf_name_to_pos{ $cf_id_to_name{ $value->CustomField } };
+ next unless $pos;
+
+ $row[$pos] = '' unless defined $row[$pos];
+ $row[$pos] .= ', ' if $row[$pos];
+ $row[$pos] .= $value->Content;
+ }
+
+ # remove tabs from all field values, they screw up the tsv
+ for (@row) {
+ $_ = '' unless defined;
+ $_ =~ s/(?:\n|\r)//g;
+ $_ =~ s{\t}{ }g;
+ }
+
+ $m->out(join("\t",@row));
+ $m->out("\n");
+
+ unless (++$i%10) {
+ $i = 0;
+ $m->flush_buffer;
+ }
+}
+
+$m->abort();
+</%INIT>
diff --git a/rt/share/html/Search/Simple.html b/rt/share/html/Search/Simple.html
new file mode 100644
index 0000000..2f7996b
--- /dev/null
+++ b/rt/share/html/Search/Simple.html
@@ -0,0 +1,106 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Elements/Tabs,
+ current_toptab => "Search/Simple.html",
+ Title => $title
+&>
+
+% $m->callback( %ARGS, CallbackName => 'PreForm' );
+
+<div id="SimpleSearchForm">
+<form action="Simple.html" method="get">
+
+<p><&|/l&>Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>.</&></p>
+
+<p><&|/l&>Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>.</&></p>
+<p><&|/l&>RT will look for anything else you enter in ticket subjects.</&></p>
+
+<br />
+<br />
+<div align="center">
+<input name="q" size="60" /><input type="submit" class="button" value="<&|/l&>Search</&>" />
+</div>
+
+</form>
+
+% $m->callback( %ARGS, CallbackName => 'PostForm' );
+
+</div>
+
+<%INIT>
+my $title = loc("Search for tickets");
+use RT::Search::Googleish;
+
+if ($q) {
+ my $tickets = new RT::Tickets( $session{'CurrentUser'} );
+ $m->callback( %ARGS, query => \$q, CallbackName => 'ModifyQuery' );
+
+ if ($q =~ /^#?(\d+)$/) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Ticket/Display.html?id=".$1);
+ }
+
+ my %args = (
+ Argument => $q,
+ TicketsObj => $tickets,
+ );
+
+ $m->callback( %ARGS, CallbackName => 'SearchArgs', args => \%args);
+
+ my $search = RT::Search::Googleish->new(%args);
+
+ $m->comp( "Results.html", Query => $search->QueryToSQL() );
+ $m->comp( "/Elements/Footer" );
+ $m->abort();
+}
+</%INIT>
+
+<%ARGS>
+$q => undef
+</%ARGS>
+
diff --git a/rt/share/html/SelfService/Attachment/dhandler b/rt/share/html/SelfService/Attachment/dhandler
new file mode 100755
index 0000000..b94ea21
--- /dev/null
+++ b/rt/share/html/SelfService/Attachment/dhandler
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+$m->comp('/Ticket/Attachment/dhandler', %ARGS);
+$m->abort;
+</%init>
diff --git a/rt/share/html/SelfService/Closed.html b/rt/share/html/SelfService/Closed.html
new file mode 100755
index 0000000..16eed47
--- /dev/null
+++ b/rt/share/html/SelfService/Closed.html
@@ -0,0 +1,60 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /SelfService/Elements/Header, Title => loc('Closed tickets') &>
+
+<& /SelfService/Elements/MyRequests,
+ %ARGS,
+ status => ['rejected', 'resolved'],
+ friendly_status => loc('closed'),
+ BaseURL => RT->Config->Get('WebPath') ."/SelfService/Closed.html?",
+ Page => $Page,
+&>
+
+<%ARGS>
+$Page => 1
+</%ARGS>
diff --git a/rt/share/html/SelfService/Create.html b/rt/share/html/SelfService/Create.html
new file mode 100755
index 0000000..25ae721
--- /dev/null
+++ b/rt/share/html/SelfService/Create.html
@@ -0,0 +1,149 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& Elements/Header, Title => loc("Create a ticket") &>
+
+<& /Elements/ListActions, actions => \@results &>
+<form action="Create.html" method="post" enctype="multipart/form-data">
+<input type="hidden" class="hidden" name="id" value="new" />
+
+<table>
+<tr>
+<td class="label">
+<&|/l&>Queue</&>:
+</td>
+<td class="value">
+ <input type="hidden" class="hidden" name="Queue" value="<%$queue_obj->id || ''%>" />
+ <strong><%$queue_obj->Name || ''%></strong> (<%$queue_obj->Description || ''%>)
+</td>
+</tr>
+<% $m->callback( CallbackName => 'AfterQueue', %ARGS, QueueObj => $queue_obj ) %>
+<tr>
+<td class="label">
+<&|/l&>Requestors</&>:
+</td>
+<td class="value">
+<& /Elements/EmailInput, Name => 'Requestors', Size => '20', Default => $ARGS{Requestors} || $session{CurrentUser}->EmailAddress &>
+</td>
+</tr>
+<tr>
+<td class="label">
+<&|/l&>Cc</&>:
+</td>
+<td class="value">
+<& /Elements/EmailInput, Name => 'Cc', Size => '20', Default => $ARGS{Cc} || '' &>
+</td>
+</tr>
+<tr>
+<td class="label">
+<&|/l&>Subject</&>:
+</td>
+<td class="value">
+<input name="Subject" size="60" maxsize="200" value="<%$ARGS{Subject} || ''%>" />
+</td>
+</tr>
+<tr>
+ <td colspan="2">
+ <& /Ticket/Elements/EditCustomFields, %ARGS, QueueObj => $queue_obj &>
+ </td>
+</tr>
+<tr>
+<td class="label">
+%# FIXME: if failed customfields validation, attachement needs to be choosen
+%# again by user.
+<&|/l&>Attach file</&>:
+</td>
+<td class="value">
+<input name="Attach" type="file" />
+</td>
+</tr>
+</table>
+<table width="100%">
+<tr>
+<td colspan="2">
+<&|/l&>Describe the issue below</&>:<br />
+<& /Elements/MessageBox, Default => $ARGS{Content} || '' &>
+</td>
+</tr>
+</table>
+<& /Elements/Submit, Label => loc("Create ticket")&>
+
+
+</form>
+<%args>
+$Queue => undef
+</%args>
+<%init>
+my @results;
+my $queue_obj = RT::Queue->new($session{'CurrentUser'});
+$queue_obj->Load($Queue);
+my $CFs = $queue_obj->TicketCustomFields();
+my $ValidCFs = $m->comp(
+ '/Elements/ValidateCustomFields',
+ CustomFields => $CFs,
+ ARGSRef => \%ARGS
+);
+
+my $skip_create = 0;
+$m->callback( CallbackName => 'BeforeCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, results => \@results );
+
+if ( defined($ARGS{'id'}) and $ARGS{'id'} eq 'new' ) { # new ticket?
+ if ( $ValidCFs && !$skip_create ) {
+ $m->comp('Display.html', %ARGS);
+ $RT::Logger->crit("After display call; error is $@");
+ $m->abort();
+ }
+ elsif ( !$ValidCFs ) {
+ # Invalid CFs
+ while (my $CF = $CFs->Next) {
+ my $msg = $m->notes('InvalidField-' . $CF->Id) or next;
+ push @results, $CF->Name . ': ' . $msg;
+ }
+ }
+}
+
+</%init>
diff --git a/rt/share/html/SelfService/CreateTicketInQueue.html b/rt/share/html/SelfService/CreateTicketInQueue.html
new file mode 100755
index 0000000..4fa7b7d
--- /dev/null
+++ b/rt/share/html/SelfService/CreateTicketInQueue.html
@@ -0,0 +1,63 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& Elements/Header, Title => loc("Create a ticket") &>
+
+<h1><&|/l&>Select a queue for your new ticket</&></h1>
+
+<dl>
+% while (my $queue = $queues->Next) {
+% next unless $queue->CurrentUserHasRight('CreateTicket');
+
+<dt><a href="<%RT->Config->Get('WebPath')%>/SelfService/Create.html?Queue=<%$queue->id%>"><%$queue->Name%></a></dt>
+<dd><%$queue->Description%></dd>
+% }
+</dl>
+<%init>
+my $queues = RT::Queues->new($session{'CurrentUser'});
+$queues->UnLimit;
+</%init>
diff --git a/rt/share/html/SelfService/Display.html b/rt/share/html/SelfService/Display.html
new file mode 100755
index 0000000..e1671db
--- /dev/null
+++ b/rt/share/html/SelfService/Display.html
@@ -0,0 +1,233 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /SelfService/Elements/Header, Title => loc('#[_1]: [_2]', $Ticket->id, $Ticket->Subject) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket );
+
+<& /Elements/ListActions, actions => \@results &>
+
+ <table width="100%" class="ticketsummary" >
+ <tr>
+ <td valign="top" width="50%" class="boxcontainer">
+ <&| /Widgets/TitleBox, title => loc('The Basics'),
+ title_class=> 'inverse',
+ color => "#993333" &>
+ <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &>
+ <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket &>
+ </&>
+</td>
+ <td valign="top" width="50%" class="boxcontainer">
+ <&| /Widgets/TitleBox, title => loc("Dates"),
+ title_class=> 'inverse',
+ color => "#663366" &>
+ <& /Ticket/Elements/ShowDates, Ticket => $Ticket, UpdatedLink => 0 &>
+ </&>
+</td>
+</tr>
+</table>
+
+
+
+%#!!pape: selfservice_find_attachments.patch {{
+<& /Ticket/Elements/ShowHistory,
+ Ticket => $Ticket,
+ URIFile => "Display.html",
+ ShowHeaders => $ARGS{'ShowHeaders'},
+ DownloadableHeaders => 0,
+ AttachPath => "Attachment",
+ Attachments => $attachments,
+ UpdatePath => "Update.html"
+&>
+%#!!pape: selfservice_find_attachments.patch }}
+
+
+
+<%INIT>
+
+my ( $field, @results );
+
+$m->callback( ARGSRef => \%ARGS, CallbackName => 'Initial' );
+
+# {{{ Load the ticket
+#If we get handed two ids, mason will make them an array. bleck.
+# We want teh first one. Just because there's no other sensible way
+# to deal
+my @id = ( ref $id eq 'ARRAY' ) ? @{$id} : ($id);
+
+my $Ticket = new RT::Ticket( $session{'CurrentUser'} );
+
+# store the uploaded attachment in session
+if ( $ARGS{'Attach'} ) { # attachment?
+ $session{'Attachments'} = {} unless defined $session{'Attachments'};
+
+ my $attachment = MakeMIMEEntity(
+ AttachmentFieldName => 'Attach'
+ );
+
+ my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
+ $session{'Attachments'} = {
+ %{ $session{'Attachments'} || {} },
+ $file_path => $attachment,
+ };
+}
+
+if ( defined ($id[0]) && $id[0] eq 'new' ) {
+
+ # {{{ Create a new ticket
+
+ my $Queue = new RT::Queue( $session{'CurrentUser'} );
+ unless ( $Queue->Load( $ARGS{'Queue'} ) ) {
+ $m->comp( 'Error.html', Why => loc('Queue not found') );
+ $m->abort;
+ }
+
+ unless ( $Queue->CurrentUserHasRight('CreateTicket') ) {
+ $m->comp( 'Error.html',
+ Why =>
+ loc('You have no permission to create tickets in that queue.') );
+ $m->abort;
+ }
+
+
+ ( $Ticket, @results ) =
+ CreateTicket( Attachments => $session{'Attachments'}, %ARGS, Status => 'new' );
+
+ unless ( $Ticket->id ) {
+ $m->comp( 'Error.html', Why => join( "\n", @results ));
+ $m->abort();
+ }
+
+ # }}}
+
+ # delete temporary storage entry to make WebUI clean
+ unless ( keys %{ $session{'Attachments'} } and $ARGS{'UpdateAttach'} ) {
+ delete $session{'Attachments'};
+ }
+
+ # }}}
+ }
+ else {
+ unless ( $Ticket->Load( $id[0] ) ) {
+ $m->comp( 'Error.html',
+ Why => loc( "Couldn't load ticket '[_1]'", $id ) );
+ $m->abort();
+ }
+
+ my ( $code, $msg );
+
+
+ if (
+ $session{'Attachments'}
+ || ( defined $ARGS{'UpdateContent'}
+ && $ARGS{'UpdateContent'} ne ''
+ && $ARGS{'UpdateContent'} ne "-- \n"
+ . $session{'CurrentUser'}->UserObj->Signature )
+ )
+ {
+ $ARGS{UpdateAttachments} = $session{'Attachments'};
+ }
+ push @results, ProcessUpdateMessage(
+ ARGSRef => \%ARGS,
+ TicketObj => $Ticket
+ );
+ delete $session{'Attachments'};
+
+ # delete temporary storage entry to make WebUI clean
+ unless ( keys %{ $session{'Attachments'} } and $ARGS{'UpdateAttach'} ) {
+ delete $session{'Attachments'};
+ }
+
+ my @cfupdates = ProcessObjectCustomFieldUpdates(Object => $Ticket, ARGSRef => \%ARGS);
+ push (@results, @cfupdates);
+
+ # }}}
+
+ #Update the status
+ if ( ( defined $ARGS{'Status'} )
+ and $ARGS{'Status'}
+ and ( $ARGS{'Status'} ne $Ticket->Status ) )
+ {
+ ( $code, $msg ) = $Ticket->SetStatus( $ARGS{'Status'} );
+ push @results, "$msg";
+ }
+ # }}}
+
+
+ }
+
+ # This code does automatic redirection if any updates happen.
+
+ unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
+ $m->comp( 'Error.html',
+ Why => loc("No permission to display that ticket") );
+ # XXX: Why abort? then we loose footer //ruz
+ $m->abort();
+ }
+
+ if (@results) {
+ # We've done something, so we need to clear the decks to avoid
+ # resubmission on refresh.
+ # But we need to store Actions somewhere too, so we don't lose them.
+ my $key = Digest::MD5::md5_hex(rand(1024));
+ push @{ $session{"Actions"}->{$key} ||= [] }, @results;
+ $session{'i'}++;
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."SelfService/Display.html?id=". $Ticket->id."&results=".$key);
+ }
+
+ my $Transactions = $Ticket->Transactions;
+
+ my $attachments =
+ $m->comp( '/Ticket/Elements/FindAttachments', Ticket => $Ticket );
+
+ $m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS);
+</%INIT>
+
+
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/SelfService/Elements/GotoTicket b/rt/share/html/SelfService/Elements/GotoTicket
new file mode 100755
index 0000000..8c54bd6
--- /dev/null
+++ b/rt/share/html/SelfService/Elements/GotoTicket
@@ -0,0 +1,50 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<form action="<% RT->Config->Get('WebPath') %>/SelfService/Display.html" method="get" id="GotoTicket">
+<input type="submit" class="button" value="<&|/l&>Goto ticket</&>" />&nbsp;<input size="4" name="id" />
+</form>
diff --git a/rt/share/html/SelfService/Elements/Header b/rt/share/html/SelfService/Elements/Header
new file mode 100755
index 0000000..67f5bad
--- /dev/null
+++ b/rt/share/html/SelfService/Elements/Header
@@ -0,0 +1,49 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, %ARGS, Prefs => '/SelfService/Prefs.html' &>
+<& /SelfService/Elements/Tabs, %ARGS &>
diff --git a/rt/share/html/SelfService/Elements/MyRequests b/rt/share/html/SelfService/Elements/MyRequests
new file mode 100755
index 0000000..9eed22b
--- /dev/null
+++ b/rt/share/html/SelfService/Elements/MyRequests
@@ -0,0 +1,87 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => $title &>
+<& /Elements/CollectionList, Title => $title,
+ Format => $Format,
+ Query => $Query,
+ Order => @Order,
+ OrderBy => @OrderBy,
+ BaseURL => $BaseURL,
+ GenericQueryArgs => $GenericQueryArgs,
+ AllowSorting => $AllowSorting,
+ Class => 'RT::Tickets',
+ Rows => $Rows,
+ Page => $Page &>
+</&>
+
+<%INIT>
+my $id = $session{'CurrentUser'}->id;
+my $Query = "( "
+ . join( ' OR ', map "$_.id = $id", @roles )
+ . ")";
+if ( @status ) {
+ $Query .= " AND ( "
+ . join( ' OR ', map "Status = '$_'", @status )
+ . " )";
+}
+my $Format = RT->Config->Get('DefaultSelfServiceSearchResultFormat');
+
+</%INIT>
+<%ARGS>
+$friendly_status => loc('open')
+$title => loc("My [_1] tickets", $friendly_status)
+@roles => ('Watcher')
+@status => RT::Queue->ActiveStatusArray()
+$BaseURL => undef
+$Page => 1
+$GenericQueryArgs => undef
+$AllowSorting => 1
+@Order => ('ASC')
+@OrderBy => ('Created')
+$Rows => 50
+</%ARGS>
diff --git a/rt/share/html/SelfService/Elements/Tabs b/rt/share/html/SelfService/Elements/Tabs
new file mode 100755
index 0000000..ebc326a
--- /dev/null
+++ b/rt/share/html/SelfService/Elements/Tabs
@@ -0,0 +1,113 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback( %ARGS, tabs => $tabs, actions => $actions );
+<& /Elements/PageLayout,
+ current_toptab => $current_toptab,
+ current_tab => $current_tab,
+ toptabs => $tabs,
+ topactions => $actions,
+ title => $Title
+&>
+<a name="skipnav" id="skipnav" accesskey="8"></a>
+<%INIT>
+my $queues = RT::Queues->new($session{'CurrentUser'});
+$queues->UnLimit;
+
+my $queue_count = 0;
+my $queue_id = 1;
+
+while (my $queue = $queues->Next) {
+ next unless $queue->CurrentUserHasRight('CreateTicket');
+ $queue_id = $queue->id;
+ $queue_count++;
+ last if ($queue_count > 1);
+}
+
+if ($Title) {
+$Title = loc("RT Self Service") . " / " . $Title;
+} else {
+$Title = loc("RT Self Service");
+
+}
+my ($tab);
+my $tabs = { A => { title => loc('Open tickets'),
+ path => 'SelfService/',
+ },
+ B => { title => loc('Closed tickets'),
+ path => 'SelfService/Closed.html',
+ },
+ };
+
+if ($queue_count > 1) {
+ $tabs->{C} = { title => loc('New ticket'),
+ path => 'SelfService/CreateTicketInQueue.html'
+ };
+} else {
+ $tabs->{C} = { title => loc('New ticket'),
+ path => 'SelfService/Create.html?Queue=' . $queue_id
+ };
+}
+
+if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf',
+ Object => $RT::System )) {
+ $tabs->{Z} = { title => loc('Preferences'),
+ path => 'SelfService/Prefs.html'
+ };
+}
+
+my $actions = {
+ B => { html => $m->scomp('GotoTicket')
+ }
+ };
+</%INIT>
+<%ARGS>
+$Title => undef
+$current_toptab => undef
+$current_tab => undef
+</%ARGS>
+
diff --git a/rt/share/html/SelfService/Error.html b/rt/share/html/SelfService/Error.html
new file mode 100755
index 0000000..9c81ebb
--- /dev/null
+++ b/rt/share/html/SelfService/Error.html
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /SelfService/Elements/Header, Title => loc('Error') &>
+<h2 class="title"><%loc('Error')%></h2>
+<&| /Widgets/TitleBox, title => $Title &>
+<%$Why%>
+<br />
+<font size="-1">
+<%$Details%>
+</font>
+</&>
+</body>
+</html>
+
+
+<%args>
+$Code => undef
+$Details => undef
+$Title => loc("RT Error")
+$Why => loc("the calling component did not specify why")
+</%args>
+
+<%INIT>
+$Details ||= "No details";
+$RT::Logger->error("WebRT: $Why ($Details)");
+</%INIT>
diff --git a/rt/share/html/SelfService/Prefs.html b/rt/share/html/SelfService/Prefs.html
new file mode 100755
index 0000000..dabab79
--- /dev/null
+++ b/rt/share/html/SelfService/Prefs.html
@@ -0,0 +1,92 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /SelfService/Elements/Header, Title => loc('Preferences') &>
+
+<& /Elements/ListActions, actions => \@results &>
+<form method="post">
+
+% unless (RT->Config->Get('WebExternalAuth') and !RT->Config->Get('WebFallbackToInternalAuth')) {
+<&| /Widgets/TitleBox, title => loc('Change password') &>
+<&|/l&>New password</&>: <input type="password" name="NewPass1" size="16" autocomplete="off" />
+<&|/l&>Confirm</&>: <input type="password" name="NewPass2" size="16" autocomplete="off" />
+</&>
+<br />
+% }
+<& /Elements/Submit, Label => loc('Save Changes') &>
+ </form>
+
+
+<%INIT>
+my @results;
+
+if ($NewPass1) {
+ if ($NewPass1 ne $NewPass2) {
+ push (@results, "Passwords did not match.");
+ }
+ else {
+ my ($val, $msg)=$session{'CurrentUser'}->UserObj->SetPassword($NewPass1);
+ push (@results, "Password: ".$msg);
+ }
+}
+if ($Signature) {
+ $Signature =~ s/(\r\n|\r)/\n/g;
+ if ($Signature ne $session{'CurrentUser'}->UserObj->Signature) {
+ my ($val, $msg)=$session{'CurrentUser'}->UserObj->SetSignature($Signature);
+ push (@results, "Signature: ".$msg);
+ }
+}
+#A hack to make sure that session gets rewritten.
+
+$session{'i'}++;
+</%INIT>
+
+<%ARGS>
+$Signature => undef
+$NewPass1 => undef
+$NewPass2 => undef
+</%ARGS>
diff --git a/rt/share/html/SelfService/Update.html b/rt/share/html/SelfService/Update.html
new file mode 100755
index 0000000..eb798d3
--- /dev/null
+++ b/rt/share/html/SelfService/Update.html
@@ -0,0 +1,133 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /SelfService/Elements/Header,
+ Title =>loc('Update ticket #[_1]', $Ticket->id)
+&>
+
+% $m->callback(CallbackName => 'BeforeForm', %ARGS, ARGSRef => \%ARGS, Ticket => $Ticket );
+
+<form action="Display.html" method="post" enctype="multipart/form-data">
+<input type="hidden" class="hidden" name="UpdateType" value="response" />
+<input type="hidden" class="hidden" name="id" value="<%$Ticket->Id%>" />
+<table>
+ <tr>
+ <td class="label">
+ <&|/l&>Status</&>
+ </td>
+ <td class="value">
+ <& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)", loc($Ticket->Status)), Default => $ARGS{'Status'} || ($Ticket->Status eq $DefaultStatus ? undef : $DefaultStatus)&>
+ </td>
+ </tr>
+ <tr>
+ <td class="label">
+ <&|/l&>Subject</&>
+ </td>
+ <td class="value">
+ <input name="UpdateSubject" size="60" value="<% $Ticket->Subject %>" />
+ </td>
+
+ </tr>
+% if (exists $session{'Attachments'}) {
+<tr>
+ <td class="label">
+ <&|/l&>Attached file</&>
+ </td>
+ <td colspan="5" class="value">
+ <&|/l&>Check box to delete</&><br />
+% foreach my $attach_name (keys %{$session{'Attachments'}}) {
+ <input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
+% } # end of foreach
+ </td>
+</tr>
+% } # end of if
+<tr>
+ <td class="label">
+ <&|/l&>Attach</&>
+ </td>
+ <td class="value">
+ <input name="Attach" type="file" />
+ <input type="hidden" class="hidden" name="UpdateAttach" value="1" />
+ </td>
+ </tr>
+</table>
+<& /Ticket/Elements/EditCustomFields, TicketObj => $Ticket &>
+<& /Elements/MessageBox,
+ Name => "UpdateContent",
+ QuoteTransaction => $ARGS{QuoteTransaction}
+ &>
+ <br />
+
+
+<& /Elements/Submit &>
+ </form>
+
+
+
+<%INIT>
+
+my $Ticket = LoadTicket($id);
+
+$m->callback( Ticket => $Ticket, ARGSRef => \%ARGS, CallbackName => 'Initial' );
+
+my $title = loc( "Update ticket #[_1]", $Ticket->id );
+
+$DefaultStatus = $ARGS{Status} || $Ticket->Status() unless ($DefaultStatus);
+
+
+Abort( loc("No permission to view update ticket") )
+ unless ( $Ticket->CurrentUserHasRight('ReplyToTicket')
+ or $Ticket->CurrentUserHasRight('ModifyTicket') );
+
+$m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS);
+</%INIT>
+
+<%ARGS>
+$id => undef
+$Action => undef
+$DefaultStatus => undef
+</%ARGS>
diff --git a/rt/share/html/SelfService/index.html b/rt/share/html/SelfService/index.html
new file mode 100755
index 0000000..fd1927a
--- /dev/null
+++ b/rt/share/html/SelfService/index.html
@@ -0,0 +1,57 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /SelfService/Elements/Header, Title => loc('Open tickets') &>
+<& /SelfService/Elements/MyRequests,
+ %ARGS,
+ BaseURL => RT->Config->Get('WebPath') ."/SelfService/?",
+ Page => $Page,
+&>
+
+<%ARGS>
+$Page => 1
+</%ARGS>
diff --git a/rt/share/html/Ticket/Attachment/WithHeaders/dhandler b/rt/share/html/Ticket/Attachment/WithHeaders/dhandler
new file mode 100644
index 0000000..18c39eb
--- /dev/null
+++ b/rt/share/html/Ticket/Attachment/WithHeaders/dhandler
@@ -0,0 +1,80 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%perl>
+ # we don't need transaction id
+ my ($id) = $m->dhandler_arg =~ /^(\d+)/;
+ unless ( $id ) {
+ # wrong url format
+ Abort("Corrupted attachment URL");
+ }
+
+ my $AttachmentObj = new RT::Attachment( $session{'CurrentUser'} );
+ $AttachmentObj->Load( $id );
+ unless ( $AttachmentObj->id ) {
+ Abort("Couldn't load attachment #$id");
+ }
+
+ my $content_type = 'text/plain';
+ my $enc = $AttachmentObj->OriginalEncoding;
+ if ( $enc ) {
+ my $iana = Encode::find_encoding($enc);
+ $iana = $iana ? $iana->mime_name : $enc;
+ $content_type .= ";charset=$iana";
+ }
+
+ # XXX: should we check handle html here and integrate headers into html?
+ $r->content_type( $content_type );
+ $m->clear_buffer;
+ $m->out( $AttachmentObj->EncodedHeaders( $enc ) );
+ $m->out( "\n\n" );
+ $m->out( $AttachmentObj->OriginalContent );
+ $m->abort;
+</%perl>
+<%attr>
+AutoFlush => 0
+</%attr>
diff --git a/rt/share/html/Ticket/Attachment/dhandler b/rt/share/html/Ticket/Attachment/dhandler
new file mode 100755
index 0000000..d4d556b
--- /dev/null
+++ b/rt/share/html/Ticket/Attachment/dhandler
@@ -0,0 +1,93 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%perl>
+ my ($ticket, $trans,$attach, $filename);
+ my $arg = $m->dhandler_arg; # get rest of path
+ if ($arg =~ '^(\d+)/(\d+)') {
+ $trans = $1;
+ $attach = $2;
+ }
+ else {
+ Abort("Corrupted attachment URL.");
+ }
+ my $AttachmentObj = new RT::Attachment($session{'CurrentUser'});
+ $AttachmentObj->Load($attach) || Abort("Attachment '$attach' could not be loaded");
+
+
+ unless ($AttachmentObj->id) {
+ Abort("Bad attachment id. Couldn't find attachment '$attach'\n");
+ }
+ unless ($AttachmentObj->TransactionId() == $trans ) {
+ Abort("Bad transaction number for attachment. $trans should be".$AttachmentObj->TransactionId() ."\n");
+
+ }
+
+ my $content_type = $AttachmentObj->ContentType || 'text/plain';
+
+ unless (RT->Config->Get('TrustHTMLAttachments')) {
+ $content_type = 'text/plain' if ($content_type =~ /^text\/html/i);
+ }
+
+ if (my $enc = $AttachmentObj->OriginalEncoding) {
+ my $iana = Encode::find_encoding( $enc );
+ $iana = $iana? $iana->mime_name : $enc;
+ $content_type .= ";charset=$iana";
+ }
+
+ # unless (RT->Config->Get('TrustMIMEAttachments')) {
+ # $content_type = 'application/octet-stream';
+ # }
+
+ $r->content_type( $content_type );
+ $m->clear_buffer();
+ $m->out($AttachmentObj->OriginalContent);
+ $m->abort;
+</%perl>
+<%attr>
+AutoFlush => 0
+</%attr>
diff --git a/rt/share/html/Ticket/Create.html b/rt/share/html/Ticket/Create.html
new file mode 100755
index 0000000..28b6556
--- /dev/null
+++ b/rt/share/html/Ticket/Create.html
@@ -0,0 +1,430 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header,
+ Title => $title,
+ onload => "function () { hide(document.getElementById('Ticket-Create-details')) }" &>
+<& /Elements/Tabs,
+ current_toptab => "Ticket/Create.html",
+ Title => $title,
+ actions => $actions &>
+<& /Elements/ListActions, actions => \@results &>
+<form action="<% RT->Config->Get('WebPath') %>/Ticket/Create.html" method="post" enctype="multipart/form-data" name="TicketCreate">
+<input type="hidden" class="hidden" name="id" value="new" />
+% $m->callback( CallbackName => 'FormStart', QueueObj => $QueueObj, ARGSRef => \%ARGS );
+% if ($gnupg_widget) {
+<& /Elements/GnuPG/SignEncryptWidget:ShowIssues, self => $gnupg_widget &>
+% }
+<div id="Ticket-Create-basics">
+<a name="basics"></a>
+<&| /Widgets/TitleBox, title => $title &>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td class="label"><&|/l&>Queue</&>:</td>
+<td class="value"><& Elements/ShowQueue, QueueObj => $QueueObj &>
+<input type="hidden" class="hidden" name="Queue" value="<% $QueueObj->Name %>" />
+</td>
+<td class="label"><&|/l&>Status</&>:
+</td>
+<td class="value">
+<& /Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}||'new', DefaultValue => 0, SkipDeleted => 1 &>
+</td>
+<td class="label">
+<&|/l&>Owner</&>:
+</td>
+<td class="value">
+<& /Elements/SelectOwner, Name => "Owner", QueueObj => $QueueObj, Default => $ARGS{Owner}||$RT::Nobody->Id, DefaultValue => 0 &>
+</td>
+% $m->callback( CallbackName => 'AfterOwner', ARGSRef => \%ARGS );
+</tr>
+<tr>
+<td class="label">
+<&|/l&>Requestors</&>:
+</td>
+<td class="value" colspan="5">
+<& /Elements/EmailInput, Name => 'Requestors', Size => '40', Default => $ARGS{Requestors} || $session{CurrentUser}->EmailAddress &>
+</td>
+</tr>
+<tr>
+<td class="label">
+<&|/l&>Cc</&>:
+</td>
+<td class="value" colspan="3"><& /Elements/EmailInput, Name => 'Cc', Size => '40', Default => $ARGS{Cc} &></td>
+<td class="comment" colspan="2"><i><font size="-2">
+<&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)</&></font></i>
+</td>
+</tr>
+<tr>
+<td class="label">
+<&|/l&>Admin Cc</&>:
+</td>
+<td class="value" colspan="3"><& /Elements/EmailInput, Name => 'AdminCc', Size => '40', Default => $ARGS{AdminCc} &></td>
+<td class="comment" colspan="2"><i><font size="-2">
+<&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)</&></font></i>
+</td>
+</tr>
+<tr>
+<td class="label">
+<&|/l&>Subject</&>:
+</td>
+<td class="value" colspan="5">
+<input name="Subject" size="60" maxsize="200" value="<%$ARGS{Subject} || ''%>" />
+</td>
+</tr>
+<tr>
+<td colspan="6">
+<& /Ticket/Elements/EditCustomFields, %ARGS, QueueObj => $QueueObj &>
+</td>
+</tr>
+<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, QueueObj => $QueueObj &>
+<tr>
+% if (exists $session{'Attachments'}) {
+<td class="label">
+<&|/l&>Attached file</&>:
+</td>
+<td colspan="5">
+<&|/l&>Check box to delete</&><br />
+% foreach my $attach_name (keys %{$session{'Attachments'}}) {
+<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
+% } # end of foreach
+</td>
+</tr>
+<tr>
+% } # end of if
+<td class="label">
+<&|/l&>Attach file</&>:
+</td>
+<td class="value" colspan="5">
+<input type="file" name="Attach" />
+<input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" />
+</td>
+</tr>
+
+% if ( $gnupg_widget ) {
+<tr><td>&nbsp;</td><td colspan="5">
+<& /Elements/GnuPG/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &>
+</td></tr>
+% }
+
+<tr>
+<td colspan="6">
+<&|/l&>Describe the issue below</&>:<br />
+% $m->callback( %ARGS, QueueObj => $QueueObj, CallbackName => 'BeforeMessageBox' );
+% if (exists $ARGS{Content}) {
+<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &>
+% } else {
+<& /Elements/MessageBox, QuoteTransaction => $QuoteTransaction &>
+%}
+
+<br />
+</td>
+</tr>
+</table>
+</&>
+<& /Elements/Submit, Label => loc("Create")&>
+</div>
+
+<div id="Ticket-Create-details">
+<a name="details"></a>
+<table width="100%" border="0">
+<tr>
+<td width="50%" valign="top" class="boxcontainer">
+ <div class="ticket-info-basics">
+ <&| /Widgets/TitleBox, title => loc('The Basics'),
+ title_class=> 'inverse',
+ color => "#993333" &>
+<table border="0">
+<tr><td class="label"><&|/l&>Priority</&>:</td>
+<td><& /Elements/SelectPriority,
+ Name => "InitialPriority",
+ Default => $ARGS{InitialPriority} ? $ARGS{InitialPriority} : $QueueObj->InitialPriority,
+&></td></tr>
+<tr><td class="label"><&|/l&>Final Priority</&>:</td>
+<td><& /Elements/SelectPriority,
+ Name => "FinalPriority",
+ Default => $ARGS{FinalPriority} ? $ARGS{FinalPriority} : $QueueObj->FinalPriority,
+&></td></tr>
+<tr><td class="label"><&|/l&>Time Estimated</&>:</td>
+<td>
+<& /Elements/EditTimeValue, Name => 'TimeEstimated', Default => $ARGS{TimeEstimated} || '', InUnits => $ARGS{'TimeEstimated-TimeUnits'} &>
+
+</td></tr>
+<tr><td class="label"><&|/l&>Time Worked</&>:</td>
+<td>
+<& /Elements/EditTimeValue, Name => 'TimeWorked', Default => $ARGS{TimeWorked} || '', InUnits => $ARGS{'TimeWorked-TimeUnits'} &>
+</td></tr>
+<tr>
+<td class="label"><&|/l&>Time Left</&>:</td>
+<td>
+<& /Elements/EditTimeValue, Name => 'TimeLeft', Default => $ARGS{TimeLeft} || '', InUnits => $ARGS{'TimeLeft-TimeUnits'} &>
+</td></tr>
+</table>
+</&>
+<br />
+<div class="ticket-info-dates">
+<&|/Widgets/TitleBox, title => loc("Dates"),
+ title_class=> 'inverse',
+ color => "#663366" &>
+
+<table>
+<tr><td class="label"><&|/l&>Starts</&>:</td><td><& /Elements/SelectDate, Name => "Starts", Default => $ARGS{Starts} || '' &></td></tr>
+<tr><td class="label"><&|/l&>Due</&>:</td><td><& /Elements/SelectDate, Name => "Due", Default => $ARGS{Due} || '' &></td></tr>
+</table>
+</&>
+</div>
+</div>
+<br />
+</td>
+
+<td valign="top" class="boxcontainer">
+<div class="ticket-info-links">
+<&| /Widgets/TitleBox, title => loc('Links'), title_class=> 'inverse' &>
+
+<em><&|/l&>(Enter ticket ids or URLs, separated with spaces)</&></em>
+<table border="0">
+<tr><td class="label"><&|/l&>Depends on</&></td><td><input size="10" name="new-DependsOn" value="<% $ARGS{'new-DependsOn'} || '' %>" /></td></tr>
+<tr><td class="label"><&|/l&>Depended on by</&></td><td><input size="10" name="DependsOn-new" value="<% $ARGS{'DependsOn-new'} || '' %>" /></td></tr>
+<tr><td class="label"><&|/l&>Parents</&></td><td><input size="10" name="new-MemberOf" value="<% $ARGS{'new-MemberOf'} || '' %>" /></td></tr>
+<tr><td class="label"><&|/l&>Children</&></td><td><input size="10" name="MemberOf-new" value="<% $ARGS{'MemberOf-new'} || '' %>" /></td></tr>
+<tr><td class="label"><&|/l&>Refers to</&></td><td><input size="10" name="new-RefersTo" value="<% $ARGS{'new-RefersTo'} || '' %>" /></td></tr>
+<tr><td class="label"><&|/l&>Referred to by</&></td><td><input size="10" name="RefersTo-new" value="<% $ARGS{'RefersTo-new'} || '' %>" /></td></tr>
+
+
+</table>
+</&>
+</div>
+<br />
+
+</td>
+</tr>
+</table>
+<& /Elements/Submit, Label => loc("Create") &>
+</div>
+</form>
+
+<%INIT>
+$m->callback( CallbackName => "Init", ARGSRef => \%ARGS );
+my $Queue = $ARGS{Queue};
+
+my $CloneTicketObj;
+if ($CloneTicket) {
+ $CloneTicketObj = RT::Ticket->new( $session{CurrentUser} );
+ $CloneTicketObj->Load($CloneTicket)
+ or Abort( loc("Ticket could not be loaded") );
+
+ my $clone = {
+ Requestors => join( ',', $CloneTicketObj->RequestorAddresses ),
+ Cc => join( ',', $CloneTicketObj->CcAddresses ),
+ AdminCc => join( ',', $CloneTicketObj->AdminCcAddresses ),
+ InitialPriority => $CloneTicketObj->Priority,
+ };
+
+ $clone->{$_} = $CloneTicketObj->$_()
+ for qw/Owner Subject FinalPriority TimeEstimated TimeWorked
+ Status TimeLeft/;
+
+ $clone->{$_} = $CloneTicketObj->$_->AsString
+ for grep { $CloneTicketObj->$_->Unix }
+ map { $_ . "Obj" } qw/Starts Started Due Resolved/;
+
+ my $members = $CloneTicketObj->Members;
+ my ( @members, @members_of, @refers, @refers_by, @depends, @depends_by );
+ my $refers = $CloneTicketObj->RefersTo;
+ while ( my $refer = $refers->Next ) {
+ push @refers, $refer->LocalTarget;
+ }
+ $clone->{'new-RefersTo'} = join ' ', @refers;
+
+ my $refers_by = $CloneTicketObj->ReferredToBy;
+ while ( my $refer_by = $refers_by->Next ) {
+ push @refers_by, $refer_by->LocalBase;
+ }
+ $clone->{'RefersTo-new'} = join ' ', @refers_by;
+ if (0) { # Temporarily disabled
+ my $depends = $CloneTicketObj->DependsOn;
+ while ( my $depend = $depends->Next ) {
+ push @depends, $depend->LocalTarget;
+ }
+ $clone->{'new-DependsOn'} = join ' ', @depends;
+
+ my $depends_by = $CloneTicketObj->DependedOnBy;
+ while ( my $depend_by = $depends_by->Next ) {
+ push @depends_by, $depend_by->LocalBase;
+ }
+ $clone->{'DependsOn-new'} = join ' ', @depends_by;
+
+ while ( my $member = $members->Next ) {
+ push @members, $member->LocalBase;
+ }
+ $clone->{'MemberOf-new'} = join ' ', @members;
+
+ my $members_of = $CloneTicketObj->MemberOf;
+ while ( my $member_of = $members_of->Next ) {
+ push @members_of, $member_of->LocalTarget;
+ }
+ $clone->{'new-MemberOf'} = join ' ', @members_of;
+
+ }
+
+ my $cfs = $CloneTicketObj->QueueObj->TicketCustomFields();
+ while ( my $cf = $cfs->Next ) {
+ my $cf_id = $cf->id;
+ my $cf_values = $CloneTicketObj->CustomFieldValues( $cf->id );
+ my @cf_values;
+ while ( my $cf_value = $cf_values->Next ) {
+ push @cf_values, $cf_value->Content;
+ }
+ $clone->{"Object-RT::Ticket--CustomField-$cf_id-Value"} = join "\n",
+ @cf_values;
+ }
+
+ for ( keys %$clone ) {
+ $ARGS{$_} = $clone->{$_} if not defined $ARGS{$_};
+ }
+
+}
+
+my @results;
+
+my $title = loc("Create a new ticket");
+
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($Queue) || Abort(loc("Queue could not be loaded."));
+
+$m->callback( QueueObj => $QueueObj, title => \$title, results => \@results, ARGSRef => \%ARGS );
+
+$QueueObj->Disabled && Abort(loc("Cannot create tickets in a disabled queue."));
+
+my $CFs = $QueueObj->TicketCustomFields();
+
+my $ValidCFs = $m->comp(
+ '/Elements/ValidateCustomFields',
+ CustomFields => $CFs,
+ ARGSRef => \%ARGS
+);
+
+# {{{ deal with deleting uploaded attachments
+foreach my $key (keys %ARGS) {
+ if ($key =~ m/^DeleteAttach-(.+)$/) {
+ delete $session{'Attachments'}{$1};
+ }
+ $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
+}
+# }}}
+
+# {{{ store the uploaded attachment in session
+if ($ARGS{'Attach'}) { # attachment?
+ my $attachment = MakeMIMEEntity(
+ AttachmentFieldName => 'Attach'
+ );
+
+ my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
+ $session{'Attachments'} = {
+ %{$session{'Attachments'} || {}},
+ $file_path => $attachment,
+ };
+}
+# }}}
+
+# delete temporary storage entry to make WebUI clean
+unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') {
+ delete $session{'Attachments'};
+}
+
+my $checks_failure = 0;
+
+my $gnupg_widget = $m->comp('/Elements/GnuPG/SignEncryptWidget:new', Arguments => \%ARGS );
+$m->comp( '/Elements/GnuPG/SignEncryptWidget:Process',
+ self => $gnupg_widget,
+ QueueObj => $QueueObj,
+);
+
+
+if ( !exists $ARGS{'AddMoreAttach'} && ($ARGS{'id'}||'') eq 'new' ) {
+ my $status = $m->comp('/Elements/GnuPG/SignEncryptWidget:Check',
+ self => $gnupg_widget,
+ Operation => 'Create',
+ QueueObj => $QueueObj,
+ );
+ $checks_failure = 1 unless $status;
+}
+
+my $skip_create = 0;
+$m->callback( CallbackName => 'BeforeCreate', ARGSRef => \%ARGS, skip_create => \$skip_create,
+ checks_failure => $checks_failure, results => \@results );
+
+if ((!exists $ARGS{'AddMoreAttach'}) and (defined($ARGS{'id'}) and $ARGS{'id'} eq 'new')) { # new ticket?
+ if ( $ValidCFs && !$checks_failure && !$skip_create ) {
+ $m->comp('Display.html', %ARGS);
+ $RT::Logger->crit("After display call; error is $@");
+ $m->abort();
+ }
+ elsif ( !$ValidCFs ) {
+ # Invalid CFs
+ while (my $CF = $CFs->Next) {
+ my $msg = $m->notes('InvalidField-' . $CF->Id) or next;
+ push @results, $CF->Name . ': ' . $msg;
+ }
+ }
+}
+
+my $actions = {
+ A => {
+ html => q[<a href="#basics" onclick="return switchVisibility('Ticket-Create-basics','Ticket-Create-details');">] . loc('Show basics') . q[</a>],
+ },
+ B => {
+ html => q[<a href="#details" onclick="return switchVisibility('Ticket-Create-details','Ticket-Create-basics');">] . loc('Show details') . q[</a>],
+ },
+};
+</%INIT>
+
+<%ARGS>
+$DependsOn => undef
+$DependedOnBy => undef
+$MemberOf => undef
+$QuoteTransaction => undef
+$CloneTicket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Display.html b/rt/share/html/Ticket/Display.html
new file mode 100755
index 0000000..f8eaf39
--- /dev/null
+++ b/rt/share/html/Ticket/Display.html
@@ -0,0 +1,207 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header,
+ Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject),
+ LinkRel => \%link_rel &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $TicketObj,
+ current_tab => 'Ticket/Display.html?id='.$TicketObj->id,
+ Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@Actions, ARGSRef => \%ARGS, Ticket => $TicketObj);
+
+<& /Elements/ListActions, actions => \@Actions &>
+<& Elements/ShowUpdateStatus, Ticket => $TicketObj &>
+
+% $m->callback( %ARGS, Ticket => $TicketObj, CallbackName => 'BeforeShowSummary' );
+<div class="summary">
+<&| /Widgets/TitleBox, title => loc('Ticket metadata') &>
+<& /Ticket/Elements/ShowSummary, Ticket => $TicketObj, Attachments => $attachments &>
+</&>
+</div>
+<br />
+
+% $m->callback( Ticket => $TicketObj, %ARGS, CallbackName => 'BeforeShowHistory' );
+
+<& /Ticket/Elements/ShowHistory ,
+ Ticket => $TicketObj,
+ Tickets => $Tickets,
+ Collapsed => $ARGS{'Collapsed'},
+ ShowHeaders => $ARGS{'ShowHeaders'},
+ Attachments => $attachments,
+ AttachmentContent => $attachment_content
+&>
+
+% $m->callback( %ARGS,
+% Ticket => $TicketObj,
+% current_tab => 'Ticket/Display.html?id=' . $TicketObj->id,
+% CallbackName => 'AfterShowHistory',
+% );
+
+<%ARGS>
+$id => undef
+$TicketObj => undef
+$ShowHeaders => 0
+$Collapsed => undef
+</%ARGS>
+
+<%INIT>
+
+$m->callback( TicketObj => $TicketObj, ARGSRef => \%ARGS, CallbackName => 'Initial' );
+
+my (@Actions, $Tickets);
+
+
+unless ($id || $TicketObj) {
+ Abort('No ticket specified');
+}
+
+if ($ARGS{'id'} eq 'new') {
+ # {{{ Create a new ticket
+
+ my $Queue = new RT::Queue( $session{'CurrentUser'} );
+ $Queue->Load($ARGS{'Queue'});
+ unless ( $Queue->id ) {
+ Abort('Queue not found');
+ }
+
+ unless ( $Queue->CurrentUserHasRight('CreateTicket') ) {
+ Abort('You have no permission to create tickets in that queue.');
+ }
+
+ ($TicketObj, @Actions) = CreateTicket(
+ Attachments => delete $session{'Attachments'},
+ %ARGS,
+ );
+ unless ( $TicketObj->CurrentUserHasRight('ShowTicket') ) {
+ Abort("No permission to view newly created ticket #".$TicketObj->id.".");
+ }
+ # }}}
+} else {
+ $TicketObj ||= LoadTicket($ARGS{'id'});
+
+ $m->callback( CallbackName => 'BeforeProcessArguments',
+ TicketObj => $TicketObj, Tickets => $Tickets,
+ ActionsRef => \@Actions, ARGSRef => \%ARGS );
+ if ( defined $ARGS{'Action'} ) {
+ if ($ARGS{'Action'} =~ /^(Steal|Kill|Take|SetTold)$/) {
+ my $action = $1;
+ my ($res, $msg) = $TicketObj->$action();
+ push(@Actions, $msg);
+ }
+ }
+
+ $m->callback(CallbackName => 'ProcessArguments',
+ Ticket => $TicketObj,
+ ARGSRef => \%ARGS,
+ Actions => \@Actions);
+
+ $ARGS{UpdateAttachments} = $session{'Attachments'};
+ push @Actions,
+ ProcessUpdateMessage(
+ ARGSRef => \%ARGS,
+ Actions => \@Actions,
+ TicketObj => $TicketObj,
+ );
+ delete $session{'Attachments'};
+
+ #Process status updates
+ push @Actions, ProcessTicketWatchers(ARGSRef => \%ARGS, TicketObj => $TicketObj );
+ push @Actions, ProcessTicketBasics( ARGSRef => \%ARGS, TicketObj => $TicketObj );
+ push @Actions, ProcessTicketLinks( ARGSRef => \%ARGS, TicketObj => $TicketObj );
+ push @Actions, ProcessTicketDates( ARGSRef => \%ARGS, TicketObj => $TicketObj );
+ push @Actions, ProcessObjectCustomFieldUpdates(ARGSRef => \%ARGS, TicketObj => $TicketObj );
+
+ # XXX: we shouldn't block actions here if user has no right to see the ticket,
+ # but we should allow him to see actions he has done
+ unless ($TicketObj->CurrentUserHasRight('ShowTicket')) {
+ Abort("No permission to view ticket");
+ }
+ if ( $ARGS{'MarkAsSeen'} ) {
+ $TicketObj->SetAttribute(
+ Name => 'User-'. $TicketObj->CurrentUser->id .'-SeenUpTo',
+ Content => $TicketObj->LastUpdated,
+ );
+ push @Actions, loc('Marked all messages as seen');
+ }
+}
+
+$m->callback(
+ CallbackName => 'BeforeDisplay',
+ TicketObj => \$TicketObj,
+ Tickets => \$Tickets,
+ Actions => \@Actions,
+ ARGSRef => \%ARGS,
+);
+
+# This code does automatic redirection if any updates happen.
+
+if (@Actions) {
+
+ # We've done something, so we need to clear the decks to avoid
+ # resubmission on refresh.
+ # But we need to store Actions somewhere too, so we don't lose them.
+ my $key = Digest::MD5::md5_hex( rand(1024) );
+ push @{ $session{"Actions"}->{$key} ||= [] }, @Actions;
+ $session{'i'}++;
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') . "Ticket/Display.html?id=" . $TicketObj->id . "&results=" . $key );
+
+}
+
+my $attachments = $m->comp('Elements/FindAttachments', Ticket => $TicketObj, Tickets => $Tickets);
+my $attachment_content = $m->comp('Elements/LoadTextAttachments', Ticket => $TicketObj);
+
+my %link_rel;
+if (defined $session{'tickets'} and ($ARGS{'Query'} or $session{'CurrentSearchHash'}->{'Query'})) {
+ my $item_map = $session{'tickets'}->ItemMap;
+ $link_rel{first} = "Ticket/Display.html?id=" . $item_map->{first} if $item_map->{$TicketObj->Id}{prev};
+ $link_rel{prev} = "Ticket/Display.html?id=" . $item_map->{$TicketObj->Id}{prev} if $item_map->{$TicketObj->Id}{prev};
+ $link_rel{next} = "Ticket/Display.html?id=" . $item_map->{$TicketObj->Id}{next} if $item_map->{$TicketObj->Id}{next};
+ $link_rel{last} = "Ticket/Display.html?id=" . $item_map->{last} if $item_map->{$TicketObj->Id}{next};
+}
+</%INIT>
diff --git a/rt/share/html/Ticket/Elements/AddWatchers b/rt/share/html/Ticket/Elements/AddWatchers
new file mode 100755
index 0000000..d2b222d
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/AddWatchers
@@ -0,0 +1,140 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<br />
+<br />
+
+<&|/l&>Add new watchers</&>:<br />
+
+<table>
+% if ($Users and $Users->Count) {
+<tr><td>
+<&|/l&>Type</&>
+</td><td>
+<&|/l&>Username</&>
+</td></tr>
+% while (my $u = $Users->Next ) {
+<tr><td><&/Elements/SelectWatcherType, Name => "Ticket-AddWatcher-Principal-". $u->PrincipalId &></td><td><& '/Elements/ShowUser', User => $u, style=>'verbose' &></td></tr>
+% }
+% }
+
+% if ($Groups and $Groups->Count) {
+<tr><td>
+<&|/l&>Type</&>
+</td><td>
+<&|/l&>Group</&>
+</td></tr>
+% while (my $g = $Groups->Next ) {
+<tr><td><&/Elements/SelectWatcherType, Name => "Ticket-AddWatcher-Principal-".$g->PrincipalId, Scope => 'queue' &></td><td><%$g->Name%> (<%$g->Description%>)</td></tr>
+% }
+% }
+
+<tr><td>
+<&|/l&>Type</&>
+</td><td>
+<&|/l&>Email</&>
+</td></tr>
+% my $counter = 4;
+% for my $email (@extras) {
+% $counter++;
+<tr><td>
+<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail".$counter &>
+</td><td>
+<input type="hidden" name="WatcherAddressEmail<%$counter%>" value="<%$email->address%>">
+<%$email->format%>
+</td></tr>
+% }
+<tr><td>
+<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail1" &>
+</td><td>
+<& /Elements/EmailInput, Name => 'WatcherAddressEmail1', Size => '20' &>
+</td></tr>
+<tr><td>
+<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail2" &>
+</td><td>
+<& /Elements/EmailInput, Name => 'WatcherAddressEmail2', Size => '20' &>
+</td></tr>
+<tr><td>
+<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail3" &>
+</td><td>
+<& /Elements/EmailInput, Name => 'WatcherAddressEmail3', Size => '20' &>
+</td></tr>
+</table>
+
+<%INIT>
+my ($Users, $Groups);
+
+if ($UserString) {
+ $Users = RT::Users->new($session{'CurrentUser'});
+ $Users->Limit(FIELD => $UserField, VALUE => $UserString, OPERATOR => $UserOp);
+ $Users->LimitToPrivileged if $PrivilegedOnly;
+ }
+
+if ($GroupString) {
+ $Groups = RT::Groups->new($session{'CurrentUser'});
+ $Groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined');
+ $Groups->Limit(FIELD => $GroupField, VALUE => $GroupString, OPERATOR => $GroupOp);
+ }
+
+my @extras;
+for my $addr ( values %{$Ticket->TransactionAddresses} ) {
+ push @extras, $addr unless ($Ticket->IsWatcher( Email => $addr->address));
+}
+
+
+</%INIT>
+
+<%ARGS>
+$UserField => 'Name'
+$UserOp => '='
+$UserString => undef
+$GroupField => 'Name'
+$GroupOp => '='
+$GroupString => undef
+$PrivilegedOnly => undef
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/Bookmark b/rt/share/html/Ticket/Elements/Bookmark
new file mode 100644
index 0000000..d857d38
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/Bookmark
@@ -0,0 +1,93 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+my $bookmarks = $session{'CurrentUser'}->UserObj->FirstAttribute('Bookmarks');
+$bookmarks = $bookmarks->Content if $bookmarks;
+$bookmarks ||= {};
+
+my $bookmarked = $bookmarks->{ $id }; # we still not sure if it's undef
+
+my @ids;
+if ( $Toggle || !$bookmarked ) {
+ my $ticket = RT::Ticket->new( $session{'CurrentUser'} );
+ $ticket->Load( $id );
+ return unless $id = $ticket->id;
+
+ @ids = ($id, $ticket->Merged);
+}
+
+if ( $Toggle ) {
+ if ( grep $bookmarks->{ $_ }, @ids ) {
+ delete $bookmarks->{ $_ } foreach @ids;
+ $bookmarked = 0;
+ } else {
+ $bookmarks->{ $id } = 1;
+ $bookmarked = 1;
+ }
+ $session{'CurrentUser'}->UserObj->SetAttribute(
+ Name => 'Bookmarks',
+ Content => $bookmarks,
+ );
+} elsif ( !$bookmarked ) {
+ $bookmarked = grep $bookmarks->{ $_ }, @ids;
+}
+</%INIT>
+<%ARGS>
+$id
+$Toggle => 0
+</%ARGS>
+<span id="toggle-<% $id %>">
+% my $url = RT->Config->Get('WebPath') ."/Helpers/Toggle/TicketBookmark?id=". $id;
+<a align="right" href="<% $url %>" onclick="ahah('<% $url |n %>', 'toggle-<% $id |n %>'); return false;" >
+% if ( $bookmarked ) {
+<img src="<% RT->Config->Get('WebPath') %>/NoAuth/images/star.gif" alt="<% loc('Remove Bookmark') %>" style="border-style: none" />
+% } else {
+<img src="<% RT->Config->Get('WebPath') %>/NoAuth/images/empty_star.gif" alt="<% loc('Add Bookmark') %>" style="border-style: none" />
+% }
+</a>
+</span>
diff --git a/rt/share/html/Ticket/Elements/BulkLinks b/rt/share/html/Ticket/Elements/BulkLinks
new file mode 100755
index 0000000..7f87cef
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/BulkLinks
@@ -0,0 +1,195 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table width="100%">
+ <tr>
+ <td valign="top" width="50%">
+ <h3><&|/l&>Current Links</&></h3>
+<table>
+ <tr>
+ <td class="labeltop"><&|/l&>Depends on</&>:</td>
+ <td class="value">
+% if ( $hash{DependsOn} ) {
+% for my $link ( values %{$hash{DependsOn}} ) {
+ <input type="checkbox" class="checkbox" name="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1" />
+ <& /Elements/ShowLink, URI => $link->TargetURI &><br />
+% } }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Depended on by</&>:</td>
+ <td class="value">
+% if ( $hash{DependedOnBy} ) {
+% for my $link ( values %{$hash{DependedOnBy}} ) {
+ <input type="checkbox" class="checkbox" name="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1" />
+ <& /Elements/ShowLink, URI => $link->BaseURI &><br />
+% } }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Parents</&>:</td>
+ <td class="value">
+% if ( $hash{MemberOf} ) {
+% for my $link ( values %{$hash{MemberOf}} ) {
+ <input type="checkbox" class="checkbox" name="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1" />
+ <& /Elements/ShowLink, URI => $link->TargetURI &><br />
+% } }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Children</&>:</td>
+ <td class="value">
+% if ( $hash{Members} ) {
+% for my $link ( values %{$hash{Members}} ) {
+ <input type="checkbox" class="checkbox" name="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1" />
+ <& /Elements/ShowLink, URI => $link->BaseURI &><br />
+% } }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Refers to</&>:</td>
+ <td class="value">
+% if ( $hash{RefersTo} ) {
+% for my $link ( values %{$hash{RefersTo}} ) {
+ <input type="checkbox" class="checkbox" name="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1" />
+ <& /Elements/ShowLink, URI => $link->TargetURI &><br />
+% } }
+ </td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Referred to by</&>:</td>
+ <td class="value">
+% if ( $hash{ReferredToBy} ) {
+% for my $link ( values %{$hash{ReferredToBy}} ) {
+% # Skip reminders
+% next if (UNIVERSAL::isa($link->BaseObj, 'RT::Ticket') && $link->BaseObj->Type eq 'reminder');
+ <input type="checkbox" class="checkbox" name="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1" />
+ <& /Elements/ShowLink, URI => $link->BaseURI &><br />
+% } }
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td><i><&|/l&>(Check box to delete)</&></i></td>
+ </tr>
+</table>
+</td>
+<td valign="top">
+<h3><&|/l&>New Links</&></h3>
+<i><&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.</&>
+</i><br />
+<table>
+ <tr>
+ <td class="label"><&|/l&>Merge into</&>:</td>
+ <td class="entry"><input name="Ticket-MergeInto" /> <i><&|/l&>(only one ticket)</&></i></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Depends on</&>:</td>
+ <td class="entry"><input name="Ticket-DependsOn" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Depended on by</&>:</td>
+ <td class="entry"><input name="DependsOn-Ticket" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Parents</&>:</td>
+ <td class="entry"><input name="Ticket-MemberOf" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Children</&>:</td>
+ <td class="entry"> <input name="MemberOf-Ticket" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Refers to</&>:</td>
+ <td class="entry"><input name="Ticket-RefersTo" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Referred to by</&>:</td>
+ <td class="entry"> <input name="RefersTo-Ticket" /></td>
+ </tr>
+</table>
+</td>
+</tr>
+</table>
+
+<%ARGS>
+$Tickets => undef
+</%ARGS>
+
+<%INIT>
+my %hash;
+if ( $Tickets && $Tickets->Count ) {
+ my $first_ticket = $Tickets->Next;
+ # we only show current links that eixst on all the tickets
+ for my $type ( qw/DependsOn DependedOnBy Members MemberOf RefersTo
+ ReferredToBy/ ) {
+ my $target_or_base =
+ $type =~ /DependsOn|MemberOf|RefersTo/ ? 'Target' : 'Base';
+ while ( my $link = $first_ticket->$type->Next ) {
+ $hash{$type}{$link->$target_or_base} = $link;
+ }
+ }
+
+ while ( my $ticket = $Tickets->Next ) {
+ for my $type ( qw/DependsOn DependedOnBy Members MemberOf RefersTo
+ ReferredToBy/ ) {
+ my $target_or_base =
+ $type =~ /DependsOn|MemberOf|RefersTo/ ? 'Target' : 'Base';
+ # if $hash{$type} is empty, no need to check any more
+ next unless $hash{$type} && keys %{$hash{$type}};
+ my %exists;
+ while ( my $link = $ticket->$type->Next ) {
+ $exists{$link->$target_or_base}++;
+ }
+
+ for ( keys %{$hash{$type}} ) {
+ delete $hash{$type}{$_} unless $exists{$_};
+ }
+ }
+ }
+}
+</%INIT>
diff --git a/rt/share/html/Ticket/Elements/EditBasics b/rt/share/html/Ticket/Elements/EditBasics
new file mode 100755
index 0000000..0dc4c6e
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/EditBasics
@@ -0,0 +1,130 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+ <tr>
+ <td class="label"><&|/l&>Subject</&>:</td>
+ <td class="value"><input name="Subject" value="<%$TicketObj->Subject|h%>" size="50" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><&|/l&>Status</&>:</td>
+ <td class="value"><%$SelectStatus|n%></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Queue</&>:</td>
+ <td class="value"><%$SelectQueue|n%></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Owner</&>:</td>
+ <td class="value"><& /Elements/SelectOwner,
+ Name => 'Owner',
+ QueueObj => $TicketObj->QueueObj,
+ TicketObj => $TicketObj,
+ Default => $TicketObj->OwnerObj->Id,
+ DefaultValue => 0,
+ &></td>
+ </tr>
+
+ <tr>
+ <td class="label"><&|/l&>Time Estimated</&>:</td>
+ <td class="value">
+ <& /Elements/EditTimeValue,
+ Name => 'TimeEstimated',
+ Default => $TicketObj->TimeEstimated,
+ &>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Time Worked</&>:</td>
+ <td class="value">
+ <& /Elements/EditTimeValue,
+ Name => 'TimeWorked',
+ Default => $TicketObj->TimeWorked,
+ &>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Time Left</&>:</td>
+ <td class="value">
+ <& /Elements/EditTimeValue,
+ Name => 'TimeLeft',
+ Default => $TicketObj->TimeLeft,
+ &>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="label"><&|/l&>Priority</&>:</td>
+ <td class="value"><& /Elements/SelectPriority,
+ Default => $TicketObj->Priority,
+ &></td>
+ </tr>
+
+ <tr>
+ <td class="label"><&|/l&>Final Priority</&>:</td>
+ <td class="value"><& /Elements/SelectPriority,
+ Name => "FinalPriority",
+ Default => $TicketObj->FinalPriority,
+ &></td>
+ </tr>
+
+
+
+% $m->callback( CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS );
+</table>
+
+<%INIT>
+#It's hard to do this inline, so we'll preload the html of the selectstatus in here.
+my $SelectStatus = $m->scomp("/Elements/SelectStatus", Name => 'Status', DefaultLabel => loc("[_1] (Unchanged)",loc($TicketObj->Status)));
+my $SelectQueue = $m->scomp("/Elements/SelectQueue", Name => 'Queue', Default =>$TicketObj->QueueObj->Id, ShowNullOption => 0);
+
+</%INIT>
+<%ARGS>
+
+$TicketObj => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/EditCustomFields b/rt/share/html/Ticket/Elements/EditCustomFields
new file mode 100755
index 0000000..c3a44ee
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/EditCustomFields
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+% my $i = 0;
+% while ( my $CustomField = $CustomFields->Next ) {
+% next unless $CustomField->CurrentUserHasRight('ModifyCustomField');
+% $i++;
+% if ( $i % 2 ) {
+<tr>
+% }
+ <td class="cflabel">
+ <b><% loc($CustomField->Name) %></b><br />
+ <i><% $CustomField->FriendlyType %></i>
+ </td>
+ <td class="entry">
+% my $default = $m->notes('Field-' . $CustomField->Id);
+% $default ||= $ARGS{"CustomField-". $CustomField->Id };
+ <& /Elements/EditCustomField,
+ %ARGS,
+ Object => $TicketObj,
+ CustomField => $CustomField,
+ NamePrefix => $NamePrefix,
+ Default => $default,
+ &>
+% if (my $msg = $m->notes('InvalidField-' . $CustomField->Id)) {
+ <br />
+ <span class="cfinvalidfield"><% $msg %></span>
+% }
+ </td>
+
+% unless ( $i % 2 ) {
+</tr>
+% }
+
+% }
+
+%# close row if required
+% if ( $i % 2 ) {
+</tr>
+% }
+
+</table>
+<%INIT>
+my $CustomFields;
+
+if ($TicketObj && !$OnCreate) {
+ $CustomFields = $TicketObj->CustomFields();
+ $NamePrefix .= "Object-RT::Ticket-".$TicketObj->Id."-CustomField-";
+} else {
+ $CustomFields = $QueueObj->TicketCustomFields();
+ $NamePrefix .= "Object-RT::Ticket--CustomField-";
+}
+
+$m->callback( %ARGS, CallbackName => 'MassageCustomFields', CustomFields => $CustomFields );
+
+</%INIT>
+<%ARGS>
+$NamePrefix => ''
+$TicketObj => undef
+$QueueObj => undef
+$OnCreate => undef
+$DefaultsFromTopArguments => 1
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/EditDates b/rt/share/html/Ticket/Elements/EditDates
new file mode 100755
index 0000000..fc17cdb
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/EditDates
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+ <tr>
+ <td class="label"><&|/l&>Starts</&>:</td>
+ <td class="entry"><& /Elements/SelectDate, menu_prefix => 'Starts', current => 0 &>
+ (<% $TicketObj->StartsObj->AsString %>)</td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Started</&>:</td>
+ <td class="entry"><& /Elements/SelectDate, menu_prefix => 'Started', current => 0 &> (<%$TicketObj->StartedObj->AsString %>)</td>
+ </tr>
+
+ <tr>
+ <td class="label">
+ <&|/l&>Last Contact</&>:
+ </td>
+ <td class="entry">
+ <& /Elements/SelectDate, menu_prefix => 'Told', current => 0 &> (<% $TicketObj->ToldObj->AsString %>)
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Due</&>:</td>
+ <td class="entry">
+ <& /Elements/SelectDate, menu_prefix => 'Due', current => 0 &> (<% $TicketObj->DueObj->AsString %>)
+ </td>
+ </tr>
+</table>
+<%ARGS>
+$TicketObj => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Elements/EditPeople b/rt/share/html/Ticket/Elements/EditPeople
new file mode 100755
index 0000000..abf121a
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/EditPeople
@@ -0,0 +1,93 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table width="100%">
+<tr>
+<td valign="top">
+
+<h3><&|/l&>New watchers</&></h3>
+<&|/l&>Find people whose</&><br />
+<& /Elements/SelectUsers &>
+<input type="submit" class="button" name="OnlySearchForPeople" value="<&|/l&>Go!</&>" />
+<br />
+<&|/l&>Find groups whose</&><br />
+<& /Elements/SelectGroups &>
+<input type="submit" class="button" name="OnlySearchForGroup" value="<&|/l&>Go!</&>" />
+
+<& AddWatchers, Ticket => $Ticket, UserString => $UserString,
+ UserOp => $UserOp, UserField => $UserField,
+ GroupString => $GroupString, GroupOp => $GroupOp,
+ GroupField => $GroupField, PrivilegedOnly => $PrivilegedOnly &>
+</td><td valign="top">
+<h3><&|/l&>Owner</&></h3>
+<&|/l&>Owner</&>: <& /Elements/SelectOwner, Name => 'Owner', QueueObj => $Ticket->QueueObj, TicketObj => $Ticket, Default => $Ticket->OwnerObj->Id, DefaultValue => 0&>
+<h3><&|/l&>Current watchers</&></h3>
+
+<&|/l&>Requestors</&>:
+<& EditWatchers, TicketObj => $Ticket, Watchers => $Ticket->Requestors &>
+
+<&|/l&>Cc</&>:
+<& EditWatchers, TicketObj => $Ticket, Watchers => $Ticket->Cc &>
+
+<&|/l&>Administrative Cc</&>:
+<& EditWatchers, TicketObj => $Ticket, Watchers => $Ticket->AdminCc &>
+
+<i><&|/l&>(Check box to delete)</&></i><br />
+</td>
+</tr>
+</table>
+
+<%ARGS>
+$UserField => undef
+$UserOp => undef
+$UserString => undef
+$GroupField => undef
+$GroupOp => undef
+$GroupString => undef
+$PrivilegedOnly => undef
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/EditTransactionCustomFields b/rt/share/html/Ticket/Elements/EditTransactionCustomFields
new file mode 100644
index 0000000..8bf939d
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/EditTransactionCustomFields
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ($CustomFields->Count) {
+% while (my $CF = $CustomFields->Next()) {
+% next unless $CF->CurrentUserHasRight('ModifyCustomField');
+<tr>
+<td class="label"><% loc($CF->Name) %>:</td>
+<td>
+<& /Elements/EditCustomField,
+ CustomField => $CF,
+ NamePrefix => $NamePrefix
+&>
+<em><% $CF->FriendlyType %></em>
+</td>
+</td></tr>
+% }
+% }
+
+<%INIT>
+my $CustomFields;
+
+if ($TicketObj) {
+ $CustomFields = $TicketObj->TransactionCustomFields();
+} else {
+ $CustomFields = $QueueObj->TicketTransactionCustomFields();
+}
+
+$m->callback( CallbackName => 'MassageTransactionCustomFields', CustomFields => $CustomFields );
+
+</%INIT>
+<%ARGS>
+$NamePrefix => "Object-RT::Transaction--CustomField-"
+$TicketObj => undef
+$QueueObj => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Elements/EditWatchers b/rt/share/html/Ticket/Elements/EditWatchers
new file mode 100755
index 0000000..6f05c69
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/EditWatchers
@@ -0,0 +1,79 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<ul>
+%# Print out a placeholder if there are none.
+% unless ( $Members->Count ) {
+<li><i><&|/l&>none</&></i></li>
+% }
+
+
+% while ( my $watcher = $Members->Next ) {
+% my $member = $watcher->MemberObj->Object;
+<li>
+<input type="checkbox" class="checkbox" name="Ticket-DeleteWatcher-Type-<% $Watchers->Type %>-Principal-<% $watcher->MemberId %>" value="1" unchecked />
+% if ( $member->isa( 'RT::User' ) ) {
+<a href="<% RT->Config->Get('WebPath') %>/Admin/Users/Modify.html?id=<% $watcher->MemberId %>">
+<& /Elements/ShowUser, User => $member &></a>
+% if ($TicketObj and grep { $_->Content eq $member->EmailAddress } $TicketObj->SquelchMailTo) {
+<b><&|/l&>(Will not be sent email)</&></b>
+% }
+
+% } else {
+<a href="<% RT->Config->Get('WebPath') %>/Admin/Groups/Modify.html?id=<% $watcher->MemberId %>">
+<% $member->Name %></a>
+% }
+</li>
+% }
+</ul>
+<%INIT>
+my $Members = $Watchers->MembersObj;
+</%INIT>
+<%ARGS>
+$TicketObj => undef
+$Watchers => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/FindAttachments b/rt/share/html/Ticket/Elements/FindAttachments
new file mode 100644
index 0000000..1ce75fd
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/FindAttachments
@@ -0,0 +1,95 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+my %documents;
+
+#A default implementation here loops through all transactions and pulls out all their attachments.
+# We end up doing an end-run around that to get a bit more performance
+
+# We force the cache of ticket transactions to get populated up front. otherwise, the
+# code that looks at attachments will look at each one in turn.
+my $attachments = RT::Attachments->new( $session{'CurrentUser'} );
+
+$attachments->Columns( qw( Id Filename Headers Subject Parent ContentEncoding ContentType TransactionId Created));
+
+my $transactions = $attachments->NewAlias('Transactions');
+$attachments->Join( ALIAS1 => 'main',
+ FIELD1 => 'TransactionId',
+ ALIAS2 => $transactions,
+ FIELD2 => 'id' );
+
+my $tickets = $attachments->NewAlias('Tickets');
+
+ $attachments->Join( ALIAS1 => $transactions,
+ FIELD1 => 'ObjectId',
+ ALIAS2 => $tickets,
+ FIELD2 => 'id' );
+
+ $attachments->Limit( ALIAS => $transactions,
+ FIELD => 'ObjectType',
+ VALUE => 'RT::Ticket');
+if ($Tickets) {
+ while ($Ticket = $Tickets->Next) {
+ $attachments->Limit( ALIAS => $tickets,
+ FIELD => 'EffectiveId',
+ VALUE => $Ticket->id() );
+ }
+} else {
+ $attachments->Limit( ALIAS => $tickets,
+ FIELD => 'EffectiveId',
+ VALUE => $Ticket->id() );
+}
+
+
+return ($attachments);
+</%INIT>
+<%ARGS>
+$Ticket => undef
+$Tickets => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Elements/LoadTextAttachments b/rt/share/html/Ticket/Elements/LoadTextAttachments
new file mode 100644
index 0000000..84732b9
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/LoadTextAttachments
@@ -0,0 +1,93 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+
+my $attachments = RT::Attachments->new( $session{'CurrentUser'} );
+
+$attachments->Columns( qw(id Content ContentType TransactionId ContentEncoding));
+
+if ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
+ my $transactions = $attachments->NewAlias('Transactions');
+ $attachments->Join( ALIAS1 => 'main',
+ FIELD1 => 'TransactionId',
+ ALIAS2 => $transactions,
+ FIELD2 => 'id' );
+
+ my $tickets = $attachments->NewAlias('Tickets');
+
+
+ $attachments->Join( ALIAS1 => $transactions,
+ FIELD1 => 'ObjectId',
+ ALIAS2 => $tickets,
+ FIELD2 => 'id' );
+
+ $attachments->Limit( ALIAS => $transactions,
+ FIELD => 'ObjectType',
+ VALUE => 'RT::Ticket');
+
+
+ $attachments->Limit( ALIAS => $tickets,
+ FIELD => 'EffectiveId',
+ VALUE => $Ticket->id() );
+ # if the user may not see comments do not return them
+ unless ( $Ticket->CurrentUserHasRight('ShowTicketComments') ) {
+ $attachments->Limit( ALIAS => $transactions, FIELD => 'Type', OPERATOR => '!=', VALUE => "Comment" );
+ }
+
+ $attachments->Limit ( FIELD => 'ContentType', OPERATOR => '=', VALUE => 'text/plain');
+ $attachments->Limit ( FIELD => 'ContentType', OPERATOR => 'STARTSWITH', VALUE => 'message/');
+ $attachments->Limit ( FIELD => 'ContentType', OPERATOR => '=', VALUE => 'text');
+ $attachments->Limit ( FIELD => 'Filename', OPERATOR => 'IS', VALUE => 'NULL')
+ if RT->Config->Get('SuppressInlineTextFiles', $Ticket->CurrentUser );
+}
+return ($attachments);
+</%INIT>
+<%ARGS>
+$Ticket => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Elements/PreviewScrips b/rt/share/html/Ticket/Elements/PreviewScrips
new file mode 100755
index 0000000..7480ade
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/PreviewScrips
@@ -0,0 +1,235 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$TicketObj => undef
+
+</%args>
+<%init>
+my %squelch = $m->comp('SELF:SquelchRecipients', %ARGS);
+my $Object = $squelch{'Object'};
+my @non_recipients = @{ $squelch{'EmailAddresses'} };
+
+</%init>
+<h2><&|/l&>This message will be sent to...</&></h2>
+
+% if ( $Object and $Object->Scrips ) {
+<i><&|/l&>(Check boxes to disable notifications to the listed recipients)</&></i><br />
+
+% foreach my $scrip (@{$Object->Scrips->Prepared}) {
+% next unless $scrip->ActionObj->Action->isa('RT::Action::SendEmail');
+<b><% $scrip->Description || loc('Scrip #[_1]',$scrip->id) %></b><br />
+<&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)&>[_1] [_2] with template [_3]</&>
+<br />
+%foreach my $type qw(To Cc Bcc) {
+%my @addresses = $scrip->ActionObj->Action->$type();
+<ul>
+%foreach my $addr (@addresses) {
+<li> <b><%loc($type)%></b>: <input type="checkbox" class="checkbox" name="Ticket-<%$TicketObj->id%>-SquelchMailTo" value="<%$addr->address%>" /> <%$addr->address%>
+% }
+</ul>
+% }
+% if (RT->Config->Get('PreviewScripMessages')) {
+<textarea cols="80" rows="5">
+<%$scrip->ActionObj->TemplateObj->MIMEObj->as_string%>
+</textarea>
+% }
+% }
+% }
+<br />
+
+<h2><&|/l&>Messages about this ticket will not be sent to...</&></h2>
+<i><&|/l&>(Check boxes to enable notifications to the listed recipients)</&></i>
+<br />
+<ul>
+% foreach my $recipient (@non_recipients) {
+<li><input type="checkbox" class="checkbox" name="Ticket-<%$TicketObj->id%>-UnsquelchMailTo" value="<%$recipient->Content%>" />
+<% $recipient->Content %>
+% }
+</ul>
+<& /Elements/Submit, Name => 'UpdatePreview', Value => 'UpdatePreview', Label => loc('Save Changes')&>
+
+<%METHOD SquelchRecipients>
+<%ARGS>
+$TicketObj => undef
+</%ARGS>
+<%INIT>
+my $arg = 'Ticket-'.$TicketObj->Id.'-SquelchMailTo';
+my @squelchto = ref($ARGS{$arg}) eq 'ARRAY' ? @{$ARGS{$arg}} : ($ARGS{$arg});
+
+foreach my $address (@squelchto) {
+ $TicketObj->SquelchMailTo($address) if ($address);
+}
+
+
+$arg = 'Ticket-'.$TicketObj->Id.'-UnsquelchMailTo';
+my @unsquelchto = ref($ARGS{$arg}) eq 'ARRAY' ? @{$ARGS{$arg}} : ($ARGS{$arg});
+
+foreach my $address (@unsquelchto) {
+ $TicketObj->UnsquelchMailTo($address) if ($address);
+}
+
+
+my $action;
+
+if (($ARGS{'UpdateType'} && $ARGS{'UpdateType'} eq 'response' ) || ($ARGS{'Action'} && $ARGS{'Action'} eq 'Respond' )) {
+ $action = 'Correspond';
+}
+else {
+ $action = 'Comment';
+}
+
+my $Message = MakeMIMEEntity(
+ Subject => $ARGS{'UpdateSubject'},
+ Body => $ARGS{'UpdateContent'},
+);
+
+my ( $Transaction, $Description, $Object ) = $TicketObj->$action(
+ CcMessageTo => $ARGS{'UpdateCc'},
+ BccMessageTo => $ARGS{'UpdateBcc'},
+ MIMEObj => $Message,
+ TimeTaken => $ARGS{'UpdateTimeWorked'},
+ DryRun => 1
+);
+unless ( $Transaction ) {
+ $RT::Logger->error("Coulfn't fire '$action' action: $Description");
+}
+
+
+return (Object => $Object, EmailAddresses => [$TicketObj->SquelchMailTo]);
+</%INIT>
+</%METHOD>
+
+<%METHOD GetRecipients>
+<%ARGS>
+$TicketObj
+</%ARGS>
+<%INIT>
+my $action;
+if ( ( $ARGS{'UpdateType'} && $ARGS{'UpdateType'} eq 'response' )
+ || ( $ARGS{'Action'} && $ARGS{'Action'} eq 'Respond' ) )
+{
+ $action = 'Correspond';
+}
+else {
+ $action = 'Comment';
+}
+
+my $Message = MakeMIMEEntity(
+ Subject => $ARGS{'UpdateSubject'},
+ Body => $ARGS{'UpdateContent'},
+);
+
+my ( $id, $msg, $txn ) = $TicketObj->$action(
+ CcMessageTo => $ARGS{'UpdateCc'},
+ BccMessageTo => $ARGS{'UpdateBcc'},
+ MIMEObj => $Message,
+ TimeTaken => $ARGS{'UpdateTimeWorked'},
+ DryRun => 1
+);
+unless ( $id && $txn ) {
+ $RT::Logger->error("Couldn't fire '$action' action: $msg");
+ return ();
+}
+
+my @recipients;
+foreach my $scrip ( @{ $txn->Scrips->Prepared } ) {
+ my $action = $scrip->ActionObj->Action;
+ next unless $action->isa('RT::Action::SendEmail');
+
+ foreach my $type qw(To Cc Bcc) {
+ push @recipients, $action->$type();
+ }
+}
+return @recipients;
+</%INIT>
+</%METHOD>
+
+<%METHOD GetRecipientsOnCreate>
+<%INIT>
+my $action;
+my $Message = MakeMIMEEntity(
+ Subject => $ARGS{'Subject'},
+ Cc => $ARGS{'Cc'},
+ Body => $ARGS{'Content'},
+);
+
+my $TicketObj = RT::Ticket->new( $session{'CurrentUser'} );
+my ( $id, $txn, $msg ) = $TicketObj->Create(
+ Type => $ARGS{'Type'} || 'ticket',
+ Queue => $ARGS{'Queue'},
+ Owner => $ARGS{'Owner'},
+ Requestor => $ARGS{'Requestors'},
+ Cc => $ARGS{'Cc'},
+ AdminCc => $ARGS{'AdminCc'},
+ InitialPriority => $ARGS{'InitialPriority'},
+ FinalPriority => $ARGS{'FinalPriority'},
+ TimeLeft => $ARGS{'TimeLeft'},
+ TimeEstimated => $ARGS{'TimeEstimated'},
+ TimeWorked => $ARGS{'TimeWorked'},
+ Subject => $ARGS{'Subject'},
+ Status => $ARGS{'Status'},
+ MIMEObj => $Message,
+ DryRun => 1
+);
+unless ( $id && $txn ) {
+ $RT::Logger->error("Couldn't fire '$action' action: $msg");
+ return ();
+}
+
+my @recipients;
+foreach my $scrip ( @{ $txn->Scrips->Prepared } ) {
+ my $action = $scrip->ActionObj->Action;
+ next unless $action->isa('RT::Action::SendEmail');
+
+ foreach my $type qw(To Cc Bcc) {
+ push @recipients, $action->$type();
+ }
+}
+return @recipients;
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Ticket/Elements/Reminders b/rt/share/html/Ticket/Elements/Reminders
new file mode 100644
index 0000000..14d61ef
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/Reminders
@@ -0,0 +1,178 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Ticket => undef
+$id => undef
+$ShowCompleted => 0
+$Edit => 0
+</%args>
+<%init>
+
+$Ticket = LoadTicket($id) if ($id);
+
+my $request_args = $m->request_args();
+
+my $reminder_collection = $Ticket->Reminders->Collection;
+
+if ( $request_args->{'update-reminders'} ) {
+ while ( my $reminder = $reminder_collection->Next ) {
+ if ( $reminder->Status ne 'resolved' && $request_args->{ 'Complete-Reminder-' . $reminder->id } ) {
+ $Ticket->Reminders->Resolve($reminder);
+ }
+ elsif ( $reminder->Status eq 'resolved' && !$request_args->{ 'Complete-Reminder-' . $reminder->id } ) {
+ $Ticket->Reminders->Open($reminder);
+ }
+
+ if ( exists( $request_args->{ 'Reminder-Subject-' . $reminder->id } ) && ( $reminder->Subject ne $request_args->{ 'Reminder-Subject-' . $reminder->id } )) {
+ $reminder->SetSubject( $request_args->{ 'Reminder-Subject-' . $reminder->id } ) ;
+ }
+
+ if ( exists( $request_args->{ 'Reminder-Owner-' . $reminder->id } ) && ( $reminder->Owner != $request_args->{ 'Reminder-Owner-' . $reminder->id } )) {
+ $reminder->SetOwner( $request_args->{ 'Reminder-Owner-' . $reminder->id } , "Force" ) ;
+ }
+
+ if ( exists( $request_args->{ 'Reminder-Due-' . $reminder->id } ) && ( $reminder->DueObj->Date ne $request_args->{ 'Reminder-Due-' . $reminder->id } )) {
+ $reminder->SetDue( $request_args->{ 'Reminder-Due-' . $reminder->id } ) ;
+ }
+ }
+}
+
+if ( $request_args->{'NewReminder-Subject'} ) {
+ my $due_obj = RT::Date->new( $session{'CurrentUser'} );
+ my $date = Time::ParseDate::parsedate(
+ $request_args->{'NewReminder-Due'},
+ UK => RT->Config->Get('DateDayBeforeMonth'),
+ PREFER_PAST => 0,
+ PREFER_FUTURE => 1
+ );
+ $due_obj->Set( Value => $date, Format => 'unix' );
+ my ( $add_id, $msg, $txnid ) = $Ticket->Reminders->Add(
+
+ Subject => $request_args->{'NewReminder-Subject'},
+ Owner => $request_args->{'NewReminder-Owner'},
+ Due => $due_obj->ISO
+ );
+}
+
+# We've made changes, let's reload our search
+
+$reminder_collection = $Ticket->Reminders->Collection;
+</%init>
+<input type="hidden" class="hidden" name="id" value="<% $Ticket->id %>" />
+<input type="hidden" class="hidden" name="update-reminders" value="1" />
+<div>
+% while (my $reminder = $reminder_collection->Next) {
+% if ($reminder->Status eq 'resolved' && !$ShowCompleted) {
+<input type="hidden" class="hidden" name="Complete-Reminder-<% $reminder->id %>" value="1" />
+% } elsif ($Edit) {
+<& SELF:EditEntry, Reminder => $reminder, Ticket => $Ticket &>
+% } else {
+<& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket &>
+% }
+% }
+% if ($reminder_collection->Count) {
+<i><&|/l&>(Check box to delete)</&></i><br /><br />
+% }
+</div>
+<div>
+<&|/l&>New reminder:</&>
+<& SELF:NewReminder, Ticket => $Ticket &>
+<%method NewReminder>
+<%args>
+$Ticket
+</%args>
+<table>
+<tr class="input-row">
+<td class="label"><label class="horizontal" for="NewReminder-Subject" ><&|/l&>Subject</&>:</label></td>
+<td class="value">
+<input type="text" size="15" name="NewReminder-Subject" id="NewReminder-Subject" />
+</td>
+</tr>
+<tr class="input-row">
+<td class="label">
+<label class="horizontal" for="NewReminder-Owner" ><&|/l&>Owner</&>:</label></td><td class="value">
+<& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, Default=>$session{'CurrentUser'}->id, DefaultValue => 0 &>
+</td>
+</tr>
+<tr class="input-row">
+<td class="label"><label class="horizontal" for="NewReminder-Due" ><&|/l&>Due</&>:</label></td>
+<td class="value">
+<& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &>
+</td>
+</tr>
+</table>
+</%method>
+<%method EditEntry>
+<%args>
+$Reminder
+$Ticket
+</%args>
+<input
+ type="checkbox"
+ name="Complete-Reminder-<%$Reminder->id%>"
+ <% $Reminder->Status eq 'resolved' ? 'checked="checked"' : '' %>
+/>
+ <input type="text" size="15" name="Reminder-Subject-<% $Reminder->id %>" value="<%$Reminder->Subject%>" /> &bull;
+ <& /Elements/SelectOwner, Name => 'Reminder-Owner-'.$Reminder->id, Queue => $Ticket->QueueObj, Default => $Reminder->Owner, DefaultValue => 0 &>
+ <& /Elements/SelectDate, Name => 'Reminder-Due-'.$Reminder->id, Default => $Reminder->DueObj->Date &>
+ (<%$Reminder->DueObj->Unix>0 ? $Reminder->DueObj->AgeAsString : '' %>)<br />
+</%method>
+<%method ShowEntry>
+<%args>
+$Reminder
+$Ticket
+</%args>
+<input
+ type="checkbox"
+ name="Complete-Reminder-<%$Reminder->id%>"
+ <% $Reminder->Status eq 'resolved' ? 'checked="checked"' : '' %>
+/>
+ <%$Reminder->Subject%> &bull;
+ <%$Reminder->OwnerObj->Name%>
+ <%$Reminder->DueObj->Unix>0 ? "&bull; ". $Reminder->DueObj->AgeAsString : '' |n%><br />
+</%method>
diff --git a/rt/share/html/Ticket/Elements/ShowAttachments b/rt/share/html/Ticket/Elements/ShowAttachments
new file mode 100755
index 0000000..72298d7
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowAttachments
@@ -0,0 +1,104 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if (keys %documents) {
+<&| /Widgets/TitleBox, title => loc('Attachments'),
+ title_class=> 'inverse',
+ class => 'ticket-info-attachments',
+ color => "#336699" &>
+
+% foreach my $key (keys %documents) {
+
+<%$key%><br />
+<ul>
+% foreach my $rev (@{$documents{$key}}) {
+
+<%PERL>
+my $size = $rev->ContentLength;
+
+if ($size) {
+ if ($size > 1024) {
+ $size = int($size/102.4)/10 . "k";
+ }
+ else {
+ $size = $size ."b";
+ }
+
+</%PERL>
+
+<li><font size="-2">
+<a href="<%RT->Config->Get('WebPath')%>/Ticket/Attachment/<%$rev->TransactionId%>/<%$rev->Id%>/<%$rev->Filename | u%>">
+<&|/l, $rev->CreatedAsString, $size, $rev->CreatorObj->Name &>[_1] ([_2]) by [_3]</&>
+</a>
+</font></li>
+% }
+% }
+</ul>
+
+% }
+</&>
+
+% }
+
+<%INIT>
+
+# If we haven't been passed in an Attachments object (through the precaching mechanism)
+# then we need to find one
+$Attachments ||= $m->comp('FindAttachments', Ticket => $Ticket);
+
+my %documents;
+while ( my $attach = $Attachments->Next() ) {
+ next unless ($attach->Filename());
+ unshift( @{ $documents{ $attach->Filename } }, $attach );
+}
+
+</%INIT>
+<%ARGS>
+$Ticket => undef
+$Attachments => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Elements/ShowBasics b/rt/share/html/Ticket/Elements/ShowBasics
new file mode 100755
index 0000000..5dcbced
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowBasics
@@ -0,0 +1,87 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+ <tr>
+ <td class="label id"><&|/l&>Id</&>:</td>
+ <td class="value id"><%$Ticket->Id %></td>
+ </tr>
+ <tr>
+ <td class="label status"><&|/l&>Status</&>:</td>
+ <td class="value status"><% loc($Ticket->Status) %></td>
+ </tr>
+% if ($Ticket->TimeEstimated) {
+ <tr>
+ <td class="label time estimated"><&|/l&>Estimated</&>:</td>
+ <td class="value time estimated"><& ShowTime, minutes => $Ticket->TimeEstimated &></td>
+ </tr>
+% }
+% if ($Ticket->TimeWorked) {
+ <tr>
+ <td class="label time worked"><&|/l&>Worked</&>:</td>
+ <td class="value time worked"><& ShowTime, minutes => $Ticket->TimeWorked &></td>
+ </tr>
+% }
+% if ($Ticket->TimeLeft) {
+ <tr>
+ <td class="label time left"><&|/l&>Left</&>:</td>
+ <td class="value time left"><& ShowTime, minutes => $Ticket->TimeLeft &></td>
+ </tr>
+% }
+ <tr>
+ <td class="label priority"><&|/l&>Priority</&>:</td>
+ <td class="value priority"><& ShowPriority, Ticket => $Ticket &></td>
+ </tr>
+ <tr>
+ <td class="label queue"><&|/l&>Queue</&>:</td>
+ <td class="value queue"><& ShowQueue, QueueObj => $Ticket->QueueObj &></td>
+ </tr>
+% $m->callback( %ARGS, CallbackName => 'EndOfList', TicketObj => $Ticket );
+</table>
+<%ARGS>
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowCustomFields b/rt/share/html/Ticket/Elements/ShowCustomFields
new file mode 100755
index 0000000..a836685
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowCustomFields
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ShowCustomFields, Object => $Ticket &>
+<%ARGS>
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowDates b/rt/share/html/Ticket/Elements/ShowDates
new file mode 100755
index 0000000..d309907
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowDates
@@ -0,0 +1,91 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+ <tr>
+ <td class="label date created"><&|/l&>Created</&>:</td>
+ <td class="value date created"><% $Ticket->CreatedObj->AsString %></td>
+ </tr>
+ <tr>
+ <td class="label date starts"><&|/l&>Starts</&>:</td>
+ <td class="value date starts"><% $Ticket->StartsObj->AsString %></td>
+ </tr>
+ <tr>
+ <td class="label date started"><&|/l&>Started</&>:</td>
+ <td class="value date started"><% $Ticket->StartedObj->AsString %></td>
+ </tr>
+ <tr>
+ <td class="label date told"><a href="<% RT->Config->Get('WebPath') %>/Ticket/Display.html?id=<% $Ticket->id %>&Action=SetTold"><&|/l&>Last Contact</&></a>:</td>
+ <td class="value date told"><% $Ticket->ToldObj->AsString %></td>
+ </tr>
+ <tr>
+ <td class="label date due"><&|/l&>Due</&>:</td>
+% my $due = $Ticket->DueObj;
+% if ( $due && $due->Unix > 0 && $due->Diff < 0 ) {
+ <td class="value date due"><span class="overdue"><% $due->AsString %></span></td>
+% } else {
+ <td class="value date due"><% $due->AsString %></td>
+% }
+ </tr>
+ <tr>
+ <td class="label date resolved"><&|/l&>Closed</&>:</td>
+ <td class="value date resolved"><% $Ticket->ResolvedObj->AsString %></td>
+ </tr>
+ <tr>
+ <td class="label date updated"><&|/l&>Updated</&>:</td>
+% my $UpdatedString = $Ticket->LastUpdated ? loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) : loc("Never");
+% if ($UpdatedLink) {
+ <td class="value date updated"><a href="#lasttrans"><% $UpdatedString | h %></a></td>
+% } else {
+ <td class="value date updated"><% $UpdatedString | h %></td>
+% }
+ </tr>
+</table>
+<%ARGS>
+$Ticket => undef
+$UpdatedLink => 1
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowDependencies b/rt/share/html/Ticket/Elements/ShowDependencies
new file mode 100755
index 0000000..528be93
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowDependencies
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&|/l&>Depends on</&>:<br />
+% while (my $Link = $Ticket->DependsOn->Next) {
+% my $member = $Link->TargetObj;
+<a href="<%RT->Config->Get('WebPath')%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%>
+[<%$member->Status%>]
+ <br />
+% }
+<&|/l&>Depended on by</&>:<br />
+% while (my $Link = $Ticket->DependedOnBy->Next) {
+% my $member = $Link->TargetObj;
+<a href="<%RT->Config->Get('WebPath')%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%>
+[<%$member->Status%>]
+ <br />
+% }
+
+<%ARGS>
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowGnuPGStatus b/rt/share/html/Ticket/Elements/ShowGnuPGStatus
new file mode 100644
index 0000000..08814aa
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowGnuPGStatus
@@ -0,0 +1,177 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table class="crypt-runs">
+<tr><td align="right" class="labeltop" rowspan="<% scalar @messages %>">GnuPG:</td>
+<td><% shift @messages %></td></tr>
+
+% foreach my $msg( @messages ) {
+<tr><td><% $msg %></td></tr>
+% }
+</table>
+<%ARGS>
+$Attachment
+$WarnUnsigned => undef
+$Reverify => 1
+</%ARGS>
+<%INIT>
+my @runs;
+my $needs_unsigned_warning = $WarnUnsigned;
+
+foreach ( $Attachment->SplitHeaders ) {
+ if ( s/^X-RT-GnuPG-Status:\s*//i ) {
+ require RT::Crypt::GnuPG;
+ push @runs, [ RT::Crypt::GnuPG::ParseStatus( $_ ) ];
+ }
+
+ $needs_unsigned_warning = 0 if /^X-RT-Incoming-Signature:/;
+
+ # if this is not set, then the email is generated by RT, and so we don't
+ # need "email is unsigned" warnings
+ $needs_unsigned_warning = 0 if not /^Received:/;
+}
+
+return unless @runs or $needs_unsigned_warning;
+
+my $reverify_cb = sub {
+ my $top = shift;
+
+ my $txn = $top->TransactionObj;
+ unless ( $txn && $txn->id ) {
+ return (0, "Couldn't get transaction of attachment #". $top->id);
+ }
+
+ my $attachments = $txn->Attachments->Clone;
+ $attachments->Limit( FIELD => 'ContentType', VALUE => 'application/x-rt-original-message' );
+ my $original = $attachments->First;
+ unless ( $original ) {
+ return (0, "Couldn't find attachment with original email of transaction #". $txn->id);
+ }
+
+ my $parser = RT::EmailParser->new();
+ $parser->SmartParseMIMEEntityFromScalar(
+ Message => $original->Content,
+ Decode => 0,
+ Exact => 1,
+ );
+ my $entity = $parser->Entity;
+ unless ( $entity ) {
+ return (0, "Couldn't parse content of attachment #". $original->id);
+ }
+
+ use RT::Interface::Email::Auth::GnuPG;
+ my ($status, @res) = RT::Interface::Email::Auth::GnuPG::VerifyDecrypt( Entity => $entity );
+ if ( $status && !@res ) {
+ # imposible in this situation
+ return (0, "Content of attachment #". $original->id ." is not signed and/or encrypted");
+ }
+ elsif ( @res ) {
+ require RT::Crypt::GnuPG;
+
+ $top->DelHeader('X-RT-GnuPG-Status');
+ $top->AddHeader(map { ('X-RT-GnuPG-Status' => $_->{'status'} ) } @res);
+ $top->SetHeader('X-RT-Privacy' => 'PGP' );
+ $top->DelHeader('X-RT-Incoming-Signature');
+
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res[0]->{'status'} );
+ for ( @status ) {
+ if ( $_->{'Operation'} eq 'Verify' && $_->{'Status'} eq 'DONE' ) {
+ $top->AddHeader( 'X-RT-Incoming-Signature' => $_->{'UserString'} );
+ $needs_unsigned_warning = 0;
+ }
+ }
+ }
+ return (1, "Reverified original message");
+};
+
+my @messages;
+foreach my $run ( @runs ) {
+ foreach my $line ( @$run ) {
+ if ( $line->{'Operation'} eq 'KeyCheck' ) {
+ next unless $Reverify;
+ # if a public key was missing during verification then we want try again
+ next unless $line->{'KeyType'} eq 'public' && $line->{'Status'} eq 'MISSING';
+
+ # but only if we have key
+ my %key = RT::Crypt::GnuPG::GetPublicKeyInfo( $line->{'Key'} );
+ if ( $key{'info'} ) {
+ my ($status, $msg) = $reverify_cb->($Attachment);
+ unless ($status) {
+ $RT::Logger->error($msg);
+ } else {
+ return $m->comp('SELF', %ARGS, Reverify => 0);
+ }
+ }
+ else {
+ push @messages, loc( "Public key '0x[_1]' is required to verify signature", $line->{'Key'} );
+ }
+ }
+ elsif ( $line->{'Operation'} eq 'PassphraseCheck' ) {
+ next if $line->{'Status'} eq 'DONE';
+ push @messages, loc( $line->{'Message'} );
+ }
+ elsif ( $line->{'Operation'} eq 'Decrypt' ) {
+ push @messages, loc( $line->{'Message'} );
+ }
+ elsif ( $line->{'Operation'} eq 'Verify' ) {
+ push @messages, loc( $line->{'Message'} );
+ }
+ else {
+ next if $line->{'Status'} eq 'DONE';
+ push @messages, loc( $line->{'Message'} );
+ }
+ }
+}
+
+push @messages, loc('Warning! This is NOT signed!')
+ if $needs_unsigned_warning;
+return unless @messages;
+
+my %seen;
+@messages = grep !$seen{$_}++, @messages;
+
+</%INIT>
diff --git a/rt/share/html/Ticket/Elements/ShowGroupMembers b/rt/share/html/Ticket/Elements/ShowGroupMembers
new file mode 100644
index 0000000..a15f850
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowGroupMembers
@@ -0,0 +1,65 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# Released under the terms of version 2 of the GNU Public License
+
+% my $Users = $Group->UserMembersObj( Recursively => $Recursively );
+% while ( my $user = $Users->Next ) {
+<& /Elements/ShowUser, User => $user, Ticket => $Ticket &>
+<& /Elements/ShowUserEmailFrequency, User => $user, Ticket => $Ticket &><br />
+% }
+% my $Groups = $Group->GroupMembersObj( Recursively => $Recursively );
+% $Groups->LimitToUserDefinedGroups;
+% while (my $group = $Groups->Next) {
+<&|/l&>Group</&>: <% $group->Name %><br />
+% }
+
+<%ARGS>
+$Group => undef
+$Recursively => 0,
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowHistory b/rt/share/html/Ticket/Elements/ShowHistory
new file mode 100755
index 0000000..d859483
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowHistory
@@ -0,0 +1,171 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%doc>
+# This is (ab)used in Admin/(Users|Groups)/History.html and should probably
+# be generalized at some point.
+</%doc>
+<%perl>
+if ($ShowDisplayModes or $ShowTitle) {
+ my $title = $ShowTitle
+ ? loc('History')
+ : '&nbsp;';
+
+ my $titleright;
+
+ if ($ShowDisplayModes) {
+ $titleright = '';
+
+ if ($ShowHeaders) {
+ $titleright .= qq{<a href="$URIFile?id=} .
+ $Ticket->id.qq{">} .
+ loc("Brief headers") .
+ qq{</a> &mdash; };
+ $titleright .= q[<span class="selected">] . loc("Full headers") . "</span>";
+ }
+ else {
+ $titleright .= q[<span class="selected">] . loc("Brief headers") . "</span> &mdash; ";
+ $titleright .= qq{<a href="$URIFile?ShowHeaders=1;id=} .
+ $Ticket->id.qq{">} .
+ loc("Full headers") .
+ qq{</a>};
+ }
+ }
+</%perl>
+<div class="history">
+<& /Widgets/TitleBoxStart, title => $title, titleright_raw => $titleright &>
+% }
+
+<div id="ticket-history">
+<%perl>
+my @attachments = @{$Attachments->ItemsArrayRef()};
+my @attachment_content = @{$AttachmentContent->ItemsArrayRef()};
+
+while ( my $Transaction = $Transactions->Next ) {
+ my $skip = 0;
+ $m->callback(
+ %ARGS,
+ Transaction => $Transaction,
+ skip => \$skip,
+ CallbackName => 'SkipTransaction',
+ );
+ next if $skip;
+
+ $i++;
+
+ my @trans_attachments = grep { $_->TransactionId == $Transaction->Id } @attachments;
+
+ my $trans_content = {};
+ grep { ($_->TransactionId == $Transaction->Id ) && ($trans_content->{$_->Id} = $_) } @attachment_content;
+
+
+ my $IsLastTransaction = 0;
+ if ( $OldestFirst ) {
+ $IsLastTransaction = $Transactions->IsLast;
+ } else {
+ $IsLastTransaction = 1 if ( $i == 1 );
+ }
+
+ #Args is first because we're clobbering the "Attachments" parameter
+ $m->comp( 'ShowTransaction',
+ %ARGS,
+
+ Ticket => $Ticket,
+ Transaction => $Transaction,
+ ShowHeaders => $ShowHeaders,
+ RowNum => $i,
+ Attachments => \@trans_attachments,
+ AttachmentContent => $trans_content,
+ LastTransaction => $IsLastTransaction
+ );
+
+# manually flush the content buffer after each txn, so the user sees
+# some update
+$m->flush_buffer();
+}
+
+</%perl>
+</div>
+% if ($ShowDisplayModes or $ShowTitle) {
+<& /Widgets/TitleBoxEnd &>
+</div>
+% }
+<%INIT>
+my $Transactions = new RT::Transactions($session{'CurrentUser'});
+if ($Tickets) {
+ while (my $t = $Tickets->Next) {
+ $Transactions->LimitToTicket($t->id);
+ }
+} else {
+ $Transactions = $Ticket->Transactions;
+}
+
+
+my $OldestFirst = RT->Config->Get( 'OldestTransactionsFirst', $session{'CurrentUser'} );
+my $SortOrder = $OldestFirst? 'ASC': 'DESC';
+$Transactions->OrderByCols( { FIELD => 'Created',
+ ORDER => $SortOrder },
+ { FIELD => 'id',
+ ORDER => $SortOrder },
+ );
+
+my $i;
+$Attachments ||= $m->comp('/Ticket/Elements/FindAttachments', Ticket => $Ticket, Tickets => $Tickets || undef);
+$AttachmentContent ||= $m->comp('/Ticket/Elements/LoadTextAttachments', Ticket => $Ticket);
+
+</%INIT>
+<%ARGS>
+$URIFile => RT->Config->Get('WebPath')."/Ticket/Display.html"
+$Ticket => undef
+$Tickets => undef
+$Attachments => undef
+$AttachmentContent => undef
+$ShowHeaders => undef
+$ShowTitle => 1
+$ShowDisplayModes => 1
+$WarnUnsigned => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowMembers b/rt/share/html/Ticket/Elements/ShowMembers
new file mode 100755
index 0000000..dc570b5
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowMembers
@@ -0,0 +1,69 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<ul>
+% while (my $link = $members->Next) {
+<li><& /Elements/ShowLink, URI => $link->BaseURI &><br />
+% if ($depth < 8) {
+<& /Ticket/Elements/ShowMembers, Ticket => $link->BaseObj, depth => ($depth+1) &>
+% }
+</li>
+% }
+</ul>
+
+<%INIT>
+
+return unless $Ticket;
+my $members = $Ticket->Members;
+return unless $members->Count;
+
+</%INIT>
+
+<%ARGS>
+$Ticket => undef
+$depth => 1
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowMessageHeaders b/rt/share/html/Ticket/Elements/ShowMessageHeaders
new file mode 100755
index 0000000..e77e8e2
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowMessageHeaders
@@ -0,0 +1,91 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ( @headers ) {
+<table>
+% foreach my $header (@headers) {
+ <tr>
+ <td align="right" class="message-header-key"><% $header->{'Tag'} %>:</td>
+ <td class="message-header-value"><% $header->{'Value'} | n %></td>
+ </tr>
+% }
+</table>
+% }
+<%INIT>
+my @headers;
+foreach my $field( RT->Config->Get('ShowBccHeader')? $Message->_SplitHeaders : $Message->SplitHeaders ) {
+ my ($tag, $value) = split /:/, $field, 2;
+ next unless $tag && $value;
+ push @headers, { Tag => $tag, Value => $value };
+}
+
+my %display_headers = map { lc($_) => 1 } @DisplayHeaders;
+
+$m->callback(
+ message => $Message,
+ headers => \@headers,
+ display_headers => \%display_headers,
+);
+
+unless ( $display_headers{'_all'} ) {
+ @headers = grep $display_headers{ lc $_->{'Tag'} }, @headers;
+}
+
+my $ticket = $Message->TransactionObj->TicketObj;
+foreach my $f (@headers) {
+ $m->comp('/Elements/MakeClicky', content => \$f->{'Value'}, ticket => $ticket, %ARGS);
+}
+
+if ( $Localize ) {
+ $_->{'Tag'} = loc($_->{'Tag'}) foreach @headers;
+}
+</%INIT>
+<%ARGS>
+$Message => undef
+$Localize => 1
+@DisplayHeaders => ('_all')
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowMessageStanza b/rt/share/html/Ticket/Elements/ShowMessageStanza
new file mode 100755
index 0000000..0d4fe61
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowMessageStanza
@@ -0,0 +1,110 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%perl>
+if ( ref $Message ) {
+ $m->out('<pre>') if $plain_text_pre && !$Depth && !$plain_text_mono;
+ $m->out( qq{<div class="message-stanza-depth-$Depth">} );
+
+ my @stack;
+ my $para = '';
+ my $i = 0;
+
+ AGAIN: foreach ( ; $i < @$Message; $i++ ) {
+ my $stanza = $Message->[$i];
+ if ( ref $stanza eq "HASH" ) {
+ $para .= ( defined $stanza->{raw} ? $stanza->{raw} : '') ."\n";
+ }
+ next unless ref $stanza eq "ARRAY";
+
+ $print_content->( \$para ); $para = '';
+
+ $Depth++;
+ push @stack, [$Message, $i+1];
+ ($Message, $i) = ($stanza, -1);
+ $m->out( qq{<div class="message-stanza-depth-$Depth">} );
+ }
+ if ( length $para ) {
+ $print_content->( \$para ); $para = '';
+ }
+
+ if ( @stack ) {
+ ($Message, $i) = @{ pop @stack };
+ $Depth--;
+ $m->out('</div>');
+ goto AGAIN;
+ }
+
+ $m->out('</div>');
+ $m->out('</pre>') if $plain_text_pre && !$Depth && !$plain_text_mono;
+} else {
+ $print_content->( \$Message );
+}
+</%perl>
+<%INIT>
+my $plain_text_pre = RT->Config->Get('PlainTextPre', $session{'CurrentUser'});
+my $plain_text_mono = RT->Config->Get('PlainTextMono', $session{'CurrentUser'});
+
+my $ticket = $Transaction ? $Transaction->TicketObj : undef;
+
+my $print_content = sub {
+ my $ref = shift;
+ return unless defined $$ref && length $$ref;
+
+ $m->callback( content => $ref, %ARGS );
+ $m->comp('/Elements/MakeClicky', content => $ref, ticket => $ticket, %ARGS);
+ unless ( $plain_text_pre || $plain_text_mono ) {
+ $$ref =~ s{(\r?\n)}{<br />}g if defined $$ref;
+ }
+ $m->out( $$ref );
+};
+</%INIT>
+<%ARGS>
+$Message => undef
+$Depth => 0
+$Transaction => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowParents b/rt/share/html/Ticket/Elements/ShowParents
new file mode 100644
index 0000000..38c427f
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowParents
@@ -0,0 +1,63 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<ul>
+% while (my $link = $member_of->Next) {
+<li><& /Elements/ShowLink, URI => $link->TargetURI &><br />
+% }
+</ul>
+<%INIT>
+
+return unless $Ticket;
+my $member_of = $Ticket->MemberOf;
+return unless $member_of->Count;
+
+</%INIT>
+
+<%ARGS>
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowPeople b/rt/share/html/Ticket/Elements/ShowPeople
new file mode 100755
index 0000000..ddd2e3c
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowPeople
@@ -0,0 +1,72 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<table>
+ <tr>
+ <td class="label"><&|/l&>Owner</&>:</td>
+% my $owner = $Ticket->OwnerObj;
+ <td class="value"><& /Elements/ShowUser, User => $owner, Ticket => $Ticket &>
+ <& /Elements/ShowUserEmailFrequency, User => $owner, Ticket => $Ticket &></td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Requestors</&>:</td>
+ <td class="value"><& ShowGroupMembers, Group => $Ticket->Requestors, Ticket => $Ticket &></td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Cc</&>:</td>
+ <td class="value"><& ShowGroupMembers, Group => $Ticket->Cc, Ticket => $Ticket &></td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>AdminCc</&>:</td>
+ <td class="value"><& ShowGroupMembers, Group => $Ticket->AdminCc, Ticket => $Ticket &></td>
+ </tr>
+</table>
+<%INIT>
+</%INIT>
+<%ARGS>
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowPriority b/rt/share/html/Ticket/Elements/ShowPriority
new file mode 100644
index 0000000..705bbae
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowPriority
@@ -0,0 +1,51 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<% $Ticket->Priority %>/<% $Ticket->FinalPriority || ''%>
+<%ARGS>
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowQueue b/rt/share/html/Ticket/Elements/ShowQueue
new file mode 100644
index 0000000..270a825
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowQueue
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<% $QueueObj->Name %>
+<%ARGS>
+$QueueObj
+</%ARGS>
+<%INIT>
+my $value = $QueueObj->Name;
+$value = '#'. $QueueObj->id
+ unless defined $value && length $value;
+</%INIT>
diff --git a/rt/share/html/Ticket/Elements/ShowRequestor b/rt/share/html/Ticket/Elements/ShowRequestor
new file mode 100755
index 0000000..5a7ffc2
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowRequestor
@@ -0,0 +1,105 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%PERL>
+# Unsure sane default
+unless ( @$conditions ) {
+ foreach (RT::Queue->ActiveStatusArray()) {
+ push @$conditions, { cond => "Status = '$_'", name => loc($_) };
+ }
+}
+my $rows = 10;
+my $has_right_adminusers = $session{'CurrentUser'}->HasRight(
+ Object => $RT::System, Right => 'AdminUsers'
+);
+$has_right_adminusers &&= $session{'CurrentUser'}->HasRight(
+ Object => $RT::System, Right => 'ShowConfigTab'
+);
+my $people = $Ticket->Requestors->UserMembersObj;
+while ( my $requestor = $people->Next ) {
+ next if $requestor->Privileged;
+ my $name = $m->scomp('/Elements/ShowUser', User => $requestor);
+
+ my $tickets = RT::Tickets->new( $session{'CurrentUser'} );
+ $tickets->FromSQL( "Requestor.id = ". $requestor->id ." AND (".join( " OR ", map $_->{cond}, @$conditions).")" );
+ $tickets->RowsPerPage( $rows );
+ $tickets->OrderBy( FIELD => 'Priority', ORDER => 'DESC' );
+</%PERL>
+
+<&| /Widgets/TitleBox,
+ title_href => $has_right_adminusers? RT->Config->Get('WebPath')."/Admin/Users/Modify.html?id=".$requestor->id: undef,
+ title_raw => loc("More about [_1]", $name),
+ class => 'ticket-info-requestor'
+&>
+
+%# Additional information about this user. Empty by default.
+% $m->callback( requestor => $requestor, %ARGS, CallbackName => 'AboutThisUser' );
+
+<span class="label"><&|/l&>Comments about this user</&>:</span><br />
+<b class="value"><% ($requestor->Comments || loc("No comment entered about this user")) %></b><br />
+
+<span class="label"><&|/l, $rows &>This user's [_1] highest priority tickets</&>:</span>
+<ul>
+%while (my $w=$tickets->Next) {
+%my $uri = RT::URI->new( $session{'CurrentUser'} );
+%$uri->FromObject($w);
+<li class="value"><& /Elements/ShowLink, URI => $uri &></li>
+%}
+</ul>
+
+<&|/l&>Groups this user belongs to</&>:<br />
+
+<& /Elements/ShowMemberships, UserObj => $requestor &>
+
+</&>
+
+% }
+<%ARGS>
+$Ticket=>undef
+$DisplayPath => "/Ticket/Display.html"
+$conditions => []
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowSummary b/rt/share/html/Ticket/Elements/ShowSummary
new file mode 100755
index 0000000..4c2d54e
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowSummary
@@ -0,0 +1,117 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+ <table width="100%" class="ticket-summary">
+ <tr>
+ <td valign="top" class="boxcontainer">
+ <&| /Widgets/TitleBox, title => loc('The Basics'),
+ title_href => RT->Config->Get('WebPath')."/Ticket/Modify.html?id=".$Ticket->Id,
+ class => 'ticket-info-basics' &>
+ <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &>
+ </&>
+
+% if ($Ticket->CustomFields->First) {
+ <&| /Widgets/TitleBox, title => loc('Custom Fields'),
+ title_href => RT->Config->Get('WebPath')."/Ticket/Modify.html?id=".$Ticket->Id,
+ class => 'ticket-info-cfs' &>
+ <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket &>
+ </&>
+% }
+ <&| /Widgets/TitleBox, title => loc('People'),
+ title_href => RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$Ticket->Id,
+ class => 'ticket-info-people' &>
+ <& /Ticket/Elements/ShowPeople, Ticket => $Ticket &>
+ </&>
+
+ <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket, Attachments => $Attachments &>
+
+ <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &>
+
+% $m->callback( %ARGS, CallbackName => 'LeftColumn' );
+ </td>
+ <td valign="top" class="boxcontainer">
+% if ( RT->Config->Get('EnableReminders') ) {
+ <&|/Widgets/TitleBox, title => loc("Reminders"),
+ title_href => RT->Config->Get('WebPath')."/Ticket/Reminders.html?id=".$Ticket->Id,
+ class => 'ticket-info-reminders' &>
+ <table>
+ <tr>
+ <td>
+ <form action="<%RT->Config->Get('WebPath')%>/Ticket/Display.html" method="post">
+ <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 0 &>
+ <div align="right"><input type="submit" class="button" value="<&|/l&>Save</&>" /></div>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </&>
+% }
+ <&| /Widgets/TitleBox, title => loc("Dates"),
+ title_href => RT->Config->Get('WebPath')."/Ticket/ModifyDates.html?id=".$Ticket->Id,
+ class => 'ticket-info-dates' &>
+ <& /Ticket/Elements/ShowDates, Ticket => $Ticket &>
+ </&>
+% my (@extra);
+% push @extra, titleright_raw => '<a href="'. RT->Config->Get('WebPath'). '/Ticket/Graphs/index.html?id='.$Ticket->id.'">'.loc('Graph').'</a>' unless RT->Config->Get('DisableGraphViz');
+ <&| /Widgets/TitleBox, title => loc('Links'),
+ title_href => RT->Config->Get('WebPath')."/Ticket/ModifyLinks.html?id=".$Ticket->Id,
+ class => 'ticket-info-links', @extra &>
+ <& /Elements/ShowLinks, Ticket => $Ticket &>
+ </&>
+% $m->callback( %ARGS, CallbackName => 'RightColumn' );
+
+ </td>
+ </tr>
+ </table>
+<%ARGS>
+$Ticket => undef
+$Attachments => undef
+</%ARGS>
+
+
+
+
diff --git a/rt/share/html/Ticket/Elements/ShowTime b/rt/share/html/Ticket/Elements/ShowTime
new file mode 100644
index 0000000..b4050fb
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowTime
@@ -0,0 +1,59 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% if ($minutes < 60) {
+<&|/l, $minutes &>[_1] min</&>
+% } else {
+<&|/l, sprintf("%.1f",$minutes / 60) &>[quant,_1,hour]</&> (<&|/l, $minutes &>[_1] min</&>)
+% }
+<%init>
+$minutes ||= 0;
+</%init>
+<%ARGS>
+$minutes
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Elements/ShowTransaction b/rt/share/html/Ticket/Elements/ShowTransaction
new file mode 100755
index 0000000..a533323
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowTransaction
@@ -0,0 +1,216 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="ticket-transaction <% $type_class %> <% $RowNum % 2 ? 'odd' : 'even' %>">
+% $m->callback( titlebar_cmd => \$titlebar_commands, Transaction => $Transaction, %ARGS, CallbackName => 'ModifyDisplay' );
+
+<div class="ticket-transaction">
+% $m->callback( titlebar_cmd => \$titlebar_commands, Transaction => $Transaction, %ARGS, CallbackName => 'ModifyCommand' );
+ <div class="metadata">
+ <span class="type">
+ <a name="txn-<% $Transaction->Id %>" href="<% $DisplayPath %>#txn-<% $Transaction->Id %>">#</a>
+ <% $LastTransaction ? '<a id="lasttrans" name="lasttrans"></a>' : ''|n %>
+ </span>
+ <span class="date"><% $transdate|n %></span>
+% my $desc = $Transaction->BriefDescription;
+% $m->callback( text => \$desc, Transaction => $Transaction, %ARGS, CallbackName => 'ModifyDisplay' );
+ <span class="description">
+ <& /Elements/ShowUser, User => $Transaction->CreatorObj &> - <% $TicketString %> <% $desc %>
+ </span>
+% $m->callback( TimeTaken => \$TimeTaken, Transaction => $Transaction, %ARGS, CallbackName => 'ModifyTimeTaken' );
+ <span class="time-taken"><% $TimeTaken %></span>
+ <span class="actions<% $titlebar_commands ? '': ' hidden'%>"><% $titlebar_commands |n %></span>
+ </div>
+
+ <div class="content">
+% if ( $Transaction->CustomFieldValues->Count ) {
+ <& /Elements/ShowCustomFields, Object => $Transaction &>
+% }
+% $m->comp('ShowTransactionAttachments', %ARGS, Parent => 0) unless ($Collapsed ||!$ShowBody);
+ </div>
+
+</div>
+</div>
+
+<%ARGS>
+$Ticket => undef
+$Transaction => undef
+$ShowHeaders => 0
+$Collapsed => undef
+$ShowTitleBarCommands => 1
+$RowNum => 1
+$DisplayPath => RT->Config->Get('WebPath')."/Ticket/Display.html?id=".$Ticket->id
+$AttachPath => RT->Config->Get('WebPath')."/Ticket/Attachment"
+$UpdatePath => RT->Config->Get('WebPath')."/Ticket/Update.html"
+$ForwardPath => RT->Config->Get('WebPath')."/Ticket/Forward.html"
+$EncryptionPath => RT->Config->Get('WebPath')."/Ticket/GnuPG.html"
+$EmailRecordPath => RT->Config->Get('WebPath')."/Ticket/ShowEmailRecord.html"
+$Attachments => undef
+$AttachmentContent => undef
+$ShowBody => 1
+$LastTransaction => 0
+$WarnUnsigned => undef
+</%ARGS>
+<%ONCE>
+
+my %class = (
+ Create => 'message',
+ Correspond => 'message',
+ Comment => 'message',
+
+ AddWatcher => 'people',
+ DelWatcher => 'people',
+ Take => 'people',
+ Untake => 'people',
+ Force => 'people',
+ Steal => 'people',
+ Give => 'people',
+
+ AddLink => 'links',
+ DeleteLink => 'links',
+);
+
+</%ONCE>
+<%INIT>
+
+my $transdate = $Transaction->CreatedAsString();
+$transdate =~ s/\s/&nbsp;/g;
+
+my ($type, $field) = ($Transaction->Type, $Transaction->Field || '');
+my $type_class = $class{ $type };
+
+unless ( $type_class ) {
+ if ( $field eq 'Owner' ) {
+ $type_class = 'people';
+ }
+ elsif ( $type =~ /^(Status|Set|Told)$/ ) {
+ if ( $field =~ /^(Told|Starts|Started|Due)$/ ) {
+ $type_class = 'dates';
+ }
+ else {
+ $type_class = 'basics';
+ }
+ }
+ else {
+ $type_class = 'other';
+ }
+}
+
+my $TicketString = '';
+if ( $Ticket->Id != $Transaction->Ticket ) {
+ $TicketString = loc("Ticket #[_1]:", $Transaction->Ticket) .' ';
+}
+
+my $TimeTaken = '';
+$TimeTaken = $Transaction->TimeTaken . " min"
+ if $Transaction->TimeTaken;
+
+unless ($Attachments) {
+ my $attachments = $Transaction->Attachments;
+ $attachments->Columns( qw( Id Filename ContentType Headers Subject Parent ContentEncoding ContentType TransactionId) );
+ $ARGS{'Attachments'} = $Attachments = $attachments->ItemsArrayRef();
+}
+my $titlebar_commands = '';
+
+if ( $type =~ /EmailRecord$/ ) {
+
+ $titlebar_commands .=
+ "[<a target=\"_blank\" href=\"$EmailRecordPath?id="
+ . $Transaction->Ticket
+ . "&Transaction="
+ . $Transaction->Id
+ . "&Attachment="
+ . ( $Attachments->[0] && $Attachments->[0]->id )
+ . '">' . loc('Show') . "</a>]&nbsp;";
+ $ShowBody = 0;
+}
+
+
+# If the transaction has anything attached to it at all
+else {
+
+ if ( $Attachments->[0] && $ShowTitleBarCommands ) {
+ my $ticket = $Transaction->TicketObj;
+ my $can_modify = $ticket->CurrentUserHasRight('ModifyTicket');
+ if ( $can_modify || $ticket->CurrentUserHasRight('ReplyToTicket') ) {
+ $titlebar_commands .=
+ "[<a href=\"".$UpdatePath
+ . "?id=" . $Transaction->Ticket
+ . "&QuoteTransaction=" . $Transaction->Id
+ . "&Action=Respond\">"
+ . loc('Reply')
+ . "</a>]&nbsp;";
+ }
+ if ( $can_modify || $ticket->CurrentUserHasRight('CommentOnTicket') ) {
+ $titlebar_commands .=
+ "[<a href=\"".$UpdatePath."?id="
+ . $Transaction->Ticket
+ . "&QuoteTransaction="
+ . $Transaction->Id
+ . "&Action=Comment\">"
+ . loc('Comment') . "</a>]";
+ }
+ if ( $ticket->CurrentUserHasRight('ForwardMessage') ) {
+ $titlebar_commands .=
+ "[<a href=\"". $ForwardPath
+ . "?id=". $Transaction->Ticket
+ . "&QuoteTransaction=". $Transaction->Id
+ . "\">". loc('Forward') . "</a>]";
+ }
+ if ( $can_modify
+ && RT->Config->Get('GnuPG')->{'Enable'}
+ && RT->Config->Get('GnuPG')->{'AllowEncryptDataInDB'}
+ && $ticket->CurrentUserHasRight('ForwardMessage')
+ ) {
+ $titlebar_commands .=
+ "[<a href=\"". $EncryptionPath
+ . "?id=". $Transaction->Id
+ . "\">". loc('Encrypt/Decrypt') . "</a>]";
+ }
+ }
+}
+</%INIT>
diff --git a/rt/share/html/Ticket/Elements/ShowTransactionAttachments b/rt/share/html/Ticket/Elements/ShowTransactionAttachments
new file mode 100644
index 0000000..9c40b28
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowTransactionAttachments
@@ -0,0 +1,252 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%PERL>
+# Find all the attachments which have parent $Parent
+# For each of these attachments
+foreach my $message ( grep $_->__Value('Parent') == $Parent, @$Attachments ) {
+
+ if (RT->Config->Get('GnuPG')->{'Enable'}) {
+ $m->comp( 'ShowGnuPGStatus', Attachment => $message, WarnUnsigned => $WarnUnsigned );
+ }
+
+ $m->comp( 'ShowMessageHeaders',
+ Message => $message,
+ DisplayHeaders => \@DisplayHeaders,
+ );
+
+ my $size = $message->ContentLength;
+ if ( $size ) {
+</%PERL>
+<div class="downloadattachment">
+<a href="<% $AttachPath %>/<% $Transaction->Id %>/<% $message->Id %>/<% ($message->Filename ||'')| u%>"><&|/l&>Download</&> <% $message->Filename || loc('(untitled)') %></a>
+% if ( $DownloadableHeaders && !$message->Filename && $message->ContentType =~ /text/ ) {
+ / <a href="<% $AttachPath %>/WithHeaders/<% $message->Id %>"><% loc('with headers') %></a>
+% }
+<br />
+<span class="downloadcontenttype"><% $message->ContentType %> <% $size_to_str->( $size ) %></span>
+</div>
+% }
+
+%# If there is sub-messages, open a dedicated div
+% if ( scalar ( grep $_->__Value('Parent') == $message->id, @$Attachments ) ) {
+<div class="messageattachments">
+% } else {
+<div class="messagebody <% RT->Config->Get('PlainTextMono', $session{'CurrentUser'}) ? ' plain-text-white-space' : ''%>">
+% }
+<%PERL>
+
+$render_attachment->( $message );
+
+$m->comp(
+ $m->current_comp,
+ %ARGS,
+ Parent => $message->id,
+ ParentObj => $message
+);
+
+</%PERL>
+</div>
+% }
+<%ARGS>
+$Ticket => undef
+$Transaction => undef
+$ShowHeaders => 0
+$Collapsed => undef
+$DownloadableHeaders => 1
+$ShowTitleBarCommands => 1
+$RowNum => 1
+$AttachPath => RT->Config->Get('WebPath')."/Ticket/Attachment"
+$UpdatePath => RT->Config->Get('WebPath')."/Ticket/Update.html"
+$EmailRecordPath => RT->Config->Get('WebPath')."/Ticket/ShowEmailRecord.html"
+$Attachments => undef
+$AttachmentContent => {}
+$ShowBody => 1
+$Parent => 0
+$ParentObj => undef
+$WarnUnsigned => 0
+</%ARGS>
+<%INIT>
+my @DisplayHeaders=qw(_all);
+if ( $Transaction->Type =~ /EmailRecord$/ ) {
+ @DisplayHeaders = qw(To Cc Bcc);
+}
+
+# If the transaction has anything attached to it at all
+elsif (!$ShowHeaders) {
+ @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject);
+ push @DisplayHeaders, 'RT-Send-Bcc' if RT->Config->Get('ShowBccHeader');
+}
+
+my $size_to_str = sub {
+ my $size = shift;
+ # show a download link
+ if ( $size > 1024*1024 ) {
+ $size = loc( "[_1]b", int( $size / 1024 / 102.4 ) / 10 );
+ }
+ elsif ( $size > 1024 ) {
+ $size = loc( "[_1]k", int( $size / 102.4 ) / 10 );
+ }
+ else {
+ $size = loc( "[_1]b", $size );
+ }
+ return $size;
+};
+
+my $render_attachment = sub {
+ my $message = shift;
+
+ # if it has a content-disposition: attachment, don't show inline
+ my $disposition = $message->GetHeader('Content-Disposition');
+ if ( $disposition && $disposition =~ /attachment/i && $disposition !~ /^\s*inline/ ) {
+ $disposition = 'attachemnt';
+ } else {
+ $disposition = 'inline';
+ }
+
+ # If it's text
+ if ( $message->ContentType =~ m{^(text|message)}i ) {
+ my $max_size = RT->Config->Get( 'MaxInlineBody', $session{'CurrentUser'} );
+ if ( $message->Filename && RT->Config->Get('SuppressInlineTextFiles', $session{'CurrentUser'} ) ) {
+ $m->out('<p>'. loc( 'Text file is not shown because it is disabled in preferences.' ) .'</p>');
+ return;
+ }
+ elsif ( $max_size && $message->ContentLength > $max_size ) {
+ $m->out('<p>'. loc( 'Message body not shown because it is too large.' ) .'</p>');
+ return;
+ }
+ elsif ( $disposition ne 'inline' ) {
+ $m->out('<p>'. loc( 'Message body is not shown because sender requested not to inline it.' ) .'</p>');
+ return;
+ }
+
+ if (
+
+ # it's a toplevel object
+ !$ParentObj
+
+ # or its parent isn't a multipart alternative
+ || ( $ParentObj->ContentType !~ m{^multipart/alternative$}i )
+
+ # or it's of our prefered alterative type
+ || (
+ (
+ RT->Config->Get('PreferRichText')
+ && ( $message->ContentType =~ m{^text/(?:html|enriched)$} )
+ )
+ || ( !RT->Config->Get('PreferRichText')
+ && ( $message->ContentType !~ m{^text/(?:html|enriched)$} )
+ )
+ )
+ )
+ {
+
+ my $content;
+ if ( $AttachmentContent->{ $message->id } ) {
+ $content = $AttachmentContent->{ $message->id }->Content;
+ }
+ else {
+ $content = $message->Content;
+ }
+
+ # if it's a text/html clean the body and show it
+ if ( $message->ContentType =~ m{^text/(?:html|enriched)$}i ) {
+ $content = $m->comp( '/Elements/ScrubHTML', Content => $content );
+ if ( $message->ContentType eq 'text/html' ) {
+ $m->comp('/Elements/MakeClicky',
+ content => \$content, html => 1,
+ ticket => $Ticket );
+ }
+ $m->out( $content );
+ }
+
+ # if it's a text/plain show the body
+ elsif ( $message->ContentType =~ m{^(text|message)}i ) {
+
+ eval { require Text::Quoted; $content = Text::Quoted::extract($content); };
+ if ($@) { $RT::Logger->warning( "Text::Quoted failed: $@" ) }
+
+ $m->comp(
+ 'ShowMessageStanza',
+ Depth => 0,
+ Message => $content,
+ Transaction => $Transaction
+ );
+ }
+ }
+ }
+
+ # if it's an image, show it as an image
+ elsif ( RT->Config->Get('ShowTransactionImages') and $message->ContentType =~ /^image\//i ) {
+ if ( $disposition ne 'inline' ) {
+ $m->out('<p>'. loc( 'Message body is not shown because sender requested not to inline it.' ) .'</p>');
+ return;
+ }
+
+ my $filename = $message->Filename || loc('(untitled)');
+ $m->out('<img'
+ . ' alt="'
+ . $filename
+ . '"'
+ . ' title="'
+ . $filename
+ . '"'
+ . ' src="'
+ . $AttachPath . '/'
+ . $Transaction->Id . '/'
+ . $message->Id
+ . '/" />' );
+ }
+ elsif ( $message->ContentLength > 0 ) {
+ $m->out( '<p>' .
+ loc( 'Message body not shown because it is not plain text.' ) .
+ '</p>'
+ );
+ }
+};
+
+</%INIT>
diff --git a/rt/share/html/Ticket/Elements/ShowUpdateStatus b/rt/share/html/Ticket/Elements/ShowUpdateStatus
new file mode 100644
index 0000000..4eb53b4
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowUpdateStatus
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="unread-messages">
+<&| /Widgets/TitleBox, title => loc('New messages'), title_href => "#txn-". $txn->id &>
+<&|/l, &>There are unread messages on this ticket.</&>
+<&|/l,
+ RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id. "#txn-".$txn->id,
+ RT->Config->Get('WebPath') ."/Ticket/Display.html?id=". $Ticket->id ."&MarkAsSeen=1". "#txn-".$txn->id
+
+ &>You can <a href="[_1]">jump to the first unread message</a> or <a href="[_2]">jump to the first unread message and mark all messages as seen</a>.</&>
+</&>
+</div>
+<%ARGS>
+$Ticket
+</%ARGS>
+<%INIT>
+return unless (RT->Config->Get( 'ShowUnreadMessageNotifications', $session{'CurrentUser'}));
+my $txn = $Ticket->SeenUpTo or return;
+</%INIT>
diff --git a/rt/share/html/Ticket/Elements/ShowUserEntry b/rt/share/html/Ticket/Elements/ShowUserEntry
new file mode 100644
index 0000000..5e4a463
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowUserEntry
@@ -0,0 +1,56 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ShowUser, %ARGS &>
+% if ($Ticket and grep { $_->Content eq $User->EmailAddress } $Ticket->SquelchMailTo) {
+<b><&|/l&>(Will not be sent email)</&></b>
+% }
+
+<%ARGS>
+$User => undef
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/Tabs b/rt/share/html/Ticket/Elements/Tabs
new file mode 100755
index 0000000..7deb8c1
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/Tabs
@@ -0,0 +1,341 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% $m->callback( Ticket => $Ticket, actions=> $actions, tabs => $tabs, %ARGS );
+<& /Elements/Tabs,
+ tabs => $tabs,
+ actions => $actions,
+ current_tab => $current_tab,
+ current_toptab => $current_toptab,
+ Title => $Title &>
+<%INIT>
+my $tabs = {};
+my $current_toptab = "Search/Build.html", my $searchtabs = {};
+my $actions;
+
+if ($Ticket) {
+
+ my $id = $Ticket->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{'i'}++;
+ $session{'tickets'}->PrepForSerialization();
+ }
+
+ # Don't display prev links if we're on the first ticket
+ if ( $item_map->{ $Ticket->Id }->{prev} ) {
+ $searchtabs->{'_a'} = {
+ class => "nav",
+ path => "Ticket/Display.html?id=" . $item_map->{first},
+ title => '<< ' . loc('First')
+ };
+ $searchtabs->{"_b"} = {
+ class => "nav",
+ path => "Ticket/Display.html?id="
+ . $item_map->{ $Ticket->Id }->{prev},
+ title => '< ' . loc('Prev')
+ };
+ }
+
+ # Don't display next links if we're on the last ticket
+ if ( $item_map->{ $Ticket->Id }->{next} ) {
+ $searchtabs->{'d'} = {
+ class => "nav",
+ path => "Ticket/Display.html?id="
+ . $item_map->{ $Ticket->Id }->{next},
+ title => loc('Next') . ' >'
+ };
+ $searchtabs->{'e'} = {
+ class => "nav",
+ path => "Ticket/Display.html?id=" . $item_map->{last},
+ title => loc('Last') . ' >>'
+ };
+ }
+ }
+
+ $tabs->{"this"} = {
+ class => "currentnav",
+ path => "Ticket/Display.html?id=" . $Ticket->id,
+ title => "#" . $id,
+ current_subtab => $current_subtab
+ };
+
+ my $ticket_page_tabs = {
+ _A => {
+ title => loc('Display'),
+ path => "Ticket/Display.html?id=" . $id,
+ },
+
+ _Ab => {
+ title => loc('History'),
+ path => "Ticket/History.html?id=" . $id,
+ },
+ _B => {
+ title => loc('Basics'),
+ path => "Ticket/Modify.html?id=" . $id,
+ },
+
+ _C => {
+ title => loc('Dates'),
+ path => "Ticket/ModifyDates.html?id=" . $id,
+ },
+ _D => {
+ title => loc('People'),
+ path => "Ticket/ModifyPeople.html?id=" . $id,
+ },
+ _E => {
+ title => loc('Links'),
+ path => "Ticket/ModifyLinks.html?id=" . $id,
+ },
+ _X => {
+ title => loc('Jumbo'),
+ path => "Ticket/ModifyAll.html?id=" . $id,
+ },
+
+ };
+
+ if ( RT->Config->Get('EnableReminders') ) {
+ $ticket_page_tabs->{_F} = {
+ title => loc('Reminders'),
+ path => "Ticket/Reminders.html?id=" . $id,
+ separator => 1,
+ };
+ }
+
+ foreach my $tab ( sort keys %{$ticket_page_tabs} ) {
+ if ( $ticket_page_tabs->{$tab}->{'path'} eq $current_tab ) {
+ $ticket_page_tabs->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{'this'}->{"current_subtab"}
+ = $ticket_page_tabs->{$tab}->{"path"};
+ }
+ }
+ $tabs->{'this'}->{"subtabs"} = $ticket_page_tabs;
+ $current_tab = "Ticket/Display.html?id=" . $id;
+
+ my %can = ( ModifyTicket => $Ticket->CurrentUserHasRight('ModifyTicket'), );
+
+ if ( $can{'ModifyTicket'} or $Ticket->CurrentUserHasRight('ReplyToTicket') )
+ {
+ $actions->{'F'} = {
+ title => loc('Reply'),
+ path => "Ticket/Update.html?Action=Respond&id=" . $id,
+ };
+ }
+
+ if ( $Ticket->CurrentUserHasRight('ForwardMessage') )
+ {
+ $actions->{'FA'} = {
+ title => loc('Forward'),
+ path => "Ticket/Forward.html?id=" . $id,
+ };
+ }
+
+ if ( $can{'ModifyTicket'} ) {
+ if ( $Ticket->Status ne 'resolved' ) {
+ $actions->{'G'} = {
+ path =>
+ "Ticket/Update.html?Action=Comment&DefaultStatus=resolved&id="
+ . $id,
+ title => loc('Resolve')
+ };
+ }
+ if ( $Ticket->Status ne 'open' ) {
+ $actions->{'A'} = {
+ path => "Ticket/Display.html?Status=open&id=" . $id,
+ title => loc('Open it')
+ };
+ }
+ }
+
+ if ( $Ticket->CurrentUserHasRight('OwnTicket') ) {
+ if ( $Ticket->OwnerObj->Id == $RT::Nobody->id ) {
+ $actions->{'B'} = {
+ path => "Ticket/Display.html?Action=Take&id=" . $id,
+ title => loc('Take'),
+ }
+ if $can{'ModifyTicket'}
+ or $Ticket->CurrentUserHasRight('TakeTicket');
+ } elsif ( $Ticket->OwnerObj->id != $session{CurrentUser}->id ) {
+ $actions->{'C'} = {
+ path => "Ticket/Display.html?Action=Steal&id=" . $id,
+ title => loc('Steal'),
+ }
+ if $can{'ModifyTicket'}
+ or $Ticket->CurrentUserHasRight('StealTicket');
+ }
+ }
+
+ if ( $can{'ModifyTicket'}
+ or $Ticket->CurrentUserHasRight('CommentOnTicket') )
+ {
+ $actions->{'E'} = {
+ title => loc('Comment'),
+ path => "Ticket/Update.html?Action=Comment&id=" . $id,
+ };
+ }
+
+ $actions->{'_ZZ'}
+ = { html => $m->scomp( '/Ticket/Elements/Bookmark', id => $Ticket->id ),
+ };
+
+}
+
+if ( ( defined $actions->{A} || defined $actions->{B} || defined $actions->{C} )
+ && ( defined $actions->{E}
+ || defined $actions->{F}
+ || defined $actions->{G} ) )
+{
+
+ if ( defined $actions->{C} ) { $actions->{C}->{separator} = 1 }
+ elsif ( defined $actions->{B} ) { $actions->{B}->{separator} = 1 }
+ elsif ( defined $actions->{A} ) { $actions->{A}->{separator} = 1 }
+}
+
+my $args = '';
+my $has_query = '';
+my %query_args;
+my $search_id = $ARGS{'SavedSearchId'}
+ || $session{'CurrentSearchHash'}->{'SearchId'} || '';
+my $chart_search_id = $ARGS{'SavedChartSearchId'} || '';
+
+$has_query = 1 if ( $ARGS{'Query'} or $session{'CurrentSearchHash'}->{'Query'} );
+
+%query_args = (
+ SavedSearchId => ($search_id eq 'new') ? undef : $search_id,
+ SavedChartSearchId => $chart_search_id,
+ Query => $ARGS{'Query'} || $session{'CurrentSearchHash'}->{'Query'},
+ Format => $ARGS{'Format'} || $session{'CurrentSearchHash'}->{'Format'},
+ OrderBy => $ARGS{'OrderBy'}
+ || $session{'CurrentSearchHash'}->{'OrderBy'},
+ Order => $ARGS{'Order'} || $session{'CurrentSearchHash'}->{'Order'},
+ Page => $ARGS{'Page'} || $session{'CurrentSearchHash'}->{'Page'},
+ RowsPerPage => $ARGS{'RowsPerPage'} || $session{'CurrentSearchHash'}->{'RowsPerPage'},
+ );
+
+ $args = "?" . $m->comp( '/Elements/QueryString', %query_args );
+
+$tabs->{"f"} = {
+ path => "Search/Build.html?NewQuery=1",
+ title => loc('New Search')
+};
+$tabs->{"g"} = {
+ path => "Search/Build.html" . (($has_query) ? $args : ''),
+ title => loc('Edit Search')
+};
+$tabs->{"h"} = {
+ path => "Search/Edit.html$args",
+ title => loc('Advanced'),
+ separator => 1
+};
+if ($has_query) {
+
+ if ( $current_tab =~ m{Search/Results.html} ) {
+ $current_tab = "Search/Results.html$args";
+
+ if ( $session{'CurrentUser'}
+ ->HasRight( Right => 'SuperUser', Object => $RT::System ) )
+ {
+ my $shred_args = $m->comp(
+ '/Elements/QueryString',
+ Search => 1,
+ Plugin => 'Tickets',
+ 'Tickets:query' => $query_args{'Query'},
+ 'Tickets:limit' => $query_args{'Rows'}
+ );
+
+ $tabs->{"shredder"} = {
+ path => 'Admin/Tools/Shredder/?' . $shred_args,
+ title => loc('Shredder')
+ };
+
+ }
+ }
+ if ( $current_tab =~ m{Search/(Bulk|Build|Edit)\.html} ) {
+ $current_tab = "Search/$1.html$args";
+ }
+
+ $tabs->{"i"} = {
+ path => "Search/Results.html$args",
+ title => loc('Show Results'),
+ };
+
+ $tabs->{"j"} = {
+ path => "Search/Bulk.html$args",
+ title => loc('Bulk Update'),
+ };
+
+ $tabs->{"k"} = {
+ path => "Search/Chart.html$args",
+ title => loc('Graph'),
+ };
+
+}
+
+foreach my $searchtab ( keys %{$searchtabs} ) {
+ ( $searchtab =~ /^_/ )
+ ? $tabs->{ "s" . $searchtab } = $searchtabs->{$searchtab}
+ : $tabs->{ "z_" . $searchtab } = $searchtabs->{$searchtab};
+}
+
+</%INIT>
+
+
+<%ARGS>
+$Ticket => undef
+$subtabs => undef
+$current_tab => ''
+$current_subtab => ''
+$Title => undef
+$RowsPerPage => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/UpdateCc b/rt/share/html/Ticket/Elements/UpdateCc
new file mode 100644
index 0000000..2538c82
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/UpdateCc
@@ -0,0 +1,80 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<tr><td class="label"><&|/l&>One-time Cc</&>:</td><td><& /Elements/EmailInput, Name => 'UpdateCc', Size => '60', Default => $ARGS{UpdateCc} &>
+<input type="hidden" id="UpdateIgnoreAddressCheckboxes" name="UpdateIgnoreAddressCheckboxes" value="0">
+ <br />
+
+%foreach my $addr ( keys %txn_addresses) {
+% next if ( grep {$addr eq $_} @req_addresses );
+<input
+id="UpdateCc-<%$addr%>"
+name="UpdateCc-<%$addr%>"
+ type="checkbox"
+ onClick="checkboxToInput('UpdateCc', 'UpdateCc-<%$addr%>','<%$txn_addresses{$addr}->format%>' ); $(UpdateIgnoreAddressCheckboxes).value=1"
+ <% $ARGS{'UpdateCc-'.$addr} ? 'checked="checked"' : ''%> > <& /Elements/ShowUser, Address => $txn_addresses{$addr}&>
+%}
+</td></tr>
+<tr><td class="label"><&|/l&>One-time Bcc</&>:</td><td><& /Elements/EmailInput, Name => 'UpdateBcc', Size => '60', Default => $ARGS{UpdateBcc} &><br />
+%foreach my $addr ( keys %txn_addresses) {
+% next if ( grep {$addr eq $_} @req_addresses );
+<input
+ id="UpdateBcc-<%$addr%>"
+ name="UpdateBcc-<%$addr%>"
+ type="checkbox"
+ onClick="checkboxToInput('UpdateBcc', 'UpdateBcc-<%$addr%>','<%$txn_addresses{$addr}->format%>' ); $(UpdateIgnoreAddressCheckboxes).value=1"
+ <% $ARGS{'UpdateBcc-'.$addr} ? 'checked="checked"' : ''%>>
+<& /Elements/ShowUser, Address => $txn_addresses{$addr}&>
+%}
+</td></tr>
+<%args>
+$TicketObj
+</%args>
+<%init>
+my %txn_addresses = %{$TicketObj->TransactionAddresses};
+my @req_addresses = split /,/, $TicketObj->RequestorAddresses;
+</%init>
diff --git a/rt/share/html/Ticket/Forward.html b/rt/share/html/Ticket/Forward.html
new file mode 100644
index 0000000..9830f91
--- /dev/null
+++ b/rt/share/html/Ticket/Forward.html
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $Title &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $TicketObj,
+ Title => $Title,
+&>
+
+% $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj);
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="Forward.html" name="ForwardMessage" method="post">
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
+<input type="hidden" class="hidden" name="id" value="<% $id %>" /><br />
+<input type="hidden" class="hidden" name="QuoteTransaction" value="<% $ARGS{'QuoteTransaction'} %>" />
+
+<table border="0">
+
+<tr><td align="right"><&|/l&>Subject</&>:</td>
+<td><% $TicketObj->Subject %></td></tr>
+
+<tr><td align="right"><&|/l&>To</&>:</td>
+<td><input name="To" size="60" value="<% $ARGS{'To'} %>" /></td></tr>
+
+<tr><td align="right"><&|/l&>Cc</&>:</td>
+<td><input name="Cc" size="60" value="<% $ARGS{'Cc'} %>" /></td></tr>
+
+<tr><td align="right"><&|/l&>BCc</&>:</td>
+<td><input name="Bcc" size="60" value="<% $ARGS{'Bcc'} %>" /></td></tr>
+
+</table>
+
+<& /Elements/Submit, Label => loc('Forward Message and Return'), Name => 'ForwardAndReturn' &>
+<& /Elements/Submit, Label => loc('Forward Message'), Name => 'Forward' &>
+</form>
+<%INIT>
+my $TicketObj = LoadTicket($id);
+$id = $ARGS{'id'} = $TicketObj->id;
+
+Abort( loc("Permission Denied") )
+ unless $TicketObj->CurrentUserHasRight('ForwardMessage');
+
+my $txn;
+if ( $QuoteTransaction ) {
+ $txn = RT::Transaction->new( $session{'CurrentUser'} );
+ $txn->Load( $QuoteTransaction );
+ Abort( loc("Couldn't load transaction #[_1]", $QuoteTransaction) )
+ unless $txn->id;
+}
+
+my @results;
+if ( $Forward || $ForwardAndReturn ) {
+ require RT::Interface::Email;
+ my ($status, $msg) = $txn
+ ? RT::Interface::Email::ForwardTransaction( $txn, %ARGS )
+ : RT::Interface::Email::ForwardTicket( $TicketObj, %ARGS );
+ push @results, $msg;
+
+ if ( $ForwardAndReturn ) {
+ $session{'i'}++;
+ my $key = Digest::MD5::md5_hex(rand(1024));
+ push @{ $session{"Actions"}->{$key} ||= [] }, @results;
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Ticket/Display.html?id=". $id."&results=".$key);
+ }
+}
+
+my $Title = $txn
+ ? loc('Forward transaction #[_1]', $txn->id)
+ : loc('Forward ticket #[_1]', $TicketObj->id);
+
+</%INIT>
+
+<%ARGS>
+$id => undef
+$QuoteTransaction => undef
+$ForwardAndReturn => 0,
+$Forward => $ForwardAndReturn,
+</%ARGS>
diff --git a/rt/share/html/Ticket/GnuPG.html b/rt/share/html/Ticket/GnuPG.html
new file mode 100644
index 0000000..243da6a
--- /dev/null
+++ b/rt/share/html/Ticket/GnuPG.html
@@ -0,0 +1,104 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $txn->TicketObj,
+ current_tab => 'Ticket/Encrypt.html?id='. $id,
+ Title => $title,
+&>
+
+% $m->callback( CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS );
+<& /Elements/ListActions, actions => \@results &>
+<form method="post" action="<% RT->Config->Get('WebPath') . $m->request_comp->path %>?id=<% $id %>">
+<a href="<% RT->Config->Get('WebURL') %>Ticket/Display.html?id=<% $txn->Ticket %>#txn-<% $id %>">
+<% loc('Return back to the ticket') %>
+</a>
+<& /Elements/Submit,
+ Label => ($encrypted? loc('Decrypt'): loc('Encrypt')),
+ Name => ($encrypted? 'Decrypt': 'Encrypt'),
+&>
+</form>
+<%ARGS>
+$id => undef
+$Encrypt => 0
+$Decrypt => 0
+</%ARGS>
+<%INIT>
+my $txn = RT::Transaction->new( $session{'CurrentUser'} );
+$txn->Load( $id );
+unless ( $txn->id ) {
+ Abort(loc("Couldn't load transaction #[_1]", $id));
+}
+$id = $txn->id;
+
+my @results;
+
+my $encrypted = 0;
+
+my $attachments = $txn->Attachments;
+while ( my $attachment = $attachments->Next ) {
+ next unless $attachment->ContentType =~ m{^x-application-rt/gpg-encrypted\b};
+ $encrypted = 1;
+ last;
+}
+$attachments->GotoFirstItem;
+
+if ( $Encrypt || $Decrypt ) {
+ my $done = 1;
+ while ( my $attachment = $attachments->Next ) {
+ my ($status, $msg) = $Decrypt? $attachment->Decrypt : $attachment->Encrypt;
+ push @results, $msg;
+ unless ( $status ) {
+ $done = 0; last;
+ }
+ }
+ $encrypted = !$encrypted if $done;
+}
+
+my $title = loc("Encrypt/Decrypt transaction #[_1] of ticket #[_2]", $id, $txn->Ticket);
+</%INIT>
diff --git a/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties b/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties
new file mode 100644
index 0000000..76d28ee
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties
@@ -0,0 +1,167 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => loc('Graph Properties') &>
+
+<% loc('Direction') %> <select name="Direction">
+<option value="TB" <% ($Direction||'TB') eq 'TB'? 'selected="selected"': '' |n %>><% loc('top to bottom') %></option>
+<option value="LR" <% ($Direction||'TB') eq 'LR'? 'selected="selected"': '' |n %>><% loc('left to right') %></option>
+%# XXX: not supported by GraphViz perl module
+%#<option value="BT" <% ($Direction||'TB') eq 'BT'? 'selected="selected"': '' |n %>><% loc('bottom to top') %></option>
+%#<option value="RL" <% ($Direction||'TB') eq 'RL'? 'selected="selected"': '' |n %>><% loc('right to left') %></option>
+</select><br />
+
+<% loc('Main type of links') %> <select name="LeadingLink">
+% foreach ( @link_types ) {
+<option value="<% $_ %>" <% ($LeadingLink||'Members') eq $_? 'selected="selected"': '' |n %>><% loc($_) %></option>
+% }
+</select>
+
+<% loc('maximum depth') %> <select name="MaxDepth">
+<option value="0"><% loc('Unlimit') %></option>
+% foreach ( 1..6 ) {
+<option value="<% $_ %>" <% ($MaxDepth||0) == $_? 'selected="selected"': '' %>><% $_ %></option>
+% }
+</select><br />
+
+<% loc('Show as well') %>:
+% foreach my $type ( @link_types ) {
+% my $checked = '';
+% $checked = 'checked="checked"' if grep $type eq $_, @ShowLinks;
+<input type="checkbox" name="ShowLinks" value="<% $type %>" <% $checked |n %> /><% loc($type) %>
+% }
+<br />
+
+% my @properties = RT::Graph::Tickets->TicketProperties( $session{'CurrentUser'} );
+
+<% loc('Fill boxes with color using') %>:
+<select name="FillUsing">
+<option value=""><% loc('nothing') %></option>
+<%PERL>
+my @tmp = @properties;
+while ( my ($group, $list) = (splice @tmp, 0, 2) ) {
+ # coloring by links and dates sounds stupid
+ next if $group eq 'Dates' || $group eq 'Links';
+
+ foreach my $prop ( @$list ) {
+ my $selected = '';
+ $selected = 'selected="selected"' if $prop eq ($FillUsing||'');
+</%PERL>
+<option value="<% $prop %>" <% $selected |n %>><% loc($prop) %></option>
+% } }
+</select><br />
+
+% if ( RT::Link->can('Description' ) ) {
+% my $checked = '';
+% $checked = 'checked="checked"' if $ShowLinkDescriptions;
+<% loc('Show link descriptions') %>:
+<input type="checkbox" name="ShowLinkDescriptions" value="1" <% $checked |n %> />
+<br />
+% }
+
+<%PERL>
+for my $i ( 1..($MaxDepth||6) ) {
+ my @default;
+ if ( my $tmp = $ARGS{ 'Level-'. $i .'-Properties' } ) {
+ @default = ref $tmp? @$tmp : ($tmp);
+ }
+
+ $m->comp('SELF:Properties',
+ Level => $i,
+ Available => \@properties,
+ Default => \@default,
+ );
+}
+</%PERL>
+
+<& /Elements/Submit, Label => loc('Update Graph'), Name => 'Update' &>
+
+</&>
+
+<%ARGS>
+$id => undef
+$Direction => 'TB'
+$LeadingLink => 'Members'
+@ShowLinks => ('MemberOf', 'DependsOn', 'RefersTo')
+$MaxDepth => 3
+$FillUsing => ''
+$ShowLinkDescriptions => 0
+</%ARGS>
+<%INIT>
+require RT::Graph::Tickets;
+require RT::Link;
+
+my @link_types = qw(Members MemberOf RefersTo ReferredToBy DependsOn DependedOnBy); #loc_qw
+@ShowLinks = grep $_ ne $LeadingLink, @ShowLinks;
+</%INIT>
+
+<%METHOD Properties>
+<%ARGS>
+@Available => ()
+@Default => ()
+$Level => 1,
+</%ARGS>
+<%INIT>
+my $id = "graph-properties-box-$Level";
+my $class = '';
+$class = 'class="hidden"' if $Level != 1 && !@Default;
+</%INIT>
+<% loc('Show Tickets Properties on [_1] level', $Level) %>
+(<small><a href="#" onclick="hideshow('<% $id %>'); return false;"><% loc('open/close') %></a></small>):
+<table id="<% $id %>" <% $class |n %>>
+% while ( my ($group, $list) = (splice @Available, 0, 2) ) {
+<tr><td><% loc($group) %>:</td><td>
+% foreach my $prop ( @$list ) {
+% my $checked = '';
+% $checked = 'checked="checked"' if grep $_ eq $prop, @Default;
+<input type="checkbox" class="checkbox" name="Level-<% $Level %>-Properties" value="<% $prop %>" <% $checked |n %> /><% loc($prop) %>
+% }
+</td></tr>
+% }
+</table>
+<br />
+</%METHOD>
diff --git a/rt/share/html/Ticket/Graphs/Elements/ShowGraph b/rt/share/html/Ticket/Graphs/Elements/ShowGraph
new file mode 100644
index 0000000..d989ecc
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/Elements/ShowGraph
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div><img src="<% RT->Config->Get('WebPath') %>/Ticket/Graphs/<% $id %>?<% $m->comp('/Elements/QueryString', %ARGS) %>" usemap="#<% $graph->{'NAME'} || 'test' %>" style="border: none" />
+<% safe_run_child { Encode::decode_utf8( $graph->as_cmapx ) } |n %>
+</div>
+<& ShowLegends, %ARGS, Ticket => $ticket &>
+<%ARGS>
+$id => undef
+</%ARGS>
+<%INIT>
+use RT::Util 'safe_run_child';
+
+my $ticket = RT::Ticket->new( $session{'CurrentUser'} );
+$ticket->Load( $id );
+unless ( $ticket->id ) {
+ $RT::Logger->error("Couldn't load ticket $id");
+ return;
+}
+$ARGS{'id'} = $id = $ticket->id;
+
+require RT::Graph::Tickets;
+my $graph = RT::Graph::Tickets->TicketLinks(
+ %ARGS,
+ Ticket => $ticket,
+);
+</%INIT>
diff --git a/rt/share/html/Ticket/Graphs/Elements/ShowLegends b/rt/share/html/Ticket/Graphs/Elements/ShowLegends
new file mode 100644
index 0000000..9a4fa14
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/Elements/ShowLegends
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => loc('Legends'), hideable => $hideable &>
+<table>
+
+<tr style="height: 2.8em;"><td><% loc('Status') %>:</td><td>
+% foreach my $status ( sort keys %RT::Graph::Tickets::ticket_status_style ) {
+% my $style = $RT::Graph::Tickets::ticket_status_style{ $status };
+<span style="color: <% $style->{'fontcolor'} %>; padding: 0.6em; border: 1px solid black;"><% loc($status) %></span>
+% }
+</td></tr>
+
+% if ( $FillUsing ) {
+<tr style="height: 2.8em;"><td><% loc($FillUsing) %>:</td><td>
+% foreach my $value ( sort keys %RT::Graph::Tickets::fill_cache ) {
+% my $color = $RT::Graph::Tickets::fill_cache{ $value };
+<span style="background-color: <% $color %>; padding: 0.6em; border: 1px solid black;"><% loc($value) %></span>
+% }
+</td></tr>
+% }
+
+</table>
+</&>
+
+<%ARGS>
+$FillUsing => ''
+$hideable => 1
+</%ARGS>
diff --git a/rt/share/html/Ticket/Graphs/dhandler b/rt/share/html/Ticket/Graphs/dhandler
new file mode 100644
index 0000000..033a534
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/dhandler
@@ -0,0 +1,80 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+my $arg = $m->dhandler_arg;
+
+my $id;
+if ( $arg =~ m{^(\d+)$}i ) {
+ ($id) = ($1);
+} else {
+ return $m->abort( 404 );
+}
+
+my $ticket = RT::Ticket->new($session{'CurrentUser'} );
+$ticket->Load( $id );
+unless ( $ticket->id ) {
+ $RT::Logger->error("Couldn't load ticket #$id");
+ return $m->abort( 404 );
+}
+
+require RT::Graph::Tickets;
+my $graph = RT::Graph::Tickets->TicketLinks(
+ %ARGS,
+ Ticket => $ticket,
+);
+
+$r->content_type( 'image/png' );
+$m->clear_buffer;
+
+my $png;
+safe_run_child { $graph->as_png(\$png) };
+$m->out( $png );
+
+$m->abort;
+
+</%INIT>
diff --git a/rt/share/html/Ticket/Graphs/index.html b/rt/share/html/Ticket/Graphs/index.html
new file mode 100644
index 0000000..e23737c
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/index.html
@@ -0,0 +1,114 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $ticket,
+ Title => $title,
+ current_tab => "Ticket/ModifyLinks.html?id=$id",
+&>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<& Elements/ShowGraph, %ARGS, Ticket => $ticket &>
+
+<form action="<% RT->Config->Get('WebPath') . $m->request_comp->path %>">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+
+<& Elements/EditGraphProperties, %ARGS, Ticket => $ticket &>
+
+<input type="hidden" class="hidden" name="SavedSearchId" value="<% $saved_search->{Id} %>" />
+<& /Search/Elements/EditSearches,
+ %$saved_search,
+ Title => loc('Manage saved graphs'),
+ Type => 'Graph',
+ SearchFields => \@save_arguments,
+ CurrentSearch => { map { $_ => $ARGS{$_} } @save_arguments },
+ AllowCopy => 0,
+&>
+</form>
+
+<%ARGS>
+</%ARGS>
+<%INIT>
+use RT::Graph::Tickets;
+my @results;
+
+my @save_arguments = qw(id Direction LeadingLink ShowLinks MaxDepth FillUsing ShowLinkDescriptions);
+foreach my $level ( 0 .. 6 ) {
+ push @save_arguments, "Level-". $level ."-Properties";
+}
+my $saved_search = { Type => 'Graph' };
+push @results, $m->comp( '/Search/Elements/EditSearches:Init',
+ %ARGS,
+ Query => \%ARGS,
+ SavedSearch => $saved_search,
+ SearchFields => \@save_arguments,
+);
+
+my $id = $ARGS{'id'};
+my $ticket = LoadTicket( $id );
+$ARGS{'id'} = $id = $ticket->id;
+
+$ARGS{'LeadingLink'} ||= 'Members';
+if ( $ARGS{'ShowLinks'} && !ref $ARGS{'ShowLinks'} ) {
+ $ARGS{'ShowLinks'} = [$ARGS{'ShowLinks'}];
+} elsif ( !$ARGS{'ShowLinks'} ) {
+ $ARGS{'ShowLinks'} = [ qw(MemberOf DependsOn RefersTo) ];
+}
+$ARGS{'ShowLinks'} = [ grep $_ ne $ARGS{'LeadingLink'}, @{ $ARGS{'ShowLinks'} } ];
+$ARGS{'MaxDepth'} = 3 unless defined $ARGS{'MaxDepth'} && length $ARGS{'MaxDepth'};
+
+push @results, $m->comp( '/Search/Elements/EditSearches:Save',
+ %ARGS,
+ Query => \%ARGS,
+ SavedSearch => $saved_search,
+ SearchFields => \@save_arguments,
+);
+
+my $title = loc( "Ticket #[_1] relationships graph", $id );
+</%INIT>
diff --git a/rt/share/html/Ticket/History.html b/rt/share/html/Ticket/History.html
new file mode 100755
index 0000000..3e9d143
--- /dev/null
+++ b/rt/share/html/Ticket/History.html
@@ -0,0 +1,91 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Ticket History # [_1] [_2]", $Ticket->Id, $Ticket->Subject) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $Ticket, current_tab => 'Ticket/History.html?id='.$Ticket->id,
+ Title => loc("Ticket History # [_1] [_2]", $Ticket->Id, $Ticket->Subject) &>
+
+% $m->callback( %ARGS, Ticket => $Ticket, CallbackName => 'BeforeActionList' );
+
+
+<br />
+
+<& /Ticket/Elements/ShowHistory ,
+ Ticket => $Ticket,
+ ShowHeaders => $ARGS{'ShowHeaders'},
+ URIFile => 'History.html',
+ Attachments => $attachments,
+ AttachmentContent => $attachment_content
+ &>
+
+% $m->callback( %ARGS, CallbackName => 'AfterShowHistory', Ticket => $Ticket, current_tab => 'Ticket/History.html?id=' . $Ticket->id );
+
+<%ARGS>
+$id => undef
+</%ARGS>
+
+<%INIT>
+
+
+
+my $Ticket = LoadTicket ($id);
+
+unless ($Ticket->CurrentUserHasRight('ShowTicket')) {
+ Abort("No permission to view ticket");
+}
+
+my $attachments = $m->comp('Elements/FindAttachments', Ticket => $Ticket);
+my $attachment_content = $m->comp('Elements/LoadTextAttachments', Ticket =>
+$Ticket);
+
+
+</%INIT>
+
+
+
+
diff --git a/rt/share/html/Ticket/Modify.html b/rt/share/html/Ticket/Modify.html
new file mode 100755
index 0000000..e7d370f
--- /dev/null
+++ b/rt/share/html/Ticket/Modify.html
@@ -0,0 +1,95 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc('Modify ticket #[_1]', $TicketObj->Id) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $TicketObj, current_subtab => "Ticket/Modify.html?id=".$TicketObj->Id,
+ Title => loc('Modify ticket #[_1]', $TicketObj->Id) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj);
+
+<& /Elements/ListActions, actions => \@results &>
+<form method="post" action="Modify.html" enctype="multipart/form-data">
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
+<input type="hidden" class="hidden" name="id" value="<% $TicketObj->Id %>" />
+
+<&| /Widgets/TitleBox, title => loc('Modify ticket #[_1]',$TicketObj->Id), class=>'ticket-info-basics' &>
+<& Elements/EditBasics, TicketObj => $TicketObj &>
+<& Elements/EditCustomFields, TicketObj => $TicketObj, DefaultsFromTopArguments => 0 &>
+</&>
+
+<& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#993333" &>
+</form>
+<%INIT>
+
+my $TicketObj = LoadTicket($id);
+my $CustomFields = $TicketObj->CustomFields;
+
+# call this to show up hints of valid cf values.
+$m->comp(
+ '/Elements/ValidateCustomFields',
+ CustomFields => $CustomFields,
+ ARGSRef => {},
+);
+
+# Now let callbacks have a chance at editing %ARGS
+$m->callback( TicketObj => $TicketObj, CustomFields => $CustomFields, ARGSRef => \%ARGS );
+
+my @results = ProcessTicketBasics(TicketObj => $TicketObj, ARGSRef => \%ARGS);
+push @results, ProcessObjectCustomFieldUpdates(Object => $TicketObj, ARGSRef => \%ARGS);
+
+$TicketObj->ApplyTransactionBatch;
+
+# TODO: display the results, even if we can't display the ticket
+unless ($TicketObj->CurrentUserHasRight('ShowTicket')) {
+ Abort("No permission to view ticket");
+}
+
+</%INIT>
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/ModifyAll.html b/rt/share/html/Ticket/ModifyAll.html
new file mode 100755
index 0000000..7628700
--- /dev/null
+++ b/rt/share/html/Ticket/ModifyAll.html
@@ -0,0 +1,255 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Ticket #[_1] Jumbo update: [_2]", $Ticket->Id, $Ticket->Subject) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $Ticket,
+ current_tab => "Ticket/ModifyAll.html?id=".$Ticket->Id,
+ Title => loc("Ticket #[_1] Jumbo update: [_2]", $Ticket->Id, $Ticket->Subject) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket);
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="ModifyAll.html" enctype="multipart/form-data">
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
+<input type="hidden" class="hidden" name="id" value="<%$Ticket->Id%>" />
+
+<&| /Widgets/TitleBox, title => loc('Modify ticket # [_1]', $Ticket->Id), class=>'ticket-info-basics' &>
+<& Elements/EditBasics, TicketObj => $Ticket &>
+<& Elements/EditCustomFields, TicketObj => $Ticket &>
+</&>
+
+<br />
+
+<&| /Widgets/TitleBox, title => loc('Dates'), class=>'ticket-info-dates'&>
+<& Elements/EditDates, TicketObj => $Ticket &>
+</&>
+
+<br />
+
+
+<&| /Widgets/TitleBox, title => loc('People'), class=>'ticket-info-people' &>
+<& Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField &>
+</&>
+
+<br />
+
+<&| /Widgets/TitleBox, title => loc('Links'), class=>'ticket-info-links' &>
+<& /Elements/EditLinks, Object => $Ticket, Merge => 1 &>
+</&>
+
+<br />
+
+<&| /Widgets/TitleBox, title => loc('Update ticket') &>
+<table>
+ <tr>
+ <td class="label"><&|/l&>Update Type</&>:</td>
+ <td class="entry">
+ <select name="UpdateType">
+% if ($CanComment) {
+ <option value="private" ><&|/l&>Comments (Not sent to requestors)</&></option>
+% }
+% if ($CanRespond) {
+ <option value="response"><&|/l&>Reply to requestors</&></option>
+% }
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Subject</&>:</td>
+ <td class="entry"><input name="UpdateSubject" size="60" value="<%$Ticket->Subject%>" /></td>
+ </tr>
+% if (my $TxnCFs = $Ticket->TransactionCustomFields) {
+% while (my $CF = $TxnCFs->Next()) {
+<tr>
+<td class="label"><% loc($CF->Name) %>:</td>
+<td class="entry"><& /Elements/EditCustomField,
+ CustomField => $CF,
+ NamePrefix => "Object-RT::Transaction--CustomField-"
+ &><em><% $CF->FriendlyType %></em>
+</td></tr>
+% } # end if while
+% } # end of if
+% if (exists $session{'Attachments'}) {
+<tr><td><&|/l&>Attached file</&>:</td>
+<td>
+<&|/l&>Check box to delete</&><br />
+% foreach my $attach_name (keys %{$session{'Attachments'}}) {
+<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
+% } # end of foreach
+</td>
+</tr>
+% } # end of if
+
+ <tr>
+ <td class="label"><&|/l&>Attach</&>:</td>
+ <td class="entry"><input name="Attach" type="file" />
+ <input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" />
+ <input type="hidden" class="hidden" name="UpdateAttach" value="1" /></td>
+ </tr>
+ <tr>
+ <td class="labeltop"><&|/l&>Content</&>:</td>
+ <td class="entry"><& /Elements/MessageBox, Name=>"UpdateContent", QuoteTransaction=>$ARGS{QuoteTransaction} &></td>
+ </tr>
+</table>
+</&>
+
+
+<& /Elements/Submit,
+ Name => 'SubmitTicket',
+ Label => loc('Save Changes'),
+ Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &>
+</form>
+
+<%INIT>
+
+
+
+my $Ticket = LoadTicket($id);
+my $CustomFields = $Ticket->CustomFields;
+
+# call this to show up hints of valid cf values.
+$m->comp(
+ '/Elements/ValidateCustomFields',
+ CustomFields => $CustomFields,
+ ARGSRef => {},
+);
+
+my $CanRespond = 0;
+my $CanComment = 0;
+
+
+$CanRespond = 1 if ( $Ticket->CurrentUserHasRight('ReplyToTicket') or
+ $Ticket->CurrentUserHasRight('ModifyTicket') );
+
+$CanComment = 1 if ( $Ticket->CurrentUserHasRight('CommentOnTicket') or
+ $Ticket->CurrentUserHasRight('ModifyTicket') );
+
+# {{{ deal with deleting uploaded attachments
+foreach my $key (keys %ARGS) {
+ if ($key =~ m/^DeleteAttach-(.+)$/) {
+ delete $session{'Attachments'}{$1};
+ }
+ $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
+}
+# }}}
+
+# {{{ store the uploaded attachment in session
+if ($ARGS{'Attach'}) { # attachment?
+ my $attachment = MakeMIMEEntity(
+ AttachmentFieldName => 'Attach'
+ );
+
+ my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
+ $session{'Attachments'} = {
+ %{$session{'Attachments'} || {}},
+ $file_path => $attachment,
+ };
+}
+# }}}
+
+# delete temporary storage entry to make WebUI clean
+unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
+ delete $session{'Attachments'};
+}
+# }}}
+
+
+$m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS );
+my @results;
+
+unless ($OnlySearchForPeople or $OnlySearchForGroup or $ARGS{'AddMoreAttach'} ) {
+ # There might be two owners.
+ if ( ref ($ARGS{'Owner'} )) {
+ my @owners =@{$ARGS{'Owner'}};
+ delete $ARGS{'Owner'};
+ foreach my $owner(@owners){
+ $ARGS{'Owner'} = $owner unless ($Ticket->OwnerObj->id == $owner);
+ }
+
+ }
+
+ push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS);
+ push @results, ProcessObjectCustomFieldUpdates( Object => $Ticket, ARGSRef => \%ARGS);
+ push @results, ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS);
+
+ # Add session attachments if any to be processed by ProcessUpdateMessage
+ $ARGS{'UpdateAttachments'} = $session{'Attachments'} if ( $session{'Attachments'} );
+ push @results, ProcessUpdateMessage( TicketObj => $Ticket, ARGSRef=>\%ARGS );
+ # Cleanup WebUI
+ delete $session{'Attachments'};
+
+ push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS );
+ push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS);
+}
+
+$Ticket->ApplyTransactionBatch;
+
+# If they've gone and moved the ticket to somewhere they can't see, etc...
+# TODO: display the results, even if we can't display the ticket.
+
+unless ($Ticket->CurrentUserHasRight('ShowTicket')) {
+ Abort("No permission to view ticket");
+}
+
+
+</%INIT>
+
+
+
+<%ARGS>
+$OnlySearchForPeople => undef
+$OnlySearchForGroup => undef
+$UserField => undef
+$UserOp => undef
+$UserString => undef
+$GroupString => undef
+$GroupOp => undef
+$GroupField => undef
+$id => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/ModifyDates.html b/rt/share/html/Ticket/ModifyDates.html
new file mode 100755
index 0000000..69bfde8
--- /dev/null
+++ b/rt/share/html/Ticket/ModifyDates.html
@@ -0,0 +1,79 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc('Modify dates for #[_1]', $TicketObj->Id) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $TicketObj,
+ current_tab => "Ticket/ModifyDates.html?id=".$TicketObj->Id,
+ Title => loc('Modify dates for #[_1]', $TicketObj->Id) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj);
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="ModifyDates.html">
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
+<input type="hidden" class="hidden" name="id" value="<%$TicketObj->Id%>" />
+<&| /Widgets/TitleBox,title => loc('Modify dates for ticket # [_1]', $TicketObj->Id), class=> 'ticket-info-dates' &>
+<& Elements/EditDates, TicketObj => $TicketObj &>
+</&>
+<& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes') &>
+</form>
+
+
+<%INIT>
+
+my $TicketObj = LoadTicket($id);
+$m->callback( TicketObj => $TicketObj, ARGSRef => \%ARGS );
+my @results = ProcessTicketDates( TicketObj => $TicketObj, ARGSRef => \%ARGS);
+$TicketObj->ApplyTransactionBatch;
+
+</%INIT>
+
+
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/ModifyLinks.html b/rt/share/html/Ticket/ModifyLinks.html
new file mode 100755
index 0000000..ae14e93
--- /dev/null
+++ b/rt/share/html/Ticket/ModifyLinks.html
@@ -0,0 +1,85 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Link ticket #[_1]", $Ticket->Id) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $Ticket,
+ current_tab => "Ticket/ModifyLinks.html?id=".$Ticket->Id,
+ Title => loc("Link ticket #[_1]", $Ticket->Id) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket);
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="ModifyLinks.html" method="post">
+<input type="hidden" class="hidden" name="id" value="<%$Ticket->id%>" />
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
+% my (@extra);
+% push @extra, titleright_raw => '<a href="'. RT->Config->Get('WebPath') . '/Ticket/Graphs/index.html?id='.$Ticket->id.'">'.loc('Graph').'</a>' unless RT->Config->Get('DisableGraphViz');
+<&| /Widgets/TitleBox, title => loc('Edit Links'), class=>'ticket-info-links', @extra &>
+<& /Elements/EditLinks, Object => $Ticket, Merge => 1 &>
+</&>
+<& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes') &>
+</form>
+
+
+
+
+<%INIT>
+
+my $Ticket = LoadTicket($id);
+
+my @results;
+$m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS, Results => \@results );
+push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS );
+$Ticket->ApplyTransactionBatch;
+
+</%INIT>
+
+
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/ModifyPeople.html b/rt/share/html/Ticket/ModifyPeople.html
new file mode 100755
index 0000000..90bca56
--- /dev/null
+++ b/rt/share/html/Ticket/ModifyPeople.html
@@ -0,0 +1,94 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc('Modify people related to ticket #[_1]', $Ticket->id) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $Ticket,
+ current_tab => "Ticket/ModifyPeople.html?id=".$Ticket->Id,
+ Title => loc('Modify people related to ticket #[_1]', $Ticket->id) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket);
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="ModifyPeople.html">
+<input type="hidden" class="hidden" name="id" value="<%$Ticket->Id%>" />
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
+<&| /Widgets/TitleBox, title => loc('Modify people related to ticket #[_1]', $Ticket->Id), width => "100%", color=> "#333399", class=>'ticket-info-people' &>
+<& Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField &>
+</&>
+<& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &>
+</form>
+
+<%INIT>
+
+my @results;
+
+my $Ticket = LoadTicket($id);
+$m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS );
+
+# if we're trying to search for watchers and nothing else
+unless ($OnlySearchForPeople or $OnlySearchForGroup) {
+ push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS);
+ push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS);
+ $Ticket->ApplyTransactionBatch;
+}
+</%INIT>
+
+
+
+<%ARGS>
+$OnlySearchForPeople => undef
+$OnlySearchForGroup => undef
+$UserField => undef
+$UserOp => undef
+$UserString => undef
+$GroupField => undef
+$GroupOp => undef
+$GroupString => undef
+$id => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Reminders.html b/rt/share/html/Ticket/Reminders.html
new file mode 100755
index 0000000..b799574
--- /dev/null
+++ b/rt/share/html/Ticket/Reminders.html
@@ -0,0 +1,74 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Reminder ticket #[_1]", $Ticket->Id) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $Ticket,
+ current_tab => "Ticket/Reminders.html?id=".$Ticket->Id,
+ Title => loc("Reminders for ticket #[_1]", $Ticket->Id) &>
+
+% $m->callback(CallbackName => 'BeforeActionList', ARGSRef => \%ARGS, Ticket => $Ticket);
+
+<form action="<%RT->Config->Get('WebPath')%>/Ticket/Reminders.html" method="post">
+<&|/Widgets/TitleBox, title => loc("Reminders"),
+ class=>'ticket-info-reminders'
+ &>
+
+<& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 1, Edit => 1 &>
+</&>
+<& /Elements/Submit, Label => loc('Save') &>
+</form>
+
+
+<%INIT>
+
+my $Ticket = LoadTicket($id);
+
+</%INIT>
+<%ARGS>
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/ShowEmailRecord.html b/rt/share/html/Ticket/ShowEmailRecord.html
new file mode 100644
index 0000000..92f37fb
--- /dev/null
+++ b/rt/share/html/Ticket/ShowEmailRecord.html
@@ -0,0 +1,96 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Attachment => undef
+$Transaction => undef
+</%ARGS>
+<%INIT>
+my $show_content = sub {
+ my $attach = shift;
+ if ( $attach->ContentType =~ m{^(?:text|message)/}i ) {
+ $m->out( $m->interp->apply_escapes( $attach->Content, 'h' ) );
+ return;
+ }
+ my $href = RT->Config->Get('WebPath') .'/Ticket/Attachment/'
+ . $attach->TransactionId .'/'. $attach->id .'/'
+ . $m->interp->apply_escapes( $attach->Filename, 'u' );
+ $m->out( '<a href="'. $href .'">'. loc('download') .'</a>' );
+};
+
+my $show;
+$show = sub {
+ my $attach = shift;
+ $m->out( '<div id="body"><pre style="padding: 2em;">' );
+ $m->out( $m->interp->apply_escapes( $attach->Headers, 'h' ) );
+ $m->out( "\n\n" );
+ if ( $attach->ContentType =~ m{^multipart/}i ) {
+ my $children = $attach->Children;
+ while ( my $child = $children->Next ) {
+ $show->( $child );
+ }
+ } else {
+ $show_content->( $attach );
+ }
+ $m->out( '</pre></div>' );
+};
+
+my $AttachmentObj = new RT::Attachment($session{'CurrentUser'});
+$AttachmentObj->Load($Attachment) || Abort(loc("Attachment '[_1]' could not be loaded", $Attachment));
+unless ( $AttachmentObj->id ) {
+ Abort(loc("Attachment '[_1]' could not be loaded", $Attachment));
+}
+unless ($AttachmentObj->TransactionId() == $Transaction ) {
+ Abort(loc("Attachment '[_1]' could not be loaded", $Attachment));
+}
+
+</%INIT>
+<& /Elements/Header, ShowBar => 0 &>
+% $show->( $AttachmentObj );
+</body>
+</html>
+% $m->abort;
diff --git a/rt/share/html/Ticket/Update.html b/rt/share/html/Ticket/Update.html
new file mode 100755
index 0000000..d3c2a09
--- /dev/null
+++ b/rt/share/html/Ticket/Update.html
@@ -0,0 +1,269 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $TicketObj,
+ Title=> $title &>
+
+% $m->callback(CallbackName => 'BeforeActionList', ARGSRef => \%ARGS, Ticket => $TicketObj);
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="Update.html" name="TicketUpdate"
+ method="post" enctype="multipart/form-data">
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS, Ticket => $TicketObj );
+<input type="hidden" class="hidden" name="QuoteTransaction" value="<% $ARGS{QuoteTransaction}||'' %>" />
+<input type="hidden" class="hidden" name="DefaultStatus" value="<% $DefaultStatus ||''%>" />
+<input type="hidden" class="hidden" name="Action" value="<% $ARGS{Action}||'' %>" />
+
+<& /Elements/GnuPG/SignEncryptWidget:ShowIssues, self => $gnupg_widget &>
+
+<table width="100%" border="0">
+% $m->callback(CallbackName => 'AfterTableOpens', ARGSRef => \%ARGS, Ticket => $TicketObj);
+
+<tr><td class="label"><&|/l&>Status</&>:</td>
+<td>
+<& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), Default => $ARGS{'Status'} || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus)&>
+<span class="label"><&|/l&>Owner</&>:</span>
+<& /Elements/SelectOwner,
+ Name => "Owner",
+ TicketObj => $TicketObj,
+ QueueObj => $TicketObj->QueueObj,
+ DefaultLabel => loc("[_1] (Unchanged)", $TicketObj->OwnerObj->Name),
+ Default => $ARGS{'Owner'}
+&>
+<span class="label"><&|/l&>Worked</&>:</span>
+<& /Elements/EditTimeValue,
+ Name => 'UpdateTimeWorked',
+ Default => $ARGS{UpdateTimeWorked}||'',
+ InUnits => $ARGS{'UpdateTimeWorked-TimeUnits'}||'minutes',
+&>
+</td></tr>
+% my $skip;
+% $m->callback( %ARGS, CallbackName => 'BeforeUpdateType', skip => \$skip );
+% if (!$skip) {
+<input type="hidden" class="hidden" name="id" value="<%$TicketObj->Id%>" /><br />
+% }
+<tr><td class="label"><&|/l&>Update Type</&>:</td>
+<td><select name="UpdateType">
+% if ($CanComment) {
+<option value="private" <% ($ARGS{'UpdateType'} && $ARGS{'UpdateType'} eq "private") ? qq[ selected="selected"] : !$ARGS{'UpdateType'}&&$CommentDefault |n %>><&|/l&>Comments (Not sent to requestors)</&></option>
+% }
+% if ($CanRespond) {
+<option value="response" <% ($ARGS{'UpdateType'} && $ARGS{'UpdateType'} eq "response") ? qq[ selected="selected"] : !$ARGS{'UpdateType'}&&$ResponseDefault |n %>><&|/l&>Reply to requestors</&></option>
+% }
+</select>
+</td></tr>
+<tr><td class="label"><&|/l&>Subject</&>:</td><td> <input name="UpdateSubject" size="60" value="<% $ARGS{UpdateSubject} || $TicketObj->Subject()%>" /></td></tr>
+
+<& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &>
+
+<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj &>
+
+% if (exists $session{'Attachments'}) {
+<tr><td><&|/l&>Attached file</&>:</td>
+<td>
+<&|/l&>Check box to delete</&><br />
+% foreach my $attach_name (keys %{$session{'Attachments'}}) {
+<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
+% } # end of foreach
+</td>
+</tr>
+% } # end of if
+
+<tr><td class="label"><&|/l&>Attach</&>:</td><td><input name="Attach" type="file" /><input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" /><input type="hidden" class="hidden" name="UpdateAttach" value="1" />
+</td></tr>
+
+% if ( $gnupg_widget ) {
+<tr><td>&nbsp;</td><td>
+<& /Elements/GnuPG/SignEncryptWidget,
+ self => $gnupg_widget,
+ TicketObj => $TicketObj,
+&>
+</td></tr>
+% }
+
+<tr><td class="label" valign="top"><&|/l&>Message</&>:</td><td>
+% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
+% if (exists $ARGS{UpdateContent}) {
+% # preserve QuoteTransaction so we can use it to set up sane references/in/reply to
+% my $temp = $ARGS{'QuoteTransaction'};
+% delete $ARGS{'QuoteTransaction'};
+<& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&>
+% $ARGS{'QuoteTransaction'} = $temp;
+% } else {
+<& /Elements/MessageBox, Name=>"UpdateContent", %ARGS &>
+% }
+</td></tr>
+</table>
+
+
+
+
+<& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket' &>
+% if ($TicketObj->CurrentUserHasRight('ShowOutgoingEmail')) {
+<&|/Widgets/TitleBox, title => loc('Scrips and Recipients') &>
+<& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &>
+</&>
+
+% }
+</form>
+<%INIT>
+my $CanRespond = 0;
+my $CanComment = 0;
+my $checks_failure = 0;
+my $title;
+
+my $TicketObj = LoadTicket($id);
+
+my @results;
+
+$m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, results => \@results, CallbackName => 'Initial' );
+
+unless($DefaultStatus){
+ $DefaultStatus=($ARGS{'Status'} ||$TicketObj->Status());
+}
+
+if ($DefaultStatus eq 'new'){
+ $DefaultStatus='open';
+}
+
+if ($DefaultStatus eq 'resolved') {
+ $title = loc("Resolve ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject);
+} else {
+ $title = loc("Update ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject);
+}
+
+# Things needed in the template - we'll do the processing here, just
+# for the convenience:
+
+my ($CommentDefault, $ResponseDefault);
+if ($Action ne 'Respond') {
+ $CommentDefault = qq[ selected="selected"];
+ $ResponseDefault = "";
+} else {
+ $CommentDefault = "";
+ $ResponseDefault = qq[ selected="selected"];
+}
+
+
+
+$CanRespond = 1 if ( $TicketObj->CurrentUserHasRight('ReplyToTicket') or
+ $TicketObj->CurrentUserHasRight('ModifyTicket') );
+
+$CanComment = 1 if ( $TicketObj->CurrentUserHasRight('CommentOnTicket') or
+ $TicketObj->CurrentUserHasRight('ModifyTicket') );
+
+
+# {{{ deal with deleting uploaded attachments
+foreach my $key (keys %ARGS) {
+ if ($key =~ m/^DeleteAttach-(.+)$/) {
+ delete $session{'Attachments'}{$1};
+ }
+ $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
+}
+# }}}
+
+# {{{ store the uploaded attachment in session
+if ($ARGS{'Attach'}) { # attachment?
+ my $attachment = MakeMIMEEntity(
+ AttachmentFieldName => 'Attach'
+ );
+
+ my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
+ $session{'Attachments'} = {
+ %{$session{'Attachments'} || {}},
+ $file_path => $attachment,
+ };
+}
+# }}}
+
+# delete temporary storage entry to make WebUI clean
+unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
+ delete $session{'Attachments'};
+}
+# }}}
+
+my $gnupg_widget = $m->comp('/Elements/GnuPG/SignEncryptWidget:new', Arguments => \%ARGS );
+$m->comp( '/Elements/GnuPG/SignEncryptWidget:Process',
+ self => $gnupg_widget,
+ TicketObj => $TicketObj,
+);
+
+if ( $ARGS{'SubmitTicket'} ) {
+ my $CFs = $TicketObj->TransactionCustomFields;
+ my $ValidCFs = $m->comp(
+ '/Elements/ValidateCustomFields',
+ CustomFields => $CFs,
+ NamePrefix => "Object-RT::Transaction--CustomField-",
+ ARGSRef => \%ARGS
+ );
+ unless ( $ValidCFs ) {
+ $checks_failure = 1;
+ while (my $CF = $CFs->Next) {
+ my $msg = $m->notes('InvalidField-' . $CF->Id) or next;
+ push @results, loc($CF->Name) . ': ' . $msg;
+ }
+ }
+ my $status = $m->comp('/Elements/GnuPG/SignEncryptWidget:Check',
+ self => $gnupg_widget,
+ TicketObj => $TicketObj,
+ );
+ $checks_failure = 1 unless $status;
+}
+
+if ( !$checks_failure && exists $ARGS{SubmitTicket} ) {
+ $m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, CallbackName => 'BeforeDisplay' );
+ return $m->comp('Display.html', TicketObj => $TicketObj, %ARGS);
+}
+</%INIT>
+
+<%ARGS>
+$id => undef
+$Action => undef
+$DefaultStatus => undef
+</%ARGS>
diff --git a/rt/share/html/Tools/Elements/Tabs b/rt/share/html/Tools/Elements/Tabs
new file mode 100644
index 0000000..4e49795
--- /dev/null
+++ b/rt/share/html/Tools/Elements/Tabs
@@ -0,0 +1,90 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Tabs,
+ tabs => $tabs,
+ current_toptab => 'Tools/index.html',
+ current_tab => $current_tab,
+ actions => $actions,
+ Title => $Title &>
+
+<%INIT>
+my $tabs = {
+ a => {
+ title => loc('Dashboards'),
+ path => 'Dashboards/index.html',
+ },
+ b => {
+ title => loc('Offline'),
+ path => 'Tools/Offline.html',
+ },
+ c => {
+ title => loc('Reports'),
+ path => 'Tools/Reports/index.html',
+ },
+ d => {
+ title => loc('My Day'),
+ path => 'Tools/MyDay.html',
+ },
+};
+
+$m->callback( %ARGS, tabs => $tabs );
+
+foreach my $tab ( sort keys %{$tabs} ) {
+ if ( $tabs->{$tab}->{'path'} eq $current_tab ) {
+ $tabs->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+}
+</%INIT>
+<%ARGS>
+$subtabs => undef
+$current_tab => undef
+$current_subtab => undef
+$actions => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Tools/MyDay.html b/rt/share/html/Tools/MyDay.html
new file mode 100644
index 0000000..aaa6031
--- /dev/null
+++ b/rt/share/html/Tools/MyDay.html
@@ -0,0 +1,114 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Tools/Elements/Tabs, current_tab => "Tools/MyDay.html", Title => $title &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<h2><&|/l, $session{'CurrentUser'}->Name &>New and open tickets for [_1]</&></h2>
+<form method="post" action="MyDay.html">
+<table width="100%" cellpadding="0" cellspacing="0" class="myday">
+% while ( my $Ticket = $Tickets->Next()) {
+% $i++;
+% my $class = $i % 2 ? 'class="evenline"' : 'class="oddline"';
+<tr <%$class|n%>><td colspan="2"><h2><a
+href="<%RT->Config->Get('WebPath')%>/Ticket/Display.html?id=<%$Ticket->Id%>"><%$Ticket->Id%>:
+<%$Ticket->Subject%></a></h2></td></tr>
+<tr <%$class|n%>><td><span class="label"><&|/l&>Worked</&>:</span><input size="3" name="UpdateTimeWorked-<%$Ticket->Id%>" /> <&|/l&>minutes</&>
+</td>
+<td rowspan="2"><span class="label"><&|/l&>Comments</&>:<br /></span><textarea name="UpdateContent-<%$Ticket->Id%>" rows="5"
+cols="60"></textarea></td></tr>
+<tr <%$class|n%>>
+<td><span class="label"><&|/l&>Status</&>:</span> <& /Elements/SelectStatus, Name=> 'UpdateStatus-'.$Ticket->Id,
+ DefaultLabel => loc("[_1] (Unchanged)",loc($Ticket->Status())) &></td>
+ </tr>
+
+% }
+</table>
+<& /Elements/Submit, Label => loc('Record all updates') , Reset => 1, ResetLabel => loc('Clear')&>
+</form>
+</html>
+<%INIT>
+my $title = loc("What I did today");
+
+my $i = 0;
+my @results;
+foreach my $arg ( keys %ARGS ) {
+ next unless ( $arg =~ /^UpdateStatus-(\d*)$/ );
+ my $id = $1;
+ my $ticket = LoadTicket($id);
+ next unless ( $ticket->id );
+ if ( my $content = $ARGS{'UpdateContent-'.$id} ) {
+ my ( $val, $msg ) = $ticket->Comment(
+ Content => $content,
+ TimeTaken => $ARGS{ 'UpdateTimeWorked-' . $id }
+ );
+ push @results, loc( "Ticket [_1]: [_2]", $id, $msg );
+ } elsif ( my $worked = $ARGS{ 'UpdateTimeWorked-' . $id } ) {
+ my ( $val, $msg ) = $ticket->SetTimeWorked( $worked + $ticket->TimeWorked );
+ push @results, loc( "Ticket [_1]: [_2]", $id, $msg );
+ }
+
+ if ( my $status = $ARGS{ 'UpdateStatus-' . $id } ) {
+ if ( $status ne $ticket->Status ) {
+ my ( $val, $msg ) = $ticket->SetStatus($status);
+ push @results, loc( "Ticket [_1]: [_2]", $id, $msg );
+
+ }
+ }
+
+}
+
+my $Tickets = RT::Tickets->new($session{'CurrentUser'});
+$Tickets->LimitOwner(VALUE => $session{'CurrentUser'}->Id);
+$Tickets->LimitStatus( VALUE => 'open' );
+$Tickets->LimitStatus ( VALUE => 'new');
+$Tickets->OrderBy ( FIELD => 'Priority', ORDER => 'DESC');
+
+
+</%INIT>
diff --git a/rt/share/html/Tools/Offline.html b/rt/share/html/Tools/Offline.html
new file mode 100644
index 0000000..8bd5105
--- /dev/null
+++ b/rt/share/html/Tools/Offline.html
@@ -0,0 +1,168 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Offline upload") &>
+<& Elements/Tabs,
+ current_tab => "Tools/Offline.html",
+ Title => loc("Offline edits") &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+% $m->callback( Requestor => \$requestoraddress, Queue => \$qname, %ARGS );
+
+<form action="Offline.html" name="TicketUpdate"
+ method="post" enctype="multipart/form-data">
+<table>
+<tr>
+<td class="label">
+<&|/l&>Default Queue</&>:
+</td>
+<td>
+<& /Elements/SelectQueue, Name => "qname", NamedValues => 1 &>
+<em><&|/l&>If no queue is specified, create tickets in this queue.</&></em>
+</td>
+</tr>
+<tr>
+<td class="label">
+<&|/l&>Default Requestor</&>:
+</td>
+<td>
+<input name="requestoraddress" value="<%$requestoraddress%>" />
+<em><&|/l&>If no Requestor is specified, create tickets with this requestor.</&></em>
+</td>
+</tr>
+<tr><td class="labeltop">
+<&|/l&>Template</&>:
+</td>
+<td colspan="2">
+<textarea name="string" cols="80" rows="30"><% $string %></textarea>
+</td>
+</tr>
+<tr><td class="label">
+<&|/l&>Get template from file</&>:
+</td>
+<td>
+<input name="Template" type="file" />
+<input type="submit" class="button" name="Parse" value="<&|/l&>Go!</&>" />
+</td>
+</tr>
+</table>
+<& /Elements/Submit, Name => 'UpdateTickets', Label => loc('Upload'), Caption => loc("Upload your changes"), color => "#993333" &>
+
+</form>
+<%args>
+$requestoraddress => ''
+$qname => undef
+$string => undef
+</%args>
+<%INIT>
+
+my @results;
+use RT::Action::CreateTickets;
+my $action = RT::Action::CreateTickets->new(CurrentUser => $session{'CurrentUser'});
+;
+if ($ARGS{'Parse'} && $ARGS{'Template'}) {
+ $string = "";
+ my $cgi_object = $m->cgi_object;
+ my $fh = $cgi_object->upload('Template');
+ my $filename = "$fh";
+
+ my ($buffer, $template);
+ while ( my $bytesread = read( $fh, $buffer, 4096 ) ) {
+ $template .= $buffer;
+ }
+ my $encode = RT::I18N::_GuessCharset( $template );
+ require Encode;
+ $template = Encode::decode( $encode, $template );
+ $template =~ s/\r\n/\n/gs;
+ $action->Parse(Content => $template, Queue => $qname, Requestor => $requestoraddress);
+ foreach ( @{ $action->{'create_tickets'} } ) {
+ my $id = $_;
+ $id =~ s/^create\-//;
+ $string .= "===Create-Ticket: $id\n";
+ $string .= $action->{'templates'}->{$_} . "\n";
+ }
+ foreach ( @{ $action->{'update_tickets'} } ) {
+ my $id = $_;
+ $id =~ s/^update\-//;
+ $string .= "===Update-Ticket: $id\n";
+ $string .= $action->{'templates'}->{$_} . "\n";
+ }
+
+
+} elsif ($ARGS{'UpdateTickets'}) {
+ $action->Parse(Content => $ARGS{string}, Queue => $qname, Requestor=> $requestoraddress);
+ push @results, $action->CreateByTemplate();
+ push @results, $action->UpdateByTemplate();
+} else {
+ if ($ARGS{'Query'}) {
+ my $Tickets = RT::Tickets->new($session{'CurrentUser'});
+ $Tickets->FromSQL($ARGS{'Query'});
+
+ while (my $t = $Tickets->Next) {
+ $string .= "===Update-Ticket: " . $t->Id . "\n";
+ $string .= $action->GetUpdateTemplate($t);
+ $string .= "" . "\n";
+ }
+
+ $string .= "" . "\n";
+ $string .= "===# DO NOT EDIT BELOW THIS LINE#===\n";
+ $string .= "" . "\n";
+
+ while (my $t = $Tickets->Next) {
+ $string .= "===# DO NOT EDIT #===\n";
+ $string .= "===Base-Ticket: " . $t->Id . "\n";
+ $string .= $action->GetBaseTemplate($t);
+ $string .= "===# DO NOT EDIT #===\n";
+ $string .= "" . "\n";
+ }
+ } else {
+ $string .= "===Create-Ticket: ticket1\n";
+ $string .= $action->GetCreateTemplate();
+ }
+}
+</%INIT>
diff --git a/rt/share/html/Tools/Reports/CreatedByDates.html b/rt/share/html/Tools/Reports/CreatedByDates.html
new file mode 100644
index 0000000..9ca6955
--- /dev/null
+++ b/rt/share/html/Tools/Reports/CreatedByDates.html
@@ -0,0 +1,94 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Queue => undef
+$CreatedBefore => undef
+$CreatedAfter => undef
+</%args>
+<%init>
+my $title = loc("Created tickets in period, grouped by status");
+my $q = RT::Queue->new($session{'CurrentUser'});
+my $before = RT::Date->new($session{'CurrentUser'});
+my $after = RT::Date->new($session{'CurrentUser'});
+my $query = 'Status != "deleted" ';
+
+
+if ($CreatedAfter) {
+ $after->Set(Format => 'unknown', Value => $CreatedAfter);
+ $CreatedAfter = $after->AsString;
+}
+if ($CreatedBefore) {
+ $before->Set(Format => 'unknown', Value => $CreatedBefore);
+ $CreatedBefore = $before->AsString;
+}
+
+
+$q->LoadByCols(Name => $Queue);
+</%init>
+<& /Elements/Header, Title => $title &>
+<& /Tools/Reports/Elements/Tabs, current_tab => 'Tools/Reports/CreatedByDates.html', Title => $title &>
+<form method="post" action="CreatedByDates.html">
+% if ($Queue|| $CreatedBefore ||$CreatedAfter) {
+% # if we have a queue, do the search
+% if ($Queue) { $query .= " AND Queue = '$Queue'"}
+% if ($CreatedBefore) { $query .= " AND Created < '".$before->ISO."'"; }
+% if ($CreatedAfter) { $query .= " AND Created > '".$after->ISO."'"}
+% my $groupby = 'Status';
+<& /Search/Elements/Chart, Query => $query, PrimaryGroupBy => $groupby &>
+% }
+
+<hr />
+
+<br /><&|/l&>Queue</&>: <& /Elements/SelectQueue, Name => 'Queue', NamedValues => 1, Default => $q->id &>
+<br /><&|/l&>Tickets created after</&>:
+<& /Elements/SelectDate, Name => 'CreatedAfter', Default => ($CreatedAfter) ? $after->ISO : ''&>
+<br /><&|/l&>Tickets created before</&>:
+<& /Elements/SelectDate, Name => 'CreatedBefore', Default => ($CreatedBefore) ? $before->ISO : ''&>
+
+<& /Elements/Submit&>
+</form>
diff --git a/rt/share/html/Tools/Reports/Elements/Tabs b/rt/share/html/Tools/Reports/Elements/Tabs
new file mode 100644
index 0000000..c5faaac
--- /dev/null
+++ b/rt/share/html/Tools/Reports/Elements/Tabs
@@ -0,0 +1,89 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Tools/Elements/Tabs,
+ subtabs => $tabs,
+ current_tab => 'Tools/Reports/index.html',
+ current_subtab => $current_tab,
+ Title => $Title &>
+
+<%INIT>
+my $tabs = {
+ a => {
+ title => loc('Resolved by owner'),
+ path => 'Tools/Reports/ResolvedByOwner.html',
+ },
+ b => {
+ title => loc('Resolved in date range'),
+ path => 'Tools/Reports/ResolvedByDates.html',
+ },
+ c => {
+ title => loc('Created in a date range'),
+ path => 'Tools/Reports/CreatedByDates.html',
+ },
+};
+
+
+
+
+$m->callback( %ARGS, tabs => $tabs );
+
+foreach my $tab ( sort keys %{$tabs} ) {
+ if ( $tabs->{$tab}->{'path'} eq $current_tab ) {
+ $tabs->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+}
+</%INIT>
+
+
+<%ARGS>
+$subtabs => undef
+$current_tab => ''
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/Tools/Reports/ResolvedByDates.html b/rt/share/html/Tools/Reports/ResolvedByDates.html
new file mode 100644
index 0000000..455eaed
--- /dev/null
+++ b/rt/share/html/Tools/Reports/ResolvedByDates.html
@@ -0,0 +1,95 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Queue => undef
+$ResolvedBefore => undef
+$ResolvedAfter => undef
+</%args>
+<%init>
+my $title = loc("Resolved tickets in period, grouped by owner");
+my $q = RT::Queue->new($session{'CurrentUser'});
+my $before = RT::Date->new($session{'CurrentUser'});
+my $after = RT::Date->new($session{'CurrentUser'});
+my $query = '';
+
+
+if ($ResolvedAfter) {
+ $after->Set(Format => 'unknown', Value => $ResolvedAfter);
+ $ResolvedAfter = $after->AsString;
+}
+if ($ResolvedBefore) {
+ $before->Set(Format => 'unknown', Value => $ResolvedBefore);
+ $ResolvedBefore = $before->AsString;
+}
+
+
+$q->LoadByCols(Name => $Queue);
+</%init>
+<& /Elements/Header, Title => $title &>
+<& /Tools/Reports/Elements/Tabs, current_tab => 'Tools/Reports/ResolvedByDates.html', Title => $title &>
+<form method="post" action="ResolvedByDates.html">
+% if ($Queue|| $ResolvedBefore ||$ResolvedAfter) {
+% # if we have a queue, do the search
+% $query = "Status = 'resolved'";
+% if ($Queue) { $query .= " AND Queue = '$Queue'"}
+% if ($ResolvedBefore) { $query .= " AND Resolved < '".$before->ISO."'"; }
+% if ($ResolvedAfter) { $query .= " AND Resolved > '".$after->ISO."'"}
+% my $groupby = 'Owner';
+<& /Search/Elements/Chart, Query => $query, PrimaryGroupBy => $groupby &>
+% }
+
+<hr />
+
+<br /><&|/l&>Queue</&>: <& /Elements/SelectQueue, Name => 'Queue', NamedValues => 1, Default => $q->id &>
+<br /><&|/l&>Tickets resolved after</&>:
+<& /Elements/SelectDate, Name => 'ResolvedAfter', Default => ($ResolvedAfter) ? $after->ISO : ''&>
+<br /><&|/l&>Tickets resolved before</&>:
+<& /Elements/SelectDate, Name => 'ResolvedBefore', Default => ($ResolvedBefore) ? $before->ISO : ''&>
+
+<& /Elements/Submit&>
+</form>
diff --git a/rt/share/html/Tools/Reports/ResolvedByOwner.html b/rt/share/html/Tools/Reports/ResolvedByOwner.html
new file mode 100644
index 0000000..0000534
--- /dev/null
+++ b/rt/share/html/Tools/Reports/ResolvedByOwner.html
@@ -0,0 +1,70 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%args>
+$Queue => undef
+</%args>
+<%init>
+my $title = loc("Resolved tickets, grouped by owner");
+my $q = RT::Queue->new($session{'CurrentUser'});
+$q->LoadByCols(Name => $Queue);
+</%init>
+<& /Elements/Header, Title => $title &>
+<& /Tools/Reports/Elements/Tabs, current_tab => '/Tools/Reports/ResolvedByOwner.html', Title => $title &>
+<form method="post" action="ResolvedByOwner.html">
+% if ($Queue) {
+% # if we have a queue, do the search
+% my $query = "Status = 'resolved' AND Queue = '$Queue'";
+% my $groupby = 'Owner';
+<& /Search/Elements/Chart, Query => $query, PrimaryGroupBy => $groupby &>
+% }
+
+<hr />
+
+<&|/l&>Queue</&>: <& /Elements/SelectQueue, Name => 'Queue', NamedValues => 1, Default => $q->id &>
+<& /Elements/Submit&>
+</form>
diff --git a/rt/share/html/Tools/Reports/index.html b/rt/share/html/Tools/Reports/index.html
new file mode 100644
index 0000000..d534fad
--- /dev/null
+++ b/rt/share/html/Tools/Reports/index.html
@@ -0,0 +1,76 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc('Reports') &>
+<& /Tools/Reports/Elements/Tabs, Title => loc('Reports') &>
+<& /Elements/ListMenu, items => $tabs &>
+
+% $m->callback;
+
+<%init>
+
+my $tabs = {
+ A => {
+ title => loc('Resolved by owner'),
+ path => '/Tools/Reports/ResolvedByOwner.html',
+ description => loc('Examine tickets resolved in a queue, grouped by owner'),
+ },
+ B => {
+ title => loc('Resolved in date range'),
+ path => '/Tools/Reports/ResolvedByDates.html',
+ description => loc('Examine tickets resolved in a queue between two dates'),
+ },
+ C => {
+ title => loc('Created in a date range'),
+ path => '/Tools/Reports/CreatedByDates.html',
+ description => loc('Examine tickets created in a queue between two dates'),
+ },
+};
+
+$m->callback( CallbackName => 'ListReports', %ARGS, tabs => $tabs );
+
+</%init>
diff --git a/rt/share/html/Tools/index.html b/rt/share/html/Tools/index.html
new file mode 100644
index 0000000..8e5e02b
--- /dev/null
+++ b/rt/share/html/Tools/index.html
@@ -0,0 +1,81 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Tools") &>
+<& Elements/Tabs,
+ current_tab => "Tools/index.html",
+ Title => loc("Tools") &>
+<& /Elements/ListMenu, items => $tabs &>
+
+<%init>
+
+my $tabs = {
+ A => {
+ title => loc('Dashboards'),
+ path => '/Dashboards/index.html',
+ description => loc('Named, shared collection of portlets'),
+ },
+ B => {
+ title => loc('Offline'),
+ path => '/Tools/Offline.html',
+ description => loc('Create tickets offline'),
+ },
+ C => {
+ title => loc('Reports'),
+ path => '/Tools/Reports/index.html',
+ description => loc('Various RT reports'),
+ },
+ D => {
+ title => loc('My Day'),
+ path => '/Tools/MyDay.html',
+ description => loc('Easy updating of your open tickets'),
+ },
+};
+
+$m->callback( %ARGS, tabs => $tabs );
+
+</%init>
diff --git a/rt/share/html/User/Delegation.html b/rt/share/html/User/Delegation.html
new file mode 100755
index 0000000..71889ff
--- /dev/null
+++ b/rt/share/html/User/Delegation.html
@@ -0,0 +1,107 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => loc("Delegate rights") &>
+<& /User/Elements/Tabs,
+ current_tab => 'User/Delegation.html',
+ Title => loc("Delegate rights") &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post">
+<& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::System' &>
+<& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::Queue' &>
+<& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::Group' &>
+
+<& /Elements/Submit, Label => loc('Modify Rights') &>
+</form>
+<%INIT>
+
+my (@results, $arg);
+foreach $arg (keys %ARGS) {
+ next unless ($arg =~ /^Delegate-Existing-ACE-(\d+)-to-(\d+)-as-(\d+)$/);
+ my $parent = $1;
+ my $principal = $2;
+ my $delegation = $3;
+ unless ($ARGS{"Delegate-ACE-$1-to-$2"}) {
+ my $ace_to_del = RT::ACE->new($session{'CurrentUser'});
+ $ace_to_del->Load($delegation);
+ my ($delval, $delmsg) = $ace_to_del->Delete();
+ push (@results, $delmsg);
+ }
+}
+
+foreach $arg (keys %ARGS) {
+ next unless ($arg =~ /^Delegate-ACE-(\d+)-to-(\d+)$/);
+ my $parent = $1;
+ my $principal = $2;
+ # if we already delegate it, we just don't care
+ next if (grep /^Delegate-Existing-ACE-$parent-to-$principal-/, keys %ARGS);
+ my $ace = RT::ACE->new($session{'CurrentUser'});
+ $ace->Load($1);
+ unless ($ace->Id) {
+ push (@results, loc('Right not found'));
+ next;
+ }
+ my ($delid, $delmsg) = $ace->Delegate(PrincipalId => $principal);
+ push (@results, $delmsg);
+}
+
+my $personalgroups = RT::Groups->new($session{'CurrentUser'});
+$personalgroups->LimitToPersonalGroupsFor($session{'CurrentUser'}->PrincipalId);
+
+my $objects;
+my $acl = RT::ACL->new ($session{'CurrentUser'});
+$acl->ExcludeDelegatedRights();
+$acl->LimitToPrincipal(Id => $session{'CurrentUser'}->PrincipalId,
+ IncludeGroupMembership => 1
+ );
+
+while(my $right = $acl->Next) {
+ push @{$objects->{$right->ObjectType}{$right->ObjectId}},$right;
+}
+</%INIT>
diff --git a/rt/share/html/User/Elements/DelegateRights b/rt/share/html/User/Elements/DelegateRights
new file mode 100755
index 0000000..acc3b35
--- /dev/null
+++ b/rt/share/html/User/Elements/DelegateRights
@@ -0,0 +1,110 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<h2><%$sectionheading%></h2>
+<%perl>
+
+foreach my $object (keys %{$objects->{$ObjectType}}) {
+unless ($ObjectType eq 'RT::System') {
+my $object_obj = @{$objects->{$ObjectType}{$object}}[0]->Object;
+
+</%perl>
+<h3><% $object_obj->Name %></h3>
+% }
+<table width="100%" border="0" cellspacing="0" cellpadding="3">
+<tr>
+ <th width="15%"><&|/l&>Personal Groups</&>:</th>
+% while (my $pg = $personalgroups->Next) {
+<th><%$pg->Name%></th>
+% }
+</tr>
+<%perl>
+my $i;
+foreach my $right (@{$objects->{$ObjectType}{$object}}) {
+my $delegations = RT::ACL->new($session{'CurrentUser'});
+$delegations->DelegatedBy( Id => $session{'CurrentUser'}->PrincipalId);
+$delegations->DelegatedFrom ( Id => $right->Id);
+
+my $del_hash = {};
+while ( my $delegation = $delegations->Next) {
+ $del_hash->{$delegation->PrincipalId} = $delegation;
+}
+</%perl>
+% $i++;
+%
+<tr class="<%($i%2) && 'oddline'%>">
+<td>
+<% loc($right->RightName) %><br />
+<div align="right"><font size="-2" color="#999999"><&|/l, $right->PrincipalObj->Object->SelfDescription &>as granted to [_1]</&></font></div>
+ </td>
+% while (my $pg = $personalgroups->Next) {
+<td align="center">
+ <input name="Delegate-ACE-<% $right->Id %>-to-<% $pg->PrincipalId%>" type="checkbox" value="1" <%$ del_hash->{$pg->PrincipalId} && 'checked="checked"' %> />
+% if ( $del_hash->{$pg->PrincipalId}) {
+<input type="hidden" class="hidden" name="Delegate-Existing-ACE-<% $right->Id %>-to-<% $pg->PrincipalId%>-as-<%$del_hash->{$pg->PrincipalId}->Id%>" />
+% }
+</td>
+% }
+<td>&nbsp;</td>
+</tr>
+%}
+</table>
+% }
+<%init>
+
+my ($frendly_type) = ($ObjectType =~ /^RT::(.*)$/);
+my $sectionheading = loc("$frendly_type rights");
+# 'System rights' # loc
+# 'Group rights' # loc
+# 'Queue rights' # loc
+
+</%init>
+<%args>
+$ObjectType => undef
+$objects => undef
+$personalgroups => undef
+</%args>
diff --git a/rt/share/html/User/Elements/GroupTabs b/rt/share/html/User/Elements/GroupTabs
new file mode 100755
index 0000000..1435d73
--- /dev/null
+++ b/rt/share/html/User/Elements/GroupTabs
@@ -0,0 +1,84 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /User/Elements/Tabs,
+ subtabs => $tabs,
+ current_tab => 'User/Groups/',
+ current_subtab => $current_subtab,
+ Title => $Title &>
+
+<%INIT>
+my $tabs;
+if ( $GroupObj and $GroupObj->id ) {
+ $tabs->{"this"} = {
+ title => $GroupObj->Name,
+ path => "User/Groups/Modify.html?id=" . $GroupObj->id,
+ subtabs => {
+ Basics => { title => loc('Basics'),
+ path => "User/Groups/Modify.html?id=" . $GroupObj->id
+ },
+
+ Members => { title => loc('Members'),
+ path => "User/Groups/Members.html?id=" . $GroupObj->id
+ },
+
+ } };
+ $tabs->{'this'}->{'current_subtab'} = $current_subtab;
+ $current_subtab = "User/Groups/Modify.html?id=" . $GroupObj->id,
+}
+$tabs->{"A"} = { title => loc('Select group'),
+ path => "User/Groups/index.html" };
+$tabs->{"B"} = { title => loc('New group'),
+ path => "User/Groups/Modify.html?Create=1",
+ separator => 1 };
+
+</%INIT>
+<%ARGS>
+$GroupObj => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/User/Elements/Tabs b/rt/share/html/User/Elements/Tabs
new file mode 100755
index 0000000..48cf180
--- /dev/null
+++ b/rt/share/html/User/Elements/Tabs
@@ -0,0 +1,95 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Tabs,
+ tabs => $tabs,
+ current_toptab => 'Prefs/Other.html',
+ current_tab => $current_tab,
+ Title => $Title &>
+
+<%INIT>
+ my $tabs = {
+
+ a => { title => loc('Settings'),
+ path => 'Prefs/Other.html',
+ },
+
+ b => { title => loc('About me'),
+ path => 'User/Prefs.html',
+ },
+ g => { title => loc('Personal Groups'),
+ path => 'User/Groups/',
+ },
+ h => { title => loc('Delegation'),
+ path => 'User/Delegation.html',
+ },
+ f => { title => loc('Search options'),
+ path => 'Prefs/SearchOptions.html',
+ },
+ r => { title => loc('RT at a glance'),
+ path => 'Prefs/MyRT.html',
+ },
+ };
+
+ # Now let callbacks add their extra tabs
+ $m->callback( %ARGS, tabs => $tabs );
+
+ foreach my $tab (sort keys %{$tabs}) {
+ if ($tabs->{$tab}->{'path'} eq $current_tab) {
+ $tabs->{$tab}->{"subtabs"} = $subtabs;
+ $tabs->{$tab}->{"current_subtab"} = $current_subtab;
+ }
+ }
+</%INIT>
+
+
+<%ARGS>
+$subtabs => undef
+$current_tab => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/share/html/User/Groups/Members.html b/rt/share/html/User/Groups/Members.html
new file mode 100755
index 0000000..248836b
--- /dev/null
+++ b/rt/share/html/User/Groups/Members.html
@@ -0,0 +1,160 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /User/Elements/GroupTabs,
+ GroupObj => $Group,
+ current_subtab => "User/Groups/Members.html?id=".$Group->id,
+ Title => $title &>
+<& /Elements/ListActions, actions => \@results &>
+
+
+
+<form action="<%RT->Config->Get('WebPath')%>/User/Groups/Members.html" method="post">
+<input type="hidden" class="hidden" name="id" value="<%$Group->Id%>" />
+<table width="100%">
+<tr>
+<td>
+<&|/l&>Add members</&>
+</td>
+<td>
+<&|/l&>Current members</&>
+</td>
+</tr>
+
+<tr>
+<td valign="top">
+<& /Admin/Elements/SelectNewGroupMembers, Name => "AddMembers", Group => $Group &>
+</td>
+<td valign="top">
+
+% if ($Group->MembersObj->Count == 0 ) {
+<em><&|/l&>(No members)</&></em>
+% } else {
+<em><&|/l&>(Check box to delete)</&></em>
+<br />
+<br />
+<&|/l&>Users</&>
+% my $UserMembers = $Group->MembersObj;
+% $UserMembers->LimitToUsers();
+<ul>
+% while (my $member = $UserMembers->Next()) {
+<li><input type="checkbox" class="checkbox" name="DeleteMember-<%$member->MemberId%>" value="1" />
+<& /Elements/ShowUser, User => $member->MemberObj->Object &>
+% }
+</ul>
+<&|/l&>Groups</&>
+<ul>
+% my $GroupMembers = $Group->MembersObj;
+% $GroupMembers->LimitToGroups();
+% while (my $member = $GroupMembers->Next()) {
+<li><input type="checkbox" class="checkbox" name="DeleteMember-<%$member->MemberId%>" value="1" />
+<%$member->MemberObj->Object->Name%>
+% }
+</ul>
+% }
+</td>
+</tr>
+</table>
+<& /Elements/Submit, Label => loc('Modify Members') &>
+</form>
+
+
+<%INIT>
+
+my $Group = new RT::Group($session{'CurrentUser'});
+$Group->Load($id) ;
+
+unless ($Group->id) {
+ Abort(loc('Could not load group'));
+}
+
+my (@results);
+
+foreach my $key (keys %ARGS) {
+
+if ($key =~ /^DeleteMember-(\d+)$/) {
+ my $mem_id = $1;
+ my ($val,$msg) = $Group->DeleteMember($mem_id);
+ push (@results, $msg);
+}
+}
+
+# Make sure AddMembers is always an array
+my @AddMembersUsers = (ref $AddMembersUsers eq 'ARRAY') ? @{$AddMembersUsers} : ($AddMembersUsers);
+my @AddMembersGroups = (ref $AddMembersGroups eq 'ARRAY') ? @{$AddMembersGroups} : ($AddMembersGroups);
+
+foreach my $member (@AddMembersUsers, @AddMembersGroups) {
+ next unless ($member);
+
+ my $principal;
+
+ if ($member =~ /^Group-(\d+)$/) {
+ $principal = RT::Group->new($session{'CurrentUser'});
+ $principal->Load($1);
+ } elsif ($member =~ /^User-(\d+)$/) {
+ $principal = RT::User->new($session{'CurrentUser'});
+ $principal->Load($1);
+ } else {
+ next;
+ }
+
+
+ my ($val, $msg) = $Group->AddMember($principal->PrincipalId);
+ push (@results, $msg);
+}
+
+
+my $title = loc('Editing membership for personal group [_1]', $Group->Name);
+
+</%INIT>
+
+<%ARGS>
+$AddMembersUsers => undef
+$AddMembersGroups => undef
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/User/Groups/Modify.html b/rt/share/html/User/Groups/Modify.html
new file mode 100755
index 0000000..2348263
--- /dev/null
+++ b/rt/share/html/User/Groups/Modify.html
@@ -0,0 +1,157 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+
+<& /User/Elements/GroupTabs,
+ GroupObj => $Group,
+ current_subtab => $current_tab,
+ Title => $title &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+
+<form action="<%RT->Config->Get('WebPath')%>/User/Groups/Modify.html" method="post">
+
+%unless ($Group->Id) {
+<input type="hidden" class="hidden" name="id" value="new" />
+% } else {
+<input type="hidden" class="hidden" name="id" value="<%$Group->Id%>" />
+% }
+<table>
+<tr><td align="right">
+<&|/l&>Name</&>:
+</td>
+<td><input name="Name" value="<%$Group->Name%>" /></td>
+</tr><tr>
+<td align="right">
+<&|/l&>Description</&>:</td><td colspan="3"><input name="Description" value="<%$Group->Description%>" size="60" /></td>
+</tr><tr>
+<td colspan="2">
+<input type="hidden" class="hidden" name="SetEnabled" value="1" />
+<input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> /> <&|/l&>Enabled (Unchecking this box disables this group)</&><br />
+</tr>
+</table>
+<& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &>
+</form>
+<%INIT>
+
+my $current_tab;
+my ($title, @results, $Disabled, $EnabledChecked);
+
+my $Group = RT::Group->new($session{'CurrentUser'});
+
+if ($Create) {
+ $current_tab = 'User/Groups/Modify.html?Create=1';
+ $title = loc("Create a new personal group");
+}
+else {
+ if ( defined ($id) && $id eq 'new' ) {
+
+ my ( $id, $msg ) = $Group->CreatePersonalGroup(
+ Name => "$Name",
+ PrincipalId => $session{'CurrentUser'}->PrincipalId
+ );
+ unless ($id) {
+ Abort( loc("Could not create group") );
+ }
+ $id = $Group->Id;
+ }
+ else {
+ $Group->Load($id) || Abort( loc('Could not load group') );
+ }
+
+ if ($id) {
+ $title = loc( "Modify the group [_1]", $Group->Name );
+
+ }
+
+ # If the create failed
+ else {
+ $title = loc("Create a new personal group");
+ $Create = 1;
+ }
+
+ $current_tab = 'User/Groups/Modify.html?id=' . $Group->Id;
+}
+
+if ($id) {
+
+ my @fields = qw(Description Name );
+ my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
+ Object => $Group,
+ ARGSRef => \%ARGS );
+ push (@results,@fieldresults);
+}
+
+#we're asking about enabled on the web page but really care about disabled.
+if ($Enabled == 1) {
+ $Disabled = 0;
+}
+else {
+ $Disabled = 1;
+}
+if ( ($SetEnabled) and ( $Disabled != $Group->Disabled) ) {
+ my ($code, $msg) = $Group->SetDisabled($Disabled);
+ push @results, loc('Enabled status [_1]', loc_fuzzy($msg));
+}
+
+unless ($Group->Disabled()) {
+ $EnabledChecked = 'checked="checked"';
+}
+
+</%INIT>
+
+
+<%ARGS>
+$Create => undef
+$Name => undef
+$Description => undef
+$SetEnabled => undef
+$Enabled => undef
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/User/Groups/index.html b/rt/share/html/User/Groups/index.html
new file mode 100755
index 0000000..59a18a1
--- /dev/null
+++ b/rt/share/html/User/Groups/index.html
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /User/Elements/GroupTabs,
+ current_subtab => 'User/Groups/index.html',
+ Title => $title &>
+
+<% $title %>:<br />
+<ul>
+%while ( my $Group = $Groups->Next) {
+<li><a href="Modify.html?id=<%$Group->id%>"><%$Group->Name || loc('(empty)')%></a><br />
+%}
+</ul>
+
+<%INIT>
+my $Groups = RT::Groups->new($session{'CurrentUser'});
+$Groups->LimitToPersonalGroupsFor($session{'CurrentUser'}->PrincipalId());
+my $title = loc('Personal Groups');
+
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/User/Prefs.html b/rt/share/html/User/Prefs.html
new file mode 100755
index 0000000..f52fdcb
--- /dev/null
+++ b/rt/share/html/User/Prefs.html
@@ -0,0 +1,314 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title=>loc("Preferences") &>
+<& /User/Elements/Tabs,
+ current_tab => 'User/Prefs.html',
+ Title => loc("Preferences") &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="<%RT->Config->Get('WebPath')%>/User/Prefs.html" method="post">
+<input type="hidden" class="hidden" name="id" value="<%$UserObj->Id%>" />
+
+<table width="100%" border="0">
+<tr>
+
+<td valign="top" class="boxcontainer">
+<&| /Widgets/TitleBox, title => loc('Identity'), id => "user-prefs-identity" &>
+
+<input type="hidden" class="hidden" name="Name" value="<%$UserObj->Name%>" />
+<table cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="label"><&|/l&>Email</&>: </td>
+ <td class="value"><input name="EmailAddress" value="<%$UserObj->EmailAddress%>" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Real Name</&>:</td>
+ <td class="value"><input name="RealName" value="<%$UserObj->RealName%>" /></td> </tr>
+ <tr>
+ <td class="label"><&|/l&>Nickname</&>:</td>
+ <td class="value"><input name="NickName" value="<%$UserObj->NickName || ''%>" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Language</&>:</td>
+ <td class="value"><& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Timezone</&>:</td>
+ <td class="value"><& /Elements/SelectTimezone, Name => 'Timezone', Default => $UserObj->Timezone &></td>
+ </tr>
+</table>
+</&>
+<&| /Widgets/TitleBox, title => loc('Phone numbers'), id => "user-prefs-phone" &>
+<table cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="label"><&|/l&>Residence</&>:</td>
+ <td class="value"><input name="HomePhone" value="<%$UserObj->HomePhone || ''%>" size="13" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Work</&>:</td>
+ <td class="value"><input name="WorkPhone" value="<%$UserObj->WorkPhone || ''%>" size="13" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Mobile</&>:</td>
+ <td class="value"><input name="MobilePhone" value="<%$UserObj->MobilePhone || ''%>" size="13" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Pager</&>:</td>
+ <td class="value"><input name="PagerPhone" value="<%$UserObj->PagerPhone || ''%>" size="13" /></td>
+ </tr>
+</table>
+</&>
+% $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormLeftColumn' );
+</td>
+<td valign="top" class="boxcontainer">
+% unless (RT->Config->Get('WebExternalAuth') and !RT->Config->Get('WebFallbackToInternalAuth')) {
+<&| /Widgets/TitleBox, title => loc('Password'), id => "user-prefs-password" &>
+<table>
+<tr>
+<td class="label">
+<&|/l&>New Password</&>:
+</td>
+<td class="value">
+<input type="password" name="Pass1" autocomplete="off"/>
+</td>
+</tr>
+<tr><td class="label">
+<&|/l&>Retype Password</&>:
+</td>
+<td class="value">
+<input type="password" name="Pass2" autocomplete="off" />
+</td>
+</tr>
+</table>
+</&>
+% }
+
+<&| /Widgets/TitleBox, title => loc('Location'), id => "user-prefs-location" &>
+<table cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="label"><&|/l&>Organization</&>:</td>
+ <td class="value"><input name="Organization" value="<%$UserObj->Organization || ''%>" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Address1</&>:</td>
+ <td class="value"><input name="Address1" value="<%$UserObj->Address1 || ''%>" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Address2</&>:</td>
+ <td class="value"><input name="Address2" value="<%$UserObj->Address2 || ''%>" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>City</&>:</td>
+ <td><input name="City" value="<%$UserObj->City || ''%>" size="14" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>State</&>:</td>
+ <td class="value"><input name="State" value="<%$UserObj->State || ''%>" size="3" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Zip</&>:</td>
+ <td class="value"><input name="Zip" value="<%$UserObj->Zip || ''%>" size="9" /></td>
+ </tr>
+ <tr>
+ <td class="label"><&|/l&>Country</&>:</td>
+ <td class="value"><input name="Country" value="<%$UserObj->Country || ''%>" /></td>
+ </tr>
+</table>
+</&>
+
+<&| /Widgets/TitleBox, title => loc('Custom Fields') &>
+<table>
+% my $CustomFields = $UserObj->CustomFields;
+% while ( my $CF = $CustomFields->Next ) {
+<tr valign="top">
+<td align="right"><% loc( $CF->Name ) %>:</td>
+<td><& /Elements/EditCustomField,
+ %ARGS, Object => $UserObj, CustomField => $CF
+&></td></tr>
+% }
+</table>
+</&>
+
+% $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormRightColumn' );
+</td>
+</tr>
+
+
+<tr><td colspan="2" valign="top" class="boxcontainer">
+%if ($UserObj->Privileged) {
+<br />
+<&| /Widgets/TitleBox, title => loc('Signature') &>
+<textarea cols="80" rows="5" name="Signature" class="signature" wrap="hard">
+<%$UserObj->Signature || ''%></textarea>
+</&>
+% }
+</td></tr>
+
+<tr><td colspan="2" valign="top" class="boxcontainer">
+<&| /Widgets/TitleBox, title => loc('Secret authentication token'), id => "user-prefs-feeds" &>
+
+<&|/l&><p>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b> below.</p></&>
+
+<& /Elements/Submit, Label => loc('Reset secret authentication token'), Name => "ResetAuthToken" &>
+</&>
+</td></tr>
+
+</table>
+
+% $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormEnd' );
+
+<& /Elements/Submit, Label => loc('Save Preferences') &>
+</form>
+
+
+<%INIT>
+
+my $UserObj = RT::User->new( $session{'CurrentUser'} );
+$UserObj->Load($id) if $id;
+$UserObj->Load($Name) if $Name && !$UserObj->id;
+unless ( $UserObj->id ) {
+ Abort(loc("Couldn't load user #[_1] or user '[_2]'", $id, $Name))
+ if $id && $Name;
+ Abort(loc("Couldn't load user #[_1]", $id))
+ if $id;
+ Abort(loc("Couldn't load user '[_1]'", $Name))
+ if $Name;
+ Abort(loc("Couldn't load user"));
+}
+
+my @results;
+
+my @fields = qw(
+ Name Comments Signature EmailAddress FreeformContactInfo
+ Organization RealName NickName Lang EmailEncoding WebEncoding
+ ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId
+ AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1
+ Address2 City State Zip Country Lang Timezone
+);
+
+$m->callback(
+ CallbackName => 'UpdateLogic',
+ fields => \@fields,
+ results => \@results,
+ UserObj => $UserObj,
+ ARGSRef => \%ARGS,
+);
+
+push @results, UpdateRecordObject (
+ AttributesRef => \@fields,
+ Object => $UserObj,
+ ARGSRef => \%ARGS,
+);
+
+push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
+
+if ( $Lang ) {
+ $session{'CurrentUser'}->LanguageHandle($Lang);
+ $session{'CurrentUser'} = $session{'CurrentUser'}; # force writeback
+}
+
+# Deal with special fields: Privileged, Enabled, and Password
+if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
+ my ($code, $msg) = $UserObj->SetPrivileged( $Privileged );
+ push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
+}
+
+#TODO: make this report errors properly
+if ( defined $Pass1 and length $Pass1 and $Pass1 eq $Pass2 and !$UserObj->IsPassword($Pass1) ) {
+ my ($code, $msg);
+ ($code, $msg) = $UserObj->SetPassword($Pass1);
+ push @results, loc('Password: [_1]', loc_fuzzy($msg));
+} elsif ( defined $Pass1 && length $Pass1 && $Pass1 ne $Pass2 ) {
+ push @results, loc("Passwords do not match. Your password has not been changed");
+}
+
+if ( $ARGS{'ResetAuthToken'} ) {
+ my ($status, $msg) = $UserObj->GenerateAuthToken;
+ push @results, $msg;
+}
+
+</%INIT>
+
+
+<%ARGS>
+$id => $session{'CurrentUser'}->Id
+$Name => undef
+$Comments => undef
+$Signature => undef
+$EmailAddress => undef
+$FreeformContactInfo => undef
+$Organization => undef
+$RealName => undef
+$NickName => undef
+$Privileged => undef
+$SetPrivileged => undef
+$Enabled => undef
+$SetEnabled => undef
+$Lang => undef
+$EmailEncoding => undef
+$WebEncoding => undef
+$ExternalContactInfoId => undef
+$ContactInfoSystem => undef
+$Gecos => undef
+$ExternalAuthId => undef
+$AuthSystem => undef
+$HomePhone => undef
+$WorkPhone => undef
+$MobilePhone => undef
+$PagerPhone => undef
+$Address1 => undef
+$Address2 => undef
+$City => undef
+$State => undef
+$Zip => undef
+$Country => undef
+$Pass1 => undef
+$Pass2=> undef
+$Create=> undef
+</%ARGS>
diff --git a/rt/share/html/Widgets/BulkEdit b/rt/share/html/Widgets/BulkEdit
new file mode 100644
index 0000000..facf57f
--- /dev/null
+++ b/rt/share/html/Widgets/BulkEdit
@@ -0,0 +1,67 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+% for my $type ( @$Types ) {
+<& $Meta->{$type}{'Widget'},
+ Default => $Default,
+ %{ $m->comp('/Widgets/FinalizeWidgetArguments', WidgetArguments =>
+ $Meta->{$type}{'WidgetArguments'} ) },
+ Name => $type,
+ exists $CurrentValue->{$type} ? ( CurrentValue => $CurrentValue->{$type} )
+ : (),
+ exists $DefaultValue->{$type} ? ( DefaultValue => $DefaultValue->{$type} )
+ : (),
+&>
+% }
+
+<%args>
+$Types
+$Meta
+$Default => 0
+$CurrentValue => {}
+$DefaultValue => {}
+</%args>
diff --git a/rt/share/html/Widgets/BulkProcess b/rt/share/html/Widgets/BulkProcess
new file mode 100644
index 0000000..436808e
--- /dev/null
+++ b/rt/share/html/Widgets/BulkProcess
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+for my $type ( @$Types ) {
+ my $value =
+ $m->comp( $Meta->{$type}{Widget} . ':Process', Name => $type,
+ Arguments => $Arguments, Default => $Default,
+ DefaultValue => $DefaultValue->{$type},
+ %{ $Meta->{$type}{WidgetArguments} },
+ );
+ unless ( $KeepUndef || defined $value ) {
+ delete $Store->{$type};
+ }
+ else {
+ $Store->{$type} = $value;
+ }
+}
+</%init>
+
+<%args>
+$Arguments
+$Types
+$Store
+$Meta => {}
+$KeepUndef => 0
+$Default => 0
+$DefaultValue => {}
+</%args>
diff --git a/rt/share/html/Widgets/ComboBox b/rt/share/html/Widgets/ComboBox
new file mode 100644
index 0000000..04f7b25
--- /dev/null
+++ b/rt/share/html/Widgets/ComboBox
@@ -0,0 +1,77 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%once>
+# the $z_index here is to fix wrong z-index bug in ie7
+my $z_index = 9999;
+</%once>
+%# reset $z_index. assuming at most 1000 comboboxx in one page
+% $z_index = 9999 if $z_index < 9000;
+<nobr>
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/combobox.js"></script>
+
+<div id="<% $Name %>_Container" class="combobox <%$Class%>" style="z-index: <%$z_index--%>">
+<input name="<% $Name %>" id="<% $Name %>" class="combo-text" value="<% $Default || '' %>" type="text" <% $Size ? "size='$Size'" : '' |n %> autocomplete="off" />
+<br style="display: none" /><span id="<% $Name %>_Button" class="combo-button">&#9660;</span><select name="List-<% $Name %>" id="<% $Name %>_List" class="combo-list" onchange="ComboBox_SimpleAttach(this, this.form['<% $Name %>']); " size="<% $Rows %>">
+<option style="display: none" value="">-</option>
+% foreach my $value (@Values) {
+ <option value="<%$value%>"><% $value%></option>
+% }
+</select>
+</div>
+<script language="javascript"><!--
+ComboBox_InitWith('<% $Name %>');
+//--></script>
+</nobr>
+<%ARGS>
+$Name
+$Size => undef
+$Rows => 5
+$Default => ''
+@Values => ()
+$Class => ''
+</%ARGS>
diff --git a/rt/share/html/Widgets/FinalizeWidgetArguments b/rt/share/html/Widgets/FinalizeWidgetArguments
new file mode 100644
index 0000000..61451a5
--- /dev/null
+++ b/rt/share/html/Widgets/FinalizeWidgetArguments
@@ -0,0 +1,64 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+ my %args = %$WidgetArguments;
+
+ %args = (%args, %{ $args{Callback}->() }) if $args{Callback};
+ $args{'Description'} = loc( $args{'Description'} ) if $args{'Description'};
+ $args{'Hints'} = loc( $args{'Hints'} ) if $args{'Hints'};
+ if ( $args{'ValuesLabel'} ) {
+ while (my ($k, $v) = each %{ $args{'ValuesLabel'} } ) {
+ $args{'ValuesLabel'}->{$k} = loc( $args{'ValuesLabel'}->{$k} );
+ }
+ }
+ return \%args;
+</%init>
+
+<%args>
+$WidgetArguments => {}
+</%args>
diff --git a/rt/share/html/Widgets/Form/Boolean b/rt/share/html/Widgets/Form/Boolean
new file mode 100644
index 0000000..505d782
--- /dev/null
+++ b/rt/share/html/Widgets/Form/Boolean
@@ -0,0 +1,103 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%DOC>
+see docs/using_forms_widgets.pod
+</%DOC>
+<div id="form-box-<% lc $Name %>" class="widget">
+<span class="label description"><% $Description %></span>
+<span class="value"><& SELF:InputOnly, %ARGS &></span>
+<span class="hints"><% $Hints %></span>
+</div>
+<%ARGS>
+$Name => undef,
+$Description => undef,
+$Hints => ''
+</%ARGS>
+
+<%METHOD InputOnly>
+<%ARGS>
+$Name => undef,
+
+$Default => 0,
+$DefaultValue => 0,
+$DefaultLabel => loc( 'Use default ([_1])', $DefaultValue? loc('Yes'): loc('No') ),
+
+$CurrentValue => undef,
+</%ARGS>
+% unless ( $Default ) {
+<input type="hidden" name="<% $Name %>" value="0" />\
+<input type="checkbox" name="<% $Name %>" value="1" <% $CurrentValue? ' checked="checked"': '' |n %> />\
+% } else {
+<input type="radio" name="<% $Name %>" value="1" <% $CurrentValue? ' checked="checked"': '' |n %> />\
+<% loc('Yes') %>
+<input type="radio" name="<% $Name %>" value="0" <% defined $CurrentValue && !$CurrentValue? ' checked="checked"': '' |n %> />\
+<% loc('No') %>
+<input type="radio" name="<% $Name %>" value="__empty_value__" <% !defined $CurrentValue? ' checked="checked"': '' |n %> />\
+<% $DefaultLabel %>
+% }
+</%METHOD>
+
+<%METHOD Process>
+<%ARGS>
+$Name
+$Arguments => {},
+
+$Default => 0,
+$DefaultValue => 0,
+</%ARGS>
+<%INIT>
+my $value = $Arguments->{ $Name };
+if ( $Default ) {
+ return undef if !defined $value || $value eq '__empty_value__';
+ return $value? 1: 0;
+} else {
+ return $value? 1: 0 if defined $value;
+ return $DefaultValue;
+}
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Widgets/Form/Integer b/rt/share/html/Widgets/Form/Integer
new file mode 100644
index 0000000..9d53ac5
--- /dev/null
+++ b/rt/share/html/Widgets/Form/Integer
@@ -0,0 +1,99 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%DOC>
+see docs/using_forms_widgets.pod
+</%DOC>
+<div id="form-box-<% lc $Name %>" class="widget">
+<span class="label description"><% $Description %></span>
+<span class="value"><& SELF:InputOnly, %ARGS &></span>
+% if ( $Default ) {
+<span class="comment"><% $DefaultLabel %></span>
+% }
+<span class="hints"><% $Hints %></span>
+</div>
+<%INIT>
+</%INIT>
+<%ARGS>
+$Name
+
+$Description => undef,
+$Hints => ''
+
+$CurrentValue => '',
+
+$Default => 0,
+$DefaultValue => 0,
+$DefaultLabel => loc( 'Default: [_1]', $DefaultValue ),
+</%ARGS>
+
+<%METHOD InputOnly>
+<input type="text" name="<% $Name %>" value="<% $CurrentValue || '' %>" />\
+<%ARGS>
+$Name
+$CurrentValue => '',
+</%ARGS>
+</%METHOD>
+
+<%METHOD Process>
+<%ARGS>
+$Name
+
+$Arguments => {},
+
+$Default => 0,
+$DefaultValue => '',
+</%ARGS>
+<%INIT>
+my $value = $Arguments->{ $Name };
+if ( !defined $value || $value eq '' ) {
+ return $DefaultValue unless $Default;
+ return undef;
+}
+return $value;
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Widgets/Form/Select b/rt/share/html/Widgets/Form/Select
new file mode 100644
index 0000000..e778617
--- /dev/null
+++ b/rt/share/html/Widgets/Form/Select
@@ -0,0 +1,165 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%DOC>
+see docs/using_forms_widgets.pod
+</%DOC>
+<div id="form-box-<% lc $Name %>" class="widget">
+% if ( $Description ) {
+<span class="label"><% $Description %></span>
+% }
+<span class="value"><& SELF:InputOnly, %ARGS &></span>
+</div>
+<%ARGS>
+$Name
+$Description => undef,
+</%ARGS>
+
+<%METHOD InputOnly>
+<%ARGS>
+$Name
+$Description => undef,
+
+@Values => (),
+$ValuesCallback => undef,
+%ValuesLabel => (),
+@CurrentValue => (),
+
+$Default => 1,
+@DefaultValue => (),
+$DefaultLabel => undef,
+
+$Alternative => 0,
+$AlternativeLabel => loc('other...'),
+
+$Multiple => 0,
+</%ARGS>
+<select name="<% $Name %>">
+
+% if ( $Default ) {
+% my $selected = '';
+% $selected = 'selected="selected"' unless @CurrentValue;
+<option value="__empty_value__" <% $selected |n %>><% $DefaultLabel %></option>
+% }
+
+% foreach my $v( @Values ) {
+% my $selected = '';
+% $selected = 'selected="selected"' if delete $CurrentValue{ $v };
+<option value="<% $v %>" <% $selected |n %>><% loc($ValuesLabel{ $v } || $v) %></option>
+% }
+
+% if ( $Alternative ) {
+% my $selected = '';
+% $selected = 'selected="selected"' if keys %CurrentValue;
+<option value="__alternative_value__" <% $selected |n %>><% $AlternativeLabel %></option>
+% }
+
+</select>
+% if ( $Alternative ) {
+<input type="text" class="alternative" name="Alternative-<% $Name %>" value="<% join ', ', @CurrentValue %>" />
+% }
+<%INIT>
+my %CurrentValue = map {$_ => 1} grep defined, @CurrentValue;
+if ( $ValuesCallback ) {
+ my $values = $ValuesCallback->(
+ CurrentUser => $session{'CurrentUser'},
+ Name => $Name,
+ );
+ if ( ref $values eq 'ARRAY' ) {
+ @Values = @$values;
+ } else {
+ %ValuesLabel = %$values;
+ @Values = keys %ValuesLabel;
+ }
+}
+unless (defined $DefaultLabel ) {
+ $DefaultLabel = loc('Use system default ([_1])', join ', ', map{ loc($ValuesLabel{$_} || $_) } @DefaultValue);
+}
+</%INIT>
+</%METHOD>
+
+<%METHOD Process>
+<%ARGS>
+$Name
+
+$Arguments => {},
+
+@Values => (),
+%ValuesLabel => (),
+
+$Default => 0,
+@DefaultValue => (),
+
+$Alternative => 0,
+$Multiple => 0,
+</%ARGS>
+<%INIT>
+my $value = $Arguments->{ $Name };
+if( !defined $value || $value eq '__empty_value__' ) {
+ return undef if $Default;
+ return [ @DefaultValue ] if $Multiple;
+ return $DefaultValue[0];
+}
+$value = [$value] unless ref $value;
+
+if ( $Alternative ) {
+ my $alt = $Arguments->{ "Alternative-". $Name };
+ if( $Multiple ) {
+ push @$value, split /\s*,\s*/, $alt;
+ } else {
+ push @$value, $alt;
+ }
+}
+
+splice @$value, 1 unless $Multiple;
+
+# XXX: check values
+
+return $value->[0] unless $Multiple;
+return $value;
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Widgets/Form/String b/rt/share/html/Widgets/Form/String
new file mode 100644
index 0000000..de5c700
--- /dev/null
+++ b/rt/share/html/Widgets/Form/String
@@ -0,0 +1,108 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%DOC>
+see docs/using_forms_widgets.pod
+</%DOC>
+<div id="form-box-<% lc $Name %>" class="widget">
+<span class="description label"><% $Description %></span>
+<span class="value"><& SELF:InputOnly, %ARGS &></span>
+% if ( $Default ) {
+<span class="comment"><% $DefaultLabel %></span>
+% }
+<span class="hints"><% $Hints %></span>
+</div>
+<%ARGS>
+$Name
+
+$Description => undef,
+$Hints => ''
+
+$CurrentValue => '',
+
+$Default => 0,
+$DefaultValue => '',
+$DefaultLabel => loc( 'Default: [_1]', $DefaultValue ),
+</%ARGS>
+
+<%METHOD InputOnly>
+<input type="<% $Type %>" name="<% $Name %>" value="<% $CurrentValue || '' %>" />\
+<%ARGS>
+$Name
+$CurrentValue => '',
+$Type => 'text'
+</%ARGS>
+</%METHOD>
+
+<%METHOD Process>
+<%ARGS>
+$Name
+
+$Arguments => {},
+
+$Default => 0,
+$DefaultValue => '',
+</%ARGS>
+<%INIT>
+my $value = $Arguments->{ $Name };
+$value = '' unless defined $value;
+
+# canonicalize: delete leading and trailing spaces, replaces newlines
+# with one space and then replace all continuouse spaces with one ' '
+# (including tabs and other fancy things)
+$value =~ s/^\s+//;
+$value =~ s/\s+$//;
+$value =~ s/\r*\n/ /g;
+$value =~ s/\s+$/ /g;
+
+if ( $value eq '' ) {
+ return $DefaultValue unless $Default;
+ return undef;
+}
+return $value;
+</%INIT>
+</%METHOD>
diff --git a/rt/share/html/Widgets/SavedSearch b/rt/share/html/Widgets/SavedSearch
new file mode 100644
index 0000000..d3348b3
--- /dev/null
+++ b/rt/share/html/Widgets/SavedSearch
@@ -0,0 +1,189 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%method new>
+<%init>
+return \%ARGS;
+</%init>
+</%method>
+
+<%method process>
+
+<%init>
+my @actions;
+my @Objects = RT::SavedSearches->new( $session{CurrentUser} )->_PrivacyObjects;
+push @Objects, RT::System->new($session{'CurrentUser'})
+ if $session{'CurrentUser'}->HasRight( Object=> $RT::System,
+ Right => 'SuperUser' );
+$self->{SearchId} ||= $args->{'SavedChartSearchId'} || 'new';
+
+my $SearchParams = { map { $_ => $args->{$_} } @{$self->{SearchFields}} };
+
+if ( my ( $container_object, $search_id ) = _parse_saved_search(
+ $args->{'SavedSearchLoad'} || $args->{'SavedChartSearchId'} ) ) {
+ my $search = $container_object->Attributes->WithId($search_id);
+ # We have a $search and now; import the others
+ $self->{SearchId} = $args->{'SavedSearchLoad'} ||
+ $args->{'SavedChartSearchId'};
+ $self->{CurrentSearch}{Object} = $search;
+ if ( $args->{'SaveSearchLoad'} ) {
+ for ( @{ $self->{SearchFields} } ) {
+ $args->{$_} = $search->SubValue($_)
+ }
+ }
+
+ $args->{SavedChartSearchId} = $args->{'SavedSearchLoad'}
+ if $args->{'SavedSearchLoad'};
+# saved search in /Search/Chart.html is different from /Search/Build.html
+# the former is of type 'Chart', while the latter is of type 'Ticket'.
+# After loading a saved search from the former after loading one from the
+# latter, accessing /Search/Build.html will still show the old one, so we
+# need to delete $session{CurrentSearchHash} to let it not show the old one.
+# of course, the new one should not be shown there either because it's of
+# different type
+ delete $session{'CurrentSearchHash'};
+}
+
+# look for the current one in the available saved searches
+if ($self->{SearchId} eq 'new') {
+ for my $obj (@Objects) {
+ for ( $m->comp( "/Search/Elements/SearchesForObject", Object => $obj ) ) {
+ my ( $desc, $search ) = @$_;
+ use Data::Dumper;
+ # FFS
+ local $Data::Dumper::Sortkeys = 1;
+ if ( Dumper( $search->Content ) eq
+ Dumper( { %$SearchParams, SearchType => $self->{SearchType} } ) ) {
+ $self->{CurrentSearch}{Object} = $search;
+ $self->{SearchId} = $search->Id;
+ }
+ }
+ }
+}
+
+if ( $args->{SavedSearchSave} ) {
+ if ( my $search = $self->{CurrentSearch}{Object} ) {
+ # rename
+ $search->SetDescription( $args->{SavedSearchDescription} );
+ $search->SetSubValues(%$SearchParams);
+ push @actions, loc( '[_1] [_2] updated.', loc($self->{SearchType}), $args->{SavedSearchDescription} );
+ }
+ else {
+ # new saved search
+ my $saved_search = RT::SavedSearch->new( $session{'CurrentUser'} );
+ my ( $ok, $search_msg ) = $saved_search->Save(
+ Privacy => $args->{'SavedSearchOwner'},
+ Name => $args->{'SavedSearchDescription'},
+ Type => $self->{'SearchType'},
+ SearchParams => $SearchParams
+ );
+ if ($ok) {
+ $self->{CurrentSearch}{Object} = $saved_search->{Attribute};
+ $self->{SearchId} = $args->{SavedChartSearchId} = 'RT::User-' .
+ $session{CurrentUser}->id . '-SavedSearch-' .
+ $saved_search->Id;
+ push @actions, loc( '[_1] [_2] saved.', loc($self->{SearchType}), $args->{SavedSearchDescription} );
+ } else {
+ push @actions,
+ [ loc("Can't save [_1]", loc($self->{SearchType})) . ': ' . loc($search_msg), 0 ];
+ }
+ }
+}
+
+if ( $args->{SavedSearchDelete} && $self->{CurrentSearch}{Object} ) {
+ my ($ok, $msg) = $self->{CurrentSearch}{Object}->Delete;
+ push @actions, $ok ? loc( '[_1] [_2] deleted.', loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description ) : $msg;
+ delete $self->{CurrentSearch}{Object};
+ delete $self->{SearchId};
+ delete $args->{SavedChartSearchId};
+}
+
+$self->{CurrentSearch}{Description} = $self->{CurrentSearch}{Object}->Description
+ if $self->{CurrentSearch}{Object};
+
+return @actions;
+</%init>
+<%ARGS>
+$self
+$args
+</%ARGS>
+
+</%method>
+
+<%method show>
+<form method="post" action="<% $Action %>" name="SaveSearch">
+<& /Search/Elements/EditSearches,
+ Id => $self->{SearchId} || 'new',
+ Type => $self->{SearchType},
+ CurrentSearch => $self->{CurrentSearch},
+ Title => $Title,
+ AllowCopy => 0,
+ $self->{CurrentSearch}{Object} ?
+ ( Object => $self->{CurrentSearch}{Object},
+ Description => $self->{CurrentSearch}{Object}->Description, ) : (),
+&><br />
+<%PERL>
+foreach my $field ( @{$self->{SearchFields}} ) {
+ if ( ref($ARGS{$field}) && ref($ARGS{$field}) ne 'ARRAY' ) {
+ $RT::Logger->error("Couldn't store '$field'. it's reference to ". ref($ARGS{$field}) );
+ next;
+ }
+ foreach my $value ( grep defined, ref($ARGS{$field})? @{ $ARGS{$field} } : $ARGS{$field} ) {
+</%PERL>
+<input type="hidden" class="hidden" name="<% $field %>" value="<% $value %>" />
+% }
+% }
+<input type="hidden" class="hidden" name="SavedChartSearchId" value="<% $self->{SearchId} || 'new' %>" />
+</form>
+<%ARGS>
+$self => undef
+$Action => ''
+$Title => loc('Saved searches')
+</%ARGS>
+<%init>
+</%init>
+</%method>
diff --git a/rt/share/html/Widgets/SelectionBox b/rt/share/html/Widgets/SelectionBox
new file mode 100644
index 0000000..fe64948
--- /dev/null
+++ b/rt/share/html/Widgets/SelectionBox
@@ -0,0 +1,254 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%# The SelectionBox Widget
+%#
+%# SYNOPSIS
+%#
+%# include javascript:
+%# <& /Widgets/SelectionBox:header &>
+%#
+%# <%init>:
+%# my $sel = $m->comp ('/Widgets/SelectionBox:new',
+%# Action => me.html',
+%# Name => 'my-selection',
+%# Available => \@items,
+%# # you can do things with @{$sel->{Current}} in the
+%# # OnSubmit callback
+%# OnSubmit => sub { my $sel = shift; },
+%# Selected => \@selected);
+%#
+%# $m->comp ('/Widgets/SelectionBox:process', %ARGS, self => $sel)
+%#
+%# where @items is an arrayref, each element is [value, label],
+%# and @selected is an arrayref of selected values from @items.
+%#
+%# and in html:
+%# <& /Widgets/SelectionBox:show, self => $sel &>
+%#
+%# if the SelectionBox is created with AutoSave option, OnSubmit will be called
+%# on every button clicked in non-js mode.
+<%method header>
+% unless ($nojs) {
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/class.js"></script>
+<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/list.js"></script>
+% }
+<%ARGS>
+$nojs => 0
+</%ARGS>
+</%method>
+
+<%method new>
+<%init>
+$ARGS{_item_map} = {map {$_->[0] => $_->[1]} @{$ARGS{Available}}};
+return \%ARGS;
+</%init>
+</%method>
+
+<%method process>
+<%init>
+unless ($ARGS{$self->{Name}.'-Submit'}) {
+ # init
+ $self->{Current} = $self->{Selected};
+ $self->{Selected} = [];
+ return;
+}
+
+$self->{Selected} = $ARGS{$self->{Name}.'-Selected'};
+if ($self->{Selected} && !ref($self->{Selected})) {
+ $self->{Selected} = [$self->{Selected}];
+}
+
+if ($ARGS{fromjs}) {
+ $self->{Current} = $self->{Selected};
+}
+else {
+ my $current = $self->{Current} = $ARGS{$self->{Name}.'-Current'};
+ if ($current && !ref ($current)) {
+ $current = [$current];
+ }
+
+ unless ($self->{ReadOnly}) {
+ ++$self->{Modified};
+ if ($ARGS{add}) {
+ my $choosed = $ARGS{$self->{Name}.'-Available'};
+ for my $add (ref($choosed) ? @$choosed : $choosed) {
+ next if grep { $_ eq $add } @$current;
+ push @$current, $add;
+ }
+ }
+
+ if ($ARGS{remove}) {
+ my $choosed = $ARGS{$self->{Name}.'-Selected'};
+ for my $del (ref($choosed) ? @$choosed : $choosed) {
+ @$current = map { $_ eq $del ? () : $_ } @$current;
+ }
+ }
+
+ if ($ARGS{moveup} or $ARGS{movedown}) {
+ my $offset = $ARGS{moveup} ? 1 : 0;
+ my $choosed = $ARGS{$self->{Name}.'-Selected'};
+ $choosed = [$choosed] unless ref ($choosed);
+ my $canmove = 0; # not in the cornor
+ for my $i ($ARGS{moveup} ? 0..$#{$current} : reverse 0..$#{$current}) {
+ if (grep {$_ eq $current->[$i]} @$choosed) {
+ if ($canmove) {
+ splice (@$current, $i-$offset, 2,
+ @{$current}[$i+1-$offset,$i-$offset]);
+ }
+ }
+ else {
+ ++$canmove;
+ }
+ }
+ }
+
+ if ($ARGS{clear}) {
+ $current = [];
+ }
+
+ $self->{Current} = $current;
+ }
+}
+
+@{$self->{Current}} = grep { exists $self->{_item_map}{$_} } @{$self->{Current}};
+
+if ($self->{AutoSave} or $ARGS{$self->{Name}.'-Save'}) {
+ $self->{OnSubmit}->($self);
+ delete $self->{Modified};
+}
+
+</%init>
+<%ARGS>
+$self => undef
+</%ARGS>
+
+</%method>
+
+<%method current>
+% for (@{$self->{Current}}) {
+<input type="hidden" class="hidden" name="<% $self->{Name} %>-Current" value="<%$_%>" />
+% }
+<%INIT>
+</%INIT>
+<%ARGS>
+$self => undef
+</%ARGS>
+
+</%method>
+
+<%method show>
+<form method="post" action="<%$self->{Action}%>" name="SelectionBox-<% $name %>" id="SelectionBox-<% $name %>"
+% unless ($nojs) {
+onsubmit="list_<% $name %>.selectAll();"
+% }
+>
+<input type="hidden" class="hidden" name="<% $self->{Name} %>-Submit" value="1" />
+<& SelectionBox:current, self => $self &>
+<input type="hidden" class="hidden" name="fromjs" value="0" />
+<&|/l&>Available</&>:
+<br />
+<select name="<%$name%>-Available" id="<%$name%>-Available" size="<%$size%>" multiple="multiple">
+% for (@{$self->{Available}}) {
+<option value="<% $_->[0] %>"><% $_->[1] %></option>
+% }
+</select>
+
+% unless ($self->{ReadOnly}) {
+<input name="add" type="submit" class="button" value=" &rarr; " />
+% }
+
+<select name="<%$name%>-Selected" id="<%$name%>-Selected" size="<%$size%>" multiple="multiple">
+% for (@{$self->{Current}}) {
+<option value="<% $_ %>"
+% if (exists $selected{$_}) {
+selected="selected"
+% }
+><% $self->{_item_map}{$_} ||'' %></option>
+% }
+</select>
+% unless ($self->{'ReadOnly'}) {
+% unless ($ARGS{'NoArrows'}) {
+ <input name="moveup" type="submit" class="button" value=" &uarr; " />
+ <input name="movedown" type="submit" class="button" value=" &darr; " />
+% }
+ <input name="remove" type="submit" class="button" value="<&|/l&>Delete</&>" />
+% if ($ARGS{'Clear'}) {
+ <input name="clear" type="submit" class="button" value="<&|/l&>Clear</&>" />
+% }
+% if ( $ARGS{'ShowUpdate'} ) {
+ <input name="update" type="submit" class="button" value="<&|/l&>Update</&>" />
+% }
+% }
+
+% my $caption = "";
+% unless ($self->{'AutoSave'}) {
+% if ($self->{Modified}) {
+% $caption = loc('Selections modified. Please save your changes');
+% }
+<& /Elements/Submit, Caption => loc($caption), Label => loc('Save'), Name => $name.'-Save' &>
+% }
+</form>
+
+% unless ($nojs) {
+<script type="text/javascript">
+//<![CDATA[
+var list_<%$name%> = new list(document.getElementById("SelectionBox-<% $name %>"), 0, "list_<%$name%>");
+//]]>
+</script>
+% }
+<%ARGS>
+$self => undef
+$size => 10
+$nojs => 0
+</%ARGS>
+<%INIT>
+my $name = $self->{Name};
+my %selected = map {$_ => 1} @{$self->{Selected}};
+</%INIT>
+
+</%method>
diff --git a/rt/share/html/Widgets/TitleBox b/rt/share/html/Widgets/TitleBox
new file mode 100644
index 0000000..0e74377
--- /dev/null
+++ b/rt/share/html/Widgets/TitleBox
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="<% $class %>">
+ <& TitleBoxStart, %ARGS &><% $m->content | n %><& TitleBoxEnd &>
+</div>
+<%ARGS>
+$class => ''
+</%ARGS>
+
diff --git a/rt/share/html/Widgets/TitleBoxEnd b/rt/share/html/Widgets/TitleBoxEnd
new file mode 100755
index 0000000..402124e
--- /dev/null
+++ b/rt/share/html/Widgets/TitleBoxEnd
@@ -0,0 +1,59 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+ <hr class="clear" />
+ </div>
+</div>
+
+% #Manually flush the content buffer after each titlebox is displayed
+% $m->flush_buffer();
+
+<%ARGS>
+$title => undef
+$content => undef
+</%ARGS>
+
diff --git a/rt/share/html/Widgets/TitleBoxStart b/rt/share/html/Widgets/TitleBoxStart
new file mode 100755
index 0000000..624642e
--- /dev/null
+++ b/rt/share/html/Widgets/TitleBoxStart
@@ -0,0 +1,97 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div class="titlebox<% $class ? " $class " : '' %>" id="<% $id %>">
+ <div class="titlebox-title<% $title_class ? " $title_class" : ''%>">
+% if ($hideable) {
+ <span class="widget"><a href="#"
+ onclick="return rollup('<%$tid%>');"
+ title="Toggle visibility"></a>
+ </span>
+% }
+ <span class="left">
+ <% $title_href ? qq[<a href="$title_href">] : '' | n
+ %><% $title %><% $title_raw |n %><% $title_href ? "</a>" : '' |n%></span>
+ <span class="right<%($titleright_href || $titleright || $titleright_raw) ? '' : '-empty' %>">
+ <% $titleright_href ? qq[<a href="$titleright_href">] : '' | n %>
+ <% $titleright %><% $titleright_raw |n%><% $titleright_href ? "</a>" : '' |n%>
+ </span>
+ </div>
+ <div class="titlebox-content <% $bodyclass %>" id="<% $tid %>">
+
+<%ARGS>
+$class => ''
+$bodyclass => ''
+$title_href => ''
+$title => ''
+$title_raw => ''
+$title_class => ''
+$titleright_href => ''
+$titleright => ''
+$titleright_raw => ''
+$id => ''
+$hideable => 1
+</%ARGS>
+
+<%init>
+#
+# This should be pretty bulletproof
+#
+my $page = $m->request_comp->path;
+
+my $title_b64 = MIME::Base64::encode_base64(Encode::encode_utf8($title), '');
+
+my $tid = "TitleBox--$page--" .
+ join '--', ($class, $bodyclass, $title_b64, $id);
+
+$tid =~ s{[^A-Za-z0-9\-_:\.]+}{_}g;
+
+my $i = 0;
+$i++ while $m->notes("$tid-$i");
+$m->notes("$tid-$i" => 1);
+$tid = "$tid-$i";
+</%init>
diff --git a/rt/share/html/autohandler b/rt/share/html/autohandler
new file mode 100755
index 0000000..1bb2c93
--- /dev/null
+++ b/rt/share/html/autohandler
@@ -0,0 +1,61 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+use RT::Util;
+
+$m->callback( ARGSRef => \%ARGS, CallbackName => 'Init', CallbackPage => '/autohandler' );
+
+RT::Interface::Web::HandleRequest(\%ARGS);
+
+$m->comp( '/Elements/Footer', %ARGS );
+</%INIT>
+<%ARGS>
+$user => undef
+$pass => undef
+$menu => undef
+</%ARGS>
diff --git a/rt/share/html/dhandler b/rt/share/html/dhandler
new file mode 100644
index 0000000..f4478cb
--- /dev/null
+++ b/rt/share/html/dhandler
@@ -0,0 +1,54 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title=>loc("Page not found")&>
+<& /Elements/Tabs, Title=>loc("Page not found"), &>
+<h1><&|/l&>The page you requested could not be found</&></h1>
+<&|/l&>Please check the URL and try again.</&>
+<%init>
+$r->headers_out->{'Status'} = '404 File not found';
+</%init>
diff --git a/rt/share/html/index.html b/rt/share/html/index.html
new file mode 100755
index 0000000..ad9964c
--- /dev/null
+++ b/rt/share/html/index.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!--
+% $m->out('--'.'>');
+% $m->comp('/Elements/Header', Title=>loc("RT at a glance"), Refresh => $session{'home_refresh_interval'}||RT->Config->Get('HomePageRefreshInterval', $session{'CurrentUser'} ));
+% if (0) {
+%# -->
+<html><head>
+<meta http-equiv="refresh" content="30; url=http://bestpractical.com/rt/rt-broken-install.html">
+<title>Almost there!</title></head>
+<body>
+
+<img src="http://www.bestpractical.com/images/unconfigured-rtlogo.jpg" />
+<br /><br />
+<h1>You're almost there!</h1>
+You haven't yet configured your webserver to run RT.
+
+You appear to have installed RT's web interface correctly, but haven't yet configured your web
+server to "run" the RT server which powers the web interface.
+
+The next step is to edit your webserver's configuration file to instruct it to use
+RT's <strong>mod_perl</strong>, <strong>FastCGI</strong> or <strong>SpeedyCGI</strong> handler.
+
+If you need commercial support, please contact us at sales@bestpractical.com.
+
+
+<!--
+% }
+
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Tabs,
+ Title => loc("RT at a glance"),
+ current_tab => 'index.html',
+ current_toptab => 'index.html',
+ tabs => $tabs,
+ actions => $actions,
+ &>
+<& /Elements/ListActions, actions => \@results &>
+<& /Elements/MyRT &>
+<%init>
+
+my @results;
+my $skip_create = 0;
+
+$m->callback( ARGSRef => \%ARGS, results => \@results, CallbackName => 'Initial',
+ skip_create => \$skip_create );
+
+if ( $ARGS{'QuickCreate'} ) {
+ my $QueueObj = new RT::Queue($session{'CurrentUser'});
+ $QueueObj->Load($ARGS{Queue}) or Abort(loc("Queue could not be loaded."));
+
+ my $CFs = $QueueObj->TicketCustomFields();
+
+ my $ValidCFs = $m->comp(
+ '/Elements/ValidateCustomFields',
+ CustomFields => $CFs,
+ ARGSRef => \%ARGS
+ );
+
+
+ if ( $ValidCFs && !$skip_create ) {
+ my ($t, $msg) = CreateTicket(
+ Queue => $ARGS{'Queue'},
+ Owner => $ARGS{'Owner'},
+ Status => 'new',
+ # yes! it's Requestors, not Requestor
+ Requestors => $ARGS{'Requestors'},
+ From => $session{'CurrentUser'}->EmailAddress,
+ Content => $ARGS{'Content'},
+ Subject => $ARGS{'Subject'});
+ push @results, $msg;
+ }
+ elsif ( !$ValidCFs ) {
+ push @results, "can't quickly create ticket in queue " .
+ $QueueObj->Name . ' because some custom fields need to be set, please go to normal ticket creation page to do that.';
+ }
+}
+
+
+if ( $ARGS{'q'} ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Search/Simple.html?q=".$m->interp->apply_escapes($ARGS{q}));
+}
+
+my $actions;
+if ($session{'CurrentUser'}->HasRight(Right => 'ModifySelf', Object => $RT::System)) {
+ $actions = {
+ A => { title => loc('Edit'),
+ path => 'Prefs/MyRT.html',
+ },
+ };
+}
+
+my $tabs = $m->comp("/Elements/DashboardTabs");
+</%init>
+
+%# --></body></html>
diff --git a/rt/share/html/l b/rt/share/html/l
new file mode 100755
index 0000000..c257722
--- /dev/null
+++ b/rt/share/html/l
@@ -0,0 +1,52 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+ my $hand = ($session{'CurrentUser'} ||= RT::CurrentUser->new)->LanguageHandle;
+ $m->print($hand->maketext($m->content,@_));
+ return(1);
+</%init>
diff --git a/rt/t/00-compile.t b/rt/t/00-compile.t
new file mode 100644
index 0000000..7257c3e
--- /dev/null
+++ b/rt/t/00-compile.t
@@ -0,0 +1,58 @@
+
+use strict;
+use warnings;
+
+use RT::Test nodata => 1, tests => 34;
+
+require_ok("RT");
+require_ok("RT::Test");
+require_ok("RT::ACL");
+require_ok("RT::Handle");
+require_ok("RT::Transaction");
+require_ok("RT::Interface::CLI");
+require_ok("RT::Interface::Email");
+require_ok("RT::Links");
+require_ok("RT::Queues");
+require_ok("RT::Scrips");
+require_ok("RT::Templates");
+require_ok("RT::Principals");
+require_ok("RT::Attachments");
+require_ok("RT::GroupMember");
+require_ok("RT::ScripAction");
+require_ok("RT::CustomFields");
+require_ok("RT::GroupMembers");
+require_ok("RT::ScripActions");
+require_ok("RT::Transactions");
+require_ok("RT::ScripCondition");
+require_ok("RT::Action::Generic");
+require_ok("RT::ScripConditions");
+require_ok("RT::Search::Generic");
+require_ok("RT::Search::Generic");
+require_ok("RT::Search::Generic");
+require_ok("RT::Search::Generic");
+require_ok("RT::Action::SendEmail");
+require_ok("RT::CachedGroupMembers");
+require_ok("RT::Condition::Generic");
+require_ok("RT::Interface::Web");
+require_ok("RT::SavedSearch");
+require_ok("RT::SavedSearches");
+require_ok("RT::Installer");
+require_ok("RT::Util");
+
+
+# no the following doesn't work yet
+__END__
+use File::Find::Rule;
+
+my @files = File::Find::Rule->file()
+ ->name( '*.pm' )
+ ->in( 'lib' );
+
+plan tests => scalar @files;
+
+for (@files) {
+ local $SIG{__WARN__} = sub {};
+ require_ok($_);
+}
+
+1;
diff --git a/rt/t/00-mason-syntax.t b/rt/t/00-mason-syntax.t
new file mode 100644
index 0000000..0584f63
--- /dev/null
+++ b/rt/t/00-mason-syntax.t
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use RT::Test tests => 1;
+
+my $ok = 1;
+
+use File::Find;
+find( {
+ no_chdir => 1,
+ wanted => sub {
+ return if /(?:\.(?:jpe?g|png|gif|rej)|\~)$/i;
+ return if m{/\.[^/]+\.swp$}; # vim swap files
+ return unless -f $_;
+ diag "testing $_" if $ENV{'TEST_VERBOSE'};
+ eval { compile_file($_) } and return;
+ $ok = 0;
+ diag "error in ${File::Find::name}:\n$@";
+ },
+}, RT::Test::get_relocatable_dir('../share/html'));
+ok($ok, "mason syntax is ok");
+
+use HTML::Mason;
+use HTML::Mason::Compiler;
+use HTML::Mason::Compiler::ToObject;
+BEGIN { require RT::Test; }
+use Encode qw(decode_utf8);
+
+sub compile_file {
+ my $file = shift;
+
+ my $text = decode_utf8(RT::Test->file_content($file));
+
+ my $compiler = new HTML::Mason::Compiler::ToObject;
+ $compiler->compile(
+ comp_source => $text,
+ name => 'my',
+ $HTML::Mason::VERSION >= 1.36? (comp_path => 'my'): (),
+ );
+ return 1;
+}
+
diff --git a/rt/t/api/ace.t b/rt/t/api/ace.t
new file mode 100644
index 0000000..4031046
--- /dev/null
+++ b/rt/t/api/ace.t
@@ -0,0 +1,238 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 76;
+
+
+{
+
+ok(require RT::ACE);
+
+
+}
+
+{
+
+my $Queue = RT::Queue->new($RT::SystemUser);
+
+is ($Queue->AvailableRights->{'DeleteTicket'} , 'Delete tickets', "Found the delete ticket right");
+is ($RT::System->AvailableRights->{'SuperUser'}, 'Do anything and everything', "Found the superuser right");
+
+
+
+}
+
+{
+
+use_ok('RT::User');
+my $user_a = RT::User->new($RT::SystemUser);
+$user_a->Create( Name => 'DelegationA', Privileged => 1);
+ok ($user_a->Id, "Created delegation user a");
+
+my $user_b = RT::User->new($RT::SystemUser);
+$user_b->Create( Name => 'DelegationB', Privileged => 1);
+ok ($user_b->Id, "Created delegation user b");
+
+
+use_ok('RT::Queue');
+my $q = RT::Queue->new($RT::SystemUser);
+$q->Create(Name =>'DelegationTest');
+ok ($q->Id, "Created a delegation test queue");
+
+
+#------ First, we test whether a user can delegate a right that's been granted to him personally
+my ($val, $msg) = $user_a->PrincipalObj->GrantRight(Object => $RT::System, Right => 'AdminOwnPersonalGroups');
+ok($val, $msg);
+
+($val, $msg) = $user_a->PrincipalObj->GrantRight(Object =>$q, Right => 'OwnTicket');
+ok($val, $msg);
+
+ok($user_a->HasRight( Object => $RT::System, Right => 'AdminOwnPersonalGroups') ,"user a has the right 'AdminOwnPersonalGroups' directly");
+
+my $a_delegates = RT::Group->new($user_a);
+$a_delegates->CreatePersonalGroup(Name => 'Delegates');
+ok( $a_delegates->Id ,"user a creates a personal group 'Delegates'");
+ok( $a_delegates->AddMember($user_b->PrincipalId) ,"user a adds user b to personal group 'delegates'");
+
+ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to OwnTicket' in queue 'DelegationTest'");
+ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to 'OwnTicket' in queue 'DelegationTest'");
+ok(!$user_a->HasRight( Object => $RT::System, Right => 'DelegateRights') ,"user a does not have the right 'delegate rights'");
+
+
+my $own_ticket_ace = RT::ACE->new($user_a);
+my $user_a_equiv_group = RT::Group->new($user_a);
+$user_a_equiv_group->LoadACLEquivalenceGroup($user_a->PrincipalObj);
+ok ($user_a_equiv_group->Id, "Loaded the user A acl equivalence group");
+my $user_b_equiv_group = RT::Group->new($user_b);
+$user_b_equiv_group->LoadACLEquivalenceGroup($user_b->PrincipalObj);
+ok ($user_b_equiv_group->Id, "Loaded the user B acl equivalence group");
+$own_ticket_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $user_a_equiv_group->PrincipalId, Object=>$q, RightName => 'OwnTicket');
+
+ok ($own_ticket_ace->Id, "Found the ACE we want to test with for now");
+
+
+($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ;
+ok( !$val ,"user a tries and fails to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
+
+
+($val, $msg) = $user_a->PrincipalObj->GrantRight( Right => 'DelegateRights');
+ok($val, "user a is granted the right to 'delegate rights' - $msg");
+
+ok($user_a->HasRight( Object => $RT::System, Right => 'DelegateRights') ,"user a has the right 'DeletgateRights'");
+
+($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ;
+
+ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
+ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
+my $delegated_ace = RT::ACE->new($user_a);
+$delegated_ace->LoadByValues ( Object => $q, RightName => 'OwnTicket', PrincipalType => 'Group',
+PrincipalId => $a_delegates->PrincipalId, DelegatedBy => $user_a->PrincipalId, DelegatedFrom => $own_ticket_ace->Id);
+ok ($delegated_ace->Id, "Found the delegated ACE");
+
+ok( $a_delegates->DeleteMember($user_b->PrincipalId) ,"user a removes b from pg 'delegates'");
+ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
+ok( $a_delegates->AddMember($user_b->PrincipalId) ,"user a adds user b to personal group 'delegates'");
+ok( $user_b->HasRight(Right => 'OwnTicket', Object=> $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
+ok( $delegated_ace->Delete ,"user a revokes pg 'delegates' right to 'OwnTickets' in queue 'DelegationTest'");
+ok( ! $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
+
+($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ;
+ok( $val ,"user a delegates pg 'delegates' right to 'OwnTickets' in queue 'DelegationTest' - $msg");
+
+ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
+
+($val, $msg) = $user_a->PrincipalObj->RevokeRight(Object=>$q, Right => 'OwnTicket');
+ok($val, "Revoked user a's right to own tickets in queue 'DelegationTest". $msg);
+
+ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'");
+
+ ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
+
+($val, $msg) = $user_a->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket');
+ok($val, $msg);
+
+ ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to own tickets in queue 'DelegationTest'");
+
+ ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
+
+# {{{ get back to a known clean state
+($val, $msg) = $user_a->PrincipalObj->RevokeRight( Object => $q, Right => 'OwnTicket');
+ok($val, "Revoked user a's right to own tickets in queue 'DelegationTest -". $msg);
+ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"make sure that user a can't own tickets in queue 'DelegationTest'");
+# }}}
+
+
+# {{{ Set up some groups and membership
+my $del1 = RT::Group->new($RT::SystemUser);
+($val, $msg) = $del1->CreateUserDefinedGroup(Name => 'Del1');
+ok( $val ,"create a group del1 - $msg");
+
+my $del2 = RT::Group->new($RT::SystemUser);
+($val, $msg) = $del2->CreateUserDefinedGroup(Name => 'Del2');
+ok( $val ,"create a group del2 - $msg");
+($val, $msg) = $del1->AddMember($del2->PrincipalId);
+ok( $val,"make del2 a member of del1 - $msg");
+
+my $del2a = RT::Group->new($RT::SystemUser);
+($val, $msg) = $del2a->CreateUserDefinedGroup(Name => 'Del2a');
+ok( $val ,"create a group del2a - $msg");
+($val, $msg) = $del2->AddMember($del2a->PrincipalId);
+ok($val ,"make del2a a member of del2 - $msg");
+
+my $del2b = RT::Group->new($RT::SystemUser);
+($val, $msg) = $del2b->CreateUserDefinedGroup(Name => 'Del2b');
+ok( $val ,"create a group del2b - $msg");
+($val, $msg) = $del2->AddMember($del2b->PrincipalId);
+ok($val ,"make del2b a member of del2 - $msg");
+
+($val, $msg) = $del2->AddMember($user_a->PrincipalId) ;
+ok($val,"make 'user a' a member of del2 - $msg");
+
+($val, $msg) = $del2b->AddMember($user_a->PrincipalId) ;
+ok($val,"make 'user a' a member of del2b - $msg");
+
+# }}}
+
+# {{{ Grant a right to a group and make sure that a submember can delegate the right and that it does not get yanked
+# when a user is removed as a submember, when they're a submember through another path
+($val, $msg) = $del1->PrincipalObj->GrantRight( Object=> $q, Right => 'OwnTicket');
+ok( $val ,"grant del1 the right to 'OwnTicket' in queue 'DelegationTest' - $msg");
+
+ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"make sure that user a can own tickets in queue 'DelegationTest'");
+
+my $group_ace= RT::ACE->new($user_a);
+$group_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $del1->PrincipalId, Object => $q, RightName => 'OwnTicket');
+
+ok ($group_ace->Id, "Found the ACE we want to test with for now");
+
+($val, $msg) = $group_ace->Delegate(PrincipalId => $a_delegates->PrincipalId);
+
+ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
+ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
+
+
+($val, $msg) = $del2b->DeleteMember($user_a->PrincipalId);
+ok( $val ,"remove user a from group del2b - $msg");
+ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to own tickets in queue 'DelegationTest'");
+ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
+
+# }}}
+
+# {{{ When a user is removed froom a group by the only path they're in there by, make sure the delegations go away
+($val, $msg) = $del2->DeleteMember($user_a->PrincipalId);
+ok( $val ,"remove user a from group del2 - $msg");
+ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest' ");
+ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest' ");
+# }}}
+
+($val, $msg) = $del2->AddMember($user_a->PrincipalId);
+ok( $val ,"make user a a member of group del2 - $msg");
+
+($val, $msg) = $del2->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket');
+ok($val, "grant the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg");
+
+my $del2_right = RT::ACE->new($user_a);
+$del2_right->LoadByValues( PrincipalId => $del2->PrincipalId, PrincipalType => 'Group', Object => $q, RightName => 'OwnTicket');
+ok ($del2_right->Id, "Found the right");
+
+($val, $msg) = $del2_right->Delegate(PrincipalId => $a_delegates->PrincipalId);
+ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' gotten via del2 to personal group 'delegates' - $msg");
+
+# They have it via del1 and del2
+ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
+
+
+($val, $msg) = $del2->PrincipalObj->RevokeRight(Object=>$q, Right => 'OwnTicket');
+ok($val, "revoke the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg");
+ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does has the right to own tickets in queue 'DelegationTest' via del1");
+ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
+
+($val, $msg) = $del2->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket');
+ok($val, "grant the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg");
+
+
+$group_ace= RT::ACE->new($user_a);
+$group_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $del1->PrincipalId, Object=>$q, RightName => 'OwnTicket');
+
+ok ($group_ace->Id, "Found the ACE we want to test with for now");
+
+($val, $msg) = $group_ace->Delegate(PrincipalId => $a_delegates->PrincipalId);
+
+ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg");
+
+ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'");
+
+($val, $msg) = $del2->DeleteMember($user_a->PrincipalId);
+ok( $val ,"remove user a from group del2 - $msg");
+
+ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'");
+
+ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'");
+
+
+
+
+}
+
+1;
diff --git a/rt/t/api/action-createtickets.t b/rt/t/api/action-createtickets.t
new file mode 100644
index 0000000..69ceb8d
--- /dev/null
+++ b/rt/t/api/action-createtickets.t
@@ -0,0 +1,240 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 49;
+
+
+{
+
+ok (require RT::Action::CreateTickets);
+use_ok('RT::Scrip');
+use_ok('RT::Template');
+use_ok('RT::ScripAction');
+use_ok('RT::ScripCondition');
+use_ok('RT::Ticket');
+
+my $approvalsq = RT::Queue->new($RT::SystemUser);
+$approvalsq->Create(Name => 'Approvals');
+ok ($approvalsq->Id, "Created Approvals test queue");
+
+
+my $approvals =
+'===Create-Ticket: approval
+Queue: Approvals
+Type: approval
+AdminCc: {join ("\nAdminCc: ",@admins) }
+Depended-On-By: {$Tickets{"TOP"}->Id}
+Refers-To: TOP
+Subject: Approval for ticket: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject}
+Due: {time + 86400}
+Content-Type: text/plain
+Content: Your approval is requested for the ticket {$Tickets{"TOP"}->Id}: {$Tickets{"TOP"}->Subject}
+Blah
+Blah
+ENDOFCONTENT
+===Create-Ticket: two
+Subject: Manager approval.
+Depended-On-By: approval
+Queue: Approvals
+Content-Type: text/plain
+Content:
+Your minion approved ticket {$Tickets{"TOP"}->Id}. you ok with that?
+ENDOFCONTENT
+';
+
+like ($approvals , qr/Content/, "Read in the approvals template");
+
+my $apptemp = RT::Template->new($RT::SystemUser);
+$apptemp->Create( Content => $approvals, Name => "Approvals", Queue => "0");
+
+ok ($apptemp->Id);
+
+my $q = RT::Queue->new($RT::SystemUser);
+$q->Create(Name => 'WorkflowTest');
+ok ($q->Id, "Created workflow test queue");
+
+my $scrip = RT::Scrip->new($RT::SystemUser);
+my ($sval, $smsg) =$scrip->Create( ScripCondition => 'On Transaction',
+ ScripAction => 'Create Tickets',
+ Template => 'Approvals',
+ Queue => $q->Id);
+ok ($sval, $smsg);
+ok ($scrip->Id, "Created the scrip");
+ok ($scrip->TemplateObj->Id, "Created the scrip template");
+ok ($scrip->ConditionObj->Id, "Created the scrip condition");
+ok ($scrip->ActionObj->Id, "Created the scrip action");
+
+my $t = RT::Ticket->new($RT::SystemUser);
+my($tid, $ttrans, $tmsg) = $t->Create(Subject => "Sample workflow test",
+ Owner => "root",
+ Queue => $q->Id);
+
+ok ($tid,$tmsg);
+
+my $deps = $t->DependsOn;
+is ($deps->Count, 1, "The ticket we created depends on one other ticket");
+my $dependson= $deps->First->TargetObj;
+ok ($dependson->Id, "It depends on a real ticket");
+unlike ($dependson->Subject, qr/{/, "The subject doesn't have braces in it. that means we're interpreting expressions");
+is ($t->ReferredToBy->Count,1, "It's only referred to by one other ticket");
+is ($t->ReferredToBy->First->BaseObj->Id,$t->DependsOn->First->TargetObj->Id, "The same ticket that depends on it refers to it.");
+use RT::Action::CreateTickets;
+my $action = RT::Action::CreateTickets->new( CurrentUser => $RT::SystemUser);
+
+# comma-delimited templates
+my $commas = <<"EOF";
+id,Queue,Subject,Owner,Content
+ticket1,General,"foo, bar",root,blah
+ticket2,General,foo bar,root,blah
+ticket3,General,foo' bar,root,blah'boo
+ticket4,General,foo' bar,,blah'boo
+EOF
+
+
+# Comma delimited templates with missing data
+my $sparse_commas = <<"EOF";
+id,Queue,Subject,Owner,Requestor
+ticket14,General,,,bobby
+ticket15,General,,,tommy
+ticket16,General,,suzie,tommy
+ticket17,General,Foo "bar" baz,suzie,tommy
+ticket18,General,'Foo "bar" baz',suzie,tommy
+ticket19,General,'Foo bar' baz,suzie,tommy
+EOF
+
+
+# tab-delimited templates
+my $tabs = <<"EOF";
+id\tQueue\tSubject\tOwner\tContent
+ticket10\tGeneral\t"foo' bar"\troot\tblah'
+ticket11\tGeneral\tfoo, bar\troot\tblah
+ticket12\tGeneral\tfoo' bar\troot\tblah'boo
+ticket13\tGeneral\tfoo' bar\t\tblah'boo
+EOF
+
+my %expected;
+
+$expected{ticket1} = <<EOF;
+Queue: General
+Subject: foo, bar
+Owner: root
+Content: blah
+ENDOFCONTENT
+EOF
+
+$expected{ticket2} = <<EOF;
+Queue: General
+Subject: foo bar
+Owner: root
+Content: blah
+ENDOFCONTENT
+EOF
+
+$expected{ticket3} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner: root
+Content: blah'boo
+ENDOFCONTENT
+EOF
+
+$expected{ticket4} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner:
+Content: blah'boo
+ENDOFCONTENT
+EOF
+
+$expected{ticket10} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner: root
+Content: blah'
+ENDOFCONTENT
+EOF
+
+$expected{ticket11} = <<EOF;
+Queue: General
+Subject: foo, bar
+Owner: root
+Content: blah
+ENDOFCONTENT
+EOF
+
+$expected{ticket12} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner: root
+Content: blah'boo
+ENDOFCONTENT
+EOF
+
+$expected{ticket13} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner:
+Content: blah'boo
+ENDOFCONTENT
+EOF
+
+
+$expected{'ticket14'} = <<EOF;
+Queue: General
+Subject:
+Owner:
+Requestor: bobby
+EOF
+$expected{'ticket15'} = <<EOF;
+Queue: General
+Subject:
+Owner:
+Requestor: tommy
+EOF
+$expected{'ticket16'} = <<EOF;
+Queue: General
+Subject:
+Owner: suzie
+Requestor: tommy
+EOF
+$expected{'ticket17'} = <<EOF;
+Queue: General
+Subject: Foo "bar" baz
+Owner: suzie
+Requestor: tommy
+EOF
+$expected{'ticket18'} = <<EOF;
+Queue: General
+Subject: Foo "bar" baz
+Owner: suzie
+Requestor: tommy
+EOF
+$expected{'ticket19'} = <<EOF;
+Queue: General
+Subject: 'Foo bar' baz
+Owner: suzie
+Requestor: tommy
+EOF
+
+
+
+
+$action->Parse(Content =>$commas);
+$action->Parse(Content =>$sparse_commas);
+$action->Parse(Content => $tabs);
+
+my %got;
+foreach (@{ $action->{'create_tickets'} }) {
+ $got{$_} = $action->{'templates'}->{$_};
+}
+
+foreach my $id ( sort keys %expected ) {
+ ok(exists($got{"create-$id"}), "template exists for $id");
+ is($got{"create-$id"}, $expected{$id}, "template is correct for $id");
+}
+
+
+}
+
+1;
diff --git a/rt/t/api/attachment.t b/rt/t/api/attachment.t
new file mode 100644
index 0000000..07c46ba
--- /dev/null
+++ b/rt/t/api/attachment.t
@@ -0,0 +1,45 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 4;
+
+
+{
+
+ok (require RT::Attachment);
+
+
+}
+
+{
+
+my $test1 = "From: jesse";
+my @headers = RT::Attachment->_SplitHeaders($test1);
+is ($#headers, 0, $test1 );
+
+my $test2 = qq{From: jesse
+To: bobby
+Subject: foo
+};
+
+@headers = RT::Attachment->_SplitHeaders($test2);
+is ($#headers, 2, "testing a bunch of singline multiple headers" );
+
+
+my $test3 = qq{From: jesse
+To: bobby,
+ Suzie,
+ Sally,
+ Joey: bizzy,
+Subject: foo
+};
+
+@headers = RT::Attachment->_SplitHeaders($test3);
+is ($#headers, 2, "testing a bunch of singline multiple headers" );
+
+
+
+}
+
+1;
diff --git a/rt/t/api/attribute-tests.t b/rt/t/api/attribute-tests.t
new file mode 100644
index 0000000..90c3ddb
--- /dev/null
+++ b/rt/t/api/attribute-tests.t
@@ -0,0 +1,86 @@
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 34;
+
+
+
+my $runid = rand(200);
+
+my $attribute = "squelch-$runid";
+
+ok(require RT::Attributes);
+
+my $user = RT::User->new($RT::SystemUser);
+ok (UNIVERSAL::isa($user, 'RT::User'));
+my ($id,$msg) = $user->Create(Name => 'attrtest-'.$runid);
+ok ($id, $msg);
+ok($user->id, "Created a test user");
+
+ok(1, $user->Attributes->BuildSelectQuery);
+my $attr = $user->Attributes;
+# XXX: Order by id as some tests depend on it
+$attr->OrderByCols({ FIELD => 'id' });
+
+ok(1, $attr->BuildSelectQuery);
+
+
+ok (UNIVERSAL::isa($attr,'RT::Attributes'), 'got the attributes object');
+
+($id, $msg) = $user->AddAttribute(Name => 'TestAttr', Content => 'The attribute has content');
+ok ($id, $msg);
+is ($attr->Count,1, " One attr after adding a first one");
+
+my $first_attr = $user->FirstAttribute('TestAttr');
+ok($first_attr, "got some sort of attribute");
+isa_ok($first_attr, 'RT::Attribute');
+is($first_attr->Content, 'The attribute has content', "got the right content back");
+
+($id, $msg) = $attr->DeleteEntry(Name => $runid);
+ok(!$id, "Deleted non-existant entry - $msg");
+is ($attr->Count,1, "1 attr after deleting an empty attr");
+
+my @names = $attr->Names;
+is ("@names", "TestAttr");
+
+
+($id, $msg) = $user->AddAttribute(Name => $runid, Content => "First");
+ok($id, $msg);
+
+my $runid_attr = $user->FirstAttribute($runid);
+ok($runid_attr, "got some sort of attribute");
+isa_ok($runid_attr, 'RT::Attribute');
+is($runid_attr->Content, 'First', "got the right content back");
+
+is ($attr->Count,2, " Two attrs after adding an attribute named $runid");
+($id, $msg) = $user->AddAttribute(Name => $runid, Content => "Second");
+ok($id, $msg);
+
+$runid_attr = $user->FirstAttribute($runid);
+ok($runid_attr, "got some sort of attribute");
+isa_ok($runid_attr, 'RT::Attribute');
+is($runid_attr->Content, 'First', "got the first content back still");
+
+is ($attr->Count,3, " Three attrs after adding a secondvalue to $runid");
+($id, $msg) = $attr->DeleteEntry(Name => $runid, Content => "First");
+ok($id, $msg);
+is ($attr->Count,2);
+
+#$attr->_DoSearch();
+($id, $msg) = $attr->DeleteEntry(Name => $runid, Content => "Second");
+ok($id, $msg);
+is ($attr->Count,1);
+
+#$attr->_DoSearch();
+ok(1, $attr->BuildSelectQuery);
+($id, $msg) = $attr->DeleteEntry(Name => "moose");
+ok(!$id, "Deleted non-existant entry - $msg");
+is ($attr->Count,1);
+
+ok(1, $attr->BuildSelectQuery);
+@names = $attr->Names;
+is("@names", "TestAttr");
+
+
+
+1;
diff --git a/rt/t/api/attribute.t b/rt/t/api/attribute.t
new file mode 100644
index 0000000..cb2626a
--- /dev/null
+++ b/rt/t/api/attribute.t
@@ -0,0 +1,42 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 7;
+
+
+{
+
+my $user = $RT::SystemUser;
+my ($id, $msg) = $user->AddAttribute(Name => 'SavedSearch', Content => { Query => 'Foo'} );
+ok ($id, $msg);
+my $attr = RT::Attribute->new($RT::SystemUser);
+$attr->Load($id);
+is($attr->Name , 'SavedSearch');
+$attr->SetSubValues( Format => 'baz');
+
+my $format = $attr->SubValue('Format');
+is ($format , 'baz');
+
+$attr->SetSubValues( Format => 'bar');
+$format = $attr->SubValue('Format');
+is ($format , 'bar');
+
+$attr->DeleteAllSubValues();
+$format = $attr->SubValue('Format');
+is ($format, undef);
+
+$attr->SetSubValues(Format => 'This is a format');
+
+my $attr2 = RT::Attribute->new($RT::SystemUser);
+$attr2->Load($id);
+is ($attr2->SubValue('Format'), 'This is a format');
+$attr2->Delete;
+my $attr3 = RT::Attribute->new($RT::SystemUser);
+($id) = $attr3->Load($id);
+is ($id, 0);
+
+
+}
+
+1;
diff --git a/rt/t/api/cf.t b/rt/t/api/cf.t
new file mode 100644
index 0000000..98114c9
--- /dev/null
+++ b/rt/t/api/cf.t
@@ -0,0 +1,224 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings FATAL => 'all';
+
+use RT::Test tests => 139;
+
+# Before we get going, ditch all object_cfs; this will remove
+# all custom fields systemwide;
+my $object_cfs = RT::ObjectCustomFields->new($RT::SystemUser);
+$object_cfs->UnLimit();
+while (my $ocf = $object_cfs->Next) {
+ $ocf->Delete();
+}
+
+
+my $queue = RT::Queue->new( $RT::SystemUser );
+$queue->Create( Name => 'RecordCustomFields-'.$$ );
+ok ($queue->id, "Created the queue");
+
+my $queue2 = RT::Queue->new( $RT::SystemUser );
+$queue2->Create( Name => 'RecordCustomFields2' );
+
+my $ticket = RT::Ticket->new( $RT::SystemUser );
+$ticket->Create(
+ Queue => $queue->Id,
+ Requestor => 'root@localhost',
+ Subject => 'RecordCustomFields1',
+);
+
+my $cfs = $ticket->CustomFields;
+is( $cfs->Count, 0 );
+
+# Check that record has no any CF values yet {{{
+my $cfvs = $ticket->CustomFieldValues;
+is( $cfvs->Count, 0 );
+is( $ticket->FirstCustomFieldValue, undef );
+
+my $local_cf1 = RT::CustomField->new( $RT::SystemUser );
+$local_cf1->Create( Name => 'RecordCustomFields1-'.$$, Type => 'SelectSingle', Queue => $queue->id );
+$local_cf1->AddValue( Name => 'RecordCustomFieldValues11' );
+$local_cf1->AddValue( Name => 'RecordCustomFieldValues12' );
+
+my $local_cf2 = RT::CustomField->new( $RT::SystemUser );
+$local_cf2->Create( Name => 'RecordCustomFields2-'.$$, Type => 'SelectSingle', Queue => $queue->id );
+$local_cf2->AddValue( Name => 'RecordCustomFieldValues21' );
+$local_cf2->AddValue( Name => 'RecordCustomFieldValues22' );
+
+my $global_cf3 = RT::CustomField->new( $RT::SystemUser );
+$global_cf3->Create( Name => 'RecordCustomFields3-'.$$, Type => 'SelectSingle', Queue => 0 );
+$global_cf3->AddValue( Name => 'RecordCustomFieldValues31' );
+$global_cf3->AddValue( Name => 'RecordCustomFieldValues32' );
+
+my $local_cf4 = RT::CustomField->new( $RT::SystemUser );
+$local_cf4->Create( Name => 'RecordCustomFields4', Type => 'SelectSingle', Queue => $queue2->id );
+$local_cf4->AddValue( Name => 'RecordCustomFieldValues41' );
+$local_cf4->AddValue( Name => 'RecordCustomFieldValues42' );
+
+
+my @custom_fields = ($local_cf1, $local_cf2, $global_cf3);
+
+
+$cfs = $ticket->CustomFields;
+is( $cfs->Count, 3 );
+
+# Check that record has no any CF values yet {{{
+$cfvs = $ticket->CustomFieldValues;
+is( $cfvs->Count, 0 );
+is( $ticket->FirstCustomFieldValue, undef );
+
+# CF with ID -1 shouldnt exist at all
+$cfvs = $ticket->CustomFieldValues( -1 );
+is( $cfvs->Count, 0 );
+is( $ticket->FirstCustomFieldValue( -1 ), undef );
+
+$cfvs = $ticket->CustomFieldValues( 'SomeUnexpedCustomFieldName' );
+is( $cfvs->Count, 0 );
+is( $ticket->FirstCustomFieldValue( 'SomeUnexpedCustomFieldName' ), undef );
+
+for (@custom_fields) {
+ $cfvs = $ticket->CustomFieldValues( $_->id );
+ is( $cfvs->Count, 0 );
+
+ $cfvs = $ticket->CustomFieldValues( $_->Name );
+ is( $cfvs->Count, 0 );
+ is( $ticket->FirstCustomFieldValue( $_->id ), undef );
+ is( $ticket->FirstCustomFieldValue( $_->Name ), undef );
+}
+# }}}
+
+# try to add field value with fields that do not exist {{{
+my ($status, $msg) = $ticket->AddCustomFieldValue( Field => -1 , Value => 'foo' );
+ok(!$status, "shouldn't add value" );
+($status, $msg) = $ticket->AddCustomFieldValue( Field => 'SomeUnexpedCustomFieldName' , Value => 'foo' );
+ok(!$status, "shouldn't add value" );
+# }}}
+
+# {{{
+SKIP: {
+
+ skip "TODO: We want fields that are not allowed to set unexpected values", 10;
+ for (@custom_fields) {
+ ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_ , Value => 'SomeUnexpectedCFValue' );
+ ok( !$status, 'value doesn\'t exist');
+
+ ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_->id , Value => 'SomeUnexpectedCFValue' );
+ ok( !$status, 'value doesn\'t exist');
+
+ ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_->Name , Value => 'SomeUnexpectedCFValue' );
+ ok( !$status, 'value doesn\'t exist');
+ }
+
+ # Let check that we did not add value to be sure
+ # using only FirstCustomFieldValue sub because
+ # we checked other variants allready
+ for (@custom_fields) {
+ is( $ticket->FirstCustomFieldValue( $_->id ), undef );
+ }
+
+}
+# Add some values to our custom fields
+for (@custom_fields) {
+ # this should be tested elsewhere
+ $_->AddValue( Name => 'Foo' );
+ $_->AddValue( Name => 'Bar' );
+}
+
+my $test_add_delete_cycle = sub {
+ my $cb = shift;
+ for (@custom_fields) {
+ ($status, $msg) = $ticket->AddCustomFieldValue( Field => $cb->($_) , Value => 'Foo' );
+ ok( $status, "message: $msg");
+ }
+
+ # does it exist?
+ $cfvs = $ticket->CustomFieldValues;
+ is( $cfvs->Count, 3, "We found all three custom fields on our ticket" );
+ for (@custom_fields) {
+ $cfvs = $ticket->CustomFieldValues( $_->id );
+ is( $cfvs->Count, 1 , "we found one custom field when searching by id");
+
+ $cfvs = $ticket->CustomFieldValues( $_->Name );
+ is( $cfvs->Count, 1 , " We found one custom field when searching by name for " . $_->Name);
+ is( $ticket->FirstCustomFieldValue( $_->id ), 'Foo' , "first value by id is foo");
+ is( $ticket->FirstCustomFieldValue( $_->Name ), 'Foo' , "first value by name is foo");
+ }
+ # because our CFs are SingleValue then new value addition should override
+ for (@custom_fields) {
+ ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_ , Value => 'Bar' );
+ ok( $status, "message: $msg");
+ }
+ $cfvs = $ticket->CustomFieldValues;
+ is( $cfvs->Count, 3 );
+ for (@custom_fields) {
+ $cfvs = $ticket->CustomFieldValues( $_->id );
+ is( $cfvs->Count, 1 );
+
+ $cfvs = $ticket->CustomFieldValues( $_->Name );
+ is( $cfvs->Count, 1 );
+ is( $ticket->FirstCustomFieldValue( $_->id ), 'Bar' );
+ is( $ticket->FirstCustomFieldValue( $_->Name ), 'Bar' );
+ }
+ # delete it
+ for (@custom_fields ) {
+ ($status, $msg) = $ticket->DeleteCustomFieldValue( Field => $_ , Value => 'Bar' );
+ ok( $status, "Deleted a custom field value 'Bar' for field ".$_->id.": $msg");
+ }
+ $cfvs = $ticket->CustomFieldValues;
+ is( $cfvs->Count, 0, "The ticket (".$ticket->id.") no longer has any custom field values" );
+ for (@custom_fields) {
+ $cfvs = $ticket->CustomFieldValues( $_->id );
+ is( $cfvs->Count, 0, $ticket->id." has no values for cf ".$_->id );
+
+ $cfvs = $ticket->CustomFieldValues( $_->Name );
+ is( $cfvs->Count, 0 , $ticket->id." has no values for cf '".$_->Name. "'" );
+ is( $ticket->FirstCustomFieldValue( $_->id ), undef , "There is no first custom field value when loading by id" );
+ is( $ticket->FirstCustomFieldValue( $_->Name ), undef, "There is no first custom field value when loading by Name" );
+ }
+};
+
+# lets test cycle via CF id
+$test_add_delete_cycle->( sub { return $_[0]->id } );
+# lets test cycle via CF object reference
+$test_add_delete_cycle->( sub { return $_[0] } );
+
+$ticket->AddCustomFieldValue( Field => $local_cf2->id , Value => 'Baz' );
+$ticket->AddCustomFieldValue( Field => $global_cf3->id , Value => 'Baz' );
+# now if we ask for cf values on RecordCustomFields4 we should not get any
+$cfvs = $ticket->CustomFieldValues( 'RecordCustomFields4' );
+is( $cfvs->Count, 0, "No custom field values for non-Queue cf" );
+is( $ticket->FirstCustomFieldValue( 'RecordCustomFields4' ), undef, "No first custom field value for non-Queue cf" );
+
+{
+ my $cfname = $global_cf3->Name;
+ ($status, $msg) = $global_cf3->SetDisabled(1);
+ ok($status, "Disabled CF named $cfname");
+
+ my $load = RT::CustomField->new( $RT::SystemUser );
+ $load->LoadByName( Name => $cfname);
+ ok($load->Id, "Loaded CF named $cfname");
+ is($load->Id, $global_cf3->Id, "Can load disabled CFs");
+
+ my $dup = RT::CustomField->new( $RT::SystemUser );
+ $dup->Create( Name => $cfname, Type => 'SelectSingle', Queue => 0 );
+ ok($dup->Id, "Created CF with duplicate name");
+
+ $load->LoadByName( Name => $cfname);
+ is($load->Id, $dup->Id, "Loading by name gets non-disabled first");
+
+ $dup->SetDisabled(1);
+ $global_cf3->SetDisabled(0);
+
+ $load->LoadByName( Name => $cfname);
+ is($load->Id, $global_cf3->Id, "Loading by name gets non-disabled first, even with order swapped");
+}
+
+#SKIP: {
+# skip "TODO: should we add CF values to objects via CF Name?", 48;
+# names are not unique
+ # lets test cycle via CF Name
+# $test_add_delete_cycle->( sub { return $_[0]->Name } );
+#}
+
+
diff --git a/rt/t/api/cf_combo_casacade.t b/rt/t/api/cf_combo_casacade.t
new file mode 100644
index 0000000..b37345a
--- /dev/null
+++ b/rt/t/api/cf_combo_casacade.t
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use RT::Test tests => 11;
+
+sub fails { ok(!$_[0], "This should fail: $_[1]") }
+sub works { ok($_[0], $_[1] || 'This works') }
+
+sub new (*) {
+ my $class = shift;
+ return $class->new($RT::SystemUser);
+}
+
+my $q = new(RT::Queue);
+works($q->Create(Name => "CF-Pattern-".$$));
+
+my $cf = new(RT::CustomField);
+my @cf_args = (Name => $q->Name, Type => 'Combobox', Queue => $q->id);
+
+works($cf->Create(@cf_args));
+
+# Set some CFVs with Category markers
+
+my $t = new(RT::Ticket);
+my ($id,undef,$msg) = $t->Create(Queue => $q->id, Subject => 'CF Test');
+works($id,$msg);
+
+sub add_works {
+ works(
+ $cf->AddValue(Name => $_[0], Description => $_[0], Category => $_[1])
+ );
+};
+
+add_works('value1', '1. Category A');
+add_works('value2');
+add_works('value3', '1.1. A-sub one');
+add_works('value4', '1.2. A-sub two');
+add_works('value5', '');
+
+my $cfv = $cf->Values->First;
+is($cfv->Category, '1. Category A');
+works($cfv->SetCategory('1. Category AAA'));
+is($cfv->Category, '1. Category AAA');
+
+1;
diff --git a/rt/t/api/cf_external.t b/rt/t/api/cf_external.t
new file mode 100644
index 0000000..0768712
--- /dev/null
+++ b/rt/t/api/cf_external.t
@@ -0,0 +1,56 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use RT;
+use RT::Test nodata => 1, tests => 11;
+
+sub new (*) {
+ my $class = shift;
+ return $class->new($RT::SystemUser);
+}
+
+use constant VALUES_CLASS => 'RT::CustomFieldValues::Groups';
+
+my $q = new( RT::Queue );
+isa_ok( $q, 'RT::Queue' );
+my ($qid) = $q->Create( Name => "CF-External-". $$ );
+ok( $qid, "created queue" );
+my %arg = ( Name => $q->Name,
+ Type => 'Select',
+ Queue => $q->id,
+ MaxValues => 1,
+ ValuesClass => VALUES_CLASS );
+
+my $cf = new( RT::CustomField );
+isa_ok( $cf, 'RT::CustomField' );
+
+{
+ my ($cfid) = $cf->Create( %arg );
+ ok( $cfid, "created cf" );
+ is( $cf->ValuesClass, VALUES_CLASS, "right values class" );
+ ok( $cf->IsExternalValues, "custom field has external values" );
+}
+
+{
+ # create at least on group for the tests
+ my $group = RT::Group->new( $RT::SystemUser );
+ my ($ret, $msg) = $group->CreateUserDefinedGroup( Name => $q->Name );
+ ok $ret, 'created group' or diag "error: $msg";
+}
+
+{
+ my $values = $cf->Values;
+ isa_ok( $values, VALUES_CLASS );
+ ok( $values->Count, "we have values" );
+ my ($failure, $count) = (0, 0);
+ while( my $value = $values->Next ) {
+ $count++;
+ $failure = 1 unless $value->Name;
+ }
+ ok( !$failure, "all values have name" );
+ is( $values->Count, $count, "count is correct" );
+}
+
+exit(0);
diff --git a/rt/t/api/cf_pattern.t b/rt/t/api/cf_pattern.t
new file mode 100644
index 0000000..89db2fe
--- /dev/null
+++ b/rt/t/api/cf_pattern.t
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use RT;
+use RT::Test tests => 17;
+
+
+sub fails { ok(!$_[0], "This should fail: $_[1]") }
+sub works { ok($_[0], $_[1] || 'This works') }
+
+sub new (*) {
+ my $class = shift;
+ return $class->new($RT::SystemUser);
+}
+
+my $q = new(RT::Queue);
+works($q->Create(Name => "CF-Pattern-".$$));
+
+my $cf = new(RT::CustomField);
+my @cf_args = (Name => $q->Name, Type => 'Freeform', Queue => $q->id, MaxValues => 1);
+
+fails($cf->Create(@cf_args, Pattern => ')))bad!regex((('));
+works($cf->Create(@cf_args, Pattern => 'good regex'));
+
+my $t = new(RT::Ticket);
+my ($id,undef,$msg) = $t->Create(Queue => $q->id, Subject => 'CF Test');
+works($id,$msg);
+
+# OK, I'm thoroughly brain washed by HOP at this point now...
+sub cnt { $t->CustomFieldValues($cf->id)->Count };
+sub add { $t->AddCustomFieldValue(Field => $cf->id, Value => $_[0]) };
+sub del { $t->DeleteCustomFieldValue(Field => $cf->id, Value => $_[0]) };
+
+is(cnt(), 0, "No values yet");
+fails(add('not going to match'));
+is(cnt(), 0, "No values yet");
+works(add('here is a good regex'));
+is(cnt(), 1, "Value filled");
+fails(del('here is a good regex'));
+is(cnt(), 1, "Single CF - Value _not_ deleted");
+
+$cf->SetMaxValues(0); # Unlimited MaxValues
+
+works(del('here is a good regex'));
+is(cnt(), 0, "Multiple CF - Value deleted");
+
+fails($cf->SetPattern('(?{ "insert evil code here" })'));
+works($cf->SetPattern('(?!)')); # reject everything
+fails(add(''));
+fails(add('...'));
+
+1;
diff --git a/rt/t/api/cf_single_values.t b/rt/t/api/cf_single_values.t
new file mode 100644
index 0000000..8e96edd
--- /dev/null
+++ b/rt/t/api/cf_single_values.t
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use RT;
+use RT::Test tests => 8;
+
+
+
+my $q = RT::Queue->new($RT::SystemUser);
+my ($id,$msg) =$q->Create(Name => "CF-Single-".$$);
+ok($id,$msg);
+
+my $cf = RT::CustomField->new($RT::SystemUser);
+($id,$msg) = $cf->Create(Name => 'Single-'.$$, Type => 'Select', MaxValues => '1', Queue => $q->id);
+ok($id,$msg);
+
+
+($id,$msg) =$cf->AddValue(Name => 'First');
+ok($id,$msg);
+
+($id,$msg) =$cf->AddValue(Name => 'Second');
+ok($id,$msg);
+
+
+my $t = RT::Ticket->new($RT::SystemUser);
+($id,undef,$msg) = $t->Create(Queue => $q->id,
+ Subject => 'CF Test');
+
+ok($id,$msg);
+is($t->CustomFieldValues($cf->id)->Count, 0, "No values yet");
+$t->AddCustomFieldValue(Field => $cf->id, Value => 'First');
+is($t->CustomFieldValues($cf->id)->Count, 1, "One now");
+
+$t->AddCustomFieldValue(Field => $cf->id, Value => 'Second');
+is($t->CustomFieldValues($cf->id)->Count, 1, "Still one");
+
+1;
diff --git a/rt/t/api/cf_transaction.t b/rt/t/api/cf_transaction.t
new file mode 100644
index 0000000..1ed2ab9
--- /dev/null
+++ b/rt/t/api/cf_transaction.t
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use Data::Dumper;
+
+use RT::Test tests => 14;
+use_ok('RT');
+use_ok('RT::Transactions');
+
+
+my $q = RT::Queue->new($RT::SystemUser);
+my ($id,$msg) = $q->Create( Name => 'TxnCFTest'.$$);
+ok($id,$msg);
+
+my $cf = RT::CustomField->new($RT::SystemUser);
+($id,$msg) = $cf->Create(Name => 'Txnfreeform-'.$$, Type => 'Freeform', MaxValues => '0', LookupType => RT::Transaction->CustomFieldLookupType );
+
+ok($id,$msg);
+
+($id,$msg) = $cf->AddToObject($q);
+
+ok($id,$msg);
+
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+
+my $transid;
+($id,$transid, $msg) = $ticket->Create(Queue => $q->id,
+ Subject => 'TxnCF test',
+ );
+ok($id,$msg);
+
+my $trans = RT::Transaction->new($RT::SystemUser);
+$trans->Load($transid);
+
+is($trans->ObjectId,$id);
+is ($trans->ObjectType, 'RT::Ticket');
+is ($trans->Type, 'Create');
+my $txncfs = $trans->CustomFields;
+is ($txncfs->Count, 1, "We have one custom field");
+my $txn_cf = $txncfs->First;
+is ($txn_cf->id, $cf->id, "It's the right custom field");
+my $values = $trans->CustomFieldValues($txn_cf->id);
+is ($values->Count, 0, "It has no values");
+
+# Old API
+my %cf_updates = ( 'CustomField-'.$cf->id => 'Testing');
+$trans->UpdateCustomFields( ARGSRef => \%cf_updates);
+
+ $values = $trans->CustomFieldValues($txn_cf->id);
+is ($values->Count, 1, "It has one value");
+
+# New API
+
+$trans->UpdateCustomFields( 'CustomField-'.$cf->id => 'Test two');
+ $values = $trans->CustomFieldValues($txn_cf->id);
+is ($values->Count, 2, "it has two values");
+
+# TODO ok(0, "Should updating custom field values remove old values?");
diff --git a/rt/t/api/condition-ownerchange.t b/rt/t/api/condition-ownerchange.t
new file mode 100644
index 0000000..4c4c49b
--- /dev/null
+++ b/rt/t/api/condition-ownerchange.t
@@ -0,0 +1,51 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 11;
+
+
+{
+
+my $q = RT::Queue->new($RT::SystemUser);
+$q->Create(Name =>'ownerChangeTest');
+
+ok($q->Id, "Created a scriptest queue");
+
+my $s1 = RT::Scrip->new($RT::SystemUser);
+my ($val, $msg) =$s1->Create( Queue => $q->Id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'On Owner Change',
+ CustomIsApplicableCode => '',
+ CustomPrepareCode => 'return 1',
+ CustomCommitCode => '
+ $self->TicketObj->SetPriority($self->TicketObj->Priority+1);
+ return(1);
+ ',
+ Template => 'Blank'
+ );
+ok($val,$msg);
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id,
+ Subject => "hair on fire",
+ InitialPriority => '20'
+ );
+ok($tv, $tm);
+ok($ticket->SetOwner('root'));
+is ($ticket->Priority , '21', "Ticket priority is set right");
+ok($ticket->Steal);
+is ($ticket->Priority , '22', "Ticket priority is set right");
+ok($ticket->Untake);
+is ($ticket->Priority , '23', "Ticket priority is set right");
+ok($ticket->Take);
+is ($ticket->Priority , '24', "Ticket priority is set right");
+
+
+
+
+
+
+}
+
+1;
diff --git a/rt/t/api/condition-reject.t b/rt/t/api/condition-reject.t
new file mode 100644
index 0000000..9678950
--- /dev/null
+++ b/rt/t/api/condition-reject.t
@@ -0,0 +1,45 @@
+#
+# Check that the "On Reject" scrip condition exists and is working
+#
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 7;
+
+
+{
+
+my $q = RT::Queue->new($RT::SystemUser);
+$q->Create(Name =>'rejectTest');
+
+ok($q->Id, "Created a scriptest queue");
+
+my $s1 = RT::Scrip->new($RT::SystemUser);
+my ($val, $msg) =$s1->Create( Queue => $q->Id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'On reject',
+ CustomIsApplicableCode => '',
+ CustomPrepareCode => 'return 1',
+ CustomCommitCode => '
+ $self->TicketObj->SetPriority($self->TicketObj->Priority+1);
+ return(1);
+ ',
+ Template => 'Blank'
+ );
+ok($val,$msg);
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id,
+ Subject => "hair on fire",
+ InitialPriority => '20'
+ );
+ok($tv, $tm);
+ok($ticket->SetStatus('rejected'), "Status set to \"rejected\"");
+is ($ticket->Priority , '21', "Condition is true, scrip triggered");
+ok($ticket->SetStatus('open'), "Status set to \"open\"");
+is ($ticket->Priority , '21', "Condition is false, scrip skipped");
+
+}
+
+1;
diff --git a/rt/t/api/currentuser.t b/rt/t/api/currentuser.t
new file mode 100644
index 0000000..c158048
--- /dev/null
+++ b/rt/t/api/currentuser.t
@@ -0,0 +1,32 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 8;
+
+
+{
+
+ok (require RT::CurrentUser);
+
+
+}
+
+{
+
+ok (my $cu = RT::CurrentUser->new('root'));
+ok (my $lh = $cu->LanguageHandle('en-us'));
+isnt ($lh, undef, '$lh is defined');
+ok ($lh->isa('Locale::Maketext'));
+is ($cu->loc('TEST_STRING'), "Concrete Mixer", "Localized TEST_STRING into English");
+SKIP: {
+ skip "French localization is not enabled", 2
+ unless grep $_ && $_ =~ /^(\*|fr)$/, RT->Config->Get('LexiconLanguages');
+ ok ($lh = $cu->LanguageHandle('fr'));
+ is ($cu->loc('before'), "avant", "Localized TEST_STRING into French");
+}
+
+
+}
+
+1;
diff --git a/rt/t/api/customfield.t b/rt/t/api/customfield.t
new file mode 100644
index 0000000..44319c4
--- /dev/null
+++ b/rt/t/api/customfield.t
@@ -0,0 +1,74 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 29;
+use Test::Warn;
+
+
+{
+
+use_ok('RT::CustomField');
+ok(my $cf = RT::CustomField->new($RT::SystemUser));
+ok(my ($id, $msg)= $cf->Create( Name => 'TestingCF',
+ Queue => '0',
+ SortOrder => '1',
+ Description => 'A Testing custom field',
+ Type=> 'SelectSingle'), 'Created a global CustomField');
+isnt($id , 0, 'Global custom field correctly created');
+ok ($cf->SingleValue);
+is($cf->Type, 'Select');
+is($cf->MaxValues, 1);
+
+(my $val, $msg) = $cf->SetMaxValues('0');
+ok($val, $msg);
+is($cf->Type, 'Select');
+is($cf->MaxValues, 0);
+ok(!$cf->SingleValue );
+ok(my ($bogus_val, $bogus_msg) = $cf->SetType('BogusType') , "Trying to set a custom field's type to a bogus type");
+is($bogus_val , 0, "Unable to set a custom field's type to a bogus type");
+
+ok(my $bad_cf = RT::CustomField->new($RT::SystemUser));
+ok(my ($bad_id, $bad_msg)= $cf->Create( Name => 'TestingCF-bad',
+ Queue => '0',
+ SortOrder => '1',
+ Description => 'A Testing custom field with a bogus Type',
+ Type=> 'SelectSingleton'), 'Created a global CustomField with a bogus type');
+is($bad_id , 0, 'Global custom field correctly decided to not create a cf with a bogus type ');
+
+
+}
+
+{
+
+ok(my $cf = RT::CustomField->new($RT::SystemUser));
+$cf->Load(1);
+is($cf->Id , 1);
+ok(my ($val,$msg) = $cf->AddValue(Name => 'foo' , Description => 'TestCFValue', SortOrder => '6'));
+isnt($val , 0);
+ok (my ($delval, $delmsg) = $cf->DeleteValue($val));
+ok ($delval,"Deleting a cf value: $delmsg");
+
+
+}
+
+{
+
+ok(my $cf = RT::CustomField->new($RT::SystemUser));
+
+warning_like {
+ok($cf->ValidateType('SelectSingle'));
+} qr/deprecated/;
+
+warning_like {
+ok($cf->ValidateType('SelectMultiple'));
+} qr/deprecated/;
+
+warning_like {
+ok(!$cf->ValidateType('SelectFooMultiple'));
+} qr/deprecated/;
+
+
+}
+
+1;
diff --git a/rt/t/api/date.t b/rt/t/api/date.t
new file mode 100644
index 0000000..bc1446f
--- /dev/null
+++ b/rt/t/api/date.t
@@ -0,0 +1,564 @@
+#!/usr/bin/perl
+
+use Test::MockTime qw(set_fixed_time restore_time);
+
+use Test::More;
+my $tests;
+
+my $localized_datetime_tests;
+BEGIN {
+ $tests = 167;
+ $localized_datetime_tests =
+ eval { require DateTime; 1; } && eval { require DateTime::Locale; 1; } &&
+ DateTime->can('format_cldr') && DateTime::Locale::root->can('date_format_full');
+
+ if ($localized_datetime_tests) {
+
+ # Include RT::Date::LocalizedDateTime tests
+ $tests += 7;
+ }
+}
+
+use warnings; use strict;
+use RT::Test tests => $tests;
+use RT::User;
+use Test::Warn;
+
+use_ok('RT::Date');
+{
+ my $date = RT::Date->new($RT::SystemUser);
+ isa_ok($date, 'RT::Date', "constructor returned RT::Date oject");
+ $date = $date->new($RT::SystemUser);
+ isa_ok($date, 'RT::Date', "constructor returned RT::Date oject");
+}
+
+{
+ # set timezone in all places to UTC
+ $RT::SystemUser->UserObj->__Set(Field => 'Timezone', Value => 'UTC')
+ if $RT::SystemUser->UserObj->Timezone;
+ RT->Config->Set( Timezone => 'UTC' );
+}
+
+my $current_user;
+{
+ my $user = RT::User->new($RT::SystemUser);
+ my($uid, $msg) = $user->Create(
+ Name => "date_api". rand(200),
+ Lang => 'en',
+ Privileged => 1,
+ );
+ ok($uid, "user was created") or diag("error: $msg");
+ $current_user = RT::CurrentUser->new($user);
+}
+
+{
+ my $date = RT::Date->new( $current_user );
+ is($date->Timezone, 'UTC', "dropped all timzones to UTC");
+ is($date->Timezone('user'), 'UTC', "dropped all timzones to UTC");
+ is($date->Timezone('server'), 'UTC', "dropped all timzones to UTC");
+ is($date->Timezone('unknown'), 'UTC', "with wrong context returns UTC");
+
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'Europe/Moscow');
+ is($current_user->UserObj->Timezone,
+ 'Europe/Moscow',
+ "successfuly changed user's timezone");
+ is($date->Timezone('user'),
+ 'Europe/Moscow',
+ "in user context returns user's timezone");
+ is($date->Timezone, 'UTC', "the deafult value is always UTC");
+ is($date->Timezone('server'), 'UTC', "wasn't changed");
+
+ RT->Config->Set( Timezone => 'Africa/Ouagadougou' );
+ is($date->Timezone('server'),
+ 'Africa/Ouagadougou',
+ "timezone of the RT server was changed");
+ is($date->Timezone('user'),
+ 'Europe/Moscow',
+ "in user context still returns user's timezone");
+ is($date->Timezone, 'UTC', "the deafult value is always UTC");
+
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => '');
+ is_empty($current_user->UserObj->Timezone,
+ "successfuly changed user's timezone");
+ is($date->Timezone('user'),
+ 'Africa/Ouagadougou',
+ "in user context returns timezone of the server if user's one is not defined");
+ is($date->Timezone, 'UTC', "the deafult value is always UTC");
+
+ RT->Config->Set( Timezone => 'GMT' );
+ is($date->Timezone('server'),
+ 'UTC',
+ "timezone is GMT which one is alias for UTC");
+
+ RT->Config->Set( Timezone => '' );
+ is($date->Timezone, 'UTC', "dropped all timzones to UTC");
+ is($date->Timezone('user'),
+ 'UTC',
+ "user's and server's timzones are not defined, so UTC");
+ is($date->Timezone('server'),
+ 'UTC',
+ "timezone of the server is not defined so UTC");
+
+ RT->Config->Set( Timezone => 'UTC' );
+}
+
+{
+ my $date = RT::Date->new($RT::SystemUser);
+ is($date->Unix, 0, "new date returns 0 in Unix format");
+ is($date->Get, '1970-01-01 00:00:00', "default is ISO format");
+ is($date->Get(Format =>'SomeBadFormat'),
+ '1970-01-01 00:00:00',
+ "don't know format, return ISO format");
+ is($date->Get(Format =>'W3CDTF'),
+ '1970-01-01T00:00:00Z',
+ "W3CDTF format with defaults");
+ is($date->Get(Format =>'RFC2822'),
+ 'Thu, 1 Jan 1970 00:00:00 +0000',
+ "RFC2822 format with defaults");
+ is($date->Get(Format =>'LocalizedDateTime'),
+ 'Thu, Jan 1, 1970 12:00:00 AM',
+ "LocalizedDateTime format with defaults") if ( $localized_datetime_tests );
+
+ is($date->ISO(Time => 0),
+ '1970-01-01',
+ "ISO format without time part");
+ is($date->W3CDTF(Time => 0),
+ '1970-01-01',
+ "W3CDTF format without time part");
+ is($date->RFC2822(Time => 0),
+ 'Thu, 1 Jan 1970',
+ "RFC2822 format without time part");
+ is($date->LocalizedDateTime(Time => 0),
+ 'Thu, Jan 1, 1970',
+ "LocalizedDateTime format without time part") if ( $localized_datetime_tests );
+
+ is($date->ISO(Date => 0),
+ '00:00:00',
+ "ISO format without date part");
+ is($date->W3CDTF(Date => 0),
+ '1970-01-01T00:00:00Z',
+ "W3CDTF format is incorrect without date part");
+ is($date->RFC2822(Date => 0),
+ '00:00:00 +0000',
+ "RFC2822 format without date part");
+ is($date->LocalizedDateTime(Date => 0),
+ '12:00:00 AM',
+ "LocalizedDateTime format without date part") if ( $localized_datetime_tests );
+
+ is($date->ISO(Date => 0, Seconds => 0),
+ '00:00',
+ "ISO format without date part and seconds");
+ is($date->W3CDTF(Date => 0, Seconds => 0),
+ '1970-01-01T00:00Z',
+ "W3CDTF format without seconds, but we ship date part even if Date is false");
+ is($date->RFC2822(Date => 0, Seconds => 0),
+ '00:00 +0000',
+ "RFC2822 format without date part and seconds");
+
+ is($date->RFC2822(DayOfWeek => 0),
+ '1 Jan 1970 00:00:00 +0000',
+ "RFC2822 format without 'day of week' part");
+ is($date->RFC2822(DayOfWeek => 0, Date => 0),
+ '00:00:00 +0000',
+ "RFC2822 format without 'day of week' and date parts(corner case test)");
+
+ is($date->LocalizedDateTime(AbbrDay => 0),
+ 'Thursday, Jan 1, 1970 12:00:00 AM',
+ "LocalizedDateTime format without abbreviation of day") if ( $localized_datetime_tests );
+ is($date->LocalizedDateTime(AbbrMonth => 0),
+ 'Thu, January 1, 1970 12:00:00 AM',
+ "LocalizedDateTime format without abbreviation of month") if ( $localized_datetime_tests );
+ is($date->LocalizedDateTime(DateFormat => 'date_format_short'),
+ '1/1/70 12:00:00 AM',
+ "LocalizedDateTime format with non default DateFormat") if ( $localized_datetime_tests );
+ is($date->LocalizedDateTime(TimeFormat => 'time_format_short'),
+ 'Thu, Jan 1, 1970 12:00 AM',
+ "LocalizedDateTime format with non default TimeFormat") if ( $localized_datetime_tests );
+
+ is($date->Date,
+ '1970-01-01',
+ "the default format for the 'Date' method is ISO");
+ is($date->Date(Format => 'W3CDTF'),
+ '1970-01-01',
+ "'Date' method, W3CDTF format");
+ is($date->Date(Format => 'RFC2822'),
+ 'Thu, 1 Jan 1970',
+ "'Date' method, RFC2822 format");
+ is($date->Date(Time => 1),
+ '1970-01-01',
+ "'Date' method doesn't pass through 'Time' argument");
+ is($date->Date(Date => 0),
+ '1970-01-01',
+ "'Date' method overrides 'Date' argument");
+
+ is($date->Time,
+ '00:00:00',
+ "the default format for the 'Time' method is ISO");
+ is($date->Time(Format => 'W3CDTF'),
+ '1970-01-01T00:00:00Z',
+ "'Time' method, W3CDTF format, date part is required by w3c doc");
+ is($date->Time(Format => 'RFC2822'),
+ '00:00:00 +0000',
+ "'Time' method, RFC2822 format");
+ is($date->Time(Date => 1),
+ '00:00:00',
+ "'Time' method doesn't pass through 'Date' argument");
+ is($date->Time(Time => 0),
+ '00:00:00',
+ "'Time' method overrides 'Time' argument");
+
+ is($date->DateTime,
+ '1970-01-01 00:00:00',
+ "the default format for the 'DateTime' method is ISO");
+ is($date->DateTime(Format =>'W3CDTF'),
+ '1970-01-01T00:00:00Z',
+ "'DateTime' method, W3CDTF format");
+ is($date->DateTime(Format =>'RFC2822'),
+ 'Thu, 1 Jan 1970 00:00:00 +0000',
+ "'DateTime' method, RFC2822 format");
+ is($date->DateTime(Date => 0, Time => 0),
+ '1970-01-01 00:00:00',
+ "the 'DateTime' method overrides both 'Date' and 'Time' arguments");
+}
+
+
+{ # positive timezone
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'Europe/Moscow');
+ my $date = RT::Date->new( $current_user );
+ $date->Set( Format => 'ISO', Timezone => 'utc', Value => '2005-01-01 15:10:00' );
+ is($date->ISO( Timezone => 'user' ), '2005-01-01 18:10:00', "ISO");
+ is($date->W3CDTF( Timezone => 'user' ), '2005-01-01T18:10:00+03:00', "W3C DTF");
+ is($date->RFC2822( Timezone => 'user' ), 'Sat, 1 Jan 2005 18:10:00 +0300', "RFC2822");
+
+ # DST
+ $date = RT::Date->new( $current_user );
+ $date->Set( Format => 'ISO', Timezone => 'utc', Value => '2005-07-01 15:10:00' );
+ is($date->ISO( Timezone => 'user' ), '2005-07-01 19:10:00', "ISO");
+ is($date->W3CDTF( Timezone => 'user' ), '2005-07-01T19:10:00+04:00', "W3C DTF");
+ is($date->RFC2822( Timezone => 'user' ), 'Fri, 1 Jul 2005 19:10:00 +0400', "RFC2822");
+}
+
+{ # negative timezone
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'America/New_York');
+ my $date = RT::Date->new( $current_user );
+ $date->Set( Format => 'ISO', Timezone => 'utc', Value => '2005-01-01 15:10:00' );
+ is($date->ISO( Timezone => 'user' ), '2005-01-01 10:10:00', "ISO");
+ is($date->W3CDTF( Timezone => 'user' ), '2005-01-01T10:10:00-05:00', "W3C DTF");
+ is($date->RFC2822( Timezone => 'user' ), 'Sat, 1 Jan 2005 10:10:00 -0500', "RFC2822");
+
+ # DST
+ $date = RT::Date->new( $current_user );
+ $date->Set( Format => 'ISO', Timezone => 'utc', Value => '2005-07-01 15:10:00' );
+ is($date->ISO( Timezone => 'user' ), '2005-07-01 11:10:00', "ISO");
+ is($date->W3CDTF( Timezone => 'user' ), '2005-07-01T11:10:00-04:00', "W3C DTF");
+ is($date->RFC2822( Timezone => 'user' ), 'Fri, 1 Jul 2005 11:10:00 -0400', "RFC2822");
+}
+
+warning_like
+{ # bad format
+ my $date = RT::Date->new($RT::SystemUser);
+ $date->Set( Format => 'bad' );
+ is($date->Unix, 0, "bad format");
+} qr'Unknown Date format: bad';
+
+
+{ # setting value via Unix method
+ my $date = RT::Date->new($RT::SystemUser);
+ $date->Unix(1);
+ is($date->ISO, '1970-01-01 00:00:01', "correct value");
+
+ foreach (undef, 0, ''){
+ $date->Unix(1);
+ is($date->ISO, '1970-01-01 00:00:01', "correct value");
+
+ $date->Set(Format => 'unix', Value => $_);
+ is($date->ISO, '1970-01-01 00:00:00', "Set a date to midnight 1/1/1970 GMT due to wrong call");
+ is($date->Unix, 0, "unix is 0 => unset");
+ }
+}
+
+my $year = (localtime(time))[5] + 1900;
+
+{ # set+ISO format
+ my $date = RT::Date->new($RT::SystemUser);
+ warning_like {
+ $date->Set(Format => 'ISO', Value => 'weird date');
+ } qr/Couldn't parse date 'weird date' as a ISO format/;
+ is($date->Unix, 0, "date was wrong => unix == 0");
+
+ # XXX: ISO format has more feature than we suport
+ # http://www.cl.cam.ac.uk/~mgk25/iso-time.html
+
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
+
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00+00');
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss+00");
+
+ $date->Set(Format => 'ISO', Value => '11-28 15:10:00');
+ is($date->ISO, $year .'-11-28 15:10:00', "DD-MM hh:mm:ss");
+
+ $date->Set(Format => 'ISO', Value => '11-28 15:10:00+00');
+ is($date->ISO, $year .'-11-28 15:10:00', "DD-MM hh:mm:ss+00");
+
+ $date->Set(Format => 'ISO', Value => '20051128151000');
+ is($date->ISO, '2005-11-28 15:10:00', "YYYYDDMMhhmmss");
+
+ $date->Set(Format => 'ISO', Value => '1128151000');
+ is($date->ISO, $year .'-11-28 15:10:00', "DDMMhhmmss");
+
+ $date->Set(Format => 'ISO', Value => '2005112815:10:00');
+ is($date->ISO, '2005-11-28 15:10:00', "YYYYDDMMhh:mm:ss");
+
+ $date->Set(Format => 'ISO', Value => '112815:10:00');
+ is($date->ISO, $year .'-11-28 15:10:00', "DDMMhh:mm:ss");
+
+ $date->Set(Format => 'ISO', Value => '2005-13-28 15:10:00');
+ is($date->Unix, 0, "wrong month value");
+
+ $date->Set(Format => 'ISO', Value => '2005-00-28 15:10:00');
+ is($date->Unix, 0, "wrong month value");
+
+ $date->Set(Format => 'ISO', Value => '1960-01-28 15:10:00');
+ is($date->Unix, 0, "too old, we don't support");
+}
+
+{ # set+datemanip format(Time::ParseDate)
+ my $date = RT::Date->new($RT::SystemUser);
+ $date->Set(Format => 'unknown', Value => 'weird date');
+ is($date->Unix, 0, "date was wrong");
+
+ RT->Config->Set( Timezone => 'Europe/Moscow' );
+ $date->Set(Format => 'datemanip', Value => '2005-11-28 15:10:00');
+ is($date->ISO, '2005-11-28 12:10:00', "YYYY-DD-MM hh:mm:ss");
+
+ RT->Config->Set( Timezone => 'UTC' );
+ $date->Set(Format => 'datemanip', Value => '2005-11-28 15:10:00');
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
+
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'Europe/Moscow');
+ $date = RT::Date->new( $current_user );
+ $date->Set(Format => 'datemanip', Value => '2005-11-28 15:10:00');
+ is($date->ISO, '2005-11-28 12:10:00', "YYYY-DD-MM hh:mm:ss");
+}
+
+{ # set+unknown format(Time::ParseDate)
+ my $date = RT::Date->new($RT::SystemUser);
+ $date->Set(Format => 'unknown', Value => 'weird date');
+ is($date->Unix, 0, "date was wrong");
+
+ RT->Config->Set( Timezone => 'Europe/Moscow' );
+ $date->Set(Format => 'unknown', Value => '2005-11-28 15:10:00');
+ is($date->ISO, '2005-11-28 12:10:00', "YYYY-DD-MM hh:mm:ss");
+
+ $date->Set(Format => 'unknown', Value => '2005-11-28 15:10:00', Timezone => 'utc' );
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
+
+ # test relative dates
+ {
+ set_fixed_time("2005-11-28T15:10:00Z");
+ $date->Set(Format => 'unknown', Value => 'now');
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
+
+ $date->Set(Format => 'unknown', Value => '1 day ago');
+ is($date->ISO, '2005-11-27 15:10:00', "YYYY-DD-MM hh:mm:ss");
+ restore_time();
+ }
+
+ RT->Config->Set( Timezone => 'UTC' );
+ $date->Set(Format => 'unknown', Value => '2005-11-28 15:10:00');
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
+
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'Europe/Moscow');
+ $date = RT::Date->new( $current_user );
+ $date->Set(Format => 'unknown', Value => '2005-11-28 15:10:00');
+ is($date->ISO, '2005-11-28 12:10:00', "YYYY-DD-MM hh:mm:ss");
+ $date->Set(Format => 'unknown', Value => '2005-11-28 15:10:00', Timezone => 'server' );
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
+ $date->Set(Format => 'unknown', Value => '2005-11-28 15:10:00', Timezone => 'utc' );
+ is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
+}
+
+{ # SetToMidnight
+ my $date = RT::Date->new($RT::SystemUser);
+
+ RT->Config->Set( Timezone => 'Europe/Moscow' );
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ $date->SetToMidnight;
+ is($date->ISO, '2005-11-28 00:00:00', "default is utc");
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ $date->SetToMidnight(Timezone => 'utc');
+ is($date->ISO, '2005-11-28 00:00:00', "utc context");
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ $date->SetToMidnight(Timezone => 'user');
+ is($date->ISO, '2005-11-27 21:00:00', "user context, user has no preference, fallback to server");
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ $date->SetToMidnight(Timezone => 'server');
+ is($date->ISO, '2005-11-27 21:00:00', "server context");
+
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'Europe/Moscow');
+ $date = RT::Date->new( $current_user );
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ $date->SetToMidnight;
+ is($date->ISO, '2005-11-28 00:00:00', "default is utc");
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ $date->SetToMidnight(Timezone => 'utc');
+ is($date->ISO, '2005-11-28 00:00:00', "utc context");
+ $date->Set(Format => 'ISO', Value => '2005-11-28 15:10:00');
+ $date->SetToMidnight(Timezone => 'user');
+ is($date->ISO, '2005-11-27 21:00:00', "user context");
+ $date->SetToMidnight(Timezone => 'server');
+ is($date->ISO, '2005-11-27 21:00:00', "server context");
+
+ RT->Config->Set( Timezone => 'UTC' );
+}
+
+{ # SetToNow
+ my $date = RT::Date->new($RT::SystemUser);
+ my $time = time;
+ $date->SetToNow;
+ ok($date->Unix >= $time, 'close enough');
+ ok($date->Unix < $time+5, 'difference is less than five seconds');
+}
+
+{
+ my $date = RT::Date->new($RT::SystemUser);
+
+ $date->Unix(0);
+ $date->AddSeconds;
+ is($date->ISO, '1970-01-01 00:00:00', "nothing changed");
+ $date->AddSeconds(0);
+ is($date->ISO, '1970-01-01 00:00:00', "nothing changed");
+
+ $date->Unix(0);
+ $date->AddSeconds(5);
+ is($date->ISO, '1970-01-01 00:00:05', "added five seconds");
+ $date->AddSeconds(-2);
+ is($date->ISO, '1970-01-01 00:00:03', "substracted two seconds");
+
+ $date->Unix(0);
+ $date->AddSeconds(3661);
+ is($date->ISO, '1970-01-01 01:01:01', "added one hour, minute and a second");
+
+# XXX: TODO, doesn't work with Test::Warn
+# TODO: {
+# local $TODO = "BUG or subject to change Date handling to support unix time <= 0";
+# $date->Unix(0);
+# $date->AddSeconds(-2);
+# ok($date->Unix > 0);
+# }
+
+ $date->Unix(0);
+ $date->AddDay;
+ is($date->ISO, '1970-01-02 00:00:00', "added one day");
+ $date->AddDays(2);
+ is($date->ISO, '1970-01-04 00:00:00', "added two days");
+ $date->AddDays(-1);
+ is($date->ISO, '1970-01-03 00:00:00', "substructed one day");
+
+ $date->Unix(0);
+ $date->AddDays(31);
+ is($date->ISO, '1970-02-01 00:00:00', "added one month");
+}
+
+{
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => '');
+ my $date = RT::Date->new( $current_user );
+ is($date->AsString, "Not set", "AsString returns 'Not set'");
+
+ RT->Config->Set( DateTimeFormat => '');
+ $date->Unix(1);
+ is($date->AsString, 'Thu Jan 01 00:00:01 1970', "correct string");
+ is($date->AsString(Date => 0), '00:00:01', "correct string");
+ is($date->AsString(Time => 0), 'Thu Jan 01 1970', "correct string");
+ is($date->AsString(Date => 0, Time => 0), 'Thu Jan 01 00:00:01 1970', "invalid input");
+
+ RT->Config->Set( DateTimeFormat => 'RFC2822' );
+ $date->Unix(1);
+ is($date->AsString, 'Thu, 1 Jan 1970 00:00:01 +0000', "correct string");
+
+ RT->Config->Set( DateTimeFormat => { Format => 'RFC2822', Seconds => 0 } );
+ $date->Unix(1);
+ is($date->AsString, 'Thu, 1 Jan 1970 00:00 +0000', "correct string");
+ is($date->AsString(Seconds => 1), 'Thu, 1 Jan 1970 00:00:01 +0000', "correct string");
+}
+
+{ # DurationAsString
+ my $date = RT::Date->new($RT::SystemUser);
+
+ is($date->DurationAsString(1), '1 sec', '1 sec');
+ is($date->DurationAsString(59), '59 sec', '59 sec');
+ is($date->DurationAsString(60), '1 min', '1 min');
+ is($date->DurationAsString(60*119), '119 min', '119 min');
+ is($date->DurationAsString(60*60*2-1), '120 min', '120 min');
+ is($date->DurationAsString(60*60*2), '2 hours', '2 hours');
+ is($date->DurationAsString(60*60*48-1), '48 hours', '48 hours');
+ is($date->DurationAsString(60*60*48), '2 days', '2 days');
+ is($date->DurationAsString(60*60*24*14-1), '14 days', '14 days');
+ is($date->DurationAsString(60*60*24*14), '2 weeks', '2 weeks');
+ is($date->DurationAsString(60*60*24*7*8-1), '8 weeks', '8 weeks');
+ is($date->DurationAsString(60*60*24*61), '2 months', '2 months');
+ is($date->DurationAsString(60*60*24*365-1), '12 months', '12 months');
+ is($date->DurationAsString(60*60*24*366), '1 years', '1 years');
+
+ is($date->DurationAsString(-1), '1 sec ago', '1 sec ago');
+}
+
+{ # DiffAsString
+ my $date = RT::Date->new($RT::SystemUser);
+ is($date->DiffAsString(1), '', 'no diff, wrong input');
+ is($date->DiffAsString(-1), '', 'no diff, wrong input');
+ is($date->DiffAsString('qwe'), '', 'no diff, wrong input');
+
+ $date->Unix(2);
+ is($date->DiffAsString(-1), '', 'no diff, wrong input');
+
+ is($date->DiffAsString(3), '1 sec ago', 'diff: 1 sec ago');
+ is($date->DiffAsString(1), '1 sec', 'diff: 1 sec');
+
+ my $ndate = RT::Date->new($RT::SystemUser);
+ is($date->DiffAsString($ndate), '', 'no diff, wrong input');
+ $ndate->Unix(3);
+ is($date->DiffAsString($ndate), '1 sec ago', 'diff: 1 sec ago');
+}
+
+{ # Diff
+ my $date = RT::Date->new($RT::SystemUser);
+ $date->SetToNow;
+ my $diff = $date->Diff;
+ ok($diff <= 0, 'close enought');
+ ok($diff > -5, 'close enought');
+}
+
+{ # AgeAsString
+ my $date = RT::Date->new($RT::SystemUser);
+ $date->SetToNow;
+ my $diff = $date->AgeAsString;
+ like($diff, qr/^(0 sec|[1-5] sec ago)$/, 'close enought');
+}
+
+{ # GetWeekday
+ my $date = RT::Date->new($RT::SystemUser);
+ is($date->GetWeekday(7), '', '7 and greater are invalid');
+ is($date->GetWeekday(6), 'Sat', '6 is Saturday');
+ is($date->GetWeekday(0), 'Sun', '0 is Sunday');
+ is($date->GetWeekday(-1), 'Sat', '-1 is Saturday');
+ is($date->GetWeekday(-7), 'Sun', '-7 is Sunday');
+ is($date->GetWeekday(-8), '', '-8 and lesser are invalid');
+}
+
+{ # GetMonth
+ my $date = RT::Date->new($RT::SystemUser);
+ is($date->GetMonth(12), '', '12 and greater are invalid');
+ is($date->GetMonth(11), 'Dec', '11 is December');
+ is($date->GetMonth(0), 'Jan', '0 is January');
+ is($date->GetMonth(-1), 'Dec', '11 is December');
+ is($date->GetMonth(-12), 'Jan', '0 is January');
+ is($date->GetMonth(-13), '', '-13 and lesser are invalid');
+}
+
+#TODO: AsString
+#TODO: RFC2822, W3CDTF with Timezones
+
+exit(0);
+
diff --git a/rt/t/api/emailparser.t b/rt/t/api/emailparser.t
new file mode 100644
index 0000000..4807138
--- /dev/null
+++ b/rt/t/api/emailparser.t
@@ -0,0 +1,32 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 4;
+
+
+{
+
+ok(require RT::EmailParser);
+
+
+}
+
+{
+
+is(RT::EmailParser::IsRTAddress("","rt\@example.com"),1, "Regexp matched rt address" );
+is(RT::EmailParser::IsRTAddress("","frt\@example.com"),undef, "Regexp didn't match non-rt address" );
+
+
+}
+
+{
+
+my @before = ("rt\@example.com", "frt\@example.com");
+my @after = ("frt\@example.com");
+ok(eq_array(RT::EmailParser::CullRTAddresses("",@before),@after), "CullRTAddresses only culls RT addresses");
+
+
+}
+
+1;
diff --git a/rt/t/api/group.t b/rt/t/api/group.t
new file mode 100644
index 0000000..551d4f1
--- /dev/null
+++ b/rt/t/api/group.t
@@ -0,0 +1,99 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 38;
+
+
+{
+
+# {{{ Tests
+ok (require RT::Group);
+
+ok (my $group = RT::Group->new($RT::SystemUser), "instantiated a group object");
+ok (my ($id, $msg) = $group->CreateUserDefinedGroup( Name => 'TestGroup', Description => 'A test group',
+ ), 'Created a new group');
+isnt ($id , 0, "Group id is $id");
+is ($group->Name , 'TestGroup', "The group's name is 'TestGroup'");
+my $ng = RT::Group->new($RT::SystemUser);
+
+ok($ng->LoadUserDefinedGroup('TestGroup'), "Loaded testgroup");
+is($ng->id , $group->id, "Loaded the right group");
+
+
+ok (($id,$msg) = $ng->AddMember('1'), "Added a member to the group");
+ok($id, $msg);
+ok (($id,$msg) = $ng->AddMember('2' ), "Added a member to the group");
+ok($id, $msg);
+ok (($id,$msg) = $ng->AddMember('3' ), "Added a member to the group");
+ok($id, $msg);
+
+# Group 1 now has members 1, 2 ,3
+
+my $group_2 = RT::Group->new($RT::SystemUser);
+ok (my ($id_2, $msg_2) = $group_2->CreateUserDefinedGroup( Name => 'TestGroup2', Description => 'A second test group'), , 'Created a new group');
+isnt ($id_2 , 0, "Created group 2 ok- $msg_2 ");
+ok (($id,$msg) = $group_2->AddMember($ng->PrincipalId), "Made TestGroup a member of testgroup2");
+ok($id, $msg);
+ok (($id,$msg) = $group_2->AddMember('1' ), "Added member RT_System to the group TestGroup2");
+ok($id, $msg);
+
+# Group 2 how has 1, g1->{1, 2,3}
+
+my $group_3 = RT::Group->new($RT::SystemUser);
+ok (my ($id_3, $msg_3) = $group_3->CreateUserDefinedGroup( Name => 'TestGroup3', Description => 'A second test group'), 'Created a new group');
+isnt ($id_3 , 0, "Created group 3 ok - $msg_3");
+ok (($id,$msg) =$group_3->AddMember($group_2->PrincipalId), "Made TestGroup a member of testgroup2");
+ok($id, $msg);
+
+# g3 now has g2->{1, g1->{1,2,3}}
+
+my $principal_1 = RT::Principal->new($RT::SystemUser);
+$principal_1->Load('1');
+
+my $principal_2 = RT::Principal->new($RT::SystemUser);
+$principal_2->Load('2');
+
+ok (($id,$msg) = $group_3->AddMember('1' ), "Added member RT_System to the group TestGroup2");
+ok($id, $msg);
+
+# g3 now has 1, g2->{1, g1->{1,2,3}}
+
+is($group_3->HasMember($principal_2), undef, "group 3 doesn't have member 2");
+ok($group_3->HasMemberRecursively($principal_2), "group 3 has member 2 recursively");
+ok($ng->HasMember($principal_2) , "group ".$ng->Id." has member 2");
+my ($delid , $delmsg) =$ng->DeleteMember($principal_2->Id);
+isnt ($delid ,0, "Sucessfully deleted it-".$delid."-".$delmsg);
+
+#Gotta reload the group objects, since we've been messing with various internals.
+# we shouldn't need to do this.
+#$ng->LoadUserDefinedGroup('TestGroup');
+#$group_2->LoadUserDefinedGroup('TestGroup2');
+#$group_3->LoadUserDefinedGroup('TestGroup');
+
+# G1 now has 1, 3
+# Group 2 how has 1, g1->{1, 3}
+# g3 now has 1, g2->{1, g1->{1, 3}}
+
+ok(!$ng->HasMember($principal_2) , "group ".$ng->Id." no longer has member 2");
+is($group_3->HasMemberRecursively($principal_2), undef, "group 3 doesn't have member 2");
+is($group_2->HasMemberRecursively($principal_2), undef, "group 2 doesn't have member 2");
+is($ng->HasMember($principal_2), undef, "group 1 doesn't have member 2");
+is($group_3->HasMemberRecursively($principal_2), undef, "group 3 has member 2 recursively");
+
+# }}}
+
+
+}
+
+{
+
+ok(my $u = RT::Group->new($RT::SystemUser));
+ok($u->Load(4), "Loaded the first user");
+is($u->PrincipalObj->ObjectId , 4, "user 4 is the fourth principal");
+is($u->PrincipalObj->PrincipalType , 'Group' , "Principal 4 is a group");
+
+
+}
+
+1;
diff --git a/rt/t/api/groups.t b/rt/t/api/groups.t
new file mode 100644
index 0000000..995c844
--- /dev/null
+++ b/rt/t/api/groups.t
@@ -0,0 +1,139 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 28;
+
+
+{
+
+ok (require RT::Groups);
+
+
+}
+
+{
+
+# next had bugs
+# Groups->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => xx );
+my $g = RT::Group->new($RT::SystemUser);
+my ($id, $msg) = $g->CreateUserDefinedGroup(Name => 'GroupsNotEqualTest');
+ok ($id, "created group #". $g->id) or diag("error: $msg");
+
+my $groups = RT::Groups->new($RT::SystemUser);
+$groups->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $g->id );
+$groups->LimitToUserDefinedGroups();
+my $bug = grep $_->id == $g->id, @{$groups->ItemsArrayRef};
+ok (!$bug, "didn't find group");
+
+
+}
+
+{
+
+my $u = RT::User->new($RT::SystemUser);
+my ($id, $msg) = $u->Create( Name => 'Membertests'. $$ );
+ok ($id, 'created user') or diag "error: $msg";
+
+my $g = RT::Group->new($RT::SystemUser);
+($id, $msg) = $g->CreateUserDefinedGroup(Name => 'Membertests');
+ok ($id, $msg);
+
+my ($aid, $amsg) =$g->AddMember($u->id);
+ok ($aid, $amsg);
+ok($g->HasMember($u->PrincipalObj),"G has member u");
+
+my $groups = RT::Groups->new($RT::SystemUser);
+$groups->LimitToUserDefinedGroups();
+$groups->WithMember(PrincipalId => $u->id);
+is ($groups->Count , 1,"found the 1 group - " . $groups->Count);
+is ($groups->First->Id , $g->Id, "it's the right one");
+
+
+}
+
+{
+ no warnings qw/redefine once/;
+
+my $q = RT::Queue->new($RT::SystemUser);
+my ($id, $msg) =$q->Create( Name => 'GlobalACLTest');
+ok ($id, $msg);
+
+my $testuser = RT::User->new($RT::SystemUser);
+($id,$msg) = $testuser->Create(Name => 'JustAnAdminCc');
+ok ($id,$msg);
+
+my $global_admin_cc = RT::Group->new($RT::SystemUser);
+$global_admin_cc->LoadSystemRoleGroup('AdminCc');
+ok($global_admin_cc->id, "Found the global admincc group");
+my $groups = RT::Groups->new($RT::SystemUser);
+$groups->WithRight(Right => 'OwnTicket', Object => $q);
+is($groups->Count, 1);
+($id, $msg) = $global_admin_cc->PrincipalObj->GrantRight(Right =>'OwnTicket', Object=> $RT::System);
+ok ($id,$msg);
+ok (!$testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does not have the right to own tickets in the test queue");
+($id, $msg) = $q->AddWatcher(Type => 'AdminCc', PrincipalId => $testuser->id);
+ok($id,$msg);
+ok ($testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does have the right to own tickets now. thank god.");
+
+$groups = RT::Groups->new($RT::SystemUser);
+$groups->WithRight(Right => 'OwnTicket', Object => $q);
+ok ($id,$msg);
+is($groups->Count, 3);
+
+my $RTxGroup = RT::Group->new($RT::SystemUser);
+($id, $msg) = $RTxGroup->CreateUserDefinedGroup( Name => 'RTxGroup', Description => "RTx extension group");
+ok ($id,$msg);
+is ($RTxGroup->id, $id, "group loaded");
+
+my $RTxSysObj = {};
+bless $RTxSysObj, 'RTx::System';
+*RTx::System::Id = sub { 1; };
+*RTx::System::id = *RTx::System::Id;
+my $ace = RT::Record->new($RT::SystemUser);
+$ace->Table('ACL');
+$ace->_BuildTableAttributes unless ($RT::Record::_TABLE_ATTR->{ref($ace)});
+($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System', ObjectId => 1);
+ok ($id, "ACL for RTxSysObj created");
+
+my $RTxObj = {};
+bless $RTxObj, 'RTx::System::Record';
+*RTx::System::Record::Id = sub { 4; };
+*RTx::System::Record::id = *RTx::System::Record::Id;
+
+$groups = RT::Groups->new($RT::SystemUser);
+$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxSysObj);
+is($groups->Count, 1, "RTxGroupRight found for RTxSysObj");
+
+$groups = RT::Groups->new($RT::SystemUser);
+$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj);
+is($groups->Count, 0, "RTxGroupRight not found for RTxObj");
+
+$groups = RT::Groups->new($RT::SystemUser);
+$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]);
+is($groups->Count, 1, "RTxGroupRight found for RTxObj using EquivObjects");
+
+$ace = RT::Record->new($RT::SystemUser);
+$ace->Table('ACL');
+$ace->_BuildTableAttributes unless ($RT::Record::_TABLE_ATTR->{ref($ace)});
+($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System::Record', ObjectId => 5 );
+ok ($id, "ACL for RTxObj created");
+
+my $RTxObj2 = {};
+bless $RTxObj2, 'RTx::System::Record';
+*RTx::System::Record::Id = sub { 5; };
+
+$groups = RT::Groups->new($RT::SystemUser);
+$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2);
+is($groups->Count, 1, "RTxGroupRight found for RTxObj2");
+
+$groups = RT::Groups->new($RT::SystemUser);
+$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]);
+is($groups->Count, 1, "RTxGroupRight found for RTxObj2");
+
+
+
+
+}
+
+1;
diff --git a/rt/t/api/i18n.t b/rt/t/api/i18n.t
new file mode 100644
index 0000000..17d71b7
--- /dev/null
+++ b/rt/t/api/i18n.t
@@ -0,0 +1,30 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 9;
+
+
+{
+
+use_ok ('RT::I18N');
+ok(RT::I18N->Init);
+
+
+}
+
+{
+
+ok(my $chinese = RT::I18N->get_handle('zh_tw'));
+ok(UNIVERSAL::can($chinese, 'maketext'));
+like($chinese->maketext('__Content-Type') , qr/utf-8/i, "Found the utf-8 charset for traditional chinese in the string ".$chinese->maketext('__Content-Type'));
+is($chinese->encoding , 'utf-8', "The encoding is 'utf-8' -".$chinese->encoding);
+
+ok(my $en = RT::I18N->get_handle('en'));
+ok(UNIVERSAL::can($en, 'maketext'));
+is($en->encoding , 'utf-8', "The encoding ".$en->encoding." is 'utf-8'");
+
+
+}
+
+1;
diff --git a/rt/t/api/link.t b/rt/t/api/link.t
new file mode 100644
index 0000000..1fd66bb
--- /dev/null
+++ b/rt/t/api/link.t
@@ -0,0 +1,24 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 5;
+
+
+{
+
+
+use RT::Link;
+my $link = RT::Link->new($RT::SystemUser);
+
+
+ok (ref $link);
+ok (UNIVERSAL::isa($link, 'RT::Link'));
+ok (UNIVERSAL::isa($link, 'RT::Base'));
+ok (UNIVERSAL::isa($link, 'RT::Record'));
+ok (UNIVERSAL::isa($link, 'DBIx::SearchBuilder::Record'));
+
+
+}
+
+1;
diff --git a/rt/t/api/queue.t b/rt/t/api/queue.t
new file mode 100644
index 0000000..44d5caf
--- /dev/null
+++ b/rt/t/api/queue.t
@@ -0,0 +1,92 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 24;
+
+
+{
+
+use RT::Queue;
+
+
+}
+
+{
+
+my $q = RT::Queue->new($RT::SystemUser);
+is($q->IsValidStatus('new'), 1, 'New is a valid status');
+is($q->IsValidStatus('f00'), 0, 'f00 is not a valid status');
+
+
+}
+
+{
+
+my $q = RT::Queue->new($RT::SystemUser);
+is($q->IsActiveStatus('new'), 1, 'New is a Active status');
+is($q->IsActiveStatus('rejected'), 0, 'Rejected is an inactive status');
+is($q->IsActiveStatus('f00'), 0, 'f00 is not a Active status');
+
+
+}
+
+{
+
+my $q = RT::Queue->new($RT::SystemUser);
+is($q->IsInactiveStatus('new'), 0, 'New is a Active status');
+is($q->IsInactiveStatus('rejected'), 1, 'rejeected is an Inactive status');
+is($q->IsInactiveStatus('f00'), 0, 'f00 is not a Active status');
+
+
+}
+
+{
+
+my $queue = RT::Queue->new($RT::SystemUser);
+my ($id, $val) = $queue->Create( Name => 'Test1');
+ok($id, $val);
+
+($id, $val) = $queue->Create( Name => '66');
+ok(!$id, $val);
+
+
+}
+
+{
+
+my $Queue = RT::Queue->new($RT::SystemUser);
+my ($id, $msg) = $Queue->Create(Name => "Foo");
+ok ($id, "Foo $id was created");
+ok(my $group = RT::Group->new($RT::SystemUser));
+ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'Requestor'));
+ok ($group->Id, "Found the requestors object for this Queue");
+
+{
+ my ($status, $msg) = $Queue->AddWatcher(Type => 'Cc', Email => 'bob@fsck.com');
+ ok ($status, "Added bob at fsck.com as a requestor") or diag "error: $msg";
+}
+
+ok(my $bob = RT::User->new($RT::SystemUser), "Creating a bob rt::user");
+$bob->LoadByEmail('bob@fsck.com');
+ok($bob->Id, "Found the bob rt user");
+ok ($Queue->IsWatcher(Type => 'Cc', PrincipalId => $bob->PrincipalId), "The Queue actually has bob at fsck.com as a requestor");
+
+{
+ my ($status, $msg) = $Queue->DeleteWatcher(Type =>'Cc', Email => 'bob@fsck.com');
+ ok ($status, "Deleted bob from Ccs") or diag "error: $msg";
+ ok (!$Queue->IsWatcher(Type => 'Cc', PrincipalId => $bob->PrincipalId),
+ "The Queue no longer has bob at fsck.com as a requestor");
+}
+
+$group = RT::Group->new($RT::SystemUser);
+ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'Cc'));
+ok ($group->Id, "Found the cc object for this Queue");
+$group = RT::Group->new($RT::SystemUser);
+ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'AdminCc'));
+ok ($group->Id, "Found the AdminCc object for this Queue");
+
+
+}
+
+1;
diff --git a/rt/t/api/record.t b/rt/t/api/record.t
new file mode 100644
index 0000000..6bf1af8
--- /dev/null
+++ b/rt/t/api/record.t
@@ -0,0 +1,70 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 22;
+
+
+{
+
+ok (require RT::Record);
+
+
+}
+
+{
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my $group = RT::Group->new($RT::SystemUser);
+is($ticket->ObjectTypeStr, 'Ticket', "Ticket returns correct typestring");
+is($group->ObjectTypeStr, 'Group', "Group returns correct typestring");
+
+
+}
+
+{
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+my ($id, $trans, $msg) = $t1->Create(Subject => 'DepTest1', Queue => 'general');
+ok($id, "Created dep test 1 - $msg");
+
+my $t2 = RT::Ticket->new($RT::SystemUser);
+(my $id2, $trans, my $msg2) = $t2->Create(Subject => 'DepTest2', Queue => 'general');
+ok($id2, "Created dep test 2 - $msg2");
+my $t3 = RT::Ticket->new($RT::SystemUser);
+(my $id3, $trans, my $msg3) = $t3->Create(Subject => 'DepTest3', Queue => 'general', Type => 'approval');
+ok($id3, "Created dep test 3 - $msg3");
+my ($addid, $addmsg);
+ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t2->id));
+ok ($addid, $addmsg);
+ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t3->id));
+
+ok ($addid, $addmsg);
+my $link = RT::Link->new($RT::SystemUser);
+(my $rv, $msg) = $link->Load($addid);
+ok ($rv, $msg);
+is ($link->LocalTarget , $t3->id, "Link LocalTarget is correct");
+is ($link->LocalBase , $t1->id, "Link LocalBase is correct");
+
+ok ($t1->HasUnresolvedDependencies, "Ticket ".$t1->Id." has unresolved deps");
+ok (!$t1->HasUnresolvedDependencies( Type => 'blah' ), "Ticket ".$t1->Id." has no unresolved blahs");
+ok ($t1->HasUnresolvedDependencies( Type => 'approval' ), "Ticket ".$t1->Id." has unresolved approvals");
+ok (!$t2->HasUnresolvedDependencies, "Ticket ".$t2->Id." has no unresolved deps");
+;
+
+my ($rid, $rmsg)= $t1->Resolve();
+ok(!$rid, $rmsg);
+my ($rid2, $rmsg2) = $t2->Resolve();
+ok ($rid2, $rmsg2);
+($rid, $rmsg)= $t1->Resolve();
+ok(!$rid, $rmsg);
+my ($rid3,$rmsg3) = $t3->Resolve;
+ok ($rid3,$rmsg3);
+($rid, $rmsg)= $t1->Resolve();
+ok($rid, $rmsg);
+
+
+
+}
+
+1;
diff --git a/rt/t/api/reminders.t b/rt/t/api/reminders.t
new file mode 100644
index 0000000..fd1c6a6
--- /dev/null
+++ b/rt/t/api/reminders.t
@@ -0,0 +1,88 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 20;
+
+
+{
+
+# Create test queues
+use_ok ('RT::Queue');
+
+ok(my $testqueue = RT::Queue->new($RT::SystemUser), 'Instantiate RT::Queue');
+ok($testqueue->Create( Name => 'reminders tests'), 'Create new queue: reminders tests');
+isnt($testqueue->Id , 0, 'Success creating queue');
+
+ok($testqueue->Create( Name => 'reminders tests 2'), 'Create new queue: reminders tests 2');
+isnt($testqueue->Id , 0, 'Success creating queue');
+
+# Create test ticket
+use_ok('RT::Ticket');
+
+my $u = RT::User->new($RT::SystemUser);
+$u->Load("root");
+ok ($u->Id, "Found the root user");
+ok(my $t = RT::Ticket->new($RT::SystemUser), 'Instantiate RT::Ticket');
+ok(my ($id, $msg) = $t->Create( Queue => $testqueue->Id,
+ Subject => 'Testing',
+ Owner => $u->Id
+ ), 'Create sample ticket');
+isnt($id , 0, 'Success creating ticket');
+
+# Add reminder
+my $due_obj = RT::Date->new( $RT::SystemUser );
+$due_obj->SetToNow;
+ok(my ( $add_id, $add_msg, $txnid ) = $t->Reminders->Add(
+ Subject => 'TestReminder',
+ Owner => 'root',
+ Due => $due_obj->ISO
+ ), 'Add reminder');
+
+# Check that the new Reminder is here
+my $reminders = $t->Reminders->Collection;
+ok($reminders, 'Loading reminders for this ticket');
+my $found = 0;
+while ( my $reminder = $reminders->Next ) {
+ next unless $found == 0;
+ $found = 1 if ( $reminder->Subject =~ m/TestReminder/ );
+}
+
+is($found, 1, 'Reminder successfully added');
+
+# Change queue
+ok (my ($move_val, $move_msg) = $t->SetQueue('reminders tests 2'), 'Moving ticket from queue "reminders tests" to "reminders tests 2"');
+
+is ($t->QueueObj->Name, 'reminders tests 2', 'Ticket successfully moved');
+
+# Check that the new reminder is still there and moved to the new queue
+$reminders = $t->Reminders->Collection;
+ok($reminders, 'Loading reminders for this ticket');
+$found = 0;
+my $ok_queue = 0;
+while ( my $reminder = $reminders->Next ) {
+ next unless $found == 0;
+ if ( $reminder->Subject =~ m/TestReminder/ ) {
+ $found = 1;
+ $ok_queue = 1 if ( $reminder->QueueObj->Name eq 'reminders tests 2' );
+ }
+}
+is($found, 1, 'Reminder successfully added');
+
+is($ok_queue, 1, 'Reminder automatically moved to new queue');
+
+# Resolve reminder
+my $r_resolved = 0;
+while ( my $reminder = $reminders->Next ) {
+ if ( $reminder->Subject =~ m/TestReminder/ ) {
+ if ( $reminder->Status ne 'resolved' ) {
+ $t->Reminders->Resolve($reminder);
+ $r_resolved = 1 if ( $reminder->Status eq 'resolved' );
+ }
+ }
+}
+
+is($r_resolved, 1, 'Reminder resolved');
+
+}
+1;
diff --git a/rt/t/api/rights.t b/rt/t/api/rights.t
new file mode 100644
index 0000000..7bd332f
--- /dev/null
+++ b/rt/t/api/rights.t
@@ -0,0 +1,142 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+# <jesse.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/copyleft/gpl.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 }}}
+
+use RT;
+use RT::Test tests => 26;
+
+use RT::I18N;
+use strict;
+no warnings 'once';
+
+use RT::Queue;
+use RT::ACE;
+use RT::User;
+use RT::Group;
+use RT::Ticket;
+
+
+# clear all global right
+my $acl = RT::ACL->new($RT::SystemUser);
+$acl->Limit( FIELD => 'RightName', OPERATOR => '!=', VALUE => 'SuperUser' );
+$acl->LimitToObject( $RT::System );
+while( my $ace = $acl->Next ) {
+ $ace->Delete;
+}
+
+my $rand_name = "rights". int rand($$);
+# create new queue to be shure we don't mess with rights
+my $queue = RT::Queue->new($RT::SystemUser);
+my ($queue_id) = $queue->Create( Name => $rand_name);
+ok( $queue_id, 'queue created for rights tests' );
+
+# new privileged user to check rights
+my $user = RT::User->new( $RT::SystemUser );
+my ($user_id) = $user->Create( Name => $rand_name,
+ EmailAddress => $rand_name .'@localhost',
+ Privileged => 1,
+ Password => 'qwe123',
+ );
+ok( !$user->HasRight( Right => 'OwnTicket', Object => $queue ), "user can't own ticket" );
+ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $queue ), "user can't reply to ticket" );
+
+my $group = RT::Group->new( $RT::SystemUser );
+ok( $group->LoadQueueRoleGroup( Queue => $queue_id, Type=> 'Owner' ), "load queue owners role group" );
+my $ace = RT::ACE->new( $RT::SystemUser );
+my ($ace_id, $msg) = $group->PrincipalObj->GrantRight( Right => 'ReplyToTicket', Object => $queue );
+ok( $ace_id, "Granted queue owners role group with ReplyToTicket right: $msg" );
+ok( $group->PrincipalObj->HasRight( Right => 'ReplyToTicket', Object => $queue ), "role group can reply to ticket" );
+ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $queue ), "user can't reply to ticket" );
+
+# new ticket
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($ticket_id) = $ticket->Create( Queue => $queue_id, Subject => 'test');
+ok( $ticket_id, 'new ticket created' );
+is( $ticket->Owner, $RT::Nobody->Id, 'owner of the new ticket is nobody' );
+
+my $status;
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'OwnTicket' );
+ok( $status, "successfuly granted right: $msg" );
+ok( $user->HasRight( Right => 'OwnTicket', Object => $queue ), "user can own ticket" );
+
+($status, $msg) = $ticket->SetOwner( $user_id );
+ok( $status, "successfuly set owner: $msg" );
+is( $ticket->Owner, $user_id, "set correct owner" );
+
+ok( $user->HasRight( Right => 'ReplyToTicket', Object => $ticket ), "user is owner and can reply to ticket" );
+
+# Testing of EquivObjects
+$group = RT::Group->new( $RT::SystemUser );
+ok( $group->LoadQueueRoleGroup( Queue => $queue_id, Type=> 'AdminCc' ), "load queue AdminCc role group" );
+$ace = RT::ACE->new( $RT::SystemUser );
+($ace_id, $msg) = $group->PrincipalObj->GrantRight( Right => 'ModifyTicket', Object => $queue );
+ok( $ace_id, "Granted queue AdminCc role group with ModifyTicket right: $msg" );
+ok( $group->PrincipalObj->HasRight( Right => 'ModifyTicket', Object => $queue ), "role group can modify ticket" );
+ok( !$user->HasRight( Right => 'ModifyTicket', Object => $ticket ), "user is not AdminCc and can't modify ticket" );
+($status, $msg) = $ticket->AddWatcher(Type => 'AdminCc', PrincipalId => $user->PrincipalId);
+ok( $status, "successfuly added user as AdminCc");
+ok( $user->HasRight( Right => 'ModifyTicket', Object => $ticket ), "user is AdminCc and can modify ticket" );
+
+my $ticket2 = RT::Ticket->new($RT::SystemUser);
+my ($ticket2_id) = $ticket2->Create( Queue => $queue_id, Subject => 'test2');
+ok( $ticket2_id, 'new ticket created' );
+ok( !$user->HasRight( Right => 'ModifyTicket', Object => $ticket2 ), "user is not AdminCc and can't modify ticket2" );
+
+# now we can finally test EquivObjects
+my $equiv = [ $ticket ];
+ok( $user->HasRight( Right => 'ModifyTicket', Object => $ticket2, EquivObjects => $equiv ),
+ "user is not AdminCc but can modify ticket2 because of EquivObjects" );
+
+# the first a third test below are the same, so they should both pass
+my $equiv2 = [];
+ok( !$user->HasRight( Right => 'ModifyTicket', Object => $ticket2, EquivObjects => $equiv2 ),
+ "user is not AdminCc and can't modify ticket2" );
+ok( $user->HasRight( Right => 'ModifyTicket', Object => $ticket, EquivObjects => $equiv2 ),
+ "user is AdminCc and can modify ticket" );
+ok( !$user->HasRight( Right => 'ModifyTicket', Object => $ticket2, EquivObjects => $equiv2 ),
+ "user is not AdminCc and can't modify ticket2 (same question different answer)" );
diff --git a/rt/t/api/rt.t b/rt/t/api/rt.t
new file mode 100644
index 0000000..3c06b58
--- /dev/null
+++ b/rt/t/api/rt.t
@@ -0,0 +1,18 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 4;
+
+
+{
+
+is ($RT::Nobody->Name() , 'Nobody', "Nobody is nobody");
+isnt ($RT::Nobody->Name() , 'root', "Nobody isn't named root");
+is ($RT::SystemUser->Name() , 'RT_System', "The system user is RT_System");
+isnt ($RT::SystemUser->Name() , 'noname', "The system user isn't noname");
+
+
+}
+
+1;
diff --git a/rt/t/api/scrip.t b/rt/t/api/scrip.t
new file mode 100644
index 0000000..8e8f962
--- /dev/null
+++ b/rt/t/api/scrip.t
@@ -0,0 +1,49 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 7;
+
+
+{
+
+ok (require RT::Scrip);
+
+
+my $q = RT::Queue->new($RT::SystemUser);
+$q->Create(Name => 'ScripTest');
+ok($q->Id, "Created a scriptest queue");
+
+my $s1 = RT::Scrip->new($RT::SystemUser);
+my ($val, $msg) =$s1->Create( Queue => $q->Id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ CustomIsApplicableCode => 'if ($self->TicketObj->Subject =~ /fire/) { return (1);} else { return(0)}',
+ CustomPrepareCode => 'return 1',
+ CustomCommitCode => '$self->TicketObj->SetPriority("87");',
+ Template => 'Blank'
+ );
+ok($val,$msg);
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id,
+ Subject => "hair on fire",
+ );
+ok($tv, $tm);
+
+is ($ticket->Priority , '87', "Ticket priority is set right");
+
+
+my $ticket2 = RT::Ticket->new($RT::SystemUser);
+my ($t2v,$t2tv,$t2m) = $ticket2->Create(Queue => $q->Id,
+ Subject => "hair in water",
+ );
+ok($t2v, $t2m);
+
+isnt ($ticket2->Priority , '87', "Ticket priority is set right");
+
+
+
+}
+
+1;
diff --git a/rt/t/api/scrip_order.t b/rt/t/api/scrip_order.t
new file mode 100644
index 0000000..9738db9
--- /dev/null
+++ b/rt/t/api/scrip_order.t
@@ -0,0 +1,56 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use RT;
+use RT::Test tests => 7;
+
+
+# {{{ test scrip ordering based on description
+
+my $scrip_queue = RT::Queue->new($RT::SystemUser);
+my ($queue_id, $msg) = $scrip_queue->Create( Name => "ScripOrdering-$$",
+ Description => 'Test scrip ordering by description' );
+ok($queue_id, "Created scrip-ordering test queue? ".$msg);
+
+my $priority_ten_scrip = RT::Scrip->new($RT::SystemUser);
+(my $id, $msg) = $priority_ten_scrip->Create(
+ Description => "10 set priority $$",
+ Queue => $queue_id,
+ ScripCondition => 'On Create',
+ ScripAction => 'User Defined',
+ CustomPrepareCode => '$RT::Logger->debug("Setting priority to 10..."); return 1;',
+ CustomCommitCode => '$self->TicketObj->SetPriority(10);',
+ Template => 'Blank',
+ Stage => 'TransactionCreate',
+);
+ok($id, "Created priority-10 scrip? ".$msg);
+
+my $priority_five_scrip = RT::Scrip->new($RT::SystemUser);
+($id, $msg) = $priority_ten_scrip->Create(
+ Description => "05 set priority $$",
+ Queue => $queue_id,
+ ScripCondition => 'On Create',
+ ScripAction => 'User Defined',
+ CustomPrepareCode => '$RT::Logger->debug("Setting priority to 5..."); return 1;',
+ CustomCommitCode => '$self->TicketObj->SetPriority(5);',
+ Template => 'Blank',
+ Stage => 'TransactionCreate',
+);
+ok($id, "Created priority-5 scrip? ".$msg);
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+($id, $msg) = $ticket->Create(
+ Queue => $queue_id,
+ Requestor => 'order@example.com',
+ Subject => "Scrip order test $$",
+);
+ok($ticket->id, "Created ticket? id=$id");
+
+isnt($ticket->Priority , 0, "Ticket shouldn't be priority 0");
+isnt($ticket->Priority , 5, "Ticket shouldn't be priority 5");
+is ($ticket->Priority , 10, "Ticket should be priority 10");
+
+# }}}
+
+1;
diff --git a/rt/t/api/searchbuilder.t b/rt/t/api/searchbuilder.t
new file mode 100644
index 0000000..cb11890
--- /dev/null
+++ b/rt/t/api/searchbuilder.t
@@ -0,0 +1,40 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 11;
+
+
+{
+
+ok (require RT::SearchBuilder);
+
+
+}
+
+{
+
+use_ok('RT::Queues');
+ok(my $queues = RT::Queues->new($RT::SystemUser), 'Created a queues object');
+ok( $queues->UnLimit(),'Unlimited the result set of the queues object');
+my $items = $queues->ItemsArrayRef();
+my @items = @{$items};
+
+ok($queues->NewItem->_Accessible('Name','read'));
+my @sorted = sort {lc($a->Name) cmp lc($b->Name)} @items;
+ok (@sorted, "We have an array of queues, sorted". join(',',map {$_->Name} @sorted));
+
+ok (@items, "We have an array of queues, raw". join(',',map {$_->Name} @items));
+my @sorted_ids = map {$_->id } @sorted;
+my @items_ids = map {$_->id } @items;
+
+is ($#sorted, $#items);
+is ($sorted[0]->Name, $items[0]->Name);
+is ($sorted[-1]->Name, $items[-1]->Name);
+is_deeply(\@items_ids, \@sorted_ids, "ItemsArrayRef sorts alphabetically by name");
+
+
+
+}
+
+1;
diff --git a/rt/t/api/system.t b/rt/t/api/system.t
new file mode 100644
index 0000000..3077115
--- /dev/null
+++ b/rt/t/api/system.t
@@ -0,0 +1,33 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 7;
+
+
+{
+
+my $s = RT::System->new($RT::SystemUser);
+my $rights = $s->AvailableRights;
+ok ($rights, "Rights defined");
+ok ($rights->{'AdminUsers'},"AdminUsers right found");
+ok ($rights->{'CreateTicket'},"CreateTicket right found");
+ok ($rights->{'AdminGroupMembership'},"ModifyGroupMembers right found");
+ok (!$rights->{'CasdasdsreateTicket'},"bogus right not found");
+
+
+
+
+}
+
+{
+
+use RT::System;
+my $sys = RT::System->new();
+is( $sys->Id, 1);
+is ($sys->id, 1);
+
+
+}
+
+1;
diff --git a/rt/t/api/template-insert.t b/rt/t/api/template-insert.t
new file mode 100644
index 0000000..47bbd79
--- /dev/null
+++ b/rt/t/api/template-insert.t
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+
+use RT;
+use RT::Test tests => 7;
+
+
+
+# This tiny little test script triggers an interaction bug between DBD::Oracle 1.16, SB 1.15 and RT 3.4
+
+use_ok('RT::Template');
+my $template = RT::Template->new($RT::SystemUser);
+
+isa_ok($template, 'RT::Template');
+my ($val,$msg) = $template->Create(Queue => 1,
+ Name => 'InsertTest',
+ Content => 'This is template content');
+ok($val,$msg);
+is($template->Name, 'InsertTest');
+is($template->Content, 'This is template content', "We created the object right");
+($val, $msg) = $template->SetContent( 'This is new template content');
+ok($val,$msg);
+is($template->Content, 'This is new template content', "We managed to _Set_ the content");
diff --git a/rt/t/api/template.t b/rt/t/api/template.t
new file mode 100644
index 0000000..1612b8f
--- /dev/null
+++ b/rt/t/api/template.t
@@ -0,0 +1,26 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 2;
+
+
+{
+
+ok(require RT::Template);
+
+
+}
+
+{
+
+my $t = RT::Template->new($RT::SystemUser);
+$t->Create(Name => "Foo", Queue => 1);
+my $t2 = RT::Template->new($RT::Nobody);
+$t2->Load($t->Id);
+ok($t2->QueueObj->id, "Got the template's queue objet");
+
+
+}
+
+1;
diff --git a/rt/t/api/ticket.t b/rt/t/api/ticket.t
new file mode 100644
index 0000000..2ca0997
--- /dev/null
+++ b/rt/t/api/ticket.t
@@ -0,0 +1,257 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 87;
+
+
+{
+
+use_ok ('RT::Queue');
+ok(my $testqueue = RT::Queue->new($RT::SystemUser));
+ok($testqueue->Create( Name => 'ticket tests'));
+isnt($testqueue->Id , 0);
+use_ok('RT::CustomField');
+ok(my $testcf = RT::CustomField->new($RT::SystemUser));
+my ($ret, $cmsg) = $testcf->Create( Name => 'selectmulti',
+ Queue => $testqueue->id,
+ Type => 'SelectMultiple');
+ok($ret,"Created the custom field - ".$cmsg);
+($ret,$cmsg) = $testcf->AddValue ( Name => 'Value1',
+ SortOrder => '1',
+ Description => 'A testing value');
+
+ok($ret, "Added a value - ".$cmsg);
+
+ok($testcf->AddValue ( Name => 'Value2',
+ SortOrder => '2',
+ Description => 'Another testing value'));
+ok($testcf->AddValue ( Name => 'Value3',
+ SortOrder => '3',
+ Description => 'Yet Another testing value'));
+
+is($testcf->Values->Count , 3);
+
+use_ok('RT::Ticket');
+
+my $u = RT::User->new($RT::SystemUser);
+$u->Load("root");
+ok ($u->Id, "Found the root user");
+ok(my $t = RT::Ticket->new($RT::SystemUser));
+ok(my ($id, $msg) = $t->Create( Queue => $testqueue->Id,
+ Subject => 'Testing',
+ Owner => $u->Id
+ ));
+isnt($id , 0);
+is ($t->OwnerObj->Id , $u->Id, "Root is the ticket owner");
+ok(my ($cfv, $cfm) =$t->AddCustomFieldValue(Field => $testcf->Id,
+ Value => 'Value1'));
+isnt($cfv , 0, "Custom field creation didn't return an error: $cfm");
+is($t->CustomFieldValues($testcf->Id)->Count , 1);
+ok($t->CustomFieldValues($testcf->Id)->First &&
+ $t->CustomFieldValues($testcf->Id)->First->Content eq 'Value1');
+
+ok(my ($cfdv, $cfdm) = $t->DeleteCustomFieldValue(Field => $testcf->Id,
+ Value => 'Value1'));
+isnt ($cfdv , 0, "Deleted a custom field value: $cfdm");
+is($t->CustomFieldValues($testcf->Id)->Count , 0);
+
+ok(my $t2 = RT::Ticket->new($RT::SystemUser));
+ok($t2->Load($id));
+is($t2->Subject, 'Testing');
+is($t2->QueueObj->Id, $testqueue->id);
+is($t2->OwnerObj->Id, $u->Id);
+
+my $t3 = RT::Ticket->new($RT::SystemUser);
+my ($id3, $msg3) = $t3->Create( Queue => $testqueue->Id,
+ Subject => 'Testing',
+ Owner => $u->Id);
+my ($cfv1, $cfm1) = $t->AddCustomFieldValue(Field => $testcf->Id,
+ Value => 'Value1');
+isnt($cfv1 , 0, "Adding a custom field to ticket 1 is successful: $cfm");
+my ($cfv2, $cfm2) = $t3->AddCustomFieldValue(Field => $testcf->Id,
+ Value => 'Value2');
+isnt($cfv2 , 0, "Adding a custom field to ticket 2 is successful: $cfm");
+my ($cfv3, $cfm3) = $t->AddCustomFieldValue(Field => $testcf->Id,
+ Value => 'Value3');
+isnt($cfv3 , 0, "Adding a custom field to ticket 1 is successful: $cfm");
+is($t->CustomFieldValues($testcf->Id)->Count , 2,
+ "This ticket has 2 custom field values");
+is($t3->CustomFieldValues($testcf->Id)->Count , 1,
+ "This ticket has 1 custom field value");
+
+
+}
+
+{
+
+
+ok(require RT::Ticket, "Loading the RT::Ticket library");
+
+
+}
+
+{
+
+my $t = RT::Ticket->new($RT::SystemUser);
+
+ok( $t->Create(Queue => 'General', Due => '2002-05-21 00:00:00', ReferredToBy => 'http://www.cpan.org', RefersTo => 'http://fsck.com', Subject => 'This is a subject'), "Ticket Created");
+
+ok ( my $id = $t->Id, "Got ticket id");
+like ($t->RefersTo->First->Target , qr/fsck.com/, "Got refers to");
+like ($t->ReferredToBy->First->Base , qr/cpan.org/, "Got referredtoby");
+is ($t->ResolvedObj->Unix, 0, "It hasn't been resolved - ". $t->ResolvedObj->Unix);
+
+
+}
+
+{
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($id, $msg) = $ticket->Create(Subject => "Foo",
+ Owner => $RT::SystemUser->Id,
+ Status => 'open',
+ Requestor => ['jesse@example.com'],
+ Queue => '1'
+ );
+ok ($id, "Ticket $id was created");
+ok(my $group = RT::Group->new($RT::SystemUser));
+ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Requestor'));
+ok ($group->Id, "Found the requestors object for this ticket");
+
+ok(my $jesse = RT::User->new($RT::SystemUser), "Creating a jesse rt::user");
+$jesse->LoadByEmail('jesse@example.com');
+ok($jesse->Id, "Found the jesse rt user");
+
+
+ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $jesse->PrincipalId), "The ticket actually has jesse at fsck.com as a requestor");
+ok (my ($add_id, $add_msg) = $ticket->AddWatcher(Type => 'Requestor', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor");
+ok ($add_id, "Add succeeded: ($add_msg)");
+ok(my $bob = RT::User->new($RT::SystemUser), "Creating a bob rt::user");
+$bob->LoadByEmail('bob@fsck.com');
+ok($bob->Id, "Found the bob rt user");
+ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $bob->PrincipalId), "The ticket actually has bob at fsck.com as a requestor");
+ok ( ($add_id, $add_msg) = $ticket->DeleteWatcher(Type =>'Requestor', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor");
+ok (!$ticket->IsWatcher(Type => 'Requestor', PrincipalId => $bob->PrincipalId), "The ticket no longer has bob at fsck.com as a requestor");
+
+
+$group = RT::Group->new($RT::SystemUser);
+ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Cc'));
+ok ($group->Id, "Found the cc object for this ticket");
+$group = RT::Group->new($RT::SystemUser);
+ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'AdminCc'));
+ok ($group->Id, "Found the AdminCc object for this ticket");
+$group = RT::Group->new($RT::SystemUser);
+ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Owner'));
+ok ($group->Id, "Found the Owner object for this ticket");
+ok($group->HasMember($RT::SystemUser->UserObj->PrincipalObj), "the owner group has the member 'RT_System'");
+
+
+}
+
+{
+
+my $t = RT::Ticket->new($RT::SystemUser);
+ok($t->Create(Queue => 'general', Subject => 'SquelchTest', SquelchMailTo => 'nobody@example.com'));
+
+my @returned = $t->SquelchMailTo();
+is($#returned, 0, "The ticket has one squelched recipients");
+
+my ($ret, $msg) = $t->UnsquelchMailTo('nobody@example.com');
+ok($ret, "Removed nobody as a squelched recipient - ".$msg);
+@returned = $t->SquelchMailTo();
+is($#returned, -1, "The ticket has no squelched recipients". join(',',@returned));
+
+
+
+@returned = $t->SquelchMailTo('nobody@example.com');
+is($#returned, 0, "The ticket has one squelched recipients");
+
+my @names = $t->Attributes->Names;
+is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo");
+@returned = $t->SquelchMailTo('nobody@example.com');
+
+
+is($#returned, 0, "The ticket has one squelched recipients");
+
+@names = $t->Attributes->Names;
+is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo");
+
+
+($ret, $msg) = $t->UnsquelchMailTo('nobody@example.com');
+ok($ret, "Removed nobody as a squelched recipient - ".$msg);
+@returned = $t->SquelchMailTo();
+is($#returned, -1, "The ticket has no squelched recipients". join(',',@returned));
+
+
+
+}
+
+{
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+$t1->Create ( Subject => 'Merge test 1', Queue => 'general', Requestor => 'merge1@example.com');
+my $t1id = $t1->id;
+my $t2 = RT::Ticket->new($RT::SystemUser);
+$t2->Create ( Subject => 'Merge test 2', Queue => 'general', Requestor => 'merge2@example.com');
+my $t2id = $t2->id;
+my ($msg, $val) = $t1->MergeInto($t2->id);
+ok ($msg,$val);
+$t1 = RT::Ticket->new($RT::SystemUser);
+is ($t1->id, undef, "ok. we've got a blank ticket1");
+$t1->Load($t1id);
+
+is ($t1->id, $t2->id);
+
+is ($t1->Requestors->MembersObj->Count, 2);
+
+
+
+}
+
+{
+
+my $root = RT::User->new($RT::SystemUser);
+$root->Load('root');
+ok ($root->Id, "Loaded the root user");
+my $t = RT::Ticket->new($RT::SystemUser);
+$t->Load(1);
+$t->SetOwner('root');
+is ($t->OwnerObj->Name, 'root' , "Root owns the ticket");
+$t->Steal();
+is ($t->OwnerObj->id, $RT::SystemUser->id , "SystemUser owns the ticket");
+my $txns = RT::Transactions->new($RT::SystemUser);
+$txns->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$txns->Limit(FIELD => 'ObjectId', VALUE => '1');
+$txns->Limit(FIELD => 'ObjectType', VALUE => 'RT::Ticket');
+$txns->Limit(FIELD => 'Type', OPERATOR => '!=', VALUE => 'EmailRecord');
+
+my $steal = $txns->First;
+is($steal->OldValue , $root->Id , "Stolen from root");
+is($steal->NewValue , $RT::SystemUser->Id , "Stolen by the systemuser");
+
+
+}
+
+{
+
+my $tt = RT::Ticket->new($RT::SystemUser);
+my ($id, $tid, $msg)= $tt->Create(Queue => 'general',
+ Subject => 'test');
+ok($id, $msg);
+is($tt->Status, 'new', "New ticket is created as new");
+
+($id, $msg) = $tt->SetStatus('open');
+ok($id, $msg);
+like($msg, qr/open/i, "Status message is correct");
+($id, $msg) = $tt->SetStatus('resolved');
+ok($id, $msg);
+like($msg, qr/resolved/i, "Status message is correct");
+($id, $msg) = $tt->SetStatus('resolved');
+ok(!$id,$msg);
+
+
+
+}
+
+1;
diff --git a/rt/t/api/tickets.t b/rt/t/api/tickets.t
new file mode 100644
index 0000000..9148a88
--- /dev/null
+++ b/rt/t/api/tickets.t
@@ -0,0 +1,104 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 16;
+
+
+{
+
+ok (require RT::Tickets);
+ok( my $testtickets = RT::Tickets->new( $RT::SystemUser ) );
+ok( $testtickets->LimitStatus( VALUE => 'deleted' ) );
+# Should be zero until 'allow_deleted_search'
+is( $testtickets->Count , 0 );
+
+
+}
+
+{
+
+# Test to make sure that you can search for tickets by requestor address and
+# by requestor name.
+
+my ($id,$msg);
+my $u1 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u1->Create( Name => 'RequestorTestOne', EmailAddress => 'rqtest1@example.com');
+ok ($id,$msg);
+my $u2 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u2->Create( Name => 'RequestorTestTwo', EmailAddress => 'rqtest2@example.com');
+ok ($id,$msg);
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+my ($trans);
+($id,$trans,$msg) =$t1->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u1->EmailAddress]);
+ok ($id, $msg);
+
+my $t2 = RT::Ticket->new($RT::SystemUser);
+($id,$trans,$msg) =$t2->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u2->EmailAddress]);
+ok ($id, $msg);
+
+
+my $t3 = RT::Ticket->new($RT::SystemUser);
+($id,$trans,$msg) =$t3->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u2->EmailAddress, $u1->EmailAddress]);
+ok ($id, $msg);
+
+
+my $tix1 = RT::Tickets->new($RT::SystemUser);
+$tix1->FromSQL('Requestor.EmailAddress LIKE "rqtest1" OR Requestor.EmailAddress LIKE "rqtest2"');
+
+is ($tix1->Count, 3);
+
+my $tix2 = RT::Tickets->new($RT::SystemUser);
+$tix2->FromSQL('Requestor.Name LIKE "TestOne" OR Requestor.Name LIKE "TestTwo"');
+
+is ($tix2->Count, 3);
+
+
+my $tix3 = RT::Tickets->new($RT::SystemUser);
+$tix3->FromSQL('Requestor.EmailAddress LIKE "rqtest1"');
+
+is ($tix3->Count, 2);
+
+my $tix4 = RT::Tickets->new($RT::SystemUser);
+$tix4->FromSQL('Requestor.Name LIKE "TestOne" ');
+
+is ($tix4->Count, 2);
+
+# Searching for tickets that have two requestors isn't supported
+# There's no way to differentiate "one requestor name that matches foo and bar"
+# and "two requestors, one matching foo and one matching bar"
+
+# my $tix5 = RT::Tickets->new($RT::SystemUser);
+# $tix5->FromSQL('Requestor.Name LIKE "TestOne" AND Requestor.Name LIKE "TestTwo"');
+#
+# is ($tix5->Count, 1);
+#
+# my $tix6 = RT::Tickets->new($RT::SystemUser);
+# $tix6->FromSQL('Requestor.EmailAddress LIKE "rqtest1" AND Requestor.EmailAddress LIKE "rqtest2"');
+#
+# is ($tix6->Count, 1);
+
+
+
+}
+
+{
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+$t1->Create(Queue => 'general', Subject => "LimitWatchers test", Requestors => \['requestor1@example.com']);
+
+
+}
+
+{
+
+# We assume that we've got some tickets hanging around from before.
+ok( my $unlimittickets = RT::Tickets->new( $RT::SystemUser ) );
+ok( $unlimittickets->UnLimit );
+ok( $unlimittickets->Count > 0, "UnLimited tickets object should return tickets" );
+
+
+}
+
+1;
diff --git a/rt/t/api/tickets_overlay_sql.t b/rt/t/api/tickets_overlay_sql.t
new file mode 100644
index 0000000..7980886
--- /dev/null
+++ b/rt/t/api/tickets_overlay_sql.t
@@ -0,0 +1,73 @@
+
+use RT;
+use RT::Test tests => 7;
+
+
+{
+
+use RT::Tickets;
+use strict;
+
+my $tix = RT::Tickets->new($RT::SystemUser);
+{
+ my $query = "Status = 'open'";
+ my ($status, $msg) = $tix->FromSQL($query);
+ ok ($status, "correct query") or diag("error: $msg");
+}
+
+
+my (@created,%created);
+my $string = 'subject/content SQL test';
+{
+ my $t = RT::Ticket->new($RT::SystemUser);
+ ok( $t->Create(Queue => 'General', Subject => $string), "Ticket Created");
+ $created{ $t->Id }++; push @created, $t->Id;
+}
+
+{
+ my $Message = MIME::Entity->build(
+ Subject => 'this is my subject',
+ From => 'jesse@example.com',
+ Data => [ $string ],
+ );
+
+ my $t = RT::Ticket->new($RT::SystemUser);
+ ok( $t->Create( Queue => 'General',
+ Subject => 'another ticket',
+ MIMEObj => $Message,
+ MemberOf => $created[0]
+ ),
+ "Ticket Created"
+ );
+ $created{ $t->Id }++; push @created, $t->Id;
+}
+
+{
+ my $query = ("Subject LIKE '$string' OR Content LIKE '$string'");
+ my ($status, $msg) = $tix->FromSQL($query);
+ ok ($status, "correct query") or diag("error: $msg");
+
+ my $count = 0;
+ while (my $tick = $tix->Next) {
+ $count++ if $created{ $tick->id };
+ }
+ is ($count, scalar @created, "number of returned tickets same as entered");
+}
+
+{
+ my $query = "id = $created[0] OR MemberOf = $created[0]";
+ my ($status, $msg) = $tix->FromSQL($query);
+ ok ($status, "correct query") or diag("error: $msg");
+
+ my $count = 0;
+ while (my $tick = $tix->Next) {
+ $count++ if $created{ $tick->id };
+ }
+ is ($count, scalar @created, "number of returned tickets same as entered");
+}
+
+
+
+}
+
+1;
diff --git a/rt/t/api/uri-fsck_com_rt.t b/rt/t/api/uri-fsck_com_rt.t
new file mode 100644
index 0000000..d62e580
--- /dev/null
+++ b/rt/t/api/uri-fsck_com_rt.t
@@ -0,0 +1,28 @@
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 8;
+
+use_ok("RT::URI::fsck_com_rt");
+my $uri = RT::URI::fsck_com_rt->new($RT::SystemUser);
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+my ($id,$trans,$msg) =$t1->Create (Queue => 'general', Subject => 'Requestor test one', );
+ok ($id, $msg);
+
+ok(ref($uri));
+
+ok (UNIVERSAL::isa($uri,"RT::URI::fsck_com_rt"), "It's an RT::URI::fsck_com_rt");
+
+ok ($uri->isa('RT::URI::base'), "It's an RT::URI::base");
+ok ($uri->isa('RT::Base'), "It's an RT::Base");
+
+is ($uri->LocalURIPrefix , 'fsck.com-rt://'.RT->Config->Get('Organization'));
+
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+$ticket->Load(1);
+$uri = RT::URI::fsck_com_rt->new($ticket->CurrentUser);
+is($uri->LocalURIPrefix. "/ticket/1" , $uri->URIForObject($ticket));
+
+1;
diff --git a/rt/t/api/uri-t.t b/rt/t/api/uri-t.t
new file mode 100644
index 0000000..4695629
--- /dev/null
+++ b/rt/t/api/uri-t.t
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 6;
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+my ($id,$trans,$msg) =$t1->Create (Queue => 'general', Subject => 'Requestor test one', );
+ok ($id, $msg);
+
+use_ok("RT::URI::t");
+my $uri = RT::URI::t->new($RT::SystemUser);
+ok(ref($uri), "URI object exists");
+
+my $uristr = "t:1";
+$uri->ParseURI($uristr);
+is(ref($uri->Object), "RT::Ticket", "Object loaded is a ticket");
+is($uri->Object->Id, 1, "Object loaded has correct ID");
+is($uri->URI, 'fsck.com-rt://'.RT->Config->Get('Organization').'/ticket/1',
+ "URI object has correct URI string");
+
+1;
diff --git a/rt/t/api/user.t b/rt/t/api/user.t
new file mode 100644
index 0000000..25cf747
--- /dev/null
+++ b/rt/t/api/user.t
@@ -0,0 +1,339 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 108;
+
+
+{
+
+ok(require RT::User);
+
+
+}
+
+{
+
+# Make sure we can create a user
+
+my $u1 = RT::User->new($RT::SystemUser);
+is(ref($u1), 'RT::User');
+my ($id, $msg) = $u1->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-1@example.com');
+ok ($id, "Creating user CreateTest1 - " . $msg );
+
+# Make sure we can't create a second user with the same name
+my $u2 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u2->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-2@example.com');
+ok (!$id, $msg);
+
+
+# Make sure we can't create a second user with the same EmailAddress address
+my $u3 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u3->Create(Name => 'CreateTest2'.$$, EmailAddress => $$.'create-test-1@example.com');
+ok (!$id, $msg);
+
+# Make sure we can create a user with no EmailAddress address
+my $u4 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u4->Create(Name => 'CreateTest3'.$$);
+ok ($id, $msg);
+
+# make sure we can create a second user with no EmailAddress address
+my $u5 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u5->Create(Name => 'CreateTest4'.$$);
+ok ($id, $msg);
+
+# make sure we can create a user with a blank EmailAddress address
+my $u6 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u6->Create(Name => 'CreateTest6'.$$, EmailAddress => '');
+ok ($id, $msg);
+# make sure we can create a second user with a blankEmailAddress address
+my $u7 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u7->Create(Name => 'CreateTest7'.$$, EmailAddress => '');
+ok ($id, $msg);
+
+# Can we change the email address away from from "";
+($id,$msg) = $u7->SetEmailAddress('foo@bar'.$$);
+ok ($id, $msg);
+# can we change the address back to "";
+($id,$msg) = $u7->SetEmailAddress('');
+ok ($id, $msg);
+is_empty ($u7->EmailAddress);
+
+RT->Config->Set('ValidateUserEmailAddresses' => 1);
+# Make sur we can't create a user with multiple email adresses separated by comma
+my $u8 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u8->Create(Name => 'CreateTest8'.$$, EmailAddress => $$.'create-test-81@example.com, '.$$.'create-test-82@example.com');
+ok (!$id, $msg);
+
+# Make sur we can't create a user with multiple email adresses separated by space
+my $u9 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u9->Create(Name => 'CreateTest9'.$$, EmailAddress => $$.'create-test-91@example.com '.$$.'create-test-92@example.com');
+ok (!$id, $msg);
+
+# Make sur we can't create a user with invalid email address
+my $u10 = RT::User->new($RT::SystemUser);
+($id, $msg) = $u10->Create(Name => 'CreateTest10'.$$, EmailAddress => $$.'create-test10}@[.com');
+ok (!$id, $msg);
+RT->Config->Set('ValidateUserEmailAddresses' => undef);
+
+}
+
+{
+
+
+ok(my $user = RT::User->new($RT::SystemUser));
+ok($user->Load('root'), "Loaded user 'root'");
+ok($user->Privileged, "User 'root' is privileged");
+ok(my ($v,$m) = $user->SetPrivileged(0));
+is ($v ,1, "Set unprivileged suceeded ($m)");
+ok(!$user->Privileged, "User 'root' is no longer privileged");
+ok(my ($v2,$m2) = $user->SetPrivileged(1));
+is ($v2 ,1, "Set privileged suceeded ($m2");
+ok($user->Privileged, "User 'root' is privileged again");
+
+
+}
+
+{
+
+ok(my $u = RT::User->new($RT::SystemUser));
+ok($u->Load(1), "Loaded the first user");
+is($u->PrincipalObj->ObjectId , 1, "user 1 is the first principal");
+is($u->PrincipalObj->PrincipalType, 'User' , "Principal 1 is a user, not a group");
+
+
+}
+
+{
+
+my $root = RT::User->new($RT::SystemUser);
+$root->Load('root');
+ok($root->Id, "Found the root user");
+my $rootq = RT::Queue->new($root);
+$rootq->Load(1);
+ok($rootq->Id, "Loaded the first queue");
+
+ok ($rootq->CurrentUser->HasRight(Right=> 'CreateTicket', Object => $rootq), "Root can create tickets");
+
+my $new_user = RT::User->new($RT::SystemUser);
+my ($id, $msg) = $new_user->Create(Name => 'ACLTest'.$$);
+
+ok ($id, "Created a new user for acl test $msg");
+
+my $q = RT::Queue->new($new_user);
+$q->Load(1);
+ok($q->Id, "Loaded the first queue");
+
+
+ok (!$q->CurrentUser->HasRight(Right => 'CreateTicket', Object => $q), "Some random user doesn't have the right to create tickets");
+ok (my ($gval, $gmsg) = $new_user->PrincipalObj->GrantRight( Right => 'CreateTicket', Object => $q), "Granted the random user the right to create tickets");
+ok ($gval, "Grant succeeded - $gmsg");
+
+
+ok ($q->CurrentUser->HasRight(Right => 'CreateTicket', Object => $q), "The user can create tickets after we grant him the right");
+ok ( ($gval, $gmsg) = $new_user->PrincipalObj->RevokeRight( Right => 'CreateTicket', Object => $q), "revoked the random user the right to create tickets");
+ok ($gval, "Revocation succeeded - $gmsg");
+ok (!$q->CurrentUser->HasRight(Right => 'CreateTicket', Object => $q), "The user can't create tickets anymore");
+
+
+
+
+
+# Create a ticket in the queue
+my $new_tick = RT::Ticket->new($RT::SystemUser);
+my ($tickid, $tickmsg) = $new_tick->Create(Subject=> 'ACL Test', Queue => 'General');
+ok($tickid, "Created ticket: $tickid");
+# Make sure the user doesn't have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
+# Create a new group
+my $group = RT::Group->new($RT::SystemUser);
+$group->CreateUserDefinedGroup(Name => 'ACLTest'.$$);
+ok($group->Id, "Created a new group Ok");
+# Grant a group the right to modify tickets in a queue
+ok(my ($gv,$gm) = $group->PrincipalObj->GrantRight( Object => $q, Right => 'ModifyTicket'),"Granted the group the right to modify tickets");
+ok($gv,"Grant succeeed - $gm");
+# Add the user to the group
+ok( my ($aid, $amsg) = $group->AddMember($new_user->PrincipalId), "Added the member to the group");
+ok ($aid, "Member added to group: $amsg");
+# Make sure the user does have the right to modify tickets in the queue
+ok ($new_user->HasRight( Object => $new_tick, Right => 'ModifyTicket'), "User can modify the ticket with group membership");
+
+
+# Remove the user from the group
+ok( my ($did, $dmsg) = $group->DeleteMember($new_user->PrincipalId), "Deleted the member from the group");
+ok ($did,"Deleted the group member: $dmsg");
+# Make sure the user doesn't have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
+
+
+my $q_as_system = RT::Queue->new($RT::SystemUser);
+$q_as_system->Load(1);
+ok($q_as_system->Id, "Loaded the first queue");
+
+# Create a ticket in the queue
+my $new_tick2 = RT::Ticket->new($RT::SystemUser);
+(my $tick2id, $tickmsg) = $new_tick2->Create(Subject=> 'ACL Test 2', Queue =>$q_as_system->Id);
+ok($tick2id, "Created ticket: $tick2id");
+is($new_tick2->QueueObj->id, $q_as_system->Id, "Created a new ticket in queue 1");
+
+
+# make sure that the user can't do this without subgroup membership
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
+
+# Create a subgroup
+my $subgroup = RT::Group->new($RT::SystemUser);
+$subgroup->CreateUserDefinedGroup(Name => 'Subgrouptest'.$$);
+ok($subgroup->Id, "Created a new group ".$subgroup->Id."Ok");
+#Add the subgroup as a subgroup of the group
+my ($said, $samsg) = $group->AddMember($subgroup->PrincipalId);
+ok ($said, "Added the subgroup as a member of the group");
+# Add the user to a subgroup of the group
+
+my ($usaid, $usamsg) = $subgroup->AddMember($new_user->PrincipalId);
+ok($usaid,"Added the user ".$new_user->Id."to the subgroup");
+# Make sure the user does have the right to modify tickets in the queue
+ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket with subgroup membership");
+
+# {{{ Deal with making sure that members of subgroups of a disabled group don't have rights
+
+($id, $msg) = $group->SetDisabled(1);
+ok ($id,$msg);
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket when the group ".$group->Id. " is disabled");
+ ($id, $msg) = $group->SetDisabled(0);
+ok($id,$msg);
+# Test what happens when we disable the group the user is a member of directly
+
+($id, $msg) = $subgroup->SetDisabled(1);
+ ok ($id,$msg);
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket when the group ".$subgroup->Id. " is disabled");
+ ($id, $msg) = $subgroup->SetDisabled(0);
+ ok ($id,$msg);
+ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket without group membership");
+
+# }}}
+
+
+my ($usrid, $usrmsg) = $subgroup->DeleteMember($new_user->PrincipalId);
+ok($usrid,"removed the user from the group - $usrmsg");
+# Make sure the user doesn't have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
+
+#revoke the right to modify tickets in a queue
+ok(($gv,$gm) = $group->PrincipalObj->RevokeRight( Object => $q, Right => 'ModifyTicket'),"Granted the group the right to modify tickets");
+ok($gv,"revoke succeeed - $gm");
+
+# {{{ Test the user's right to modify a ticket as a _queue_ admincc for a right granted at the _queue_ level
+
+# Grant queue admin cc the right to modify ticket in the queue
+ok(my ($qv,$qm) = $q_as_system->AdminCc->PrincipalObj->GrantRight( Object => $q_as_system, Right => 'ModifyTicket'),"Granted the queue adminccs the right to modify tickets");
+ok($qv, "Granted the right successfully - $qm");
+
+# Add the user as a queue admincc
+ok (my ($add_id, $add_msg) = $q_as_system->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
+ok ($add_id, "the user is now a queue admincc - $add_msg");
+
+# Make sure the user does have the right to modify tickets in the queue
+ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
+# Remove the user from the role group
+ok (my ($del_id, $del_msg) = $q_as_system->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
+
+# Make sure the user doesn't have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
+
+# }}}
+
+# {{{ Test the user's right to modify a ticket as a _ticket_ admincc with the right granted at the _queue_ level
+
+# Add the user as a ticket admincc
+ok (my( $uadd_id, $uadd_msg) = $new_tick2->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
+ok ($add_id, "the user is now a queue admincc - $add_msg");
+
+# Make sure the user does have the right to modify tickets in the queue
+ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
+
+# Remove the user from the role group
+ok (( $del_id, $del_msg) = $new_tick2->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
+
+# Make sure the user doesn't have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
+
+
+# Revoke the right to modify ticket in the queue
+ok(my ($rqv,$rqm) = $q_as_system->AdminCc->PrincipalObj->RevokeRight( Object => $q_as_system, Right => 'ModifyTicket'),"Revokeed the queue adminccs the right to modify tickets");
+ok($rqv, "Revoked the right successfully - $rqm");
+
+# }}}
+
+
+
+# {{{ Test the user's right to modify a ticket as a _queue_ admincc for a right granted at the _system_ level
+
+# Before we start Make sure the user does not have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can not modify the ticket without it being granted");
+ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue without it being granted");
+
+# Grant queue admin cc the right to modify ticket in the queue
+ok(($qv,$qm) = $q_as_system->AdminCc->PrincipalObj->GrantRight( Object => $RT::System, Right => 'ModifyTicket'),"Granted the queue adminccs the right to modify tickets");
+ok($qv, "Granted the right successfully - $qm");
+
+# Make sure the user can't modify the ticket before they're added as a watcher
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can not modify the ticket without being an admincc");
+ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue without being an admincc");
+
+# Add the user as a queue admincc
+ok (($add_id, $add_msg) = $q_as_system->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
+ok ($add_id, "the user is now a queue admincc - $add_msg");
+
+# Make sure the user does have the right to modify tickets in the queue
+ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
+ok ($new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can modify tickets in the queue as an admincc");
+# Remove the user from the role group
+ok (($del_id, $del_msg) = $q_as_system->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
+
+# Make sure the user doesn't have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without group membership");
+ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can't modify tickets in the queue without group membership");
+
+# }}}
+
+# {{{ Test the user's right to modify a ticket as a _ticket_ admincc with the right granted at the _queue_ level
+
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can not modify the ticket without being an admincc");
+ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue obj without being an admincc");
+
+
+# Add the user as a ticket admincc
+ok ( ($uadd_id, $uadd_msg) = $new_tick2->AddWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Added the new user as a queue admincc");
+ok ($add_id, "the user is now a queue admincc - $add_msg");
+
+# Make sure the user does have the right to modify tickets in the queue
+ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can modify the ticket as an admincc");
+ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue obj being only a ticket admincc");
+
+# Remove the user from the role group
+ok ( ($del_id, $del_msg) = $new_tick2->DeleteWatcher(Type => 'AdminCc', PrincipalId => $new_user->PrincipalId) , "Deleted the new user as a queue admincc");
+
+# Make sure the user doesn't have the right to modify tickets in the queue
+ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket without being an admincc");
+ok (!$new_user->HasRight( Object => $new_tick2->QueueObj, Right => 'ModifyTicket'), "User can not modify tickets in the queue obj without being an admincc");
+
+
+# Revoke the right to modify ticket in the queue
+ok(($rqv,$rqm) = $q_as_system->AdminCc->PrincipalObj->RevokeRight( Object => $RT::System, Right => 'ModifyTicket'),"Revokeed the queue adminccs the right to modify tickets");
+ok($rqv, "Revoked the right successfully - $rqm");
+
+# }}}
+
+
+
+
+# Grant "privileged users" the system right to create users
+# Create a privileged user.
+# have that user create another user
+# Revoke the right for privileged users to create users
+# have the privileged user try to create another user and fail the ACL check
+
+
+}
+
+1;
diff --git a/rt/t/api/users.t b/rt/t/api/users.t
new file mode 100644
index 0000000..d1ff174
--- /dev/null
+++ b/rt/t/api/users.t
@@ -0,0 +1,80 @@
+
+use strict;
+use warnings;
+use RT;
+use RT::Test tests => 11;
+
+
+{
+
+ok(require RT::Users);
+
+
+}
+
+{
+ no warnings qw(redefine once);
+
+ok(my $users = RT::Users->new($RT::SystemUser));
+$users->WhoHaveRight(Object =>$RT::System, Right =>'SuperUser');
+is($users->Count , 1, "There is one privileged superuser - Found ". $users->Count );
+# TODO: this wants more testing
+
+my $RTxUser = RT::User->new($RT::SystemUser);
+my ($id, $msg) = $RTxUser->Create( Name => 'RTxUser', Comments => "RTx extension user", Privileged => 1);
+ok ($id,$msg);
+
+my $group = RT::Group->new($RT::SystemUser);
+$group->LoadACLEquivalenceGroup($RTxUser->PrincipalObj);
+
+my $RTxSysObj = {};
+bless $RTxSysObj, 'RTx::System';
+*RTx::System::Id = sub { 1; };
+*RTx::System::id = *RTx::System::Id;
+my $ace = RT::Record->new($RT::SystemUser);
+$ace->Table('ACL');
+$ace->_BuildTableAttributes unless ($RT::Record::_TABLE_ATTR->{ref($ace)});
+($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System', ObjectId => 1 );
+ok ($id, "ACL for RTxSysObj created");
+
+my $RTxObj = {};
+bless $RTxObj, 'RTx::System::Record';
+*RTx::System::Record::Id = sub { 4; };
+*RTx::System::Record::id = *RTx::System::Record::Id;
+
+$users = RT::Users->new($RT::SystemUser);
+$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxSysObj);
+is($users->Count, 1, "RTxUserRight found for RTxSysObj");
+
+$users = RT::Users->new($RT::SystemUser);
+$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj);
+is($users->Count, 0, "RTxUserRight not found for RTxObj");
+
+$users = RT::Users->new($RT::SystemUser);
+$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]);
+is($users->Count, 1, "RTxUserRight found for RTxObj using EquivObjects");
+
+$ace = RT::Record->new($RT::SystemUser);
+$ace->Table('ACL');
+$ace->_BuildTableAttributes unless ($RT::Record::_TABLE_ATTR->{ref($ace)});
+($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System::Record', ObjectId => 5 );
+ok ($id, "ACL for RTxObj created");
+
+my $RTxObj2 = {};
+bless $RTxObj2, 'RTx::System::Record';
+*RTx::System::Record::Id = sub { 5; };
+*RTx::System::Record::id = sub { 5; };
+
+$users = RT::Users->new($RT::SystemUser);
+$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2);
+is($users->Count, 1, "RTxUserRight found for RTxObj2");
+
+$users = RT::Users->new($RT::SystemUser);
+$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]);
+is($users->Count, 1, "RTxUserRight found for RTxObj2");
+
+
+
+}
+
+1;
diff --git a/rt/t/approval/basic.t b/rt/t/approval/basic.t
new file mode 100644
index 0000000..5974591
--- /dev/null
+++ b/rt/t/approval/basic.t
@@ -0,0 +1,218 @@
+
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ eval { require Email::Abstract; require Test::Email; 1 }
+ or plan skip_all => 'require Email::Abstract and Test::Email';
+}
+
+
+use RT;
+use RT::Test tests => 39;
+use RT::Test::Email;
+
+RT->Config->Set( LogToScreen => 'debug' );
+RT->Config->Set( UseTransactionBatch => 1 );
+my ($baseurl, $m) = RT::Test->started_ok;
+
+my $q = RT::Queue->new($RT::SystemUser);
+$q->Load('___Approvals');
+$q->SetDisabled(0);
+
+my %users;
+for my $user_name (qw(minion cfo ceo )) {
+ my $user = $users{$user_name} = RT::User->new($RT::SystemUser);
+ $user->Create( Name => uc($user_name),
+ Privileged => 1,
+ EmailAddress => $user_name.'@company.com');
+ my ($val, $msg);
+ ($val, $msg) = $user->PrincipalObj->GrantRight(Object =>$q, Right => $_)
+ for qw(ModifyTicket OwnTicket ShowTicket);
+}
+
+# XXX: we need to make the first approval ticket open so notification is sent.
+my $approvals =
+'===Create-Ticket: for-CFO
+Queue: ___Approvals
+Type: approval
+Owner: CFO
+Requestors: {$Tickets{"TOP"}->Requestors}
+Refers-To: TOP
+Subject: CFO Approval for PO: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject}
+Due: {time + 86400}
+Content-Type: text/plain
+Content: Your approval is requested for the PO ticket {$Tickets{"TOP"}->Id}: {$Tickets{"TOP"}->Subject}
+Blah
+Blah
+ENDOFCONTENT
+===Create-Ticket: for-CEO
+Queue: ___Approvals
+Type: approval
+Owner: CEO
+Requestors: {$Tickets{"TOP"}->Requestors}
+Subject: PO approval request for {$Tickets{"TOP"}->Subject}
+Refers-To: TOP
+Depends-On: for-CFO
+Depended-On-By: {$Tickets{"TOP"}->Id}
+Content-Type: text/plain
+Content:
+Your CFO approved PO ticket {$Tickets{"TOP"}->Id} for minion. you ok with that?
+ENDOFCONTENT
+';
+
+my $apptemp = RT::Template->new($RT::SystemUser);
+$apptemp->Create( Content => $approvals, Name => "PO Approvals", Queue => "0");
+
+ok($apptemp->Id);
+
+$q = RT::Queue->new($RT::SystemUser);
+$q->Create(Name => 'PO');
+ok ($q->Id, "Created PO queue");
+
+my $scrip = RT::Scrip->new($RT::SystemUser);
+my ($sval, $smsg) =$scrip->Create( ScripCondition => 'On Create',
+ ScripAction => 'Create Tickets',
+ Template => 'PO Approvals',
+ Queue => $q->Id,
+ Description => 'Create Approval Tickets');
+ok ($sval, $smsg);
+ok ($scrip->Id, "Created the scrip");
+ok ($scrip->TemplateObj->Id, "Created the scrip template");
+ok ($scrip->ConditionObj->Id, "Created the scrip condition");
+ok ($scrip->ActionObj->Id, "Created the scrip action");
+
+my $t = RT::Ticket->new($RT::SystemUser);
+my ($tid, $ttrans, $tmsg);
+
+mail_ok {
+ ($tid, $ttrans, $tmsg) =
+ $t->Create(Subject => "PO for stationary",
+ Owner => "root", Requestor => 'minion',
+ Queue => $q->Id);
+} { from => qr/RT System/,
+ to => 'cfo@company.com',
+ subject => qr/New Pending Approval: CFO Approval/,
+ body => qr/pending your approval.*Your approval is requested.*Blah/s
+},{ from => qr/PO via RT/,
+ to => 'minion@company.com',
+ subject => qr/PO for stationary/,
+ body => qr/automatically generated in response/
+};
+
+ok ($tid,$tmsg);
+
+is ($t->ReferredToBy->Count,2, "referred to by the two tickets");
+
+my $deps = $t->DependsOn;
+is ($deps->Count, 1, "The ticket we created depends on one other ticket");
+my $dependson_ceo= $deps->First->TargetObj;
+ok ($dependson_ceo->Id, "It depends on a real ticket");
+like($dependson_ceo->Subject, qr/PO approval request.*stationary/);
+
+$deps = $dependson_ceo->DependsOn;
+is ($deps->Count, 1, "The ticket we created depends on one other ticket");
+my $dependson_cfo = $deps->First->TargetObj;
+ok ($dependson_cfo->Id, "It depends on a real ticket");
+
+like($dependson_cfo->Subject, qr/CFO Approval for PO.*stationary/);
+
+is_deeply([ $t->Status, $dependson_cfo->Status, $dependson_ceo->Status ],
+ [ 'new', 'open', 'new'], 'tickets in correct state');
+
+mail_ok {
+ my $cfo = RT::CurrentUser->new;
+ $cfo->Load( $users{cfo} );
+
+ $dependson_cfo->CurrentUser($cfo);
+ my $notes = MIME::Entity->build(
+ Data => [ 'Resources exist to be consumed.' ]
+ );
+ RT::I18N::SetMIMEEntityToUTF8($notes); # convert text parts into utf-8
+
+ my ( $notesval, $notesmsg ) = $dependson_cfo->Correspond( MIMEObj => $notes );
+ ok($notesval, $notesmsg);
+
+ my ($ok, $msg) = $dependson_cfo->SetStatus( Status => 'resolved' );
+ ok($ok, "cfo can approve - $msg");
+
+} { from => qr/RT System/,
+ to => 'ceo@company.com',
+ subject => qr/New Pending Approval: PO approval request for PO/,
+ body => qr/pending your approval.*CFO approved.*ok with that\?/s
+},{ from => qr/RT System/,
+ to => 'minion@company.com',
+ subject => qr/Ticket Approved:/,
+ body => qr/approved by CFO.*notes: Resources exist to be consumed/s
+};
+
+is ($t->DependsOn->Count, 1, "still depends only on the CEO approval");
+is ($t->ReferredToBy->Count,2, "referred to by the two tickets");
+
+is_deeply([ $t->Status, $dependson_cfo->Status, $dependson_ceo->Status ],
+ [ 'new', 'resolved', 'open'], 'ticket state after cfo approval');
+
+mail_ok {
+ my $ceo = RT::CurrentUser->new;
+ $ceo->Load( $users{ceo} );
+
+ $dependson_ceo->CurrentUser($ceo);
+ my $notes = MIME::Entity->build(
+ Data => [ 'And consumed they will be.' ]
+ );
+ RT::I18N::SetMIMEEntityToUTF8($notes); # convert text parts into utf-8
+
+ my ( $notesval, $notesmsg ) = $dependson_ceo->Correspond( MIMEObj => $notes );
+ ok($notesval, $notesmsg);
+
+ my ($ok, $msg) = $dependson_ceo->SetStatus( Status => 'resolved' );
+ ok($ok, "ceo can approve - $msg");
+
+} { from => qr/RT System/,
+ to => 'minion@company.com',
+ subject => qr/Ticket Approved:/,
+ body => qr/approved by CEO.*Its Owner may now start to act on it.*notes: And consumed they will be/s,
+}, { from => qr'CEO via RT',
+ to => 'root@localhost',
+ subject => qr/Ticket Approved/,
+ body => qr/The ticket has been approved, you may now start to act on it/,
+};
+
+
+is_deeply([ $t->Status, $dependson_cfo->Status, $dependson_ceo->Status ],
+ [ 'new', 'resolved', 'resolved'], 'ticket state after ceo approval');
+
+$dependson_cfo->_Set(
+ Field => 'Status',
+ Value => 'open');
+
+$dependson_ceo->_Set(
+ Field => 'Status',
+ Value => 'new');
+
+mail_ok {
+ my $cfo = RT::CurrentUser->new;
+ $cfo->Load( $users{cfo} );
+
+ $dependson_cfo->CurrentUser($cfo);
+ my $notes = MIME::Entity->build(
+ Data => [ 'sorry, out of resources.' ]
+ );
+ RT::I18N::SetMIMEEntityToUTF8($notes); # convert text parts into utf-8
+
+ my ( $notesval, $notesmsg ) = $dependson_cfo->Correspond( MIMEObj => $notes );
+ ok($notesval, $notesmsg);
+
+ my ($ok, $msg) = $dependson_cfo->SetStatus( Status => 'rejected' );
+ ok($ok, "cfo can approve - $msg");
+
+} { from => qr/RT System/,
+ to => 'minion@company.com',
+ subject => qr/Ticket Rejected: PO for stationary/,
+ body => qr/rejected by CFO.*out of resources/s,
+};
+
+$t->Load($t->id);$dependson_ceo->Load($dependson_ceo->id);
+is_deeply([ $t->Status, $dependson_cfo->Status, $dependson_ceo->Status ],
+ [ 'rejected', 'rejected', 'deleted'], 'ticket state after cfo rejection');
+
diff --git a/rt/t/clicky.t b/rt/t/clicky.t
new file mode 100644
index 0000000..8d5227e
--- /dev/null
+++ b/rt/t/clicky.t
@@ -0,0 +1,119 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More;
+use RT::Test tests => 14;
+my %clicky;
+
+BEGIN {
+
+ %clicky = map { $_ => 1 } grep $_, RT->Config->Get('Active_MakeClicky');
+
+# this's hack: we have to use RT::Test first to get RT->Config work, this
+# results in the fact that we can't plan any more
+ unless ( keys %clicky ) {
+ SKIP: {
+ skip "No active Make Clicky actions", 14;
+ }
+ exit 0;
+ }
+}
+
+my ($baseurl, $m) = RT::Test->started_ok;
+
+use_ok('MIME::Entity');
+
+my $CurrentUser = $RT::SystemUser;
+
+my $queue = new RT::Queue($CurrentUser);
+$queue->Load('General') || Abort(loc("Queue could not be loaded."));
+
+my $message = MIME::Entity->build(
+ Subject => 'test',
+ Data => <<END,
+If you have some problems with RT you could find help
+on http://wiki.bestpractical.com or subscribe to
+the rt-users\@lists.bestpractical.com.
+
+--
+Best regards. BestPractical Team.
+END
+);
+
+my $ticket = new RT::Ticket( $CurrentUser );
+my ($id) = $ticket->Create(
+ Subject => 'test',
+ Queue => $queue->Id,
+ MIMEObj => $message,
+);
+ok($id, "We created a ticket #$id");
+ok($ticket->Transactions->First->Content, "Has some content");
+
+ok $m->login, 'logged in';
+ok $m->goto_ticket($id), 'opened diplay page of the ticket';
+
+SKIP: {
+ skip "httpurl action disabled", 1 unless $clicky{'httpurl'};
+ my @links = $m->find_link(
+ tag => 'a',
+ url => 'http://wiki.bestpractical.com',
+ text => 'Open URL',
+ );
+ ok( scalar @links, 'found clicky link' );
+}
+
+SKIP: {
+ skip "httpurl_overwrite action disabled", 1 unless $clicky{'httpurl_overwrite'};
+ my @links = $m->find_link(
+ tag => 'a',
+ url => 'http://wiki.bestpractical.com',
+ text => 'http://wiki.bestpractical.com',
+ );
+ ok( scalar @links, 'found clicky link' );
+}
+
+{
+
+my $message = MIME::Entity->build(
+ Type => 'text/html',
+ Subject => 'test',
+ Data => <<END,
+If you have some problems with RT you could find help
+on <a href="http://wiki.bestpractical.com">wiki</a>
+or find known bugs on http://rt3.fsck.com
+--
+Best regards. BestPractical Team.
+END
+);
+
+my $ticket = new RT::Ticket($CurrentUser);
+my ($id) = $ticket->Create(
+ Subject => 'test',
+ Queue => $queue->Id,
+ MIMEObj => $message,
+);
+ok( $id, "We created a ticket #$id" );
+ok( $ticket->Transactions->First->Content, "Has some content" );
+
+ok $m->login, 'logged in';
+ok $m->goto_ticket($id), 'opened diplay page of the ticket';
+
+SKIP: {
+ skip "httpurl action disabled", 2 unless $clicky{'httpurl'};
+ my @links = $m->find_link(
+ tag => 'a',
+ url => 'http://wiki.bestpractical.com',
+ text => 'Open URL',
+ );
+ ok( @links == 0, 'not make clicky links clicky twice' );
+
+ @links = $m->find_link(
+ tag => 'a',
+ url => 'http://rt3.fsck.com',
+ text => 'Open URL',
+ );
+ ok( scalar @links, 'found clicky link' );
+}
+
+}
diff --git a/rt/t/cron.t b/rt/t/cron.t
new file mode 100644
index 0000000..29d7bd7
--- /dev/null
+++ b/rt/t/cron.t
@@ -0,0 +1,90 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use RT;
+use RT::Test tests => 18;
+
+
+### Set up some testing data. Test the testing data because why not?
+
+# Create a user with rights, a queue, and some tickets.
+my $user_obj = RT::User->new($RT::SystemUser);
+my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('tara@example.com');
+ok($ret, 'record test user creation');
+$user_obj->SetName('tara');
+$user_obj->PrincipalObj->GrantRight(Right => 'SuperUser');
+my $CurrentUser = RT::CurrentUser->new('tara');
+
+# Create our template, which will be used for tests of RT::Action::Record*.
+
+my $template_content = 'RT-Send-Cc: tla@example.com
+RT-Send-Bcc: jesse@example.com
+
+This is a content string with no content.';
+
+my $template_obj = RT::Template->new($CurrentUser);
+$template_obj->Create(Queue => '0',
+ Name => 'recordtest',
+ Description => 'testing Record actions',
+ Content => $template_content,
+ );
+
+# Create a queue and some tickets.
+
+my $queue_obj = RT::Queue->new($CurrentUser);
+($ret, $msg) = $queue_obj->Create(Name => 'recordtest', Description => 'queue for Action::Record testing');
+ok($ret, 'record test queue creation');
+
+my $ticket1 = RT::Ticket->new($CurrentUser);
+my ($id, $tobj, $msg2) = $ticket1->Create(Queue => $queue_obj,
+ Requestor => ['tara@example.com'],
+ Subject => 'bork bork bork',
+ Priority => 22,
+ );
+ok($id, 'record test ticket creation 1');
+my $ticket2 = RT::Ticket->new($CurrentUser);
+($id, $tobj, $msg2) = $ticket2->Create(Queue => $queue_obj,
+ Requestor => ['root@localhost'],
+ Subject => 'hurdy gurdy'
+ );
+ok($id, 'record test ticket creation 2');
+
+
+### OK. Have data, will travel.
+
+# First test the search.
+
+ok(require RT::Search::FromSQL, "Search::FromSQL loaded");
+my $ticketsqlstr = "Requestor.EmailAddress = '" . $CurrentUser->EmailAddress .
+ "' AND Priority > '20'";
+my $search = RT::Search::FromSQL->new(Argument => $ticketsqlstr, TicketsObj => RT::Tickets->new($CurrentUser),
+ );
+is(ref($search), 'RT::Search::FromSQL', "search created");
+ok($search->Prepare(), "fromsql search run");
+my $counter = 0;
+while(my $t = $search->TicketsObj->Next() ) {
+ is($t->Id(), $ticket1->Id(), "fromsql search results 1");
+ $counter++;
+}
+is ($counter, 1, "fromsql search results 2");
+
+# Right. Now test the actions.
+
+ok(require RT::Action::RecordComment);
+ok(require RT::Action::RecordCorrespondence);
+
+my ($comment_act, $correspond_act);
+ok($comment_act = RT::Action::RecordComment->new(TicketObj => $ticket1, TemplateObj => $template_obj, CurrentUser => $CurrentUser), "RecordComment created");
+ok($correspond_act = RT::Action::RecordCorrespondence->new(TicketObj => $ticket2, TemplateObj => $template_obj, CurrentUser => $CurrentUser), "RecordCorrespondence created");
+ok($comment_act->Prepare(), "Comment prepared");
+ok($correspond_act->Prepare(), "Correspond prepared");
+ok($comment_act->Commit(), "Comment committed");
+ok($correspond_act->Commit(), "Correspondence committed");
+
+# Now test for loop suppression.
+my ($trans, $desc, $transaction) = $ticket2->Comment(MIMEObj => $template_obj->MIMEObj);
+my $bogus_action = RT::Action::RecordComment->new(TicketObj => $ticket1, TemplateObj => $template_obj, TransactionObj => $transaction, CurrentUser => $CurrentUser);
+ok(!$bogus_action->Prepare(), "Comment aborted to prevent loop");
+
+1;
diff --git a/rt/t/customfields/access_via_queue.t b/rt/t/customfields/access_via_queue.t
new file mode 100644
index 0000000..c291860
--- /dev/null
+++ b/rt/t/customfields/access_via_queue.t
@@ -0,0 +1,160 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 35;
+use RT::Ticket;
+use RT::CustomField;
+
+my $queue_name = "CFSortQueue-$$";
+my $queue = RT::Test->load_or_create_queue( Name => $queue_name );
+ok($queue && $queue->id, "$queue_name - test queue creation");
+
+diag "create a CF\n" if $ENV{TEST_VERBOSE};
+my $cf_name = "Rights$$";
+my $cf;
+{
+ $cf = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $cf->Create(
+ Name => $cf_name,
+ Queue => $queue->id,
+ Type => 'FreeformSingle',
+ );
+ ok($ret, "Custom Field Order created");
+}
+
+my $tester = RT::Test->load_or_create_user(
+ Name => 'tester', Password => 'password',
+);
+ok $tester && $tester->id, 'loaded or created user';
+
+my $cc_role = RT::Group->new( $queue->CurrentUser );
+$cc_role->LoadQueueRoleGroup( Type => 'Cc', Queue => $queue->id );
+
+my $owner_role = RT::Group->new( $queue->CurrentUser );
+$owner_role->LoadQueueRoleGroup( Type => 'Owner', Queue => $queue->id );
+
+ok( RT::Test->set_rights(
+ { Principal => $tester, Right => [qw(SeeQueue ShowTicket CreateTicket ReplyToTicket Watch OwnTicket TakeTicket)] },
+ { Principal => $cc_role, Object => $queue, Right => [qw(SeeCustomField)] },
+ { Principal => $owner_role, Object => $queue, Right => [qw(ModifyCustomField)] },
+), 'set rights');
+
+{
+ my $ticket = RT::Ticket->new( $tester );
+ my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test' );
+ ok $tid, "created ticket";
+
+ ok !$ticket->CustomFields->First, "see no fields";
+}
+
+{
+ my $ticket = RT::Ticket->new( $tester );
+ my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id );
+ ok $tid, "created ticket";
+
+ my $cf = $ticket->CustomFields->First;
+ ok $cf, "Ccs see cf";
+}
+
+{
+ my $ticket = RT::Ticket->new( $tester );
+ my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id );
+ ok $tid, "created ticket";
+
+ (my $status, $msg) = $ticket->AddCustomFieldValue( Field => $cf->Name, Value => 'test' );
+ ok !$status, "Can not change CF";
+}
+
+{
+ my $ticket = RT::Ticket->new( $tester );
+ my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id, Owner => $tester->id );
+ ok $tid, "created ticket";
+
+ (my $status, $msg) = $ticket->AddCustomFieldValue( Field => $cf->Name, Value => 'test' );
+ ok $status, "Changed CF";
+ is $ticket->FirstCustomFieldValue( $cf->Name ), 'test';
+
+ ($status, $msg) = $ticket->DeleteCustomFieldValue( Field => $cf->Name, Value => 'test' );
+ ok $status, "Changed CF";
+ is $ticket->FirstCustomFieldValue( $cf->Name ), undef;
+}
+
+{
+ my $ticket = RT::Ticket->new( $tester );
+ my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id, Owner => $tester->id );
+ ok $tid, "created ticket";
+
+ (my $status, $msg) = $ticket->AddCustomFieldValue( Field => $cf->id, Value => 'test' );
+ ok $status, "Changed CF";
+ is $ticket->FirstCustomFieldValue( $cf->id ), 'test';
+
+ ($status, $msg) = $ticket->DeleteCustomFieldValue( Field => $cf->id, Value => 'test' );
+ ok $status, "Changed CF";
+ is $ticket->FirstCustomFieldValue( $cf->id ), undef;
+}
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login( tester => 'password' ), 'logged in';
+
+diag "check that we have no the CF on the create" if $ENV{'TEST_VERBOSE'};
+{
+ $m->submit_form(
+ form_name => "CreateTicketInQueue",
+ fields => { Queue => $queue->Name },
+ );
+
+ my $form = $m->form_name("TicketCreate");
+ my $cf_field = "Object-RT::Ticket--CustomField-". $cf->id ."-Value";
+ ok !$form->find_input( $cf_field ), 'no form field on the page';
+
+ $m->submit_form(
+ form_name => "TicketCreate",
+ fields => { Subject => 'test' },
+ );
+ my ($tid) = ($m->content =~ /Ticket (\d+) created/i);
+ ok $tid, "created a ticket succesfully";
+ $m->content_unlike(qr/$cf_name/, "don't see CF");
+
+ $m->follow_link( text => 'Custom Fields' );
+ $form = $m->form_number(3);
+ $cf_field = "Object-RT::Ticket-$tid-CustomField-". $cf->id ."-Value";
+ ok !$form->find_input( $cf_field ), 'no form field on the page';
+}
+
+diag "check that we see CF as Cc" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $tester );
+ my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id );
+ ok $tid, "created ticket";
+
+ ok $m->goto_ticket( $tid ), "opened ticket";
+ $m->content_like(qr/$cf_name/, "see CF");
+}
+
+diag "check that owner can see and edit CF" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $tester );
+ my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id, Owner => $tester->id );
+ ok $tid, "created ticket";
+
+ ok $m->goto_ticket( $tid ), "opened ticket";
+ $m->content_like(qr/$cf_name/, "see CF");
+
+ $m->follow_link( text => 'Custom Fields' );
+ my $form = $m->form_number(3);
+ my $cf_field = "Object-RT::Ticket-$tid-CustomField-". $cf->id ."-Value";
+ ok $form->find_input( $cf_field ), 'form field on the page';
+
+ $m->submit_form(
+ form_number => 3,
+ fields => {
+ $cf_field => "changed cf",
+ },
+ );
+
+ ok $m->goto_ticket( $tid ), "opened ticket";
+ $m->content_like(qr/$cf_name/, "changed cf");
+}
+
diff --git a/rt/t/customfields/sort_order.t b/rt/t/customfields/sort_order.t
new file mode 100644
index 0000000..472eb6b
--- /dev/null
+++ b/rt/t/customfields/sort_order.t
@@ -0,0 +1,92 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 18;
+use RT::Ticket;
+use RT::CustomField;
+
+my $queue_name = "CFSortQueue-$$";
+my $queue = RT::Test->load_or_create_queue( Name => $queue_name );
+ok($queue && $queue->id, "$queue_name - test queue creation");
+
+diag "create multiple CFs: B, A and C" if $ENV{TEST_VERBOSE};
+my @cfs = ();
+{
+ my $cf = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $cf->Create(
+ Name => "CF B",
+ Queue => $queue->id,
+ Type => 'FreeformSingle',
+ );
+ ok($ret, "Custom Field Order created");
+ push @cfs, $cf;
+}
+{
+ my $cf = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $cf->Create(
+ Name => "CF A",
+ Queue => $queue->id,
+ Type => 'FreeformSingle',
+ );
+ ok($ret, "Custom Field Order created");
+ push @cfs, $cf;
+}
+{
+ my $cf = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $cf->Create(
+ Name => "CF C",
+ Queue => $queue->id,
+ Type => 'FreeformSingle',
+ );
+ ok($ret, "Custom Field Order created");
+ push @cfs, $cf;
+}
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login( root => 'password' ), 'logged in';
+
+diag "reorder CFs: C, A and B" if $ENV{TEST_VERBOSE};
+{
+ $m->get( '/Admin/Queues/' );
+ $m->follow_link_ok( {text => $queue->id} );
+ $m->follow_link_ok( {text => 'Ticket Custom Fields'} );
+
+ my @tmp = ($m->content =~ /(CF [ABC])/g);
+ is_deeply(\@tmp, ['CF B', 'CF A', 'CF C']);
+
+ $m->follow_link_ok( {text => 'Move up', n => 2} );
+ $m->follow_link_ok( {text => 'Move up', n => 1} );
+ $m->follow_link_ok( {text => 'Move up', n => 2} );
+
+ @tmp = ($m->content =~ /(CF [ABC])/g);
+ is_deeply(\@tmp, ['CF C', 'CF A', 'CF B']);
+}
+
+diag "check ticket create, display and edit pages" if $ENV{TEST_VERBOSE};
+{
+ $m->submit_form(
+ form_name => "CreateTicketInQueue",
+ fields => { Queue => $queue->Name },
+ );
+
+ my @tmp = ($m->content =~ /(CF [ABC])/g);
+ is_deeply(\@tmp, ['CF C', 'CF A', 'CF B']);
+
+ $m->submit_form(
+ form_name => "TicketCreate",
+ fields => { Subject => 'test' },
+ );
+ my ($tid) = ($m->content =~ /Ticket (\d+) created/i);
+ ok $tid, "created a ticket succesfully";
+
+ @tmp = ($m->content =~ /(CF [ABC])/g);
+ is_deeply(\@tmp, ['CF C', 'CF A', 'CF B']);
+
+ $m->follow_link_ok( {text => 'Custom Fields'} );
+
+ @tmp = ($m->content =~ /(CF [ABC])/g);
+ is_deeply(\@tmp, ['CF C', 'CF A', 'CF B']);
+}
+
diff --git a/rt/t/data/configs/apache2.2+fastcgi.conf b/rt/t/data/configs/apache2.2+fastcgi.conf
new file mode 100644
index 0000000..f9b3b10
--- /dev/null
+++ b/rt/t/data/configs/apache2.2+fastcgi.conf
@@ -0,0 +1,44 @@
+ServerRoot %%SERVER_ROOT%%
+PidFile %%PID_FILE%%
+ServerAdmin root@localhost
+
+%%LOAD_MODULES%%
+
+TypesConfig /etc/mime.types
+FastCgiIpcDir /tmp
+
+<IfModule !mpm_netware_module>
+<IfModule !mpm_winnt_module>
+User www
+Group www
+</IfModule>
+</IfModule>
+
+Listen %%LISTEN%%
+
+ErrorLog "%%LOG_FILE%%"
+LogLevel debug
+
+<Directory />
+ Options FollowSymLinks
+ AllowOverride None
+ Order deny,allow
+ Deny from all
+</Directory>
+
+AddDefaultCharset UTF-8
+
+FastCgiServer %%RT_BIN_PATH%%/mason_handler.fcgi -processes 1 -idle-timeout 180 -initial-env RT_SITE_CONFIG=%%RT_SITE_CONFIG%%
+
+Alias /NoAuth/images/ %%DOCUMENT_ROOT%%/NoAuth/images/
+ScriptAlias / %%RT_BIN_PATH%%/mason_handler.fcgi/
+
+DocumentRoot "%%DOCUMENT_ROOT%%"
+<Location />
+ Order allow,deny
+ Allow from all
+
+ Options +ExecCGI
+ AddHandler fastcgi-script fcgi
+</Location>
+
diff --git a/rt/t/data/configs/apache2.2+fastcgi.conf.in b/rt/t/data/configs/apache2.2+fastcgi.conf.in
new file mode 100644
index 0000000..c0c01d1
--- /dev/null
+++ b/rt/t/data/configs/apache2.2+fastcgi.conf.in
@@ -0,0 +1,44 @@
+ServerRoot %%SERVER_ROOT%%
+PidFile %%PID_FILE%%
+ServerAdmin root@localhost
+
+%%LOAD_MODULES%%
+
+TypesConfig /etc/mime.types
+FastCgiIpcDir /tmp
+
+<IfModule !mpm_netware_module>
+<IfModule !mpm_winnt_module>
+User @WEB_USER@
+Group @WEB_GROUP@
+</IfModule>
+</IfModule>
+
+Listen %%LISTEN%%
+
+ErrorLog "%%LOG_FILE%%"
+LogLevel debug
+
+<Directory />
+ Options FollowSymLinks
+ AllowOverride None
+ Order deny,allow
+ Deny from all
+</Directory>
+
+AddDefaultCharset UTF-8
+
+FastCgiServer %%RT_BIN_PATH%%/mason_handler.fcgi -processes 1 -idle-timeout 180 -initial-env RT_SITE_CONFIG=%%RT_SITE_CONFIG%%
+
+Alias /NoAuth/images/ %%DOCUMENT_ROOT%%/NoAuth/images/
+ScriptAlias / %%RT_BIN_PATH%%/mason_handler.fcgi/
+
+DocumentRoot "%%DOCUMENT_ROOT%%"
+<Location />
+ Order allow,deny
+ Allow from all
+
+ Options +ExecCGI
+ AddHandler fastcgi-script fcgi
+</Location>
+
diff --git a/rt/t/data/configs/apache2.2+mod_perl.conf b/rt/t/data/configs/apache2.2+mod_perl.conf
new file mode 100644
index 0000000..341ae50
--- /dev/null
+++ b/rt/t/data/configs/apache2.2+mod_perl.conf
@@ -0,0 +1,40 @@
+ServerRoot %%SERVER_ROOT%%
+PidFile %%PID_FILE%%
+ServerAdmin root@localhost
+
+%%LOAD_MODULES%%
+
+<IfModule !mpm_netware_module>
+<IfModule !mpm_winnt_module>
+User www
+Group www
+</IfModule>
+</IfModule>
+
+Listen %%LISTEN%%
+
+ErrorLog "%%LOG_FILE%%"
+LogLevel debug
+
+<Directory />
+ Options FollowSymLinks
+ AllowOverride None
+ Order deny,allow
+ Deny from all
+</Directory>
+
+AddDefaultCharset UTF-8
+PerlSetEnv RT_SITE_CONFIG %%RT_SITE_CONFIG%%
+PerlRequire %%RT_BIN_PATH%%/webmux.pl
+
+RedirectMatch permanent (.*)/$ $1/index.html
+
+DocumentRoot "%%DOCUMENT_ROOT%%"
+<Directory "%%DOCUMENT_ROOT%%">
+ Order allow,deny
+ Allow from all
+
+ SetHandler perl-script
+ PerlResponseHandler RT::Mason
+</Directory>
+
diff --git a/rt/t/data/configs/apache2.2+mod_perl.conf.in b/rt/t/data/configs/apache2.2+mod_perl.conf.in
new file mode 100644
index 0000000..ed12c86
--- /dev/null
+++ b/rt/t/data/configs/apache2.2+mod_perl.conf.in
@@ -0,0 +1,40 @@
+ServerRoot %%SERVER_ROOT%%
+PidFile %%PID_FILE%%
+ServerAdmin root@localhost
+
+%%LOAD_MODULES%%
+
+<IfModule !mpm_netware_module>
+<IfModule !mpm_winnt_module>
+User @WEB_USER@
+Group @WEB_GROUP@
+</IfModule>
+</IfModule>
+
+Listen %%LISTEN%%
+
+ErrorLog "%%LOG_FILE%%"
+LogLevel debug
+
+<Directory />
+ Options FollowSymLinks
+ AllowOverride None
+ Order deny,allow
+ Deny from all
+</Directory>
+
+AddDefaultCharset UTF-8
+PerlSetEnv RT_SITE_CONFIG %%RT_SITE_CONFIG%%
+PerlRequire %%RT_BIN_PATH%%/webmux.pl
+
+RedirectMatch permanent (.*)/$ $1/index.html
+
+DocumentRoot "%%DOCUMENT_ROOT%%"
+<Directory "%%DOCUMENT_ROOT%%">
+ Order allow,deny
+ Allow from all
+
+ SetHandler perl-script
+ PerlResponseHandler RT::Mason
+</Directory>
+
diff --git a/rt/t/data/emails/8859-15-message-series/dir b/rt/t/data/emails/8859-15-message-series/dir
new file mode 100755
index 0000000..b9f8ec3
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/dir
@@ -0,0 +1,356 @@
+Return-Path: <rt-users-admin@lists.fsck.com>
+Delivered-To: j@pallas.eruditorum.org
+Received: from pallas.eruditorum.org (localhost [127.0.0.1])
+ by pallas.eruditorum.org (Postfix) with ESMTP
+ id 72E3A111B3; Mon, 26 May 2003 14:50:14 -0400 (EDT)
+Delivered-To: rt-users@pallas.eruditorum.org
+Received: from mail-in-02.arcor-online.net (mail-in-02.arcor-online.net [151.189.21.42])
+ by pallas.eruditorum.org (Postfix) with ESMTP id 15E761118D
+ for <rt-users@lists.fsck.com>; Mon, 26 May 2003 14:49:56 -0400 (EDT)
+Received: from otdial-212-144-012-186.arcor-ip.net (otdial-212-144-011-024.arcor-ip.net [212.144.11.24])
+ by mail-in-02.arcor-online.net (Postfix) with ESMTP
+ id 745EE15E87; Mon, 26 May 2003 20:53:15 +0200 (CEST)
+From: Dirk Pape <pape-rt@inf.fu-berlin.de>
+To: Jesse Vincent <jesse@bestpractical.com>,
+ rt-users <rt-users@lists.fsck.com>
+Subject: Re: [rt-users] [rt-announce] Development Snapshot 3.0.2++
+Message-ID: <2147483647.1053982235@otdial-212-144-011-024.arcor-ip.net>
+In-Reply-To: <2147483647.1053974498@[10.0.255.35]>
+References: <20030523202405.GF23719@fsck.com>
+ <2147483647.1053974498@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="==========2147500486=========="
+Sender: rt-users-admin@lists.fsck.com
+Errors-To: rt-users-admin@lists.fsck.com
+X-BeenThere: rt-users@lists.fsck.com
+X-Mailman-Version: 2.0.12
+Precedence: bulk
+List-Help: <mailto:rt-users-request@lists.fsck.com?subject=help>
+List-Post: <mailto:rt-users@lists.fsck.com>
+List-Subscribe: <http://lists.fsck.com/mailman/listinfo/rt-users>,
+ <mailto:rt-users-request@lists.fsck.com?subject=subscribe>
+List-Id: For users of RT: Request Tracker <rt-users.lists.fsck.com>
+List-Unsubscribe: <http://lists.fsck.com/mailman/listinfo/rt-users>,
+ <mailto:rt-users-request@lists.fsck.com?subject=unsubscribe>
+List-Archive: <http://lists.fsck.com/pipermail/rt-users/>
+Date: Mon, 26 May 2003 20:50:36 +0200
+X-Spam-Status: No, hits=-2.5 required=5.0
+ tests=AWL,IN_REP_TO,KNOWN_MAILING_LIST,QUOTED_EMAIL_TEXT,
+ REFERENCES,REPLY_WITH_QUOTES
+ autolearn=ham version=2.55
+X-Spam-Level:
+X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)
+
+--==========2147500486==========
+Content-Type: text/plain; charset=us-ascii; format=flowed
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Hello,
+
+here is the digest I forgot to attach. And I also forgot to say, that these
+were the only messages after a restart of apache.
+
+The messages in the digest are the copies which I - for testing purpose -
+allways queue into a mailbox just befor it is queued via rt-mailgate into
+the rt-system.
+
+--Am Montag, 26. Mai 2003 18:41 Uhr +0200 schrieb Dirk Pape
+<pape-rt@inf.fu-berlin.de>:
+
+> I attach a digest with mails I send one after another to the rt-system
+> and they get queued into one queue, each as a new ticket.
+
+
+
+
+--==========2147500486==========
+Content-Type: multipart/digest; boundary="==========2147489407=========="
+
+--==========2147489407==========
+Content-Type: message/rfc822; name="test _________"
+
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 27591 invoked by uid 9804); 26 May 2003 18:10:50 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:10:46 +0200
+Received: (Qmail 27575 invoked from network); 26 May 2003 18:10:46 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:10:46 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKYe-0000Yi-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:10:44 +0200
+Received: (qmail 27557 invoked by uid 9804); 26 May 2003 18:10:44 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:10:40 +0200
+Received: (Qmail 27540 invoked from network); 26 May 2003 18:10:40 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:10:40 +0200
+Date: Mon, 26 May 2003 18:11:00 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972660@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [27578] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
+--==========2147489407==========
+Content-Type: message/rfc822; name="test _________"
+
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 27754 invoked by uid 9804); 26 May 2003 18:11:24 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:20 +0200
+Received: (Qmail 27704 invoked from network); 26 May 2003 18:11:19 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:19 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKZA-0000Yy-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:11:16 +0200
+Received: (qmail 27690 invoked by uid 9804); 26 May 2003 18:11:16 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:13 +0200
+Received: (Qmail 27677 invoked from network); 26 May 2003 18:11:13 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:13 +0200
+Date: Mon, 26 May 2003 18:11:32 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972692@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [27711] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
+--==========2147489407==========
+Content-Type: message/rfc822; name="test _________"
+
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 27971 invoked by uid 9804); 26 May 2003 18:12:02 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:52 +0200
+Received: (Qmail 27908 invoked from network); 26 May 2003 18:11:52 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:52 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKZj-0000ZC-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:11:51 +0200
+Received: (qmail 27848 invoked by uid 9804); 26 May 2003 18:11:50 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:46 +0200
+Received: (Qmail 27809 invoked from network); 26 May 2003 18:11:45 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:45 +0200
+Date: Mon, 26 May 2003 18:12:05 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972725@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [27911] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
+--==========2147489407==========
+Content-Type: message/rfc822; name="test _________"
+
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 28283 invoked by uid 9804); 26 May 2003 18:12:39 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:12:36 +0200
+Received: (Qmail 28256 invoked from network); 26 May 2003 18:12:35 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:12:35 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKaQ-0000ZQ-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:12:34 +0200
+Received: (qmail 28236 invoked by uid 9804); 26 May 2003 18:12:34 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:12:30 +0200
+Received: (Qmail 28224 invoked from network); 26 May 2003 18:12:30 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:12:30 +0200
+Date: Mon, 26 May 2003 18:12:50 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972770@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [28259] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
+--==========2147489407==========
+Content-Type: message/rfc822; name="test _________"
+
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 28578 invoked by uid 9804); 26 May 2003 18:13:20 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:13:15 +0200
+Received: (Qmail 28534 invoked from network); 26 May 2003 18:13:14 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:13:14 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKb1-0000Ze-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:13:11 +0200
+Received: (qmail 28516 invoked by uid 9804); 26 May 2003 18:13:11 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:13:08 +0200
+Received: (Qmail 28479 invoked from network); 26 May 2003 18:13:07 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:13:07 +0200
+Date: Mon, 26 May 2003 18:13:27 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972807@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [28540] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
+
+--==========2147489407==========
+Content-Type: message/rfc822; name="test _________"
+
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 29108 invoked by uid 9804); 26 May 2003 18:14:15 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:14:10 +0200
+Received: (Qmail 29066 invoked from network); 26 May 2003 18:14:10 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:14:10 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKbw-0000Zr-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:14:08 +0200
+Received: (qmail 29054 invoked by uid 9804); 26 May 2003 18:14:08 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:14:04 +0200
+Received: (Qmail 29036 invoked from network); 26 May 2003 18:14:04 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:14:04 +0200
+Date: Mon, 26 May 2003 18:14:24 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972864@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [29069] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
+--==========2147489407==========
+Content-Type: message/rfc822; name="test _________"
+
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 29551 invoked by uid 9804); 26 May 2003 18:15:16 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:15:12 +0200
+Received: (Qmail 29521 invoked from network); 26 May 2003 18:15:12 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:15:12 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKcx-0000a4-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:15:11 +0200
+Received: (qmail 29511 invoked by uid 9804); 26 May 2003 18:15:10 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:15:07 +0200
+Received: (Qmail 29465 invoked from network); 26 May 2003 18:15:06 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:15:06 +0200
+Date: Mon, 26 May 2003 18:15:26 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972926@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [29524] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
+
+--==========2147489407==========--
+
+--==========2147500486==========--
+
+_______________________________________________
+rt-users mailing list
+rt-users@lists.fsck.com
+http://lists.fsck.com/mailman/listinfo/rt-users
+
+Have you read the FAQ? The RT FAQ Manager lives at http://fsck.com/rtfm
+
diff --git a/rt/t/data/emails/8859-15-message-series/msg1 b/rt/t/data/emails/8859-15-message-series/msg1
new file mode 100755
index 0000000..cc99c40
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/msg1
@@ -0,0 +1,36 @@
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 27591 invoked by uid 9804); 26 May 2003 18:10:50 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:10:46 +0200
+Received: (Qmail 27575 invoked from network); 26 May 2003 18:10:46 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:10:46 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKYe-0000Yi-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:10:44 +0200
+Received: (qmail 27557 invoked by uid 9804); 26 May 2003 18:10:44 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:10:40 +0200
+Received: (Qmail 27540 invoked from network); 26 May 2003 18:10:40 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:10:40 +0200
+Date: Mon, 26 May 2003 18:11:00 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972660@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [27578] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
diff --git a/rt/t/data/emails/8859-15-message-series/msg2 b/rt/t/data/emails/8859-15-message-series/msg2
new file mode 100755
index 0000000..dc442cf
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/msg2
@@ -0,0 +1,36 @@
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 27754 invoked by uid 9804); 26 May 2003 18:11:24 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:20 +0200
+Received: (Qmail 27704 invoked from network); 26 May 2003 18:11:19 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:19 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKZA-0000Yy-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:11:16 +0200
+Received: (qmail 27690 invoked by uid 9804); 26 May 2003 18:11:16 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:13 +0200
+Received: (Qmail 27677 invoked from network); 26 May 2003 18:11:13 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:13 +0200
+Date: Mon, 26 May 2003 18:11:32 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972692@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [27711] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
diff --git a/rt/t/data/emails/8859-15-message-series/msg3 b/rt/t/data/emails/8859-15-message-series/msg3
new file mode 100755
index 0000000..e23866d
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/msg3
@@ -0,0 +1,35 @@
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 27971 invoked by uid 9804); 26 May 2003 18:12:02 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:52 +0200
+Received: (Qmail 27908 invoked from network); 26 May 2003 18:11:52 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:52 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKZj-0000ZC-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:11:51 +0200
+Received: (qmail 27848 invoked by uid 9804); 26 May 2003 18:11:50 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:11:46 +0200
+Received: (Qmail 27809 invoked from network); 26 May 2003 18:11:45 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:11:45 +0200
+Date: Mon, 26 May 2003 18:12:05 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972725@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [27911] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
diff --git a/rt/t/data/emails/8859-15-message-series/msg4 b/rt/t/data/emails/8859-15-message-series/msg4
new file mode 100755
index 0000000..831695c
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/msg4
@@ -0,0 +1,35 @@
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 28283 invoked by uid 9804); 26 May 2003 18:12:39 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:12:36 +0200
+Received: (Qmail 28256 invoked from network); 26 May 2003 18:12:35 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:12:35 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKaQ-0000ZQ-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:12:34 +0200
+Received: (qmail 28236 invoked by uid 9804); 26 May 2003 18:12:34 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:12:30 +0200
+Received: (Qmail 28224 invoked from network); 26 May 2003 18:12:30 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:12:30 +0200
+Date: Mon, 26 May 2003 18:12:50 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972770@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [28259] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
diff --git a/rt/t/data/emails/8859-15-message-series/msg5 b/rt/t/data/emails/8859-15-message-series/msg5
new file mode 100755
index 0000000..272c93c
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/msg5
@@ -0,0 +1,35 @@
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 28578 invoked by uid 9804); 26 May 2003 18:13:20 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:13:15 +0200
+Received: (Qmail 28534 invoked from network); 26 May 2003 18:13:14 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:13:14 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKb1-0000Ze-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:13:11 +0200
+Received: (qmail 28516 invoked by uid 9804); 26 May 2003 18:13:11 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:13:08 +0200
+Received: (Qmail 28479 invoked from network); 26 May 2003 18:13:07 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:13:07 +0200
+Date: Mon, 26 May 2003 18:13:27 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972807@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [28540] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
diff --git a/rt/t/data/emails/8859-15-message-series/msg6 b/rt/t/data/emails/8859-15-message-series/msg6
new file mode 100755
index 0000000..3ae9d3b
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/msg6
@@ -0,0 +1,35 @@
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 29108 invoked by uid 9804); 26 May 2003 18:14:15 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:14:10 +0200
+Received: (Qmail 29066 invoked from network); 26 May 2003 18:14:10 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:14:10 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKbw-0000Zr-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:14:08 +0200
+Received: (qmail 29054 invoked by uid 9804); 26 May 2003 18:14:08 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:14:04 +0200
+Received: (Qmail 29036 invoked from network); 26 May 2003 18:14:04 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:14:04 +0200
+Date: Mon, 26 May 2003 18:14:24 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972864@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [29069] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
diff --git a/rt/t/data/emails/8859-15-message-series/msg7 b/rt/t/data/emails/8859-15-message-series/msg7
new file mode 100755
index 0000000..6149dd6
--- /dev/null
+++ b/rt/t/data/emails/8859-15-message-series/msg7
@@ -0,0 +1,36 @@
+Return-Path: <pape@inf.fu-berlin.de>
+Delivered-To: pape-rtdoublecheck@mi.fu-berlin.de
+Received: (qmail 29551 invoked by uid 9804); 26 May 2003 18:15:16 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:15:12 +0200
+Received: (Qmail 29521 invoked from network); 26 May 2003 18:15:12 +0200
+Received: From es.inf.fu-berlin.de (160.45.110.22)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:15:12 +0200
+Received: from leibniz ([160.45.40.10] helo=math.fu-berlin.de)
+ by es.inf.fu-berlin.de with smtp (Exim 3.35 #1 (Debian))
+ id 19KKcx-0000a4-00
+ for <staff@tec.mi.fu-berlin.de>; Mon, 26 May 2003 18:15:11 +0200
+Received: (qmail 29511 invoked by uid 9804); 26 May 2003 18:15:10 +0200
+Received: from localhost (HELO math.fu-berlin.de) (127.0.0.1)
+ by localhost with SMTP; 26 May 2003 18:15:07 +0200
+Received: (Qmail 29465 invoked from network); 26 May 2003 18:15:06 +0200
+Received: From eremix.inf.fu-berlin.de (HELO eremix) (160.45.113.36)
+ by leibniz.math.fu-berlin.de with SMTP; 26 May 2003 18:15:06 +0200
+Date: Mon, 26 May 2003 18:15:26 +0200
+From: Dirk Pape <pape@inf.fu-berlin.de>
+To: staff@tec.mi.fu-berlin.de
+Subject: =?ISO-8859-15?Q?test_=E4=F6=FC=DF=C4=D6=DC=DF=A4?=
+Message-ID: <2147483647.1053972926@[10.0.255.35]>
+X-Mailer: Mulberry/3.0.3 (Mac OS X)
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Envelope-Sender: pape@inf.fu-berlin.de
+X-Virus-Scanned: by AMaViS 0.3.12pre7-U23 [29524] (NAI-uvscan@math.fu-berlin.de)
+X-Remote-IP: 160.45.110.22
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-15; FORMAT=flowed
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+test nochmal in anderer Queue
+test =E4=F6=FC=DF=C4=D6=DC=DF=A4
+
diff --git a/rt/t/data/emails/crashes-file-based-parser b/rt/t/data/emails/crashes-file-based-parser
new file mode 100755
index 0000000..da1913e
--- /dev/null
+++ b/rt/t/data/emails/crashes-file-based-parser
@@ -0,0 +1,193 @@
+X-Real-To: <mitya@example.com>
+Received: from [194.87.5.31] (HELO sinbin.d-s.example.com)
+ by cgp.example.com (CommuniGate Pro SMTP 4.0.6/D4)
+ with ESMTP-TLS id 125035761 for mitya@example.com; Thu, 11 Dec 2003 15:17:46 +0300
+Received: (from daemon@localhost)
+ by sinbin.d-s.example.com (8.12.9p1/8.11.6) id hBBCHjN0031595
+ for mitya@example.com; Thu, 11 Dec 2003 15:17:45 +0300 (MSK)
+ (envelope-from noc@rt3.mx.example.com)
+Received: from d-s.example.com by sinbin.d-s.example.com with ESMTP id hBBCHjar031575;
+ (8.12.9p2/D) Thu, 11 Dec 2003 15:17:45 +0300 (MSK)
+X-Real-To: <mitya@example.com>
+Sender: <noc@rt3.mx.example.com> (Network Operation Center)
+To: mitya@example.com
+Date: Thu, 11 Dec 2003 15:17:45 +0300
+Message-ID: <redirect-137509289@d-s.example.com>
+X-Original-Return-Path: <vox19@b92.d-s.example.com>
+Received: from [194.87.0.16] (HELO mail.d-s.example.com)
+ by d-s.example.com (CommuniGate Pro SMTP 4.1.5/D1)
+ with ESMTP id 120757484 for noc@rt3.mx.example.com; Mon, 27 Oct 2003 09:40:53 +0300
+Received: from [194.87.0.22] (HELO moscvax.d-s.example.com)
+ by mail.d-s.example.com (CommuniGate Pro SMTP 4.1.5/D)
+ with ESMTP-TLS id 107945800 for noc@rt3.mx.example.com; Mon, 27 Oct 2003 09:40:53 +0300
+Received: from d-s.example.com (mx.d-s.example.com [194.87.0.32])
+ by moscvax.d-s.example.com (8.12.9/8.12.9) with ESMTP id h9R6erFm062621
+ for <security@d.example.com>; Mon, 27 Oct 2003 09:40:53 +0300 (MSK)
+ (envelope-from vox19@b92.d-s.example.com)
+Received: by d-s.example.com (CommuniGate Pro PIPE 4.1.5/D1)
+ with PIPE id 120757490; Mon, 27 Oct 2003 09:40:53 +0300
+Received: from [194.87.2.108] (HELO b92.d-s.example.com)
+ by d-s.example.com (CommuniGate Pro SMTP 4.1.5/D1)
+ with ESMTP-TLS id 120757480 for security@d.example.com; Mon, 27 Oct 2003 09:40:52 +0300
+Received: from b92.d-s.example.com (localhost [127.0.0.1])
+ by b92.d-s.example.com (8.12.8p1/8.12.3) with ESMTP id h9R6eqIe014669
+ for <security@d.example.com>; Mon, 27 Oct 2003 09:40:52 +0300 (MSK)
+ (envelope-from vox19@b92.d-s.example.com)
+Received: from localhost (localhost [[UNIX: localhost]])
+ by b92.d-s.example.com (8.12.8p1/8.12.3/Submit) id h9R6epst014668
+ for security@d.example.com; Mon, 27 Oct 2003 09:40:51 +0300 (MSK)
+From: "Stanislav" <drstas@d.example.com>
+Subject: Fwd: scanning my ports
+X-Original-Date: Mon, 27 Oct 2003 10:40:51 +0400
+User-Agent: KMail/1.5.4
+X-Original-To: security@d.example.com
+MIME-Version: 1.0
+Content-Type: Multipart/Mixed;
+ boundary="Boundary-00=_z3Ln/tUeUBipHgx"
+X-Original-Message-Id: <200310270940.51758.vox19@d.example.com>
+X-Spam-Checker-Version: SpamAssassin 2.60-jumbo.demos (1.212-2003-09-23-exp)
+X-Spam-Level:
+X-Spam-Status: No, hits=-6.8 required=5.0 tests=BAYES_00,FROM_ENDS_IN_NUMS,
+ HTML_MESSAGE,SUBJECT_RT autolearn=ham version=2.60-jumbo.demos
+X-Spam-Report: -6.8 points, 5.0 required;
+ * -3.0 SUBJECT_RT Tracking system
+ * 1.0 FROM_ENDS_IN_NUMS From: ends in numbers
+ * 0.1 HTML_MESSAGE BODY: HTML included in message
+ * -4.9 BAYES_00 BODY: Bayesian spam probability is 0 to 1%
+ * [score: 0.0000]
+
+
+--Boundary-00=_z3Ln/tUeUBipHgx
+Content-Type: text/plain;
+ charset="koi8-r"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+
+FYI
+
+
+---------- Forwarded Message ----------
+
+Subject: [DEMOS #12148] scanning my ports
+Date: Sunday 26 October 2003 20:19
+From: 1stwizard@isp.example.com
+To: no-reply@d-r.example.com
+
+This transaction appears to have no content
+
+-------------------------------------------------------
+
+
+
+--
+best wishes,
+
+Stanislav A. Mushkat
+http://www.di.example.com
+
+--Boundary-00=_z3Ln/tUeUBipHgx
+Content-Type: text/plain;
+ charset="iso-8859-1";
+ name=" "
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Somebody at IP 127.0.0.1 scanned my ports.
+--Boundary-00=_z3Ln/tUeUBipHgx
+Content-Type: text/html;
+ charset="iso-8859-1";
+ name=" "
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+<HTML><HEAD>
+<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<META content="IncrediMail 1.0" name=GENERATOR>
+<!--IncrdiXMLRemarkStart>
+<IncrdiX-Info>
+<X-FID>BA285063-5BCE-11D4-AF8D-0050DAC67E11</X-FID>
+<X-FVER>2.0</X-FVER>
+<X-FIT>Letter</X-FIT>
+<X-FCOL>Elegant Paper</X-FCOL>
+<X-FCAT>Stationery</X-FCAT>
+<X-FDIS>Rice Fields</X-FDIS>
+<X-Extensions>SU1CTDEsNDEsgUmBSTAkkcGNgZmVTY0wNCxNhYUoiU0kOMEoTYGBjYEoJDSZnSyFhUksSU1CTDIsMCwsSU1CTDMsMCwsVHlwZVZlcnNpb24sMywxLjAs</X-Extensions>
+<X-BG>8E549F43-079D-11D8-B0F9-00B0D0B65B96</X-BG>
+<X-BGT>repeat</X-BGT>
+<X-BGC>#eff3f7</X-BGC>
+<X-BGPX>left</X-BGPX>
+<X-BGPY>0px</X-BGPY>
+<X-ASN>ANIM3D00-NONE-0000-0000-000000000000</X-ASN>
+<X-ASNF>0</X-ASNF>
+<X-ASH>ANIM3D00-NONE-0000-0000-000000000000</X-ASH>
+<X-ASHF>1</X-ASHF>
+<X-AN>6486DDE0-3EFD-11D4-BA3D-0050DAC68030</X-AN>
+<X-ANF>0</X-ANF>
+<X-AP>6486DDE0-3EFD-11D4-BA3D-0050DAC68030</X-AP>
+<X-APF>1</X-APF>
+<X-AD>C3C52140-4147-11D4-BA3D-0050DAC68030</X-AD>
+<X-ADF>0</X-ADF>
+<X-AUTO>X-ASN,X-ASH,X-AN,X-AP,X-AD</X-AUTO>
+<X-CNT>;</X-CNT>
+</IncrdiX-Info>
+<IncrdiXMLRemarkEnd-->
+</HEAD>
+<BODY style="BACKGROUND-POSITION: left 0px; FONT-SIZE: 12pt; MARGIN: 0px 10px 10px; COLOR: #00005b; BACKGROUND-REPEAT: repeat; FONT-FAMILY: Arial" text=#00005b bgColor=#eff3f7 background=cid:8E549F43-079D-11D8-B0F9-00B0D0B65B96 scroll=yes SIGCOLOR="0" X-ADF="0" X-AD="C3C52140-4147-11D4-BA3D-0050DAC68030" X-APF="1" X-AP="6486DDE0-3EFD-11D4-BA3D-0050DAC68030" X-ANF="0" X-AN="6486DDE0-3EFD-11D4-BA3D-0050DAC68030" X-ASHF="1" X-ASH="ANIM3D00-NONE-0000-0000-000000000000" X-ASNF="0" X-ASN="ANIM3D00-NONE-0000-0000-000000000000" X-FVER="2.0" X-FID="BA285063-5BCE-11D4-AF8D-0050DAC67E11" X-FIT="Letter" X-FCOL="Elegant Paper" X-FCAT="Elegant Paper" X-FDIS="Rice Fields" ORGYPOS="0">
+<TABLE id=INCREDIMAINTABLE cellSpacing=0 cellPadding=2 width="100%" border=0>
+<TBODY>
+<TR>
+<TD id=INCREDITEXTREGION style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12pt; PADDING-BOTTOM: 0px; CURSOR: auto; PADDING-TOP: 0px" vAlign=top width="100%">
+<DIV>Somebody at IP 127.0.0.1 scanned my ports. </DIV>
+<DIV>&nbsp;</DIV>
+<DIV>&nbsp;</DIV></TD></TR>
+<TR>
+<TD id=INCREDIFOOTER width="100%">
+<TABLE cellSpacing=0 cellPadding=0 width="100%">
+<TBODY>
+<TR>
+<TD width="100%"></TD>
+<TD id=INCREDISOUND vAlign=bottom align=middle></TD>
+<TD id=INCREDIANIM vAlign=bottom align=middle></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>
+--Boundary-00=_z3Ln/tUeUBipHgx
+Content-Type: image/jpeg;
+ charset="iso-8859-1";
+ name="BackGrnd.jpg"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline; filename="BackGrnd.jpg"
+
+/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFk
+b2JlAGTAAAAAAQMAEAMCAwYAAAHbAAAC1gAABZX/2wCEABALCwsMCxAMDBAX
+Dw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoXHh4jJSclIx4vLzMzLy9AQEBAQEBA
+QEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoaJjAjHh4eHiMw
+Ky4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAGUAcwMBIgACEQED
+EQH/xACAAAEBAQEAAAAAAAAAAAAAAAAAAQIGAQEBAAAAAAAAAAAAAAAAAAAA
+ARABAAICAwEAAgMAAAAAAAAAAQARIQIxQRIiQDIQMFARAAICAgIBBAIDAQEA
+AAAAAAERACExQVFhcYGRobECEsHhMtHxEgEAAAAAAAAAAAAAAAAAAABQ/9oA
+DAMBAAIRAxEAAADtRZYE1ASghQFgUZoCkKSwLmhcllAEqkSkqFAlhUomoAS3
+IoJqFlDNpFEAQFE1AIVYAWIVKAJRNZpYCwVmmshKACA0CBAUCBYGwf/aAAgB
+AgABBQD8B/yP/9oACAEDAAEFAPz6/or8H//aAAgBAQABBQC2+ZeHjbD+saX6
+hwXeDW1Rg4xLLTa+m7ZiIEsI1MTiHP1dYpvFADiFM1/X6nq9byuwdPPz5oFo
+fWlEMQ9ULKrWq2ppG9Y2J6INQma9lVTRdlUKgHzXXSEECw1SYu5WsGoJPkis
+ZYpx31GvXZQ/JM3VwShzVTsp1EZbBI8LcaUSih86+s2Zl4Wp6+lAZnVsDkjd
+ku5m+lJTdXDG2SHM9M2wKX1YxsaZTTwmoVrYnqsMrM652yjs01K0mtbGAz6Y
+5dpfqNz06qpq5QNjiIjiZtbhtceNuf0jyeqGgu6rXMvI4omPWbPMYzEfMI+a
+xHnFvOP4/9oACAECAgY/AGP/2gAIAQMCBj8AY//aAAgBAQEGPwB72Yucb1Bf
+IhFEaeZ+xRXFQELN+HEUQdjU0Xn4g9gRCQcpw1yajGYsP/kFvUzvjUBWrIMF
+HI2OJQNEAjiEEFdTmfG/MTHq5RFOnpTV3kzCBx7x4YOD1AV5uYJvnqMA0hep
+jfwpYCwC4Bx3q55zeZRBCw9TkoIuHw78RdczSNH2mgqcLpRC+RASAkA3B13m
+cYd5mR84c/yOx4lWtRAZ6mGDhiP9WgXVyhWA+xDgMOWGMsTg/wBTz8SjjXrP
+8hHIlX1MZ6mDzgc/cIV/iyN1GBR0MQMKjnEzvvMz8mUkErKlfqU63iV+IKNH
+7mNZBLFQEpEDeDOV32IVn8WR4caoywqI2p695mbZzNUQIcKfk0bo+0NpCqn7
+CiQiNGXkdQen1DpjGeZ7WNw3pK+I93maCPc16+Zkf6XxMCsFwAkaiIB57vc/
+IAhZ/HqZBBbB0ZokAEOGxsYqBgPp8agQBu4VSMJdqx6SwDsGBrTmAR93uZGX
+6KePowEADAIjoX8gw459CICaW/MLGvodQfkDW71zBxRHtB3j3jC4PMIYoAgK
+NfPMCQNN7jCzvlzXPopzhQvNZY3CRya9ZrEFfRE0iCB5mscZuVYfKmAi94uE
+3Q8qfytQ7xD0svmFcmaxNPI8iMjh3pmF2HbzqeUi+YkiD/MrOl5LmbwPuWVf
+mXpv3hDH8qAjPpiZHXkRnSd6ZhB53mejzKV6US0K9TCCLyCeIhtETX5MsHBG
+JkD/ANiFkMCE2qGoCdZ8Q8AMGpYFqEhdhRIYH3CF3d1M/Mexma+4CwdQ2Ddc
+x0exAlmj04QUQd8QWLB/iB5GxmEg5TENVZqPYzFV8eHAy9T/AEc8a4n3Ov6g
+/VwvE6lpQ4VNysXzhS8esOO8w/rlF/rypjV3B5H1Knr8T//Z
+
+--Boundary-00=_z3Ln/tUeUBipHgx--
+
diff --git a/rt/t/data/emails/lorem-ipsum b/rt/t/data/emails/lorem-ipsum
new file mode 100644
index 0000000..1aceb14
--- /dev/null
+++ b/rt/t/data/emails/lorem-ipsum
@@ -0,0 +1,5 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
+nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit
+esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+culpa qui officia deserunt mollit anim id est laborum.
diff --git a/rt/t/data/emails/multipart-alternative-with-umlaut b/rt/t/data/emails/multipart-alternative-with-umlaut
new file mode 100755
index 0000000..1ad4fe3
--- /dev/null
+++ b/rt/t/data/emails/multipart-alternative-with-umlaut
@@ -0,0 +1,62 @@
+Return-Path: <gst@example.com>
+Delivered-To: j@pallas.eruditorum.org
+Received: from vis.example.com (vis.example.com [212.68.68.251])
+ by pallas.eruditorum.org (Postfix) with SMTP id 59236111C3
+ for <jesse@example.com>; Thu, 12 Jun 2003 02:14:44 -0400 (EDT)
+Received: (qmail 29541 invoked by uid 502); 12 Jun 2003 06:14:42 -0000
+Received: from sivd.example.com (HELO example.com) (192.168.42.1)
+ by 192.168.42.42 with SMTP; 12 Jun 2003 06:14:42 -0000
+Received: received from 172.20.72.174 by odie.example.com; Thu, 12 Jun 2003 08:14:27 +0200
+Received: by mailserver.example.com with Internet Mail Service (5.5.2653.19) id <LJSB7T54>; Thu, 12 Jun 2003 08:14:39 +0200
+Message-ID: <50362EC956CBD411A339009027F6257E013DD495@mailserver.example.com>
+Date: Thu, 12 Jun 2003 08:14:39 +0200
+From: "Stever, Gregor" <gst@example.com>
+MIME-Version: 1.0
+X-Mailer: Internet Mail Service (5.5.2653.19)
+To: "'jesse@example.com'" <jesse@example.com>
+Subject: RE: [rt-users] HTML-encoded mails with umlaute
+Date: Thu, 12 Jun 2003 08:14:39 +0200
+Content-Type: multipart/alternative;
+ boundary="----_=_NextPart_001_01C330A9.E7BDD590"
+X-Spam-Status: No, hits=0.0 required=5.0
+ tests=AWL,HTML_50_60,HTML_MESSAGE,INVALID_DATE
+ version=2.55
+X-Spam-Level:
+X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)
+
+------_=_NextPart_001_01C330A9.E7BDD590
+Content-Type: text/plain;
+ charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+Hello,
+
+ist this kind of Messages, that causes rt to crash.=20
+
+Mit freundlichen Gr=FC=DFen
+Gregor Stever ^^causes Error!!
+
+
+------_=_NextPart_001_01C330A9.E7BDD590
+Content-Type: text/html;
+ charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML><HEAD>
+<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; charset=3Diso-8859-=
+1">
+
+
+<META content=3D"MSHTML 6.00.2800.1170" name=3DGENERATOR></HEAD>
+<BODY>
+<DIV><FONT face=3DArial><FONT size=3D2>Hello,<BR><BR>ist this kind of Messa=
+ges, that=20
+causes rt to crash.<BR><BR>Mit freundlichen Gr=FC=DFen<BR>Gregor=20
+Stever&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^^causes Error<SPAN=20
+class=3D975501206-12062003>!!</SPAN></FONT></FONT></DIV></BODY></HTML>
+
+
+------_=_NextPart_001_01C330A9.E7BDD590--
+
+
diff --git a/rt/t/data/emails/multipart-report b/rt/t/data/emails/multipart-report
new file mode 100755
index 0000000..538e0c8
--- /dev/null
+++ b/rt/t/data/emails/multipart-report
@@ -0,0 +1,66 @@
+Return-Path: <mailnull@example.com>
+Date: Sat, 23 Aug 2003 00:15:18 +0800 (SGT)
+From: Mail Delivery Subsystem <MAILER-DAEMON@other.example.com>
+Message-Id: <200308221615.CGA36111@mailbox.other.example.com>
+To: support@example.com
+MIME-Version: 1.0
+Content-Type: multipart/report; report-type=delivery-status;
+ boundary="CGA36111.1061568918/mailbox.other.example.com"
+Subject: Returned mail: User unknown
+Auto-Submitted: auto-generated (failure)
+
+This is a MIME-encapsulated message
+
+--CGA36111.1061568918/mailbox.other.example.com
+
+The original message was received at Sat, 23 Aug 2003 00:15:18 +0800 (SGT)
+from mx12.mcis.other.example.com [10.1.1.232]
+
+ ----- The following addresses had permanent delivery errors -----
+<jesmund>
+
+
+--CGA36111.1061568918/mailbox.other.example.com
+Content-Type: message/delivery-status
+
+Reporting-MTA: dns; mailbox.other.example.com
+Arrival-Date: Sat, 23 Aug 2003 00:15:18 +0800 (SGT)
+
+Final-Recipient: RFC822; jesmund@mailbox.other.example.com
+Action: failed
+Status: 5.1.1
+Remote-MTA: DNS; mail.mcis.other.example.com
+Diagnostic-Code: SMTP; 550 5.1.1 <jesmund>... User unknown
+Last-Attempt-Date: Sat, 23 Aug 2003 00:15:18 +0800 (SGT)
+
+--CGA36111.1061568918/mailbox.other.example.com
+Content-Type: message/rfc822
+
+Return-Path: <support@example.com>
+Received: from mx12.other.example.com (mx12.mcis.other.example.com [10.1.1.232])
+ by mailbox.other.example.com (Mirapoint Messaging Server MOS 3.3.3-GR)
+ with ESMTP id CGA36101;
+ Sat, 23 Aug 2003 00:15:17 +0800 (SGT)
+Received: from STATION13 (rhala.dsl.pe.net [64.38.69.104])
+ by mx12.other.example.com (8.12.9/8.12.9) with ESMTP id h7MGFGac020135
+ for <jesmund@other.example.com>; Sat, 23 Aug 2003 00:15:17 +0800
+Message-Id: <200308221615.h7MGFGac020135@mx12.other.example.com>
+From: <support@example.com>
+To: <jesmund@other.example.com>
+Subject: Thank you!
+Date: Fri, 22 Aug 2003 9:15:19 --0700
+X-MailScanner: Found to be clean
+Importance: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2600.0000
+X-MSMail-Priority: Normal
+X-Priority: 3 (Normal)
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="_NextPart_000_05684DA4"
+
+
+
+--_NextPart_000_05684DA4--
+
+--CGA36111.1061568918/mailbox.other.example.com--
+
diff --git a/rt/t/data/emails/nested-mime-sample b/rt/t/data/emails/nested-mime-sample
new file mode 100755
index 0000000..8b85d94
--- /dev/null
+++ b/rt/t/data/emails/nested-mime-sample
@@ -0,0 +1,396 @@
+Return-Path: <Xxxxxx_Yyyyyyy@some.net>
+Delivered-To: jesse@pallas.eruditorum.org
+Received: by pallas.eruditorum.org (Postfix)
+ id B5D3E1123A; Fri, 12 Jul 2002 11:35:27 -0400 (EDT)
+Delivered-To: rt-2.0-bugs@pallas.eruditorum.org
+Received: from postman.some.net (postman.some.net [193.0.0.199])
+ by pallas.eruditorum.org (Postfix) with SMTP id 2736011234
+ for <rt-2.0-bugs@fsck.com>; Fri, 12 Jul 2002 11:35:27 -0400 (EDT)
+Received: (qmail 11615 invoked by uid 0); 12 Jul 2002 15:35:26 -0000
+Received: from x22.some.net (HELO x22.some.net.some.net) (193.0.1.22)
+ by postman.some.net with SMTP; 12 Jul 2002 15:35:26 -0000
+Date: Fri, 12 Jul 2002 17:35:26 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+To: rt-0.0-bugs@fsck.com
+Subject: Example MIME within MIME within MIME message
+Message-ID: <Pine.LNX.4.44.0207121734250.25020-120000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: MULTIPART/MIXED; BOUNDARY="12654081-192303556-1026488126=:25020"
+X-Spam-Status: No, hits=4.0 required=7.0
+ tests=DOUBLE_CAPSWORD,MIME_NULL_BLOCK,MIME_MISSING_BOUNDARY
+ version=2.31
+Content-Length: 11478
+
+ This message is in MIME format. The first part should be readable text,
+ while the remaining parts are likely unreadable without MIME-aware tools.
+ Send mail to mime@docserver.cac.washington.edu for more info.
+
+--12654081-192303556-1026488126=:25020
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+MIME is fun at times.
+
+
+--
+ Xxxxxx Yyyyyyy SOME
+ Systems/Network Engineer NCC
+ www.some.net - PGP000C8B1B Operations/Security
+
+--12654081-192303556-1026488126=:25020
+Content-Type: MULTIPART/Digest; BOUNDARY="12654081-2102091261-1026488126=:25020"
+Content-ID: <Pine.LNX.4.44.0207121734322.25020@x22.some.net>
+Content-Description: Digest of 2 messages
+
+ This message is in MIME format. The first part should be readable text,
+ while the remaining parts are likely unreadable without MIME-aware tools.
+ Send mail to mime@docserver.cac.washington.edu for more info.
+
+--12654081-2102091261-1026488126=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121734320.25020@x22.some.net>
+Content-Description: first outer message (fwd)
+
+Date: Fri, 12 Jul 2002 17:32:37 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: first outer message
+Message-ID: <Pine.LNX.4.44.0207121732180.25020-120000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: MULTIPART/MIXED; BOUNDARY="12654081-113777422-1026487957=:25020"
+
+
+--12654081-113777422-1026487957=:25020
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+first outer message
+
+--12654081-113777422-1026487957=:25020
+Content-Type: MULTIPART/Digest; BOUNDARY="12654081-387266385-1026487957=:25020"
+Content-ID: <Pine.LNX.4.44.0207121732222.25020@x22.some.net>
+Content-Description: Digest of 2 messages
+
+--12654081-387266385-1026487957=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121732220.25020@x22.some.net>
+Content-Description: middle message (fwd)
+
+Date: Fri, 12 Jul 2002 17:31:45 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: middle message
+Message-ID: <Pine.LNX.4.44.0207121731190.25020-120000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: MULTIPART/MIXED; BOUNDARY="12654081-1711788944-1026487905=:25020"
+
+
+--12654081-1711788944-1026487905=:25020
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+This is the first middle message
+
+
+--12654081-1711788944-1026487905=:25020
+Content-Type: MULTIPART/Digest; BOUNDARY="12654081-1221085552-1026487905=:25020"
+Content-ID: <Pine.LNX.4.44.0207121731262.25020@x22.some.net>
+Content-Description: Digest of 2 messages
+
+--12654081-1221085552-1026487905=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731260.25020@x22.some.net>
+Content-Description: This is the inner-most message (fwd)
+
+Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: This is the inner-most message
+Message-ID: <Pine.LNX.4.44.0207121730070.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+inner-msg
+
+
+
+--12654081-1221085552-1026487905=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731261.25020@x22.some.net>
+Content-Description: another inner message (need two before pine will do the mime-digest thing) (fwd)
+
+Date: Fri, 12 Jul 2002 17:31:12 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: another inner message (need two before pine will do the mime-digest
+ thing)
+Message-ID: <Pine.LNX.4.44.0207121730480.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+again
+
+
+
+--12654081-1221085552-1026487905=:25020--
+--12654081-1711788944-1026487905=:25020--
+
+--12654081-387266385-1026487957=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121732221.25020@x22.some.net>
+Content-Description: middle message (fwd)
+
+Date: Fri, 12 Jul 2002 17:32:05 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: middle message
+Message-ID: <Pine.LNX.4.44.0207121731470.25020-120000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: MULTIPART/MIXED; BOUNDARY="12654081-1731270459-1026487925=:25020"
+
+
+--12654081-1731270459-1026487925=:25020
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+This is the second middle message
+
+
+--12654081-1731270459-1026487925=:25020
+Content-Type: MULTIPART/Digest; BOUNDARY="12654081-128832654-1026487925=:25020"
+Content-ID: <Pine.LNX.4.44.0207121731502.25020@x22.some.net>
+Content-Description: Digest of 2 messages
+
+--12654081-128832654-1026487925=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731500.25020@x22.some.net>
+Content-Description: This is the inner-most message (fwd)
+
+Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: This is the inner-most message
+Message-ID: <Pine.LNX.4.44.0207121730070.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+inner-msg
+
+
+
+--12654081-128832654-1026487925=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731501.25020@x22.some.net>
+Content-Description: another inner message (need two before pine will do the mime-digest thing) (fwd)
+
+Date: Fri, 12 Jul 2002 17:31:12 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: another inner message (need two before pine will do the mime-digest
+ thing)
+Message-ID: <Pine.LNX.4.44.0207121730480.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+again
+
+
+
+--12654081-128832654-1026487925=:25020--
+--12654081-1731270459-1026487925=:25020--
+
+--12654081-387266385-1026487957=:25020--
+--12654081-113777422-1026487957=:25020--
+
+--12654081-2102091261-1026488126=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121734321.25020@x22.some.net>
+Content-Description: 2nd outer message (fwd)
+
+Date: Fri, 12 Jul 2002 17:32:54 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: 2nd outer message
+Message-ID: <Pine.LNX.4.44.0207121732380.25020-120000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: MULTIPART/MIXED; BOUNDARY="12654081-1955637437-1026487974=:25020"
+
+
+--12654081-1955637437-1026487974=:25020
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+2nd outer message
+
+
+--12654081-1955637437-1026487974=:25020
+Content-Type: MULTIPART/Digest; BOUNDARY="12654081-362457126-1026487974=:25020"
+Content-ID: <Pine.LNX.4.44.0207121732412.25020@x22.some.net>
+Content-Description: Digest of 2 messages
+
+--12654081-362457126-1026487974=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121732410.25020@x22.some.net>
+Content-Description: middle message (fwd)
+
+Date: Fri, 12 Jul 2002 17:31:45 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: middle message
+Message-ID: <Pine.LNX.4.44.0207121731190.25020-120000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: MULTIPART/MIXED; BOUNDARY="12654081-1711788944-1026487905=:25020"
+
+
+--12654081-1711788944-1026487905=:25020
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+This is the first middle message
+
+
+--12654081-1711788944-1026487905=:25020
+Content-Type: MULTIPART/Digest; BOUNDARY="12654081-1221085552-1026487905=:25020"
+Content-ID: <Pine.LNX.4.44.0207121731262.25020@x22.some.net>
+Content-Description: Digest of 2 messages
+
+--12654081-1221085552-1026487905=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731260.25020@x22.some.net>
+Content-Description: This is the inner-most message (fwd)
+
+Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: This is the inner-most message
+Message-ID: <Pine.LNX.4.44.0207121730070.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+inner-msg
+
+
+
+--12654081-1221085552-1026487905=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731261.25020@x22.some.net>
+Content-Description: another inner message (need two before pine will do the mime-digest thing) (fwd)
+
+Date: Fri, 12 Jul 2002 17:31:12 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: another inner message (need two before pine will do the mime-digest
+ thing)
+Message-ID: <Pine.LNX.4.44.0207121730480.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+again
+
+
+
+--12654081-1221085552-1026487905=:25020--
+--12654081-1711788944-1026487905=:25020--
+
+--12654081-362457126-1026487974=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121732411.25020@x22.some.net>
+Content-Description: middle message (fwd)
+
+Date: Fri, 12 Jul 2002 17:32:05 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: middle message
+Message-ID: <Pine.LNX.4.44.0207121731470.25020-120000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: MULTIPART/MIXED; BOUNDARY="12654081-1731270459-1026487925=:25020"
+
+
+--12654081-1731270459-1026487925=:25020
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+This is the second middle message
+
+
+--12654081-1731270459-1026487925=:25020
+Content-Type: MULTIPART/Digest; BOUNDARY="12654081-128832654-1026487925=:25020"
+Content-ID: <Pine.LNX.4.44.0207121731502.25020@x22.some.net>
+Content-Description: Digest of 2 messages
+
+--12654081-128832654-1026487925=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731500.25020@x22.some.net>
+Content-Description: This is the inner-most message (fwd)
+
+Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: This is the inner-most message
+Message-ID: <Pine.LNX.4.44.0207121730070.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+inner-msg
+
+
+
+--12654081-128832654-1026487925=:25020
+Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII
+Content-ID: <Pine.LNX.4.44.0207121731501.25020@x22.some.net>
+Content-Description: another inner message (need two before pine will do the mime-digest thing) (fwd)
+
+Date: Fri, 12 Jul 2002 17:31:12 +0200 (CEST)
+From: Xxxxxx Yyyyyyy <Xxxxxx_Yyyyyyy@some.net>
+X-X-Sender: bc@x22.some.net
+To: Xxxxxx_Yyyyyyy@some.net
+Subject: another inner message (need two before pine will do the mime-digest
+ thing)
+Message-ID: <Pine.LNX.4.44.0207121730480.25020-100000@x22.some.net>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+
+
+again
+
+
+
+--12654081-128832654-1026487925=:25020--
+--12654081-1731270459-1026487925=:25020--
+
+--12654081-362457126-1026487974=:25020--
+--12654081-1955637437-1026487974=:25020--
+
+--12654081-2102091261-1026488126=:25020--
+--12654081-192303556-1026488126=:25020--
+
diff --git a/rt/t/data/emails/nested-rfc-822 b/rt/t/data/emails/nested-rfc-822
new file mode 100755
index 0000000..d4f118d
--- /dev/null
+++ b/rt/t/data/emails/nested-rfc-822
@@ -0,0 +1,253 @@
+Return-Path: <jonas@astral.example.com>
+Delivered-To: j@pallas.eruditorum.org
+Received: from example.com (example.com [213.88.137.35])
+ by pallas.eruditorum.org (Postfix) with ESMTP id 869591115E
+ for <jesse@bestpractical.com>; Sun, 29 Jun 2003 18:04:04 -0400 (EDT)
+Received: from jonas by example.com with local (Exim 4.20)
+ id 19WkLK-0004Vr-0I
+ for jesse@bestpractical.com; Mon, 30 Jun 2003 00:08:18 +0200
+Resent-To: jesse@bestpractical.com
+Resent-From: Jonas Liljegren <jonas@example.com>
+Resent-Date: Mon, 30 Jun 2003 00:08:17 +0200
+Received: from mail by example.com with spam-scanned (Exim 4.20)
+ id 19Wayz-00068j-KO
+ for jonas@astral.example.com; Sun, 29 Jun 2003 14:08:42 +0200
+Received: from jonas by example.com with local (Exim 4.20)
+ id 19Wayz-00068g-FY
+ for red@example.com; Sun, 29 Jun 2003 14:08:37 +0200
+To: Redaktionen <red@example.com>
+Subject: [Jonas Liljegren] Re: [Para] =?iso-8859-1?q?Niv=E5er=3F?=
+From: Jonas Liljegren <jonas@example.com>
+Date: Sun, 29 Jun 2003 14:08:37 +0200
+Message-ID: <87d6gxt7ay.fsf@example.com>
+User-Agent: Gnus/5.1002 (Gnus v5.10.2) Emacs/21.2 (gnu/linux)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="=-=-="
+Sender: Jonas Liljegren <jonas@astral.example.com>
+Resent-Message-Id: <E19WkLK-0004Vr-0I@example.com>
+Resent-Sender: Jonas Liljegren <jonas@astral.example.com>
+Resent-Date: Mon, 30 Jun 2003 00:08:18 +0200
+X-Spam-Status: No, hits=-5.7 required=5.0
+ tests=AWL,BAYES_10,EMAIL_ATTRIBUTION,MAILTO_WITH_SUBJ,
+ QUOTED_EMAIL_TEXT,USER_AGENT_GNUS_UA
+ version=2.55
+X-Spam-Level:
+X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)
+
+--=-=-=
+Content-Type: text/plain; charset=iso-8859-1
+Content-Transfer-Encoding: quoted-printable
+
+Material f=F6r att uppdatera texten om niv=E5er.
+
+Denna text b=F6r dessutom ligga som ett uppslagsord och inte d=E4r den ligg=
+er nu.
+
+
+--=-=-=
+Content-Type: message/rfc822
+Content-Disposition: inline
+
+Return-path: <list-bounces@example.com>
+Received: from mail by example.com with spam-scanned (Exim 4.20)
+ id 19WFzq-0005i1-WE
+ for jonas@example.com; Sat, 28 Jun 2003 15:44:13 +0200
+Received: from localhost
+ ([127.0.0.1] helo=example.com ident=list)
+ by example.com with esmtp (Exim 4.20)
+ id 19WFzp-0005hf-Tz; Sat, 28 Jun 2003 15:44:05 +0200
+Received: from mail by example.com with spam-scanned (Exim 4.20)
+ id 19WFzh-0005hR-Bu
+ for list@example.com; Sat, 28 Jun 2003 15:44:03 +0200
+Received: from jonas by example.com with local (Exim 4.20)
+ id 19WFzh-0005hO-AO
+ for list@example.com; Sat, 28 Jun 2003 15:43:57 +0200
+To: list@example.com
+Subject: Re: [Para] =?iso-8859-1?q?Niv=E5er=3F?=
+References: <002701c33d62$170fb2e0$a33740d5@TELIA.COM>
+ <002301c33d66$bf6483e0$d97864d5@remotel2tu76c8>
+ <64753.217.210.4.156.1056801224.squirrel@example.com>
+From: Jonas Liljegren <jonas@example.com>
+Date: Sat, 28 Jun 2003 15:43:57 +0200
+In-Reply-To: <64753.217.210.4.156.1056801224.squirrel@example.com> (Jakob
+ Carlsson's message of "Sat, 28 Jun 2003 13:53:44 +0200 (CEST)")
+Message-ID: <877k76uxk2.fsf@example.com>
+User-Agent: Gnus/5.1002 (Gnus v5.10.2) Emacs/21.2 (gnu/linux)
+X-BeenThere: list@example.com
+X-Mailman-Version: 2.1.2
+Precedence: list
+List-Id: &#214;ppen lista f&#246;r alla medlemmar <list.example.com>
+List-Unsubscribe: <http://example.com/cgi-bin/mailman/listinfo/list>,
+ <mailto:list-request@example.com?subject=unsubscribe>
+List-Archive: <http://example.com/pipermail/list>
+List-Post: <mailto:list@example.com>
+List-Help: <mailto:list-request@example.com?subject=help>
+List-Subscribe: <http://example.com/cgi-bin/mailman/listinfo/list>,
+ <mailto:list-request@example.com?subject=subscribe>
+Sender: list-bounces@example.com
+Errors-To: list-bounces@example.com
+X-Spam-Status: No, hits=-7.0 required=5.0
+ tests=BAYES_00,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT,
+ REFERENCES,REPLY_WITH_QUOTES,USER_AGENT_GNUS_UA
+ version=2.55
+X-Spam-Level:
+X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=iso-8859-1
+Content-Transfer-Encoding: quoted-printable
+
+"Jakob Carlsson" <esrange@example.com> writes:
+
+>> Om du g=E5r in p=E5 Hemsidan och sen p=E5 Torget.
+>> D=E4r ser du att det st=E5r ditt anv=E4ndarnamn och
+>> bredvid det Niv=E5 5.
+>> Klicka p=E5 niv=E5 5 s=E5 kommer du in p=E5 en sida som
+>> f=F6rklarar allt om niv=E5systemet.
+>
+> Bra svar. Men jag k=E4nner f=F6r att ge en kort f=F6rklaring av niv=E5-sy=
+stemet.
+
+Jag skulle kunna l=E4gga en massa tid p=E5 at skriva samma sak om och om
+igen. Fliker in h=E4r f=F6r att s=E4ga detta =E4nnu en g=E5ng...:
+
+ * Det =E4r jag som hittat p=E5 det h=E4r med niv=E5system
+
+ * Det =E4r en stor skillnad p=E5 hur det =E4r t=E4nkt att vara och hur det=
+ =E4r
+ nu. Jag har stora planer och en massa id=E9er jag vill genomf=F6ra.
+
+ * Niv=E5systemet =E4r en =E5terkoppling f=F6r vad man gjort f=F6r webbplat=
+sen.
+ Som ett tack g=F6r hj=E4lpen.
+
+ * Systemet finns som en inspiration f=F6r de som d=E5 k=E4nner f=F6r att g=
+=F6ra
+ mer. Men jag vill inte att det ska ge en negativ influens f=F6r de
+ som inte gillar niv=E5er. Var och en ska kunna v=E4lja att ignorera
+ niv=E5n. Speciellt b=F6r de f=F6rst=E5 att det inte har att g=F6ra med
+ graden av andlig utveckling, esoteriska kunskaper eller n=E5got
+ s=E5dant.
+
+ * Inspirationen till niv=E5erna kommer fr=E5n spel, hemliga ordenssystem,
+ kosmska hiearkier, skr=E5v=E4sen, akademier, politisk administration,
+ osv. Det =E4r ett element av rollspel. En lek.
+
+ * Olika niv=E5er motsvarar olika roller p=E5 webbplatsen. Webbplatsen
+ webbmaster och ansvbariga har en viss niv=E5, bes=F6kare och g=E4ster har
+ en annan niv=E5.
+
+ * Alla datorsystem har administrat=F6rssystem f=F6r dem som sk=F6ter
+ systemet. Jag har valt att arrangera dessa funktioner i en skala.
+ Niv=E5n anger hur mycket av systemet du har r=E4tt att administrera.
+
+ * Att ha ett niv=E5system f=F6r access g=F6r att man kan g=F6ra som p=E5 f=
+ilm;
+ att l=E5ta de med h=F6gre access komma =E5t mer information. De med
+ riktigt h=F6g niv=E5 kan n=E5 topphemlig information. P=E5 denna webbpl=
+ats
+ kan varje anv=E4ndae v=E4lja att h=E5lla vissa personliga uppgifter. Har
+ du h=F6g niv=E5 har du rollen som anv=E4ndaradministrat=F6r och har
+ tillg=E5ng till dessa uppgifter. Just nu =E4r vi tre personer med
+ denna niv=E5n.
+
+ * Niv=E5systemet =E4r ett m=E5tt p=E5 p=E5litlighet. Vi ger dig h=F6gre n=
+iv=E5 n=E4r
+ vi litar p=E5 att du inte kommer att f=F6rst=F6ra f=F6r oss. F=F6r ju h=
+=F6gre
+ niv=E5, desto l=E4ttare kan du sabbotera inneh=E5llet.
+
+ * P=E5 en h=F6gre niv=E5 beh=F6vs det inte bara att vi litar p=E5 att du v=
+ill
+ v=E4l. Du m=E5ste =E4ven ha ett gott omd=F6me, teknisk f=F6rst=E5else,
+ intresse och logiskt t=E4nkande. Utan detta =E4r det l=E4tt h=E4nt att =
+du
+ f=F6rst=F6r saker av misstag.
+
+ * Vi vill uppmuntra medlemmarna att g=F6ra det som =E4r bra f=F6r
+ webbplatsen. Tilldelandet av h=F6gre niv=E5 ska uppmuntra till att
+ g=F6ra det som =E4r bra.
+
+ * F=F6r att minska missbruk av e-postadresser visar vi e-postadresser
+ bara f=F6r de med lite h=F6gre niv=E5. P=E5 s=E5 vis vill vi undvika att
+ n=E5gon g=E5r med som medlem bara f=F6r att samla e-postadresser f=F6r a=
+tt
+ sedan g=F6ra reklamutskick.
+
+ * Idag n=E5r du olika niv=E5er p=E5 detta vis:
+
+ 0. Kom in p=E5 webbplatsen som g=E4st
+
+ 1. V=E4lj anv=E4ndarnamn och ange e-postadress
+
+ 2. Logga in med det l=F6senord som skickats till dig
+
+ 3. Skrivit en presentation
+
+ 5. Presentationen har godk=E4nts
+
+ 6. Du har svarat p=E5 ett f=E5tal fr=E5gor om dina intressen
+
+ 7. Du har svarat p=E5 en massa fr=E5gor om intressen och beskrivit dem
+ detaljerat
+
+ 10. N=E5gon v=E4ktare tycker du f=F6rtj=E4nar h=F6gre niv=E5 f=F6r att du=
+ =E4r s=E5
+ trevlig och engagerad i webbplatsen.
+
+ 11. Du har gjort ett antal kopplingar mellan =E4mnen och =F6verv=E4gande
+ delan av dem har godk=E4nts av en v=E4ktare, och du accepterar att
+ b=F6rja som l=E4rling i v=E4ktarakademin (jobbet som
+ systemadministrat=F6r)
+
+ 12-39. D=E5 och d=E5 tittar jag p=E5 vad du gjort i form av skrivande av
+ texter och arbetande med uppslagsverkets =E4mnen, och justerar din
+ niv=E5 i f=F6rh=E5llande till m=E4ngd och kvalit=E9 p=E5 arbetet
+
+ 40. Du har full=E4ndat ett helt =E4mnesomr=E5de. En m=E4ngd sammanl=E4nk=
+ade
+ =E4mnen med bra textinneh=E5ll.
+
+ 41. F=F6rtroende att arbeta med adminstration av medlemsregistret.
+
+ 42. Delaktig i utvecklandet av webbplatsens prgrammering.
+
+
+ * Allts=E5. Automatik tar dig till niv=E5 7.
+
+ * Men som sagt. Jag har en massa andra planer d=E4r mycket mer kopplas
+ till niv=E5er och d=E4r det finns systemautomatik f=F6r hela v=E4gen till
+ niv=E5 40.
+
+ * 41 och 42 ligger utanf=F6r niv=E5systemet i =F6vrigt. Den som har de
+ niv=E5erna har inte n=F6dv=E4ndigtvis tagit sig till niv=E5 40 innan. De
+ motsvaras av anv=E4ndaradministrat=F6r och systemadministrat=F6r och
+ niv=E5n speglar maktbefogenheterna snarare =E4n vad man i =F6vrigt gjort
+ f=F6r webbplatsen.
+
+ * Alla texter. Allt inneh=E5ll =E4r =F6ppet f=F6r alla. =C4ven f=F6r bes=
+=F6kare som
+ inte loggar in. Du kan till och med g=E5 in p=E5
+ administrationssidorna utan att logga in. Vi g=F6mmer inte inneh=E5ll.
+ Det vi g=F6r =E4r att hindra dig fr=E5n att =E4ndra inneh=E5llet. Vi d=
+=F6ljer
+ dock en del information om andra medlemmar i syfte att f=E5 s=E5 m=E5nga
+ som m=F6jligt att sj=E4lv skriva in sig och skriva en presentation.
+
+--=20
+/ Jonas - http://jonas.example.com/myself/en/index.html
+
+_______________________________________________
+List mailing list
+List@example.com
+http://example.com/cgi-bin/mailman/listinfo/list
+
+
+--=-=-=
+
+
+
+--
+/ Jonas - http://jonas.example.com/myself/en/index.html
+
+--=-=-=--
+
diff --git a/rt/t/data/emails/new-ticket-from-iso-8859-1 b/rt/t/data/emails/new-ticket-from-iso-8859-1
new file mode 100755
index 0000000..299392d
--- /dev/null
+++ b/rt/t/data/emails/new-ticket-from-iso-8859-1
@@ -0,0 +1,31 @@
+Return-Path: <hw@nordkapp.net>
+Delivered-To: j@pallas.eruditorum.org
+Received: from sm1.nordkapp.net (sm1.nordkapp.net [62.70.54.150])
+ by pallas.eruditorum.org (Postfix) with ESMTP id 48F4E11112
+ for <jesse@bestpractical.com>; Mon, 2 Jun 2003 14:58:37 -0400 (EDT)
+Received: (qmail 3612 invoked by uid 1009); 2 Jun 2003 18:58:36 -0000
+Received: from unknown (HELO office.nordkapp.net) (213.161.186.83)
+ by 0 with SMTP; 2 Jun 2003 18:58:36 -0000
+Message-Id: <5.2.1.1.0.20030602205708.0314c5f8@mail.nordkapp.net>
+X-Sender: hw@nordkapp.net@mail.nordkapp.net
+X-Mailer: QUALCOMM Windows Eudora Version 5.2.1
+Date: Mon, 02 Jun 2003 20:58:30 +0200
+To: Jesse Vincent <jesse@bestpractical.com>
+From: Wilhelmsen Håvard <hw@nordkapp.net>
+Subject: Re: rt-3.0.3pre1
+In-Reply-To: <20030602185607.GN10811@fsck.com>
+References: <5.2.1.1.0.20030602204834.031406d8@mail.nordkapp.net>
+ <5.2.1.1.0.20030530194214.0371c988@mail.nordkapp.net>
+ <5.2.1.1.0.20030530194214.0371c988@mail.nordkapp.net>
+ <5.2.1.1.0.20030602204834.031406d8@mail.nordkapp.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset="iso-8859-1"; format=flowed
+Content-Transfer-Encoding: 8bit
+X-Spam-Status: No, hits=-1.9 required=5.0
+ tests=AWL,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT,
+ REFERENCES,REPLY_WITH_QUOTES
+ autolearn=ham version=2.55
+X-Spam-Level:
+X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)
+
+Håvard
diff --git a/rt/t/data/emails/new-ticket-from-iso-8859-1-full b/rt/t/data/emails/new-ticket-from-iso-8859-1-full
new file mode 100755
index 0000000..493ca15
--- /dev/null
+++ b/rt/t/data/emails/new-ticket-from-iso-8859-1-full
@@ -0,0 +1,38 @@
+X-Mailer: QUALCOMM Windows Eudora Version 5.2.1
+To: Jesse Vincent <jesse@bestpractical.com>
+From: Wilhelmsen Håvard <hw@nordkapp.net>
+Subject: Re: rt-3.0.3pre1
+X-Spam-Status: No, hits=-1.9 required=5.0
+ tests=AWL,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT,
+ REFERENCES,REPLY_WITH_QUOTES
+ autolearn=ham version=2.55
+X-Spam-Level:
+X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)
+
+At 14:56 02.06.2003 -0400, you wrote:
+>> This patch didn't help us out.
+>> We still got problems with auto responding e-mails sent from the system
+>> when a new ticket is created.
+>> The same problem appears when one of the staff replays to an new ticket.
+>> All Norwegian letters is converted to strange letters like ø
+>>
+>> We would love if this bug could be fixed. On our mail server we are
+>running
+>> perl 5.6.1 since we are using debian stabel packet lists.
+>
+>I'd love it too. I just can't find it. Can you send me
+>(jesse@bestpractical.com) a couple of email messages containing
+>characters that break your RT?
+
+Hello again,
+
+Thanks for your fast replay!
+
+I don't know how this looks at your end but it is letters like: ø æ å
+If your want to make this in html it will be &oslash; &aring; and &aerlig;
+
+
+--
+HÃ¥vard
+
+
diff --git a/rt/t/data/emails/notes-uuencoded b/rt/t/data/emails/notes-uuencoded
new file mode 100755
index 0000000..f27fdf8
--- /dev/null
+++ b/rt/t/data/emails/notes-uuencoded
@@ -0,0 +1,2368 @@
+Return-Path: <mhenrion@example.com>
+Delivered-To: j@pallas.eruditorum.org
+Received: from serveurlotus.example.com (unknown [213.56.193.67])
+ by pallas.eruditorum.org (Postfix) with SMTP id C21DB113AA
+ for <jesse@vendor.example.com>; Thu, 27 Nov 2003 10:55:58 -0500 (EST)
+Received: by serveurlotus.example.com(Lotus SMTP MTA v4.6.1 (569.2 2-6-1998)) id C1256DEB.00578401 ; Thu, 27 Nov 2003 16:55:54 +0100
+X-Lotus-FromDomain: DOMAINEQZ
+From: "Maxime HENRION" <mhenrion@example.com>
+To: jesse@vendor.example.com
+Cc: support@example.com
+Message-ID: <C1256DEB.005717B5.00@serveurlotus.example.com>
+Date: Thu, 27 Nov 2003 16:55:50 +0100
+Subject: Test e-mail which exhibits problems with RT
+X-Spam-Status: No, hits=-2.6 required=7.0
+ tests=BAYES_20
+ version=2.55
+X-Spam-Level:
+X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)
+Content-Length: 144905
+
+I send you this mail from Lotus Notes to make sure it'll exhibit the
+reported symptoms (lost attachment and body). I Cc: it to our RT address
+to verify it does cause the reported problems. Could you please mail me
+any replies to my personal e-mail, mux@example.org ?
+
+Thanks in advance,
+Maxime
+
+(See attached file: Naz_Head.jpg)
+
+(UUEncoded file named: Naz_Head.jpg follows)
+(Its format is: JPEG File Interchange )
+
+begin 644 Naz_Head.jpg
+M_]C_X``02D9)1@`!`@(```````#__@`>04-$(%-Y<W1E;7,@1&EG:71A;"!)
+M;6%G:6YG`/_``!$(!(D#$P,!(@`"$0$#$0'_VP"$``0"`P,#`@0#`P,$!`0$
+M!@H&!@4%!@P("0<*#@P/#PX,#@T0$A<3$!$5$0T.%!L4%1<8&1H9#Q,<'AP9
+M'A<9&1@!!@8&"0<)$0D)$248%1@E)24E)24E)24E)24E)24E)24E)24E)24E
+M)24E)24E)24E)24E)24E)24E)24E)24E)?_$`*(```$%`0$!`0``````````
+M``(``0,$!08'"`D0``$#`P,"!0($!`0$!0(""P$``A$#!"$2,4$%4083(F%Q
+M@9$',J&Q%"-"P5+1X?`5,V+Q"!8D-%,7<H(U0QACDI.B)29&5%8!`0$!`0$!
+M`0`````````````!`@,$!081`0$``@(#``$%`0$!`0$````!`A$A,0,205$$
+M$R(R87$%%5*!_]H`#`,!``(1`Q$`/P#Y`NZSM9#1`&(!5%[G\U"!WW5B](U:
+M0(GDE5'DR3$]R3,K53ZB?5?D$I,JNC=`\EN#.=PHMVZH^%$6?,)R3(`R90/K
+M:AB0!LHFG"&6Q`,?*(E\^"`"3.=TC6=J`)([!0M#=1U'X3.TZ9D[X**G=6=(
+MR82\]X,ZC`&"H0X"9<3W2:(&GOWF4+VLMN7D2T[[AR*E5<YPU?>56:T,@P<X
+M3^D#'*J+3:SC(<8[92\XB/5]U7VV$E/Z=(!.459_B7`0'&2F%<EX)D]R%7!)
+M:$B1.<S^B(G-PYFQQ/*7G$P9/M!5>9,:ML)Y$]AW03FLXR78A.VY=&=IV58&
+M2!^X1-BFWO)S""S_`!#M,.,'VV2;<.(C48"JR'#&!V*>!LUV_OLBK)KO@C5)
+M_9)M=V0(GNJSAL9"7!!E066UR&X)^BD%P06DOR%2&00WG=$WYSQ[JHL&Y&>9
+MQV3ON7.;ZG:@.).%59,Y.#[)H&F7.`/QNBK;:Y#?S$XP"4(N'[:S[Y46H-8<
+M2#C.4``SZA!V")I9?5=AVO[<IA7=J)C$[DJN""8!VY"3C$;@(6+?\4_83O@)
+MZ=U4;@$YQNJ0<>')L[3G?=15_P#BG`0"[/=(W;N3NJ@/J]>8PG=M(<!P%46Q
+M<5)C5!&Z%UR0^=6_,JJZ220[',XE!J(VD@HJZZZ<3J+H)X*=]T]K1ZLGW5*G
+M+G3N$[-()F/_`,1E0TN-N7@RUY)[R<)V7=1V=1^ZH@.,F<CA$V/+F8CLJBW6
+MO'^8/4[[HA=U,^L@K/?#GB-N4Y)Y)CW15RI>5'#_`)CL>Z`7CY]1=`[$Y50&
+M1,Y]BF&^G!]I07_XRII!#JD3]E(RO<NI.KM-30T@.=P"LV`T[C]D0<?+(DD$
+MR0D5<;?59(+S)P9)2_CJN_F.)VR51=+7@S'QA($N$#9$:-.^JR/63]5(R]K.
+MP*CM1]UF'7L,=H1M=+IY0:#[ZL'R'N$#9/\`\0N`3-1Q!.8*HD..1N@]0)@@
+MQ[HK39U"J2!YA`/*3>HU9_/O]5G,+F"9@>Z?5D3Q[HC2'4*PF'9=]T_\?6!'
+M\QQ^2LZG,[R-U(3Z):<<"9A*+K.I7(<2*KA]4XZI<:R[S78YE9H))$NB?=+4
+M(C.^4&O2ZM<:Y-=^F<PXJ9W6[ME1_E5ZA!V]1P%A%T-/'NI*+M(U3J/LLU8V
+M[?KM\#_[NK,?XBI7>(+\`#^+JQ[/*P/,<'SI`]E/1D[@'.`D*V[GKMZUP>;N
+MOW`#RJEQXCZB^KJ_BJ_P*CEG]1JD5PW5D?HJC2`V8,]P>$A.&PSKO41Z'7E;
+M/_649\0]18YO_K:I@Y]9@K%:\DDM/P.4#G._J)39IT%3Q#U(48;>U9]GE*WZ
+M_P!3:=;KVMCC65@L,M],_=3C\I9@^_*IIT-GX@ZL]P<;ZK#3)EY5YWB;J9`_
+M]75`]G9*YJB-%&!@G<=T?F!K`T3'LL4=(/$_5-`TWE4#_P"Y,?%750__`-[5
+MS[KG?,U-`)..W*$N$F=QW4TKH?\`S5U?7)O:@^J3O%/5&`3>5<_]2YQS_3,D
+M90OJ%L9S[*CI'>*^JA\_QE4>VN?[)4?%76`''^/KCC\Q7-.?WG[PHR\9[\!"
+M.I/C+K8R.I7(CL\J1OC?K[!J'5KH>WF$+DC5TM&#J_="YY=].$Z'8?\`G_Q(
+MTS_QJ\$\"L[_`#1?_4;Q8T"/$-^('_SN_P`UQ.O/`(3O?Z<\JZAR[=WXG>+V
+MMQXBZB)Y-R__`#3?_4[QHV2/$W4\<?Q3_P#-<,YTD-[(7N!.70!NAR[S_P"J
+M'C(;>)NJ0.]W4_S3?_5'QII.KQ/U0@;?^I?M]UPDN()DCLE2J/%6>?8Y5X-U
+MWP_$[QDTZO\`S+U0#L;A_P#FA/XI>-1__D_5!`__`-A_^:XBK4+A#=]LJ'62
+MT@@2H;KO:?XK^.`#'BCJ7_\`'=_FI&?B]XY;G_S1U$]OY[O\UYWYA+")*;6-
+MNRJ/26_C)X]8UI_\T]1@XCSBI/\`ZT_B$W;Q5?D]O-*\R#P`#O&R$UC,SDH/
+M4*?XX?B,R)\6]1$?_M4=3\<OQ&F6^+>HB?\`]IM^B\LU.W(D$*.M7\L$-DGW
+M31MZF_\`';\2*6H'Q3U!Q(P?.V_15S^./XE:-;O%O42WDFIM^B\K#_3).0>4
+M1>-,R,YB86M0Y>HL_'+\2"X$>*NH?_Q/]%+1_'7\1FNSXHO2>_F+RG5#,F/8
+M=U(S+@Z23\)J'+VNT_\`$'^)M.W:QOBJ[@=WJ3_]8;\3_P#_`*NZ_P#WUX]0
+M/\IOJ`13_P!8_P!_1.#E)>;X.DJE4`G4&CW]U>O/2YTY/95"VD\@O(8(_-NE
+M-(*I$\#ZJ.((DP#MRC?I!,.#@3P@<YLQ@D*)T!Y=!!'V3,!(!DR-NZ/!DDS_
+M`)H=3FOU#\Q$3*`2[U;F3^J9FG5DG!VA%J&"\3VA,PC.H3]4#")SCZ[IPZ6Y
+M.?;*9Q$P1">`3L`F@0!<W48QB)RDW\W8=DM)B0,C=(G'Y3OG*H)A]7YC]TGO
+M`;J&VTI8`@$@QRF`F)A`6HZ<&,(`XM$-),HM.TR`DTC)_9`@]H'?NB(U9)D*
+M)Q`R/L"G:]K3D$_*"3`)DS'(_P`X2>0`")).=10F`,SG9*`Y^DS'9#0VZM.'
+M@0=NZ51S@XYR=PG9IF'?1!4<)QF4!`X&<E.9%3F2.Z$Z-(:!$Y30-4SL@D`]
+M<ETSPD2`X%Q$#W3.>TTQ@",3R5'[%V$1,Y\B8S&Q0:S^;4")R9@(2^`<P>T[
+M)`@^IH&GL%%2-?@B8^J;60">3]T+=C.J1O@_ND<_U8'(RJ<E))W`GE,?=Q,<
+M%+TDD@R?E-$C#A[A0$`79&/JF!<U^X^B'!YRDUOJ(*HF#AY@Q&$6KDNB%"0"
+M9!2<8.3)Y4$CW2\MF#^Z8.(;!&KZIG-P-L#A"V6F=8!/""0%I.0/<(75#/:=
+M@$.F:>8`/)3#3OJ'T*(D:[&8B=Y4C7$"&M,J)L1Q'>$3@1L8'L@8F3@1]4+G
+M&(VX2(#3^:>\%`?54P9'SNJHZ;B.^4]0D@X!(0@..QCZIR`V"7-.)0)CR6P1
+MDHFZ@-_B<H`WU1IGV3L#L0!`X)*:41=.<GX1,?\`TYA``=<C`&0EI/,90&PN
+M+IQMR437D#8PHVM)B'>VZ.>9&?T32';4C&4FN.24S!G,B.4@"7P-D4;CZ02G
+MUQM@'E,`7,D-F-TP:03#B)XW03TW0`3/=.ZHT[20HJ0(=JP<83U=1'Y??=$I
+M.>20)B/JF<\D^W<!#)DQB>$)+@3@D=@@.1J(C\RGI.TTAL`%!;@U'@&8)4U<
+M#40..%*LA!WKD@?,JQ3<*;=6J?959U`<%*HXBG,R=MU`JM05+G42#[QLF>8:
+M0V"1O)W4;):`V3G>$4@$&()W0/YA+H&$S"=Q$'E,X34D!.&MF<>_NBIZ.G5.
+M1C=6*32XZSMP56:Z#I#1/=6ZKAY8:!$;PI:1(7B!)SV0O<T[&(0BF-&<#W05
+M7:G%L8&%!,UPC`$_*?7)))4+&NF9P-@0G/R,]D!$M)DGX"3G%P`W^NZ!A;OB
+M1[R@JU"1F(;VP4!ET'TD3[("8?&,^R`O!&,&=@A($`P2.TJFAQZAK/V0U()]
+M),\A(QITP/C>$+R(+B![(IY&DQN$!U$=OE*99G;V0ZVDSVXE7:0I$@DY12W5
+MF0.P47ID%(N@03]R@.1DL'ZH<X)#L\RF$;:O]$Y8WR]0J-+I_+&?^R&A.=`G
+M'T0!\2[)*%P,1D`<(7N`@$_JB40>#_DD#^G"C!R=_NE()$'?!0$X%Q$?NF(&
+MY!&.Z;;4`24#RYH!!)]T#U7A@,\JNZ-6?ND\EYDN$]T]-[\MUX[0M!/;+?E,
+MUDQ/WW2=4TGL3V*!SAQQS*(D:WD$P?T4M+8@29W]E!J],CE'J&H`.XR$&G0<
+M!1:(&R/6WL%#1TFDTEW'9%#/\?Z)N+I/<F"1,=]7^JI5G`N(';`[*[?$.<7[
+MS]BJ=8@'&$J('2&YF3QV0`-+`XD3VY1<D$@'=`T>L@B%`B9(SQF$/&TIHT[B
+M2F;!.3'L4#N:&P[?Y*:1!WD=T\S(.3\RA,:2Z.?T3:GD%I&Y&/A*8&9CLA(S
+M$B/S8PG<V88QIQGOE$T-CV#9SB>Q&R<Z09CW(40V@#9$=IP/>%0;B#F#CW14
+MXU>QX4?]1X*3,$X(]U!,_2'0XS"%S@'20(CLAJF'#E)I!!:2J$XMS(]L(26P
+M)S[(W._EENH@3J4+FR2/902.TZCP(V[HH!!C(*A;#@)V[<J6F<R3J&,3NA3@
+MXW*8",@'(15&AQD8C.\H>8@M^"J#<1&QE-SL0.Y2(SOLE'IF<($XB<F/="8+
+M(<<3$I/TD@`SVE!I].))"@-S@1(=@I"=)SNA((80#*(/$`M:!`SE%%,`#7&$
+MCN"YT_51DNB`Z0#CA.0X_5(AQ&`23[E/L1W/"C@.).T9*3S+@1/9/\.AM!.2
+M0">$3P0[)"%VD9!D#<I./I[IL2'5$`R$!&&SQA"UQTF73/'"?.($%#8Y&3//
+MV35`XOU&)2):`?3!'U0O,M$B`>^Q02!D;F2>P0&(,[I,:XB-4B,Q"1#@=49"
+M`J9!R^3&R=Q;J$(0(GD(*A<(='U2"1V&;#_-`R(D;%,\DL$B>Z$;X!55)G48
+M1-'IS&VZ'48&#GE,<C<0@(`:\`QVDI`;[<]TP=B00G:7"<;\A`;M1:2,8R<I
+M-&0)@H0XZ(<-(B>4[2[5`(GL902`.:#ID(2,Y$D]D33Z().$(F,'ZH#:"6GU
+MB9_*F$SO]$F-)V,%(.Y`D(:'4P0`?LD`[2)D`]]B@#LX:1*<O<&ZH4$C9&YP
+M-LIW.#6R'&>Y0D02-.>ZE<\NHM`:)'/*HBDQ.=MYW2C,D[(2XN;))"32XM(!
+M@'906+-LEU4DXF(2TD$$.)3AX91:WDY0DM#?RQQNI5A]!+@3/PA<=\@HGNCT
+M_?/"AJG$#8^V$"UD8!4E,P9;G':5$"`?5()X4[6.@.VCLJ@2UT`B?E.3#`9$
+M\93:H/I/SA.P-J$``R#NH+%KAVLOD=H4I<9@SW[*(0T>EV/8)5'$N&9![K-Y
+M5+J<68(R-TTB=0P4!<-`@(`YVH24$],SF?A"]P#MQG&4&J'">$+W>H09SA%%
+MEI(D"=RA+9;D_;!3.+B\DCG9,]X(,.T@;?'R@6Y,]L94L4_X4N=Z7R(`V4.M
+MPR2W*=S@:@&P(VE5."?KTR1!)F4#LB"-LRBG<B2[L@>YH`$85"!G@'ZIG0<D
+M093'&<#@"4%0AI@D`<`=T#D1F0/N4P!!@#?>>$S8D3*L=2_@!58+)U4MTC6:
+MD3JYVX00'T[YS\I4W`\H9#G"8^`D\M#AZ9^40Y<7'@?.4#@)!R24Q,]FI$ZG
+M$_W5#XW$S'=,UHF(W0DB#DY3R0V29(W0"78)*KU':R`9]D]=^O\`*%&60\1P
+M@,#5`VGNG`:T.,9!30`!#N,I0!N(`5*.B*/G!U5ITC)&<_91N+<D-)[0FJ/D
+M:08`[H]#O+%0QI)@9S]MU`#1+A,Q^RE9'FD$'M'91@MU&-^ZD9N-.,;JHNTM
+M(I@02B]/8H:=1K6``''LB\T=C]D.%FX.EKA@B,$JE<`AT3SPKEXZ"1&?M]53
+M>!J(G`*54-6=H"B/I?MDA2U3DG&.%&]Y=!+H(/W4`N_/@&$B6R'#=)[AJ(P(
+M0-$/@"9303HF0TR/T2:06!I)E*3!$8E-K=K!``;QE`0#9`P8]L(&_(CV*<&0
+M<C.X"9Y]7QB0B">.9.4[OR['L"A<1$`A&_\`(.!.854F-(:?4?A$6AKX[;Y3
+M4G.#,[=RE.!(CNB'=&X.R8F``,)2X',0)"B)).T245(..>=L)B<D`#M`3:M(
+M!=,@)Z1!?F<'_50)K1)!Q(V[J0#3B#F,(6.;KV(Y,%)S@0UHQP54['4<?B,H
+M69)!/M/=)I(AS@8VRAD:P!CNH)<O/ID$<)F$APR?A-JAL2?NE,9P(RJ&=.H\
+M&=I1-$`N<2)4=1\F03_F4=,X$$E`SP-1$D0A$C&(/.RE(:7.<-_?A1D&8&_O
+MRHIWDZ2-1&GE)C@TN!.3^B3=&D-(`_NA,-<X!V"(E$(;S(SV1/:]CAK:1(D>
+MXX0'<B$;WZC@N(C??"*6'")R3_LIVN`S(,(&N$#VY2$G(;DX0IR3[2.R<.DF
+M!!_=(D!@')R?=-/IDD2>R!SAP),>R1Y(SV]D+V_S2V))YE,T:F@`X"J)&2UI
+M'._*1Q$&/<!,(C_JVV28(:<0.5%Z%J)!)W`R5&).!&F4;@9,Y![<*,#!,[[!
+M!)IFG)?Z@8CV0Y`T@C2A@3NG;Z3\<DJB2GOO\Y0S(`(!)[*2E2<^D][`3HR2
+MA>7:9,`;0H&WR`(.(1;;D",8*:)Q)D;F4B#.'8!GL@?+7$'OPDV"_.3.Z6"1
+MM]1E.ULSD2,90$TES#\@83M&3&W=,USA$R0=RG`T@.!WVA%Z$UQ+CB!Q[I.(
+M.`([^R<.EFW/*`DEYDX(@RB:%.8,&/V1MD8R<*,B'`[QPIV#^43D#]D`Y#H.
+MK`Y"*J#$F028DY4?YJN,`=N457!<=I&<H:,]V)X`WA'3#L'^F=OA0@2=AE3!
+MIY=$F-DIH3CJ?K(V/")H$>K/919@P1DJ5^EEO`(G(W]EEI%5(+ISE!4=D<$'
+MO"6OU1Q*:)=G!Y5036G7)VVE76.<+5S1I')=L2J;"00`.5,S\D@C2$^!JAQL
+M('LCH,<&E\@$YCZ(6-UNB7$!2@[-&`-]U*';.2#`CLE3'I$@'O/"8P!G'=%2
+M=J>9^<J*>L#$#$8P@:3DD@J5X<##?Z9)([J(?F_+)B<H'#@203@9P@GU';/9
+M,V&R0,)V9SC&4(=X<'#,R.%&3#0XC$P$3\N(`V^B&GM@XVGO^BL!C!`&GLG)
+M:W!@Q&>9E`#IG<`\2FEN=L?JB%4($Y"!Q#8&1[]TG26`Z<`;=DG0&C[HH0,R
+M<?)Y35&D.(Q!V]T\C5($@#(*C>('(.\*H?`@'O.-T+RUOIW,Y@J:XHU:5.G4
+MJTRT5&ZV3R-I^X4+H+B<Y']T`O(;Z1N.1A*GIDNP2>XE.3J('`Y"6&M^NZ:-
+M!)RYV0"G!``&DB1DH8&7'`,C"8N],ZAP)0._2XB`94%5\NTCGE27)?2+6N8X
+M:A(GLJ\`F)S^ZH8P!`R-Y3G\V)D#^Z0(&,F#O[)IY)A$&T@&08QRF=!:,$3&
+MR<^H0TD$_JHWY]!W^J!W-);!&#NG.EI!U9!VRD0)`G/"%P;$@2(0&!%0.F09
+MG*.F`#^:3O""FT$`D[X^5)1G4!@GL54K1HU8I-!F81><.Q48H]W9&,92\D?X
+MBJ<+=T&!T-,R,:>%1J!DDQ,=RKEW`<?OO$*C5/IDG._RIEVJ-_J&IW(A0OES
+MRXF(X4E0Z7&"@<1,[\DJ`'`E_ORFP=C]?9$1#@9R.Z%_]1`D%$,?R:@WV^4P
+M'IP<<RG@@>Y,X1/]1)!`&T(H6Q'..QW0^^Q]D1/],`X2!<<GY0(F""9]I*=W
+MJW,H`)P08'MF%)HSF2$03&`M(DP,D),+@(!GA"X:6D#/PF&XP280V1:><_\`
+M9,2Z?RC!X1%IRX?=,-R<G&44B#JU`$=\[)Z8]1,!/MC2<^^$FGUS*H36#5J@
+M>PF$\>HC()V2<'!V/ZNZ%WYL#G[J=D$W#=S')'9"-B=C*+,3JG[X2:#C(SW5
+M#M(U>TIB8P"!GE-F<F2.0A(P29RH@HVC?=&PZ03`)G[(2&R`"B$!XAV$#G)S
+MB.4+XU;P-]^4[MB0[9`XXU`^Q"*%QB"79C&4AAV^1^R0,#3L92<3&=T"!VEQ
+MR8PF$AH+73*0D`XG.4M0:X#2-X0/.CC"(.]6/R]X3"`<[I-;#8G<3]43_"=,
+MZAE/,M(C?NDQTMT_E'9(X;D@$HH1(/.T;)VQF<&<E-!UY)`^-U(R0)B1R)R4
+M-&:/3O,>V4[`6QB3[!%I=H+P"&SM*6HZ1'',($\PR(.3@A0P9)VCA&XNG)R<
+MPF,$02,?HB$&XD_7NF@',9[)2=CE%`'LBI#5J&6ZX`&PV48>-7JV`_5/HV@?
+M/ND02Z7?TG[H&@#W._PB@Z@):1'=.)>_)@\^Z%Q/YG8(Y0%@$@N`G$#NDTRU
+MT<\IAB3.3G>4[7"#N0).$47]43.)_1$PB(C$J,8#8@2C9,SM_9-(-@]$`X.4
+M),C`(#433@M]S*&)=&<]D!TA)S^O)4U9H;;AHDSV4%(@`;F.%+6=Z`>$#,$.
+MW]H*8DDDG;M"'S#C2,#L93R3D"2@(0'#5$B813J<6R/="P'RR22!P$S8:^)U
+M3N2I5D2'3,1B=E$^"[_5&YP:6@A19F7#"FE$`8`'.91%IJX$B!RGI_FG)C,!
+M$[\LP?8@JHC@M#OS23W1EQ\L#&IW9"XR?=3T*;=1>/\`,(:%0:6CDR)_LG<0
+MVI^:.=U-TW^&_C!_$BJ]G^&F!)/`SQ*&]=JJ%PHLI@>G0&Q`[+*HR<S!Q$1V
+M2I8,S!WRD_@^W9,Z)W.!R$$SJKV,<`2)PHF:@09&QY1-_*)SPA(&Y,$X0`:A
+MG&V^439))!B-ONF>-1R?9*EI%3+CGA`FEQ<XR/\`[=Y]U')!(P8'U1@M!_*/
+M24-2=0(CZ*APXQ$^\\(9D%HYQ*1<X52[4<\SND\Z3D$1[H'JDBCD`9W49>-,
+MF)V^4]1PT;DD\("XZC'`50@_U#A!)@S.=H.R-[A$0@#@3+>4@=[M3`"3+1&3
+MPA.6:8R,9.Z6`-1.)0D#\VK3\;H?].02[!$D)G3IG4)/[IO=HE(@@29^B:*1
+M/H+7`P=@HW5"`/T`3$Z0=1.=@%%4(+OR[[JAWU'P-1,1@=DP=#L"1L"F`]$$
+M92S)'M`0$[!!!(GE".2?L4A&LD"('=,X1!D%"<B#@(XCW2U9.-\D#,I!HX;`
+M3%IF,=Q[JAG'U`P=7NBU!QC?]4="B^L:@:6-T@N.IP'[\J(D8;R#DSNHFA`,
+MU!L'&P[%2TY:X\Z3E0@@.#IF.94K&D.#OJ51>HU7-I-;)V1^>[N5'2CRQZ47
+MI_PE39__`%9N'D/=#RP$&8Y"H5B7`Q!`5V]U$G<-E4:N9_:%:(B!I^,B5&X0
+M,G<X")Q,EHP.T*-Y.N3E3M">TF`/U2]$&"9A._5IR1"C.-B?A!:Z76MZ-;76
+MIZQ!@1.?<**Y(\USF&&N<2`,0%'J=J&`.9*62XD.^J!9($../E)PSD'YE,XD
+MNDRB+6Z))`)X'"!-B(+A(3THR2<`Y4;?2Z"W[HV^Q@^Z"S>OH5?+\FB:4,AV
+M9U'NH-!D$`CW]DAD`';W2DB1/"!'TGA(3J&4P^#M".1Y8](!)C5R@'5#N8([
+MRF$1W[A,^-A)A)L[`9/97L'3`,^J/9.08^>4(])@G$Y"<OQ''N5`4PTQ!^4$
+MD&=7"1<`-MT,Y)_=`33(R[9,'D$]BF<1H&($YRA82XG`[!!('29&%/\`RBQI
+M8\E_(55N'0I&D<2(SW0'4\P[Q'NA=ZFSR/U3%W])P=\H*C@#(&>Z*<D[G<]^
+M4GET9,'ND'-)!,@'E+C!D($W\@@DGNG]4G'/*;:8&.Y0.X02$EK<<)-/IF<C
+M"%I(<8)!/"(9B.40]$_TPG^1,80L=)V2<1,D2500D$@P!RC`_E[0%&'%QDHV
+MN.?[*`M;M&((_9`7&#Z?NC:^&;Y/":H6^6#MG:=D`L).YB?>$U,AI)+)]I0N
+M($[3[IV#4'`D-Q(0,-\B/E.2-0Y[H6D'?CB40(B/LB[."7&(`^2CDSG([(#&
+M'$Q"9CFAWM^J"0D"=+O_`,(2:0?S8'<(7?D(9/=.TC>4!'_F?&P3M<"P`M)^
+M2A:2?Z))^J<'.PCF4!O@Q`C&TIP&C+2<H:L0#&^$I`P=O9`9?-4FJ3`Q(3L(
+M$P#"C`WU$8[J0;XS/!0('21&_=&'M,G`GOR@I-+\0,]\(@2<@"0@8M:9,D@"
+M)".A3>\:PUQCF$``@G`)[C"ELW%E20.,%`U>)(,[<)FZ/,!R8X2;-2H07'/)
+M35&C9@R-R"LJ:Z?JJ2TQ.P*9CR6^H;8A`6%P&H93M(@B2/A4&7NSI,81:VBD
+MT'NA$@#!":,:AN@DID/J1$QMA7':12TM>2!C3W5>T8&F7#<9A2G2'&-H6:HF
+M$MRTQIY&(2<YIV,F<GNAV;VG8%,[4!L0$"+V!N9DA/3=@'5*9^EK1DAW/`0T
+M8TDR@DU`8!W0X)TR@^1CY10!ZCD%`TF"3$;(>Y(&??=/Z=XD#W3TV4RQQ=4T
+MXD")DJ@=,TX'U!&4G%L@D$GB.4G$EH``B(D(20!I`@2@<N;!&P[90MR<'ZG=
+M"Z)`F)Y2>R'8F3]95#U`"TZG#V0,PZ8$?*0_*3J.-P4.H3D0!PF@3F1(D%!`
+M#?2_=$]K1SO[H"V`3[\(AA^724AEN(":)$G.>4Q`!+I]D(9X$21N8^5(:C?X
+M=M(TV`M.K5SMRH@T22YQ([RHZKPY\3LJ<&J$D[8&<8E1P-8WA&]L1O\`"$M$
+MG]B@*#I/;N$AW.2D[)B?\DQ:6MW0)L3!E+2`X<#;*;=VK:$>F6R3\(A%I`R)
+M!0./H)X]RG.N8:Z!V"`G_J'Q*+L[20"6N`'*4-+IG;@SE+3ODD']$T@;$_=$
+M2!KB3!)PBI2'1D3P2@IO(;@[CDJ1FJ<F>RHO4R`P`MV]T6IO^']4%/5H$3]D
+M_J[G[(BS?.:1O/Q_=4*S@XR($*W7+M6,?14;C\Y&DGY5JHWU&%NJ(^%$7-#I
+MR0.$YVWPAR';@1P0L[#.=,D$IAM,I.P/5L4FB1#<HA\%LM.1WY2IN#!,"8Y`
+M,(>^2(14?+TDO#@Z,0-S[H!D$B3]CA/Z9P))XF4C`.WW3"`[9OP-T!:O5I.(
+M1#,9Y0-`@D'(XSE/I$3O&=T$D9R0,IJD<#`[(7B!`B$=(,\LN/YAPJ'I!U2J
+M*8DEV!">H?5$Q'=0OB=C\IV%LB0?NH%J&`,?7=$7-F2?JHW?G@`QS"?1J@9D
+MJB1L.$EWZ%,XAQP)]X0-P-!DQ[E(@3B4#D09!QP$[BTO_P`/LHR`'01(&Y[)
+M`-@@GX"@,1M(*>`!.('9,`(B-]H2>WU3)^$BCH,+@ZH&ZVL$NCA"!)W.=D`D
+M'00[W1:?^HY]T00T[$B?E+3F9$]D).ET.]/8IC_TNYG=4.W!CT@C8%%B9G[%
+M`X-<R6N.N=CLG#@&`-&D]QRBE`'YMW?JFP!,@_5`!)U%TPGR9$X*"0P693-@
+M?Z(!,Q)E2TFZJ;R)EL&%-!\0`#)[)$2-OL@,GU`PDP&),`GGLB)6Z2,3CE)C
+M!/K='O,J*($@X.^5(&.))B1SA-B2"!I$Y358!R(E#)`.R%[P70W[=D4G#TG&
+M90AI&3F4G>QWW":(W(*(-K!L-SW3U"<9P$-*9!=.$_J@DG!]]U03HTB1*%D!
+MV3RA;/<3\IVM($3R@-S9'SC*?3&<GV0L<>2=T\S)XVC=`8$"03GW1`B3.2>5
+M%Z_\7UE$9`$\\I%&X"(+H[(@V!+=O9!,M&04B3.`?NH#C5MN4[!G<?"$O=$#
+MA%ZM.K<JFSN:22<>T)P(;.#W]D`+RB),[[Y]BH!((!$<;RI`T#^J9$!"T@5`
+M73],HF/=,Y!^5*IV"&^P1.!@:1]45NUU6HUC07%YC9=5XA\,ML^@T+NWU.>/
+M^;G8(;<B\1ZHDE`]K33&"'3O*L7`)I``[;X4,$#)P@4X$[IZ;7.J0`F)$!HG
+MZE3V[?+]7/)02.>Z-,$1V3=I](*4R[5!^H2?CC(S,+*E$.YQ\IW`SB<[RDZH
+M=S$H"\:).)[H",QB8W[)I+1)Y[(=8/!TQPG-22TP2`J%F#W"9@)9'*1=+>\E
+M(&,\(!J-,B3CVV3M\H:PXEQ/Y<PA+FEI$X/ZI:R0#P/9`M3G-+-6V8"$F3I)
+M4C'28'I("C>\-&"#)[H`@DZM0'UW4FC^5)W/*`N;,@Q.QA25GD4FM+@0-E1$
+MT%(^HYA,YS8$G[%#4>W5G,>Z`J0+WP2T?*!P+1GGA"7Q//NB#M3I=$#N@%TD
+MQ!RG:USCI`)+N(3!X)[?&ZBJU@`()U`]U4*N2'Z9/V43_>$^H&3,<E,2#@DY
+M0.<F(,IR0&['*#4.47HF0!'MRJA-<2(X*1,E,7``CGLEJR<J!Y($<(0X@1Q\
+MI@8D).TM;W11&/H4],M#7`_1`(<S!QV2;!WF408(SC(0F1.(GE*!,ZM^$8-$
+M4OR&9R^2@%D-/$?*FI.=,PK_`(;O^GV;WU+KIS;MQ$4W>8YI8?V(^BJA[#<$
+MAH:'&8_LJBRS\H_-]"G^CONI*8.@:=D\.[JFCU]&K))!6=<?.RM7;W!SLM!&
+M?=4:CP!)Q&.RS5#4<<`"04#G21.4GO<&P,#V35`=>D#;.>R(:);)D92TYAQ(
+MA!K]&DXGE.^IZ]1.Z!R!,.)PF<9,R!\IB[N)^J)Q@B0W81D($^7.DD.)RF;^
+M:)@\04P))P!/$[):])!/?=%'`WGZ)W21Q'8*.G.HD;GNB:^#B`"$B#@D`0/E
+M)K3&'8Y0M?`!$%*F_.VRI$KJ!IL8\/:0\2,R1F,J-ATY_1,2.3GY3/?+G.TY
+M*BG`DSRI,MIZ=,3O[J/5&",I.>"W5'^B"322V<9V*'!=`R1^J8&<B&CV2+A#
+M06&>2/ZD0[V@B&#$X3P]N)`U;CN@U0Z2)^4J;QKEPD?/*`J8$8W3G.^.R&1C
+MD#9,7("JZ]6EV^V4I]6T=RH^W/'RGUB`!L<(I'7$YSRG+8XF,X*'40P`#,I%
+M[33].LCW0&?R`G?A.]L8&2>R%C@21$QV3Z@1IB/D[(&>),SO[I>Q$)B]H<1.
+MV)28<@%THAR8;M\J2A7?1:XL.7")W46IH:0D'M+<`Y0&T^H%PD'=&`"2"0!\
+MH&N!SF2,E.UX+>/HBBI-8714<=/[(]88``R)P8*B#MO5]$S'%I)X/?\`[()G
+M?E(#<_J@(AA`S[HO^:XBF)`R8[=U%JP1(A`[LNVVX3M:#]DVK.0!'*9KP'D[
+M(@H),`E.[:(@[Y3,(U9C&-)2>9S@1P4X4F3I):)C,)__`,4)VN&DQPA9$:9B
+M>$T'`R2'8^$;&SZ9^J'>=(,?ME%OVA`U,,#<C?ORIJ=,:H,=P%'`<^1D=R-E
+M*P@-G>4`09+@G>`3@$?(1@M!)(WY"3CB8&>4#.C@P1S")T!QS(3-=C2(SR43
+ML.:"=N`B!,1)<E'JD1!/T1:(/K*38+ITF!^B+#,<!M@\93LT3)=D;!$Q[F&6
+MN(/',J%I&F!N?E1IJ^%7@=<H/<]K!3>"3JA>B^);RA4Z'>U650PD"F`>?9>5
+M,:0[21!"MUJ]>G;MM:CB&-,D'!!*K-G*.H3Y<;25!+M1G96*CFU&@-!$;F=U
+M#6;MF)X470:;"]_J,0%9!ETM<"/=10&MW$A'Z2"1.,PI06HM9I+M^YPDYVI"
+M-(W)SPDV)&!CLHIH<3))_P`DY=-/1((!^J9^_?5]4[9PUS`9._=4`TP,#;A*
+M1K./H$;O*#X9VV/=`"0\@8/)0(@@0D-3H!2V.9(F/A!L3R$!8+#$2-\;H9(S
+MJR.`E`TQ.^Z1;Z?3QA`F/(!=@\Y3$MEWOLF([;'VW0D@$1N3,!4.T@C+FYX3
+MO=#(:Z1V0.$,G8<ISH`B2>WL$`Y_J'RFT@&>QV2<3'YLM3``3!^$#$$3$)BZ
+M&C$\)-$P(.4#W9[J@G8+CO/"K/WVS\J0R#O]"FT:<@C=$!$X''*3\")`"+2!
+M_6)[[(3ZAGO"!,@1Z8)[A(F#@#(^4Y$@-#I*1WF2/:4`N/K&!/LGT`.$I.)!
+M`;N>$Y;@B9A$[",_W3$>D0#*(&"?9,V3OP@30`22#^R0`DX3_P!)DI$``.(P
+M?;*='!I^<^Z><P)^I3:8.K_91.R9:,#.4":[,B1*GHRYP)!+?E!1`#@:@+AR
+M&F%+0:21)`GVV6D:%N'&BTAKG#O*/2__`.-WW3TZ)+!,CZE/Y/N?N5>$X5+W
+M0U\`&!LXB/T5&IVP<[;<J]>Z=;HG'?95:H<6N&J`-_4LU5>J6R=(`GA`UPU3
+MSP0C<,'T_=!I,@$1/"BE-,$:@2W8B>4PC2X:=_N$B#IEP&<PA:(+N/E1"=#6
+M:MP.$HT[Y]T0$&/NF;)!Q'P531_26@#9-@.U$Q[!.#)R,PA=F,GMOM_N4#\2
+M`#/"+2W48!RDUN9F<[SNG9^4`JA3+6M+6C3LAV<=Q"*H/5#<M]\(1EIWX4!&
+M)&F(.Z9X:#N93@&,!$]K#&)PAI&V0?T@IS);,SRAW=O`E'`#9VT^Z!-C2,`#
+MW0L#6N]61S[HR"!O^9"\^H``GZH$/RR8R=DOVC"+27F2Z"A].@"<E`XV`!W[
+MI$RR!$!/R0"/=,\0W,YY0`"9'Z)G#(AWM\IR,.)&>/9(#U`SL4#M#G"29(]\
+MH2(@29/8HV-BGJ.T[IG#TG=`-,0W&?:43@Z"1J,')3.PPC^KY39`]C@^Z!P6
+MP<;^Z;MW[IS,$AWU*0F2<!`V8G`A.W$D1E.(CY2<X&)@1&R!Q,D.(QE.);C8
+M'!GA"UL9))X1G\QB806ZUG:MZ+1O67M-]>H]S7VP:060<'WD*FP;C'R1*.LW
+M)#H!&9!0-(:XG3(CN@)T$0/J!RBTC6886G_#RHX!_-()W2)@S/\`F$!O>3F(
+MDS`$(#(/'RG:9.2?<)%OTR@1W_1$"X/:0)0T\D_NB+=9@`YW0+(G5B0G/YRX
+M#XW3D:J<$NG?;W2U$$S!&^/KR@31+-0(D',82$:-I,X"=K26''Z[IP(=!=C;
+M<_Y(IQ/L9C*)C9:!)SPE,8TS/;9/2:X#L9F5=(3@X``#'"-S8.7<*32UU*)R
+M.R'2';MF,RHIG4R,$1&^=D_I`&,C*DIM+O:<H7:FNVV32&(UAA=.>4=4`50U
+MC1,3/=,,.D`X_J*>OZB=R1G]%+RL5WODZ1W&,B$X<YIP9U[R=T[V&#J.V,('
+M-B()E72K%!Q:&N:8TYG?,JQ>75>_O*EY=NFI4RX@``G[*I1IR#@>YE2-_P"8
+M""94T@2[33,`R!A/2.LZS@#9-<5'U:HF2[8'X&%)IAH:(]/92KHC(VF>X128
+M$GU>R%V'`<\II.DP"H$]TOB?5VV2<9&J3'9-!+06DB3ND`YQ)B>#[JD+5!!^
+MIRDQVH@.<1[IIC9N/W2&",`DG<H:,20^03.^2F<0(#9^4X):`Z9B2<80@<DH
+ML$YP#1!SRD#G\T=D,``:O@2?9)\AL''8]T$]Y1J4"P/+':FBH-+@<'/W4#7D
+MR282<6C`,%VW*$D-)@&)'/*0.7G43P/9#K<1,C)W'*;?;[IL#DXW5#Z\:=1S
+MW3/)U#)CL=@F$N<&EPR([H2TAK@?J@(%T8=]$Y>7-`D1*3,?F<)2):_!@>RJ
+M&&,Q@;J#S`YP=ICV5BXKTS0TM;\E5?1,D'XE('J/$Q(@\!(U(;&H#ZIBT`3]
+M0AC$%TJAR\E\"#'.R;4!L,X3`AN(XR4(C)@[J`G.)&`W`^$['2\@C(&(*9I@
+M3!/RG8UFF9W1`EV9D8V2EQ=O*8MGMVW3Y$@1/[H'UX2:X3!/W3``M^".4VSA
+MJ]0]T!DB3`QLF>['.>R;TZ@0=^4PWD@F>`$#ZL1!@29[(FN(//P90$3,@0>"
+MEIT^D9CD(B4.'((CWW4U")]IG95F07'2I:8`]6Y$*PZ:U!X=1:9C'9'J_P"K
+M]%%;,8Z@USG"2I/*I_X@IJ)Q^%>\@2,3[\*G4]3L`EQ=/*O7H&HXP.9W56A7
+M=;W(JM]4;`JU52K&DP#W`0/!TC(R.>%(]TDDF0=T!,NF?NH!.^<@X3<;P2G&
+M"#''=.W2=6K&,(&+L'`SW2&_"8DN@0!'LF9@QD#V0.#B0V9X1,:PYTY/NASP
+M"DW?)_1!)`!@SGF4U,G3S]$1!+@&`D^PDH6983G"J'):3GYW2DS\(=68(&$1
+MP=OD%%*8$9R>$[SO'9,TPX#VYY0D^QR@7],$E/3U!TZL^R8`:9RDT9,X]T03
+MR"P;GC!W34R2X8^Z1([8Y2#@#Z.$4XG9VR0<3)SE)I!$$`9V'"0/](D"5`[7
+M'5+C!'LE4<7.`WX3&/,+@/NE4@B6SODH!;D3J/.R<[S((Y2&G5D3/,I#\\EV
+M_(0+48F1":>=H/=.XX/J@H9&0#]^4#D[N)D\IB&D>K<G$#"$D$#;4B=+J(]4
+M0<!`G:M\"4AG,#'*%ID;\(VCTZ?N@8.`YCLBWR(E,6@-[IP"0`#GL$#M/JP?
+MHB+BT1CV0AL-D;!*,R1\90'J!!).3ND"-67`-Y($H<EI$0$JA:'P!I;VF4$E
+M4L:]S*1+F#\KR()'PHBWTZL0A!!/:/='Z=1AVH#F$#`RZ=S[(R=3VAVW.5&"
+M-1D[(J=33K#`(<()*`B8,`9"=A@!TG[H9D?YI.R`$$K"?*F/9)KA,P$$^C3/
+M.#E$T`28P,*@Z>\3G[),P@88$"3^RD8)]_K*`F#\HTJ:@TEQ#),]LRE86]6X
+MJM928YQ=@87J/X=?A_YY9<WU.2=@6[)&<L_5Q'2^@WE[6:VC;N(//^PNQM/P
+MZJFS];8=`V^5[!TGPO:VM`-IT6-@1`"U&=+9Y<:`I<Y.G*Y99/G6^\$7MLXM
+M;2+O=/TWP'U"X`=4HD-'?NOHJGT&E4?E@*OV_0*#:8_EA3WA[9/F^\\`WS&%
+MS:9)VC"I6O@7JE1QFB6^T[+ZAJ]!HZ/RC[*J[H%!ACRQE/>+,LX\!L_PUJNM
+M]=1V>T#O\KG_`!7X3J=(`<8=G;_9]U]']4MF6EN8;@+R[Q9:U>J=<IT?+AC3
+M^8+/OOX8V[WMYYT_PU=W-EY[:1B"29QNL.^M7VU=S'M(B0%](])Z)2I=)#?+
+M`;IB(7E/XM]&IVMX:E,0#N`KN6-8YW;SZBW2#G!*,["#./LB<'#,R)Y4=36U
+MP(R#NHZA<[47$G/)2],2TP(2(Q+DS<M```[*J>F?3VSLDT""9,'L4+02=.T=
+MDX.D$9^2@:63J:=^)3/#0,'/'LF<(,`3'ND[6!$R`-]T41_(,XA,T`MXP/[I
+M9&(!`0C83"H<Y$'Z)$-!`)GVG`2>.8$'CLE3INU"/LIMJ8VG:W40,8F$VG!/
+M;:5.VVJ.W!RI_P"#TB"TR>W98]X[3]/E5(0[D8'"8@-(@Y[=LJ^RS#:8)$_!
+MW41LW;_V5F<,OTV<4F:-0SGLB>9=C,;'LC?;5&Y:PP.0=_=1.I.#B-,'?LM2
+MQQN&4-Z`T$S*CJN)>&C')37))=C!43B0)'9:C(G!L8@@\(2T`P<1W3-,Y<,>
+MQ2<Z`<[X506ML@$`0/H@IMR`?V0@SG(5[I5A5O*=>HQ]%C:-,N.MX;/L)W*@
+MID8D&$.!DC/:4[QB3./="#O\;2G_`%#@1.?OA$T&1/*!L3`XW`*<R&X_?"*$
+M@D$=_NEB),]DP(U29B$1AS2[,#W1#``D@\)VC&`@!DD*6UKU+>X;6HF',Y(!
+M_0_*&T9;G&VR+&C^W=-J).)!/9-+L$\]R@?2"Z&R`=I2:1ORFGN8^B=OYL">
+M4!TIF6_*E:,R-Q^JB;F"7P/A2TR"<2"#NK$:-!O\H8_4H]/M^I0VU1IH-+G-
+MGW"/73_QM^RNS:.[@SJ='SF51KENJ`(^JNWS0'&#,?,*C5B-QV2FD3C!P/NA
+M<0'3(1.D849(Y60GYV"8@!^EY"9GYM]CLGJM(JG5AWNBFEL@!(#.0CI/%-^L
+ML94'(=,(6[B-CW0(!NN#D)-_-$8&Z;!?,?5$&P/<Y]D06H:P`Z('=(G,QN4)
+M(VREZ1!C94.8)G^Z(!I.K5D[H6@'(3@%K0`,*!G$:O44B!$SONAJ`.=$A(M:
+MP01QO*H(8R4XTQM/U3AK74\[\A,2'1/`C`"&BALR"1&92(R8_P`D/]$$_HG:
+MV&]OE`4;;DI1G?U!"<`:1$_5,P'.,J`OZN\)$M+3DI?TEO$]T,$[H";$3.X3
+MC?<;(3\Q]4MAC[RJ=$6P2-0W^Z%PTG<=MD3@0W>.Y*`[$%Q^94-$./5&=TY]
+M6"YL<Y2HZ)/F:M,?TF,IFQH@$S\IM3@\DY'9&V`)P2HHQV/>43>8)RB#P7',
+M`I,,`_XB<&4V(@G*$>DY!)E!(UKC@[)SO&J!W(0M#B<S":3QF-I5!-:[:-^R
+M8[P8,)A)G@A(MG<[<HIW-!P0DT;`1!00`1,_*-HDF'8^Z&R>,Z0-]Y3M;!$P
+MA=(P(3`N/930D='E9F>R3!Z)(0N)P)Y1ET",#LJ'@AHC:.Z=F6\Y]T+"Z2.%
+M)1:[2=O9$%3:&-V$GDJS86M6XJMI,:7.<<>ZKTR3Z0)/<3*]#_"+PU4O+IMW
+M49+`9`(/^2,Y9>LVZW\*_`=O2M67-S3#ZKA.1M^B]8Z+T^G;L#13`^%'X7Z>
+M*5!C-,8[+H*-L)S"YY9;<9-\T-.V!`X/LK5&U!&6Y5FVH>D<*W3I:6KFZ2*=
+MO;!KXC!5YM$%L$;?JCI4I,E6649XW4VU%-U$`:0%!7MQH/9:IH]A@J&K2$?L
+MAIS'4^GBLTC.?9<S6\/4OXT/#?RG>%Z+7MY9$96==V6=7]E=LW%S->W%.V@!
+M>7?BY8&O:/>`1&Y"]BZE2#&$'8;KS+\5*M)G3*PQLI+I9'@]]3%.I$[<*M5'
+MI;DS[*U?5'/JN(V!RJ[W=FQV7:.J"7:I:<)Y,1@E.3#C.4.2=DL4XYVQ@X2@
+M%N9)]MD+I`PW"0=N8,G$(0Q(B-N\),#G#TR>PWE6;*SK5ZA#*9"V^G]'#-+J
+MH),<KGY/+CCV]?Z?]'GYNIPPJ5K7J$0U7*72:P$.<#';9=*VVI,8T-:,(W4Q
+M@:<+RY?J;>GU?'_Y>,_LYUG23H]69[*Q;],8QTP#P!V6Z*=,4<MR=D+:3=1V
+M6+YK7JP_1>/'J,T68G#1",6L[;K1TM),`)F@%T8F%CWKK^S)\9K[2&@C'OW0
+M&W@"1[[\K7T^DN@`*&JP.PWZ*S-,O#BQZMOI=(;+NTJI6L0]Q!$'B.5N5:32
+M)(4%1AG`77'-YL_T\O<<]<=-)+LQ*IUNG5&9'J75>6W4<`_51.H!P@M77'S7
+MZ\?D_0XWF.3-N]H/I46DY#1F5TEQ;,)TN;LJ-S:-)D-A=\?)*\/D_27'IC:3
+MO@\PCHO<UXTG'(G=6*UK!D;J$L+"?3D"#(727;RW"X]ANG:ZAT1!V#0H7ZHS
+MN.4;AR1`[$IMR&@B!WX59,R0(B$JC3H!@P=O=$X`#?[%,2"`V8[1B%$T$;&.
+M$+7$"!,?LI'L+'%A,GF#,H'QJW0#,&`#)1&"/3(^J=I9`,F1M"$`$R#E`[3!
+M@B2@$]RI-W9D]T,2^3A`GOU&3GW2:[)U`3\)/P9DIZ?Y/S$]C.R`Z8!$@?JI
+MZ,3"B:`UL$`2I*>F>%J(T:+Z8I`&E/\`^)%YE/\`^'_^=/1T>4/[(_0FDVCN
+MR&/CN=E1KM+GX`#5=O<./:?LJ=?6`!CVREYK2*N"&Y:-/=0`1O!5BYK&I3:S
+M2T>6W3@;_*KDSF!\+*[`\`"<]R$CDYA.7&#(&4P=),`(A^Y`S^Z1)!G0/A,=
+M]Q\)&#C5&$#P#Z2V9X",`!LM)'_2=T#7%K@1N<R41<XF9SQ*!C.F(,_"<-);
+M._(2#AF1/]DYB=A@<(A-(TSRD6D`&##ML)R=+<_IRDYSB!,EHVRJI.#1I.#(
+MRFCU2X9X[)$MU#&W"=S@1!;[94`2)&"B;@Q&1R2CMWTZ-4.=3#\'!)$'O]$S
+MSK)+B23V0`1F0#_FB:8;MGB4TM!RG=AOI=/?*H9QSDDG=,/4,XSR44EID8CN
+MFJ/UO+XR=XP$#[@;F#'T0N#0?E.UPTG)U<)G$8).5.@PTQ/Z)R<8.#PFF`3*
+M?TDS.$#/`QZOHA/IR8^Z,D1!^Z9SN`90"T[%I_5(CG4$<&20<\?"0'HG(A`!
+MCO/N$1+9].P3-!,G)^B,$;($((D&<;%-I([81,AN9G.R<]S'N@'$#)2:6@GD
+M)CM&"=Y2TS)]\%-!.:0V3LG;H(]3@R!RF</1._&H)R&@X/V"`>#,2B;!SB`/
+MNF8-6J8QF$YTGL([H%)B"A8)SC")FF9)D>R1&"-`^Z!FZ2!,(V#!C9`S)C`"
+MDIZ<D!`J>)&H`*:@T:B'\;94+&@G8#WV5FDT;8'U07NAV#[J]ITJ8U&HZ.Z^
+MCOPPZ"VRZ328&@$-$XB5X_\`@OTT777FU32U"G]>R^DO#EJVG;LP-EC*Z<L^
+M;IJ]+M]+0TC;W6@RB0Z>!W0VS0T",?"O-8'-Y*YTD*W;F8PK0IEPD;)K.E(R
+MKK&%K0UH$$9*EK2O18(^%<HTY;@<(64X*LTQZ/[J-:1!DQ*"I1!G4"K(:/CV
+M3$`^R&F?5I`">W"IW5'!ANZUJS`!)^%4N*;2,$PAIRW7*.JF6E>7?B%TFI>T
+MJE!LC5B3E>S=3H-=3,#9>=>-*#VO<ZEN#V4MXX23EXZS\-R\ZGW&_LJ/B?P$
+M+&U%6WJ%[HV*ZSJMWX@H5GOI4'>4WDA8W4^MUG4]%VUTQDA<9Y?)/CO/'OJO
+M-Z]I5H.TU&$9@X4-1@$P?ONO0NFVEEUB62))W6%XR\+W/3'&K2!=3<=X.%Z,
+M?-+=4]+O3EG#T0>5+:TV.J,&K$[!.:,#U'`XA36+:0K!I#H_ISRM7+AZ,/!K
+M*>SI^AVM(46QDE:1MVZ9)CYV6?TJHUE-K08+1F<J[4NB[!(@]E\O/?L_5^&8
+MS"2#K:1#0&^G$@;J!\<?HC+@3OOOVA`/S;Q!VE9D=./@BW@N.`AT@$S@QW1S
+MQJ0%PU$`[JZ2TU(@$SOV3XU;X0GY3L.8_NK(S:(&<$X0`28F?JCI^IV`#/NI
+M&-(,N(CNAPKU&X.3*K/;+B3^ZON#"X2H:M,3(:?E:QK&6*F*8`)X*%U,:O2,
+MJT6:A(S\H"P`8'ZK<KE<5%],&2,=U!6IM..ZT7MEN,2H33!DQ,+4R<<O&RJE
+ML)G2/B54NK=K3J#9G"V31+@8;!*KU:+7&'M,QN,+MCF\OD_3RL"M99]+8',E
+M4Z]%S,1)/*Z!U,ZC#3'=05*#"TRPN]EVGD>#R?I9\8);D$@X]DM.T_<K3JVK
+M"8S`56M;N!,"0NLRV\>?BN*N0-+3DGDJ,@&9;]U+5:1(((`P(49;%,N&\K3E
+MK0?2#@(FMD3^Q0AI,G^Z)K=HDQP@0`/TX2.()!`*6-X..4BW$Y^VR`<$R?OE
+M'#=>MS0?;9#_`%R<_=2>HC),#[HA4V@O`!&3B2K+:3J54L?^8;P0?V5=@+7X
+M&_<*9H((F9[+2::-$GRADHI/<IJ!FBTYVY1K)PCO8#03$DP1'"IO+7#3'&X*
+MNWAET-[[]U1J@9S@SRK5TKN.#&^V2FU`,DP>$50P)(!08#)].4`!P:9W2,'(
+M@?"1;!QM"1T[&8X4"F>('LD73N,\)$2<"$@UL[[=@AH[@W!&4\@`2AF,-$=D
+M0((/I*!1/'PGJ`#&_NAV`(^ONB@3,Q`RD*6F(S[%,(C!V1`@$1&4(.8T[?J@
+M)P&#P3PDZ"9@;X3$0X#(3;-R1WA`W<GOM"DHEC6G6P/!$"9$'OA"=)<3D3RD
+M6>G5M&=^(0(PYT`&#R2F`@S(ENV)3P,D&1$(20?2#))A`[LM.WP.4M+3`#ON
+MD/T30"[&)0.1,YVRFB&#YP$@")$_F2C3SE#1')P/CLG@;;)FQL#LG9&,F!C?
+M=`G&#!,@]D,>WU3Z(&K,3"8?E(!S*!P($Y^=TX`(._<Y0G4($F-\I`$`'7(]
+MR@=N''2GTX!.24IWGD=TL:B03E`^F'1V]TSH+AJP.4A&K#DQ'O\`=`FALP#C
+MNC/I(@QVA1P6SZH@I\H$<@R[Z]TV8+2222D8!B/HGAH;((<>QP`@;40R`1ZA
+MF0EN`(R,$IB"!NB:-I/&R!B"#N91-P"<D)1!C]$,'43DRBK8J6W_``KRO()N
+M/,U"J''#8_+'SR@#G"WT;MU3]5".YW^45/5,;3V4T@F`AVX([>ZN6=)U6JUC
+M#)<8WA4QJ#N-UT/@6W;5Z_:-J:2USQ/;<*I7M7X)>'/X/IE*K48-=4!Q/.P]
+ME[#TVDQE!HD;!<GX2ITZ-A2T@"`/V746=4'2&F5QSRY<<8U:#"2(,1NM&UI2
+M`9,'=4^FM$!QC9:UM3!`@X66XEITVC:?96*;?Y1)Q'"&G3B".%(3(`;V4K41
+M'+H!*FHR8$Y]T-.D7.!*LTF!A$Y[*:5&01$HFM&G5^ZE=3!$\)FLTM@YE%0U
+M&F/95+FG(GLK]8D^F8,*A>`G`A+1F7X]!,?*Y?JMHRO6ES!`.5T=_4+9!&.Z
+MQ+BH"7$B(&%C*FF/UNWL'VIM/+:`X:0LNX_":UZ_T\MH-(J.&".Z@N:[W^)M
+M)R`?[KU#\,NMT+6[;0K.&1&5Y/W+A=UWF&^GR?XZ\+=;_#SQ2VUNVO;2<[4U
+MYF")_P!%V'2[=OB7PT0&@E[(F)S"]6_\9%C8=:\(_P`51:UU>V]0<W>,KRK\
+M`:NJU?:U#,9S\#"WGG,M91N;T\?\7]/N.D=<K65=NG0XP8W$[K*MWO-0.&8]
+MEZG_`.(GI/\`_<MO6IL'\RG!('N5QW3^FM92:"UTC,%>F>7&8O3X?#Y//=AZ
+M?4K-HB08]E>I:B(_0\*:VM<#TG'SA7&VA#@"V9]EY,LY:^]XO'<<=519J),Y
+M/"-I>(EH6M;]-J.:!Y#B79P%J],\*W-=H?HT@;:@LSGIK/R8X3=KE1KW@Y2#
+M:T?E.>5WMGX.`<#6=,C(6W;>%K%E-H-%KL025VQ\-KP^7_T?'A>.7DP9<$C0
+MUP=QA6Z'2NHU73Y+W%QDSRO6*/ARRI^H4F`]EHVUE;,9'EB`NV/@GVO'Y/\`
+MUO\`\QY78^&.IU&RYND^ZL,\)W^DAQ:#[+U&E;T22)$=D?ETI(C$+7[.#SW_
+M`-3S?'EG_E&]TE^H'YW0N\)7;F>H@$GY7J-S3IM&1QM*K-8P.VW[J_LX)_\`
+M4\SR^X\*7S#Z:<@'$*"MX:OV"32,[X7K;J3'#\L(76M$M]7V3]C%9_ZOE^O%
+M;SI=W1,&@<;JE5H.#9#")]E[7==.MZH(-,&5F77A^S>Z/*;]E+X)\KMC_P"K
+M_P#J/'GM(RX`905*(\LN*]4OO"-BYN*<$]ES_6/"#X)MS_\`A_V%F^'+X[X_
+M^CXLN+PX"XI2,CN5"6MC@SA=+?\`AJ^I./\`+)![2L6YLJM#4'TG-+=Y!_R4
+M]<HZ_N89\RLNK3(<9`(G_94+V!S",Z09VW5RX$R"9C8*.F*8.W$K<KAGC*SZ
+MELTTY,0J-Q0(>0&Q[+<K,!(`[[J"K2!F``%N9O-Y/!*PJP+7Z2/RA,UWM"TK
+MRW#Q``(6?6IAE2(D3DE=L<MO%Y/'<48@R<X1;'<QR$5%K#J#Z@;,^J#PA<`#
+M`(`[K3D$:2,?:=U+2<`-R%&#)U'/8(@&F26^V#$%5!-<"[.2IJ)$ZR"H`&AH
+M..>5-0@$`^^%4:M`32:0#$(M+O\`"5!39%,>MR+1_P!;E4W"OC,@M.,22>ZI
+M5#L#B`K=WO+HDA4J@:79'ZK-:1O.O/W05`2X"!`'Z(X(,EP@CNHWY(P84.@N
+M@'WW3$F(Y3R0[OREJ:701`Y0"Z0\&1!Q*41#6QMV3.,NW.F4@<9&=D#_`&WV
+M*D86B3@8Q$84<B(V")D;DY0*,X_[(GY=)B-I":9($#Z;)YR1O"(?!`@2`>Z9
+MPTD2/LG!YS&WPD\!I<6@ELX*<*%HB=]L>Z?!+2XR(C'"9I/`YW31!COE`1]+
+M8WD\X2<"1Q`.R$EI@`00<E.8\LG(C]4"<T2#L/;)A*)',SOLF)$B),^R0(B?
+MR^R!#`F3V3.$.)S]4Y,C`3#!GWD\H''S@#;NG<6N@1D[(2<D@C=,XP`<24"A
+MP+FDG)@A24VDX+@,')/*!I!;O]43G"=P@3XDC;/="V2T2!ON4Y$@"4P,-Y^?
+M9`S7=C(2+A,$[8,I2#J[>Q31Z<9`]T$A@S,8&$FY(`CZ(0!(V$[3.?A%)C?<
+M(O18#?HG`+6->Z(?C[(=Q^B=Q,MD^PE$,[5P<#DIH)GDI5!#N/@)-'K$.F$!
+M.;I9)<"(G!W48G5O$G8HW3DNV03!11D-T$`@&$@[88QN"DT"&S@E*/1C;LH@
+M00\P=OA&=R!C.)0T\&(W3D'5![JZ#N/!,(V.B21GN$+0TF"G.V=D!TX)U#E;
+MGA&N+?KEO6C#'`[_``L*1O'T6ATUPIUF/R8,YPI87E]0>$KYMQTN@YCL.`./
+M@+LNBTW5-,X$;]UY5^"5S5O^ET0=F`"3/LO9NA6^BFS&?V7&SEQC7Z;2AH)X
+M[+5M@T&.V%2M6P,<]U;HNR,@?59;BU(:TYGZI4A+O;E1.S$!3VPVD*?6DU)H
+M&)4C&2-X2:T1Q,(I:,3[?"H<#2()F#RF(G`10#A,[TLD&(10.I>C5&V.RH7[
+MM+'9V"MW-7T?FC'?=9=\^=0=RH.8\27[:3RW(E4NG!UY(:/S<!0>--+:X(=R
+MH/#W6:-D]_G/`U#!*\N>?K77'';,\16'\'U`U?ZAF"LZTZQ4M[X.UF0Y:/C?
+MK-"ZJZZ+A`9!(^JXVR+ZO4`."9)7&WV:ZKM?%]Z>I^&JE*H20ZGM]%P'X:6M
+M>RZQ7-++02/U"[#J=84^D>6#)+8CZ*CX2LC1I5*C6$N>2DWKUC4NG+?B]KO.
+MJT61EC>WN5@]'Z#>73FZ:+HVD@KTR[\/_P`=U'^)JTR2T1!"UK#HK+>D`RFU
+MH[0N^'AM_L]W_P!#'PX3'"<N(Z1X.>S2^X/P`%NT/"UK3A[J;3\C_1=2VTEA
+M):.P3_P[BT""N^/AQG.GES_]'RY_63;]%MFL;I8W`X"M4[)M.G#6A:5M;9DE
+M7&6[-.6B1NNDQD>7+S99=USKK5_F3"E%M4$`K;-!NK`1?PX+IC;E:<K:QJMF
+MXM,#)0T;,S&X*WFVX.XD0B-NP"=@K-);6&VR.HN.(X4IL<2(@96KY0+@0%.R
+MCZ0`?HJCGZE@7G/"B_@M.=,KI'T1,!JBJV[7$@A6)ISC[>IO^BCKVSRXZ9A=
+M#Y!DB(X0U;<#>)A!S+J%5C9(.$#608(GE=)5M6.'TX5.I9-+L(;8E1C2[2!^
+MJ@N*`$P-^ZV+NPT9`YW55]!PG5'=-&V'5M&5'9:(&=EG]5Z!95J;@ZBP`C<!
+M=$ZFW7@?9!68'$`-SLKTLRL>:]:\#TGS4HXGC_87-=7\)7EHPN:USF^R]IK6
+M\#+1GV52O9TJK-+F@@[@J62]QVQ_4YX_7@%6UK47N\QKA'>5#7T"F8&W=>S=
+M?\,6EXPN--K701@;K@O$_@^ZM];Z#"?CLLWP[YCUX?K9>*XQ_J!=V&RJWE(.
+M;@;[+4NK*O;^FJTMA4[ILM(VCCNL3<KKGK/';*:`TGV3M<`UX+=3G#!).$SP
+M?,Q(0O'^&?HN[YUT%FG6(!$^Z,;0),(8(@9]RB.#Z096D$&QG)_93T`T/@F(
+M&R@!AAD%2TCD>J!SA-)PTZ6D4P"[CN44L_Q_J5%3<\,`#G$!/KJ=W*^IN%>;
+M%Q<X=O=4ZK6A\R3"MWC1F-]U2JD`ZHRLUI&2!(^JC<8GG^Z-T:/?Y0R`T&#*
+M:0!+3S!CE,=,X,]T[FGG,IN<?6"H!D0`""C$%\'O!S"9TMXWY*$9@@GZ(IW`
+M`;_*3?I'$)-TDAIU1.1,)V!@>700R<2J@VMP,GV[)%PWD`QLE(V$I.;F"443
+M1C3(E#4WXSPGW.!OB4+L`0B':1_LIY'F#\H'OE`W?:/=.!P<\H=E4TS$G*6)
+MTB3!W)0U`9B1&Z<!LS(C_"$#X$C8>R3_`$`01!V*$@%WM[2A($3!440+8DP>
+M_P`)-]7'LFW$@@$<).:X$#(,3"(<Q`,)C@R3LD1D28"9X$;P@0@-C5&K>$3=
+MI]D.B&CU;IZ8/.?9%.W2'1$F.4Y'9XD\H""`08![RA`)[0/=!+H`HZB]KB3^
+M4`RFQIB!\%#"<?E`+C/(*0.T3`+H]Y1:<8.$&[MOH"GWF(&(D(:2`L-/3$.D
+MYE"3G(VRG8)S*C=^;V"`B`8[\IM()X)2.`3,?W3%I:[5)&-R@,8;G890.:"[
+M`]TXUQC>3E-SEKI*`FQHQCB>R>(&#N4)V`[CE.X>GCY"!VCU2,]D[@#.\I@)
+M`EQ(`[IVF!/*(36_U"!",@:-6!/"C:7-.F)&$[LY&P/*`P&^V=RM"P8YSF@3
+M/8+.8'<NTQ^JT.CG_P!2UI."X82CZ5_`*Q90Z!0)`EPF3]%Z]8M](`_1>7_@
+MY58WHMLT<,'[!>G=/K#2#.ZY95QQC2HXW^ZN4F8&RIT'<\*U3<(X6'18IM$[
+M^RLT0`/T56F9((^JMTHP9V14S8#"XCZ*"I5/F1SW4I&(!4+J<&82K$U"H8,G
+M,IJK_>4-,:<G)2JQ'*""Y<2/U5&\`@DX/"N5G2=\CLJ%T0>0%#3A_'#'AP<)
+MB<X7"=>N"2&,)'<SLO5O$5@RO0=.>5YSXDZ.ZD7/:V2"N.?B]NFL<],FI;U/
+MX)I+IGNJ@K,MGR-QE3BI</\`Y.DG^RT_#_ANO>W#7U&G3,Y7*>'*_&O:`Z1;
+M7?5*S1I(9O\`*[OH_2&6UJT:1,=E>Z#T2C96[0&B5IOIZ6B&X7HP\4Q8N5K/
+M99TV@@`;3LH*U%C7:8"TVTGF1D(769).)*ZQBLKR#'ID\J7R/3^671@+4IV9
+MQNK%*P<2"6R5H8M&T=@Z4?\`#/#IC!X"Z&GT\\L'LI!T\NC"I(YW^#($[J6C
+M;3(^JZ.GTX!OY0C;TYK0(:$-.=_@L;;H76T#9=2;`%L`2H*G3`'9"&G/?PX:
+MV0W"C-/3,#]UT3NG']5!4Z:X@]BJ:8+J<_EYW1A@B#QPM&K8.!(TE!_!G)VQ
+ME$9KZ0&PW0NH-+<P!W5^I0]6)P@J48;M'LJC/K46Z?3RJOD>K:%JBF9(C=15
+MJ0DGE!F/HASH.QY*AK6D[#9:3:<.)_=1U</CCE$8%?I_J=$2JS[)[28;(!70
+MUJ37"0`JU1C6B9E7;.F!<4R`0YIVV*HUJ#@[6`8[!=%<V[*GJPJEQ;`43!QV
+M*2&W.UVDN`@]U5N*`J>E[9"V:E"23'W52K3@D!NRHX[Q'X9MKT.+&!K_`&Y7
+MGWB?PO<V)<X,);G9>TU6%C28A9E[:T;MQ:^#\J\7MO#RY8=/G6_MWTZQU@@[
+M0JO'8KU[QQX.I50^M;MAR\RZSTRXL:[A49!G'LM7'4W&YY)E6<W!B)([A/,N
+MV&G9/4`D3QOW2C.28696M'@@',X[*6W!U`#G*!L!HQ[94M`-<2X"(*J::--\
+M4P"V?<!%K'^`_8(:#:?E-U.@QME'II?X_P!U/:&J"Y]+BT&`<$0J56)G<<1*
+MMW3?ZI$\A57B=GP)R>RM`U6T&V;'MJEU5SB',TX`[RH!^;=$\^K!!08=.8(X
+M[J!-;_U2.R$M<)D0>Z=I@YPED`D.SW)0"]I(DB?JK+`*-E4(>TOK```;CNJY
+M+B28VY3.RV!QPH&#3&J/U2`C,'X28<29^Z?7F0<'NJ#IR':Q,QC.R%P).`#/
+M,H28.TH@2'9.-E#9Z>VYE)XW!;/:$MAV0ZR3/?94/Q[)#3W^H0Y<#`VWA,"#
+M+H(*`G279PEI,;[YQE,2!DRBD:9S\!`+MH/Z(28<"6Z@/U1-TCN/=-5<=69A
+M-*$'?LB)<,SN(3.(@P)0D@`X/RH"DY,<)'CW*8G,?=(.,Q&P0.)C3LG)(,-.
+M=Y".JRFV@VHVL'$[MY"BU:=\]E=!W%SO<C<I,&#,^T'E,'N:)82)WSNGU8D?
+MHH&,9$9E,Z!RG+R#IS'N83AP@;#W"!-D-Y^919T%QVVSRF!&Z(N;Y<;'5R@$
+M$`R/T1``N,3!V3M>TM(."$@0?A`+H!@S\H2'''[HR3IC!^0F(@F?M*H;3F2Z
+M`4OS2(!]TX(CB1PD`.,=RH%`$22DV(Y/LE@G/T3C3&((F,HAVB"1]$M#MHG2
+M<PFV(`'W3@D2/\7NBGDHBXEA:W8J-Q),$B>(1@P,X]Y0)N/G96^G/+:@)G&%
+M4P3),@^ZFH%K8,Q"#Z&_!#K!J=.I4M660-U[3T>L'4FS\[KYE_`GJM*C>>2Y
+MP&H[DKZ&Z-=--%I:<'LN.3EU77V]00.)X4VO.)PLBQN6N$3^JTK7U#<P?=9L
+M:B_;N)*NT2-,;*C1@*Y2(,2BI2Z,)4W3(*9S03C*8PTS$2BI'1&^.ZBK/$0A
+M?&C_`#4);//V2@*ASA0NIR=1W5P4H;LF%'!(4T,R\I![(E<]U?IU.H3S*ZNZ
+M8!L#*RZU#SGD?LJECDK+P_1_BB[2")76=*Z73HT!I8!"NVG3PUH<0M&WM]+`
+M%I-*3+8Z1B$S[<G@+5\K`'9*I18UA)5TK,%J`)`"E9:@P3"FJUJ5-N7"/E9_
+M4.M6U!I'F-GY6+G(U,;6C3HTPV3IPG#Z+($@#W7*7OBBBUITU6_=8=YXO9KT
+MBKGB2N67GDZ=,?%:]&JWM%HPYJB'4:6K\X`7F%UXO#&F:F!S*JT?&]`U-)JM
+M!^5SOGKI/"]=;U&F'?F&R1ZBT\[+SFS\34*K`?-!GW5ZVZY3?4TBJ%)Y:U^U
+M'=4^IM$Y4M._:\#(*Y&A>^9EKMU8%RYH_,M3R5+XXZS^)I.;^Z<5J+O3@2N7
+MI7;MR25)_%/U#2\_"W/-6?VG2>73?S]$#K)AF`/HL2EU"HSG;E6:/5SR2MSS
+M?EB^);K=/;I,#/95:UA(,"`K5/J5-[<D%6:=U1>W,`+I/)*YWQU@/LBV7053
+MN:'(;E=:ZE1>"1"K5NGTG">%N65BXZ<DZWAIE5JM$3!P%TUS8$$@`1*HU;`@
+MDQNJS8Q:E!@;@'OV5"XI>HY,!;=:W<#$3"JU[:0=059L8D!KLY"CN*;7D#A:
+M56VD$8^57\HM.1*(RZ]!H!`;"H5:$/)B%NW%$ETZ57N:`TR1*K+G[ND"TF-E
+MEUK5S27[+JW6[<N(A4KVW#@0UL2J.9K4V/I$/R2N4\6^%;?J+7/@:O;_`+KO
+M+BV:#D2JE:BSZ+4RLZ37U\\>).B5;"Z>W3(G!A8P8`2"(CB%[_XEZ%:7])S0
+MP!W=>7>,?"E6SJN?2G3RKZR\QVQ\F^*Y-K00!.VZFI?F&<IKBD*3S3$R.4=$
+MC!,++HOT0/*$X/RBTCO^J:B!Y0D@(]+?\014%T&C())[*I4(U06P1A7K@`O,
+MP>-U4>X$1@-X'*"#3/J@X0.QQ,J4O@$MVV(0.#0!ZM]S*B(R!$@E"8(C@*1[
+MB7N>3E,6^D.<TP=O=!&WW._NGJ=VDM`2[XF$CF)CX4-!!C`._='2@RV(Q,RF
+M=$3&W"9F&QGZ\*FC@$?U$GV2<8Q()*4AVY2T@$,@^Y0-)!S'NDT-G'.R*8<9
+M2&F`#@\J&@M`,F4QPX@[*2&[@?5,6^@F!.T*P1N.<9E$T`,F8C=#IAW^PC:&
+MQ`P.5%)@`IZI;OM.4!GC3D=D6`US8,[C*3P'8;P%0VG`C'LF+27]D36X#G3G
+MDIBX!T@@>Z`8&"4T0=_UW1%H.9)!0N@$_M*@:8WRGUY@?J4MX'*3&M[Q_=#1
+M$G3,QW1%Q&<Q\I@T;;$^Z3`Z8,GX0T3A@8X[ICW('Q*DTAV=1S[IJC0(TN(^
+MJIH(/$@)'8NW]TX``R0$HD&<B>ZAHFX.-N?=.TY'LD1O'";\L'<E4&(.Z;)D
+M$(1)!S]TH.H;GW"&CD`9V1..8'VWE,&EQWCY38D0=T!8+0`(*:/3L8Y1.:9R
+M1MRF`@YGW(4".!L430]L5`"T;C";?Y&Z1F2V20$31.C5(3.,-`2`=&^Z3PW2
+M,S[*KHPTC(A24JFDZH!`X,J(F#QA.-LF1[%#3;\+=2J=.ZC2K4GQ!V[+Z2_#
+MOQ'1O>ETWBL"Z,B>?NOE<&#.K]5U7@OQ;>='J-#3%/V)/]USSQ^Q+CM]8]+Z
+MB-7YC]UU/2:XJ-!#XYW7A7@?QG;=0H-+ZH;4Y;,2?NO1/#O7FD@&JT_!7&\,
+MZL[>E47M#<E6:-1O*Y.AUIAAKB!*T;?J+7'+@1\J;5T+7MYA!7JR-A[K/H7`
+M<?S?53ZQO*JI6^KW"GI4S@`_HH6.;N/NIJ=3L1CE6"4-#1.?A,UYIG5@SB"$
+M+W@'?=0U:K3/L@JW>7$CE*RMM3M1PC#=1WGV5RR8`?=6(L4[66`A05'LIDR1
+MA6ZUS3I4"=0PN"\:^(_X?4VD<[83+.2+CCMTU[U:WH-)-1N/=<OXB\;VU&D6
+M4WR1OE>:]>\0]3JEVESH/RL!]:[N'ES]><%>3/RVN^/CCM.K>.JKI#7&/E<C
+MU[Q;?.)<"\@^_P#JH6]+KOD^HS&\JQ0Z`^JPAU,GY"QWVZS4857Q5?UC'K`F
+M)@PJUQU#J3G"H*CBWVE;=;PHYM:(.G?'?[+8Z5T6EH%-S,C@C">L=/:3IA])
+M=7O:!;5)SC.ZSO$/2KRE4-6DXP.R[K_@[:%0.:W3_97*G2V5Z&DM!/=)-,^U
+MEW'GO1+R^H/%-Y,#NM^EU&XIM\S45?J=":VM(;'O""KTPAT:#'"Q8U[;;'AS
+MKS]3653@>ZZZROJ==DM(7GM&P?3:'#$+6Z76K4:@:7'"2V+K;M#5WAREIO?/
+ML%C65Q,:C'NM>@6%HV^JU*FA.JNU0)1M>X['9`Z"TY^B!WY/VRM,Z6F5W-Q)
+M@X4S+EXR'&5EE\#>5(VIZ<.A39ILTNIU6`2?U5ZWZN',+7+FJ;R2<IV/(Q*W
+M,[&,L)75"]HU!N/?*E#:-5F'#X7)&X<UI+7J2VZI4IF!4)"ZX^9ROA=#=6-/
+MR]0`^RS;FQS$?9%;=8U,`<<*V+RG5;!+9]UWQ\LKCEX[&#7LBT&`9E4;FV>!
+M,976NI4ZC<*C=V6#NNDRCE<7*.:0XR,J"Y@;-"W[BQ.LDM69=6NX`"TSID5Y
+MF(4+V@L@MB5JOM"&203"IU:0!C9&6'?48.V%0N;.6X"WZX(&P@\JG6AWHB6K
+M6T<M<T"'D`'[RLKJW3_XBD]I8#/LNON[7/RJ-S2TMTZ?N%>D[>&>-^@5:-R:
+ME*GCF%RX9I?!!@<+WCQ'TUMQ:U&.`)(PO)O%/1JEE<NFG@[0MV;YCKX\_E5*
+M#6FDTZ@/NBTM_P`8_5-0I12`!'V1^6>X^RY:CLJ.KUJ;*U*G5=396:&5`#AP
+MD'/V_14GP#`D_P":M7@;JF/]54J#B=\[JT`2UI`G_)';5*#!4%>FY^K8M,05
+M&R`PB.VR$.]4Q*E@,TF/>UM$N<7;`[J*."XHW!NJ0"UO!E"8(`.4`#Y^DIL"
+M)._;*.(.ES3(.W9,6MWDQ\H:"[V)'PD08TS(Y3@`S&!W"1`+<X*0"R2[)/NB
+MDAPW3M#=^R48VGX0`?9R=X#<@G/&Z=S00(&)A._3P#@(!#3IDN$?*>2)D[;)
+M@V#G>82!D<_912!@Y.`G=$C.`F($@$004[P)W]T`@2[*=QQ)^GRGB`29^(W3
+M:0002<?1`Q@QI^D).!F>/V3F0()(0N_,1G/'=`+B8B1',)LGW[)W?_<?IV2F
+M'#)309H=].R=I=M.#E.=.G=Q[(0V02#LBGU.+B<92$@?(W2S`D1"8S.#QL$!
+ML+IQWV3DQ$'9"P@-S)^41`P=39.,<(@9DR7#.8E2-UAD84;0-S@#V3M,#)D`
+MH#+O2&D9]E&XSB-S]D;3#?S2#&$X8"T\CN@`.],N'W3M_/+A',IRTR`8&R8,
+MW`+23PKHV>'9CG.R$.,SCX"-K8P3OCE!'IG[[J`B1(C8[2G$EI`'ND9D;93&
+M9S$H'GU&!`A,XNS`PC:"3$A`X<M."J!U9^46LZHC9!._^:(&<#/N5)`+7'5L
+M"3NC)`@X^J%\AP(B-L=D37<P,"/9-`B_@@83^81$8/*9NH@_?=-,CO[`HK3Z
+M9U2ZLG--*L\'V)7;>#/Q%NK2X:+EY<WN2??W7F[2Z03@GA2,G@F#NLW"9=KM
+M],=#\?6%^&!MP&NC8F%V?1>LFI3:X5<?*^0+2]JT'!U.J]KA/*[3PQ^)'4.G
+MT/*J.+QP7%<KX[&;C^'U3:]9VE^?E:_3NK-JL$/E?,O2?Q4\VMIJ@M;R05W_
+M`(8\=V):T^<,C8X7/5G998]OHWI(&=E,V[;OK`(W"\UH>.>G>2)KM/O*+_SI
+M;&`VN"1C&?[)N4>B5[T-F'?""A<^>,.,''RN/Z1U5_4BT,G2>2NOZ=3;2I#6
+MMR;9VNL>6'\TC]D]UU"G:T2XN&%5N:K:=-Q)^ZX[Q7U-Y8ZFUT`*97U:DVF\
+M4>,0POITWKC']5=?57>8=S*C?:/NJ^27%:%ET.'MAL^Z\F6[7IQD@;>QIW#-
+M6G)Y5BUZ'1G\@QG9;G3^G!M/0=BM.C9L:P`"/E6+_P`<]2Z12`/IB.5<M.FL
+M;_\`HP/HM@46@&0(_=)K6MSP4Z)&1<=+80?2"=YA5Z73-+I#1[0%T+FA^^_9
+M'3MVZ.,)VO3FZUI(+7MDA/0H:29&!PN@KV;8,#V*A;9@G9+"5AU+9K7!V,;J
+M,VS702``#PMNXLQH=ME56VWKF)E9K49-Q:CRS`_U06-LUY$B2MPV8>'$]E5M
+M[44JF<05&H@T.:T@#A:/3ZCO*#3NBI6S2Z2%*VV,^D?"B[2M,C8?=([R%+3I
+MP())"*E193:0R0)P.RK*HYA)QO\`LH7/(,*[59I$JI787.V1=&I5#\(C5]4!
+M0GTDD[A1O=I((,PIH6WU!I$#=0.<"R1(^%%K+G`26I`D:H)DY24T-]9S8TJ>
+MC=O8R0X[\*EL3G!4-2L6OC/PM)9MTEEU8C#C';*U[:_H5J8@B8R9W7$4WDLP
+M[Y4E"[J4LASH^5TQ\ECCEXY7;U&4ZK2&@+.N[`#(;NLNSZN6.ASX[Y6O;]1I
+M7#1Z@O3CY97GR\5C(N:)8XM((E9EQ;.+R<P5UC[9E:7`A4;RP@#&/E=Y7#+%
+MRMU0=I/99E9NA\1GA=1>VS@8`$+,OK?09Y"U&+-,>H/3J+=/UE4KVF'QZ<E:
+M-U3<7%NK2!^J@K,I@8=!"LX1SG4K,E\'DRN;\4])IW=B6%@<Z-NR[CJ%'4#I
+M[\+*N;4#&_<]U9=7;.GD%3P_58\M;L#W3?\``:W;]5Z?4Z30>\N(R>Z;_@]O
+MV"W_`!=?W*\#NZD/APSR=U4JOAT@8XY4U?\`.2,859PAW8>Y7.NVR+H.TB,%
+M,7##HC'>0FQ$B$S@`T=SQMA0V,U6;-!@C8H?,TD.8=MI0%H`F9A`(,AT^R"5
+M]8OJE[R2YYDDF24.L3JSGNA@:9!Q/^PE&(S!W0V(5#N`2"93O>#F<GD(/3R=
+MT.`"V-C\0AM*7@MD[[$RG;4&PD:0HP`>8]O9+$S.P022,DG!2#O1$X''NHY`
+M[YV2:(S.>Z`@0'0-MLIVN9D\;*,@S,XC9-`!DN@'A%'Z9U<#$HG.86CG/*BW
+M><E'JW`.3RB;.'-V=(/()V17#6MKEK*S*FQU-F-O<!009,0$HD';Y)1=I:=1
+MC7`U`'CELD<>R'6W0TM.1PHL@`0(&Y3`8,9A#:1SFAN\CO*4LC\V3R@CD8"1
+M&<X@("V$1CV*)IQ!A1Q)DGA(-,?JIHV,/;J.8!3ES"Z3IGVQ"`M(WV]D)C)G
+MX"NC:1I;F#PD).9;@[J(Z@8//9.<`'ME!(UP@B`>9*(P&@%TQNHH@9VYRDT2
+M,J&TNKT_F&/T14:C09G'90`&,?;NFC.VWNJ;62[UR#(D)FS&#C]E"&.B8._&
+M82(AOPH;3D`#?9"/SQ,R@9L3,':"A&"8P=O=4VL?TB=C[)B?4,S.)4+2YVD@
+MP!LE,;*&UAI$!TB/=`XC!^ZB'IP23W3.RT#GE71M)N![)X'$Y*A`(?F8GNG!
+M(GV]T5,WL.$F<-])A0DGO\P48,N:9G"(E#23,_24X+2!`CVC"BUG,DMQPFU8
+MR0"-LY1=IZ<9''S!2:2)$P.Q4<@/W,<Y3:SH&=_=#:>3K&))X3AQ)D;;C*AI
+MN(V.0B$ZMX]DT;3-J.;D3@YA7+?J%RT'2\YB<K.:2V"#F.Z*B20-.2EY-MBA
+MU;J#RUIN:AT["=EZ3^%5AU7J-VRK4<[R1./NN9_#SPA5OZK:U8$L]QNOH7\.
+M^@LLZ%.*8@#Z+%D[9S\GR.O\%]*9:V;!O`75@-#!(@0J73J8I4?8+.\3=6;;
+M,--A`G`6,LM,XQ7\5=6;1I%C=SV*X[1<WUQ.8[*6GYW4+HO<XQVA;=E092I;
+M+R9WV[>G&:!TKIS*(!?$K5H46X`&%%2:YYX4]'7OL>5C;K(MT6L`G2G>0'"%
+M$R3N8Y1!CC`F5-[;D.XZA&`0F;3^P1BF=)[J;R@Y@/[J=KPA\OG,*Q1;!C>$
+M@SB"/HC8P$AORKK25)I:3D`=_9(6[=)@#Z)B0-A/"-KQMA:E9TJ5:68CY4#[
+M?2"8RM%PE^P3:0Z,*5J*`I13_=4G4?YA@8'=;GDRT[2JXMP2#A9UPUM4MZ`@
+M$_JIJ5-IF0K#J):.WU0-9$08/92B(,=JP,!3-I_RSW4]&F3EQ^JE%.7#N4D&
+M959B'#!Q"J7-*#$;=EM5J30W;*HUZ4O@<;H,FNQT$D0J[R)C<[+3NZ3B-L+,
+MK-WWQRHL!4R#$9[)A4+1,92;)$&$&\JE-4<">Q]TWE!XF2/JD]P!@CZH758:
+M2W*=()K0UF#,IY;$"%!YH&"=NZ'S@';_`$2&DSAWW1T*]2B):2(XE1MJ@GF4
+M;(>V"5N,6-CIO6"QH8]Q$]EN4;FE7HX>,KAZC8!(,?W3V74*U$^EQ@<%=</)
+M<7'/QRNMNK9NIVD2LN_M"701]5-TKJ].M#:KOKW6MY5*NS4UPSLO5AY)D\F?
+MCL<1?VV@06K(J4'/J3)#5VW4["23I,'E8E]9.`)&'+MVXN<J4X>03C*KW%LW
+M20&_5:5S;Z'Z@JM5P+M)V"#--"F#!R4WD4NQ6LRC1+`2""47D4?=.%?)%<D/
+M,#.T`JN]LNQL=@58?!=),2>56?O.XXRH])J@@$.TRWLHV@@',GA&]QYR.4SO
+MRDR,<(R"1)`W^4B(V!2G>&IB3JVX[HIW:-1`.`<80.B9!(([IYDP2)[IB2)Q
+M]D#.=/(^Z)H@:L'ZH3&G#3O\)<B<E`39:,Y]QPG#1#G2,8B<E"UY`<8$GLB9
+MP"WXA`L-,&9&$],-Y=$<QND0X$AS((.QX38@J@2#N)W1-:-.<#ND#C;"=VG2
+M1[;J`,D\!(F6$&2!P4X+9&K,_1"XM#L9212@=I([)J@.K?YY2$1L?ND70TB,
+M)$,0W`)VQA,&[P41(G/ZI-B,(I@0`1PGDG)^$SC!$<]D\CB90.T'8'<[(23_
+M`$[%/J[DQNGQO*!G<9"3M)$_W2!@2'1W"0@\?K"!:6YQ$\)I@<_*)Q]&YC@'
+M9,=(=D?J@1$B!GNF:!IWA.(!F<)0W,2F@B!&9RA!&F#PC^<I/T%H`$)H,PP?
+M?E."9W28!`$P">R8B#G]$"=J(_U3M$X;B>$YD`MF0=QW3-@C+9(Y0%I;K)VC
+M8=T-0R[_`%3AH<[N!PF>-),B/8H'8).9,(!IF/;!)1$ZL>R$B,<]T#@0P'?@
+MI@9/Z).,-B4FG&V_*!P`1C/LD-0!]1CV3,.(`^,HFF),8^4#C5N/L$[9/IC,
+MY(2$@8Q^J*1(:1]$"(],0<<)J>F-DY@M$?ND(F0J&/I<5+3(,3D$IG!I!.QV
+MA.&P-ON4"(!$#E=A^'7AQW4;MKZC)8TA8/0.FOO[UC`PP2O>?PZ\/FTM6`L'
+MRLWIG+/UZ=#X.Z*RA2IT*;,-'*]+Z);MH4`-`"R?#5@U@!(B-PNB>6TZ>-EB
+MN<YY1=5Z@*%%P:1C<RN)ZC5J]1O8W"TO$UWG0WE0])HAPUN$GW7#.N^$VNV-
+M'RJ0B)A7K>F7#U)K2F2-ONKU"G!CLO/>7IQA6S`QHA3&F0"4@`'2<*1[FAN(
+M6:Z2$P"6XP5,T#&%`Q[2_)_56&'MNIMK22FUNG_52M'HQRH&$ZO2K5`#3_=6
+M4T`,,0!",LT@3^BD$.F,)G./*K*%T\H28B``GJG_`*E&7`[S`02XB)1-B9C"
+MB8X1,DX1TG09/*FQ/'I@#Y3^6,N)@CV3-)(D(Z?YC^J*!](O?`0U:`;D?16&
+M-&8'Z)ZE)KP`X2.45'08W1&".Y5@4QH,)4F'4('W4^D:)'*1*I5*0!DSE5*U
+M(:C&Q6C6:!.)A5JC6S);E18S*U"096?=6S1_3!6[7``^50K,#R3C"G2L-]')
+M)&`@\HP?9;#K=A&!@JLZD!(`0K(?3)!&WNJ]1C]/I(^@6S5H`B`,JM_#:21^
+MB:1EO;IG!*A#'ZCO'*TW6WJ,A)M!H$&$TNU&DPG?CW5BG3@;[J846L),<HF:
+M8$Q\*LVH'M.QS`55WI<9'U6D8C>)5:O2#G;;K4K"FUY:[4Q\%;/1.LN8[RWN
+MU`+*=;$B<J&M1<W:<96ION,927MZ'9W%"\H2""85#JMB8)CX7,]%ZL^V>&/<
+M1_OX7765[3O*(@CW*]/B\ORO+Y/%KIR74K0LEQ'ZK%K6O\S6Z3"[OK/3@6DM
+MV7-=4M2*1TSCL%ZIR\MX9#7M`B?U2\QO<?=,*)Y!E/Y/S]TTO#Y%K-)F71]5
+M6>0<`!6*YEQ;`&..56>1Q"E>H+@2/8)/!D2-TSMA)QV2(F'$X]D-&<,X[(2)
+M))&41`'9"X]T#$&9@&=BD9`B"2$PSMQPB<US1+AID2)Y1`$&1.Z1!X!!/&R=
+MND9<X^R8D2/[HIP)]61"(2.#'>4)@#_1%3=+80/+MR23WE-LTZ@DZ8&04TX@
+ME$.!Z9S!2W[I9#1.4I+M.?:.Z`?3S,<)`$DX=/`2AP<<X2/<[#;**>J^GJ;H
+MU;>K.Y00TGL=DY!C4[Z2D3)D'/NA#`@..GM&R0)`^>R=I+<S![)R22),H&@`
+M3E-B!E.23DY]TG0.?H@89=CZ!/.,9[I@Z,#*0)$^Z+H[-B8D]PD<MS'=-,@1
+M]@G;OB"B%@'\T=DQ[!%D[QGB4P_(80-&8.",(C@;`I-D@`&9X2&\0#V*!MAE
+M-N,\\HX)'!.^R$N&G;/[(:.&XX,?JF(,SLD)&0TY"0$MQQNH:.#B(&4BT<$'
+MW3@B-Y`V"0#]<M$&,C*!`#<\]D\M%0.C4`>4T>F"W=)L!ID?14/=.I.JEU*G
+MH:=FZIA1N]@B#26ET8:)WV0F-!Q]5`Y!<=1&!RF&Y@>^Z0(E.8!$85":V3D'
+M"<`:<#;=+4T99(/)*=H$=^Z!"1$#*<09F?HD1MRG='(DSW0T8>SI]D]-OJ@D
+M;[)@,;F?E&(&^_LBB.6P>58M[>I7<UDD@;*!NDD9,_J5VGX?]#JWMPTFF0T'
+ME&;Q'5_A/X:T-;6JLDD"%[?X8Z;%`'1"Q/`_164[:FP#``7H/3:#*-'3V6<J
+MXR;NTEK1--L]O95.LWS:--T.B%-?W+*-)V8A<AU2Z?=7&ACC!*Y99:=,<=GH
+MNJ7=QK<XD$KH>F6^&B%3Z):!K!A;MM3T`8^<KS97;TX8Z3T:(:,2`IF-QG9"
+MT@-P<!4NJ7].WIDS"Q:[1+U"Z;2!,C"R:O7*4D!T%9?5;]URYS:<Y[*G1Z/7
+MN8<7EL]ESN[>'3<C:/6FR2Q\QV5RRZR'D`N+21W6=:>'SI:,GW5D=%J-R&N!
+M"OK4]HWK6[-5FH'Z`JRR^+?S#3[K!L35M7!KP8^%J4GT[AHV"FMK&A0O&N/Y
+ME-4K!W]06-68^B8&J!V34;PZH.RSNSMJS?34>Z7%`V=63`4=&J'"094K3Z@1
+M&5N7;-@R('I&ZDH@ALB$PRTG]$3()&(5TSM-3P8S"GIM`,A1,(.5*#VQW32[
+M6*8!@2BTMG?.TJ&B1JVE66%IW"!1`P[[(RW!F4@0`)&/E-J&<H(J[/JH'4X^
+MJLN+2TF=N`JU1P#8,E18JW32-C*KADF"%;())2;2C?=.U4JC-(5=U*72X0M%
+M]+42!.%%5HC/9$9M6F&["0JM5H`)G*T+EI$P-N2J5<8/?E39I1JN]6X5.ZK%
+MA)/"N7`QJB#^ZS+MI<W)(!X4BZ05>IX(:[([JG5ZH8!UPH;\-9(:!/*R+IQ)
+M@'*9$TZ&WZDW5)=,JT.HTW-`7$UKEU/)<<=E2NNN/I,($^V84F5B7';T,WK#
+MC4/;*FIUJ+VP0"?E>3?^9;IE3,Z?=:?2O&#&U`*U32??*U,_\2^*NZOZ/]30
+M1_=6>@=0=0KBF2L;IO7;6ZIC2Z9&_P#L*=[VEVMI'>97693+IQN/RO1[6LV[
+MMPT1)&95'J=DT,((^BQO"G4SK:U[L]UV+A1N+4.!X7J\7DWQ7C\OCTXBK9-%
+M0Y_1-_!-[_HNCJ6)+S#"A_@3_@*].W#3X'N-RZ8G"KDP2"#&RL5\F&S([*"I
+MZJ8@F1B%-O2A._<#W2.H#V3NB3N1&2FJ.);OM$?"J<!P9@_KNF<"<[9A.6Q@
+MQ*8YQLHIO[[IG;03/U2(W&>R:">3\J!#,G*7S(A-M[)\=\<D(',1DR`8R433
+MG]X*`C)!G='@;<JAIGCZ%)P'"1'SC=$/RSNG8$D=\#(3">Z=P:!D^^$HD2=O
+MV0)F#R)3NB,QGNDX``9'U"1'I,<(IA^4$B>Z9\``C]D_],S!A*0/^H>R`(SB
+M<>R=@)G.Z3@``Z1GA,#/$(%IC'"49!V^4XR)/"3))$9[94"(R2(3/V_=&0#.
+M-]\JUTQ_3J=.Y%^RJ\NI$4?+,0^1!/M$JBG!C<=HW3"=6#D(FDZI`GZIRZ6P
+M2/D;H$"TN`<(2<,P)^$((@#;Y*=TD8?C_P"Y`\C3_ACLG:X@[S*;$$S@=RFU
+M9E`1)X.=D)!C"67&>P3`8,9*!`^J28'<<)R0-G<]LIB!/")C27`-&78B$"&/
+M43@IP#!,'2>3RF<V)U-@_97.FCS[6K;%S6@`U6$[D@9'U'[(*U3`$['OA"<X
+MQE.-,R,SRD[3J@;(`,C_`"3MB/5^Z3@#!VA,&R#E#9`Z3@;B-DWJGG"+9I2_
+MJS]4`QB3RB9&9F/V1%HD!IG*<-CT.G4TY:$"IZ=>DR6]P8,IB0#I&8[%.6Z9
+M;I(/,H?S/COR25%$QQ+H(1F3&G[E-0\LEQ<7#'')4]M3+W-`R51?\.]/?>7;
+M`&D@D?NO>_PS\-MHVE*:?J@25QOX.^'75`*[Z4S!R/A>[>%NG-H4VC3&%,KI
+MPROM=-+HMCY%)N`"KUU<BF,$2G>YE.F-6(7.^(;\'4QA@^Q7*UJ17\0=1=5<
+MZFUQ2Z#8N)#WY)]]E3Z=;FXN`]V5U%E1;3HC'U7FRRV]&&.EJW8&L;Z=E:%0
+M!NX5%U9K6Q(V[IA4<YN(*Y6N\BS>WK*=(Y7-7?G]0N-+7'3^RT;MCZSX.%H]
+M.LZ5"V#C^8Y6=;:WIF].Z2*;AJ))706%FP``-5>B[75@;<+5MW,ITY<8"WC'
+M/+)<M+1@:!I&%:9:4Y@M6%?^(;6U<9J"1[K/_P#.M`5L5!VR5O<CENNHN^D4
+MJK(T`#NLVXZ54MI<P$CV5OH/B"VNP/6"3[KH&TZ5Q0($%/69-XYV.1I14ECQ
+MD8(*I]0LG4W:V;>RZ+J?3#2JZV<=E5%)E1A:=QW7++'7%=\<M\QA6M5[:D1A
+M:5JX&">56NK1U*H2V?E-;EP,+E.'2S;7ID%L0$MLZH"BH$>7JG=-4>5U[<UJ
+MD\'=RFU`"`LRG4@R2K+*X(W51=IU(;&I3MJ@;'99@K09+AE%4N1$"")R5EIH
+MBI()F$+GQN539<0!D3\IZERV03G"HLNKL&^ZA<\..3E47U'.,CNIK9WJTJ-K
+M=-@+D]:0?9-3<!F$3G`CU&%649<`8]MU#7>W3A'4(+L9&RC>!&<H:4KD@M)A
+M9U8')C&T+3JL:X$!5GT@UL&,*:V,VJWDK.OFAQ(;_HM:Y87/V5.M1(.RD@Q*
+MED'DR<'.5G7UK;TY[KHZU%P8=(63=60?5.K.54<U>6C"XN#C]`L3K-E+"0S8
+MKN+BP@2!C9974NGZV$'93U-V/,>LNJT7END$#W61<U*A)>:;@!R.3\+TOJ72
+MNF^0T>5_,`AQX/NN3\06MM3)T,<Z<XG"W+)PW[[Z9W0.O5K9[6ZX`&>?[+OO
+M#GB)MT/++B';1_L+R/JE-S'DM'I.T!2^'>LU;&Z`.8Q!6KX_N+%LO%?072KK
+M14:X;E=]X6OQ5IM#SF(7C'@[KM.\HL!/JB8/_9=]X=O13<TAVZ8WZ\_DQ^5Z
+M0&L(G4,I:&?XPJ5I=TS;,/<*3^)IKU?NO+^T_/.Y=+W%I$959T`[J>M(,0(V
+MF=U7=(?&5Z;VTC<09`XY2JX`;!VS*?&L`NB3DH.=\;)0F@D3G?=,\.!S@^_*
+M:21OE(N)(!=/RH&R7<;)`ZN3D<!.R"9G,[(<;YP@6)D%WLD#@$.^Z4`F9,>P
+MA(#$?N@/`<07`\2G<X08V*%O],IW#TB!'=%(D3(Q.Z>1G.Q0_P!'O.<HL:=4
+M(AB)_JSV2,%H2<?Y@`A.0)'$A(I@.Y3F.#.,IB0#B/V2`)J$;#]40Q;G)^XW
+M2[B=TAI+^XXRFIP,@(&(EV_Y<)&0)`P$9PS!R3&$!)P3(A%+$23]$[9QF`F#
+M)P!A(@8$P@)O?^Z1:"TQ`)Q\IRUHI?F:3.R%X&D\QE`Q&./NFGD1"<`D8!A,
+M,G,Q[H'/R.Q3'!DQCE,X;QC,)VM$-<1,^_9`61C`QW2:(!.#P@(B!C[IP1.T
+MSB$!.D-$;I-QP2F@:=X]DXC7^9#9$`),:"=($SPF@2<(@&Z@9QR4$A?-'0Z(
+M&=1&4?3'`7U&HX2UC@YPC@&5"XR,$P[V3#?'&$!W`FK);OD#="-QC<X1!V`3
+MVB24S@=/^J)L,08YC!"4278,@(B#(CD(2,X/**8`8P8W3D8[X2`W))@F,IRX
+MG$J!?TB!SV2$@@B3';E/IDF)CB4;6PW/.RH0))DG+M\IH:1DF`4AJ)B2`?=.
+MT$@-YE`@PDMW(_5=E^'/AYW4;YA<UT!P,?9<_P!$Z=6O+EK&MC(SE>^_A%X:
+M%K:L?49ZW9_92UC.ZXCJ_`'0:=G0IL;3#0!L%VU.FV@WM"@Z?0IV](#:`J?6
+M^I-8TZ'?<KEEDSC#=;ZB&^EIR0>5SH=4N:Y,[G=!7J5;FK(G=:G2K4,:"3\K
+MSYY;>C#!;Z72\ILN&%>KW(IT\QLJP(`+01E*C1-5^J?NN5=I(9M1]5\SOE7:
+M;M-,9(,*2VLQL&G.ZLUK2&&!!C*QITE9U2JXU>ZN![BP1C$8*J_P[F5@8WV*
+MMTQI;D9(315RQ9Z0X1C<]UC^-.M&RM##@#NMFU>T4R-B!"\]_%-Y<2!\_.ZZ
+MXS;SY\./\5>,',8Y[ZPF<"?E<A7\>5_-.ET@']%E>/7/IW08`=)Q^Z[C\"_P
+MUZ'XDZ"[JW7*]8L-7RV4Z#@#L#)D>Z[SQX_6-^LW6A^'/CJJ^JP&J02=I^%]
+M#?AYUD7UJPN?F!SLOE?QIX9'@_\`$3^`Z=4?4MG$/ID_FTDX!@;KW7\%;ISP
+MUAF,?V7++#URX:W+'KMS2;5I;;KG[^D;:L2``"9E=-2@T&&(D+*ZU1:^FXM&
+M96?)-QT\=U6-69Y]/4(E4*E`M>8^JNL?Y;P#SA2.HM>=0V.5P[>GI3HU#^7?
+MV4E:"W/'*CKTS3<2!`05*X#(..Y5G"6`,->/A.ZH&[''RJU>LT2951]R"V`X
+M+>V%]]UIP24A>-`!!SV60^L7$29E.R9P%A6Q_&`DP2)2_BIP=OE9;6NB#REJ
+M+9.P_=%;3:NJ>ZFMG'5JGZ+$IW`!''.ZNVESD'ZJ+MO4R-`DH75`2J(NP6[I
+MZ58ND?JKM(MM<&NB=T-;).1'LHR^`)2\S8?9:A2:UN3LH:C2YY4KW`@D'/RH
+MWNS@_P"BJ*U2B`<M'OE0OHM/?93O?ZB21'LHO,SW4%2K1&F(E5&VC"XD[RM-
+MSVZ5`ZF0XN_I(51FW5NT>ENRR.IV9+3S/"Z&HTZHX56XI!P((B$B;</U&Q=4
+MEI;@[K'ZGT2CY)<\Z3W.5WMY:NF0W?*P.N=.JUIW'NKZRL[>:=<Z9T]C=)R9
+MSNN1ZI94Z3M=,F"3$<+U>\\.VOJJ5@7.))DSNN;\3=`M?))INTD;2%<<KCVW
+M;*PO`?539W+070,"%[%X=Z@*K&%KP9@@KPBO:NM;LN#@(,2O1OPYZBY[`VH[
+M((&-E<YJ^T3*;CVNQOHM*8UC92_QW_6%SMK=4A;L!)F.ZD_BJ7<_=.7+A\97
+M4$G<?[[*!PEA=!`&)!V5BX=AV?;Z*H\DN&,;A?1KA0/$R1A#48=$R43_`%'X
+M0SQL2B!`]<">Z3@!!$DSRG+CI`!PF=)`QL-^ZBFEQ)=RG@`Q)DH0X3(G*<.(
+M.)5#P8&?LG:3$1DI,)&"XP0FGW_5`8#-&"9!VXA(^IQP`$.-0DY'9'J!,.)#
+M9RE@$_\`+`G=(B!EVV(2`]6#A$0)W!$2B`R&X.4Y+HB?NG<0.,).@"/K\(&U
+M&>2>4.2#D=OE/(`:3N<)SD`@B>W"*0@.D)F@EV-Y1`C3&`)V"3G1,``H$0`Z
+M3A!$CL$3C!R`3\I`Y&=NZ!A.@-G!X3&200C=+8$C*;4)WCL.Z!MP)CY3QB9V
+M_1,2)WPD\C&-T#.DY.\II@DD`GW[IM7J[)SET[(IR9C`$#;W2`)@3!2&!@"4
+MQ+-,YDH$<>G$1E+`<(XV3-P?=.</VG"B"DZ3.9*8SJVVW3ZAH]TA&G!@JAFE
+MT&,<)Q.DG)">)!]\X2C$NR?9`P)TD'(E.R3)T_=,V"#@R>.R=A8706F3L`@0
+M)D1,S&R-XGX[(0<2/L43W"((R$`@F0`)3$SD#`12.1$A,<F.Y4"R<$!-D';"
+M-D8!X3^D@X,0J$QIU?[A/480-Y,;2K-&"S2?H.R,4QDD3_=39I4$`Y'PIK:B
+MY]1L`G40("E;2R`T&3Q*ZOP'T7^*O:9T@@D?1$MU'5?A3X9;7:RO5H[$1C?W
+M7MW0K>E8VP,M$#E<CT1]ITFR8`X-$#<_[[*'J7BHUII6[RYNTB<KGGGIRQQN
+M5V[+JO7&!NBFX2L1]:I=.EQ.5D6#JE=P<Z3,86YTZD!$S"\^63T8X:7>FT&L
+M:'$;=UH,=C?8J&BV:8#0K5K0+M^%RM=I#TF%S_>%HVC(`'9-;T&Z1)QV5FDT
+M8(*RUI9H1N["DR[!4(@;'=.7EA$<HNDAH-<2-N94;[4G\J)E729[*:C6!,G?
+M=3VTNE-UH\;3)X6!XCZ#4O!G)RNS\^D<0GI&@1F/E;QRC&4V^=OQ$\`=0K.-
+M6@PN(R&_=9/@A_C7PH*E.UI.\EQDTWM)`]P/HOI^M9V%=OJ:T\255O/#O2ZS
+M8+&2?8+K++-5C6G@W3[3J'5^HNZAU4E]=[L3.,^_"]E_"+IKZ6EY$`QQ\(AX
+M5L:;P6TVD#;"Z#HC&]/;I&D!8RR28<[=I3.FD![1\JKU!H=2,1E9(ZL(`+\#
+MW05NJZFX.3ME8RSCMCARSNHO<RYP8@JQ;U=5,&=MU2NW.JOU<3/=#;57-,$1
+M.%YYQ=O19PN]0JT_)P<K!NKD1E6.J5#!))'PLBJ`YQ]1,+6]UF22%6N'.P#A
+M`P%SMC!PG93D@QGA3T*328.YY6ML]AMK<N?);GY6I3MP&R6P0$=C0B.<*Z:?
+MIR``H2,NI3TDX]U'7I.(P%JFB!E"^BW1($*1JL"Y!IGU3E#;7<'\V%/UL!K?
+MCE<_6N7,J:0=UK3#HZ-T7P9PKUK7]_=<Q85G",K8LJI=$HK<\_\`E",Y0&M(
+M_,J>LP/TA#YT'3Q\K;*\:H([?L@J5=(D@J$.!V=[[IJSI&#*!5JL`F!["<*(
+MOD\9"'U&9W0M!C.,;**D80.<3LG>[U1Q*B<^-MR4SB=."`FTT*070<*-S!).
+MQ0PZ<G?A-#B"<_Y*RI8&HQIQ`,\E5;BU8]L1^4*VZ.^5%(D`X6MLZ<[UCII<
+MQVEL\K@O&'1:F@N8#MG/RO6ZU,/;!&%C=8LJ3@X.#=E>*SO3YSZK3K6US%0'
+MT&22/=;G@WJ#J5W3;,-D3&W"['QMT2TJT7O$!PG^ZXFPMA1OAI$M!WGW6[JQ
+MJ7;UBROV.M*;IF1O*E_C6+G+"NT6=($G#0%+_$-[E8W7-\XU]#JN#`YY*J52
+M`?1'NK5?#N!.ZK5A$C$;1"^C]<43R9/?LE$24[],3J@SV0N_)^B@8G.(2;#B
+M9@XPDT$X`^R$MAV1D(%$)",SLGW$%+2=])`]T"D:0($^R<QP"D6ZG?ETE*#'
+M&-U=!XC)/*<@:>Q]TH@"?V3M&=X^$0TDQ@8"=S1&=B)3R`-`!GNF('Y3OO**
+M;WTQ\)&#G!^4OZ)PD-\8'NB:,!)C8)$!I(TIV``;_?*8S.P^RBIKAU%PIMHT
+MG4H:`X%^K49WVPH7;[9/9.\&-XG@'=,9+AD&.Y5^AMC),I;X**1)*%D:23,H
+M'='/Q,IH&DR-]DPY=)GY3R=$G"!F@-)G;^Z0@D\A.&NXS*?4?+#8&.VZ`,!Q
+MB/A(D!I:0`/;=)P,9,2-I3<>R*(1$;'O"8M$1!'RA^3"(S&Y"@&)^B7>(!*(
+MQI&3JY28`7?YJH3)B&F`[!2#6"?4F]IPG<UP&D_*!"`"!E$6F-HGW3-;!W'N
+MGTSL,'E`@)S#1PD&@$3_`-TQ&0!E$X''Y8WE(':`W/V/=/I))@),$@Y$^YE)
+MK2!,!`SFAS9!SM\IPSN)2_,2(A$<.&,`1E1"#<D@1!3-&IOYAOPIJ;):2""1
+M_2HWB'X@HK0LZ8-,8))4[J(+<&",Y3=*!-,8!!5]E.7CL."L4Z1]-L/XBO38
+M#^8P3E>B^'*-'I%@*E0LUZ>#"Y3I56E9GS-/JX&Z;JO4;FYJ>6"X#L"8"7+7
+M3%Q]JWNI]<NKR[\JE4=H!C3.X71^&K-Y8'/G,87/>#^DNJ%M2H)F,%>@=&M6
+ML#1'/'*\^==<9\B_TRVT@'*W+2B2T0(5>RHDN&_T6U:41H!7&NV,%;4,-&RM
+MTJ3ALBH49:%9;3TK-=)!4F0-M]Q*GMV0#(F-E'1'J^BMT6SB$;]0BF=\'V*)
+MU*?@(W,=P)"E#'Z?=#U5C1&D"#(,PCIVIU=L*=K3,'=3T6:LB%E?52?;.!].
+M%&:-0#?Z+6%$N(X1FVD@IK:,;RZ\2'$0$%6K<M:`#*W76S2(&?91FS!!!:KI
+M&)Y]PT9+DS;JL<$;+2KVS0(A5:U.FSME32\*O\35=@G"=MP\'*&KH#C#=^R@
+MJ%[L?LII=M!EZQH.5'6Z@S3+?NLXL,[GZI-I^KY33-J6K7?6W,IF-$>RD`:U
+MD",**H^?3W34B;V=PEWIW"NV%`ZQC*AZ?2+W_P":W[&T@`D96:W.#VM$0`!M
+MN5:-`%L3(CNK=&UTL!")[`QIDJQ&<^F&S`V]U4NZH:R-NZL]2JM#?W6!U&X]
+M4S]%-M:VI=;K:FN`&^ZYBZ=-:/HMOJ+]605AW&*DD+6*7A=Z>X-<"?JMBV?`
+M&GNN>LZGKAI"V[)P<-BMZ8K2IO)]1V'"($&(Y5=@=C.ZFI%F))'$*[1,T&1B
+M$;((AT(?,:!L-E&*X)SLLVM2;2^ANWU"@J/DF-/R4-2K(,<>Z@:USB3G"SMJ
+M8K6(GORFIQJ@C?*9@EN94K&9!Y5BZ$6C$#(0&!,B%9IT^"AJ4A&)`5TS5&L1
+M.^_*A=`,GA37+!JGMW4%3+(!6F=&UC29$*EU1NJD((D^RM0`-Y3,8'-AQ)2,
+MY.!\3].N:E-^EARO/+VWN+/J$U&:0X[+WGJ-JQ[(`PO._'/2AJ+PW:2"%TQD
+M8]K.&+:5&FV9SCNI-;>Q_P#WE5MZ3FT6MTNP$?EN_P`+E=)IX77R_`C.ZKO`
+M$G^ZL5LDD'_55ZL`[8/=>ZUP0C,YPF>#`C9$`-)W33$S*&C#`$2F&X<,)3+I
+M!33G=0.7!SB?V3`8W,>Z33F"/[I\3DC*H+29#C!]A,I&.3E-`G3LG/I&2/F4
+MV'#0,A,<SN>Z0<(,PG)#0-L[A`A(,GG9(G&YRG).F!L$C!W,1W1##`P?HF!@
+MD(@(GLFQO)12'Y)'ZIB9;JGZ2G&TSD8^4S]Y;(4")X(@H7&#/ZS*-P)$Z8)4
+M>G)(/UX5-$UQ&0?E(?/*0!!,)X@3!0/Q";U;$[)V_E2'YIF90."9"3S@<I]G
+M1N?=`9+23)0*#I,#/[(2""#_`&1;`B29Y*4%W'L@'>$P[&81Z8(S*0;V,^Z*
+M`?XA&$33Z?=+CG[;)-V]E`^H:?RC='3+7.EY(&TJ,`!TI^<!#0W#GCW1>=-J
+M*,-`F=49*$X$<)G-!@,G43D*H0,8@?5.3D0!A#ICM@_=.TD?1021,>G?&4Q`
+M:>X3R8`:9`R,X0PX.#?U[($R7&(E$6[%KI)W'9#!$Y1,^,'L@-KO1V*`3YFH
+M\H@)`TPDS$3QN$&MT4C?A;-)M-U,Z78Y'=9/0:>JH&MS\K6KL%%FB#/*Q>S_
+M`!7J57`G\P'>5I^&[9UW>`@.C&^ZS&`UZN@-R>Z[OP/TLTRUY'N"N>66HW(Z
+MCH%B*=!GH"Z;IU!K6B&K/Z;1R#$+>Z;1B#W7GW]=,8T.FT1`)"U*%/(@0.RJ
+MV+-+1[K3MV"97.NTB:VIG3MA6&4=42E2;#8VE6Z%/GA&I$=&@)_+A6*=&?\`
+M)6:3,[05-3I@[?:$:5V40.(4C*$M]O96J5)IYW1BF&Q&Z:6549:B1.%+3HMD
+MX.%:;1Q*D9;SM,J6&T#*>WLC\LAL!6Z=N1`1&B-6VRK%40P@$\J-P(_=:3J`
+M!.,*)]($0%$VR;BGJ!G=4*]OK.0<+=KT@W,`JI7:UL]NRB,2K;1@&/A15:+`
+M!`,K0N2)G[`*G5(CU*;%5U(;DPH*M5K<3A'?W#6-C^ZS!4=7>0V3QA#6UD5"
+M]_IX5NTMGU*@)'T3=+L7ZI=RM_I]F`084M;F)=(L,R1]5OV%`#C906-NYKI#
+ML'A:5`0`8^4C5B3RVAA[PJ'4,-*OU9T[0LCJU0L80,CNE28L/JM1NDDOCV7/
+M7E4%QRM'K-7)B9*YZL^:D:E(TDNCJ9`S*R+X#(,"%L4V:QE9?5Z6G8+>+GE5
+M6Q)\[?"W^G@B).%A]-9#YX[+:Z</-K!K<*7)J8\-$/.`!,)5''5V]EI6]BUM
+M`.]LJ%]JUS\K7.F9K:L:@T1V4+GSN0!W5FK;ALZ9^JJNIN`/IF5S;#4J`"!$
+M=Y4M"LT$`'?NH7V]1QP"HJE&JW+6II6JVHTB-0^BL4-,@@Y7-BI7823("GI=
+M4=3YE7E+'347-&T)5C.Y6-9=3IO(!=G=777`&1F?=:QK-B*[;),95-_H!P%9
+MK52XA15QC!E;W$5"[>3[HF;D@_W4-W@]Q\IJ)<>?T4+$U;+28_58W7K(UZ#B
+M6SV6N#)@;?LH[MWE#N"NF-TX91Y[4L'-J%N@X*;^!?\`X"NKK,INJEQ:)*'R
+MJ7^$+ON./+Y#N3+M,$_)4%PYQ`&HD#8RK-<:B`V/5Q,0JE<-V:\P,;1*]*(Q
+MS!]T,^DA%B#F$V6ND.RTJ(`D`$PEQ[]T[AOD?"3V@#!,';"!-/JD&(]T0,NP
+MXXV*9\BL[4S3F=/9-`/,R>$$C=()F2?F$PR<X3.;#LS([[A(DY$X[JA-C3D2
+MB&G&)([\H1R"92:`>3[!`3B-6!$Y2:-3PWOW2B=,'/(3$Y@!02,)#2,04&-6
+MV$G1\^R:0!M,@*A'2TDDQ]$P(P=,Q]D0PWN@&#)P(WA%27%4UG%[PV2(,"`H
+MQI@[>Z08#OEQY2`(<"Z80+TC&)3#:0!"=H.QC*<M],_E0,-H@2G9I+@1GV2#
+M8),[)-@51)QL2@=S<P8Y2]ASV3/,&`9PFG&\F)D(AL\F4FC)WRG<"?;^Z0&8
+M!Q[J*0@F8P>2F<`<@X]RG(.G\WT";8Y$`_JJ$V)SB/=,W_ISRGTD-G'/*0C2
+M21!X'=`Y$_/LDQOJ`G/ORF!!`Q]47],0-D!%HV).>R$M@0#ORI/3_0'("/27
+M&2=D#.$1P.Z>F/5D[);#;ZA"S88WYA`8$F92@2#KR>Z>89@2A`R<">R((MD`
+MZA]$3.T'ZE-&T[=@G+73IB>%`;/2\0`83MU5*FV_8(*9),;*WT^BUQD3\(-C
+MP\?*8"X>P@*]>.#OZM@=E2IQ3<UL&#M[*Y:4C5J-;!(&\97+*\K/RN>%+(U;
+MQKVM)@\C*]1Z%;>70:V`)7(^#[-K7M<6@>\?*[_IE.=.!G]%Y\[MTD:-E1V&
+MRV[&F!`P)6?8T@&:C)_NM6RI%Q`C/=<[7;&-&U9Z1Z<+3M:8E5[2EB./=7[6
+ME#?=9=(L4:8A6Z+(XPHJ#/3D25=MV>K))114VQCG?"G93<8Y*EMZ4%6Z5(1@
+M1"U$VAHTR"9`^ZG;1U#:)1LI@'T[JU09W(CE-%J"C;Q(`R%89;D"8W4LM#AG
+M=$XC3(X2QG=1>6!QL@J,Y4T^O'U0N!T$`[J"/2(@M4-9K8]U8,=Y"AK"9VGA
+M04KPAHP2LN]+0"=EIW8AIET3W6)U.X:`YH(6+6I%.ZJ9QRLZ\KX(`SV1UJI<
+MXL;RHA:U'ND@=UF+I2<U]R\``K7Z1TF(&G=3V%BSS`0`#.P72]&L2Q@Y(.ZO
+M:ZTIV?3M+1+-EH4;4-`&GZK6I6T>F`$YMI;/*UI95*@UC3^ZL$`-D;%)M&'3
+MI@)G@AN\J-\`KO.GNL;JKO3(XY6K6.!WX67U$@L,]E$TX_KKX><PL&?,K&"M
+MOQ/N[]I6!:`FN-HE).&,FO;L)I2?HLSK8:&;[+<M@#1(*Q^N-),0(A:CGW6=
+MTN/-#"=UO]/HAE36TB%SEJ_RZX.-\9716Y-6E((QF0L6.DK?I7-)M/\`-^J=
+M]U;L'])*YRNZL/3/J'NM#I%C7J-!J$GZJ7*QOTFMIZ]\UQ<0V(Y47\4V-7EG
+MXA:]GT=I:"6@K1H](H`QH`^G^BZ3#*N.7DQCE*ES5+891)G?"@UW;G8HNCL0
+MNV-A:4A+F-'T4+J5H)/H('"Z_MW\N?[T_#BKA[J=,^=2(/PL2[O*9K:0`%W_
+M`%*QI7-,@`01D+E.K>'',<:E*,"<J7"SIO#R2]LO348T5&.Q\JWTGJTU?+J.
+M_58G4*]>WFDX.^(5>T=J.O7Z@N=GX=-_EWS:K7LF9!Y4;JD3)E8/1NH#%)YY
+MV6M4<'&6D0=H3_#1KIH(G49]D#):V=7NB![C/LG#=+=$9*U"](VN!=`&?<IZ
+MS`6.U9[05$?^87<A/5J_RR=EO'MQRBF^BPN,0F\AG8)JCZ9>200?E-KI^_W7
+M5P?'U8`%QU2,S_95JA&GXXY&5/<..HD<?15ZCGEQ$-''U7L<T;P-@`T("(.,
+M%$\C)D8.0FQZ2@1EL@[C$H,<E$8F0A=!$D\=T#@M=JG4#P1_=)HDSC=,-.DD
+MB'#MLG!`!`_50%'J@A%#2_.!'W0L(B)`.\RD"6G`G*H0:/I/V3AO)'V2:Z-C
+M[83`M$X[YE$.UHTQG.V41$#O[E,-(R.4[C/]6/9%-@N_=+2T$['^Z:1J.G9*
+M>W"`B`6D3/\`=-I$3N-MR4X@M$P=/!35B`XM!+AR=N$-A(AN$VF1@?=%4+=)
+M$1]4FX!P2@30=MCV2<W>?E(F#&\8RFG!SG9%(F!`^"D!Q/T2!`/,I2-<@$0B
+M'<-1!!@3"%['DP!MB`B);]1RB)D2XR9Y0`<-DREI$0=D\MUD@[;2B9),B".0
+MH!P03,<IBT:3!F43C,Y^R$F`?5^7"JA:-P1O[[(],4QZ@9[(0?41!*1DG),2
+M40\`'&!RD=42#[B4[)+,$9,I-,GU'`V^44Y._J1:AL"A,C(/.Z6I-(8B792-
+M-]/)!`(D2,(\AN")&4,N,R0.X"!VZM\PGI8<)_[I3`&W<RFV``.1.2@<F9`R
+M.Z,NG<GZ(6-)J`3MRE`:)!$<*"2W8Y[A^JVNG6;VMD_U+/Z6QSZLC!G,+K7V
+MWEVS06Y/`4J6LVWH5:K@P3''8+4Z?;%K@UNHYS!Q^R'IM-H9#X).<\+7Z!0#
+MZ_J$CD0N.5KIBZ?P?1:UNIQ@]IGNNSZ=1)<#`6+T.V93I"0T<X73=/IYWCX7
+MF[NVXT;*D-#<$!:_3Z.F"(@*GT^CZ=EKVC`,K-=8O6E/V5VA2`SRHK-HR`K]
+M!HD#*-Q)0IC8A7:%.(TA0V[,XV5ZWF`8E%2V[,#"M4VDC`P@I`00,0IZ$C*T
+MR36$>EW_`'4],#5'9+^K?/.$3()$;'E0-4;.3VW2`,`$R1V1.`'NG8W2Z=_?
+MNH!T`YXV2%/<SE2N`D#NI&,!&?N@JFD0"0)5>[+:8DK0KD-,3L.5S_7;P,81
+M.2LVZ63;/ZU>L@C4N>J^96JG<B5<<RI<UI()^JUNF=-$:G-$^ZY[;Z9%GTUQ
+M!<]ICC"MNMVTF_E@]H6\;=K&Q_9974=+'&9V5TDNT?3F#7LNHZ32:&C&`N;Z
+M29JY75=.+6@"-L*XM5H4:(<,`&$-2EI)@84]"JI:;0\C&ZZ\5GIFNI2/<*K=
+M-TCU2NA;:MVC!5.\M`9V'NI<5F3F[QL#&RQNI$$.]ALNAOZ8;J@RN?ZH``3V
+MS\KG>'1QGB9S1JS]UB]-@W!+5K>+B"TG;V6-T36^Z[:3]E/C&3IZ+8MS!SLL
+M?K+<Z=^5NTJ?\@>_=95_3)?EOR4E<Y&#<T?+$B)&0M+HEZ&#0\S*:O;:J<PJ
+M#0659_1:LVL_#H@UCJQ>#/;*Z+H=:EITN@G;"XVRN@)#S@>ZU;*Z-.'-/U6=
+M:JW>M.\M7-;3D\*AU_KUITZF2^HT1W(6-=>(&6]@XN<!]5XO^)GB^O6JU&-J
+MNP-@3C]5Z<.MO'GWIV_BS\2Z%,O;3K8'O_JN0J?BJ[SQ%<P8V/\`JO#?$/7K
+MVXNG`5*AD_E!.5GW1ZE9U6/NJ%:FTY&MI`(7;]JWA)I]3>&OQ#IW,!]5IG$$
+M[+N>F7]#J%MJ:09XE?'OA?KE=I:"^#N).R]P_"#Q,ZJ!1K.]0.<_*XV7"\EU
+M\=OXIZ2RJ'56B"1A>=]6\WI]SZB=(.0O6[A[:M"<&>%P_C?I+:]%[@T`1O\`
+M93/'<X=?'Y/E8]K=,JL948\2.Q72])O?.HQJ]2\ZZ9-G?FWJ$@'8<+H^CW6B
+M]:T.])[_``N%M^O3K5U'74G;F!"EID'(.>P4-L-5,3!'96*3(GNMPM0W!#7P
+M<SNH:M5NF0,*>X:&DR>%0N7RSM"Z1QR+1J]0>(*7E'_&%6\QO^RG\QO;]5UT
+MX;?(=S`,`AP[]U7J"'=YR)4]P6DQ(D<GE5ZI;`(,[X[+UUA'/&X&X49``!&Q
+M1G3)GE"8@;'X40TDP#E,,.G8A&7$L#3$`R$((&44H$D&)PD\`G?(38U2)SLC
+M/Y8QG]40P(R!]^Z<:0Z7'&^R83SMPD021P@.D01$[\I0)V&W?=,W;$@_*;82
+M52G#6C(^436MW<^,;^Z$9.R7^X0)V7D[Y3N;!.KC:$@V$S]I/^PD#Z6D1D$(
+M2UHF<E(CF9GA(-)('/RH&`U'YQW1`$?/=`"0>Y[(].F6ELGB#_DJ:"0!L#'M
+MRD(_*1F-TGD%VXPD"-,R"XJ*0'H@[CE*'3,_ZI/`(Y^J=FDND?9`@&:#).K@
+M<)23C4E5!D'(D2A8`AH36G8'/L81`[`B.Q/"%H(_F3@8[IH9)R8^TH$3`B"G
+MR6:9'>4_Y6G;`Y*%@D9)]D0S6#`GZH]()R=DP!`&84M33H])@#@JJC$`=@,`
+M),P[5!(V*1,Y,`%,W<F=^$#P[D(@TZ2-O[I1$"?HF.#Z3"`FMDY(G"9S"XR"
+M??"<#`DP1[ILCU<?V1"`]A[>Z<`.=$B?V2`#L1_V3DD`8CA3H,`<F28V[!.W
+M43E*"=L2IK5H-5K-LS*#J/`71ZMY5%31+>_?V6_XP8VW:VFT-U;=H5[\.6&C
+MTXAK,D3\+/\`&.IUZ6NF)V"XYYS?JUAX[;[52Z)0\RL=8+I@8*[+HEGH:V`-
+MYPLCPO:%T$@D[X7:],M0W3I&%P\EVZ3AI]%MA`U<KI;"B&M@9[+,Z50AHU#E
+M;UE3U$2V,+FU(O6#7:1@`K6LJ4C\H5&SIF=_JM>UI'3[^RC<6;9@:9$*];4S
+MA0T&`$*_;T8Y*-;36],`CLK5!D-'LHZ;6@*>UAPGCL5=":F`0`3/]E8IC$<0
+MHF`[*:EL!,!6"4-]0,HP!'RHV[_W4U(2)[J$`W>8(A3,9)S`A%2IAQRIPT!N
+M4T(6TQ,$\)5H8P03E2NTB?=4>HW+64YD*45>IW(IL))7+WCC<5=,D\JQU>\=
+M4):UQ*/I5`$!SQ)]UQRNZZ2:2],LVL`)9GW6DXTZ+,B!W0.<VF))B,K!Z]U-
+MP!:TF"/LIO2^NQ^)?$-O947_`,QH`]UPM;QK1N+WR65&DSM/^JI>+A<7K7_S
+M#GW*\TNJ%?I/7J=1Y(:X[Y@J7VK>&..^7T;X:K"XI"I,SW74VE2(_P!RO//P
+MVOA6L6YS_P!UW-O5D`XE7&\)9RV*50"`#A7;6L0T$D2L:C4(]2M4:OW"Z3)F
+MQLMN1IW56]N?285&M<:6D3^JI75X,@._T6KFDQ!U&JV""`9"Y[JC_28C*T;J
+MX$.AP^%E=1?JIGV7.UN<.,\6.!!D[K&Z!J%R6G'Z+>\3T=3'/VC]5B=#9%WM
+M,G"EZ+'7VXF@`<E5+F@#QMA:EC2/E@XRD:0-0J1AB/H$B%E7=!P>2W8KJJ]$
+M1$+.O+8%LP`MQ&`ZB1D'/[([>X=3<`XF#[J]5MP&$9SLJ%S1+7'>.86M;5<N
+MZ(O+:`001C=>4?BAX9NF:JUNS#1D0<[>R]/Z9=.;4#7-AOLMFKTVTZE;::C&
+MND=EK#+5<<\?KY)\,7%ET_QI:W'5Z`?;TJFI[*@X'RO6/_$'XT\$7_X?OL>G
+MT[*YO:VGR'TF-FB`X$Y&TA:?XE?A9:W=%]6VH-94`P6#_1>&>(?!W5.FU1Y[
+M/29&QD1$S]UZ\?[>^WGRQF4U^&9T6L0]I<W\OZKTW\)^HO=UIM,-($P8^JX3
+MIUAY3,,)=M'NO5/P=\-5*50755K@7&<K/FU88O9[2HYUJV=U0ZN/,HN:3L%<
+M8X4J$3LLN]N&ZCI=@<+E>(N$W>'`>+Z1H5!5:(`.3"BZ7?,?7I"#+MCP5T7B
+M.C2K6K]0W"Y#H]L*74H!($X,KAY/R]F&OKU+I%8.MV@X,+0:26R<K'Z!'ELW
+MD>ZW'M`9(/RKBEJG>G+O5CGW61>U0`8=\+2OGQ.?E<]UNNUC'&?U7?&..5X5
+M*MZX5"&D0A_CG_X@N?KW;_-=IV0?Q=3_`&%W<O6O`[D#S"7&>%5JN].D1!5N
+MX+7OEK(G8`[JM<L+':7"(X7>N2%S2,@$2)R@&>%(X3$ND(1`/?V32ASI(@I@
+M.-T<NR!]<I.+2[`COE`!,[82>T"(TDD?;V1L$B"\#G)_1!IYS]U`B#JV^R0D
+M081-`#ADHB!L'?W5@8DNW'Z0$VDGZ(X])WA)S=D#`^F,S^Z8"<1E.W:"=L)$
+M$"90(3$29W14C#FRT'V.Q33@YB.1RF(@9A`3RW=I4=:=3B'&"BS`@@2F<YP&
+MG60#N$$;OM*<3L2?H4G:NZ0S$_LBF#=YF$\3.EWNDWDDGX3Q!,$*:#$G;4G:
+M3.)38)C=(G$*AR3P283M)/=,"WE.2)B`1WV4#ZCR3&TIL[`PGYV$!,_?@]I0
+M(EP&28"%KB8!/W18#>-LYW09)[J@I))@Y"D-1SZ(IP(;[*-C9,$@>Z)H])R$
+M#$&3V[A(`B#"D;ALD84CRP6X:6#6#.J=QV326H7$XS/PF(=));]`C:9(,#/=
+M'#8@E#8!J()&0/9"3#I<V>Z.!IF"`>$PQ^5L'N@.D3.!N-TU0D-@3*3=X@9V
+ME$]D@X'R%`!(#F@".,KHO`/0J_5NIL;HEDY*PK.AYM9M,'\R]J_">SM[#IS"
+MYK=3LRN7FS]8Z>/';J.B]!I6/3?+#`-(R>ZX+QC18[K@I,=MV*]*ZSU.C0Z:
+M\AW&%Y:*K[[K3JO+BO)CSD[R:EM;_ANWAK1I=\KM.C420"6K!Z#1`<UIQ`C;
+M===TFC#`,I]<JO\`3Z1:X`C=;-K3../=5+*EM#25K6K02TD05*W%NPIY$A:=
+MMC(W5*WVQPM&U:3[?*C2Y;#8PKU!P)WA5[=@(^%88T#8*JLTCZ@)QRK-NX0?
+M3"@I`R.59IB1/*"1F'3F%,P^J)^JA;JGCY4]$9R,%3:I&@D[%3T],?""@UQC
+M;Z*5[6CA!(VII:9":I7QARJU*P!W52O<-;JSO[J6FEB]N]$S@+G.L]1)!:#O
+MV1=9OP`6@Y*Q&%U:M!,K%R=,<4ULQ]:KJ,Z>RW["GHI1!/NJ_1[<""0"%M4Z
+M;`T8CX7.1M0N*3GB<_"PNOT&LIE[H$!=:]K0"3PN3\8%S@\,)5LU-D_#A^J>
+MNJ?9<=XXZ36NJ(-,B09&%W#Z+G5O4/JAO.GBK3RS"LO&EN.KM%^$[:M&T8RH
+M22`O3K0N\L?YKA_"EJ;>H.R[6U>&@">-RL8S2Y]M"DX3$J1U9K6Y.0L\W`8"
+M2<!9/6^N4K5A+G#'NM[9TV+R^`)`<LVO>R<N"\W\2_B):VE8M=6`(]UF67XA
+MT;FM#:HRL7+ZZ8X5ZHZXU[F5%7<U\@1\K`\/=8IWK`=>>RZ&VIE\'/\`FI,C
+M+'3'ZW2!ID1PN>Z93#;T;[KM>K6Q-N[&ZYFE;Q?2-YRM6\,1NV3]-,@[*>FT
+MG)RGZ=;%U,$;J\R@`?WE,>6:SZM,021"KOH!_P#3]5JW%`$8(*A%&&G"VS6%
+M<VL&#PJ=U;`4W-Q+AN5T%Q0;JG]U4JT&G<#/*VPY*ZHFD9`(*N=$Z@^F0UQV
+MV"N]4M@>!LL>O0<QVMLA6KW.74FM3KVY!`]EQWC'PQ;7K7.\D$GL-EK=*NM1
+MTDG_`#6D]OF-@D&<JXYZXKEEAJO'*/@ZA9]2#ZM,%L\KO.A.M+2@&L`"TNL]
+M-;5S`^BQ;JS-*F&M`$<K6^>$]99RT;[J%)S(:1]UF0ZM4]!D$K+N65&F"=D5
+ME>BW?+B2`N>6=^MX82+?B"U>RS+78D+DK*FZGU(:OZ3L%U=[U)MVP,F)[K.?
+M9M%<505G/5G#4NNW0]`+6M!)(A;AJ,-'4:D'@+G>GO#6#U+294+F$$C(X*WB
+M9(>HU@1#>5QWC"[\J@:<P7X"Z7JA&@DN/U7"^)W.N.JT;=N9*]&$^O/E?BST
+MOICZEA2J%IEPG]58_P"$N_P%=?T3I8'2J`.^E6O^&-3ES]WQS5W]APJIW$`R
+M5:O=+JA<&``F855X,D@8]BO6RC>3J,[\@I2P$Z09XGLDX3).23W0/W'<;H$(
+MP3E,8G?!1`9Q"'?!_P"R!O8@GW2';!1%C@W+26S`(3.:0^1('$JAA^6(B$6\
+MG?;"%HR`"B(@Y"@+4<'@)#\LF4#<MW1-((&-^Y5#YVXY3/'<$)H)"9X).24!
+M.<!L9^B0.?9!F$T3$H)`6')&3NA?#N8'NF)SN,)MW3!'>$4HVQCW"<'./W3`
+M83!L'`4!.;!("8>[3LEI`,28`S*<`:?9`P@`04@)G"1$B-B$6F&_"H;TPGF!
+MQ]TS0=<3&.4S=Y/'NH@CEHS@)`#5ONG`(W`^)3&)[>R*?T@'T@CY03Q)E&V(
+M(WG;A,V`_@9V"(:28R8E'ID0-TY)#2UKX!W2!@QW0)H.DR["+4(@Y*#$P#NG
+M`;OPJ&D`@?NB<2`1&>$((!QD)<G5'V0&R'-C?Z)G-C))]A":D&EI#0G@C&([
+MR@>F)=)!PC,MQ*"F,F!"EIM+GC2TDSG*@N]%8'7;7`1G.%ZAX4N7&M3H:H!@
+M&%S'@SI%-U'4X&>Z[?PCT84KP5BTX&Y7F\MEX=\,O6+_`(W:VAT@PXDQB%R7
+MA.@'W7FR22>5L_B9=Z6-H!RK^!+?8N$Y[+CCQ+8U;P[+H=``-DB>5U73*>1C
+M'98O1Z0$8PNCZ53AX)V4VQ(T[)D1Q[+1H`$P!E5[1H!SSP5>H-;M*S6XMVS9
+M`,%:5N,#"J6K1I_-^JT+1L-U;A%6J$Z5:8`(]U7H@=HE6!M`$JJGIQ,*=CL1
+M.%!1VR-E8HB8,9*C6DM$?4*S1:V1.%#0:6^TJ1U4-W5V:25:[J;]-.GC<F=E
+M%=5XY_55[BY`$ZMUGW-QO!E9M)%FYNL8&8PLZYN"9R@=4)D:OHHG-+C]%BMR
+M,[J=1SGXF$NFD`^KNK56VUSB%&VV<P86+MVFKPV>G5FM``6BVKK:`#"P[*F\
+M/`+EJVI(@?ND6Q/4<\LCA974+!UP3JV6TQNJ!PIQ;-TSI]UO6V.G%U.BM827
+M#G=05K#2=L=UV%[0:&N`;E9-S1;L`5-2+.6/96K6OD"(6FU[64LIVTAO^JAN
+MA#2&\+#2IU6ZTT708,+@?%+[BZ<YH<0%V=_2?5:1)@K'N[`YU-3MJ33PSQST
+M2]JW#G4VN<)69;=+OK=C7.:6EO*]TN>F6[YU,&5D]1Z-0J/T:0>(6KG9#'*N
+M:_#?JU>C=,HUB8G&/]%[CX=N&W%HTC)/N5Y=;^'Q1K-J,:`9X7HW@FF:=%K2
+MXDQNN/,K6=F4;74&`T"#&0N9-$-ZA`&Y767PBD8,K`#`;[5L96ZY1M]-MR+<
+M1V4WDN`("L=,9_(:8X4U1OK.%TG3G6<ZE`@A0U:9#96C5I3PHJM*`<$K49K*
+MK-!/^2J7%/>/LM>K1&8'TE4[FF0#`!51AWM)L:EDWM$`D@[KH[JB(]0"RKRB
+M-41^BC6G.D/IU"YI+2M3I=X'0UYSLH[VD`2"/LJ<>55#FR"J6;=`ZFVI3G"S
+M.J6@+.ZGZ=<RT!SOD*2X<UV(P597"RQR?4K8"8"P[VB0X@$Y79]1H,<3PL*]
+MMOYI`B%N\PG#&HL<*@)V[E:#'M%/)!)&Y45S2%/U1D*M4K@-U2,=UPUJNO<;
+M%BX&)S/NM`NTLV6'T5_FD$#$[K8K5&LI29F%UPY8RX9G7*Y92<22,+B>AU#>
+M^,=.N6M.P71>+K@MMGD/CTG=9OX2VC+KK!K%N=>Y7HG3SW\O7>EVX'3Z0#?Z
+M>58\@?X5IV=LP6K`!B%)_#M[+K'E?`-Q)JDSG=5WP<RW'ZJS>.EY@0"<<JK5
+M?G!)^5VKLB<)&,DH,[`C*E<1.VWO*!Q;I(@ZIP>(4-!R3,),'I(D=Y3EPC`G
+M*$F3/]D#N)VC?A.2YP&HR>QW0!_^RG)Q&^-^Z:#9!B-NX1GU.)(P3F,)@8G;
+M/UA-)D-)$#8*AY$!K6DG^R4XVV288[#Y3N)!(TX]U`S2=XA-F8C'=&S:8QLA
+M<[.V1A`T@-T@9F9X2).F83NRT2`8"%Q((B$T'`)]1!SRF<T@Z<&1/=2LK.;E
+MI=MI^G9`]V9C`[*J$@Q^6?A-)&8*)N4S@-YE`HR"3]-D],P8C8II'=(QI'Z$
+M*!R2-FE,3&THI`&\D'9`"),H$>#.R<9]Y2!W`&4[2([_``J"#HD&"(V*8$;C
+MZX3$B,3GW3LB,$SQA1"8`23JX3ZMH/RG%0:1Z8@S,)C^>50\C5P)2)$$P/9,
+M=$A$S000XG:0BADX[)-/9.V"1.>"B,:1IC"`&"&_*?&Y@?"=X$0(CDII!,DX
+M&\)H)OOE$.^`WMLD0-YS&1[)@?5B/[J(=ADB`M#H],5+EK($SLLX1W``XE:O
+MAMS/^(4]1`$J9<19-UZ1X.L7-HTSGX'*[BT'D6VJ,`25B^#:;/X.F&Z5T=YI
+M9T^I$8;_`&7S[;M[,L9T\W\;W)N.M>6TB-41]5T?A"EY=LR2)A<E??S?$3R9
+MPZ%W/0*(9;TY'J,!:O&+'DXNG5]%&V%T?3&-P,@\K#Z'2'E`RNCL6P!@CX48
+MC1M)#8._RK]!N0"JELW`D-^5>MFR!$K-:BW:#(,+0MP!OM/=4K89VV5RD1GD
+ME%7*)C`&RFI27*O;\*S1&>))V2M1:I``S*LT0,$E04FY$J9KH&!NHJ8OTM]X
+M5*]N!,:LA/=U@![K)O*^IQB=E+5B2M<:G$`D*(ND$3E5M0D[H@2,0IMK20X^
+MB-CA`(.5&R'$#E6[>A)]E%!2]3NZLTK<$"1NI:%L"9A7;>B(`(5TOLJTK6(+
+M6Y5RWMR`)^RMV]NT1'"L,I,V5F)[(*5,1B,=U.UOHB%,RB`,DPK%.@(!W6IB
+MSMD75OJ!.!&2LJ]MW-<3NNJJ46EN6CX5.YMFO#F@#/)4RP=,<G*Z71@;*-])
+MSC,86[5Z<W48F"D;"&@=NZY>KI[1S_\`!S,A4>IV8T'V755+8`0,E9G5*/H(
+MVQ*FE<)U!OE.?MA95-CJESM,E=9>=,\^L0)AVZL]/\.`.U8.%B[IN1B6=H*F
+MEI$+J>B6XI4P1`14NF"B[;;E:%*D`P8XX*2<I:J]3>!1,[A8]@T5;V?=:/5W
+MM#2TF.%#X>M]5?61REYJ=1TMC1B@&B9C=$]FY.ZFM9%,<!'5`[_5=XXJ%1I4
+M>B2<A6:S=1C:%`6_>%4JI6G@?*HUQ.P^5I5VAQA4Z[(;I)"J1GW=.1,02LVY
+MHF3^F%MU&C3@@_*IW3&AIG[J::CF^H4C!D[%8US#:G(@[A=-?T0YC@!(6+>V
+MA#C@&5-MQ3MW.#Y!P<K0;5)9E9_ENIO@"0,Y4[7X@'C95SRA7A]&#*R[]OIG
+MGV5ZX(#9CA4*YD<@+<<K&7?,+V1)G^RY[J-9].OY;1.5TMZV-7[KF^K4GNN`
+M1,$\8A9RGTQO+H_#%*+=I(@]U9ZM4`)@^RJ]!?Y=D&@Y`0]2\VK3JN8,,;)R
+MKXYPF=<GXVO/Y6AID@[RND_!GIU6F&W#@<G405POB=YKW[:8[QDG)7J7X14Z
+MK;*DUV,`8^B[R<R.&?$>CV];31:)B`C\_P!U7&!&HI9_Q%>OT>/V?!5TT3J(
+M#>T&56J@1+3DXRK-P/YG`/;=05&>K2X<*O2K$Z9`!!^4GMTZ02<Y([(W-&WN
+MA,2>W!)4`;B,;IB,Y*>!ID83Z,$E`+A.!*9A)&Y`]D<YF8^J8@S,G[*A-;NX
+ML($Q,)#\T'[!(`<S,I1+H`_T0(&=X!"3L#<X/T*)H&C;,[IC+G:B20@9KO3C
+M.$B&G.T\=DA`W"(@;9A`.YSA,[#2/H%(X2?D90M:)(C$_9`+#C]4=Q1J4M(J
+M-`-1H>,S@[)F$MJ-J`!VGAPWA27ES7N7,\^IJ%,0T1L-X_5!`P-`,C!_5.(X
+M&R>!`<4Y:-.HC?*`($[3E-$$1RB($8R)[*ST9]K1ZE;U[VV-S;,>#4HM=H+V
+MSD3PH*PS.,A,YQU2[C`^%/<FD^ZJOH4C3IN<2QDSH$X$\X43J<F.(^R``T$8
+M(F=DP',<J0T26X!_R3FF2XC(X$E4"TPXB`0<2DW$1D1OS",L(=Q[%,6$^HN`
+M^2H&$1./ND^`8&>^488=,EPC@S"8@#5(:<1GA`+FM!'O[I-TD=C\I.:#_4`#
+MV1A@+8)&_=4"($<HZ+A3J:NV1'?A,QD"-6Z=S&B(<!B4`AH.2[)RFD2?43]$
+M>EHD:D_E,`:2_A-@&'W/=%&29.W?=/Y;/\8']T!#)F3"!L<D[[J:W>:-9KQ\
+MSV0!LMEDCZH(PX3LH=/6OPTZ[2T4Z%=X#L`2?9=IUR_I4^CU"QP&L0#*^?>G
+MWE:U>'TW?E[+;/BB[KT!2=4,;+RY^&WIZL/++_9TW2GBKU\O)D:H_5>B]*IB
+M&,#3``@RO-/`G\VY%0Y)S\Y"]0Z,"6,Q&Q7/.:X8SR]KMU'0V::;<[?JNBL6
+MRT`F,<K$Z.STMG.%OV`P#N3NL$7;8`&(5^V&`Z?H%4H,]0,>Q]U?MP<3\J-1
+M98(`D0K-%IB95<$@YV'Z*:@\GX^4VU%VB,`JU1C"K6WJ`5IK0`,J5J+`VU9"
+M:I4`:/5!0EVD8^RS[^X+=7J@!2J'J-Q!/JQLLXU2Z<SF=T%U<&H^)4=!QUP=
+ME!8:TDP"9^59H4G:<R5'0;)!!]U=I#/;W[*:78K2E+CQ')6A;TAJ$`3ONHK>
+MGD3E7Z%)P:.<YA61+4E&D&R>RL460)A-2!=@8PK%(-@3\0M*DIB`TR,J2F`7
+M)`!V&P2G9^;M"HL4Q(]E-3$-Q^JBIG/]E/3$C/PMQ*"KANP,JNX'=6ZC-\J(
+MLA^)"595>G3#B<"$]6D"V8E3,`#\B/=/6(`(^JFFMLRM1R8$86;U"WD'`6S6
+M[XB%1O=);@;KG9'25S;J.BX@C8K4L-#F`1E5NHTAKU-$'=*SJ^7$F5QZKI9N
+M+US2U<1"JW3A3IND20,*=]VSRSZA*PNMW^#DB>)2UF1G]6K&I<Z`5K^'*9#!
+M(^JP++57N)W!.ZZKI+0RFULS&%,>TRZ:U'#!S")X!&-^R"BZ![E2O`^(79R0
+M5&&9(QW4%1F8C'=6G-QOME05)F`JE5JK`!@&53>S)5^O.D\*K4VF=E44JS-!
+M)5"\!+<8E:=U!DA4;B#@G)4VU&749)(GC*S[VE`+8,E;%8-!D$*A=AIU1OOE
+M-*YZ[IN;4)B.,*`@;[$\K3O!/ITX69=L]4@^\*QJS:.JXND$<*M5T@1"FDD^
+M^RCN"-)!&58Y933*ZBZ).^E85R]KJL-'J&5O=3PUTD?*PJ[8?M))PY,JXKMC
+M6+:6(B),*OU*\++=[FGU.!!,*%U;2T,&_99_7*[OX9P$1&4PIE&+;UA5Z\V?
+M5Z^WNO:_P_I>784_3!(F>Z\2\)M?<]>:3_34X^B]Y\*L?3Z6QH&-*].$_D\W
+MFO#3?<L#R'-,C!A-_%4_\)5.L[^:['*'5[+W/%M\35H#B2#CE5JH!XF%8K1)
+M@P%`^`X:_4#N`N;VHG$Z"T_E&0/=`?B92?ZC[#8)H..(,[H&V!E)H`/_`'3O
+M:00!VF4P&0$");DP!/Z)B"6@QCO*)^<F7$<RA<XP`0"`H&W.HDRG!`9G&(W3
+MD@DN``D[#9(P)VGYA4)H]4B8Y$H@.QVW3-,[`RB$'!*!M(T@YG:2FG$2?E$T
+M8[I%IT$D2$#;@0XR1E(8&'9.$FP.9]TG;",>T)0YTD[X]D`&X+D0@-$B?HA.
+M1(R@=C?<P<I">2-LE-Q,0@:=.YQ\(">WW3`Z<R92CTS'SA(9.1L@+4Z!)3!Q
+MU'8)W`$`C*1#7-)_+`^Z@$O=J,.,)M9<6R2F,S(28UKJ@:7:9_J*JB#G`G(P
+MF!=@G<I#!P9,[IB1VE`@2#P.,)VN,&2,8RE(G_-,T2=(]1C;=0*?3G;X1AQ.
+M&D1*!PSP([E*??Z*B1I,C&R<ENG!!GW0-!:S43B8W3P)B1!4!`D`GO\`5,\G
+M5G)XDI2.\`>Z1D@095(4F/68E(NA^_QE+20(SG8]D[A#@`\N`R3L@=CM.'-D
+M1M*$.,'3NF:`1C]24I]1C"B#IG`](GY4M!H\P0/U45,8!G92VT>:-P)RBQZ)
+M^'E.&LU8C$_9>H]$;AITXP%YK^'%+66DN:.TGE>G]$IP]LU&G"\7EFZZ1U71
+M_P#EMF8XA;MF8`GY6)TMHAI6W:-,`X^JYUN-*UG`S&ZOT(`ET_'94K1I(GZ*
+MVP:>2HTG)D8)D[*2T$B!^ZAI9V<KUHP'.!\HU%RS8("L#;V_=16\-`SPC+PT
+M079[J:VJ*\J:)D\+&ZA<:I;B>5<ZE6'JTG*Q[DDN)/*R!8XET'\OPK=O3U.S
+M\JI2@>TJ]9MDC8B4T;7+1AU?FPKE$MF9D[95>@P`[1"O6H$[X*?\6+-J#J#B
+MM*W`(`GW5&DX-P#*O4*@:!ZLA6"Q2;Z"1]DS"2^",;RDVLTX$2I&:"Z9&RTL
+M'2,84[#J(,`2HZ6DN$?=3!XF`=D@D8R/ZL`*1CHV.V84#*ITZ<;J1KLC:2M"
+M<.PF$%V^/=1.?I^4[*D"<*[-)7QI)D;J*KZA&)3O?)F,)M33)4%2L#JSG*HW
+M^)P%H5R-EGWC06F2L9-XL;J-32#E8ES=Z'D-,0M?K`Q`.>"N=NZ9+BX$X7#)
+MZ<$M:^/DDZ\]ED7]TZK5#9QLFO2]F!RJUI2<ZM,<_=0L=%T"D"QN`)72=/;I
+M8,+$Z*P-IMANVZW[0[?"UBXY+=`$NF,*R6:LGLH+8^KG*M2"(E=,7.H'M(DA
+M0/$YB%9K8!C*K$R2(SRM(AJ06D'M]E3K`D?*N/@XE05&C/8<H,^X(F#B%3N6
+MMTDM_17;QH@F=\`E4:\G!/'=*U%.LT#X&%2N\B>>`KU;_P"["S[P2^`?JC3.
+MKB7$[$9^JH7%,:'<DK2N6@`DJC<B!$ITK+>0UY]E!5?+C[*6[:0XF8$K/JO`
+M>?4<JLW$-Z&$96)U!HF)^/=:]T\%N3@+&ZD[USJQ]T^//E-51KO`>0[A8OB>
+MX:*+@2&X[9`6G6,N=J<X97,^*;@.+QJ)SF5OQSEFM/\`"JFRKUD.=!@_W"]X
+MLGLH=+9IWT_V7A?X1@#J`<7""<#[+V,UGML(.T?9>GPS^3Q>>HJUZSS734C*
+M'^-I_P#R+!N6N-=YU')[H-#O\7ZKW/*^7:WY@V`3['=5J[8)])'"M7`!)*KU
+M-);.?A<'N5WD;<E#I&Y'V1G)W.$Q(TX)^J@"0';?0I$X+I(G$)P`1F04SVN`
+MQA`&HDXF$^II$"?JB(`=.1^J8P3OCW0(E@,M)]TL:I((!2(!Q'WQ*38`,EWT
+M*0.TMP&X]T[B`,Q.R=L;[RF@3B539PZ/C9(N]\;0FV.GNDYHWV0+$2#OA*I&
+MF2A`$P#$(J[FOJ:F-#1VW40AI#07&(]DB0YL`3R7<I?U>K./A,YIX./A#H+0
+M"(V^4B2T07$CLG@1G<;82<UIYD(I'8P=T(@1+D\#/JE,6R>ZH(")@X3.+=)W
+M)3_T[(7-,?FQLH%)$PF$\$%/I($2DSG2=MT#`NDG5D^Z6VQ`QLD0>=NR$P!W
+M^J51$_U2,\2GI5#3,M,&(D'9`UH.Z<@!`MR8.V8)2/M@]DT`'O\`!2`$D;_*
+M!QN<A.`(()CX30=P0B:#J.HH'+=X.R;8C$_">,Q&0DYL8@;;('#LG`@IHSF`
+M/A.1C:#O@H3ODX0$T8P`4B)$:1/>4FMS,.A)S9=@[(@F2/\`)3V7_/;C"@`X
+M*L].$5`,CX18]'\`:139(X7IW0A(;"\R\`L,,#B97J?06AM-N%X?)/Y.N^'5
+M=+@-:3QNMRR`+1DQ&%B=*@M&(6Y:B",;K%:C3MP/+YV5BGAH[2H+0"/[J<8?
+M"RTEI.@C'*T+,`JE2:(SLKE"&MW1J+3<`DE5KNL`(!QV2K5@&F52N*FL0TY4
+M$-R^2294%>JPT@UM.'3.N=PFNW$-,G94PYSZ@RB=K5`-DP9/*O6T-V!PJ-!N
+MD@;*4U-.2Y1J1KTZK0T$NA2_Q8#0)(GNN;K]2T#33,RL^ZO+UP])(:<[)MOU
+MUV[=G463ET0IJ?4Z9P'97FU"^NGW'EZX.RZ+IM"Y>`XN*;OX6W&?77TK]D@Z
+ML0K=&^8X8=E<U_!5A3U:R.52_B;BC7(!)"F5N/:XW'+IZ!97$M!+E<I%AR25
+MP=GUBJP`..GY6]TGJK7#-3]5<<I6K@Z$C`@!."X9;((4%O=TWM$'=66%I_JE
+M=8Y]&U.)R3E&S:$P`W)1@8C.%-&PAP)_,F<^.4SF&)&%&1!&5`U0^J95.]!+
+M294URYPG*KU'@CU'/99JQC]3I%TD;K%KTR)&)*W[_208"Q;W!)W]ESR=<:RK
+MVAJ'PH[:AIJ`E77Y:3*%C0'3N5AO:[T^`0MRR/I$\+$LL'?"V+(@D$'A:CG6
+MI:C$85AS@UN`%6M.8(]RIJH],S"W&$55QR=E`70"#N5)4V)!5>JTB3,%79H%
+M5\'A1/<'#(^O">J8YG]E!DDPJF@5@'-@B0J=S3GLKSF0"3^BJ5ORF/W6NS;+
+MNF.DPJ%<<1E:=WALK-KCU?KA--13N&!X^%F7Q@XV'ZK6K2LV\``D@(LK)O2W
+M<A9%T(<2!CNMB_:",+)OB6@I9LM9]S5()@0LV_?J)$3W5^ZRPZL`<+(O'#6[
+M,]HX68XY,SJ3RQCO+S\C9<;XCJ@U<Q._^\+INN5Z8:0V,\E<5URO-0EIF#E>
+MCQSEQSZ=W^"[7/ZJTN_5>N=>J"E99($!>-?@<[5>NK:X`"]!\47HJ4"P/]EZ
+MO!/Y5X/U%Y57]0I%Y))W3?Q]+N5GTM)I@D$HH9V*[^S$E?/=RQH&.>.RK/TD
+MF6\<*U6>X$_E^55KETB2`2N3U(@!JDX"&-1_9)Y)=O\`5($ENXQPB&<T9C/U
+M0F=/?W1N)`$D9V0:N1PJ&`,;_JGQ(/"=CRUI(`AV"#E,QS2!'?9#9CET9/LB
+MTZ1L1\*2N^B7@TJ98`T3J=.>3L.4S3+0[3M]D`P9V/T2$P2EK)))W]BF:X:C
+MG`0/EISRFV/*69$[#ND2,`2BF&<@Q*0!W,E$8G/Z)AC9N_,H&VD$2-X3-ATY
+M._=$8,<?)3:1N9@\DX4"&WMW"9TS.93M@DC8(G$`?"HB^=BCHN+'!['9;D'L
+MG<1/I!CLFY)@XX0/4<ZI5<][M3GYE#'L,(RYI,B"0$VIH,Y01P7/P9/LD#P?
+ME.^!$RWL4(TSOO[IH.<QD3RF'<D$I2#B-T[2'`P<CA129G)A"=AV1-(C3CV*
+M3O*X)_U5`-WA/!!W"3@`2)3P)WXR@<`#U#CND#!S]D0PZ&_E&Z0WWV[J(;?M
+M\IR(>,[^Z4,F&X!Q\)W@#TDS'(0,R(W@^Z3BX^WR4WHT[_3**6EH&G(Y!.55
+M$2#$-(')W09`AN?=)L3))QC9.<&<91#AW$X"N]*@U@=PJ;6D@$`1W6GTND&D
+M.QE9H]`_#_-8`#CE>J=`TEC,%>5?A\0;IC2['*]7Z""UC>5X\_[.KING;@<+
+M?M22T2L/I>X&WRMVT:-(GCA<ZW%VW.!A6*8+G0H:(!SL%;MF@0866XLT&0P<
+MJ1QTB04-(#Y$(+AP!@%*H:SS!(*KO=IR8E%4<#Z95>X(#42JUV^7$3A16U,%
+MP=ND]NNI`,@*8Z:5/=-$A[BJ*3,X7->)/$C+)CB7[<)>*^JTZ-LXO>`!LO)/
+M$G6!>W[J;JI%.=X6+;O4>KQ>/?->A>'_`!11N+R7/G,1_L+L_P"-H5K::?(7
+M@5O6I4&MJ4ZI#VKL?#_BNG2L]-:H!A;PMG%<O-XK>8V/$76V],OA5J&&3NM[
+MH/XA].9;-#Z[!`Y*\:_$7Q"WJ5?RJ#O2WGNN0;<U!@//W5F][CI/TTRQGMV^
+MIJ'XAV%W6;;4:S7N=L`5UO0;47E`5WMW7R1^'O5FV/B*E5K/].Q/9?6'X<]<
+ML[GIM)K:C2(WE+;E=9.'E\7[7]6A?='!;+1E46V]S:O],D+L:9I5&#U`SV*!
+M]A3JR"``LWQ_@P\UCGK+JSZ9#7DA;O3>JLJ0-2IW'A[S:T4P/E4K_I%[TT"H
+M#+0?=3^6/;M,\<G7T+AKA((A6:;Q&XA<7T[J;F0UYCY*W++J#:@`:X'X.RZ3
+M*5FXZ;3].GB56JF780,K2,$''=.XDB1"5-:15!J:>ZJW+0`3*GJ.TD@G"AKP
+MYF%C8RKQYU0`LR\;(,B/=:MY3AI)P%DW67;[_HL5O%2TG5$?5/I/,(B3&-^Z
+M"8=!^ZQIO:S0QMN%J]/.`0<E8]%P)Q@E:O3#!]E6:VK-WLIZ@!$E5:#HCD'L
+MIG.B"MQD#Q!.57K&3A2UG3,*"I).TJJK5"2["'28D[*7TAV<E`YPV_NM1FHG
+M.)&^_NJU?(CA3U7>G.55NG#20`M(IW+001NLZLT`GM[J[7<1,*C=.,F/T15.
+MY=!,RLZ_@L)!A7;DDM67=O=M,@H,^NTQ(*R;W+HB/A:5Y4`$;$+*NZX)))D*
+MEJA?._EF<!8M^ZF&;Y&X"UKYS7,W'U7-=4J$^81$#<K.OPY=L#Q!7,.8'3V(
+M)"X^_+JI?.0<96OU^L#4>`[/"PJCCHYEQR5Z_'-.'DKT7\'!Y5HXC[_5=3UI
+MI>#J)$9PLK\+K`T^@,K3EXG]5<ZS<^LM8X%TP0%Z/#.-O!YN<DEO3;Y+<\*3
+MRQW5>E5'EC40"B\UG<+>DV\%N7;-('IDY"IU6'))&#RKE8>C42T@=U4KQ,<3
+M*YO6@)B1B"F<P`'41V1.T@X(S,SPA(!F2)'=$H`)@#8<IG[_`"C'Y2.^R&`2
+M8B/<HH'!LB`?A$S0:<:I)X[)$>KO"36@/@=OE4.\$'26P0<@J>G7;3MRQE*G
+M+CE[A)^D[*`-`)./F=D0D-@$`(&`],DC!2(;J<B:T?$)B,[1]4#5(:[(V3$#
+M223'PDX;(@R8:(S(W4`B08#1(_1,_#>_`1%HG83O*8-$@$?7V0T89:?G,)X(
+M,C'9,1C';=2.CR\B%0,Z6D#&K=)Y=`U2G#89,?FV/=(M$80,9)B4(:?>$^B1
+M@0$;8TF9S[H!#009"8-_I.(1N:(=F$+FD@#4<\H&<P1!S'NHB(=)^REJ.&F`
+M[[('#83'*B@<(.^R1!=DF.,(R"'&9@]BG8T%QU:BT;P@%H+=."/A-^5^[H[J
+M2&D$"?JA=$S'TA`TR?S"#WX1%S2(@`]^Z%D1S*8;Q.P0&#Z3D"<)-TDDDXW[
+MI/:)P<;Y1.:0R2[=$"V1L[8X2))F#+DW!.K=.T`.W/T[H'@D3(2`)D<$)JAU
+M$Z73/!2:-,912CU8'^^Z/2(@B#V*`CTET@'@#E$,G5JB"J@K=LU/\UT%C1_D
+MM,0.%B]/:75=/?E=3:TW"T)(PW("YY5J1T'@`?\`JVM$"<97KG1)\IN,PO(O
+M`LBZG'SVW7KO0/\`EM)7ES_LVZ?I@@#/ZK;M1L9C&Y6/TULM!F%LV[8;.KA<
+MJW%ZCF<J_0;GD^TK/H`F#(RM.S;@9E9;2%Q#-B%4J23)5FJ[$;0H'9$'"NC:
+M%Q!R!LJEVZ9$[JQ<``0%4=)))2I"I-@:MH69XEZBRUMW0[*L]1O!0HDD@0O.
+M_%M]<]1N#:VY)DY/99SRF,>CQ>/VKCO'WB&XN*[F4G'1/=<5_P"H=4)=J))^
+MB]1;X)-2B:M7+CG*Q;OPH^WNH#-0!Y*S/),7T,)CU'-65.N6B7[9C=/=U"PP
+MYQ`[%=)5Z=</=HT&6M$``<*.MX4O:C"]M$GY*D\D^MZD<9=/<XZI,'&^ZJ5-
+M1$SD;KL7>$KL/=J88!'U4'4/#%U;VVMU+*Z8^6.>>,_+D[>L^G4EKB,[KN/`
+M7C_J'0WL8Y[WT@-B<A<;5I:7DZ1`*C:)$?7==;)DX98_*^EO#7XT6!#65ZP8
+MZ/ZCA=WX?_$WI=X6M;=TSJ'^(?YKXQ:7LR.V#W5SIW4;FVJ"K3K5&Z#OJ(4]
+M;.JX7]/C>GZ`>&NKVUZR6O!'L5J]0H"[MM+&APXY7R9^%GXM_P`$&6_4*NGC
+M43@[^Z^A/!7C_I'4K&F]M]2!C(UC_-7'/?%>?/QY8)NI]*+=1##J"S)KV57)
+MP/==1<=2L[QYJ4GM+3[[K!ZZ^@X$-<TGY6+X_L,?+9PL]/ZH*@$.RM6C<AXC
+M5MA<&XUK5WG-=Z>ZV.C]4%0:=0D?JL[LXKO-7F.ANJG:%&:GIR1\JLVL'4HE
+M`:@.)]E*:*\+3.HX65=,TM*T*YEL<*A=G$AWT6:D4:DM)(Q[*"H\`8E'<.WQ
+MD*M4J0V94;3T7CS/E;72WN(#L^ZY^W?_`#-UN])&IN^R%;5&IM`^ZD+B<'Z*
+M*W`@2,J5Q:<R%4@'1F/^R@N'%H($J4D..\*"JZ'9=ONM0JMYD/DF4!?ZIVG=
+M$\"<"`@=I@P<JQFHZCH:"3OPJM=V5-7C^DX/=5:T8$_Y%:16K'(RJ-V\3\*W
+M7=B"0,K.OW`M(!$HBE=U0V<Q&ZRKZN`XD#=6[Z9)+C)Y61?O+FNC_LK%4.H5
+M]6RS;EY,Y)"N5PTSWE9]\XMIEJM8M9G4[EM.1J]BN3\17H-+TC2)S!6WU60!
+MDX).2N.Z[>.8[:`PG(S*N$Y2ZDX875GDO<"9Y`5*@WS;UM!LET]X*>^KN=4E
+MHEP)VPM#\.;=USXIIO$PS,_0KU7C';S7F[>R^&Z!LO#5*B['IR5A=4JL-P7&
+M)GX6_P!8J.IV082`(Y7%=0JDDN(F-EZO%CK&1\_+^657V=2H!L2?NG_XE0_Q
+M?JN6>^7DR<^Z;6>Y^ZZZ:]8X2X9',G;<JK6:7$RT;8"T[H>2#Z!K/YIV'^:J
+M5:[)E[6O`P1IC[+S/4H5`X"=B@:(SOPK3G-8QX:^6NSIC*KD@B>WZ(!J%SW%
+M[@.V/]^R",_F@SO*DC;4=QE"6AQ!(^@4`$&`"?@=D_IW=O\`*<S$D;93;'V/
+MU5!@!T^G_1(M!RUV)(]T-/)B?U1,(0L,"=X`GW3M$&3M[I/<"^-(`X`3O:0=
+M+I!!RWE#02-+CS'9,"X8.W9$TM!!+2?JGJ5-1+G'/=%`!IW$RA?!='T4D>DD
+M"4QT<S@930$3L"9&R,MD#@./.R8:"8[[IHT8RF@XGD;X2SJ`)."B8!&3PB+1
+MJS.1B4T@0SW/V3B0=XX12)TI@[!$H(W[\DE)[B223]E(`#."/=`\N`TF.\HH
+M,:M\$H07$0<A.';<G9)D8!X13.U9V^J<.#1C20?NBT@R)`"8P0`<'NH@2XAT
+M-/\`9(O!.70GX!D&>83>K,"1\H&:]P)(P"$W!).4^\"82()$3@I5.3@9D'A%
+M4)D&2!P/[H&M`=C[IVN,^HC!W1#28QGX^48)W:0.P3:0,@X3L#9&H2#P#'ZJ
+M@8(=)@E.Q[PSRPYL.()!'(_[I&(Q$#&R1$G3C3V"@)@)D'2"9WY^J1!Q(]Y'
+MPF`Y..Z<CU`MB"9@H-'H30ZX)+=PNF+'MHC2L;PE0\VKS/M]5T=>GI:!N3L.
+MRXY]MQ>\#S_&R-H7K_0!#6#;"\B\$M#;_3.)V^B]=\/D:6CLN&?:NKZ61H$#
+M$+6MB2(_99'33D"`?JMBS:/3&WNN5;C2M&@C;]%HT@UK?=4[6=H5@XGWX4;.
+M\->\F<=D-=H&>>45(-&\R%#?/`9RFH6JE5TO+0=E!5.AA<?U4X#34))^JQ/$
+M]\*%`M!S\J6Z;PQW7.^-NJ$%U.CDS$?9#X/Z4W4;FHSU.S^Z;H/2JO4KXUZC
+M26S*Z\VC*%`4Z8V[+S[W=U[Y)C/6*%VVF&>6P?943TEMR\D#=;=G85:]3;=;
+M-KTSRHD9"7^79N8].:Z3X48^MYCV8/9=E;^#;+^!DDZHSA6*#&TFB!GNIA=7
+M'_*\PZ2NF,QCCE<KU7']0\.T&U7`-!,[KA_Q&Z>*'3W,IXC$KV2YL:CJ+WR`
+M<8*Y'Q7T(WC7`M)XPLWCITPRW>7R]U2VT5G`;?XEDUFAH&73)7K7BKP15I7!
+M=3:8G:%Q_4/#-Y2.H4G.S!PNF'FDXKV98XYSAR]-Q>T3.,J1N@X!,QNM"YZ3
+M5MVZGTG"/LLRK2J-,220N\RF73SY>*PJC@&2''.)'T6MT+Q'U+IM1AM;VJS$
+MEH<8^RQ'3N1'M$)WD:,8'9:NJY^M>P^&?QDO;6W#+ISW$#=I/WW6YTK\7&W_
+M`%1E#4X,.[G'_5>!!Y`#I$D3(&ZEMKFI2>"UV1V*SZZG%<_VL+\?973>HV_4
+M>EC0YI,<+.I7KK._`+S&VZ\6\`?B(ZRMA2KU':F",G??W6[?^-FWEXTL<2'<
+MA9\EEF[VY>/PY89:^/=^G7C*EN#KD0KC*HD1LN'\$]4-Q9M:7#@[_*ZNA4;I
+MR5REVWE-+I=S,A5;P#08&/V1!YU3M*KWE26D?LCE5"[AI,;*@^H3G:.5+?U#
+MF8*HEQ\S<%9K<7+,GS02<%=)TD^F`87/=+IEU0?JNGZ:`U@GG@++5:=-WIP4
+M-1QA,PB,[H*AR?=:VD(N[[%05W<3*3G9CA05'K4*%S\\QW*C>^!_JB,<S)5>
+MX<!@G"U&*BKO.HSM[JI7J;F?U4M5Y,R#]51N'N&6XG?*J`JN`)^51NS&21]%
+M-7>8D[G=9O4:@`,.CE61%;J#Y;`B?98M[6`:X=^2KMW7#3_=8O4:I>Z!WE;2
+MHJ[A$G8K(ZE5AKAJGOE7;IX;1(<[/>5SW6;EK6%PF7;DJ,=UG=;N@V3/I'9<
+M5UJX#I@2"<-E;?7[II9`P`5QO5;B:CSK)/)7;";Y9SOQ1N:LO'IDCV7:?A/;
+MG^.%PUD!HWWX*X>QMW7%ZRF&DS/&Z]L\*=(H]-Z*P-/K(EV9[_YKOK=F+R^3
+M+UQVGZ_?L<!3<<M^O9<CUV\ITNGN/G>H]QM_N5=\05A1N708U&%POBJZUO(!
+M)R9A>SC%Y<,?:B_BJE3U^:&SPEY]3_YPJ%NXFBTM+H^`CEW=WV"Y>U_+U^D=
+MGXR\-]/;3\QE,LJ'AIW7$]0Z8UCR((/*],ZXUUQU`TW?E'U4;NC6M>@T.'U7
+M.8UPGD]>WC]W1=1`U-)CF5"_2*8,[S(A>H=7\&"Z9_)<1&=ES]WX!OZ;=37A
+MXY$;*;=9GC?KC3$("<SO*Z]OA"I3=_.!!(V*AN_"=<#71W/!57VCEB0!F<I2
+M#CGNKG4NG7-G4BM3<!W"J,;)+9`GNG#1SIU[X/=+T$-TM`(W=&Z?T>G&P[I,
+MR<'[!4,79QQC9.(F7O,DIZE-["0]KFD\0F@3.<\(&!&0#)E,2.,RB:&YU`F=
+MDTCL80(#G>$PTG`$0B@2E`T[01RH'I`!DDB>ZF)HFU`'IJ-,&,Z@?V4&S!P1
+MN40B<';.RH<@#'VSDHGZ0"21)0D@SEL>R9VEP`D;=T"D$$`1/NA><!H?,)P0
+M<')X3`$/,('80T;QE-<5"][JCX)=V$)8\N5&X@C`R/=`+LQ&D0B;#3L(GE"X
+M#&1LF`':<**E!/&W*#5!+M2?<`2?9,6P"`<3L@0$\X3%N)B.(2]H'W2@MP8S
+MVR@0`#`G@AA`&"A'[>Z378.<[9*!H)VPG$#!PD!P?NEIF3.RH36@8)!E2!H<
+M,`F/=`W><%2-<6[8/SNH!:!D@$CY3:!S(/.$5327$M$#M,H#$D"3]4!M!([_
+M`*I])#])!!Y!3"-')?QV2+3.<(.H\&4PTS`&)(717=-C6^IO')6+X+HES0X+
+M<ZDUV@/.RX9]M1;\%TP+T$N$+UCH(_E-D$87E?@5A-ZQN"<KUKH;1Y;1,D+A
+MEVTZ'IHV&J%N6#1@%8O3P0=]^ZVK!IQ$@=ESK<:UH,3(PIVRX`<*O0/V^5;H
+M3IE1H4%C252N*PIU0_2UPWTNY5RZ=%,R8^%B7U:*AS"59-@OKEM.B7%WJ/9<
+MK4I5NJ=3\O<3PKW5*[GU0P$$=UM>$[*G2?YM025RSYX>O#'TFVQTKHM'I_2Y
+M;AP"IN:*M<ZFR"KW6+TN8VDQ^.<H^F6C0SS7%3+FZACQ-T_3K713D`2KF'&.
+MW"JU;JG3)9J$!5+OJ]K;-U/JM[0L[TWVTG@-9`!D=D5&EJ."!]5P'B7\0K"R
+M:[36:2/J?V7'W_XK=2)BQM2_$!SC_HF.6VYX<[-Q]!4*376Q:^X$Q.RSOXJQ
+M94?2-1I=L25\U=1_$[Q@7.:ZN:378AK1_DI?"?CV\KWX9=522[NMY7C<A/TN
+M7VO<.N6-I=UWFF`0=EC5/#=*H(\L$'V1]"ZD:U)KM0,A=/T<4[BHVF2/4N.U
+MLN,>:^+/!U&I;.#*0'NT+R+Q)X9N;*LX%AB5]8=?Z53IT6N:X%K^.RX/Q+X<
+MHW#S_+&<_"L]L:WXO+^7S1>652FZ/+/RH1:U0X^C=>T]7\$->\%M,#/`_P!%
+M?Z1^'=@*7G/I^8Y@D-=^7]EUQ\UO&G3.X2;>"5:%2GAS7=LC*K.U,<=M)^Z]
+MF_$;P>RM;:>FVK35:9FFWCM@+R:^M*E&X=2J4]+V&"'`@A>B>25QF,RFX73?
+M56;F`<+T+HMK:LZ<7ZAJB?=>>VC8,!H!'NMNRZC4#6,U&!N)6<VKX[9.7M_X
+M:W3C08V9PO1;![B!J.5Y)^$]VUP#>8WE>KV-352;F)"X8=/-Y>*O/?+("IW-
+M0EN\2CK/AF<*G7<)SF5IYZI7U0P1.Z@MP7P3GV1WCB7'&$]AETD$_5*U&QTE
+MD$%RZ*S_`"?V67TJB-`*UZ#2T`]ME%3,;Z!Q&Z"L1IV1>8,Y^?=15GG3GA6*
+M@<<^RBJ[%&^I(Q$*M4<2[E6):=[X=&?E5JQ;$20B?4P2JUQ5):)@?"TQ45P\
+M]RJ55X;JER*XJ9+MRJ-P]V2#*H"ZK9*R>H59!`/W5B]K2>0LB^J03E:D9V@N
+MZI#?4LN[<8)!W5BYJDR#.-EEW=:)DA7>F;RH=5N]!+3D+F>K7;7`AQU#D+6Z
+MS6`$G\IW]ER75GZB'`B)5QA(RNNUAJ(#L@[^ZYVYESBX!IG`!5[JM8/J.:2"
+M>\RJ=C1=5JZ&YU87IFI''+FNB_#OHW\5U-A<P1$_&Z]0ZC3=;64%T0(E8WX=
+M=*=:6HK/;ZG#D*]XPOV,MRRI`G?*Z^#'=V\?GRW=.!\3]4TN>73O`=/^BXR\
+MN]=4OW,_HM#Q;<L-PX,?,GDK$IG^9G29Q*[9WG37CQU&K0)=2:X:A/9%![N3
+M6Y`HM!,?5'+>_P"JQMWY>K6W3!<.-2X>XU%H-Z;28T`-..96YTCI8-/43G=7
+M*]FUHPI:\#EZMI4;)8^?91:'-9_,9`_=;M>@T..<+/ZRP4[7,$\*;-;85:T_
+MC+OTLAE/<R@%FTUWAK9#$[>HNMP6MI2J5;K+V/-3RW#V"LARAZST6WNF%KV"
+M7=PN(\0^%:UO4+[<2)VR?[+MZOB&B7#S*+E`_KMH]_\`,C3&Y"GK^'3'.QY7
+M6MW4ZNFH-)&(.$#6Z3(=MR%W/B2PZ=?,-2W+14W[+BKVVK6]8L<S8[PD_P!=
+M\<YET9]6K4@/J/>!MJ,P@,EQ2+\>EH$)M3HB/]56B>-O5MV3AIQ!W33[!(.,
+M[!$V<9R8$>R4NT@H2XDF44D#;]478>9G?L40&-\?"',_ZHVF#,1[;H'8#ITB
+M!_=)C!)`$^X3`N<Z`W/ZHV4JKGDMI.).ZB;@1,8@<(?ZL*=UO6:#+'`*!\ZH
+M<"JNX8<QD'A`\2["?4T"8(E,]P(](,G=#87"!!'J2:V3$'/*=CF\@DI?U;%`
+M0;'R$+@.\%&YS-,^W`0AS2W$_0*:-E3:/_Q#W3/(G@)PX#(D'YE`7!QW**9W
+MN?LG.D-RGJ5`8@#TB)0:P3)X0/$@)0?@)]0G&R3BW$?H@-P;$S,I-.DB=O9`
+M"W3$[;82U`YF(VP@>#J_*G<"3B#'NF+F@"<%$"W2<CY5#!H'])4E,'S(.!*C
+M8YNTX4U)S-;9<`/=!V_@YH;:`[GN"M+J$:2"J7A,--C(``*L7[FMSJGA>:_V
+M:G3:\!,+KO5F?=>J=$PUIC/LO./P\I:GDD;<KTSHX!(@B%QR[:=!8-#F#=;M
+MBV6[!8UBW8@X"VK+`S]I7.MQH4&D-C!5JD1$QRJ=(G?5CW*G+@UO/U*C1NH.
+MQIG98/53II.).5K/<ZH[=9'7ITZ=62=I6:Z^/'EA])HON;_(P#RNUITZ=M:#
+MXW4'A'HU/RA6>-U9\0!M"F6@X"Y:O=>GVENHSF`UKD.X'"N]6ZK3LK')&`L2
+MCU!E%I).W*X?\1O$%9[#3H.=]%-Z;F'M4WBGQZRA4>RD[4Z8@'_1<9U#K_6.
+MK.TAYIM=V_[+.Z;;NNKXU*HF3RNCI6S:8V(Q]UC+6+V888RZ8M#HQJ.#J[I)
+MXW72]'Z=;4:`UM#BW]$UG3!>T`\\!=1:VE(V>&B8F96,;<JWY<M33C>I=,H7
+M37%M(-DKF3T?^%ZH"#&<+OKRF*3W`-()Y7$>+;Q]"\:[8`Y*WC;T87EZ]^']
+MH;JFRD'0T-G==)U.>DO8\5</&/9>0^"/';+*BUKC!;B94OBWQ_5NS.LN<-HV
+MA)-37USR\65R_P`>K'Q#Y\,K5AC:2KEM9U.HTP:,OC:,KYLNO%767534HEQY
+MQ*[O\(OQ;%A<ML^L![6N(]2W,;]<O+X[C/XO3[FS-$^5<42UW8A36%"DRF0X
+M@`]U<ZUXCZ-UGIC*MK7HOJDRTL()`6795]>IIX4RGK7+&^^/*+J-K0\Y^FG@
+M\B%Y'^+'A9U6[-]0HQK)+H$?V7LKP"X&"8[Y5#Q#T^E>6I:Y@)`X"U,JL_AE
+MN/ERM;NH5M&W&$SG%A!'!7:?B%X?-A>NK"GAQ.RXVY&C):"?NNN%]GJLFMQZ
+M3^#MVYU4#)(`PO;.E5?Y`)'"\)_!>/XDQOC9>Y=.`%N.#"QCW7A_4]IKFL9P
+MJWFD.)F92KDZL$2H8=&ZUIY052Y[HTX'<J[TJB9'(/"JL`+S(6OTEA=&F%+R
+MU&QTVD6P3VX5]N)B3"BM!I8./JCJ')`D(L)SA\A5ZSW.$94PES<E07$`Y5@B
+M+AM*KU7[G.5)4(C4#E5JAF3*K-15'G3NJU9\C.?E2U'B#PJ-T=M)*L9J"O4.
+MHJG<U1!X5BN]K1G'O*SKVL)QL5J1*K7E3<+)NGSL=U9N*AEPX'*S;JIZG9$+
+M<9M4KUQ;,;+%OZT.,DRM.]?.`?N5A]5J,:TESC[*5F,?J]P\M@@QRN8Z_6;2
+MID`DK<O[F9,;#>5R'B"OYM<Z<&5UPG*Y<,BLYKZAF)/*Z#\/>E5+SJC2&RS<
+MF5D6W3:CR):<G=>N_A;T5MOTQM0@A[ARNEN^(XYSUFZZBUMJ=I8-)(V7EGXM
+M]3+'FFS(G/9>D^)KC^$L'DO&.Z\$\?=1-UU%X#@9*]N$]<=O!)[YN?KU75GE
+MSC]$]#)AT.4#!!)@94]`MU`M])YDKGMZHV+=H\AL=NZ/2/=!;$B@T3PCU.[_
+M`**.D?45M0T4Q&,*/J-.*1(.0K]-N(4?4*8-J9WA9KP1S=.F*E4DF0J/6;8U
+M(80(6U:V\`F/=4[JWKOJDM<T#X5HY>O8-&/+6)U:TA[FL!E==?VEQ@4W>HGZ
+M*B[H]:"?,:2<J[9U8XFO8F"33#C[=U4JV&J"VWJ./,-PNZ_X34UD/=3(`[*I
+M?V[Z3'4F:)(_I!E7AKVTX6XM'3Z:+A\"52O;'63K9QRNO=;>HSF3F6_Z*K6L
+M2]^DAHWB$TU,G$U^E,V#=NRIW'3:@P&Q'.<KN:G209`U$A5Z_399#HD8W33I
+M[N#JV]6G+G-/91D8,@CV7:U>E-."R6QA4KCH#:KCY8R3QNHU[1S5O;5*];12
+M:7$]EOV'ABYJTVNJ,/\`DNU\%>'+6SH.?5HZZIYA=*;5M8M92HD1R,*V:<KY
+M?P\YI>#GZ-;F&&Y(!2H^'Z#20:1WB)S^Z],N[#RK1VH9/SE5K'IE%C-3F^LP
+MI$][]<YT#H/3"]K'6GU)*ZRT\,]/`&FB,J3IEL&WD1$8E=)1I!N,1&W9,F)=
+MUSQ\,=/J`M?;-CZK+ZQX!Z7<L,4-+CF05W(9$@#*;RR?21G98;FX\0\2?AY7
+MM230!>W<>RXWJ'2+RT>0^BX#.87U`^R;4'J:"L3Q#X5M+NB6FD,[8Y3==,<_
+ME?-;VEIS@;Y0$D#!F>R](\9^`JM#55MFN,3L"8"\^O+2M;5C3JM<TCN%9DZ2
+MR]`+2&X>'2.%$Z0<'Z(BT#(G[)B,SJ)^55"X&9+OT3C3J.N8CC>4[L`2XSW"
+M"#/O/952@SB)2(.=@"EDDP=N2E!F"5-!S&H$'YGNDXX@"`G,$C(R4H,Y('8(
+M&D:<8*6(.<!.0-(,C/"8`C,-A`[M0EID>R9L`?F$)5!)&!\)RXN`DM$"!"&B
+M)VV4U#);)D_"KM!QLIK=L.;)[0@[[PN\LL8+1D0K5;0^L`=_94O#CW"PV`("
+MOV-(FZ$B<KSWMJ1V_@:CHI-.,Q*[_HU.3Q(7(^&;;R[9I;'==IT%I)!WG=>?
+MMJ.AZ:,`&/JM>U$#(!]UG63)B``5J6W&%ATBW2$-DQ*BKO!@$A$ZH6L,B<[*
+MM2FK7C@<)5BU1IC27'D;KG>M5F_\0#?Z6E=)>'R+0_\`V]UP?6;E[KXEN=.,
+M+.7$>KPX[=M9=5HT;)H:1JB-UG]2O/XPD`R5SEK6K5G`$D#Y6WTNAL9RIOV;
+MN/HJOZ:Y[#C#ED7WAAE4Z],'.05VM-@TQ"<T6:9@9"OI*Y_N91Y77\-MLZVN
+MG3@9G"HWS-+2US8/Q*]2O[:F]A!;L%Q_B7I#7-+Z8((,X7#R^.]Q[/TWGYUD
+MP.E-+GAX$`+>I533`@[X61:L%$QI,K1H5-5.<_!7#"/5Y;LUX!4<97(>-.A"
+M[I%U+<<+IKRLYK@!LJ3[C,O$3W6\;-[8FYT\O'2;NA<Z#J`"Z?H?1`ZBVK6>
+M2#C*W+NE1J'4*<&9E2L#!18QQB<+>7DV[;W!6?1+048+`0<KFO%7AGUNN;6F
+M6B3M*ZZA=0P4VF>)5_R`^U@P9R0ICDX7^-V\M\.^(NJ=!O12KU:A9.Q<5['X
+M-\56W4J+7-JC5&1J7F'C?HYKZZC&Z2V<PN;\,=7O.D=5;3\UX;J$S*ZY8S*;
+MC7KM]26EPVJV0<*VRDUX@E<;X$ZFV_Z?3J!Q)+05W/1]+HU''NN.-<?)CIP'
+MXI](\RS?Z>"05X7UND:5RX"9E?47C^WI5>GN`'J((V7SCXUM'TNKN9W<?W77
+M&ZR;\-]L=.F_!JDYM0/)[?5>SVE0>0-UY?\`A+:Z;5K]($QO]%Z53=%./9;Q
+M_+Q_J;R.J0XD\\H@TEL]E'1)>\S@?NK=)GNJ\RO0HN=5Q^RZ#I%#0T$B%1LZ
+M4OGW6Q;"&QNI)^6MKU(C3[IB<2@&1GA)VV^$#/>0<%5[I^KE%7V@*K5<"2)C
+MY5*&JXD$*O6=C*.K4$C.54N'DM*UME'<$`95*LXP7$XX4E=Y.Y52Y=#<A6<L
+MJUW5ANDF?A9ES4()SRK-P\@N_NLZ[J``\>Q6XEJO<OP<CW67=5-),00IKVZ:
+M`<B?8K-K5-1SLM6L(+BI+7%P``7/];K0,EO^BTNK5@QCX,_5<CUZ]TM=+IB4
+MDW5GY9O7;T-+F-W)[I>%^@UNI5#6<UVG>2L_IUN_J74FM@F#W7KWAFP%ITVF
+MQS0T@!/)EZ_QC>$O]JY9WAUE*HQH8#GOLN\Z#:BUZ<R&_E;M*A%JVI7'>96G
+M=N;0L]($$!=/T\W=O-^KSNM.%_%2_=2Z8\N]P#_L+P?J-P:UT]SA.>2O3/QA
+MZPQSC0.'YDYRO*ZT$EPF">^Z^CGQ)'D\,[IPX:9C8Y$J6@X:MB1QE04CISG(
+M4U$G8$D;KD[[:M&L/*;B,(_.:E0/\EOIX1R?\*;:?6]-LF..4/5`T6)(^(E3
+M`>O"BZL6_P`.&]S"S7AG;,MJ9-N9W*KW-,LIDD+5I4P:0T]E3ZE2.(Y*7LC$
+M;1+W&JX8]U'79`@">ZUC0B/A5G4QR$5C5K=[S$P-EEW5JW4=()DY*Z.ZHN/I
+M`W45O92XN<`594L<Z_IX8UQT@GGG[JC6M@7D"F#$X"ZV_I,93(@#N0N?OG_S
+M6L;!^%J7;-FF<+`5(B!.Z*MTBFYVD-(,296UTZWU09$QRIZK#J+6MGN4I.>7
+M*5^B:1E7?#GA^:HJ5J<P<"/A;K+=]2J)87-:03A;EG6ITP&BE$>VZFVN?K,;
+M:.&&T84U&W=2;JV'*U_.81D0J]=XK.AC<`9*RK'=1?6JESR8&P'"(6S7'5L5
+MI.I:<D83,I2X''O[JIJ,RU8/XX`+HJ5!Q:#Q^JR*["VZ#N/W6_THM=3`SVE-
+M<$%2M&.;*;^#@X&W"TK5D-@1'RH[JO3I#W66E;R&-9(C*I73J3<$H.I]2@$-
+MQ"R;DUZX#FEQ)/"*+J%.A5U-(:00N"\;^#;2^I/JT`&O,YC"[BA87`>7/<2#
+MPK(L6%N1/>5+(2V/F?Q!T:ZZ9<&G68=(Q,++R!!_5?1GBCPU9=2M7T:E(:\E
+MKH&\?"\+\7=&K]'ZF^A581DQ@Y"2_*[XY>S'(+78^$,N$"20#LB,9,-2](=.
+MX6V]@R9!.-TAZ20<@H\-<<80^GDJ!GD;MVE//!(^4G``CU2$B)/:!RJ'+70"
+M!B,IMP9@GZH@,.]0CLF@`X(RH!9)SR$0+L@@;93M'NT)R`08*`#.W^JFMI;4
+M`/?91[GTCVGLI[8$UFD[R,RE'9=!J.;;MP(WRM[H=$U+QI(_J!/W6'X?IOKL
+M`I@O($P,PNN\+VX_BV:A#@X#3O[KS^2M8NXZ-3BDQL8@0NOZ#3.(;(7,]-I_
+MECV76]`I;'(G9>:UN1OV3(;"T*8B3A4[1L08.(W5L;;_`"L5LUQ5TCYV1=+R
+M^8&ZI7+R*D;B5<MG>30<\[*SMJ(O%%X*=$M#L[;KCG-%2H29"T>M7/\`$WD2
+M2`=Y]U'2IB=ESSNZ^AX<?6%TZC&\86W9PT<2JEA2(C]EI4Z8+06C;*8L^6I:
+M#CJ$[>ZGJN`$3*@I@QOD(WCT223B5TCR54NH<9V!]UD=8`%)P.=X6U5I'1)[
+MK'ZO0<_N1"-8WEQ%_5-.[+'0!,J0NBC(.47BBR=3)<!)X/98_P#$5&MTF8B#
+MV7BN/K;'U,,IGC+&E0BHZ=4S[*MU:V>'C0?S=UG'J8MZT-S`R"-E;/5VU'-<
+M3'?W6'>8V78+BDZB1JW/"AJ5#(SC?"FO7F\IRPR&_<*G>-JMI8!!GA734_U-
+M9OU5&Y]MUJMOBR*>'?!7/VCJK()'/V5FGY[7E^C$R=U>9TSG)>TO6'^8QYT@
+M3*X3Q'8-;4\YH#3JE=TYS7L=KXGZ+G/$S6N<"TG=;PRU3&?':_@W=/%G!,@1
+M$[[!>O>'#YC))7BGX4/\MI&"TD<?"]K\+$&BV(V"S)RX_J`^+@W^$/!SM\+P
+M3\0:;*GB!C6B<P?NO=_&50?PS@#!*\2\16GF>)VG4YTNQ\RNF5TQ^G=K^']D
+M*=BR!B`?V74D-C3MA9OA6CY5@P_].WT"U`S4[;`77#B/%Y;NI+2E+I/)W6C2
+MIPV4%E0),1]5<;3.T;>ZUVXGLVB<#"T[<"`)RJEM2@29@JVQS6CMP5`6N9$[
+M)B_?$H7GU$YRA=F/]PB[1UR""(S.ZK57"3D*6L8=`XE5;ATR`?[*I45PX<%4
+MZKY)"EN'&<'95:E4##HSR545[MXW!]QE4+BK(._,*:\=(D'?LLZZ<1SLM1$-
+M=X$DG'*R[^J"QP`^JL75:6D?NL:[J$DMG'RM=,54N/4^2,;X56\K"G3($`_*
+MENJ@8'.]BN=ZY?8(F.P":3M3\1=1\LG0<D0N.ZI=NN*WE@;G,*WUZ[<7RXDG
+M/TRJ/1;*YNKD5-#BP$$PNLGK-M2>U]7>_A;T!FD7503,;_1>@/MJ;6P'8'9<
+MIX,O!0H-IC@!='6N@ZEK!P5Y9=VV]O1EQ1VA:VY@GZRL7\4.N4NF])J.%0-<
+M00T'X*H=8Z_3L:[YJB0"=_\`1>1_B=XG?UB[+!4FFTD8/N5]'])CJ7*OF?J?
+MYY:C!Z_U*O?WKZI>XAQ,_$K-,$`R<=D(<2<G?W39,9]EVMW>222<)A!S$1[J
+M2W$.S('N>5`S#Y))5BEE^J<!0:K':6ANO[)_,_ZRAI.)IM/MW12>WZJZ:T^N
+MZ5P`_2[!E1=5J--:FTG!5VO;LJNEV"/U697LWU+\14):-@?E3?/+PZ:%%@T2
+M"J-PT.N''LM"V86TG`G8*"G2PXD*6<D4:S(DJE7#9U#9:UQ2!]BJ=2FT/,B<
+M_1%4J5N7NSM*DKTFTV$#`.%:)8P>F>Y"J7+BYQ(!QL@Q^L-F2(CW7-R/XL@R
+M#,1WRNCZXXMI'(F#PL7HEK1JW)J57$F<`;!:Q9R:?2K1SAD>DCLM!UJ&TPP9
+M)Y[*?IC=1\M@)^FRV[7IH%*7"7.4JSABVS&V].`V4KDT=.K+2MJM94J#2YX5
+M2C:-NJWJ9Z`5!B4Z=6M7`)=H!6E3%%K`QC8`WE;#K.C2ID,:-L*O4LV:,B"4
+M5EUF-VD(6-&DJ6[MW-?#23W4894:<Y[HJM=TX.<+:Z.T?PXU3[>ZS;H$L,XA
+M:70P'4!WV*J+6IT0'!5ZM`.)+R8]U?%(D845R`QDQ/NIH8]]9TMW.`5FRL6>
+M6W2,#"&HWS@2[8<*WTTZJ!#>$4%:U]`[JK5MXD8^%K.!B")Y45:GJ&`)4(Y_
+MJ-$-,F)',+S/\;^B-K]/;>TZ8ULG41]5ZQU>EI:0N5\6VS;OH-PQPDACL`9V
+M6;TWC=5\W/;I,$B9Y0-(@AQCV5[K5NZAU"HPA^'$01PJ+V^H&<>RW.GH,?S`
+MR/2A&6Y."G<T9]1CW3L9+9!V_54*`1!@F<%,]I!'WRD`(*(N+_S'`;`Y4"9@
+MDEH'9,9#R,&.Z<M;@ZYE,UH(_,&D($))&!"FKTZ;'!M.HVH"`Z0"(/8_"B8R
+M=C(]EUWX<>!^H>)KYHI,+*,P7P/\U+=08?0^BW74KHMMZ1<UHDQE37UDZUO!
+M0<S0\8(/<%?4O@[P!T_HG074Z5(`Z,GDF%X+^+5B+;QC5#,`N)CZE8F5MTF-
+MW4?A.C4#)!@#<@PN\\(VN14)!G<KDO"]G_(8=4!T`E>A^&[4-MVSN0O/Y+RZ
+M3IO](8?,!P5VWA^A+`2,_LN4Z'3]07==$I!M`$`SN5QR;Q6Z3-.3A*X?Z8'*
+M*J0%2NGR)#MEG;8*9UW')&Y5CK;W4.GD`XC*J].!=6U$\\H/&%8LM(#MQ&ZO
+M4M;\>.\I&'9ESZI<3N>ZT;9A<X"%0Z6PZ0MRU8-$[+CV^E>(L6=(M'NKU)L&
+M%6HZME<H`XX]EK_CSY#HTB'$Q\IZS0)QGA6J8]$(+BCZ9WG*Z:T\][47@EL$
+M2J56AK!!VC"T7T^9F<(6TAIR03^R:1R/B6Q-5FV!V7'7UJ:50M<"TSNO5;NT
+M\T&`/DK#ZIT%CS,;K'DP]NG;P^;UXKS*^Z8*M,U&$XS'99CJ#V/($QL2.%Z+
+M6Z&6N=3@D$=U7'A-KGA^D_,KA<*^AA^KQDY<WT%M1M,`G<YGD+:LNE"N2X@^
+MK)"W+7H+*8$@86MT^R;3&G$RMX^+\O-Y/U/M>&%9^'62)IQRKI\.T6TSZ=^%
+MNM9#X4PIE[<@CA;F$CC?)E?K@>J=`EITLW[!<5XDZ)=4*@<X%S9WS_DO<:MF
+MPMG3)YPL3KO2*3V.+VM."5F^/['?Q_J;B\^\!:V513F(_39>Q>'+AM"RSVE>
+M?=%Z0:5\1387$NG&5UEKYC6:#+2,0N,WOEZ/+E,X+Q1>.KL>&C2`"%P%C:ON
+MO$)>[=KI_5=]U.AIZ<XXDCGX7.>'*&GJ+ZK@)G?ZJY3=C&.4QETZCI](4K=L
+MB/3'Z*]:L+GB,RJE-X>0T;+9Z31)C"[O#GVOV-,-I@$94H:"XP8]U(U@#1,=
+MT3609X*TY'8W2/\`-$^8C]T1<W3G!4<@SGX3I2,<G]4#WMCB4SB)[*O6>`"`
+M,H%6JX.)5.L\03'ZHGN#N?DJK<56Z2B(KBH!/;]EGW575($;_HCNJS9)G?"S
+M;JX`;@\PKH#=5B)$X`6=<U23B3WE'7KR<E4>HW#:=(P86Y&;=*_4:T&>RQKR
+MY$$@?)"DO+K7))^ZQKZZ9)]7^15W^&-;#U.]`:>T&%RG6+AS@XD%L;$]E<ZK
+M=M=K=J.!&ZPZ[JES6\NGZN)E;G'-:F-MU%$TVW=T*8&[@)]EZ!T2UM;#I0UA
+MLEN9^%SUMX??;VPN2(.\^\(>I7]RZU-(/(XPLV^]FG2X>N*]:]491Z@[2,3M
+M/NK'7?%3;7ISW`^K,"?9<97J&C3+G.)>>5S'B;J=2XJ>7K,-VDK>'BWEM/)Y
+M)ZGZYU^ZO[FJ35(:02<K#>_5,YY.4QD&)^@,IG.$@-Q`7M^/%KD[8&0$[RQK
+M@&O+\"3$0>R8`:9#OLA;^8`$F-U`='<XV'=3T##QNH&EI@@$"5/0_/B=UH:M
+M(#RQ.Z*&]D%%H\IN"<;A'I'^%RJOLL@&J9V"IVK1_%/<),E77B0\S&-U7Z1^
+M=YW,K,>&I+B&MTX!*<TXI0,)5Z3S6EIE1W#KH`Z::G`K78@9[*C4C)G[E6+V
+MG>53);I`506+R^:E0_"32AK/I@$:A.RI7-TQH(:`>_*T*EE2&3)/N50O*3=6
+MFFT0J.;ZW4N*N=`T9WRKG0K)CZ8].8RFZPUK7BGB5J>%J!=5;3`QW5B5O^&N
+MF-ILUEGW6U492I,U&('"*U93MK8<+-ZC<&ZJ>32&.2I2(JC?XRX@1H!^ZOT;
+M>C09@!!8VH8,1`W4M;TC3,E155[0ZH2!@*"Z:`PGG97"W0P[R51NG3,\JHS+
+MIH%6#GW3TZ>)`VRB<-50XDJQ18XMC^GV**HWUN#3EI(/96/#?J:6<C"?J\V[
+M=%5A:Z)`/94_#URX7;FAIR@Z,T_*&=EF=0>Y[M+0=,[K2%.K5:2_TM[*C?-#
+M7P%"*XI#RH4?3JGDW9IDX)5ZFV:4++ZAJHW#7C8%%;=1P#9(5=M:GD$B5:Z6
+M^E=VW$J.[M:;7X_109?7'-\B8V'*YSJ`\RRJ0W)!X6]U\.;2ADD'NL^C95;J
+MB:;&N<7!17A'COH-?S'W%*@2"XR0-\KC*E+2Z#+?HOIR\\-U*5!S*M#6'`_F
+M;*\_\5_AN;FL:MHUM.<D`0!^BF].V.?&J\?C,DR$VD:1E=]<_AS?TR22"!M'
+M_99MWX(ZE287"DYP'8+7LW,I^7)P-6P/MW2<!I@?57>H6%Q9U-->DYL<PJ;@
+M-]L;%6-!QK.>>45-OI=$']$0;(&?T75_AEX2K^(^LL9I(H`C4Z-PK>$WI9_"
+MSP1=>).I-<ZG%NPC6[[+ZF\"^%;/H]A3H4:8:&`9"@\`^&;/HW3:="A2:T@1
+MA=93<R@WW[KE>>7*Y;1=5IM9TU^G,-*^4?Q?/F^-JH@8,9XR5]5>(;@CH]4,
+MSZ297R=XOHU*WC"NYY!)J']UCZZ>.-?PI2.BFTNYE>A].IM%```+C_!EK+VQ
+M]EW=M3`8T2%PR[=&QX;I@U@/<;+M;4BG2:-H"YGPQ;RX'3]ET55NEH`Q\KCD
+MZXP=>I+`%3O'@-V$]RIFN&C:52O8\P;JQ?J[T:FXF=_W5#QDX:6,`,DP95RT
+MK&A;:R`/JL._KNONH`?TM]UG.ZFGJ_3X;RVGZ91@-$'LMJTMB0(V5/IU+T@Q
+M_9;MDP!@$+GC-O7G=!HTM+L[^RN4:)<V3QW293&J0(5NA3C<+I(\V5/0I@LV
+MDCE%6;#/RSP%+1(:T>Z50R#Q[+;A8S7L()0O:3!.`K5>GG=,&R,$I$JN:+8]
+M2J7K&M.`K]P2,;\3*H/IFH\N!='*;28LZM;ZG!WU1"FW#2-NRO5J$"&E1>3[
+M&=U-JJ5*#29`,<J*JW20&E7GL)$94;+<N<)G=2UN0-"E+`1O\J>FPATDJQ0M
+MM+,C[IZM/&\=D`Z`:9(^JSNJ4QY1['=6*M=P<03$+,ZM<GR2)5M;QQJY^'=[
+MTJTZA5IWIHL>?R/JQ&ZTO$PZ?==8\[ISF.9I&HTXTS*\RZK6)J:P3*Z3PG?A
+MMMH>^2=LKA<I?XZ>C]OUOOM9\37&FEY;")VA9W1[5P`>`02K5S2==W9=F`M+
+MI]O``(Q*J9743=,M"\@E=%84`T"1@*M8T=#0(6C1EL#=:CRV[$`V8C"*DW.>
+M43&S!3NAN%I@-0"/\E$Z&A&\Z22>5#5J>F$5#7=P"55JEP:23*.O5@02%3KU
+MH;$B40-:J(*SKJX&H]D]W7P1*R[NJ2-4[85@&]KC.5F5ZQ<?S)KJOOG"S+V[
+M`;(,+<B6Z3W=T*;")"P[Z\=5<?5A/?575!!,K/NZV@:<''"?XYU7ZE=:&D#5
+M\A874KT-8XU)&.%-U2Z#"Z'`;Y.RX[Q3U@4P0'#7V:=UT\?CW2W4375R^XN?
+M*I9<[Z+KO!'AT!@N+AGNO-?"G6:8ZLPW$%I<,_5>U=%O[:I8M=2<TM+>"L^>
+M7>OCT>*R8[G:;J5"D+8LC`&%PGB&B*1/EM[GMA=C?7M,L<'>I<=XDKZJ;I/!
+MQV6,.W3UX<QU6YHBDZ1Z@.%Q/4JC:E<EP((*V_$5PX.(;L1W7/53KGB=U[\,
+M=3;Y_DYH(`R#E)P).<E("-@3"=WYL2/JNC`=OWRG8#$YVS"<@Q,8^$PD.Q.?
+MHB':#M^ZL4V[$;;J$''OQE3VSL[X5&E0>11:(=MW1^8[L[[I4"XT6D(O7V1M
+M]F5?3;O=(&%!TMKC3)!$%7.HLTV3S,$JG9.#;2?ZE,?KYU6J4OJ;?9&]I&(2
+MLF$-DG)4CPA%.YIEPR85-],`&8A:-9IF(5"\:0[_`%05+MS!1C)*R;V&TRYW
+M/"T[W3IP?HL7JSI],S/"JL:ZEU:??'*Z_P`(6IHVGG/$2N;Z=:FXOZ=-K,DY
+M7<NI"VL0V,Q`"O42\HJ[Z]S4\JF[`W*M65JRD!OJY)2Z;;AE+5&2K3*1W=LL
+MA.`:TZ2846D$R1`4U:#`&WLA<TC\PW156X=B-XQA4*Y&5=KY&WV6;>.+JF@8
+M[H(J=,N?JB)1UZNEHILF5*QH92AIU/.V5:L[+0-=;+BJ*%*R#O75R>R+I=%M
+M/J0`:%I5:0TQ&>,JG1IM'4&NGE23E=MFLS^6LJXI!SR3]%NFGKI<Q'=9EW1(
+MJ$PHJ&VI@TX#54ZGTZI4&IHD%;%C1DR-E>;2:1D)2.8Z!3JVKWMJ,(DX5FY-
+M4U-3*9/T70"U9,EH@)5J=-E.=()^$',5+$W+@:K?HMOHW2Z5O2UAH!4EM::Z
+MWFG;MPM+'EC2<++4C&ZM0IN&6C[+`O+"FYQ$#/9=)?R\XY[JA<4/23"NDKG*
+M_014&IH#F\J,="I`8:%U/32R2QYP<*6M:,95D9:5FPCSCQ1X$L.JVCV5+=@>
+M1AP&0O"O'_@^[\/7SFOIS2=^5R^NZENWY6!XT\,6G6NG5*->DT^GE9LLNXZX
+M9ZXKY2\*]%N.K]7HVE"G)>[/LOJO\*/!MMT/HU-OE@.W)]USGX0_AU2Z/U&I
+M7>`XEV">`O7Z5$4F!K1@!:WLRRW=*8(MQ)&!R@LA4O[L!OY0>%!UFMYERVWH
+MB9Q*ZCPMTSR:#7$03[J;33.\74*=KT&H2-F%?*GB(,K>*JU3TEH<>_=?4OXO
+MW'\/T&KG=I"^4[C57ZR]Q.SID!<LKR[83AVO@JB`T:0876TZ9!$A8O@^W#+9
+MDB)726S`ZJT3A<;RZ3MTWA>D/)!`W[+6O6CRLJMX?IBG;C"N=0,49PN.3K&;
+M3J0TF8`X51[Q4K_F^B5W5TT#IF?E5+)Q<\F?F5N1<>:T.HU&LM-!,X[JETRB
+M7.UD`2E>N=4](SQNKW3[?32&%QSO+Z/AQU&A94\<+5M\-`5.PI>D2`M&DP1`
+MW2+FFI9=LK;*9T=YY4-%F0K=('3S\+>+SY(:0=,%3-9(DIJC2,!/!;DG*TS0
+M5:9[B%$:4L_+[S*FUY@_HA.,]ME6;BK/IDB"-R@-`,W$>RLB29V^J187?V*)
+MZJYH!P@Q*B?9D'MW"O4Z+FOS]T=0"0T*4TSFV8`,G*=EKZQ`C*O!AG`D!.&!
+MIWV[IK:JM6CIID\K-NM9&,GNM.[>`#E9E<@$P2LY5O#%0JAVJ7=UE=8<T&!`
+M*U+]Q;3)E8%ZXU'[K%NGJ\>&V3?6H=+A.1PBZ#1N/XEK1,3]U?9;.JNT`3*Z
+M;P[TAK*0<6C'LN4F[PZ^3*8SE/TRR8*'J;G=7+2T'F;):2RH!,`*[8N$\+M'
+M@SR34*1!5AK2$31$<RHJCBTD#A5R3C#25#4>>\!1FJ2%#4JQ*J)*M0!BIW%8
+M@;&4-Q7);^8?"HU[@Q'=5-E=W!!PJ%W7+@3C"&ZN"2086=<5_>1/":0US7,D
+MG99EY=','Z(KRO`,&%D7EP)))6I"TKRN2#J.0LFZK9,';WV3W=R).8"S:U23
+M&J2[LJQLU]=%K<&"5D=3O@*;BYT$!2=1K:)#IQE<7XJZU3:XM:2#V73#Q^R6
+MR`\3]::QI&K(D`RN'ZC>5*]Q)D@\(NIW;KBI+I@]YRJ]2A79:MN'47-I/<6M
+M?!@GM*]>.,CE:BUEKI`),]UTGAOQ=?=.:&.+BP<$E<T3OV^$+26@B,JW&9=K
+M,[CT]*_\[4*U,EQ+7G=9/5O$5*HPZ'9(7&EPB1@)M4#G[K,\6,=+Y\K-)[ZZ
+M-6K(R"JSW9D2DT^O.1[I2"0<PMN)Z=32US=+7!_^+A!J[3["43HB>/W0[R)F
+M-@@8OQIS'.4^H[Y^Z1T_[RG&?4Z8[JH=IYS]2K-&"\`X]U`(@<_"FMY#R).>
+MQ5&M1@4FC*/[I6[6^0V>W)1Z&?[*;:?:'60!8NGLLSI;?->`#("T_$.EO37$
+M%4?#M-K:0,J8_7@R:#0`(V1.`DGA$\B1G=(@:<E5%:I$E9]U!<9,#Y6C7])]
+MEE]1=`(`^R#+Z@YK)),E85>KYCB2W`*TNIESG\85-E#55#`,NQA6*N>%:?EU
+MG7+VP-Y(72VVN]J:W`AC=IY63;TVTZE.V$`'\RZ&T=3I,T,B$J)6L+3MLI*_
+M_*$X1B"W!4%5Q<=,X4$=,'6FN'0$B[2('T*@KNTMU$[(*U[5#&',$JI38(\Q
+M\DHG'S:VMQP%<Z;:_P`36#B/0TX44_2[,Z?.=)[!7*Y@:0KKF!M.&P%4J":D
+M`;>Z:@A#26`*C<TRRNUY&)6I3'&TJM?M.@G.%>CMJVH#K4$%5;IDF85SI0!L
+MT-XR,B)4O;416C<>P5RBR20H[2F="L._EL01UG-I#\RCMJ3Z[];YTC:4=&W?
+M</+W`Z6K0ITM+0&B`LUJ(A3:&`8^%4NVFC)!QVX6FZF0.RS.J.@:>Z:&:ZH7
+MOS./9*JS6R-_A2NHZQ,9Y1T&#06$`'L56637I.8Z1A7^D5#<,\MYDH.HTP6$
+M90]#FC7$P!*"Q=6]2W,\*"Y<W0&-(DK0\27-.C8$C>,+"\+"K?76MTZ0>5G3
+M5='T2S;3M-3ADH[VIY5N]^TA:=*C%O`.0,!9'7V'0VF.5*U%/PS9&ZO?.>WG
+M"[VWI>70T1$+&\.6C;>FUVDR5T$Q0D;PIIJ/)_\`Q`W?E=&J`.$EI'[+YPZ:
+M[7U02`2797N?_B7NG-LW-:?Z<_<+PCP\[7U8-``),R.5PO-KT83AZEX<<T6[
+M<1[%=#TTS7;_`'6!TBGY=LW$1M/*W^@4]=9L'E<=K([GHS!_#C&3PFZV0R@<
+M*?HC?Y#1F54\6U`RD1@#E8=(YSJ5P&LTF9*KVM=S*9(E5+^MKJ;DJ(UW0&,6
+MLOXQV\./M6_TX><\8.ZZ"TM"&3DK'\,4R6M>=B>5VMM1::(@-&-UY^Z^A;ZS
+M2I:4X;C4>,J[2IG$H&L+2,`_"L,!C,$+>G*U-0:T>DA3M#1@'=5Z32!NI6!S
+M7;Y6XYT;FP9,$(G`8(&$6B6Y.R"H9(`B$9TK5B0XZ1(0@@L@;GA2O;/Y1LH@
+M-+P)E&]"#2!WGE'0G,D_(34LMC*EIB0!QPC-@3JX$DIPP1$0C+=3_;A&&0-I
+M[^R)I$ZE@&=E6N7.#?=7GDAA`5"Y>.5;-$FU"YJ:R1"J5`T?"NUV:C,*M78`
+MTR1LN==\69U&'`MGCA8E>A#IW6S>&'23\++NWZG:0L5WQXB]X<LYJ:G9![+J
+M*<4&<".5B^'&Z*8<<0M*XJ.J8V^5O&:CR>;R;IGD5'X,\JW9,=J!/"KVE/@[
+MA:5JS2((DJO/M-3:`U1U0`XRBJU"`H'O<79A/\0-2-.#"JUZL$PY'>5`UORL
+MNYK@@@`>ZTSLKVN6YF2%G7%<:3!37=8Y=B>\K-N:I</3B-U8EIKFMJ?^;'.%
+M0O+H#`A#?W6@&0%B7U\03.5J326I;^[&3(6+>79#LE#>7;B<9G8=U3J@EI&O
+M'<IRR&I6+X("I7UPUE,D^G$RBNKC^'9ZX=I_5<IXFZN3,$@0<+>&-M+0^)^K
+MM;2=H=$#$%>>]5NG7%1SG$F3DA2]:OJM9Y`<8[`K+)).1^J]F&,QCC>:=P`X
+M$_=*<:9D'B=D!'J.)^J>9SO\+89S=($[;E)PDDZ<I.)D"`?C9"23/MOE$%IE
+MIS'L$(B<A*`&P/U*9TEW,!11/'JQ,)LANVW=,79A,?S$`G'?E$(N;IR"2=BF
+M;,X!]LI.P!$CY14ZCJ=5M0.<2PR#G=`)$',CME/`.VI7>J]6O^H4:-*[J@TZ
+M,^6QM-K`V=\-`[*@V0Z)(![JB5KCI@R/E34!/)4+7#<3CLI:3FSN?\E4;EJ/
+M_3MWV[*2/]PH[8?R&R\C&R.!_P#(FF]?X^Q_$MQ3/3G2HN@U*?D@2$7BVSI'
+MISGM,$]I5+H%G4\D'S2.<A3"SEX,ITW6@.$@X"3V@^K95F4[FF/\34?\20V*
+MC?JM=],GN0TM6+U4AK9!'NM6[N*>@N!$+F^MWU+\C#K)]U-#/N#JJ%Q=Z1[I
+M^A_S*YJ$'2W8JJYEQ6<*;6D:CL970](LQ3<VC'I&^%J<%6;*S;5)KN!#CM[*
+M:W;5H5`720KUK3U,T-`@*T^U8RD)`^JR(FW#31P<E"X-U9._NJ]>@X.EAV0T
+MZ[FXJCW!14M0MY.RSKVKYCO+;L-U)=73?RM,RH&-QI&7%`]I0=7J"DP>GDKI
+M+2W;;VX8`H>B6;:%#(EQY6@X2PJ-2*M>?RCE4Z@(82095YXSN20J5T2!IDF5
+M4I4&R-7U073&FD3P5-;M'EQ&WNBK,UL)[)2#Z'#J43E6*](YDJKT0AM9S8V.
+MRT;AL.]7=2K$=)K0R20$U*FZXJ<Z0A8QU:J&M.!N5K6ENVBV.%%D*G1:QI:,
+M#E$UA&2I`W&221NFJD-9`)^4:5[AX:R3@']%D5CY]<O$84_5:Y)+&DGA16M,
+M@#NFD/2:-(VD80WS&M];3A3R&"2Y9G6[VFR@X`B?9-)M#5J!]73/PHV`"Z9'
+M)6+;7U6I<G1)"U.EMK7%X-4Z6JT6O$6A])M,NEQ6EX-L&T:37$1*QFT7W?5M
+M,^AJ[?HMJ:=%K3@#99:BPZFW0%B]58']1IL70560#G]%S5]6/_%&9B"LZ;=3
+M96X%L-+MDGU"UCFN_53=-=JMAO$+*Z[<BC2>[4`(W1?CPO\`\2ET"7-Q!;S]
+M%XYX5<:O56D.'I(R!$;KO_\`Q#]0=7N@`8D',_"X?P#;/-1U:K^7G=>?\UZL
+M9_&/3[*NT6S079CE=7X/+7U&D@#A<1T>7,:!!^5WW@JU.L%IDKS^UJR.\Z/1
+M!I@Z<+G_`!^2!Z=EUO3:99;\97)>/P"3)V"-1P=S4_G<GV5WIU`U:D`@E8]R
+MYQN`ULR2NK\,VYTZM..ZQY;\>O\`2X\[=%T2T+*;=+,<0MZU<ZG`,_!4/1*0
+M;2:'85^LU@!=(GN"N>,^O3E=W14BW?96:5-I;@XW5!CS/$!7K=W8;KHYU/2P
+M(($*2!EW/""D,"<^RD<<;+;G]1ZCO&$+SF2/U1@-Q*BN,-#P-E&H=VV9RHW4
+MM<D1*!E36_1ME6'4W-9C9NY3M>D`8YN)Q[JRP>D2HHU1J"FI.]7J&.R%$/4R
+M9",-T-R@!C\F`FJO])@E(Q8CK/R2/LJ-:2(W5MQ#B9.ZJ.#G/ALD]E+6\8B<
+M#"S^HOAI,&0M&Y):V'`A9/4)<TQMW7.UVQC+O'G2=1Y5.V::UR/?=3=0+0T^
+MJ3PFZ+2.L%W&5,9MKRY>N+;M@&4H!5BW.NIL<*M1:Z!$96E84QB5UKYN]K=I
+M1!9)*M1I;*%C6L:-_IRFJF>R@"L\:H)^ZK5ZH:./E-7J`'*S+NX&HYF58E-?
+MW!+3GA9-:O+LE27-=VHQ^JSKBHW(QE73-I[ROS)$>ZRKVX#?ZL=D=]<-ILR=
+MN5B=1NY80TA;D8M0]2NI=^;`637K%YTS`15R:CC+C(Y[(6T);!&(A3:(:C`U
+MNJ<_*J7-0MIR,&)5RY#:5-V#LL3J-UIEI]..=U9RU&5UR](IG5L)S*\]\2]1
+M?5K.#2<]N5O>+NJ-\WRZ;I:9!65UWH%RSI+.JM:31(RX<9A>OQX^O;CEERYH
+MO<Z>?J@?^:<=MT>`=L]Y0`QOW[KLAC$>_P`I?E;`S\%(EG<?=(``R0JAA^8P
+M3('?(3.U'GY`2)S![1A(D!T#;E1=FDG8%)TET@QV3@#(!3-@NB2@88,B4B0T
+MXR"E`)(2<`<3@(!(+0'$'.<IHSZ=65;K6[J5A0KBM3?3KET-:X$M((F1N-PJ
+MP@0-D0),';]4IF.W9.UH!U3OA.UK1I=P>90)CHVWVA6*1(=C]5'+<F0`>RGH
+M#U#V*HUK:J]M!HEN.Z/SJG_3]D%`@T@8E'([+6XV^TO%;0>F.'^PL_P[_P`L
+M"9'RM/Q.#_PJH0=@L7PNZ*4#)4P^OG9]1T8P)$0HZK&/&6S*.EJ\J>.%#=7`
+MITMP(5L3;-ZI19&D$_`*P+FA3IOTM9)]UJ7UT^L_2P$D<J&G:O=#W-CM*2&U
+M3IE'37#RPN=L`5T5A9.\N7_F/94K2W)JA[!^5;-J7$!L`'=7OI!VU,4\%N%)
+M=/UB&YCL4]2?Z5`"6`EVZRU$=0P!C"SK]S9CM^JNUZH#<C99[YJ522W`053;
+MAK"XSJ5WH-K48_S:[3DX4G3K9UU<`D>@+H:5"F*`;IA/^+"H%I9C=$\>G8@'
+ME0U*;Z1EFW924ZP>!J])45&]AQ`^0LN^<-8CNM>K_P`LDDK'O/\`F'4>58E3
+MVAU`"9]U:`#V2852S,F&F%?8V&^RM2*MF!2O(F)*T;SUO;39,K)NWZ;IND[E
+M=!TBTEK:KSD]U*U!]/M6TJ7N5<#0/=$RF!Z3DI3&_P!U&P/.D&52O:H8UQ)B
+M%9KOWW"Q>HW&I^C[HBO/F/UN[\J5CS(:P%T]DK:B:D3^5:-M2938`&B?=$4*
+MEO4=3+G'3[+"Z_;,;2.9]I74=0(93);V7*]5_FG1).5-+M1Z;;AL0T">0MNU
+MJ,M*!U"'.V4-E0#&C4,!,VF;R_:&Y:-RKIEJ^&K5AJ^:3))77V09Y>.%D='L
+M138(PMRC1(9B%ETQB&](;;N)/RN=KVIJ%U4#(X6QUA[F4RW,E4@1Y!EN_*G%
+M6M3IU;18YSA<IXTO/-!IL.85]U_IHN8/A<_U:LUE&I5J?F(P25G*Z;QCPO\`
+M%*SK7G664=XSN)51EHVPLFTJ;@71F>2NLZY2:^^?7<`3Q(6#?AKZ[7'U0?C"
+M\-RWV]V/4C0\-TJH8'O81)WG=>K?A_1+@WT[KSCHM>E6+*;-Y7K?@&U#*32>
+M5F,]UV5*D!:ZH'RN%\?,+M1G`"]#T`6A/ML%PGCD-%&J=.S5:L>;63!5ZAQN
+MO0.@6[6T6X_1<+T"GYG5"\#E>D>';9U>JRBW!)A<,KNOH>''UQ=/TNQ8ZT#M
+M)(.9"H79T5BSCW76T>D5+?I[@VL-31D+D>I:?XHNR(V&RU9K289>UIJ>'#.Z
+MNVT-<`-E0H/$B2/;*M4G<R5N0K2I.D2`$!/K/J_51T7P(G/RAJ.`F)E6LQ+5
+M)$004#WX#3E/3@Q.W;NHKCTF1PC4#Y9;5D#E7&D/9I=B51:YSR!J4P=!&K,*
+M3A;-K)IC>(`3ADM47F%P``F$[7'(),)M-"B&2,PHS(:9*EIND$_NF>T8Y515
+M>9!`RBM7"F"YQ@]RGJ`#)/RH:QEQ`/PLUJ3:/K3FN#0QP)&Y"Q;L@$CLK]T0
+MT03!63U!T@Y"YY5WPFF3>>JY`X6KTNCZ!&25G6U#76!/!70V%(``Q$<PM^-Y
+M?U66[I+0H00T\K1MJ$$.^\(+6E)D@?96B"T95KS0-5VD#*JUJ@9(DJ6Y>!B1
+M]5EW]S#3G*NDM1WEP?\`%,+)OJA+B2BN[B!(.^ZSZU0N<07+4C--<5)#A@E4
+M;ZLV)$3RCNZP:T@"7'8K#ZE=#45J1BU#U.X.HRX9X6-6+S4@9A25JCZM6&B?
+MJK]I9`L#G?7*MUU$_P"L^VMI;J<,3N5*X"FWW&<K6\H4V0&[JC=4F@DF/HLR
+M*R;TC0=9@%<)XXZ@VG_*H@ESA"ZSQ%7+R*%$R]QB%9\*_AY5OO\`U=ZPF3,%
+M=/'J7;.5U-O(KSHM]7L#=&D3&1/9=YX*Z>[J7X77%G<4]3F@P7#?,KM>O=$M
+M[6Q=0\H"!M"'P-2HNZ54M:;(;D1]UZM7BUXO+G[33YDN:;J-5S"`(,*)V@.Y
+M!Y!V7:_B=X5NNG==N'T*+G43D$3C9<;4IO:8<WXE=7HQNYM'4:-P#CE#J/Y9
+MSV"<-.H"/NC#"''L.0II0`2V8^J9P&DNX]U(&^J=TY83Z=)D*B$`8TDD)0"I
+M',>UWY7`=BA<QTP6GZJ`&-U/@<IH!.)RCTD&-N<I-V$C=$`&@XDXSA)P](WQ
+M^B+)RV4@S68:/B%0#`??*>!(W&?=+DP9^J42WOW[H"C_`#^%/:'^9,[F5"(`
+M!$J:V.0=O=4C8M@/)'K(1X_^0_9-;TM5%IU0C\G_`*_U3AO3[7Z\&CIM68(A
+M<SX;K14=I&)73]6:76%03@A<;T9XI7;PX_U<*^/^UCYV7]74U*SA3C5E4KAK
+MZQU$P.5-1.MD[\JK?URZ:;#'NM,@-2E2>0P!Q4U%M2Z<&Z2!W&$NF6)?#GB!
+M[\K6IT]`A@&.%!#2HBF!3:/JK-.F*7J&8_1/38&C41G]DY(+3$**4SF/HJMS
+M5;.<$J6H^*>2J%1VIW*`*I+]R@ITW5J@IM^I4E41#0,G[K4Z/9AK-1W/=%6>
+MFVM.G2$1CW5MVT):0/3`3&<A12:!IRH:]`.RS!'NK5-LB=DY;`W164^JZF=-
+M14;\ZQJ:/HM>[HZVD`Q*Q.IM?1)$F%8E3]-/IW@JS7N#^5@U%9O3ZA<W0V2Y
+MW*V;.V#*8)R3OE6I&8^WK&NRJXXG9=3TNH/X5H)F%CW[99IB(5[H3@:0:3)4
+M:TU14$`[!"XR8!^Z1:(B("`@"0HJIU*IHHN,@%9%O3\VKJF0KG4B7U]`_52V
+MM)K&B-E`5NS```"M,8`PD;I[>F`)_1*N-+)!.>$Z5E=9J0V))_LL$TV/K!V5
+ML=6]1(G/L%G/I"F`9(`[HS0W]44Z&EL:CA:OA&RTTP]PDG*PZ+?XSJ+6@$M"
+M[GH=J&46B%2-/I]!H&0KS&CX06M.&A2O&)V*Q76,OJK`^N&G8*&[L@ZW.@YA
+M3U&.==XV5C20R#F%F1IQK[8T[QS7C=8/C)F/*;@0NP\0T]%3S&[KCO$+@0YS
+MG9A</+=1T\<Y>=^(_P"43F,96!6BJP%@D$?,K7\7GS*[H,">.5CVY<TY>(G=
+M>2UZI&WX-M3_`!3!$97N/@FWBBTD+R/P%0\V[86[2O;_``G0TVS!"2G^M.Z)
+M;;P5Y]^)#PSI]1Q/'"]!ZE#6%OLO+OQ?N!2L7:3GLF5:QFZYWP8QKW^:<">5
+MW?0JKZ->G4IG+3*X7P++[1KSSW7>=+#6,'JSW"XU].36.G=W'7VOL"`P,JN&
+M2=ER-U4UO<00?=*K</?2T`[?=5M7K)*W<O:\N6.$PG"S1V&J/NK=(G3_`&5"
+MF_\`57:#Q`<5N)8)U1S7<E$RL3APPA@.).84%5S61E0D7//(V"9[M;2!D\JJ
+M*V)G*-E?'I^J;:TG80P@$?93_G;JW]EG^=#P8RK5.I(DX/LA9I;HZ#(..RGI
+MTQ,QC]E6I2'`J:H[F8^%8Q1UH!WD'D*$N`&-@E4>(E15'2PD'=*2`JU),`J$
+M@G,IC(='[HZ/JQ$+%NW233,Z@3J*R;U[B[3_`(EN=1$'+868]@=<#G*PZ[U#
+M]*MOZHF%LVM+`&TJ.RI`4Q$+1MZ0%.0NLFGSL[NBI-T#'^B&K4&DGMV*)[]+
+M2.ZS+^XT-,.581]1K[P0L>\KZOZI*>^N'/<<_JJGYR25IBJUP79$JO5>13)F
+M25;KPUI61U&L&M):8A61+57J=Q!.5AW0=7?#3NI[ISJCHSGE6.GVLN!(@\%:
+MZ9[5^GV#F&3![K4HT3I@&(4KJ6P@8]E(P!@+B`?=9:TK730UF7K!ZY<BG2=&
+M8V6MU2XW.RJ]#Z2_J]WZAZ&E;D8RJO\`ASX9J=4ZBV]N&R`=BO7J-C2MK44V
+ML'I'94/"EC3LJ8I,:!&\!=,ZFU]&7+T>/#5W7G\F7L\L\>6_\U\",+E/!\V_
+M4JE'(ER[_P`?4--8D`0N&L6AG7`T")*]&4X>?MI=1Z+9W=9[;FG3>U^\B5S7
+M7?PNZ#U"7TJ(I./_`,<#^R[2\?Y-9A?B0I[2K2B<'NL^NXN.5G3R"]_!>W-3
+M^7>5&CW`/]E4J?@T&"6WI/R/]%[57N*+CAID=E`74W3_`$G=3T_UT_=R>.4/
+MPFHTGDU*I<!MC_16[3P!TNA5`=3U'W`_R7J51@-,N!:%G.MP^J7D3'*>C/O:
+MXRKX"Z-5;B@-7PLGK'X;6A8]U`"8P"O2J5,3D94SJ;'B"$F$/>O!^I>!ZUO.
+MJ@<C<+(/AMNK14+FQW7T-=VE%TRT97/]9Z!:W#B13$QN,+4A^[8\<=X9H/;Z
+M*Y!(C(5>Y\(W6DFE4#CM$_ZKONJ=/K650TZE,5*8YY"ITJ+`X.HO)_Z7*S%?
+MW*\^NO#G4Z+=3[<Z8P05GU+>O2=%2FX+UP.8ZF&5&9_Q`S"AN.G=,KRVX:\]
+ML$)JK^]^7DNSMM]@3LIZ.H.DC<Y(7?WOAGI+WS3>1[95&IX9I-.IKYC`3IJ>
+M25D4`31:>_\`U(])[?\`\RZ*U\.,_AVS,J3_`,N4^[D=/:/K6^:W^&>R=PO/
+MVN\KK3Z9.-2]"K@&F1R5YWXCFCXA='*N/&;Q=XUT/GGRPUF\836%)KKW^8=O
+MW5?I`<:#71+W;+6%J*3!4_J.ZW>W.=-"FP.,```*5S6LDG)4=D[^3)^Z:H35
+MJXV"BFJ/)_+LA,P,Q\*8LXC`[*"X=VQA18K7;H!]4A5V_EU&9.%([UO/8<RI
+M+*@:U4..P,!!)TRT<YPJO:MVC3#&2`HK.D&,4SW9QV4:#!U8A.T$GX29ZMU-
+M3I@-D@HIVCTB,%,=6RE:T`2>$M(,]D%2J`<1*R^MTP:;OW6R]H</A9O6:;?*
+M,E!B="TMN2'#(VE=-0:2`5S5I2TUBZ>5O=-K.<P!VVRTS$E]3/E8^471Z;O*
+MEIAREN&ZJ9(E+HIBH6QSLLM+]&I,,<(3W6EE,N'".K;@C6TY6?U2J:=$L,@E
+M3;2G2'FW!<KU*EZA"AZ=3]&J1E7J(&%4'39I:)PHKH0P[_56(],C"KWDZ8D>
+MZBL*^AMQDA4>K/#:&D8QPM#JE,MEVK*QJSG7-<,,C,>R1FM+P99E[Q4(.3RN
+M[L*(`!"Q/"]IY=HR`%T=K3TP05:UBM4F@#9#6`\MW"E8"1)05VQ3<3V6'1ET
+M\W!/NIW/8X`(K!@=4),;H[JUQJ'V4I&-U^D/X9SNP7FOB*N6U*K2=EZ=U8'R
+M'@Q,=UY'^(#C3O*@:=UP\_3KXN].`\1UVU.H&F9WX4E&G0ITVET"?U4%_3F^
+MU5G`1QW5RQMO,+.>9]E\[*[>WIW'X=T:3M#M`B5Z[T$-;;M;,%>8?A];-8YA
+MU8X"]3Z7`MQC/==<.&:;J[P6.',+Q+\=[TT:08#NX8GW7L_6'^EQ'9?.O_B+
+MOGLZA3IXC4#/U6<N>';P3>4=#X`J"ITNFX?HNYZ;4EK9`"\W_"R\+^E4A@X7
+MJ'A:C3N'?S-@)*YV;NH^A>)RF?&F<`JM4_Y@.!*T^M6].DT/ID@.X*QZKX=$
+MS/NK.*QW-Q:HN&_"M:Q&%1MX(F2IVB#Q"Z,)A5(."(]T-=X<))^@43@1L9"C
+MU.U;*+(.K^3='T]PDSO[JO6<"S!0VCB'<J-?&A4IESM6!"LT9#=]\JDRN2\>
+MD1W5NDX1M/96,W:Y;D@"5+4>-$!5Z3O2/V3U'?TCE;VP(.D=Y451X:=X33#9
+MSV4-2"9!6;6I#O?DG<*[TNDPTY<[?.5#T:R=>W0IC\NY*UNM6++"T#V&8QNL
+MR6\KE9.'.^)G-94U,)(B%F68-2IJE%UBX=6J%L[&,*ST6V)`EIRLSFL^7+6.
+MFA8LP,X^5=:0`FITFLI@`9]U%<U6M8<Y'NNCQH;ZJ&ATN'W7/]3N"3&J?JK'
+M6+S=K2L@/=4?F8/NM=,6D22.$+R&MU$P0IQI:S.ZI7CX:8._=6,U5O*YSG"Q
+M+]Y>XMU%7+VKDC.ZJ"GYE9;ZC-Y1V%MK()$_*V*%NUC,#Z)K*B`P#<A6Z3`#
+M*Q:U(B=1&@.(D=E1OB`TAIA:-V\,81C98]^_5R""M8I:S;\O?5T-`+G;0N__
+M``VZ.ZATWS'M]3LY"YKPG84Z_5&OJD`#(!"]8Z;191Z>WRF8C?9=L)NN.=X4
+MNG6>FIJ(6@]C0PCE*SI/J58+H"O/MVLI0!PO1BXUYSX_I>H_"\_<P4^N4W'&
+M5Z?^(-$&F2%YIUX>1<-K[@$+K>8X_6CXBIN?4I%DY@2M+I/36?PP<Z7%16KJ
+M=YTVC6'8&5LV,"FUHCX6,>4G6E<6-$"?+'U5>[L*4$%FGW"U_*+Z\`>GVRI;
+MJU_D$QF%K45PU\U]"OY>[95JVHM?0@@94G6+=SKO26R)S*&F*M!H:YDM[A7I
+M$-6S-,ZL?11MI@&(RM*F!5IX<,]U6O;&HT%[:GZJ+M2KL83#CMPHGT*;S@82
+MJ6M<F=4J2A;5"(.Z49O5.D4KFBYKMB(B5R'6/#->A5UT&E_QB%Z!4IO9)()A
+M05-3@<%!YY0Z=7HO]=J]I';*GI=.96U$5'!Q]LKMWTVU6!I;OP4%3I;20ZF"
+M"-T''4>@-!Q&_(W4KNENI^GRI`Y74_P=1M3(EH.R3J0#3CZ(,&VLZ`H-&DCV
+ME2?PE#L?NMIMO3+9+,^Q3_PU+_`?NIMMZY4,@8_5<%XWIZ.N-<=L2%UM1]RS
+MTN$B,$+B_'-U5;U2DXC3ZAGMNKQ[1RF]5=Z#6<VOK`):/==+:UVW%(D[A9'A
+MVG2?:MJ-.HD29Y*5:J^SK'3^4E=;^'*?XUV5''T9A6K6-/,CE9?3K@5,\E:#
+MG!E.0<D*58*XJ:9R1]54>2[`F/=)S_,?OONE6BF(F2[A1H+6^8\4:>>\+6Z?
+M1;28`&Y'95>EVX#0?ZB=UI-`:R.0%")`X-&Z0.=]T#3("-F7`1]4:'3W5EC2
+M6B3A!3IC$J<M``@;!"&.&X1#(_5,``?E)K0TG/T45'5',8^5G]5:?X=QV@+3
+M+#DJCUK_`-J8`GG*NASMF8N-,;E:[:?H#FXA9);HN`<"2M[ISM5$-$;*]QCZ
+M.A4!I:7;@)^E@"]([IZE+3+H06A'\:W.5(TWAAO$+)ZZ6N(&)Y6M2&I@B<X"
+MRNML/\8&$1\J6-%9,;H:1F%<I,&F8P2J%'S*,?X96I;%KJ0)*J`=(;$!5;LD
+M[#;]%?J@!N(GY6;<NA[M]LJ*Q^MU=-,MC)PJ72:#JMZW`W_NCZF_S;O<D-.0
+MM3PK::Z^N-MH2,NGZ/;AENW2!C"U*+3&`%7L6AM.#@J[1TG!QA+'2)J5,%LB
+M3"BO0/(*L4YV#OJJ]^#_``Y,94L:4>GP">,K18&N9&9*HVK"6<25(*CJ9VE9
+MI%3KMN!2<X@G$2O&_P`2@*5R\D1[KU[Q%=`6KAC(Y7C/XJ/;HJ.<[<1/W7#S
+M3^+KX[_)PURQS[L:1K;/YE?LXIC><QA9%A=4F/\`+<[.\A:=*H'Z"W;W7RKQ
+MR]_^/1?P\'F:)GY/T7I_3PUEO]%Y;^'E;2QDD!>@65Q-,2Z2[W7?&QBINID.
+MIOD<+YN_\2E$"_%3,2/[KZ1N`'4C.<+P#_Q,VSO(+QGU#'W4R[CO^GO\F?\`
+M@RZ;)D/QVE>O=#N3;N#VNC$+P[\&[HL:RGL/^R];Z;<>D!T_=<[Q:^E9MTEY
+M>/N1J<Z8&W"S*KOYI,_=2L<30U`@M_55+AP\S;Z>Z3EC6EVA6!<!LKDMT>DK
+M.L=P>/U5LDP%T8L2!PF2>-E'6>-/LH7EQ,;?"=C9(U<HNATX>Z,Y4[;<F%%3
+M(9L=E9HW.(.<Y"FB_P"!8QU,R1@*Q3J`C<YX3-(J20-Q$)FT7,=JX*K-6!5=
+MIR83BKB3N%6#CJ+<A.YT!HV5J:35:TMRX?9`'ET"8E0U7[@_=14GN+Q'=9M:
+MQCJ?#]-ULWSR#)X]E4\8=6?4I_P[1I`R24-'J1I6H!,:6[%8%W6=>7I$[NRE
+MRUCJ,^O.Z:QH/N*\D3)W72=/H-I40,*/HMDVE1#W#*LUR=6(`3"</)Y<_:AK
+MU&@D8D=EB=8N=#3Z@K?5KEM*F270?E<MU"Y=<5]+7$CLNCC;L%>L^I5,J2DR
+M,F?D)4:$L!/Z(JKQ386SLG:!NG13X"R+UY<2-6.,JQ?7!((D;+,N:DB)W]UN
+M33*O5ESR.ZM]/M3Z<2HJ#/4#"VNGL'DCNIE5D!3MRT`#,!,^6$P,JU5<`P25
+M1N3(,&.RS%JCU)Q+MU5I4#4N&R<?NKCJ+GD^G;:2M?POTCSZH?4'I77%C+B+
+M'A>TFYIM:S;V7H-"A%D,0LCI%E1H51`C*WZSPRV$8PO3C.7FO2.WI:&^D94D
+M.+<]E7HUB3Z1(1U+@Z8(A=)IFN9\=40^@[&87F7B6V!H.&C9>J>*:M-UL^1Z
+MEP'7J0?:O<NT<*@\)MU]&:R/RF%N6],,<'.$-`V)65X-`_AWL/!6EUJH*-H"
+M)&,KEA^!._J="@XZ0TGNHG]3>^G+0(Y"P>FU?/O-&DD2MQENP4M.B0=UOCX*
+M!J4KB[FJ`"=E:JVI%/+99"S[^DZC6EHD+0Z3U!C6-HUY@XRE@HU;-NN6%U,E
+M0W5K=END5);\KJOX>TKT=3"V2JQL:8.G4/B5!R[NG78;K:9CA!0JOI5--PR/
+M==DZSBG`V5&\Z8'`@,!:>%(U6,/(J-P0<*&I1I%D`R#PKM?H;2=36EHY$H']
+M%!8-+W-([*HQ;FTAY+3[A%:$D:2#(4W4K*[M07AY>WW""Q>RHV8AP&0B'>!/
+MJ9'NJMU39O/Z+5#6N"SNH,TUH:@&C;!U(.C='_"#L%=M:8-NP[84GE!1T=G5
+M,%<1^)=,Z6U`V8(S]UVCW>@YA<OX_+7=/(WS_FKE/KCC>6-X.ZDZF^G3<[#@
+MMN]J-KO)X&RXOHD^:]S2!IF(^BZ"TKO-#)RN^7+G)ILV#=#-3#*M-N'.(8_'
+MRJ?2ZAT@`_=7Z=%KQ),%9O"K#0P-U2-DUNPU;CS#EC3"H7KZC*C:+#(G.5I]
+M&<TM#70(WRLJT;=C6M4PR)R@:6P(B%(2!@#=1HFCCA6*#6G`G"A9)<,;<*Y1
+M#?+!P$!`0V91S+?E1ZO7@!2@<@3E%.QN<F91$1S)2:2!M/LGW=//9%"]L4R2
+M8`69=-%:K$>EONK5]4'_`"FS+C&$5&AY=#(]2@YSJE,-NM0&!LM'H9#@#V5?
+MKU,Z]1[[H_#]08`SE;G3-[;>F:4.,R(6=48:5Z"#`GE:E/+0X[1W5+JC)<'1
+MGNLUIKV;IHM(.1&0J/4ZI=?-;4;J]^58Z6X&V$G80LV_JM?UIK9D#=-<FVB:
+M;:E(`-CY0T`ZD_3/I4U/_E@!&^F'4I&Z6$!6RS$K'ZS5\NFX`Y(CX6P7#06N
+MQI7-=:>:MYY3<@&2IV54MZ1<=9,EQB5U7AV@&4FD\CA<]1+16:P8B-ETO2:G
+MH:`-A"TD:](P(E6[8:HD*A2U/<,;*W2K-IMAQ`^JRZ1>D!H"K7IFB04S;NB3
+MFHU*L]KF2""#[I8NXBLY#<I[HCRSC,*2BWT*M?/+:9:3A<ZTY7Q=U`6]-Y=L
+MW)7BWXA=9%U5?3#9:XXS\^R]-_$5TV]0AQ!C*\CZGT^G4OQ6>\D3@2O+^HRN
+MM._@QF]U@6M"I4NVN8--/N976].M&^2(&&@'4J[:5(D#$MV"U>D.;YK&U7^D
+M<!?/RG+V>VVWX<>ZCH.D@=UVW1;HN:TQD^ZY6VITQ3:X'!V70]&T!K8,X6I:
+M.B8XN89[+R'_`,2EH7]"K/#3B#^Z];MJA\L'8+S[\=[7^)\-W0&?23/T*WE>
+M-M^+C./#?PHN-/4&4W.V);O\+V?ICR:3#@[8"\%\"5C:^(RTNP'G'U7M_0[A
+MKK>F=0R%C.:R?5EX=+;52*<']%#6J%U6&[3E5_XE@I_F`.ZCH5BZH07;]BI.
+M$L;%K(:"T$_*NMAP'ZJA9$E@!*U^EVS'M+GDXX[KHY7A!;T"^I,'*.[I.8!(
+MCLMRUL0(((@Y^$U_T[6PD)IGWFW-D$OP=U(Q@!X^%+>T#2K:3N$`@OSN%&JM
+M6YTN!CV5BJ[T@1&%2`TM!:<'=3:G&C$B2M2L6!?I$GG<J%U<9'8(JKQY1&Q5
+M4M=J(;$0LVZ638JE4ET"2/W5GIU/S'YP/=5F4'/$Q(Y4[*O\,PR,0N>]UTLD
+MG`NM5!2HEHW*;PQ;^;4;5<#,[K,O+G^.O6TF8$]UU70J'D6K3$8W6I-W3S^;
+M/UQTTWD,MPP=EE]0O&4:3BXY'<JU>5M-)QD!<9XLZ@?4&N_WE=G@1=9ZJ:]<
+MTVG?;*&PH_U/YRLCHS:E>^#GB1,KI&4PRD!$'NL[VMD@:C@QF/NLV\JAP(GE
+M6>H513ENQ]BL>]K@N.DQ*Z2.=J"XK9/)F,%1T6>94!,Y.$J=)U1\1N5J].LF
+MAHG$%+=$@;:T`#7#*T&4PVF2!PC93]$!"_5&D+';>E.]?K):!!04+<N&?OW5
+MZC:ZJDD21V6AT_IY>1`5VK-MK`U*C6-;DE=9T;IE2E:^EF8W6SX4\.M?IK5&
+M9&<KIKBVH6UL1I`@+T>'"V[</)8XRRLZ_P#$@/!PM8VKS&MTA';Q4ZB8',*]
+M<4F@PT\+O)S7&J]M;TVL@#=-7MV%A@*S3IP/=-7;+8(72,5Q_BZRFW>6[[0O
+M/NJL>R@]CL`=UZKXAI3:N)W`.%Y_UNU\RC5])F"NL<,F;X*I,9YCBX%HG^R?
+MQ=<MJM%*CM[(O#E,4K>JUW_4J%"D:_5'-W:#,;KECQ;3ZO>%K$-8'O'J//*U
+MKNEI8=,XX4_3K<,H-],8E27,-89:/9:QBUS_`%!@<"1(C=/2M65[4.:WU`J>
+MJR7N!R"I+-GE&!!!6F8KT65K?U-V&X**\K^8T5&.+7#A:/EM<9PJG4+1NG6W
+M#AE(JWT^J]]JQQ,PBKO<<M=![*CT>L0UU([[JS6)TR#$%9BU%<W%=H@`%0'J
+M88"*M+`W,I7M3\Q)W&RSKC4UA+<RJRLUNH6=:)=A5+CIMK=M\VVJ`/.T'E4B
+M*51Q%003A0UZ52A%2A4<V#P5=;76DM6A>6N:E/S&C^I475!5O`'2)X6K:WUS
+M4I-:7!W!;"L46VCW@7%#23RLW_"?Z&A3:*31JX1Z&_XBM"CTN@:32RLX-(QE
+M%_PJG_\`,Y9Y::A_(3SRN0_$"H?*+)R=PNPJO#:)<<>RX#QK<"I7<W4-UTLV
+MY1SG2G>34>3C4Y;G37%^ESI(VE<S<5=->0W'<+8Z-<#0)=[+K.6'5=-)V[;+
+M4IU&M:23@#*Q^FU6BFT@F85NM4):Q@_J.5*JU:-;5KNJ1O@`K2IVNBF'L.2%
+M6L&C4UK0(`X6D'`0LJ@I5*K'^MN.ZO4:@J1ZOI*#0'M@Q]4!MW,'H)G=1II4
+M```=_E2^PPL^VN-(#*@,\K0H.8YHC,H"8R#G/U4]/#8RHFCU[X*E9@RBG,"%
+M%=5@QIB22E=56L$\H+&@:K_.J_0=E*"Z=;D@UJDEQ.)5IS<;*1H`;M[).8"F
+MFF%UVEZ"9Q\*ET,AMQ$E;'6J0=0=!("P^G'1=:"0KBSDZ>AMLHNH@&B9.45!
+M[12;D!4^IUS4864Q)VE+`NGW#W$4VF<IKZAY5XRJ<DPI/#E$M$OB?=6/$;"&
+M,J3@%9O<K4BU;N_DM/LI35TC,`%5+6LT6@?[<J"XK5:A)9L%JZC,!UZ[;0HN
+M>TY/=<Z;G42\G+E)UZX?4KB@TZC.T*3I_3*KM#WR&[G"FTLVO^&>GNN'-JU&
+MG/\`B73M;9V%`.J/:(WDPL2XZQ;=+Z<8(U,$+S#Q_P",>H7E1]"VJN8V<1*S
+ME9.VL>>(]0ZYXWZ1TYKP:["1PTA>?^(_Q5#ZSFV@)'!7G)H]0O:DU/,>3DDR
+M59L^@7-3/E.'T7.^61TF'Y=/2_$+JKJX=.Y[KUG\/NI5^J6%*K6.7"87@W_#
+M:MM5;YK2!*]I_"FH&](I0=FQ^RZX9^T8RFK'H#&M;2WX6;UHL;;N).P4C[T,
+M9I<%E=9KMKV[@'QC98M='EWXD=4)NGT6NVW*\PZ[U5[:[J=&-1W<<PNI_$^N
+M6=6JLD[[C*\\ZG5=3K/>XX(P%X/-=W3V_I\&GTF\>)>YQ+B<GV6YT>Y>ZY:X
+M;-./=<9TBX#JHU8@X`Q'Z+I["\8`-1DCL%X\YIZ;B[SI]R'4VDNR8$+KO#Y9
+MY()[+S7I-RX!CXQ[E=MX>NBZDT%PRDNT^.OI/:*<R8'NN3_%,BIT&NW?T\?!
+M6LZ[T-TD[\2L?Q1_ZGI]1LXA==[B3M\R4G&T\759)`\R9^J]>\+70?94R"XD
+M`+RKQ_1-CXKJ%HTC5(79_A[?-N+.F)F-\K.<W)7U,,IIZ`*NMH/ZJWTZ'502
+MTK';5TAH$GZK6Z&6EP)D9^5B=NG<=!8C8!I]EN=,MZ@RTYWT^RR[*`T;`KI.
+MF-IFV!`AY'YETG;CG=1+3<:='\Q#@%-3NF&A+CQ$*A4=5=4T-!(G\P17-`,M
+MYF5TE_#E<65U9X-T2,@E5<:HC*DN3+B>Z@=4@97.NLG"1E6&$DR=D+ZY#8#B
+M/E0"K+S$QM*DHTC4=),#NEIZ_DF/<YQS[RIJ$:NQ4]C;AE4ZA)C"BZO5ITVA
+MVSMOHL7=:FMZ7*-:FREZB``,E<[XAZA2UN93=SQRJW5>J"G3=+_JL7I51W4^
+MK-`)T3_=+>$O\>:ZCPA;&I7\Y^Q/^2[#S0R@&@[+-Z70IVMH-,`ANZK=0OO+
+MGU+IC-3E\WR9^]V;Q%U5M*FYH<N1NWONJ^K<'A-XHOO-N"UCIDI^BO$AKAQ,
+MJ^WQCU^M/I5NVFP.(C"L7ER&M(!V"`U6,I`A974;L:B&D%;QC&5V:_NYD$C]
+MUGL:^M5`&)/='2I/N*L@8[+5Z;9.:YIE,LM+,!=/L88#RM*E;Z&Z8YF5/;T(
+M:V.%8<R&9"Y[VUI3\LZ829;N>\`*ZRE+HCZJW;6_J`T_*"O:V<1V72^&>F>9
+M5#W``*#IMGYE1K0,=EV71K-M"DT@?HNOCP]JSGEJ+5NQMM:@8!`63UBO4J4W
+M!H^5LUJ>OTX`*I=1IT:5N[5!@+WS\1Y<O]871VN_B"\X([K0KO/F=_=1=+`-
+M1Y`D&5.`'5H4Q^I4E`%S=TJ]/TE6*;(`$H*NQ$+I&*P.O,U6[P-X7#7].75F
+MQ.Z]!ZW3BV<>X7$W0:+FJUP,96_CCDXJ_N'6=2HUN)G`*M>&:?F-\\@R3.57
+MZ_08Z_,@Y*Z+P?:4VVX:1*F?%3&?5AE9K:<.!P%!7J-,\8D3B5JW-*E!!8/A
+M9UU;4RTC;L0K"L]P!=B-U/1I8"@J4*U)X+3J:%8M:S7$-?A#0].E\#`'9'5`
+M=0@C=&\LQD05%</:QDS]$&'6?_"7VHGTDPK=6NVI1U-S.5G>)'!S-;-Y5#IU
+M>Y?3+6C9+J4DW&N\-R7X:JM:M2:XR=DS:5>H`'NW3U+*B!ZQJGA38I7-:B>!
+M"EL_+J"!D)7EC0\LPU4J5LZF^:57(&`@NNM?(JBHT0KU+16H9RY4@;A]`-D$
+MC*&UN*E"IZV$`*&FM1;IIALG"*/^IR"E>TC3!T%%_&4O\!472[U2MIH$`K@^
+MN4Q6O7@977]5JM;0).ZY&Y9I>^N2<[+KIRC&N+:F:+B2"6\!0=*<&W$.P.$]
+MPZN*C]/Y">55:]S;C!@<*XI796-;32&95_IKWU;@N)PU<[T^M-O'*VNAU)8&
+M\G<K5'3V0T4M<Y5RF[DR3[*A;N`IM;(GLK=`^H&,+-(O6YD`@25:9I)@JK:`
+M:I"L`D/S!E9:AZE"F\2!!4;15H.D$Z58IR?=3:06YB44UE7:YL..5)=W#:;/
+M2<E4;MC:3"YF'*'I_F/J!]PTZ9VE/^B_9T'UJ@JU!(!Q*U&M],`0$%L6%@TG
+M"E$`*::$T`X)PG<`&Y*>DV3V")PD^R"C?-+Z3MX7,OTT^H$KK+K\D@;^ZY7K
+M32V]R2)/9)Q4O32M"^Y(IM..5IMM:;*>1J57H3`R@T@[K5()8>ZMF^R*%DT,
+MN=(Q[*WUNCYG321N%6J?RKH%:<"O9EL[A9O,:G;`Z.36_EDX:CZ[<LM+<AN^
+MP4+'&RO*C!R56\NIU&_TD$M!W5[FV;WI'T#IK[NY_B:HD$SE:O6:].UMO+80
+M"!$A:#13M+04J;1('"S+BQ==-<YP.5G*Z61QW417OJSJ+0XR?NAZ?X(;6KBK
+M7:3.5U%'I[+>K(`!F,K4L<;F5R_;WVU/XL3IWA"RI``4FS\+5H>'K9@@4FX]
+MEL6WE@"",JVQK2TA:](UNO)_Q(L*5N_T-`@RM7\*+F:;:,F1PG_%>AZ-0V!6
+M3^&-P*75=&I3QW5,IN/4KJV+Z7R%R_B?S[2@_1+AMNNXM&"K;-/$;K'\16#:
+MM-P(A7+A9'SKX\>^O?U'N$9WW7#=;#R2X&1PO3_Q=L76E>H^F/LO+ZC_`#[@
+MAP).T+Y^<YV]_@Z#T(-%4FH1)VSLMVP<VG<M]8+1F8C*S+"S+JL.,=L;(NHV
+MM:B\/F9P#/\`9<,N:]'%^NKI]19J:UF3MA='T+J9IM`U9[+A^A4`RD'.<-16
+MYTFK-8,&0#NN?MJL:=Q2NGW#06DRK%7U6A8YVX63TZLT-`D"%:JUGD0W]%TE
+M'CGXW='>ZN^YI-<2#Q]5RG@WKU?IMTUCCI#=]2]\ZWT:AU2B6U`TDC*\T\8_
+MAM7:Y]>T'N!G_):QS]?XY=/5AE,HZ'P_U^VZA38#5:'GW78]&K-#&D.'W7S[
+M1I]6Z-7TO%0:>#*ZKPQXVK47,96+H&#J)3+#[B]>%^/?.C515J-#CCY704JX
+MIT8IN.<$+RGPSXE9<L:^E6S\KLNC]3J5ZC==01[%8EC6>-[=[TS3_#AY:-,2
+M5F=>O&"F]K#`*O65]19TUI;49$>J2N-Z_?\`G7E3089.%TO$>;#'VR-6NQD<
+MJM5N!)@JK4J9&=U&YY7.UZIC%VE5.J,Y5NC<BDW.5DBX:R"@NNHT:5$N>0/A
+M,=UG*1KWG5&`_F((&`L#K76&,8Y]2J,=RN7\5^*[>W+A1,N7+VESU'Q!?AFA
+MY8XYB``EXYJ=3<=)4ZG6ZI?BA2RR8*[WP;T@6U-M5P`<<B53\%>%Z5G;TZM1
+MGJC)*W[RY%NT-;B"LXS?->'S>7VXC4JUPRE!VC9<AXCZE%TYC3[0KG5^J:+,
+MP<A<7U&Y?7K/<Z<G"ZY7AY\9ROEOGUFOU3E:UFQE*FTD[+%Z54&C)DA7A7JU
+M7>2P$SRIA/M,N>(LW=X#+&9/R@LNG5[BL'%KH/RM+H?1'O<*E5H]Y746=G1I
+M,#6M'9:N=O$)AID=.Z2&4Q(`*T*%DUIVA7]#)`#83N89VA8_ZJLVFUH['LB%
+M(N$$85AE(`3^Z.DT:M/Z*[-(K>C#@%=H4X(`&2DUK6>H[K4\.VKKBY#W#!6L
+M>6<N&IX:L"&M>YJZ*BSTP1@)NG6X92#1B%.88W,+W^/'4>;*[0W!#:1("YKK
+M]9SY:"M?JURUK"-6.RYVX<:UQ`[KK>(Y]KG2:1;;22K-%DGOE*VIAEL`,'E6
+M;>F/S'/LIC.$O9]):T#90U`(.5<+?;"@N&@C"Z1BLKJ4&@X?NN*ZG2!OGEHE
+M=O?L_E.7(WC)OG'&ZU\<[VXCQ/1(N-78R5I^%:X#6Y/O*C\749:\Q$<JCX3K
+M?S=#G;8^5<^F,>W77;0YD@JE4;(B<JZ1KI"56<R'_E)455#3EA'NA_A*;S,`
+M?"LN8-4@*5C`!@A15!]CZ?SG[J"O9G,N)`[K5J>QW5.],TRFD8M]0I-IN@3A
+M<_3J5*%_#?R$PNDK,+CN85'J-F`TO&%=<:B3B\I:(:]D@&3RIB*9;#L$")4?
+M2ZK74])&6A2UF@L@%2<K>%*M3T&?U5.YH^OS&.WX`5[4`\M)P5!4!:#!,3A5
+M%>@\TZH!_+SG9:;6-JT0[3)'*H56,+)#H/*N=+J!A%-QP5FK%BE2:*8V1^4W
+MV5RG2E@(B"B\D^RFFW/WU4O86Q)=C=<]U5YIWE.@X8G(6[6:ZG2-3<KFNL^9
+M<WFMN"W==OKA.BZNUH9Z&8A<[=.;JB(SRN@OZI=3#"[(P5SW4SHJ$F(2<5.X
+MU.G5`VVWVPNB\+EKJ@!G&5Q?3JY#0"0/A=7X;J"=7<8RM_4EW'5:OYD`K0LW
+MS`[+$H5"XR"M6R<0T+"M:U,;#`5EIU&3F%2MWD`<CM*N4':A&T<RHU%FG^5*
+MK7%*GJ=":=+"=AW5-I==W.G.AOZJ">VINNJ_F/)T\`J^ZV8]H;`$;)6S0P`-
+M$0IVD3)32J['.MSI=,*];N#X(*A<T5-QGNA#7T7ZOZ?9/^JTF"?;W3._+NH[
+M:J'"`I*A&(&ZBHGM$9(7-^**0;7#\Y/*Z9QEAU;;+#\5TOY0.P[J43=!=JH-
+M![8RMJBWTSLL#PW4!I@?1=#2/IV6ZS&?U)I:9A6K*N&VH+B$_4:;749B%BU[
+MAS`:<X"D_#5_(>J5&UKP^6,DK4Z9:MM;85'1J=[*MT.V:]_G5`M-C?XBN*;/
+MRA9O";#;6[[FM);CX6@;1C*4"![*]96S*3!C,)ZS6DSCZ+$YY:CF^I6T5):W
+MY52E+70X8707ENTM)61=T@QVQE6+I);@1A6QKTX*HV[A$?NK5!QVU*K'*?B9
+M:5JG3G."\X\,=0?8^(*;7XET$KV3Q6UE3IKVG.%XCU.@]G67O$@,=(*Y?UR;
+M[CZ-\*UVW/3J9!F0I^I6VIAYE>7_`(=^,6V[&V]P^"T1)PO3;#J=M>V^L/!)
+M"ZW'?,9QRUQ7D?XRV+74G0T3*\9O^EOI52ZFV9.Q7TCX_P"DF]+BT%P.87GS
+MO";J]8@LQV7B\F.WHPR]7EUC8UZ3R\M!+OT1=0#C#=,M9[KNNL=!%E4TO!PN
+M>ZS;LI"8E>;R8<;=\<[:PQ7K4Z;:5$?)[+5Z+6=3:"1]5F&[IMJEI_-V0UKT
+M0-#H:,0O/=[>C3LNGWTU`7GT^Q706U1E:@W3$_JO/>FW!(:[4872=-OFTPV7
+M3([[*XUF\.@MB16R<!:-1M"M1T.:#/*Q:%85:6K5$[%.RZJ,<3J=`]]UTQ%?
+MK?@^QOR2:329DX'^2XCQE^';J-N^M9L+"-H_[+U#IM\:K@TO`'*OW;+>YMM#
+M@""IZ\[CKCY+B^;>D=4ONB]1\BJ'-T&#)*].\'^+;>X:T.<&NCD[JKXY\(4;
+MNXJ.8S29D0%Y]U/I?5.C5O,87.8W&"KN9?Y7MP\TO;W@=8\VCZ:L@C@J(W8>
+M8)V]UXOTCQG=6Q%.J\^G'JV"V:?CINQ(^04N-=98])JWD'!D;)S>4VLU%T%>
+M5U_'#G$N8=("H5O%5_>$TJ3WDGM_V4F%[I<OP]$\1>);2V#O5+EPW6?$M[U%
+MQHVVHR<`(^C>&.K]6JZZ[BUIS!7HO@OP1:V9:^I3U.[DG_-+G)QBXY>3&=N*
+M\%^#.H=6KMK7FKR]].R]:\+^&+/IM$!M,!S1(6Q:6]I9T6A@#<+.ZCU`TZA#
+M7XE9U]R>7/RW/B-2YN:5&EI]H@+G^IW,DOF8V6?U7J3R]I!CZJM<W9?:@B)*
+M991SF.@7M9U1VAVTRJ/4&-8V0<E,^Z!P5<Z3T^KU&H`1(7/W_+7JAZ%9W-P^
+M*;2X'LNY\.>'W@!]2G!]UL^#N@T+>@V6#;>%U=&UIM:`UHA;QW8S;)TPK6P>
+MUH;IP%:IV&Q=,?9:YI@&0(]D+FM;D\K<C#.-NU@P,^^R!]$<J[5J,!@E4KJY
+M8S^H)H`6-F"8/=":C*1))`]U3NKS,"?99E[6N;EXHTVNSRDT5O6%0WMZVG3<
+M2V<KO>@68H4FXX7+^!>EMMZ+:K_SD<KLZ%:E3;&J%[/#A]KS^3+XNF&[*AU.
+M\#&&#E0=0Z@T,(&_=9-5[[A\`E>K>G'LUS7+R7.,A1=.+7W.H$#Y3U[-Q$$+
+M0Z59-I4]3FB8WA3OAG_4]-[7O+,$MY5R@W$X*KLI@NW*M-U#&WNNC)WC&57J
+MC)GA3N?@M*KW)`&#NM1*S^H-!I.7(W-/_P!<XCOLNNO3_(/=<S4IZKUXC,K5
+MZ<[VYOQ51F@Z1NN.Z56-KU@:MB5Z#XEMYH.,+SCK`-&^U@[%:LW'/JO1+7^9
+M;->T[A.ZGZN,[*KX4N6W'2Z<'40%HPX[[+#:LYF2T-D<F4`8&RK<`"57JD!T
+MSNFA#5``$1*HW;FD$&%<JO`$Y5&YR_:545"WU$CCA1WC-=$A712EH)P@<P$E
+MKCC@HE8%H[RKPT\D']%<JZ9@*/K%`4ZPJM.`5(8JVPJ-@'V4ZIW%:YIP[6?W
+M3!K7,]RIW,#FC5B$%.F`X@&$%"K3-*KOZ2KMJP8)X37#`XG&45C^:)&%*L;%
+M!W\EN>$6L]T-`M\H8E%+?\*SIMS'7#_"T-'(W6/08]@-0Y:_*VO&8_D'&9X5
+M2WJ,=TP-J-`<!A=9=[<.G/7CFN>0W:>5E==93=1@CV6SU*DQO\P+%\05)MAB
+M3*L*HVE336;JTXSA=5X<J>EW^:XUSBQ[3'W70^'ZY#)X/*WWRQU7963]39!V
+M6ST]P(&#E<MTNL=/YACW71=-JCR@0%&FS1=ZA&5H42-.^5DT'ZS(!$J\*P;3
+M+CVV6=+M)=UG/<*#'23N95ZRHBE2`@@\K/Z8T%YKOW=LM:@X$"3A3_524XVD
+MR5,`(B%$V-X.RE9"*DIMB"5+`<R`HP/3,J1IG$J*A+32=K9LK%O4:YH)&2DU
+MH."9)45>D6NUL)]PBIR)S&/=9OB6GKM25?H5P6AKL%!U5GF6C@"I2,#PP\A^
+M@KJ;=PB97(]#>&WSV.X.RW[F[93H:0X2>RVST;KO4`QOEL,E8_3Z56]N(&W=
+M2/8ZXJ:1))Y6Q94*=C:`F-<96=G8+RX;:4VVU*#4/9;'1*7E6X?4&2-UC],Z
+M<ZOU$W54SR`2ND`:VAI[8PN.5VMA6W4:+ZYI!XD<2K#R'`&?C*Y#K6JPN?/I
+MOPXY6ST'J3+F@PEV2%TQU8U_5I56`M@Y6;?6[2"M34'>D$&5#>-:*>8(2QIS
+ME;^6X[@!1MO=!C)6C<6KJ[SL`HSTQ@&1*SLTSKBJ^Y)9_2N'\9=&+*AJTF3.
+M\+T6I:-9^4`:55N;!E5A%2,K&<]N6L;IXU7IU*;I`(A;OACQ3==.J-94>2S9
+M=/USPO2JM)I0#[+C.L]&KVE8RWTM*QCG<6[C,GI?0_%%EU!@8]PF,_[A;0MK
+M.K3-1L`N"\-M*M>UK:V/+7!=#TGQ?=4G>75>=/O_`-ET_CFQSCTWO'?1YHOK
+M"!"\?\4U88^F<0=Y7J/5?$'_`!"R\L.ES@N&ZIT2K<5'.#=1)PO+YO'KAW\7
+MDWV\SJ>8ZLY\&3M"EL];ZKJ;@`!GY787GA_RO4YD+&N.G,I7&L-+?A>:XZCU
+M3RRHQ7=;T#/S`1]-ZG4J7`;J,3D2J'4V.<[,CY0V3/*)>[Z<+EZZCK-6.^Z7
+M?@4@TG/`*UZ%1M2D)$D[A>?],OG/N@ULS\G9==0J.IV8<(EWNM2\.=XK>MPQ
+MFI[2/H5:97]49C]UA=*K.JB,GYY5FI=EC\DAW8JR+[).IU`XF0-^5E=7Z1;7
+ME(L<P>K*DZK=--,&23\IK*O4J.$\>ZQE_KI*X[K7X=LN-3Z(ATJI2_#6NZD&
+MAH:!S.Z];MS3%LQK@)(S*FHUJ+1,1"LEZVZ3S61X_5\"%CJ=)]-H:S^H#+OE
+M=3X=\&6=HYM3R?4-B0NHJ%E2Z!#>58K564P,PI9;Q:7RVK]E:6MK:M+:8!(Y
+M2-^QC/Y9,MX"R;SJ;74M,RJHNV`Q*MLG#G.>URYZH75C)52[NP\ZM655O&:S
+M+"<YCLLZM3>&%KB09Q*X^_QK2Q<D5-0+S*JUKC0R`X]E4N+MU(QW"CI5C7:'
+M05F_E6C86C[CU9C==YX&HLIM;+0>ZY;PM2\QH;J))7:]`L:E(X^JU).TMXT[
+M'IU2F&`#$J[YX#=\++Z?:52P1)6I9](NZ[L@@+K+\<D52]$F"H*MP\MELF5O
+MT?#C6MFJ8A&_IMO281HSPNL\.>7QB^3&.2J&XJ.@`Y3#IM>J9=NNG%I2!.EH
+M1,H-G\L+>/Z>WMB^;\,&UZ&TP7"?E:-CT2D'`BGMW"V+>BR>,*[;AH'$+T8_
+MI\8Y9>6U4M+(TV@-=MV4E>W>6@-*O4V:L@Q[*5C`)E=ICKIC;#=T^JXYRAJ4
+M*MN=0^RZ-K`L_J3FG`[K4P9M8E2\J.=!D`=@H.J>)[?I]-IJU`/;_82\075.
+MSMG/YX7E'B^[N^HO>:;"6@K>YC/;)PSMZQ>DV?X@]+J5=)KM!^O^2Z#I_7K>
+M]IAU&H#.<%?*U6G5J7]2F7O8YIG!73^#_$'4>D5!3J/+V#:5G]W&W34E?1_\
+M4',`)RHZE8/V,KB/"OBVVZBQM-]0!T97327MUT7RU=$V.]>=!@A8%)Y_CG$@
+M22KO4KE[00X$++L:[7WD#E6])]-X@;-$X^B\U\5TCYSH:!!X7J75!KHG'T7G
+MWBVVRXYP5J.=['^'%V^7473@?W78R8_U7G/@ZLZWZL!,:L'*]!+R:8(^\[K'
+M^-"J.`;D*E<D:L%25GD#=5JIY*NA'6+B,C?@*![1&0IBX.RW<;!!IDYWY01!
+MQ@B,)XU-@%3>3Z9E`69G909O5:6J@[.%1Z82&.89QMA:O48-$\@<+&L"16>$
+MO42?5DAAV'R(2:P`AP">F`XR1A3M8W3@04%&YSB)16M,@SIW4KZ<UM)D?"FI
+M4BR6G'92D6*#1Y39(E%#>X2;HC;]4O3V_59TZ.:94'4>JN8XC0P_=#U6A2I5
+M2`0.T*#I3?(NJM7,%1]7>XN:^<NS,KMJ<//]9G4*9`QD%8'5Z(#20=MPNGNO
+M5;SB=Y6!=L<*CIR2=DJN:NJC)]6Q.RV/#]0TZ,D@SD_=9'6&:+B>"5?Z0X:0
+MP5/:>ZU.F:ZBP?',+H>DW$4XQ\KDK*J`X;SW*W>G58@DXC9(O;KK!P(&=QDJ
+M6O4#M-!I!)W6=T^J74QZN%/T]X?=NJ$&!LI81OV+6M8!V5ZG^2(*SK)PF!`5
+MZF^!NHTM429W*EIB8[*O3<)B=U9;@"%%3,_+`W4C6X'WE14\22I9$1.%%/F,
+M#/RBI@_U94-2LVGDN`4)OJ0$`?571M8KVQ)U,*@KUBRF14G'*=G46:=L+/ZK
+M<NN&:*;9E/4VPK:JYO5ZK@#"T#7?7N!3&RDL.FM:34K'?DJ*Y=3;<AEL-3AV
+M4EX9URW["A3I4\Y="N4[2I49KJ?EWA#X=LGZ&UJ_(E;59H%.`V`LWGIN37:C
+MTUA!(C'"NENH22`%%0`8X@_='4JRW2"#*QC-W:3MG=5Z>+UODM@CNL=UG<])
+MKB"[RUV/3Z$`N</S)NI6=.YH%K@#'W4LU?:.LFYJJ/3;ME2B"")[*2X(JPT;
+M$K%(JV%=S7M.DGW6CTVX:^H"3LNDLRG#.M7E?I46,IP<J&XI`;`*SJ!`A/ID
+M=Y4TTRZ](&<9[JM5ID&2`MA]$OVG*J5J,&#/LH,]S/0!&#RJ?4NDT+AGJ:(*
+MU:U.)$%`YL".`LW&7M97%]8\*T:C"YC1/LN.ZQT6O:53#,-)7L7EEPP)"S.K
+M]+94!=IB=UROCUTW,M]O)J3:E%^DL,!;_1ZC'LBH`#O*Z#_@%.LXZFJG>>'Z
+MM&KJI20F[]2R?%&_Z?0N*9.D+E^K=!8ZF][6R`<GLNW?9W%)H#ME5O*#VV[Z
+M5,"'X=A8N,R[:F6GDO4^E>K2UNTJK=='<:<AI!7=WO2*QJ'33+IWPH+NV<RE
+MIJ4B#W(7&>&?EV_=KA[*W=1J@D!L8GNM6ZZEHH"'Y'=:0L*=1I&`%G]5Z:#3
+M);&3O"YY>*QN>297E?Z)>NI40YQ;!&X4M[=MK/:01)]]ED68<RB*;C):,[J&
+MO5J4ZX:""TXP5PO'#K&C4J^:[3J,3O*N6E44-.?JL>G5`:'2`!O/*EI5W5'[
+MRUJQMN.CI7CG$MG"G_B(GU3.ZR*%9E%AAPF%4N;\@N>"M^Q&ZRZ:VO@SW17E
+M?73UMW/'9<C_`![G7,AYS[K09?.--H:<_NI<MQ=:37-4AQ<#OPJ]*N[SR2X^
+MR@N*SG"2`0/=5*M<"H2TG*YMR.@L+L.J-:YVVZ;KU;R6BHT$25SM*^%*LQY=
+M$')!70731=V!<001LDE6\=L*XJ><]KFY]N5IV5`LM]>K$8PL[I]J\7D%OY<#
+M*ZNTL:E2ES'*LPW>&<LI(+PV'4ZP=.^R]6\%61NV!SMB/\UR/AGPW5K!L-7I
+M_@WIE>SI!KFQ`V^Z]7B\4MU7G\GDNN&_TKIE*E3:"`5JQ1H4Y;I4%K3?H#LA
+M!>M<&Y)7OP\>./3S7*U6N[MU1Y:W;N%4KU''!XW*FH#+DSK6K5K:H,+>^&5<
+M9,P$3`XG`6C0Z<XMET_57:'3F-W&>RD&71I.DR,*W3MW2M-EDT$G=2MMVZ<?
+M9:D%!E)P;G*)C#VA:'DC3(2%$1(51FW>IE/98=[<>6"3]ET'5"&4\[E<CXAJ
+M[M89DK7QBN7\47=2YK.IC8'[)>'NGVE>V=J:-495^WZ9K::CQ^9+H-D:5Y4`
+M/I/"X>3^4W6<IIR'5/`M.OU5]>B(U'98G7/#%U9G#-0!WA>ULLAIU-/Z*M=]
+M/;5:6/:#VE9GBUS&Y>-/":1K6=>6RQS5VW@OQFZ@YEO>.G&Y4GC7PN&36H,@
+M@SA<!U!IH52UP+7-,;K>&5Q,IM[O5JVO5;'72(DB5R5RVM9=3)$Q*X_PCXMK
+M=,K>35J33(@2=EWEA=VW5XJ4RUQB=_\`?9=]RS;EK5%_Q!M1FEXAWV7.^)F-
+MJ,>=,@G=;/7K(T3YC20?98EW7<:#V.`U'&1LND<LHY*UJ?P_4@X8@XRN_MZQ
+MJV;'-=DCNO.NI_R[N1O*ZGP_=N=9MU'("EG*R\-USCR?LH*CAM.$#'^8-SE(
+MR'&(4:`0!ZN5+3F-DWECVD^ZD9@94#U!#1F57KN]/8\*U5;Z0[,JA7=G?<]U
+M8BM=D&GI)_18ML?+O7C43/9;%T<.))E8E0D7Q[)>D:=(2V=X[*3;`5>W=``"
+MLTFF>9]U%-1:#5]0(A3/`!E$QL"2<]D-P0,_HHJ6F\!@&4_F#W4+3Z1ZH]D\
+M_P#6HUIS=9WH;3(`,969U!AT$QE2U;DFLZH1`.TJM<UBYLR"5VTX(:A(H_F^
+MBS;RF7DN=PKM=SM!XGA4ZHFE,PI5<MUUI;7#G3I!P0=DW2ZCVB7MD'^J5<ZQ
+M2Q,3RJ5H#5I.#I`&V=EJ=,ULT*Q#P2[!'!716%4:6DE<9:5=/I+7XY*Z+IUP
+M7TFB=MH*I+RZNA<%E(0Z0!PM?I`TVV3NN5H5XIM'O]UTE@_^0WX4L5NV3\9S
+M]5I6[NZP[6J`X0?JM2SJ:FR)[Y4I&A2_.3E66.TA5:3I8`%-3)U1*C46J9Q(
+M0WEVRA1DD!)BYS\0J%[5LV_P9(/LL7*8\UJ3?#8I5*%4:GU9!15KNPH`RYI7
+MF-!_B*D-&A_;A07=MX@N`Z7.SVA7W\?Y/V\^GH%]XAZ52!UO:`-LE8UYXZZ;
+M2D4(<?:?\ES'2/P\ZO?U/.O*[P#F%UG1/PVM*+PZOZOF?\UC]Z7^N+7[6O[5
+MF#Q/?]1J1286TW<E=KX*M*9#:CQJ<X<I7G0+2TZ=_)IAL)>&:S:;M$P1A:QM
+MR_LSE).G;68``;$1PIZT"F52LGZF`RI[JJ'-#1E,NEVJ5ZFFF23NI.E4C4=J
+M>=ME'6HZR)..RO\`3@&P,=LK&*XS2]28(P43FM.WZI,&(!!^JD:.\?=:;C(Z
+MYTYMQ2/^+VP%SEN]UG<EE21P%V]0!P(,$+"\1=+;4I&HQN1V7/\`K=Q;-\4U
+MI=,<T>K=7*+VD#..,KF;-[J=4TW...Y6Q;O)8,KKVQTTP6G8P.RCJL;"@IBI
+M.ZE.N((6:T@K4L3&ZJNIGX6B[20,;J)P;R/NH*@!&!A#6IMJ@#WW5I],3,?9
+M`8;N84[X7I49;,INGGNF%!M5T$81N>:C](`5R@QK&#W4OX(R.H=/%1D:<+'J
+M]/'FZ=/LNV\K53P%5J6+7/U1NL7%K;F[;HM$PXLRL[Q'X=HUJ9T4Q)W@+O:-
+MG@`C"CO;!I&V%+A%V\AN/"M1C"6@_*Y?K?3*M'4T3\+W>ZLV"@06CZKS/QI0
+M\JY=%,@$]EBX-3)Y6\/9=%A#AGE-6B"8,CLNDONF-J.+].%B7ED6/+73'[KQ
+MY^/5>G'/;+\XNJN9I<X*Y2,-D8CA3-M&ADEH'>!NJX8]I=`7++#3I,]E5N7;
+M!Q'<JA?W%1KBQI)*G;3>*IEI=K*LML*;FESV$D]UC4CK+(R+8/#C4)]+LD+6
+MIUM&F3Z>Z"[I4J,`"&G@*(.<ZEIF,)9M;EM9K7-)M$^H@E9#*IJ7!!=`'8*V
+M+2I48&.;^;F5:L.F-#=9:1ODJS$]Y(:QM&U"Q]29WA=7TI](46L.\05D6-J'
+M.#6%=7X:Z,0W6[)/9;PP<<\_R'IO2:=2Y#V,D'*[#H_098':-ALM7PKT9C0/
+M0<CE=OT7I3&LDMX7J\?B<,\]L;PG;-HU-#F1A=I9TF!H(`677L/+K:J8`6G8
+MM+:8D_*]6.,G#BM&H6F&C`5;J#I&1'PIG.;JPJ?4GM#9#I]ETTSM6K5*=&GY
+MCR%-T[K=C&EU1I(]PN+\:]5N:5`TZ3'?(E><OZIU6E<N+*M2"=I*7+#'BIK*
+M]/HAO6K,`$5&?=/_`,=LA_\`I&_=?/K.M]>B-50_=%5ZGXAB07Q]4_<\9Z9O
+M?CXBL6X\YN?^I1N\46`.:K?NOGQW4NM:CYCJP^Z.C==1?E]6H([DJ_NX)<,W
+MT+1\1V53`K-^ZF/6+73+7A?/G3KCJ8KRVN\`^ZWJ?5+UC`U]5T_*OOA4UE'I
+M?6^L4G-TM=)'995"B;EQ>X$MW7/^'?/O*\U2=*ZI[A0H!C#^JS<O>\=+)Z]J
+MM^\,864QD*'HC-%4ZOS%6J-L:KBYQGE2T:(:\F!]%G/IG2_;N](DRCTMDF<%
+M0T8$P1*DDQD[+>/,%>_MJ55A8YLA>??B#X,IW=-U6U;I?/'T7HU0@C;*JW+`
+MX$`*Y8S)9=/FCK?3[VQK&C589:2%K?A_XDK=*Z@UM;46$1GC_<KU#QKX8H]0
+MIN>U@U[X7E?6NBU>GW+@]A`G=<;[8UOC)[(:E#JW3&U*3VY$X*Y#Q#:/HM=$
+MS.ZS_P`.^O/L[@6E<S3(ALE=EXIM&W-AYU$#(7IPRV\^>.GDW52YU7,`@[K9
+M\*LJ7%N=#H@+.ZY1ASLPX'NM/\.G#SC3C!5RK.+7:+BD0"?96*3*[@,`+5K6
+M8.0`HV6[V]L;++2@:-P)!<$#FW#,3*U7"&B?U4%9NF85&;6J7.VP"S[JM7!]
+M;/LM>Y,.R`53N2UXG2$1E?QF/5QW6=4J-=?AS7<E;%U18_\`ISW6'<6T7GI/
+MT5O236VO;N&K>)Y5VAIF)^BPPRNS.DJS:7548<W'S*RK<C21G"@N'`.V*K.O
+MV@:7#]$GW%)P!F.R"VP`M">&J%CVZ!Z@G\QO<*-.$NZL^GA.`/+!=E1U634P
+M/=2L:U]/2.%V<5:H095:J=0CG967`ZCC95ZS03'ZJ:5E]8I`T-``E9UFP`.:
+M0/HM/JC9JM9V"IT*(:\P))25FHJC21#A\:5=L:CJ+@W8#@R%7SKCCOPK)IEU
+M-N-7N$&O85IK-DF"NJL:HAN9PN#L*FF[%,SA=/T^O#1"U.5=/:UB7!H^RV;*
+MI#<?J5RO3J\O,N)6]TVKKC&R6(W*-0``!6K=S7.D+-H.DB/W6@R&@`?HLUJ5
+M<:X<HJC6ED$`J"G!(_NBN*PIT_[J:VNT%X;=@@,"CL;1E:KK<T`)4*+KE^M^
+M!P%IV[(`;VV"QJ7IKI:M&-:T-T@*WH]/^JKVXSMLK;!_W6A4ZC0\RU(7+V+1
+M;]1<TCE=F]DM(7(=<I>1U`5`8DY69=9+>G4VEPQM)L<C96[`&JXE<_T>J;D1
+M&RZ;I5(LI9Y4SO.G.<I:K`&>Z&V)#O4%/5&H?Z*!PAPSE633JT:)$-RI9RJU
+MLZ6@&`58:"8[(T51H&905F![()!"F+0/<CN5&1@D`945S'B#IQIN-9@(^%5Z
+M==%I`<2/8KJKJF*C-+A([+E.OV+[>IYM,&%B7UO^+9MM6M5KP,R2.%;`$9Y7
+M,](O@3I(R-UMT*NH`@[KK6)5M]-I]E&ZU!R$;*DP.49]+20<]EC4K6V=>L-,
+M8*I-IU:C@'#'>5HO'FU2(Y[JRVB`T#3"S_D5FV])E-V<E66,&L$%2U*()QNA
+M-(@X36A("`I:36P2>55<2",8[J1E8!%70UH;`E#4:"S*A%6=M_E.'M(R<H*M
+MS;![B-*Y?Q?T*G7H.<&Y/^^RZVK4`<51ZE4%1FF-UC+':[>54>A52]S(Q*Y[
+MQ7X?NJ)+@TP3_OA>P4NFN;5-7RR0[L%'U3I-.[9#J6X[+A<-NLRT\";1J4_3
+M4$_*MV?3&5R-`A>B^(_"5%E$O:T`_94/#/0CYI#FX"Q<-\6+[:YC`M_"DT-?
+MUCLLWJ/3S0FF*9G9>K'IS@T4VTXGE"/#--_JJ,U'E+XI.B>2WMXG<]'N*KQ_
+M*<0I+3H=Q(:6GY*]J'A^V;Z13_15+SPZ)!8T1\+$\<VW^Y7F+NAOIM#N5/;]
+M-<ZG!/U7?O\`#-6J(`PK%OX4,1IRM?MQ/>N#Z'T>+F2["[CI%G2I:-3H5YGA
+M&L!+"1[PM&T\)W3J0ESI[PM8R8LY6UK]!JVK&CU`'NNCHWM!K``]H7`7W0NI
+M6DF@]Q473K;KSW'4XPO1/)XYVY^N5=U>=2MV/!+Q]%/2ZM;>0#J'W7#5>C]6
+MKN#B]TCLIZ'0^JD:75'1]4_=PV>F3H[_`*]0H_\`Z1L?*CL+\WSBX&0L^S\+
+MU:@FKJ=\K>Z7T06S!N,*_N;XD/37U%>V%K<VY#J8<3W"P3X-MZU<O\IH;VC_
+M`$7;T;-K0"3)/NK#:=-K8`!4R\<R673E+3PA9,:)I-D>P_R5O_RY9-;'D-(^
+M`N@JQ*@KN<!NK/#BERKGJWAJQ+3_`"69]@LOJ'A>U+8ITQ]%U^E]3$84M*U!
+M;D9*7Q8_#VKSEWA]U(D"F`HO_+UQ5J`Y#5Z3<65-PF(*SKLMH'3`,]E/V[\I
+M[,KI=HVQH``>H"%;HT'U'R9,J6A2=6=J<,%:-O1#0!"WC-349O/**WHPS+8^
+MJC<P"K!G*O\`EC3@*C=RVMR,K>N&:8M+78S*1,$J:MFB#'U55\SE2<5DG.TG
+MY4535F"C)$@'"9\&8*TJK5;JF2N;\3]"HW])PT#5W74%A)V0OI:FQI4N,IMX
+M7UGI]QTN])@B#Z2N\\!=7;U'I9MJSO6T`>I:7CGH-.\LR]K1K&<+S[P]<U^D
+M]:\IQ+6DP=USG\:MGM%OQYTS^%K/>UITN."%E>`JOE=4+"XYXE>@>)[6GU/H
+M@JL&0)QRO-^AAUKXA@-YA>B_U<9V]4I`.IC!P.2HW,R5-8Q4MV$DB0AK@#(4
+MBJ58.S.P4%9TM^5;J@0>52KG!C"(I7,D20J+R-6ZO5RTX"I730(`PJB"X.#(
+MGLLDLF[U`+3N7.GV673,7I(VY4O5)VO,$S_DIZ+!AT#"CI`;S$\J>FT3@J*"
+MM1IO&VRK5;5IR'*XX$-R@=!,CA-$0LM:VD14PB_A:_\`\BMTP-`S">!_B4:<
+M"XESH."$=$D3!D!0L)#<R/D*Q;Z@V8&Z[:<:BKR'%5JC0'YY[*U=CU856X(`
+M)D2%"LZX:7W3G#@PH:K);`P?E:'E11G:52JL(>2,SA155K)'<'LK-`Z</&^P
+MF%"YI#L_]U/0=K<,25>TZ)S1_$-)D&-PM.QK.:((.>5E7NJE4:YAF3$'A7K"
+MIKPX3"16]87!'($KH^DUM%,$'=<10JNI51.&KH^B7(>T'5*TS766+Y=RM:W<
+MV,RL#IM4$3NM:V>20I2-$U64J9<H+1C[NOJ(A@]U6K$UZXHM)CF%L6K12IM:
+MP<+%_#<_*9C`Q@#>$QD&0-^Q4K#QV35#`C)*:5-:N.L$G`V5ZFXG/<K.MW28
+M5Z@9$;*BP(+8`*YSQC:N>&^4W<KI*8_EX,*I>L#ZC01)W6,HTH^&+-U"V;K!
+MD[KI:+=#`J=NP`-``$*9]R&D-E8QYK&.EID'!450#5A/1JM)B4540<+I72#M
+MR!LK=%V),+/8=.T^ZN4G`MXPBQ+(WWE(Q_LI-!/;'9"T0XP5&C.`TD2J74*-
+M.I1+7<A6W&-S/LJEZ?4`.<%2P<?=6=:SNW56DZ25H],NPX`ZMEN7=FRM;:2!
+MLN5ZA:U;*O+0=)*SC=<4RF^736U8.&_"EKU(9A8/3+T.:!^ZTC6;4<!.5NLR
+MM"RICR]4F5.6>KTRH;?_`)<B!^BL4L-EWW4D:1NIR,F$!IP`K`;.=D[62X!2
+MJINIRA%"1*OE@R(`^JC-/U0.5!4%(@9PC\H1,[JP:8&#$%-H[#"FE5:E&1*J
+MBW\RN`6\[+4-,QV3]/M0ZKJ*6$2T+.F*0&D;<!17'3F/`AH^RT]/&F?92AK6
+MMG$=E-1IR'7.B.?2.`0LSIO1/)=ZFC[+MNH5&Z(T_14&^HQH4])O9MF?P#`V
+M7`>REHVC'0(5ZI:U'$P"FM[=]-TP5C*S>ED9]QTX%X@<\*:GT<.8"6+:L;37
+M4!<%K4K6F&Z>RSCA]:<H.D`-!TA2T.E0Z2V%TE:V;B!E)M(-`.5UF++,H],:
+M6B1GW1/HMH-($>ZO5:S&LW.%F79J57P-N%9C(EY0/8VK4RR<JU2M*#698)04
+M:19$@R=U,`Z<@Y34MY7F#9:TA_0$YHTFMPW*"7!V)3OU&-)*:B<B&D-``@IG
+M/(=AOV2;3/\`4EY3@XPKP:)SC&WW3EV,G]5(*9:R0/HJ=:I_,CCLLY9Z60US
+M<EHP%';.-P^`FKEDP>>ZFZ-0&LOXE<YEEMK46J%#2,C*D<`T2?U15:M.F#D+
+M.O;IS_2QR[R,6FZA=ALAOZ+.%)U6KJ>,%7*-N7G4XRK+*``@<)645O1TMPV%
+M*&CD*4@S`,)0"?=601D'Y_LJ74Z0@&/HKYDG!5?J(]`D[*I4=`:K<3!`4;J0
+MG"L=/&JC.T(W"#')6/\`4RXK.J4(<9"C-/@K1J"./E15&3D05L4_+$8RDQD-
+MSCY5O2(E1$;@B$%2XHM<TM(!E>7_`(E]'_AKD75`$23,!>JOP")E8?B^PIWE
+MBX.:"8*93<3>G,>![L7O2G4'.ES1&3[+D.J6O\)XK((_,XG]5T/@B@^TZI5I
+M%IB?@)O&]H1U>C7:`?5O]5,,MXV,Y363H>GD?P=.,X&R>XVSA*P'_HVF!D!#
+M=P`,K>*5!5V/"HW!,D#]%/6J0)!E4Z[B3+9515JCU<?=4[C\V3"N5R)!.%2J
+MD$Y^Z(JU3Z\SLJ=O+KEQ@QRKEUAITR<*IT\S6=D_52]$7&P'1'V*D9J<[T[H
+M-!C8%'0@;-GX0&[\OJ.R:F&X.K9.(G,DHBT$=CPHL.`XB92AW=&S3I$RG]/<
+MJ;C3S.W=+)[JY;5!@'8\+-MWEM*-6KO"N6;IS/W7=P6KR"1IR%0O&X#!_4<J
+MY6>($[*O0;YUPZI,M;@+-6'>P>3@Y5.L``2<=CW5\!KG$=N5!>4Y9EON$JL:
+MH)J`D$CLI:!)<``(]U)=42*0=F?904FD.F00#L"D2Q)>M:6M#@"?CE'8.#'X
+M&?V454&I4B<`<Y*>FZ'"00-B4B5IL+:A!&/E7>GW+J#X;^4\K,L7S5+85YD:
+MM)C/Z*SAJNQZ+=M?3$>PRMNG<::)*XGICWTP"PB)6W:7IJU&42XQO"U6>G4=
+M%8\36=C4M:VENY]UFV-1OE-`.!'[+1HN$3,+&FEEASE&X225%1@Y)4\0T&8!
+M4L:!)!`"M6U0$Q]%3<,GD_*DMW:'=Y1&K2)B8A-#7OGLH#6TT9$!3V)+J>HQ
+ME8S+4VK13+BJCGMJF0=BH?$UT;:UP=U1Z1<A[0=6_NIA.$C7H574G2<A:%"L
+M*C1,3^BHT--294C&.9EI6W2+FKT[;?<J>BX0J=%X=$JS2QSNHTM!P`ALGW2/
+M>4+-.F!^J*0!D*:4%:&LU$!5*`-6L29@84EZ_P!):'&45C3AD]TJIF@2#V5#
+MK-DVYI$`96BXP0(3.`TZ5,IM8X*X8^SN""#$JW:70\T21D2MOKG3V7#"=.RY
+M.X94M;C27>F=UG&WJLY3['96E753W5JG4).-AV6!TBZ#FB7+9MWR)E;TDJVP
+MR(/=3,@`S/95J!>7^IP(XQLK$<\J-G:)R#(1`<D)J8/;*D;DPI1$^F79!`4C
+M:+0WW`4K&M&#NC;N,84TJK7;I:K-C3#:<[2HZK2]P&%:8T,I:8'T2K#B!RHJ
+MSC'8J0R_`4EO1#R9E.A3;9NJD$@Y5@6+&Y(`^5ITJ(IT\H;EHTDA36U4J=$:
+MM$*9UI2+?RH*!FI,X"LZ].Y4UNJK-I%CI`,*1E<@P>RL`->T84;J(>9[%76A
+M(QP>-]E7ZA#:>#**K2=3RT_=4:M74_0\\[J\!J-)U0YF%890:!NI:+0U@&_P
+MIV!H"FOR*OD-[;G=%Y`U1"LD-F>4_I@<IHVJFW`3MH-Q"LB"-N$FAF"#":$+
+M:`)V^4A;@[[#LK!+0))CZJ)U:FW=X31LWE\8"JW%BTNU$HZ]]39L9CW69?\`
+M5M.&3E+A+V>^AW]M2;#IV04:[:=.&!0-K/N0"\DCWX4U*FP-RDQDZ2VWL%4U
+M:SX)PCIV^@[`^ZL,\L#>041@[%:TR&FP!IGA.-_A.X`#TF4$#5NJ'?G(*$3`
+M)^$SS,]PA>2UL]T!8&(S\JMU""S&2IM7V4-_`IRWZJQFGZ8TZ3&RDK$:@=H4
+M/2\-,E2UXF9P5SLX3()<")(]D#R`(*7[#*$YAP*W.E"8TX0.&9`GY4D3_4AB
+M'^RHKUJ<CTR%4N:.JD0[E:#Q.1N%6O\`_EX5B5Q=>V%IU8O:/S'^Z#Q/0\SR
+MGZ3W*UNI4`ZX#SIE4>OF&,`B9W4DUMF\E;PR@P#``4%TZ2<?JB#M5,`G<<*K
+M=/B8(GE:G#*M4)DP<*"H9&)SPI'.!F#\@J"J=.SAW1%>OEWM[JM4#OS<=E8N
+M#J]H*A<($`_=!3KM9I)DY53IP'GO),$<*Y<?D=..,*ITP.\UT']4O1%YF<1^
+MJD83$1`'NG#1,D'W'=.3+<84#.(<!!RG`[DIZ1:1/^J:L"#G"BI&_EW/V2^O
+MZ*)E1FD22$7FL[E--;>/4*CJ;]1)<.%KVM21,P>RR[?3IT.SV4],NHF=Y^Z[
+M;_+RK=P]U)AP>PRKG3F>7:^K!(G*RJU7^)N:=,8:W)6L'?R2W[*::@0"PD\(
+M+C\H$3/Z*5Y/E1$DJ/3.\[(TJ5VX`@[S*I!A95(G[K3J`D9:%0>#Y\:02HE5
+MVG_U;A)!`P%-J(.9]E#/_JR,R,;84]P"TSIGXE$Y%0<:;I#MSW6@Q[?S+*HE
+MSJ@!&^P"M^8-@[E58W.GUG>6<K2Z('U+AU:?RX7.V58Y$D!;OABJ,@DS*UV5
+MU=A<NI.&HF%MV=TVHT9SNL&U#:@$1*O4&.9!;Q[K(Z*W,MW5RG.W985G=EK@
+MT\[Y6Q:56N`,R%*U*DJ@`2H9<TR)^JM/TO@JL]L'(E94=2Y'I870MBP_Y+3.
+M!"YZDTOO6[P%T5`%M&0N67-9O;'\8--2E(_I_P!5B=&K%A,SV71==;JH'4N6
+M:UU*K.5O#BMV<.MZ96U$0>%J4CJ;PN;Z/<9`G*W;>HV`9)6S%8JLV<U'1JC`
+M(3M=Z1"&I3CU`+/3HM4W9PI'/&GC"J4:P@ZC":K6!PWE4V6H5KF-X*O4QB`J
+MW3Z`8TEW*M`9V69^6C%V0$;8(D'Z)B&XG=$&C<X0156M(((GA<YXEZ=K];1L
+MNG.^57O*8>V"-\+-QVNW#V-1U"KI=N/==!TZZ!8)/LJ/6[!K'ZX&%5L;G2^.
+MWNM2[<[-.JMZDG#L*SK$]UCV=QJY6C1>#C=-+*OL)+)E24CE5Z1ALD>TJ>B9
+M(SMP%&ED$$`;]T1_+,[**8*)YTL10T0'5YD8'=6JL0%7LBV22`K+&!SO]5EH
+M]"G!E7K6F&[0@HTP8PK--H:`"Y%AW`!D2H;HPS^RF>0!G?Y5.\)TQ/NJE0V@
+M'F&45P8YP5%9_F),[JQ<4R1A94%"M!A7:3FGZY654)IU([*S0J>D=RM)%NZT
+MZ3`&VZQ<&N8V6A7J$TX<#"S[9NJL7`*6+M:+](QPA_B-)DIBSDG'9`:8]\\J
+M@_XKD9A+^+&5`:?J@=^`F92`=D%-HE_BS)]TOXP\%0BG\I"D,%-B2I7J$1)4
+M%057XU8*L-:`$X89SB%-BF+5Q,.<?NJUW:`$20M8#95.H0"`2%=<`+:V:*(+
+M2?NC%)VTQ[RI:0!I8.GX3GL2DG`K.;4:3#DPJ/8W.1"M$#<J-S`>$1"VYP9'
+M$)V5Z9`(*9]$'X41M@#@P$1/K;O,<?*(D1CXW5*I2>T^DJ-[JH]U=C0])&-P
+MJ]_4;Y<$A5Q=N!R%6NZFL:M7W59J[TUQ<V.#LK-5I$$\JMTA[?*)F5,^H"Z)
+MPN<EJ7@)'I$3*0$"/JDXM/*0$N@25U:(0/E(029"<3&R=\#VQLH`>`#E4[PC
+M3."%8JN),-5&[<6X,JLUD=3J,;5!,?*Q.MW-.I48UI$K9ZM0UTBXN`PN.>QP
+MORTN)SS\J\:VQ]:A<!3EHX5.L_48$X/*G+O1`.0JCYUD"2K.D`[O,J"IVB.5
+M*^1&-U`_5L4$3AJV*C<V1!^BFB#(0P8@")4-J-TUVDDJOT9I-1T?NK=P?26@
+M1'NJG1!ING@_U83+HC1+0'$@9(SPA:UWY01'<<*<M'"B+PPGE`5*F!'8*.KD
+MD/E2,=$$2HG3K+CO\J0(-;`]2?2S_$G#C'"6H^R-</%;%\.&J"9V6HUPTR1(
+M&<&%B4*K34])(]IV6D:W\EK&B2XP(7:O*.U#]3ZS01G"T[.X!;H><^Z"@P,I
+M!@R.4C0TN)&^ZSTWI>)!@`(7,(4/3K@ZB'JW4#33F55BM6U:2T`'4%GO]%:)
+M(/Z+3=3BFXSNLRZ#6.)=R,+/TO2L[2ZL7N`[*\UC74X':!E5K>D#1U%NYY4U
+M":9`F0>2D$%9HHUO?=*K^77,%3WC&N]>F>ZJD#3I,P$5;L7M-,ZCQN%L]`J^
+M6S5.YY7-V=3^2X@''"U.EUY8`>/=;B1WG2K@$`D_9;UE5#V@E<3T:YD!DKI+
+M&X``$E+$Z;HIAX)8`3Q+E:M0^F1G!5+I]68]2U*+@6C"SIK:W;W`C2XY/NGJ
+MP&EP)4'D2-0W[H;ASVLT[GY6+56>F4O,?J$[K9HP*<3LJ'1O10]6>5/5KR=`
+MY7/&;J3M!U-IKO#&G"Q.K4-!CLNGMK>*9>[<[++ZQ;R#CZJUUTQNG5?+JPZ5
+MT=A5+V@`Q]5R[V^74Y"U>E7&(E=)S&.JZBW,B)'RIW?EG*S[-X+9F58K50QD
+M24TW*@OJ@;L<GCNFL&U''4Z8G9-1H&N\.=QW6A3IM:W"QW5UI.RHV!*G:X$S
+MC"IFG)D'V1`/:%6EL&3@I`D_TJNVH08E2,K-,@N@*:5*,"80U!(E(/9,RC.6
+MX<IH9?4:(>PXRN5ZA3\FXD8GW7:5@'",K`Z[:C27#CE2\%Y4^FW):()6S:5@
+M1)*Y6D]S'D=BM;I]>0`=EISZ=-;U1Y6\PK5JZ3LLFRJ2)F%HT*D[%--RKP=*
+M&L\!D3/U0-*&X+@WY45-8"3NM.U8/^ZSNEL<6:EJVH)B2/A9;6:;0.,A%(.$
+M&2-PD>$43^TRJMZ`*9(W5C;)A5;QTMP/F54J.Q:1)5MP!'!56RGZ*RXB5%5+
+MFE+I4+':7Z<J[6$@E4JC9=LB):S@:<3A06Y(>0"5)`TX(4-%T5HW,H+1[$2%
+M%IWR84CL9P4SLA`,`@;X]T@V$1_+,(3G?ZJFS?LD`",<).$#!320`-,('#<3
+MRD02(U$)]1_[II_W*!<PJ?41D9/RKA^BI]0R.?H4B4=MFF,(G1)R906CAY6D
+M.E&Z`Y(4Q)C!E-.=]TQP<[)$PJ$X1S^JC<Z793DF$$YRB$3G&2@JP3F/E$XB
+M20<J(DF<JA&FPB("I]0H-T^DB2KK=P)D>RK=1ANG/U1**RHFG0])*"X:\OU!
+M6*+HM1/*$9V"QC$O:G-5IR20=E+2KN&3LI7@")3M:TB0/NNF@S;@!LN3>=JF
+M(2JT6N,!/2HM`01OJ!K3/[JE5.H%Q..ZM7H#1M"P.M]290IEK'"0K)MFW2KX
+MEZ@RA;%K2"3[KF>G!U6H:A$F9RH^KW%:M5-1P,#Y1V5RT,R(E7.SB1B;[JV_
+M>0%`]I.VZD=7IEH@P9V4?FLF0X#W01OU<M]E&]LC;93RUSB%$\>J`0@A=CZJ
+M-X`._P!U-4B%"1G,HBM<!L8,E5>D0+I\DY/=6KD0<D#'94NED,OS/)^ZF72X
+M]M>L,X4)@G(W5BL0!$[Y5=\[?W1",QJ#20.?91U#J=+?DIR^&1_=1%X@D['&
+MZ*E#V`;):V=D#64M(EZ6BE_C4TKP6RJ.=4`)F.ZU^D5/-O9T@Z%SMN[RP3R-
+MY6OX5KZ*+]0`<YR]&GFRFG3T@-4G)]BIM&KLJ=M5)`/!PKE/5/=JPW+#OHX]
+M,`^R!M6HUVEPPIJ4M.43J9>W.Y4_XI$BJP1/NL[J@T-/I$*U4:^D^!.RI]4J
+M"H!3$R=PE4]L!_#"#S*CR:F&F%.&^4P-X]E6I:C7<9(XD8E/J?%QH#J<1,*G
+M<MBK$1*NT7'`.GZ*.[I"-8`^B56>WT%X!C'!16-=S>25#<G0YSCL@MW%M/;=
+M6,V.IZ+<D$23A=/8W&IH/*X7IMQI#9'RNBZ==MU-,_"T.WZ94=`),!;E"H"T
+M&5R72KEKFC,_5=%8U`6`YCY4L)6U;/DY".YA[QA5;1QU29A6:)UU`)GY7+.<
+M-;7A4;2MY<(1=+:*S]9.)5+J1)#6"<J_T2`P-DPL83:XS35T@-C@+.ZG3U`X
+M6HT`MB56Z@P%NTK5CK'(]0H^H]@JMI5\NL!)W6MU.D=1QA9%>F6U)3'AG*.D
+MZ;=`L!R/E60\UZX:#(Y7-VUWHI[Y6_T&IJ9YA,F5K),:VK9C6TX&X4A@;**@
+MZ1DB%)CV'PLNAJ3C)P5-3,NS*!C94C(X&%%%H8[?"B=0G,*8D:1.Z)H&TQ*:
+M7:J*;QWA-JJ,<1RK;?S1PG<QA&=PIH4W5C'K"H]3+'4CW*U*M%GL5G=4HC1$
+MH5S%W2TN+FF`FMZL8E7[RV=Y9F)6/6.A\'ORF-8KHNGW'I&5L658%H]4+D[&
+MKH`DX6[85P<`[JTE;U%TYD(;EY`B5#;O$?W37+QJ:)Y4^--KI##HR=^Q6G3`
+M')5'I&D41C)5X`D<J-Q)_3";.F9"'5"<ND(I.(D2Y5+XB-U8)Y@*C>D:A@JI
+M4]CLK#`W5E5[/##*DU2[!A9X5)5$[*K69ZIX4SW$Y`RA<)YA+5T@J,=C2J-=
+MYI5I<M72"V8(*R>M4\2-PB5<H50]LSA&X[$+(LJ^1.X6BUX>T=U;$E2@F#E-
+MQD)-&.4Q'ND4YC>4+R3]$VXG8)I;R@/)$(9XA,#`W3:H!$H@I/('LJO4/R8,
+M'MW5C5[_`'5;J1:&AP.?96)36GY.WPI`9)4-HX&EN4^J#`<2D*)YEVZ1SNY,
+M82;AI&Z!W;;H,3_FDXD&>4+B1F50G$`PA<(.^2FY]3D-0R\"9A$.YPVC/RJ-
+M\[4\-/W5RI@;Y6?=NU5P-XY3XB]3;_(!S]TB0#A$`?X<0<J!KH!!68E[/5?&
+MQ4;J^@`RFKNG?A5:ID:9D+H-%M]0T22)5.[ZU;T\%P^BR[NB]WY7D*A<=-UY
+M=4/W3<GQ-6_4W6>O"H=%&2?99++>K<O-2N70KK+"E2=,!Q]U,6^F-*>UR_Q-
+M2,'J]*FQS6!H3LLZ;J8AH4_5VS6;D8*F9I%,-VE+VDZ9=Q9-.Q`52M9N:8:Y
+MRVJNDC;E0N;JR)51CNIUV<DJ!U2LTD03[K:J#!("KOIM<"8V09;[N!F1"8W3
+M8,'"MW%!E1TD"57?9-),&$Z0-6HQP`+N.ZS*3VLZFP^_=6[FSJ`#2Y8M_3K4
+MKYICG<)>J8]NJK$%N^%"20W.RH-K5O*!T\*$WE0$M+<!2:*O/=+M(43H&)@#
+MW55E^#,H:]XS8X[JBTTG3N$\GN/NJU.O3+`0=T_G4^ZC3YZ-8L!#P<X"W>AN
+M:VBWM/)7-5W/\QI+0X.,#NMZPK^50:<^K@B/U7HG+AG/PZ?I]1KR`=S^BU6'
+M`$GZ+!Z56@@XSB5LVQ+@-UFLXK31G)4OJT@`?51")D'Z*3U&F`0LNAVL:\$N
+M"RKFBX7\TY<UJUFN#:3B<X5>PHE]$U';.*E(I/K-=Z9D]U&_\Y!,8[J2[H$5
+M"]@)X@*J'Q(,[[#9)R7<7;9N"=D;Y<PP@M]1$X@<*RP?R)0C#OV`%X))4-`@
+MTSDB%H=0IP"3&!A9MJ^:1)`P4B5<MWF=1,1PM6TN-+!!E8]"HUP,">P*FM*L
+M-`)6H1W71+@%C3JRNGZ;7D`2=UP'1K@!@`<NKZ;<-('JQW*U4=C0K&-P(5_I
+M7J.KLN>HUVB@!,:N5T/1V_\`I@[NN&<^&]KE=@(/[(NG.#'@2F+01NHZ/HJ@
+MY2<.K?H'4T$.2O6C3)W473ZC74\%3U1(D\)6XPNJ4SJE8E^P]ETO4J3BQ8=[
+M1,%PS"R5B7#GC=Q71^':Y\@#5^JYWJ3"!($?*T.AU7LIB7+<Y8Z=E;U3H`@*
+MQ3?Q*R+*L74A!_57Z#I$R5+&Y5T.,D`HV.D>RAIOYVA22`#.RC21CI.1A&3]
+ME#(#2`G:??;A%2B)WD]T61B?LHVD;''PI0#&%E35`",F0LZ_C6&@Y6C4.EA)
+M,?"S6M-6ZB9'=+T`KT/Y.DB5S/6;?2^=.W9=A480-IGE8O6:1F8GW4TE<W0J
+M:7Z286[TNJ"X96'>TRRIQ)W*L=)N0QX!=.5J<L7AV=J[4P#9$2'7+6JIT^XI
+MEDEPD[*>B[5=MC:4:CJNG@>0(_16@Z/8?*K63HH`@B5.YT`3"SIT@Y!'"37"
+M(.Z`NGLG<X"(0.3E9U[.H9(SPKU4R"!B%FW%2:H$B42KML?Y??W4X@"5!0D,
+M$%3[A2-!)$@`;)';;=(X$PD".<JAGF/3$K-ZN06F>RTA#L0L[K#0)D<=TB5E
+MT029&ZLV]32?4HNG`Y!;';*>NW2[5)3%*T:;Q(`.Z-L]BL^UK1)<-E=H5`6^
+MGE4V+3B?T0.W_P`U(_NHW$``P44B0-DP,`2GYG2?E"3/QV*B"+LQCZ*MU*#3
+M[J5[VXB(4%[4!I20K"HK7\ASGV1"=?S[J*T=Z20$;3)F$A4T3W*8$SC]4['"
+M"!PFD?EC!50GNRHW'NB>8X4;CE`_]/NHR9=(Y12W3N<(,.$Q]4`UC)A4:\&X
+M:-2NDR8./94;@`W(R$O2?6I3]5'_`#59PTO+295B@[TCD?917C3(.RG255KG
+M.ZK//T4UP02JM4B,GZ+:!JNE0U?R[?52$MX*BJ?EW05G_G3.YX1N#2<2FTG3
+MC[(C$ZP'><V))]U.S\C0[]$'6F36:[B<J4-'EB"E[2=(JS0.,%0_E=$?JK-1
+MH.)^JKU&@'4(A5$-4G6.Q05(R/V4E9DG&%$6DSW')05:V'C,IO3!AN2BKM^Q
+M0-CR\?4HB"N1.DC[+'ZV--9KNQ6PYLS[;+*ZX/3.K961%NW>U]%IC"CN:3)P
+M(!3=+<'6HD9/NBJ%PQJ6<>BH/(I%OY<_94[NU8X%TP>5>&3O!5>Z$-R95TLJ
+MJRU>&@-=A/\`PU3NK--P#``#]T^O_I6--OFRL\%U,F"),9D+2MJWE46%L25D
+M6]1QN00=4;85ZFXEY$@C<$8XRO5'/*.IZ74U071@\%=%T^JT;F5R/2JCF@`.
+M#F]PNAZ;6AVDY@;I7GG%;K2"V8B=BI'.@1S\JO0<2R(V"L`$MC$!8KK*K=2>
+M!1#`8<]7+-I9;@"1`*HN:;B_V]-,85^K+*9C'UW655(EQU?94.I4"'!S)$[K
+M3:T:9,2H7L\QV<II5.QKC4&ND'NKQ+0V=7YN52J4OYA#9!.93N<^G3:UYD=E
+M>V9P+J30ZF0YQ(CE8K612).-6(6W6+:EE+I$X*K.MVFF(:#"EFE[9MNXZH8V
+M#/)4VKR\.,_W356.%:`2)454D3[;95EVS9IL=)NF@`.)$''NNIZ1=%S!GE<!
+M85'-J`N,2<KI>F78:WTSGB5M([SIU<5+RE3F<_"[OIL-MPWO[KS+P54-QU$'
+MM&?NO2*#]+!G"XY<Y).UZFZ'$<_*&I$DSLH&U1JW4Q=J:3W2QVE6^E5G!Y#X
+M@+8IN!:N>MW0_!P%J6U:&Y,(W!7K)D1A9%]2(:0MUYUTYD!9G4&3(V^%FM.8
+MZC3_`)>)^JALJA#8$"%I=3H^@[8652@2!NK&*W^F7&T\\%;%G5U-B8"Y2WJN
+MIQN?<K8Z9<2(U#/NJDX;['[05,P@O$N,K/IOQCE6J+YRI8Z1;VA.P'^K*C![
+MYA3!T#&5+%@Y(_+*-I.2H@1DDR4GU-(.>%-+LUV^!'*"S9$N)RH*8\^MC(5Y
+MF`!P%+VLZ"Z<D<+/OJ)()B3[K1=(!Q\*L]FMI/"5'*]6H@2<>ZRV-#:@>.%T
+MW6;?4TB..%SMRPM?&PY4C-;_`$DEU$96G8!PO!/"Y[H%<L<&D@Y6[0K`74RM
+M:25V5J0&C/ZJ9SAI$K)MKN&`<*2I>0T;J.D:0?'^92U0-RL]MWJ$DS\)VW8`
+M[&47:]4?Z2>2%EUG?SQ.<J5]T`WU$?(6;4NVFY'J/Q*7I/K?H.EC<1W"E8X$
+M0-EG6UTT4]U-_%-VF%--;6R1`$?=)A$;[<*I_$9P04[:XTZIB.%=&UI[L@RJ
+M'5WRTP),*=UPSO)^50ZC4#FELB$D2U7LWB8Y*FJ-!!)&5#T\DY@*9S3D!T<J
+M155P(,S,%6[.K``,8455ON3[J%C]#@"K$:I,B1N@.(YRHJ521DJ02=R%*'J.
+MQ(,A1N,B>41`!.<>Z!T"2,2@!Y'!*@O'>C'&V5,\S_HH+LS2.\K42H+)X(R=
+MU8:9)AQSQPJ=G!,?NK3(F`T!2%2?TX3SP<2HW.(P-D[7%Q"H*3![*.I,P70B
+M).GM"#5ZT"QHW2,`1.R=WY=Q@(()!,R50!B2`250N#INACGNK9_,8(RJ-VXF
+MZ"EZ3ZTZ>6M]MD;B'TR"H6$!@/9%4=Z-RFMI5*X&DQ./=5JK3J@*W7`)SQNJ
+MS\XP4B17((.(0UL#<%2EHE1U&@B()(5$%)L@DC)3$>HC92AIG/V2+1N$1B];
+M!!F$5*'4`8"DZXTFB2,$#=5.F/#K>!CV5O;,$]PU>W)4=1@=&DX2=.J"(^$X
+M<-,;=E16KC)!W"AJ/AT$*6X/K.256J&0<Y50-8`D\*%H(YW4DRW<X4=9TNW@
+MC]5!#7(GB2L_K-+5;DM(VW5]SM39=NJUZ"ZV(/8K4[9O2ET5Y-H<G!4U:3_F
+MJG0W0]["=NY5JMB=2QCQPN78=+-BH+@SS@IV$Z\R@NL'2)GNK2!&D!/+5$TC
+M2,IY'=&]OF*PN'&H(VQ!E:UM5)=!B3@`KF[)W\SU8C8+8HU&G3!D`X*ZXW:9
+MQO\`37D/'OL/==)TZJ&!LC)W7*].<'56`20WE=!2>W0'$B=ENO-DZFTJ-=3W
+M`]E9?5TT"XC99O3Z@-,,]E)6>^K=T[<'$R5BS2XU>Z73_D:_5+E9KSH`.=\I
+M42&-T[`;IJH:XQE9TZ2A8!`!(PHJI]4@XYA2M`CDJ!Q]L<IH05/34QWR"BO@
+MVI0@-SNG?3#G2/U4=8PTMDQ""@ZMH:V@Z9)RKH>S6T2J-)@KWT$0&^ZFNFFE
+M6D"8@)WVR*]IM\T;*G=LTLD.$*[2+'TSJ'JW454!U,YSP5-::WMF$`D:'1W*
+MT^GW/I`:<=E1=1)!(`QRH:%7RFNP1GG8K4K%>G_A:\N]7_5]MUZ'YS=($PO+
+M?PGN`ZDYWO/[KNZEP=8.K[K&N7/&\MNA5EX$A7J#@6[_`%7/V-?.#]5KV521
+M\K5CO*N#TO!!*TK3348%F_F9A6.G57!\3CW6-?&]KSWN83,PH*SFU,X'=7G-
+M#V9"I7=+2/3LLUME=69%-T9`"Q6LF1L#WX6QU1Y%-P&)"SZ--II&3]D1")D@
+M&85JPK>7'=0-I%K^W*3AI=^:0KM'16MQJ8,G=7Z%3T8."N8L:Y;`U+9MJXC!
+MW5TLK8I/)&\_*F:Z,`X6?0J3_4K-*H8_-NHU*M:]B0J]W6]6D<IZM6&2J=`^
+M;6F<=E+=*T;*GIIB-^RL,&J)_=04G`"(RIFGTRI(HG-Q"C+8$QNCU"-TU0X`
+M[;(*%]2;I(.,+G.I6VDN&.ZZ>Y!..5D=3I&/RY42L2U(I58SA;W07BO<YSE8
+M56F6O[+:\&MFM(Y.ZK.G94:#-&R8T6]P5)1EH&?HD3G*CH`4&`P$G6LGF=U*
+M#&V2B=4,Q":%6M;PTP1`6;Y`_BP,F5LW+H9DY6?2<UUP$LX/JTRW@0W"-EL0
+M/4284K'8V1M,M@<*:Y57-)W'*847F<JV8W'=.".0J,^I1J#+3$*CU`O:"'2M
+MUQ]N%D]9@`DI$JK852&",JU_$M<<E5;-@T?*G--KR3D$I-B5M1N<X05=.X,R
+MHGL<T8G"!^L8""S2?I<`7`JVUP,$+*%2,D*S:UQB"G8OG2=RHJF"8,@H@X$"
+M#&-BHGX.#A`G$D08^JK7?Y#LIPX1NH:PP03NJ52LGCS")&.95L$`$%4*9T79
+M$B.ZMN</E(B0$3(.W=$"<F84(<)PI`09<1A4$T]T!,&?V1C#2-X4-4[CA0$7
+M%PPEO.$&J(A.W:`51'5Q*S;@D7329Q[+0J&'8_19UX?YX,0EZ1I4ZD,!A#<5
+M`QFZ&D\>4!^JBNAKIQRD2HVU=>=_JF/'<(;1GELR[/[J0C,I.C2*K@J,>H'(
+M"DJ\XCV40D"`(E4"X0XC.?JFJMC:8'=%$$H71O\`NB,_J@_E.!Y"Q^FU-+W-
+M@A;G4&!U,SD$+G+8Z.H$#<[JWIF=K]1LF<D]]U&\;QA3U`-*KN=N-R@@K@@C
+M]E5?CZJW7,;'(5-T$Y)PJ@7G8C`*"KR!(CNCJNTM`DPH7DO$DR0H(*IGC/=`
+M^#3/J@_*58;EI48.X=&1N%48E(MI=6+7.Y&/HM&JX3!V*S>I?R^JM>"`!RKE
+M9XJ-#@GVK>9"<8.3,(:KMYW"![W:#&Z!SG%GJ;!0@J8]`X3Q[H&5'!H&H?9/
+MYKO\0^RSPV^3`XT[@M(TP>2M*RJ!SA)&>52\04G6_57B``?=*TJG!C=:\>6X
+MZ>3%U73GAQ$'!,;K>L7:G""<87*=%KM:R9]<X706=RXU?-<07'?W7H[>/.<N
+MJZ97#1)XY6ET?34J/N"!DP(7,6%V_4*;1+G&,+JK!OE6[&`#(6,HQCVOM,D.
+MF$1F8*C;M,_1$VH($@D^RRZGJ8;@084+6@B2#[*2HYNF-C[J-KB[`B`H'8T!
+MWPHZU/T&<%2T"T3(_1-7V)SLFC;$M2?^(OC$=E=<[U$.$CNH+>F75GU=,294
+MCVN!![I.D#4ID-<YFT*NRH1NZ1[X6@W%#D^RJW5`-9J`(^BBJ]5H<):)![*I
+M>TM%)SHB1"TK<@M@`PFZC3#K5Y9G'"6Z339_"2MIH.&6GG]5VG\9J>?5/NN`
+M_#:6TCP5T3KDMNBV2IC=UQDYKJ>G7/JP2NCZ?5!I#,%<%TR['FAL[KK.DW&H
+M`+I8Z8UTMLZ`#RI@[34!&%1M:LQE7(!9@K%=8V;)X?2&4=5@.ZS>FU8=!,1P
+M5HNJ!M,PX+-;E87B"C+]`&5GFDZDP!TB.RV:X%>[WD!1WULTL,#(V)6-ZJZ8
+MU,MU[D^Y0W+9.,#N%+6I.IU%'4>-B<JHKTWEKA'ZK1LZX']1*RW`%^(^5/1>
+M0))B.RJ.AMJH+!ZE>H50(Y7.V=?.ZTZ%Q#-6T(LJ]>5Q.D&"5/T]NFG/<K)M
+MZHK7.^!RM>DX!D8@<RLWMJ+32`8V4S2(!!WX55CP#ONIJ3\YR/=54[7@C)RF
+MJ$`'8!#,F>>R3AJ.5`#H<W&96??4YY6D_`@!4[EH<TD[I1@WM(!T*[X/?IKG
+MY0W;!!D!'X7HD5R1W4G:.N95$9V(3FJ"0(5=H=M*(`$JM18UB,%(U"23(5=L
+MZ=TVH\<()+I\M(F`%0MW.-S@QE2W+SIG95+*3=:IE+T3MNL=#1'*?S.)5=A@
+M!$)F2@L:\&$XJ'`4'P$XE*HR\3@DA9G6'2KQ$YF%F=7B8!1*:P<?+A3:HB8P
+MJMD3HC]U*7>HSL/=2+5B01\I.`)[J)K]N$X=ZXVE4#4I`@Z5&T%IV*L.<2-T
+M'YO=30=M=^,?*=U8Z<@X2`;&=RC+&'$A!`;G,1]E&^X&))RI32;MA15*(&QE
+M7E%&YJQ<"(A6VO#VZEG=29IJ!P,0C8][:8$E/J-!CNY4S"2/[=UF,N8)#E:H
+MUPX`2J+<^D]U#5._!"<5!W4=4C:440=.Z?4)WV46J!$I!W(1!/P(&RS+V/-!
+M.RT:A=!!/T6=U&=8DCX3XE7J('E`C8>Z"H01&?NAMG?R(0ETG*3I:>(9)2ID
+M%N9"$N@1O\IFD:>RJ(ZL%Q`.$+\#L$3_`,RB>X]P40HR$U68PG),25$Z9,_<
+M((+PM\LCV7,51IZD-]UTET'%IPN:ZK++L.`"U>F?K5>6Z!C?NJ=4EM0S'PIJ
+M;II!P,JM>._F$@_5(@*I,F1NJQ$O#I/NCJ.)`,('.,1C*(:H6G$?JJ\Z26G8
+MJ6KC(,_"KU<9B?JFBH*NVD?=0L=O.$=PXD_YJN7DNW,!5&5UP@W#3SW5FG/E
+M`\_NJ?6S-P#LK5)W\EI:F7]B='.7GE)SF^7`@>RCJ.=(+HREK+A)<-ONI5A`
+MXPV0GD_X/T4)J'M/NF\P_P"%&]/G7\3K1U#J!JMD-/8KG+*J69:8E>A_B=:"
+MI0D4B33;F=I7FK*FG^61)#MYX7+"ZNG:?RQE;G3*HD#_`&%T?3JQ+6F3(W7)
+M=+K%WHG![E;_`$JX`IZ&G;D+UX7<T\_DCH>CU75>J-$X;P%VG3G.=I+CMC=<
+M'X8=_P"L<^",KL^F58TD#;NK7GO%;1(:R2!E%2;B8^O"AI.+QJ+I4K"XG$Y7
+M-T!4R3RFEL<[(JC2#O\`W4%0%KMP<HM6;4&#,`>R#J)T6QAVZ>D\Z(U3*@O'
+M:[BFP3[I4/2`;;-$"2)4-;43'?@*^YLB(&.RK5&Q6$;J=*B$M#02E=-'EF#&
+M%-4_F;B"%7N\-W)0X-94&NIG.4UV"V@\$3(X*DZ406D@G>([*W<40^V?,S&R
+MF71`^!7<D`;A7.O56T[X`'/RH/"-'RG2YI'9+Q93+*WF2N6-U8Y2?RJSTZZA
+M[7$C_-=?T"]&D9_5>:V]R0X=@NC\/7\.:"9GZ+TSE7IW3J^K25L4'@LCNN3Z
+M%<A])OJ"Z"SJC2#*QDWC6BTEKA&5.ZX.C1R52:^6$S$)K5X?=^HX!6-ND:ME
+M3:*>HSGNGN&G5Q$*6E&@:3'U2J@&9(E8UIT95U1#G$EJS+RA!."MVJP'_54+
+MQD-/)[*#`?-.MA&UVK\RN5K=KP21!Y5&LQS3`.`DK.DU-^G'NK#[K13^5G:_
+M?9-=51Y>J<^RW*E;O0JFHR5N,J;`F?A<GT"Y&@`GZRMVSKAS?[J:7;6ID!H,
+M$*Q3+0!*SJ3Q$R?E6:-2>?HHUM<8[U8^%)J(,JNUX.?V4DPV>Z*)[OJH*Y!,
+M']$;G=B@<&D&5!GWP]!PI?"P)J?7DJ'J`ACC)]D?AA^DR2D1T8P,Y'=$"-U&
+MRH"S@2A+@2(<C25[@,0@),GU0A<<ZB90%T$R=_=`-T_^61./=5.GNFYW$*2]
+M=_+F?N55Z:[^>2,Y5J3MNM.-T8=`_P!55UX&8]DFOG))459+S.\A)K^2?HH"
+M9P$.HPBK?F-R!CNLKJCLF"85DU#!S/LLSJ50_E,2JB2V>`TD291.?F05!;._
+MD[_5$TB?41)YV4@LM>0-YY1!\G=5R[:<)P[.=D$X?G=&Q\#C*KL>"-]D[70X
+M9^J;%EQ.-DB\]U"7\&8*<.X!_54$YY&9E`7DNVW35'@;G*&0[Z>ZNT5.HG.4
+MJ8'D[8_9-U+4!N82M_\`D`[J7L+RVDX*3:3ID(FN]4(VNAW"I`/UM[X4=2X<
+MP9G/Z*V#+5%5I-.[=]U!"VY$_P":E;<-)`U0H*M$<*$TG;#A!H>:TM]+I5/J
+M)`$G"B:VJUQSA0=2-9M/97:5I6;@:`)=$(7D`K/Z;<5?X>'`X[(GW1+O4DUH
+MJ\'`P#PA<3&VRJLNFZO[(S781C'=42U'2V3NHAOLA\YFG\WU0"H)W.564Q/I
+MRHJFQC"=U1L;J-[@6SJPFC:O=.,?(6!UO)+APMN]<TM*Q^K4]5J\YF%J,4/3
+MWZK82?LFN8`R0JW17_RBPG93W#?5CA9QZ6J[I`)[*%SR02IZ^&D[#LJCC)C[
+MK2#+@84%PYLD#[J7&DE4[N0=0VY0VCJ/F<3\JJ]Y#_S`2I7N)$@J"L?0851G
+M==)!#I,*2S?JM!_4>ZK=7ES/92=/(;:-!S\E3+N+.DI+6M)(CA"8%,$'"5:"
+MTXSPAI@^5I!!]U%@FM!;)A/H'M]T+#Z1A%/LHV\H\54&UZ%9KID-/RO)NK4'
+M4.I50T`M!R9VRO;.I4P]CG')CO@+R?Q[9NI]0>Z<3,1[KGGQE*O@O<9EKEH+
+M0=.X^%K=-K@4M((_NL*SJ/IO:`>^3PM2E6UR74Q(WC"[X7ZN4VZGPW6+*+<Y
+M)[KLNF5I#(F8_J*\]Z3<:'TFC`,;KL^A5?,8S(GWX7;6X\?DFJZJU?-,"02K
+M=-SM,`"/=9=C5@ADM='97J+IP=6T^RYV+C4U0GYA5ZF7C?\`S1N>[41OV3&2
+M3P2HT3JFEA."!N`HNG@5*KJAG?"#J-0TK8GDX1],+V6K=49[IVB_JVF=E%4$
+MG494EN\$?/":K),D;84L:B*W'J)WE07;7:S&/W5JF"!,;SRJU1NMSL\[H([3
+M4PYG)VA7GUO_`$;@,8YG"JZ((+)!XRGZA4<VQ?\`:5/B-3PPWT!\R2=T_C$.
+MQ!/J$84_A%O_`/3Z;].$WB!HJ5MH"XR<L8=N-+G,K$;*]TF]\NJV<0=Y4O5+
+M3^67,&0=UDO+J+@3E=\,ERCU#POU!II,SE=ATZNU[&Y7D/A;J1#V`E>A]!O=
+M=-I!6\HDKJC6#:;CJW]U'9U7&[!`QW6>^Y\RJVDV<K6LJ>B@)B>5RRNN(ZX_
+MEMVM<&G'>%8W&3/NLBUJZ7`$C_):-!VHCU+-CI*-S1I,`RJ=VQI?[_"O'/[*
+M"HT203)E8L:9=>FT$B"J=>CC;'*U+ML$@`RJU>GB2D1D7%N#)!R?T5&^8YM*
+M"86U780TJA?M#J#I'"L2JG3*^FGI!S^ZV>G78TCDA8%M3(!(5BA6-+>!E:E9
+MKK+6X!;DQ[*];U/2,Q*YCI]WL)_5:MI<:B#@_5+&I6W3J>H0<?*G;4`],E9M
+MM5'W4X?MWA9K6UPNU")W2<!I&?HH`_;(E23C915+JIBBXCA%X<8#!2ZEFFX1
+MB,INA/%,B-I4G:5MP(&3[HVPJXJ-/RB#C,3*TJ8]^/E!4,'>2A)!Q@%#4)V.
+M%-"O>F1OLJ_3?^;GNBOG>@J'I9]9DR9PK?B1L:A&_P`)M>(*B:XS&(A,>ZBI
+MVU1.Z(O:3,CO"JD'![^Z3@[28)E-B<OW,8Y63U:L-?I/*MR[;?V65U)SM>!R
+MK\%RS>?+!"F+O>51M"?*!,A2TZDNW*S%6'.)_IPEN,&"HW.!.1A#J'?'""P-
+M38!VB<J2F1_LJOYFWV3M.,F/JD-K#G.(QPD''<E1%_I@<)PZ!))5B)9D&4PD
+M'>9]U%YF-T@Z>51%U%WH*&S(\D9^B;J+OY1SCY4=B[^5OE*BP9!D)&0Z5&YW
+M\R9^B?428)Y06&ET`IY)89CWRHV.QI"9S^$#5=\)##8[H7G.#$IJ;G28*"5D
+M$[1]5%?-#J9D3[2B:XYXY0ULTR"58*E@QLN`:BK46.>3&>RCM'1=.!.)4]0R
+M3"D*K/H>J02F=0<6G=3EQ`"?4-)Y*ND4'4G`8)4(-459E7RX:C.Q*!S0'3CZ
+MHBD]]4&0#!*%U:H&Q!5\M#C^7Y05J8#<-'U5FRZ8M]<U!@@A4KJX+Z#A)V6Q
+M=TV$F0,]@J-S;,-)PTC/NM[K%8'3KK1=/;)WV)5\W;2(.ZSS;:>J1."5:K63
+MB-33"F]6GP5Q7'ED[PJ8JM+Y!W2K6]700"9A9U5M:F2-/RJC4+\&#]%!<P6D
+M@*@VXK,;$%*I?#\IY5@-[@UWJ^%#7<TCG&RB=<MU;IA<,=Z79^$T*76@TT-1
+M'R5'TFI_Z8MG"GZH6NMW1)"K=$$-<X1"F7PGU:.XSNG)]#C(PGU-=(+=D#IX
+M&#PI5AFL)$A/Y9]TFS&/W3Y_V5G<=7!7+8HF1@B=]EY_^(MJUU.H]HR.>Y7H
+M5=S2")XW7,^*K8U*%0;R)SPKY)N.'COKE'E#7Z*A:!B<%:%FX/8T["9A4^JT
+MO(O:E,-(@]]U-TYWY6C`:5,+N/7G&S1=H\J3G<05U7ARZ#FX<&D#OGA<E0@,
+M9]EK]*<:=1LM(;NO3A?CS>3'<>@]-JM--H[[S\+3M*Y+1,&-ES72;IKVL`)'
+MN5MT*LZ<[*6:>>72^QS#4DD[X4FN2!G[JJTOB8GLI2X8<=Q@SA8TZ2JW5'M?
+M=MI-<7'!(4U`C0&;`=E7HM-;J#JN(;C]58JC0>T_HH)Z=8!P`/U[JVW2ZGD;
+M+,HN+KAH)P5ITX-(-[CE6K#`'1@G_)02!4(GE6)`:0)PJE4^H_=1=I6YR3[R
+MHNJ`&R?C=34W32$MVPJ?6ZFBV&PEP^J6);PZ3PSZ.D4LQ#0._P!$_6&R0^9`
+MX1=!+?\`@E$[2T)^I#52U8@'"XSMQPO+.K-8^CI`XA<_URSECM.^\+HJ;'`C
+MW5>_HM-%T@+=_+O'+=(N'6U=K3JP<P5WWAOJ8\IIU;#NO/\`K5%UO<:Q@:E<
+MZ/U(TF-!='$CNNV%]HYY<5['X;J.KU14)!$KIJ-3,`_JN#\"WH-FPATF%UMK
+M5!`,Y.5BQO&_&I)#ICZA7;&K.'$`K+IO);$J:D_R^=NRPZ;;FK`G>$P@YG*J
+M6U<.&2(4X>"!$9]UG3<H*S=\!5JS);&`5<J9!RH7,$&=PLJSJ[0`=4+-ZCB@
+M[$>ZV;FFPZ@=BLKJ[!Y+@WZ*Q*SK.F8U`XF)1U*32XQ"EZ?2/D`]T=>G#HXX
+M1&<7NI'\V!Q"N6=X6ELF9S!45:D2Z`,E5JE/2[&",K4J5U%E=A])L'?]%HV]
+M66@3NN+M+MU&J`[8+>Z;?->&RX!+$E=`Q_$J859:/?A9M*J'`:73/96:3IS.
+MRPZ'OS-%P!E'TADT_A17#AY)4W29%(P0I!?;@'V1-=GE1S]$3=.)("JI(,S^
+MZ%QW#M]DY+8WW4;S`B1\H*G47``CE1],`UDCOPBZ@X!AR%%TQ_/<\*4:E-V)
+MTHO4<[*)CL"%(TXGNFC9.<`(Q/=$'PTB5&Z9G&$%28[JB34P-=.>ZR>JN:*G
+M;*OU'::1XX63U1\U0`('LH59MG#R0)&`DYWJWP5#1GRP,YY3N,.P3ME)2IQ4
+M'!^B37^M0%VT)B\@S@#A!:+AW3L><*&0<1N$F'2X23'RE%L.YF>Z;4`2?[JN
+M7^DQ*(/P)@H)=?`!^4=-X+<[RH`Y)K@,JANHP*9SB%'8QY>#LFZ@_P#DD$'Y
+M4=@[^6=]E:D67:B<NWPDTG5_=1ZCPGU'G=!8:Z`F+LG"A:21O"1=F.$$CC.[
+MH3<^ZCJ.Q]$U-V!`03TW2<(JQ;H,Y(P%`UWJE&[;O[*Q%`NB]B8DJVXR/251
+MNSINFD#G[JW3/\H.D!3Z?#N,L@1"83VR$!C48*1/JW6@-3#MDP,;Y0UIR2F9
+M')W[HB1Q`9@E0UZA((RC<<?N57>9G,951#6$_P!U4<!K<2..%:J`Y!.%#5RZ
+M08[JHP.JM\J^%08RKU-VN@UT3(W4/B.G_*\S<A-85&NLFP<A6][2='N)`('*
+MS;EDF3WV6E7/HQ]U0NYTG)A5*J&DPDM(F2H:UI3,X&5*\Z3@F9Y3N(?3+MHP
+MIH95U8AQ);QV51]K5:202#)@K8>88=,QRJ]1WJQVV5T;8M\VNRA4D$X5'I=W
+M4;4<#N"8"Z&[:W09SC*Q:%)C>H/$R'$J7>EG:9MV7&2WY4E&Z:1$[)A;L\QQ
+M@9PDVT&J1O\`NFUFEFFYI9.I%+?\85=ML^-T_P##/[K&W3U>?U'.IO`/T69>
+MO\T/#I@<+7T4WTGM>\-<!(QNLKJ5!\%P@#OV73_*\TT\X\;T!2Z@^IOJS[[K
+M*LVP!B#J6_XX:Y];.=(R>%S=*J]M00/RY/NN&/%T]TN\8WK<^EI<TNB%K6+V
+MN+3!(`[K"LJKG-`.0=BM;I]0Z@20(A>G&N&3I>FO+;A@:YP&"(."NBMKJ:@;
+M+=+<8*YKHU:=,P=(6E;^:UX>X`P9PMWAYLG46Q,B<M.1[)7]8,ID1I.V%1L;
+M@AK9,\917-8UKAK6F8=)@%8L)?BYTR6TA+8<[)5@@NR<SQV5:A5DP9AN%8ID
+MEATX6=-2HJ;=-WJ/!6C1,CZ+.>?YD.:<G>5=M7%D#@H;'6UBF2=O90522PQO
+M&P5BK4EL$*O6)R-(AR+L]&12C:5E^(7PRF`[=X!$;Y6C.BC)9!]C,K)O#YE7
+M46R`X1/=3+IFV.SZ"7'H]$$02!CA7*P+J7T5;H'_`.44]P(5UP::6VZY3MSP
+MJC5;#Q,#B945>D#D;=E<(!(&)35F12F1]%T=]N8Z[9BI,M&W*Y:Z;4MK@B3H
+M:X;KT"ZH!U-Q+<KENOV;2UX#2!*DOK5LE=/X#ZF&T:;=63&)7HG2[EKZ33(S
+M[KPSP[U#^'NPR'-CNO4_"M^*MNPZAMRNV4W'*<73MK>J(`!D[X4XJ$C$A9-K
+M7Q\8PKC*DLP9D+C765?H7!:[2=CRK]O5&D#NL4/`$SE6K.YAP`4:VU]6(E-N
+M#PH*+PX27$`YW4@>"["S6Y456F223A9G5VC0["U:SN%E]0<'5`SDE016E/3;
+M"!&.Z&H-1DC?=6PS32;.T0HG!H<?\TA5"HT:H`V]U7K,W)P>RT*K?48C?ZJ*
+MM3EL@_,J[33*?3.K41"*G6=3J`M5FK3(SLJSQ`WRK*EC9Z;?D:6..8W6S;7;
+M2!#IGW7&4ZFDB)'LK]M=EH&8@)4G#I;JN#2)D#ZJWTJN/(&09]UR]3J`>UK-
+M6^`MSI&;=N8E2\++MK^=VVV1LK>KC*H.<X")QV0FJ01+I4;:1JC$;]D+JA._
+M[J@;@-<&NJ-DG`E$:GJW'S*`>IU/1NAZ62*8,[E5NIU"6&"$73'N=2:`=^4J
+M1K4ZO!/ZHV5H'YC$JD"<P90&JX$RD%\5B[,H75M+M_NJ3*CBZ)PE5<X@Y&%5
+M7*E8%D;K'ZC7!J1/*F=4=P5FWM7^<)G!V4O2?6I0J#R1C]4G%N_'*K47#R@0
+M>)"/6",G=1I*7[ANZ1=&5`7PW!A(O^I518;5)[(M6TE56N``(")M01ML@N!P
+M@0=TXRV9"K!\B$8?!03AS28!D]D;2.3]%5UQSGV1!Y@[_P":H74'?RS$=H45
+MBXMIP"`=U'?/EARFLG2W$B$OPBTY\&-^4P=F4$CG?N@U0X[0B++7$'Y2>[B5
+M`U_<)R\[$G"HDJ.(;,IZ;QIB,PH''N8RE3)F)*@G#R3'',*<&6B`53U28W^B
+ME;4<&C*HK=5!:=4;*6SJAUL#]"HNI^JD>?[*'IK_`$P3LE2+-5^<?,RF:<@G
+M=!4(U'GV3-B-U055Q+C!PA!`;G=*<!,XB<G*(,/.G;<('@<G=(.`$S,>ZAJN
+M$$QE6%!4_.<X]U7J.;J)DQSE'4)+]XGA152V8G9:95.K--6T<`($8[E972GQ
+MKIG:=I6U<^J@0(_NL"B2SJ+VD[DI>CZOUI`(!PJ542\R(5QS<;Y*IW1C$F=E
+M652NS\QF>5%2=#H.WRK#SCW5:!)SLBCK-;HB9"INC.^^59>3IWSL0H:[=+"1
+M^Z(K5(/YLK)NJIHWIIZ1I>9)T@G[Q*UZPEL3GV67UNBXT!4$XSNEG&EG%3R"
+MT%G92VY)!(WXA4[.MKMF'^IHC=3VKH):5)>%URL!S>93ZF^ZCAO8E*&]BG#;
+MSU].##9PH:E%AR>-YQ*NG<J/AWPFWGLURX7Q'T]MS6N',88:#.%PUQ;BG7<U
+MP.Y^B]-J?^WN_P#\2\_ZO_[I_P`KCEQD]OBN\0].AKH)P1NM6T(UM:`2%E6W
+MYA\K4L_R!=I4LVZ3HWDMI:P7:B(&<#Y6[TP4_+&LDEQX,RL#I7Y`NCZ?_P`T
+M?"Z6O)FN>7%+6#('TE0=*+_.?4<##R0`<PKM/_V[_A5+7_V_W6-\Z9G3086B
+M7%P@[@*]9AKFB(G>5E'\K?A:5CO]%?B]4]=O\V3NK%$0S)GLJ];=6:/Y6_19
+MC6^3U`00.Z3@=6G.VZ=WYDF_\QORFC?*&^;IHR"1'M*RJM)PI"I/YGXE:W5/
+M^0LZO_[+_P#&%G*_$RX==T)I;TFG)G&5=R:>TJGT7_\`+6?`_966;!8P[KEC
+M"PT^Y4PIZJ$]U!5W5NG_`,KZ+HZJ5:B13.096%U2U+R8`RNDK?\`*/RLFZV*
+MS>G2.#ZO;.MK[S`3`,KJO!?5X;387Q[2L+Q9_P"X8@\'?\_ZKKX[PQGC]>Q=
+M&O&U*;3KS&RV:%0:1ZOU7(^'/RM736WY&K.4Y7%?U%WI_9)KG-=$_5#;[!)_
+MY'+G6XT+2O,`NV]U=8_TR#ORL:WV/PM*A_R6I5B6I4'EJA3FK>DQLK5S_P`L
+MJ/IGYS\KG;J-3E.6C1![1"@>V1&_NK+]C\J`_F5-*[VD/.,;[H'@.:0)^B.X
+M_*F=_P`GZ(:5*U,M!Q/RJE5AR5H5/RGZ*H[^KZIM*I5&&<843JKV'NK=;\BI
+MW'YEK:6!97?_`!5/W*[/I%QIM&#&RX1O_O&?*Z[IO_MF_16I.&UYX+2F+F$`
+MJK3_`.2/E)OY?J5C36UN*<C(U)Y^L*&G^9ORB'YOJ4L:5;]I<TY.^REZ;(IY
+M,*.[Y16FP^%/HO!TXGZI1G*C9^<IV[JU(,``R("8D:D)V1'<?"BHZ\"7+%O7
+M`W7"V7_E6#=?^^<K>D^K]*I#!&Z/63_4HJ?_`"_HC;^8_`5THR\8@)]<[2@&
+M[OA*EL4T"-4#&X"0>.^_91'_`)A3MW;\J"PUY`B81!Y.02H'?\M'0V^B"5KB
+M#*E;4QO!]E`/S?1,W<J]ANH/&G=/TXQ3,S]5!>?F^BDZ?^1+\2+#R4QC5,IG
+M[_5#4_YGV5@<.`,GZ(I,@]U$/^8%,>/HJD,YQWDIVNS$H*WY/JDS\P45('>K
+M!PI`YI&V-L*!OYDXW*J&OS%$MD0JG3':JQ$JS=_^V<J?2_\`W04I%UY_F8(3
+M.=&1V2J_G*&K_P`L*@P_T=IY0.B<F)3-_($]7=JJ%,"%%5<'-@2"B?\`D4#O
+MS'X50%0D=_E!4=+4]3\H^4Q_*541.,MX*P.I`T>HM?L"<RM]NRP_$G_-^H5^
+M)]6`Z6`MSB5%<`NSS"*V_P#;,^$U;=2=(IOB8^JJ/<6U<#G=6G_\PJI=_F"T
+MARYK21.ZA<09`4K?Z5'<_D*;57J-QMD=U!<L\R@ZF>5/PAY*#%LIIWCJ)(`)
+I("O4!#X(DJA<_P#YE_\`B6G2_P">U9ZNFXE:#I_,$^EW^,*4;)(T_]EK
+`
+end
+
+
diff --git a/rt/t/data/emails/rt-send-cc b/rt/t/data/emails/rt-send-cc
new file mode 100644
index 0000000..da8c4da
--- /dev/null
+++ b/rt/t/data/emails/rt-send-cc
@@ -0,0 +1,5 @@
+From: rt@example.com
+subject: testing send-cc headers
+RT-Send-Cc: this-is-a-sample-test1e@example.com, second-this-is-a-sample-test2@example.com, test-sample-sample-sample-test3@example.com,
+ afourthtest4@example.com,
+ test5@example.com
diff --git a/rt/t/data/emails/russian-subject-no-content-type b/rt/t/data/emails/russian-subject-no-content-type
new file mode 100755
index 0000000..03d95b8
--- /dev/null
+++ b/rt/t/data/emails/russian-subject-no-content-type
@@ -0,0 +1,42 @@
+Return-Path: <mitya@fling-wing.example.com>
+X-Real-To: <mitya@second.example.com>
+Received: from [194.87.5.31] (HELO sinbin.example.com)
+ by cgp.second.example.com (CommuniGate Pro SMTP 4.0.5/D)
+ with ESMTP-TLS id 69661026 for mitya@second.example.com; Wed, 18 Jun 2003 11:14:49 +0400
+Received: (from daemon@localhost)
+ by sinbin.example.com (8.12.8/8.11.6) id h5I7EfOj096595
+ for mitya@second.example.com; Wed, 18 Jun 2003 11:14:41 +0400 (MSD)
+ (envelope-from mitya@fling-wing.example.com)
+Received: from example.com by sinbin.example.com with ESMTP id h5I7Ee8K096580;
+ (8.12.9/D) Wed, 18 Jun 2003 11:14:40 +0400 (MSD)
+X-Real-To: <mitya@second.example.com>
+Received: from [194.87.0.31] (HELO mail.example.com)
+ by example.com (CommuniGate Pro SMTP 4.1b7/D)
+ with ESMTP id 76217696 for mitya@example.com; Wed, 18 Jun 2003 11:14:40 +0400
+Received: by mail.example.com (CommuniGate Pro PIPE 4.1b7/D)
+ with PIPE id 63920083; Wed, 18 Jun 2003 11:14:40 +0400
+Received: from [194.87.5.69] (HELO fling-wing.example.com)
+ by mail.example.com (CommuniGate Pro SMTP 4.1b7/D)
+ with ESMTP-TLS id 63920055 for mitya@example.com; Wed, 18 Jun 2003 11:14:38 +0400
+Received: from fling-wing.example.com (localhost [127.0.0.1])
+ by fling-wing.example.com (8.12.9/8.12.6) with ESMTP id h5I7Ec5R000153
+ for <mitya@example.com>; Wed, 18 Jun 2003 11:14:38 +0400 (MSD)
+ (envelope-from mitya@fling-wing.example.com)
+Received: (from mitya@localhost)
+ by fling-wing.example.com (8.12.9/8.12.6/Submit) id h5I7Ec0J000152
+ for mitya@example.com; Wed, 18 Jun 2003 11:14:38 +0400 (MSD)
+Date: Wed, 18 Jun 2003 11:14:38 +0400 (MSD)
+From: "Dmitry S. Sivachenko" <mitya@fling-wing.example.com>
+Message-Id: <200306180714.h5I7Ec0J000152@fling-wing.example.com>
+To: mitya@example.com
+Subject: ÔÅÓÔ ÔÅÓÔ
+X-Spam-Checker-Version: SpamAssassin 2.60-cvs-mail.demos (1.193-2003-06-13-exp)
+X-Spam-Level: +
+X-Spam-Status: No, hits=1.0 required=5.0 tests=SUBJ_ILLEGAL_CHARS autolearn=no
+ version=2.60-cvs-mail.demos
+X-Spam-Report: * SUBJ_ILLEGAL_CHARS 1.0 (Subject contains too many raw illegal characters)
+
+Content-Length: 6
+
+ôåóô
+
diff --git a/rt/t/data/emails/subject-with-folding-ws b/rt/t/data/emails/subject-with-folding-ws
new file mode 100644
index 0000000..c082632
--- /dev/null
+++ b/rt/t/data/emails/subject-with-folding-ws
@@ -0,0 +1,10 @@
+Subject: =?ISO-8859-1?Q?te?=
+ =?ISO-8859-1?Q?st?=
+Date: Mon, 02 Jun 2003 20:58:30 +0200
+To: rt@example.com
+From: foo@example.com
+Mime-Version: 1.0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Transfer-Encoding: 8bit
+
+test
diff --git a/rt/t/data/emails/text-html-in-russian b/rt/t/data/emails/text-html-in-russian
new file mode 100755
index 0000000..b965b1b
--- /dev/null
+++ b/rt/t/data/emails/text-html-in-russian
@@ -0,0 +1,87 @@
+From rickt@other-example.com Tue Jun 17 20:39:13 2003
+Return-Path: <rickt@other-example.com>
+X-Original-To: info
+Delivered-To: mitya@vh.example.com
+Received: from example.com (mx.example.com [194.87.0.32])
+ by vh.example.com (Postfix) with ESMTP id 8D77B16E6BD
+ for <info>; Tue, 17 Jun 2003 20:39:05 +0400 (MSD)
+Received: from hotline@example.com
+ by example.com (CommuniGate Pro GROUP 4.1b7/D)
+ with GROUP id 76033026; Tue, 17 Jun 2003 20:38:00 +0400
+Received: by example.com (CommuniGate Pro PIPE 4.1b7/D)
+ with PIPE id 76033052; Tue, 17 Jun 2003 20:38:00 +0400
+Received: from [217.132.49.75] (HELO compuserve.com)
+ by example.com (CommuniGate Pro SMTP 4.1b7/D)
+ with SMTP id 76032971 for info@example.com; Tue, 17 Jun 2003 20:37:41 +0400
+Date: Wed, 18 Jun 2003 01:41:01 +0000
+From: Ó÷åáíûé Öåíòð <rickt@other-example.com>
+Subject: Ïðèãëàøàåì ðóêîâîäèòåëÿ, íà÷àëüíèêîâ ïîäðàçäåëåíèé íà òðåíèíã YXLWLJ3LPT9UHuLyGTzyuKQc06eIZ96Y6RVTCZFt
+To: Info <info@example.com>
+References: <0ID97EGL951H1907@example.com>
+In-Reply-To: <0ID97EGL951H1907@example.com>
+Message-ID: <HDE46LIK8GGJJ72I@other-example.com>
+MIME-Version: 1.0
+Content-Type: text/html; charset=Windows-1251
+Content-Transfer-Encoding: 8bit
+X-Spam-Flag: YES
+X-Spam-Checker-Version: SpamAssassin 2.60-cvs-jumbo.demos (1.190-2003-06-01-exp)
+X-Spam-Level: ++++++++++++++
+X-Spam-Status: Yes, hits=14.9 required=5.0 tests=BAYES_99,DATE_IN_FUTURE_06_12
+ FROM_ILLEGAL_CHARS,HTML_10_20,HTML_FONTCOLOR_UNKNOWN,HTML_FONT_BIG
+ MIME_HTML_ONLY,RCVD_IN_NJABL,SUBJ_HAS_SPACES,SUBJ_HAS_UNIQ_ID
+ SUBJ_ILLEGAL_CHARS autolearn=no version=2.60-cvs-jumbo.demos
+X-Spam-Report: 14.9 points, 5.0 required;
+ * 2.3 -- Subject contains lots of white space
+ * 1.0 -- BODY: HTML font color is unknown to us
+ * 0.3 -- BODY: FONT Size +2 and up or 3 and up
+ [score: 1.0000]
+ * 2.8 -- BODY: Bayesian classifier spam probability is 99 to 100%
+ * 1.0 -- BODY: Message is 10% to 20% HTML
+ * 1.0 -- From contains too many raw illegal characters
+ * 1.0 -- Subject contains a unique ID
+ * 1.0 -- Subject contains too many raw illegal characters
+ * 1.2 -- Date: is 6 to 12 hours after Received: date
+ [217.132.49.75 listed in dnsbl.njabl.org]
+ * 1.2 -- RBL: Received via a relay in dnsbl.njabl.org
+ * 2.0 -- Message only has text/html MIME parts
+Status: RO
+Content-Length: 2743
+Lines: 36
+
+<html><body><basefont face="times new roman, times, serif" size="2">
+<center>Ó÷eáíûé Öeíòp "ÊÀÄÐÛ ÄÅËÎÂÎÃÎ ÌÈÐÀ" ïpèãëaøaeò ía òpeíèíã:<br>
+<font size="5"><b>ÌÎÒÈÂÀÖÈß ÊÀÊ ÈÍÑÒÐÓÌÅÍÒ ÓÏÐÀÂËÅÍÈß ÏÅÐÑÎÍÀËÎÌ</b></font><br>
+<font color="red"><b>19 èþíÿ 2003 ã.</b></font><br>
+<b><i>Òpeíèíã ïpeäíaçía÷eí äëÿ âûcøeão è cpeäíeão óïpaâëeí÷ecêoão ïepcoíaëa.</i></b><br></center><br>
+<p align="justify"><b>Òpeíep: Áopìoòoâ Ïaâeë.</b> Ïpaêòè÷ecêèé ïcèõoëoã, oïûò paáoòû áoëee 10 ëeò â oáëacòè ïcèõoëoãèè è áèçíec-òpeíèíãoâ. Àâòop pÿäa ïóáëèêaöèé è ìeòoäè÷ecêèõ ïocoáèé paçëè÷íûõ íaïpaâëeíèé ïcèõoëoãèè, â òoì ÷ècëe: “Òeõíoëoãèÿ äeëoâoão oáùeíèÿ”, “Òeõíèêè è ïpèeìû ýôôeêòèâíûõ ïepeãoâopoâ”, “Ñòpaòeãèè ôopìèpoâaíèÿ êopïopaòèâíoão èìèäæa” è äp. Çaêoí÷èë ËÃÓ ôaêóëüòeò coöèaëüíoé ïcèõoëoãèè, Ðoccèécêóþ Àêaäeìèþ ãocóäapcòâeííoé cëóæáû ïpè Ïpeçèäeíòe ÐÔ, êópcû MBA.<br><br>
+<b><u>Öeëè òpeíèíãa:</u></b><br>
+1. Îcâoèòü ïpèeìû óïpaâëeíèÿ ìoòèâaöèeé;<br>
+2. Ïoëó÷èòü ïpaêòè÷ecêèe íaâûêè ìoòèâaöèè ïepcoíaëa ê paáoòe;<br>
+3. Îcâoèòü ocíoâíûe íaâûêè êoìaíäooápaçoâaíèÿ;<br>
+4. Îâëaäeòü ïpaêòè÷ecêèìè ìeòoäaìè coçäaíèÿ è ócèëeíèÿ paáo÷eé ìoòèâaöèè, êoìaíäooápaçoâaíèÿ.<br><br>
+<b><u>Çaäa÷è òpeíèíãa:</u></b><br>
+&nbsp;- Îcâoèòü ìeòoäû ïoáóæäeíèÿ äpóãèõ ëþäeé ê âûïoëíeíèþ oïpeäeëeííoé äeÿòeëüíocòè;<br>
+&nbsp;- Íaó÷èòücÿ íaïpaâëÿòü ïoáóæäeíèÿ coòpóäíèêoâ â cooòâeòcòâèe c çaäa÷aìè opãaíèçaöèè.<br><br>
+<b><u>Ñoäepæaíèe ïpoãpaììû:</u></b><br>
+<b>I. Ìaòepèaëüíûe è íeìaòepèaëüíûe ôopìû ìoòèâaöèè:</b><br>
+1. Ìecòo è poëü ìoòèâaöèè â óïpaâëeíèè ïepcoíaëoì;<br>
+2. Ïpaêòèêa óïpaâëeíèÿ opãaíèçaöèÿìè.<br>
+<b>II. Ïpaêòè÷ecêoe ïpèìeíeíèe ìoòèâaöèè â óïpaâëeíèè ïepcoíaëoì:</b><br>
+1. Àíòèìoòèâèpóþùèe pacïopÿæeíèÿ;<br>
+2. Ìoòèâaöèÿ è oöeíêa äeÿòeëüíocòè (poëü aòòecòaöèè coòpóäíèêoâ);<br>
+3. Ìoòèâaöèÿ è ïpaêòèêa íaêaçaíèé.<br><br>
+<b><u>Â çaâepøeíèè ïpoãpaììû ó÷acòíèêè cìoãóò:</u></b><br>
+1. Îpèeíòèpoâaòü coòpóäíèêoâ ía äocòèæeíèe oïpeäeëeííoão peçóëüòaòa;<br>
+2. Îâëaäeòü íeoáõoäèìûìè íaâûêaìè óïpaâëeíèÿ ìoòèâaöèeé ïepcoíaëa;<br>
+3. Ïpèìeíÿòü ïoëó÷eííûe çíaíèÿ â ïpaêòèêe óïpaâëeíèÿ ïepcoíaëoì;<br>
+4. Îïpeäeëÿòü èíäèâèäóaëüíûe ocoáeííocòè (ïpeäïo÷òeíèÿ) ìoòèâaöèè coòpóäíèêoâ â opãaíèçaöèè.<br>
+<i> õoäe òpeíèíãa ècïoëüçóeòcÿ paáo÷èé è cïpaâo÷íûé ìaòepèaë ïo ìoòèâaöèè è còèìóëèpoâaíèþ ïepcoíaëa poccèécêèõ êoìïaíèé. Ïo oêoí÷aíèè âûäaeòcÿ cepòèôèêaò.</i><br><br>
+<center>Ïpoäoëæèòeëüíocòü: 1 äeíü, 8 ÷acoâ (äâa ïepepûâa, oáeä)<br>
+<b>Ñòoèìocòü ó÷acòèÿ: 4 700 póáëeé áeç ÍÄÑ.</b><br>
+921-5862, 928-4156, 928-4200, 928-5321</center><br>
+<font size=1> Åcëè èíôopìaöèÿ ïoäoáíoão poäa Âac íe èíòepecóeò è ïo äpóãèì âoïpocaì - ïèøèòe: <a href="mailto:motiv@mailje.nl">seminar</a></font>
+<br><font size="1" color="#ffffff">3ZkRPb60QBbiHef1IRVl</font>
+</body></html>
+
+
+
diff --git a/rt/t/data/emails/text-html-with-umlaut b/rt/t/data/emails/text-html-with-umlaut
new file mode 100755
index 0000000..90e5d3f
--- /dev/null
+++ b/rt/t/data/emails/text-html-with-umlaut
@@ -0,0 +1,35 @@
+Return-Path: <gst@example.com>
+Delivered-To: j@pallas.eruditorum.org
+Received: from vis.example.com (vis.example.com [212.68.68.251])
+ by pallas.eruditorum.org (Postfix) with SMTP id 59236111C3
+ for <jesse@example.com>; Thu, 12 Jun 2003 02:14:44 -0400 (EDT)
+Received: (qmail 29541 invoked by uid 502); 12 Jun 2003 06:14:42 -0000
+Received: from sivd.example.com (HELO example.com) (192.168.42.1)
+ by 192.168.42.42 with SMTP; 12 Jun 2003 06:14:42 -0000
+Received: received from 172.20.72.174 by odie.example.com; Thu, 12 Jun 2003 08:14:27 +0200
+Received: by mailserver.example.com with Internet Mail Service (5.5.2653.19) id <LJSB7T54>; Thu, 12 Jun 2003 08:14:39 +0200
+Message-ID: <50362EC956CBD411A339009027F6257E013DD495@mailserver.example.com>
+Date: Thu, 12 Jun 2003 08:14:39 +0200
+From: "Stever, Gregor" <gst@example.com>
+MIME-Version: 1.0
+X-Mailer: Internet Mail Service (5.5.2653.19)
+To: "'jesse@example.com'" <jesse@example.com>
+Subject: An example of mail containing text-html with an umlaut in the content
+Date: Thu, 12 Jun 2003 08:14:39 +0200
+Content-Type: text/html;
+ charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML><HEAD>
+<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; charset=3Diso-8859-=
+1">
+
+
+<META content=3D"MSHTML 6.00.2800.1170" name=3DGENERATOR></HEAD>
+<BODY>
+<DIV><FONT face=3DArial><FONT size=3D2>Hello,<BR><BR>ist this kind of Messa=
+ges, that=20
+causes rt to crash.<BR><BR>Mit freundlichen Gr=FC=DFen<BR>Gregor=20
+Stever&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^^causes Error<SPAN=20
+class=3D975501206-12062003>!!</SPAN></FONT></FONT></DIV></BODY></HTML>
diff --git a/rt/t/data/emails/very-long-subject b/rt/t/data/emails/very-long-subject
new file mode 100644
index 0000000..ad420d0
--- /dev/null
+++ b/rt/t/data/emails/very-long-subject
@@ -0,0 +1,12 @@
+Subject: 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+Date: Mon, 02 Jun 2003 20:58:30 +0200
+To: rt@example.com
+From: foo@example.com
+Mime-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+This email has a very long subject. Our DB allows you to use subject
+no longer than 200 chars, but we creat ticket, don't generate an
+error and trancate long line.
+
diff --git a/rt/t/data/gnupg/emails/1-signed-MIME-plain.txt b/rt/t/data/gnupg/emails/1-signed-MIME-plain.txt
new file mode 100644
index 0000000..bbf316b
--- /dev/null
+++ b/rt/t/data/gnupg/emails/1-signed-MIME-plain.txt
@@ -0,0 +1,38 @@
+Message-ID: <46D7309C.9040804@example.com>
+Date: Fri, 31 Aug 2007 01:03:24 +0400
+From: rt-test@example.com
+User-Agent: Thunderbird 2.0.0.6 (X11/20070804)
+MIME-Version: 1.0
+To: rt-recipient@example.com
+Subject: Test Email ID:1
+X-Enigmail-Version: 0.95.3
+Content-Type: multipart/signed; micalg=pgp-sha1;
+ protocol="application/pgp-signature";
+ boundary="------------enigF67974ED650702891ACEBB10"
+
+This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
+--------------enigF67974ED650702891ACEBB10
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: quoted-printable
+
+This is a test email with MIME signature.
+ID:1
+
+
+
+--------------enigF67974ED650702891ACEBB10
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: OpenPGP digital signature
+Content-Disposition: attachment; filename="signature.asc"
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.7 (GNU/Linux)
+Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
+
+iD8DBQFG1zCi0ygDXYSIHxsRAqEmAJ9mKiEdoWg9IFGlUlhPrzo9+1tKSwCfdqRG
++HKnj+81jWpBEhj6D00uNrQ=
+=ZFav
+-----END PGP SIGNATURE-----
+
+--------------enigF67974ED650702891ACEBB10--
+
diff --git a/rt/t/data/gnupg/emails/10-encrypted-inline-plain.txt b/rt/t/data/gnupg/emails/10-encrypted-inline-plain.txt
new file mode 100644
index 0000000..93cc195
--- /dev/null
+++ b/rt/t/data/gnupg/emails/10-encrypted-inline-plain.txt
@@ -0,0 +1,31 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 3AAFC37F5A; Fri, 10 Aug 2007 15:52:03 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:52:03 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:10
+Message-ID: <20070810195203.GB5815@mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-encrypted
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAyB2wkXAxcNw6+iKwzSlXlyZCsdZFSstJbhIr/i+ujIrk
++NLUAIgPfgIeg1nGVVK1z/hszrHRo3FT2b+jSrPF2Ox/wsUqpSvDf641hFbDCIlx
+bbqNmUEOCP5Q64Bw+RHoDoGLx9CPgeXLbciXvPZtlC3MPqG9w8lQdJlhTM1lqwCs
+1kqyvQ8YiFrvCNxU6x/81O9wWwiGOVELVnwX62crUK8howCpmeGx28Uo3HKG7NMv
+vTsdO6vwh38tNRz0kX05+AlxWP+3Vs4se6YwePc+XnhgWQoHqrYcxTOA0OrivJja
+1ty5CAHzGudBdXBcDncg0+6d1Ih60d5JP7nhl3lyzAgArA8CO/iv/kFOkQN9qm4O
+4zq189niju7mVCmcTLgBoxN2U1AeAlSl/JacPw4b3CGDQKmj1L/SMKOfUvOvCUlU
+o6XB7fHPxsFrJag9Yp5snenMRrvoUbypRljebHYsjtkCOsLqK7KUYLx2JQ/pHJjs
+AXwuyytBpLVxwEy0xkujpAQ4rsYT+z410zdH8hAthFo9FwFGKsT95WzfGcOa2+B3
+Qi1LX2uav8q5PAQgbjatp/aiHn3mHZSkRtLbOPr9A8GkmjQaNqIFgUMfaKx2hu8z
+nIZmAjpZ8CDvyKoFU0g9Z2KqNPagOqHgq6sRKuAp/5nz62sMyl4Hc7UfeYMTHWn/
+tNKCAYtyAHAGuvwLiRCN3M5h5Y1DdgEyIri7RtH/LW2QLCqYt9MLvmVRsPIEtuEh
+tZAb+KQzr9W6+fOhpW/1zkBCGxw2PEhv0HafXsVxEjOITbc2Hfwn9kySZ1aeSxL8
+DXzE9fSwcCOXQE1YY7TVNKuqqm34BADCnO7jw/b8EaOHRWgElw==
+=MYSm
+-----END PGP MESSAGE-----
diff --git a/rt/t/data/gnupg/emails/11-encrypted-inline-attachment.txt b/rt/t/data/gnupg/emails/11-encrypted-inline-attachment.txt
new file mode 100644
index 0000000..e3695f7
--- /dev/null
+++ b/rt/t/data/gnupg/emails/11-encrypted-inline-attachment.txt
@@ -0,0 +1,80 @@
+Message-ID: <46BCDCA0.4000205@mit.edu>
+Date: Fri, 10 Aug 2007 17:46:08 -0400
+From: Christian Ternus <ternus@mit.edu>
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To: rt-recipient@example.com
+Subject: Test Email ID:11
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------010900070701080408060501"
+
+This is a multi-part message in MIME format.
+--------------010900070701080408060501
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: ISO-8859-1
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf/dbKZrl//1Q5r/FjPmqjp2+NDajR7Fj2afjKtkR8ySKni
+gc8kTvx2ceQ8bdOMfdn2AngPlKKyADp8xLDge3hwZg/mBRpOtk5B6eqGZDSwDxgQ
+Q2+mUVilhDBqLB5uv4rXoclT/JqR/WBWW1SjZgVVaf/lB9mI5amcmOPuY5vBq/iY
+q+qBAlWc27AfafGPSz0nifohc2qmq/pj2G6YDkKBE01EZRwbwvm35bTjI6rFL6dp
+Zzx2kGhAu928orL5Ft/KtyOEqdGwGlrGApLVV2X6+G1X6ASdgR24OAqnPxYMnhoT
+I3uYidSE6DSmUAm4R0rGRc1yMG5rBgRDDOYumRJFHAgA9WsNlQTkSuzypFzW7xT1
+zAzurHA1OYttjjWSAFb/eOnLxc27r1mBS0JVoEz/9+HtHOgGcsRe/sym6uwOOMT1
+znpgRGtQ+vL0bwBK3HyLqQzY9o5BGphf3ipCpI6HWwBDdGUJT+K7S8J9Og4AmV9V
+iq6V1PCdGwWS/XD4tulHIPUiA7Z6osVqtbHVTuQNWwsFU06SEHOmhNEGDSmO7Q7i
+bUS1YvC1STmJttzSsh+A/dh7uN/mfrPG1BJEAi4iZRGM6GFoKS5CQnpyQ4Az222n
+w1iB3u170ijcgLvDNR1Nz5DVnXdJcbVg46GvAGjctI7qWmFIKuazCA/AA0hwRjfz
+j4UCDgOxaIPydPr+7xAH/AzvNqeXEU9n7Y7K6rALWKwETU98ltzyp0FdO0YCbN/Z
+HWAyazGpPL6VqECWdc9xAYa1zYRf9HEW25yi5BMqbPav7oxfkEMbfLEl2OJr+EfO
+/GeTijv8riPFazcXdj7CKuumsld/GQgVLjwmRdoVtGN8WMRZfM/CII6uhg2wVbxq
+iThRc03DSNwLr0N0aNr66rySOnvTZNEARljPA1VaRgy1YkHXAyj6Z+s5OBZgj3yh
+3f6KZXaRBq9r+7iXJFuOpQ35k/pykHL6wwaTYMmEvlPZ9EO1zgvBxS6NWm4Ct4+X
+l9anXjRRPS9aSEUZQRjP6VfQPrrlhBNIgAEoKHlIJe4H/RVbTUAqRlTf3k4XBwkR
+HoTk/b/vM5grRQTR12DLXKB+NeNEpQPQFbdFOhfX22ZJbVzl3CVxaOEYHB29KT4D
+2frp99spiO8gksYdC5kviXeXXlXINtqsAWCEQr96wOlE03NuKh9TLF3ykAKageqr
+yDVdFjmeuMwL5XWVdWFUCDKROQz0gbX3WglCVhccrB4aMPx1vP4HiQIn7R2Q9/GJ
+I0lrn/se5GuT078BnhpApZkA0zU+Fi32NWTY7TLXYKxK1BpHWREEFIwrPe1D3Sot
+tLh+E65rDp2dt9LrZgGerSQqP1V8z50reNcGdRuWXfJSBwWJfVVo6ApEqD17bPo1
+Y8HSfAGGTN7euRDBuov2eMPKlLTYqQAqOE7DJK1IWQtw9aIMxLuTBCORy+DHh8v3
+elFBb1PxNZ64BJrOK4+gUm09eizynTdtHYhvhe8Gplu6JO5U28djXVqlIiHtEhF1
+VltikOnWlztV/2M8XoUKZneB9MBqhJ3W0lqN5Xzw7Jk=
+=bB9/
+-----END PGP MESSAGE-----
+
+--------------010900070701080408060501
+Content-Type: application/octet-stream;
+ name="text-attachment.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="text-attachment.pgp"
+
+hQIOA076g5OuwfIOEAf+KE8JLsuGPug17A+1JJwCliRR8Iid4CxXyFplTXYgeFGKh2EN0UJw
+Rj0k10BKnefbhL2gRM90aQaAF4gBF9mCh4H4Rg1reZ5ohoinNPk1Qgkotx1JnyVxIEk7mzKE
+tDIU4BGdcaN6LPhlBRBsSA/nzA19oM8HwecBstws9fbS6ZRwV8XLXKEWsQASEfmJxSYWpdkJ
+GEWIprcwkKClXf9RO+FXhFeg9i1ucFC05/1053w1CZtBAB9ohqs/GhILiCzVc8RZtQ+Xig6c
+Pdv7Q7zZBRy3lFz3o6bAjefxZfNbvVZmuJGMLPrevXF02v4aGazCtzqm7wR5cH0sxaaW0maD
+Fgf8DAeE4A+GqG16s6GGodVllO2JsDWYlyVnf+kfE4FU94uspYteDeGBf4zXhd9ccRYOnDWO
+o6yBwgonzgrZHicF6kcYhJLQS0uM4C1cK9S5nh6CP8cZEUUmEar9g5TKQjWivNGl4qNdzm10
+4dZOK1/u5xFb6dkrqOZ1a1M2DfrZRxgdz2RwZZbwre88wGKP3taBtvJvFXk26QNEa78fuoGL
+wqo3jvsn1evswD/JL4bVJl6VGRDNAsqSxkR6209W8qseFA1tw1aFM8XhpZzhchOlshg+ri60
+r7fMKln4t1hiaBstROGCCtdLomb4ezxJQddp/SH4K3XdHBJg+4ttjsUmkoUCDgOxaIPydPr+
+7xAH/RbwjSq8A8C7lJVXcwnmEIIpQfaKNaFkSRhp9+/y8e8skhUz6JRopeLnMv0u4o6jos+2
+9VGQ8ei+wzA8NgIbWtnxktT4aobI+lWpy7fyC13aMcG64lYbDUjktW7YNxkMYD9+Pk5bBpwJ
+hf9cXhfdSPPofqUM1DmA1LcrkkO+d/qvTCnHjrrjwvTFGBmvKi+iKUk1pltTvOdc5rkK7oI4
+6U6JTYWp9HfvNt7oYCMuILYEftvY0XhBCiUIWUClsQ7WhfqoGpix1peOv4ajzDYeDPo18cMi
+oyDrAHAeWAOjYWtuDXOtwpdaWkAoxgZOJgcu2ZVUWdGyFYvSCwOxfZYzv5IH/2a3xIjO21OC
+M5ql+lXb1OFfqsqXYXAhOP5+JhBOa5UN+VBIKG9pxVL48mWCK1GwHN5RX5aB+ky6tvkrK1QD
+XjCZRxj8o+le03bZ16QiWSEuqxTg2e4/zWY1ZUXBqkxpBVRwT5hzEbLVays0Bju6vKV8CyX9
+apFxFf/vWZ347x+/cK6jc/Bpc8u9PSdOBwGC1ReZixmvgL3fI9ozLOlkNXGvjKxx2Ui6v6LB
+e6SBQsD0cnhRGgfWXgJQsmmPDVPbcmM9+pU/p4JsqdA15lNUILXeeiieFNGHjUORgZtjhY45
+Z1Hw8EOfZWBquFbNt5tRaR6UmroviHO4kNx5N39DtfvSegEma6N5QIsTxrpw0IP2NMVXJ9qa
+4in+Orrc1EQfljFTLYSyK3zowghdHlZsMUo7d5+AMjDlsjKf9H0f1gMB8hWebQQNlyNOmKa/
+uHMcJVlbpGFCOspBgN4N2+s/Ldz+c9hy9W9x7J5U2bcdsdbEKlMF0EkgUE+f3Jhc
+--------------010900070701080408060501--
+
+
diff --git a/rt/t/data/gnupg/emails/12-encrypted-inline-binary.txt b/rt/t/data/gnupg/emails/12-encrypted-inline-binary.txt
new file mode 100644
index 0000000..e07163b
--- /dev/null
+++ b/rt/t/data/gnupg/emails/12-encrypted-inline-binary.txt
@@ -0,0 +1,86 @@
+Message-ID: <46BCDCF2.3080704@mit.edu>
+Date: Fri, 10 Aug 2007 17:47:30 -0400
+From: Christian Ternus <ternus@mit.edu>
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To: rt-recipient@example.com
+Subject: Test Email ID:12
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------090206040704060905090502"
+
+This is a multi-part message in MIME format.
+--------------090206040704060905090502
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: ISO-8859-1
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf/bD4qivq3N/0qZZnLucbOARr1mypqomT+gvm1It/DllR/
+F3RRLlm0wcBoVQp52aNecT9OJiZNh32oxPW78XBG2OCZv+jATd2vMf4ESOX1Pj4+
+1DATM9V3lOJ8XYJqAX9dVe3MdUntpwqmGvlv2bYmbrc1o6IVQroPm6eV+ttB0BKc
+ELj+1NjpaXDGERoV2P300JcJNR6tu9pXo56kz1vAjAQj/xQBNCoSOxBB1TJA1sKF
+iNuQVObWYG2cE63PRZFTlzvTofeHo9kt9ykfyfNMnslwAaXPI5LJP3KGjUOZiomq
+XA+FYLzMuFzHaOgRGcpJGKTeZ578N7WZ21zmNOgS8ggA0/RNae8CHklYRd9sySdo
+0vxoAO6pokK9HSCaxeX96nS4JJfij/uTMRyR1cbwFBvJSQHUtGNGL1Tn9vhgGfqL
+TjrkvkC/HhBqu4QDYH3ekobV/tu/uQjGhxAASTFB5vtYSQvZtmCR1COTmO559aDz
+oO+93N4x3AOhC1Nhcmyds9mSCKCt4TCWE3gmHuPKYuLpSwj5Ndi5er6jCsq7RpsJ
+W0GzGOGg8wUUPDgBWJbXS5CVAkiJs/SlP0yUqeVR18mf9r/oKUt9DL3GCp230/o+
+0wyVkzqOBPNiIHpFRN1NhikXdKRVOL4ewJeCc9nrlBtLwqpEyZ1g4Ht7SKkE3rl1
+64UCDgOxaIPydPr+7xAH+gNwaV49PwLd8WUJpPuL+YmH5RRsAasWvX+VlnxM+g/7
+cn1BrvpXekq7vctMByxHaV2WnaC42n4M8xC+V1B/7Wk1rmhRMZKpIVjM6X9eNsPg
+FvOX5DhJdhgNOhjwT7rk29P24p9TQj06TwPnvLYjQJ6LViiX5l4T1YpG0mMb6Sc2
+vmp1MbGeV8zZ3hVbSpWOmwlotvfiGa4LjLGNduXIiOFF93pviV2xApYNt+FgJHLc
+p63GfqUXuj/K2iqKwFIbo7nssx/ceWBRdlgPrE/MSStYhBm/e9mw55nwDsUIB4Pg
+tkle/6XgRsOgvHydiTD+mxng/1bx9cmvVtNfvOq82wMH/3JI/rfmQUQGRJ/JFufk
+Kl26lQcbd/Vyxff3MVww7oUFBY2oUPwYL/5N3TjhI7HwiCkMP6S9bL1AfHvkLenu
+n5GKjSLJmyx7BNQMEIIKWD4tNSjA0CCk3+QVGr9sRIVIVD44Be9I8jlcpkn2r5Qs
+9djSXzEBpM+Aiqv5cCBFq2rgYyd9m2c2iHsI6EBaxCzYFz1qobsfvXk4a7ax0/Ck
+ug/jPEq8GK36UTp+51G8JhxzgJKSm4Fo7N3Os8emIlZ2QymPrzPkxEQj9eRsMmp3
+qIQ0rOPjTC8847s4lIlAx7di80OYQ1dV2J8NLL/qxF09rr6f978oH59IfSHRKJ2b
+aCnSfAGfFBr68Zm20se6/0mzrYY2MDljPrKSDQPmNW7nJ761/YjMgVAeZlnKW7JM
+hTdZciuHMTX7+3BDTGCMbAnmYYWurX0jKGJ4X0UJLV8m4nsXvqHvsG6FBzVC5z2w
+kytey5Bqi2gXRjk6xqckH4O79kEJw0kLkxJbT9IPBKw=
+=vGEb
+-----END PGP MESSAGE-----
+
+--------------090206040704060905090502
+Content-Type: application/octet-stream;
+ name="favicon.png.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="favicon.png.pgp"
+
+hQIOA076g5OuwfIOEAf+P0Qp/k1B0WDRr9bNcEANStTaiefYoLrUrtMJv+aFtkiSqKfft0A9
+okrYkVUKs6kxfgxueuqNMFQh58nl8+d7Z2qGIgVEXxC8rRxexEQ8mXu5LXzzBbc6Dq8Jsa7B
+bXzwGty51culYcKeMEjpEY8Qx76qoNQDNCuvth1JJxJ6xQix/pVyZZbJRu/nLrv1i3Z4KRFY
+qafnJlcsUTVj2o9dLfeU13z8nd0uBPY+hiCgYJHSPDLr+mkA+c6YK0m4a88r/wjLmsVHMkn2
+N5nCjuqP4tzT8SCjhoICGTbu+fFdks9NhQjvsW7MHBi9HFFzm6SoEvquFHThzwMl3hAhTLpi
+Jwf/a6unMP/swAxoFTJ2GRXBmQOH4sJHR/M31rEVkLZGJixhU94Tpx8ptgLXqme5VCXgl+M3
+Oh0GHRXqFYjR/HGUTZokRKR/BgCEpOGlH5FcabHiu/Gy8UBezPbuC+BNvxuCbuwODMp9R5DE
+F8RSCAQ1hrRoJjeHT2wyE7HdCvN/xx7NyenA3GdJa5Z6W7Y0gshr2fAOFL39jKXw4WwCh/Yq
+XnyG8uOyPgFrnHI3WpO24VpQHp3MBKebWNhQ/Opy/cABunCSwWQpDB9Ar4GeS3R1WGtMNC4r
+ph4afmTHJcQQkoa0VfvHL0hEzycwysYD46O9QhZfhxtKKShgX356oCeMEIUCDgOxaIPydPr+
+7xAH+gMnbi5OLPf5xMeZydvNWdHE/wJTub2rrWFtzvj0Aa5Ne/KFhcDDqSjaL3MXP1WfIJr1
+/ANe1eWcM2hlYVDpEn6YOh0bz6BASE4kbHA5nGMyUrgH0hWfcOgkMUloRZdf1q32j80mchCJ
+rF4YsQ6EndnUYzAiXKHGJRUy/6IA2qBH2n/fRiyC2FmmQPtWO4c6t15Vgh4fB3QXSTri8J5r
+577yIiHRE+dq6gg1BfyqCtw0DW56lSFQ7dxyMXeLyTGyjTGPlUDc+FbP23CRK7zDIVujARmm
+mX3bP2lMfCK326FwBZf2Q4Zl/ac1BN8Mcb4wwcnKvRzfEw8d1Y6pkphe7KYH/0MDDqtmuEw2
+D/xdw4FHB16/HW32bcPaMVvFuseczEfrwPGCrCiPHPm++edAoY0rWoBtzHVpgN+s5bset5OR
+snhjuWceuCb+Ga0QV0s/xmIPIQ8VYaXyD5hob6nHEIeskS68Vbni0BpY3nejDPoV3dNHY2Tp
+2fjYNHCpsdTz8yyavQVixoQjZQH9hUb48zZDHCt0Af9Rfq6Et5/Qr8iJqAyEU8JzZtrkpO4O
+HgLU7JTPLxOGzYtOj8JkLmLguVA5kOafAuU4OTEU43utQfS3KYbdEWT2jJ1QaJVS8CjFJrqH
+V99FUsDvgKWSTy5hA9gkQAQE1QdwkoQKpkCWm18KZqTSwNkBfrsEuvHC3Cz4Sy+cJmhr4Hvx
+dyZY8DuuWExUcVCjkeuASLgjLEgahnCbMkyKATazswwTEdfzjcOowjLTdaWFEN/Cg22nF/px
+9MXMtzBkrTkjYPhfywETKoMVH/Nw7rRNZhkOSb5WJV5ynF1BlbzXI7Z8rA/KrIn8aydzwJUU
+qFr8Dw1C7kbE76+SFVWX8fqpwGmQhDAO+kos6ivgN9HDHtuXmwfGeROi2U0WcmFGbAyLo5fT
+LCcNPOMflU27WDXm8m+tjq9naUynqvwg5zBBz/xY67L1R8uOwfZplvRi35iZAJjzMHGirkiB
+W3ZDXbDqEfKl4aCXqU+XhQZsku2z3OtKZOBVVI5p8nGVEfavg6QECRUNUS7qbtMxlj5IwCGl
+babK3W5YVuERjklrrLUYZjqFIZ2yLK3Z2VmSn7yKAb/eRvdEeha+9PKcN11pXPkS/M3t+Vpr
+G+4TqNgqwLVWMvbENp08dS3OAPpZLDnqG9CJV0qacDMjv69X26V3Xp6vuZoKqAPxMG9QKAfX
+E9LInR1Kd0cpRUkb
+--------------090206040704060905090502--
+
+
diff --git a/rt/t/data/gnupg/emails/13-signed-encrypted-MIME-plain.txt b/rt/t/data/gnupg/emails/13-signed-encrypted-MIME-plain.txt
new file mode 100644
index 0000000..f0bd624
--- /dev/null
+++ b/rt/t/data/gnupg/emails/13-signed-encrypted-MIME-plain.txt
@@ -0,0 +1,49 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 19FD037F61; Fri, 10 Aug 2007 16:03:35 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:03:35 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:13
+Message-ID: <20070810200335.GC5815@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="+nBD6E3TurpgldQp"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--+nBD6E3TurpgldQp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--+nBD6E3TurpgldQp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAhFFX4adckICRP4VEhrElZ8rRYAwJVbTLd7S5yOnrovcG
+sRAIZTjEmb8CRPX926hm3fJ/5O+pm9ZPE1wzvEBQGcJ+6oZPD4GMwuMqJpaZLw4v
+6zj4ogzac0i32vkwLYDLHXle9ytgiBwTFHuOKllCvBmTe5PrFAHqhA0EPJ824gD9
+H93LJUyvn/elOHASKVcUhm1XLV0RxdNTh8Afc7dEAIr0uPaWu1rVatdnc9JnQjsB
+luYLP8M+UD9u/sZwSBv7x/PVIOE9QsaFQGQZTYEzKb/4zeujcUyM0+4rjJ+45QUX
+cDsrFVmXoQfts2nw0BN5mERZdbOIwvkhZMZzsf+EKgf/dA7x9rguO/eGy/keQf0f
+sBHAz24WGWRqcmRNdBsaecVgAsygAEi564RQYvxM7eJxqKl+1TsjUmGUAmacShN7
+JjpqTH9HRrV522UNvVXFitel4Ri3UItP3zI+951x7YvkzUtIz8gfaCOHC71NmPBO
+RdKDDBYDEajJkYN6mhL+QpX9fIIP5ALkfVz0JmdHN1e81Z5myuEWnCSuxeyZHCgl
+Xw8PuV/Af/+GHqjNUaXRDxN4SWm82pKkK4rxioMI4liI5zuR73GH8wd1RjspCkKd
+gPEhmqDxvkxykjhtJt5Izj+iQsyZNRDHRkGJA4BLOLUnvFtwpNCg6DaRDUOBjBmI
+P9LAXwGbhZU7uZLtSzwn1gr8TD+cqkpQrFlKRiUCdh6sTwfp+HE3JDmKAwX6t8bM
+ndBMYwIPddYdkFFpWOQbl1G72zR3SSuwgyCC5+xZxDWPHT97iCKbvCYAmdN3cGHZ
+8Lqu56ulz54pIkBZzSsu8TWzZner2eax1MqITH3WNYYuH57yiMSaUK1DSdFrg9Mc
+o/aK0QUaW6pCFbYGZRS1cqUBaN11Z2debMC60JiNFA/htzLwgSwmZiEdAIt4lvU6
+xMdA7dFYuVLmVh9+VQYp3KspNDWsILiPsKbV8oomlcLiZ+g8cRY/NzLKXVqX2a+7
+Jl3hLlEuVKdcWe+XCfWt07Y2Ibwtpkq/vph61cPdus0dgV8U+QITQ4kt1ky8xNBc
+L51c
+=zSIe
+-----END PGP MESSAGE-----
+
+--+nBD6E3TurpgldQp--
diff --git a/rt/t/data/gnupg/emails/14-signed-encrypted-MIME-attachment.txt b/rt/t/data/gnupg/emails/14-signed-encrypted-MIME-attachment.txt
new file mode 100644
index 0000000..8a70384
--- /dev/null
+++ b/rt/t/data/gnupg/emails/14-signed-encrypted-MIME-attachment.txt
@@ -0,0 +1,51 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 061F037F56; Fri, 10 Aug 2007 16:12:29 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:12:29 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:14
+Message-ID: <20070810201229.GD5815@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="N1GIdlSm9i+YlY4t"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--N1GIdlSm9i+YlY4t
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--N1GIdlSm9i+YlY4t
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf+MEje2ZVc5yRFxINYBmz8l5oRdrDkldSFISKNlcFogKeA
+ZAwvP0Y2Utxjs+aT25gqR72uftGzCLhKdIb8X/i8CswKHX/1NnLKFTFB+T3Mmwtg
+3a9jiB6kQ5haWvcd9y1DBcm1Wnw5B51QmiHZzHu209dphl7qnoak79M0NK4KPSqr
+NKqn7yTKFOjJ3qIlCLqawQbQy++IFmtJVKMQSNZawqSX/JSGMNPz9hioyOgyjxtE
+XZlrdgV1jumnZ3nVF1bQFMGUMGpi6NAA7+TiPjSZgFkKp2zvyOXwFKjKqkVgAgUh
++295JO9kjFmRYOxpWcSfBaibX4qFSsWvJbvltNceDAf/WCCcvP6+JYHmZL32YL6+
+oSM3SnHuG3PIqaT0/99pMVIhHzhrdrmWsyR6ijcK7PRpQg3mIZDd5pzAgcae3c4M
+mYsImADyUC6CX0PvSOYYvG7CskDUiGk76fjDKTkKPkgqEFJXz1v9TA+ptx9v2PTd
+CW8cES9Du5PdwPLbltfC54ax/tCKcyyHbtgozVQJB6RfkXKhUjYI632qnXa7BDqO
+c5Pcpn7gKKik4MkGEWnf50aqQ6ph4Q9MfOZ+5hc/EBUQd2Genqn8iCTPa2rkrI49
+6sKJ9FSdXL4Xdlat09MxnD5Dw6DKF6G6Ig2SAQA/WBG5+sZxWC5NMd5oeJWHVnCz
+VNLA5QEIo0BNtY+wm2W/YH3hSHV5K+Mz+MEKEUaimYSLWKl1p6vboBjHuk0XY1Tn
+FDGmLVcO/jLBkiPOhNyibRXaCW/x3iws+xCHngjX4rDeidEtphHCxihVtS1Sh1wT
+IHHE+Kl6jlateIeBpug79RsGKcdwYTUg2SuaZXEf5A2tQtUhU6TEWYqhFc0g2dCV
+u/lkhrVRt4S+En4DYJ7myQYdMBeHym52Mz9tFZKKQ54dMWDhDsRZIe0Zy8TKBwXd
+cwc5kMpkwFK3drbhFuf3WnQUUR80oyGKCffJw3n40ET91b+nAYJ8bPvYFE+gDB+S
+vHktXvM+vk4PTAKGN21TyZfB9n8VVtIHq3DUPpStrFFQQUDKjMeZf0TDtEWVd1zl
+7jVJ2d+Su/KcAXUITXAQMl4ECXMZ3VD3fnbyRAHI375+wcBh08rM1DQRdhWd40XZ
+55rzTy6T0RVa3JcQBCtM8FYubYQvy8iU5XcA2LEDWdDn8D89IJ+UAnFHIYoeipj8
+qbYjl9JetF1gcmm3QlUwtec6nb5VSmWdQrdfnvdxrW54J3gqlGnzCQg=
+=7/EE
+-----END PGP MESSAGE-----
+
+--N1GIdlSm9i+YlY4t--
diff --git a/rt/t/data/gnupg/emails/15-signed-encrypted-MIME-binary.txt b/rt/t/data/gnupg/emails/15-signed-encrypted-MIME-binary.txt
new file mode 100644
index 0000000..55f69a1
--- /dev/null
+++ b/rt/t/data/gnupg/emails/15-signed-encrypted-MIME-binary.txt
@@ -0,0 +1,60 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 171AA37F6B; Fri, 10 Aug 2007 16:13:42 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:13:42 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:15
+Message-ID: <20070810201341.GE5815@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="QWpDgw58+k1mSFBj"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--QWpDgw58+k1mSFBj
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--QWpDgw58+k1mSFBj
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAiH54xEwaxc/DL+nyd5f/77c6Vk27bdxRz1eXHVU0ofqs
+oeZHkEWpkub80YQL1HOQTabAF3ZUIGfyfGufnqXpWWNjhnxP/Bi/Itxk4p3oq6Pj
+RDoDsrO6SPcM1wlbz7M/8rTmpjTk0cYl3nA9Bc7ZDP7jRWRRKFp3Jl63fvK2BWG3
+x0yA1WwJX/gzgsRlFSBBFukaffCqaeQZJ2GSKGbuHTH8EYvGDjqALlEwE/iPYRYq
+OoSa27KIzDCwPFJf8/ZK+03qX2D2LrEViflbFlZMcMGrIFmU0BLrlBx8Obimu3lm
+8bCDX5zQsOIptLQqrhQ5E1HIeEFHqJAxJwHu5v7AFggAqSNH4adYAxz3vZyQ3HdV
+IiDYdwwGh4usb7R7afc8uiFGzxmcc9ktyQ8bBAEpGHMU+ahcUMcfg1svcSKKFQqS
+xNJb5rl3Q9D7qqsoFnNdVFGIxhnUpjt16TdFEtRHDUnC6dWjxKw2fzdR7YsclzkP
+IjUP1yHRK0ees3r7LGU90zQUcUXGnuX4xbMi3+t8NFPqpi9DIkOKS77XEpLFg+Yg
+qrMi3/p72jGBcgbchyS5JJyrVfZjz3igEDy4A2rEw9lJvyemahpccYf9v8LjVCn8
+ofdeLujIyDV1T+wFuB2gIY8fbnvP2UC+ffJ2qGA4uDiz9T1t+IapBjwwrhG/P541
+KdLpAfXAJzKb/gnXdicy/TyGnMguVXryCVZXAx392jA5se/OVjtVkUV8hMcqBPFC
+6zMEPZDXVaCZ7r4VX4xK1y7MGTrq+t4v8UhmfxckiwDVrKZkt6MOwdhTq1YBwFwq
+DEDN391R2fFr08i+3ogKv30gNlqs1gfqh55uCsZMsrtjMAEnM7JcB6pnptND/mRm
+9MYsz5Sxra5L59SNNhJS0GjuTVGIaEhzwusWdFTAeE358AqTOTwdSNe/Fa3qEXBr
+YzmrCgTn4x4YTn8IDQkh80It7ENEc7tkgRN/FcG+Q6cwHWgPOj7QDBJsN/lm8V3K
+cWKVxwvp+hoP8isigZxi/7nOD1EZkQkMAWyZSFp+iCZH14GcAKwqxp9Y8bgSuF/5
+jzASoge+POvEIpsbS7lmfalU8qR2kCYg17fEvDH+6olqRCT6Bq30cVUYY+LVAHgz
+KXgJjK3WYue2XQieGaNYjtwr9AsVl4fxpjXmb+QwL6H0K4JMdXc9tabF5j5YFeTQ
+rWYzED39EiXst9dAFomVhXDHD1OdpAbNh5F9/9wlccgZ7co+tK3bdcD18k2G4XGq
+1AX27utveaSU8M1jeHG4a9//f6NLn4cqJ8Qryv0uiY7N0iiwWHsoHrci0doMQI0U
+glPhkk7qjHf7YAhsRsybfdNrum4jPHMpk1wqY4GR4xhV3JLAbDfKN17yHJWR3c2w
+TQ8sOLMPKMibyo/KRBLCz3CpnuSvpc7A5tCenDJLYtDhmUMofTN1ki3gBW3OFQpd
+zH6pCuVBQDQ3iLO/lg6Y434fPz3cuKnxBdN/QvdbeiX4H7tGzC/q+qXpu/8Yv2x0
+AVSQkrXcc4CQXAvLzqNMXa6NgKrVtVNXUgHyIxvOgGyVxULKDQo+3bByccCOjNOZ
+3gN/JnU2HvEk3iYDYPa+VOJzS1i6itZOCeCBF+NDaaTvG30owmINGCGl/nxv+yIO
+9nlCF3QYdaod2TVYfxdp2X7hlPEhv6nHYt2r3/pXYW4Hjy5M/mT7sR+OVAgknpiJ
+yOzeNy/dVoxpAAlOuzwl+sYI6TkDnF0vduJO0jxWP5+oa+Al9sWr4x4E59OkGAg/
+lQ==
+=NbQY
+-----END PGP MESSAGE-----
+
+--QWpDgw58+k1mSFBj--
diff --git a/rt/t/data/gnupg/emails/16-signed-encrypted-inline-plain.txt b/rt/t/data/gnupg/emails/16-signed-encrypted-inline-plain.txt
new file mode 100644
index 0000000..5686a12
--- /dev/null
+++ b/rt/t/data/gnupg/emails/16-signed-encrypted-inline-plain.txt
@@ -0,0 +1,33 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 98F6C37F69; Fri, 10 Aug 2007 16:17:42 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:17:42 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:16
+Message-ID: <20070810201742.GF5815@mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-encrypted
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAsnA+yHerSZnvxR6TIiWSIRlohPBIQHUhoeHBH+9Q0DFJ
+r6in5UmN1luVGtT8kl1dbLAnoVu2Yyf/d57IWgam41MbWi1EmGLQaaLHcIbQ3JXR
+MmXXwG7PTHWdZJismmqCOuT3svTlkqerIBicsHXvfKE209y+jP3lruJ7cVpxZyCI
+M75H8d313r3MwBpoRuEiNMBOjG6MXOATFmgRw93J6pzjWirxwmawhaSNeghkO8tN
+3vdDkzZlLmM/Pq4jQrkWbIbGH/EwdchbWNnhd91o/Lll77fshkXNMYQlgyU154sk
+3wCY5IFGJTUdR1hrETz2nOASLDHIdamhhz1xMItClwgA2uXkVhG0Fslp/A7z4a09
+ivX/gM6a4KuFSNVJtHrlc6Z8/WKe1LNdLiulbFMtbppvMtIkzgZfv/DBavZJBqVI
+EOI+9VzLb6IdqybbNp54nRbniU6aiboEk90waSjqHggCnk5qnOUxrxp2ZCIn9pwP
+KUisxy6cAKGCEeFdvtXIBqfC6uITAu9kNq78rPN64TUaZbJs8VshIj1zpGi6DUYa
+uPvGPIhlLi5xN/oK3Yu2TDrIPxO4m1ZdHQJH8TBn6l6EifAVsDeskSQ4nCZJzc0H
+0D+ofkCzxqRkjDY0IOcl7hI79cRxO5tagtf6od0vcK883wUHxe6Kfv26tKm8IsX1
+ANLAFQFi867dLG+X9wc/QyBwNXZ1hPSE8MulfAYyzT/rXno4nkmQrw6zFLf9q4gA
+Z7aZsgxXPAvWwhwLGyinNgi0ua5LHZL17CWOfG8/GlIK59mesnk8tC9Gyj8aLU3/
+ROteGBBGfk0UJbfcQ+reAjmORofZdHSMCsGYZ5DJEy3KIUrNHzW4yYAlfzLWYfX8
+k9R41E0xGBuooe578MTBtVOPZKY4gurQZdfrHdYnsUXgfpV1w6WYvEM31n90Px6m
+aXWFWq9JVxX/JFOmWJV38fw+EhNgApncTw==
+=J8xa
+-----END PGP MESSAGE-----
diff --git a/rt/t/data/gnupg/emails/17-signed-encrypted-inline-attachment.txt b/rt/t/data/gnupg/emails/17-signed-encrypted-inline-attachment.txt
new file mode 100644
index 0000000..6991f0b
--- /dev/null
+++ b/rt/t/data/gnupg/emails/17-signed-encrypted-inline-attachment.txt
@@ -0,0 +1,84 @@
+Message-ID: <46D73CE2.8060202@example.com>
+Date: Fri, 31 Aug 2007 01:55:46 +0400
+From: rt-test@example.com
+User-Agent: Thunderbird 2.0.0.6 (X11/20070804)
+MIME-Version: 1.0
+To: rt-recipient@example.com
+Subject: Test Email ID:17
+X-Enigmail-Version: 0.95.3
+Content-Type: multipart/mixed;
+ boundary="------------070807070206050202070908"
+
+This is a multi-part message in MIME format.
+--------------070807070206050202070908
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: UTF-8
+Version: GnuPG v1.4.7 (GNU/Linux)
+Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
+
+hQIOA076g5OuwfIOEAgAn0IWP59DHAWRYz8MG09D5vp+V3rfVdwv8ud2hp/jAUDZ
+ogXobK3KkUH5CIDaohqgrxobAtU9D7XhxO1ti6G9ana7+u2GiTIQmC7F1THSipNJ
+GZajUNG4E0WQXjvkWvDgx2cLdjn+L/i4Y5lQvP6CEmzZpdfKQk4DZdmMJf/Fz0Ag
+jqPI0weYSEr8YBz/p0bEy2Xh7UPw8rwC6ajk/v/E/SfZXI+TpWnFxLt9OUN+o0E/
+o8RQ+5LTpPvkR4RTFFnqZAKu8CU2LqNIWYlzhm67pi+QqeepMuhbW+Ix8tt6oBbN
+EXFrwBYfjLeLcmMJcm2fEwE7otDqKHHW5/G/lu8RBwf9E0TjxnGbpTH3ERrj172E
+T/LT0LD2qRitQQCdFyeDvnq6KKyoUtkyhwrrfpDfB1ZYBSjgIB8rgolbO6OxnY8s
+O6dob+07mQrC3EsbrTQhRjwtLCWB/4kaI0d/9Y4/InStq14AvW0wZWX3kukUq8Us
+ReJhrDA/fOV+duOQgcEc6ZsMjLE/snQv6KMN7ey7iOe10ejLs9qHFZClqHhpjbn7
+zTPRapgTOV1hwBWq9603NDP1EQM/wAOFCw1TDUnhFOzUocpBfSwajWY1bKB4pz94
+Nf/U4BBUFq3aQVX3g4mh4sBesYInZ8wMq7fw9fegyiaLL7YzTbxg/YSXHWkTaYCk
+YIUCDgOxaIPydPr+7xAH/1BIgIWDNzXHWbrmi2pxg547LWoJ3EpJQ46fk2ryfIll
+6Ot1xpCXGStZA1bUnRB0KTZlTNVfXkIy2TuFKJ0xP5JgkeeVQ+Vn8wCXyPB1nYte
+WJ9aKHIk9UhKHhW6FHIjWs3CYjfmpJPaI3AXu4hwT/W1yPIFbAb2UYwuvRn5XABk
+RDxauFRDoHKPvy4IsorGBPIa5ZkJxuBsP7lxp03CfgnUHX7HYehlNp+rKzp82uLg
+fXJdwQAE3OcrnB7rbD9AirIyJpy4q/sYUOnC2M137PF+HYA5zCxktpnkVDtWd6Te
+DyQy7T5Ey5/NzP8IbJpS3Wv+bYOiozv1zNCZ4ZbopbcH/RKMlLN78fSTZmgC6Snb
+dcwZqi8lvL6vx83VBwUAaQeNDLvtlyjojt0UuDWUI3JQJpv5vcGdLjP21+5f/INt
+lua80hg/pKwoKijzQPPtnPBJQOiRkzIEYlaqMkmPi+jgkosf0kcAWxnQGt0L74tD
+Q4ENpgCK6jJVkQFN9Gd2efT7EFUc2acY7/YfFcTOBVm6xi0FXoa0HzL4NzMhbrsx
+NhlC7/Yp34y3NHjzVlMIKiU9kbHrVCyZyXKuSSV2em0a1SqbJu2wj2/qjK6Ibtts
+0aowVn5HafWR6jm8sEEyX/v8c1BdR5Ibmup7Z2DPd0j+fY65GK0nNYZ5QeYq7PxR
+rSbSwA0B+Ot9P47q0c2vGrQF7EKvug2sgnE/9K8DX+Q5IVwMQEoJUZvKf66x7DTA
+YIMnWxlJeeU6fkURzeBpv0TzidU6/KRa/2xg/QoUTZvftAoaQidsajzFSIZTBEqC
+xjzLnkqlDMtlZYBtdvVYDxrBvj8u5whGnhe6GhO8GUfIe/N+bWM5N1kbUAsE7Tau
+ify77kszQdf20rLVO9eU0MjXyvKpWcT/Dpk/Nzth3iLACEtjr/dXo5pMwK0mofx1
+I4lLS7P5PtTz4Oat7aV1up1o
+=LNkV
+-----END PGP MESSAGE-----
+
+--------------070807070206050202070908
+Content-Type: application/octet-stream;
+ name="text-attachment.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="text-attachment.pgp"
+
+hQIOA076g5OuwfIOEAf/fLTYMB41pbPXfa0LaNlQ5PVkAa8i9W/RVfA8s+BGgFYz/herlLi+
+eCE9Ls1RoiEmh3e3ZOG0M/iPA0qBMryH4fcYWqx3R7uaZDVIOEcUM3lR9Q0ffNfGRyVMKX+N
+nUUI/HAaSLCl1NWF6Qnh+/S8tV97D6FDdqQqJKeG7HtPcXMJ3daqHcCl5mMrL/OgcwEcqdHl
+dw8VnESjnkQ3NAvzyNJEpyB7fHN6HtaynxmZbU262ez9Ywh8XsfBbKsDhnLRf/rEUt7X3RQz
+YjXL2C6scGT9ctZ6i1yxPQJOP1+Z+UxijfSd8S59n51/SATsdjmhNFst1JZTbX9Xm/Gv//mj
+aQgAuzhrqVBvyOtX1fMNxGACBhMuJKMLvb9bCltnl4V8IN76d1HP65bw9FvFC7JNcLnbeLBk
+6J6CGhwZYcQHuLBiTAfycM636RotiszjLTx1/7j/Jp3vvzToLm3sNNb4INVmoRBrmVqqP2wl
+Ykl7mxdHAq0Lr6NMiTnk9/TVbJnXdCFseLONJaX6ZPrPZUbw6jhgDMeyAjoBkHJjGqfbde2S
+TsHvPvT53g8d2RgZx5ATptTphU5QsBbS0eYEIiKoU4lUh7augb6EratU63xTsKc9pJ8DJOqB
+l7Ic1ujUDQqlccTVJgYyIJJVO/GUR/AkIYrzWcvEwhtk+PW5CMwrcbEo5IUCDgOxaIPydPr+
+7xAH/RYdKbPnEo/0R8mZls6xuycjGoGNWYuhhaze7NiDPuflz/oMkPL9f/o/7a+9t5mBbdQ9
+XXnNKuhclocbDg6N/TLXWWw9011Ba2ko2l8LpvzlLo7oARaMYZu4kmMYZIkIeQ2GW97gIV4w
+yXLJOuVnH5cudt36/P4QqJM0PxSqmQA5sqAMB7cvgK3RFKbDvvrMvmyrdoTFmrcFhKMWbTq+
+g51hVLm7HEHjicP6LEhHv7m4ooe+rojS4D+0HofvkPou4XWJ+R2T4CVKOSfobrp0RjMqjRuJ
+PvdzhyUNjP1qhtvUyM0JBgYHd7biFKOKjYG7E7j9+5EhHG0uSG+xRWq9NtgH+QF2Mhb1WB24
+lpXZM2KPM6OdStgEJFEzjr9DwULJpEzQhvOAUI45Jd7oqLQjEdmzuPmkEBdNfcUBKkCNdADp
+JBn/0Ak2C4OQImtZX6kyJ2afF7zwMQ5J1eH2e/eOYJTOAVnt29EH51UZHi6OCWosYQhDMNZW
+8AXoza4H3474bPzlxw7utSRm/CJwetrmp3L9BahuEheYv3PZCmy/1aHpt5OHIJDmrDVMzaAH
+DhWNkRuY4/CLvg/+r4W21Y7tsPllPGNfxLJt9kilu8F3M/alhNK8CxbM3sskNnxSPPid5vE2
+e88iO74uhwvQzTrPKlXfsUDpnGacAwG3uNS3x3CbimjSwAkBjvCRETU1DziOU5xVTCGEQFPv
+gF3YtRG7Bmvm0d1zeAlPDuflRhadYCdNvy17gA8LI+YBuk74XavAqKURN6FEevULYaSPZCx8
+HXgjE0uyo8U7l2D9hrYjGuvON84Cwp2O6+jsiLk4oVvdBVbb0PRz4xj/Egnlu+yjGD88Swge
+zpQzBdaqE8m6sizWBlYyPGh8amL8/PfS3OC6hZcg4LOiLhj+h+h3eeamTyAE62zjJjC4UMKc
+ZEI9ZhQ95BxH9bTS+JxP6UySLnQ=
+--------------070807070206050202070908--
+
diff --git a/rt/t/data/gnupg/emails/18-signed-encrypted-inline-binary.txt b/rt/t/data/gnupg/emails/18-signed-encrypted-inline-binary.txt
new file mode 100644
index 0000000..315ba58
--- /dev/null
+++ b/rt/t/data/gnupg/emails/18-signed-encrypted-inline-binary.txt
@@ -0,0 +1,89 @@
+Message-ID: <46BCDC0C.6090400@mit.edu>
+Date: Fri, 10 Aug 2007 17:43:40 -0400
+From: Christian Ternus <ternus@mit.edu>
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To: rt-recipient@example.com
+Subject: Test Email ID:18
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------090909060406090905060708"
+
+This is a multi-part message in MIME format.
+--------------090909060406090905060708
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: ISO-8859-1
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf+KwEEEyzyWahb5iwjSff0D3MfGimfD7AJTEBjjDgtxcC4
+8xKSJsXhZ2feCi3Wx3TYAoFedoiR0DkyNd//B6dE51bpDpoUX1R8M4W0tOKH03ZZ
+N3sIBYSnJBF66GdLfjSvyEGD9sdi+OnWTv9DbQ4x9Sq2d3u8PBLu3krwk75hJEH7
+z9Q4rhqzpRU9ymhWpS/QPd+4SvuhlJ0ciUGeYLmOFc1YAUJNWzTtnja/jZptFY7l
+8oDXtHTapeJPB9M0WaDf6R60Evkl9DcvGA6FRBMCzWRjqMSdAPGYiceeMiDYcwCq
+hJWSzbDKAHDSY2qwlHZ+2y7mIze3x05qcBHYCIOKewgA5mer22WKZIiEP++p4TZF
+kJbwFxfCqf7mB/nsRGDWsfThGED4KSr18feba8ychNLbVx83FEtTZ5tei96N6NrK
+eS6BdjedTCbvrq7lhIFmC/qPXy/5cjNxr50RBT0sLUEdnY9dhrwLxo69Rqr5qHQT
+luYu7/NhQwOV8OlMTpvy/AfUXGiICLa1iBxtVK8UQ9YMLe1GOyCmseeF3UyfTmKN
+YfEylY17YRsmYZerulSwsHnEoCipjEHOwzksR5zXDHmnv7cqVq1gV1SnjSXOd1Cd
+QuJFdXY5fBdugcrAAJsiB8Iq4t0B7Ai1Lou6x+kKQoigF4i3zhSmH6blZmc99B1r
+jYUCDgOxaIPydPr+7xAH/j7bst78EmNmr4RJvQ4A5bss5BJeOdG36MsTkQ4rXTKv
+tA+chOccB3irMYqpWpKoDMWRz8VgAu9MVVc8SBUr6XRIhLRyCpuZxlwLA+EJJUk6
+yeKBHZZ8KgQ+PgC6WYMaTcRRLeOWbTxhhIrZmT2EbEEDE1jbeeLNrEu1wmrdMBBb
+fhtQTjOHKb7iau3LOGTbbV+F9llnPHrdy2WTp8ozFbsruEqdUG85zQ8X58sy/iC4
+hS9mj+vRs8nanbYABfDHUhoBk8VWUWPlpWTUfzDX0Wuai7LWo5wn7mK0p2i84vMU
+IghS5OGRJfrGVK/1giklqUrmPuiz8M2bG9voLoOVnVIH/izycMW2zZh12TD+YySt
+D1NP6OPy/5PgYgVZvzTYtOW7Y5EI1eTYoC0cMgjITokq6NKqN9aI7sReVV9P24El
+J/LxLvv9Nk7/8Jq6z1CjF0THtFg1mQYTWn52mrYwBr7aPpv/UDDFA0dmIancXwf0
+CHwFMMHFlYSBChy/vwx8+QiE60pLiz6EnajSq8lEQCf6nSFIvmkWn8y3IxmYRgr/
+CMn0BZc+VLgyzIJYG1Ygll10vXDdmjV4Y4f33stWr2Qse5Wp2Pyg/Lsfqw3C7+H1
+1BoxYJma2NmJ6sQu8xDNKPt8dsyOCYEyJqf8KGhi8eslRPuilKOreZ9b/KZh6OE2
+cNTSwA4Buvhbv4626sdq/BJxEi4Cxrhu3dMPCyeyl1540BOSMpThXdKa5pheJTs1
+78UDi87cJBZx8eQ5Gcg2VfwXkolc/dOvIRBEvnuIvA/3DaqH4gxMZ90UCFSzZ9Jm
+By83H0GVB0l8UbneSKtbr4wms5qjSUUzT7NTmqOdZwFmxJIbB0hVZtC1ve00WlkG
+qSmK2BXyG2bccsjeC/XOKO2WmZm9Gfuvtr6KcOnHFQYj08ZSfDPzJCuY7PK4/egc
+TR4wApehk6BzQwbz66uN2PlHIw==
+=2ZQG
+-----END PGP MESSAGE-----
+
+--------------090909060406090905060708
+Content-Type: application/octet-stream;
+ name="favicon.png.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="favicon.png.pgp"
+
+hQIOA076g5OuwfIOEAf/fVq/LJs3vrFnybm6thFjpDte1mawn7xw9op6UIFqEFRjkesreTn2
+b4vzYgi/8HUKJj6A/b9OBBobsOuHkKddZ+wRnTnMTc6ZGahJOFdOc3C84hEJYvyEgRqJ9hBh
+F6awMfPYHIfN3y6PpeJ8jbtWN2QxYvy9a9dsb7oUGi9FuBC7nI0qIqdxeLwjK4MkVGzDhdJU
+N4OCCe3LhYyD+Ev8Ote2NiWFdPnCkFiO6vwYI1cEyzltJXeOXYe/7YCKDb3FcTG9UszG2nDl
+jz7hIXF4NtYVQjIxxtRxPfxKgkzboXIoAD1enJpBkNtTdVS3jtdbFvSlypDhG3+mfMlUo/k4
+vwf/RF+30fL1kZjue/Jecd4oh6NcOokKRRScIwxTwittYPVYtR5W+swTRyF+YA5SLfygmmYb
+QHDjFX+cOx8u8WzmVgK4szOBgh921p6DWxMdD6aLK2wDT//ZVdRDqNV/0AbApexlDriCP/CH
+8BQxHKTCsentMtdVDf66Y/44K6HYceeU8iZT3pvQKXfAmetiMau7G/pN+BvkN2HXFhBPa8id
+dHYIpixvjk7Mg3PBzt6mJa4SOSf8vzProFx4UmnkexOQcRxpS0Zoep1mB16oWqm7tXEUjBJx
+39BwDg8e9sU4Yrri2WzUkIPU0pG3ub5sxbCTMSxMJnZkRk8ul8s9GMtWYIUCDgOxaIPydPr+
+7xAIAIu4kheO0n6eNJeng1XE/giRvZodwsO27kA00KIW8mi6WGLvehlmFoxntck1r2oCNVvH
+Oj94nfWsG2i1zvjQDvMp2Cnp3KTmhTrOss37dFayWVODF/Q9Kx+7WXnh9zCEjQe0eCd6PiKF
+fvb4zCU3ANAY8dTmqRcDDB9TK39nafpWHEfzhjClHrQhuQDh+yb4ayXAvUXkNLIYzAvuwvku
+9x46MPLHf/4VVQAplymRvsMy/Vj3R9triHoE9tD42EOWgbo525IwLQ590x/AZoZhkCOeffWv
+6fq29Z6om8TqFTHFGPb7I88s5ihlpvUgvXkAA7ZYdF6q06pDldWqVOCUm98H/0LZKiiURX1P
+30EAe7DpKi0bAUvHj2Qc5GCU+Hf1ASGJmeENFNMwY+eDwYA6wuBf0tN5zitvncUj5SBZjXjV
+o8Uz7JJ9/6BuUcfAa4/O2qTIFdctBI9bwzzzuXYF3LbYXfjB4WmoaR0nRh8kTlpgFij7WQlg
+l+C1G630ynSm4bVHSmD0J/kBDfNUF7Kyr/riPuqnyqf2wVffbLIJYe/axb4slACZ+F4FhfsZ
+0NLYL2+pvGW05sv+k/kEyhSQeQZwmu8X4iZdfFK6kOpkHeS7K/yFX7BYRD9nMnZ5Zwekh8l7
+eVno90OdJ4rVJkp4+c2N3kEPPLgrEVlaut9gybv553PSwSIBeo8TwJX0khartEsmJRh4fuQq
+Ni8JhsMDG5Mr8DMvmjhWy5Awp+uQ+neNcnk11wQ+OYDFw4JopRED0m+igEK0i/737ANzEhLN
+ssbKnPSivQCBo7Yzv9o3XUx+UU4c3E2bE3MQRGDgDmB1SS2h+wyLDWDoBHGXZ17Hxcb83huJ
+HxFt+5e2K8T6hL3Rwghtg1DHt9eVS05v35xomDn1zPR+EWTEEhvWrPEw00CGpsq3ub4vJajJ
+Aa+4ClaBivaZVKE4rC87cdLNkiBFbXR3ROvkzoSnrA7/ZUgupDLfagDQKAj91hC1hmF1nRix
+SOIYGGeM1IsKm806Ah58IOUWsE5vAzoFqCMB4kYNZLbXU1ccxZVTU6QnpE8DzHoDqOtyN5y3
+2nyRLH9jBwKfECR3YHH3NxRbbI317fhmU5pAvRWeHpRp1yzGrCf21lgx12Ot1EWxHuXrd23p
+0O2EiQAcwadItgkfKW+UwAxGsVX+vueqSBYmYViCTFWKGqMXmgXgirR4nLt7L20WqrXBFKBH
+ms+7e9LwLHStfAzilr1deHnriNfwz0b9UPAvCV3n6FN3uz2asBWZKjOxlEr2VmaQYLiiFWe0
+UhX685wevk7AOX2LZ7iq7SkVmMLSIMgOVI8vmt2PEw==
+--------------090909060406090905060708--
+
+
diff --git a/rt/t/data/gnupg/emails/19-signed-inline-plain-nested.txt b/rt/t/data/gnupg/emails/19-signed-inline-plain-nested.txt
new file mode 100644
index 0000000..eb763bd
--- /dev/null
+++ b/rt/t/data/gnupg/emails/19-signed-inline-plain-nested.txt
@@ -0,0 +1,34 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 3EDA537F80; Mon, 13 Aug 2007 15:34:17 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:34:17 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:19
+Message-ID: <20070813193417.GD6392@mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-signed
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+- -----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+This is a test email with inline nested signature.
+ID:19
+- -----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (Darwin)
+
+iEYEARECAAYFAkmETNkACgkQ0ygDXYSIHxv3ewCgijZQyL5vWIOfk+06XjqTXdrN
+VDcAnj13TCHvhas6rMtxcljNNGvPidw6
+=VMc6
+- -----END PGP SIGNATURE-----
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (Darwin)
+
+iEYEARECAAYFAkmETOIACgkQ0ygDXYSIHxvvvQCfZlRPNjt77jJ7ANxwOpkHkwCY
+wsIAn0PzLhCKhIcAm+hk8CpduzYcY0xW
+=Xy5t
+-----END PGP SIGNATURE-----
diff --git a/rt/t/data/gnupg/emails/2-signed-MIME-plain-with-attachment.txt b/rt/t/data/gnupg/emails/2-signed-MIME-plain-with-attachment.txt
new file mode 100755
index 0000000..851549c
--- /dev/null
+++ b/rt/t/data/gnupg/emails/2-signed-MIME-plain-with-attachment.txt
@@ -0,0 +1,48 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 74BF637F75; Mon, 13 Aug 2007 15:23:57 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:23:57 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:2
+Message-ID: <20070813192357.GB6392@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+ protocol="application/pgp-signature"; boundary="bKyqfOwhbdpXa4YI"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--bKyqfOwhbdpXa4YI
+Content-Type: multipart/mixed; boundary="DKU6Jbt7q3WqK7+M"
+Content-Disposition: inline
+
+
+--DKU6Jbt7q3WqK7+M
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+This is a test email with a text attachment.
+ID:2
+
+--DKU6Jbt7q3WqK7+M
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename=text-attachment
+
+This is a test attachment. The magic word is: zanzibar.
+
+--DKU6Jbt7q3WqK7+M--
+
+--bKyqfOwhbdpXa4YI
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGwK/N0ygDXYSIHxsRAlbuAJ4wxUVCNerg6dLm+w7llCj51YYbFACgvNJR
+ajbUy9MMkljajl6Of3IlqRA=
+=R6Gi
+-----END PGP SIGNATURE-----
+
+--bKyqfOwhbdpXa4YI--
diff --git a/rt/t/data/gnupg/emails/3-signed-MIME-plain-with-binary.txt b/rt/t/data/gnupg/emails/3-signed-MIME-plain-with-binary.txt
new file mode 100755
index 0000000..82ef7e9
--- /dev/null
+++ b/rt/t/data/gnupg/emails/3-signed-MIME-plain-with-binary.txt
@@ -0,0 +1,55 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 9745537F7B; Mon, 13 Aug 2007 15:29:41 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:29:41 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:3
+Message-ID: <20070813192941.GC6392@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+ protocol="application/pgp-signature"; boundary="pY3vCvL1qV+PayAL"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--pY3vCvL1qV+PayAL
+Content-Type: multipart/mixed; boundary="at6+YcpfzWZg/htY"
+Content-Disposition: inline
+
+
+--at6+YcpfzWZg/htY
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+This is a test email with binary attachment and MIME signature.
+ID:3
+
+--at6+YcpfzWZg/htY
+Content-Type: image/png
+Content-Disposition: attachment; filename="favicon.png"
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t/AAAB
+BElEQVR42u1WWw6DMAwz0+5FbzbvZuZk2cfUritpea77wVIRIBQ7dhsBdIQkM8AMMJImyW6d
+BXweyJ7UAMnUvQFGwHp2bizIJfUTUHZO8j/k1pt8lntvchbdH8ndtqyS+Gj3fyVPAtZAkm3N
+ffCyi/chBIQQ3iqs3cQ0TZCERzbhngDocOS4z94wXTCmu2V45LuQW8hsSWpaP8v9sy+2IRZj
+ZTP5ububbp8Az4ly5W6QqJ33YwKSkIYbZVy5uNMFsOJGLaLTBMRC8Yy7bmR/OD8TUB00DvkW
+AcPSB7FIPoji0AGQBtU4jt+Fh1R6Dcc6B2Znv4HTHTiAJkfXv+ILFy5c8PACgtsiPj7qOgAA
+AAAASUVORK5CYII=
+
+--at6+YcpfzWZg/htY--
+
+--pY3vCvL1qV+PayAL
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGwLEl0ygDXYSIHxsRAuYxAKDQeRS40bRiW5jmrwHNsCDN67vu7wCfV0Pd
+7T/gCO7TrbuGaJ0BVsJnJsY=
+=Pjdg
+-----END PGP SIGNATURE-----
+
+--pY3vCvL1qV+PayAL--
diff --git a/rt/t/data/gnupg/emails/4-signed-inline-plain.txt b/rt/t/data/gnupg/emails/4-signed-inline-plain.txt
new file mode 100644
index 0000000..1dcecae
--- /dev/null
+++ b/rt/t/data/gnupg/emails/4-signed-inline-plain.txt
@@ -0,0 +1,24 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 3EDA537F80; Mon, 13 Aug 2007 15:34:17 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:34:17 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:4
+Message-ID: <20070813193417.GD6392@mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-signed
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+This is a test email with inline signature.
+ID:4
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGwLI50ygDXYSIHxsRAp40AJ9ErYdLH2SVRXtgRtx7n/FVFOmKDwCgl/0T
+BeRSaF4Xbi8uGhVIkmU+YCs=
+=e4u6
+-----END PGP SIGNATURE-----
diff --git a/rt/t/data/gnupg/emails/5-signed-inline-with-attachment.txt b/rt/t/data/gnupg/emails/5-signed-inline-with-attachment.txt
new file mode 100644
index 0000000..638f0fd
--- /dev/null
+++ b/rt/t/data/gnupg/emails/5-signed-inline-with-attachment.txt
@@ -0,0 +1,48 @@
+Message-ID: <46BCDA81.3030308@mit.edu>
+Date: Fri, 10 Aug 2007 17:37:05 -0400
+From: Christian Ternus <ternus@mit.edu>
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To: rt-recipient@example.com
+Subject: Test Email ID:5
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------010302000403000103080306"
+
+This is a multi-part message in MIME format.
+--------------010302000403000103080306
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 7bit
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+This is a test email with a text attachment and inline signature.
+ID:5
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGvNqA0ygDXYSIHxsRAuCHAKC0HnduLWqihY5wzGYDFGbFtA4chwCgr6+t
+mQo4oXIqu+kIZ0ExWyiUENs=
+=3ABp
+-----END PGP SIGNATURE-----
+
+--------------010302000403000103080306
+Content-Type: text/plain;
+ name="text-attachment"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline;
+ filename="text-attachment"
+
+This is a test attachment. The magic word is: zanzibar.
+
+--------------010302000403000103080306
+Content-Type: application/octet-stream;
+ name="text-attachment.sig"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="text-attachment.sig"
+
+iD8DBQBGvNqB0ygDXYSIHxsRAmkbAJ0esGNEDMr01u45ZHIIKZpCFSE8tgCfXBedq0Yu5mnZ
+zOZyASZYUIf9wSE=
+--------------010302000403000103080306--
diff --git a/rt/t/data/gnupg/emails/6-signed-inline-with-binary.txt b/rt/t/data/gnupg/emails/6-signed-inline-with-binary.txt
new file mode 100644
index 0000000..2c725aa
--- /dev/null
+++ b/rt/t/data/gnupg/emails/6-signed-inline-with-binary.txt
@@ -0,0 +1,55 @@
+Message-ID: <46BCDAE6.4090803@mit.edu>
+Date: Fri, 10 Aug 2007 17:38:46 -0400
+From: Christian Ternus <ternus@mit.edu>
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To: rt-recipient@example.com
+Subject: Test Email ID:6
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+ protocol="application/pgp-signature";
+ boundary="------------enigAEEA002E4229CA8E5445ED73"
+
+This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
+--------------enigAEEA002E4229CA8E5445ED73
+Content-Type: multipart/mixed;
+ boundary="------------000104020205010403010301"
+
+This is a multi-part message in MIME format.
+--------------000104020205010403010301
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: quoted-printable
+
+This is a email signed inline with a binary attachment.
+ID:6
+
+--------------000104020205010403010301
+Content-Type: image/png;
+ name="favicon.png"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename="favicon.png"
+
+iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t/AAAB
+BElEQVR42u1WWw6DMAwz0+5FbzbvZuZk2cfUritpea77wVIRIBQ7dhsBdIQkM8AMMJImyW6d
+BXweyJ7UAMnUvQFGwHp2bizIJfUTUHZO8j/k1pt8lntvchbdH8ndtqyS+Gj3fyVPAtZAkm3N
+ffCyi/chBIQQ3iqs3cQ0TZCERzbhngDocOS4z94wXTCmu2V45LuQW8hsSWpaP8v9sy+2IRZj
+ZTP5ububbp8Az4ly5W6QqJ33YwKSkIYbZVy5uNMFsOJGLaLTBMRC8Yy7bmR/OD8TUB00DvkW
+AcPSB7FIPoji0AGQBtU4jt+Fh1R6Dcc6B2Znv4HTHTiAJkfXv+ILFy5c8PACgtsiPj7qOgAA
+AAAASUVORK5CYII=
+--------------000104020205010403010301--
+
+--------------enigAEEA002E4229CA8E5445ED73
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: OpenPGP digital signature
+Content-Disposition: attachment; filename="signature.asc"
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGvNrm0ygDXYSIHxsRAvwSAKC4d3U6SjfhYpUHu2V/vXtgxGFa1QCfeK6p
+dyDDlvlqP9Ns4EExvHXfHuY=
+=sX3V
+-----END PGP SIGNATURE-----
+
+--------------enigAEEA002E4229CA8E5445ED73--
diff --git a/rt/t/data/gnupg/emails/7-encrypted-MIME-plain.txt b/rt/t/data/gnupg/emails/7-encrypted-MIME-plain.txt
new file mode 100644
index 0000000..11e3b7c
--- /dev/null
+++ b/rt/t/data/gnupg/emails/7-encrypted-MIME-plain.txt
@@ -0,0 +1,47 @@
+Received: by anduril (Postfix, from userid 1000)
+ id CEA9137F51; Fri, 10 Aug 2007 15:27:49 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:27:49 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:7
+Message-ID: <20070810192749.GA5572@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="YiEDa0DAkWCtVeE4"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--YiEDa0DAkWCtVeE4
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--YiEDa0DAkWCtVeE4
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf9FtBMrkLWUKK5BtwuUsYXV9Mbe/YkkmK61MuysAtLcX/M
+DiXPzngjL62Dr9l88R3imf2kPmY36yx5WNeXUrFFVmFPaeZrHEJiMNvPGVVQCqRK
+uar2vsYRK9th4msZnn0hBYnA8+8kZ8rWefWHpszOcJ1YZpyyEMLf8Vnstyf0Pebp
+Wxixr99+mn3MVH38CrhoErI6CMiCFJgPAl5wtGWd0lT3+657dLJCsNI0cT3AY/JC
+IJwWD2sdOXOzDo7tdC3l7/YuGsXvd4jGu4A8PdoBMOgPx/N4KT3+uPhp2sRD3PMg
+LU59613xT8/FOYxQSib9hGqNZPqXS3ryC3ZvY4Sp8AgApCMocKsN7vm8N+6Yh7Nc
+Jjy/kuf8tjuTTs32Yk0ACU3y2SFXKSBZo6cVXgJhUvmG2Dq4O/A8mtP0cjqeBFqp
++vZOb7xhtxxTE6HWWThvx5qxcwjpijzDMS9uzfGaHwLvewdGVLODCup06MJmeAmj
+N1WEZqc/cqFZvZ9omCpcvTGoELpOzcUY1MxAq1IVkMzAk7dPIHYuyPSFQK6Y8IPl
+xsfSMcq9gjth8qautnriB0ohwkUebGnxgM4CjGjnSmLmUFXkndUOXKbM7R7E3QdL
++6TKMr2pvLl8U3OJrCiyyPVyVi3in4TYi4uegXJl05CAEjEXRf5RFhaWRnn66EYN
+WdLAAQHpkESfESVUaWvJwI+JB+LMBoKZjWgvIQ7AQKqLAvIsAqs9PKM4mYOMaawl
+en9XNRkW0dSGUxjW4K8u7fLS/xzWrZeCrafEkvCowVv/nR+Wxm296bxX+7z2R52/
+j+J0zms1fRdVxEs+rOI6JuXg4xWxUdLTav7cqvQ5c/izM+jU4yWEa3y0fHma6Jeh
+o4+1NerQby8Yzxszh9XVfkbYnQilhP8qCVxYe4HGjKlNi5v/xOgCznCKsqkGYMPU
+S32K6lg=
+=xeKr
+-----END PGP MESSAGE-----
+
+--YiEDa0DAkWCtVeE4--
diff --git a/rt/t/data/gnupg/emails/8-encrypted-MIME-with-attachment.txt b/rt/t/data/gnupg/emails/8-encrypted-MIME-with-attachment.txt
new file mode 100644
index 0000000..3781a62
--- /dev/null
+++ b/rt/t/data/gnupg/emails/8-encrypted-MIME-with-attachment.txt
@@ -0,0 +1,49 @@
+Received: by anduril (Postfix, from userid 1000)
+ id C962637F57; Fri, 10 Aug 2007 15:39:14 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:39:14 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:8
+Message-ID: <20070810193914.GC5572@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="FFoLq8A0u+X9iRU8"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--FFoLq8A0u+X9iRU8
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--FFoLq8A0u+X9iRU8
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgA4dZa3t55kB5pY4Q7+h4thTJVZ+wV2QxI5wZFRvMs7yw3
+MEIWqHusoe7R2zeXLxaT0gMSQj3osO+GrGJRDk4qCGjcjSneFmYKkELx8KRML59N
+X7/HeX7v8nSGpyqM5foaky38uAGxj2xBpswfvsY8qdQ37a4mNH2atESnkxYLomZb
+4vTRTSE1XtvhaG7oHaXxfmeNln0JezfbfpDGTktZJOupEX99j6/bvloimXyBT6SZ
+3wbcP/EYoqC8DQOQTtFTAisWwveTVp6FDFvi5L2BCJ2NzYZSDOBNeXrzf1AJ04dN
+9lTzbtejdE/AgwDclDnZYZByiGLM43X6nTk7c9gH1AgAlrxxvO1yz4sZchGM2rrn
+yzNJpcvcgbJLTt54gqie/BdQHSnvlCBLZzplx2xV9HIwJB7Kf29Ka2gg2p6mjyID
+YUd1451K1hDUmBHgya8jb6g2c6bBxiusUODlGfmv+c+kq/yG0tKws5d0/IGanL+Z
+h7XkcEYq3its0acCbcKizgzLSmxSqu6NK7rnDvioUOHHKG8uC9fk2JetdTdYOTBn
+AWYDxa3D+kRvOAiOWGMqtvOWAC1BZJ8hssBpesuG1+sucTh7W4ZROtQfEbqC8W51
+s6e17x1YUqE8QIs/aUYkUkX2JqObKsZPJAiVYCQkqJceIk/lT4rXNOfUwl5dAynk
+WNLAZQGKuVghSfSoRyKbFMRDimigisWN2JUudaV0Ld6E/5iO7EP7XhjqkzTlwsaN
+wui2n0Omxye2dNVMKz3q76fVp79XbznaI1ckeVjiiDmkiaQOp1Au/Sx2Bj0/wolJ
+OXnp27oqc9THy3RANLRXIQuRaYOyoxUIjVvhbOVfM3U7MlcAW3jT2kMTI7H83HWc
+ezxKfqM7nJUKkIVmRY4J/6X4uo5c8DdIxLeG+ioj+3I7BRkLfIAPYDGaeB5+BD1k
+EPcVGd3u1EW7D8f5CRARnU8aaC8DCPk5YYN6wM9JY9n0FEgIkwoniTpqHLs/UMa8
+DWGer1UCGp4qElmHvWHVV8b82nw6Ta2BhWKjA9pphf96KOTt3y4jqxfU4GbrOYDJ
+786/cggItsc0
+=qJrM
+-----END PGP MESSAGE-----
+
+--FFoLq8A0u+X9iRU8--
diff --git a/rt/t/data/gnupg/emails/9-encrypted-MIME-with-binary.txt b/rt/t/data/gnupg/emails/9-encrypted-MIME-with-binary.txt
new file mode 100644
index 0000000..cafc880
--- /dev/null
+++ b/rt/t/data/gnupg/emails/9-encrypted-MIME-with-binary.txt
@@ -0,0 +1,57 @@
+Received: by anduril (Postfix, from userid 1000)
+ id 215C737F5D; Fri, 10 Aug 2007 15:46:27 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:46:27 -0400
+To: rt-recipient@example.com
+Subject: Test Email ID:9
+Message-ID: <20070810194627.GA5815@mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="GID0FwUMdk1T2AWN"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: ternus@mit.edu (Christian Ternus)
+
+
+--GID0FwUMdk1T2AWN
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--GID0FwUMdk1T2AWN
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAqwVRwpeOIRMvrgswuYagJfk57HvSvrAg7tVzXHaHW5LI
+zJeWpKg0PVwmJUYTG9cZN0gkfpr33SULruvniZRSX650E/vv9H03P1dVYhBbcP01
+AyfPoaySinipoqG5OK7aTJVEnPZqqsCKgzFbqEg+FdF3YjNVa1etfmKV/JvoXTxR
+il6pOqv+xUJ66GpPUoP7mCZJ/cJEF1zz/EbZoYcS9MgxoP42bOIYBhyqIv3fUh7X
+fuDpup5xnJwM3FRjkNQPlqKhgGHCgk04OGgLUw8wzRwYQ5jSyij45J/UcGoNWePi
+eVTZignbYIfrlwa5GH6776U9QA9ei7PFP3RqO2CB2Af6AiIdkeN9MfPFfiQ/ASwR
+/zePg+OOmKC6locoUHWTEuBCZhgty7XarfPZufBHlA3Z3f369Pxz9nMV07KkO22t
+thhltpsxan2pFZL4oPfwA9OdDRGeWIISn4jGc+foNfKTmERY7EZv9ruDC0lxaSvs
+HEWJC38sJ3xGdlS439qaddSbm0Lft8JbNwi6FEpThE4abBdITu+BxbkoFrjIy6aC
+UJgyJ3YtPTpU8JuT49Ocn+51YPXZTSc/ePnvlzSqRXHeJrOKp5Oyoa9001242MRM
+mpaC1lw/sfGIIAXv5t2B569RXDsZ2jIvPjFIleIdyKOG17m8qsP82nWKbN2N96am
+p9LpAb5gqid4Hw1PjjjCB0A9w7G9orQeEQuF+2V9MGWAEWOHoVbGWTRjfh4uXASz
+4PlazbNDIZZB09ACaDfxG3Y3/TI2X0sl9KJNRALFtHm4+DNbWVeWe+aKrG9ZY9Os
+xjD/UQFFQrchpNPD7xV98WWEg4+s8pkk9Mwv+Q/gNf2xBXJXDOhIm2LlY0VlhETq
+fk4YS3EUS78Ti4V99w/L9PTnoaZY/8kkI6NNjb+bqldhd9AQHXEkpV5Gh/PrsgFn
+FzBZxEwcY8wKP2yKMTp+A3rsjHwM4OChjtkDShf4KDwGS5D+E4o1RJVcM3jfh2SG
+RRKge5ewErBmIDIqeU8Wpj5cuyqS77CIB3aplSKLqUu2bC2EiLFZxs2UTg+cp5WK
+WFzt+YmH6/p0y9eyaAGOleSh3dnIZHv2BDtzF9x5fHFesjaVp3jpmMsHQ1ol53TR
+8N4fUuO140oE0Gnci61EXzLjkGCSBhzZqy/+K8PR0d1hGv+vlwfadpzsPfX8WcxZ
+DBuI1E7OcqVaXemR90/C2AbLB8qGuwQ+wTIHPqXlm8s0+6wZ4YUcUoa/F+2VLSxN
+VWGji1yioKrSaBjlBBUpHfoC/Q/0hLk2FgIrAZFIPvhHl9nF3Vq/HqlxtGZQ7gnL
+TjQtRuI+oU7IhJRR1VZbhr8xn1pirueiiwJUPub6w4XfMGyvcvlIOVpUImW5Hab7
+kg20iwrcJNLCcPJsR5iEbhJBBHLsViMtfdRbstlEV8I4wTY2tNAkfMtUtWdUhwOA
+fdx/UmHjbNZFSS6cpsGHL8+QJ2Bo1urkHIz6z1w4f1vTL31NAPeyvZ4kNstSqkNt
+6fjdrt8mBRVGQfqRQsK2b/R61ErJoFULboeqOT/ed/Dufu2Wxf/wuuRvG77S8xoq
+OiDT8nhyHh7ljjdHZZ2uLro8gg==
+=BIke
+-----END PGP MESSAGE-----
+
+--GID0FwUMdk1T2AWN--
diff --git a/rt/t/data/gnupg/emails/README b/rt/t/data/gnupg/emails/README
new file mode 100644
index 0000000..634f537
--- /dev/null
+++ b/rt/t/data/gnupg/emails/README
@@ -0,0 +1,28 @@
+Set of emails signed and/or encrypted using real MUAs(mutt, thunderbird).
+
+All messages have subejct 'Test Email ID:\d+'.
+ID matches number in name of the corresponding file.
+Top most entity of a message as well contains 'ID:\d+' text.
+
+Emails may have either text plain or binary attachment.
+Text of plain attachment is
+"This is a test attachment. The magic word is: zanzibar."
+
+Content of binary attachment is RT's favicon.png.
+
+Encrypted messages encrypted for rt-recipient@example.com.
+
+Messages signed using rt-test@example.com key.
+
+Name of a file may contain the following parts separated by dash:
+* signed
+* encrypted
+* MIME - RFC format
+* inline - inline format
+* with-attachment - text plain attachment
+* with-binary - binary attachment
+
+In total 18 emails using all possible combinations.
+18 = 3 (signed/encrypted/both) * 2 (MIME/inline)
+ * 3 (no/text/binary)
+
diff --git a/rt/t/data/gnupg/keyrings/pubring.gpg b/rt/t/data/gnupg/keyrings/pubring.gpg
new file mode 100644
index 0000000..f993bf2
--- /dev/null
+++ b/rt/t/data/gnupg/keyrings/pubring.gpg
Binary files differ
diff --git a/rt/t/data/gnupg/keyrings/secring.gpg b/rt/t/data/gnupg/keyrings/secring.gpg
new file mode 100644
index 0000000..eda64ae
--- /dev/null
+++ b/rt/t/data/gnupg/keyrings/secring.gpg
Binary files differ
diff --git a/rt/t/data/gnupg/keyrings/signed_old_style_with_attachment.eml b/rt/t/data/gnupg/keyrings/signed_old_style_with_attachment.eml
new file mode 100644
index 0000000..0bae0d4
--- /dev/null
+++ b/rt/t/data/gnupg/keyrings/signed_old_style_with_attachment.eml
@@ -0,0 +1,48 @@
+Message-ID: <45A10003.1090705@bestpractical.com>
+Date: Sun, 07 Jan 2007 17:13:23 +0300
+From: "Ruslan U. Zakirov" <ruz@bestpractical.com>
+User-Agent: Thunderbird 1.5.0.9 (X11/20061221)
+MIME-Version: 1.0
+To: rt@example.com
+Subject: test
+X-Enigmail-Version: 0.94.1.0
+Content-Type: multipart/mixed;
+ boundary="------------030903040907010006050500"
+
+This is a multi-part message in MIME format.
+--------------030903040907010006050500
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
+
+iD8DBQFFoQADtaRiGUNF96URAmHSAKCDdVnRJ2gb1idhE1ZXEg1JARalsQCgkaU8
+74cnNxVyp/0XwBA73qzkvx0=
+=UmxP
+-----END PGP SIGNATURE-----
+
+--------------030903040907010006050500
+Content-Type: text/plain;
+ name="test.txt"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename="test.txt"
+
+YXR0YWNobWVudAo=
+--------------030903040907010006050500
+Content-Type: application/pgp-signature;
+ name="test.txt.sig"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename="test.txt.sig"
+
+iD8DBQBFoQADtaRiGUNF96URAqmBAJ42zyr06nK6R4dNpZD5067DNDgjRwCgkR+SKgz7OdAq
+p11D7PQGCR1Wuvg=
+--------------030903040907010006050500--
diff --git a/rt/t/data/gnupg/keyrings/trustdb.gpg b/rt/t/data/gnupg/keyrings/trustdb.gpg
new file mode 100644
index 0000000..9f2ae63
--- /dev/null
+++ b/rt/t/data/gnupg/keyrings/trustdb.gpg
Binary files differ
diff --git a/rt/t/data/gnupg/keys/general-at-example.com.2.public.key b/rt/t/data/gnupg/keys/general-at-example.com.2.public.key
new file mode 100644
index 0000000..04fbe96
--- /dev/null
+++ b/rt/t/data/gnupg/keys/general-at-example.com.2.public.key
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.7 (Darwin)
+
+mQGiBEbgjJQRBACx8uMHcl9JlKCUU5yh0rBw636MXhKr7cH/+zBTeUVQyfs+J4fo
+HlI3fwJzZOxwXKTwmXsHSKxomeBJxPpFCnwHvn7xTYh6Wtis1Rm2Vr4lsw4gxrFj
+bpk1ISkHo4tO3dPTNx6Jhz+gYzoVUyfclz/byUmEbe2HJkBCQNmC9/lcuwCg477S
+siOdObqTKtQhDqXzFfOHKmsEAKVB8RImtLAO/HPY5+rxiVkfKjsmZovi0PfioGDI
+3o1jcSwq/RwWPZTNB0vnlEx1aD3zedUn1T7ZPnKoRttIv0xYlg9wYhX/xvOA9mKy
+G5aXSypiJiNwJSQfcChlyVHX3R88pURIzPiwWv2OBOvRagE8Bmgz0DFa0/AQfmvI
+vpUmA/4qZVzOJ5hC6fVP+ESKEC6fStvHAEZM3sQK5AnZsuUls3+tgfkD9T6ei5YF
+MXDLMGz3thue1M0QEu3IL7cLoTMalWQpjpyDuqXS8UAsd5cG2eP2iA6Uf2VoKQ11
+w6Q1FyMwTC9B0F8JijwdLF77ERSCtIG+TOA1EtH9HfTV5+BfHbQfZ2VuZXJhbCAy
+IDxnZW5lcmFsQGV4YW1wbGUuY29tPohgBBMRAgAgBQJG4IyUAhsDBgsJCAcDAgQV
+AggDBBYCAwECHgECF4AACgkQ32UfoGMsT1De7QCgu2Gws7EHllWWhJC9mHgDHC45
+Z8YAn2mBLO7ZBi5lptavTfQlR05RvTSKuQINBEbgjJQQCAD55mgtF494BvjhumUE
+Zu15W9QL99772EntAHnGd6tx6r2GlqWmIHrze/jguIdyXqVGEVWAosDAu08vF1EC
+DDJoCz/tkyjhXOT4MBKWL0Gpetk61Pi2Qv0GsxQSYG+FwKjTk+pE4qxnT932n3U8
+7KxUtgIxzH7Y/oFxgb0LGQxgokSPuq/E+jtglYxey9fzeFWjr2T77g5oWu9PXPCF
+jg+km3f9rQxxRgDuM4bPr5tWjhLTpNB0xKZMbx6YUVUP/DyK/DhqaMZ5Qt1vZ0QI
+/COSPy9Kq76wR1WW6E0SDFU49xAbtMm2MZgDh5uj/lFp95yDGmBSZzwxY0qy/BbN
+c4HDAAMFCADbiPty42xieGtEtQdvjqejEsE15Zhna+zf/4Fch/Ee9laOmtW9Nekg
+2ltUMHw+Nc5VseWIKtFqlnOZtcutO6yYgVH+GJ287gnXw3gK8zEcbQ2RUxYEdiuw
+ORuMqowmVlOCFxgPW6Vv5Em8E3kb1dEMx+Ec/SVmeXpOcGV5kS9PS9veO3ruoXqx
+6l3Gq3BU3xvDhJ3FRRlsUYtGOBuJl0/oXk/1TUjAuQinsxM+Nh4VljeI3eiT2Ygb
+ypdXjH6zmTDy7PlEy5RDYdFOsKW1sZXKWoY6y2TU4IO9JBWehS8Lhn3pMTv65FME
+6Ow9W5+hLTBYo9E/kUZXWvPlJgGA1439iEkEGBECAAkFAkbgjJQCGwwACgkQ32Uf
+oGMsT1BE+gCeOni/yGg3+IIPpIoTCVsf8jUcJXgAn3nsf/TTUli9XyftXRiJbua9
+CM0m
+=bGLz
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/general-at-example.com.2.secret.key b/rt/t/data/gnupg/keys/general-at-example.com.2.secret.key
new file mode 100644
index 0000000..6a8510e
--- /dev/null
+++ b/rt/t/data/gnupg/keys/general-at-example.com.2.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.7 (Darwin)
+
+lQHhBEbgjJQRBACx8uMHcl9JlKCUU5yh0rBw636MXhKr7cH/+zBTeUVQyfs+J4fo
+HlI3fwJzZOxwXKTwmXsHSKxomeBJxPpFCnwHvn7xTYh6Wtis1Rm2Vr4lsw4gxrFj
+bpk1ISkHo4tO3dPTNx6Jhz+gYzoVUyfclz/byUmEbe2HJkBCQNmC9/lcuwCg477S
+siOdObqTKtQhDqXzFfOHKmsEAKVB8RImtLAO/HPY5+rxiVkfKjsmZovi0PfioGDI
+3o1jcSwq/RwWPZTNB0vnlEx1aD3zedUn1T7ZPnKoRttIv0xYlg9wYhX/xvOA9mKy
+G5aXSypiJiNwJSQfcChlyVHX3R88pURIzPiwWv2OBOvRagE8Bmgz0DFa0/AQfmvI
+vpUmA/4qZVzOJ5hC6fVP+ESKEC6fStvHAEZM3sQK5AnZsuUls3+tgfkD9T6ei5YF
+MXDLMGz3thue1M0QEu3IL7cLoTMalWQpjpyDuqXS8UAsd5cG2eP2iA6Uf2VoKQ11
+w6Q1FyMwTC9B0F8JijwdLF77ERSCtIG+TOA1EtH9HfTV5+BfHf4DAwJaviEcavOA
+YWAyNs+6FnvZb5JMpdZWxKrmidVFbPUx7sHk2vEW0UTzcnqnlxmoJ/tKeWwiNl1j
+ztCVFbQfZ2VuZXJhbCAyIDxnZW5lcmFsQGV4YW1wbGUuY29tPohgBBMRAgAgBQJG
+4IyUAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ32UfoGMsT1De7QCgu2Gw
+s7EHllWWhJC9mHgDHC45Z8YAn2mBLO7ZBi5lptavTfQlR05RvTSKnQJjBEbgjJQQ
+CAD55mgtF494BvjhumUEZu15W9QL99772EntAHnGd6tx6r2GlqWmIHrze/jguIdy
+XqVGEVWAosDAu08vF1ECDDJoCz/tkyjhXOT4MBKWL0Gpetk61Pi2Qv0GsxQSYG+F
+wKjTk+pE4qxnT932n3U87KxUtgIxzH7Y/oFxgb0LGQxgokSPuq/E+jtglYxey9fz
+eFWjr2T77g5oWu9PXPCFjg+km3f9rQxxRgDuM4bPr5tWjhLTpNB0xKZMbx6YUVUP
+/DyK/DhqaMZ5Qt1vZ0QI/COSPy9Kq76wR1WW6E0SDFU49xAbtMm2MZgDh5uj/lFp
+95yDGmBSZzwxY0qy/BbNc4HDAAMFCADbiPty42xieGtEtQdvjqejEsE15Zhna+zf
+/4Fch/Ee9laOmtW9Nekg2ltUMHw+Nc5VseWIKtFqlnOZtcutO6yYgVH+GJ287gnX
+w3gK8zEcbQ2RUxYEdiuwORuMqowmVlOCFxgPW6Vv5Em8E3kb1dEMx+Ec/SVmeXpO
+cGV5kS9PS9veO3ruoXqx6l3Gq3BU3xvDhJ3FRRlsUYtGOBuJl0/oXk/1TUjAuQin
+sxM+Nh4VljeI3eiT2YgbypdXjH6zmTDy7PlEy5RDYdFOsKW1sZXKWoY6y2TU4IO9
+JBWehS8Lhn3pMTv65FME6Ow9W5+hLTBYo9E/kUZXWvPlJgGA1439/gMDAlq+IRxq
+84BhYLhZWMP6gRz3MuuJr0YX10x+bx3/96Wkh505MRMLqefr0J8WgzjIJS1aIUqA
+nusWttcVsQZS3ZHIZk/tp5dq54CICn09Rl+UNySISQQYEQIACQUCRuCMlAIbDAAK
+CRDfZR+gYyxPUET6AJwNpkgxKEdjvIbdB7Y+IPgA1wyt+ACdGc0py11j1RLa2gn0
+1+nPnBIS7R8=
+=oSXs
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/general-at-example.com.public.key b/rt/t/data/gnupg/keys/general-at-example.com.public.key
new file mode 100644
index 0000000..c274c8d
--- /dev/null
+++ b/rt/t/data/gnupg/keys/general-at-example.com.public.key
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.7 (Darwin)
+
+mQGiBEYrdhQRBACpTwAjSJchxV9rgWJj/4GUe92xZ2wWHVrkv7cELO5GD1ie8wtA
+nh57oXfcFhuSmtLTyT/C1Mbzo/tz4Sigf33bZlEMXusp0bLsSz1S/5mslBGRdApJ
+Dz5jETEcakpzWsHA5sHfv8HLn+o8WUDtlGZf+Edi0DqUKSiLRkjWMAdcJwCg7cN1
+IIhhFFAf9Lr3Ny7ngJDwn/sEAJoZVUmhBHo9TipR9lZY1si5U0hA8Yn4XghLp4z9
+0rm8dAgLSZwFI2/zoU5u9qjW0UAo8Sp2SO9F03wQpfUGnpQtea/HVNuwiZVU42bB
+E5gn5EIYrHYT8X7cd+ZpWVGYu2117uoJtRHwnfuh857ocs7M7xeo7IQUZArqeHOG
+i3hABACV9mqnZoPyCOtaBogdXtDlEbqDvYclONJTsSKAfPsNRjJi8lzvJL9ZhtS8
+YKIUvxFu+XX0UVXWoNnzte8Ip/0hwupJu9jIcBJpI9dVEK3H2tWr+NElzML/uch+
+VO7UUmk2H/hF8+a3wXkdEN45FnJCyqC0Kk59OcY3bJIrI56SZrQdZ2VuZXJhbCA8
+Z2VuZXJhbEBleGFtcGxlLmNvbT6IYAQTEQIAIAUCRit2FAIbAwYLCQgHAwIEFQII
+AwQWAgMBAh4BAheAAAoJEJ+mYsBt4i/CNxwAoMEYt4mJlH9rCoqc8kkaE2qJslG+
+AJ9plkUk5LWv7ncWcrUpMxVo5J3Eh7kCDQRGK3YwEAgAqxHhoyoViGJsImMKG2XQ
+wxHIBJc21zaLwG8MAn6xNXIZRDrjlgy0ItteGB0Hs1VqibE70fwZ9q5O/Ev32M/s
+fxtEgJMyfZzOVPMxY0AZu7sUdsfDiTqV/0FwKMjGM1aV2ulqaVZLJr4hpdxjgynf
+TUqtkJjYtUMAwMcsee/ORnyuSBGcaG3SjWyOyrI+oDm4e2QZ/jGmINP4b3PHJu9C
+JXq3dR/vJGlYxr9uApaXHjVksa5+uPA6iqjyCoRo/Sv+V3SANSOYJYI9tnKFHuLM
+YAqwOufWNnvHjb2zS0hCAJJ6p0CMcBhmaNieXcOgmt8MIJe/b5W4ItfgS/2D+yI/
+iwADBQf+ISTkh2pY2QExXtGmhjO1LSxB/sO5n0zJOkQvf/I5aOgWxXDP8dYcc9mp
+2sV5okB+S4Dol/ppGaxas+kisdwTNja12Er21Lrm6CGfyqp214EKZcM44KmIb1HA
+utLlujBJsWgf6LDggH4s785GKzwtA9NHfiWeWkXWGXrGFsFK6OWDcdSH0GcHus2F
+9FHLyOh5jpkd4Xczx5lEAn1wvUhQtRn9bBU7FLGUind352vbKegeFjUvhGCLp+YF
+IxSB2OXeVdzUbMjiUM0zJu3VNDsq9IP5EBvV3cwixuOF/XzYiDIPqezDDU9P5H2R
+d1IQBgMIPl9WXAFRkCIJUnsmvQOINIhJBBgRAgAJBQJGK3YwAhsMAAoJEJ+mYsBt
+4i/CEuwAn1QHO3umF9MHhpWQIBaacJUfBboqAKCYPpflpFvDNn0ioLA7Dw5qVSix
+5A==
+=CF0O
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/general-at-example.com.secret.key b/rt/t/data/gnupg/keys/general-at-example.com.secret.key
new file mode 100644
index 0000000..36f9ba3
--- /dev/null
+++ b/rt/t/data/gnupg/keys/general-at-example.com.secret.key
@@ -0,0 +1,31 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.7 (Darwin)
+
+lQG7BEYrdhQRBACpTwAjSJchxV9rgWJj/4GUe92xZ2wWHVrkv7cELO5GD1ie8wtA
+nh57oXfcFhuSmtLTyT/C1Mbzo/tz4Sigf33bZlEMXusp0bLsSz1S/5mslBGRdApJ
+Dz5jETEcakpzWsHA5sHfv8HLn+o8WUDtlGZf+Edi0DqUKSiLRkjWMAdcJwCg7cN1
+IIhhFFAf9Lr3Ny7ngJDwn/sEAJoZVUmhBHo9TipR9lZY1si5U0hA8Yn4XghLp4z9
+0rm8dAgLSZwFI2/zoU5u9qjW0UAo8Sp2SO9F03wQpfUGnpQtea/HVNuwiZVU42bB
+E5gn5EIYrHYT8X7cd+ZpWVGYu2117uoJtRHwnfuh857ocs7M7xeo7IQUZArqeHOG
+i3hABACV9mqnZoPyCOtaBogdXtDlEbqDvYclONJTsSKAfPsNRjJi8lzvJL9ZhtS8
+YKIUvxFu+XX0UVXWoNnzte8Ip/0hwupJu9jIcBJpI9dVEK3H2tWr+NElzML/uch+
+VO7UUmk2H/hF8+a3wXkdEN45FnJCyqC0Kk59OcY3bJIrI56SZgAAn2a5NRggeMB1
+vXJiR6c1NjYO2+hHCRC0HWdlbmVyYWwgPGdlbmVyYWxAZXhhbXBsZS5jb20+iGAE
+ExECACAFAkYrdhQCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCfpmLAbeIv
+wjccAKDBGLeJiZR/awqKnPJJGhNqibJRvgCfaZZFJOS1r+53FnK1KTMVaOSdxIed
+Aj0ERit2MBAIAKsR4aMqFYhibCJjChtl0MMRyASXNtc2i8BvDAJ+sTVyGUQ645YM
+tCLbXhgdB7NVaomxO9H8GfauTvxL99jP7H8bRICTMn2czlTzMWNAGbu7FHbHw4k6
+lf9BcCjIxjNWldrpamlWSya+IaXcY4Mp301KrZCY2LVDAMDHLHnvzkZ8rkgRnGht
+0o1sjsqyPqA5uHtkGf4xpiDT+G9zxybvQiV6t3Uf7yRpWMa/bgKWlx41ZLGufrjw
+Ooqo8gqEaP0r/ld0gDUjmCWCPbZyhR7izGAKsDrn1jZ7x429s0tIQgCSeqdAjHAY
+ZmjYnl3DoJrfDCCXv2+VuCLX4Ev9g/siP4sAAwUH/iEk5IdqWNkBMV7RpoYztS0s
+Qf7DuZ9MyTpEL3/yOWjoFsVwz/HWHHPZqdrFeaJAfkuA6Jf6aRmsWrPpIrHcEzY2
+tdhK9tS65ughn8qqdteBCmXDOOCpiG9RwLrS5bowSbFoH+iw4IB+LO/ORis8LQPT
+R34lnlpF1hl6xhbBSujlg3HUh9BnB7rNhfRRy8joeY6ZHeF3M8eZRAJ9cL1IULUZ
+/WwVOxSxlIp3d+dr2ynoHhY1L4Rgi6fmBSMUgdjl3lXc1GzI4lDNMybt1TQ7KvSD
++RAb1d3MIsbjhf182IgyD6nsww1PT+R9kXdSEAYDCD5fVlwBUZAiCVJ7Jr0DiDQA
+AVQKdEMomLc49M9nDgc3mQkmkS1Ce0xI+BBEf0LhdiUYRU9mclN7HkCj3fl8EUCI
+SQQYEQIACQUCRit2MAIbDAAKCRCfpmLAbeIvwhLsAKCoZAIqS3Bp2WndQqZJvHBS
+u4f0VACgslT4IpJF1BdbMvA+oyvYVgv3g/c=
+=linj
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/recipient-at-example.com.public.key b/rt/t/data/gnupg/keys/recipient-at-example.com.public.key
new file mode 100644
index 0000000..3d3032f
--- /dev/null
+++ b/rt/t/data/gnupg/keys/recipient-at-example.com.public.key
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.7 (Darwin)
+
+mQGiBEWOOBARBAClfdK23heqW39sO3K0p+KtZkDxWhgpjjRfMSWQWwY++eDFhDr5
+BGG3zxsB2R8MOaHVKetuDjWjmfDi/LvDR8br8+eaLt94F4PBcLa+vVjboYyjvTFs
+2t3leyXjNd+mBTZmUcY6WLM0E+biIJdlDhVOv95n8VwvT10R0J/mGO7hTwCg20NC
+vJJ/fpWzPItFfKHnKg3gO3MD/RhG6CxmsZs+1bdzY07UwABQG8NhoR5Veqg2+uBr
+xiYjemtC+8fAtthEojJ334BE7qDuXEO7eq1R+JOtEj/Hx8gtgWQfDNZlgLA4NUSc
+aU3PthtXD4CnY5MsTrxjpD+bjTde6ziEJ3RHPQQSq2S1fKqo5Bf6H7GYWueRiSGS
+cNK2A/4/WAYFQbj9Jm7zgvPrLRRnk7RP3A4+ABaWEtGMRbpCaFEHd63gjYEH7P3i
+/O6y9kXsYr3SkDbhk6h1Cx8+4fjpZHAd4XbgabZhp5u7Nq3m/TIzQiXMYXrZGleB
+CGoQrERbM9mavEgOHGZEwO1I/JKSHdmAg/adTRAbG+AxZK79u7QhVGVzdCBVc2Vy
+IDxyZWNpcGllbnRAZXhhbXBsZS5jb20+iGAEExECACAFAkWOOBACGwMGCwkIBwMC
+BBUCCAMEFgIDAQIeAQIXgAAKCRBIVe2Ik+ud58m2AKCAO8NDxsU8m6ahhfwrPaQG
+O7MjQwCgtDn5aYx4G93pv5UKpGzkHKh2T1G5Ag0ERY44FBAIALAc3V9FsEK3pxdc
+ILYVjV85rrL58+hGcsgeNqF2TIgneJ3Dwi0zA82K1gchfvBT7Ab+A7WGi6E0rXnO
+s/rMoDV+5Qoac4M9hW1qb1seBt+0au72npIMSqF5V/4nZr4L21g6vE4/cgrLd3BK
+bA1hCDdIGeqG3Ljiy++RGnhIkiY+FGpNYYAI9bkXltC9BYtl5DBvMrpTqlDUfSzq
+rz3zZYaD30FUGbTTqfISU1RC4sY7aEmgFvB6vvia/s9XyldngPFwuTELCAG/JkFd
+ZvodkwlTdv/vIY0SFkHJSjmT2a797wuhxuaC17eWrQhfF0sxsZhJ1Ac3osrGQQvr
+8dZCd2cAAwUH/icHkxwmYKa7UPQZYexD4QsGS+rq7TbYzbSWcxz2l5J11/pHdD6m
+tdGbtEn5mQPjBnOI3GYwvtqbzG4WO5y5qssYoW22ZL9ov67QpJyKJILNLInWwiqx
+oRgB3Kgk5J5vDNw7CZLxrEvQNKE1gTEqfmQGUAiXipJ2VXbTWenPN6fDv5vdKesF
+dnDmk+jfjbL0/G8jUwt6vnQXMVZnIuxTMxs+4tTQfK1qh5iMdaC3wy15pg2wZoky
+OzjVEJywIQmqAA8lcvD0S/l4+JM6Epfx8gd9IjOVULUd2/TiPSvGM/gpJdop3bUc
+UmlWeF59Xx9uZPo7twDubKB6grMWOZwGgM2ISQQYEQIACQUCRY44FAIbDAAKCRBI
+Ve2Ik+ud5+EVAJ0TZHopcAmCANc26gPWWDfTaZovmQCcC5jl3o/yXvdaAhfbqKMr
+cts0+T8=
+=wrrX
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/recipient-at-example.com.secret.key b/rt/t/data/gnupg/keys/recipient-at-example.com.secret.key
new file mode 100644
index 0000000..620a432
--- /dev/null
+++ b/rt/t/data/gnupg/keys/recipient-at-example.com.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.7 (Darwin)
+
+lQHhBEWOOBARBAClfdK23heqW39sO3K0p+KtZkDxWhgpjjRfMSWQWwY++eDFhDr5
+BGG3zxsB2R8MOaHVKetuDjWjmfDi/LvDR8br8+eaLt94F4PBcLa+vVjboYyjvTFs
+2t3leyXjNd+mBTZmUcY6WLM0E+biIJdlDhVOv95n8VwvT10R0J/mGO7hTwCg20NC
+vJJ/fpWzPItFfKHnKg3gO3MD/RhG6CxmsZs+1bdzY07UwABQG8NhoR5Veqg2+uBr
+xiYjemtC+8fAtthEojJ334BE7qDuXEO7eq1R+JOtEj/Hx8gtgWQfDNZlgLA4NUSc
+aU3PthtXD4CnY5MsTrxjpD+bjTde6ziEJ3RHPQQSq2S1fKqo5Bf6H7GYWueRiSGS
+cNK2A/4/WAYFQbj9Jm7zgvPrLRRnk7RP3A4+ABaWEtGMRbpCaFEHd63gjYEH7P3i
+/O6y9kXsYr3SkDbhk6h1Cx8+4fjpZHAd4XbgabZhp5u7Nq3m/TIzQiXMYXrZGleB
+CGoQrERbM9mavEgOHGZEwO1I/JKSHdmAg/adTRAbG+AxZK79u/4DAwKKjpV+74Fq
+wGCggxQNXbWP1fy2s8C5f3k/jsyGcPyDv2qcVoo9f1cLdb6Alu3f6kSAGWpUink9
+dHErTbQhVGVzdCBVc2VyIDxyZWNpcGllbnRAZXhhbXBsZS5jb20+iGAEExECACAF
+AkWOOBACGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBIVe2Ik+ud58m2AKCA
+O8NDxsU8m6ahhfwrPaQGO7MjQwCgtDn5aYx4G93pv5UKpGzkHKh2T1GdAmMERY44
+FBAIALAc3V9FsEK3pxdcILYVjV85rrL58+hGcsgeNqF2TIgneJ3Dwi0zA82K1gch
+fvBT7Ab+A7WGi6E0rXnOs/rMoDV+5Qoac4M9hW1qb1seBt+0au72npIMSqF5V/4n
+Zr4L21g6vE4/cgrLd3BKbA1hCDdIGeqG3Ljiy++RGnhIkiY+FGpNYYAI9bkXltC9
+BYtl5DBvMrpTqlDUfSzqrz3zZYaD30FUGbTTqfISU1RC4sY7aEmgFvB6vvia/s9X
+yldngPFwuTELCAG/JkFdZvodkwlTdv/vIY0SFkHJSjmT2a797wuhxuaC17eWrQhf
+F0sxsZhJ1Ac3osrGQQvr8dZCd2cAAwUH/icHkxwmYKa7UPQZYexD4QsGS+rq7TbY
+zbSWcxz2l5J11/pHdD6mtdGbtEn5mQPjBnOI3GYwvtqbzG4WO5y5qssYoW22ZL9o
+v67QpJyKJILNLInWwiqxoRgB3Kgk5J5vDNw7CZLxrEvQNKE1gTEqfmQGUAiXipJ2
+VXbTWenPN6fDv5vdKesFdnDmk+jfjbL0/G8jUwt6vnQXMVZnIuxTMxs+4tTQfK1q
+h5iMdaC3wy15pg2wZokyOzjVEJywIQmqAA8lcvD0S/l4+JM6Epfx8gd9IjOVULUd
+2/TiPSvGM/gpJdop3bUcUmlWeF59Xx9uZPo7twDubKB6grMWOZwGgM3+AwMCio6V
+fu+BasBgNB3AutvANzxcWBPZSJFs3uN0m4ii+g7eu8fYaiIJO7GFk1WD5UORHs9w
+0C4JIqUj10yUzvnHBZ6DdkV2aZE9FZljLLpRs+iiwYhJBBgRAgAJBQJFjjgUAhsM
+AAoJEEhV7YiT653n4RUAoJd1DuGANpd7VGGwNfoMCCpAk/4TAKCrbh6NpoJr0Ab4
+1toDA5lM/EYYPw==
+=5O4y
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/rt-recipient-at-example.com.public.key b/rt/t/data/gnupg/keys/rt-recipient-at-example.com.public.key
new file mode 100644
index 0000000..9952c6f
--- /dev/null
+++ b/rt/t/data/gnupg/keys/rt-recipient-at-example.com.public.key
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.7 (GNU/Linux)
+
+mQGiBEa8u6QRBADCqPh8w3cO51hPVb1Sttqq5UhCeB5t2dAL8aVEDkpPfV7LItDi
+pN4VqHo2zbGE8q2bCoqW06Ogn0R4xsxEeD9Jq9/k3dHReFL2gbA5F/el1PKXVxG8
+62BnjLkDub8yCdWsg0QDJ6ah7LC7vukTMlJj+3HhoXWEqBrTBKjtFkNIrwCg/LtU
+CEyj+z/cl6NQGZUw2A6+5DUD/2DfcLeSir7xrlcidqO4BxtxdWkEBDAnmARKrqaw
+zSATIK11+HO3Gteovfa08J1XXU2+IFqi2Ssyaqss1kteJE8DmOAcllSXqmCfOmPm
+xoW4gXOQfEv6tkTvF9JST1OZRj5w+ecyxn0282XrzKcxNeLjc+JcLfzPmmuhw4lA
+s/nJA/4tBqT0V7QiwaznBo8Bh7N3sz75x0vgSdZLUA0e2VzHKh9mAfK/FeVS1mcJ
+04iHWvxOGMqEfXnpxUrogME7f/TWNBVfT4M2JW0sHLvaiJhTtIhn+Q67awQ1f0qG
+mGQLIo9OAWZnIfBZ8e2tBwJ3ajiSZ2LIPWFv4Q1hKxOclODpf7QmUlQgVXNlciBC
+b2IgPHJ0LXJlY2lwaWVudEBleGFtcGxlLmNvbT6IYAQTEQIAIAUCRry7pAIbAwYL
+CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEM4wxB7CJ0omPPUAoL3A7jiEZX6xSyXE
+duAtnmMplqHrAKDB8mrNols8/ni0VOv0QletwEwbVrkCDQRGvLuvEAgA/qDyDeDP
+FrDhh757tpgvJp2CmIx8fyv+i9nLEBVCZjtkLqgrcvtNh8l+xu3y8vjGB6+ToPvG
+ZE3FRxyLWNPGIlq1pQSREC9faEDWDrN7yA8miaikLIlfMnGwwzb5bEXWsmXzctTv
+DgxTCufDj8T66TKv+cCqc9T956XY6q49Z/p6yZDiY7LZ0N6GkHSoT8o6ZCOvl87n
+IjwKR8AXDWBxL5+SeenNkZ8e30pSVDJTOe4u6W/MKK3RBD0FKYr+DOMh5BQtE7yT
+QEhzmDTPfGe9m52FV8FbSLpimMnIFM2hGRf6jynoR10s0tk2DVADXDycwNYarRYG
+AxV6XafLCPDv4wADBQgAtpM7zhVch/NsL56aIG0QZmSaKCdk6UPsJua91eLEHJFo
+zOzethsAWED5KHD5ThsYBKPGq+mFz7QQtw8/DBmcajtBxMv2fvVOE7SrWfeHyMVl
+RgidJc3O6HlPPnA/v8lQhsYTxpUddYqB4lC0ktpncxCzX/VNr62YkmrpJx2Yvyd0
+L/lK5fiko65gQC1v/XQ/QI9kpGbOFXFnEgQXmFcDTX4kzTgpJ3cOBrM9GAO/hcwH
+82eC0j8fYw8mLYR8yQG0jsXJKCvHxTgkOh0nSkLaeLoq1maLp+NbJKCqgpsmeV4n
+QmEJE4Ye7I/L077BtJLv1tk0G0Jh3F2WeSzEvB7cS4hJBBgRAgAJBQJGvLuvAhsM
+AAoJEM4wxB7CJ0om/FcAn2tCGofP7IPmw6VxGBZNPHal4sIBAJ9UCgpOaGtX2fRl
++vvcvfcuIys27g==
+=mo7N
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/rt-recipient-at-example.com.secret.key b/rt/t/data/gnupg/keys/rt-recipient-at-example.com.secret.key
new file mode 100644
index 0000000..853801f
--- /dev/null
+++ b/rt/t/data/gnupg/keys/rt-recipient-at-example.com.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.7 (GNU/Linux)
+
+lQHhBEa8u6QRBADCqPh8w3cO51hPVb1Sttqq5UhCeB5t2dAL8aVEDkpPfV7LItDi
+pN4VqHo2zbGE8q2bCoqW06Ogn0R4xsxEeD9Jq9/k3dHReFL2gbA5F/el1PKXVxG8
+62BnjLkDub8yCdWsg0QDJ6ah7LC7vukTMlJj+3HhoXWEqBrTBKjtFkNIrwCg/LtU
+CEyj+z/cl6NQGZUw2A6+5DUD/2DfcLeSir7xrlcidqO4BxtxdWkEBDAnmARKrqaw
+zSATIK11+HO3Gteovfa08J1XXU2+IFqi2Ssyaqss1kteJE8DmOAcllSXqmCfOmPm
+xoW4gXOQfEv6tkTvF9JST1OZRj5w+ecyxn0282XrzKcxNeLjc+JcLfzPmmuhw4lA
+s/nJA/4tBqT0V7QiwaznBo8Bh7N3sz75x0vgSdZLUA0e2VzHKh9mAfK/FeVS1mcJ
+04iHWvxOGMqEfXnpxUrogME7f/TWNBVfT4M2JW0sHLvaiJhTtIhn+Q67awQ1f0qG
+mGQLIo9OAWZnIfBZ8e2tBwJ3ajiSZ2LIPWFv4Q1hKxOclODpf/4DAwIc+jyN96r4
+cWCKJH3rJKMiam7fzkjUhawkIXBXWlau1oZeQKvQCxCpj02aFks9bSTK9wseazjU
+JRF6D7QmUlQgVXNlciBCb2IgPHJ0LXJlY2lwaWVudEBleGFtcGxlLmNvbT6IYAQT
+EQIAIAUCRry7pAIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEM4wxB7CJ0om
+PPUAoL3A7jiEZX6xSyXEduAtnmMplqHrAKDB8mrNols8/ni0VOv0QletwEwbVp0C
+YwRGvLuvEAgA/qDyDeDPFrDhh757tpgvJp2CmIx8fyv+i9nLEBVCZjtkLqgrcvtN
+h8l+xu3y8vjGB6+ToPvGZE3FRxyLWNPGIlq1pQSREC9faEDWDrN7yA8miaikLIlf
+MnGwwzb5bEXWsmXzctTvDgxTCufDj8T66TKv+cCqc9T956XY6q49Z/p6yZDiY7LZ
+0N6GkHSoT8o6ZCOvl87nIjwKR8AXDWBxL5+SeenNkZ8e30pSVDJTOe4u6W/MKK3R
+BD0FKYr+DOMh5BQtE7yTQEhzmDTPfGe9m52FV8FbSLpimMnIFM2hGRf6jynoR10s
+0tk2DVADXDycwNYarRYGAxV6XafLCPDv4wADBQgAtpM7zhVch/NsL56aIG0QZmSa
+KCdk6UPsJua91eLEHJFozOzethsAWED5KHD5ThsYBKPGq+mFz7QQtw8/DBmcajtB
+xMv2fvVOE7SrWfeHyMVlRgidJc3O6HlPPnA/v8lQhsYTxpUddYqB4lC0ktpncxCz
+X/VNr62YkmrpJx2Yvyd0L/lK5fiko65gQC1v/XQ/QI9kpGbOFXFnEgQXmFcDTX4k
+zTgpJ3cOBrM9GAO/hcwH82eC0j8fYw8mLYR8yQG0jsXJKCvHxTgkOh0nSkLaeLoq
+1maLp+NbJKCqgpsmeV4nQmEJE4Ye7I/L077BtJLv1tk0G0Jh3F2WeSzEvB7cS/4D
+AwIc+jyN96r4cWBgxgN9v8Z6ySQrlQfJWkB3LDcYVugGb3Ht6vIMaFMnW9KFwOgd
+/nuf5uqyuy2/jQ0SZT1fUC3skhxT1BXKewfmmlnzoLJu3rz6iEkEGBECAAkFAka8
+u68CGwwACgkQzjDEHsInSib8VwCeLdgy5axSbYZ8Ez42Kcj8Ku2Q4ZUAnjJ92jFc
+fC7XWcM/6AX5IyU0jtEW
+=DS2U
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/rt-test-at-example.com.2.public.key b/rt/t/data/gnupg/keys/rt-test-at-example.com.2.public.key
new file mode 100644
index 0000000..d63d4dd
--- /dev/null
+++ b/rt/t/data/gnupg/keys/rt-test-at-example.com.2.public.key
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.7 (GNU/Linux)
+
+mQGiBEbl4D0RBADu+s2KTTSMl2/aK3Jkhy9ZTBMFOOCPeleidjV8z7RVGEwTjcby
+B0DbPFC/eK0ot9m/F9CojE6QHK0hqjCKPfARptjG6C/Iqxql0DaRWdo4UYTgT6WW
+hhoKK5DUN57Eu0essy1qTyzcXVIRsQdfkn2ldRKC1XSXnKAiL0vODLtL7wCgoDgj
+tDtOHdi0vlSHvRhPD1F9P3sEAMvSaiEMN/3AlAWQLqrg0rQRr4dpRZqahoffBIeX
+OZGzDSrWtIshMQLLA0HmkphPtRe/y74GBWfpwr6Hs6yl5tP2PSXsAAl+W92st2Vp
+lKJWsLZtvW39nS5cwmv0Etz6j0F9tn7Ah4+x89egzIg9GwU14cS2GNqxYsK3+YMY
+jSXzA/4zEDOQkrRuSEm9JNG5JCFKexAvjLzhYQQRCOI1PrX3iAMzbYFFIgTpr26h
+sPfOb5SMy2OGeECXGd0rxF4+rMCbp0jrQ8B18CWuho7HJK97WuT6NFoaPZCh/pYK
+OQkKGnJCUQNSm5u4uWY6yNs/+U4kvYJvIGw7F7uNWuXcpfREabQmUlQgVGVzdCB0
+aGUgc2FtZSA8cnQtdGVzdEBleGFtcGxlLmNvbT6IYAQTEQIAIAUCRuXgPQIbAwYL
+CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEMeYWRqoMdv7v1oAnR9bV/4nbzizkEAm
+691AuqGLFyryAJ9WjLWviRXuiEKMR6LMIn9HC0POarkCDQRG5eA9EAgAoexx9eOo
+hJpX0VJ8gNVSlFsLLq60ugiWzfwzrGkL2v4o5QoCwj6XFhK/xtDmqhWu3USBVtqW
+vrMuq2VCWWPiezZ/8Zl8NY7GjxDyLgeuEotfBkS8qFLQH7TGqNFLoJOIi3UjNFX8
+cRx29CSQyc3jj88HiC1InuMMwDXf8ukpkYNG0n7E3lZ3dWOadCXY2+kAxJ5qGV0U
+WmEBoux9TU8hFAq4DtRmf2x/Mt3k+e5ZXpbnbKGxAAImMV8WR0SGAd5OcgeE+rB3
+ziAtD8YbM+WDxbihloje7YN0hVSFSTsGvypIC/jPSNTVgkJdG7N0NepGh/T3wbAV
+eDebMYDmUQYLiwADBQgAmrAkyor1V/M21ERoZdoNFMlbdxuuQ5QhBIkkiygn2dq1
+d7CaOF1Hi5s3o6DsD9ER2YENlPYgPtVPH/agGuITHHugGKitj9sRM/QCGMKf/IKa
+zxcTQfcHmOUMXrM6GWzPZiiTrIBpOZyRDyFN1x0y9G9z7lVt507AkyF3aS2da6yc
+l2knSX3vPtFkHCUVlvKz6yXGE4xLm8/ACH/zPDjuQ2X/Yz+FfpJAeNihz6/J88Ga
+O7sgU1jx3zdRaH5hZXJRlyO7AW1KdOtI8xZi3SBNXKBnfCbUUSBbxa2spXst0Eep
+ijEDtsDhK+imdFjX8ul/JE0XhJooRrcdevEbohMn2IhJBBgRAgAJBQJG5eA9AhsM
+AAoJEMeYWRqoMdv7OI4AnR5PPGNNdhVSTle3B9cV2Vy11gEjAJ0QHe4iFf7wfASF
+jybMsNKYwFb5FQ==
+=XFiw
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/rt-test-at-example.com.2.secret.key b/rt/t/data/gnupg/keys/rt-test-at-example.com.2.secret.key
new file mode 100644
index 0000000..83207f1
--- /dev/null
+++ b/rt/t/data/gnupg/keys/rt-test-at-example.com.2.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.7 (GNU/Linux)
+
+lQHhBEbl4D0RBADu+s2KTTSMl2/aK3Jkhy9ZTBMFOOCPeleidjV8z7RVGEwTjcby
+B0DbPFC/eK0ot9m/F9CojE6QHK0hqjCKPfARptjG6C/Iqxql0DaRWdo4UYTgT6WW
+hhoKK5DUN57Eu0essy1qTyzcXVIRsQdfkn2ldRKC1XSXnKAiL0vODLtL7wCgoDgj
+tDtOHdi0vlSHvRhPD1F9P3sEAMvSaiEMN/3AlAWQLqrg0rQRr4dpRZqahoffBIeX
+OZGzDSrWtIshMQLLA0HmkphPtRe/y74GBWfpwr6Hs6yl5tP2PSXsAAl+W92st2Vp
+lKJWsLZtvW39nS5cwmv0Etz6j0F9tn7Ah4+x89egzIg9GwU14cS2GNqxYsK3+YMY
+jSXzA/4zEDOQkrRuSEm9JNG5JCFKexAvjLzhYQQRCOI1PrX3iAMzbYFFIgTpr26h
+sPfOb5SMy2OGeECXGd0rxF4+rMCbp0jrQ8B18CWuho7HJK97WuT6NFoaPZCh/pYK
+OQkKGnJCUQNSm5u4uWY6yNs/+U4kvYJvIGw7F7uNWuXcpfREaf4DAwJXViZBji9w
+O2Bhhip5V1QOR7FbE8SLAJVVPoX4Lv8iXOMm4jaXAqTPkvWmWZDiUKfDf6Dv5wT1
+aj8N8LQmUlQgVGVzdCB0aGUgc2FtZSA8cnQtdGVzdEBleGFtcGxlLmNvbT6IYAQT
+EQIAIAUCRuXgPQIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEMeYWRqoMdv7
+v1oAnR9bV/4nbzizkEAm691AuqGLFyryAJ9WjLWviRXuiEKMR6LMIn9HC0POap0C
+YwRG5eA9EAgAoexx9eOohJpX0VJ8gNVSlFsLLq60ugiWzfwzrGkL2v4o5QoCwj6X
+FhK/xtDmqhWu3USBVtqWvrMuq2VCWWPiezZ/8Zl8NY7GjxDyLgeuEotfBkS8qFLQ
+H7TGqNFLoJOIi3UjNFX8cRx29CSQyc3jj88HiC1InuMMwDXf8ukpkYNG0n7E3lZ3
+dWOadCXY2+kAxJ5qGV0UWmEBoux9TU8hFAq4DtRmf2x/Mt3k+e5ZXpbnbKGxAAIm
+MV8WR0SGAd5OcgeE+rB3ziAtD8YbM+WDxbihloje7YN0hVSFSTsGvypIC/jPSNTV
+gkJdG7N0NepGh/T3wbAVeDebMYDmUQYLiwADBQgAmrAkyor1V/M21ERoZdoNFMlb
+dxuuQ5QhBIkkiygn2dq1d7CaOF1Hi5s3o6DsD9ER2YENlPYgPtVPH/agGuITHHug
+GKitj9sRM/QCGMKf/IKazxcTQfcHmOUMXrM6GWzPZiiTrIBpOZyRDyFN1x0y9G9z
+7lVt507AkyF3aS2da6ycl2knSX3vPtFkHCUVlvKz6yXGE4xLm8/ACH/zPDjuQ2X/
+Yz+FfpJAeNihz6/J88GaO7sgU1jx3zdRaH5hZXJRlyO7AW1KdOtI8xZi3SBNXKBn
+fCbUUSBbxa2spXst0EepijEDtsDhK+imdFjX8ul/JE0XhJooRrcdevEbohMn2P4D
+AwJXViZBji9wO2DcFJ5JiQd3X934uG+AeTFIWQG75qOWS3j8BpRn50H73tUn9dxB
+Z+V9tI7sMFW3cQTnt6c+FSNJBTUAfLTExQO0BqPSrVwVmKImiEkEGBECAAkFAkbl
+4D0CGwwACgkQx5hZGqgx2/s4jgCfeukl8vl9mMuariu08MsuywQ77y4An1cIwl1x
+997LwJrR5WF/WoGvPQ61
+=E3hO
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/rt-test-at-example.com.public.key b/rt/t/data/gnupg/keys/rt-test-at-example.com.public.key
new file mode 100644
index 0000000..db359a6
--- /dev/null
+++ b/rt/t/data/gnupg/keys/rt-test-at-example.com.public.key
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.7 (GNU/Linux)
+
+mQGiBEa4o04RBADc+2sFcnuTTaqcKRTmSBQKdXvumT4GoATk194UYMghwprrNb1/
+flXQRk9zLkc0YENFHLMoRUmXKEF+WFxzXrZgHJS096tGn+Ud2FXQbSL47Vl3EHng
+c+jSvvVaZRcEySaCyQrsDR7gWlQtCbxbe96Y2x9jX3Zbih9UYnRvWBeczwCg4tgz
+EOmScnWiwUdyZNQsvXDqvKUD/REf0WjWDaykQvXYZ0aTpc/WMBsDS16nl8GNz5eD
+lCB/JJHKh5QDu89p0557AbVDSi5LCOYAM+v4oi8k5zgiO/7HJptirDkZ27Ichyes
+kzhu3Xr9rPLawie/o4FCfncNLbOAEE4EjEGDGRlyowAaXlW7DWT+TLbxY0qL0uHy
+AQPGA/9AmYHBJQqHTfQ4/QXdCnp+UwYs+rhPh7YHymBLn8Saa14heE9SZcYfSerL
+FAE7KKeBx96+RplgsiaqfWrliUwrV3KnnJICMyqWmn2OyMYiV9iFWqAHFTCsitS2
+q1COv5/Lg1a+XkAwEfoIuLrAXT8buIxXs/BhLc1PD1t9My8srbQdUlQgVGVzdCA8
+cnQtdGVzdEBleGFtcGxlLmNvbT6IYAQTEQIAIAUCRrijTgIbAwYLCQgHAwIEFQII
+AwQWAgMBAh4BAheAAAoJENMoA12EiB8bMZoAoIxLNWQ9d9+W4ImPMpUmjLl9ttxW
+AJ9ELlhkfdhPukRe508p5fZqKUfl/rkCDQRGuKNhEAgAjSKFedFcU9RjLmSEGo7E
+4qMQWOtiNooW4NtRsKC2cbJXnGJUOT+GBzGCxjBZt89T6MVsOy7DoAzs+xWKA5Cf
+gFEX5xZWM1c6EA4f7LhC1hawtGQkMQIyHzEy9b7NPEcMlkdOebjjhZ4Ob8svGily
+Q9jN6zpR2c36i0sLaZ5gORIHJ9DOX1k5lUzEhkogEYoYof48VQwHt/5xUURli2kL
+Daqi+X2+6j/vNp96EQ3sbFifmNejWNaDyyrlyGUvx9g/Eh5wMRospmFA/oE1kSws
+tKiBxAPs11OJGBRre2Q6QVW2ULAhxZOFgkCq0DNb8TMnhJOY4jhOP57rrvpMyu9q
+4wADBQgAhRl4aiej9lX+YpZUcyhBkqIB/cDwYemmtIWzo6mVWuDuVcyLl//sJsBi
+pwJF6O5nr0ZC5CT+GRgjBmh9rQjv/UtWBldJ7og/HfuSMG6xIfljO2FxKjabDhGa
+iKzgTk75LnPqfx0FeRNbN78dPy4hV/iIvHPANuyUlmbBsx9hSGqMc78FIDwwfZtB
+im5XUJbpHsahu4/8agQLBu+PFK+5CIVWskrYVL1R66nPHCzsfYcOv+1CYCsuFldG
+tFNPCegGxE7T7CFs7m7aYeSdgycNaR9wuBZeV17JnOJ2z/mtsR+8p4vZZzSMcTkj
+f1j7UCgiKS/ioTD03pU/OZEy9+l1SYhJBBgRAgAJBQJGuKNhAhsMAAoJENMoA12E
+iB8bOvUAoMbxSLj4OsaYEQ1FxOfsXPRmSPVWAJ91PvFOwLkhsm88kjPAIc8oymjd
+7A==
+=ABM8
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rt/t/data/gnupg/keys/rt-test-at-example.com.secret.key b/rt/t/data/gnupg/keys/rt-test-at-example.com.secret.key
new file mode 100644
index 0000000..e76fe84
--- /dev/null
+++ b/rt/t/data/gnupg/keys/rt-test-at-example.com.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.7 (Darwin)
+
+lQHhBEa4o04RBADc+2sFcnuTTaqcKRTmSBQKdXvumT4GoATk194UYMghwprrNb1/
+flXQRk9zLkc0YENFHLMoRUmXKEF+WFxzXrZgHJS096tGn+Ud2FXQbSL47Vl3EHng
+c+jSvvVaZRcEySaCyQrsDR7gWlQtCbxbe96Y2x9jX3Zbih9UYnRvWBeczwCg4tgz
+EOmScnWiwUdyZNQsvXDqvKUD/REf0WjWDaykQvXYZ0aTpc/WMBsDS16nl8GNz5eD
+lCB/JJHKh5QDu89p0557AbVDSi5LCOYAM+v4oi8k5zgiO/7HJptirDkZ27Ichyes
+kzhu3Xr9rPLawie/o4FCfncNLbOAEE4EjEGDGRlyowAaXlW7DWT+TLbxY0qL0uHy
+AQPGA/9AmYHBJQqHTfQ4/QXdCnp+UwYs+rhPh7YHymBLn8Saa14heE9SZcYfSerL
+FAE7KKeBx96+RplgsiaqfWrliUwrV3KnnJICMyqWmn2OyMYiV9iFWqAHFTCsitS2
+q1COv5/Lg1a+XkAwEfoIuLrAXT8buIxXs/BhLc1PD1t9My8srf4DAwKhnHYPLWS2
+9GBnewzagq2czolDuKHrmtb1Eiv4mb4S8X6HhSn4gQSUJ59mVsn7L1TwK7yWJgK0
++Ix66LQdUlQgVGVzdCA8cnQtdGVzdEBleGFtcGxlLmNvbT6IYAQTEQIAIAUCRrij
+TgIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJENMoA12EiB8bMZoAoIxLNWQ9
+d9+W4ImPMpUmjLl9ttxWAJ9ELlhkfdhPukRe508p5fZqKUfl/p0CYwRGuKNhEAgA
+jSKFedFcU9RjLmSEGo7E4qMQWOtiNooW4NtRsKC2cbJXnGJUOT+GBzGCxjBZt89T
+6MVsOy7DoAzs+xWKA5CfgFEX5xZWM1c6EA4f7LhC1hawtGQkMQIyHzEy9b7NPEcM
+lkdOebjjhZ4Ob8svGilyQ9jN6zpR2c36i0sLaZ5gORIHJ9DOX1k5lUzEhkogEYoY
+of48VQwHt/5xUURli2kLDaqi+X2+6j/vNp96EQ3sbFifmNejWNaDyyrlyGUvx9g/
+Eh5wMRospmFA/oE1kSwstKiBxAPs11OJGBRre2Q6QVW2ULAhxZOFgkCq0DNb8TMn
+hJOY4jhOP57rrvpMyu9q4wADBQgAhRl4aiej9lX+YpZUcyhBkqIB/cDwYemmtIWz
+o6mVWuDuVcyLl//sJsBipwJF6O5nr0ZC5CT+GRgjBmh9rQjv/UtWBldJ7og/HfuS
+MG6xIfljO2FxKjabDhGaiKzgTk75LnPqfx0FeRNbN78dPy4hV/iIvHPANuyUlmbB
+sx9hSGqMc78FIDwwfZtBim5XUJbpHsahu4/8agQLBu+PFK+5CIVWskrYVL1R66nP
+HCzsfYcOv+1CYCsuFldGtFNPCegGxE7T7CFs7m7aYeSdgycNaR9wuBZeV17JnOJ2
+z/mtsR+8p4vZZzSMcTkjf1j7UCgiKS/ioTD03pU/OZEy9+l1Sf4DAwKhnHYPLWS2
+9GBUcgG+SE35K+ynz0mpxRRx4kbgN9Ap6oxzhDYVGRbfDpVxE8hgJuc7zJ27pmPr
+VwmdzDROCDy1W9bwjfrV8yhln81npumXxndSiEkEGBECAAkFAka4o2ECGwwACgkQ
+0ygDXYSIHxs69QCgxvFIuPg6xpgRDUXE5+xc9GZI9VYAn3U+8U7AuSGybzySM8Ah
+zyjKaN3s
+=cv/+
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/rt/t/delegation/cleanup_stalled.t b/rt/t/delegation/cleanup_stalled.t
new file mode 100644
index 0000000..f108ecc
--- /dev/null
+++ b/rt/t/delegation/cleanup_stalled.t
@@ -0,0 +1,458 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+# Regression test suite for http://rt3.fsck.com/Ticket/Display.html?id=6184
+# and related corner cases related to cleanup of delegated ACEs when
+# the delegator loses the right to delegate. This causes complexities
+# due to the fact that multiple ACEs can grant different delegation
+# rights to a principal, and because DelegateRights and SuperUser can
+# themselves be delegated.
+
+# The case where the "parent" delegated ACE is removed is handled in
+# the embedded regression tests in lib/RT/ACE_Overlay.pm .
+
+
+use RT;
+
+use RT::Test tests => 98;
+
+my ($u1, $u2, $g1, $g2, $g3, $pg1, $pg2, $ace, @groups, @users, @principals);
+@groups = (\$g1, \$g2, \$g3, \$pg1, \$pg2);
+@users = (\$u1, \$u2);
+@principals = (@groups, @users);
+
+my($ret, $msg);
+
+$u1 = RT::User->new($RT::SystemUser);
+( $ret, $msg ) = $u1->LoadOrCreateByEmail('delegtest1@example.com');
+ok( $ret, "Load / Create test user 1: $msg" );
+$u1->SetPrivileged(1);
+$u2 = RT::User->new($RT::SystemUser);
+( $ret, $msg ) = $u2->LoadOrCreateByEmail('delegtest2@example.com');
+ok( $ret, "Load / Create test user 2: $msg" );
+$u2->SetPrivileged(1);
+$g1 = RT::Group->new($RT::SystemUser);
+( $ret, $msg) = $g1->LoadUserDefinedGroup('dg1');
+unless ($ret) {
+ ( $ret, $msg ) = $g1->CreateUserDefinedGroup( Name => 'dg1' );
+}
+ok( $ret, "Load / Create test group 1: $msg" );
+$g2 = RT::Group->new($RT::SystemUser);
+( $ret, $msg) = $g2->LoadUserDefinedGroup('dg2');
+unless ($ret) {
+ ( $ret, $msg ) = $g2->CreateUserDefinedGroup( Name => 'dg2' );
+}
+ok( $ret, "Load / Create test group 2: $msg" );
+$g3 = RT::Group->new($RT::SystemUser);
+( $ret, $msg) = $g3->LoadUserDefinedGroup('dg3');
+unless ($ret) {
+ ( $ret, $msg ) = $g3->CreateUserDefinedGroup( Name => 'dg3' );
+}
+ok( $ret, "Load / Create test group 3: $msg" );
+$pg1 = RT::Group->new($RT::SystemUser);
+( $ret, $msg ) = $pg1->LoadPersonalGroup( Name => 'dpg1',
+ User => $u1->PrincipalId );
+unless ($ret) {
+ ( $ret, $msg ) = $pg1->CreatePersonalGroup( Name => 'dpg1',
+ PrincipalId => $u1->PrincipalId );
+}
+ok( $ret, "Load / Create test personal group 1: $msg" );
+$pg2 = RT::Group->new($RT::SystemUser);
+( $ret, $msg ) = $pg2->LoadPersonalGroup( Name => 'dpg2',
+ User => $u2->PrincipalId );
+unless ($ret) {
+ ( $ret, $msg ) = $pg2->CreatePersonalGroup( Name => 'dpg2',
+ PrincipalId => $u2->PrincipalId );
+}
+ok( $ret, "Load / Create test personal group 2: $msg" );
+
+
+
+# Basic case: u has global DelegateRights through g1 and ShowConfigTab
+# through g2; then u is removed from g1.
+
+clear_acls_and_groups();
+
+( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights' );
+ok( $ret, "Grant DelegateRights to g1: $msg" );
+( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'ShowConfigTab' );
+ok( $ret, "Grant ShowConfigTab to g2: $msg" );
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+ok(
+ $u1->PrincipalObj->HasRight(
+ Right => 'DelegateRights',
+ Object => $RT::System
+ ),
+ "test user 1 has DelegateRights after joining g1"
+);
+( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g2: $msg" );
+ok(
+ $u1->PrincipalObj->HasRight(
+ Right => 'ShowConfigTab',
+ Object => $RT::System
+ ),
+ "test user 1 has ShowConfigTab after joining g2"
+);
+
+$ace = RT::ACE->new($u1);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'ShowConfigTab',
+ Object => $RT::System,
+ PrincipalType => 'Group',
+ PrincipalId => $g2->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg1: $msg" );
+ok(
+ $pg1->PrincipalObj->HasRight(
+ Right => 'ShowConfigTab',
+ Object => $RT::System
+ ),
+ "Test personal group 1 has ShowConfigTab right after delegation"
+);
+
+( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId );
+ok( $ret, "Delete test user 1 from g1: $msg" );
+ok(
+ not(
+ $pg1->PrincipalObj->HasRight(
+ Right => 'ShowConfigTab',
+ Object => $RT::System
+ )
+ ),
+ "Test personal group 1 lacks ShowConfigTab right after user removed from g1"
+);
+
+# Basic case: u has global DelegateRights through g1 and ShowConfigTab
+# through g2; then DelegateRights revoked from g1.
+
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg1: $msg" );
+( $ret, $msg ) = $g1->PrincipalObj->RevokeRight( Right => 'DelegateRights' );
+ok( $ret, "Revoke DelegateRights from g1: $msg" );
+ok(
+ not(
+ $pg1->PrincipalObj->HasRight(
+ Right => 'ShowConfigTab',
+ Object => $RT::System
+ )
+ ),
+ "Test personal group 1 lacks ShowConfigTab right after DelegateRights revoked from g1"
+);
+
+
+
+# Corner case - restricted delegation: u has DelegateRights on pg1
+# through g1 and AdminGroup on pg1 through g2; then DelegateRights
+# revoked from g1.
+
+clear_acls_and_groups();
+
+( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights',
+ Object => $pg1);
+ok( $ret, "Grant DelegateRights on pg1 to g1: $msg" );
+( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'AdminGroup',
+ Object => $pg1);
+ok( $ret, "Grant AdminGroup on pg1 to g2: $msg" );
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g2: $msg" );
+ok( $u1->PrincipalObj->HasRight(
+ Right => 'DelegateRights',
+ Object => $pg1 ),
+ "test user 1 has DelegateRights on pg1 after joining g1" );
+ok( not( $u1->PrincipalObj->HasRight(
+ Right => 'DelegateRights',
+ Object => $RT::System )),
+ "Test personal group 1 lacks global DelegateRights after joining g1" );
+$ace = RT::ACE->new($u1);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'AdminGroup',
+ Object => $pg1,
+ PrincipalType => 'Group',
+ PrincipalId => $g2->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" );
+ok( $pg1->PrincipalObj->HasRight(
+ Right => 'AdminGroup',
+ Object => $pg1 ),
+ "Test personal group 1 has AdminGroup right on pg1 after delegation" );
+( $ret, $msg ) = $g1->PrincipalObj->RevokeRight ( Right => 'DelegateRights',
+ Object => $pg1 );
+ok( $ret, "Revoke DelegateRights on pg1 from g1: $msg" );
+ok( not( $pg1->PrincipalObj->HasRight(
+ Right => 'AdminGroup',
+ Object => $pg1 )),
+ "Test personal group 1 lacks AdminGroup right on pg1 after DelegateRights revoked from g1" );
+( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights',
+ Object => $pg1);
+
+# Corner case - restricted delegation: u has DelegateRights on pg1
+# through g1 and AdminGroup on pg1 through g2; then u removed from g1.
+
+ok( $ret, "Grant DelegateRights on pg1 to g1: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" );
+ok( $pg1->PrincipalObj->HasRight(
+ Right => 'AdminGroup',
+ Object => $pg1 ),
+ "Test personal group 1 has AdminGroup right on pg1 after delegation" );
+( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId );
+ok( $ret, "Delete test user 1 from g1: $msg" );
+ok( not( $pg1->PrincipalObj->HasRight(
+ Right => 'AdminGroup',
+ Object => $pg1 )),
+ "Test personal group 1 lacks AdminGroup right on pg1 after user removed from g1" );
+
+clear_acls_and_groups();
+
+
+
+# Corner case - multiple delegation rights: u has global
+# DelegateRights directly and DelegateRights on pg1 through g1, and
+# AdminGroup on pg1 through g2; then u removed from g1 (delegation
+# should remain); then DelegateRights revoked from u (delegation
+# should not remain).
+
+( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights',
+ Object => $pg1);
+ok( $ret, "Grant DelegateRights on pg1 to g1: $msg" );
+( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'AdminGroup',
+ Object => $pg1);
+ok( $ret, "Grant AdminGroup on pg1 to g2: $msg" );
+( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights',
+ Object => $RT::System);
+ok( $ret, "Grant DelegateRights to user: $msg" );
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g2: $msg" );
+$ace = RT::ACE->new($u1);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'AdminGroup',
+ Object => $pg1,
+ PrincipalType => 'Group',
+ PrincipalId => $g2->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" );
+( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId );
+ok( $ret, "Delete test user 1 from g1: $msg" );
+ok( $pg1->PrincipalObj->HasRight(Right => 'AdminGroup',
+ Object => $pg1),
+ "Test personal group 1 retains AdminGroup right on pg1 after user removed from g1" );
+( $ret, $msg ) = $u1->PrincipalObj->RevokeRight( Right => 'DelegateRights',
+ Object => $RT::System );
+ok( not ($pg1->PrincipalObj->HasRight(Right => 'AdminGroup',
+ Object => $pg1)),
+ "Test personal group 1 lacks AdminGroup right on pg1 after DelegateRights revoked");
+
+# Corner case - multiple delegation rights and selectivity: u has
+# DelegateRights globally and on g2 directly and DelegateRights on pg1
+# through g1, and AdminGroup on pg1 through g2; then global
+# DelegateRights revoked from u (delegation should remain),
+# DelegateRights on g2 revoked from u (delegation should remain), and
+# u removed from g1 (delegation should not remain).
+
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights',
+ Object => $RT::System);
+ok( $ret, "Grant DelegateRights to user: $msg" );
+( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights',
+ Object => $g2);
+ok( $ret, "Grant DelegateRights on g2 to user: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" );
+( $ret, $msg ) = $u1->PrincipalObj->RevokeRight( Right => 'DelegateRights',
+ Object => $RT::System );
+ok( $pg1->PrincipalObj->HasRight(Right => 'AdminGroup',
+ Object => $pg1),
+ "Test personal group 1 retains AdminGroup right on pg1 after global DelegateRights revoked" );
+( $ret, $msg ) = $u1->PrincipalObj->RevokeRight( Right => 'DelegateRights',
+ Object => $g2 );
+ok( $pg1->PrincipalObj->HasRight(Right => 'AdminGroup',
+ Object => $pg1),
+ "Test personal group 1 retains AdminGroup right on pg1 after DelegateRights on g2 revoked" );
+( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId );
+ok( $ret, "Delete test user 1 from g1: $msg" );
+ok( not ($pg1->PrincipalObj->HasRight(Right => 'AdminGroup',
+ Object => $pg1)),
+ "Test personal group 1 lacks AdminGroup right on pg1 after user removed from g1");
+
+
+
+# Corner case - indirect delegation rights: u has DelegateRights
+# through g1 via g3, and ShowConfigTab via g2; then g3 removed from
+# g1.
+
+clear_acls_and_groups();
+
+( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights' );
+ok( $ret, "Grant DelegateRights to g1: $msg" );
+( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'ShowConfigTab' );
+ok( $ret, "Grant ShowConfigTab to g2: $msg" );
+( $ret, $msg ) = $g1->AddMember( $g3->PrincipalId );
+ok( $ret, "Add g3 to g1: $msg" );
+( $ret, $msg ) = $g3->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g3: $msg" );
+( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g2: $msg" );
+
+$ace = RT::ACE->new($u1);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'ShowConfigTab',
+ Object => $RT::System,
+ PrincipalType => 'Group',
+ PrincipalId => $g2->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg1: $msg" );
+
+( $ret, $msg ) = $g1->DeleteMember( $g3->PrincipalId );
+ok( $ret, "Delete g3 from g1: $msg" );
+ok( not ($pg1->PrincipalObj->HasRight(Right => 'ShowConfigTab',
+ Object => $RT::System)),
+ "Test personal group 1 lacks ShowConfigTab right after g3 removed from g1");
+
+# Corner case - indirect delegation rights: u has DelegateRights
+# through g1 via g3, and ShowConfigTab via g2; then DelegateRights
+# revoked from g1.
+
+( $ret, $msg ) = $g1->AddMember( $g3->PrincipalId );
+ok( $ret, "Add g3 to g1: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg1: $msg" );
+( $ret, $msg ) = $g1->PrincipalObj->RevokeRight ( Right => 'DelegateRights' );
+ok( $ret, "Revoke DelegateRights from g1: $msg" );
+
+ok( not ($pg1->PrincipalObj->HasRight(Right => 'ShowConfigTab',
+ Object => $RT::System)),
+ "Test personal group 1 lacks ShowConfigTab right after DelegateRights revoked from g1");
+
+
+
+# Corner case - delegation of DelegateRights: u1 has DelegateRights
+# via g1 and delegates DelegateRights to pg1; u2 has DelegateRights
+# via pg1 and ShowConfigTab via g2; then u1 removed from g1.
+
+clear_acls_and_groups();
+
+( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights' );
+ok( $ret, "Grant DelegateRights to g1: $msg" );
+( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'ShowConfigTab' );
+ok( $ret, "Grant ShowConfigTab to g2: $msg" );
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+$ace = RT::ACE->new($u1);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'DelegateRights',
+ Object => $RT::System,
+ PrincipalType => 'Group',
+ PrincipalId => $g1->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate DelegateRights to pg1: $msg" );
+
+( $ret, $msg ) = $pg1->AddMember( $u2->PrincipalId );
+ok( $ret, "Add test user 2 to pg1: $msg" );
+( $ret, $msg ) = $g2->AddMember( $u2->PrincipalId );
+ok( $ret, "Add test user 2 to g2: $msg" );
+$ace = RT::ACE->new($u2);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'ShowConfigTab',
+ Object => $RT::System,
+ PrincipalType => 'Group',
+ PrincipalId => $g2->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg2: $msg" );
+
+ok( $pg2->PrincipalObj->HasRight(Right => 'ShowConfigTab',
+ Object => $RT::System),
+ "Test personal group 2 has ShowConfigTab right after delegation");
+( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId );
+ok( $ret, "Delete u1 from g1: $msg" );
+ok( not ($pg2->PrincipalObj->HasRight(Right => 'ShowConfigTab',
+ Object => $RT::System)),
+ "Test personal group 2 lacks ShowConfigTab right after u1 removed from g1");
+
+# Corner case - delegation of DelegateRights: u1 has DelegateRights
+# via g1 and delegates DelegateRights to pg1; u2 has DelegateRights
+# via pg1 and ShowConfigTab via g2; then DelegateRights revoked from
+# g1.
+
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add u1 to g1: $msg" );
+$ace = RT::ACE->new($u1);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'DelegateRights',
+ Object => $RT::System,
+ PrincipalType => 'Group',
+ PrincipalId => $g1->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate DelegateRights to pg1: $msg" );
+$ace = RT::ACE->new($u2);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'ShowConfigTab',
+ Object => $RT::System,
+ PrincipalType => 'Group',
+ PrincipalId => $g2->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg2: $msg" );
+
+( $ret, $msg ) = $g1->PrincipalObj->RevokeRight ( Right => 'DelegateRights' );
+ok( $ret, "Revoke DelegateRights from g1: $msg" );
+ok( not ($pg2->PrincipalObj->HasRight(Right => 'ShowConfigTab',
+ Object => $RT::System)),
+ "Test personal group 2 lacks ShowConfigTab right after DelegateRights revoked from g1");
+
+
+
+
+#######
+
+sub clear_acls_and_groups {
+ # Revoke all rights granted to our cast
+ my $acl = RT::ACL->new($RT::SystemUser);
+ foreach (@principals) {
+ $acl->LimitToPrincipal(Type => $$_->PrincipalObj->PrincipalType,
+ Id => $$_->PrincipalObj->Id);
+ }
+ while (my $ace = $acl->Next()) {
+ $ace->Delete();
+ }
+
+ # Remove all group memberships
+ my $members = RT::GroupMembers->new($RT::SystemUser);
+ foreach (@groups) {
+ $members->LimitToMembersOfGroup( $$_->PrincipalId );
+ }
+ while (my $member = $members->Next()) {
+ $member->Delete();
+ }
+
+ $acl->RedoSearch();
+ is( $acl->Count() , 0,
+ "All principals have no rights after clearing ACLs" );
+ $members->RedoSearch();
+ is( $members->Count() , 0,
+ "All groups have no members after clearing groups" );
+}
diff --git a/rt/t/delegation/revocation.t b/rt/t/delegation/revocation.t
new file mode 100644
index 0000000..151525e
--- /dev/null
+++ b/rt/t/delegation/revocation.t
@@ -0,0 +1,135 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT;
+
+use RT::Test tests => 22;
+
+my ($u1, $g1, $pg1, $pg2, $ace, @groups, @users, @principals);
+@groups = (\$g1, \$pg1, \$pg2);
+@users = (\$u1);
+@principals = (@groups, @users);
+
+my($ret, $msg);
+
+$u1 = RT::User->new($RT::SystemUser);
+( $ret, $msg ) = $u1->LoadOrCreateByEmail('delegtest1@example.com');
+ok( $ret, "Load / Create test user 1: $msg" );
+$u1->SetPrivileged(1);
+
+$g1 = RT::Group->new($RT::SystemUser);
+( $ret, $msg) = $g1->LoadUserDefinedGroup('dg1');
+unless ($ret) {
+ ( $ret, $msg ) = $g1->CreateUserDefinedGroup( Name => 'dg1' );
+}
+$pg1 = RT::Group->new($RT::SystemUser);
+( $ret, $msg ) = $pg1->LoadPersonalGroup( Name => 'dpg1',
+ User => $u1->PrincipalId );
+unless ($ret) {
+ ( $ret, $msg ) = $pg1->CreatePersonalGroup( Name => 'dpg1',
+ PrincipalId => $u1->PrincipalId );
+}
+ok( $ret, "Load / Create test personal group 1: $msg" );
+$pg2 = RT::Group->new($RT::SystemUser);
+( $ret, $msg ) = $pg2->LoadPersonalGroup( Name => 'dpg2',
+ User => $u1->PrincipalId );
+unless ($ret) {
+ ( $ret, $msg ) = $pg2->CreatePersonalGroup( Name => 'dpg2',
+ PrincipalId => $u1->PrincipalId );
+}
+ok( $ret, "Load / Create test personal group 2: $msg" );
+
+clear_acls_and_groups();
+
+( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights' );
+ok( $ret, "Grant DelegateRights to u1: $msg" );
+( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'ShowConfigTab' );
+ok( $ret, "Grant ShowConfigTab to g1: $msg" );
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+
+$ace = RT::ACE->new($u1);
+( $ret, $msg ) = $ace->LoadByValues(
+ RightName => 'ShowConfigTab',
+ Object => $RT::System,
+ PrincipalType => 'Group',
+ PrincipalId => $g1->PrincipalId
+);
+ok( $ret, "Look up ACE to be delegated: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg1: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg2: $msg" );
+
+ok(( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System ) and
+ $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System )),
+ "Test personal groups have ShowConfigTab right after delegation" );
+
+( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId );
+ok( $ret, "Delete test user 1 from g1: $msg" );
+
+ok( not( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System )),
+ "Test personal group 1 lacks ShowConfigTab after user removed from g1" );
+ok( not( $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System )),
+ "Test personal group 2 lacks ShowConfigTab after user removed from g1" );
+
+( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId );
+ok( $ret, "Add test user 1 to g1: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg1: $msg" );
+( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId );
+ok( $ret, "Delegate ShowConfigTab to pg2: $msg" );
+
+ok(( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System ) and
+ $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System )),
+ "Test personal groups have ShowConfigTab right after delegation" );
+
+( $ret, $msg ) = $g1->PrincipalObj->RevokeRight( Right => 'ShowConfigTab' );
+ok( $ret, "Revoke ShowConfigTab from g1: $msg" );
+
+ok( not( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System )),
+ "Test personal group 1 lacks ShowConfigTab after user removed from g1" );
+ok( not( $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System )),
+ "Test personal group 2 lacks ShowConfigTab after user removed from g1" );
+
+
+
+#######
+
+sub clear_acls_and_groups {
+ # Revoke all rights granted to our cast
+ my $acl = RT::ACL->new($RT::SystemUser);
+ foreach (@principals) {
+ $acl->LimitToPrincipal(Type => $$_->PrincipalObj->PrincipalType,
+ Id => $$_->PrincipalObj->Id);
+ }
+ while (my $ace = $acl->Next()) {
+ $ace->Delete();
+ }
+
+ # Remove all group memberships
+ my $members = RT::GroupMembers->new($RT::SystemUser);
+ foreach (@groups) {
+ $members->LimitToMembersOfGroup( $$_->PrincipalId );
+ }
+ while (my $member = $members->Next()) {
+ $member->Delete();
+ }
+
+ $acl->RedoSearch();
+ is( $acl->Count() , 0,
+ "All principals have no rights after clearing ACLs" );
+ $members->RedoSearch();
+ is( $members->Count() , 0,
+ "All groups have no members after clearing groups" );
+}
diff --git a/rt/t/i18n/default.t b/rt/t/i18n/default.t
new file mode 100644
index 0000000..6c9842a
--- /dev/null
+++ b/rt/t/i18n/default.t
@@ -0,0 +1,19 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use RT::Test tests => 8;
+
+my ($baseurl, $m) = RT::Test->started_ok;
+$m->get_ok('/');
+$m->title_is('Login');
+
+$m->get_ok('/', { 'Accept-Language' => 'x-klingon' });
+$m->title_is('Login', 'unavailable language fallback to en');
+
+$m->add_header('Accept-Language' => 'zh-tw,zh;q=0.8,en-gb;q=0.5,en;q=0.3');
+$m->get_ok('/');
+use utf8;
+Encode::_utf8_on($m->{content});
+$m->title_is('登入', 'Page title properly translated to chinese');
+$m->content_contains('密碼','Password properly translated');
diff --git a/rt/t/mail/charsets-outgoing.t b/rt/t/mail/charsets-outgoing.t
new file mode 100644
index 0000000..ca44bbd
--- /dev/null
+++ b/rt/t/mail/charsets-outgoing.t
@@ -0,0 +1,306 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use utf8;
+
+use RT::Test tests => 30;
+
+
+RT::Test->set_mail_catcher;
+
+my $queue = RT::Test->load_or_create_queue(
+ Name => 'Regression',
+ CorrespondAddress => 'rt-recipient@example.com',
+ CommentAddress => 'rt-recipient@example.com',
+);
+ok $queue && $queue->id, 'loaded or created queue';
+
+diag "make sure queue has no subject tag" if $ENV{'TEST_VERBOSE'};
+{
+ my ($status, $msg) = $queue->SetSubjectTag( undef );
+ ok $status, "set subject tag for the queue" or diag "error: $msg";
+}
+
+diag "set intial simple autoreply template" if $ENV{'TEST_VERBOSE'};
+{
+ my $template = RT::Template->new( $RT::SystemUser );
+ $template->Load('Autoreply');
+ ok $template->id, "loaded autoreply tempalte";
+
+ my ($status, $msg) = $template->SetContent(
+ "Subject: Autreply { \$Ticket->Subject }\n"
+ ."\n"
+ ."hi there it's an autoreply.\n"
+ ."\n"
+ );
+ ok $status, "changed content of the template"
+ or diag "error: $msg";
+}
+
+diag "basic test of autoreply" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+}
+
+my $str_ru_test = "\x{442}\x{435}\x{441}\x{442}";
+my $str_ru_autoreply = "\x{410}\x{432}\x{442}\x{43e}\x{43e}\x{442}\x{432}\x{435}\x{442}";
+my $str_ru_support = "\x{43f}\x{43e}\x{434}\x{434}\x{435}\x{440}\x{436}\x{43a}\x{430}";
+
+diag "non-ascii Subject with ascii prefix set in the template"
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => $str_ru_test,
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_test/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'};
+{
+ my ($status, $msg) = $queue->SetSubjectTag( $str_ru_support );
+ ok $status, "set subject tag for the queue" or diag "error: $msg";
+}
+
+diag "ascii subject with non-ascii subject tag" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_support/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+diag "non-ascii subject with non-ascii subject tag" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => $str_ru_test,
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_support/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ $subject =~ /$str_ru_test/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+diag "return back the empty subject tag" if $ENV{'TEST_VERBOSE'};
+{
+ my ($status, $msg) = $queue->SetSubjectTag( undef );
+ ok $status, "set subject tag for the queue" or diag "error: $msg";
+}
+
+diag "add non-ascii subject prefix in the autoreply template" if $ENV{'TEST_VERBOSE'};
+{
+ my $template = RT::Template->new( $RT::SystemUser );
+ $template->Load('Autoreply');
+ ok $template->id, "loaded autoreply tempalte";
+
+ my ($status, $msg) = $template->SetContent(
+ "Subject: $str_ru_autoreply { \$Ticket->Subject }\n"
+ ."\n"
+ ."hi there it's an autoreply.\n"
+ ."\n"
+ );
+ ok $status, "changed content of the template" or diag "error: $msg";
+}
+
+diag "ascii subject with non-ascii subject prefix in template" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_autoreply/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+diag "non-ascii subject with non-ascii subject prefix in template"
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => $str_ru_test,
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_autoreply/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ $subject =~ /$str_ru_autoreply/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'};
+{
+ my ($status, $msg) = $queue->SetSubjectTag( $str_ru_support );
+ ok $status, "set subject tag for the queue" or diag "error: $msg";
+}
+
+diag "non-ascii subject, non-ascii prefix in template and non-ascii tag"
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => $str_ru_test,
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_autoreply/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ $subject =~ /$str_ru_autoreply/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ $subject =~ /$str_ru_autoreply/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+diag "flush subject tag of the queue" if $ENV{'TEST_VERBOSE'};
+{
+ my ($status, $msg) = $queue->SetSubjectTag( undef );
+ ok $status, "set subject tag for the queue" or diag "error: $msg";
+}
+
+
+diag "don't change subject via template" if $ENV{'TEST_VERBOSE'};
+{
+ my $template = RT::Template->new( $RT::SystemUser );
+ $template->Load('Autoreply');
+ ok $template->id, "loaded autoreply tempalte";
+
+ my ($status, $msg) = $template->SetContent(
+ "\n"
+ ."\n"
+ ."hi there it's an autoreply.\n"
+ ."\n"
+ );
+ ok $status, "changed content of the template" or diag "error: $msg";
+}
+
+diag "non-ascii Subject without changes in template" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => $str_ru_test,
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_test/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'};
+{
+ my ($status, $msg) = $queue->SetSubjectTag( $str_ru_support );
+ ok $status, "set subject tag for the queue" or diag "error: $msg";
+}
+
+diag "non-ascii Subject without changes in template and with non-ascii subject tag"
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Create(
+ Queue => $queue->id,
+ Subject => $str_ru_test,
+ Requestor => 'root@localhost',
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
+ $subject =~ /$str_ru_test/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ $subject =~ /$str_ru_support/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "all mails have correct data";
+}
+
+sub parse_mail {
+ my $mail = shift;
+ require RT::EmailParser;
+ my $parser = new RT::EmailParser;
+ $parser->ParseMIMEEntityFromScalar( $mail );
+ return $parser->Entity;
+}
+
diff --git a/rt/t/mail/crypt-gnupg.t b/rt/t/mail/crypt-gnupg.t
new file mode 100644
index 0000000..f33fbab
--- /dev/null
+++ b/rt/t/mail/crypt-gnupg.t
@@ -0,0 +1,312 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use RT::Test nodata => 1, tests => 92;
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use File::Spec ();
+use Cwd;
+
+my $homedir = RT::Test::get_abs_relocatable_dir(File::Spec->updir(),
+ qw(data gnupg keyrings) );
+
+mkdir $homedir;
+
+use_ok('RT::Crypt::GnuPG');
+use_ok('MIME::Entity');
+
+RT->Config->Set( 'GnuPG',
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC' );
+
+RT->Config->Set( 'GnuPGOptions',
+ homedir => $homedir,
+ 'no-permission-warning' => undef,
+);
+
+
+diag 'only signing. correct passphrase' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' );
+ ok( $entity, 'signed entity');
+ ok( !$res{'logger'}, "log is here as well" ) or diag $res{'logger'};
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
+ is( scalar @status, 2, 'two records: passphrase, signing');
+ is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
+ is( $status[0]->{'Status'}, 'DONE', 'good passphrase');
+ is( $status[1]->{'Operation'}, 'Sign', 'operation is correct');
+ is( $status[1]->{'Status'}, 'DONE', 'done');
+ is( $status[1]->{'User'}->{'EmailAddress'}, 'rt@example.com', 'correct email');
+
+ ok( $entity->is_multipart, 'signed message is multipart' );
+ is( $entity->parts, 2, 'two parts' );
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 1, 'one protected part' );
+ is( $parts[0]->{'Type'}, 'signed', "have signed part" );
+ is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" );
+ is( $parts[0]->{'Top'}, $entity, "it's the same entity" );
+
+ my @res = RT::Crypt::GnuPG::VerifyDecrypt( Entity => $entity );
+ is scalar @res, 1, 'one operation';
+ @status = RT::Crypt::GnuPG::ParseStatus( $res[0]{'status'} );
+ is( scalar @status, 1, 'one record');
+ is( $status[0]->{'Operation'}, 'Verify', 'operation is correct');
+ is( $status[0]->{'Status'}, 'DONE', 'good passphrase');
+ is( $status[0]->{'Trust'}, 'ULTIMATE', 'have trust value');
+}
+
+diag 'only signing. missing passphrase' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => '' );
+ ok( $res{'exit_code'}, "couldn't sign without passphrase");
+ ok( $res{'error'} || $res{'logger'}, "error is here" );
+
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
+ is( scalar @status, 1, 'one record');
+ is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
+ is( $status[0]->{'Status'}, 'MISSING', 'missing passphrase');
+}
+
+diag 'only signing. wrong passphrase' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'wrong' );
+ ok( $res{'exit_code'}, "couldn't sign with bad passphrase");
+ ok( $res{'error'} || $res{'logger'}, "error is here" );
+
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
+ is( scalar @status, 1, 'one record');
+ is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
+ is( $status[0]->{'Status'}, 'BAD', 'wrong passphrase');
+}
+
+diag 'encryption only' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 );
+ ok( !$res{'exit_code'}, "successful encryption" );
+ ok( !$res{'logger'}, "no records in logger" );
+
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
+ is( scalar @status, 1, 'one record');
+ is( $status[0]->{'Operation'}, 'Encrypt', 'operation is correct');
+ is( $status[0]->{'Status'}, 'DONE', 'done');
+
+ ok($entity, 'get an encrypted part');
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 1, 'one protected part' );
+ is( $parts[0]->{'Type'}, 'encrypted', "have encrypted part" );
+ is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" );
+ is( $parts[0]->{'Top'}, $entity, "it's the same entity" );
+}
+
+diag 'encryption only, bad recipient' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'keyless@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 );
+ ok( $res{'exit_code'}, 'no way to encrypt without keys of recipients');
+ ok( $res{'logger'}, "errors are in logger" );
+
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
+ is( scalar @status, 1, 'one record');
+ is( $status[0]->{'Keyword'}, 'INV_RECP', 'invalid recipient');
+}
+
+diag 'encryption and signing with combined method' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Passphrase => 'test' );
+ ok( !$res{'exit_code'}, "successful encryption with signing" );
+ ok( !$res{'logger'}, "no records in logger" );
+
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
+ is( scalar @status, 3, 'three records: passphrase, sign and encrypt');
+ is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
+ is( $status[0]->{'Status'}, 'DONE', 'done');
+ is( $status[1]->{'Operation'}, 'Sign', 'operation is correct');
+ is( $status[1]->{'Status'}, 'DONE', 'done');
+ is( $status[2]->{'Operation'}, 'Encrypt', 'operation is correct');
+ is( $status[2]->{'Status'}, 'DONE', 'done');
+
+ ok($entity, 'get an encrypted and signed part');
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 1, 'one protected part' );
+ is( $parts[0]->{'Type'}, 'encrypted', "have encrypted part" );
+ is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" );
+ is( $parts[0]->{'Top'}, $entity, "it's the same entity" );
+}
+
+diag 'encryption and signing with cascading, sign on encrypted' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 );
+ ok( !$res{'exit_code'}, 'successful encryption' );
+ ok( !$res{'logger'}, "no records in logger" );
+ %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' );
+ ok( !$res{'exit_code'}, 'successful signing' );
+ ok( !$res{'logger'}, "no records in logger" );
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 1, 'one protected part, top most' );
+ is( $parts[0]->{'Type'}, 'signed', "have signed part" );
+ is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" );
+ is( $parts[0]->{'Top'}, $entity, "it's the same entity" );
+}
+
+diag 'find signed/encrypted part deep inside' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 );
+ ok( !$res{'exit_code'}, "success" );
+ $entity->make_multipart( 'mixed', Force => 1 );
+ $entity->attach(
+ Type => 'text/plain',
+ Data => ['-'x76, 'this is mailing list'],
+ );
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 1, 'one protected part' );
+ is( $parts[0]->{'Type'}, 'encrypted', "have encrypted part" );
+ is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" );
+ is( $parts[0]->{'Top'}, $entity->parts(0), "it's the same entity" );
+}
+
+diag 'wrong signed/encrypted parts: no protocol' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 );
+ ok( !$res{'exit_code'}, 'success' );
+ $entity->head->mime_attr( 'Content-Type.protocol' => undef );
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 0, 'no protected parts' );
+}
+
+diag 'wrong signed/encrypted parts: not enought parts' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 );
+ ok( !$res{'exit_code'}, 'success' );
+ $entity->parts([ $entity->parts(0) ]);
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 0, 'no protected parts' );
+}
+
+diag 'wrong signed/encrypted parts: wrong proto' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 );
+ ok( !$res{'exit_code'}, 'success' );
+ $entity->head->mime_attr( 'Content-Type.protocol' => 'application/bad-proto' );
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 0, 'no protected parts' );
+}
+
+diag 'wrong signed/encrypted parts: wrong proto' if $ENV{'TEST_VERBOSE'};
+{
+ my $entity = MIME::Entity->build(
+ From => 'rt@example.com',
+ To => 'rt@example.com',
+ Subject => 'test',
+ Data => ['test'],
+ );
+ my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' );
+ ok( !$res{'exit_code'}, 'success' );
+ $entity->head->mime_attr( 'Content-Type.protocol' => 'application/bad-proto' );
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 0, 'no protected parts' );
+}
+
+diag 'verify inline and in attachment signatures' if $ENV{'TEST_VERBOSE'};
+{
+ open my $fh, "$homedir/signed_old_style_with_attachment.eml";
+ my $parser = new MIME::Parser;
+ my $entity = $parser->parse( $fh );
+
+ my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity );
+ is( scalar @parts, 2, 'two protected parts' );
+ is( $parts[1]->{'Type'}, 'signed', "have signed part" );
+ is( $parts[1]->{'Format'}, 'Inline', "inline format" );
+ is( $parts[1]->{'Data'}, $entity->parts(0), "it's first part" );
+
+ is( $parts[0]->{'Type'}, 'signed', "have signed part" );
+ is( $parts[0]->{'Format'}, 'Attachment', "attachment format" );
+ is( $parts[0]->{'Data'}, $entity->parts(1), "data in second part" );
+ is( $parts[0]->{'Signature'}, $entity->parts(2), "file's signature in third part" );
+
+ my @res = RT::Crypt::GnuPG::VerifyDecrypt( Entity => $entity );
+ my @status = RT::Crypt::GnuPG::ParseStatus( $res[0]->{'status'} );
+ is( scalar @status, 1, 'one record');
+ is( $status[0]->{'Operation'}, 'Verify', 'operation is correct');
+ is( $status[0]->{'Status'}, 'DONE', 'good passphrase');
+ is( $status[0]->{'Trust'}, 'ULTIMATE', 'have trust value');
+
+ $parser->filer->purge();
+}
+
diff --git a/rt/t/mail/extractsubjecttag.t b/rt/t/mail/extractsubjecttag.t
new file mode 100644
index 0000000..5a25488
--- /dev/null
+++ b/rt/t/mail/extractsubjecttag.t
@@ -0,0 +1,98 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use utf8;
+
+use RT::Test tests => 14;
+
+
+my ($baseurl, $m) = RT::Test->started_ok;
+RT::Test->set_mail_catcher;
+
+my $queue = RT::Test->load_or_create_queue(
+ Name => 'Regression',
+ CorrespondAddress => 'rt-recipient@example.com',
+ CommentAddress => 'rt-recipient@example.com',
+);
+my $subject_tag = 'Windows/Servers-Desktops';
+ok $queue && $queue->id, 'loaded or created queue';
+
+diag "Set Subject Tag" if $ENV{'TEST_VERBOSE'};
+{
+ is(RT->System->SubjectTag($queue), undef, 'No Subject Tag yet');
+ my ($status, $msg) = $queue->SetSubjectTag( $subject_tag );
+ ok $status, "set subject tag for the queue" or diag "error: $msg";
+ is(RT->System->SubjectTag($queue), $subject_tag, "Set Subject Tag to $subject_tag");
+}
+
+my $original_ticket = RT::Ticket->new( $RT::SystemUser );
+diag "Create a ticket and make sure it has the subject tag" if $ENV{'TEST_VERBOSE'};
+{
+ $original_ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ Requestor => 'root@localhost'
+ );
+ my @mails = RT::Test->fetch_caught_mails;
+ ok @mails, "got some outgoing emails";
+
+ my $status = 1;
+ foreach my $mail ( @mails ) {
+ my $entity = parse_mail( $mail );
+ my $subject = $entity->head->get('Subject');
+ $subject =~ /\[\Q$subject_tag\E #\d+\]/
+ or do { $status = 0; diag "wrong subject: $subject" };
+ }
+ ok $status, "Correctly added subject tag to ticket";
+}
+
+
+diag "Test that a reply with a Subject Tag doesn't change the subject" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticketid = $original_ticket->Id;
+ my $text = <<EOF;
+From: root\@localhost
+To: general\@$RT::rtname
+Subject: [$subject_tag #$ticketid] test
+
+reply with subject tag
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text, queue => $queue->Name);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ is ($id, $ticketid, "Replied to ticket $id correctly");
+
+ my $freshticket = RT::Ticket->new( $RT::SystemUser );
+ $freshticket->LoadById($id);
+ is($original_ticket->Subject,$freshticket->Subject,'Stripped Queue Subject Tag correctly');
+
+}
+
+diag "Test that a reply with another RT's subject tag changes the subject" if $ENV{'TEST_VERBOSE'};
+{
+ my $ticketid = $original_ticket->Id;
+ my $text = <<EOF;
+From: root\@localhost
+To: general\@$RT::rtname
+Subject: [$subject_tag #$ticketid] [remote-rt-system #79] test
+
+reply with subject tag and remote rt subject tag
+EOF
+ diag($text);
+ my ($status, $id) = RT::Test->send_via_mailgate($text, queue => $queue->Name);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ is ($id, $ticketid, "Replied to ticket $id correctly");
+
+ my $freshticket = RT::Ticket->new( $RT::SystemUser );
+ $freshticket->LoadById($id);
+ like($freshticket->Subject,qr/\[remote-rt-system #79\]/,"Kept remote rt's subject tag");
+ unlike($freshticket->Subject,qr/\[\Q$subject_tag\E #$ticketid\]/,'Stripped Queue Subject Tag correctly');
+
+}
+
+sub parse_mail {
+ my $mail = shift;
+ require RT::EmailParser;
+ my $parser = new RT::EmailParser;
+ $parser->ParseMIMEEntityFromScalar( $mail );
+ return $parser->Entity;
+}
diff --git a/rt/t/mail/gateway.t b/rt/t/mail/gateway.t
new file mode 100644
index 0000000..00de1ec
--- /dev/null
+++ b/rt/t/mail/gateway.t
@@ -0,0 +1,802 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
+# <jesse.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/copyleft/gpl.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 }}}
+
+=head1 NAME
+
+rt-mailgate - Mail interface to RT3.
+
+=cut
+
+use strict;
+use warnings;
+
+
+use RT::Test config => 'Set( $UnsafeEmailCommands, 1);', tests => 159;
+my ($baseurl, $m) = RT::Test->started_ok;
+
+use RT::Tickets;
+
+use MIME::Entity;
+use Digest::MD5 qw(md5_base64);
+use LWP::UserAgent;
+
+# TODO: --extension queue
+
+my $url = $m->rt_base_url;
+
+diag "Make sure that when we call the mailgate without URL, it fails" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of new ticket creation
+
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text, url => undef);
+ is ($status >> 8, 1, "The mail gateway exited with a failure");
+ ok (!$id, "No ticket id") or diag "by mistake ticket #$id";
+}
+
+diag "Make sure that when we call the mailgate with wrong URL, it tempfails" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of new ticket creation
+
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text, url => 'http://this.test.for.non-connection.is.expected.to.generate.an.error');
+ is ($status >> 8, 75, "The mail gateway exited with a failure");
+ ok (!$id, "No ticket id");
+}
+
+my $everyone_group;
+diag "revoke rights tests depend on" if $ENV{'TEST_VERBOSE'};
+{
+ $everyone_group = RT::Group->new( $RT::SystemUser );
+ $everyone_group->LoadSystemInternalGroup( 'Everyone' );
+ ok ($everyone_group->Id, "Found group 'everyone'");
+
+ foreach( qw(CreateTicket ReplyToTicket CommentOnTicket) ) {
+ $everyone_group->PrincipalObj->RevokeRight(Right => $_);
+ }
+}
+
+diag "Test new ticket creation by root who is privileged and superuser" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of new ticket creation
+
+Blah!
+Foob!
+EOF
+
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "Created ticket");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ is ($tick->Id, $id, "correct ticket id");
+ is ($tick->Subject , 'This is a test of new ticket creation', "Created the ticket");
+}
+
+diag "Test the 'X-RT-Mail-Extension' field in the header of a ticket" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of the X-RT-Mail-Extension field
+Blah!
+Foob!
+EOF
+ local $ENV{'EXTENSION'} = "bad value with\nnewlines\n";
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "Created ticket #$id");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ is ($tick->Id, $id, "correct ticket id");
+ is ($tick->Subject, 'This is a test of the X-RT-Mail-Extension field', "Created the ticket");
+
+ my $transactions = $tick->Transactions;
+ $transactions->OrderByCols({ FIELD => 'id', ORDER => 'DESC' });
+ $transactions->Limit( FIELD => 'Type', OPERATOR => '!=', VALUE => 'EmailRecord');
+ my $txn = $transactions->First;
+ isa_ok ($txn, 'RT::Transaction');
+ is ($txn->Type, 'Create', "correct type");
+
+ my $attachment = $txn->Attachments->First;
+ isa_ok ($attachment, 'RT::Attachment');
+ # XXX: We eat all newlines in header, that's not what RFC's suggesting
+ is (
+ $attachment->GetHeader('X-RT-Mail-Extension'),
+ "bad value with newlines",
+ 'header is in place, without trailing newline char'
+ );
+}
+
+diag "Make sure that not standard --extension is passed" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of new ticket creation
+
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text, extension => 'some-extension-arg' );
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "Created ticket #$id");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ is ($tick->Id, $id, "correct ticket id");
+
+ my $transactions = $tick->Transactions;
+ $transactions->OrderByCols({ FIELD => 'id', ORDER => 'DESC' });
+ $transactions->Limit( FIELD => 'Type', OPERATOR => '!=', VALUE => 'EmailRecord');
+ my $txn = $transactions->First;
+ isa_ok ($txn, 'RT::Transaction');
+ is ($txn->Type, 'Create', "correct type");
+
+ my $attachment = $txn->Attachments->First;
+ isa_ok ($attachment, 'RT::Attachment');
+ is (
+ $attachment->GetHeader('X-RT-Mail-Extension'),
+ 'some-extension-arg',
+ 'header is in place'
+ );
+}
+
+diag "Test new ticket creation without --action argument" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rt\@$RT::rtname
+Subject: using mailgate without --action arg
+
+Blah!
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text, extension => 'some-extension-arg' );
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "Created ticket #$id");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ is ($tick->Id, $id, "correct ticket id");
+ is ($tick->Subject, 'using mailgate without --action arg', "using mailgate without --action arg");
+}
+
+diag "This is a test of new ticket creation as an unknown user" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of new ticket creation as an unknown user
+
+Blah!
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok (!$id, "no ticket created");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ".$tick->Id);
+ isnt ($tick->Subject , 'This is a test of new ticket creation as an unknown user', "failed to create the new ticket from an unprivileged account");
+
+ my $u = RT::User->new($RT::SystemUser);
+ $u->Load("doesnotexist\@@{[RT->Config->Get('rtname')]}");
+ ok( !$u->Id, "user does not exist and was not created by failed ticket submission");
+}
+
+diag "grant everybody with CreateTicket right" if $ENV{'TEST_VERBOSE'};
+{
+ ok( RT::Test->set_rights(
+ { Principal => $everyone_group->PrincipalObj,
+ Right => [qw(CreateTicket)],
+ },
+ ), "Granted everybody the right to create tickets");
+}
+
+my $ticket_id;
+diag "now everybody can create tickets. can a random unkown user create tickets?" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of new ticket creation as an unknown user
+
+Blah!
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "ticket created");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ".$tick->Id);
+ is ($tick->Id, $id, "correct ticket id");
+ is ($tick->Subject , 'This is a test of new ticket creation as an unknown user', "failed to create the new ticket from an unprivileged account");
+
+ my $u = RT::User->new( $RT::SystemUser );
+ $u->Load( "doesnotexist\@@{[RT->Config->Get('rtname')]}" );
+ ok ($u->Id, "user does not exist and was created by ticket submission");
+ $ticket_id = $id;
+}
+
+diag "can another random reply to a ticket without being granted privs? answer should be no." if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist-2\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: [@{[RT->Config->Get('rtname')]} #$ticket_id] This is a test of a reply as an unknown user
+
+Blah! (Should not work.)
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok (!$id, "no way to reply to the ticket");
+
+ my $u = RT::User->new($RT::SystemUser);
+ $u->Load('doesnotexist-2@'.RT->Config->Get('rtname'));
+ ok( !$u->Id, " user does not exist and was not created by ticket correspondence submission");
+}
+
+diag "grant everyone 'ReplyToTicket' right" if $ENV{'TEST_VERBOSE'};
+{
+ ok( RT::Test->set_rights(
+ { Principal => $everyone_group->PrincipalObj,
+ Right => [qw(CreateTicket ReplyToTicket)],
+ },
+ ), "Granted everybody the right to reply to tickets" );
+}
+
+diag "can another random reply to a ticket after being granted privs? answer should be yes" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist-2\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: [@{[RT->Config->Get('rtname')]} #$ticket_id] This is a test of a reply as an unknown user
+
+Blah!
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ is ($id, $ticket_id, "replied to the ticket");
+
+ my $u = RT::User->new($RT::SystemUser);
+ $u->Load('doesnotexist-2@'.RT->Config->Get('rtname'));
+ ok ($u->Id, "user exists and was created by ticket correspondence submission");
+}
+
+diag "add a reply to the ticket using '--extension ticket' feature" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist-2\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of a reply as an unknown user
+
+Blah!
+Foob!
+EOF
+ local $ENV{'EXTENSION'} = $ticket_id;
+ my ($status, $id) = RT::Test->send_via_mailgate($text, extension => 'ticket');
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ is ($id, $ticket_id, "replied to the ticket");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ".$tick->Id);
+ is ($tick->Id, $id, "correct ticket id");
+
+ my $transactions = $tick->Transactions;
+ $transactions->OrderByCols({ FIELD => 'id', ORDER => 'DESC' });
+ $transactions->Limit( FIELD => 'Type', OPERATOR => '!=', VALUE => 'EmailRecord');
+ my $txn = $transactions->First;
+ isa_ok ($txn, 'RT::Transaction');
+ is ($txn->Type, 'Correspond', "correct type");
+
+ my $attachment = $txn->Attachments->First;
+ isa_ok ($attachment, 'RT::Attachment');
+ is ($attachment->GetHeader('X-RT-Mail-Extension'), $id, 'header is in place');
+}
+
+diag "can another random comment on a ticket without being granted privs? answer should be no" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist-3\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: [@{[RT->Config->Get('rtname')]} #$ticket_id] This is a test of a comment as an unknown user
+
+Blah! (Should not work.)
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text, action => 'comment');
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok (!$id, "no way to comment on the ticket");
+
+ my $u = RT::User->new($RT::SystemUser);
+ $u->Load('doesnotexist-3@'.RT->Config->Get('rtname'));
+ ok( !$u->Id, " user does not exist and was not created by ticket comment submission");
+}
+
+
+diag "grant everyone 'CommentOnTicket' right" if $ENV{'TEST_VERBOSE'};
+{
+ ok( RT::Test->set_rights(
+ { Principal => $everyone_group->PrincipalObj,
+ Right => [qw(CreateTicket ReplyToTicket CommentOnTicket)],
+ },
+ ), "Granted everybody the right to comment on tickets");
+}
+
+diag "can another random reply to a ticket after being granted privs? answer should be yes" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist-3\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: [@{[RT->Config->Get('rtname')]} #$ticket_id] This is a test of a comment as an unknown user
+
+Blah!
+Foob!
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text, action => 'comment');
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ is ($id, $ticket_id, "replied to the ticket");
+
+ my $u = RT::User->new($RT::SystemUser);
+ $u->Load('doesnotexist-3@'.RT->Config->Get('rtname'));
+ ok ($u->Id, " user exists and was created by ticket comment submission");
+}
+
+diag "add comment to the ticket using '--extension action' feature" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: doesnotexist-3\@@{[RT->Config->Get('rtname')]}
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: [@{[RT->Config->Get('rtname')]} #$ticket_id] This is a test of a comment via '--extension action'
+
+Blah!
+Foob!
+EOF
+ local $ENV{'EXTENSION'} = 'comment';
+ my ($status, $id) = RT::Test->send_via_mailgate($text, extension => 'action');
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ is ($id, $ticket_id, "added comment to the ticket");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ".$tick->Id);
+ is ($tick->Id, $id, "correct ticket id");
+
+ my $transactions = $tick->Transactions;
+ $transactions->OrderByCols({ FIELD => 'id', ORDER => 'DESC' });
+ $transactions->Limit(
+ FIELD => 'Type',
+ OPERATOR => 'NOT ENDSWITH',
+ VALUE => 'EmailRecord',
+ ENTRYAGGREGATOR => 'AND',
+ );
+ my $txn = $transactions->First;
+ isa_ok ($txn, 'RT::Transaction');
+ is ($txn->Type, 'Comment', "correct type");
+
+ my $attachment = $txn->Attachments->First;
+ isa_ok ($attachment, 'RT::Attachment');
+ is ($attachment->GetHeader('X-RT-Mail-Extension'), 'comment', 'header is in place');
+}
+
+diag "Testing preservation of binary attachments" if $ENV{'TEST_VERBOSE'};
+{
+ # Get a binary blob (Best Practical logo)
+ my $LOGO_FILE = $RT::MasonComponentRoot .'/NoAuth/images/bplogo.gif';
+
+ # Create a mime entity with an attachment
+ my $entity = MIME::Entity->build(
+ From => 'root@localhost',
+ To => 'rt@localhost',
+ Subject => 'binary attachment test',
+ Data => ['This is a test of a binary attachment'],
+ );
+
+ $entity->attach(
+ Path => $LOGO_FILE,
+ Type => 'image/gif',
+ Encoding => 'base64',
+ );
+ # Create a ticket with a binary attachment
+ my ($status, $id) = RT::Test->send_via_mailgate($entity);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "created ticket");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ".$tick->Id);
+ is ($tick->Id, $id, "correct ticket id");
+ is ($tick->Subject , 'binary attachment test', "Created the ticket - ".$tick->Id);
+
+ my $file = `cat $LOGO_FILE`;
+ ok ($file, "Read in the logo image");
+ diag "for the raw file the md5 hex is ". Digest::MD5::md5_hex($file) if $ENV{'TEST_VERBOSE'};
+
+ # Verify that the binary attachment is valid in the database
+ my $attachments = RT::Attachments->new($RT::SystemUser);
+ $attachments->Limit(FIELD => 'ContentType', VALUE => 'image/gif');
+ my $txn_alias = $attachments->Join(
+ ALIAS1 => 'main',
+ FIELD1 => 'TransactionId',
+ TABLE2 => 'Transactions',
+ FIELD2 => 'id',
+ );
+ $attachments->Limit( ALIAS => $txn_alias, FIELD => 'ObjectType', VALUE => 'RT::Ticket' );
+ $attachments->Limit( ALIAS => $txn_alias, FIELD => 'ObjectId', VALUE => $id );
+ is ($attachments->Count, 1, 'Found only one gif attached to the ticket');
+ my $attachment = $attachments->First;
+ ok ($attachment->Id, 'loaded attachment object');
+ my $acontent = $attachment->Content;
+
+ diag "coming from the database, md5 hex is ".Digest::MD5::md5_hex($acontent) if $ENV{'TEST_VERBOSE'};
+ is ($acontent, $file, 'The attachment isn\'t screwed up in the database.');
+
+ # Grab the binary attachment via the web ui
+ my $ua = new LWP::UserAgent;
+ my $full_url = "$url/Ticket/Attachment/". $attachment->TransactionId
+ ."/". $attachment->id. "/bplogo.gif?&user=root&pass=password";
+ my $r = $ua->get( $full_url );
+
+ # Verify that the downloaded attachment is the same as what we uploaded.
+ is ($file, $r->content, 'The attachment isn\'t screwed up in download');
+}
+
+diag "Simple I18N testing" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rtemail\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of I18N ticket creation
+Content-Type: text/plain; charset="utf-8"
+
+2 accented lines
+\303\242\303\252\303\256\303\264\303\273
+\303\241\303\251\303\255\303\263\303\272
+bye
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "created ticket");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ". $tick->Id);
+ is ($tick->Id, $id, "correct ticket");
+ is ($tick->Subject , 'This is a test of I18N ticket creation', "Created the ticket - ". $tick->Subject);
+
+ my $unistring = "\303\241\303\251\303\255\303\263\303\272";
+ Encode::_utf8_on($unistring);
+ is (
+ $tick->Transactions->First->Content,
+ $tick->Transactions->First->Attachments->First->Content,
+ "Content is ". $tick->Transactions->First->Attachments->First->Content
+ );
+ ok (
+ $tick->Transactions->First->Content =~ /$unistring/i,
+ $tick->Id." appears to be unicode ". $tick->Transactions->First->Attachments->First->Id
+ );
+}
+
+diag "supposedly I18N fails on the second message sent in." if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+To: rtemail\@@{[RT->Config->Get('rtname')]}
+Subject: This is a test of I18N ticket creation
+Content-Type: text/plain; charset="utf-8"
+
+2 accented lines
+\303\242\303\252\303\256\303\264\303\273
+\303\241\303\251\303\255\303\263\303\272
+bye
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "created ticket");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ". $tick->Id);
+ is ($tick->Id, $id, "correct ticket");
+ is ($tick->Subject , 'This is a test of I18N ticket creation', "Created the ticket");
+
+ my $unistring = "\303\241\303\251\303\255\303\263\303\272";
+ Encode::_utf8_on($unistring);
+
+ ok (
+ $tick->Transactions->First->Content =~ $unistring,
+ "It appears to be unicode - ". $tick->Transactions->First->Content
+ );
+}
+
+diag "check that mailgate doesn't suffer from empty Reply-To:" if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+Reply-To:
+To: rtemail\@@{[RT->Config->Get('rtname')]}
+Subject: test
+Content-Type: text/plain; charset="utf-8"
+
+test
+EOF
+ my ($status, $id) = RT::Test->send_via_mailgate($text);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "created ticket");
+
+ my $tick = RT::Test->last_ticket;
+ isa_ok ($tick, 'RT::Ticket');
+ ok ($tick->Id, "found ticket ". $tick->Id);
+ is ($tick->Id, $id, "correct ticket");
+
+ like $tick->RequestorAddresses, qr/root\@localhost/, 'correct requestor';
+}
+
+
+my ($val,$msg) = $everyone_group->PrincipalObj->RevokeRight(Right => 'CreateTicket');
+ok ($val, $msg);
+
+SKIP: {
+skip "Advanced mailgate actions require an unsafe configuration", 47
+ unless RT->Config->Get('UnsafeEmailCommands');
+
+# create new queue to be shure we don't mess with rights
+use RT::Queue;
+my $queue = RT::Queue->new($RT::SystemUser);
+my ($qid) = $queue->Create( Name => 'ext-mailgate');
+ok( $qid, 'queue created for ext-mailgate tests' );
+
+# {{{ Check take and resolve actions
+
+# create ticket that is owned by nobody
+use RT::Ticket;
+my $tick = RT::Ticket->new($RT::SystemUser);
+my ($id) = $tick->Create( Queue => 'ext-mailgate', Subject => 'test');
+ok( $id, 'new ticket created' );
+is( $tick->Owner, $RT::Nobody->Id, 'owner of the new ticket is nobody' );
+
+$! = 0;
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: root\@localhost
+Subject: [@{[RT->Config->Get('rtname')]} \#$id] test
+
+EOF
+close (MAIL);
+is ($? >> 8, 0, "The mail gateway exited normally");
+
+$tick = RT::Ticket->new($RT::SystemUser);
+$tick->Load( $id );
+is( $tick->Id, $id, 'load correct ticket');
+is( $tick->OwnerObj->EmailAddress, 'root@localhost', 'successfuly take ticket via email');
+
+# check that there is no text transactions writen
+is( $tick->Transactions->Count, 2, 'no superfluous transactions');
+
+my $status;
+($status, $msg) = $tick->SetOwner( $RT::Nobody->Id, 'Force' );
+ok( $status, 'successfuly changed owner: '. ($msg||'') );
+is( $tick->Owner, $RT::Nobody->Id, 'set owner back to nobody');
+
+
+$! = 0;
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take-correspond"), "Opened the mailgate - $@");
+print MAIL <<EOF;
+From: root\@localhost
+Subject: [@{[RT->Config->Get('rtname')]} \#$id] correspondence
+
+test
+EOF
+close (MAIL);
+is ($? >> 8, 0, "The mail gateway exited normally");
+
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+$tick = RT::Ticket->new($RT::SystemUser);
+$tick->Load( $id );
+is( $tick->Id, $id, "load correct ticket #$id");
+is( $tick->OwnerObj->EmailAddress, 'root@localhost', 'successfuly take ticket via email');
+my $txns = $tick->Transactions;
+$txns->Limit( FIELD => 'Type', VALUE => 'Correspond');
+$txns->OrderBy( FIELD => 'id', ORDER => 'DESC' );
+# +1 because of auto open
+is( $tick->Transactions->Count, 6, 'no superfluous transactions');
+is( $txns->First->Subject, "[$RT::rtname \#$id] correspondence", 'successfuly add correspond within take via email' );
+
+$! = 0;
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action resolve"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: root\@localhost
+Subject: [@{[RT->Config->Get('rtname')]} \#$id] test
+
+EOF
+close (MAIL);
+is ($? >> 8, 0, "The mail gateway exited normally");
+
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+$tick = RT::Ticket->new($RT::SystemUser);
+$tick->Load( $id );
+is( $tick->Id, $id, 'load correct ticket');
+is( $tick->Status, 'resolved', 'successfuly resolved ticket via email');
+is( $tick->Transactions->Count, 7, 'no superfluous transactions');
+
+use RT::User;
+my $user = RT::User->new( $RT::SystemUser );
+my ($uid) = $user->Create( Name => 'ext-mailgate',
+ EmailAddress => 'ext-mailgate@localhost',
+ Privileged => 1,
+ Password => 'qwe123',
+ );
+ok( $uid, 'user created for ext-mailgate tests' );
+ok( !$user->HasRight( Right => 'OwnTicket', Object => $queue ), "User can't own ticket" );
+
+$tick = RT::Ticket->new($RT::SystemUser);
+($id) = $tick->Create( Queue => $qid, Subject => 'test' );
+ok( $id, 'create new ticket' );
+
+my $rtname = RT->Config->Get('rtname');
+
+$! = 0;
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [$rtname \#$id] test
+
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+cmp_ok( $tick->Owner, '!=', $user->id, "we didn't change owner" );
+
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'ReplyToTicket' );
+ok( $status, "successfuly granted right: $msg" );
+my $ace_id = $status;
+ok( $user->HasRight( Right => 'ReplyToTicket', Object => $tick ), "User can reply to ticket" );
+
+$! = 0;
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action correspond-take"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [$rtname \#$id] test
+
+correspond-take
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+cmp_ok( $tick->Owner, '!=', $user->id, "we didn't change owner" );
+is( $tick->Transactions->Count, 3, "one transactions added" );
+
+$! = 0;
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take-correspond"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [$rtname \#$id] test
+
+correspond-take
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+cmp_ok( $tick->Owner, '!=', $user->id, "we didn't change owner" );
+is( $tick->Transactions->Count, 3, "no transactions added, user can't take ticket first" );
+
+# revoke ReplyToTicket right
+use RT::ACE;
+my $ace = RT::ACE->new($RT::SystemUser);
+$ace->Load( $ace_id );
+$ace->Delete;
+my $acl = RT::ACL->new($RT::SystemUser);
+$acl->Limit( FIELD => 'RightName', VALUE => 'ReplyToTicket' );
+$acl->LimitToObject( $RT::System );
+while( my $ace = $acl->Next ) {
+ $ace->Delete;
+}
+
+ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $tick ), "User can't reply to ticket any more" );
+
+
+my $group = RT::Group->new( $RT::SystemUser );
+ok( $group->LoadQueueRoleGroup( Queue => $qid, Type=> 'Owner' ), "load queue owners role group" );
+$ace = RT::ACE->new( $RT::SystemUser );
+($ace_id, $msg) = $group->PrincipalObj->GrantRight( Right => 'ReplyToTicket', Object => $queue );
+ok( $ace_id, "Granted queue owners role group with ReplyToTicket right" );
+
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'OwnTicket' );
+ok( $status, "successfuly granted right: $msg" );
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'TakeTicket' );
+ok( $status, "successfuly granted right: $msg" );
+
+$! = 0;
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take-correspond"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [$rtname \#$id] test
+
+take-correspond with reply right granted to owner role
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+$tick->Load( $id );
+is( $tick->Owner, $user->id, "we changed owner" );
+ok( $user->HasRight( Right => 'ReplyToTicket', Object => $tick ), "owner can reply to ticket" );
+is( $tick->Transactions->Count, 5, "transactions added" );
+
+
+# }}}
+};
+
+
+1;
+
diff --git a/rt/t/mail/gnupg-bad.t b/rt/t/mail/gnupg-bad.t
new file mode 100644
index 0000000..2d8e035
--- /dev/null
+++ b/rt/t/mail/gnupg-bad.t
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use RT::Test tests => 6;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use Cwd 'getcwd';
+
+my $homedir = RT::Test::get_abs_relocatable_dir(File::Spec->updir(),
+ qw(data gnupg keyrings));
+
+RT->Config->Set( 'GnuPG',
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC' );
+
+RT->Config->Set( 'GnuPGOptions',
+ homedir => $homedir,
+ passphrase => 'test',
+ 'no-permission-warning' => undef);
+
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+my ($baseurl, $m) = RT::Test->started_ok;
+
+$m->get( $baseurl."?user=root;pass=password" );
+$m->content_like(qr/Logout/, 'we did log in');
+$m->get( $baseurl.'/Admin/Queues/');
+$m->follow_link_ok( {text => 'General'} );
+$m->submit_form( form_number => 3,
+ fields => { CorrespondAddress => 'rt@example.com' } );
+$m->content_like(qr/rt\@example.com.* - never/, 'has key info.');
+
+ok(my $user = RT::User->new($RT::SystemUser));
+ok($user->Load('root'), "Loaded user 'root'");
+$user->SetEmailAddress('rt@example.com');
+
+if (0) {
+ # XXX: need to generate these mails
+ diag "no signature" if $ENV{TEST_VERBOSE};
+ diag "no encryption on encrypted queue" if $ENV{TEST_VERBOSE};
+ diag "mismatched signature" if $ENV{TEST_VERBOSE};
+ diag "unknown public key" if $ENV{TEST_VERBOSE};
+ diag "unknown private key" if $ENV{TEST_VERBOSE};
+ diag "signer != sender" if $ENV{TEST_VERBOSE};
+ diag "encryption to user whose pubkey is not signed" if $ENV{TEST_VERBOSE};
+ diag "no encryption of attachment on encrypted queue" if $ENV{TEST_VERBOSE};
+ diag "no signature of attachment" if $ENV{TEST_VERBOSE};
+ diag "revoked key" if $ENV{TEST_VERBOSE};
+ diag "expired key" if $ENV{TEST_VERBOSE};
+ diag "unknown algorithm" if $ENV{TEST_VERBOSE};
+}
+
diff --git a/rt/t/mail/gnupg-incoming.t b/rt/t/mail/gnupg-incoming.t
new file mode 100644
index 0000000..ec31333
--- /dev/null
+++ b/rt/t/mail/gnupg-incoming.t
@@ -0,0 +1,320 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use RT::Test tests => 39;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use File::Temp;
+use Cwd 'getcwd';
+use String::ShellQuote 'shell_quote';
+use IPC::Run3 'run3';
+
+my $homedir = RT::Test::get_abs_relocatable_dir(File::Spec->updir(),
+ qw(data gnupg keyrings));
+
+# catch any outgoing emails
+RT::Test->set_mail_catcher;
+
+RT->Config->Set( 'GnuPG',
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC' );
+
+RT->Config->Set( 'GnuPGOptions',
+ homedir => $homedir,
+ 'no-permission-warning' => undef);
+
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+my ($baseurl, $m) = RT::Test->started_ok;
+
+# configure key for General queue
+$m->get( $baseurl."?user=root;pass=password" );
+$m->content_like(qr/Logout/, 'we did log in');
+$m->get( $baseurl.'/Admin/Queues/');
+$m->follow_link_ok( {text => 'General'} );
+$m->submit_form( form_number => 3,
+ fields => { CorrespondAddress => 'general@example.com' } );
+$m->content_like(qr/general\@example.com.* - never/, 'has key info.');
+
+ok(my $user = RT::User->new($RT::SystemUser));
+ok($user->Load('root'), "Loaded user 'root'");
+$user->SetEmailAddress('recipient@example.com');
+
+# test simple mail. supposedly this should fail when
+# 1. the queue requires signature
+# 2. the from is not what the key is associated with
+my $mail = RT::Test->open_mailgate_ok($baseurl);
+print $mail <<EOF;
+From: recipient\@example.com
+To: general\@$RT::rtname
+Subject: This is a test of new ticket creation as root
+
+Blah!
+Foob!
+EOF
+RT::Test->close_mailgate_ok($mail);
+
+{
+ my $tick = RT::Test->last_ticket;
+ is( $tick->Subject,
+ 'This is a test of new ticket creation as root',
+ "Created the ticket"
+ );
+ my $txn = $tick->Transactions->First;
+ like(
+ $txn->Attachments->First->Headers,
+ qr/^X-RT-Incoming-Encryption: Not encrypted/m,
+ 'recorded incoming mail that is not encrypted'
+ );
+ like( $txn->Attachments->First->Content, qr'Blah');
+}
+
+# test for signed mail
+my $buf = '';
+
+run3(
+ shell_quote(
+ qw(gpg --armor --sign),
+ '--default-key' => 'recipient@example.com',
+ '--homedir' => $homedir,
+ '--passphrase' => 'recipient',
+ ),
+ \"fnord\r\n",
+ \$buf,
+ \*STDOUT
+);
+
+$mail = RT::Test->open_mailgate_ok($baseurl);
+print $mail <<"EOF";
+From: recipient\@example.com
+To: general\@$RT::rtname
+Subject: signed message for queue
+
+$buf
+EOF
+RT::Test->close_mailgate_ok($mail);
+
+{
+ my $tick = RT::Test->last_ticket;
+ is( $tick->Subject, 'signed message for queue',
+ "Created the ticket"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, $attach) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Not encrypted',
+ 'recorded incoming mail that is encrypted'
+ );
+ # test for some kind of PGP-Signed-By: Header
+ like( $attach->Content, qr'fnord');
+}
+
+# test for clear-signed mail
+$buf = '';
+
+run3(
+ shell_quote(
+ qw(gpg --armor --sign --clearsign),
+ '--default-key' => 'recipient@example.com',
+ '--homedir' => $homedir,
+ '--passphrase' => 'recipient',
+ ),
+ \"clearfnord\r\n",
+ \$buf,
+ \*STDOUT
+);
+
+$mail = RT::Test->open_mailgate_ok($baseurl);
+print $mail <<"EOF";
+From: recipient\@example.com
+To: general\@$RT::rtname
+Subject: signed message for queue
+
+$buf
+EOF
+RT::Test->close_mailgate_ok($mail);
+
+{
+ my $tick = RT::Test->last_ticket;
+ is( $tick->Subject, 'signed message for queue',
+ "Created the ticket"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, $attach) = @{$txn->Attachments->ItemsArrayRef};
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Not encrypted',
+ 'recorded incoming mail that is encrypted'
+ );
+ # test for some kind of PGP-Signed-By: Header
+ like( $attach->Content, qr'clearfnord');
+}
+
+# test for signed and encrypted mail
+$buf = '';
+
+run3(
+ shell_quote(
+ qw(gpg --encrypt --armor --sign),
+ '--recipient' => 'general@example.com',
+ '--default-key' => 'recipient@example.com',
+ '--homedir' => $homedir,
+ '--passphrase' => 'recipient',
+ ),
+ \"orzzzzzz\r\n",
+ \$buf,
+ \*STDOUT
+);
+
+$mail = RT::Test->open_mailgate_ok($baseurl);
+print $mail <<"EOF";
+From: recipient\@example.com
+To: general\@$RT::rtname
+Subject: Encrypted message for queue
+
+$buf
+EOF
+RT::Test->close_mailgate_ok($mail);
+
+{
+ my $tick = RT::Test->last_ticket;
+ is( $tick->Subject, 'Encrypted message for queue',
+ "Created the ticket"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, $attach, $orig) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Success',
+ 'recorded incoming mail that is encrypted'
+ );
+ is( $msg->GetHeader('X-RT-Privacy'),
+ 'PGP',
+ 'recorded incoming mail that is encrypted'
+ );
+ like( $attach->Content, qr'orz');
+
+ is( $orig->GetHeader('Content-Type'), 'application/x-rt-original-message');
+ ok(index($orig->Content, $buf) != -1, 'found original msg');
+}
+
+# test for signed mail by other key
+$buf = '';
+
+run3(
+ shell_quote(
+ qw(gpg --armor --sign),
+ '--default-key' => 'rt@example.com',
+ '--homedir' => $homedir,
+ '--passphrase' => 'test',
+ ),
+ \"alright\r\n",
+ \$buf,
+ \*STDOUT
+);
+
+$mail = RT::Test->open_mailgate_ok($baseurl);
+print $mail <<"EOF";
+From: recipient\@example.com
+To: general\@$RT::rtname
+Subject: signed message for queue
+
+$buf
+EOF
+RT::Test->close_mailgate_ok($mail);
+
+{
+ my $tick = RT::Test->last_ticket;
+ my $txn = $tick->Transactions->First;
+ my ($msg, $attach) = @{$txn->Attachments->ItemsArrayRef};
+ # XXX: in this case, which credential should we be using?
+ is( $msg->GetHeader('X-RT-Incoming-Signature'),
+ 'Test User <rt@example.com>',
+ 'recorded incoming mail signed by others'
+ );
+}
+
+# test for encrypted mail with key not associated to the queue
+$buf = '';
+
+run3(
+ shell_quote(
+ qw(gpg --armor --encrypt),
+ '--recipient' => 'random@localhost',
+ '--homedir' => $homedir,
+ ),
+ \"should not be there either\r\n",
+ \$buf,
+ \*STDOUT
+);
+
+$mail = RT::Test->open_mailgate_ok($baseurl);
+print $mail <<"EOF";
+From: recipient\@example.com
+To: general\@$RT::rtname
+Subject: encrypted message for queue
+
+$buf
+EOF
+RT::Test->close_mailgate_ok($mail);
+
+{
+ my $tick = RT::Test->last_ticket;
+ my $txn = $tick->Transactions->First;
+ my ($msg, $attach) = @{$txn->Attachments->ItemsArrayRef};
+
+ TODO:
+ {
+ local $TODO = "this test requires keys associated with queues";
+ unlike( $attach->Content, qr'should not be there either');
+ }
+}
+
+# test for badly encrypted mail
+{
+$buf = '';
+
+run3(
+ shell_quote(
+ qw(gpg --armor --encrypt),
+ '--recipient' => 'rt@example.com',
+ '--homedir' => $homedir,
+ ),
+ \"really should not be there either\r\n",
+ \$buf,
+ \*STDOUT
+);
+
+$buf =~ s/PGP MESSAGE/SCREWED UP/g;
+
+RT::Test->fetch_caught_mails;
+
+$mail = RT::Test->open_mailgate_ok($baseurl);
+print $mail <<"EOF";
+From: recipient\@example.com
+To: general\@$RT::rtname
+Subject: encrypted message for queue
+
+$buf
+EOF
+RT::Test->close_mailgate_ok($mail);
+my @mail = RT::Test->fetch_caught_mails;
+is(@mail, 1, 'caught outgoing mail.');
+}
+
+{
+ my $tick = RT::Test->last_ticket;
+ my $txn = $tick->Transactions->First;
+ my ($msg, $attach) = @{$txn->Attachments->ItemsArrayRef};
+ unlike( ($attach ? $attach->Content : ''), qr'really should not be there either');
+}
+
diff --git a/rt/t/mail/gnupg-realmail.t b/rt/t/mail/gnupg-realmail.t
new file mode 100644
index 0000000..de1d958
--- /dev/null
+++ b/rt/t/mail/gnupg-realmail.t
@@ -0,0 +1,184 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use RT::Test tests => 197;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use Digest::MD5 qw(md5_hex);
+
+use File::Temp qw(tempdir);
+my $homedir = tempdir( CLEANUP => 1 );
+
+RT->Config->Set( 'GnuPG',
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC' );
+
+RT->Config->Set( 'GnuPGOptions',
+ homedir => $homedir,
+ passphrase => 'rt-test',
+ 'no-permission-warning' => undef);
+
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+RT::Test->import_gnupg_key('rt-recipient@example.com');
+RT::Test->import_gnupg_key('rt-test@example.com', 'public');
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'we did log in';
+$m->get_ok( '/Admin/Queues/');
+$m->follow_link_ok( {text => 'General'} );
+$m->submit_form( form_number => 3,
+ fields => { CorrespondAddress => 'rt-recipient@example.com' } );
+$m->content_like(qr/rt-recipient\@example.com.* - never/, 'has key info.');
+
+diag "load Everyone group" if $ENV{'TEST_VERBOSE'};
+my $everyone;
+{
+ $everyone = RT::Group->new( $RT::SystemUser );
+ $everyone->LoadSystemInternalGroup('Everyone');
+ ok $everyone->id, "loaded 'everyone' group";
+}
+
+RT::Test->set_rights(
+ Principal => $everyone,
+ Right => ['CreateTicket'],
+);
+
+
+my $eid = 0;
+for my $usage (qw/signed encrypted signed&encrypted/) {
+ for my $format (qw/MIME inline/) {
+ for my $attachment (qw/plain text-attachment binary-attachment/) {
+ ++$eid;
+ diag "Email $eid: $usage, $attachment email with $format format" if $ENV{TEST_VERBOSE};
+ eval { email_ok($eid, $usage, $format, $attachment) };
+ }
+ }
+}
+
+$eid = 18;
+{
+ my ($usage, $format, $attachment) = ('signed', 'inline', 'plain');
+ ++$eid;
+ diag "Email $eid: $usage, $attachment email with $format format" if $ENV{TEST_VERBOSE};
+ eval { email_ok($eid, $usage, $format, $attachment) };
+}
+
+sub email_ok {
+ my ($eid, $usage, $format, $attachment) = @_;
+ diag "email_ok $eid: $usage, $format, $attachment" if $ENV{'TEST_VERBOSE'};
+
+ my $emaildatadir = RT::Test::get_relocatable_dir(File::Spec->updir(),
+ qw(data gnupg emails));
+ my ($file) = glob("$emaildatadir/$eid-*");
+ my $mail = RT::Test->file_content($file);
+
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "$eid: The mail gateway exited normally");
+ ok ($id, "$eid: got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "$eid: loaded ticket #$id");
+
+ is ($tick->Subject,
+ "Test Email ID:$eid",
+ "$eid: Created the ticket"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Privacy'),
+ 'PGP',
+ "$eid: recorded incoming mail that is encrypted"
+ );
+
+ if ($usage =~ /encrypted/) {
+ if ( $format eq 'MIME' || $attachment eq 'plain' ) {
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Success',
+ "$eid: recorded incoming mail that is encrypted"
+ );
+ } else {
+ is( $attachments[0]->GetHeader('X-RT-Incoming-Encryption'),
+ 'Success',
+ "$eid: recorded incoming mail that is encrypted"
+ );
+ is( $attachments[1]->GetHeader('X-RT-Incoming-Encryption'),
+ 'Success',
+ "$eid: recorded incoming mail that is encrypted"
+ );
+ }
+ like( $attachments[0]->Content, qr/ID:$eid/,
+ "$eid: incoming mail did NOT have original body"
+ );
+ }
+ else {
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Not encrypted',
+ "$eid: recorded incoming mail that is not encrypted"
+ );
+ like( $msg->Content || $attachments[0]->Content, qr/ID:$eid/,
+ "$eid: got original content"
+ );
+ }
+
+ if ($usage =~ /signed/) {
+# XXX: FIXME: TODO: 6-signed-inline-with-attachment should be re-generated as it's actually RFC format
+ if ( $format eq 'MIME' || $attachment eq 'plain' || ($format eq 'inline' && $attachment =~ /binary/ && $usage !~ /encrypted/) ) {
+ is( $msg->GetHeader('X-RT-Incoming-Signature'),
+ 'RT Test <rt-test@example.com>',
+ "$eid: recorded incoming mail that is signed"
+ );
+ }
+ else {
+ is( $attachments[0]->GetHeader('X-RT-Incoming-Signature'),
+ 'RT Test <rt-test@example.com>',
+ "$eid: recorded incoming mail that is signed"
+ );
+ is( $attachments[1]->GetHeader('X-RT-Incoming-Signature'),
+ 'RT Test <rt-test@example.com>',
+ "$eid: recorded incoming mail that is signed"
+ );
+ }
+ }
+ else {
+ is( $msg->GetHeader('X-RT-Incoming-Signature'),
+ undef,
+ "$eid: recorded incoming mail that is not signed"
+ );
+ }
+
+ if ($attachment =~ /attachment/) {
+ # signed messages should sign each attachment too
+ if ($usage =~ /signed/) {
+ my $sig = pop @attachments;
+ ok ($sig->Id, "$eid: loaded attachment.sig object");
+ my $acontent = $sig->Content;
+ }
+
+ my ($a) = grep $_->Filename, @attachments;
+ ok ($a && $a->Id, "$eid: found attachment with filename");
+
+ my $acontent = $a->Content;
+ if ($attachment =~ /binary/)
+ {
+ is(md5_hex($acontent), '1e35f1aa90c98ca2bab85c26ae3e1ba7', "$eid: The binary attachment's md5sum matches");
+ }
+ else
+ {
+ like($acontent, qr/zanzibar/, "$eid: The attachment isn't screwed up in the database.");
+ }
+
+ }
+
+ return 0;
+}
+
diff --git a/rt/t/mail/gnupg-reverification.t b/rt/t/mail/gnupg-reverification.t
new file mode 100644
index 0000000..f116d93
--- /dev/null
+++ b/rt/t/mail/gnupg-reverification.t
@@ -0,0 +1,92 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use RT::Test tests => 120;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use File::Temp qw(tempdir);
+my $homedir = tempdir( CLEANUP => 1 );
+
+RT->Config->Set( 'GnuPG',
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC' );
+
+RT->Config->Set( 'GnuPGOptions',
+ homedir => $homedir,
+ passphrase => 'rt-test',
+ 'no-permission-warning' => undef);
+
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+
+diag "load Everyone group" if $ENV{'TEST_VERBOSE'};
+my $everyone;
+{
+ $everyone = RT::Group->new( $RT::SystemUser );
+ $everyone->LoadSystemInternalGroup('Everyone');
+ ok $everyone->id, "loaded 'everyone' group";
+}
+
+RT::Test->set_rights(
+ Principal => $everyone,
+ Right => ['CreateTicket'],
+);
+
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'we get log in';
+
+RT::Test->import_gnupg_key('rt-recipient@example.com');
+
+my @ticket_ids;
+
+my $emaildatadir = RT::Test::get_relocatable_dir(File::Spec->updir(),
+ qw(data gnupg emails));
+my @files = glob("$emaildatadir/*-signed-*");
+foreach my $file ( @files ) {
+ diag "testing $file" if $ENV{'TEST_VERBOSE'};
+
+ my ($eid) = ($file =~ m{(\d+)[^/\\]+$});
+ ok $eid, 'figured id of a file';
+
+ my $email_content = RT::Test->file_content( $file );
+ ok $email_content, "$eid: got content of email";
+
+ my ($status, $id) = RT::Test->send_via_mailgate( $email_content );
+ is $status >> 8, 0, "$eid: the mail gateway exited normally";
+ ok $id, "$eid: got id of a newly created ticket - $id";
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, "$eid: loaded ticket #$id";
+ is $ticket->Subject, "Test Email ID:$eid", "$eid: correct subject";
+
+ $m->goto_ticket( $id );
+ $m->content_like(
+ qr/Not possible to check the signature, the reason is missing public key/is,
+ "$eid: signature is not verified",
+ );
+ $m->content_like(qr/This is .*ID:$eid/ims, "$eid: content is there and message is decrypted");
+
+ push @ticket_ids, $id;
+}
+
+diag "import key into keyring" if $ENV{'TEST_VERBOSE'};
+RT::Test->import_gnupg_key('rt-test@example.com', 'public');
+
+foreach my $id ( @ticket_ids ) {
+ diag "testing ticket #$id" if $ENV{'TEST_VERBOSE'};
+
+ $m->goto_ticket( $id );
+ $m->content_like(
+ qr/The signature is good/is,
+ "signature is re-verified and now good",
+ );
+}
+
diff --git a/rt/t/mail/mime_decoding.t b/rt/t/mail/mime_decoding.t
new file mode 100644
index 0000000..8257aee
--- /dev/null
+++ b/rt/t/mail/mime_decoding.t
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use RT::Test nodata => 1, tests => 6;
+
+use_ok('RT::I18N');
+
+diag q{'=' char in a leading part before an encoded part} if $ENV{TEST_VERBOSE};
+{
+ my $str = 'key="plain"; key="=?UTF-8?B?0LzQvtC5X9GE0LDQudC7LmJpbg==?="';
+ is(
+ RT::I18N::DecodeMIMEWordsToUTF8($str),
+ 'key="plain"; key="мой_файл.bin"',
+ "right decoding"
+ );
+}
+
+diag q{not compliant with standards, but MUAs send such field when attachment has non-ascii in name}
+ if $ENV{TEST_VERBOSE};
+{
+ my $str = 'attachment; filename="=?UTF-8?B?0LzQvtC5X9GE0LDQudC7LmJpbg==?="';
+ is(
+ RT::I18N::DecodeMIMEWordsToUTF8($str),
+ 'attachment; filename="мой_файл.bin"',
+ "right decoding"
+ );
+}
+
+diag q{'=' char in a trailing part after an encoded part} if $ENV{TEST_VERBOSE};
+{
+ my $str = 'attachment; filename="=?UTF-8?B?0LzQvtC5X9GE0LDQudC7LmJpbg==?="; some_prop="value"';
+ is(
+ RT::I18N::DecodeMIMEWordsToUTF8($str),
+ 'attachment; filename="мой_файл.bin"; some_prop="value"',
+ "right decoding"
+ );
+}
+
+diag q{regression test for #5248 from rt3.fsck.com} if $ENV{TEST_VERBOSE};
+{
+ my $str = qq{Subject: =?ISO-8859-1?Q?Re=3A_=5BXXXXXX=23269=5D_=5BComment=5D_Frag?=}
+ . qq{\n =?ISO-8859-1?Q?e_zu_XXXXXX--xxxxxx_/_Xxxxx=FCxxxxxxxxxx?=};
+ is(
+ RT::I18N::DecodeMIMEWordsToUTF8($str),
+ qq{Subject: Re: [XXXXXX#269] [Comment] Frage zu XXXXXX--xxxxxx / Xxxxxüxxxxxxxxxx},
+ "right decoding"
+ );
+}
+
+diag q{newline and encoded file name} if $ENV{TEST_VERBOSE};
+{
+ my $str = qq{application/vnd.ms-powerpoint;\n\tname="=?ISO-8859-1?Q?Main_presentation.ppt?="};
+ is(
+ RT::I18N::DecodeMIMEWordsToUTF8($str),
+ qq{application/vnd.ms-powerpoint;\tname="Main presentation.ppt"},
+ "right decoding"
+ );
+}
+
diff --git a/rt/t/mail/sendmail.t b/rt/t/mail/sendmail.t
new file mode 100644
index 0000000..1f97bbb
--- /dev/null
+++ b/rt/t/mail/sendmail.t
@@ -0,0 +1,538 @@
+#!/usr/bin/perl -w
+
+use strict;
+use File::Spec ();
+
+use RT::Test tests => 137;
+
+use RT::EmailParser;
+use RT::Tickets;
+use RT::Action::SendEmail;
+
+my @_outgoing_messages;
+my @scrips_fired;
+
+#We're not testing acls here.
+my $everyone = RT::Group->new($RT::SystemUser);
+$everyone->LoadSystemInternalGroup('Everyone');
+$everyone->PrincipalObj->GrantRight( Right =>'SuperUser' );
+
+
+is (__PACKAGE__, 'main', "We're operating in the main package");
+
+{
+ no warnings qw/redefine/;
+ sub RT::Action::SendEmail::SendMessage {
+ my $self = shift;
+ my $MIME = shift;
+
+ main::_fired_scrip($self->ScripObj);
+ main::is(ref($MIME) , 'MIME::Entity', "hey, look. it's a mime entity");
+ }
+}
+
+# some utils
+sub first_txn { return $_[0]->Transactions->First }
+sub first_attach { return first_txn($_[0])->Attachments->First }
+
+sub count_txns { return $_[0]->Transactions->Count }
+sub count_attachs { return first_txn($_[0])->Attachments->Count }
+
+# instrument SendEmail to pass us what it's about to send.
+# create a regular ticket
+
+my $parser = RT::EmailParser->new();
+
+# Let's test to make sure a multipart/report is processed correctly
+my $multipart_report_email = RT::Test::get_relocatable_file('multipart-report',
+ (File::Spec->updir(), 'data', 'emails'));
+my $content = RT::Test->file_content($multipart_report_email);
+# be as much like the mail gateway as possible.
+use RT::Interface::Email;
+my %args = (message => $content, queue => 1, action => 'correspond');
+my ($status, $msg) = RT::Interface::Email::Gateway(\%args);
+ok($status, "successfuly used Email::Gateway interface") or diag("error: $msg");
+my $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+my $tick= $tickets->First();
+isa_ok($tick, "RT::Ticket", "got a ticket object");
+ok ($tick->Id, "found ticket ".$tick->Id);
+like (first_txn($tick)->Content , qr/The original message was received/, "It's the bounce");
+
+
+# make sure it fires scrips.
+is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation");
+
+undef @scrips_fired;
+
+
+
+
+$parser->ParseMIMEEntityFromScalar('From: root@localhost
+To: rt@example.com
+Subject: This is a test of new ticket creation as an unknown user
+
+Blah!
+Foob!');
+
+
+use Data::Dumper;
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($id, undef, $create_msg ) = $ticket->Create(Requestor => ['root@localhost'], Queue => 'general', Subject => 'I18NTest', MIMEObj => $parser->Entity);
+ok ($id,$create_msg);
+$tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+ $tick = $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+is ($tick->Subject , 'I18NTest', "failed to create the new ticket from an unprivileged account");
+
+# make sure it fires scrips.
+is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation");
+# make sure it sends an autoreply
+# make sure it sends a notification to adminccs
+
+
+# we need to swap out SendMessage to test the new things we care about;
+&utf8_redef_sendmessage;
+
+# create an iso 8859-1 ticket
+@scrips_fired = ();
+
+my $iso_8859_1_ticket_email = RT::Test::get_relocatable_file(
+ 'new-ticket-from-iso-8859-1', (File::Spec->updir(), 'data', 'emails'));
+$content = RT::Test->file_content($iso_8859_1_ticket_email);
+
+
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+use RT::Interface::Email;
+
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+ $tick = $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+like (first_txn($tick)->Content , qr/H\x{e5}vard/, "It's signed by havard. yay");
+
+
+# make sure it fires scrips.
+is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation");
+# make sure it sends an autoreply
+
+
+# make sure it sends a notification to adminccs
+
+# If we correspond, does it do the right thing to the outbound messages?
+
+$parser->ParseMIMEEntityFromScalar($content);
+ ($id, $msg) = $tick->Comment(MIMEObj => $parser->Entity);
+ok ($id, $msg);
+
+$parser->ParseMIMEEntityFromScalar($content);
+($id, $msg) = $tick->Correspond(MIMEObj => $parser->Entity);
+ok ($id, $msg);
+
+
+
+
+
+# we need to swap out SendMessage to test the new things we care about;
+&iso8859_redef_sendmessage;
+RT->Config->Set( EmailOutputEncoding => 'iso-8859-1' );
+# create an iso 8859-1 ticket
+@scrips_fired = ();
+
+ $content = RT::Test->file_content($iso_8859_1_ticket_email);
+# be as much like the mail gateway as possible.
+use RT::Interface::Email;
+
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+$tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+ $tick = $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+like (first_txn($tick)->Content , qr/H\x{e5}vard/, "It's signed by havard. yay");
+
+
+# make sure it fires scrips.
+is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation");
+# make sure it sends an autoreply
+
+
+# make sure it sends a notification to adminccs
+
+
+# If we correspond, does it do the right thing to the outbound messages?
+
+$parser->ParseMIMEEntityFromScalar($content);
+ ($id, $msg) = $tick->Comment(MIMEObj => $parser->Entity);
+ok ($id, $msg);
+
+$parser->ParseMIMEEntityFromScalar($content);
+($id, $msg) = $tick->Correspond(MIMEObj => $parser->Entity);
+ok ($id, $msg);
+
+
+sub _fired_scrip {
+ my $scrip = shift;
+ push @scrips_fired, $scrip;
+}
+
+sub utf8_redef_sendmessage {
+ no warnings qw/redefine/;
+ eval '
+ sub RT::Action::SendEmail::SendMessage {
+ my $self = shift;
+ my $MIME = shift;
+
+ my $scrip = $self->ScripObj->id;
+ ok(1, $self->ScripObj->ConditionObj->Name . " ".$self->ScripObj->ActionObj->Name);
+ main::_fired_scrip($self->ScripObj);
+ $MIME->make_singlepart;
+ main::is( ref($MIME) , \'MIME::Entity\',
+ "hey, look. it\'s a mime entity" );
+ main::is( ref( $MIME->head ) , \'MIME::Head\',
+ "its mime header is a mime header. yay" );
+ main::like( $MIME->head->get(\'Content-Type\') , qr/utf-8/,
+ "Its content type is utf-8" );
+ my $message_as_string = $MIME->bodyhandle->as_string();
+ use Encode;
+ $message_as_string = Encode::decode_utf8($message_as_string);
+ main::like(
+ $message_as_string , qr/H\x{e5}vard/,
+"The message\'s content contains havard\'s name. this will fail if it\'s not utf8 out");
+
+ }';
+}
+
+sub iso8859_redef_sendmessage {
+ no warnings qw/redefine/;
+ eval '
+ sub RT::Action::SendEmail::SendMessage {
+ my $self = shift;
+ my $MIME = shift;
+
+ my $scrip = $self->ScripObj->id;
+ ok(1, $self->ScripObj->ConditionObj->Name . " ".$self->ScripObj->ActionObj->Name);
+ main::_fired_scrip($self->ScripObj);
+ $MIME->make_singlepart;
+ main::is( ref($MIME) , \'MIME::Entity\',
+ "hey, look. it\'s a mime entity" );
+ main::is( ref( $MIME->head ) , \'MIME::Head\',
+ "its mime header is a mime header. yay" );
+ main::like( $MIME->head->get(\'Content-Type\') , qr/iso-8859-1/,
+ "Its content type is iso-8859-1 - " . $MIME->head->get("Content-Type") );
+ my $message_as_string = $MIME->bodyhandle->as_string();
+ use Encode;
+ $message_as_string = Encode::decode("iso-8859-1",$message_as_string);
+ main::like(
+ $message_as_string , qr/H\x{e5}vard/, "The message\'s content contains havard\'s name. this will fail if it\'s not utf8 out");
+
+ }';
+}
+
+# {{{ test a multipart alternative containing a text-html part with an umlaut
+
+ my $alt_umlaut_email = RT::Test::get_relocatable_file(
+ 'multipart-alternative-with-umlaut', (File::Spec->updir(), 'data', 'emails'));
+ $content = RT::Test->file_content($alt_umlaut_email);
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+{
+ no warnings qw/redefine/;
+ local *RT::Action::SendEmail::SendMessage = sub { return 1};
+
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ # TODO: following 5 lines should replaced by get_latest_ticket_ok()
+ $tickets = RT::Tickets->new($RT::SystemUser);
+ $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+ $tick = $tickets->First();
+
+ ok ($tick->Id, "found ticket ".$tick->Id);
+
+ like (first_txn($tick)->Content , qr/causes Error/, "We recorded the content right as text-plain");
+ is (count_attachs($tick) , 3 , "Has three attachments, presumably a text-plain, a text-html and a multipart alternative");
+
+}
+
+# }}}
+
+# {{{ test a text-html message with an umlaut
+ my $text_html_email = RT::Test::get_relocatable_file('text-html-with-umlaut',
+ (File::Spec->updir(), 'data', 'emails'));
+ $content = RT::Test->file_content($text_html_email);
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+&text_html_redef_sendmessage;
+
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+ $tick = $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+like (first_attach($tick)->Content , qr/causes Error/, "We recorded the content as containing 'causes error'") or diag( first_attach($tick)->Content );
+like (first_attach($tick)->ContentType , qr/text\/html/, "We recorded the content as text/html");
+is (count_attachs($tick), 1 , "Has one attachment, presumably a text-html and a multipart alternative");
+
+sub text_html_redef_sendmessage {
+ no warnings qw/redefine/;
+ eval 'sub RT::Action::SendEmail::SendMessage {
+ my $self = shift;
+ my $MIME = shift;
+ return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
+ is ($MIME->parts, 0, "generated correspondence mime entity
+ does not have parts");
+ is ($MIME->head->mime_type , "text/plain", "The mime type is a plain");
+ }';
+}
+
+# }}}
+
+# {{{ test a text-html message with russian characters
+ my $russian_email = RT::Test::get_relocatable_file('text-html-in-russian',
+ (File::Spec->updir(), 'data', 'emails'));
+ $content = RT::Test->file_content($russian_email);
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+&text_html_redef_sendmessage;
+
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+ $tick = $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+like (first_attach($tick)->ContentType , qr/text\/html/, "We recorded the content right as text-html");
+
+is (count_attachs($tick) ,1 , "Has one attachment, presumably a text-html and a multipart alternative");
+
+# }}}
+
+# {{{ test a message containing a russian subject and NO content type
+
+RT->Config->Set( EmailInputEncodings => 'koi8-r', RT->Config->Get('EmailInputEncodings') );
+RT->Config->Set( EmailOutputEncoding => 'koi8-r' );
+my $russian_subject_email = RT::Test::get_relocatable_file(
+ 'russian-subject-no-content-type', (File::Spec->updir(), 'data', 'emails'));
+$content = RT::Test->file_content($russian_subject_email);
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+&text_plain_russian_redef_sendmessage;
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+$tick= $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+like (first_attach($tick)->ContentType , qr/text\/plain/, "We recorded the content type right");
+is (count_attachs($tick) ,1 , "Has one attachment, presumably a text-plain");
+is ($tick->Subject, "\x{442}\x{435}\x{441}\x{442} \x{442}\x{435}\x{441}\x{442}", "Recorded the subject right");
+sub text_plain_russian_redef_sendmessage {
+ no warnings qw/redefine/;
+ eval 'sub RT::Action::SendEmail::SendMessage {
+ my $self = shift;
+ my $MIME = shift;
+ return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
+ is ($MIME->head->mime_type , "text/plain", "The only part is text/plain ");
+ my $subject = $MIME->head->get("subject");
+ chomp($subject);
+ #is( $subject , /^=\?KOI8-R\?B\?W2V4YW1wbGUuY39tICM3XSDUxdPUINTF09Q=\?=/ , "The $subject is encoded correctly");
+ };
+ ';
+}
+
+my @input_encodings = RT->Config->Get( 'EmailInputEncodings' );
+shift @input_encodings;
+RT->Config->Set(EmailInputEncodings => @input_encodings );
+RT->Config->Set(EmailOutputEncoding => 'utf-8');
+# }}}
+
+
+# {{{ test a message containing a nested RFC 822 message
+
+my $nested_rfc822_email = RT::Test::get_relocatable_file('nested-rfc-822',
+ (File::Spec->updir(), 'data', 'emails'));
+$content = RT::Test->file_content($nested_rfc822_email);
+ok ($content, "Loaded nested-rfc-822 to test");
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+&text_plain_nested_redef_sendmessage;
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+$tick= $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+is ($tick->Subject, "[Jonas Liljegren] Re: [Para] Niv\x{e5}er?");
+like (first_attach($tick)->ContentType , qr/multipart\/mixed/, "We recorded the content type right");
+is (count_attachs($tick) , 5 , "Has one attachment, presumably a text-plain and a message RFC 822 and another plain");
+sub text_plain_nested_redef_sendmessage {
+ no warnings qw/redefine/;
+ eval 'sub RT::Action::SendEmail::SendMessage {
+ my $self = shift;
+ my $MIME = shift;
+ return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
+ is ($MIME->head->mime_type , "multipart/mixed", "It is a mixed multipart");
+ my $subject = $MIME->head->get("subject");
+ $subject = MIME::Base64::decode_base64( $subject);
+ chomp($subject);
+ # TODO, why does this test fail
+ #ok($subject =~ qr{Niv\x{e5}er}, "The subject matches the word - $subject");
+ 1;
+ }';
+}
+
+# }}}
+
+
+# {{{ test a multipart alternative containing a uuencoded mesage generated by lotus notes
+
+ my $uuencoded_email = RT::Test::get_relocatable_file('notes-uuencoded',
+ (File::Spec->updir(), 'data', 'emails'));
+ $content = RT::Test->file_content($uuencoded_email);
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+{
+ no warnings qw/redefine/;
+ local *RT::Action::SendEmail::SendMessage = sub { return 1};
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+ $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+ $tick= $tickets->First();
+ ok ($tick->Id, "found ticket ".$tick->Id);
+
+ like (first_txn($tick)->Content , qr/from Lotus Notes/, "We recorded the content right");
+ is (count_attachs($tick) , 3 , "Has three attachments");
+}
+
+# }}}
+
+# {{{ test a multipart that crashes the file-based mime-parser works
+
+ my $crashes_file_based_parser_email = RT::Test::get_relocatable_file(
+ 'crashes-file-based-parser', (File::Spec->updir(), 'data', 'emails'));
+ $content = RT::Test->file_content($crashes_file_based_parser_email);
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+# be as much like the mail gateway as possible.
+
+no warnings qw/redefine/;
+local *RT::Action::SendEmail::SendMessage = sub { return 1};
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+$tick= $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+like (first_txn($tick)->Content , qr/FYI/, "We recorded the content right");
+is (count_attachs($tick) , 5 , "Has three attachments");
+
+
+
+
+# }}}
+
+# {{{ test a multi-line RT-Send-CC header
+
+ my $rt_send_cc_email = RT::Test::get_relocatable_file('rt-send-cc',
+ (File::Spec->updir(), 'data', 'emails'));
+ $content = RT::Test->file_content($rt_send_cc_email);
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+
+ %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+$tick= $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+my $cc = first_attach($tick)->GetHeader('RT-Send-Cc');
+like ($cc , qr/test1/, "Found test 1");
+like ($cc , qr/test2/, "Found test 2");
+like ($cc , qr/test3/, "Found test 3");
+like ($cc , qr/test4/, "Found test 4");
+like ($cc , qr/test5/, "Found test 5");
+
+# }}}
+
+diag q{regression test for #5248 from rt3.fsck.com} if $ENV{TEST_VERBOSE};
+{
+ my $subject_folding_email = RT::Test::get_relocatable_file(
+ 'subject-with-folding-ws', (File::Spec->updir(), 'data', 'emails'));
+ my $content = RT::Test->file_content($subject_folding_email);
+ my ($status, $msg, $ticket) = RT::Interface::Email::Gateway(
+ { message => $content, queue => 1, action => 'correspond' }
+ );
+ ok ($status, 'created ticket') or diag "error: $msg";
+ ok ($ticket->id, "found ticket ". $ticket->id);
+ is ($ticket->Subject, 'test', 'correct subject');
+}
+
+diag q{regression test for #5248 from rt3.fsck.com} if $ENV{TEST_VERBOSE};
+{
+ my $long_subject_email = RT::Test::get_relocatable_file('very-long-subject',
+ (File::Spec->updir(), 'data', 'emails'));
+ my $content = RT::Test->file_content($long_subject_email);
+ my ($status, $msg, $ticket) = RT::Interface::Email::Gateway(
+ { message => $content, queue => 1, action => 'correspond' }
+ );
+ ok ($status, 'created ticket') or diag "error: $msg";
+ ok ($ticket->id, "found ticket ". $ticket->id);
+ is ($ticket->Subject, '0123456789'x20, 'correct subject');
+}
+
+
+
+# Don't taint the environment
+$everyone->PrincipalObj->RevokeRight(Right =>'SuperUser');
+1;
diff --git a/rt/t/mail/verp.t b/rt/t/mail/verp.t
new file mode 100644
index 0000000..79ede90
--- /dev/null
+++ b/rt/t/mail/verp.t
@@ -0,0 +1,8 @@
+#!/usr/bin/perl -w
+
+use strict;
+use RT::Test tests => 1;
+TODO: {
+ todo_skip "No tests written for VERP yet", 1;
+ ok(1,"a test to skip");
+}
diff --git a/rt/t/maildigest/attributes.t b/rt/t/maildigest/attributes.t
new file mode 100644
index 0000000..ba2a585
--- /dev/null
+++ b/rt/t/maildigest/attributes.t
@@ -0,0 +1,168 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use strict;
+use RT;
+use RT::Test tests => 31;
+my @users = qw/ emailnormal@example.com emaildaily@example.com emailweekly@example.com emailsusp@example.com /;
+
+my( $ret, $msg );
+my $user_n = RT::User->new( $RT::SystemUser );
+( $ret, $msg ) = $user_n->LoadOrCreateByEmail( $users[0] );
+ok( $ret, "user with default email prefs created: $msg" );
+$user_n->SetPrivileged( 1 );
+
+my $user_d = RT::User->new( $RT::SystemUser );
+( $ret, $msg ) = $user_d->LoadOrCreateByEmail( $users[1] );
+ok( $ret, "user with daily digest email prefs created: $msg" );
+# Set a username & password for testing the interface.
+$user_d->SetPrivileged( 1 );
+$user_d->SetPreferences($RT::System => { %{ $user_d->Preferences( $RT::System ) || {}}, EmailFrequency => 'Daily digest'});
+
+
+
+my $user_w = RT::User->new( $RT::SystemUser );
+( $ret, $msg ) = $user_w->LoadOrCreateByEmail( $users[2] );
+ok( $ret, "user with weekly digest email prefs created: $msg" );
+$user_w->SetPrivileged( 1 );
+$user_w->SetPreferences($RT::System => { %{ $user_w->Preferences( $RT::System ) || {}}, EmailFrequency => 'Weekly digest'});
+
+my $user_s = RT::User->new( $RT::SystemUser );
+( $ret, $msg ) = $user_s->LoadOrCreateByEmail( $users[3] );
+ok( $ret, "user with suspended email prefs created: $msg" );
+$user_s->SetPreferences($RT::System => { %{ $user_s->Preferences( $RT::System ) || {}}, EmailFrequency => 'Suspended'});
+$user_s->SetPrivileged( 1 );
+
+
+is(RT::Config->Get('EmailFrequency' => $user_s), 'Suspended');
+
+# Make a testing queue for ourselves.
+my $testq = RT::Queue->new( $RT::SystemUser );
+if( $testq->ValidateName( 'EmailDigest-testqueue' ) ) {
+ ( $ret, $msg ) = $testq->Create( Name => 'EmailDigest-testqueue' );
+ ok( $ret, "Our test queue is created: $msg" );
+} else {
+ $testq->Load( 'EmailDigest-testqueue' );
+ ok( $testq->id, "Our test queue is loaded" );
+}
+
+# Allow anyone to open a ticket on the test queue.
+my $everyone = RT::Group->new( $RT::SystemUser );
+( $ret, $msg ) = $everyone->LoadSystemInternalGroup( 'Everyone' );
+ok( $ret, "Loaded 'everyone' group: $msg" );
+
+( $ret, $msg ) = $everyone->PrincipalObj->GrantRight( Right => 'CreateTicket',
+ Object => $testq );
+ok( $ret || $msg =~ /already has/, "Granted everyone CreateTicket on testq: $msg" );
+
+# Make user_d an admincc for the queue.
+( $ret, $msg ) = $user_d->PrincipalObj->GrantRight( Right => 'AdminQueue',
+ Object => $testq );
+ok( $ret || $msg =~ /already has/, "Granted dduser AdminQueue on testq: $msg" );
+( $ret, $msg ) = $testq->AddWatcher( Type => 'AdminCc',
+ PrincipalId => $user_d->PrincipalObj->id );
+ok( $ret || $msg =~ /already/, "dduser added as a queue watcher: $msg" );
+
+# Give the others queue rights.
+( $ret, $msg ) = $user_n->PrincipalObj->GrantRight( Right => 'AdminQueue',
+ Object => $testq );
+ok( $ret || $msg =~ /already has/, "Granted emailnormal right on testq: $msg" );
+( $ret, $msg ) = $user_w->PrincipalObj->GrantRight( Right => 'AdminQueue',
+ Object => $testq );
+ok( $ret || $msg =~ /already has/, "Granted emailweekly right on testq: $msg" );
+( $ret, $msg ) = $user_s->PrincipalObj->GrantRight( Right => 'AdminQueue',
+ Object => $testq );
+ok( $ret || $msg =~ /already has/, "Granted emailsusp right on testq: $msg" );
+
+# Create a ticket with To: Cc: Bcc: fields using our four users.
+my $id;
+my $ticket = RT::Ticket->new( $RT::SystemUser );
+( $id, $ret, $msg ) = $ticket->Create( Queue => $testq->Name,
+ Requestor => [ $user_w->Name ],
+ Subject => 'Test ticket for RT::Extension::EmailDigest',
+ );
+ok( $ret, "Ticket $id created: $msg" );
+
+# Make the other users ticket watchers.
+( $ret, $msg ) = $ticket->AddWatcher( Type => 'Cc',
+ PrincipalId => $user_n->PrincipalObj->id );
+ok( $ret, "Added user_n as a ticket watcher: $msg" );
+( $ret, $msg ) = $ticket->AddWatcher( Type => 'Cc',
+ PrincipalId => $user_s->PrincipalObj->id );
+ok( $ret, "Added user_s as a ticket watcher: $msg" );
+
+my $obj;
+($id, $msg, $obj ) = $ticket->Correspond(
+ Content => "This is a ticket response for CC action" );
+ok( $ret, "Transaction created: $msg" );
+
+# Get the deferred notifications that should result. Should be two for
+# email daily, and one apiece for emailweekly and emailsusp.
+my @notifications;
+
+my $txns = RT::Transactions->new( $RT::SystemUser );
+$txns->LimitToTicket( $ticket->id );
+my( $c_daily, $c_weekly, $c_susp ) = ( 0, 0, 0 );
+while( my $txn = $txns->Next ) {
+ my @daily_rcpt = $txn->DeferredRecipients( 'daily' );
+ my @weekly_rcpt = $txn->DeferredRecipients('weekly' );
+ my @susp_rcpt = $txn->DeferredRecipients( 'susp' );
+
+ $c_daily++ if @daily_rcpt;
+ $c_weekly++ if @weekly_rcpt;
+ $c_susp++ if @susp_rcpt;
+
+ # If the transaction has content...
+ if( $txn->ContentObj ) {
+ # ...none of the deferred folk should be in the header.
+ my $headerstr = $txn->ContentObj->Headers;
+ foreach my $rcpt( @daily_rcpt, @weekly_rcpt, @susp_rcpt ) {
+ ok( $headerstr !~ /$rcpt/, "Deferred recipient $rcpt not found in header" );
+ }
+ }
+}
+
+# Finally, check to see that we got the correct number of each sort of
+# deferred recipient.
+is( $c_daily, 2, "correct number of daily-sent messages" );
+is( $c_weekly, 2, "correct number of weekly-sent messages" );
+is( $c_susp, 1, "correct number of suspended messages" );
+
+
+
+
+
+# Now let's actually run the daily and weekly digest tool to make sure we generate those
+
+# the first time get the content
+email_digest_like( '--mode daily --print', qr/in the last day/ );
+# The second time run it for real so we make sure that we get RT to mark the txn as sent
+email_digest_like( '--mode daily', qr/maildaily\@/ );
+# now we should have nothing to do, so no content.
+email_digest_like( '--mode daily --print', '' );
+
+# the first time get the content
+email_digest_like( '--mode weekly --print', qr/in the last seven days/ );
+# The second time run it for real so we make sure that we get RT to mark the txn as sent
+email_digest_like( '--mode weekly', qr/mailweekly\@/ );
+# now we should have nothing to do, so no content.
+email_digest_like( '--mode weekly --print', '' );
+
+sub email_digest_like {
+ my $arg = shift;
+ my $pattern = shift;
+
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+ my $perl = $^X . ' ' . join ' ', map { "-I$_" } @INC;
+ open my $digester, "-|", "$perl $RT::SbinPath/rt-email-digest $arg";
+ my @results = <$digester>;
+ my $content = join '', @results;
+ if ( ref $pattern && ref $pattern eq 'Regexp' ) {
+ like($content, $pattern);
+ }
+ else {
+ is( $content, $pattern );
+ }
+ close $digester;
+}
diff --git a/rt/t/pod.t b/rt/t/pod.t
new file mode 100644
index 0000000..d11a497
--- /dev/null
+++ b/rt/t/pod.t
@@ -0,0 +1,7 @@
+use strict;
+use warnings;
+
+use Test::More;
+eval "use Test::Pod 1.14";
+plan skip_all => "Test::Pod 1.14 required for testing POD" if $@;
+all_pod_files_ok();
diff --git a/rt/t/rtname.t b/rt/t/rtname.t
new file mode 100644
index 0000000..ef6092b
--- /dev/null
+++ b/rt/t/rtname.t
@@ -0,0 +1,34 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use RT::Test nodata => 1, tests => 9;
+
+use RT::Interface::Email;
+
+# normal use case, regexp set to rtname
+RT->Config->Set( rtname => "site" );
+RT->Config->Set( EmailSubjectTagRegex => qr/site/ );
+RT->Config->Set( rtname => undef );
+is(RT::Interface::Email::ParseTicketId("[site #123] test"), 123);
+is(RT::Interface::Email::ParseTicketId("[othersite #123] test"), undef);
+
+# oops usecase, where the regexp is scragged
+RT->Config->Set( rtname => "site" );
+RT->Config->Set( EmailSubjectTagRegex => undef );
+is(RT::Interface::Email::ParseTicketId("[site #123] test"), 123);
+is(RT::Interface::Email::ParseTicketId("[othersite #123] test"), undef);
+
+# set to a simple regexp. NOTE: we no longer match "site"
+RT->Config->Set( rtname => "site");
+RT->Config->Set( EmailSubjectTagRegex => qr/newsite/);
+is(RT::Interface::Email::ParseTicketId("[site #123] test"), undef);
+is(RT::Interface::Email::ParseTicketId("[newsite #123] test"), 123);
+
+# set to a more complex regexp
+RT->Config->Set( rtname => "site" );
+RT->Config->Set( EmailSubjectTagRegex => qr/newsite|site/ );
+is(RT::Interface::Email::ParseTicketId("[site #123] test"), 123);
+is(RT::Interface::Email::ParseTicketId("[newsite #123] test"), 123);
+is(RT::Interface::Email::ParseTicketId("[othersite #123] test"), undef);
+
diff --git a/rt/t/savedsearch.t b/rt/t/savedsearch.t
new file mode 100644
index 0000000..5798f79
--- /dev/null
+++ b/rt/t/savedsearch.t
@@ -0,0 +1,185 @@
+use strict;
+use warnings;
+BEGIN { $ENV{'LANG'} = 'C' }
+use RT;
+use RT::User;
+use RT::Group;
+use RT::Ticket;
+use RT::Queue;
+
+use RT::Test tests => 27;
+use_ok('RT::SavedSearch');
+use_ok('RT::SavedSearches');
+
+use Test::Warn;
+
+# Set up some infrastructure. These calls are tested elsewhere.
+
+my $searchuser = RT::User->new($RT::SystemUser);
+my ($ret, $msg) = $searchuser->Create(Name => 'searchuser'.$$,
+ Privileged => 1,
+ EmailAddress => "searchuser\@p$$.example.com",
+ RealName => 'Search user');
+ok($ret, "created searchuser: $msg");
+$searchuser->PrincipalObj->GrantRight(Right => 'LoadSavedSearch');
+$searchuser->PrincipalObj->GrantRight(Right => 'CreateSavedSearch');
+$searchuser->PrincipalObj->GrantRight(Right => 'ModifySelf');
+
+# This is the group whose searches searchuser should be able to see.
+my $ingroup = RT::Group->new($RT::SystemUser);
+$ingroup->CreateUserDefinedGroup(Name => 'searchgroup1'.$$);
+$ingroup->AddMember($searchuser->Id);
+$searchuser->PrincipalObj->GrantRight(Right => 'EditSavedSearches',
+ Object => $ingroup);
+$searchuser->PrincipalObj->GrantRight(Right => 'ShowSavedSearches',
+ Object => $ingroup);
+
+# This is the group whose searches searchuser should not be able to see.
+my $outgroup = RT::Group->new($RT::SystemUser);
+$outgroup->CreateUserDefinedGroup(Name => 'searchgroup2'.$$);
+$outgroup->AddMember($RT::SystemUser->Id);
+
+my $queue = RT::Queue->new($RT::SystemUser);
+$queue->Create(Name => 'SearchQueue'.$$);
+$searchuser->PrincipalObj->GrantRight(Right => 'SeeQueue', Object => $queue);
+$searchuser->PrincipalObj->GrantRight(Right => 'ShowTicket', Object => $queue);
+$searchuser->PrincipalObj->GrantRight(Right => 'OwnTicket', Object => $queue);
+
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+$ticket->Create(Queue => $queue->Id,
+ Requestor => [ $searchuser->Name ],
+ Owner => $searchuser,
+ Subject => 'saved search test');
+
+
+# Now start the search madness.
+my $curruser = RT::CurrentUser->new($searchuser);
+my $format = '\' <b><a href="/Ticket/Display.html?id=__id__">__id__</a></b>/TITLE:#\',
+\'<b><a href="/Ticket/Display.html?id=__id__">__Subject__</a></b>/TITLE:Subject\',
+\'__Status__\',
+\'__QueueName__\',
+\'__OwnerName__\',
+\'__Priority__\',
+\'__NEWLINE__\',
+\'\',
+\'<small>__Requestors__</small>\',
+\'<small>__CreatedRelative__</small>\',
+\'<small>__ToldRelative__</small>\',
+\'<small>__LastUpdatedRelative__</small>\',
+\'<small>__TimeLeft__</small>\'';
+
+my $mysearch = RT::SavedSearch->new($curruser);
+($ret, $msg) = $mysearch->Save(Privacy => 'RT::User-' . $searchuser->Id,
+ Type => 'Ticket',
+ Name => 'owned by me',
+ SearchParams => {'Format' => $format,
+ 'Query' => "Owner = '"
+ . $searchuser->Name
+ . "'"});
+ok($ret, "mysearch was created");
+
+
+my $groupsearch = RT::SavedSearch->new($curruser);
+($ret, $msg) = $groupsearch->Save(Privacy => 'RT::Group-' . $ingroup->Id,
+ Type => 'Ticket',
+ Name => 'search queue',
+ SearchParams => {'Format' => $format,
+ 'Query' => "Queue = '"
+ . $queue->Name . "'"});
+ok($ret, "groupsearch was created");
+
+my $othersearch = RT::SavedSearch->new($curruser);
+($ret, $msg) = $othersearch->Save(Privacy => 'RT::Group-' . $outgroup->Id,
+ Type => 'Ticket',
+ Name => 'searchuser requested',
+ SearchParams => {'Format' => $format,
+ 'Query' =>
+ "Requestor.Name LIKE 'search'"});
+ok(!$ret, "othersearch NOT created");
+like($msg, qr/Failed to load object for/, "...for the right reason");
+
+$othersearch = RT::SavedSearch->new($RT::SystemUser);
+($ret, $msg) = $othersearch->Save(Privacy => 'RT::Group-' . $outgroup->Id,
+ Type => 'Ticket',
+ Name => 'searchuser requested',
+ SearchParams => {'Format' => $format,
+ 'Query' =>
+ "Requestor.Name LIKE 'search'"});
+ok($ret, "othersearch created by systemuser");
+
+# Now try to load some searches.
+
+# This should work.
+my $loadedsearch1 = RT::SavedSearch->new($curruser);
+$loadedsearch1->Load('RT::User-'.$curruser->Id, $mysearch->Id);
+is($loadedsearch1->Id, $mysearch->Id, "Loaded mysearch");
+like($loadedsearch1->GetParameter('Query'), qr/Owner/,
+ "Retrieved query of mysearch");
+# Check through the other accessor methods.
+is($loadedsearch1->Privacy, 'RT::User-' . $curruser->Id,
+ "Privacy of mysearch correct");
+is($loadedsearch1->Name, 'owned by me', "Name of mysearch correct");
+is($loadedsearch1->Type, 'Ticket', "Type of mysearch correct");
+
+# See if it can be used to search for tickets.
+my $tickets = RT::Tickets->new($curruser);
+$tickets->FromSQL($loadedsearch1->GetParameter('Query'));
+is($tickets->Count, 1, "Found a ticket");
+
+# This should fail -- wrong object.
+# my $loadedsearch2 = RT::SavedSearch->new($curruser);
+# $loadedsearch2->Load('RT::User-'.$curruser->Id, $groupsearch->Id);
+# isnt($loadedsearch2->Id, $othersearch->Id, "Didn't load groupsearch as mine");
+# ...but this should succeed.
+my $loadedsearch3 = RT::SavedSearch->new($curruser);
+$loadedsearch3->Load('RT::Group-'.$ingroup->Id, $groupsearch->Id);
+is($loadedsearch3->Id, $groupsearch->Id, "Loaded groupsearch");
+like($loadedsearch3->GetParameter('Query'), qr/Queue/,
+ "Retrieved query of groupsearch");
+# Can it get tickets?
+$tickets = RT::Tickets->new($curruser);
+$tickets->FromSQL($loadedsearch3->GetParameter('Query'));
+is($tickets->Count, 1, "Found a ticket");
+
+# This should fail -- no permission.
+my $loadedsearch4 = RT::SavedSearch->new($curruser);
+
+warning_like {
+ $loadedsearch4->Load($othersearch->Privacy, $othersearch->Id);
+} qr/Could not load object RT::Group-\d+ when loading search/;
+
+isnt($loadedsearch4->Id, $othersearch->Id, "Did not load othersearch");
+
+# Try to update an existing search.
+$loadedsearch1->Update( SearchParams => {'Format' => $format,
+ 'Query' => "Queue = '" . $queue->Name . "'" } );
+like($loadedsearch1->GetParameter('Query'), qr/Queue/,
+ "Updated mysearch parameter");
+is($loadedsearch1->Type, 'Ticket', "mysearch is still for tickets");
+is($loadedsearch1->Privacy, 'RT::User-'.$curruser->Id,
+ "mysearch still belongs to searchuser");
+like($mysearch->GetParameter('Query'), qr/Queue/, "other mysearch object updated");
+
+
+## Right ho. Test the pseudo-collection object.
+
+my $genericsearch = RT::SavedSearch->new($curruser);
+$genericsearch->Save(Name => 'generic search',
+ Type => 'all',
+ SearchParams => {'Query' => "Queue = 'General'"});
+
+my $ticketsearches = RT::SavedSearches->new($curruser);
+$ticketsearches->LimitToPrivacy('RT::User-'.$curruser->Id, 'Ticket');
+is($ticketsearches->Count, 1, "Found searchuser's ticket searches");
+
+my $allsearches = RT::SavedSearches->new($curruser);
+$allsearches->LimitToPrivacy('RT::User-'.$curruser->Id);
+is($allsearches->Count, 2, "Found all searchuser's searches");
+
+# Delete a search.
+($ret, $msg) = $genericsearch->Delete;
+ok($ret, "Deleted genericsearch");
+$allsearches->LimitToPrivacy('RT::User-'.$curruser->Id);
+is($allsearches->Count, 1, "Found all searchuser's searches after deletion");
+
diff --git a/rt/t/shredder/00load.t b/rt/t/shredder/00load.t
new file mode 100644
index 0000000..1e06261
--- /dev/null
+++ b/rt/t/shredder/00load.t
@@ -0,0 +1,29 @@
+use strict;
+use warnings;
+use File::Spec;
+use Test::More tests => 11;
+use RT::Test ();
+
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+
+use_ok("RT::Shredder");
+
+use_ok("RT::Shredder::Plugin");
+use_ok("RT::Shredder::Plugin::Base");
+
+# search plugins
+use_ok("RT::Shredder::Plugin::Base::Search");
+use_ok("RT::Shredder::Plugin::Objects");
+use_ok("RT::Shredder::Plugin::Attachments");
+use_ok("RT::Shredder::Plugin::Tickets");
+use_ok("RT::Shredder::Plugin::Users");
+
+# dump plugins
+use_ok("RT::Shredder::Plugin::Base::Dump");
+use_ok("RT::Shredder::Plugin::SQLDump");
+use_ok("RT::Shredder::Plugin::Summary");
+
diff --git a/rt/t/shredder/00skeleton.t b/rt/t/shredder/00skeleton.t
new file mode 100644
index 0000000..eab9433
--- /dev/null
+++ b/rt/t/shredder/00skeleton.t
@@ -0,0 +1,25 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 1;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+init_db();
+
+
+create_savepoint('clean'); # backup of the clean RT DB
+my $shredder = shredder_new(); # new shredder object
+
+# ....
+# create and wipe RT objects
+#
+
+cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
diff --git a/rt/t/shredder/01basics.t b/rt/t/shredder/01basics.t
new file mode 100644
index 0000000..450f2df
--- /dev/null
+++ b/rt/t/shredder/01basics.t
@@ -0,0 +1,32 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 3;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+init_db();
+
+
+create_savepoint();
+
+use RT::Tickets;
+my $ticket = RT::Ticket->new( $RT::SystemUser );
+my ($id) = $ticket->Create( Subject => 'test', Queue => 1 );
+ok( $id, "created new ticket" );
+
+$ticket = RT::Ticket->new( $RT::SystemUser );
+my ($status, $msg) = $ticket->Load( $id );
+ok( $id, "load ticket" ) or diag( "error: $msg" );
+
+my $shredder = shredder_new();
+$shredder->Wipeout( Object => $ticket );
+
+cmp_deeply( dump_current_and_savepoint(), "current DB equal to savepoint");
diff --git a/rt/t/shredder/01ticket.t b/rt/t/shredder/01ticket.t
new file mode 100644
index 0000000..5625b98
--- /dev/null
+++ b/rt/t/shredder/01ticket.t
@@ -0,0 +1,86 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 15;
+use RT::Test ();
+
+
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+
+init_db();
+create_savepoint('clean');
+
+use RT::Ticket;
+use RT::Tickets;
+
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ my ($id) = $ticket->Create( Subject => 'test', Queue => 1 );
+ ok( $id, "created new ticket" );
+ $ticket->Delete;
+ is( $ticket->Status, 'deleted', "successfuly changed status" );
+
+ my $tickets = RT::Tickets->new( $RT::SystemUser );
+ $tickets->{'allow_deleted_search'} = 1;
+ $tickets->LimitStatus( VALUE => 'deleted' );
+ is( $tickets->Count, 1, "found one deleted ticket" );
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $tickets );
+ $shredder->WipeoutAll;
+}
+cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+
+{
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($pid) = $parent->Create( Subject => 'test', Queue => 1 );
+ ok( $pid, "created new ticket" );
+ create_savepoint('parent_ticket');
+
+ my $child = RT::Ticket->new( $RT::SystemUser );
+ my ($cid) = $child->Create( Subject => 'test', Queue => 1 );
+ ok( $cid, "created new ticket" );
+
+ my ($status, $msg) = $parent->AddLink( Type => 'MemberOf', Target => $cid );
+ ok( $status, "Added link between tickets") or diag("error: $msg");
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $child );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('parent_ticket'), "current DB equal to savepoint");
+
+ $shredder->PutObjects( Objects => $parent );
+ $shredder->WipeoutAll;
+}
+cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+
+{
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($pid) = $parent->Create( Subject => 'test', Queue => 1 );
+ ok( $pid, "created new ticket" );
+ my ($status, $msg) = $parent->Delete;
+ ok( $status, 'deleted parent ticket');
+ create_savepoint('parent_ticket');
+
+ my $child = RT::Ticket->new( $RT::SystemUser );
+ my ($cid) = $child->Create( Subject => 'test', Queue => 1 );
+ ok( $cid, "created new ticket" );
+
+ ($status, $msg) = $parent->AddLink( Type => 'DependsOn', Target => $cid );
+ ok( $status, "Added link between tickets") or diag("error: $msg");
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $child );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('parent_ticket'), "current DB equal to savepoint");
+
+ $shredder->PutObjects( Objects => $parent );
+ $shredder->WipeoutAll;
+}
+cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
diff --git a/rt/t/shredder/02group_member.t b/rt/t/shredder/02group_member.t
new file mode 100644
index 0000000..b68557a
--- /dev/null
+++ b/rt/t/shredder/02group_member.t
@@ -0,0 +1,103 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 22;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+init_db();
+
+
+### nested membership check
+{
+ create_savepoint('clean');
+ my $pgroup = RT::Group->new( $RT::SystemUser );
+ my ($pgid) = $pgroup->CreateUserDefinedGroup( Name => 'Parent group' );
+ ok( $pgid, "created parent group" );
+ is( $pgroup->id, $pgid, "id is correct" );
+
+ my $cgroup = RT::Group->new( $RT::SystemUser );
+ my ($cgid) = $cgroup->CreateUserDefinedGroup( Name => 'Child group' );
+ ok( $cgid, "created child group" );
+ is( $cgroup->id, $cgid, "id is correct" );
+
+ my ($status, $msg) = $pgroup->AddMember( $cgroup->id );
+ ok( $status, "added child group to parent") or diag "error: $msg";
+
+ create_savepoint('bucreate'); # before user create
+ my $user = RT::User->new( $RT::SystemUser );
+ my $uid;
+ ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
+ ok( $uid, "created new user" ) or diag "error: $msg";
+ is( $user->id, $uid, "id is correct" );
+
+ create_savepoint('buadd'); # before group add
+ ($status, $msg) = $cgroup->AddMember( $user->id );
+ ok( $status, "added user to child group") or diag "error: $msg";
+
+ my $members = RT::GroupMembers->new( $RT::SystemUser );
+ $members->Limit( FIELD => 'MemberId', VALUE => $uid );
+ $members->Limit( FIELD => 'GroupId', VALUE => $cgid );
+ is( $members->Count, 1, "find membership record" );
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $members );
+ $shredder->WipeoutAll();
+ cmp_deeply( dump_current_and_savepoint('buadd'), "current DB equal to savepoint");
+
+ $shredder->PutObjects( Objects => $user );
+ $shredder->WipeoutAll();
+ cmp_deeply( dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
+
+ $shredder->PutObjects( Objects => [$pgroup, $cgroup] );
+ $shredder->WipeoutAll();
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
+
+### deleting member of the ticket Owner role group
+{
+ restore_savepoint('clean');
+
+ my $user = RT::User->new( $RT::SystemUser );
+ my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
+ ok( $uid, "created new user" ) or diag "error: $msg";
+ is( $user->id, $uid, "id is correct" );
+
+ use RT::Queue;
+ my $queue = new RT::Queue( $RT::SystemUser );
+ $queue->Load('general');
+ ok( $queue->id, "queue loaded succesfully" );
+
+ $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
+
+ use RT::Tickets;
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ my ($id) = $ticket->Create( Subject => 'test', Queue => $queue->id );
+ ok( $id, "created new ticket" );
+ $ticket = RT::Ticket->new( $RT::SystemUser );
+ my $status;
+ ($status, $msg) = $ticket->Load( $id );
+ ok( $id, "load ticket" ) or diag( "error: $msg" );
+
+ ($status, $msg) = $ticket->SetOwner( $user->id );
+ ok( $status, "owner successfuly set") or diag( "error: $msg" );
+ is( $ticket->Owner, $user->id, "owner successfuly set") or diag( "error: $msg" );
+
+ my $member = $ticket->OwnerGroup->MembersObj->First;
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $member );
+ $shredder->WipeoutAll();
+
+ $ticket = RT::Ticket->new( $RT::SystemUser );
+ ($status, $msg) = $ticket->Load( $id );
+ ok( $id, "load ticket" ) or diag( "error: $msg" );
+ is( $ticket->Owner, $RT::Nobody->id, "owner switched back to nobody" );
+ is( $ticket->OwnerGroup->MembersObj->First->MemberId, $RT::Nobody->id, "and owner role group member is nobody");
+}
diff --git a/rt/t/shredder/02queue.t b/rt/t/shredder/02queue.t
new file mode 100644
index 0000000..197cf63
--- /dev/null
+++ b/rt/t/shredder/02queue.t
@@ -0,0 +1,125 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 16;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+init_db();
+
+
+diag 'simple queue' if $ENV{'TEST_VERBOSE'};
+{
+ create_savepoint('clean');
+ my $queue = RT::Queue->new( $RT::SystemUser );
+ my ($id, $msg) = $queue->Create( Name => 'my queue' );
+ ok($id, 'created queue') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $queue );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
+
+diag 'queue with scrip' if $ENV{'TEST_VERBOSE'};
+{
+ create_savepoint('clean');
+ my $queue = RT::Queue->new( $RT::SystemUser );
+ my ($id, $msg) = $queue->Create( Name => 'my queue' );
+ ok($id, 'created queue') or diag "error: $msg";
+
+ my $scrip = RT::Scrip->new( $RT::SystemUser );
+ ($id, $msg) = $scrip->Create(
+ Description => 'my scrip',
+ Queue => $queue->id,
+ ScripCondition => 'On Create',
+ ScripAction => 'Open Tickets',
+ Template => 'Blank',
+ );
+ ok($id, 'created scrip') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $queue );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
+
+diag 'queue with template' if $ENV{'TEST_VERBOSE'};
+{
+ create_savepoint('clean');
+ my $queue = RT::Queue->new( $RT::SystemUser );
+ my ($id, $msg) = $queue->Create( Name => 'my queue' );
+ ok($id, 'created queue') or diag "error: $msg";
+
+ my $template = RT::Template->new( $RT::SystemUser );
+ ($id, $msg) = $template->Create(
+ Name => 'my template',
+ Queue => $queue->id,
+ Content => "\nsome content",
+ );
+ ok($id, 'created template') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $queue );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
+
+diag 'queue with a right granted' if $ENV{'TEST_VERBOSE'};
+{
+ create_savepoint('clean');
+ my $queue = RT::Queue->new( $RT::SystemUser );
+ my ($id, $msg) = $queue->Create( Name => 'my queue' );
+ ok($id, 'created queue') or diag "error: $msg";
+
+ my $group = RT::Group->new( $RT::SystemUser );
+ $group->LoadSystemInternalGroup('Everyone');
+ ok($group->id, 'loaded group');
+
+ ($id, $msg) = $group->PrincipalObj->GrantRight(
+ Right => 'CreateTicket',
+ Object => $queue,
+ );
+ ok($id, 'granted right') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $queue );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
+
+diag 'queue with a watcher' if $ENV{'TEST_VERBOSE'};
+{
+# XXX, FIXME: if uncomment these lines then we'll get 'Bizarre...'
+# create_savepoint('clean');
+ my $group = RT::Group->new( $RT::SystemUser );
+ my ($id, $msg) = $group->CreateUserDefinedGroup(Name => 'my group');
+ ok($id, 'created group') or diag "error: $msg";
+
+ create_savepoint('bqcreate');
+ my $queue = RT::Queue->new( $RT::SystemUser );
+ ($id, $msg) = $queue->Create( Name => 'my queue' );
+ ok($id, 'created queue') or diag "error: $msg";
+
+ ($id, $msg) = $queue->AddWatcher(
+ Type => 'Cc',
+ PrincipalId => $group->id,
+ );
+ ok($id, 'added watcher') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $queue );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('bqcreate'), "current DB equal to savepoint");
+
+# $shredder->PutObjects( Objects => $group );
+# $shredder->WipeoutAll;
+# cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
diff --git a/rt/t/shredder/02template.t b/rt/t/shredder/02template.t
new file mode 100644
index 0000000..d4c323e
--- /dev/null
+++ b/rt/t/shredder/02template.t
@@ -0,0 +1,76 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 7;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+init_db();
+
+
+diag 'global template' if $ENV{'TEST_VERBOSE'};
+{
+ create_savepoint('clean');
+ my $template = RT::Template->new( $RT::SystemUser );
+ my ($id, $msg) = $template->Create(
+ Name => 'my template',
+ Content => "\nsome content",
+ );
+ ok($id, 'created template') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $template );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
+
+diag 'local template' if $ENV{'TEST_VERBOSE'};
+{
+ create_savepoint('clean');
+ my $template = RT::Template->new( $RT::SystemUser );
+ my ($id, $msg) = $template->Create(
+ Name => 'my template',
+ Queue => 'General',
+ Content => "\nsome content",
+ );
+ ok($id, 'created template') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $template );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
+
+diag 'template used in scrip' if $ENV{'TEST_VERBOSE'};
+{
+ create_savepoint('clean');
+ my $template = RT::Template->new( $RT::SystemUser );
+ my ($id, $msg) = $template->Create(
+ Name => 'my template',
+ Queue => 'General',
+ Content => "\nsome content",
+ );
+ ok($id, 'created template') or diag "error: $msg";
+
+ my $scrip = RT::Scrip->new( $RT::SystemUser );
+ ($id, $msg) = $scrip->Create(
+ Description => 'my scrip',
+ Queue => 'General',
+ ScripCondition => 'On Create',
+ ScripAction => 'Open Tickets',
+ Template => $template->id,
+ );
+ ok($id, 'created scrip') or diag "error: $msg";
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => $template );
+ $shredder->WipeoutAll;
+ cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+}
diff --git a/rt/t/shredder/02user.t b/rt/t/shredder/02user.t
new file mode 100644
index 0000000..03abd6c
--- /dev/null
+++ b/rt/t/shredder/02user.t
@@ -0,0 +1,62 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 8;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+init_db();
+
+
+create_savepoint('clean');
+
+my $queue = RT::Queue->new( $RT::SystemUser );
+my ($qid) = $queue->Load( 'General' );
+ok( $qid, "loaded queue" );
+
+my $ticket = RT::Ticket->new( $RT::SystemUser );
+my ($tid) = $ticket->Create( Queue => $qid, Subject => 'test' );
+ok( $tid, "ticket created" );
+
+create_savepoint('bucreate'); # berfore user create
+my $user = RT::User->new( $RT::SystemUser );
+my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
+ok( $uid, "created new user" ) or diag "error: $msg";
+is( $user->id, $uid, "id is correct" );
+# HACK: set ticket props to enable VARIABLE dependencies
+$ticket->__Set( Field => 'LastUpdatedBy', Value => $uid );
+create_savepoint('aucreate'); # after user create
+
+{
+ my $resolver = sub {
+ my %args = (@_);
+ my $t = $args{'TargetObject'};
+ my $resolver_uid = $RT::SystemUser->id;
+ foreach my $method ( qw(Creator LastUpdatedBy) ) {
+ next unless $t->_Accessible( $method => 'read' );
+ $t->__Set( Field => $method, Value => $resolver_uid );
+ }
+ };
+ my $shredder = shredder_new();
+ $shredder->PutResolver( BaseClass => 'RT::User', Code => $resolver );
+ $shredder->Wipeout( Object => $user );
+ cmp_deeply( dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
+}
+
+{
+ restore_savepoint('aucreate');
+ my $user = RT::User->new( $RT::SystemUser );
+ $user->Load($uid);
+ ok($user->id, "loaded user after restore");
+ my $shredder = shredder_new();
+ eval { $shredder->Wipeout( Object => $user ) };
+ ok($@, "wipeout throw exception if no resolvers");
+ cmp_deeply( dump_current_and_savepoint('aucreate'), "current DB equal to savepoint");
+}
diff --git a/rt/t/shredder/03plugin.t b/rt/t/shredder/03plugin.t
new file mode 100644
index 0000000..190f40a
--- /dev/null
+++ b/rt/t/shredder/03plugin.t
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 28;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+
+my @PLUGINS = sort qw(Attachments Base Objects SQLDump Summary Tickets Users);
+
+use_ok('RT::Shredder::Plugin');
+{
+ my $plugin = new RT::Shredder::Plugin;
+ isa_ok($plugin, 'RT::Shredder::Plugin');
+ my %plugins = $plugin->List;
+ cmp_deeply( [sort keys %plugins], [@PLUGINS], "correct plugins" );
+}
+{ # test ->List as class method
+ my %plugins = RT::Shredder::Plugin->List;
+ cmp_deeply( [sort keys %plugins], [@PLUGINS], "correct plugins" );
+}
+{ # reblessing on LoadByName
+ foreach (@PLUGINS) {
+ my $plugin = new RT::Shredder::Plugin;
+ isa_ok($plugin, 'RT::Shredder::Plugin');
+ my ($status, $msg) = $plugin->LoadByName( $_ );
+ ok($status, "loaded plugin by name") or diag("error: $msg");
+ isa_ok($plugin, "RT::Shredder::Plugin::$_" );
+ }
+}
+{ # error checking in LoadByName
+ my $plugin = new RT::Shredder::Plugin;
+ isa_ok($plugin, 'RT::Shredder::Plugin');
+ my ($status, $msg) = $plugin->LoadByName;
+ ok(!$status, "not loaded plugin - empty name");
+ ($status, $msg) = $plugin->LoadByName('Foo');
+ ok(!$status, "not loaded plugin - not exist");
+}
+
diff --git a/rt/t/shredder/03plugin_summary.t b/rt/t/shredder/03plugin_summary.t
new file mode 100644
index 0000000..30606af
--- /dev/null
+++ b/rt/t/shredder/03plugin_summary.t
@@ -0,0 +1,23 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 4;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+
+
+use_ok('RT::Shredder::Plugin');
+my $plugin_obj = new RT::Shredder::Plugin;
+isa_ok($plugin_obj, 'RT::Shredder::Plugin');
+my ($status, $msg) = $plugin_obj->LoadByName('Summary');
+ok($status, 'loaded summary plugin') or diag "error: $msg";
+isa_ok($plugin_obj, 'RT::Shredder::Plugin::Summary');
+
diff --git a/rt/t/shredder/03plugin_tickets.t b/rt/t/shredder/03plugin_tickets.t
new file mode 100644
index 0000000..3d742ff
--- /dev/null
+++ b/rt/t/shredder/03plugin_tickets.t
@@ -0,0 +1,150 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 44;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+
+
+use_ok('RT::Shredder::Plugin::Tickets');
+{
+ my $plugin = new RT::Shredder::Plugin::Tickets;
+ isa_ok($plugin, 'RT::Shredder::Plugin::Tickets');
+
+ is(lc $plugin->Type, 'search', 'correct type');
+}
+
+init_db();
+create_savepoint('clean');
+use_ok('RT::Ticket');
+use_ok('RT::Tickets');
+
+{ # create parent and child and check functionality of 'with_linked' arg
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($pid) = $parent->Create( Subject => 'parent', Queue => 1 );
+ ok( $pid, "created new ticket" );
+
+ my $child = RT::Ticket->new( $RT::SystemUser );
+ my ($cid) = $child->Create( Subject => 'child', Queue => 1, MemberOf => $pid );
+ ok( $cid, "created new ticket" );
+
+ my $plugin = new RT::Shredder::Plugin::Tickets;
+ isa_ok($plugin, 'RT::Shredder::Plugin::Tickets');
+
+ my ($status, $msg, @objs);
+ ($status, $msg) = $plugin->TestArgs( query => 'Subject = "parent"' );
+ ok($status, "plugin arguments are ok") or diag "error: $msg";
+
+ ($status, @objs) = $plugin->Run;
+ ok($status, "executed plugin successfully") or diag "error: @objs";
+ @objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
+ is(scalar @objs, 1, "only one object in result set");
+ is($objs[0]->id, $pid, "parent is in result set");
+
+ ($status, $msg) = $plugin->TestArgs( query => 'Subject = "parent"', with_linked => 1 );
+ ok($status, "plugin arguments are ok") or diag "error: $msg";
+
+ ($status, @objs) = $plugin->Run;
+ ok($status, "executed plugin successfully") or diag "error: @objs";
+ @objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
+ my %has = map { $_->id => 1 } @objs;
+ is(scalar @objs, 2, "two objects in the result set");
+ ok($has{$pid}, "parent is in the result set");
+ ok($has{$cid}, "child is in the result set");
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => \@objs );
+ $shredder->WipeoutAll;
+}
+cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+
+{ # create parent and child and link them reqursively to check that we don't hang
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($pid) = $parent->Create( Subject => 'parent', Queue => 1 );
+ ok( $pid, "created new ticket" );
+
+ my $child = RT::Ticket->new( $RT::SystemUser );
+ my ($cid) = $child->Create( Subject => 'child', Queue => 1, MemberOf => $pid );
+ ok( $cid, "created new ticket" );
+
+ my ($status, $msg) = $child->AddLink( Target => $pid, Type => 'DependsOn' );
+ ok($status, "added reqursive link") or diag "error: $msg";
+
+ my $plugin = new RT::Shredder::Plugin::Tickets;
+ isa_ok($plugin, 'RT::Shredder::Plugin::Tickets');
+
+ my (@objs);
+ ($status, $msg) = $plugin->TestArgs( query => 'Subject = "parent"' );
+ ok($status, "plugin arguments are ok") or diag "error: $msg";
+
+ ($status, @objs) = $plugin->Run;
+ ok($status, "executed plugin successfully") or diag "error: @objs";
+ @objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
+ is(scalar @objs, 1, "only one object in result set");
+ is($objs[0]->id, $pid, "parent is in result set");
+
+ ($status, $msg) = $plugin->TestArgs( query => 'Subject = "parent"', with_linked => 1 );
+ ok($status, "plugin arguments are ok") or diag "error: $msg";
+
+ ($status, @objs) = $plugin->Run;
+ ok($status, "executed plugin successfully") or diag "error: @objs";
+ @objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
+ is(scalar @objs, 2, "two objects in the result set");
+ my %has = map { $_->id => 1 } @objs;
+ ok($has{$pid}, "parent is in the result set");
+ ok($has{$cid}, "child is in the result set");
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => \@objs );
+ $shredder->WipeoutAll;
+}
+cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
+
+{ # create parent and child and check functionality of 'apply_query_to_linked' arg
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($pid) = $parent->Create( Subject => 'parent', Queue => 1, Status => 'resolved' );
+ ok( $pid, "created new ticket" );
+
+ my $child1 = RT::Ticket->new( $RT::SystemUser );
+ my ($cid1) = $child1->Create( Subject => 'child', Queue => 1, MemberOf => $pid );
+ ok( $cid1, "created new ticket" );
+ my $child2 = RT::Ticket->new( $RT::SystemUser );
+ my ($cid2) = $child2->Create( Subject => 'child', Queue => 1, MemberOf => $pid, Status => 'resolved' );
+ ok( $cid2, "created new ticket" );
+
+ my $plugin = new RT::Shredder::Plugin::Tickets;
+ isa_ok($plugin, 'RT::Shredder::Plugin::Tickets');
+
+ my ($status, $msg) = $plugin->TestArgs( query => 'Status = "resolved"', apply_query_to_linked => 1 );
+ ok($status, "plugin arguments are ok") or diag "error: $msg";
+
+ my @objs;
+ ($status, @objs) = $plugin->Run;
+ ok($status, "executed plugin successfully") or diag "error: @objs";
+ @objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
+ is(scalar @objs, 2, "two objects in the result set");
+ my %has = map { $_->id => 1 } @objs;
+ ok($has{$pid}, "parent is in the result set");
+ ok(!$has{$cid1}, "first child is in the result set");
+ ok($has{$cid2}, "second child is in the result set");
+
+ my $shredder = shredder_new();
+ $shredder->PutObjects( Objects => \@objs );
+ $shredder->WipeoutAll;
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $cid1 );
+ is($ticket->id, $cid1, 'loaded ticket');
+
+ $shredder->PutObjects( Objects => $ticket );
+ $shredder->WipeoutAll;
+}
+cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
diff --git a/rt/t/shredder/03plugin_users.t b/rt/t/shredder/03plugin_users.t
new file mode 100644
index 0000000..45fc8a2
--- /dev/null
+++ b/rt/t/shredder/03plugin_users.t
@@ -0,0 +1,40 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::Deep;
+use File::Spec;
+use Test::More tests => 9;
+use RT::Test ();
+BEGIN {
+ my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
+ File::Spec->curdir());
+ require $shredder_utils;
+}
+
+
+my @ARGS = sort qw(limit status name member_of email replace_relations no_tickets);
+
+use_ok('RT::Shredder::Plugin::Users');
+{
+ my $plugin = new RT::Shredder::Plugin::Users;
+ isa_ok($plugin, 'RT::Shredder::Plugin::Users');
+
+ is(lc $plugin->Type, 'search', 'correct type');
+
+ my @args = sort $plugin->SupportArgs;
+ cmp_deeply(\@args, \@ARGS, "support all args");
+
+
+ my ($status, $msg) = $plugin->TestArgs( name => 'r??t*' );
+ ok($status, "arg name = 'r??t*'") or diag("error: $msg");
+
+ for (qw(any disabled enabled)) {
+ my ($status, $msg) = $plugin->TestArgs( status => $_ );
+ ok($status, "arg status = '$_'") or diag("error: $msg");
+ }
+ ($status, $msg) = $plugin->TestArgs( status => '!@#' );
+ ok(!$status, "bad 'status' arg value");
+}
+
diff --git a/rt/t/shredder/utils.pl b/rt/t/shredder/utils.pl
new file mode 100644
index 0000000..5424331
--- /dev/null
+++ b/rt/t/shredder/utils.pl
@@ -0,0 +1,435 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Temp 0.19 ();
+require File::Path;
+require File::Copy;
+require Cwd;
+
+BEGIN {
+### after: push @INC, qw(@RT_LIB_PATH@);
+ push @INC, qw(/opt/rt3/local/lib /opt/rt3/lib);
+}
+use RT::Shredder;
+
+# where to keep temporary generated test data
+my $tmpdir = '';
+
+=head1 DESCRIPTION
+
+RT::Shredder test suite utilities
+
+=head1 TESTING
+
+Since RT:Shredder 0.01_03 we have a test suite. You
+can run tests and see if everything works as expected
+before you try shredder on your actual data.
+Tests also help in the development process.
+
+The test suite uses SQLite databases to store data in individual files,
+so you could sun tests on your production servers without risking
+damage to your production data.
+
+You'll want to run the test suite almost every time you install or update
+the shredder distribution, especialy if you have local customizations of
+the DB schema and/or RT code.
+
+Tests are one thing you can write even if you don't know much perl,
+but want to learn more about RT's internals. New tests are very welcome.
+
+=head2 WRITING TESTS
+
+The shredder distribution has several files to help write new tests.
+
+ t/shredder/utils.pl - this file, utilities
+ t/00skeleton.t - skeleteton .t file for new tests
+
+All tests follow this algorithm:
+
+ require "t/shredder/utils.pl"; # plug in utilities
+ init_db(); # create new tmp RT DB and init RT API
+ # create RT data you want to be always in the RT DB
+ # ...
+ create_savepoint('mysp'); # create DB savepoint
+ # create data you want delete with shredder
+ # ...
+ # run shredder on the objects you've created
+ # ...
+ # check that shredder deletes things you want
+ # this command will compare savepoint DB with current
+ cmp_deeply( dump_current_and_savepoint('mysp'), "current DB equal to savepoint");
+ # then you can create another object and delete it, then check again
+
+Savepoints are named and you can create two or more savepoints.
+
+=head1 FUNCTIONS
+
+=head2 RT CONFIG
+
+=head3 rewrite_rtconfig
+
+Call this sub after C<RT::LoadConfig>. It changes the RT config
+options necessary to switch to a local SQLite database.
+
+=cut
+
+sub rewrite_rtconfig
+{
+ # database
+ config_set( '$DatabaseType' , 'SQLite' );
+ config_set( '$DatabaseHost' , 'localhost' );
+ config_set( '$DatabaseRTHost' , 'localhost' );
+ config_set( '$DatabasePort' , '' );
+ config_set( '$DatabaseUser' , 'rt_user' );
+ config_set( '$DatabasePassword' , 'rt_pass' );
+ config_set( '$DatabaseRequireSSL' , undef );
+ # database file name
+ config_set( '$DatabaseName' , db_name() );
+
+ # generic logging
+ config_set( '$LogToSyslog' , undef );
+ config_set( '$LogToScreen' , 'error' );
+ config_set( '$LogStackTraces' , 'crit' );
+ # logging to standalone file
+ config_set( '$LogToFile' , 'debug' );
+ my $fname = File::Spec->catfile(create_tmpdir(), test_name() .".log");
+ config_set( '$LogToFileNamed' , $fname );
+}
+
+=head3 config_set
+
+This sub is a helper used by C<rewrite_rtconfig>. You shouldn't
+need to use it elsewhere unless you need to change other RT
+configuration variables.
+
+=cut
+
+sub config_set {
+ my $opt = shift;
+ $opt =~ s/^[\$\%\@]//;
+ RT->Config->Set($opt, @_)
+}
+
+=head2 DATABASES
+
+=head3 init_db
+
+Creates a new RT DB with initial data in a new test tmp dir.
+Also runs RT::Init() and RT::InitLogging().
+
+This is all you need to call to setup a testing environment
+in most situations.
+
+=cut
+
+sub init_db
+{
+ create_tmpdir();
+ RT::LoadConfig();
+ rewrite_rtconfig();
+ RT::InitLogging();
+
+ _init_db();
+
+ RT::Init();
+ $SIG{__WARN__} = sub { $RT::Logger->warning( @_ ); warn @_ };
+ $SIG{__DIE__} = sub { $RT::Logger->crit( @_ ) unless $^S; die @_ };
+}
+
+use IPC::Open2;
+sub _init_db
+{
+
+
+ foreach ( qw(Type Host Port Name User Password) ) {
+ $ENV{ "RT_DB_". uc $_ } = RT->Config->Get("Database$_");
+ }
+ my $rt_setup_database = RT::Test::get_relocatable_file(
+ 'rt-setup-database', (File::Spec->updir(), File::Spec->updir(), 'sbin'));
+ my $cmd = "$^X $rt_setup_database --action init 2>&1";
+
+ my ($child_out, $child_in);
+ my $pid = open2($child_out, $child_in, $cmd);
+ close $child_in;
+ my $result = do { local $/; <$child_out> };
+ return $result;
+}
+
+=head3 db_name
+
+Returns the absolute file path to the current DB.
+It is <$tmpdir . test_name() .'.db'>.
+
+See also the C<test_name> function.
+
+=cut
+
+sub db_name { return File::Spec->catfile(create_tmpdir(), test_name() .".db") }
+
+=head3 connect_sqlite
+
+Returns connected DBI DB handle.
+
+Takes path to sqlite db.
+
+=cut
+
+sub connect_sqlite
+{
+ return DBI->connect("dbi:SQLite:dbname=". shift, "", "");
+}
+
+=head2 SHREDDER
+
+=head3 shredder_new
+
+Creates and returns a new RT::Shredder object.
+
+=cut
+
+sub shredder_new
+{
+ my $obj = new RT::Shredder;
+
+ my $file = File::Spec->catfile( create_tmpdir(), test_name() .'.XXXX.sql' );
+ $obj->AddDumpPlugin( Arguments => {
+ file_name => $file,
+ from_storage => 0,
+ } );
+
+ return $obj;
+}
+
+
+=head2 TEST FILES
+
+=head3 test_name
+
+Returns name of the test file running now with file extension and
+directory names stripped.
+
+For example, it returns '00load' for the test file 't/00load.t'.
+
+=cut
+
+sub test_name
+{
+ my $name = $0;
+ $name =~ s/^.*[\\\/]//;
+ $name =~ s/\..*$//;
+ return $name;
+}
+
+=head2 TEMPORARY DIRECTORY
+
+=head3 tmpdir
+
+Returns the absolute path to a tmp dir used in tests.
+
+=cut
+
+sub tmpdir {
+ if (-d $tmpdir) {
+ return $tmpdir;
+ } else {
+ $tmpdir = File::Temp->newdir(TEMPLATE => 'shredderXXXXX', CLEANUP => 0);
+ return $tmpdir;
+ }
+}
+
+=head2 create_tmpdir
+
+Creates a tmp dir if one doesn't exist already. Returns tmpdir path.
+
+=cut
+
+sub create_tmpdir { my $n = tmpdir(); File::Path::mkpath( [$n] ); return $n }
+
+=head3 cleanup_tmp
+
+Deletes all the tmp dir used in the tests.
+See also the C<test_name> function.
+
+=cut
+
+sub cleanup_tmp
+{
+ my $dir = File::Spec->catdir(tmpdir(), test_name());
+ return File::Path::rmtree( File::Spec->catdir( tmpdir(), test_name() ));
+}
+
+=head2 SAVEPOINTS
+
+=head3 savepoint_name
+
+Returns the absolute path to the named savepoint DB file.
+Takes one argument - savepoint name, by default C<sp>.
+
+=cut
+
+sub savepoint_name
+{
+ my $name = shift || 'sp';
+ return File::Spec->catfile( create_tmpdir(), test_name() .".$name.db" );
+}
+
+=head3 create_savepoint
+
+Creates savepoint DB from the current DB.
+Takes name of the savepoint as argument.
+
+=head3 restore_savepoint
+
+Restores current DB to savepoint state.
+Takes name of the savepoint as argument.
+
+=cut
+
+sub create_savepoint { return __cp_db( db_name() => savepoint_name( shift ) ) }
+sub restore_savepoint { return __cp_db( savepoint_name( shift ) => db_name() ) }
+sub __cp_db
+{
+ my( $orig, $dest ) = @_;
+ $RT::Handle->dbh->disconnect;
+ # DIRTY HACK: undef Handles to force reconnect
+ $RT::Handle = undef;
+ %DBIx::SearchBuilder::DBIHandle = ();
+ $DBIx::SearchBuilder::PrevHandle = undef;
+
+ File::Copy::copy( $orig, $dest ) or die "Couldn't copy '$orig' => '$dest': $!";
+ RT::ConnectToDatabase();
+ return;
+}
+
+
+=head2 DUMPS
+
+=head3 dump_sqlite
+
+Returns DB dump as a complex hash structure:
+ {
+ TableName => {
+ #id => {
+ lc_field => 'value',
+ }
+ }
+ }
+
+Takes named argument C<CleanDates>. If true, clean all date fields from
+dump. True by default.
+
+=cut
+
+sub dump_sqlite
+{
+ my $dbh = shift;
+ my %args = ( CleanDates => 1, @_ );
+
+ my $old_fhkn = $dbh->{'FetchHashKeyName'};
+ $dbh->{'FetchHashKeyName'} = 'NAME_lc';
+
+ my $sth = $dbh->table_info( '', '', '%', 'TABLE' ) || die $DBI::err;
+ my @tables = keys %{$sth->fetchall_hashref( 'table_name' )};
+
+ my $res = {};
+ foreach my $t( @tables ) {
+ next if lc($t) eq 'sessions';
+ $res->{$t} = $dbh->selectall_hashref("SELECT * FROM $t", 'id');
+ clean_dates( $res->{$t} ) if $args{'CleanDates'};
+ die $DBI::err if $DBI::err;
+ }
+
+ $dbh->{'FetchHashKeyName'} = $old_fhkn;
+ return $res;
+}
+
+=head3 dump_current_and_savepoint
+
+Returns dump of the current DB and of the named savepoint.
+Takes one argument - savepoint name.
+
+=cut
+
+sub dump_current_and_savepoint
+{
+ my $orig = savepoint_name( shift );
+ die "Couldn't find savepoint file" unless -f $orig && -r _;
+ my $odbh = connect_sqlite( $orig );
+ return ( dump_sqlite( $RT::Handle->dbh, @_ ), dump_sqlite( $odbh, @_ ) );
+}
+
+=head3 dump_savepoint_and_current
+
+Returns the same data as C<dump_current_and_savepoint> function,
+but in reversed order.
+
+=cut
+
+sub dump_savepoint_and_current { return reverse dump_current_and_savepoint(@_) }
+
+sub clean_dates
+{
+ my $h = shift;
+ my $date_re = qr/^\d\d\d\d\-\d\d\-\d\d\s*\d\d\:\d\d(\:\d\d)?$/i;
+ foreach my $id ( keys %{ $h } ) {
+ next unless $h->{ $id };
+ foreach ( keys %{ $h->{ $id } } ) {
+ delete $h->{$id}{$_} if $h->{$id}{$_} &&
+ $h->{$id}{$_} =~ /$date_re/;
+ }
+ }
+}
+
+=head2 NOTES
+
+Function that returns debug notes.
+
+=head3 note_on_fail
+
+Returns a note about debug info that you can display if tests fail.
+
+=cut
+
+sub note_on_fail
+{
+ my $name = test_name();
+ my $tmpdir = tmpdir();
+ return <<END;
+Some tests in '$0' file failed.
+You can find debug info in '$tmpdir' dir.
+There should be:
+ $name.log - RT debug log file
+ $name.db - latest RT DB used while testing
+ $name.*.db - savepoint databases
+See also perldoc t/shredder/utils.pl for how to use this info.
+END
+}
+
+=head2 OTHER
+
+=head3 all_were_successful
+
+Returns true if all tests that have already run were successful.
+
+=cut
+
+sub all_were_successful
+{
+ use Test::Builder;
+ my $Test = Test::Builder->new;
+ return grep( !$_, $Test->summary )? 0: 1;
+}
+
+END {
+ return unless -e tmpdir();
+ if ( all_were_successful() ) {
+ cleanup_tmp();
+ } else {
+ diag( note_on_fail() );
+ }
+}
+
+1;
diff --git a/rt/t/ticket/action_linear_escalate.t b/rt/t/ticket/action_linear_escalate.t
new file mode 100644
index 0000000..38cd47d
--- /dev/null
+++ b/rt/t/ticket/action_linear_escalate.t
@@ -0,0 +1,100 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT;
+use RT::Test tests => 17;
+
+my ($id, $msg);
+my $RecordTransaction;
+my $UpdateLastUpdated;
+
+
+use_ok('RT::Action::LinearEscalate');
+
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+
+# rt-cron-tool uses Gecos name to get rt user, so we'd better create one
+my $gecos = RT::Test->load_or_create_user(
+ Name => 'gecos',
+ Password => 'password',
+ Gecos => ($^O eq 'MSWin32') ? Win32::LoginName() : (getpwuid($<))[0],
+);
+ok $gecos && $gecos->id, 'loaded or created gecos user';
+
+# get rid of all right permissions
+$gecos->PrincipalObj->GrantRight( Right => 'SuperUser' );
+
+
+my $user = RT::Test->load_or_create_user(
+ Name => 'user', Password => 'password',
+);
+ok $user && $user->id, 'loaded or created user';
+
+$user->PrincipalObj->GrantRight( Right => 'SuperUser' );
+my $current_user = RT::CurrentUser->new($RT::SystemUser);
+($id, $msg) = $current_user->Load($user->id);
+ok( $id, "Got current user? $msg" );
+
+#defaults
+$RecordTransaction = 0;
+$UpdateLastUpdated = 1;
+my $ticket2 = create_ticket_as_ok($current_user);
+escalate_ticket_ok($ticket2);
+ok( $ticket2->LastUpdatedBy != $user->id, "Set LastUpdated" );
+ok( $ticket2->Transactions->Last->Type =~ /Create/i, "Did not record a transaction" );
+
+$RecordTransaction = 1;
+$UpdateLastUpdated = 1;
+my $ticket1 = create_ticket_as_ok($current_user);
+escalate_ticket_ok($ticket1);
+ok( $ticket1->LastUpdatedBy != $user->id, "Set LastUpdated" );
+ok( $ticket1->Transactions->Last->Type !~ /Create/i, "Recorded a transaction" );
+
+$RecordTransaction = 0;
+$UpdateLastUpdated = 0;
+my $ticket3 = create_ticket_as_ok($current_user);
+escalate_ticket_ok($ticket3);
+ok( $ticket3->LastUpdatedBy == $user->id, "Did not set LastUpdated" );
+ok( $ticket3->Transactions->Last->Type =~ /Create/i, "Did not record a transaction" );
+
+1;
+
+
+sub create_ticket_as_ok {
+ my $user = shift;
+
+ my $created = RT::Date->new($RT::SystemUser);
+ $created->Unix(time() - ( 7 * 24 * 60**2 ));
+ my $due = RT::Date->new($RT::SystemUser);
+ $due->Unix(time() + ( 7 * 24 * 60**2 ));
+
+ my $ticket = RT::Ticket->new($user);
+ ($id, $msg) = $ticket->Create( Queue => $q->id,
+ Subject => "Escalation test",
+ Priority => 0,
+ InitialPriority => 0,
+ FinalPriority => 50,
+ );
+ ok($id, "Created ticket? ".$id);
+ $ticket->__Set( Field => 'Created',
+ Value => $created->ISO,
+ );
+ $ticket->__Set( Field => 'Due',
+ Value => $due->ISO,
+ );
+
+ return $ticket;
+}
+
+sub escalate_ticket_ok {
+ my $ticket = shift;
+ my $id = $ticket->id;
+ print "$RT::BinPath/rt-crontool --search RT::Search::FromSQL --search-arg \"id = @{[$id]}\" --action RT::Action::LinearEscalate --action-arg \"RecordTransaction:$RecordTransaction; UpdateLastUpdated:$UpdateLastUpdated\"\n";
+ print STDERR `$RT::BinPath/rt-crontool --search RT::Search::FromSQL --search-arg "id = @{[$id]}" --action RT::Action::LinearEscalate --action-arg "RecordTransaction:$RecordTransaction; UpdateLastUpdated:$UpdateLastUpdated"`;
+
+ $ticket->Load($id); # reload, because otherwise we get the cached value
+ ok( $ticket->Priority != 0, "Escalated ticket" );
+}
diff --git a/rt/t/ticket/add-watchers.t b/rt/t/ticket/add-watchers.t
new file mode 100644
index 0000000..ae993a9
--- /dev/null
+++ b/rt/t/ticket/add-watchers.t
@@ -0,0 +1,167 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
+# <jesse.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+#
+# 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 }}}
+
+use RT::Test tests => 32;
+
+use strict;
+use warnings;
+no warnings 'once';
+
+use RT::Queue;
+use RT::User;
+use RT::Group;
+use RT::Ticket;
+use RT::CurrentUser;
+
+
+# clear all global right
+my $acl = RT::ACL->new($RT::SystemUser);
+$acl->Limit( FIELD => 'RightName', OPERATOR => '!=', VALUE => 'SuperUser' );
+$acl->LimitToObject( $RT::System );
+while( my $ace = $acl->Next ) {
+ $ace->Delete;
+}
+
+# create new queue to be sure we do not mess with rights
+my $queue = RT::Queue->new($RT::SystemUser);
+my ($queue_id) = $queue->Create( Name => 'watcher tests '.$$);
+ok( $queue_id, 'queue created for watcher tests' );
+
+# new privileged user to check rights
+my $user = RT::User->new( $RT::SystemUser );
+my ($user_id) = $user->Create( Name => 'watcher'.$$,
+ EmailAddress => "watcher$$".'@localhost',
+ Privileged => 1,
+ Password => 'qwe123',
+ );
+my $cu= RT::CurrentUser->new($user);
+
+# make sure user can see tickets in the queue
+my $principal = $user->PrincipalObj;
+ok( $principal, "principal loaded" );
+$principal->GrantRight( Right => 'ShowTicket', Object => $queue );
+$principal->GrantRight( Right => 'SeeQueue' , Object => $queue );
+
+ok( $user->HasRight( Right => 'SeeQueue', Object => $queue ), "user can see queue" );
+ok( $user->HasRight( Right => 'ShowTicket', Object => $queue ), "user can show queue tickets" );
+ok( !$user->HasRight( Right => 'ModifyTicket', Object => $queue ), "user can't modify queue tickets" );
+ok( !$user->HasRight( Right => 'Watch', Object => $queue ), "user can't watch queue tickets" );
+
+my $ticket = RT::Ticket->new( $RT::SystemUser );
+my ($rv, $msg) = $ticket->Create( Subject => 'watcher tests', Queue => $queue->Name );
+ok( $ticket->id, "ticket created" );
+
+my $ticket2 = RT::Ticket->new( $cu );
+$ticket2->Load( $ticket->id );
+ok( $ticket2->Subject, "ticket load by user" );
+
+# user can add self to ticket only after getting Watch right
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
+ok( !$rv, "user can't add self as Cc" );
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
+ok( !$rv, "user can't add self as Requestor" );
+$principal->GrantRight( Right => 'Watch' , Object => $queue );
+ok( $user->HasRight( Right => 'Watch', Object => $queue ), "user can watch queue tickets" );
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
+ok( $rv, "user can add self as Cc by PrincipalId" );
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
+ok( $rv, "user can add self as Requestor by PrincipalId" );
+
+# remove user and try adding with Email address
+($rv, $msg) = $ticket->DeleteWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
+ok( $rv, "watcher removed by PrincipalId" );
+($rv, $msg) = $ticket->DeleteWatcher( Type => 'Requestor', Email => $user->EmailAddress );
+ok( $rv, "watcher removed by Email" );
+
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', Email => $user->EmailAddress );
+ok( $rv, "user can add self as Cc by Email" );
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', Email => $user->EmailAddress );
+ok( $rv, "user can add self as Requestor by Email" );
+
+# remove user and try adding by username
+# This worked in 3.6 and is a regression in 3.8
+($rv, $msg) = $ticket->DeleteWatcher( Type => 'Cc', Email => $user->EmailAddress );
+ok( $rv, "watcher removed by Email" );
+($rv, $msg) = $ticket->DeleteWatcher( Type => 'Requestor', Email => $user->EmailAddress );
+ok( $rv, "watcher removed by Email" );
+
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', Email => $user->Name );
+ok( $rv, "user can add self as Cc by username" );
+($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', Email => $user->Name );
+ok( $rv, "user can add self as Requestor by username" );
+
+# Queue watcher tests
+$principal->RevokeRight( Right => 'Watch' , Object => $queue );
+ok( !$user->HasRight( Right => 'Watch', Object => $queue ), "user queue watch right revoked" );
+
+my $queue2 = RT::Queue->new( $cu );
+($rv, $msg) = $queue2->Load( $queue->id );
+ok( $rv, "user loaded queue" );
+
+# user can add self to queue only after getting Watch right
+($rv, $msg) = $queue2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
+ok( !$rv, "user can't add self as Cc" );
+($rv, $msg) = $queue2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
+ok( !$rv, "user can't add self as Requestor" );
+$principal->GrantRight( Right => 'Watch' , Object => $queue );
+ok( $user->HasRight( Right => 'Watch', Object => $queue ), "user can watch queue queues" );
+($rv, $msg) = $queue2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
+ok( $rv, "user can add self as Cc by PrincipalId" );
+($rv, $msg) = $queue2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
+ok( $rv, "user can add self as Requestor by PrincipalId" );
+
+# remove user and try adding with Email address
+($rv, $msg) = $queue->DeleteWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
+ok( $rv, "watcher removed by PrincipalId" );
+($rv, $msg) = $queue->DeleteWatcher( Type => 'Requestor', Email => $user->EmailAddress );
+ok( $rv, "watcher removed by Email" );
+
+($rv, $msg) = $queue2->AddWatcher( Type => 'Cc', Email => $user->EmailAddress );
+ok( $rv, "user can add self as Cc by Email" );
+($rv, $msg) = $queue2->AddWatcher( Type => 'Requestor', Email => $user->EmailAddress );
+ok( $rv, "user can add self as Requestor by Email" );
+
diff --git a/rt/t/ticket/badlinks.t b/rt/t/ticket/badlinks.t
new file mode 100644
index 0000000..408e6b6
--- /dev/null
+++ b/rt/t/ticket/badlinks.t
@@ -0,0 +1,38 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use RT::Test tests => 12;
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok($m->login, "Logged in");
+
+my $queue = RT::Test->load_or_create_queue(Name => 'General');
+ok($queue->Id, "loaded the General queue");
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($tid, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test links',
+ );
+ok $tid, 'created a ticket #'. $tid or diag "error: $msg";
+
+$m->goto_ticket($tid);
+
+$m->follow_link_ok( { text => 'Links' }, "Followed link to Links" );
+
+ok $m->form_with_fields("$tid-DependsOn"), "found the form";
+my $not_a_ticket_url = "http://example.com/path/to/nowhere";
+$m->field("$tid-DependsOn", $not_a_ticket_url);
+$m->field("DependsOn-$tid", $not_a_ticket_url);
+$m->field("$tid-MemberOf", $not_a_ticket_url);
+$m->field("MemberOf-$tid", $not_a_ticket_url);
+$m->field("$tid-RefersTo", $not_a_ticket_url);
+$m->field("RefersTo-$tid", $not_a_ticket_url);
+$m->submit;
+
+foreach my $type ("depends on", "member of", "refers to") {
+ $m->content_like(qr/$type.+$not_a_ticket_url/,"base for $type");
+ $m->content_like(qr/$not_a_ticket_url.+$type/,"target for $type");
+}
+
+$m->goto_ticket($tid);
diff --git a/rt/t/ticket/batch-upload-csv.t b/rt/t/ticket/batch-upload-csv.t
new file mode 100644
index 0000000..41dc786
--- /dev/null
+++ b/rt/t/ticket/batch-upload-csv.t
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -w
+use strict; use warnings;
+
+use RT::Test tests => 12;
+use_ok('RT');
+
+use_ok('RT::Action::CreateTickets');
+
+my $QUEUE = 'uploadtest-'.$$;
+
+my $queue_obj = RT::Queue->new($RT::SystemUser);
+$queue_obj->Create(Name => $QUEUE);
+
+my $cf = RT::CustomField->new($RT::SystemUser);
+my ($val,$msg) = $cf->Create(Name => 'Work Package-'.$$, Type => 'Freeform', LookupType => RT::Ticket->CustomFieldLookupType, MaxValues => 1);
+ok($cf->id);
+ok($val,$msg);
+($val, $msg) = $cf->AddToObject($queue_obj);
+ok($val,$msg);
+ok($queue_obj->TicketCustomFields()->Count, "We have a custom field, at least");
+
+
+my $data = <<EOF;
+id,Queue,Subject,Status,Requestor,@{[$cf->Name]}
+create-1,$QUEUE,hi,new,root,2.0
+create-2,$QUEUE,hello,new,root,3.0
+EOF
+
+my $action = RT::Action::CreateTickets->new(CurrentUser => RT::CurrentUser->new('root'));
+ok ($action->CurrentUser->id , "WE have a current user");
+
+$action->Parse(Content => $data);
+my @results = $action->CreateByTemplate();
+
+my $tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL ("Queue = '". $QUEUE."'");
+$tix->OrderBy( FIELD => 'id', ORDER => 'ASC' );
+is($tix->Count, 2, '2 tickets');
+
+my $first = $tix->First();
+
+is($first->Subject(), 'hi');
+is($first->FirstCustomFieldValue($cf->id), '2.0');
+
+my $second = $tix->Next;
+is($second->Subject(), 'hello');
+is($second->FirstCustomFieldValue($cf->id), '3.0');
+1;
diff --git a/rt/t/ticket/cfsort-freeform-multiple.t b/rt/t/ticket/cfsort-freeform-multiple.t
new file mode 100644
index 0000000..f8f5950
--- /dev/null
+++ b/rt/t/ticket/cfsort-freeform-multiple.t
@@ -0,0 +1,137 @@
+#!/usr/bin/perl
+
+use RT::Test tests => 24;
+
+use strict;
+use warnings;
+
+use RT::Tickets;
+use RT::Queue;
+use RT::CustomField;
+
+# Test Sorting by custom fields.
+
+diag "Create a queue to test with." if $ENV{TEST_VERBOSE};
+my $queue_name = "CFSortQueue-$$";
+my $queue;
+{
+ $queue = RT::Queue->new( $RT::SystemUser );
+ my ($ret, $msg) = $queue->Create(
+ Name => $queue_name,
+ Description => 'queue for custom field sort testing'
+ );
+ ok($ret, "$queue_name - test queue creation. $msg");
+}
+
+diag "create a CF\n" if $ENV{TEST_VERBOSE};
+my $cf_name = "Order$$";
+my $cf;
+{
+ $cf = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $cf->Create(
+ Name => $cf_name,
+ Queue => $queue->id,
+ Type => 'FreeformMultiple',
+ );
+ ok($ret, "Custom Field Order created");
+}
+
+my ($total, @data, @tickets, @test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ @data = sort { rand(100) <=> rand(100) } @data;
+ while (@data) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my %args = %{ shift(@data) };
+ my @values = ();
+ if ( exists $args{'CF'} && ref $args{'CF'} ) {
+ @values = @{ delete $args{'CF'} };
+ } elsif ( exists $args{'CF'} ) {
+ @values = (delete $args{'CF'});
+ }
+ $args{ 'CustomField-'. $cf->id } = \@values
+ if @values;
+ my $subject = join(",", sort @values) || '-';
+ my ( $id, undef $msg ) = $t->Create(
+ %args,
+ Queue => $queue->id,
+ Subject => $subject,
+ );
+ ok( $id, "ticket created" ) or diag("error: $msg");
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $test ( @test ) {
+ my $query = join " AND ", map "( $_ )", grep defined && length,
+ $query_prefix, $test->{'Query'};
+
+ foreach my $order (qw(ASC DESC)) {
+ my $error = 0;
+ my $tix = RT::Tickets->new( $RT::SystemUser );
+ $tix->FromSQL( $query );
+ $tix->OrderBy( FIELD => $test->{'Order'}, ORDER => $order );
+
+ ok($tix->Count, "found ticket(s)")
+ or $error = 1;
+
+ my ($order_ok, $last) = (1, $order eq 'ASC'? '-': 'zzzzzz');
+ my $last_id = $tix->Last->id;
+ while ( my $t = $tix->Next ) {
+ my $tmp;
+ next if $t->id == $last_id and $t->Subject eq "-"; # Nulls are allowed to come last, in Pg
+
+ if ( $order eq 'ASC' ) {
+ $tmp = ((split( /,/, $last))[0] cmp (split( /,/, $t->Subject))[0]);
+ } else {
+ $tmp = -((split( /,/, $last))[-1] cmp (split( /,/, $t->Subject))[-1]);
+ }
+ if ( $tmp > 0 ) {
+ $order_ok = 0; last;
+ }
+ $last = $t->Subject;
+ }
+
+ ok( $order_ok, "$order order of tickets is good" )
+ or $error = 1;
+
+ if ( $error ) {
+ diag "Wrong SQL query:". $tix->BuildSelectQuery;
+ $tix->GotoFirstItem;
+ while ( my $t = $tix->Next ) {
+ diag sprintf "%02d - %s", $t->id, $t->Subject;
+ }
+ }
+ }
+ }
+}
+
+@data = (
+ { },
+ { CF => ['b', 'd'] },
+ { CF => ['a', 'c'] },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "CF.{$cf_name}" },
+ { Order => "CF.$queue_name.{$cf_name}" },
+);
+run_tests();
+
+@data = (
+ { CF => ['m', 'a'] },
+ { CF => ['m'] },
+ { CF => ['m', 'o'] },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "CF.{$cf_name}", Query => "CF.{$cf_name} = 'm'" },
+ { Order => "CF.$queue_name.{$cf_name}", Query => "CF.{$cf_name} = 'm'" },
+);
+run_tests();
+
diff --git a/rt/t/ticket/cfsort-freeform-single.t b/rt/t/ticket/cfsort-freeform-single.t
new file mode 100644
index 0000000..f1f506b
--- /dev/null
+++ b/rt/t/ticket/cfsort-freeform-single.t
@@ -0,0 +1,191 @@
+#!/usr/bin/perl
+
+use RT::Test tests => 57;
+
+use strict;
+use warnings;
+
+use RT::Tickets;
+use RT::Queue;
+use RT::CustomField;
+
+# Test Sorting by FreeformSingle custom field.
+
+diag "Create a queue to test with." if $ENV{TEST_VERBOSE};
+my $queue_name = "CFSortQueue-$$";
+my $queue;
+{
+ $queue = RT::Queue->new( $RT::SystemUser );
+ my ($ret, $msg) = $queue->Create(
+ Name => $queue_name,
+ Description => 'queue for custom field sort testing'
+ );
+ ok($ret, "$queue test queue creation. $msg");
+}
+
+# CFs for testing, later we create another one
+my %CF;
+my $cf_name;
+
+diag "create a CF\n" if $ENV{TEST_VERBOSE};
+{
+ $cf_name = $CF{'CF'}{'name'} = "Order$$";
+ $CF{'CF'}{'obj'} = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $CF{'CF'}{'obj'}->Create(
+ Name => $CF{'CF'}{'name'},
+ Queue => $queue->id,
+ Type => 'FreeformSingle',
+ );
+ ok($ret, "Custom Field $CF{'CF'}{'name'} created");
+}
+
+my ($total, @data, @tickets, @test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ @data = sort { rand(100) <=> rand(100) } @data;
+ while (@data) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my %args = %{ shift(@data) };
+
+ my $subject = '-';
+ foreach my $e ( grep exists $CF{$_} && defined $CF{$_}, keys %args ) {
+ my @values = ();
+ if ( ref $args{ $e } ) {
+ @values = @{ delete $args{ $e } };
+ } else {
+ @values = (delete $args{ $e });
+ }
+ $args{ 'CustomField-'. $CF{ $e }{'obj'}->id } = \@values
+ if @values;
+ $subject = join(",", sort @values) || '-'
+ if $e eq 'CF';
+ }
+
+ my ( $id, undef $msg ) = $t->Create(
+ %args,
+ Queue => $queue->id,
+ Subject => $subject,
+ );
+ ok( $id, "ticket created" ) or diag("error: $msg");
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $test ( @test ) {
+ my $query = join " AND ", map "( $_ )", grep defined && length,
+ $query_prefix, $test->{'Query'};
+
+ foreach my $order (qw(ASC DESC)) {
+ my $error = 0;
+ my $tix = RT::Tickets->new( $RT::SystemUser );
+ $tix->FromSQL( $query );
+ $tix->OrderBy( FIELD => $test->{'Order'}, ORDER => $order );
+
+ ok($tix->Count, "found ticket(s)")
+ or $error = 1;
+
+ my ($order_ok, $last) = (1, $order eq 'ASC'? '-': 'zzzzzz');
+ my $last_id = $tix->Last->id;
+ while ( my $t = $tix->Next ) {
+ my $tmp;
+ next if $t->id == $last_id and $t->Subject eq "-"; # Nulls are allowed to come last, in Pg
+
+ if ( $order eq 'ASC' ) {
+ $tmp = ((split( /,/, $last))[0] cmp (split( /,/, $t->Subject))[0]);
+ } else {
+ $tmp = -((split( /,/, $last))[-1] cmp (split( /,/, $t->Subject))[-1]);
+ }
+ if ( $tmp > 0 ) {
+ $order_ok = 0; last;
+ }
+ $last = $t->Subject;
+ }
+
+ ok( $order_ok, "$order order of tickets is good" )
+ or $error = 1;
+
+ if ( $error ) {
+ diag "Wrong SQL query:". $tix->BuildSelectQuery;
+ $tix->GotoFirstItem;
+ while ( my $t = $tix->Next ) {
+ diag sprintf "%02d - %s", $t->id, $t->Subject;
+ }
+ }
+ }
+ }
+}
+
+@data = (
+ { },
+ { CF => 'a' },
+ { CF => 'b' },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "CF.{$cf_name}" },
+ { Order => "CF.$queue_name.{$cf_name}" },
+);
+run_tests();
+
+@data = (
+ { },
+ { CF => 'aa' },
+ { CF => 'ab' },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Query => "CF.{$cf_name} LIKE 'a'", Order => "CF.{$cf_name}" },
+ { Query => "CF.{$cf_name} LIKE 'a'", Order => "CF.$queue_name.{$cf_name}" },
+);
+run_tests();
+
+@data = (
+ { Subject => '-', },
+ { Subject => 'a', CF => 'a' },
+ { Subject => 'b', CF => 'b' },
+ { Subject => 'c', CF => 'c' },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Query => "CF.{$cf_name} != 'c'", Order => "CF.{$cf_name}" },
+ { Query => "CF.{$cf_name} != 'c'", Order => "CF.$queue_name.{$cf_name}" },
+);
+run_tests();
+
+
+
+diag "create another CF\n" if $ENV{TEST_VERBOSE};
+{
+ $CF{'AnotherCF'}{'name'} = "OrderAnother$$";
+ $CF{'AnotherCF'}{'obj'} = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $CF{'AnotherCF'}{'obj'}->Create(
+ Name => $CF{'AnotherCF'}{'name'},
+ Queue => $queue->id,
+ Type => 'FreeformSingle',
+ );
+ ok($ret, "Custom Field $CF{'AnotherCF'}{'name'} created");
+}
+
+# test that order is not affect by other fields (had such problem)
+@data = (
+ { Subject => '-', },
+ { Subject => 'a', CF => 'a', AnotherCF => 'za' },
+ { Subject => 'b', CF => 'b', AnotherCF => 'ya' },
+ { Subject => 'c', CF => 'c', AnotherCF => 'xa' },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "CF.{$cf_name}" },
+ { Order => "CF.$queue_name.{$cf_name}" },
+ { Query => "CF.{$cf_name} != 'c'", Order => "CF.{$cf_name}" },
+ { Query => "CF.{$cf_name} != 'c'", Order => "CF.$queue_name.{$cf_name}" },
+);
+run_tests();
+
+
+
diff --git a/rt/t/ticket/deferred_owner.t b/rt/t/ticket/deferred_owner.t
new file mode 100644
index 0000000..40172ca
--- /dev/null
+++ b/rt/t/ticket/deferred_owner.t
@@ -0,0 +1,120 @@
+
+use strict;
+use warnings;
+
+use RT::Test tests => 18;
+use_ok('RT');
+use_ok('RT::Ticket');
+use Test::Warn;
+
+
+my $tester = RT::Test->load_or_create_user(
+ EmailAddress => 'tester@localhost',
+);
+ok $tester && $tester->id, 'loaded or created user';
+
+my $queue = RT::Test->load_or_create_queue( Name => 'General' );
+ok $queue && $queue->id, 'loaded or created queue';
+
+my $owner_role_group = RT::Group->new( $RT::SystemUser );
+$owner_role_group->LoadQueueRoleGroup( Type => 'Owner', Queue => $queue->id );
+ok $owner_role_group->id, 'loaded owners role group of the queue';
+
+diag "check that deffering owner doesn't regress" if $ENV{'TEST_VERBOSE'};
+{
+ RT::Test->set_rights(
+ { Principal => $tester->PrincipalObj,
+ Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket)],
+ },
+ { Principal => $owner_role_group->PrincipalObj,
+ Object => $queue,
+ Right => [qw(ModifyTicket)],
+ },
+ );
+ my $ticket = RT::Ticket->new( $tester );
+ # tester is owner, owner has right to modify owned tickets,
+ # this right is required to set somebody as AdminCc
+ my ($tid, $txn_id, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $tester->id,
+ AdminCc => 'root@localhost',
+ );
+ diag $msg if $msg && $ENV{'TEST_VERBOSE'};
+ ok $tid, "created a ticket";
+ is $ticket->Owner, $tester->id, 'correct owner';
+ like $ticket->AdminCcAddresses, qr/root\@localhost/, 'root is there';
+}
+
+diag "check that previous trick doesn't work without sufficient rights"
+ if $ENV{'TEST_VERBOSE'};
+{
+ RT::Test->set_rights(
+ { Principal => $tester->PrincipalObj,
+ Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket)],
+ },
+ );
+ my $ticket = RT::Ticket->new( $tester );
+ # tester is owner, owner has right to modify owned tickets,
+ # this right is required to set somebody as AdminCc
+ my ($tid, $txn_id, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $tester->id,
+ AdminCc => 'root@localhost',
+ );
+ diag $msg if $msg && $ENV{'TEST_VERBOSE'};
+ ok $tid, "created a ticket";
+ is $ticket->Owner, $tester->id, 'correct owner';
+ unlike $ticket->AdminCcAddresses, qr/root\@localhost/, 'root is there';
+}
+
+diag "check that deffering owner really works" if $ENV{'TEST_VERBOSE'};
+{
+ RT::Test->set_rights(
+ { Principal => $tester->PrincipalObj,
+ Right => [qw(SeeQueue ShowTicket CreateTicket)],
+ },
+ { Principal => $queue->Cc->PrincipalObj,
+ Object => $queue,
+ Right => [qw(OwnTicket TakeTicket)],
+ },
+ );
+ my $ticket = RT::Ticket->new( $tester );
+ # set tester as Cc, Cc role group has right to own and take tickets
+ my ($tid, $txn_id, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $tester->id,
+ Cc => 'tester@localhost',
+ );
+ diag $msg if $msg && $ENV{'TEST_VERBOSE'};
+ ok $tid, "created a ticket";
+ like $ticket->CcAddresses, qr/tester\@localhost/, 'tester is in the cc list';
+ is $ticket->Owner, $tester->id, 'tester is also owner';
+}
+
+diag "check that deffering doesn't work without correct rights" if $ENV{'TEST_VERBOSE'};
+{
+ RT::Test->set_rights(
+ { Principal => $tester->PrincipalObj,
+ Right => [qw(SeeQueue ShowTicket CreateTicket)],
+ },
+ );
+
+ my $ticket = RT::Ticket->new( $tester );
+ # set tester as Cc, Cc role group has right to own and take tickets
+ my ($tid, $txn_id, $msg);
+ warning_like {
+ ($tid, $txn_id, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $tester->id,
+ Cc => 'tester@localhost',
+ );
+ } qr/User .* was proposed as a ticket owner but has no rights to own tickets in General/;
+
+ diag $msg if $msg && $ENV{'TEST_VERBOSE'};
+ ok $tid, "created a ticket";
+ like $ticket->CcAddresses, qr/tester\@localhost/, 'tester is in the cc list';
+ isnt $ticket->Owner, $tester->id, 'tester is also owner';
+}
+
+
+
diff --git a/rt/t/ticket/link_search.t b/rt/t/ticket/link_search.t
new file mode 100644
index 0000000..1bf7dc6
--- /dev/null
+++ b/rt/t/ticket/link_search.t
@@ -0,0 +1,246 @@
+#!/usr/bin/perl -w
+
+use strict;
+use RT;
+
+# Load the config file
+use RT::Test tests => 63;
+
+#Connect to the database and get RT::SystemUser and RT::Nobody loaded
+
+
+#Get the current user all loaded
+my $CurrentUser = $RT::SystemUser;
+
+my $queue = new RT::Queue($CurrentUser);
+$queue->Load('General') || Abort(loc("Queue could not be loaded."));
+
+my $child_ticket = new RT::Ticket( $CurrentUser );
+my ($childid) = $child_ticket->Create(
+ Subject => 'test child',
+ Queue => $queue->Id,
+);
+ok($childid, "We created a child ticket");
+
+my $parent_ticket = new RT::Ticket( $CurrentUser );
+my ($parentid) = $parent_ticket->Create(
+ Subject => 'test parent',
+ Children => [ $childid ],
+ Queue => $queue->Id,
+);
+ok($parentid, "We created a parent ticket");
+
+
+my $Collection = RT::Tickets->new($CurrentUser);
+$Collection->LimitMemberOf( $parentid );
+is($Collection->Count,1, "We found only one result");
+ok($Collection->First);
+is($Collection->First->id, $childid, "We found the collection of all children of $parentid with Limit");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL("MemberOf = $parentid");
+is($Collection->Count, 1, "We found only one result");
+ok($Collection->First);
+is($Collection->First->id, $childid, "We found the collection of all children of $parentid with TicketSQL");
+
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->LimitHasMember ($childid);
+is($Collection->Count,1, "We found only one result");
+ok($Collection->First);
+is($Collection->First->id, $parentid, "We found the collection of all parents of $childid with Limit");
+
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL("HasMember = $childid");
+is($Collection->Count,1, "We found only one result");
+ok($Collection->First);
+is($Collection->First->id, $parentid, "We found the collection of all parents of $childid with TicketSQL");
+
+
+# Now we find a collection of all the tickets which have no members. they should have no children.
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->LimitHasMember('');
+# must contain child; must not contain parent
+my %has;
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( $has{$childid}, "The collection has our child - $childid");
+ok( !$has{$parentid}, "The collection doesn't have our parent - $parentid");
+
+
+# Now we find a collection of all the tickets which are not members of anything. they should have no parents.
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->LimitMemberOf('');
+# must contain parent; must not contain child
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok ($has{$parentid} , "The collection has our parent - $parentid");
+ok( !$has{$childid}, "The collection doesn't have our child - $childid");
+
+
+# Do it all over with TicketSQL
+#
+
+
+
+# Now we find a collection of all the tickets which have no members. they should have no children.
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL ("HasMember IS NULL");
+# must contain parent; must not contain child
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( !$has{$parentid}, "The collection doesn't have our parent - $parentid");
+ok( $has{$childid}, "The collection has our child - $childid");
+
+
+# Now we find a collection of all the tickets which have no members. they should have no children.
+# Alternate syntax
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL("HasMember = ''");
+# must contain parent; must not contain child
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( !$has{$parentid}, "The collection doesn't have our parent - $parentid");
+ok( $has{$childid}, "The collection has our child - $childid");
+
+
+# Now we find a collection of all the tickets which are not members of anything. they should have no parents.
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL("MemberOf IS NULL");
+# must not contain parent; must contain parent
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( $has{$parentid}, "The collection has our parent - $parentid");
+ok( !$has{$childid}, "The collection doesn't have our child - $childid");
+
+
+# Now we find a collection of all the tickets which are not members of anything. they should have no parents.
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL("MemberOf = ''");
+# must not contain parent; must contain parent
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( $has{$parentid}, "The collection has our parent - $parentid");
+ok( !$has{$childid}, "The collection doesn't have our child - $childid");
+
+
+# Now we find a collection of all the tickets which are not members of the parent ticket
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL("MemberOf != $parentid");
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( $has{$parentid}, "The collection has our parent - $parentid");
+ok( !$has{$childid}, "The collection doesn't have our child - $childid");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->LimitMemberOf($parentid, OPERATOR => '!=');
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( $has{$parentid}, "The collection has our parent - $parentid");
+ok( !$has{$childid}, "The collection doesn't have our child - $childid");
+
+my $grand_child_ticket = new RT::Ticket( $CurrentUser );
+my ($grand_childid) = $child_ticket->Create(
+ Subject => 'test child',
+ Queue => $queue->Id,
+ MemberOf => $childid,
+);
+ok($childid, "We created a grand child ticket");
+
+my $unlinked_ticket = new RT::Ticket( $CurrentUser );
+my ($unlinked_id) = $child_ticket->Create(
+ Subject => 'test unlinked',
+ Queue => $queue->Id,
+);
+ok($unlinked_id, "We created a grand child ticket");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL( "LinkedTo = $childid" );
+is($Collection->Count,1, "We found only one result");
+ok($Collection->First);
+is($Collection->First->id, $grand_childid, "We found all tickets linked to ticket #$childid");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL( "LinkedFrom = $childid" );
+is($Collection->Count,1, "We found only one result");
+ok($Collection->First);
+is($Collection->First->id, $parentid, "We found all tickets linked from ticket #$childid");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL( "LinkedTo IS NULL" );
+ok($Collection->Count, "Result is set is not empty");
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( $has{$parentid}, "parent is in collection");
+ok( $has{$unlinked_id}, "unlinked is in collection");
+ok( !$has{$childid}, "child is NOT in collection");
+ok( !$has{$grand_childid}, "grand child too is not in collection");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL( "LinkedTo IS NOT NULL" );
+ok($Collection->Count, "Result set is not empty");
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( !$has{$parentid}, "The collection has no our parent - $parentid");
+ok( !$has{$unlinked_id}, "unlinked is not in collection");
+ok( $has{$childid}, "The collection have our child - $childid");
+ok( $has{$grand_childid}, "The collection have our grand child - $grand_childid");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL( "LinkedFrom IS NULL" );
+ok($Collection->Count, "Result is set is not empty");
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( !$has{$parentid}, "parent is NOT in collection");
+ok( !$has{$childid}, "child is NOT in collection");
+ok( $has{$grand_childid}, "grand child is in collection");
+ok( $has{$unlinked_id}, "unlinked is in collection");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL( "LinkedFrom IS NOT NULL" );
+ok($Collection->Count, "Result set is not empty");
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( $has{$parentid}, "The collection has our parent - $parentid");
+ok( $has{$childid}, "The collection have our child - $childid");
+ok( !$has{$grand_childid}, "The collection have no our grand child - $grand_childid");
+ok( !$has{$unlinked_id}, "unlinked is not in collection");
+
+$Collection = RT::Tickets->new($CurrentUser);
+$Collection->FromSQL( "Linked = $childid" );
+is($Collection->Count, 2, "We found two tickets: parent and child");
+%has = ();
+while (my $t = $Collection->Next) {
+ ++$has{$t->id};
+}
+ok( !$has{$childid}, "Ticket is not linked to itself");
+ok( $has{$parentid}, "The collection has our parent");
+ok( $has{$grand_childid}, "The collection have our child");
+ok( !$has{$unlinked_id}, "unlinked is not in collection");
+
+
+1;
diff --git a/rt/t/ticket/linking.t b/rt/t/ticket/linking.t
new file mode 100644
index 0000000..2ea3d58
--- /dev/null
+++ b/rt/t/ticket/linking.t
@@ -0,0 +1,385 @@
+
+use strict;
+use warnings;
+
+use RT::Test tests => '101';
+use_ok('RT');
+use_ok('RT::Ticket');
+use_ok('RT::ScripConditions');
+use_ok('RT::ScripActions');
+use_ok('RT::Template');
+use_ok('RT::Scrips');
+use_ok('RT::Scrip');
+
+
+use File::Temp qw/tempfile/;
+my ($fh, $filename) = tempfile( UNLINK => 1, SUFFIX => '.rt');
+my $link_scrips_orig = RT->Config->Get( 'LinkTransactionsRun1Scrip' );
+RT->Config->Set( 'LinkTransactionsRun1Scrip', 1 );
+
+my $link_acl_checks_orig = RT->Config->Get( 'StrictLinkACL' );
+RT->Config->Set( 'StrictLinkACL', 1);
+
+my $condition = RT::ScripCondition->new( $RT::SystemUser );
+$condition->Load('User Defined');
+ok($condition->id);
+my $action = RT::ScripAction->new( $RT::SystemUser );
+$action->Load('User Defined');
+ok($action->id);
+my $template = RT::Template->new( $RT::SystemUser );
+$template->Load('Blank');
+ok($template->id);
+
+my $q1 = RT::Queue->new($RT::SystemUser);
+my ($id,$msg) = $q1->Create(Name => "LinkTest1.$$");
+ok ($id,$msg);
+my $q2 = RT::Queue->new($RT::SystemUser);
+($id,$msg) = $q2->Create(Name => "LinkTest2.$$");
+ok ($id,$msg);
+
+my $commit_code = <<END;
+open my \$file, "<$filename" or die "couldn't open $filename";
+my \$data = <\$file>;
+chomp \$data;
+\$data += 0;
+close \$file;
+\$RT::Logger->debug("Data is \$data");
+
+open \$file, ">$filename" or die "couldn't open $filename";
+if (\$self->TransactionObj->Type eq 'AddLink') {
+ \$RT::Logger->debug("AddLink");
+ print \$file \$data+1, "\n";
+}
+elsif (\$self->TransactionObj->Type eq 'DeleteLink') {
+ \$RT::Logger->debug("DeleteLink");
+ print \$file \$data-1, "\n";
+}
+else {
+ \$RT::Logger->error("THIS SHOULDN'T HAPPEN");
+ print \$file "666\n";
+}
+close \$file;
+1;
+END
+
+my $Scrips = RT::Scrips->new( $RT::SystemUser );
+$Scrips->UnLimit;
+while ( my $Scrip = $Scrips->Next ) {
+ $Scrip->Delete if $Scrip->Description and $Scrip->Description =~ /Add or Delete Link \d+/;
+}
+
+
+my $scrip = RT::Scrip->new($RT::SystemUser);
+($id,$msg) = $scrip->Create( Description => "Add or Delete Link $$",
+ ScripCondition => $condition->id,
+ ScripAction => $action->id,
+ Template => $template->id,
+ Stage => 'TransactionCreate',
+ Queue => 0,
+ CustomIsApplicableCode => '$self->TransactionObj->Type =~ /(Add|Delete)Link/;',
+ CustomPrepareCode => '1;',
+ CustomCommitCode => $commit_code,
+ );
+ok($id, "Scrip created");
+
+my $u1 = RT::User->new($RT::SystemUser);
+($id,$msg) = $u1->Create(Name => "LinkTestUser.$$");
+ok ($id,$msg);
+
+# grant ShowTicket right to allow count transactions
+($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'ShowTicket');
+ok ($id,$msg);
+($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q2, Right => 'ShowTicket');
+ok ($id,$msg);
+($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'CreateTicket');
+ok ($id,$msg);
+
+my $creator = RT::CurrentUser->new($u1->id);
+
+diag('Create tickets without rights to link') if $ENV{'TEST_VERBOSE'};
+{
+ # on q2 we have no rights, yet
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id );
+ ok($id,$msg);
+ my $child = RT::Ticket->new( $creator );
+ ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id, MemberOf => $parent->id );
+ ok($id,$msg);
+ $child->CurrentUser( $RT::SystemUser );
+ is($child->_Links('Base')->Count, 0, 'link was not created, no permissions');
+ is($child->_Links('Target')->Count, 0, 'link was not create, no permissions');
+}
+
+diag('Create tickets with rights checks on one end of a link') if $ENV{'TEST_VERBOSE'};
+{
+ # on q2 we have no rights, but use checking one only on thing
+ RT->Config->Set( StrictLinkACL => 0 );
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id );
+ ok($id,$msg);
+ my $child = RT::Ticket->new( $creator );
+ ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id, MemberOf => $parent->id );
+ ok($id,$msg);
+ $child->CurrentUser( $RT::SystemUser );
+ is($child->_Links('Base')->Count, 1, 'link was created');
+ is($child->_Links('Target')->Count, 0, 'link was created only one');
+ # no scrip run on second ticket accroding to config option
+ is(link_count($filename), undef, "scrips ok");
+ RT->Config->Set( StrictLinkACL => 1 );
+}
+
+($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'ModifyTicket');
+ok ($id,$msg);
+
+diag('try to add link without rights') if $ENV{'TEST_VERBOSE'};
+{
+ # on q2 we have no rights, yet
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id );
+ ok($id,$msg);
+ my $child = RT::Ticket->new( $creator );
+ ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id );
+ ok($id,$msg);
+ ($id, $msg) = $child->AddLink(Type => 'MemberOf', Target => $parent->id);
+ ok(!$id, $msg);
+ is(link_count($filename), undef, "scrips ok");
+ $child->CurrentUser( $RT::SystemUser );
+ is($child->_Links('Base')->Count, 0, 'link was not created, no permissions');
+ is($child->_Links('Target')->Count, 0, 'link was not create, no permissions');
+}
+
+diag('add link with rights only on base') if $ENV{'TEST_VERBOSE'};
+{
+ # on q2 we have no rights, but use checking one only on thing
+ RT->Config->Set( StrictLinkACL => 0 );
+ my $parent = RT::Ticket->new( $RT::SystemUser );
+ my ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id );
+ ok($id,$msg);
+ my $child = RT::Ticket->new( $creator );
+ ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id );
+ ok($id,$msg);
+ ($id, $msg) = $child->AddLink(Type => 'MemberOf', Target => $parent->id);
+ ok($id, $msg);
+ is(link_count($filename), 1, "scrips ok");
+ $child->CurrentUser( $RT::SystemUser );
+ is($child->_Links('Base')->Count, 1, 'link was created');
+ is($child->_Links('Target')->Count, 0, 'link was created only one');
+ $child->CurrentUser( $creator );
+
+ # turn off feature and try to delete link, we should fail
+ RT->Config->Set( StrictLinkACL => 1 );
+ ($id, $msg) = $child->AddLink(Type => 'MemberOf', Target => $parent->id);
+ ok(!$id, $msg);
+ is(link_count($filename), 1, "scrips ok");
+ $child->CurrentUser( $RT::SystemUser );
+ $child->_Links('Base')->_DoCount;
+ is($child->_Links('Base')->Count, 1, 'link was not deleted');
+ $child->CurrentUser( $creator );
+
+ # try to delete link, we should success as feature is active
+ RT->Config->Set( StrictLinkACL => 0 );
+ ($id, $msg) = $child->DeleteLink(Type => 'MemberOf', Target => $parent->id);
+ ok($id, $msg);
+ is(link_count($filename), 0, "scrips ok");
+ $child->CurrentUser( $RT::SystemUser );
+ $child->_Links('Base')->_DoCount;
+ is($child->_Links('Base')->Count, 0, 'link was deleted');
+ RT->Config->Set( StrictLinkACL => 1 );
+}
+
+my $tid;
+my $ticket = RT::Ticket->new( $creator);
+ok($ticket->isa('RT::Ticket'));
+($id,$tid, $msg) = $ticket->Create(Subject => 'Link test 1', Queue => $q1->id);
+ok ($id,$msg);
+
+diag('try link to itself') if $ENV{'TEST_VERBOSE'};
+{
+ my ($id, $msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket->id);
+ ok(!$id, $msg);
+ is(link_count($filename), 0, "scrips ok");
+}
+
+my $ticket2 = RT::Ticket->new($RT::SystemUser);
+($id, $tid, $msg) = $ticket2->Create(Subject => 'Link test 2', Queue => $q2->id);
+ok ($id, $msg);
+($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id);
+ok(!$id,$msg);
+is(link_count($filename), 0, "scrips ok");
+
+($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q2, Right => 'CreateTicket');
+ok ($id,$msg);
+($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q2, Right => 'ModifyTicket');
+ok ($id,$msg);
+($id,$msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id);
+ok($id,$msg);
+is(link_count($filename), 1, "scrips ok");
+($id,$msg) = $ticket->AddLink(Type => 'RefersTo', Target => -1);
+ok(!$id,$msg);
+($id,$msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id);
+ok($id,$msg);
+is(link_count($filename), 1, "scrips ok");
+
+my $transactions = $ticket2->Transactions;
+$transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' );
+is( $transactions->Count, 1, "Transaction found in other ticket" );
+is( $transactions->First->Field , 'ReferredToBy');
+is( $transactions->First->NewValue , $ticket->URI );
+
+($id,$msg) = $ticket->DeleteLink(Type => 'RefersTo', Target => $ticket2->id);
+ok($id,$msg);
+is(link_count($filename), 0, "scrips ok");
+$transactions = $ticket2->Transactions;
+$transactions->Limit( FIELD => 'Type', VALUE => 'DeleteLink' );
+is( $transactions->Count, 1, "Transaction found in other ticket" );
+is( $transactions->First->Field , 'ReferredToBy');
+is( $transactions->First->OldValue , $ticket->URI );
+
+RT->Config->Set( LinkTransactionsRun1Scrip => 0 );
+
+($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id);
+ok($id,$msg);
+is(link_count($filename), 2, "scrips ok");
+($id,$msg) =$ticket->DeleteLink(Type => 'RefersTo', Target => $ticket2->id);
+ok($id,$msg);
+is(link_count($filename), 0, "scrips ok");
+
+# tests for silent behaviour
+($id,$msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id, Silent => 1);
+ok($id,$msg);
+is(link_count($filename), 0, "scrips ok");
+{
+ my $transactions = $ticket->Transactions;
+ $transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' );
+ is( $transactions->Count, 2, "Still two txns on the base" );
+
+ $transactions = $ticket2->Transactions;
+ $transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' );
+ is( $transactions->Count, 2, "Still two txns on the target" );
+
+}
+($id,$msg) =$ticket->DeleteLink(Type => 'RefersTo', Target => $ticket2->id, Silent => 1);
+ok($id,$msg);
+is(link_count($filename), 0, "scrips ok");
+
+($id,$msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id, SilentBase => 1);
+ok($id,$msg);
+is(link_count($filename), 1, "scrips ok");
+{
+ my $transactions = $ticket->Transactions;
+ $transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' );
+ is( $transactions->Count, 2, "still five txn on the base" );
+
+ $transactions = $ticket2->Transactions;
+ $transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' );
+ is( $transactions->Count, 3, "+1 txn on the target" );
+
+}
+($id,$msg) =$ticket->DeleteLink(Type => 'RefersTo', Target => $ticket2->id, SilentBase => 1);
+ok($id,$msg);
+is(link_count($filename), 0, "scrips ok");
+
+($id,$msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id, SilentTarget => 1);
+ok($id,$msg);
+is(link_count($filename), 1, "scrips ok");
+{
+ my $transactions = $ticket->Transactions;
+ $transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' );
+ is( $transactions->Count, 3, "+1 txn on the base" );
+
+ $transactions = $ticket2->Transactions;
+ $transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' );
+ is( $transactions->Count, 3, "three txns on the target" );
+}
+($id,$msg) =$ticket->DeleteLink(Type => 'RefersTo', Target => $ticket2->id, SilentTarget => 1);
+ok($id,$msg);
+is(link_count($filename), 0, "scrips ok");
+
+
+# restore
+RT->Config->Set( LinkTransactionsRun1Scrip => $link_scrips_orig );
+RT->Config->Set( StrictLinkACL => $link_acl_checks_orig );
+
+{
+ my $Scrips = RT::Scrips->new( $RT::SystemUser );
+ $Scrips->Limit( FIELD => 'Description', OPERATOR => 'STARTSWITH', VALUE => 'Add or Delete Link ');
+ while ( my $s = $Scrips->Next ) { $s->Delete };
+}
+
+
+my $link = RT::Link->new( $RT::SystemUser );
+($id,$msg) = $link->Create( Base => $ticket->URI, Target => $ticket2->URI, Type => 'MyLinkType' );
+ok($id, $msg);
+ok($link->LocalBase == $ticket->id, "LocalBase set correctly");
+ok($link->LocalTarget == $ticket2->id, "LocalTarget set correctly");
+
+{
+ no warnings 'once';
+ *RT::NotTicket::Id = sub { return $$ };
+ *RT::NotTicket::id = \&RT::NotTicket::Id;
+}
+
+{
+ package RT::URI::not_ticket;
+ use RT::URI::base;
+ use vars qw(@ISA);
+ @ISA = qw/RT::URI::base/;
+ sub IsLocal { 1; }
+ sub Object { return bless {}, 'RT::NotTicket'; }
+}
+
+my $orig_getresolver = \&RT::URI::_GetResolver;
+{
+ no warnings 'redefine';
+ *RT::URI::_GetResolver = sub {
+ my $self = shift;
+ my $scheme = shift;
+
+ $scheme =~ s/(\.|-)/_/g;
+ my $resolver;
+ my $module = "RT::URI::$scheme";
+ $resolver = $module->new($self->CurrentUser);
+
+ if ($resolver) {
+ $self->{'resolver'} = $resolver;
+ } else {
+ $self->{'resolver'} = RT::URI::base->new($self->CurrentUser);
+ }
+ };
+}
+
+($id,$msg) = $link->Create( Base => "not_ticket::$RT::Organization/notticket/$$", Target => $ticket2->URI, Type => 'MyLinkType' );
+ok($id, $msg);
+ok($link->LocalBase == 0, "LocalBase set correctly");
+ok($link->LocalTarget == $ticket2->id, "LocalTarget set correctly");
+
+($id,$msg) = $link->Create( Target => "not_ticket::$RT::Organization/notticket/$$", Base => $ticket->URI, Type => 'MyLinkType' );
+ok($id, $msg);
+ok($link->LocalTarget == 0, "LocalTarget set correctly");
+ok($link->LocalBase == $ticket->id, "LocalBase set correctly");
+
+($id,$msg) = $link->Create(
+ Target => "not_ticket::$RT::Organization/notticket/1$$",
+ Base => "not_ticket::$RT::Organization/notticket/$$",
+ Type => 'MyLinkType' );
+
+ok($id, $msg);
+ok($link->LocalTarget == 0, "LocalTarget set correctly");
+ok($link->LocalBase == 0, "LocalBase set correctly");
+
+# restore _GetResolver
+{
+ no warnings 'redefine';
+ *RT::URI::_GetResolver = $orig_getresolver;
+}
+
+sub link_count {
+ my $file = shift;
+ open my $fh, "<$file" or die "couldn't open $file";
+ my $data = <$fh>;
+ close $fh;
+
+ return undef unless $data;
+ chomp $data;
+ return $data + 0;
+}
diff --git a/rt/t/ticket/merge.t b/rt/t/ticket/merge.t
new file mode 100644
index 0000000..a714cb6
--- /dev/null
+++ b/rt/t/ticket/merge.t
@@ -0,0 +1,92 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+
+use RT;
+use RT::Test tests => '17';
+
+
+# validate that when merging two tickets, the comments from both tickets
+# are integrated into the new ticket
+{
+ my $queue = RT::Queue->new($RT::SystemUser);
+ my ($id,$msg) = $queue->Create(Name => 'MergeTest-'.rand(25));
+ ok ($id,$msg);
+
+ my $t1 = RT::Ticket->new($RT::SystemUser);
+ my ($tid,$transid, $t1msg) =$t1->Create ( Queue => $queue->Name, Subject => 'Merge test. orig');
+ ok ($tid, $t1msg);
+ ($id, $msg) = $t1->Comment(Content => 'This is a Comment on the original');
+ ok($id,$msg);
+
+ my $txns = $t1->Transactions;
+ my $Comments = 0;
+ while (my $txn = $txns->Next) {
+ $Comments++ if ($txn->Type eq 'Comment');
+ }
+ is($Comments,1, "our first ticket has only one Comment");
+
+ my $t2 = RT::Ticket->new($RT::SystemUser);
+ my ($t2id,$t2transid, $t2msg) =$t2->Create ( Queue => $queue->Name, Subject => 'Merge test. duplicate');
+ ok ($t2id, $t2msg);
+
+
+
+ ($id, $msg) = $t2->Comment(Content => 'This is a commet on the duplicate');
+ ok($id,$msg);
+
+
+ $txns = $t2->Transactions;
+ $Comments = 0;
+ while (my $txn = $txns->Next) {
+ $Comments++ if ($txn->Type eq 'Comment');
+ }
+ is($Comments,1, "our second ticket has only one Comment");
+
+ ($id, $msg) = $t1->Comment(Content => 'This is a second Comment on the original');
+ ok($id,$msg);
+
+ $txns = $t1->Transactions;
+ $Comments = 0;
+ while (my $txn = $txns->Next) {
+ $Comments++ if ($txn->Type eq 'Comment');
+ }
+ is($Comments,2, "our first ticket now has two Comments");
+
+ ($id,$msg) = $t2->MergeInto($t1->id);
+
+ ok($id,$msg);
+ $txns = $t1->Transactions;
+ $Comments = 0;
+ while (my $txn = $txns->Next) {
+ $Comments++ if ($txn->Type eq 'Comment');
+ }
+ is($Comments,3, "our first ticket now has three Comments - we merged safely");
+}
+
+# when you try to merge duplicate links on postgres, eveyrything goes to hell due to referential integrity constraints.
+{
+ my $t = RT::Ticket->new($RT::SystemUser);
+ $t->Create(Subject => 'Main', Queue => 'general');
+
+ ok ($t->id);
+ my $t2 = RT::Ticket->new($RT::SystemUser);
+ $t2->Create(Subject => 'Second', Queue => 'general');
+ ok ($t2->id);
+
+ my $t3 = RT::Ticket->new($RT::SystemUser);
+ $t3->Create(Subject => 'Third', Queue => 'general');
+
+ ok ($t3->id);
+
+ my ($id,$val);
+ ($id,$val) = $t->AddLink(Type => 'DependsOn', Target => $t3->id);
+ ok($id,$val);
+ ($id,$val) = $t2->AddLink(Type => 'DependsOn', Target => $t3->id);
+ ok($id,$val);
+
+ ($id,$val) = $t->MergeInto($t2->id);
+ ok($id,$val);
+}
diff --git a/rt/t/ticket/quicksearch.t b/rt/t/ticket/quicksearch.t
new file mode 100644
index 0000000..9ab9f21
--- /dev/null
+++ b/rt/t/ticket/quicksearch.t
@@ -0,0 +1,41 @@
+
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 10;
+use_ok('RT');
+
+
+my $q = RT::Queue->new($RT::SystemUser);
+my $queue = 'SearchTests-'.$$;
+$q->Create(Name => $queue);
+ok ($q->id, "Created the queue");
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+my ( $id, undef, $msg ) = $t1->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest1',
+ Requestor => ['search2@example.com'],
+);
+ok( $id, $msg );
+
+use_ok("RT::Search::Googleish");
+
+my $active_statuses = join( " OR ", map "Status = '$_'", RT::Queue->ActiveStatusArray());
+
+my $tickets = RT::Tickets->new($RT::SystemUser);
+my $quick = RT::Search::Googleish->new(Argument => "",
+ TicketsObj => $tickets);
+my @tests = (
+ "General new open root" => "( Owner = 'root' ) AND ( Queue = 'General' ) AND ( Status = 'new' OR Status = 'open' )",
+ "fulltext:jesse" => "( Content LIKE 'jesse' ) AND ( $active_statuses )",
+ $queue => "( Queue = '$queue' ) AND ( $active_statuses )",
+ "root $queue" => "( Owner = 'root' ) AND ( Queue = '$queue' ) AND ( $active_statuses )",
+ "notauser $queue" => "( Queue = '$queue' ) AND ( $active_statuses ) AND ( Subject LIKE 'notauser' )",
+ "notauser $queue root" => "( Owner = 'root' ) AND ( Queue = '$queue' ) AND ( $active_statuses ) AND ( Subject LIKE 'notauser' )");
+
+while (my ($from, $to) = splice @tests, 0, 2) {
+ is($quick->QueryToSQL($from), $to, "<$from> -> <$to>");
+}
diff --git a/rt/t/ticket/requestor-order.t b/rt/t/ticket/requestor-order.t
new file mode 100644
index 0000000..4539fbd
--- /dev/null
+++ b/rt/t/ticket/requestor-order.t
@@ -0,0 +1,142 @@
+#!/usr/bin/perl -w
+use strict; use warnings;
+
+use RT::Test tests => 58;
+use_ok('RT');
+
+use RT::Ticket;
+
+my $q = RT::Queue->new($RT::SystemUser);
+my $queue = 'SearchTests-'.rand(200);
+$q->Create(Name => $queue);
+
+my @requestors = ( ('bravo@example.com') x 6, ('alpha@example.com') x 6,
+ ('delta@example.com') x 6, ('charlie@example.com') x 6,
+ (undef) x 6);
+my @subjects = ("first test", "second test", "third test", "fourth test", "fifth test") x 6;
+while (@requestors) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my ( $id, undef $msg ) = $t->Create(
+ Queue => $q->id,
+ Subject => shift @subjects,
+ Requestor => [ shift @requestors ]
+ );
+ ok( $id, $msg );
+}
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue'");
+ is($tix->Count, 30, "found thirty tickets");
+}
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND requestor = 'alpha\@example.com'");
+ $tix->OrderByCols({ FIELD => "Subject" });
+ my @subjects;
+ while (my $t = $tix->Next) { push @subjects, $t->Subject; }
+ is(@subjects, 6, "found six tickets");
+ is_deeply( \@subjects, [ sort @subjects ], "Subjects are sorted");
+}
+
+sub check_emails_order
+{
+ my ($tix,$count,$order) = (@_);
+ my @mails;
+ while (my $t = $tix->Next) { push @mails, $t->RequestorAddresses; }
+ is(@mails, $count, "found $count tickets for ". $tix->Query);
+ my @required_order;
+ if( $order =~ /asc/i ) {
+ @required_order = sort { $a? ($b? ($a cmp $b) : -1) : 1} @mails;
+ } else {
+ @required_order = sort { $a? ($b? ($b cmp $a) : -1) : 1} @mails;
+ }
+ foreach( reverse splice @mails ) {
+ if( $_ ) { unshift @mails, $_ }
+ else { push @mails, $_ }
+ }
+ is_deeply( \@mails, \@required_order, "Addresses are sorted");
+}
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND subject = 'first test' AND Requestor.EmailAddress LIKE 'example.com'");
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+ check_emails_order($tix, 5, 'ASC');
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+ check_emails_order($tix, 5, 'DESC');
+}
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+ check_emails_order($tix, 6, 'ASC');
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+ check_emails_order($tix, 6, 'DESC');
+}
+
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+ check_emails_order($tix, 6, 'ASC');
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+ check_emails_order($tix, 6, 'DESC');
+}
+
+{
+ # create ticket with group as member of the requestors group
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my ( $id, $msg ) = $t->Create(
+ Queue => $q->id,
+ Subject => "first test",
+ Requestor => 'badaboom@example.com',
+ );
+ ok( $id, "ticket created" ) or diag( "error: $msg" );
+
+ my $g = RT::Group->new($RT::SystemUser);
+
+ my ($gid);
+ ($gid, $msg) = $g->CreateUserDefinedGroup(Name => '20-sort-by-requestor.t-'.rand(200));
+ ok($gid, "created group") or diag("error: $msg");
+
+ ($id, $msg) = $t->Requestors->AddMember( $gid );
+ ok($id, "added group to requestors group") or diag("error: $msg");
+}
+
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
+
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+ check_emails_order($tix, 7, 'ASC');
+
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+ check_emails_order($tix, 7, 'DESC');
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue'");
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+ $tix->RowsPerPage(30);
+ my @mails;
+ while (my $t = $tix->Next) { push @mails, $t->RequestorAddresses; }
+ is(@mails, 30, "found thirty tickets");
+ is_deeply( [grep {$_} @mails], [ sort grep {$_} @mails ], "Paging works (exclude nulls, which are db-dependant)");
+}
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue'");
+ $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+ $tix->RowsPerPage(30);
+ my @mails;
+ while (my $t = $tix->Next) { push @mails, $t->RequestorAddresses; }
+ is(@mails, 30, "found thirty tickets");
+ is_deeply( [grep {$_} @mails], [ sort grep {$_} @mails ], "Paging works (exclude nulls, which are db-dependant)");
+}
+RT::Test->mailsent_ok(25);
+
+# vim:ft=perl:
diff --git a/rt/t/ticket/scrips_batch.t b/rt/t/ticket/scrips_batch.t
new file mode 100644
index 0000000..f558d3b
--- /dev/null
+++ b/rt/t/ticket/scrips_batch.t
@@ -0,0 +1,100 @@
+
+use strict;
+use warnings;
+
+use RT::Test tests => '19';
+use_ok('RT');
+use_ok('RT::Ticket');
+
+my $queue = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $queue && $queue->id, 'loaded or created queue';
+
+RT->Config->Set( UseTransactionBatch => 1 );
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in as root';
+
+my $sid;
+{
+ $m->follow_link_ok( { text => 'Configuration' } );
+ $m->follow_link_ok( { text => 'Queues' } );
+ $m->follow_link_ok( { text => $queue->Name } );
+ $m->follow_link_ok( { text => 'Scrips' } );
+ $m->follow_link_ok( { text => 'New scrip' } );
+ $m->form_number(3);
+ $m->field('Scrip-new-Description' => 'test');
+ $m->select('Scrip-new-ScripCondition' => 'On Transaction');
+ $m->select('Scrip-new-ScripAction' => 'User Defined');
+ $m->select('Scrip-new-Template' => 'Global template: Blank');
+ $m->select('Scrip-new-Stage' => 'TransactionBatch');
+ $m->field('Scrip-new-CustomPrepareCode' => 'return 1;');
+ $m->field('Scrip-new-CustomCommitCode' => 'return 1;');
+ $m->submit;
+ $m->content_like( qr/Scrip Created/ );
+
+ ($sid) = ($m->content =~ /Scrip\s*#(\d+)/);
+
+ my $form = $m->form_number(3);
+ is $m->value("Scrip-$sid-Description"), 'test', 'correct description';
+ is value_name($form, "Scrip-$sid-ScripCondition"), 'On Transaction', 'correct condition';
+ is value_name($form, "Scrip-$sid-ScripAction"), 'User Defined', 'correct action';
+ is value_name($form, "Scrip-$sid-Template"), 'Global template: Blank', 'correct template';
+ is value_name($form, "Scrip-$sid-Stage"), 'TransactionBatch', 'correct stage';
+
+ use File::Temp qw(tempfile);
+ my ($tmp_fh, $tmp_fn) = tempfile();
+
+ my $code = <<END;
+open my \$fh, '>', '$tmp_fn' or die "Couldn't open '$tmp_fn':\$!";
+
+my \$batch = \$self->TicketObj->TransactionBatch;
+unless ( \$batch && \@\$batch ) {
+ print \$fh "no batch\n";
+ return 1;
+}
+foreach my \$txn ( \@\$batch ) {
+ print \$fh \$txn->Type ."\n";
+}
+return 1;
+END
+
+ $m->field( "Scrip-$sid-CustomCommitCode" => $code );
+ $m->submit;
+
+ $m->goto_create_ticket( $queue );
+ $m->form_number(3);
+ $m->submit;
+
+ is_deeply parse_handle($tmp_fh), ['Create'], 'Create';
+
+ $m->follow_link_ok( { text => 'Resolve' } );
+ $m->form_number(3);
+ $m->field( "UpdateContent" => 'resolve it' );
+ $m->click('SubmitTicket');
+
+ is_deeply parse_handle($tmp_fh), ['Comment', 'Status'], 'Comment + Resolve';
+}
+
+sub value_name {
+ my $form = shift;
+ my $field = shift;
+
+ my $input = $form->find_input( $field );
+
+ my @names = $input->value_names;
+ my @values = $input->possible_values;
+ for ( my $i = 0; $i < @values; $i++ ) {
+ return $names[ $i ] if $values[ $i ] eq $input->value;
+ }
+ return undef;
+}
+
+sub parse_handle {
+ my $fh = shift;
+ seek $fh, 0, 0;
+ my @lines = <$fh>;
+ foreach ( @lines ) { s/^\s+//gms; s/\s+$//gms }
+ truncate $fh, 0;
+ return \@lines;
+}
+
diff --git a/rt/t/ticket/search.t b/rt/t/ticket/search.t
new file mode 100644
index 0000000..9cec4f7
--- /dev/null
+++ b/rt/t/ticket/search.t
@@ -0,0 +1,278 @@
+#!/opt/perl/bin/perl -w
+
+# tests relating to searching. Especially around custom fields, and
+# corner cases.
+
+use strict;
+use warnings;
+
+use RT::Test tests => 43;
+
+# setup the queue
+
+my $q = RT::Queue->new($RT::SystemUser);
+my $queue = 'SearchTests-'.$$;
+$q->Create(Name => $queue);
+ok ($q->id, "Created the queue");
+
+
+# and setup the CFs
+# we believe the Type shouldn't matter.
+
+my $cf = RT::CustomField->new($RT::SystemUser);
+$cf->Create(Name => 'SearchTest', Type => 'Freeform', MaxValues => 0, Queue => $q->id);
+ok($cf->id, "Created the SearchTest CF");
+my $cflabel = "CustomField-".$cf->id;
+
+my $cf2 = RT::CustomField->new($RT::SystemUser);
+$cf2->Create(Name => 'SearchTest2', Type => 'Freeform', MaxValues => 0, Queue => $q->id);
+ok($cf2->id, "Created the SearchTest2 CF");
+my $cflabel2 = "CustomField-".$cf2->id;
+
+my $cf3 = RT::CustomField->new($RT::SystemUser);
+$cf3->Create(Name => 'SearchTest3', Type => 'Freeform', MaxValues => 0, Queue => $q->id);
+ok($cf3->id, "Created the SearchTest3 CF");
+my $cflabel3 = "CustomField-".$cf3->id;
+
+
+# There was a bug involving a missing join to ObjectCustomFields that
+# caused spurious results on negative searches if another custom field
+# with the same name existed on a different queue. Hence, we make
+# duplicate CFs on a different queue here
+my $dup = RT::Queue->new($RT::SystemUser);
+$dup->Create(Name => $queue . "-Copy");
+ok ($dup->id, "Created the duplicate queue");
+my $dupcf = RT::CustomField->new($RT::SystemUser);
+$dupcf->Create(Name => 'SearchTest', Type => 'Freeform', MaxValues => 0, Queue => $dup->id);
+ok($dupcf->id, "Created the duplicate SearchTest CF");
+$dupcf = RT::CustomField->new($RT::SystemUser);
+$dupcf->Create(Name => 'SearchTest2', Type => 'Freeform', MaxValues => 0, Queue => $dup->id);
+ok($dupcf->id, "Created the SearchTest2 CF");
+$dupcf = RT::CustomField->new($RT::SystemUser);
+$dupcf->Create(Name => 'SearchTest3', Type => 'Freeform', MaxValues => 0, Queue => $dup->id);
+ok($dupcf->id, "Created the SearchTest3 CF");
+
+
+# setup some tickets
+# we'll need a small pile of them, to test various combinations and nulls.
+# there's probably a way to think harder and do this with fewer
+
+
+my $t1 = RT::Ticket->new($RT::SystemUser);
+my ( $id, undef $msg ) = $t1->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest1',
+ Requestor => ['search1@example.com'],
+ $cflabel => 'foo1',
+ $cflabel2 => 'bar1',
+ $cflabel3 => 'qux1',
+);
+ok( $id, $msg );
+
+
+my $t2 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t2->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest2',
+ Requestor => ['search2@example.com'],
+# $cflabel => 'foo2',
+ $cflabel2 => 'bar2',
+ $cflabel3 => 'qux2',
+);
+ok( $id, $msg );
+
+my $t3 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t3->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest3',
+ Requestor => ['search3@example.com'],
+ $cflabel => 'foo3',
+# $cflabel2 => 'bar3',
+ $cflabel3 => 'qux3',
+);
+ok( $id, $msg );
+
+my $t4 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t4->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest4',
+ Requestor => ['search4@example.com'],
+ $cflabel => 'foo4',
+ $cflabel2 => 'bar4',
+# $cflabel3 => 'qux4',
+);
+ok( $id, $msg );
+
+my $t5 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t5->Create(
+ Queue => $q->id,
+# Subject => 'SearchTest5',
+ Requestor => ['search5@example.com'],
+ $cflabel => 'foo5',
+ $cflabel2 => 'bar5',
+ $cflabel3 => 'qux5',
+);
+ok( $id, $msg );
+
+my $t6 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t6->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest6',
+# Requestor => ['search6@example.com'],
+ $cflabel => 'foo6',
+ $cflabel2 => 'bar6',
+ $cflabel3 => 'qux6',
+);
+ok( $id, $msg );
+
+my $t7 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t7->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest7',
+ Requestor => ['search7@example.com'],
+# $cflabel => 'foo7',
+# $cflabel2 => 'bar7',
+ $cflabel3 => 'qux7',
+);
+ok( $id, $msg );
+
+# we have tickets. start searching
+my $tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue'");
+is($tix->Count, 7, "found all the tickets")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+
+# very simple searches. both CF and normal
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest = 'foo1'");
+is($tix->Count, 1, "matched identical subject")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest LIKE 'foo1'");
+is($tix->Count, 1, "matched LIKE subject")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest = 'foo'");
+is($tix->Count, 0, "IS a regexp match")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest LIKE 'foo'");
+is($tix->Count, 5, "matched LIKE subject")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest IS NULL");
+is($tix->Count, 2, "IS null CF")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Requestors LIKE 'search1'");
+is($tix->Count, 1, "LIKE requestor")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Requestors = 'search1\@example.com'");
+is($tix->Count, 1, "IS requestor")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Requestors LIKE 'search'");
+is($tix->Count, 6, "LIKE requestor")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Requestors IS NULL");
+is($tix->Count, 1, "Search for no requestor")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Subject = 'SearchTest1'");
+is($tix->Count, 1, "IS subject")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Subject LIKE 'SearchTest1'");
+is($tix->Count, 1, "LIKE subject")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Subject = ''");
+is($tix->Count, 1, "found one ticket")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Subject LIKE 'SearchTest'");
+is($tix->Count, 6, "found two ticket")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Subject LIKE 'qwerty'");
+is($tix->Count, 0, "found zero ticket")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+
+
+
+# various combinations
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest LIKE 'foo' AND CF.SearchTest2 LIKE 'bar1'");
+is($tix->Count, 1, "LIKE cf and LIKE cf");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest = 'foo1' AND CF.SearchTest2 = 'bar1'");
+is($tix->Count, 1, "is cf and is cf");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest = 'foo' AND CF.SearchTest2 LIKE 'bar1'");
+is($tix->Count, 0, "is cf and like cf");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest LIKE 'foo' AND CF.SearchTest2 LIKE 'bar' AND CF.SearchTest3 LIKE 'qux'");
+is($tix->Count, 3, "like cf and like cf and like cf");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest LIKE 'foo' AND CF.SearchTest2 LIKE 'bar' AND CF.SearchTest3 LIKE 'qux6'");
+is($tix->Count, 1, "like cf and like cf and is cf");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest LIKE 'foo' AND Subject LIKE 'SearchTest'");
+is($tix->Count, 4, "like cf and like subject");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest IS NULL AND CF.SearchTest2 = 'bar2'");
+is($tix->Count, 1, "null cf and is cf");
+
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest IS NULL AND CF.SearchTest2 IS NULL");
+is($tix->Count, 1, "null cf and null cf");
+
+# tests with the same CF listed twice
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.{SearchTest} = 'foo1'");
+is($tix->Count, 1, "is cf.{name} format");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest = 'foo1' OR CF.SearchTest = 'foo3'");
+is($tix->Count, 2, "is cf1 or is cf1");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest = 'foo1' OR CF.SearchTest IS NULL");
+is($tix->Count, 3, "is cf1 or null cf1");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("(CF.SearchTest = 'foo1' OR CF.SearchTest = 'foo3') AND (CF.SearchTest2 = 'bar1' OR CF.SearchTest2 = 'bar2')");
+is($tix->Count, 1, "(is cf1 or is cf1) and (is cf2 or is cf2)");
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("CF.SearchTest = 'foo1' OR CF.SearchTest = 'foo3' OR CF.SearchTest2 = 'bar1' OR CF.SearchTest2 = 'bar2'");
+is($tix->Count, 3, "is cf1 or is cf1 or is cf2 or is cf2");
+
diff --git a/rt/t/ticket/search_by_cf_freeform_multiple.t b/rt/t/ticket/search_by_cf_freeform_multiple.t
new file mode 100644
index 0000000..be51306
--- /dev/null
+++ b/rt/t/ticket/search_by_cf_freeform_multiple.t
@@ -0,0 +1,153 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 105;
+use RT::Ticket;
+
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+my $queue = $q->Name;
+
+diag "create a CF\n" if $ENV{TEST_VERBOSE};
+my ($cf_name, $cf_id, $cf) = ("Test", 0, undef);
+{
+ $cf = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $cf->Create(
+ Name => $cf_name,
+ Queue => $q->id,
+ Type => 'FreeformMultiple',
+ );
+ ok($ret, "Custom Field Order created");
+ $cf_id = $cf->id;
+}
+
+my ($total, @data, @tickets, %test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ while (@data) {
+ my %args = %{ shift(@data) };
+ my @cf_value = $args{'Subject'} ne '-'? (split /(?=.)/, $args{'Subject'}) : ();
+ diag "vals: ". join ', ', @cf_value;
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my ( $id, undef $msg ) = $t->Create(
+ Queue => $q->id,
+ %args,
+ "CustomField-$cf_id" => \@cf_value,
+ );
+ ok( $id, "ticket created" ) or diag("error: $msg");
+
+ my $got = join ',', sort do {
+ my $vals = $t->CustomFieldValues( $cf_name );
+ my @tmp;
+ while (my $v = $vals->Next ) { push @tmp, $v->Content }
+ @tmp;
+ };
+
+ is( $got, join( ',', sort @cf_value), 'correct CF values' );
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $key ( sort keys %test ) {
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL( "( $query_prefix ) AND ( $key )" );
+
+ my $error = 0;
+
+ my $count = 0;
+ $count++ foreach grep $_, values %{ $test{$key} };
+ is($tix->Count, $count, "found correct number of ticket(s) by '$key'") or $error = 1;
+
+ my $good_tickets = ($tix->Count == $count);
+ while ( my $ticket = $tix->Next ) {
+ next if $test{$key}->{ $ticket->Subject };
+ diag $ticket->Subject ." ticket has been found when it's not expected";
+ $good_tickets = 0;
+ }
+ ok( $good_tickets, "all tickets are good with '$key'" ) or $error = 1;
+
+ diag "Wrong SQL query for '$key':". $tix->BuildSelectQuery if $error;
+ }
+}
+
+@data = (
+ { Subject => '-' },
+ { Subject => 'x' },
+ { Subject => 'y' },
+ { Subject => 'z' },
+ { Subject => 'xy' },
+ { Subject => 'xz' },
+ { Subject => 'yz' },
+);
+%test = (
+ "CF.{$cf_id} IS NULL" => { '-' => 1, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+ "'CF.{$cf_name}' IS NULL" => { '-' => 1, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_id}' IS NULL" => { '-' => 1, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_name}' IS NULL" => { '-' => 1, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+
+ "CF.{$cf_id} IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+ "'CF.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+ "'CF.$queue.{$cf_id}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+ "'CF.$queue.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+
+ "CF.{$cf_id} = 'x'" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.{$cf_name}' = 'x'" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.$queue.{$cf_id}' = 'x'" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.$queue.{$cf_name}' = 'x'" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+
+ "CF.{$cf_id} != 'x'" => { '-' => 1, x => 0, y => 1, z => 1, xy => 0, xz => 0, yz => 1 },
+ "'CF.{$cf_name}' != 'x'" => { '-' => 1, x => 0, y => 1, z => 1, xy => 0, xz => 0, yz => 1 },
+ "'CF.$queue.{$cf_id}' != 'x'" => { '-' => 1, x => 0, y => 1, z => 1, xy => 0, xz => 0, yz => 1 },
+ "'CF.$queue.{$cf_name}' != 'x'" => { '-' => 1, x => 0, y => 1, z => 1, xy => 0, xz => 0, yz => 1 },
+
+ "CF.{$cf_id} = 'x' OR CF.{$cf_id} = 'y'" => { '-' => 0, x => 1, y => 1, z => 0, xy => 1, xz => 1, yz => 1 },
+ "'CF.{$cf_name}' = 'x' OR 'CF.{$cf_name}' = 'y'" => { '-' => 0, x => 1, y => 1, z => 0, xy => 1, xz => 1, yz => 1 },
+ "'CF.$queue.{$cf_id}' = 'x' OR 'CF.$queue.{$cf_id}' = 'y'" => { '-' => 0, x => 1, y => 1, z => 0, xy => 1, xz => 1, yz => 1 },
+ "'CF.$queue.{$cf_name}' = 'x' OR 'CF.$queue.{$cf_name}' = 'y'" => { '-' => 0, x => 1, y => 1, z => 0, xy => 1, xz => 1, yz => 1 },
+
+ "CF.{$cf_id} = 'x' AND CF.{$cf_id} = 'y'" => { '-' => 0, x => 0, y => 0, z => 0, xy => 1, xz => 0, yz => 0 },
+ "'CF.{$cf_name}' = 'x' AND 'CF.{$cf_name}' = 'y'" => { '-' => 0, x => 0, y => 0, z => 0, xy => 1, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' AND 'CF.$queue.{$cf_id}' = 'y'" => { '-' => 0, x => 0, y => 0, z => 0, xy => 1, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' AND 'CF.$queue.{$cf_name}' = 'y'" => { '-' => 0, x => 0, y => 0, z => 0, xy => 1, xz => 0, yz => 0 },
+
+ "CF.{$cf_id} != 'x' AND CF.{$cf_id} != 'y'" => { '-' => 1, x => 0, y => 0, z => 1, xy => 0, xz => 0, yz => 0 },
+ "'CF.{$cf_name}' != 'x' AND 'CF.{$cf_name}' != 'y'" => { '-' => 1, x => 0, y => 0, z => 1, xy => 0, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_id}' != 'x' AND 'CF.$queue.{$cf_id}' != 'y'" => { '-' => 1, x => 0, y => 0, z => 1, xy => 0, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_name}' != 'x' AND 'CF.$queue.{$cf_name}' != 'y'" => { '-' => 1, x => 0, y => 0, z => 1, xy => 0, xz => 0, yz => 0 },
+
+ "CF.{$cf_id} = 'x' AND CF.{$cf_id} IS NULL" => { '-' => 0, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+ "'CF.{$cf_name}' = 'x' AND 'CF.{$cf_name}' IS NULL" => { '-' => 0, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' AND 'CF.$queue.{$cf_id}' IS NULL" => { '-' => 0, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' AND 'CF.$queue.{$cf_name}' IS NULL" => { '-' => 0, x => 0, y => 0, z => 0, xy => 0, xz => 0, yz => 0 },
+
+ "CF.{$cf_id} = 'x' OR CF.{$cf_id} IS NULL" => { '-' => 1, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.{$cf_name}' = 'x' OR 'CF.{$cf_name}' IS NULL" => { '-' => 1, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' OR 'CF.$queue.{$cf_id}' IS NULL" => { '-' => 1, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' OR 'CF.$queue.{$cf_name}' IS NULL" => { '-' => 1, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+
+ "CF.{$cf_id} = 'x' AND CF.{$cf_id} IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.{$cf_name}' = 'x' AND 'CF.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' AND 'CF.$queue.{$cf_id}' IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' AND 'CF.$queue.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0, xy => 1, xz => 1, yz => 0 },
+
+ "CF.{$cf_id} = 'x' OR CF.{$cf_id} IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+ "'CF.{$cf_name}' = 'x' OR 'CF.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+ "'CF.$queue.{$cf_id}' = 'x' OR 'CF.$queue.{$cf_id}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+ "'CF.$queue.{$cf_name}' = 'x' OR 'CF.$queue.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1, xy => 1, xz => 1, yz => 1 },
+);
+@tickets = add_tix_from_data();
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue'");
+ is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+
+exit 0;
diff --git a/rt/t/ticket/search_by_cf_freeform_single.t b/rt/t/ticket/search_by_cf_freeform_single.t
new file mode 100644
index 0000000..d5ff7ec
--- /dev/null
+++ b/rt/t/ticket/search_by_cf_freeform_single.t
@@ -0,0 +1,142 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 99;
+use RT::Ticket;
+
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+my $queue = $q->Name;
+
+diag "create a CF\n" if $ENV{TEST_VERBOSE};
+my ($cf_name, $cf_id, $cf) = ("Test", 0, undef);
+{
+ $cf = RT::CustomField->new( $RT::SystemUser );
+ my ($ret, $msg) = $cf->Create(
+ Name => $cf_name,
+ Queue => $q->id,
+ Type => 'FreeformSingle',
+ );
+ ok($ret, "Custom Field Order created");
+ $cf_id = $cf->id;
+}
+
+my ($total, @data, @tickets, %test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ while (@data) {
+ my %args = %{ shift(@data) };
+ my $cf_value = $args{'Subject'} ne '-'? $args{'Subject'} : undef;
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my ( $id, undef $msg ) = $t->Create(
+ Queue => $q->id,
+ %args,
+ "CustomField-$cf_id" => $cf_value,
+ );
+ ok( $id, "ticket created" ) or diag("error: $msg");
+ is( $t->FirstCustomFieldValue( $cf_name ), $cf_value, 'correct value' );
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $key ( sort keys %test ) {
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL( "( $query_prefix ) AND ( $key )" );
+
+ my $error = 0;
+
+ my $count = 0;
+ $count++ foreach grep $_, values %{ $test{$key} };
+ is($tix->Count, $count, "found correct number of ticket(s) by '$key'") or $error = 1;
+
+ my $good_tickets = ($tix->Count == $count);
+ while ( my $ticket = $tix->Next ) {
+ next if $test{$key}->{ $ticket->Subject };
+ diag $ticket->Subject ." ticket has been found when it's not expected";
+ $good_tickets = 0;
+ }
+ ok( $good_tickets, "all tickets are good with '$key'" ) or $error = 1;
+
+ diag "Wrong SQL query for '$key':". $tix->BuildSelectQuery if $error;
+ }
+}
+
+@data = (
+ { Subject => '-' },
+ { Subject => 'x' },
+ { Subject => 'y' },
+ { Subject => 'z' },
+);
+%test = (
+ "CF.{$cf_id} IS NULL" => { '-' => 1, x => 0, y => 0, z => 0 },
+ "'CF.{$cf_name}' IS NULL" => { '-' => 1, x => 0, y => 0, z => 0 },
+ "'CF.$queue.{$cf_id}' IS NULL" => { '-' => 1, x => 0, y => 0, z => 0 },
+ "'CF.$queue.{$cf_name}' IS NULL" => { '-' => 1, x => 0, y => 0, z => 0 },
+
+ "CF.{$cf_id} IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+ "'CF.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+ "'CF.$queue.{$cf_id}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+ "'CF.$queue.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+
+ "CF.{$cf_id} = 'x'" => { '-' => 0, x => 1, y => 0, z => 0 },
+ "'CF.{$cf_name}' = 'x'" => { '-' => 0, x => 1, y => 0, z => 0 },
+ "'CF.$queue.{$cf_id}' = 'x'" => { '-' => 0, x => 1, y => 0, z => 0 },
+ "'CF.$queue.{$cf_name}' = 'x'" => { '-' => 0, x => 1, y => 0, z => 0 },
+
+ "CF.{$cf_id} != 'x'" => { '-' => 1, x => 0, y => 1, z => 1 },
+ "'CF.{$cf_name}' != 'x'" => { '-' => 1, x => 0, y => 1, z => 1 },
+ "'CF.$queue.{$cf_id}' != 'x'" => { '-' => 1, x => 0, y => 1, z => 1 },
+ "'CF.$queue.{$cf_name}' != 'x'" => { '-' => 1, x => 0, y => 1, z => 1 },
+
+ "CF.{$cf_id} = 'x' OR CF.{$cf_id} = 'y'" => { '-' => 0, x => 1, y => 1, z => 0 },
+ "'CF.{$cf_name}' = 'x' OR 'CF.{$cf_name}' = 'y'" => { '-' => 0, x => 1, y => 1, z => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' OR 'CF.$queue.{$cf_id}' = 'y'" => { '-' => 0, x => 1, y => 1, z => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' OR 'CF.$queue.{$cf_name}' = 'y'" => { '-' => 0, x => 1, y => 1, z => 0 },
+
+ "CF.{$cf_id} = 'x' AND CF.{$cf_id} = 'y'" => { '-' => 0, x => 0, y => 0, z => 0 },
+ "'CF.{$cf_name}' = 'x' AND 'CF.{$cf_name}' = 'y'" => { '-' => 0, x => 0, y => 0, z => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' AND 'CF.$queue.{$cf_id}' = 'y'" => { '-' => 0, x => 0, y => 0, z => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' AND 'CF.$queue.{$cf_name}' = 'y'" => { '-' => 0, x => 0, y => 0, z => 0 },
+
+ "CF.{$cf_id} != 'x' AND CF.{$cf_id} != 'y'" => { '-' => 1, x => 0, y => 0, z => 1 },
+ "'CF.{$cf_name}' != 'x' AND 'CF.{$cf_name}' != 'y'" => { '-' => 1, x => 0, y => 0, z => 1 },
+ "'CF.$queue.{$cf_id}' != 'x' AND 'CF.$queue.{$cf_id}' != 'y'" => { '-' => 1, x => 0, y => 0, z => 1 },
+ "'CF.$queue.{$cf_name}' != 'x' AND 'CF.$queue.{$cf_name}' != 'y'" => { '-' => 1, x => 0, y => 0, z => 1 },
+
+ "CF.{$cf_id} = 'x' AND CF.{$cf_id} IS NULL" => { '-' => 0, x => 0, y => 0, z => 0 },
+ "'CF.{$cf_name}' = 'x' AND 'CF.{$cf_name}' IS NULL" => { '-' => 0, x => 0, y => 0, z => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' AND 'CF.$queue.{$cf_id}' IS NULL" => { '-' => 0, x => 0, y => 0, z => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' AND 'CF.$queue.{$cf_name}' IS NULL" => { '-' => 0, x => 0, y => 0, z => 0 },
+
+ "CF.{$cf_id} = 'x' OR CF.{$cf_id} IS NULL" => { '-' => 1, x => 1, y => 0, z => 0 },
+ "'CF.{$cf_name}' = 'x' OR 'CF.{$cf_name}' IS NULL" => { '-' => 1, x => 1, y => 0, z => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' OR 'CF.$queue.{$cf_id}' IS NULL" => { '-' => 1, x => 1, y => 0, z => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' OR 'CF.$queue.{$cf_name}' IS NULL" => { '-' => 1, x => 1, y => 0, z => 0 },
+
+ "CF.{$cf_id} = 'x' AND CF.{$cf_id} IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0 },
+ "'CF.{$cf_name}' = 'x' AND 'CF.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0 },
+ "'CF.$queue.{$cf_id}' = 'x' AND 'CF.$queue.{$cf_id}' IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0 },
+ "'CF.$queue.{$cf_name}' = 'x' AND 'CF.$queue.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 0, z => 0 },
+
+ "CF.{$cf_id} = 'x' OR CF.{$cf_id} IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+ "'CF.{$cf_name}' = 'x' OR 'CF.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+ "'CF.$queue.{$cf_id}' = 'x' OR 'CF.$queue.{$cf_id}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+ "'CF.$queue.{$cf_name}' = 'x' OR 'CF.$queue.{$cf_name}' IS NOT NULL" => { '-' => 0, x => 1, y => 1, z => 1 },
+
+);
+@tickets = add_tix_from_data();
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue'");
+ is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+
+exit 0;
diff --git a/rt/t/ticket/search_by_links.t b/rt/t/ticket/search_by_links.t
new file mode 100644
index 0000000..a8e955c
--- /dev/null
+++ b/rt/t/ticket/search_by_links.t
@@ -0,0 +1,132 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 80;
+use RT::Ticket;
+
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+
+my ($total, @data, @tickets, %test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ while (@data) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my %args = %{ shift(@data) };
+ $args{$_} = $res[ $args{$_} ]->id foreach grep $args{$_}, keys %RT::Ticket::LINKTYPEMAP;
+ my ( $id, undef $msg ) = $t->Create(
+ Queue => $q->id,
+ %args,
+ );
+ ok( $id, "ticket created" ) or diag("error: $msg");
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $key ( sort keys %test ) {
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL( "( $query_prefix ) AND ( $key )" );
+
+ my $error = 0;
+
+ my $count = 0;
+ $count++ foreach grep $_, values %{ $test{$key} };
+ is($tix->Count, $count, "found correct number of ticket(s) by '$key'") or $error = 1;
+
+ my $good_tickets = 1;
+ while ( my $ticket = $tix->Next ) {
+ next if $test{$key}->{ $ticket->Subject };
+ diag $ticket->Subject ." ticket has been found when it's not expected";
+ $good_tickets = 0;
+ }
+ ok( $good_tickets, "all tickets are good with '$key'" ) or $error = 1;
+
+ diag "Wrong SQL query for '$key':". $tix->BuildSelectQuery if $error;
+ }
+}
+
+# simple set with "no links", "parent and child"
+@data = (
+ { Subject => '-', },
+ { Subject => 'p', },
+ { Subject => 'c', MemberOf => -1 },
+);
+@tickets = add_tix_from_data();
+%test = (
+ 'Linked IS NOT NULL' => { '-' => 0, c => 1, p => 1 },
+ 'Linked IS NULL' => { '-' => 1, c => 0, p => 0 },
+ 'LinkedTo IS NOT NULL' => { '-' => 0, c => 1, p => 0 },
+ 'LinkedTo IS NULL' => { '-' => 1, c => 0, p => 1 },
+ 'LinkedFrom IS NOT NULL' => { '-' => 0, c => 0, p => 1 },
+ 'LinkedFrom IS NULL' => { '-' => 1, c => 1, p => 0 },
+
+ 'HasMember IS NOT NULL' => { '-' => 0, c => 0, p => 1 },
+ 'HasMember IS NULL' => { '-' => 1, c => 1, p => 0 },
+ 'MemberOf IS NOT NULL' => { '-' => 0, c => 1, p => 0 },
+ 'MemberOf IS NULL' => { '-' => 1, c => 0, p => 1 },
+
+ 'RefersTo IS NOT NULL' => { '-' => 0, c => 0, p => 0 },
+ 'RefersTo IS NULL' => { '-' => 1, c => 1, p => 1 },
+
+ 'Linked = '. $tickets[0]->id => { '-' => 0, c => 0, p => 0 },
+ 'Linked != '. $tickets[0]->id => { '-' => 1, c => 1, p => 1 },
+
+ 'MemberOf = '. $tickets[1]->id => { '-' => 0, c => 1, p => 0 },
+ 'MemberOf != '. $tickets[1]->id => { '-' => 1, c => 0, p => 1 },
+);
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '". $q->id ."'");
+ is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+
+# another set with tests of combinations searches
+@data = (
+ { Subject => '-', },
+ { Subject => 'p', },
+ { Subject => 'rp', RefersTo => -1 },
+ { Subject => 'c', MemberOf => -2 },
+ { Subject => 'rc1', RefersTo => -1 },
+ { Subject => 'rc2', RefersTo => -2 },
+);
+@tickets = add_tix_from_data();
+my $pid = $tickets[1]->id;
+%test = (
+ 'RefersTo IS NOT NULL' => { '-' => 0, c => 0, p => 0, rp => 1, rc1 => 1, rc2 => 1 },
+ 'RefersTo IS NULL' => { '-' => 1, c => 1, p => 1, rp => 0, rc1 => 0, rc2 => 0 },
+
+ 'RefersTo IS NOT NULL AND MemberOf IS NOT NULL' => { '-' => 0, c => 0, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+ 'RefersTo IS NOT NULL AND MemberOf IS NULL' => { '-' => 0, c => 0, p => 0, rp => 1, rc1 => 1, rc2 => 1 },
+ 'RefersTo IS NULL AND MemberOf IS NOT NULL' => { '-' => 0, c => 1, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+ 'RefersTo IS NULL AND MemberOf IS NULL' => { '-' => 1, c => 0, p => 1, rp => 0, rc1 => 0, rc2 => 0 },
+
+ 'RefersTo IS NOT NULL OR MemberOf IS NOT NULL' => { '-' => 0, c => 1, p => 0, rp => 1, rc1 => 1, rc2 => 1 },
+ 'RefersTo IS NOT NULL OR MemberOf IS NULL' => { '-' => 1, c => 0, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+ 'RefersTo IS NULL OR MemberOf IS NOT NULL' => { '-' => 1, c => 1, p => 1, rp => 0, rc1 => 0, rc2 => 0 },
+ 'RefersTo IS NULL OR MemberOf IS NULL' => { '-' => 1, c => 1, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+
+ "RefersTo = $pid AND MemberOf = $pid" => { '-' => 0, c => 0, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+ "RefersTo = $pid AND MemberOf != $pid" => { '-' => 0, c => 0, p => 0, rp => 1, rc1 => 0, rc2 => 0 },
+ "RefersTo != $pid AND MemberOf = $pid" => { '-' => 0, c => 1, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+ "RefersTo != $pid AND MemberOf != $pid" => { '-' => 1, c => 0, p => 1, rp => 0, rc1 => 1, rc2 => 1 },
+
+ "RefersTo = $pid OR MemberOf = $pid" => { '-' => 0, c => 1, p => 0, rp => 1, rc1 => 0, rc2 => 0 },
+ "RefersTo = $pid OR MemberOf != $pid" => { '-' => 1, c => 0, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+ "RefersTo != $pid OR MemberOf = $pid" => { '-' => 1, c => 1, p => 1, rp => 0, rc1 => 1, rc2 => 1 },
+ "RefersTo != $pid OR MemberOf != $pid" => { '-' => 1, c => 1, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+);
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '". $q->id ."'");
+ is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+
diff --git a/rt/t/ticket/search_by_txn.t b/rt/t/ticket/search_by_txn.t
new file mode 100644
index 0000000..1be6916
--- /dev/null
+++ b/rt/t/ticket/search_by_txn.t
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+
+BEGIN{ $ENV{'TZ'} = 'GMT'};
+
+use RT::Test tests => 10;
+
+my $SUBJECT = "Search test - ".$$;
+
+use_ok('RT::Tickets');
+my $tix = RT::Tickets->new($RT::SystemUser);
+can_ok($tix, 'FromSQL');
+$tix->FromSQL('Updated = "2005-08-05" AND Subject = "$SUBJECT"');
+
+ok(! $tix->Count, "Searching for tickets updated on a random date finds nothing" . $tix->Count);
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+$ticket->Create(Queue => 'General', Subject => $SUBJECT);
+ok ($ticket->id, "We created a ticket");
+my ($id, $txnid, $txnobj) = $ticket->Comment( Content => 'A comment that happend on 2004-01-01');
+
+isa_ok($txnobj, 'RT::Transaction');
+
+ok($txnobj->CreatedObj->ISO);
+my ( $sid,$smsg) = $txnobj->__Set(Field => 'Created', Value => '2005-08-05 20:00:56');
+ok($sid,$smsg);
+is($txnobj->Created,'2005-08-05 20:00:56');
+is($txnobj->CreatedObj->ISO,'2005-08-05 20:00:56');
+
+$tix->FromSQL(qq{Updated = "2005-08-05" AND Subject = "$SUBJECT"});
+is( $tix->Count, 1);
+
diff --git a/rt/t/ticket/search_by_watcher.t b/rt/t/ticket/search_by_watcher.t
new file mode 100644
index 0000000..9d94432
--- /dev/null
+++ b/rt/t/ticket/search_by_watcher.t
@@ -0,0 +1,280 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 119;
+use RT::Ticket;
+
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+my $queue = $q->Name;
+
+my ($total, @data, @tickets, %test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ while (@data) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my ( $id, undef $msg ) = $t->Create(
+ Queue => $q->id,
+ %{ shift(@data) },
+ );
+ ok( $id, "ticket created" ) or diag("error: $msg");
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $key ( sort keys %test ) {
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL( "( $query_prefix ) AND ( $key )" );
+
+ my $error = 0;
+
+ my $count = 0;
+ $count++ foreach grep $_, values %{ $test{$key} };
+ is($tix->Count, $count, "found correct number of ticket(s) by '$key'") or $error = 1;
+
+ my $good_tickets = ($tix->Count == $count);
+ while ( my $ticket = $tix->Next ) {
+ next if $test{$key}->{ $ticket->Subject };
+ diag $ticket->Subject ." ticket has been found when it's not expected";
+ $good_tickets = 0;
+ }
+ ok( $good_tickets, "all tickets are good with '$key'" ) or $error = 1;
+
+ diag "Wrong SQL query for '$key':". $tix->BuildSelectQuery if $error;
+ }
+}
+
+@data = (
+ { Subject => 'xy', Requestor => ['x@example.com', 'y@example.com'] },
+ { Subject => 'x', Requestor => 'x@example.com' },
+ { Subject => 'y', Requestor => 'y@example.com' },
+ { Subject => '-', },
+ { Subject => 'z', Requestor => 'z@example.com' },
+);
+%test = (
+ 'Requestor = "x@example.com"' => { xy => 1, x => 1, y => 0, '-' => 0, z => 0 },
+ 'Requestor != "x@example.com"' => { xy => 0, x => 0, y => 1, '-' => 1, z => 1 },
+
+ 'Requestor = "y@example.com"' => { xy => 1, x => 0, y => 1, '-' => 0, z => 0 },
+ 'Requestor != "y@example.com"' => { xy => 0, x => 1, y => 0, '-' => 1, z => 1 },
+
+ 'Requestor LIKE "@example.com"' => { xy => 1, x => 1, y => 1, '-' => 0, z => 1 },
+ 'Requestor NOT LIKE "@example.com"' => { xy => 0, x => 0, y => 0, '-' => 1, z => 0 },
+
+ 'Requestor IS NULL' => { xy => 0, x => 0, y => 0, '-' => 1, z => 0 },
+ 'Requestor IS NOT NULL' => { xy => 1, x => 1, y => 1, '-' => 0, z => 1 },
+
+# this test is a todo, we run it later
+# 'Requestor = "x@example.com" AND Requestor = "y@example.com"' => { xy => 1, x => 0, y => 0, '-' => 0, z => 0 },
+ 'Requestor = "x@example.com" OR Requestor = "y@example.com"' => { xy => 1, x => 1, y => 1, '-' => 0, z => 0 },
+
+ 'Requestor != "x@example.com" AND Requestor != "y@example.com"' => { xy => 0, x => 0, y => 0, '-' => 1, z => 1 },
+ 'Requestor != "x@example.com" OR Requestor != "y@example.com"' => { xy => 0, x => 1, y => 1, '-' => 1, z => 1 },
+
+ 'Requestor = "x@example.com" AND Requestor != "y@example.com"' => { xy => 0, x => 1, y => 0, '-' => 0, z => 0 },
+ 'Requestor = "x@example.com" OR Requestor != "y@example.com"' => { xy => 1, x => 1, y => 0, '-' => 1, z => 1 },
+
+ 'Requestor != "x@example.com" AND Requestor = "y@example.com"' => { xy => 0, x => 0, y => 1, '-' => 0, z => 0 },
+ 'Requestor != "x@example.com" OR Requestor = "y@example.com"' => { xy => 1, x => 0, y => 1, '-' => 1, z => 1 },
+);
+@tickets = add_tix_from_data();
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue'");
+ is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+
+# mixing searches by watchers with other conditions
+# http://rt3.fsck.com/Ticket/Display.html?id=9322
+%test = (
+ 'Subject LIKE "x" AND Requestor = "y@example.com"' =>
+ { xy => 1, x => 0, y => 0, '-' => 0, z => 0 },
+ 'Subject NOT LIKE "x" AND Requestor = "y@example.com"' =>
+ { xy => 0, x => 0, y => 1, '-' => 0, z => 0 },
+ 'Subject LIKE "x" AND Requestor != "y@example.com"' =>
+ { xy => 0, x => 1, y => 0, '-' => 0, z => 0 },
+ 'Subject NOT LIKE "x" AND Requestor != "y@example.com"' =>
+ { xy => 0, x => 0, y => 0, '-' => 1, z => 1 },
+
+ 'Subject LIKE "x" OR Requestor = "y@example.com"' =>
+ { xy => 1, x => 1, y => 1, '-' => 0, z => 0 },
+ 'Subject NOT LIKE "x" OR Requestor = "y@example.com"' =>
+ { xy => 1, x => 0, y => 1, '-' => 1, z => 1 },
+ 'Subject LIKE "x" OR Requestor != "y@example.com"' =>
+ { xy => 1, x => 1, y => 0, '-' => 1, z => 1 },
+ 'Subject NOT LIKE "x" OR Requestor != "y@example.com"' =>
+ { xy => 0, x => 1, y => 1, '-' => 1, z => 1 },
+
+# group of cases when user doesn't exist in DB at all
+ 'Subject LIKE "x" AND Requestor = "not-exist@example.com"' =>
+ { xy => 0, x => 0, y => 0, '-' => 0, z => 0 },
+ 'Subject NOT LIKE "x" AND Requestor = "not-exist@example.com"' =>
+ { xy => 0, x => 0, y => 0, '-' => 0, z => 0 },
+ 'Subject LIKE "x" AND Requestor != "not-exist@example.com"' =>
+ { xy => 1, x => 1, y => 0, '-' => 0, z => 0 },
+ 'Subject NOT LIKE "x" AND Requestor != "not-exist@example.com"' =>
+ { xy => 0, x => 0, y => 1, '-' => 1, z => 1 },
+# 'Subject LIKE "x" OR Requestor = "not-exist@example.com"' =>
+# { xy => 1, x => 1, y => 0, '-' => 0, z => 0 },
+# 'Subject NOT LIKE "x" OR Requestor = "not-exist@example.com"' =>
+# { xy => 0, x => 0, y => 1, '-' => 1, z => 1 },
+ 'Subject LIKE "x" OR Requestor != "not-exist@example.com"' =>
+ { xy => 1, x => 1, y => 1, '-' => 1, z => 1 },
+ 'Subject NOT LIKE "x" OR Requestor != "not-exist@example.com"' =>
+ { xy => 1, x => 1, y => 1, '-' => 1, z => 1 },
+
+ 'Subject LIKE "z" AND (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+ { xy => 0, x => 0, y => 0, '-' => 0, z => 0 },
+ 'Subject NOT LIKE "z" AND (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+ { xy => 1, x => 1, y => 1, '-' => 0, z => 0 },
+ 'Subject LIKE "z" OR (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+ { xy => 1, x => 1, y => 1, '-' => 0, z => 1 },
+ 'Subject NOT LIKE "z" OR (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+ { xy => 1, x => 1, y => 1, '-' => 1, z => 0 },
+);
+run_tests();
+
+TODO: {
+ local $TODO = "we can't generate this query yet";
+ %test = (
+ 'Requestor = "x@example.com" AND Requestor = "y@example.com"'
+ => { xy => 1, x => 0, y => 0, '-' => 0, z => 0 },
+ 'Subject LIKE "x" OR Requestor = "not-exist@example.com"' =>
+ { xy => 1, x => 1, y => 0, '-' => 0, z => 0 },
+ 'Subject NOT LIKE "x" OR Requestor = "not-exist@example.com"' =>
+ { xy => 0, x => 0, y => 1, '-' => 1, z => 1 },
+ );
+ run_tests();
+}
+
+@data = (
+ { Subject => 'xy', Cc => ['x@example.com'], Requestor => [ 'y@example.com' ] },
+ { Subject => 'x-', Cc => ['x@example.com'], Requestor => [] },
+ { Subject => '-y', Cc => [], Requestor => [ 'y@example.com' ] },
+ { Subject => '-', },
+ { Subject => 'zz', Cc => ['z@example.com'], Requestor => [ 'z@example.com' ] },
+ { Subject => 'z-', Cc => ['z@example.com'], Requestor => [] },
+ { Subject => '-z', Cc => [], Requestor => [ 'z@example.com' ] },
+);
+%test = (
+ 'Cc = "x@example.com" AND Requestor = "y@example.com"' =>
+ { xy => 1, 'x-' => 0, '-y' => 0, '-' => 0, zz => 0, 'z-' => 0, '-z' => 0 },
+ 'Cc = "x@example.com" OR Requestor = "y@example.com"' =>
+ { xy => 1, 'x-' => 1, '-y' => 1, '-' => 0, zz => 0, 'z-' => 0, '-z' => 0 },
+
+ 'Cc != "x@example.com" AND Requestor = "y@example.com"' =>
+ { xy => 0, 'x-' => 0, '-y' => 1, '-' => 0, zz => 0, 'z-' => 0, '-z' => 0 },
+ 'Cc != "x@example.com" OR Requestor = "y@example.com"' =>
+ { xy => 1, 'x-' => 0, '-y' => 1, '-' => 1, zz => 1, 'z-' => 1, '-z' => 1 },
+
+ 'Cc IS NULL AND Requestor = "y@example.com"' =>
+ { xy => 0, 'x-' => 0, '-y' => 1, '-' => 0, zz => 0, 'z-' => 0, '-z' => 0 },
+ 'Cc IS NULL OR Requestor = "y@example.com"' =>
+ { xy => 1, 'x-' => 0, '-y' => 1, '-' => 1, zz => 0, 'z-' => 0, '-z' => 1 },
+
+ 'Cc IS NOT NULL AND Requestor = "y@example.com"' =>
+ { xy => 1, 'x-' => 0, '-y' => 0, '-' => 0, zz => 0, 'z-' => 0, '-z' => 0 },
+ 'Cc IS NOT NULL OR Requestor = "y@example.com"' =>
+ { xy => 1, 'x-' => 1, '-y' => 1, '-' => 0, zz => 1, 'z-' => 1, '-z' => 0 },
+);
+@tickets = add_tix_from_data();
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue'");
+ is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+
+
+# owner is special watcher because reference is duplicated in two places,
+# owner was an ENUM field now it's WATCHERFIELD, but should support old
+# style ENUM searches for backward compatibility
+my $nobody = RT::Nobody();
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Owner = '". $nobody->id ."'");
+ ok($tix->Count, "found ticket(s)");
+}
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Owner = '". $nobody->Name ."'");
+ ok($tix->Count, "found ticket(s)");
+}
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Owner != '". $nobody->id ."'");
+ is($tix->Count, 0, "found ticket(s)");
+}
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Owner != '". $nobody->Name ."'");
+ is($tix->Count, 0, "found ticket(s)");
+}
+
+{
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Owner.Name LIKE 'nob'");
+ ok($tix->Count, "found ticket(s)");
+}
+
+{
+ # create ticket and force type to not a 'ticket' value
+ # bug #6898@rt3.fsck.com
+ # and http://marc.theaimsgroup.com/?l=rt-devel&m=112662934627236&w=2
+ @data = ( { Subject => 'not a ticket' } );
+ my($t) = add_tix_from_data();
+ $t->_Set( Field => 'Type',
+ Value => 'not a ticket',
+ CheckACL => 0,
+ RecordTransaction => 0,
+ );
+ $total--;
+
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Owner = 'Nobody'");
+ is($tix->Count, $total, "found ticket(s)");
+}
+
+{
+ my $everyone = RT::Group->new( $RT::SystemUser );
+ $everyone->LoadSystemInternalGroup('Everyone');
+ ok($everyone->id, "loaded 'everyone' group");
+ my($id, $msg) = $everyone->PrincipalObj->GrantRight( Right => 'OwnTicket',
+ Object => $q
+ );
+ ok($id, "granted OwnTicket right to Everyone on '$queue'") or diag("error: $msg");
+
+ my $u = RT::User->new( $RT::SystemUser );
+ $u->LoadOrCreateByEmail('alpha@example.com');
+ ok($u->id, "loaded user");
+ @data = ( { Subject => '4', Owner => $u->id } );
+ my($t) = add_tix_from_data();
+ is( $t->Owner, $u->id, "created ticket with custom owner" );
+ my $u_alpha_id = $u->id;
+
+ $u = RT::User->new( $RT::SystemUser );
+ $u->LoadOrCreateByEmail('bravo@example.com');
+ ok($u->id, "loaded user");
+ @data = ( { Subject => '5', Owner => $u->id } );
+ ($t) = add_tix_from_data();
+ is( $t->Owner, $u->id, "created ticket with custom owner" );
+ my $u_bravo_id = $u->id;
+
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND
+ ( Owner = '$u_alpha_id' OR
+ Owner = '$u_bravo_id' )"
+ );
+ is($tix->Count, 2, "found ticket(s)");
+}
+
+
+exit(0)
diff --git a/rt/t/ticket/search_long_cf_values.t b/rt/t/ticket/search_long_cf_values.t
new file mode 100644
index 0000000..f9cc7b5
--- /dev/null
+++ b/rt/t/ticket/search_long_cf_values.t
@@ -0,0 +1,79 @@
+#!/opt/perl/bin/perl -w
+
+# tests relating to searching. Especially around custom fields with long values
+# (> 255 chars)
+
+use strict;
+use warnings;
+
+use RT::Test tests => 10;
+
+# setup the queue
+
+my $q = RT::Queue->new($RT::SystemUser);
+my $queue = 'SearchTests-'.$$;
+$q->Create(Name => $queue);
+ok ($q->id, "Created the queue");
+
+
+# setup the CF
+my $cf = RT::CustomField->new($RT::SystemUser);
+$cf->Create(Name => 'SearchTest', Type => 'Freeform', MaxValues => 0, Queue => $q->id);
+ok($cf->id, "Created the SearchTest CF");
+my $cflabel = "CustomField-".$cf->id;
+
+# setup some tickets
+my $t1 = RT::Ticket->new($RT::SystemUser);
+my ( $id, undef $msg ) = $t1->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest1',
+ Requestor => ['search@example.com'],
+ $cflabel => 'foo',
+);
+ok( $id, $msg );
+
+
+my $t2 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t2->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest2',
+ Requestor => ['searchlong@example.com'],
+ $cflabel => 'bar' x 150,
+);
+ok( $id, $msg );
+
+my $t3 = RT::Ticket->new($RT::SystemUser);
+( $id, undef, $msg ) = $t3->Create(
+ Queue => $q->id,
+ Subject => 'SearchTest3',
+ Requestor => ['searchlong@example.com'],
+ $cflabel => 'bar',
+);
+ok( $id, $msg );
+
+# we have tickets. start searching
+my $tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest LIKE 'foo'");
+is($tix->Count, 1, "matched short string foo")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest LIKE 'bar'");
+is($tix->Count, 2, "matched long+short string bar")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND ( CF.SearchTest LIKE 'foo' OR CF.SearchTest LIKE 'bar' )");
+is($tix->Count, 3, "matched short string foo or long+short string bar")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest NOT LIKE 'foo' AND CF.SearchTest LIKE 'bar'");
+is($tix->Count, 2, "not matched short string foo and matched long+short string bar")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND CF.SearchTest LIKE 'foo' AND CF.SearchTest NOT LIKE 'bar'");
+is($tix->Count, 1, "matched short string foo and not matched long+short string bar")
+ or diag "wrong results from SQL:\n". $tix->BuildSelectCountQuery;
+
diff --git a/rt/t/ticket/sort-by-custom-ownership.t b/rt/t/ticket/sort-by-custom-ownership.t
new file mode 100644
index 0000000..9739c5a
--- /dev/null
+++ b/rt/t/ticket/sort-by-custom-ownership.t
@@ -0,0 +1,103 @@
+#!/usr/bin/perl
+
+use RT;
+use RT::Test tests => 7;
+
+
+use strict;
+use warnings;
+
+use RT::Tickets;
+use RT::Queue;
+use RT::CustomField;
+
+my($ret,$msg);
+
+# Test Paw Sort
+
+
+
+# ---- Create a queue to test with.
+my $queue = "PAWSortQueue-$$";
+my $queue_obj = RT::Queue->new($RT::SystemUser);
+($ret, $msg) = $queue_obj->Create(Name => $queue,
+ Description => 'queue for custom field sort testing');
+ok($ret, "$queue test queue creation. $msg");
+
+
+# ---- Create some users
+
+my $me = RT::User->new($RT::SystemUser);
+($ret, $msg) = $me->Create(Name => "Me$$", EmailAddress => $$.'create-me-1@example.com');
+($ret, $msg) = $me->PrincipalObj->GrantRight(Object =>$queue_obj, Right => 'OwnTicket');
+($ret, $msg) = $me->PrincipalObj->GrantRight(Object =>$queue_obj, Right => 'SeeQueue');
+($ret, $msg) = $me->PrincipalObj->GrantRight(Object =>$queue_obj, Right => 'ShowTicket');
+my $you = RT::User->new($RT::SystemUser);
+($ret, $msg) = $you->Create(Name => "You$$", EmailAddress => $$.'create-you-1@example.com');
+($ret, $msg) = $you->PrincipalObj->GrantRight(Object =>$queue_obj, Right => 'OwnTicket');
+($ret, $msg) = $you->PrincipalObj->GrantRight(Object =>$queue_obj, Right => 'SeeQueue');
+($ret, $msg) = $you->PrincipalObj->GrantRight(Object =>$queue_obj, Right => 'ShowTicket');
+
+my $nobody = RT::User->new($RT::SystemUser);
+$nobody->Load('nobody');
+
+
+# ----- Create some tickets to test with. Assign them some values to
+# make it easy to sort with.
+
+my @tickets = (
+ [qw[1 10], $me],
+ [qw[2 20], $me],
+ [qw[3 20], $you],
+ [qw[4 30], $you],
+ [qw[5 5], $nobody],
+ [qw[6 55], $nobody],
+ );
+for (@tickets) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ $t->Create( Queue => $queue_obj->Id,
+ Subject => $_->[0],
+ Owner => $_->[2]->Id,
+ Priority => $_->[1],
+ );
+}
+
+sub check_order {
+ my ($tx, @order) = @_;
+ my @results;
+ while (my $t = $tx->Next) {
+ push @results, $t->Subject;
+ }
+ my $results = join (" ",@results);
+ my $order = join(" ",@order);
+ is( $results, $order );
+}
+
+
+# The real tests start here
+
+my $cme = new RT::CurrentUser( $me );
+my $metx = new RT::Tickets( $cme );
+# Make sure we can sort in both directions on a queue specific field.
+$metx->FromSQL(qq[queue="$queue"] );
+$metx->OrderBy( FIELD => "Custom.Ownership", ORDER => 'ASC' );
+is($metx->Count,6);
+check_order( $metx, qw[2 1 6 5 4 3]);
+
+$metx->OrderBy( FIELD => "Custom.Ownership", ORDER => 'DESC' );
+is($metx->Count,6);
+check_order( $metx, reverse qw[2 1 6 5 4 3]);
+
+
+
+my $cyou = new RT::CurrentUser( $you );
+my $youtx = new RT::Tickets( $cyou );
+# Make sure we can sort in both directions on a queue specific field.
+$youtx->FromSQL(qq[queue="$queue"] );
+$youtx->OrderBy( FIELD => "Custom.Ownership", ORDER => 'ASC' );
+is($youtx->Count,6);
+check_order( $youtx, qw[4 3 6 5 2 1]);
+
+__END__
+
+
diff --git a/rt/t/ticket/sort-by-queue.t b/rt/t/ticket/sort-by-queue.t
new file mode 100644
index 0000000..df6e1ad
--- /dev/null
+++ b/rt/t/ticket/sort-by-queue.t
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+
+use RT::Test tests => 8;
+
+use strict;
+use warnings;
+
+use RT::Tickets;
+use RT::Queue;
+use RT::CustomField;
+
+#########################################################
+# Test sorting by Queue, we sort by its name
+#########################################################
+
+
+diag "Create queues to test with." if $ENV{TEST_VERBOSE};
+my @qids;
+my @queues;
+# create them in reverse order to avoid false positives
+foreach my $name ( qw(sort-by-queue-Z sort-by-queue-A) ) {
+ my $queue = RT::Queue->new( $RT::SystemUser );
+ my ($ret, $msg) = $queue->Create(
+ Name => $name ."-$$",
+ Description => 'queue to test sorting by queue'
+ );
+ ok($ret, "test queue creation. $msg");
+ push @queues, $queue;
+ push @qids, $queue->id;
+}
+
+my ($total, @data, @tickets, @test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ @data = sort { rand(100) <=> rand(100) } @data;
+ while (@data) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my %args = %{ shift(@data) };
+ my ( $id, undef, $msg ) = $t->Create( %args );
+ ok( $id, "ticket created" ) or diag("error: $msg");
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $test ( @test ) {
+ my $query = join " AND ", map "( $_ )", grep defined && length,
+ $query_prefix, $test->{'Query'};
+
+ foreach my $order (qw(ASC DESC)) {
+ my $error = 0;
+ my $tix = RT::Tickets->new( $RT::SystemUser );
+ $tix->FromSQL( $query );
+ $tix->OrderBy( FIELD => $test->{'Order'}, ORDER => $order );
+
+ ok($tix->Count, "found ticket(s)")
+ or $error = 1;
+
+ my ($order_ok, $last) = (1, $order eq 'ASC'? '-': 'zzzzzz');
+ while ( my $t = $tix->Next ) {
+ my $tmp;
+ if ( $order eq 'ASC' ) {
+ $tmp = ((split( /,/, $last))[0] cmp (split( /,/, $t->Subject))[0]);
+ } else {
+ $tmp = -((split( /,/, $last))[-1] cmp (split( /,/, $t->Subject))[-1]);
+ }
+ if ( $tmp > 0 ) {
+ $order_ok = 0; last;
+ }
+ $last = $t->Subject;
+ }
+
+ ok( $order_ok, "$order order of tickets is good" )
+ or $error = 1;
+
+ if ( $error ) {
+ diag "Wrong SQL query:". $tix->BuildSelectQuery;
+ $tix->GotoFirstItem;
+ while ( my $t = $tix->Next ) {
+ diag sprintf "%02d - %s", $t->id, $t->Subject;
+ }
+ }
+ }
+ }
+}
+
+@data = (
+ { Queue => $qids[0], Subject => 'z' },
+ { Queue => $qids[1], Subject => 'a' },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "Queue" },
+);
+run_tests();
+
diff --git a/rt/t/ticket/sort-by-user.t b/rt/t/ticket/sort-by-user.t
new file mode 100644
index 0000000..f9b1602
--- /dev/null
+++ b/rt/t/ticket/sort-by-user.t
@@ -0,0 +1,152 @@
+#!/usr/bin/perl
+
+use RT::Test tests => 32;
+
+use strict;
+use warnings;
+
+use RT::Tickets;
+use RT::Queue;
+use RT::CustomField;
+
+#########################################################
+# Test sorting by Owner, Creator and LastUpdatedBy
+# we sort by user name
+#########################################################
+
+diag "Create a queue to test with." if $ENV{TEST_VERBOSE};
+my $queue_name = "OwnerSortQueue$$";
+my $queue;
+{
+ $queue = RT::Queue->new( $RT::SystemUser );
+ my ($ret, $msg) = $queue->Create(
+ Name => $queue_name,
+ Description => 'queue for custom field sort testing'
+ );
+ ok($ret, "$queue test queue creation. $msg");
+}
+
+my @uids;
+my @users;
+# create them in reverse order to avoid false positives
+foreach my $u (qw(Z A)) {
+ my $name = $u ."-user-to-test-ordering-$$";
+ my $user = RT::User->new( $RT::SystemUser );
+ my ($uid) = $user->Create(
+ Name => $name,
+ Privileged => 1,
+ );
+ ok $uid, "created user #$uid";
+
+ my ($status, $msg) = $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
+ ok $status, "granted right";
+ ($status, $msg) = $user->PrincipalObj->GrantRight( Right => 'CreateTicket', Object => $queue );
+ ok $status, "granted right";
+
+ push @users, $user;
+ push @uids, $user->id;
+}
+
+my ($total, @data, @tickets, @test) = (0, ());
+
+sub add_tix_from_data {
+ my @res = ();
+ @data = sort { rand(100) <=> rand(100) } @data;
+ while (@data) {
+ my $t = RT::Ticket->new($RT::SystemUser);
+ my %args = %{ shift(@data) };
+
+ my ( $id, undef, $msg ) = $t->Create( %args, Queue => $queue->id );
+ if ( $args{'Owner'} ) {
+ is $t->Owner, $args{'Owner'}, "owner is correct";
+ }
+ if ( $args{'Creator'} ) {
+ is $t->Creator, $args{'Creator'}, "creator is correct";
+ }
+ # hackish, but simpler
+ if ( $args{'LastUpdatedBy'} ) {
+ $t->__Set( Field => 'LastUpdatedBy', Value => $args{'LastUpdatedBy'} );
+ }
+ ok( $id, "ticket created" ) or diag("error: $msg");
+ push @res, $t;
+ $total++;
+ }
+ return @res;
+}
+
+sub run_tests {
+ my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+ foreach my $test ( @test ) {
+ my $query = join " AND ", map "( $_ )", grep defined && length,
+ $query_prefix, $test->{'Query'};
+
+ foreach my $order (qw(ASC DESC)) {
+ my $error = 0;
+ my $tix = RT::Tickets->new( $RT::SystemUser );
+ $tix->FromSQL( $query );
+ $tix->OrderBy( FIELD => $test->{'Order'}, ORDER => $order );
+
+ ok($tix->Count, "found ticket(s)")
+ or $error = 1;
+
+ my ($order_ok, $last) = (1, $order eq 'ASC'? '-': 'zzzzzz');
+ while ( my $t = $tix->Next ) {
+ my $tmp;
+ if ( $order eq 'ASC' ) {
+ $tmp = ((split( /,/, $last))[0] cmp (split( /,/, $t->Subject))[0]);
+ } else {
+ $tmp = -((split( /,/, $last))[-1] cmp (split( /,/, $t->Subject))[-1]);
+ }
+ if ( $tmp > 0 ) {
+ $order_ok = 0; last;
+ }
+ $last = $t->Subject;
+ }
+
+ ok( $order_ok, "$order order of tickets is good" )
+ or $error = 1;
+
+ if ( $error ) {
+ diag "Wrong SQL query:". $tix->BuildSelectQuery;
+ $tix->GotoFirstItem;
+ while ( my $t = $tix->Next ) {
+ diag sprintf "%02d - %s", $t->id, $t->Subject;
+ }
+ }
+ }
+ }
+}
+
+@data = (
+ { Subject => 'Nobody' },
+ { Subject => 'Z', Owner => $uids[0] },
+ { Subject => 'A', Owner => $uids[1] },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "Owner" },
+);
+run_tests();
+
+@data = (
+ { Subject => 'RT' },
+ { Subject => 'Z', Creator => $uids[0] },
+ { Subject => 'A', Creator => $uids[1] },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "Creator" },
+);
+run_tests();
+
+@data = (
+ { Subject => 'RT' },
+ { Subject => 'Z', LastUpdatedBy => $uids[0] },
+ { Subject => 'A', LastUpdatedBy => $uids[1] },
+);
+@tickets = add_tix_from_data();
+@test = (
+ { Order => "LastUpdatedBy" },
+);
+run_tests();
+
diff --git a/rt/t/ticket/sort_by_cf.t b/rt/t/ticket/sort_by_cf.t
new file mode 100644
index 0000000..69274ad
--- /dev/null
+++ b/rt/t/ticket/sort_by_cf.t
@@ -0,0 +1,172 @@
+#!/usr/bin/perl
+
+use RT::Test tests => 21;
+RT::Init();
+
+use strict;
+use warnings;
+
+use RT::Tickets;
+use RT::Queue;
+use RT::CustomField;
+
+my($ret,$msg);
+
+
+# Test Sorting by custom fields.
+# TODO: it's hard to read this file, conver to new style,
+# for example look at 23cfsort-freeform-single.t
+
+# ---- Create a queue to test with.
+my $queue = "CFSortQueue-$$";
+my $queue_obj = RT::Queue->new( $RT::SystemUser );
+($ret, $msg) = $queue_obj->Create(
+ Name => $queue,
+ Description => 'queue for custom field sort testing'
+);
+ok($ret, "$queue test queue creation. $msg");
+
+# ---- Create some custom fields. We're not currently using all of
+# them to test with, but the more the merrier.
+my $cfO = RT::CustomField->new($RT::SystemUser);
+my $cfA = RT::CustomField->new($RT::SystemUser);
+my $cfB = RT::CustomField->new($RT::SystemUser);
+my $cfC = RT::CustomField->new($RT::SystemUser);
+
+($ret, $msg) = $cfO->Create( Name => 'Order',
+ Queue => 0,
+ SortOrder => 1,
+ Description => q{Something to compare results for, since we can't guarantee ticket ID},
+ Type=> 'FreeformSingle');
+ok($ret, "Custom Field Order created");
+
+($ret, $msg) = $cfA->Create( Name => 'Alpha',
+ Queue => $queue_obj->id,
+ SortOrder => 1,
+ Description => 'A Testing custom field',
+ Type=> 'FreeformSingle');
+ok($ret, "Custom Field Alpha created");
+
+($ret, $msg) = $cfB->Create( Name => 'Beta',
+ Queue => $queue_obj->id,
+ Description => 'A Testing custom field',
+ Type=> 'FreeformSingle');
+ok($ret, "Custom Field Beta created");
+
+($ret, $msg) = $cfC->Create( Name => 'Charlie',
+ Queue => $queue_obj->id,
+ Description => 'A Testing custom field',
+ Type=> 'FreeformSingle');
+ok($ret, "Custom Field Charlie created");
+
+# ----- Create some tickets to test with. Assign them some values to
+# make it easy to sort with.
+my $t1 = RT::Ticket->new($RT::SystemUser);
+$t1->Create( Queue => $queue_obj->Id,
+ Subject => 'One',
+ );
+$t1->AddCustomFieldValue(Field => $cfO->Id, Value => '1');
+$t1->AddCustomFieldValue(Field => $cfA->Id, Value => '2');
+$t1->AddCustomFieldValue(Field => $cfB->Id, Value => '1');
+$t1->AddCustomFieldValue(Field => $cfC->Id, Value => 'BBB');
+
+my $t2 = RT::Ticket->new($RT::SystemUser);
+$t2->Create( Queue => $queue_obj->Id,
+ Subject => 'Two',
+ );
+$t2->AddCustomFieldValue(Field => $cfO->Id, Value => '2');
+$t2->AddCustomFieldValue(Field => $cfA->Id, Value => '1');
+$t2->AddCustomFieldValue(Field => $cfB->Id, Value => '2');
+$t2->AddCustomFieldValue(Field => $cfC->Id, Value => 'AAA');
+
+# helper
+sub check_order {
+ my ($tx, @order) = @_;
+ my @results;
+ while (my $t = $tx->Next) {
+ push @results, $t->CustomFieldValues($cfO->Id)->First->Content;
+ }
+ my $results = join (" ",@results);
+ my $order = join(" ",@order);
+ @_ = ($results, $order , "Ordered correctly: $order");
+ goto \&is;
+}
+
+# The real tests start here
+my $tx = new RT::Tickets( $RT::SystemUser );
+
+
+# Make sure we can sort in both directions on a queue specific field.
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderBy( FIELD => "CF.${queue}.{Charlie}", ORDER => 'DES' );
+is($tx->Count,2 ,"We found 2 tickets when looking for cf charlie");
+check_order( $tx, 1, 2);
+
+$tx = new RT::Tickets( $RT::SystemUser );
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderBy( FIELD => "CF.${queue}.{Charlie}", ORDER => 'ASC' );
+is($tx->Count,2, "We found two tickets when sorting by cf charlie without limiting to it" );
+check_order( $tx, 2, 1);
+
+# When ordering by _global_ CustomFields, if more than one queue has a
+# CF named Charlie, things will go bad. So, these results are uniqued
+# in Tickets_Overlay.
+$tx = new RT::Tickets( $RT::SystemUser );
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderBy( FIELD => "CF.{Charlie}", ORDER => 'DESC' );
+is($tx->Count,2);
+check_order( $tx, 1, 2);
+
+$tx = new RT::Tickets( $RT::SystemUser );
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderBy( FIELD => "CF.{Charlie}", ORDER => 'ASC' );
+is($tx->Count,2);
+check_order( $tx, 2, 1);
+
+# Add a new ticket, to test sorting on multiple columns.
+my $t3 = RT::Ticket->new($RT::SystemUser);
+$t3->Create( Queue => $queue_obj->Id,
+ Subject => 'Three',
+ );
+$t3->AddCustomFieldValue(Field => $cfO->Id, Value => '3');
+$t3->AddCustomFieldValue(Field => $cfA->Id, Value => '3');
+$t3->AddCustomFieldValue(Field => $cfB->Id, Value => '2');
+$t3->AddCustomFieldValue(Field => $cfC->Id, Value => 'AAA');
+
+$tx = new RT::Tickets( $RT::SystemUser );
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderByCols(
+ { FIELD => "CF.${queue}.{Charlie}", ORDER => 'ASC' },
+ { FIELD => "CF.${queue}.{Alpha}", ORDER => 'DES' },
+);
+is($tx->Count,3);
+check_order( $tx, 3, 2, 1);
+
+$tx = new RT::Tickets( $RT::SystemUser );
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderByCols(
+ { FIELD => "CF.${queue}.{Charlie}", ORDER => 'DES' },
+ { FIELD => "CF.${queue}.{Alpha}", ORDER => 'ASC' },
+);
+is($tx->Count,3);
+check_order( $tx, 1, 2, 3);
+
+# Reverse the order of the secondary column, which changes the order
+# of the first two tickets.
+$tx = new RT::Tickets( $RT::SystemUser );
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderByCols(
+ { FIELD => "CF.${queue}.{Charlie}", ORDER => 'ASC' },
+ { FIELD => "CF.${queue}.{Alpha}", ORDER => 'ASC' },
+);
+is($tx->Count,3);
+check_order( $tx, 2, 3, 1);
+
+$tx = new RT::Tickets( $RT::SystemUser );
+$tx->FromSQL(qq[queue="$queue"] );
+$tx->OrderByCols(
+ { FIELD => "CF.${queue}.{Charlie}", ORDER => 'DES' },
+ { FIELD => "CF.${queue}.{Alpha}", ORDER => 'DES' },
+);
+is($tx->Count,3);
+check_order( $tx, 1, 3, 2);
diff --git a/rt/t/validator/group_members.t b/rt/t/validator/group_members.t
new file mode 100644
index 0000000..f27a1f1
--- /dev/null
+++ b/rt/t/validator/group_members.t
@@ -0,0 +1,178 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use RT::Test tests => 60;
+
+sub load_or_create_group {
+ my $name = shift;
+ my %args = (@_);
+
+ my $group = RT::Group->new( $RT::SystemUser );
+ $group->LoadUserDefinedGroup( $name );
+ unless ( $group->id ) {
+ my ($id, $msg) = $group->CreateUserDefinedGroup(
+ Name => $name,
+ );
+ die "$msg" unless $id;
+ }
+
+ if ( $args{Members} ) {
+ my $cur = $group->MembersObj;
+ while ( my $entry = $cur->Next ) {
+ my ($status, $msg) = $entry->Delete;
+ die "$msg" unless $status;
+ }
+
+ foreach my $new ( @{ $args{Members} } ) {
+ my ($status, $msg) = $group->AddMember(
+ ref($new)? $new->id : $new,
+ );
+ die "$msg" unless $status;
+ }
+ }
+
+ return $group;
+}
+
+my $validator_path = "$RT::SbinPath/rt-validator";
+sub run_validator {
+ my %args = (check => 1, resolve => 0, force => 1, @_ );
+
+ my $cmd = $validator_path;
+ die "Couldn't find $cmd command" unless -f $cmd;
+
+ while( my ($k,$v) = each %args ) {
+ next unless $v;
+ $cmd .= " --$k '$v'";
+ }
+ $cmd .= ' 2>&1';
+
+ require IPC::Open2;
+ my ($child_out, $child_in);
+ my $pid = IPC::Open2::open2($child_out, $child_in, $cmd);
+ close $child_in;
+
+ my $result = do { local $/; <$child_out> };
+ close $child_out;
+ waitpid $pid, 0;
+
+ DBIx::SearchBuilder::Record::Cachable->FlushCache
+ if $args{'resolve'};
+
+ return ($?, $result);
+}
+
+{
+ my ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+}
+
+{
+ my $group = load_or_create_group('test', Members => [] );
+ ok $group, "loaded or created a group";
+
+ my ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+}
+
+# G1 -> G2
+{
+ my $group1 = load_or_create_group( 'test1', Members => [] );
+ ok $group1, "loaded or created a group";
+
+ my $group2 = load_or_create_group( 'test2', Members => [ $group1 ]);
+ ok $group2, "loaded or created a group";
+
+ ok $group2->HasMember( $group1->id ), "has member";
+ ok $group2->HasMemberRecursively( $group1->id ), "has member";
+
+ my ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+
+ $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
+ DBIx::SearchBuilder::Record::Cachable->FlushCache;
+ ok !$group2->HasMemberRecursively( $group1->id ), "has no member, broken DB";
+
+ ($ecode, $res) = run_validator(resolve => 1);
+
+ ok $group2->HasMember( $group1->id ), "has member";
+ ok $group2->HasMemberRecursively( $group1->id ), "has member";
+
+ ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+}
+
+# G1 <- G2 <- G3 <- G4 <- G5
+{
+ my @groups;
+ for (1..5) {
+ my $child = @groups? $groups[-1]: undef;
+
+ my $group = load_or_create_group( 'test'. $_, Members => [ $child? ($child): () ] );
+ ok $group, "loaded or created a group";
+
+ ok $group->HasMember( $child->id ), "has member"
+ if $child;
+ ok $group->HasMemberRecursively( $_->id ), "has member"
+ foreach @groups;
+
+ push @groups, $group;
+ }
+
+ my ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+
+ $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
+ DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+ ok !$groups[1]->HasMemberRecursively( $groups[0]->id ), "has no member, broken DB";
+
+ ($ecode, $res) = run_validator(resolve => 1);
+
+ for ( my $i = 1; $i < @groups; $i++ ) {
+ ok $groups[$i]->HasMember( $groups[$i-1]->id ), "has member";
+ ok $groups[$i]->HasMemberRecursively( $groups[$_]->id ), "has member"
+ foreach 0..$i-1;
+ }
+
+ ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+}
+
+# G1 <- (G2, G3, G4, G5)
+{
+ my @groups;
+ for (2..5) {
+ my $group = load_or_create_group( 'test'. $_, Members => [] );
+ ok $group, "loaded or created a group";
+ push @groups, $group;
+ }
+
+ my $parent = load_or_create_group( 'test1', Members => \@groups );
+ ok $parent, "loaded or created a group";
+
+ my ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+}
+
+# G1 <- (G2, G3, G4) <- G5
+{
+ my $gchild = load_or_create_group( 'test5', Members => [] );
+ ok $gchild, "loaded or created a group";
+
+ my @groups;
+ for (2..4) {
+ my $group = load_or_create_group( 'test'. $_, Members => [ $gchild ] );
+ ok $group, "loaded or created a group";
+ push @groups, $group;
+ }
+
+ my $parent = load_or_create_group( 'test1', Members => \@groups );
+ ok $parent, "loaded or created a group";
+
+ my ($ecode, $res) = run_validator();
+ is $res, '', 'empty result';
+}
+
diff --git a/rt/t/web/attachments.t b/rt/t/web/attachments.t
new file mode 100644
index 0000000..e827b2f
--- /dev/null
+++ b/rt/t/web/attachments.t
@@ -0,0 +1,47 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 14;
+
+use constant LogoFile => $RT::MasonComponentRoot .'/NoAuth/images/bplogo.gif';
+use constant FaviconFile => $RT::MasonComponentRoot .'/NoAuth/images/favicon.png';
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in';
+
+my $queue = RT::Queue->new($RT::Nobody);
+my $qid = $queue->Load('General');
+ok( $qid, "Loaded General queue" );
+
+$m->form_name('CreateTicketInQueue');
+$m->field('Queue', $qid);
+$m->submit;
+is($m->status, 200, "request successful");
+$m->content_like(qr/Create a new ticket/, 'ticket create page');
+
+$m->form_name('TicketCreate');
+$m->field('Subject', 'Attachments test');
+$m->field('Attach', LogoFile);
+$m->field('Content', 'Some content');
+$m->submit;
+is($m->status, 200, "request successful");
+
+$m->content_like(qr/Attachments test/, 'we have subject on the page');
+$m->content_like(qr/Some content/, 'and content');
+$m->content_like(qr/Download bplogo\.gif/, 'page has file name');
+
+$m->follow_link_ok({text => 'Reply'}, "reply to the ticket");
+$m->form_name('TicketUpdate');
+$m->field('Attach', LogoFile);
+$m->click('AddMoreAttach');
+is($m->status, 200, "request successful");
+
+$m->form_name('TicketUpdate');
+$m->field('Attach', FaviconFile);
+$m->field('UpdateContent', 'Message');
+$m->click('SubmitTicket');
+is($m->status, 200, "request successful");
+
+$m->content_like(qr/Download bplogo\.gif/, 'page has file name');
+$m->content_like(qr/Download favicon\.png/, 'page has file name');
+
diff --git a/rt/t/web/basic.t b/rt/t/web/basic.t
new file mode 100644
index 0000000..bc4d655
--- /dev/null
+++ b/rt/t/web/basic.t
@@ -0,0 +1,146 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Encode;
+
+use RT::Test tests => 24;
+$RT::Test::SKIP_REQUEST_WORK_AROUND = 1;
+
+my ($baseurl, $agent) = RT::Test->started_ok;
+
+my $url = $agent->rt_base_url;
+diag $url if $ENV{TEST_VERBOSE};
+
+# get the top page
+{
+ $agent->get($url);
+ is ($agent->{'status'}, 200, "Loaded a page");
+}
+
+# test a login
+{
+ ok($agent->{form}->find_input('user'));
+ ok($agent->{form}->find_input('pass'));
+
+ ok($agent->{'content'} =~ /username:/i);
+ $agent->field( 'user' => 'root' );
+ $agent->field( 'pass' => 'password' );
+
+ # the field isn't named, so we have to click link 0
+ $agent->click(0);
+ is( $agent->{'status'}, 200, "Fetched the page ok");
+ ok( $agent->{'content'} =~ /Logout/i, "Found a logout link");
+}
+
+{
+ $agent->get($url."Ticket/Create.html?Queue=1");
+ is ($agent->{'status'}, 200, "Loaded Create.html");
+ $agent->form_number(3);
+ my $string = Encode::decode_utf8("I18N Web Testing æøå");
+ $agent->field('Subject' => "Ticket with utf8 body");
+ $agent->field('Content' => $string);
+ ok($agent->submit, "Created new ticket with $string as Content");
+ $agent->content_like( qr{$string} , "Found the content");
+ ok($agent->{redirected_uri}, "Did redirection");
+
+ {
+ my $ticket = RT::Test->last_ticket;
+ my $content = $ticket->Transactions->First->Content;
+ like(
+ $content, qr{$string},
+ 'content is there, API check'
+ );
+ }
+}
+
+{
+ $agent->get($url."Ticket/Create.html?Queue=1");
+ is ($agent->{'status'}, 200, "Loaded Create.html");
+ $agent->form_number(3);
+
+ my $string = Encode::decode_utf8("I18N Web Testing æøå");
+ $agent->field('Subject' => $string);
+ $agent->field('Content' => "Ticket with utf8 subject");
+ ok($agent->submit, "Created new ticket with $string as Content");
+ $agent->content_like( qr{$string} , "Found the content");
+ ok($agent->{redirected_uri}, "Did redirection");
+
+ {
+ my $ticket = RT::Test->last_ticket;
+ is(
+ $ticket->Subject, $string,
+ 'subject is correct, API check'
+ );
+ }
+}
+
+# Update time worked in hours
+{
+ $agent->follow_link( text_regex => qr/Basics/ );
+ $agent->submit_form( form_number => 3,
+ fields => { TimeWorked => 5, 'TimeWorked-TimeUnits' => "hours" }
+ );
+
+ like ($agent->{'content'}, qr/to &#39;300&#39;/, "5 hours is 300 minutes");
+}
+
+# {{{ test an image
+
+TODO: {
+ todo_skip("Need to handle mason trying to compile images",1);
+$agent->get( $url."NoAuth/images/test.png" );
+my $file = RT::Test::get_relocatable_file(
+ File::Spec->catfile(
+ qw(.. .. share html NoAuth images test.png)
+ )
+);
+is(
+ length($agent->content),
+ -s $file,
+ "got a file of the correct size ($file)",
+);
+}
+# }}}
+
+# {{{ Query Builder tests
+#
+# XXX: hey-ho, we have these tests in t/web/query-builder
+# TODO: move everything about QB there
+
+my $response = $agent->get($url."Search/Build.html");
+ok( $response->is_success, "Fetched " . $url."Search/Build.html" );
+
+# Parsing TicketSQL
+#
+# Adding items
+
+# set the first value
+ok($agent->form_name('BuildQuery'));
+$agent->field("AttachmentField", "Subject");
+$agent->field("AttachmentOp", "LIKE");
+$agent->field("ValueOfAttachment", "aaa");
+$agent->submit("AddClause");
+
+# set the next value
+ok($agent->form_name('BuildQuery'));
+$agent->field("AttachmentField", "Subject");
+$agent->field("AttachmentOp", "LIKE");
+$agent->field("ValueOfAttachment", "bbb");
+$agent->submit("AddClause");
+
+ok($agent->form_name('BuildQuery'));
+
+# get the query
+my $query = $agent->current_form->find_input("Query")->value;
+# strip whitespace from ends
+$query =~ s/^\s*//g;
+$query =~ s/\s*$//g;
+
+# collapse other whitespace
+$query =~ s/\s+/ /g;
+
+is ($query, "Subject LIKE 'aaa' AND Subject LIKE 'bbb'");
+
+
+1;
diff --git a/rt/t/web/cf_access.t b/rt/t/web/cf_access.t
new file mode 100644
index 0000000..1022c6d
--- /dev/null
+++ b/rt/t/web/cf_access.t
@@ -0,0 +1,191 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 26;
+$RT::Test::SKIP_REQUEST_WORK_AROUND = 1;
+
+my ($baseurl, $m) = RT::Test->started_ok;
+
+use constant ImageFile => $RT::MasonComponentRoot .'/NoAuth/images/bplogo.gif';
+use constant ImageFileContent => RT::Test->file_content(ImageFile);
+
+ok $m->login, 'logged in';
+
+diag "Create a CF" if $ENV{'TEST_VERBOSE'};
+{
+ $m->follow_link( text => 'Configuration' );
+ $m->title_is(q/RT Administration/, 'admin screen');
+ $m->follow_link( text => 'Custom Fields' );
+ $m->title_is(q/Select a Custom Field/, 'admin-cf screen');
+ $m->follow_link( text => 'Create' );
+ $m->submit_form(
+ form_name => "ModifyCustomField",
+ fields => {
+ TypeComposite => 'Image-0',
+ LookupType => 'RT::Queue-RT::Ticket',
+ Name => 'img',
+ Description => 'img',
+ },
+ );
+}
+
+diag "apply the CF to General queue" if $ENV{'TEST_VERBOSE'};
+my ( $cf, $cfid, $tid );
+{
+ $m->title_is(q/Created CustomField img/, 'admin-cf created');
+ $m->follow_link( text => 'Queues' );
+ $m->title_is(q/Admin queues/, 'admin-queues screen');
+ $m->follow_link( text => 'General' );
+ $m->title_is(q/Editing Configuration for queue General/, 'admin-queue: general');
+ $m->follow_link( text => 'Ticket Custom Fields' );
+
+ $m->title_is(q/Edit Custom Fields for General/, 'admin-queue: general cfid');
+ $m->form_name('EditCustomFields');
+
+ # Sort by numeric IDs in names
+ my @names = map { $_->[1] }
+ sort { $a->[0] <=> $b->[0] }
+ map { /Object-1-CF-(\d+)/ ? [ $1 => $_ ] : () }
+ grep defined, map $_->name, $m->current_form->inputs;
+ $cf = pop(@names);
+ $cf =~ /(\d+)$/ or die "Hey this is impossible dude";
+ $cfid = $1;
+ $m->field( $cf => 1 ); # Associate the new CF with this queue
+ $m->field( $_ => undef ) for @names; # ...and not any other. ;-)
+ $m->submit;
+
+ $m->content_like( qr/Object created/, 'TCF added to the queue' );
+}
+
+my $tester = RT::Test->load_or_create_user( Name => 'tester', Password => '123456' );
+RT::Test->set_rights(
+ { Principal => $tester->PrincipalObj,
+ Right => [qw(SeeQueue ShowTicket CreateTicket)],
+ },
+);
+ok $m->login( $tester->Name, 123456), 'logged in';
+
+diag "check that we have no the CF on the create"
+ ." ticket page when user has no SeeCustomField right"
+ if $ENV{'TEST_VERBOSE'};
+{
+ $m->submit_form(
+ form_name => "CreateTicketInQueue",
+ fields => { Queue => 'General' },
+ );
+ $m->content_unlike(qr/Upload multiple images/, 'has no upload image field');
+
+ my $form = $m->form_name("TicketCreate");
+ my $upload_field = "Object-RT::Ticket--CustomField-$cfid-Upload";
+ ok !$form->find_input( $upload_field ), 'no form field on the page';
+
+ $m->submit_form(
+ form_name => "TicketCreate",
+ fields => { Subject => 'test' },
+ );
+ $m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully");
+
+ $m->content_unlike(qr/img:/, 'has no img field on the page');
+ $m->follow_link( text => 'Custom Fields');
+ $m->content_unlike(qr/Upload multiple images/, 'has no upload image field');
+}
+
+RT::Test->set_rights(
+ { Principal => $tester->PrincipalObj,
+ Right => [qw(SeeQueue ShowTicket CreateTicket SeeCustomField)],
+ },
+);
+
+diag "check that we have no the CF on the create"
+ ." ticket page when user has no ModifyCustomField right"
+ if $ENV{'TEST_VERBOSE'};
+{
+ $m->submit_form(
+ form_name => "CreateTicketInQueue",
+ fields => { Queue => 'General' },
+ );
+ $m->content_unlike(qr/Upload multiple images/, 'has no upload image field');
+
+ my $form = $m->form_name("TicketCreate");
+ my $upload_field = "Object-RT::Ticket--CustomField-$cfid-Upload";
+ ok !$form->find_input( $upload_field ), 'no form field on the page';
+
+ $m->submit_form(
+ form_name => "TicketCreate",
+ fields => { Subject => 'test' },
+ );
+ $tid = $1 if $m->content =~ /Ticket (\d+) created/i;
+ ok $tid, "a ticket is created succesfully";
+
+ $m->follow_link( text => 'Custom Fields' );
+ $m->content_unlike(qr/Upload multiple images/, 'has no upload image field');
+ $form = $m->form_number(3);
+ $upload_field = "Object-RT::Ticket-$tid-CustomField-$cfid-Upload";
+ ok !$form->find_input( $upload_field ), 'no form field on the page';
+}
+
+RT::Test->set_rights(
+ { Principal => $tester->PrincipalObj,
+ Right => [qw(SeeQueue ShowTicket CreateTicket SeeCustomField ModifyCustomField)],
+ },
+);
+
+diag "create a ticket with an image" if $ENV{'TEST_VERBOSE'};
+{
+ $m->submit_form(
+ form_name => "CreateTicketInQueue",
+ fields => { Queue => 'General' },
+ );
+ $m->content_like(qr/Upload multiple images/, 'has a upload image field');
+
+ $cf =~ /(\d+)$/ or die "Hey this is impossible dude";
+ my $upload_field = "Object-RT::Ticket--CustomField-$1-Upload";
+
+ $m->submit_form(
+ form_name => "TicketCreate",
+ fields => {
+ $upload_field => ImageFile,
+ Subject => 'testing img cf creation',
+ },
+ );
+
+ $m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully");
+
+ $tid = $1 if $m->content =~ /Ticket (\d+) created/;
+
+ $m->title_like(qr/testing img cf creation/, "its title is the Subject");
+
+ $m->follow_link( text => 'bplogo.gif' );
+ $m->content_is(ImageFileContent, "it links to the uploaded image");
+}
+
+$m->get( $m->rt_base_url );
+$m->follow_link( text => 'Tickets' );
+$m->follow_link( text => 'New Query' );
+
+$m->title_is(q/Query Builder/, 'Query building');
+$m->submit_form(
+ form_name => "BuildQuery",
+ fields => {
+ idOp => '=',
+ ValueOfid => $tid,
+ ValueOfQueue => 'General',
+ },
+ button => 'AddClause',
+);
+
+$m->form_name('BuildQuery');
+
+my $col = ($m->current_form->find_input('SelectDisplayColumns'))[-1];
+$col->value( ($col->possible_values)[-1] );
+
+$m->click('AddCol');
+
+$m->form_name('BuildQuery');
+$m->click('DoSearch');
+
+$m->follow_link( text_regex => qr/bplogo\.gif/ );
+$m->content_is(ImageFileContent, "it links to the uploaded image");
+
+__END__
+[FC] Bulk Update does not have custom fields.
diff --git a/rt/t/web/cf_onqueue.t b/rt/t/web/cf_onqueue.t
new file mode 100644
index 0000000..dcd5852
--- /dev/null
+++ b/rt/t/web/cf_onqueue.t
@@ -0,0 +1,66 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 14;
+my ($baseurl, $m) = RT::Test->started_ok;
+
+ok $m->login, 'logged in';
+
+diag "Create a queue CF" if $ENV{'TEST_VERBOSE'};
+{
+ $m->follow_link( text => 'Configuration' );
+ $m->title_is(q/RT Administration/, 'admin screen');
+ $m->follow_link( text => 'Custom Fields' );
+ $m->title_is(q/Select a Custom Field/, 'admin-cf screen');
+ $m->follow_link( text => 'Create' );
+ $m->submit_form(
+ form_name => "ModifyCustomField",
+ fields => {
+ TypeComposite => 'Freeform-1',
+ LookupType => 'RT::Queue',
+ Name => 'QueueCFTest',
+ Description => 'QueueCFTest',
+ },
+ );
+ $m->content_like( qr/Object created/, 'CF QueueCFTest created' );
+}
+
+diag "Apply the new CF globally" if $ENV{'TEST_VERBOSE'};
+{
+ $m->follow_link( text => 'Global' );
+ $m->title_is(q!Admin/Global configuration!, 'global configuration screen');
+ $m->follow_link( url_regex => qr!Admin/Global/CustomFields/index! );
+ $m->title_is(q/Global custom field configuration/, 'global custom field configuration screen');
+ $m->follow_link( url => 'Queues.html' );
+ $m->title_is(q/Edit Custom Fields for all queues/, 'global custom field for all queues configuration screen');
+ $m->content_like( qr/QueueCFTest/, 'CF QueueCFTest displayed on page' );
+ $m->submit_form(
+ form_name => "EditCustomFields",
+ fields => {
+ 'Object--CF-1' => '1',
+ },
+ );
+ $m->content_like( qr/Object created/, 'CF QueueCFTest enabled globally' );
+}
+
+diag "Edit the CF value for default queue" if $ENV{'TEST_VERBOSE'};
+{
+ $m->follow_link( url => '/Admin/Queues/' );
+ $m->title_is(q/Admin queues/, 'queues configuration screen');
+ $m->follow_link( text => "1" );
+ $m->title_is(q/Editing Configuration for queue General/, 'default queue configuration screen');
+ $m->content_like( qr/QueueCFTest/, 'CF QueueCFTest displayed on default queue' );
+ $m->submit_form(
+ form_number => 3,
+ # The following doesn't want to works :(
+ #with_fields => { 'Object-RT::Queue-1-CustomField-1-Value' },
+ fields => {
+ 'Object-RT::Queue-1-CustomField-1-Value' => 'QueueCFTest content',
+ },
+ );
+ $m->content_like( qr/QueueCFTest QueueCFTest content added/, 'Content filed in CF QueueCFTest for default queue' );
+
+}
+
+
+__END__
diff --git a/rt/t/web/cf_select_one.t b/rt/t/web/cf_select_one.t
new file mode 100644
index 0000000..e009af7
--- /dev/null
+++ b/rt/t/web/cf_select_one.t
@@ -0,0 +1,159 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use RT::Test tests => 41;
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in as root';
+
+my $cf_name = 'test select one value';
+
+my $cfid;
+diag "Create a CF" if $ENV{'TEST_VERBOSE'};
+{
+ $m->follow_link( text => 'Configuration' );
+ $m->title_is(q/RT Administration/, 'admin screen');
+ $m->follow_link( text => 'Custom Fields' );
+ $m->title_is(q/Select a Custom Field/, 'admin-cf screen');
+ $m->follow_link( text => 'Create' );
+ $m->submit_form(
+ form_name => "ModifyCustomField",
+ fields => {
+ Name => $cf_name,
+ TypeComposite => 'Select-1',
+ LookupType => 'RT::Queue-RT::Ticket',
+ },
+ );
+ $m->content_like( qr/Object created/, 'created CF sucessfully' );
+ $cfid = $m->form_name('ModifyCustomField')->value('id');
+ ok $cfid, "found id of the CF in the form, it's #$cfid";
+}
+
+diag "add 'qwe', 'ASD' and '0' as values to the CF" if $ENV{'TEST_VERBOSE'};
+{
+ foreach my $value(qw(qwe ASD 0)) {
+ $m->submit_form(
+ form_name => "ModifyCustomField",
+ fields => {
+ "CustomField-". $cfid ."-Value-new-Name" => $value,
+ },
+ button => 'Update',
+ );
+ $m->content_like( qr/Object created/, 'added a value to the CF' ); # or diag $m->content;
+ }
+}
+
+my $queue = RT::Test->load_or_create_queue( Name => 'General' );
+ok $queue && $queue->id, 'loaded or created queue';
+
+diag "apply the CF to General queue" if $ENV{'TEST_VERBOSE'};
+{
+ $m->follow_link( text => 'Queues' );
+ $m->title_is(q/Admin queues/, 'admin-queues screen');
+ $m->follow_link( text => 'General' );
+ $m->title_is(q/Editing Configuration for queue General/, 'admin-queue: general');
+ $m->follow_link( text => 'Ticket Custom Fields' );
+ $m->title_is(q/Edit Custom Fields for General/, 'admin-queue: general cfid');
+
+ $m->form_name('EditCustomFields');
+ $m->field( "Object-". $queue->id ."-CF-$cfid" => 1 );
+ $m->submit;
+
+ $m->content_like( qr/Object created/, 'TCF added to the queue' );
+}
+
+my $tid;
+diag "create a ticket using API with 'asd'(not 'ASD') as value of the CF"
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ my ($txnid, $msg);
+ ($tid, $txnid, $msg) = $ticket->Create(
+ Subject => 'test',
+ Queue => $queue->id,
+ "CustomField-$cfid" => 'asd',
+ );
+ ok $tid, "created ticket";
+ diag $msg if $msg && $ENV{'TEST_VERBOSE'};
+
+ # we use lc as we really don't care about case
+ # so if later we'll add canonicalization of value
+ # test should work
+ is lc $ticket->FirstCustomFieldValue( $cf_name ),
+ 'asd', 'assigned value of the CF';
+}
+
+diag "check that values of the CF are case insensetive(asd vs. ASD)"
+ if $ENV{'TEST_VERBOSE'};
+{
+ ok $m->goto_ticket( $tid ), "opened ticket's page";
+ $m->follow_link( text => 'Custom Fields' );
+ $m->title_like(qr/Modify ticket/i, 'modify ticket');
+ $m->content_like(qr/\Q$cf_name/, 'CF on the page');
+
+ my $value = $m->form_number(3)->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values");
+ is lc $value, 'asd', 'correct value is selected';
+ $m->submit;
+ $m->content_unlike(qr/\Q$cf_name\E.*?changed/mi, 'field is not changed');
+
+ $value = $m->form_number(3)->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values");
+ is lc $value, 'asd', 'the same value is still selected';
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $tid );
+ ok $ticket->id, 'loaded the ticket';
+ is lc $ticket->FirstCustomFieldValue( $cf_name ),
+ 'asd', 'value is still the same';
+}
+
+diag "check that 0 is ok value of the CF"
+ if $ENV{'TEST_VERBOSE'};
+{
+ ok $m->goto_ticket( $tid ), "opened ticket's page";
+ $m->follow_link( text => 'Custom Fields' );
+ $m->title_like(qr/Modify ticket/i, 'modify ticket');
+ $m->content_like(qr/\Q$cf_name/, 'CF on the page');
+
+ my $value = $m->form_number(3)->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values");
+ is lc $value, 'asd', 'correct value is selected';
+ $m->select("Object-RT::Ticket-$tid-CustomField-$cfid-Values" => 0 );
+ $m->submit;
+ $m->content_like(qr/\Q$cf_name\E.*?changed/mi, 'field is changed');
+ $m->content_unlike(qr/0 is no longer a value for custom field/mi, 'no bad message in results');
+
+ $value = $m->form_number(3)->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values");
+ is lc $value, '0', 'new value is selected';
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $tid );
+ ok $ticket->id, 'loaded the ticket';
+ is lc $ticket->FirstCustomFieldValue( $cf_name ),
+ '0', 'API returns correct value';
+}
+
+diag "check that we can set empty value when the current is 0"
+ if $ENV{'TEST_VERBOSE'};
+{
+ ok $m->goto_ticket( $tid ), "opened ticket's page";
+ $m->follow_link( text => 'Custom Fields' );
+ $m->title_like(qr/Modify ticket/i, 'modify ticket');
+ $m->content_like(qr/\Q$cf_name/, 'CF on the page');
+
+ my $value = $m->form_number(3)->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values");
+ is lc $value, '0', 'correct value is selected';
+ $m->select("Object-RT::Ticket-$tid-CustomField-$cfid-Values" => '' );
+ $m->submit;
+ $m->content_like(qr/0 is no longer a value for custom field/mi, '0 is no longer a value');
+
+ $value = $m->form_number(3)->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values");
+ is $value, '', '(no value) is selected';
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $tid );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->FirstCustomFieldValue( $cf_name ),
+ undef, 'API returns correct value';
+}
+
diff --git a/rt/t/web/command_line.t b/rt/t/web/command_line.t
new file mode 100644
index 0000000..3fc279b
--- /dev/null
+++ b/rt/t/web/command_line.t
@@ -0,0 +1,544 @@
+#!/usr/bin/perl -w
+
+use strict;
+use File::Spec ();
+use Test::Expect;
+use RT::Test tests => 295;
+my ($baseurl, $m) = RT::Test->started_ok;
+
+use RT::User;
+use RT::Queue;
+
+my $rt_tool_path = "$RT::BinPath/rt";
+
+# {{{ test configuration options
+
+# config directives:
+# (in $CWD/.rtrc)
+# - server <URL> URL to RT server.
+# - user <username> RT username.
+# - passwd <passwd> RT user's password.
+# - query <RT Query> Default RT Query for list action
+# - orderby <order> Default RT order for list action
+#
+# Blank and #-commented lines are ignored.
+
+# environment variables
+# The following environment variables override any corresponding
+# values defined in configuration files:
+#
+# - RTUSER
+$ENV{'RTUSER'} = 'root';
+# - RTPASSWD
+$ENV{'RTPASSWD'} = 'password';
+# - RTSERVER
+$RT::Logger->debug("Connecting to server at ".RT->Config->Get('WebBaseURL'));
+$ENV{'RTSERVER'} =RT->Config->Get('WebBaseURL') ;
+# - RTDEBUG Numeric debug level. (Set to 3 for full logs.)
+$ENV{'RTDEBUG'} = '1';
+# - RTCONFIG Specifies a name other than ".rtrc" for the
+# configuration file.
+#
+# - RTQUERY Default RT Query for rt list
+# - RTORDERBY Default order for rt list
+
+
+# }}}
+
+# {{{ test ticket manipulation
+
+# create a ticket
+expect_run(
+ command => "$rt_tool_path shell",
+ prompt => 'rt> ',
+ quit => 'quit',
+);
+expect_send(q{create -t ticket set subject='new ticket' add cc=foo@example.com}, "Creating a ticket...");
+expect_like(qr/Ticket \d+ created/, "Created the ticket");
+expect_handle->before() =~ /Ticket (\d+) created/;
+my $ticket_id = $1;
+ok($ticket_id, "Got ticket id=$ticket_id");
+expect_send(q{create -t ticket set subject='new ticket'}, "Creating a ticket as just a subject...");
+expect_like(qr/Ticket \d+ created/, "Created the ticket");
+
+# make sure we can request things as 'rt foo'
+expect_send(q{rt create -t ticket set subject='rt ticket'}, "Creating a ticket with 'rt create'...");
+expect_like(qr/Ticket \d+ created/, "Created the ticket");
+
+# {{{ test queue manipulation
+
+# creating queues
+expect_send("create -t queue set Name='NewQueue$$'", 'Creating a queue...');
+expect_like(qr/Queue \d+ created/, 'Created the queue');
+expect_handle->before() =~ /Queue (\d+) created/;
+my $queue_id = $1;
+ok($queue_id, "Got queue id=$queue_id");
+# updating users
+expect_send("edit queue/$queue_id set Name='EditedQueue$$'", 'Editing the queue');
+expect_like(qr/Queue $queue_id updated/, 'Edited the queue');
+expect_send("show queue/$queue_id", 'Showing the queue...');
+expect_like(qr/id: queue\/$queue_id/, 'Saw the queue');
+expect_like(qr/Name: EditedQueue$$/, 'Saw the modification');
+TODO: {
+ todo_skip "Listing non-ticket items doesn't work", 2;
+ expect_send("list -t queue 'id > 0'", 'Listing the queues...');
+ expect_like(qr/$queue_id: EditedQueue$$/, 'Found the queue');
+}
+
+# }}}
+
+
+# Set up a custom field for editing tests
+my $cf = RT::CustomField->new($RT::SystemUser);
+my ($val,$msg) = $cf->Create(Name => 'MyCF'.$$, Type => 'FreeformSingle', Queue => $queue_id);
+ok($val,$msg);
+
+my $othercf = RT::CustomField->new($RT::SystemUser);
+($val,$msg) = $othercf->Create(Name => 'My CF'.$$, Type => 'FreeformSingle', Queue => $queue_id);
+ok($val,$msg);
+
+my $multiple_cf = RT::CustomField->new($RT::SystemUser);
+($val,$msg) = $multiple_cf->Create(Name => 'MultipleCF'.$$, Type =>
+ 'FreeformMultiple', Queue => $queue_id);
+ok($val,$msg);
+
+
+# add a comment to ticket
+ expect_send("comment -m 'comment-$$' $ticket_id", "Adding a comment...");
+ expect_like(qr/Message recorded/, "Added the comment");
+ ### should test to make sure it actually got added
+ # add correspondance to ticket (?)
+ expect_send("correspond -m 'correspond-$$' $ticket_id", "Adding correspondence...");
+ expect_like(qr/Message recorded/, "Added the correspondence");
+ ### should test to make sure it actually got added
+
+ my $test_email = RT::Test::get_relocatable_file('lorem-ipsum',
+ (File::Spec->updir(), 'data', 'emails'));
+ # add attachments to a ticket
+ # text attachment
+ check_attachment($test_email);
+ # binary attachment
+ check_attachment($RT::MasonComponentRoot.'/NoAuth/images/bplogo.gif');
+
+# change a ticket's Owner
+expect_send("edit ticket/$ticket_id set owner=root", 'Changing owner...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed owner');
+expect_send("show ticket/$ticket_id -f owner", 'Verifying change...');
+expect_like(qr/Owner: root/, 'Verified change');
+# change a ticket's Requestor
+expect_send("edit ticket/$ticket_id set requestors=foo\@example.com", 'Changing Requestor...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed Requestor');
+expect_send("show ticket/$ticket_id -f requestors", 'Verifying change...');
+expect_like(qr/Requestors: foo\@example.com/, 'Verified change');
+# change a ticket's Cc
+expect_send("edit ticket/$ticket_id set cc=bar\@example.com", 'Changing Cc...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed Cc');
+expect_send("show ticket/$ticket_id -f cc", 'Verifying change...');
+expect_like(qr/Cc: bar\@example.com/, 'Verified change');
+# change a ticket's priority
+expect_send("edit ticket/$ticket_id set priority=10", 'Changing priority...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed priority');
+expect_send("show ticket/$ticket_id -f priority", 'Verifying change...');
+expect_like(qr/Priority: 10/, 'Verified change');
+# move a ticket to a different queue
+expect_send("edit ticket/$ticket_id set queue=EditedQueue$$", 'Changing queue...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed queue');
+expect_send("show ticket/$ticket_id -f queue", 'Verifying change...');
+expect_like(qr/Queue: EditedQueue$$/, 'Verified change');
+# cannot move ticket to a nonexistent queue
+expect_send("edit ticket/$ticket_id set queue=nonexistent-$$", 'Changing to nonexistent queue...');
+expect_like(qr/queue does not exist/i, 'Errored out');
+expect_send("show ticket/$ticket_id -f queue", 'Verifying lack of change...');
+expect_like(qr/Queue: EditedQueue$$/, 'Verified lack of change');
+
+# Test reading and setting custom fields without spaces
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking initial value');
+expect_like(qr/CF\.{myCF$$}:/i, 'Verified initial empty value (CF-x syntax)');
+expect_send("show ticket/$ticket_id -f CF.{myCF$$}", 'Checking initial value');
+expect_like(qr/CF\.{myCF$$}:/i, 'Verified initial empty value (CF.{x} syntax)');
+
+expect_send("edit ticket/$ticket_id set 'CF-myCF$$=VALUE' ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
+expect_like(qr/CF\.{myCF$$}: VALUE/i, 'Verified change');
+# Test setting 0 as value of the custom field
+expect_send("edit ticket/$ticket_id set 'CF-myCF$$=0' ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
+expect_like(qr/CF\.{myCF$$}: 0/i, 'Verified change');
+
+expect_send("edit ticket/$ticket_id set 'CF.{myCF$$}=VALUE' ",'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f CF.{myCF$$}", 'Checking new value');
+expect_like(qr/CF\.{myCF$$}: VALUE/i, 'Verified change');
+# Test setting 0 as value of the custom field
+expect_send("edit ticket/$ticket_id set 'CF.{myCF$$}=0' ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f CF.{myCF$$}", 'Checking new value');
+expect_like(qr/CF\.{myCF$$}: 0/i, 'Verified change');
+
+# Test reading and setting custom fields with spaces
+expect_send("show ticket/$ticket_id -f 'CF-my CF$$'", 'Checking initial value');
+expect_like(qr/CF\.{my CF$$}:/i, 'Verified change');
+expect_send("edit ticket/$ticket_id set 'CF-my CF$$=VALUE' ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f 'CF-my CF$$'", 'Checking new value');
+expect_like(qr/CF\.{my CF$$}: VALUE/i, 'Verified change');
+expect_send("ls -l 'id = $ticket_id' -f 'CF-my CF$$'", 'Checking new value');
+expect_like(qr/CF\.{my CF$$}: VALUE/i, 'Verified change');
+
+expect_send("show ticket/$ticket_id -f 'CF.{my CF$$}'", 'Checking initial value');
+expect_like(qr/CF\.{my CF$$}: VALUE/i, 'Verified change');
+expect_send("edit ticket/$ticket_id set 'CF.{my CF$$}=NEW' ", 'Changing CF...');
+expect_send("show ticket/$ticket_id -f 'CF.{my CF$$}'", 'Checking new value');
+expect_like(qr/CF\.{my CF$$}: NEW/i, 'Verified change');
+expect_send("ls -l 'id = $ticket_id' -f 'CF.{my CF$$}'", 'Checking new value');
+expect_like(qr/CF\.{my CF$$}: NEW/i, 'Verified change');
+
+# Test reading and setting single value custom field with commas or quotes
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking initial value');
+expect_like(qr/CF\.{myCF$$}:/i, 'Verified change');
+expect_send("edit ticket/$ticket_id set CF-myCF$$=1,2,3", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
+expect_like(qr/CF\.{myCF$$}: 1,2,3/i, 'Verified change');
+expect_send("edit ticket/$ticket_id set CF-myCF$$=\"1's,2,3\"", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
+expect_like(qr/CF\.{myCF$$}: 1's,2,3/i, 'Verified change');
+
+# Test reading and setting custom fields with multiple values
+expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking initial value');
+expect_like(qr/CF\.{MultipleCF$$}:/i, 'Verified multiple cf change');
+expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=1,2,3 ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: 1,\s*2,\s*3/i, 'Verified multiple cf change');
+expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=a,b,c ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: a,\s*b,\s*c/i, 'Verified change');
+expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=a", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'del multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: b,\s*c/i, 'Verified multiple cf change');
+expect_send("edit ticket/$ticket_id add CF.{MultipleCF$$}=o", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: b,\s*c,\s*o/i, 'Verified multiple cf change');
+
+expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=\"'a,b,c'\" ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=a", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+
+expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=q{a,b,c}", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=a", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=\"'a,b,c'\"", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: \s*$/i, 'Verified change');
+
+expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=\"q{1,2's,3}\"", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+expect_like(qr/CF\.{MultipleCF$$}: '1,2\\'s,3'/i, 'Verified change');
+
+# ...
+# change a ticket's ...[other properties]...
+# ...
+# stall a ticket
+expect_send("edit ticket/$ticket_id set status=stalled", 'Changing status to "stalled"...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed status');
+expect_send("show ticket/$ticket_id -f status", 'Verifying change...');
+expect_like(qr/Status: stalled/, 'Verified change');
+# resolve a ticket
+expect_send("edit ticket/$ticket_id set status=resolved", 'Changing status to "resolved"...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed status');
+expect_send("show ticket/$ticket_id -f status", 'Verifying change...');
+expect_like(qr/Status: resolved/, 'Verified change');
+# try to set status to an illegal value
+expect_send("edit ticket/$ticket_id set status=quux", 'Changing status to an illegal value...');
+expect_like(qr/illegal value/i, 'Errored out');
+expect_send("show ticket/$ticket_id -f status", 'Verifying lack of change...');
+expect_like(qr/Status: resolved/, 'Verified change');
+
+# }}}
+
+# {{{ display
+
+# show ticket list
+expect_send("ls -s -t ticket -o +id \"Status='resolved'\"", 'Listing resolved tickets...');
+expect_like(qr/$ticket_id: new ticket/, 'Found our ticket');
+# show ticket list verbosely
+expect_send("ls -l -t ticket -o +id \"Status='resolved'\"", 'Listing resolved tickets verbosely...');
+expect_like(qr/id: ticket\/$ticket_id/, 'Found our ticket');
+# show ticket
+expect_send("show -s -t ticket $ticket_id", 'Showing our ticket...');
+expect_like(qr/id: ticket\/$ticket_id/, 'Got our ticket');
+# show ticket history
+expect_send("show ticket/$ticket_id/history", 'Showing our ticket\'s history...');
+expect_like(qr/Ticket created by root/, 'Got our history');
+
+expect_send("show -v ticket/$ticket_id/history", 'Showing our ticket\'s history verbosely...');
+TODO: {
+ local $TODO = "Cannot show verbose ticket history right now";
+ # show ticket history verbosely
+ expect_like(qr/Ticket created by root/, 'Got our history');
+}
+# get attachments from a ticket
+expect_send("show -s ticket/$ticket_id/attachments", 'Showing ticket attachments...');
+expect_like(qr/id: ticket\/$ticket_id\/attachments/, 'Got our ticket\'s attachments');
+expect_like(qr/Attachments: \d+: \(Unnamed\) \(\S+ \/ \d+\w+\)/, 'Our ticket has an attachment');
+expect_handle->before() =~ /Attachments: (\d+): \(Unnamed\) \((\S+)/;
+my $attachment_id = $1;
+my $attachment_type = $2;
+ok($attachment_id, "Got attachment id=$attachment_id $attachment_type");
+expect_send("show -s ticket/$ticket_id/attachments/$attachment_id", "Showing attachment $attachment_id...");
+expect_like(qr/ContentType: $attachment_type/, 'Got the attachment');
+
+# }}}
+
+# {{{ test user manipulation
+
+# creating users
+expect_send("create -t user set Name='NewUser$$' EmailAddress='fbar$$\@example.com'", 'Creating a user...');
+expect_like(qr/User \d+ created/, 'Created the user');
+expect_handle->before() =~ /User (\d+) created/;
+my $user_id = $1;
+ok($user_id, "Got user id=$user_id");
+# updating users
+expect_send("edit user/$user_id set Name='EditedUser$$'", 'Editing the user');
+expect_like(qr/User $user_id updated/, 'Edited the user');
+expect_send("show user/$user_id", 'Showing the user...');
+expect_like(qr/id: user\/$user_id/, 'Saw the user');
+expect_like(qr/Name: EditedUser$$/, 'Saw the modification');
+TODO: {
+ todo_skip "Listing non-ticket items doesn't work", 2;
+ expect_send("list -t user 'id > 0'", 'Listing the users...');
+ expect_like(qr/$user_id: EditedUser$$/, 'Found the user');
+}
+
+# }}}
+
+# {{{ test group manipulation
+
+TODO: {
+todo_skip "Group manipulation doesn't work right now", 8;
+# creating groups
+expect_send("create -t group set Name='NewGroup$$'", 'Creating a group...');
+expect_like(qr/Group \d+ created/, 'Created the group');
+expect_handle->before() =~ /Group (\d+) created/;
+my $group_id = $1;
+ok($group_id, "Got group id=$group_id");
+# updating groups
+expect_send("edit group/$group_id set Name='EditedGroup$$'", 'Editing the group');
+expect_like(qr/Group $group_id updated/, 'Edited the group');
+expect_send("show group/$group_id", 'Showing the group...');
+expect_like(qr/id: group\/$group_id/, 'Saw the group');
+expect_like(qr/Name: EditedGroup$$/, 'Saw the modification');
+TODO: {
+ local $TODO = "Listing non-ticket items doesn't work";
+ expect_send("list -t group 'id > 0'", 'Listing the groups...');
+ expect_like(qr/$group_id: EditedGroup$$/, 'Found the group');
+}
+}
+
+# }}}
+
+TODO: {
+todo_skip "Custom field manipulation not yet implemented", 8;
+# {{{ test custom field manipulation
+
+# creating custom fields
+expect_send("create -t custom_field set Name='NewCF$$'", 'Creating a custom field...');
+expect_like(qr/Custom Field \d+ created/, 'Created the custom field');
+expect_handle->before() =~ /Custom Field (\d+) created/;
+my $cf_id = $1;
+ok($cf_id, "Got custom field id=$cf_id");
+# updating custom fields
+expect_send("edit cf/$cf_id set Name='EditedCF$$'", 'Editing the custom field');
+expect_like(qr/Custom field $cf_id updated/, 'Edited the custom field');
+expect_send("show cf/$cf_id", 'Showing the queue...');
+expect_like(qr/id: custom_field\/$cf_id/, 'Saw the custom field');
+expect_like(qr/Name: EditedCF$$/, 'Saw the modification');
+TODO: {
+ todo_skip "Listing non-ticket items doesn't work", 2;
+ expect_send("list -t custom_field 'id > 0'", 'Listing the CFs...');
+ expect_like(qr/$cf_id: EditedCF$$/, 'Found the custom field');
+}
+}
+
+# }}}
+
+# {{{ test merging tickets
+expect_send("create -t ticket set subject='CLIMergeTest1-$$'", 'Creating first ticket to merge...');
+expect_like(qr/Ticket \d+ created/, 'Created first ticket');
+expect_handle->before() =~ /Ticket (\d+) created/;
+my $merge_ticket_A = $1;
+ok($merge_ticket_A, "Got first ticket to merge id=$merge_ticket_A");
+expect_send("create -t ticket set subject='CLIMergeTest2-$$'", 'Creating second ticket to merge...');
+expect_like(qr/Ticket \d+ created/, 'Created second ticket');
+expect_handle->before() =~ /Ticket (\d+) created/;
+my $merge_ticket_B = $1;
+ok($merge_ticket_B, "Got second ticket to merge id=$merge_ticket_B");
+expect_send("merge $merge_ticket_B $merge_ticket_A", 'Merging the tickets...');
+expect_like(qr/Merge completed/, 'Merged the tickets');
+
+TODO: {
+ local $TODO = "we generate a spurious warning here";
+ $m->no_warnings_ok;
+}
+
+expect_send("show ticket/$merge_ticket_A/history", 'Checking merge on first ticket');
+expect_like(qr/Merged into ticket #$merge_ticket_A by root/, 'Merge recorded in first ticket');
+expect_send("show ticket/$merge_ticket_B/history", 'Checking merge on second ticket');
+expect_like(qr/Merged into ticket #$merge_ticket_A by root/, 'Merge recorded in second ticket');
+# }}}
+
+# {{{ test taking/stealing tickets
+{
+ # create a user; give them privileges to take and steal
+ ### TODO: implement 'grant' in the CLI tool; use that here instead.
+ ### this breaks the abstraction barrier, like, a lot.
+ my $steal_user = RT::User->new($RT::SystemUser);
+ my ($steal_user_id, $msg) = $steal_user->Create( Name => "fooser$$",
+ EmailAddress => "fooser$$\@localhost",
+ Privileged => 1,
+ Password => 'foobar',
+ );
+ ok($steal_user_id, "Created the user? $msg");
+ my $steal_queue = RT::Queue->new($RT::SystemUser);
+ my $steal_queue_id;
+ ($steal_queue_id, $msg) = $steal_queue->Create( Name => "Steal$$" );
+ ok($steal_queue_id, "Got the queue? $msg");
+ ok($steal_queue->id, "queue obj has id");
+ my $status;
+ ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'ShowTicket', Object => $steal_queue );
+ ok($status, "Gave 'ShowTicket' to our user? $msg");
+ ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $steal_queue );
+ ok($status, "Gave 'OwnTicket' to our user? $msg");
+ ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'StealTicket', Object => $steal_queue );
+ ok($status, "Gave 'StealTicket' to our user? $msg");
+ ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'TakeTicket', Object => $steal_queue );
+ ok($status, "Gave 'TakeTicket' to our user? $msg");
+
+ # create a ticket to take/steal
+ expect_send("create -t ticket set queue=$steal_queue_id subject='CLIStealTest-$$'", 'Creating ticket to steal...');
+ expect_like(qr/Ticket \d+ created/, 'Created ticket');
+ expect_handle->before() =~ /Ticket (\d+) created/;
+ my $steal_ticket_id = $1;
+ ok($steal_ticket_id, "Got ticket to steal id=$steal_ticket_id");
+
+ # root takes the ticket
+ expect_send("take $steal_ticket_id", 'root takes the ticket...');
+ expect_like(qr/Owner changed from Nobody to root/, 'root took the ticket');
+ expect_quit();
+
+ # log in as the non-root user
+ $ENV{'RTUSER'} = "fooser$$";
+ $ENV{'RTPASSWD'} = 'foobar';
+ expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit',);
+
+ # user tries to take the ticket, fails
+ # shouldn't be able to 'take' a ticket which someone else has taken out from
+ # under you; that should produce an error. should have to explicitly
+ # 'steal' it back from them. 'steal' can automatically 'take' a ticket,
+ # though.
+ expect_send("take $steal_ticket_id", 'user tries to take the ticket...');
+ expect_like(qr/You can only take tickets that are unowned/, '...and fails.');
+ expect_send("show ticket/$steal_ticket_id -f owner", 'Double-checking...');
+ expect_like(qr/Owner: root/, '...no change.');
+
+ # user steals the ticket
+ expect_send("steal $steal_ticket_id", 'user tries to *steal* the ticket...');
+ expect_like(qr/Owner changed from root to fooser$$/, '...and succeeds!');
+ expect_send("show ticket/$steal_ticket_id -f owner", 'Double-checking...');
+ expect_like(qr/Owner: fooser$$/, '...yup, it worked.');
+ expect_quit();
+
+ # log back in as root
+ $ENV{'RTUSER'} = 'root';
+ $ENV{'RTPASSWD'} = 'password';
+ expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit',);
+
+ # root steals the ticket back
+ expect_send("steal $steal_ticket_id", 'root steals the ticket back...');
+ expect_like(qr/Owner changed from fooser$$ to root/, '...and succeeds.');
+}
+# }}}
+
+# {{{ test ticket linking
+ my @link_relns = ( 'DependsOn', 'DependedOnBy', 'RefersTo', 'ReferredToBy',
+ 'MemberOf', 'HasMember', );
+ my %display_relns = map { $_ => $_ } @link_relns;
+ $display_relns{HasMember} = 'Members';
+
+ my $link1_id = ok_create_ticket( "LinkTicket1-$$" );
+ my $link2_id = ok_create_ticket( "LinkTicket2-$$" );
+
+ foreach my $reln (@link_relns) {
+ # create link
+ expect_send("link $link1_id $reln $link2_id", "Link by $reln...");
+ expect_like(qr/Created link $link1_id $reln $link2_id/, 'Linked');
+ expect_send("show -s ticket/$link1_id/links", "Checking creation of $reln...");
+ expect_like(qr/$display_relns{$reln}: [\w\d\.\-]+:\/\/[\w\d\.]+\/ticket\/$link2_id/, "Created link $reln");
+
+ # delete link
+ expect_send("link -d $link1_id $reln $link2_id", "Delete $reln...");
+ expect_like(qr/Deleted link $link1_id $reln $link2_id/, 'Deleted');
+ expect_send("show ticket/$link1_id/links", "Checking removal of $reln...");
+ ok( expect_handle->before() !~ /\Q$display_relns{$reln}: \E[\w\d\.\-]+:\/\/[w\d\.]+\/ticket\/$link2_id/, "Removed link $reln" );
+ #expect_unlike(qr/\Q$reln: \E[\w\d\.]+\Q://\E[w\d\.]+\/ticket\/$link2_id/, "Removed link $reln");
+
+ }
+# }}}
+
+expect_quit(); # We need to do this ourselves, so that we quit
+ # *before* we tear down the webserver.
+
+# helper function
+sub ok_create_ticket {
+ my $subject = shift;
+
+ expect_send("create -t ticket set subject='$subject'", 'Creating ticket...');
+ expect_like(qr/Ticket \d+ created/, "Created ticket '$subject'");
+ expect_handle->before() =~ /Ticket (\d+) created/;
+ my $id = $1;
+ ok($id, "Got ticket id=$id");
+
+ return $id;
+}
+
+# wrap up all the file handling stuff for attachment testing
+sub check_attachment {
+ my $attachment_path = shift;
+ (my $filename = $attachment_path) =~ s/.*\/(.*)$/$1/;
+ expect_send("comment -m 'attach file' -a $attachment_path $ticket_id", "Adding an attachment ($filename)");
+ expect_like(qr/Message recorded/, "Added the attachment");
+ expect_send("show ticket/$ticket_id/attachments","Finding Attachment");
+ my $attachment_regex = qr/(\d+):\s+$filename/;
+ expect_like($attachment_regex,"Attachment Uploaded");
+ expect_handle->before() =~ $attachment_regex;
+ my $attachment_id = $1;
+ expect_send("show ticket/$ticket_id/attachments/$attachment_id/content","Fetching Attachment");
+ open (my $fh, $attachment_path) or die "Can't open $attachment_path: $!";
+ my $attachment_content = do { local($/); <$fh> };
+ close $fh;
+ chomp $attachment_content;
+ expect_is($attachment_content,"Attachment contains original text");
+}
+
+
+
+1;
diff --git a/rt/t/web/command_line_with_unknown_field.t b/rt/t/web/command_line_with_unknown_field.t
new file mode 100644
index 0000000..9a7ec7a
--- /dev/null
+++ b/rt/t/web/command_line_with_unknown_field.t
@@ -0,0 +1,34 @@
+#!/usr/bin/perl -w
+
+use strict;
+use File::Spec ();
+use Test::Expect;
+use RT::Test tests => 10;
+my ($baseurl, $m) = RT::Test->started_ok;
+my $rt_tool_path = "$RT::BinPath/rt";
+
+$ENV{'RTUSER'} = 'root';
+$ENV{'RTPASSWD'} = 'password';
+$RT::Logger->debug("Connecting to server at ".RT->Config->Get('WebBaseURL'));
+$ENV{'RTSERVER'} =RT->Config->Get('WebBaseURL') ;
+$ENV{'RTDEBUG'} = '1';
+
+expect_run(
+ command => "$rt_tool_path shell",
+ prompt => 'rt> ',
+ quit => 'quit',
+);
+expect_send(q{create -t ticket set subject='new ticket' add cc=foo@example.com}, "Creating a ticket...");
+expect_like(qr/Ticket \d+ created/, "Created the ticket");
+expect_handle->before() =~ /Ticket (\d+) created/;
+my $ticket_id = $1;
+
+expect_send("edit ticket/$ticket_id set marge=simpson", 'set unknown field');
+expect_like(qr/marge: Unknown field/, 'marge is unknown field');
+expect_like(qr/marge: simpson/, 'the value we set for marge is shown too');
+
+expect_send("edit ticket/$ticket_id set homer=simpson", 'set unknown field');
+expect_like(qr/homer: Unknown field/, 'homer is unknown field');
+expect_like(qr/homer: simpson/, 'the value we set for homer is shown too');
+
+expect_quit();
diff --git a/rt/t/web/compilation_errors.t b/rt/t/web/compilation_errors.t
new file mode 100644
index 0000000..46a8628
--- /dev/null
+++ b/rt/t/web/compilation_errors.t
@@ -0,0 +1,68 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More;
+use File::Find;
+BEGIN {
+ sub wanted {
+ -f && /\.html$/ && $_ !~ /Logout.html$/;
+ }
+ my $tests = 7;
+ find( sub { wanted() and $tests += 4 }, 'share/html/' );
+ plan tests => $tests;
+}
+
+
+use HTTP::Request::Common;
+use HTTP::Cookies;
+use LWP;
+use Encode;
+
+my $cookie_jar = HTTP::Cookies->new;
+
+use RT::Test;
+my ($baseurl, $agent) = RT::Test->started_ok;
+
+# give the agent a place to stash the cookies
+$agent->cookie_jar($cookie_jar);
+
+# get the top page
+my $url = $agent->rt_base_url;
+diag "Base URL is '$url'" if $ENV{TEST_VERBOSE};
+$agent->get($url);
+
+is ($agent->{'status'}, 200, "Loaded a page");
+
+# {{{ test a login
+
+# follow the link marked "Login"
+
+ok($agent->{form}->find_input('user'));
+
+ok($agent->{form}->find_input('pass'));
+like ($agent->{'content'} , qr/username:/i);
+$agent->field( 'user' => 'root' );
+$agent->field( 'pass' => 'password' );
+# the field isn't named, so we have to click link 0
+$agent->click(0);
+is($agent->{'status'}, 200, "Fetched the page ok");
+like( $agent->{'content'} , qr/Logout/i, "Found a logout link");
+
+
+find ( sub { wanted() and test_get($File::Find::name) } , 'share/html/');
+
+sub test_get {
+ my $file = shift;
+
+ $file =~ s#^share/html/##;
+ diag( "testing $url/$file" ) if $ENV{TEST_VERBOSE};
+ ok ($agent->get("$url/$file", "GET $url/$file"), "Can Get $url/$file");
+ is ($agent->{'status'}, 200, "Loaded $file");
+# ok( $agent->{'content'} =~ /Logout/i, "Found a logout link on $file ");
+ ok( $agent->{'content'} !~ /Not logged in/i, "Still logged in for $file");
+ ok( $agent->{'content'} !~ /raw error/i, "Didn't get a Mason compilation error on $file");
+}
+
+# }}}
+
+1;
diff --git a/rt/t/web/config_tab_right.t b/rt/t/web/config_tab_right.t
new file mode 100644
index 0000000..4dc9ec0
--- /dev/null
+++ b/rt/t/web/config_tab_right.t
@@ -0,0 +1,41 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use RT::Test tests => 8;
+
+my ($uname, $upass, $user) = ('tester', 'tester');
+{
+ $user = RT::User->new($RT::SystemUser);
+ my ($status, $msg) = $user->Create(
+ Name => $uname,
+ Password => $upass,
+ Disabled => 0,
+ Privileged => 1,
+ );
+ ok($status, 'created a user');
+}
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login($uname, $upass), "logged in";
+
+{
+ $m->content_unlike(qr/Configuration/, 'no configuration');
+ $m->get('/Admin/');
+ is $m->status, 403, 'no access to /Admin/';
+}
+
+RT::Test->set_rights(
+ { Principal => $user->PrincipalObj,
+ Right => [qw(ShowConfigTab)],
+ },
+);
+
+{
+ $m->get('/');
+ $m->content_like(qr/Configuration/, 'configuration is there');
+
+ $m->follow_link_ok({text => 'Configuration'});
+ is $m->status, 200, 'user has access to /Admin/';
+}
+
diff --git a/rt/t/web/crypt-gnupg.t b/rt/t/web/crypt-gnupg.t
new file mode 100644
index 0000000..fb28c88
--- /dev/null
+++ b/rt/t/web/crypt-gnupg.t
@@ -0,0 +1,446 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 94;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use RT::Action::SendEmail;
+
+eval 'use GnuPG::Interface; 1' or plan skip_all => 'GnuPG required.';
+
+RT::Test->set_mail_catcher;
+
+RT->Config->Set( CommentAddress => 'general@example.com');
+RT->Config->Set( CorrespondAddress => 'general@example.com');
+RT->Config->Set( DefaultSearchResultFormat => qq{
+ '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#',
+ '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
+ 'OO-__OwnerName__-O',
+ 'OR-__Requestors__-O',
+ 'KO-__KeyOwnerName__-K',
+ 'KR-__KeyRequestors__-K',
+ Status});
+
+use File::Spec ();
+use Cwd;
+use File::Temp qw(tempdir);
+my $homedir = tempdir( CLEANUP => 1 );
+
+use_ok('RT::Crypt::GnuPG');
+
+RT->Config->Set( 'GnuPG',
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC' );
+
+RT->Config->Set( 'GnuPGOptions',
+ homedir => $homedir,
+ passphrase => 'recipient',
+ 'no-permission-warning' => undef,
+ 'trust-model' => 'always');
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+RT::Test->import_gnupg_key('recipient@example.com', 'public');
+RT::Test->import_gnupg_key('recipient@example.com', 'secret');
+RT::Test->import_gnupg_key('general@example.com', 'public');
+RT::Test->import_gnupg_key('general@example.com', 'secret');
+RT::Test->import_gnupg_key('general@example.com.2', 'public');
+RT::Test->import_gnupg_key('general@example.com.2', 'secret');
+
+ok(my $user = RT::User->new($RT::SystemUser));
+ok($user->Load('root'), "Loaded user 'root'");
+$user->SetEmailAddress('recipient@example.com');
+
+my $queue = RT::Test->load_or_create_queue(
+ Name => 'General',
+ CorrespondAddress => 'general@example.com',
+);
+ok $queue && $queue->id, 'loaded or created queue';
+my $qid = $queue->id;
+
+RT::Test->set_rights(
+ Principal => 'Everyone',
+ Right => ['CreateTicket', 'ShowTicket', 'SeeQueue', 'ModifyTicket'],
+);
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in';
+
+$m->get_ok("/Admin/Queues/Modify.html?id=$qid");
+$m->form_with_fields('Sign', 'Encrypt');
+$m->field(Encrypt => 1);
+$m->submit;
+
+RT::Test->clean_caught_mails;
+
+$m->goto_create_ticket( $queue );
+$m->form_name('TicketCreate');
+$m->field('Subject', 'Encryption test');
+$m->field('Content', 'Some content');
+ok($m->value('Encrypt', 2), "encrypt tick box is checked");
+ok(!$m->value('Sign', 2), "sign tick box is unchecked");
+$m->submit;
+is($m->status, 200, "request successful");
+
+$m->get($baseurl); # ensure that the mail has been processed
+
+my @mail = RT::Test->fetch_caught_mails;
+ok(@mail, "got some mail");
+
+$user->SetEmailAddress('general@example.com');
+for my $mail (@mail) {
+ unlike $mail, qr/Some content/, "outgoing mail was encrypted";
+
+ my ($content_type) = $mail =~ /^(Content-Type: .*)/m;
+ my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m;
+ my $body = strip_headers($mail);
+
+ $mail = << "MAIL";
+Subject: RT mail sent back into RT
+From: general\@example.com
+To: recipient\@example.com
+$mime_version
+$content_type
+
+$body
+MAIL
+
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ is ($tick->Subject,
+ "RT mail sent back into RT",
+ "Correct subject"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Privacy'),
+ 'PGP',
+ "RT's outgoing mail has crypto"
+ );
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Success',
+ "RT's outgoing mail looks encrypted"
+ );
+
+ like($attachments[0]->Content, qr/Some content/, "RT's mail includes copy of ticket text");
+ like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
+}
+
+$m->get("$baseurl/Admin/Queues/Modify.html?id=$qid");
+$m->form_with_fields('Sign', 'Encrypt');
+$m->field(Encrypt => undef);
+$m->field(Sign => 1);
+$m->submit;
+
+RT::Test->clean_caught_mails;
+
+$m->goto_create_ticket( $queue );
+$m->form_name('TicketCreate');
+$m->field('Subject', 'Signing test');
+$m->field('Content', 'Some other content');
+ok(!$m->value('Encrypt', 2), "encrypt tick box is unchecked");
+ok($m->value('Sign', 2), "sign tick box is checked");
+$m->submit;
+is($m->status, 200, "request successful");
+
+$m->get($baseurl); # ensure that the mail has been processed
+
+@mail = RT::Test->fetch_caught_mails;
+ok(@mail, "got some mail");
+for my $mail (@mail) {
+ like $mail, qr/Some other content/, "outgoing mail was not encrypted";
+ like $mail, qr/-----BEGIN PGP SIGNATURE-----[\s\S]+-----END PGP SIGNATURE-----/, "data has some kind of signature";
+
+ my ($content_type) = $mail =~ /^(Content-Type: .*)/m;
+ my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m;
+ my $body = strip_headers($mail);
+
+ $mail = << "MAIL";
+Subject: More RT mail sent back into RT
+From: general\@example.com
+To: recipient\@example.com
+$mime_version
+$content_type
+
+$body
+MAIL
+
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ is ($tick->Subject,
+ "More RT mail sent back into RT",
+ "Correct subject"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Privacy'),
+ 'PGP',
+ "RT's outgoing mail has crypto"
+ );
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Not encrypted',
+ "RT's outgoing mail looks unencrypted"
+ );
+ is( $msg->GetHeader('X-RT-Incoming-Signature'),
+ 'general <general@example.com>',
+ "RT's outgoing mail looks signed"
+ );
+
+ like($attachments[0]->Content, qr/Some other content/, "RT's mail includes copy of ticket text");
+ like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
+}
+
+$m->get("$baseurl/Admin/Queues/Modify.html?id=$qid");
+$m->form_with_fields('Sign', 'Encrypt');
+$m->field(Encrypt => 1);
+$m->field(Sign => 1);
+$m->submit;
+
+RT::Test->clean_caught_mails;
+
+
+$m->goto_create_ticket( $queue );
+$m->form_name('TicketCreate');
+$m->field('Subject', 'Crypt+Sign test');
+$m->field('Content', 'Some final? content');
+ok($m->value('Encrypt', 2), "encrypt tick box is checked");
+ok($m->value('Sign', 2), "sign tick box is checked");
+$m->submit;
+is($m->status, 200, "request successful");
+
+$m->get($baseurl); # ensure that the mail has been processed
+
+@mail = RT::Test->fetch_caught_mails;
+ok(@mail, "got some mail");
+for my $mail (@mail) {
+ unlike $mail, qr/Some other content/, "outgoing mail was encrypted";
+
+ my ($content_type) = $mail =~ /^(Content-Type: .*)/m;
+ my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m;
+ my $body = strip_headers($mail);
+
+ $mail = << "MAIL";
+Subject: Final RT mail sent back into RT
+From: general\@example.com
+To: recipient\@example.com
+$mime_version
+$content_type
+
+$body
+MAIL
+
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ is ($tick->Subject,
+ "Final RT mail sent back into RT",
+ "Correct subject"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Privacy'),
+ 'PGP',
+ "RT's outgoing mail has crypto"
+ );
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Success',
+ "RT's outgoing mail looks encrypted"
+ );
+ is( $msg->GetHeader('X-RT-Incoming-Signature'),
+ 'general <general@example.com>',
+ "RT's outgoing mail looks signed"
+ );
+
+ like($attachments[0]->Content, qr/Some final\? content/, "RT's mail includes copy of ticket text");
+ like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
+}
+
+RT::Test->clean_caught_mails;
+
+$m->goto_create_ticket( $queue );
+$m->form_name('TicketCreate');
+$m->field('Subject', 'Test crypt-off on encrypted queue');
+$m->field('Content', 'Thought you had me figured out didya');
+$m->field(Encrypt => undef, 2); # turn off encryption
+ok(!$m->value('Encrypt', 2), "encrypt tick box is now unchecked");
+ok($m->value('Sign', 2), "sign tick box is still checked");
+$m->submit;
+is($m->status, 200, "request successful");
+
+$m->get($baseurl); # ensure that the mail has been processed
+
+@mail = RT::Test->fetch_caught_mails;
+ok(@mail, "got some mail");
+for my $mail (@mail) {
+ like $mail, qr/Thought you had me figured out didya/, "outgoing mail was unencrypted";
+
+ my ($content_type) = $mail =~ /^(Content-Type: .*)/m;
+ my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m;
+ my $body = strip_headers($mail);
+
+ $mail = << "MAIL";
+Subject: Post-final! RT mail sent back into RT
+From: general\@example.com
+To: recipient\@example.com
+$mime_version
+$content_type
+
+$body
+MAIL
+
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ is ($tick->Subject,
+ "Post-final! RT mail sent back into RT",
+ "Correct subject"
+ );
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Privacy'),
+ 'PGP',
+ "RT's outgoing mail has crypto"
+ );
+ is( $msg->GetHeader('X-RT-Incoming-Encryption'),
+ 'Not encrypted',
+ "RT's outgoing mail looks unencrypted"
+ );
+ is( $msg->GetHeader('X-RT-Incoming-Signature'),
+ 'general <general@example.com>',
+ "RT's outgoing mail looks signed"
+ );
+
+ like($attachments[0]->Content, qr/Thought you had me figured out didya/, "RT's mail includes copy of ticket text");
+ like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
+}
+
+sub strip_headers
+{
+ my $mail = shift;
+ $mail =~ s/.*?\n\n//s;
+ return $mail;
+}
+
+# now test the OwnerNameKey and RequestorsKey fields
+
+my $nokey = RT::Test->load_or_create_user(Name => 'nokey', EmailAddress => 'nokey@example.com');
+$nokey->PrincipalObj->GrantRight(Right => 'CreateTicket');
+$nokey->PrincipalObj->GrantRight(Right => 'OwnTicket');
+
+my $tick = RT::Ticket->new( $RT::SystemUser );
+$tick->Create(Subject => 'owner lacks pubkey', Queue => 'general',
+ Owner => $nokey);
+ok(my $id = $tick->id, 'created ticket for owner-without-pubkey');
+
+$tick = RT::Ticket->new( $RT::SystemUser );
+$tick->Create(Subject => 'owner has pubkey', Queue => 'general',
+ Owner => 'root');
+ok($id = $tick->id, 'created ticket for owner-with-pubkey');
+
+my $mail = << "MAIL";
+Subject: Nokey requestor
+From: nokey\@example.com
+To: general\@example.com
+
+hello
+MAIL
+
+((my $status), $id) = RT::Test->send_via_mailgate($mail);
+is ($status >> 8, 0, "The mail gateway exited normally");
+ok ($id, "got id of a newly created ticket - $id");
+
+$tick = RT::Ticket->new( $RT::SystemUser );
+$tick->Load( $id );
+ok ($tick->id, "loaded ticket #$id");
+
+is ($tick->Subject,
+ "Nokey requestor",
+ "Correct subject"
+);
+
+# test key selection
+my $key1 = "EC1E81E7DC3DB42788FB0E4E9FA662C06DE22FC2";
+my $key2 = "75E156271DCCF02DDD4A7A8CDF651FA0632C4F50";
+
+ok($user = RT::User->new($RT::SystemUser));
+ok($user->Load('root'), "Loaded user 'root'");
+is($user->PreferredKey, $key1, "preferred key is set correctly");
+$m->get("$baseurl/Prefs/Other.html");
+like($m->content, qr/Preferred key/, "preferred key option shows up in preference");
+
+# XXX: mech doesn't let us see the current value of the select, apparently
+like($m->content, qr/$key1/, "first key shows up in preferences");
+like($m->content, qr/$key2/, "second key shows up in preferences");
+like($m->content, qr/$key1.*?$key2/s, "first key shows up before the second");
+
+$m->form_number(3);
+$m->select("PreferredKey" => $key2);
+$m->submit;
+
+ok($user = RT::User->new($RT::SystemUser));
+ok($user->Load('root'), "Loaded user 'root'");
+is($user->PreferredKey, $key2, "preferred key is set correctly to the new value");
+
+$m->get("$baseurl/Prefs/Other.html");
+like($m->content, qr/Preferred key/, "preferred key option shows up in preference");
+
+# XXX: mech doesn't let us see the current value of the select, apparently
+like($m->content, qr/$key2/, "second key shows up in preferences");
+like($m->content, qr/$key1/, "first key shows up in preferences");
+like($m->content, qr/$key2.*?$key1/s, "second key (now preferred) shows up before the first");
+
+# test that the new fields work
+$m->get("$baseurl/Search/Simple.html?q=General");
+my $content = $m->content;
+$content =~ s/&#40;/(/g;
+$content =~ s/&#41;/)/g;
+
+like($content, qr/OO-Nobody-O/, "original OwnerName untouched");
+like($content, qr/OO-nokey-O/, "original OwnerName untouched");
+like($content, qr/OO-root-O/, "original OwnerName untouched");
+
+like($content, qr/OR-recipient\@example.com-O/, "original Requestors untouched");
+like($content, qr/OR-nokey\@example.com-O/, "original Requestors untouched");
+
+like($content, qr/KO-root-K/, "KeyOwnerName does not issue no-pubkey warning for recipient");
+like($content, qr/KO-nokey \(no pubkey!\)-K/, "KeyOwnerName issues no-pubkey warning for root");
+like($content, qr/KO-Nobody \(no pubkey!\)-K/, "KeyOwnerName issues no-pubkey warning for nobody");
+
+like($content, qr/KR-recipient\@example.com-K/, "KeyRequestors does not issue no-pubkey warning for recipient\@example.com");
+like($content, qr/KR-general\@example.com-K/, "KeyRequestors does not issue no-pubkey warning for general\@example.com");
+like($content, qr/KR-nokey\@example.com \(no pubkey!\)-K/, "KeyRequestors DOES issue no-pubkey warning for nokey\@example.com");
+
diff --git a/rt/t/web/custom_frontpage.t b/rt/t/web/custom_frontpage.t
new file mode 100644
index 0000000..45a390a
--- /dev/null
+++ b/rt/t/web/custom_frontpage.t
@@ -0,0 +1,61 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 7;
+my ($baseurl, $m) = RT::Test->started_ok;
+
+my $url = $m->rt_base_url;
+
+my $user_obj = RT::User->new($RT::SystemUser);
+my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
+ok($ret, 'ACL test user creation');
+$user_obj->SetName('customer');
+$user_obj->SetPrivileged(1);
+($ret, $msg) = $user_obj->SetPassword('customer');
+$user_obj->PrincipalObj->GrantRight(Right => 'LoadSavedSearch');
+$user_obj->PrincipalObj->GrantRight(Right => 'EditSavedSearch');
+$user_obj->PrincipalObj->GrantRight(Right => 'CreateSavedSearch');
+$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
+
+ok $m->login( customer => 'customer' ), "logged in";
+
+$m->get ( $url."Search/Build.html");
+
+#create a saved search
+$m->form_name ('BuildQuery');
+
+$m->field ( "ValueOfAttachment" => 'stupid');
+$m->field ( "SavedSearchDescription" => 'stupid tickets');
+$m->click_button (name => 'SavedSearchSave');
+
+$m->get ( $url.'Prefs/MyRT.html' );
+$m->content_like (qr/stupid tickets/, 'saved search listed in rt at a glance items');
+
+ok $m->login, 'we did log in as root';
+
+$m->get ( $url.'Prefs/MyRT.html' );
+$m->form_name ('SelectionBox-body');
+# can't use submit form for mutli-valued select as it uses set_fields
+$m->field ('body-Selected' => ['component-QuickCreate', 'system-Unowned Tickets', 'system-My Tickets']);
+$m->click_button (name => 'remove');
+$m->form_name ('SelectionBox-body');
+#$m->click_button (name => 'body-Save');
+$m->get ( $url );
+$m->content_lacks ('highest priority tickets', 'remove everything from body pane');
+
+$m->get ( $url.'Prefs/MyRT.html' );
+$m->form_name ('SelectionBox-body');
+$m->field ('body-Available' => ['component-QuickCreate', 'system-Unowned Tickets', 'system-My Tickets']);
+$m->click_button (name => 'add');
+
+$m->form_name ('SelectionBox-body');
+$m->field ('body-Selected' => ['component-QuickCreate']);
+$m->click_button (name => 'movedown');
+
+$m->form_name ('SelectionBox-body');
+$m->click_button (name => 'movedown');
+
+$m->form_name ('SelectionBox-body');
+#$m->click_button (name => 'body-Save');
+$m->get ( $url );
+$m->content_like (qr'highest priority tickets', 'adds them back');
diff --git a/rt/t/web/custom_search.t b/rt/t/web/custom_search.t
new file mode 100644
index 0000000..05cfdab
--- /dev/null
+++ b/rt/t/web/custom_search.t
@@ -0,0 +1,84 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 11;
+my ($baseurl, $m) = RT::Test->started_ok;
+my $url = $m->rt_base_url;
+
+# reset preferences for easier test?
+
+
+
+my $t = RT::Ticket->new($RT::SystemUser);
+$t->Create(Subject => 'for custom search'.$$, Queue => 'general',
+ Owner => 'root', Requestor => 'customsearch@localhost');
+ok(my $id = $t->id, 'created ticket for custom search');
+
+ok $m->login, 'logged in';
+
+my $t_link = $m->find_link( text => "for custom search".$$ );
+like ($t_link->url, qr/$id/, 'link to the ticket we created');
+
+$m->content_lacks ('customsearch@localhost', 'requestor not displayed ');
+$m->get ( $url.'Prefs/MyRT.html' );
+my $cus_hp = $m->find_link( text => "My Tickets" );
+my $cus_qs = $m->find_link( text => "Quick search" );
+$m->get ($cus_hp);
+$m->content_like (qr'highest priority tickets');
+
+# add Requestor to the fields
+$m->form_name ('BuildQuery');
+# can't use submit form for mutli-valued select as it uses set_fields
+$m->field (SelectDisplayColumns => ['Requestors']);
+$m->click_button (name => 'AddCol') ;
+
+$m->form_name ('BuildQuery');
+$m->click_button (name => 'Save');
+
+$m->get( $url );
+$m->content_contains ('customsearch@localhost', 'requestor now displayed ');
+
+
+# now remove Requestor from the fields
+$m->get ($cus_hp);
+
+$m->form_name ('BuildQuery');
+
+my $cdc = $m->current_form->find_input('CurrentDisplayColumns');
+my ($requestor_value) = grep { /Requestor/ } $cdc->possible_values;
+ok($requestor_value, "got the requestor value");
+
+$m->field (CurrentDisplayColumns => $requestor_value);
+$m->click_button (name => 'RemoveCol') ;
+
+$m->form_name ('BuildQuery');
+$m->click_button (name => 'Save');
+
+$m->get( $url );
+$m->content_lacks ('customsearch@localhost', 'requestor not displayed ');
+
+
+# try to disable General from quick search
+
+# Note that there's a small problem in the current implementation,
+# since ticked quese are wanted, we do the invesrsion. So any
+# queue added during the quicksearch setting will be unticked.
+my $nlinks = $#{$m->find_all_links( text => "General" )};
+$m->get ($cus_qs);
+$m->form_name ('Preferences');
+$m->untick('Want-General', '1');
+$m->click_button (name => 'Save');
+
+$m->get( $url );
+is ($#{$m->find_all_links( text => "General" )}, $nlinks - 1,
+ 'General gone from quicksearch list');
+
+# get it back
+$m->get ($cus_qs);
+$m->form_name ('Preferences');
+$m->tick('Want-General', '1');
+$m->click_button (name => 'Save');
+
+$m->get( $url );
+is ($#{$m->find_all_links( text => "General" )}, $nlinks,
+ 'General back in quicksearch list');
diff --git a/rt/t/web/dashboard_with_deleted_saved_search.t b/rt/t/web/dashboard_with_deleted_saved_search.t
new file mode 100644
index 0000000..328095a
--- /dev/null
+++ b/rt/t/web/dashboard_with_deleted_saved_search.t
@@ -0,0 +1,89 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 18;
+my ( $url, $m ) = RT::Test->started_ok;
+ok( $m->login, 'logged in' );
+
+# create a saved search
+$m->get_ok( $url . "/Search/Build.html?Query=" . 'id=1' );
+
+$m->submit_form(
+ form_name => 'BuildQuery',
+ fields => { SavedSearchDescription => 'foo', },
+ button => 'SavedSearchSave',
+);
+
+my ( $search_uri, $user_id, $search_id ) =
+ $m->content =~ /value="(RT::User-(\d+)-SavedSearch-(\d+))"/;
+$m->submit_form(
+ form_name => 'BuildQuery',
+ fields => { SavedSearchLoad => $search_uri },
+ button => 'SavedSearchSave',
+);
+
+$m->content_like( qr/name="SavedSearchDelete"\s+value="Delete"/,
+ 'found Delete button' );
+$m->content_like(
+ qr/name="SavedSearchDescription"\s+value="foo"/,
+ 'found Description input with the value filled'
+);
+
+# create a dashboard with the created search
+
+$m->get_ok( $url . "/Dashboards/Modify.html?Create=1" );
+$m->submit_form(
+ form_name => 'ModifyDashboard',
+ fields => { Name => 'bar' },
+);
+
+$m->content_like( qr/Saved dashboard bar/i, 'dashboard saved' );
+my $dashboard_queries_link = $m->find_link( text_regex => qr/Queries/ );
+my ( $dashboard_id ) = $dashboard_queries_link->url =~ /id=(\d+)/;
+
+$m->get_ok( $url . "/Dashboards/Queries.html?id=$dashboard_id" );
+
+$m->content_lacks( 'value="Update"', 'no update button' );
+
+$m->submit_form(
+ form_name => 'Dashboard-Searches-body',
+ fields =>
+ { 'Searches-body-Available' => "search-$search_id-RT::User-$user_id" },
+ button => 'add',
+);
+
+$m->content_like( qr/Dashboard updated/i, 'added search foo to dashboard bar' );
+
+# delete the created search
+
+$m->get_ok( $url . "/Search/Build.html?Query=" . 'id=1' );
+$m->submit_form(
+ form_name => 'BuildQuery',
+ fields => { SavedSearchLoad => $search_uri },
+);
+$m->submit_form(
+ form_name => 'BuildQuery',
+ button => 'SavedSearchDelete',
+);
+
+$m->content_lacks( $search_uri, 'deleted search foo' );
+
+# here is what we really want to test
+
+$m->get_ok( $url . "/Dashboards/Queries.html?id=$dashboard_id" );
+$m->content_like( qr/Deleted queries/i, 'found deleted message' );
+
+# Update button shows so we can update the deleted search easily
+$m->content_contains( 'value="Update"', 'found update button' );
+
+$m->submit_form(
+ form_name => 'Dashboard-Searches-body',
+ button => 'update',
+);
+
+$m->content_unlike( qr/Deleted queries/i, 'deleted message is gone' );
+$m->content_lacks( 'value="Update"', 'update button is gone too' );
+
+$m->get_warnings; # we'll get a lot of warnings because the deleted search
+
diff --git a/rt/t/web/dashboards-groups.t b/rt/t/web/dashboards-groups.t
new file mode 100644
index 0000000..cbf1d6a
--- /dev/null
+++ b/rt/t/web/dashboards-groups.t
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 40;
+my ($baseurl, $m) = RT::Test->started_ok;
+
+my $url = $m->rt_base_url;
+
+# create user and queue {{{
+my $user_obj = RT::User->new($RT::SystemUser);
+my ($ok, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
+ok($ok, 'ACL test user creation');
+$user_obj->SetName('customer');
+$user_obj->SetPrivileged(1);
+($ok, $msg) = $user_obj->SetPassword('customer');
+$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
+my $currentuser = RT::CurrentUser->new($user_obj);
+
+my $queue = RT::Queue->new($RT::SystemUser);
+$queue->Create(Name => 'SearchQueue'.$$);
+
+$user_obj->PrincipalObj->GrantRight(Right => $_, Object => $queue)
+ for qw/SeeQueue ShowTicket OwnTicket/;
+
+# grant the user all these rights so we can make sure that the group rights
+# are checked and not these as well
+$user_obj->PrincipalObj->GrantRight(Right => $_, Object => $RT::System)
+ for qw/SubscribeDashboard CreateOwnDashboard SeeOwnDashboard ModifyOwnDashboard DeleteOwnDashboard/;
+# }}}
+# create and test groups (outer < inner < user) {{{
+my $inner_group = RT::Group->new($RT::SystemUser);
+($ok, $msg) = $inner_group->CreateUserDefinedGroup(Name => "inner", Description => "inner group");
+ok($ok, "created inner group: $msg");
+
+my $outer_group = RT::Group->new($RT::SystemUser);
+($ok, $msg) = $outer_group->CreateUserDefinedGroup(Name => "outer", Description => "outer group");
+ok($ok, "created outer group: $msg");
+
+($ok, $msg) = $outer_group->AddMember($inner_group->PrincipalId);
+ok($ok, "added inner as a member of outer: $msg");
+
+($ok, $msg) = $inner_group->AddMember($user_obj->PrincipalId);
+ok($ok, "added user as a member of member: $msg");
+
+ok($outer_group->HasMember($inner_group->PrincipalId), "outer has inner");
+ok(!$outer_group->HasMember($user_obj->PrincipalId), "outer doesn't have user directly");
+ok($outer_group->HasMemberRecursively($inner_group->PrincipalId), "outer has inner recursively");
+ok($outer_group->HasMemberRecursively($user_obj->PrincipalId), "outer has user recursively");
+
+ok(!$inner_group->HasMember($outer_group->PrincipalId), "inner doesn't have outer");
+ok($inner_group->HasMember($user_obj->PrincipalId), "inner has user");
+ok(!$inner_group->HasMemberRecursively($outer_group->PrincipalId), "inner doesn't have outer, even recursively");
+ok($inner_group->HasMemberRecursively($user_obj->PrincipalId), "inner has user recursively");
+# }}}
+
+ok $m->login(customer => 'customer'), "logged in";
+
+$m->get_ok("$url/Dashboards");
+
+$m->follow_link_ok({text => "New"});
+$m->form_name('ModifyDashboard');
+is_deeply([$m->current_form->find_input('Privacy')->possible_values], ["RT::User-" . $user_obj->Id], "the only selectable privacy is user");
+$m->content_lacks('Delete', "Delete button hidden because we are creating");
+
+$user_obj->PrincipalObj->GrantRight(Right => 'CreateGroupDashboard', Object => $inner_group);
+
+$m->follow_link_ok({text => "New"});
+$m->form_name('ModifyDashboard');
+is_deeply([$m->current_form->find_input('Privacy')->possible_values], ["RT::User-" . $user_obj->Id, "RT::Group-" . $inner_group->Id], "the only selectable privacies are user and inner group (not outer group)");
+$m->field("Name" => 'inner dashboard');
+$m->field("Privacy" => "RT::Group-" . $inner_group->Id);
+$m->content_lacks('Delete', "Delete button hidden because we are creating");
+
+$m->click_button(value => 'Create');
+$m->content_lacks("No permission to create dashboards");
+$m->content_contains("Saved dashboard inner dashboard");
+$m->content_lacks('Delete', "Delete button hidden because we lack DeleteDashboard");
+
+my $dashboard = RT::Dashboard->new($currentuser);
+my ($id) = $m->content =~ /name="id" value="(\d+)"/;
+ok($id, "got an ID, $id");
+$dashboard->LoadById($id);
+is($dashboard->Name, "inner dashboard");
+
+is($dashboard->Privacy, 'RT::Group-' . $inner_group->Id, "correct privacy");
+is($dashboard->PossibleHiddenSearches, 0, "all searches are visible");
+
+$m->no_warnings_ok;
+
+$m->get_ok("/Dashboards/Modify.html?id=$id");
+$m->content_lacks("inner dashboard", "no SeeGroupDashboard right");
+$m->content_contains("Permission denied");
+
+$m->warning_like(qr/Permission denied/, "got a permission denied warning");
+
+$user_obj->PrincipalObj->GrantRight(Right => 'SeeGroupDashboard', Object => $inner_group);
+$m->get_ok("/Dashboards/Modify.html?id=$id");
+$m->content_contains("inner dashboard", "we now have SeeGroupDashboard right");
+$m->content_lacks("Permission denied");
+
+$m->content_contains('Subscription', "Subscription link not hidden because we have SubscribeDashboard");
+
diff --git a/rt/t/web/dashboards-permissions.t b/rt/t/web/dashboards-permissions.t
new file mode 100644
index 0000000..1724042
--- /dev/null
+++ b/rt/t/web/dashboards-permissions.t
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use RT::Test tests => 7;
+my ($baseurl, $m) = RT::Test->started_ok;
+
+my $url = $m->rt_base_url;
+
+# create user and queue {{{
+my $user_obj = RT::User->new($RT::SystemUser);
+my ($ok, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
+ok($ok, 'ACL test user creation');
+$user_obj->SetName('customer');
+$user_obj->SetPrivileged(1);
+($ok, $msg) = $user_obj->SetPassword('customer');
+$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
+my $currentuser = RT::CurrentUser->new($user_obj);
+
+my $queue = RT::Queue->new($RT::SystemUser);
+$queue->Create(Name => 'SearchQueue'.$$);
+
+$user_obj->PrincipalObj->GrantRight(Right => $_, Object => $queue)
+ for qw/SeeQueue ShowTicket OwnTicket/;
+
+$user_obj->PrincipalObj->GrantRight(Right => $_, Object => $RT::System)
+ for qw/SubscribeDashboard CreateOwnDashboard SeeOwnDashboard ModifyOwnDashboard DeleteOwnDashboard/;
+# }}}
+
+ok $m->login(customer => 'customer'), "logged in";
+
+$m->get_ok("$url/Dashboards");
+
+$m->follow_link_ok({text => "New"});
+$m->form_name('ModifyDashboard');
+is_deeply([$m->current_form->find_input('Privacy')->possible_values], ["RT::User-" . $user_obj->Id], "the only selectable privacy is user");
+$m->content_lacks('Delete', "Delete button hidden because we are creating");
+
diff --git a/rt/t/web/dashboards.t b/rt/t/web/dashboards.t
new file mode 100644
index 0000000..9d98ce6
--- /dev/null
+++ b/rt/t/web/dashboards.t
@@ -0,0 +1,250 @@
+#!/usr/bin/perl -w
+use strict;
+
+use RT::Test tests => 109;
+my ($baseurl, $m) = RT::Test->started_ok;
+
+my $url = $m->rt_base_url;
+
+my $user_obj = RT::User->new($RT::SystemUser);
+my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
+ok($ret, 'ACL test user creation');
+$user_obj->SetName('customer');
+$user_obj->SetPrivileged(1);
+($ret, $msg) = $user_obj->SetPassword('customer');
+$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
+my $currentuser = RT::CurrentUser->new($user_obj);
+
+my $onlooker = RT::User->new($RT::SystemUser);
+($ret, $msg) = $onlooker->LoadOrCreateByEmail('onlooker@example.com');
+ok($ret, 'ACL test user creation');
+$onlooker->SetName('onlooker');
+$onlooker->SetPrivileged(1);
+($ret, $msg) = $onlooker->SetPassword('onlooker');
+
+my $queue = RT::Queue->new($RT::SystemUser);
+$queue->Create(Name => 'SearchQueue'.$$);
+
+for my $user ($user_obj, $onlooker) {
+ $user->PrincipalObj->GrantRight(Right => 'ModifySelf');
+ for my $right (qw/SeeQueue ShowTicket OwnTicket/) {
+ $user->PrincipalObj->GrantRight(Right => $right, Object => $queue);
+ }
+}
+
+ok $m->login(customer => 'customer'), "logged in";
+
+$m->get_ok($url."Dashboards/index.html");
+$m->content_lacks('<a href="/Dashboards/Modify.html?Create=1">New</a>',
+ "No 'new dashboard' link because we have no CreateOwnDashboard");
+
+$m->no_warnings_ok;
+
+$m->get_ok($url."Dashboards/Modify.html?Create=1");
+$m->content_contains("Permission denied");
+$m->content_lacks("Save Changes");
+
+$m->warning_like(qr/Permission denied/, "got a permission denied warning");
+
+$user_obj->PrincipalObj->GrantRight(Right => 'ModifyOwnDashboard', Object => $RT::System);
+
+# Modify itself is no longer good enough, you need Create
+$m->get_ok($url."Dashboards/Modify.html?Create=1");
+$m->content_contains("Permission denied");
+$m->content_lacks("Save Changes");
+
+$m->warning_like(qr/Permission denied/, "got a permission denied warning");
+
+$user_obj->PrincipalObj->GrantRight(Right => 'CreateOwnDashboard', Object => $RT::System);
+
+$m->get_ok($url."Dashboards/Modify.html?Create=1");
+$m->content_lacks("Permission denied");
+$m->content_contains("Create");
+
+$m->get_ok($url."Dashboards/index.html");
+$m->content_contains("New", "'New' link because we now have ModifyOwnDashboard");
+
+$m->follow_link_ok({text => "New"});
+$m->form_name('ModifyDashboard');
+$m->field("Name" => 'different dashboard');
+$m->content_lacks('Delete', "Delete button hidden because we are creating");
+$m->click_button(value => 'Create');
+$m->content_lacks("No permission to create dashboards");
+$m->content_contains("Saved dashboard different dashboard");
+$m->content_lacks('Delete', "Delete button hidden because we lack DeleteOwnDashboard");
+
+$m->get_ok($url."Dashboards/index.html");
+$m->content_lacks("different dashboard", "we lack SeeOwnDashboard");
+
+$user_obj->PrincipalObj->GrantRight(Right => 'SeeOwnDashboard', Object => $RT::System);
+
+$m->get_ok($url."Dashboards/index.html");
+$m->content_contains("different dashboard", "we now have SeeOwnDashboard");
+$m->content_lacks("Permission denied");
+
+$m->follow_link_ok({text => "different dashboard"});
+$m->content_contains("Basics");
+$m->content_contains("Queries");
+$m->content_lacks("Subscription", "we don't have the SubscribeDashboard right");
+
+$m->follow_link_ok({text => "Basics"});
+$m->content_contains("Modify the dashboard different dashboard");
+
+$m->follow_link_ok({text => "Queries"});
+$m->content_contains("Modify the queries of dashboard different dashboard");
+$m->form_name('Dashboard-Searches-body');
+$m->field('Searches-body-Available' => ["search-2-RT::System-1"]);
+$m->click_button(name => 'add');
+$m->content_contains("Dashboard updated");
+
+my $dashboard = RT::Dashboard->new($currentuser);
+my ($id) = $m->content =~ /name="id" value="(\d+)"/;
+ok($id, "got an ID, $id");
+$dashboard->LoadById($id);
+is($dashboard->Name, "different dashboard");
+
+is($dashboard->Privacy, 'RT::User-' . $user_obj->Id, "correct privacy");
+is($dashboard->PossibleHiddenSearches, 0, "all searches are visible");
+
+my @searches = $dashboard->Searches;
+is(@searches, 1, "one saved search in the dashboard");
+like($searches[0]->Name, qr/newest unowned tickets/, "correct search name");
+
+$m->form_name('Dashboard-Searches-body');
+$m->field('Searches-body-Available' => ["search-1-RT::System-1"]);
+$m->click_button(name => 'add');
+$m->content_contains("Dashboard updated");
+
+RT::Record->FlushCache if RT::Record->can('FlushCache');
+$dashboard = RT::Dashboard->new($currentuser);
+$dashboard->LoadById($id);
+
+@searches = $dashboard->Searches;
+is(@searches, 2, "two saved searches in the dashboard");
+like($searches[0]->Name, qr/newest unowned tickets/, "correct existing search name");
+like($searches[1]->Name, qr/highest priority tickets I own/, "correct new search name");
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+$ticket->Create(
+ Queue => $queue->Id,
+ Requestor => [ $user_obj->Name ],
+ Owner => $user_obj,
+ Subject => 'dashboard test',
+);
+
+$m->follow_link_ok({text => 'different dashboard'});
+$m->content_contains("20 highest priority tickets I own");
+$m->content_contains("20 newest unowned tickets");
+$m->content_lacks("Bookmarked Tickets");
+$m->content_contains("dashboard test", "ticket subject");
+
+$m->get_ok("/Dashboards/$id/This fragment left intentionally blank");
+$m->content_contains("20 highest priority tickets I own");
+$m->content_contains("20 newest unowned tickets");
+$m->content_lacks("Bookmarked Tickets");
+$m->content_contains("dashboard test", "ticket subject");
+
+$m->get_ok("/Dashboards/Subscription.html?DashboardId=$id");
+$m->form_name('SubscribeDashboard');
+$m->click_button(name => 'Save');
+$m->content_contains("Permission denied");
+$m->warning_like(qr/Unable to subscribe to dashboard.*Permission denied/, "got a permission denied warning when trying to subscribe to a dashboard");
+
+RT::Record->FlushCache if RT::Record->can('FlushCache');
+is($user_obj->Attributes->Named('Subscription'), 0, "no subscriptions");
+
+$user_obj->PrincipalObj->GrantRight(Right => 'SubscribeDashboard', Object => $RT::System);
+
+$m->get_ok("/Dashboards/Modify.html?id=$id");
+$m->follow_link_ok({text => "Subscription"});
+$m->content_contains("Subscribe to dashboard different dashboard");
+$m->content_contains("Unowned Tickets");
+$m->content_contains("My Tickets");
+$m->content_lacks("Bookmarked Tickets", "only dashboard queries show up");
+
+$m->form_name('SubscribeDashboard');
+$m->click_button(name => 'Save');
+$m->content_lacks("Permission denied");
+$m->content_contains("Subscribed to dashboard different dashboard");
+
+RT::Record->FlushCache if RT::Record->can('FlushCache');
+TODO: {
+ local $TODO = "some kind of caching is still happening (it works if I remove the check above)";
+ is($user_obj->Attributes->Named('Subscription'), 1, "we have a subscription");
+};
+
+$m->get_ok("/Dashboards/Modify.html?id=$id");
+$m->follow_link_ok({text => "Subscription"});
+$m->content_contains("Modify the subscription to dashboard different dashboard");
+
+$m->get_ok("/Dashboards/Modify.html?id=$id&Delete=1");
+$m->content_contains("Permission denied", "unable to delete dashboard because we lack DeleteOwnDashboard");
+
+$m->warning_like(qr/Couldn't delete dashboard.*Permission denied/, "got a permission denied warning when trying to delete the dashboard");
+
+$user_obj->PrincipalObj->GrantRight(Right => 'DeleteOwnDashboard', Object => $RT::System);
+
+$m->get_ok("/Dashboards/Modify.html?id=$id");
+$m->content_contains('Delete', "Delete button shows because we have DeleteOwnDashboard");
+
+$m->form_name('ModifyDashboard');
+$m->click_button(name => 'Delete');
+$m->content_contains("Deleted dashboard $id");
+
+$m->get("/Dashboards/Modify.html?id=$id");
+$m->content_lacks("different dashboard", "dashboard was deleted");
+$m->content_contains("Failed to load dashboard $id");
+
+$m->warning_like(qr/Failed to load dashboard.*Couldn't find row/, "the dashboard was deleted");
+
+$user_obj->PrincipalObj->GrantRight(Right => "SuperUser", Object => $RT::System);
+
+# now test that we warn about searches others can't see
+# first create a personal saved search...
+$m->get_ok($url."Search/Build.html");
+$m->follow_link_ok({text => 'Advanced'});
+$m->form_with_fields('Query');
+$m->field(Query => "id > 0");
+$m->submit;
+
+$m->form_with_fields('SavedSearchDescription');
+$m->field(SavedSearchDescription => "personal search");
+$m->click_button(name => "SavedSearchSave");
+
+# then the system-wide dashboard
+$m->get_ok($url."Dashboards/Modify.html?Create=1");
+
+$m->form_name('ModifyDashboard');
+$m->field("Name" => 'system dashboard');
+$m->field("Privacy" => 'RT::System-1');
+$m->content_lacks('Delete', "Delete button hidden because we are creating");
+$m->click_button(value => 'Create');
+$m->content_lacks("No permission to create dashboards");
+$m->content_contains("Saved dashboard system dashboard");
+
+$m->follow_link_ok({text => 'Queries'});
+
+$m->form_name('Dashboard-Searches-body');
+$m->field('Searches-body-Available' => ['search-7-RT::User-22']); # XXX: :( :(
+$m->click_button(name => 'add');
+$m->content_contains("Dashboard updated");
+
+$m->content_contains("The following queries may not be visible to all users who can see this dashboard.");
+
+$m->follow_link_ok({text => 'system dashboard'});
+$m->content_contains("personal search", "saved search shows up");
+$m->content_contains("dashboard test", "matched ticket shows up");
+
+# make sure the onlooker can't see the search...
+$onlooker->PrincipalObj->GrantRight(Right => 'SeeDashboard', Object => $RT::System);
+
+my $omech = RT::Test::Web->new;
+ok $omech->login(onlooker => 'onlooker'), "logged in";
+$omech->get_ok("/Dashboards");
+
+$omech->follow_link_ok({text => 'system dashboard'});
+$omech->content_lacks("personal search", "saved search doesn't show up");
+$omech->content_lacks("dashboard test", "matched ticket doesn't show up");
+
+$m->warning_like(qr/User .* tried to load container user /, "can't see other users' personal searches");
+
diff --git a/rt/t/web/gnupg-outgoing.t b/rt/t/web/gnupg-outgoing.t
new file mode 100644
index 0000000..a46833c
--- /dev/null
+++ b/rt/t/web/gnupg-outgoing.t
@@ -0,0 +1,363 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use RT::Test tests => 492;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use RT::Action::SendEmail;
+use File::Temp qw(tempdir);
+
+RT::Test->set_mail_catcher;
+
+use_ok('RT::Crypt::GnuPG');
+
+RT->Config->Set( GnuPG =>
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC',
+);
+
+RT->Config->Set( GnuPGOptions =>
+ homedir => scalar tempdir( CLEANUP => 1 ),
+ passphrase => 'rt-test',
+ 'no-permission-warning' => undef,
+ 'trust-model' => 'always',
+);
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+RT::Test->import_gnupg_key('rt-recipient@example.com');
+RT::Test->import_gnupg_key('rt-test@example.com', 'public');
+
+my $queue = RT::Test->load_or_create_queue(
+ Name => 'Regression',
+ CorrespondAddress => 'rt-recipient@example.com',
+ CommentAddress => 'rt-recipient@example.com',
+);
+ok $queue && $queue->id, 'loaded or created queue';
+
+RT::Test->set_rights(
+ Principal => 'Everyone',
+ Right => ['CreateTicket', 'ShowTicket', 'SeeQueue', 'ReplyToTicket', 'ModifyTicket'],
+);
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in';
+
+my @variants = (
+ {},
+ { Sign => 1 },
+ { Encrypt => 1 },
+ { Sign => 1, Encrypt => 1 },
+);
+
+# collect emails
+my %mail = (
+ plain => [],
+ signed => [],
+ encrypted => [],
+ signed_encrypted => [],
+);
+
+diag "check in read-only mode that queue's props influence create/update ticket pages" if $ENV{TEST_VERBOSE};
+{
+ foreach my $variant ( @variants ) {
+ set_queue_crypt_options( %$variant );
+ $m->goto_create_ticket( $queue );
+ $m->form_name('TicketCreate');
+ if ( $variant->{'Encrypt'} ) {
+ ok $m->value('Encrypt', 2), "encrypt tick box is checked";
+ } else {
+ ok !$m->value('Encrypt', 2), "encrypt tick box is unchecked";
+ }
+ if ( $variant->{'Sign'} ) {
+ ok $m->value('Sign', 2), "sign tick box is checked";
+ } else {
+ ok !$m->value('Sign', 2), "sign tick box is unchecked";
+ }
+ }
+
+ # to avoid encryption/signing during create
+ set_queue_crypt_options();
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ my ($id) = $ticket->Create(
+ Subject => 'test',
+ Queue => $queue->id,
+ Requestor => 'rt-test@example.com',
+ );
+ ok $id, 'ticket created';
+
+ foreach my $variant ( @variants ) {
+ set_queue_crypt_options( %$variant );
+ $m->goto_ticket( $id );
+ $m->follow_link_ok({text => 'Reply'}, '-> reply');
+ $m->form_number(3);
+ if ( $variant->{'Encrypt'} ) {
+ ok $m->value('Encrypt', 2), "encrypt tick box is checked";
+ } else {
+ ok !$m->value('Encrypt', 2), "encrypt tick box is unchecked";
+ }
+ if ( $variant->{'Sign'} ) {
+ ok $m->value('Sign', 2), "sign tick box is checked";
+ } else {
+ ok !$m->value('Sign', 2), "sign tick box is unchecked";
+ }
+ }
+}
+
+# create a ticket for each combination
+foreach my $queue_set ( @variants ) {
+ set_queue_crypt_options( %$queue_set );
+ foreach my $ticket_set ( @variants ) {
+ create_a_ticket( %$ticket_set );
+ }
+}
+
+my $tid;
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ ($tid) = $ticket->Create(
+ Subject => 'test',
+ Queue => $queue->id,
+ Requestor => 'rt-test@example.com',
+ );
+ ok $tid, 'ticket created';
+}
+
+# again for each combination add a reply message
+foreach my $queue_set ( @variants ) {
+ set_queue_crypt_options( %$queue_set );
+ foreach my $ticket_set ( @variants ) {
+ update_ticket( $tid, %$ticket_set );
+ }
+}
+
+
+# ------------------------------------------------------------------------------
+# now delete all keys from the keyring and put back secret/pub pair for rt-test@
+# and only public key for rt-recipient@ so we can verify signatures and decrypt
+# like we are on another side recieve emails
+# ------------------------------------------------------------------------------
+
+unlink $_ foreach glob( RT->Config->Get('GnuPGOptions')->{'homedir'} ."/*" );
+RT::Test->import_gnupg_key('rt-recipient@example.com', 'public');
+RT::Test->import_gnupg_key('rt-test@example.com');
+
+$queue = RT::Test->load_or_create_queue(
+ Name => 'Regression',
+ CorrespondAddress => 'rt-test@example.com',
+ CommentAddress => 'rt-test@example.com',
+);
+ok $queue && $queue->id, 'changed props of the queue';
+
+foreach my $mail ( map cleanup_headers($_), @{ $mail{'plain'} } ) {
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ ok !$msg->GetHeader('X-RT-Privacy'), "RT's outgoing mail has no crypto";
+ is $msg->GetHeader('X-RT-Incoming-Encryption'), 'Not encrypted',
+ "RT's outgoing mail looks not encrypted";
+ ok !$msg->GetHeader('X-RT-Incoming-Signature'),
+ "RT's outgoing mail looks not signed";
+
+ like $msg->Content, qr/Some content/, "RT's mail includes copy of ticket text";
+}
+
+foreach my $mail ( map cleanup_headers($_), @{ $mail{'signed'} } ) {
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is $msg->GetHeader('X-RT-Privacy'), 'PGP',
+ "RT's outgoing mail has crypto";
+ is $msg->GetHeader('X-RT-Incoming-Encryption'), 'Not encrypted',
+ "RT's outgoing mail looks not encrypted";
+ like $msg->GetHeader('X-RT-Incoming-Signature'),
+ qr/<rt-recipient\@example.com>/,
+ "RT's outgoing mail looks signed";
+
+ like $attachments[0]->Content, qr/Some content/,
+ "RT's mail includes copy of ticket text";
+}
+
+foreach my $mail ( map cleanup_headers($_), @{ $mail{'encrypted'} } ) {
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is $msg->GetHeader('X-RT-Privacy'), 'PGP',
+ "RT's outgoing mail has crypto";
+ is $msg->GetHeader('X-RT-Incoming-Encryption'), 'Success',
+ "RT's outgoing mail looks encrypted";
+ ok !$msg->GetHeader('X-RT-Incoming-Signature'),
+ "RT's outgoing mail looks not signed";
+
+ like $attachments[0]->Content, qr/Some content/,
+ "RT's mail includes copy of ticket text";
+}
+
+foreach my $mail ( map cleanup_headers($_), @{ $mail{'signed_encrypted'} } ) {
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "The mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is $msg->GetHeader('X-RT-Privacy'), 'PGP',
+ "RT's outgoing mail has crypto";
+ is $msg->GetHeader('X-RT-Incoming-Encryption'), 'Success',
+ "RT's outgoing mail looks encrypted";
+ like $msg->GetHeader('X-RT-Incoming-Signature'),
+ qr/<rt-recipient\@example.com>/,
+ "RT's outgoing mail looks signed";
+
+ like $attachments[0]->Content, qr/Some content/,
+ "RT's mail includes copy of ticket text";
+}
+
+sub create_a_ticket {
+ my %args = (@_);
+
+ RT::Test->clean_caught_mails;
+
+ $m->goto_create_ticket( $queue );
+ $m->form_name('TicketCreate');
+ $m->field( Subject => 'test' );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+
+ foreach ( qw(Sign Encrypt) ) {
+ if ( $args{ $_ } ) {
+ $m->tick( $_ => 1 );
+ } else {
+ $m->untick( $_ => 1 );
+ }
+ }
+
+ $m->submit;
+ is $m->status, 200, "request successful";
+
+ unlike($m->content, qr/unable to sign outgoing email messages/);
+
+ $m->get_ok('/'); # ensure that the mail has been processed
+
+ my @mail = RT::Test->fetch_caught_mails;
+ check_text_emails( \%args, @mail );
+}
+
+sub update_ticket {
+ my $tid = shift;
+ my %args = (@_);
+
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->field( UpdateContent => 'Some content' );
+
+ foreach ( qw(Sign Encrypt) ) {
+ if ( $args{ $_ } ) {
+ $m->tick( $_ => 1 );
+ } else {
+ $m->untick( $_ => 1 );
+ }
+ }
+
+ $m->click('SubmitTicket');
+ is $m->status, 200, "request successful";
+ $m->content_like(qr/Message recorded/, 'Message recorded') or diag $m->content;
+
+ $m->get_ok('/'); # ensure that the mail has been processed
+
+ my @mail = RT::Test->fetch_caught_mails;
+ check_text_emails( \%args, @mail );
+}
+
+sub check_text_emails {
+ my %args = %{ shift @_ };
+ my @mail = @_;
+
+ ok scalar @mail, "got some mail";
+ for my $mail (@mail) {
+ if ( $args{'Encrypt'} ) {
+ unlike $mail, qr/Some content/, "outgoing email was encrypted";
+ } else {
+ like $mail, qr/Some content/, "outgoing email was not encrypted";
+ }
+ if ( $args{'Sign'} && $args{'Encrypt'} ) {
+ like $mail, qr/BEGIN PGP MESSAGE/, 'outgoing email was signed';
+ } elsif ( $args{'Sign'} ) {
+ like $mail, qr/SIGNATURE/, 'outgoing email was signed';
+ } else {
+ unlike $mail, qr/SIGNATURE/, 'outgoing email was not signed';
+ }
+ }
+ if ( $args{'Sign'} && $args{'Encrypt'} ) {
+ push @{ $mail{'signed_encrypted'} }, @mail;
+ } elsif ( $args{'Sign'} ) {
+ push @{ $mail{'signed'} }, @mail;
+ } elsif ( $args{'Encrypt'} ) {
+ push @{ $mail{'encrypted'} }, @mail;
+ } else {
+ push @{ $mail{'plain'} }, @mail;
+ }
+}
+
+sub cleanup_headers {
+ my $mail = shift;
+ # strip id from subject to create new ticket
+ $mail =~ s/^(Subject:)\s*\[.*?\s+#\d+\]\s*/$1 /m;
+ # strip several headers
+ foreach my $field ( qw(Message-ID X-RT-Original-Encoding RT-Originator RT-Ticket X-RT-Loop-Prevention) ) {
+ $mail =~ s/^$field:.*?\n(?! |\t)//gmsi;
+ }
+ return $mail;
+}
+
+sub set_queue_crypt_options {
+ my %args = @_;
+ $m->get_ok("/Admin/Queues/Modify.html?id=". $queue->id);
+ $m->form_with_fields('Sign', 'Encrypt');
+ foreach my $opt ('Sign', 'Encrypt') {
+ if ( $args{$opt} ) {
+ $m->tick($opt => 1);
+ } else {
+ $m->untick($opt => 1);
+ }
+ }
+ $m->submit;
+}
+
diff --git a/rt/t/web/gnupg-select-keys-on-create.t b/rt/t/web/gnupg-select-keys-on-create.t
new file mode 100644
index 0000000..deee6b2
--- /dev/null
+++ b/rt/t/web/gnupg-select-keys-on-create.t
@@ -0,0 +1,325 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use RT::Test tests => 60;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use RT::Action::SendEmail;
+use File::Temp qw(tempdir);
+
+RT::Test->set_mail_catcher;
+
+use_ok('RT::Crypt::GnuPG');
+
+RT->Config->Set( GnuPG =>
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC',
+);
+
+RT->Config->Set( GnuPGOptions =>
+ homedir => scalar tempdir( CLEANUP => 0 ),
+ passphrase => 'rt-test',
+ 'no-permission-warning' => undef,
+);
+diag "GnuPG --homedir ". RT->Config->Get('GnuPGOptions')->{'homedir'} if $ENV{TEST_VERBOSE};
+
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+my $queue = RT::Test->load_or_create_queue(
+ Name => 'Regression',
+ CorrespondAddress => 'rt-recipient@example.com',
+ CommentAddress => 'rt-recipient@example.com',
+);
+ok $queue && $queue->id, 'loaded or created queue';
+
+RT::Test->set_rights(
+ Principal => 'Everyone',
+ Right => ['CreateTicket', 'ShowTicket', 'SeeQueue', 'ReplyToTicket', 'ModifyTicket'],
+);
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in';
+
+diag "check that signing doesn't work if there is no key" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
+ $m->form_number(3);
+ $m->tick( Sign => 1 );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+ $m->submit;
+ $m->content_like(
+ qr/unable to sign outgoing email messages/i,
+ 'problems with passphrase'
+ );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+{
+ RT::Test->import_gnupg_key('rt-recipient@example.com');
+ RT::Test->trust_gnupg_key('rt-recipient@example.com');
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-recipient@example.com');
+ is $res{'info'}[0]{'TrustTerse'}, 'ultimate', 'ultimately trusted key';
+}
+
+diag "check that things don't work if there is no key" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There is no key suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok !$form->find_input( 'UseKey-rt-test@example.com' ), 'no key selector';
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+diag "import first key of rt-test\@example.com" if $ENV{TEST_VERBOSE};
+my $fpr1 = '';
+{
+ RT::Test->import_gnupg_key('rt-test@example.com', 'public');
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-test@example.com');
+ is $res{'info'}[0]{'TrustLevel'}, 0, 'is not trusted key';
+ $fpr1 = $res{'info'}[0]{'Fingerprint'};
+}
+
+diag "check that things still doesn't work if key is not trusted" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There is one suitable key, but trust level is not set/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 1, 'one option';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/Selected key either is not trusted/i,
+ 'problems with keys'
+ );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+diag "import a second key of rt-test\@example.com" if $ENV{TEST_VERBOSE};
+my $fpr2 = '';
+{
+ RT::Test->import_gnupg_key('rt-test@example.com.2', 'public');
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-test@example.com');
+ is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
+ $fpr2 = $res{'info'}[2]{'Fingerprint'};
+}
+
+diag "check that things still doesn't work if two keys are not trusted" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/Selected key either is not trusted/i,
+ 'problems with keys'
+ );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+{
+ RT::Test->lsign_gnupg_key( $fpr1 );
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-test@example.com');
+ ok $res{'info'}[0]{'TrustLevel'} > 0, 'trusted key';
+ is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
+}
+
+diag "check that we see key selector even if only one key is trusted but there are more keys";
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+diag "check that key selector works and we can select trusted key";
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->submit;
+ $m->content_like( qr/Ticket \d+ created in queue/i, 'ticket created' );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok @mail, 'there are some emails';
+ check_text_emails( { Encrypt => 1 }, @mail );
+}
+
+diag "check encrypting of attachments";
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( Requestors => 'rt-test@example.com' );
+ $m->field( Content => 'Some content' );
+ $m->field( Attach => $0 );
+ $m->submit;
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->submit;
+ $m->content_like( qr/Ticket \d+ created in queue/i, 'ticket created' );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok @mail, 'there are some emails';
+ check_text_emails( { Encrypt => 1, Attachment => 1 }, @mail );
+}
+
+sub check_text_emails {
+ my %args = %{ shift @_ };
+ my @mail = @_;
+
+ ok scalar @mail, "got some mail";
+ for my $mail (@mail) {
+ for my $type ('email', 'attachment') {
+ next if $type eq 'attachment' && !$args{'Attachment'};
+
+ my $content = $type eq 'email'
+ ? "Some content"
+ : "Attachment content";
+
+ if ( $args{'Encrypt'} ) {
+ unlike $mail, qr/$content/, "outgoing $type was encrypted";
+ } else {
+ like $mail, qr/$content/, "outgoing $type was not encrypted";
+ }
+
+ next unless $type eq 'email';
+
+ if ( $args{'Sign'} && $args{'Encrypt'} ) {
+ like $mail, qr/BEGIN PGP MESSAGE/, 'outgoing email was signed';
+ } elsif ( $args{'Sign'} ) {
+ like $mail, qr/SIGNATURE/, 'outgoing email was signed';
+ } else {
+ unlike $mail, qr/SIGNATURE/, 'outgoing email was not signed';
+ }
+ }
+ }
+}
+
diff --git a/rt/t/web/gnupg-select-keys-on-update.t b/rt/t/web/gnupg-select-keys-on-update.t
new file mode 100644
index 0000000..76817dd
--- /dev/null
+++ b/rt/t/web/gnupg-select-keys-on-update.t
@@ -0,0 +1,344 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use RT::Test tests => 68;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+
+use RT::Action::SendEmail;
+use File::Temp qw(tempdir);
+
+RT::Test->set_mail_catcher;
+
+use_ok('RT::Crypt::GnuPG');
+
+RT->Config->Set( GnuPG =>
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC',
+);
+
+RT->Config->Set( GnuPGOptions =>
+ homedir => scalar tempdir( CLEANUP => 0 ),
+ passphrase => 'rt-test',
+ 'no-permission-warning' => undef,
+);
+diag "GnuPG --homedir ". RT->Config->Get('GnuPGOptions')->{'homedir'} if $ENV{TEST_VERBOSE};
+
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+my $queue = RT::Test->load_or_create_queue(
+ Name => 'Regression',
+ CorrespondAddress => 'rt-recipient@example.com',
+ CommentAddress => 'rt-recipient@example.com',
+);
+ok $queue && $queue->id, 'loaded or created queue';
+
+RT::Test->set_rights(
+ Principal => 'Everyone',
+ Right => ['CreateTicket', 'ShowTicket', 'SeeQueue', 'ReplyToTicket', 'ModifyTicket'],
+);
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in';
+
+
+my $tid;
+{
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ ($tid) = $ticket->Create(
+ Subject => 'test',
+ Queue => $queue->id,
+ );
+ ok $tid, 'ticket created';
+}
+
+diag "check that signing doesn't work if there is no key" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->tick( Sign => 1 );
+ $m->field( UpdateCc => 'rt-test@example.com' );
+ $m->field( UpdateContent => 'Some content' );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/unable to sign outgoing email messages/i,
+ 'problems with passphrase'
+ );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+{
+ RT::Test->import_gnupg_key('rt-recipient@example.com');
+ RT::Test->trust_gnupg_key('rt-recipient@example.com');
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-recipient@example.com');
+ is $res{'info'}[0]{'TrustTerse'}, 'ultimate', 'ultimately trusted key';
+}
+
+diag "check that things don't work if there is no key" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( UpdateCc => 'rt-test@example.com' );
+ $m->field( UpdateContent => 'Some content' );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There is no key suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok !$form->find_input( 'UseKey-rt-test@example.com' ), 'no key selector';
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+
+diag "import first key of rt-test\@example.com" if $ENV{TEST_VERBOSE};
+my $fpr1 = '';
+{
+ RT::Test->import_gnupg_key('rt-test@example.com', 'public');
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-test@example.com');
+ is $res{'info'}[0]{'TrustLevel'}, 0, 'is not trusted key';
+ $fpr1 = $res{'info'}[0]{'Fingerprint'};
+}
+
+diag "check that things still doesn't work if key is not trusted" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( UpdateCc => 'rt-test@example.com' );
+ $m->field( UpdateContent => 'Some content' );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There is one suitable key, but trust level is not set/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 1, 'one option';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/Selected key either is not trusted/i,
+ 'problems with keys'
+ );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+diag "import a second key of rt-test\@example.com" if $ENV{TEST_VERBOSE};
+my $fpr2 = '';
+{
+ RT::Test->import_gnupg_key('rt-test@example.com.2', 'public');
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-test@example.com');
+ is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
+ $fpr2 = $res{'info'}[2]{'Fingerprint'};
+}
+
+diag "check that things still doesn't work if two keys are not trusted" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( UpdateCc => 'rt-test@example.com' );
+ $m->field( UpdateContent => 'Some content' );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/Selected key either is not trusted/i,
+ 'problems with keys'
+ );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+{
+ RT::Test->lsign_gnupg_key( $fpr1 );
+ my %res = RT::Crypt::GnuPG::GetKeysInfo('rt-test@example.com');
+ ok $res{'info'}[0]{'TrustLevel'} > 0, 'trusted key';
+ is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
+}
+
+diag "check that we see key selector even if only one key is trusted but there are more keys" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( UpdateCc => 'rt-test@example.com' );
+ $m->field( UpdateContent => 'Some content' );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok !@mail, 'there are no outgoing emails';
+}
+
+diag "check that key selector works and we can select trusted key" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( UpdateCc => 'rt-test@example.com' );
+ $m->field( UpdateContent => 'Some content' );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->click('SubmitTicket');
+ $m->content_like( qr/Message recorded/i, 'Message recorded' );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok @mail, 'there are some emails';
+ check_text_emails( { Encrypt => 1 }, @mail );
+}
+
+diag "check encrypting of attachments" if $ENV{TEST_VERBOSE};
+{
+ RT::Test->clean_caught_mails;
+
+ ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
+ $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
+ $m->form_number(3);
+ $m->tick( Encrypt => 1 );
+ $m->field( UpdateCc => 'rt-test@example.com' );
+ $m->field( UpdateContent => 'Some content' );
+ $m->field( Attach => $0 );
+ $m->click('SubmitTicket');
+ $m->content_like(
+ qr/You are going to encrypt outgoing email messages/i,
+ 'problems with keys'
+ );
+ $m->content_like(
+ qr/There are several keys suitable for encryption/i,
+ 'problems with keys'
+ );
+
+ my $form = $m->form_number(3);
+ ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
+ is scalar $input->possible_values, 2, 'two options';
+
+ $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
+ $m->click('SubmitTicket');
+ $m->content_like( qr/Message recorded/i, 'Message recorded' );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ ok @mail, 'there are some emails';
+ check_text_emails( { Encrypt => 1, Attachment => 1 }, @mail );
+}
+
+sub check_text_emails {
+ my %args = %{ shift @_ };
+ my @mail = @_;
+
+ ok scalar @mail, "got some mail";
+ for my $mail (@mail) {
+ for my $type ('email', 'attachment') {
+ next if $type eq 'attachment' && !$args{'Attachment'};
+
+ my $content = $type eq 'email'
+ ? "Some content"
+ : "Attachment content";
+
+ if ( $args{'Encrypt'} ) {
+ unlike $mail, qr/$content/, "outgoing $type was encrypted";
+ } else {
+ like $mail, qr/$content/, "outgoing $type was not encrypted";
+ }
+
+ next unless $type eq 'email';
+
+ if ( $args{'Sign'} && $args{'Encrypt'} ) {
+ like $mail, qr/BEGIN PGP MESSAGE/, 'outgoing email was signed';
+ } elsif ( $args{'Sign'} ) {
+ like $mail, qr/SIGNATURE/, 'outgoing email was signed';
+ } else {
+ unlike $mail, qr/SIGNATURE/, 'outgoing email was not signed';
+ }
+ }
+ }
+}
+
diff --git a/rt/t/web/offline_messages_utf8.t b/rt/t/web/offline_messages_utf8.t
new file mode 100644
index 0000000..c32e0bc
--- /dev/null
+++ b/rt/t/web/offline_messages_utf8.t
@@ -0,0 +1,67 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 6;
+use File::Temp qw/tempfile/;
+use Encode;
+use RT::Ticket;
+
+my ( $url, $m ) = RT::Test->started_ok;
+$m->default_header( 'Accept-Language' => "zh-cn" );
+ok( $m->login, 'logged in' );
+
+my $ticket_id;
+my $template;
+
+{
+
+ # test create message
+ $template = <<EOF;
+===Create-Ticket: ticket1
+Queue: General
+Subject: test message
+Status: new
+Content:
+ENDOFCONTENT
+Due:
+TimeEstimated: 100
+TimeLeft: 100
+FinalPriority: 90
+EOF
+
+ $m->get_ok( $url . '/Tools/Offline.html' );
+
+ $m->submit_form(
+ form_name => 'TicketUpdate',
+ fields => { string => $template, },
+ button => 'UpdateTickets',
+ );
+ my $content = encode 'utf8', $m->content;
+ ok( $content =~ qr/ç”³è¯·å• #(\d+) æˆåŠŸæ–°å¢žäºŽ &#39;General&#39; 表å•/, 'message is shown right' );
+ $ticket_id = $1;
+}
+
+{
+
+ # test update message
+ $template = <<EOF;
+===Update-Ticket: 1
+Subject: test message update
+EOF
+
+ $m->get_ok( $url . '/Tools/Offline.html' );
+ $m->submit_form(
+ form_name => 'TicketUpdate',
+ fields => { string => $template, },
+ button => 'UpdateTickets',
+ );
+
+ my $content = encode 'utf8', $m->content;
+ ok(
+ $content =~
+qr/主题\s*的值从\s*&#39;test message&#39;\s*改为\s*&#39;test message update&#39;/,
+ 'subject is updated'
+ );
+}
+
diff --git a/rt/t/web/offline_utf8.t b/rt/t/web/offline_utf8.t
new file mode 100644
index 0000000..2a3e64d
--- /dev/null
+++ b/rt/t/web/offline_utf8.t
@@ -0,0 +1,54 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 8;
+use File::Temp qw/tempfile/;
+use Encode;
+use RT::Ticket;
+my ( $fh, $file ) = tempfile;
+my $template = <<EOF;
+===Create-Ticket: ticket1
+Queue: General
+Subject: 标题
+Status: new
+Content:
+这是正文
+ENDOFCONTENT
+EOF
+
+print $fh $template;
+close $fh;
+
+my ( $url, $m ) = RT::Test->started_ok;
+ok( $m->login, 'logged in' );
+
+$m->get_ok( $url . '/Tools/Offline.html' );
+
+$m->submit_form(
+ form_name => 'TicketUpdate',
+ fields => { Template => $file, },
+ button => 'Parse',
+);
+
+$m->content_contains( '这是正文', 'content is parsed right' );
+
+$m->submit_form(
+ form_name => 'TicketUpdate',
+ button => 'UpdateTickets',
+
+ # mimic what browsers do: they seems decoded $template
+ fields => { string => decode( 'utf8', $template ), },
+);
+
+$m->content_like( qr/Ticket \d+ created/, 'found ticket created message' );
+my ( $ticket_id ) = $m->content =~ /Ticket (\d+) created/;
+
+my $ticket = RT::Ticket->new( $RT::SystemUser );
+$ticket->Load( $ticket_id );
+is( $ticket->Subject, '标题', 'subject in $ticket is right' );
+
+$m->get_ok( $url . "/Ticket/Display.html?id=$ticket_id" );
+$m->content_contains( '这是正文',
+ 'content is right in ticket display page' );
+
diff --git a/rt/t/web/query_builder.t b/rt/t/web/query_builder.t
new file mode 100644
index 0000000..02ed129
--- /dev/null
+++ b/rt/t/web/query_builder.t
@@ -0,0 +1,249 @@
+#!/usr/bin/perl
+
+use strict;
+use HTTP::Request::Common;
+use HTTP::Cookies;
+use LWP;
+use Encode;
+use RT::Test tests => 42;
+
+my $cookie_jar = HTTP::Cookies->new;
+my ($baseurl, $agent) = RT::Test->started_ok;
+
+
+# give the agent a place to stash the cookies
+
+$agent->cookie_jar($cookie_jar);
+
+# create a regression queue if it doesn't exist
+my $queue = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $queue && $queue->id, 'loaded or created queue';
+
+my $url = $agent->rt_base_url;
+ok $agent->login, "logged in";
+
+# {{{ Query Builder tests
+
+my $response = $agent->get($url."Search/Build.html");
+ok $response->is_success, "Fetched ". $url ."Search/Build.html";
+
+sub getQueryFromForm {
+ $agent->form_name('BuildQuery');
+ # This pulls out the "hidden input" query from the page
+ my $q = $agent->current_form->find_input("Query")->value;
+ $q =~ s/^\s+//g;
+ $q =~ s/\s+$//g;
+ $q =~ s/\s+/ /g;
+ return $q;
+}
+
+sub selectedClauses {
+ my @clauses = grep { defined } map { $_->value } $agent->current_form->find_input("clauses");
+ return [ @clauses ];
+}
+
+
+diag "add the first condition" if $ENV{'TEST_VERBOSE'};
+{
+ ok $agent->form_name('BuildQuery'), "found the form once";
+ $agent->field("ActorField", "Owner");
+ $agent->field("ActorOp", "=");
+ $agent->field("ValueOfActor", "Nobody");
+ $agent->submit;
+ is getQueryFromForm, "Owner = 'Nobody'", 'correct query';
+}
+
+diag "set the next condition" if $ENV{'TEST_VERBOSE'};
+{
+ ok($agent->form_name('BuildQuery'), "found the form again");
+ $agent->field("QueueOp", "!=");
+ $agent->field("ValueOfQueue", "Regression");
+ $agent->submit;
+ is getQueryFromForm, "Owner = 'Nobody' AND Queue != 'Regression'",
+ 'correct query';
+}
+
+diag "We're going to delete the owner" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->select("clauses", ["0"] );
+ $agent->click("DeleteClause");
+ ok $agent->form_name('BuildQuery'), "found the form";
+ is getQueryFromForm, "Queue != 'Regression'", 'correct query';
+}
+
+diag "add a cond with OR and se number by the way" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->field("AndOr", "OR");
+ $agent->select("idOp", ">");
+ $agent->field("ValueOfid" => "1234");
+ $agent->click("AddClause");
+ ok $agent->form_name('BuildQuery'), "found the form again";
+ is getQueryFromForm, "Queue != 'Regression' OR id > 1234",
+ "added something as OR, and number not quoted";
+ is_deeply selectedClauses, ["1"], 'the id that we just entered is still selected';
+
+}
+
+diag "Move the second one up a level" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->click("Up");
+ ok $agent->form_name('BuildQuery'), "found the form again";
+ is getQueryFromForm, "id > 1234 OR Queue != 'Regression'", "moved up one";
+ is_deeply selectedClauses, ["0"], 'the one we moved up is selected';
+}
+
+diag "Move the second one right" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->click("Right");
+ ok $agent->form_name('BuildQuery'), "found the form again";
+ is getQueryFromForm, "Queue != 'Regression' OR ( id > 1234 )",
+ "moved over to the right (and down)";
+ is_deeply selectedClauses, ["2"], 'the one we moved right is selected';
+}
+
+diag "Move the block up" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->select("clauses", ["1"]);
+ $agent->click("Up");
+ ok $agent->form_name('BuildQuery'), "found the form again";
+ is getQueryFromForm, "( id > 1234 ) OR Queue != 'Regression'", "moved up";
+ is_deeply selectedClauses, ["0"], 'the one we moved up is selected';
+}
+
+
+diag "Can not move up the top most clause" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->select("clauses", ["0"]);
+ $agent->click("Up");
+ ok $agent->form_name('BuildQuery'), "found the form again";
+ $agent->content_like(qr/error: can\S+t move up/, "i shouldn't have been able to hit up");
+ is_deeply selectedClauses, ["0"], 'the one we tried to move is selected';
+}
+
+diag "Can not move left the left most clause" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->click("Left");
+ ok($agent->form_name('BuildQuery'), "found the form again");
+ $agent->content_like(qr/error: can\S+t move left/, "i shouldn't have been able to hit left");
+ is_deeply selectedClauses, ["0"], 'the one we tried to move is selected';
+}
+
+diag "Add a condition into a nested block" if $ENV{'TEST_VERBOSE'};
+{
+ $agent->select("clauses", ["1"]);
+ $agent->select("ValueOfStatus" => "stalled");
+ $agent->submit;
+ ok $agent->form_name('BuildQuery'), "found the form again";
+ is_deeply selectedClauses, ["2"], 'the one we added is only selected';
+ is getQueryFromForm,
+ "( id > 1234 AND Status = 'stalled' ) OR Queue != 'Regression'",
+ "added new one";
+}
+
+diag "click advanced, enter 'C1 OR ( C2 AND C3 )', apply, aggregators should stay the same."
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $response = $agent->get($url."Search/Edit.html");
+ ok( $response->is_success, "Fetched /Search/Edit.html" );
+ ok($agent->form_number(3), "found the form");
+ $agent->field("Query", "Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )");
+ $agent->submit;
+ is( getQueryFromForm,
+ "Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )",
+ "no aggregators change"
+ );
+}
+
+# - new items go one level down
+# - add items at currently selected level
+# - if nothing is selected, add at end, one level down
+#
+# move left
+# - error if nothing selected
+# - same item should be selected after move
+# - can't move left if you're at the top level
+#
+# move right
+# - error if nothing selected
+# - same item should be selected after move
+# - can always move right (no max depth...should there be?)
+#
+# move up
+# - error if nothing selected
+# - same item should be selected after move
+# - can't move up if you're first in the list
+#
+# move down
+# - error if nothing selected
+# - same item should be selected after move
+# - can't move down if you're last in the list
+#
+# toggle
+# - error if nothing selected
+# - change all aggregators in the grouping
+# - don't change any others
+#
+# delete
+# - error if nothing selected
+# - delete currently selected item
+# - delete all children of a grouping
+# - if delete leaves a node with no children, delete that, too
+# - what should be selected?
+#
+# Clear
+# - clears entire query
+# - clears it from the session, too
+
+# }}}
+
+# create a custom field with nonascii name and try to add a condition
+{
+ my $cf = RT::CustomField->new( $RT::SystemUser );
+ $cf->LoadByName( Name => "\x{442}", Queue => 0 );
+ if ( $cf->id ) {
+ is($cf->Type, 'Freeform', 'loaded and type is correct');
+ } else {
+ my ($return, $msg) = $cf->Create(
+ Name => "\x{442}",
+ Queue => 0,
+ Type => 'Freeform',
+ );
+ ok($return, 'created CF') or diag "error: $msg";
+ }
+
+ my $response = $agent->get($url."Search/Build.html?NewQuery=1");
+ ok( $response->is_success, "Fetched " . $url."Search/Build.html" );
+
+ ok($agent->form_name('BuildQuery'), "found the form once");
+ $agent->field("ValueOf'CF.{\x{442}}'", "\x{441}");
+ $agent->submit();
+ is( getQueryFromForm,
+ "'CF.{\x{442}}' LIKE '\x{441}'",
+ "no changes, no duplicate condition with badly encoded text"
+ );
+
+}
+
+diag "input a condition, select (several conditions), click delete"
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $response = $agent->get( $url."Search/Edit.html" );
+ ok $response->is_success, "Fetched /Search/Edit.html";
+ ok $agent->form_number(3), "found the form";
+ $agent->field("Query", "( Status = 'new' OR Status = 'open' )");
+ $agent->submit;
+ is( getQueryFromForm,
+ "( Status = 'new' OR Status = 'open' )",
+ "query is the same"
+ );
+ $agent->select("clauses", [qw(0 1 2)]);
+ $agent->field( ValueOfid => 10 );
+ $agent->click("DeleteClause");
+
+ is( getQueryFromForm,
+ "id < 10",
+ "replaced query successfuly"
+ );
+}
+
+1;
diff --git a/rt/t/web/quicksearch.t b/rt/t/web/quicksearch.t
new file mode 100644
index 0000000..cd9a8e7
--- /dev/null
+++ b/rt/t/web/quicksearch.t
@@ -0,0 +1,51 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 7;
+my ($baseurl, $m) = RT::Test->started_ok;
+my $url = $m->rt_base_url;
+
+# merged tickets still show up in search
+my $t1 = RT::Ticket->new($RT::SystemUser);
+$t1->Create(
+ Subject => 'base ticket'.$$,
+ Queue => 'general',
+ Owner => 'root',
+ Requestor => 'customsearch@localhost',
+ MIMEObj => MIME::Entity->build(
+ From => 'customsearch@localhost',
+ To => 'rt@localhost',
+ Subject => 'base ticket'.$$,
+ Data => "DON'T SEARCH FOR ME",
+ ),
+);
+ok(my $id1 = $t1->id, 'created ticket for custom search');
+
+my $t2 = RT::Ticket->new($RT::SystemUser);
+$t2->Create(
+ Subject => 'merged away'.$$,
+ Queue => 'general',
+ Owner => 'root',
+ Requestor => 'customsearch@localhost',
+ MIMEObj => MIME::Entity->build(
+ From => 'customsearch@localhost',
+ To => 'rt@localhost',
+ Subject => 'merged away'.$$,
+ Data => "MERGEDAWAY",
+ ),
+);
+ok(my $id2 = $t2->id, 'created ticket for custom search');
+
+my ($ok, $msg) = $t2->MergeInto($id1);
+ok($ok, "merge: $msg");
+
+ok($m->login, 'logged in');
+
+$m->form_with_fields('q');
+$m->field(q => 'fulltext:MERGEDAWAY');
+TODO: {
+ local $TODO = "We don't yet handle merged ticket content searches right";
+$m->content_contains('Found 1 ticket');
+}
+$m->content_contains('base ticket', "base ticket is found, not the merged-away ticket");
diff --git a/rt/t/web/rest-non-ascii-subject.t b/rt/t/web/rest-non-ascii-subject.t
new file mode 100644
index 0000000..70c910a
--- /dev/null
+++ b/rt/t/web/rest-non-ascii-subject.t
@@ -0,0 +1,55 @@
+#!/usr/bin/env perl
+# Test ticket creation with REST using non ascii subject
+use strict;
+use warnings;
+use RT::Test tests => 7;
+
+local $RT::Test::SKIP_REQUEST_WORK_AROUND = 1;
+
+use Encode;
+# \x{XX} where XX is less than 255 is not treated as unicode code point
+my $subject = Encode::decode('latin1', "Sujet accentu\x{e9}");
+my $text = Encode::decode('latin1', "Contenu accentu\x{e9}");
+
+my ($baseurl, $m) = RT::Test->started_ok;
+
+my $queue = RT::Test->load_or_create_queue(Name => 'General');
+ok($queue->Id, "loaded the General queue");
+
+my $content = "id: ticket/new
+Queue: General
+Requestor: root
+Subject: $subject
+Cc:
+AdminCc:
+Owner:
+Status: new
+Priority:
+InitialPriority:
+FinalPriority:
+TimeEstimated:
+Starts: 2009-03-10 16:14:55
+Due: 2009-03-10 16:14:55
+Text: $text";
+
+$m->post("$baseurl/REST/1.0/ticket/new", [
+ user => 'root',
+ pass => 'password',
+# error message from HTTP::Message: content must be bytes
+ content => Encode::encode_utf8($content),
+], Content_Type => 'form-data' );
+
+my ($id) = $m->content =~ /Ticket (\d+) created/;
+ok($id, "got ticket #$id");
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+$ticket->Load($id);
+is($ticket->Id, $id, "loaded the REST-created ticket");
+is($ticket->Subject, $subject, "ticket subject successfully set");
+
+my $attach = $ticket->Transactions->First->Attachments->First;
+is($attach->Subject, $subject, "attachement subject successfully set");
+TODO: {
+ local $TODO = "Not fixed yet, but not a regression";
+ is($attach->GetHeader('Subject'), $subject, "attachement header subject successfully set");
+}
diff --git a/rt/t/web/rest.t b/rt/t/web/rest.t
new file mode 100644
index 0000000..b3a7c55
--- /dev/null
+++ b/rt/t/web/rest.t
@@ -0,0 +1,71 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use RT::Test tests => 16;
+
+my ($baseurl, $m) = RT::Test->started_ok;
+
+for my $name ("severity", "fu()n:k/") {
+ my $cf = RT::Test->load_or_create_custom_field(
+ Name => $name,
+ Type => 'Freeform',
+ Queue => 'General',
+ );
+ ok($cf->Id, "created a CustomField");
+ is($cf->Name, $name, "correct CF name");
+}
+
+my $queue = RT::Test->load_or_create_queue(Name => 'General');
+ok($queue->Id, "loaded the General queue");
+
+$m->post("$baseurl/REST/1.0/ticket/new", [
+ user => 'root',
+ pass => 'password',
+ format => 'l',
+]);
+
+my $text = $m->content;
+my @lines = $text =~ m{.*}g;
+shift @lines; # header
+
+# CFs aren't in the default ticket form
+push @lines, "CF-fu()n:k/: maximum"; # old style
+push @lines, "CF.{severity}: explosive"; # new style
+
+$text = join "\n", @lines;
+
+ok($text =~ s/Subject:\s*$/Subject: REST interface/m, "successfully replaced subject");
+
+$m->post("$baseurl/REST/1.0/ticket/edit", [
+ user => 'root',
+ pass => 'password',
+
+ content => $text,
+], Content_Type => 'form-data');
+
+my ($id) = $m->content =~ /Ticket (\d+) created/;
+ok($id, "got ticket #$id");
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+$ticket->Load($id);
+is($ticket->Id, $id, "loaded the REST-created ticket");
+is($ticket->Subject, "REST interface", "subject successfully set");
+is($ticket->FirstCustomFieldValue("fu()n:k/"), "maximum", "CF successfully set");
+
+$m->post("$baseurl/REST/1.0/search/ticket", [
+ user => 'root',
+ pass => 'password',
+ query => "id=$id",
+ fields => "Subject,CF-fu()n:k/,CF.{severity},Status",
+]);
+
+# the fields are interpreted server-side a hash (why?), so we can't depend
+# on order
+for ("id: ticket/1",
+ "Subject: REST interface",
+ "CF.{fu()n:k/}: maximum",
+ "CF.{severity}: explosive",
+ "Status: new") {
+ $m->content_contains($_);
+}
+
diff --git a/rt/t/web/rights.t b/rt/t/web/rights.t
new file mode 100644
index 0000000..b47ba99
--- /dev/null
+++ b/rt/t/web/rights.t
@@ -0,0 +1,85 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use RT::Test tests => 14;
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, "logged in";
+
+$m->follow_link_ok({ text => 'Configuration' });
+$m->follow_link_ok({ text => 'Global' });
+$m->follow_link_ok({ text => 'Group Rights' });
+
+
+sub get_rights {
+ my $agent = shift;
+ my $principal_id = shift;
+ my $object = shift;
+ $agent->form_number(3);
+ my @inputs = $agent->current_form->find_input("RevokeRight-$principal_id-$object");
+ my @rights = sort grep $_, map $_->possible_values, grep $_, @inputs;
+ return @rights;
+};
+
+diag "load Everyone group" if $ENV{'TEST_VERBOSE'};
+my ($everyone, $everyone_gid);
+{
+ $everyone = RT::Group->new( $RT::SystemUser );
+ $everyone->LoadSystemInternalGroup('Everyone');
+ ok($everyone_gid = $everyone->id, "loaded 'everyone' group");
+}
+
+diag "revoke all global rights from Everyone group" if $ENV{'TEST_VERBOSE'};
+my @has = get_rights( $m, $everyone_gid, 'RT::System-1' );
+if ( @has ) {
+ $m->form_number(3);
+ $m->tick("RevokeRight-$everyone_gid-RT::System-1", $_) foreach @has;
+ $m->submit;
+
+ is_deeply([get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'deleted all rights' );
+} else {
+ ok(1, 'the group has no global rights');
+}
+
+diag "grant SuperUser right to everyone" if $ENV{'TEST_VERBOSE'};
+{
+ $m->form_number(3);
+ $m->select("GrantRight-$everyone_gid-RT::System-1", ['SuperUser']);
+ $m->submit;
+
+ $m->content_contains('Right Granted', 'got message');
+ RT::Principal::InvalidateACLCache();
+ ok($everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has right');
+ is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], ['SuperUser'], 'granted SuperUser right' );
+}
+
+diag "revoke the right" if $ENV{'TEST_VERBOSE'};
+{
+ $m->form_number(3);
+ $m->tick("RevokeRight-$everyone_gid-RT::System-1", 'SuperUser');
+ $m->submit;
+
+ $m->content_contains('Right revoked', 'got message');
+ RT::Principal::InvalidateACLCache();
+ ok(!$everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has no right');
+ is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'revoked SuperUser right' );
+}
+
+
+diag "return rights the group had in the beginning" if $ENV{'TEST_VERBOSE'};
+if ( @has ) {
+ $m->form_number(3);
+ $m->select("GrantRight-$everyone_gid-RT::System-1", \@has);
+ $m->submit;
+
+ $m->content_contains('Right Granted', 'got message');
+ is_deeply(
+ [ get_rights( $m, $everyone_gid, 'RT::System-1' ) ],
+ [ @has ],
+ 'returned back all rights'
+ );
+} else {
+ ok(1, 'the group had no global rights, so nothing to return');
+}
+
diff --git a/rt/t/web/rights1.t b/rt/t/web/rights1.t
new file mode 100644
index 0000000..6da204c
--- /dev/null
+++ b/rt/t/web/rights1.t
@@ -0,0 +1,134 @@
+#!/usr/bin/perl -w
+use strict;
+use HTTP::Cookies;
+
+use RT::Test tests => 35;
+my ($baseurl, $agent) = RT::Test->started_ok;
+
+# Create a user with basically no rights, to start.
+my $user_obj = RT::User->new($RT::SystemUser);
+my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('customer-'.$$.'@example.com');
+ok($ret, 'ACL test user creation');
+$user_obj->SetName('customer-'.$$);
+$user_obj->SetPrivileged(1);
+($ret, $msg) = $user_obj->SetPassword('customer');
+ok($ret, "ACL test password set. $msg");
+
+# Now test the web interface, making sure objects come and go as
+# required.
+
+
+my $cookie_jar = HTTP::Cookies->new;
+
+# give the agent a place to stash the cookies
+
+$agent->cookie_jar($cookie_jar);
+
+no warnings 'once';
+# get the top page
+login($agent, $user_obj);
+
+# Test for absence of Configure and Preferences tabs.
+ok(!$agent->find_link( url => "$RT::WebPath/Admin/",
+ text => 'Configuration'), "No config tab" );
+ok(!$agent->find_link( url => "$RT::WebPath/User/Prefs.html",
+ text => 'Preferences'), "No prefs pane" );
+
+# Now test for their presence, one at a time. Sleep for a bit after
+# ACL changes, thanks to the 10s ACL cache.
+my ($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'ShowConfigTab', Object => $RT::System);
+
+ok($grantid,$grantmsg);
+
+$agent->reload;
+
+like($agent->{'content'} , qr/Logout/i, "Reloaded page successfully");
+ok($agent->find_link( url => "$RT::WebPath/Admin/",
+ text => 'Configuration'), "Found config tab" );
+my ($revokeid,$revokemsg) =$user_obj->PrincipalObj->RevokeRight(Right => 'ShowConfigTab');
+ok ($revokeid,$revokemsg);
+($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
+ok ($grantid,$grantmsg);
+$agent->reload();
+like($agent->{'content'} , qr/Logout/i, "Reloaded page successfully");
+ok($agent->find_link(
+ text => 'Preferences'), "Found prefs pane" );
+($revokeid,$revokemsg) = $user_obj->PrincipalObj->RevokeRight(Right => 'ModifySelf');
+ok ($revokeid,$revokemsg);
+# Good. Now load the search page and test Load/Save Search.
+$agent->follow_link( url => "$RT::WebPath/Search/Build.html",
+ text => 'Tickets');
+is($agent->{'status'}, 200, "Fetched search builder page");
+ok($agent->{'content'} !~ /Load saved search/i, "No search loading box");
+ok($agent->{'content'} !~ /Saved searches/i, "No saved searches box");
+
+($grantid,$grantmsg) = $user_obj->PrincipalObj->GrantRight(Right => 'LoadSavedSearch');
+ok($grantid,$grantmsg);
+$agent->reload();
+like($agent->{'content'} , qr/Load saved search/i, "Search loading box exists");
+ok($agent->{'content'} !~ /input\s+type=['"]submit['"][^>]+name=['"]SavedSearchSave['"]/i,
+ "Still no saved searches box");
+
+($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'CreateSavedSearch');
+ok ($grantid,$grantmsg);
+$agent->reload();
+like($agent->{'content'} , qr/Load saved search/i,
+ "Search loading box still exists");
+like($agent->{'content'} , qr/input\s+type=['"]submit['"][^>]+name=['"]SavedSearchSave['"]/i,
+ "Saved searches box exists");
+
+# Create a group, and a queue, so we can test limited user visibility
+# via SelectOwner.
+
+my $queue_obj = RT::Queue->new($RT::SystemUser);
+($ret, $msg) = $queue_obj->Create(Name => 'CustomerQueue-'.$$,
+ Description => 'queue for SelectOwner testing');
+ok($ret, "SelectOwner test queue creation. $msg");
+my $group_obj = RT::Group->new($RT::SystemUser);
+($ret, $msg) = $group_obj->CreateUserDefinedGroup(Name => 'CustomerGroup-'.$$,
+ Description => 'group for SelectOwner testing');
+ok($ret, "SelectOwner test group creation. $msg");
+
+# Add our customer to the customer group, and give it queue rights.
+($ret, $msg) = $group_obj->AddMember($user_obj->PrincipalObj->Id());
+ok($ret, "Added customer to its group. $msg");
+($grantid,$grantmsg) =$group_obj->PrincipalObj->GrantRight(Right => 'OwnTicket',
+ Object => $queue_obj);
+
+ok($grantid,$grantmsg);
+($grantid,$grantmsg) =$group_obj->PrincipalObj->GrantRight(Right => 'SeeQueue',
+ Object => $queue_obj);
+ok ($grantid,$grantmsg);
+# Now. When we look at the search page we should be able to see
+# ourself in the list of possible owners.
+
+$agent->reload();
+ok($agent->form_name('BuildQuery'), "Yep, form is still there");
+my $input = $agent->current_form->find_input('ValueOfActor');
+ok(grep(/customer-$$/, $input->value_names()), "Found self in the actor listing");
+
+sub login {
+ my $agent = shift;
+
+ my $url = "http://localhost:" . RT->Config->Get('WebPort') . RT->Config->Get('WebPath') . "/";
+ $agent->get($url);
+ is( $agent->{'status'}, 200,
+ "Loaded a page - http://localhost" . RT->Config->Get('WebPath') );
+
+ # {{{ test a login
+
+ # follow the link marked "Login"
+
+ ok( $agent->{form}->find_input('user') );
+
+ ok( $agent->{form}->find_input('pass') );
+ like( $agent->{'content'} , qr/username:/i );
+ $agent->field( 'user' => $user_obj->Name );
+ $agent->field( 'pass' => 'customer' );
+
+ # the field isn't named, so we have to click link 0
+ $agent->click(0);
+ is( $agent->{'status'}, 200, "Fetched the page ok" );
+ like( $agent->{'content'} , qr/Logout/i, "Found a logout link" );
+}
+1;
diff --git a/rt/t/web/saved_search_chart.t b/rt/t/web/saved_search_chart.t
new file mode 100644
index 0000000..1051662
--- /dev/null
+++ b/rt/t/web/saved_search_chart.t
@@ -0,0 +1,86 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 19;
+my ( $url, $m ) = RT::Test->started_ok;
+use RT::Attribute;
+my $search = RT::Attribute->new($RT::SystemUser);
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ( $ret, $msg ) = $ticket->Create(
+ Subject => 'base ticket' . $$,
+ Queue => 'general',
+ Owner => 'root',
+ Requestor => 'root@localhost',
+ MIMEObj => MIME::Entity->build(
+ From => 'root@localhost',
+ To => 'rt@localhost',
+ Subject => 'base ticket' . $$,
+ Data => "",
+ ),
+);
+ok( $ret, "ticket created: $msg" );
+
+ok( $m->login, 'logged in' );
+
+$m->get_ok( $url . "/Search/Chart.html?Query=" . 'id=1' );
+my ($owner) = $m->content =~ /value="(RT::User-\d+)"/;
+
+$m->submit_form(
+ form_name => 'SaveSearch',
+ fields => {
+ SavedSearchDescription => 'first chart',
+ SavedSearchOwner => $owner,
+ },
+ button => 'SavedSearchSave',
+);
+
+$m->content_like( qr/Chart first chart saved/, 'saved first chart' );
+
+my ( $search_uri, $id ) = $m->content =~ /value="(RT::User-\d+-SavedSearch-(\d+))"/;
+$m->submit_form(
+ form_name => 'SaveSearch',
+ fields => { SavedSearchLoad => $search_uri },
+);
+
+$m->content_like( qr/name="SavedSearchDelete"\s+value="Delete"/,
+ 'found Delete button' );
+$m->content_like(
+ qr/name="SavedSearchDescription"\s+value="first chart"/,
+ 'found Description input with the value filled'
+);
+$m->content_like( qr/name="SavedSearchSave"\s+value="Update"/,
+ 'found Update button' );
+$m->content_unlike( qr/name="SavedSearchSave"\s+value="Save"/,
+ 'no Save button' );
+
+$m->submit_form(
+ form_name => 'SaveSearch',
+ fields => {
+ Query => 'id=2',
+ PrimaryGroupBy => 'Status',
+ ChartStyle => 'pie',
+ },
+ button => 'SavedSearchSave',
+);
+
+$m->content_like( qr/Chart first chart updated/, 'found updated message' );
+$m->content_like( qr/id=2/, 'Query is updated' );
+$m->content_like( qr/value="Status"\s+selected="selected"/,
+ 'PrimaryGroupBy is updated' );
+$m->content_like( qr/value="pie"\s+selected="selected"/,
+ 'ChartType is updated' );
+ok( $search->Load($id) );
+is( $search->SubValue('Query'), 'id=2', 'Query is indeed updated' );
+is( $search->SubValue('PrimaryGroupBy'),
+ 'Status', 'PrimaryGroupBy is indeed updated' );
+is( $search->SubValue('ChartStyle'), 'pie', 'ChartStyle is indeed updated' );
+
+# finally, let's test delete
+$m->submit_form(
+ form_name => 'SaveSearch',
+ button => 'SavedSearchDelete',
+);
+$m->content_like( qr/Chart first chart deleted/, 'found deleted message' );
+$m->content_unlike( qr/value="RT::User-\d+-SavedSearch-\d+"/,
+ 'no saved search' );
diff --git a/rt/t/web/saved_search_permissions.t b/rt/t/web/saved_search_permissions.t
new file mode 100644
index 0000000..f91ca13
--- /dev/null
+++ b/rt/t/web/saved_search_permissions.t
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 10;
+my $user = RT::User->new($RT::SystemUser);
+ok(
+ $user->Create(
+ Name => 'foo',
+ Privileged => 1,
+ Password => 'foobar'
+ )
+);
+
+my ( $url, $m ) = RT::Test->started_ok;
+ok( $m->login, 'root logged in' );
+$m->get_ok( $url . '/Search/Build.html?Query=id<100' );
+$m->submit_form(
+ form_name => 'BuildQuery',
+ fields => { SavedSearchDescription => 'test' },
+ button => 'SavedSearchSave',
+);
+$m->content_contains( q{name="SavedSearchDescription" value="test"},
+ 'saved test search' );
+my ($id) = $m->content =~ /value="(RT::User-\d+-SavedSearch-\d+)"/;
+ok( $m->login( 'foo', 'foobar' ), 'logged in' );
+$m->get_ok( $url . "/Search/Build.html?SavedSearchLoad=$id" );
+
+my $message = qq{Can not load saved search "$id"};
+RT::Interface::Web::EscapeUTF8( \$message );
+$m->content_contains( $message, 'user foo can not load saved search of root' );
+
+$m->warning_like( qr/User #\d+ tried to load container user #\d+/,
+ 'get warning' );
diff --git a/rt/t/web/search_bulk_update_links.t b/rt/t/web/search_bulk_update_links.t
new file mode 100644
index 0000000..d6bfdfd
--- /dev/null
+++ b/rt/t/web/search_bulk_update_links.t
@@ -0,0 +1,147 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 28;
+my ( $url, $m ) = RT::Test->started_ok;
+ok( $m->login, 'logged in' );
+
+my $rtname = RT->Config->Get('rtname');
+
+# create tickets
+use RT::Ticket;
+
+my ( @link_tickets, @search_tickets );
+for ( 1 .. 3 ) {
+ my $link_ticket = RT::Ticket->new($RT::SystemUser);
+ my ( $ret, $msg ) = $link_ticket->Create(
+ Subject => "link ticket $_",
+ Queue => 'general',
+ Owner => 'root',
+ Requestor => 'root@localhost',
+ );
+ ok( $ret, "link ticket created: $msg" );
+ push @link_tickets, $ret;
+}
+
+for ( 1 .. 3 ) {
+ my $ticket = RT::Ticket->new($RT::SystemUser);
+ my ( $ret, $msg ) = $ticket->Create(
+ Subject => "search ticket $_",
+ Queue => 'general',
+ Owner => 'root',
+ Requestor => 'root@localhost',
+ );
+ ok( $ret, "search ticket created: $msg" );
+ push @search_tickets, $ret;
+}
+
+# let's add link to 1 search ticket first
+$m->get_ok( $url . "/Search/Bulk.html?Query=id=$search_tickets[0]&Rows=10" );
+$m->content_contains( 'Current Links', 'has current links part' );
+$m->content_lacks( 'DeleteLink--', 'no delete link stuff' );
+$m->submit_form(
+ form_number => 3,
+ fields => {
+ 'Ticket-DependsOn' => $link_tickets[0],
+ 'Ticket-MemberOf' => $link_tickets[1],
+ 'Ticket-RefersTo' => $link_tickets[2],
+ },
+);
+$m->content_contains(
+ "Ticket $search_tickets[0] depends on Ticket $link_tickets[0]",
+ 'depends on msg',
+);
+$m->content_contains(
+ "Ticket $search_tickets[0] member of Ticket $link_tickets[1]",
+ 'member of msg',
+);
+$m->content_contains(
+ "Ticket $search_tickets[0] refers to Ticket $link_tickets[2]",
+ 'refers to msg',
+);
+
+$m->content_contains(
+ "DeleteLink--DependsOn-fsck.com-rt://$rtname/ticket/$link_tickets[0]",
+ 'found depends on link' );
+$m->content_contains(
+ "DeleteLink--MemberOf-fsck.com-rt://$rtname/ticket/$link_tickets[1]",
+ 'found member of link' );
+$m->content_contains(
+ "DeleteLink--RefersTo-fsck.com-rt://$rtname/ticket/$link_tickets[2]",
+ 'found refers to link' );
+
+# here we check the *real* bulk update
+my $query = join ' OR ', map { "id=$_" } @search_tickets;
+$m->get_ok( $url . "/Search/Bulk.html?Query=$query&Rows=10" );
+$m->content_contains( 'Current Links', 'has current links part' );
+$m->content_lacks( 'DeleteLink--', 'no delete link stuff' );
+
+# test DependsOn, MemberOf and RefersTo
+$m->submit_form(
+ form_number => 3,
+ fields => {
+ 'Ticket-DependsOn' => $link_tickets[0],
+ 'Ticket-MemberOf' => $link_tickets[1],
+ 'Ticket-RefersTo' => $link_tickets[2],
+ },
+);
+
+$m->content_contains(
+ "DeleteLink--DependsOn-fsck.com-rt://$rtname/ticket/$link_tickets[0]",
+ 'found depends on link' );
+$m->content_contains(
+ "DeleteLink--MemberOf-fsck.com-rt://$rtname/ticket/$link_tickets[1]",
+ 'found member of link' );
+$m->content_contains(
+ "DeleteLink--RefersTo-fsck.com-rt://$rtname/ticket/$link_tickets[2]",
+ 'found refers to link' );
+
+$m->submit_form(
+ form_number => 3,
+ fields => {
+ "DeleteLink--DependsOn-fsck.com-rt://$rtname/ticket/$link_tickets[0]" =>
+ 1,
+ "DeleteLink--MemberOf-fsck.com-rt://$rtname/ticket/$link_tickets[1]" =>
+ 1,
+ "DeleteLink--RefersTo-fsck.com-rt://$rtname/ticket/$link_tickets[2]" =>
+ 1,
+ },
+);
+
+$m->content_lacks( 'DeleteLink--', 'links are all deleted' );
+
+# test DependedOnBy, Members and ReferredToBy
+
+$m->submit_form(
+ form_number => 3,
+ fields => {
+ 'DependsOn-Ticket' => $link_tickets[0],
+ 'MemberOf-Ticket' => $link_tickets[1],
+ 'RefersTo-Ticket' => $link_tickets[2],
+ },
+);
+
+$m->content_contains(
+ "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[0]-DependsOn-",
+ 'found depended on link' );
+$m->content_contains(
+ "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[1]-MemberOf-",
+ 'found members link' );
+$m->content_contains(
+ "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[2]-RefersTo-",
+ 'found referrd to link' );
+
+$m->submit_form(
+ form_number => 3,
+ fields => {
+ "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[0]-DependsOn-" =>
+ 1,
+ "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[1]-MemberOf-" =>
+ 1,
+ "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[2]-RefersTo-" =>
+ 1,
+ },
+);
+$m->content_lacks( 'DeleteLink--', 'links are all deleted' );
+
diff --git a/rt/t/web/ticket-create-utf8.t b/rt/t/web/ticket-create-utf8.t
new file mode 100644
index 0000000..a4d7ae9
--- /dev/null
+++ b/rt/t/web/ticket-create-utf8.t
@@ -0,0 +1,83 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use RT::Test tests => 14;
+
+$RT::Test::SKIP_REQUEST_WORK_AROUND = 1;
+
+use Encode;
+
+my $ru_test = "\x{442}\x{435}\x{441}\x{442}";
+my $ru_autoreply = "\x{410}\x{432}\x{442}\x{43e}\x{43e}\x{442}\x{432}\x{435}\x{442}";
+my $ru_support = "\x{43f}\x{43e}\x{434}\x{434}\x{435}\x{440}\x{436}\x{43a}\x{430}";
+
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+
+RT::Test->set_rights(
+ Principal => 'Everyone',
+ Right => ['CreateTicket', 'ShowTicket', 'SeeQueue', 'ReplyToTicket', 'ModifyTicket'],
+);
+
+my ($baseurl, $m) = RT::Test->started_ok;
+ok $m->login, 'logged in';
+
+# create a ticket with a subject only
+{
+ ok $m->goto_create_ticket( $q ), "go to create ticket";
+ $m->form_number(3);
+ $m->field( Subject => $ru_test );
+ $m->submit;
+
+ $m->content_like(
+ qr{<td\s+class="message-header-value"[^>]*>\s*\Q$ru_test\E\s*</td>}i,
+ 'header on the page'
+ );
+
+ my $ticket = RT::Test->last_ticket;
+ is $ticket->Subject, $ru_test, "correct subject";
+}
+
+# create a ticket with a subject and content
+{
+ ok $m->goto_create_ticket( $q ), "go to create ticket";
+ $m->form_number(3);
+ $m->field( Subject => $ru_test );
+ $m->field( Content => $ru_support );
+ $m->submit;
+
+ $m->content_like(
+ qr{<td\s+class="message-header-value"[^>]*>\s*\Q$ru_test\E\s*</td>}i,
+ 'header on the page'
+ );
+ $m->content_like(
+ qr{\Q$ru_support\E}i,
+ 'content on the page'
+ );
+
+ my $ticket = RT::Test->last_ticket;
+ is $ticket->Subject, $ru_test, "correct subject";
+}
+
+# create a ticket with a subject and content
+{
+ ok $m->goto_create_ticket( $q ), "go to create ticket";
+ $m->form_number(3);
+ $m->field( Subject => $ru_test );
+ $m->field( Content => $ru_support );
+ $m->submit;
+
+ $m->content_like(
+ qr{<td\s+class="message-header-value"[^>]*>\s*\Q$ru_test\E\s*</td>}i,
+ 'header on the page'
+ );
+ $m->content_like(
+ qr{\Q$ru_support\E}i,
+ 'content on the page'
+ );
+
+ my $ticket = RT::Test->last_ticket;
+ is $ticket->Subject, $ru_test, "correct subject";
+}
diff --git a/rt/t/web/ticket_owner.t b/rt/t/web/ticket_owner.t
new file mode 100644
index 0000000..0bacaf1
--- /dev/null
+++ b/rt/t/web/ticket_owner.t
@@ -0,0 +1,356 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use RT::Test tests => 91;
+
+my $queue = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $queue && $queue->id, 'loaded or created queue';
+
+my $user_a = RT::Test->load_or_create_user(
+ Name => 'user_a', Password => 'password',
+);
+ok $user_a && $user_a->id, 'loaded or created user';
+
+my $user_b = RT::Test->load_or_create_user(
+ Name => 'user_b', Password => 'password',
+);
+ok $user_b && $user_b->id, 'loaded or created user';
+
+RT::Test->started_ok;
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket ReplyToTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
+), 'set rights');
+
+my $agent_a = RT::Test::Web->new;
+ok $agent_a->login('user_a', 'password'), 'logged in as user A';
+
+diag "current user has no right to own, nobody selected as owner on create" if $ENV{TEST_VERBOSE};
+{
+ $agent_a->get_ok('/', 'open home page');
+ $agent_a->form_name('CreateTicketInQueue');
+ $agent_a->select( 'Queue', $queue->id );
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Create a new ticket/i, 'opened create ticket page');
+ my $form = $agent_a->form_name('TicketCreate');
+ is $form->value('Owner'), $RT::Nobody->id, 'correct owner selected';
+ ok !grep($_ == $user_a->id, $form->find_input('Owner')->possible_values),
+ 'user A can not own tickets';
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
+ my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
+ ok $id, 'found id of the ticket';
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $RT::Nobody->id, 'correct owner';
+}
+
+diag "user can chose owner of a new ticket" if $ENV{TEST_VERBOSE};
+{
+ $agent_a->get_ok('/', 'open home page');
+ $agent_a->form_name('CreateTicketInQueue');
+ $agent_a->select( 'Queue', $queue->id );
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Create a new ticket/i, 'opened create ticket page');
+ my $form = $agent_a->form_name('TicketCreate');
+ is $form->value('Owner'), $RT::Nobody->id, 'correct owner selected';
+
+ ok grep($_ == $user_b->id, $form->find_input('Owner')->possible_values),
+ 'user B is listed as potential owner';
+ $agent_a->select('Owner', $user_b->id);
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
+ my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
+ ok $id, 'found id of the ticket';
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_b->id, 'correct owner';
+}
+
+my $agent_b = RT::Test::Web->new;
+ok $agent_b->login('user_b', 'password'), 'logged in as user B';
+
+diag "user A can not change owner after create" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ # try the following group of tests twice with different agents(logins)
+ my $test_cb = sub {
+ my $agent = shift;
+ $agent->goto_ticket( $id );
+ $agent->follow_link_ok({text => 'Basics'}, 'Ticket -> Basics');
+ my $form = $agent->form_number(3);
+ is $form->value('Owner'), $user_b->id, 'correct owner selected';
+ $agent->select('Owner', $RT::Nobody->id);
+ $agent->submit;
+
+ $agent->content_like(
+ qr/Permission denied/i,
+ 'no way to change owner after create if you have no rights'
+ );
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_b->id, 'correct owner';
+ };
+
+ $test_cb->($agent_a);
+ diag "even owner(user B) can not change owner" if $ENV{TEST_VERBOSE};
+ $test_cb->($agent_b);
+}
+
+diag "on reply correct owner is selected" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ $agent_a->follow_link_ok({text => 'Reply'}, 'Ticket -> Basics');
+
+ my $form = $agent_a->form_number(3);
+ is $form->value('Owner'), '', 'empty value selected';
+ $agent_a->submit;
+
+ $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_b->id, 'correct owner';
+}
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
+), 'set rights');
+
+diag "Couldn't take without coresponding right" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $RT::Nobody->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'no Take link';
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link as well';
+}
+
+diag "Couldn't steal without coresponding right" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link';
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'no Take link as well';
+}
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket TakeTicket)] },
+), 'set rights');
+
+diag "TakeTicket require OwnTicket to work" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $RT::Nobody->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'no Take link';
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link as well';
+}
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket TakeTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
+), 'set rights');
+
+diag "TakeTicket+OwnTicket work" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $RT::Nobody->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link';
+ $agent_a->follow_link_ok({text => 'Take'}, 'Ticket -> Take');
+
+ $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_a->id, 'correct owner';
+}
+
+diag "TakeTicket+OwnTicket don't work when owner is not nobody" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'no Take link';
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link too';
+}
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket StealTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
+), 'set rights');
+
+diag "StealTicket require OwnTicket to work" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link';
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'no Take link too';
+}
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket StealTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
+), 'set rights');
+
+diag "StealTicket+OwnTicket work" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'but no Take link';
+ $agent_a->follow_link_ok({text => 'Steal'}, 'Ticket -> Steal');
+
+ $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_a->id, 'correct owner';
+}
+
+diag "StealTicket+OwnTicket don't work when owner is nobody" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $RT::Nobody->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link';
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'no Take link as well (no right)';
+}
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket TakeTicket StealTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
+), 'set rights');
+
+diag "no Steal link when owner nobody" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $RT::Nobody->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'no Steal link';
+ ok( ($agent_a->find_all_links( text => 'Take' ))[0],
+ 'but have Take link');
+}
+
+diag "no Take link when owner is not nobody" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ ok !($agent_a->find_all_links( text => 'Take' ))[0],
+ 'no Take link';
+ ok( ($agent_a->find_all_links( text => 'Steal' ))[0],
+ 'but have Steal link');
+}
+
diff --git a/rt/t/web/ticket_seen.t b/rt/t/web/ticket_seen.t
new file mode 100644
index 0000000..00b2632
--- /dev/null
+++ b/rt/t/web/ticket_seen.t
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use RT::Test tests => 16;
+
+my $queue = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $queue && $queue->id, 'loaded or created queue';
+
+my $user_a = RT::Test->load_or_create_user(
+ Name => 'user_a', Password => 'password',
+);
+ok $user_a && $user_a->id, 'loaded or created user';
+
+my $user_b = RT::Test->load_or_create_user(
+ Name => 'user_b', Password => 'password',
+);
+ok $user_b && $user_b->id, 'loaded or created user';
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket ModifyTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket ReplyToTicket)] },
+), 'set rights');
+RT::Test->started_ok;
+
+my $agent_a = RT::Test::Web->new;
+ok $agent_a->login('user_a', 'password'), 'logged in as user A';
+
+my $agent_b = RT::Test::Web->new;
+ok $agent_b->login('user_b', 'password'), 'logged in as user B';
+
+diag "create a ticket for testing" if $ENV{TEST_VERBOSE};
+my $tid;
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($txn, $msg);
+ ($tid, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_a->id,
+ Subject => 'test',
+ );
+ ok $tid, 'created a ticket #'. $tid or diag "error: $msg";
+ is $ticket->Owner, $user_a->id, 'correct owner';
+}
+
+diag "user B adds a message, we check that user A see notification and can clear it" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_b );
+ $ticket->Load( $tid );
+ ok $ticket->id, 'loaded the ticket';
+
+ my ($status, $msg) = $ticket->Correspond( Content => 'bla-bla' );
+ ok $status, 'added reply' or diag "error: $msg";
+
+ $agent_a->goto_ticket($tid);
+ $agent_a->content_like(qr/bla-bla/ims, 'the message on the page');
+
+ $agent_a->content_like(
+ qr/unread message/ims,
+ 'we have not seen something'
+ );
+
+ $agent_a->follow_link_ok({text => 'jump to the first unread message and mark all messages as seen'}, 'try to mark all as seen');
+ $agent_a->content_like(
+ qr/Marked all messages as seen/ims,
+ 'see success message'
+ );
+
+ $agent_a->goto_ticket($tid);
+ $agent_a->content_unlike(
+ qr/unread message/ims,
+ 'we have seen everything, so no messages'
+ );
+}
+
+
+
+
+
diff --git a/rt/t/web/ticket_update_without_content.t b/rt/t/web/ticket_update_without_content.t
new file mode 100644
index 0000000..595cb74
--- /dev/null
+++ b/rt/t/web/ticket_update_without_content.t
@@ -0,0 +1,52 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 10;
+my ( $url, $m ) = RT::Test->started_ok;
+
+# merged tickets still show up in search
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ( $ret, $msg ) = $ticket->Create(
+ Subject => 'base ticket' . $$,
+ Queue => 'general',
+ Owner => 'root',
+ Requestor => 'root@localhost',
+ MIMEObj => MIME::Entity->build(
+ From => 'root@localhost',
+ To => 'rt@localhost',
+ Subject => 'base ticket' . $$,
+ Data => "",
+ ),
+);
+ok( $ret, "ticket created: $msg" );
+
+ok( $m->login, 'logged in' );
+
+$m->get_ok( $url . "/Ticket/ModifyAll.html?id=" . $ticket->id );
+
+$m->submit_form(
+ form_number => 3,
+ fields => { Priority => '1', }
+);
+
+$m->content_like(qr/priority changed/i);
+$m->content_unlike(qr/message recorded/i);
+
+my $root = RT::User->new( $RT::SystemUser );
+$root->Load('root');
+( $ret, $msg ) = $root->SetSignature(<<EOF);
+best wishes
+foo
+EOF
+
+ok( $ret, $msg );
+
+$m->get_ok( $url . "/Ticket/ModifyAll.html?id=" . $ticket->id );
+
+$m->submit_form(
+ form_number => 3,
+ fields => { Priority => '2', }
+);
+$m->content_like(qr/priority changed/i);
+$m->content_unlike(qr/message recorded/i);
diff --git a/rt/t/web/unlimited_search.t b/rt/t/web/unlimited_search.t
new file mode 100644
index 0000000..d98baaa
--- /dev/null
+++ b/rt/t/web/unlimited_search.t
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+
+use strict;
+
+use RT::Test tests => 8;
+RT::Test->started_ok;
+
+my $ticket = RT::Ticket->new($RT::SystemUser);
+for ( 1 .. 75 ) {
+ $ticket->Create(
+ Subject => 'Ticket ' . $_,
+ Queue => 'General',
+ Owner => 'root',
+ Requestor => 'unlimitedsearch@localhost',
+ );
+}
+
+my $agent = RT::Test::Web->new;
+ok $agent->login('root', 'password'), 'logged in as root';
+
+$agent->get_ok('/Search/Build.html');
+$agent->form_name('BuildQuery');
+$agent->field('idOp', '>');
+$agent->field('ValueOfid', '0');
+$agent->submit('AddClause');
+$agent->form_name('BuildQuery');
+$agent->field('RowsPerPage', '0');
+$agent->submit('DoSearch');
+$agent->follow_link_ok({text=>'Show Results'});
+$agent->content_like(qr/Ticket 75/);
+
+$agent->follow_link_ok({text=>'New Search'});
+$agent->form_name('BuildQuery');
+$agent->field('idOp', '>');
+$agent->field('ValueOfid', '0');
+$agent->submit('AddClause');
+$agent->form_name('BuildQuery');
+$agent->field('RowsPerPage', '50');
+$agent->submit('DoSearch');
+$agent->follow_link_ok({text=>'Bulk Update'});
+$agent->content_unlike(qr/Ticket 51/);